[mpich] 01/02: New release 3.3a2
Alastair McKinstry
mckinstry at moszumanska.debian.org
Thu Jul 6 14:40:53 UTC 2017
This is an automated email from the git hooks/post-receive script.
mckinstry pushed a commit to branch master
in repository mpich.
commit fe98bda4126f11627c960efdc18553ca859cc4ac
Author: Alastair McKinstry <mckinstry at debian.org>
Date: Thu Jul 6 14:00:07 2017 +0100
New release 3.3a2
---
.gitignore | 604 -
CHANGES | 28 +-
Makefile.am | 27 +-
Makefile.in | 7457 +-
README | 142 +-
README.envvar | 81 +-
RELEASE_NOTES | 12 +
aclocal.m4 | 4 +-
autogen.sh | 12 +-
confdb/aclocal_cc.m4 | 19 +-
confdb/aclocal_check_visibility.m4 | 123 +
confdb/aclocal_fc.m4 | 4 +-
confdb/aclocal_libs.m4 | 2 +-
confdb/aclocal_romio.m4 | 22 -
confdb/ax_tls.m4 | 13 +-
confdb/config.guess | 38 +-
confdb/config.sub | 26 +-
confdb/install-sh | 23 +-
confdb/libtool.m4 | 27 +-
confdb/ltmain.sh | 37 +-
confdb/random_r.m4 | 43 +
confdb/stdlib_h.m4 | 119 +
configure | 39134 +++++-----
configure.ac | 781 +-
doc/Makefile.mk | 1 +
doc/installguide/install.pdf | Bin 78624 -> 79131 bytes
doc/installguide/install.tex.vin | 8 +-
doc/logging/logging.pdf | Bin 34596 -> 34839 bytes
doc/mansrc/cmdnotes | 21 +
doc/mansrc/mpiconsts.txt | 547 +
doc/namepub/namepub.tex | 10 +-
doc/notes/coll/collective.txt | 8 +-
doc/notes/pt2pt/pt2pt.txt | 10 +-
doc/notes/rma/dm-mt.c | 2 +-
doc/notes/rma/dm.c | 2 +-
doc/notes/rma/mpi.c | 6 +-
doc/notes/rma/mpi.txt | 8 +-
doc/userguide/user.pdf | Bin 80256 -> 80729 bytes
doc/userguide/user.tex.vin | 8 +-
examples/Makefile.in | 155 +-
maint/Version | 2 +-
maint/checkbuilds | 3 +-
maint/checkbuilds.in | 3 +-
maint/code-cleanup.sh | 3 +
maint/configure | 19 +-
maint/configure.ac | 4 +-
maint/createcoverage | 2 +-
maint/createhtmlindex | 43 +-
maint/createhtmlindex.in | 43 +-
maint/cvardirs | 2 +-
maint/decode_handle | 38 +-
maint/docnotes | 4 +
maint/extractcvars | 19 +-
maint/extractcvars.in | 15 +-
maint/extracterrmsgs | 14 +-
maint/extractstates | 4 +-
maint/extractstates.in | 4 +-
maint/genstates | 6 +-
maint/genstates.in | 6 +-
maint/getcoverage | 2 +-
maint/getfuncstack | 147 +
{src/util/dbg => maint}/getfuncstack.in | 0
maint/git-conflicts.bash | 19 +-
maint/mpich-replace.sh | 2 +-
maint/release.pl | 8 +-
maint/version.m4 | 6 +-
man/man1/hydra_nameserver.1 | 4 +-
man/man1/hydra_persist.1 | 4 +-
man/man1/hydra_pmi_proxy.1 | 4 +-
man/man1/mpicc.1 | 2 +-
man/man1/mpicxx.1 | 2 +-
man/man1/mpiexec.1 | 2 +-
man/man1/mpif77.1 | 2 +-
man/man1/mpifort.1 | 2 +-
man/man3/Constants.3 | 1892 +
man/man3/MPIX_Comm_agree.3 | 10 +-
man/man3/MPIX_Comm_failure_ack.3 | 2 +-
man/man3/MPIX_Comm_failure_get_acked.3 | 2 +-
man/man3/MPIX_Comm_revoke.3 | 7 +-
man/man3/MPIX_Comm_shrink.3 | 10 +-
man/man3/MPI_Abort.3 | 2 +-
man/man3/MPI_Accumulate.3 | 2 +-
man/man3/MPI_Add_error_class.3 | 2 +-
man/man3/MPI_Add_error_code.3 | 2 +-
man/man3/MPI_Add_error_string.3 | 2 +-
man/man3/MPI_Address.3 | 4 +-
man/man3/MPI_Aint_add.3 | 7 +-
man/man3/MPI_Aint_diff.3 | 5 +-
man/man3/MPI_Allgather.3 | 2 +-
man/man3/MPI_Allgatherv.3 | 2 +-
man/man3/MPI_Alloc_mem.3 | 2 +-
man/man3/MPI_Allreduce.3 | 2 +-
man/man3/MPI_Alltoall.3 | 2 +-
man/man3/MPI_Alltoallv.3 | 2 +-
man/man3/MPI_Alltoallw.3 | 2 +-
man/man3/MPI_Attr_delete.3 | 2 +-
man/man3/MPI_Attr_get.3 | 2 +-
man/man3/MPI_Attr_put.3 | 2 +-
man/man3/MPI_Barrier.3 | 2 +-
man/man3/MPI_Bcast.3 | 2 +-
man/man3/MPI_Bsend.3 | 2 +-
man/man3/MPI_Bsend_init.3 | 2 +-
man/man3/MPI_Buffer_attach.3 | 2 +-
man/man3/MPI_Buffer_detach.3 | 2 +-
man/man3/MPI_Cancel.3 | 2 +-
man/man3/MPI_Cart_coords.3 | 2 +-
man/man3/MPI_Cart_create.3 | 2 +-
man/man3/MPI_Cart_get.3 | 2 +-
man/man3/MPI_Cart_map.3 | 2 +-
man/man3/MPI_Cart_rank.3 | 2 +-
man/man3/MPI_Cart_shift.3 | 2 +-
man/man3/MPI_Cart_sub.3 | 2 +-
man/man3/MPI_Cartdim_get.3 | 2 +-
man/man3/MPI_Close_port.3 | 2 +-
man/man3/MPI_Comm_accept.3 | 2 +-
man/man3/MPI_Comm_call_errhandler.3 | 2 +-
man/man3/MPI_Comm_compare.3 | 2 +-
man/man3/MPI_Comm_connect.3 | 2 +-
man/man3/MPI_Comm_create.3 | 2 +-
man/man3/MPI_Comm_create_errhandler.3 | 2 +-
man/man3/MPI_Comm_create_group.3 | 2 +-
man/man3/MPI_Comm_create_keyval.3 | 2 +-
man/man3/MPI_Comm_delete_attr.3 | 2 +-
man/man3/MPI_Comm_disconnect.3 | 2 +-
man/man3/MPI_Comm_dup.3 | 2 +-
man/man3/MPI_Comm_dup_with_info.3 | 2 +-
man/man3/MPI_Comm_free.3 | 2 +-
man/man3/MPI_Comm_free_keyval.3 | 2 +-
man/man3/MPI_Comm_get_attr.3 | 2 +-
man/man3/MPI_Comm_get_errhandler.3 | 2 +-
man/man3/MPI_Comm_get_info.3 | 2 +-
man/man3/MPI_Comm_get_name.3 | 2 +-
man/man3/MPI_Comm_get_parent.3 | 2 +-
man/man3/MPI_Comm_group.3 | 2 +-
man/man3/MPI_Comm_idup.3 | 2 +-
man/man3/MPI_Comm_join.3 | 2 +-
man/man3/MPI_Comm_rank.3 | 2 +-
man/man3/MPI_Comm_remote_group.3 | 2 +-
man/man3/MPI_Comm_remote_size.3 | 2 +-
man/man3/MPI_Comm_set_attr.3 | 2 +-
man/man3/MPI_Comm_set_errhandler.3 | 2 +-
man/man3/MPI_Comm_set_info.3 | 2 +-
man/man3/MPI_Comm_set_name.3 | 2 +-
man/man3/MPI_Comm_size.3 | 2 +-
man/man3/MPI_Comm_spawn.3 | 2 +-
man/man3/MPI_Comm_spawn_multiple.3 | 2 +-
man/man3/MPI_Comm_split.3 | 2 +-
man/man3/MPI_Comm_split_type.3 | 2 +-
man/man3/MPI_Comm_test_inter.3 | 2 +-
man/man3/MPI_Compare_and_swap.3 | 2 +-
man/man3/MPI_Dims_create.3 | 8 +-
man/man3/MPI_Dist_graph_create.3 | 2 +-
man/man3/MPI_Dist_graph_create_adjacent.3 | 2 +-
man/man3/MPI_Dist_graph_neighbors.3 | 2 +-
man/man3/MPI_Dist_graph_neighbors_count.3 | 2 +-
man/man3/MPI_Errhandler_create.3 | 2 +-
man/man3/MPI_Errhandler_free.3 | 2 +-
man/man3/MPI_Errhandler_get.3 | 2 +-
man/man3/MPI_Errhandler_set.3 | 2 +-
man/man3/MPI_Error_class.3 | 2 +-
man/man3/MPI_Error_string.3 | 2 +-
man/man3/MPI_Exscan.3 | 2 +-
man/man3/MPI_Fetch_and_op.3 | 2 +-
man/man3/MPI_File_c2f.3 | 2 +-
man/man3/MPI_File_call_errhandler.3 | 2 +-
man/man3/MPI_File_close.3 | 2 +-
man/man3/MPI_File_create_errhandler.3 | 2 +-
man/man3/MPI_File_delete.3 | 2 +-
man/man3/MPI_File_f2c.3 | 2 +-
man/man3/MPI_File_get_amode.3 | 2 +-
man/man3/MPI_File_get_atomicity.3 | 2 +-
man/man3/MPI_File_get_byte_offset.3 | 2 +-
man/man3/MPI_File_get_errhandler.3 | 2 +-
man/man3/MPI_File_get_group.3 | 2 +-
man/man3/MPI_File_get_info.3 | 2 +-
man/man3/MPI_File_get_position.3 | 2 +-
man/man3/MPI_File_get_position_shared.3 | 2 +-
man/man3/MPI_File_get_size.3 | 2 +-
man/man3/MPI_File_get_type_extent.3 | 2 +-
man/man3/MPI_File_get_view.3 | 2 +-
man/man3/MPI_File_iread.3 | 2 +-
man/man3/MPI_File_iread_all.3 | 2 +-
man/man3/MPI_File_iread_at.3 | 2 +-
man/man3/MPI_File_iread_at_all.3 | 2 +-
man/man3/MPI_File_iread_shared.3 | 2 +-
man/man3/MPI_File_iwrite.3 | 2 +-
man/man3/MPI_File_iwrite_all.3 | 2 +-
man/man3/MPI_File_iwrite_at.3 | 2 +-
man/man3/MPI_File_iwrite_at_all.3 | 2 +-
man/man3/MPI_File_iwrite_shared.3 | 2 +-
man/man3/MPI_File_open.3 | 2 +-
man/man3/MPI_File_preallocate.3 | 2 +-
man/man3/MPI_File_read.3 | 2 +-
man/man3/MPI_File_read_all.3 | 2 +-
man/man3/MPI_File_read_all_begin.3 | 2 +-
man/man3/MPI_File_read_all_end.3 | 2 +-
man/man3/MPI_File_read_at.3 | 2 +-
man/man3/MPI_File_read_at_all.3 | 2 +-
man/man3/MPI_File_read_at_all_begin.3 | 2 +-
man/man3/MPI_File_read_at_all_end.3 | 2 +-
man/man3/MPI_File_read_ordered.3 | 2 +-
man/man3/MPI_File_read_ordered_begin.3 | 2 +-
man/man3/MPI_File_read_ordered_end.3 | 2 +-
man/man3/MPI_File_read_shared.3 | 2 +-
man/man3/MPI_File_seek.3 | 2 +-
man/man3/MPI_File_seek_shared.3 | 2 +-
man/man3/MPI_File_set_atomicity.3 | 2 +-
man/man3/MPI_File_set_errhandler.3 | 2 +-
man/man3/MPI_File_set_info.3 | 2 +-
man/man3/MPI_File_set_size.3 | 2 +-
man/man3/MPI_File_set_view.3 | 2 +-
man/man3/MPI_File_sync.3 | 2 +-
man/man3/MPI_File_write.3 | 2 +-
man/man3/MPI_File_write_all.3 | 2 +-
man/man3/MPI_File_write_all_begin.3 | 2 +-
man/man3/MPI_File_write_all_end.3 | 2 +-
man/man3/MPI_File_write_at.3 | 2 +-
man/man3/MPI_File_write_at_all.3 | 2 +-
man/man3/MPI_File_write_at_all_begin.3 | 2 +-
man/man3/MPI_File_write_at_all_end.3 | 2 +-
man/man3/MPI_File_write_ordered.3 | 2 +-
man/man3/MPI_File_write_ordered_begin.3 | 2 +-
man/man3/MPI_File_write_ordered_end.3 | 2 +-
man/man3/MPI_File_write_shared.3 | 2 +-
man/man3/MPI_Finalize.3 | 2 +-
man/man3/MPI_Finalized.3 | 2 +-
man/man3/MPI_Free_mem.3 | 2 +-
man/man3/MPI_Gather.3 | 2 +-
man/man3/MPI_Gatherv.3 | 2 +-
man/man3/MPI_Get.3 | 2 +-
man/man3/MPI_Get_accumulate.3 | 2 +-
man/man3/MPI_Get_address.3 | 2 +-
man/man3/MPI_Get_count.3 | 2 +-
man/man3/MPI_Get_elements.3 | 2 +-
man/man3/MPI_Get_elements_x.3 | 2 +-
man/man3/MPI_Get_library_version.3 | 2 +-
man/man3/MPI_Get_processor_name.3 | 2 +-
man/man3/MPI_Get_version.3 | 2 +-
man/man3/MPI_Graph_create.3 | 2 +-
man/man3/MPI_Graph_get.3 | 2 +-
man/man3/MPI_Graph_map.3 | 2 +-
man/man3/MPI_Graph_neighbors.3 | 2 +-
man/man3/MPI_Graph_neighbors_count.3 | 2 +-
man/man3/MPI_Graphdims_get.3 | 2 +-
man/man3/MPI_Grequest_complete.3 | 2 +-
man/man3/MPI_Grequest_start.3 | 2 +-
man/man3/MPI_Group_compare.3 | 2 +-
man/man3/MPI_Group_difference.3 | 2 +-
man/man3/MPI_Group_excl.3 | 2 +-
man/man3/MPI_Group_free.3 | 2 +-
man/man3/MPI_Group_incl.3 | 2 +-
man/man3/MPI_Group_intersection.3 | 2 +-
man/man3/MPI_Group_range_excl.3 | 2 +-
man/man3/MPI_Group_range_incl.3 | 2 +-
man/man3/MPI_Group_rank.3 | 2 +-
man/man3/MPI_Group_size.3 | 2 +-
man/man3/MPI_Group_translate_ranks.3 | 2 +-
man/man3/MPI_Group_union.3 | 2 +-
man/man3/MPI_Iallgather.3 | 2 +-
man/man3/MPI_Iallgatherv.3 | 2 +-
man/man3/MPI_Iallreduce.3 | 2 +-
man/man3/MPI_Ialltoall.3 | 2 +-
man/man3/MPI_Ialltoallv.3 | 2 +-
man/man3/MPI_Ialltoallw.3 | 2 +-
man/man3/MPI_Ibarrier.3 | 2 +-
man/man3/MPI_Ibcast.3 | 2 +-
man/man3/MPI_Ibsend.3 | 2 +-
man/man3/MPI_Iexscan.3 | 2 +-
man/man3/MPI_Igather.3 | 2 +-
man/man3/MPI_Igatherv.3 | 2 +-
man/man3/MPI_Improbe.3 | 2 +-
man/man3/MPI_Imrecv.3 | 2 +-
man/man3/MPI_Ineighbor_allgather.3 | 2 +-
man/man3/MPI_Ineighbor_allgatherv.3 | 2 +-
man/man3/MPI_Ineighbor_alltoall.3 | 2 +-
man/man3/MPI_Ineighbor_alltoallv.3 | 2 +-
man/man3/MPI_Ineighbor_alltoallw.3 | 2 +-
man/man3/MPI_Info_create.3 | 2 +-
man/man3/MPI_Info_delete.3 | 2 +-
man/man3/MPI_Info_dup.3 | 2 +-
man/man3/MPI_Info_free.3 | 2 +-
man/man3/MPI_Info_get.3 | 2 +-
man/man3/MPI_Info_get_nkeys.3 | 2 +-
man/man3/MPI_Info_get_nthkey.3 | 2 +-
man/man3/MPI_Info_get_valuelen.3 | 2 +-
man/man3/MPI_Info_set.3 | 2 +-
man/man3/MPI_Init.3 | 2 +-
man/man3/MPI_Init_thread.3 | 2 +-
man/man3/MPI_Initialized.3 | 2 +-
man/man3/MPI_Intercomm_create.3 | 2 +-
man/man3/MPI_Intercomm_merge.3 | 2 +-
man/man3/MPI_Iprobe.3 | 2 +-
man/man3/MPI_Irecv.3 | 2 +-
man/man3/MPI_Ireduce.3 | 2 +-
man/man3/MPI_Ireduce_scatter.3 | 2 +-
man/man3/MPI_Ireduce_scatter_block.3 | 2 +-
man/man3/MPI_Irsend.3 | 2 +-
man/man3/MPI_Is_thread_main.3 | 2 +-
man/man3/MPI_Iscan.3 | 2 +-
man/man3/MPI_Iscatter.3 | 2 +-
man/man3/MPI_Iscatterv.3 | 2 +-
man/man3/MPI_Isend.3 | 2 +-
man/man3/MPI_Issend.3 | 2 +-
man/man3/MPI_Keyval_create.3 | 2 +-
man/man3/MPI_Keyval_free.3 | 2 +-
man/man3/MPI_Lookup_name.3 | 2 +-
man/man3/MPI_Mprobe.3 | 2 +-
man/man3/MPI_Mrecv.3 | 2 +-
man/man3/MPI_Neighbor_allgather.3 | 2 +-
man/man3/MPI_Neighbor_allgatherv.3 | 2 +-
man/man3/MPI_Neighbor_alltoall.3 | 2 +-
man/man3/MPI_Neighbor_alltoallv.3 | 2 +-
man/man3/MPI_Neighbor_alltoallw.3 | 2 +-
man/man3/MPI_Op_commute.3 | 2 +-
man/man3/MPI_Op_create.3 | 2 +-
man/man3/MPI_Op_free.3 | 2 +-
man/man3/MPI_Open_port.3 | 2 +-
man/man3/MPI_Pack.3 | 2 +-
man/man3/MPI_Pack_external.3 | 2 +-
man/man3/MPI_Pack_external_size.3 | 2 +-
man/man3/MPI_Pack_size.3 | 2 +-
man/man3/MPI_Pcontrol.3 | 2 +-
man/man3/MPI_Probe.3 | 2 +-
man/man3/MPI_Publish_name.3 | 2 +-
man/man3/MPI_Put.3 | 2 +-
man/man3/MPI_Query_thread.3 | 2 +-
man/man3/MPI_Raccumulate.3 | 2 +-
man/man3/MPI_Recv.3 | 2 +-
man/man3/MPI_Recv_init.3 | 2 +-
man/man3/MPI_Reduce.3 | 2 +-
man/man3/MPI_Reduce_local.3 | 2 +-
man/man3/MPI_Reduce_scatter.3 | 2 +-
man/man3/MPI_Reduce_scatter_block.3 | 2 +-
man/man3/MPI_Register_datarep.3 | 2 +-
man/man3/MPI_Request_free.3 | 2 +-
man/man3/MPI_Request_get_status.3 | 2 +-
man/man3/MPI_Rget.3 | 2 +-
man/man3/MPI_Rget_accumulate.3 | 2 +-
man/man3/MPI_Rput.3 | 2 +-
man/man3/MPI_Rsend.3 | 2 +-
man/man3/MPI_Rsend_init.3 | 2 +-
man/man3/MPI_Scan.3 | 2 +-
man/man3/MPI_Scatter.3 | 2 +-
man/man3/MPI_Scatterv.3 | 2 +-
man/man3/MPI_Send.3 | 2 +-
man/man3/MPI_Send_init.3 | 2 +-
man/man3/MPI_Sendrecv.3 | 2 +-
man/man3/MPI_Sendrecv_replace.3 | 2 +-
man/man3/MPI_Ssend.3 | 2 +-
man/man3/MPI_Ssend_init.3 | 2 +-
man/man3/MPI_Start.3 | 2 +-
man/man3/MPI_Startall.3 | 2 +-
man/man3/MPI_Status_set_cancelled.3 | 2 +-
man/man3/MPI_Status_set_elements.3 | 2 +-
man/man3/MPI_Status_set_elements_x.3 | 4 +-
man/man3/MPI_T_category_changed.3 | 2 +-
man/man3/MPI_T_category_get_categories.3 | 2 +-
man/man3/MPI_T_category_get_cvars.3 | 2 +-
man/man3/MPI_T_category_get_index.3 | 7 +-
man/man3/MPI_T_category_get_info.3 | 2 +-
man/man3/MPI_T_category_get_num.3 | 2 +-
man/man3/MPI_T_category_get_pvars.3 | 2 +-
man/man3/MPI_T_cvar_get_index.3 | 7 +-
man/man3/MPI_T_cvar_get_info.3 | 2 +-
man/man3/MPI_T_cvar_get_num.3 | 2 +-
man/man3/MPI_T_cvar_handle_alloc.3 | 2 +-
man/man3/MPI_T_cvar_handle_free.3 | 2 +-
man/man3/MPI_T_cvar_read.3 | 2 +-
man/man3/MPI_T_cvar_write.3 | 2 +-
man/man3/MPI_T_enum_get_info.3 | 2 +-
man/man3/MPI_T_enum_get_item.3 | 2 +-
man/man3/MPI_T_finalize.3 | 2 +-
man/man3/MPI_T_init_thread.3 | 2 +-
man/man3/MPI_T_pvar_get_index.3 | 7 +-
man/man3/MPI_T_pvar_get_info.3 | 2 +-
man/man3/MPI_T_pvar_get_num.3 | 2 +-
man/man3/MPI_T_pvar_handle_alloc.3 | 2 +-
man/man3/MPI_T_pvar_handle_free.3 | 2 +-
man/man3/MPI_T_pvar_read.3 | 2 +-
man/man3/MPI_T_pvar_readreset.3 | 2 +-
man/man3/MPI_T_pvar_reset.3 | 2 +-
man/man3/MPI_T_pvar_session_create.3 | 2 +-
man/man3/MPI_T_pvar_session_free.3 | 2 +-
man/man3/MPI_T_pvar_start.3 | 2 +-
man/man3/MPI_T_pvar_stop.3 | 2 +-
man/man3/MPI_T_pvar_write.3 | 2 +-
man/man3/MPI_Test.3 | 2 +-
man/man3/MPI_Test_cancelled.3 | 2 +-
man/man3/MPI_Testall.3 | 2 +-
man/man3/MPI_Testany.3 | 2 +-
man/man3/MPI_Testsome.3 | 2 +-
man/man3/MPI_Topo_test.3 | 2 +-
man/man3/MPI_Type_commit.3 | 2 +-
man/man3/MPI_Type_contiguous.3 | 2 +-
man/man3/MPI_Type_create_darray.3 | 2 +-
man/man3/MPI_Type_create_hindexed.3 | 2 +-
man/man3/MPI_Type_create_hindexed_block.3 | 2 +-
man/man3/MPI_Type_create_hvector.3 | 2 +-
man/man3/MPI_Type_create_indexed_block.3 | 2 +-
man/man3/MPI_Type_create_keyval.3 | 2 +-
man/man3/MPI_Type_create_resized.3 | 2 +-
man/man3/MPI_Type_create_struct.3 | 2 +-
man/man3/MPI_Type_create_subarray.3 | 2 +-
man/man3/MPI_Type_delete_attr.3 | 2 +-
man/man3/MPI_Type_dup.3 | 2 +-
man/man3/MPI_Type_extent.3 | 2 +-
man/man3/MPI_Type_free.3 | 2 +-
man/man3/MPI_Type_free_keyval.3 | 2 +-
man/man3/MPI_Type_get_attr.3 | 2 +-
man/man3/MPI_Type_get_contents.3 | 2 +-
man/man3/MPI_Type_get_envelope.3 | 2 +-
man/man3/MPI_Type_get_extent.3 | 2 +-
man/man3/MPI_Type_get_extent_x.3 | 4 +-
man/man3/MPI_Type_get_name.3 | 2 +-
man/man3/MPI_Type_get_true_extent.3 | 2 +-
man/man3/MPI_Type_get_true_extent_x.3 | 4 +-
man/man3/MPI_Type_hindexed.3 | 6 +-
man/man3/MPI_Type_hvector.3 | 2 +-
man/man3/MPI_Type_indexed.3 | 2 +-
man/man3/MPI_Type_lb.3 | 2 +-
man/man3/MPI_Type_match_size.3 | 2 +-
man/man3/MPI_Type_set_attr.3 | 2 +-
man/man3/MPI_Type_set_name.3 | 2 +-
man/man3/MPI_Type_size.3 | 2 +-
man/man3/MPI_Type_size_x.3 | 2 +-
man/man3/MPI_Type_struct.3 | 8 +-
man/man3/MPI_Type_ub.3 | 2 +-
man/man3/MPI_Type_vector.3 | 2 +-
man/man3/MPI_Unpack.3 | 2 +-
man/man3/MPI_Unpack_external.3 | 2 +-
man/man3/MPI_Unpublish_name.3 | 2 +-
man/man3/MPI_Wait.3 | 2 +-
man/man3/MPI_Waitall.3 | 2 +-
man/man3/MPI_Waitany.3 | 2 +-
man/man3/MPI_Waitsome.3 | 2 +-
man/man3/MPI_Win_allocate.3 | 2 +-
man/man3/MPI_Win_allocate_shared.3 | 2 +-
man/man3/MPI_Win_attach.3 | 2 +-
man/man3/MPI_Win_call_errhandler.3 | 2 +-
man/man3/MPI_Win_complete.3 | 2 +-
man/man3/MPI_Win_create.3 | 2 +-
man/man3/MPI_Win_create_dynamic.3 | 2 +-
man/man3/MPI_Win_create_errhandler.3 | 2 +-
man/man3/MPI_Win_create_keyval.3 | 2 +-
man/man3/MPI_Win_delete_attr.3 | 2 +-
man/man3/MPI_Win_detach.3 | 2 +-
man/man3/MPI_Win_fence.3 | 2 +-
man/man3/MPI_Win_flush.3 | 2 +-
man/man3/MPI_Win_flush_all.3 | 2 +-
man/man3/MPI_Win_flush_local.3 | 2 +-
man/man3/MPI_Win_flush_local_all.3 | 2 +-
man/man3/MPI_Win_free.3 | 2 +-
man/man3/MPI_Win_free_keyval.3 | 2 +-
man/man3/MPI_Win_get_attr.3 | 2 +-
man/man3/MPI_Win_get_errhandler.3 | 2 +-
man/man3/MPI_Win_get_group.3 | 2 +-
man/man3/MPI_Win_get_info.3 | 2 +-
man/man3/MPI_Win_get_name.3 | 2 +-
man/man3/MPI_Win_lock.3 | 2 +-
man/man3/MPI_Win_lock_all.3 | 2 +-
man/man3/MPI_Win_post.3 | 2 +-
man/man3/MPI_Win_set_attr.3 | 2 +-
man/man3/MPI_Win_set_errhandler.3 | 2 +-
man/man3/MPI_Win_set_info.3 | 2 +-
man/man3/MPI_Win_set_name.3 | 2 +-
man/man3/MPI_Win_shared_query.3 | 2 +-
man/man3/MPI_Win_start.3 | 2 +-
man/man3/MPI_Win_sync.3 | 2 +-
man/man3/MPI_Win_test.3 | 2 +-
man/man3/MPI_Win_unlock.3 | 2 +-
man/man3/MPI_Win_unlock_all.3 | 2 +-
man/man3/MPI_Win_wait.3 | 2 +-
man/man3/MPI_Wtick.3 | 2 +-
man/man3/MPI_Wtime.3 | 2 +-
mpi.def | 28 +-
mpich.def | 28 +-
src/binding/cxx/.state-cache | 4 +-
src/binding/cxx/buildiface | 73 +-
src/binding/cxx/initcxx.cxx | 63 +-
src/binding/cxx/mpicxx.h.in | 20 +-
src/binding/fortran/mpif_h/.state-cache | 1524 +-
src/binding/fortran/mpif_h/adderrstringf.c | 4 +-
src/binding/fortran/mpif_h/addressf.c | 3 +-
src/binding/fortran/mpif_h/attr_getf.c | 6 +-
src/binding/fortran/mpif_h/attr_putf.c | 2 +-
src/binding/fortran/mpif_h/buildiface | 136 +-
src/binding/fortran/mpif_h/cart_createf.c | 8 +-
src/binding/fortran/mpif_h/cart_getf.c | 2 +-
src/binding/fortran/mpif_h/cart_mapf.c | 6 +-
src/binding/fortran/mpif_h/cart_subf.c | 6 +-
src/binding/fortran/mpif_h/close_portf.c | 4 +-
src/binding/fortran/mpif_h/comm_acceptf.c | 4 +-
src/binding/fortran/mpif_h/comm_connectf.c | 4 +-
src/binding/fortran/mpif_h/comm_get_attrf.c | 4 +-
src/binding/fortran/mpif_h/comm_set_attrf.c | 2 +-
src/binding/fortran/mpif_h/comm_set_namef.c | 4 +-
src/binding/fortran/mpif_h/comm_spawnf.c | 12 +-
src/binding/fortran/mpif_h/commgetnamf.c | 4 +-
src/binding/fortran/mpif_h/commnewkeyf.c | 16 +-
src/binding/fortran/mpif_h/commtesticf.c | 2 +-
.../fortran/mpif_h/dist_graph_create_adjacentf.c | 2 +-
src/binding/fortran/mpif_h/dist_graph_createf.c | 2 +-
.../fortran/mpif_h/dist_graph_neighbors_countf.c | 2 +-
src/binding/fortran/mpif_h/dup_comm_fnf.c | 2 +-
src/binding/fortran/mpif_h/dup_fnf.c | 2 +-
src/binding/fortran/mpif_h/dup_type_fnf.c | 2 +-
src/binding/fortran/mpif_h/dup_win_fnf.c | 2 +-
src/binding/fortran/mpif_h/error_stringf.c | 4 +-
src/binding/fortran/mpif_h/file_deletef.c | 4 +-
src/binding/fortran/mpif_h/file_get_atomicityf.c | 2 +-
src/binding/fortran/mpif_h/file_get_viewf.c | 4 +-
src/binding/fortran/mpif_h/file_openf.c | 4 +-
src/binding/fortran/mpif_h/file_set_atomicityf.c | 2 +-
src/binding/fortran/mpif_h/file_set_viewf.c | 4 +-
src/binding/fortran/mpif_h/finalizedf.c | 2 +-
src/binding/fortran/mpif_h/get_library_versionf.c | 4 +-
src/binding/fortran/mpif_h/getaddressf.c | 3 +-
src/binding/fortran/mpif_h/getpnamef.c | 4 +-
src/binding/fortran/mpif_h/graph_createf.c | 2 +-
src/binding/fortran/mpif_h/greqstartf.c | 2 +-
src/binding/fortran/mpif_h/icmergef.c | 2 +-
src/binding/fortran/mpif_h/improbef.c | 2 +-
src/binding/fortran/mpif_h/info_deletef.c | 4 +-
src/binding/fortran/mpif_h/info_getf.c | 10 +-
src/binding/fortran/mpif_h/info_setf.c | 8 +-
src/binding/fortran/mpif_h/infognthkf.c | 4 +-
src/binding/fortran/mpif_h/infovallenf.c | 6 +-
src/binding/fortran/mpif_h/initializedf.c | 2 +-
src/binding/fortran/mpif_h/iprobef.c | 2 +-
src/binding/fortran/mpif_h/isthrmainf.c | 2 +-
src/binding/fortran/mpif_h/keyval_createf.c | 16 +-
src/binding/fortran/mpif_h/lookup_namef.c | 8 +-
src/binding/fortran/mpif_h/mpi_fortimpl.h | 32 +-
src/binding/fortran/mpif_h/mpichf.def | 4 +-
src/binding/fortran/mpif_h/mpichfg.def | 4 +-
src/binding/fortran/mpif_h/mpichfs.def | 4 +-
src/binding/fortran/mpif_h/mpif.h.in | 176 +-
src/binding/fortran/mpif_h/null_comm_copy_fnf.c | 2 +-
src/binding/fortran/mpif_h/null_copy_fnf.c | 2 +-
src/binding/fortran/mpif_h/null_type_copy_fnf.c | 2 +-
src/binding/fortran/mpif_h/null_win_copy_fnf.c | 2 +-
src/binding/fortran/mpif_h/op_commutativef.c | 2 +-
src/binding/fortran/mpif_h/op_createf.c | 2 +-
src/binding/fortran/mpif_h/open_portf.c | 4 +-
src/binding/fortran/mpif_h/pack_externalf.c | 4 +-
src/binding/fortran/mpif_h/packesizef.c | 4 +-
src/binding/fortran/mpif_h/publish_namef.c | 8 +-
src/binding/fortran/mpif_h/register_datarepf.c | 4 +-
src/binding/fortran/mpif_h/reqgetstatf.c | 2 +-
src/binding/fortran/mpif_h/setbot.c.in | 34 +-
src/binding/fortran/mpif_h/setbotf.f.in | 4 +-
src/binding/fortran/mpif_h/spawnmultf.c | 20 +-
src/binding/fortran/mpif_h/statgetclf.c | 2 +-
src/binding/fortran/mpif_h/statusc2f.c | 5 +-
src/binding/fortran/mpif_h/statusf2c.c | 5 +-
src/binding/fortran/mpif_h/testallf.c | 2 +-
src/binding/fortran/mpif_h/testanyf.c | 2 +-
src/binding/fortran/mpif_h/testcancelf.c | 2 +-
src/binding/fortran/mpif_h/testf.c | 2 +-
src/binding/fortran/mpif_h/type_get_attrf.c | 4 +-
src/binding/fortran/mpif_h/type_hindexedf.c | 4 +-
src/binding/fortran/mpif_h/type_structf.c | 4 +-
src/binding/fortran/mpif_h/typegnamef.c | 4 +-
src/binding/fortran/mpif_h/typenewkeyf.c | 14 +-
src/binding/fortran/mpif_h/typesetattrf.c | 2 +-
src/binding/fortran/mpif_h/typesetnamef.c | 4 +-
src/binding/fortran/mpif_h/unpackextf.c | 4 +-
src/binding/fortran/mpif_h/unpubnamef.c | 8 +-
src/binding/fortran/mpif_h/win_get_attrf.c | 4 +-
src/binding/fortran/mpif_h/win_get_namef.c | 4 +-
src/binding/fortran/mpif_h/win_set_attrf.c | 2 +-
src/binding/fortran/mpif_h/win_set_namef.c | 4 +-
src/binding/fortran/mpif_h/win_testf.c | 2 +-
src/binding/fortran/mpif_h/winnewkeyf.c | 14 +-
src/binding/fortran/mpif_h/wtickf.c | 1 -
src/binding/fortran/mpif_h/wtimef.c | 1 -
src/binding/fortran/use_mpi/.state-cache | 40 +-
src/binding/fortran/use_mpi/binding.sub | 1 +
src/binding/fortran/use_mpi/create_f90_complex.c | 6 +-
src/binding/fortran/use_mpi/create_f90_int.c | 6 +-
src/binding/fortran/use_mpi/create_f90_real.c | 6 +-
src/binding/fortran/use_mpi/create_f90_util.c | 6 +-
src/binding/fortran/use_mpi/mpi_base.f90.in | 1638 +-
src/binding/fortran/use_mpi/mpi_constants.f90.in | 76 +-
src/binding/fortran/use_mpi/mpi_t1.f90 | 2568 +-
src/binding/fortran/use_mpi_f08/Makefile.mk | 258 +-
.../fortran/use_mpi_f08/mpi_c_interface_glue.f90 | 16 +-
.../fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 | 12 +-
src/binding/fortran/use_mpi_f08/mpi_f08_types.f90 | 5 +
.../fortran/use_mpi_f08/wrappers_c/.state-cache | 480 +-
.../fortran/use_mpi_f08/wrappers_c/buildiface | 6 +-
src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c | 4 +-
.../fortran/use_mpi_f08/wrappers_c/comm_spawn_c.c | 8 +-
.../use_mpi_f08/wrappers_c/comm_spawn_multiple_c.c | 26 +-
.../fortran/use_mpi_f08/wrappers_c/f_sync_reg_c.c | 5 +
src/binding/fortran/use_mpi_f08/wrappers_c/utils.c | 7 +-
.../use_mpi_f08/wrappers_f/cart_sub_f08ts.f90 | 2 +-
.../wrappers_f/comm_create_keyval_f08ts.f90 | 4 +-
.../wrappers_f/profiling/pcart_sub_f08ts.f90 | 2 +-
.../profiling/pcomm_create_keyval_f08ts.f90 | 4 +-
.../profiling/ptype_create_keyval_f08ts.f90 | 4 +-
.../profiling/pwin_create_keyval_f08ts.f90 | 4 +-
.../wrappers_f/type_create_keyval_f08ts.f90 | 4 +-
.../wrappers_f/win_create_keyval_f08ts.f90 | 4 +-
src/cross/powerpc64-bgq-linux | 27 +
src/env/mpichversion.c | 25 +-
src/glue/romio/all_romio_symbols | 3 +
src/glue/romio/all_romio_symbols.c | 3 +
src/glue/romio/glue_romio.c | 37 +-
src/include/.state-cache | 181 +-
src/include/Makefile.mk | 71 +-
src/include/glue_romio.h.in | 69 -
src/include/mpi.h.in | 1468 +-
src/include/mpi_attr.h | 25 -
src/include/mpi_f77interface.h | 19 -
src/include/mpi_fortlogical.h | 45 -
src/include/mpi_lang.h | 77 -
src/include/mpiallstates.h | 100 +-
src/include/mpibsend.h | 76 -
src/include/mpich_cvars.h | 175 -
src/include/mpichconf.h.in | 229 +-
src/include/mpichconfconst.h | 49 +-
src/include/mpichinfo.h.in | 1 +
src/include/mpierror.h | 191 -
src/include/mpierrs.h | 856 -
src/include/mpiext.h | 43 -
src/include/mpifunc.h | 38 -
src/include/mpihandlemem.h | 392 -
src/include/mpii_bsend.h | 76 +
src/include/mpii_cxxinterface.h | 15 +
src/include/mpii_f77interface.h | 24 +
src/include/mpii_fortlogical.h | 45 +
src/include/mpiimpl.h | 4398 +-
src/include/mpiinfo.h | 7 -
src/include/mpimem.h | 482 -
src/include/mpir_assert.h | 130 +
src/include/mpir_attr.h | 205 +
src/include/mpir_attr_generic.h | 188 +
src/include/mpir_coll.h | 451 +
src/include/mpir_comm.h | 355 +
src/include/mpir_contextid.h | 105 +
src/include/mpir_cvars.h | 183 +
src/include/mpir_datatype.h | 64 +
src/include/mpir_dbg.h | 24 +
src/include/mpir_debugger.h | 38 +
src/include/mpir_err.h | 1000 +
src/include/mpir_errhandler.h | 96 +
src/include/mpir_ext.h.in | 97 +
src/include/mpir_func.h | 129 +
src/include/mpir_group.h | 121 +
src/include/mpir_handlemem.h | 538 +
src/include/mpir_info.h | 105 +
src/include/mpir_mem.h | 268 +
src/include/mpir_misc.h | 91 +
src/include/mpir_misc_post.h | 35 +
src/include/mpir_nbc.h | 76 +-
src/include/mpir_objects.h | 494 +
src/include/mpir_op.h | 169 +
src/include/mpir_op_util.h | 375 +
src/include/mpir_pointers.h | 79 +
src/include/mpir_process.h | 63 +
src/include/mpir_pt2pt.h | 20 +
src/include/mpir_refcount.h | 26 +
src/include/mpir_refcount_global.h | 49 +
src/include/mpir_refcount_pobj.h | 111 +
src/include/mpir_refcount_single.h | 48 +
src/include/mpir_request.h | 308 +
src/include/mpir_status.h | 65 +
src/include/mpir_strerror.h | 15 +
src/include/mpir_tags.h | 111 +
src/include/mpir_thread.h | 85 +
src/include/mpir_topo.h | 112 +
src/include/mpir_type_defs.h | 76 +-
src/include/mpir_utarray.h | 258 +
src/include/mpir_win.h | 93 +
src/include/mpishared.h | 135 -
src/include/mpistates.h | 318 -
src/include/mpit.h | 235 +-
src/include/mpitimerimpl.h | 217 -
src/include/mpitimpl.h | 332 +-
src/include/mpiu_utarray.h | 258 -
src/include/mpiu_uthash.h | 951 -
src/include/mpiutil.h | 17 -
src/include/oputil.h | 375 -
src/include/pmi2.h | 12 +-
src/include/rlog_macros.h | 146 +-
src/mpi/attr/.state-cache | 140 +-
src/mpi/attr/attr.h | 18 +-
src/mpi/attr/attr_delete.c | 18 +-
src/mpi/attr/attr_get.c | 18 +-
src/mpi/attr/attr_put.c | 14 +-
src/mpi/attr/attrutil.c | 92 +-
src/mpi/attr/comm_create_keyval.c | 22 +-
src/mpi/attr/comm_delete_attr.c | 28 +-
src/mpi/attr/comm_free_keyval.c | 22 +-
src/mpi/attr/comm_get_attr.c | 60 +-
src/mpi/attr/comm_set_attr.c | 70 +-
src/mpi/attr/dup_fn.c | 6 +-
src/mpi/attr/keyval_create.c | 6 +-
src/mpi/attr/keyval_free.c | 12 +-
src/mpi/attr/type_create_keyval.c | 24 +-
src/mpi/attr/type_delete_attr.c | 22 +-
src/mpi/attr/type_free_keyval.c | 18 +-
src/mpi/attr/type_get_attr.c | 36 +-
src/mpi/attr/type_set_attr.c | 56 +-
src/mpi/attr/win_create_keyval.c | 24 +-
src/mpi/attr/win_delete_attr.c | 26 +-
src/mpi/attr/win_free_keyval.c | 18 +-
src/mpi/attr/win_get_attr.c | 58 +-
src/mpi/attr/win_set_attr.c | 56 +-
src/mpi/coll/.state-cache | 318 +-
src/mpi/coll/allgather.c | 69 +-
src/mpi/coll/allgatherv.c | 73 +-
src/mpi/coll/allred_group.c | 30 +-
src/mpi/coll/allreduce.c | 87 +-
src/mpi/coll/alltoall.c | 73 +-
src/mpi/coll/alltoallv.c | 69 +-
src/mpi/coll/alltoallw.c | 62 +-
src/mpi/coll/barrier.c | 51 +-
src/mpi/coll/barrier_group.c | 6 +-
src/mpi/coll/bcast.c | 124 +-
src/mpi/coll/collutil.h | 6 +-
src/mpi/coll/exscan.c | 72 +-
src/mpi/coll/gather.c | 86 +-
src/mpi/coll/gatherv.c | 57 +-
src/mpi/coll/helper_fns.c | 261 +-
src/mpi/coll/iallgather.c | 168 +-
src/mpi/coll/iallgatherv.c | 138 +-
src/mpi/coll/iallreduce.c | 198 +-
src/mpi/coll/ialltoall.c | 140 +-
src/mpi/coll/ialltoallv.c | 100 +-
src/mpi/coll/ialltoallw.c | 76 +-
src/mpi/coll/ibarrier.c | 68 +-
src/mpi/coll/ibcast.c | 306 +-
src/mpi/coll/iexscan.c | 90 +-
src/mpi/coll/igather.c | 154 +-
src/mpi/coll/igatherv.c | 78 +-
src/mpi/coll/ired_scat.c | 246 +-
src/mpi/coll/ired_scat_block.c | 243 +-
src/mpi/coll/ireduce.c | 232 +-
src/mpi/coll/iscan.c | 144 +-
src/mpi/coll/iscatter.c | 160 +-
src/mpi/coll/iscatterv.c | 74 +-
src/mpi/coll/nbcutil.c | 4 +-
src/mpi/coll/op_commutative.c | 14 +-
src/mpi/coll/op_create.c | 54 +-
src/mpi/coll/op_free.c | 19 +-
src/mpi/coll/opband.c | 14 +-
src/mpi/coll/opbor.c | 14 +-
src/mpi/coll/opbxor.c | 14 +-
src/mpi/coll/opland.c | 20 +-
src/mpi/coll/oplor.c | 20 +-
src/mpi/coll/oplxor.c | 20 +-
src/mpi/coll/opmax.c | 16 +-
src/mpi/coll/opmaxloc.c | 16 +-
src/mpi/coll/opmin.c | 16 +-
src/mpi/coll/opminloc.c | 16 +-
src/mpi/coll/opprod.c | 14 +-
src/mpi/coll/opsum.c | 14 +-
src/mpi/coll/red_scat.c | 130 +-
src/mpi/coll/red_scat_block.c | 129 +-
src/mpi/coll/reduce.c | 163 +-
src/mpi/coll/reduce_local.c | 48 +-
src/mpi/coll/scan.c | 111 +-
src/mpi/coll/scatter.c | 78 +-
src/mpi/coll/scatterv.c | 57 +-
src/mpi/comm/.state-cache | 200 +-
src/mpi/comm/comm_agree.c | 35 +-
src/mpi/comm/comm_compare.c | 26 +-
src/mpi/comm/comm_create.c | 154 +-
src/mpi/comm/comm_create_group.c | 48 +-
src/mpi/comm/comm_dup.c | 20 +-
src/mpi/comm/comm_dup_with_info.c | 22 +-
src/mpi/comm/comm_failure_ack.c | 12 +-
src/mpi/comm/comm_failure_get_acked.c | 14 +-
src/mpi/comm/comm_free.c | 14 +-
src/mpi/comm/comm_get_info.c | 20 +-
src/mpi/comm/comm_get_name.c | 16 +-
src/mpi/comm/comm_group.c | 22 +-
src/mpi/comm/comm_idup.c | 26 +-
src/mpi/comm/comm_rank.c | 12 +-
src/mpi/comm/comm_remote_group.c | 24 +-
src/mpi/comm/comm_remote_size.c | 14 +-
src/mpi/comm/comm_revoke.c | 16 +-
src/mpi/comm/comm_set_info.c | 32 +-
src/mpi/comm/comm_set_name.c | 14 +-
src/mpi/comm/comm_shrink.c | 49 +-
src/mpi/comm/comm_size.c | 12 +-
src/mpi/comm/comm_split.c | 62 +-
src/mpi/comm/comm_split_type.c | 69 +-
src/mpi/comm/comm_test_inter.c | 14 +-
src/mpi/comm/commutil.c | 398 +-
src/mpi/comm/contextid.c | 265 +-
src/mpi/comm/intercomm_create.c | 298 +-
src/mpi/comm/intercomm_merge.c | 217 +-
src/mpi/comm/mpicomm.h | 2 +-
src/mpi/datatype/.state-cache | 268 +-
src/mpi/datatype/address.c | 14 +-
src/mpi/datatype/get_address.c | 10 +-
src/mpi/datatype/get_count.c | 12 +-
src/mpi/datatype/get_elements.c | 10 +-
src/mpi/datatype/get_elements_x.c | 27 +-
src/mpi/datatype/pack.c | 26 +-
src/mpi/datatype/pack_external.c | 12 +-
src/mpi/datatype/pack_external_size.c | 10 +-
src/mpi/datatype/pack_size.c | 18 +-
src/mpi/datatype/register_datarep.c | 7 +-
src/mpi/datatype/status_set_elements.c | 10 +-
src/mpi/datatype/status_set_elements_x.c | 19 +-
src/mpi/datatype/type_commit.c | 10 +-
src/mpi/datatype/type_contiguous.c | 16 +-
src/mpi/datatype/type_create_darray.c | 26 +-
src/mpi/datatype/type_create_hindexed.c | 20 +-
src/mpi/datatype/type_create_hindexed_block.c | 14 +-
src/mpi/datatype/type_create_hvector.c | 14 +-
src/mpi/datatype/type_create_indexed_block.c | 20 +-
src/mpi/datatype/type_create_resized.c | 14 +-
src/mpi/datatype/type_create_struct.c | 20 +-
src/mpi/datatype/type_create_subarray.c | 24 +-
src/mpi/datatype/type_dup.c | 14 +-
src/mpi/datatype/type_extent.c | 12 +-
src/mpi/datatype/type_free.c | 12 +-
src/mpi/datatype/type_get_contents.c | 10 +-
src/mpi/datatype/type_get_envelope.c | 12 +-
src/mpi/datatype/type_get_extent.c | 10 +-
src/mpi/datatype/type_get_extent_x.c | 15 +-
src/mpi/datatype/type_get_name.c | 24 +-
src/mpi/datatype/type_get_true_extent.c | 10 +-
src/mpi/datatype/type_get_true_extent_x.c | 15 +-
src/mpi/datatype/type_hindexed.c | 28 +-
src/mpi/datatype/type_hvector.c | 14 +-
src/mpi/datatype/type_indexed.c | 20 +-
src/mpi/datatype/type_lb.c | 12 +-
src/mpi/datatype/type_match_size.c | 12 +-
src/mpi/datatype/type_set_name.c | 12 +-
src/mpi/datatype/type_size.c | 12 +-
src/mpi/datatype/type_size_x.c | 13 +-
src/mpi/datatype/type_struct.c | 32 +-
src/mpi/datatype/type_ub.c | 10 +-
src/mpi/datatype/type_vector.c | 14 +-
src/mpi/datatype/typeutil.c | 62 +-
src/mpi/datatype/unpack.c | 28 +-
src/mpi/datatype/unpack_external.c | 12 +-
src/mpi/debugger/.state-cache | 36 +-
src/mpi/debugger/allcommdbg.c | 2 +-
src/mpi/debugger/dbginit.c | 73 +-
src/mpi/debugger/dbgstub.c | 36 +-
src/mpi/debugger/dll_mpich.c | 10 +-
src/mpi/debugger/mpich_dll_defs.h | 4 +-
src/mpi/debugger/tvtest.c | 6 +-
src/mpi/errhan/.state-cache | 134 +-
src/mpi/errhan/add_error_class.c | 6 +-
src/mpi/errhan/add_error_code.c | 6 +-
src/mpi/errhan/add_error_string.c | 6 +-
src/mpi/errhan/comm_call_errhandler.c | 20 +-
src/mpi/errhan/comm_create_errhandler.c | 18 +-
src/mpi/errhan/comm_get_errhandler.c | 16 +-
src/mpi/errhan/comm_set_errhandler.c | 22 +-
src/mpi/errhan/defmsg.h | 6185 +-
src/mpi/errhan/dynerrutil.c | 18 +-
src/mpi/errhan/errcodes.h | 2 +-
src/mpi/errhan/errhandler_create.c | 6 +-
src/mpi/errhan/errhandler_free.c | 14 +-
src/mpi/errhan/errhandler_get.c | 14 +-
src/mpi/errhan/errhandler_set.c | 18 +-
src/mpi/errhan/errnames.txt | 10 +-
src/mpi/errhan/error_class.c | 6 +-
src/mpi/errhan/error_string.c | 6 +-
src/mpi/errhan/errutil.c | 228 +-
src/mpi/errhan/file_call_errhandler.c | 28 +-
src/mpi/errhan/file_create_errhandler.c | 18 +-
src/mpi/errhan/file_get_errhandler.c | 17 +-
src/mpi/errhan/file_set_errhandler.c | 33 +-
src/mpi/errhan/win_call_errhandler.c | 23 +-
src/mpi/errhan/win_create_errhandler.c | 18 +-
src/mpi/errhan/win_get_errhandler.c | 12 +-
src/mpi/errhan/win_set_errhandler.c | 22 +-
src/mpi/errhan/windefmsg.h | 18 +-
src/mpi/group/.state-cache | 84 +-
src/mpi/group/group.h | 8 +-
src/mpi/group/group_compare.c | 26 +-
src/mpi/group/group_difference.c | 32 +-
src/mpi/group/group_excl.c | 22 +-
src/mpi/group/group_free.c | 14 +-
src/mpi/group/group_incl.c | 24 +-
src/mpi/group/group_intersection.c | 32 +-
src/mpi/group/group_range_excl.c | 24 +-
src/mpi/group/group_range_incl.c | 24 +-
src/mpi/group/group_rank.c | 12 +-
src/mpi/group/group_size.c | 12 +-
src/mpi/group/group_translate_ranks.c | 31 +-
src/mpi/group/group_union.c | 36 +-
src/mpi/group/groupdebug.c | 14 +-
src/mpi/group/grouputil.c | 82 +-
src/mpi/info/.state-cache | 50 +-
src/mpi/info/info_create.c | 12 +-
src/mpi/info/info_delete.c | 20 +-
src/mpi/info/info_dup.c | 26 +-
src/mpi/info/info_free.c | 16 +-
src/mpi/info/info_get.c | 20 +-
src/mpi/info/info_getn.c | 16 +-
src/mpi/info/info_getnth.c | 22 +-
src/mpi/info/info_getvallen.c | 18 +-
src/mpi/info/info_set.c | 34 +-
src/mpi/info/infoutil.c | 40 +-
src/mpi/init/.state-cache | 52 +-
src/mpi/init/abort.c | 14 +-
src/mpi/init/async.c | 53 +-
src/mpi/init/finalize.c | 24 +-
src/mpi/init/finalized.c | 12 +-
src/mpi/init/init.c | 27 +-
src/mpi/init/initialized.c | 12 +-
src/mpi/init/initinfo.c | 17 +-
src/mpi/init/initthread.c | 241 +-
src/mpi/init/ismain.c | 6 +-
src/mpi/init/querythread.c | 6 +-
src/mpi/io/.state-cache | 7 -
src/mpi/io/Makefile.mk | 10 -
src/mpi/io/fileutil.c | 18 -
src/mpi/misc/.state-cache | 20 +-
src/mpi/misc/aint_add.c | 10 +-
src/mpi/misc/aint_diff.c | 8 +-
src/mpi/misc/getpname.c | 6 +-
src/mpi/misc/library_version.c | 12 +-
src/mpi/misc/pcontrol.c | 6 +-
src/mpi/misc/version.c | 6 +-
src/mpi/pt2pt/.state-cache | 254 +-
src/mpi/pt2pt/bsend.c | 18 +-
src/mpi/pt2pt/bsend_init.c | 24 +-
src/mpi/pt2pt/bsendutil.c | 153 +-
src/mpi/pt2pt/bsendutil.h | 8 +-
src/mpi/pt2pt/bufattach.c | 6 +-
src/mpi/pt2pt/buffree.c | 6 +-
src/mpi/pt2pt/cancel.c | 42 +-
src/mpi/pt2pt/greq_complete.c | 18 +-
src/mpi/pt2pt/greq_start.c | 100 +-
src/mpi/pt2pt/ibsend.c | 36 +-
src/mpi/pt2pt/improbe.c | 18 +-
src/mpi/pt2pt/imrecv.c | 22 +-
src/mpi/pt2pt/iprobe.c | 14 +-
src/mpi/pt2pt/irecv.c | 20 +-
src/mpi/pt2pt/irsend.c | 22 +-
src/mpi/pt2pt/isend.c | 22 +-
src/mpi/pt2pt/issend.c | 22 +-
src/mpi/pt2pt/mpir_request.c | 251 +-
src/mpi/pt2pt/mprobe.c | 18 +-
src/mpi/pt2pt/mrecv.c | 18 +-
src/mpi/pt2pt/probe.c | 14 +-
src/mpi/pt2pt/recv.c | 28 +-
src/mpi/pt2pt/recv_init.c | 22 +-
src/mpi/pt2pt/request_free.c | 38 +-
src/mpi/pt2pt/request_get_status.c | 32 +-
src/mpi/pt2pt/rsend.c | 26 +-
src/mpi/pt2pt/rsend_init.c | 22 +-
src/mpi/pt2pt/send.c | 26 +-
src/mpi/pt2pt/send_init.c | 24 +-
src/mpi/pt2pt/sendrecv.c | 42 +-
src/mpi/pt2pt/sendrecv_rep.c | 44 +-
src/mpi/pt2pt/ssend.c | 22 +-
src/mpi/pt2pt/ssend_init.c | 22 +-
src/mpi/pt2pt/start.c | 12 +-
src/mpi/pt2pt/startall.c | 28 +-
src/mpi/pt2pt/status_set_cancelled.c | 6 +-
src/mpi/pt2pt/test.c | 26 +-
src/mpi/pt2pt/test_cancelled.c | 9 +-
src/mpi/pt2pt/testall.c | 40 +-
src/mpi/pt2pt/testany.c | 36 +-
src/mpi/pt2pt/testsome.c | 36 +-
src/mpi/pt2pt/wait.c | 28 +-
src/mpi/pt2pt/waitall.c | 62 +-
src/mpi/pt2pt/waitany.c | 34 +-
src/mpi/pt2pt/waitsome.c | 32 +-
src/mpi/rma/.state-cache | 234 +-
src/mpi/rma/accumulate.c | 22 +-
src/mpi/rma/alloc_mem.c | 13 +-
src/mpi/rma/compare_and_swap.c | 14 +-
src/mpi/rma/fetch_and_op.c | 14 +-
src/mpi/rma/free_mem.c | 6 +-
src/mpi/rma/get.c | 22 +-
src/mpi/rma/get_accumulate.c | 26 +-
src/mpi/rma/put.c | 22 +-
src/mpi/rma/raccumulate.c | 24 +-
src/mpi/rma/rget.c | 24 +-
src/mpi/rma/rget_accumulate.c | 28 +-
src/mpi/rma/rmatypeutil.c | 6 +-
src/mpi/rma/rput.c | 24 +-
src/mpi/rma/win_allocate.c | 20 +-
src/mpi/rma/win_allocate_shared.c | 20 +-
src/mpi/rma/win_attach.c | 12 +-
src/mpi/rma/win_complete.c | 12 +-
src/mpi/rma/win_create.c | 20 +-
src/mpi/rma/win_create_dynamic.c | 20 +-
src/mpi/rma/win_detach.c | 12 +-
src/mpi/rma/win_fence.c | 12 +-
src/mpi/rma/win_flush.c | 14 +-
src/mpi/rma/win_flush_all.c | 12 +-
src/mpi/rma/win_flush_local.c | 14 +-
src/mpi/rma/win_flush_local_all.c | 12 +-
src/mpi/rma/win_free.c | 14 +-
src/mpi/rma/win_get_group.c | 16 +-
src/mpi/rma/win_get_info.c | 14 +-
src/mpi/rma/win_get_name.c | 14 +-
src/mpi/rma/win_lock.c | 14 +-
src/mpi/rma/win_lock_all.c | 12 +-
src/mpi/rma/win_post.c | 18 +-
src/mpi/rma/win_set_info.c | 18 +-
src/mpi/rma/win_set_name.c | 14 +-
src/mpi/rma/win_shared_query.c | 14 +-
src/mpi/rma/win_start.c | 18 +-
src/mpi/rma/win_sync.c | 12 +-
src/mpi/rma/win_test.c | 12 +-
src/mpi/rma/win_unlock.c | 14 +-
src/mpi/rma/win_unlock_all.c | 12 +-
src/mpi/rma/win_wait.c | 12 +-
src/mpi/rma/winutil.c | 12 +-
src/mpi/romio/.codingcheck | 1 -
src/mpi/romio/Makefile.am | 20 +-
src/mpi/romio/Makefile.in | 656 +-
src/mpi/romio/aclocal.m4 | 2 +
src/mpi/romio/adio/Makefile.mk | 7 -
src/mpi/romio/adio/ad_gpfs/.state-cache | 44 +-
src/mpi/romio/adio/ad_gpfs/ad_gpfs.h | 1 +
src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c | 38 +-
src/mpi/romio/adio/ad_gpfs/ad_gpfs_hints.c | 3 +-
src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c | 47 +-
src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.c | 74 -
src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h | 6 -
src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c | 95 +-
src/mpi/romio/adio/ad_gpfs/bg/.state-cache | 14 +-
src/mpi/romio/adio/ad_gpfs/bg/Makefile.mk | 2 +-
src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c | 2 +-
src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c | 2 +-
src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.h | 3 -
src/mpi/romio/adio/ad_gpfs/pe/.state-cache | 8 +-
src/mpi/romio/adio/ad_gpfs/pe/Makefile.mk | 2 +-
src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c | 8 +-
src/mpi/romio/adio/ad_gridftp/.state-cache | 43 -
src/mpi/romio/adio/ad_gridftp/Makefile.mk | 27 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp.c | 39 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp.h | 96 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_close.c | 50 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_delete.c | 95 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_fcntl.c | 91 -
.../romio/adio/ad_gridftp/ad_gridftp_features.c | 18 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_flush.c | 19 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_hints.c | 68 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_open.c | 343 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_read.c | 465 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_resize.c | 241 -
src/mpi/romio/adio/ad_gridftp/ad_gridftp_write.c | 470 -
src/mpi/romio/adio/ad_gridftp/globus_routines.c | 36 -
src/mpi/romio/adio/ad_hfs/.state-cache | 25 -
src/mpi/romio/adio/ad_hfs/Makefile.mk | 21 -
src/mpi/romio/adio/ad_hfs/README | 1 -
src/mpi/romio/adio/ad_hfs/ad_hfs.c | 38 -
src/mpi/romio/adio/ad_hfs/ad_hfs.h | 34 -
src/mpi/romio/adio/ad_hfs/ad_hfs_fcntl.c | 113 -
src/mpi/romio/adio/ad_hfs/ad_hfs_open.c | 67 -
src/mpi/romio/adio/ad_hfs/ad_hfs_read.c | 71 -
src/mpi/romio/adio/ad_hfs/ad_hfs_resize.c | 31 -
src/mpi/romio/adio/ad_hfs/ad_hfs_write.c | 70 -
src/mpi/romio/adio/ad_lustre/.state-cache | 32 +-
src/mpi/romio/adio/ad_lustre/ad_lustre.h | 3 +-
src/mpi/romio/adio/ad_lustre/ad_lustre_aggregate.c | 29 +-
src/mpi/romio/adio/ad_lustre/ad_lustre_fcntl.c | 6 +-
src/mpi/romio/adio/ad_lustre/ad_lustre_hints.c | 2 +-
src/mpi/romio/adio/ad_lustre/ad_lustre_open.c | 7 +-
src/mpi/romio/adio/ad_lustre/ad_lustre_rwcontig.c | 113 +-
src/mpi/romio/adio/ad_lustre/ad_lustre_wrcoll.c | 495 +-
src/mpi/romio/adio/ad_lustre/ad_lustre_wrstr.c | 43 +-
src/mpi/romio/adio/ad_nfs/.state-cache | 54 +-
src/mpi/romio/adio/ad_nfs/ad_nfs_fcntl.c | 3 -
src/mpi/romio/adio/ad_nfs/ad_nfs_read.c | 27 +-
src/mpi/romio/adio/ad_nfs/ad_nfs_write.c | 51 +-
src/mpi/romio/adio/ad_ntfs/.state-cache | 46 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs.c | 40 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs.h | 68 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_close.c | 30 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_done.c | 20 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_fcntl.c | 76 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_feature.c | 26 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_flush.c | 32 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_iread.c | 42 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_iwrite.c | 303 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_open.c | 101 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_read.c | 259 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_resize.c | 51 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_wait.c | 20 -
src/mpi/romio/adio/ad_ntfs/ad_ntfs_write.c | 222 -
src/mpi/romio/adio/ad_panfs/.state-cache | 28 +-
src/mpi/romio/adio/ad_panfs/ad_panfs_open.c | 22 +-
src/mpi/romio/adio/ad_panfs/ad_panfs_open6.c | 30 +-
src/mpi/romio/adio/ad_pfs/.state-cache | 40 -
src/mpi/romio/adio/ad_pfs/Makefile.mk | 26 -
src/mpi/romio/adio/ad_pfs/ad_pfs.c | 38 -
src/mpi/romio/adio/ad_pfs/ad_pfs.h | 62 -
src/mpi/romio/adio/ad_pfs/ad_pfs_done.c | 57 -
src/mpi/romio/adio/ad_pfs/ad_pfs_fcntl.c | 81 -
src/mpi/romio/adio/ad_pfs/ad_pfs_flush.c | 38 -
src/mpi/romio/adio/ad_pfs/ad_pfs_hints.c | 174 -
src/mpi/romio/adio/ad_pfs/ad_pfs_iread.c | 81 -
src/mpi/romio/adio/ad_pfs/ad_pfs_iwrite.c | 80 -
src/mpi/romio/adio/ad_pfs/ad_pfs_open.c | 85 -
src/mpi/romio/adio/ad_pfs/ad_pfs_read.c | 48 -
src/mpi/romio/adio/ad_pfs/ad_pfs_wait.c | 62 -
src/mpi/romio/adio/ad_pfs/ad_pfs_write.c | 49 -
src/mpi/romio/adio/ad_piofs/.state-cache | 28 -
src/mpi/romio/adio/ad_piofs/Makefile.mk | 21 -
src/mpi/romio/adio/ad_piofs/README | 1 -
src/mpi/romio/adio/ad_piofs/ad_piofs.c | 39 -
src/mpi/romio/adio/ad_piofs/ad_piofs.h | 40 -
src/mpi/romio/adio/ad_piofs/ad_piofs_fcntl.c | 77 -
src/mpi/romio/adio/ad_piofs/ad_piofs_features.c | 19 -
src/mpi/romio/adio/ad_piofs/ad_piofs_hints.c | 118 -
src/mpi/romio/adio/ad_piofs/ad_piofs_open.c | 79 -
src/mpi/romio/adio/ad_piofs/ad_piofs_read.c | 56 -
src/mpi/romio/adio/ad_piofs/ad_piofs_write.c | 340 -
src/mpi/romio/adio/ad_pvfs/.state-cache | 37 -
src/mpi/romio/adio/ad_pvfs/Makefile.mk | 26 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs.c | 39 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs.h | 54 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_close.c | 31 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_delete.c | 24 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_fcntl.c | 72 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_flush.c | 36 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_hints.c | 146 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_open.c | 90 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_read.c | 784 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_resize.c | 32 -
src/mpi/romio/adio/ad_pvfs/ad_pvfs_write.c | 1167 -
src/mpi/romio/adio/ad_pvfs2/.state-cache | 80 +-
src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_dtype.c | 8 +-
src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_list.c | 8 +-
.../adio/ad_pvfs2/ad_pvfs2_read_list_classic.c | 13 +-
.../adio/ad_pvfs2/ad_pvfs2_write_list_classic.c | 13 +-
src/mpi/romio/adio/ad_sfs/.state-cache | 19 -
src/mpi/romio/adio/ad_sfs/Makefile.mk | 19 -
src/mpi/romio/adio/ad_sfs/README | 1 -
src/mpi/romio/adio/ad_sfs/ad_sfs.c | 38 -
src/mpi/romio/adio/ad_sfs/ad_sfs.h | 21 -
src/mpi/romio/adio/ad_sfs/ad_sfs_fcntl.c | 64 -
src/mpi/romio/adio/ad_sfs/ad_sfs_flush.c | 27 -
src/mpi/romio/adio/ad_sfs/ad_sfs_open.c | 57 -
src/mpi/romio/adio/ad_testfs/.state-cache | 76 +-
src/mpi/romio/adio/ad_testfs/ad_testfs_seek.c | 3 +-
src/mpi/romio/adio/ad_ufs/.state-cache | 6 +-
src/mpi/romio/adio/ad_xfs/.state-cache | 30 +-
src/mpi/romio/adio/ad_xfs/ad_xfs_read.c | 2 +-
src/mpi/romio/adio/ad_xfs/ad_xfs_write.c | 2 +-
src/mpi/romio/adio/ad_zoidfs/.state-cache | 46 -
src/mpi/romio/adio/ad_zoidfs/Makefile.mk | 27 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.c | 44 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.h | 44 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_close.c | 25 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.c | 126 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.h | 43 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_delete.c | 45 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_fcntl.c | 60 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_features.c | 22 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_flush.c | 52 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_io.c | 96 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_open.c | 153 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_read_list.c | 826 -
src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_resize.c | 53 -
.../romio/adio/ad_zoidfs/ad_zoidfs_write_list.c | 857 -
src/mpi/romio/adio/common/.state-cache | 277 +-
src/mpi/romio/adio/common/Makefile.mk | 1 +
src/mpi/romio/adio/common/ad_aggregate.c | 6 +-
src/mpi/romio/adio/common/ad_aggregate_new.c | 4 +-
src/mpi/romio/adio/common/ad_close.c | 21 +-
src/mpi/romio/adio/common/ad_coll_build_req_new.c | 5 +-
src/mpi/romio/adio/common/ad_coll_exch_new.c | 59 +-
src/mpi/romio/adio/common/ad_darray.c | 4 +-
src/mpi/romio/adio/common/ad_end.c | 22 +-
src/mpi/romio/adio/common/ad_fstype.c | 122 +-
src/mpi/romio/adio/common/ad_hints.c | 7 +-
src/mpi/romio/adio/common/ad_init.c | 12 +-
src/mpi/romio/adio/common/ad_io_coll.c | 18 +-
src/mpi/romio/adio/common/ad_iread_coll.c | 18 +-
src/mpi/romio/adio/common/ad_iwrite.c | 2 +
src/mpi/romio/adio/common/ad_iwrite_coll.c | 13 +-
src/mpi/romio/adio/common/ad_open.c | 21 +-
src/mpi/romio/adio/common/ad_opencoll.c | 69 +-
src/mpi/romio/adio/common/ad_opencoll_failsafe.c | 11 +-
src/mpi/romio/adio/common/ad_prealloc.c | 6 +-
src/mpi/romio/adio/common/ad_read.c | 2 +-
src/mpi/romio/adio/common/ad_read_coll.c | 43 +-
src/mpi/romio/adio/common/ad_read_str.c | 21 +-
src/mpi/romio/adio/common/ad_read_str_naive.c | 24 +-
src/mpi/romio/adio/common/ad_seek.c | 5 +-
src/mpi/romio/adio/common/ad_set_view.c | 9 +-
src/mpi/romio/adio/common/ad_threaded_io.c | 4 +-
src/mpi/romio/adio/common/ad_tuning.c | 111 +
src/mpi/romio/adio/common/ad_write.c | 2 +-
src/mpi/romio/adio/common/ad_write_coll.c | 22 +-
src/mpi/romio/adio/common/ad_write_nolock.c | 15 +-
src/mpi/romio/adio/common/ad_write_str.c | 37 +-
src/mpi/romio/adio/common/ad_write_str_naive.c | 21 +-
src/mpi/romio/adio/common/byte_offset.c | 4 +-
src/mpi/romio/adio/common/cb_config_list.c | 17 +-
src/mpi/romio/adio/common/eof_offset.c | 5 +-
src/mpi/romio/adio/common/error.c | 29 +-
src/mpi/romio/adio/common/flatten.c | 173 +-
src/mpi/romio/adio/common/get_fp_posn.c | 4 +-
src/mpi/romio/adio/common/hint_fns.c | 33 +-
src/mpi/romio/adio/common/iscontig.c | 7 -
src/mpi/romio/adio/common/lock.c | 8 +-
src/mpi/romio/adio/common/malloc.c | 25 +-
src/mpi/romio/adio/common/onesided_aggregation.c | 347 +-
src/mpi/romio/adio/common/p2p_aggregation.c | 11 +-
src/mpi/romio/adio/common/shfp_fname.c | 10 +-
src/mpi/romio/adio/common/status_setb.c | 15 +-
src/mpi/romio/adio/common/strfns.c | 210 -
src/mpi/romio/adio/common/utils.c | 2 +-
src/mpi/romio/adio/include/.state-cache | 55 +-
src/mpi/romio/adio/include/BaseIOErrMsgs.msg | 51 -
src/mpi/romio/adio/include/ad_tuning.h | 36 +
src/mpi/romio/adio/include/adio.h | 24 +-
src/mpi/romio/adio/include/adio_extern.h | 3 +-
src/mpi/romio/adio/include/adioi.h | 105 +-
src/mpi/romio/adio/include/adioi_errmsg.h | 12 +-
src/mpi/romio/adio/include/adioi_fs_proto.h | 40 -
src/mpi/romio/adio/include/mpio_error.h | 9 +-
src/mpi/romio/adio/include/romioconf.h.in | 61 +-
src/mpi/romio/autogen.sh | 3 +
src/mpi/romio/confdb/aclocal_cc.m4 | 19 +-
src/mpi/romio/confdb/aclocal_check_visibility.m4 | 123 +
src/mpi/romio/confdb/aclocal_fc.m4 | 4 +-
src/mpi/romio/confdb/aclocal_libs.m4 | 2 +-
src/mpi/romio/confdb/aclocal_romio.m4 | 22 -
src/mpi/romio/confdb/ax_tls.m4 | 13 +-
src/mpi/romio/confdb/config.guess | 38 +-
src/mpi/romio/confdb/config.sub | 26 +-
src/mpi/romio/confdb/install-sh | 23 +-
src/mpi/romio/confdb/libtool.m4 | 27 +-
src/mpi/romio/confdb/ltmain.sh | 37 +-
src/mpi/romio/confdb/random_r.m4 | 43 +
src/mpi/romio/confdb/stdlib_h.m4 | 119 +
src/mpi/romio/configure | 1262 +-
src/mpi/romio/configure.ac | 235 +-
src/mpi/romio/doc/Makefile | 1 +
src/mpi/romio/doc/users-guide.pdf | Bin 94807 -> 93819 bytes
src/mpi/romio/doc/users-guide.ps | 7035 ++
src/mpi/romio/doc/users-guide.tex | 54 +-
src/mpi/romio/include/mpio.h.in | 340 +-
src/mpi/romio/mpi-io/.state-cache | 301 +-
src/mpi/romio/mpi-io/Makefile.mk | 3 +-
src/mpi/romio/mpi-io/delete.c | 2 +-
src/mpi/romio/mpi-io/fortran/.state-cache | 216 +-
src/mpi/romio/mpi-io/fortran/get_extentf.c | 2 +-
src/mpi/romio/mpi-io/fortran/get_groupf.c | 2 +-
src/mpi/romio/mpi-io/fortran/get_viewf.c | 2 +-
src/mpi/romio/mpi-io/fortran/iread_atf.c | 2 +-
src/mpi/romio/mpi-io/fortran/iread_shf.c | 2 +-
src/mpi/romio/mpi-io/fortran/ireadf.c | 2 +-
src/mpi/romio/mpi-io/fortran/iwrite_atf.c | 2 +-
src/mpi/romio/mpi-io/fortran/iwrite_shf.c | 2 +-
src/mpi/romio/mpi-io/fortran/iwritef.c | 2 +-
src/mpi/romio/mpi-io/fortran/openf.c | 2 +-
src/mpi/romio/mpi-io/fortran/rd_atallbf.c | 2 +-
src/mpi/romio/mpi-io/fortran/read_allbf.c | 2 +-
src/mpi/romio/mpi-io/fortran/read_allf.c | 2 +-
src/mpi/romio/mpi-io/fortran/read_atallf.c | 2 +-
src/mpi/romio/mpi-io/fortran/read_atf.c | 2 +-
src/mpi/romio/mpi-io/fortran/read_ordbf.c | 2 +-
src/mpi/romio/mpi-io/fortran/read_ordf.c | 2 +-
src/mpi/romio/mpi-io/fortran/read_shf.c | 2 +-
src/mpi/romio/mpi-io/fortran/readf.c | 2 +-
src/mpi/romio/mpi-io/fortran/set_viewf.c | 2 +-
src/mpi/romio/mpi-io/fortran/wr_atallbf.c | 2 +-
src/mpi/romio/mpi-io/fortran/write_allbf.c | 2 +-
src/mpi/romio/mpi-io/fortran/write_allf.c | 2 +-
src/mpi/romio/mpi-io/fortran/write_atallf.c | 2 +-
src/mpi/romio/mpi-io/fortran/write_atf.c | 2 +-
src/mpi/romio/mpi-io/fortran/write_ordbf.c | 2 +-
src/mpi/romio/mpi-io/fortran/write_ordf.c | 2 +-
src/mpi/romio/mpi-io/fortran/write_shf.c | 2 +-
src/mpi/romio/mpi-io/fortran/writef.c | 2 +-
src/mpi/romio/mpi-io/fsync.c | 2 +-
src/mpi/romio/mpi-io/get_errh.c | 1 -
src/mpi/romio/mpi-io/get_view.c | 7 +-
src/mpi/romio/mpi-io/glue/.state-cache | 2 +-
src/mpi/romio/mpi-io/glue/default/.state-cache | 8 +-
src/mpi/romio/mpi-io/glue/default/mpio_err.c | 4 +-
src/mpi/romio/mpi-io/glue/default/mpio_file.c | 2 +-
src/mpi/romio/mpi-io/glue/mpich/.state-cache | 4 +-
src/mpi/romio/mpi-io/glue/mpich/mpio_err.c | 22 +-
src/mpi/romio/mpi-io/glue/mpich/mpio_file.c | 2 +-
src/mpi/romio/mpi-io/glue/openmpi/.state-cache | 4 +-
src/mpi/romio/mpi-io/glue/openmpi/mpio_err.c | 4 +-
src/mpi/romio/mpi-io/glue/openmpi/mpio_file.c | 2 +-
src/mpi/romio/mpi-io/ioreq_c2f.c | 1 -
src/mpi/romio/mpi-io/ioreq_f2c.c | 1 -
src/mpi/romio/mpi-io/iotest.c | 1 -
src/mpi/romio/mpi-io/iotestall.c | 1 -
src/mpi/romio/mpi-io/iotestany.c | 1 -
src/mpi/romio/mpi-io/iotestsome.c | 1 -
src/mpi/romio/mpi-io/iowait.c | 1 -
src/mpi/romio/mpi-io/iowaitall.c | 1 -
src/mpi/romio/mpi-io/iowaitany.c | 1 -
src/mpi/romio/mpi-io/iowaitsome.c | 1 -
src/mpi/romio/mpi-io/iread_all.c | 4 +-
src/mpi/romio/mpi-io/iread_atall.c | 2 +-
src/mpi/romio/mpi-io/iwrite_all.c | 2 +-
src/mpi/romio/mpi-io/mpioimpl.h | 7 +-
src/mpi/romio/mpi-io/mpir_cst_filesys.c | 183 +
src/mpi/romio/mpi-io/mpiu_external32.c | 2 +-
src/mpi/romio/mpi-io/mpiu_greq.c | 4 +-
src/mpi/romio/mpi-io/read_all.c | 2 +-
src/mpi/romio/mpi-io/read_allb.c | 2 +-
src/mpi/romio/mpi-io/read_alle.c | 2 +-
src/mpi/romio/mpi-io/read_ordb.c | 2 +-
src/mpi/romio/mpi-io/read_orde.c | 2 +-
src/mpi/romio/mpi-io/read_sh.c | 2 +-
src/mpi/romio/mpi-io/set_errh.c | 1 -
src/mpi/romio/mpi-io/write.c | 2 +-
src/mpi/romio/mpi-io/write_alle.c | 2 +-
src/mpi/romio/mpi-io/write_orde.c | 2 +-
src/mpi/romio/mpi2-other/array/.state-cache | 4 +-
.../romio/mpi2-other/array/fortran/.state-cache | 4 +-
src/mpi/romio/mpi2-other/info/.state-cache | 42 +-
src/mpi/romio/mpi2-other/info/fortran/.state-cache | 34 +-
src/mpi/romio/mpl/Makefile.am | 68 +
src/mpi/romio/mpl/Makefile.in | 1610 +
src/mpi/romio/mpl/VERSION | 21 +
src/mpi/romio/mpl/aclocal.m4 | 1223 +
src/mpi/romio/mpl/confdb/aclocal.m4 | 38 +
src/mpi/romio/mpl/confdb/aclocal_am.m4 | 6 +
src/mpi/romio/mpl/confdb/aclocal_atomic.m4 | 227 +
src/mpi/romio/mpl/confdb/aclocal_attr_alias.m4 | 504 +
src/mpi/romio/mpl/confdb/aclocal_bugfix.m4 | 75 +
src/mpi/romio/mpl/confdb/aclocal_cache.m4 | 372 +
src/mpi/romio/mpl/confdb/aclocal_cc.m4 | 1695 +
.../romio/mpl/confdb/aclocal_check_visibility.m4 | 123 +
src/mpi/romio/mpl/confdb/aclocal_coverage.m4 | 90 +
src/mpi/romio/mpl/confdb/aclocal_cxx.m4 | 187 +
src/mpi/romio/mpl/confdb/aclocal_f77.m4 | 1487 +
src/mpi/romio/mpl/confdb/aclocal_f77old.m4 | 389 +
src/mpi/romio/mpl/confdb/aclocal_fc.m4 | 1225 +
src/mpi/romio/mpl/confdb/aclocal_libs.m4 | 107 +
src/mpi/romio/mpl/confdb/aclocal_make.m4 | 315 +
src/mpi/romio/mpl/confdb/aclocal_mpi.m4 | 519 +
src/mpi/romio/mpl/confdb/aclocal_romio.m4 | 850 +
src/mpi/romio/mpl/confdb/aclocal_runlog.m4 | 218 +
src/mpi/romio/mpl/confdb/aclocal_shl.m4 | 500 +
src/mpi/romio/mpl/confdb/aclocal_shm.m4 | 49 +
src/mpi/romio/mpl/confdb/aclocal_subcfg.m4 | 261 +
src/mpi/romio/mpl/confdb/aclocal_util.m4 | 216 +
src/mpi/romio/mpl/confdb/ar-lib | 270 +
src/mpi/romio/mpl/confdb/ax_prefix_config_h.m4 | 219 +
src/mpi/romio/mpl/confdb/ax_tls.m4 | 91 +
src/mpi/romio/mpl/confdb/compile | 347 +
src/mpi/romio/mpl/confdb/config.guess | 1441 +
src/mpi/romio/mpl/confdb/config.rpath | 706 +
src/mpi/romio/mpl/confdb/config.sub | 1813 +
src/mpi/romio/mpl/confdb/depcomp | 791 +
src/mpi/romio/mpl/confdb/install-sh | 508 +
src/mpi/romio/mpl/confdb/libtool.m4 | 8388 +++
src/mpi/romio/mpl/confdb/ltmain.sh | 11156 +++
src/mpi/romio/mpl/confdb/ltoptions.m4 | 437 +
src/mpi/romio/mpl/confdb/ltsugar.m4 | 124 +
src/mpi/romio/mpl/confdb/ltversion.m4 | 23 +
src/mpi/romio/mpl/confdb/lt~obsolete.m4 | 99 +
src/mpi/romio/mpl/confdb/missing | 215 +
src/mpi/romio/mpl/confdb/random_r.m4 | 43 +
src/mpi/romio/mpl/confdb/stdlib_h.m4 | 119 +
src/mpi/romio/mpl/confdb/test-driver | 148 +
src/mpi/romio/mpl/configure | 17385 +++++
src/mpi/romio/mpl/configure.ac | 853 +
src/mpi/romio/mpl/include/.state-cache | 106 +
src/mpi/romio/mpl/include/config.h.in | 358 +
src/mpi/romio/mpl/include/mpl.h | 27 +
src/mpi/romio/mpl/include/mpl_argstr.h | 49 +
src/mpi/romio/mpl/include/mpl_base.h | 119 +
src/mpi/romio/mpl/include/mpl_bt.h | 38 +
src/mpi/romio/mpl/include/mpl_dbg.h | 148 +
src/mpi/romio/mpl/include/mpl_env.h | 36 +
src/mpi/romio/mpl/include/mpl_iov.h | 38 +
src/mpi/romio/mpl/include/mpl_msg.h | 28 +
src/mpi/romio/mpl/include/mpl_shm.h | 160 +
src/mpi/romio/mpl/include/mpl_shm_mmap.h | 36 +
src/mpi/romio/mpl/include/mpl_shm_sysv.h | 38 +
src/mpi/romio/mpl/include/mpl_shm_win.h | 70 +
src/mpi/romio/mpl/include/mpl_sock.h | 46 +
src/mpi/romio/mpl/include/mpl_str.h | 58 +
src/mpi/romio/mpl/include/mpl_thread.h | 44 +
src/mpi/romio/mpl/include/mpl_thread_posix.h | 246 +
src/mpi/romio/mpl/include/mpl_thread_priv.h | 98 +
src/mpi/romio/mpl/include/mpl_thread_solaris.h | 195 +
src/mpi/romio/mpl/include/mpl_thread_win.h | 106 +
src/mpi/romio/mpl/include/mpl_timer.h.in | 247 +
.../romio/mpl/include/mpl_timer_clock_gettime.h | 19 +
src/mpi/romio/mpl/include/mpl_timer_device.h | 32 +
.../romio/mpl/include/mpl_timer_gcc_ia64_cycle.h | 26 +
src/mpi/romio/mpl/include/mpl_timer_gethrtime.h | 14 +
src/mpi/romio/mpl/include/mpl_timer_gettimeofday.h | 15 +
.../romio/mpl/include/mpl_timer_linux86_cycle.h | 42 +
.../mpl/include/mpl_timer_mach_absolute_time.h | 14 +
src/mpi/romio/mpl/include/mpl_timer_ppc64_cycle.h | 39 +
.../include/mpl_timer_query_performance_counter.h | 20 +
src/mpi/romio/mpl/include/mpl_timer_win86_cycle.h | 25 +
src/mpi/romio/mpl/include/mpl_trmem.h | 199 +
src/mpi/romio/mpl/include/mpl_uthash.h | 980 +
src/mpi/romio/mpl/include/mpl_utlist.h | 577 +
src/mpi/romio/mpl/include/mpl_valgrind.h | 199 +
src/mpi/romio/mpl/include/mpl_yield.h | 64 +
src/mpi/romio/mpl/localdefs.in | 7 +
src/mpi/romio/mpl/src/Makefile.mk | 16 +
src/mpi/romio/mpl/src/bt/.state-cache | 7 +
src/mpi/romio/mpl/src/bt/Makefile.mk | 7 +
src/mpi/romio/mpl/src/bt/mpl_bt.c | 134 +
src/mpi/romio/mpl/src/dbg/.state-cache | 7 +
src/mpi/romio/mpl/src/dbg/Makefile.mk | 8 +
src/mpi/romio/mpl/src/dbg/mpl_dbg.c | 964 +
src/mpi/romio/mpl/src/env/.state-cache | 7 +
src/mpi/romio/mpl/src/env/Makefile.mk | 7 +
.../mplenv.c => mpi/romio/mpl/src/env/mpl_env.c} | 0
src/mpi/romio/mpl/src/mem/.state-cache | 7 +
src/mpi/romio/mpl/src/mem/Makefile.mk | 7 +
src/mpi/romio/mpl/src/mem/mpl_trmem.c | 825 +
src/mpi/romio/mpl/src/msg/.state-cache | 7 +
src/mpi/romio/mpl/src/msg/Makefile.mk | 7 +
.../mplmsg.c => mpi/romio/mpl/src/msg/mpl_msg.c} | 0
src/mpi/romio/mpl/src/shm/.state-cache | 16 +
src/mpi/romio/mpl/src/shm/Makefile.mk | 12 +
src/mpi/romio/mpl/src/shm/mpl_shm.c | 112 +
src/mpi/romio/mpl/src/shm/mpl_shm_mmap.c | 181 +
src/mpi/romio/mpl/src/shm/mpl_shm_sysv.c | 154 +
src/mpi/romio/mpl/src/shm/mpl_shm_win.c | 139 +
src/mpi/romio/mpl/src/sock/.state-cache | 7 +
src/mpi/romio/mpl/src/sock/Makefile.mk | 7 +
.../romio/mpl/src/sock/mpl_sock.c} | 0
src/mpi/romio/mpl/src/str/.state-cache | 10 +
src/mpi/romio/mpl/src/str/Makefile.mk | 7 +
src/mpi/romio/mpl/src/str/mpl_argstr.c | 880 +
src/mpi/romio/mpl/src/str/mpl_str.c | 366 +
src/mpi/romio/mpl/src/thread/.state-cache | 16 +
src/mpi/romio/mpl/src/thread/Makefile.mk | 12 +
src/mpi/romio/mpl/src/thread/mpl_thread.c | 22 +
src/mpi/romio/mpl/src/thread/mpl_thread_posix.c | 92 +
src/mpi/romio/mpl/src/thread/mpl_thread_solaris.c | 83 +
src/mpi/romio/mpl/src/thread/mpl_thread_win.c | 352 +
src/mpi/romio/mpl/src/timer/.state-cache | 34 +
src/mpi/romio/mpl/src/timer/Makefile.mk | 18 +
.../romio/mpl/src/timer/mpl_timer_clock_gettime.c | 76 +
src/mpi/romio/mpl/src/timer/mpl_timer_device.c | 54 +
.../romio/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c | 69 +
src/mpi/romio/mpl/src/timer/mpl_timer_gethrtime.c | 69 +
.../romio/mpl/src/timer/mpl_timer_gettimeofday.c | 72 +
.../romio/mpl/src/timer/mpl_timer_linux86_cycle.c | 69 +
.../mpl/src/timer/mpl_timer_mach_absolute_time.c | 60 +
.../romio/mpl/src/timer/mpl_timer_ppc64_cycle.c | 128 +
.../timer/mpl_timer_query_performance_counter.c | 45 +
.../romio/mpl/src/timer/mpl_timer_win86_cycle.c | 60 +
src/mpi/romio/mpl/test/.state-cache | 7 +
src/mpi/romio/mpl/test/strsep.c | 77 +
src/mpi/romio/test-internal/.state-cache | 10 +-
src/mpi/romio/test-internal/Makefile.in | 10 +
src/mpi/romio/test/.state-cache | 114 +-
src/mpi/romio/test/Makefile.in | 10 +
src/mpi/romio/test/atomicity.c | 16 +-
src/mpi/romio/test/darray_read.c | 5 +
src/mpi/romio/test/excl.c | 9 +
src/mpi/romio/test/file_info.c | 2 +-
src/mpi/romio/test/hindexed.c | 66 +-
src/mpi/romio/test/large_array.c | 3 +-
src/mpi/romio/test/large_file.c.in | 2 +-
src/mpi/romio/test/ordered_fp.c | 1 -
src/mpi/romio/test/shared_fp.c | 5 +-
src/mpi/romio/test/syshints.c | 6 +
src/mpi/romio/test/types_with_zeros.c | 6 +
src/mpi/romio/util/.state-cache | 2 +-
src/mpi/romio/version.m4 | 6 +-
src/mpi/spawn/.state-cache | 66 +-
src/mpi/spawn/close_port.c | 6 +-
src/mpi/spawn/comm_accept.c | 24 +-
src/mpi/spawn/comm_connect.c | 24 +-
src/mpi/spawn/comm_disconnect.c | 16 +-
src/mpi/spawn/comm_get_parent.c | 8 +-
src/mpi/spawn/comm_join.c | 28 +-
src/mpi/spawn/comm_spawn.c | 21 +-
src/mpi/spawn/comm_spawn_multiple.c | 26 +-
src/mpi/spawn/lookup_name.c | 14 +-
src/mpi/spawn/namepub.h | 8 +-
src/mpi/spawn/open_port.c | 12 +-
src/mpi/spawn/publish_name.c | 12 +-
src/mpi/spawn/unpublish_name.c | 12 +-
src/mpi/timer/.state-cache | 12 +-
src/mpi/timer/wtick.c | 8 +-
src/mpi/timer/wtime.c | 6 +-
src/mpi/topo/.state-cache | 183 +-
src/mpi/topo/Makefile.mk | 2 -
src/mpi/topo/cart_coords.c | 13 +-
src/mpi/topo/cart_create.c | 47 +-
src/mpi/topo/cart_get.c | 13 +-
src/mpi/topo/cart_map.c | 19 +-
src/mpi/topo/cart_rank.c | 13 +-
src/mpi/topo/cart_shift.c | 15 +-
src/mpi/topo/cart_sub.c | 25 +-
src/mpi/topo/cartdim_get.c | 13 +-
src/mpi/topo/dims_create.c | 1036 +-
src/mpi/topo/dist_gr_create.c | 125 +-
src/mpi/topo/dist_gr_create_adj.c | 45 +-
src/mpi/topo/dist_gr_neighb.c | 21 +-
src/mpi/topo/dist_gr_neighb_count.c | 15 +-
src/mpi/topo/graph_get.c | 13 +-
src/mpi/topo/graph_map.c | 21 +-
src/mpi/topo/graph_nbr.c | 15 +-
src/mpi/topo/graphcreate.c | 33 +-
src/mpi/topo/graphdimsget.c | 13 +-
src/mpi/topo/graphnbrcnt.c | 15 +-
src/mpi/topo/inhb_allgather.c | 57 +-
src/mpi/topo/inhb_allgatherv.c | 57 +-
src/mpi/topo/inhb_alltoall.c | 59 +-
src/mpi/topo/inhb_alltoallv.c | 59 +-
src/mpi/topo/inhb_alltoallw.c | 51 +-
src/mpi/topo/nhb_allgather.c | 32 +-
src/mpi/topo/nhb_allgatherv.c | 32 +-
src/mpi/topo/nhb_alltoall.c | 32 +-
src/mpi/topo/nhb_alltoallv.c | 32 +-
src/mpi/topo/nhb_alltoallw.c | 24 +-
src/mpi/topo/topo.h | 67 -
src/mpi/topo/topo_test.c | 13 +-
src/mpi/topo/topoutil.c | 95 +-
src/mpi_t/cat_changed.c | 6 +-
src/mpi_t/cat_get_categories.c | 9 +-
src/mpi_t/cat_get_cvars.c | 9 +-
src/mpi_t/cat_get_index.c | 10 +-
src/mpi_t/cat_get_info.c | 6 +-
src/mpi_t/cat_get_num.c | 6 +-
src/mpi_t/cat_get_pvars.c | 9 +-
src/mpi_t/cvar_get_index.c | 10 +-
src/mpi_t/cvar_get_info.c | 6 +-
src/mpi_t/cvar_get_num.c | 6 +-
src/mpi_t/cvar_handle_alloc.c | 14 +-
src/mpi_t/cvar_handle_free.c | 8 +-
src/mpi_t/cvar_read.c | 10 +-
src/mpi_t/cvar_write.c | 12 +-
src/mpi_t/enum_get_info.c | 6 +-
src/mpi_t/enum_get_item.c | 6 +-
src/mpi_t/mpit.c | 107 +-
src/mpi_t/mpit_finalize.c | 48 +-
src/mpi_t/mpit_initthread.c | 20 +-
src/mpi_t/pvar_get_index.c | 10 +-
src/mpi_t/pvar_get_info.c | 6 +-
src/mpi_t/pvar_get_num.c | 6 +-
src/mpi_t/pvar_handle_alloc.c | 16 +-
src/mpi_t/pvar_handle_free.c | 13 +-
src/mpi_t/pvar_read.c | 12 +-
src/mpi_t/pvar_readreset.c | 6 +-
src/mpi_t/pvar_reset.c | 13 +-
src/mpi_t/pvar_session_create.c | 14 +-
src/mpi_t/pvar_session_free.c | 13 +-
src/mpi_t/pvar_start.c | 13 +-
src/mpi_t/pvar_stop.c | 10 +-
src/mpi_t/pvar_write.c | 6 +-
src/mpid/Makefile.mk | 8 +-
src/mpid/ch3/Makefile.mk | 4 +-
src/mpid/ch3/channels/nemesis/Makefile.mk | 1 -
src/mpid/ch3/channels/nemesis/include/.state-cache | 65 +-
.../channels/nemesis/include/mpid_nem_datatypes.h | 37 +-
.../ch3/channels/nemesis/include/mpid_nem_debug.h | 2 +-
.../ch3/channels/nemesis/include/mpid_nem_defs.h | 38 +-
.../ch3/channels/nemesis/include/mpid_nem_fbox.h | 8 +-
.../nemesis/include/mpid_nem_generic_queue.h | 339 -
.../ch3/channels/nemesis/include/mpid_nem_impl.h | 71 +-
.../ch3/channels/nemesis/include/mpid_nem_inline.h | 252 +-
.../ch3/channels/nemesis/include/mpid_nem_nets.h | 6 +-
.../ch3/channels/nemesis/include/mpid_nem_post.h | 17 +-
.../ch3/channels/nemesis/include/mpid_nem_pre.h | 6 +-
.../ch3/channels/nemesis/include/mpid_nem_queue.h | 18 +-
.../ch3/channels/nemesis/include/mpidi_ch3_impl.h | 77 +-
.../ch3/channels/nemesis/include/mpidi_ch3_post.h | 6 +-
.../ch3/channels/nemesis/include/mpidi_ch3_pre.h | 86 +-
.../ch3/channels/nemesis/netmod/llc/.state-cache | 64 +-
.../ch3/channels/nemesis/netmod/llc/Makefile.mk | 2 +-
.../ch3/channels/nemesis/netmod/llc/errnames.txt | 1 -
.../ch3/channels/nemesis/netmod/llc/llc_cancel.c | 8 +-
.../ch3/channels/nemesis/netmod/llc/llc_fini.c | 6 +-
.../ch3/channels/nemesis/netmod/llc/llc_impl.h | 56 +-
.../ch3/channels/nemesis/netmod/llc/llc_init.c | 36 +-
.../ch3/channels/nemesis/netmod/llc/llc_poll.c | 106 +-
.../ch3/channels/nemesis/netmod/llc/llc_probe.c | 60 +-
.../ch3/channels/nemesis/netmod/llc/llc_send.c | 318 +-
src/mpid/ch3/channels/nemesis/netmod/llc/llc_vc.c | 32 +-
.../ch3/channels/nemesis/netmod/mxm/.state-cache | 40 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_cancel.c | 8 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_finalize.c | 4 +
.../ch3/channels/nemesis/netmod/mxm/mxm_impl.h | 87 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_init.c | 119 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_poll.c | 134 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_probe.c | 48 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_send.c | 286 +-
.../ch3/channels/nemesis/netmod/none/.state-cache | 2 +-
src/mpid/ch3/channels/nemesis/netmod/none/none.c | 4 +-
.../ch3/channels/nemesis/netmod/ofi/.state-cache | 38 +-
.../ch3/channels/nemesis/netmod/ofi/Makefile.mk | 2 +-
src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_cm.c | 102 +-
.../ch3/channels/nemesis/netmod/ofi/ofi_data.c | 3 +-
.../ch3/channels/nemesis/netmod/ofi/ofi_impl.h | 154 +-
.../ch3/channels/nemesis/netmod/ofi/ofi_init.c | 55 +-
src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_msg.c | 178 +-
.../nemesis/netmod/ofi/ofi_probe_template.c | 57 +-
.../ch3/channels/nemesis/netmod/ofi/ofi_progress.c | 20 +-
.../channels/nemesis/netmod/ofi/ofi_tag_layout.h | 10 +-
.../ch3/channels/nemesis/netmod/ofi/ofi_tagged.c | 22 +-
.../nemesis/netmod/ofi/ofi_tagged_template.c | 255 +-
.../channels/nemesis/netmod/portals4/.state-cache | 82 +-
.../channels/nemesis/netmod/portals4/ptl_impl.h | 84 +-
.../channels/nemesis/netmod/portals4/ptl_init.c | 153 +-
.../ch3/channels/nemesis/netmod/portals4/ptl_lmt.c | 20 +-
.../ch3/channels/nemesis/netmod/portals4/ptl_nm.c | 182 +-
.../channels/nemesis/netmod/portals4/ptl_poll.c | 46 +-
.../channels/nemesis/netmod/portals4/ptl_probe.c | 128 +-
.../channels/nemesis/netmod/portals4/ptl_recv.c | 285 +-
.../channels/nemesis/netmod/portals4/ptl_send.c | 145 +-
.../ch3/channels/nemesis/netmod/portals4/rptl.c | 86 +-
.../channels/nemesis/netmod/portals4/rptl_init.c | 48 +-
.../ch3/channels/nemesis/netmod/portals4/rptl_op.c | 20 +-
.../ch3/channels/nemesis/netmod/tcp/.state-cache | 72 +-
src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.c | 524 +-
src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.h | 8 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_ckpt.c | 40 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_finalize.c | 8 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_getip.c | 38 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_impl.h | 30 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_init.c | 137 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_queue.h | 12 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_send.c | 194 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_utility.c | 36 +-
src/mpid/ch3/channels/nemesis/src/.state-cache | 198 +-
src/mpid/ch3/channels/nemesis/src/Makefile.mk | 2 -
src/mpid/ch3/channels/nemesis/src/ch3_finalize.c | 6 +-
src/mpid/ch3/channels/nemesis/src/ch3_init.c | 96 +-
src/mpid/ch3/channels/nemesis/src/ch3_isend.c | 22 +-
src/mpid/ch3/channels/nemesis/src/ch3_isendv.c | 42 +-
src/mpid/ch3/channels/nemesis/src/ch3_istartmsg.c | 28 +-
src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c | 50 +-
src/mpid/ch3/channels/nemesis/src/ch3_progress.c | 380 +-
src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c | 38 +-
src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c | 194 +-
src/mpid/ch3/channels/nemesis/src/ch3i_comm.c | 75 +-
.../ch3/channels/nemesis/src/ch3i_eagernoncontig.c | 22 +-
src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c | 524 -
.../ch3/channels/nemesis/src/mpid_nem_barrier.c | 72 -
src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c | 101 +-
src/mpid/ch3/channels/nemesis/src/mpid_nem_debug.c | 20 +-
.../ch3/channels/nemesis/src/mpid_nem_finalize.c | 34 +-
src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c | 142 +-
src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c | 245 +-
.../ch3/channels/nemesis/src/mpid_nem_lmt_dma.c | 132 +-
.../ch3/channels/nemesis/src/mpid_nem_lmt_shm.c | 305 +-
.../channels/nemesis/src/mpid_nem_lmt_vmsplice.c | 118 +-
src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c | 42 +-
.../ch3/channels/nemesis/src/mpid_nem_mpich_rma.c | 204 +-
.../ch3/channels/nemesis/src/mpid_nem_network.c | 12 +-
src/mpid/ch3/channels/nemesis/subconfigure.m4 | 11 +-
.../channels/nemesis/utils/monitor/.state-cache | 10 +-
.../nemesis/utils/replacements/.state-cache | 2 +-
src/mpid/ch3/channels/sock/include/.state-cache | 14 +-
.../ch3/channels/sock/include/mpidi_ch3_impl.h | 10 +-
src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h | 10 +-
src/mpid/ch3/channels/sock/include/mpidu_sock.h | 1130 +
src/mpid/ch3/channels/sock/include/mpidu_socki.h | 62 +
src/mpid/ch3/channels/sock/src/.state-cache | 86 +-
src/mpid/ch3/channels/sock/src/Makefile.mk | 5 +
src/mpid/ch3/channels/sock/src/ch3_finalize.c | 6 +-
src/mpid/ch3/channels/sock/src/ch3_init.c | 14 +-
src/mpid/ch3/channels/sock/src/ch3_isend.c | 80 +-
src/mpid/ch3/channels/sock/src/ch3_isendv.c | 78 +-
src/mpid/ch3/channels/sock/src/ch3_istartmsg.c | 86 +-
src/mpid/ch3/channels/sock/src/ch3_istartmsgv.c | 82 +-
src/mpid/ch3/channels/sock/src/ch3_progress.c | 245 +-
src/mpid/ch3/channels/sock/src/ch3_win_fns.c | 18 +-
src/mpid/ch3/channels/sock/src/errnames.txt | 86 +
src/mpid/ch3/channels/sock/src/sock.c | 4187 +
src/mpid/ch3/channels/sock/subconfigure.m4 | 129 +-
src/mpid/ch3/errnames.txt | 3 +
src/mpid/ch3/include/.state-cache | 85 +-
src/mpid/ch3/include/mpid_coll.h | 720 +
src/mpid/ch3/include/mpid_port.h | 200 +
src/mpid/ch3/include/mpid_rma_issue.h | 330 +-
src/mpid/ch3/include/mpid_rma_lockqueue.h | 12 +-
src/mpid/ch3/include/mpid_rma_oplist.h | 44 +-
src/mpid/ch3/include/mpid_rma_shm.h | 154 +-
src/mpid/ch3/include/mpid_rma_types.h | 6 +-
src/mpid/ch3/include/mpid_sched.h | 26 +
src/mpid/ch3/include/mpid_thread.h | 24 +-
src/mpid/ch3/include/mpidi_recvq_statistics.h | 2 +-
src/mpid/ch3/include/mpidimpl.h | 688 +-
src/mpid/ch3/include/mpidpkt.h | 69 +-
src/mpid/ch3/include/mpidpost.h | 75 +-
src/mpid/ch3/include/mpidpre.h | 329 +-
src/mpid/ch3/include/mpidrma.h | 297 +-
src/mpid/ch3/src/.state-cache | 533 +-
src/mpid/ch3/src/ch3u_buffer.c | 110 +-
src/mpid/ch3/src/ch3u_comm.c | 200 +-
src/mpid/ch3/src/ch3u_comm_spawn_multiple.c | 60 +-
src/mpid/ch3/src/ch3u_eager.c | 220 +-
src/mpid/ch3/src/ch3u_eagersync.c | 118 +-
src/mpid/ch3/src/ch3u_handle_connection.c | 124 +-
src/mpid/ch3/src/ch3u_handle_op_req.c | 20 +-
src/mpid/ch3/src/ch3u_handle_recv_pkt.c | 158 +-
src/mpid/ch3/src/ch3u_handle_recv_req.c | 548 +-
src/mpid/ch3/src/ch3u_handle_revoke_pkt.c | 7 +-
src/mpid/ch3/src/ch3u_handle_send_req.c | 78 +-
src/mpid/ch3/src/ch3u_port.c | 1124 +-
src/mpid/ch3/src/ch3u_recvq.c | 208 +-
src/mpid/ch3/src/ch3u_request.c | 356 +-
src/mpid/ch3/src/ch3u_rma_ops.c | 214 +-
src/mpid/ch3/src/ch3u_rma_pkthandler.c | 818 +-
src/mpid/ch3/src/ch3u_rma_progress.c | 32 +-
src/mpid/ch3/src/ch3u_rma_reqops.c | 88 +-
src/mpid/ch3/src/ch3u_rma_sync.c | 258 +-
src/mpid/ch3/src/ch3u_rndv.c | 140 +-
src/mpid/ch3/src/ch3u_win_fns.c | 121 +-
src/mpid/ch3/src/mpid_abort.c | 10 +-
src/mpid/ch3/src/mpid_aint.c | 16 +-
src/mpid/ch3/src/mpid_cancel_recv.c | 14 +-
src/mpid/ch3/src/mpid_cancel_send.c | 98 +-
src/mpid/ch3/src/mpid_coll.c | 710 +
src/mpid/ch3/src/mpid_comm_disconnect.c | 8 +-
src/mpid/ch3/src/mpid_comm_failure_ack.c | 28 +-
src/mpid/ch3/src/mpid_comm_get_all_failed_procs.c | 44 +-
src/mpid/ch3/src/mpid_comm_revoke.c | 16 +-
src/mpid/ch3/src/mpid_comm_spawn_multiple.c | 10 +-
src/mpid/ch3/src/mpid_finalize.c | 14 +-
src/mpid/ch3/src/mpid_getpname.c | 8 +-
src/mpid/ch3/src/mpid_improbe.c | 10 +-
src/mpid/ch3/src/mpid_imrecv.c | 42 +-
src/mpid/ch3/src/mpid_init.c | 67 +-
src/mpid/ch3/src/mpid_iprobe.c | 10 +-
src/mpid/ch3/src/mpid_irecv.c | 50 +-
src/mpid/ch3/src/mpid_irsend.c | 38 +-
src/mpid/ch3/src/mpid_isend.c | 40 +-
src/mpid/ch3/src/mpid_issend.c | 37 +-
src/mpid/ch3/src/mpid_mprobe.c | 6 +-
src/mpid/ch3/src/mpid_mrecv.c | 8 +-
src/mpid/ch3/src/mpid_port.c | 66 +-
src/mpid/ch3/src/mpid_probe.c | 8 +-
src/mpid/ch3/src/mpid_recv.c | 50 +-
src/mpid/ch3/src/mpid_rma.c | 100 +-
src/mpid/ch3/src/mpid_rsend.c | 28 +-
src/mpid/ch3/src/mpid_send.c | 30 +-
src/mpid/ch3/src/mpid_ssend.c | 26 +-
src/mpid/ch3/src/mpid_startall.c | 128 +-
src/mpid/ch3/src/mpid_vc.c | 888 +-
src/mpid/ch3/src/mpidi_isend_self.c | 38 +-
src/mpid/ch3/src/mpidi_pg.c | 154 +-
src/mpid/ch3/src/mpidi_printf.c | 106 +-
src/mpid/ch3/src/mpidi_rma.c | 58 +-
src/mpid/ch3/util/ftb/.state-cache | 2 +-
src/mpid/ch3/util/ftb/ftb.c | 28 +-
src/mpid/ch3/util/sock/.state-cache | 16 +-
src/mpid/ch3/util/sock/ch3u_connect_sock.c | 350 +-
src/mpid/ch3/util/sock/ch3u_getinterfaces.c | 24 +-
src/mpid/ch3/util/sock/ch3u_init_sock.c | 10 +-
src/mpid/ch3/util/sock/ch3usock.h | 18 +-
src/mpid/ch3/util/sock/errnames.txt | 2 +-
src/mpid/ch3/util/sock/findinterfaces.c | 8 +-
src/mpid/ch3/util/unordered/.state-cache | 2 +-
src/mpid/ch3/util/unordered/unordered.c | 18 +-
src/mpid/ch4/.gitignore | 6 +
src/mpid/ch4/Makefile.mk | 21 +
src/mpid/ch4/cross/gcc-linux-x86-8 | 13 +
src/mpid/ch4/cross/icc-linux-x86-8 | 13 +
src/mpid/ch4/errnames.txt | 47 +
src/mpid/ch4/generic/Makefile.mk | 20 +
src/mpid/ch4/generic/mpidig.h | 40 +
src/mpid/ch4/generic/mpidig_globals.c | 15 +
src/mpid/ch4/generic/mpidig_init.c | 259 +
src/mpid/ch4/generic/mpidig_recv.h | 433 +
src/mpid/ch4/generic/mpidig_send.h | 473 +
src/mpid/ch4/include/Makefile.mk | 23 +
src/mpid/ch4/include/mpid_sched.h | 30 +
src/mpid/ch4/include/mpid_thread.h | 68 +
src/mpid/ch4/include/mpid_ticketlock.h | 202 +
src/mpid/ch4/include/mpidch4.h | 428 +
src/mpid/ch4/include/mpidch4r.h | 26 +
src/mpid/ch4/include/mpidimpl.h | 30 +
src/mpid/ch4/include/mpidpost.h | 52 +
src/mpid/ch4/include/mpidpre.h | 466 +
src/mpid/ch4/include/netmodpre.h.in | 27 +
src/mpid/ch4/include/shmpre.h.in | 20 +
src/mpid/ch4/netmod/Makefile.mk | 22 +
src/mpid/ch4/netmod/include/netmod.h | 993 +
src/mpid/ch4/netmod/include/netmod_impl.h | 2016 +
src/mpid/ch4/netmod/ofi/Makefile.mk | 22 +
src/mpid/ch4/netmod/ofi/catalog.c | 61 +
src/mpid/ch4/netmod/ofi/errnames.txt | 97 +
src/mpid/ch4/netmod/ofi/fi_list.h | 196 +
src/mpid/ch4/netmod/ofi/func_table.c | 152 +
src/mpid/ch4/netmod/ofi/globals.c | 13 +
src/mpid/ch4/netmod/ofi/netmod_direct.h | 41 +
src/mpid/ch4/netmod/ofi/ofi_am.h | 219 +
src/mpid/ch4/netmod/ofi/ofi_am_events.h | 414 +
src/mpid/ch4/netmod/ofi/ofi_am_impl.h | 554 +
src/mpid/ch4/netmod/ofi/ofi_am_probe.h | 39 +
src/mpid/ch4/netmod/ofi/ofi_am_recv.h | 63 +
src/mpid/ch4/netmod/ofi/ofi_am_rma.h | 153 +
src/mpid/ch4/netmod/ofi/ofi_am_send.h | 132 +
src/mpid/ch4/netmod/ofi/ofi_am_spawn.h | 50 +
src/mpid/ch4/netmod/ofi/ofi_am_win.h | 163 +
src/mpid/ch4/netmod/ofi/ofi_coll.h | 875 +
src/mpid/ch4/netmod/ofi/ofi_comm.h | 65 +
src/mpid/ch4/netmod/ofi/ofi_control.h | 72 +
src/mpid/ch4/netmod/ofi/ofi_datatype.h | 26 +
src/mpid/ch4/netmod/ofi/ofi_events.h | 819 +
src/mpid/ch4/netmod/ofi/ofi_impl.h | 439 +
src/mpid/ch4/netmod/ofi/ofi_init.h | 969 +
src/mpid/ch4/netmod/ofi/ofi_iovec_util.h | 390 +
src/mpid/ch4/netmod/ofi/ofi_op.h | 35 +
src/mpid/ch4/netmod/ofi/ofi_pre.h | 184 +
src/mpid/ch4/netmod/ofi/ofi_probe.h | 168 +
src/mpid/ch4/netmod/ofi/ofi_proc.h | 29 +
src/mpid/ch4/netmod/ofi/ofi_progress.h | 63 +
src/mpid/ch4/netmod/ofi/ofi_recv.h | 286 +
src/mpid/ch4/netmod/ofi/ofi_rma.h | 1322 +
src/mpid/ch4/netmod/ofi/ofi_send.h | 567 +
src/mpid/ch4/netmod/ofi/ofi_spawn.h | 593 +
src/mpid/ch4/netmod/ofi/ofi_types.h | 537 +
src/mpid/ch4/netmod/ofi/ofi_unimpl.h | 19 +
src/mpid/ch4/netmod/ofi/ofi_win.h | 1356 +
src/mpid/ch4/netmod/ofi/subconfigure.m4 | 174 +
src/mpid/ch4/netmod/ofi/util.c | 821 +
src/mpid/ch4/netmod/portals4/Makefile.mk | 7 +
src/mpid/ch4/netmod/portals4/errnames.txt | 10 +
src/mpid/ch4/netmod/portals4/func_table.c | 152 +
src/mpid/ch4/netmod/portals4/globals.c | 14 +
src/mpid/ch4/netmod/portals4/netmod_direct.h | 30 +
src/mpid/ch4/netmod/portals4/portals4_pre.h | 47 +
src/mpid/ch4/netmod/portals4/ptl_am.h | 292 +
src/mpid/ch4/netmod/portals4/ptl_coll.h | 877 +
src/mpid/ch4/netmod/portals4/ptl_comm.h | 39 +
src/mpid/ch4/netmod/portals4/ptl_datatype.h | 22 +
src/mpid/ch4/netmod/portals4/ptl_impl.h | 58 +
src/mpid/ch4/netmod/portals4/ptl_init.h | 255 +
src/mpid/ch4/netmod/portals4/ptl_op.h | 24 +
src/mpid/ch4/netmod/portals4/ptl_probe.h | 39 +
src/mpid/ch4/netmod/portals4/ptl_proc.h | 29 +
src/mpid/ch4/netmod/portals4/ptl_progress.h | 185 +
src/mpid/ch4/netmod/portals4/ptl_recv.h | 65 +
src/mpid/ch4/netmod/portals4/ptl_request.h | 32 +
src/mpid/ch4/netmod/portals4/ptl_rma.h | 153 +
src/mpid/ch4/netmod/portals4/ptl_send.h | 132 +
src/mpid/ch4/netmod/portals4/ptl_spawn.h | 50 +
src/mpid/ch4/netmod/portals4/ptl_types.h | 73 +
src/mpid/ch4/netmod/portals4/ptl_unimpl.h | 19 +
src/mpid/ch4/netmod/portals4/ptl_win.h | 163 +
src/mpid/ch4/netmod/portals4/subconfigure.m4 | 33 +
src/mpid/ch4/netmod/stubnm/Makefile.mk | 6 +
src/mpid/ch4/netmod/stubnm/globals.c | 147 +
src/mpid/ch4/netmod/stubnm/netmod_direct.h | 29 +
src/mpid/ch4/netmod/stubnm/stubnm_am.h | 84 +
src/mpid/ch4/netmod/stubnm/stubnm_coll.h | 877 +
src/mpid/ch4/netmod/stubnm/stubnm_comm.h | 39 +
src/mpid/ch4/netmod/stubnm/stubnm_datatype.h | 28 +
src/mpid/ch4/netmod/stubnm/stubnm_impl.h | 17 +
src/mpid/ch4/netmod/stubnm/stubnm_init.h | 79 +
src/mpid/ch4/netmod/stubnm/stubnm_op.h | 29 +
src/mpid/ch4/netmod/stubnm/stubnm_pre.h | 43 +
src/mpid/ch4/netmod/stubnm/stubnm_probe.h | 39 +
src/mpid/ch4/netmod/stubnm/stubnm_proc.h | 28 +
src/mpid/ch4/netmod/stubnm/stubnm_progress.h | 76 +
src/mpid/ch4/netmod/stubnm/stubnm_recv.h | 69 +
src/mpid/ch4/netmod/stubnm/stubnm_request.h | 26 +
src/mpid/ch4/netmod/stubnm/stubnm_rma.h | 153 +
src/mpid/ch4/netmod/stubnm/stubnm_send.h | 132 +
src/mpid/ch4/netmod/stubnm/stubnm_spawn.h | 50 +
src/mpid/ch4/netmod/stubnm/stubnm_unimpl.h | 19 +
src/mpid/ch4/netmod/stubnm/stubnm_win.h | 163 +
src/mpid/ch4/netmod/stubnm/subconfigure.m4 | 21 +
src/mpid/ch4/netmod/ucx/Makefile.mk | 15 +
src/mpid/ch4/netmod/ucx/errnames.txt | 10 +
src/mpid/ch4/netmod/ucx/func_table.c | 149 +
src/mpid/ch4/netmod/ucx/globals.c | 13 +
src/mpid/ch4/netmod/ucx/netmod_direct.h | 34 +
src/mpid/ch4/netmod/ucx/subconfigure.m4 | 61 +
src/mpid/ch4/netmod/ucx/ucx_am.h | 439 +
src/mpid/ch4/netmod/ucx/ucx_am_recv.h | 102 +
src/mpid/ch4/netmod/ucx/ucx_am_rma.h | 234 +
src/mpid/ch4/netmod/ucx/ucx_am_send.h | 132 +
src/mpid/ch4/netmod/ucx/ucx_am_win.h | 363 +
src/mpid/ch4/netmod/ucx/ucx_coll.h | 873 +
src/mpid/ch4/netmod/ucx/ucx_comm.h | 48 +
src/mpid/ch4/netmod/ucx/ucx_datatype.h | 143 +
src/mpid/ch4/netmod/ucx/ucx_impl.h | 149 +
src/mpid/ch4/netmod/ucx/ucx_init.h | 472 +
src/mpid/ch4/netmod/ucx/ucx_op.h | 24 +
src/mpid/ch4/netmod/ucx/ucx_pre.h | 71 +
src/mpid/ch4/netmod/ucx/ucx_probe.h | 99 +
src/mpid/ch4/netmod/ucx/ucx_proc.h | 26 +
src/mpid/ch4/netmod/ucx/ucx_progress.h | 147 +
src/mpid/ch4/netmod/ucx/ucx_recv.h | 245 +
src/mpid/ch4/netmod/ucx/ucx_request.h | 111 +
src/mpid/ch4/netmod/ucx/ucx_rma.h | 304 +
src/mpid/ch4/netmod/ucx/ucx_send.h | 482 +
src/mpid/ch4/netmod/ucx/ucx_spawn.h | 103 +
src/mpid/ch4/netmod/ucx/ucx_types.h | 62 +
src/mpid/ch4/netmod/ucx/ucx_win.h | 509 +
src/mpid/ch4/shm/Makefile.mk | 24 +
src/mpid/ch4/shm/include/shm.h | 1057 +
src/mpid/ch4/shm/include/shm_impl.h | 2129 +
src/mpid/ch4/shm/posix/Makefile.mk | 38 +
src/mpid/ch4/shm/posix/barrier.c | 42 +
src/mpid/ch4/shm/posix/func_table.c | 155 +
src/mpid/ch4/shm/posix/globals.c | 22 +
src/mpid/ch4/shm/posix/posix_am.h | 193 +
src/mpid/ch4/shm/posix/posix_coll.h | 880 +
src/mpid/ch4/shm/posix/posix_comm.h | 45 +
src/mpid/ch4/shm/posix/posix_datatypes.h | 185 +
src/mpid/ch4/shm/posix/posix_defs.h | 115 +
src/mpid/ch4/shm/posix/posix_impl.h | 174 +
src/mpid/ch4/shm/posix/posix_init.h | 376 +
src/mpid/ch4/shm/posix/posix_pre.h | 41 +
src/mpid/ch4/shm/posix/posix_probe.h | 146 +
src/mpid/ch4/shm/posix/posix_progress.h | 454 +
src/mpid/ch4/shm/posix/posix_queue.h | 343 +
src/mpid/ch4/shm/posix/posix_recv.h | 363 +
src/mpid/ch4/shm/posix/posix_request.h | 36 +
src/mpid/ch4/shm/posix/posix_rma.h | 195 +
src/mpid/ch4/shm/posix/posix_send.h | 468 +
src/mpid/ch4/shm/posix/posix_spawn.h | 75 +
src/mpid/ch4/shm/posix/posix_unimpl.h | 19 +
src/mpid/ch4/shm/posix/posix_win.h | 312 +
src/mpid/ch4/shm/posix/shm_direct.h | 27 +
src/mpid/ch4/shm/posix/subconfigure.m4 | 53 +
src/mpid/ch4/shm/stubshm/Makefile.mk | 7 +
src/mpid/ch4/shm/stubshm/func_table.c | 155 +
src/mpid/ch4/shm/stubshm/globals.c | 13 +
src/mpid/ch4/shm/stubshm/shm_direct.h | 27 +
src/mpid/ch4/shm/stubshm/stubshm_am.h | 193 +
src/mpid/ch4/shm/stubshm/stubshm_coll.h | 800 +
src/mpid/ch4/shm/stubshm/stubshm_comm.h | 38 +
src/mpid/ch4/shm/stubshm/stubshm_impl.h | 14 +
src/mpid/ch4/shm/stubshm/stubshm_init.h | 187 +
src/mpid/ch4/shm/stubshm/stubshm_pre.h | 27 +
src/mpid/ch4/shm/stubshm/stubshm_probe.h | 46 +
src/mpid/ch4/shm/stubshm/stubshm_proc.h | 26 +
src/mpid/ch4/shm/stubshm/stubshm_progress.h | 148 +
src/mpid/ch4/shm/stubshm/stubshm_recv.h | 97 +
src/mpid/ch4/shm/stubshm/stubshm_request.h | 36 +
src/mpid/ch4/shm/stubshm/stubshm_rma.h | 195 +
src/mpid/ch4/shm/stubshm/stubshm_send.h | 192 +
src/mpid/ch4/shm/stubshm/stubshm_spawn.h | 75 +
src/mpid/ch4/shm/stubshm/stubshm_unimpl.h | 19 +
src/mpid/ch4/shm/stubshm/stubshm_win.h | 312 +
src/mpid/ch4/shm/stubshm/subconfigure.m4 | 19 +
src/mpid/ch4/src/Makefile.mk | 43 +
src/mpid/ch4/src/ch4_coll.h | 751 +
src/mpid/ch4/src/ch4_comm.h | 623 +
src/mpid/ch4/src/ch4_globals.c | 63 +
src/mpid/ch4/src/ch4_impl.h | 749 +
src/mpid/ch4/src/ch4_init.h | 832 +
src/mpid/ch4/src/ch4_probe.h | 202 +
src/mpid/ch4/src/ch4_proc.h | 37 +
src/mpid/ch4/src/ch4_progress.h | 209 +
src/mpid/ch4/src/ch4_recv.h | 418 +
src/mpid/ch4/src/ch4_request.h | 137 +
src/mpid/ch4/src/ch4_rma.h | 305 +
src/mpid/ch4/src/ch4_send.h | 540 +
src/mpid/ch4/src/ch4_spawn.h | 330 +
src/mpid/ch4/src/ch4_types.h | 291 +
src/mpid/ch4/src/ch4_win.h | 533 +
src/mpid/ch4/src/ch4i_comm.h | 1226 +
src/mpid/ch4/src/ch4i_util.h | 20 +
src/mpid/ch4/src/ch4r_buf.h | 174 +
src/mpid/ch4/src/ch4r_callbacks.h | 637 +
src/mpid/ch4/src/ch4r_init.h | 149 +
src/mpid/ch4/src/ch4r_probe.h | 180 +
src/mpid/ch4/src/ch4r_proc.h | 518 +
src/mpid/ch4/src/ch4r_recv.h | 124 +
src/mpid/ch4/src/ch4r_recvq.h | 347 +
src/mpid/ch4/src/ch4r_request.h | 96 +
src/mpid/ch4/src/ch4r_rma.h | 967 +
src/mpid/ch4/src/ch4r_rma_origin_callbacks.h | 256 +
src/mpid/ch4/src/ch4r_rma_target_callbacks.h | 2099 +
src/mpid/ch4/src/ch4r_symheap.h | 260 +
src/mpid/ch4/src/ch4r_win.h | 1290 +
src/mpid/ch4/src/mpid_ch4_net_array.c.in | 30 +
src/mpid/ch4/src/mpid_ch4_shm_array.c.in | 34 +
src/mpid/ch4/subconfigure.m4 | 386 +
src/mpid/common/Makefile.mk | 2 +-
src/mpid/common/datatype/.state-cache | 121 +-
src/mpid/common/datatype/Makefile.mk | 47 +-
src/mpid/common/datatype/dataloop/.state-cache | 78 +-
src/mpid/common/datatype/dataloop/darray_support.c | 2 +-
src/mpid/common/datatype/dataloop/dataloop.c | 72 +-
src/mpid/common/datatype/dataloop/dataloop.h | 2 +-
.../datatype/dataloop/dataloop_create_struct.c | 8 +-
src/mpid/common/datatype/dataloop/dataloop_parts.h | 2 +-
src/mpid/common/datatype/dataloop/segment.c | 54 +-
src/mpid/common/datatype/dataloop/segment_count.c | 4 +-
.../common/datatype/dataloop/segment_flatten.c | 12 +-
.../common/datatype/dataloop/segment_packunpack.c | 4 +-
.../common/datatype/dataloop/subarray_support.c | 2 +-
.../common/datatype/dataloop/typesize_support.c | 6 +-
src/mpid/common/datatype/mpid_contents_support.c | 67 -
src/mpid/common/datatype/mpid_dataloop.h | 118 -
src/mpid/common/datatype/mpid_datatype.h | 760 -
src/mpid/common/datatype/mpid_datatype_contents.c | 237 -
src/mpid/common/datatype/mpid_datatype_fallback.h | 75 +
src/mpid/common/datatype/mpid_datatype_free.c | 59 -
src/mpid/common/datatype/mpid_ext32_datatype.c | 118 -
src/mpid/common/datatype/mpid_ext32_segment.c | 353 -
src/mpid/common/datatype/mpid_ext32_segment.h | 415 -
src/mpid/common/datatype/mpid_segment.c | 528 -
src/mpid/common/datatype/mpid_type_blockindexed.c | 194 -
src/mpid/common/datatype/mpid_type_commit.c | 72 -
src/mpid/common/datatype/mpid_type_contiguous.c | 138 -
.../common/datatype/mpid_type_create_pairtype.c | 225 -
.../common/datatype/mpid_type_create_resized.c | 113 -
src/mpid/common/datatype/mpid_type_debug.c | 670 -
src/mpid/common/datatype/mpid_type_dup.c | 111 -
src/mpid/common/datatype/mpid_type_get_contents.c | 91 -
src/mpid/common/datatype/mpid_type_get_envelope.c | 56 -
src/mpid/common/datatype/mpid_type_indexed.c | 238 -
src/mpid/common/datatype/mpid_type_struct.c | 439 -
src/mpid/common/datatype/mpid_type_vector.c | 166 -
src/mpid/common/datatype/mpid_type_zerolen.c | 78 -
src/mpid/common/datatype/mpidu_contents_support.c | 68 +
src/mpid/common/datatype/mpidu_dataloop.h | 114 +
src/mpid/common/datatype/mpidu_datatype.h | 756 +
src/mpid/common/datatype/mpidu_datatype_contents.c | 237 +
src/mpid/common/datatype/mpidu_datatype_free.c | 59 +
src/mpid/common/datatype/mpidu_ext32_datatype.c | 118 +
src/mpid/common/datatype/mpidu_ext32_segment.c | 353 +
src/mpid/common/datatype/mpidu_ext32_segment.h | 417 +
src/mpid/common/datatype/mpidu_segment.c | 528 +
src/mpid/common/datatype/mpidu_type_blockindexed.c | 194 +
src/mpid/common/datatype/mpidu_type_commit.c | 73 +
src/mpid/common/datatype/mpidu_type_contiguous.c | 138 +
.../common/datatype/mpidu_type_create_pairtype.c | 225 +
.../common/datatype/mpidu_type_create_resized.c | 113 +
src/mpid/common/datatype/mpidu_type_debug.c | 670 +
src/mpid/common/datatype/mpidu_type_dup.c | 111 +
src/mpid/common/datatype/mpidu_type_get_contents.c | 91 +
src/mpid/common/datatype/mpidu_type_get_envelope.c | 56 +
src/mpid/common/datatype/mpidu_type_indexed.c | 238 +
src/mpid/common/datatype/mpidu_type_struct.c | 439 +
src/mpid/common/datatype/mpidu_type_vector.c | 166 +
src/mpid/common/datatype/mpidu_type_zerolen.c | 78 +
src/mpid/common/datatype/mpir_type_flatten.c | 22 +-
src/mpid/common/hcoll/.state-cache | 20 +-
src/mpid/common/hcoll/hcoll.h | 32 +-
src/mpid/common/hcoll/hcoll_dtypes.h | 6 +
src/mpid/common/hcoll/hcoll_init.c | 37 +-
src/mpid/common/hcoll/hcoll_ops.c | 92 +-
src/mpid/common/hcoll/hcoll_rte.c | 75 +-
src/mpid/common/hcoll/hcollpre.h | 8 +-
src/mpid/common/hcoll/subconfigure.m4 | 2 +
src/mpid/common/sched/.state-cache | 11 +-
src/mpid/common/sched/Makefile.mk | 5 +-
src/mpid/common/sched/mpid_sched.c | 1018 -
src/mpid/common/sched/mpid_sched.h | 126 -
src/mpid/common/sched/mpid_sched_pre.h | 16 -
src/mpid/common/sched/mpidu_sched.c | 1067 +
src/mpid/common/sched/mpidu_sched.h | 141 +
src/mpid/common/shm/.state-cache | 28 +
src/mpid/common/shm/Makefile.mk | 22 +
src/mpid/common/shm/mpidu_generic_queue.h | 339 +
src/mpid/common/shm/mpidu_shm.h | 48 +
src/mpid/common/shm/mpidu_shm_alloc.c | 526 +
src/mpid/common/shm/mpidu_shm_barrier.c | 72 +
src/mpid/common/shm/mpidu_shm_impl.h | 14 +
src/mpid/common/shm/mpidu_shm_states.h | 19 +
src/mpid/common/shm/subconfigure.m4 | 21 +
src/mpid/common/sock/.state-cache | 7 -
src/mpid/common/sock/Makefile.mk | 27 -
src/mpid/common/sock/errnames.txt | 47 -
src/mpid/common/sock/iocp/.state-cache | 36 -
src/mpid/common/sock/iocp/Makefile.sm | 3 -
src/mpid/common/sock/iocp/mpidu_socki.h | 41 -
src/mpid/common/sock/iocp/sock.c | 2919 -
src/mpid/common/sock/mpidu_sock.h | 1127 -
src/mpid/common/sock/poll/.state-cache | 76 -
src/mpid/common/sock/poll/Makefile.mk | 36 -
src/mpid/common/sock/poll/errnames.txt | 43 -
src/mpid/common/sock/poll/mpidu_socki.h | 58 -
src/mpid/common/sock/poll/sock.c | 222 -
src/mpid/common/sock/poll/sock_immed.i | 701 -
src/mpid/common/sock/poll/sock_init.i | 52 -
src/mpid/common/sock/poll/sock_misc.i | 344 -
src/mpid/common/sock/poll/sock_post.i | 729 -
src/mpid/common/sock/poll/sock_set.i | 283 -
src/mpid/common/sock/poll/sock_wait.i | 822 -
src/mpid/common/sock/poll/socki_util.i | 1059 -
src/mpid/common/sock/poll/subconfigure.m4 | 138 -
src/mpid/common/sock/subconfigure.m4 | 25 -
src/mpid/common/thread/.state-cache | 2 +-
src/mpid/common/thread/mpidu_thread_fallback.h | 341 +-
src/mpid/common/timers/.state-cache | 2 +-
src/mpid/common/timers/Makefile.mk | 2 +-
src/mpid/common/timers/mpid_timers_fallback.h | 14 +-
src/mpid/include/mpidu_pre.h | 25 +
src/mpid/pamid/.gitattributes | 15 -
src/mpid/pamid/.gitignore | 3 -
src/mpid/pamid/Makefile.mk | 43 -
src/mpid/pamid/cross/bgq8 | 27 -
src/mpid/pamid/cross/pe4 | 27 -
src/mpid/pamid/cross/pe4-aix | 28 -
src/mpid/pamid/cross/pe8 | 27 -
src/mpid/pamid/cross/pe8-aix | 28 -
src/mpid/pamid/include/.gitignore | 1 -
src/mpid/pamid/include/mpidi_constants.h | 128 -
src/mpid/pamid/include/mpidi_datatypes.h | 658 -
src/mpid/pamid/include/mpidi_externs.h | 43 -
src/mpid/pamid/include/mpidi_hooks.h | 67 -
src/mpid/pamid/include/mpidi_macros.h | 217 -
src/mpid/pamid/include/mpidi_mutex.h | 374 -
src/mpid/pamid/include/mpidi_platform.h | 196 -
src/mpid/pamid/include/mpidi_prototypes.h | 460 -
src/mpid/pamid/include/mpidi_thread.h | 184 -
src/mpid/pamid/include/mpidi_trace.h | 266 -
src/mpid/pamid/include/mpidi_util.h | 187 -
src/mpid/pamid/include/mpidimpl.h | 197 -
src/mpid/pamid/include/mpidpost.h | 104 -
src/mpid/pamid/include/mpidpre.h | 79 -
src/mpid/pamid/include/mpix.h | 298 -
src/mpid/pamid/include/pamix.h | 147 -
src/mpid/pamid/src/Makefile.mk | 73 -
src/mpid/pamid/src/coll/Makefile.mk | 47 -
src/mpid/pamid/src/coll/allgather/Makefile.mk | 30 -
.../pamid/src/coll/allgather/mpido_allgather.c | 820 -
.../pamid/src/coll/allgather/mpido_iallgather.c | 73 -
src/mpid/pamid/src/coll/allgatherv/Makefile.mk | 30 -
.../pamid/src/coll/allgatherv/mpido_allgatherv.c | 921 -
.../pamid/src/coll/allgatherv/mpido_iallgatherv.c | 77 -
src/mpid/pamid/src/coll/allreduce/Makefile.mk | 30 -
.../pamid/src/coll/allreduce/mpido_allreduce.c | 562 -
.../pamid/src/coll/allreduce/mpido_iallreduce.c | 73 -
src/mpid/pamid/src/coll/alltoall/Makefile.mk | 30 -
src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c | 449 -
src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c | 76 -
src/mpid/pamid/src/coll/alltoallv/Makefile.mk | 30 -
.../pamid/src/coll/alltoallv/mpido_alltoallv.c | 734 -
.../pamid/src/coll/alltoallv/mpido_ialltoallv.c | 79 -
src/mpid/pamid/src/coll/alltoallw/Makefile.mk | 28 -
.../pamid/src/coll/alltoallw/mpido_ialltoallw.c | 79 -
src/mpid/pamid/src/coll/barrier/Makefile.mk | 30 -
src/mpid/pamid/src/coll/barrier/mpido_barrier.c | 146 -
src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c | 62 -
src/mpid/pamid/src/coll/bcast/Makefile.mk | 30 -
src/mpid/pamid/src/coll/bcast/mpido_bcast.c | 394 -
src/mpid/pamid/src/coll/bcast/mpido_ibcast.c | 67 -
src/mpid/pamid/src/coll/coll_utils.c | 405 -
src/mpid/pamid/src/coll/exscan/Makefile.mk | 28 -
src/mpid/pamid/src/coll/exscan/mpido_iexscan.c | 65 -
src/mpid/pamid/src/coll/gather/Makefile.mk | 30 -
src/mpid/pamid/src/coll/gather/mpido_gather.c | 642 -
src/mpid/pamid/src/coll/gather/mpido_igather.c | 72 -
src/mpid/pamid/src/coll/gatherv/Makefile.mk | 30 -
src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c | 573 -
src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c | 78 -
src/mpid/pamid/src/coll/ired_scat/Makefile.mk | 28 -
.../pamid/src/coll/ired_scat/mpido_ired_scat.c | 72 -
.../pamid/src/coll/ired_scat_block/Makefile.mk | 28 -
.../coll/ired_scat_block/mpido_ired_scat_block.c | 72 -
src/mpid/pamid/src/coll/red_scat/Makefile.mk | 29 -
src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c | 185 -
src/mpid/pamid/src/coll/reduce/Makefile.mk | 30 -
src/mpid/pamid/src/coll/reduce/mpido_ireduce.c | 72 -
src/mpid/pamid/src/coll/reduce/mpido_reduce.c | 422 -
src/mpid/pamid/src/coll/scan/Makefile.mk | 29 -
src/mpid/pamid/src/coll/scan/mpido_scan.c | 452 -
src/mpid/pamid/src/coll/scatter/Makefile.mk | 30 -
src/mpid/pamid/src/coll/scatter/mpido_iscatter.c | 74 -
src/mpid/pamid/src/coll/scatter/mpido_scatter.c | 591 -
src/mpid/pamid/src/coll/scatterv/Makefile.mk | 30 -
src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c | 73 -
src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c | 812 -
src/mpid/pamid/src/comm/Makefile.mk | 31 -
src/mpid/pamid/src/comm/mpid_comm.c | 432 -
src/mpid/pamid/src/comm/mpid_optcolls.c | 1047 -
src/mpid/pamid/src/comm/mpid_selectcolls.c | 746 -
src/mpid/pamid/src/dyntask/Makefile.mk | 32 -
src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c | 541 -
.../pamid/src/dyntask/mpid_comm_spawn_multiple.c | 414 -
src/mpid/pamid/src/dyntask/mpid_port.c | 317 -
src/mpid/pamid/src/dyntask/mpidi_pg.c | 1063 -
src/mpid/pamid/src/dyntask/mpidi_port.c | 1766 -
src/mpid/pamid/src/misc/Makefile.mk | 33 -
src/mpid/pamid/src/misc/mpid_abort.c | 103 -
src/mpid/pamid/src/misc/mpid_get_universe_size.c | 96 -
src/mpid/pamid/src/misc/mpid_getpname.c | 46 -
src/mpid/pamid/src/misc/mpid_mem.c | 42 -
src/mpid/pamid/src/misc/mpid_unimpl.c | 112 -
src/mpid/pamid/src/mpid_aint.c | 61 -
src/mpid/pamid/src/mpid_buffer.c | 250 -
src/mpid/pamid/src/mpid_finalize.c | 149 -
src/mpid/pamid/src/mpid_improbe.c | 49 -
src/mpid/pamid/src/mpid_imrecv.c | 91 -
src/mpid/pamid/src/mpid_init.c | 1704 -
src/mpid/pamid/src/mpid_iprobe.c | 47 -
src/mpid/pamid/src/mpid_mprobe.c | 41 -
src/mpid/pamid/src/mpid_mrecv.c | 34 -
src/mpid/pamid/src/mpid_probe.c | 41 -
src/mpid/pamid/src/mpid_progress.c | 355 -
src/mpid/pamid/src/mpid_progress.h | 297 -
src/mpid/pamid/src/mpid_recvq.c | 945 -
src/mpid/pamid/src/mpid_recvq.h | 425 -
src/mpid/pamid/src/mpid_recvq_mmap.cpp | 419 -
src/mpid/pamid/src/mpid_request.c | 88 -
src/mpid/pamid/src/mpid_request.h | 354 -
src/mpid/pamid/src/mpid_time.c | 62 -
src/mpid/pamid/src/mpid_vc.c | 360 -
src/mpid/pamid/src/mpidi_bufmm.c | 716 -
src/mpid/pamid/src/mpidi_env.c | 1314 -
src/mpid/pamid/src/mpidi_mutex.c | 88 -
src/mpid/pamid/src/mpidi_nbc_sched.c | 65 -
src/mpid/pamid/src/mpidi_pami_datatype.c | 155 -
src/mpid/pamid/src/mpidi_util.c | 2057 -
src/mpid/pamid/src/mpix/Makefile.mk | 29 -
src/mpid/pamid/src/mpix/mpix.c | 1210 -
src/mpid/pamid/src/onesided/Makefile.mk | 57 -
src/mpid/pamid/src/onesided/mpid_1s.c | 151 -
src/mpid/pamid/src/onesided/mpid_win_accumulate.c | 364 -
src/mpid/pamid/src/onesided/mpid_win_allocate.c | 99 -
.../pamid/src/onesided/mpid_win_allocate_shared.c | 561 -
src/mpid/pamid/src/onesided/mpid_win_attach.c | 58 -
.../pamid/src/onesided/mpid_win_compare_and_swap.c | 164 -
src/mpid/pamid/src/onesided/mpid_win_create.c | 213 -
.../pamid/src/onesided/mpid_win_create_dynamic.c | 90 -
src/mpid/pamid/src/onesided/mpid_win_detach.c | 53 -
src/mpid/pamid/src/onesided/mpid_win_fence.c | 71 -
.../pamid/src/onesided/mpid_win_fetch_and_op.c | 378 -
src/mpid/pamid/src/onesided/mpid_win_flush.c | 180 -
src/mpid/pamid/src/onesided/mpid_win_free.c | 132 -
src/mpid/pamid/src/onesided/mpid_win_get.c | 434 -
.../pamid/src/onesided/mpid_win_get_accumulate.c | 586 -
src/mpid/pamid/src/onesided/mpid_win_get_info.c | 104 -
src/mpid/pamid/src/onesided/mpid_win_lock.c | 230 -
src/mpid/pamid/src/onesided/mpid_win_lock_all.c | 206 -
src/mpid/pamid/src/onesided/mpid_win_pscw.c | 270 -
src/mpid/pamid/src/onesided/mpid_win_put.c | 434 -
src/mpid/pamid/src/onesided/mpid_win_reqops.c | 253 -
src/mpid/pamid/src/onesided/mpid_win_set_info.c | 102 -
.../pamid/src/onesided/mpid_win_shared_query.c | 65 -
src/mpid/pamid/src/onesided/mpid_win_sync.c | 54 -
src/mpid/pamid/src/onesided/mpidi_onesided.h | 389 -
src/mpid/pamid/src/onesided/mpidi_win_control.c | 149 -
src/mpid/pamid/src/pamix/Makefile.mk | 29 -
src/mpid/pamid/src/pamix/pamix.c | 351 -
src/mpid/pamid/src/pt2pt/Makefile.mk | 50 -
src/mpid/pamid/src/pt2pt/mpid_cancel.c | 138 -
src/mpid/pamid/src/pt2pt/mpid_irecv.h | 67 -
src/mpid/pamid/src/pt2pt/mpid_isend.h | 129 -
src/mpid/pamid/src/pt2pt/mpid_issend.c | 62 -
src/mpid/pamid/src/pt2pt/mpid_recv.c | 60 -
src/mpid/pamid/src/pt2pt/mpid_send.h | 67 -
src/mpid/pamid/src/pt2pt/mpid_ssend.c | 58 -
src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c | 312 -
src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c | 234 -
src/mpid/pamid/src/pt2pt/mpidi_callback_short.c | 268 -
src/mpid/pamid/src/pt2pt/mpidi_callback_util.c | 195 -
src/mpid/pamid/src/pt2pt/mpidi_control.c | 414 -
src/mpid/pamid/src/pt2pt/mpidi_done.c | 316 -
src/mpid/pamid/src/pt2pt/mpidi_recv.h | 257 -
src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c | 161 -
src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c | 266 -
src/mpid/pamid/src/pt2pt/mpidi_send.h | 128 -
src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c | 743 -
src/mpid/pamid/src/pt2pt/persistent/Makefile.mk | 30 -
.../pamid/src/pt2pt/persistent/mpid_recv_init.c | 56 -
.../pamid/src/pt2pt/persistent/mpid_send_init.c | 148 -
.../pamid/src/pt2pt/persistent/mpid_startall.c | 140 -
src/mpid/pamid/subconfigure.m4 | 350 -
src/mpl/Makefile.am | 37 +-
src/mpl/Makefile.in | 515 +-
src/mpl/aclocal.m4 | 2 +
src/mpl/confdb/aclocal_cc.m4 | 19 +-
src/mpl/confdb/aclocal_check_visibility.m4 | 123 +
src/mpl/confdb/aclocal_fc.m4 | 4 +-
src/mpl/confdb/aclocal_libs.m4 | 2 +-
src/mpl/confdb/aclocal_romio.m4 | 22 -
src/mpl/confdb/ax_tls.m4 | 13 +-
src/mpl/confdb/config.guess | 38 +-
src/mpl/confdb/config.sub | 26 +-
src/mpl/confdb/install-sh | 23 +-
src/mpl/confdb/libtool.m4 | 27 +-
src/mpl/confdb/ltmain.sh | 37 +-
src/mpl/confdb/random_r.m4 | 43 +
src/mpl/confdb/stdlib_h.m4 | 119 +
src/mpl/configure | 2274 +-
src/mpl/configure.ac | 657 +-
src/mpl/include/config.h.in | 190 +-
src/mpl/include/mpl.h | 125 +-
src/mpl/include/mpl_argstr.h | 49 +
src/mpl/include/mpl_base.h | 119 +
src/mpl/include/mpl_bt.h | 38 +
src/mpl/include/mpl_dbg.h | 148 +
src/mpl/include/mpl_env.h | 36 +
src/mpl/include/mpl_iov.h | 38 +
src/mpl/include/mpl_msg.h | 28 +
src/mpl/include/mpl_shm.h | 160 +
src/mpl/include/mpl_shm_mmap.h | 36 +
src/mpl/include/mpl_shm_sysv.h | 38 +
src/mpl/include/mpl_shm_win.h | 70 +
src/mpl/include/mpl_sock.h | 46 +
src/mpl/include/mpl_str.h | 58 +
src/mpl/include/mpl_thread.h | 44 +
src/mpl/include/mpl_thread_posix.h | 246 +
src/mpl/include/mpl_thread_priv.h | 98 +
src/mpl/include/mpl_thread_solaris.h | 195 +
src/mpl/include/mpl_thread_win.h | 106 +
src/mpl/include/mpl_timer.h.in | 247 +
src/mpl/include/mpl_timer_clock_gettime.h | 19 +
src/mpl/include/mpl_timer_device.h | 32 +
src/mpl/include/mpl_timer_gcc_ia64_cycle.h | 26 +
src/mpl/include/mpl_timer_gethrtime.h | 14 +
src/mpl/include/mpl_timer_gettimeofday.h | 15 +
src/mpl/include/mpl_timer_linux86_cycle.h | 42 +
src/mpl/include/mpl_timer_mach_absolute_time.h | 14 +
src/mpl/include/mpl_timer_ppc64_cycle.h | 39 +
.../include/mpl_timer_query_performance_counter.h | 20 +
src/mpl/include/mpl_timer_win86_cycle.h | 25 +
src/mpl/include/mpl_trmem.h | 199 +
src/mpl/include/mpl_uthash.h | 980 +
src/mpl/include/mpl_utlist.h | 6 +-
src/mpl/include/mpl_valgrind.h | 11 +-
src/mpl/include/mpl_yield.h | 64 +
src/mpl/include/mplenv.h | 36 -
src/mpl/include/mpliov.h | 38 -
src/mpl/include/mplmsg.h | 32 -
src/mpl/include/mplsock.h | 46 -
src/mpl/include/mplstr.h | 66 -
src/mpl/include/mpltrmem.h | 34 -
src/mpl/localdefs.in | 2 +-
src/mpl/src/Makefile.mk | 16 +
src/mpl/src/bt/Makefile.mk | 7 +
src/mpl/src/bt/mpl_bt.c | 134 +
src/mpl/src/dbg/Makefile.mk | 8 +
src/mpl/src/dbg/mpl_dbg.c | 964 +
src/mpl/src/env/Makefile.mk | 7 +
.../mpl/src/mplenv.c => mpl/src/env/mpl_env.c} | 0
src/mpl/src/mem/Makefile.mk | 7 +
src/mpl/src/mem/mpl_trmem.c | 825 +
src/mpl/src/mplstr.c | 314 -
src/mpl/src/mpltrmem.c | 1072 -
src/mpl/src/msg/Makefile.mk | 7 +
.../mpl/src/mplmsg.c => mpl/src/msg/mpl_msg.c} | 0
src/mpl/src/shm/Makefile.mk | 12 +
src/mpl/src/shm/mpl_shm.c | 112 +
src/mpl/src/shm/mpl_shm_mmap.c | 181 +
src/mpl/src/shm/mpl_shm_sysv.c | 154 +
src/mpl/src/shm/mpl_shm_win.c | 139 +
src/mpl/src/sock/Makefile.mk | 7 +
.../mpl/src/mplsock.c => mpl/src/sock/mpl_sock.c} | 0
src/mpl/src/str/Makefile.mk | 7 +
src/mpl/src/str/mpl_argstr.c | 880 +
src/mpl/src/str/mpl_str.c | 366 +
src/mpl/src/thread/Makefile.mk | 12 +
src/mpl/src/thread/mpl_thread.c | 22 +
src/mpl/src/thread/mpl_thread_posix.c | 92 +
src/mpl/src/thread/mpl_thread_solaris.c | 83 +
src/mpl/src/thread/mpl_thread_win.c | 352 +
src/mpl/src/timer/Makefile.mk | 18 +
src/mpl/src/timer/mpl_timer_clock_gettime.c | 76 +
src/mpl/src/timer/mpl_timer_device.c | 54 +
src/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c | 69 +
src/mpl/src/timer/mpl_timer_gethrtime.c | 69 +
src/mpl/src/timer/mpl_timer_gettimeofday.c | 72 +
src/mpl/src/timer/mpl_timer_linux86_cycle.c | 69 +
src/mpl/src/timer/mpl_timer_mach_absolute_time.c | 60 +
src/mpl/src/timer/mpl_timer_ppc64_cycle.c | 128 +
.../timer/mpl_timer_query_performance_counter.c | 45 +
src/mpl/src/timer/mpl_timer_win86_cycle.c | 60 +
src/nameserv/file/.state-cache | 2 +-
src/nameserv/file/file_nameserv.c | 34 +-
src/nameserv/pmi/.state-cache | 2 +-
src/nameserv/pmi/pmi_nameserv.c | 42 +-
src/nameserv/test/.state-cache | 2 +-
src/nameserv/test/testnd.c | 38 +-
src/openpa/Makefile.in | 1 +
src/openpa/confdb/config.guess | 38 +-
src/openpa/confdb/config.sub | 26 +-
src/openpa/confdb/install-sh | 23 +-
src/openpa/confdb/libtool.m4 | 27 +-
src/openpa/confdb/ltmain.sh | 37 +-
src/openpa/configure | 36 +-
src/openpa/src/Makefile.in | 1 +
src/openpa/src/opa_primitives.h | 2 +-
src/openpa/test/Makefile.in | 1 +
src/pm/gforker/Makefile.mk | 8 +-
src/pm/gforker/mpiexec.c | 10 +-
src/pm/gforker/subconfigure.m4 | 13 -
src/pm/hydra/Makefile.am | 8 +-
src/pm/hydra/Makefile.in | 94 +-
src/pm/hydra/confdb/aclocal_cc.m4 | 19 +-
src/pm/hydra/confdb/aclocal_check_visibility.m4 | 123 +
src/pm/hydra/confdb/aclocal_fc.m4 | 4 +-
src/pm/hydra/confdb/aclocal_libs.m4 | 2 +-
src/pm/hydra/confdb/aclocal_romio.m4 | 22 -
src/pm/hydra/confdb/ax_tls.m4 | 13 +-
src/pm/hydra/confdb/config.guess | 38 +-
src/pm/hydra/confdb/config.sub | 26 +-
src/pm/hydra/confdb/install-sh | 23 +-
src/pm/hydra/confdb/libtool.m4 | 27 +-
src/pm/hydra/confdb/ltmain.sh | 37 +-
src/pm/hydra/confdb/random_r.m4 | 43 +
src/pm/hydra/confdb/stdlib_h.m4 | 119 +
src/pm/hydra/configure | 852 +-
src/pm/hydra/configure.ac | 71 +-
src/pm/hydra/include/hydra.h | 131 +-
src/pm/hydra/include/hydra_config.h.in | 55 +-
src/pm/hydra/mpichprereq | 2 +-
src/pm/hydra/mpl/Makefile.am | 37 +-
src/pm/hydra/mpl/Makefile.in | 515 +-
src/pm/hydra/mpl/aclocal.m4 | 2 +
src/pm/hydra/mpl/confdb/aclocal_cc.m4 | 19 +-
.../hydra/mpl/confdb/aclocal_check_visibility.m4 | 123 +
src/pm/hydra/mpl/confdb/aclocal_fc.m4 | 4 +-
src/pm/hydra/mpl/confdb/aclocal_libs.m4 | 2 +-
src/pm/hydra/mpl/confdb/aclocal_romio.m4 | 22 -
src/pm/hydra/mpl/confdb/ax_tls.m4 | 13 +-
src/pm/hydra/mpl/confdb/config.guess | 38 +-
src/pm/hydra/mpl/confdb/config.sub | 26 +-
src/pm/hydra/mpl/confdb/install-sh | 23 +-
src/pm/hydra/mpl/confdb/libtool.m4 | 27 +-
src/pm/hydra/mpl/confdb/ltmain.sh | 37 +-
src/pm/hydra/mpl/confdb/random_r.m4 | 43 +
src/pm/hydra/mpl/confdb/stdlib_h.m4 | 119 +
src/pm/hydra/mpl/configure | 2274 +-
src/pm/hydra/mpl/configure.ac | 657 +-
src/pm/hydra/mpl/include/config.h.in | 190 +-
src/pm/hydra/mpl/include/mpl.h | 125 +-
src/pm/hydra/mpl/include/mpl_argstr.h | 49 +
src/pm/hydra/mpl/include/mpl_base.h | 119 +
src/pm/hydra/mpl/include/mpl_bt.h | 38 +
src/pm/hydra/mpl/include/mpl_dbg.h | 148 +
src/pm/hydra/mpl/include/mpl_env.h | 36 +
src/pm/hydra/mpl/include/mpl_iov.h | 38 +
src/pm/hydra/mpl/include/mpl_msg.h | 28 +
src/pm/hydra/mpl/include/mpl_shm.h | 160 +
src/pm/hydra/mpl/include/mpl_shm_mmap.h | 36 +
src/pm/hydra/mpl/include/mpl_shm_sysv.h | 38 +
src/pm/hydra/mpl/include/mpl_shm_win.h | 70 +
src/pm/hydra/mpl/include/mpl_sock.h | 46 +
src/pm/hydra/mpl/include/mpl_str.h | 58 +
src/pm/hydra/mpl/include/mpl_thread.h | 44 +
src/pm/hydra/mpl/include/mpl_thread_posix.h | 246 +
src/pm/hydra/mpl/include/mpl_thread_priv.h | 98 +
src/pm/hydra/mpl/include/mpl_thread_solaris.h | 195 +
src/pm/hydra/mpl/include/mpl_thread_win.h | 106 +
src/pm/hydra/mpl/include/mpl_timer.h.in | 247 +
src/pm/hydra/mpl/include/mpl_timer_clock_gettime.h | 19 +
src/pm/hydra/mpl/include/mpl_timer_device.h | 32 +
.../hydra/mpl/include/mpl_timer_gcc_ia64_cycle.h | 26 +
src/pm/hydra/mpl/include/mpl_timer_gethrtime.h | 14 +
src/pm/hydra/mpl/include/mpl_timer_gettimeofday.h | 15 +
src/pm/hydra/mpl/include/mpl_timer_linux86_cycle.h | 42 +
.../mpl/include/mpl_timer_mach_absolute_time.h | 14 +
src/pm/hydra/mpl/include/mpl_timer_ppc64_cycle.h | 39 +
.../include/mpl_timer_query_performance_counter.h | 20 +
src/pm/hydra/mpl/include/mpl_timer_win86_cycle.h | 25 +
src/pm/hydra/mpl/include/mpl_trmem.h | 199 +
src/pm/hydra/mpl/include/mpl_uthash.h | 980 +
src/pm/hydra/mpl/include/mpl_utlist.h | 6 +-
src/pm/hydra/mpl/include/mpl_valgrind.h | 11 +-
src/pm/hydra/mpl/include/mpl_yield.h | 64 +
src/pm/hydra/mpl/include/mplenv.h | 36 -
src/pm/hydra/mpl/include/mpliov.h | 38 -
src/pm/hydra/mpl/include/mplmsg.h | 32 -
src/pm/hydra/mpl/include/mplsock.h | 46 -
src/pm/hydra/mpl/include/mplstr.h | 66 -
src/pm/hydra/mpl/include/mpltrmem.h | 34 -
src/pm/hydra/mpl/localdefs.in | 2 +-
src/pm/hydra/mpl/src/Makefile.mk | 16 +
src/pm/hydra/mpl/src/bt/Makefile.mk | 7 +
src/pm/hydra/mpl/src/bt/mpl_bt.c | 134 +
src/pm/hydra/mpl/src/dbg/Makefile.mk | 8 +
src/pm/hydra/mpl/src/dbg/mpl_dbg.c | 964 +
src/pm/hydra/mpl/src/env/Makefile.mk | 7 +
.../mplenv.c => pm/hydra/mpl/src/env/mpl_env.c} | 0
src/pm/hydra/mpl/src/mem/Makefile.mk | 7 +
src/pm/hydra/mpl/src/mem/mpl_trmem.c | 825 +
src/pm/hydra/mpl/src/mplstr.c | 314 -
src/pm/hydra/mpl/src/mpltrmem.c | 1072 -
src/pm/hydra/mpl/src/msg/Makefile.mk | 7 +
.../mplmsg.c => pm/hydra/mpl/src/msg/mpl_msg.c} | 0
src/pm/hydra/mpl/src/shm/Makefile.mk | 12 +
src/pm/hydra/mpl/src/shm/mpl_shm.c | 112 +
src/pm/hydra/mpl/src/shm/mpl_shm_mmap.c | 181 +
src/pm/hydra/mpl/src/shm/mpl_shm_sysv.c | 154 +
src/pm/hydra/mpl/src/shm/mpl_shm_win.c | 139 +
src/pm/hydra/mpl/src/sock/Makefile.mk | 7 +
.../mplsock.c => pm/hydra/mpl/src/sock/mpl_sock.c} | 0
src/pm/hydra/mpl/src/str/Makefile.mk | 7 +
src/pm/hydra/mpl/src/str/mpl_argstr.c | 880 +
src/pm/hydra/mpl/src/str/mpl_str.c | 366 +
src/pm/hydra/mpl/src/thread/Makefile.mk | 12 +
src/pm/hydra/mpl/src/thread/mpl_thread.c | 22 +
src/pm/hydra/mpl/src/thread/mpl_thread_posix.c | 92 +
src/pm/hydra/mpl/src/thread/mpl_thread_solaris.c | 83 +
src/pm/hydra/mpl/src/thread/mpl_thread_win.c | 352 +
src/pm/hydra/mpl/src/timer/Makefile.mk | 18 +
.../hydra/mpl/src/timer/mpl_timer_clock_gettime.c | 76 +
src/pm/hydra/mpl/src/timer/mpl_timer_device.c | 54 +
.../hydra/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c | 69 +
src/pm/hydra/mpl/src/timer/mpl_timer_gethrtime.c | 69 +
.../hydra/mpl/src/timer/mpl_timer_gettimeofday.c | 72 +
.../hydra/mpl/src/timer/mpl_timer_linux86_cycle.c | 69 +
.../mpl/src/timer/mpl_timer_mach_absolute_time.c | 60 +
src/pm/hydra/mpl/src/timer/mpl_timer_ppc64_cycle.c | 128 +
.../timer/mpl_timer_query_performance_counter.c | 45 +
src/pm/hydra/mpl/src/timer/mpl_timer_win86_cycle.c | 60 +
src/pm/hydra/pm/pmiserv/common.c | 35 +-
src/pm/hydra/pm/pmiserv/common.h | 2 +-
src/pm/hydra/pm/pmiserv/pmi_v2_common.c | 5 +-
src/pm/hydra/pm/pmiserv/pmip.c | 37 +-
src/pm/hydra/pm/pmiserv/pmip_cb.c | 234 +-
src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c | 121 +-
src/pm/hydra/pm/pmiserv/pmip_pmi_v2.c | 116 +-
src/pm/hydra/pm/pmiserv/pmip_utils.c | 36 +-
src/pm/hydra/pm/pmiserv/pmiserv_cb.c | 46 +-
src/pm/hydra/pm/pmiserv/pmiserv_pmci.c | 6 +-
src/pm/hydra/pm/pmiserv/pmiserv_pmi.c | 58 +-
src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c | 114 +-
src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c | 186 +-
src/pm/hydra/pm/pmiserv/pmiserv_utils.c | 212 +-
src/pm/hydra/tools/Makefile.mk | 1 -
.../bootstrap/external/cobalt_query_native_int.c | 4 -
.../bootstrap/external/external_common_launch.c | 61 +-
src/pm/hydra/tools/bootstrap/external/ll_launch.c | 26 +-
.../tools/bootstrap/external/ll_query_native_int.c | 4 -
.../tools/bootstrap/external/ll_query_node_list.c | 4 -
.../bootstrap/external/lsf_query_native_int.c | 4 -
.../tools/bootstrap/external/lsf_query_node_list.c | 4 +-
.../hydra/tools/bootstrap/external/pbs_finalize.c | 6 +-
src/pm/hydra/tools/bootstrap/external/pbs_init.c | 4 +-
src/pm/hydra/tools/bootstrap/external/pbs_launch.c | 9 +-
.../bootstrap/external/pbs_query_native_int.c | 4 -
src/pm/hydra/tools/bootstrap/external/pbs_wait.c | 6 +-
.../bootstrap/external/sge_query_native_int.c | 4 -
.../tools/bootstrap/external/sge_query_node_list.c | 2 +-
.../hydra/tools/bootstrap/external/slurm_launch.c | 44 +-
.../bootstrap/external/slurm_query_native_int.c | 4 -
.../bootstrap/external/slurm_query_node_list.c | 18 +-
src/pm/hydra/tools/bootstrap/external/ssh.c | 9 +-
.../hydra/tools/bootstrap/external/ssh_finalize.c | 4 +-
.../hydra/tools/bootstrap/persist/persist_launch.c | 4 +-
.../hydra/tools/bootstrap/persist/persist_server.c | 4 +-
src/pm/hydra/tools/bootstrap/src/bsci_init.c.in | 2 +-
src/pm/hydra/tools/bootstrap/utils/bscu_wait.c | 4 +-
src/pm/hydra/tools/ckpoint/ckpoint.c | 14 +-
src/pm/hydra/tools/debugger/debugger.c | 14 +-
src/pm/hydra/tools/debugger/debugger.h | 4 +-
src/pm/hydra/tools/demux/demux.c | 13 +-
src/pm/hydra/tools/demux/demux_poll.c | 7 +-
src/pm/hydra/tools/demux/demux_select.c | 2 +-
src/pm/hydra/tools/ftb/Makefile.mk | 15 -
src/pm/hydra/tools/ftb/hydt_ftb.c | 86 -
src/pm/hydra/tools/ftb/hydt_ftb.h | 21 -
src/pm/hydra/tools/ftb/hydt_ftb_dummy.c | 23 -
src/pm/hydra/tools/nameserver/hydra_nameserver.c | 19 +-
src/pm/hydra/tools/topo/hwloc/hwloc/.gitignore | 32 +-
src/pm/hydra/tools/topo/hwloc/hwloc/AUTHORS | 8 +-
src/pm/hydra/tools/topo/hwloc/hwloc/COPYING | 20 +-
src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am | 6 +-
src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.in | 18 +-
src/pm/hydra/tools/topo/hwloc/hwloc/NEWS | 161 +-
src/pm/hydra/tools/topo/hwloc/hwloc/README | 553 +-
src/pm/hydra/tools/topo/hwloc/hwloc/VERSION | 10 +-
.../tools/topo/hwloc/hwloc/config/config.guess | 38 +-
.../hydra/tools/topo/hwloc/hwloc/config/config.sub | 26 +-
src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4 | 31 -
.../hydra/tools/topo/hwloc/hwloc/config/hwloc.m4 | 105 +-
.../hwloc/hwloc/config/hwloc_check_attributes.m4 | 3 +-
.../topo/hwloc/hwloc/config/hwloc_internal.m4 | 18 +-
.../hydra/tools/topo/hwloc/hwloc/config/install-sh | 23 +-
.../hydra/tools/topo/hwloc/hwloc/config/libtool.m4 | 27 +-
.../hydra/tools/topo/hwloc/hwloc/config/ltmain.sh | 37 +-
src/pm/hydra/tools/topo/hwloc/hwloc/configure | 612 +-
.../contrib/ci.inria.fr/hwloc-windows-build.sh | 53 -
.../hwloc/contrib/ci.inria.fr/job-0-tarball.sh | 37 +
.../hwloc/hwloc/contrib/ci.inria.fr/job-1-check.sh | 54 +
.../hwloc/hwloc/contrib/ci.inria.fr/job-3-mingw.sh | 150 +
.../contrib/ci.inria.fr/job-3-visualstudio.bat | 33 +
.../topo/hwloc/hwloc/contrib/systemd/Makefile.am | 22 +
.../contrib/systemd/hwloc-dump-hwdata.service.in | 21 +
.../hwloc/hwloc/contrib/update-my-copyright.pl | 15 +-
.../tools/topo/hwloc/hwloc/contrib/windows/README | 3 +
.../hwloc/contrib/windows/hwloc-annotate.vcxproj | 6 +-
.../contrib/windows/hwloc-annotate.vcxproj.filters | 5 +-
.../hwloc/contrib/windows/hwloc-assembler.vcxproj | 5 +-
.../hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj | 8 +-
.../contrib/windows/hwloc-bind.vcxproj.filters | 3 -
.../hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj | 8 +-
.../contrib/windows/hwloc-calc.vcxproj.filters | 3 -
.../hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj | 6 +-
.../contrib/windows/hwloc-diff.vcxproj.filters | 3 -
.../hwloc/contrib/windows/hwloc-distances.vcxproj | 6 +-
.../windows/hwloc-distances.vcxproj.filters | 3 -
.../hwloc/contrib/windows/hwloc-distrib.vcxproj | 6 +-
.../contrib/windows/hwloc-distrib.vcxproj.filters | 3 -
.../hwloc/hwloc/contrib/windows/hwloc-info.vcxproj | 8 +-
.../contrib/windows/hwloc-info.vcxproj.filters | 3 -
.../hwloc/contrib/windows/hwloc-patch.vcxproj | 6 +-
.../contrib/windows/hwloc-patch.vcxproj.filters | 3 -
.../topo/hwloc/hwloc/contrib/windows/hwloc.sln | 64 +-
.../hwloc/hwloc/contrib/windows/hwloc_config.h | 12 +-
.../hwloc/hwloc/contrib/windows/libhwloc.vcxproj | 20 +-
.../hwloc/contrib/windows/libhwloc.vcxproj.filters | 4 +-
.../contrib/windows/lstopo-no-graphics.vcxproj | 5 +-
.../windows/lstopo-no-graphics.vcxproj.filters | 6 +-
.../hwloc/hwloc/contrib/windows/lstopo-win.vcxproj | 7 +-
.../contrib/windows/lstopo-win.vcxproj.filters | 6 +-
.../hwloc/hwloc/contrib/windows/lstopo.vcxproj | 7 +-
.../hwloc/contrib/windows/lstopo.vcxproj.filters | 6 +-
.../hwloc/hwloc/contrib/windows/private_config.h | 36 +-
.../hydra/tools/topo/hwloc/hwloc/doc/Makefile.am | 35 +-
.../hydra/tools/topo/hwloc/hwloc/doc/Makefile.in | 79 +-
src/pm/hydra/tools/topo/hwloc/hwloc/doc/README.sed | 5 -
.../topo/hwloc/hwloc/doc/doxygen-config.cfg.in | 6 +-
.../topo/hwloc/hwloc/doc/examples/Makefile.am | 4 +-
.../topo/hwloc/hwloc/doc/examples/Makefile.in | 21 +-
.../topo/hwloc/hwloc/doc/examples/get-knl-modes.c | 37 +
src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy | 1000 +-
.../tools/topo/hwloc/hwloc/include/Makefile.in | 6 +
.../hydra/tools/topo/hwloc/hwloc/include/hwloc.h | 431 +-
.../tools/topo/hwloc/hwloc/include/hwloc/bitmap.h | 24 +-
.../topo/hwloc/hwloc/include/hwloc/deprecated.h | 4 +-
.../tools/topo/hwloc/hwloc/include/hwloc/diff.h | 34 +-
.../tools/topo/hwloc/hwloc/include/hwloc/helper.h | 16 +-
.../tools/topo/hwloc/hwloc/include/hwloc/linux.h | 8 +-
.../hwloc/hwloc/include/hwloc/openfabrics-verbs.h | 18 +-
.../tools/topo/hwloc/hwloc/include/hwloc/plugins.h | 12 +-
.../tools/topo/hwloc/hwloc/include/hwloc/rename.h | 12 +-
.../hwloc/include/private/autogen/config.h.in | 43 +-
.../topo/hwloc/hwloc/include/private/cpuid-x86.h | 5 +-
.../tools/topo/hwloc/hwloc/include/private/debug.h | 31 +-
.../tools/topo/hwloc/hwloc/include/private/misc.h | 31 +-
.../topo/hwloc/hwloc/include/private/private.h | 13 +-
.../tools/topo/hwloc/hwloc/include/private/xml.h | 4 +-
.../hydra/tools/topo/hwloc/hwloc/src/Makefile.am | 7 +-
.../hydra/tools/topo/hwloc/hwloc/src/Makefile.in | 33 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/base64.c | 4 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c | 246 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/bitmap.c | 12 +-
.../hydra/tools/topo/hwloc/hwloc/src/components.c | 33 +-
.../hydra/tools/topo/hwloc/hwloc/src/distances.c | 36 +-
.../hydra/tools/topo/hwloc/hwloc/src/pci-common.c | 29 +-
.../tools/topo/hwloc/hwloc/src/topology-aix.c | 6 +-
.../tools/topo/hwloc/hwloc/src/topology-bgq.c | 4 +
.../tools/topo/hwloc/hwloc/src/topology-cuda.c | 2 +
.../topo/hwloc/hwloc/src/topology-hardwired.c | 197 +
.../tools/topo/hwloc/hwloc/src/topology-hpux.c | 4 +-
.../tools/topo/hwloc/hwloc/src/topology-linux.c | 873 +-
.../tools/topo/hwloc/hwloc/src/topology-osf.c | 4 +-
.../tools/topo/hwloc/hwloc/src/topology-pci.c | 19 +-
.../tools/topo/hwloc/hwloc/src/topology-solaris.c | 42 +-
.../topo/hwloc/hwloc/src/topology-synthetic.c | 56 +-
.../tools/topo/hwloc/hwloc/src/topology-windows.c | 586 +-
.../tools/topo/hwloc/hwloc/src/topology-x86.c | 257 +-
.../topo/hwloc/hwloc/src/topology-xml-libxml.c | 18 +-
.../topo/hwloc/hwloc/src/topology-xml-nolibxml.c | 65 +-
.../tools/topo/hwloc/hwloc/src/topology-xml.c | 197 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c | 250 +-
.../hydra/tools/topo/hwloc/hwloc/src/traversal.c | 42 +-
.../hydra/tools/topo/hwloc/hwloc/tests/Makefile.am | 3 +-
.../hydra/tools/topo/hwloc/hwloc/tests/Makefile.in | 30 +-
.../tools/topo/hwloc/hwloc/tests/hwloc_backends.c | 11 +-
.../hwloc/hwloc/tests/hwloc_get_area_memlocation.c | 140 +
.../topo/hwloc/hwloc/tests/hwloc_object_userdata.c | 40 +-
.../linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2 | Bin 5662 -> 5707 bytes
.../hwloc/tests/linux/32em64t-2n8c+1mic.output | 5 +
.../hwloc/tests/linux/32em64t-2n8c+1mic.tar.bz2 | Bin 68952 -> 70952 bytes
.../hwloc/tests/linux/64amd64-4s2n4ca2co.output | 10 +-
.../hwloc/tests/linux/64amd64-4s2n4ca2co.tar.bz2 | Bin 21396 -> 21323 bytes
.../tools/topo/hwloc/hwloc/tests/linux/Makefile.in | 3 +
.../hwloc/hwloc/tests/linux/gather/Makefile.in | 3 +
.../tools/topo/hwloc/hwloc/tests/ports/Makefile.in | 3 +
.../include/bgq/spi/include/kernel/location.h | 8 +-
.../hwloc/tests/ports/include/windows/windows.h | 10 +-
.../topo/hwloc/hwloc/tests/rename/Makefile.am | 1 +
.../topo/hwloc/hwloc/tests/rename/Makefile.in | 4 +
.../hwloc/hwloc/tests/xml/16-2gr2gr2n2c+misc.xml | 5 +
.../tools/topo/hwloc/hwloc/tests/xml/Makefile.in | 3 +
.../hydra/tools/topo/hwloc/hwloc/utils/Makefile.in | 3 +
.../tools/topo/hwloc/hwloc/utils/hwloc/Makefile.am | 64 +-
.../tools/topo/hwloc/hwloc/utils/hwloc/Makefile.in | 214 +-
.../hwloc/hwloc/utils/hwloc/hwloc-annotate.1in | 7 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.c | 22 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-assembler.c | 4 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-bind.1in | 86 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-bind.c | 125 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-calc.1in | 8 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-calc.c | 36 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-calc.h | 48 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-diff.1in | 8 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-diff.c | 8 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-distances.c | 4 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-distrib.c | 4 +-
.../hwloc/utils/hwloc/hwloc-dump-hwdata-knl.c | 491 +
.../hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.1in | 68 +
.../hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.c | 82 +
.../hwloc/utils/hwloc/hwloc-gather-topology.1in | 11 +-
.../hwloc/utils/hwloc/hwloc-gather-topology.in | 36 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-info.1in | 26 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-info.c | 66 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-patch.1in | 8 +-
.../topo/hwloc/hwloc/utils/hwloc/hwloc-patch.c | 24 +-
.../tools/topo/hwloc/hwloc/utils/hwloc/misc.h | 91 +-
.../hwloc/utils/hwloc/test-hwloc-annotate.input | 17 +
.../hwloc/utils/hwloc/test-hwloc-annotate.output | 16 +
.../hwloc/utils/hwloc/test-hwloc-annotate.sh.in | 3 +-
.../hwloc/utils/hwloc/test-hwloc-assembler.sh.in | 3 +-
.../hwloc/hwloc/utils/hwloc/test-hwloc-info.output | 34 +
.../hwloc/hwloc/utils/hwloc/test-hwloc-info.sh.in | 8 +-
.../topo/hwloc/hwloc/utils/lstopo/Makefile.am | 13 +-
.../topo/hwloc/hwloc/utils/lstopo/Makefile.in | 23 +-
.../topo/hwloc/hwloc/utils/lstopo/lstopo-ascii.c | 14 +-
.../topo/hwloc/hwloc/utils/lstopo/lstopo-cairo.c | 155 +-
.../topo/hwloc/hwloc/utils/lstopo/lstopo-color.c | 15 +-
.../topo/hwloc/hwloc/utils/lstopo/lstopo-draw.c | 236 +-
.../topo/hwloc/hwloc/utils/lstopo/lstopo-fig.c | 5 +-
.../hwloc/utils/lstopo/lstopo-no-graphics.1in | 19 +-
.../topo/hwloc/hwloc/utils/lstopo/lstopo-text.c | 6 +-
.../topo/hwloc/hwloc/utils/lstopo/lstopo-windows.c | 132 +-
.../tools/topo/hwloc/hwloc/utils/lstopo/lstopo.c | 108 +-
.../tools/topo/hwloc/hwloc/utils/lstopo/lstopo.h | 28 +-
src/pm/hydra/tools/topo/hwloc/topo_hwloc.c | 80 +-
src/pm/hydra/tools/topo/topo.c | 8 +-
src/pm/hydra/ui/mpich/mpiexec.c | 18 +-
src/pm/hydra/ui/mpich/utils.c | 81 +-
src/pm/hydra/ui/utils/uiu.c | 31 +-
src/pm/hydra/utils/alloc/alloc.c | 70 +-
src/pm/hydra/utils/args/args.c | 42 +-
src/pm/hydra/utils/dbg/dbg.c | 10 +-
src/pm/hydra/utils/env/env.c | 56 +-
src/pm/hydra/utils/launch/launch.c | 15 +-
src/pm/hydra/utils/others/others.c | 4 +-
src/pm/hydra/utils/sock/sock.c | 153 +-
src/pm/hydra/utils/string/string.c | 30 +-
src/pm/hydra/version.m4 | 6 +-
src/pm/remshell/Makefile.mk | 8 +-
src/pm/remshell/mpiexec.c | 30 +-
src/pm/util/Makefile.mk | 18 +-
src/pm/util/cmnargs.c | 12 +-
src/pm/util/dbgiface.c | 4 +-
src/pm/util/env.c | 28 +-
src/pm/util/labelout.c | 14 +-
src/pm/util/pmiserv.c | 54 +-
src/pm/util/pmutil.h | 39 -
src/pm/util/process.c | 12 +-
src/pm/util/rm.c | 34 +-
src/pm/util/safestr2.c | 135 -
src/pm/util/simple_pmiutil2.c | 12 +-
src/pm/util/simple_pmiutil2.h | 2 +-
src/pm/util/subconfigure.m4 | 11 +-
src/pmi/pmi2/Makefile.mk | 1 -
src/pmi/pmi2/poe/.state-cache | 7 -
src/pmi/pmi2/poe/Makefile.mk | 15 -
src/pmi/pmi2/poe/poe2pmi.c | 449 -
src/pmi/pmi2/poe/subconfigure.m4 | 24 -
src/pmi/pmi2/simple/.state-cache | 18 +-
src/pmi/pmi2/simple/pmi2compat.h | 16 +-
src/pmi/pmi2/simple/simple2pmi.c | 44 +-
src/pmi/pmi2/simple/simple_pmiutil.c | 20 +-
src/pmi/pmi2/subconfigure.m4 | 1 -
src/pmi/simple/.state-cache | 10 +-
src/pmi/simple/simple_pmi.c | 144 +-
src/pmi/simple/simple_pmiutil.c | 31 +-
src/pmi/simple/simple_pmiutil.h | 2 +-
src/util/Makefile.mk | 9 +-
src/util/assert/.state-cache | 4 +-
src/util/assert/Makefile.mk | 5 +-
src/util/assert/assert.c | 60 +
src/util/assert/mpiassert.h | 163 -
src/util/cvar/Makefile.mk | 4 +-
src/util/cvar/mpich_cvars.c | 1794 -
src/util/cvar/mpir_cvars.c | 1923 +
src/util/dbg/.state-cache | 16 -
src/util/dbg/Makefile.mk | 14 -
src/util/dbg/dbg_control.c | 38 -
src/util/dbg/dbg_printf.c | 1192 -
src/util/dbg/mpidbg.h | 152 -
src/util/dbg/timelimit.c | 50 -
src/util/instrm/.state-cache | 7 -
src/util/instrm/Makefile.mk | 10 -
src/util/instrm/instr.c | 146 -
src/util/logging/common/Makefile.mk | 2 +-
src/util/logging/common/state_names.h | 150 +-
src/util/logging/rlog/.state-cache | 32 +-
src/util/logging/rlog/TraceInput/.state-cache | 10 +-
.../rlog/TraceInput/logformat_trace_InputLog.c | 72 +-
src/util/logging/rlog/TraceInput/trace_input.c | 24 +-
src/util/logging/rlog/configure | 14 +-
src/util/logging/rlog/irlog2rlog.c | 34 +-
src/util/logging/rlog/irlogutil.c | 18 +-
src/util/logging/rlog/minalignrlog.c | 4 +-
src/util/logging/rlog/rimshot/.state-cache | 62 +-
src/util/logging/rlog/rlog.c | 12 +-
src/util/logging/rlog/rlogtime.c | 12 +-
src/util/logging/rlog/rlogutil.c | 102 +-
src/util/mem/.state-cache | 19 +-
src/util/mem/Makefile.mk | 7 -
src/util/mem/argstr.c | 1076 -
src/util/mem/check.c | 29 -
src/util/mem/handlemem.c | 685 +-
src/util/mem/mpiu_strerror.h | 15 -
src/util/mem/safestr.c | 195 -
src/util/mem/strerror.c | 19 +-
src/util/mem/trmem.c | 111 -
src/util/nodemap/.state-cache | 7 +
src/util/nodemap/Makefile.mk | 12 +
src/util/nodemap/build_nodemap.h | 521 +
src/util/other/.state-cache | 10 -
src/util/other/Makefile.mk | 11 -
src/util/other/assert.c | 59 -
src/util/other/outliers.c | 140 -
src/util/pointer/.state-cache | 7 -
src/util/pointer/Makefile.mk | 12 -
src/util/pointer/mpiu_pointer.h | 59 -
src/util/procmap/.state-cache | 2 +-
src/util/procmap/local_proc.c | 68 +-
src/util/thread/.state-cache | 43 -
src/util/thread/Makefile.mk | 26 -
src/util/thread/mpiu_thread.c | 33 -
src/util/thread/mpiu_thread.h | 134 -
src/util/thread/mpiu_thread_global.h | 64 -
src/util/thread/mpiu_thread_multiple.h | 95 -
src/util/thread/mpiu_thread_pobj.h | 190 -
src/util/thread/mpiu_thread_posix.c | 104 -
src/util/thread/mpiu_thread_posix.h | 288 -
src/util/thread/mpiu_thread_priv.h | 117 -
src/util/thread/mpiu_thread_single.h | 66 -
src/util/thread/mpiu_thread_solaris.c | 90 -
src/util/thread/mpiu_thread_solaris.h | 201 -
src/util/thread/mpiu_thread_win.c | 370 -
src/util/thread/mpiu_thread_win.h | 106 -
src/util/timers/.state-cache | 7 -
src/util/timers/Makefile.mk | 10 -
src/util/timers/mpiu_timer.c | 405 -
src/util/timers/mpiu_timer.h.in | 319 -
src/util/type/.state-cache | 7 -
src/util/type/Makefile.mk | 11 -
src/util/type/mpiu_type_defs.h | 97 -
src/util/wrappers/.state-cache | 18 +-
src/util/wrappers/Makefile.mk | 4 -
src/util/wrappers/README | 2 +-
src/util/wrappers/mpiu_os_wrappers.h | 13 -
src/util/wrappers/mpiu_os_wrappers_pre.h | 61 -
src/util/wrappers/mpiu_process_wrappers.h | 64 -
src/util/wrappers/mpiu_shm_wrappers.h | 938 -
src/util/wrappers/mpiu_sock_wrappers.h | 85 +-
src/util/wrappers/mpiu_util_wrappers.h | 15 +-
subsys_include.m4 | 92 +-
test/Makefile.in | 155 +-
test/commands/Makefile.in | 155 +-
test/mpi/.gitignore | 1272 +-
test/mpi/Makefile.in | 9 +-
test/mpi/Makefile.mtest | 8 +-
test/mpi/Makefile_f08.mtest | 2 +-
test/mpi/attr/Makefile.in | 9 +-
test/mpi/attr/keyval_double_free_comm.c | 2 +-
test/mpi/basic/Makefile.in | 9 +-
test/mpi/ckpoint/Makefile.in | 9 +-
test/mpi/coll/Makefile.in | 9 +-
test/mpi/coll/allgatherv4.c | 5 +
test/mpi/coll/bcastzerotype.c | 2 +
test/mpi/coll/gather_big.c | 5 +
test/mpi/coll/nonblocking.c | 6 +-
test/mpi/coll/opland.c | 1 +
test/mpi/coll/oplor.c | 1 +
test/mpi/coll/oplxor.c | 1 +
test/mpi/coll/opmax.c | 1 +
test/mpi/coll/opmin.c | 1 +
test/mpi/coll/opminloc.c | 1 +
test/mpi/coll/opprod.c | 2 +
test/mpi/coll/opsum.c | 2 +
test/mpi/coll/redscat.c | 3 +
test/mpi/coll/redscat2.c | 1 +
test/mpi/coll/scatter3.c | 2 +
test/mpi/coll/scattern.c | 2 +
test/mpi/coll/uoplong.c | 9 +-
test/mpi/comm/Makefile.in | 9 +-
test/mpi/comm/cmsplit_type.c | 64 +-
test/mpi/comm/comm_create_group.c | 1 +
test/mpi/comm/comm_group_rand.c | 2 +
test/mpi/comm/comm_idup_isend.c | 7 +
test/mpi/comm/testlist | 6 +-
test/mpi/confdb/aclocal_cc.m4 | 19 +-
test/mpi/confdb/aclocal_fc.m4 | 4 +-
test/mpi/confdb/aclocal_libs.m4 | 2 +-
test/mpi/confdb/aclocal_romio.m4 | 22 -
test/mpi/confdb/ax_tls.m4 | 13 +-
test/mpi/confdb/config.guess | 38 +-
test/mpi/confdb/config.sub | 26 +-
test/mpi/confdb/install-sh | 23 +-
test/mpi/configure | 115 +-
test/mpi/configure.ac | 2 +
test/mpi/cxx/Makefile.in | 1 +
test/mpi/cxx/attr/Makefile.in | 1 +
test/mpi/cxx/coll/Makefile.in | 1 +
test/mpi/cxx/coll/arcomplex.cxx | 1 +
test/mpi/cxx/comm/Makefile.in | 1 +
test/mpi/cxx/datatype/Makefile.in | 1 +
test/mpi/cxx/errhan/Makefile.in | 1 +
test/mpi/cxx/info/Makefile.in | 1 +
test/mpi/cxx/init/Makefile.in | 1 +
test/mpi/cxx/io/Makefile.in | 1 +
test/mpi/cxx/io/filemiscx.cxx | 2 +
test/mpi/cxx/pt2pt/Makefile.in | 1 +
test/mpi/cxx/pt2pt/bsend1cxx.cxx | 2 +-
test/mpi/cxx/pt2pt/sendrecvx.cxx | 32 +-
test/mpi/cxx/rma/Makefile.in | 1 +
test/mpi/cxx/spawn/Makefile.in | 1 +
test/mpi/cxx/spawn/selfconaccx.cxx | 2 +
test/mpi/cxx/topo/Makefile.in | 1 +
test/mpi/cxx/util/Makefile.in | 1 +
test/mpi/datatype/Makefile.am | 1 +
test/mpi/datatype/Makefile.in | 81 +-
test/mpi/datatype/getpartelm.c | 2 +
test/mpi/datatype/large_type.c | 2 +
test/mpi/datatype/large_vec.c | 1 +
test/mpi/datatype/segtest.c | 18 +-
test/mpi/datatype/simple-pack-external.c | 3 +
test/mpi/datatype/simple-pack-external2.c | 40 +
test/mpi/datatype/simple-pack.c | 2 +
test/mpi/datatype/structpack2.c | 1 +
test/mpi/datatype/testlist.in | 1 +
test/mpi/datatype/transpose-pack.c | 1 +
test/mpi/datatype/tresized.c | 1 +
test/mpi/datatype/tresized2.c | 1 +
test/mpi/datatype/unpack.c | 2 +
test/mpi/errhan/Makefile.in | 9 +-
test/mpi/errhan/errcode.c | 1962 +-
test/mpi/errhan/errstring2.c | 6 +
test/mpi/errors/Makefile.in | 9 +-
test/mpi/errors/attr/Makefile.in | 9 +-
test/mpi/errors/basic/Makefile.in | 9 +-
test/mpi/errors/coll/Makefile.in | 9 +-
test/mpi/errors/coll/bcastlength.c | 2 +
test/mpi/errors/coll/noalias2.c | 8 +-
test/mpi/errors/coll/noalias3.c | 6 +-
test/mpi/errors/coll/testlist | 4 +-
test/mpi/errors/comm/Makefile.in | 9 +-
test/mpi/errors/comm/too_many_comms2.c | 1 +
test/mpi/errors/comm/too_many_comms3.c | 1 +
test/mpi/errors/comm/too_many_icomms.c | 2 +-
test/mpi/errors/comm/too_many_icomms2.c | 2 +-
test/mpi/errors/cxx/Makefile.in | 9 +-
test/mpi/errors/cxx/errhan/Makefile.in | 1 +
test/mpi/errors/cxx/io/Makefile.in | 1 +
test/mpi/errors/cxx/io/fileerrretx.cxx | 1 +
test/mpi/errors/datatype/Makefile.in | 9 +-
test/mpi/errors/f08/Makefile.in | 3 +-
test/mpi/errors/f08/io/Makefile.in | 3 +-
test/mpi/errors/f77/Makefile.in | 1 +
test/mpi/errors/f77/io/Makefile.in | 1 +
test/mpi/errors/f90/Makefile.in | 1 +
test/mpi/errors/f90/io/Makefile.in | 1 +
test/mpi/errors/faults/Makefile.in | 9 +-
test/mpi/errors/group/Makefile.in | 9 +-
test/mpi/errors/io/Makefile.in | 9 +-
test/mpi/errors/io/file_errhdl.c | 5 +
test/mpi/errors/pt2pt/Makefile.in | 9 +-
test/mpi/errors/pt2pt/errinstatta.c | 3 +
test/mpi/errors/pt2pt/errinstatts.c | 3 +
test/mpi/errors/pt2pt/errinstatwa.c | 3 +
test/mpi/errors/pt2pt/errinstatws.c | 3 +
test/mpi/errors/pt2pt/truncmsg1.c | 1 +
test/mpi/errors/rma/Makefile.in | 9 +-
test/mpi/errors/rma/win_sync_complete.c | 2 +-
test/mpi/errors/rma/win_sync_free_at.c | 2 +-
test/mpi/errors/rma/win_sync_free_pt.c | 2 +-
test/mpi/errors/rma/win_sync_lock_at.c | 2 +-
test/mpi/errors/rma/win_sync_lock_fence.c | 2 +-
test/mpi/errors/rma/win_sync_lock_pt.c | 2 +-
test/mpi/errors/rma/win_sync_nested.c | 2 +-
test/mpi/errors/rma/win_sync_op.c | 2 +-
test/mpi/errors/rma/win_sync_unlock.c | 2 +-
test/mpi/errors/rma/winerr.c | 1 +
test/mpi/errors/rma/winerr2.c | 1 +
test/mpi/errors/spawn/Makefile.am | 9 +-
test/mpi/errors/spawn/Makefile.in | 81 +-
test/mpi/errors/spawn/connect_timeout.c | 225 +
test/mpi/errors/spawn/testlist.in | 4 +
test/mpi/errors/topo/Makefile.in | 9 +-
test/mpi/f08/Makefile.am | 2 +-
test/mpi/f08/Makefile.in | 5 +-
test/mpi/f08/attr/Makefile.am | 2 +-
test/mpi/f08/attr/Makefile.in | 5 +-
test/mpi/f08/coll/Makefile.am | 2 +-
test/mpi/f08/coll/Makefile.in | 5 +-
test/mpi/f08/comm/Makefile.am | 2 +-
test/mpi/f08/comm/Makefile.in | 5 +-
test/mpi/f08/datatype/Makefile.am | 2 +-
test/mpi/f08/datatype/Makefile.in | 5 +-
test/mpi/f08/ext/Makefile.in | 3 +-
test/mpi/f08/ext/c2f2cf90.f90 | 2 +-
test/mpi/f08/ext/ctypesinf90.f90 | 2 +-
test/mpi/f08/info/Makefile.in | 3 +-
test/mpi/f08/info/infotest2f90.f90 | 2 +-
test/mpi/f08/init/Makefile.am | 2 +-
test/mpi/f08/init/Makefile.in | 5 +-
test/mpi/f08/init/baseenvf90.f90 | 2 +-
test/mpi/f08/io/Makefile.am | 2 +-
test/mpi/f08/io/Makefile.in | 5 +-
test/mpi/f08/io/c2f2ciof90.f90 | 2 +-
test/mpi/f08/io/miscfilef90.f90 | 2 +-
test/mpi/f08/io/shpositionf90.f90 | 2 +-
test/mpi/f08/misc/Makefile.am | 2 +-
test/mpi/f08/misc/Makefile.in | 5 +-
test/mpi/f08/misc/hello.f90 | 3 +
test/mpi/f08/misc/ring.f90 | 3 +
test/mpi/f08/misc/sizeof2.f90 | 2 +-
test/mpi/f08/profile/Makefile.in | 3 +-
test/mpi/f08/profile/profile1f90.f90 | 2 +-
test/mpi/f08/pt2pt/Makefile.am | 2 +-
test/mpi/f08/pt2pt/Makefile.in | 5 +-
test/mpi/f08/pt2pt/dummyf08.f90 | 2 +-
test/mpi/f08/rma/Makefile.am | 2 +-
test/mpi/f08/rma/Makefile.in | 5 +-
test/mpi/f08/spawn/Makefile.in | 3 +-
test/mpi/f08/spawn/spawnargvf03.f90 | 2 +-
test/mpi/f08/spawn/spawnargvf90.f90 | 2 +-
test/mpi/f08/subarray/Makefile.in | 3 +-
test/mpi/f08/subarray/test10.f90 | 5 +-
test/mpi/f08/subarray/test11.f90 | 4 +-
test/mpi/f08/subarray/test12.f90 | 5 +-
test/mpi/f08/subarray/test14.f90 | 5 +-
test/mpi/f08/subarray/test15.f90 | 5 +-
test/mpi/f08/timer/Makefile.am | 2 +-
test/mpi/f08/timer/Makefile.in | 5 +-
test/mpi/f08/timer/wtimef90.f90 | 2 +-
test/mpi/f08/topo/Makefile.am | 4 +-
test/mpi/f08/topo/Makefile.in | 21 +-
test/mpi/f08/topo/cart_subf90.f90 | 42 +
test/mpi/f08/topo/dgraph_unwgtf90.f90 | 2 +-
test/mpi/f08/topo/dgraph_wgtf90.f90 | 2 +-
test/mpi/f08/topo/testlist | 1 +
test/mpi/f08/util/Makefile.am | 2 +-
test/mpi/f08/util/Makefile.in | 1 +
test/mpi/f77/Makefile.in | 1 +
test/mpi/f77/attr/Makefile.in | 1 +
test/mpi/f77/attr/commattr4f.f | 4 +
test/mpi/f77/coll/Makefile.in | 1 +
test/mpi/f77/coll/split_typef.f | 1 +
test/mpi/f77/comm/Makefile.in | 1 +
test/mpi/f77/datatype/Makefile.in | 1 +
test/mpi/f77/ext/Makefile.in | 1 +
test/mpi/f77/info/Makefile.in | 1 +
test/mpi/f77/init/Makefile.in | 1 +
test/mpi/f77/io/Makefile.in | 1 +
test/mpi/f77/profile/Makefile.in | 1 +
test/mpi/f77/pt2pt/Makefile.in | 1 +
test/mpi/f77/rma/Makefile.in | 1 +
test/mpi/f77/spawn/Makefile.in | 1 +
test/mpi/f77/topo/Makefile.in | 1 +
test/mpi/f77/util/Makefile.in | 1 +
test/mpi/f90/Makefile.in | 1 +
test/mpi/f90/attr/Makefile.in | 1 +
test/mpi/f90/attr/commattr4f90.f90 | 4 +
test/mpi/f90/coll/Makefile.in | 1 +
test/mpi/f90/coll/split_typef90.f90 | 1 +
test/mpi/f90/comm/Makefile.in | 1 +
test/mpi/f90/datatype/Makefile.in | 1 +
test/mpi/f90/ext/Makefile.in | 1 +
test/mpi/f90/f90types/Makefile.in | 9 +-
test/mpi/f90/info/Makefile.in | 1 +
test/mpi/f90/init/Makefile.in | 1 +
test/mpi/f90/io/Makefile.in | 1 +
test/mpi/f90/misc/Makefile.in | 1 +
test/mpi/f90/profile/Makefile.in | 1 +
test/mpi/f90/pt2pt/Makefile.in | 1 +
test/mpi/f90/rma/Makefile.in | 1 +
test/mpi/f90/spawn/Makefile.in | 1 +
test/mpi/f90/timer/Makefile.in | 1 +
test/mpi/f90/topo/Makefile.in | 1 +
test/mpi/f90/util/Makefile.in | 1 +
test/mpi/ft/Makefile.in | 9 +-
test/mpi/ft/multi_isendalive.c | 2 +-
test/mpi/group/Makefile.in | 9 +-
test/mpi/group/glpid.c | 8 +-
test/mpi/group/groupcreate.c | 1 +
test/mpi/group/grouptest2.c | 2 +
test/mpi/impls/Makefile.in | 9 +-
test/mpi/impls/hydra/Makefile.in | 1 +
.../expected.topo1.board.board.out | 32 +-
.../expected.topo1.board.core-2.out | 32 +-
.../expected.topo1.board.core-4.out | 32 +-
.../expected.topo1.board.core.out | 32 +-
.../expected.topo1.board.hwthread-2.out | 32 +-
.../expected.topo1.board.hwthread-4.out | 32 +-
.../expected.topo1.board.hwthread-8.out | 32 +-
.../expected.topo1.board.hwthread.out | 32 +-
.../expected.topo1.board.numa.out | 32 +-
.../expected.topo1.board.socket.out | 32 +-
.../expected.topo1.core-2.board.out | 32 +-
.../expected.topo1.core-2.core-2.out | 32 +-
.../expected.topo1.core-2.core-4.out | 32 +-
.../expected.topo1.core-2.core.out | 32 +-
.../expected.topo1.core-2.hwthread-2.out | 32 +-
.../expected.topo1.core-2.hwthread-4.out | 32 +-
.../expected.topo1.core-2.hwthread-8.out | 32 +-
.../expected.topo1.core-2.hwthread.out | 32 +-
.../expected.topo1.core-2.numa.out | 32 +-
.../expected.topo1.core-2.socket.out | 32 +-
.../expected.topo1.core-4.board.out | 32 +-
.../expected.topo1.core-4.core-2.out | 32 +-
.../expected.topo1.core-4.core-4.out | 32 +-
.../expected.topo1.core-4.core.out | 32 +-
.../expected.topo1.core-4.hwthread-2.out | 32 +-
.../expected.topo1.core-4.hwthread-4.out | 32 +-
.../expected.topo1.core-4.hwthread-8.out | 32 +-
.../expected.topo1.core-4.hwthread.out | 32 +-
.../expected.topo1.core-4.numa.out | 32 +-
.../expected.topo1.core-4.socket.out | 32 +-
.../expected.topo1.core.board.out | 32 +-
.../expected.topo1.core.core-2.out | 32 +-
.../expected.topo1.core.core-4.out | 32 +-
.../binding_reference/expected.topo1.core.core.out | 32 +-
.../expected.topo1.core.hwthread-2.out | 32 +-
.../expected.topo1.core.hwthread-4.out | 32 +-
.../expected.topo1.core.hwthread-8.out | 32 +-
.../expected.topo1.core.hwthread.out | 32 +-
.../binding_reference/expected.topo1.core.numa.out | 32 +-
.../expected.topo1.core.socket.out | 32 +-
.../expected.topo1.hwthread-2.board.out | 32 +-
.../expected.topo1.hwthread-2.core-2.out | 32 +-
.../expected.topo1.hwthread-2.core-4.out | 32 +-
.../expected.topo1.hwthread-2.core.out | 32 +-
.../expected.topo1.hwthread-2.hwthread-2.out | 32 +-
.../expected.topo1.hwthread-2.hwthread-4.out | 32 +-
.../expected.topo1.hwthread-2.hwthread-8.out | 32 +-
.../expected.topo1.hwthread-2.hwthread.out | 32 +-
.../expected.topo1.hwthread-2.numa.out | 32 +-
.../expected.topo1.hwthread-2.socket.out | 32 +-
.../expected.topo1.hwthread-4.board.out | 32 +-
.../expected.topo1.hwthread-4.core-2.out | 32 +-
.../expected.topo1.hwthread-4.core-4.out | 32 +-
.../expected.topo1.hwthread-4.core.out | 32 +-
.../expected.topo1.hwthread-4.hwthread-2.out | 32 +-
.../expected.topo1.hwthread-4.hwthread-4.out | 32 +-
.../expected.topo1.hwthread-4.hwthread-8.out | 32 +-
.../expected.topo1.hwthread-4.hwthread.out | 32 +-
.../expected.topo1.hwthread-4.numa.out | 32 +-
.../expected.topo1.hwthread-4.socket.out | 32 +-
.../expected.topo1.hwthread-8.board.out | 32 +-
.../expected.topo1.hwthread-8.core-2.out | 32 +-
.../expected.topo1.hwthread-8.core-4.out | 32 +-
.../expected.topo1.hwthread-8.core.out | 32 +-
.../expected.topo1.hwthread-8.hwthread-2.out | 32 +-
.../expected.topo1.hwthread-8.hwthread-4.out | 32 +-
.../expected.topo1.hwthread-8.hwthread-8.out | 32 +-
.../expected.topo1.hwthread-8.hwthread.out | 32 +-
.../expected.topo1.hwthread-8.numa.out | 32 +-
.../expected.topo1.hwthread-8.socket.out | 32 +-
.../expected.topo1.hwthread.board.out | 32 +-
.../expected.topo1.hwthread.core-2.out | 32 +-
.../expected.topo1.hwthread.core-4.out | 32 +-
.../expected.topo1.hwthread.core.out | 32 +-
.../expected.topo1.hwthread.hwthread-2.out | 32 +-
.../expected.topo1.hwthread.hwthread-4.out | 32 +-
.../expected.topo1.hwthread.hwthread-8.out | 32 +-
.../expected.topo1.hwthread.hwthread.out | 32 +-
.../expected.topo1.hwthread.numa.out | 32 +-
.../expected.topo1.hwthread.socket.out | 32 +-
.../expected.topo1.numa.board.out | 32 +-
.../expected.topo1.numa.core-2.out | 32 +-
.../expected.topo1.numa.core-4.out | 32 +-
.../binding_reference/expected.topo1.numa.core.out | 32 +-
.../expected.topo1.numa.hwthread-2.out | 32 +-
.../expected.topo1.numa.hwthread-4.out | 32 +-
.../expected.topo1.numa.hwthread-8.out | 32 +-
.../expected.topo1.numa.hwthread.out | 32 +-
.../binding_reference/expected.topo1.numa.numa.out | 32 +-
.../expected.topo1.numa.socket.out | 32 +-
.../expected.topo1.socket.board.out | 32 +-
.../expected.topo1.socket.core-2.out | 32 +-
.../expected.topo1.socket.core-4.out | 32 +-
.../expected.topo1.socket.core.out | 32 +-
.../expected.topo1.socket.hwthread-2.out | 32 +-
.../expected.topo1.socket.hwthread-4.out | 32 +-
.../expected.topo1.socket.hwthread-8.out | 32 +-
.../expected.topo1.socket.hwthread.out | 32 +-
.../expected.topo1.socket.numa.out | 32 +-
.../expected.topo1.socket.socket.out | 32 +-
.../expected.topo2.board.board.out | 32 +-
.../expected.topo2.board.core-2.out | 32 +-
.../expected.topo2.board.core-4.out | 32 +-
.../expected.topo2.board.core.out | 32 +-
.../expected.topo2.board.hwthread-2.out | 32 +-
.../expected.topo2.board.hwthread-4.out | 32 +-
.../expected.topo2.board.hwthread-8.out | 32 +-
.../expected.topo2.board.hwthread.out | 32 +-
.../expected.topo2.board.numa.out | 32 +-
.../expected.topo2.board.socket.out | 32 +-
.../expected.topo2.core-2.board.out | 32 +-
.../expected.topo2.core-2.core-2.out | 32 +-
.../expected.topo2.core-2.core-4.out | 32 +-
.../expected.topo2.core-2.core.out | 32 +-
.../expected.topo2.core-2.hwthread-2.out | 32 +-
.../expected.topo2.core-2.hwthread-4.out | 32 +-
.../expected.topo2.core-2.hwthread-8.out | 32 +-
.../expected.topo2.core-2.hwthread.out | 32 +-
.../expected.topo2.core-2.numa.out | 32 +-
.../expected.topo2.core-2.socket.out | 32 +-
.../expected.topo2.core-4.board.out | 32 +-
.../expected.topo2.core-4.core-2.out | 32 +-
.../expected.topo2.core-4.core-4.out | 32 +-
.../expected.topo2.core-4.core.out | 32 +-
.../expected.topo2.core-4.hwthread-2.out | 32 +-
.../expected.topo2.core-4.hwthread-4.out | 32 +-
.../expected.topo2.core-4.hwthread-8.out | 32 +-
.../expected.topo2.core-4.hwthread.out | 32 +-
.../expected.topo2.core-4.numa.out | 32 +-
.../expected.topo2.core-4.socket.out | 32 +-
.../expected.topo2.core.board.out | 32 +-
.../expected.topo2.core.core-2.out | 32 +-
.../expected.topo2.core.core-4.out | 32 +-
.../binding_reference/expected.topo2.core.core.out | 32 +-
.../expected.topo2.core.hwthread-2.out | 32 +-
.../expected.topo2.core.hwthread-4.out | 32 +-
.../expected.topo2.core.hwthread-8.out | 32 +-
.../expected.topo2.core.hwthread.out | 32 +-
.../binding_reference/expected.topo2.core.numa.out | 32 +-
.../expected.topo2.core.socket.out | 32 +-
.../expected.topo2.hwthread-2.board.out | 32 +-
.../expected.topo2.hwthread-2.core-2.out | 32 +-
.../expected.topo2.hwthread-2.core-4.out | 32 +-
.../expected.topo2.hwthread-2.core.out | 32 +-
.../expected.topo2.hwthread-2.hwthread-2.out | 32 +-
.../expected.topo2.hwthread-2.hwthread-4.out | 32 +-
.../expected.topo2.hwthread-2.hwthread-8.out | 32 +-
.../expected.topo2.hwthread-2.hwthread.out | 32 +-
.../expected.topo2.hwthread-2.numa.out | 32 +-
.../expected.topo2.hwthread-2.socket.out | 32 +-
.../expected.topo2.hwthread-4.board.out | 32 +-
.../expected.topo2.hwthread-4.core-2.out | 32 +-
.../expected.topo2.hwthread-4.core-4.out | 32 +-
.../expected.topo2.hwthread-4.core.out | 32 +-
.../expected.topo2.hwthread-4.hwthread-2.out | 32 +-
.../expected.topo2.hwthread-4.hwthread-4.out | 32 +-
.../expected.topo2.hwthread-4.hwthread-8.out | 32 +-
.../expected.topo2.hwthread-4.hwthread.out | 32 +-
.../expected.topo2.hwthread-4.numa.out | 32 +-
.../expected.topo2.hwthread-4.socket.out | 32 +-
.../expected.topo2.hwthread-8.board.out | 32 +-
.../expected.topo2.hwthread-8.core-2.out | 32 +-
.../expected.topo2.hwthread-8.core-4.out | 32 +-
.../expected.topo2.hwthread-8.core.out | 32 +-
.../expected.topo2.hwthread-8.hwthread-2.out | 32 +-
.../expected.topo2.hwthread-8.hwthread-4.out | 32 +-
.../expected.topo2.hwthread-8.hwthread-8.out | 32 +-
.../expected.topo2.hwthread-8.hwthread.out | 32 +-
.../expected.topo2.hwthread-8.numa.out | 32 +-
.../expected.topo2.hwthread-8.socket.out | 32 +-
.../expected.topo2.hwthread.board.out | 32 +-
.../expected.topo2.hwthread.core-2.out | 32 +-
.../expected.topo2.hwthread.core-4.out | 32 +-
.../expected.topo2.hwthread.core.out | 32 +-
.../expected.topo2.hwthread.hwthread-2.out | 32 +-
.../expected.topo2.hwthread.hwthread-4.out | 32 +-
.../expected.topo2.hwthread.hwthread-8.out | 32 +-
.../expected.topo2.hwthread.hwthread.out | 32 +-
.../expected.topo2.hwthread.numa.out | 32 +-
.../expected.topo2.hwthread.socket.out | 32 +-
.../expected.topo2.numa.board.out | 32 +-
.../expected.topo2.numa.core-2.out | 32 +-
.../expected.topo2.numa.core-4.out | 32 +-
.../binding_reference/expected.topo2.numa.core.out | 32 +-
.../expected.topo2.numa.hwthread-2.out | 32 +-
.../expected.topo2.numa.hwthread-4.out | 32 +-
.../expected.topo2.numa.hwthread-8.out | 32 +-
.../expected.topo2.numa.hwthread.out | 32 +-
.../binding_reference/expected.topo2.numa.numa.out | 32 +-
.../expected.topo2.numa.socket.out | 32 +-
.../expected.topo2.socket.board.out | 32 +-
.../expected.topo2.socket.core-2.out | 32 +-
.../expected.topo2.socket.core-4.out | 32 +-
.../expected.topo2.socket.core.out | 32 +-
.../expected.topo2.socket.hwthread-2.out | 32 +-
.../expected.topo2.socket.hwthread-4.out | 32 +-
.../expected.topo2.socket.hwthread-8.out | 32 +-
.../expected.topo2.socket.hwthread.out | 32 +-
.../expected.topo2.socket.numa.out | 32 +-
.../expected.topo2.socket.socket.out | 32 +-
.../expected.topo3.board.board.out | 32 +-
.../expected.topo3.board.core-2.out | 32 +-
.../expected.topo3.board.core-4.out | 32 +-
.../expected.topo3.board.core.out | 32 +-
.../expected.topo3.board.hwthread-2.out | 32 +-
.../expected.topo3.board.hwthread-4.out | 32 +-
.../expected.topo3.board.hwthread-8.out | 32 +-
.../expected.topo3.board.hwthread.out | 32 +-
.../expected.topo3.board.numa.out | 32 +-
.../expected.topo3.board.socket.out | 32 +-
.../expected.topo3.core-2.board.out | 32 +-
.../expected.topo3.core-2.core-2.out | 32 +-
.../expected.topo3.core-2.core-4.out | 32 +-
.../expected.topo3.core-2.core.out | 32 +-
.../expected.topo3.core-2.hwthread-2.out | 32 +-
.../expected.topo3.core-2.hwthread-4.out | 32 +-
.../expected.topo3.core-2.hwthread-8.out | 32 +-
.../expected.topo3.core-2.hwthread.out | 32 +-
.../expected.topo3.core-2.numa.out | 32 +-
.../expected.topo3.core-2.socket.out | 32 +-
.../expected.topo3.core-4.board.out | 32 +-
.../expected.topo3.core-4.core-2.out | 32 +-
.../expected.topo3.core-4.core-4.out | 32 +-
.../expected.topo3.core-4.core.out | 32 +-
.../expected.topo3.core-4.hwthread-2.out | 32 +-
.../expected.topo3.core-4.hwthread-4.out | 32 +-
.../expected.topo3.core-4.hwthread-8.out | 32 +-
.../expected.topo3.core-4.hwthread.out | 32 +-
.../expected.topo3.core-4.numa.out | 32 +-
.../expected.topo3.core-4.socket.out | 32 +-
.../expected.topo3.core.board.out | 32 +-
.../expected.topo3.core.core-2.out | 32 +-
.../expected.topo3.core.core-4.out | 32 +-
.../binding_reference/expected.topo3.core.core.out | 32 +-
.../expected.topo3.core.hwthread-2.out | 32 +-
.../expected.topo3.core.hwthread-4.out | 32 +-
.../expected.topo3.core.hwthread-8.out | 32 +-
.../expected.topo3.core.hwthread.out | 32 +-
.../binding_reference/expected.topo3.core.numa.out | 32 +-
.../expected.topo3.core.socket.out | 32 +-
.../expected.topo3.hwthread-2.board.out | 32 +-
.../expected.topo3.hwthread-2.core-2.out | 32 +-
.../expected.topo3.hwthread-2.core-4.out | 32 +-
.../expected.topo3.hwthread-2.core.out | 32 +-
.../expected.topo3.hwthread-2.hwthread-2.out | 32 +-
.../expected.topo3.hwthread-2.hwthread-4.out | 32 +-
.../expected.topo3.hwthread-2.hwthread-8.out | 32 +-
.../expected.topo3.hwthread-2.hwthread.out | 32 +-
.../expected.topo3.hwthread-2.numa.out | 32 +-
.../expected.topo3.hwthread-2.socket.out | 32 +-
.../expected.topo3.hwthread-4.board.out | 32 +-
.../expected.topo3.hwthread-4.core-2.out | 32 +-
.../expected.topo3.hwthread-4.core-4.out | 32 +-
.../expected.topo3.hwthread-4.core.out | 32 +-
.../expected.topo3.hwthread-4.hwthread-2.out | 32 +-
.../expected.topo3.hwthread-4.hwthread-4.out | 32 +-
.../expected.topo3.hwthread-4.hwthread-8.out | 32 +-
.../expected.topo3.hwthread-4.hwthread.out | 32 +-
.../expected.topo3.hwthread-4.numa.out | 32 +-
.../expected.topo3.hwthread-4.socket.out | 32 +-
.../expected.topo3.hwthread-8.board.out | 32 +-
.../expected.topo3.hwthread-8.core-2.out | 32 +-
.../expected.topo3.hwthread-8.core-4.out | 32 +-
.../expected.topo3.hwthread-8.core.out | 32 +-
.../expected.topo3.hwthread-8.hwthread-2.out | 32 +-
.../expected.topo3.hwthread-8.hwthread-4.out | 32 +-
.../expected.topo3.hwthread-8.hwthread-8.out | 32 +-
.../expected.topo3.hwthread-8.hwthread.out | 32 +-
.../expected.topo3.hwthread-8.numa.out | 32 +-
.../expected.topo3.hwthread-8.socket.out | 32 +-
.../expected.topo3.hwthread.board.out | 32 +-
.../expected.topo3.hwthread.core-2.out | 32 +-
.../expected.topo3.hwthread.core-4.out | 32 +-
.../expected.topo3.hwthread.core.out | 32 +-
.../expected.topo3.hwthread.hwthread-2.out | 32 +-
.../expected.topo3.hwthread.hwthread-4.out | 32 +-
.../expected.topo3.hwthread.hwthread-8.out | 32 +-
.../expected.topo3.hwthread.hwthread.out | 32 +-
.../expected.topo3.hwthread.numa.out | 32 +-
.../expected.topo3.hwthread.socket.out | 32 +-
.../expected.topo3.numa.board.out | 32 +-
.../expected.topo3.numa.core-2.out | 32 +-
.../expected.topo3.numa.core-4.out | 32 +-
.../binding_reference/expected.topo3.numa.core.out | 32 +-
.../expected.topo3.numa.hwthread-2.out | 32 +-
.../expected.topo3.numa.hwthread-4.out | 32 +-
.../expected.topo3.numa.hwthread-8.out | 32 +-
.../expected.topo3.numa.hwthread.out | 32 +-
.../binding_reference/expected.topo3.numa.numa.out | 32 +-
.../expected.topo3.numa.socket.out | 32 +-
.../expected.topo3.socket.board.out | 32 +-
.../expected.topo3.socket.core-2.out | 32 +-
.../expected.topo3.socket.core-4.out | 32 +-
.../expected.topo3.socket.core.out | 32 +-
.../expected.topo3.socket.hwthread-2.out | 32 +-
.../expected.topo3.socket.hwthread-4.out | 32 +-
.../expected.topo3.socket.hwthread-8.out | 32 +-
.../expected.topo3.socket.hwthread.out | 32 +-
.../expected.topo3.socket.numa.out | 32 +-
.../expected.topo3.socket.socket.out | 32 +-
.../expected.topo4.board.board.out | 32 +-
.../expected.topo4.board.core-2.out | 32 +-
.../expected.topo4.board.core-4.out | 32 +-
.../expected.topo4.board.core.out | 32 +-
.../expected.topo4.board.hwthread-2.out | 32 +-
.../expected.topo4.board.hwthread-4.out | 32 +-
.../expected.topo4.board.hwthread-8.out | 32 +-
.../expected.topo4.board.hwthread.out | 32 +-
.../expected.topo4.board.numa.out | 32 +-
.../expected.topo4.board.socket.out | 32 +-
.../expected.topo4.core-2.board.out | 32 +-
.../expected.topo4.core-2.core-2.out | 32 +-
.../expected.topo4.core-2.core-4.out | 32 +-
.../expected.topo4.core-2.core.out | 32 +-
.../expected.topo4.core-2.hwthread-2.out | 32 +-
.../expected.topo4.core-2.hwthread-4.out | 32 +-
.../expected.topo4.core-2.hwthread-8.out | 32 +-
.../expected.topo4.core-2.hwthread.out | 32 +-
.../expected.topo4.core-2.numa.out | 32 +-
.../expected.topo4.core-2.socket.out | 32 +-
.../expected.topo4.core-4.board.out | 32 +-
.../expected.topo4.core-4.core-2.out | 32 +-
.../expected.topo4.core-4.core-4.out | 32 +-
.../expected.topo4.core-4.core.out | 32 +-
.../expected.topo4.core-4.hwthread-2.out | 32 +-
.../expected.topo4.core-4.hwthread-4.out | 32 +-
.../expected.topo4.core-4.hwthread-8.out | 32 +-
.../expected.topo4.core-4.hwthread.out | 32 +-
.../expected.topo4.core-4.numa.out | 32 +-
.../expected.topo4.core-4.socket.out | 32 +-
.../expected.topo4.core.board.out | 32 +-
.../expected.topo4.core.core-2.out | 32 +-
.../expected.topo4.core.core-4.out | 32 +-
.../binding_reference/expected.topo4.core.core.out | 32 +-
.../expected.topo4.core.hwthread-2.out | 32 +-
.../expected.topo4.core.hwthread-4.out | 32 +-
.../expected.topo4.core.hwthread-8.out | 32 +-
.../expected.topo4.core.hwthread.out | 32 +-
.../binding_reference/expected.topo4.core.numa.out | 32 +-
.../expected.topo4.core.socket.out | 32 +-
.../expected.topo4.hwthread-2.board.out | 32 +-
.../expected.topo4.hwthread-2.core-2.out | 32 +-
.../expected.topo4.hwthread-2.core-4.out | 32 +-
.../expected.topo4.hwthread-2.core.out | 32 +-
.../expected.topo4.hwthread-2.hwthread-2.out | 32 +-
.../expected.topo4.hwthread-2.hwthread-4.out | 32 +-
.../expected.topo4.hwthread-2.hwthread-8.out | 32 +-
.../expected.topo4.hwthread-2.hwthread.out | 32 +-
.../expected.topo4.hwthread-2.numa.out | 32 +-
.../expected.topo4.hwthread-2.socket.out | 32 +-
.../expected.topo4.hwthread-4.board.out | 32 +-
.../expected.topo4.hwthread-4.core-2.out | 32 +-
.../expected.topo4.hwthread-4.core-4.out | 32 +-
.../expected.topo4.hwthread-4.core.out | 32 +-
.../expected.topo4.hwthread-4.hwthread-2.out | 32 +-
.../expected.topo4.hwthread-4.hwthread-4.out | 32 +-
.../expected.topo4.hwthread-4.hwthread-8.out | 32 +-
.../expected.topo4.hwthread-4.hwthread.out | 32 +-
.../expected.topo4.hwthread-4.numa.out | 32 +-
.../expected.topo4.hwthread-4.socket.out | 32 +-
.../expected.topo4.hwthread-8.board.out | 32 +-
.../expected.topo4.hwthread-8.core-2.out | 32 +-
.../expected.topo4.hwthread-8.core-4.out | 32 +-
.../expected.topo4.hwthread-8.core.out | 32 +-
.../expected.topo4.hwthread-8.hwthread-2.out | 32 +-
.../expected.topo4.hwthread-8.hwthread-4.out | 32 +-
.../expected.topo4.hwthread-8.hwthread-8.out | 32 +-
.../expected.topo4.hwthread-8.hwthread.out | 32 +-
.../expected.topo4.hwthread-8.numa.out | 32 +-
.../expected.topo4.hwthread-8.socket.out | 32 +-
.../expected.topo4.hwthread.board.out | 32 +-
.../expected.topo4.hwthread.core-2.out | 32 +-
.../expected.topo4.hwthread.core-4.out | 32 +-
.../expected.topo4.hwthread.core.out | 32 +-
.../expected.topo4.hwthread.hwthread-2.out | 32 +-
.../expected.topo4.hwthread.hwthread-4.out | 32 +-
.../expected.topo4.hwthread.hwthread-8.out | 32 +-
.../expected.topo4.hwthread.hwthread.out | 32 +-
.../expected.topo4.hwthread.numa.out | 32 +-
.../expected.topo4.hwthread.socket.out | 32 +-
.../expected.topo4.numa.board.out | 32 +-
.../expected.topo4.numa.core-2.out | 32 +-
.../expected.topo4.numa.core-4.out | 32 +-
.../binding_reference/expected.topo4.numa.core.out | 32 +-
.../expected.topo4.numa.hwthread-2.out | 32 +-
.../expected.topo4.numa.hwthread-4.out | 32 +-
.../expected.topo4.numa.hwthread-8.out | 32 +-
.../expected.topo4.numa.hwthread.out | 32 +-
.../binding_reference/expected.topo4.numa.numa.out | 32 +-
.../expected.topo4.numa.socket.out | 32 +-
.../expected.topo4.socket.board.out | 32 +-
.../expected.topo4.socket.core-2.out | 32 +-
.../expected.topo4.socket.core-4.out | 32 +-
.../expected.topo4.socket.core.out | 32 +-
.../expected.topo4.socket.hwthread-2.out | 32 +-
.../expected.topo4.socket.hwthread-4.out | 32 +-
.../expected.topo4.socket.hwthread-8.out | 32 +-
.../expected.topo4.socket.hwthread.out | 32 +-
.../expected.topo4.socket.numa.out | 32 +-
.../expected.topo4.socket.socket.out | 32 +-
test/mpi/impls/mpich/Makefile.in | 9 +-
test/mpi/impls/mpich/mpi_t/Makefile.in | 9 +-
test/mpi/impls/mpich/mpi_t/collparmt.c | 6 +
test/mpi/include/mpitest.h | 7 +
test/mpi/include/mpitestcxx.h | 8 +
test/mpi/include/mpithreadtest.h | 1 -
test/mpi/info/Makefile.in | 9 +-
test/mpi/init/Makefile.in | 9 +-
test/mpi/io/Makefile.am | 3 +-
test/mpi/io/Makefile.in | 40 +-
test/mpi/io/async.c | 2 +
test/mpi/io/async_any.c | 3 +
test/mpi/io/bigtype.c | 6 +
test/mpi/io/external32-derived-dtype.c | 106 +
test/mpi/io/hindexed_io.c | 12 +-
test/mpi/io/i_coll_test.c | 2 +-
test/mpi/io/i_hindexed_io.c | 1 +
test/mpi/io/simple_collective.c | 2 -
test/mpi/io/testlist.in | 1 +
test/mpi/manual/Makefile.in | 10 +-
test/mpi/manual/mpi_t/Makefile.in | 9 +-
test/mpi/mpi_t/Makefile.in | 9 +-
test/mpi/perf/Makefile.in | 9 +-
test/mpi/pt2pt/Makefile.am | 6 +-
test/mpi/pt2pt/Makefile.in | 75 +-
test/mpi/pt2pt/bsend1.c | 2 +
test/mpi/pt2pt/bsendfrag.c | 1 +
test/mpi/pt2pt/bsendpending.c | 1 +
test/mpi/pt2pt/dtype_send.c | 101 +
test/mpi/pt2pt/eagerdt.c | 5 +
test/mpi/pt2pt/inactivereq.c | 1 +
test/mpi/pt2pt/isendirecv.c | 4 +
test/mpi/pt2pt/many_isend.c | 59 +
test/mpi/pt2pt/manylmt.c | 61 +
test/mpi/pt2pt/mprobe.c | 12 -
test/mpi/pt2pt/rcancel.c | 3 +
test/mpi/pt2pt/rqfreeb.c | 1 +
test/mpi/pt2pt/scancel2.c | 1 +
test/mpi/pt2pt/sendrecv3.c | 1 +
test/mpi/pt2pt/testlist | 5 +-
test/mpi/rma/Makefile.am | 22 +-
test/mpi/rma/Makefile.in | 229 +-
test/mpi/rma/accfence1.c | 5 +-
test/mpi/rma/accpscw1.c | 5 +-
test/mpi/rma/derived-acc-flush_local.c | 5 +
test/mpi/rma/epochtest.c | 5 +-
test/mpi/rma/fetch_and_op.c | 2 +
test/mpi/rma/get_accumulate.c | 15 +-
test/mpi/rma/getfence1.c | 5 +-
test/mpi/rma/linked_list_bench_lock_all.c | 2 +
test/mpi/rma/linked_list_bench_lock_excl.c | 2 +
test/mpi/rma/linked_list_bench_lock_shr.c | 2 +
test/mpi/rma/lockcontention3.c | 1 +
test/mpi/rma/manyget.c | 2 +
test/mpi/rma/overlap_wins_rma.c | 304 +
test/mpi/rma/putfence1.c | 5 +-
test/mpi/rma/putpscw1.c | 5 +-
test/mpi/rma/reqops.c | 3 +-
test/mpi/rma/rget-unlock.c | 87 +
test/mpi/rma/selfrma.c | 6 +-
test/mpi/rma/strided_getacc_indexed_shared.c | 2 +-
test/mpi/rma/strided_putget_indexed_shared.c | 2 +-
test/mpi/rma/testlist.in | 6 +
test/mpi/rma/transpose7.c | 2 +
test/mpi/runtests.in | 15 +-
test/mpi/spawn/Makefile.in | 9 +-
test/mpi/spawn/multiple_ports.c | 3 +
test/mpi/spawn/multiple_ports2.c | 4 +
test/mpi/spawn/selfconacc.c | 3 +
test/mpi/spawn/spawn-rootargs.c | 8 +-
test/mpi/spawn/spawnmanyarg.c | 6 +
test/mpi/spawn/taskmaster.c | 5 +-
test/mpi/spawn/testlist.in | 2 +-
test/mpi/threads/Makefile.in | 9 +-
test/mpi/threads/coll/Makefile.in | 9 +-
test/mpi/threads/coll/allred.c | 2 +
test/mpi/threads/coll/iallred.c | 2 +
test/mpi/threads/comm/Makefile.in | 9 +-
test/mpi/threads/comm/ctxdup.c | 2 +
test/mpi/threads/comm/idup_comm_gen.c | 2 +-
test/mpi/threads/comm/idup_nb.c | 2 +-
test/mpi/threads/init/Makefile.in | 9 +-
test/mpi/threads/mpi_t/Makefile.in | 9 +-
test/mpi/threads/pt2pt/Makefile.in | 9 +-
test/mpi/threads/pt2pt/ibsend.c | 5 +
test/mpi/threads/pt2pt/multisend2.c | 2 +
test/mpi/threads/pt2pt/multisend3.c | 2 +
test/mpi/threads/pt2pt/multisend4.c | 1 +
test/mpi/threads/pt2pt/threaded_sr.c | 5 +
test/mpi/threads/rma/Makefile.in | 9 +-
test/mpi/threads/rma/multiget.c | 2 +-
test/mpi/threads/spawn/Makefile.in | 9 +-
test/mpi/threads/util/Makefile.in | 1 +
test/mpi/threads/util/mtestthread.c | 2 +-
test/mpi/topo/Makefile.am | 1 +
test/mpi/topo/Makefile.in | 34 +-
test/mpi/topo/baddims.h | 75395 +++++++++++++++++++
test/mpi/topo/dims5.c | 104 +
test/mpi/topo/distgraph1.c | 9 +
test/mpi/topo/testlist | 1 +
test/mpi/util/Makefile.in | 1 +
test/mpi/util/dtypes.c | 1 +
test/mpi/util/mtest_datatype.c | 60 +-
test/mpi/util/mtest_datatype.h | 2 +-
test/mpi/version.m4 | 6 +-
www/index.html | 14 +-
www/www3/Constants.html | 891 +
www/www3/MPIX_Comm_agree.html | 24 +-
www/www3/MPIX_Comm_revoke.html | 7 +-
www/www3/MPIX_Comm_shrink.html | 24 +-
www/www3/MPI_Address.html | 2 +-
www/www3/MPI_Aint_add.html | 7 +-
www/www3/MPI_Aint_diff.html | 5 +-
www/www3/MPI_Dims_create.html | 6 +-
www/www3/MPI_Status_set_elements_x.html | 2 +-
www/www3/MPI_T_category_get_index.html | 2 +
www/www3/MPI_T_cvar_get_index.html | 2 +
www/www3/MPI_T_pvar_get_index.html | 2 +
www/www3/MPI_Type_get_extent_x.html | 2 +-
www/www3/MPI_Type_get_true_extent_x.html | 2 +-
www/www3/MPI_Type_hindexed.html | 4 +-
www/www3/MPI_Type_struct.html | 6 +-
www/www3/index.htm | 12 +-
www/www3/mpi.cit | 1 +
3604 files changed, 332243 insertions(+), 165287 deletions(-)
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 9f0e903..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,604 +0,0 @@
-# Lines that start with '#' are comments. See gitignore(5) for more info.
-
-# objects and archives
-*.[oa]
-# libtool objects
-*.lo
-# backup files that many editors create
-*~
-# vim swap files
-*.sw[a-z]
-# darwin debug info dirs
-*.dSYM/
-
-# almost always derived from a Makefile.am now that ROMIO is converted and MPE
-# is a separate package
-Makefile.in
-Makefile
-
-# a lot of generic patterns for generated files
-*-cache
-*.MOD
-*.aps
-*.aux
-*.bb
-*.bbg
-*.bbl
-*.blg
-*.cache
-*.clog
-*.clw
-*.d
-*.da
-*.dot
-*.dsp
-*.dsw
-*.dvi
-*.eps
-*.exe
-*.exe.stackdump
-*.gcda
-*.gcno
-*.gcov
-*.htm
-*.idx
-*.ilg
-*.ind
-*.jar.log
-*.la
-*.lo
-*.log
-*.mod
-*.ncb
-*.no
-*.o
-*.opt
-*.out
-*.pdf
-*.pf
-*.plg
-*.po
-*.ps
-*.pyc
-*.s
-*.safe
-*.slog
-*.so
-*.stackdump
-*.suo
-*.toc
-*.user
-*.vcproj
-*.vfproj
-*conf.h
-*conf.h.in
-*fs.c
-*old*.pdf
-.*-cache
-.deps
-.dirstamp
-.libs
-.libstamp*
-.libstamp0
-.state-cache
-TAGS
-GPATH
-GRTAGS
-GTAGS
-confdefs.h
-config.h.in
-config.log
-config.status
-config.system
-configure
-configure.lineno
-hydra_config.h*
-localdefs
-mpe_*.conf
-mpich*pgrs.html
-mpid_config.h.in
-mpiexec
-old
-old*_pngs
-stamp-h1
-summary.xml
-summary.junit.xml
-summary.tap
-tags
-apply-xfail.sh
-
-# the hooks dir shouldn't be accidentally committed
-/maint/hooks
-
-# directories copied by autogen.sh from other directories and (generally) should
-# not have any contents added directly to them
-/src/armci/m4
-/src/mpi/romio/confdb
-/src/mpl/confdb
-/src/pm/hydra/confdb
-/src/pm/hydra/mpl
-/src/pm/hydra/mpl/confdb
-/src/mpi/romio/version.m4
-/src/pm/hydra/version.m4
-/test/mpi/version.m4
-
-# created by the build process in the test dirs
-gen-src-stamp
-Makefile.am-stamp
-
-# created by maint/gen_subcfg_m4
-/subsys_include.m4
-
-# root confdb/ contents
-/confdb/ar-lib
-/confdb/compile
-/confdb/config.guess
-/confdb/config.sub
-/confdb/depcomp
-/confdb/install-sh
-/confdb/libtool.m4
-/confdb/ltmain.sh
-/confdb/ltoptions.m4
-/confdb/ltsugar.m4
-/confdb/ltversion.m4
-/confdb/lt~obsolete.m4
-/confdb/missing
-
-# random stuff
-/maint/gcovmerge
-/src/binding/fortran/mpif_h/buildiface-stamp
-/src/binding/fortran/use_mpi/buildiface-stamp
-/src/binding/cxx/buildiface-stamp
-
-# script-generated f90 test files
-
-# created solely from the f77 counterpart dirs
-
-# dirs created by the local install of OPA & MPL
-/share
-/include
-
-# random additions
-/README.envvar
-/maint/extracterrmsgs
-/src/binding/fortran/use_mpi/mpi_base.f90.in
-/src/binding/fortran/use_mpi/mpi_constants.f90.in
-/src/mpi/romio/include/mpio.h
-/src/mpi/romio/include/mpiof.h
-/src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h
-/src/packaging/envmods/mpich2.module
-/src/packaging/pkgconfig/mpich2-c.pc
-/src/packaging/pkgconfig/mpich2-ch3.pc
-/src/packaging/pkgconfig/mpich2-cxx.pc
-/src/packaging/pkgconfig/mpich2-f77.pc
-/src/packaging/pkgconfig/mpich2-f90.pc
-/src/packaging/spec/fedora.spec
-
-# random additions 2
-/mpich-doxygen
-/src/include/glue_romio.h
-/src/include/mpichinfo.h
-/src/packaging/envmods/mpich.module
-/src/packaging/pkgconfig/mpich.pc
-/src/glue/romio/all_romio_symbols.c
-
-# stamp "witness" files from the new build system
-/src/binding/fortran/use_mpi/buildiface.stamp
-/src/binding/fortran/use_mpi/mpi.mod-stamp
-/src/binding/fortran/use_mpi/mpi_base.mod-stamp
-/src/binding/fortran/use_mpi/mpi_constants.mod-stamp
-/src/binding/fortran/use_mpi/mpi_sizeofs.mod-stamp
-/src/binding/fortran/use_mpi_f08/*.stamp
-
-/src/mpe2/src/callstack/bin/bt2line
-
-# MPL build products
-/src/mpl/_configs.sed
-/src/mpl/aclocal.m4
-/src/mpl/confdb
-/src/mpl/libtool
-/src/mpl/include/mplconfig.h
-/src/mpl/include/stamp-h1
-/src/mpl/include/config.h
-/src/mpl/include/stamp-h2
-
-# ARMCI-MPI
-/src/armci/aclocal.m4
-
-/examples/f77/stdio.f
-
-# artifacts created by the build system overhaul
-/aclocal.m4
-/config.lt
-/src/mpi/romio/aclocal.m4
-/src/mpi/romio/libtool
-/src/pm/mpd/aclocal.m4
-/src/pm/gforker/mpiexec.gforker
-/maint/Version
-/src/binding/fortran/mpif_h/Makefile.mk
-/src/binding/fortran/use_mpi/Makefile.mk
-/src/binding/fortran/use_mpi_f08/Makefile.mk
-
-# MPICH2 parameter handling
-/src/include/mpich_cvars.h
-/src/util/cvar/mpich_cvars.c
-
-
-################################################################################
-# stuff added a long time ago by `git svn show-ignore` from one of Dave's
-# git-svn-clone repositories. Some of this stuff may be stale and/or redundant
-# with the more hand-written rules above.
-################################################################################
-
-# /
-/cache.base
-/.mpich2
-/libtool
-/mpich2-doxygen
-/lib
-/mpich2.ncb
-/mpich2.opt
-/mpich2.plg
-/mpich2.suo
-/coverage*
-/bin
-/.err
-/unusederr.txt
-/www
-/cscope.out
-/cscope.files
-/winbuild
-/man
-/README
-
-# /confdb/
-/confdb/www
-/confdb/amdb
-/confdb/tex
-/confdb/pac.log
-/confdb/pac.aux
-/confdb/acconfig.h
-/confdb/configure.in
-/confdb/pac.ps
-/confdb/pac.pdf
-
-# /doc/
-
-# /doc/design/
-/doc/design/design.pdf
-
-# /doc/faq/
-/doc/faq/faq.htm
-/doc/faq/faq.tex
-
-# /doc/installguide/
-/doc/installguide/install.pdf
-/doc/installguide/config.options
-
-# /doc/logging/
-/doc/logging/logging.pdf
-
-# /doc/mansrc/
-/doc/mansrc/createhtmlindex
-
-# /doc/namepub/
-/doc/namepub/namepub.ps
-/doc/namepub/namepub.dvi
-/doc/namepub/twopm.eps
-
-# /doc/pmi/
-/doc/pmi/paper.ps
-/doc/pmi/paper.pdf
-/doc/pmi/pmi.pdf
-/doc/pmi/pmi.ps
-/doc/pmi/pmiman
-/doc/pmi/pmipdf.tex
-
-# /doc/refman/
-/doc/refman/MPI_*.tex
-
-# DJG-added
-/doc/installguide/install.tex
-/doc/userguide/user.tex
-/doc/windev/windev.tex
-
-# /doc/smpd/
-/doc/smpd/smpd_pmi.pdf
-
-# /doc/userguide/
-/doc/userguide/user.pdf
-/doc/userguide/user
-/doc/userguide/faqsum.tex
-
-# /doc/windev/
-/doc/windev/windev.pdf
-/doc/windev/config.options
-
-# /examples/
-/examples/hellow
-/examples/sr
-/examples/srtest
-/examples/srvec
-/examples/bcasttest
-/examples/allred
-/examples/spawntest
-/examples/spawner
-/examples/spawnee
-/examples/cpi
-/examples/pm2
-/examples/cm2
-/examples/icpi
-/examples/child
-/examples/parent
-/examples/spawn_merge_child1
-/examples/spawn_merge_child2
-/examples/spawn_merge_parent
-
-# /examples/cxx/
-/examples/cxx/cxxpi
-
-# /examples/f77/
-/examples/f77/fpi
-
-# /examples/f90/
-/examples/f90/pi3f90
-
-
-# /examples/windows/pmandel_vis/
-/examples/windows/pmandel_vis/pman_vis.ncb
-/examples/windows/pmandel_vis/pman_vis.aps
-/examples/windows/pmandel_vis/pman_vis.suo
-
-# /examples/windows/pmandel_vis_net/
-/examples/windows/pmandel_vis_net/bin
-/examples/windows/pmandel_vis_net/MandelViewer.csproj.user
-/examples/windows/pmandel_vis_net/obj
-
-# /examples/windows/pmitest/
-/examples/windows/pmitest/pmitest.ncb
-/examples/windows/pmitest/pmitest.suo
-
-# /examples/windows/skeleton/
-/examples/windows/skeleton/skeleton.ncb
-/examples/windows/skeleton/skeleton.suo
-
-# /maint/
-/maint/genstates
-/maint/simplemake
-/maint/checkbuilds
-/maint/findfixme
-/maint/getstates
-/maint/getcoverage
-/maint/createcoverage
-/maint/showsizes
-/maint/getcross
-/maint/f77tof90
-/maint/makerpm
-/maint/clmake
-/maint/conftimestamp
-/maint/extractstrings
-/maint/extractstates
-/maint/extractfixme
-/maint/structalign
-/maint/createhtmlindex
-/maint/extractcvars
-/maint/cvardirs
-
-# /src/
-
-# /src/binding/
-
-# /src/binding/cxx/
-/src/binding/cxx/Makefile.sm
-/src/binding/cxx/mpicxx
-/src/binding/cxx/mpicxx.h
-/src/binding/cxx/mpicxx.h.in
-/src/binding/cxx/mpicxx.conf
-/src/binding/cxx/initcxx.cpp
-/src/binding/cxx/initcxx.cxx
-/src/binding/cxx/cov.dat
-/src/binding/cxx/cov2html
-/src/binding/cxx/*.h
-
-# /src/binding/fortran/mpif_h/
-/src/binding/fortran/mpif_h/include
-/src/binding/fortran/mpif_h/Makefile.sm
-/src/binding/fortran/mpif_h/mpif_bottom.h
-/src/binding/fortran/mpif_h/setbotf.f
-/src/binding/fortran/mpif_h/setbot.c
-/src/binding/fortran/mpif_h/mpif77.conf
-/src/binding/fortran/mpif_h/mpif77
-/src/binding/fortran/mpif_h/*.c
-/src/binding/fortran/mpif_h/fproto.h
-/src/binding/fortran/mpif_h/mpif.h
-/src/binding/fortran/mpif_h/mpif.h.in
-/src/binding/fortran/mpif_h/fprotos.h
-
-# /src/binding/fortran/use_mpi/
-/src/binding/fortran/use_mpi/mpi_base.f90.orig
-/src/binding/fortran/use_mpi/mpi_base.f90.new
-/src/binding/fortran/use_mpi/mpif.h
-/src/binding/fortran/use_mpi/Makefile.sm
-/src/binding/fortran/use_mpi/mpi.f90
-/src/binding/fortran/use_mpi/mpi_t1.f90
-/src/binding/fortran/use_mpi/mpimod.pcl
-/src/binding/fortran/use_mpi/mpi_sizeofs.f90
-/src/binding/fortran/use_mpi/mpi_base.f90
-/src/binding/fortran/use_mpi/mpif90model.h
-/src/binding/fortran/use_mpi/mpif90type.h
-/src/binding/fortran/use_mpi/mpi_constants.f90
-/src/binding/fortran/use_mpi/typef90intf.c
-/src/binding/fortran/use_mpi/typef90realf.c
-/src/binding/fortran/use_mpi/typef90cmplxf.c
-/src/binding/fortran/use_mpi/mpifnoext.h
-
-# /src/binding/fortran/use_mpi_f08
-/src/binding/fortran/use_mpi_f08/pmpi_f08.f90
-/src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.f90
-/src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.f90.in
-/src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90
-/src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90.in
-
-/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/*.f90
-
-/src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c
-/src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.h
-/src/binding/fortran/use_mpi_f08/wrappers_c/Makefile.mk
-/src/binding/fortran/use_mpi_f08/wrappers_c/*_cdesc.c
-
-# /src/env/
-/src/env/mpicc
-/src/env/mpicc.sh
-/src/env/mpicc.bash
-/src/env/mpicc.conf
-/src/env/mpicxx
-/src/env/mpicxx.sh
-/src/env/mpicxx.bash
-/src/env/mpicxx.conf
-/src/env/mpif77
-/src/env/mpif77.sh
-/src/env/mpif77.bash
-/src/env/mpif77.conf
-/src/env/mpifort
-/src/env/mpifort.sh
-/src/env/mpifort.bash
-/src/env/mpichversion
-/src/env/parkill
-/src/env/mpivars
-/src/env/mpixxx_opts.conf
-/src/env/cc_shlib.conf
-/src/env/cxx_shlib.conf
-/src/env/f77_shlib.conf
-/src/env/fc_shlib.conf
-
-# /src/include/
-/src/include/mpi.h
-/src/include/mpif.h
-#/src/include/mpe_thread.h
-/src/include/mpimod.pcl
-/src/include/mpid_datatype.h
-/src/include/mpid_dataloop.h
-/src/include/gen_dataloop.h
-/src/include/mpich2info.h
-/src/include/mpio.h
-/src/include/mpicxx.h
-/src/include/mpimcxx.h
-/src/include/mpiallstates.h
-/src/include/lwnames.h
-/src/include/mpitest.h
-/src/include/win32
-/src/include/win64
-
-# /src/mpi/debugger/
-/src/mpi/debugger/tvtest
-/src/mpi/debugger/qdemo
-
-# /src/mpi/errhan/
-/src/mpi/errhan/defmsg.h
-
-# /src/mpi/romio/
-/src/mpi/romio/configure2
-/src/mpi/romio/lib
-/src/mpi/romio/bin
-/src/mpi/romio/misc
-/src/mpi/romio/cscope.files
-/src/mpi/romio/cscope.out
-
-# /src/mpi/romio/include/
-/src/mpi/romio/include/mpio.h mpiof.h
-
-# /src/mpi/romio/mpi-io/
-
-# /src/mpi/romio/mpi-io/fortran/
-/src/mpi/romio/mpi-io/fortran/g77
-/src/mpi/romio/mpi-io/fortran/intel
-
-# /src/mpi/romio/test/
-/src/mpi/romio/test/runtests
-/src/mpi/romio/test/misc.c
-/src/mpi/romio/test/fmisc.f
-/src/mpi/romio/test/large_file.c
-/src/mpi/romio/test/fcoll_test.f
-/src/mpi/romio/test/fperf.f
-/src/mpi/romio/test/pfcoll_test.f
-/src/mpi/romio/test/romiotests
-
-# /src/mpi/romio/test-internal/
-
-# /src/mpi/romio/util/
-/src/mpi/romio/util/romioinstall
-
-# /src/mpi/spawn/
-
-# /src/mpid/ch3/channels/nemesis/nemesis/src/
-/src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c
-
-# /src/nameserv/test/
-/src/nameserv/test/testnd
-
-# /src/pm/mpd/
-/src/pm/mpd/pmitest0
-/src/pm/mpd/mpdroot
-
-# /src/pm/smpd/
-/src/pm/smpd/smpd
-/src/pm/smpd/smpd_version.h
-
-# /src/pm/smpd/wmpiconfig/
-/src/pm/smpd/wmpiconfig/bin
-/src/pm/smpd/wmpiconfig/obj
-
-# /src/pm/smpd/wmpiexec/
-/src/pm/smpd/wmpiexec/bin
-/src/pm/smpd/wmpiexec/obj
-
-# /src/pm/smpd/wmpiregister/
-/src/pm/smpd/wmpiregister/bin
-/src/pm/smpd/wmpiregister/obj
-
-# /src/pm/util/test/
-/src/pm/util/test/argstest
-/src/pm/util/test/forktest
-
-# /src/util/dbg/
-/src/util/dbg/getfuncstack
-
-# /src/util/logging/common/
-/src/util/logging/common/describe_states.c
-/src/util/logging/common/state_names.h
-
-# /src/util/logging/rlog/
-/src/util/logging/rlog/rlogconf.*
-/src/util/logging/rlog/printrlog
-/src/util/logging/rlog/printirlog
-/src/util/logging/rlog/pprintirlog
-/src/util/logging/rlog/irlog2rlog
-/src/util/logging/rlog/trace_impl.h
-
-# /src/util/timers
-/src/util/timers/mpiu_timer.h
-
-# /test/
-/test/runtests
-
-# /test/commands/
-/test/commands/cmdtests
-/test/commands/stdintest
-/test/commands/stdintest2
-/test/commands/stdiotest
-/test/commands/checkenv1
-
-# /test/mpid/
-/test/mpid/atomic
-/test/mpid/dluse
-
-# /test/mpid/ch3/
-/test/mpid/ch3/reorder
-
-# /test/util/info/
-/test/util/info/infotest
-/test/util/info/infomany
-
-# /test/util/timer/
-/test/util/timer/timertest
-
diff --git a/CHANGES b/CHANGES
index cf69372..fd3c771 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,26 @@
===============================================================================
+ Changes in 3.3
+===============================================================================
+
+ # CH4 Device: A new device layer implementation designed for low software
+ overheads. CH4 has experimental support for OFI and UCX network libraries,
+ and POSIX shared memory. Thanks to Intel, Mellanox, and RIKEN AICS for
+ participating in the CH4 coding effort.
+
+ # Removed the PAMI device and poe PMI client.
+
+ # Several other minor bug fixes, memory leak fixes, and code cleanup.
+
+ A full list of changes is available at the following link:
+
+ http://git.mpich.org/mpich.git/shortlog/v3.2..v3.3a1
+
+ A full list of bugs that have been fixed is available at the
+ following link:
+
+ https://trac.mpich.org/projects/mpich/query?status=closed&group=resolution&milestone=mpich-3.3
+
+===============================================================================
Changes in 3.2
===============================================================================
@@ -31,7 +53,7 @@
A full list of changes is available at the following link:
- http://git.mpich.org/mpich.git/shortlog/v3.1.3..v3.2rc1
+ http://git.mpich.org/mpich.git/shortlog/v3.1.3..v3.2
A full list of bugs that have been fixed is available at the
following link:
@@ -1240,11 +1262,11 @@ www.mcs.anl.gov/mpi/mpich2/mpich2_1_0_6changes.htm.
reorder == true cases in Cart_create and Graph_create).
- New memory allocation macros, MPIU_CHK[PL]MEM_*(), have been added to help
- prevent memory leaks. See mpich2/src/include/mpimem.h.
+ prevent memory leaks. See mpich2/src/include/mpir_mem.h.
- New error reporting macros, MPIU_ERR_*, have been added to simplify the error
handling throughout the code, making the code easier to read. See
- mpich2/src/include/mpierrs.h.
+ mpich2/src/include/mpir_err.h.
- Interprocess communication using the Sock interface (sock and ssm channels)
may now be bound to a particular destination interface using the environment
diff --git a/Makefile.am b/Makefile.am
index bde9873..add174b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -8,6 +8,7 @@ ACLOCAL_AMFLAGS = -I confdb
# automake requires that we initialize variables to something, even just empty,
# before appending to them with "+="
+AM_CFLAGS = @VISIBILITY_CFLAGS@
AM_CPPFLAGS =
AM_FFLAGS =
AM_FCFLAGS =
@@ -35,6 +36,7 @@ MANDOC_SUBDIRS =
HTMLDOC_SUBDIRS =
INSTALL_DATA_LOCAL_TARGETS =
doc1_src_txt =
+doc3_src_txt =
# add (+=) target names to this variable to add them to the dependencies of the
# 'clean-local' target
@@ -51,7 +53,7 @@ external_subdirs = @mplsrcdir@ @opasrcdir@
external_ldflags = @mpllibdir@ @opalibdir@
external_libs = @WRAPPER_LIBS@
mpi_convenience_libs =
-pmpi_convenience_libs = @mpllib@ @opalib@
+pmpi_convenience_libs = @opalib@ @mpllib@
# NOTE on our semi-unconventional usage of DIST_SUBDIRS:
# The automake manual recommends thinking of DIST_SUBDIRS as the list of all
@@ -438,7 +440,7 @@ endif !BUILD_COVERAGE
# should be considered when dissecting suffix-based implicit rules. These phony
# suffix files should NOT be added to a .PHONY target, otherwise make will not
# use the implicit rules to attempt to build them.
-SUFFIXES += .man-phony .html-phony .man1-phony .html1-phony .txt
+SUFFIXES += .man-phony .html-phony .man1-phony .html1-phony .man3-phony .html3-phony .txt
# "make V=1" support for our documentation recipes
doctextman_verbose = $(doctextman_verbose_$(V))
@@ -479,13 +481,22 @@ htmldoc_root3="--your-url-here--"
.txt.html1-phony:
$(doctexthtml_verbose)$(DOCTEXT) -html -mpath $(htmldoc_path1) \
-heading MPI -quotefmt -nolocation $(doctext_docnotes) $<
+.txt.man3-phony:
+ $(doctextman_verbose)$(DOCTEXT) -man -mpath $(mandoc_path3) -ext 3 \
+ -heading MPI -quotefmt -nolocation $(doctext_docnotes) $<
+.txt.html3-phony:
+ $(doctexthtml_verbose)$(DOCTEXT) -html -mpath $(htmldoc_path3) \
+ -heading MPI -quotefmt -nolocation \
+ -index $(htmldoc_path3)/mpi.cit -indexdir $(htmldoc_root3) \
+ $(doctext_docnotes) $<
# use mandoc-local target to force directory creation before running DOCTEXT
mandoc:
test -d $(mandoc_path1) || $(MKDIR_P) $(mandoc_path1)
test -d $(mandoc_path3) || $(MKDIR_P) $(mandoc_path3)
$(MAKE) $(AM_MAKEFLAGS) mandoc-local
-mandoc-local: $(mpi_sources:.c=.man-phony) $(doc1_src_txt:.txt=.man1-phony)
+mandoc-local: $(mpi_sources:.c=.man-phony) $(doc1_src_txt:.txt=.man1-phony) \
+ $(doc3_src_txt:.txt=.man3-phony)
for subdir in $(MANDOC_SUBDIRS) - ; do \
if test "x$$subdir" = "x-" ; then break ; fi ; \
## MANDOC_SUBDIRS might accidentally contain "."
@@ -502,14 +513,20 @@ mandoc-local: $(mpi_sources:.c=.man-phony) $(doc1_src_txt:.txt=.man1-phony)
fi \
fi \
done
-
+# FIXME: the 'mancnst' script need to be committed for this to work
+# (cd $(abs_top_builddir) && $(abs_top_srcdir)/doc/mansrc/mancnst)
# use htmldoc-local target to force directory creation before running DOCTEXT
+# Note that the mpi.cit is appended to by each update, so it must be removed
+# and recreated when the documentation files are updated
htmldoc:
test -d $(top_builddir)/www/www1 || $(MKDIR_P) $(top_builddir)/www/www1
test -d $(top_builddir)/www/www3 || $(MKDIR_P) $(top_builddir)/www/www3
+ rm -f $(htmldoc_path3)/mpi.cit
$(MAKE) $(AM_MAKEFLAGS) htmldoc-local
-htmldoc-local: $(mpi_sources:.c=.html-phony) $(doc1_src_txt:.txt=.html1-phony)
+
+htmldoc-local: $(mpi_sources:.c=.html-phony) $(doc1_src_txt:.txt=.html1-phony) \
+ $(doc3_src_txt:.txt=.html3-phony)
for subdir in $(HTMLDOC_SUBDIRS) - ; do \
if test "x$$subdir" = "x-" ; then break ; fi ; \
## HTMLDOC_SUBDIRS might accidentally contain "."
diff --git a/Makefile.in b/Makefile.in
index c307257..b91655f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -37,528 +37,6 @@
# conditional includes/builds of "sock" and "ftb" controlled in the past by
# @ch3subsystems@ and @ftb_dir@ respectively
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
### -*- Mode: Makefile; -*-
### vim: set ft=automake :
###
@@ -2003,38 +1481,30 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
@BUILD_F08_BINDING_TRUE at am__append_43 = $(f08_module_files)
@BUILD_F08_BINDING_TRUE at am__append_44 = $(f08_module_files) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface.lo \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface.stamp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface.tmp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08.lo \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08.stamp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08.tmp \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface.lo \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface.stamp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface.tmp \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08.lo \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08.stamp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08.tmp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_COMPILE_CONSTANTS_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.lo \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.stamp \
@@ -2043,6 +1513,14 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_types.lo \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_types.stamp \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_types.tmp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(PMPI_F08_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/pmpi_f08.lo \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/pmpi_f08.stamp \
@@ -2070,7 +1548,9 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
@BUILD_CH3_TRUE@ src/mpid/ch3/include/mpidpost.h \
@BUILD_CH3_TRUE@ src/mpid/ch3/include/mpidpre.h \
@BUILD_CH3_TRUE@ src/mpid/ch3/include/mpid_thread.h \
- at BUILD_CH3_TRUE@ src/mpid/ch3/include/mpidrma.h
+ at BUILD_CH3_TRUE@ src/mpid/ch3/include/mpidrma.h \
+ at BUILD_CH3_TRUE@ src/mpid/ch3/include/mpid_sched.h \
+ at BUILD_CH3_TRUE@ src/mpid/ch3/include/mpid_coll.h
@BUILD_CH3_TRUE at am__append_55 = \
@BUILD_CH3_TRUE@ src/mpid/ch3/src/ch3u_buffer.c \
@@ -2157,7 +1637,6 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/include/mpid_nem_debug.h \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/include/mpid_nem_defs.h \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/include/mpid_nem_fbox.h \
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/include/mpid_nem_generic_queue.h \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/include/mpid_nem_nets.h \
@@ -2177,9 +1656,7 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/ch3i_comm.c \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c \
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c \
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c \
@@ -2272,6 +1749,7 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
# depend on any choices made by configure
@BUILD_CH3_TRUE at am__append_77 = src/mpid/ch3/channels/sock/src/errnames.txt
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__append_78 = \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/sock.c \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/ch3_finalize.c \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/ch3_init.c \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/ch3_isend.c \
@@ -2281,242 +1759,111 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/ch3_progress.c \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/ch3_win_fns.c
- at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__append_79 = \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__append_79 = src/mpid/ch3/channels/sock/include/mpidu_sock.h \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/include/mpidu_socki.h \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/include/mpidi_ch3_impl.h \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/include/mpidi_ch3_post.h
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__append_80 = \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ -I$(top_srcdir)/src/mpid/ch3/channels/sock/include \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ -I$(top_builddir)/src/mpid/ch3/channels/sock/include
- at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__append_80 = \
- at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h \
- at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/include/mpidi_ch3_impl.h \
- at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/include/mpidi_ch3_post.h
-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-#AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/pamid/src/include \
-# -I$(top_builddir)/src/mpid/pamid/src/include
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
- at BUILD_PAMID_TRUE@am__append_81 = \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_thread.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidimpl.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_mutex.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidpost.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_constants.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_externs.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_util.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_hooks.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_macros.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_datatypes.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_prototypes.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/pamix.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidpre.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/include/mpidi_platform.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_request.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_progress.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_recvq.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpidi_onesided.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpid_send.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_recv.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_send.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpid_irecv.h \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpid_isend.h
- at BUILD_PAMID_TRUE@am__append_82 = src/mpid/pamid/include/mpix.h
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
- at BUILD_PAMID_TRUE@am__append_83 = src/mpid/pamid/src/coll/barrier/mpido_barrier.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/bcast/mpido_bcast.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/bcast/mpido_ibcast.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgather/mpido_allgather.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgather/mpido_iallgather.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatter/mpido_scatter.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatter/mpido_iscatter.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gather/mpido_gather.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gather/mpido_igather.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scan/mpido_scan.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/reduce/mpido_reduce.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/reduce/mpido_ireduce.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/exscan/mpido_iexscan.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/coll_utils.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/mpid_comm.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/mpid_selectcolls.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/mpid_optcolls.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/mpid_abort.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/mpid_get_universe_size.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/mpid_getpname.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/mpid_mem.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/mpid_unimpl.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpix/mpix.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_1s.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_accumulate.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_create.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_fence.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_free.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_get.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_lock.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_lock_all.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_pscw.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_put.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_shared_query.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_flush.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_allocate.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_sync.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_attach.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_detach.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_get_info.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_set_info.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_reqops.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpidi_win_control.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pamix/pamix.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpid_cancel.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpid_issend.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpid_recv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpid_ssend.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_callback_short.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_callback_util.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_control.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_done.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/mpid_port.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/mpidi_pg.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/mpidi_port.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_buffer.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpidi_bufmm.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_finalize.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_init.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_iprobe.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_probe.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_progress.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_recvq.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_request.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_time.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_vc.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpidi_env.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpidi_util.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpidi_mutex.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_mrecv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_mprobe.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_imrecv.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_improbe.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpid_aint.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpidi_nbc_sched.c \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpidi_pami_datatype.c
- at BUILD_PAMID_TRUE@@QUEUE_BINARY_SEARCH_SUPPORT_TRUE at am__append_84 = \
- at BUILD_PAMID_TRUE@@QUEUE_BINARY_SEARCH_SUPPORT_TRUE@ src/mpid/pamid/src/mpid_recvq_mmap.cpp
-
- at BUILD_MPID_COMMON_DATATYPE_TRUE@am__append_85 = src/mpid/common/datatype/dataloop/darray_support.c \
+ at BUILD_CH4_TRUE@am__append_81 = -I$(top_srcdir)/src/mpid/ch4/include \
+ at BUILD_CH4_TRUE@ -I$(top_builddir)/src/mpid/ch4/include \
+ at BUILD_CH4_TRUE@ -I$(top_srcdir)/src/mpid/ch4/src \
+ at BUILD_CH4_TRUE@ -I$(top_srcdir)/src/mpid/ch4/generic \
+ at BUILD_CH4_TRUE@ -I$(top_srcdir)/src/mpid/ch4/netmod/include
+ at BUILD_CH4_TRUE@am__append_82 = src/mpid/ch4/include/netmodpre.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/include/shmpre.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/include/mpidch4.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/include/mpidch4r.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/include/mpidimpl.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/include/mpidpre.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/include/mpid_sched.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/include/mpid_thread.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_comm.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_init.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_progress.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_request.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_send.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_types.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_impl.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_probe.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_proc.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_recv.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_rma.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_spawn.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4_win.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_probe.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_rma.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_win.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_init.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_proc.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4i_comm.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_recvq.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_recv.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4i_util.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_symheap.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_buf.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/ch4r_request.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/mpidig_send.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/mpidig_recv.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/mpidig.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/netmod/include/netmod.h \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/netmod/include/netmod_impl.h
+ at BUILD_CH4_TRUE@am__append_83 = src/mpid/ch4/src/ch4_globals.c \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/mpid_ch4_net_array.c \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/mpid_ch4_shm_array.c \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/mpidig_globals.c \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/mpidig_init.c
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE at am__append_84 =
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE at am__append_85 = src/mpid/ch4/netmod/ofi/func_table.c \
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ofi/globals.c \
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ofi/util.c
+
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE at am__append_86 = src/mpid/ch4/netmod/ofi/errnames.txt
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE at am__append_87 = @ofisrcdir@
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE at am__append_88 = @ofilib@
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE at am__append_89 =
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE at am__append_90 = src/mpid/ch4/netmod/ucx/func_table.c\
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ucx/globals.c
+
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE at am__append_91 = src/mpid/ch4/netmod/ucx/errnames.txt
+ at BUILD_CH4_NETMOD_PORTALS4_TRUE@@BUILD_CH4_TRUE at am__append_92 = src/mpid/ch4/netmod/portals4/globals.c \
+ at BUILD_CH4_NETMOD_PORTALS4_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/portals4/func_table.c
+
+ at BUILD_CH4_NETMOD_PORTALS4_TRUE@@BUILD_CH4_TRUE at am__append_93 = src/mpid/ch4/netmod/portals4/errnames.txt
+ at BUILD_CH4_NETMOD_STUBNM_TRUE@@BUILD_CH4_TRUE at am__append_94 = src/mpid/ch4/netmod/stubnm/globals.c
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE at am__append_95 = -I$(top_srcdir)/src/mpid/ch4/shm/include
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE at am__append_96 = src/mpid/ch4/shm/include/shm.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/shm/include/shm_impl.h
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_STUBSHM_TRUE at am__append_97 = src/mpid/ch4/shm/stubshm/globals.c \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_STUBSHM_TRUE@ src/mpid/ch4/shm/stubshm/func_table.c
+
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE at am__append_98 = src/mpid/ch4/shm/posix/posix_am.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_coll.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_datatypes.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/shm_direct.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_init.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_progress.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_recv.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_rma.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_spawn.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_win.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_comm.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_defs.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_impl.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_probe.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_queue.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_request.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_send.h \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/posix_unimpl.h
+
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE at am__append_99 = src/mpid/ch4/shm/posix/globals.c \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/func_table.c \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/barrier.c
+
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@am__append_100 = src/mpid/common/datatype/dataloop/darray_support.c \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/dataloop.c \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/dataloop_create.c \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/dataloop_create_blockindexed.c \
@@ -2530,138 +1877,114 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/segment_flatten.c \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/segment_packunpack.c \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/subarray_support.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_contents_support.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_datatype_contents.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_datatype_free.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_ext32_datatype.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_ext32_segment.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_segment.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_blockindexed.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_commit.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_contiguous.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_create_pairtype.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_create_resized.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_debug.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_dup.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_get_contents.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_get_envelope.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_indexed.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_struct.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_vector.c \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_type_zerolen.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_contents_support.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_datatype_contents.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_datatype_free.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_ext32_datatype.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_ext32_segment.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_segment.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_blockindexed.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_commit.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_contiguous.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_create_pairtype.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_create_resized.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_debug.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_dup.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_get_contents.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_get_envelope.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_indexed.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_struct.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_vector.c \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_type_zerolen.c \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpir_type_flatten.c
# several headers are included by the rest of MPICH
# there are no AC_OUTPUT_FILES headers, so builddir is unnecessary
- at BUILD_MPID_COMMON_DATATYPE_TRUE@am__append_86 = -I$(top_srcdir)/src/mpid/common/datatype \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@am__append_101 = -I$(top_srcdir)/src/mpid/common/datatype \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ -I$(top_srcdir)/src/mpid/common/datatype
- at BUILD_MPID_COMMON_DATATYPE_TRUE@am__append_87 = src/mpid/common/datatype/dataloop/dataloop.h \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@am__append_102 = src/mpid/common/datatype/dataloop/dataloop.h \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/dataloop_parts.h \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/dataloop_create.h \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/typesize_support.h \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/veccpy.h \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_dataloop.h \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_datatype.h \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_ext32_segment.h \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/segment_states.h
- at BUILD_MPID_COMMON_SCHED_TRUE@am__append_88 = \
- at BUILD_MPID_COMMON_SCHED_TRUE@ src/mpid/common/sched/mpid_sched.c
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_dataloop.h \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_datatype.h \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpidu_ext32_segment.h \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/segment_states.h \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/mpid_datatype_fallback.h
+ at BUILD_MPID_COMMON_SCHED_TRUE@am__append_103 = \
+ at BUILD_MPID_COMMON_SCHED_TRUE@ src/mpid/common/sched/mpidu_sched.c
# so that the the device (e.g., ch3) can successfully include mpid_sched_pre.h
# There are no AC_OUTPUT_FILES, so the builddir path does not need to be added.
- at BUILD_MPID_COMMON_SCHED_TRUE@am__append_89 = -I$(top_srcdir)/src/mpid/common/sched
- at BUILD_MPID_COMMON_SCHED_TRUE@am__append_90 = \
- at BUILD_MPID_COMMON_SCHED_TRUE@ src/mpid/common/sched/mpid_sched.h \
- at BUILD_MPID_COMMON_SCHED_TRUE@ src/mpid/common/sched/mpid_sched_pre.h
-
-
-# FIXME is top_builddir the right way to handle VPATH builds?
- at BUILD_MPID_COMMON_SOCK_TRUE@am__append_91 = \
- at BUILD_MPID_COMMON_SOCK_TRUE@ -I${top_srcdir}/src/mpid/common/sock \
- at BUILD_MPID_COMMON_SOCK_TRUE@ -I${top_builddir}/src/mpid/common/sock
-
- at BUILD_MPID_COMMON_SOCK_TRUE@am__append_92 = src/mpid/common/sock/mpidu_sock.h
- at BUILD_MPID_COMMON_SOCK_TRUE@am__append_93 = src/mpid/common/sock/poll/errnames.txt
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE at am__append_94 = \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/sock.c
-
-
-# FIXME these ".i" files are awful and should be fixed somehow. They are
-# cobbled together via "#include" into sock.c. They are not idempotent ".h"
-# files, but rather a giant ".c" file that has been split into several files
-# that should be compiled only once, and only together.
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE at am__append_95 = \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/sock_init.i \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/sock_set.i \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/sock_post.i \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/sock_immed.i \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/sock_misc.i \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/sock_wait.i \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/socki_util.i \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ src/mpid/common/sock/poll/mpidu_socki.h
-
-
-# FIXME is top_builddir the right way to handle VPATH builds?
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE at am__append_96 = \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ -I${top_srcdir}/src/mpid/common/sock/poll \
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE@ -I${top_builddir}/src/mpid/common/sock/poll
+ at BUILD_MPID_COMMON_SCHED_TRUE@am__append_104 = -I$(top_srcdir)/src/mpid/common/sched
+ at BUILD_MPID_COMMON_SCHED_TRUE@am__append_105 = \
+ at BUILD_MPID_COMMON_SCHED_TRUE@ src/mpid/common/sched/mpidu_sched.h
# so that clients can successfully include mpid_thread.h
- at BUILD_MPID_COMMON_THREAD_TRUE@am__append_97 = -I$(top_srcdir)/src/mpid/common/thread
- at BUILD_MPID_COMMON_THREAD_TRUE@am__append_98 = src/mpid/common/thread/mpidu_thread_fallback.h
- at BUILD_HCOLL_TRUE@am__append_99 = \
+ at BUILD_MPID_COMMON_THREAD_TRUE@am__append_106 = -I$(top_srcdir)/src/mpid/common/thread
+ at BUILD_MPID_COMMON_THREAD_TRUE@am__append_107 = src/mpid/common/thread/mpidu_thread_fallback.h
+ at BUILD_HCOLL_TRUE@am__append_108 = \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/hcoll_init.c \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/hcoll_ops.c \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/hcoll_rte.c
- at BUILD_HCOLL_TRUE@am__append_100 = \
+ at BUILD_HCOLL_TRUE@am__append_109 = \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/hcoll.h \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/hcoll_dtypes.h
- at BUILD_NAMEPUB_FILE_TRUE@am__append_101 = \
+ at BUILD_MPID_COMMON_SHM_TRUE@am__append_110 = \
+ at BUILD_MPID_COMMON_SHM_TRUE@ src/mpid/common/shm/mpidu_shm_alloc.c \
+ at BUILD_MPID_COMMON_SHM_TRUE@ src/mpid/common/shm/mpidu_shm_barrier.c
+
+
+# there are no AC_OUTPUT_FILES headers, so builddir is unnecessary
+ at BUILD_MPID_COMMON_SHM_TRUE@am__append_111 = -I$(top_srcdir)/src/mpid/common/shm
+ at BUILD_MPID_COMMON_SHM_TRUE@am__append_112 = \
+ at BUILD_MPID_COMMON_SHM_TRUE@ src/mpid/common/shm/mpidu_generic_queue.h \
+ at BUILD_MPID_COMMON_SHM_TRUE@ src/mpid/common/shm/mpidu_shm_impl.h \
+ at BUILD_MPID_COMMON_SHM_TRUE@ src/mpid/common/shm/mpidu_shm.h
+
+ at BUILD_NAMEPUB_FILE_TRUE@am__append_113 = \
@BUILD_NAMEPUB_FILE_TRUE@ src/nameserv/file/file_nameserv.c
- at BUILD_NAMEPUB_PMI_TRUE@am__append_102 = \
+ at BUILD_NAMEPUB_PMI_TRUE@am__append_114 = \
@BUILD_NAMEPUB_PMI_TRUE@ src/nameserv/pmi/pmi_nameserv.c
- at BUILD_PM_UTIL_TRUE@am__append_103 = src/pm/util/libmpiexec.a
- at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at am__append_104 = src/pm/gforker/mpiexec
- at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at am__append_105 = src/pm/gforker/mpiexec.gforker
- at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at am__append_106 = src/pm/remshell/mpiexec
- at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at am__append_107 = src/pm/remshell/mpiexec.remshell
+ at BUILD_PM_UTIL_TRUE@am__append_115 = src/pm/util/libmpiexec.la
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at am__append_116 = src/pm/gforker/mpiexec
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at am__append_117 = src/pm/gforker/mpiexec.gforker
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at am__append_118 = src/pm/remshell/mpiexec
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at am__append_119 = src/pm/remshell/mpiexec.remshell
# util comes first, sets some variables that may be used by each process
# manager's Makefile.mk
# has its own full automake setup, not Makefile.mk
- at BUILD_PM_HYDRA_TRUE@am__append_108 = src/pm/hydra
- at BUILD_PM_HYDRA_TRUE@am__append_109 = src/pm/hydra
- at BUILD_PM_HYDRA_TRUE@am__append_110 = src/pm/hydra
- at BUILD_PMI_PMI2_POE_TRUE@am__append_111 = \
- at BUILD_PMI_PMI2_POE_TRUE@ src/pmi/pmi2/poe/poe2pmi.c
-
- at BUILD_PMI_PMI2_POE_TRUE@am__append_112 = -I$(top_srcdir)/src/pmi/pmi2/poe
- at BUILD_PMI_PMI2_SIMPLE_TRUE@am__append_113 = \
+ at BUILD_PM_HYDRA_TRUE@am__append_120 = src/pm/hydra
+ at BUILD_PM_HYDRA_TRUE@am__append_121 = src/pm/hydra
+ at BUILD_PM_HYDRA_TRUE@am__append_122 = src/pm/hydra
+ at BUILD_PMI_PMI2_SIMPLE_TRUE@am__append_123 = \
@BUILD_PMI_PMI2_SIMPLE_TRUE@ src/pmi/pmi2/simple/simple2pmi.c \
@BUILD_PMI_PMI2_SIMPLE_TRUE@ src/pmi/pmi2/simple/simple_pmiutil.c
- at BUILD_PMI_PMI2_SIMPLE_TRUE@am__append_114 = \
+ at BUILD_PMI_PMI2_SIMPLE_TRUE@am__append_124 = \
@BUILD_PMI_PMI2_SIMPLE_TRUE@ src/pmi/pmi2/simple/simple_pmiutil.h \
@BUILD_PMI_PMI2_SIMPLE_TRUE@ src/pmi/pmi2/simple/simple2pmi.h \
@BUILD_PMI_PMI2_SIMPLE_TRUE@ src/pmi/pmi2/simple/pmi2compat.h
- at BUILD_PMI_PMI2_SIMPLE_TRUE@am__append_115 = -I$(top_srcdir)/src/pmi/pmi2/simple
- at BUILD_PMI_SIMPLE_TRUE@am__append_116 = \
+ at BUILD_PMI_PMI2_SIMPLE_TRUE@am__append_125 = -I$(top_srcdir)/src/pmi/pmi2/simple
+ at BUILD_PMI_SIMPLE_TRUE@am__append_126 = \
@BUILD_PMI_SIMPLE_TRUE@ src/pmi/simple/simple_pmiutil.c \
@BUILD_PMI_SIMPLE_TRUE@ src/pmi/simple/simple_pmi.c
- at BUILD_PMI_SIMPLE_TRUE@am__append_117 = \
+ at BUILD_PMI_SIMPLE_TRUE@am__append_127 = \
@BUILD_PMI_SIMPLE_TRUE@ src/pmi/simple/simple_pmiutil.h
- at BUILD_PMI_SIMPLE_TRUE@am__append_118 = -I$(top_srcdir)/src/pmi/simple
+ at BUILD_PMI_SIMPLE_TRUE@am__append_128 = -I$(top_srcdir)/src/pmi/simple
# include our subdir automake fragments
@@ -2671,20 +1994,21 @@ bin_PROGRAMS = $(am__EXEEXT_1) src/env/mpichversion$(EXEEXT) \
# lib at MPILIBNAME@.la might depend on lib at PMPILIBNAME@.la. We add them
# in that order to lib_LTLIBRARIES so libtool doesn't get
# confused. (see https://bugzilla.redhat.com/show_bug.cgi?id=91110)
- at BUILD_PROFILING_LIB_TRUE@am__append_119 = lib/lib at PMPILIBNAME@.la \
+ at BUILD_PROFILING_LIB_TRUE@am__append_129 = lib/lib at PMPILIBNAME@.la \
@BUILD_PROFILING_LIB_TRUE@ lib/lib at MPILIBNAME@.la
- at BUILD_PROFILING_LIB_FALSE@am__append_120 = lib/lib at MPILIBNAME@.la
- at BUILD_F77_BINDING_TRUE@am__append_121 = lib/lib at MPIFCLIBNAME@.la
- at BUILD_F77_BINDING_TRUE@@BUILD_PROFILING_LIB_TRUE at am__append_122 = -DMPICH_MPI_FROM_PMPI -DUSE_ONLY_MPI_NAMES
- at BUILD_F77_BINDING_TRUE@@BUILD_FC_BINDING_TRUE at am__append_123 = $(mpi_fc_sources)
- at BUILD_CXX_BINDING_TRUE@am__append_124 = lib/lib at MPICXXLIBNAME@.la
- at BUILD_COVERAGE_TRUE@am__append_125 = coverage-clean
+ at BUILD_PROFILING_LIB_FALSE@am__append_130 = lib/lib at MPILIBNAME@.la
+ at BUILD_F77_BINDING_TRUE@am__append_131 = lib/lib at MPIFCLIBNAME@.la
+ at BUILD_F77_BINDING_TRUE@@BUILD_PROFILING_LIB_TRUE at am__append_132 = -DMPICH_MPI_FROM_PMPI -DUSE_ONLY_MPI_NAMES
+ at BUILD_F77_BINDING_TRUE@@BUILD_FC_BINDING_TRUE at am__append_133 = $(mpi_fc_sources)
+ at BUILD_CXX_BINDING_TRUE@am__append_134 = lib/lib at MPICXXLIBNAME@.la
+ at BUILD_COVERAGE_TRUE@am__append_135 = coverage-clean
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_bugfix.m4 \
$(top_srcdir)/confdb/aclocal_cache.m4 \
$(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_check_visibility.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
$(top_srcdir)/confdb/aclocal_cxx.m4 \
$(top_srcdir)/confdb/aclocal_f77.m4 \
@@ -2697,55 +2021,64 @@ am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_shm.m4 \
$(top_srcdir)/confdb/aclocal_subcfg.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
- $(top_srcdir)/confdb/ax_tls.m4 $(top_srcdir)/confdb/libtool.m4 \
+ $(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
$(top_srcdir)/confdb/ltsugar.m4 \
$(top_srcdir)/confdb/ltversion.m4 \
$(top_srcdir)/confdb/lt~obsolete.m4 \
+ $(top_srcdir)/confdb/random_r.m4 \
+ $(top_srcdir)/confdb/stdlib_h.m4 \
$(top_srcdir)/maint/version.m4 $(top_srcdir)/subsys_include.m4 \
- $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
$(top_srcdir)/src/binding/fortran/use_mpi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
$(top_srcdir)/src/pm/subconfigure.m4 \
$(top_srcdir)/src/pm/gforker/subconfigure.m4 \
- $(top_srcdir)/src/pmi/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
$(top_srcdir)/src/pmi/slurm/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/poe/subconfigure.m4 \
- $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
- $(top_srcdir)/src/mpid/pamid/subconfigure.m4 \
- $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/poll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/stubshm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/posix/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/shm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/portals4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/stubnm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ucx/subconfigure.m4 \
+ $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
$(top_srcdir)/src/pm/util/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(dist_noinst_SCRIPTS) \
- $(am__dist_noinst_DATA_DIST) $(am__include_HEADERS_DIST) \
+ $(am__dist_noinst_DATA_DIST) $(include_HEADERS) \
$(am__modinc_HEADERS_DIST) $(am__noinst_HEADERS_DIST) \
$(am__DIST_COMMON)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/src/include/mpichconf.h
-CONFIG_CLEAN_FILES = src/binding/fortran/use_mpi/mpif90model.h \
- src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h \
+CONFIG_CLEAN_FILES = src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h \
src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c \
- src/include/mpichinfo.h mpich-doxygen src/include/glue_romio.h \
+ src/binding/fortran/use_mpi/mpif90model.h \
+ src/mpid/ch4/src/mpid_ch4_net_array.c \
+ src/mpid/ch4/src/mpid_ch4_shm_array.c \
+ src/mpid/ch4/include/netmodpre.h src/mpid/ch4/include/shmpre.h \
+ src/include/mpichinfo.h mpich-doxygen src/include/mpir_ext.h \
src/binding/cxx/mpicxx.h src/binding/fortran/mpif_h/mpif.h \
src/binding/fortran/mpif_h/setbotf.f \
src/binding/fortran/mpif_h/setbot.c \
@@ -2759,40 +2092,11 @@ CONFIG_CLEAN_FILES = src/binding/fortran/use_mpi/mpif90model.h \
src/env/mpicc.sh src/env/mpicc.bash src/env/mpicxx.sh \
src/env/mpicxx.bash src/env/mpif77.sh src/env/mpif77.bash \
src/env/mpifort.sh src/env/mpifort.bash src/env/parkill \
- src/util/dbg/getfuncstack src/util/timers/mpiu_timer.h \
src/include/mpi.h doc/design/Makefile \
doc/installguide/Makefile doc/logging/Makefile \
doc/refman/Makefile doc/userguide/Makefile
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
-ARFLAGS = cru
-AM_V_AR = $(am__v_AR_ at AM_V@)
-am__v_AR_ = $(am__v_AR_ at AM_DEFAULT_V@)
-am__v_AR_0 = @echo " AR " $@;
-am__v_AR_1 =
-src_pm_util_libmpiexec_a_AR = $(AR) $(ARFLAGS)
-src_pm_util_libmpiexec_a_LIBADD =
-am__src_pm_util_libmpiexec_a_SOURCES_DIST = src/pm/util/cmnargs.c \
- src/pm/util/process.c src/pm/util/ioloop.c \
- src/pm/util/pmiserv.c src/pm/util/labelout.c src/pm/util/env.c \
- src/pm/util/newsession.c src/pm/util/rm.c \
- src/pm/util/pmiport.c src/pm/util/dbgiface.c \
- src/pm/util/safestr2.c src/pm/util/simple_pmiutil2.c
-am__dirstamp = $(am__leading_dot)dirstamp
- at BUILD_PM_UTIL_TRUE@am_src_pm_util_libmpiexec_a_OBJECTS = src/pm/util/src_pm_util_libmpiexec_a-cmnargs.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-process.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-ioloop.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-pmiserv.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-labelout.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-env.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-newsession.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-rm.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-pmiport.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-dbgiface.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-safestr2.$(OBJEXT) \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.$(OBJEXT)
-src_pm_util_libmpiexec_a_OBJECTS = \
- $(am_src_pm_util_libmpiexec_a_OBJECTS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -2829,6 +2133,7 @@ LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
@BUILD_CXX_BINDING_TRUE@ lib/lib at MPILIBNAME@.la
am__lib_lib at MPICXXLIBNAME@_la_SOURCES_DIST = \
src/binding/cxx/initcxx.cxx
+am__dirstamp = $(am__leading_dot)dirstamp
@BUILD_CXX_BINDING_TRUE at am__objects_1 = src/binding/cxx/initcxx.lo
am__objects_2 = $(am__objects_1)
@BUILD_CXX_BINDING_TRUE at am_lib_lib@MPICXXLIBNAME at _la_OBJECTS = \
@@ -5292,7 +4597,8 @@ lib_lib at MPIFCLIBNAME@_la_OBJECTS = \
@BUILD_F77_BINDING_TRUE at am_lib_lib@MPIFCLIBNAME at _la_rpath = -rpath \
@BUILD_F77_BINDING_TRUE@ $(libdir)
am__DEPENDENCIES_1 =
-am__DEPENDENCIES_2 = $(am__append_3) $(am__append_12) $(am__append_16)
+am__DEPENDENCIES_2 = $(am__append_3) $(am__append_12) $(am__append_16) \
+ $(am__DEPENDENCIES_1)
@BUILD_PROFILING_LIB_FALSE at lib_lib@MPILIBNAME at _la_DEPENDENCIES = \
@BUILD_PROFILING_LIB_FALSE@ $(am__DEPENDENCIES_1) \
@BUILD_PROFILING_LIB_FALSE@ $(am__DEPENDENCIES_2) \
@@ -5525,18 +4831,9 @@ am__lib_lib at MPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpi/init/async.c src/mpi/pt2pt/bsendutil.c \
src/mpi/pt2pt/mpir_request.c src/mpi/rma/winutil.c \
src/mpi/rma/rmatypeutil.c src/mpi/topo/topoutil.c \
- src/util/dbg/dbg_printf.c src/util/dbg/timelimit.c \
- src/util/instrm/instr.c src/util/mem/trmem.c \
- src/util/mem/handlemem.c src/util/mem/safestr.c \
- src/util/mem/argstr.c src/util/mem/strerror.c \
- src/util/other/outliers.c src/util/other/assert.c \
- src/util/cvar/mpich_cvars.c src/util/procmap/local_proc.c \
- src/util/thread/mpiu_thread.c \
- src/util/thread/mpiu_thread_win.c \
- src/util/thread/mpiu_thread_solaris.c \
- src/util/thread/mpiu_thread_posix.c \
- src/util/timers/mpiu_timer.c \
- src/binding/fortran/mpif_h/fdebug.c \
+ src/util/mem/handlemem.c src/util/mem/strerror.c \
+ src/util/cvar/mpir_cvars.c src/util/procmap/local_proc.c \
+ src/util/assert/assert.c src/binding/fortran/mpif_h/fdebug.c \
src/binding/fortran/mpif_h/setbot.c \
src/binding/fortran/mpif_h/setbotf.f \
src/binding/fortran/use_mpi/create_f90_util.c \
@@ -5597,9 +4894,7 @@ am__lib_lib at MPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c \
src/mpid/ch3/channels/nemesis/src/ch3i_comm.c \
src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c \
- src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c \
- src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c \
@@ -5650,6 +4945,7 @@ am__lib_lib at MPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/ch3/channels/nemesis/netmod/llc/llc_cancel.c \
src/mpid/ch3/channels/nemesis/utils/monitor/papi_defs.c \
src/mpid/ch3/channels/nemesis/utils/replacements/mkstemp.c \
+ src/mpid/ch3/channels/sock/src/sock.c \
src/mpid/ch3/channels/sock/src/ch3_finalize.c \
src/mpid/ch3/channels/sock/src/ch3_init.c \
src/mpid/ch3/channels/sock/src/ch3_isend.c \
@@ -5658,113 +4954,24 @@ am__lib_lib at MPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/ch3/channels/sock/src/ch3_istartmsgv.c \
src/mpid/ch3/channels/sock/src/ch3_progress.c \
src/mpid/ch3/channels/sock/src/ch3_win_fns.c \
- src/mpid/pamid/src/coll/barrier/mpido_barrier.c \
- src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c \
- src/mpid/pamid/src/coll/bcast/mpido_bcast.c \
- src/mpid/pamid/src/coll/bcast/mpido_ibcast.c \
- src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c \
- src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c \
- src/mpid/pamid/src/coll/allgather/mpido_allgather.c \
- src/mpid/pamid/src/coll/allgather/mpido_iallgather.c \
- src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c \
- src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c \
- src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c \
- src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c \
- src/mpid/pamid/src/coll/scatter/mpido_scatter.c \
- src/mpid/pamid/src/coll/scatter/mpido_iscatter.c \
- src/mpid/pamid/src/coll/gather/mpido_gather.c \
- src/mpid/pamid/src/coll/gather/mpido_igather.c \
- src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c \
- src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c \
- src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c \
- src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c \
- src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c \
- src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c \
- src/mpid/pamid/src/coll/scan/mpido_scan.c \
- src/mpid/pamid/src/coll/reduce/mpido_reduce.c \
- src/mpid/pamid/src/coll/reduce/mpido_ireduce.c \
- src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c \
- src/mpid/pamid/src/coll/exscan/mpido_iexscan.c \
- src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c \
- src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c \
- src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c \
- src/mpid/pamid/src/coll/coll_utils.c \
- src/mpid/pamid/src/comm/mpid_comm.c \
- src/mpid/pamid/src/comm/mpid_selectcolls.c \
- src/mpid/pamid/src/comm/mpid_optcolls.c \
- src/mpid/pamid/src/misc/mpid_abort.c \
- src/mpid/pamid/src/misc/mpid_get_universe_size.c \
- src/mpid/pamid/src/misc/mpid_getpname.c \
- src/mpid/pamid/src/misc/mpid_mem.c \
- src/mpid/pamid/src/misc/mpid_unimpl.c \
- src/mpid/pamid/src/mpix/mpix.c \
- src/mpid/pamid/src/onesided/mpid_1s.c \
- src/mpid/pamid/src/onesided/mpid_win_accumulate.c \
- src/mpid/pamid/src/onesided/mpid_win_create.c \
- src/mpid/pamid/src/onesided/mpid_win_fence.c \
- src/mpid/pamid/src/onesided/mpid_win_free.c \
- src/mpid/pamid/src/onesided/mpid_win_get.c \
- src/mpid/pamid/src/onesided/mpid_win_lock.c \
- src/mpid/pamid/src/onesided/mpid_win_lock_all.c \
- src/mpid/pamid/src/onesided/mpid_win_pscw.c \
- src/mpid/pamid/src/onesided/mpid_win_put.c \
- src/mpid/pamid/src/onesided/mpid_win_shared_query.c \
- src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c \
- src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c \
- src/mpid/pamid/src/onesided/mpid_win_flush.c \
- src/mpid/pamid/src/onesided/mpid_win_allocate.c \
- src/mpid/pamid/src/onesided/mpid_win_sync.c \
- src/mpid/pamid/src/onesided/mpid_win_attach.c \
- src/mpid/pamid/src/onesided/mpid_win_detach.c \
- src/mpid/pamid/src/onesided/mpid_win_get_info.c \
- src/mpid/pamid/src/onesided/mpid_win_set_info.c \
- src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c \
- src/mpid/pamid/src/onesided/mpid_win_reqops.c \
- src/mpid/pamid/src/onesided/mpidi_win_control.c \
- src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c \
- src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c \
- src/mpid/pamid/src/pamix/pamix.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c \
- src/mpid/pamid/src/pt2pt/mpid_cancel.c \
- src/mpid/pamid/src/pt2pt/mpid_issend.c \
- src/mpid/pamid/src/pt2pt/mpid_recv.c \
- src/mpid/pamid/src/pt2pt/mpid_ssend.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_short.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_util.c \
- src/mpid/pamid/src/pt2pt/mpidi_control.c \
- src/mpid/pamid/src/pt2pt/mpidi_done.c \
- src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c \
- src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c \
- src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c \
- src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c \
- src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c \
- src/mpid/pamid/src/dyntask/mpid_port.c \
- src/mpid/pamid/src/dyntask/mpidi_pg.c \
- src/mpid/pamid/src/dyntask/mpidi_port.c \
- src/mpid/pamid/src/mpid_buffer.c \
- src/mpid/pamid/src/mpidi_bufmm.c \
- src/mpid/pamid/src/mpid_finalize.c \
- src/mpid/pamid/src/mpid_init.c \
- src/mpid/pamid/src/mpid_iprobe.c \
- src/mpid/pamid/src/mpid_probe.c \
- src/mpid/pamid/src/mpid_progress.c \
- src/mpid/pamid/src/mpid_recvq.c \
- src/mpid/pamid/src/mpid_request.c \
- src/mpid/pamid/src/mpid_time.c src/mpid/pamid/src/mpid_vc.c \
- src/mpid/pamid/src/mpidi_env.c src/mpid/pamid/src/mpidi_util.c \
- src/mpid/pamid/src/mpidi_mutex.c \
- src/mpid/pamid/src/mpid_mrecv.c \
- src/mpid/pamid/src/mpid_mprobe.c \
- src/mpid/pamid/src/mpid_imrecv.c \
- src/mpid/pamid/src/mpid_improbe.c \
- src/mpid/pamid/src/mpid_aint.c \
- src/mpid/pamid/src/mpidi_nbc_sched.c \
- src/mpid/pamid/src/mpidi_pami_datatype.c \
- src/mpid/pamid/src/mpid_recvq_mmap.cpp \
+ src/mpid/ch4/src/ch4_globals.c \
+ src/mpid/ch4/src/mpid_ch4_net_array.c \
+ src/mpid/ch4/src/mpid_ch4_shm_array.c \
+ src/mpid/ch4/generic/mpidig_globals.c \
+ src/mpid/ch4/generic/mpidig_init.c \
+ src/mpid/ch4/netmod/ofi/func_table.c \
+ src/mpid/ch4/netmod/ofi/globals.c \
+ src/mpid/ch4/netmod/ofi/util.c \
+ src/mpid/ch4/netmod/ucx/func_table.c \
+ src/mpid/ch4/netmod/ucx/globals.c \
+ src/mpid/ch4/netmod/portals4/globals.c \
+ src/mpid/ch4/netmod/portals4/func_table.c \
+ src/mpid/ch4/netmod/stubnm/globals.c \
+ src/mpid/ch4/shm/stubshm/globals.c \
+ src/mpid/ch4/shm/stubshm/func_table.c \
+ src/mpid/ch4/shm/posix/globals.c \
+ src/mpid/ch4/shm/posix/func_table.c \
+ src/mpid/ch4/shm/posix/barrier.c \
src/mpid/common/datatype/dataloop/darray_support.c \
src/mpid/common/datatype/dataloop/dataloop.c \
src/mpid/common/datatype/dataloop/dataloop_create.c \
@@ -5779,33 +4986,34 @@ am__lib_lib at MPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/common/datatype/dataloop/segment_flatten.c \
src/mpid/common/datatype/dataloop/segment_packunpack.c \
src/mpid/common/datatype/dataloop/subarray_support.c \
- src/mpid/common/datatype/mpid_contents_support.c \
- src/mpid/common/datatype/mpid_datatype_contents.c \
- src/mpid/common/datatype/mpid_datatype_free.c \
- src/mpid/common/datatype/mpid_ext32_datatype.c \
- src/mpid/common/datatype/mpid_ext32_segment.c \
- src/mpid/common/datatype/mpid_segment.c \
- src/mpid/common/datatype/mpid_type_blockindexed.c \
- src/mpid/common/datatype/mpid_type_commit.c \
- src/mpid/common/datatype/mpid_type_contiguous.c \
- src/mpid/common/datatype/mpid_type_create_pairtype.c \
- src/mpid/common/datatype/mpid_type_create_resized.c \
- src/mpid/common/datatype/mpid_type_debug.c \
- src/mpid/common/datatype/mpid_type_dup.c \
- src/mpid/common/datatype/mpid_type_get_contents.c \
- src/mpid/common/datatype/mpid_type_get_envelope.c \
- src/mpid/common/datatype/mpid_type_indexed.c \
- src/mpid/common/datatype/mpid_type_struct.c \
- src/mpid/common/datatype/mpid_type_vector.c \
- src/mpid/common/datatype/mpid_type_zerolen.c \
+ src/mpid/common/datatype/mpidu_contents_support.c \
+ src/mpid/common/datatype/mpidu_datatype_contents.c \
+ src/mpid/common/datatype/mpidu_datatype_free.c \
+ src/mpid/common/datatype/mpidu_ext32_datatype.c \
+ src/mpid/common/datatype/mpidu_ext32_segment.c \
+ src/mpid/common/datatype/mpidu_segment.c \
+ src/mpid/common/datatype/mpidu_type_blockindexed.c \
+ src/mpid/common/datatype/mpidu_type_commit.c \
+ src/mpid/common/datatype/mpidu_type_contiguous.c \
+ src/mpid/common/datatype/mpidu_type_create_pairtype.c \
+ src/mpid/common/datatype/mpidu_type_create_resized.c \
+ src/mpid/common/datatype/mpidu_type_debug.c \
+ src/mpid/common/datatype/mpidu_type_dup.c \
+ src/mpid/common/datatype/mpidu_type_get_contents.c \
+ src/mpid/common/datatype/mpidu_type_get_envelope.c \
+ src/mpid/common/datatype/mpidu_type_indexed.c \
+ src/mpid/common/datatype/mpidu_type_struct.c \
+ src/mpid/common/datatype/mpidu_type_vector.c \
+ src/mpid/common/datatype/mpidu_type_zerolen.c \
src/mpid/common/datatype/mpir_type_flatten.c \
- src/mpid/common/sched/mpid_sched.c \
- src/mpid/common/sock/poll/sock.c \
+ src/mpid/common/sched/mpidu_sched.c \
src/mpid/common/hcoll/hcoll_init.c \
src/mpid/common/hcoll/hcoll_ops.c \
- src/mpid/common/hcoll/hcoll_rte.c src/mpi_t/mpit.c \
+ src/mpid/common/hcoll/hcoll_rte.c \
+ src/mpid/common/shm/mpidu_shm_alloc.c \
+ src/mpid/common/shm/mpidu_shm_barrier.c src/mpi_t/mpit.c \
src/nameserv/file/file_nameserv.c \
- src/nameserv/pmi/pmi_nameserv.c src/pmi/pmi2/poe/poe2pmi.c \
+ src/nameserv/pmi/pmi_nameserv.c \
src/pmi/pmi2/simple/simple2pmi.c \
src/pmi/pmi2/simple/simple_pmiutil.c \
src/pmi/simple/simple_pmiutil.c src/pmi/simple/simple_pmi.c
@@ -6236,9 +5444,7 @@ am__objects_11 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attr_delete.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-ch3_win_fns.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-ch3i_comm.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-ch3i_eagernoncontig.lo \
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_init.lo \
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_ckpt.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_finalize.lo \
@@ -6289,7 +5495,8 @@ am__objects_11 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attr_delete.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE@ src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at MPILIBNAME@_la-llc_cancel.lo
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE at am__objects_24 = src/mpid/ch3/channels/nemesis/utils/monitor/lib_lib at MPILIBNAME@_la-papi_defs.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/utils/replacements/lib_lib at MPILIBNAME@_la-mkstemp.lo
- at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__objects_25 = src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_finalize.lo \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__objects_25 = src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-sock.lo \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_finalize.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_init.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_isend.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_isendv.lo \
@@ -6297,116 +5504,25 @@ am__objects_11 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attr_delete.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_istartmsgv.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_progress.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_win_fns.lo
- at BUILD_PAMID_TRUE@am__objects_26 = src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_barrier.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_ibarrier.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_bcast.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_ibcast.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_allreduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_iallreduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_allgather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_iallgather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_allgatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_scatterv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_iscatterv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_scatter.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_iscatter.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_gather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_igather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_alltoall.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_ialltoall.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_alltoallv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_gatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_igatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scan/lib_lib at MPILIBNAME@_la-mpido_scan.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_reduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_ireduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallw/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/exscan/lib_lib at MPILIBNAME@_la-mpido_iexscan.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/ired_scat_block/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/ired_scat/lib_lib at MPILIBNAME@_la-mpido_ired_scat.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/red_scat/lib_lib at MPILIBNAME@_la-mpido_red_scat.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/lib_lib at MPILIBNAME@_la-coll_utils.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_comm.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_selectcolls.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_optcolls.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_abort.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_getpname.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_mem.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_unimpl.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpix/lib_lib at MPILIBNAME@_la-mpix.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_1s.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fence.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_free.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_pscw.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_put.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_flush.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_sync.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_attach.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_detach.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_info.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_set_info.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_reqops.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpidi_win_control.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pamix/lib_lib at MPILIBNAME@_la-pamix.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_recv_init.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_send_init.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_startall.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_cancel.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_issend.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_recv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_ssend.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_short.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_util.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_control.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_done.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_port.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_pg.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_port.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_buffer.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_bufmm.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_finalize.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_init.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_iprobe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_probe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_progress.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_request.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_time.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_vc.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_env.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_util.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_mutex.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mrecv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mprobe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_imrecv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_improbe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_aint.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.lo
- at BUILD_PAMID_TRUE@@QUEUE_BINARY_SEARCH_SUPPORT_TRUE at am__objects_27 = src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.lo
- at BUILD_MPID_COMMON_DATATYPE_TRUE@am__objects_28 = src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-darray_support.lo \
+ at BUILD_CH4_TRUE@am__objects_26 = src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-ch4_globals.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_globals.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_init.lo
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE at am__objects_27 = src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-func_table.lo \
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-util.lo
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE at am__objects_28 = src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-func_table.lo \
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-globals.lo
+ at BUILD_CH4_NETMOD_PORTALS4_TRUE@@BUILD_CH4_TRUE at am__objects_29 = src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_NETMOD_PORTALS4_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-func_table.lo
+ at BUILD_CH4_NETMOD_STUBNM_TRUE@@BUILD_CH4_TRUE at am__objects_30 = src/mpid/ch4/netmod/stubnm/lib_lib at MPILIBNAME@_la-globals.lo
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_STUBSHM_TRUE at am__objects_31 = src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_STUBSHM_TRUE@ src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-func_table.lo
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE at am__objects_32 = src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-func_table.lo \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-barrier.lo
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@am__objects_33 = src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-darray_support.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-dataloop.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-dataloop_create.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-dataloop_create_blockindexed.lo \
@@ -6420,39 +5536,39 @@ am__objects_11 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attr_delete.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-segment_flatten.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-segment_packunpack.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-subarray_support.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_contents_support.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_free.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_segment.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_commit.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_debug.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_dup.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_indexed.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_struct.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_vector.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_contents_support.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_segment.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_commit.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_debug.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_dup.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_struct.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_vector.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpir_type_flatten.lo
- at BUILD_MPID_COMMON_SCHED_TRUE@am__objects_29 = src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpid_sched.lo
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE at am__objects_30 = src/mpid/common/sock/poll/lib_lib at MPILIBNAME@_la-sock.lo
- at BUILD_HCOLL_TRUE@am__objects_31 = src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_init.lo \
+ at BUILD_MPID_COMMON_SCHED_TRUE@am__objects_34 = src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpidu_sched.lo
+ at BUILD_HCOLL_TRUE@am__objects_35 = src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_init.lo \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_ops.lo \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_rte.lo
- at BUILD_NAMEPUB_FILE_TRUE@am__objects_32 = src/nameserv/file/lib_lib at MPILIBNAME@_la-file_nameserv.lo
- at BUILD_NAMEPUB_PMI_TRUE@am__objects_33 = src/nameserv/pmi/lib_lib at MPILIBNAME@_la-pmi_nameserv.lo
- at BUILD_PMI_PMI2_POE_TRUE@am__objects_34 = src/pmi/pmi2/poe/lib_lib at MPILIBNAME@_la-poe2pmi.lo
- at BUILD_PMI_PMI2_SIMPLE_TRUE@am__objects_35 = src/pmi/pmi2/simple/lib_lib at MPILIBNAME@_la-simple2pmi.lo \
+ at BUILD_MPID_COMMON_SHM_TRUE@am__objects_36 = src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.lo \
+ at BUILD_MPID_COMMON_SHM_TRUE@ src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.lo
+ at BUILD_NAMEPUB_FILE_TRUE@am__objects_37 = src/nameserv/file/lib_lib at MPILIBNAME@_la-file_nameserv.lo
+ at BUILD_NAMEPUB_PMI_TRUE@am__objects_38 = src/nameserv/pmi/lib_lib at MPILIBNAME@_la-pmi_nameserv.lo
+ at BUILD_PMI_PMI2_SIMPLE_TRUE@am__objects_39 = src/pmi/pmi2/simple/lib_lib at MPILIBNAME@_la-simple2pmi.lo \
@BUILD_PMI_PMI2_SIMPLE_TRUE@ src/pmi/pmi2/simple/lib_lib at MPILIBNAME@_la-simple_pmiutil.lo
- at BUILD_PMI_SIMPLE_TRUE@am__objects_36 = src/pmi/simple/lib_lib at MPILIBNAME@_la-simple_pmiutil.lo \
+ at BUILD_PMI_SIMPLE_TRUE@am__objects_40 = src/pmi/simple/lib_lib at MPILIBNAME@_la-simple_pmiutil.lo \
@BUILD_PMI_SIMPLE_TRUE@ src/pmi/simple/lib_lib at MPILIBNAME@_la-simple_pmi.lo
-am__objects_37 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attrutil.lo \
+am__objects_41 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attrutil.lo \
src/mpi/attr/lib_lib at MPILIBNAME@_la-dup_fn.lo \
src/mpi/coll/lib_lib at MPILIBNAME@_la-allred_group.lo \
src/mpi/coll/lib_lib at MPILIBNAME@_la-barrier_group.lo \
@@ -6486,23 +5602,11 @@ am__objects_37 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attrutil.lo \
src/mpi/rma/lib_lib at MPILIBNAME@_la-winutil.lo \
src/mpi/rma/lib_lib at MPILIBNAME@_la-rmatypeutil.lo \
src/mpi/topo/lib_lib at MPILIBNAME@_la-topoutil.lo \
- src/util/dbg/lib_lib at MPILIBNAME@_la-dbg_printf.lo \
- src/util/dbg/lib_lib at MPILIBNAME@_la-timelimit.lo \
- src/util/instrm/lib_lib at MPILIBNAME@_la-instr.lo \
- src/util/mem/lib_lib at MPILIBNAME@_la-trmem.lo \
src/util/mem/lib_lib at MPILIBNAME@_la-handlemem.lo \
- src/util/mem/lib_lib at MPILIBNAME@_la-safestr.lo \
- src/util/mem/lib_lib at MPILIBNAME@_la-argstr.lo \
src/util/mem/lib_lib at MPILIBNAME@_la-strerror.lo \
- src/util/other/lib_lib at MPILIBNAME@_la-outliers.lo \
- src/util/other/lib_lib at MPILIBNAME@_la-assert.lo \
- src/util/cvar/lib_lib at MPILIBNAME@_la-mpich_cvars.lo \
+ src/util/cvar/lib_lib at MPILIBNAME@_la-mpir_cvars.lo \
src/util/procmap/lib_lib at MPILIBNAME@_la-local_proc.lo \
- src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread.lo \
- src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_win.lo \
- src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.lo \
- src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.lo \
- src/util/timers/lib_lib at MPILIBNAME@_la-mpiu_timer.lo \
+ src/util/assert/lib_lib at MPILIBNAME@_la-assert.lo \
$(am__objects_12) $(am__objects_13) \
src/glue/romio/lib_lib at MPILIBNAME@_la-glue_romio.lo \
$(am__objects_14) $(am__objects_15) $(am__objects_16) \
@@ -6511,11 +5615,12 @@ am__objects_37 = src/mpi/attr/lib_lib at MPILIBNAME@_la-attrutil.lo \
$(am__objects_23) $(am__objects_24) $(am__objects_25) \
$(am__objects_26) $(am__objects_27) $(am__objects_28) \
$(am__objects_29) $(am__objects_30) $(am__objects_31) \
- src/mpi_t/lib_lib at MPILIBNAME@_la-mpit.lo $(am__objects_32) \
- $(am__objects_33) $(am__objects_34) $(am__objects_35) \
- $(am__objects_36)
+ $(am__objects_32) $(am__objects_33) $(am__objects_34) \
+ $(am__objects_35) $(am__objects_36) \
+ src/mpi_t/lib_lib at MPILIBNAME@_la-mpit.lo $(am__objects_37) \
+ $(am__objects_38) $(am__objects_39) $(am__objects_40)
@BUILD_PROFILING_LIB_FALSE at am_lib_lib@MPILIBNAME at _la_OBJECTS = \
- at BUILD_PROFILING_LIB_FALSE@ $(am__objects_11) $(am__objects_37)
+ at BUILD_PROFILING_LIB_FALSE@ $(am__objects_11) $(am__objects_41)
@BUILD_PROFILING_LIB_TRUE at am_lib_lib@MPILIBNAME at _la_OBJECTS = \
@BUILD_PROFILING_LIB_TRUE@ $(am__objects_11)
lib_lib at MPILIBNAME@_la_OBJECTS = $(am_lib_lib at MPILIBNAME@_la_OBJECTS)
@@ -7129,18 +6234,9 @@ am__lib_lib at PMPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpi/init/async.c src/mpi/pt2pt/bsendutil.c \
src/mpi/pt2pt/mpir_request.c src/mpi/rma/winutil.c \
src/mpi/rma/rmatypeutil.c src/mpi/topo/topoutil.c \
- src/util/dbg/dbg_printf.c src/util/dbg/timelimit.c \
- src/util/instrm/instr.c src/util/mem/trmem.c \
- src/util/mem/handlemem.c src/util/mem/safestr.c \
- src/util/mem/argstr.c src/util/mem/strerror.c \
- src/util/other/outliers.c src/util/other/assert.c \
- src/util/cvar/mpich_cvars.c src/util/procmap/local_proc.c \
- src/util/thread/mpiu_thread.c \
- src/util/thread/mpiu_thread_win.c \
- src/util/thread/mpiu_thread_solaris.c \
- src/util/thread/mpiu_thread_posix.c \
- src/util/timers/mpiu_timer.c \
- src/binding/fortran/mpif_h/fdebug.c \
+ src/util/mem/handlemem.c src/util/mem/strerror.c \
+ src/util/cvar/mpir_cvars.c src/util/procmap/local_proc.c \
+ src/util/assert/assert.c src/binding/fortran/mpif_h/fdebug.c \
src/binding/fortran/mpif_h/setbot.c \
src/binding/fortran/mpif_h/setbotf.f \
src/binding/fortran/use_mpi/create_f90_util.c \
@@ -7201,9 +6297,7 @@ am__lib_lib at PMPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c \
src/mpid/ch3/channels/nemesis/src/ch3i_comm.c \
src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c \
- src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c \
- src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c \
@@ -7254,6 +6348,7 @@ am__lib_lib at PMPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/ch3/channels/nemesis/netmod/llc/llc_cancel.c \
src/mpid/ch3/channels/nemesis/utils/monitor/papi_defs.c \
src/mpid/ch3/channels/nemesis/utils/replacements/mkstemp.c \
+ src/mpid/ch3/channels/sock/src/sock.c \
src/mpid/ch3/channels/sock/src/ch3_finalize.c \
src/mpid/ch3/channels/sock/src/ch3_init.c \
src/mpid/ch3/channels/sock/src/ch3_isend.c \
@@ -7262,113 +6357,24 @@ am__lib_lib at PMPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/ch3/channels/sock/src/ch3_istartmsgv.c \
src/mpid/ch3/channels/sock/src/ch3_progress.c \
src/mpid/ch3/channels/sock/src/ch3_win_fns.c \
- src/mpid/pamid/src/coll/barrier/mpido_barrier.c \
- src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c \
- src/mpid/pamid/src/coll/bcast/mpido_bcast.c \
- src/mpid/pamid/src/coll/bcast/mpido_ibcast.c \
- src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c \
- src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c \
- src/mpid/pamid/src/coll/allgather/mpido_allgather.c \
- src/mpid/pamid/src/coll/allgather/mpido_iallgather.c \
- src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c \
- src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c \
- src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c \
- src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c \
- src/mpid/pamid/src/coll/scatter/mpido_scatter.c \
- src/mpid/pamid/src/coll/scatter/mpido_iscatter.c \
- src/mpid/pamid/src/coll/gather/mpido_gather.c \
- src/mpid/pamid/src/coll/gather/mpido_igather.c \
- src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c \
- src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c \
- src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c \
- src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c \
- src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c \
- src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c \
- src/mpid/pamid/src/coll/scan/mpido_scan.c \
- src/mpid/pamid/src/coll/reduce/mpido_reduce.c \
- src/mpid/pamid/src/coll/reduce/mpido_ireduce.c \
- src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c \
- src/mpid/pamid/src/coll/exscan/mpido_iexscan.c \
- src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c \
- src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c \
- src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c \
- src/mpid/pamid/src/coll/coll_utils.c \
- src/mpid/pamid/src/comm/mpid_comm.c \
- src/mpid/pamid/src/comm/mpid_selectcolls.c \
- src/mpid/pamid/src/comm/mpid_optcolls.c \
- src/mpid/pamid/src/misc/mpid_abort.c \
- src/mpid/pamid/src/misc/mpid_get_universe_size.c \
- src/mpid/pamid/src/misc/mpid_getpname.c \
- src/mpid/pamid/src/misc/mpid_mem.c \
- src/mpid/pamid/src/misc/mpid_unimpl.c \
- src/mpid/pamid/src/mpix/mpix.c \
- src/mpid/pamid/src/onesided/mpid_1s.c \
- src/mpid/pamid/src/onesided/mpid_win_accumulate.c \
- src/mpid/pamid/src/onesided/mpid_win_create.c \
- src/mpid/pamid/src/onesided/mpid_win_fence.c \
- src/mpid/pamid/src/onesided/mpid_win_free.c \
- src/mpid/pamid/src/onesided/mpid_win_get.c \
- src/mpid/pamid/src/onesided/mpid_win_lock.c \
- src/mpid/pamid/src/onesided/mpid_win_lock_all.c \
- src/mpid/pamid/src/onesided/mpid_win_pscw.c \
- src/mpid/pamid/src/onesided/mpid_win_put.c \
- src/mpid/pamid/src/onesided/mpid_win_shared_query.c \
- src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c \
- src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c \
- src/mpid/pamid/src/onesided/mpid_win_flush.c \
- src/mpid/pamid/src/onesided/mpid_win_allocate.c \
- src/mpid/pamid/src/onesided/mpid_win_sync.c \
- src/mpid/pamid/src/onesided/mpid_win_attach.c \
- src/mpid/pamid/src/onesided/mpid_win_detach.c \
- src/mpid/pamid/src/onesided/mpid_win_get_info.c \
- src/mpid/pamid/src/onesided/mpid_win_set_info.c \
- src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c \
- src/mpid/pamid/src/onesided/mpid_win_reqops.c \
- src/mpid/pamid/src/onesided/mpidi_win_control.c \
- src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c \
- src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c \
- src/mpid/pamid/src/pamix/pamix.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c \
- src/mpid/pamid/src/pt2pt/mpid_cancel.c \
- src/mpid/pamid/src/pt2pt/mpid_issend.c \
- src/mpid/pamid/src/pt2pt/mpid_recv.c \
- src/mpid/pamid/src/pt2pt/mpid_ssend.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_short.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_util.c \
- src/mpid/pamid/src/pt2pt/mpidi_control.c \
- src/mpid/pamid/src/pt2pt/mpidi_done.c \
- src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c \
- src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c \
- src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c \
- src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c \
- src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c \
- src/mpid/pamid/src/dyntask/mpid_port.c \
- src/mpid/pamid/src/dyntask/mpidi_pg.c \
- src/mpid/pamid/src/dyntask/mpidi_port.c \
- src/mpid/pamid/src/mpid_buffer.c \
- src/mpid/pamid/src/mpidi_bufmm.c \
- src/mpid/pamid/src/mpid_finalize.c \
- src/mpid/pamid/src/mpid_init.c \
- src/mpid/pamid/src/mpid_iprobe.c \
- src/mpid/pamid/src/mpid_probe.c \
- src/mpid/pamid/src/mpid_progress.c \
- src/mpid/pamid/src/mpid_recvq.c \
- src/mpid/pamid/src/mpid_request.c \
- src/mpid/pamid/src/mpid_time.c src/mpid/pamid/src/mpid_vc.c \
- src/mpid/pamid/src/mpidi_env.c src/mpid/pamid/src/mpidi_util.c \
- src/mpid/pamid/src/mpidi_mutex.c \
- src/mpid/pamid/src/mpid_mrecv.c \
- src/mpid/pamid/src/mpid_mprobe.c \
- src/mpid/pamid/src/mpid_imrecv.c \
- src/mpid/pamid/src/mpid_improbe.c \
- src/mpid/pamid/src/mpid_aint.c \
- src/mpid/pamid/src/mpidi_nbc_sched.c \
- src/mpid/pamid/src/mpidi_pami_datatype.c \
- src/mpid/pamid/src/mpid_recvq_mmap.cpp \
+ src/mpid/ch4/src/ch4_globals.c \
+ src/mpid/ch4/src/mpid_ch4_net_array.c \
+ src/mpid/ch4/src/mpid_ch4_shm_array.c \
+ src/mpid/ch4/generic/mpidig_globals.c \
+ src/mpid/ch4/generic/mpidig_init.c \
+ src/mpid/ch4/netmod/ofi/func_table.c \
+ src/mpid/ch4/netmod/ofi/globals.c \
+ src/mpid/ch4/netmod/ofi/util.c \
+ src/mpid/ch4/netmod/ucx/func_table.c \
+ src/mpid/ch4/netmod/ucx/globals.c \
+ src/mpid/ch4/netmod/portals4/globals.c \
+ src/mpid/ch4/netmod/portals4/func_table.c \
+ src/mpid/ch4/netmod/stubnm/globals.c \
+ src/mpid/ch4/shm/stubshm/globals.c \
+ src/mpid/ch4/shm/stubshm/func_table.c \
+ src/mpid/ch4/shm/posix/globals.c \
+ src/mpid/ch4/shm/posix/func_table.c \
+ src/mpid/ch4/shm/posix/barrier.c \
src/mpid/common/datatype/dataloop/darray_support.c \
src/mpid/common/datatype/dataloop/dataloop.c \
src/mpid/common/datatype/dataloop/dataloop_create.c \
@@ -7383,42 +6389,43 @@ am__lib_lib at PMPILIBNAME@_la_SOURCES_DIST = src/mpi/attr/attr_delete.c \
src/mpid/common/datatype/dataloop/segment_flatten.c \
src/mpid/common/datatype/dataloop/segment_packunpack.c \
src/mpid/common/datatype/dataloop/subarray_support.c \
- src/mpid/common/datatype/mpid_contents_support.c \
- src/mpid/common/datatype/mpid_datatype_contents.c \
- src/mpid/common/datatype/mpid_datatype_free.c \
- src/mpid/common/datatype/mpid_ext32_datatype.c \
- src/mpid/common/datatype/mpid_ext32_segment.c \
- src/mpid/common/datatype/mpid_segment.c \
- src/mpid/common/datatype/mpid_type_blockindexed.c \
- src/mpid/common/datatype/mpid_type_commit.c \
- src/mpid/common/datatype/mpid_type_contiguous.c \
- src/mpid/common/datatype/mpid_type_create_pairtype.c \
- src/mpid/common/datatype/mpid_type_create_resized.c \
- src/mpid/common/datatype/mpid_type_debug.c \
- src/mpid/common/datatype/mpid_type_dup.c \
- src/mpid/common/datatype/mpid_type_get_contents.c \
- src/mpid/common/datatype/mpid_type_get_envelope.c \
- src/mpid/common/datatype/mpid_type_indexed.c \
- src/mpid/common/datatype/mpid_type_struct.c \
- src/mpid/common/datatype/mpid_type_vector.c \
- src/mpid/common/datatype/mpid_type_zerolen.c \
+ src/mpid/common/datatype/mpidu_contents_support.c \
+ src/mpid/common/datatype/mpidu_datatype_contents.c \
+ src/mpid/common/datatype/mpidu_datatype_free.c \
+ src/mpid/common/datatype/mpidu_ext32_datatype.c \
+ src/mpid/common/datatype/mpidu_ext32_segment.c \
+ src/mpid/common/datatype/mpidu_segment.c \
+ src/mpid/common/datatype/mpidu_type_blockindexed.c \
+ src/mpid/common/datatype/mpidu_type_commit.c \
+ src/mpid/common/datatype/mpidu_type_contiguous.c \
+ src/mpid/common/datatype/mpidu_type_create_pairtype.c \
+ src/mpid/common/datatype/mpidu_type_create_resized.c \
+ src/mpid/common/datatype/mpidu_type_debug.c \
+ src/mpid/common/datatype/mpidu_type_dup.c \
+ src/mpid/common/datatype/mpidu_type_get_contents.c \
+ src/mpid/common/datatype/mpidu_type_get_envelope.c \
+ src/mpid/common/datatype/mpidu_type_indexed.c \
+ src/mpid/common/datatype/mpidu_type_struct.c \
+ src/mpid/common/datatype/mpidu_type_vector.c \
+ src/mpid/common/datatype/mpidu_type_zerolen.c \
src/mpid/common/datatype/mpir_type_flatten.c \
- src/mpid/common/sched/mpid_sched.c \
- src/mpid/common/sock/poll/sock.c \
+ src/mpid/common/sched/mpidu_sched.c \
src/mpid/common/hcoll/hcoll_init.c \
src/mpid/common/hcoll/hcoll_ops.c \
- src/mpid/common/hcoll/hcoll_rte.c src/mpi_t/mpit.c \
+ src/mpid/common/hcoll/hcoll_rte.c \
+ src/mpid/common/shm/mpidu_shm_alloc.c \
+ src/mpid/common/shm/mpidu_shm_barrier.c src/mpi_t/mpit.c \
src/nameserv/file/file_nameserv.c \
- src/nameserv/pmi/pmi_nameserv.c src/pmi/pmi2/poe/poe2pmi.c \
+ src/nameserv/pmi/pmi_nameserv.c \
src/pmi/pmi2/simple/simple2pmi.c \
src/pmi/pmi2/simple/simple_pmiutil.c \
src/pmi/simple/simple_pmiutil.c src/pmi/simple/simple_pmi.c
- at BUILD_F77_BINDING_TRUE@am__objects_38 = src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-statusf2c.lo \
+ at BUILD_F77_BINDING_TRUE@am__objects_42 = src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-statusf2c.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-statusc2f.lo
- at BUILD_FC_BINDING_TRUE@am__objects_39 = src/binding/fortran/use_mpi/lib_lib at PMPILIBNAME@_la-create_f90_int.lo \
+ at BUILD_FC_BINDING_TRUE@am__objects_43 = src/binding/fortran/use_mpi/lib_lib at PMPILIBNAME@_la-create_f90_int.lo \
@BUILD_FC_BINDING_TRUE@ src/binding/fortran/use_mpi/lib_lib at PMPILIBNAME@_la-create_f90_real.lo \
@BUILD_FC_BINDING_TRUE@ src/binding/fortran/use_mpi/lib_lib at PMPILIBNAME@_la-create_f90_complex.lo
-am__objects_40 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attr_delete.lo \
+am__objects_44 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attr_delete.lo \
src/mpi/attr/lib_lib at PMPILIBNAME@_la-attr_get.lo \
src/mpi/attr/lib_lib at PMPILIBNAME@_la-attr_put.lo \
src/mpi/attr/lib_lib at PMPILIBNAME@_la-comm_create_keyval.lo \
@@ -7728,7 +6735,7 @@ am__objects_40 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attr_delete.lo \
src/mpi/topo/lib_lib at PMPILIBNAME@_la-nhb_alltoall.lo \
src/mpi/topo/lib_lib at PMPILIBNAME@_la-nhb_alltoallv.lo \
src/mpi/topo/lib_lib at PMPILIBNAME@_la-nhb_alltoallw.lo \
- $(am__objects_38) $(am__objects_39) \
+ $(am__objects_42) $(am__objects_43) \
src/glue/romio/lib_lib at PMPILIBNAME@_la-all_romio_symbols.lo \
src/mutex/lib_lib at PMPILIBNAME@_la-mutex_create.lo \
src/mutex/lib_lib at PMPILIBNAME@_la-mutex_free.lo \
@@ -7765,7 +6772,7 @@ am__objects_40 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attr_delete.lo \
src/mpi_t/lib_lib at PMPILIBNAME@_la-cat_get_index.lo \
src/mpi_t/lib_lib at PMPILIBNAME@_la-cvar_get_index.lo \
src/mpi_t/lib_lib at PMPILIBNAME@_la-pvar_get_index.lo
- at BUILD_F77_BINDING_TRUE@am__objects_41 = src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-sendf.lo \
+ at BUILD_F77_BINDING_TRUE@am__objects_45 = src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-sendf.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-recvf.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-get_countf.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-bsendf.lo \
@@ -8143,12 +7150,12 @@ am__objects_40 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attr_delete.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-dup_type_fnf.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-null_type_del_fnf.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-null_type_copy_fnf.lo
-am__objects_42 = $(am__objects_41)
- at BUILD_F77_BINDING_TRUE@am__objects_43 = src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-fdebug.lo \
+am__objects_46 = $(am__objects_45)
+ at BUILD_F77_BINDING_TRUE@am__objects_47 = src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-fdebug.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-setbot.lo \
@BUILD_F77_BINDING_TRUE@ src/binding/fortran/mpif_h/setbotf.lo
- at BUILD_FC_BINDING_TRUE@am__objects_44 = src/binding/fortran/use_mpi/lib_lib at PMPILIBNAME@_la-create_f90_util.lo
- at BUILD_CH3_TRUE@am__objects_45 = src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-ch3u_buffer.lo \
+ at BUILD_FC_BINDING_TRUE@am__objects_48 = src/binding/fortran/use_mpi/lib_lib at PMPILIBNAME@_la-create_f90_util.lo
+ at BUILD_CH3_TRUE@am__objects_49 = src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-ch3u_buffer.lo \
@BUILD_CH3_TRUE@ src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-ch3u_comm.lo \
@BUILD_CH3_TRUE@ src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-ch3u_comm_spawn_multiple.lo \
@BUILD_CH3_TRUE@ src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-ch3u_handle_connection.lo \
@@ -8204,11 +7211,11 @@ am__objects_42 = $(am__objects_41)
@BUILD_CH3_TRUE@ src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-mpidi_isend_self.lo \
@BUILD_CH3_TRUE@ src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo \
@BUILD_CH3_TRUE@ src/mpid/ch3/src/lib_lib at PMPILIBNAME@_la-mpidi_printf.lo
- at BUILD_CH3_TRUE@@BUILD_CH3_UTIL_SOCK_TRUE at am__objects_46 = src/mpid/ch3/util/sock/lib_lib at PMPILIBNAME@_la-ch3u_init_sock.lo \
+ at BUILD_CH3_TRUE@@BUILD_CH3_UTIL_SOCK_TRUE at am__objects_50 = src/mpid/ch3/util/sock/lib_lib at PMPILIBNAME@_la-ch3u_init_sock.lo \
@BUILD_CH3_TRUE@@BUILD_CH3_UTIL_SOCK_TRUE@ src/mpid/ch3/util/sock/lib_lib at PMPILIBNAME@_la-ch3u_connect_sock.lo \
@BUILD_CH3_TRUE@@BUILD_CH3_UTIL_SOCK_TRUE@ src/mpid/ch3/util/sock/lib_lib at PMPILIBNAME@_la-ch3u_getinterfaces.lo
- at BUILD_CH3_TRUE@@BUILD_CH3_UTIL_FTB_TRUE at am__objects_47 = src/mpid/ch3/util/ftb/lib_lib at PMPILIBNAME@_la-ftb.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE at am__objects_48 = src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo \
+ at BUILD_CH3_TRUE@@BUILD_CH3_UTIL_FTB_TRUE at am__objects_51 = src/mpid/ch3/util/ftb/lib_lib at PMPILIBNAME@_la-ftb.lo
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE at am__objects_52 = src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3_init.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3_isend.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3_isendv.lo \
@@ -8219,9 +7226,7 @@ am__objects_42 = $(am__objects_41)
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3_win_fns.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3i_comm.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3i_eagernoncontig.lo \
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_init.lo \
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_ckpt.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_finalize.lo \
@@ -8233,15 +7238,15 @@ am__objects_42 = $(am__objects_41)
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_net_array.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_lmt_dma.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_lmt_vmsplice.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE at am__objects_49 = src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-tcp_finalize.lo \
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE at am__objects_53 = src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-tcp_finalize.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE@ src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-tcp_init.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE@ src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-tcp_send.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE@ src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-tcp_utility.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE@ src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-socksm.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE@ src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-tcp_getip.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_TCP_TRUE@ src/mpid/ch3/channels/nemesis/netmod/tcp/lib_lib at PMPILIBNAME@_la-tcp_ckpt.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE at am__objects_50 = src/mpid/ch3/channels/nemesis/netmod/none/lib_lib at PMPILIBNAME@_la-none.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE at am__objects_51 = src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-ptl_init.lo \
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE at am__objects_54 = src/mpid/ch3/channels/nemesis/netmod/none/lib_lib at PMPILIBNAME@_la-none.lo
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE at am__objects_55 = src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-ptl_init.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE@ src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-ptl_poll.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE@ src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-ptl_probe.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE@ src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-ptl_recv.lo \
@@ -8251,28 +7256,29 @@ am__objects_42 = $(am__objects_41)
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE@ src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-rptl.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE@ src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-rptl_init.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_PORTALS4_TRUE@ src/mpid/ch3/channels/nemesis/netmod/portals4/lib_lib at PMPILIBNAME@_la-rptl_op.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_MXM_TRUE at am__objects_52 = src/mpid/ch3/channels/nemesis/netmod/mxm/lib_lib at PMPILIBNAME@_la-mxm_cancel.lo \
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_MXM_TRUE at am__objects_56 = src/mpid/ch3/channels/nemesis/netmod/mxm/lib_lib at PMPILIBNAME@_la-mxm_cancel.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_MXM_TRUE@ src/mpid/ch3/channels/nemesis/netmod/mxm/lib_lib at PMPILIBNAME@_la-mxm_finalize.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_MXM_TRUE@ src/mpid/ch3/channels/nemesis/netmod/mxm/lib_lib at PMPILIBNAME@_la-mxm_init.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_MXM_TRUE@ src/mpid/ch3/channels/nemesis/netmod/mxm/lib_lib at PMPILIBNAME@_la-mxm_poll.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_MXM_TRUE@ src/mpid/ch3/channels/nemesis/netmod/mxm/lib_lib at PMPILIBNAME@_la-mxm_probe.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_MXM_TRUE@ src/mpid/ch3/channels/nemesis/netmod/mxm/lib_lib at PMPILIBNAME@_la-mxm_send.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_OFI_TRUE at am__objects_53 = src/mpid/ch3/channels/nemesis/netmod/ofi/lib_lib at PMPILIBNAME@_la-ofi_init.lo \
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_OFI_TRUE at am__objects_57 = src/mpid/ch3/channels/nemesis/netmod/ofi/lib_lib at PMPILIBNAME@_la-ofi_init.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_OFI_TRUE@ src/mpid/ch3/channels/nemesis/netmod/ofi/lib_lib at PMPILIBNAME@_la-ofi_cm.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_OFI_TRUE@ src/mpid/ch3/channels/nemesis/netmod/ofi/lib_lib at PMPILIBNAME@_la-ofi_tagged.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_OFI_TRUE@ src/mpid/ch3/channels/nemesis/netmod/ofi/lib_lib at PMPILIBNAME@_la-ofi_msg.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_OFI_TRUE@ src/mpid/ch3/channels/nemesis/netmod/ofi/lib_lib at PMPILIBNAME@_la-ofi_data.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_OFI_TRUE@ src/mpid/ch3/channels/nemesis/netmod/ofi/lib_lib at PMPILIBNAME@_la-ofi_progress.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE at am__objects_54 = src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_init.lo \
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE at am__objects_58 = src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_init.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE@ src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_fini.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE@ src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_vc.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE@ src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_poll.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE@ src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_send.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE@ src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_probe.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@@BUILD_NEMESIS_NETMOD_LLC_TRUE@ src/mpid/ch3/channels/nemesis/netmod/llc/lib_lib at PMPILIBNAME@_la-llc_cancel.lo
- at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE at am__objects_55 = src/mpid/ch3/channels/nemesis/utils/monitor/lib_lib at PMPILIBNAME@_la-papi_defs.lo \
+ at BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE at am__objects_59 = src/mpid/ch3/channels/nemesis/utils/monitor/lib_lib at PMPILIBNAME@_la-papi_defs.lo \
@BUILD_CH3_NEMESIS_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/nemesis/utils/replacements/lib_lib at PMPILIBNAME@_la-mkstemp.lo
- at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__objects_56 = src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE at am__objects_60 = src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-sock.lo \
+ at BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_init.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_isend.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_isendv.lo \
@@ -8280,116 +7286,25 @@ am__objects_42 = $(am__objects_41)
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_istartmsgv.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_progress.lo \
@BUILD_CH3_SOCK_TRUE@@BUILD_CH3_TRUE@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_win_fns.lo
- at BUILD_PAMID_TRUE@am__objects_57 = src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_barrier.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_bcast.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_ibcast.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_allreduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_allgather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_iallgather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_scatterv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_scatter.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_iscatter.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_gather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_igather.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_alltoall.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_gatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_igatherv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/scan/lib_lib at PMPILIBNAME@_la-mpido_scan.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_reduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_ireduce.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/alltoallw/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/exscan/lib_lib at PMPILIBNAME@_la-mpido_iexscan.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/ired_scat_block/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/ired_scat/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/red_scat/lib_lib at PMPILIBNAME@_la-mpido_red_scat.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/coll/lib_lib at PMPILIBNAME@_la-coll_utils.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_comm.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_optcolls.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_abort.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_getpname.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_mem.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_unimpl.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/mpix/lib_lib at PMPILIBNAME@_la-mpix.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_1s.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fence.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_free.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_put.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_flush.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_sync.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_attach.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_detach.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpidi_win_control.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pamix/lib_lib at PMPILIBNAME@_la-pamix.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_recv_init.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_send_init.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_startall.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_cancel.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_issend.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_recv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_ssend.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_control.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_done.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_port.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_port.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_buffer.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_finalize.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_init.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_iprobe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_probe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_progress.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_request.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_time.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_vc.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_env.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_util.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_mutex.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mrecv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mprobe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_imrecv.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_improbe.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_aint.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.lo \
- at BUILD_PAMID_TRUE@ src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.lo
- at BUILD_PAMID_TRUE@@QUEUE_BINARY_SEARCH_SUPPORT_TRUE at am__objects_58 = src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.lo
- at BUILD_MPID_COMMON_DATATYPE_TRUE@am__objects_59 = src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-darray_support.lo \
+ at BUILD_CH4_TRUE@am__objects_61 = src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-ch4_globals.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_globals.lo \
+ at BUILD_CH4_TRUE@ src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_init.lo
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE at am__objects_62 = src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-func_table.lo \
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_NETMOD_OFI_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-util.lo
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE at am__objects_63 = src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-func_table.lo \
+ at BUILD_CH4_NETMOD_UCX_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-globals.lo
+ at BUILD_CH4_NETMOD_PORTALS4_TRUE@@BUILD_CH4_TRUE at am__objects_64 = src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_NETMOD_PORTALS4_TRUE@@BUILD_CH4_TRUE@ src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-func_table.lo
+ at BUILD_CH4_NETMOD_STUBNM_TRUE@@BUILD_CH4_TRUE at am__objects_65 = src/mpid/ch4/netmod/stubnm/lib_lib at PMPILIBNAME@_la-globals.lo
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_STUBSHM_TRUE at am__objects_66 = src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_STUBSHM_TRUE@ src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-func_table.lo
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE at am__objects_67 = src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-globals.lo \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-func_table.lo \
+ at BUILD_CH4_SHM_TRUE@@BUILD_CH4_TRUE@@BUILD_SHM_POSIX_TRUE@ src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-barrier.lo
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@am__objects_68 = src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-darray_support.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-dataloop.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-dataloop_create.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-dataloop_create_blockindexed.lo \
@@ -8403,39 +7318,39 @@ am__objects_42 = $(am__objects_41)
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-segment_flatten.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-segment_packunpack.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-subarray_support.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_contents_support.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_segment.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_commit.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_debug.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_dup.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_struct.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_vector.lo \
- at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_segment.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.lo \
+ at BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.lo \
@BUILD_MPID_COMMON_DATATYPE_TRUE@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.lo
- at BUILD_MPID_COMMON_SCHED_TRUE@am__objects_60 = src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpid_sched.lo
- at BUILD_MPID_COMMON_SOCK_POLL_TRUE@@BUILD_MPID_COMMON_SOCK_TRUE at am__objects_61 = src/mpid/common/sock/poll/lib_lib at PMPILIBNAME@_la-sock.lo
- at BUILD_HCOLL_TRUE@am__objects_62 = src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_init.lo \
+ at BUILD_MPID_COMMON_SCHED_TRUE@am__objects_69 = src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpidu_sched.lo
+ at BUILD_HCOLL_TRUE@am__objects_70 = src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_init.lo \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_ops.lo \
@BUILD_HCOLL_TRUE@ src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_rte.lo
- at BUILD_NAMEPUB_FILE_TRUE@am__objects_63 = src/nameserv/file/lib_lib at PMPILIBNAME@_la-file_nameserv.lo
- at BUILD_NAMEPUB_PMI_TRUE@am__objects_64 = src/nameserv/pmi/lib_lib at PMPILIBNAME@_la-pmi_nameserv.lo
- at BUILD_PMI_PMI2_POE_TRUE@am__objects_65 = src/pmi/pmi2/poe/lib_lib at PMPILIBNAME@_la-poe2pmi.lo
- at BUILD_PMI_PMI2_SIMPLE_TRUE@am__objects_66 = src/pmi/pmi2/simple/lib_lib at PMPILIBNAME@_la-simple2pmi.lo \
+ at BUILD_MPID_COMMON_SHM_TRUE@am__objects_71 = src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.lo \
+ at BUILD_MPID_COMMON_SHM_TRUE@ src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.lo
+ at BUILD_NAMEPUB_FILE_TRUE@am__objects_72 = src/nameserv/file/lib_lib at PMPILIBNAME@_la-file_nameserv.lo
+ at BUILD_NAMEPUB_PMI_TRUE@am__objects_73 = src/nameserv/pmi/lib_lib at PMPILIBNAME@_la-pmi_nameserv.lo
+ at BUILD_PMI_PMI2_SIMPLE_TRUE@am__objects_74 = src/pmi/pmi2/simple/lib_lib at PMPILIBNAME@_la-simple2pmi.lo \
@BUILD_PMI_PMI2_SIMPLE_TRUE@ src/pmi/pmi2/simple/lib_lib at PMPILIBNAME@_la-simple_pmiutil.lo
- at BUILD_PMI_SIMPLE_TRUE@am__objects_67 = src/pmi/simple/lib_lib at PMPILIBNAME@_la-simple_pmiutil.lo \
+ at BUILD_PMI_SIMPLE_TRUE@am__objects_75 = src/pmi/simple/lib_lib at PMPILIBNAME@_la-simple_pmiutil.lo \
@BUILD_PMI_SIMPLE_TRUE@ src/pmi/simple/lib_lib at PMPILIBNAME@_la-simple_pmi.lo
-am__objects_68 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attrutil.lo \
+am__objects_76 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attrutil.lo \
src/mpi/attr/lib_lib at PMPILIBNAME@_la-dup_fn.lo \
src/mpi/coll/lib_lib at PMPILIBNAME@_la-allred_group.lo \
src/mpi/coll/lib_lib at PMPILIBNAME@_la-barrier_group.lo \
@@ -8469,37 +7384,26 @@ am__objects_68 = src/mpi/attr/lib_lib at PMPILIBNAME@_la-attrutil.lo \
src/mpi/rma/lib_lib at PMPILIBNAME@_la-winutil.lo \
src/mpi/rma/lib_lib at PMPILIBNAME@_la-rmatypeutil.lo \
src/mpi/topo/lib_lib at PMPILIBNAME@_la-topoutil.lo \
- src/util/dbg/lib_lib at PMPILIBNAME@_la-dbg_printf.lo \
- src/util/dbg/lib_lib at PMPILIBNAME@_la-timelimit.lo \
- src/util/instrm/lib_lib at PMPILIBNAME@_la-instr.lo \
- src/util/mem/lib_lib at PMPILIBNAME@_la-trmem.lo \
src/util/mem/lib_lib at PMPILIBNAME@_la-handlemem.lo \
- src/util/mem/lib_lib at PMPILIBNAME@_la-safestr.lo \
- src/util/mem/lib_lib at PMPILIBNAME@_la-argstr.lo \
src/util/mem/lib_lib at PMPILIBNAME@_la-strerror.lo \
- src/util/other/lib_lib at PMPILIBNAME@_la-outliers.lo \
- src/util/other/lib_lib at PMPILIBNAME@_la-assert.lo \
- src/util/cvar/lib_lib at PMPILIBNAME@_la-mpich_cvars.lo \
+ src/util/cvar/lib_lib at PMPILIBNAME@_la-mpir_cvars.lo \
src/util/procmap/lib_lib at PMPILIBNAME@_la-local_proc.lo \
- src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread.lo \
- src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.lo \
- src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.lo \
- src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.lo \
- src/util/timers/lib_lib at PMPILIBNAME@_la-mpiu_timer.lo \
- $(am__objects_43) $(am__objects_44) \
+ src/util/assert/lib_lib at PMPILIBNAME@_la-assert.lo \
+ $(am__objects_47) $(am__objects_48) \
src/glue/romio/lib_lib at PMPILIBNAME@_la-glue_romio.lo \
- $(am__objects_45) $(am__objects_46) $(am__objects_47) \
- $(am__objects_48) $(am__objects_49) $(am__objects_50) \
- $(am__objects_51) $(am__objects_52) $(am__objects_53) \
- $(am__objects_54) $(am__objects_55) $(am__objects_56) \
- $(am__objects_57) $(am__objects_58) $(am__objects_59) \
- $(am__objects_60) $(am__objects_61) $(am__objects_62) \
- src/mpi_t/lib_lib at PMPILIBNAME@_la-mpit.lo $(am__objects_63) \
+ $(am__objects_49) $(am__objects_50) $(am__objects_51) \
+ $(am__objects_52) $(am__objects_53) $(am__objects_54) \
+ $(am__objects_55) $(am__objects_56) $(am__objects_57) \
+ $(am__objects_58) $(am__objects_59) $(am__objects_60) \
+ $(am__objects_61) $(am__objects_62) $(am__objects_63) \
$(am__objects_64) $(am__objects_65) $(am__objects_66) \
- $(am__objects_67)
+ $(am__objects_67) $(am__objects_68) $(am__objects_69) \
+ $(am__objects_70) $(am__objects_71) \
+ src/mpi_t/lib_lib at PMPILIBNAME@_la-mpit.lo $(am__objects_72) \
+ $(am__objects_73) $(am__objects_74) $(am__objects_75)
@BUILD_PROFILING_LIB_TRUE at am_lib_lib@PMPILIBNAME at _la_OBJECTS = \
- at BUILD_PROFILING_LIB_TRUE@ $(am__objects_40) $(am__objects_42) \
- at BUILD_PROFILING_LIB_TRUE@ $(am__objects_68)
+ at BUILD_PROFILING_LIB_TRUE@ $(am__objects_44) $(am__objects_46) \
+ at BUILD_PROFILING_LIB_TRUE@ $(am__objects_76)
lib_lib at PMPILIBNAME@_la_OBJECTS = \
$(am_lib_lib at PMPILIBNAME@_la_OBJECTS)
@BUILD_PROFILING_LIB_TRUE at am_lib_lib@PMPILIBNAME at _la_rpath = -rpath \
@@ -8537,6 +7441,31 @@ src_mpi_debugger_libdbginitdummy_la_LINK = $(LIBTOOL) $(AM_V_lt) \
$(CCLD) $(src_mpi_debugger_libdbginitdummy_la_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@BUILD_DEBUGGER_DLL_TRUE at am_src_mpi_debugger_libdbginitdummy_la_rpath =
+src_pm_util_libmpiexec_la_DEPENDENCIES =
+am__src_pm_util_libmpiexec_la_SOURCES_DIST = src/pm/util/cmnargs.c \
+ src/pm/util/process.c src/pm/util/ioloop.c \
+ src/pm/util/pmiserv.c src/pm/util/labelout.c src/pm/util/env.c \
+ src/pm/util/newsession.c src/pm/util/rm.c \
+ src/pm/util/pmiport.c src/pm/util/dbgiface.c \
+ src/pm/util/simple_pmiutil2.c
+ at BUILD_PM_UTIL_TRUE@am_src_pm_util_libmpiexec_la_OBJECTS = src/pm/util/src_pm_util_libmpiexec_la-cmnargs.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-process.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-ioloop.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-pmiserv.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-labelout.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-env.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-newsession.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-rm.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-pmiport.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-dbgiface.lo \
+ at BUILD_PM_UTIL_TRUE@ src/pm/util/src_pm_util_libmpiexec_la-simple_pmiutil2.lo
+src_pm_util_libmpiexec_la_OBJECTS = \
+ $(am_src_pm_util_libmpiexec_la_OBJECTS)
+src_pm_util_libmpiexec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) \
+ $(src_pm_util_libmpiexec_la_LDFLAGS) $(LDFLAGS) -o $@
+ at BUILD_PM_UTIL_TRUE@am_src_pm_util_libmpiexec_la_rpath =
@BUILD_LOGGING_RLOG_TRUE at am__EXEEXT_1 = src/util/logging/rlog/printrlog$(EXEEXT) \
@BUILD_LOGGING_RLOG_TRUE@ src/util/logging/rlog/printirlog$(EXEEXT) \
@BUILD_LOGGING_RLOG_TRUE@ src/util/logging/rlog/irlog2rlog$(EXEEXT)
@@ -8563,25 +7492,40 @@ src_env_mpivars_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
am__src_pm_gforker_mpiexec_SOURCES_DIST = src/pm/gforker/mpiexec.c
@BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at am_src_pm_gforker_mpiexec_OBJECTS = src/pm/gforker/src_pm_gforker_mpiexec-mpiexec.$(OBJEXT)
src_pm_gforker_mpiexec_OBJECTS = $(am_src_pm_gforker_mpiexec_OBJECTS)
- at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at src_pm_gforker_mpiexec_DEPENDENCIES = src/pm/util/libmpiexec.a \
- at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE@ $(am__DEPENDENCIES_1)
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at src_pm_gforker_mpiexec_DEPENDENCIES = src/pm/util/libmpiexec.la
+src_pm_gforker_mpiexec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(src_pm_gforker_mpiexec_LDFLAGS) \
+ $(LDFLAGS) -o $@
am__src_pm_gforker_mpiexec_gforker_SOURCES_DIST = \
src/pm/gforker/mpiexec.c
@BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at am_src_pm_gforker_mpiexec_gforker_OBJECTS = src/pm/gforker/src_pm_gforker_mpiexec_gforker-mpiexec.$(OBJEXT)
src_pm_gforker_mpiexec_gforker_OBJECTS = \
$(am_src_pm_gforker_mpiexec_gforker_OBJECTS)
- at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at src_pm_gforker_mpiexec_gforker_DEPENDENCIES = src/pm/util/libmpiexec.a
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at src_pm_gforker_mpiexec_gforker_DEPENDENCIES = src/pm/util/libmpiexec.la
+src_pm_gforker_mpiexec_gforker_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) \
+ $(src_pm_gforker_mpiexec_gforker_LDFLAGS) $(LDFLAGS) -o $@
am__src_pm_remshell_mpiexec_SOURCES_DIST = src/pm/remshell/mpiexec.c
@BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at am_src_pm_remshell_mpiexec_OBJECTS = src/pm/remshell/src_pm_remshell_mpiexec-mpiexec.$(OBJEXT)
src_pm_remshell_mpiexec_OBJECTS = \
$(am_src_pm_remshell_mpiexec_OBJECTS)
- at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at src_pm_remshell_mpiexec_DEPENDENCIES = src/pm/util/libmpiexec.a
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at src_pm_remshell_mpiexec_DEPENDENCIES = src/pm/util/libmpiexec.la
+src_pm_remshell_mpiexec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(src_pm_remshell_mpiexec_LDFLAGS) \
+ $(LDFLAGS) -o $@
am__src_pm_remshell_mpiexec_remshell_SOURCES_DIST = \
src/pm/remshell/mpiexec.c
@BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at am_src_pm_remshell_mpiexec_remshell_OBJECTS = src/pm/remshell/src_pm_remshell_mpiexec_remshell-mpiexec.$(OBJEXT)
src_pm_remshell_mpiexec_remshell_OBJECTS = \
$(am_src_pm_remshell_mpiexec_remshell_OBJECTS)
- at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at src_pm_remshell_mpiexec_remshell_DEPENDENCIES = src/pm/util/libmpiexec.a
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at src_pm_remshell_mpiexec_remshell_DEPENDENCIES = src/pm/util/libmpiexec.la
+src_pm_remshell_mpiexec_remshell_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) \
+ $(src_pm_remshell_mpiexec_remshell_LDFLAGS) $(LDFLAGS) -o $@
am__src_util_logging_rlog_irlog2rlog_SOURCES_DIST = \
src/util/logging/rlog/irlog2rlog.c
@BUILD_LOGGING_RLOG_TRUE at am_src_util_logging_rlog_irlog2rlog_OBJECTS = src/util/logging/rlog/irlog2rlog.$(OBJEXT)
@@ -8686,13 +7630,13 @@ AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
am__v_FCLD_0 = @echo " FCLD " $@;
am__v_FCLD_1 =
-SOURCES = $(src_pm_util_libmpiexec_a_SOURCES) \
- $(lib_lib at MPICXXLIBNAME@_la_SOURCES) \
+SOURCES = $(lib_lib at MPICXXLIBNAME@_la_SOURCES) \
$(lib_lib at MPIFCLIBNAME@_la_SOURCES) \
$(lib_lib at MPILIBNAME@_la_SOURCES) \
$(lib_lib at PMPILIBNAME@_la_SOURCES) \
$(lib_librlogutil_la_SOURCES) $(lib_libtvmpich_la_SOURCES) \
$(src_mpi_debugger_libdbginitdummy_la_SOURCES) \
+ $(src_pm_util_libmpiexec_la_SOURCES) \
$(src_env_mpichversion_SOURCES) $(src_env_mpivars_SOURCES) \
$(src_pm_gforker_mpiexec_SOURCES) \
$(src_pm_gforker_mpiexec_gforker_SOURCES) \
@@ -8701,14 +7645,14 @@ SOURCES = $(src_pm_util_libmpiexec_a_SOURCES) \
$(src_util_logging_rlog_irlog2rlog_SOURCES) \
$(src_util_logging_rlog_printirlog_SOURCES) \
$(src_util_logging_rlog_printrlog_SOURCES)
-DIST_SOURCES = $(am__src_pm_util_libmpiexec_a_SOURCES_DIST) \
- $(am__lib_lib at MPICXXLIBNAME@_la_SOURCES_DIST) \
+DIST_SOURCES = $(am__lib_lib at MPICXXLIBNAME@_la_SOURCES_DIST) \
$(am__lib_lib at MPIFCLIBNAME@_la_SOURCES_DIST) \
$(am__lib_lib at MPILIBNAME@_la_SOURCES_DIST) \
$(am__lib_lib at PMPILIBNAME@_la_SOURCES_DIST) \
$(am__lib_librlogutil_la_SOURCES_DIST) \
$(am__lib_libtvmpich_la_SOURCES_DIST) \
$(am__src_mpi_debugger_libdbginitdummy_la_SOURCES_DIST) \
+ $(am__src_pm_util_libmpiexec_la_SOURCES_DIST) \
$(src_env_mpichversion_SOURCES) $(src_env_mpivars_SOURCES) \
$(am__src_pm_gforker_mpiexec_SOURCES_DIST) \
$(am__src_pm_gforker_mpiexec_gforker_SOURCES_DIST) \
@@ -8740,12 +7684,12 @@ am__dist_noinst_DATA_DIST = maint/Version maint/Version.base.m4 \
src/mpid/ch3/util/ftb/errnames.txt \
src/mpid/ch3/channels/nemesis/netmod/ofi/errnames.txt \
src/mpid/ch3/channels/sock/src/errnames.txt \
- src/mpid/common/sock/errnames.txt \
- src/mpid/common/sock/poll/errnames.txt src/pmi/errnames.txt \
+ src/mpid/ch4/netmod/ofi/errnames.txt \
+ src/mpid/ch4/netmod/ucx/errnames.txt \
+ src/mpid/ch4/netmod/portals4/errnames.txt src/pmi/errnames.txt \
src/mpi/errhan/baseerrnames.txt
DATA = $(dist_noinst_DATA) $(nodist_pkgconfig_DATA) $(noinst_DATA) \
$(sysconf_DATA)
-am__include_HEADERS_DIST = src/mpid/pamid/include/mpix.h
am__modinc_HEADERS_DIST = \
src/binding/fortran/use_mpi/$(MPIMOD).$(MOD) \
src/binding/fortran/use_mpi/$(MPISIZEOFMOD).$(MOD) \
@@ -8768,25 +7712,10 @@ am__noinst_HEADERS_DIST = src/mpi/attr/attr.h src/mpi/coll/collutil.h \
src/mpi/errhan/errcodes.h \
$(top_srcdir)/src/mpi/errhan/defmsg.h src/mpi/group/group.h \
src/mpi/init/mpi_init.h src/mpi/pt2pt/bsendutil.h \
- src/mpi/spawn/namepub.h src/mpi/topo/topo.h \
- src/util/dbg/mpidbg.h src/util/logging/common/state_names.h \
- src/util/mem/mpiu_strerror.h src/util/thread/mpiu_thread.h \
- src/util/thread/mpiu_thread_single.h \
- src/util/thread/mpiu_thread_multiple.h \
- src/util/thread/mpiu_thread_global.h \
- src/util/thread/mpiu_thread_pobj.h \
- src/util/thread/mpiu_thread_priv.h \
- src/util/thread/mpiu_thread_posix.h \
- src/util/thread/mpiu_thread_solaris.h \
- src/util/thread/mpiu_thread_win.h \
- src/util/type/mpiu_type_defs.h \
- src/util/wrappers/mpiu_os_wrappers.h \
- src/util/wrappers/mpiu_os_wrappers_pre.h \
- src/util/wrappers/mpiu_process_wrappers.h \
- src/util/wrappers/mpiu_shm_wrappers.h \
+ src/mpi/spawn/namepub.h src/util/logging/common/state_names.h \
+ src/util/nodemap/build_nodemap.h \
src/util/wrappers/mpiu_sock_wrappers.h \
src/util/wrappers/mpiu_util_wrappers.h \
- src/util/assert/mpiassert.h src/util/pointer/mpiu_pointer.h \
src/binding/fortran/mpif_h/fproto.h \
src/binding/fortran/mpif_h/mpi_fortimpl.h \
src/binding/fortran/use_mpi/create_f90_util.h \
@@ -8794,26 +7723,39 @@ am__noinst_HEADERS_DIST = src/mpi/attr/attr.h src/mpi/coll/collutil.h \
src/binding/fortran/use_mpi/mpif90type.h \
src/binding/fortran/use_mpi/mpifnoext.h \
src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.h \
- src/include/bsocket.h src/include/mpi_attr.h \
- src/include/mpi_f77interface.h src/include/mpi_fortlogical.h \
- src/include/mpi_lang.h src/include/mpiallstates.h \
- src/include/mpibsend.h src/include/mpich_cvars.h \
- src/include/mpichconfconst.h src/include/mpierror.h \
- src/include/mpierrs.h src/include/mpiext.h \
- src/include/mpifunc.h src/include/mpihandlemem.h \
- src/include/mpiimpl.h src/include/mpimem.h \
- src/include/mpir_nbc.h src/include/mpir_type_defs.h \
- src/include/mpishared.h src/include/mpistates.h \
- src/include/mpitimerimpl.h src/include/mpiu_utarray.h \
- src/include/mpiu_uthash.h src/include/mpiutil.h \
- src/include/nopackage.h src/include/oputil.h src/include/pmi.h \
- src/include/pmi2.h src/include/rlog.h \
- src/include/rlog_macros.h src/include/mpiinfo.h \
- src/mpid/ch3/include/mpidftb.h src/mpid/ch3/include/mpidimpl.h \
- src/mpid/ch3/include/mpidpkt.h src/mpid/ch3/include/mpidpost.h \
- src/mpid/ch3/include/mpidpre.h \
+ src/include/bsocket.h src/include/mpir_refcount.h \
+ src/include/mpir_refcount_global.h \
+ src/include/mpir_refcount_pobj.h \
+ src/include/mpir_refcount_single.h src/include/mpir_assert.h \
+ src/include/mpir_misc_post.h src/include/mpir_type_defs.h \
+ src/include/mpir_dbg.h src/include/mpir_attr_generic.h \
+ src/include/mpir_attr.h src/include/mpii_f77interface.h \
+ src/include/mpii_cxxinterface.h src/include/mpii_fortlogical.h \
+ src/include/mpiallstates.h src/include/mpii_bsend.h \
+ src/include/mpir_cvars.h src/include/mpichconfconst.h \
+ src/include/mpir_err.h src/include/mpir_ext.h \
+ src/include/mpir_func.h src/include/mpir_coll.h \
+ src/include/mpir_comm.h src/include/mpir_debugger.h \
+ src/include/mpir_request.h src/include/mpir_status.h \
+ src/include/mpir_contextid.h src/include/mpir_objects.h \
+ src/include/mpir_pointers.h src/include/mpir_topo.h \
+ src/include/mpir_group.h src/include/mpir_errhandler.h \
+ src/include/mpir_info.h src/include/mpiimpl.h \
+ src/include/mpir_mem.h src/include/mpir_thread.h \
+ src/include/mpir_nbc.h src/include/mpir_op.h \
+ src/include/mpir_process.h src/include/mpir_utarray.h \
+ src/include/mpir_misc.h src/include/mpir_tags.h \
+ src/include/mpir_datatype.h src/include/mpir_win.h \
+ src/include/mpir_pt2pt.h src/include/nopackage.h \
+ src/include/pmi.h src/include/pmi2.h src/include/rlog.h \
+ src/include/rlog_macros.h src/include/mpir_op_util.h \
+ src/mpid/include/mpidu_pre.h src/mpid/ch3/include/mpidftb.h \
+ src/mpid/ch3/include/mpidimpl.h src/mpid/ch3/include/mpidpkt.h \
+ src/mpid/ch3/include/mpidpost.h src/mpid/ch3/include/mpidpre.h \
src/mpid/ch3/include/mpid_thread.h \
src/mpid/ch3/include/mpidrma.h \
+ src/mpid/ch3/include/mpid_sched.h \
+ src/mpid/ch3/include/mpid_coll.h \
src/mpid/ch3/util/sock/ch3usock.h \
src/mpid/ch3/channels/nemesis/include/mpidi_ch3_impl.h \
src/mpid/ch3/channels/nemesis/include/mpidi_ch3_nemesis.h \
@@ -8824,7 +7766,6 @@ am__noinst_HEADERS_DIST = src/mpi/attr/attr.h src/mpi/coll/collutil.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_debug.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_defs.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_fbox.h \
- src/mpid/ch3/channels/nemesis/include/mpid_nem_generic_queue.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_nets.h \
@@ -8840,56 +7781,71 @@ am__noinst_HEADERS_DIST = src/mpi/attr/attr.h src/mpi/coll/collutil.h \
src/mpid/ch3/channels/nemesis/netmod/llc/llc_impl.h \
src/mpid/ch3/channels/nemesis/utils/monitor/my_papi_defs.h \
src/mpid/ch3/channels/nemesis/utils/monitor/rdtsc.h \
+ src/mpid/ch3/channels/sock/include/mpidu_sock.h \
+ src/mpid/ch3/channels/sock/include/mpidu_socki.h \
src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h \
src/mpid/ch3/channels/sock/include/mpidi_ch3_impl.h \
src/mpid/ch3/channels/sock/include/mpidi_ch3_post.h \
- src/mpid/pamid/include/mpidi_thread.h \
- src/mpid/pamid/include/mpidimpl.h \
- src/mpid/pamid/include/mpidi_mutex.h \
- src/mpid/pamid/include/mpidpost.h \
- src/mpid/pamid/include/mpidi_constants.h \
- src/mpid/pamid/include/mpidi_externs.h \
- src/mpid/pamid/include/mpidi_util.h \
- src/mpid/pamid/include/mpidi_hooks.h \
- src/mpid/pamid/include/mpidi_macros.h \
- src/mpid/pamid/include/mpidi_datatypes.h \
- src/mpid/pamid/include/mpidi_prototypes.h \
- src/mpid/pamid/include/pamix.h \
- src/mpid/pamid/include/mpidpre.h \
- src/mpid/pamid/include/mpidi_platform.h \
- src/mpid/pamid/src/mpid_request.h \
- src/mpid/pamid/src/mpid_progress.h \
- src/mpid/pamid/src/mpid_recvq.h \
- src/mpid/pamid/src/onesided/mpidi_onesided.h \
- src/mpid/pamid/src/pt2pt/mpid_send.h \
- src/mpid/pamid/src/pt2pt/mpidi_recv.h \
- src/mpid/pamid/src/pt2pt/mpidi_send.h \
- src/mpid/pamid/src/pt2pt/mpid_irecv.h \
- src/mpid/pamid/src/pt2pt/mpid_isend.h \
+ src/mpid/ch4/include/netmodpre.h src/mpid/ch4/include/shmpre.h \
+ src/mpid/ch4/include/mpidch4.h src/mpid/ch4/include/mpidch4r.h \
+ src/mpid/ch4/include/mpidimpl.h src/mpid/ch4/include/mpidpre.h \
+ src/mpid/ch4/include/mpid_sched.h \
+ src/mpid/ch4/include/mpid_thread.h src/mpid/ch4/src/ch4_comm.h \
+ src/mpid/ch4/src/ch4_init.h src/mpid/ch4/src/ch4_progress.h \
+ src/mpid/ch4/src/ch4_request.h src/mpid/ch4/src/ch4_send.h \
+ src/mpid/ch4/src/ch4_types.h src/mpid/ch4/src/ch4_impl.h \
+ src/mpid/ch4/src/ch4_probe.h src/mpid/ch4/src/ch4_proc.h \
+ src/mpid/ch4/src/ch4_recv.h src/mpid/ch4/src/ch4_rma.h \
+ src/mpid/ch4/src/ch4_spawn.h src/mpid/ch4/src/ch4_win.h \
+ src/mpid/ch4/src/ch4r_probe.h src/mpid/ch4/src/ch4r_rma.h \
+ src/mpid/ch4/src/ch4r_win.h src/mpid/ch4/src/ch4r_init.h \
+ src/mpid/ch4/src/ch4r_proc.h src/mpid/ch4/src/ch4i_comm.h \
+ src/mpid/ch4/src/ch4r_recvq.h src/mpid/ch4/src/ch4r_recv.h \
+ src/mpid/ch4/src/ch4i_util.h src/mpid/ch4/src/ch4r_symheap.h \
+ src/mpid/ch4/src/ch4r_buf.h src/mpid/ch4/src/ch4r_request.h \
+ src/mpid/ch4/generic/mpidig_send.h \
+ src/mpid/ch4/generic/mpidig_recv.h \
+ src/mpid/ch4/generic/mpidig.h \
+ src/mpid/ch4/netmod/include/netmod.h \
+ src/mpid/ch4/netmod/include/netmod_impl.h \
+ src/mpid/ch4/shm/include/shm.h \
+ src/mpid/ch4/shm/include/shm_impl.h \
+ src/mpid/ch4/shm/posix/posix_am.h \
+ src/mpid/ch4/shm/posix/posix_coll.h \
+ src/mpid/ch4/shm/posix/posix_datatypes.h \
+ src/mpid/ch4/shm/posix/shm_direct.h \
+ src/mpid/ch4/shm/posix/posix_init.h \
+ src/mpid/ch4/shm/posix/posix_progress.h \
+ src/mpid/ch4/shm/posix/posix_recv.h \
+ src/mpid/ch4/shm/posix/posix_rma.h \
+ src/mpid/ch4/shm/posix/posix_spawn.h \
+ src/mpid/ch4/shm/posix/posix_win.h \
+ src/mpid/ch4/shm/posix/posix_comm.h \
+ src/mpid/ch4/shm/posix/posix_defs.h \
+ src/mpid/ch4/shm/posix/posix_impl.h \
+ src/mpid/ch4/shm/posix/posix_probe.h \
+ src/mpid/ch4/shm/posix/posix_queue.h \
+ src/mpid/ch4/shm/posix/posix_request.h \
+ src/mpid/ch4/shm/posix/posix_send.h \
+ src/mpid/ch4/shm/posix/posix_unimpl.h \
src/mpid/common/datatype/dataloop/dataloop.h \
src/mpid/common/datatype/dataloop/dataloop_parts.h \
src/mpid/common/datatype/dataloop/dataloop_create.h \
src/mpid/common/datatype/dataloop/typesize_support.h \
src/mpid/common/datatype/dataloop/veccpy.h \
- src/mpid/common/datatype/mpid_dataloop.h \
- src/mpid/common/datatype/mpid_datatype.h \
- src/mpid/common/datatype/mpid_ext32_segment.h \
+ src/mpid/common/datatype/mpidu_dataloop.h \
+ src/mpid/common/datatype/mpidu_datatype.h \
+ src/mpid/common/datatype/mpidu_ext32_segment.h \
src/mpid/common/datatype/segment_states.h \
- src/mpid/common/sched/mpid_sched.h \
- src/mpid/common/sched/mpid_sched_pre.h \
- src/mpid/common/sock/mpidu_sock.h \
- src/mpid/common/sock/poll/sock_init.i \
- src/mpid/common/sock/poll/sock_set.i \
- src/mpid/common/sock/poll/sock_post.i \
- src/mpid/common/sock/poll/sock_immed.i \
- src/mpid/common/sock/poll/sock_misc.i \
- src/mpid/common/sock/poll/sock_wait.i \
- src/mpid/common/sock/poll/socki_util.i \
- src/mpid/common/sock/poll/mpidu_socki.h \
+ src/mpid/common/datatype/mpid_datatype_fallback.h \
+ src/mpid/common/sched/mpidu_sched.h \
src/mpid/common/thread/mpidu_thread_fallback.h \
src/mpid/common/hcoll/hcoll.h \
src/mpid/common/hcoll/hcoll_dtypes.h \
src/mpid/common/timers/mpid_timers_fallback.h \
+ src/mpid/common/shm/mpidu_generic_queue.h \
+ src/mpid/common/shm/mpidu_shm_impl.h \
+ src/mpid/common/shm/mpidu_shm.h \
src/pmi/pmi2/simple/simple_pmiutil.h \
src/pmi/pmi2/simple/simple2pmi.h \
src/pmi/pmi2/simple/pmi2compat.h \
@@ -8968,10 +7924,10 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/maint/Makefile.mk \
$(top_srcdir)/src/glue/Makefile.mk \
$(top_srcdir)/src/glue/romio/Makefile.mk \
$(top_srcdir)/src/include/Makefile.mk \
- $(top_srcdir)/src/include/glue_romio.h.in \
$(top_srcdir)/src/include/mpi.h.in \
$(top_srcdir)/src/include/mpichconf.h.in \
$(top_srcdir)/src/include/mpichinfo.h.in \
+ $(top_srcdir)/src/include/mpir_ext.h.in \
$(top_srcdir)/src/mpi/Makefile.mk \
$(top_srcdir)/src/mpi/attr/Makefile.mk \
$(top_srcdir)/src/mpi/coll/Makefile.mk \
@@ -9011,44 +7967,30 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/maint/Makefile.mk \
$(top_srcdir)/src/mpid/ch3/util/Makefile.mk \
$(top_srcdir)/src/mpid/ch3/util/ftb/Makefile.mk \
$(top_srcdir)/src/mpid/ch3/util/sock/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/generic/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/include/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/include/netmodpre.h.in \
+ $(top_srcdir)/src/mpid/ch4/include/shmpre.h.in \
+ $(top_srcdir)/src/mpid/ch4/netmod/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/netmod/ofi/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/netmod/portals4/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/netmod/stubnm/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/netmod/ucx/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/shm/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/shm/posix/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/shm/stubshm/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/src/Makefile.mk \
+ $(top_srcdir)/src/mpid/ch4/src/mpid_ch4_net_array.c.in \
+ $(top_srcdir)/src/mpid/ch4/src/mpid_ch4_shm_array.c.in \
$(top_srcdir)/src/mpid/common/Makefile.mk \
$(top_srcdir)/src/mpid/common/datatype/Makefile.mk \
$(top_srcdir)/src/mpid/common/datatype/dataloop/Makefile.mk \
$(top_srcdir)/src/mpid/common/hcoll/Makefile.mk \
$(top_srcdir)/src/mpid/common/sched/Makefile.mk \
- $(top_srcdir)/src/mpid/common/sock/Makefile.mk \
- $(top_srcdir)/src/mpid/common/sock/poll/Makefile.mk \
+ $(top_srcdir)/src/mpid/common/shm/Makefile.mk \
$(top_srcdir)/src/mpid/common/thread/Makefile.mk \
$(top_srcdir)/src/mpid/common/timers/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/allgather/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/allgatherv/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/allreduce/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/alltoall/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/alltoallv/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/alltoallw/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/barrier/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/bcast/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/exscan/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/gather/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/gatherv/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/ired_scat/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/red_scat/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/reduce/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/scan/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/scatter/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/coll/scatterv/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/comm/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/dyntask/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/misc/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/mpix/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/onesided/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/pamix/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/pt2pt/Makefile.mk \
- $(top_srcdir)/src/mpid/pamid/src/pt2pt/persistent/Makefile.mk \
$(top_srcdir)/src/mutex/Makefile.mk \
$(top_srcdir)/src/nameserv/Makefile.mk \
$(top_srcdir)/src/nameserv/file/Makefile.mk \
@@ -9064,26 +8006,17 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/maint/Makefile.mk \
$(top_srcdir)/src/pm/util/Makefile.mk \
$(top_srcdir)/src/pmi/Makefile.mk \
$(top_srcdir)/src/pmi/pmi2/Makefile.mk \
- $(top_srcdir)/src/pmi/pmi2/poe/Makefile.mk \
$(top_srcdir)/src/pmi/pmi2/simple/Makefile.mk \
$(top_srcdir)/src/pmi/simple/Makefile.mk \
$(top_srcdir)/src/util/Makefile.mk \
$(top_srcdir)/src/util/assert/Makefile.mk \
$(top_srcdir)/src/util/cvar/Makefile.mk \
- $(top_srcdir)/src/util/dbg/Makefile.mk \
- $(top_srcdir)/src/util/dbg/getfuncstack.in \
- $(top_srcdir)/src/util/instrm/Makefile.mk \
$(top_srcdir)/src/util/logging/Makefile.mk \
$(top_srcdir)/src/util/logging/common/Makefile.mk \
$(top_srcdir)/src/util/logging/rlog/Makefile.mk \
$(top_srcdir)/src/util/mem/Makefile.mk \
- $(top_srcdir)/src/util/other/Makefile.mk \
- $(top_srcdir)/src/util/pointer/Makefile.mk \
+ $(top_srcdir)/src/util/nodemap/Makefile.mk \
$(top_srcdir)/src/util/procmap/Makefile.mk \
- $(top_srcdir)/src/util/thread/Makefile.mk \
- $(top_srcdir)/src/util/timers/Makefile.mk \
- $(top_srcdir)/src/util/timers/mpiu_timer.h.in \
- $(top_srcdir)/src/util/type/Makefile.mk \
$(top_srcdir)/src/util/wrappers/Makefile.mk README \
confdb/ar-lib confdb/compile confdb/config.guess \
confdb/config.rpath confdb/config.sub confdb/depcomp \
@@ -9141,13 +8074,11 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
-ASSERT_LEVEL = @ASSERT_LEVEL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASH_SHELL = @BASH_SHELL@
-BGQ_INSTALL_DIR = @BGQ_INSTALL_DIR@
BSEND_OVERHEAD = @BSEND_OVERHEAD@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
@@ -9283,10 +8214,72 @@ FORTRAN_MPI_OFFSET = @FORTRAN_MPI_OFFSET@
GCOV = @GCOV@
GNUCXX_MINORVERSION = @GNUCXX_MINORVERSION@
GNUCXX_VERSION = @GNUCXX_VERSION@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
HAVE_CXX_EXCEPTIONS = @HAVE_CXX_EXCEPTIONS@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
HAVE_ERROR_CHECKING = @HAVE_ERROR_CHECKING@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_REALPATH = @HAVE_REALPATH@
HAVE_ROMIO = @HAVE_ROMIO@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE__EXIT = @HAVE__EXIT@
INCLUDE_MPICXX_H = @INCLUDE_MPICXX_H@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -9318,6 +8311,7 @@ MPICHLIB_CPPFLAGS = @MPICHLIB_CPPFLAGS@
MPICHLIB_CXXFLAGS = @MPICHLIB_CXXFLAGS@
MPICHLIB_FCFLAGS = @MPICHLIB_FCFLAGS@
MPICHLIB_FFLAGS = @MPICHLIB_FFLAGS@
+MPICH_CUSTOM_STRING = @MPICH_CUSTOM_STRING@
MPICH_MPICC_CFLAGS = @MPICH_MPICC_CFLAGS@
MPICH_MPICC_CPPFLAGS = @MPICH_MPICC_CPPFLAGS@
MPICH_MPICC_LDFLAGS = @MPICH_MPICC_LDFLAGS@
@@ -9336,8 +8330,6 @@ MPICH_MPIFORT_LDFLAGS = @MPICH_MPIFORT_LDFLAGS@
MPICH_MPIFORT_LIBS = @MPICH_MPIFORT_LIBS@
MPICH_NUMVERSION = @MPICH_NUMVERSION@
MPICH_RELEASE_DATE = @MPICH_RELEASE_DATE@
-MPICH_TIMER_KIND = @MPICH_TIMER_KIND@
-MPICH_TIMER_TYPE = @MPICH_TIMER_TYPE@
MPICH_VERSION = @MPICH_VERSION@
MPICONSTMODNAME = @MPICONSTMODNAME@
MPICPP_NAME = @MPICPP_NAME@
@@ -9356,7 +8348,6 @@ MPIR_CXX_DOUBLE_COMPLEX = @MPIR_CXX_DOUBLE_COMPLEX@
MPIR_CXX_LONG_DOUBLE_COMPLEX = @MPIR_CXX_LONG_DOUBLE_COMPLEX@
MPISIZEOFMODNAME = @MPISIZEOFMODNAME@
MPIU_DLL_SPEC_DEF = @MPIU_DLL_SPEC_DEF@
-MPIU_PINT = @MPIU_PINT@
MPI_2COMPLEX = @MPI_2COMPLEX@
MPI_2DOUBLE_COMPLEX = @MPI_2DOUBLE_COMPLEX@
MPI_2DOUBLE_PRECISION = @MPI_2DOUBLE_PRECISION@
@@ -9503,13 +8494,28 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
-PAMILIBNAME = @PAMILIBNAME@
PAPI_INCLUDE = @PAPI_INCLUDE@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PMPILIBNAME = @PMPILIBNAME@
PMPI_F08_NAME = @PMPI_F08_NAME@
RANLIB = @RANLIB@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
REQD = @REQD@
REQI1 = @REQI1@
REQI2 = @REQI2@
@@ -9535,8 +8541,8 @@ USER_FCFLAGS = @USER_FCFLAGS@
USER_FFLAGS = @USER_FFLAGS@
USER_LDFLAGS = @USER_LDFLAGS@
USER_LIBS = @USER_LIBS@
-USE_DBG_LOGGING = @USE_DBG_LOGGING@
VERSION = @VERSION@
+VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
WRAPPER_CFLAGS = @WRAPPER_CFLAGS@
WRAPPER_CPPFLAGS = @WRAPPER_CPPFLAGS@
WRAPPER_CXXFLAGS = @WRAPPER_CXXFLAGS@
@@ -9571,6 +8577,22 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
+ch4_netmods = @ch4_netmods@
+ch4_nets_array = @ch4_nets_array@
+ch4_nets_array_sz = @ch4_nets_array_sz@
+ch4_nets_func_array = @ch4_nets_func_array@
+ch4_nets_func_decl = @ch4_nets_func_decl@
+ch4_nets_native_func_array = @ch4_nets_native_func_array@
+ch4_nets_native_func_decl = @ch4_nets_native_func_decl@
+ch4_nets_strings = @ch4_nets_strings@
+ch4_shm = @ch4_shm@
+ch4_shm_array = @ch4_shm_array@
+ch4_shm_array_sz = @ch4_shm_array_sz@
+ch4_shm_func_array = @ch4_shm_func_array@
+ch4_shm_func_decl = @ch4_shm_func_decl@
+ch4_shm_native_func_array = @ch4_shm_native_func_array@
+ch4_shm_native_func_decl = @ch4_shm_native_func_decl@
+ch4_shm_strings = @ch4_shm_strings@
channel_name = @channel_name@
datadir = @datadir@
datarootdir = @datarootdir@
@@ -9611,6 +8633,8 @@ nemesis_nets_func_decl = @nemesis_nets_func_decl@
nemesis_nets_macro_defs = @nemesis_nets_macro_defs@
nemesis_nets_strings = @nemesis_nets_strings@
nemesis_networks = @nemesis_networks@
+ofilib = @ofilib@
+ofisrcdir = @ofisrcdir@
oldincludedir = @oldincludedir@
opalib = @opalib@
opalibdir = @opalibdir@
@@ -9623,6 +8647,7 @@ pm_name = @pm_name@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -9636,6 +8661,7 @@ ACLOCAL_AMFLAGS = -I confdb
# automake requires that we initialize variables to something, even just empty,
# before appending to them with "+="
+AM_CFLAGS = @VISIBILITY_CFLAGS@
# for datatype.h, which is included by some other dirs
@@ -9644,37 +8670,33 @@ ACLOCAL_AMFLAGS = -I confdb
### -*- Mode: Makefile; -*-
### vim: set ft=automake :
###
-### (C) 2011 by Argonne National Laboratory.
+### (C) 2015 by Argonne National Laboratory.
### See COPYRIGHT in top-level directory.
###
AM_CPPFLAGS = -I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/mpi/datatype -I$(top_srcdir)/src/mpi/spawn \
- -I$(top_srcdir)/src/util/dbg -Isrc/util/logging/common \
- -I$(top_srcdir)/src/util/mem -I$(top_srcdir)/src/util/thread \
- -I$(top_srcdir)/src/util/type \
+ -I$(top_srcdir)/src/util/logging/common \
+ -I$(top_srcdir)/src/util/mem -I$(top_srcdir)/src/util/nodemap \
-I$(top_srcdir)/src/util/wrappers \
- -I$(top_builddir)/src/util/wrappers \
- -I$(top_srcdir)/src/util/assert \
- -I$(top_builddir)/src/util/timers \
- -I$(top_srcdir)/src/util/pointer $(am__append_21) \
+ -I$(top_builddir)/src/util/wrappers $(am__append_21) \
$(am__append_25) $(am__append_32) $(am__append_46) \
- $(am__append_53) $(am__append_58) $(am__append_61) \
- $(am__append_79) $(am__append_86) $(am__append_89) \
- $(am__append_91) $(am__append_96) $(am__append_97) \
- -I$(top_srcdir)/src/mpid/common/timers $(am__append_112) \
- $(am__append_115) $(am__append_118)
+ -I$(top_srcdir)/src/mpid/include $(am__append_53) \
+ $(am__append_58) $(am__append_61) $(am__append_80) \
+ $(am__append_81) $(am__append_95) $(am__append_101) \
+ $(am__append_104) $(am__append_106) \
+ -I$(top_srcdir)/src/mpid/common/timers $(am__append_111) \
+ $(am__append_125) $(am__append_128)
AM_FFLAGS =
AM_FCFLAGS = $(am__append_29) $(am__append_40)
-include_HEADERS = $(am__append_82)
+include_HEADERS =
# nodist_ b/c these are created by config.status and should not be distributed
nodist_include_HEADERS = $(am__append_20) $(am__append_28) \
src/include/mpi.h
-nodist_noinst_HEADERS = src/util/timers/mpiu_timer.h $(am__append_34) \
- src/include/glue_romio.h src/include/mpichinfo.h \
+nodist_noinst_HEADERS = $(am__append_34) src/include/mpichinfo.h \
src/include/mpichconf.h
BUILT_SOURCES = $(am__append_5) $(am__append_13) $(am__append_19) \
- $(am__append_43) src/include/glue_romio.h
+ $(am__append_43) src/include/mpir_ext.h
bin_SCRIPTS = src/env/mpicc src/env/parkill $(am__append_50) \
$(am__append_51) $(am__append_52)
dist_noinst_SCRIPTS = autogen.sh maint/configure.ac \
@@ -9708,51 +8730,48 @@ noinst_HEADERS = src/mpi/attr/attr.h src/mpi/coll/collutil.h \
src/mpi/errhan/errcodes.h \
$(top_srcdir)/src/mpi/errhan/defmsg.h src/mpi/group/group.h \
src/mpi/init/mpi_init.h src/mpi/pt2pt/bsendutil.h \
- src/mpi/spawn/namepub.h src/mpi/topo/topo.h \
- src/util/dbg/mpidbg.h src/util/logging/common/state_names.h \
- src/util/mem/mpiu_strerror.h src/util/thread/mpiu_thread.h \
- src/util/thread/mpiu_thread_single.h \
- src/util/thread/mpiu_thread_multiple.h \
- src/util/thread/mpiu_thread_global.h \
- src/util/thread/mpiu_thread_pobj.h \
- src/util/thread/mpiu_thread_priv.h \
- src/util/thread/mpiu_thread_posix.h \
- src/util/thread/mpiu_thread_solaris.h \
- src/util/thread/mpiu_thread_win.h \
- src/util/type/mpiu_type_defs.h \
- src/util/wrappers/mpiu_os_wrappers.h \
- src/util/wrappers/mpiu_os_wrappers_pre.h \
- src/util/wrappers/mpiu_process_wrappers.h \
- src/util/wrappers/mpiu_shm_wrappers.h \
+ src/mpi/spawn/namepub.h src/util/logging/common/state_names.h \
+ src/util/nodemap/build_nodemap.h \
src/util/wrappers/mpiu_sock_wrappers.h \
- src/util/wrappers/mpiu_util_wrappers.h \
- src/util/assert/mpiassert.h src/util/pointer/mpiu_pointer.h \
- $(am__append_26) $(am__append_33) $(am__append_47) \
- src/include/bsocket.h src/include/mpi_attr.h \
- src/include/mpi_f77interface.h src/include/mpi_fortlogical.h \
- src/include/mpi_lang.h src/include/mpiallstates.h \
- src/include/mpibsend.h src/include/mpich_cvars.h \
- src/include/mpichconfconst.h src/include/mpierror.h \
- src/include/mpierrs.h src/include/mpiext.h \
- src/include/mpifunc.h src/include/mpihandlemem.h \
- src/include/mpiimpl.h src/include/mpimem.h \
- src/include/mpir_nbc.h src/include/mpir_type_defs.h \
- src/include/mpishared.h src/include/mpistates.h \
- src/include/mpitimerimpl.h src/include/mpiu_utarray.h \
- src/include/mpiu_uthash.h src/include/mpiutil.h \
- src/include/nopackage.h src/include/oputil.h src/include/pmi.h \
- src/include/pmi2.h src/include/rlog.h \
- src/include/rlog_macros.h src/include/oputil.h \
- src/include/mpiinfo.h $(am__append_54) $(am__append_59) \
+ src/util/wrappers/mpiu_util_wrappers.h $(am__append_26) \
+ $(am__append_33) $(am__append_47) src/include/bsocket.h \
+ src/include/mpir_refcount.h src/include/mpir_refcount_global.h \
+ src/include/mpir_refcount_pobj.h \
+ src/include/mpir_refcount_single.h src/include/mpir_refcount.h \
+ src/include/mpir_assert.h src/include/mpir_misc_post.h \
+ src/include/mpir_type_defs.h src/include/mpir_dbg.h \
+ src/include/mpir_attr_generic.h src/include/mpir_attr.h \
+ src/include/mpii_f77interface.h \
+ src/include/mpii_cxxinterface.h src/include/mpii_fortlogical.h \
+ src/include/mpiallstates.h src/include/mpii_bsend.h \
+ src/include/mpir_cvars.h src/include/mpichconfconst.h \
+ src/include/mpir_err.h src/include/mpir_ext.h \
+ src/include/mpir_func.h src/include/mpir_coll.h \
+ src/include/mpir_comm.h src/include/mpir_debugger.h \
+ src/include/mpir_request.h src/include/mpir_status.h \
+ src/include/mpir_contextid.h src/include/mpir_objects.h \
+ src/include/mpir_pointers.h src/include/mpir_topo.h \
+ src/include/mpir_group.h src/include/mpir_errhandler.h \
+ src/include/mpir_info.h src/include/mpiimpl.h \
+ src/include/mpir_mem.h src/include/mpir_thread.h \
+ src/include/mpir_nbc.h src/include/mpir_op.h \
+ src/include/mpir_process.h src/include/mpir_utarray.h \
+ src/include/mpir_misc.h src/include/mpir_tags.h \
+ src/include/mpir_datatype.h src/include/mpir_win.h \
+ src/include/mpir_pt2pt.h src/include/nopackage.h \
+ src/include/pmi.h src/include/pmi2.h src/include/rlog.h \
+ src/include/rlog_macros.h src/include/mpir_op_util.h \
+ src/mpid/include/mpidu_pre.h $(am__append_54) $(am__append_59) \
$(am__append_62) $(am__append_65) $(am__append_68) \
$(am__append_70) $(am__append_74) $(am__append_76) \
- $(am__append_80) $(am__append_81) $(am__append_87) \
- $(am__append_90) $(am__append_92) $(am__append_95) \
- $(am__append_98) $(am__append_100) \
+ $(am__append_79) $(am__append_82) $(am__append_84) \
+ $(am__append_89) $(am__append_96) $(am__append_98) \
+ $(am__append_102) $(am__append_105) $(am__append_107) \
+ $(am__append_109) \
src/mpid/common/timers/mpid_timers_fallback.h \
- $(am__append_114) $(am__append_117)
-noinst_LIBRARIES = $(am__append_103)
-noinst_LTLIBRARIES = $(am__append_2)
+ $(am__append_112) $(am__append_124) $(am__append_127)
+noinst_LIBRARIES =
+noinst_LTLIBRARIES = $(am__append_2) $(am__append_115)
sysconf_DATA =
nodist_pkgconfig_DATA = src/packaging/pkgconfig/mpich.pc
CLEANFILES = $(am__append_37) $(am__append_44)
@@ -9776,7 +8795,8 @@ MAINTAINERCLEANFILES = $(am__append_6) $(am__append_39)
# should be considered when dissecting suffix-based implicit rules. These phony
# suffix files should NOT be added to a .PHONY target, otherwise make will not
# use the implicit rules to attempt to build them.
-SUFFIXES = .man-phony .html-phony .man1-phony .html1-phony .txt
+SUFFIXES = .man-phony .html-phony .man1-phony .html1-phony .man3-phony \
+ .html3-phony .txt
# ensure that the buildiface script ends up in the release tarball
@@ -9803,7 +8823,7 @@ EXTRA_DIST = src/binding/cxx/buildiface \
README.vin
DOC_SUBDIRS = doc/mansrc doc/userguide doc/installguide doc/logging \
doc/design
-MANDOC_SUBDIRS = $(am__append_9) $(am__append_110)
+MANDOC_SUBDIRS = $(am__append_9) $(am__append_122)
HTMLDOC_SUBDIRS = $(am__append_10)
# install-man does not have a special "-local" target for some reason
@@ -9812,23 +8832,24 @@ HTMLDOC_SUBDIRS = $(am__append_10)
INSTALL_DATA_LOCAL_TARGETS = install-man-local install-html-local \
install-pdf-local
doc1_src_txt = $(wrapper_doc_src)
+doc3_src_txt = doc/mansrc/mpiconsts.txt
# add (+=) target names to this variable to add them to the dependencies of the
# 'clean-local' target
-CLEAN_LOCAL_TARGETS = test-clean $(am__append_125)
+CLEAN_LOCAL_TARGETS = test-clean $(am__append_135)
# contains all of the "errnames.txt" files that are used by maint/extracterrmsgs
# to build src/mpi/errhan/defmsg.h
errnames_txt_files = src/mpi/errhan/errnames.txt \
src/mpid/ch3/errnames.txt $(am__append_56) $(am__append_72) \
- $(am__append_77) src/mpid/common/sock/errnames.txt \
+ $(am__append_77) $(am__append_86) $(am__append_91) \
$(am__append_93) src/pmi/errnames.txt
-external_subdirs = @mplsrcdir@ @opasrcdir@
+external_subdirs = @mplsrcdir@ @opasrcdir@ $(am__append_87)
external_ldflags = @mpllibdir@ @opalibdir@
external_libs = @WRAPPER_LIBS@
mpi_convenience_libs = $(am__append_11)
-pmpi_convenience_libs = @mpllib@ @opalib@ $(am__append_3) \
- $(am__append_12) $(am__append_16)
+pmpi_convenience_libs = @opalib@ @mpllib@ $(am__append_3) \
+ $(am__append_12) $(am__append_16) $(am__append_88)
# NOTE on our semi-unconventional usage of DIST_SUBDIRS:
# The automake manual recommends thinking of DIST_SUBDIRS as the list of all
@@ -9838,11 +8859,11 @@ pmpi_convenience_libs = @mpllib@ @opalib@ $(am__append_3) \
# almost always configure exactly the directories that will be included in
# SUBDIRS. So most additions to DIST_SUBDIRS should be conditional on the same
# condition as the corresponding SUBDIRS addition.
-DIST_SUBDIRS = ${external_subdirs} $(am__append_8) $(am__append_109) . \
+DIST_SUBDIRS = ${external_subdirs} $(am__append_8) $(am__append_121) . \
examples test
# build the current directory and then the examples directory after everything else
-SUBDIRS = ${external_subdirs} $(am__append_7) $(am__append_108) . \
+SUBDIRS = ${external_subdirs} $(am__append_7) $(am__append_120) . \
examples
# link with libtool+CCLD
@BUILD_F77_BINDING_FALSE at lib_lib@MPILIBNAME at _la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
@@ -10104,28 +9125,21 @@ mpi_core_sources = src/mpi/attr/attrutil.c src/mpi/attr/dup_fn.c \
src/mpi/init/async.c src/mpi/pt2pt/bsendutil.c \
src/mpi/pt2pt/mpir_request.c src/mpi/rma/winutil.c \
src/mpi/rma/rmatypeutil.c src/mpi/topo/topoutil.c \
- src/util/dbg/dbg_printf.c src/util/dbg/timelimit.c \
- src/util/instrm/instr.c src/util/mem/trmem.c \
- src/util/mem/handlemem.c src/util/mem/safestr.c \
- src/util/mem/argstr.c src/util/mem/strerror.c \
- src/util/other/outliers.c src/util/other/assert.c \
- src/util/cvar/mpich_cvars.c src/util/procmap/local_proc.c \
- src/util/thread/mpiu_thread.c \
- src/util/thread/mpiu_thread_win.c \
- src/util/thread/mpiu_thread_solaris.c \
- src/util/thread/mpiu_thread_posix.c \
- src/util/timers/mpiu_timer.c $(am__append_23) $(am__append_31) \
+ src/util/mem/handlemem.c src/util/mem/strerror.c \
+ src/util/cvar/mpir_cvars.c src/util/procmap/local_proc.c \
+ src/util/assert/assert.c $(am__append_23) $(am__append_31) \
src/glue/romio/glue_romio.c $(am__append_55) $(am__append_57) \
$(am__append_60) $(am__append_63) $(am__append_64) \
$(am__append_66) $(am__append_67) $(am__append_69) \
$(am__append_71) $(am__append_73) $(am__append_75) \
- $(am__append_78) $(am__append_83) $(am__append_84) \
- $(am__append_85) $(am__append_88) $(am__append_94) \
- $(am__append_99) src/mpi_t/mpit.c $(am__append_101) \
- $(am__append_102) $(am__append_111) $(am__append_113) \
- $(am__append_116)
-lib_LTLIBRARIES = $(am__append_4) $(am__append_15) $(am__append_119) \
- $(am__append_120) $(am__append_121) $(am__append_124)
+ $(am__append_78) $(am__append_83) $(am__append_85) \
+ $(am__append_90) $(am__append_92) $(am__append_94) \
+ $(am__append_97) $(am__append_99) $(am__append_100) \
+ $(am__append_103) $(am__append_108) $(am__append_110) \
+ src/mpi_t/mpit.c $(am__append_113) $(am__append_114) \
+ $(am__append_123) $(am__append_126)
+lib_LTLIBRARIES = $(am__append_4) $(am__append_15) $(am__append_129) \
+ $(am__append_130) $(am__append_131) $(am__append_134)
@BUILD_DEBUGGER_DLL_TRUE at src_mpi_debugger_libdbginitdummy_la_SOURCES = src/mpi/debugger/dbginit.c
@BUILD_DEBUGGER_DLL_TRUE at src_mpi_debugger_libdbginitdummy_la_CFLAGS = -g
# There is no static debugger interface library
@@ -10171,16 +9185,16 @@ mod_verbose = $(mod_verbose_$(V))
mod_verbose_ = $(mod_verbose_$(AM_DEFAULT_VERBOSITY))
mod_verbose_0 = @echo " MOD " $@;
@BUILD_F08_BINDING_TRUE at f08_module_files = \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) \
- at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_COMPILE_CONSTANTS_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_TYPES_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
+ at BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
@BUILD_F08_BINDING_TRUE@ src/binding/fortran/use_mpi_f08/$(PMPI_F08_NAME).$(MOD)
@BUILD_F08_BINDING_TRUE at F08_COMPILE_MODS = $(LTFCCOMPILE) \
@@ -10208,21 +9222,26 @@ common_pm_includes = \
# Ensure that dgbiface is compiled with the -g option, as the symbols must
# be present for the debugger to see them
- at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_a_CFLAGS = -g $(AM_CFLAGS)
+ at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_la_CFLAGS = -g $(AM_CFLAGS)
# we may want to omit the regular AM_CPPFLAGS when building objects in this
# utility library
- at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_a_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
+ at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_la_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
+
+# MPL
+ at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_la_LIBADD = -l$(MPLLIBNAME)
+ at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_la_LDFLAGS = $(mpllibdir)
+ at BUILD_PM_UTIL_TRUE@EXTRA_src_pm_util_libmpiexec_la_DEPENDENCIES = $(mpllib)
# We use the msg print routines (for now) - include these in the mpiexec
# library so that we don't need to copy the source files
-# safestr2 and simple_pmiutil2 are subsets of safestr and simple_pmiutil
-# respectively, since these may no longer be used by other applications
+# simple_pmiutil2 is a subset of simple_pmiutil,
+# since it may no longer be used by other applications
# (they make use of routines like the trmem routines that may no longer
# be used by other applications).
#
# [goodell] FIXME the above comment is basically unintelligible...
- at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_a_SOURCES = \
+ at BUILD_PM_UTIL_TRUE@src_pm_util_libmpiexec_la_SOURCES = \
@BUILD_PM_UTIL_TRUE@ src/pm/util/cmnargs.c \
@BUILD_PM_UTIL_TRUE@ src/pm/util/process.c \
@BUILD_PM_UTIL_TRUE@ src/pm/util/ioloop.c \
@@ -10233,23 +9252,30 @@ common_pm_includes = \
@BUILD_PM_UTIL_TRUE@ src/pm/util/rm.c \
@BUILD_PM_UTIL_TRUE@ src/pm/util/pmiport.c \
@BUILD_PM_UTIL_TRUE@ src/pm/util/dbgiface.c \
- at BUILD_PM_UTIL_TRUE@ src/pm/util/safestr2.c \
@BUILD_PM_UTIL_TRUE@ src/pm/util/simple_pmiutil2.c
@BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at src_pm_gforker_mpiexec_SOURCES = src/pm/gforker/mpiexec.c
- at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at src_pm_gforker_mpiexec_LDADD = src/pm/util/libmpiexec.a $(mpllib)
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at src_pm_gforker_mpiexec_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at src_pm_gforker_mpiexec_LDFLAGS = $(mpllibdir)
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at EXTRA_src_pm_gforker_mpiexec_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
@BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_TRUE at src_pm_gforker_mpiexec_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
@BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at src_pm_gforker_mpiexec_gforker_SOURCES = src/pm/gforker/mpiexec.c
- at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at src_pm_gforker_mpiexec_gforker_LDADD = src/pm/util/libmpiexec.a
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at src_pm_gforker_mpiexec_gforker_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at src_pm_gforker_mpiexec_gforker_LDFLAGS = $(mpllibdir)
+ at BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at EXTRA_src_pm_gforker_mpiexec_gforker_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
@BUILD_PM_GFORKER_TRUE@@PRIMARY_PM_GFORKER_FALSE at src_pm_gforker_mpiexec_gforker_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
@BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at src_pm_remshell_mpiexec_SOURCES = src/pm/remshell/mpiexec.c
- at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at src_pm_remshell_mpiexec_LDADD = src/pm/util/libmpiexec.a
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at src_pm_remshell_mpiexec_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at src_pm_remshell_mpiexec_LDFLAGS = $(mpllibdir)
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at EXTRA_src_pm_remshell_mpiexec_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
@BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_TRUE at src_pm_remshell_mpiexec_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
@BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at src_pm_remshell_mpiexec_remshell_SOURCES = src/pm/remshell/mpiexec.c
- at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at src_pm_remshell_mpiexec_remshell_LDADD = src/pm/util/libmpiexec.a
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at src_pm_remshell_mpiexec_remshell_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at src_pm_remshell_mpiexec_remshell_LDFLAGS = $(mpllibdir)
+ at BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at EXTRA_src_pm_remshell_mpiexec_remshell_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
@BUILD_PM_REMSHELL_TRUE@@PRIMARY_PM_REMSHELL_FALSE at src_pm_remshell_mpiexec_remshell_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
@BUILD_PROFILING_LIB_TRUE at lib_lib@PMPILIBNAME at _la_SOURCES = $(mpi_sources) $(mpi_f77_sources) $(mpi_core_sources)
@@ -10267,9 +9293,9 @@ common_pm_includes = \
@BUILD_PROFILING_LIB_TRUE at lib_lib@MPILIBNAME at _la_LIBADD = lib/lib at PMPILIBNAME@.la $(mpi_convenience_libs)
@BUILD_PROFILING_LIB_FALSE at EXTRA_lib_lib@MPILIBNAME at _la_DEPENDENCIES = $(pmpi_convenience_libs) $(mpi_convenience_libs)
@BUILD_F77_BINDING_TRUE at lib_lib@MPIFCLIBNAME at _la_CPPFLAGS = \
- at BUILD_F77_BINDING_TRUE@ $(AM_CPPFLAGS) $(am__append_122)
+ at BUILD_F77_BINDING_TRUE@ $(AM_CPPFLAGS) $(am__append_132)
@BUILD_F77_BINDING_TRUE at lib_lib@MPIFCLIBNAME at _la_SOURCES = \
- at BUILD_F77_BINDING_TRUE@ $(mpi_f77_sources) $(am__append_123)
+ at BUILD_F77_BINDING_TRUE@ $(mpi_f77_sources) $(am__append_133)
@BUILD_F77_BINDING_TRUE@@BUILD_FC_BINDING_TRUE at modinc_HEADERS = $(mpi_fc_modules)
@BUILD_F77_BINDING_TRUE at lib_lib@MPIFCLIBNAME at _la_LDFLAGS = $(ABIVERSIONFLAGS)
@BUILD_F77_BINDING_TRUE at lib_lib@MPIFCLIBNAME at _la_LIBADD = lib/lib at MPILIBNAME@.la
@@ -10307,10 +9333,10 @@ all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
-.SUFFIXES: .man-phony .html-phony .man1-phony .html1-phony .txt .c .cpp .cxx .f .f90 .lo .o .obj
+.SUFFIXES: .man-phony .html-phony .man1-phony .html1-phony .man3-phony .html3-phony .txt .c .cxx .f .f90 .lo .o .obj
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/maint/Makefile.mk $(srcdir)/src/Makefile.mk $(top_srcdir)/src/mpi/Makefile.mk $(top_srcdir)/src/mpi/attr/Makefile.mk $(top_srcdir)/src/mpi/coll/Makefile.mk $(top_srcdir)/src/mpi/comm/Makefile.mk $(top_srcdir)/src/mpi/datatype/Makefile.mk $(top_srcdir)/src/mpi/debugger/Makefile.mk $(top_srcdir)/src/mpi/errhan/Makefile.mk $(top_srcdir)/src/mpi/group/Makefile.mk $(top_srcdir)/src/mpi/info/Makefile.mk $(top_srcdir) [...]
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/maint/Makefile.mk $(srcdir)/src/Makefile.mk $(top_srcdir)/src/mpi/Makefile.mk $(top_srcdir)/src/mpi/attr/Makefile.mk $(top_srcdir)/src/mpi/coll/Makefile.mk $(top_srcdir)/src/mpi/comm/Makefile.mk $(top_srcdir)/src/mpi/datatype/Makefile.mk $(top_srcdir)/src/mpi/debugger/Makefile.mk $(top_srcdir)/src/mpi/errhan/Makefile.mk $(top_srcdir)/src/mpi/group/Makefile.mk $(top_srcdir)/src/mpi/info/Makefile.mk $(top_srcdir) [...]
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -10332,7 +9358,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
-$(srcdir)/maint/Makefile.mk $(srcdir)/src/Makefile.mk $(top_srcdir)/src/mpi/Makefile.mk $(top_srcdir)/src/mpi/attr/Makefile.mk $(top_srcdir)/src/mpi/coll/Makefile.mk $(top_srcdir)/src/mpi/comm/Makefile.mk $(top_srcdir)/src/mpi/datatype/Makefile.mk $(top_srcdir)/src/mpi/debugger/Makefile.mk $(top_srcdir)/src/mpi/errhan/Makefile.mk $(top_srcdir)/src/mpi/group/Makefile.mk $(top_srcdir)/src/mpi/info/Makefile.mk $(top_srcdir)/src/mpi/init/Makefile.mk $(top_srcdir)/src/mpi/misc/Makefile.mk $(t [...]
+$(srcdir)/maint/Makefile.mk $(srcdir)/src/Makefile.mk $(top_srcdir)/src/mpi/Makefile.mk $(top_srcdir)/src/mpi/attr/Makefile.mk $(top_srcdir)/src/mpi/coll/Makefile.mk $(top_srcdir)/src/mpi/comm/Makefile.mk $(top_srcdir)/src/mpi/datatype/Makefile.mk $(top_srcdir)/src/mpi/debugger/Makefile.mk $(top_srcdir)/src/mpi/errhan/Makefile.mk $(top_srcdir)/src/mpi/group/Makefile.mk $(top_srcdir)/src/mpi/info/Makefile.mk $(top_srcdir)/src/mpi/init/Makefile.mk $(top_srcdir)/src/mpi/misc/Makefile.mk $(t [...]
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -10357,17 +9383,25 @@ $(top_srcdir)/src/include/mpichconf.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure
distclean-hdr:
-rm -f src/include/mpichconf.h src/include/stamp-h1
- at BUILD_FC_BINDING_TRUE@src/binding/fortran/use_mpi/mpif90model.h: $(top_builddir)/config.status $(top_srcdir)/src/binding/fortran/use_mpi/mpif90model.h.in
- at BUILD_FC_BINDING_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
@BUILD_CH3_NEMESIS_TRUE at src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h: $(top_builddir)/config.status $(top_srcdir)/src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h.in
@BUILD_CH3_NEMESIS_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
@BUILD_CH3_NEMESIS_TRUE at src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c: $(top_builddir)/config.status $(top_srcdir)/src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c.in
@BUILD_CH3_NEMESIS_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
+ at BUILD_FC_BINDING_TRUE@src/binding/fortran/use_mpi/mpif90model.h: $(top_builddir)/config.status $(top_srcdir)/src/binding/fortran/use_mpi/mpif90model.h.in
+ at BUILD_FC_BINDING_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
+ at BUILD_CH4_TRUE@src/mpid/ch4/src/mpid_ch4_net_array.c: $(top_builddir)/config.status $(top_srcdir)/src/mpid/ch4/src/mpid_ch4_net_array.c.in
+ at BUILD_CH4_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
+ at BUILD_CH4_TRUE@src/mpid/ch4/src/mpid_ch4_shm_array.c: $(top_builddir)/config.status $(top_srcdir)/src/mpid/ch4/src/mpid_ch4_shm_array.c.in
+ at BUILD_CH4_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
+ at BUILD_CH4_TRUE@src/mpid/ch4/include/netmodpre.h: $(top_builddir)/config.status $(top_srcdir)/src/mpid/ch4/include/netmodpre.h.in
+ at BUILD_CH4_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
+ at BUILD_CH4_TRUE@src/mpid/ch4/include/shmpre.h: $(top_builddir)/config.status $(top_srcdir)/src/mpid/ch4/include/shmpre.h.in
+ at BUILD_CH4_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@
src/include/mpichinfo.h: $(top_builddir)/config.status $(top_srcdir)/src/include/mpichinfo.h.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mpich-doxygen: $(top_builddir)/config.status $(srcdir)/mpich-doxygen.in
cd $(top_builddir) && $(SHELL) ./config.status $@
-src/include/glue_romio.h: $(top_builddir)/config.status $(top_srcdir)/src/include/glue_romio.h.in
+src/include/mpir_ext.h: $(top_builddir)/config.status $(top_srcdir)/src/include/mpir_ext.h.in
cd $(top_builddir) && $(SHELL) ./config.status $@
src/binding/cxx/mpicxx.h: $(top_builddir)/config.status $(top_srcdir)/src/binding/cxx/mpicxx.h.in
cd $(top_builddir) && $(SHELL) ./config.status $@
@@ -10411,10 +9445,6 @@ src/env/mpifort.bash: $(top_builddir)/config.status $(top_srcdir)/src/env/mpifor
cd $(top_builddir) && $(SHELL) ./config.status $@
src/env/parkill: $(top_builddir)/config.status $(top_srcdir)/src/env/parkill.in
cd $(top_builddir) && $(SHELL) ./config.status $@
-src/util/dbg/getfuncstack: $(top_builddir)/config.status $(top_srcdir)/src/util/dbg/getfuncstack.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-src/util/timers/mpiu_timer.h: $(top_builddir)/config.status $(top_srcdir)/src/util/timers/mpiu_timer.h.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
src/include/mpi.h: $(top_builddir)/config.status $(top_srcdir)/src/include/mpi.h.in
cd $(top_builddir) && $(SHELL) ./config.status $@
doc/design/Makefile: $(top_builddir)/config.status $(top_srcdir)/doc/design/Makefile.in
@@ -10430,53 +9460,6 @@ doc/userguide/Makefile: $(top_builddir)/config.status $(top_srcdir)/doc/userguid
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-src/pm/util/$(am__dirstamp):
- @$(MKDIR_P) src/pm/util
- @: > src/pm/util/$(am__dirstamp)
-src/pm/util/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/pm/util/$(DEPDIR)
- @: > src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-cmnargs.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-process.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-ioloop.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-pmiserv.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-labelout.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-env.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-newsession.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-rm.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-pmiport.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-dbgiface.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-safestr2.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.$(OBJEXT): \
- src/pm/util/$(am__dirstamp) \
- src/pm/util/$(DEPDIR)/$(am__dirstamp)
-
-src/pm/util/libmpiexec.a: $(src_pm_util_libmpiexec_a_OBJECTS) $(src_pm_util_libmpiexec_a_DEPENDENCIES) $(EXTRA_src_pm_util_libmpiexec_a_DEPENDENCIES) src/pm/util/$(am__dirstamp)
- $(AM_V_at)-rm -f src/pm/util/libmpiexec.a
- $(AM_V_AR)$(src_pm_util_libmpiexec_a_AR) src/pm/util/libmpiexec.a $(src_pm_util_libmpiexec_a_OBJECTS) $(src_pm_util_libmpiexec_a_LIBADD)
- $(AM_V_at)$(RANLIB) src/pm/util/libmpiexec.a
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@@ -15099,67 +14082,25 @@ src/mpi/rma/lib_lib at MPILIBNAME@_la-rmatypeutil.lo: \
src/mpi/topo/lib_lib at MPILIBNAME@_la-topoutil.lo: \
src/mpi/topo/$(am__dirstamp) \
src/mpi/topo/$(DEPDIR)/$(am__dirstamp)
-src/util/dbg/$(am__dirstamp):
- @$(MKDIR_P) src/util/dbg
- @: > src/util/dbg/$(am__dirstamp)
-src/util/dbg/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/util/dbg/$(DEPDIR)
- @: > src/util/dbg/$(DEPDIR)/$(am__dirstamp)
-src/util/dbg/lib_lib at MPILIBNAME@_la-dbg_printf.lo: \
- src/util/dbg/$(am__dirstamp) \
- src/util/dbg/$(DEPDIR)/$(am__dirstamp)
-src/util/dbg/lib_lib at MPILIBNAME@_la-timelimit.lo: \
- src/util/dbg/$(am__dirstamp) \
- src/util/dbg/$(DEPDIR)/$(am__dirstamp)
-src/util/instrm/$(am__dirstamp):
- @$(MKDIR_P) src/util/instrm
- @: > src/util/instrm/$(am__dirstamp)
-src/util/instrm/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/util/instrm/$(DEPDIR)
- @: > src/util/instrm/$(DEPDIR)/$(am__dirstamp)
-src/util/instrm/lib_lib at MPILIBNAME@_la-instr.lo: \
- src/util/instrm/$(am__dirstamp) \
- src/util/instrm/$(DEPDIR)/$(am__dirstamp)
src/util/mem/$(am__dirstamp):
@$(MKDIR_P) src/util/mem
@: > src/util/mem/$(am__dirstamp)
src/util/mem/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) src/util/mem/$(DEPDIR)
@: > src/util/mem/$(DEPDIR)/$(am__dirstamp)
-src/util/mem/lib_lib at MPILIBNAME@_la-trmem.lo: \
- src/util/mem/$(am__dirstamp) \
- src/util/mem/$(DEPDIR)/$(am__dirstamp)
src/util/mem/lib_lib at MPILIBNAME@_la-handlemem.lo: \
src/util/mem/$(am__dirstamp) \
src/util/mem/$(DEPDIR)/$(am__dirstamp)
-src/util/mem/lib_lib at MPILIBNAME@_la-safestr.lo: \
- src/util/mem/$(am__dirstamp) \
- src/util/mem/$(DEPDIR)/$(am__dirstamp)
-src/util/mem/lib_lib at MPILIBNAME@_la-argstr.lo: \
- src/util/mem/$(am__dirstamp) \
- src/util/mem/$(DEPDIR)/$(am__dirstamp)
src/util/mem/lib_lib at MPILIBNAME@_la-strerror.lo: \
src/util/mem/$(am__dirstamp) \
src/util/mem/$(DEPDIR)/$(am__dirstamp)
-src/util/other/$(am__dirstamp):
- @$(MKDIR_P) src/util/other
- @: > src/util/other/$(am__dirstamp)
-src/util/other/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/util/other/$(DEPDIR)
- @: > src/util/other/$(DEPDIR)/$(am__dirstamp)
-src/util/other/lib_lib at MPILIBNAME@_la-outliers.lo: \
- src/util/other/$(am__dirstamp) \
- src/util/other/$(DEPDIR)/$(am__dirstamp)
-src/util/other/lib_lib at MPILIBNAME@_la-assert.lo: \
- src/util/other/$(am__dirstamp) \
- src/util/other/$(DEPDIR)/$(am__dirstamp)
src/util/cvar/$(am__dirstamp):
@$(MKDIR_P) src/util/cvar
@: > src/util/cvar/$(am__dirstamp)
src/util/cvar/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) src/util/cvar/$(DEPDIR)
@: > src/util/cvar/$(DEPDIR)/$(am__dirstamp)
-src/util/cvar/lib_lib at MPILIBNAME@_la-mpich_cvars.lo: \
+src/util/cvar/lib_lib at MPILIBNAME@_la-mpir_cvars.lo: \
src/util/cvar/$(am__dirstamp) \
src/util/cvar/$(DEPDIR)/$(am__dirstamp)
src/util/procmap/$(am__dirstamp):
@@ -15171,33 +14112,15 @@ src/util/procmap/$(DEPDIR)/$(am__dirstamp):
src/util/procmap/lib_lib at MPILIBNAME@_la-local_proc.lo: \
src/util/procmap/$(am__dirstamp) \
src/util/procmap/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/$(am__dirstamp):
- @$(MKDIR_P) src/util/thread
- @: > src/util/thread/$(am__dirstamp)
-src/util/thread/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/util/thread/$(DEPDIR)
- @: > src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_win.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/timers/$(am__dirstamp):
- @$(MKDIR_P) src/util/timers
- @: > src/util/timers/$(am__dirstamp)
-src/util/timers/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/util/timers/$(DEPDIR)
- @: > src/util/timers/$(DEPDIR)/$(am__dirstamp)
-src/util/timers/lib_lib at MPILIBNAME@_la-mpiu_timer.lo: \
- src/util/timers/$(am__dirstamp) \
- src/util/timers/$(DEPDIR)/$(am__dirstamp)
+src/util/assert/$(am__dirstamp):
+ @$(MKDIR_P) src/util/assert
+ @: > src/util/assert/$(am__dirstamp)
+src/util/assert/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/util/assert/$(DEPDIR)
+ @: > src/util/assert/$(DEPDIR)/$(am__dirstamp)
+src/util/assert/lib_lib at MPILIBNAME@_la-assert.lo: \
+ src/util/assert/$(am__dirstamp) \
+ src/util/assert/$(DEPDIR)/$(am__dirstamp)
src/binding/fortran/mpif_h/lib_lib at MPILIBNAME@_la-fdebug.lo: \
src/binding/fortran/mpif_h/$(am__dirstamp) \
src/binding/fortran/mpif_h/$(DEPDIR)/$(am__dirstamp)
@@ -15450,15 +14373,9 @@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-ch3i_comm.lo: \
src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-ch3i_eagernoncontig.lo: \
src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.lo: \
- src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
- src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_init.lo: \
src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.lo: \
- src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
- src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.lo: \
src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
@@ -15662,6 +14579,9 @@ src/mpid/ch3/channels/sock/src/$(am__dirstamp):
src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) src/mpid/ch3/channels/sock/src/$(DEPDIR)
@: > src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-sock.lo: \
+ src/mpid/ch3/channels/sock/src/$(am__dirstamp) \
+ src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp)
src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_finalize.lo: \
src/mpid/ch3/channels/sock/src/$(am__dirstamp) \
src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp)
@@ -15686,501 +14606,108 @@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_progress.lo: \
src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_win_fns.lo: \
src/mpid/ch3/channels/sock/src/$(am__dirstamp) \
src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/barrier/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/barrier
- @: > src/mpid/pamid/src/coll/barrier/$(am__dirstamp)
-src/mpid/pamid/src/coll/barrier/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/barrier/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/barrier/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_barrier.lo: \
- src/mpid/pamid/src/coll/barrier/$(am__dirstamp) \
- src/mpid/pamid/src/coll/barrier/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_ibarrier.lo: \
- src/mpid/pamid/src/coll/barrier/$(am__dirstamp) \
- src/mpid/pamid/src/coll/barrier/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/bcast/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/bcast
- @: > src/mpid/pamid/src/coll/bcast/$(am__dirstamp)
-src/mpid/pamid/src/coll/bcast/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/bcast/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/bcast/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_bcast.lo: \
- src/mpid/pamid/src/coll/bcast/$(am__dirstamp) \
- src/mpid/pamid/src/coll/bcast/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_ibcast.lo: \
- src/mpid/pamid/src/coll/bcast/$(am__dirstamp) \
- src/mpid/pamid/src/coll/bcast/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allreduce/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/allreduce
- @: > src/mpid/pamid/src/coll/allreduce/$(am__dirstamp)
-src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/allreduce/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_allreduce.lo: \
- src/mpid/pamid/src/coll/allreduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_iallreduce.lo: \
- src/mpid/pamid/src/coll/allreduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgather/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/allgather
- @: > src/mpid/pamid/src/coll/allgather/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgather/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/allgather/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/allgather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_allgather.lo: \
- src/mpid/pamid/src/coll/allgather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_iallgather.lo: \
- src/mpid/pamid/src/coll/allgather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgatherv/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/allgatherv
- @: > src/mpid/pamid/src/coll/allgatherv/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_allgatherv.lo: \
- src/mpid/pamid/src/coll/allgatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.lo: \
- src/mpid/pamid/src/coll/allgatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatterv/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/scatterv
- @: > src/mpid/pamid/src/coll/scatterv/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/scatterv/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_scatterv.lo: \
- src/mpid/pamid/src/coll/scatterv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_iscatterv.lo: \
- src/mpid/pamid/src/coll/scatterv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatter/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/scatter
- @: > src/mpid/pamid/src/coll/scatter/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatter/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/scatter/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/scatter/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_scatter.lo: \
- src/mpid/pamid/src/coll/scatter/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatter/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_iscatter.lo: \
- src/mpid/pamid/src/coll/scatter/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatter/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gather/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/gather
- @: > src/mpid/pamid/src/coll/gather/$(am__dirstamp)
-src/mpid/pamid/src/coll/gather/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/gather/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/gather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_gather.lo: \
- src/mpid/pamid/src/coll/gather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_igather.lo: \
- src/mpid/pamid/src/coll/gather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoall/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/alltoall
- @: > src/mpid/pamid/src/coll/alltoall/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/alltoall/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_alltoall.lo: \
- src/mpid/pamid/src/coll/alltoall/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_ialltoall.lo: \
- src/mpid/pamid/src/coll/alltoall/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallv/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/alltoallv
- @: > src/mpid/pamid/src/coll/alltoallv/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_alltoallv.lo: \
- src/mpid/pamid/src/coll/alltoallv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.lo: \
- src/mpid/pamid/src/coll/alltoallv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gatherv/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/gatherv
- @: > src/mpid/pamid/src/coll/gatherv/$(am__dirstamp)
-src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/gatherv/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_gatherv.lo: \
- src/mpid/pamid/src/coll/gatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_igatherv.lo: \
- src/mpid/pamid/src/coll/gatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scan/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/scan
- @: > src/mpid/pamid/src/coll/scan/$(am__dirstamp)
-src/mpid/pamid/src/coll/scan/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/scan/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/scan/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scan/lib_lib at MPILIBNAME@_la-mpido_scan.lo: \
- src/mpid/pamid/src/coll/scan/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scan/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/reduce/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/reduce
- @: > src/mpid/pamid/src/coll/reduce/$(am__dirstamp)
-src/mpid/pamid/src/coll/reduce/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/reduce/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/reduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_reduce.lo: \
- src/mpid/pamid/src/coll/reduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/reduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_ireduce.lo: \
- src/mpid/pamid/src/coll/reduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/reduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallw/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/alltoallw
- @: > src/mpid/pamid/src/coll/alltoallw/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallw/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.lo: \
- src/mpid/pamid/src/coll/alltoallw/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/exscan/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/exscan
- @: > src/mpid/pamid/src/coll/exscan/$(am__dirstamp)
-src/mpid/pamid/src/coll/exscan/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/exscan/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/exscan/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/exscan/lib_lib at MPILIBNAME@_la-mpido_iexscan.lo: \
- src/mpid/pamid/src/coll/exscan/$(am__dirstamp) \
- src/mpid/pamid/src/coll/exscan/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat_block/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/ired_scat_block
- @: > src/mpid/pamid/src/coll/ired_scat_block/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat_block/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.lo: \
- src/mpid/pamid/src/coll/ired_scat_block/$(am__dirstamp) \
- src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/ired_scat
- @: > src/mpid/pamid/src/coll/ired_scat/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat/lib_lib at MPILIBNAME@_la-mpido_ired_scat.lo: \
- src/mpid/pamid/src/coll/ired_scat/$(am__dirstamp) \
- src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/red_scat/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/red_scat
- @: > src/mpid/pamid/src/coll/red_scat/$(am__dirstamp)
-src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/red_scat/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/red_scat/lib_lib at MPILIBNAME@_la-mpido_red_scat.lo: \
- src/mpid/pamid/src/coll/red_scat/$(am__dirstamp) \
- src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll
- @: > src/mpid/pamid/src/coll/$(am__dirstamp)
-src/mpid/pamid/src/coll/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/coll/$(DEPDIR)
- @: > src/mpid/pamid/src/coll/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/lib_lib at MPILIBNAME@_la-coll_utils.lo: \
- src/mpid/pamid/src/coll/$(am__dirstamp) \
- src/mpid/pamid/src/coll/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/comm/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/comm
- @: > src/mpid/pamid/src/comm/$(am__dirstamp)
-src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/comm/$(DEPDIR)
- @: > src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_comm.lo: \
- src/mpid/pamid/src/comm/$(am__dirstamp) \
- src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_selectcolls.lo: \
- src/mpid/pamid/src/comm/$(am__dirstamp) \
- src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_optcolls.lo: \
- src/mpid/pamid/src/comm/$(am__dirstamp) \
- src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/misc
- @: > src/mpid/pamid/src/misc/$(am__dirstamp)
-src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/misc/$(DEPDIR)
- @: > src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_abort.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_getpname.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_mem.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_unimpl.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/mpix/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/mpix
- @: > src/mpid/pamid/src/mpix/$(am__dirstamp)
-src/mpid/pamid/src/mpix/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/mpix/$(DEPDIR)
- @: > src/mpid/pamid/src/mpix/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/mpix/lib_lib at MPILIBNAME@_la-mpix.lo: \
- src/mpid/pamid/src/mpix/$(am__dirstamp) \
- src/mpid/pamid/src/mpix/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/onesided
- @: > src/mpid/pamid/src/onesided/$(am__dirstamp)
-src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/onesided/$(DEPDIR)
- @: > src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_1s.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fence.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_free.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_pscw.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_put.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_flush.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_sync.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_attach.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_detach.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_info.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_set_info.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_reqops.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpidi_win_control.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pamix/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/pamix
- @: > src/mpid/pamid/src/pamix/$(am__dirstamp)
-src/mpid/pamid/src/pamix/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/pamix/$(DEPDIR)
- @: > src/mpid/pamid/src/pamix/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pamix/lib_lib at MPILIBNAME@_la-pamix.lo: \
- src/mpid/pamid/src/pamix/$(am__dirstamp) \
- src/mpid/pamid/src/pamix/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/pt2pt/persistent
- @: > src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)
- @: > src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_recv_init.lo: \
- src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_send_init.lo: \
- src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_startall.lo: \
- src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/pt2pt
- @: > src/mpid/pamid/src/pt2pt/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/pt2pt/$(DEPDIR)
- @: > src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_cancel.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_issend.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_recv.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_ssend.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_short.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_util.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_control.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_done.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/dyntask
- @: > src/mpid/pamid/src/dyntask/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/dyntask/$(DEPDIR)
- @: > src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_port.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_pg.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_port.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src
- @: > src/mpid/pamid/src/$(am__dirstamp)
-src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/pamid/src/$(DEPDIR)
- @: > src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_buffer.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_bufmm.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_finalize.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_init.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_iprobe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_probe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_progress.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_request.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_time.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_vc.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_env.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_util.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_mutex.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mrecv.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mprobe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_imrecv.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_improbe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_aint.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/src/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/src
+ @: > src/mpid/ch4/src/$(am__dirstamp)
+src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/src/$(DEPDIR)
+ @: > src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-ch4_globals.lo: \
+ src/mpid/ch4/src/$(am__dirstamp) \
+ src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.lo: \
+ src/mpid/ch4/src/$(am__dirstamp) \
+ src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.lo: \
+ src/mpid/ch4/src/$(am__dirstamp) \
+ src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/generic/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/generic
+ @: > src/mpid/ch4/generic/$(am__dirstamp)
+src/mpid/ch4/generic/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/generic/$(DEPDIR)
+ @: > src/mpid/ch4/generic/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_globals.lo: \
+ src/mpid/ch4/generic/$(am__dirstamp) \
+ src/mpid/ch4/generic/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_init.lo: \
+ src/mpid/ch4/generic/$(am__dirstamp) \
+ src/mpid/ch4/generic/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/ofi
+ @: > src/mpid/ch4/netmod/ofi/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/ofi/$(DEPDIR)
+ @: > src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/netmod/ofi/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/ofi/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-util.lo: \
+ src/mpid/ch4/netmod/ofi/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ucx/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/ucx
+ @: > src/mpid/ch4/netmod/ucx/$(am__dirstamp)
+src/mpid/ch4/netmod/ucx/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/ucx/$(DEPDIR)
+ @: > src/mpid/ch4/netmod/ucx/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/netmod/ucx/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ucx/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/ucx/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ucx/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/portals4/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/portals4
+ @: > src/mpid/ch4/netmod/portals4/$(am__dirstamp)
+src/mpid/ch4/netmod/portals4/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/portals4/$(DEPDIR)
+ @: > src/mpid/ch4/netmod/portals4/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/portals4/$(am__dirstamp) \
+ src/mpid/ch4/netmod/portals4/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/netmod/portals4/$(am__dirstamp) \
+ src/mpid/ch4/netmod/portals4/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/stubnm/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/stubnm
+ @: > src/mpid/ch4/netmod/stubnm/$(am__dirstamp)
+src/mpid/ch4/netmod/stubnm/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/netmod/stubnm/$(DEPDIR)
+ @: > src/mpid/ch4/netmod/stubnm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/stubnm/lib_lib at MPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/stubnm/$(am__dirstamp) \
+ src/mpid/ch4/netmod/stubnm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/stubshm/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/shm/stubshm
+ @: > src/mpid/ch4/shm/stubshm/$(am__dirstamp)
+src/mpid/ch4/shm/stubshm/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/shm/stubshm/$(DEPDIR)
+ @: > src/mpid/ch4/shm/stubshm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/shm/stubshm/$(am__dirstamp) \
+ src/mpid/ch4/shm/stubshm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/shm/stubshm/$(am__dirstamp) \
+ src/mpid/ch4/shm/stubshm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/posix/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/shm/posix
+ @: > src/mpid/ch4/shm/posix/$(am__dirstamp)
+src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/ch4/shm/posix/$(DEPDIR)
+ @: > src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/shm/posix/$(am__dirstamp) \
+ src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/shm/posix/$(am__dirstamp) \
+ src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-barrier.lo: \
+ src/mpid/ch4/shm/posix/$(am__dirstamp) \
+ src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
src/mpid/common/datatype/dataloop/$(am__dirstamp):
@$(MKDIR_P) src/mpid/common/datatype/dataloop
@: > src/mpid/common/datatype/dataloop/$(am__dirstamp)
@@ -16235,61 +14762,61 @@ src/mpid/common/datatype/$(am__dirstamp):
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) src/mpid/common/datatype/$(DEPDIR)
@: > src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_contents_support.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_contents_support.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_free.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_segment.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_segment.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_commit.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_commit.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_debug.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_debug.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_dup.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_dup.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_indexed.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_struct.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_struct.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_vector.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_vector.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.lo: \
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpir_type_flatten.lo: \
@@ -16301,18 +14828,9 @@ src/mpid/common/sched/$(am__dirstamp):
src/mpid/common/sched/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) src/mpid/common/sched/$(DEPDIR)
@: > src/mpid/common/sched/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpid_sched.lo: \
+src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpidu_sched.lo: \
src/mpid/common/sched/$(am__dirstamp) \
src/mpid/common/sched/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/sock/poll/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/common/sock/poll
- @: > src/mpid/common/sock/poll/$(am__dirstamp)
-src/mpid/common/sock/poll/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/mpid/common/sock/poll/$(DEPDIR)
- @: > src/mpid/common/sock/poll/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/sock/poll/lib_lib at MPILIBNAME@_la-sock.lo: \
- src/mpid/common/sock/poll/$(am__dirstamp) \
- src/mpid/common/sock/poll/$(DEPDIR)/$(am__dirstamp)
src/mpid/common/hcoll/$(am__dirstamp):
@$(MKDIR_P) src/mpid/common/hcoll
@: > src/mpid/common/hcoll/$(am__dirstamp)
@@ -16328,6 +14846,18 @@ src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_ops.lo: \
src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_rte.lo: \
src/mpid/common/hcoll/$(am__dirstamp) \
src/mpid/common/hcoll/$(DEPDIR)/$(am__dirstamp)
+src/mpid/common/shm/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/common/shm
+ @: > src/mpid/common/shm/$(am__dirstamp)
+src/mpid/common/shm/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mpid/common/shm/$(DEPDIR)
+ @: > src/mpid/common/shm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.lo: \
+ src/mpid/common/shm/$(am__dirstamp) \
+ src/mpid/common/shm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.lo: \
+ src/mpid/common/shm/$(am__dirstamp) \
+ src/mpid/common/shm/$(DEPDIR)/$(am__dirstamp)
src/mpi_t/lib_lib at MPILIBNAME@_la-mpit.lo: src/mpi_t/$(am__dirstamp) \
src/mpi_t/$(DEPDIR)/$(am__dirstamp)
src/nameserv/file/$(am__dirstamp):
@@ -16348,15 +14878,6 @@ src/nameserv/pmi/$(DEPDIR)/$(am__dirstamp):
src/nameserv/pmi/lib_lib at MPILIBNAME@_la-pmi_nameserv.lo: \
src/nameserv/pmi/$(am__dirstamp) \
src/nameserv/pmi/$(DEPDIR)/$(am__dirstamp)
-src/pmi/pmi2/poe/$(am__dirstamp):
- @$(MKDIR_P) src/pmi/pmi2/poe
- @: > src/pmi/pmi2/poe/$(am__dirstamp)
-src/pmi/pmi2/poe/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/pmi/pmi2/poe/$(DEPDIR)
- @: > src/pmi/pmi2/poe/$(DEPDIR)/$(am__dirstamp)
-src/pmi/pmi2/poe/lib_lib at MPILIBNAME@_la-poe2pmi.lo: \
- src/pmi/pmi2/poe/$(am__dirstamp) \
- src/pmi/pmi2/poe/$(DEPDIR)/$(am__dirstamp)
src/pmi/pmi2/simple/$(am__dirstamp):
@$(MKDIR_P) src/pmi/pmi2/simple
@: > src/pmi/pmi2/simple/$(am__dirstamp)
@@ -18638,57 +17159,21 @@ src/mpi/rma/lib_lib at PMPILIBNAME@_la-rmatypeutil.lo: \
src/mpi/topo/lib_lib at PMPILIBNAME@_la-topoutil.lo: \
src/mpi/topo/$(am__dirstamp) \
src/mpi/topo/$(DEPDIR)/$(am__dirstamp)
-src/util/dbg/lib_lib at PMPILIBNAME@_la-dbg_printf.lo: \
- src/util/dbg/$(am__dirstamp) \
- src/util/dbg/$(DEPDIR)/$(am__dirstamp)
-src/util/dbg/lib_lib at PMPILIBNAME@_la-timelimit.lo: \
- src/util/dbg/$(am__dirstamp) \
- src/util/dbg/$(DEPDIR)/$(am__dirstamp)
-src/util/instrm/lib_lib at PMPILIBNAME@_la-instr.lo: \
- src/util/instrm/$(am__dirstamp) \
- src/util/instrm/$(DEPDIR)/$(am__dirstamp)
-src/util/mem/lib_lib at PMPILIBNAME@_la-trmem.lo: \
- src/util/mem/$(am__dirstamp) \
- src/util/mem/$(DEPDIR)/$(am__dirstamp)
src/util/mem/lib_lib at PMPILIBNAME@_la-handlemem.lo: \
src/util/mem/$(am__dirstamp) \
src/util/mem/$(DEPDIR)/$(am__dirstamp)
-src/util/mem/lib_lib at PMPILIBNAME@_la-safestr.lo: \
- src/util/mem/$(am__dirstamp) \
- src/util/mem/$(DEPDIR)/$(am__dirstamp)
-src/util/mem/lib_lib at PMPILIBNAME@_la-argstr.lo: \
- src/util/mem/$(am__dirstamp) \
- src/util/mem/$(DEPDIR)/$(am__dirstamp)
src/util/mem/lib_lib at PMPILIBNAME@_la-strerror.lo: \
src/util/mem/$(am__dirstamp) \
src/util/mem/$(DEPDIR)/$(am__dirstamp)
-src/util/other/lib_lib at PMPILIBNAME@_la-outliers.lo: \
- src/util/other/$(am__dirstamp) \
- src/util/other/$(DEPDIR)/$(am__dirstamp)
-src/util/other/lib_lib at PMPILIBNAME@_la-assert.lo: \
- src/util/other/$(am__dirstamp) \
- src/util/other/$(DEPDIR)/$(am__dirstamp)
-src/util/cvar/lib_lib at PMPILIBNAME@_la-mpich_cvars.lo: \
+src/util/cvar/lib_lib at PMPILIBNAME@_la-mpir_cvars.lo: \
src/util/cvar/$(am__dirstamp) \
src/util/cvar/$(DEPDIR)/$(am__dirstamp)
src/util/procmap/lib_lib at PMPILIBNAME@_la-local_proc.lo: \
src/util/procmap/$(am__dirstamp) \
src/util/procmap/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.lo: \
- src/util/thread/$(am__dirstamp) \
- src/util/thread/$(DEPDIR)/$(am__dirstamp)
-src/util/timers/lib_lib at PMPILIBNAME@_la-mpiu_timer.lo: \
- src/util/timers/$(am__dirstamp) \
- src/util/timers/$(DEPDIR)/$(am__dirstamp)
+src/util/assert/lib_lib at PMPILIBNAME@_la-assert.lo: \
+ src/util/assert/$(am__dirstamp) \
+ src/util/assert/$(DEPDIR)/$(am__dirstamp)
src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-fdebug.lo: \
src/binding/fortran/mpif_h/$(am__dirstamp) \
src/binding/fortran/mpif_h/$(DEPDIR)/$(am__dirstamp)
@@ -18914,15 +17399,9 @@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3i_comm.lo: \
src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3i_eagernoncontig.lo: \
src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.lo: \
- src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
- src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_init.lo: \
src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.lo: \
- src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
- src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.lo: \
src/mpid/ch3/channels/nemesis/src/$(am__dirstamp) \
src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/$(am__dirstamp)
@@ -19072,6 +17551,9 @@ src/mpid/ch3/channels/nemesis/utils/monitor/lib_lib at PMPILIBNAME@_la-papi_defs.lo
src/mpid/ch3/channels/nemesis/utils/monitor/$(DEPDIR)/$(am__dirstamp)
src/mpid/ch3/channels/nemesis/utils/replacements/lib_lib at PMPILIBNAME@_la-mkstemp.lo: src/mpid/ch3/channels/nemesis/utils/replacements/$(am__dirstamp) \
src/mpid/ch3/channels/nemesis/utils/replacements/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-sock.lo: \
+ src/mpid/ch3/channels/sock/src/$(am__dirstamp) \
+ src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp)
src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo: \
src/mpid/ch3/channels/sock/src/$(am__dirstamp) \
src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp)
@@ -19096,333 +17578,60 @@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_progress.lo: \
src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_win_fns.lo: \
src/mpid/ch3/channels/sock/src/$(am__dirstamp) \
src/mpid/ch3/channels/sock/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_barrier.lo: \
- src/mpid/pamid/src/coll/barrier/$(am__dirstamp) \
- src/mpid/pamid/src/coll/barrier/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.lo: \
- src/mpid/pamid/src/coll/barrier/$(am__dirstamp) \
- src/mpid/pamid/src/coll/barrier/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_bcast.lo: \
- src/mpid/pamid/src/coll/bcast/$(am__dirstamp) \
- src/mpid/pamid/src/coll/bcast/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_ibcast.lo: \
- src/mpid/pamid/src/coll/bcast/$(am__dirstamp) \
- src/mpid/pamid/src/coll/bcast/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_allreduce.lo: \
- src/mpid/pamid/src/coll/allreduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.lo: \
- src/mpid/pamid/src/coll/allreduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_allgather.lo: \
- src/mpid/pamid/src/coll/allgather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_iallgather.lo: \
- src/mpid/pamid/src/coll/allgather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.lo: \
- src/mpid/pamid/src/coll/allgatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.lo: \
- src/mpid/pamid/src/coll/allgatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_scatterv.lo: \
- src/mpid/pamid/src/coll/scatterv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.lo: \
- src/mpid/pamid/src/coll/scatterv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_scatter.lo: \
- src/mpid/pamid/src/coll/scatter/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatter/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_iscatter.lo: \
- src/mpid/pamid/src/coll/scatter/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scatter/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_gather.lo: \
- src/mpid/pamid/src/coll/gather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_igather.lo: \
- src/mpid/pamid/src/coll/gather/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gather/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_alltoall.lo: \
- src/mpid/pamid/src/coll/alltoall/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.lo: \
- src/mpid/pamid/src/coll/alltoall/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.lo: \
- src/mpid/pamid/src/coll/alltoallv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.lo: \
- src/mpid/pamid/src/coll/alltoallv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_gatherv.lo: \
- src/mpid/pamid/src/coll/gatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_igatherv.lo: \
- src/mpid/pamid/src/coll/gatherv/$(am__dirstamp) \
- src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/scan/lib_lib at PMPILIBNAME@_la-mpido_scan.lo: \
- src/mpid/pamid/src/coll/scan/$(am__dirstamp) \
- src/mpid/pamid/src/coll/scan/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_reduce.lo: \
- src/mpid/pamid/src/coll/reduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/reduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_ireduce.lo: \
- src/mpid/pamid/src/coll/reduce/$(am__dirstamp) \
- src/mpid/pamid/src/coll/reduce/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/alltoallw/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.lo: \
- src/mpid/pamid/src/coll/alltoallw/$(am__dirstamp) \
- src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/exscan/lib_lib at PMPILIBNAME@_la-mpido_iexscan.lo: \
- src/mpid/pamid/src/coll/exscan/$(am__dirstamp) \
- src/mpid/pamid/src/coll/exscan/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat_block/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.lo: \
- src/mpid/pamid/src/coll/ired_scat_block/$(am__dirstamp) \
- src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/ired_scat/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.lo: \
- src/mpid/pamid/src/coll/ired_scat/$(am__dirstamp) \
- src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/red_scat/lib_lib at PMPILIBNAME@_la-mpido_red_scat.lo: \
- src/mpid/pamid/src/coll/red_scat/$(am__dirstamp) \
- src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/coll/lib_lib at PMPILIBNAME@_la-coll_utils.lo: \
- src/mpid/pamid/src/coll/$(am__dirstamp) \
- src/mpid/pamid/src/coll/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_comm.lo: \
- src/mpid/pamid/src/comm/$(am__dirstamp) \
- src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.lo: \
- src/mpid/pamid/src/comm/$(am__dirstamp) \
- src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_optcolls.lo: \
- src/mpid/pamid/src/comm/$(am__dirstamp) \
- src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_abort.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_getpname.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_mem.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_unimpl.lo: \
- src/mpid/pamid/src/misc/$(am__dirstamp) \
- src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/mpix/lib_lib at PMPILIBNAME@_la-mpix.lo: \
- src/mpid/pamid/src/mpix/$(am__dirstamp) \
- src/mpid/pamid/src/mpix/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_1s.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fence.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_free.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_put.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_flush.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_sync.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_attach.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_detach.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpidi_win_control.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.lo: \
- src/mpid/pamid/src/onesided/$(am__dirstamp) \
- src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pamix/lib_lib at PMPILIBNAME@_la-pamix.lo: \
- src/mpid/pamid/src/pamix/$(am__dirstamp) \
- src/mpid/pamid/src/pamix/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_recv_init.lo: \
- src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_send_init.lo: \
- src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_startall.lo: \
- src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_cancel.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_issend.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_recv.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_ssend.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_control.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_done.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.lo: \
- src/mpid/pamid/src/pt2pt/$(am__dirstamp) \
- src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_port.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_port.lo: \
- src/mpid/pamid/src/dyntask/$(am__dirstamp) \
- src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_buffer.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_finalize.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_init.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_iprobe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_probe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_progress.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_request.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_time.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_vc.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_env.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_util.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_mutex.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mrecv.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mprobe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_imrecv.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_improbe.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_aint.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.lo: \
- src/mpid/pamid/src/$(am__dirstamp) \
- src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-ch4_globals.lo: \
+ src/mpid/ch4/src/$(am__dirstamp) \
+ src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.lo: \
+ src/mpid/ch4/src/$(am__dirstamp) \
+ src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.lo: \
+ src/mpid/ch4/src/$(am__dirstamp) \
+ src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_globals.lo: \
+ src/mpid/ch4/generic/$(am__dirstamp) \
+ src/mpid/ch4/generic/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_init.lo: \
+ src/mpid/ch4/generic/$(am__dirstamp) \
+ src/mpid/ch4/generic/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/netmod/ofi/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/ofi/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-util.lo: \
+ src/mpid/ch4/netmod/ofi/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/netmod/ucx/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ucx/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/ucx/$(am__dirstamp) \
+ src/mpid/ch4/netmod/ucx/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/portals4/$(am__dirstamp) \
+ src/mpid/ch4/netmod/portals4/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/netmod/portals4/$(am__dirstamp) \
+ src/mpid/ch4/netmod/portals4/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/netmod/stubnm/lib_lib at PMPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/netmod/stubnm/$(am__dirstamp) \
+ src/mpid/ch4/netmod/stubnm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/shm/stubshm/$(am__dirstamp) \
+ src/mpid/ch4/shm/stubshm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/shm/stubshm/$(am__dirstamp) \
+ src/mpid/ch4/shm/stubshm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-globals.lo: \
+ src/mpid/ch4/shm/posix/$(am__dirstamp) \
+ src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-func_table.lo: \
+ src/mpid/ch4/shm/posix/$(am__dirstamp) \
+ src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
+src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-barrier.lo: \
+ src/mpid/ch4/shm/posix/$(am__dirstamp) \
+ src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-darray_support.lo: \
src/mpid/common/datatype/dataloop/$(am__dirstamp) \
src/mpid/common/datatype/dataloop/$(DEPDIR)/$(am__dirstamp)
@@ -19465,72 +17674,69 @@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-segment_packunpack.lo:
src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-subarray_support.lo: \
src/mpid/common/datatype/dataloop/$(am__dirstamp) \
src/mpid/common/datatype/dataloop/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_contents_support.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_segment.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_segment.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_commit.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_debug.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_dup.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_struct.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_vector.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.lo: \
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.lo: \
src/mpid/common/datatype/$(am__dirstamp) \
src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpid_sched.lo: \
+src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpidu_sched.lo: \
src/mpid/common/sched/$(am__dirstamp) \
src/mpid/common/sched/$(DEPDIR)/$(am__dirstamp)
-src/mpid/common/sock/poll/lib_lib at PMPILIBNAME@_la-sock.lo: \
- src/mpid/common/sock/poll/$(am__dirstamp) \
- src/mpid/common/sock/poll/$(DEPDIR)/$(am__dirstamp)
src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_init.lo: \
src/mpid/common/hcoll/$(am__dirstamp) \
src/mpid/common/hcoll/$(DEPDIR)/$(am__dirstamp)
@@ -19540,6 +17746,12 @@ src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_ops.lo: \
src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_rte.lo: \
src/mpid/common/hcoll/$(am__dirstamp) \
src/mpid/common/hcoll/$(DEPDIR)/$(am__dirstamp)
+src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.lo: \
+ src/mpid/common/shm/$(am__dirstamp) \
+ src/mpid/common/shm/$(DEPDIR)/$(am__dirstamp)
+src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.lo: \
+ src/mpid/common/shm/$(am__dirstamp) \
+ src/mpid/common/shm/$(DEPDIR)/$(am__dirstamp)
src/mpi_t/lib_lib at PMPILIBNAME@_la-mpit.lo: src/mpi_t/$(am__dirstamp) \
src/mpi_t/$(DEPDIR)/$(am__dirstamp)
src/nameserv/file/lib_lib at PMPILIBNAME@_la-file_nameserv.lo: \
@@ -19548,9 +17760,6 @@ src/nameserv/file/lib_lib at PMPILIBNAME@_la-file_nameserv.lo: \
src/nameserv/pmi/lib_lib at PMPILIBNAME@_la-pmi_nameserv.lo: \
src/nameserv/pmi/$(am__dirstamp) \
src/nameserv/pmi/$(DEPDIR)/$(am__dirstamp)
-src/pmi/pmi2/poe/lib_lib at PMPILIBNAME@_la-poe2pmi.lo: \
- src/pmi/pmi2/poe/$(am__dirstamp) \
- src/pmi/pmi2/poe/$(DEPDIR)/$(am__dirstamp)
src/pmi/pmi2/simple/lib_lib at PMPILIBNAME@_la-simple2pmi.lo: \
src/pmi/pmi2/simple/$(am__dirstamp) \
src/pmi/pmi2/simple/$(DEPDIR)/$(am__dirstamp)
@@ -19604,6 +17813,48 @@ src/mpi/debugger/src_mpi_debugger_libdbginitdummy_la-dbginit.lo: \
src/mpi/debugger/libdbginitdummy.la: $(src_mpi_debugger_libdbginitdummy_la_OBJECTS) $(src_mpi_debugger_libdbginitdummy_la_DEPENDENCIES) $(EXTRA_src_mpi_debugger_libdbginitdummy_la_DEPENDENCIES) src/mpi/debugger/$(am__dirstamp)
$(AM_V_CCLD)$(src_mpi_debugger_libdbginitdummy_la_LINK) $(am_src_mpi_debugger_libdbginitdummy_la_rpath) $(src_mpi_debugger_libdbginitdummy_la_OBJECTS) $(src_mpi_debugger_libdbginitdummy_la_LIBADD) $(LIBS)
+src/pm/util/$(am__dirstamp):
+ @$(MKDIR_P) src/pm/util
+ @: > src/pm/util/$(am__dirstamp)
+src/pm/util/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/pm/util/$(DEPDIR)
+ @: > src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-cmnargs.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-process.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-ioloop.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-pmiserv.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-labelout.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-env.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-newsession.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-rm.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-pmiport.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-dbgiface.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+src/pm/util/src_pm_util_libmpiexec_la-simple_pmiutil2.lo: \
+ src/pm/util/$(am__dirstamp) \
+ src/pm/util/$(DEPDIR)/$(am__dirstamp)
+
+src/pm/util/libmpiexec.la: $(src_pm_util_libmpiexec_la_OBJECTS) $(src_pm_util_libmpiexec_la_DEPENDENCIES) $(EXTRA_src_pm_util_libmpiexec_la_DEPENDENCIES) src/pm/util/$(am__dirstamp)
+ $(AM_V_CCLD)$(src_pm_util_libmpiexec_la_LINK) $(am_src_pm_util_libmpiexec_la_rpath) $(src_pm_util_libmpiexec_la_OBJECTS) $(src_pm_util_libmpiexec_la_LIBADD) $(LIBS)
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
@@ -19683,14 +17934,14 @@ src/pm/gforker/src_pm_gforker_mpiexec-mpiexec.$(OBJEXT): \
src/pm/gforker/mpiexec$(EXEEXT): $(src_pm_gforker_mpiexec_OBJECTS) $(src_pm_gforker_mpiexec_DEPENDENCIES) $(EXTRA_src_pm_gforker_mpiexec_DEPENDENCIES) src/pm/gforker/$(am__dirstamp)
@rm -f src/pm/gforker/mpiexec$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(src_pm_gforker_mpiexec_OBJECTS) $(src_pm_gforker_mpiexec_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(src_pm_gforker_mpiexec_LINK) $(src_pm_gforker_mpiexec_OBJECTS) $(src_pm_gforker_mpiexec_LDADD) $(LIBS)
src/pm/gforker/src_pm_gforker_mpiexec_gforker-mpiexec.$(OBJEXT): \
src/pm/gforker/$(am__dirstamp) \
src/pm/gforker/$(DEPDIR)/$(am__dirstamp)
src/pm/gforker/mpiexec.gforker$(EXEEXT): $(src_pm_gforker_mpiexec_gforker_OBJECTS) $(src_pm_gforker_mpiexec_gforker_DEPENDENCIES) $(EXTRA_src_pm_gforker_mpiexec_gforker_DEPENDENCIES) src/pm/gforker/$(am__dirstamp)
@rm -f src/pm/gforker/mpiexec.gforker$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(src_pm_gforker_mpiexec_gforker_OBJECTS) $(src_pm_gforker_mpiexec_gforker_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(src_pm_gforker_mpiexec_gforker_LINK) $(src_pm_gforker_mpiexec_gforker_OBJECTS) $(src_pm_gforker_mpiexec_gforker_LDADD) $(LIBS)
src/pm/remshell/$(am__dirstamp):
@$(MKDIR_P) src/pm/remshell
@: > src/pm/remshell/$(am__dirstamp)
@@ -19703,14 +17954,14 @@ src/pm/remshell/src_pm_remshell_mpiexec-mpiexec.$(OBJEXT): \
src/pm/remshell/mpiexec$(EXEEXT): $(src_pm_remshell_mpiexec_OBJECTS) $(src_pm_remshell_mpiexec_DEPENDENCIES) $(EXTRA_src_pm_remshell_mpiexec_DEPENDENCIES) src/pm/remshell/$(am__dirstamp)
@rm -f src/pm/remshell/mpiexec$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(src_pm_remshell_mpiexec_OBJECTS) $(src_pm_remshell_mpiexec_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(src_pm_remshell_mpiexec_LINK) $(src_pm_remshell_mpiexec_OBJECTS) $(src_pm_remshell_mpiexec_LDADD) $(LIBS)
src/pm/remshell/src_pm_remshell_mpiexec_remshell-mpiexec.$(OBJEXT): \
src/pm/remshell/$(am__dirstamp) \
src/pm/remshell/$(DEPDIR)/$(am__dirstamp)
src/pm/remshell/mpiexec.remshell$(EXEEXT): $(src_pm_remshell_mpiexec_remshell_OBJECTS) $(src_pm_remshell_mpiexec_remshell_DEPENDENCIES) $(EXTRA_src_pm_remshell_mpiexec_remshell_DEPENDENCIES) src/pm/remshell/$(am__dirstamp)
@rm -f src/pm/remshell/mpiexec.remshell$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(src_pm_remshell_mpiexec_remshell_OBJECTS) $(src_pm_remshell_mpiexec_remshell_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(src_pm_remshell_mpiexec_remshell_LINK) $(src_pm_remshell_mpiexec_remshell_OBJECTS) $(src_pm_remshell_mpiexec_remshell_LDADD) $(LIBS)
src/util/logging/rlog/irlog2rlog.$(OBJEXT): \
src/util/logging/rlog/$(am__dirstamp) \
src/util/logging/rlog/$(DEPDIR)/$(am__dirstamp)
@@ -19845,6 +18096,22 @@ mostlyclean-compile:
-rm -f src/mpid/ch3/util/ftb/*.lo
-rm -f src/mpid/ch3/util/sock/*.$(OBJEXT)
-rm -f src/mpid/ch3/util/sock/*.lo
+ -rm -f src/mpid/ch4/generic/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/generic/*.lo
+ -rm -f src/mpid/ch4/netmod/ofi/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/netmod/ofi/*.lo
+ -rm -f src/mpid/ch4/netmod/portals4/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/netmod/portals4/*.lo
+ -rm -f src/mpid/ch4/netmod/stubnm/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/netmod/stubnm/*.lo
+ -rm -f src/mpid/ch4/netmod/ucx/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/netmod/ucx/*.lo
+ -rm -f src/mpid/ch4/shm/posix/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/shm/posix/*.lo
+ -rm -f src/mpid/ch4/shm/stubshm/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/shm/stubshm/*.lo
+ -rm -f src/mpid/ch4/src/*.$(OBJEXT)
+ -rm -f src/mpid/ch4/src/*.lo
-rm -f src/mpid/common/datatype/*.$(OBJEXT)
-rm -f src/mpid/common/datatype/*.lo
-rm -f src/mpid/common/datatype/dataloop/*.$(OBJEXT)
@@ -19853,64 +18120,8 @@ mostlyclean-compile:
-rm -f src/mpid/common/hcoll/*.lo
-rm -f src/mpid/common/sched/*.$(OBJEXT)
-rm -f src/mpid/common/sched/*.lo
- -rm -f src/mpid/common/sock/poll/*.$(OBJEXT)
- -rm -f src/mpid/common/sock/poll/*.lo
- -rm -f src/mpid/pamid/src/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/*.lo
- -rm -f src/mpid/pamid/src/coll/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/*.lo
- -rm -f src/mpid/pamid/src/coll/allgather/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/allgather/*.lo
- -rm -f src/mpid/pamid/src/coll/allgatherv/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/allgatherv/*.lo
- -rm -f src/mpid/pamid/src/coll/allreduce/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/allreduce/*.lo
- -rm -f src/mpid/pamid/src/coll/alltoall/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/alltoall/*.lo
- -rm -f src/mpid/pamid/src/coll/alltoallv/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/alltoallv/*.lo
- -rm -f src/mpid/pamid/src/coll/alltoallw/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/alltoallw/*.lo
- -rm -f src/mpid/pamid/src/coll/barrier/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/barrier/*.lo
- -rm -f src/mpid/pamid/src/coll/bcast/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/bcast/*.lo
- -rm -f src/mpid/pamid/src/coll/exscan/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/exscan/*.lo
- -rm -f src/mpid/pamid/src/coll/gather/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/gather/*.lo
- -rm -f src/mpid/pamid/src/coll/gatherv/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/gatherv/*.lo
- -rm -f src/mpid/pamid/src/coll/ired_scat/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/ired_scat/*.lo
- -rm -f src/mpid/pamid/src/coll/ired_scat_block/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/ired_scat_block/*.lo
- -rm -f src/mpid/pamid/src/coll/red_scat/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/red_scat/*.lo
- -rm -f src/mpid/pamid/src/coll/reduce/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/reduce/*.lo
- -rm -f src/mpid/pamid/src/coll/scan/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/scan/*.lo
- -rm -f src/mpid/pamid/src/coll/scatter/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/scatter/*.lo
- -rm -f src/mpid/pamid/src/coll/scatterv/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/coll/scatterv/*.lo
- -rm -f src/mpid/pamid/src/comm/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/comm/*.lo
- -rm -f src/mpid/pamid/src/dyntask/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/dyntask/*.lo
- -rm -f src/mpid/pamid/src/misc/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/misc/*.lo
- -rm -f src/mpid/pamid/src/mpix/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/mpix/*.lo
- -rm -f src/mpid/pamid/src/onesided/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/onesided/*.lo
- -rm -f src/mpid/pamid/src/pamix/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/pamix/*.lo
- -rm -f src/mpid/pamid/src/pt2pt/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/pt2pt/*.lo
- -rm -f src/mpid/pamid/src/pt2pt/persistent/*.$(OBJEXT)
- -rm -f src/mpid/pamid/src/pt2pt/persistent/*.lo
+ -rm -f src/mpid/common/shm/*.$(OBJEXT)
+ -rm -f src/mpid/common/shm/*.lo
-rm -f src/mutex/*.$(OBJEXT)
-rm -f src/mutex/*.lo
-rm -f src/nameserv/file/*.$(OBJEXT)
@@ -19920,30 +18131,21 @@ mostlyclean-compile:
-rm -f src/pm/gforker/*.$(OBJEXT)
-rm -f src/pm/remshell/*.$(OBJEXT)
-rm -f src/pm/util/*.$(OBJEXT)
- -rm -f src/pmi/pmi2/poe/*.$(OBJEXT)
- -rm -f src/pmi/pmi2/poe/*.lo
+ -rm -f src/pm/util/*.lo
-rm -f src/pmi/pmi2/simple/*.$(OBJEXT)
-rm -f src/pmi/pmi2/simple/*.lo
-rm -f src/pmi/simple/*.$(OBJEXT)
-rm -f src/pmi/simple/*.lo
+ -rm -f src/util/assert/*.$(OBJEXT)
+ -rm -f src/util/assert/*.lo
-rm -f src/util/cvar/*.$(OBJEXT)
-rm -f src/util/cvar/*.lo
- -rm -f src/util/dbg/*.$(OBJEXT)
- -rm -f src/util/dbg/*.lo
- -rm -f src/util/instrm/*.$(OBJEXT)
- -rm -f src/util/instrm/*.lo
-rm -f src/util/logging/rlog/*.$(OBJEXT)
-rm -f src/util/logging/rlog/*.lo
-rm -f src/util/mem/*.$(OBJEXT)
-rm -f src/util/mem/*.lo
- -rm -f src/util/other/*.$(OBJEXT)
- -rm -f src/util/other/*.lo
-rm -f src/util/procmap/*.$(OBJEXT)
-rm -f src/util/procmap/*.lo
- -rm -f src/util/thread/*.$(OBJEXT)
- -rm -f src/util/thread/*.lo
- -rm -f src/util/timers/*.$(OBJEXT)
- -rm -f src/util/timers/*.lo
distclean-compile:
-rm -f *.tab.c
@@ -21690,8 +19892,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3_win_fns.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3i_comm.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3i_eagernoncontig.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_ckpt.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_debug.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_finalize.Plo at am__quote@
@@ -21715,8 +19915,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_win_fns.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3i_comm.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3i_eagernoncontig.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_ckpt.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_debug.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_finalize.Plo at am__quote@
@@ -21741,6 +19939,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3_istartmsgv.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3_progress.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3_win_fns.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_finalize.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_init.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_isend.Plo at am__quote@
@@ -21749,6 +19948,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_istartmsgv.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_progress.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_win_fns.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3u_buffer.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3u_comm.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3u_comm_spawn_multiple.Plo at am__quote@
@@ -21869,45 +20069,81 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/util/sock/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3u_connect_sock.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/util/sock/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3u_getinterfaces.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch3/util/sock/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3u_init_sock.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_contents_support.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_free.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_segment.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_commit.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_debug.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_dup.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_indexed.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_struct.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_vector.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_init.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_init.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-util.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-util.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-barrier.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-barrier.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch4_globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch4_globals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_contents_support.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_segment.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_commit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_debug.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_dup.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_struct.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_vector.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpir_type_flatten.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_contents_support.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_segment.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_commit.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_debug.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_dup.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_struct.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_vector.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_segment.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/dataloop/$(DEPDIR)/lib_lib at MPILIBNAME@_la-darray_support.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/datatype/dataloop/$(DEPDIR)/lib_lib at MPILIBNAME@_la-dataloop.Plo at am__quote@
@@ -21943,228 +20179,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/hcoll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-hcoll_init.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/hcoll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-hcoll_ops.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/hcoll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-hcoll_rte.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_sched.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_sched.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_aint.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_buffer.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_finalize.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_improbe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_imrecv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_init.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_iprobe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mprobe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mrecv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_probe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_progress.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_request.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_time.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_vc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_bufmm.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_env.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_mutex.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_util.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_aint.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_buffer.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_finalize.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_improbe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_imrecv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_init.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_iprobe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mprobe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mrecv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_probe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_progress.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_request.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_time.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_vc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_env.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_mutex.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_util.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-coll_utils.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-coll_utils.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allreduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallreduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allreduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoall.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoall.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoall.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoallv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_barrier.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibarrier.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_barrier.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_bcast.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibcast.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_bcast.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibcast.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iexscan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iexscan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igather.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igatherv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_red_scat.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_red_scat.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ireduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_reduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ireduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_reduce.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatter.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatter.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatter.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatter.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatterv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatterv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatterv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_optcolls.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_selectcolls.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_optcolls.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_port.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_port.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_port.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_port.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_abort.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_getpname.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mem.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_unimpl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_abort.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_getpname.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mem.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_unimpl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpix.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpix.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_1s.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_attach.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_detach.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fence.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_flush.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_free.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_info.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_pscw.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_put.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_reqops.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_set_info.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_sync.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_win_control.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_1s.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_attach.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_detach.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fence.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_flush.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_free.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_put.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_sync.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_win_control.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-pamix.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-pamix.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_cancel.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_issend.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ssend.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_short.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_util.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_control.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_done.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_cancel.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_issend.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ssend.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_control.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_done.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv_init.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_send_init.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_startall.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv_init.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_send_init.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_startall.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_sched.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_sched.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mutex/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mutex_create.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mutex/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mutex_free.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/mutex/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mutex_lock.Plo at am__quote@
@@ -22181,20 +20201,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/pm/gforker/$(DEPDIR)/src_pm_gforker_mpiexec_gforker-mpiexec.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/pm/remshell/$(DEPDIR)/src_pm_remshell_mpiexec-mpiexec.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/pm/remshell/$(DEPDIR)/src_pm_remshell_mpiexec_remshell-mpiexec.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-cmnargs.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-dbgiface.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-env.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-ioloop.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-labelout.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-newsession.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiport.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiserv.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-process.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-rm.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-safestr2.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-simple_pmiutil2.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at MPILIBNAME@_la-poe2pmi.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-poe2pmi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-cmnargs.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-dbgiface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-env.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-ioloop.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-labelout.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-newsession.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiport.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiserv.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-process.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-rm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-simple_pmiutil2.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at MPILIBNAME@_la-simple2pmi.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at MPILIBNAME@_la-simple_pmiutil.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-simple2pmi.Plo at am__quote@
@@ -22203,14 +20220,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/pmi/simple/$(DEPDIR)/lib_lib at MPILIBNAME@_la-simple_pmiutil.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/pmi/simple/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-simple_pmi.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/pmi/simple/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-simple_pmiutil.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpich_cvars.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpich_cvars.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-dbg_printf.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-timelimit.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-dbg_printf.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-timelimit.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/instrm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-instr.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/instrm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-instr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/util/assert/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/util/assert/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpir_cvars.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpir_cvars.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/logging/rlog/$(DEPDIR)/irlog2rlog.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/logging/rlog/$(DEPDIR)/irlogutil.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/logging/rlog/$(DEPDIR)/printirlog.Po at am__quote@
@@ -22218,32 +20231,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at src/util/logging/rlog/$(DEPDIR)/rlog.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/logging/rlog/$(DEPDIR)/rlogtime.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/logging/rlog/$(DEPDIR)/rlogutil.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-argstr.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-handlemem.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-safestr.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-strerror.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-trmem.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-argstr.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-handlemem.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-safestr.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-strerror.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-trmem.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-outliers.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-outliers.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/procmap/$(DEPDIR)/lib_lib at MPILIBNAME@_la-local_proc.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at src/util/procmap/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-local_proc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_win.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/timers/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_timer.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/util/timers/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_timer.Plo at am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -22269,174 +20262,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
-src/pm/util/src_pm_util_libmpiexec_a-cmnargs.o: src/pm/util/cmnargs.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-cmnargs.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-cmnargs.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-cmnargs.o `test -f 'src/pm/util/cmnargs.c' || echo '$(srcdir)/'`src/pm/util/cmnargs.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-cmnargs.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-cmnargs.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/cmnargs.c' object='src/pm/util/src_pm_util_libmpiexec_a-cmnargs.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-cmnargs.o `test -f 'src/pm/util/cmnargs.c' || echo '$(srcdir)/'`src/pm/util/cmnargs.c
-
-src/pm/util/src_pm_util_libmpiexec_a-cmnargs.obj: src/pm/util/cmnargs.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-cmnargs.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-cmnargs.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-cmnargs.obj `if test -f 'src/pm/util/cmnargs.c'; then $(CYGPATH_W) 'src/pm/util/cmnargs.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/cmnargs.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-cmnargs.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-cmnargs.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/cmnargs.c' object='src/pm/util/src_pm_util_libmpiexec_a-cmnargs.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-cmnargs.obj `if test -f 'src/pm/util/cmnargs.c'; then $(CYGPATH_W) 'src/pm/util/cmnargs.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/cmnargs.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-process.o: src/pm/util/process.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-process.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-process.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-process.o `test -f 'src/pm/util/process.c' || echo '$(srcdir)/'`src/pm/util/process.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-process.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-process.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/process.c' object='src/pm/util/src_pm_util_libmpiexec_a-process.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-process.o `test -f 'src/pm/util/process.c' || echo '$(srcdir)/'`src/pm/util/process.c
-
-src/pm/util/src_pm_util_libmpiexec_a-process.obj: src/pm/util/process.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-process.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-process.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-process.obj `if test -f 'src/pm/util/process.c'; then $(CYGPATH_W) 'src/pm/util/process.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/process.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-process.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-process.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/process.c' object='src/pm/util/src_pm_util_libmpiexec_a-process.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-process.obj `if test -f 'src/pm/util/process.c'; then $(CYGPATH_W) 'src/pm/util/process.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/process.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-ioloop.o: src/pm/util/ioloop.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-ioloop.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-ioloop.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-ioloop.o `test -f 'src/pm/util/ioloop.c' || echo '$(srcdir)/'`src/pm/util/ioloop.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-ioloop.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-ioloop.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/ioloop.c' object='src/pm/util/src_pm_util_libmpiexec_a-ioloop.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-ioloop.o `test -f 'src/pm/util/ioloop.c' || echo '$(srcdir)/'`src/pm/util/ioloop.c
-
-src/pm/util/src_pm_util_libmpiexec_a-ioloop.obj: src/pm/util/ioloop.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-ioloop.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-ioloop.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-ioloop.obj `if test -f 'src/pm/util/ioloop.c'; then $(CYGPATH_W) 'src/pm/util/ioloop.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/ioloop.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-ioloop.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-ioloop.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/ioloop.c' object='src/pm/util/src_pm_util_libmpiexec_a-ioloop.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-ioloop.obj `if test -f 'src/pm/util/ioloop.c'; then $(CYGPATH_W) 'src/pm/util/ioloop.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/ioloop.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-pmiserv.o: src/pm/util/pmiserv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-pmiserv.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiserv.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiserv.o `test -f 'src/pm/util/pmiserv.c' || echo '$(srcdir)/'`src/pm/util/pmiserv.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiserv.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiserv.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/pmiserv.c' object='src/pm/util/src_pm_util_libmpiexec_a-pmiserv.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiserv.o `test -f 'src/pm/util/pmiserv.c' || echo '$(srcdir)/'`src/pm/util/pmiserv.c
-
-src/pm/util/src_pm_util_libmpiexec_a-pmiserv.obj: src/pm/util/pmiserv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-pmiserv.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiserv.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiserv.obj `if test -f 'src/pm/util/pmiserv.c'; then $(CYGPATH_W) 'src/pm/util/pmiserv.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/pmiserv.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiserv.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiserv.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/pmiserv.c' object='src/pm/util/src_pm_util_libmpiexec_a-pmiserv.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiserv.obj `if test -f 'src/pm/util/pmiserv.c'; then $(CYGPATH_W) 'src/pm/util/pmiserv.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/pmiserv.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-labelout.o: src/pm/util/labelout.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-labelout.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-labelout.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-labelout.o `test -f 'src/pm/util/labelout.c' || echo '$(srcdir)/'`src/pm/util/labelout.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-labelout.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-labelout.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/labelout.c' object='src/pm/util/src_pm_util_libmpiexec_a-labelout.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-labelout.o `test -f 'src/pm/util/labelout.c' || echo '$(srcdir)/'`src/pm/util/labelout.c
-
-src/pm/util/src_pm_util_libmpiexec_a-labelout.obj: src/pm/util/labelout.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-labelout.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-labelout.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-labelout.obj `if test -f 'src/pm/util/labelout.c'; then $(CYGPATH_W) 'src/pm/util/labelout.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/labelout.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-labelout.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-labelout.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/labelout.c' object='src/pm/util/src_pm_util_libmpiexec_a-labelout.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-labelout.obj `if test -f 'src/pm/util/labelout.c'; then $(CYGPATH_W) 'src/pm/util/labelout.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/labelout.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-env.o: src/pm/util/env.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-env.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-env.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-env.o `test -f 'src/pm/util/env.c' || echo '$(srcdir)/'`src/pm/util/env.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-env.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-env.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/env.c' object='src/pm/util/src_pm_util_libmpiexec_a-env.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-env.o `test -f 'src/pm/util/env.c' || echo '$(srcdir)/'`src/pm/util/env.c
-
-src/pm/util/src_pm_util_libmpiexec_a-env.obj: src/pm/util/env.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-env.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-env.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-env.obj `if test -f 'src/pm/util/env.c'; then $(CYGPATH_W) 'src/pm/util/env.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/env.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-env.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-env.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/env.c' object='src/pm/util/src_pm_util_libmpiexec_a-env.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-env.obj `if test -f 'src/pm/util/env.c'; then $(CYGPATH_W) 'src/pm/util/env.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/env.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-newsession.o: src/pm/util/newsession.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-newsession.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-newsession.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-newsession.o `test -f 'src/pm/util/newsession.c' || echo '$(srcdir)/'`src/pm/util/newsession.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-newsession.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-newsession.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/newsession.c' object='src/pm/util/src_pm_util_libmpiexec_a-newsession.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-newsession.o `test -f 'src/pm/util/newsession.c' || echo '$(srcdir)/'`src/pm/util/newsession.c
-
-src/pm/util/src_pm_util_libmpiexec_a-newsession.obj: src/pm/util/newsession.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-newsession.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-newsession.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-newsession.obj `if test -f 'src/pm/util/newsession.c'; then $(CYGPATH_W) 'src/pm/util/newsession.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/newses [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-newsession.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-newsession.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/newsession.c' object='src/pm/util/src_pm_util_libmpiexec_a-newsession.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-newsession.obj `if test -f 'src/pm/util/newsession.c'; then $(CYGPATH_W) 'src/pm/util/newsession.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/newsession.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-rm.o: src/pm/util/rm.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-rm.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-rm.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-rm.o `test -f 'src/pm/util/rm.c' || echo '$(srcdir)/'`src/pm/util/rm.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-rm.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-rm.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/rm.c' object='src/pm/util/src_pm_util_libmpiexec_a-rm.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-rm.o `test -f 'src/pm/util/rm.c' || echo '$(srcdir)/'`src/pm/util/rm.c
-
-src/pm/util/src_pm_util_libmpiexec_a-rm.obj: src/pm/util/rm.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-rm.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-rm.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-rm.obj `if test -f 'src/pm/util/rm.c'; then $(CYGPATH_W) 'src/pm/util/rm.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/rm.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-rm.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-rm.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/rm.c' object='src/pm/util/src_pm_util_libmpiexec_a-rm.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-rm.obj `if test -f 'src/pm/util/rm.c'; then $(CYGPATH_W) 'src/pm/util/rm.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/rm.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-pmiport.o: src/pm/util/pmiport.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-pmiport.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiport.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiport.o `test -f 'src/pm/util/pmiport.c' || echo '$(srcdir)/'`src/pm/util/pmiport.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiport.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiport.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/pmiport.c' object='src/pm/util/src_pm_util_libmpiexec_a-pmiport.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiport.o `test -f 'src/pm/util/pmiport.c' || echo '$(srcdir)/'`src/pm/util/pmiport.c
-
-src/pm/util/src_pm_util_libmpiexec_a-pmiport.obj: src/pm/util/pmiport.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-pmiport.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiport.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiport.obj `if test -f 'src/pm/util/pmiport.c'; then $(CYGPATH_W) 'src/pm/util/pmiport.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/pmiport.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiport.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-pmiport.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/pmiport.c' object='src/pm/util/src_pm_util_libmpiexec_a-pmiport.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-pmiport.obj `if test -f 'src/pm/util/pmiport.c'; then $(CYGPATH_W) 'src/pm/util/pmiport.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/pmiport.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-dbgiface.o: src/pm/util/dbgiface.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-dbgiface.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-dbgiface.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-dbgiface.o `test -f 'src/pm/util/dbgiface.c' || echo '$(srcdir)/'`src/pm/util/dbgiface.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-dbgiface.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-dbgiface.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/dbgiface.c' object='src/pm/util/src_pm_util_libmpiexec_a-dbgiface.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-dbgiface.o `test -f 'src/pm/util/dbgiface.c' || echo '$(srcdir)/'`src/pm/util/dbgiface.c
-
-src/pm/util/src_pm_util_libmpiexec_a-dbgiface.obj: src/pm/util/dbgiface.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-dbgiface.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-dbgiface.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-dbgiface.obj `if test -f 'src/pm/util/dbgiface.c'; then $(CYGPATH_W) 'src/pm/util/dbgiface.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/dbgiface.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-dbgiface.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-dbgiface.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/dbgiface.c' object='src/pm/util/src_pm_util_libmpiexec_a-dbgiface.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-dbgiface.obj `if test -f 'src/pm/util/dbgiface.c'; then $(CYGPATH_W) 'src/pm/util/dbgiface.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/dbgiface.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-safestr2.o: src/pm/util/safestr2.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-safestr2.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-safestr2.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-safestr2.o `test -f 'src/pm/util/safestr2.c' || echo '$(srcdir)/'`src/pm/util/safestr2.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-safestr2.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-safestr2.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/safestr2.c' object='src/pm/util/src_pm_util_libmpiexec_a-safestr2.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-safestr2.o `test -f 'src/pm/util/safestr2.c' || echo '$(srcdir)/'`src/pm/util/safestr2.c
-
-src/pm/util/src_pm_util_libmpiexec_a-safestr2.obj: src/pm/util/safestr2.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-safestr2.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-safestr2.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-safestr2.obj `if test -f 'src/pm/util/safestr2.c'; then $(CYGPATH_W) 'src/pm/util/safestr2.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/safestr2.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-safestr2.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-safestr2.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/safestr2.c' object='src/pm/util/src_pm_util_libmpiexec_a-safestr2.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-safestr2.obj `if test -f 'src/pm/util/safestr2.c'; then $(CYGPATH_W) 'src/pm/util/safestr2.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/safestr2.c'; fi`
-
-src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.o: src/pm/util/simple_pmiutil2.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.o -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-simple_pmiutil2.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.o `test -f 'src/pm/util/simple_pmiutil2.c' || echo '$(srcdir)/'`src/pm/util/simple_pmiutil2.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-simple_pmiutil2.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-simple_pmiutil2.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/simple_pmiutil2.c' object='src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.o `test -f 'src/pm/util/simple_pmiutil2.c' || echo '$(srcdir)/'`src/pm/util/simple_pmiutil2.c
-
-src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.obj: src/pm/util/simple_pmiutil2.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.obj -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-simple_pmiutil2.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.obj `if test -f 'src/pm/util/simple_pmiutil2.c'; then $(CYGPATH_W) 'src/pm/util/simple_pmiutil2.c'; else $(CYGPATH_W) '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-simple_pmiutil2.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_a-simple_pmiutil2.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/simple_pmiutil2.c' object='src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_a_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_a_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_a-simple_pmiutil2.obj `if test -f 'src/pm/util/simple_pmiutil2.c'; then $(CYGPATH_W) 'src/pm/util/simple_pmiutil2.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/util/simple_pmiutil2.c'; fi`
-
src/binding/fortran/mpif_h/lib_lib at MPIFCLIBNAME@_la-sendf.lo: src/binding/fortran/mpif_h/sendf.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPIFCLIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/binding/fortran/mpif_h/lib_lib at MPIFCLIBNAME@_la-sendf.lo -MD -MP -MF src/binding/fortran/mpif_h/$(DEPDIR)/lib_lib at MPIFCLIBNAME@_la-sendf.Tpo -c -o src/binding/fortran/mpif_h/lib_lib at MPIFCLIBNAME@_la-sendf.lo `test -f 'src/binding/fortran/mpif_h/sendf.c' [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/binding/fortran/mpif_h/$(DEPDIR)/lib_lib at MPIFCLIBNAME@_la-sendf.Tpo src/binding/fortran/mpif_h/$(DEPDIR)/lib_lib at MPIFCLIBNAME@_la-sendf.Plo
@@ -28646,34 +26471,6 @@ src/mpi/topo/lib_lib at MPILIBNAME@_la-topoutil.lo: src/mpi/topo/topoutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpi/topo/lib_lib at MPILIBNAME@_la-topoutil.lo `test -f 'src/mpi/topo/topoutil.c' || echo '$(srcdir)/'`src/mpi/topo/topoutil.c
-src/util/dbg/lib_lib at MPILIBNAME@_la-dbg_printf.lo: src/util/dbg/dbg_printf.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/dbg/lib_lib at MPILIBNAME@_la-dbg_printf.lo -MD -MP -MF src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-dbg_printf.Tpo -c -o src/util/dbg/lib_lib at MPILIBNAME@_la-dbg_printf.lo `test -f 'src/util/dbg/dbg_printf.c' || echo '$(srcdir)/'`src/util/dbg/dbg_printf.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-dbg_printf.Tpo src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-dbg_printf.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/dbg/dbg_printf.c' object='src/util/dbg/lib_lib at MPILIBNAME@_la-dbg_printf.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/dbg/lib_lib at MPILIBNAME@_la-dbg_printf.lo `test -f 'src/util/dbg/dbg_printf.c' || echo '$(srcdir)/'`src/util/dbg/dbg_printf.c
-
-src/util/dbg/lib_lib at MPILIBNAME@_la-timelimit.lo: src/util/dbg/timelimit.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/dbg/lib_lib at MPILIBNAME@_la-timelimit.lo -MD -MP -MF src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-timelimit.Tpo -c -o src/util/dbg/lib_lib at MPILIBNAME@_la-timelimit.lo `test -f 'src/util/dbg/timelimit.c' || echo '$(srcdir)/'`src/util/dbg/timelimit.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-timelimit.Tpo src/util/dbg/$(DEPDIR)/lib_lib at MPILIBNAME@_la-timelimit.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/dbg/timelimit.c' object='src/util/dbg/lib_lib at MPILIBNAME@_la-timelimit.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/dbg/lib_lib at MPILIBNAME@_la-timelimit.lo `test -f 'src/util/dbg/timelimit.c' || echo '$(srcdir)/'`src/util/dbg/timelimit.c
-
-src/util/instrm/lib_lib at MPILIBNAME@_la-instr.lo: src/util/instrm/instr.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/instrm/lib_lib at MPILIBNAME@_la-instr.lo -MD -MP -MF src/util/instrm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-instr.Tpo -c -o src/util/instrm/lib_lib at MPILIBNAME@_la-instr.lo `test -f 'src/util/instrm/instr.c' || echo '$(srcdir)/'`src/util/instrm/instr.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/instrm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-instr.Tpo src/util/instrm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-instr.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/instrm/instr.c' object='src/util/instrm/lib_lib at MPILIBNAME@_la-instr.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/instrm/lib_lib at MPILIBNAME@_la-instr.lo `test -f 'src/util/instrm/instr.c' || echo '$(srcdir)/'`src/util/instrm/instr.c
-
-src/util/mem/lib_lib at MPILIBNAME@_la-trmem.lo: src/util/mem/trmem.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at MPILIBNAME@_la-trmem.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-trmem.Tpo -c -o src/util/mem/lib_lib at MPILIBNAME@_la-trmem.lo `test -f 'src/util/mem/trmem.c' || echo '$(srcdir)/'`src/util/mem/trmem.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-trmem.Tpo src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-trmem.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/mem/trmem.c' object='src/util/mem/lib_lib at MPILIBNAME@_la-trmem.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at MPILIBNAME@_la-trmem.lo `test -f 'src/util/mem/trmem.c' || echo '$(srcdir)/'`src/util/mem/trmem.c
-
src/util/mem/lib_lib at MPILIBNAME@_la-handlemem.lo: src/util/mem/handlemem.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at MPILIBNAME@_la-handlemem.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-handlemem.Tpo -c -o src/util/mem/lib_lib at MPILIBNAME@_la-handlemem.lo `test -f 'src/util/mem/handlemem.c' || echo '$(srcdir)/'`src/util/mem/handlemem.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-handlemem.Tpo src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-handlemem.Plo
@@ -28681,20 +26478,6 @@ src/util/mem/lib_lib at MPILIBNAME@_la-handlemem.lo: src/util/mem/handlemem.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at MPILIBNAME@_la-handlemem.lo `test -f 'src/util/mem/handlemem.c' || echo '$(srcdir)/'`src/util/mem/handlemem.c
-src/util/mem/lib_lib at MPILIBNAME@_la-safestr.lo: src/util/mem/safestr.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at MPILIBNAME@_la-safestr.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-safestr.Tpo -c -o src/util/mem/lib_lib at MPILIBNAME@_la-safestr.lo `test -f 'src/util/mem/safestr.c' || echo '$(srcdir)/'`src/util/mem/safestr.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-safestr.Tpo src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-safestr.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/mem/safestr.c' object='src/util/mem/lib_lib at MPILIBNAME@_la-safestr.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at MPILIBNAME@_la-safestr.lo `test -f 'src/util/mem/safestr.c' || echo '$(srcdir)/'`src/util/mem/safestr.c
-
-src/util/mem/lib_lib at MPILIBNAME@_la-argstr.lo: src/util/mem/argstr.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at MPILIBNAME@_la-argstr.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-argstr.Tpo -c -o src/util/mem/lib_lib at MPILIBNAME@_la-argstr.lo `test -f 'src/util/mem/argstr.c' || echo '$(srcdir)/'`src/util/mem/argstr.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-argstr.Tpo src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-argstr.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/mem/argstr.c' object='src/util/mem/lib_lib at MPILIBNAME@_la-argstr.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at MPILIBNAME@_la-argstr.lo `test -f 'src/util/mem/argstr.c' || echo '$(srcdir)/'`src/util/mem/argstr.c
-
src/util/mem/lib_lib at MPILIBNAME@_la-strerror.lo: src/util/mem/strerror.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at MPILIBNAME@_la-strerror.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-strerror.Tpo -c -o src/util/mem/lib_lib at MPILIBNAME@_la-strerror.lo `test -f 'src/util/mem/strerror.c' || echo '$(srcdir)/'`src/util/mem/strerror.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-strerror.Tpo src/util/mem/$(DEPDIR)/lib_lib at MPILIBNAME@_la-strerror.Plo
@@ -28702,26 +26485,12 @@ src/util/mem/lib_lib at MPILIBNAME@_la-strerror.lo: src/util/mem/strerror.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at MPILIBNAME@_la-strerror.lo `test -f 'src/util/mem/strerror.c' || echo '$(srcdir)/'`src/util/mem/strerror.c
-src/util/other/lib_lib at MPILIBNAME@_la-outliers.lo: src/util/other/outliers.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/other/lib_lib at MPILIBNAME@_la-outliers.lo -MD -MP -MF src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-outliers.Tpo -c -o src/util/other/lib_lib at MPILIBNAME@_la-outliers.lo `test -f 'src/util/other/outliers.c' || echo '$(srcdir)/'`src/util/other/outliers.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-outliers.Tpo src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-outliers.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/other/outliers.c' object='src/util/other/lib_lib at MPILIBNAME@_la-outliers.lo' libtool=yes @AMDEPBACKSLASH@
+src/util/cvar/lib_lib at MPILIBNAME@_la-mpir_cvars.lo: src/util/cvar/mpir_cvars.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/cvar/lib_lib at MPILIBNAME@_la-mpir_cvars.lo -MD -MP -MF src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpir_cvars.Tpo -c -o src/util/cvar/lib_lib at MPILIBNAME@_la-mpir_cvars.lo `test -f 'src/util/cvar/mpir_cvars.c' || echo '$(srcdir)/'`src/util/cvar/mpir_cvars.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpir_cvars.Tpo src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpir_cvars.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/cvar/mpir_cvars.c' object='src/util/cvar/lib_lib at MPILIBNAME@_la-mpir_cvars.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/other/lib_lib at MPILIBNAME@_la-outliers.lo `test -f 'src/util/other/outliers.c' || echo '$(srcdir)/'`src/util/other/outliers.c
-
-src/util/other/lib_lib at MPILIBNAME@_la-assert.lo: src/util/other/assert.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/other/lib_lib at MPILIBNAME@_la-assert.lo -MD -MP -MF src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Tpo -c -o src/util/other/lib_lib at MPILIBNAME@_la-assert.lo `test -f 'src/util/other/assert.c' || echo '$(srcdir)/'`src/util/other/assert.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Tpo src/util/other/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/other/assert.c' object='src/util/other/lib_lib at MPILIBNAME@_la-assert.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/other/lib_lib at MPILIBNAME@_la-assert.lo `test -f 'src/util/other/assert.c' || echo '$(srcdir)/'`src/util/other/assert.c
-
-src/util/cvar/lib_lib at MPILIBNAME@_la-mpich_cvars.lo: src/util/cvar/mpich_cvars.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/cvar/lib_lib at MPILIBNAME@_la-mpich_cvars.lo -MD -MP -MF src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpich_cvars.Tpo -c -o src/util/cvar/lib_lib at MPILIBNAME@_la-mpich_cvars.lo `test -f 'src/util/cvar/mpich_cvars.c' || echo '$(srcdir)/'`src/util/cvar/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpich_cvars.Tpo src/util/cvar/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpich_cvars.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/cvar/mpich_cvars.c' object='src/util/cvar/lib_lib at MPILIBNAME@_la-mpich_cvars.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/cvar/lib_lib at MPILIBNAME@_la-mpich_cvars.lo `test -f 'src/util/cvar/mpich_cvars.c' || echo '$(srcdir)/'`src/util/cvar/mpich_cvars.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/cvar/lib_lib at MPILIBNAME@_la-mpir_cvars.lo `test -f 'src/util/cvar/mpir_cvars.c' || echo '$(srcdir)/'`src/util/cvar/mpir_cvars.c
src/util/procmap/lib_lib at MPILIBNAME@_la-local_proc.lo: src/util/procmap/local_proc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/procmap/lib_lib at MPILIBNAME@_la-local_proc.lo -MD -MP -MF src/util/procmap/$(DEPDIR)/lib_lib at MPILIBNAME@_la-local_proc.Tpo -c -o src/util/procmap/lib_lib at MPILIBNAME@_la-local_proc.lo `test -f 'src/util/procmap/local_proc.c' || echo '$(srcdir)/'`src/uti [...]
@@ -28730,40 +26499,12 @@ src/util/procmap/lib_lib at MPILIBNAME@_la-local_proc.lo: src/util/procmap/local_pr
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/procmap/lib_lib at MPILIBNAME@_la-local_proc.lo `test -f 'src/util/procmap/local_proc.c' || echo '$(srcdir)/'`src/util/procmap/local_proc.c
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread.lo: src/util/thread/mpiu_thread.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread.Tpo -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread.lo `test -f 'src/util/thread/mpiu_thread.c' || echo '$(srcdir)/'`src/uti [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread.Tpo src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread.c' object='src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread.lo `test -f 'src/util/thread/mpiu_thread.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread.c
-
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_win.lo: src/util/thread/mpiu_thread_win.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_win.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_win.Tpo -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_win.lo `test -f 'src/util/thread/mpiu_thread_win.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_win.Tpo src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_win.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread_win.c' object='src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_win.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_win.lo `test -f 'src/util/thread/mpiu_thread_win.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread_win.c
-
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.lo: src/util/thread/mpiu_thread_solaris.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.Tpo -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.lo `test -f 'src/util/thread/mpiu_thread_solaris [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.Tpo src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread_solaris.c' object='src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_solaris.lo `test -f 'src/util/thread/mpiu_thread_solaris.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread_solaris.c
-
-src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.lo: src/util/thread/mpiu_thread_posix.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.Tpo -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.lo `test -f 'src/util/thread/mpiu_thread_posix.c' || e [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.Tpo src/util/thread/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread_posix.c' object='src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at MPILIBNAME@_la-mpiu_thread_posix.lo `test -f 'src/util/thread/mpiu_thread_posix.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread_posix.c
-
-src/util/timers/lib_lib at MPILIBNAME@_la-mpiu_timer.lo: src/util/timers/mpiu_timer.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/timers/lib_lib at MPILIBNAME@_la-mpiu_timer.lo -MD -MP -MF src/util/timers/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_timer.Tpo -c -o src/util/timers/lib_lib at MPILIBNAME@_la-mpiu_timer.lo `test -f 'src/util/timers/mpiu_timer.c' || echo '$(srcdir)/'`src/util/ti [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/timers/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_timer.Tpo src/util/timers/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpiu_timer.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/timers/mpiu_timer.c' object='src/util/timers/lib_lib at MPILIBNAME@_la-mpiu_timer.lo' libtool=yes @AMDEPBACKSLASH@
+src/util/assert/lib_lib at MPILIBNAME@_la-assert.lo: src/util/assert/assert.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/assert/lib_lib at MPILIBNAME@_la-assert.lo -MD -MP -MF src/util/assert/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Tpo -c -o src/util/assert/lib_lib at MPILIBNAME@_la-assert.lo `test -f 'src/util/assert/assert.c' || echo '$(srcdir)/'`src/util/assert/assert.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/assert/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Tpo src/util/assert/$(DEPDIR)/lib_lib at MPILIBNAME@_la-assert.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/assert/assert.c' object='src/util/assert/lib_lib at MPILIBNAME@_la-assert.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/timers/lib_lib at MPILIBNAME@_la-mpiu_timer.lo `test -f 'src/util/timers/mpiu_timer.c' || echo '$(srcdir)/'`src/util/timers/mpiu_timer.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/assert/lib_lib at MPILIBNAME@_la-assert.lo `test -f 'src/util/assert/assert.c' || echo '$(srcdir)/'`src/util/assert/assert.c
src/binding/fortran/mpif_h/lib_lib at MPILIBNAME@_la-fdebug.lo: src/binding/fortran/mpif_h/fdebug.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/binding/fortran/mpif_h/lib_lib at MPILIBNAME@_la-fdebug.lo -MD -MP -MF src/binding/fortran/mpif_h/$(DEPDIR)/lib_lib at MPILIBNAME@_la-fdebug.Tpo -c -o src/binding/fortran/mpif_h/lib_lib at MPILIBNAME@_la-fdebug.lo `test -f 'src/binding/fortran/mpif_h/fdebug.c' || e [...]
@@ -29290,13 +27031,6 @@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-ch3i_eagernoncontig.lo:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-ch3i_eagernoncontig.lo `test -f 'src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
-src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c' object='src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_alloc.lo `test -f 'src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c
-
src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_init.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_init.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_init.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_init.lo `test -f [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_init.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_init.Plo
@@ -29304,13 +27038,6 @@ src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_init.lo: src/m
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_init.lo `test -f 'src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
-src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c' object='src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_barrier.lo `test -f 'src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c
-
src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.lo `test [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_nem_mpich.Plo
@@ -29661,6 +27388,13 @@ src/mpid/ch3/channels/nemesis/utils/replacements/lib_lib at MPILIBNAME@_la-mkstemp.
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/utils/replacements/lib_lib at MPILIBNAME@_la-mkstemp.lo `test -f 'src/mpid/ch3/channels/nemesis/utils/replacements/mkstemp.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/utils/replacements/mkstemp.c
+src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-sock.lo: src/mpid/ch3/channels/sock/src/sock.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-sock.lo -MD -MP -MF src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Tpo -c -o src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-sock.lo `test -f 'src/mpid/ch3/channels/sock/src/sock [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Tpo src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch3/channels/sock/src/sock.c' object='src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-sock.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-sock.lo `test -f 'src/mpid/ch3/channels/sock/src/sock.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/sock/src/sock.c
+
src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_finalize.lo: src/mpid/ch3/channels/sock/src/ch3_finalize.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_finalize.lo -MD -MP -MF src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3_finalize.Tpo -c -o src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_finalize.lo `test -f 'src/mpid/ch [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3_finalize.Tpo src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch3_finalize.Plo
@@ -29717,761 +27451,131 @@ src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_win_fns.lo: src/mpid/c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/sock/src/lib_lib at MPILIBNAME@_la-ch3_win_fns.lo `test -f 'src/mpid/ch3/channels/sock/src/ch3_win_fns.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/sock/src/ch3_win_fns.c
-src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_barrier.lo: src/mpid/pamid/src/coll/barrier/mpido_barrier.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_barrier.lo -MD -MP -MF src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_barrier.Tpo -c -o src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_barrier.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_barrier.Tpo src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_barrier.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/barrier/mpido_barrier.c' object='src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_barrier.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_barrier.lo `test -f 'src/mpid/pamid/src/coll/barrier/mpido_barrier.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/barrier/mpido_barrier.c
-
-src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_ibarrier.lo: src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_ibarrier.lo -MD -MP -MF src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibarrier.Tpo -c -o src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_ibarrier.lo `test -f 'sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibarrier.Tpo src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibarrier.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c' object='src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_ibarrier.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/barrier/lib_lib at MPILIBNAME@_la-mpido_ibarrier.lo `test -f 'src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
-
-src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_bcast.lo: src/mpid/pamid/src/coll/bcast/mpido_bcast.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_bcast.lo -MD -MP -MF src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_bcast.Tpo -c -o src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_bcast.lo `test -f 'src/mpid/pamid/sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_bcast.Tpo src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_bcast.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/bcast/mpido_bcast.c' object='src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_bcast.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_bcast.lo `test -f 'src/mpid/pamid/src/coll/bcast/mpido_bcast.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/bcast/mpido_bcast.c
-
-src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_ibcast.lo: src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_ibcast.lo -MD -MP -MF src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibcast.Tpo -c -o src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_ibcast.lo `test -f 'src/mpid/pamid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibcast.Tpo src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ibcast.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/bcast/mpido_ibcast.c' object='src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_ibcast.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/bcast/lib_lib at MPILIBNAME@_la-mpido_ibcast.lo `test -f 'src/mpid/pamid/src/coll/bcast/mpido_ibcast.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
-
-src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_allreduce.lo: src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_allreduce.lo -MD -MP -MF src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allreduce.Tpo -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_allreduce.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allreduce.Tpo src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allreduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c' object='src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_allreduce.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_allreduce.lo `test -f 'src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c
-
-src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_iallreduce.lo: src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_iallreduce.lo -MD -MP -MF src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallreduce.Tpo -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_iallreduce.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallreduce.Tpo src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallreduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c' object='src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_iallreduce.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at MPILIBNAME@_la-mpido_iallreduce.lo `test -f 'src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
-
-src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_allgather.lo: src/mpid/pamid/src/coll/allgather/mpido_allgather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_allgather.lo -MD -MP -MF src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgather.Tpo -c -o src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_allgather.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgather.Tpo src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgather/mpido_allgather.c' object='src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_allgather.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_allgather.lo `test -f 'src/mpid/pamid/src/coll/allgather/mpido_allgather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgather/mpido_allgather.c
-
-src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_iallgather.lo: src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_iallgather.lo -MD -MP -MF src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgather.Tpo -c -o src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_iallgather.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgather.Tpo src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgather/mpido_iallgather.c' object='src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_iallgather.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgather/lib_lib at MPILIBNAME@_la-mpido_iallgather.lo `test -f 'src/mpid/pamid/src/coll/allgather/mpido_iallgather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
-
-src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_allgatherv.lo: src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_allgatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgatherv.Tpo -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_allgatherv. [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgatherv.Tpo src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_allgatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c' object='src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_allgatherv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_allgatherv.lo `test -f 'src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
-
-src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.lo: src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.Tpo -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_iallgathe [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.Tpo src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c' object='src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at MPILIBNAME@_la-mpido_iallgatherv.lo `test -f 'src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
-
-src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_scatterv.lo: src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_scatterv.lo -MD -MP -MF src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatterv.Tpo -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_scatterv.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatterv.Tpo src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatterv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c' object='src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_scatterv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_scatterv.lo `test -f 'src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
-
-src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_iscatterv.lo: src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_iscatterv.lo -MD -MP -MF src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatterv.Tpo -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_iscatterv.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatterv.Tpo src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatterv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c' object='src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_iscatterv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at MPILIBNAME@_la-mpido_iscatterv.lo `test -f 'src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
-
-src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_scatter.lo: src/mpid/pamid/src/coll/scatter/mpido_scatter.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_scatter.lo -MD -MP -MF src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatter.Tpo -c -o src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_scatter.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatter.Tpo src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scatter.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatter/mpido_scatter.c' object='src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_scatter.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_scatter.lo `test -f 'src/mpid/pamid/src/coll/scatter/mpido_scatter.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatter/mpido_scatter.c
-
-src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_iscatter.lo: src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_iscatter.lo -MD -MP -MF src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatter.Tpo -c -o src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_iscatter.lo `test -f 'sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatter.Tpo src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iscatter.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatter/mpido_iscatter.c' object='src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_iscatter.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatter/lib_lib at MPILIBNAME@_la-mpido_iscatter.lo `test -f 'src/mpid/pamid/src/coll/scatter/mpido_iscatter.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
-
-src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_gather.lo: src/mpid/pamid/src/coll/gather/mpido_gather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_gather.lo -MD -MP -MF src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gather.Tpo -c -o src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_gather.lo `test -f 'src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gather.Tpo src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gather/mpido_gather.c' object='src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_gather.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_gather.lo `test -f 'src/mpid/pamid/src/coll/gather/mpido_gather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gather/mpido_gather.c
-
-src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_igather.lo: src/mpid/pamid/src/coll/gather/mpido_igather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_igather.lo -MD -MP -MF src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igather.Tpo -c -o src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_igather.lo `test -f 'src/mpid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igather.Tpo src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gather/mpido_igather.c' object='src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_igather.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gather/lib_lib at MPILIBNAME@_la-mpido_igather.lo `test -f 'src/mpid/pamid/src/coll/gather/mpido_igather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gather/mpido_igather.c
-
-src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_alltoall.lo: src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_alltoall.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoall.Tpo -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_alltoall.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoall.Tpo src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoall.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c' object='src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_alltoall.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_alltoall.lo `test -f 'src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
-
-src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_ialltoall.lo: src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_ialltoall.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoall.Tpo -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_ialltoall.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoall.Tpo src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoall.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c' object='src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_ialltoall.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at MPILIBNAME@_la-mpido_ialltoall.lo `test -f 'src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
-
-src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_alltoallv.lo: src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_alltoallv.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoallv.Tpo -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_alltoallv.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoallv.Tpo src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_alltoallv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c' object='src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_alltoallv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_alltoallv.lo `test -f 'src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
-
-src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.lo: src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.Tpo -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.Tpo src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c' object='src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at MPILIBNAME@_la-mpido_ialltoallv.lo `test -f 'src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
-
-src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_gatherv.lo: src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_gatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gatherv.Tpo -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_gatherv.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gatherv.Tpo src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_gatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c' object='src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_gatherv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_gatherv.lo `test -f 'src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
-
-src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_igatherv.lo: src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_igatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igatherv.Tpo -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_igatherv.lo `test -f 'sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igatherv.Tpo src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_igatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c' object='src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_igatherv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at MPILIBNAME@_la-mpido_igatherv.lo `test -f 'src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
-
-src/mpid/pamid/src/coll/scan/lib_lib at MPILIBNAME@_la-mpido_scan.lo: src/mpid/pamid/src/coll/scan/mpido_scan.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scan/lib_lib at MPILIBNAME@_la-mpido_scan.lo -MD -MP -MF src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scan.Tpo -c -o src/mpid/pamid/src/coll/scan/lib_lib at MPILIBNAME@_la-mpido_scan.lo `test -f 'src/mpid/pamid/src/coll [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scan.Tpo src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_scan.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scan/mpido_scan.c' object='src/mpid/pamid/src/coll/scan/lib_lib at MPILIBNAME@_la-mpido_scan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scan/lib_lib at MPILIBNAME@_la-mpido_scan.lo `test -f 'src/mpid/pamid/src/coll/scan/mpido_scan.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scan/mpido_scan.c
-
-src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_reduce.lo: src/mpid/pamid/src/coll/reduce/mpido_reduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_reduce.lo -MD -MP -MF src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_reduce.Tpo -c -o src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_reduce.lo `test -f 'src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_reduce.Tpo src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_reduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/reduce/mpido_reduce.c' object='src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_reduce.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_reduce.lo `test -f 'src/mpid/pamid/src/coll/reduce/mpido_reduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/reduce/mpido_reduce.c
-
-src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_ireduce.lo: src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_ireduce.lo -MD -MP -MF src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ireduce.Tpo -c -o src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_ireduce.lo `test -f 'src/mpid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ireduce.Tpo src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ireduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/reduce/mpido_ireduce.c' object='src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_ireduce.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/reduce/lib_lib at MPILIBNAME@_la-mpido_ireduce.lo `test -f 'src/mpid/pamid/src/coll/reduce/mpido_ireduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
-
-src/mpid/pamid/src/coll/alltoallw/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.lo: src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoallw/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.Tpo -c -o src/mpid/pamid/src/coll/alltoallw/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.Tpo src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c' object='src/mpid/pamid/src/coll/alltoallw/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoallw/lib_lib at MPILIBNAME@_la-mpido_ialltoallw.lo `test -f 'src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
-
-src/mpid/pamid/src/coll/exscan/lib_lib at MPILIBNAME@_la-mpido_iexscan.lo: src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/exscan/lib_lib at MPILIBNAME@_la-mpido_iexscan.lo -MD -MP -MF src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iexscan.Tpo -c -o src/mpid/pamid/src/coll/exscan/lib_lib at MPILIBNAME@_la-mpido_iexscan.lo `test -f 'src/mpid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iexscan.Tpo src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_iexscan.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/exscan/mpido_iexscan.c' object='src/mpid/pamid/src/coll/exscan/lib_lib at MPILIBNAME@_la-mpido_iexscan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/exscan/lib_lib at MPILIBNAME@_la-mpido_iexscan.lo `test -f 'src/mpid/pamid/src/coll/exscan/mpido_iexscan.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
-
-src/mpid/pamid/src/coll/ired_scat_block/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.lo: src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/ired_scat_block/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.lo -MD -MP -MF src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.Tpo -c -o src/mpid/pamid/src/coll/ired_scat_block/lib_lib at MPILIBN [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.Tpo src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c' object='src/mpid/pamid/src/coll/ired_scat_block/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/ired_scat_block/lib_lib at MPILIBNAME@_la-mpido_ired_scat_block.lo `test -f 'src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
-
-src/mpid/pamid/src/coll/ired_scat/lib_lib at MPILIBNAME@_la-mpido_ired_scat.lo: src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/ired_scat/lib_lib at MPILIBNAME@_la-mpido_ired_scat.lo -MD -MP -MF src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat.Tpo -c -o src/mpid/pamid/src/coll/ired_scat/lib_lib at MPILIBNAME@_la-mpido_ired_scat.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat.Tpo src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_ired_scat.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c' object='src/mpid/pamid/src/coll/ired_scat/lib_lib at MPILIBNAME@_la-mpido_ired_scat.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/ired_scat/lib_lib at MPILIBNAME@_la-mpido_ired_scat.lo `test -f 'src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
-
-src/mpid/pamid/src/coll/red_scat/lib_lib at MPILIBNAME@_la-mpido_red_scat.lo: src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/red_scat/lib_lib at MPILIBNAME@_la-mpido_red_scat.lo -MD -MP -MF src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_red_scat.Tpo -c -o src/mpid/pamid/src/coll/red_scat/lib_lib at MPILIBNAME@_la-mpido_red_scat.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_red_scat.Tpo src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpido_red_scat.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c' object='src/mpid/pamid/src/coll/red_scat/lib_lib at MPILIBNAME@_la-mpido_red_scat.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/red_scat/lib_lib at MPILIBNAME@_la-mpido_red_scat.lo `test -f 'src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c
-
-src/mpid/pamid/src/coll/lib_lib at MPILIBNAME@_la-coll_utils.lo: src/mpid/pamid/src/coll/coll_utils.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/lib_lib at MPILIBNAME@_la-coll_utils.lo -MD -MP -MF src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-coll_utils.Tpo -c -o src/mpid/pamid/src/coll/lib_lib at MPILIBNAME@_la-coll_utils.lo `test -f 'src/mpid/pamid/src/coll/coll_utils.c' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-coll_utils.Tpo src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-coll_utils.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/coll_utils.c' object='src/mpid/pamid/src/coll/lib_lib at MPILIBNAME@_la-coll_utils.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/lib_lib at MPILIBNAME@_la-coll_utils.lo `test -f 'src/mpid/pamid/src/coll/coll_utils.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/coll_utils.c
-
-src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_comm.lo: src/mpid/pamid/src/comm/mpid_comm.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_comm.lo -MD -MP -MF src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm.Tpo -c -o src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_comm.lo `test -f 'src/mpid/pamid/src/comm/mpid_comm.c' || e [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm.Tpo src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/comm/mpid_comm.c' object='src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_comm.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_comm.lo `test -f 'src/mpid/pamid/src/comm/mpid_comm.c' || echo '$(srcdir)/'`src/mpid/pamid/src/comm/mpid_comm.c
-
-src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_selectcolls.lo: src/mpid/pamid/src/comm/mpid_selectcolls.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_selectcolls.lo -MD -MP -MF src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_selectcolls.Tpo -c -o src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_selectcolls.lo `test -f 'src/mpid/pamid/src/c [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_selectcolls.Tpo src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_selectcolls.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/comm/mpid_selectcolls.c' object='src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_selectcolls.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_selectcolls.lo `test -f 'src/mpid/pamid/src/comm/mpid_selectcolls.c' || echo '$(srcdir)/'`src/mpid/pamid/src/comm/mpid_selectcolls.c
-
-src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_optcolls.lo: src/mpid/pamid/src/comm/mpid_optcolls.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_optcolls.lo -MD -MP -MF src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_optcolls.Tpo -c -o src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_optcolls.lo `test -f 'src/mpid/pamid/src/comm/mpid_ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_optcolls.Tpo src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_optcolls.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/comm/mpid_optcolls.c' object='src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_optcolls.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/comm/lib_lib at MPILIBNAME@_la-mpid_optcolls.lo `test -f 'src/mpid/pamid/src/comm/mpid_optcolls.c' || echo '$(srcdir)/'`src/mpid/pamid/src/comm/mpid_optcolls.c
-
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_abort.lo: src/mpid/pamid/src/misc/mpid_abort.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_abort.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_abort.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_abort.lo `test -f 'src/mpid/pamid/src/misc/mpid_abort.c' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_abort.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_abort.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_abort.c' object='src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_abort.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_abort.lo `test -f 'src/mpid/pamid/src/misc/mpid_abort.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_abort.c
-
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.lo: src/mpid/pamid/src/misc/mpid_get_universe_size.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.lo `test -f 'sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_get_universe_size.c' object='src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_get_universe_size.lo `test -f 'src/mpid/pamid/src/misc/mpid_get_universe_size.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_get_universe_size.c
-
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_getpname.lo: src/mpid/pamid/src/misc/mpid_getpname.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_getpname.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_getpname.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_getpname.lo `test -f 'src/mpid/pamid/src/misc/mpid_ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_getpname.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_getpname.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_getpname.c' object='src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_getpname.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_getpname.lo `test -f 'src/mpid/pamid/src/misc/mpid_getpname.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_getpname.c
-
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_mem.lo: src/mpid/pamid/src/misc/mpid_mem.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_mem.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mem.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_mem.lo `test -f 'src/mpid/pamid/src/misc/mpid_mem.c' || echo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mem.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mem.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_mem.c' object='src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_mem.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_mem.lo `test -f 'src/mpid/pamid/src/misc/mpid_mem.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_mem.c
-
-src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_unimpl.lo: src/mpid/pamid/src/misc/mpid_unimpl.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_unimpl.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_unimpl.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_unimpl.lo `test -f 'src/mpid/pamid/src/misc/mpid_unimpl [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_unimpl.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_unimpl.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_unimpl.c' object='src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_unimpl.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at MPILIBNAME@_la-mpid_unimpl.lo `test -f 'src/mpid/pamid/src/misc/mpid_unimpl.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_unimpl.c
-
-src/mpid/pamid/src/mpix/lib_lib at MPILIBNAME@_la-mpix.lo: src/mpid/pamid/src/mpix/mpix.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/mpix/lib_lib at MPILIBNAME@_la-mpix.lo -MD -MP -MF src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpix.Tpo -c -o src/mpid/pamid/src/mpix/lib_lib at MPILIBNAME@_la-mpix.lo `test -f 'src/mpid/pamid/src/mpix/mpix.c' || echo '$(srcdir)/'`src [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpix.Tpo src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpix.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpix/mpix.c' object='src/mpid/pamid/src/mpix/lib_lib at MPILIBNAME@_la-mpix.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/mpix/lib_lib at MPILIBNAME@_la-mpix.lo `test -f 'src/mpid/pamid/src/mpix/mpix.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpix/mpix.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_1s.lo: src/mpid/pamid/src/onesided/mpid_1s.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_1s.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_1s.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_1s.lo `test -f 'src/mpid/pamid/src/onesided/mpid_1s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_1s.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_1s.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_1s.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_1s.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_1s.lo `test -f 'src/mpid/pamid/src/onesided/mpid_1s.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_1s.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.lo: src/mpid/pamid/src/onesided/mpid_win_accumulate.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_accumulate.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_accumulate.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_accumulate.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_accumulate.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create.lo: src/mpid/pamid/src/onesided/mpid_win_create.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create.lo `test -f 'src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_create.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_create.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_create.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fence.lo: src/mpid/pamid/src/onesided/mpid_win_fence.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fence.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fence.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fence.lo `test -f 'src/mpid/pamid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fence.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fence.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_fence.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fence.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fence.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_fence.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_fence.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_free.lo: src/mpid/pamid/src/onesided/mpid_win_free.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_free.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_free.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_free.lo `test -f 'src/mpid/pamid/sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_free.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_free.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_free.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_free.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_free.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_free.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_free.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get.lo: src/mpid/pamid/src/onesided/mpid_win_get.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get.lo `test -f 'src/mpid/pamid/src/o [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_get.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_get.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_get.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock.lo: src/mpid/pamid/src/onesided/mpid_win_lock.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock.lo `test -f 'src/mpid/pamid/sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_lock.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_lock.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_lock.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.lo: src/mpid/pamid/src/onesided/mpid_win_lock_all.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_lock_all.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_lock_all.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_lock_all.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_lock_all.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_pscw.lo: src/mpid/pamid/src/onesided/mpid_win_pscw.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_pscw.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_pscw.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_pscw.lo `test -f 'src/mpid/pamid/sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_pscw.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_pscw.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_pscw.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_pscw.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_pscw.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_pscw.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_pscw.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_put.lo: src/mpid/pamid/src/onesided/mpid_win_put.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_put.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_put.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_put.lo `test -f 'src/mpid/pamid/src/o [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_put.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_put.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_put.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_put.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_put.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_put.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_put.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.lo: src/mpid/pamid/src/onesided/mpid_win_shared_query.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_shared_query.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_shared_query.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_shared_query.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_shared_query.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.lo: src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic. [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_create_dynamic.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.lo: src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shar [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate_shared.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_flush.lo: src/mpid/pamid/src/onesided/mpid_win_flush.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_flush.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_flush.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_flush.lo `test -f 'src/mpid/pamid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_flush.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_flush.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_flush.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_flush.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_flush.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_flush.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_flush.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate.lo: src/mpid/pamid/src/onesided/mpid_win_allocate.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_allocate.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_allocate.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_allocate.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_allocate.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_allocate.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_sync.lo: src/mpid/pamid/src/onesided/mpid_win_sync.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_sync.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_sync.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_sync.lo `test -f 'src/mpid/pamid/sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_sync.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_sync.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_sync.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_sync.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_sync.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_sync.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_sync.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_attach.lo: src/mpid/pamid/src/onesided/mpid_win_attach.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_attach.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_attach.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_attach.lo `test -f 'src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_attach.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_attach.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_attach.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_attach.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_attach.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_attach.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_attach.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_detach.lo: src/mpid/pamid/src/onesided/mpid_win_detach.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_detach.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_detach.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_detach.lo `test -f 'src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_detach.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_detach.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_detach.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_detach.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_detach.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_detach.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_detach.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_info.lo: src/mpid/pamid/src/onesided/mpid_win_get_info.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_info.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_info.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_info.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_info.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_info.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_get_info.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_info.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_info.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_get_info.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_get_info.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_set_info.lo: src/mpid/pamid/src/onesided/mpid_win_set_info.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_set_info.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_set_info.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_set_info.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_set_info.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_set_info.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_set_info.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_set_info.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_set_info.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_set_info.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_set_info.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.lo: src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate. [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_get_accumulate.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_reqops.lo: src/mpid/pamid/src/onesided/mpid_win_reqops.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_reqops.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_reqops.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_reqops.lo `test -f 'src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_reqops.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_reqops.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_reqops.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_reqops.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_reqops.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_reqops.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_reqops.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpidi_win_control.lo: src/mpid/pamid/src/onesided/mpidi_win_control.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpidi_win_control.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_win_control.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpidi_win_control.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_win_control.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_win_control.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpidi_win_control.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpidi_win_control.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpidi_win_control.lo `test -f 'src/mpid/pamid/src/onesided/mpidi_win_control.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpidi_win_control.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.lo: src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_compare_and [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_compare_and_swap.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
-
-src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.lo: src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c' object='src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at MPILIBNAME@_la-mpid_win_fetch_and_op.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
-
-src/mpid/pamid/src/pamix/lib_lib at MPILIBNAME@_la-pamix.lo: src/mpid/pamid/src/pamix/pamix.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pamix/lib_lib at MPILIBNAME@_la-pamix.lo -MD -MP -MF src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-pamix.Tpo -c -o src/mpid/pamid/src/pamix/lib_lib at MPILIBNAME@_la-pamix.lo `test -f 'src/mpid/pamid/src/pamix/pamix.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-pamix.Tpo src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-pamix.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pamix/pamix.c' object='src/mpid/pamid/src/pamix/lib_lib at MPILIBNAME@_la-pamix.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pamix/lib_lib at MPILIBNAME@_la-pamix.lo `test -f 'src/mpid/pamid/src/pamix/pamix.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pamix/pamix.c
-
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_recv_init.lo: src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_recv_init.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv_init.Tpo -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_recv_init.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv_init.Tpo src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv_init.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c' object='src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_recv_init.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_recv_init.lo `test -f 'src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c
-
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_send_init.lo: src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_send_init.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_send_init.Tpo -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_send_init.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_send_init.Tpo src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_send_init.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c' object='src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_send_init.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_send_init.lo `test -f 'src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c
-
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_startall.lo: src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_startall.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_startall.Tpo -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_startall.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_startall.Tpo src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_startall.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c' object='src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_startall.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at MPILIBNAME@_la-mpid_startall.lo `test -f 'src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_cancel.lo: src/mpid/pamid/src/pt2pt/mpid_cancel.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_cancel.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_cancel.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_cancel.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_ca [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_cancel.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_cancel.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_cancel.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_cancel.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_cancel.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_cancel.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_cancel.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_issend.lo: src/mpid/pamid/src/pt2pt/mpid_issend.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_issend.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_issend.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_issend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_is [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_issend.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_issend.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_issend.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_issend.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_issend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_issend.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_issend.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_recv.lo: src/mpid/pamid/src/pt2pt/mpid_recv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_recv.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_recv.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_recv.c' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_recv.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_recv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_recv.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_recv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_recv.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_ssend.lo: src/mpid/pamid/src/pt2pt/mpid_ssend.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_ssend.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ssend.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_ssend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_ssend [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ssend.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ssend.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_ssend.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_ssend.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpid_ssend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_ssend.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_ssend.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_eager.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.lo `test -f 'src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_rzv.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_short.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_short.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_short.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_short.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_short.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_short.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_short.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_short.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_short.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_short.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_util.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_util.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_util.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_util.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_util.lo `test -f 'src/mpid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_util.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_callback_util.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_util.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_util.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_callback_util.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_util.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_util.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_control.lo: src/mpid/pamid/src/pt2pt/mpidi_control.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_control.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_control.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_control.lo `test -f 'src/mpid/pamid/src/pt2pt/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_control.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_control.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_control.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_control.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_control.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_control.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_control.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_done.lo: src/mpid/pamid/src/pt2pt/mpidi_done.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_done.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_done.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_done.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_done [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_done.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_done.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_done.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_done.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_done.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_done.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_done.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.lo: src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.lo `test -f 'src/mpid/pamid/src/pt2pt/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_recvmsg.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.lo: src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.lo `test -f 'src/mpid/pamid/sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_rendezvous.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.lo: src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.lo `test -f 'src/mpid/pamid/src/pt2pt/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c' object='src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at MPILIBNAME@_la-mpidi_sendmsg.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c
-
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.lo: src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple. [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c' object='src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_spawn_multiple.lo `test -f 'src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c
-
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.lo: src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c' object='src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_comm_disconnect.lo `test -f 'src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
-
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_port.lo: src/mpid/pamid/src/dyntask/mpid_port.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_port.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_port.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_port.lo `test -f 'src/mpid/pamid/src/dyntask/mpid_ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_port.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_port.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpid_port.c' object='src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_port.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpid_port.lo `test -f 'src/mpid/pamid/src/dyntask/mpid_port.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpid_port.c
-
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_pg.lo: src/mpid/pamid/src/dyntask/mpidi_pg.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_pg.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pg.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_pg.lo `test -f 'src/mpid/pamid/src/dyntask/mpidi_pg [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pg.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pg.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpidi_pg.c' object='src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_pg.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_pg.lo `test -f 'src/mpid/pamid/src/dyntask/mpidi_pg.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpidi_pg.c
-
-src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_port.lo: src/mpid/pamid/src/dyntask/mpidi_port.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_port.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_port.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_port.lo `test -f 'src/mpid/pamid/src/dyntask/mp [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_port.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_port.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpidi_port.c' object='src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_port.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at MPILIBNAME@_la-mpidi_port.lo `test -f 'src/mpid/pamid/src/dyntask/mpidi_port.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpidi_port.c
-
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_buffer.lo: src/mpid/pamid/src/mpid_buffer.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_buffer.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_buffer.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_buffer.lo `test -f 'src/mpid/pamid/src/mpid_buffer.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_buffer.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_buffer.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_buffer.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_buffer.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_buffer.lo `test -f 'src/mpid/pamid/src/mpid_buffer.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_buffer.c
-
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_bufmm.lo: src/mpid/pamid/src/mpidi_bufmm.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_bufmm.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_bufmm.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_bufmm.lo `test -f 'src/mpid/pamid/src/mpidi_bufmm.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_bufmm.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_bufmm.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_bufmm.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_bufmm.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_bufmm.lo `test -f 'src/mpid/pamid/src/mpidi_bufmm.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_bufmm.c
-
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_finalize.lo: src/mpid/pamid/src/mpid_finalize.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_finalize.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_finalize.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_finalize.lo `test -f 'src/mpid/pamid/src/mpid_finalize.c' || echo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_finalize.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_finalize.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_finalize.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_finalize.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_finalize.lo `test -f 'src/mpid/pamid/src/mpid_finalize.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_finalize.c
-
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_init.lo: src/mpid/pamid/src/mpid_init.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_init.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_init.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_init.lo `test -f 'src/mpid/pamid/src/mpid_init.c' || echo '$(srcdir)/'`src [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_init.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_init.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_init.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_init.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-ch4_globals.lo: src/mpid/ch4/src/ch4_globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-ch4_globals.lo -MD -MP -MF src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch4_globals.Tpo -c -o src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-ch4_globals.lo `test -f 'src/mpid/ch4/src/ch4_globals.c' || echo '$(srcdir)/'`src [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch4_globals.Tpo src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-ch4_globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/src/ch4_globals.c' object='src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-ch4_globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_init.lo `test -f 'src/mpid/pamid/src/mpid_init.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_init.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-ch4_globals.lo `test -f 'src/mpid/ch4/src/ch4_globals.c' || echo '$(srcdir)/'`src/mpid/ch4/src/ch4_globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_iprobe.lo: src/mpid/pamid/src/mpid_iprobe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_iprobe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_iprobe.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_iprobe.lo `test -f 'src/mpid/pamid/src/mpid_iprobe.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_iprobe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_iprobe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_iprobe.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_iprobe.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.lo: src/mpid/ch4/src/mpid_ch4_net_array.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.lo -MD -MP -MF src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.Tpo -c -o src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_net_array [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.Tpo src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/src/mpid_ch4_net_array.c' object='src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_iprobe.lo `test -f 'src/mpid/pamid/src/mpid_iprobe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_iprobe.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_net_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_net_array.c' || echo '$(srcdir)/'`src/mpid/ch4/src/mpid_ch4_net_array.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_probe.lo: src/mpid/pamid/src/mpid_probe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_probe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_probe.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_probe.lo `test -f 'src/mpid/pamid/src/mpid_probe.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_probe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_probe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_probe.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_probe.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.lo: src/mpid/ch4/src/mpid_ch4_shm_array.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.lo -MD -MP -MF src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.Tpo -c -o src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_shm_array [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.Tpo src/mpid/ch4/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/src/mpid_ch4_shm_array.c' object='src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_probe.lo `test -f 'src/mpid/pamid/src/mpid_probe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_probe.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/src/lib_lib at MPILIBNAME@_la-mpid_ch4_shm_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_shm_array.c' || echo '$(srcdir)/'`src/mpid/ch4/src/mpid_ch4_shm_array.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_progress.lo: src/mpid/pamid/src/mpid_progress.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_progress.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_progress.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_progress.lo `test -f 'src/mpid/pamid/src/mpid_progress.c' || echo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_progress.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_progress.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_progress.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_progress.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_globals.lo: src/mpid/ch4/generic/mpidig_globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_globals.lo -MD -MP -MF src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_globals.Tpo -c -o src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_globals.lo `test -f 'src/mpid/ch4/generic/mpidig_globals [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_globals.Tpo src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/generic/mpidig_globals.c' object='src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_progress.lo `test -f 'src/mpid/pamid/src/mpid_progress.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_progress.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_globals.lo `test -f 'src/mpid/ch4/generic/mpidig_globals.c' || echo '$(srcdir)/'`src/mpid/ch4/generic/mpidig_globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq.lo: src/mpid/pamid/src/mpid_recvq.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq.lo `test -f 'src/mpid/pamid/src/mpid_recvq.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_recvq.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_init.lo: src/mpid/ch4/generic/mpidig_init.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_init.lo -MD -MP -MF src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_init.Tpo -c -o src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_init.lo `test -f 'src/mpid/ch4/generic/mpidig_init.c' || echo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_init.Tpo src/mpid/ch4/generic/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidig_init.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/generic/mpidig_init.c' object='src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_init.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq.lo `test -f 'src/mpid/pamid/src/mpid_recvq.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_recvq.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/generic/lib_lib at MPILIBNAME@_la-mpidig_init.lo `test -f 'src/mpid/ch4/generic/mpidig_init.c' || echo '$(srcdir)/'`src/mpid/ch4/generic/mpidig_init.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_request.lo: src/mpid/pamid/src/mpid_request.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_request.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_request.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_request.lo `test -f 'src/mpid/pamid/src/mpid_request.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_request.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_request.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_request.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_request.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-func_table.lo: src/mpid/ch4/netmod/ofi/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ofi/func_table.c' [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ofi/func_table.c' object='src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_request.lo `test -f 'src/mpid/pamid/src/mpid_request.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_request.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ofi/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ofi/func_table.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_time.lo: src/mpid/pamid/src/mpid_time.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_time.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_time.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_time.lo `test -f 'src/mpid/pamid/src/mpid_time.c' || echo '$(srcdir)/'`src [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_time.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_time.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_time.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_time.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/ofi/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ofi/globals.c' || echo '$(s [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ofi/globals.c' object='src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_time.lo `test -f 'src/mpid/pamid/src/mpid_time.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_time.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ofi/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ofi/globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_vc.lo: src/mpid/pamid/src/mpid_vc.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_vc.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_vc.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_vc.lo `test -f 'src/mpid/pamid/src/mpid_vc.c' || echo '$(srcdir)/'`src/mpid/pa [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_vc.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_vc.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_vc.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_vc.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-util.lo: src/mpid/ch4/netmod/ofi/util.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-util.lo -MD -MP -MF src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-util.Tpo -c -o src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-util.lo `test -f 'src/mpid/ch4/netmod/ofi/util.c' || echo '$(srcdir)/'`src [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-util.Tpo src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at MPILIBNAME@_la-util.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ofi/util.c' object='src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-util.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_vc.lo `test -f 'src/mpid/pamid/src/mpid_vc.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_vc.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ofi/lib_lib at MPILIBNAME@_la-util.lo `test -f 'src/mpid/ch4/netmod/ofi/util.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ofi/util.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_env.lo: src/mpid/pamid/src/mpidi_env.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_env.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_env.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_env.lo `test -f 'src/mpid/pamid/src/mpidi_env.c' || echo '$(srcdir)/'`src [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_env.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_env.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_env.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_env.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-func_table.lo: src/mpid/ch4/netmod/ucx/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ucx/func_table.c' [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ucx/func_table.c' object='src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_env.lo `test -f 'src/mpid/pamid/src/mpidi_env.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_env.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ucx/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ucx/func_table.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_util.lo: src/mpid/pamid/src/mpidi_util.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_util.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_util.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_util.lo `test -f 'src/mpid/pamid/src/mpidi_util.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_util.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_util.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_util.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_util.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/ucx/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ucx/globals.c' || echo '$(s [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ucx/globals.c' object='src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_util.lo `test -f 'src/mpid/pamid/src/mpidi_util.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_util.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ucx/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ucx/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ucx/globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_mutex.lo: src/mpid/pamid/src/mpidi_mutex.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_mutex.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_mutex.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_mutex.lo `test -f 'src/mpid/pamid/src/mpidi_mutex.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_mutex.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_mutex.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_mutex.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_mutex.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/portals4/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/portals4/glo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/portals4/globals.c' object='src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_mutex.lo `test -f 'src/mpid/pamid/src/mpidi_mutex.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_mutex.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/portals4/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/portals4/globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mrecv.lo: src/mpid/pamid/src/mpid_mrecv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mrecv.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mrecv.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mrecv.lo `test -f 'src/mpid/pamid/src/mpid_mrecv.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mrecv.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mrecv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_mrecv.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mrecv.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-func_table.lo: src/mpid/ch4/netmod/portals4/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/por [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/portals4/func_table.c' object='src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mrecv.lo `test -f 'src/mpid/pamid/src/mpid_mrecv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_mrecv.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/portals4/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/portals4/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/portals4/func_table.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mprobe.lo: src/mpid/pamid/src/mpid_mprobe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mprobe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mprobe.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mprobe.lo `test -f 'src/mpid/pamid/src/mpid_mprobe.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mprobe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_mprobe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_mprobe.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mprobe.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/stubnm/lib_lib at MPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/stubnm/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/stubnm/lib_lib at MPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/stubnm/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/stubnm/globals.c' [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/stubnm/globals.c' object='src/mpid/ch4/netmod/stubnm/lib_lib at MPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_mprobe.lo `test -f 'src/mpid/pamid/src/mpid_mprobe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_mprobe.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/stubnm/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/stubnm/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/stubnm/globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_imrecv.lo: src/mpid/pamid/src/mpid_imrecv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_imrecv.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_imrecv.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_imrecv.lo `test -f 'src/mpid/pamid/src/mpid_imrecv.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_imrecv.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_imrecv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_imrecv.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_imrecv.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-globals.lo: src/mpid/ch4/shm/stubshm/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/stubshm/globals.c' || echo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/stubshm/globals.c' object='src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_imrecv.lo `test -f 'src/mpid/pamid/src/mpid_imrecv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_imrecv.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/stubshm/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/stubshm/globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_improbe.lo: src/mpid/pamid/src/mpid_improbe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_improbe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_improbe.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_improbe.lo `test -f 'src/mpid/pamid/src/mpid_improbe.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_improbe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_improbe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_improbe.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_improbe.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-func_table.lo: src/mpid/ch4/shm/stubshm/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/stubshm/func_table [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/stubshm/func_table.c' object='src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_improbe.lo `test -f 'src/mpid/pamid/src/mpid_improbe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_improbe.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/stubshm/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/stubshm/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/stubshm/func_table.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_aint.lo: src/mpid/pamid/src/mpid_aint.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_aint.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_aint.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_aint.lo `test -f 'src/mpid/pamid/src/mpid_aint.c' || echo '$(srcdir)/'`src [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_aint.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_aint.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_aint.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_aint.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-globals.lo: src/mpid/ch4/shm/posix/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/posix/globals.c' || echo '$(srcdi [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Tpo src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/posix/globals.c' object='src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_aint.lo `test -f 'src/mpid/pamid/src/mpid_aint.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_aint.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/posix/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/posix/globals.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.lo: src/mpid/pamid/src/mpidi_nbc_sched.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.lo `test -f 'src/mpid/pamid/src/mpidi_nbc_sched.c' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_nbc_sched.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-func_table.lo: src/mpid/ch4/shm/posix/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/posix/func_table.c' || e [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Tpo src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/posix/func_table.c' object='src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_nbc_sched.lo `test -f 'src/mpid/pamid/src/mpidi_nbc_sched.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_nbc_sched.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/posix/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/posix/func_table.c
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.lo: src/mpid/pamid/src/mpidi_pami_datatype.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.lo `test -f 'src/mpid/pamid/src/mpidi_p [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_pami_datatype.c' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-barrier.lo: src/mpid/ch4/shm/posix/barrier.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-barrier.lo -MD -MP -MF src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-barrier.Tpo -c -o src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-barrier.lo `test -f 'src/mpid/ch4/shm/posix/barrier.c' || echo '$(srcdi [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-barrier.Tpo src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at MPILIBNAME@_la-barrier.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/posix/barrier.c' object='src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-barrier.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpidi_pami_datatype.lo `test -f 'src/mpid/pamid/src/mpidi_pami_datatype.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_pami_datatype.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/posix/lib_lib at MPILIBNAME@_la-barrier.lo `test -f 'src/mpid/ch4/shm/posix/barrier.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/posix/barrier.c
src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-darray_support.lo: src/mpid/common/datatype/dataloop/darray_support.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-darray_support.lo -MD -MP -MF src/mpid/common/datatype/dataloop/$(DEPDIR)/lib_lib at MPILIBNAME@_la-darray_support.Tpo -c -o src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-darray_support.lo `test [...]
@@ -30571,138 +27675,138 @@ src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-subarray_support.lo: sr
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/dataloop/lib_lib at MPILIBNAME@_la-subarray_support.lo `test -f 'src/mpid/common/datatype/dataloop/subarray_support.c' || echo '$(srcdir)/'`src/mpid/common/datatype/dataloop/subarray_support.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_contents_support.lo: src/mpid/common/datatype/mpid_contents_support.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_contents_support.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_contents_support.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_contents_support.lo `test -f 'sr [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_contents_support.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_contents_support.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_contents_support.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_contents_support.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_contents_support.lo: src/mpid/common/datatype/mpidu_contents_support.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_contents_support.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_contents_support.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_contents_support.lo `test -f [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_contents_support.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_contents_support.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_contents_support.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_contents_support.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_contents_support.lo `test -f 'src/mpid/common/datatype/mpid_contents_support.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_contents_support.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_contents_support.lo `test -f 'src/mpid/common/datatype/mpidu_contents_support.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_contents_support.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.lo: src/mpid/common/datatype/mpid_datatype_contents.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_datatype_contents.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.lo: src/mpid/common/datatype/mpidu_datatype_contents.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.lo `test [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_datatype_contents.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_contents.lo `test -f 'src/mpid/common/datatype/mpid_datatype_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_datatype_contents.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_contents.lo `test -f 'src/mpid/common/datatype/mpidu_datatype_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_datatype_contents.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_free.lo: src/mpid/common/datatype/mpid_datatype_free.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_free.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_free.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_free.lo `test -f 'src/mpid/co [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_free.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_datatype_free.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_datatype_free.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_free.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.lo: src/mpid/common/datatype/mpidu_datatype_free.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.lo `test -f 'src/mpid [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_datatype_free.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_datatype_free.lo `test -f 'src/mpid/common/datatype/mpid_datatype_free.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_datatype_free.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_datatype_free.lo `test -f 'src/mpid/common/datatype/mpidu_datatype_free.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_datatype_free.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.lo: src/mpid/common/datatype/mpid_ext32_datatype.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.lo `test -f 'src/mpid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_ext32_datatype.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.lo: src/mpid/common/datatype/mpidu_ext32_datatype.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.lo `test -f 'src/m [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_ext32_datatype.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_datatype.lo `test -f 'src/mpid/common/datatype/mpid_ext32_datatype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_ext32_datatype.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_datatype.lo `test -f 'src/mpid/common/datatype/mpidu_ext32_datatype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_ext32_datatype.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.lo: src/mpid/common/datatype/mpid_ext32_segment.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.lo `test -f 'src/mpid/co [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_ext32_segment.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.lo: src/mpid/common/datatype/mpidu_ext32_segment.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.lo `test -f 'src/mpid [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_ext32_segment.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_ext32_segment.lo `test -f 'src/mpid/common/datatype/mpid_ext32_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_ext32_segment.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_ext32_segment.lo `test -f 'src/mpid/common/datatype/mpidu_ext32_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_ext32_segment.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_segment.lo: src/mpid/common/datatype/mpid_segment.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_segment.lo `test -f 'src/mpid/common/datatype/mpid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_segment.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_segment.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_segment.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_segment.lo: src/mpid/common/datatype/mpidu_segment.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_segment.lo `test -f 'src/mpid/common/datatype/m [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_segment.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_segment.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_segment.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_segment.lo `test -f 'src/mpid/common/datatype/mpid_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_segment.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_segment.lo `test -f 'src/mpid/common/datatype/mpidu_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_segment.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.lo: src/mpid/common/datatype/mpid_type_blockindexed.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_blockindexed.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.lo: src/mpid/common/datatype/mpidu_type_blockindexed.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.lo `test [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_blockindexed.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_blockindexed.lo `test -f 'src/mpid/common/datatype/mpid_type_blockindexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_blockindexed.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_blockindexed.lo `test -f 'src/mpid/common/datatype/mpidu_type_blockindexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_blockindexed.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_commit.lo: src/mpid/common/datatype/mpid_type_commit.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_commit.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_commit.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_commit.lo `test -f 'src/mpid/common/d [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_commit.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_commit.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_commit.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_commit.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_commit.lo: src/mpid/common/datatype/mpidu_type_commit.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_commit.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_commit.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_commit.lo `test -f 'src/mpid/commo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_commit.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_commit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_commit.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_commit.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_commit.lo `test -f 'src/mpid/common/datatype/mpid_type_commit.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_commit.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_commit.lo `test -f 'src/mpid/common/datatype/mpidu_type_commit.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_commit.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.lo: src/mpid/common/datatype/mpid_type_contiguous.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.lo `test -f 'src/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_contiguous.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.lo: src/mpid/common/datatype/mpidu_type_contiguous.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.lo `test -f 'sr [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_contiguous.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_contiguous.lo `test -f 'src/mpid/common/datatype/mpid_type_contiguous.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_contiguous.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_contiguous.lo `test -f 'src/mpid/common/datatype/mpidu_type_contiguous.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_contiguous.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.lo: src/mpid/common/datatype/mpid_type_create_pairtype.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_create_pairtype.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.lo: src/mpid/common/datatype/mpidu_type_create_pairtype.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype. [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_create_pairtype.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_pairtype.lo `test -f 'src/mpid/common/datatype/mpid_type_create_pairtype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_create_pairtype.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_pairtype.lo `test -f 'src/mpid/common/datatype/mpidu_type_create_pairtype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_create_pairtype.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.lo: src/mpid/common/datatype/mpid_type_create_resized.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.lo `te [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_create_resized.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.lo: src/mpid/common/datatype/mpidu_type_create_resized.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.lo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_create_resized.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_create_resized.lo `test -f 'src/mpid/common/datatype/mpid_type_create_resized.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_create_resized.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_create_resized.lo `test -f 'src/mpid/common/datatype/mpidu_type_create_resized.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_create_resized.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_debug.lo: src/mpid/common/datatype/mpid_type_debug.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_debug.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_debug.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_debug.lo `test -f 'src/mpid/common/data [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_debug.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_debug.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_debug.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_debug.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_debug.lo: src/mpid/common/datatype/mpidu_type_debug.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_debug.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_debug.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_debug.lo `test -f 'src/mpid/common/d [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_debug.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_debug.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_debug.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_debug.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_debug.lo `test -f 'src/mpid/common/datatype/mpid_type_debug.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_debug.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_debug.lo `test -f 'src/mpid/common/datatype/mpidu_type_debug.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_debug.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_dup.lo: src/mpid/common/datatype/mpid_type_dup.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_dup.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_dup.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_dup.lo `test -f 'src/mpid/common/datatype/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_dup.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_dup.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_dup.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_dup.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_dup.lo: src/mpid/common/datatype/mpidu_type_dup.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_dup.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_dup.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_dup.lo `test -f 'src/mpid/common/datatyp [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_dup.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_dup.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_dup.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_dup.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_dup.lo `test -f 'src/mpid/common/datatype/mpid_type_dup.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_dup.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_dup.lo `test -f 'src/mpid/common/datatype/mpidu_type_dup.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_dup.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.lo: src/mpid/common/datatype/mpid_type_get_contents.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_get_contents.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.lo: src/mpid/common/datatype/mpidu_type_get_contents.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.lo `test [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_get_contents.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_contents.lo `test -f 'src/mpid/common/datatype/mpid_type_get_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_get_contents.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_contents.lo `test -f 'src/mpid/common/datatype/mpidu_type_get_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_get_contents.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.lo: src/mpid/common/datatype/mpid_type_get_envelope.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_get_envelope.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.lo: src/mpid/common/datatype/mpidu_type_get_envelope.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.lo `test [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_get_envelope.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_get_envelope.lo `test -f 'src/mpid/common/datatype/mpid_type_get_envelope.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_get_envelope.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_get_envelope.lo `test -f 'src/mpid/common/datatype/mpidu_type_get_envelope.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_get_envelope.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_indexed.lo: src/mpid/common/datatype/mpid_type_indexed.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_indexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_indexed.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_indexed.lo `test -f 'src/mpid/commo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_indexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_indexed.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_indexed.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_indexed.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.lo: src/mpid/common/datatype/mpidu_type_indexed.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.lo `test -f 'src/mpid/co [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_indexed.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_indexed.lo `test -f 'src/mpid/common/datatype/mpid_type_indexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_indexed.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_indexed.lo `test -f 'src/mpid/common/datatype/mpidu_type_indexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_indexed.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_struct.lo: src/mpid/common/datatype/mpid_type_struct.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_struct.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_struct.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_struct.lo `test -f 'src/mpid/common/d [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_struct.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_struct.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_struct.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_struct.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_struct.lo: src/mpid/common/datatype/mpidu_type_struct.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_struct.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_struct.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_struct.lo `test -f 'src/mpid/commo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_struct.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_struct.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_struct.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_struct.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_struct.lo `test -f 'src/mpid/common/datatype/mpid_type_struct.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_struct.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_struct.lo `test -f 'src/mpid/common/datatype/mpidu_type_struct.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_struct.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_vector.lo: src/mpid/common/datatype/mpid_type_vector.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_vector.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_vector.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_vector.lo `test -f 'src/mpid/common/d [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_vector.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_vector.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_vector.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_vector.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_vector.lo: src/mpid/common/datatype/mpidu_type_vector.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_vector.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_vector.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_vector.lo `test -f 'src/mpid/commo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_vector.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_vector.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_vector.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_vector.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_vector.lo `test -f 'src/mpid/common/datatype/mpid_type_vector.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_vector.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_vector.lo `test -f 'src/mpid/common/datatype/mpidu_type_vector.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_vector.c
-src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.lo: src/mpid/common/datatype/mpid_type_zerolen.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.lo `test -f 'src/mpid/commo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_zerolen.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.lo: src/mpid/common/datatype/mpidu_type_zerolen.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.lo `test -f 'src/mpid/co [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_zerolen.c' object='src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpid_type_zerolen.lo `test -f 'src/mpid/common/datatype/mpid_type_zerolen.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_zerolen.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpidu_type_zerolen.lo `test -f 'src/mpid/common/datatype/mpidu_type_zerolen.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_zerolen.c
src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpir_type_flatten.lo: src/mpid/common/datatype/mpir_type_flatten.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpir_type_flatten.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpir_type_flatten.Tpo -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpir_type_flatten.lo `test -f 'src/mpid/commo [...]
@@ -30711,19 +27815,12 @@ src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpir_type_flatten.lo: src/mpid/c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at MPILIBNAME@_la-mpir_type_flatten.lo `test -f 'src/mpid/common/datatype/mpir_type_flatten.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpir_type_flatten.c
-src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpid_sched.lo: src/mpid/common/sched/mpid_sched.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpid_sched.lo -MD -MP -MF src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_sched.Tpo -c -o src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpid_sched.lo `test -f 'src/mpid/common/sched/mpid_sched.c' || echo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_sched.Tpo src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_sched.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/sched/mpid_sched.c' object='src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpid_sched.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpidu_sched.lo: src/mpid/common/sched/mpidu_sched.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpidu_sched.lo -MD -MP -MF src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_sched.Tpo -c -o src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpidu_sched.lo `test -f 'src/mpid/common/sched/mpidu_sched.c' || e [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_sched.Tpo src/mpid/common/sched/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_sched.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/sched/mpidu_sched.c' object='src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpidu_sched.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpid_sched.lo `test -f 'src/mpid/common/sched/mpid_sched.c' || echo '$(srcdir)/'`src/mpid/common/sched/mpid_sched.c
-
-src/mpid/common/sock/poll/lib_lib at MPILIBNAME@_la-sock.lo: src/mpid/common/sock/poll/sock.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/sock/poll/lib_lib at MPILIBNAME@_la-sock.lo -MD -MP -MF src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Tpo -c -o src/mpid/common/sock/poll/lib_lib at MPILIBNAME@_la-sock.lo `test -f 'src/mpid/common/sock/poll/sock.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Tpo src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-sock.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/sock/poll/sock.c' object='src/mpid/common/sock/poll/lib_lib at MPILIBNAME@_la-sock.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/sock/poll/lib_lib at MPILIBNAME@_la-sock.lo `test -f 'src/mpid/common/sock/poll/sock.c' || echo '$(srcdir)/'`src/mpid/common/sock/poll/sock.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/sched/lib_lib at MPILIBNAME@_la-mpidu_sched.lo `test -f 'src/mpid/common/sched/mpidu_sched.c' || echo '$(srcdir)/'`src/mpid/common/sched/mpidu_sched.c
src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_init.lo: src/mpid/common/hcoll/hcoll_init.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_init.lo -MD -MP -MF src/mpid/common/hcoll/$(DEPDIR)/lib_lib at MPILIBNAME@_la-hcoll_init.Tpo -c -o src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_init.lo `test -f 'src/mpid/common/hcoll/hcoll_init.c' || echo [...]
@@ -30746,6 +27843,20 @@ src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_rte.lo: src/mpid/common/hcoll
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/hcoll/lib_lib at MPILIBNAME@_la-hcoll_rte.lo `test -f 'src/mpid/common/hcoll/hcoll_rte.c' || echo '$(srcdir)/'`src/mpid/common/hcoll/hcoll_rte.c
+src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.lo: src/mpid/common/shm/mpidu_shm_alloc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.lo -MD -MP -MF src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.Tpo -c -o src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.lo `test -f 'src/mpid/common/shm/mpidu_shm_alloc [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.Tpo src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/shm/mpidu_shm_alloc.c' object='src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_alloc.lo `test -f 'src/mpid/common/shm/mpidu_shm_alloc.c' || echo '$(srcdir)/'`src/mpid/common/shm/mpidu_shm_alloc.c
+
+src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.lo: src/mpid/common/shm/mpidu_shm_barrier.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.lo -MD -MP -MF src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.Tpo -c -o src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.lo `test -f 'src/mpid/common/shm/mpidu_shm [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.Tpo src/mpid/common/shm/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/shm/mpidu_shm_barrier.c' object='src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/shm/lib_lib at MPILIBNAME@_la-mpidu_shm_barrier.lo `test -f 'src/mpid/common/shm/mpidu_shm_barrier.c' || echo '$(srcdir)/'`src/mpid/common/shm/mpidu_shm_barrier.c
+
src/mpi_t/lib_lib at MPILIBNAME@_la-mpit.lo: src/mpi_t/mpit.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpi_t/lib_lib at MPILIBNAME@_la-mpit.lo -MD -MP -MF src/mpi_t/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpit.Tpo -c -o src/mpi_t/lib_lib at MPILIBNAME@_la-mpit.lo `test -f 'src/mpi_t/mpit.c' || echo '$(srcdir)/'`src/mpi_t/mpit.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpi_t/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpit.Tpo src/mpi_t/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpit.Plo
@@ -30767,13 +27878,6 @@ src/nameserv/pmi/lib_lib at MPILIBNAME@_la-pmi_nameserv.lo: src/nameserv/pmi/pmi_na
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/nameserv/pmi/lib_lib at MPILIBNAME@_la-pmi_nameserv.lo `test -f 'src/nameserv/pmi/pmi_nameserv.c' || echo '$(srcdir)/'`src/nameserv/pmi/pmi_nameserv.c
-src/pmi/pmi2/poe/lib_lib at MPILIBNAME@_la-poe2pmi.lo: src/pmi/pmi2/poe/poe2pmi.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/pmi/pmi2/poe/lib_lib at MPILIBNAME@_la-poe2pmi.lo -MD -MP -MF src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at MPILIBNAME@_la-poe2pmi.Tpo -c -o src/pmi/pmi2/poe/lib_lib at MPILIBNAME@_la-poe2pmi.lo `test -f 'src/pmi/pmi2/poe/poe2pmi.c' || echo '$(srcdir)/'`src/pmi/pmi2/poe/poe2pmi.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at MPILIBNAME@_la-poe2pmi.Tpo src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at MPILIBNAME@_la-poe2pmi.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pmi/pmi2/poe/poe2pmi.c' object='src/pmi/pmi2/poe/lib_lib at MPILIBNAME@_la-poe2pmi.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/pmi/pmi2/poe/lib_lib at MPILIBNAME@_la-poe2pmi.lo `test -f 'src/pmi/pmi2/poe/poe2pmi.c' || echo '$(srcdir)/'`src/pmi/pmi2/poe/poe2pmi.c
-
src/pmi/pmi2/simple/lib_lib at MPILIBNAME@_la-simple2pmi.lo: src/pmi/pmi2/simple/simple2pmi.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/pmi/pmi2/simple/lib_lib at MPILIBNAME@_la-simple2pmi.lo -MD -MP -MF src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at MPILIBNAME@_la-simple2pmi.Tpo -c -o src/pmi/pmi2/simple/lib_lib at MPILIBNAME@_la-simple2pmi.lo `test -f 'src/pmi/pmi2/simple/simple2pmi.c' || echo '$(srcdi [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at MPILIBNAME@_la-simple2pmi.Tpo src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at MPILIBNAME@_la-simple2pmi.Plo
@@ -36143,34 +33247,6 @@ src/mpi/topo/lib_lib at PMPILIBNAME@_la-topoutil.lo: src/mpi/topo/topoutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpi/topo/lib_lib at PMPILIBNAME@_la-topoutil.lo `test -f 'src/mpi/topo/topoutil.c' || echo '$(srcdir)/'`src/mpi/topo/topoutil.c
-src/util/dbg/lib_lib at PMPILIBNAME@_la-dbg_printf.lo: src/util/dbg/dbg_printf.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/dbg/lib_lib at PMPILIBNAME@_la-dbg_printf.lo -MD -MP -MF src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-dbg_printf.Tpo -c -o src/util/dbg/lib_lib at PMPILIBNAME@_la-dbg_printf.lo `test -f 'src/util/dbg/dbg_printf.c' || echo '$(srcdir)/'`src/util/dbg/dbg_printf.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-dbg_printf.Tpo src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-dbg_printf.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/dbg/dbg_printf.c' object='src/util/dbg/lib_lib at PMPILIBNAME@_la-dbg_printf.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/dbg/lib_lib at PMPILIBNAME@_la-dbg_printf.lo `test -f 'src/util/dbg/dbg_printf.c' || echo '$(srcdir)/'`src/util/dbg/dbg_printf.c
-
-src/util/dbg/lib_lib at PMPILIBNAME@_la-timelimit.lo: src/util/dbg/timelimit.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/dbg/lib_lib at PMPILIBNAME@_la-timelimit.lo -MD -MP -MF src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-timelimit.Tpo -c -o src/util/dbg/lib_lib at PMPILIBNAME@_la-timelimit.lo `test -f 'src/util/dbg/timelimit.c' || echo '$(srcdir)/'`src/util/dbg/timelimit.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-timelimit.Tpo src/util/dbg/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-timelimit.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/dbg/timelimit.c' object='src/util/dbg/lib_lib at PMPILIBNAME@_la-timelimit.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/dbg/lib_lib at PMPILIBNAME@_la-timelimit.lo `test -f 'src/util/dbg/timelimit.c' || echo '$(srcdir)/'`src/util/dbg/timelimit.c
-
-src/util/instrm/lib_lib at PMPILIBNAME@_la-instr.lo: src/util/instrm/instr.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/instrm/lib_lib at PMPILIBNAME@_la-instr.lo -MD -MP -MF src/util/instrm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-instr.Tpo -c -o src/util/instrm/lib_lib at PMPILIBNAME@_la-instr.lo `test -f 'src/util/instrm/instr.c' || echo '$(srcdir)/'`src/util/instrm/instr.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/instrm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-instr.Tpo src/util/instrm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-instr.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/instrm/instr.c' object='src/util/instrm/lib_lib at PMPILIBNAME@_la-instr.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/instrm/lib_lib at PMPILIBNAME@_la-instr.lo `test -f 'src/util/instrm/instr.c' || echo '$(srcdir)/'`src/util/instrm/instr.c
-
-src/util/mem/lib_lib at PMPILIBNAME@_la-trmem.lo: src/util/mem/trmem.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at PMPILIBNAME@_la-trmem.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-trmem.Tpo -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-trmem.lo `test -f 'src/util/mem/trmem.c' || echo '$(srcdir)/'`src/util/mem/trmem.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-trmem.Tpo src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-trmem.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/mem/trmem.c' object='src/util/mem/lib_lib at PMPILIBNAME@_la-trmem.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-trmem.lo `test -f 'src/util/mem/trmem.c' || echo '$(srcdir)/'`src/util/mem/trmem.c
-
src/util/mem/lib_lib at PMPILIBNAME@_la-handlemem.lo: src/util/mem/handlemem.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at PMPILIBNAME@_la-handlemem.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-handlemem.Tpo -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-handlemem.lo `test -f 'src/util/mem/handlemem.c' || echo '$(srcdir)/'`src/util/mem/handlemem.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-handlemem.Tpo src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-handlemem.Plo
@@ -36178,20 +33254,6 @@ src/util/mem/lib_lib at PMPILIBNAME@_la-handlemem.lo: src/util/mem/handlemem.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-handlemem.lo `test -f 'src/util/mem/handlemem.c' || echo '$(srcdir)/'`src/util/mem/handlemem.c
-src/util/mem/lib_lib at PMPILIBNAME@_la-safestr.lo: src/util/mem/safestr.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at PMPILIBNAME@_la-safestr.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-safestr.Tpo -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-safestr.lo `test -f 'src/util/mem/safestr.c' || echo '$(srcdir)/'`src/util/mem/safestr.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-safestr.Tpo src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-safestr.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/mem/safestr.c' object='src/util/mem/lib_lib at PMPILIBNAME@_la-safestr.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-safestr.lo `test -f 'src/util/mem/safestr.c' || echo '$(srcdir)/'`src/util/mem/safestr.c
-
-src/util/mem/lib_lib at PMPILIBNAME@_la-argstr.lo: src/util/mem/argstr.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at PMPILIBNAME@_la-argstr.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-argstr.Tpo -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-argstr.lo `test -f 'src/util/mem/argstr.c' || echo '$(srcdir)/'`src/util/mem/argstr.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-argstr.Tpo src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-argstr.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/mem/argstr.c' object='src/util/mem/lib_lib at PMPILIBNAME@_la-argstr.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-argstr.lo `test -f 'src/util/mem/argstr.c' || echo '$(srcdir)/'`src/util/mem/argstr.c
-
src/util/mem/lib_lib at PMPILIBNAME@_la-strerror.lo: src/util/mem/strerror.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/mem/lib_lib at PMPILIBNAME@_la-strerror.lo -MD -MP -MF src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-strerror.Tpo -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-strerror.lo `test -f 'src/util/mem/strerror.c' || echo '$(srcdir)/'`src/util/mem/strerror.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-strerror.Tpo src/util/mem/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-strerror.Plo
@@ -36199,26 +33261,12 @@ src/util/mem/lib_lib at PMPILIBNAME@_la-strerror.lo: src/util/mem/strerror.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/mem/lib_lib at PMPILIBNAME@_la-strerror.lo `test -f 'src/util/mem/strerror.c' || echo '$(srcdir)/'`src/util/mem/strerror.c
-src/util/other/lib_lib at PMPILIBNAME@_la-outliers.lo: src/util/other/outliers.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/other/lib_lib at PMPILIBNAME@_la-outliers.lo -MD -MP -MF src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-outliers.Tpo -c -o src/util/other/lib_lib at PMPILIBNAME@_la-outliers.lo `test -f 'src/util/other/outliers.c' || echo '$(srcdir)/'`src/util/other/outliers.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-outliers.Tpo src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-outliers.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/other/outliers.c' object='src/util/other/lib_lib at PMPILIBNAME@_la-outliers.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/other/lib_lib at PMPILIBNAME@_la-outliers.lo `test -f 'src/util/other/outliers.c' || echo '$(srcdir)/'`src/util/other/outliers.c
-
-src/util/other/lib_lib at PMPILIBNAME@_la-assert.lo: src/util/other/assert.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/other/lib_lib at PMPILIBNAME@_la-assert.lo -MD -MP -MF src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Tpo -c -o src/util/other/lib_lib at PMPILIBNAME@_la-assert.lo `test -f 'src/util/other/assert.c' || echo '$(srcdir)/'`src/util/other/assert.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Tpo src/util/other/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/other/assert.c' object='src/util/other/lib_lib at PMPILIBNAME@_la-assert.lo' libtool=yes @AMDEPBACKSLASH@
+src/util/cvar/lib_lib at PMPILIBNAME@_la-mpir_cvars.lo: src/util/cvar/mpir_cvars.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/cvar/lib_lib at PMPILIBNAME@_la-mpir_cvars.lo -MD -MP -MF src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpir_cvars.Tpo -c -o src/util/cvar/lib_lib at PMPILIBNAME@_la-mpir_cvars.lo `test -f 'src/util/cvar/mpir_cvars.c' || echo '$(srcdir)/'`src/util/cvar/m [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpir_cvars.Tpo src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpir_cvars.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/cvar/mpir_cvars.c' object='src/util/cvar/lib_lib at PMPILIBNAME@_la-mpir_cvars.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/other/lib_lib at PMPILIBNAME@_la-assert.lo `test -f 'src/util/other/assert.c' || echo '$(srcdir)/'`src/util/other/assert.c
-
-src/util/cvar/lib_lib at PMPILIBNAME@_la-mpich_cvars.lo: src/util/cvar/mpich_cvars.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/cvar/lib_lib at PMPILIBNAME@_la-mpich_cvars.lo -MD -MP -MF src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpich_cvars.Tpo -c -o src/util/cvar/lib_lib at PMPILIBNAME@_la-mpich_cvars.lo `test -f 'src/util/cvar/mpich_cvars.c' || echo '$(srcdir)/'`src/util/cv [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpich_cvars.Tpo src/util/cvar/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpich_cvars.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/cvar/mpich_cvars.c' object='src/util/cvar/lib_lib at PMPILIBNAME@_la-mpich_cvars.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/cvar/lib_lib at PMPILIBNAME@_la-mpich_cvars.lo `test -f 'src/util/cvar/mpich_cvars.c' || echo '$(srcdir)/'`src/util/cvar/mpich_cvars.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/cvar/lib_lib at PMPILIBNAME@_la-mpir_cvars.lo `test -f 'src/util/cvar/mpir_cvars.c' || echo '$(srcdir)/'`src/util/cvar/mpir_cvars.c
src/util/procmap/lib_lib at PMPILIBNAME@_la-local_proc.lo: src/util/procmap/local_proc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/procmap/lib_lib at PMPILIBNAME@_la-local_proc.lo -MD -MP -MF src/util/procmap/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-local_proc.Tpo -c -o src/util/procmap/lib_lib at PMPILIBNAME@_la-local_proc.lo `test -f 'src/util/procmap/local_proc.c' || echo '$(srcdir)/'`src [...]
@@ -36227,40 +33275,12 @@ src/util/procmap/lib_lib at PMPILIBNAME@_la-local_proc.lo: src/util/procmap/local_p
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/procmap/lib_lib at PMPILIBNAME@_la-local_proc.lo `test -f 'src/util/procmap/local_proc.c' || echo '$(srcdir)/'`src/util/procmap/local_proc.c
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread.lo: src/util/thread/mpiu_thread.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread.Tpo -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread.lo `test -f 'src/util/thread/mpiu_thread.c' || echo '$(srcdir)/'`src [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread.Tpo src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread.c' object='src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread.lo `test -f 'src/util/thread/mpiu_thread.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread.c
-
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.lo: src/util/thread/mpiu_thread_win.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.Tpo -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.lo `test -f 'src/util/thread/mpiu_thread_win.c' || echo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.Tpo src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread_win.c' object='src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_win.lo `test -f 'src/util/thread/mpiu_thread_win.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread_win.c
-
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.lo: src/util/thread/mpiu_thread_solaris.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.Tpo -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.lo `test -f 'src/util/thread/mpiu_thread_sol [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.Tpo src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread_solaris.c' object='src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_solaris.lo `test -f 'src/util/thread/mpiu_thread_solaris.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread_solaris.c
-
-src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.lo: src/util/thread/mpiu_thread_posix.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.lo -MD -MP -MF src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.Tpo -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.lo `test -f 'src/util/thread/mpiu_thread_posix.c' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.Tpo src/util/thread/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/thread/mpiu_thread_posix.c' object='src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.lo' libtool=yes @AMDEPBACKSLASH@
+src/util/assert/lib_lib at PMPILIBNAME@_la-assert.lo: src/util/assert/assert.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/assert/lib_lib at PMPILIBNAME@_la-assert.lo -MD -MP -MF src/util/assert/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Tpo -c -o src/util/assert/lib_lib at PMPILIBNAME@_la-assert.lo `test -f 'src/util/assert/assert.c' || echo '$(srcdir)/'`src/util/assert/assert.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/assert/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Tpo src/util/assert/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-assert.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/assert/assert.c' object='src/util/assert/lib_lib at PMPILIBNAME@_la-assert.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/thread/lib_lib at PMPILIBNAME@_la-mpiu_thread_posix.lo `test -f 'src/util/thread/mpiu_thread_posix.c' || echo '$(srcdir)/'`src/util/thread/mpiu_thread_posix.c
-
-src/util/timers/lib_lib at PMPILIBNAME@_la-mpiu_timer.lo: src/util/timers/mpiu_timer.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/util/timers/lib_lib at PMPILIBNAME@_la-mpiu_timer.lo -MD -MP -MF src/util/timers/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_timer.Tpo -c -o src/util/timers/lib_lib at PMPILIBNAME@_la-mpiu_timer.lo `test -f 'src/util/timers/mpiu_timer.c' || echo '$(srcdir)/'`src/uti [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/util/timers/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_timer.Tpo src/util/timers/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpiu_timer.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/util/timers/mpiu_timer.c' object='src/util/timers/lib_lib at PMPILIBNAME@_la-mpiu_timer.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/timers/lib_lib at PMPILIBNAME@_la-mpiu_timer.lo `test -f 'src/util/timers/mpiu_timer.c' || echo '$(srcdir)/'`src/util/timers/mpiu_timer.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/util/assert/lib_lib at PMPILIBNAME@_la-assert.lo `test -f 'src/util/assert/assert.c' || echo '$(srcdir)/'`src/util/assert/assert.c
src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-fdebug.lo: src/binding/fortran/mpif_h/fdebug.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-fdebug.lo -MD -MP -MF src/binding/fortran/mpif_h/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-fdebug.Tpo -c -o src/binding/fortran/mpif_h/lib_lib at PMPILIBNAME@_la-fdebug.lo `test -f 'src/binding/fortran/mpif_h/fdebug.c' [...]
@@ -36787,13 +33807,6 @@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3i_eagernoncontig.lo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-ch3i_eagernoncontig.lo `test -f 'src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
-src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.lo `t [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c' object='src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_alloc.lo `test -f 'src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c
-
src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_init.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_init.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_init.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_init.lo `test [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_init.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_init.Plo
@@ -36801,13 +33814,6 @@ src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_init.lo: src/
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_init.lo `test -f 'src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
-src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c' object='src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_barrier.lo `test -f 'src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c
-
src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.lo: src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.lo -MD -MP -MF src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.Tpo -c -o src/mpid/ch3/channels/nemesis/src/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.lo `t [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.Tpo src/mpid/ch3/channels/nemesis/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_nem_mpich.Plo
@@ -37158,6 +34164,13 @@ src/mpid/ch3/channels/nemesis/utils/replacements/lib_lib at PMPILIBNAME@_la-mkstemp
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/nemesis/utils/replacements/lib_lib at PMPILIBNAME@_la-mkstemp.lo `test -f 'src/mpid/ch3/channels/nemesis/utils/replacements/mkstemp.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/nemesis/utils/replacements/mkstemp.c
+src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-sock.lo: src/mpid/ch3/channels/sock/src/sock.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-sock.lo -MD -MP -MF src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Tpo -c -o src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-sock.lo `test -f 'src/mpid/ch3/channels/sock/src/ [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Tpo src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch3/channels/sock/src/sock.c' object='src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-sock.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-sock.lo `test -f 'src/mpid/ch3/channels/sock/src/sock.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/sock/src/sock.c
+
src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo: src/mpid/ch3/channels/sock/src/ch3_finalize.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo -MD -MP -MF src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_finalize.Tpo -c -o src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_finalize.lo `test -f 'src/mpi [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_finalize.Tpo src/mpid/ch3/channels/sock/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch3_finalize.Plo
@@ -37214,761 +34227,131 @@ src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_win_fns.lo: src/mpid/
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch3/channels/sock/src/lib_lib at PMPILIBNAME@_la-ch3_win_fns.lo `test -f 'src/mpid/ch3/channels/sock/src/ch3_win_fns.c' || echo '$(srcdir)/'`src/mpid/ch3/channels/sock/src/ch3_win_fns.c
-src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_barrier.lo: src/mpid/pamid/src/coll/barrier/mpido_barrier.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_barrier.lo -MD -MP -MF src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_barrier.Tpo -c -o src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_barrier.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_barrier.Tpo src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_barrier.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/barrier/mpido_barrier.c' object='src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_barrier.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_barrier.lo `test -f 'src/mpid/pamid/src/coll/barrier/mpido_barrier.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/barrier/mpido_barrier.c
-
-src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.lo: src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.lo -MD -MP -MF src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.Tpo -c -o src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.Tpo src/mpid/pamid/src/coll/barrier/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c' object='src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/barrier/lib_lib at PMPILIBNAME@_la-mpido_ibarrier.lo `test -f 'src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
-
-src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_bcast.lo: src/mpid/pamid/src/coll/bcast/mpido_bcast.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_bcast.lo -MD -MP -MF src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_bcast.Tpo -c -o src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_bcast.lo `test -f 'src/mpid/pami [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_bcast.Tpo src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_bcast.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/bcast/mpido_bcast.c' object='src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_bcast.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_bcast.lo `test -f 'src/mpid/pamid/src/coll/bcast/mpido_bcast.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/bcast/mpido_bcast.c
-
-src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_ibcast.lo: src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_ibcast.lo -MD -MP -MF src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibcast.Tpo -c -o src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_ibcast.lo `test -f 'src/mpid/p [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibcast.Tpo src/mpid/pamid/src/coll/bcast/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ibcast.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/bcast/mpido_ibcast.c' object='src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_ibcast.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/bcast/lib_lib at PMPILIBNAME@_la-mpido_ibcast.lo `test -f 'src/mpid/pamid/src/coll/bcast/mpido_ibcast.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
-
-src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_allreduce.lo: src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_allreduce.lo -MD -MP -MF src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allreduce.Tpo -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_allreduce.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allreduce.Tpo src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allreduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c' object='src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_allreduce.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_allreduce.lo `test -f 'src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c
-
-src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.lo: src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.lo -MD -MP -MF src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.Tpo -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_iallreduce [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.Tpo src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c' object='src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allreduce/lib_lib at PMPILIBNAME@_la-mpido_iallreduce.lo `test -f 'src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
-
-src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_allgather.lo: src/mpid/pamid/src/coll/allgather/mpido_allgather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_allgather.lo -MD -MP -MF src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgather.Tpo -c -o src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_allgather.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgather.Tpo src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgather/mpido_allgather.c' object='src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_allgather.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_allgather.lo `test -f 'src/mpid/pamid/src/coll/allgather/mpido_allgather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgather/mpido_allgather.c
-
-src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_iallgather.lo: src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_iallgather.lo -MD -MP -MF src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgather.Tpo -c -o src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_iallgather [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgather.Tpo src/mpid/pamid/src/coll/allgather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgather/mpido_iallgather.c' object='src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_iallgather.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgather/lib_lib at PMPILIBNAME@_la-mpido_iallgather.lo `test -f 'src/mpid/pamid/src/coll/allgather/mpido_iallgather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
-
-src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.lo: src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.Tpo -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_allgath [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.Tpo src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c' object='src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_allgatherv.lo `test -f 'src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
-
-src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.lo: src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.Tpo -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_iallg [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.Tpo src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c' object='src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/allgatherv/lib_lib at PMPILIBNAME@_la-mpido_iallgatherv.lo `test -f 'src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
-
-src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_scatterv.lo: src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_scatterv.lo -MD -MP -MF src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatterv.Tpo -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_scatterv.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatterv.Tpo src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatterv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c' object='src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_scatterv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_scatterv.lo `test -f 'src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
-
-src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.lo: src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.lo -MD -MP -MF src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.Tpo -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.lo `t [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.Tpo src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c' object='src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-ch4_globals.lo: src/mpid/ch4/src/ch4_globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-ch4_globals.lo -MD -MP -MF src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch4_globals.Tpo -c -o src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-ch4_globals.lo `test -f 'src/mpid/ch4/src/ch4_globals.c' || echo '$(srcdir)/' [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch4_globals.Tpo src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-ch4_globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/src/ch4_globals.c' object='src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-ch4_globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatterv/lib_lib at PMPILIBNAME@_la-mpido_iscatterv.lo `test -f 'src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-ch4_globals.lo `test -f 'src/mpid/ch4/src/ch4_globals.c' || echo '$(srcdir)/'`src/mpid/ch4/src/ch4_globals.c
-src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_scatter.lo: src/mpid/pamid/src/coll/scatter/mpido_scatter.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_scatter.lo -MD -MP -MF src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatter.Tpo -c -o src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_scatter.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatter.Tpo src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scatter.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatter/mpido_scatter.c' object='src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_scatter.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.lo: src/mpid/ch4/src/mpid_ch4_net_array.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.lo -MD -MP -MF src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.Tpo -c -o src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_net_a [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.Tpo src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/src/mpid_ch4_net_array.c' object='src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_scatter.lo `test -f 'src/mpid/pamid/src/coll/scatter/mpido_scatter.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatter/mpido_scatter.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_net_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_net_array.c' || echo '$(srcdir)/'`src/mpid/ch4/src/mpid_ch4_net_array.c
-src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_iscatter.lo: src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_iscatter.lo -MD -MP -MF src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatter.Tpo -c -o src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_iscatter.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatter.Tpo src/mpid/pamid/src/coll/scatter/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iscatter.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scatter/mpido_iscatter.c' object='src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_iscatter.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.lo: src/mpid/ch4/src/mpid_ch4_shm_array.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.lo -MD -MP -MF src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.Tpo -c -o src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_shm_a [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.Tpo src/mpid/ch4/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/src/mpid_ch4_shm_array.c' object='src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scatter/lib_lib at PMPILIBNAME@_la-mpido_iscatter.lo `test -f 'src/mpid/pamid/src/coll/scatter/mpido_iscatter.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/src/lib_lib at PMPILIBNAME@_la-mpid_ch4_shm_array.lo `test -f 'src/mpid/ch4/src/mpid_ch4_shm_array.c' || echo '$(srcdir)/'`src/mpid/ch4/src/mpid_ch4_shm_array.c
-src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_gather.lo: src/mpid/pamid/src/coll/gather/mpido_gather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_gather.lo -MD -MP -MF src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gather.Tpo -c -o src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_gather.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gather.Tpo src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gather/mpido_gather.c' object='src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_gather.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_globals.lo: src/mpid/ch4/generic/mpidig_globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_globals.lo -MD -MP -MF src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_globals.Tpo -c -o src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_globals.lo `test -f 'src/mpid/ch4/generic/mpidig_glo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_globals.Tpo src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/generic/mpidig_globals.c' object='src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_gather.lo `test -f 'src/mpid/pamid/src/coll/gather/mpido_gather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gather/mpido_gather.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_globals.lo `test -f 'src/mpid/ch4/generic/mpidig_globals.c' || echo '$(srcdir)/'`src/mpid/ch4/generic/mpidig_globals.c
-src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_igather.lo: src/mpid/pamid/src/coll/gather/mpido_igather.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_igather.lo -MD -MP -MF src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igather.Tpo -c -o src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_igather.lo `test -f 'src/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igather.Tpo src/mpid/pamid/src/coll/gather/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igather.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gather/mpido_igather.c' object='src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_igather.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_init.lo: src/mpid/ch4/generic/mpidig_init.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_init.lo -MD -MP -MF src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_init.Tpo -c -o src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_init.lo `test -f 'src/mpid/ch4/generic/mpidig_init.c' || e [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_init.Tpo src/mpid/ch4/generic/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidig_init.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/generic/mpidig_init.c' object='src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_init.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gather/lib_lib at PMPILIBNAME@_la-mpido_igather.lo `test -f 'src/mpid/pamid/src/coll/gather/mpido_igather.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gather/mpido_igather.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/generic/lib_lib at PMPILIBNAME@_la-mpidig_init.lo `test -f 'src/mpid/ch4/generic/mpidig_init.c' || echo '$(srcdir)/'`src/mpid/ch4/generic/mpidig_init.c
-src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_alltoall.lo: src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_alltoall.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoall.Tpo -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_alltoall.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoall.Tpo src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoall.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c' object='src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_alltoall.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-func_table.lo: src/mpid/ch4/netmod/ofi/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ofi/func_table [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ofi/func_table.c' object='src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_alltoall.lo `test -f 'src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ofi/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ofi/func_table.c
-src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.lo: src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.Tpo -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.lo `t [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.Tpo src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c' object='src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/ofi/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ofi/globals.c' || echo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ofi/globals.c' object='src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoall/lib_lib at PMPILIBNAME@_la-mpido_ialltoall.lo `test -f 'src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ofi/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ofi/globals.c
-src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.lo: src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.Tpo -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.Tpo src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c' object='src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-util.lo: src/mpid/ch4/netmod/ofi/util.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-util.lo -MD -MP -MF src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-util.Tpo -c -o src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-util.lo `test -f 'src/mpid/ch4/netmod/ofi/util.c' || echo '$(srcdir)/' [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-util.Tpo src/mpid/ch4/netmod/ofi/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-util.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ofi/util.c' object='src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-util.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_alltoallv.lo `test -f 'src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ofi/lib_lib at PMPILIBNAME@_la-util.lo `test -f 'src/mpid/ch4/netmod/ofi/util.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ofi/util.c
-src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.lo: src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.Tpo -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.Tpo src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c' object='src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-func_table.lo: src/mpid/ch4/netmod/ucx/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ucx/func_table [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ucx/func_table.c' object='src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoallv/lib_lib at PMPILIBNAME@_la-mpido_ialltoallv.lo `test -f 'src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/ucx/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ucx/func_table.c
-src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_gatherv.lo: src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_gatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gatherv.Tpo -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_gatherv.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gatherv.Tpo src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_gatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c' object='src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_gatherv.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/ucx/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ucx/globals.c' || echo [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/ucx/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/ucx/globals.c' object='src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_gatherv.lo `test -f 'src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/ucx/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/ucx/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/ucx/globals.c
-src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_igatherv.lo: src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_igatherv.lo -MD -MP -MF src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igatherv.Tpo -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_igatherv.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igatherv.Tpo src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_igatherv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c' object='src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_igatherv.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/portals4/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/portals4 [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/portals4/globals.c' object='src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/gatherv/lib_lib at PMPILIBNAME@_la-mpido_igatherv.lo `test -f 'src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/portals4/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/portals4/globals.c
-src/mpid/pamid/src/coll/scan/lib_lib at PMPILIBNAME@_la-mpido_scan.lo: src/mpid/pamid/src/coll/scan/mpido_scan.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/scan/lib_lib at PMPILIBNAME@_la-mpido_scan.lo -MD -MP -MF src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scan.Tpo -c -o src/mpid/pamid/src/coll/scan/lib_lib at PMPILIBNAME@_la-mpido_scan.lo `test -f 'src/mpid/pamid/src/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scan.Tpo src/mpid/pamid/src/coll/scan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_scan.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/scan/mpido_scan.c' object='src/mpid/pamid/src/coll/scan/lib_lib at PMPILIBNAME@_la-mpido_scan.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-func_table.lo: src/mpid/ch4/netmod/portals4/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo src/mpid/ch4/netmod/portals4/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/portals4/func_table.c' object='src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/scan/lib_lib at PMPILIBNAME@_la-mpido_scan.lo `test -f 'src/mpid/pamid/src/coll/scan/mpido_scan.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/scan/mpido_scan.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/portals4/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/netmod/portals4/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/portals4/func_table.c
-src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_reduce.lo: src/mpid/pamid/src/coll/reduce/mpido_reduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_reduce.lo -MD -MP -MF src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_reduce.Tpo -c -o src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_reduce.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_reduce.Tpo src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_reduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/reduce/mpido_reduce.c' object='src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_reduce.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/netmod/stubnm/lib_lib at PMPILIBNAME@_la-globals.lo: src/mpid/ch4/netmod/stubnm/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/netmod/stubnm/lib_lib at PMPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/netmod/stubnm/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/stubnm/globals [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo src/mpid/ch4/netmod/stubnm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/netmod/stubnm/globals.c' object='src/mpid/ch4/netmod/stubnm/lib_lib at PMPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_reduce.lo `test -f 'src/mpid/pamid/src/coll/reduce/mpido_reduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/reduce/mpido_reduce.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/netmod/stubnm/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/netmod/stubnm/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/netmod/stubnm/globals.c
-src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_ireduce.lo: src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_ireduce.lo -MD -MP -MF src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ireduce.Tpo -c -o src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_ireduce.lo `test -f 'src/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ireduce.Tpo src/mpid/pamid/src/coll/reduce/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ireduce.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/reduce/mpido_ireduce.c' object='src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_ireduce.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-globals.lo: src/mpid/ch4/shm/stubshm/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/stubshm/globals.c' || e [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/stubshm/globals.c' object='src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/reduce/lib_lib at PMPILIBNAME@_la-mpido_ireduce.lo `test -f 'src/mpid/pamid/src/coll/reduce/mpido_ireduce.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/stubshm/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/stubshm/globals.c
-src/mpid/pamid/src/coll/alltoallw/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.lo: src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/alltoallw/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.lo -MD -MP -MF src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.Tpo -c -o src/mpid/pamid/src/coll/alltoallw/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.Tpo src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c' object='src/mpid/pamid/src/coll/alltoallw/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-func_table.lo: src/mpid/ch4/shm/stubshm/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/stubshm/func_t [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo src/mpid/ch4/shm/stubshm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/stubshm/func_table.c' object='src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/alltoallw/lib_lib at PMPILIBNAME@_la-mpido_ialltoallw.lo `test -f 'src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/stubshm/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/stubshm/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/stubshm/func_table.c
-src/mpid/pamid/src/coll/exscan/lib_lib at PMPILIBNAME@_la-mpido_iexscan.lo: src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/exscan/lib_lib at PMPILIBNAME@_la-mpido_iexscan.lo -MD -MP -MF src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iexscan.Tpo -c -o src/mpid/pamid/src/coll/exscan/lib_lib at PMPILIBNAME@_la-mpido_iexscan.lo `test -f 'src/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iexscan.Tpo src/mpid/pamid/src/coll/exscan/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_iexscan.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/exscan/mpido_iexscan.c' object='src/mpid/pamid/src/coll/exscan/lib_lib at PMPILIBNAME@_la-mpido_iexscan.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-globals.lo: src/mpid/ch4/shm/posix/globals.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-globals.lo -MD -MP -MF src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo -c -o src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/posix/globals.c' || echo '$(s [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Tpo src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-globals.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/posix/globals.c' object='src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/exscan/lib_lib at PMPILIBNAME@_la-mpido_iexscan.lo `test -f 'src/mpid/pamid/src/coll/exscan/mpido_iexscan.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-globals.lo `test -f 'src/mpid/ch4/shm/posix/globals.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/posix/globals.c
-src/mpid/pamid/src/coll/ired_scat_block/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.lo: src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/ired_scat_block/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.lo -MD -MP -MF src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.Tpo -c -o src/mpid/pamid/src/coll/ired_scat_block/lib_lib at PMPI [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.Tpo src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c' object='src/mpid/pamid/src/coll/ired_scat_block/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-func_table.lo: src/mpid/ch4/shm/posix/func_table.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-func_table.lo -MD -MP -MF src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo -c -o src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/posix/func_table.c' [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Tpo src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-func_table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/posix/func_table.c' object='src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-func_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/ired_scat_block/lib_lib at PMPILIBNAME@_la-mpido_ired_scat_block.lo `test -f 'src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-func_table.lo `test -f 'src/mpid/ch4/shm/posix/func_table.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/posix/func_table.c
-src/mpid/pamid/src/coll/ired_scat/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.lo: src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/ired_scat/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.lo -MD -MP -MF src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.Tpo -c -o src/mpid/pamid/src/coll/ired_scat/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.Tpo src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c' object='src/mpid/pamid/src/coll/ired_scat/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-barrier.lo: src/mpid/ch4/shm/posix/barrier.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-barrier.lo -MD -MP -MF src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-barrier.Tpo -c -o src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-barrier.lo `test -f 'src/mpid/ch4/shm/posix/barrier.c' || echo '$(s [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-barrier.Tpo src/mpid/ch4/shm/posix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-barrier.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/ch4/shm/posix/barrier.c' object='src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-barrier.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/ired_scat/lib_lib at PMPILIBNAME@_la-mpido_ired_scat.lo `test -f 'src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
-
-src/mpid/pamid/src/coll/red_scat/lib_lib at PMPILIBNAME@_la-mpido_red_scat.lo: src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/red_scat/lib_lib at PMPILIBNAME@_la-mpido_red_scat.lo -MD -MP -MF src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_red_scat.Tpo -c -o src/mpid/pamid/src/coll/red_scat/lib_lib at PMPILIBNAME@_la-mpido_red_scat.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_red_scat.Tpo src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpido_red_scat.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c' object='src/mpid/pamid/src/coll/red_scat/lib_lib at PMPILIBNAME@_la-mpido_red_scat.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/red_scat/lib_lib at PMPILIBNAME@_la-mpido_red_scat.lo `test -f 'src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c
-
-src/mpid/pamid/src/coll/lib_lib at PMPILIBNAME@_la-coll_utils.lo: src/mpid/pamid/src/coll/coll_utils.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/coll/lib_lib at PMPILIBNAME@_la-coll_utils.lo -MD -MP -MF src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-coll_utils.Tpo -c -o src/mpid/pamid/src/coll/lib_lib at PMPILIBNAME@_la-coll_utils.lo `test -f 'src/mpid/pamid/src/coll/coll_utils [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-coll_utils.Tpo src/mpid/pamid/src/coll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-coll_utils.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/coll/coll_utils.c' object='src/mpid/pamid/src/coll/lib_lib at PMPILIBNAME@_la-coll_utils.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/coll/lib_lib at PMPILIBNAME@_la-coll_utils.lo `test -f 'src/mpid/pamid/src/coll/coll_utils.c' || echo '$(srcdir)/'`src/mpid/pamid/src/coll/coll_utils.c
-
-src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_comm.lo: src/mpid/pamid/src/comm/mpid_comm.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_comm.lo -MD -MP -MF src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm.Tpo -c -o src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_comm.lo `test -f 'src/mpid/pamid/src/comm/mpid_comm.c' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm.Tpo src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/comm/mpid_comm.c' object='src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_comm.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_comm.lo `test -f 'src/mpid/pamid/src/comm/mpid_comm.c' || echo '$(srcdir)/'`src/mpid/pamid/src/comm/mpid_comm.c
-
-src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.lo: src/mpid/pamid/src/comm/mpid_selectcolls.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.lo -MD -MP -MF src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.Tpo -c -o src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.lo `test -f 'src/mpid/pamid/s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.Tpo src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/comm/mpid_selectcolls.c' object='src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_selectcolls.lo `test -f 'src/mpid/pamid/src/comm/mpid_selectcolls.c' || echo '$(srcdir)/'`src/mpid/pamid/src/comm/mpid_selectcolls.c
-
-src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_optcolls.lo: src/mpid/pamid/src/comm/mpid_optcolls.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_optcolls.lo -MD -MP -MF src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_optcolls.Tpo -c -o src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_optcolls.lo `test -f 'src/mpid/pamid/src/comm/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_optcolls.Tpo src/mpid/pamid/src/comm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_optcolls.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/comm/mpid_optcolls.c' object='src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_optcolls.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/comm/lib_lib at PMPILIBNAME@_la-mpid_optcolls.lo `test -f 'src/mpid/pamid/src/comm/mpid_optcolls.c' || echo '$(srcdir)/'`src/mpid/pamid/src/comm/mpid_optcolls.c
-
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_abort.lo: src/mpid/pamid/src/misc/mpid_abort.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_abort.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_abort.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_abort.lo `test -f 'src/mpid/pamid/src/misc/mpid_abort [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_abort.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_abort.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_abort.c' object='src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_abort.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_abort.lo `test -f 'src/mpid/pamid/src/misc/mpid_abort.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_abort.c
-
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.lo: src/mpid/pamid/src/misc/mpid_get_universe_size.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_get_universe_size.c' object='src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_get_universe_size.lo `test -f 'src/mpid/pamid/src/misc/mpid_get_universe_size.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_get_universe_size.c
-
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_getpname.lo: src/mpid/pamid/src/misc/mpid_getpname.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_getpname.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_getpname.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_getpname.lo `test -f 'src/mpid/pamid/src/misc/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_getpname.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_getpname.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_getpname.c' object='src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_getpname.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_getpname.lo `test -f 'src/mpid/pamid/src/misc/mpid_getpname.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_getpname.c
-
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_mem.lo: src/mpid/pamid/src/misc/mpid_mem.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_mem.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mem.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_mem.lo `test -f 'src/mpid/pamid/src/misc/mpid_mem.c' || e [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mem.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mem.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_mem.c' object='src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_mem.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_mem.lo `test -f 'src/mpid/pamid/src/misc/mpid_mem.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_mem.c
-
-src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_unimpl.lo: src/mpid/pamid/src/misc/mpid_unimpl.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_unimpl.lo -MD -MP -MF src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_unimpl.Tpo -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_unimpl.lo `test -f 'src/mpid/pamid/src/misc/mpid_un [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_unimpl.Tpo src/mpid/pamid/src/misc/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_unimpl.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/misc/mpid_unimpl.c' object='src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_unimpl.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/misc/lib_lib at PMPILIBNAME@_la-mpid_unimpl.lo `test -f 'src/mpid/pamid/src/misc/mpid_unimpl.c' || echo '$(srcdir)/'`src/mpid/pamid/src/misc/mpid_unimpl.c
-
-src/mpid/pamid/src/mpix/lib_lib at PMPILIBNAME@_la-mpix.lo: src/mpid/pamid/src/mpix/mpix.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/mpix/lib_lib at PMPILIBNAME@_la-mpix.lo -MD -MP -MF src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpix.Tpo -c -o src/mpid/pamid/src/mpix/lib_lib at PMPILIBNAME@_la-mpix.lo `test -f 'src/mpid/pamid/src/mpix/mpix.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpix.Tpo src/mpid/pamid/src/mpix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpix.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpix/mpix.c' object='src/mpid/pamid/src/mpix/lib_lib at PMPILIBNAME@_la-mpix.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/mpix/lib_lib at PMPILIBNAME@_la-mpix.lo `test -f 'src/mpid/pamid/src/mpix/mpix.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpix/mpix.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_1s.lo: src/mpid/pamid/src/onesided/mpid_1s.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_1s.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_1s.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_1s.lo `test -f 'src/mpid/pamid/src/onesided/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_1s.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_1s.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_1s.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_1s.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_1s.lo `test -f 'src/mpid/pamid/src/onesided/mpid_1s.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_1s.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.lo: src/mpid/pamid/src/onesided/mpid_win_accumulate.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_accumulate.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_accumulate.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_accumulate.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_accumulate.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create.lo: src/mpid/pamid/src/onesided/mpid_win_create.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_create.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_create.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_create.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fence.lo: src/mpid/pamid/src/onesided/mpid_win_fence.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fence.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fence.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fence.lo `test -f 'src/mpid/p [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fence.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fence.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_fence.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fence.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fence.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_fence.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_fence.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_free.lo: src/mpid/pamid/src/onesided/mpid_win_free.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_free.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_free.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_free.lo `test -f 'src/mpid/pami [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_free.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_free.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_free.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_free.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_free.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_free.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_free.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get.lo: src/mpid/pamid/src/onesided/mpid_win_get.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get.lo `test -f 'src/mpid/pamid/s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_get.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_get.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_get.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock.lo: src/mpid/pamid/src/onesided/mpid_win_lock.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock.lo `test -f 'src/mpid/pami [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_lock.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_lock.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_lock.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.lo: src/mpid/pamid/src/onesided/mpid_win_lock_all.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_lock_all.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_lock_all.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_lock_all.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_lock_all.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.lo: src/mpid/pamid/src/onesided/mpid_win_pscw.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.lo `test -f 'src/mpid/pami [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_pscw.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_pscw.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_pscw.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_pscw.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_put.lo: src/mpid/pamid/src/onesided/mpid_win_put.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_put.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_put.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_put.lo `test -f 'src/mpid/pamid/s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_put.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_put.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_put.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_put.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_put.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_put.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_put.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.lo: src/mpid/pamid/src/onesided/mpid_win_shared_query.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_shared_query.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_shared_query.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_shared_query.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_shared_query.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.lo: src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create_dyna [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_create_dynamic.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.lo: src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate_shared.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_flush.lo: src/mpid/pamid/src/onesided/mpid_win_flush.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_flush.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_flush.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_flush.lo `test -f 'src/mpid/p [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_flush.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_flush.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_flush.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_flush.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_flush.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_flush.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_flush.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.lo: src/mpid/pamid/src/onesided/mpid_win_allocate.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_allocate.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_allocate.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_allocate.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_allocate.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_sync.lo: src/mpid/pamid/src/onesided/mpid_win_sync.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_sync.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_sync.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_sync.lo `test -f 'src/mpid/pami [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_sync.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_sync.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_sync.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_sync.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_sync.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_sync.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_sync.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_attach.lo: src/mpid/pamid/src/onesided/mpid_win_attach.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_attach.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_attach.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_attach.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_attach.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_attach.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_attach.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_attach.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_attach.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_attach.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_attach.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_detach.lo: src/mpid/pamid/src/onesided/mpid_win_detach.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_detach.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_detach.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_detach.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_detach.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_detach.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_detach.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_detach.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_detach.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_detach.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_detach.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.lo: src/mpid/pamid/src/onesided/mpid_win_get_info.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_get_info.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_info.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_get_info.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_get_info.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.lo: src/mpid/pamid/src/onesided/mpid_win_set_info.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_set_info.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_set_info.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_set_info.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_set_info.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.lo: src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumul [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_get_accumulate.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.lo: src/mpid/pamid/src/onesided/mpid_win_reqops.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_reqops.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_reqops.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_reqops.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_reqops.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpidi_win_control.lo: src/mpid/pamid/src/onesided/mpidi_win_control.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpidi_win_control.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_win_control.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpidi_win_control.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_win_control.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_win_control.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpidi_win_control.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpidi_win_control.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpidi_win_control.lo `test -f 'src/mpid/pamid/src/onesided/mpidi_win_control.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpidi_win_control.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.lo: src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_compare [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_compare_and_swap.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
-
-src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.lo: src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.lo -MD -MP -MF src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.Tpo -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.Tpo src/mpid/pamid/src/onesided/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c' object='src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/onesided/lib_lib at PMPILIBNAME@_la-mpid_win_fetch_and_op.lo `test -f 'src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c' || echo '$(srcdir)/'`src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
-
-src/mpid/pamid/src/pamix/lib_lib at PMPILIBNAME@_la-pamix.lo: src/mpid/pamid/src/pamix/pamix.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pamix/lib_lib at PMPILIBNAME@_la-pamix.lo -MD -MP -MF src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-pamix.Tpo -c -o src/mpid/pamid/src/pamix/lib_lib at PMPILIBNAME@_la-pamix.lo `test -f 'src/mpid/pamid/src/pamix/pamix.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-pamix.Tpo src/mpid/pamid/src/pamix/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-pamix.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pamix/pamix.c' object='src/mpid/pamid/src/pamix/lib_lib at PMPILIBNAME@_la-pamix.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pamix/lib_lib at PMPILIBNAME@_la-pamix.lo `test -f 'src/mpid/pamid/src/pamix/pamix.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pamix/pamix.c
-
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_recv_init.lo: src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_recv_init.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv_init.Tpo -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_recv_init [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv_init.Tpo src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv_init.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c' object='src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_recv_init.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_recv_init.lo `test -f 'src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c
-
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_send_init.lo: src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_send_init.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_send_init.Tpo -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_send_init [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_send_init.Tpo src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_send_init.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c' object='src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_send_init.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_send_init.lo `test -f 'src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c
-
-src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_startall.lo: src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_startall.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_startall.Tpo -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_startall.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_startall.Tpo src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_startall.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c' object='src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_startall.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/persistent/lib_lib at PMPILIBNAME@_la-mpid_startall.lo `test -f 'src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_cancel.lo: src/mpid/pamid/src/pt2pt/mpid_cancel.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_cancel.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_cancel.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_cancel.lo `test -f 'src/mpid/pamid/src/pt2pt/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_cancel.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_cancel.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_cancel.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_cancel.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_cancel.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_cancel.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_cancel.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_issend.lo: src/mpid/pamid/src/pt2pt/mpid_issend.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_issend.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_issend.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_issend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_issend.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_issend.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_issend.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_issend.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_issend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_issend.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_issend.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_recv.lo: src/mpid/pamid/src/pt2pt/mpid_recv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_recv.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_recv.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_recv [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_recv.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_recv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_recv.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_recv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_recv.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_ssend.lo: src/mpid/pamid/src/pt2pt/mpid_ssend.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_ssend.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ssend.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_ssend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ssend.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ssend.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpid_ssend.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_ssend.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpid_ssend.lo `test -f 'src/mpid/pamid/src/pt2pt/mpid_ssend.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpid_ssend.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_eager.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_rzv.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_short.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_short.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_short.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.lo: src/mpid/pamid/src/pt2pt/mpidi_callback_util.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.lo `test -f 'src/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_callback_util.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_callback_util.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_callback_util.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_callback_util.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_control.lo: src/mpid/pamid/src/pt2pt/mpidi_control.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_control.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_control.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_control.lo `test -f 'src/mpid/pamid/src/pt2 [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_control.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_control.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_control.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_control.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_control.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_control.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_control.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_done.lo: src/mpid/pamid/src/pt2pt/mpidi_done.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_done.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_done.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_done.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_done.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_done.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_done.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_done.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_done.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_done.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_done.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.lo: src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.lo `test -f 'src/mpid/pamid/src/pt2 [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_recvmsg.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.lo: src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.lo `test -f 'src/mpid/pami [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_rendezvous.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c
-
-src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.lo: src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.lo -MD -MP -MF src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.Tpo -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.lo `test -f 'src/mpid/pamid/src/pt2 [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.Tpo src/mpid/pamid/src/pt2pt/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c' object='src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/pt2pt/lib_lib at PMPILIBNAME@_la-mpidi_sendmsg.lo `test -f 'src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c' || echo '$(srcdir)/'`src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c
-
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.lo: src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c' object='src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_spawn_multiple.lo `test -f 'src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c
-
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.lo: src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c' object='src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_comm_disconnect.lo `test -f 'src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
-
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_port.lo: src/mpid/pamid/src/dyntask/mpid_port.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_port.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_port.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_port.lo `test -f 'src/mpid/pamid/src/dyntask/m [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_port.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_port.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpid_port.c' object='src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_port.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpid_port.lo `test -f 'src/mpid/pamid/src/dyntask/mpid_port.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpid_port.c
-
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo: src/mpid/pamid/src/dyntask/mpidi_pg.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pg.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo `test -f 'src/mpid/pamid/src/dyntask/mpid [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pg.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pg.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpidi_pg.c' object='src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_pg.lo `test -f 'src/mpid/pamid/src/dyntask/mpidi_pg.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpidi_pg.c
-
-src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_port.lo: src/mpid/pamid/src/dyntask/mpidi_port.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_port.lo -MD -MP -MF src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_port.Tpo -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_port.lo `test -f 'src/mpid/pamid/src/dyntas [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_port.Tpo src/mpid/pamid/src/dyntask/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_port.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/dyntask/mpidi_port.c' object='src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_port.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/dyntask/lib_lib at PMPILIBNAME@_la-mpidi_port.lo `test -f 'src/mpid/pamid/src/dyntask/mpidi_port.c' || echo '$(srcdir)/'`src/mpid/pamid/src/dyntask/mpidi_port.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_buffer.lo: src/mpid/pamid/src/mpid_buffer.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_buffer.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_buffer.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_buffer.lo `test -f 'src/mpid/pamid/src/mpid_buffer.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_buffer.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_buffer.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_buffer.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_buffer.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_buffer.lo `test -f 'src/mpid/pamid/src/mpid_buffer.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_buffer.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.lo: src/mpid/pamid/src/mpidi_bufmm.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.lo `test -f 'src/mpid/pamid/src/mpidi_bufmm.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_bufmm.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_bufmm.lo `test -f 'src/mpid/pamid/src/mpidi_bufmm.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_bufmm.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_finalize.lo: src/mpid/pamid/src/mpid_finalize.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_finalize.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_finalize.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_finalize.lo `test -f 'src/mpid/pamid/src/mpid_finalize.c' || e [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_finalize.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_finalize.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_finalize.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_finalize.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_finalize.lo `test -f 'src/mpid/pamid/src/mpid_finalize.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_finalize.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_init.lo: src/mpid/pamid/src/mpid_init.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_init.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_init.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_init.lo `test -f 'src/mpid/pamid/src/mpid_init.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_init.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_init.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_init.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_init.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_init.lo `test -f 'src/mpid/pamid/src/mpid_init.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_init.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_iprobe.lo: src/mpid/pamid/src/mpid_iprobe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_iprobe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_iprobe.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_iprobe.lo `test -f 'src/mpid/pamid/src/mpid_iprobe.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_iprobe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_iprobe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_iprobe.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_iprobe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_iprobe.lo `test -f 'src/mpid/pamid/src/mpid_iprobe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_iprobe.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_probe.lo: src/mpid/pamid/src/mpid_probe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_probe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_probe.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_probe.lo `test -f 'src/mpid/pamid/src/mpid_probe.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_probe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_probe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_probe.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_probe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_probe.lo `test -f 'src/mpid/pamid/src/mpid_probe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_probe.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_progress.lo: src/mpid/pamid/src/mpid_progress.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_progress.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_progress.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_progress.lo `test -f 'src/mpid/pamid/src/mpid_progress.c' || e [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_progress.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_progress.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_progress.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_progress.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_progress.lo `test -f 'src/mpid/pamid/src/mpid_progress.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_progress.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq.lo: src/mpid/pamid/src/mpid_recvq.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq.lo `test -f 'src/mpid/pamid/src/mpid_recvq.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_recvq.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq.lo `test -f 'src/mpid/pamid/src/mpid_recvq.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_recvq.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_request.lo: src/mpid/pamid/src/mpid_request.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_request.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_request.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_request.lo `test -f 'src/mpid/pamid/src/mpid_request.c' || echo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_request.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_request.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_request.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_request.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_request.lo `test -f 'src/mpid/pamid/src/mpid_request.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_request.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_time.lo: src/mpid/pamid/src/mpid_time.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_time.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_time.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_time.lo `test -f 'src/mpid/pamid/src/mpid_time.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_time.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_time.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_time.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_time.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_time.lo `test -f 'src/mpid/pamid/src/mpid_time.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_time.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_vc.lo: src/mpid/pamid/src/mpid_vc.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_vc.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_vc.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_vc.lo `test -f 'src/mpid/pamid/src/mpid_vc.c' || echo '$(srcdir)/'`src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_vc.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_vc.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_vc.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_vc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_vc.lo `test -f 'src/mpid/pamid/src/mpid_vc.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_vc.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_env.lo: src/mpid/pamid/src/mpidi_env.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_env.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_env.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_env.lo `test -f 'src/mpid/pamid/src/mpidi_env.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_env.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_env.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_env.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_env.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_env.lo `test -f 'src/mpid/pamid/src/mpidi_env.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_env.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_util.lo: src/mpid/pamid/src/mpidi_util.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_util.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_util.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_util.lo `test -f 'src/mpid/pamid/src/mpidi_util.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_util.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_util.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_util.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_util.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_util.lo `test -f 'src/mpid/pamid/src/mpidi_util.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_util.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_mutex.lo: src/mpid/pamid/src/mpidi_mutex.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_mutex.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_mutex.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_mutex.lo `test -f 'src/mpid/pamid/src/mpidi_mutex.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_mutex.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_mutex.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_mutex.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_mutex.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_mutex.lo `test -f 'src/mpid/pamid/src/mpidi_mutex.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_mutex.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mrecv.lo: src/mpid/pamid/src/mpid_mrecv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mrecv.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mrecv.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mrecv.lo `test -f 'src/mpid/pamid/src/mpid_mrecv.c' || echo '$(srcdi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mrecv.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mrecv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_mrecv.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mrecv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mrecv.lo `test -f 'src/mpid/pamid/src/mpid_mrecv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_mrecv.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mprobe.lo: src/mpid/pamid/src/mpid_mprobe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mprobe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mprobe.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mprobe.lo `test -f 'src/mpid/pamid/src/mpid_mprobe.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mprobe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_mprobe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_mprobe.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mprobe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_mprobe.lo `test -f 'src/mpid/pamid/src/mpid_mprobe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_mprobe.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_imrecv.lo: src/mpid/pamid/src/mpid_imrecv.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_imrecv.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_imrecv.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_imrecv.lo `test -f 'src/mpid/pamid/src/mpid_imrecv.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_imrecv.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_imrecv.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_imrecv.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_imrecv.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_imrecv.lo `test -f 'src/mpid/pamid/src/mpid_imrecv.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_imrecv.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_improbe.lo: src/mpid/pamid/src/mpid_improbe.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_improbe.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_improbe.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_improbe.lo `test -f 'src/mpid/pamid/src/mpid_improbe.c' || echo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_improbe.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_improbe.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_improbe.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_improbe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_improbe.lo `test -f 'src/mpid/pamid/src/mpid_improbe.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_improbe.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_aint.lo: src/mpid/pamid/src/mpid_aint.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_aint.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_aint.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_aint.lo `test -f 'src/mpid/pamid/src/mpid_aint.c' || echo '$(srcdir)/' [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_aint.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_aint.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpid_aint.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_aint.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_aint.lo `test -f 'src/mpid/pamid/src/mpid_aint.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_aint.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.lo: src/mpid/pamid/src/mpidi_nbc_sched.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.lo `test -f 'src/mpid/pamid/src/mpidi_nbc_sched [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_nbc_sched.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_nbc_sched.lo `test -f 'src/mpid/pamid/src/mpidi_nbc_sched.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_nbc_sched.c
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.lo: src/mpid/pamid/src/mpidi_pami_datatype.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.lo `test -f 'src/mpid/pamid/src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/pamid/src/mpidi_pami_datatype.c' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpidi_pami_datatype.lo `test -f 'src/mpid/pamid/src/mpidi_pami_datatype.c' || echo '$(srcdir)/'`src/mpid/pamid/src/mpidi_pami_datatype.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/ch4/shm/posix/lib_lib at PMPILIBNAME@_la-barrier.lo `test -f 'src/mpid/ch4/shm/posix/barrier.c' || echo '$(srcdir)/'`src/mpid/ch4/shm/posix/barrier.c
src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-darray_support.lo: src/mpid/common/datatype/dataloop/darray_support.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-darray_support.lo -MD -MP -MF src/mpid/common/datatype/dataloop/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-darray_support.Tpo -c -o src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-darray_support.lo `t [...]
@@ -38068,138 +34451,138 @@ src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-subarray_support.lo: s
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/dataloop/lib_lib at PMPILIBNAME@_la-subarray_support.lo `test -f 'src/mpid/common/datatype/dataloop/subarray_support.c' || echo '$(srcdir)/'`src/mpid/common/datatype/dataloop/subarray_support.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_contents_support.lo: src/mpid/common/datatype/mpid_contents_support.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_contents_support.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_contents_support.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_contents_support.lo `test -f [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_contents_support.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_contents_support.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_contents_support.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_contents_support.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.lo: src/mpid/common/datatype/mpidu_contents_support.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.lo `test [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_contents_support.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_contents_support.lo `test -f 'src/mpid/common/datatype/mpid_contents_support.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_contents_support.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_contents_support.lo `test -f 'src/mpid/common/datatype/mpidu_contents_support.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_contents_support.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.lo: src/mpid/common/datatype/mpid_datatype_contents.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_datatype_contents.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.lo: src/mpid/common/datatype/mpidu_datatype_contents.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.lo `t [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_datatype_contents.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_contents.lo `test -f 'src/mpid/common/datatype/mpid_datatype_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_datatype_contents.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_contents.lo `test -f 'src/mpid/common/datatype/mpidu_datatype_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_datatype_contents.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.lo: src/mpid/common/datatype/mpid_datatype_free.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_datatype_free.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.lo: src/mpid/common/datatype/mpidu_datatype_free.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.lo `test -f 'src/ [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_datatype_free.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_datatype_free.lo `test -f 'src/mpid/common/datatype/mpid_datatype_free.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_datatype_free.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_datatype_free.lo `test -f 'src/mpid/common/datatype/mpidu_datatype_free.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_datatype_free.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.lo: src/mpid/common/datatype/mpid_ext32_datatype.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.lo `test -f 'src/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_ext32_datatype.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.lo: src/mpid/common/datatype/mpidu_ext32_datatype.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.lo `test -f 's [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_ext32_datatype.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_datatype.lo `test -f 'src/mpid/common/datatype/mpid_ext32_datatype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_ext32_datatype.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_datatype.lo `test -f 'src/mpid/common/datatype/mpidu_ext32_datatype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_ext32_datatype.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.lo: src/mpid/common/datatype/mpid_ext32_segment.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.lo `test -f 'src/mpi [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_ext32_segment.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.lo: src/mpid/common/datatype/mpidu_ext32_segment.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.lo `test -f 'src/ [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_ext32_segment.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_ext32_segment.lo `test -f 'src/mpid/common/datatype/mpid_ext32_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_ext32_segment.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_ext32_segment.lo `test -f 'src/mpid/common/datatype/mpidu_ext32_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_ext32_segment.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_segment.lo: src/mpid/common/datatype/mpid_segment.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_segment.lo `test -f 'src/mpid/common/datatype/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_segment.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_segment.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_segment.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_segment.lo: src/mpid/common/datatype/mpidu_segment.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_segment.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_segment.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_segment.lo `test -f 'src/mpid/common/dataty [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_segment.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_segment.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_segment.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_segment.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_segment.lo `test -f 'src/mpid/common/datatype/mpid_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_segment.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_segment.lo `test -f 'src/mpid/common/datatype/mpidu_segment.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_segment.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.lo: src/mpid/common/datatype/mpid_type_blockindexed.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_blockindexed.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.lo: src/mpid/common/datatype/mpidu_type_blockindexed.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.lo `t [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_blockindexed.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_blockindexed.lo `test -f 'src/mpid/common/datatype/mpid_type_blockindexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_blockindexed.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_blockindexed.lo `test -f 'src/mpid/common/datatype/mpidu_type_blockindexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_blockindexed.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_commit.lo: src/mpid/common/datatype/mpid_type_commit.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_commit.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_commit.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_commit.lo `test -f 'src/mpid/comm [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_commit.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_commit.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_commit.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_commit.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.lo: src/mpid/common/datatype/mpidu_type_commit.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.lo `test -f 'src/mpid/c [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_commit.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_commit.lo `test -f 'src/mpid/common/datatype/mpid_type_commit.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_commit.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_commit.lo `test -f 'src/mpid/common/datatype/mpidu_type_commit.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_commit.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.lo: src/mpid/common/datatype/mpid_type_contiguous.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.lo `test -f 's [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_contiguous.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.lo: src/mpid/common/datatype/mpidu_type_contiguous.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.lo `test -f [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_contiguous.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_contiguous.lo `test -f 'src/mpid/common/datatype/mpid_type_contiguous.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_contiguous.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_contiguous.lo `test -f 'src/mpid/common/datatype/mpidu_type_contiguous.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_contiguous.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.lo: src/mpid/common/datatype/mpid_type_create_pairtype.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_create_pairtype.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.lo: src/mpid/common/datatype/mpidu_type_create_pairtype.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairt [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_create_pairtype.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_pairtype.lo `test -f 'src/mpid/common/datatype/mpid_type_create_pairtype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_create_pairtype.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_pairtype.lo `test -f 'src/mpid/common/datatype/mpidu_type_create_pairtype.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_create_pairtype.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.lo: src/mpid/common/datatype/mpid_type_create_resized.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.lo [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_create_resized.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.lo: src/mpid/common/datatype/mpidu_type_create_resized.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_create_resized.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_create_resized.lo `test -f 'src/mpid/common/datatype/mpid_type_create_resized.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_create_resized.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_create_resized.lo `test -f 'src/mpid/common/datatype/mpidu_type_create_resized.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_create_resized.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_debug.lo: src/mpid/common/datatype/mpid_type_debug.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_debug.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_debug.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_debug.lo `test -f 'src/mpid/common/ [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_debug.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_debug.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_debug.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_debug.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.lo: src/mpid/common/datatype/mpidu_type_debug.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.lo `test -f 'src/mpid/comm [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_debug.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_debug.lo `test -f 'src/mpid/common/datatype/mpid_type_debug.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_debug.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_debug.lo `test -f 'src/mpid/common/datatype/mpidu_type_debug.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_debug.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_dup.lo: src/mpid/common/datatype/mpid_type_dup.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_dup.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_dup.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_dup.lo `test -f 'src/mpid/common/dataty [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_dup.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_dup.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_dup.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_dup.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.lo: src/mpid/common/datatype/mpidu_type_dup.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.lo `test -f 'src/mpid/common/dat [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_dup.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_dup.lo `test -f 'src/mpid/common/datatype/mpid_type_dup.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_dup.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_dup.lo `test -f 'src/mpid/common/datatype/mpidu_type_dup.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_dup.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.lo: src/mpid/common/datatype/mpid_type_get_contents.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_get_contents.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.lo: src/mpid/common/datatype/mpidu_type_get_contents.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.lo `t [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_get_contents.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_contents.lo `test -f 'src/mpid/common/datatype/mpid_type_get_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_get_contents.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_contents.lo `test -f 'src/mpid/common/datatype/mpidu_type_get_contents.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_get_contents.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.lo: src/mpid/common/datatype/mpid_type_get_envelope.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.lo `test [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_get_envelope.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.lo: src/mpid/common/datatype/mpidu_type_get_envelope.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.lo `t [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_get_envelope.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_get_envelope.lo `test -f 'src/mpid/common/datatype/mpid_type_get_envelope.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_get_envelope.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_get_envelope.lo `test -f 'src/mpid/common/datatype/mpidu_type_get_envelope.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_get_envelope.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.lo: src/mpid/common/datatype/mpid_type_indexed.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.lo `test -f 'src/mpid/c [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_indexed.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.lo: src/mpid/common/datatype/mpidu_type_indexed.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.lo `test -f 'src/mpi [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_indexed.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_indexed.lo `test -f 'src/mpid/common/datatype/mpid_type_indexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_indexed.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_indexed.lo `test -f 'src/mpid/common/datatype/mpidu_type_indexed.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_indexed.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_struct.lo: src/mpid/common/datatype/mpid_type_struct.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_struct.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_struct.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_struct.lo `test -f 'src/mpid/comm [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_struct.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_struct.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_struct.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_struct.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.lo: src/mpid/common/datatype/mpidu_type_struct.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.lo `test -f 'src/mpid/c [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_struct.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_struct.lo `test -f 'src/mpid/common/datatype/mpid_type_struct.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_struct.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_struct.lo `test -f 'src/mpid/common/datatype/mpidu_type_struct.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_struct.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_vector.lo: src/mpid/common/datatype/mpid_type_vector.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_vector.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_vector.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_vector.lo `test -f 'src/mpid/comm [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_vector.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_vector.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_vector.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_vector.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.lo: src/mpid/common/datatype/mpidu_type_vector.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.lo `test -f 'src/mpid/c [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_vector.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_vector.lo `test -f 'src/mpid/common/datatype/mpid_type_vector.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_vector.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_vector.lo `test -f 'src/mpid/common/datatype/mpidu_type_vector.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_vector.c
-src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.lo: src/mpid/common/datatype/mpid_type_zerolen.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.lo `test -f 'src/mpid/c [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpid_type_zerolen.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.lo: src/mpid/common/datatype/mpidu_type_zerolen.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.lo `test -f 'src/mpi [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.Tpo src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/datatype/mpidu_type_zerolen.c' object='src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpid_type_zerolen.lo `test -f 'src/mpid/common/datatype/mpid_type_zerolen.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpid_type_zerolen.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpidu_type_zerolen.lo `test -f 'src/mpid/common/datatype/mpidu_type_zerolen.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpidu_type_zerolen.c
src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.lo: src/mpid/common/datatype/mpir_type_flatten.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.lo -MD -MP -MF src/mpid/common/datatype/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.Tpo -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.lo `test -f 'src/mpid/c [...]
@@ -38208,19 +34591,12 @@ src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.lo: src/mpid/
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/datatype/lib_lib at PMPILIBNAME@_la-mpir_type_flatten.lo `test -f 'src/mpid/common/datatype/mpir_type_flatten.c' || echo '$(srcdir)/'`src/mpid/common/datatype/mpir_type_flatten.c
-src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpid_sched.lo: src/mpid/common/sched/mpid_sched.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpid_sched.lo -MD -MP -MF src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_sched.Tpo -c -o src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpid_sched.lo `test -f 'src/mpid/common/sched/mpid_sched.c' || e [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_sched.Tpo src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_sched.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/sched/mpid_sched.c' object='src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpid_sched.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpid_sched.lo `test -f 'src/mpid/common/sched/mpid_sched.c' || echo '$(srcdir)/'`src/mpid/common/sched/mpid_sched.c
-
-src/mpid/common/sock/poll/lib_lib at PMPILIBNAME@_la-sock.lo: src/mpid/common/sock/poll/sock.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/sock/poll/lib_lib at PMPILIBNAME@_la-sock.lo -MD -MP -MF src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Tpo -c -o src/mpid/common/sock/poll/lib_lib at PMPILIBNAME@_la-sock.lo `test -f 'src/mpid/common/sock/poll/sock.c' || echo '$(s [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Tpo src/mpid/common/sock/poll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-sock.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/sock/poll/sock.c' object='src/mpid/common/sock/poll/lib_lib at PMPILIBNAME@_la-sock.lo' libtool=yes @AMDEPBACKSLASH@
+src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpidu_sched.lo: src/mpid/common/sched/mpidu_sched.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpidu_sched.lo -MD -MP -MF src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_sched.Tpo -c -o src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpidu_sched.lo `test -f 'src/mpid/common/sched/mpidu_sched.c' [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_sched.Tpo src/mpid/common/sched/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_sched.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/sched/mpidu_sched.c' object='src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpidu_sched.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/sock/poll/lib_lib at PMPILIBNAME@_la-sock.lo `test -f 'src/mpid/common/sock/poll/sock.c' || echo '$(srcdir)/'`src/mpid/common/sock/poll/sock.c
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/sched/lib_lib at PMPILIBNAME@_la-mpidu_sched.lo `test -f 'src/mpid/common/sched/mpidu_sched.c' || echo '$(srcdir)/'`src/mpid/common/sched/mpidu_sched.c
src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_init.lo: src/mpid/common/hcoll/hcoll_init.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_init.lo -MD -MP -MF src/mpid/common/hcoll/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-hcoll_init.Tpo -c -o src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_init.lo `test -f 'src/mpid/common/hcoll/hcoll_init.c' || e [...]
@@ -38243,6 +34619,20 @@ src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_rte.lo: src/mpid/common/hcol
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/hcoll/lib_lib at PMPILIBNAME@_la-hcoll_rte.lo `test -f 'src/mpid/common/hcoll/hcoll_rte.c' || echo '$(srcdir)/'`src/mpid/common/hcoll/hcoll_rte.c
+src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.lo: src/mpid/common/shm/mpidu_shm_alloc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.lo -MD -MP -MF src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.Tpo -c -o src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.lo `test -f 'src/mpid/common/shm/mpidu_shm_a [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.Tpo src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/shm/mpidu_shm_alloc.c' object='src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_alloc.lo `test -f 'src/mpid/common/shm/mpidu_shm_alloc.c' || echo '$(srcdir)/'`src/mpid/common/shm/mpidu_shm_alloc.c
+
+src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.lo: src/mpid/common/shm/mpidu_shm_barrier.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.lo -MD -MP -MF src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.Tpo -c -o src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.lo `test -f 'src/mpid/common/shm/mpidu [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.Tpo src/mpid/common/shm/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpid/common/shm/mpidu_shm_barrier.c' object='src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mpid/common/shm/lib_lib at PMPILIBNAME@_la-mpidu_shm_barrier.lo `test -f 'src/mpid/common/shm/mpidu_shm_barrier.c' || echo '$(srcdir)/'`src/mpid/common/shm/mpidu_shm_barrier.c
+
src/mpi_t/lib_lib at PMPILIBNAME@_la-mpit.lo: src/mpi_t/mpit.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mpi_t/lib_lib at PMPILIBNAME@_la-mpit.lo -MD -MP -MF src/mpi_t/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpit.Tpo -c -o src/mpi_t/lib_lib at PMPILIBNAME@_la-mpit.lo `test -f 'src/mpi_t/mpit.c' || echo '$(srcdir)/'`src/mpi_t/mpit.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mpi_t/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpit.Tpo src/mpi_t/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpit.Plo
@@ -38264,13 +34654,6 @@ src/nameserv/pmi/lib_lib at PMPILIBNAME@_la-pmi_nameserv.lo: src/nameserv/pmi/pmi_n
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/nameserv/pmi/lib_lib at PMPILIBNAME@_la-pmi_nameserv.lo `test -f 'src/nameserv/pmi/pmi_nameserv.c' || echo '$(srcdir)/'`src/nameserv/pmi/pmi_nameserv.c
-src/pmi/pmi2/poe/lib_lib at PMPILIBNAME@_la-poe2pmi.lo: src/pmi/pmi2/poe/poe2pmi.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/pmi/pmi2/poe/lib_lib at PMPILIBNAME@_la-poe2pmi.lo -MD -MP -MF src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-poe2pmi.Tpo -c -o src/pmi/pmi2/poe/lib_lib at PMPILIBNAME@_la-poe2pmi.lo `test -f 'src/pmi/pmi2/poe/poe2pmi.c' || echo '$(srcdir)/'`src/pmi/pmi2/po [...]
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-poe2pmi.Tpo src/pmi/pmi2/poe/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-poe2pmi.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pmi/pmi2/poe/poe2pmi.c' object='src/pmi/pmi2/poe/lib_lib at PMPILIBNAME@_la-poe2pmi.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/pmi/pmi2/poe/lib_lib at PMPILIBNAME@_la-poe2pmi.lo `test -f 'src/pmi/pmi2/poe/poe2pmi.c' || echo '$(srcdir)/'`src/pmi/pmi2/poe/poe2pmi.c
-
src/pmi/pmi2/simple/lib_lib at PMPILIBNAME@_la-simple2pmi.lo: src/pmi/pmi2/simple/simple2pmi.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/pmi/pmi2/simple/lib_lib at PMPILIBNAME@_la-simple2pmi.lo -MD -MP -MF src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-simple2pmi.Tpo -c -o src/pmi/pmi2/simple/lib_lib at PMPILIBNAME@_la-simple2pmi.lo `test -f 'src/pmi/pmi2/simple/simple2pmi.c' || echo '$(s [...]
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-simple2pmi.Tpo src/pmi/pmi2/simple/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-simple2pmi.Plo
@@ -38313,6 +34696,83 @@ src/mpi/debugger/src_mpi_debugger_libdbginitdummy_la-dbginit.lo: src/mpi/debugge
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(src_mpi_debugger_libdbginitdummy_la_CFLAGS) $(CFLAGS) -c -o src/mpi/debugger/src_mpi_debugger_libdbginitdummy_la-dbginit.lo `test -f 'src/mpi/debugger/dbginit.c' || echo '$(srcdir)/'`src/mpi/debugger/dbginit.c
+src/pm/util/src_pm_util_libmpiexec_la-cmnargs.lo: src/pm/util/cmnargs.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-cmnargs.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-cmnargs.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-cmnargs.lo `test -f 'src/pm/util/cmnargs.c' || echo '$(srcdir)/'`src/ [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-cmnargs.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-cmnargs.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/cmnargs.c' object='src/pm/util/src_pm_util_libmpiexec_la-cmnargs.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-cmnargs.lo `test -f 'src/pm/util/cmnargs.c' || echo '$(srcdir)/'`src/pm/util/cmnargs.c
+
+src/pm/util/src_pm_util_libmpiexec_la-process.lo: src/pm/util/process.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-process.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-process.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-process.lo `test -f 'src/pm/util/process.c' || echo '$(srcdir)/'`src/ [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-process.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-process.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/process.c' object='src/pm/util/src_pm_util_libmpiexec_la-process.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-process.lo `test -f 'src/pm/util/process.c' || echo '$(srcdir)/'`src/pm/util/process.c
+
+src/pm/util/src_pm_util_libmpiexec_la-ioloop.lo: src/pm/util/ioloop.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-ioloop.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-ioloop.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-ioloop.lo `test -f 'src/pm/util/ioloop.c' || echo '$(srcdir)/'`src/pm/u [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-ioloop.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-ioloop.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/ioloop.c' object='src/pm/util/src_pm_util_libmpiexec_la-ioloop.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-ioloop.lo `test -f 'src/pm/util/ioloop.c' || echo '$(srcdir)/'`src/pm/util/ioloop.c
+
+src/pm/util/src_pm_util_libmpiexec_la-pmiserv.lo: src/pm/util/pmiserv.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-pmiserv.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiserv.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-pmiserv.lo `test -f 'src/pm/util/pmiserv.c' || echo '$(srcdir)/'`src/ [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiserv.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiserv.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/pmiserv.c' object='src/pm/util/src_pm_util_libmpiexec_la-pmiserv.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-pmiserv.lo `test -f 'src/pm/util/pmiserv.c' || echo '$(srcdir)/'`src/pm/util/pmiserv.c
+
+src/pm/util/src_pm_util_libmpiexec_la-labelout.lo: src/pm/util/labelout.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-labelout.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-labelout.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-labelout.lo `test -f 'src/pm/util/labelout.c' || echo '$(srcdir)/'` [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-labelout.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-labelout.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/labelout.c' object='src/pm/util/src_pm_util_libmpiexec_la-labelout.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-labelout.lo `test -f 'src/pm/util/labelout.c' || echo '$(srcdir)/'`src/pm/util/labelout.c
+
+src/pm/util/src_pm_util_libmpiexec_la-env.lo: src/pm/util/env.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-env.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-env.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-env.lo `test -f 'src/pm/util/env.c' || echo '$(srcdir)/'`src/pm/util/env.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-env.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-env.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/env.c' object='src/pm/util/src_pm_util_libmpiexec_la-env.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-env.lo `test -f 'src/pm/util/env.c' || echo '$(srcdir)/'`src/pm/util/env.c
+
+src/pm/util/src_pm_util_libmpiexec_la-newsession.lo: src/pm/util/newsession.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-newsession.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-newsession.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-newsession.lo `test -f 'src/pm/util/newsession.c' || echo '$(sr [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-newsession.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-newsession.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/newsession.c' object='src/pm/util/src_pm_util_libmpiexec_la-newsession.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-newsession.lo `test -f 'src/pm/util/newsession.c' || echo '$(srcdir)/'`src/pm/util/newsession.c
+
+src/pm/util/src_pm_util_libmpiexec_la-rm.lo: src/pm/util/rm.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-rm.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-rm.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-rm.lo `test -f 'src/pm/util/rm.c' || echo '$(srcdir)/'`src/pm/util/rm.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-rm.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-rm.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/rm.c' object='src/pm/util/src_pm_util_libmpiexec_la-rm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-rm.lo `test -f 'src/pm/util/rm.c' || echo '$(srcdir)/'`src/pm/util/rm.c
+
+src/pm/util/src_pm_util_libmpiexec_la-pmiport.lo: src/pm/util/pmiport.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-pmiport.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiport.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-pmiport.lo `test -f 'src/pm/util/pmiport.c' || echo '$(srcdir)/'`src/ [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiport.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-pmiport.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/pmiport.c' object='src/pm/util/src_pm_util_libmpiexec_la-pmiport.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-pmiport.lo `test -f 'src/pm/util/pmiport.c' || echo '$(srcdir)/'`src/pm/util/pmiport.c
+
+src/pm/util/src_pm_util_libmpiexec_la-dbgiface.lo: src/pm/util/dbgiface.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-dbgiface.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-dbgiface.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-dbgiface.lo `test -f 'src/pm/util/dbgiface.c' || echo '$(srcdir)/'` [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-dbgiface.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-dbgiface.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/dbgiface.c' object='src/pm/util/src_pm_util_libmpiexec_la-dbgiface.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-dbgiface.lo `test -f 'src/pm/util/dbgiface.c' || echo '$(srcdir)/'`src/pm/util/dbgiface.c
+
+src/pm/util/src_pm_util_libmpiexec_la-simple_pmiutil2.lo: src/pm/util/simple_pmiutil2.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -MT src/pm/util/src_pm_util_libmpiexec_la-simple_pmiutil2.lo -MD -MP -MF src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-simple_pmiutil2.Tpo -c -o src/pm/util/src_pm_util_libmpiexec_la-simple_pmiutil2.lo `test -f 'src/pm/util/simple_pmiut [...]
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-simple_pmiutil2.Tpo src/pm/util/$(DEPDIR)/src_pm_util_libmpiexec_la-simple_pmiutil2.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/pm/util/simple_pmiutil2.c' object='src/pm/util/src_pm_util_libmpiexec_la-simple_pmiutil2.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_util_libmpiexec_la_CPPFLAGS) $(CPPFLAGS) $(src_pm_util_libmpiexec_la_CFLAGS) $(CFLAGS) -c -o src/pm/util/src_pm_util_libmpiexec_la-simple_pmiutil2.lo `test -f 'src/pm/util/simple_pmiutil2.c' || echo '$(srcdir)/'`src/pm/util/simple_pmiutil2.c
+
src/pm/gforker/src_pm_gforker_mpiexec-mpiexec.o: src/pm/gforker/mpiexec.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_gforker_mpiexec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/pm/gforker/src_pm_gforker_mpiexec-mpiexec.o -MD -MP -MF src/pm/gforker/$(DEPDIR)/src_pm_gforker_mpiexec-mpiexec.Tpo -c -o src/pm/gforker/src_pm_gforker_mpiexec-mpiexec.o `test -f 'src/pm/gforker/mpiexec.c' || echo '$(srcdir)/'`src/pm/gforker/mpiexec.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/pm/gforker/$(DEPDIR)/src_pm_gforker_mpiexec-mpiexec.Tpo src/pm/gforker/$(DEPDIR)/src_pm_gforker_mpiexec-mpiexec.Po
@@ -38369,44 +34829,6 @@ src/pm/remshell/src_pm_remshell_mpiexec_remshell-mpiexec.obj: src/pm/remshell/mp
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_pm_remshell_mpiexec_remshell_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/pm/remshell/src_pm_remshell_mpiexec_remshell-mpiexec.obj `if test -f 'src/pm/remshell/mpiexec.c'; then $(CYGPATH_W) 'src/pm/remshell/mpiexec.c'; else $(CYGPATH_W) '$(srcdir)/src/pm/remshell/mpiexec.c'; fi`
-.cpp.o:
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
- at am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
- at am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
- at am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
- at am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
- at am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
- at am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.lo: src/mpid/pamid/src/mpid_recvq_mmap.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.Tpo -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.lo `test -f 'src/mpid/pamid/src/mpid_recvq_ [...]
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/mpid/pamid/src/mpid_recvq_mmap.cpp' object='src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at MPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/mpid/pamid/src/lib_lib at MPILIBNAME@_la-mpid_recvq_mmap.lo `test -f 'src/mpid/pamid/src/mpid_recvq_mmap.cpp' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_recvq_mmap.cpp
-
-src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.lo: src/mpid/pamid/src/mpid_recvq_mmap.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.lo -MD -MP -MF src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.Tpo -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.lo `test -f 'src/mpid/pamid/src/mpid_re [...]
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.Tpo src/mpid/pamid/src/$(DEPDIR)/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/mpid/pamid/src/mpid_recvq_mmap.cpp' object='src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_lib at PMPILIBNAME@_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/mpid/pamid/src/lib_lib at PMPILIBNAME@_la-mpid_recvq_mmap.lo `test -f 'src/mpid/pamid/src/mpid_recvq_mmap.cpp' || echo '$(srcdir)/'`src/mpid/pamid/src/mpid_recvq_mmap.cpp
-
.cxx.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@@ -38493,56 +34915,32 @@ clean-libtool:
-rm -rf src/mpid/ch3/src/.libs src/mpid/ch3/src/_libs
-rm -rf src/mpid/ch3/util/ftb/.libs src/mpid/ch3/util/ftb/_libs
-rm -rf src/mpid/ch3/util/sock/.libs src/mpid/ch3/util/sock/_libs
+ -rm -rf src/mpid/ch4/generic/.libs src/mpid/ch4/generic/_libs
+ -rm -rf src/mpid/ch4/netmod/ofi/.libs src/mpid/ch4/netmod/ofi/_libs
+ -rm -rf src/mpid/ch4/netmod/portals4/.libs src/mpid/ch4/netmod/portals4/_libs
+ -rm -rf src/mpid/ch4/netmod/stubnm/.libs src/mpid/ch4/netmod/stubnm/_libs
+ -rm -rf src/mpid/ch4/netmod/ucx/.libs src/mpid/ch4/netmod/ucx/_libs
+ -rm -rf src/mpid/ch4/shm/posix/.libs src/mpid/ch4/shm/posix/_libs
+ -rm -rf src/mpid/ch4/shm/stubshm/.libs src/mpid/ch4/shm/stubshm/_libs
+ -rm -rf src/mpid/ch4/src/.libs src/mpid/ch4/src/_libs
-rm -rf src/mpid/common/datatype/.libs src/mpid/common/datatype/_libs
-rm -rf src/mpid/common/datatype/dataloop/.libs src/mpid/common/datatype/dataloop/_libs
-rm -rf src/mpid/common/hcoll/.libs src/mpid/common/hcoll/_libs
-rm -rf src/mpid/common/sched/.libs src/mpid/common/sched/_libs
- -rm -rf src/mpid/common/sock/poll/.libs src/mpid/common/sock/poll/_libs
- -rm -rf src/mpid/pamid/src/.libs src/mpid/pamid/src/_libs
- -rm -rf src/mpid/pamid/src/coll/.libs src/mpid/pamid/src/coll/_libs
- -rm -rf src/mpid/pamid/src/coll/allgather/.libs src/mpid/pamid/src/coll/allgather/_libs
- -rm -rf src/mpid/pamid/src/coll/allgatherv/.libs src/mpid/pamid/src/coll/allgatherv/_libs
- -rm -rf src/mpid/pamid/src/coll/allreduce/.libs src/mpid/pamid/src/coll/allreduce/_libs
- -rm -rf src/mpid/pamid/src/coll/alltoall/.libs src/mpid/pamid/src/coll/alltoall/_libs
- -rm -rf src/mpid/pamid/src/coll/alltoallv/.libs src/mpid/pamid/src/coll/alltoallv/_libs
- -rm -rf src/mpid/pamid/src/coll/alltoallw/.libs src/mpid/pamid/src/coll/alltoallw/_libs
- -rm -rf src/mpid/pamid/src/coll/barrier/.libs src/mpid/pamid/src/coll/barrier/_libs
- -rm -rf src/mpid/pamid/src/coll/bcast/.libs src/mpid/pamid/src/coll/bcast/_libs
- -rm -rf src/mpid/pamid/src/coll/exscan/.libs src/mpid/pamid/src/coll/exscan/_libs
- -rm -rf src/mpid/pamid/src/coll/gather/.libs src/mpid/pamid/src/coll/gather/_libs
- -rm -rf src/mpid/pamid/src/coll/gatherv/.libs src/mpid/pamid/src/coll/gatherv/_libs
- -rm -rf src/mpid/pamid/src/coll/ired_scat/.libs src/mpid/pamid/src/coll/ired_scat/_libs
- -rm -rf src/mpid/pamid/src/coll/ired_scat_block/.libs src/mpid/pamid/src/coll/ired_scat_block/_libs
- -rm -rf src/mpid/pamid/src/coll/red_scat/.libs src/mpid/pamid/src/coll/red_scat/_libs
- -rm -rf src/mpid/pamid/src/coll/reduce/.libs src/mpid/pamid/src/coll/reduce/_libs
- -rm -rf src/mpid/pamid/src/coll/scan/.libs src/mpid/pamid/src/coll/scan/_libs
- -rm -rf src/mpid/pamid/src/coll/scatter/.libs src/mpid/pamid/src/coll/scatter/_libs
- -rm -rf src/mpid/pamid/src/coll/scatterv/.libs src/mpid/pamid/src/coll/scatterv/_libs
- -rm -rf src/mpid/pamid/src/comm/.libs src/mpid/pamid/src/comm/_libs
- -rm -rf src/mpid/pamid/src/dyntask/.libs src/mpid/pamid/src/dyntask/_libs
- -rm -rf src/mpid/pamid/src/misc/.libs src/mpid/pamid/src/misc/_libs
- -rm -rf src/mpid/pamid/src/mpix/.libs src/mpid/pamid/src/mpix/_libs
- -rm -rf src/mpid/pamid/src/onesided/.libs src/mpid/pamid/src/onesided/_libs
- -rm -rf src/mpid/pamid/src/pamix/.libs src/mpid/pamid/src/pamix/_libs
- -rm -rf src/mpid/pamid/src/pt2pt/.libs src/mpid/pamid/src/pt2pt/_libs
- -rm -rf src/mpid/pamid/src/pt2pt/persistent/.libs src/mpid/pamid/src/pt2pt/persistent/_libs
+ -rm -rf src/mpid/common/shm/.libs src/mpid/common/shm/_libs
-rm -rf src/mutex/.libs src/mutex/_libs
-rm -rf src/nameserv/file/.libs src/nameserv/file/_libs
-rm -rf src/nameserv/pmi/.libs src/nameserv/pmi/_libs
-rm -rf src/pm/gforker/.libs src/pm/gforker/_libs
-rm -rf src/pm/remshell/.libs src/pm/remshell/_libs
- -rm -rf src/pmi/pmi2/poe/.libs src/pmi/pmi2/poe/_libs
+ -rm -rf src/pm/util/.libs src/pm/util/_libs
-rm -rf src/pmi/pmi2/simple/.libs src/pmi/pmi2/simple/_libs
-rm -rf src/pmi/simple/.libs src/pmi/simple/_libs
+ -rm -rf src/util/assert/.libs src/util/assert/_libs
-rm -rf src/util/cvar/.libs src/util/cvar/_libs
- -rm -rf src/util/dbg/.libs src/util/dbg/_libs
- -rm -rf src/util/instrm/.libs src/util/instrm/_libs
-rm -rf src/util/logging/rlog/.libs src/util/logging/rlog/_libs
-rm -rf src/util/mem/.libs src/util/mem/_libs
- -rm -rf src/util/other/.libs src/util/other/_libs
-rm -rf src/util/procmap/.libs src/util/procmap/_libs
- -rm -rf src/util/thread/.libs src/util/thread/_libs
- -rm -rf src/util/timers/.libs src/util/timers/_libs
distclean-libtool:
-rm -f libtool config.lt
@@ -39063,6 +35461,22 @@ distclean-generic:
-rm -f src/mpid/ch3/util/ftb/$(am__dirstamp)
-rm -f src/mpid/ch3/util/sock/$(DEPDIR)/$(am__dirstamp)
-rm -f src/mpid/ch3/util/sock/$(am__dirstamp)
+ -rm -f src/mpid/ch4/generic/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/generic/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/ofi/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/ofi/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/portals4/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/portals4/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/stubnm/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/stubnm/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/ucx/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/netmod/ucx/$(am__dirstamp)
+ -rm -f src/mpid/ch4/shm/posix/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/shm/posix/$(am__dirstamp)
+ -rm -f src/mpid/ch4/shm/stubshm/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/shm/stubshm/$(am__dirstamp)
+ -rm -f src/mpid/ch4/src/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/ch4/src/$(am__dirstamp)
-rm -f src/mpid/common/datatype/$(DEPDIR)/$(am__dirstamp)
-rm -f src/mpid/common/datatype/$(am__dirstamp)
-rm -f src/mpid/common/datatype/dataloop/$(DEPDIR)/$(am__dirstamp)
@@ -39071,64 +35485,8 @@ distclean-generic:
-rm -f src/mpid/common/hcoll/$(am__dirstamp)
-rm -f src/mpid/common/sched/$(DEPDIR)/$(am__dirstamp)
-rm -f src/mpid/common/sched/$(am__dirstamp)
- -rm -f src/mpid/common/sock/poll/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/common/sock/poll/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/allgather/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/allgather/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/allgatherv/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/allgatherv/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/allreduce/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/allreduce/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/alltoall/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/alltoall/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/alltoallv/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/alltoallv/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/alltoallw/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/alltoallw/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/barrier/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/barrier/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/bcast/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/bcast/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/exscan/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/exscan/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/gather/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/gather/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/gatherv/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/gatherv/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/ired_scat/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/ired_scat/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/ired_scat_block/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/ired_scat_block/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/red_scat/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/red_scat/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/reduce/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/reduce/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/scan/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/scan/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/scatter/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/scatter/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/scatterv/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/coll/scatterv/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/comm/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/comm/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/dyntask/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/dyntask/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/misc/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/misc/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/mpix/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/mpix/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/onesided/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/onesided/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/pamix/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/pamix/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/pt2pt/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/pt2pt/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/pt2pt/persistent/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/mpid/pamid/src/pt2pt/persistent/$(am__dirstamp)
+ -rm -f src/mpid/common/shm/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mpid/common/shm/$(am__dirstamp)
-rm -f src/mutex/$(DEPDIR)/$(am__dirstamp)
-rm -f src/mutex/$(am__dirstamp)
-rm -f src/nameserv/file/$(DEPDIR)/$(am__dirstamp)
@@ -39141,30 +35499,20 @@ distclean-generic:
-rm -f src/pm/remshell/$(am__dirstamp)
-rm -f src/pm/util/$(DEPDIR)/$(am__dirstamp)
-rm -f src/pm/util/$(am__dirstamp)
- -rm -f src/pmi/pmi2/poe/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/pmi/pmi2/poe/$(am__dirstamp)
-rm -f src/pmi/pmi2/simple/$(DEPDIR)/$(am__dirstamp)
-rm -f src/pmi/pmi2/simple/$(am__dirstamp)
-rm -f src/pmi/simple/$(DEPDIR)/$(am__dirstamp)
-rm -f src/pmi/simple/$(am__dirstamp)
+ -rm -f src/util/assert/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/util/assert/$(am__dirstamp)
-rm -f src/util/cvar/$(DEPDIR)/$(am__dirstamp)
-rm -f src/util/cvar/$(am__dirstamp)
- -rm -f src/util/dbg/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/util/dbg/$(am__dirstamp)
- -rm -f src/util/instrm/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/util/instrm/$(am__dirstamp)
-rm -f src/util/logging/rlog/$(DEPDIR)/$(am__dirstamp)
-rm -f src/util/logging/rlog/$(am__dirstamp)
-rm -f src/util/mem/$(DEPDIR)/$(am__dirstamp)
-rm -f src/util/mem/$(am__dirstamp)
- -rm -f src/util/other/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/util/other/$(am__dirstamp)
-rm -f src/util/procmap/$(DEPDIR)/$(am__dirstamp)
-rm -f src/util/procmap/$(am__dirstamp)
- -rm -f src/util/thread/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/util/thread/$(am__dirstamp)
- -rm -f src/util/timers/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/util/timers/$(am__dirstamp)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@@ -39180,7 +35528,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf src/binding/cxx/$(DEPDIR) src/binding/fortran/mpif_h/$(DEPDIR) src/binding/fortran/use_mpi/$(DEPDIR) src/binding/fortran/use_mpi_f08/wrappers_c/$(DEPDIR) src/env/$(DEPDIR) src/glue/romio/$(DEPDIR) src/mpi/attr/$(DEPDIR) src/mpi/coll/$(DEPDIR) src/mpi/comm/$(DEPDIR) src/mpi/datatype/$(DEPDIR) src/mpi/debugger/$(DEPDIR) src/mpi/errhan/$(DEPDIR) src/mpi/group/$(DEPDIR) src/mpi/info/$(DEPDIR) src/mpi/init/$(DEPDIR) src/mpi/misc/$(DEPDIR) src/mpi/pt2pt/$(DEPDIR) src/mpi/rma/$(DEPDIR) [...]
+ -rm -rf src/binding/cxx/$(DEPDIR) src/binding/fortran/mpif_h/$(DEPDIR) src/binding/fortran/use_mpi/$(DEPDIR) src/binding/fortran/use_mpi_f08/wrappers_c/$(DEPDIR) src/env/$(DEPDIR) src/glue/romio/$(DEPDIR) src/mpi/attr/$(DEPDIR) src/mpi/coll/$(DEPDIR) src/mpi/comm/$(DEPDIR) src/mpi/datatype/$(DEPDIR) src/mpi/debugger/$(DEPDIR) src/mpi/errhan/$(DEPDIR) src/mpi/group/$(DEPDIR) src/mpi/info/$(DEPDIR) src/mpi/init/$(DEPDIR) src/mpi/misc/$(DEPDIR) src/mpi/pt2pt/$(DEPDIR) src/mpi/rma/$(DEPDIR) [...]
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-local distclean-tags
@@ -39232,7 +35580,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf src/binding/cxx/$(DEPDIR) src/binding/fortran/mpif_h/$(DEPDIR) src/binding/fortran/use_mpi/$(DEPDIR) src/binding/fortran/use_mpi_f08/wrappers_c/$(DEPDIR) src/env/$(DEPDIR) src/glue/romio/$(DEPDIR) src/mpi/attr/$(DEPDIR) src/mpi/coll/$(DEPDIR) src/mpi/comm/$(DEPDIR) src/mpi/datatype/$(DEPDIR) src/mpi/debugger/$(DEPDIR) src/mpi/errhan/$(DEPDIR) src/mpi/group/$(DEPDIR) src/mpi/info/$(DEPDIR) src/mpi/init/$(DEPDIR) src/mpi/misc/$(DEPDIR) src/mpi/pt2pt/$(DEPDIR) src/mpi/rma/$(DEPDIR) [...]
+ -rm -rf src/binding/cxx/$(DEPDIR) src/binding/fortran/mpif_h/$(DEPDIR) src/binding/fortran/use_mpi/$(DEPDIR) src/binding/fortran/use_mpi_f08/wrappers_c/$(DEPDIR) src/env/$(DEPDIR) src/glue/romio/$(DEPDIR) src/mpi/attr/$(DEPDIR) src/mpi/coll/$(DEPDIR) src/mpi/comm/$(DEPDIR) src/mpi/datatype/$(DEPDIR) src/mpi/debugger/$(DEPDIR) src/mpi/errhan/$(DEPDIR) src/mpi/group/$(DEPDIR) src/mpi/info/$(DEPDIR) src/mpi/init/$(DEPDIR) src/mpi/misc/$(DEPDIR) src/mpi/pt2pt/$(DEPDIR) src/mpi/rma/$(DEPDIR) [...]
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -39334,7 +35682,7 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
#include $(top_srcdir)/src/util/logging/slog_api/Makefile.mk
# normally built by autogen.sh, but this rebuild rule is here
- at MAINTAINER_MODE_TRUE@$(top_srcdir)/src/util/cvar/mpich_cvars.c: $(top_srcdir)/maint/extractcvars
+ at MAINTAINER_MODE_TRUE@$(top_srcdir)/src/util/cvar/mpir_cvars.c: $(top_srcdir)/maint/extractcvars
@MAINTAINER_MODE_TRUE@ ( cd $(top_srcdir) && $(top_srcdir)/maint/extractcvars --dirs="`cat $(top_srcdir)/maint/cvardirs`")
@BUILD_CXX_BINDING_TRUE@@MAINTAINER_MODE_TRUE@$(cxx_buildiface_out_files): src/binding/cxx/buildiface-stamp
@BUILD_CXX_BINDING_TRUE@@MAINTAINER_MODE_TRUE at src/binding/cxx/buildiface-stamp: $(top_srcdir)/src/binding/cxx/buildiface $(top_srcdir)/src/include/mpi.h.in
@@ -39506,6 +35854,25 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
#doc_MAN_SOURCES = ${doc_sources}
#doc_LATEX_SOURCES = ${doc_sources}
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
+ at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
+ at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
+ at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo
+ at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
+
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
+ at BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
+ at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp' 1 2 13 15; \
+ at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock 2>/dev/null; then \
+ at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
+ at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
+ at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; \
+ at BUILD_F08_BINDING_TRUE@ else \
+ at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; do sleep 1; done; \
+ at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; exit $$?; \
+ at BUILD_F08_BINDING_TRUE@ fi; \
+ at BUILD_F08_BINDING_TRUE@ fi
+
@BUILD_F08_BINDING_TRUE at src/binding/fortran/use_mpi_f08/mpi_c_interface.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
@BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface.tmp
@BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface.tmp
@@ -39525,60 +35892,22 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
@BUILD_F08_BINDING_TRUE@ fi; \
@BUILD_F08_BINDING_TRUE@ fi
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 src/binding/fortran/use_mpi_f08/mpi_f08.stamp
- at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
- at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
- at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo
- at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
-
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
- at BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
- at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp' 1 2 13 15; \
- at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock 2>/dev/null; then \
- at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
- at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
- at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; \
- at BUILD_F08_BINDING_TRUE@ else \
- at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; do sleep 1; done; \
- at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; exit $$?; \
- at BUILD_F08_BINDING_TRUE@ fi; \
- at BUILD_F08_BINDING_TRUE@ fi
-
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90
- at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
- at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
- at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo
- at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
-
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
- at BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
- at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp' 1 2 13 15; \
- at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock 2>/dev/null; then \
- at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
- at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
- at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; \
- at BUILD_F08_BINDING_TRUE@ else \
- at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; do sleep 1; done; \
- at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; exit $$?; \
- at BUILD_F08_BINDING_TRUE@ fi; \
- at BUILD_F08_BINDING_TRUE@ fi
-
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
- at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
- at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
- at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo
- at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+ at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
+ at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
+ at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo
+ at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo : src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
@BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
- at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp' 1 2 13 15; \
- at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock 2>/dev/null; then \
- at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
- at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
- at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; \
+ at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp' 1 2 13 15; \
+ at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock 2>/dev/null; then \
+ at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
+ at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
+ at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; \
@BUILD_F08_BINDING_TRUE@ else \
- at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; do sleep 1; done; \
- at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; exit $$?; \
+ at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; do sleep 1; done; \
+ at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; exit $$?; \
@BUILD_F08_BINDING_TRUE@ fi; \
@BUILD_F08_BINDING_TRUE@ fi
@@ -39601,60 +35930,41 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
@BUILD_F08_BINDING_TRUE@ fi; \
@BUILD_F08_BINDING_TRUE@ fi
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
- at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
- at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
- at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo
- at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
-
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
- at BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
- at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp' 1 2 13 15; \
- at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock 2>/dev/null; then \
- at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
- at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
- at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; \
- at BUILD_F08_BINDING_TRUE@ else \
- at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; do sleep 1; done; \
- at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; exit $$?; \
- at BUILD_F08_BINDING_TRUE@ fi; \
- at BUILD_F08_BINDING_TRUE@ fi
-
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
- at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
- at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
- at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo
- at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
+ at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
+ at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
+ at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo
+ at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo : src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
@BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
- at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp' 1 2 13 15; \
- at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock 2>/dev/null; then \
- at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
- at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
- at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; \
+ at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp' 1 2 13 15; \
+ at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock 2>/dev/null; then \
+ at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
+ at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
+ at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; \
@BUILD_F08_BINDING_TRUE@ else \
- at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; do sleep 1; done; \
- at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; exit $$?; \
+ at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; do sleep 1; done; \
+ at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; exit $$?; \
@BUILD_F08_BINDING_TRUE@ fi; \
@BUILD_F08_BINDING_TRUE@ fi
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.stamp
- at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
- at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
- at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo
- at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90
+ at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
+ at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
+ at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo
+ at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
- at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo : src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
@BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
- at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp' 1 2 13 15; \
- at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock 2>/dev/null; then \
- at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
- at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
- at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; \
+ at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp' 1 2 13 15; \
+ at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock 2>/dev/null; then \
+ at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
+ at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
+ at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; \
@BUILD_F08_BINDING_TRUE@ else \
- at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; do sleep 1; done; \
- at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; exit $$?; \
+ at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; do sleep 1; done; \
+ at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; exit $$?; \
@BUILD_F08_BINDING_TRUE@ fi; \
@BUILD_F08_BINDING_TRUE@ fi
@@ -39696,6 +36006,44 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
@BUILD_F08_BINDING_TRUE@ fi; \
@BUILD_F08_BINDING_TRUE@ fi
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 src/binding/fortran/use_mpi_f08/mpi_f08.stamp
+ at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
+ at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
+ at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo
+ at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
+
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
+ at BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
+ at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp' 1 2 13 15; \
+ at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock 2>/dev/null; then \
+ at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
+ at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
+ at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; \
+ at BUILD_F08_BINDING_TRUE@ else \
+ at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; do sleep 1; done; \
+ at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; exit $$?; \
+ at BUILD_F08_BINDING_TRUE@ fi; \
+ at BUILD_F08_BINDING_TRUE@ fi
+
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.stamp
+ at BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
+ at BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
+ at BUILD_F08_BINDING_TRUE@ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo
+ at BUILD_F08_BINDING_TRUE@ @mv src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+
+ at BUILD_F08_BINDING_TRUE@src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo : src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+ at BUILD_F08_BINDING_TRUE@ @if test -f $@; then :; else \
+ at BUILD_F08_BINDING_TRUE@ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp' 1 2 13 15; \
+ at BUILD_F08_BINDING_TRUE@ if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock 2>/dev/null; then \
+ at BUILD_F08_BINDING_TRUE@ rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
+ at BUILD_F08_BINDING_TRUE@ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
+ at BUILD_F08_BINDING_TRUE@ rmdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; \
+ at BUILD_F08_BINDING_TRUE@ else \
+ at BUILD_F08_BINDING_TRUE@ while test -d src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; do sleep 1; done; \
+ at BUILD_F08_BINDING_TRUE@ test -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; exit $$?; \
+ at BUILD_F08_BINDING_TRUE@ fi; \
+ at BUILD_F08_BINDING_TRUE@ fi
+
@BUILD_F08_BINDING_TRUE at src/binding/fortran/use_mpi_f08/pmpi_f08.stamp: src/binding/fortran/use_mpi_f08/pmpi_f08.f90 src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
@BUILD_F08_BINDING_TRUE@ @rm -f src/binding/fortran/use_mpi_f08/pmpi_f08.tmp
@BUILD_F08_BINDING_TRUE@ @touch src/binding/fortran/use_mpi_f08/pmpi_f08.tmp
@@ -39733,13 +36081,10 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
@BUILD_BASH_SCRIPTS_FALSE at src/env/mpifort: $(top_builddir)/src/env/mpifort.sh
@BUILD_BASH_SCRIPTS_FALSE@ cp -p $? $@
-src/include/mpich_cvars.h:
+src/include/mpir_cvars.h:
$(top_srcdir)/maint/extractcvars --dirs="`cat $(top_srcdir)/maint/cvardirs`"
-
-# we don't provide an automake Makefile.mk for the iocp directory because it is
-# a Windows-only subsystem and our Windows build does not use the autotools at
-# this time
-#include $(top_srcdir)/src/mpid/common/sock/iocp/Makefile.mk
+# errnames_txt_files += src/mpid/ch4/netmod/stub/errnames.txt
+# errnames_txt_files += src/mpid/ch4/shm/stub/errnames.txt
# Commented out the installation of mpich.module till Deji has a
# complete solution how mpich.module could be used with modules.
@@ -39965,13 +36310,22 @@ uninstall-local:
.txt.html1-phony:
$(doctexthtml_verbose)$(DOCTEXT) -html -mpath $(htmldoc_path1) \
-heading MPI -quotefmt -nolocation $(doctext_docnotes) $<
+.txt.man3-phony:
+ $(doctextman_verbose)$(DOCTEXT) -man -mpath $(mandoc_path3) -ext 3 \
+ -heading MPI -quotefmt -nolocation $(doctext_docnotes) $<
+.txt.html3-phony:
+ $(doctexthtml_verbose)$(DOCTEXT) -html -mpath $(htmldoc_path3) \
+ -heading MPI -quotefmt -nolocation \
+ -index $(htmldoc_path3)/mpi.cit -indexdir $(htmldoc_root3) \
+ $(doctext_docnotes) $<
# use mandoc-local target to force directory creation before running DOCTEXT
mandoc:
test -d $(mandoc_path1) || $(MKDIR_P) $(mandoc_path1)
test -d $(mandoc_path3) || $(MKDIR_P) $(mandoc_path3)
$(MAKE) $(AM_MAKEFLAGS) mandoc-local
-mandoc-local: $(mpi_sources:.c=.man-phony) $(doc1_src_txt:.txt=.man1-phony)
+mandoc-local: $(mpi_sources:.c=.man-phony) $(doc1_src_txt:.txt=.man1-phony) \
+ $(doc3_src_txt:.txt=.man3-phony)
for subdir in $(MANDOC_SUBDIRS) - ; do \
if test "x$$subdir" = "x-" ; then break ; fi ; \
if test "x$$subdir" = "x." ; then \
@@ -39986,13 +36340,20 @@ mandoc-local: $(mpi_sources:.c=.man-phony) $(doc1_src_txt:.txt=.man1-phony)
fi \
fi \
done
+# FIXME: the 'mancnst' script need to be committed for this to work
+# (cd $(abs_top_builddir) && $(abs_top_srcdir)/doc/mansrc/mancnst)
# use htmldoc-local target to force directory creation before running DOCTEXT
+# Note that the mpi.cit is appended to by each update, so it must be removed
+# and recreated when the documentation files are updated
htmldoc:
test -d $(top_builddir)/www/www1 || $(MKDIR_P) $(top_builddir)/www/www1
test -d $(top_builddir)/www/www3 || $(MKDIR_P) $(top_builddir)/www/www3
+ rm -f $(htmldoc_path3)/mpi.cit
$(MAKE) $(AM_MAKEFLAGS) htmldoc-local
-htmldoc-local: $(mpi_sources:.c=.html-phony) $(doc1_src_txt:.txt=.html1-phony)
+
+htmldoc-local: $(mpi_sources:.c=.html-phony) $(doc1_src_txt:.txt=.html1-phony) \
+ $(doc3_src_txt:.txt=.html3-phony)
for subdir in $(HTMLDOC_SUBDIRS) - ; do \
if test "x$$subdir" = "x-" ; then break ; fi ; \
if test "x$$subdir" = "x." ; then \
diff --git a/README b/README
index f3d6ef9..eaa569f 100644
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
- MPICH Release 3.2
+ MPICH Release 3.3a2
MPICH is a high-performance and widely portable implementation of the
-MPI-3.0 standard from the Argonne National Laboratory. This release
-has all MPI 3.0 functions and features required by the standard with
+MPI-3.1 standard from the Argonne National Laboratory. This release
+has all MPI 3.1 functions and features required by the standard with
the exception of support for the "external32" portable I/O format and
user-defined data representations for I/O.
@@ -40,7 +40,7 @@ shared memory), Hydra process management) of MPICH up and running.
(a) You will need the following prerequisites.
- - REQUIRED: This tar file mpich-3.2.tar.gz
+ - REQUIRED: This tar file mpich-3.3a2.tar.gz
- REQUIRED: A C compiler (gcc is sufficient)
@@ -62,14 +62,14 @@ shared memory), Hydra process management) of MPICH up and running.
(b) Unpack the tar file and go to the top level directory:
- tar xzf mpich-3.2.tar.gz
- cd mpich-3.2
+ tar xzf mpich-3.3a2.tar.gz
+ cd mpich-3.3a2
If your tar doesn't accept the z option, use
- gunzip mpich-3.2.tar.gz
- tar xf mpich-3.2.tar
- cd mpich-3.2
+ gunzip mpich-3.3a2.tar.gz
+ tar xf mpich-3.3a2.tar
+ cd mpich-3.3a2
(c) Choose an installation directory, say
/home/<USERNAME>/mpich-install, which is assumed to non-existent
@@ -178,7 +178,7 @@ shared memory), Hydra process management) of MPICH up and running.
Now we will run an MPI job, using the mpiexec command as specified
in the MPI standard. There are some examples in the install
directory, which you have already put in your path, as well as in
- the directory mpich-3.2/examples. One of them is the classic
+ the directory mpich-3.3a2/examples. One of them is the classic
CPI example, which computes the value of pi by numerical
integration in parallel.
@@ -242,14 +242,14 @@ COMPRESS BEFORE SENDING, AS THE FILES CAN BE LARGE. Note that,
depending on which step the build failed, some of the files might not
exist.
- mpich-3.2/c.txt (generated in step 1(d) above)
- mpich-3.2/m.txt (generated in step 1(e) above)
- mpich-3.2/mi.txt (generated in step 1(f) above)
- mpich-3.2/config.log (generated in step 1(d) above)
- mpich-3.2/src/openpa/config.log (generated in step 1(d) above)
- mpich-3.2/src/mpl/config.log (generated in step 1(d) above)
- mpich-3.2/src/pm/hydra/config.log (generated in step 1(d) above)
- mpich-3.2/src/pm/hydra/tools/topo/hwloc/hwloc/config.log (generated in step 1(d) above)
+ mpich-3.3a2/c.txt (generated in step 1(d) above)
+ mpich-3.3a2/m.txt (generated in step 1(e) above)
+ mpich-3.3a2/mi.txt (generated in step 1(f) above)
+ mpich-3.3a2/config.log (generated in step 1(d) above)
+ mpich-3.3a2/src/openpa/config.log (generated in step 1(d) above)
+ mpich-3.3a2/src/mpl/config.log (generated in step 1(d) above)
+ mpich-3.3a2/src/pm/hydra/config.log (generated in step 1(d) above)
+ mpich-3.3a2/src/pm/hydra/tools/topo/hwloc/hwloc/config.log (generated in step 1(d) above)
DID WE MENTION? DO NOT FORGET TO COMPRESS THESE FILES!
@@ -397,10 +397,9 @@ relevant Makefiles.
=================================
The communication mechanisms in MPICH are called "devices". MPICH
-supports ch3 (default), as well as many third-party devices that are
-released and maintained by other institutes such as osu_ch3 (from Ohio
-State University for InfiniBand and iWARP), ch_mx (from Myricom for
-Myrinet MX), etc.
+supports ch3 (default) and ch4 (experimental), as well as many
+third-party devices that are released and maintained by other
+institutes.
*************************************
@@ -537,6 +536,37 @@ in the binary. If you're using gcc, you can do this by adding
Currently, use of MPI_ANY_SOURCE and MPI dynamic processes are unsupported
with the portals4 netmod.
+ofi network module
+```````````````````
+The ofi netmod provides support for the OFI network programming interface.
+To enable, configure with the following option:
+
+ --with-device=ch3:nemesis:ofi
+
+If the OFI include files and libraries are not in the normal search paths,
+you can specify them with the following options:
+
+ --with-ofi-include= and --with-ofi-lib=
+
+... or the if lib/ and include/ are in the same directory, you can use
+the following option:
+
+ --with-ofi=
+
+If the OFI libraries are shared libraries, they need to be in the
+shared library search path. This can be done by adding the path to
+/etc/ld.so.conf, or by setting the LD_LIBRARY_PATH variable in your
+environment. It's also possible to set the shared library search path
+in the binary. If you're using gcc, you can do this by adding
+
+ LD_LIBRARY_PATH=/path/to/lib
+
+ (and)
+
+ LDFLAGS="-Wl,-rpath -Wl,/path/to/lib"
+
+... as arguments to configure.
+
sock channel
------------
@@ -549,31 +579,55 @@ channel can be configured using the following option:
--with-device=ch3:sock
-pamid device
-************
-This is the device used on the IBM Blue Gene/Q system. The following
-configure options can be used:
+ch4 device
+**********
+The ch4 device contains different network and shared memory modules
+for communication. We currently support the ofi and ucx network
+modules, and posix shared memory module.
+
+ofi network module
+```````````````````
+The ofi netmod provides support for the OFI network programming interface.
+To enable, configure with the following option:
+
+ --with-device=ch4:ofi
- ./configure --host=powerpc64-bgq-linux \
- --with-device=pamid:BGQ \
- --with-file-system=bg+bglockless
+If the OFI include files and libraries are not in the normal search paths,
+you can specify them with the following options:
-The Blue Gene/Q cross compilers must either be in the $PATH, or
-explicitly specified using environment variables, before configure.
-For example:
+ --with-libfabric-include= and --with-libfabric-lib=
- PATH=$PATH:/bgsys/drivers/ppcfloor/gnu-linux/bin
+... or the if lib/ and include/ are in the same directory, you can use
+the following option:
+
+ --with-libfabric=
+
+ucx network module
+``````````````````
+The ucx netmod provides support for the Unified Communication X
+library. It can be built with the following configure option:
-or
+ --with-device=ch4:ucx
- CC=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc64-bgq-linux-gcc
- CXX=...
- ...
+If the UCX include files and libraries are not in the normal search paths,
+you can specify them with the following options:
-There are several other configure options that are specific to building
-on a Blue Gene/Q system. See the wiki page for more information:
+ --with-ucx-include= and --with-ucx-lib=
+
+... or the if lib/ and include/ are in the same directory, you can use
+the following option:
+
+ --with-ucx=
+
+By default, the UCX library throws warnings when the system does not
+enable certain features that might hurt performance. These are
+important warnings that might cause performance degradation on your
+system. But you might need root privileges to fix some of them. If
+you would like to disable such warnings, you can set the UCX log level
+to "error" instead of the default "warn" by using:
- https://wiki.mpich.org/mpich/index.php/BGQ
+ UCX_LOG_LEVEL=error
+ export UCX_LOG_LEVEL
-------------------------------------------------------------------------
@@ -758,10 +812,10 @@ These instructions can also be found on the MPICH wiki:
9. Developer Builds
===================
-For MPICH developers who want to directly work on the svn, there are
-a few additional steps involved (people using the release tarballs do
-not have to follow these steps). Details about these steps can be
-found here:
+For MPICH developers who want to directly work on the primary version
+control system, there are a few additional steps involved (people
+using the release tarballs do not have to follow these steps). Details
+about these steps can be found here:
http://wiki.mpich.org/mpich/index.php/Getting_And_Building_MPICH
-------------------------------------------------------------------------
diff --git a/README.envvar b/README.envvar
index 70358a2..d08b0ca 100644
--- a/README.envvar
+++ b/README.envvar
@@ -3,7 +3,7 @@
Automatically generated
by: ./maint/extractcvars
- at: Wed Nov 11 22:07:04 2015
+ at: Sun Nov 13 09:12:25 2016
DO NOT EDIT!!!
This file lists the various environment variables available to change the
@@ -11,6 +11,13 @@ behavior of the MPICH library. These are intended to be used by advanced
users.
---------------------------------------------------------------------------
+MPIR_CVAR_DIMS_VERBOSE
+ Aliases: MPIR_PARAM_DIMS_VERBOSE
+ MPICH_DIMS_VERBOSE
+ Description: If true, enable verbose output about the actions of the
+ implementation of MPI_Dims_create.
+ Default: 0
+
MPIR_CVAR_DEBUG_HOLD
Aliases: MPIR_PARAM_DEBUG_HOLD
MPICH_DEBUG_HOLD
@@ -49,6 +56,7 @@ MPIR_CVAR_DEFAULT_THREAD_LEVEL
Aliases: MPIR_PARAM_DEFAULT_THREAD_LEVEL
MPICH_DEFAULT_THREAD_LEVEL
Description: Sets the default thread level to use when using MPI_INIT.
+ This variable is case-insensitive.
Default: "MPI_THREAD_SINGLE"
MPIR_CVAR_MEMDUMP
@@ -304,7 +312,7 @@ MPIR_CVAR_PROCTABLE_PRINT
Aliases: MPIR_PARAM_PROCTABLE_PRINT
MPICH_PROCTABLE_PRINT
Description: If true, dump the proctable entries at
- MPIR_WaitForDebugger-time.
+ MPII_Wait_for_debugger-time.
Default: 0
MPIR_CVAR_PRINT_ERROR_STACK
@@ -334,6 +342,28 @@ MPIR_CVAR_NAMESERV_FILE_PUBDIR
connect/accept based applications.
Default: NULL
+MPIR_CVAR_NOLOCAL
+ Aliases: MPIR_PARAM_NOLOCAL
+ MPICH_NOLOCAL
+ MPIR_CVAR_NO_LOCAL
+ MPIR_PARAM_NO_LOCAL
+ MPICH_NO_LOCAL
+ Description: If true, force all processes to operate as though all
+ processes are located on another node. For example, this disables
+ shared memory communication hierarchical collectives.
+ Default: 0
+
+MPIR_CVAR_ODD_EVEN_CLIQUES
+ Aliases: MPIR_PARAM_ODD_EVEN_CLIQUES
+ MPICH_ODD_EVEN_CLIQUES
+ MPIR_CVAR_EVEN_ODD_CLIQUES
+ MPIR_PARAM_EVEN_ODD_CLIQUES
+ MPICH_EVEN_ODD_CLIQUES
+ Description: If true, odd procs on a node are seen as local to each
+ other, and even procs on a node are seen as local to each other.
+ Used for debugging on a single machine.
+ Default: 0
+
MPIR_CVAR_ABORT_ON_LEAKED_HANDLES
Aliases: MPIR_PARAM_ABORT_ON_LEAKED_HANDLES
MPICH_ABORT_ON_LEAKED_HANDLES
@@ -352,34 +382,25 @@ MPIR_CVAR_COLL_ALIAS_CHECK
Description: Enable checking of aliasing in collective operations
Default: 1
+MPIR_CVAR_CH4_NETMOD
+ Aliases: MPIR_PARAM_CH4_NETMOD
+ MPICH_CH4_NETMOD
+ Description: If non-empty, this cvar specifies which network module to
+ use
+ Default: ""
+
+MPIR_CVAR_CH4_SHM
+ Aliases: MPIR_PARAM_CH4_SHM
+ MPICH_CH4_SHM
+ Description: If non-empty, this cvar specifies which shm module to use
+ Default: ""
+
MPIR_CVAR_CH3_ENABLE_HCOLL
Aliases: MPIR_PARAM_CH3_ENABLE_HCOLL
MPICH_CH3_ENABLE_HCOLL
Description: If true, enable HCOLL collectives.
Default: 0
-MPIR_CVAR_CH3_NOLOCAL
- Aliases: MPIR_PARAM_CH3_NOLOCAL
- MPICH_CH3_NOLOCAL
- MPIR_CVAR_CH3_NO_LOCAL
- MPIR_PARAM_CH3_NO_LOCAL
- MPICH_CH3_NO_LOCAL
- Description: If true, force all processes to operate as though all
- processes are located on another node. For example, this disables
- shared memory communication hierarchical collectives.
- Default: 0
-
-MPIR_CVAR_CH3_ODD_EVEN_CLIQUES
- Aliases: MPIR_PARAM_CH3_ODD_EVEN_CLIQUES
- MPICH_CH3_ODD_EVEN_CLIQUES
- MPIR_CVAR_CH3_EVEN_ODD_CLIQUES
- MPIR_PARAM_CH3_EVEN_ODD_CLIQUES
- MPICH_CH3_EVEN_ODD_CLIQUES
- Description: If true, odd procs on a node are seen as local to each
- other, and even procs on a node are seen as local to each other.
- Used for debugging on a single machine.
- Default: 0
-
MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE
Aliases: MPIR_PARAM_CH3_EAGER_MAX_MSG_SIZE
MPICH_CH3_EAGER_MAX_MSG_SIZE
@@ -405,6 +426,15 @@ MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES
positive calue.
Default: 655360
+MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT
+ Aliases: MPIR_PARAM_CH3_COMM_CONNECT_TIMEOUT
+ MPICH_CH3_COMM_CONNECT_TIMEOUT
+ Description: The default time out period in seconds for a connection
+ attempt to the server communicator where the named port exists but
+ no pending accept. User can change the value for a specified
+ connection through its info argument.
+ Default: 180
+
MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE
Aliases: MPIR_PARAM_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE
MPICH_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE
@@ -545,7 +575,8 @@ MPIR_CVAR_NEMESIS_NETMOD
Aliases: MPIR_PARAM_NEMESIS_NETMOD
MPICH_NEMESIS_NETMOD
Description: If non-empty, this cvar specifies which network module
- should be used for communication.
+ should be used for communication. This variable is
+ case-insensitive.
Default: ""
MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index b3d7b1e..f2502e2 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -2,6 +2,18 @@
KNOWN ISSUES
----------------------------------------------------------------------
+### CH4 preview
+
+ * Build Issues
+ - CH4 will not build with Solaris compilers.
+
+ * Test failures
+ - CH4 will not currently pass 100% of the testsuite.
+ - All Fortran tests will fail to link if CH4:UCX is built using the
+ Intel compiler suite.
+ - Test failures differ based on experimental setup and network
+ support built in.
+
### Solaris compilers
* Compilation on solaris will freeze when MPICH is configured with
diff --git a/aclocal.m4 b/aclocal.m4
index 843a45f..d2dbaaa 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1287,6 +1287,7 @@ m4_include([confdb/aclocal_attr_alias.m4])
m4_include([confdb/aclocal_bugfix.m4])
m4_include([confdb/aclocal_cache.m4])
m4_include([confdb/aclocal_cc.m4])
+m4_include([confdb/aclocal_check_visibility.m4])
m4_include([confdb/aclocal_coverage.m4])
m4_include([confdb/aclocal_cxx.m4])
m4_include([confdb/aclocal_f77.m4])
@@ -1299,9 +1300,10 @@ m4_include([confdb/aclocal_shl.m4])
m4_include([confdb/aclocal_shm.m4])
m4_include([confdb/aclocal_subcfg.m4])
m4_include([confdb/aclocal_util.m4])
-m4_include([confdb/ax_tls.m4])
m4_include([confdb/libtool.m4])
m4_include([confdb/ltoptions.m4])
m4_include([confdb/ltsugar.m4])
m4_include([confdb/ltversion.m4])
m4_include([confdb/lt~obsolete.m4])
+m4_include([confdb/random_r.m4])
+m4_include([confdb/stdlib_h.m4])
diff --git a/autogen.sh b/autogen.sh
index 5370dbf..3215a68 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -88,6 +88,7 @@ sync_external () {
confdb_dirs=
confdb_dirs="${confdb_dirs} src/mpi/romio/confdb"
+confdb_dirs="${confdb_dirs} src/mpi/romio/mpl/confdb"
confdb_dirs="${confdb_dirs} src/mpl/confdb"
confdb_dirs="${confdb_dirs} src/pm/hydra/confdb"
confdb_dirs="${confdb_dirs} src/pm/hydra/mpl/confdb"
@@ -96,6 +97,9 @@ confdb_dirs="${confdb_dirs} test/mpi/confdb"
# hydra's copy of mpl
sync_external src/mpl src/pm/hydra/mpl
+# ROMIO's copy of mpl
+sync_external src/mpl src/mpi/romio/mpl
+
# all the confdb directories, by various names
for destdir in $confdb_dirs ; do
sync_external confdb "$destdir"
@@ -160,6 +164,10 @@ MAKE=${MAKE-make}
# external packages that require autogen.sh to be run for each of them
externals="src/pm/hydra src/mpi/romio src/openpa"
+if [ -e src/mpid/ch4/netmod/ofi/libfabric ]; then
+ externals="${externals} src/mpid/ch4/netmod/ofi/libfabric"
+fi
+
# amdirs are the directories that make use of autoreconf
amdirs=". src/mpl src/util/logging/rlog"
@@ -544,7 +552,7 @@ fi
echo_n "Checking for libtool version... "
recreate_tmp
-ver=2.4.3
+ver=2.4.4
cat <<EOF >.tmp/configure.ac
AC_INIT(testver,1.0)
AC_CONFIG_AUX_DIR([m4])
@@ -783,7 +791,7 @@ static const int generic_msgs_len = 0;
static msgpair generic_err_msgs[] = { {0xacebad03, 0, "no error catalog", 0xcb0bfa11}, };
static const int specific_msgs_len = 0;
static msgpair specific_err_msgs[] = { {0xacebad03,0,0,0xcb0bfa11}, };
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_NONE
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__NONE
#define MPIR_MAX_ERROR_CLASS_INDEX 54
static int class_to_index[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/confdb/aclocal_cc.m4 b/confdb/aclocal_cc.m4
index 92e7ee1..23d7365 100644
--- a/confdb/aclocal_cc.m4
+++ b/confdb/aclocal_cc.m4
@@ -521,7 +521,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -626,13 +626,6 @@ if test "$enable_strict_done" != "yes" ; then
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
- 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
- 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
- *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -645,6 +638,16 @@ if test "$enable_strict_done" != "yes" ; then
PAC_APPEND_FLAG([-std=c89],[pac_cc_strict_flags])
PAC_APPEND_FLAG([-Wdeclaration-after-statement],[pac_cc_strict_flags])
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
+ 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
+ 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
+ *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
+ esac
fi
# See if the above options work with the compiler
diff --git a/confdb/aclocal_check_visibility.m4 b/confdb/aclocal_check_visibility.m4
new file mode 100644
index 0000000..1ea85ba
--- /dev/null
+++ b/confdb/aclocal_check_visibility.m4
@@ -0,0 +1,123 @@
+# This macro set originally copied from hwloc.
+# MPICH modifications:
+# - renamed macro to PAC_CHECK_VISIBILITY
+# - removed C compiler vendor check
+# - sed -e 's/HWLOC/MPICH/gI'
+#
+# Copyright © 2004-2005 The Trustees of Indiana University and Indiana
+# University Research and Technology
+# Corporation. All rights reserved.
+# Copyright © 2004-2005 The University of Tennessee and The University
+# of Tennessee Research Foundation. All rights
+# reserved.
+# Copyright © 2004-2007 High Performance Computing Center Stuttgart,
+# University of Stuttgart. All rights reserved.
+# Copyright © 2004-2005 The Regents of the University of California.
+# All rights reserved.
+# Copyright © 2006-2007 Cisco Systems, Inc. All rights reserved.
+# and renamed/modified for hwloc:
+# Copyright © 2009 Inria. All rights reserved.
+# Copyright © 2009-2010 Université Bordeaux
+# Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer listed
+# in this license in the documentation and/or other materials
+# provided with the distribution.
+#
+# - Neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties. The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# PAC_CHECK_VISIBILITY
+# --------------------------------------------------------
+AC_DEFUN([PAC_CHECK_VISIBILITY],[
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
+ m4_ifdef([AC_PROG_GREP],
+ [AC_REQUIRE([AC_PROG_GREP])],
+ [GREP=grep])
+
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ AC_ARG_ENABLE(visibility,
+ AC_HELP_STRING([--enable-visibility],
+ [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
+
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (disabled)])
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+
+ AC_MSG_CHECKING([if $CC supports $mpich_add])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+ ]],[[fprintf(stderr, "Hello, world\n");]])],
+ [AS_IF([test -s conftest.err],
+ [$GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ AS_IF([test "$?" = "0"], [mpich_add=])])
+ ], [mpich_add=])
+ AS_IF([test "$mpich_add" = ""],
+ [AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes])])
+
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([yes (via $mpich_add)])
+ elif test "$enable_visibility" = "yes"; then
+ AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting])
+ else
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (unsupported)])
+ fi
+ unset mpich_add
+ fi
+
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$mpich_visibility_define],
+ [Whether C compiler supports symbol visibility or not])
+])
diff --git a/confdb/aclocal_fc.m4 b/confdb/aclocal_fc.m4
index b844009..4318e38 100644
--- a/confdb/aclocal_fc.m4
+++ b/confdb/aclocal_fc.m4
@@ -439,7 +439,7 @@ AC_COMPILE_IFELSE([],[
# module tests do not always use the module output flag. See
# FC_MODULE_EXT , where this is determined.
# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
# f90 -moddir=${dir} ## the Sun f90 compiler
# g95 -fmod=${dir}
#
@@ -448,7 +448,7 @@ AC_COMPILE_IFELSE([],[
# users to use. Alternatively they can use an older version of MPICH.
pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
rm -f conftestdir/NONEXISTENT conftestdir/*
PAC_PUSH_FLAG([FCFLAGS])
FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
diff --git a/confdb/aclocal_libs.m4 b/confdb/aclocal_libs.m4
index 09e9c4c..8868e99 100644
--- a/confdb/aclocal_libs.m4
+++ b/confdb/aclocal_libs.m4
@@ -48,7 +48,7 @@ AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
dnl is adding lib64 by default really the right thing to do? What if
dnl we are on a 32-bit host that happens to have both lib dirs available?
[PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
- AS_IF([test -d "${with_$1}/lib64}"],
+ AS_IF([test -d "${with_$1}/lib64"],
[PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
])
])
diff --git a/confdb/aclocal_romio.m4 b/confdb/aclocal_romio.m4
index af80d3c..94f4e2e 100644
--- a/confdb/aclocal_romio.m4
+++ b/confdb/aclocal_romio.m4
@@ -786,28 +786,6 @@ EOF
fi
rm -f conftest$EXEEXT mpitest.c
])dnl
-define(PAC_TEST_MPIU_FUNCS,[
- AC_MSG_CHECKING(support for MPICH memory macros)
- rm -f mpitest.c
- cat > mpitest.c <<EOF
-#include "mpi.h"
-#include "stdio.h"
- main(Int argc, char **argv)
- {
- MPIU_Free(NULL);
- }
-EOF
- rm -f conftest$EXEEXT
- $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
- if test -x conftest$EXEEXT ; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
- else
- AC_MSG_RESULT(no)
- fi
- rm -f conftest$EXEEXT mpitest.c
-])dnl
-dnl
define(PAC_TEST_MPI_GREQUEST,[
AC_MSG_CHECKING(support for generalized requests)
rm -f mpitest.c
diff --git a/confdb/ax_tls.m4 b/confdb/ax_tls.m4
index 3f6a0ac..60657fa 100644
--- a/confdb/ax_tls.m4
+++ b/confdb/ax_tls.m4
@@ -46,7 +46,7 @@
AC_DEFUN([AX_TLS], [
AC_MSG_CHECKING(for thread local storage specifier)
AC_CACHE_VAL(ac_cv_tls, [
- ax_tls_keywords="__thread __declspec(thread) none"
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
for ax_tls_keyword in $ax_tls_keywords; do
case $ax_tls_keyword in
none) ac_cv_tls=none ; break ;;
@@ -69,7 +69,11 @@ AC_DEFUN([AX_TLS], [
PAC_APPEND_FLAG([-shared],[LIBS])
if test "$ac_cv_tls" != "none" ; then
AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([extern $ax_tls_keyword int bar;],[++bar;])],
+ [AC_LANG_PROGRAM(
+ [
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+ ],[++bar;])],
[ac_cv_tls=$ax_tls_keyword],
[ac_cv_tls=none])
fi
@@ -81,10 +85,7 @@ AC_DEFUN([AX_TLS], [
])
if test "$ac_cv_tls" != "none"; then
- # MPICH modification: this was "TLS" before instead of
- # "MPICH_TLS_SPECIFIER", but TLS had a reasonably high chance of conflicting
- # with a system library.
- AC_DEFINE_UNQUOTED([MPICH_TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+ AC_DEFINE_UNQUOTED([TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
fi
AC_MSG_RESULT($ac_cv_tls)
])
diff --git a/confdb/config.guess b/confdb/config.guess
index 6c32c86..1659250 100755
--- a/confdb/config.guess
+++ b/confdb/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/confdb/config.sub b/confdb/config.sub
index 7ffe373..1acc966 100755
--- a/confdb/config.sub
+++ b/confdb/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/confdb/install-sh b/confdb/install-sh
index 0b0fdcb..59990a1 100755
--- a/confdb/install-sh
+++ b/confdb/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/confdb/libtool.m4 b/confdb/libtool.m4
index 86ff5d9..2579f49 100644
--- a/confdb/libtool.m4
+++ b/confdb/libtool.m4
@@ -2890,6 +2890,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3549,7 +3561,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
@@ -4427,7 +4439,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4939,6 +4951,9 @@ m4_if([$1], [CXX], [
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -5001,6 +5016,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5255,7 +5273,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -5776,6 +5794,7 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5797,7 +5816,7 @@ _LT_EOF
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
diff --git a/confdb/ltmain.sh b/confdb/ltmain.sh
index 0f0a2da..147d758 100644
--- a/confdb/ltmain.sh
+++ b/confdb/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,10 +7272,13 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
continue
fi # $pass = conv
@@ -8823,6 +8829,9 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
esac
;;
no)
diff --git a/confdb/random_r.m4 b/confdb/random_r.m4
new file mode 100644
index 0000000..8d04a27
--- /dev/null
+++ b/confdb/random_r.m4
@@ -0,0 +1,43 @@
+# serial 5
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RANDOM_R],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
+ if test $ac_cv_header_random_h = no; then
+ HAVE_RANDOM_H=0
+ fi
+
+ AC_CHECK_TYPES([struct random_data],
+ [], [HAVE_STRUCT_RANDOM_DATA=0],
+ [[#include <stdlib.h>
+ #if HAVE_RANDOM_H
+ # include <random.h>
+ #endif
+ ]])
+
+ dnl On AIX and OSF/1, these functions exist, but with different declarations.
+ dnl Override them all.
+ case "$host_os" in
+ aix* | osf*)
+ REPLACE_RANDOM_R=1
+ ;;
+ *)
+ AC_CHECK_FUNCS([random_r])
+ if test $ac_cv_func_random_r = no; then
+ HAVE_RANDOM_R=0
+ fi
+ ;;
+ esac
+])
+
+# Prerequisites of lib/random_r.c.
+AC_DEFUN([gl_PREREQ_RANDOM_R], [
+ :
+])
diff --git a/confdb/stdlib_h.m4 b/confdb/stdlib_h.m4
new file mode 100644
index 0000000..19107c4
--- /dev/null
+++ b/confdb/stdlib_h.m4
@@ -0,0 +1,119 @@
+# stdlib_h.m4 serial 42
+dnl Copyright (C) 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_NEXT_HEADERS([stdlib.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+ ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
+ initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
+ posix_openpt ptsname ptsname_r random random_r realpath rpmatch
+ secure_getenv setenv setstate setstate_r srandom srandom_r
+ strtod strtoll strtoull unlockpt unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT])
+ GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
+ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
+ GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+ GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
+ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
+ GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT])
+ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
+ GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC])
+ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
+ GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP])
+ GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS])
+ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
+ GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS])
+ GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT])
+ GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME])
+ GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R])
+ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
+ GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
+ GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
+ GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
+ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+ GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
+ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
+ GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
+ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
+ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
+ GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
+ GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
+ GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX])
+ GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT])
+ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
+ GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
+ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
+ HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP])
+ HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS])
+ HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP])
+ HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS])
+ HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT])
+ HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME])
+ HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R])
+ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
+ HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
+ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
+ HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
+ HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
+ HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
+ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
+ REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC])
+ REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+ REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
+ REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
+ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
+ REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
+ REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC])
+ REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
+ REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
+ REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/configure b/configure
index f114ce1..e04f7ad 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for MPICH 3.2.
+# Generated by GNU Autoconf 2.69 for MPICH 3.3a2.
#
# Report bugs to <discuss at mpich.org>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='MPICH'
PACKAGE_TARNAME='mpich'
-PACKAGE_VERSION='3.2'
-PACKAGE_STRING='MPICH 3.2'
+PACKAGE_VERSION='3.3a2'
+PACKAGE_STRING='MPICH 3.3a2'
PACKAGE_BUGREPORT='discuss at mpich.org'
PACKAGE_URL='http://www.mpich.org/'
@@ -729,35 +729,96 @@ MPI_OFFSET
MPI_FINT
BUILD_PM_UTIL_FALSE
BUILD_PM_UTIL_TRUE
-AS
-PAPI_INCLUDE
-mmx_copy_s
-nemesis_nets_macro_defs
-nemesis_nets_array_sz
-nemesis_nets_array
-nemesis_nets_func_array
-nemesis_nets_func_decl
-nemesis_nets_strings
-nemesis_nets_dirs
-nemesis_networks
RSH
SSH
PRIMARY_PM_REMSHELL_FALSE
PRIMARY_PM_REMSHELL_TRUE
BUILD_PM_REMSHELL_FALSE
BUILD_PM_REMSHELL_TRUE
-BGQ_INSTALL_DIR
-ASSERT_LEVEL
-BUILD_PMI_SIMPLE_FALSE
-BUILD_PMI_SIMPLE_TRUE
-BUILD_PMI_PMI2_POE_FALSE
-BUILD_PMI_PMI2_POE_TRUE
-BUILD_PMI_PMI2_SIMPLE_FALSE
-BUILD_PMI_PMI2_SIMPLE_TRUE
+ofilib
+ofisrcdir
+REPLACE_WCTOMB
+REPLACE_UNSETENV
+REPLACE_STRTOD
+REPLACE_SETENV
+REPLACE_REALPATH
+REPLACE_REALLOC
+REPLACE_RANDOM_R
+REPLACE_QSORT_R
+REPLACE_PUTENV
+REPLACE_PTSNAME_R
+REPLACE_PTSNAME
+REPLACE_MKSTEMP
+REPLACE_MBTOWC
+REPLACE_MALLOC
+REPLACE_CANONICALIZE_FILE_NAME
+REPLACE_CALLOC
+HAVE_DECL_UNSETENV
+HAVE_UNLOCKPT
+HAVE_SYS_LOADAVG_H
+HAVE_STRUCT_RANDOM_DATA
+HAVE_STRTOULL
+HAVE_STRTOLL
+HAVE_STRTOD
+HAVE_DECL_SETENV
+HAVE_SETENV
+HAVE_SECURE_GETENV
+HAVE_RPMATCH
+HAVE_REALPATH
+HAVE_RANDOM_R
+HAVE_RANDOM_H
+HAVE_RANDOM
+HAVE_PTSNAME_R
+HAVE_PTSNAME
+HAVE_POSIX_OPENPT
+HAVE_MKSTEMPS
+HAVE_MKSTEMP
+HAVE_MKOSTEMPS
+HAVE_MKOSTEMP
+HAVE_MKDTEMP
+HAVE_GRANTPT
+HAVE_GETSUBOPT
+HAVE_DECL_GETLOADAVG
+HAVE_CANONICALIZE_FILE_NAME
+HAVE_ATOLL
+HAVE__EXIT
+GNULIB_WCTOMB
+GNULIB_UNSETENV
+GNULIB_UNLOCKPT
+GNULIB_SYSTEM_POSIX
+GNULIB_STRTOULL
+GNULIB_STRTOLL
+GNULIB_STRTOD
+GNULIB_SETENV
+GNULIB_SECURE_GETENV
+GNULIB_RPMATCH
+GNULIB_REALPATH
+GNULIB_REALLOC_POSIX
+GNULIB_RANDOM_R
+GNULIB_RANDOM
+GNULIB_QSORT_R
+GNULIB_PUTENV
+GNULIB_PTSNAME_R
+GNULIB_PTSNAME
+GNULIB_POSIX_OPENPT
+GNULIB_MKSTEMPS
+GNULIB_MKSTEMP
+GNULIB_MKOSTEMPS
+GNULIB_MKOSTEMP
+GNULIB_MKDTEMP
+GNULIB_MBTOWC
+GNULIB_MALLOC_POSIX
+GNULIB_GRANTPT
+GNULIB_GETSUBOPT
+GNULIB_GETLOADAVG
+GNULIB_CANONICALIZE_FILE_NAME
+GNULIB_CALLOC_POSIX
+GNULIB_ATOLL
+GNULIB__EXIT
+BUILD_CH4_SHM_FALSE
+BUILD_CH4_SHM_TRUE
BUILD_PMI_SLURM_FALSE
BUILD_PMI_SLURM_TRUE
-BUILD_PMI_PMI2_FALSE
-BUILD_PMI_PMI2_TRUE
PRIMARY_PM_GFORKER_FALSE
PRIMARY_PM_GFORKER_TRUE
BUILD_PM_GFORKER_FALSE
@@ -769,15 +830,29 @@ FC_ALL_INTEGER_MODELS
FC_INTEGER_MODEL
FC_DOUBLE_MODEL
FC_REAL_MODEL
+BUILD_PMI_PMI2_SIMPLE_FALSE
+BUILD_PMI_PMI2_SIMPLE_TRUE
+BUILD_PMI_SIMPLE_FALSE
+BUILD_PMI_SIMPLE_TRUE
+BUILD_PMI_PMI2_FALSE
+BUILD_PMI_PMI2_TRUE
+AS
+PAPI_INCLUDE
+mmx_copy_s
+nemesis_nets_macro_defs
+nemesis_nets_array_sz
+nemesis_nets_array
+nemesis_nets_func_array
+nemesis_nets_func_decl
+nemesis_nets_strings
+nemesis_nets_dirs
+nemesis_networks
BSEND_OVERHEAD
MPI_AINT_DATATYPE
-MPIU_PINT
MPI_AINT_FMT_HEX_SPEC
MPI_AINT_FMT_DEC_SPEC
MPI_AINT
LPMPILIBNAME
-MPICH_TIMER_KIND
-MPICH_TIMER_TYPE
ALLOCA
BUILD_COVERAGE_FALSE
BUILD_COVERAGE_TRUE
@@ -912,6 +987,7 @@ MPI_UNSIGNED_SHORT
MPI_SHORT
MPI_UNSIGNED_CHAR
MPI_CHAR
+VISIBILITY_CFLAGS
DOCTEXT
BUILD_NAMEPUB_PMI_FALSE
BUILD_NAMEPUB_PMI_TRUE
@@ -984,7 +1060,6 @@ pm_name
BUILD_ROMIO_FALSE
BUILD_ROMIO_TRUE
HAVE_ROMIO
-USE_DBG_LOGGING
opalib
opalibdir
opasrcdir
@@ -1000,47 +1075,81 @@ MPIFCLIBNAME
MPICXXLIBNAME
PMPILIBNAME
MPILIBNAME
-BUILD_MPID_COMMON_SOCK_POLL_FALSE
-BUILD_MPID_COMMON_SOCK_POLL_TRUE
+BUILD_NEMESIS_NETMOD_PORTALS4_FALSE
+BUILD_NEMESIS_NETMOD_PORTALS4_TRUE
+BUILD_CH4_NETMOD_UCX_FALSE
+BUILD_CH4_NETMOD_UCX_TRUE
+BUILD_MPID_COMMON_SCHED_FALSE
+BUILD_MPID_COMMON_SCHED_TRUE
+BUILD_CH4_NETMOD_STUBNM_FALSE
+BUILD_CH4_NETMOD_STUBNM_TRUE
+BUILD_CH4_NETMOD_PORTALS4_FALSE
+BUILD_CH4_NETMOD_PORTALS4_TRUE
+BUILD_MPID_COMMON_THREAD_FALSE
+BUILD_MPID_COMMON_THREAD_TRUE
+BUILD_MPID_COMMON_DATATYPE_FALSE
+BUILD_MPID_COMMON_DATATYPE_TRUE
+BUILD_MPID_COMMON_SHM_FALSE
+BUILD_MPID_COMMON_SHM_TRUE
+BUILD_SHM_POSIX_FALSE
+BUILD_SHM_POSIX_TRUE
+BUILD_SHM_STUBSHM_FALSE
+BUILD_SHM_STUBSHM_TRUE
+BUILD_CH4_NETMOD_OFI_FALSE
+BUILD_CH4_NETMOD_OFI_TRUE
+ch4_shm_comm_decl
+ch4_shm_request_decl
+ch4_shm_pre_include
+ch4_shm_strings
+ch4_shm_native_func_array
+ch4_shm_func_array
+ch4_shm_native_func_decl
+ch4_shm_func_decl
+ch4_shm_array_sz
+ch4_shm_array
+ch4_shm
+ch4_netmod_op_decl
+ch4_netmod_addr_decl
+ch4_netmod_win_decl
+ch4_netmod_dt_decl
+ch4_netmod_comm_decl
+ch4_netmod_request_decl
+ch4_netmod_amrequest_decl
+ch4_netmod_pre_include
+ch4_nets_strings
+ch4_nets_native_func_array
+ch4_nets_func_array
+ch4_nets_native_func_decl
+ch4_nets_func_decl
+ch4_nets_array_sz
+ch4_nets_array
+ch4_netmods
+BUILD_CH4_FALSE
+BUILD_CH4_TRUE
+BUILD_HCOLL_FALSE
+BUILD_HCOLL_TRUE
BUILD_NEMESIS_NETMOD_LLC_FALSE
BUILD_NEMESIS_NETMOD_LLC_TRUE
+BUILD_CH3_UTIL_SOCK_FALSE
+BUILD_CH3_UTIL_SOCK_TRUE
+BUILD_NEMESIS_NETMOD_MXM_FALSE
+BUILD_NEMESIS_NETMOD_MXM_TRUE
BUILD_NEMESIS_NETMOD_TCP_FALSE
BUILD_NEMESIS_NETMOD_TCP_TRUE
+BUILD_FC_BINDING_FALSE
+BUILD_FC_BINDING_TRUE
+BUILD_CH3_SOCK_FALSE
+BUILD_CH3_SOCK_TRUE
BUILD_NEMESIS_NETMOD_OFI_FALSE
BUILD_NEMESIS_NETMOD_OFI_TRUE
-BUILD_NEMESIS_NETMOD_PORTALS4_FALSE
-BUILD_NEMESIS_NETMOD_PORTALS4_TRUE
-BUILD_NEMESIS_NETMOD_MXM_FALSE
-BUILD_NEMESIS_NETMOD_MXM_TRUE
BUILD_CH3_NEMESIS_FALSE
BUILD_CH3_NEMESIS_TRUE
-BUILD_CH3_UTIL_SOCK_FALSE
-BUILD_CH3_UTIL_SOCK_TRUE
-BUILD_MPID_COMMON_DATATYPE_FALSE
-BUILD_MPID_COMMON_DATATYPE_TRUE
-BUILD_MPID_COMMON_THREAD_FALSE
-BUILD_MPID_COMMON_THREAD_TRUE
-BUILD_MPID_COMMON_SCHED_FALSE
-BUILD_MPID_COMMON_SCHED_TRUE
-BUILD_MPID_COMMON_SOCK_FALSE
-BUILD_MPID_COMMON_SOCK_TRUE
-BUILD_CH3_SOCK_FALSE
-BUILD_CH3_SOCK_TRUE
channel_name
device_name
BUILD_CH3_UTIL_FTB_FALSE
BUILD_CH3_UTIL_FTB_TRUE
BUILD_CH3_FALSE
BUILD_CH3_TRUE
-PAMILIBNAME
-QUEUE_BINARY_SEARCH_SUPPORT_FALSE
-QUEUE_BINARY_SEARCH_SUPPORT_TRUE
-BUILD_PAMID_FALSE
-BUILD_PAMID_TRUE
-BUILD_FC_BINDING_FALSE
-BUILD_FC_BINDING_TRUE
-BUILD_HCOLL_FALSE
-BUILD_HCOLL_TRUE
DEVICE
master_top_srcdir
master_top_builddir
@@ -1179,6 +1288,7 @@ USER_CPPFLAGS
USER_CFLAGS
CONFIGURE_ARGUMENTS
ABIVERSION
+MPICH_CUSTOM_STRING
MPICH_NUMVERSION
libmpi_so_version
MPICH_RELEASE_DATE
@@ -1203,6 +1313,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -1228,9 +1339,11 @@ fc_shlib_conf
cxx_shlib_conf'
ac_user_opts='
enable_option_checking
+with_custom_version_string
enable_echo
enable_error_checking
enable_error_messages
+enable_tag_error_bits
enable_timing
enable_g
enable_mpit_pvars
@@ -1253,7 +1366,6 @@ enable_threads
enable_thread_cs
enable_refcount
enable_mutex_timing
-enable_handle_allocation
enable_predefined_refcount
enable_weak_symbols
enable_two_level_namespace
@@ -1276,36 +1388,28 @@ with_sysroot
enable_libtool_lock
enable_cache
enable_strict
+enable_sock_debug
with_hcoll
with_hcoll_include
with_hcoll_lib
+enable_ch4_netmod_direct
+enable_ch4_shm
+enable_ch4_shm_direct
+with_ch4_netmod_ofi_args
+with_ch4_shmmod_posix_args
+with_ch4_netmod_ucx_args
with_mpl_prefix
with_openpa_prefix
with_atomic_primitives
enable_f77characterlen
+enable_visibility
enable_coverage
enable_alloca
-enable_timer_type
-with_thread_package
-enable_yield
enable_checkpointing
with_blcr
with_blcr_include
with_blcr_lib
enable_base_cache
-enable_allowport
-enable_pmiport
-with_slurm
-with_slurm_include
-with_slurm_lib
-with_assert_level
-with_pami
-with_pami_include
-with_pami_lib
-with_shared_memory
-with_bgq_install_dir
-enable_onsig
-enable_newsession
enable_ftb
with_ftb
with_ftb_include
@@ -1319,15 +1423,17 @@ with_knem
with_knem_include
with_nemesis_local_lmt
enable_nemesis_lock_free_queues
-with_mxm
-with_mxm_include
-with_mxm_lib
-with_portals4
-with_portals4_include
-with_portals4_lib
with_ofi
with_ofi_include
with_ofi_lib
+enable_pmiport
+enable_allowport
+with_slurm
+with_slurm_include
+with_slurm_lib
+with_mxm
+with_mxm_include
+with_mxm_lib
with_libmemcached
with_libmemcached_include
with_libmemcached_lib
@@ -1337,7 +1443,20 @@ with_ibverbs_lib
with_llc
with_llc_include
with_llc_lib
-enable_sock_debug
+with_ch4_rank_bits
+enable_ch4r_per_comm_msg_queue
+with_shared_memory
+with_libfabric
+with_libfabric_include
+with_libfabric_lib
+with_portals4
+with_portals4_include
+with_portals4_lib
+with_ucx
+with_ucx_include
+with_ucx_lib
+enable_onsig
+enable_newsession
'
ac_precious_vars='build_alias
host_alias
@@ -1362,7 +1481,6 @@ FC
FCFLAGS
F77
FFLAGS
-PAMILIBNAME
MPILIBNAME
PMPILIBNAME
MPICXXLIBNAME
@@ -1409,6 +1527,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1661,6 +1780,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1798,7 +1926,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1911,7 +2039,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures MPICH 3.2 to adapt to many kinds of systems.
+\`configure' configures MPICH 3.3a2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1951,6 +2079,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1981,7 +2110,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of MPICH 3.2:";;
+ short | recursive ) echo "Configuration of MPICH 3.3a2:";;
esac
cat <<\_ACEOF
@@ -2004,6 +2133,10 @@ Optional Features:
class - One message per MPI error class
none - No messages
+ --enable-tag-error-bits=yes|no - Control whether bits are taken from the user tag for error handling.
+ yes - Two bits are taken from the user tag to support error propagation.
+ no - No bits are taken from the user tag (this could cause deadlock if an error is detected during a collective).
+
--enable-timing=level - Control the amount of timing information
collected by the MPICH implementation.
none - Collect no data (default)
@@ -2020,7 +2153,6 @@ Optional Features:
compiler flags, i.e. MPICHLIB_CFLAGS, MPICHLIB_CXXFLAGS,
MPICHLIB_FFLAGS, and MPICHLIB_FCFLAGS.
debug - Synonym for dbg
- log - Enable debug event logging
mem - Memory usage tracing
meminit - Preinitialize memory associated structures and unions to
eliminate access warnings from programs like valgrind
@@ -2051,7 +2183,7 @@ Optional Features:
all|yes - "O2" and "ndebug" are enabled
none - None of above options, i.e. --disable-fast
- --interlib-deps - Enable interlibrary dependencies
+ --enable-interlib-deps - Enable interlibrary dependencies
--enable-check-compiler-flags
enable the checks for all compiler options,
@@ -2093,11 +2225,6 @@ Optional Features:
none is required), for per-object and lock-free,
lock-free
--enable-mutex-timing calculate the time spent waiting on mutexes
- --enable-handle-allocation=type
- Choose the method used for allocating MPI object
- handles. Values may be 'tls' for thread-local
- storage or 'mutex' for simple locking. 'mutex' is
- the default.
--enable-predefined-refcount
control whether predefined objects like
MPI_COMM_WORLD are reference counted (default
@@ -2142,6 +2269,28 @@ Optional Features:
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-cache Turn on configure caching
--enable-strict Turn on strict compilation testing
+--enable-sock-debug - Turn on tests of the socket data structures
+--enable-ch4-netmod-direct
+ Enables inlined netmod build when a single netmod is used
+ level:
+ yes - Enabled (default)
+ no - Disabled (may improve build times and code size)
+
+--enable-ch4-shm=level:module
+ Control whether CH4 shared memory is built and/or used.
+ level:
+ no - Do not build or use CH4 shared memory.
+ yes - Build CH4 shared memory, but do not use it by default (Your chosen netmod must provide it).
+ exclusive - Build and exclusively use CH4 shared memory. (Default)
+ module-list(optional). comma separated list of shared memory modules:
+ posix - POSIX shared memory implementation
+
+--enable-ch4-shm-direct
+ Enables inlined shared memory build when a single shared memory module is used
+ level:
+ yes - Enabled (default)
+ no - Disabled (may improve build times and code size)
+
--enable-f77characterlen
Select between int and size_t for the length of a
Fortran CHARACTER, depending on the F77 compiler. If
@@ -2151,40 +2300,14 @@ Optional Features:
provided for experts. Note that the documentation
provided by compiler vendors on the calling
convention may not be accurate.
+ --enable-visibility enable visibility feature of certain
+ compilers/linkers (default: enabled on platforms
+ that support it)
--enable-coverage Turn on coverage analysis using gcc and gcov
--enable-alloca Use alloca to allocate temporary memory if available
- --enable-timer-type=name - Select the timer to use for MPI_Wtime and
- internal timestamps.
- gethrtime - Solaris timer (Solaris systems only)
- clock_gettime - Posix timer (where available)
- gettimeofday - Most Unix systems
- linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
- gcc_ia64_cycle - IPF ar.itc timer*
- mach_absolute_time - Mach absolute time (alternative to clock_gettime
- for OSX)
- device - The timer is provided by the device
-
- *Note that the cycle timers are intended to be used by MPICH
- developers for internal low-level timing. Normal users should
- not use these as they are not guaranteed to be accurate in
- certain situations.
-
- linuxalpha_cycle is no longer supported.
-
- --enable-yield choose a method to yield the processor in busy
- loops. Available methods are: sched_yield, yield,
- select, usleep, sleep, nothing
--enable-checkpointing Enable application checkpointing
--enable-base-cache Enable the use of a simple cache for the subsidiary
configure scripts
- --enable-allowport Turn on use of a port for communicating with the
- processes started by mpiexec
---enable-pmiport - Allow PMI interface to use a host-port pair to contact
- for PMI services
- --enable-onsig Control the handling of processes that signal (e.g.,
- SEGV) using ptrace. Disabled by default
- --enable-newsession Create a new process group session if standard in is
- not connected to a terminal
--enable-ftb Enable FTB support (default is no)
--enable-fast - pick the appropriate options for fast execution.
This turns off error checking and timing collection
@@ -2192,7 +2315,19 @@ This turns off error checking and timing collection
--enable-nemesis-dbg-localoddeven - enables debugging mode where shared-memory communication is enabled only between even processes or odd processes on a node
--enable-nemesis-shm-collectives - enables use of shared memory for collective comunication within a node
--enable-nemesis-lock-free-queues - Use atomic instructions and lock-free queues for shared memory communication. Lock-based queues will be used otherwise. The default is enabled (lock-free).
---enable-sock-debug - Turn on tests of the socket data structures
+--enable-pmiport - Allow PMI interface to use a host-port pair to contact
+ for PMI services
+ --enable-allowport Turn on use of a port for communicating with the
+ processes started by mpiexec
+--enable-ch4r-per-comm-msg-queue=option
+ Enable use of per-communicator message queues for posted recvs/unexpected messages
+ yes - Use per-communicator message queue. (Default)
+ no - Use global queue for posted recvs/unexpected messages.
+
+ --enable-onsig Control the handling of processes that signal (e.g.,
+ SEGV) using ptrace. Disabled by default
+ --enable-newsession Create a new process group session if standard in is
+ not connected to a terminal
--enable-onsig Control the handling of processes that signal (e.g.,
SEGV) using ptrace. Disabled by default
--enable-newsession Create a new process group session if standard in is
@@ -2201,6 +2336,9 @@ This turns off error checking and timing collection
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-custom-version-string
+ Adds a user-specified value to the output of the
+ mpichversion executable
--with-aint-size Override the size of MPI_AINT (in bytes)
--with-device=name Specify the communication device for MPICH
--with-pmi=name Specify the pmi interface for MPICH
@@ -2237,10 +2375,28 @@ Optional Packages:
specify path where hcoll include directory can be
found
--with-hcoll-lib=PATH specify path where hcoll lib directory can be found
+ --with-ch4-netmod-ofi-args=arg1:arg2:arg3
+ CH4 OFI netmod arguments:
+ scalable-endpoints - Use OFI scalable endpoint mode
+ av-table - Use OFI AV table (logical addressing mode). Default is av-map mode
+ mr-basic - USE OFI MR_BASIC mode. Default is MR_SCALABLE mode.
+ direct-provider - USE OFI FI_DIRECT to compile in a single OFI direct provider
+ no-tagged - Do not use OFI fi_tagged interfaces.
+ no-data - Disable immediate data field
+ no-stx-rma - Disable per-window EP & counter for RMA
+
+ --with-ch4-shmmod-posix-args=arg1:arg2:arg3
+ CH4 POSIX shmmod arguments:
+ disable-lock-free-queues - Disable atomics and lock-free queues
+
+ --with-ch4-netmod-ucx-args=arg1:arg2:arg3
+ CH4 OFI netmod arguments:
+ am-only - Do not use UCX tagged or RMA communication.
+
--with-mpl-prefix[=DIR] use the MPL library installed in DIR, rather than
the one included in src/mpl. Pass "embedded" to
force usage of the MPL source distributed with
- MPICH2.
+ MPICH.
--with-openpa-prefix[=DIR]
use the OpenPA atomics library installed in DIR,
rather than the one included in src/openpa. Pass
@@ -2250,39 +2406,12 @@ Optional Packages:
Force OPA to use a specific atomic primitives
implementation. See the src/openpa directory for
more info.
- --with-thread-package=package Thread package to use. Supported thread packages include:
- posix or pthreads - POSIX threads (default, if required)
- solaris - Solaris threads (Solaris OS only)
- win - windows threads
- none - no threads
-
--with-blcr=PATH specify path where blcr include directory and lib
directory can be found
--with-blcr-include=PATH
specify path where blcr include directory can be
found
--with-blcr-lib=PATH specify path where blcr lib directory can be found
- --with-slurm=PATH specify path where slurm include directory and lib
- directory can be found
- --with-slurm-include=PATH
- specify path where slurm include directory can be
- found
- --with-slurm-lib=PATH specify path where slurm lib directory can be found
- --with-assert-level={0 1 2}
- pamid build assert-level (default: 2)
- --with-pami=PATH specify path where pami include directory and lib
- directory can be found
- --with-pami-include=PATH
- specify path where pami include directory can be
- found
- --with-pami-lib=PATH specify path where pami lib directory can be found
- --with-shared-memory=auto|sysv|mmap
- create shared memory using sysv or mmap (default is
- auto)
- --with-bgq-install-dir=PATH
- specify path where bgq system software can be found;
- may also be specified with the 'BGQ_INSTALL_DIR'
- environment variable
--with-ftb=PATH specify path where ftb include directory and lib
directory can be found
--with-ftb-include=PATH specify path where ftb include directory can be
@@ -2293,24 +2422,22 @@ Optional Packages:
--with-knem=path - specify path where knem include directory can be found
--with-knem-include=path - specify path to knem include directory
--with-nemesis-local-lmt=method - specify an implementation for local large message transfers (LMT). Method is one of: 'default', 'shm_copy', 'knem', or 'none'. 'default' is the same as 'shm_copy'.
- --with-mxm=PATH specify path where mxm include directory and lib
- directory can be found
- --with-mxm-include=PATH specify path where mxm include directory can be
- found
- --with-mxm-lib=PATH specify path where mxm lib directory can be found
- --with-portals4=PATH specify path where portals4 include directory and
- lib directory can be found
- --with-portals4-include=PATH
- specify path where portals4 include directory can be
- found
- --with-portals4-lib=PATH
- specify path where portals4 lib directory can be
- found
--with-ofi=PATH specify path where ofi include directory and lib
directory can be found
--with-ofi-include=PATH specify path where ofi include directory can be
found
--with-ofi-lib=PATH specify path where ofi lib directory can be found
+ --with-slurm=PATH specify path where slurm include directory and lib
+ directory can be found
+ --with-slurm-include=PATH
+ specify path where slurm include directory can be
+ found
+ --with-slurm-lib=PATH specify path where slurm lib directory can be found
+ --with-mxm=PATH specify path where mxm include directory and lib
+ directory can be found
+ --with-mxm-include=PATH specify path where mxm include directory can be
+ found
+ --with-mxm-lib=PATH specify path where mxm lib directory can be found
--with-libmemcached=PATH
specify path where libmemcached include directory
and lib directory can be found
@@ -2332,6 +2459,31 @@ Optional Packages:
--with-llc-include=PATH specify path where llc include directory can be
found
--with-llc-lib=PATH specify path where llc lib directory can be found
+--with-ch4-rank-bits=16/32 Number of bits allocated to the rank field (16 or 32)
+ --with-shared-memory=auto|sysv|mmap
+ create shared memory using sysv or mmap (default is
+ auto)
+ --with-libfabric=PATH specify path where libfabric include directory and
+ lib directory can be found
+ --with-libfabric-include=PATH
+ specify path where libfabric include directory can
+ be found
+ --with-libfabric-lib=PATH
+ specify path where libfabric lib directory can be
+ found
+ --with-portals4=PATH specify path where portals4 include directory and
+ lib directory can be found
+ --with-portals4-include=PATH
+ specify path where portals4 include directory can be
+ found
+ --with-portals4-lib=PATH
+ specify path where portals4 lib directory can be
+ found
+ --with-ucx=PATH specify path where ucx include directory and lib
+ directory can be found
+ --with-ucx-include=PATH specify path where ucx include directory can be
+ found
+ --with-ucx-lib=PATH specify path where ucx lib directory can be found
Some influential environment variables:
MPICHLIB_CFLAGS
@@ -2361,8 +2513,6 @@ Some influential environment variables:
FCFLAGS Fortran compiler flags
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
- PAMILIBNAME can be used to override the name of the PAMI library (default:
- "pami")
MPILIBNAME can be used to override the name of the MPI library (default:
"mpi")
PMPILIBNAME can be used to override the name of the MPI profiling library
@@ -2447,7 +2597,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-MPICH configure 3.2
+MPICH configure 3.3a2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3918,7 +4068,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by MPICH $as_me 3.2, which was
+It was created by MPICH $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4377,11 +4527,11 @@ CONFIGURE_ARGS_CLEAN=`echo $* | tr '"' ' '`
# these values come from the m4_include above
-MPICH_VERSION=3.2
+MPICH_VERSION=3.3a2
-MPICH_RELEASE_DATE="Wed Nov 11 22:06:48 CST 2015"
+MPICH_RELEASE_DATE="Sun Nov 13 09:12:11 MST 2016"
-libmpi_so_version="13:0:1"
+libmpi_so_version="0:0:0"
@@ -4434,6 +4584,17 @@ if test "$V5" -le 9 ; then V5=0$V5 ; fi
MPICH_NUMVERSION=`expr $V1$V2$V3$V4$V5 + 0`
+
+# Check whether --with-custom-version-string was given.
+if test "${with_custom_version_string+set}" = set; then :
+ withval=$with_custom_version_string;
+else
+ with_custom_version_string=""
+fi
+
+MPICH_CUSTOM_STRING=$with_custom_version_string
+
+
# ABIVERSION is the name used by simplemake, so we reassign the
# libmpi_so_version number to it
ABIVERSION=${libmpi_so_version}
@@ -4654,165 +4815,182 @@ FCFLAGS="$FCFLAGS $MPICHLIB_FCFLAGS"
# begin subsys includes
-# start of src/mpid/common/hcoll/subconfigure.m4
+# start of src/mpid/ch3/subconfigure.m4
+# expansion is: PAC_SUBCFG_PREREQ_src_mpid_ch3
+# end of src/mpid/ch3/subconfigure.m4
-# end of src/mpid/common/hcoll/subconfigure.m4
+# start of src/mpid/ch3/channels/nemesis/subconfigure.m4
+# end of src/mpid/ch3/channels/nemesis/subconfigure.m4
-# start of src/binding/fortran/use_mpi/subconfigure.m4
+# start of src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4
+# end of src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4
-# end of src/binding/fortran/use_mpi/subconfigure.m4
+# start of src/mpid/ch3/channels/sock/subconfigure.m4
-# start of src/pm/subconfigure.m4
+# end of src/mpid/ch3/channels/sock/subconfigure.m4
+# start of src/pmi/subconfigure.m4
-# end of src/pm/subconfigure.m4
-# start of src/pm/gforker/subconfigure.m4
+# end of src/pmi/subconfigure.m4
+# start of src/pmi/pmi2/subconfigure.m4
-# end of src/pm/gforker/subconfigure.m4
-# start of src/pmi/subconfigure.m4
+# end of src/pmi/pmi2/subconfigure.m4
+# start of src/pmi/simple/subconfigure.m4
-# end of src/pmi/subconfigure.m4
-# start of src/pmi/pmi2/subconfigure.m4
+# end of src/pmi/simple/subconfigure.m4
+
+# start of src/pmi/pmi2/simple/subconfigure.m4
-# end of src/pmi/pmi2/subconfigure.m4
-# start of src/pmi/slurm/subconfigure.m4
+# end of src/pmi/pmi2/simple/subconfigure.m4
+# start of src/binding/fortran/use_mpi/subconfigure.m4
-# end of src/pmi/slurm/subconfigure.m4
-# start of src/pmi/pmi2/simple/subconfigure.m4
+# end of src/binding/fortran/use_mpi/subconfigure.m4
+# start of src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4
-# end of src/pmi/pmi2/simple/subconfigure.m4
-# start of src/pmi/pmi2/poe/subconfigure.m4
+# end of src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4
+# start of src/pm/subconfigure.m4
-# end of src/pmi/pmi2/poe/subconfigure.m4
-# start of src/pmi/simple/subconfigure.m4
+# end of src/pm/subconfigure.m4
+# start of src/pm/gforker/subconfigure.m4
-# end of src/pmi/simple/subconfigure.m4
+# end of src/pm/gforker/subconfigure.m4
-# start of src/mpid/pamid/subconfigure.m4
+# start of src/pmi/slurm/subconfigure.m4
-# expansion is: PAC_SUBCFG_PREREQ_src_mpid_pamid
-# end of src/mpid/pamid/subconfigure.m4
-# start of src/pm/remshell/subconfigure.m4
+# end of src/pmi/slurm/subconfigure.m4
+# start of src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4
-# end of src/pm/remshell/subconfigure.m4
+# end of src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4
-# start of src/mpid/ch3/subconfigure.m4
+# start of src/mpid/ch3/util/sock/subconfigure.m4
-# expansion is: PAC_SUBCFG_PREREQ_src_mpid_ch3
-# end of src/mpid/ch3/subconfigure.m4
-# start of src/mpid/ch3/channels/sock/subconfigure.m4
+# end of src/mpid/ch3/util/sock/subconfigure.m4
-# end of src/mpid/ch3/channels/sock/subconfigure.m4
+# start of src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4
-# start of src/mpid/common/sock/subconfigure.m4
+# end of src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4
+# start of src/mpid/common/hcoll/subconfigure.m4
-# end of src/mpid/common/sock/subconfigure.m4
-# start of src/mpid/common/sched/subconfigure.m4
+# end of src/mpid/common/hcoll/subconfigure.m4
+# start of src/mpid/ch4/subconfigure.m4
-# end of src/mpid/common/sched/subconfigure.m4
+# expansion is: PAC_SUBCFG_PREREQ_src_mpid_ch4
-# start of src/mpid/common/thread/subconfigure.m4
+# end of src/mpid/ch4/subconfigure.m4
+# start of src/mpid/ch4/netmod/ofi/subconfigure.m4
-# end of src/mpid/common/thread/subconfigure.m4
-# start of src/mpid/common/datatype/subconfigure.m4
+# end of src/mpid/ch4/netmod/ofi/subconfigure.m4
+# start of src/mpid/ch4/shm/stubshm/subconfigure.m4
-# end of src/mpid/common/datatype/subconfigure.m4
-# start of src/mpid/ch3/util/sock/subconfigure.m4
+# end of src/mpid/ch4/shm/stubshm/subconfigure.m4
+# start of src/mpid/ch4/shm/posix/subconfigure.m4
-# end of src/mpid/ch3/util/sock/subconfigure.m4
+# end of src/mpid/ch4/shm/posix/subconfigure.m4
-# start of src/mpid/ch3/channels/nemesis/subconfigure.m4
-# end of src/mpid/ch3/channels/nemesis/subconfigure.m4
+# start of src/mpid/common/shm/subconfigure.m4
-# start of src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4
-# end of src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4
+# end of src/mpid/common/shm/subconfigure.m4
-# start of src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4
+# start of src/mpid/common/datatype/subconfigure.m4
-# end of src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4
-# start of src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4
+# end of src/mpid/common/datatype/subconfigure.m4
+
+# start of src/mpid/common/thread/subconfigure.m4
-# end of src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4
+# end of src/mpid/common/thread/subconfigure.m4
-# start of src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4
+# start of src/mpid/ch4/netmod/portals4/subconfigure.m4
-# end of src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4
+# end of src/mpid/ch4/netmod/portals4/subconfigure.m4
-# start of src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4
+# start of src/mpid/ch4/netmod/stubnm/subconfigure.m4
-# end of src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4
-# start of src/mpid/common/sock/poll/subconfigure.m4
+# end of src/mpid/ch4/netmod/stubnm/subconfigure.m4
+# start of src/mpid/common/sched/subconfigure.m4
-# end of src/mpid/common/sock/poll/subconfigure.m4
+
+# end of src/mpid/common/sched/subconfigure.m4
+
+# start of src/mpid/ch4/netmod/ucx/subconfigure.m4
+
+
+
+# end of src/mpid/ch4/netmod/ucx/subconfigure.m4
+
+# start of src/pm/remshell/subconfigure.m4
+
+
+
+# end of src/pm/remshell/subconfigure.m4
# start of src/pm/util/subconfigure.m4
@@ -4820,6 +4998,12 @@ FCFLAGS="$FCFLAGS $MPICHLIB_FCFLAGS"
# end of src/pm/util/subconfigure.m4
+# start of src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4
+
+
+
+# end of src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4
+
@@ -4848,6 +5032,14 @@ else
fi
+# Check whether --enable-tag-error-bits was given.
+if test "${enable_tag_error_bits+set}" = set; then :
+ enableval=$enable_tag_error_bits;
+else
+ enable_tag_error_bits=yes
+fi
+
+
# Check whether --enable-timing was given.
if test "${enable_timing+set}" = set; then :
enableval=$enable_timing;
@@ -5041,14 +5233,6 @@ $as_echo "#define MPIU_MUTEX_WAIT_TIME 1" >>confdefs.h
fi
-# Check whether --enable-handle-allocation was given.
-if test "${enable_handle_allocation+set}" = set; then :
- enableval=$enable_handle_allocation;
-else
- enable_handle_allocation=default
-fi
-
-
# Check whether --enable-predefined-refcount was given.
if test "${enable_predefined_refcount+set}" = set; then :
enableval=$enable_predefined_refcount;
@@ -5106,11 +5290,6 @@ else
with_cross=$MPID_DEFAULT_CROSS_FILE
fi
-if test -z "$with_cross" ; then with_cross=no ; fi
-if test "$with_cross" != "no"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using cross file: $with_cross" >&5
-$as_echo "$as_me: Using cross file: $with_cross" >&6;}
-fi
# Check whether --with-namepublisher was given.
@@ -6510,7 +6689,7 @@ fi
# Define the identity of the package.
PACKAGE='mpich'
- VERSION='3.2'
+ VERSION='3.3a2'
cat >>confdefs.h <<_ACEOF
@@ -8237,7 +8416,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
@@ -11792,6 +11971,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
esac
ld_shlibs=yes
@@ -12046,7 +12228,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -12719,6 +12901,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -12740,7 +12923,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -13855,6 +14038,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -17243,7 +17438,7 @@ lt_prog_compiler_static_CXX=
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -17618,6 +17813,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs_CXX=no
+ ;;
*)
export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -18311,6 +18509,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -19790,6 +20000,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs_FC=no
+ ;;
esac
ld_shlibs_FC=yes
@@ -20044,7 +20257,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -20667,6 +20880,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs_FC=no
else
archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -20688,7 +20902,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -21625,6 +21839,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -23002,6 +23228,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs_F77=no
+ ;;
esac
ld_shlibs_F77=yes
@@ -23256,7 +23485,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -23879,6 +24108,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs_F77=no
else
archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -23900,7 +24130,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -24837,6 +25067,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -25248,7 +25490,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -25354,40 +25596,6 @@ $as_echo "$as_me: WARNING: Unrecognized value for enable-strict:$flag" >&2;}
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=199506L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=199506L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=199506L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=199506L"
-
-fi
- ;;
- 2001)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200112L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200112L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200112L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200112L"
-
-fi
- ;;
- 2008)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200809L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200809L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200809L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200809L"
-
-fi
- ;;
- *) as_fn_error $? "internal error, unexpected POSIX version: '$enable_posix'" "$LINENO" 5 ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -25436,6 +25644,43 @@ else
fi
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=199506L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=199506L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=199506L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=199506L"
+
+fi
+ ;;
+ 2001)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200112L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200112L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200112L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200112L"
+
+fi
+ ;;
+ 2008)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200809L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200809L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200809L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200809L"
+
+fi
+ ;;
+ *) as_fn_error $? "internal error, unexpected POSIX version: '$enable_posix'" "$LINENO" 5 ;;
+ esac
fi
# See if the above options work with the compiler
@@ -26079,6 +26324,18 @@ fi
export master_top_builddir
export master_top_srcdir
+if test -z "$with_cross"; then
+ if test -f "$master_top_srcdir/src/cross/$host_alias"; then
+ with_cross="$master_top_srcdir/src/cross/$host_alias"
+ else
+ with_cross=no
+ fi
+fi
+if test "$with_cross" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using cross file: $with_cross" >&5
+$as_echo "$as_me: Using cross file: $with_cross" >&6;}
+fi
+
# ----------------------------------------------------------------------------
export AR
export AR_FLAGS
@@ -26141,343 +26398,6 @@ fi
# expand all of the prereq macros in the correct order
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_hcoll
-
-
-
-# Check whether --with-hcoll was given.
-if test "${with_hcoll+set}" = set; then :
- withval=$with_hcoll; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-hcoll=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-hcoll=PATH expects a valid PATH" >&2;}
- with_hcoll="" ;; #(
- *) :
- ;;
-esac
-else
- with_hcoll=
-fi
-
-
-# Check whether --with-hcoll-include was given.
-if test "${with_hcoll_include+set}" = set; then :
- withval=$with_hcoll_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-hcoll-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-hcoll-include=PATH expects a valid PATH" >&2;}
- with_hcoll_include="" ;; #(
- *) :
- ;;
-esac
-fi
-
-
-# Check whether --with-hcoll-lib was given.
-if test "${with_hcoll_lib+set}" = set; then :
- withval=$with_hcoll_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-hcoll-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-hcoll-lib=PATH expects a valid PATH" >&2;}
- with_hcoll_lib="" ;; #(
- *) :
- ;;
-esac
-fi
-
-
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
-
- if test -n "${with_hcoll_include}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_hcoll_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_hcoll_include}', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_hcoll_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_hcoll_include}"
-
-fi
-
-else
- if test -n "${with_hcoll}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_hcoll}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_hcoll}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_hcoll}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_hcoll}/include"
-
-fi
-
-fi
-fi
-
- if test -n "${with_hcoll_lib}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_hcoll_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_hcoll_lib}', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_hcoll_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_hcoll_lib}"
-
-fi
-
-else
- if test -n "${with_hcoll}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_hcoll}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_hcoll}/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_hcoll}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_hcoll}/lib"
-
-fi
-
- if test -d "${with_hcoll}/lib64}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_hcoll}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_hcoll}/lib64', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_hcoll}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_hcoll}/lib64"
-
-fi
-
-fi
-
-fi
-
-fi
-
-
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-
-
- failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "hcoll/api/hcoll_api.h" "ac_cv_header_hcoll_api_hcoll_api_h" "$ac_includes_default"
-if test "x$ac_cv_header_hcoll_api_hcoll_api_h" = xyes; then :
-
-else
- failure=yes
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hcoll_init in -lhcoll" >&5
-$as_echo_n "checking for hcoll_init in -lhcoll... " >&6; }
-if ${ac_cv_lib_hcoll_hcoll_init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lhcoll $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char hcoll_init ();
-int
-main ()
-{
-return hcoll_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_hcoll_hcoll_init=yes
-else
- ac_cv_lib_hcoll_hcoll_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hcoll_hcoll_init" >&5
-$as_echo "$ac_cv_lib_hcoll_hcoll_init" >&6; }
-if test "x$ac_cv_lib_hcoll_hcoll_init" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBHCOLL 1
-_ACEOF
-
- LIBS="-lhcoll $LIBS"
-
-else
- failure=yes
-fi
-
- if test "$failure" = "no" ; then
- have_hcoll=yes
- else
- have_hcoll=no
- fi
-
- if test "$have_hcoll" = "yes" ; then
-
-
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lhcoll\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lhcoll', not appending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lhcoll', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lhcoll"
-
-fi
-
- fi
-
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-
- if test "$have_hcoll" = "yes"; then
- BUILD_HCOLL_TRUE=
- BUILD_HCOLL_FALSE='#'
-else
- BUILD_HCOLL_TRUE='#'
- BUILD_HCOLL_FALSE=
-fi
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_hcoll
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_binding_fortran_use_mpi
-
- if test "X$enable_fc" = "Xyes"; then
- BUILD_FC_BINDING_TRUE=
- BUILD_FC_BINDING_FALSE='#'
-else
- BUILD_FC_BINDING_TRUE='#'
- BUILD_FC_BINDING_FALSE=
-fi
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_binding_fortran_use_mpi
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pm
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pm
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pm_gforker
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pm_gforker
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pmi
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pmi
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_slurm
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pmi_slurm
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2_simple
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2_simple
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2_poe
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2_poe
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_simple
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pmi_simple
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_pamid
-
- if test "$device_name" = "pamid"; then
- BUILD_PAMID_TRUE=
- BUILD_PAMID_FALSE='#'
-else
- BUILD_PAMID_TRUE='#'
- BUILD_PAMID_FALSE=
-fi
-
- if test "$enable_queue_binary_search" = "yes"; then
- QUEUE_BINARY_SEARCH_SUPPORT_TRUE=
- QUEUE_BINARY_SEARCH_SUPPORT_FALSE='#'
-else
- QUEUE_BINARY_SEARCH_SUPPORT_TRUE='#'
- QUEUE_BINARY_SEARCH_SUPPORT_FALSE=
-fi
-
-
-
-original_PAMILIBNAME=${PAMILIBNAME}
-PAMILIBNAME=${PAMILIBNAME:-"pami"}
-
-export PAMILIBNAME
-
-
-if test -z "$BUILD_PAMID_TRUE"; then :
-
-
-pamid_platform=${device_args}
-if test x"$pamid_platform" == "x"; then
- case $host in #(
- *-bgq-*) :
- pamid_platform=BGQ ;; #(
- *) :
- ;;
-esac
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: Using the pamid platform '$pamid_platform'" >&5
-$as_echo "$as_me: Using the pamid platform '$pamid_platform'" >&6;}
-
-
-MPID_MAX_PROCESSOR_NAME=128
-PM_REQUIRES_PMI=pmi2
-if test "${pamid_platform}" = "PE" ; then
- with_shared_memory=sysv
- PM_REQUIRES_PMI=pmi2/poe
-elif test "${pamid_platform}" = "BGQ" ; then
- with_shared_memory=mmap
- MPID_DEFAULT_CROSS_FILE=${master_top_srcdir}/src/mpid/pamid/cross/bgq8
- MPID_DEFAULT_PM=no
-fi
-
-MPID_DEVICE_TIMER_TYPE=double
-MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
-
-build_mpid_common_sched=yes
-build_mpid_common_datatype=yes
-build_mpid_common_thread=yes
-
-
-
-fi
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_pamid
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_pm_remshell
-
-
-## end expansion of PAC_SUBCFG_PREREQ_src_pm_remshell
-
## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3
if test "$device_name" = "ch3"; then
@@ -26551,6 +26471,70 @@ build_mpid_common_thread=yes
fi
## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis
+
+ if test "X$device_name" = "Xch3" -a "X$channel_name" = "Xnemesis"; then
+ BUILD_CH3_NEMESIS_TRUE=
+ BUILD_CH3_NEMESIS_FALSE='#'
+else
+ BUILD_CH3_NEMESIS_TRUE='#'
+ BUILD_CH3_NEMESIS_FALSE=
+fi
+
+if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING PREREQ FOR ch3:nemesis" >&5
+$as_echo "$as_me: RUNNING PREREQ FOR ch3:nemesis" >&6;}
+MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
+
+## code that formerly lived in setup_channel.args
+# Variables of interest...
+#
+# $with_device - device name and arguments
+# $device_name - name of the device
+# $device_args - contains name of channel select plus an channel args
+# $channel_name - name of the channel
+# $master_top_srcdir - top-level source directory
+# $master_top_builddir - top-level build directory
+# $ac_configure_args - all arguments passed to configure
+if test -z "${channel_args}" ; then
+ nemesis_networks="tcp"
+else
+ nemesis_networks=`echo ${channel_args} | sed -e 's/,/ /g'`
+fi
+export nemesis_networks
+
+# the nemesis channel depends on the common shm code
+build_mpid_common_shm=yes
+
+fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_ofi
+
+ if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+
+ for net in $nemesis_networks ; do
+ case $net in #(
+ ofi) :
+ build_nemesis_netmod_ofi=yes ;; #(
+ *) :
+ ;;
+esac
+ done
+
+fi
+ if test "X$build_nemesis_netmod_ofi" = "Xyes"; then
+ BUILD_NEMESIS_NETMOD_OFI_TRUE=
+ BUILD_NEMESIS_NETMOD_OFI_FALSE='#'
+else
+ BUILD_NEMESIS_NETMOD_OFI_TRUE='#'
+ BUILD_NEMESIS_NETMOD_OFI_FALSE=
+fi
+
+
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_ofi
+
## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_sock
if test "X$device_name" = "Xch3" -a "X$channel_name" = "Xsock"; then
@@ -26566,7 +26550,6 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING PREREQ FOR ch3:sock" >&5
$as_echo "$as_me: RUNNING PREREQ FOR ch3:sock" >&6;}
# this channel depends on the sock utilities
- build_mpid_common_sock=yes
build_ch3u_sock=yes
MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
@@ -26614,3533 +26597,3759 @@ $as_echo "$as_me: RUNNING PREREQ FOR ch3:sock" >&6;}
## CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/${path} -I${master_top_srcdir}/${path}"
##done
-fi
+# Adding this prevents the pesky "(strerror() not found)" problem, which can be
+# very frustrating in the sock code, the most likely to receive an error code
+# from the system. [goodell@ 2008-01-10]
+for ac_func in strerror
+do :
+ ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRERROR 1
+_ACEOF
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_sock
+fi
+done
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sock
- if test "X$build_mpid_common_sock" = "Xyes"; then
- BUILD_MPID_COMMON_SOCK_TRUE=
- BUILD_MPID_COMMON_SOCK_FALSE='#'
+# Check whether --enable-sock-debug was given.
+if test "${enable_sock_debug+set}" = set; then :
+ enableval=$enable_sock_debug;
else
- BUILD_MPID_COMMON_SOCK_TRUE='#'
- BUILD_MPID_COMMON_SOCK_FALSE=
+ enable_sock_debug=no
fi
- if test -z "$BUILD_MPID_COMMON_SOCK_TRUE"; then :
- # we unconditionally enable the "poll" implementation because we don't
- # use this build system on windows right now
- build_mpid_common_sock_poll=yes
-
-fi
+if test "$enable_sock_debug" = yes ; then
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sock
+$as_echo "#define USE_SOCK_VERIFY 1" >>confdefs.h
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sched
+fi
- if test "X$build_mpid_common_sched" = "Xyes"; then
- BUILD_MPID_COMMON_SCHED_TRUE=
- BUILD_MPID_COMMON_SCHED_FALSE='#'
+ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll"
+if test "x$ac_cv_func_poll" = xyes; then :
+ pac_cv_have_func_poll=yes
else
- BUILD_MPID_COMMON_SCHED_TRUE='#'
- BUILD_MPID_COMMON_SCHED_FALSE=
+ pac_cv_have_func_poll=no
+fi
+
+if test "X$pac_cv_have_func_poll" = "Xno" ; then
+ if test -f /sw/include/sys/poll.h ; then
+ CFLAGS="$CFLAGS -I/sw/include"
+ LIBS="$LIBS -L/sw/lib -lpoll"
+ else
+ as_fn_error $? "This device requires the poll function" "$LINENO" 5
+ fi
fi
+for ac_header in assert.h errno.h fcntl.h limits.h netdb.h netinet/in.h netinet/tcp.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sched
+fi
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_thread
+done
+
+for ac_header in poll.h stdlib.h sys/param.h sys/poll.h sys/types.h sys/uio.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
- if test "X$build_mpid_common_thread" = "Xyes"; then
- BUILD_MPID_COMMON_THREAD_TRUE=
- BUILD_MPID_COMMON_THREAD_FALSE='#'
-else
- BUILD_MPID_COMMON_THREAD_TRUE='#'
- BUILD_MPID_COMMON_THREAD_FALSE=
fi
+done
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_thread
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_datatype
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if struct poll is defined" >&5
+$as_echo_n "checking if struct poll is defined... " >&6; };
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- if test "X$build_mpid_common_datatype" = "Xyes"; then
- BUILD_MPID_COMMON_DATATYPE_TRUE=
- BUILD_MPID_COMMON_DATATYPE_FALSE='#'
-else
- BUILD_MPID_COMMON_DATATYPE_TRUE='#'
- BUILD_MPID_COMMON_DATATYPE_FALSE=
-fi
+#if defined(HAVE_POLL_H)
+#include <poll.h>
+#endif
+#if defined(HAVE_SYS_POLL_H)
+#include <sys/poll.h>
+#endif
+int
+main ()
+{
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_datatype
+struct pollfd pollfd;
+pollfd.fd = -1;
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_util_sock
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
- # channels (like ch3:sock) that want to use this package should set build_ch3u_sock=yes
- if test "x$build_ch3u_sock" = "xyes"; then
- BUILD_CH3_UTIL_SOCK_TRUE=
- BUILD_CH3_UTIL_SOCK_FALSE='#'
else
- BUILD_CH3_UTIL_SOCK_TRUE='#'
- BUILD_CH3_UTIL_SOCK_FALSE=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+as_fn_error $? "This device requires the poll function" "$LINENO" 5
+
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if a simple program using poll() can be compiled" >&5
+$as_echo_n "checking if a simple program using poll() can be compiled... " >&6; };
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_util_sock
+#if defined(HAVE_POLL_H)
+#include <poll.h>
+#endif
+#if defined(HAVE_SYS_POLL_H)
+#include <sys/poll.h>
+#endif
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis
+int
+main ()
+{
- if test "X$device_name" = "Xch3" -a "X$channel_name" = "Xnemesis"; then
- BUILD_CH3_NEMESIS_TRUE=
- BUILD_CH3_NEMESIS_FALSE='#'
-else
- BUILD_CH3_NEMESIS_TRUE='#'
- BUILD_CH3_NEMESIS_FALSE=
-fi
+struct pollfd pollfds[2];
+int n_fds;
+pollfds[0].fd = -1;
+pollfds[1].fd = -1;
+n_fds = poll(pollfds, 2, -1);
-if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING PREREQ FOR ch3:nemesis" >&5
-$as_echo "$as_me: RUNNING PREREQ FOR ch3:nemesis" >&6;}
-MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
-## code that formerly lived in setup_channel.args
-# Variables of interest...
-#
-# $with_device - device name and arguments
-# $device_name - name of the device
-# $device_args - contains name of channel select plus an channel args
-# $channel_name - name of the channel
-# $master_top_srcdir - top-level source directory
-# $master_top_builddir - top-level build directory
-# $ac_configure_args - all arguments passed to configure
-if test -z "${channel_args}" ; then
- nemesis_networks="tcp"
else
- nemesis_networks=`echo ${channel_args} | sed -e 's/,/ /g'`
-fi
-export nemesis_networks
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+as_fn_error $? "This device requires the poll function" "$LINENO" 5
fi
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_mxm
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bit fields work in ip.h" >&5
+$as_echo_n "checking whether bit fields work in ip.h... " >&6; };
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- for net in $nemesis_networks ; do
- case $net in #(
- mxm) :
- build_nemesis_netmod_mxm=yes ;; #(
- *) :
- ;;
-esac
- done
+#include <netinet/tcp.h>
-fi
- if test "X$build_nemesis_netmod_mxm" = "Xyes"; then
- BUILD_NEMESIS_NETMOD_MXM_TRUE=
- BUILD_NEMESIS_NETMOD_MXM_FALSE='#'
-else
- BUILD_NEMESIS_NETMOD_MXM_TRUE='#'
- BUILD_NEMESIS_NETMOD_MXM_FALSE=
-fi
+int
+main ()
+{
+int i;
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_mxm
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_portals4
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+bit_fields=yes
- if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+else
- for net in $nemesis_networks ; do
- case $net in #(
- portals4) :
- build_nemesis_netmod_portals4=yes ;; #(
- *) :
- ;;
-esac
- done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+bit_fields=no
fi
- if test "X$build_nemesis_netmod_portals4" = "Xyes"; then
- BUILD_NEMESIS_NETMOD_PORTALS4_TRUE=
- BUILD_NEMESIS_NETMOD_PORTALS4_FALSE='#'
-else
- BUILD_NEMESIS_NETMOD_PORTALS4_TRUE='#'
- BUILD_NEMESIS_NETMOD_PORTALS4_FALSE=
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test "$bit_fields" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Adding -D_NO_BITFIELDS to CFLAGS" >&5
+$as_echo "Adding -D_NO_BITFIELDS to CFLAGS" >&6; }
+ CFLAGS="$CFLAGS -D_NO_BITFIELDS"
fi
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_portals4
+for ac_func in gethostname
+do :
+ ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
+if test "x$ac_cv_func_gethostname" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GETHOSTNAME 1
+_ACEOF
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_ofi
+fi
+done
- if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+if test "$ac_cv_func_gethostname" = "yes" ; then
+ # Do we need to declare gethostname?
- for net in $nemesis_networks ; do
- case $net in #(
- ofi) :
- build_nemesis_netmod_ofi=yes ;; #(
- *) :
- ;;
-esac
- done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
+$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
+if ${pac_cv_func_decl_gethostname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-fi
- if test "X$build_nemesis_netmod_ofi" = "Xyes"; then
- BUILD_NEMESIS_NETMOD_OFI_TRUE=
- BUILD_NEMESIS_NETMOD_OFI_FALSE='#'
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))gethostname;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_gethostname=no
else
- BUILD_NEMESIS_NETMOD_OFI_TRUE='#'
- BUILD_NEMESIS_NETMOD_OFI_FALSE=
+ pac_cv_func_decl_gethostname=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
+$as_echo "$pac_cv_func_decl_gethostname" >&6; }
+if test "$pac_cv_func_decl_gethostname" = "yes" ; then
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_GETHOSTNAME_DECL 1
+_ACEOF
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_ofi
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_tcp
+fi
- if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+fi
- for net in $nemesis_networks ; do
- case $net in #(
- tcp) :
- build_nemesis_netmod_tcp=yes ;; #(
- *) :
- ;;
-esac
- done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
+$as_echo_n "checking for library containing socket... " >&6; }
+if ${ac_cv_search_socket+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_socket=$ac_res
fi
- if test "X$build_nemesis_netmod_tcp" = "Xyes"; then
- BUILD_NEMESIS_NETMOD_TCP_TRUE=
- BUILD_NEMESIS_NETMOD_TCP_FALSE='#'
-else
- BUILD_NEMESIS_NETMOD_TCP_TRUE='#'
- BUILD_NEMESIS_NETMOD_TCP_FALSE=
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_socket+:} false; then :
+ break
fi
+done
+if ${ac_cv_search_socket+:} false; then :
+else
+ ac_cv_search_socket=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
+$as_echo "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_tcp
-
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_llc
-
- if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+fi
- for net in $nemesis_networks ; do
- case $net in #(
- llc) :
- build_nemesis_netmod_llc=yes ;; #(
- *) :
- ;;
-esac
- done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_gethostbyname=$ac_res
fi
- if test "X$build_nemesis_netmod_llc" = "Xyes"; then
- BUILD_NEMESIS_NETMOD_LLC_TRUE=
- BUILD_NEMESIS_NETMOD_LLC_FALSE='#'
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_gethostbyname+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_gethostbyname+:} false; then :
+
else
- BUILD_NEMESIS_NETMOD_LLC_TRUE='#'
- BUILD_NEMESIS_NETMOD_LLC_FALSE=
+ ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+fi
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_llc
+# Check first for sys/socket.h . We check not only for existence but whether
+# it can be compiled (!), as we have seen some problems with this.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sock_poll
+#include <sys/types.h>
+#include <sys/socket.h>
- if test "X$build_mpid_common_sock_poll" = "Xyes"; then
- BUILD_MPID_COMMON_SOCK_POLL_TRUE=
- BUILD_MPID_COMMON_SOCK_POLL_FALSE='#'
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_sys_socket_h=yes
else
- BUILD_MPID_COMMON_SOCK_POLL_TRUE='#'
- BUILD_MPID_COMMON_SOCK_POLL_FALSE=
+ ac_cv_header_sys_socket_h=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test "$ac_cv_header_sys_socket_h" = yes ; then
+$as_echo "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
-## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sock_poll
+fi
+# Check for socklen_t . If undefined, define it as int
+# (note the conditional inclusion of sys/socket.h)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
+$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
+if ${pac_cv_have_socklen_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-## begin expansion of PAC_SUBCFG_PREREQ_src_pm_util
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+typedef struct { double a; int b; } socklen_t;
+int
+main ()
+{
+socklen_t a;a.a=1.0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_socklen_t=no
+else
+ pac_cv_have_socklen_t=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
+$as_echo "$pac_cv_have_socklen_t" >&6; }
+if test "X$pac_cv_have_socklen_t" = Xno ; then
-## end expansion of PAC_SUBCFG_PREREQ_src_pm_util
+$as_echo "#define socklen_t int" >>confdefs.h
+fi
-# ----------------------------------------------------------------------------
-# Set default library names if names haven't already been provided
+fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_sock
+## begin expansion of PAC_SUBCFG_PREREQ_src_pmi
-MPILIBNAME=${MPILIBNAME:-"mpi"}
-PMPILIBNAME_set=no
-if test -n "$PMPILIBNAME" ; then
- PMPILIBNAME_set=yes
-fi
-PMPILIBNAME=${PMPILIBNAME:-"p$MPILIBNAME"}
-# Note that the name for this library may be updated after we check for
-# enable_shmem
-# Fortran names are set later.
-# We use a different library for the C++ wrappers to avoid problems when
-# creating shared libraries
-if test -z "$MPICXXLIBNAME" ; then MPICXXLIBNAME="${MPILIBNAME}cxx" ; fi
-if test -z "$MPIFCLIBNAME" ; then MPIFCLIBNAME="${MPILIBNAME}fort" ; fi
-export MPICXXLIBNAME
-export MPIFCLIBNAME
+## end expansion of PAC_SUBCFG_PREREQ_src_pmi
+## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2
-# We'll set FORTRAN_BINDING to 1 if we support Fortran
-FORTRAN_BINDING=0
-# enable-fast
-# strip off multiple options, separated by commas
-save_IFS="$IFS"
-IFS=","
-for option in $enable_fast ; do
- case "$option" in
- O*)
- enable_fast_opts=$option
- ;;
- ndebug)
- enable_fast_ndebug=yes
- ;;
- all|yes)
- enable_fast_ndebug=yes
- enable_fast_opts=O2
- ;;
- none|no)
- enable_fast_ndebug=no
- enable_fast_opts=O0
- ;;
- *)
- IFS="$save_IFS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $option for --enable-fast" >&5
-$as_echo "$as_me: WARNING: Unknown value $option for --enable-fast" >&2;}
- IFS=","
- ;;
- esac
-done
-IFS="$save_IFS"
+## end expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2
-if test -n "$enable_fast_opts" ; then
- # Allows O<n> where <n> can be [0-9] or ' '.
- opt_flags=`echo $enable_fast_opts | sed -e 's%\(O0-9 \)%\1%g'`
- if test -n "$opt_flags" ; then
- MPI_DEFAULT_COPTS="-$enable_fast_opts"
- MPI_DEFAULT_CXXOPTS="-$enable_fast_opts"
- MPI_DEFAULT_FOPTS="-$enable_fast_opts"
- MPI_DEFAULT_FCOPTS="-$enable_fast_opts"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_fast_opts for --enable-fast" >&5
-$as_echo "$as_me: WARNING: Unknown value $enable_fast_opts for --enable-fast" >&2;}
- fi
-fi
+## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_simple
-if test "$enable_fast_ndebug" = "yes" ; then
- CFLAGS="$CFLAGS -DNDEBUG -DNVALGRIND"
- CXXFLAGS="$CXXFLAGS -DNDEBUG -DNVALGRIND"
- # MPICH does NOT assume any preprocessing support from the Fortran compiler,
- # so no Fortran files contain any preprocessing statements.
- # Don't set FFLAGS or FCFLAGS with any -D.
-fi
-# error-checking
-# Change default into the specific value of the default
-if test "$enable_error_checking" = "yes" ; then
- enable_error_checking=all
+## end expansion of PAC_SUBCFG_PREREQ_src_pmi_simple
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2_simple
+
+
+## end expansion of PAC_SUBCFG_PREREQ_src_pmi_pmi2_simple
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_binding_fortran_use_mpi
+
+ if test "X$enable_fc" = "Xyes"; then
+ BUILD_FC_BINDING_TRUE=
+ BUILD_FC_BINDING_FALSE='#'
+else
+ BUILD_FC_BINDING_TRUE='#'
+ BUILD_FC_BINDING_FALSE=
fi
-# glue_romio.h needs the variable HAVE_ERROR_CHECKING to have the value 0 or 1
-HAVE_ERROR_CHECKING=0
-case "$enable_error_checking" in
- no)
- # if error checking has been disabled, then automatically disable the error
- # checking tests in the test suite
- ac_configure_args="${ac_configure_args} --disable-checkerrors"
- ;;
- all|runtime)
- error_checking_kind=`echo $enable_error_checking | \
- tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- error_checking_kind=MPID_ERROR_LEVEL_$error_checking_kind
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ERROR_CHECKING $error_checking_kind
-_ACEOF
- HAVE_ERROR_CHECKING=1
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_error_checking for enable-error-checking" >&5
-$as_echo "$as_me: WARNING: Unknown value $enable_error_checking for enable-error-checking" >&2;}
- ;;
-esac
-# permit @HAVE_ERROR_CHECKING@ substitution in glue_romio.h
+## end expansion of PAC_SUBCFG_PREREQ_src_binding_fortran_use_mpi
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_tcp
-# error-messages
-case "$enable_error_messages" in
- no|none)
- error_message_kind="MPICH_ERROR_MSG_NONE"
- ;;
- all|yes)
- error_message_kind="MPICH_ERROR_MSG_ALL"
- ;;
- generic)
- error_message_kind="MPICH_ERROR_MSG_GENERIC"
- ;;
- class)
- error_message_kind="MPICH_ERROR_MSG_CLASS"
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_error_messages for enable-error-messages" >&5
-$as_echo "$as_me: WARNING: Unknown value $enable_error_messages for enable-error-messages" >&2;}
- ;;
+ if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+
+ for net in $nemesis_networks ; do
+ case $net in #(
+ tcp) :
+ build_nemesis_netmod_tcp=yes ;; #(
+ *) :
+ ;;
esac
+ done
-cat >>confdefs.h <<_ACEOF
-#define MPICH_ERROR_MSG_LEVEL $error_message_kind
-_ACEOF
+fi
+ if test "X$build_nemesis_netmod_tcp" = "Xyes"; then
+ BUILD_NEMESIS_NETMOD_TCP_TRUE=
+ BUILD_NEMESIS_NETMOD_TCP_FALSE='#'
+else
+ BUILD_NEMESIS_NETMOD_TCP_TRUE='#'
+ BUILD_NEMESIS_NETMOD_TCP_FALSE=
+fi
-# ----------------------------------------------------------------------------
-#
-# enable-timing and with-logging
-#
-# Still to do: add subsets: e.g., class=pt2pt,class=coll. See mpich doc
-#
-# Logging and timing are intertwined. If you select logging, you
-# may also need to select a timing level. If no timing is selected
-# but logging with rlog is selected, make "all" the default timing level.
-#
-# FIXME: make timing and logging options work more cleanly together,
-# particularly when other logging options are selected (e.g., logging is not
-# rlog).
-# ----------------------------------------------------------------------------
- if test "X$with_logging" = "Xrlog"; then
- BUILD_LOGGING_RLOG_TRUE=
- BUILD_LOGGING_RLOG_FALSE='#'
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_tcp
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_pm
+
+
+## end expansion of PAC_SUBCFG_PREREQ_src_pm
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_pm_gforker
+
+
+## end expansion of PAC_SUBCFG_PREREQ_src_pm_gforker
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_pmi_slurm
+
+
+## end expansion of PAC_SUBCFG_PREREQ_src_pmi_slurm
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_mxm
+
+ if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+
+ for net in $nemesis_networks ; do
+ case $net in #(
+ mxm) :
+ build_nemesis_netmod_mxm=yes ;; #(
+ *) :
+ ;;
+esac
+ done
+
+fi
+ if test "X$build_nemesis_netmod_mxm" = "Xyes"; then
+ BUILD_NEMESIS_NETMOD_MXM_TRUE=
+ BUILD_NEMESIS_NETMOD_MXM_FALSE='#'
else
- BUILD_LOGGING_RLOG_TRUE='#'
- BUILD_LOGGING_RLOG_FALSE=
+ BUILD_NEMESIS_NETMOD_MXM_TRUE='#'
+ BUILD_NEMESIS_NETMOD_MXM_FALSE=
fi
-collect_stats=false
-logging_required=false
-if test "$enable_timing" = "default" ; then
- if test "$with_logging" = "rlog" ; then
- enable_timing=all
- fi
+
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_mxm
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_util_sock
+
+ # channels (like ch3:sock) that want to use this package should set build_ch3u_sock=yes
+ if test "x$build_ch3u_sock" = "xyes"; then
+ BUILD_CH3_UTIL_SOCK_TRUE=
+ BUILD_CH3_UTIL_SOCK_FALSE='#'
+else
+ BUILD_CH3_UTIL_SOCK_TRUE='#'
+ BUILD_CH3_UTIL_SOCK_FALSE=
fi
-timing_name=$enable_timing
-case "$enable_timing" in
- no)
- timing_name=none
- ;;
- time)
- collect_stats=true
- ;;
- log|log_detailed)
- logging_required=true
- ;;
- yes)
- timing_name=all
- collect_stats=true
- logging_required=true
- ;;
- all|runtime)
- collect_stats=true
- logging_required=true
- ;;
- none|default)
- timing_name=none
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_timing for enable-timing" >&5
-$as_echo "$as_me: WARNING: Unknown value $enable_timing for enable-timing" >&2;}
- enable_timing=no
- timing_name=none
- ;;
-esac
-#
-# The default logging package is rlog; you can get it by
-# specifying --with-logging or --with-logging=rlog
-#
-case $with_logging in
- yes)
- logging_name=rlog
- ;;
- no|none)
- logging_name=none
- ;;
- default)
- if test "$logging_required" = "true" ; then
- logging_name=rlog
- else
- logging_name=none
- fi
- ;;
- *)
- logging_name=$with_logging
- ;;
-esac
-#
-# Include the selected logging subsystem
-#
-# Choices:
-# 1) A subdir of src/util/logging
-# This directory must contain a configure which will be executed
-# to build the
-# 2) An external directory
-# This directory must contain
-# a mpilogging.h file
-# It may contain
-# a setup_logging script
-# a configure
-#
-#
-logging_subsystems=
-if test "$logging_name" != "none" ; then
- # Check for an external name (directory containing a /)
- hasSlash=`echo A$logging_name | sed -e 's%[^/]%%g'`
- if test -n "$hasSlash" ; then
- # Check that the external logging system is complete.
- # Any failure will cause configure to abort
- if test ! -d $logging_name ; then
- as_fn_error $? "External logging directory $logging_name not found. Configure aborted" "$LINENO" 5
- logging_name=none
- elif test ! -s $logging_name/mpilogging.h ; then
- as_fn_error $? "External logging header $logging_name/mpilogging.h not found. Configure aborted" "$LINENO" 5
- logging_name=none
- fi
- logdir=$logging_name
- # Force the logdir to be absolute
- logdir=`cd $logdir && pwd`
- # Switch name to "external" because that is how the MPICH
- # code will know it
- logging_name=external
- # Add the dir to the include paths
- #CPPFLAGS="$CPPFLAGS -I$logdir"
- CPPFLAGS="$CPPFLAGS -I$logdir"
- # Add to the list of external modules to setup
- if test -x $logdir/setup_logging ; then
- EXTERNAL_SETUPS="$EXTERNAL_SETUPS $logdir/setup_logging"
- fi
- else
- logdir=$srcdir/src/util/logging
- logreldir=src/util/logging/$logging_name
- logging_subsystems="$logging_subsystems $logreldir"
- for dir in $logging_name ; do
- if test ! -d $logdir/$dir ; then
- as_fn_error $? "$logdir/$dir does not exist. Configure aborted" "$LINENO" 5
- logging_name=none
- fi
- done
- for dir in $logging_subsystems ; do
- if test ! -x $srcdir/$dir/configure ; then
- as_fn_error $? "$srcdir/$dir has no configure (required). Configure aborted" "$LINENO" 5
- logging_name=none
- fi
+
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_util_sock
+
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_llc
+
+ if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+
+ for net in $nemesis_networks ; do
+ case $net in #(
+ llc) :
+ build_nemesis_netmod_llc=yes ;; #(
+ *) :
+ ;;
+esac
done
- fi
+
fi
-#
-# FIXME: Logging doesn't necessarily require timing (e.g., simply logging the
-# sequence of routines).
-if test "$logging_name" != "none" ; then
- if test "$enable_timing" != "no" ; then
- if test "$enable_timing" = "default" -o "$enable_timing" = "none" ; then
- enable_timing=log
- timing_name=log
- fi
- subsystems="$subsystems $logging_subsystems"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Timing was disabled. Logging has been disabled as well." >&5
-$as_echo "$as_me: WARNING: Timing was disabled. Logging has been disabled as well." >&2;}
- with_logging=no
- logging_name=none
- fi
+ if test "X$build_nemesis_netmod_llc" = "Xyes"; then
+ BUILD_NEMESIS_NETMOD_LLC_TRUE=
+ BUILD_NEMESIS_NETMOD_LLC_FALSE='#'
else
- if test "$logging_required" = "true" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Timing was enabled with log option but no logging library is available. Timing has been disabled." >&5
-$as_echo "$as_me: WARNING: Timing was enabled with log option but no logging library is available. Timing has been disabled." >&2;}
- enable_timing=no
- timing_name=none
- fi
+ BUILD_NEMESIS_NETMOD_LLC_TRUE='#'
+ BUILD_NEMESIS_NETMOD_LLC_FALSE=
fi
-if test "$timing_name" != "none" ; then
- timing_kind=`echo $timing_name | \
- tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- timing_kind=MPID_TIMING_KIND_$timing_kind
-cat >>confdefs.h <<_ACEOF
-#define HAVE_TIMING $timing_kind
-_ACEOF
- if test "$collect_stats" = "true" ; then
-$as_echo "#define COLLECT_STATS 1" >>confdefs.h
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_llc
- fi
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_hcoll
+
+
+
+# Check whether --with-hcoll was given.
+if test "${with_hcoll+set}" = set; then :
+ withval=$with_hcoll; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-hcoll=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-hcoll=PATH expects a valid PATH" >&2;}
+ with_hcoll="" ;; #(
+ *) :
+ ;;
+esac
+else
+ with_hcoll=
fi
-use_logging_variable="MPID_LOGGING_`echo $logging_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
-cat >>confdefs.h <<_ACEOF
-#define USE_LOGGING $use_logging_variable
-_ACEOF
+# Check whether --with-hcoll-include was given.
+if test "${with_hcoll_include+set}" = set; then :
+ withval=$with_hcoll_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-hcoll-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-hcoll-include=PATH expects a valid PATH" >&2;}
+ with_hcoll_include="" ;; #(
+ *) :
+ ;;
+esac
+fi
-# ----------------------------------------------------------------------------
-# End of logging tests
-# ----------------------------------------------------------------------------
-# ----------------------------------------------------------------------------
-# Check to see if the device does not support spawn.
-# FIXME: This should provide the option of not building the dynamic
-# process routines. It could also allow us to specialize support
-# for all processes are members of MPI_COMM_WORLD (only one comm_world).
-# ----------------------------------------------------------------------------
-if test "$MPID_NO_SPAWN" = yes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The device $with_device does not support MPI dynamic process routines" >&5
-$as_echo "$as_me: WARNING: The device $with_device does not support MPI dynamic process routines" >&2;}
+# Check whether --with-hcoll-lib was given.
+if test "${with_hcoll_lib+set}" = set; then :
+ withval=$with_hcoll_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-hcoll-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-hcoll-lib=PATH expects a valid PATH" >&2;}
+ with_hcoll_lib="" ;; #(
+ *) :
+ ;;
+esac
fi
-# MPL
-MPLLIBNAME=${MPLLIBNAME:-"mpl"}
-export MPLLIBNAME
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
+ if test -n "${with_hcoll_include}"; then :
-# Check whether --with-mpl-prefix was given.
-if test "${with_mpl_prefix+set}" = set; then :
- withval=$with_mpl_prefix;
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_hcoll_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_hcoll_include}', not appending" >&5
else
- with_mpl_prefix=embedded
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_hcoll_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_hcoll_include}"
+
fi
- mplsrcdir=""
-mpllibdir=""
+else
+ if test -n "${with_hcoll}"; then :
-mpllib=""
-if test "$with_mpl_prefix" = "embedded" ; then
- # no need for libtool versioning when embedding MPL
- mpl_subdir_args="--disable-versioning"
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_hcoll}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_hcoll}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_hcoll}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_hcoll}/include"
- pac_dir="src/mpl"
- { $as_echo "$as_me:${as_lineno-$LINENO}: ===== configuring src/mpl =====" >&5
-$as_echo "$as_me: ===== configuring src/mpl =====" >&6;}
+fi
- pac_abs_srcdir=`(cd $srcdir && pwd)`
+fi
+fi
- if test -f $pac_abs_srcdir/src/mpl/setup ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/mpl/setup" >&5
-$as_echo "$as_me: sourcing $pac_abs_srcdir/src/mpl/setup" >&6;}
- . $pac_abs_srcdir/src/mpl/setup
- fi
+ if test -n "${with_hcoll_lib}"; then :
- # Adapted for MPICH from the autoconf-2.67 implementation of
- # AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
- # local modifications.
- # Remove --cache-file, --srcdir, and --disable-option-checking arguments
- # so they do not pile up. Otherwise relative paths (like --srcdir=.. from
- # make distcheck) will be incorrect.
- pac_sub_configure_args="$mpl_subdir_args"
- pac_prev=
- eval "set x $ac_configure_args"
- shift
- for pac_arg
- do
- if test -n "$pac_prev"; then
- pac_prev=
- continue
- fi
- case $pac_arg in
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- pac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
- | --c=*)
- ;;
- --config-cache | -C)
- ;;
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- pac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- ;;
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- pac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- ;;
- --disable-option-checking)
- ;;
- *)
- # MPICH note: this is a more robust version of the "precious
- # variable" propagation code that was present in the previous
- # incarnation of this macro
- for pac_pvar in $ac_precious_vars ; do
- # check if configure argument token contains the
- # precious variable, i.e. "name_of_prec_var=".
- if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
- # check if current precious variable is set in env
- eval pvar_set=\${$pac_pvar+set}
- if test "$pvar_set" = "set" ; then
- # Append 'name_of_prec_var=value_of_prec_var'
- # to the subconfigure arguments list, where
- # value_of_prec_var is fetched from the env.
- # this also overrides any value set on the command line
- eval pac_pval=\${$pac_pvar}
- pac_arg="$pac_pvar=$pac_pval"
- break
- fi
- fi
- done
- case $pac_arg in
- *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append pac_sub_configure_args " '$pac_arg'" ;;
- esac
- done
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_hcoll_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_hcoll_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_hcoll_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_hcoll_lib}"
- # Always prepend --prefix to ensure using the same prefix
- # in subdir configurations.
- # MPICH note: see tt#983 for an example of why this is necessary
- pac_arg="--prefix=$prefix"
- case $pac_arg in
- *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
+fi
- # Pass --silent
- if test "$silent" = yes; then
- pac_sub_configure_args="--silent $pac_sub_configure_args"
- fi
+else
+ if test -n "${with_hcoll}"; then :
- # Always prepend --disable-option-checking to silence warnings, since
- # different subdirs can have different --enable and --with options.
- pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
- pac_popdir=`pwd`
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_hcoll}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_hcoll}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_hcoll}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_hcoll}/lib"
- # Do not complain, so a configure script can configure whichever
- # parts of a large source tree are present.
- test -d "$srcdir/$pac_dir" || continue
+fi
- # MPICH note: modified to remove the internal "_AS_*" macro usage, also
- # msg is already printed at top
- as_dir="$pac_dir"; as_fn_mkdir_p
- # MPICH note: we leave this internal macro reference for now. We can clone
- # the macro locally if this turns out to be non-portable across several autoconf
- # versions. It sets the following variables: ac_builddir,
- # ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
- # ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
- ac_builddir=.
+ if test -d "${with_hcoll}/lib64"; then :
-case "$pac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$pac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_hcoll}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_hcoll}/lib64', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_hcoll}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_hcoll}/lib64"
+fi
- cd "$pac_dir"
+fi
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- pac_sub_configure=$ac_srcdir/configure.gnu
- elif test -f "$ac_srcdir/configure"; then
- pac_sub_configure=$ac_srcdir/configure
- elif test -f "$ac_srcdir/configure.ac"; then
- # This should be Cygnus configure.
- pac_sub_configure=$ac_aux_dir/configure
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $pac_dir" >&5
-$as_echo "$as_me: WARNING: no configuration information is in $pac_dir" >&2;}
- pac_sub_configure=
- fi
+fi
- # The recursion is here.
- if test -n "$pac_sub_configure"; then
- # MPICH note: overriding the cache file on purpose to prevent strange
- # issues resulting from inter-dir caching
- pac_sub_cache_file="/dev/null"
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&5
-$as_echo "$as_me: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
- # The eval makes quoting arguments work.
- # MPICH note: we want to execute the provided actions, not be silent
- # or error out if the subconfigure succeeded/failed
- if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
- --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
- then
- # restore the current dir for the provided actions
- cd "$pac_popdir"
- else
- # restore the current dir for the provided actions
- cd "$pac_popdir"
- as_fn_error $? "MPL configure failed" "$LINENO" 5
- fi
- fi
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
- cd "$pac_popdir"
- { $as_echo "$as_me:${as_lineno-$LINENO}: ===== done with src/mpl configure =====" >&5
-$as_echo "$as_me: ===== done with src/mpl configure =====" >&6;}
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "hcoll/api/hcoll_api.h" "ac_cv_header_hcoll_api_hcoll_api_h" "$ac_includes_default"
+if test "x$ac_cv_header_hcoll_api_hcoll_api_h" = xyes; then :
- # Check for any localdefs files. These may be created, so we
- # look in the local directory first.
- if test -f src/mpl/localdefs ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing src/mpl/localdefs" >&5
-$as_echo "$as_me: sourcing src/mpl/localdefs" >&6;}
- . src/mpl/localdefs
- elif test -f $pac_abs_srcdir/src/mpl/localdefs ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/mpl/localdefs" >&5
-$as_echo "$as_me: sourcing $pac_abs_srcdir/src/mpl/localdefs" >&6;}
- . $pac_abs_srcdir/src/mpl/localdefs
- fi
+else
+ failure=yes
+fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hcoll_init in -lhcoll" >&5
+$as_echo_n "checking for hcoll_init in -lhcoll... " >&6; }
+if ${ac_cv_lib_hcoll_hcoll_init+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lhcoll $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/mpl/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/mpl/include', not appending" >&5
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char hcoll_init ();
+int
+main ()
+{
+return hcoll_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_hcoll_hcoll_init=yes
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/mpl/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/mpl/include"
+ ac_cv_lib_hcoll_hcoll_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hcoll_hcoll_init" >&5
+$as_echo "$ac_cv_lib_hcoll_hcoll_init" >&6; }
+if test "x$ac_cv_lib_hcoll_hcoll_init" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBHCOLL 1
+_ACEOF
+
+ LIBS="-lhcoll $LIBS"
+else
+ failure=yes
fi
+ if test "$failure" = "no" ; then
+ have_hcoll=yes
+ else
+ have_hcoll=no
+ fi
+
+ if test "$have_hcoll" = "yes" ; then
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${use_top_srcdir}/src/mpl/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${use_top_srcdir}/src/mpl/include', not appending" >&5
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lhcoll\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lhcoll', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${use_top_srcdir}/src/mpl/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${use_top_srcdir}/src/mpl/include"
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lhcoll', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lhcoll"
fi
+ elif test ! -z "${with_hcoll}" ; then
+ as_fn_error $? "'hcoll/api/hcoll_api.h or libhcoll library not found.'" "$LINENO" 5
+ fi
- mplsrcdir="${master_top_builddir}/src/mpl"
- mpllib="src/mpl/lib${MPLLIBNAME}.la"
-else
- # The user specified an already-installed MPL; just sanity check, don't
- # subconfigure it
- if test -s "${with_mpl_prefix}/include/mplconfig.h"; then :
- :
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+
+ if test "$have_hcoll" = "yes"; then
+ BUILD_HCOLL_TRUE=
+ BUILD_HCOLL_FALSE='#'
else
- as_fn_error $? "the MPL installation in \"${with_mpl_prefix}\" appears broken" "$LINENO" 5
+ BUILD_HCOLL_TRUE='#'
+ BUILD_HCOLL_FALSE=
fi
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_mpl_prefix}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_mpl_prefix}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_mpl_prefix}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_mpl_prefix}/include"
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_hcoll
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4
+
+ if test "$device_name" = "ch4"; then
+ BUILD_CH4_TRUE=
+ BUILD_CH4_FALSE='#'
+else
+ BUILD_CH4_TRUE='#'
+ BUILD_CH4_FALSE=
fi
+# the CH4 device depends on the common NBC scheduler code
+build_mpid_common_sched=yes
+build_mpid_common_datatype=yes
+build_mpid_common_thread=yes
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-l${MPLLIBNAME}\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-l${MPLLIBNAME}', not prepending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-l${MPLLIBNAME}', prepending" >&5
- WRAPPER_LIBS="-l${MPLLIBNAME} $WRAPPER_LIBS"
+MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
+MPID_MAX_PROCESSOR_NAME=128
+MPID_MAX_ERROR_STRING=512
+
+if test -z "$BUILD_CH4_TRUE"; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING PREREQ FOR CH4 DEVICE" >&5
+$as_echo "$as_me: RUNNING PREREQ FOR CH4 DEVICE" >&6;}
+# $device_args - contains the netmods
+if test -z "${device_args}" ; then
+ ch4_netmods="ofi"
+else
+ ch4_netmods=`echo ${device_args} | sed -e 's/,/ /g'`
fi
+export ch4_netmods
+#
+# reset DEVICE so that it (a) always includes the channel name, and (b) does not include channel options
+#
+DEVICE="${device_name}:${ch4_netmods}"
+ch4_nets_func_decl=""
+ch4_nets_native_func_decl=""
+ch4_nets_func_array=""
+ch4_nets_native_func_array=""
+ch4_nets_strings=""
+net_index=0
+for net in $ch4_netmods ; do
+ if test ! -d $srcdir/src/mpid/ch4/netmod/${net} ; then
+ as_fn_error $? "Network module ${net} is unknown \"$srcdir/src/mpid/ch4/netmod/${net}\"" "$LINENO" 5
+ fi
+ net_macro=`echo $net | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ net_macro="MPIDI_CH4_${net_macro}"
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${with_mpl_prefix}/lib\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${with_mpl_prefix}/lib', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${with_mpl_prefix}/lib', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${with_mpl_prefix}/lib"
+ if test -z "$ch4_nets_array" ; then
+ ch4_nets_array="$net_macro"
+ else
+ ch4_nets_array="$ch4_nets_array, $net_macro"
+ fi
-fi
+ if test -z "$ch4_nets_func_decl" ; then
+ ch4_nets_func_decl="MPIDI_NM_${net}_funcs"
+ else
+ ch4_nets_func_decl="${ch4_nets_func_decl}, MPIDI_NM_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_native_func_decl" ; then
+ ch4_nets_native_func_decl="MPIDI_NM_native_${net}_funcs"
+ else
+ ch4_nets_native_func_decl="${ch4_nets_native_func_decl}, MPIDI_NM_native_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_func_array" ; then
+ ch4_nets_func_array="&MPIDI_NM_${net}_funcs"
+ else
+ ch4_nets_func_array="${ch4_nets_func_array}, &MPIDI_NM_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_native_func_array" ; then
+ ch4_nets_native_func_array="&MPIDI_NM_native_${net}_funcs"
+ else
+ ch4_nets_native_func_array="${ch4_nets_native_func_array}, &MPIDI_NM_native_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_strings" ; then
+ ch4_nets_strings="\"$net\""
+ else
+ ch4_nets_strings="$ch4_nets_strings, \"$net\""
+ fi
+
+ if test -z "$ch4_netmod_pre_include" ; then
+ ch4_netmod_pre_include="#include \"../netmod/${net}/${net}_pre.h\""
+ else
+ ch4_netmod_pre_include="${ch4_netmod_pre_include}
+#include \"../netmod/${net}/${net}_pre.h\""
+ fi
+
+ net_upper=`echo ${net} | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ if test -z "$ch4_netmod_amrequest_decl" ; then
+ ch4_netmod_amrequest_decl="MPIDI_${net_upper}_am_request_t ${net};"
+ else
+ ch4_netmod_amrequest_decl="${ch4_netmod_amrequest_decl} \\
+MPIDI_${net_upper}_am_request_t ${net};"
+ fi
+
+ if test -z "$ch4_netmod_request_decl" ; then
+ ch4_netmod_request_decl="MPIDI_${net_upper}_request_t ${net};"
+ else
+ ch4_netmod_request_decl="${ch4_netmod_request_decl} \\
+MPIDI_${net_upper}_request_t ${net};"
+ fi
+
+ if test -z "$ch4_netmod_comm_decl" ; then
+ ch4_netmod_comm_decl="MPIDI_${net_upper}_comm_t ${net};"
+ else
+ ch4_netmod_comm_decl="${ch4_netmod_comm_decl} \\
+MPIDI_${net_upper}_comm_t ${net};"
+ fi
+ if test -z "$ch4_netmod_dt_decl" ; then
+ ch4_netmod_dt_decl="MPIDI_${net_upper}_dt_t ${net};"
+ else
+ ch4_netmod_dt_decl="${ch4_netmod_dt_decl} \\
+MPIDI_${net_upper}_dt_t ${net};"
+ fi
+ if test -z "$ch4_netmod_op_decl" ; then
+ ch4_netmod_op_decl="MPIDI_${net_upper}_op_t ${net};"
+ else
+ ch4_netmod_op_decl="${ch4_netmod_op_decl} \\
+MPIDI_${net_upper}_op_t ${net};"
+ fi
+
+ if test -z "$ch4_netmod_win_decl" ; then
+ ch4_netmod_win_decl="MPIDI_${net_upper}_win_t ${net};"
+ else
+ ch4_netmod_win_decl="${ch4_netmod_win_decl} \\
+MPIDI_${net_upper}_win_t ${net};"
+ fi
+ if test -z "$ch4_netmod_addr_decl" ; then
+ ch4_netmod_addr_decl="MPIDI_${net_upper}_addr_t ${net};"
+ else
+ ch4_netmod_addr_decl="${ch4_netmod_addr_decl} \\
+MPIDI_${net_upper}_addr_t ${net};"
+ fi
+
+
+
+
+net_index=`expr $net_index + 1`
+done
+ch4_nets_array_sz=$net_index
- mpllibdir="-L${with_mpl_prefix}/lib"
-fi
-# OpenPA
-OPALIBNAME=${OPALIBNAME:-"opa"}
-export OPALIBNAME
-# Check whether --with-openpa-prefix was given.
-if test "${with_openpa_prefix+set}" = set; then :
- withval=$with_openpa_prefix;
-else
- # see if OPA is already installed on the system
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
- if echo "$LIBS" | $FGREP -e "\<-l${OPALIBNAME}\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-l${OPALIBNAME}', not prepending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-l${OPALIBNAME}', prepending" >&5
- LIBS="-l${OPALIBNAME} $LIBS"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-ch4-netmod-direct was given.
+if test "${enable_ch4_netmod_direct+set}" = set; then :
+ enableval=$enable_ch4_netmod_direct;
+else
+ enable_ch4_netmod_direct=yes
fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "opa_primitives.h"
-int
-main ()
-{
-OPA_int_t i;
-OPA_store_int(i,10);
-OPA_fetch_and_incr_int(&i,5);
+if test "$ch4_nets_array_sz" = "1" && test "$enable_ch4_netmod_direct" = "yes" ; then
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- with_openpa_prefix=system
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-DNETMOD_DIRECT=__netmod_direct_${ch4_netmods}__\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-DNETMOD_DIRECT=__netmod_direct_${ch4_netmods}__', not appending" >&5
else
- with_openpa_prefix=embedded
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-DNETMOD_DIRECT=__netmod_direct_${ch4_netmods}__', appending" >&5
+ CPPFLAGS="$CPPFLAGS -DNETMOD_DIRECT=__netmod_direct_${ch4_netmods}__"
+
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+fi
+# Check whether --enable-ch4-shm was given.
+if test "${enable_ch4_shm+set}" = set; then :
+ enableval=$enable_ch4_shm;
+else
+ enable_ch4_shm=exclusive:posix
fi
-opasrcdir=""
+# Check whether --enable-ch4-shm-direct was given.
+if test "${enable_ch4_shm_direct+set}" = set; then :
+ enableval=$enable_ch4_shm_direct;
+else
+ enable_ch4_shm_direct=yes
+fi
-opalibdir=""
-opalib=""
+ch4_shm_level=`echo $enable_ch4_shm | sed -e 's/:.*$//'`
+ch4_shm=`echo $enable_ch4_shm | sed -e 's/^[^:]*//' -e 's/^://'`
-if test "$with_openpa_prefix" = "embedded" ; then
- if test -e "${use_top_srcdir}/src/openpa" ; then
- opasrcdir="${master_top_builddir}/src/openpa"
- opalib="${master_top_builddir}/src/openpa/src/lib${OPALIBNAME}.la"
+if test "$ch4_shm_level" != "no" -a "$ch4_shm_level" != "yes" -a "$ch4_shm_level" != "exclusive"; then
+ as_fn_error $? "Shared memory level ${ch4_shm_level} is unknown" "$LINENO" 5
+fi
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${use_top_srcdir}/src/openpa/src\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${use_top_srcdir}/src/openpa/src', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${use_top_srcdir}/src/openpa/src', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${use_top_srcdir}/src/openpa/src"
+if test "$ch4_shm_level" != "no" ; then
+
+$as_echo "#define MPIDI_BUILD_CH4_SHM 1" >>confdefs.h
fi
+if test "$ch4_shm_level" = "exclusive" ; then
+ # This variable is set only when the user wants CH4 to handle all shared memory operations
+$as_echo "#define MPIDI_CH4_EXCLUSIVE_SHM 1" >>confdefs.h
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/openpa/src\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/openpa/src', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/openpa/src', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/openpa/src"
-fi
+ # This variable can be set either when the user asks for CH4 exclusive shared memory
+ # or when the netmod doesn't want to implement its own locality information
+$as_echo "#define MPIDI_BUILD_CH4_LOCALITY_INFO 1" >>confdefs.h
- # OPA defaults to "auto", but in MPICH we want "auto_allow_emulation" to
- # easily permit using channels like ch3:sock that don't care about atomics
+fi
-# Check whether --with-atomic-primitives was given.
-if test "${with_atomic_primitives+set}" = set; then :
- withval=$with_atomic_primitives;
+# $ch4_shm - contains the shm mods
+if test -z "${ch4_shm}" ; then
+ if test "$ch4_shm_level" != "no" ; then
+ ch4_shm="posix"
+ fi
else
- with_atomic_primitives=not_specified
+ ch4_shm=`echo ${ch4_shm} | sed -e 's/,/ /g'`
fi
+export ch4_shm
- # no need for libtool versioning when embedding OPA
- opa_subdir_args="--disable-versioning"
- if test "$with_atomic_primitives" = "not_specified" ; then
+ch4_shm_func_decl=""
+ch4_shm_native_func_decl=""
+ch4_shm_func_array=""
+ch4_shm_native_func_array=""
+ch4_shm_strings=""
+shm_index=0
+for shm in $ch4_shm ; do
+ if test ! -d $srcdir/src/mpid/ch4/shm/${shm} ; then
+ as_fn_error $? "Shared memory module ${shm} is unknown \"$srcdir/src/mpid/ch4/shm/${shm}\"" "$LINENO" 5
+ fi
+ shm_macro=`echo $shm | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ shm_macro="MPIDI_SHM_${shm_macro}"
+ if test -z "$ch4_shm_array" ; then
+ ch4_shm_array="$shm_macro"
+ else
+ ch4_shm_array="$ch4_shm_array, $shm_macro"
+ fi
- if echo "$opa_subdir_args" | $FGREP -e "\<--with-atomic-primitives=auto_allow_emulation\>" >/dev/null 2>&1; then :
- echo "opa_subdir_args(='$opa_subdir_args') contains '--with-atomic-primitives=auto_allow_emulation', not appending" >&5
-else
- echo "opa_subdir_args(='$opa_subdir_args') does not contain '--with-atomic-primitives=auto_allow_emulation', appending" >&5
- opa_subdir_args="$opa_subdir_args --with-atomic-primitives=auto_allow_emulation"
+ if test -z "$ch4_shm_func_decl" ; then
+ ch4_shm_func_decl="MPIDI_SHM_${shm}_funcs"
+ else
+ ch4_shm_func_decl="${ch4_shm_func_decl}, MPIDI_SHM_${shm}_funcs"
+ fi
-fi
+ if test -z "$ch4_shm_native_func_decl" ; then
+ ch4_shm_native_func_decl="MPIDI_SHM_native_${shm}_funcs"
+ else
+ ch4_shm_native_func_decl="${ch4_shm_native_func_decl}, MPIDI_SHM_native_${shm}_funcs"
+ fi
- fi
+ if test -z "$ch4_shm_func_array" ; then
+ ch4_shm_func_array="&MPIDI_SHM_${shm}_funcs"
+ else
+ ch4_shm_func_array="${ch4_shm_func_array}, &MPIDI_SHM_${shm}_funcs"
+ fi
- pac_dir="src/openpa"
- { $as_echo "$as_me:${as_lineno-$LINENO}: ===== configuring src/openpa =====" >&5
-$as_echo "$as_me: ===== configuring src/openpa =====" >&6;}
+ if test -z "$ch4_shm_native_func_array" ; then
+ ch4_shm_native_func_array="&MPIDI_SHM_native_${shm}_funcs"
+ else
+ ch4_shm_native_func_array="${ch4_shm_native_func_array}, &MPIDI_SHM_native_${shm}_funcs"
+ fi
- pac_abs_srcdir=`(cd $srcdir && pwd)`
+ if test -z "$ch4_shm_strings" ; then
+ ch4_shm_strings="\"$shm\""
+ else
+ ch4_shm_strings="$ch4_shm_strings, \"$shm\""
+ fi
- if test -f $pac_abs_srcdir/src/openpa/setup ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/openpa/setup" >&5
-$as_echo "$as_me: sourcing $pac_abs_srcdir/src/openpa/setup" >&6;}
- . $pac_abs_srcdir/src/openpa/setup
- fi
+ if test -z "$ch4_shm_pre_include" ; then
+ ch4_shm_pre_include="#include \"../shm/${shm}/${shm}_pre.h\""
+ else
+ ch4_shm_pre_include="${ch4_shm_pre_include}
+#include \"../shm/${shm}/${shm}_pre.h\""
+ fi
- # Adapted for MPICH from the autoconf-2.67 implementation of
- # AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
- # local modifications.
+ shm_upper=`echo ${shm} | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ if test -z "$ch4_shm_request_decl" ; then
+ ch4_shm_request_decl="MPIDI_${shm_upper}_request_t ${shm};"
+ else
+ ch4_shm_request_decl="${ch4_shm_request_decl} \\
+MPIDI_${shm_upper}_request_t ${shm};"
+ fi
- # Remove --cache-file, --srcdir, and --disable-option-checking arguments
- # so they do not pile up. Otherwise relative paths (like --srcdir=.. from
- # make distcheck) will be incorrect.
- pac_sub_configure_args="$opa_subdir_args"
- pac_prev=
- eval "set x $ac_configure_args"
- shift
- for pac_arg
- do
- if test -n "$pac_prev"; then
- pac_prev=
- continue
- fi
- case $pac_arg in
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- pac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
- | --c=*)
- ;;
- --config-cache | -C)
- ;;
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- pac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- ;;
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- pac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- ;;
- --disable-option-checking)
- ;;
- *)
- # MPICH note: this is a more robust version of the "precious
- # variable" propagation code that was present in the previous
- # incarnation of this macro
- for pac_pvar in $ac_precious_vars ; do
- # check if configure argument token contains the
- # precious variable, i.e. "name_of_prec_var=".
- if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
- # check if current precious variable is set in env
- eval pvar_set=\${$pac_pvar+set}
- if test "$pvar_set" = "set" ; then
- # Append 'name_of_prec_var=value_of_prec_var'
- # to the subconfigure arguments list, where
- # value_of_prec_var is fetched from the env.
- # this also overrides any value set on the command line
- eval pac_pval=\${$pac_pvar}
- pac_arg="$pac_pvar=$pac_pval"
- break
- fi
- fi
- done
- case $pac_arg in
- *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append pac_sub_configure_args " '$pac_arg'" ;;
- esac
- done
+ if test -z "$ch4_shm_comm_decl" ; then
+ ch4_shm_comm_decl="MPIDI_${shm_upper}_comm_t ${shm};"
+ else
+ ch4_shm_comm_decl="${ch4_shm_comm_decl} \\
+MPIDI_${shm_upper}_comm_t ${shm};"
+ fi
- # Always prepend --prefix to ensure using the same prefix
- # in subdir configurations.
- # MPICH note: see tt#983 for an example of why this is necessary
- pac_arg="--prefix=$prefix"
- case $pac_arg in
- *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
- # Pass --silent
- if test "$silent" = yes; then
- pac_sub_configure_args="--silent $pac_sub_configure_args"
- fi
+ shm_index=`expr $shm_index + 1`
+done
+ch4_shm_array_sz=$shm_index
- # Always prepend --disable-option-checking to silence warnings, since
- # different subdirs can have different --enable and --with options.
- pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
- pac_popdir=`pwd`
- # Do not complain, so a configure script can configure whichever
- # parts of a large source tree are present.
- test -d "$srcdir/$pac_dir" || continue
- # MPICH note: modified to remove the internal "_AS_*" macro usage, also
- # msg is already printed at top
- as_dir="$pac_dir"; as_fn_mkdir_p
- # MPICH note: we leave this internal macro reference for now. We can clone
- # the macro locally if this turns out to be non-portable across several autoconf
- # versions. It sets the following variables: ac_builddir,
- # ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
- # ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
- ac_builddir=.
-case "$pac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$pac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
- cd "$pac_dir"
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- pac_sub_configure=$ac_srcdir/configure.gnu
- elif test -f "$ac_srcdir/configure"; then
- pac_sub_configure=$ac_srcdir/configure
- elif test -f "$ac_srcdir/configure.ac"; then
- # This should be Cygnus configure.
- pac_sub_configure=$ac_aux_dir/configure
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $pac_dir" >&5
-$as_echo "$as_me: WARNING: no configuration information is in $pac_dir" >&2;}
- pac_sub_configure=
- fi
- # The recursion is here.
- if test -n "$pac_sub_configure"; then
- # MPICH note: overriding the cache file on purpose to prevent strange
- # issues resulting from inter-dir caching
- pac_sub_cache_file="/dev/null"
- { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&5
-$as_echo "$as_me: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
- # The eval makes quoting arguments work.
- # MPICH note: we want to execute the provided actions, not be silent
- # or error out if the subconfigure succeeded/failed
- if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
- --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
- then
- # restore the current dir for the provided actions
- cd "$pac_popdir"
- else
- # restore the current dir for the provided actions
- cd "$pac_popdir"
- as_fn_error $? "OpenPA configure failed" "$LINENO" 5
- fi
- fi
- cd "$pac_popdir"
- { $as_echo "$as_me:${as_lineno-$LINENO}: ===== done with src/openpa configure =====" >&5
-$as_echo "$as_me: ===== done with src/openpa configure =====" >&6;}
- # Check for any localdefs files. These may be created, so we
- # look in the local directory first.
- if test -f src/openpa/localdefs ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing src/openpa/localdefs" >&5
-$as_echo "$as_me: sourcing src/openpa/localdefs" >&6;}
- . src/openpa/localdefs
- elif test -f $pac_abs_srcdir/src/openpa/localdefs ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/openpa/localdefs" >&5
-$as_echo "$as_me: sourcing $pac_abs_srcdir/src/openpa/localdefs" >&6;}
- . $pac_abs_srcdir/src/openpa/localdefs
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Attempted to use the embedded OpenPA source tree in \"src/openpa\", but it is missing. Configuration or compilation may fail later." >&5
-$as_echo "$as_me: WARNING: Attempted to use the embedded OpenPA source tree in \"src/openpa\", but it is missing. Configuration or compilation may fail later." >&2;}
- fi
-elif test "$with_openpa_prefix" = "system" ; then
+if test "$ch4_shm_array_sz" = "1" && test "$enable_ch4_shm_direct" = "yes" ; then
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-l${OPALIBNAME}\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-l${OPALIBNAME}', not prepending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-DSHM_DIRECT=__shm_direct_${ch4_shm}__\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-DSHM_DIRECT=__shm_direct_${ch4_shm}__', not appending" >&5
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-l${OPALIBNAME}', prepending" >&5
- WRAPPER_LIBS="-l${OPALIBNAME} $WRAPPER_LIBS"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-DSHM_DIRECT=__shm_direct_${ch4_shm}__', appending" >&5
+ CPPFLAGS="$CPPFLAGS -DSHM_DIRECT=__shm_direct_${ch4_shm}__"
fi
-elif test "$with_openpa_prefix" = "no" ; then
- # The user doesn't want to use OPA. This may or may not cause MPICH to
- # fail to configure/build, depending on many other factors.
- :
-else
- # The user specified an already-installed OPA; just sanity check, don't
- # subconfigure it
- if test -s "${with_openpa_prefix}/include/opa_primitives.h" -a -s "${with_openpa_prefix}/include/opa_config.h"; then :
- :
-else
- as_fn_error $? "the OpenPA installation in \"${with_openpa_prefix}\" appears broken" "$LINENO" 5
fi
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_openpa_prefix}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_openpa_prefix}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_openpa_prefix}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_openpa_prefix}/include"
-
fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_ofi
+ if test -z "$BUILD_CH4_TRUE"; then :
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-l${OPALIBNAME}\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-l${OPALIBNAME}', not prepending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-l${OPALIBNAME}', prepending" >&5
- WRAPPER_LIBS="-l${OPALIBNAME} $WRAPPER_LIBS"
+ for net in $ch4_netmods ; do
+ case $net in #(
+ ofi) :
+ build_ch4_netmod_ofi=yes ;; #(
+ *) :
+ ;;
+esac
+ if test $net = "ofi" ; then
-fi
+$as_echo "#define HAVE_CH4_NETMOD_OFI 1" >>confdefs.h
- if test -d ${with_openpa_prefix}/lib64 ; then
+$as_echo "#define MPIDI_BUILD_CH4_LOCALITY_INFO 1" >>confdefs.h
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${with_openpa_prefix}/lib64\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${with_openpa_prefix}/lib64', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${with_openpa_prefix}/lib64', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${with_openpa_prefix}/lib64"
+ fi
+ done
-fi
- opalibdir="-L${with_openpa_prefix}/lib64"
- else
- opalibdir="-L${with_openpa_prefix}/lib"
- fi
+# Check whether --with-ch4-netmod-ofi-args was given.
+if test "${with_ch4_netmod_ofi_args+set}" = set; then :
+ withval=$with_ch4_netmod_ofi_args; ofi_netmod_args=$withval
+else
+ ofi_netmod_args=
+fi
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${with_openpa_prefix}/lib\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${with_openpa_prefix}/lib', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${with_openpa_prefix}/lib', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${with_openpa_prefix}/lib"
+ SAVE_IFS=$IFS
+ IFS=':'
+ args_array=$ofi_netmod_args
+ do_scalable_endpoints=false
+ do_direct_provider=false
+ do_av_table=false
+ do_tagged=true
+ do_data=true
+ do_stx_rma=true
+ do_mr_scalable=true
+ echo "Parsing Arguments for OFI Netmod"
+ for arg in $args_array; do
+ case ${arg} in
+ scalable-endpoints)
+ do_scalable_endpoints=true
+ echo " ---> CH4::OFI Provider : $arg"
+ ;;
+ av_table)
+ do_av_table=true
+ echo " ---> CH4::OFI Provider AV table : $arg"
+ ;;
+ direct-provider)
+ do_direct_provider=true
+ echo " ---> CH4::OFI Direct OFI Provider requested : $arg"
+ ;;
+ no-tagged)
+ do_tagged=false
+ echo " ---> CH4::OFI Disable fi_tagged interfaces : $arg"
+ ;;
+ no-data)
+ do_data=false
+ echo " ---> CH4::OFI Disable immediate data field : $arg"
+ ;;
+ no-stx-rma)
+ do_stx_rma=false
+ echo " ---> CH4::OFI Disable per-window EP & counter for RMA : $arg"
+ ;;
+ mr-basic)
+ do_mr_scalable=false
+ echo " ---> CH4::OFI Switching to MR_BASIC mode : $arg"
+ ;;
+ esac
+ done
+ IFS=$SAVE_IFS
-fi
+ if test "$do_scalable_endpoints" = "true"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling OFI netmod scalable endpoints" >&5
+$as_echo "$as_me: Enabling OFI netmod scalable endpoints" >&6;}
-fi
-# ----------------------------------------------------------------------------
-# Threads
-# ----------------------------------------------------------------------------
-#
-# Threads must be supported by the device. First, set the default to
-# be the highest supported by the device
-# "runtime" was an old (now deprecated) option; just map it to multiple
-if test "$enable_threads" = "runtime" ; then enable_threads=multiple ; fi
-if test "$enable_threads" = "yes" ; then enable_threads=default ; fi
-if test "$enable_threads" = "no" ; then enable_threads=single ; fi
-if test "$enable_threads" = default ; then
- # XXX DJG bug is here, PREREQ is not being used right now
- if test -n "$MPID_MAX_THREAD_LEVEL" ; then
- case $MPID_MAX_THREAD_LEVEL in
- MPI_THREAD_SINGLE) enable_threads=single ;;
- MPI_THREAD_FUNNELED) enable_threads=funneled ;;
- MPI_THREAD_SERIALIZED) enable_threads=serialized ;;
- MPI_THREAD_MULTIPLE) enable_threads=multiple ;;
- *) as_fn_error $? "Unrecognized thread level from device $MPID_MAX_THREAD_LEVEL" "$LINENO" 5
- ;;
- esac
- else
- enable_threads=single
- fi
-fi
+ if echo "$CPPFLAGS" | $FGREP -e "\<-DMPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-DMPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-DMPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS', appending" >&5
+ CPPFLAGS="$CPPFLAGS -DMPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS"
-MPICH_THREAD_LEVEL=MPI_THREAD_FUNNELED
-case "$enable_threads" in
- single)
- thread_pkg_required=no
- MPICH_THREAD_LEVEL=MPI_THREAD_SINGLE
- ;;
- funneled)
- thread_pkg_required=no
- MPICH_THREAD_LEVEL=MPI_THREAD_FUNNELED
- ;;
- serialized)
- thread_pkg_required=no
- MPICH_THREAD_LEVEL=MPI_THREAD_SERIALIZED
- ;;
- multiple)
- thread_pkg_required=yes
- MPICH_THREAD_LEVEL=MPI_THREAD_MULTIPLE
- ;;
- *)
- as_fn_error $? "\"$enable_threads\" is not a valid value for --enable-threads" "$LINENO" 5
- ;;
-esac
-# Check that the requested thread level is available.
-threadLevelOK=yes
-if test ! -z "$MPID_MAX_THREAD_LEVEL" ; then
- # Check that MPID_MAX_THREAD_LEVEL is at least as large as the
- # selected MPICH_THREAD_LEVEL
- case $MPICH_THREAD_LEVEL in
- MPI_THREAD_MULTIPLE)
- if test "$MPID_MAX_THREAD_LEVEL" != "MPI_THREAD_MULTIPLE" ; then
- threadLevelOK=no
- fi
- ;;
- MPI_THREAD_SERIALIZED)
- if test "$MPID_MAX_THREAD_LEVEL" != "MPI_THREAD_MULTIPLE" -a \
- "$MPID_MAX_THREAD_LEVEL" != "MPI_THREAD_SERIALIZED" ; then
- threadLevelOK=no
- fi
- ;;
- MPI_THREAD_FUNNELED)
- if test "$MPID_MAX_THREAD_LEVEL" = "MPI_THREAD_SINGLE" ; then
- threadLevelOK=no
- fi
- ;;
- MPI_THREAD_SINGLE)
- ;;
- esac
-fi
-if test "$threadLevelOK" != yes ; then
- as_fn_error $? "The device $with_device does not support $MPICH_THREAD_LEVEL" "$LINENO" 5
fi
-export MPICH_THREAD_LEVEL
-
-cat >>confdefs.h <<_ACEOF
-#define MPICH_THREAD_LEVEL $MPICH_THREAD_LEVEL
-_ACEOF
+ fi
+ if test "$do_av_table" = "true"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling OFI netmod AV table" >&5
+$as_echo "$as_me: Enabling OFI netmod AV table" >&6;}
-if test "$MPICH_THREAD_LEVEL" = "MPI_THREAD_MULTIPLE" ; then
-$as_echo "#define MPICH_IS_THREADED 1" >>confdefs.h
+ if echo "$CPPFLAGS" | $FGREP -e "\<-DMPIDI_OFI_CONFIG_USE_AV_TABLE\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-DMPIDI_OFI_CONFIG_USE_AV_TABLE', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-DMPIDI_OFI_CONFIG_USE_AV_TABLE', appending" >&5
+ CPPFLAGS="$CPPFLAGS -DMPIDI_OFI_CONFIG_USE_AV_TABLE"
fi
-# If not in MPI_THREAD_SINGLE, we need -D_REENTRANT to get thread-safe "errno".
-# Most POSIX systems provide this by default when using -lpthread, but we only use it in MPI_THREAD_MULTIPLE.
-# Some systems (Solaris) still require an explicit define in any case.
-if test "$MPICH_THREAD_LEVEL" != "MPI_THREAD_SINGLE"; then
+ fi
+ if test "$do_direct_provider" = "true"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling OFI netmod direct provider" >&5
+$as_echo "$as_me: Enabling OFI netmod direct provider" >&6;}
- if echo "$CPPFLAGS" | $FGREP -e "\<-D_REENTRANT\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-D_REENTRANT', not appending" >&5
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-DFABRIC_DIRECT\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-DFABRIC_DIRECT', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-D_REENTRANT', appending" >&5
- CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-DFABRIC_DIRECT', appending" >&5
+ CPPFLAGS="$CPPFLAGS -DFABRIC_DIRECT"
fi
-fi
+ fi
-# Check for value thread_cs choice; set the refcount default if necessary
-thread_granularity=MPICH_THREAD_GRANULARITY_SINGLE
-thread_refcount=MPIU_REFCOUNT_NONE
-if test "$enable_threads" = "multiple" ; then
- case $enable_thread_cs in
- global)
- thread_granularity=MPICH_THREAD_GRANULARITY_GLOBAL
- if test "$enable_refcount" = "default" ; then enable_refcount=none ; fi
- ;;
- per-object|per_object)
- thread_granularity=MPICH_THREAD_GRANULARITY_PER_OBJECT
- if test "$enable_refcount" = "default" ; then enable_refcount=lock-free ; fi
- ;;
- lock-free|lock_free|lockfree)
- thread_granularity=MPICH_THREAD_GRANULARITY_LOCK_FREE
- if test "$enable_refcount" = "default" ; then enable_refcount=lock-free ; fi
- if test "$enable_predefined_refcount" = "default" ; then enable_predefined_refcount=no ; fi
- as_fn_error $? "--enable-thread-cs=lock-free is not supported yet, please select a different granularity" "$LINENO" 5
- ;;
- *)
- as_fn_error $? "Unrecognized value $enable_thread_cs for --enable-thread-cs" "$LINENO" 5
- ;;
- esac
+ if test "$do_tagged" = "true"; then
- case $enable_refcount in
- lock-free|lock_free|lockfree)
- thread_refcount=MPIU_REFCOUNT_LOCKFREE
- ;;
- none)
- thread_refcount=MPIU_REFCOUNT_NONE
- ;;
- *)
- as_fn_error $? "Unrecognized value $enable_refcount for --enable-refcount" "$LINENO" 5
- ;;
- esac
-fi
+$as_echo "#define USE_OFI_TAGGED 1" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define MPICH_THREAD_GRANULARITY $thread_granularity
-_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling fi_tagged interfaces" >&5
+$as_echo "$as_me: Enabling fi_tagged interfaces" >&6;}
+ fi
+ if test "$do_data" = "true"; then
-if test "$enable_predefined_refcount" = "no" ; then
+$as_echo "#define USE_OFI_IMMEDIATE_DATA 1" >>confdefs.h
-$as_echo "#define MPIU_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling immediate data field" >&5
+$as_echo "$as_me: Enabling immediate data field" >&6;}
+ fi
-fi
+ if test "$do_stx_rma" = "true"; then
-case $enable_handle_allocation in
- mutex|default)
- handle_allocation_method=MPIU_HANDLE_ALLOCATION_MUTEX
- ;;
- tls)
- handle_allocation_method=MPIU_HANDLE_ALLOCATION_THREAD_LOCAL
- ;;
- *)
- as_fn_error $? "Unrecognized value $enable_handle_allocation for --enable-handle-allocation" "$LINENO" 5
- ;;
-esac
+$as_echo "#define USE_OFI_STX_RMA 1" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define MPIU_HANDLE_ALLOCATION_METHOD $handle_allocation_method
-_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling per-window EP & counter" >&5
+$as_echo "$as_me: Enabling per-window EP & counter" >&6;}
+ fi
+ if test "$do_mr_scalable" = "true"; then
+$as_echo "#define USE_OFI_MR_SCALABLE 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling MR_SCALABLE" >&5
+$as_echo "$as_me: Enabling MR_SCALABLE" >&6;}
+ fi
-cat >>confdefs.h <<_ACEOF
-#define MPIU_THREAD_REFCOUNT $thread_refcount
-_ACEOF
+fi
+ if test "X$build_ch4_netmod_ofi" = "Xyes"; then
+ BUILD_CH4_NETMOD_OFI_TRUE=
+ BUILD_CH4_NETMOD_OFI_FALSE='#'
+else
+ BUILD_CH4_NETMOD_OFI_TRUE='#'
+ BUILD_CH4_NETMOD_OFI_FALSE=
+fi
-# enable-g
-# strip off multiple options, separated by commas
-save_IFS="$IFS"
-IFS=","
-for option in $enable_g ; do
- case "$option" in
- debug|dbg)
- enable_append_g=yes
- ;;
- no|none)
- ;;
- handlealloc)
- perform_handlealloc=yes
- ;;
- handle)
- perform_handle=yes
- ;;
- meminit)
- perform_meminit=yes
- ;;
- memarena)
- perform_memarena=yes
- perform_memtracing=yes
- ;;
- mem)
- perform_memtracing=yes
- ;;
- log)
- perform_dbglog=yes
- ;;
- mutex)
- perform_dbgmutex=yes
- ;;
- mutexnesting)
- perform_mutexnesting=yes
- ;;
- most|yes)
- perform_memtracing=yes
- perform_dbglog=yes
- enable_append_g=yes
- perform_meminit=yes
- perform_dbgmutex=yes
- perform_mutexnesting=yes
- perform_handlealloc=yes
- perform_handle=yes
- ;;
- all)
- perform_memarena=yes
- perform_memtracing=yes
- perform_dbglog=yes
- enable_append_g=yes
- perform_meminit=yes
- perform_dbgmutex=yes
- perform_mutexnesting=yes
- perform_handlealloc=yes
- perform_handle=yes
- ;;
- *)
- IFS=$save_IFS
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $option for enable-g" >&5
-$as_echo "$as_me: WARNING: Unknown value $option for enable-g" >&2;}
- IFS=","
- ;;
- esac
-done
-IFS="$save_IFS"
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_ofi
-if test "$enable_append_g" = "yes" ; then
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_shm_stubshm
+ if test -z "$BUILD_CH4_TRUE"; then :
- if echo "$CFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "CFLAGS(='$CFLAGS') contains '-g', not appending" >&5
-else
- echo "CFLAGS(='$CFLAGS') does not contain '-g', appending" >&5
- CFLAGS="$CFLAGS -g"
+ for shm in $ch4_shm ; do
+ case $shm in #(
+ stubshm) :
+ build_ch4_shm_stubshm=yes ;; #(
+ *) :
+ ;;
+esac
+ done
fi
+ if test "X$build_ch4_shm_stubshm" = "Xyes"; then
+ BUILD_SHM_STUBSHM_TRUE=
+ BUILD_SHM_STUBSHM_FALSE='#'
+else
+ BUILD_SHM_STUBSHM_TRUE='#'
+ BUILD_SHM_STUBSHM_FALSE=
+fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_shm_stubshm
- if echo "$CXXFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "CXXFLAGS(='$CXXFLAGS') contains '-g', not appending" >&5
-else
- echo "CXXFLAGS(='$CXXFLAGS') does not contain '-g', appending" >&5
- CXXFLAGS="$CXXFLAGS -g"
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_shm_posix
-fi
+ if test -z "$BUILD_CH4_TRUE"; then :
+ for shm in $ch4_shm ; do
+ case $shm in #(
+ posix) :
+ build_ch4_shm_posix=yes ;; #(
+ *) :
+ ;;
+esac
+ done
- if echo "$FFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "FFLAGS(='$FFLAGS') contains '-g', not appending" >&5
+# Check whether --with-ch4-shmmod-posix-args was given.
+if test "${with_ch4_shmmod_posix_args+set}" = set; then :
+ withval=$with_ch4_shmmod_posix_args; posix_shmmod_args=$withval
else
- echo "FFLAGS(='$FFLAGS') does not contain '-g', appending" >&5
- FFLAGS="$FFLAGS -g"
-
+ posix_shmmod_args=
fi
+ SAVE_IFS=$IFS
+ IFS=':'
+ args_array=$posix_shmmod_args
+ do_disable_lock_free_queues=false
+ echo "Parsing Arguments for POSIX shmmod"
+ for arg in $args_array; do
+ case ${arg} in
+ disable-lock-free-queues)
+ do_disable_lock_free_queues=true
+ echo " ---> CH4::SHM::POSIX : $arg"
+ ;;
+ esac
+ done
+ IFS=$SAVE_IFS
- if echo "$FCFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "FCFLAGS(='$FCFLAGS') contains '-g', not appending" >&5
+ if test "$do_disable_lock_free_queues" = "true"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling POSIX shared memory lock free queues" >&5
+$as_echo "$as_me: Disabling POSIX shared memory lock free queues" >&6;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling POSIX shared memory lock free queues" >&5
+$as_echo "$as_me: Enabling POSIX shared memory lock free queues" >&6;}
+
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-DMPIDI_POSIX_USE_LOCK_FREE_QUEUES\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-DMPIDI_POSIX_USE_LOCK_FREE_QUEUES', not appending" >&5
else
- echo "FCFLAGS(='$FCFLAGS') does not contain '-g', appending" >&5
- FCFLAGS="$FCFLAGS -g"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-DMPIDI_POSIX_USE_LOCK_FREE_QUEUES', appending" >&5
+ CPPFLAGS="$CPPFLAGS -DMPIDI_POSIX_USE_LOCK_FREE_QUEUES"
fi
+ fi
+ # the POSIX shmmod depends on the common shm code
+ build_mpid_common_shm=yes
-
- if echo "$WRAPPER_CFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "WRAPPER_CFLAGS(='$WRAPPER_CFLAGS') contains '-g', not appending" >&5
+fi
+ if test "X$build_ch4_shm_posix" = "Xyes"; then
+ BUILD_SHM_POSIX_TRUE=
+ BUILD_SHM_POSIX_FALSE='#'
else
- echo "WRAPPER_CFLAGS(='$WRAPPER_CFLAGS') does not contain '-g', appending" >&5
- WRAPPER_CFLAGS="$WRAPPER_CFLAGS -g"
-
+ BUILD_SHM_POSIX_TRUE='#'
+ BUILD_SHM_POSIX_FALSE=
fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_shm_posix
- if echo "$WRAPPER_CXXFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "WRAPPER_CXXFLAGS(='$WRAPPER_CXXFLAGS') contains '-g', not appending" >&5
-else
- echo "WRAPPER_CXXFLAGS(='$WRAPPER_CXXFLAGS') does not contain '-g', appending" >&5
- WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -g"
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_shm
+ if test "X$build_mpid_common_shm" = "Xyes"; then
+ BUILD_MPID_COMMON_SHM_TRUE=
+ BUILD_MPID_COMMON_SHM_FALSE='#'
+else
+ BUILD_MPID_COMMON_SHM_TRUE='#'
+ BUILD_MPID_COMMON_SHM_FALSE=
fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_shm
- if echo "$WRAPPER_FFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "WRAPPER_FFLAGS(='$WRAPPER_FFLAGS') contains '-g', not appending" >&5
-else
- echo "WRAPPER_FFLAGS(='$WRAPPER_FFLAGS') does not contain '-g', appending" >&5
- WRAPPER_FFLAGS="$WRAPPER_FFLAGS -g"
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_datatype
+ if test "X$build_mpid_common_datatype" = "Xyes"; then
+ BUILD_MPID_COMMON_DATATYPE_TRUE=
+ BUILD_MPID_COMMON_DATATYPE_FALSE='#'
+else
+ BUILD_MPID_COMMON_DATATYPE_TRUE='#'
+ BUILD_MPID_COMMON_DATATYPE_FALSE=
fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_datatype
- if echo "$WRAPPER_FCFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
- echo "WRAPPER_FCFLAGS(='$WRAPPER_FCFLAGS') contains '-g', not appending" >&5
-else
- echo "WRAPPER_FCFLAGS(='$WRAPPER_FCFLAGS') does not contain '-g', appending" >&5
- WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -g"
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_thread
+ if test "X$build_mpid_common_thread" = "Xyes"; then
+ BUILD_MPID_COMMON_THREAD_TRUE=
+ BUILD_MPID_COMMON_THREAD_FALSE='#'
+else
+ BUILD_MPID_COMMON_THREAD_TRUE='#'
+ BUILD_MPID_COMMON_THREAD_FALSE=
fi
-fi
-if test -n "$perform_meminit" ; then
-$as_echo "#define MPICH_DEBUG_MEMINIT 1" >>confdefs.h
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_thread
-fi
-if test "$perform_handlealloc" = yes ; then
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_portals4
-$as_echo "#define MPICH_DEBUG_HANDLEALLOC 1" >>confdefs.h
+ if test -z "$BUILD_CH4_TRUE"; then :
-fi
-if test "X$perform_handle" = "Xyes"; then :
+ for net in $ch4_netmods ; do
+ case $net in #(
+ portals4) :
+ build_ch4_netmod_portals4=yes ;; #(
+ *) :
+ ;;
+esac
+ if test $net = "portals4" ; then
-$as_echo "#define MPICH_DEBUG_HANDLES 1" >>confdefs.h
+$as_echo "#define HAVE_CH4_NETMOD_PORTALS4 1" >>confdefs.h
-fi
+ # if test "$build_ch4_locality_info" != "yes" ; then
+ # AC_DEFINE(MPIDI_BUILD_CH4_LOCALITY_INFO, 1, [CH4 should build locality info])
+ # build_ch4_locality_info="yes"
+ # fi
+ fi
+ done
-if test -n "$perform_memtracing" ; then
- enable_g_mem=yes
+fi
+ if test "X$build_ch4_netmod_portals4" = "Xyes"; then
+ BUILD_CH4_NETMOD_PORTALS4_TRUE=
+ BUILD_CH4_NETMOD_PORTALS4_FALSE='#'
+else
+ BUILD_CH4_NETMOD_PORTALS4_TRUE='#'
+ BUILD_CH4_NETMOD_PORTALS4_FALSE=
+fi
-$as_echo "#define USE_MEMORY_TRACING 1" >>confdefs.h
- if test -n "$perform_memarena" ; then
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_portals4
-$as_echo "#define MPICH_DEBUG_MEMARENA 1" >>confdefs.h
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_stubnm
- fi
-fi
-USE_DBG_LOGGING=0
-if test -n "$perform_dbglog" ; then
- if test "$with_logging" != "none" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-logging overrides --enable-g=log" >&5
-$as_echo "$as_me: WARNING: --with-logging overrides --enable-g=log" >&2;}
- else
+ if test -z "$BUILD_CH4_TRUE"; then :
-$as_echo "#define USE_DBG_LOGGING 1" >>confdefs.h
+ for net in $ch4_netmods ; do
+ case $net in #(
+ stubnm) :
+ build_ch4_netmod_stubnm=yes ;; #(
+ *) :
+ ;;
+esac
+ done
- USE_DBG_LOGGING=1
- fi
fi
-# allow @USE_DBG_LOGGING@ substitution in glue_romio.h
-
+ if test "X$build_ch4_netmod_stubnm" = "Xyes"; then
+ BUILD_CH4_NETMOD_STUBNM_TRUE=
+ BUILD_CH4_NETMOD_STUBNM_FALSE='#'
+else
+ BUILD_CH4_NETMOD_STUBNM_TRUE='#'
+ BUILD_CH4_NETMOD_STUBNM_FALSE=
+fi
-if test -n "$perform_dbgmutex" ; then
-$as_echo "#define MPICH_DEBUG_MUTEX 1" >>confdefs.h
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_stubnm
-fi
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sched
-pac_cross_compiling=no
-if test "$with_cross" != "no" ; then
- if test -s "$with_cross" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Reading values from cross-compilation file $with_cross" >&5
-$as_echo "Reading values from cross-compilation file $with_cross" >&6; }
- . $with_cross
- # Autoconf 2.52 no longer sets cross_compiling except with the
- # awkward "targethost" options.
- pac_cross_compiling=yes
- cross_compiling=yes
- ac_cv_prog_cc_cross=yes
- ac_cv_prog_f77_cross=yes
- ac_cv_prog_fc_cross=yes
- ac_cv_prog_cxx_cross=yes
- export cross_compiling
- # Export all cross variables. Any subsidiary configure should also
- # export CROSS_xxx
- rm -f confcross
- (set) 2>&1 | grep CROSS_ | \
- sed -e 's/^/export /g' -e 's/=.*//g' > confcross
- . confcross
- rm -f confcross
- fi
+ if test "X$build_mpid_common_sched" = "Xyes"; then
+ BUILD_MPID_COMMON_SCHED_TRUE=
+ BUILD_MPID_COMMON_SCHED_FALSE='#'
+else
+ BUILD_MPID_COMMON_SCHED_TRUE='#'
+ BUILD_MPID_COMMON_SCHED_FALSE=
fi
-# This goes here because we need the top_srcdir
-if test "$enable_romio" = "yes" ; then
- if test -d $use_top_srcdir/src/mpi/romio ; then
- subsystems="$subsystems src/mpi/romio"
-$as_echo "#define HAVE_ROMIO 1" >>confdefs.h
-
-
- # make it possible to "#include" mpio.h at build time
- #
- # This ought to be sufficient, but there is also a symlink setup in
- # src/include to accomodate current mpicc limitations. See
- # src/mpi/Makefile.mk for more info.
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_common_sched
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_ucx
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/mpi/romio/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/mpi/romio/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/mpi/romio/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/mpi/romio/include"
+ if test -z "$BUILD_CH4_TRUE"; then :
-fi
+ for net in $ch4_netmods ; do
+ case $net in #(
+ ucx) :
+ build_ch4_netmod_ucx=yes ;; #(
+ *) :
+ ;;
+esac
+ if test $net = "ucx" ; then
+$as_echo "#define HAVE_CH4_NETMOD_UCX 1" >>confdefs.h
- # Set environment variables that the romio configure expects
- export use_top_srcdir
- top_build_dir=`pwd`
- export top_build_dir
- # if there is no $top_build_dir/lib, romio puts lib in wrong place
- # This test used -e under Linux, but not all test programs understand
- # -e
- if test ! -d lib ; then mkdir lib ; fi
- # tell mpi.h to include mpio.h
+ if test "$build_ch4_locality_info" != "yes" ; then
-if test "$enable_romio" = "yes" ; then HAVE_ROMIO='#include "mpio.h"'; fi
+$as_echo "#define MPIDI_BUILD_CH4_LOCALITY_INFO 1" >>confdefs.h
+ build_ch4_locality_info="yes"
+ fi
+ fi
+ done
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ROMIO src directory is not available" >&5
-$as_echo "$as_me: WARNING: ROMIO src directory is not available" >&2;}
- fi
fi
-
- if test x$enable_romio = xyes; then
- BUILD_ROMIO_TRUE=
- BUILD_ROMIO_FALSE='#'
+ if test "X$build_ch4_netmod_ucx" = "Xyes"; then
+ BUILD_CH4_NETMOD_UCX_TRUE=
+ BUILD_CH4_NETMOD_UCX_FALSE='#'
else
- BUILD_ROMIO_TRUE='#'
- BUILD_ROMIO_FALSE=
+ BUILD_CH4_NETMOD_UCX_TRUE='#'
+ BUILD_CH4_NETMOD_UCX_FALSE=
fi
-#
-# FIXME: If an external device, don't necessarily complain (e.g.,
-# if the device is already built)
-if test ! -d $devicedir ; then
- as_fn_error $? "Device $device_name is unknown" "$LINENO" 5
-elif test -f $devicedir/subconfigure.m4 ; then
- # this is a new-style subconfigure device, don't add it as a subsystem
- :
-elif test ! -x $devicedir/configure ; then
- if test -s $devicedir/configure ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The configure in $devicedir exists but is not executable" >&5
-$as_echo "$as_me: WARNING: The configure in $devicedir exists but is not executable" >&2;}
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Device $device_name has no configure" >&5
-$as_echo "$as_me: WARNING: Device $device_name has no configure" >&2;}
- fi
- device_name=""
-else
- # Add the device to the configure list
- devsubsystems="$devsubsystems $devicereldir"
- # Make device_name available to subdirs
-fi
-
-# with-pm
-if test "$with_pm" = "none" ; then
- # add "none" as synonym for "no" to agree with older erroneous docs
- with_pm="no"
-fi
-if test "$MPID_NO_PM" = yes ; then
- if test "$with_pm" != "default" -a "$with_pm" != no ; then
- as_fn_error $? "The PM chosen ($with_pm) is is not valid for the selected device ($with_device)" "$LINENO" 5
- fi
- # This is used to change with_pm=default to with_pm=no in the case
- # where the device does not want a PM
- with_pm=no
-fi
-if test -z "$with_pm" ; then
- with_pm="no"
-fi
-if test "$with_pmi" = "uni" -a "$with_pm" = "default" ; then
- with_pm="no"
-fi
-if test "$with_pm" = "default" -o "$with_pm" = "yes" ; then
- if test ! -z "$MPID_DEFAULT_PM" ; then
- with_pm=${MPID_DEFAULT_PM}
- else
- with_pm=hydra
- fi
-fi
-# We allow multiple pm names, separated by : or ,
-if test "$with_pm" != "no" ; then
- pm_names="`echo $with_pm | sed -e 's/:/ /g' -e 's/,/ /g'`"
+# Check whether --with-ch4-netmod-ucx-args was given.
+if test "${with_ch4_netmod_ucx_args+set}" = set; then :
+ withval=$with_ch4_netmod_ucx_args; ucx_netmod_args=$withval
else
- pm_names=""
-fi
-#
-hasError=no
-# We need to be careful about PM's that have either conflicting
-# requirements (e.g., different PMI implementations) or different
-# optional features (e.g., MPID_PM_NAMESERVER).
-# In addition, we need to interleave the setup of the PMI and PM
-# modules. The order is as follows:
-#
-# For each PM, execute the mpichprereq script for that pm (if present).
-# This script provides information about the PM, including which PMI
-# implementations are supported.
-#
-# Then, for the selected PMI, the setup script (if any) is run. This is
-# necessary because the setup of the PM may require information discovered
-# or provided duing the PMI setup step.
-#
-# Finally, for each PM, the setup script is executed.
-#
-# Step 1: invoke the mpichprereq for each PM
-for pm_name in $pm_names ; do
- if test -z "$first_pm_name" ; then
- first_pm_name=$pm_name
- export first_pm_name
- fi
- if test ! -d $use_top_srcdir/src/pm/$pm_name ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $use_top_srcdir/src/pm/$pm_name does not exist. PM is unknown" >&5
-$as_echo "$as_me: WARNING: $use_top_srcdir/src/pm/$pm_name does not exist. PM is unknown" >&2;}
- hasError=yes
- elif test ! -x $use_top_srcdir/src/pm/$pm_name/configure -a \
- ! -f $use_top_srcdir/src/pm/$pm_name/subconfigure.m4 ; then
- if test -s $use_top_srcdir/src/pm/$pm_name/configure ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The configure in $use_top_srcdir/src/pm/$pm_name exists but is not executable" >&5
-$as_echo "$as_me: WARNING: The configure in $use_top_srcdir/src/pm/$pm_name exists but is not executable" >&2;}
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pm $pm_name has no configure or subconfigure.m4" >&5
-$as_echo "$as_me: WARNING: pm $pm_name has no configure or subconfigure.m4" >&2;}
- fi
- pm_name=""
- hasError=yes
- else
- nameserver=$MPID_PM_NAMESERVER
- if test -f $use_top_srcdir/src/pm/$pm_name/mpichprereq ; then
- echo sourcing $use_top_srcdir/src/pm/$pm_name/mpichprereq
- . $use_top_srcdir/src/pm/$pm_name/mpichprereq
- fi
- # Check for a change; if found, we'll take the default
- if test "$MPID_PM_NAMESERVER" != "$nameserver" ; then
- if test "$first_pm_name" != "$pm_name" ; then
- # Reject suggestion (use the default, common mode)
- MPID_PM_NAMESERVER=""
- fi
- fi
- fi
-done
-if test "$hasError" != no ; then
- as_fn_error $? "Aborting configure because an error was seen in the selection of process managers" "$LINENO" 5
+ ucx_netmod_args=
fi
-#
-# pm_name is the *primary* pm
-pm_name=$first_pm_name
-
-# Some versions of PM and PMI require a special definition
-if test "$PMI_REQUIRES_READABLE_TOKENS" = "yes" ; then
-$as_echo "#define USE_HUMAN_READABLE_TOKENS 1" >>confdefs.h
+ SAVE_IFS=$IFS
+ IFS=':'
+ args_array=$ucx_netmod_args
+ do_am_only=false
+ echo "Parsing Arguments for OFI Netmod"
+ for arg in $args_array; do
+ case ${arg} in
+ am-only)
+ do_am_only=true
+ echo " ---> CH4::UCX Disable native tagged and RMA communication : $arg"
+ esac
+ done
+ IFS=$SAVE_IFS
-fi
+ if test "$do_am_only" = "true"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling native UCX tagged and RMA communication" >&5
+$as_echo "$as_me: Disabling native UCX tagged and RMA communication" >&6;}
-# Step 2:
-# Once we've selected the process manager (or managers), we can
-# check that we have a compatible PMI implemenatation.
-# with-pmi
-if test "$MPID_NO_PMI" = yes ; then
- if test "$with_pmi" != "default" -a "$with_pmi" != no ; then
- as_fn_error $? "The PMI chosen ($with_pmi) is is not valid for the selected device ($with_device)" "$LINENO" 5
- fi
- # This is used to change with_pmi=default to with_pmi=no in the case
- # where the device does not want a PMI
- with_pmi=no
-elif test "$with_pmi" != "no" ; then
- if test "$with_pmi" = "default" -o "$with_pmi" = "yes" ; then
- if test -n "$PM_REQUIRES_PMI" ; then
- with_pmi=$PM_REQUIRES_PMI
- else
- with_pmi=simple
- fi
- elif test -n "$PM_REQUIRES_PMI" ; then
- # Test for compatibility between pm and pmi choices
- if test "$PM_REQUIRES_PMI" != "$with_pmi" ; then
- as_fn_error $? "The PM chosen ($with_pm) requires the PMI implementation $PM_REQUIRES_PMI but $with_pmi was selected as the PMI implementation." "$LINENO" 5
- fi
- fi
- pmi_name=$with_pmi
- if test ! -d $use_top_srcdir/src/pmi/$pmi_name ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $use_top_srcdir/src/pmi/$pmi_name does not exist. PMI is unknown" >&5
-$as_echo "$as_me: WARNING: $use_top_srcdir/src/pmi/$pmi_name does not exist. PMI is unknown" >&2;}
- elif test ! -x $use_top_srcdir/src/pmi/$pmi_name/configure ; then
- if test ! -f $use_top_srcdir/src/pmi/$pmi_name/subconfigure.m4 ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pmi $pmi_name has no configure or subconfigure.m4" >&5
-$as_echo "$as_me: WARNING: pmi $pmi_name has no configure or subconfigure.m4" >&2;}
- pmi_name=""
- fi
- else
- # only add to subsystems if a full configure is present
- subsystems="$subsystems src/pmi/$pmi_name"
- fi
+ if echo "$CPPFLAGS" | $FGREP -e "\<-DMPICH_UCX_AM_ONLY\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-DMPICH_UCX_AM_ONLY', not appending" >&5
else
- as_fn_error $? "A PMI implementation must be selected or the default used." "$LINENO" 5
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-DMPICH_UCX_AM_ONLY', appending" >&5
+ CPPFLAGS="$CPPFLAGS -DMPICH_UCX_AM_ONLY"
+
fi
-# Step 3: complete pm setup.
-# Note that checks for errors have already been performed, so this
-# loop does not need to perform any extra error checks.
-# Note that this uses this_pm_name because pm_name must be the *first*
-# of the PM names
-for this_pm_name in $pm_names ; do
- # only add the PM to the subsystems if it has a full configure to be
- # executed
- if test -f $use_top_srcdir/src/pm/$this_pm_name/configure ; then
- subsystems="$subsystems src/pm/$this_pm_name"
- fi
- if test -f $use_top_srcdir/src/pm/$this_pm_name/setup_pm ; then
- echo sourcing $use_top_srcdir/src/pm/$this_pm_name/setup_pm
- . $use_top_srcdir/src/pm/$this_pm_name/setup_pm
fi
-done
-
-# Check for whether the compiler defines a symbol that contains the
-# function name. The MPICH code, for greater portability, defines
-# its own symbols, FCNAME (a string) and FUNCNAME (a token that is not a
-# string). Code should use these symbols where possible. However,
-# some debugging macros may want to use a compiler-provided symbol
-# for the function name, and this check makes it possible to
-# define such macros in a way that is always correct.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __func__" >&5
-$as_echo_n "checking whether the compiler defines __func__... " >&6; }
-if ${pac_cv_have__func__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch4_netmod_ucx
-tmp_am_cross=no
-if test "$cross_compiling" = yes; then :
- tmp_am_cross=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+## begin expansion of PAC_SUBCFG_PREREQ_src_pm_remshell
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__func__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+## end expansion of PAC_SUBCFG_PREREQ_src_pm_remshell
+## begin expansion of PAC_SUBCFG_PREREQ_src_pm_util
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_have__func__=yes
-else
- pac_cv_have__func__=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-if test "$tmp_am_cross" = yes ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+## end expansion of PAC_SUBCFG_PREREQ_src_pm_util
+## begin expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_portals4
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__func__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+ if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+ for net in $nemesis_networks ; do
+ case $net in #(
+ portals4) :
+ build_nemesis_netmod_portals4=yes ;; #(
+ *) :
+ ;;
+esac
+ done
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_have__func__=yes
-else
- pac_cv_have__func__=no
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
+ if test "X$build_nemesis_netmod_portals4" = "Xyes"; then
+ BUILD_NEMESIS_NETMOD_PORTALS4_TRUE=
+ BUILD_NEMESIS_NETMOD_PORTALS4_FALSE='#'
+else
+ BUILD_NEMESIS_NETMOD_PORTALS4_TRUE='#'
+ BUILD_NEMESIS_NETMOD_PORTALS4_FALSE=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__func__" >&5
-$as_echo "$pac_cv_have__func__" >&6; }
-if test "$pac_cv_have__func__" = "yes" ; then
-
-$as_echo "#define HAVE__FUNC__ /**/" >>confdefs.h
-fi
+## end expansion of PAC_SUBCFG_PREREQ_src_mpid_ch3_channels_nemesis_netmod_portals4
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __FUNC__" >&5
-$as_echo_n "checking whether the compiler defines __FUNC__... " >&6; }
-if ${pac_cv_have_cap__func__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-tmp_am_cross=no
-if test "$cross_compiling" = yes; then :
- tmp_am_cross=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+# ----------------------------------------------------------------------------
+# Set default library names if names haven't already been provided
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNC__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_have_cap__func__=yes
-else
- pac_cv_have_cap__func__=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+MPILIBNAME=${MPILIBNAME:-"mpi"}
+PMPILIBNAME_set=no
+if test -n "$PMPILIBNAME" ; then
+ PMPILIBNAME_set=yes
fi
+PMPILIBNAME=${PMPILIBNAME:-"p$MPILIBNAME"}
+# Note that the name for this library may be updated after we check for
+# enable_shmem
+# Fortran names are set later.
+# We use a different library for the C++ wrappers to avoid problems when
+# creating shared libraries
+if test -z "$MPICXXLIBNAME" ; then MPICXXLIBNAME="${MPILIBNAME}cxx" ; fi
+if test -z "$MPIFCLIBNAME" ; then MPIFCLIBNAME="${MPILIBNAME}fort" ; fi
+export MPICXXLIBNAME
+export MPIFCLIBNAME
-if test "$tmp_am_cross" = yes ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNC__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+# We'll set FORTRAN_BINDING to 1 if we support Fortran
+FORTRAN_BINDING=0
+# enable-fast
+# strip off multiple options, separated by commas
+save_IFS="$IFS"
+IFS=","
+for option in $enable_fast ; do
+ case "$option" in
+ O*)
+ enable_fast_opts=$option
+ ;;
+ ndebug)
+ enable_fast_ndebug=yes
+ ;;
+ all|yes)
+ enable_fast_ndebug=yes
+ enable_fast_opts=O2
+ ;;
+ none|no)
+ enable_fast_ndebug=no
+ enable_fast_opts=O0
+ ;;
+ *)
+ IFS="$save_IFS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $option for --enable-fast" >&5
+$as_echo "$as_me: WARNING: Unknown value $option for --enable-fast" >&2;}
+ IFS=","
+ ;;
+ esac
+done
+IFS="$save_IFS"
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_have__func__=yes
-else
- pac_cv_have__func__=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+if test -n "$enable_fast_opts" ; then
+ # Allows O<n> where <n> can be [0-9] or ' '.
+ opt_flags=`echo $enable_fast_opts | sed -e 's%\(O0-9 \)%\1%g'`
+ if test -n "$opt_flags" ; then
+ MPI_DEFAULT_COPTS="-$enable_fast_opts"
+ MPI_DEFAULT_CXXOPTS="-$enable_fast_opts"
+ MPI_DEFAULT_FOPTS="-$enable_fast_opts"
+ MPI_DEFAULT_FCOPTS="-$enable_fast_opts"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_fast_opts for --enable-fast" >&5
+$as_echo "$as_me: WARNING: Unknown value $enable_fast_opts for --enable-fast" >&2;}
+ fi
fi
+if test "$enable_fast_ndebug" = "yes" ; then
+ CFLAGS="$CFLAGS -DNDEBUG -DNVALGRIND"
+ CXXFLAGS="$CXXFLAGS -DNDEBUG -DNVALGRIND"
+ # MPICH does NOT assume any preprocessing support from the Fortran compiler,
+ # so no Fortran files contain any preprocessing statements.
+ # Don't set FFLAGS or FCFLAGS with any -D.
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cap__func__" >&5
-$as_echo "$pac_cv_have_cap__func__" >&6; }
-
-if test "$pac_cv_have_cap__func__" = "yes" ; then
-
-$as_echo "#define HAVE_CAP__FUNC__ /**/" >>confdefs.h
+# error-checking
+# Change default into the specific value of the default
+if test "$enable_error_checking" = "yes" ; then
+ enable_error_checking=all
fi
+# mpir_ext.h needs the variable HAVE_ERROR_CHECKING to have the value 0 or 1
+HAVE_ERROR_CHECKING=0
+case "$enable_error_checking" in
+ no)
+ # if error checking has been disabled, then automatically disable the error
+ # checking tests in the test suite
+ ac_configure_args="${ac_configure_args} --disable-checkerrors"
+ ;;
+ all|runtime)
+ error_checking_kind=`echo $enable_error_checking | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ error_checking_kind=MPID_ERROR_LEVEL_$error_checking_kind
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler sets __FUNCTION__" >&5
-$as_echo_n "checking whether the compiler sets __FUNCTION__... " >&6; }
-if ${pac_cv_have__function__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-tmp_am_cross=no
-if test "$cross_compiling" = yes; then :
- tmp_am_cross=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ERROR_CHECKING $error_checking_kind
+_ACEOF
+ HAVE_ERROR_CHECKING=1
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_error_checking for enable-error-checking" >&5
+$as_echo "$as_me: WARNING: Unknown value $enable_error_checking for enable-error-checking" >&2;}
+ ;;
+esac
+# permit @HAVE_ERROR_CHECKING@ substitution in mpir_ext.h
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNCTION__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+# error-messages
+case "$enable_error_messages" in
+ no|none)
+ error_message_kind="MPICH_ERROR_MSG__NONE"
+ ;;
+ all|yes)
+ error_message_kind="MPICH_ERROR_MSG__ALL"
+ ;;
+ generic)
+ error_message_kind="MPICH_ERROR_MSG__GENERIC"
+ ;;
+ class)
+ error_message_kind="MPICH_ERROR_MSG__CLASS"
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_error_messages for enable-error-messages" >&5
+$as_echo "$as_me: WARNING: Unknown value $enable_error_messages for enable-error-messages" >&2;}
+ ;;
+esac
+cat >>confdefs.h <<_ACEOF
+#define MPICH_ERROR_MSG_LEVEL $error_message_kind
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_have__function__=yes
-else
- pac_cv_have__function__=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-if test "$tmp_am_cross" = yes ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+#error-tags
+if test "$enable_tag_error_bits" = "yes" ; then
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNCTION__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+$as_echo "#define HAVE_TAG_ERROR_BITS 1" >>confdefs.h
+fi
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_have__func__=yes
+# ----------------------------------------------------------------------------
+#
+# enable-timing and with-logging
+#
+# Still to do: add subsets: e.g., class=pt2pt,class=coll. See mpich doc
+#
+# Logging and timing are intertwined. If you select logging, you
+# may also need to select a timing level. If no timing is selected
+# but logging with rlog is selected, make "all" the default timing level.
+#
+# FIXME: make timing and logging options work more cleanly together,
+# particularly when other logging options are selected (e.g., logging is not
+# rlog).
+# ----------------------------------------------------------------------------
+ if test "X$with_logging" = "Xrlog"; then
+ BUILD_LOGGING_RLOG_TRUE=
+ BUILD_LOGGING_RLOG_FALSE='#'
else
- pac_cv_have__func__=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+ BUILD_LOGGING_RLOG_TRUE='#'
+ BUILD_LOGGING_RLOG_FALSE=
fi
+collect_stats=false
+logging_required=false
+if test "$enable_timing" = "default" ; then
+ if test "$with_logging" = "rlog" ; then
+ enable_timing=all
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__function__" >&5
-$as_echo "$pac_cv_have__function__" >&6; }
-
-if test "$pac_cv_have__function__" = "yes" ; then
-
-$as_echo "#define HAVE__FUNCTION__ /**/" >>confdefs.h
+timing_name=$enable_timing
+case "$enable_timing" in
+ no)
+ timing_name=none
+ ;;
+ time)
+ collect_stats=true
+ ;;
+ log|log_detailed)
+ logging_required=true
+ ;;
+ yes)
+ timing_name=all
+ collect_stats=true
+ logging_required=true
+ ;;
+ all|runtime)
+ collect_stats=true
+ logging_required=true
+ ;;
+ none|default)
+ timing_name=none
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $enable_timing for enable-timing" >&5
+$as_echo "$as_me: WARNING: Unknown value $enable_timing for enable-timing" >&2;}
+ enable_timing=no
+ timing_name=none
+ ;;
+esac
+#
+# The default logging package is rlog; you can get it by
+# specifying --with-logging or --with-logging=rlog
+#
+case $with_logging in
+ yes)
+ logging_name=rlog
+ ;;
+ no|none)
+ logging_name=none
+ ;;
+ default)
+ if test "$logging_required" = "true" ; then
+ logging_name=rlog
+ else
+ logging_name=none
+ fi
+ ;;
+ *)
+ logging_name=$with_logging
+ ;;
+esac
+#
+# Include the selected logging subsystem
+#
+# Choices:
+# 1) A subdir of src/util/logging
+# This directory must contain a configure which will be executed
+# to build the
+# 2) An external directory
+# This directory must contain
+# a mpilogging.h file
+# It may contain
+# a setup_logging script
+# a configure
+#
+#
+logging_subsystems=
+if test "$logging_name" != "none" ; then
+ # Check for an external name (directory containing a /)
+ hasSlash=`echo A$logging_name | sed -e 's%[^/]%%g'`
+ if test -n "$hasSlash" ; then
+ # Check that the external logging system is complete.
+ # Any failure will cause configure to abort
+ if test ! -d $logging_name ; then
+ as_fn_error $? "External logging directory $logging_name not found. Configure aborted" "$LINENO" 5
+ logging_name=none
+ elif test ! -s $logging_name/mpilogging.h ; then
+ as_fn_error $? "External logging header $logging_name/mpilogging.h not found. Configure aborted" "$LINENO" 5
+ logging_name=none
+ fi
+ logdir=$logging_name
+ # Force the logdir to be absolute
+ logdir=`cd $logdir && pwd`
+ # Switch name to "external" because that is how the MPICH
+ # code will know it
+ logging_name=external
+ # Add the dir to the include paths
+ #CPPFLAGS="$CPPFLAGS -I$logdir"
+ CPPFLAGS="$CPPFLAGS -I$logdir"
+ # Add to the list of external modules to setup
+ if test -x $logdir/setup_logging ; then
+ EXTERNAL_SETUPS="$EXTERNAL_SETUPS $logdir/setup_logging"
+ fi
+ else
+ logdir=$srcdir/src/util/logging
+ logreldir=src/util/logging/$logging_name
+ logging_subsystems="$logging_subsystems $logreldir"
+ for dir in $logging_name ; do
+ if test ! -d $logdir/$dir ; then
+ as_fn_error $? "$logdir/$dir does not exist. Configure aborted" "$LINENO" 5
+ logging_name=none
+ fi
+ done
+ for dir in $logging_subsystems ; do
+ if test ! -x $srcdir/$dir/configure ; then
+ as_fn_error $? "$srcdir/$dir has no configure (required). Configure aborted" "$LINENO" 5
+ logging_name=none
+ fi
+ done
+ fi
fi
+#
+# FIXME: Logging doesn't necessarily require timing (e.g., simply logging the
+# sequence of routines).
+if test "$logging_name" != "none" ; then
+ if test "$enable_timing" != "no" ; then
+ if test "$enable_timing" = "default" -o "$enable_timing" = "none" ; then
+ enable_timing=log
+ timing_name=log
+ fi
+ subsystems="$subsystems $logging_subsystems"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Timing was disabled. Logging has been disabled as well." >&5
+$as_echo "$as_me: WARNING: Timing was disabled. Logging has been disabled as well." >&2;}
+ with_logging=no
+ logging_name=none
+ fi
+else
+ if test "$logging_required" = "true" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Timing was enabled with log option but no logging library is available. Timing has been disabled." >&5
+$as_echo "$as_me: WARNING: Timing was enabled with log option but no logging library is available. Timing has been disabled." >&2;}
+ enable_timing=no
+ timing_name=none
+ fi
+fi
+if test "$timing_name" != "none" ; then
+ timing_kind=`echo $timing_name | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ timing_kind=MPICH_TIMING_KIND__$timing_kind
+cat >>confdefs.h <<_ACEOF
+#define HAVE_TIMING $timing_kind
+_ACEOF
+ if test "$collect_stats" = "true" ; then
-# Check if $MPI_DEFAULT_COPTS is valid with $CC
-if test -n "$MPI_DEFAULT_COPTS" ; then
- if test "$enable_check_compiler_flags" = "yes" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts option $MPI_DEFAULT_COPTS" >&5
-$as_echo_n "checking whether C compiler accepts option $MPI_DEFAULT_COPTS... " >&6; }
-pac_opt="$MPI_DEFAULT_COPTS"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CFLAGS_orig="$CFLAGS"
-CFLAGS_opt="$pac_opt $CFLAGS"
-pac_result="unknown"
+$as_echo "#define COLLECT_STATS 1" >>confdefs.h
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ fi
+fi
- #include <stdio.h>
- const char hw[] = "Hello, World\n";
-int
-main ()
-{
-fputs (hw, stdout);
- ;
- return 0;
-}
+use_logging_variable="MPICH_LOGGING__`echo $logging_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
+cat >>confdefs.h <<_ACEOF
+#define USE_LOGGING $use_logging_variable
_ACEOF
-CFLAGS="$CFLAGS_orig"
-rm -f pac_test1.log
-
-
-# START of PUSHVAL
-
-if ${pac_stk_ac_link_level+:} false; then :
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+# ----------------------------------------------------------------------------
+# End of logging tests
+# ----------------------------------------------------------------------------
-else
+# ----------------------------------------------------------------------------
+# Check to see if the device does not support spawn.
+# FIXME: This should provide the option of not building the dynamic
+# process routines. It could also allow us to specialize support
+# for all processes are members of MPI_COMM_WORLD (only one comm_world).
+# ----------------------------------------------------------------------------
+if test "$MPID_NO_SPAWN" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The device $with_device does not support MPI dynamic process routines" >&5
+$as_echo "$as_me: WARNING: The device $with_device does not support MPI dynamic process routines" >&2;}
+fi
- pac_stk_ac_link_level=0
+# MPL
-fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
+MPLLIBNAME=${MPLLIBNAME:-"mpl"}
+export MPLLIBNAME
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+# Check whether --with-mpl-prefix was given.
+if test "${with_mpl_prefix+set}" = set; then :
+ withval=$with_mpl_prefix;
+else
+ with_mpl_prefix=embedded
fi
+ mplsrcdir=""
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+mpllibdir=""
+mpllib=""
-# END of PUSHVAL
+if test "$with_mpl_prefix" = "embedded" ; then
+ # no need for libtool versioning when embedding MPL
+ mpl_subdir_args="--disable-versioning --enable-embedded"
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
-if ac_fn_c_try_link "$LINENO"; then :
+ pac_dir="src/mpl"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== configuring src/mpl =====" >&5
+$as_echo "$as_me: ===== configuring src/mpl =====" >&6;}
+ pac_abs_srcdir=`(cd $srcdir && pwd)`
- CFLAGS="$CFLAGS_opt"
- rm -f pac_test2.log
+ if test -f $pac_abs_srcdir/src/mpl/setup ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/mpl/setup" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/src/mpl/setup" >&6;}
+ . $pac_abs_srcdir/src/mpl/setup
+ fi
+ # Adapted for MPICH from the autoconf-2.67 implementation of
+ # AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
+ # local modifications.
-# START of PUSHVAL
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up. Otherwise relative paths (like --srcdir=.. from
+ # make distcheck) will be incorrect.
+ pac_sub_configure_args="$mpl_subdir_args"
+ pac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for pac_arg
+ do
+ if test -n "$pac_prev"; then
+ pac_prev=
+ continue
+ fi
+ case $pac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ pac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ pac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ pac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ # MPICH note: this is a more robust version of the "precious
+ # variable" propagation code that was present in the previous
+ # incarnation of this macro
+ for pac_pvar in $ac_precious_vars ; do
+ # check if configure argument token contains the
+ # precious variable, i.e. "name_of_prec_var=".
+ if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
+ # check if current precious variable is set in env
+ eval pvar_set=\${$pac_pvar+set}
+ if test "$pvar_set" = "set" ; then
+ # Append 'name_of_prec_var=value_of_prec_var'
+ # to the subconfigure arguments list, where
+ # value_of_prec_var is fetched from the env.
+ # this also overrides any value set on the command line
+ eval pac_pval=\${$pac_pvar}
+ pac_arg="$pac_pvar=$pac_pval"
+ break
+ fi
+ fi
+ done
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append pac_sub_configure_args " '$pac_arg'" ;;
+ esac
+ done
-if ${pac_stk_ac_link_level+:} false; then :
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ # MPICH note: see tt#983 for an example of why this is necessary
+ pac_arg="--prefix=$prefix"
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+ # Pass --silent
+ if test "$silent" = yes; then
+ pac_sub_configure_args="--silent $pac_sub_configure_args"
+ fi
-else
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
- pac_stk_ac_link_level=0
+ pac_popdir=`pwd`
-fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$pac_dir" || continue
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ # MPICH note: modified to remove the internal "_AS_*" macro usage, also
+ # msg is already printed at top
+ as_dir="$pac_dir"; as_fn_mkdir_p
+ # MPICH note: we leave this internal macro reference for now. We can clone
+ # the macro locally if this turns out to be non-portable across several autoconf
+ # versions. It sets the following variables: ac_builddir,
+ # ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
+ # ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
+ ac_builddir=.
-fi
+case "$pac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$pac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-# END of PUSHVAL
+ cd "$pac_dir"
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
-if ac_fn_c_try_link "$LINENO"; then :
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ pac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ pac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.ac"; then
+ # This should be Cygnus configure.
+ pac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $pac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $pac_dir" >&2;}
+ pac_sub_configure=
+ fi
+ # The recursion is here.
+ if test -n "$pac_sub_configure"; then
+ # MPICH note: overriding the cache file on purpose to prevent strange
+ # issues resulting from inter-dir caching
+ pac_sub_cache_file="/dev/null"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ # MPICH note: we want to execute the provided actions, not be silent
+ # or error out if the subconfigure succeeded/failed
+ if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
+ --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
+ then
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
+ else
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+ as_fn_error $? "MPL configure failed" "$LINENO" 5
+ fi
+ fi
-if
-{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
- (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ cd "$pac_popdir"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== done with src/mpl configure =====" >&5
+$as_echo "$as_me: ===== done with src/mpl configure =====" >&6;}
- pac_result=yes
-
-
-else
-
- $as_echo "$as_me: program exited with status $ac_status" >&5
-
- (exit $ac_status)
-
- $as_echo "*** diff -b pac_test1.log pac_test2.log :" >&5
- cat $pac_TESTLOG >&5
- pac_result=no
+ # Check for any localdefs files. These may be created, so we
+ # look in the local directory first.
+ if test -f src/mpl/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing src/mpl/localdefs" >&5
+$as_echo "$as_me: sourcing src/mpl/localdefs" >&6;}
+ . src/mpl/localdefs
+ elif test -f $pac_abs_srcdir/src/mpl/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/mpl/localdefs" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/src/mpl/localdefs" >&6;}
+ . $pac_abs_srcdir/src/mpl/localdefs
+ fi
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/mpl/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/mpl/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/mpl/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/mpl/include"
fi
-rm -f $pac_TESTLOG
-
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${use_top_srcdir}/src/mpl/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${use_top_srcdir}/src/mpl/include', not appending" >&5
else
-
-
- pac_result=no
-
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${use_top_srcdir}/src/mpl/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${use_top_srcdir}/src/mpl/include"
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
-# START of POPVAL
-
-if ${pac_stk_ac_link_level+:} false; then :
-
- if test "x$pac_stk_ac_link_level" = x-1; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+ mplsrcdir="${master_top_builddir}/src/mpl"
+ mpllibdir="-L${master_top_builddir}/src/mpl"
+ mpllib="src/mpl/lib${MPLLIBNAME}.la"
else
-
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
-
+ # The user specified an already-installed MPL; just sanity check, don't
+ # subconfigure it
+ if test -s "${with_mpl_prefix}/include/mplconfig.h"; then :
+ :
+else
+ as_fn_error $? "the MPL installation in \"${with_mpl_prefix}\" appears broken" "$LINENO" 5
fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_mpl_prefix}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_mpl_prefix}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_mpl_prefix}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_mpl_prefix}/include"
fi
-# END of POPVAL
-
-
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-l${MPLLIBNAME}\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-l${MPLLIBNAME}', not prepending" >&5
else
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-l${MPLLIBNAME}', prepending" >&5
+ WRAPPER_LIBS="-l${MPLLIBNAME} $WRAPPER_LIBS"
+
+fi
- pac_result=no
+ if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${with_mpl_prefix}/lib\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${with_mpl_prefix}/lib', not appending" >&5
+else
+ echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${with_mpl_prefix}/lib', appending" >&5
+ WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${with_mpl_prefix}/lib"
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
-# START of POPVAL
+ mpllibdir="-L${with_mpl_prefix}/lib"
+fi
-if ${pac_stk_ac_link_level+:} false; then :
+# OpenPA
- if test "x$pac_stk_ac_link_level" = x-1; then :
+OPALIBNAME=${OPALIBNAME:-"opa"}
+export OPALIBNAME
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+# Check whether --with-openpa-prefix was given.
+if test "${with_openpa_prefix+set}" = set; then :
+ withval=$with_openpa_prefix;
else
+ # see if OPA is already installed on the system
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+ if echo "$LIBS" | $FGREP -e "\<-l${OPALIBNAME}\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-l${OPALIBNAME}', not prepending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-l${OPALIBNAME}', prepending" >&5
+ LIBS="-l${OPALIBNAME} $LIBS"
fi
-# END of POPVAL
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
-$as_echo "$pac_result" >&6; }
-rm -f conftest.$ac_ext
-
-# gcc 4.2.4 on 32-bit does not complain about the -Wno-type-limits option
-# even though it doesn't support it. However, when another warning is
-# triggered, it gives an error that the option is not recognized. So we
-# need to test with a conftest file that will generate warnings.
-#
-# add an extra switch, pac_c_check_compiler_option_prototest, to
-# disable this test just in case some new compiler does not like it.
-#
-# Linking with a program with an invalid prototype to ensure a compiler warning.
-
-if test "$pac_result" = "yes" \
- -a "$pac_c_check_compiler_option_prototest" != "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler option $MPI_DEFAULT_COPTS works with an invalid prototype program" >&5
-$as_echo_n "checking whether C compiler option $MPI_DEFAULT_COPTS works with an invalid prototype program... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include "opa_primitives.h"
- int main(int argc, char **argv){ int foo, bar = 0; foo += 1; return foo; }
+int
+main ()
+{
+
+OPA_int_t i;
+OPA_store_int(i,10);
+OPA_fetch_and_incr_int(&i,5);
+ ;
+ return 0;
+}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- pac_result=yes
+ with_openpa_prefix=system
else
- pac_result=no
+ with_openpa_prefix=embedded
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
-$as_echo "$pac_result" >&6; }
-fi
-#
-if test "$pac_result" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt" >&5
-$as_echo_n "checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt... " >&6; }
- pac_result=unknown
- CFLAGS="$CFLAGS_orig"
- rm -f pac_test3.log
-
-
-# START of PUSHVAL
-
-if ${pac_stk_ac_compile_level+:} false; then :
-
- as_fn_arith $pac_stk_ac_compile_level + 1 && pac_stk_ac_compile_level=$as_val
-
-else
-
- pac_stk_ac_compile_level=0
-fi
-eval "pac_stk_ac_compile_$pac_stk_ac_compile_level=\$ac_compile"
-if test "x$pac_stk_ac_compile_level" = x0; then :
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
- eval pac_FirstSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
fi
- eval pac_LastSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
-
-# END of PUSHVAL
+opasrcdir=""
-ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> pac_test3.log 2>\&1|g'`"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+opalibdir=""
+opalib=""
- int foo(void);
- int foo(void){return 0;}
+if test "$with_openpa_prefix" = "embedded" ; then
+ if test -e "${use_top_srcdir}/src/openpa" ; then
+ opasrcdir="${master_top_builddir}/src/openpa"
+ opalib="src/openpa/src/lib${OPALIBNAME}.la"
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${use_top_srcdir}/src/openpa/src\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${use_top_srcdir}/src/openpa/src', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${use_top_srcdir}/src/openpa/src', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${use_top_srcdir}/src/openpa/src"
+fi
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
- rm -f pac_test4.log
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/openpa/src\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/openpa/src', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/openpa/src', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/openpa/src"
-# START of PUSHVAL
+fi
-if ${pac_stk_ac_link_level+:} false; then :
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+ # OPA defaults to "auto", but in MPICH we want "auto_allow_emulation" to
+ # easily permit using channels like ch3:sock that don't care about atomics
+# Check whether --with-atomic-primitives was given.
+if test "${with_atomic_primitives+set}" = set; then :
+ withval=$with_atomic_primitives;
else
-
- pac_stk_ac_link_level=0
-
+ with_atomic_primitives=not_specified
fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-
-fi
+ # no need for libtool versioning when embedding OPA
+ opa_subdir_args="--disable-versioning"
+ if test "$with_atomic_primitives" = "not_specified" ; then
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ if echo "$opa_subdir_args" | $FGREP -e "\<--with-atomic-primitives=auto_allow_emulation\>" >/dev/null 2>&1; then :
+ echo "opa_subdir_args(='$opa_subdir_args') contains '--with-atomic-primitives=auto_allow_emulation', not appending" >&5
+else
+ echo "opa_subdir_args(='$opa_subdir_args') does not contain '--with-atomic-primitives=auto_allow_emulation', appending" >&5
+ opa_subdir_args="$opa_subdir_args --with-atomic-primitives=auto_allow_emulation"
-# END of PUSHVAL
+fi
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test4.log 2>\&1|g'`"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ fi
-int
-main ()
-{
+ pac_dir="src/openpa"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== configuring src/openpa =====" >&5
+$as_echo "$as_me: ===== configuring src/openpa =====" >&6;}
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+ pac_abs_srcdir=`(cd $srcdir && pwd)`
+ if test -f $pac_abs_srcdir/src/openpa/setup ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/openpa/setup" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/src/openpa/setup" >&6;}
+ . $pac_abs_srcdir/src/openpa/setup
+ fi
- CFLAGS="$CFLAGS_opt"
- rm -f pac_test5.log
+ # Adapted for MPICH from the autoconf-2.67 implementation of
+ # AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
+ # local modifications.
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up. Otherwise relative paths (like --srcdir=.. from
+ # make distcheck) will be incorrect.
+ pac_sub_configure_args="$opa_subdir_args"
+ pac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for pac_arg
+ do
+ if test -n "$pac_prev"; then
+ pac_prev=
+ continue
+ fi
+ case $pac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ pac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ pac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ pac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ # MPICH note: this is a more robust version of the "precious
+ # variable" propagation code that was present in the previous
+ # incarnation of this macro
+ for pac_pvar in $ac_precious_vars ; do
+ # check if configure argument token contains the
+ # precious variable, i.e. "name_of_prec_var=".
+ if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
+ # check if current precious variable is set in env
+ eval pvar_set=\${$pac_pvar+set}
+ if test "$pvar_set" = "set" ; then
+ # Append 'name_of_prec_var=value_of_prec_var'
+ # to the subconfigure arguments list, where
+ # value_of_prec_var is fetched from the env.
+ # this also overrides any value set on the command line
+ eval pac_pval=\${$pac_pvar}
+ pac_arg="$pac_pvar=$pac_pval"
+ break
+ fi
+ fi
+ done
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append pac_sub_configure_args " '$pac_arg'" ;;
+ esac
+ done
-# START of PUSHVAL
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ # MPICH note: see tt#983 for an example of why this is necessary
+ pac_arg="--prefix=$prefix"
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
-if ${pac_stk_ac_link_level+:} false; then :
+ # Pass --silent
+ if test "$silent" = yes; then
+ pac_sub_configure_args="--silent $pac_sub_configure_args"
+ fi
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
-else
+ pac_popdir=`pwd`
- pac_stk_ac_link_level=0
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$pac_dir" || continue
-fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
+ # MPICH note: modified to remove the internal "_AS_*" macro usage, also
+ # msg is already printed at top
+ as_dir="$pac_dir"; as_fn_mkdir_p
+ # MPICH note: we leave this internal macro reference for now. We can clone
+ # the macro locally if this turns out to be non-portable across several autoconf
+ # versions. It sets the following variables: ac_builddir,
+ # ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
+ # ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
+ ac_builddir=.
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+case "$pac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$pac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
-fi
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ cd "$pac_dir"
-# END of PUSHVAL
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ pac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ pac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.ac"; then
+ # This should be Cygnus configure.
+ pac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $pac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $pac_dir" >&2;}
+ pac_sub_configure=
+ fi
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test5.log 2>\&1|g'`"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ # The recursion is here.
+ if test -n "$pac_sub_configure"; then
+ # MPICH note: overriding the cache file on purpose to prevent strange
+ # issues resulting from inter-dir caching
+ pac_sub_cache_file="/dev/null"
-int
-main ()
-{
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ # MPICH note: we want to execute the provided actions, not be silent
+ # or error out if the subconfigure succeeded/failed
+ if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
+ --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
+ then
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+ else
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+ as_fn_error $? "OpenPA configure failed" "$LINENO" 5
+ fi
+ fi
+ cd "$pac_popdir"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== done with src/openpa configure =====" >&5
+$as_echo "$as_me: ===== done with src/openpa configure =====" >&6;}
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
+ # Check for any localdefs files. These may be created, so we
+ # look in the local directory first.
+ if test -f src/openpa/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing src/openpa/localdefs" >&5
+$as_echo "$as_me: sourcing src/openpa/localdefs" >&6;}
+ . src/openpa/localdefs
+ elif test -f $pac_abs_srcdir/src/openpa/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/openpa/localdefs" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/src/openpa/localdefs" >&6;}
+ . $pac_abs_srcdir/src/openpa/localdefs
+ fi
-if
-{ $as_echo "$as_me:$LINENO: diff -b pac_test4.log pac_test5.log > $pac_TESTLOG" >&5
- (eval diff -b pac_test4.log pac_test5.log > $pac_TESTLOG) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Attempted to use the embedded OpenPA source tree in \"src/openpa\", but it is missing. Configuration or compilation may fail later." >&5
+$as_echo "$as_me: WARNING: Attempted to use the embedded OpenPA source tree in \"src/openpa\", but it is missing. Configuration or compilation may fail later." >&2;}
+ fi
+elif test "$with_openpa_prefix" = "system" ; then
- pac_result=yes
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-l${OPALIBNAME}\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-l${OPALIBNAME}', not prepending" >&5
+else
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-l${OPALIBNAME}', prepending" >&5
+ WRAPPER_LIBS="-l${OPALIBNAME} $WRAPPER_LIBS"
+fi
+elif test "$with_openpa_prefix" = "no" ; then
+ # The user doesn't want to use OPA. This may or may not cause MPICH to
+ # fail to configure/build, depending on many other factors.
+ :
+else
+ # The user specified an already-installed OPA; just sanity check, don't
+ # subconfigure it
+ if test -s "${with_openpa_prefix}/include/opa_primitives.h" -a -s "${with_openpa_prefix}/include/opa_config.h"; then :
+ :
else
+ as_fn_error $? "the OpenPA installation in \"${with_openpa_prefix}\" appears broken" "$LINENO" 5
+fi
- $as_echo "$as_me: program exited with status $ac_status" >&5
- (exit $ac_status)
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_openpa_prefix}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_openpa_prefix}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_openpa_prefix}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_openpa_prefix}/include"
- $as_echo "*** diff -b pac_test4.log pac_test5.log :" >&5
- cat $pac_TESTLOG >&5
- pac_result=no
+fi
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-l${OPALIBNAME}\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-l${OPALIBNAME}', not prepending" >&5
+else
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-l${OPALIBNAME}', prepending" >&5
+ WRAPPER_LIBS="-l${OPALIBNAME} $WRAPPER_LIBS"
fi
-rm -f $pac_TESTLOG
-
+ if test -d ${with_openpa_prefix}/lib64 ; then
+ if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${with_openpa_prefix}/lib64\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${with_openpa_prefix}/lib64', not appending" >&5
else
-
-
- pac_result=no
-
+ echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${with_openpa_prefix}/lib64', appending" >&5
+ WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${with_openpa_prefix}/lib64"
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-# START of POPVAL
-if ${pac_stk_ac_link_level+:} false; then :
-
- if test "x$pac_stk_ac_link_level" = x-1; then :
+ opalibdir="-L${with_openpa_prefix}/lib64"
+ else
+ opalibdir="-L${with_openpa_prefix}/lib"
+ fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+ if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${with_openpa_prefix}/lib\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${with_openpa_prefix}/lib', not appending" >&5
else
-
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+ echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${with_openpa_prefix}/lib', appending" >&5
+ WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${with_openpa_prefix}/lib"
fi
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
-
fi
-# END of POPVAL
-
+# ----------------------------------------------------------------------------
+# Threads
+# ----------------------------------------------------------------------------
+#
+# Threads must be supported by the device. First, set the default to
+# be the highest supported by the device
+# "runtime" was an old (now deprecated) option; just map it to multiple
+if test "$enable_threads" = "runtime" ; then enable_threads=multiple ; fi
+if test "$enable_threads" = "yes" ; then enable_threads=default ; fi
+if test "$enable_threads" = "no" ; then enable_threads=single ; fi
+if test "$enable_threads" = default ; then
+ # XXX DJG bug is here, PREREQ is not being used right now
+ if test -n "$MPID_MAX_THREAD_LEVEL" ; then
+ case $MPID_MAX_THREAD_LEVEL in
+ MPI_THREAD_SINGLE) enable_threads=single ;;
+ MPI_THREAD_FUNNELED) enable_threads=funneled ;;
+ MPI_THREAD_SERIALIZED) enable_threads=serialized ;;
+ MPI_THREAD_MULTIPLE) enable_threads=multiple ;;
+ *) as_fn_error $? "Unrecognized thread level from device $MPID_MAX_THREAD_LEVEL" "$LINENO" 5
+ ;;
+ esac
+ else
+ enable_threads=single
+ fi
+fi
+MPICH_THREAD_LEVEL=MPI_THREAD_FUNNELED
+case "$enable_threads" in
+ single)
+ thread_pkg_required=no
+ MPICH_THREAD_LEVEL=MPI_THREAD_SINGLE
+ ;;
+ funneled)
+ thread_pkg_required=no
+ MPICH_THREAD_LEVEL=MPI_THREAD_FUNNELED
+ ;;
+ serialized)
+ thread_pkg_required=no
+ MPICH_THREAD_LEVEL=MPI_THREAD_SERIALIZED
+ ;;
+ multiple)
+ thread_pkg_required=yes
+ MPICH_THREAD_LEVEL=MPI_THREAD_MULTIPLE
+ ;;
+ *)
+ as_fn_error $? "\"$enable_threads\" is not a valid value for --enable-threads" "$LINENO" 5
+ ;;
+esac
+# Check that the requested thread level is available.
+threadLevelOK=yes
+if test ! -z "$MPID_MAX_THREAD_LEVEL" ; then
+ # Check that MPID_MAX_THREAD_LEVEL is at least as large as the
+ # selected MPICH_THREAD_LEVEL
+ case $MPICH_THREAD_LEVEL in
+ MPI_THREAD_MULTIPLE)
+ if test "$MPID_MAX_THREAD_LEVEL" != "MPI_THREAD_MULTIPLE" ; then
+ threadLevelOK=no
+ fi
+ ;;
+ MPI_THREAD_SERIALIZED)
+ if test "$MPID_MAX_THREAD_LEVEL" != "MPI_THREAD_MULTIPLE" -a \
+ "$MPID_MAX_THREAD_LEVEL" != "MPI_THREAD_SERIALIZED" ; then
+ threadLevelOK=no
+ fi
+ ;;
+ MPI_THREAD_FUNNELED)
+ if test "$MPID_MAX_THREAD_LEVEL" = "MPI_THREAD_SINGLE" ; then
+ threadLevelOK=no
+ fi
+ ;;
+ MPI_THREAD_SINGLE)
+ ;;
+ esac
+fi
+if test "$threadLevelOK" != yes ; then
+ as_fn_error $? "The device $with_device does not support $MPICH_THREAD_LEVEL" "$LINENO" 5
+fi
+export MPICH_THREAD_LEVEL
-else
+cat >>confdefs.h <<_ACEOF
+#define MPICH_THREAD_LEVEL $MPICH_THREAD_LEVEL
+_ACEOF
- pac_result=no
+if test "$MPICH_THREAD_LEVEL" = "MPI_THREAD_MULTIPLE" ; then
+$as_echo "#define MPICH_IS_THREADED 1" >>confdefs.h
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-# START of POPVAL
-
-if ${pac_stk_ac_link_level+:} false; then :
- if test "x$pac_stk_ac_link_level" = x-1; then :
+# If not in MPI_THREAD_SINGLE, we need -D_REENTRANT to get thread-safe "errno".
+# Most POSIX systems provide this by default when using -lpthread, but we only use it in MPI_THREAD_MULTIPLE.
+# Some systems (Solaris) still require an explicit define in any case.
+if test "$MPICH_THREAD_LEVEL" != "MPI_THREAD_SINGLE"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+ if echo "$CPPFLAGS" | $FGREP -e "\<-D_REENTRANT\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-D_REENTRANT', not appending" >&5
else
-
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-D_REENTRANT', appending" >&5
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT"
fi
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
-
fi
-# END of POPVAL
+# Check for value thread_cs choice; set the refcount default if necessary
+thread_granularity=MPICH_THREAD_GRANULARITY__SINGLE
+thread_refcount=MPICH_REFCOUNT__NONE
+if test "$enable_threads" = "multiple" ; then
+ case $enable_thread_cs in
+ global)
+ thread_granularity=MPICH_THREAD_GRANULARITY__GLOBAL
+ if test "$enable_refcount" = "default" ; then enable_refcount=none ; fi
+ ;;
+ per-object|per_object)
+ thread_granularity=MPICH_THREAD_GRANULARITY__POBJ
+ if test "$enable_refcount" = "default" ; then enable_refcount=lock-free ; fi
+ ;;
+ lock-free|lock_free|lockfree)
+ thread_granularity=MPICH_THREAD_GRANULARITY__LOCKFREE
+ if test "$enable_refcount" = "default" ; then enable_refcount=lock-free ; fi
+ if test "$enable_predefined_refcount" = "default" ; then enable_predefined_refcount=no ; fi
+ as_fn_error $? "--enable-thread-cs=lock-free is not supported yet, please select a different granularity" "$LINENO" 5
+ ;;
+ *)
+ as_fn_error $? "Unrecognized value $enable_thread_cs for --enable-thread-cs" "$LINENO" 5
+ ;;
+ esac
+ case $enable_refcount in
+ lock-free|lock_free|lockfree)
+ thread_refcount=MPICH_REFCOUNT__LOCKFREE
+ ;;
+ none)
+ thread_refcount=MPICH_REFCOUNT__NONE
+ ;;
+ *)
+ as_fn_error $? "Unrecognized value $enable_refcount for --enable-refcount" "$LINENO" 5
+ ;;
+ esac
+fi
- LIBS="$saved_LIBS"
- rm -f pac_conftest.$OBJEXT
+cat >>confdefs.h <<_ACEOF
+#define MPICH_THREAD_GRANULARITY $thread_granularity
+_ACEOF
-else
+if test "$enable_predefined_refcount" = "no" ; then
+$as_echo "#define MPICH_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS 1" >>confdefs.h
- pac_result=no
+fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+cat >>confdefs.h <<_ACEOF
+#define MPICH_THREAD_REFCOUNT $thread_refcount
+_ACEOF
-# START of POPVAL
-if ${pac_stk_ac_compile_level+:} false; then :
+# enable-g
+# strip off multiple options, separated by commas
+save_IFS="$IFS"
+IFS=","
+for option in $enable_g ; do
+ case "$option" in
+ debug|dbg)
+ enable_append_g=yes
+ ;;
+ no|none)
+ ;;
+ handlealloc)
+ perform_handlealloc=yes
+ ;;
+ handle)
+ perform_handle=yes
+ ;;
+ meminit)
+ perform_meminit=yes
+ ;;
+ memarena)
+ perform_memarena=yes
+ perform_memtracing=yes
+ ;;
+ mem)
+ perform_memtracing=yes
+ ;;
+ mutex)
+ perform_dbgmutex=yes
+ ;;
+ mutexnesting)
+ perform_mutexnesting=yes
+ ;;
+ most|yes)
+ perform_memtracing=yes
+ enable_append_g=yes
+ perform_meminit=yes
+ perform_dbgmutex=yes
+ perform_mutexnesting=yes
+ perform_handlealloc=yes
+ perform_handle=yes
+ ;;
+ all)
+ perform_memarena=yes
+ perform_memtracing=yes
+ enable_append_g=yes
+ perform_meminit=yes
+ perform_dbgmutex=yes
+ perform_mutexnesting=yes
+ perform_handlealloc=yes
+ perform_handle=yes
+ ;;
+ *)
+ IFS=$save_IFS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $option for enable-g" >&5
+$as_echo "$as_me: WARNING: Unknown value $option for enable-g" >&2;}
+ IFS=","
+ ;;
+ esac
+done
+IFS="$save_IFS"
- if test "x$pac_stk_ac_compile_level" = x-1; then :
+if test "$enable_append_g" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&2;}
+ if echo "$CFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "CFLAGS(='$CFLAGS') contains '-g', not appending" >&5
else
-
- eval ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
- as_fn_arith $pac_stk_ac_compile_level - 1 && pac_stk_ac_compile_level=$as_val
+ echo "CFLAGS(='$CFLAGS') does not contain '-g', appending" >&5
+ CFLAGS="$CFLAGS -g"
fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&2;}
+
+ if echo "$CXXFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "CXXFLAGS(='$CXXFLAGS') contains '-g', not appending" >&5
+else
+ echo "CXXFLAGS(='$CXXFLAGS') does not contain '-g', appending" >&5
+ CXXFLAGS="$CXXFLAGS -g"
fi
-# END of POPVAL
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
-$as_echo "$pac_result" >&6; }
- rm -f pac_test3.log pac_test4.log pac_test5.log
+ if echo "$FFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "FFLAGS(='$FFLAGS') contains '-g', not appending" >&5
+else
+ echo "FFLAGS(='$FFLAGS') does not contain '-g', appending" >&5
+ FFLAGS="$FFLAGS -g"
+
fi
-rm -f pac_test1.log pac_test2.log
-CFLAGS="$CFLAGS_orig"
-if test "$pac_result" = "yes" ; then
- CFLAGS="$CFLAGS $MPI_DEFAULT_COPTS"
+ if echo "$FCFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "FCFLAGS(='$FCFLAGS') contains '-g', not appending" >&5
else
- :
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+ echo "FCFLAGS(='$FCFLAGS') does not contain '-g', appending" >&5
+ FCFLAGS="$FCFLAGS -g"
- else
- CFLAGS="$CFLAGS $MPI_DEFAULT_COPTS"
- fi
fi
-# Set NEEDSPLIB to yes if link commands need both -l$MPILIBNAME
-# and -lp$MPILIBNAME.
-NEEDSPLIB=yes
-if test $enable_weak_symbols = yes ; then
- # Turn off weak symbols if they aren't available
-
-pragma_extra_message=""
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of weak symbol alias support" >&5
-$as_echo_n "checking for type of weak symbol alias support... " >&6; }
-if ${pac_cv_prog_c_weak_symbols+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-# Test for weak symbol support...
-# We can't put # in the message because it causes autoconf to generate
-# incorrect code
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-extern int PFoo(int);
-#pragma weak PFoo = Foo
-int Foo(int a) { return a; }
+ if echo "$WRAPPER_CFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_CFLAGS(='$WRAPPER_CFLAGS') contains '-g', not appending" >&5
+else
+ echo "WRAPPER_CFLAGS(='$WRAPPER_CFLAGS') does not contain '-g', appending" >&5
+ WRAPPER_CFLAGS="$WRAPPER_CFLAGS -g"
-int
-main ()
-{
-return PFoo(1);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- has_pragma_weak=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-#
-# Some systems (Linux ia64 and ecc, for example), support weak symbols
-# only within a single object file! This tests that case.
-# Note that there is an extern int PFoo declaration before the
-# pragma. Some compilers require this in order to make the weak symbol
-# externally visible.
-if test "$has_pragma_weak" = yes ; then
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-extern int PFoo(int);
-#pragma weak PFoo = Foo
-int Foo(int);
-int Foo(int a) { return a; }
+ if echo "$WRAPPER_CXXFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_CXXFLAGS(='$WRAPPER_CXXFLAGS') contains '-g', not appending" >&5
+else
+ echo "WRAPPER_CXXFLAGS(='$WRAPPER_CXXFLAGS') does not contain '-g', appending" >&5
+ WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -g"
+fi
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
+ if echo "$WRAPPER_FFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_FFLAGS(='$WRAPPER_FFLAGS') contains '-g', not appending" >&5
+else
+ echo "WRAPPER_FFLAGS(='$WRAPPER_FFLAGS') does not contain '-g', appending" >&5
+ WRAPPER_FFLAGS="$WRAPPER_FFLAGS -g"
-# START of PUSHVAL
+fi
-if ${pac_stk_LIBS_level+:} false; then :
- as_fn_arith $pac_stk_LIBS_level + 1 && pac_stk_LIBS_level=$as_val
+ if echo "$WRAPPER_FCFLAGS" | $FGREP -e "\<-g\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_FCFLAGS(='$WRAPPER_FCFLAGS') contains '-g', not appending" >&5
else
-
- pac_stk_LIBS_level=0
+ echo "WRAPPER_FCFLAGS(='$WRAPPER_FCFLAGS') does not contain '-g', appending" >&5
+ WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -g"
fi
-eval "pac_stk_LIBS_$pac_stk_LIBS_level=\$LIBS"
-if test "x$pac_stk_LIBS_level" = x0; then :
-
- eval pac_FirstSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
fi
+if test -n "$perform_meminit" ; then
- eval pac_LastSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+$as_echo "#define MPICH_DEBUG_MEMINIT 1" >>confdefs.h
+fi
+if test "$perform_handlealloc" = yes ; then
-# END of PUSHVAL
+$as_echo "#define MPICH_DEBUG_HANDLEALLOC 1" >>confdefs.h
- LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+fi
+if test "X$perform_handle" = "Xyes"; then :
+$as_echo "#define MPICH_DEBUG_HANDLES 1" >>confdefs.h
-extern int PFoo(int);
-int main(int argc, char **argv) {
-return PFoo(0);}
+fi
+if test -n "$perform_memtracing" ; then
+ enable_g_mem=yes
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+$as_echo "#define USE_MEMORY_TRACING 1" >>confdefs.h
+ if test -n "$perform_memarena" ; then
+$as_echo "#define MPICH_DEBUG_MEMARENA 1" >>confdefs.h
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ fi
+fi
+if test -n "$perform_dbgmutex" ; then
-extern int PFoo(int);
-#pragma weak PFoo = Foo
-int Foo(int);
-int Foo(int a) { return a; }
+$as_echo "#define MPICH_DEBUG_MUTEX 1" >>confdefs.h
+fi
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+pac_cross_compiling=no
+if test "$with_cross" != "no" ; then
+ if test -s "$with_cross" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Reading values from cross-compilation file $with_cross" >&5
+$as_echo "Reading values from cross-compilation file $with_cross" >&6; }
+ . $with_cross
+ # Autoconf 2.52 no longer sets cross_compiling except with the
+ # awkward "targethost" options.
+ pac_cross_compiling=yes
+ cross_compiling=yes
+ ac_cv_prog_cc_cross=yes
+ ac_cv_prog_f77_cross=yes
+ ac_cv_prog_fc_cross=yes
+ ac_cv_prog_cxx_cross=yes
+ export cross_compiling
+ # Export all cross variables. Any subsidiary configure should also
+ # export CROSS_xxx
+ rm -f confcross
+ (set) 2>&1 | grep CROSS_ | \
+ sed -e 's/^/export /g' -e 's/=.*//g' > confcross
+ . confcross
+ rm -f confcross
+ fi
+fi
+# This goes here because we need the top_srcdir
+if test "$enable_romio" = "yes" ; then
+ if test -d $use_top_srcdir/src/mpi/romio ; then
+ subsystems="$subsystems src/mpi/romio"
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
+$as_echo "#define HAVE_ROMIO 1" >>confdefs.h
-# START of PUSHVAL
-if ${pac_stk_LIBS_level+:} false; then :
+ # make it possible to "#include" mpio.h at build time
+ #
+ # This ought to be sufficient, but there is also a symlink setup in
+ # src/include to accomodate current mpicc limitations. See
+ # src/mpi/Makefile.mk for more info.
- as_fn_arith $pac_stk_LIBS_level + 1 && pac_stk_LIBS_level=$as_val
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/mpi/romio/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/mpi/romio/include', not appending" >&5
else
-
- pac_stk_LIBS_level=0
-
-fi
-eval "pac_stk_LIBS_$pac_stk_LIBS_level=\$LIBS"
-if test "x$pac_stk_LIBS_level" = x0; then :
-
- eval pac_FirstSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/mpi/romio/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/mpi/romio/include"
fi
- eval pac_LastSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
-
-
-# END of PUSHVAL
-
- LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-extern int Foo(int);
-int PFoo(int a) { return a+1;}
-int main(int argc, char **argv) {
-return Foo(0);}
-
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+ # Set environment variables that the romio configure expects
+ export use_top_srcdir
+ top_build_dir=`pwd`
+ export top_build_dir
+ # if there is no $top_build_dir/lib, romio puts lib in wrong place
+ # This test used -e under Linux, but not all test programs understand
+ # -e
+ if test ! -d lib ; then mkdir lib ; fi
+ # tell mpi.h to include mpio.h
+if test "$enable_romio" = "yes" ; then HAVE_ROMIO='#include "mpio.h"'; fi
- pac_cv_prog_c_weak_symbols="pragma weak"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ROMIO src directory is not available" >&5
+$as_echo "$as_me: WARNING: ROMIO src directory is not available" >&2;}
+ fi
+fi
+ if test x$enable_romio = xyes; then
+ BUILD_ROMIO_TRUE=
+ BUILD_ROMIO_FALSE='#'
else
+ BUILD_ROMIO_TRUE='#'
+ BUILD_ROMIO_FALSE=
+fi
- has_pragma_weak=0
- pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-# START of POPVAL
-
-if ${pac_stk_LIBS_level+:} false; then :
-
- if test "x$pac_stk_LIBS_level" = x-1; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&2;}
-
+#
+# FIXME: If an external device, don't necessarily complain (e.g.,
+# if the device is already built)
+if test ! -d $devicedir ; then
+ as_fn_error $? "Device $device_name is unknown" "$LINENO" 5
+elif test -f $devicedir/subconfigure.m4 ; then
+ # this is a new-style subconfigure device, don't add it as a subsystem
+ :
+elif test ! -x $devicedir/configure ; then
+ if test -s $devicedir/configure ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The configure in $devicedir exists but is not executable" >&5
+$as_echo "$as_me: WARNING: The configure in $devicedir exists but is not executable" >&2;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Device $device_name has no configure" >&5
+$as_echo "$as_me: WARNING: Device $device_name has no configure" >&2;}
+ fi
+ device_name=""
else
+ # Add the device to the configure list
+ devsubsystems="$devsubsystems $devicereldir"
+ # Make device_name available to subdirs
+fi
- eval LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
- as_fn_arith $pac_stk_LIBS_level - 1 && pac_stk_LIBS_level=$as_val
-
+# with-pm
+if test "$with_pm" = "none" ; then
+ # add "none" as synonym for "no" to agree with older erroneous docs
+ with_pm="no"
+fi
+if test "$MPID_NO_PM" = yes ; then
+ if test "$with_pm" != "default" -a "$with_pm" != no ; then
+ as_fn_error $? "The PM chosen ($with_pm) is is not valid for the selected device ($with_device)" "$LINENO" 5
+ fi
+ # This is used to change with_pm=default to with_pm=no in the case
+ # where the device does not want a PM
+ with_pm=no
+fi
+if test -z "$with_pm" ; then
+ with_pm="no"
+fi
+if test "$with_pmi" = "uni" -a "$with_pm" = "default" ; then
+ with_pm="no"
+fi
+if test "$with_pm" = "default" -o "$with_pm" = "yes" ; then
+ if test ! -z "$MPID_DEFAULT_PM" ; then
+ with_pm=${MPID_DEFAULT_PM}
+ else
+ with_pm=hydra
+ fi
fi
+# We allow multiple pm names, separated by : or ,
+if test "$with_pm" != "no" ; then
+ pm_names="`echo $with_pm | sed -e 's/:/ /g' -e 's/,/ /g'`"
else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&2;}
-
+ pm_names=""
+fi
+#
+hasError=no
+# We need to be careful about PM's that have either conflicting
+# requirements (e.g., different PMI implementations) or different
+# optional features (e.g., MPID_PM_NAMESERVER).
+# In addition, we need to interleave the setup of the PMI and PM
+# modules. The order is as follows:
+#
+# For each PM, execute the mpichprereq script for that pm (if present).
+# This script provides information about the PM, including which PMI
+# implementations are supported.
+#
+# Then, for the selected PMI, the setup script (if any) is run. This is
+# necessary because the setup of the PM may require information discovered
+# or provided duing the PMI setup step.
+#
+# Finally, for each PM, the setup script is executed.
+#
+# Step 1: invoke the mpichprereq for each PM
+for pm_name in $pm_names ; do
+ if test -z "$first_pm_name" ; then
+ first_pm_name=$pm_name
+ export first_pm_name
+ fi
+ if test ! -d $use_top_srcdir/src/pm/$pm_name ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $use_top_srcdir/src/pm/$pm_name does not exist. PM is unknown" >&5
+$as_echo "$as_me: WARNING: $use_top_srcdir/src/pm/$pm_name does not exist. PM is unknown" >&2;}
+ hasError=yes
+ elif test ! -x $use_top_srcdir/src/pm/$pm_name/configure -a \
+ ! -f $use_top_srcdir/src/pm/$pm_name/subconfigure.m4 ; then
+ if test -s $use_top_srcdir/src/pm/$pm_name/configure ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The configure in $use_top_srcdir/src/pm/$pm_name exists but is not executable" >&5
+$as_echo "$as_me: WARNING: The configure in $use_top_srcdir/src/pm/$pm_name exists but is not executable" >&2;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pm $pm_name has no configure or subconfigure.m4" >&5
+$as_echo "$as_me: WARNING: pm $pm_name has no configure or subconfigure.m4" >&2;}
+ fi
+ pm_name=""
+ hasError=yes
+ else
+ nameserver=$MPID_PM_NAMESERVER
+ if test -f $use_top_srcdir/src/pm/$pm_name/mpichprereq ; then
+ echo sourcing $use_top_srcdir/src/pm/$pm_name/mpichprereq
+ . $use_top_srcdir/src/pm/$pm_name/mpichprereq
+ fi
+ # Check for a change; if found, we'll take the default
+ if test "$MPID_PM_NAMESERVER" != "$nameserver" ; then
+ if test "$first_pm_name" != "$pm_name" ; then
+ # Reject suggestion (use the default, common mode)
+ MPID_PM_NAMESERVER=""
+ fi
+ fi
+ fi
+done
+if test "$hasError" != no ; then
+ as_fn_error $? "Aborting configure because an error was seen in the selection of process managers" "$LINENO" 5
fi
+#
+# pm_name is the *primary* pm
+pm_name=$first_pm_name
-# END of POPVAL
- rm -f pac_conftest.$OBJEXT
+# Step 2:
+# Once we've selected the process manager (or managers), we can
+# check that we have a compatible PMI implemenatation.
+# with-pmi
+if test "$MPID_NO_PMI" = yes ; then
+ if test "$with_pmi" != "default" -a "$with_pmi" != no ; then
+ as_fn_error $? "The PMI chosen ($with_pmi) is is not valid for the selected device ($with_device)" "$LINENO" 5
+ fi
+ # This is used to change with_pmi=default to with_pmi=no in the case
+ # where the device does not want a PMI
+ with_pmi=no
+elif test "$with_pmi" != "no" ; then
+ if test "$with_pmi" = "default" -o "$with_pmi" = "yes" ; then
+ if test -n "$PM_REQUIRES_PMI" ; then
+ with_pmi=$PM_REQUIRES_PMI
+ else
+ with_pmi=simple
+ fi
+ elif test -n "$PM_REQUIRES_PMI" ; then
+ # Test for compatibility between pm and pmi choices
+ if test "$PM_REQUIRES_PMI" != "$with_pmi" ; then
+ as_fn_error $? "The PM chosen ($with_pm) requires the PMI implementation $PM_REQUIRES_PMI but $with_pmi was selected as the PMI implementation." "$LINENO" 5
+ fi
+ fi
+ pmi_name=$with_pmi
+ if test ! -d $use_top_srcdir/src/pmi/$pmi_name ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $use_top_srcdir/src/pmi/$pmi_name does not exist. PMI is unknown" >&5
+$as_echo "$as_me: WARNING: $use_top_srcdir/src/pmi/$pmi_name does not exist. PMI is unknown" >&2;}
+ elif test ! -x $use_top_srcdir/src/pmi/$pmi_name/configure ; then
+ if test ! -f $use_top_srcdir/src/pmi/$pmi_name/subconfigure.m4 ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pmi $pmi_name has no configure or subconfigure.m4" >&5
+$as_echo "$as_me: WARNING: pmi $pmi_name has no configure or subconfigure.m4" >&2;}
+ pmi_name=""
+ fi
+ else
+ # only add to subsystems if a full configure is present
+ subsystems="$subsystems src/pmi/$pmi_name"
+ fi
else
-
-
- has_pragma_weak=0
- pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
-
-
+ as_fn_error $? "A PMI implementation must be selected or the default used." "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Step 3: complete pm setup.
+# Note that checks for errors have already been performed, so this
+# loop does not need to perform any extra error checks.
+# Note that this uses this_pm_name because pm_name must be the *first*
+# of the PM names
+for this_pm_name in $pm_names ; do
+ # only add the PM to the subsystems if it has a full configure to be
+ # executed
+ if test -f $use_top_srcdir/src/pm/$this_pm_name/configure ; then
+ subsystems="$subsystems src/pm/$this_pm_name"
+ fi
+ if test -f $use_top_srcdir/src/pm/$this_pm_name/setup_pm ; then
+ echo sourcing $use_top_srcdir/src/pm/$this_pm_name/setup_pm
+ . $use_top_srcdir/src/pm/$this_pm_name/setup_pm
+ fi
+done
+
+# Check for whether the compiler defines a symbol that contains the
+# function name. The MPICH code, for greater portability, defines
+# its own symbols, FCNAME (a string) and FUNCNAME (a token that is not a
+# string). Code should use these symbols where possible. However,
+# some debugging macros may want to use a compiler-provided symbol
+# for the function name, and this check makes it possible to
+# define such macros in a way that is always correct.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __func__" >&5
+$as_echo_n "checking whether the compiler defines __func__... " >&6; }
+if ${pac_cv_have__func__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+tmp_am_cross=no
+if test "$cross_compiling" = yes; then :
+ tmp_am_cross=yes
else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- has_pragma_weak=0
- pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__func__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_have__func__=yes
+else
+ pac_cv_have__func__=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-# START of POPVAL
+if test "$tmp_am_cross" = yes ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-if ${pac_stk_LIBS_level+:} false; then :
- if test "x$pac_stk_LIBS_level" = x-1; then :
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__func__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&2;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_have__func__=yes
else
-
- eval LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
- as_fn_arith $pac_stk_LIBS_level - 1 && pac_stk_LIBS_level=$as_val
+ pac_cv_have__func__=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__func__" >&5
+$as_echo "$pac_cv_have__func__" >&6; }
-else
+if test "$pac_cv_have__func__" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&2;}
+$as_echo "#define HAVE__FUNC__ /**/" >>confdefs.h
fi
-# END of POPVAL
-
- rm -f pac_conftest.$OBJEXT
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __FUNC__" >&5
+$as_echo_n "checking whether the compiler defines __FUNC__... " >&6; }
+if ${pac_cv_have_cap__func__+:} false; then :
+ $as_echo_n "(cached) " >&6
else
-
- has_pragma_weak=0
- pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-if test -z "$pac_cv_prog_c_weak_symbols" ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+tmp_am_cross=no
+if test "$cross_compiling" = yes; then :
+ tmp_am_cross=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-extern int PFoo(int);
-#pragma _HP_SECONDARY_DEF Foo PFoo
-int Foo(int a) { return a; }
-int
-main ()
+#include <string.h>
+int foo(void);
+int foo(void)
{
-return PFoo(1);
- ;
- return 0;
+ return (strcmp(__FUNC__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
}
+
+
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_prog_c_weak_symbols="pragma _HP_SECONDARY_DEF"
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_have_cap__func__=yes
+else
+ pac_cv_have_cap__func__=no
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-if test -z "$pac_cv_prog_c_weak_symbols" ; then
+
+if test "$tmp_am_cross" = yes ; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-extern int PFoo(int);
-#pragma _CRI duplicate PFoo as Foo
-int Foo(int a) { return a; }
-int
-main ()
+#include <string.h>
+int foo(void);
+int foo(void)
{
-return PFoo(1);
- ;
- return 0;
+ return (strcmp(__FUNC__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
}
+
+
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_prog_c_weak_symbols="pragma _CRI duplicate x as y"
+ pac_cv_have__func__=yes
+else
+ pac_cv_have__func__=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-if test -z "$pac_cv_prog_c_weak_symbols" ; then
- pac_cv_prog_c_weak_symbols="no"
-fi
-if test -n "$pragma_extra_message" ; then
- echo $pragma_extra_message
-fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_c_weak_symbols" >&5
-$as_echo "$pac_cv_prog_c_weak_symbols" >&6; }
-if test "$pac_cv_prog_c_weak_symbols" != "no" ; then
- case "$pac_cv_prog_c_weak_symbols" in
- "pragma weak")
-$as_echo "#define HAVE_PRAGMA_WEAK 1" >>confdefs.h
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cap__func__" >&5
+$as_echo "$pac_cv_have_cap__func__" >&6; }
- ;;
- "pragma _HP")
-$as_echo "#define HAVE_PRAGMA_HP_SEC_DEF 1" >>confdefs.h
+if test "$pac_cv_have_cap__func__" = "yes" ; then
- ;;
- "pragma _CRI")
-$as_echo "#define HAVE_PRAGMA_CRI_DUP 1" >>confdefs.h
+$as_echo "#define HAVE_CAP__FUNC__ /**/" >>confdefs.h
- ;;
- esac
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ ((weak)) allowed" >&5
-$as_echo_n "checking whether __attribute__ ((weak)) allowed... " >&6; }
-if ${pac_cv_attr_weak+:} false; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler sets __FUNCTION__" >&5
+$as_echo_n "checking whether the compiler sets __FUNCTION__... " >&6; }
+if ${pac_cv_have__function__+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+tmp_am_cross=no
+if test "$cross_compiling" = yes; then :
+ tmp_am_cross=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(int) __attribute__ ((weak));
-int
-main ()
+
+
+#include <string.h>
+int foo(void);
+int foo(void)
{
-int a;
- ;
- return 0;
+ return (strcmp(__FUNCTION__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
}
+
+
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_attr_weak=yes
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_have__function__=yes
else
- pac_cv_attr_weak=no
+ pac_cv_have__function__=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_attr_weak" >&5
-$as_echo "$pac_cv_attr_weak" >&6; }
-# Note that being able to compile with weak_import doesn't mean that
-# it works.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ ((weak_import)) allowed" >&5
-$as_echo_n "checking whether __attribute__ ((weak_import)) allowed... " >&6; }
-if ${pac_cv_attr_weak_import+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if test "$tmp_am_cross" = yes ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(int) __attribute__ ((weak_import));
-int
-main ()
+
+
+#include <string.h>
+int foo(void);
+int foo(void)
{
-int a;
- ;
- return 0;
+ return (strcmp(__FUNCTION__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
}
+
+
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_attr_weak_import=yes
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_have__func__=yes
else
- pac_cv_attr_weak_import=no
+ pac_cv_have__func__=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_attr_weak_import" >&5
-$as_echo "$pac_cv_attr_weak_import" >&6; }
-# Check if the alias option for weak attributes is allowed
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((weak,alias(...))) allowed" >&5
-$as_echo_n "checking whether __attribute__((weak,alias(...))) allowed... " >&6; }
-if ${pac_cv_attr_weak_alias+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__function__" >&5
+$as_echo "$pac_cv_have__function__" >&6; }
- if test -z "${pac_save_CFLAGS_nesting}" ; then
- pac_save_CFLAGS_nesting=0
- fi
- eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}='"$CFLAGS"'
- pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} + 1`
+if test "$pac_cv_have__function__" = "yes" ; then
+
+$as_echo "#define HAVE__FUNCTION__ /**/" >>confdefs.h
+
+fi
+
+
+
+# Check if $MPI_DEFAULT_COPTS is valid with $CC
+if test -n "$MPI_DEFAULT_COPTS" ; then
+ if test "$enable_check_compiler_flags" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts option $MPI_DEFAULT_COPTS" >&5
+$as_echo_n "checking whether C compiler accepts option $MPI_DEFAULT_COPTS... " >&6; }
+pac_opt="$MPI_DEFAULT_COPTS"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CFLAGS_orig="$CFLAGS"
+CFLAGS_opt="$pac_opt $CFLAGS"
+pac_result="unknown"
-# force an error exit if the weak attribute isn't understood
-CFLAGS=-Werror
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int __foo(int a){return 0;} int foo(int) __attribute__((weak,alias("__foo")));
+
+ #include <stdio.h>
+ const char hw[] = "Hello, World\n";
int
main ()
{
-int a;
+fputs (hw, stdout);
;
return 0;
}
+
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_attr_weak_alias=yes
-else
- pac_cv_attr_weak_alias=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Restore original CFLAGS
+CFLAGS="$CFLAGS_orig"
+rm -f pac_test1.log
- pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} - 1`
- eval CFLAGS="\$pac_save_CFLAGS_${pac_save_CFLAGS_nesting}"
- eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}=""
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_attr_weak_alias" >&5
-$as_echo "$pac_cv_attr_weak_alias" >&6; }
-if test "$pac_cv_attr_weak_alias" = "yes" ; then
+# START of PUSHVAL
-$as_echo "#define HAVE_WEAK_ATTRIBUTE 1" >>confdefs.h
+if ${pac_stk_ac_link_level+:} false; then :
-fi
-if test "$pac_cv_prog_c_weak_symbols" = "no" -a "$pac_cv_attr_weak_alias" = "no" ; then
- enable_weak_symbols=no
-else
- :
-fi
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
-fi
-if test $enable_weak_symbols = "yes" ; then
+else
-$as_echo "#define USE_WEAK_SYMBOLS 1" >>confdefs.h
+ pac_stk_ac_link_level=0
- NEEDSPLIB=no
- # Check for the ability to support multiple weak symbols
- if test "$pac_cv_prog_c_weak_symbols" = "pragma weak" ; then
+fi
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiple weak symbol support" >&5
-$as_echo_n "checking for multiple weak symbol support... " >&6; }
-if ${pac_cv_prog_c_multiple_weak_symbols+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-# Test for multiple weak symbol support...
+fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-extern int PFoo(int);
-extern int PFoo_(int);
-extern int pfoo_(int);
-#pragma weak PFoo = Foo
-#pragma weak PFoo_ = Foo
-#pragma weak pfoo_ = Foo
-int Foo(int);
-int Foo(a) { return a; }
+# END of PUSHVAL
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
+if ac_fn_c_try_link "$LINENO"; then :
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+ CFLAGS="$CFLAGS_opt"
+ rm -f pac_test2.log
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
# START of PUSHVAL
-if ${pac_stk_LIBS_level+:} false; then :
+if ${pac_stk_ac_link_level+:} false; then :
- as_fn_arith $pac_stk_LIBS_level + 1 && pac_stk_LIBS_level=$as_val
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
else
- pac_stk_LIBS_level=0
+ pac_stk_ac_link_level=0
fi
-eval "pac_stk_LIBS_$pac_stk_LIBS_level=\$LIBS"
-if test "x$pac_stk_LIBS_level" = x0; then :
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
- eval pac_FirstSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
fi
- eval pac_LastSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
# END of PUSHVAL
- LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
+if ac_fn_c_try_link "$LINENO"; then :
-extern int PFoo(int), PFoo_(int), pfoo_(int);
-int main() {
-return PFoo(0) + PFoo_(1) + pfoo_(2);}
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if
+{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
+ (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
- pac_cv_prog_c_multiple_weak_symbols="yes"
+ pac_result=yes
else
- :
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-# START of POPVAL
+ $as_echo "$as_me: program exited with status $ac_status" >&5
-if ${pac_stk_LIBS_level+:} false; then :
+ (exit $ac_status)
- if test "x$pac_stk_LIBS_level" = x-1; then :
+ $as_echo "*** diff -b pac_test1.log pac_test2.log :" >&5
+ cat $pac_TESTLOG >&5
+ pac_result=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&2;}
-else
- eval LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
- as_fn_arith $pac_stk_LIBS_level - 1 && pac_stk_LIBS_level=$as_val
fi
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&2;}
-
-fi
+rm -f $pac_TESTLOG
-# END of POPVAL
- rm -f pac_conftest.$OBJEXT
else
- :
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ pac_result=no
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_c_multiple_weak_symbols" >&5
-$as_echo "$pac_cv_prog_c_multiple_weak_symbols" >&6; }
-if test "$pac_cv_prog_c_multiple_weak_symbols" = "yes" ; then
-
-$as_echo "#define HAVE_MULTIPLE_PRAGMA_WEAK 1" >>confdefs.h
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
-else
- :
-fi
+# START of POPVAL
- fi
-fi
-export NEEDSPLIB
+if ${pac_stk_ac_link_level+:} false; then :
- if test "$NEEDSPLIB" = "yes"; then
- BUILD_PROFILING_LIB_TRUE=
- BUILD_PROFILING_LIB_FALSE='#'
-else
- BUILD_PROFILING_LIB_TRUE='#'
- BUILD_PROFILING_LIB_FALSE=
-fi
+ if test "x$pac_stk_ac_link_level" = x-1; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
-# ---------------------------------------------------------------------------
-# determine rpath and other shared library flags for CC
-# src/env may not exist yet in a vpath build
-$MKDIR_P src/env
-cc_shlib_conf=src/env/cc_shlib.conf
+else
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+fi
+else
-# It appears that the libtool dynamic linking strategy on Darwin is this:
-# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
-# 2. Don't do anything special when linking programs, since it seems that the
-# darwin dynamic linker will always use the "install_name" field from the lib
-# that was found at program link-time. (CONFIRMED) This is in opposition to
-# the way that Linux does it, where specifying a "-rpath" argument at program
-# link-time is important.
-#
-# There is an alternative darwin strategy for versions
-# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
-# (goodell@ 2011-06-17)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of CC" >&5
-$as_echo_n "checking for shared library (esp. rpath) characteristics of CC... " >&6; }
+fi
-# unfortunately, config.rpath expects the compiler in question is always CC and
-# uses several other environment variables as input
+# END of POPVAL
- if test -z "${pac_save_CC_nesting}" ; then
- pac_save_CC_nesting=0
- fi
- eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
- if test -z "${pac_save_GCC_nesting}" ; then
- pac_save_GCC_nesting=0
- fi
- eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
+else
- if test -z "${pac_save_LD_nesting}" ; then
- pac_save_LD_nesting=0
- fi
- eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
-# these two don't currently get overridden, but we push/pop them for safety in
-# case they do in the future
+ pac_result=no
- if test -z "${pac_save_LDFLAGS_nesting}" ; then
- pac_save_LDFLAGS_nesting=0
- fi
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
- if test -z "${pac_save_with_gnu_ld_nesting}" ; then
- pac_save_with_gnu_ld_nesting=0
- fi
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
+# START of POPVAL
+if ${pac_stk_ac_link_level+:} false; then :
-# set the temporary override values (if any)
-:
+ if test "x$pac_stk_ac_link_level" = x-1; then :
-# ensure the values are available to the script
-export CC
-export GCC
-export LDFLAGS
-export LD
-export with_gnu_ld
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
-if $ac_aux_dir/config.rpath "$host" > $cc_shlib_conf; then :
- :
else
- as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
-fi
-
-C_LINKPATH_SHL=""
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
-rm -f conftest.out
-
-# restore the old values
-
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
- eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
+fi
+else
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
- eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
- eval pac_save_LD_${pac_save_LD_nesting}=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+fi
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
- eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
+# END of POPVAL
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
- eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
- eval pac_save_GCC_${pac_save_GCC_nesting}=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
+$as_echo "$pac_result" >&6; }
+rm -f conftest.$ac_ext
+# gcc 4.2.4 on 32-bit does not complain about the -Wno-type-limits option
+# even though it doesn't support it. However, when another warning is
+# triggered, it gives an error that the option is not recognized. So we
+# need to test with a conftest file that will generate warnings.
+#
+# add an extra switch, pac_c_check_compiler_option_prototest, to
+# disable this test just in case some new compiler does not like it.
+#
+# Linking with a program with an invalid prototype to ensure a compiler warning.
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
- eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
- eval pac_save_CC_${pac_save_CC_nesting}=""
+if test "$pac_result" = "yes" \
+ -a "$pac_c_check_compiler_option_prototest" != "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler option $MPI_DEFAULT_COPTS works with an invalid prototype program" >&5
+$as_echo_n "checking whether C compiler option $MPI_DEFAULT_COPTS works with an invalid prototype program... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+ int main(int argc, char **argv){ int foo, bar = 0; foo += 1; return foo; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $cc_shlib_conf)" >&5
-$as_echo "done (results in $cc_shlib_conf)" >&6; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_result=yes
+else
+ pac_result=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
+$as_echo "$pac_result" >&6; }
+fi
+#
+if test "$pac_result" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt" >&5
+$as_echo_n "checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt... " >&6; }
+ pac_result=unknown
+ CFLAGS="$CFLAGS_orig"
+ rm -f pac_test3.log
+# START of PUSHVAL
-# output rpath flags in a usable format for mpich.pc (pkg-config)
-if test "X$enable_wrapper_rpath" = "Xyes"; then
- eval WRAPPER_RPATH_LDFLAGS=\"$hardcode_libdir_flag_spec\"
-fi
+if ${pac_stk_ac_compile_level+:} false; then :
+ as_fn_arith $pac_stk_ac_compile_level + 1 && pac_stk_ac_compile_level=$as_val
-# ---------------------------------------------------------------------------
-# Support for MPI_T performance variables
+else
-# enable-mpit-pvars
-# strip off multiple options, separated by commas
-save_IFS="$IFS"
-IFS=","
-for var in $enable_mpit_pvars ; do
- case "$var" in #(
- nem) :
- enable_pvar_nem=yes ;; #(
- recvq) :
- enable_pvar_recvq=yes ;; #(
- rma) :
- enable_pvar_rma=yes ;; #(
- all|yes) :
- enable_pvar_nem=yes
- enable_pvar_recvq=yes
- enable_pvar_rma=yes ;; #(
- no|none) :
- ;; #(
- *) :
- IFS=$save_IFS
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value ($option) for enable-mpit-pvars" >&5
-$as_echo "$as_me: WARNING: Unknown value ($option) for enable-mpit-pvars" >&2;}
- IFS="," ;;
-esac
-done
-IFS="$save_IFS"
+ pac_stk_ac_compile_level=0
-if test -n "$enable_pvar_nem" ; then
- status_nem_pvars=1
-else
- status_nem_pvars=0
fi
+eval "pac_stk_ac_compile_$pac_stk_ac_compile_level=\$ac_compile"
+if test "x$pac_stk_ac_compile_level" = x0; then :
-cat >>confdefs.h <<_ACEOF
-#define ENABLE_PVAR_NEM $status_nem_pvars
-_ACEOF
-
+ eval pac_FirstSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
-if test -n "$enable_pvar_recvq" ; then
- status_recvq_pvars=1
-else
- status_recvq_pvars=0
fi
-cat >>confdefs.h <<_ACEOF
-#define ENABLE_PVAR_RECVQ $status_recvq_pvars
-_ACEOF
+ eval pac_LastSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
-if test -n "$enable_pvar_rma" ; then
- status_rma_pvars=1
-else
- status_rma_pvars=0
-fi
+# END of PUSHVAL
-cat >>confdefs.h <<_ACEOF
-#define ENABLE_PVAR_RMA $status_rma_pvars
-_ACEOF
+ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> pac_test3.log 2>\&1|g'`"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# ---------------------------------------------------------------------------
-# Support for the language bindings: Fortran 77, Fortran 90, and C++
-#
-# First, we handle the case of no explicit enable/disable option. In that
-# case, we look for a usable compiler. We cannot use the ac macros for this
-# because they abort the configure step if they fail to find a compiler
-# (earlier versions of autoconf did not have this behavior!).
-#
-# Second, we perform the langugage-specific tests, if necessary. This may
-# be relatively simple (C++) or complex (Fortran 77, including formation of
-# the encoded MPI handles).
-#
-# Note that the bindings support needs to know some of the properties of
-# the C compiler, so those tests (particularly for weak symbols)
-# must come first.
-# ----------------------------------------------------------------------------
-#
-# First, determine whether we are/can support the language bindings
-#
-# Since F90/F90FLAGS are replaced by FC/FCFLAGS, rather than silently
-# substituting them, i.e. FC=$F90 and FCFLAGS=$F90FLAGS, we choose to emit
-# an error message and abort to avoid any ambiguous/hidden bug in choosing
-# Fortran90 compilers.
-if test -n "$F90" -o -n "$F90FLAGS" ; then
- as_fn_error $? "F90 and F90FLAGS are replaced by FC and FCFLAGS respectively in this configure, please unset F90/F90FLAGS and set FC/FCFLAGS instead and rerun configure again." "$LINENO" 5
-fi
-# ----------------------------------------------------------------------------
-# Handle default choices for the Fortran compilers
-# Note that these have already been set above
+ int foo(void);
+ int foo(void){return 0;}
-if test "$enable_f77" = "yes"; then
- if test "$F77" = "" -o "$F77" = "no"; then
- # No Fortran 77 compiler found; abort
- as_fn_error $? "No Fortran 77 compiler found. If you don't need to
- build any Fortran programs, you can disable Fortran support using
- --disable-fortran. If you do want to build Fortran
- programs, you need to install a Fortran compiler such as gfortran
- or ifort before you can proceed." "$LINENO" 5
- fi
-fi
-if test "$enable_f77" = yes ; then
- # Check if $MPI_DEFAULT_FOPTS is valid with $F77
- if test -n "$MPI_DEFAULT_FOPTS" ; then
- if test "$enable_check_compiler_flags" = "yes" ; then
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 compiler accepts option $MPI_DEFAULT_FOPTS" >&5
-$as_echo_n "checking whether Fortran 77 compiler accepts option $MPI_DEFAULT_FOPTS... " >&6; }
-pac_opt="$MPI_DEFAULT_FOPTS"
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-FFLAGS_orig="$FFLAGS"
-FFLAGS_opt="$pac_opt $FFLAGS"
-pac_result="unknown"
-cat > conftest.$ac_ext <<_ACEOF
- program main
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
- end
-_ACEOF
-FFLAGS="$FFLAGS_orig"
-rm -f pac_test1.log
+ rm -f pac_test4.log
# START of PUSHVAL
@@ -30166,12 +30375,23 @@ fi
# END of PUSHVAL
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
-if ac_fn_f77_try_link "$LINENO"; then :
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test4.log 2>\&1|g'`"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
- FFLAGS="$FFLAGS_opt"
- rm -f pac_test2.log
+
+ CFLAGS="$CFLAGS_opt"
+ rm -f pac_test5.log
# START of PUSHVAL
@@ -30197,8 +30417,19 @@ fi
# END of PUSHVAL
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
-if ac_fn_f77_try_link "$LINENO"; then :
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test5.log 2>\&1|g'`"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
@@ -30206,8 +30437,8 @@ pac_TESTLOG="pac_test.log"
rm -f $pac_TESTLOG
if
-{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
- (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
+{ $as_echo "$as_me:$LINENO: diff -b pac_test4.log pac_test5.log > $pac_TESTLOG" >&5
+ (eval diff -b pac_test4.log pac_test5.log > $pac_TESTLOG) 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
test $ac_status = 0; }; then :
@@ -30222,7 +30453,7 @@ else
(exit $ac_status)
- $as_echo "*** diff -b pac_test1.log pac_test2.log :" >&5
+ $as_echo "*** diff -b pac_test4.log pac_test5.log :" >&5
cat $pac_TESTLOG >&5
pac_result=no
@@ -30238,12 +30469,12 @@ rm -f $pac_TESTLOG
else
- pac_result=no
+ pac_result=no
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
+ conftest$ac_exeext conftest.$ac_ext
# START of POPVAL
@@ -30276,12 +30507,12 @@ fi
else
- pac_result=no
+ pac_result=no
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
+ conftest$ac_exeext conftest.$ac_ext
# START of POPVAL
@@ -30309,136 +30540,239 @@ fi
# END of POPVAL
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
-$as_echo "$pac_result" >&6; }
-rm -f conftest.$ac_ext
-#
-if test "$pac_result" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt" >&5
-$as_echo_n "checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt... " >&6; }
- pac_result=unknown
- FFLAGS="$FFLAGS_orig"
- rm -f pac_test3.log
-
-
-# START of PUSHVAL
-
-if ${pac_stk_ac_compile_level+:} false; then :
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
- as_fn_arith $pac_stk_ac_compile_level + 1 && pac_stk_ac_compile_level=$as_val
else
- pac_stk_ac_compile_level=0
-fi
-eval "pac_stk_ac_compile_$pac_stk_ac_compile_level=\$ac_compile"
-if test "x$pac_stk_ac_compile_level" = x0; then :
+ pac_result=no
- eval pac_FirstSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- eval pac_LastSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+# START of POPVAL
+if ${pac_stk_ac_compile_level+:} false; then :
-# END of PUSHVAL
+ if test "x$pac_stk_ac_compile_level" = x-1; then :
-ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> pac_test3.log 2>\&1|g'`"
-cat > conftest.$ac_ext <<_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&2;}
+else
- subroutine try()
- end
+ eval ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+ as_fn_arith $pac_stk_ac_compile_level - 1 && pac_stk_ac_compile_level=$as_val
+
+fi
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&2;}
+
+fi
+
+# END of POPVAL
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
+$as_echo "$pac_result" >&6; }
+ rm -f pac_test3.log pac_test4.log pac_test5.log
+fi
+rm -f pac_test1.log pac_test2.log
+
+CFLAGS="$CFLAGS_orig"
+if test "$pac_result" = "yes" ; then
+
+ CFLAGS="$CFLAGS $MPI_DEFAULT_COPTS"
+
+else
+ :
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ else
+ CFLAGS="$CFLAGS $MPI_DEFAULT_COPTS"
+ fi
+fi
+
+# Set NEEDSPLIB to yes if link commands need both -l$MPILIBNAME
+# and -lp$MPILIBNAME.
+NEEDSPLIB=yes
+if test $enable_weak_symbols = yes ; then
+ # Turn off weak symbols if they aren't available
+
+pragma_extra_message=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of weak symbol alias support" >&5
+$as_echo_n "checking for type of weak symbol alias support... " >&6; }
+if ${pac_cv_prog_c_weak_symbols+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# Test for weak symbol support...
+# We can't put # in the message because it causes autoconf to generate
+# incorrect code
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern int PFoo(int);
+#pragma weak PFoo = Foo
+int Foo(int a) { return a; }
+int
+main ()
+{
+return PFoo(1);
+ ;
+ return 0;
+}
_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
+ has_pragma_weak=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+#
+# Some systems (Linux ia64 and ecc, for example), support weak symbols
+# only within a single object file! This tests that case.
+# Note that there is an extern int PFoo declaration before the
+# pragma. Some compilers require this in order to make the weak symbol
+# externally visible.
+if test "$has_pragma_weak" = yes ; then
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+extern int PFoo(int);
+#pragma weak PFoo = Foo
+int Foo(int);
+int Foo(int a) { return a; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
(eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
-
- FFLAGS="$FFLAGS_opt"
- rm -f pac_test4.log
-
# START of PUSHVAL
-if ${pac_stk_ac_link_level+:} false; then :
+if ${pac_stk_LIBS_level+:} false; then :
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+ as_fn_arith $pac_stk_LIBS_level + 1 && pac_stk_LIBS_level=$as_val
else
- pac_stk_ac_link_level=0
+ pac_stk_LIBS_level=0
fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
+eval "pac_stk_LIBS_$pac_stk_LIBS_level=\$LIBS"
+if test "x$pac_stk_LIBS_level" = x0; then :
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ eval pac_FirstSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
fi
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ eval pac_LastSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
# END of PUSHVAL
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test4.log 2>\&1|g'`"
-cat > conftest.$ac_ext <<_ACEOF
- program main
+ LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+extern int PFoo(int);
+int main(int argc, char **argv) {
+return PFoo(0);}
+
- end
_ACEOF
-if ac_fn_f77_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-if
-{ $as_echo "$as_me:$LINENO: diff -b pac_test2.log pac_test4.log > $pac_TESTLOG" >&5
- (eval diff -b pac_test2.log pac_test4.log > $pac_TESTLOG) 2>&5
+
+extern int PFoo(int);
+#pragma weak PFoo = Foo
+int Foo(int);
+int Foo(int a) { return a; }
+
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ test $ac_status = 0; }
+# START of PUSHVAL
- pac_result=yes
+if ${pac_stk_LIBS_level+:} false; then :
+ as_fn_arith $pac_stk_LIBS_level + 1 && pac_stk_LIBS_level=$as_val
else
- $as_echo "$as_me: program exited with status $ac_status" >&5
+ pac_stk_LIBS_level=0
- (exit $ac_status)
+fi
+eval "pac_stk_LIBS_$pac_stk_LIBS_level=\$LIBS"
+if test "x$pac_stk_LIBS_level" = x0; then :
- $as_echo "*** diff -b pac_test2.log pac_test4.log :" >&5
- cat $pac_TESTLOG >&5
- pac_result=no
+ eval pac_FirstSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+fi
+ eval pac_LastSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
-fi
+# END of PUSHVAL
-rm -f $pac_TESTLOG
+ LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+extern int Foo(int);
+int PFoo(int a) { return a+1;}
+int main(int argc, char **argv) {
+return Foo(0);}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+
+ pac_cv_prog_c_weak_symbols="pragma weak"
+
else
- pac_result=no
+ has_pragma_weak=0
+ pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
fi
@@ -30447,1321 +30781,897 @@ rm -f core conftest.err conftest.$ac_objext \
# START of POPVAL
-if ${pac_stk_ac_link_level+:} false; then :
+if ${pac_stk_LIBS_level+:} false; then :
- if test "x$pac_stk_ac_link_level" = x-1; then :
+ if test "x$pac_stk_LIBS_level" = x-1; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&2;}
else
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+ eval LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+ as_fn_arith $pac_stk_LIBS_level - 1 && pac_stk_LIBS_level=$as_val
fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&2;}
fi
# END of POPVAL
-
- LIBS="$saved_LIBS"
- rm -f pac_conftest.$OBJEXT
-
+ rm -f pac_conftest.$OBJEXT
else
- pac_result=no
+ has_pragma_weak=0
+ pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# START of POPVAL
-if ${pac_stk_ac_compile_level+:} false; then :
- if test "x$pac_stk_ac_compile_level" = x-1; then :
+else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&2;}
-else
+ has_pragma_weak=0
+ pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
- eval ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
- as_fn_arith $pac_stk_ac_compile_level - 1 && pac_stk_ac_compile_level=$as_val
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
-else
+# START of POPVAL
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&2;}
+if ${pac_stk_LIBS_level+:} false; then :
-fi
+ if test "x$pac_stk_LIBS_level" = x-1; then :
-# END of POPVAL
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&2;}
+else
+
+ eval LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+ as_fn_arith $pac_stk_LIBS_level - 1 && pac_stk_LIBS_level=$as_val
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
-$as_echo "$pac_result" >&6; }
- rm -f pac_test3.log pac_test4.log
fi
-rm -f pac_test1.log pac_test2.log
-FFLAGS="$FFLAGS_orig"
-if test "$pac_result" = "yes" ; then
+else
- FFLAGS="$FFLAGS $MPI_DEFAULT_FOPTS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&2;}
-else
- :
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# END of POPVAL
- else
- FFLAGS="$FFLAGS $MPI_DEFAULT_FOPTS"
- fi
- fi
-fi
+ rm -f pac_conftest.$OBJEXT
-#
-# We need to know the name mangling for Fortran before testing for FC
-# compatibility (we need this because of the way we decide to generate
-# the Fortran 77 bindings)
-if test "$enable_f77" = yes ; then
- FLIBS_save="$FLIBS"
- FLIBS=""
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5
-$as_echo_n "checking how to get verbose linking output from $F77... " >&6; }
-if ${ac_cv_prog_f77_v+:} false; then :
- $as_echo_n "(cached) " >&6
else
- cat > conftest.$ac_ext <<_ACEOF
- program main
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- ac_cv_prog_f77_v=
-# Try some options frequently used verbose output
-for ac_verb in -v -verbose --verbose -V -\#\#\#; do
- cat > conftest.$ac_ext <<_ACEOF
- program main
- end
-_ACEOF
+ has_pragma_weak=0
+ pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FFLAGS
-FFLAGS="$FFLAGS $ac_verb"
-eval "set x $ac_link"
-shift
-$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
-# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
-# LIBRARY_PATH; skip all such settings.
-ac_f77_v_output=`eval $ac_link 5>&1 2>&1 |
- sed '/^Driving:/d; /^Configured with:/d;
- '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
-$as_echo "$ac_f77_v_output" >&5
-FFLAGS=$ac_save_FFLAGS
-rm -rf conftest*
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_f77_v_output="`echo $ac_f77_v_output |
- grep 'LPATH is:' |
- sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output"
+fi
+if test -z "$pac_cv_prog_c_weak_symbols" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# FIXME: we keep getting bitten by quoted arguments; a more general fix
-# that detects unbalanced quotes in FLIBS should be implemented
-# and (ugh) tested at some point.
-case $ac_f77_v_output in
- # With xlf replace commas with spaces,
- # and remove "-link" and closing parenthesis.
- *xlfentry*)
- ac_f77_v_output=`echo $ac_f77_v_output |
- sed '
- s/,/ /g
- s/ -link / /g
- s/) *$//
- '
- ` ;;
+extern int PFoo(int);
+#pragma _HP_SECONDARY_DEF Foo PFoo
+int Foo(int a) { return a; }
- # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
- # $LIBS confuse us, and the libraries appear later in the output anyway).
- *mGLOB_options_string*)
- ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+int
+main ()
+{
+return PFoo(1);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_prog_c_weak_symbols="pragma _HP_SECONDARY_DEF"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+if test -z "$pac_cv_prog_c_weak_symbols" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- # Portland Group compiler has singly- or doubly-quoted -cmdline argument
- # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
- # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
- *-cmdline\ * | *-ignore\ * | *-def\ *)
- ac_f77_v_output=`echo $ac_f77_v_output | sed "\
- s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g
- s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g
- s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;;
+extern int PFoo(int);
+#pragma _CRI duplicate PFoo as Foo
+int Foo(int a) { return a; }
- # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
- *fort77*f2c*gcc*)
- ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n '
- /:[ ]\+Running[ ]\{1,\}"gcc"/{
- /"-c"/d
- /[.]c"*/d
- s/^.*"gcc"/"gcc"/
- s/"//gp
- }'` ;;
+int
+main ()
+{
+return PFoo(1);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_prog_c_weak_symbols="pragma _CRI duplicate x as y"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+if test -z "$pac_cv_prog_c_weak_symbols" ; then
+ pac_cv_prog_c_weak_symbols="no"
+fi
+if test -n "$pragma_extra_message" ; then
+ echo $pragma_extra_message
+fi
- # If we are using Cray Fortran then delete quotes.
- *cft90*)
- ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;;
-esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_c_weak_symbols" >&5
+$as_echo "$pac_cv_prog_c_weak_symbols" >&6; }
+if test "$pac_cv_prog_c_weak_symbols" != "no" ; then
+ case "$pac_cv_prog_c_weak_symbols" in
+ "pragma weak")
+$as_echo "#define HAVE_PRAGMA_WEAK 1" >>confdefs.h
+
+ ;;
+ "pragma _HP")
+$as_echo "#define HAVE_PRAGMA_HP_SEC_DEF 1" >>confdefs.h
+ ;;
+ "pragma _CRI")
+$as_echo "#define HAVE_PRAGMA_CRI_DUP 1" >>confdefs.h
- # look for -l* and *.a constructs in the output
- for ac_arg in $ac_f77_v_output; do
- case $ac_arg in
- [\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
- ac_cv_prog_f77_v=$ac_verb
- break 2 ;;
- esac
- done
-done
-if test -z "$ac_cv_prog_f77_v"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5
-$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;}
+ ;;
+ esac
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ ((weak)) allowed" >&5
+$as_echo_n "checking whether __attribute__ ((weak)) allowed... " >&6; }
+if ${pac_cv_attr_weak+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5
-$as_echo "$as_me: WARNING: compilation failed" >&2;}
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(int) __attribute__ ((weak));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_attr_weak=yes
+else
+ pac_cv_attr_weak=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5
-$as_echo "$ac_cv_prog_f77_v" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5
-$as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; }
-if ${ac_cv_f77_libs+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_attr_weak" >&5
+$as_echo "$pac_cv_attr_weak" >&6; }
+# Note that being able to compile with weak_import doesn't mean that
+# it works.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ ((weak_import)) allowed" >&5
+$as_echo_n "checking whether __attribute__ ((weak_import)) allowed... " >&6; }
+if ${pac_cv_attr_weak_import+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test "x$FLIBS" != "x"; then
- ac_cv_f77_libs="$FLIBS" # Let the user override the test.
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(int) __attribute__ ((weak_import));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_attr_weak_import=yes
+else
+ pac_cv_attr_weak_import=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_attr_weak_import" >&5
+$as_echo "$pac_cv_attr_weak_import" >&6; }
+# Check if the alias option for weak attributes is allowed
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((weak,alias(...))) allowed" >&5
+$as_echo_n "checking whether __attribute__((weak,alias(...))) allowed... " >&6; }
+if ${pac_cv_attr_weak_alias+:} false; then :
+ $as_echo_n "(cached) " >&6
else
-cat > conftest.$ac_ext <<_ACEOF
- program main
- end
-_ACEOF
+ if test -z "${pac_save_CFLAGS_nesting}" ; then
+ pac_save_CFLAGS_nesting=0
+ fi
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}='"$CFLAGS"'
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} + 1`
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FFLAGS
-FFLAGS="$FFLAGS $ac_cv_prog_f77_v"
-eval "set x $ac_link"
-shift
-$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
-# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
-# LIBRARY_PATH; skip all such settings.
-ac_f77_v_output=`eval $ac_link 5>&1 2>&1 |
- sed '/^Driving:/d; /^Configured with:/d;
- '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
-$as_echo "$ac_f77_v_output" >&5
-FFLAGS=$ac_save_FFLAGS
+# force an error exit if the weak attribute isn't understood
+CFLAGS=-Werror
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int __foo(int a){return 0;} int foo(int) __attribute__((weak,alias("__foo")));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_attr_weak_alias=yes
+else
+ pac_cv_attr_weak_alias=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Restore original CFLAGS
-rm -rf conftest*
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} - 1`
+ eval CFLAGS="\$pac_save_CFLAGS_${pac_save_CFLAGS_nesting}"
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}=""
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_f77_v_output="`echo $ac_f77_v_output |
- grep 'LPATH is:' |
- sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_attr_weak_alias" >&5
+$as_echo "$pac_cv_attr_weak_alias" >&6; }
+if test "$pac_cv_attr_weak_alias" = "yes" ; then
-# FIXME: we keep getting bitten by quoted arguments; a more general fix
-# that detects unbalanced quotes in FLIBS should be implemented
-# and (ugh) tested at some point.
-case $ac_f77_v_output in
- # With xlf replace commas with spaces,
- # and remove "-link" and closing parenthesis.
- *xlfentry*)
- ac_f77_v_output=`echo $ac_f77_v_output |
- sed '
- s/,/ /g
- s/ -link / /g
- s/) *$//
- '
- ` ;;
+$as_echo "#define HAVE_WEAK_ATTRIBUTE 1" >>confdefs.h
- # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
- # $LIBS confuse us, and the libraries appear later in the output anyway).
- *mGLOB_options_string*)
- ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+fi
+if test "$pac_cv_prog_c_weak_symbols" = "no" -a "$pac_cv_attr_weak_alias" = "no" ; then
+ enable_weak_symbols=no
+else
+ :
+fi
- # Portland Group compiler has singly- or doubly-quoted -cmdline argument
- # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
- # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
- *-cmdline\ * | *-ignore\ * | *-def\ *)
- ac_f77_v_output=`echo $ac_f77_v_output | sed "\
- s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g
- s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g
- s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;;
+fi
+if test $enable_weak_symbols = "yes" ; then
- # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
- *fort77*f2c*gcc*)
- ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n '
- /:[ ]\+Running[ ]\{1,\}"gcc"/{
- /"-c"/d
- /[.]c"*/d
- s/^.*"gcc"/"gcc"/
- s/"//gp
- }'` ;;
+$as_echo "#define USE_WEAK_SYMBOLS 1" >>confdefs.h
- # If we are using Cray Fortran then delete quotes.
- *cft90*)
- ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;;
-esac
+ NEEDSPLIB=no
+ # Check for the ability to support multiple weak symbols
+ if test "$pac_cv_prog_c_weak_symbols" = "pragma weak" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiple weak symbol support" >&5
+$as_echo_n "checking for multiple weak symbol support... " >&6; }
+if ${pac_cv_prog_c_multiple_weak_symbols+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+# Test for multiple weak symbol support...
-ac_cv_f77_libs=
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Save positional arguments (if any)
-ac_save_positional="$@"
-set X $ac_f77_v_output
-while test $# != 1; do
- shift
- ac_arg=$1
- case $ac_arg in
- [\\/]*.a | ?:[\\/]*.a)
- ac_exists=false
- for ac_i in $ac_cv_f77_libs; do
- if test x"$ac_arg" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
+extern int PFoo(int);
+extern int PFoo_(int);
+extern int pfoo_(int);
+#pragma weak PFoo = Foo
+#pragma weak PFoo_ = Foo
+#pragma weak pfoo_ = Foo
+int Foo(int);
+int Foo(a) { return a; }
- if test x"$ac_exists" = xtrue; then :
-else
- ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-fi
- ;;
- -bI:*)
- ac_exists=false
- for ac_i in $ac_cv_f77_libs; do
- if test x"$ac_arg" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
- if test x"$ac_exists" = xtrue; then :
-else
- if test "$ac_compiler_gnu" = yes; then
- for ac_link_opt in $ac_arg; do
- ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt"
- done
-else
- ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-fi
-fi
- ;;
- # Ignore these flags.
- -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
- |-LANG:=* | -LIST:* | -LNO:* | -link)
- ;;
- -lkernel32)
- case $host_os in
- *cygwin*) ;;
- *) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
- ;;
- esac
- ;;
- -[LRuYz])
- # These flags, when seen by themselves, take an argument.
- # We remove the space between option and argument and re-iterate
- # unless we find an empty arg or a new option (starting with -)
- case $2 in
- "" | -*);;
- *)
- ac_arg="$ac_arg$2"
- shift; shift
- set X $ac_arg "$@"
- ;;
- esac
- ;;
- -YP,*)
- for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
- ac_exists=false
- for ac_i in $ac_cv_f77_libs; do
- if test x"$ac_j" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
- if test x"$ac_exists" = xtrue; then :
+# START of PUSHVAL
-else
- ac_arg="$ac_arg $ac_j"
- ac_cv_f77_libs="$ac_cv_f77_libs $ac_j"
-fi
- done
- ;;
- -[lLR]*)
- ac_exists=false
- for ac_i in $ac_cv_f77_libs; do
- if test x"$ac_arg" = x"$ac_i"; then
- ac_exists=true
- break
- fi
- done
+if ${pac_stk_LIBS_level+:} false; then :
- if test x"$ac_exists" = xtrue; then :
+ as_fn_arith $pac_stk_LIBS_level + 1 && pac_stk_LIBS_level=$as_val
else
- ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-fi
- ;;
- -zallextract*| -zdefaultextract)
- ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
- ;;
- # Ignore everything else.
- esac
-done
-# restore positional arguments
-set X $ac_save_positional; shift
-# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen,
-# then we insist that the "run path" must be an absolute path (i.e. it
-# must begin with a "/").
-case `(uname -sr) 2>/dev/null` in
- "SunOS 5"*)
- ac_ld_run_path=`$as_echo "$ac_f77_v_output" |
- sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
- test "x$ac_ld_run_path" != x &&
- if test "$ac_compiler_gnu" = yes; then
- for ac_link_opt in $ac_ld_run_path; do
- ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt"
- done
-else
- ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path"
-fi
- ;;
-esac
-fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
+ pac_stk_LIBS_level=0
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5
-$as_echo "$ac_cv_f77_libs" >&6; }
-FLIBS="$ac_cv_f77_libs"
+eval "pac_stk_LIBS_$pac_stk_LIBS_level=\$LIBS"
+if test "x$pac_stk_LIBS_level" = x0; then :
+ eval pac_FirstSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
- # The autoconf macro for finding FLIBS sometimes makes mistakes
- # (particularly with the Fujitsu frt compiler). This next step
- # first sees if the FLIBS is valid with the Fortran compiler
+ eval pac_LastSavedValueOf_LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts the FLIBS found by autoconf" >&5
-$as_echo_n "checking whether $F77 accepts the FLIBS found by autoconf... " >&6; }
-pac_cv_f77_flibs_valid=unknown
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+# END of PUSHVAL
-cat > conftest.$ac_ext <<_ACEOF
+ LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- program main
- end
+extern int PFoo(int), PFoo_(int), pfoo_(int);
+int main() {
+return PFoo(0) + PFoo_(1) + pfoo_(2);}
_ACEOF
-if ac_fn_f77_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
+
+
+ pac_cv_prog_c_multiple_weak_symbols="yes"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid entries in FLIBS" >&5
-$as_echo_n "checking for valid entries in FLIBS... " >&6; }
- goodFLIBS=""
- saveFLIBS=$FLIBS
- FLIBS=""
- for arg in $saveFLIBS ; do
- FLIBS="$goodFLIBS $arg"
- if ac_fn_f77_try_link "$LINENO"; then :
- goodFLIBS=$FLIBS
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- done
- FLIBS=$goodFLIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLIBS" >&5
-$as_echo "$FLIBS" >&6; }
+ :
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
-rm -f conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
- # Now see if FLIBS works with the C compiler
+ conftest$ac_exeext conftest.$ac_ext
+# START of POPVAL
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC links with FLIBS found by autoconf" >&5
-$as_echo_n "checking whether $CC links with FLIBS found by autoconf... " >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if ${pac_stk_LIBS_level+:} false; then :
-# Create a simple C program for the tests.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ if test "x$pac_stk_LIBS_level" = x-1; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of LIBS\"" >&2;}
-int
-main ()
-{
-int a;
- ;
- return 0;
-}
+else
-_ACEOF
-# Try to link a C program with all of these libraries
-saved_LIBS="$LIBS"
-LIBS="$FLIBS $saved_LIBS"
-if ac_fn_c_try_link "$LINENO"; then :
+ eval LIBS=\$pac_stk_LIBS_$pac_stk_LIBS_level
+ as_fn_arith $pac_stk_LIBS_level - 1 && pac_stk_LIBS_level=$as_val
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for which libraries can be used" >&5
-$as_echo_n "checking for which libraries can be used... " >&6; }
- pac_ldirs=""
- pac_libs=""
- pac_other=""
- for name in $FLIBS ; do
- case $name in
- -l*) pac_libs="$pac_libs $name" ;;
- -L*) pac_ldirs="$pac_ldirs $name" ;;
- *) pac_other="$pac_other $name" ;;
- esac
- done
- keep_libs=""
- for name in $pac_libs ; do
- LIBS="$saved_LIBS $pac_ldirs $pac_other $name"
- if ac_fn_c_try_link "$LINENO"; then :
-
- keep_libs="$keep_libs $name"
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- done
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $keep_libs" >&5
-$as_echo "$keep_libs" >&6; }
- FLIBS="$pac_ldirs $pac_other $keep_libs"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of LIBS\"" >&2;}
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
-LIBS="$saved_LIBS"
-rm -f conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# END of POPVAL
+ rm -f pac_conftest.$OBJEXT
- # Check F77+FLAGS is compatible with CC+CFLAGS before using F77+CC.
+else
+ :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 and C objects are compatible" >&5
-$as_echo_n "checking whether Fortran 77 and C objects are compatible... " >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_c_multiple_weak_symbols" >&5
+$as_echo "$pac_cv_prog_c_multiple_weak_symbols" >&6; }
+if test "$pac_cv_prog_c_multiple_weak_symbols" = "yes" ; then
-/* lower */
-void c_subpgm( int *rc );
-void c_subpgm( int *rc ) { *rc = 1; }
+$as_echo "#define HAVE_MULTIPLE_PRAGMA_WEAK 1" >>confdefs.h
-/* lower underscore */
-void c_subpgm_( int *rc );
-void c_subpgm_( int *rc ) { *rc = 2; }
+else
+ :
+fi
-/* upper */
-void C_SUBPGM( int *rc );
-void C_SUBPGM( int *rc ) { *rc = 3; }
+ fi
+fi
+export NEEDSPLIB
-/* lower doubleunderscore */
-void c_subpgm__( int *rc );
-void c_subpgm__( int *rc ) { *rc = 4; }
+ if test "$NEEDSPLIB" = "yes"; then
+ BUILD_PROFILING_LIB_TRUE=
+ BUILD_PROFILING_LIB_FALSE='#'
+else
+ BUILD_PROFILING_LIB_TRUE='#'
+ BUILD_PROFILING_LIB_FALSE=
+fi
-/* mixed */
-void C_subpgm( int *rc );
-void C_subpgm( int *rc ) { *rc = 5; }
-/* mixed underscore */
-void C_subpgm_( int *rc );
-void C_subpgm_( int *rc ) { *rc = 6; }
+# ---------------------------------------------------------------------------
+# determine rpath and other shared library flags for CC
+# src/env may not exist yet in a vpath build
+$MKDIR_P src/env
+cc_shlib_conf=src/env/cc_shlib.conf
-_ACEOF
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+# It appears that the libtool dynamic linking strategy on Darwin is this:
+# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
+# 2. Don't do anything special when linking programs, since it seems that the
+# darwin dynamic linker will always use the "install_name" field from the lib
+# that was found at program link-time. (CONFIRMED) This is in opposition to
+# the way that Linux does it, where specifying a "-rpath" argument at program
+# link-time is important.
+#
+# There is an alternative darwin strategy for versions
+# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
+# (goodell@ 2011-06-17)
-cat > conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of CC" >&5
+$as_echo_n "checking for shared library (esp. rpath) characteristics of CC... " >&6; }
+# unfortunately, config.rpath expects the compiler in question is always CC and
+# uses several other environment variables as input
- program test
- integer rc
- rc = -1
- call c_subpgm( rc )
- write(6,*) "rc=", rc
- end
+ if test -z "${pac_save_CC_nesting}" ; then
+ pac_save_CC_nesting=0
+ fi
+ eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
-_ACEOF
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -z "${pac_save_GCC_nesting}" ; then
+ pac_save_GCC_nesting=0
+ fi
+ eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
-pac_linkwithf77=no
-pac_linkwithC=no
+ if test -z "${pac_save_LD_nesting}" ; then
+ pac_save_LD_nesting=0
+ fi
+ eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
-if test "$pac_linkwithC" != "yes" ; then
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# these two don't currently get overridden, but we push/pop them for safety in
+# case they do in the future
- if ac_fn_c_try_compile "$LINENO"; then :
+ if test -z "${pac_save_LDFLAGS_nesting}" ; then
+ pac_save_LDFLAGS_nesting=0
+ fi
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $saved_LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ if test -z "${pac_save_with_gnu_ld_nesting}" ; then
+ pac_save_with_gnu_ld_nesting=0
+ fi
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
- if ac_fn_f77_try_link "$LINENO"; then :
- pac_linkwithf77=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+# set the temporary override values (if any)
+:
+
+# ensure the values are available to the script
+export CC
+export GCC
+export LDFLAGS
+export LD
+export with_gnu_ld
+if $ac_aux_dir/config.rpath "$host" > $cc_shlib_conf; then :
+ :
+else
+ as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
- LIBS="$saved_LIBS"
- if test "$pac_linkwithf77" = "yes" ; then
- rm -f pac_conftest.$OBJEXT
- fi
+C_LINKPATH_SHL=""
-fi
-rm -f core conftest.err conftest.$ac_objext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
+rm -f conftest.out
-if test "$pac_linkwithf77" != "yes" ; then
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+# restore the old values
- if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
+ eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
+ eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
+ eval pac_save_LD_${pac_save_LD_nesting}=""
- if ac_fn_c_try_link "$LINENO"; then :
- pac_linkwithC=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
+ eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- LIBS="$saved_LIBS"
- if test "$pac_linkwithC" = "yes" ; then
- rm -f pac_f77conftest.$OBJEXT
- fi
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
+ eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
+ eval pac_save_GCC_${pac_save_GCC_nesting}=""
-fi
-rm -f core conftest.err conftest.$ac_objext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
+ eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
+ eval pac_save_CC_${pac_save_CC_nesting}=""
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-rm -f conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $cc_shlib_conf)" >&5
+$as_echo "done (results in $cc_shlib_conf)" >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-rm -f conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# output rpath flags in a usable format for mpich.pc (pkg-config)
+if test "X$enable_wrapper_rpath" = "Xyes"; then
+ eval WRAPPER_RPATH_LDFLAGS=\"$hardcode_libdir_flag_spec\"
+fi
-if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- # Extract the first word of "file", so it can be a program name with args.
-set dummy file; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_FILE+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$FILE"; then
- ac_cv_prog_FILE="$FILE" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_FILE="file"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
+# ---------------------------------------------------------------------------
+# Support for MPI_T performance variables
+
+# enable-mpit-pvars
+# strip off multiple options, separated by commas
+save_IFS="$IFS"
+IFS=","
+for var in $enable_mpit_pvars ; do
+ case "$var" in #(
+ nem) :
+ enable_pvar_nem=yes ;; #(
+ recvq) :
+ enable_pvar_recvq=yes ;; #(
+ rma) :
+ enable_pvar_rma=yes ;; #(
+ dims) :
+ enable_pvar_dims=yes ;; #(
+ all|yes) :
+ enable_pvar_nem=yes
+ enable_pvar_recvq=yes
+ enable_pvar_rma=yes
+ enable_pvar_dims=yes
+ ;; #(
+ no|none) :
+ ;; #(
+ *) :
+ IFS=$save_IFS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value ($option) for enable-mpit-pvars" >&5
+$as_echo "$as_me: WARNING: Unknown value ($option) for enable-mpit-pvars" >&2;}
+ IFS="," ;;
+esac
done
- done
-IFS=$as_save_IFS
+IFS="$save_IFS"
-fi
-fi
-FILE=$ac_cv_prog_FILE
-if test -n "$FILE"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5
-$as_echo "$FILE" >&6; }
+if test -n "$enable_pvar_nem" ; then
+ status_nem_pvars=1
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test "X$FILE" != "X" ; then
- fobjtype="`${FILE} pac_f77conftest.$OBJEXT | sed -e \"s|pac_f77conftest\.$OBJEXT||g\"`"
- cobjtype="`${FILE} pac_conftest.$OBJEXT | sed -e \"s|pac_conftest\.$OBJEXT||g\"`"
- if test "$fobjtype" != "$cobjtype" ; then
- as_fn_error $? "**** Incompatible Fortran and C Object File Types! ****
-F77 Object File Type produced by \"${F77} ${FFLAGS}\" is : ${fobjtype}.
- C Object File Type produced by \"${CC} ${CFLAGS}\" is : ${cobjtype}." "$LINENO" 5
- fi
- fi
+ status_nem_pvars=0
fi
+cat >>confdefs.h <<_ACEOF
+#define ENABLE_PVAR_NEM $status_nem_pvars
+_ACEOF
+if test -n "$enable_pvar_recvq" ; then
+ status_recvq_pvars=1
+else
+ status_recvq_pvars=0
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker for Fortran main program" >&5
-$as_echo_n "checking for linker for Fortran main program... " >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+cat >>confdefs.h <<_ACEOF
+#define ENABLE_PVAR_RECVQ $status_recvq_pvars
+_ACEOF
-int
-main ()
-{
-long long a;
- ;
- return 0;
-}
+if test -n "$enable_pvar_rma" ; then
+ status_rma_pvars=1
+else
+ status_rma_pvars=0
+fi
+cat >>confdefs.h <<_ACEOF
+#define ENABLE_PVAR_RMA $status_rma_pvars
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-
-$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
+if test -n "$enable_pvar_dims" ; then
+ status_dims_pvars=1
+else
+ status_dims_pvars=0
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+cat >>confdefs.h <<_ACEOF
+#define ENABLE_PVAR_DIMS $status_dims_pvars
+_ACEOF
-#ifdef HAVE_LONG_LONG
-int f(int a, long long b) { int c; c = a * ( b / 3 ) / (b-1); return c ; }
-#else
-int f(int a, long b) { int c; c = a * b / (b-1); return c ; }
-#endif
+# ---------------------------------------------------------------------------
+# Support for the language bindings: Fortran 77, Fortran 90, and C++
+#
+# First, we handle the case of no explicit enable/disable option. In that
+# case, we look for a usable compiler. We cannot use the ac macros for this
+# because they abort the configure step if they fail to find a compiler
+# (earlier versions of autoconf did not have this behavior!).
+#
+# Second, we perform the langugage-specific tests, if necessary. This may
+# be relatively simple (C++) or complex (Fortran 77, including formation of
+# the encoded MPI handles).
+#
+# Note that the bindings support needs to know some of the properties of
+# the C compiler, so those tests (particularly for weak symbols)
+# must come first.
+# ----------------------------------------------------------------------------
+#
+# First, determine whether we are/can support the language bindings
+#
+# Since F90/F90FLAGS are replaced by FC/FCFLAGS, rather than silently
+# substituting them, i.e. FC=$F90 and FCFLAGS=$F90FLAGS, we choose to emit
+# an error message and abort to avoid any ambiguous/hidden bug in choosing
+# Fortran90 compilers.
+if test -n "$F90" -o -n "$F90FLAGS" ; then
+ as_fn_error $? "F90 and F90FLAGS are replaced by FC and FCFLAGS respectively in this configure, please unset F90/F90FLAGS and set FC/FCFLAGS instead and rerun configure again." "$LINENO" 5
+fi
+# ----------------------------------------------------------------------------
+# Handle default choices for the Fortran compilers
+# Note that these have already been set above
-_ACEOF
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test "$enable_f77" = "yes"; then
+ if test "$F77" = "" -o "$F77" = "no"; then
+ # No Fortran 77 compiler found; abort
+ as_fn_error $? "No Fortran 77 compiler found. If you don't need to
+ build any Fortran programs, you can disable Fortran support using
+ --disable-fortran. If you do want to build Fortran
+ programs, you need to install a Fortran compiler such as gfortran
+ or ifort before you can proceed." "$LINENO" 5
+ fi
+fi
+if test "$enable_f77" = yes ; then
+ # Check if $MPI_DEFAULT_FOPTS is valid with $F77
+ if test -n "$MPI_DEFAULT_FOPTS" ; then
+ if test "$enable_check_compiler_flags" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 compiler accepts option $MPI_DEFAULT_FOPTS" >&5
+$as_echo_n "checking whether Fortran 77 compiler accepts option $MPI_DEFAULT_FOPTS... " >&6; }
+pac_opt="$MPI_DEFAULT_FOPTS"
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+FFLAGS_orig="$FFLAGS"
+FFLAGS_opt="$pac_opt $FFLAGS"
+pac_result="unknown"
+
cat > conftest.$ac_ext <<_ACEOF
+ program main
+ end
+_ACEOF
+FFLAGS="$FFLAGS_orig"
+rm -f pac_test1.log
- program main
- double precision d
- print *, "hi"
- end
+# START of PUSHVAL
-_ACEOF
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if ${pac_stk_ac_link_level+:} false; then :
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
-pac_linkwithf77=no
-pac_linkwithC=no
+else
-if test "$pac_linkwithC" != "yes" ; then
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ pac_stk_ac_link_level=0
- if ac_fn_c_try_compile "$LINENO"; then :
+fi
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $saved_LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+fi
- if ac_fn_f77_try_link "$LINENO"; then :
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Use Fortran to link programs" >&5
-$as_echo "Use Fortran to link programs" >&6; }
- pac_linkwithf77=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# END of PUSHVAL
- LIBS="$saved_LIBS"
- rm -f pac_conftest.$OBJEXT
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
+if ac_fn_f77_try_link "$LINENO"; then :
-fi
-rm -f core conftest.err conftest.$ac_objext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
+ FFLAGS="$FFLAGS_opt"
+ rm -f pac_test2.log
-if test "$pac_linkwithf77" != "yes" ; then
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- if ac_fn_f77_try_compile "$LINENO"; then :
+# START of PUSHVAL
+if ${pac_stk_ac_link_level+:} false; then :
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
- if ac_fn_c_try_link "$LINENO"; then :
+else
- pac_linkwithC=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Use C with FLIBS to link programs" >&5
-$as_echo "Use C with FLIBS to link programs" >&6; }
- F77LINKER="$CC"
- F77_LDFLAGS="$F77_LDFLAGS $FLIBS"
+ pac_stk_ac_link_level=0
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
- LIBS="$saved_LIBS"
- rm -f pac_f77conftest.$OBJEXT
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
fi
-rm -f core conftest.err conftest.$ac_objext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-rm -f conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# END of PUSHVAL
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
+if ac_fn_f77_try_link "$LINENO"; then :
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-rm -f conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
-if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
- as_fn_error $? "Could not determine a way to link a Fortran test program!" "$LINENO" 5
-fi
+if
+{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
+ (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
- # For name mangle, we need the library flags
+
+ pac_result=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name mangling" >&5
-$as_echo_n "checking for Fortran 77 name mangling... " >&6; }
-if ${pac_cv_prog_f77_name_mangle+:} false; then :
- $as_echo_n "(cached) " >&6
else
-# Initialize pac_found to indicate if name mangling scheme has been found
-pac_found=no
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ $as_echo "$as_me: program exited with status $ac_status" >&5
-cat > conftest.$ac_ext <<_ACEOF
+ (exit $ac_status)
+ $as_echo "*** diff -b pac_test1.log pac_test2.log :" >&5
+ cat $pac_TESTLOG >&5
+ pac_result=no
- subroutine MY_name( ii )
- return
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
+fi
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT f77conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT f77conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="f77conftest.$OBJEXT $FLIBS $LIBS"
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+rm -f $pac_TESTLOG
- for call in "" __stdcall ; do
- for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
- extern void ${call} ${sym}(int);
-int
-main ()
-{
-${sym}(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+else
+
+
+ pac_result=no
- pac_found=yes
- break
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- done
- test "$pac_found" = "yes" && break
- done
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ conftest$ac_exeext
- LIBS="$saved_LIBS"
- rm -f f77conftest.$OBJEXT
+# START of POPVAL
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if ${pac_stk_ac_link_level+:} false; then :
-# If we got to here and pac_cv_prog_f77_name_mangle is still NOT definable,
-# it may be that the programs have to be linked with the Fortran compiler,
-# not the C compiler. Try reversing the language used for the test
-if test "$pac_found" != "yes" ; then
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test "x$pac_stk_ac_link_level" = x-1; then :
- for call in "" __stdcall ; do
- for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
- void ${call} ${sym}(int a) {}
+else
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+fi
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT cconftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT cconftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="cconftest.$OBJEXT $LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+else
- cat > conftest.$ac_ext <<_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
- program main
- call my_name(0)
- end
+fi
-_ACEOF
-if ac_fn_f77_try_link "$LINENO"; then :
+# END of POPVAL
- pac_found=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
- LIBS="$saved_LIBS"
- rm -f cconftest.$OBJEXT
- test "$pac_found" = "yes" && break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
- test "$pac_found" = "yes" && break
- done
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+else
+
+
+ pac_result=no
-fi
-if test "$pac_found" = "yes" ; then
- case ${sym} in
- my_name_)
- pac_cv_prog_f77_name_mangle="lower uscore" ;;
- my_name__)
- pac_cv_prog_f77_name_mangle="lower 2uscore" ;;
- my_name)
- pac_cv_prog_f77_name_mangle="lower" ;;
- MY_NAME)
- pac_cv_prog_f77_name_mangle="upper" ;;
- MY_name)
- pac_cv_prog_f77_name_mangle="mixed" ;;
- MY_name_)
- pac_cv_prog_f77_name_mangle="mixed uscore" ;;
- *)
- pac_cv_prog_f77_name_mangle=""
- pac_found=no;
- ;;
- esac
- if test "X$pac_cv_prog_f77_name_mangle" != "X" ; then
- if test "$call" = "__stdcall" ; then
- pac_cv_prog_f77_name_mangle="$pac_cv_prog_f77_name_mangle stdcall"
- fi
- fi
-fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_name_mangle" >&5
-$as_echo "$pac_cv_prog_f77_name_mangle" >&6; }
-case $pac_cv_prog_f77_name_mangle in
- *stdcall)
- F77_STDCALL="__stdcall" ;;
- *)
- F77_STDCALL="" ;;
-esac
-# Get the standard call definition
-# FIXME: This should use F77_STDCALL, not STDCALL (non-conforming name)
-F77_STDCALL="$call"
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
-cat >>confdefs.h <<_ACEOF
-#define STDCALL $F77_STDCALL
-_ACEOF
+# START of POPVAL
+if ${pac_stk_ac_link_level+:} false; then :
-# new_name="`echo $name | tr ' ' '_' | tr [a-z] [A-Z]`"
-# We could have done the character conversion with 'tr'
-# which may not be portable, e.g. solaris's /usr/ucb/bin/tr.
-# So use a conservative approach.
+ if test "x$pac_stk_ac_link_level" = x-1; then :
-# Replace blank with underscore
-name_scheme="`echo $pac_cv_prog_f77_name_mangle | sed 's% %_%g'`"
-# Turn lowercase into uppercase.
-name_scheme="`echo $name_scheme | sed -e 'y%abcdefghijklmnopqrstuvwxyz%ABCDEFGHIJKLMNOPQRSTUVWXYZ%'`"
-F77_NAME_MANGLE="F77_NAME_${name_scheme}"
-cat >>confdefs.h <<_ACEOF
-#define $F77_NAME_MANGLE 1
-_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+else
+
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
-if test "X$pac_cv_prog_f77_name_mangle" = "X" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown Fortran naming scheme" >&5
-$as_echo "$as_me: WARNING: Unknown Fortran naming scheme" >&2;}
fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+fi
+# END of POPVAL
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
+$as_echo "$pac_result" >&6; }
+rm -f conftest.$ac_ext
+#
+if test "$pac_result" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt" >&5
+$as_echo_n "checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt... " >&6; }
+ pac_result=unknown
+ FFLAGS="$FFLAGS_orig"
+ rm -f pac_test3.log
+# START of PUSHVAL
+if ${pac_stk_ac_compile_level+:} false; then :
+ as_fn_arith $pac_stk_ac_compile_level + 1 && pac_stk_ac_compile_level=$as_val
+else
+ pac_stk_ac_compile_level=0
- # Check whether additional libraries are needed when linking with C
+fi
+eval "pac_stk_ac_compile_$pac_stk_ac_compile_level=\$ac_compile"
+if test "x$pac_stk_ac_compile_level" = x0; then :
+ eval pac_FirstSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+fi
-# To simply the code in the cache_check macro, chose the routine name
-# first, in case we need it
-confname=conf1_
-case "$pac_cv_prog_f77_name_mangle" in
- "lower underscore") confname=conf1_ ;;
- "upper stdcall") confname=CONF1 ;;
- "upper") confname=CONF1 ;;
- "lower doubleunderscore") confname=conf1_ ;;
- "lower") confname=conf1 ;;
- "mixed underscore") confname=conf1_ ;;
- "mixed") confname=conf1 ;;
-esac
+ eval pac_LastSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libraries to link Fortran main with C stdio routines" >&5
-$as_echo_n "checking for libraries to link Fortran main with C stdio routines... " >&6; }
-if ${pac_cv_prog_f77_and_c_stdio_libs+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-pac_cv_prog_f77_and_c_stdio_libs=unknown
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# END of PUSHVAL
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> pac_test3.log 2>\&1|g'`"
+cat > conftest.$ac_ext <<_ACEOF
-#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
-#include <stdio.h>
-#endif
-int $confname(int a) {
- printf( "The answer is %d\n", a ); fflush(stdout); return 0;
-}
+ subroutine try()
+ end
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_f77_try_compile "$LINENO"; then :
+
{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
@@ -31769,344 +31679,168 @@ if ac_fn_c_try_compile "$LINENO"; then :
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
test $ac_status = 0; }
- saved_LIBS="$LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
- cat > conftest.$ac_ext <<_ACEOF
+ FFLAGS="$FFLAGS_opt"
+ rm -f pac_test4.log
- program main
- call conf1(0)
- end
+# START of PUSHVAL
+if ${pac_stk_ac_link_level+:} false; then :
-_ACEOF
- for extralib in "" "-lSystemStubs" ; do
- LIBS="pac_conftest.$OBJEXT $saved_LIBS $extralib"
- if ac_fn_f77_try_link "$LINENO"; then :
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
- pac_cv_prog_f77_and_c_stdio_libs="$extralib"; break
+else
+
+ pac_stk_ac_link_level=0
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- done
- if test "X$pac_cv_prog_f77_and_c_stdio_libs" = "X" ; then
- pac_cv_prog_f77_and_c_stdio_libs=none
- fi
- rm -f conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
- LIBS="$saved_LIBS"
- rm -f pac_conftest.$OBJEXT
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_and_c_stdio_libs" >&5
-$as_echo "$pac_cv_prog_f77_and_c_stdio_libs" >&6; }
-if test "$pac_cv_prog_f77_and_c_stdio_libs" != "none" \
- -a "$pac_cv_prog_f77_and_c_stdio_libs" != "unknown" ; then
- F77_OTHER_LIBS="$F77_OTHER_LIBS $pac_cv_prog_f77_and_c_stdio_libs"
-fi
+# END of PUSHVAL
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test4.log 2>\&1|g'`"
+cat > conftest.$ac_ext <<_ACEOF
+ program main
- # Warn about mixed name mangling, since many of the tests will fail
- if test "$pac_cv_prog_f77_name_mangle" = "mixed" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The compiler $F77 uses mixed case names. Fortran is monocase
-and many Fortran programs may use either upper or lower case names for MPI
-calls. Consider specifying a particular parameter to your Fortran compiler
-to select either upper or lower case names. For the Absoft compiler,
--f selects lower case and -N109 selects upper case (if you use -f, also use
--B108 to enable the iargc and getarg routines, which are needed for some
-tests and by many user programs). Specify new command
-line options by setting the environment variable FFLAGS to include
-the options (e.g., setenv FFLAGS \"-f -B108\"). In addition, make sure that your
-Fortran 90 compiler uses a compatible naming choice. For the
-Absoft Fortran 90, -YALL_NAMES=LCS selects lower case names and -B108
-adds underscores to names, as required for iargc and getarg. Pass this
-information to configure with the FCFLAGS environment variable." >&5
-$as_echo "$as_me: WARNING: The compiler $F77 uses mixed case names. Fortran is monocase
-and many Fortran programs may use either upper or lower case names for MPI
-calls. Consider specifying a particular parameter to your Fortran compiler
-to select either upper or lower case names. For the Absoft compiler,
--f selects lower case and -N109 selects upper case (if you use -f, also use
--B108 to enable the iargc and getarg routines, which are needed for some
-tests and by many user programs). Specify new command
-line options by setting the environment variable FFLAGS to include
-the options (e.g., setenv FFLAGS \"-f -B108\"). In addition, make sure that your
-Fortran 90 compiler uses a compatible naming choice. For the
-Absoft Fortran 90, -YALL_NAMES=LCS selects lower case names and -B108
-adds underscores to names, as required for iargc and getarg. Pass this
-information to configure with the FCFLAGS environment variable." >&2;}
- # If Fortran implicitly enabled, disable it now. Otherwise,
- # abort the configure since warning messages are often lost in
- # the output.
- as_fn_error $? "Aborting configure because of mixed case names in Fortran. Either select --disable-fortran or set FCFLAGS to force the compiler to select monocase names" "$LINENO" 5
- fi
+ end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
- # The MPI standard requires that MPI_Init in any language initialize
- # MPI in all languages. This can be a problem when objects produced
- # by the Fortran compiler require symbols from the Fortran runtime
- # (making linking C-only programs unnecessarily difficult). What we test
- # here is whether the much more restricted needs of the Fortran
- # initialize can be met with no special use of the Fortran runtime
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran init will work with C" >&5
-$as_echo_n "checking whether Fortran init will work with C... " >&6; }
-pac_f_init_works_with_c=unknown
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
-cat > conftest.$ac_ext <<_ACEOF
+if
+{ $as_echo "$as_me:$LINENO: diff -b pac_test2.log pac_test4.log > $pac_TESTLOG" >&5
+ (eval diff -b pac_test2.log pac_test4.log > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
- subroutine minit()
- common /m1/ vc, vc2
- character*1 vc(1,1), vc2(1)
- common /m2/ vd
- integer vd
- save /m1/, /m2/
- call minitc( vc, vc2, vd )
- end
+ pac_result=yes
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- # This test checks if Fortran init can be done in pure C environment,
- # i.e. no FLIBS in linking, so don't put FLIBS in LIBS below
- LIBS="pac_f77conftest.$OBJEXT $LIBS"
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ (exit $ac_status)
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ $as_echo "*** diff -b pac_test2.log pac_test4.log :" >&5
+ cat $pac_TESTLOG >&5
+ pac_result=no
-#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
-#include <stdio.h>
-#endif
-#ifdef F77_NAME_UPPER
-#define minit_ MINIT
-#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
-#define minit_ minit
-#endif
-extern void minit_(void);
-int main( int argc, char **argv )
-{
- minit_();
- return 0;
-}
-char *v1 = 0;
-char *vc2 = 0;
-int v2 = 0;
-void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 );
-void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 )
-{
-v1 = dv1;
-v2 = dv3;
-vc2 = dv2;
-*vc2 = ' ';
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_f_init_works_with_c=yes
+fi
+
+rm -f $pac_TESTLOG
+
+
+
else
- pac_f_init_works_with_c=no
+
+
+ pac_result=no
+
+
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- LIBS="$saved_LIBS"
- rm -f pac_f77conftest.$OBJEXT
+# START of POPVAL
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if ${pac_stk_ac_link_level+:} false; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_f_init_works_with_c" >&5
-$as_echo "$pac_f_init_works_with_c" >&6; }
+ if test "x$pac_stk_ac_link_level" = x-1; then :
- if test "$pac_f_init_works_with_c" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
-$as_echo "#define HAVE_MPI_F_INIT_WORKS_WITH_C 1" >>confdefs.h
+else
- fi
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+
+fi
- #
- # Some Fortran compilers now pass CHARACTER length as a size_t instead
- # of as an int. This is hard to test for, since the data is passed by
- # value and for characters less than about 2GB long, the correct
- # value will be used. In this case, we must use an approach similar to
- # the one used by libtool for shared library options - look at the
- # compiler name or vendor.
- # Known compilers that use size_t instead of int:
- # Intel Fortran
- # gfortran
- # Add others as they become known
- # Check whether --enable-f77characterlen was given.
-if test "${enable_f77characterlen+set}" = set; then :
- enableval=$enable_f77characterlen;
else
- enable_f77characterlen=no
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+
fi
+# END of POPVAL
- # Set the default
- f77_uses_int_for_str=default
- case "$enable_f77characterlen" in
- yes|no)
- ;;
- size_t)
- f77_uses_int_for_str=no
- enable_f77characterlen=yes
- ;;
- int)
- f77_uses_int_for_str=yes
- enable_f77characterlen=yes
- ;;
- *)
- as_fn_error $? "Invalid value provided for --enable-f77characterlen" "$LINENO" 5
- ;;
- esac
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
- # If we might change the size (enable) and we haven't set the choice,
- # attempt to determine it from the compiler name. Risky, but we haven't
- # found a reliable way to do this with test codes.
- if test "$enable_f77characterlen" = "yes" -a \
- "$f77_uses_int_for_str" = "default" ; then
- f77_uses_int_for_str=yes
- f77Basename=`basename $F77`
- case $f77Basename in
- ifort*)
- f77_uses_int_for_str=no
- ;;
- gfortran*)
- f77_uses_int_for_str=no
- ;;
- esac
- fi
- # This test is disabled for now. Despite information in documentation
- # on gfortran, it appears to pass lengths as int, at least in some
- # builds (it used movl when tested in 2/2013). Tests that failed
- # included infotestf.f, in a call to mpi_info_get.
- # Leave this as a place holder until a proper test can be determined.
- if test "$enable_f77characterlen" = "yes" -a \
- "$f77_uses_int_for_str" = "no" ; then
-$as_echo "#define USE_FORT_STR_LEN_SIZET 1" >>confdefs.h
-
- fi
+else
-fi
-# FC requires F77 as well. If the user disabled f77, do not run the
-# next test; instead, drop into the warning message
-# Set a default value for fc works with f77. This value is
-# set to no *only* if fc was selected but was not compatible with f77
-fc_with_f77=yes
-if test "$enable_fc" = "yes" -a "$enable_f77" = yes ; then
- enable_fc=no
- if test "$FC" != "no" ; then
- # If we allow multiple weak symbols, we should test a name
- # that does not contain an underscore. The Fortran binding uses
- # this rule for enabling multiple weak symbols:
- # if defined(USE_WEAK_SYMBOLS) && !defined(USE_ONLY_MPI_NAMES) &&
- # defined(HAVE_MULTIPLE_PRAGMA_WEAK) &&
- # defined(F77_NAME_LOWER_2USCORE)
- #
- testRoutine="t1_2"
- if test "$pac_cv_prog_c_multiple_weak_symbols" = "yes" -a \
- "$enable_weak_symbols" = "yes" -a \
- "$pac_cv_prog_f77_name_mangle" = "lower doubleunderscore" ; then
- testRoutine="t12"
- fi
+ pac_result=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extension for Fortran 90 programs" >&5
-$as_echo_n "checking for extension for Fortran 90 programs... " >&6; }
-ac_fc_srcext="f90"
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-cat > conftest.$ac_ext <<_ACEOF
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- program main
+# START of POPVAL
- end
+if ${pac_stk_ac_compile_level+:} false; then :
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+ if test "x$pac_stk_ac_compile_level" = x-1; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: f90" >&5
-$as_echo "f90" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&2;}
else
- ac_fc_srcext="f"
- cat > conftest.$ac_ext <<_ACEOF
+ eval ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+ as_fn_arith $pac_stk_ac_compile_level - 1 && pac_stk_ac_compile_level=$as_val
- program main
+fi
- end
+else
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: f" >&5
-$as_echo "f" >&6; }
+fi
-else
+# END of POPVAL
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown!" >&5
-$as_echo "unknown!" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
+$as_echo "$pac_result" >&6; }
+ rm -f pac_test3.log pac_test4.log
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f pac_test1.log pac_test2.log
+
+FFLAGS="$FFLAGS_orig"
+if test "$pac_result" = "yes" ; then
+
+ FFLAGS="$FFLAGS $MPI_DEFAULT_FOPTS"
+else
+ :
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -32114,336 +31848,548 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ else
+ FFLAGS="$FFLAGS $MPI_DEFAULT_FOPTS"
+ fi
+ fi
+fi
+#
+# We need to know the name mangling for Fortran before testing for FC
+# compatibility (we need this because of the way we decide to generate
+# the Fortran 77 bindings)
+if test "$enable_f77" = yes ; then
+ FLIBS_save="$FLIBS"
+ FLIBS=""
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5
+$as_echo_n "checking how to get verbose linking output from $F77... " >&6; }
+if ${ac_cv_prog_f77_v+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ ac_cv_prog_f77_v=
+# Try some options frequently used verbose output
+for ac_verb in -v -verbose --verbose -V -\#\#\#; do
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works" >&5
-$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works... " >&6; }
-cat > conftest.$ac_ext <<_ACEOF
+ end
+_ACEOF
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FFLAGS=$FFLAGS
+FFLAGS="$FFLAGS $ac_verb"
+eval "set x $ac_link"
+shift
+$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
+# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
+# LIBRARY_PATH; skip all such settings.
+ac_f77_v_output=`eval $ac_link 5>&1 2>&1 |
+ sed '/^Driving:/d; /^Configured with:/d;
+ '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
+$as_echo "$ac_f77_v_output" >&5
+FFLAGS=$ac_save_FFLAGS
- program conftest
- integer, dimension(10) :: n
- end
+rm -rf conftest*
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_f77_v_output="`echo $ac_f77_v_output |
+ grep 'LPATH is:' |
+ sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output"
-_ACEOF
-if ac_fn_fc_try_link "$LINENO"; then :
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+# that detects unbalanced quotes in FLIBS should be implemented
+# and (ugh) tested at some point.
+case $ac_f77_v_output in
+ # With xlf replace commas with spaces,
+ # and remove "-link" and closing parenthesis.
+ *xlfentry*)
+ ac_f77_v_output=`echo $ac_f77_v_output |
+ sed '
+ s/,/ /g
+ s/ -link / /g
+ s/) *$//
+ '
+ ` ;;
- pac_cv_prog_fc_works="yes"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_works" >&5
-$as_echo "$pac_cv_prog_fc_works" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler" >&5
-$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler... " >&6; }
- if test "$cross_compiling" = yes; then :
- pac_cv_prog_fc_cross="$cross_compiling"
+ # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+ # $LIBS confuse us, and the libraries appear later in the output anyway).
+ *mGLOB_options_string*)
+ ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+ # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+ # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+ # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+ *-cmdline\ * | *-ignore\ * | *-def\ *)
+ ac_f77_v_output=`echo $ac_f77_v_output | sed "\
+ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g
+ s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g
+ s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;;
+
+ # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
+ *fort77*f2c*gcc*)
+ ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n '
+ /:[ ]\+Running[ ]\{1,\}"gcc"/{
+ /"-c"/d
+ /[.]c"*/d
+ s/^.*"gcc"/"gcc"/
+ s/"//gp
+ }'` ;;
+
+ # If we are using Cray Fortran then delete quotes.
+ *cft90*)
+ ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;;
+esac
+
+
+ # look for -l* and *.a constructs in the output
+ for ac_arg in $ac_f77_v_output; do
+ case $ac_arg in
+ [\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
+ ac_cv_prog_f77_v=$ac_verb
+ break 2 ;;
+ esac
+ done
+done
+if test -z "$ac_cv_prog_f77_v"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5
+$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;}
+fi
else
- if ac_fn_fc_try_run "$LINENO"; then :
- pac_cv_prog_fc_cross="no"
-else
- pac_cv_prog_fc_cross="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5
+$as_echo "$as_me: WARNING: compilation failed" >&2;}
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5
+$as_echo "$ac_cv_prog_f77_v" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5
+$as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; }
+if ${ac_cv_f77_libs+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$FLIBS" != "x"; then
+ ac_cv_f77_libs="$FLIBS" # Let the user override the test.
+else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_cross" >&5
-$as_echo "$pac_cv_prog_fc_cross" >&6; }
+cat > conftest.$ac_ext <<_ACEOF
+ program main
-else
+ end
+_ACEOF
- pac_cv_prog_fc_works="no"
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&5
-$as_echo "$as_me: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&2;}
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FFLAGS=$FFLAGS
+FFLAGS="$FFLAGS $ac_cv_prog_f77_v"
+eval "set x $ac_link"
+shift
+$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
+# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
+# LIBRARY_PATH; skip all such settings.
+ac_f77_v_output=`eval $ac_link 5>&1 2>&1 |
+ sed '/^Driving:/d; /^Configured with:/d;
+ '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
+$as_echo "$ac_f77_v_output" >&5
+FFLAGS=$ac_save_FFLAGS
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-# The intel compiler sometimes generates these work.pc and .pcl files
-rm -f work.pc work.pcl
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+rm -rf conftest*
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_f77_v_output="`echo $ac_f77_v_output |
+ grep 'LPATH is:' |
+ sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output"
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+# that detects unbalanced quotes in FLIBS should be implemented
+# and (ugh) tested at some point.
+case $ac_f77_v_output in
+ # With xlf replace commas with spaces,
+ # and remove "-link" and closing parenthesis.
+ *xlfentry*)
+ ac_f77_v_output=`echo $ac_f77_v_output |
+ sed '
+ s/,/ /g
+ s/ -link / /g
+ s/) *$//
+ '
+ ` ;;
+ # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+ # $LIBS confuse us, and the libraries appear later in the output anyway).
+ *mGLOB_options_string*)
+ ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 90 compiler works with Fortran 77 compiler" >&5
-$as_echo_n "checking whether Fortran 90 compiler works with Fortran 77 compiler... " >&6; }
-if ${pac_cv_fc_and_f77+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+ # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+ # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+ *-cmdline\ * | *-ignore\ * | *-def\ *)
+ ac_f77_v_output=`echo $ac_f77_v_output | sed "\
+ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g
+ s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g
+ s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;;
-pacTestRoutine=foo_abc
-eval pacTestRoutine=$testRoutine
-pac_cv_fc_and_f77="unknown"
-# compile the f77 program and link with the f90 program
-# The reverse may not work because the Fortran 90 environment may
-# expect to be in control (and to provide library files unknown to any other
-# environment, even Fortran 77!)
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
+ *fort77*f2c*gcc*)
+ ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n '
+ /:[ ]\+Running[ ]\{1,\}"gcc"/{
+ /"-c"/d
+ /[.]c"*/d
+ s/^.*"gcc"/"gcc"/
+ s/"//gp
+ }'` ;;
-cat > conftest.$ac_ext <<_ACEOF
+ # If we are using Cray Fortran then delete quotes.
+ *cft90*)
+ ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;;
+esac
- subroutine ${pacTestRoutine}(b)
- integer b
- b = b + 1
- end
+ac_cv_f77_libs=
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
+# Save positional arguments (if any)
+ac_save_positional="$@"
- # pac_f77compile_ok=yes
+set X $ac_f77_v_output
+while test $# != 1; do
+ shift
+ ac_arg=$1
+ case $ac_arg in
+ [\\/]*.a | ?:[\\/]*.a)
+ ac_exists=false
+ for ac_i in $ac_cv_f77_libs; do
+ if test x"$ac_arg" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- # Save original LIBS, prepend previously generated object file to LIBS
- saved_LIBS="$LIBS"
- LIBS="pac_f77conftest.$OBJEXT $LIBS"
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ if test x"$ac_exists" = xtrue; then :
- cat > conftest.$ac_ext <<_ACEOF
+else
+ ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
+fi
+ ;;
+ -bI:*)
+ ac_exists=false
+ for ac_i in $ac_cv_f77_libs; do
+ if test x"$ac_arg" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
+ if test x"$ac_exists" = xtrue; then :
- program main
- integer a
- a = 1
- call ${pacTestRoutine}(a)
- end
+else
+ if test "$ac_compiler_gnu" = yes; then
+ for ac_link_opt in $ac_arg; do
+ ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt"
+ done
+else
+ ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
+fi
+fi
+ ;;
+ # Ignore these flags.
+ -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
+ |-LANG:=* | -LIST:* | -LNO:* | -link)
+ ;;
+ -lkernel32)
+ case $host_os in
+ *cygwin*) ;;
+ *) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
+ ;;
+ esac
+ ;;
+ -[LRuYz])
+ # These flags, when seen by themselves, take an argument.
+ # We remove the space between option and argument and re-iterate
+ # unless we find an empty arg or a new option (starting with -)
+ case $2 in
+ "" | -*);;
+ *)
+ ac_arg="$ac_arg$2"
+ shift; shift
+ set X $ac_arg "$@"
+ ;;
+ esac
+ ;;
+ -YP,*)
+ for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
+ ac_exists=false
+ for ac_i in $ac_cv_f77_libs; do
+ if test x"$ac_j" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
+ if test x"$ac_exists" = xtrue; then :
-_ACEOF
-if ac_fn_fc_try_link "$LINENO"; then :
- pac_cv_fc_and_f77=yes
else
- pac_cv_fc_and_f77=no
+ ac_arg="$ac_arg $ac_j"
+ ac_cv_f77_libs="$ac_cv_f77_libs $ac_j"
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- # Some versions of the Intel compiler produce these two files
- rm -f work.pc work.pcl
- # Restore LIBS
- LIBS="$saved_LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ done
+ ;;
+ -[lLR]*)
+ ac_exists=false
+ for ac_i in $ac_cv_f77_libs; do
+ if test x"$ac_arg" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
- # remove previously generated object file.
- rm -f pac_f77conftest.$OBJEXT
+ if test x"$ac_exists" = xtrue; then :
else
+ ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
+fi
+ ;;
+ -zallextract*| -zdefaultextract)
+ ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
+ ;;
+ # Ignore everything else.
+ esac
+done
+# restore positional arguments
+set X $ac_save_positional; shift
- # pac_f77compile_ok=no
- pac_cv_fc_and_f77=no
+# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen,
+# then we insist that the "run path" must be an absolute path (i.e. it
+# must begin with a "/").
+case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ ac_ld_run_path=`$as_echo "$ac_f77_v_output" |
+ sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
+ test "x$ac_ld_run_path" != x &&
+ if test "$ac_compiler_gnu" = yes; then
+ for ac_link_opt in $ac_ld_run_path; do
+ ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt"
+ done
+else
+ ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path"
+fi
+ ;;
+esac
+fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5
+$as_echo "$ac_cv_f77_libs" >&6; }
+FLIBS="$ac_cv_f77_libs"
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# Perform the requested action based on whether the test succeeded
-if test "$pac_cv_fc_and_f77" = yes ; then
- fc_with_f77=yes
-else
- fc_with_f77=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: See config.log for the failed test program and its output." >&5
-$as_echo "$as_me: WARNING: See config.log for the failed test program and its output." >&2;}
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_and_f77" >&5
-$as_echo "$pac_cv_fc_and_f77" >&6; }
-
- if test "$fc_with_f77" != yes ; then
- enable_fc=no
- as_fn_error $? "The selected Fortran 90 compiler $FC does not work with the selected Fortran 77 compiler $F77. Use the environment variables FC and F77 respectively to select compatible Fortran compilers. The check here tests to see if a main program compiled with the Fortran 90 compiler can link with a subroutine compiled with the Fortran 77 compiler." "$LINENO" 5
- elif test "$fc_with_f77" = "yes" ; then
- # If we got here, there is a Fortran 90 compiler that we can use
- enable_fc=yes
- fi
- elif test "$pac_cv_prog_fc_works" = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Use --disable-fc to keep configure from searching for a Fortran 90 compiler" >&5
-$as_echo "$as_me: WARNING: Use --disable-fc to keep configure from searching for a Fortran 90 compiler" >&2;}
- fi
-
- if test "$enable_fc" = "yes"; then
- if test "$FC" = "no" -o "$FC" = ""; then
- # No Fortran 90 compiler found; abort
- as_fn_error $? "No Fortran 90 compiler found. If you don't need
- to build any Fortran 90 programs, you can disable Fortran 90
- support using --disable-fc. If you do want to build Fortran 90
- programs, you need to install a Fortran 90 compiler such as
- gfortran or ifort before you can proceed." "$LINENO" 5
- fi
- fi
-fi
+ # The autoconf macro for finding FLIBS sometimes makes mistakes
+ # (particularly with the Fujitsu frt compiler). This next step
+ # first sees if the FLIBS is valid with the Fortran compiler
-if test "$enable_fc" = "yes" -a "$enable_f77" != "yes" ; then
- # Fortran 90 support requires compatible Fortran 77 support
- as_fn_error $? "
-Fortran 90 support requires compatible Fortran 77 support.
-To force the use of the Fortran 90 compiler for Fortran 77,
-do not use configure option --disable-fortran, and set the environment
-variable F77 to the name of the Fortran 90 compiler, or \$FC.
-If you do not want any Fortran support, use configure options
---disable-fortran." "$LINENO" 5
- # We should probably do the compatibility test as well
- enable_f77=yes
-fi
-# ----------------------------------------------------------------------------
-# Now test for Fortran compiler characteristics
-# ----------------------------------------------------------------------------
-if test "$enable_f77" = "yes" ; then
- # determine rpath and other shared library flags for F77
- f77_shlib_conf=src/env/f77_shlib.conf
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts the FLIBS found by autoconf" >&5
+$as_echo_n "checking whether $F77 accepts the FLIBS found by autoconf... " >&6; }
+pac_cv_f77_flibs_valid=unknown
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+ end
-# It appears that the libtool dynamic linking strategy on Darwin is this:
-# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
-# 2. Don't do anything special when linking programs, since it seems that the
-# darwin dynamic linker will always use the "install_name" field from the lib
-# that was found at program link-time. (CONFIRMED) This is in opposition to
-# the way that Linux does it, where specifying a "-rpath" argument at program
-# link-time is important.
-#
-# There is an alternative darwin strategy for versions
-# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
-# (goodell@ 2011-06-17)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of F77" >&5
-$as_echo_n "checking for shared library (esp. rpath) characteristics of F77... " >&6; }
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
-# unfortunately, config.rpath expects the compiler in question is always CC and
-# uses several other environment variables as input
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
- if test -z "${pac_save_CC_nesting}" ; then
- pac_save_CC_nesting=0
- fi
- eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid entries in FLIBS" >&5
+$as_echo_n "checking for valid entries in FLIBS... " >&6; }
+ goodFLIBS=""
+ saveFLIBS=$FLIBS
+ FLIBS=""
+ for arg in $saveFLIBS ; do
+ FLIBS="$goodFLIBS $arg"
+ if ac_fn_f77_try_link "$LINENO"; then :
+ goodFLIBS=$FLIBS
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ done
+ FLIBS=$goodFLIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLIBS" >&5
+$as_echo "$FLIBS" >&6; }
- if test -z "${pac_save_GCC_nesting}" ; then
- pac_save_GCC_nesting=0
- fi
- eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+rm -f conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- if test -z "${pac_save_LD_nesting}" ; then
- pac_save_LD_nesting=0
- fi
- eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
+ # Now see if FLIBS works with the C compiler
-# these two don't currently get overridden, but we push/pop them for safety in
-# case they do in the future
- if test -z "${pac_save_LDFLAGS_nesting}" ; then
- pac_save_LDFLAGS_nesting=0
- fi
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC links with FLIBS found by autoconf" >&5
+$as_echo_n "checking whether $CC links with FLIBS found by autoconf... " >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# Create a simple C program for the tests.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- if test -z "${pac_save_with_gnu_ld_nesting}" ; then
- pac_save_with_gnu_ld_nesting=0
- fi
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
-# set the temporary override values (if any)
-CC="$F77"
- GCC="$G77"
- LD="$LD_F77"
+_ACEOF
+# Try to link a C program with all of these libraries
+saved_LIBS="$LIBS"
+LIBS="$FLIBS $saved_LIBS"
+if ac_fn_c_try_link "$LINENO"; then :
-# ensure the values are available to the script
-export CC
-export GCC
-export LDFLAGS
-export LD
-export with_gnu_ld
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
-if $ac_aux_dir/config.rpath "$host" > $f77_shlib_conf; then :
- :
else
- as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
-fi
-C_LINKPATH_SHL=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for which libraries can be used" >&5
+$as_echo_n "checking for which libraries can be used... " >&6; }
+ pac_ldirs=""
+ pac_libs=""
+ pac_other=""
+ for name in $FLIBS ; do
+ case $name in
+ -l*) pac_libs="$pac_libs $name" ;;
+ -L*) pac_ldirs="$pac_ldirs $name" ;;
+ *) pac_other="$pac_other $name" ;;
+ esac
+ done
+ keep_libs=""
+ for name in $pac_libs ; do
+ LIBS="$saved_LIBS $pac_ldirs $pac_other $name"
+ if ac_fn_c_try_link "$LINENO"; then :
+ keep_libs="$keep_libs $name"
-rm -f conftest.out
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $keep_libs" >&5
+$as_echo "$keep_libs" >&6; }
+ FLIBS="$pac_ldirs $pac_other $keep_libs"
-# restore the old values
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+LIBS="$saved_LIBS"
+rm -f conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
- eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
- eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
- eval pac_save_LD_${pac_save_LD_nesting}=""
+ # Check F77+FLAGS is compatible with CC+CFLAGS before using F77+CC.
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
- eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 and C objects are compatible" >&5
+$as_echo_n "checking whether Fortran 77 and C objects are compatible... " >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
- eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
- eval pac_save_GCC_${pac_save_GCC_nesting}=""
+/* lower */
+void c_subpgm( int *rc );
+void c_subpgm( int *rc ) { *rc = 1; }
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
- eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
- eval pac_save_CC_${pac_save_CC_nesting}=""
+/* lower underscore */
+void c_subpgm_( int *rc );
+void c_subpgm_( int *rc ) { *rc = 2; }
+/* upper */
+void C_SUBPGM( int *rc );
+void C_SUBPGM( int *rc ) { *rc = 3; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $f77_shlib_conf)" >&5
-$as_echo "done (results in $f77_shlib_conf)" >&6; }
+/* lower doubleunderscore */
+void c_subpgm__( int *rc );
+void c_subpgm__( int *rc ) { *rc = 4; }
+/* mixed */
+void C_subpgm( int *rc );
+void C_subpgm( int *rc ) { *rc = 5; }
+/* mixed underscore */
+void C_subpgm_( int *rc );
+void C_subpgm_( int *rc ) { *rc = 6; }
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+_ACEOF
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 accepts ! for comments" >&5
-$as_echo_n "checking whether Fortran 77 accepts ! for comments... " >&6; }
-if ${pac_cv_prog_f77_exclaim_comments+:} false; then :
- $as_echo_n "(cached) " >&6
-else
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
@@ -32452,2681 +32398,2780 @@ ac_compiler_gnu=$ac_cv_f77_compiler_gnu
cat > conftest.$ac_ext <<_ACEOF
- program main
-! This is a comment
- end
-
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_prog_f77_exclaim_comments="yes"
+ program test
+ integer rc
+ rc = -1
+ call c_subpgm( rc )
+ write(6,*) "rc=", rc
+ end
-else
- pac_cv_prog_f77_exclaim_comments="no"
+_ACEOF
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+pac_linkwithf77=no
+pac_linkwithC=no
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_exclaim_comments" >&5
-$as_echo "$pac_cv_prog_f77_exclaim_comments" >&6; }
-if test "$pac_cv_prog_f77_exclaim_comments" = "yes" ; then
- has_exclaim="yes"
-else
- has_exclaim="no"
-fi
+if test "$pac_linkwithC" != "yes" ; then
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if ac_fn_c_try_compile "$LINENO"; then :
-checkdir=src;checkdir_is_given=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for include directory flag for Fortran" >&5
-$as_echo_n "checking for include directory flag for Fortran... " >&6; }
-if ${pac_cv_prog_f77_has_incdir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-test -d $checkdir || mkdir $checkdir
-echo ' call sub()' > $checkdir/conftestf.h
-ac_ext=f
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS"
+ ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-saved_FFLAGS="$FFLAGS"
-pac_cv_prog_f77_has_incdir="none"
-# SGI wants -Wf,-I
-for idir in "-I" "-Wf,-I" ; do
- FFLAGS="${idir} $checkdir $saved_FFLAGS"
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- include 'conftestf.h'
- end
+ if ac_fn_f77_try_link "$LINENO"; then :
+ pac_linkwithf77=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_prog_f77_has_incdir="$idir"; break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-FFLAGS="$saved_FFLAGS"
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test "$checkdir_is_given" = "yes" ; then
- rm -f $checkdir/conftestf.h
-else
- rm -rf $checkdir
-fi
+ LIBS="$saved_LIBS"
+ if test "$pac_linkwithf77" = "yes" ; then
+ rm -f pac_conftest.$OBJEXT
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_has_incdir" >&5
-$as_echo "$pac_cv_prog_f77_has_incdir" >&6; }
-if test "X$pac_cv_prog_f77_has_incdir" != "Xnone" ; then
- F77_INCDIR="$pac_cv_prog_f77_has_incdir"
+rm -f core conftest.err conftest.$ac_objext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 flag for library directories" >&5
-$as_echo_n "checking for Fortran 77 flag for library directories... " >&6; }
-if ${pac_cv_prog_f77_library_dir_flag+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-ac_ext=f
+if test "$pac_linkwithf77" != "yes" ; then
+ ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-cat > conftest.$ac_ext <<_ACEOF
-
-
- subroutine f1conf
- end
-
-
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
+ if ac_fn_f77_try_compile "$LINENO"; then :
- # pac_f77compile_ok=yes
{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
(eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:$LINENO: test -d conftestdir || mkdir conftestdir" >&5
- (eval test -d conftestdir || mkdir conftestdir) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
-
-{ $as_echo "$as_me:$LINENO: ${AR-ar} ${AR_FLAGS-cr} conftestdir/libf77conftest.a pac_f77conftest.$OBJEXT" >&5
- (eval ${AR-ar} ${AR_FLAGS-cr} conftestdir/libf77conftest.a pac_f77conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
-
-{ $as_echo "$as_me:$LINENO: ${RANLIB-ranlib} conftestdir/libf77conftest.a" >&5
- (eval ${RANLIB-ranlib} conftestdir/libf77conftest.a) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- # Save original LIBS, prepend previously generated object file to LIBS
- saved_LIBS="$LIBS"
- LIBS="-lf77conftest $LIBS"
- saved_LDFLAGS="$LDFLAGS"
- pac_cv_prog_f77_library_dir_flag="none"
- for ldir in "-L" "-Wl,-L," ; do
- LDFLAGS="${ldir}conftestdir $saved_LDFLAGS"
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- call f1conf
- end
+ if ac_fn_c_try_link "$LINENO"; then :
+ pac_linkwithC=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
-_ACEOF
-if ac_fn_f77_try_link "$LINENO"; then :
- pac_cv_prog_f77_library_dir_flag="$ldir";break
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- done
- LDFLAGS="$saved_LDFLAGS"
- LIBS="$saved_LIBS"
- rm -rf conftestdir
- rm -f pac_f77conftest.$OBJEXT
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=f
+ conftest$ac_exeext
+ ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ LIBS="$saved_LIBS"
+ if test "$pac_linkwithC" = "yes" ; then
+ rm -f pac_f77conftest.$OBJEXT
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_library_dir_flag" >&5
-$as_echo "$pac_cv_prog_f77_library_dir_flag" >&6; }
-if test "X$pac_cv_prog_f77_library_dir_flag" != "Xnone" ; then
- F77_LIBDIR_LEADER="$pac_cv_prog_f77_library_dir_flag"
+rm -f core conftest.err conftest.$ac_objext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
-
-
- if test "$MPI_WITH_PMPI" = "no" ; then
- # If the PMPI routines are not in the same library with the MPI
- # routines, we may need to remove the pmpi declarations
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran allows unused externals" >&5
-$as_echo_n "checking whether Fortran allows unused externals... " >&6; }
-if ${pac_cv_prog_f77_allows_unused_externals+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-cat > conftest.$ac_ext <<_ACEOF
+rm -f conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- program main
- external bar
- end
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+rm -f conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-_ACEOF
-if ac_fn_f77_try_link "$LINENO"; then :
- pac_cv_prog_f77_allows_unused_externals="yes"
+if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ # Extract the first word of "file", so it can be a program name with args.
+set dummy file; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FILE+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$FILE"; then
+ ac_cv_prog_FILE="$FILE" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_FILE="file"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+fi
+fi
+FILE=$ac_cv_prog_FILE
+if test -n "$FILE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5
+$as_echo "$FILE" >&6; }
else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
- pac_cv_prog_f77_allows_unused_externals="no"
+ if test "X$FILE" != "X" ; then
+ fobjtype="`${FILE} pac_f77conftest.$OBJEXT | sed -e \"s|pac_f77conftest\.$OBJEXT||g\"`"
+ cobjtype="`${FILE} pac_conftest.$OBJEXT | sed -e \"s|pac_conftest\.$OBJEXT||g\"`"
+ if test "$fobjtype" != "$cobjtype" ; then
+ as_fn_error $? "**** Incompatible Fortran and C Object File Types! ****
+F77 Object File Type produced by \"${F77} ${FFLAGS}\" is : ${fobjtype}.
+ C Object File Type produced by \"${CC} ${CFLAGS}\" is : ${cobjtype}." "$LINENO" 5
+ fi
+ fi
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_allows_unused_externals" >&5
-$as_echo "$pac_cv_prog_f77_allows_unused_externals" >&6; }
-if test "X$pac_cv_prog_f77_allows_unused_externals" = "Xyes" ; then
- MPIFPMPI=",PMPI_WTIME,PMPI_WTICK"
-else
- MPIFPMPI="";
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Removed PMPI_WTIME and PMPI_WTICK from mpif.h" >&5
-$as_echo "$as_me: WARNING: Removed PMPI_WTIME and PMPI_WTICK from mpif.h" >&2;}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker for Fortran main program" >&5
+$as_echo_n "checking for linker for Fortran main program... " >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+long long a;
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+
+$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
+
+
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- else
- MPIFPMPI=",PMPI_WTIME,PMPI_WTICK"
- fi
- # Once we have name mangle, we can try to limit the number of needed libs
+#ifdef HAVE_LONG_LONG
+int f(int a, long long b) { int c; c = a * ( b / 3 ) / (b-1); return c ; }
+#else
+int f(int a, long b) { int c; c = a * b / (b-1); return c ; }
+#endif
- # Most systems allow the Fortran compiler to process .F and .F90 files
- # using the C preprocessor. However, some systems either do not
- # allow this or have serious bugs (OSF Fortran compilers have a bug
- # that generates an error message from cpp). The following test
- # checks to see if .F works, and if not, whether "cpp -P -C" can be used
- # This is needed for Mac OSX 10.5
+
+_ACEOF
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 compiler processes .F files with C preprocessor" >&5
-$as_echo_n "checking whether Fortran 77 compiler processes .F files with C preprocessor... " >&6; }
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-saved_f77_ext=${ac_ext}
-ac_ext="F"
-saved_FFLAGS="$FFLAGS"
-FFLAGS="$FFLAGS $CPPFLAGS"
cat > conftest.$ac_ext <<_ACEOF
program main
-#define ASIZE 10
- integer a(ASIZE)
+ double precision d
+ print *, "hi"
end
_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-
- pac_cv_f77_accepts_F=yes
- F77CPP=""
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-else
- pac_cv_f77_accepts_F=no
- F77CPP="false"
+pac_linkwithf77=no
+pac_linkwithC=no
-fi
-rm -f core conftest.err conftest.$ac_objext
-# Restore Fortran 77's ac_ext but not FFLAGS
-ac_ext="$saved_f77_ext"
+if test "$pac_linkwithC" != "yes" ; then
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test "$pac_cv_f77_accepts_F" != "yes" ; then
- pac_cpp_f77="$ac_cpp -C -P conftest.F > conftest.$ac_ext"
+ if ac_fn_c_try_compile "$LINENO"; then :
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
-if
-{ $as_echo "$as_me:$LINENO: $pac_cpp_f77 > $pac_TESTLOG" >&5
- (eval $pac_cpp_f77 > $pac_TESTLOG) 2>&5
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS"
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ if ac_fn_f77_try_link "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Use Fortran to link programs" >&5
+$as_echo "Use Fortran to link programs" >&6; }
+ pac_linkwithf77=yes
- if test -s conftest.${ac_ext} ; then
- if ac_fn_f77_try_compile "$LINENO"; then :
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- pac_cv_f77_accepts_F="no, use cpp"
- F77CPP="$CPP -C -P"
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
fi
rm -f core conftest.err conftest.$ac_objext
- rm -f conftest.${ac_ext}
- fi
-
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
-else
+if test "$pac_linkwithf77" != "yes" ; then
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- $as_echo "$as_me: program exited with status $ac_status" >&5
+ if ac_fn_f77_try_compile "$LINENO"; then :
- (exit $ac_status)
- $as_echo "*** $pac_cpp_f77 :" >&5
- cat $pac_TESTLOG >&5
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if ac_fn_c_try_link "$LINENO"; then :
+ pac_linkwithC=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Use C with FLIBS to link programs" >&5
+$as_echo "Use C with FLIBS to link programs" >&6; }
+ F77LINKER="$CC"
+ F77_LDFLAGS="$F77_LDFLAGS $FLIBS"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ LIBS="$saved_LIBS"
+ rm -f pac_f77conftest.$OBJEXT
fi
-
-rm -f $pac_TESTLOG
+rm -f core conftest.err conftest.$ac_objext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
-FFLAGS="$saved_FFLAGS"
-rm -f conftest.F
+
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_accepts_F" >&5
-$as_echo "$pac_cv_f77_accepts_F" >&6; }
+rm -f conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+rm -f conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- # Check that the Fortran compiler will allow us to pass arguments
- # of different types (e.g., for MPI_Send)
+if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
+ as_fn_error $? "Could not determine a way to link a Fortran test program!" "$LINENO" 5
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 allows mismatched arguments" >&5
-$as_echo_n "checking whether $F77 allows mismatched arguments... " >&6; }
-if test "X$pac_cv_prog_f77_mismatched_args" = X ; then
- pac_cv_prog_f77_mismatched_args_parm=""
- pac_cv_prog_f77_mismatched_args=no
- ac_ext=f
+ # For name mangle, we need the library flags
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name mangling" >&5
+$as_echo_n "checking for Fortran 77 name mangling... " >&6; }
+if ${pac_cv_prog_f77_name_mangle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# Initialize pac_found to indicate if name mangling scheme has been found
+pac_found=no
+ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- cat > conftest.$ac_ext <<_ACEOF
+cat > conftest.$ac_ext <<_ACEOF
- program main
- integer a
- real b
- character c
- call foo1(a)
- call foo1(b)
- call foo1(c)
+ subroutine MY_name( ii )
+ return
end
+
_ACEOF
if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_prog_f77_mismatched_args=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test "$pac_cv_prog_f77_mismatched_args" != "yes" ; then
- # try again with -wmismatch=foo1
- save_FFLAGS="$FFLAGS"
- # The best solution is to turn off errors on particular routines
- # if that isn't possible (e.g., too many of them), then
- # just try arguments that turn off all checking
- for flags in "-mismatch" ; do
- testok=no
- FFLAGS="$FFLAGS $flags"
- cat > conftest.$ac_ext <<_ACEOF
- program main
- integer a
- real b
- character c
- call foo1(a)
- call foo1(b)
- call foo1(c)
- end
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT f77conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT f77conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="f77conftest.$OBJEXT $FLIBS $LIBS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ for call in "" __stdcall ; do
+ for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ extern void ${call} ${sym}(int);
+int
+main ()
+{
+${sym}(0);
+ ;
+ return 0;
+}
_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- testok=yes
+if ac_fn_c_try_link "$LINENO"; then :
+
+ pac_found=yes
+ break
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- FFLAGS="$save_FFLAGS"
- if test "$testok" = yes ; then break ; fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
done
- if test "$testok" = yes ; then
- pac_cv_prog_f77_mismatched_args_parm="$flags"
- pac_cv_prog_f77_mismatched_args="yes, with $pac_cv_prog_f77_mismatched_args_parm"
- fi
- fi
+ test "$pac_found" = "yes" && break
+ done
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_mismatched_args" >&5
-$as_echo "$pac_cv_prog_f77_mismatched_args" >&6; }
-if test "$pac_cv_prog_f77_mismatched_args" = no ; then
- as_fn_error $? "The Fortran compiler $F77 will not compile files that call
-the same routine with arguments of different types." "$LINENO" 5
-fi
-
-addarg=$pac_cv_prog_f77_mismatched_args_parm
-
- if test "X$addarg" != "X" ; then
- # We could add the names of all of the MPI routines that
- # accept different types. Instead, we fail cleanly.
- # Some Fortran compilers allow you to turn off checking for
- # mismatched arguments for *all* routines. Adding an argument
- # that turns off checking for *everything* is not something that
- # configure should do - if the user wants this, they can follow
- # the instructions in the following error message.
- as_fn_error $? "The Fortran compiler $F77 does not accept programs that call the same routine with arguments of different types without the option $addarg. Rerun configure with FFLAGS=$addarg" "$LINENO" 5
- fi
-
- bindings="$bindings f77"
-
-$as_echo "#define HAVE_FORTRAN_BINDING 1" >>confdefs.h
-
- # Also define the name FORTRAN_BINDING for use in #if @FORTRAN_BINDING at ..
- FORTRAN_BINDING=1
-
-fi
-
-ac_config_commands="$ac_config_commands default-1"
-
+ LIBS="$saved_LIBS"
+ rm -f f77conftest.$OBJEXT
-if test "$enable_fc" = "yes" ; then
- if test "$enable_f77" != "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran 90 requires Fortran 77" >&5
-$as_echo "$as_me: WARNING: Fortran 90 requires Fortran 77" >&2;}
- enable_fc=no
- else
- bindingsubsystems="$bindingsubsystems src/binding/fortran/use_mpi"
- bindings="$bindings f90"
- fi
fi
-
-f08_works=no
-if test "$enable_fc" = "yes" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 2008 support" >&5
-$as_echo_n "checking for Fortran 2008 support... " >&6; }
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-f08_works=yes
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
+# If we got to here and pac_cv_prog_f77_name_mangle is still NOT definable,
+# it may be that the programs have to be linked with the Fortran compiler,
+# not the C compiler. Try reversing the language used for the test
+if test "$pac_found" != "yes" ; then
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-#include <ISO_Fortran_binding.h>
+ for call in "" __stdcall ; do
+ for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-int foo_c(CFI_cdesc_t * a_desc, CFI_cdesc_t * b_desc)
-{
- char * a_row = (char*) a_desc->base_addr;
- if (a_desc->type != CFI_type_int) { return 1; }
- if (a_desc->rank != 2) { return 2; }
- if (a_desc->dim[1].extent != b_desc->dim[0].extent) { return 3; }
- return 0;
-}
+ void ${call} ${sym}(int a) {}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- mv conftest.$OBJEXT conftest1.$OBJEXT
-else
- f08_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=f
+
+
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT cconftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT cconftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="cconftest.$OBJEXT $LIBS"
+ ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ cat > conftest.$ac_ext <<_ACEOF
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
+ program main
+ call my_name(0)
+ end
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
-LIBS="conftest1.$OBJEXT $LIBS"
-cat > conftest.$ac_ext <<_ACEOF
+ pac_found=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-MODULE F08TS_MODULE
-IMPLICIT NONE
+ LIBS="$saved_LIBS"
+ rm -f cconftest.$OBJEXT
+ test "$pac_found" = "yes" && break
-! Test public, private, protected
-REAL, PUBLIC :: x
-REAL, PRIVATE :: y
-LOGICAL, PROTECTED :: z
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ test "$pac_found" = "yes" && break
+ done
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-! Test abstract
-ABSTRACT INTERFACE
- SUBROUTINE user_func(x, y)
- INTEGER :: x(*)
- REAL :: y
- END SUBROUTINE
-END INTERFACE
-
-! Test TS 29113 assumed type , assumed rank and bind(C)
-INTERFACE
- FUNCTION FOO(A, B, C) &
- BIND(C,name="foo_c") RESULT(err)
- USE, intrinsic :: iso_c_binding, ONLY : c_int
- TYPE(*), DIMENSION(..) :: A, B, C
- INTEGER(c_int) :: err
- END FUNCTION FOO
-END INTERFACE
-
-CONTAINS
-
-! Test TS 29113 asychronous attribute and optional
-SUBROUTINE test1(buf, count, ierr)
- INTEGER, ASYNCHRONOUS :: buf(*)
- INTEGER :: count
- INTEGER, OPTIONAL :: ierr
-END SUBROUTINE
-
-! Test procedure type and non-bind(c) x in C_FUNCLOC(x)
-SUBROUTINE test2(func)
- USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_FUNLOC, C_FUNPTR
- PROCEDURE(user_func) :: func
- TYPE(C_FUNPTR) :: errhandler_fn
- errhandler_fn = C_FUNLOC(func)
-END SUBROUTINE
-
-! Test intrinsic storage_size
-SUBROUTINE test3(x, size)
- CHARACTER, DIMENSION(..) :: x
- INTEGER, INTENT(OUT) :: size
- size = storage_size(x)/8
-END SUBROUTINE test3
-
-END MODULE
-
-!==============================================
-PROGRAM MAIN
-USE :: F08TS_MODULE, ONLY : FOO
-IMPLICIT NONE
-
-INTEGER, DIMENSION(4,4) :: A, B
-INTEGER, DIMENSION(2,2) :: C
-INTEGER :: ERRCODE
-
-! Test contiguous and non-contiguous array section passing
-! and linkage with C code
-ERRCODE = FOO(A(1:4:2, :), B(:, 2:4:2), C)
-
-END PROGRAM
-
-_ACEOF
-if ac_fn_fc_try_link "$LINENO"; then :
-
-else
- f08_works=no
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
-
-if test "$f08_works" = "yes" ; then
- f08_works=yes
-else
- f08_works=no
+if test "$pac_found" = "yes" ; then
+ case ${sym} in
+ my_name_)
+ pac_cv_prog_f77_name_mangle="lower uscore" ;;
+ my_name__)
+ pac_cv_prog_f77_name_mangle="lower 2uscore" ;;
+ my_name)
+ pac_cv_prog_f77_name_mangle="lower" ;;
+ MY_NAME)
+ pac_cv_prog_f77_name_mangle="upper" ;;
+ MY_name)
+ pac_cv_prog_f77_name_mangle="mixed" ;;
+ MY_name_)
+ pac_cv_prog_f77_name_mangle="mixed uscore" ;;
+ *)
+ pac_cv_prog_f77_name_mangle=""
+ pac_found=no;
+ ;;
+ esac
+ if test "X$pac_cv_prog_f77_name_mangle" != "X" ; then
+ if test "$call" = "__stdcall" ; then
+ pac_cv_prog_f77_name_mangle="$pac_cv_prog_f77_name_mangle stdcall"
+ fi
+ fi
fi
-rm -f conftest1.$OBJEXT F08TS_MODULE.* f08ts_module.*
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $f08_works" >&5
-$as_echo "$f08_works" >&6; }
fi
- if test "$f08_works" = "yes"; then
- BUILD_F08_BINDING_TRUE=
- BUILD_F08_BINDING_FALSE='#'
-else
- BUILD_F08_BINDING_TRUE='#'
- BUILD_F08_BINDING_FALSE=
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_name_mangle" >&5
+$as_echo "$pac_cv_prog_f77_name_mangle" >&6; }
+case $pac_cv_prog_f77_name_mangle in
+ *stdcall)
+ F77_STDCALL="__stdcall" ;;
+ *)
+ F77_STDCALL="" ;;
+esac
+# Get the standard call definition
+# FIXME: This should use F77_STDCALL, not STDCALL (non-conforming name)
+F77_STDCALL="$call"
+cat >>confdefs.h <<_ACEOF
+#define STDCALL $F77_STDCALL
+_ACEOF
-if test -n "$f08_works" ; then
- status_f08_works=1
- bindings="$bindings f08"
-else
- status_f08_works=0
-fi
+# new_name="`echo $name | tr ' ' '_' | tr [a-z] [A-Z]`"
+# We could have done the character conversion with 'tr'
+# which may not be portable, e.g. solaris's /usr/ucb/bin/tr.
+# So use a conservative approach.
+
+# Replace blank with underscore
+name_scheme="`echo $pac_cv_prog_f77_name_mangle | sed 's% %_%g'`"
+# Turn lowercase into uppercase.
+name_scheme="`echo $name_scheme | sed -e 'y%abcdefghijklmnopqrstuvwxyz%ABCDEFGHIJKLMNOPQRSTUVWXYZ%'`"
+F77_NAME_MANGLE="F77_NAME_${name_scheme}"
cat >>confdefs.h <<_ACEOF
-#define HAVE_F08_BINDING $status_f08_works
+#define $F77_NAME_MANGLE 1
_ACEOF
-# Set defaults for these values so that the Makefile in src/bindings/f90
-# is valid even if fc is not enabled (this is necessary for the
-# distclean target)
-MPIMODNAME=mpi
-MPICONSTMODNAME=mpi_constants
-MPISIZEOFMODNAME=mpi_sizeofs
-MPIBASEMODNAME=mpi_base
+if test "X$pac_cv_prog_f77_name_mangle" = "X" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown Fortran naming scheme" >&5
+$as_echo "$as_me: WARNING: Unknown Fortran naming scheme" >&2;}
+fi
-# F08 binding stuff
-MPI_F08_LINK_CONSTANTS_NAME=mpi_f08_link_constants
-PMPI_F08_NAME=pmpi_f08
-MPI_F08_CALLBACKS_NAME=mpi_f08_callbacks
-MPI_C_INTERFACE_NAME=mpi_c_interface
-MPI_C_INTERFACE_GLUE_NAME=mpi_c_interface_glue
-MPI_F08_TYPES_NAME=mpi_f08_types
-MPI_C_INTERFACE_NOBUF_NAME=mpi_c_interface_nobuf
-MPI_F08_COMPILE_CONSTANTS_NAME=mpi_f08_compile_constants
-MPI_F08_NAME=mpi_f08
-MPI_C_INTERFACE_TYPES_NAME=mpi_c_interface_types
-MPI_C_INTERFACE_CDESC_NAME=mpi_c_interface_cdesc
-if test "$enable_fc" = "yes" ; then
- # determine rpath and other shared library flags for FC
- fc_shlib_conf=src/env/fc_shlib.conf
-# It appears that the libtool dynamic linking strategy on Darwin is this:
-# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
-# 2. Don't do anything special when linking programs, since it seems that the
-# darwin dynamic linker will always use the "install_name" field from the lib
-# that was found at program link-time. (CONFIRMED) This is in opposition to
-# the way that Linux does it, where specifying a "-rpath" argument at program
-# link-time is important.
-#
-# There is an alternative darwin strategy for versions
-# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
-# (goodell@ 2011-06-17)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of FC" >&5
-$as_echo_n "checking for shared library (esp. rpath) characteristics of FC... " >&6; }
-# unfortunately, config.rpath expects the compiler in question is always CC and
-# uses several other environment variables as input
- if test -z "${pac_save_CC_nesting}" ; then
- pac_save_CC_nesting=0
- fi
- eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
- if test -z "${pac_save_GCC_nesting}" ; then
- pac_save_GCC_nesting=0
- fi
- eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
- if test -z "${pac_save_LD_nesting}" ; then
- pac_save_LD_nesting=0
- fi
- eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
+ # Check whether additional libraries are needed when linking with C
-# these two don't currently get overridden, but we push/pop them for safety in
-# case they do in the future
- if test -z "${pac_save_LDFLAGS_nesting}" ; then
- pac_save_LDFLAGS_nesting=0
- fi
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
+# To simply the code in the cache_check macro, chose the routine name
+# first, in case we need it
+confname=conf1_
+case "$pac_cv_prog_f77_name_mangle" in
+ "lower underscore") confname=conf1_ ;;
+ "upper stdcall") confname=CONF1 ;;
+ "upper") confname=CONF1 ;;
+ "lower doubleunderscore") confname=conf1_ ;;
+ "lower") confname=conf1 ;;
+ "mixed underscore") confname=conf1_ ;;
+ "mixed") confname=conf1 ;;
+esac
- if test -z "${pac_save_with_gnu_ld_nesting}" ; then
- pac_save_with_gnu_ld_nesting=0
- fi
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libraries to link Fortran main with C stdio routines" >&5
+$as_echo_n "checking for libraries to link Fortran main with C stdio routines... " >&6; }
+if ${pac_cv_prog_f77_and_c_stdio_libs+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+pac_cv_prog_f77_and_c_stdio_libs=unknown
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# set the temporary override values (if any)
-CC="$FC"
- GCC="$GCC_FC"
- LD="$LD_FC"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# ensure the values are available to the script
-export CC
-export GCC
-export LDFLAGS
-export LD
-export with_gnu_ld
-if $ac_aux_dir/config.rpath "$host" > $fc_shlib_conf; then :
- :
-else
- as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
-fi
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+int $confname(int a) {
+ printf( "The answer is %d\n", a ); fflush(stdout); return 0;
+}
-C_LINKPATH_SHL=""
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
-rm -f conftest.out
-# restore the old values
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
- eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
+ cat > conftest.$ac_ext <<_ACEOF
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
- eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
- eval pac_save_LD_${pac_save_LD_nesting}=""
+ program main
+ call conf1(0)
+ end
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
- eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
+_ACEOF
+ for extralib in "" "-lSystemStubs" ; do
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS $extralib"
+ if ac_fn_f77_try_link "$LINENO"; then :
+ pac_cv_prog_f77_and_c_stdio_libs="$extralib"; break
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
- eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
- eval pac_save_GCC_${pac_save_GCC_nesting}=""
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ done
+ if test "X$pac_cv_prog_f77_and_c_stdio_libs" = "X" ; then
+ pac_cv_prog_f77_and_c_stdio_libs=none
+ fi
+ rm -f conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
- eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
- eval pac_save_CC_${pac_save_CC_nesting}=""
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $fc_shlib_conf)" >&5
-$as_echo "done (results in $fc_shlib_conf)" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_and_c_stdio_libs" >&5
+$as_echo "$pac_cv_prog_f77_and_c_stdio_libs" >&6; }
+if test "$pac_cv_prog_f77_and_c_stdio_libs" != "none" \
+ -a "$pac_cv_prog_f77_and_c_stdio_libs" != "unknown" ; then
+ F77_OTHER_LIBS="$F77_OTHER_LIBS $pac_cv_prog_f77_and_c_stdio_libs"
+fi
- # Determine characteristics of the Fortran 90 compiler
- # Find a Fortran 90 compiler. Sets FC
- # Work around bug in autoconf that adds -g to FCFLAGS
- saveFCFLAGS="$FCFLAGS"
+ # Warn about mixed name mangling, since many of the tests will fail
+ if test "$pac_cv_prog_f77_name_mangle" = "mixed" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The compiler $F77 uses mixed case names. Fortran is monocase
+and many Fortran programs may use either upper or lower case names for MPI
+calls. Consider specifying a particular parameter to your Fortran compiler
+to select either upper or lower case names. For the Absoft compiler,
+-f selects lower case and -N109 selects upper case (if you use -f, also use
+-B108 to enable the iargc and getarg routines, which are needed for some
+tests and by many user programs). Specify new command
+line options by setting the environment variable FFLAGS to include
+the options (e.g., setenv FFLAGS \"-f -B108\"). In addition, make sure that your
+Fortran 90 compiler uses a compatible naming choice. For the
+Absoft Fortran 90, -YALL_NAMES=LCS selects lower case names and -B108
+adds underscores to names, as required for iargc and getarg. Pass this
+information to configure with the FCFLAGS environment variable." >&5
+$as_echo "$as_me: WARNING: The compiler $F77 uses mixed case names. Fortran is monocase
+and many Fortran programs may use either upper or lower case names for MPI
+calls. Consider specifying a particular parameter to your Fortran compiler
+to select either upper or lower case names. For the Absoft compiler,
+-f selects lower case and -N109 selects upper case (if you use -f, also use
+-B108 to enable the iargc and getarg routines, which are needed for some
+tests and by many user programs). Specify new command
+line options by setting the environment variable FFLAGS to include
+the options (e.g., setenv FFLAGS \"-f -B108\"). In addition, make sure that your
+Fortran 90 compiler uses a compatible naming choice. For the
+Absoft Fortran 90, -YALL_NAMES=LCS selects lower case names and -B108
+adds underscores to names, as required for iargc and getarg. Pass this
+information to configure with the FCFLAGS environment variable." >&2;}
+ # If Fortran implicitly enabled, disable it now. Otherwise,
+ # abort the configure since warning messages are often lost in
+ # the output.
+ as_fn_error $? "Aborting configure because of mixed case names in Fortran. Either select --disable-fortran or set FCFLAGS to force the compiler to select monocase names" "$LINENO" 5
+ fi
+
+ # The MPI standard requires that MPI_Init in any language initialize
+ # MPI in all languages. This can be a problem when objects produced
+ # by the Fortran compiler require symbols from the Fortran runtime
+ # (making linking C-only programs unnecessarily difficult). What we test
+ # here is whether the much more restricted needs of the Fortran
+ # initialize can be met with no special use of the Fortran runtime
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran init will work with C" >&5
+$as_echo_n "checking whether Fortran init will work with C... " >&6; }
+pac_f_init_works_with_c=unknown
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works" >&5
-$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works... " >&6; }
cat > conftest.$ac_ext <<_ACEOF
- program conftest
- integer, dimension(10) :: n
+ subroutine minit()
+ common /m1/ vc, vc2
+ character*1 vc(1,1), vc2(1)
+ common /m2/ vd
+ integer vd
+ save /m1/, /m2/
+ call minitc( vc, vc2, vd )
end
_ACEOF
-if ac_fn_fc_try_link "$LINENO"; then :
+if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_prog_fc_works="yes"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_works" >&5
-$as_echo "$pac_cv_prog_fc_works" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler" >&5
-$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler... " >&6; }
- if test "$cross_compiling" = yes; then :
- pac_cv_prog_fc_cross="$cross_compiling"
-else
- if ac_fn_fc_try_run "$LINENO"; then :
- pac_cv_prog_fc_cross="no"
-else
- pac_cv_prog_fc_cross="yes"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam
-fi
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ # This test checks if Fortran init can be done in pure C environment,
+ # i.e. no FLIBS in linking, so don't put FLIBS in LIBS below
+ LIBS="pac_f77conftest.$OBJEXT $LIBS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_cross" >&5
-$as_echo "$pac_cv_prog_fc_cross" >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-else
- pac_cv_prog_fc_works="no"
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&5
-$as_echo "$as_me: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&2;}
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define minit_ MINIT
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define minit_ minit
+#endif
+extern void minit_(void);
+int main( int argc, char **argv )
+{
+ minit_();
+ return 0;
+}
+char *v1 = 0;
+char *vc2 = 0;
+int v2 = 0;
+void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 );
+void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 )
+{
+v1 = dv1;
+v2 = dv3;
+vc2 = dv2;
+*vc2 = ' ';
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_f_init_works_with_c=yes
+else
+ pac_f_init_works_with_c=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-# The intel compiler sometimes generates these work.pc and .pcl files
-rm -f work.pc work.pcl
-ac_ext=f
+ ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ LIBS="$saved_LIBS"
+ rm -f pac_f77conftest.$OBJEXT
- FCFLAGS=$saveFCFLAGS
- if test "$pac_cv_prog_fc_works" = no ; then
- # Reject this compiler
- if test "$FC" != "no" ; then
- fc_rejected=yes
- oldFC="$FC"
- FC="no"
- fi
- fi
-
- # Determine the extension for Fortran 90 files (it isn't always .f90)
- FCEXT=$ac_fc_srcext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_f_init_works_with_c" >&5
+$as_echo "$pac_f_init_works_with_c" >&6; }
- if test "$FC" = "no" ; then
- if test "$fc_rejected" = "yes" ; then
- as_fn_error $? "Could not find a usable Fortran 90 compiler. The compiler $oldFC may be incompatible with the Fortran 77 compiler $F77; check the output of configure and consult the installation manuals" "$LINENO" 5
- else
- as_fn_error $? "Could not find a usable Fortran 90 compiler." "$LINENO" 5
- fi
- fi
+ if test "$pac_f_init_works_with_c" = "yes" ; then
- # Find the extension that this compiler uses for modules.
- # Sets FCMODEXT (and adds it to the list substed)
- # Sets FCMODINCFLAG (and adds it to the list substed)
+$as_echo "#define HAVE_MPI_F_INIT_WORKS_WITH_C 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 module extension" >&5
-$as_echo_n "checking for Fortran 90 module extension... " >&6; }
-if ${pac_cv_fc_module_ext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ fi
-pac_cv_fc_module_case="unknown"
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ #
+ # Some Fortran compilers now pass CHARACTER length as a size_t instead
+ # of as an int. This is hard to test for, since the data is passed by
+ # value and for characters less than about 2GB long, the correct
+ # value will be used. In this case, we must use an approach similar to
+ # the one used by libtool for shared library options - look at the
+ # compiler name or vendor.
+ # Known compilers that use size_t instead of int:
+ # Intel Fortran
+ # gfortran
+ # Add others as they become known
+ # Check whether --enable-f77characterlen was given.
+if test "${enable_f77characterlen+set}" = set; then :
+ enableval=$enable_f77characterlen;
+else
+ enable_f77characterlen=no
+fi
-cat > conftest.$ac_ext <<_ACEOF
+ # Set the default
+ f77_uses_int_for_str=default
- module conftest
- integer n
- parameter (n=1)
- end module conftest
+ case "$enable_f77characterlen" in
+ yes|no)
+ ;;
+ size_t)
+ f77_uses_int_for_str=no
+ enable_f77characterlen=yes
+ ;;
+ int)
+ f77_uses_int_for_str=yes
+ enable_f77characterlen=yes
+ ;;
+ *)
+ as_fn_error $? "Invalid value provided for --enable-f77characterlen" "$LINENO" 5
+ ;;
+ esac
+ # If we might change the size (enable) and we haven't set the choice,
+ # attempt to determine it from the compiler name. Risky, but we haven't
+ # found a reliable way to do this with test codes.
+ if test "$enable_f77characterlen" = "yes" -a \
+ "$f77_uses_int_for_str" = "default" ; then
+ f77_uses_int_for_str=yes
+ f77Basename=`basename $F77`
+ case $f77Basename in
+ ifort*)
+ f77_uses_int_for_str=no
+ ;;
+ gfortran*)
+ f77_uses_int_for_str=no
+ ;;
+ esac
+ fi
+ # This test is disabled for now. Despite information in documentation
+ # on gfortran, it appears to pass lengths as int, at least in some
+ # builds (it used movl when tested in 2/2013). Tests that failed
+ # included infotestf.f, in a call to mpi_info_get.
+ # Leave this as a place holder until a proper test can be determined.
+ if test "$enable_f77characterlen" = "yes" -a \
+ "$f77_uses_int_for_str" = "no" ; then
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+$as_echo "#define USE_FORT_STR_LEN_SIZET 1" >>confdefs.h
- # Look for module name
- # First, try to find known names. This avoids confusion caused by
- # additional files (like <name>.stb created by some versions of pgf90)
- # Early versions of the Intel compiler used d as the module extension;
- # we include that just to finish the test as early as possible.
- for name in conftest CONFTEST ; do
- for ext in mod MOD d ; do
- if test -s $name.$ext ; then
- if test $name = conftest ; then
- pac_cv_fc_module_case=lower
- else
- pac_cv_fc_module_case=upper
- fi
- pac_cv_fc_module_ext=$ext
- pac_MOD=$ext
- break
- fi
- done
- if test -n "$pac_cv_fc_module_ext" ; then break ; fi
- done
- if test -z "$pac_MOD" ; then
- # The test on .err is needed for Cray Fortran.
- pac_MOD=`ls conftest.* 2>&1 | grep -v conftest.${ac_fc_srcext} | grep -v conftest.o | grep -v conftest.err`
- pac_MOD=`echo $pac_MOD | sed -e 's/conftest\.//g'`
- pac_cv_fc_module_case="lower"
- if test "X$pac_MOD" = "X" ; then
- pac_MOD=`ls CONFTEST* 2>&1 | grep -v CONFTEST.${ac_fc_srcext} | grep -v CONFTEST.o | grep -v CONFTEST.err`
- pac_MOD=`echo $pac_MOD | sed -e 's/CONFTEST\.//g'`
- if test -n "$pac_MOD" -a -s "CONFTEST.$pac_MOD" ; then
- pac_cv_fc_module_case="upper"
- else
- # Clear because we must have gotten an error message
- pac_MOD=""
- fi
- fi
- if test -z "$pac_MOD" ; then
- pac_cv_fc_module_ext="unknown"
- else
- pac_cv_fc_module_ext=$pac_MOD
+ fi
+
+fi
+
+# FC requires F77 as well. If the user disabled f77, do not run the
+# next test; instead, drop into the warning message
+# Set a default value for fc works with f77. This value is
+# set to no *only* if fc was selected but was not compatible with f77
+fc_with_f77=yes
+if test "$enable_fc" = "yes" -a "$enable_f77" = yes ; then
+ enable_fc=no
+ if test "$FC" != "no" ; then
+ # If we allow multiple weak symbols, we should test a name
+ # that does not contain an underscore. The Fortran binding uses
+ # this rule for enabling multiple weak symbols:
+ # if defined(USE_WEAK_SYMBOLS) && !defined(USE_ONLY_MPI_NAMES) &&
+ # defined(HAVE_MULTIPLE_PRAGMA_WEAK) &&
+ # defined(F77_NAME_LOWER_2USCORE)
+ #
+ testRoutine="t1_2"
+ if test "$pac_cv_prog_c_multiple_weak_symbols" = "yes" -a \
+ "$enable_weak_symbols" = "yes" -a \
+ "$pac_cv_prog_f77_name_mangle" = "lower doubleunderscore" ; then
+ testRoutine="t12"
fi
- fi
-else
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extension for Fortran 90 programs" >&5
+$as_echo_n "checking for extension for Fortran 90 programs... " >&6; }
+ac_fc_srcext="f90"
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- pac_cv_fc_module_ext="unknown"
+cat > conftest.$ac_ext <<_ACEOF
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ program main
-if test "$pac_cv_fc_module_ext" = "unknown" ; then
- # Try again, but with an -em option. Abbreviated, because we're
- # just looking for the Cray option
- saveFCFLAGS=$FCFLAGS
- FCFLAGS="$FCFLAGS -em"
- cat > conftest.$ac_ext <<_ACEOF
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
- module conftest
- integer n
- parameter (n=1)
- end module conftest
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: f90" >&5
+$as_echo "f90" >&6; }
+
+else
+
+ ac_fc_srcext="f"
+ cat > conftest.$ac_ext <<_ACEOF
+
+ program main
+ end
_ACEOF
if ac_fn_fc_try_compile "$LINENO"; then :
- if test -s conftest.mod ; then
- pac_cv_fc_module_ext="mod"
- pac_cv_fc_module_case="lower"
- elif test -s CONFTEST.mod ; then
- pac_cv_fc_module_ext="mod"
- pac_cv_fc_module_case="upper"
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: f" >&5
+$as_echo "f" >&6; }
else
- :
- # do nothing - already have the unknown default value
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown!" >&5
+$as_echo "unknown!" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test "$pac_cv_fc_module_ext" = "unknown" ; then
- # The additional command line option did not help - restore
- # the original flags.
- FCFLAGS=$saveFCFLAGS
- fi
-fi
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_module_ext" >&5
-$as_echo "$pac_cv_fc_module_ext" >&6; }
-#
-if test "$pac_cv_fc_module_ext" = "unknown" ; then
- :
-else
- FCMODEXT=$pac_MOD
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 module include flag" >&5
-$as_echo_n "checking for Fortran 90 module include flag... " >&6; }
-if ${pac_cv_fc_module_incflag+:} false; then :
- $as_echo_n "(cached) " >&6
-else
ac_ext=${ac_fc_srcext-f}
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works" >&5
+$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works... " >&6; }
cat > conftest.$ac_ext <<_ACEOF
- module conf
- integer n
- parameter (n=1)
- end module conf
+ program conftest
+ integer, dimension(10) :: n
+ end
_ACEOF
-pac_madedir="no"
-if test ! -d conf ; then mkdir conftestdir ; pac_madedir="yes"; fi
-if test "$pac_cv_fc_module_case" = "upper" ; then
- pac_module="CONF.$pac_cv_fc_module_ext"
+if ac_fn_fc_try_link "$LINENO"; then :
+
+ pac_cv_prog_fc_works="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_works" >&5
+$as_echo "$pac_cv_prog_fc_works" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler" >&5
+$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ pac_cv_prog_fc_cross="$cross_compiling"
+
else
- pac_module="conf.$pac_cv_fc_module_ext"
+ if ac_fn_fc_try_run "$LINENO"; then :
+ pac_cv_prog_fc_cross="no"
+else
+ pac_cv_prog_fc_cross="yes"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam
fi
-if ac_fn_fc_try_compile "$LINENO"; then :
- if test -s "$pac_module" ; then
- mv $pac_module conftestdir
- # Remove any temporary files, and hide the work.pc file
- # (if the compiler generates them)
- if test -f work.pc ; then
- mv -f work.pc conftest.pc
- fi
- rm -f work.pcl
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to build a simple Fortran 90 module" >&5
-$as_echo "$as_me: WARNING: Unable to build a simple Fortran 90 module" >&2;}
- # echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- # cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_cross" >&5
+$as_echo "$pac_cv_prog_fc_cross" >&6; }
- fi
+else
+
+ pac_cv_prog_fc_works="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&5
+$as_echo "$as_me: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&2;}
fi
-rm -f core conftest.err conftest.$ac_objext
-# Remove the conftest* after AC_LANG_CONFTEST
-rm -rf conftest.dSYM
-rm -f conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+# The intel compiler sometimes generates these work.pc and .pcl files
+rm -f work.pc work.pcl
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-cat > conftest.$ac_ext <<_ACEOF
- program main
-use conf
- end
-_ACEOF
-# Save the original FCFLAGS
-saved_FCFLAGS="$FCFLAGS"
-pac_cv_fc_module_incflag=""
-for inchdr in '-I' '-M' '-p' ; do
- FCFLAGS="$saved_FCFLAGS ${inchdr}conftestdir"
- if ac_fn_fc_try_compile "$LINENO"; then :
- pac_cv_fc_module_incflag="$inchdr" ; break
-fi
-rm -f core conftest.err conftest.$ac_objext
-done
-if test "X$pac_cv_fc_module_incflag" = "X" ; then
- if test -s conftest.pc ; then
- mv conftest.pc conftestdir/mpimod.pc
- echo "mpimod.pc" > conftestdir/mpimod.pcl
- echo "`pwd`/conftestdir/mpimod.pc" >> conftestdir/mpimod.pcl
- inchdr='-cl,'
- FCFLAGS="$save_FCFLAGS ${inchdr}conftestdir"
- if ac_fn_fc_try_compile "$LINENO"; then :
- pac_fcompile_ok=yes
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 90 compiler works with Fortran 77 compiler" >&5
+$as_echo_n "checking whether Fortran 90 compiler works with Fortran 77 compiler... " >&6; }
+if ${pac_cv_fc_and_f77+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- pac_fcompile_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext
- if test "$pac_fcompile_ok" = "yes" ; then
- pac_cv_fc_module_incflag="$inchdr"
- # Not quite right; see the comments that follow
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: -cl,filename where filename contains a list of files and directories" >&5
-$as_echo "-cl,filename where filename contains a list of files and directories" >&6; }
- FC_WORK_FILES_ARG="-cl,mpimod.pcl"
- FCMODINCSPEC="-cl,<dir>/<file>mod.pcl"
- else
- # The version of the Intel compiler that I have refuses to let
- # you put the "work catalog" list anywhere but the current directory.
- pac_cv_fc_module_incflag="Unavailable!"
- fi
- else
- # Early versions of the Intel ifc compiler required a *file*
- # containing the names of files that contained the names of the
- #
- # -cl,filename.pcl
- # filename.pcl contains
- # fullpathname.pc
- # The "fullpathname.pc" is generated, I believe, when a module is
- # compiled.
- # Intel compilers use a wierd system: -cl,filename.pcl . If no file is
- # specified, work.pcl and work.pc are created. However, if you specify
- # a file, it must contain the name of a file ending in .pc . Ugh!
- pac_cv_fc_module_incflag="unknown"
- fi
-fi
-# Restore the original FCFLAGS
-FCFLAGS="$saved_FCFLAGS"
-if test "$pac_madedir" = "yes" ; then rm -rf conftestdir ; fi
-# Remove the conftest* after AC_LANG_CONFTEST
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest*
+
+pacTestRoutine=foo_abc
+eval pacTestRoutine=$testRoutine
+pac_cv_fc_and_f77="unknown"
+# compile the f77 program and link with the f90 program
+# The reverse may not work because the Fortran 90 environment may
+# expect to be in control (and to provide library files unknown to any other
+# environment, even Fortran 77!)
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_module_incflag" >&5
-$as_echo "$pac_cv_fc_module_incflag" >&6; }
+cat > conftest.$ac_ext <<_ACEOF
-FCMODINCFLAG=$pac_cv_fc_module_incflag
+ subroutine ${pacTestRoutine}(b)
+ integer b
+ b = b + 1
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 module output directory flag" >&5
-$as_echo_n "checking for Fortran 90 module output directory flag... " >&6; }
-if ${pac_cv_fc_module_outflag+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ # pac_f77compile_ok=yes
-ac_ext=${ac_fc_srcext-f}
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ # Save original LIBS, prepend previously generated object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $LIBS"
+ ac_ext=${ac_fc_srcext-f}
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-cat > conftest.$ac_ext <<_ACEOF
+ cat > conftest.$ac_ext <<_ACEOF
- module conf
- integer n
- parameter (n=1)
- end module conf
+ program main
+ integer a
+ a = 1
+ call ${pacTestRoutine}(a)
+ end
_ACEOF
-pac_madedir="no"
-if test ! -d conf ; then mkdir conftestdir ; pac_madedir="yes"; fi
-if test "$pac_cv_fc_module_case" = "upper" ; then
- pac_module="CONF.$pac_cv_fc_module_ext"
+if ac_fn_fc_try_link "$LINENO"; then :
+ pac_cv_fc_and_f77=yes
else
- pac_module="conf.$pac_cv_fc_module_ext"
+ pac_cv_fc_and_f77=no
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ # Some versions of the Intel compiler produce these two files
+ rm -f work.pc work.pcl
+ # Restore LIBS
+ LIBS="$saved_LIBS"
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-# check base case that the compiler can create modules and that they endup in
-# the current directory
-if ac_fn_fc_try_compile "$LINENO"; then :
+ # remove previously generated object file.
+ rm -f pac_f77conftest.$OBJEXT
- if test -s "$pac_module" ; then
- rm -f "$pac_module"
- # Remove any temporary files, and hide the work.pc file
- # (if the compiler generates them)
- if test -f work.pc ; then
- mv -f work.pc conftest.pc
- fi
- rm -f work.pcl
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to build a simple Fortran 90 module" >&5
-$as_echo "$as_me: WARNING: Unable to build a simple Fortran 90 module" >&2;}
- # echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- # cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+else
- fi
+ # pac_f77compile_ok=no
+ pac_cv_fc_and_f77=no
fi
-rm -f core conftest.err conftest.$ac_objext
-
-# known flags for reasonably recent versions of various f90 compilers:
-# gfortran -J${dir}
-# xlf -qmoddir=${dir}
-# pgf90 -module ${dir}
-# ifort -module ${dir}
-# nagfor -mdir ${dir}
-# ftn -J ${dir} ## the Cray fortran compiler
-# ftn -em -J${dir} ## the Cray fortran compiler (crayftn, in 2013)
-# For this above case, we must have added -em to FCFLAGS, since other
-# module tests do not always use the module output flag. See
-# FC_MODULE_EXT , where this is determined.
-# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
-# f90 -moddir=${dir} ## the Sun f90 compiler
-# g95 -fmod=${dir}
-#
-# If there are any compilers still out there that are totally brain-dead and
-# don't support an output directory flag, we can write a wrapper script to tell
-# users to use. Alternatively they can use an older version of MPICH.
-
-pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
- rm -f conftestdir/NONEXISTENT conftestdir/*
-
- if test -z "${pac_save_FCFLAGS_nesting}" ; then
- pac_save_FCFLAGS_nesting=0
- fi
- eval pac_save_FCFLAGS_${pac_save_FCFLAGS_nesting}='"$FCFLAGS"'
- pac_save_FCFLAGS_nesting=`expr ${pac_save_FCFLAGS_nesting} + 1`
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
- if ac_fn_fc_try_compile "$LINENO"; then :
- pac_build_success=yes
+# Perform the requested action based on whether the test succeeded
+if test "$pac_cv_fc_and_f77" = yes ; then
+ fc_with_f77=yes
else
- pac_build_success=no
-fi
-rm -f core conftest.err conftest.$ac_objext
- if test "X$pac_build_success" = Xyes; then :
- if test -s "conftestdir/${pac_module}"; then :
- pac_cv_fc_module_outflag="$mod_flag"
-fi
+ fc_with_f77=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: See config.log for the failed test program and its output." >&5
+$as_echo "$as_me: WARNING: See config.log for the failed test program and its output." >&2;}
fi
- pac_save_FCFLAGS_nesting=`expr ${pac_save_FCFLAGS_nesting} - 1`
- eval FCFLAGS="\$pac_save_FCFLAGS_${pac_save_FCFLAGS_nesting}"
- eval pac_save_FCFLAGS_${pac_save_FCFLAGS_nesting}=""
-
- if test "X$pac_cv_fc_module_outflag" = X; then :
- :
-else
- break
fi
-done
-
-# Remove the conftest* after AC_LANG_CONFTEST
-rm -rf conftest.dSYM
-rm -f conftest.$ac_ext
-
-if test "$pac_madedir" = "yes" ; then rm -rf conftestdir ; fi
-{ pac_madedir=; unset pac_madedir;}
-# Remove the conftest* after AC_LANG_CONFTEST
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest*
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_and_f77" >&5
+$as_echo "$pac_cv_fc_and_f77" >&6; }
+ if test "$fc_with_f77" != yes ; then
+ enable_fc=no
+ as_fn_error $? "The selected Fortran 90 compiler $FC does not work with the selected Fortran 77 compiler $F77. Use the environment variables FC and F77 respectively to select compatible Fortran compilers. The check here tests to see if a main program compiled with the Fortran 90 compiler can link with a subroutine compiled with the Fortran 77 compiler." "$LINENO" 5
+ elif test "$fc_with_f77" = "yes" ; then
+ # If we got here, there is a Fortran 90 compiler that we can use
+ enable_fc=yes
+ fi
+ elif test "$pac_cv_prog_fc_works" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Use --disable-fc to keep configure from searching for a Fortran 90 compiler" >&5
+$as_echo "$as_me: WARNING: Use --disable-fc to keep configure from searching for a Fortran 90 compiler" >&2;}
+ fi
+ if test "$enable_fc" = "yes"; then
+ if test "$FC" = "no" -o "$FC" = ""; then
+ # No Fortran 90 compiler found; abort
+ as_fn_error $? "No Fortran 90 compiler found. If you don't need
+ to build any Fortran 90 programs, you can disable Fortran 90
+ support using --disable-fc. If you do want to build Fortran 90
+ programs, you need to install a Fortran 90 compiler such as
+ gfortran or ifort before you can proceed." "$LINENO" 5
+ fi
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_module_outflag" >&5
-$as_echo "$pac_cv_fc_module_outflag" >&6; }
-FCMODOUTFLAG=$pac_cv_fc_module_outflag
-
-
+if test "$enable_fc" = "yes" -a "$enable_f77" != "yes" ; then
+ # Fortran 90 support requires compatible Fortran 77 support
+ as_fn_error $? "
+Fortran 90 support requires compatible Fortran 77 support.
+To force the use of the Fortran 90 compiler for Fortran 77,
+do not use configure option --disable-fortran, and set the environment
+variable F77 to the name of the Fortran 90 compiler, or \$FC.
+If you do not want any Fortran support, use configure options
+--disable-fortran." "$LINENO" 5
+ # We should probably do the compatibility test as well
+ enable_f77=yes
+fi
- if test -z "$FCMODOUTFLAG" ; then
- as_fn_error $? "FCMODOUTFLAG could not be determined but is critical for the current Fortran build system" "$LINENO" 5
- fi
+# ----------------------------------------------------------------------------
+# Now test for Fortran compiler characteristics
+# ----------------------------------------------------------------------------
+if test "$enable_f77" = "yes" ; then
+ # determine rpath and other shared library flags for F77
+ f77_shlib_conf=src/env/f77_shlib.conf
- if test "$pac_cv_fc_module_case" = "upper" ; then
- MPIMODNAME=MPI
- MPICONSTMODNAME=MPI_CONSTANTS
- MPISIZEOFMODNAME=MPI_SIZEOFS
- MPIBASEMODNAME=MPI_BASE
- MPI_F08_NAME=MPI_F08
- MPI_F08_LINK_CONSTANTS_NAME=MPI_F08_LINK_CONSTANTS
- MPI_F08_CALLBACKS_NAME=MPI_F08_CALLBACKS
- MPI_F08_TYPES_NAME=MPI_F08_TYPES
- MPI_F08_COMPILE_CONSTANTS_NAME=MPI_F08_COMPILE_CONSTANTS
- PMPI_F08_NAME=PMPI_F08
- MPI_C_INTERFACE_NAME=MPI_C_INTERFACE
- MPI_C_INTERFACE_NOBUF_NAME=MPI_C_INTERFACE_NOBUF
- MPI_C_INTERFACE_GLUE_NAME=MPI_C_INTERFACE_GLUE
- MPI_C_INTERFACE_TYPES_NAME=MPI_C_INTERFACE_TYPES
- MPI_C_INTERFACE_CDESC_NAME=MPI_C_INTERFACE_CDESC
- else
- MPIMODNAME=mpi
- MPICONSTMODNAME=mpi_constants
- MPISIZEOFMODNAME=mpi_sizeofs
- MPIBASEMODNAME=mpi_base
- MPI_F08_NAME=mpi_f08
- MPI_F08_LINK_CONSTANTS_NAME=mpi_f08_link_constants
- MPI_F08_CALLBACKS_NAME=mpi_f08_callbacks
- MPI_F08_TYPES_NAME=mpi_f08_types
- MPI_F08_COMPILE_CONSTANTS_NAME=mpi_f08_compile_constants
- PMPI_F08_NAME=pmpi_f08
- MPI_C_INTERFACE_NAME=mpi_c_interface
- MPI_C_INTERFACE_NOBUF_NAME=mpi_c_interface_nobuf
- MPI_C_INTERFACE_GLUE_NAME=mpi_c_interface_glue
- MPI_C_INTERFACE_TYPES_NAME=mpi_c_interface_types
- MPI_C_INTERFACE_CDESC_NAME=mpi_c_interface_cdesc
- fi
+# It appears that the libtool dynamic linking strategy on Darwin is this:
+# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
+# 2. Don't do anything special when linking programs, since it seems that the
+# darwin dynamic linker will always use the "install_name" field from the lib
+# that was found at program link-time. (CONFIRMED) This is in opposition to
+# the way that Linux does it, where specifying a "-rpath" argument at program
+# link-time is important.
+#
+# There is an alternative darwin strategy for versions
+# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
+# (goodell@ 2011-06-17)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of F77" >&5
+$as_echo_n "checking for shared library (esp. rpath) characteristics of F77... " >&6; }
+# unfortunately, config.rpath expects the compiler in question is always CC and
+# uses several other environment variables as input
+ if test -z "${pac_save_CC_nesting}" ; then
+ pac_save_CC_nesting=0
+ fi
+ eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
+ if test -z "${pac_save_GCC_nesting}" ; then
+ pac_save_GCC_nesting=0
+ fi
+ eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
+ if test -z "${pac_save_LD_nesting}" ; then
+ pac_save_LD_nesting=0
+ fi
+ eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
+# these two don't currently get overridden, but we push/pop them for safety in
+# case they do in the future
+ if test -z "${pac_save_LDFLAGS_nesting}" ; then
+ pac_save_LDFLAGS_nesting=0
+ fi
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
+ if test -z "${pac_save_with_gnu_ld_nesting}" ; then
+ pac_save_with_gnu_ld_nesting=0
+ fi
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
+# set the temporary override values (if any)
+CC="$F77"
+ GCC="$G77"
+ LD="$LD_F77"
- # Assume that all Fortran 90 compilers accept -I for include directories
- FCINC=-I
+# ensure the values are available to the script
+export CC
+export GCC
+export LDFLAGS
+export LD
+export with_gnu_ld
- FCINCFLAG=-I
+if $ac_aux_dir/config.rpath "$host" > $f77_shlib_conf; then :
+ :
+else
+ as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
+fi
+C_LINKPATH_SHL=""
- # Check if $MPI_DEFAULT_FCOPTS is valid with $F90
- if test -n "$MPI_DEFAULT_FCOPTS" ; then
- if test "$enable_check_compiler_flags" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 90 compiler accepts option $MPI_DEFAULT_FCOPTS" >&5
-$as_echo_n "checking whether Fortran 90 compiler accepts option $MPI_DEFAULT_FCOPTS... " >&6; }
-pac_opt="$MPI_DEFAULT_FCOPTS"
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+rm -f conftest.out
-FCFLAGS_orig="$FCFLAGS"
-FCFLAGS_opt="$pac_opt $FCFLAGS"
-pac_result="unknown"
+# restore the old values
-cat > conftest.$ac_ext <<_ACEOF
- program main
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
+ eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
- end
-_ACEOF
-FCFLAGS="$FCFLAGS_orig"
-rm -f pac_test1.log
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
+ eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
+ eval pac_save_LD_${pac_save_LD_nesting}=""
-# START of PUSHVAL
-if ${pac_stk_ac_link_level+:} false; then :
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
+ eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
-else
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
+ eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
+ eval pac_save_GCC_${pac_save_GCC_nesting}=""
- pac_stk_ac_link_level=0
-fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
+ eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
+ eval pac_save_CC_${pac_save_CC_nesting}=""
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $f77_shlib_conf)" >&5
+$as_echo "done (results in $f77_shlib_conf)" >&6; }
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-# END of PUSHVAL
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
-if ac_fn_fc_try_link "$LINENO"; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 accepts ! for comments" >&5
+$as_echo_n "checking whether Fortran 77 accepts ! for comments... " >&6; }
+if ${pac_cv_prog_f77_exclaim_comments+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
- FCFLAGS="$FCFLAGS_opt"
- rm -f pac_test2.log
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+cat > conftest.$ac_ext <<_ACEOF
-# START of PUSHVAL
+ program main
+! This is a comment
+ end
-if ${pac_stk_ac_link_level+:} false; then :
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+ pac_cv_prog_f77_exclaim_comments="yes"
else
- pac_stk_ac_link_level=0
+ pac_cv_prog_f77_exclaim_comments="no"
fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_exclaim_comments" >&5
+$as_echo "$pac_cv_prog_f77_exclaim_comments" >&6; }
+if test "$pac_cv_prog_f77_exclaim_comments" = "yes" ; then
+ has_exclaim="yes"
+else
+ has_exclaim="no"
+fi
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+checkdir=src;checkdir_is_given=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for include directory flag for Fortran" >&5
+$as_echo_n "checking for include directory flag for Fortran... " >&6; }
+if ${pac_cv_prog_f77_has_incdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+test -d $checkdir || mkdir $checkdir
+echo ' call sub()' > $checkdir/conftestf.h
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-# END of PUSHVAL
+saved_FFLAGS="$FFLAGS"
+pac_cv_prog_f77_has_incdir="none"
+# SGI wants -Wf,-I
+for idir in "-I" "-Wf,-I" ; do
+ FFLAGS="${idir} $checkdir $saved_FFLAGS"
+ cat > conftest.$ac_ext <<_ACEOF
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
-if ac_fn_fc_try_link "$LINENO"; then :
+ program main
+ include 'conftestf.h'
+ end
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_prog_f77_has_incdir="$idir"; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+FFLAGS="$saved_FFLAGS"
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if
-{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
- (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+if test "$checkdir_is_given" = "yes" ; then
+ rm -f $checkdir/conftestf.h
+else
+ rm -rf $checkdir
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_has_incdir" >&5
+$as_echo "$pac_cv_prog_f77_has_incdir" >&6; }
+if test "X$pac_cv_prog_f77_has_incdir" != "Xnone" ; then
+ F77_INCDIR="$pac_cv_prog_f77_has_incdir"
- pac_result=yes
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 flag for library directories" >&5
+$as_echo_n "checking for Fortran 77 flag for library directories... " >&6; }
+if ${pac_cv_prog_f77_library_dir_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- $as_echo "$as_me: program exited with status $ac_status" >&5
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- (exit $ac_status)
+cat > conftest.$ac_ext <<_ACEOF
- $as_echo "*** diff -b pac_test1.log pac_test2.log :" >&5
- cat $pac_TESTLOG >&5
- pac_result=no
+ subroutine f1conf
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
-fi
+ # pac_f77compile_ok=yes
-rm -f $pac_TESTLOG
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_f77conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_f77conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+{ $as_echo "$as_me:$LINENO: test -d conftestdir || mkdir conftestdir" >&5
+ (eval test -d conftestdir || mkdir conftestdir) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+{ $as_echo "$as_me:$LINENO: ${AR-ar} ${AR_FLAGS-cr} conftestdir/libf77conftest.a pac_f77conftest.$OBJEXT" >&5
+ (eval ${AR-ar} ${AR_FLAGS-cr} conftestdir/libf77conftest.a pac_f77conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
-else
+{ $as_echo "$as_me:$LINENO: ${RANLIB-ranlib} conftestdir/libf77conftest.a" >&5
+ (eval ${RANLIB-ranlib} conftestdir/libf77conftest.a) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ # Save original LIBS, prepend previously generated object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="-lf77conftest $LIBS"
+ saved_LDFLAGS="$LDFLAGS"
+ pac_cv_prog_f77_library_dir_flag="none"
+ for ldir in "-L" "-Wl,-L," ; do
+ LDFLAGS="${ldir}conftestdir $saved_LDFLAGS"
+ cat > conftest.$ac_ext <<_ACEOF
- pac_result=no
+ program main
+ call f1conf
+ end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+ pac_cv_prog_f77_library_dir_flag="$ldir";break
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ LDFLAGS="$saved_LDFLAGS"
+ LIBS="$saved_LIBS"
+ rm -rf conftestdir
+ rm -f pac_f77conftest.$OBJEXT
-# START of POPVAL
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if ${pac_stk_ac_link_level+:} false; then :
- if test "x$pac_stk_ac_link_level" = x-1; then :
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_library_dir_flag" >&5
+$as_echo "$pac_cv_prog_f77_library_dir_flag" >&6; }
+if test "X$pac_cv_prog_f77_library_dir_flag" != "Xnone" ; then
+ F77_LIBDIR_LEADER="$pac_cv_prog_f77_library_dir_flag"
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+fi
-else
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
-fi
+ if test "$MPI_WITH_PMPI" = "no" ; then
+ # If the PMPI routines are not in the same library with the MPI
+ # routines, we may need to remove the pmpi declarations
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran allows unused externals" >&5
+$as_echo_n "checking whether Fortran allows unused externals... " >&6; }
+if ${pac_cv_prog_f77_allows_unused_externals+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
-
-fi
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-# END of POPVAL
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+ external bar
+ end
-else
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+ pac_cv_prog_f77_allows_unused_externals="yes"
- pac_result=no
+else
+ pac_cv_prog_f77_allows_unused_externals="no"
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
-
-# START of POPVAL
-
-if ${pac_stk_ac_link_level+:} false; then :
-
- if test "x$pac_stk_ac_link_level" = x-1; then :
+ conftest$ac_exeext conftest.$ac_ext
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_allows_unused_externals" >&5
+$as_echo "$pac_cv_prog_f77_allows_unused_externals" >&6; }
+if test "X$pac_cv_prog_f77_allows_unused_externals" = "Xyes" ; then
+ MPIFPMPI=",PMPI_WTIME,PMPI_WTICK"
else
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
-
+ MPIFPMPI="";
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Removed PMPI_WTIME and PMPI_WTICK from mpif.h" >&5
+$as_echo "$as_me: WARNING: Removed PMPI_WTIME and PMPI_WTICK from mpif.h" >&2;}
fi
-else
+ else
+ MPIFPMPI=",PMPI_WTIME,PMPI_WTICK"
+ fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+ # Once we have name mangle, we can try to limit the number of needed libs
-fi
+ # Most systems allow the Fortran compiler to process .F and .F90 files
+ # using the C preprocessor. However, some systems either do not
+ # allow this or have serious bugs (OSF Fortran compilers have a bug
+ # that generates an error message from cpp). The following test
+ # checks to see if .F works, and if not, whether "cpp -P -C" can be used
+ # This is needed for Mac OSX 10.5
-# END of POPVAL
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 77 compiler processes .F files with C preprocessor" >&5
+$as_echo_n "checking whether Fortran 77 compiler processes .F files with C preprocessor... " >&6; }
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+saved_f77_ext=${ac_ext}
+ac_ext="F"
+saved_FFLAGS="$FFLAGS"
+FFLAGS="$FFLAGS $CPPFLAGS"
+cat > conftest.$ac_ext <<_ACEOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
-$as_echo "$pac_result" >&6; }
-rm -f conftest.$ac_ext
-#
-if test "$pac_result" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt" >&5
-$as_echo_n "checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt... " >&6; }
- pac_result=unknown
- FCFLAGS="$FCFLAGS_orig"
- rm -f pac_test3.log
+ program main
+#define ASIZE 10
+ integer a(ASIZE)
+ end
-# START of PUSHVAL
-if ${pac_stk_ac_compile_level+:} false; then :
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
- as_fn_arith $pac_stk_ac_compile_level + 1 && pac_stk_ac_compile_level=$as_val
+ pac_cv_f77_accepts_F=yes
+ F77CPP=""
else
- pac_stk_ac_compile_level=0
+ pac_cv_f77_accepts_F=no
+ F77CPP="false"
fi
-eval "pac_stk_ac_compile_$pac_stk_ac_compile_level=\$ac_compile"
-if test "x$pac_stk_ac_compile_level" = x0; then :
+rm -f core conftest.err conftest.$ac_objext
+# Restore Fortran 77's ac_ext but not FFLAGS
+ac_ext="$saved_f77_ext"
- eval pac_FirstSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+if test "$pac_cv_f77_accepts_F" != "yes" ; then
+ pac_cpp_f77="$ac_cpp -C -P conftest.F > conftest.$ac_ext"
-fi
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
- eval pac_LastSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+if
+{ $as_echo "$as_me:$LINENO: $pac_cpp_f77 > $pac_TESTLOG" >&5
+ (eval $pac_cpp_f77 > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
-# END of PUSHVAL
-ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> pac_test3.log 2>\&1|g'`"
-cat > conftest.$ac_ext <<_ACEOF
+ if test -s conftest.${ac_ext} ; then
+ if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_f77_accepts_F="no, use cpp"
+ F77CPP="$CPP -C -P"
- subroutine try()
- end
+fi
+rm -f core conftest.err conftest.$ac_objext
+ rm -f conftest.${ac_ext}
+ fi
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
+ (exit $ac_status)
- FCFLAGS="$FCFLAGS_opt"
- rm -f pac_test4.log
+ $as_echo "*** $pac_cpp_f77 :" >&5
+ cat $pac_TESTLOG >&5
-# START of PUSHVAL
-if ${pac_stk_ac_link_level+:} false; then :
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
-else
+fi
- pac_stk_ac_link_level=0
+rm -f $pac_TESTLOG
fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
+FFLAGS="$saved_FFLAGS"
+rm -f conftest.F
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_accepts_F" >&5
+$as_echo "$pac_cv_f77_accepts_F" >&6; }
-fi
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ # Check that the Fortran compiler will allow us to pass arguments
+ # of different types (e.g., for MPI_Send)
-# END of PUSHVAL
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 allows mismatched arguments" >&5
+$as_echo_n "checking whether $F77 allows mismatched arguments... " >&6; }
+if test "X$pac_cv_prog_f77_mismatched_args" = X ; then
+ pac_cv_prog_f77_mismatched_args_parm=""
+ pac_cv_prog_f77_mismatched_args=no
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test4.log 2>\&1|g'`"
-cat > conftest.$ac_ext <<_ACEOF
- program main
+ cat > conftest.$ac_ext <<_ACEOF
- end
-_ACEOF
-if ac_fn_fc_try_link "$LINENO"; then :
+ program main
+ integer a
+ real b
+ character c
+ call foo1(a)
+ call foo1(b)
+ call foo1(c)
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_prog_f77_mismatched_args=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$pac_cv_prog_f77_mismatched_args" != "yes" ; then
+ # try again with -wmismatch=foo1
+ save_FFLAGS="$FFLAGS"
+ # The best solution is to turn off errors on particular routines
+ # if that isn't possible (e.g., too many of them), then
+ # just try arguments that turn off all checking
+ for flags in "-mismatch" ; do
+ testok=no
+ FFLAGS="$FFLAGS $flags"
+ cat > conftest.$ac_ext <<_ACEOF
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
-if
-{ $as_echo "$as_me:$LINENO: diff -b pac_test2.log pac_test4.log > $pac_TESTLOG" >&5
- (eval diff -b pac_test2.log pac_test4.log > $pac_TESTLOG) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+ program main
+ integer a
+ real b
+ character c
+ call foo1(a)
+ call foo1(b)
+ call foo1(c)
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ testok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ FFLAGS="$save_FFLAGS"
+ if test "$testok" = yes ; then break ; fi
+ done
+ if test "$testok" = yes ; then
+ pac_cv_prog_f77_mismatched_args_parm="$flags"
+ pac_cv_prog_f77_mismatched_args="yes, with $pac_cv_prog_f77_mismatched_args_parm"
+ fi
+ fi
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- pac_result=yes
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_mismatched_args" >&5
+$as_echo "$pac_cv_prog_f77_mismatched_args" >&6; }
+if test "$pac_cv_prog_f77_mismatched_args" = no ; then
+ as_fn_error $? "The Fortran compiler $F77 will not compile files that call
+the same routine with arguments of different types." "$LINENO" 5
+fi
+addarg=$pac_cv_prog_f77_mismatched_args_parm
-else
+ if test "X$addarg" != "X" ; then
+ # We could add the names of all of the MPI routines that
+ # accept different types. Instead, we fail cleanly.
+ # Some Fortran compilers allow you to turn off checking for
+ # mismatched arguments for *all* routines. Adding an argument
+ # that turns off checking for *everything* is not something that
+ # configure should do - if the user wants this, they can follow
+ # the instructions in the following error message.
+ as_fn_error $? "The Fortran compiler $F77 does not accept programs that call the same routine with arguments of different types without the option $addarg. Rerun configure with FFLAGS=$addarg" "$LINENO" 5
+ fi
- $as_echo "$as_me: program exited with status $ac_status" >&5
+ bindings="$bindings f77"
- (exit $ac_status)
+$as_echo "#define HAVE_FORTRAN_BINDING 1" >>confdefs.h
- $as_echo "*** diff -b pac_test2.log pac_test4.log :" >&5
- cat $pac_TESTLOG >&5
- pac_result=no
+ # Also define the name FORTRAN_BINDING for use in #if @FORTRAN_BINDING at ..
+ FORTRAN_BINDING=1
+fi
+ac_config_commands="$ac_config_commands default-1"
+if test "$enable_fc" = "yes" ; then
+ if test "$enable_f77" != "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran 90 requires Fortran 77" >&5
+$as_echo "$as_me: WARNING: Fortran 90 requires Fortran 77" >&2;}
+ enable_fc=no
+ else
+ bindingsubsystems="$bindingsubsystems src/binding/fortran/use_mpi"
+ bindings="$bindings f90"
+ fi
fi
-rm -f $pac_TESTLOG
+f08_works=no
+if test "$enable_fc" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 2008 support" >&5
+$as_echo_n "checking for Fortran 2008 support... " >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-else
+f08_works=yes
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- pac_result=no
+#include <ISO_Fortran_binding.h>
+int foo_c(CFI_cdesc_t * a_desc, CFI_cdesc_t * b_desc)
+{
+ char * a_row = (char*) a_desc->base_addr;
+ if (a_desc->type != CFI_type_int) { return 1; }
+ if (a_desc->rank != 2) { return 2; }
+ if (a_desc->dim[1].extent != b_desc->dim[0].extent) { return 3; }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ mv conftest.$OBJEXT conftest1.$OBJEXT
+else
+ f08_works=no
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-# START of POPVAL
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if ${pac_stk_ac_link_level+:} false; then :
- if test "x$pac_stk_ac_link_level" = x-1; then :
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
-else
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
- eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+LIBS="conftest1.$OBJEXT $LIBS"
+cat > conftest.$ac_ext <<_ACEOF
-fi
-else
+MODULE F08TS_MODULE
+IMPLICIT NONE
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+! Test public, private, protected
+REAL, PUBLIC :: x
+REAL, PRIVATE :: y
+LOGICAL, PROTECTED :: z
-fi
+! Test abstract
+ABSTRACT INTERFACE
+ SUBROUTINE user_func(x, y)
+ INTEGER :: x(*)
+ REAL :: y
+ END SUBROUTINE
+END INTERFACE
-# END of POPVAL
+! Test TS 29113 assumed type , assumed rank and bind(C)
+INTERFACE
+ FUNCTION FOO(A, B, C) &
+ BIND(C,name="foo_c") RESULT(err)
+ USE, intrinsic :: iso_c_binding, ONLY : c_int
+ TYPE(*), DIMENSION(..) :: A, B, C
+ INTEGER(c_int) :: err
+ END FUNCTION FOO
+END INTERFACE
+CONTAINS
- LIBS="$saved_LIBS"
- rm -f pac_conftest.$OBJEXT
+! Test TS 29113 asychronous attribute and optional
+SUBROUTINE test1(buf, count, ierr)
+ INTEGER, ASYNCHRONOUS :: buf(*)
+ INTEGER :: count
+ INTEGER, OPTIONAL :: ierr
+END SUBROUTINE
+! Test procedure type and non-bind(c) x in C_FUNCLOC(x)
+SUBROUTINE test2(func)
+ USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_FUNLOC, C_FUNPTR
+ PROCEDURE(user_func) :: func
+ TYPE(C_FUNPTR) :: errhandler_fn
+ errhandler_fn = C_FUNLOC(func)
+END SUBROUTINE
-else
+! Test intrinsic storage_size
+SUBROUTINE test3(x, size)
+ CHARACTER, DIMENSION(..) :: x
+ INTEGER, INTENT(OUT) :: size
+ size = storage_size(x)/8
+END SUBROUTINE test3
+END MODULE
- pac_result=no
+!==============================================
+PROGRAM MAIN
+USE :: F08TS_MODULE, ONLY : FOO
+IMPLICIT NONE
+INTEGER, DIMENSION(4,4) :: A, B
+INTEGER, DIMENSION(2,2) :: C
+INTEGER :: ERRCODE
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+! Test contiguous and non-contiguous array section passing
+! and linkage with C code
+ERRCODE = FOO(A(1:4:2, :), B(:, 2:4:2), C)
-# START of POPVAL
+END PROGRAM
-if ${pac_stk_ac_compile_level+:} false; then :
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
- if test "x$pac_stk_ac_compile_level" = x-1; then :
+else
+ f08_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&5
-$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&2;}
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-else
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- eval ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
- as_fn_arith $pac_stk_ac_compile_level - 1 && pac_stk_ac_compile_level=$as_val
+if test "$f08_works" = "yes" ; then
+ f08_works=yes
+else
+ f08_works=no
fi
+rm -f conftest1.$OBJEXT F08TS_MODULE.* f08ts_module.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $f08_works" >&5
+$as_echo "$f08_works" >&6; }
+fi
+ if test "$f08_works" = "yes"; then
+ BUILD_F08_BINDING_TRUE=
+ BUILD_F08_BINDING_FALSE='#'
else
+ BUILD_F08_BINDING_TRUE='#'
+ BUILD_F08_BINDING_FALSE=
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&5
-$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&2;}
+if test -n "$f08_works" ; then
+ status_f08_works=1
+ bindings="$bindings f08"
+else
+ status_f08_works=0
fi
-# END of POPVAL
+cat >>confdefs.h <<_ACEOF
+#define HAVE_F08_BINDING $status_f08_works
+_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
-$as_echo "$pac_result" >&6; }
- rm -f pac_test3.log pac_test4.log
-fi
-rm -f pac_test1.log pac_test2.log
+# Set defaults for these values so that the Makefile in src/bindings/f90
+# is valid even if fc is not enabled (this is necessary for the
+# distclean target)
+MPIMODNAME=mpi
+MPICONSTMODNAME=mpi_constants
+MPISIZEOFMODNAME=mpi_sizeofs
+MPIBASEMODNAME=mpi_base
-FCFLAGS="$FCFLAGS_orig"
-if test "$pac_result" = "yes" ; then
+# F08 binding stuff
+MPI_F08_LINK_CONSTANTS_NAME=mpi_f08_link_constants
+PMPI_F08_NAME=pmpi_f08
+MPI_F08_CALLBACKS_NAME=mpi_f08_callbacks
+MPI_C_INTERFACE_NAME=mpi_c_interface
+MPI_C_INTERFACE_GLUE_NAME=mpi_c_interface_glue
+MPI_F08_TYPES_NAME=mpi_f08_types
+MPI_C_INTERFACE_NOBUF_NAME=mpi_c_interface_nobuf
+MPI_F08_COMPILE_CONSTANTS_NAME=mpi_f08_compile_constants
+MPI_F08_NAME=mpi_f08
+MPI_C_INTERFACE_TYPES_NAME=mpi_c_interface_types
+MPI_C_INTERFACE_CDESC_NAME=mpi_c_interface_cdesc
- FCFLAGS="$FCFLAGS $MPI_DEFAULT_FCOPTS"
+if test "$enable_fc" = "yes" ; then
+ # determine rpath and other shared library flags for FC
+ fc_shlib_conf=src/env/fc_shlib.conf
-else
- :
-fi
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- else
- FCFLAGS="$FCFLAGS $MPI_DEFAULT_FCOPTS"
- fi
- fi
- # Most systems allow the Fortran compiler to process .F and .F90 files
- # using the C preprocessor. However, some systems either do not
- # allow this or have serious bugs (OSF Fortran compilers have a bug
- # that generates an error message from cpp). The following test
- # checks to see if .F works, and if not, whether "cpp -P -C" can be used
+# It appears that the libtool dynamic linking strategy on Darwin is this:
+# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
+# 2. Don't do anything special when linking programs, since it seems that the
+# darwin dynamic linker will always use the "install_name" field from the lib
+# that was found at program link-time. (CONFIRMED) This is in opposition to
+# the way that Linux does it, where specifying a "-rpath" argument at program
+# link-time is important.
+#
+# There is an alternative darwin strategy for versions
+# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
+# (goodell@ 2011-06-17)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of FC" >&5
+$as_echo_n "checking for shared library (esp. rpath) characteristics of FC... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 90 compiler processes .F90 files with C preprocessor" >&5
-$as_echo_n "checking whether Fortran 90 compiler processes .F90 files with C preprocessor... " >&6; }
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+# unfortunately, config.rpath expects the compiler in question is always CC and
+# uses several other environment variables as input
-saved_fc_ext=${ac_ext}
-ac_ext="F90"
-saved_FCFLAGS="$FCFLAGS"
-FCFLAGS="$FCFLAGS $CPPFLAGS"
-cat > conftest.$ac_ext <<_ACEOF
+ if test -z "${pac_save_CC_nesting}" ; then
+ pac_save_CC_nesting=0
+ fi
+ eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
- program main
-#define ASIZE 10
- integer a(ASIZE)
- end
+ if test -z "${pac_save_GCC_nesting}" ; then
+ pac_save_GCC_nesting=0
+ fi
+ eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+ if test -z "${pac_save_LD_nesting}" ; then
+ pac_save_LD_nesting=0
+ fi
+ eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
- pac_cv_fc_accepts_F90=yes
- FCCPP=""
+# these two don't currently get overridden, but we push/pop them for safety in
+# case they do in the future
-else
+ if test -z "${pac_save_LDFLAGS_nesting}" ; then
+ pac_save_LDFLAGS_nesting=0
+ fi
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
- pac_cv_fc_accepts_F90=no
- FCCPP="false"
-fi
-rm -f core conftest.err conftest.$ac_objext
-# Restore Fortran's ac_ext but not FCFLAGS
-ac_ext="$saved_fc_ext"
+ if test -z "${pac_save_with_gnu_ld_nesting}" ; then
+ pac_save_with_gnu_ld_nesting=0
+ fi
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
-if test "$pac_cv_fc_accepts_F90" != "yes" ; then
- pac_cpp_fc="$ac_cpp -C -P conftest.F90 > conftest.$ac_ext"
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
+# set the temporary override values (if any)
+CC="$FC"
+ GCC="$GCC_FC"
+ LD="$LD_FC"
-if
-{ $as_echo "$as_me:$LINENO: $pac_cpp_fc > $pac_TESTLOG" >&5
- (eval $pac_cpp_fc > $pac_TESTLOG) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
+# ensure the values are available to the script
+export CC
+export GCC
+export LDFLAGS
+export LD
+export with_gnu_ld
+if $ac_aux_dir/config.rpath "$host" > $fc_shlib_conf; then :
+ :
+else
+ as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
+fi
+C_LINKPATH_SHL=""
- if test -s conftest.${ac_ext} ; then
- if ac_fn_fc_try_compile "$LINENO"; then :
- pac_cv_fc_accepts_F90="no, use cpp"
- FCCPP="$CPP -C -P"
+rm -f conftest.out
-fi
-rm -f core conftest.err conftest.$ac_objext
- rm -f conftest.${ac_ext}
- fi
+# restore the old values
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
+ eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
-else
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
+ eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
+ eval pac_save_LD_${pac_save_LD_nesting}=""
- $as_echo "$as_me: program exited with status $ac_status" >&5
- (exit $ac_status)
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
+ eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
- $as_echo "*** $pac_cpp_fc :" >&5
- cat $pac_TESTLOG >&5
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
+ eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
+ eval pac_save_GCC_${pac_save_GCC_nesting}=""
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
+ eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
+ eval pac_save_CC_${pac_save_CC_nesting}=""
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $fc_shlib_conf)" >&5
+$as_echo "done (results in $fc_shlib_conf)" >&6; }
-rm -f $pac_TESTLOG
-fi
-FCFLAGS="$saved_FCFLAGS"
-rm -f conftest.F90
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_accepts_F90" >&5
-$as_echo "$pac_cv_fc_accepts_F90" >&6; }
+ # Determine characteristics of the Fortran 90 compiler
+ # Find a Fortran 90 compiler. Sets FC
+ # Work around bug in autoconf that adds -g to FCFLAGS
+ saveFCFLAGS="$FCFLAGS"
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- # Check whether additional libraries are needed when linking with C
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works" >&5
+$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works... " >&6; }
+cat > conftest.$ac_ext <<_ACEOF
-# To simply the code in the cache_check macro, chose the routine name
-# first, in case we need it
-confname=conf1_
-case "$pac_cv_prog_f77_name_mangle" in
- "lower underscore") confname=conf1_ ;;
- "upper stdcall") confname=CONF1 ;;
- upper) confname=CONF1 ;;
- "lower doubleunderscore") confname=conf1_ ;;
- lower) confname=conf1 ;;
- "mixed underscore") confname=conf1_ ;;
- mixed) confname=conf1 ;;
-esac
+ program conftest
+ integer, dimension(10) :: n
+ end
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what libraries are needed to link Fortran90 programs with C routines that use stdio" >&5
-$as_echo_n "checking what libraries are needed to link Fortran90 programs with C routines that use stdio... " >&6; }
-if ${pac_cv_prog_fc_and_c_stdio_libs+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-pac_cv_prog_fc_and_c_stdio_libs=unknown
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ pac_cv_prog_fc_works="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_works" >&5
+$as_echo "$pac_cv_prog_fc_works" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler" >&5
+$as_echo_n "checking whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ pac_cv_prog_fc_cross="$cross_compiling"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+else
+ if ac_fn_fc_try_run "$LINENO"; then :
+ pac_cv_prog_fc_cross="no"
+else
+ pac_cv_prog_fc_cross="yes"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam
+fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_cross" >&5
+$as_echo "$pac_cv_prog_fc_cross" >&6; }
-#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
-#include <stdio.h>
-#endif
-int $confname( int a )
-{ printf( "The answer is %d\n", a ); fflush(stdout); return 0; }
+else
+ pac_cv_prog_fc_works="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&5
+$as_echo "$as_me: WARNING: installation or configuration problem: Fortran 90 compiler cannot create executables." >&2;}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+# The intel compiler sometimes generates these work.pc and .pcl files
+rm -f work.pc work.pcl
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- pac_compile_ok=yes
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- # Save LIBS and prepend object file to LIBS
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ FCFLAGS=$saveFCFLAGS
+ if test "$pac_cv_prog_fc_works" = no ; then
+ # Reject this compiler
+ if test "$FC" != "no" ; then
+ fc_rejected=yes
+ oldFC="$FC"
+ FC="no"
+ fi
+ fi
- cat > conftest.$ac_ext <<_ACEOF
+ # Determine the extension for Fortran 90 files (it isn't always .f90)
+ FCEXT=$ac_fc_srcext
- program main
-call conf1(0)
- end
-_ACEOF
-if ac_fn_fc_try_link "$LINENO"; then :
+ if test "$FC" = "no" ; then
+ if test "$fc_rejected" = "yes" ; then
+ as_fn_error $? "Could not find a usable Fortran 90 compiler. The compiler $oldFC may be incompatible with the Fortran 77 compiler $F77; check the output of configure and consult the installation manuals" "$LINENO" 5
+ else
+ as_fn_error $? "Could not find a usable Fortran 90 compiler." "$LINENO" 5
+ fi
+ fi
- pac_cv_prog_fc_and_c_stdio_libs=none
+ # Find the extension that this compiler uses for modules.
+ # Sets FCMODEXT (and adds it to the list substed)
+ # Sets FCMODINCFLAG (and adds it to the list substed)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 module extension" >&5
+$as_echo_n "checking for Fortran 90 module extension... " >&6; }
+if ${pac_cv_fc_module_ext+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- # Try again with -lSystemStubs
- LIBS="$LIBS -lSystemStubs"
- if ac_fn_fc_try_link "$LINENO"; then :
+pac_cv_fc_module_case="unknown"
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- pac_cv_prog_fc_and_c_stdio_libs="-lSystemStubs"
+cat > conftest.$ac_ext <<_ACEOF
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LIBS="$saved_LIBS"
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ module conftest
+ integer n
+ parameter (n=1)
+ end module conftest
- rm -f pac_conftest.$OBJEXT
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
-if test "$pac_cv_prog_fc_and_c_stdio_libs" != none -a \
- "$pac_cv_prog_fc_and_c_stdio_libs" != unknown ; then
- FC_OTHER_LIBS="$FC_OTHER_LIBS $pac_cv_prog_fc_and_c_stdio_libs"
-fi
+ # Look for module name
+ # First, try to find known names. This avoids confusion caused by
+ # additional files (like <name>.stb created by some versions of pgf90)
+ # Early versions of the Intel compiler used d as the module extension;
+ # we include that just to finish the test as early as possible.
+ for name in conftest CONFTEST ; do
+ for ext in mod MOD d ; do
+ if test -s $name.$ext ; then
+ if test $name = conftest ; then
+ pac_cv_fc_module_case=lower
+ else
+ pac_cv_fc_module_case=upper
+ fi
+ pac_cv_fc_module_ext=$ext
+ pac_MOD=$ext
+ break
+ fi
+ done
+ if test -n "$pac_cv_fc_module_ext" ; then break ; fi
+ done
+ if test -z "$pac_MOD" ; then
+ # The test on .err is needed for Cray Fortran.
+ pac_MOD=`ls conftest.* 2>&1 | grep -v conftest.${ac_fc_srcext} | grep -v conftest.o | grep -v conftest.err`
+ pac_MOD=`echo $pac_MOD | sed -e 's/conftest\.//g'`
+ pac_cv_fc_module_case="lower"
+ if test "X$pac_MOD" = "X" ; then
+ pac_MOD=`ls CONFTEST* 2>&1 | grep -v CONFTEST.${ac_fc_srcext} | grep -v CONFTEST.o | grep -v CONFTEST.err`
+ pac_MOD=`echo $pac_MOD | sed -e 's/CONFTEST\.//g'`
+ if test -n "$pac_MOD" -a -s "CONFTEST.$pac_MOD" ; then
+ pac_cv_fc_module_case="upper"
+ else
+ # Clear because we must have gotten an error message
+ pac_MOD=""
+ fi
+ fi
+ if test -z "$pac_MOD" ; then
+ pac_cv_fc_module_ext="unknown"
+ else
+ pac_cv_fc_module_ext=$pac_MOD
+ fi
+ fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_and_c_stdio_libs" >&5
-$as_echo "$pac_cv_prog_fc_and_c_stdio_libs" >&6; }
+else
+ pac_cv_fc_module_ext="unknown"
- # ------------------------------------------------
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "X$modincdir" = "X" ; then
- modincdir=$includedir
-fi
-export modincdir
+if test "$pac_cv_fc_module_ext" = "unknown" ; then
+ # Try again, but with an -em option. Abbreviated, because we're
+ # just looking for the Cray option
+ saveFCFLAGS=$FCFLAGS
+ FCFLAGS="$FCFLAGS -em"
+ cat > conftest.$ac_ext <<_ACEOF
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ module conftest
+ integer n
+ parameter (n=1)
+ end module conftest
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether TRUE has been defined" >&5
-$as_echo_n "checking whether TRUE has been defined... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int
-main ()
-{
-return TRUE;
- ;
- return 0;
-}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- has_true_upper_case=yes
-else
- has_true_upper_case=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_true_upper_case" >&5
-$as_echo "$has_true_upper_case" >&6; }
-if test "$has_true_upper_case" = "no" ; then
+if ac_fn_fc_try_compile "$LINENO"; then :
-$as_echo "#define TRUE 1" >>confdefs.h
+ if test -s conftest.mod ; then
+ pac_cv_fc_module_ext="mod"
+ pac_cv_fc_module_case="lower"
+ elif test -s CONFTEST.mod ; then
+ pac_cv_fc_module_ext="mod"
+ pac_cv_fc_module_case="upper"
+ fi
+else
-$as_echo "#define FALSE 0" >>confdefs.h
+ :
+ # do nothing - already have the unknown default value
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$pac_cv_fc_module_ext" = "unknown" ; then
+ # The additional command line option did not help - restore
+ # the original flags.
+ FCFLAGS=$saveFCFLAGS
+ fi
+fi
ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-# ----------------------------------------------------------------------------
-# We previously allowed "default" as a valid value for $enable_cxx. Now we
-# assume its available by default and error out if it doesn't work (just like
-# F77 & FC). The user must pass "--disable-cxx" in order to successfully
-# complete configure in this case.
-if test "$enable_cxx" = "default" ; then
- as_fn_error $? "aborting because \"--enable-cxx=default\" is no longer a supported value" "$LINENO" 5
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_module_ext" >&5
+$as_echo "$pac_cv_fc_module_ext" >&6; }
+#
-if test "$enable_cxx" = "yes" ; then
- # Another bug in autoconf. The checks for the C++ compiler do not
- # ensure that you can link a program that is built with the C++
- # compiler. We've seen this error with gcc and icc, particularly
- # when those compilers accept C++ language elements but are unable
- # to link programs that are really C++. For that reason,
- # we've added a test to see if the C++ compiler can produce
- # an executable.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler $CXX can build an executable" >&5
-$as_echo_n "checking whether the C++ compiler $CXX can build an executable... " >&6; }
-if ${pac_cv_cxx_builds_exe+:} false; then :
+if test "$pac_cv_fc_module_ext" = "unknown" ; then
+ :
+else
+ FCMODEXT=$pac_MOD
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 module include flag" >&5
+$as_echo_n "checking for Fortran 90 module include flag... " >&6; }
+if ${pac_cv_fc_module_incflag+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+cat > conftest.$ac_ext <<_ACEOF
+
+
+ module conf
+ integer n
+ parameter (n=1)
+ end module conf
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-class mytest {
- int a;
-public:
- mytest(void) : a(1) {}
- ~mytest(void) {}
-};
-int
-main ()
-{
-mytest a;
- ;
- return 0;
-}
_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- pac_cv_cxx_builds_exe=yes
+pac_madedir="no"
+if test ! -d conf ; then mkdir conftestdir ; pac_madedir="yes"; fi
+if test "$pac_cv_fc_module_case" = "upper" ; then
+ pac_module="CONF.$pac_cv_fc_module_ext"
else
- pac_cv_cxx_builds_exe=no
+ pac_module="conf.$pac_cv_fc_module_ext"
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if ac_fn_fc_try_compile "$LINENO"; then :
+ if test -s "$pac_module" ; then
+ mv $pac_module conftestdir
+ # Remove any temporary files, and hide the work.pc file
+ # (if the compiler generates them)
+ if test -f work.pc ; then
+ mv -f work.pc conftest.pc
+ fi
+ rm -f work.pcl
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to build a simple Fortran 90 module" >&5
+$as_echo "$as_me: WARNING: Unable to build a simple Fortran 90 module" >&2;}
+ # echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+ # cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_builds_exe" >&5
-$as_echo "$pac_cv_cxx_builds_exe" >&6; }
- if test "$pac_cv_cxx_builds_exe" != yes ; then
- as_fn_error $? "Aborting because C++ compiler does not work. If you do not need a C++ compiler, configure with --disable-cxx" "$LINENO" 5
fi
- # Recent failures have come when a standard header is loaded
- # The Intel icpc 10.x compiler fails with <string> if gcc 4.2 is installed.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler works with string" >&5
-$as_echo_n "checking whether C++ compiler works with string... " >&6; }
-if ${pac_cv_cxx_compiles_string+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+fi
+rm -f core conftest.err conftest.$ac_objext
+# Remove the conftest* after AC_LANG_CONFTEST
+rm -rf conftest.dSYM
+rm -f conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string>
-int
-main ()
-{
-return 0;
- ;
- return 0;
-}
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+use conf
+ end
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- pac_cv_cxx_compiles_string=yes
+
+# Save the original FCFLAGS
+saved_FCFLAGS="$FCFLAGS"
+pac_cv_fc_module_incflag=""
+for inchdr in '-I' '-M' '-p' ; do
+ FCFLAGS="$saved_FCFLAGS ${inchdr}conftestdir"
+ if ac_fn_fc_try_compile "$LINENO"; then :
+ pac_cv_fc_module_incflag="$inchdr" ; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+done
+if test "X$pac_cv_fc_module_incflag" = "X" ; then
+ if test -s conftest.pc ; then
+ mv conftest.pc conftestdir/mpimod.pc
+ echo "mpimod.pc" > conftestdir/mpimod.pcl
+ echo "`pwd`/conftestdir/mpimod.pc" >> conftestdir/mpimod.pcl
+ inchdr='-cl,'
+ FCFLAGS="$save_FCFLAGS ${inchdr}conftestdir"
+ if ac_fn_fc_try_compile "$LINENO"; then :
+ pac_fcompile_ok=yes
else
- pac_cv_cxx_compiles_string=no
+ pac_fcompile_ok=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=f
+rm -f core conftest.err conftest.$ac_objext
+ if test "$pac_fcompile_ok" = "yes" ; then
+ pac_cv_fc_module_incflag="$inchdr"
+ # Not quite right; see the comments that follow
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: -cl,filename where filename contains a list of files and directories" >&5
+$as_echo "-cl,filename where filename contains a list of files and directories" >&6; }
+ FC_WORK_FILES_ARG="-cl,mpimod.pcl"
+ FCMODINCSPEC="-cl,<dir>/<file>mod.pcl"
+ else
+ # The version of the Intel compiler that I have refuses to let
+ # you put the "work catalog" list anywhere but the current directory.
+ pac_cv_fc_module_incflag="Unavailable!"
+ fi
+ else
+ # Early versions of the Intel ifc compiler required a *file*
+ # containing the names of files that contained the names of the
+ #
+ # -cl,filename.pcl
+ # filename.pcl contains
+ # fullpathname.pc
+ # The "fullpathname.pc" is generated, I believe, when a module is
+ # compiled.
+ # Intel compilers use a wierd system: -cl,filename.pcl . If no file is
+ # specified, work.pcl and work.pc are created. However, if you specify
+ # a file, it must contain the name of a file ending in .pc . Ugh!
+ pac_cv_fc_module_incflag="unknown"
+ fi
+fi
+# Restore the original FCFLAGS
+FCFLAGS="$saved_FCFLAGS"
+if test "$pac_madedir" = "yes" ; then rm -rf conftestdir ; fi
+# Remove the conftest* after AC_LANG_CONFTEST
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+ac_ext=f
ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_f77_compiler_gnu
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_compiles_string" >&5
-$as_echo "$pac_cv_cxx_compiles_string" >&6; }
- if test "$pac_cv_cxx_compiles_string" != yes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The C++ compiler $CXX cannot compile a program containing the <string> header - this may indicate a problem with the C++ installation. Consider configuing with --disable-cxx" >&5
-$as_echo "$as_me: WARNING: The C++ compiler $CXX cannot compile a program containing the <string> header - this may indicate a problem with the C++ installation. Consider configuing with --disable-cxx" >&2;}
- fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_module_incflag" >&5
+$as_echo "$pac_cv_fc_module_incflag" >&6; }
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports exceptions" >&5
-$as_echo_n "checking whether the compiler supports exceptions... " >&6; }
-if ${ac_cv_cxx_exceptions+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+FCMODINCFLAG=$pac_cv_fc_module_incflag
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int
-main ()
-{
-try { throw 1; } catch (int i) { return i; }
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_cxx_exceptions=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 module output directory flag" >&5
+$as_echo_n "checking for Fortran 90 module output directory flag... " >&6; }
+if ${pac_cv_fc_module_outflag+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- ac_cv_cxx_exceptions=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_exceptions" >&5
-$as_echo "$ac_cv_cxx_exceptions" >&6; }
-if test "$ac_cv_cxx_exceptions" = yes; then
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-$as_echo "#define HAVE_CXX_EXCEPTIONS /**/" >>confdefs.h
+cat > conftest.$ac_ext <<_ACEOF
-fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler recognizes bool as a built-in type" >&5
-$as_echo_n "checking whether the compiler recognizes bool as a built-in type... " >&6; }
-if ${ac_cv_cxx_bool+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ module conf
+ integer n
+ parameter (n=1)
+ end module conf
-int f(int x){return 1;}
-int f(char x){return 1;}
-int f(bool x){return 1;}
-int
-main ()
-{
-bool b = true; return f(b);
- ;
- return 0;
-}
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_cxx_bool=yes
+pac_madedir="no"
+if test ! -d conf ; then mkdir conftestdir ; pac_madedir="yes"; fi
+if test "$pac_cv_fc_module_case" = "upper" ; then
+ pac_module="CONF.$pac_cv_fc_module_ext"
else
- ac_cv_cxx_bool=no
+ pac_module="conf.$pac_cv_fc_module_ext"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+# check base case that the compiler can create modules and that they endup in
+# the current directory
+if ac_fn_fc_try_compile "$LINENO"; then :
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_bool" >&5
-$as_echo "$ac_cv_cxx_bool" >&6; }
-if test "$ac_cv_cxx_bool" != yes; then
+ if test -s "$pac_module" ; then
+ rm -f "$pac_module"
+ # Remove any temporary files, and hide the work.pc file
+ # (if the compiler generates them)
+ if test -f work.pc ; then
+ mv -f work.pc conftest.pc
+ fi
+ rm -f work.pcl
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to build a simple Fortran 90 module" >&5
+$as_echo "$as_me: WARNING: Unable to build a simple Fortran 90 module" >&2;}
+ # echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+ # cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-$as_echo "#define bool int" >>confdefs.h
+ fi
fi
+rm -f core conftest.err conftest.$ac_objext
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements namespaces" >&5
-$as_echo_n "checking whether the compiler implements namespaces... " >&6; }
-if ${ac_cv_cxx_namespaces+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+# known flags for reasonably recent versions of various f90 compilers:
+# gfortran -J${dir}
+# xlf -qmoddir=${dir}
+# pgf90 -module ${dir}
+# ifort -module ${dir}
+# nagfor -mdir ${dir}
+# ftn -J ${dir} ## the Cray fortran compiler
+# ftn -em -J${dir} ## the Cray fortran compiler (crayftn, in 2013)
+# For this above case, we must have added -em to FCFLAGS, since other
+# module tests do not always use the module output flag. See
+# FC_MODULE_EXT , where this is determined.
+# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
+# f90 -moddir=${dir} ## the Sun f90 compiler
+# g95 -fmod=${dir}
+#
+# If there are any compilers still out there that are totally brain-dead and
+# don't support an output directory flag, we can write a wrapper script to tell
+# users to use. Alternatively they can use an older version of MPICH.
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+pac_cv_fc_module_outflag=
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
+ rm -f conftestdir/NONEXISTENT conftestdir/*
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-namespace Outer { namespace Inner { int i = 0; }}
-int
-main ()
-{
-using namespace Outer::Inner; return i;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_cxx_namespaces=yes
+ if test -z "${pac_save_FCFLAGS_nesting}" ; then
+ pac_save_FCFLAGS_nesting=0
+ fi
+ eval pac_save_FCFLAGS_${pac_save_FCFLAGS_nesting}='"$FCFLAGS"'
+ pac_save_FCFLAGS_nesting=`expr ${pac_save_FCFLAGS_nesting} + 1`
+
+ FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
+ if ac_fn_fc_try_compile "$LINENO"; then :
+ pac_build_success=yes
else
- ac_cv_cxx_namespaces=no
+ pac_build_success=no
+fi
+rm -f core conftest.err conftest.$ac_objext
+ if test "X$pac_build_success" = Xyes; then :
+ if test -s "conftestdir/${pac_module}"; then :
+ pac_cv_fc_module_outflag="$mod_flag"
+fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ pac_save_FCFLAGS_nesting=`expr ${pac_save_FCFLAGS_nesting} - 1`
+ eval FCFLAGS="\$pac_save_FCFLAGS_${pac_save_FCFLAGS_nesting}"
+ eval pac_save_FCFLAGS_${pac_save_FCFLAGS_nesting}=""
+ if test "X$pac_cv_fc_module_outflag" = X; then :
+ :
+else
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_namespaces" >&5
-$as_echo "$ac_cv_cxx_namespaces" >&6; }
-if test "$ac_cv_cxx_namespaces" = yes; then
+done
+
+# Remove the conftest* after AC_LANG_CONFTEST
+rm -rf conftest.dSYM
+rm -f conftest.$ac_ext
+
+if test "$pac_madedir" = "yes" ; then rm -rf conftestdir ; fi
+{ pac_madedir=; unset pac_madedir;}
+# Remove the conftest* after AC_LANG_CONFTEST
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-$as_echo "#define HAVE_NAMESPACES /**/" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_module_outflag" >&5
+$as_echo "$pac_cv_fc_module_outflag" >&6; }
+FCMODOUTFLAG=$pac_cv_fc_module_outflag
- if test "$ac_cv_cxx_namespaces" != "yes" ; then
- as_fn_error $? "Namespaces are required for the MPI C++ interface" "$LINENO" 5
- fi
- HAVE_CXX_EXCEPTIONS=0
- if test "$ac_cv_cxx_exceptions" = "yes" ; then
- HAVE_CXX_EXCEPTIONS=1
- fi
- # iostream and math are needed for examples/cxx/cxxpi.cxx
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <iostream> available" >&5
-$as_echo_n "checking whether <iostream> available... " >&6; }
-if ${pac_cv_cxx_has_iostream+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <iostream>
+ if test -z "$FCMODOUTFLAG" ; then
+ as_fn_error $? "FCMODOUTFLAG could not be determined but is critical for the current Fortran build system" "$LINENO" 5
+ fi
-int
-main ()
-{
-using namespace std;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- pac_cv_cxx_has_iostream=yes
-else
- pac_cv_cxx_has_iostream=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_has_iostream" >&5
-$as_echo "$pac_cv_cxx_has_iostream" >&6; }
+ if test "$pac_cv_fc_module_case" = "upper" ; then
+ MPIMODNAME=MPI
+ MPICONSTMODNAME=MPI_CONSTANTS
+ MPISIZEOFMODNAME=MPI_SIZEOFS
+ MPIBASEMODNAME=MPI_BASE
+ MPI_F08_NAME=MPI_F08
+ MPI_F08_LINK_CONSTANTS_NAME=MPI_F08_LINK_CONSTANTS
+ MPI_F08_CALLBACKS_NAME=MPI_F08_CALLBACKS
+ MPI_F08_TYPES_NAME=MPI_F08_TYPES
+ MPI_F08_COMPILE_CONSTANTS_NAME=MPI_F08_COMPILE_CONSTANTS
+ PMPI_F08_NAME=PMPI_F08
+ MPI_C_INTERFACE_NAME=MPI_C_INTERFACE
+ MPI_C_INTERFACE_NOBUF_NAME=MPI_C_INTERFACE_NOBUF
+ MPI_C_INTERFACE_GLUE_NAME=MPI_C_INTERFACE_GLUE
+ MPI_C_INTERFACE_TYPES_NAME=MPI_C_INTERFACE_TYPES
+ MPI_C_INTERFACE_CDESC_NAME=MPI_C_INTERFACE_CDESC
+ else
+ MPIMODNAME=mpi
+ MPICONSTMODNAME=mpi_constants
+ MPISIZEOFMODNAME=mpi_sizeofs
+ MPIBASEMODNAME=mpi_base
+ MPI_F08_NAME=mpi_f08
+ MPI_F08_LINK_CONSTANTS_NAME=mpi_f08_link_constants
+ MPI_F08_CALLBACKS_NAME=mpi_f08_callbacks
+ MPI_F08_TYPES_NAME=mpi_f08_types
+ MPI_F08_COMPILE_CONSTANTS_NAME=mpi_f08_compile_constants
+ PMPI_F08_NAME=pmpi_f08
+ MPI_C_INTERFACE_NAME=mpi_c_interface
+ MPI_C_INTERFACE_NOBUF_NAME=mpi_c_interface_nobuf
+ MPI_C_INTERFACE_GLUE_NAME=mpi_c_interface_glue
+ MPI_C_INTERFACE_TYPES_NAME=mpi_c_interface_types
+ MPI_C_INTERFACE_CDESC_NAME=mpi_c_interface_cdesc
+ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements the namespace std" >&5
-$as_echo_n "checking whether the compiler implements the namespace std... " >&6; }
-if ${ac_cv_cxx_namespace_std+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_cxx_namespace_std=no
-if test "$ac_cv_cxx_namespaces" = yes ; then
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <iostream>
-using namespace std;
-int
-main ()
-{
-cout << "message\n";
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_cxx_namespace_std=yes
-else
- ac_cv_cxx_namespace_std=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_namespace_std" >&5
-$as_echo "$ac_cv_cxx_namespace_std" >&6; }
-if test "$ac_cv_cxx_namespace_std" = yes; then
-$as_echo "#define HAVE_NAMESPACE_STD /**/" >>confdefs.h
-fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <math> available" >&5
-$as_echo_n "checking whether <math> available... " >&6; }
-if ${pac_cv_cxx_has_math+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math>
-int
-main ()
-{
-using namespace std;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- pac_cv_cxx_has_math=yes
-else
- pac_cv_cxx_has_math=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_has_math" >&5
-$as_echo "$pac_cv_cxx_has_math" >&6; }
- # GNU changed the calling conventions between minor releases (!!!)
- # This is too hard to detect, but we should be able to detect
- # the version mismatch. By default, we set the GNU version to 0.
- # In a cross-compiling environment, these can be set with environment
- # variables, either directly or through the standard "CROSS" variable.
- if test -z "$GNUCXX_VERSION" ; then
- if test -n "$CROSS_GNUCXX_VERSION" ; then
- GNUCXX_VERSION=$CROSS_GNUCXX_VERSION
- else
- GNUCXX_VERSION=0
- fi
- fi
- if test -z "$GNUCXX_MINORVERSION" ; then
- if test -n "$CROSS_GNUCXX_MINORVERSION" ; then
- GNUCXX_MINORVERSION=$CROSS_GNUCXX_MINORVERSION
- else
- GNUCXX_MINORVERSION=0
- fi
- fi
- if test "$cross_compiling" = "no" -a "$ac_compiler_gnu" = "yes" -a \
- "$GNUCXX_VERSION" = 0 -a "$GNUCXX_MINORVERSION" = 0 ; then
- ac_vals=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU g++ version" >&5
-$as_echo_n "checking for GNU g++ version... " >&6; }
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int main() {
- int v = -1, m = -1;
- FILE *fp = fopen("conftest.out","w");
-#ifdef __GNUC_MINOR__
- m = __GNUC_MINOR__;
-#endif
-#ifdef __GNUC__
- v = __GNUC__;
-#endif
- fprintf( fp, "v=%d, m=%d\n", v, m );
- fclose( fp );
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_run "$LINENO"; then :
- ac_vals=`cat conftest.out`
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
- if test -n "$ac_vals" ; then
- v=`echo "$ac_vals" | sed -e 's/v=\(.*\),.*/\1/'`
- m=`echo "$ac_vals" | sed -e 's/.*m=\(.*\)/\1/'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $v . $m" >&5
-$as_echo "$v . $m" >&6; }
- GNUCXX_VERSION=$v
- GNUCXX_MINORVERSION=$m
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-$as_echo "unknown" >&6; }
- fi
- fi
+ # Assume that all Fortran 90 compilers accept -I for include directories
+ FCINC=-I
- bindings="$bindings cxx"
+ FCINCFLAG=-I
-$as_echo "#define HAVE_CXX_BINDING 1" >>confdefs.h
- INCLUDE_MPICXX_H='#include "mpicxx.h"'
+ # Check if $MPI_DEFAULT_FCOPTS is valid with $F90
+ if test -n "$MPI_DEFAULT_FCOPTS" ; then
+ if test "$enable_check_compiler_flags" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 90 compiler accepts option $MPI_DEFAULT_FCOPTS" >&5
+$as_echo_n "checking whether Fortran 90 compiler accepts option $MPI_DEFAULT_FCOPTS... " >&6; }
+pac_opt="$MPI_DEFAULT_FCOPTS"
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- # In order to support the Fortran datatypes within C++,
- #
- # FORTRAN_BINDING always has a CPP-time value of either 0 or 1,
- # so that it may be used in #if statements without adding to
- # the CPP name space
+FCFLAGS_orig="$FCFLAGS"
+FCFLAGS_opt="$pac_opt $FCFLAGS"
+pac_result="unknown"
+cat > conftest.$ac_ext <<_ACEOF
+ program main
- # Special C++ datatypes. Set to DATATYPE NULL first; we'll
- # replace the ones that we have later, after we have determined
- # the C datatypes
- MPIR_CXX_BOOL=0x0c000000
- MPIR_CXX_COMPLEX=0x0c000000
- MPIR_CXX_DOUBLE_COMPLEX=0x0c000000
- MPIR_CXX_LONG_DOUBLE_COMPLEX=0x0c000000
+ end
+_ACEOF
+FCFLAGS="$FCFLAGS_orig"
+rm -f pac_test1.log
+# START of PUSHVAL
+if ${pac_stk_ac_link_level+:} false; then :
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
- # determine rpath and other shared library flags for CXX
- cxx_shlib_conf=src/env/cxx_shlib.conf
+else
+ pac_stk_ac_link_level=0
+fi
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-# It appears that the libtool dynamic linking strategy on Darwin is this:
-# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
-# 2. Don't do anything special when linking programs, since it seems that the
-# darwin dynamic linker will always use the "install_name" field from the lib
-# that was found at program link-time. (CONFIRMED) This is in opposition to
-# the way that Linux does it, where specifying a "-rpath" argument at program
-# link-time is important.
-#
-# There is an alternative darwin strategy for versions
-# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
-# (goodell@ 2011-06-17)
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of CXX" >&5
-$as_echo_n "checking for shared library (esp. rpath) characteristics of CXX... " >&6; }
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-# unfortunately, config.rpath expects the compiler in question is always CC and
-# uses several other environment variables as input
- if test -z "${pac_save_CC_nesting}" ; then
- pac_save_CC_nesting=0
- fi
- eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
+# END of PUSHVAL
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
+if ac_fn_fc_try_link "$LINENO"; then :
- if test -z "${pac_save_GCC_nesting}" ; then
- pac_save_GCC_nesting=0
- fi
- eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
+ FCFLAGS="$FCFLAGS_opt"
+ rm -f pac_test2.log
- if test -z "${pac_save_LD_nesting}" ; then
- pac_save_LD_nesting=0
- fi
- eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
-# these two don't currently get overridden, but we push/pop them for safety in
-# case they do in the future
+# START of PUSHVAL
- if test -z "${pac_save_LDFLAGS_nesting}" ; then
- pac_save_LDFLAGS_nesting=0
- fi
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
+if ${pac_stk_ac_link_level+:} false; then :
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
- if test -z "${pac_save_with_gnu_ld_nesting}" ; then
- pac_save_with_gnu_ld_nesting=0
- fi
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
+else
+ pac_stk_ac_link_level=0
-# set the temporary override values (if any)
-CC="$CXX"
- GCC="$GXX"
- LD="$LD_CXX"
+fi
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
-# ensure the values are available to the script
-export CC
-export GCC
-export LDFLAGS
-export LD
-export with_gnu_ld
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-if $ac_aux_dir/config.rpath "$host" > $cxx_shlib_conf; then :
- :
-else
- as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
fi
-C_LINKPATH_SHL=""
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-rm -f conftest.out
+# END of PUSHVAL
-# restore the old values
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
+if ac_fn_fc_try_link "$LINENO"; then :
- pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
- eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
- eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
- pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
- eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
- eval pac_save_LD_${pac_save_LD_nesting}=""
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
+if
+{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
+ (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
- pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
- eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
- eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
+ pac_result=yes
- pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
- eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
- eval pac_save_GCC_${pac_save_GCC_nesting}=""
-
- pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
- eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
- eval pac_save_CC_${pac_save_CC_nesting}=""
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $cxx_shlib_conf)" >&5
-$as_echo "done (results in $cxx_shlib_conf)" >&6; }
-
-
-fi
-
-if test "$enable_cxx" = yes; then
- # Check if $MPI_DEFAULT_CXXOPTS is valid with $CXX
- if test -n "$MPI_DEFAULT_CXXOPTS" ; then
- if test "$enable_check_compiler_flags" = "yes" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts option $MPI_DEFAULT_CXXOPTS" >&5
-$as_echo_n "checking whether C++ compiler accepts option $MPI_DEFAULT_CXXOPTS... " >&6; }
-pac_opt="$MPI_DEFAULT_CXXOPTS"
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-CXXFLAGS_orig="$CXXFLAGS"
-CXXFLAGS_opt="$pac_opt $CXXFLAGS"
-pac_result="unknown"
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-CXXFLAGS="$CXXFLAGS_orig"
-rm -f pac_test1.log
-
-
-# START of PUSHVAL
-
-if ${pac_stk_ac_link_level+:} false; then :
-
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
-
-else
-
- pac_stk_ac_link_level=0
-
-fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
-
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-
-fi
-
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-
-
-# END of PUSHVAL
-
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
-if ac_fn_cxx_try_link "$LINENO"; then :
-
-
- CXXFLAGS="$CXXFLAGS_opt"
- rm -f pac_test2.log
-
-
-# START of PUSHVAL
-
-if ${pac_stk_ac_link_level+:} false; then :
-
- as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
-
-else
-
- pac_stk_ac_link_level=0
-
-fi
-eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
-if test "x$pac_stk_ac_link_level" = x0; then :
-
- eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-
-fi
-
- eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-
-
-# END of PUSHVAL
-
-ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
-if ac_fn_cxx_try_link "$LINENO"; then :
-
-
-
-pac_TESTLOG="pac_test.log"
-rm -f $pac_TESTLOG
-
-if
-{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
- (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
-
-
- pac_result=yes
-
-
-else
+else
$as_echo "$as_me: program exited with status $ac_status" >&5
@@ -35222,12 +35267,12 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
$as_echo "$pac_result" >&6; }
rm -f conftest.$ac_ext
-
+#
if test "$pac_result" = "yes" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt" >&5
$as_echo_n "checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt... " >&6; }
pac_result=unknown
- CXXFLAGS="$CXXFLAGS_orig"
+ FCFLAGS="$FCFLAGS_orig"
rm -f pac_test3.log
@@ -35255,16 +35300,15 @@ fi
# END of PUSHVAL
ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> pac_test3.log 2>\&1|g'`"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+cat > conftest.$ac_ext <<_ACEOF
- int foo(void);
- int foo(void){return 0;}
+ subroutine try()
+ end
_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_fc_try_compile "$LINENO"; then :
@@ -35276,7 +35320,7 @@ if ac_fn_cxx_try_compile "$LINENO"; then :
saved_LIBS="$LIBS"
LIBS="pac_conftest.$OBJEXT $LIBS"
- CXXFLAGS="$CXXFLAGS_opt"
+ FCFLAGS="$FCFLAGS_opt"
rm -f pac_test4.log
@@ -35304,18 +35348,12 @@ fi
# END of PUSHVAL
ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test4.log 2>\&1|g'`"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
+cat > conftest.$ac_ext <<_ACEOF
+ program main
- ;
- return 0;
-}
+ end
_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
+if ac_fn_fc_try_link "$LINENO"; then :
@@ -35433,10533 +35471,8846 @@ $as_echo "$pac_result" >&6; }
fi
rm -f pac_test1.log pac_test2.log
-CXXFLAGS="$CXXFLAGS_orig"
+FCFLAGS="$FCFLAGS_orig"
if test "$pac_result" = "yes" ; then
- CXXFLAGS="$CXXFLAGS $MPI_DEFAULT_CXXOPTS"
+ FCFLAGS="$FCFLAGS $MPI_DEFAULT_FCOPTS"
else
:
fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
else
- CXXFLAGS="$CXXFLAGS $MPI_DEFAULT_CXXOPTS"
+ FCFLAGS="$FCFLAGS $MPI_DEFAULT_FCOPTS"
fi
fi
-fi
+ # Most systems allow the Fortran compiler to process .F and .F90 files
+ # using the C preprocessor. However, some systems either do not
+ # allow this or have serious bugs (OSF Fortran compilers have a bug
+ # that generates an error message from cpp). The following test
+ # checks to see if .F works, and if not, whether "cpp -P -C" can be used
-# ----------------------------------------------------------------------------
-# End of the bindings support
-# ----------------------------------------------------------------------------
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran 90 compiler processes .F90 files with C preprocessor" >&5
+$as_echo_n "checking whether Fortran 90 compiler processes .F90 files with C preprocessor... " >&6; }
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+saved_fc_ext=${ac_ext}
+ac_ext="F90"
+saved_FCFLAGS="$FCFLAGS"
+FCFLAGS="$FCFLAGS $CPPFLAGS"
+cat > conftest.$ac_ext <<_ACEOF
-#
-# ----------------------------------------------------------------------------
-# Done with the basic argument processing and decisions about which
-# subsystems to build
-# ----------------------------------------------------------------------------
-# Look for perl. Perl is used *only* in the tests of the commands such as
-# mpiexec, mpicc, etc, in test/commands, and in some of the utility
-# programs for processing log files . If perl is not found,
-# MPICH may still be built and used.
-# We need the full path to perl since we'll use it as the interpreter for
-# a shell script.
-# Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PERL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PERL in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
+ program main
+#define ASIZE 10
+ integer a(ASIZE)
+ end
- ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-if test -n "$PERL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
-# Look for ar. If we fail, abort
-for ac_prog in ar
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
+ pac_cv_fc_accepts_F90=yes
+ FCCPP=""
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+
+ pac_cv_fc_accepts_F90=no
+ FCCPP="false"
+
fi
+rm -f core conftest.err conftest.$ac_objext
+# Restore Fortran's ac_ext but not FCFLAGS
+ac_ext="$saved_fc_ext"
+if test "$pac_cv_fc_accepts_F90" != "yes" ; then
+ pac_cpp_fc="$ac_cpp -C -P conftest.F90 > conftest.$ac_ext"
- test -n "$AR" && break
-done
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
-if test -z "$AR" ; then
- as_fn_error $? "The program ar is required for building MPICH. Make sure that your path includes ar" "$LINENO" 5
-fi
+if
+{ $as_echo "$as_me:$LINENO: $pac_cpp_fc > $pac_TESTLOG" >&5
+ (eval $pac_cpp_fc > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
-# FIXME: this is probably unnecessary now that we only do one "ar" at the end
-# (via libtool). If anything, it's likely to cause problems instead.
-# AR_FLAGS provides a way to potentially improve build performance on Mac OSX
-AR_FLAGS=cr
-# this logic is lame, should really write a real test at some point
-case $host in #(
- # Barry proposes AR_FLAGS="Scq" in trac#754, but that won't work correctly for re-builds
- *-*-darwin*) :
- AR_FLAGS=Scr
- ;; #(
- *) :
- ;;
-esac
- # causes AC_SUBST too
-# Note that we set RANLIB to true if we don't find it (some systems neither
-# need it nor provide it)
-for ac_prog in ranlib
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
+
+ if test -s conftest.${ac_ext} ; then
+ if ac_fn_fc_try_compile "$LINENO"; then :
+
+ pac_cv_fc_accepts_F90="no, use cpp"
+ FCCPP="$CPP -C -P"
fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+rm -f core conftest.err conftest.$ac_objext
+ rm -f conftest.${ac_ext}
+ fi
+
+
+
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+ $as_echo "$as_me: program exited with status $ac_status" >&5
- test -n "$RANLIB" && break
-done
-test -n "$RANLIB" || RANLIB="true"
+ (exit $ac_status)
+ $as_echo "*** $pac_cpp_fc :" >&5
+ cat $pac_TESTLOG >&5
-# Check for the killall program; this can be used in some of the tests
-# in test/commands
-for ac_prog in killall
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_KILLALL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$KILLALL"; then
- ac_cv_prog_KILLALL="$KILLALL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_KILLALL="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-fi
-fi
-KILLALL=$ac_cv_prog_KILLALL
-if test -n "$KILLALL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KILLALL" >&5
-$as_echo "$KILLALL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
- test -n "$KILLALL" && break
-done
-test -n "$KILLALL" || KILLALL="true"
+fi
+
+rm -f $pac_TESTLOG
-# Does xargs need the -r option to handle the case where the input
-# is empty (gnu utils do, Mac OSX does not accept -r)
-xargs_out=`echo "" | xargs ls | wc -l | sed -e 's/ //g'`
-if test "$xargs_out" != "0" ; then
- XARGS_NODATA_OPT=-r
fi
+FCFLAGS="$saved_FCFLAGS"
+rm -f conftest.F90
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fc_accepts_F90" >&5
+$as_echo "$pac_cv_fc_accepts_F90" >&6; }
-if test -z "$INSTALL" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: No install program available" >&5
-$as_echo "No install program available" >&6; }
-else
- # first make any "confdb/install-sh -c" into an absolute path
- # this is a hack, but it's still much cleaner than anything else I could
- # come up with (see tt#1007) [goodell@]
- case "$INSTALL" in #(
- /*) :
- : ;; #(
- *install-sh*) :
- INSTALL="$master_top_srcdir/$INSTALL" ;; #(
- *) :
- ;;
-esac
+ # Check whether additional libraries are needed when linking with C
- # Check that this install really works
- rm -f conftest
- echo "Test file" > conftest
- if test ! -d .conftest ; then mkdir .conftest ; fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether install works" >&5
-$as_echo_n "checking whether install works... " >&6; }
- if $INSTALL conftest .conftest >/dev/null 2>&1 ; then
- installOk=yes
- else
- installOk=no
- fi
- rm -rf .conftest conftest
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $installOk" >&5
-$as_echo "$installOk" >&6; }
- if test "$installOk" = no ; then
- if test -n "$ac_install_sh" ; then
- INSTALL=$ac_install_sh
- else
- as_fn_error $? "Unable to find working install" "$LINENO" 5
- fi
- fi
-fi
-#
-# On Mac OS/X, install breaks libraries unless used with the -p switch
-# We also need mkdir -p.
+# To simply the code in the cache_check macro, chose the routine name
+# first, in case we need it
+confname=conf1_
+case "$pac_cv_prog_f77_name_mangle" in
+ "lower underscore") confname=conf1_ ;;
+ "upper stdcall") confname=CONF1 ;;
+ upper) confname=CONF1 ;;
+ "lower doubleunderscore") confname=conf1_ ;;
+ lower) confname=conf1 ;;
+ "mixed underscore") confname=conf1_ ;;
+ mixed) confname=conf1 ;;
+esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkdir -p works" >&5
-$as_echo_n "checking whether mkdir -p works... " >&6; }
-if ${pac_cv_mkdir_p+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what libraries are needed to link Fortran90 programs with C routines that use stdio" >&5
+$as_echo_n "checking what libraries are needed to link Fortran90 programs with C routines that use stdio... " >&6; }
+if ${pac_cv_prog_fc_and_c_stdio_libs+:} false; then :
$as_echo_n "(cached) " >&6
else
-pac_cv_mkdir_p=no
-rm -rf .tmp
-if mkdir -p .tmp/.foo 1>/dev/null 2>&1 ; then
- if test -d .tmp/.foo ; then
- pac_cv_mkdir_p=yes
- fi
-fi
-rm -rf .tmp
+pac_cv_prog_fc_and_c_stdio_libs=unknown
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_mkdir_p" >&5
-$as_echo "$pac_cv_mkdir_p" >&6; }
-if test "$pac_cv_mkdir_p" = "yes" ; then
- MKDIR_P="mkdir -p"
- export MKDIR_P
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: mkdir -p does not work; the install step may fail" >&5
-$as_echo "$as_me: WARNING: mkdir -p does not work; the install step may fail" >&2;}
-fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-true
-if test "X$MAKE" = "X" ; then
- for ac_prog in make gnumake nmake pmake smake
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MAKE+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MAKE"; then
- ac_cv_prog_MAKE="$MAKE" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MAKE="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+int $confname( int a )
+{ printf( "The answer is %d\n", a ); fflush(stdout); return 0; }
-fi
-fi
-MAKE=$ac_cv_prog_MAKE
-if test -n "$MAKE"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5
-$as_echo "$MAKE" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
- test -n "$MAKE" && break
-done
+ pac_compile_ok=yes
-fi
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ # Save LIBS and prepend object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ cat > conftest.$ac_ext <<_ACEOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether clock skew breaks make" >&5
-$as_echo_n "checking whether clock skew breaks make... " >&6; }
-if ${pac_cv_prog_make_found_clock_skew+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ program main
+call conf1(0)
+ end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+
+ pac_cv_prog_fc_and_c_stdio_libs=none
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest*
-cat > conftest <<EOF
-ALL:
- @-echo "success"
-EOF
-$MAKE -f conftest > conftest.out 2>&1
-if grep -i skew conftest >/dev/null 2>&1 ; then
- pac_cv_prog_make_found_clock_skew=yes
else
- pac_cv_prog_make_found_clock_skew=no
-fi
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest*
+
+ # Try again with -lSystemStubs
+ LIBS="$LIBS -lSystemStubs"
+ if ac_fn_fc_try_link "$LINENO"; then :
+
+ pac_cv_prog_fc_and_c_stdio_libs="-lSystemStubs"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_found_clock_skew" >&5
-$as_echo "$pac_cv_prog_make_found_clock_skew" >&6; }
-if test "$pac_cv_prog_make_found_clock_skew" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Clock skew found by make. The configure and build may fail.
-Consider building in a local instead of NFS filesystem." >&5
-$as_echo "$as_me: WARNING: Clock skew found by make. The configure and build may fail.
-Consider building in a local instead of NFS filesystem." >&2;}
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$saved_LIBS"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ rm -f pac_conftest.$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make supports include" >&5
-$as_echo_n "checking whether make supports include... " >&6; }
-if ${pac_cv_prog_make_include+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test "$pac_cv_prog_fc_and_c_stdio_libs" != none -a \
+ "$pac_cv_prog_fc_and_c_stdio_libs" != unknown ; then
+ FC_OTHER_LIBS="$FC_OTHER_LIBS $pac_cv_prog_fc_and_c_stdio_libs"
+fi
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest
-cat > conftest <<.
-ALL:
- @echo "success"
-.
-cat > conftest1 <<.
-include conftest
-.
-pac_str=`$MAKE -f conftest1 2>&1`
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest conftest1
-if test "$pac_str" != "success" ; then
- pac_cv_prog_make_include="no"
-else
- pac_cv_prog_make_include="yes"
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_fc_and_c_stdio_libs" >&5
+$as_echo "$pac_cv_prog_fc_and_c_stdio_libs" >&6; }
+
+ # ------------------------------------------------
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_include" >&5
-$as_echo "$pac_cv_prog_make_include" >&6; }
-if test "$pac_cv_prog_make_include" = "no" ; then
- :
-else
- :
+
+if test "X$modincdir" = "X" ; then
+ modincdir=$includedir
fi
+export modincdir
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make allows comments in actions" >&5
-$as_echo_n "checking whether make allows comments in actions... " >&6; }
-if ${pac_cv_prog_make_allows_comments+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether TRUE has been defined" >&5
+$as_echo_n "checking whether TRUE has been defined... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest
-cat > conftest <<.
-SHELL=/bin/sh
-ALL:
- @# This is a valid comment!
- @echo "success"
-.
-pac_str=`$MAKE -f conftest 2>&1`
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest
-if test "$pac_str" != "success" ; then
- pac_cv_prog_make_allows_comments="no"
+int
+main ()
+{
+return TRUE;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ has_true_upper_case=yes
else
- pac_cv_prog_make_allows_comments="yes"
+ has_true_upper_case=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_true_upper_case" >&5
+$as_echo "$has_true_upper_case" >&6; }
+if test "$has_true_upper_case" = "no" ; then
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_allows_comments" >&5
-$as_echo "$pac_cv_prog_make_allows_comments" >&6; }
-if test "$pac_cv_prog_make_allows_comments" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your make does not allow comments in target code.
-Using this make may cause problems when building programs.
-You should consider using gnumake instead." >&5
-$as_echo "$as_me: WARNING: Your make does not allow comments in target code.
-Using this make may cause problems when building programs.
-You should consider using gnumake instead." >&2;}
+$as_echo "#define TRUE 1" >>confdefs.h
+
+
+$as_echo "#define FALSE 0" >>confdefs.h
fi
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+# ----------------------------------------------------------------------------
+# We previously allowed "default" as a valid value for $enable_cxx. Now we
+# assume its available by default and error out if it doesn't work (just like
+# F77 & FC). The user must pass "--disable-cxx" in order to successfully
+# complete configure in this case.
+if test "$enable_cxx" = "default" ; then
+ as_fn_error $? "aborting because \"--enable-cxx=default\" is no longer a supported value" "$LINENO" 5
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for virtual path format" >&5
-$as_echo_n "checking for virtual path format... " >&6; }
-if ${pac_cv_prog_make_vpath+:} false; then :
+if test "$enable_cxx" = "yes" ; then
+ # Another bug in autoconf. The checks for the C++ compiler do not
+ # ensure that you can link a program that is built with the C++
+ # compiler. We've seen this error with gcc and icc, particularly
+ # when those compilers accept C++ language elements but are unable
+ # to link programs that are really C++. For that reason,
+ # we've added a test to see if the C++ compiler can produce
+ # an executable.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler $CXX can build an executable" >&5
+$as_echo_n "checking whether the C++ compiler $CXX can build an executable... " >&6; }
+if ${pac_cv_cxx_builds_exe+:} false; then :
$as_echo_n "(cached) " >&6
else
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -rf conftest*
-mkdir conftestdir
-cat >conftestdir/a.c <<EOF
-A sample file
-EOF
-cat > conftest <<EOF
-all: a.o
-VPATH=.:conftestdir
-.c.o:
- @echo \$<
-EOF
-ac_out=`$MAKE -f conftest 2>&1 | grep 'conftestdir/a.c'`
-if test -n "$ac_out" ; then
- pac_cv_prog_make_vpath="VPATH"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+class mytest {
+ int a;
+public:
+ mytest(void) : a(1) {}
+ ~mytest(void) {}
+};
+int
+main ()
+{
+mytest a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ pac_cv_cxx_builds_exe=yes
else
- rm -f conftest
- cat > conftest <<EOF
-all: a.o
-.PATH: . conftestdir
-.c.o:
- @echo \$<
-EOF
- ac_out=`$MAKE -f conftest 2>&1 | grep 'conftestdir/a.c'`
- if test -n "$ac_out" ; then
- pac_cv_prog_make_vpath=".PATH"
- else
- pac_cv_prog_make_vpath="neither VPATH nor .PATH works"
- fi
+ pac_cv_cxx_builds_exe=no
fi
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -rf conftest*
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_vpath" >&5
-$as_echo "$pac_cv_prog_make_vpath" >&6; }
-if test "$pac_cv_prog_make_vpath" = "VPATH" ; then
- VPATH='VPATH=.:${srcdir}'
-elif test "$pac_cv_prog_make_vpath" = ".PATH" ; then
- VPATH='.PATH: . ${srcdir}'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_builds_exe" >&5
+$as_echo "$pac_cv_cxx_builds_exe" >&6; }
+ if test "$pac_cv_cxx_builds_exe" != yes ; then
+ as_fn_error $? "Aborting because C++ compiler does not work. If you do not need a C++ compiler, configure with --disable-cxx" "$LINENO" 5
+ fi
+ # Recent failures have come when a standard header is loaded
+ # The Intel icpc 10.x compiler fails with <string> if gcc 4.2 is installed.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler works with string" >&5
+$as_echo_n "checking whether C++ compiler works with string... " >&6; }
+if ${pac_cv_cxx_compiles_string+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string>
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ pac_cv_cxx_compiles_string=yes
+else
+ pac_cv_cxx_compiles_string=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_compiles_string" >&5
+$as_echo "$pac_cv_cxx_compiles_string" >&6; }
+ if test "$pac_cv_cxx_compiles_string" != yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The C++ compiler $CXX cannot compile a program containing the <string> header - this may indicate a problem with the C++ installation. Consider configuing with --disable-cxx" >&5
+$as_echo "$as_me: WARNING: The C++ compiler $CXX cannot compile a program containing the <string> header - this may indicate a problem with the C++ installation. Consider configuing with --disable-cxx" >&2;}
+ fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make sets CFLAGS" >&5
-$as_echo_n "checking whether make sets CFLAGS... " >&6; }
-if ${pac_cv_prog_make_set_cflags+:} false; then :
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports exceptions" >&5
+$as_echo_n "checking whether the compiler supports exceptions... " >&6; }
+if ${ac_cv_cxx_exceptions+:} false; then :
$as_echo_n "(cached) " >&6
else
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest
-cat > conftest <<EOF
-SHELL=/bin/sh
-ALL:
- @echo X\${CFLAGS}X
-EOF
-pac_str=`$MAKE -f conftest 2>&1`
-# This is needed for Mac OSX 10.5
-rm -rf conftest.dSYM
-rm -f conftest
-if test "$pac_str" = "XX" ; then
- pac_cv_prog_make_set_cflags="no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+try { throw 1; } catch (int i) { return i; }
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_cxx_exceptions=yes
else
- pac_cv_prog_make_set_cflags="yes"
+ ac_cv_cxx_exceptions=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_set_cflags" >&5
-$as_echo "$pac_cv_prog_make_set_cflags" >&6; }
-if test "$pac_cv_prog_make_set_cflags" = "no" ; then
- :
-else
- SET_CFLAGS='CFLAGS='
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_exceptions" >&5
+$as_echo "$ac_cv_cxx_exceptions" >&6; }
+if test "$ac_cv_cxx_exceptions" = yes; then
+
+$as_echo "#define HAVE_CXX_EXCEPTIONS /**/" >>confdefs.h
+
fi
-if test "$pac_cv_prog_make_echos_dir" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler recognizes bool as a built-in type" >&5
+$as_echo_n "checking whether the compiler recognizes bool as a built-in type... " >&6; }
+if ${ac_cv_cxx_bool+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int f(int x){return 1;}
+int f(char x){return 1;}
+int f(bool x){return 1;}
+
+int
+main ()
+{
+bool b = true; return f(b);
+ ;
+ return 0;
+}
_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_cxx_bool=yes
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
+ ac_cv_cxx_bool=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
-else
- SET_MAKE="MAKE=${MAKE-make}"
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_bool" >&5
+$as_echo "$ac_cv_cxx_bool" >&6; }
+if test "$ac_cv_cxx_bool" != yes; then
+$as_echo "#define bool int" >>confdefs.h
-#
-# Check for bash to allow more robust shell scripts
-# Extract the first word of "bash", so it can be a program name with args.
-set dummy bash; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_BASH_SHELL+:} false; then :
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements namespaces" >&5
+$as_echo_n "checking whether the compiler implements namespaces... " >&6; }
+if ${ac_cv_cxx_namespaces+:} false; then :
$as_echo_n "(cached) " >&6
else
- case $BASH_SHELL in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_BASH_SHELL="$BASH_SHELL" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_BASH_SHELL="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-BASH_SHELL=$ac_cv_path_BASH_SHELL
-if test -n "$BASH_SHELL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH_SHELL" >&5
-$as_echo "$BASH_SHELL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-#
-# Confirm that bash has working arrays. We can use this to
-# build more robust versions of the scripts (particularly the
-# compliation scripts) by taking advantage of the array features in
-# bash.
-bashWorks=no
-if test -x "$BASH_SHELL" ; then
- cat >>conftest <<EOF
-#! $BASH_SHELL
-A[0]="b"
-A[1]="c"
-rc=1
-if test \${A[1]} != "c" ; then rc=2 ; else rc=0 ; fi
-exit \$rc
-EOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $BASH_SHELL supports arrays" >&5
-$as_echo_n "checking whether $BASH_SHELL supports arrays... " >&6; }
- chmod +x conftest
- if ./conftest 2>&1 >/dev/null ; then
- bashWorks=yes
- else
- bashWorks=no
- fi
- rm -f conftest*
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bashWorks" >&5
-$as_echo "$bashWorks" >&6; }
-fi
- if test "x$bashWorks" = xyes; then
- BUILD_BASH_SCRIPTS_TRUE=
- BUILD_BASH_SCRIPTS_FALSE='#'
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+namespace Outer { namespace Inner { int i = 0; }}
+int
+main ()
+{
+using namespace Outer::Inner; return i;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_cxx_namespaces=yes
else
- BUILD_BASH_SCRIPTS_TRUE='#'
- BUILD_BASH_SCRIPTS_FALSE=
-fi
-
-
-# ----------------------------------------------------------------------------
-# At this point, we've finally settled on the value of PMPILIBNAME. We
-# can now set NEEDSPLIB.
-if test "$NEEDSPLIB" = yes -a "$PMPILIBNAME" = "$MPILIBNAME" ; then
- NEEDSPLIB=no
+ ac_cv_cxx_namespaces=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-# We are cheating a bit here and reaching inside of the libtool macros to
-# extract the correct shared library extension. It would be nice if this
-# were publicly available in at least the same way that $libext is.
-eval SHLIB_EXT='"'$shrext_cmds'"'
-export SHLIB_EXT
-
-
-# ----------------------------------------------------------------------------
-#
-# Add the steps for debugger support
-BUILD_TVDLL=no
-if test "$enable_debuginfo" = "yes" ; then
- # We can build the Totalview interface DLL only if we know how to build
- # shared libraries.
-
- # FIXME is this really the right test?
- # No. Before MPICH 1.5, there was the capability to build the debugger
- # libraries without forcing the build of shared libraries for everything.
- # There may be some way to restore this capability, but until then, we
- # at least cause the configure to cleanly fail with a clear error message
- if test "X$enable_shared" = "Xyes" ; then
- BUILD_TVDLL=yes
- else
- as_fn_error $? "Building with --enable-debuginfo now requires building with shared library support. Add --enable-shared and reconfigure" "$LINENO" 5
- fi
-
- # One more nasty problem. Totalview relies on debugger symbols
- # being present in the executable. Some experimental versions of
- # gcc (3.2 20020329 for ia64) do *not* include the object symbols
- # when debugging. For HPUX, the necessary linking options are
- # +noobjdebug
- # for C, Fortran, and C++. We don't have a good test for this yet,
- # so we add a warning
- if test "$ac_cv_c_compiler_gnu" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Some versions of gcc do not include debugging information
-within the executable. Totalview requires this information to detect
-an MPICH code. If you have trouble, try linking with the additional
-option
- +noobjdebug
-on all link lines (consider adding it to LDFLAGS)" >&5
-$as_echo "$as_me: WARNING: Some versions of gcc do not include debugging information
-within the executable. Totalview requires this information to detect
-an MPICH code. If you have trouble, try linking with the additional
-option
- +noobjdebug
-on all link lines (consider adding it to LDFLAGS)" >&2;}
- fi
-
- # The debugger library name cannot be set until we know the extension
- # of shared libraries - the name is so on most Unix system, dylib on OS X.
-
-$as_echo "#define HAVE_DEBUGGER_SUPPORT 1" >>confdefs.h
-
- # The debugger support requires a shared library. This is handled
- # below, after we check for compiler support for shared libraries
- # Note: if libdir contains exec_prefix, handle the fact that the
- # default exec_prefix is NONE, which (much later in configure)
- # gets turned into the value of prefix
- ##ENVVAR: MPICH_DEBUGLIBNAME - Set this environment variable to
- ## override the default name of the debugger support library.
- ## The default name is libtvmpich.$SHLIB_EXT (e.g., libtvmpich.so for
- ## most Unix versions, libtvmpich.dylib for Mac OSX).
- ##ENVVAR END:
-
- if test -z "$MPICH_DEBUGLIBNAME" ; then
- DEBUGLIBNAME=libtvmpich$SHLIB_EXT
- else
- # FIXME DJG I don't think this can be supported arbitrarily by the new
- # build system (I'm not sure it was supported correctly by the old
- # system either)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: overriding MPICH_DEBUGLIBNAME is currently untested and probably does not work" >&5
-$as_echo "$as_me: WARNING: overriding MPICH_DEBUGLIBNAME is currently untested and probably does not work" >&2;}
- DEBUGLIBNAME=$MPICH_DEBUGLIBNAME
- fi
- if test "x$exec_prefix" = xNONE ; then
- saveExecPrefix=$exec_prefix
- exec_prefix=$prefix
- eval dlldir=$libdir/$DEBUGLIBNAME
- exec_prefix=$saveExecPrefix
- else
- eval dlldir=$libdir/$DEBUGLIBNAME
- fi
- dlldir='"'$dlldir'"'
-
-cat >>confdefs.h <<_ACEOF
-#define MPICH_INFODLL_LOC $dlldir
-_ACEOF
-
-fi
-# used by automakefiles to conditionally build the DLL
- if test x$BUILD_TVDLL = xyes; then
- BUILD_DEBUGGER_DLL_TRUE=
- BUILD_DEBUGGER_DLL_FALSE='#'
-else
- BUILD_DEBUGGER_DLL_TRUE='#'
- BUILD_DEBUGGER_DLL_FALSE=
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_namespaces" >&5
+$as_echo "$ac_cv_cxx_namespaces" >&6; }
+if test "$ac_cv_cxx_namespaces" = yes; then
+$as_echo "#define HAVE_NAMESPACES /**/" >>confdefs.h
-# ----------------------------------------------------------------------------
-
-nameserv_name=""
-# Get the default nameserver, if no nameserver was selected. A process
-# manager may advertise a nameserver name by setting the variable
-# MPID_PM_NAMESERVER.
-if test "$with_namepublisher" = "default" ; then
- if test -n "$MPID_PM_NAMESERVER" ; then
- with_namepublisher=$MPID_PM_NAMESERVER
- else
- # The default is to use pmi to communicate published names
- with_namepublisher=pmi
- fi
fi
-if test "$with_namepublisher" != no -a "$with_namepublisher" != "none" ; then
- case "$with_namepublisher" in
- none|no) ;;
- # Removed ldap namepublisher hook - we no longer support or distribute
- # the ldap-based name server
- file*)
- # Note that we always build the Makefile for the file version because
- # this name publisher is really too simple to require a
- # separate configure, and we might as well include a basic
- # name publisher with any MPICH distribution
- # We DO need to extract the directory name that is used for writing
- # the files, with the User's home directory as the default
- nameserv_name="file"
- basedir=`echo $with_namepublisher | sed -e 's/file://'`
- if test "$basedir" = "$with_namepublisher" ; then
- # Reset since no directory was set.
- basedir='"."';
+ if test "$ac_cv_cxx_namespaces" != "yes" ; then
+ as_fn_error $? "Namespaces are required for the MPI C++ interface" "$LINENO" 5
fi
+ HAVE_CXX_EXCEPTIONS=0
-cat >>confdefs.h <<_ACEOF
-#define FILE_NAMEPUB_BASEDIR $basedir
-_ACEOF
-
-
-$as_echo "#define USE_FILE_FOR_NAMEPUB 1" >>confdefs.h
-
- ;;
-
- *)
- # Check for a new namepublisher
- dir=$with_namepublisher
- # If we later need args, here is where we can strip them off of the
- # with argument
- if test -d "$use_top_srcdir/src/nameserv/$dir" ; then
- if test -x "$use_top_srcdir/src/nameserv/$dir/configure" ; then
- # Run the configure in this directory if necessary
- subsystems="$subsystems src/nameserv/$dir"
- fi
- nameserv_name=$dir
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown name publisher $with_namepublisher" >&5
-$as_echo "$as_me: WARNING: Unknown name publisher $with_namepublisher" >&2;}
+ if test "$ac_cv_cxx_exceptions" = "yes" ; then
+ HAVE_CXX_EXCEPTIONS=1
fi
- ;;
- esac
-fi
-if test -n "$nameserv_name" ; then
-
-$as_echo "#define HAVE_NAMEPUB_SERVICE 1" >>confdefs.h
-
-fi
-export nameserv_name
- if test "X$nameserv_name" = "Xfile"; then
- BUILD_NAMEPUB_FILE_TRUE=
- BUILD_NAMEPUB_FILE_FALSE='#'
-else
- BUILD_NAMEPUB_FILE_TRUE='#'
- BUILD_NAMEPUB_FILE_FALSE=
-fi
-
- if test "X$nameserv_name" = "Xpmi"; then
- BUILD_NAMEPUB_PMI_TRUE=
- BUILD_NAMEPUB_PMI_FALSE='#'
-else
- BUILD_NAMEPUB_PMI_TRUE='#'
- BUILD_NAMEPUB_PMI_FALSE=
-fi
-
-
-# In case the documentation targets are used, find doctext and attempt to
-# find the source for the doctext LaTeX style files. Use "false" if
-# doctext is not found
-# Extract the first word of "doctext", so it can be a program name with args.
-set dummy doctext; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_DOCTEXT+:} false; then :
+ # iostream and math are needed for examples/cxx/cxxpi.cxx
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <iostream> available" >&5
+$as_echo_n "checking whether <iostream> available... " >&6; }
+if ${pac_cv_cxx_has_iostream+:} false; then :
$as_echo_n "(cached) " >&6
else
- case $DOCTEXT in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_DOCTEXT="$DOCTEXT" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_DOCTEXT="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_DOCTEXT" && ac_cv_path_DOCTEXT="false"
- ;;
-esac
-fi
-DOCTEXT=$ac_cv_path_DOCTEXT
-if test -n "$DOCTEXT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCTEXT" >&5
-$as_echo "$DOCTEXT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-export DOCTEXT
-
-# ----------------------------------------------------------------------------
-# Check for C compiler characteristics
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <iostream>
+
int
main ()
{
-
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this sort of thing. */
- typedef int charset[2];
- const charset cs = { 0, 0 };
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *pcpcc;
- char **ppc;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- pcpcc = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++pcpcc;
- ppc = (char**) pcpcc;
- pcpcc = (char const *const *) ppc;
- { /* SCO 3.2v4 cc rejects this sort of thing. */
- char tx;
- char *t = &tx;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- if (s) return 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; } bx;
- struct s *b = &bx; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- if (!foo) return 0;
- }
- return !cs[0] && !zero.x;
-#endif
-
+using namespace std;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_const=yes
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ pac_cv_cxx_has_iostream=yes
else
- ac_cv_c_const=no
+ pac_cv_cxx_has_iostream=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_has_iostream" >&5
+$as_echo "$pac_cv_cxx_has_iostream" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
-$as_echo_n "checking for working volatile... " >&6; }
-if ${ac_cv_c_volatile+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements the namespace std" >&5
+$as_echo_n "checking whether the compiler implements the namespace std... " >&6; }
+if ${ac_cv_cxx_namespace_std+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_cv_cxx_namespace_std=no
+if test "$ac_cv_cxx_namespaces" = yes ; then
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <iostream>
+using namespace std;
int
main ()
{
-
-volatile int x;
-int * volatile y = (int *) 0;
-return !x && !y;
+cout << "message\n";
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_volatile=yes
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_cxx_namespace_std=yes
else
- ac_cv_c_volatile=no
+ ac_cv_cxx_namespace_std=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5
-$as_echo "$ac_cv_c_volatile" >&6; }
-if test $ac_cv_c_volatile = no; then
-$as_echo "#define volatile /**/" >>confdefs.h
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_namespace_std" >&5
+$as_echo "$ac_cv_cxx_namespace_std" >&6; }
+if test "$ac_cv_cxx_namespace_std" = yes; then
+
+$as_echo "#define HAVE_NAMESPACE_STD /**/" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
-$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
-if ${ac_cv_c_restrict+:} false; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <math> available" >&5
+$as_echo_n "checking whether <math> available... " >&6; }
+if ${pac_cv_cxx_has_math+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_cv_c_restrict=no
- # The order here caters to the fact that C++ does not require restrict.
- for ac_kw in __restrict __restrict__ _Restrict restrict; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-typedef int * int_ptr;
- int foo (int_ptr $ac_kw ip) {
- return ip[0];
- }
+
+#include <math>
+
int
main ()
{
-int s[1];
- int * $ac_kw t = s;
- t[0] = 0;
- return foo(t)
+using namespace std;
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_restrict=$ac_kw
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ pac_cv_cxx_has_math=yes
+else
+ pac_cv_cxx_has_math=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_restrict" != no && break
- done
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
-$as_echo "$ac_cv_c_restrict" >&6; }
-
- case $ac_cv_c_restrict in
- restrict) ;;
- no) $as_echo "#define restrict /**/" >>confdefs.h
- ;;
- *) cat >>confdefs.h <<_ACEOF
-#define restrict $ac_cv_c_restrict
-_ACEOF
- ;;
- esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if ${ac_cv_c_inline+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cxx_has_math" >&5
+$as_echo "$pac_cv_cxx_has_math" >&6; }
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_inline=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_inline" != no && break
-done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
-
-case $ac_cv_c_inline in
- inline | yes) ;;
- *)
- case $ac_cv_c_inline in
- no) ac_val=;;
- *) ac_val=$ac_cv_c_inline;;
- esac
- cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
+ # GNU changed the calling conventions between minor releases (!!!)
+ # This is too hard to detect, but we should be able to detect
+ # the version mismatch. By default, we set the GNU version to 0.
+ # In a cross-compiling environment, these can be set with environment
+ # variables, either directly or through the standard "CROSS" variable.
+ if test -z "$GNUCXX_VERSION" ; then
+ if test -n "$CROSS_GNUCXX_VERSION" ; then
+ GNUCXX_VERSION=$CROSS_GNUCXX_VERSION
+ else
+ GNUCXX_VERSION=0
+ fi
+ fi
+ if test -z "$GNUCXX_MINORVERSION" ; then
+ if test -n "$CROSS_GNUCXX_MINORVERSION" ; then
+ GNUCXX_MINORVERSION=$CROSS_GNUCXX_MINORVERSION
+ else
+ GNUCXX_MINORVERSION=0
+ fi
+ fi
+ if test "$cross_compiling" = "no" -a "$ac_compiler_gnu" = "yes" -a \
+ "$GNUCXX_VERSION" = 0 -a "$GNUCXX_MINORVERSION" = 0 ; then
+ ac_vals=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU g++ version" >&5
+$as_echo_n "checking for GNU g++ version... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int main() {
+ int v = -1, m = -1;
+ FILE *fp = fopen("conftest.out","w");
+#ifdef __GNUC_MINOR__
+ m = __GNUC_MINOR__;
#endif
+#ifdef __GNUC__
+ v = __GNUC__;
+#endif
+ fprintf( fp, "v=%d, m=%d\n", v, m );
+ fclose( fp );
+ return 0;
+}
_ACEOF
- ;;
-esac
+if ac_fn_cxx_try_run "$LINENO"; then :
+ ac_vals=`cat conftest.out`
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+ if test -n "$ac_vals" ; then
+ v=`echo "$ac_vals" | sed -e 's/v=\(.*\),.*/\1/'`
+ m=`echo "$ac_vals" | sed -e 's/.*m=\(.*\)/\1/'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $v . $m" >&5
+$as_echo "$v . $m" >&6; }
+ GNUCXX_VERSION=$v
+ GNUCXX_MINORVERSION=$m
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
+$as_echo "unknown" >&6; }
+ fi
+ fi
+ bindings="$bindings cxx"
-if test "$ac_cv_c_compiler_gnu" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
-$as_echo_n "checking whether __attribute__ allowed... " >&6; }
-if ${pac_cv_gnu_attr_pure+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+$as_echo "#define HAVE_CXX_BINDING 1" >>confdefs.h
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo(int) __attribute__ ((pure));
-int
-main ()
-{
-int a;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_pure=yes
+ INCLUDE_MPICXX_H='#include "mpicxx.h"'
+
+
+ # In order to support the Fortran datatypes within C++,
+ #
+ # FORTRAN_BINDING always has a CPP-time value of either 0 or 1,
+ # so that it may be used in #if statements without adding to
+ # the CPP name space
+
+
+ # Special C++ datatypes. Set to DATATYPE NULL first; we'll
+ # replace the ones that we have later, after we have determined
+ # the C datatypes
+ MPIR_CXX_BOOL=0x0c000000
+ MPIR_CXX_COMPLEX=0x0c000000
+ MPIR_CXX_DOUBLE_COMPLEX=0x0c000000
+ MPIR_CXX_LONG_DOUBLE_COMPLEX=0x0c000000
+
+
+
+
+
+ # determine rpath and other shared library flags for CXX
+ cxx_shlib_conf=src/env/cxx_shlib.conf
+
+
+
+
+# It appears that the libtool dynamic linking strategy on Darwin is this:
+# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
+# 2. Don't do anything special when linking programs, since it seems that the
+# darwin dynamic linker will always use the "install_name" field from the lib
+# that was found at program link-time. (CONFIRMED) This is in opposition to
+# the way that Linux does it, where specifying a "-rpath" argument at program
+# link-time is important.
+#
+# There is an alternative darwin strategy for versions
+# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
+# (goodell@ 2011-06-17)
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library (esp. rpath) characteristics of CXX" >&5
+$as_echo_n "checking for shared library (esp. rpath) characteristics of CXX... " >&6; }
+
+# unfortunately, config.rpath expects the compiler in question is always CC and
+# uses several other environment variables as input
+
+ if test -z "${pac_save_CC_nesting}" ; then
+ pac_save_CC_nesting=0
+ fi
+ eval pac_save_CC_${pac_save_CC_nesting}='"$CC"'
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} + 1`
+
+
+ if test -z "${pac_save_GCC_nesting}" ; then
+ pac_save_GCC_nesting=0
+ fi
+ eval pac_save_GCC_${pac_save_GCC_nesting}='"$GCC"'
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} + 1`
+
+
+ if test -z "${pac_save_LD_nesting}" ; then
+ pac_save_LD_nesting=0
+ fi
+ eval pac_save_LD_${pac_save_LD_nesting}='"$LD"'
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} + 1`
+
+# these two don't currently get overridden, but we push/pop them for safety in
+# case they do in the future
+
+ if test -z "${pac_save_LDFLAGS_nesting}" ; then
+ pac_save_LDFLAGS_nesting=0
+ fi
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}='"$LDFLAGS"'
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} + 1`
+
+
+ if test -z "${pac_save_with_gnu_ld_nesting}" ; then
+ pac_save_with_gnu_ld_nesting=0
+ fi
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}='"$with_gnu_ld"'
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} + 1`
+
+
+# set the temporary override values (if any)
+CC="$CXX"
+ GCC="$GXX"
+ LD="$LD_CXX"
+
+# ensure the values are available to the script
+export CC
+export GCC
+export LDFLAGS
+export LD
+export with_gnu_ld
+
+if $ac_aux_dir/config.rpath "$host" > $cxx_shlib_conf; then :
+ :
else
- pac_cv_gnu_attr_pure=no
+ as_fn_error $? "unable to execute $ac_aux_dir/config.rpath" "$LINENO" 5
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+C_LINKPATH_SHL=""
+
+
+rm -f conftest.out
+
+# restore the old values
+
+ pac_save_with_gnu_ld_nesting=`expr ${pac_save_with_gnu_ld_nesting} - 1`
+ eval with_gnu_ld="\$pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}"
+ eval pac_save_with_gnu_ld_${pac_save_with_gnu_ld_nesting}=""
+
+
+ pac_save_LD_nesting=`expr ${pac_save_LD_nesting} - 1`
+ eval LD="\$pac_save_LD_${pac_save_LD_nesting}"
+ eval pac_save_LD_${pac_save_LD_nesting}=""
+
+
+ pac_save_LDFLAGS_nesting=`expr ${pac_save_LDFLAGS_nesting} - 1`
+ eval LDFLAGS="\$pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}"
+ eval pac_save_LDFLAGS_${pac_save_LDFLAGS_nesting}=""
+
+
+ pac_save_GCC_nesting=`expr ${pac_save_GCC_nesting} - 1`
+ eval GCC="\$pac_save_GCC_${pac_save_GCC_nesting}"
+ eval pac_save_GCC_${pac_save_GCC_nesting}=""
+
+
+ pac_save_CC_nesting=`expr ${pac_save_CC_nesting} - 1`
+ eval CC="\$pac_save_CC_${pac_save_CC_nesting}"
+ eval pac_save_CC_${pac_save_CC_nesting}=""
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done (results in $cxx_shlib_conf)" >&5
+$as_echo "done (results in $cxx_shlib_conf)" >&6; }
+
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
-$as_echo "$pac_cv_gnu_attr_pure" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
-$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
-if ${pac_cv_gnu_attr_format+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+if test "$enable_cxx" = yes; then
+ # Check if $MPI_DEFAULT_CXXOPTS is valid with $CXX
+ if test -n "$MPI_DEFAULT_CXXOPTS" ; then
+ if test "$enable_check_compiler_flags" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts option $MPI_DEFAULT_CXXOPTS" >&5
+$as_echo_n "checking whether C++ compiler accepts option $MPI_DEFAULT_CXXOPTS... " >&6; }
+pac_opt="$MPI_DEFAULT_CXXOPTS"
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+CXXFLAGS_orig="$CXXFLAGS"
+CXXFLAGS_opt="$pac_opt $CXXFLAGS"
+pac_result="unknown"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(char *,...) __attribute__ ((format(printf,1,2)));
+
int
main ()
{
-int a;
+
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_format=yes
+CXXFLAGS="$CXXFLAGS_orig"
+rm -f pac_test1.log
+
+
+# START of PUSHVAL
+
+if ${pac_stk_ac_link_level+:} false; then :
+
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+
else
- pac_cv_gnu_attr_format=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ pac_stk_ac_link_level=0
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
-$as_echo "$pac_cv_gnu_attr_format" >&6; }
- if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
-$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- fi
fi
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports __builtin_expect" >&5
-$as_echo_n "checking if C compiler supports __builtin_expect... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+# END of PUSHVAL
-int
-main ()
-{
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test1.log 2>\&1|g'`"
+if ac_fn_cxx_try_link "$LINENO"; then :
- return __builtin_expect(1, 1) ? 1 : 0
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+ CXXFLAGS="$CXXFLAGS_opt"
+ rm -f pac_test2.log
- have_builtin_expect=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+
+# START of PUSHVAL
+
+if ${pac_stk_ac_link_level+:} false; then :
+
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
else
- have_builtin_expect=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ pac_stk_ac_link_level=0
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test x$have_builtin_expect = xyes ; then
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
-$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
fi
-# We need to check for the endianess in order to implement the
-# "external32" representations. This defines "WORDS_BIGENDIAN when
-# the system is bigendian.
-# As of autoconf 2.62, this macro takes an additional argument for systems
-# that can produce object files for either endianess.
-# With the as-always-incompatible-with-every-version autoconf, the
-# arguments for this macro *changed* in 2.62 to
-# (if-bigendian,if-littleendian,unknown,universal)
-# The fourth argument is new.
-# Also note that the definition emitted by autoheader requires that gcc
-# be used to compile the programs - other compilers may not define the
-# non-standard __BIG_ENDIAN__ or __LITTLE_ENDIAN__ CPP names on which
-# autoconf 2.62 now depends.
-byteOrdering=unknown
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
- $as_echo_n "(cached) " >&6
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+
+
+# END of PUSHVAL
+
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test2.log 2>\&1|g'`"
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+
+
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
+
+if
+{ $as_echo "$as_me:$LINENO: diff -b pac_test1.log pac_test2.log > $pac_TESTLOG" >&5
+ (eval diff -b pac_test1.log pac_test2.log > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+
+
+ pac_result=yes
+
+
else
- ac_cv_c_bigendian=unknown
- # See if we're dealing with a universal compiler.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __APPLE_CC__
- not a universal capable compiler
- #endif
- typedef int dummy;
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+
+ (exit $ac_status)
+
+ $as_echo "*** diff -b pac_test1.log pac_test2.log :" >&5
+ cat $pac_TESTLOG >&5
+ pac_result=no
+
+
+
- # Check for potential -arch flags. It is not universal unless
- # there are at least two -arch flags with different values.
- ac_arch=
- ac_prev=
- for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
- if test -n "$ac_prev"; then
- case $ac_word in
- i?86 | x86_64 | ppc | ppc64)
- if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
- ac_arch=$ac_word
- else
- ac_cv_c_bigendian=universal
- break
- fi
- ;;
- esac
- ac_prev=
- elif test "x$ac_word" = "x-arch"; then
- ac_prev=arch
- fi
- done
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
- && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
- && LITTLE_ENDIAN)
- bogus endian macros
- #endif
+rm -f $pac_TESTLOG
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
- #endif
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+ pac_result=no
+
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
- bogus endian macros
- #endif
+# START of POPVAL
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to _BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
+if ${pac_stk_ac_link_level+:} false; then :
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
- not big endian
- #endif
+ if test "x$pac_stk_ac_link_level" = x-1; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
else
- ac_cv_c_bigendian=no
+
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # Compile a test program.
- if test "$cross_compiling" = yes; then :
- # Try to guess by grepping values from an object file.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-short int ascii_mm[] =
- { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
- { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
- int use_ascii (int i) {
- return ascii_mm[i] + ascii_ii[i];
- }
- short int ebcdic_ii[] =
- { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
- { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
- int use_ebcdic (int i) {
- return ebcdic_mm[i] + ebcdic_ii[i];
- }
- extern int foo;
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
- ac_cv_c_bigendian=yes
- fi
- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
- if test "$ac_cv_c_bigendian" = unknown; then
- ac_cv_c_bigendian=no
- else
- # finding both strings is unlikely to happen, but who knows?
- ac_cv_c_bigendian=unknown
- fi
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long int l;
- char c[sizeof (long int)];
- } u;
- u.l = 1;
- return u.c[sizeof (long int) - 1] == 1;
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_bigendian=no
-else
- ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
- yes)
- byteOrdering=big;; #(
- no)
- byteOrdering=little ;; #(
- universal)
- byteOrdering=universal
- ;; #(
- *)
- as_fn_error $? "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
+# END of POPVAL
-case $byteOrdering in
- big)
- # Nothing to do - the c_bigendian macro takes care of it
- :
- ;;
- little)
-$as_echo "#define WORDS_LITTLEENDIAN 1" >>confdefs.h
- ;;
- universal)
-$as_echo "#define WORDS_UNIVERSAL_ENDIAN 1" >>confdefs.h
+else
- ;;
- unknown)
- as_fn_error $? "Unable to determine endianess" "$LINENO" 5
- ;;
-esac
-# We only need this test if we are using Fortran
-if test "$enable_f77" ; then
+ pac_result=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler allows unaligned doubles" >&5
-$as_echo_n "checking whether C compiler allows unaligned doubles... " >&6; }
-if ${pac_cv_prog_c_unaligned_doubles+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-if test "$cross_compiling" = yes; then :
- pac_cv_prog_c_unaligned_doubles="unknown"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
-void fetch_double( v )
-double *v;
-{
-*v = 1.0;
-}
-int main( argc, argv )
-int argc;
-char **argv;
-{
-int p[4];
-double *p_val;
-fetch_double( (double *)&(p[0]) );
-p_val = (double *)&(p[0]);
-if (*p_val != 1.0) return 1;
-fetch_double( (double *)&(p[1]) );
-p_val = (double *)&(p[1]);
-if (*p_val != 1.0) return 1;
-return 0;
-}
+# START of POPVAL
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_prog_c_unaligned_doubles="yes"
-else
- pac_cv_prog_c_unaligned_doubles="no"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+if ${pac_stk_ac_link_level+:} false; then :
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_c_unaligned_doubles" >&5
-$as_echo "$pac_cv_prog_c_unaligned_doubles" >&6; }
+ if test "x$pac_stk_ac_link_level" = x-1; then :
-if test "X$pac_cv_prog_c_unaligned_doubles" = "no" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your C compiler $CC does not support unaligned accesses
-to doubles. This is required for interoperation with
-Fortran (the Fortran standard requires it).
-You may need to specify an additional argument to your C compiler to
-force it to allow unaligned accesses." >&5
-$as_echo "$as_me: WARNING: Your C compiler $CC does not support unaligned accesses
-to doubles. This is required for interoperation with
-Fortran (the Fortran standard requires it).
-You may need to specify an additional argument to your C compiler to
-force it to allow unaligned accesses." >&2;}
-fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
+
+else
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
fi
-# Check for __func__ (defined in C99) or __FUNCTION__ (defined in older GCC)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports __func__" >&5
-$as_echo_n "checking whether $CC supports __func__... " >&6; }
-if ${pac_cv_cc_has___func__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int
-main ()
-{
-const char *cp = __func__;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_cc_has___func__=yes
else
- pac_cv_cc_has___func__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cc_has___func__" >&5
-$as_echo "$pac_cv_cc_has___func__" >&6; }
-if test "$pac_cv_cc_has___func__" != "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports __FUNCTION__" >&5
-$as_echo_n "checking whether $CC supports __FUNCTION__... " >&6; }
-if ${pac_cv_cc_has___FUNCTION__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int
-main ()
-{
-const char *cp = __FUNCTION__;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_cc_has___FUNCTION__=yes
+# END of POPVAL
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
+$as_echo "$pac_result" >&6; }
+rm -f conftest.$ac_ext
+
+if test "$pac_result" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt" >&5
+$as_echo_n "checking whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt... " >&6; }
+ pac_result=unknown
+ CXXFLAGS="$CXXFLAGS_orig"
+ rm -f pac_test3.log
+
+
+# START of PUSHVAL
+
+if ${pac_stk_ac_compile_level+:} false; then :
+
+ as_fn_arith $pac_stk_ac_compile_level + 1 && pac_stk_ac_compile_level=$as_val
+
else
- pac_cv_cc_has___FUNCTION__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ pac_stk_ac_compile_level=0
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cc_has___FUNCTION__" >&5
-$as_echo "$pac_cv_cc_has___FUNCTION__" >&6; }
+eval "pac_stk_ac_compile_$pac_stk_ac_compile_level=\$ac_compile"
+if test "x$pac_stk_ac_compile_level" = x0; then :
+
+ eval pac_FirstSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+
fi
-# ----------------------------------------------------------------------------
-# Check on support for long double and long long types. Do this before the
-# structure alignment test because it will test for including those
-# types as well. In addition, allow the device to suppress support for these
-# optional C types by setting MPID_NO_LONG_DOUBLE and/or MPID_NO_LONG_LONG
-# to yes.
-if test "$MPID_NO_LONG_DOUBLE" != "yes" && test "X$enable_long_double" != "Xno" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double is supported" >&5
-$as_echo_n "checking whether long double is supported... " >&6; }
-if ${pac_cv_have_long_double+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ eval pac_LastSavedValueOf_ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+# END of PUSHVAL
+
+ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> pac_test3.log 2>\&1|g'`"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int
-main ()
-{
-long double a;
- ;
- return 0;
-}
+
+ int foo(void);
+ int foo(void){return 0;}
+
+
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_long_double=yes
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+
+
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+
+ CXXFLAGS="$CXXFLAGS_opt"
+ rm -f pac_test4.log
+
+
+# START of PUSHVAL
+
+if ${pac_stk_ac_link_level+:} false; then :
+
+ as_fn_arith $pac_stk_ac_link_level + 1 && pac_stk_ac_link_level=$as_val
+
else
- pac_cv_have_long_double=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ pac_stk_ac_link_level=0
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_long_double" >&5
-$as_echo "$pac_cv_have_long_double" >&6; }
- if test "$pac_cv_have_long_double" = "yes" ; then
+eval "pac_stk_ac_link_$pac_stk_ac_link_level=\$ac_link"
+if test "x$pac_stk_ac_link_level" = x0; then :
-$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+ eval pac_FirstSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
- fi
fi
-if test "$MPID_NO_LONG_LONG" != "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long long is supported" >&5
-$as_echo_n "checking whether long long is supported... " >&6; }
-if ${pac_cv_have_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ eval pac_LastSavedValueOf_ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+
+
+# END of PUSHVAL
+
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> pac_test4.log 2>\&1|g'`"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
-long long a;
+
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_long_long=yes
-else
- pac_cv_have_long_long=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_long_long" >&5
-$as_echo "$pac_cv_have_long_long" >&6; }
- if test "$pac_cv_have_long_long" = "yes" ; then
+if ac_fn_cxx_try_link "$LINENO"; then :
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
- fi
-fi
-# ----------------------------------------------------------------------------
-# Get default structure alignment for integers
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct integer alignment" >&5
-$as_echo_n "checking for max C struct integer alignment... " >&6; }
-if ${pac_cv_c_max_integer_align+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
-if test "$cross_compiling" = yes; then :
- pac_cv_c_max_integer_align="$CROSS_ALIGN_STRUCT_INT"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+if
+{ $as_echo "$as_me:$LINENO: diff -b pac_test2.log pac_test4.log > $pac_TESTLOG" >&5
+ (eval diff -b pac_test2.log pac_test4.log > $pac_TESTLOG) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
-#include <stdio.h>
-#define DBG(a,b,c)
-int main( int argc, char *argv[] )
-{
- FILE *cf;
- int is_packed = 1;
- int is_two = 1;
- int is_four = 1;
- int is_eight = 1;
- struct { char a; int b; } char_int;
- struct { char a; short b; } char_short;
- struct { char a; long b; } char_long;
- struct { char a; int b; char c; } char_int_char;
- struct { char a; short b; char c; } char_short_char;
-#ifdef HAVE_LONG_LONG_INT
- struct { long long int a; char b; } lli_c;
- struct { char a; long long int b; } c_lli;
-#endif
- int size, extent, extent2;
- /* assume max integer alignment isn't 8 if we don't have
- * an eight-byte value :)
- */
-#ifdef HAVE_LONG_LONG_INT
- if (sizeof(int) < 8 && sizeof(long) < 8 && sizeof(long long int) < 8)
- is_eight = 0;
-#else
- if (sizeof(int) < 8 && sizeof(long) < 8) is_eight = 0;
-#endif
+ pac_result=yes
- size = sizeof(char) + sizeof(int);
- extent = sizeof(char_int);
- if (size != extent) is_packed = 0;
- if ( (extent % 2) != 0) is_two = 0;
- if ( (extent % 4) != 0) is_four = 0;
- if (sizeof(int) == 8 && (extent % 8) != 0) is_eight = 0;
- DBG("char_int",size,extent);
- size = sizeof(char) + sizeof(short);
- extent = sizeof(char_short);
- if (size != extent) is_packed = 0;
- if ( (extent % 2) != 0) is_two = 0;
- if (sizeof(short) == 4 && (extent % 4) != 0) is_four = 0;
- if (sizeof(short) == 8 && (extent % 8) != 0) is_eight = 0;
- DBG("char_short",size,extent);
+else
- size = sizeof(char) + sizeof(long);
- extent = sizeof(char_long);
- if (size != extent) is_packed = 0;
- if ( (extent % 2) != 0) is_two = 0;
- if ( (extent % 4) != 0) is_four = 0;
- if (sizeof(long) == 8 && (extent % 8) != 0) is_eight = 0;
- DBG("char_long",size,extent);
+ $as_echo "$as_me: program exited with status $ac_status" >&5
-#ifdef HAVE_LONG_LONG_INT
- size = sizeof(char) + sizeof(long long int);
- extent = sizeof(lli_c);
- extent2 = sizeof(c_lli);
- if (size != extent) is_packed = 0;
- if ( (extent % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
- if ( (extent % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
- if (sizeof(long long int) >= 8 && (extent % 8) != 0 && (extent2 % 8) != 0)
- is_eight = 0;
-#endif
+ (exit $ac_status)
- size = sizeof(char) + sizeof(int) + sizeof(char);
- extent = sizeof(char_int_char);
- if (size != extent) is_packed = 0;
- if ( (extent % 2) != 0) is_two = 0;
- if ( (extent % 4) != 0) is_four = 0;
- if (sizeof(int) == 8 && (extent % 8) != 0) is_eight = 0;
- DBG("char_int_char",size,extent);
+ $as_echo "*** diff -b pac_test2.log pac_test4.log :" >&5
+ cat $pac_TESTLOG >&5
+ pac_result=no
- size = sizeof(char) + sizeof(short) + sizeof(char);
- extent = sizeof(char_short_char);
- if (size != extent) is_packed = 0;
- if ( (extent % 2) != 0) is_two = 0;
- if (sizeof(short) == 4 && (extent % 4) != 0) is_four = 0;
- if (sizeof(short) == 8 && (extent % 8) != 0) is_eight = 0;
- DBG("char_short_char",size,extent);
- /* If aligned mod 8, it will be aligned mod 4 */
- if (is_eight) { is_four = 0; is_two = 0; }
- if (is_four) is_two = 0;
- /* Tabulate the results */
- cf = fopen( "ctest.out", "w" );
- if (is_packed + is_two + is_four + is_eight == 0) {
- fprintf( cf, "Could not determine alignment\n" );
- }
- else {
- if (is_packed + is_two + is_four + is_eight != 1) {
- fprintf( cf, "error!\n" );
- }
- else {
- if (is_packed) fprintf( cf, "packed\n" );
- if (is_two) fprintf( cf, "two\n" );
- if (is_four) fprintf( cf, "four\n" );
- if (is_eight) fprintf( cf, "eight\n" );
- }
- }
- fclose( cf );
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_c_max_integer_align=`cat ctest.out`
-else
- pac_cv_c_max_integer_align="unknown"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f ctest.out
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_integer_align" >&5
-$as_echo "$pac_cv_c_max_integer_align" >&6; }
-if test -z "$pac_cv_c_max_integer_align" ; then
- pac_cv_c_max_integer_align="unknown"
-fi
+rm -f $pac_TESTLOG
-if test "$pac_cv_c_max_integer_align" = "packed" ; then
- pac_cv_c_struct_align_nr=1
-elif test "$pac_cv_c_max_integer_align" = "two" ; then
- pac_cv_c_struct_align_nr=2
-elif test "$pac_cv_c_max_integer_align" = "four" ; then
- pac_cv_c_struct_align_nr=4
-elif test "$pac_cv_c_max_integer_align" = "eight" ; then
- pac_cv_c_struct_align_nr=8
-fi
-if test -n "$pac_cv_c_struct_align_nr" ; then
+else
-cat >>confdefs.h <<_ACEOF
-#define HAVE_MAX_INTEGER_ALIGNMENT $pac_cv_c_struct_align_nr
-_ACEOF
+ pac_result=no
-cat >>confdefs.h <<_ACEOF
-#define HAVE_MAX_STRUCT_ALIGNMENT $pac_cv_c_struct_align_nr
-_ACEOF
fi
-# Get default structure alignment for floating point types
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct floating point alignment" >&5
-$as_echo_n "checking for max C struct floating point alignment... " >&6; }
-if ${pac_cv_c_max_fp_align+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-if test "$cross_compiling" = yes; then :
- pac_cv_c_max_fp_align="$CROSS_ALIGN_STRUCT_FP"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <stdio.h>
-#define DBG(a,b,c)
-int main( int argc, char *argv[] )
-{
- FILE *cf;
- int is_packed = 1;
- int is_two = 1;
- int is_four = 1;
- int is_eight = 1;
- int is_sixteen = 1;
- struct { char a; float b; } char_float;
- struct { float b; char a; } float_char;
- struct { char a; double b; } char_double;
- struct { double b; char a; } double_char;
-#ifdef HAVE_LONG_DOUBLE
- struct { char a; long double b; } char_long_double;
- struct { long double b; char a; } long_double_char;
- struct { long double a; int b; char c; } long_double_int_char;
-#endif
- int size, extent1, extent2;
-
- size = sizeof(char) + sizeof(float);
- extent1 = sizeof(char_float);
- extent2 = sizeof(float_char);
- if (size != extent1) is_packed = 0;
- if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
- if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
- is_eight = 0;
- DBG("char_float",size,extent1);
+# START of POPVAL
- size = sizeof(char) + sizeof(double);
- extent1 = sizeof(char_double);
- extent2 = sizeof(double_char);
- if (size != extent1) is_packed = 0;
- if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
- if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
- is_eight = 0;
- DBG("char_double",size,extent1);
+if ${pac_stk_ac_link_level+:} false; then :
-#ifdef HAVE_LONG_DOUBLE
- size = sizeof(char) + sizeof(long double);
- extent1 = sizeof(char_long_double);
- extent2 = sizeof(long_double_char);
- if (size != extent1) is_packed = 0;
- if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
- if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
- is_eight = 0;
- if (sizeof(long double) > 8 && (extent1 % 16) != 0
- && (extent2 % 16) != 0) is_sixteen = 0;
- DBG("char_long-double",size,extent1);
+ if test "x$pac_stk_ac_link_level" = x-1; then :
- extent1 = sizeof(long_double_int_char);
- if ( (extent1 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0) is_four = 0;
- if (sizeof(long double) >= 8 && (extent1 % 8) != 0) is_eight = 0;
- if (sizeof(long double) > 8 && (extent1 % 16) != 0) is_sixteen = 0;
-#else
- is_sixteen = 0;
-#endif
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_link\"" >&2;}
- if (is_sixteen) { is_eight = 0; is_four = 0; is_two = 0; }
+else
- if (is_eight) { is_four = 0; is_two = 0; }
+ eval ac_link=\$pac_stk_ac_link_$pac_stk_ac_link_level
+ as_fn_arith $pac_stk_ac_link_level - 1 && pac_stk_ac_link_level=$as_val
- if (is_four) is_two = 0;
+fi
- /* Tabulate the results */
- cf = fopen( "ctest.out", "w" );
- if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) {
- fprintf( cf, "Could not determine alignment\n" );
- }
- else {
- if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) {
- fprintf( cf, "error!\n" );
- }
- else {
- if (is_packed) fprintf( cf, "packed\n" );
- if (is_two) fprintf( cf, "two\n" );
- if (is_four) fprintf( cf, "four\n" );
- if (is_eight) fprintf( cf, "eight\n" );
- if (is_sixteen) fprintf( cf, "sixteen\n" );
- }
- }
- fclose( cf );
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_c_max_fp_align=`cat ctest.out`
else
- pac_cv_c_max_fp_align="unknown"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-rm -f ctest.out
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_link\"" >&2;}
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_fp_align" >&5
-$as_echo "$pac_cv_c_max_fp_align" >&6; }
-if test -z "$pac_cv_c_max_fp_align" ; then
- pac_cv_c_max_fp_align="unknown"
-fi
+# END of POPVAL
-if test "$pac_cv_c_max_fp_align" = "packed" ; then
- pac_cv_c_fp_align_nr=1
-elif test "$pac_cv_c_max_fp_align" = "two" ; then
- pac_cv_c_fp_align_nr=2
-elif test "$pac_cv_c_max_fp_align" = "four" ; then
- pac_cv_c_fp_align_nr=4
-elif test "$pac_cv_c_max_fp_align" = "eight" ; then
- pac_cv_c_fp_align_nr=8
-elif test "$pac_cv_c_max_fp_align" = "sixteen" ; then
- pac_cv_c_fp_align_nr=16
-elif test "$pac_cv_c_max_fp_align" = "largest" ; then
- as_fn_error $? "Configure detected unsupported structure alignment rules." "$LINENO" 5
-fi
-if test -n "$pac_cv_c_fp_align_nr" ; then
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
-cat >>confdefs.h <<_ACEOF
-#define HAVE_MAX_FP_ALIGNMENT $pac_cv_c_fp_align_nr
-_ACEOF
-fi
+else
-# Test for the alignment of structs containing only long doubles.
-if test "$pac_cv_have_long_double" = yes ; then
- # Check for alignment of just float and double (no long doubles)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct alignment of structs with doubles" >&5
-$as_echo_n "checking for max C struct alignment of structs with doubles... " >&6; }
-if ${pac_cv_c_max_double_fp_align+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ pac_result=no
-if test "$cross_compiling" = yes; then :
- pac_cv_c_max_double_fp_align="$CROSS_ALIGN_STRUCT_DOUBLE_FP"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-#define DBG(a,b,c)
-int main( int argc, char *argv[] )
-{
- FILE *cf;
- int is_packed = 1;
- int is_two = 1;
- int is_four = 1;
- int is_eight = 1;
- struct { char a; float b; } char_float;
- struct { float b; char a; } float_char;
- struct { char a; double b; } char_double;
- struct { double b; char a; } double_char;
- int size, extent1, extent2;
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- size = sizeof(char) + sizeof(float);
- extent1 = sizeof(char_float);
- extent2 = sizeof(float_char);
- if (size != extent1) is_packed = 0;
- if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
- if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
- is_eight = 0;
- DBG("char_float",size,extent1);
+# START of POPVAL
- size = sizeof(char) + sizeof(double);
- extent1 = sizeof(char_double);
- extent2 = sizeof(double_char);
- if (size != extent1) is_packed = 0;
- if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
- if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
- is_eight = 0;
- DBG("char_double",size,extent1);
+if ${pac_stk_ac_compile_level+:} false; then :
- if (is_eight) { is_four = 0; is_two = 0; }
+ if test "x$pac_stk_ac_compile_level" = x-1; then :
- if (is_four) is_two = 0;
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&5
+$as_echo "$as_me: WARNING: \"Imbalance of PUSHVAL/POPVAL of ac_compile\"" >&2;}
- /* Tabulate the results */
- cf = fopen( "ctest.out", "w" );
- if (is_packed + is_two + is_four + is_eight == 0) {
- fprintf( cf, "Could not determine alignment\n" );
- }
- else {
- if (is_packed + is_two + is_four + is_eight != 1) {
- fprintf( cf, "error!\n" );
- }
- else {
- if (is_packed) fprintf( cf, "packed\n" );
- if (is_two) fprintf( cf, "two\n" );
- if (is_four) fprintf( cf, "four\n" );
- if (is_eight) fprintf( cf, "eight\n" );
- }
- }
- fclose( cf );
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_c_max_double_fp_align=`cat ctest.out`
else
- pac_cv_c_max_double_fp_align="unknown"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-rm -f ctest.out
+ eval ac_compile=\$pac_stk_ac_compile_$pac_stk_ac_compile_level
+ as_fn_arith $pac_stk_ac_compile_level - 1 && pac_stk_ac_compile_level=$as_val
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_double_fp_align" >&5
-$as_echo "$pac_cv_c_max_double_fp_align" >&6; }
-if test -z "$pac_cv_c_max_double_fp_align" ; then
- pac_cv_c_max_double_fp_align="unknown"
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct floating point alignment with long doubles" >&5
-$as_echo_n "checking for max C struct floating point alignment with long doubles... " >&6; }
-if ${pac_cv_c_max_longdouble_fp_align+:} false; then :
- $as_echo_n "(cached) " >&6
else
-if test "$cross_compiling" = yes; then :
- pac_cv_c_max_longdouble_fp_align="$CROSS_ALIGN_STRUCT_LONGDOUBLE_FP"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&5
+$as_echo "$as_me: WARNING: \"Uninitialized PUSHVAL/POPVAL of ac_compile\"" >&2;}
-#include <stdio.h>
-#define DBG(a,b,c)
-int main( int argc, char *argv[] )
-{
- FILE *cf;
- int is_packed = 1;
- int is_two = 1;
- int is_four = 1;
- int is_eight = 1;
- int is_sixteen = 1;
- struct { char a; long double b; } char_long_double;
- struct { long double b; char a; } long_double_char;
- struct { long double a; int b; char c; } long_double_int_char;
- int size, extent1, extent2;
+fi
- size = sizeof(char) + sizeof(long double);
- extent1 = sizeof(char_long_double);
- extent2 = sizeof(long_double_char);
- if (size != extent1) is_packed = 0;
- if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
- if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
- is_eight = 0;
- if (sizeof(long double) > 8 && (extent1 % 16) != 0
- && (extent2 % 16) != 0) is_sixteen = 0;
- DBG("char_long-double",size,extent1);
+# END of POPVAL
- extent1 = sizeof(long_double_int_char);
- if ( (extent1 % 2) != 0) is_two = 0;
- if ( (extent1 % 4) != 0) is_four = 0;
- if (sizeof(long double) >= 8 && (extent1 % 8) != 0) is_eight = 0;
- if (sizeof(long double) > 8 && (extent1 % 16) != 0) is_sixteen = 0;
- if (is_sixteen) { is_eight = 0; is_four = 0; is_two = 0; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_result" >&5
+$as_echo "$pac_result" >&6; }
+ rm -f pac_test3.log pac_test4.log
+fi
+rm -f pac_test1.log pac_test2.log
- if (is_eight) { is_four = 0; is_two = 0; }
+CXXFLAGS="$CXXFLAGS_orig"
+if test "$pac_result" = "yes" ; then
- if (is_four) is_two = 0;
+ CXXFLAGS="$CXXFLAGS $MPI_DEFAULT_CXXOPTS"
- /* Tabulate the results */
- cf = fopen( "ctest.out", "w" );
- if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) {
- fprintf( cf, "Could not determine alignment\n" );
- }
- else {
- if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) {
- fprintf( cf, "error!\n" );
- }
- else {
- if (is_packed) fprintf( cf, "packed\n" );
- if (is_two) fprintf( cf, "two\n" );
- if (is_four) fprintf( cf, "four\n" );
- if (is_eight) fprintf( cf, "eight\n" );
- if (is_sixteen) fprintf( cf, "sixteen\n" );
- }
- }
- fclose( cf );
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_c_max_longdouble_fp_align=`cat ctest.out`
else
- pac_cv_c_max_longdouble_fp_align="unknown"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ :
fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-rm -f ctest.out
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_longdouble_fp_align" >&5
-$as_echo "$pac_cv_c_max_longdouble_fp_align" >&6; }
-if test -z "$pac_cv_c_max_longdouble_fp_align" ; then
- pac_cv_c_max_longdouble_fp_align="unknown"
+ else
+ CXXFLAGS="$CXXFLAGS $MPI_DEFAULT_CXXOPTS"
+ fi
+ fi
fi
- # FIXME: If this alignment is not the same as that for all float types,
- # we need to do something else in the alignment rule code.
- if test "$pac_cv_c_max_fp_align" != "$pac_cv_c_max_longdouble_fp_align" -o \
- "$pac_cv_c_max_fp_align" != "$pac_cv_c_max_double_fp_align" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Structures containing long doubles may be aligned differently from structures with floats or longs. MPICH does not handle this case automatically and you should avoid assumed extents for structures containing float types." >&5
-$as_echo "$as_me: WARNING: Structures containing long doubles may be aligned differently from structures with floats or longs. MPICH does not handle this case automatically and you should avoid assumed extents for structures containing float types." >&2;}
- double_align=-1
- case $pac_cv_c_max_double_fp_align in
- packed) double_align=1 ;;
- two) double_align=2 ;;
- four) double_align=4 ;;
- eight) double_align=8 ;;
- esac
- longdouble_align=-1
- case $pac_cv_c_max_longdouble_fp_align in
- packed) longdouble_align=1 ;;
- two) longdouble_align=2 ;;
- four) longdouble_align=4 ;;
- eight) longdouble_align=8 ;;
- sixteen)longdouble_align=16 ;;
- esac
+# ----------------------------------------------------------------------------
+# End of the bindings support
+# ----------------------------------------------------------------------------
-cat >>confdefs.h <<_ACEOF
-#define HAVE_MAX_DOUBLE_FP_ALIGNMENT $double_align
-_ACEOF
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+#
+# ----------------------------------------------------------------------------
+# Done with the basic argument processing and decisions about which
+# subsystems to build
+# ----------------------------------------------------------------------------
-cat >>confdefs.h <<_ACEOF
-#define HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT $longdouble_align
-_ACEOF
+# Look for perl. Perl is used *only* in the tests of the commands such as
+# mpiexec, mpicc, etc, in test/commands, and in some of the utility
+# programs for processing log files . If perl is not found,
+# MPICH may still be built and used.
+# We need the full path to perl since we'll use it as the interpreter for
+# a shell script.
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PERL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
- fi
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-# Test for weird struct alignment rules that vary padding based on
-# size of leading type only.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if alignment of structs with doubles is based on position" >&5
-$as_echo_n "checking if alignment of structs with doubles is based on position... " >&6; }
-if ${pac_cv_c_double_pos_align+:} false; then :
+# Look for ar. If we fail, abort
+for ac_prog in ar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
$as_echo_n "(cached) " >&6
else
-
-if test "$cross_compiling" = yes; then :
- pac_cv_c_double_pos_align="$CROSS_ALIGN_DOUBLE_POS"
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <stdio.h>
-#define DBG(a,b,c)
-int main( int argc, char *argv[] )
-{
- FILE *cf;
- int padding_varies_by_pos = 0;
- struct { char a; double b; } char_double;
- struct { double b; char a; } double_char;
- int extent1, extent2;
-
- extent1 = sizeof(char_double);
- extent2 = sizeof(double_char);
- if (extent1 != extent2) padding_varies_by_pos = 1;
-
- cf = fopen( "ctest.out", "w" );
- if (padding_varies_by_pos) fprintf( cf, "yes\n" );
- else fprintf( cf, "no\n" );
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
- fclose( cf );
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_c_double_pos_align=`cat ctest.out`
-else
- pac_cv_c_double_pos_align="unknown"
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-rm -f ctest.out
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_double_pos_align" >&5
-$as_echo "$pac_cv_c_double_pos_align" >&6; }
-if test -z "$pac_cv_c_double_pos_align" ; then
- pac_cv_c_double_pos_align="unknown"
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-if test "$pac_cv_c_double_pos_align" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DOUBLE_POS_ALIGNMENT 1
-_ACEOF
+ test -n "$AR" && break
+done
+if test -z "$AR" ; then
+ as_fn_error $? "The program ar is required for building MPICH. Make sure that your path includes ar" "$LINENO" 5
fi
-# Test for same weird issues with long long int.
+# FIXME: this is probably unnecessary now that we only do one "ar" at the end
+# (via libtool). If anything, it's likely to cause problems instead.
+# AR_FLAGS provides a way to potentially improve build performance on Mac OSX
+AR_FLAGS=cr
+# this logic is lame, should really write a real test at some point
+case $host in #(
+ # Barry proposes AR_FLAGS="Scq" in trac#754, but that won't work correctly for re-builds
+ *-*-darwin*) :
+ AR_FLAGS=Scr
+ ;; #(
+ *) :
+ ;;
+esac
+ # causes AC_SUBST too
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if alignment of structs with long long ints is based on position" >&5
-$as_echo_n "checking if alignment of structs with long long ints is based on position... " >&6; }
-if ${pac_cv_c_llint_pos_align+:} false; then :
+# Note that we set RANLIB to true if we don't find it (some systems neither
+# need it nor provide it)
+for ac_prog in ranlib
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
$as_echo_n "(cached) " >&6
else
-
-if test "$cross_compiling" = yes; then :
- pac_cv_c_llint_pos_align="$CROSS_ALIGN_LLINT_POS"
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <stdio.h>
-#define DBG(a,b,c)
-int main( int argc, char *argv[] )
-{
- FILE *cf;
- int padding_varies_by_pos = 0;
-#ifdef HAVE_LONG_LONG_INT
- struct { char a; long long int b; } char_llint;
- struct { long long int b; char a; } llint_char;
- int extent1, extent2;
-
- extent1 = sizeof(char_llint);
- extent2 = sizeof(llint_char);
- if (extent1 != extent2) padding_varies_by_pos = 1;
-#endif
-
- cf = fopen( "ctest.out", "w" );
- if (padding_varies_by_pos) fprintf( cf, "yes\n" );
- else fprintf( cf, "no\n" );
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
- fclose( cf );
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_c_llint_pos_align=`cat ctest.out`
-else
- pac_cv_c_llint_pos_align="unknown"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-
-rm -f ctest.out
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_llint_pos_align" >&5
-$as_echo "$pac_cv_c_llint_pos_align" >&6; }
-if test -z "$pac_cv_c_llint_pos_align" ; then
- pac_cv_c_llint_pos_align="unknown"
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-if test "$pac_cv_c_llint_pos_align" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LLINT_POS_ALIGNMENT 1
-_ACEOF
-fi
+ test -n "$RANLIB" && break
+done
+test -n "$RANLIB" || RANLIB="true"
-# Test for double alignment not following all our other carefully constructed rules
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if double alignment breaks rules, find actual alignment" >&5
-$as_echo_n "checking if double alignment breaks rules, find actual alignment... " >&6; }
-if ${pac_cv_c_double_alignment_exception+:} false; then :
+# Check for the killall program; this can be used in some of the tests
+# in test/commands
+for ac_prog in killall
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_KILLALL+:} false; then :
$as_echo_n "(cached) " >&6
else
-
-if test "$cross_compiling" = yes; then :
- pac_cv_c_double_alignment_exception="$CROSS_ALIGN_DOUBLE_EXCEPTION"
+ if test -n "$KILLALL"; then
+ ac_cv_prog_KILLALL="$KILLALL" # Let the user override the test.
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <stdio.h>
-#define DBG(a,b,c)
-int main( int argc, char *argv[] )
-{
- FILE *cf;
- struct { char a; double b; } char_double;
- struct { double b; char a; } double_char;
- int extent1, extent2, align_4 = 0;
-
- extent1 = sizeof(char_double);
- extent2 = sizeof(double_char);
-
- /* we're interested in the largest value, will let separate test
- * deal with position-based issues.
- */
- if (extent1 < extent2) extent1 = extent2;
- if ((sizeof(double) == 8) && (extent1 % 8) != 0) {
- if (extent1 % 4 == 0) {
-#ifdef HAVE_MAX_FP_ALIGNMENT
- if (HAVE_MAX_FP_ALIGNMENT >= 8) align_4 = 1;
-#else
- align_4 = 1;
-#endif
- }
- }
-
- cf = fopen( "ctest.out", "w" );
-
- if (align_4) fprintf( cf, "four\n" );
- else fprintf( cf, "no\n" );
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_KILLALL="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
- fclose( cf );
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_c_double_alignment_exception=`cat ctest.out`
-else
- pac_cv_c_double_alignment_exception="unknown"
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-rm -f ctest.out
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_double_alignment_exception" >&5
-$as_echo "$pac_cv_c_double_alignment_exception" >&6; }
-if test -z "$pac_cv_c_double_alignment_exception" ; then
- pac_cv_c_double_alignment_exception="unknown"
+KILLALL=$ac_cv_prog_KILLALL
+if test -n "$KILLALL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KILLALL" >&5
+$as_echo "$KILLALL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-if test "$pac_cv_c_double_alignment_exception" = "four" ; then
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DOUBLE_ALIGNMENT_EXCEPTION 4
-_ACEOF
+ test -n "$KILLALL" && break
+done
+test -n "$KILLALL" || KILLALL="true"
+
+# Does xargs need the -r option to handle the case where the input
+# is empty (gnu utils do, Mac OSX does not accept -r)
+xargs_out=`echo "" | xargs ls | wc -l | sed -e 's/ //g'`
+if test "$xargs_out" != "0" ; then
+ XARGS_NODATA_OPT=-r
fi
-# Test whether pointers can be aligned on a int boundary or require
-# a pointer boundary.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alignment restrictions on pointers" >&5
-$as_echo_n "checking for alignment restrictions on pointers... " >&6; }
-if test "$cross_compiling" = yes; then :
- pac_cv_pointers_have_int_alignment=unknown
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-struct foo { int a; void *b; };
-int main() {
- int buf[10];
- struct foo *p1;
- p1=(struct foo*)&buf[0];
- p1->b = (void *)0;
- p1=(struct foo*)&buf[1];
- p1->b = (void *)0;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_pointers_have_int_alignment=yes
+
+if test -z "$INSTALL" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: No install program available" >&5
+$as_echo "No install program available" >&6; }
else
- pac_cv_pointers_have_int_alignment=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ # first make any "confdb/install-sh -c" into an absolute path
+ # this is a hack, but it's still much cleaner than anything else I could
+ # come up with (see tt#1007) [goodell@]
+ case "$INSTALL" in #(
+ /*) :
+ : ;; #(
+ *install-sh*) :
+ INSTALL="$master_top_srcdir/$INSTALL" ;; #(
+ *) :
+ ;;
+esac
+
+ # Check that this install really works
+ rm -f conftest
+ echo "Test file" > conftest
+ if test ! -d .conftest ; then mkdir .conftest ; fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether install works" >&5
+$as_echo_n "checking whether install works... " >&6; }
+ if $INSTALL conftest .conftest >/dev/null 2>&1 ; then
+ installOk=yes
+ else
+ installOk=no
+ fi
+ rm -rf .conftest conftest
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $installOk" >&5
+$as_echo "$installOk" >&6; }
+ if test "$installOk" = no ; then
+ if test -n "$ac_install_sh" ; then
+ INSTALL=$ac_install_sh
+ else
+ as_fn_error $? "Unable to find working install" "$LINENO" 5
+ fi
+ fi
fi
+#
+# On Mac OS/X, install breaks libraries unless used with the -p switch
+# We also need mkdir -p.
-if test "$pac_cv_pointers_have_int_alignment" != "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkdir -p works" >&5
+$as_echo_n "checking whether mkdir -p works... " >&6; }
+if ${pac_cv_mkdir_p+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-$as_echo "#define NEEDS_POINTER_ALIGNMENT_ADJUST 1" >>confdefs.h
+pac_cv_mkdir_p=no
+rm -rf .tmp
+if mkdir -p .tmp/.foo 1>/dev/null 2>&1 ; then
+ if test -d .tmp/.foo ; then
+ pac_cv_mkdir_p=yes
+ fi
+fi
+rm -rf .tmp
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: pointer" >&5
-$as_echo "pointer" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_mkdir_p" >&5
+$as_echo "$pac_cv_mkdir_p" >&6; }
+if test "$pac_cv_mkdir_p" = "yes" ; then
+ MKDIR_P="mkdir -p"
+ export MKDIR_P
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: int or better" >&5
-$as_echo "int or better" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: mkdir -p does not work; the install step may fail" >&5
+$as_echo "$as_me: WARNING: mkdir -p does not work; the install step may fail" >&2;}
fi
-# There are further alignment checks after we test for int64_t etc. below.
-# Get the size of the C types for encoding in the basic datatypes and for
-# the specific-sized integers
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
-$as_echo_n "checking size of char... " >&6; }
-if ${ac_cv_sizeof_char+:} false; then :
+
+true
+if test "X$MAKE" = "X" ; then
+ for ac_prog in make gnumake nmake pmake smake
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MAKE+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then :
-
+ if test -n "$MAKE"; then
+ ac_cv_prog_MAKE="$MAKE" # Let the user override the test.
else
- if test "$ac_cv_type_char" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (char)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_char=0
- fi
-fi
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MAKE="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
-$as_echo "$ac_cv_sizeof_char" >&6; }
+fi
+MAKE=$ac_cv_prog_MAKE
+if test -n "$MAKE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5
+$as_echo "$MAKE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+ test -n "$MAKE" && break
+done
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR $ac_cv_sizeof_char
-_ACEOF
+fi
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned char" >&5
-$as_echo_n "checking size of unsigned char... " >&6; }
-if ${ac_cv_sizeof_unsigned_char+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether clock skew breaks make" >&5
+$as_echo_n "checking whether clock skew breaks make... " >&6; }
+if ${pac_cv_prog_make_found_clock_skew+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned char))" "ac_cv_sizeof_unsigned_char" "$ac_includes_default"; then :
+
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+cat > conftest <<EOF
+ALL:
+ @-echo "success"
+EOF
+$MAKE -f conftest > conftest.out 2>&1
+if grep -i skew conftest >/dev/null 2>&1 ; then
+ pac_cv_prog_make_found_clock_skew=yes
else
- if test "$ac_cv_type_unsigned_char" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned char)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_unsigned_char=0
- fi
+ pac_cv_prog_make_found_clock_skew=no
fi
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_char" >&5
-$as_echo "$ac_cv_sizeof_unsigned_char" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_CHAR $ac_cv_sizeof_unsigned_char
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_found_clock_skew" >&5
+$as_echo "$pac_cv_prog_make_found_clock_skew" >&6; }
+if test "$pac_cv_prog_make_found_clock_skew" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Clock skew found by make. The configure and build may fail.
+Consider building in a local instead of NFS filesystem." >&5
+$as_echo "$as_me: WARNING: Clock skew found by make. The configure and build may fail.
+Consider building in a local instead of NFS filesystem." >&2;}
+fi
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make supports include" >&5
+$as_echo_n "checking whether make supports include... " >&6; }
+if ${pac_cv_prog_make_include+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
+
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+cat > conftest <<.
+ALL:
+ @echo "success"
+.
+cat > conftest1 <<.
+include conftest
+.
+pac_str=`$MAKE -f conftest1 2>&1`
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest conftest1
+if test "$pac_str" != "success" ; then
+ pac_cv_prog_make_include="no"
else
- if test "$ac_cv_type_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (short)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_short=0
- fi
+ pac_cv_prog_make_include="yes"
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_include" >&5
+$as_echo "$pac_cv_prog_make_include" >&6; }
+if test "$pac_cv_prog_make_include" = "no" ; then
+ :
+else
+ :
+fi
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5
-$as_echo_n "checking size of unsigned short... " >&6; }
-if ${ac_cv_sizeof_unsigned_short+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make allows comments in actions" >&5
+$as_echo_n "checking whether make allows comments in actions... " >&6; }
+if ${pac_cv_prog_make_allows_comments+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"; then :
+
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+cat > conftest <<.
+SHELL=/bin/sh
+ALL:
+ @# This is a valid comment!
+ @echo "success"
+.
+pac_str=`$MAKE -f conftest 2>&1`
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+if test "$pac_str" != "success" ; then
+ pac_cv_prog_make_allows_comments="no"
else
- if test "$ac_cv_type_unsigned_short" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned short)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_unsigned_short=0
- fi
+ pac_cv_prog_make_allows_comments="yes"
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5
-$as_echo "$ac_cv_sizeof_unsigned_short" >&6; }
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_allows_comments" >&5
+$as_echo "$pac_cv_prog_make_allows_comments" >&6; }
+if test "$pac_cv_prog_make_allows_comments" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your make does not allow comments in target code.
+Using this make may cause problems when building programs.
+You should consider using gnumake instead." >&5
+$as_echo "$as_me: WARNING: Your make does not allow comments in target code.
+Using this make may cause problems when building programs.
+You should consider using gnumake instead." >&2;}
+fi
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short
-_ACEOF
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for virtual path format" >&5
+$as_echo_n "checking for virtual path format... " >&6; }
+if ${pac_cv_prog_make_vpath+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
+
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -rf conftest*
+mkdir conftestdir
+cat >conftestdir/a.c <<EOF
+A sample file
+EOF
+cat > conftest <<EOF
+all: a.o
+VPATH=.:conftestdir
+.c.o:
+ @echo \$<
+EOF
+ac_out=`$MAKE -f conftest 2>&1 | grep 'conftestdir/a.c'`
+if test -n "$ac_out" ; then
+ pac_cv_prog_make_vpath="VPATH"
else
- if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_int=0
- fi
+ rm -f conftest
+ cat > conftest <<EOF
+all: a.o
+.PATH: . conftestdir
+.c.o:
+ @echo \$<
+EOF
+ ac_out=`$MAKE -f conftest 2>&1 | grep 'conftestdir/a.c'`
+ if test -n "$ac_out" ; then
+ pac_cv_prog_make_vpath=".PATH"
+ else
+ pac_cv_prog_make_vpath="neither VPATH nor .PATH works"
+ fi
fi
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -rf conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_vpath" >&5
+$as_echo "$pac_cv_prog_make_vpath" >&6; }
+if test "$pac_cv_prog_make_vpath" = "VPATH" ; then
+ VPATH='VPATH=.:${srcdir}'
+elif test "$pac_cv_prog_make_vpath" = ".PATH" ; then
+ VPATH='.PATH: . ${srcdir}'
+fi
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
-$as_echo_n "checking size of unsigned int... " >&6; }
-if ${ac_cv_sizeof_unsigned_int+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make sets CFLAGS" >&5
+$as_echo_n "checking whether make sets CFLAGS... " >&6; }
+if ${pac_cv_prog_make_set_cflags+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then :
+
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+cat > conftest <<EOF
+SHELL=/bin/sh
+ALL:
+ @echo X\${CFLAGS}X
+EOF
+pac_str=`$MAKE -f conftest 2>&1`
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+if test "$pac_str" = "XX" ; then
+ pac_cv_prog_make_set_cflags="no"
else
- if test "$ac_cv_type_unsigned_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_unsigned_int=0
- fi
+ pac_cv_prog_make_set_cflags="yes"
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
-$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
-
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_make_set_cflags" >&5
+$as_echo "$pac_cv_prog_make_set_cflags" >&6; }
+if test "$pac_cv_prog_make_set_cflags" = "no" ; then
+ :
+else
+ SET_CFLAGS='CFLAGS='
+fi
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
+if test "$pac_cv_prog_make_echos_dir" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+else
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
+#
+# Check for bash to allow more robust shell scripts
+# Extract the first word of "bash", so it can be a program name with args.
+set dummy bash; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_BASH_SHELL+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
+ case $BASH_SHELL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_BASH_SHELL="$BASH_SHELL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_BASH_SHELL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+ ;;
+esac
+fi
+BASH_SHELL=$ac_cv_path_BASH_SHELL
+if test -n "$BASH_SHELL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH_SHELL" >&5
+$as_echo "$BASH_SHELL" >&6; }
else
- if test "$ac_cv_type_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_long=0
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+
+#
+# Confirm that bash has working arrays. We can use this to
+# build more robust versions of the scripts (particularly the
+# compliation scripts) by taking advantage of the array features in
+# bash.
+bashWorks=no
+if test -x "$BASH_SHELL" ; then
+ cat >>conftest <<EOF
+#! $BASH_SHELL
+A[0]="b"
+A[1]="c"
+rc=1
+if test \${A[1]} != "c" ; then rc=2 ; else rc=0 ; fi
+exit \$rc
+EOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $BASH_SHELL supports arrays" >&5
+$as_echo_n "checking whether $BASH_SHELL supports arrays... " >&6; }
+ chmod +x conftest
+ if ./conftest 2>&1 >/dev/null ; then
+ bashWorks=yes
+ else
+ bashWorks=no
+ fi
+ rm -f conftest*
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bashWorks" >&5
+$as_echo "$bashWorks" >&6; }
+fi
+ if test "x$bashWorks" = xyes; then
+ BUILD_BASH_SCRIPTS_TRUE=
+ BUILD_BASH_SCRIPTS_FALSE='#'
+else
+ BUILD_BASH_SCRIPTS_TRUE='#'
+ BUILD_BASH_SCRIPTS_FALSE=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+# ----------------------------------------------------------------------------
+# At this point, we've finally settled on the value of PMPILIBNAME. We
+# can now set NEEDSPLIB.
+if test "$NEEDSPLIB" = yes -a "$PMPILIBNAME" = "$MPILIBNAME" ; then
+ NEEDSPLIB=no
+fi
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+# We are cheating a bit here and reaching inside of the libtool macros to
+# extract the correct shared library extension. It would be nice if this
+# were publicly available in at least the same way that $libext is.
+eval SHLIB_EXT='"'$shrext_cmds'"'
+export SHLIB_EXT
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
-$as_echo_n "checking size of unsigned long... " >&6; }
-if ${ac_cv_sizeof_unsigned_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then :
+# ----------------------------------------------------------------------------
+#
+# Add the steps for debugger support
+BUILD_TVDLL=no
+if test "$enable_debuginfo" = "yes" ; then
+ # We can build the Totalview interface DLL only if we know how to build
+ # shared libraries.
-else
- if test "$ac_cv_type_unsigned_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned long)
-See \`config.log' for more details" "$LINENO" 5; }
+ # FIXME is this really the right test?
+ # No. Before MPICH 1.5, there was the capability to build the debugger
+ # libraries without forcing the build of shared libraries for everything.
+ # There may be some way to restore this capability, but until then, we
+ # at least cause the configure to cleanly fail with a clear error message
+ if test "X$enable_shared" = "Xyes" ; then
+ BUILD_TVDLL=yes
else
- ac_cv_sizeof_unsigned_long=0
+ as_fn_error $? "Building with --enable-debuginfo now requires building with shared library support. Add --enable-shared and reconfigure" "$LINENO" 5
fi
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
-$as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
+ # One more nasty problem. Totalview relies on debugger symbols
+ # being present in the executable. Some experimental versions of
+ # gcc (3.2 20020329 for ia64) do *not* include the object symbols
+ # when debugging. For HPUX, the necessary linking options are
+ # +noobjdebug
+ # for C, Fortran, and C++. We don't have a good test for this yet,
+ # so we add a warning
+ if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Some versions of gcc do not include debugging information
+within the executable. Totalview requires this information to detect
+an MPICH code. If you have trouble, try linking with the additional
+option
+ +noobjdebug
+on all link lines (consider adding it to LDFLAGS)" >&5
+$as_echo "$as_me: WARNING: Some versions of gcc do not include debugging information
+within the executable. Totalview requires this information to detect
+an MPICH code. If you have trouble, try linking with the additional
+option
+ +noobjdebug
+on all link lines (consider adding it to LDFLAGS)" >&2;}
+ fi
+
+ # The debugger library name cannot be set until we know the extension
+ # of shared libraries - the name is so on most Unix system, dylib on OS X.
+
+$as_echo "#define HAVE_DEBUGGER_SUPPORT 1" >>confdefs.h
+ # The debugger support requires a shared library. This is handled
+ # below, after we check for compiler support for shared libraries
+ # Note: if libdir contains exec_prefix, handle the fact that the
+ # default exec_prefix is NONE, which (much later in configure)
+ # gets turned into the value of prefix
+ ##ENVVAR: MPICH_DEBUGLIBNAME - Set this environment variable to
+ ## override the default name of the debugger support library.
+ ## The default name is libtvmpich.$SHLIB_EXT (e.g., libtvmpich.so for
+ ## most Unix versions, libtvmpich.dylib for Mac OSX).
+ ##ENVVAR END:
+ if test -z "$MPICH_DEBUGLIBNAME" ; then
+ DEBUGLIBNAME=libtvmpich$SHLIB_EXT
+ else
+ # FIXME DJG I don't think this can be supported arbitrarily by the new
+ # build system (I'm not sure it was supported correctly by the old
+ # system either)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: overriding MPICH_DEBUGLIBNAME is currently untested and probably does not work" >&5
+$as_echo "$as_me: WARNING: overriding MPICH_DEBUGLIBNAME is currently untested and probably does not work" >&2;}
+ DEBUGLIBNAME=$MPICH_DEBUGLIBNAME
+ fi
+ if test "x$exec_prefix" = xNONE ; then
+ saveExecPrefix=$exec_prefix
+ exec_prefix=$prefix
+ eval dlldir=$libdir/$DEBUGLIBNAME
+ exec_prefix=$saveExecPrefix
+ else
+ eval dlldir=$libdir/$DEBUGLIBNAME
+ fi
+ dlldir='"'$dlldir'"'
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
+#define MPICH_INFODLL_LOC $dlldir
_ACEOF
+fi
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
+# used by automakefiles to conditionally build the DLL
+ if test x$BUILD_TVDLL = xyes; then
+ BUILD_DEBUGGER_DLL_TRUE=
+ BUILD_DEBUGGER_DLL_FALSE='#'
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
+ BUILD_DEBUGGER_DLL_TRUE='#'
+ BUILD_DEBUGGER_DLL_FALSE=
+fi
-else
- if test "$ac_cv_type_long_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long long)
-See \`config.log' for more details" "$LINENO" 5; }
+
+# ----------------------------------------------------------------------------
+
+nameserv_name=""
+# Get the default nameserver, if no nameserver was selected. A process
+# manager may advertise a nameserver name by setting the variable
+# MPID_PM_NAMESERVER.
+if test "$with_namepublisher" = "default" ; then
+ if test -n "$MPID_PM_NAMESERVER" ; then
+ with_namepublisher=$MPID_PM_NAMESERVER
else
- ac_cv_sizeof_long_long=0
+ # The default is to use pmi to communicate published names
+ with_namepublisher=pmi
fi
fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
-
-
+if test "$with_namepublisher" != no -a "$with_namepublisher" != "none" ; then
+ case "$with_namepublisher" in
+ none|no) ;;
+ # Removed ldap namepublisher hook - we no longer support or distribute
+ # the ldap-based name server
+ file*)
+ # Note that we always build the Makefile for the file version because
+ # this name publisher is really too simple to require a
+ # separate configure, and we might as well include a basic
+ # name publisher with any MPICH distribution
+ # We DO need to extract the directory name that is used for writing
+ # the files, with the User's home directory as the default
+ nameserv_name="file"
+ basedir=`echo $with_namepublisher | sed -e 's/file://'`
+ if test "$basedir" = "$with_namepublisher" ; then
+ # Reset since no directory was set.
+ basedir='"."';
+ fi
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+#define FILE_NAMEPUB_BASEDIR $basedir
_ACEOF
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
-$as_echo_n "checking size of unsigned long long... " >&6; }
-if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long" "$ac_includes_default"; then :
+$as_echo "#define USE_FILE_FOR_NAMEPUB 1" >>confdefs.h
-else
- if test "$ac_cv_type_unsigned_long_long" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned long long)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_unsigned_long_long=0
- fi
-fi
+ ;;
+ *)
+ # Check for a new namepublisher
+ dir=$with_namepublisher
+ # If we later need args, here is where we can strip them off of the
+ # with argument
+ if test -d "$use_top_srcdir/src/nameserv/$dir" ; then
+ if test -x "$use_top_srcdir/src/nameserv/$dir/configure" ; then
+ # Run the configure in this directory if necessary
+ subsystems="$subsystems src/nameserv/$dir"
+ fi
+ nameserv_name=$dir
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown name publisher $with_namepublisher" >&5
+$as_echo "$as_me: WARNING: Unknown name publisher $with_namepublisher" >&2;}
+ fi
+ ;;
+ esac
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
-$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
+if test -n "$nameserv_name" ; then
+$as_echo "#define HAVE_NAMEPUB_SERVICE 1" >>confdefs.h
+fi
+export nameserv_name
+ if test "X$nameserv_name" = "Xfile"; then
+ BUILD_NAMEPUB_FILE_TRUE=
+ BUILD_NAMEPUB_FILE_FALSE='#'
+else
+ BUILD_NAMEPUB_FILE_TRUE='#'
+ BUILD_NAMEPUB_FILE_FALSE=
+fi
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
-_ACEOF
+ if test "X$nameserv_name" = "Xpmi"; then
+ BUILD_NAMEPUB_PMI_TRUE=
+ BUILD_NAMEPUB_PMI_FALSE='#'
+else
+ BUILD_NAMEPUB_PMI_TRUE='#'
+ BUILD_NAMEPUB_PMI_FALSE=
+fi
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5
-$as_echo_n "checking size of float... " >&6; }
-if ${ac_cv_sizeof_float+:} false; then :
+# In case the documentation targets are used, find doctext and attempt to
+# find the source for the doctext LaTeX style files. Use "false" if
+# doctext is not found
+# Extract the first word of "doctext", so it can be a program name with args.
+set dummy doctext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_DOCTEXT+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then :
+ case $DOCTEXT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DOCTEXT="$DOCTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_DOCTEXT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+ test -z "$ac_cv_path_DOCTEXT" && ac_cv_path_DOCTEXT="false"
+ ;;
+esac
+fi
+DOCTEXT=$ac_cv_path_DOCTEXT
+if test -n "$DOCTEXT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCTEXT" >&5
+$as_echo "$DOCTEXT" >&6; }
else
- if test "$ac_cv_type_float" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (float)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_float=0
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5
-$as_echo "$ac_cv_sizeof_float" >&6; }
+export DOCTEXT
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_FLOAT $ac_cv_sizeof_float
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
-$as_echo_n "checking size of double... " >&6; }
-if ${ac_cv_sizeof_double+:} false; then :
+# ----------------------------------------------------------------------------
+# Check for C compiler characteristics
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_double" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (double)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_double=0
- fi
-fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
-$as_echo "$ac_cv_sizeof_double" >&6; }
+int
+main ()
+{
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_const=yes
+else
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+$as_echo "#define const /**/" >>confdefs.h
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5
-$as_echo_n "checking size of long double... " >&6; }
-if ${ac_cv_sizeof_long_double+:} false; then :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
+$as_echo_n "checking for working volatile... " >&6; }
+if ${ac_cv_c_volatile+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+volatile int x;
+int * volatile y = (int *) 0;
+return !x && !y;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_volatile=yes
else
- if test "$ac_cv_type_long_double" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long double)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_long_double=0
- fi
+ ac_cv_c_volatile=no
fi
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5
-$as_echo "$ac_cv_sizeof_long_double" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5
+$as_echo "$ac_cv_c_volatile" >&6; }
+if test $ac_cv_c_volatile = no; then
+$as_echo "#define volatile /**/" >>confdefs.h
+fi
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if ${ac_cv_c_restrict+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_restrict=no
+ # The order here caters to the fact that C++ does not require restrict.
+ for ac_kw in __restrict __restrict__ _Restrict restrict; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef int * int_ptr;
+ int foo (int_ptr $ac_kw ip) {
+ return ip[0];
+ }
+int
+main ()
+{
+int s[1];
+ int * $ac_kw t = s;
+ t[0] = 0;
+ return foo(t)
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_restrict" != no && break
+ done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+ *) cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
-else
- if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (void *)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_void_p=0
- fi
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_inline=$ac_kw
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
+if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
+$as_echo_n "checking whether __attribute__ allowed... " >&6; }
+if ${pac_cv_gnu_attr_pure+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(int) __attribute__ ((pure));
int
main ()
{
-
+int a;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
+ pac_cv_gnu_attr_pure=yes
else
- ac_cv_header_stdc=no
+ pac_cv_gnu_attr_pure=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
+$as_echo "$pac_cv_gnu_attr_pure" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
+$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
+if ${pac_cv_gnu_attr_format+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h>
-
+int foo(char *,...) __attribute__ ((format(printf,1,2)));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gnu_attr_format=yes
else
- ac_cv_header_stdc=no
+ pac_cv_gnu_attr_format=no
fi
-rm -f conftest*
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
+$as_echo "$pac_cv_gnu_attr_format" >&6; }
+ if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
+$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
-else
- ac_cv_header_stdc=no
+ fi
fi
-rm -f conftest*
-fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports __builtin_expect" >&5
+$as_echo_n "checking if C compiler supports __builtin_expect... " >&6; }
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
int
main ()
{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
+
+ return __builtin_expect(1, 1) ? 1 : 0
+
+ ;
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+ have_builtin_expect=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+else
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+ have_builtin_expect=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test x$have_builtin_expect = xyes ; then
-for ac_header in stddef.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
-if test "x$ac_cv_header_stddef_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STDDEF_H 1
-_ACEOF
+$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
fi
-done
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5
-$as_echo_n "checking size of wchar_t... " >&6; }
-if ${ac_cv_sizeof_wchar_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-"; then :
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
-else
- if test "$ac_cv_type_wchar_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (wchar_t)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_wchar_t=0
- fi
-fi
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ # Check whether --enable-visibility was given.
+if test "${enable_visibility+set}" = set; then :
+ enableval=$enable_visibility;
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5
-$as_echo "$ac_cv_sizeof_wchar_t" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
-_ACEOF
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $mpich_msg" >&5
+$as_echo_n "checking $mpich_msg... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (disabled)" >&5
+$as_echo "no (disabled)" >&6; }
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports $mpich_add" >&5
+$as_echo_n "checking if $CC supports $mpich_add... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float_int" >&5
-$as_echo_n "checking size of float_int... " >&6; }
-if ${ac_cv_sizeof_float_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float_int))" "ac_cv_sizeof_float_int" "typedef struct { float a; int b; } float_int;
-"; then :
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
-else
- if test "$ac_cv_type_float_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (float_int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_float_int=0
- fi
+int
+main ()
+{
+fprintf(stderr, "Hello, world\n");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if test -s conftest.err; then :
+ $GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ if test "$?" = "0"; then :
+ mpich_add=
fi
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float_int" >&5
-$as_echo "$ac_cv_sizeof_float_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_FLOAT_INT $ac_cv_sizeof_float_int
-_ACEOF
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double_int" >&5
-$as_echo_n "checking size of double_int... " >&6; }
-if ${ac_cv_sizeof_double_int+:} false; then :
- $as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double_int))" "ac_cv_sizeof_double_int" "typedef struct { double a; int b; } double_int;
-"; then :
-
+ mpich_add=
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$mpich_add" = ""; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
else
- if test "$ac_cv_type_double_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (double_int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_double_int=0
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double_int" >&5
-$as_echo "$ac_cv_sizeof_double_int" >&6; }
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $mpich_msg" >&5
+$as_echo_n "checking $mpich_msg... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (via $mpich_add)" >&5
+$as_echo "yes (via $mpich_add)" >&6; }
+ elif test "$enable_visibility" = "yes"; then
+ as_fn_error $? "Symbol visibility support requested but compiler does not seem to support it. Aborting" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $mpich_msg" >&5
+$as_echo_n "checking $mpich_msg... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (unsupported)" >&5
+$as_echo "no (unsupported)" >&6; }
+ fi
+ unset mpich_add
+ fi
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_DOUBLE_INT $ac_cv_sizeof_double_int
+#define HAVE_VISIBILITY $mpich_visibility_define
_ACEOF
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long_int" >&5
-$as_echo_n "checking size of long_int... " >&6; }
-if ${ac_cv_sizeof_long_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long_int))" "ac_cv_sizeof_long_int" "typedef struct { long a; int b; } long_int;
-"; then :
-else
- if test "$ac_cv_type_long_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long_int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_long_int=0
- fi
+# disable visibility if building profiling library
+if test "$NEEDSPLIB" = "yes" ; then
+ VISIBILITY_CFLAGS=""
fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_int" >&5
-$as_echo "$ac_cv_sizeof_long_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_INT $ac_cv_sizeof_long_int
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short_int" >&5
-$as_echo_n "checking size of short_int... " >&6; }
-if ${ac_cv_sizeof_short_int+:} false; then :
+# We need to check for the endianess in order to implement the
+# "external32" representations. This defines "WORDS_BIGENDIAN when
+# the system is bigendian.
+# As of autoconf 2.62, this macro takes an additional argument for systems
+# that can produce object files for either endianess.
+# With the as-always-incompatible-with-every-version autoconf, the
+# arguments for this macro *changed* in 2.62 to
+# (if-bigendian,if-littleendian,unknown,universal)
+# The fourth argument is new.
+# Also note that the definition emitted by autoheader requires that gcc
+# be used to compile the programs - other compilers may not define the
+# non-standard __BIG_ENDIAN__ or __LITTLE_ENDIAN__ CPP names on which
+# autoconf 2.62 now depends.
+byteOrdering=unknown
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short_int))" "ac_cv_sizeof_short_int" "typedef struct { short a; int b; } short_int;
-"; then :
+ ac_cv_c_bigendian=unknown
+ # See if we're dealing with a universal compiler.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
-else
- if test "$ac_cv_type_short_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (short_int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_short_int=0
- fi
-fi
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ # Check for potential -arch flags. It is not universal unless
+ # there are at least two -arch flags with different values.
+ ac_arch=
+ ac_prev=
+ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+ if test -n "$ac_prev"; then
+ case $ac_word in
+ i?86 | x86_64 | ppc | ppc64)
+ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+ ac_arch=$ac_word
+ else
+ ac_cv_c_bigendian=universal
+ break
+ fi
+ ;;
+ esac
+ ac_prev=
+ elif test "x$ac_word" = "x-arch"; then
+ ac_prev=arch
+ fi
+ done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short_int" >&5
-$as_echo "$ac_cv_sizeof_short_int" >&6; }
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+ && LITTLE_ENDIAN)
+ bogus endian macros
+ #endif
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT_INT $ac_cv_sizeof_short_int
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of two_int" >&5
-$as_echo_n "checking size of two_int... " >&6; }
-if ${ac_cv_sizeof_two_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (two_int))" "ac_cv_sizeof_two_int" "typedef struct { int a; int b; } two_int;
-"; then :
-
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_bigendian=yes
else
- if test "$ac_cv_type_two_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (two_int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_two_int=0
- fi
+ ac_cv_c_bigendian=no
fi
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_two_int" >&5
-$as_echo "$ac_cv_sizeof_two_int" >&6; }
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+ bogus endian macros
+ #endif
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_TWO_INT $ac_cv_sizeof_two_int
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ # It does; now see whether it defined to _BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+ not big endian
+ #endif
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long_double_int" >&5
-$as_echo_n "checking size of long_double_int... " >&6; }
-if ${ac_cv_sizeof_long_double_int+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long_double_int))" "ac_cv_sizeof_long_double_int" "typedef struct { long double a; int b;} long_double_int;
-"; then :
-
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_bigendian=yes
else
- if test "$ac_cv_type_long_double_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long_double_int)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_long_double_int=0
- fi
+ ac_cv_c_bigendian=no
fi
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double_int" >&5
-$as_echo "$ac_cv_sizeof_long_double_int" >&6; }
-
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # Compile a test program.
+ if test "$cross_compiling" = yes; then :
+ # Try to guess by grepping values from an object file.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+short int ascii_mm[] =
+ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ short int ascii_ii[] =
+ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ int use_ascii (int i) {
+ return ascii_mm[i] + ascii_ii[i];
+ }
+ short int ebcdic_ii[] =
+ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ short int ebcdic_mm[] =
+ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ int use_ebcdic (int i) {
+ return ebcdic_mm[i] + ebcdic_ii[i];
+ }
+ extern int foo;
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_DOUBLE_INT $ac_cv_sizeof_long_double_int
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+ ;
+ return 0;
+}
_ACEOF
-
-
-
-# sys/bitypes.h defines the int16_t etc. on some systems (e.g., OSF1).
-# Include it when testing for these types
-ac_fn_c_check_header_mongrel "$LINENO" "sys/bitypes.h" "ac_cv_header_sys_bitypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_bitypes_h" = xyes; then :
- use_bitypes="#include <sys/bitypes.h>"
-
-$as_echo "#define HAVE_SYS_BITYPES_H 1" >>confdefs.h
-
+if ac_fn_c_try_compile "$LINENO"; then :
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+ fi
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
-# A C99 compliant compiler should have inttypes.h for fixed-size int types
-for ac_header in inttypes.h stdint.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ ;
+ return 0;
+}
_ACEOF
-
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_c_bigendian=no
+else
+ ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-done
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+ yes)
+ byteOrdering=big;; #(
+ no)
+ byteOrdering=little ;; #(
+ universal)
+ byteOrdering=universal
+ ;; #(
+ *)
+ as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+case $byteOrdering in
+ big)
+ # Nothing to do - the c_bigendian macro takes care of it
+ :
+ ;;
+ little)
-# Check for types
-ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t"
-case $ac_cv_c_int8_t in #(
- no|yes) ;; #(
- *)
+$as_echo "#define WORDS_LITTLEENDIAN 1" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define int8_t $ac_cv_c_int8_t
-_ACEOF
-;;
-esac
+ ;;
+ universal)
-ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t"
-case $ac_cv_c_int16_t in #(
- no|yes) ;; #(
- *)
+$as_echo "#define WORDS_UNIVERSAL_ENDIAN 1" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define int16_t $ac_cv_c_int16_t
-_ACEOF
-;;
+ ;;
+ unknown)
+ as_fn_error $? "Unable to determine endianess" "$LINENO" 5
+ ;;
esac
-ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
-case $ac_cv_c_int32_t in #(
- no|yes) ;; #(
- *)
+# We only need this test if we are using Fortran
+if test "$enable_f77" ; then
-cat >>confdefs.h <<_ACEOF
-#define int32_t $ac_cv_c_int32_t
-_ACEOF
-;;
-esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler allows unaligned doubles" >&5
+$as_echo_n "checking whether C compiler allows unaligned doubles... " >&6; }
+if ${pac_cv_prog_c_unaligned_doubles+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t"
-case $ac_cv_c_int64_t in #(
- no|yes) ;; #(
- *)
+if test "$cross_compiling" = yes; then :
+ pac_cv_prog_c_unaligned_doubles="unknown"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+void fetch_double( v )
+double *v;
+{
+*v = 1.0;
+}
+int main( argc, argv )
+int argc;
+char **argv;
+{
+int p[4];
+double *p_val;
+fetch_double( (double *)&(p[0]) );
+p_val = (double *)&(p[0]);
+if (*p_val != 1.0) return 1;
+fetch_double( (double *)&(p[1]) );
+p_val = (double *)&(p[1]);
+if (*p_val != 1.0) return 1;
+return 0;
+}
-cat >>confdefs.h <<_ACEOF
-#define int64_t $ac_cv_c_int64_t
_ACEOF
-;;
-esac
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_prog_c_unaligned_doubles="yes"
+else
+ pac_cv_prog_c_unaligned_doubles="no"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_c_unaligned_doubles" >&5
+$as_echo "$pac_cv_prog_c_unaligned_doubles" >&6; }
-# Temporary issue in autoconf integer type checking (remove when
-# autoconf fixes this or provides a workaround for it)
-if test "$ac_cv_c_int8_t" != no ; then
+if test "X$pac_cv_prog_c_unaligned_doubles" = "no" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your C compiler $CC does not support unaligned accesses
+to doubles. This is required for interoperation with
+Fortran (the Fortran standard requires it).
+You may need to specify an additional argument to your C compiler to
+force it to allow unaligned accesses." >&5
+$as_echo "$as_me: WARNING: Your C compiler $CC does not support unaligned accesses
+to doubles. This is required for interoperation with
+Fortran (the Fortran standard requires it).
+You may need to specify an additional argument to your C compiler to
+force it to allow unaligned accesses." >&2;}
+fi
-$as_echo "#define HAVE_INT8_T 1" >>confdefs.h
fi
-if test "$ac_cv_c_int16_t" != no ; then
+# Check for __func__ (defined in C99) or __FUNCTION__ (defined in older GCC)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports __func__" >&5
+$as_echo_n "checking whether $CC supports __func__... " >&6; }
+if ${pac_cv_cc_has___func__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-$as_echo "#define HAVE_INT16_T 1" >>confdefs.h
+int
+main ()
+{
+const char *cp = __func__;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_cc_has___func__=yes
+else
+ pac_cv_cc_has___func__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cc_has___func__" >&5
+$as_echo "$pac_cv_cc_has___func__" >&6; }
+if test "$pac_cv_cc_has___func__" != "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports __FUNCTION__" >&5
+$as_echo_n "checking whether $CC supports __FUNCTION__... " >&6; }
+if ${pac_cv_cc_has___FUNCTION__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int
+main ()
+{
+const char *cp = __FUNCTION__;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_cc_has___FUNCTION__=yes
+else
+ pac_cv_cc_has___FUNCTION__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cc_has___FUNCTION__" >&5
+$as_echo "$pac_cv_cc_has___FUNCTION__" >&6; }
fi
-if test "$ac_cv_c_int32_t" != no ; then
-$as_echo "#define HAVE_INT32_T 1" >>confdefs.h
+# ----------------------------------------------------------------------------
+# Check on support for long double and long long types. Do this before the
+# structure alignment test because it will test for including those
+# types as well. In addition, allow the device to suppress support for these
+# optional C types by setting MPID_NO_LONG_DOUBLE and/or MPID_NO_LONG_LONG
+# to yes.
+if test "$MPID_NO_LONG_DOUBLE" != "yes" && test "X$enable_long_double" != "Xno" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double is supported" >&5
+$as_echo_n "checking whether long double is supported... " >&6; }
+if ${pac_cv_have_long_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+long double a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_long_double=yes
+else
+ pac_cv_have_long_double=no
fi
-if test "$ac_cv_c_int64_t" != no ; then
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_long_double" >&5
+$as_echo "$pac_cv_have_long_double" >&6; }
+ if test "$pac_cv_have_long_double" = "yes" ; then
-$as_echo "#define HAVE_INT64_T 1" >>confdefs.h
+$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+ fi
fi
+if test "$MPID_NO_LONG_LONG" != "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long long is supported" >&5
+$as_echo_n "checking whether long long is supported... " >&6; }
+if ${pac_cv_have_long_long+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-# The following make these definitions:
-# define _UINT<n>_T 1
-# if uint<n>_t is available. E.g., define _UINT8_T as 1 if uint8_t is available
-# if not available, define uint<n>_t as the related C type, e.g.,
-# define uint8_t unsigned char
-#
-ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t"
-case $ac_cv_c_uint8_t in #(
- no|yes) ;; #(
- *)
-
-$as_echo "#define _UINT8_T 1" >>confdefs.h
-
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-cat >>confdefs.h <<_ACEOF
-#define uint8_t $ac_cv_c_uint8_t
+int
+main ()
+{
+long long a;
+ ;
+ return 0;
+}
_ACEOF
-;;
- esac
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_long_long=yes
+else
+ pac_cv_have_long_long=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_long_long" >&5
+$as_echo "$pac_cv_have_long_long" >&6; }
+ if test "$pac_cv_have_long_long" = "yes" ; then
-ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t"
-case $ac_cv_c_uint16_t in #(
- no|yes) ;; #(
- *)
+$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+ fi
+fi
+# ----------------------------------------------------------------------------
+# Get default structure alignment for integers
-cat >>confdefs.h <<_ACEOF
-#define uint16_t $ac_cv_c_uint16_t
-_ACEOF
-;;
- esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct integer alignment" >&5
+$as_echo_n "checking for max C struct integer alignment... " >&6; }
+if ${pac_cv_c_max_integer_align+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
-case $ac_cv_c_uint32_t in #(
- no|yes) ;; #(
- *)
+if test "$cross_compiling" = yes; then :
+ pac_cv_c_max_integer_align="$CROSS_ALIGN_STRUCT_INT"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-$as_echo "#define _UINT32_T 1" >>confdefs.h
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ struct { char a; int b; } char_int;
+ struct { char a; short b; } char_short;
+ struct { char a; long b; } char_long;
+ struct { char a; int b; char c; } char_int_char;
+ struct { char a; short b; char c; } char_short_char;
+#ifdef HAVE_LONG_LONG_INT
+ struct { long long int a; char b; } lli_c;
+ struct { char a; long long int b; } c_lli;
+#endif
+ int size, extent, extent2;
+ /* assume max integer alignment isn't 8 if we don't have
+ * an eight-byte value :)
+ */
+#ifdef HAVE_LONG_LONG_INT
+ if (sizeof(int) < 8 && sizeof(long) < 8 && sizeof(long long int) < 8)
+ is_eight = 0;
+#else
+ if (sizeof(int) < 8 && sizeof(long) < 8) is_eight = 0;
+#endif
-cat >>confdefs.h <<_ACEOF
-#define uint32_t $ac_cv_c_uint32_t
-_ACEOF
-;;
- esac
+ size = sizeof(char) + sizeof(int);
+ extent = sizeof(char_int);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0) is_four = 0;
+ if (sizeof(int) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_int",size,extent);
-ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
-case $ac_cv_c_uint64_t in #(
- no|yes) ;; #(
- *)
+ size = sizeof(char) + sizeof(short);
+ extent = sizeof(char_short);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if (sizeof(short) == 4 && (extent % 4) != 0) is_four = 0;
+ if (sizeof(short) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_short",size,extent);
-$as_echo "#define _UINT64_T 1" >>confdefs.h
+ size = sizeof(char) + sizeof(long);
+ extent = sizeof(char_long);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0) is_four = 0;
+ if (sizeof(long) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_long",size,extent);
+#ifdef HAVE_LONG_LONG_INT
+ size = sizeof(char) + sizeof(long long int);
+ extent = sizeof(lli_c);
+ extent2 = sizeof(c_lli);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(long long int) >= 8 && (extent % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+#endif
-cat >>confdefs.h <<_ACEOF
-#define uint64_t $ac_cv_c_uint64_t
-_ACEOF
-;;
- esac
+ size = sizeof(char) + sizeof(int) + sizeof(char);
+ extent = sizeof(char_int_char);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0) is_four = 0;
+ if (sizeof(int) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_int_char",size,extent);
+ size = sizeof(char) + sizeof(short) + sizeof(char);
+ extent = sizeof(char_short_char);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if (sizeof(short) == 4 && (extent % 4) != 0) is_four = 0;
+ if (sizeof(short) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_short_char",size,extent);
-# Temporary issue in autoconf integer type checking (remove when
-# autoconf fixes this or provides a workaround for it)
-if test "$ac_cv_c_uint8_t" != no ; then
+ /* If aligned mod 8, it will be aligned mod 4 */
+ if (is_eight) { is_four = 0; is_two = 0; }
-$as_echo "#define HAVE_UINT8_T 1" >>confdefs.h
+ if (is_four) is_two = 0;
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_c_max_integer_align=`cat ctest.out`
+else
+ pac_cv_c_max_integer_align="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-if test "$ac_cv_c_uint16_t" != no ; then
-$as_echo "#define HAVE_UINT16_T 1" >>confdefs.h
+rm -f ctest.out
fi
-if test "$ac_cv_c_uint32_t" != no ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_integer_align" >&5
+$as_echo "$pac_cv_c_max_integer_align" >&6; }
+if test -z "$pac_cv_c_max_integer_align" ; then
+ pac_cv_c_max_integer_align="unknown"
+fi
-$as_echo "#define HAVE_UINT32_T 1" >>confdefs.h
+if test "$pac_cv_c_max_integer_align" = "packed" ; then
+ pac_cv_c_struct_align_nr=1
+elif test "$pac_cv_c_max_integer_align" = "two" ; then
+ pac_cv_c_struct_align_nr=2
+elif test "$pac_cv_c_max_integer_align" = "four" ; then
+ pac_cv_c_struct_align_nr=4
+elif test "$pac_cv_c_max_integer_align" = "eight" ; then
+ pac_cv_c_struct_align_nr=8
fi
-if test "$ac_cv_c_uint64_t" != no ; then
-$as_echo "#define HAVE_UINT64_T 1" >>confdefs.h
+if test -n "$pac_cv_c_struct_align_nr" ; then
-fi
+cat >>confdefs.h <<_ACEOF
+#define HAVE_MAX_INTEGER_ALIGNMENT $pac_cv_c_struct_align_nr
+_ACEOF
-# Other C99 types.
-for ac_header in stdbool.h complex.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_MAX_STRUCT_ALIGNMENT $pac_cv_c_struct_align_nr
_ACEOF
fi
+# Get default structure alignment for floating point types
-done
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of _Bool" >&5
-$as_echo_n "checking size of _Bool... " >&6; }
-if ${ac_cv_sizeof__Bool+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct floating point alignment" >&5
+$as_echo_n "checking for max C struct floating point alignment... " >&6; }
+if ${pac_cv_c_max_fp_align+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Bool))" "ac_cv_sizeof__Bool" "
-#ifdef HAVE_STDBOOL_H
-#include <stdbool.h>
-#endif
-
-"; then :
+if test "$cross_compiling" = yes; then :
+ pac_cv_c_max_fp_align="$CROSS_ALIGN_STRUCT_FP"
else
- if test "$ac_cv_type__Bool" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (_Bool)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof__Bool=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Bool" >&5
-$as_echo "$ac_cv_sizeof__Bool" >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ int is_sixteen = 1;
+ struct { char a; float b; } char_float;
+ struct { float b; char a; } float_char;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+#ifdef HAVE_LONG_DOUBLE
+ struct { char a; long double b; } char_long_double;
+ struct { long double b; char a; } long_double_char;
+ struct { long double a; int b; char c; } long_double_int_char;
+#endif
+ int size, extent1, extent2;
+ size = sizeof(char) + sizeof(float);
+ extent1 = sizeof(char_float);
+ extent2 = sizeof(float_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_float",size,extent1);
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF__BOOL $ac_cv_sizeof__Bool
-_ACEOF
+ size = sizeof(char) + sizeof(double);
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_double",size,extent1);
+#ifdef HAVE_LONG_DOUBLE
+ size = sizeof(char) + sizeof(long double);
+ extent1 = sizeof(char_long_double);
+ extent2 = sizeof(long_double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0
+ && (extent2 % 16) != 0) is_sixteen = 0;
+ DBG("char_long-double",size,extent1);
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float _Complex" >&5
-$as_echo_n "checking size of float _Complex... " >&6; }
-if ${ac_cv_sizeof_float__Complex+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float _Complex))" "ac_cv_sizeof_float__Complex" "
-#ifdef HAVE_COMPLEX_H
-#include <complex.h>
+ extent1 = sizeof(long_double_int_char);
+ if ( (extent1 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0) is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0) is_sixteen = 0;
+#else
+ is_sixteen = 0;
#endif
-"; then :
-
-else
- if test "$ac_cv_type_float__Complex" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (float _Complex)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_float__Complex=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float__Complex" >&5
-$as_echo "$ac_cv_sizeof_float__Complex" >&6; }
+ if (is_sixteen) { is_eight = 0; is_four = 0; is_two = 0; }
+ if (is_eight) { is_four = 0; is_two = 0; }
+ if (is_four) is_two = 0;
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_FLOAT__COMPLEX $ac_cv_sizeof_float__Complex
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ if (is_sixteen) fprintf( cf, "sixteen\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}
_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double _Complex" >&5
-$as_echo_n "checking size of double _Complex... " >&6; }
-if ${ac_cv_sizeof_double__Complex+:} false; then :
- $as_echo_n "(cached) " >&6
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_c_max_fp_align=`cat ctest.out`
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double _Complex))" "ac_cv_sizeof_double__Complex" "
-#ifdef HAVE_COMPLEX_H
-#include <complex.h>
-#endif
+ pac_cv_c_max_fp_align="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
-"; then :
+rm -f ctest.out
-else
- if test "$ac_cv_type_double__Complex" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (double _Complex)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_double__Complex=0
- fi
fi
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_fp_align" >&5
+$as_echo "$pac_cv_c_max_fp_align" >&6; }
+if test -z "$pac_cv_c_max_fp_align" ; then
+ pac_cv_c_max_fp_align="unknown"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double__Complex" >&5
-$as_echo "$ac_cv_sizeof_double__Complex" >&6; }
+if test "$pac_cv_c_max_fp_align" = "packed" ; then
+ pac_cv_c_fp_align_nr=1
+elif test "$pac_cv_c_max_fp_align" = "two" ; then
+ pac_cv_c_fp_align_nr=2
+elif test "$pac_cv_c_max_fp_align" = "four" ; then
+ pac_cv_c_fp_align_nr=4
+elif test "$pac_cv_c_max_fp_align" = "eight" ; then
+ pac_cv_c_fp_align_nr=8
+elif test "$pac_cv_c_max_fp_align" = "sixteen" ; then
+ pac_cv_c_fp_align_nr=16
+elif test "$pac_cv_c_max_fp_align" = "largest" ; then
+ as_fn_error $? "Configure detected unsupported structure alignment rules." "$LINENO" 5
+fi
+
+if test -n "$pac_cv_c_fp_align_nr" ; then
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_DOUBLE__COMPLEX $ac_cv_sizeof_double__Complex
+#define HAVE_MAX_FP_ALIGNMENT $pac_cv_c_fp_align_nr
_ACEOF
+fi
-if test "X$pac_cv_have_long_double" = "Xyes"; then :
+# Test for the alignment of structs containing only long doubles.
+if test "$pac_cv_have_long_double" = yes ; then
+ # Check for alignment of just float and double (no long doubles)
- # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double _Complex" >&5
-$as_echo_n "checking size of long double _Complex... " >&6; }
-if ${ac_cv_sizeof_long_double__Complex+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct alignment of structs with doubles" >&5
+$as_echo_n "checking for max C struct alignment of structs with doubles... " >&6; }
+if ${pac_cv_c_max_double_fp_align+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double _Complex))" "ac_cv_sizeof_long_double__Complex" "
-#ifdef HAVE_COMPLEX_H
-#include <complex.h>
-#endif
-
-"; then :
+if test "$cross_compiling" = yes; then :
+ pac_cv_c_max_double_fp_align="$CROSS_ALIGN_STRUCT_DOUBLE_FP"
else
- if test "$ac_cv_type_long_double__Complex" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long double _Complex)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_long_double__Complex=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double__Complex" >&5
-$as_echo "$ac_cv_sizeof_long_double__Complex" >&6; }
-
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ struct { char a; float b; } char_float;
+ struct { float b; char a; } float_char;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+ int size, extent1, extent2;
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_DOUBLE__COMPLEX $ac_cv_sizeof_long_double__Complex
-_ACEOF
+ size = sizeof(char) + sizeof(float);
+ extent1 = sizeof(char_float);
+ extent2 = sizeof(float_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_float",size,extent1);
+ size = sizeof(char) + sizeof(double);
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_double",size,extent1);
+ if (is_eight) { is_four = 0; is_two = 0; }
-fi
+ if (is_four) is_two = 0;
-# we need really could just use the result of AC_CHECK_SIZEOF, but having a
-# HAVE_typename macro is useful for consistency
-ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
-if test "x$ac_cv_type__Bool" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE__BOOL 1
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}
_ACEOF
-
-
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_c_max_double_fp_align=`cat ctest.out`
+else
+ pac_cv_c_max_double_fp_align="unknown"
fi
-ac_fn_c_check_type "$LINENO" "float _Complex" "ac_cv_type_float__Complex" "$ac_includes_default"
-if test "x$ac_cv_type_float__Complex" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_FLOAT__COMPLEX 1
-_ACEOF
-
-
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-ac_fn_c_check_type "$LINENO" "double _Complex" "ac_cv_type_double__Complex" "$ac_includes_default"
-if test "x$ac_cv_type_double__Complex" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DOUBLE__COMPLEX 1
-_ACEOF
+rm -f ctest.out
fi
-
-
-if test "X$pac_cv_have_long_double" = "Xyes"; then :
-
- ac_fn_c_check_type "$LINENO" "long double _Complex" "ac_cv_type_long_double__Complex" "$ac_includes_default"
-if test "x$ac_cv_type_long_double__Complex" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LONG_DOUBLE__COMPLEX 1
-_ACEOF
-
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_double_fp_align" >&5
+$as_echo "$pac_cv_c_max_double_fp_align" >&6; }
+if test -z "$pac_cv_c_max_double_fp_align" ; then
+ pac_cv_c_max_double_fp_align="unknown"
fi
-fi
-
-# Generate a hex version of the size of each type
-for type in short int long long_long float double long_double wchar_t \
- float_int double_int long_int short_int two_int long_double_int \
- _Bool float__Complex double__Complex long_double__Complex ; do
- eval len=\$ac_cv_sizeof_$type
- if test -z "$len" ; then
- len=0
- # Check for sizes from the CHECK_SIZEOF_DERIVED macro
- eval pclen=\$ac_cv_sizeof_$type
- if test -n "$pclen" ; then
- len=$pclen
- else
- # check for a non-optional type
- if test $type != long_long -a \
- $type != long_double -a \
- $type != long_double_int -a \
- $type != _Bool -a \
- $type != float__Complex -a \
- $type != double__Complex -a \
- $type != long_double__Complex ; then
- as_fn_error $? "Configure was unable to determine the size of $type ; if cross compiling,
-use the environment variables CROSS_SIZEOF_typename, e.g., CROSS_SIZEOF_SHORT,
-or use the --with-cross=file configure option to specify a file containing
-Bourne (sh) shell assignments to CROSS_SIZEOF_typename for all datatype
-types. The program maint/getcross.c can be compiled and run on the target
-system; this program outputs an appropriate file for the --with-cross option" "$LINENO" 5
- fi
- fi
- fi
- #
- # Take len and turn it into two hex digits (there are 8 bits available
- # in the built-in datatype handle for the length; see
- # src/mpid/common/datatype/mpid_datatype.h)
- if test "$len" -gt 255 ; then
- as_fn_error $? "Type sizes greater than 255 bytes are not supported (type $type is $len bytes)" "$LINENO" 5
- fi
- tmplen=$len
- hexlen=""
- while test $tmplen -gt 0 ; do
- lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
- case $lowdigit in
- 10) char=a ;;
- 11) char=b ;;
- 12) char=c ;;
- 13) char=d ;;
- 14) char=e ;;
- 15) char=f ;;
- *) char=$lowdigit ;;
- esac
- hexlen="$char$hexlen"
- tmplen=`expr $tmplen / 16`
- done
- if test $len -lt 16 ; then
- hexlen="0$hexlen"
- fi
- if test $len = 0 ; then
- # This sometimes happens for wchar_t
- hexlen="00";
- fi
- eval len_$type=$hexlen
-done
-# By definition, sizeof char is 1
-MPI_CHAR="0x4c000101"
-MPI_UNSIGNED_CHAR="0x4c000102"
-MPI_SHORT="0x4c00${len_short}03"
-MPI_UNSIGNED_SHORT="0x4c00${len_short}04"
-MPI_INT="0x4c00${len_int}05"
-MPI_UNSIGNED_INT="0x4c00${len_int}06"
-MPI_LONG="0x4c00${len_long}07"
-MPI_UNSIGNED_LONG="0x4c00${len_long}08"
-if test "$len_long_long" != 0 -a "$MPID_NO_LONG_LONG" != yes ; then
- MPI_LONG_LONG="0x4c00${len_long_long}09"
-else
- MPI_LONG_LONG=MPI_DATATYPE_NULL;
-fi
-MPI_FLOAT="0x4c00${len_float}0a"
-MPI_DOUBLE="0x4c00${len_double}0b"
-if test "$len_long_double" != 0 -a "$MPID_NO_LONG_DOUBLE" != yes ; then
- MPI_LONG_DOUBLE="0x4c00${len_long_double}0c"
-else
- MPI_LONG_DOUBLE=MPI_DATATYPE_NULL
-fi
-# If you change MPI_BYTE, you must change it in src/binding/fortran/mpif_h/buildiface
-MPI_BYTE="0x4c00010d"
-MPI_WCHAR="0x4c00${len_wchar_t}0e"
-MPI_PACKED="0x4c00010f"
-MPI_LB="0x4c000010"
-MPI_UB="0x4c000011"
-#
-# These should define the mixed types *only* for contiguous data.
-# For example, MPI_SHORT_INT may have a gap; it will need to be defined
-# as a derived type instead. For IA32, this only affects short_int.
-MPI_2INT="0x4c00${len_two_int}16"
-#
-# For now we aren't being too clever about figuring out which of these
-# are in fact contiguous, so these are all allocated as "real" types.
-#
-# These values correspond to direct types 0..5.
-#
-MPI_FLOAT_INT="0x8c000000"
-MPI_DOUBLE_INT="0x8c000001"
-MPI_LONG_INT="0x8c000002"
-MPI_SHORT_INT="0x8c000003"
-if test "$MPID_NO_LONG_DOUBLE" != yes ; then
- MPI_LONG_DOUBLE_INT="0x8c000004"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for max C struct floating point alignment with long doubles" >&5
+$as_echo_n "checking for max C struct floating point alignment with long doubles... " >&6; }
+if ${pac_cv_c_max_longdouble_fp_align+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- MPI_LONG_DOUBLE_INT=MPI_DATATYPE_NULL
-fi
-# 2 additional predefined types named in MPI-2
-MPI_SIGNED_CHAR="0x4c000118"
-if test "$len_long_long" != 0 -a "$MPID_NO_LONG_LONG" != yes ; then
- MPI_UNSIGNED_LONG_LONG="0x4c00${len_long_long}19"
+if test "$cross_compiling" = yes; then :
+ pac_cv_c_max_longdouble_fp_align="$CROSS_ALIGN_STRUCT_LONGDOUBLE_FP"
else
- MPI_UNSIGNED_LONG_LONG=MPI_DATATYPE_NULL
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# FIXME: Leftover from separate fortran system
-## Export the basic C types so that the Fortran system can use them
-#export MPI_CHAR
-#export MPI_SHORT
-#export MPI_INT
-#export MPI_LONG
-#export MPI_LONG_LONG
-#export MPI_FLOAT
-#export MPI_DOUBLE
-#export MPI_LONG_DOUBLE
-#
-# Size-specific types. Initialize as NULL
-MPI_REAL4=MPI_DATATYPE_NULL
-MPI_REAL8=MPI_DATATYPE_NULL
-MPI_REAL16=MPI_DATATYPE_NULL
-MPI_COMPLEX8=MPI_DATATYPE_NULL
-MPI_COMPLEX16=MPI_DATATYPE_NULL
-MPI_COMPLEX32=MPI_DATATYPE_NULL
-MPI_INTEGER1=MPI_DATATYPE_NULL
-MPI_INTEGER2=MPI_DATATYPE_NULL
-MPI_INTEGER4=MPI_DATATYPE_NULL
-MPI_INTEGER8=MPI_DATATYPE_NULL
-MPI_INTEGER16=MPI_DATATYPE_NULL
-
-
-
-
-
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ int is_sixteen = 1;
+ struct { char a; long double b; } char_long_double;
+ struct { long double b; char a; } long_double_char;
+ struct { long double a; int b; char c; } long_double_int_char;
+ int size, extent1, extent2;
+ size = sizeof(char) + sizeof(long double);
+ extent1 = sizeof(char_long_double);
+ extent2 = sizeof(long_double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0
+ && (extent2 % 16) != 0) is_sixteen = 0;
+ DBG("char_long-double",size,extent1);
+ extent1 = sizeof(long_double_int_char);
+ if ( (extent1 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0) is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0) is_sixteen = 0;
+ if (is_sixteen) { is_eight = 0; is_four = 0; is_two = 0; }
+ if (is_eight) { is_four = 0; is_two = 0; }
-export MPI_REAL4
-export MPI_REAL8
-export MPI_REAL16
-export MPI_COMPLEX8
-export MPI_COMPLEX16
-export MPI_COMPLEX32
-export MPI_INTEGER1
-export MPI_INTEGER2
-export MPI_INTEGER4
-export MPI_INTEGER8
-export MPI_INTEGER16
-#
-# Try to find corresponding types for the size-specific types.
-#
-# Assume that the float/double/long double are simply spaced
-# Datatypes used up through 26 in Fortran
-# 27,28,29,2a,2b,2c
-if test "$ac_cv_sizeof_float" = "4" ; then
- MPI_REAL4="0x4c000427"
- MPI_COMPLEX8="0x4c000828"
- MPIR_REAL4_CTYPE=float
-fi
-if test "$ac_cv_sizeof_double" = "8" ; then
- MPI_REAL8="0x4c000829"
- MPI_COMPLEX16="0x4c00102a"
- MPIR_REAL8_CTYPE=double
-fi
-if test "$ac_cv_sizeof_long_double" = "16" -a "$MPID_NO_LONG_DOUBLE" != yes ; then
- MPI_REAL16="0x4c00102b"
- MPI_COMPLEX32="0x4c00202c"
- MPIR_REAL16_CTYPE="long double"
-fi
-if test -n "$MPIR_REAL4_CTYPE" ; then
+ if (is_four) is_two = 0;
-cat >>confdefs.h <<_ACEOF
-#define MPIR_REAL4_CTYPE $MPIR_REAL4_CTYPE
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ if (is_sixteen) fprintf( cf, "sixteen\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}
_ACEOF
-
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_c_max_longdouble_fp_align=`cat ctest.out`
+else
+ pac_cv_c_max_longdouble_fp_align="unknown"
fi
-if test -n "$MPIR_REAL8_CTYPE" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define MPIR_REAL8_CTYPE $MPIR_REAL8_CTYPE
-_ACEOF
-
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-if test -n "$MPIR_REAL16_CTYPE" ; then
-cat >>confdefs.h <<_ACEOF
-#define MPIR_REAL16_CTYPE $MPIR_REAL16_CTYPE
-_ACEOF
+rm -f ctest.out
fi
-# For complex 8/16/32, we assume that these are 2 consequetive real4/8/16
-#
-# Search for the integer types
-for type in char short int long long_long ; do
- # ctype is a valid C type which we can use to declare a C version of
- # this item
- ctype=`echo $type | sed 's/_/ /'`
- eval len=\$ac_cv_sizeof_$type
- if test -n "$len" ; then
- case $len in
- 1) if test "$MPI_INTEGER1" = "MPI_DATATYPE_NULL" ; then
- MPI_INTEGER1="0x4c00012d"
- MPIR_INTEGER1_CTYPE="$ctype"
- fi
- ;;
- 2) if test "$MPI_INTEGER2" = "MPI_DATATYPE_NULL" ; then
- MPI_INTEGER2="0x4c00022f"
- MPIR_INTEGER2_CTYPE="$ctype"
- fi
- ;;
- 4) if test "$MPI_INTEGER4" = "MPI_DATATYPE_NULL" ; then
- MPI_INTEGER4="0x4c000430"
- MPIR_INTEGER4_CTYPE="$ctype"
- fi
- ;;
- 8) if test "$MPI_INTEGER8" = "MPI_DATATYPE_NULL" ; then
- MPI_INTEGER8="0x4c000831"
- MPIR_INTEGER8_CTYPE="$ctype"
- fi
- ;;
- 16) if test "$MPI_INTEGER16" = "MPI_DATATYPE_NULL" ; then
- MPI_INTEGER16="0x4c001032"
- MPIR_INTEGER16_CTYPE="$ctype"
- fi
- ;;
- *)
- ;;
- esac
- fi
-done
-#
-# Add the definitions of these types
-if test -n "$MPIR_INTEGER1_CTYPE" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define MPIR_INTEGER1_CTYPE $MPIR_INTEGER1_CTYPE
-_ACEOF
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_max_longdouble_fp_align" >&5
+$as_echo "$pac_cv_c_max_longdouble_fp_align" >&6; }
+if test -z "$pac_cv_c_max_longdouble_fp_align" ; then
+ pac_cv_c_max_longdouble_fp_align="unknown"
fi
-if test -n "$MPIR_INTEGER2_CTYPE" ; then
-cat >>confdefs.h <<_ACEOF
-#define MPIR_INTEGER2_CTYPE $MPIR_INTEGER2_CTYPE
-_ACEOF
-
-fi
-if test -n "$MPIR_INTEGER4_CTYPE" ; then
+ # FIXME: If this alignment is not the same as that for all float types,
+ # we need to do something else in the alignment rule code.
+ if test "$pac_cv_c_max_fp_align" != "$pac_cv_c_max_longdouble_fp_align" -o \
+ "$pac_cv_c_max_fp_align" != "$pac_cv_c_max_double_fp_align" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Structures containing long doubles may be aligned differently from structures with floats or longs. MPICH does not handle this case automatically and you should avoid assumed extents for structures containing float types." >&5
+$as_echo "$as_me: WARNING: Structures containing long doubles may be aligned differently from structures with floats or longs. MPICH does not handle this case automatically and you should avoid assumed extents for structures containing float types." >&2;}
-cat >>confdefs.h <<_ACEOF
-#define MPIR_INTEGER4_CTYPE $MPIR_INTEGER4_CTYPE
-_ACEOF
+ double_align=-1
+ case $pac_cv_c_max_double_fp_align in
+ packed) double_align=1 ;;
+ two) double_align=2 ;;
+ four) double_align=4 ;;
+ eight) double_align=8 ;;
+ esac
+ longdouble_align=-1
+ case $pac_cv_c_max_longdouble_fp_align in
+ packed) longdouble_align=1 ;;
+ two) longdouble_align=2 ;;
+ four) longdouble_align=4 ;;
+ eight) longdouble_align=8 ;;
+ sixteen)longdouble_align=16 ;;
+ esac
-fi
-if test -n "$MPIR_INTEGER8_CTYPE" ; then
cat >>confdefs.h <<_ACEOF
-#define MPIR_INTEGER8_CTYPE $MPIR_INTEGER8_CTYPE
+#define HAVE_MAX_DOUBLE_FP_ALIGNMENT $double_align
_ACEOF
-fi
-if test -n "$MPIR_INTEGER16_CTYPE" ; then
cat >>confdefs.h <<_ACEOF
-#define MPIR_INTEGER16_CTYPE $MPIR_INTEGER16_CTYPE
+#define HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT $longdouble_align
_ACEOF
+ fi
fi
-# ----------------------------------------------------------------------------
-
-# C99 types
-# The predefined types must be distinct types (as opposed to aliases to MPI_INT
-# or MPI_WHATEVER) in order to correctly support MPI_Type_{get,set}_name.
-#
-# FIXME the "basic id" portion should be automatically assigned. It's too easy
-# to have a conflict when this is done by hand.
-#
-# Because we make up a matching type for the fixed-width types if one doesn't
-# exist, we don't ever set these to MPI_DATATYPE_NULL. If we come across a
-# platform where 64-bit sizes aren't supported just add a test like the other
-# types.
-MPI_INT8_T=0x4c000137
-MPI_INT16_T=0x4c000238
-MPI_INT32_T=0x4c000439
-MPI_INT64_T=0x4c00083a
-MPI_UINT8_T=0x4c00013b
-MPI_UINT16_T=0x4c00023c
-MPI_UINT32_T=0x4c00043d
-MPI_UINT64_T=0x4c00083e
-
-# The compiler may or may not support these types, depending on its level of C99
-# compliance. We check for each one individually before assigning a handle
-# number.
-MPI_C_BOOL=MPI_DATATYPE_NULL
-MPI_C_FLOAT_COMPLEX=MPI_DATATYPE_NULL
-MPI_C_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
-MPI_C_LONG_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
-if test ${len__Bool} != 0 ; then
- MPI_C_BOOL=0x4c00${len__Bool}3f
-fi
-if test ${len_float__Complex} != 0 ; then
- MPI_C_FLOAT_COMPLEX=0x4c00${len_float__Complex}40
-fi
-if test ${len_double__Complex} != 0 ; then
- MPI_C_DOUBLE_COMPLEX=0x4c00${len_double__Complex}41
-fi
-if test ${len_long_double__Complex} != 0 ; then
- MPI_C_LONG_DOUBLE_COMPLEX=0x4c00${len_long_double__Complex}42
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-export MPI_INT8_T
-export MPI_INT16_T
-export MPI_INT32_T
-export MPI_INT64_T
-export MPI_UINT8_T
-export MPI_UINT16_T
-export MPI_UINT32_T
-export MPI_UINT64_T
-export MPI_C_BOOL
-export MPI_C_FLOAT_COMPLEX
-export MPI_C_DOUBLE_COMPLEX
-export MPI_C_LONG_DOUBLE_COMPLEX
-
-
-# ----------------------------------------------------------------------------
-# We can now create the Fortran versions of the datatype values, along with
-# some of the other datatype-dependent sizes
-
-# There are two parts to handling the datatypes:
-# Convert the C datatype values to their Fortran equivalent. This
-# involves converting the hex values for the C version into decimal
-# since standard Fortran does not have hex constants
-#
-# Determine the existence of the Fortran 'sized' types and set those
-# values.
-#
-# In addition, we need to look at a few additional constants that depend
-# on how the compiler sizes some datatypes. These are:
-# STATUS_SIZE, INTEGER_KIND, ADDRESS_KIND, and OFFSET_KIND
-#
-# ----------------------------------------------------------------------------
-if test "$enable_f77" = yes ; then
- # Up to size checking code in master configure.ac (where it tries to
- # find the matching C sizes) as part of defining mpi_integer8 etc.
- # The results are available in pac_cv_sizeof_f77_<type>
- # Size is 0 if unknown or unavailable (or cross-compiling)
- # Due to limitations in autoconf, we cannot put these into a loop.
- # We also check integer to find the type of MPI_Fint
- #
- # Cross-compilation results can be included with the --with-cross=file
- # option.
- CROSS_F77_SIZEOF_INTEGER=${CROSS_F77_SIZEOF_INTEGER:-0}
- CROSS_F77_SIZEOF_REAL=${CROSS_F77_SIZEOF_REAL:-0}
- CROSS_F77_SIZEOF_DOUBLE_PRECISION=${CROSS_F77_SIZEOF_DOUBLE_PRECISION:-0}
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of Fortran type integer" >&5
-$as_echo_n "checking for size of Fortran type integer... " >&6; }
-if ${pac_cv_f77_sizeof_integer+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
-#include <stdio.h>
-#endif
-#ifdef F77_NAME_UPPER
-#define cisize_ CISIZE
-#define isize_ ISIZE
-#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
-#define cisize_ cisize
-#define isize_ isize
-#endif
-int cisize_(char *,char*);
-int cisize_(char *i1p, char *i2p) {
- int isize_val=0;
- FILE *f = fopen("conftestval", "w");
- if (!f) return 1;
- isize_val = (int)(i2p - i1p);
- fprintf(f,"%d\n", isize_val);
- fclose(f);
- return 0;
-}
-
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- # pac_compile_ok=yes
-
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- # Save LIBS and prepend object file to LIBS
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
- if test "$cross_compiling" = yes; then :
-
- # Use -9999 as value to emit a warning message after the cache_check.
- eval pac_cv_f77_sizeof_integer=$CROSS_F77_SIZEOF_INTEGER
-
-else
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- integer a(2)
- integer irc, cisize
- irc = cisize(a(1),a(2))
- end
-
-
-_ACEOF
-if ac_fn_f77_try_run "$LINENO"; then :
-
- eval pac_cv_f77_sizeof_integer=`cat conftestval`
-
-else
-
- eval pac_cv_f77_sizeof_integer=0
-
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- LIBS="$saved_LIBS"
- # remove previously generated object file.
- rm -f pac_conftest.$OBJEXT
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to compile the C routine for finding the size of a integer" >&5
-$as_echo "$as_me: WARNING: Unable to compile the C routine for finding the size of a integer" >&2;}
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_sizeof_integer" >&5
-$as_echo "$pac_cv_f77_sizeof_integer" >&6; }
-if test "$pac_cv_f77_sizeof_integer" = "-9999" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No value provided for size of integer when cross-compiling" >&5
-$as_echo "$as_me: WARNING: No value provided for size of integer when cross-compiling" >&2;}
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_F77_INTEGER $pac_cv_f77_sizeof_integer
-_ACEOF
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of Fortran type real" >&5
-$as_echo_n "checking for size of Fortran type real... " >&6; }
-if ${pac_cv_f77_sizeof_real+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
-#include <stdio.h>
-#endif
-#ifdef F77_NAME_UPPER
-#define cisize_ CISIZE
-#define isize_ ISIZE
-#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
-#define cisize_ cisize
-#define isize_ isize
-#endif
-int cisize_(char *,char*);
-int cisize_(char *i1p, char *i2p) {
- int isize_val=0;
- FILE *f = fopen("conftestval", "w");
- if (!f) return 1;
- isize_val = (int)(i2p - i1p);
- fprintf(f,"%d\n", isize_val);
- fclose(f);
- return 0;
-}
-
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- # pac_compile_ok=yes
-
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- # Save LIBS and prepend object file to LIBS
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
- if test "$cross_compiling" = yes; then :
-
- # Use -9999 as value to emit a warning message after the cache_check.
- eval pac_cv_f77_sizeof_real=$CROSS_F77_SIZEOF_REAL
-
-else
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- real a(2)
- integer irc, cisize
- irc = cisize(a(1),a(2))
- end
-
-
-_ACEOF
-if ac_fn_f77_try_run "$LINENO"; then :
-
- eval pac_cv_f77_sizeof_real=`cat conftestval`
-
-else
-
- eval pac_cv_f77_sizeof_real=0
-
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- LIBS="$saved_LIBS"
- # remove previously generated object file.
- rm -f pac_conftest.$OBJEXT
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to compile the C routine for finding the size of a real" >&5
-$as_echo "$as_me: WARNING: Unable to compile the C routine for finding the size of a real" >&2;}
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_sizeof_real" >&5
-$as_echo "$pac_cv_f77_sizeof_real" >&6; }
-if test "$pac_cv_f77_sizeof_real" = "-9999" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No value provided for size of real when cross-compiling" >&5
-$as_echo "$as_me: WARNING: No value provided for size of real when cross-compiling" >&2;}
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_F77_REAL $pac_cv_f77_sizeof_real
-_ACEOF
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of Fortran type double precision" >&5
-$as_echo_n "checking for size of Fortran type double precision... " >&6; }
-if ${pac_cv_f77_sizeof_double_precision+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
-#include <stdio.h>
-#endif
-#ifdef F77_NAME_UPPER
-#define cisize_ CISIZE
-#define isize_ ISIZE
-#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
-#define cisize_ cisize
-#define isize_ isize
-#endif
-int cisize_(char *,char*);
-int cisize_(char *i1p, char *i2p) {
- int isize_val=0;
- FILE *f = fopen("conftestval", "w");
- if (!f) return 1;
- isize_val = (int)(i2p - i1p);
- fprintf(f,"%d\n", isize_val);
- fclose(f);
- return 0;
-}
-
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- # pac_compile_ok=yes
-
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- # Save LIBS and prepend object file to LIBS
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
- if test "$cross_compiling" = yes; then :
-
- # Use -9999 as value to emit a warning message after the cache_check.
- eval pac_cv_f77_sizeof_double_precision=$CROSS_F77_SIZEOF_DOUBLE_PRECISION
-
-else
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- double precision a(2)
- integer irc, cisize
- irc = cisize(a(1),a(2))
- end
-
-
-_ACEOF
-if ac_fn_f77_try_run "$LINENO"; then :
-
- eval pac_cv_f77_sizeof_double_precision=`cat conftestval`
-
-else
-
- eval pac_cv_f77_sizeof_double_precision=0
-
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- LIBS="$saved_LIBS"
- # remove previously generated object file.
- rm -f pac_conftest.$OBJEXT
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to compile the C routine for finding the size of a double precision" >&5
-$as_echo "$as_me: WARNING: Unable to compile the C routine for finding the size of a double precision" >&2;}
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_sizeof_double_precision" >&5
-$as_echo "$pac_cv_f77_sizeof_double_precision" >&6; }
-if test "$pac_cv_f77_sizeof_double_precision" = "-9999" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No value provided for size of double precision when cross-compiling" >&5
-$as_echo "$as_me: WARNING: No value provided for size of double precision when cross-compiling" >&2;}
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_F77_DOUBLE_PRECISION $pac_cv_f77_sizeof_double_precision
-_ACEOF
-
-
-
-
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
- # If we have sizes for real and double, we do not need to call
- # mpir_get_fsize at run time.
- # For the size-defined types (e.g., integer*2), we assume that if the
- # compiler allows it, it has the stated size.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*1 is supported" >&5
-$as_echo_n "checking whether integer*1 is supported... " >&6; }
-if ${pac_cv_fort_integer1+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- integer*1 i
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_integer1=yes
-else
- pac_cv_fort_integer1=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer1" >&5
-$as_echo "$pac_cv_fort_integer1" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*2 is supported" >&5
-$as_echo_n "checking whether integer*2 is supported... " >&6; }
-if ${pac_cv_fort_integer2+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- integer*2 i
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_integer2=yes
-else
- pac_cv_fort_integer2=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer2" >&5
-$as_echo "$pac_cv_fort_integer2" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*4 is supported" >&5
-$as_echo_n "checking whether integer*4 is supported... " >&6; }
-if ${pac_cv_fort_integer4+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- integer*4 i
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_integer4=yes
-else
- pac_cv_fort_integer4=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer4" >&5
-$as_echo "$pac_cv_fort_integer4" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*8 is supported" >&5
-$as_echo_n "checking whether integer*8 is supported... " >&6; }
-if ${pac_cv_fort_integer8+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- integer*8 i
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_integer8=yes
-else
- pac_cv_fort_integer8=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer8" >&5
-$as_echo "$pac_cv_fort_integer8" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*16 is supported" >&5
-$as_echo_n "checking whether integer*16 is supported... " >&6; }
-if ${pac_cv_fort_integer16+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- integer*16 i
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_integer16=yes
-else
- pac_cv_fort_integer16=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer16" >&5
-$as_echo "$pac_cv_fort_integer16" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether real*4 is supported" >&5
-$as_echo_n "checking whether real*4 is supported... " >&6; }
-if ${pac_cv_fort_real4+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- real*4 a
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_real4=yes
-else
- pac_cv_fort_real4=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_real4" >&5
-$as_echo "$pac_cv_fort_real4" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether real*8 is supported" >&5
-$as_echo_n "checking whether real*8 is supported... " >&6; }
-if ${pac_cv_fort_real8+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- real*8 a
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_real8=yes
-else
- pac_cv_fort_real8=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_real8" >&5
-$as_echo "$pac_cv_fort_real8" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether real*16 is supported" >&5
-$as_echo_n "checking whether real*16 is supported... " >&6; }
-if ${pac_cv_fort_real16+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat > conftest.$ac_ext <<_ACEOF
- program main
- real*16 a
- end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
- pac_cv_fort_real16=yes
-else
- pac_cv_fort_real16=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_real16" >&5
-$as_echo "$pac_cv_fort_real16" >&6; }
-
- # Create the default datatype names for the standard MPI Fortran types
- MPI_CHARACTER=0x4c00011a
-
-
- if test -z "$pac_cv_f77_sizeof_integer" -o \
- "X$pac_cv_f77_sizeof_integer" = "X0" ; then
- as_fn_error $? "Unable to configure with Fortran support because configure could not determine the size of a Fortran INTEGER. Consider setting CROSS_F77_SIZEOF_INTEGER to the length in bytes of a Fortran INTEGER" "$LINENO" 5
- fi
- len_integer=$pac_cv_f77_sizeof_integer
- # Convert to two digit hex
- len=$len_integer
- #
- # Take len and turn it into two hex digits (there are 8 bits available
- # in the built-in datatype handle for the length; see
- # src/mpid/common/datatype/mpid_datatype.h). This code is taken
- # from the code in mpich/configure.ac
- if test "$len" -gt 255 ; then
- as_fn_error $? "Type sizes greater than 255 bytes are not supported (type INTEGER is $len bytes)" "$LINENO" 5
- fi
- tmplen=$len
- hexlen=""
- while test $tmplen -gt 0 ; do
- lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
- case $lowdigit in
- 10) char=a ;;
- 11) char=b ;;
- 12) char=c ;;
- 13) char=d ;;
- 14) char=e ;;
- 15) char=f ;;
- *) char=$lowdigit ;;
- esac
- hexlen="$char$hexlen"
- tmplen=`expr $tmplen / 16`
- done
- if test $len -lt 16 ; then
- hexlen="0$hexlen"
- fi
- len_integer=$hexlen
- if test "$len_integer" = 0 ; then
- # We have a problem
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of an INTEGER type; using 4" >&5
-$as_echo "$as_me: WARNING: Unable to determine size of an INTEGER type; using 4" >&2;}
- # We make the length 4
- len_integer="04"
- fi
- MPI_INTEGER=0x4c00${len_integer}1b
- MPI_REAL=0x4c00${len_integer}1c
- MPI_LOGICAL=0x4c00${len_integer}1d
-
-
-
-
- if test -z "$pac_cv_f77_sizeof_double_precision" ; then
- as_fn_error $? "Unable to configure with Fortran support because configure could not determine the size of a Fortran DOUBLE PRECISION. Consider setting CROSS_F77_SIZEOF_DOUBLE_PRECISION to the length in bytes of a Fortran DOUBLE PRECISION" "$LINENO" 5
- fi
- len_double=$pac_cv_f77_sizeof_double_precision
- # Convert to two digit hex
- len=$len_double
- #
- # Take len and turn it into two hex digits (there are 8 bits available
- # in the built-in datatype handle for the length; see
- # src/mpid/common/datatype/mpid_datatype.h). This code is taken
- # from the code in mpich/configure.ac
- if test "$len" -gt 255 ; then
- as_fn_error $? "Type sizes greater than 255 bytes are not supported (type DOUBLE is $len bytes)" "$LINENO" 5
- fi
- tmplen=$len
- hexlen=""
- while test $tmplen -gt 0 ; do
- lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
- case $lowdigit in
- 10) char=a ;;
- 11) char=b ;;
- 12) char=c ;;
- 13) char=d ;;
- 14) char=e ;;
- 15) char=f ;;
- *) char=$lowdigit ;;
- esac
- hexlen="$char$hexlen"
- tmplen=`expr $tmplen / 16`
- done
- if test $len -lt 16 ; then
- hexlen="0$hexlen"
- fi
- len_double=$hexlen
- if test "$len_double" = 0 ; then
- # We have a problem
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&5
-$as_echo "$as_me: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&2;}
- # We make the length 8
- len_double="08"
- fi
-
- # Provide the corresponding C types for MPI_REAL and MPI_DOUBLE
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran real" >&5
-$as_echo_n "checking for C type matching Fortran real... " >&6; }
- noval=yes
- for c_type in float double "long_double" ; do
- eval ctypelen=\$"ac_cv_sizeof_$c_type"
- if test "$pac_cv_f77_sizeof_real" = "$ctypelen" -a \
- "$ctypelen" -gt 0 ; then
- c_type=`echo $c_type | sed -e 's/_/ /g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
-$as_echo "$c_type" >&6; }
- MPIR_FC_REAL_CTYPE=$c_type
- noval="no"
- break
- fi
- done
- if test "$noval" = "yes" ; then
- # Set a default
- MPIR_FC_REAL_CTYPE="float"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
-$as_echo "unavailable" >&6; }
- fi
-
- noval=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran double" >&5
-$as_echo_n "checking for C type matching Fortran double... " >&6; }
- for c_type in double "long_double" float ; do
- eval ctypelen=\$"ac_cv_sizeof_$c_type"
- if test "$pac_cv_f77_sizeof_double_precision" = "$ctypelen" -a \
- "$ctypelen" -gt 0 ; then
- c_type=`echo $c_type | sed -e 's/_/ /g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
-$as_echo "$c_type" >&6; }
- MPIR_FC_DOUBLE_CTYPE=$c_type
- noval="no"
- break
- fi
- done
- if test "$noval" = "yes" ; then
- # Set a default
- MPIR_FC_DOUBLE_CTYPE="double"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
-$as_echo "unavailable" >&6; }
- fi
-
- # These are needed to correctly implement the MPI reduction operations
-
-cat >>confdefs.h <<_ACEOF
-#define MPIR_FC_REAL_CTYPE $MPIR_FC_REAL_CTYPE
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define MPIR_FC_DOUBLE_CTYPE $MPIR_FC_DOUBLE_CTYPE
-_ACEOF
-
-
- # Use the proper length values for these items in case we are building
- # with Fortran integers that are not the same size as C ints and
- # reals and double precision that are the same size (not valid Fortran,
- # but used by some applications)
-
- len_2integer=`expr 2 \* $len_integer`
- len_2real=`expr 2 \* $len_integer`
- len_doublecplx=`expr $pac_cv_f77_sizeof_double_precision \* 2`
- if test "$len_doublecplx" = 0 ; then
- # We have a problem
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&5
-$as_echo "$as_me: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&2;}
- # We make the length 8*2 (in hex)
- len_doublecplx="16"
- fi
-
- for lenname in len_2integer len_2real len_doublecplx ; do
- eval len=\$$lenname
- if test "$len" -gt 255 ; then
- as_fn_error $? "Type sizes greater than 255 bytes are not supported (type $lenname is $len bytes)" "$LINENO" 5
- fi
- tmplen=$len
- hexlen=""
- while test $tmplen -gt 0 ; do
- lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
- case $lowdigit in
- 10) char=a ;;
- 11) char=b ;;
- 12) char=c ;;
- 13) char=d ;;
- 14) char=e ;;
- 15) char=f ;;
- *) char=$lowdigit ;;
- esac
- hexlen="$char$hexlen"
- tmplen=`expr $tmplen / 16`
- done
- if test $len -lt 16 ; then
- hexlen="0$hexlen"
- fi
- eval ${lenname}=$hexlen
- if test "$hexlen" = 0 ; then
- # We have a problem
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of a $lenname type; using 8" >&5
-$as_echo "$as_me: WARNING: Unable to determine size of a $lenname type; using 8" >&2;}
- # We make the length 8
- eval ${lenname}=$hexlen
- fi
- done
-
- MPI_DOUBLE_PRECISION=0x4c00${len_double}1f
- MPI_2INTEGER=0x4c00${len_2integer}20
- MPI_2REAL=0x4c00${len_2real}21
- MPI_COMPLEX=0x4c00${len_2real}1e
-
-
-
-
-
-
- MPI_DOUBLE_COMPLEX=0x4c00${len_doublecplx}22
- MPI_2DOUBLE_PRECISION=0x4c00${len_doublecplx}23
- MPI_2COMPLEX=0x4c00${len_doublecplx}24
-
-
-
-
- #
- # Temporary for the vast majority of systems that use 4 byte reals and
- # 8 byte doubles
- # Lengths at this point are in hex, hence "10" = 10 base 16 = 16 base 10.
- if test "$len_double" = "08" ; then
- F77_COMPLEX8=$MPI_COMPLEX
- fi
- if test "$len_doublecplx" = "10" ; then
- F77_COMPLEX16=$MPI_DOUBLE_COMPLEX
- fi
- if test "$len_long_double" = "10" -a "$MPID_NO_LONG_DOUBLE" != "yes" ; then
- F77_COMPLEX32="0x4c002025"
- else
- F77_COMPLEX32="MPI_DATATYPE_NULL"
- fi
-
- len_2dc=`expr $pac_cv_f77_sizeof_double_precision \* 4`
- firstdigit=0
- seconddigit=0
- while test $len_2dc -ge 16 ; do
- firstdigit=`expr $firstdigit + 1`
- len_2dc=`expr $len_2dc - 16`
- done
- case $len_2dc in
- 10) seconddigit=a ;;
- 11) seconddigit=b ;;
- 12) seconddigit=c ;;
- 13) seconddigit=d ;;
- 14) seconddigit=e ;;
- 15) seconddigit=f ;;
- *) seconddigit=$len_2dc ;;
- esac
- len_2dc="$firstdigit$seconddigit"
- #echo "2double complex = $len_2dc"
- MPI_2DOUBLE_COMPLEX=0x4c00${len_2dc}25
-
- MPI_F77_PACKED=$MPI_PACKED
- MPI_F77_UB=$MPI_UB
- MPI_F77_LB=$MPI_LB
- MPI_F77_BYTE=$MPI_BYTE
-
-
-
-
- #
- # We must convert all hex values to decimal (!)
- # It would be nice to use expr to extract the next character rather than
- # the heavier-weight sed, but expr under Tru64 Unix discards leading zeros,
- # even when used only with the match (:) command. Rather than have
- # configure figure out if expr works, we just use sed. Sigh.
- for var in CHARACTER INTEGER REAL LOGICAL DOUBLE_PRECISION COMPLEX \
- DOUBLE_COMPLEX 2INTEGER 2REAL 2COMPLEX 2DOUBLE_PRECISION \
- 2DOUBLE_COMPLEX F77_PACKED F77_UB F77_LB F77_BYTE; do
- fullvar="MPI_$var"
- eval fullvarvalue=\$$fullvar
- #echo "$fullvar = $fullvarvalue"
- value=0
- fullvarvalue=`echo $fullvarvalue | sed -e 's/..\(.*\)/\1/'`
- for pos in 3 4 5 6 7 8 9 10 ; do
- # This works, even for Tru64, because only a single character
- # is extracted
- char=`expr $fullvarvalue : '\(.\)'`
- # FIXME: Tru64 Unix eliminates leading zeros (!)
- # How do we fix something that broken?
- fullvarvalue=`echo $fullvarvalue | sed -e 's/.\(.*\)/\1/'`
- case $char in
- a) char=10 ;;
- b) char=11 ;;
- c) char=12 ;;
- d) char=13 ;;
- e) char=14 ;;
- f) char=15 ;;
- esac
- value=`expr $value \* 16 + $char`
- done
- #echo "$fullvar = $value"
- if test "X$value" = "X"; then
- eval origvarvalue=\$$fullvar
- as_fn_error $? "Internal Error: Failed to convert $fullvar value to hex! Original value was $origvarvalue" "$LINENO" 5
- fi
- eval $fullvar=$value
- done
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
- # Now, handle the sized types
- #
- # Preload the C mpi types
- # THESE MUST MATCH THE DEFINITIONS IN MPI.H and MPIF.H
- # We use these to match the optional Fortran types
- char_mpi=${MPI_CHAR:-0}
- short_mpi=${MPI_SHORT:-0}
- int_mpi=${MPI_INT:-0}
- long_mpi=${MPI_LONG:-0}
- long_long_mpi=${MPI_LONG_LONG:-0}
- float_mpi=${MPI_FLOAT:-0}
- double_mpi=${MPI_DOUBLE:-0}
- long_double_mpi=${MPI_LONG_DOUBLE:-0}
-
- #
- # The following code was correct for MPI-1, which allowed these datatypes
- # to be an alias for another MPI type. MPI-2 requires these to
- # be distinct types, so these are enumerated
- if test "$use_alias_types" = yes ; then
- for len in 1 2 4 8 16 ; do
- eval F77_INTEGER$len=0
- #eval testval=\$"pac_cv_f77_sizeof_integer_$len"
- eval testval=\$"pac_cv_fort_integer$len"
- if test "$testval" = no ; then continue ; fi
- testval=$len
- noval="yes"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran integer*$len" >&5
-$as_echo_n "checking for C type matching Fortran integer*$len... " >&6; }
- for c_type in char short int long "long_long" ; do
- eval ctypelen=\$"ac_cv_sizeof_$c_type"
- if test "$testval" = "$ctypelen" -a "$ctypelen" -gt 0 ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
-$as_echo "$c_type" >&6; }
- eval F77_INTEGER$len=\$"${c_type}_mpi"
- noval="no"
- break
- fi
- done
- if test "$noval" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
-$as_echo "unavailable" >&6; }
- fi
- done
-
- # Complex is set separately above
- for len in 4 8 16 ; do
- len2=`expr $len + $len`
- eval F77_REAL$len=0
- #eval F77_COMPLEX$len2=0
- #eval testval=\$"pac_cv_f77_sizeof_real_$len"
- eval testval=\$"pac_cv_fort_real$len"
- if test "$testval" = no ; then continue ; fi
- testval=$len
- noval="yes"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran real*$len" >&5
-$as_echo_n "checking for C type matching Fortran real*$len... " >&6; }
- for c_type in float double "long_double" ; do
- eval ctypelen=\$"ac_cv_sizeof_$c_type"
- if test "$testval" = "$ctypelen" -a "$ctypelen" -gt 0 ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
-$as_echo "$c_type" >&6; }
- eval F77_REAL$len=\$"${c_type}_mpi"
- #eval F77_COMPLEX$len2=\$"${c_type}_cplx_mpi"
- noval="no"
- break
- fi
- done
- if test "$noval" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
-$as_echo "unavailable" >&6; }
- fi
- done
- else
- # Simply determine which types exist. These may have been set by the
- # toplevel configure
- for var in INTEGER1 INTEGER2 INTEGER4 INTEGER8 INTEGER16 \
- REAL4 REAL8 REAL16 COMPLEX8 COMPLEX16 COMPLEX32 ; do
- eval varname=MPI_$var
- eval varvalue=\$$varname
- #echo "$varname = $varvalue"
- if test "$varvalue" = MPI_DATATYPE_NULL ; then
- eval F77_$var=0
- else
- eval F77_$var=\$$varname
- fi
- done
- fi
- # We must convert all hex values to decimal (!)
- for var in INTEGER1 INTEGER2 INTEGER4 INTEGER8 INTEGER16 \
- REAL4 REAL8 REAL16 COMPLEX8 COMPLEX16 COMPLEX32 ; do
- fullvar="F77_$var"
- eval fullvarvalue=\$$fullvar
- if test "$fullvarvalue" = 0 -o -z "$fullvarvalue" ; then
- eval $fullvar=MPI_DATATYPE_NULL
- continue
- fi
- #echo "$fullvar = $fullvarvalue"
- value=0
- # See the comments above on why expr with : cannot be used here
- fullvarvalue=`echo $fullvarvalue | sed -e 's/..\(.*\)/\1/'`
- for pos in 3 4 5 6 7 8 9 10 ; do
- #char=`expr substr $fullvarvalue $pos 1`
- char=`expr $fullvarvalue : '\(.\)'`
- # We don't test for success of expr here because some expr's are
- # buggy and set the status to one on expressions like
- # expr 00ccc : '\(.\)'
- # while both
- # expr 00ccc : '\(..\)'
- # and
- # expr 100cc : '\(.\)'
- # return a zero status. So the status is set even on success,
- # if the result is a single character that is a zero (!)
- #rc=$?
- #if test "$rc" != 0 ; then
- # break
- #fi
- fullvarvalue=`echo $fullvarvalue | sed -e 's/.\(.*\)/\1/'`
- case $char in
- a) char=10 ;;
- b) char=11 ;;
- c) char=12 ;;
- d) char=13 ;;
- e) char=14 ;;
- f) char=15 ;;
- esac
- value=`expr $value \* 16 + $char`
- if test $? != 0 ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failure to evaluate $value \* 16 + $char" >&5
-$as_echo "$as_me: WARNING: Failure to evaluate $value \* 16 + $char" >&2;}
- fi
- done
- #echo "$fullvar = $value"
- eval $fullvar=$value
- done
-
-
-
-
-
-
-
-
-
-
-
-
- noval="yes"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran integer" >&5
-$as_echo_n "checking for C type matching Fortran integer... " >&6; }
- for c_type in char short int long "long_long" ; do
- eval ctypelen=\$"ac_cv_sizeof_$c_type"
- if test "$pac_cv_f77_sizeof_integer" = "$ctypelen" -a \
- "$ctypelen" -gt 0 ; then
- c_type=`echo $c_type | sed -e 's/_/ /g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
-$as_echo "$c_type" >&6; }
- MPI_FINT=$c_type
- noval="no"
- break
- fi
- done
- if test "$noval" = "yes" ; then
- # Set a default
- MPI_FINT="int"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
-$as_echo "unavailable" >&6; }
- fi
- # We also need to check the size of MPI_Aint vs MPI_Fint, and
- # define AINT_LARGER_THAN_FINT if aint is larger (this
- # affects code in MPI_Address)
- if test "$ac_cv_sizeof_void_p" != "0" -a \
- "$ac_cv_sizeof_void_p" -gt "$pac_cv_f77_sizeof_integer" ; then
-
-$as_echo "#define HAVE_AINT_LARGER_THAN_FINT 1" >>confdefs.h
-
- fi
- if test "$ac_cv_sizeof_void_p" != 0 -a \
- "$ac_cv_sizeof_void_p" != "$pac_cv_f77_sizeof_integer" ; then
-
-$as_echo "#define HAVE_AINT_DIFFERENT_THAN_FINT 1" >>confdefs.h
-
- fi
-
- # Include a defined value for Fint is int
- if test "$MPI_FINT" = "int" ; then
-
-$as_echo "#define HAVE_FINT_IS_INT 1" >>confdefs.h
-
- elif test "$SIZEOF_F77_INTEGER" != "$ac_cv_sizeof_int" ; then
- # Make this fatal because we do not want to build a broken fortran
- # interface (was error)
- # Check to see if the f77 binding has enabled the code to support
- # the case of int != fint.
- if grep HAVE_FINT_IS_INT $master_top_srcdir/src/binding/fortran/mpif_h/testf.c 2>&1 1>/dev/null ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran integers and C ints are not the same size. Support for this case is experimental; use at your own risk" >&5
-$as_echo "$as_me: WARNING: Fortran integers and C ints are not the same size. Support for this case is experimental; use at your own risk" >&2;}
- else
- as_fn_error $? "Fortran integers and C ints are not the same size. The current Fortran binding does not support this case. Either force the Fortran compiler to use integers of $ac_cv_sizeof_int bytes, or use --disable-fortran on the configure line for MPICH." "$LINENO" 5
- fi
- fi
-
- # We must convert all hex values to decimal (!).
- # This is for the C types so they are also available in Fortran
- for var in CHAR SIGNED_CHAR UNSIGNED_CHAR WCHAR SHORT \
- UNSIGNED_SHORT INT UNSIGNED_INT LONG UNSIGNED_LONG \
- FLOAT DOUBLE LONG_DOUBLE LONG_LONG_INT \
- UNSIGNED_LONG_LONG LONG_LONG FLOAT_INT DOUBLE_INT \
- LONG_INT SHORT_INT "2INT" LONG_DOUBLE_INT \
- INT8_T INT16_T INT32_T INT64_T \
- UINT8_T UINT16_T UINT32_T UINT64_T \
- C_BOOL C_FLOAT_COMPLEX C_DOUBLE_COMPLEX \
- C_LONG_DOUBLE_COMPLEX AINT OFFSET ; do
- fullvar="MPI_$var"
- fullf77var="MPI_F77_$var"
- eval fullvarvalue=\$$fullvar
- #echo "$fullvar = $fullvarvalue"
- if test "x$fullvarvalue" = "x" -o \
- "x$fullvarvalue" = "xMPI_DATATYPE_NULL" ; then
- eval $fullf77var="MPI_DATATYPE_NULL"
- continue
- fi
- value=0
- fullvarvalue=`echo $fullvarvalue | sed -e 's/..\(.*\)/\1/'`
- offset=0
- for pos in 3 4 5 6 7 8 9 10 ; do
- # This works, even for Tru64, because only a single character
- # is extracted
- char=`expr $fullvarvalue : '\(.\)'`
- # FIXME: Tru64 Unix eliminates leading zeros (!)
- # How do we fix something that broken?
- fullvarvalue=`echo $fullvarvalue | sed -e 's/.\(.*\)/\1/'`
- case $char in
- a) char=10 ;;
- b) char=11 ;;
- c) char=12 ;;
- d) char=13 ;;
- e) char=14 ;;
- f) char=15 ;;
- esac
- # For Fortran, if the value is too big for an unsigned int,
- # we need to make it a signed (negative) int. Currently, the
- # types in this class are the minloc/maxloc types.
- if test $pos = 3 -a $char -ge 8 ; then
- #echo "for $var in position $pos found a value >= 8"
- char=`expr $char - 8`
- offset=-2147483648
- fi
- value=`expr $value \* 16 + $char`
- done
- if test "$offset" != 0 ; then
- #echo "$fullf77var: $value, $offset"
- value=`expr $value + $offset`
- fi
- #echo "$fullf77var = $value"
- eval $fullf77var=$value
- done
-
-
-
-
-
-
- MPI_F77_UNSIGNED=$MPI_F77_UNSIGNED_INT
-
-
-
-
-
-
-
-
- MPI_F77_LONG_LONG_INT=$MPI_F77_LONG_LONG
-
-
+# Test for weird struct alignment rules that vary padding based on
+# size of leading type only.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if alignment of structs with doubles is based on position" >&5
+$as_echo_n "checking if alignment of structs with doubles is based on position... " >&6; }
+if ${pac_cv_c_double_pos_align+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+if test "$cross_compiling" = yes; then :
+ pac_cv_c_double_pos_align="$CROSS_ALIGN_DOUBLE_POS"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int padding_varies_by_pos = 0;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+ int extent1, extent2;
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
+ if (extent1 != extent2) padding_varies_by_pos = 1;
+ cf = fopen( "ctest.out", "w" );
+ if (padding_varies_by_pos) fprintf( cf, "yes\n" );
+ else fprintf( cf, "no\n" );
+ fclose( cf );
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_c_double_pos_align=`cat ctest.out`
+else
+ pac_cv_c_double_pos_align="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f ctest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_double_pos_align" >&5
+$as_echo "$pac_cv_c_double_pos_align" >&6; }
+if test -z "$pac_cv_c_double_pos_align" ; then
+ pac_cv_c_double_pos_align="unknown"
+fi
+if test "$pac_cv_c_double_pos_align" = "yes" ; then
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DOUBLE_POS_ALIGNMENT 1
+_ACEOF
+fi
+# Test for same weird issues with long long int.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if alignment of structs with long long ints is based on position" >&5
+$as_echo_n "checking if alignment of structs with long long ints is based on position... " >&6; }
+if ${pac_cv_c_llint_pos_align+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+if test "$cross_compiling" = yes; then :
+ pac_cv_c_llint_pos_align="$CROSS_ALIGN_LLINT_POS"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int padding_varies_by_pos = 0;
+#ifdef HAVE_LONG_LONG_INT
+ struct { char a; long long int b; } char_llint;
+ struct { long long int b; char a; } llint_char;
+ int extent1, extent2;
- # C_COMPLEX is an alias for FLOAT_COMPLEX
- MPI_F77_C_COMPLEX=$MPI_F77_C_FLOAT_COMPLEX
+ extent1 = sizeof(char_llint);
+ extent2 = sizeof(llint_char);
+ if (extent1 != extent2) padding_varies_by_pos = 1;
+#endif
+ cf = fopen( "ctest.out", "w" );
+ if (padding_varies_by_pos) fprintf( cf, "yes\n" );
+ else fprintf( cf, "no\n" );
+ fclose( cf );
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_c_llint_pos_align=`cat ctest.out`
+else
+ pac_cv_c_llint_pos_align="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
- # these two are not yet defined, but AC_SUBST only cares about them at
- # AC_OUTPUT-time
+rm -f ctest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_llint_pos_align" >&5
+$as_echo "$pac_cv_c_llint_pos_align" >&6; }
+if test -z "$pac_cv_c_llint_pos_align" ; then
+ pac_cv_c_llint_pos_align="unknown"
+fi
+if test "$pac_cv_c_llint_pos_align" = "yes" ; then
- # Try and compute the values of .true. and .false. in Fortran
- # This code has been removed because the Fortran binding code does
- # not yet support it.
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LLINT_POS_ALIGNMENT 1
+_ACEOF
+fi
+# Test for double alignment not following all our other carefully constructed rules
-pac_mpi_fint="$MPI_FINT"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for values of Fortran logicals" >&5
-$as_echo_n "checking for values of Fortran logicals... " >&6; }
-if ${pac_cv_prog_f77_true_false_value+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if double alignment breaks rules, find actual alignment" >&5
+$as_echo_n "checking if double alignment breaks rules, find actual alignment... " >&6; }
+if ${pac_cv_c_double_alignment_exception+:} false; then :
$as_echo_n "(cached) " >&6
else
-pac_cv_prog_f77_true_false_value=""
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if test "$cross_compiling" = yes; then :
+ pac_cv_c_double_alignment_exception="$CROSS_ALIGN_DOUBLE_EXCEPTION"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
#include <stdio.h>
-#endif
-#if defined(HAVE_STDLIB_H) || defined(STDC_HEADERS)
-#include <stdlib.h>
-#endif
-#ifdef F77_NAME_UPPER
-#define ftest_ FTEST
-#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
-#define ftest_ ftest
-#endif
-void ftest_( $pac_mpi_fint *, $pac_mpi_fint *);
-void ftest_( $pac_mpi_fint *itrue, $pac_mpi_fint *ifalse )
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
{
- FILE *f = fopen("conftestval","w");
- if (!f) exit(1);
- fprintf( f, "%d %d\n", *itrue, *ifalse );
- fclose(f);
-}
-
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+ FILE *cf;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+ int extent1, extent2, align_4 = 0;
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $saved_LIBS"
- ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ /* we're interested in the largest value, will let separate test
+ * deal with position-based issues.
+ */
+ if (extent1 < extent2) extent1 = extent2;
+ if ((sizeof(double) == 8) && (extent1 % 8) != 0) {
+ if (extent1 % 4 == 0) {
+#ifdef HAVE_MAX_FP_ALIGNMENT
+ if (HAVE_MAX_FP_ALIGNMENT >= 8) align_4 = 1;
+#else
+ align_4 = 1;
+#endif
+ }
+ }
- if test "$cross_compiling" = yes; then :
+ cf = fopen( "ctest.out", "w" );
- # Cross-Compiling. Allow the user to set the values
- if test -n "$CROSS_F77_TRUE_VALUE" -a -n "$CROSS_F77_FALSE_VALUE" ; then
- pac_cv_prog_f77_true_false_value="$CROSS_F77_TRUE_VALUE $CROSS_F77_FALSE_VALUE"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Either CROSS_F77_TRUE_VALUE=\"$CROSS_F77_TRUE_VALUE\" or CROSS_F77_FALSE_VALUE=\"$CROSS_F77_FALSE_VALUE\" is not set." >&5
-$as_echo "$as_me: WARNING: Either CROSS_F77_TRUE_VALUE=\"$CROSS_F77_TRUE_VALUE\" or CROSS_F77_FALSE_VALUE=\"$CROSS_F77_FALSE_VALUE\" is not set." >&2;}
- fi
+ if (align_4) fprintf( cf, "four\n" );
+ else fprintf( cf, "no\n" );
+ fclose( cf );
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_c_double_alignment_exception=`cat ctest.out`
else
- cat > conftest.$ac_ext <<_ACEOF
+ pac_cv_c_double_alignment_exception="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f ctest.out
- program main
- logical itrue, ifalse
- itrue = .TRUE.
- ifalse = .FALSE.
- call ftest( itrue, ifalse )
- end
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_c_double_alignment_exception" >&5
+$as_echo "$pac_cv_c_double_alignment_exception" >&6; }
+if test -z "$pac_cv_c_double_alignment_exception" ; then
+ pac_cv_c_double_alignment_exception="unknown"
+fi
+if test "$pac_cv_c_double_alignment_exception" = "four" ; then
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DOUBLE_ALIGNMENT_EXCEPTION 4
_ACEOF
-if ac_fn_f77_try_run "$LINENO"; then :
- pac_cv_prog_f77_true_false_value="`cat conftestval`"
+fi
+# Test whether pointers can be aligned on a int boundary or require
+# a pointer boundary.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alignment restrictions on pointers" >&5
+$as_echo_n "checking for alignment restrictions on pointers... " >&6; }
+if test "$cross_compiling" = yes; then :
+ pac_cv_pointers_have_int_alignment=unknown
else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to build/run program to determine Fortran logical values." >&5
-$as_echo "$as_me: WARNING: Failed to build/run program to determine Fortran logical values." >&2;}
+struct foo { int a; void *b; };
+int main() {
+ int buf[10];
+ struct foo *p1;
+ p1=(struct foo*)&buf[0];
+ p1->b = (void *)0;
+ p1=(struct foo*)&buf[1];
+ p1->b = (void *)0;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_pointers_have_int_alignment=yes
+else
+ pac_cv_pointers_have_int_alignment=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- LIBS="$saved_LIBS"
- rm -f pac_conftest.$OBJEXT
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test "$pac_cv_pointers_have_int_alignment" != "yes" ; then
-fi
+$as_echo "#define NEEDS_POINTER_ALIGNMENT_ADJUST 1" >>confdefs.h
-if test "X$pac_cv_prog_f77_true_false_value" != "X" ; then
- true_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/ .*//g'`"
- false_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/.* *//g'`"
- if test -n "$true_val" -a -n "$false_val" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: True is $true_val and False is $false_val" >&5
-$as_echo "True is $true_val and False is $false_val" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not determine" >&5
-$as_echo "could not determine" >&6; }
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pointer" >&5
+$as_echo "pointer" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: int or better" >&5
+$as_echo "int or better" >&6; }
fi
-if test -n "$true_val" -a -n "$false_val" ; then
-
-$as_echo "#define F77_TRUE_VALUE_SET 1" >>confdefs.h
-
-
-cat >>confdefs.h <<_ACEOF
-#define F77_TRUE_VALUE $true_val
-_ACEOF
+# Require strict alignment memory access for alignment-sensitive platform (e.g., SPARC)
+if test "$host_cpu" = "sparc" ; then
-cat >>confdefs.h <<_ACEOF
-#define F77_FALSE_VALUE $false_val
-_ACEOF
+$as_echo "#define NEEDS_STRICT_ALIGNMENT 1" >>confdefs.h
fi
+# There are further alignment checks after we test for int64_t etc. below.
- # Get the INTEGER_KIND, ADDRESS_KIND and OFFSET_KIND if possible
- #
- # For Fortran 90, we'll also need MPI_ADDRESS_KIND and MPI_OFFSET_KIND
- # Since our compiler might BE a Fortran 90 compiler, try and determine the
- # values.
- if test "$FC" = "no" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 is a Fortran 90 compiler" >&5
-$as_echo_n "checking whether $F77 is a Fortran 90 compiler... " >&6; }
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+# Get the size of the C types for encoding in the basic datatypes and for
+# the specific-sized integers
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
+$as_echo_n "checking size of char... " >&6; }
+if ${ac_cv_sizeof_char+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then :
-saved_ac_ext=$ac_ext
-ac_ext="f90"
-cat > conftest.$ac_ext <<_ACEOF
+else
+ if test "$ac_cv_type_char" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (char)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_char=0
+ fi
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
+$as_echo "$ac_cv_sizeof_char" >&6; }
- program main
- integer, dimension(10) :: n
- integer k
- print *, range(k)
- end
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR $ac_cv_sizeof_char
_ACEOF
-if ac_fn_f77_try_link "$LINENO"; then :
-
- pac_cv_prog_f77_is_fc=yes
- FC=$F77
- if test -z "$FCFLAGS" ; then
- FCFLAGS="$FFLAGS"
- fi
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned char" >&5
+$as_echo_n "checking size of unsigned char... " >&6; }
+if ${ac_cv_sizeof_unsigned_char+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned char))" "ac_cv_sizeof_unsigned_char" "$ac_includes_default"; then :
else
+ if test "$ac_cv_type_unsigned_char" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned char)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_char=0
+ fi
+fi
- pac_cv_prog_f77_is_fc=no
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_char" >&5
+$as_echo "$ac_cv_sizeof_unsigned_char" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_is_fc" >&5
-$as_echo "$pac_cv_prog_f77_is_fc" >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_CHAR $ac_cv_sizeof_unsigned_char
+_ACEOF
- fi
- if test "$FC" != "no" ; then
- # Offset kind should be for 8 bytes if possible (Romio prefers that)
- # address should be sizeof void * (unless --with-aint-size has
- # been set)
- # FIXME in the current configure implementation OFFSET_KIND and
- # MPI_Offset won't always agree, but generally will. The MPI Standard
- # implies that these types must have identical size, so this is a bug
- # waiting to happen.
- if test "$with_aint_size" -gt 0 -a \
- "$with_aint_size" -gt "$ac_cv_sizeof_void_p" ; then
- testsize=$with_aint_size
- else
- testsize=$ac_cv_sizeof_void_p
- fi
- if test "$testsize" = 0 ; then
- # Set a default
- testsize=4
- fi
-# Set the default
-ADDRESS_KIND=-1
-if test "$pac_cv_prog_fc_cross" = "yes" ; then
- if test -z "$CROSS_F90_ADDRESS_KIND"; then :
- as_fn_error $? "'$CROSS_F90_ADDRESS_KIND' is empty" "$LINENO" 5
-fi
- ADDRESS_KIND="$CROSS_F90_ADDRESS_KIND"
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+$as_echo_n "checking size of short... " >&6; }
+if ${ac_cv_sizeof_short+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 integer kind for ${testsize}-byte integers" >&5
-$as_echo_n "checking for Fortran 90 integer kind for ${testsize}-byte integers... " >&6; }
- # Convert bytes to digits
- case ${testsize} in
- 1) sellen=2 ;;
- 2) sellen=4 ;;
- 4) sellen=8 ;;
- 8) sellen=16 ;;
- 16) sellen=30 ;;
- *) sellen=8 ;;
- esac
- # Check for cached value
- eval testval=\$"pac_cv_prog_fc_int_kind_$sellen"
- if test -n "$testval" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $testval (cached)" >&5
-$as_echo "$testval (cached)" >&6; }
- ADDRESS_KIND=$testval
- else
- KINDVAL="unavailable"
- eval "pac_cv_prog_fc_int_kind_$sellen"=-1
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+else
+ if test "$ac_cv_type_short" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
+as_fn_error 77 "cannot compute sizeof (short)
See \`config.log' for more details" "$LINENO" 5; }
-else
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- integer ii
- ii = selected_int_kind($sellen)
- open(8, file="conftest1.out", form="formatted")
- write (8,*) ii
- close(8)
- stop
- end
-
-
-_ACEOF
-if ac_fn_fc_try_run "$LINENO"; then :
- pac_run_ok=yes
-else
- pac_run_ok=no
+ else
+ ac_cv_sizeof_short=0
+ fi
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+$as_echo "$ac_cv_sizeof_short" >&6; }
- if test "$pac_run_ok" = "yes" ; then
- if test -s conftest1.out ; then
- # Because of write, there may be a leading blank.
- KINDVAL=`cat conftest1.out | sed 's/ //g'`
- eval "pac_cv_prog_fc_int_kind_$sellen"=$KINDVAL
- ADDRESS_KIND=$KINDVAL
- fi
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KINDVAL" >&5
-$as_echo "$KINDVAL" >&6; }
- fi # not cached
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi # is not cross compiling
- if test "$testsize" = 8 ; then
- OFFSET_KIND=$ADDRESS_KIND
- else
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
-# Set the default
-OFFSET_KIND=-1
-if test "$pac_cv_prog_fc_cross" = "yes" ; then
- if test -z "$CROSS_F90_OFFSET_KIND"; then :
- as_fn_error $? "'$CROSS_F90_OFFSET_KIND' is empty" "$LINENO" 5
-fi
- OFFSET_KIND="$CROSS_F90_OFFSET_KIND"
-else
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 integer kind for 8-byte integers" >&5
-$as_echo_n "checking for Fortran 90 integer kind for 8-byte integers... " >&6; }
- # Convert bytes to digits
- case 8 in
- 1) sellen=2 ;;
- 2) sellen=4 ;;
- 4) sellen=8 ;;
- 8) sellen=16 ;;
- 16) sellen=30 ;;
- *) sellen=8 ;;
- esac
- # Check for cached value
- eval testval=\$"pac_cv_prog_fc_int_kind_$sellen"
- if test -n "$testval" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $testval (cached)" >&5
-$as_echo "$testval (cached)" >&6; }
- OFFSET_KIND=$testval
- else
- KINDVAL="unavailable"
- eval "pac_cv_prog_fc_int_kind_$sellen"=-1
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5
+$as_echo_n "checking size of unsigned short... " >&6; }
+if ${ac_cv_sizeof_unsigned_short+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_unsigned_short" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
+as_fn_error 77 "cannot compute sizeof (unsigned short)
See \`config.log' for more details" "$LINENO" 5; }
-else
- cat > conftest.$ac_ext <<_ACEOF
+ else
+ ac_cv_sizeof_unsigned_short=0
+ fi
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5
+$as_echo "$ac_cv_sizeof_unsigned_short" >&6; }
- program main
- integer ii
- ii = selected_int_kind($sellen)
- open(8, file="conftest1.out", form="formatted")
- write (8,*) ii
- close(8)
- stop
- end
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short
_ACEOF
-if ac_fn_fc_try_run "$LINENO"; then :
- pac_run_ok=yes
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if ${ac_cv_sizeof_int+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- pac_run_ok=no
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_int=0
+ fi
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
- if test "$pac_run_ok" = "yes" ; then
- if test -s conftest1.out ; then
- # Because of write, there may be a leading blank.
- KINDVAL=`cat conftest1.out | sed 's/ //g'`
- eval "pac_cv_prog_fc_int_kind_$sellen"=$KINDVAL
- OFFSET_KIND=$KINDVAL
- fi
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KINDVAL" >&5
-$as_echo "$KINDVAL" >&6; }
- fi # not cached
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi # is not cross compiling
- fi
- #
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
-# Set the default
-INTEGER_KIND=-1
-if test "$pac_cv_prog_fc_cross" = "yes" ; then
- if test -z "$CROSS_F90_INTEGER_KIND"; then :
- as_fn_error $? "'$CROSS_F90_INTEGER_KIND' is empty" "$LINENO" 5
-fi
- INTEGER_KIND="$CROSS_F90_INTEGER_KIND"
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
+$as_echo_n "checking size of unsigned int... " >&6; }
+if ${ac_cv_sizeof_unsigned_int+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 integer kind for $pac_cv_f77_sizeof_integer-byte integers" >&5
-$as_echo_n "checking for Fortran 90 integer kind for $pac_cv_f77_sizeof_integer-byte integers... " >&6; }
- # Convert bytes to digits
- case $pac_cv_f77_sizeof_integer in
- 1) sellen=2 ;;
- 2) sellen=4 ;;
- 4) sellen=8 ;;
- 8) sellen=16 ;;
- 16) sellen=30 ;;
- *) sellen=8 ;;
- esac
- # Check for cached value
- eval testval=\$"pac_cv_prog_fc_int_kind_$sellen"
- if test -n "$testval" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $testval (cached)" >&5
-$as_echo "$testval (cached)" >&6; }
- INTEGER_KIND=$testval
- else
- KINDVAL="unavailable"
- eval "pac_cv_prog_fc_int_kind_$sellen"=-1
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+else
+ if test "$ac_cv_type_unsigned_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
+as_fn_error 77 "cannot compute sizeof (unsigned int)
See \`config.log' for more details" "$LINENO" 5; }
-else
- cat > conftest.$ac_ext <<_ACEOF
+ else
+ ac_cv_sizeof_unsigned_int=0
+ fi
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
+$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
- program main
- integer ii
- ii = selected_int_kind($sellen)
- open(8, file="conftest1.out", form="formatted")
- write (8,*) ii
- close(8)
- stop
- end
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
_ACEOF
-if ac_fn_fc_try_run "$LINENO"; then :
- pac_run_ok=yes
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if ${ac_cv_sizeof_long+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- pac_run_ok=no
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long=0
+ fi
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
- if test "$pac_run_ok" = "yes" ; then
- if test -s conftest1.out ; then
- # Because of write, there may be a leading blank.
- KINDVAL=`cat conftest1.out | sed 's/ //g'`
- eval "pac_cv_prog_fc_int_kind_$sellen"=$KINDVAL
- INTEGER_KIND=$KINDVAL
- fi
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KINDVAL" >&5
-$as_echo "$KINDVAL" >&6; }
- fi # not cached
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi # is not cross compiling
- if test "$INTEGER_KIND" = "-1" ; then
- # In our experience, this usually means that there is some
- # problem building and/or running the f90 program. Fail
- # in this case rather than attempt to continue
- as_fn_error $? "Unable to determine Fortran 90 KIND values for either address-sized integers or offset-sized integers." "$LINENO" 5
- fi
- #
- # Some compilers won't allow a -1 kind (e.g., absoft). In this case,
- # use a fallback (sizeof(int) kind)
- if test "$ADDRESS_KIND" = "-1" -o "$OFFSET_KIND" = "-1" ; then
- if test "$ADDRESS_KIND" = "-1" ; then
- ADDRESS_KIND=$INTEGER_KIND
- fi
- if test "$OFFSET_KIND" = "-1" ; then
- OFFSET_KIND=$INTEGER_KIND
- fi
- fi
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if real*8 is supported in Fortran 90" >&5
-$as_echo_n "checking if real*8 is supported in Fortran 90... " >&6; }
-if ${pac_cv_fort90_real8+:} false; then :
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
+$as_echo_n "checking size of unsigned long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long+:} false; then :
$as_echo_n "(cached) " >&6
else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then :
- cat > conftest.$ac_ext <<_ACEOF
+else
+ if test "$ac_cv_type_unsigned_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
- program main
- real*8 a
- end
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
- pac_cv_fort90_real8=yes
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if ${ac_cv_sizeof_long_long+:} false; then :
+ $as_echo_n "(cached) " >&6
else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
- pac_cv_fort90_real8=no
-
+else
+ if test "$ac_cv_type_long_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long_long=0
+ fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort90_real8" >&5
-$as_echo "$pac_cv_fort90_real8" >&6; }
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
- WTIME_DOUBLE_TYPE="DOUBLE PRECISION"
- # Save a copy of the original mpi_base.f90 file
- if test "$enable_fc" = "yes" -a "$pac_cv_fort90_real8" = "yes" ; then
- WTIME_DOUBLE_TYPE="REAL*8"
- fi
- # WTIME_DOUBLE_TYPE is substituted into mpi_base.f90
- fi
- # Make sure that address kind and offset kind have values.
- if test -z "$ADDRESS_KIND" ; then
- ADDRESS_KIND=0
- fi
- if test -z "$OFFSET_KIND" ; then
- OFFSET_KIND=0
- fi
- # Note, however, that zero value are (in all practical case) invalid
- # for Fortran 90, and indicate a failure. Test and fail if Fortran 90
- # enabled.
- if test "$enable_fc" = "yes" ; then
- if test "$ADDRESS_KIND" -le 0 -o "$OFFSET_KIND" -le 0 ; then
- as_fn_error $? "Unable to determine Fortran 90 integer kinds for MPI types. If you do not need Fortran 90, add --disable-fc to the configure options." "$LINENO" 5
- # If the above is converted to a warning, you need to change
- # enable_fc and remote f90 from the bindings
- enable_fc=no
- fi
- fi
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
+$as_echo_n "checking size of unsigned long long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long" "$ac_includes_default"; then :
- # Some compilers may require special directives to handle the common
- # block in a library. In particular, directives are needed for Microsoft
- # Windows to support dynamic library import. The following six
- # directives may be needed:
- # CMS\$ATTRIBUTES DLLIMPORT::/MPIPRIV1/
- # CMS\$ATTRIBUTES DLLIMPORT::/MPIPRIV2/
- # CMS\$ATTRIBUTES DLLIMPORT::/MPIPRIVC/
- # CDEC\$ATTRIBUTES DLLIMPORT::/MPIPRIV1/
- # CDEC\$ATTRIBUTES DLLIMPORT::/MPIPRIV2/
- # CDEC\$ATTRIBUTES DLLIMPORT::/MPIPRIVC/
- # CMS is for the Microsoft compiler,
- # CDEC is (we believe) for the DEC Fortran compiler.
- # We need to make this a configure-time variable because some compilers
- # (in particular, a version of the Intel Fortran compiler for Linux)
- # will read directives for other compilers and then flag as fatal
- # errors directives that it does not support but does recognize.
+else
+ if test "$ac_cv_type_unsigned_long_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_long_long=0
+ fi
+fi
- DLLIMPORT=""
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
- # FIXME:
- # We also need to include
- # SIZEOF_FC_MPI_OFFSET
- # SIZEOF_FC_MPI_AINT
- #
- # If other "kinds" are supported, MPI_SIZEOF needs to identify
- # those as well. This is very difficult to do in a general way.
- # To start with, we use the sizes determined for the Fortran 77 values.
- # These must be the same as for the Fortran 90 values.
- CROSS_F90_SIZEOF_INTEGER=${CROSS_F90_SIZEOF_INTEGER:-0}
- CROSS_F90_SIZEOF_REAL=${CROSS_F90_SIZEOF_REAL:-0}
- CROSS_F90_SIZEOF_DOUBLE_PRECISION=${CROSS_F90_SIZEOF_DOUBLE_PRECISION:-0}
- SIZEOF_FC_INTEGER=$CROSS_F90_SIZEOF_INTEGER
- SIZEOF_FC_REAL=$CROSS_F90_SIZEOF_REAL
- SIZEOF_FC_CHARACTER=1
- SIZEOF_FC_DOUBLE_PRECISION=$CROSS_F90_SIZEOF_DOUBLE_PRECISION
- if test "$pac_cv_f77_sizeof_integer" -gt 0 -a \
- "$SIZEOF_FC_INTEGER" = "0" ; then
- SIZEOF_FC_INTEGER=$pac_cv_f77_sizeof_integer
- fi
- if test "$pac_cv_f77_sizeof_real" -gt 0 -a "$SIZEOF_FC_REAL" = "0" ; then
- SIZEOF_FC_REAL=$pac_cv_f77_sizeof_real
- fi
- if test "$pac_cv_f77_sizeof_double_precision" -gt 0 -a \
- "$SIZEOF_FC_DOUBLE_PRECISION" = "0" ; then
- SIZEOF_FC_DOUBLE_PRECISION=$pac_cv_f77_sizeof_double_precision
- fi
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
+_ACEOF
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5
+$as_echo_n "checking size of float... " >&6; }
+if ${ac_cv_sizeof_float+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then :
+else
+ if test "$ac_cv_type_float" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (float)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_float=0
+ fi
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5
+$as_echo "$ac_cv_sizeof_float" >&6; }
- # REQD is short for "real equal double precision" and is set to the
- # Fortran 90 comment character if true. This is necessary to
- # allow the mpi_sizeofs module to be built, since if this part of the
- # Fortran standard is violated by the compiler (unfortunately common,
- # as some applications are written to require this non-standard
- # version), the double precision versions of the MPI_SIZEOF routine
- # must be commented out of the module (!).
- REQD=
- if test "$SIZEOF_FC_REAL" = "$SIZEOF_FC_DOUBLE_PRECISION" ; then
- REQD="!"
- fi
- # Is integer*1 supported, and is it a different size than integer?
- REQI1="!"
- if test "$pac_cv_fort_integer1" = yes -a "$SIZEOF_FC_INTEGER" != 1 ; then
- REQI1=
- fi
- # Is integer*2 supported, and is it a different size than integer?
- REQI2="!"
- if test "$pac_cv_fort_integer2" = yes -a "$SIZEOF_FC_INTEGER" != 2 ; then
- REQI2=
- fi
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_FLOAT $ac_cv_sizeof_float
+_ACEOF
- # Is integer*8 supported, and is it a different size than integer?
- REQI8="!"
- if test "$pac_cv_fort_integer8" = yes -a "$SIZEOF_FC_INTEGER" != 8 ; then
- REQI8=
- fi
- #
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
+$as_echo_n "checking size of double... " >&6; }
+if ${ac_cv_sizeof_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then :
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+else
+ if test "$ac_cv_type_double" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (double)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_double=0
+ fi
+fi
fi
-# ----------------------------------------------------------------------------
-# C++ types
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
+$as_echo "$ac_cv_sizeof_double" >&6; }
-# default to null types
-# Set to "0x0c000000" instead of "MPI_DATATYPE_NULL" because these values
-# sometimes are used in preprocessor tests where we cannot compare the
-# type-casted values.
-MPIR_CXX_BOOL=0x0c000000
-MPIR_CXX_COMPLEX=0x0c000000
-MPIR_CXX_DOUBLE_COMPLEX=0x0c000000
-MPIR_CXX_LONG_DOUBLE_COMPLEX=0x0c000000
-MPI_F77_CXX_BOOL=MPI_DATATYPE_NULL
-MPI_F77_CXX_FLOAT_COMPLEX=MPI_DATATYPE_NULL
-MPI_F77_CXX_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
-MPI_F77_CXX_LONG_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
-if test "$enable_cxx" = "yes" ; then
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- # The cast to long int works around a bug in the HP C Compiler
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5
+$as_echo_n "checking size of long double... " >&6; }
+if ${ac_cv_sizeof_long_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long_double" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long double)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long_double=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5
+$as_echo "$ac_cv_sizeof_long_double" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of bool" >&5
-$as_echo_n "checking size of bool... " >&6; }
-if ${ac_cv_sizeof_bool+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (bool))" "ac_cv_sizeof_bool" "$ac_includes_default"; then :
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
else
- if test "$ac_cv_type_bool" = yes; then
+ if test "$ac_cv_type_void_p" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (bool)
+as_fn_error 77 "cannot compute sizeof (void *)
See \`config.log' for more details" "$LINENO" 5; }
else
- ac_cv_sizeof_bool=0
+ ac_cv_sizeof_void_p=0
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_bool" >&5
-$as_echo "$ac_cv_sizeof_bool" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_BOOL $ac_cv_sizeof_bool
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
_ACEOF
- # Find a C type that matches the size of the C++ boolean type
- case "$ac_cv_sizeof_bool" in
- $ac_cv_sizeof__Bool)
- bool_type=_Bool
- ;;
- $ac_cv_sizeof_unsigned_char)
- bool_type="unsigned char"
- ;;
- $ac_cv_sizeof_unsigned_short)
- bool_type="unsigned short"
- ;;
- $ac_cv_sizeof_unsigned_int)
- bool_type="unsigned int"
- ;;
- $ac_cv_sizeof_unsigned_long)
- bool_type="unsigned long"
- ;;
- $ac_cv_sizeof_unsigned_long_long)
- bool_type="unsigned long long"
- ;;
- *)
- as_fn_error $? "unable to determine matching C type for C++ bool" "$LINENO" 5
- ;;
- esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
-cat >>confdefs.h <<_ACEOF
-#define MPIR_CXX_BOOL_CTYPE $bool_type
+int
+main ()
+{
+
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
-ac_fn_cxx_check_header_mongrel "$LINENO" "complex" "ac_cv_header_complex" "$ac_includes_default"
-if test "x$ac_cv_header_complex" = xyes; then :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
fi
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
- if test "$ac_cv_header_complex" = "yes" ; then
- # The C++ complex types are all templated. We finagle this by
- # defining a standin name
- # The cast to long int works around a bug in the HP C Compiler
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+for ac_header in stddef.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
+if test "x$ac_cv_header_stddef_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STDDEF_H 1
+_ACEOF
+
+fi
+
+done
+
+# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Complex" >&5
-$as_echo_n "checking size of Complex... " >&6; }
-if ${ac_cv_sizeof_Complex+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5
+$as_echo_n "checking size of wchar_t... " >&6; }
+if ${ac_cv_sizeof_wchar_t+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (Complex))" "ac_cv_sizeof_Complex" "#include <stdio.h>
-#include <complex>
-using namespace std;
-#define Complex complex<float>
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "
+#ifdef HAVE_STDDEF_H
+#include <stddef.h>
+#endif
"; then :
else
- if test "$ac_cv_type_Complex" = yes; then
+ if test "$ac_cv_type_wchar_t" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (Complex)
+as_fn_error 77 "cannot compute sizeof (wchar_t)
See \`config.log' for more details" "$LINENO" 5; }
else
- ac_cv_sizeof_Complex=0
+ ac_cv_sizeof_wchar_t=0
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_Complex" >&5
-$as_echo "$ac_cv_sizeof_Complex" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5
+$as_echo "$ac_cv_sizeof_wchar_t" >&6; }
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_COMPLEX $ac_cv_sizeof_Complex
+#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
_ACEOF
- # The cast to long int works around a bug in the HP C Compiler
+
+# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of DoubleComplex" >&5
-$as_echo_n "checking size of DoubleComplex... " >&6; }
-if ${ac_cv_sizeof_DoubleComplex+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float_int" >&5
+$as_echo_n "checking size of float_int... " >&6; }
+if ${ac_cv_sizeof_float_int+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (DoubleComplex))" "ac_cv_sizeof_DoubleComplex" "#include <stdio.h>
-#include <complex>
-using namespace std;
-#define DoubleComplex complex<double>
-
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float_int))" "ac_cv_sizeof_float_int" "typedef struct { float a; int b; } float_int;
"; then :
else
- if test "$ac_cv_type_DoubleComplex" = yes; then
+ if test "$ac_cv_type_float_int" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (DoubleComplex)
+as_fn_error 77 "cannot compute sizeof (float_int)
See \`config.log' for more details" "$LINENO" 5; }
else
- ac_cv_sizeof_DoubleComplex=0
+ ac_cv_sizeof_float_int=0
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_DoubleComplex" >&5
-$as_echo "$ac_cv_sizeof_DoubleComplex" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float_int" >&5
+$as_echo "$ac_cv_sizeof_float_int" >&6; }
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_DOUBLECOMPLEX $ac_cv_sizeof_DoubleComplex
+#define SIZEOF_FLOAT_INT $ac_cv_sizeof_float_int
_ACEOF
- if test "$MPID_NO_LONG_DOUBLE" != yes ; then
- # The cast to long int works around a bug in the HP C Compiler
+# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of LongDoubleComplex" >&5
-$as_echo_n "checking size of LongDoubleComplex... " >&6; }
-if ${ac_cv_sizeof_LongDoubleComplex+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double_int" >&5
+$as_echo_n "checking size of double_int... " >&6; }
+if ${ac_cv_sizeof_double_int+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (LongDoubleComplex))" "ac_cv_sizeof_LongDoubleComplex" "#include <stdio.h>
-#include <complex>
-using namespace std;
-#define LongDoubleComplex complex<long double>
-
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double_int))" "ac_cv_sizeof_double_int" "typedef struct { double a; int b; } double_int;
"; then :
else
- if test "$ac_cv_type_LongDoubleComplex" = yes; then
+ if test "$ac_cv_type_double_int" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (LongDoubleComplex)
+as_fn_error 77 "cannot compute sizeof (double_int)
See \`config.log' for more details" "$LINENO" 5; }
else
- ac_cv_sizeof_LongDoubleComplex=0
+ ac_cv_sizeof_double_int=0
fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_LongDoubleComplex" >&5
-$as_echo "$ac_cv_sizeof_LongDoubleComplex" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double_int" >&5
+$as_echo "$ac_cv_sizeof_double_int" >&6; }
cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONGDOUBLECOMPLEX $ac_cv_sizeof_LongDoubleComplex
+#define SIZEOF_DOUBLE_INT $ac_cv_sizeof_double_int
_ACEOF
- fi
-
- # If either complex or double complex have length 0, then mark
- # c++ complex as unavailable
- if test "$ac_cv_sizeof_Complex" != 0 -a \
- "$ac_cv_sizeof_DoubleComplex" != 0 ; then
-
-$as_echo "#define HAVE_CXX_COMPLEX 1" >>confdefs.h
-
- fi
-
- # Datatypes are given by
- # 0x4c00 <length in bytes> (1 byte) <unique num> (1 byte)
- # where the unique nums are
- # 33,34,35,36
- case "$ac_cv_sizeof_bool" in
- 1) MPIR_CXX_BOOL=0x4c000133 ;;
- 2) MPIR_CXX_BOOL=0x4c000233 ;;
- 4) MPIR_CXX_BOOL=0x4c000433 ;;
- 8) MPIR_CXX_BOOL=0x4c000833 ;;
- *) ;;
- esac
- case "$ac_cv_sizeof_Complex" in
- 8) MPIR_CXX_COMPLEX=0x4c000834 ;;
- 16) MPIR_CXX_COMPLEX=0x4c001034 ;;
- *) ;;
- esac
- case "$ac_cv_sizeof_DoubleComplex" in
- 8) MPIR_CXX_DOUBLE_COMPLEX=0x4c000835 ;;
- 16) MPIR_CXX_DOUBLE_COMPLEX=0x4c001035 ;;
- 32) MPIR_CXX_DOUBLE_COMPLEX=0x4c002035 ;;
- *) ;;
- esac
- # only enable CXX "long double" if we have a C "long double", since we
- # currently perform reductions on CXX "long double" types via C.
- if test "X$pac_cv_have_long_double" = "Xyes" ; then
- case "$ac_cv_sizeof_LongDoubleComplex" in
- 8) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c000836 ;;
- 16) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c001036 ;;
- 24) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c001836 ;;
- 32) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c002036 ;;
- *) ;;
- esac
- fi
- fi
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
- # Make these available to the collective operations and other code
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long_int" >&5
+$as_echo_n "checking size of long_int... " >&6; }
+if ${ac_cv_sizeof_long_int+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long_int))" "ac_cv_sizeof_long_int" "typedef struct { long a; int b; } long_int;
+"; then :
-cat >>confdefs.h <<_ACEOF
-#define MPIR_CXX_BOOL_VALUE $MPIR_CXX_BOOL
-_ACEOF
+else
+ if test "$ac_cv_type_long_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long_int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long_int=0
+ fi
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_int" >&5
+$as_echo "$ac_cv_sizeof_long_int" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define MPIR_CXX_COMPLEX_VALUE $MPIR_CXX_COMPLEX
-_ACEOF
cat >>confdefs.h <<_ACEOF
-#define MPIR_CXX_DOUBLE_COMPLEX_VALUE $MPIR_CXX_DOUBLE_COMPLEX
+#define SIZEOF_LONG_INT $ac_cv_sizeof_long_int
_ACEOF
-cat >>confdefs.h <<_ACEOF
-#define MPIR_CXX_LONG_DOUBLE_COMPLEX_VALUE $MPIR_CXX_LONG_DOUBLE_COMPLEX
-_ACEOF
-
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short_int" >&5
+$as_echo_n "checking size of short_int... " >&6; }
+if ${ac_cv_sizeof_short_int+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short_int))" "ac_cv_sizeof_short_int" "typedef struct { short a; int b; } short_int;
+"; then :
- # compute F77 decimal constant values for these types
- MPI_F77_CXX_BOOL=`printf "%d" $MPIR_CXX_BOOL`
- MPI_F77_CXX_FLOAT_COMPLEX=`printf "%d" $MPIR_CXX_COMPLEX`
- MPI_F77_CXX_DOUBLE_COMPLEX=`printf "%d" $MPIR_CXX_DOUBLE_COMPLEX`
- MPI_F77_CXX_LONG_DOUBLE_COMPLEX=`printf "%d" $MPIR_CXX_LONG_DOUBLE_COMPLEX`
+else
+ if test "$ac_cv_type_short_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (short_int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_short_int=0
+ fi
fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short_int" >&5
+$as_echo "$ac_cv_sizeof_short_int" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT_INT $ac_cv_sizeof_short_int
+_ACEOF
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of two_int" >&5
+$as_echo_n "checking size of two_int... " >&6; }
+if ${ac_cv_sizeof_two_int+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (two_int))" "ac_cv_sizeof_two_int" "typedef struct { int a; int b; } two_int;
+"; then :
-
-
-# ------------------------------------------------------------------------
-# Test if type_tag_for_datatype is agnostic to modifiers such as const, volatile, and restrict
-# if not, the type tags are disabled to avoid compiler warings. A new type_tag for const etc. does
-# does not help, since only the latest type_tag definition is used. Type tags are defined in mpi.h,
-# therefore, they must be also be activated/deavtivated there
-
- if test -z "${pac_save_CFLAGS_nesting}" ; then
- pac_save_CFLAGS_nesting=0
- fi
- eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}='"$CFLAGS"'
- pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} + 1`
-
-
-
- if echo "$CFLAGS" | $FGREP -e "\<-Werror\>" >/dev/null 2>&1; then :
- echo "CFLAGS(='$CFLAGS') contains '-Werror', not appending" >&5
else
- echo "CFLAGS(='$CFLAGS') does not contain '-Werror', appending" >&5
- CFLAGS="$CFLAGS -Werror"
+ if test "$ac_cv_type_two_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (two_int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_two_int=0
+ fi
+fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_two_int" >&5
+$as_echo "$ac_cv_sizeof_two_int" >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-typedef int TEST_Datatype;
-#define TEST_INT ((TEST_Datatype)0x44)
-static const TEST_Datatype test_int __attribute__((type_tag_for_datatype(TEST,int))) = TEST_INT;
-void test(const void* buffer, TEST_Datatype datatype)__attribute__((pointer_with_type_tag(TEST,1,2)));
-int
-main ()
-{
-const int buf[10];
-test(buf, TEST_INT);
- ;
- return 0;
-}
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_TWO_INT $ac_cv_sizeof_two_int
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_attr_support=yes
-else
- ac_attr_support=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$ac_attr_support" = yes
-then
- DISABLE_TAG_SUPPORT="#undef NO_TAGS_WITH_MODIFIERS"
-else
- DISABLE_TAG_SUPPORT="#define NO_TAGS_WITH_MODIFIERS 1"
-fi
-
- pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} - 1`
- eval CFLAGS="\$pac_save_CFLAGS_${pac_save_CFLAGS_nesting}"
- eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}=""
-
-# ----------------------------------------------------------------------------
-# Check for the alignment rules moves with types int64_t etc. These
-# are used in the datatype code to perform pack and unpack operations.
-# These only determine if different alignments *work*, not whether they
-# work efficiently. The datatype pack code (should) allow the developer
-# to include stricter alignment rules than are needed for correctness to
-# get better performance.
-if test "$ac_cv_c_int64_t" != "no" -o -n "$INT64_T" ; then
- default_int64_t_alignment=${CROSS_INT64_T_ALIGNMENT:-"unknown"}
- if test -z "$INT64_T" ; then
- if test "$ac_cv_c_int64_t" = yes ; then
- INT64_T="int64_t"
- else
- INT64_T="$ac_cv_int64_t"
- fi
- fi
- # We use the type that we're going use for int64.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alignment restrictions on $INT64_T" >&5
-$as_echo_n "checking for alignment restrictions on $INT64_T... " >&6; }
-if ${pac_cv_int64_t_alignment+:} false; then :
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long_double_int" >&5
+$as_echo_n "checking size of long_double_int... " >&6; }
+if ${ac_cv_sizeof_long_double_int+:} false; then :
$as_echo_n "(cached) " >&6
-else
-
- if test "$cross_compiling" = yes; then :
- pac_cv_int64_t_alignment=$default_int64_t_alignment
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <stdlib.h>
-int main(int argc, char **argv )
-{
- $INT64_T *p1, v;
- char *buf_p = (char *)malloc( 64 ), *bp;
- bp = buf_p;
- /* Make bp aligned on 4, not 8 bytes */
- if (!( (long)bp & 0x7 ) ) bp += 4;
- p1 = ($INT64_T *)bp;
- v = -1;
- *p1 = v;
- if (!( (long)bp & 0x3 ) ) bp += 2;
- p1 = ($INT64_T *)bp;
- *p1 = 1;
- if (!( (long)bp & 0x1 ) ) bp += 1;
- p1 = ($INT64_T *)bp;
- *p1 = 1;
- return 0;
-}
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long_double_int))" "ac_cv_sizeof_long_double_int" "typedef struct { long double a; int b;} long_double_int;
+"; then :
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_int64_t_alignment=no
else
- pac_cv_int64_t_alignment=yes
+ if test "$ac_cv_type_long_double_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long_double_int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long_double_int=0
+ fi
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double_int" >&5
+$as_echo "$ac_cv_sizeof_long_double_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_DOUBLE_INT $ac_cv_sizeof_long_double_int
+_ACEOF
+
+
+
+# sys/bitypes.h defines the int16_t etc. on some systems (e.g., OSF1).
+# Include it when testing for these types
+ac_fn_c_check_header_mongrel "$LINENO" "sys/bitypes.h" "ac_cv_header_sys_bitypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_bitypes_h" = xyes; then :
+ use_bitypes="#include <sys/bitypes.h>"
+$as_echo "#define HAVE_SYS_BITYPES_H 1" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_int64_t_alignment" >&5
-$as_echo "$pac_cv_int64_t_alignment" >&6; }
- if test "$pac_cv_int64_t_alignment" = "no" ; then
-$as_echo "#define HAVE_ANY_INT64_T_ALIGNMENT 1" >>confdefs.h
- fi
+# A C99 compliant compiler should have inttypes.h for fixed-size int types
+for ac_header in inttypes.h stdint.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
fi
-if test "$ac_cv_int32_t" != "no" ; then
- default_int32_t_alignment=${CROSS_INT32_T_ALIGNMENT:-"unknown"}
- if test -z "$INT32_T" ; then
- if test "$ac_cv_c_int32_t" = yes ; then
- INT32_T="int32_t"
- else
- INT32_T="$ac_cv_int32_t"
- fi
- fi
+done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alignment restrictions on int32_t" >&5
-$as_echo_n "checking for alignment restrictions on int32_t... " >&6; }
-if ${pac_cv_int32_t_alignment+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- pac_cv_int32_t_alignment=$default_int32_t_alignment
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+# Check for types
+ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t"
+case $ac_cv_c_int8_t in #(
+ no|yes) ;; #(
+ *)
-#include <sys/types.h>
-#include <stdlib.h>
-int main(int argc, char **argv )
-{
- $INT32_T *p1, v;
- char *buf_p = (char *)malloc( 64 ), *bp;
- bp = buf_p;
- /* Make bp aligned on 4, not 8 bytes */
- if (!( (long)bp & 0x7 ) ) bp += 4;
- p1 = ($INT32_T *)bp;
- v = -1;
- *p1 = v;
- if (!( (long)bp & 0x3 ) ) bp += 2;
- p1 = ($INT32_T *)bp;
- *p1 = 1;
- if (!( (long)bp & 0x1 ) ) bp += 1;
- p1 = ($INT32_T *)bp;
- *p1 = 1;
- return 0;
-}
+cat >>confdefs.h <<_ACEOF
+#define int8_t $ac_cv_c_int8_t
+_ACEOF
+;;
+esac
+
+ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t"
+case $ac_cv_c_int16_t in #(
+ no|yes) ;; #(
+ *)
+cat >>confdefs.h <<_ACEOF
+#define int16_t $ac_cv_c_int16_t
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_int32_t_alignment=no
-else
- pac_cv_int32_t_alignment=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+;;
+esac
+ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
+case $ac_cv_c_int32_t in #(
+ no|yes) ;; #(
+ *)
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_int32_t_alignment" >&5
-$as_echo "$pac_cv_int32_t_alignment" >&6; }
- if test "$pac_cv_int32_t_alignment" = "no" ; then
+cat >>confdefs.h <<_ACEOF
+#define int32_t $ac_cv_c_int32_t
+_ACEOF
+;;
+esac
-$as_echo "#define HAVE_ANY_INT32_T_ALIGNMENT 1" >>confdefs.h
+ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t"
+case $ac_cv_c_int64_t in #(
+ no|yes) ;; #(
+ *)
- fi
-fi
+cat >>confdefs.h <<_ACEOF
+#define int64_t $ac_cv_c_int64_t
+_ACEOF
+;;
+esac
-# -----------------------------------------------------------------------------
-# Check for support of enable-coverage. Put this near the end of the tests
-# because the coverage options may affect the other tests.
+# Temporary issue in autoconf integer type checking (remove when
+# autoconf fixes this or provides a workaround for it)
+if test "$ac_cv_c_int8_t" != no ; then
+$as_echo "#define HAVE_INT8_T 1" >>confdefs.h
-for ac_prog in gcov
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_GCOV+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$GCOV"; then
- ac_cv_prog_GCOV="$GCOV" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_GCOV="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
+fi
+if test "$ac_cv_c_int16_t" != no ; then
+
+$as_echo "#define HAVE_INT16_T 1" >>confdefs.h
fi
+if test "$ac_cv_c_int32_t" != no ; then
+
+$as_echo "#define HAVE_INT32_T 1" >>confdefs.h
+
fi
-GCOV=$ac_cv_prog_GCOV
-if test -n "$GCOV"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5
-$as_echo "$GCOV" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+if test "$ac_cv_c_int64_t" != no ; then
+
+$as_echo "#define HAVE_INT64_T 1" >>confdefs.h
+
fi
+# The following make these definitions:
+# define _UINT<n>_T 1
+# if uint<n>_t is available. E.g., define _UINT8_T as 1 if uint8_t is available
+# if not available, define uint<n>_t as the related C type, e.g.,
+# define uint8_t unsigned char
+#
+ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t"
+case $ac_cv_c_uint8_t in #(
+ no|yes) ;; #(
+ *)
- test -n "$GCOV" && break
-done
+$as_echo "#define _UINT8_T 1" >>confdefs.h
-# Check whether --enable-coverage was given.
-if test "${enable_coverage+set}" = set; then :
- enableval=$enable_coverage;
-else
- enable_coverage=no
-fi
+cat >>confdefs.h <<_ACEOF
+#define uint8_t $ac_cv_c_uint8_t
+_ACEOF
+;;
+ esac
+ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t"
+case $ac_cv_c_uint16_t in #(
+ no|yes) ;; #(
+ *)
-if test "$enable_coverage" = "yes" ; then
- if test "$ac_cv_c_compiler_gnu" = "yes" ; then
- CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
- LIBS="$LIBS -lgcov"
- if test ${WRAPPER_CFLAGS+set} = set ; then
- WRAPPER_CFLAGS="$WRAPPER_CFLAGS -fprofile-arcs -ftest-coverage"
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
-$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
- fi
- if test "$enable_cxx" = "yes" ; then
- if test "$ac_cv_cxx_compiler_gnu" = "yes" ; then
- CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
- LIBS="$LIBS -lgcov"
- if test ${WRAPPER_CXXFLAGS+set} = set ; then
- WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -fprofile-arcs -ftest-coverage"
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
-$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
- fi
- fi
- # Add similar options for g77 so that the Fortran tests will also
- #
- if test "$enable_f77" = yes ; then
- if test "$ac_cv_f77_compiler_gnu" = "yes" ; then
- FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage"
- LIBS="$LIBS -lgcov"
- if test ${WRAPPER_FFLAGS+set} = set ; then
- WRAPPER_FFLAGS="$WRAPPER_FFLAGS -fprofile-arcs -ftest-coverage"
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&5
-$as_echo "$as_me: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&2;}
- fi
- fi
- if test "$enable_fc" = yes ; then
- if test "$ac_cv_fc_compiler_gnu" = "yes" ; then
- FCFLAGS="$FCFLAGS -fprofile-arcs -ftest-coverage"
- LIBS="$LIBS -lgcov"
- if test ${WRAPPER_FCFLAGS+set} = set ; then
- WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -fprofile-arcs -ftest-coverage"
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GFORTRAN" >&5
-$as_echo "$as_me: WARNING: --enable-coverage only supported for GFORTRAN" >&2;}
- fi
- fi
- # On some platforms (e.g., Mac Darwin), we must also *link*
- # with the -fprofile-args -ftest-coverage option.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compilation with coverage analysis enabled works" >&5
-$as_echo_n "checking whether compilation with coverage analysis enabled works... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int main(int argc, char **argv){return 1;}
+
+cat >>confdefs.h <<_ACEOF
+#define uint16_t $ac_cv_c_uint16_t
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "Unable to link programs when coverage analysis enabled" "$LINENO" 5
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+;;
+ esac
- # Test for the routines that we need to use to ensure that the
- # data files are (usually) written out
- # FIXME: Some versions of Linux provide usleep, but it rounds times
- # up to the next second (!)
- for ac_func in usleep
-do :
- ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
-if test "x$ac_cv_func_usleep" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_USLEEP 1
+ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
+case $ac_cv_c_uint32_t in #(
+ no|yes) ;; #(
+ *)
+
+$as_echo "#define _UINT32_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint32_t $ac_cv_c_uint32_t
_ACEOF
+;;
+ esac
-fi
-done
+ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
+case $ac_cv_c_uint64_t in #(
+ no|yes) ;; #(
+ *)
+$as_echo "#define _UINT64_T 1" >>confdefs.h
- # NOTE: using a "pac_cv_" prefix but not caching because of xFLAGS "side effects"
- pac_cv_use_coverage=yes
-$as_echo "#define USE_COVERAGE 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define uint64_t $ac_cv_c_uint64_t
+_ACEOF
+;;
+ esac
+
+
+# Temporary issue in autoconf integer type checking (remove when
+# autoconf fixes this or provides a workaround for it)
+if test "$ac_cv_c_uint8_t" != no ; then
+
+$as_echo "#define HAVE_UINT8_T 1" >>confdefs.h
fi
- if test "X$pac_cv_use_coverage" = "Xyes"; then
- BUILD_COVERAGE_TRUE=
- BUILD_COVERAGE_FALSE='#'
-else
- BUILD_COVERAGE_TRUE='#'
- BUILD_COVERAGE_FALSE=
+if test "$ac_cv_c_uint16_t" != no ; then
+
+$as_echo "#define HAVE_UINT16_T 1" >>confdefs.h
+
fi
+if test "$ac_cv_c_uint32_t" != no ; then
+$as_echo "#define HAVE_UINT32_T 1" >>confdefs.h
+fi
+if test "$ac_cv_c_uint64_t" != no ; then
-# -----------------------------------------------------------------------------
-# Look for Standard headers
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
+$as_echo "#define HAVE_UINT64_T 1" >>confdefs.h
-int
-main ()
-{
+fi
- ;
- return 0;
-}
+# Other C99 types.
+for ac_header in stdbool.h complex.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
+done
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of _Bool" >&5
+$as_echo_n "checking size of _Bool... " >&6; }
+if ${ac_cv_sizeof__Bool+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (_Bool))" "ac_cv_sizeof__Bool" "
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
+#endif
+
+"; then :
else
- ac_cv_header_stdc=no
+ if test "$ac_cv_type__Bool" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (_Bool)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof__Bool=0
+ fi
fi
-rm -f conftest*
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof__Bool" >&5
+$as_echo "$ac_cv_sizeof__Bool" >&6; }
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF__BOOL $ac_cv_sizeof__Bool
+_ACEOF
-fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float _Complex" >&5
+$as_echo_n "checking size of float _Complex... " >&6; }
+if ${ac_cv_sizeof_float__Complex+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float _Complex))" "ac_cv_sizeof_float__Complex" "
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
#endif
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+"; then :
else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ if test "$ac_cv_type_float__Complex" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (float _Complex)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_float__Complex=0
+ fi
fi
fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float__Complex" >&5
+$as_echo "$ac_cv_sizeof_float__Complex" >&6; }
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-fi
-# Check for a specific header
-# Grrr. OS/X fails the test for sys/uio.h because uio *requires* sys/types.h
-# to compile. Thus, we'll make that a separate test
-# stddef.h is sometimes needed for types like wchar_t
-for ac_header in stdlib.h stdarg.h sys/types.h string.h inttypes.h limits.h stddef.h errno.h sys/socket.h sys/time.h unistd.h endian.h assert.h sys/param.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_FLOAT__COMPLEX $ac_cv_sizeof_float__Complex
_ACEOF
-fi
-
-done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/uio.h" >&5
-$as_echo_n "checking for sys/uio.h... " >&6; }
-if ${ac_cv_header_sys_uio_h+:} false; then :
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double _Complex" >&5
+$as_echo_n "checking size of double _Complex... " >&6; }
+if ${ac_cv_sizeof_double__Complex+:} false; then :
$as_echo_n "(cached) " >&6
else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double _Complex))" "ac_cv_sizeof_double__Complex" "
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <sys/uio.h>
+"; then :
-int
-main ()
-{
-int a;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_sys_uio_h=yes
else
- ac_cv_header_sys_uio_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$ac_cv_type_double__Complex" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (double _Complex)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_double__Complex=0
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_uio_h" >&5
-$as_echo "$ac_cv_header_sys_uio_h" >&6; }
-if test "$ac_cv_header_sys_uio_h" = yes ; then
-
-$as_echo "#define HAVE_SYS_UIO_H 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double__Complex" >&5
+$as_echo "$ac_cv_sizeof_double__Complex" >&6; }
-# Check for special types
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-else
cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
+#define SIZEOF_DOUBLE__COMPLEX $ac_cv_sizeof_double__Complex
_ACEOF
-fi
-
-# These are used to support timeouts
-for ac_func in setitimer alarm
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+if test "X$pac_cv_have_long_double" = "Xyes"; then :
-fi
-done
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double _Complex" >&5
+$as_echo_n "checking size of long double _Complex... " >&6; }
+if ${ac_cv_sizeof_long_double__Complex+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double _Complex))" "ac_cv_sizeof_long_double__Complex" "
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
-# These are used for error reporting
-for ac_func in vsnprintf vsprintf
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+"; then :
+else
+ if test "$ac_cv_type_long_double__Complex" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long double _Complex)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long_double__Complex=0
+ fi
fi
-done
-if test "$ac_cv_func_vsnprintf" = "yes" ; then
- # vsnprintf may be declared in stdio.h and may need stdarg.h
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double__Complex" >&5
+$as_echo "$ac_cv_sizeof_long_double__Complex" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf needs a declaration" >&5
-$as_echo_n "checking whether vsnprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_vsnprintf+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-#include <stdarg.h>
-void (*fptr)(void) = (void(*)(void))vsnprintf;
-int
-main ()
-{
- ;
- return 0;
-}
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_DOUBLE__COMPLEX $ac_cv_sizeof_long_double__Complex
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_vsnprintf=no
-else
- pac_cv_func_decl_vsnprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_vsnprintf" >&5
-$as_echo "$pac_cv_func_decl_vsnprintf" >&6; }
-if test "$pac_cv_func_decl_vsnprintf" = "yes" ; then
+
+# we need really could just use the result of AC_CHECK_SIZEOF, but having a
+# HAVE_typename macro is useful for consistency
+ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define NEEDS_VSNPRINTF_DECL 1
+#define HAVE__BOOL 1
_ACEOF
fi
+ac_fn_c_check_type "$LINENO" "float _Complex" "ac_cv_type_float__Complex" "$ac_includes_default"
+if test "x$ac_cv_type_float__Complex" = xyes; then :
-fi
-# We would like to use strerror in the file namepublisher; it is also used
-# in MPIU_Strerror (whose implementation is broken if strerror is not found)
-for ac_func in strerror strncasecmp
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FLOAT__COMPLEX 1
_ACEOF
-fi
-done
-ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strerror_r" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
fi
+ac_fn_c_check_type "$LINENO" "double _Complex" "ac_cv_type_double__Complex" "$ac_includes_default"
+if test "x$ac_cv_type_double__Complex" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRERROR_R $ac_have_decl
+#define HAVE_DOUBLE__COMPLEX 1
_ACEOF
-for ac_func in strerror_r
-do :
- ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
-if test "x$ac_cv_func_strerror_r" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRERROR_R 1
-_ACEOF
fi
-done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
-$as_echo_n "checking whether strerror_r returns char *... " >&6; }
-if ${ac_cv_func_strerror_r_char_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_func_strerror_r_char_p=no
- if test $ac_cv_have_decl_strerror_r = yes; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
+if test "X$pac_cv_have_long_double" = "Xyes"; then :
- char buf[100];
- char x = *strerror_r (0, buf, sizeof buf);
- char *p = strerror_r (0, buf, sizeof buf);
- return !p || x;
+ ac_fn_c_check_type "$LINENO" "long double _Complex" "ac_cv_type_long_double__Complex" "$ac_includes_default"
+if test "x$ac_cv_type_long_double__Complex" = xyes; then :
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_func_strerror_r_char_p=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- else
- # strerror_r is not declared. Choose between
- # systems that have relatively inaccessible declarations for the
- # function. BeOS and DEC UNIX 4.0 fall in this category, but the
- # former has a strerror_r that returns char*, while the latter
- # has a strerror_r that returns `int'.
- # This test should segfault on the DEC system.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
- extern char *strerror_r ();
-int
-main ()
-{
-char buf[100];
- char x = *strerror_r (0, buf, sizeof buf);
- return ! isalpha (x);
- ;
- return 0;
-}
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LONG_DOUBLE__COMPLEX 1
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_strerror_r_char_p=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
- fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
-$as_echo "$ac_cv_func_strerror_r_char_p" >&6; }
-if test $ac_cv_func_strerror_r_char_p = yes; then
-$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h
fi
-if test "$ac_cv_func_strerror_r" = "yes" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r needs a declaration" >&5
-$as_echo_n "checking whether strerror_r needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strerror_r+:} false; then :
- $as_echo_n "(cached) " >&6
+# Generate a hex version of the size of each type
+for type in short int long long_long float double long_double wchar_t \
+ float_int double_int long_int short_int two_int long_double_int \
+ _Bool float__Complex double__Complex long_double__Complex ; do
+ eval len=\$ac_cv_sizeof_$type
+ if test -z "$len" ; then
+ len=0
+ # Check for sizes from the CHECK_SIZEOF_DERIVED macro
+ eval pclen=\$ac_cv_sizeof_$type
+ if test -n "$pclen" ; then
+ len=$pclen
+ else
+ # check for a non-optional type
+ if test $type != long_long -a \
+ $type != long_double -a \
+ $type != long_double_int -a \
+ $type != _Bool -a \
+ $type != float__Complex -a \
+ $type != double__Complex -a \
+ $type != long_double__Complex ; then
+ as_fn_error $? "Configure was unable to determine the size of $type ; if cross compiling,
+use the environment variables CROSS_SIZEOF_typename, e.g., CROSS_SIZEOF_SHORT,
+or use the --with-cross=file configure option to specify a file containing
+Bourne (sh) shell assignments to CROSS_SIZEOF_typename for all datatype
+types. The program maint/getcross.c can be compiled and run on the target
+system; this program outputs an appropriate file for the --with-cross option" "$LINENO" 5
+ fi
+ fi
+ fi
+ #
+ # Take len and turn it into two hex digits (there are 8 bits available
+ # in the built-in datatype handle for the length; see
+ # src/mpid/common/datatype/mpidu_datatype.h)
+ if test "$len" -gt 255 ; then
+ as_fn_error $? "Type sizes greater than 255 bytes are not supported (type $type is $len bytes)" "$LINENO" 5
+ fi
+ tmplen=$len
+ hexlen=""
+ while test $tmplen -gt 0 ; do
+ lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
+ case $lowdigit in
+ 10) char=a ;;
+ 11) char=b ;;
+ 12) char=c ;;
+ 13) char=d ;;
+ 14) char=e ;;
+ 15) char=f ;;
+ *) char=$lowdigit ;;
+ esac
+ hexlen="$char$hexlen"
+ tmplen=`expr $tmplen / 16`
+ done
+ if test $len -lt 16 ; then
+ hexlen="0$hexlen"
+ fi
+ if test $len = 0 ; then
+ # This sometimes happens for wchar_t
+ hexlen="00";
+ fi
+ eval len_$type=$hexlen
+done
+# By definition, sizeof char is 1
+MPI_CHAR="0x4c000101"
+MPI_UNSIGNED_CHAR="0x4c000102"
+MPI_SHORT="0x4c00${len_short}03"
+MPI_UNSIGNED_SHORT="0x4c00${len_short}04"
+MPI_INT="0x4c00${len_int}05"
+MPI_UNSIGNED_INT="0x4c00${len_int}06"
+MPI_LONG="0x4c00${len_long}07"
+MPI_UNSIGNED_LONG="0x4c00${len_long}08"
+if test "$len_long_long" != 0 -a "$MPID_NO_LONG_LONG" != yes ; then
+ MPI_LONG_LONG="0x4c00${len_long_long}09"
else
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-void (*fptr)(void) = (void(*)(void))strerror_r;
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strerror_r=no
+ MPI_LONG_LONG=MPI_DATATYPE_NULL;
+fi
+MPI_FLOAT="0x4c00${len_float}0a"
+MPI_DOUBLE="0x4c00${len_double}0b"
+if test "$len_long_double" != 0 -a "$MPID_NO_LONG_DOUBLE" != yes ; then
+ MPI_LONG_DOUBLE="0x4c00${len_long_double}0c"
else
- pac_cv_func_decl_strerror_r=yes
+ MPI_LONG_DOUBLE=MPI_DATATYPE_NULL
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# If you change MPI_BYTE, you must change it in src/binding/fortran/mpif_h/buildiface
+MPI_BYTE="0x4c00010d"
+MPI_WCHAR="0x4c00${len_wchar_t}0e"
+MPI_PACKED="0x4c00010f"
+MPI_LB="0x4c000010"
+MPI_UB="0x4c000011"
+#
+# These should define the mixed types *only* for contiguous data.
+# For example, MPI_SHORT_INT may have a gap; it will need to be defined
+# as a derived type instead. For IA32, this only affects short_int.
+MPI_2INT="0x4c00${len_two_int}16"
+#
+# For now we aren't being too clever about figuring out which of these
+# are in fact contiguous, so these are all allocated as "real" types.
+#
+# These values correspond to direct types 0..5.
+#
+MPI_FLOAT_INT="0x8c000000"
+MPI_DOUBLE_INT="0x8c000001"
+MPI_LONG_INT="0x8c000002"
+MPI_SHORT_INT="0x8c000003"
+if test "$MPID_NO_LONG_DOUBLE" != yes ; then
+ MPI_LONG_DOUBLE_INT="0x8c000004"
+else
+ MPI_LONG_DOUBLE_INT=MPI_DATATYPE_NULL
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strerror_r" >&5
-$as_echo "$pac_cv_func_decl_strerror_r" >&6; }
-if test "$pac_cv_func_decl_strerror_r" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRERROR_R_DECL 1
-_ACEOF
+# 2 additional predefined types named in MPI-2
+MPI_SIGNED_CHAR="0x4c000118"
+if test "$len_long_long" != 0 -a "$MPID_NO_LONG_LONG" != yes ; then
+ MPI_UNSIGNED_LONG_LONG="0x4c00${len_long_long}19"
+else
+ MPI_UNSIGNED_LONG_LONG=MPI_DATATYPE_NULL
+fi
-fi
-fi
-# Use snprintf if possible when creating messages
-for ac_func in snprintf
-do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
-_ACEOF
-fi
-done
-if test "$ac_cv_func_snprintf" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
-else
- pac_cv_func_decl_snprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
-_ACEOF
-fi
-fi
-# qsort will be used in MPI_Comm_split, if available
-for ac_func in qsort
-do :
- ac_fn_c_check_func "$LINENO" "qsort" "ac_cv_func_qsort"
-if test "x$ac_cv_func_qsort" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_QSORT 1
-_ACEOF
-fi
-done
-# if we are using stdarg, we may need va_copy . Test to see if we have it
-# Since it may be a built-in instead of a function, we must try to
-# compile and link a program that uses it.
-# va_copy is currently used only in src/util/dbg_printf.c, in an obsolete
-# debugging routine. We may want to withdraw this (saving the
-# test in confdb/aclocal_cc.m4).
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
-$as_echo_n "checking for va_copy... " >&6; }
-if ${pac_cv_func_va_copy+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-void foo1( char *fmt, ... ) {
- va_list ap, list;
- va_start(ap,fmt);
- va_copy(list,ap);
- va_end(list);
- va_end(ap);
-}
-int
-main ()
-{
-foo1("a test %d", 3);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_func_va_copy=yes
-else
- pac_cv_func_va_copy=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_va_copy" >&5
-$as_echo "$pac_cv_func_va_copy" >&6; }
-if test "$pac_cv_func_va_copy" = "yes" ; then
-$as_echo "#define HAVE_VA_COPY 1" >>confdefs.h
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __va_copy" >&5
-$as_echo_n "checking for __va_copy... " >&6; }
-if ${pac_cv_func___va_copy+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-void foo1( char *fmt, ... ) {
- va_list ap, list;
- va_start(ap,fmt);
- __va_copy(list,ap);
- va_end(list);
- va_end(ap);
-}
-int
-main ()
-{
-foo1("a test %d", 3);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_func___va_copy=yes
-else
- pac_cv_func___va_copy=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func___va_copy" >&5
-$as_echo "$pac_cv_func___va_copy" >&6; }
- if test "$pac_cv_func___va_copy" = "yes" ; then
+#
+# FIXME: Leftover from separate fortran system
+## Export the basic C types so that the Fortran system can use them
+#export MPI_CHAR
+#export MPI_SHORT
+#export MPI_INT
+#export MPI_LONG
+#export MPI_LONG_LONG
+#export MPI_FLOAT
+#export MPI_DOUBLE
+#export MPI_LONG_DOUBLE
+#
+# Size-specific types. Initialize as NULL
+MPI_REAL4=MPI_DATATYPE_NULL
+MPI_REAL8=MPI_DATATYPE_NULL
+MPI_REAL16=MPI_DATATYPE_NULL
+MPI_COMPLEX8=MPI_DATATYPE_NULL
+MPI_COMPLEX16=MPI_DATATYPE_NULL
+MPI_COMPLEX32=MPI_DATATYPE_NULL
+MPI_INTEGER1=MPI_DATATYPE_NULL
+MPI_INTEGER2=MPI_DATATYPE_NULL
+MPI_INTEGER4=MPI_DATATYPE_NULL
+MPI_INTEGER8=MPI_DATATYPE_NULL
+MPI_INTEGER16=MPI_DATATYPE_NULL
+
-$as_echo "#define HAVE___VA_COPY 1" >>confdefs.h
- fi
-fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable argument list macro functionality" >&5
-$as_echo_n "checking for variable argument list macro functionality... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
- #include <stdio.h>
- #define conftest_va_arg_macro(...) printf(__VA_ARGS__)
-int
-main ()
-{
-conftest_va_arg_macro("a test %d", 3);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-$as_echo "#define HAVE_MACRO_VA_ARGS 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-# Check for alloca function. May set HAVE_ALLOCA_H and HAVE_ALLOCA
-# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
-# for constant arguments. Useless!
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
-$as_echo_n "checking for working alloca.h... " >&6; }
-if ${ac_cv_working_alloca_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <alloca.h>
-int
-main ()
-{
-char *p = (char *) alloca (2 * sizeof (int));
- if (p) return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_working_alloca_h=yes
-else
- ac_cv_working_alloca_h=no
+export MPI_REAL4
+export MPI_REAL8
+export MPI_REAL16
+export MPI_COMPLEX8
+export MPI_COMPLEX16
+export MPI_COMPLEX32
+export MPI_INTEGER1
+export MPI_INTEGER2
+export MPI_INTEGER4
+export MPI_INTEGER8
+export MPI_INTEGER16
+#
+# Try to find corresponding types for the size-specific types.
+#
+# Assume that the float/double/long double are simply spaced
+# Datatypes used up through 26 in Fortran
+# 27,28,29,2a,2b,2c
+if test "$ac_cv_sizeof_float" = "4" ; then
+ MPI_REAL4="0x4c000427"
+ MPI_COMPLEX8="0x4c000828"
+ MPIR_REAL4_CTYPE=float
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_sizeof_double" = "8" ; then
+ MPI_REAL8="0x4c000829"
+ MPI_COMPLEX16="0x4c00102a"
+ MPIR_REAL8_CTYPE=double
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
-$as_echo "$ac_cv_working_alloca_h" >&6; }
-if test $ac_cv_working_alloca_h = yes; then
+if test "$ac_cv_sizeof_long_double" = "16" -a "$MPID_NO_LONG_DOUBLE" != yes ; then
+ MPI_REAL16="0x4c00102b"
+ MPI_COMPLEX32="0x4c00202c"
+ MPIR_REAL16_CTYPE="long double"
+fi
+if test -n "$MPIR_REAL4_CTYPE" ; then
-$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define MPIR_REAL4_CTYPE $MPIR_REAL4_CTYPE
+_ACEOF
fi
+if test -n "$MPIR_REAL8_CTYPE" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-$as_echo_n "checking for alloca... " >&6; }
-if ${ac_cv_func_alloca_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
-# include <malloc.h>
-# define alloca _alloca
-# else
-# ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca (size_t);
-# endif
-# endif
-# endif
-# endif
-#endif
-
-int
-main ()
-{
-char *p = (char *) alloca (1);
- if (p) return 0;
- ;
- return 0;
-}
+cat >>confdefs.h <<_ACEOF
+#define MPIR_REAL8_CTYPE $MPIR_REAL8_CTYPE
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_func_alloca_works=yes
-else
- ac_cv_func_alloca_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
-$as_echo "$ac_cv_func_alloca_works" >&6; }
-if test $ac_cv_func_alloca_works = yes; then
+fi
+if test -n "$MPIR_REAL16_CTYPE" ; then
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define MPIR_REAL16_CTYPE $MPIR_REAL16_CTYPE
+_ACEOF
-else
- # The SVR3 libPW and SVR4 libucb both contain incompatible functions
-# that cause trouble. Some versions do not even contain alloca or
-# contain a buggy version. If you still want to use their alloca,
-# use ar to extract alloca.o from them instead of compiling alloca.c.
+fi
+# For complex 8/16/32, we assume that these are 2 consequetive real4/8/16
+#
+# Search for the integer types
+for type in char short int long long_long ; do
+ # ctype is a valid C type which we can use to declare a C version of
+ # this item
+ ctype=`echo $type | sed 's/_/ /'`
+ eval len=\$ac_cv_sizeof_$type
+ if test -n "$len" ; then
+ case $len in
+ 1) if test "$MPI_INTEGER1" = "MPI_DATATYPE_NULL" ; then
+ MPI_INTEGER1="0x4c00012d"
+ MPIR_INTEGER1_CTYPE="$ctype"
+ fi
+ ;;
+ 2) if test "$MPI_INTEGER2" = "MPI_DATATYPE_NULL" ; then
+ MPI_INTEGER2="0x4c00022f"
+ MPIR_INTEGER2_CTYPE="$ctype"
+ fi
+ ;;
+ 4) if test "$MPI_INTEGER4" = "MPI_DATATYPE_NULL" ; then
+ MPI_INTEGER4="0x4c000430"
+ MPIR_INTEGER4_CTYPE="$ctype"
+ fi
+ ;;
+ 8) if test "$MPI_INTEGER8" = "MPI_DATATYPE_NULL" ; then
+ MPI_INTEGER8="0x4c000831"
+ MPIR_INTEGER8_CTYPE="$ctype"
+ fi
+ ;;
+ 16) if test "$MPI_INTEGER16" = "MPI_DATATYPE_NULL" ; then
+ MPI_INTEGER16="0x4c001032"
+ MPIR_INTEGER16_CTYPE="$ctype"
+ fi
+ ;;
+ *)
+ ;;
+ esac
+ fi
+done
+#
+# Add the definitions of these types
+if test -n "$MPIR_INTEGER1_CTYPE" ; then
-ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+cat >>confdefs.h <<_ACEOF
+#define MPIR_INTEGER1_CTYPE $MPIR_INTEGER1_CTYPE
+_ACEOF
-$as_echo "#define C_ALLOCA 1" >>confdefs.h
+fi
+if test -n "$MPIR_INTEGER2_CTYPE" ; then
+cat >>confdefs.h <<_ACEOF
+#define MPIR_INTEGER2_CTYPE $MPIR_INTEGER2_CTYPE
+_ACEOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
-$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if ${ac_cv_os_cray+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#if defined CRAY && ! defined CRAY2
-webecray
-#else
-wenotbecray
-#endif
+fi
+if test -n "$MPIR_INTEGER4_CTYPE" ; then
+cat >>confdefs.h <<_ACEOF
+#define MPIR_INTEGER4_CTYPE $MPIR_INTEGER4_CTYPE
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "webecray" >/dev/null 2>&1; then :
- ac_cv_os_cray=yes
-else
- ac_cv_os_cray=no
-fi
-rm -f conftest*
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-if test $ac_cv_os_cray = yes; then
- for ac_func in _getb67 GETB67 getb67; do
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+if test -n "$MPIR_INTEGER8_CTYPE" ; then
cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
+#define MPIR_INTEGER8_CTYPE $MPIR_INTEGER8_CTYPE
_ACEOF
- break
fi
+if test -n "$MPIR_INTEGER16_CTYPE" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define MPIR_INTEGER16_CTYPE $MPIR_INTEGER16_CTYPE
+_ACEOF
- done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
-$as_echo_n "checking stack direction for C alloca... " >&6; }
-if ${ac_cv_c_stack_direction+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_c_stack_direction=0
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-find_stack_direction (int *addr, int depth)
-{
- int dir, dummy = 0;
- if (! addr)
- addr = &dummy;
- *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
- dir = depth ? find_stack_direction (addr, depth - 1) : 0;
- return dir + dummy;
-}
+# ----------------------------------------------------------------------------
-int
-main (int argc, char **argv)
-{
- return find_stack_direction (0, argc + !argv + 20) < 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_stack_direction=1
-else
- ac_cv_c_stack_direction=-1
+# C99 types
+# The predefined types must be distinct types (as opposed to aliases to MPI_INT
+# or MPI_WHATEVER) in order to correctly support MPI_Type_{get,set}_name.
+#
+# FIXME the "basic id" portion should be automatically assigned. It's too easy
+# to have a conflict when this is done by hand.
+#
+# Because we make up a matching type for the fixed-width types if one doesn't
+# exist, we don't ever set these to MPI_DATATYPE_NULL. If we come across a
+# platform where 64-bit sizes aren't supported just add a test like the other
+# types.
+MPI_INT8_T=0x4c000137
+MPI_INT16_T=0x4c000238
+MPI_INT32_T=0x4c000439
+MPI_INT64_T=0x4c00083a
+MPI_UINT8_T=0x4c00013b
+MPI_UINT16_T=0x4c00023c
+MPI_UINT32_T=0x4c00043d
+MPI_UINT64_T=0x4c00083e
+
+# The compiler may or may not support these types, depending on its level of C99
+# compliance. We check for each one individually before assigning a handle
+# number.
+MPI_C_BOOL=MPI_DATATYPE_NULL
+MPI_C_FLOAT_COMPLEX=MPI_DATATYPE_NULL
+MPI_C_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
+MPI_C_LONG_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
+if test ${len__Bool} != 0 ; then
+ MPI_C_BOOL=0x4c00${len__Bool}3f
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+if test ${len_float__Complex} != 0 ; then
+ MPI_C_FLOAT_COMPLEX=0x4c00${len_float__Complex}40
fi
-
+if test ${len_double__Complex} != 0 ; then
+ MPI_C_DOUBLE_COMPLEX=0x4c00${len_double__Complex}41
+fi
+if test ${len_long_double__Complex} != 0 ; then
+ MPI_C_LONG_DOUBLE_COMPLEX=0x4c00${len_long_double__Complex}42
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
-fi
-# We don't use alloca unless USE_ALLOCA is also set.
-# Check whether --enable-alloca was given.
-if test "${enable_alloca+set}" = set; then :
- enableval=$enable_alloca;
-else
- enable_alloca=no
-fi
-if test "$enable_alloca" = yes ; then
-$as_echo "#define USE_ALLOCA 1" >>confdefs.h
-fi
-if test "$enable_g_mem" != "yes" ; then
- # Strdup is needed only if memory tracing is not enabled.
- for ac_func in strdup
-do :
- ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
-if test "x$ac_cv_func_strdup" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRDUP 1
-_ACEOF
-fi
-done
- if test "$ac_cv_func_strdup" = "yes" ; then
- # Do we need to declare strdup?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
-$as_echo_n "checking whether strdup needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strdup+:} false; then :
+
+
+
+export MPI_INT8_T
+export MPI_INT16_T
+export MPI_INT32_T
+export MPI_INT64_T
+export MPI_UINT8_T
+export MPI_UINT16_T
+export MPI_UINT32_T
+export MPI_UINT64_T
+export MPI_C_BOOL
+export MPI_C_FLOAT_COMPLEX
+export MPI_C_DOUBLE_COMPLEX
+export MPI_C_LONG_DOUBLE_COMPLEX
+
+
+# ----------------------------------------------------------------------------
+# We can now create the Fortran versions of the datatype values, along with
+# some of the other datatype-dependent sizes
+
+# There are two parts to handling the datatypes:
+# Convert the C datatype values to their Fortran equivalent. This
+# involves converting the hex values for the C version into decimal
+# since standard Fortran does not have hex constants
+#
+# Determine the existence of the Fortran 'sized' types and set those
+# values.
+#
+# In addition, we need to look at a few additional constants that depend
+# on how the compiler sizes some datatypes. These are:
+# STATUS_SIZE, INTEGER_KIND, ADDRESS_KIND, and OFFSET_KIND
+#
+# ----------------------------------------------------------------------------
+if test "$enable_f77" = yes ; then
+ # Up to size checking code in master configure.ac (where it tries to
+ # find the matching C sizes) as part of defining mpi_integer8 etc.
+ # The results are available in pac_cv_sizeof_f77_<type>
+ # Size is 0 if unknown or unavailable (or cross-compiling)
+ # Due to limitations in autoconf, we cannot put these into a loop.
+ # We also check integer to find the type of MPI_Fint
+ #
+ # Cross-compilation results can be included with the --with-cross=file
+ # option.
+ CROSS_F77_SIZEOF_INTEGER=${CROSS_F77_SIZEOF_INTEGER:-0}
+ CROSS_F77_SIZEOF_REAL=${CROSS_F77_SIZEOF_REAL:-0}
+ CROSS_F77_SIZEOF_DOUBLE_PRECISION=${CROSS_F77_SIZEOF_DOUBLE_PRECISION:-0}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of Fortran type integer" >&5
+$as_echo_n "checking for size of Fortran type integer... " >&6; }
+if ${pac_cv_f77_sizeof_integer+:} false; then :
$as_echo_n "(cached) " >&6
else
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h>
-void (*fptr)(void) = (void(*)(void))strdup;
-int
-main ()
-{
- ;
- return 0;
+
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define cisize_ CISIZE
+#define isize_ ISIZE
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define cisize_ cisize
+#define isize_ isize
+#endif
+int cisize_(char *,char*);
+int cisize_(char *i1p, char *i2p) {
+ int isize_val=0;
+ FILE *f = fopen("conftestval", "w");
+ if (!f) return 1;
+ isize_val = (int)(i2p - i1p);
+ fprintf(f,"%d\n", isize_val);
+ fclose(f);
+ return 0;
}
+
+
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strdup=no
-else
- pac_cv_func_decl_strdup=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
-$as_echo "$pac_cv_func_decl_strdup" >&6; }
-if test "$pac_cv_func_decl_strdup" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRDUP_DECL 1
-_ACEOF
+ # pac_compile_ok=yes
+
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ # Save LIBS and prepend object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ if test "$cross_compiling" = yes; then :
-fi
+ # Use -9999 as value to emit a warning message after the cache_check.
+ eval pac_cv_f77_sizeof_integer=$CROSS_F77_SIZEOF_INTEGER
- fi
else
- # search.h is used for fancier output from trmem. Disabled for now,
- # since the tsearch routines have problematic prototypes.
- for ac_header in search
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "search" "ac_cv_header_search" "$ac_includes_default"
-if test "x$ac_cv_header_search" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SEARCH 1
+ cat > conftest.$ac_ext <<_ACEOF
+
+
+ program main
+ integer a(2)
+ integer irc, cisize
+ irc = cisize(a(1),a(2))
+ end
+
+
_ACEOF
+if ac_fn_f77_try_run "$LINENO"; then :
+
+ eval pac_cv_f77_sizeof_integer=`cat conftestval`
+
+else
+
+ eval pac_cv_f77_sizeof_integer=0
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
-done
-
- for ac_func in tsearch
-do :
- ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch"
-if test "x$ac_cv_func_tsearch" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_TSEARCH 1
-_ACEOF
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
-done
+ LIBS="$saved_LIBS"
+ # remove previously generated object file.
+ rm -f pac_conftest.$OBJEXT
- # Check that we can compile tsearch without error. Try to compile
- # it with the header and the char * args
- if test "$ac_cv_func_tsearch" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether tsearch requires char* args" >&5
-$as_echo_n "checking whether tsearch requires char* args... " >&6; }
-if ${pac_cv_tsearch_charp+:} false; then :
- $as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <search.h>
- char *tsearch( char *k, char **r, (int (*)())compare ) { return k; }
-int
-main ()
-{
-int f=0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_tsearch_charp=yes
-else
- pac_cv_tsearch_charp=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to compile the C routine for finding the size of a integer" >&5
+$as_echo "$as_me: WARNING: Unable to compile the C routine for finding the size of a integer" >&2;}
+
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_tsearch_charp" >&5
-$as_echo "$pac_cv_tsearch_charp" >&6; }
- if test "$pac_cv_tsearch_charp" = "yes" ; then
- # this should consider defining a name with the argument type
- # so that no further ifdefs are needed
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-$as_echo "#define USE_TSEARCH_WITH_CHARP 1" >>confdefs.h
- fi
- fi
- # Note that HPUX and AIX may require _INCLUDE_XOPEN_SOURCE or
- # _XOPEN_SOURCE be defined respectively.
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_sizeof_integer" >&5
+$as_echo "$pac_cv_f77_sizeof_integer" >&6; }
+if test "$pac_cv_f77_sizeof_integer" = "-9999" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No value provided for size of integer when cross-compiling" >&5
+$as_echo "$as_me: WARNING: No value provided for size of integer when cross-compiling" >&2;}
fi
-# ----------------------------------------------------------------------------
-# Look for some non-posix, but commonly provided functions
-# ----------------------------------------------------------------------------
-# mkstemp() is a better replacement for mktemp()
-for ac_func in mkstemp
-do :
- ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
-if test "x$ac_cv_func_mkstemp" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MKSTEMP 1
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_F77_INTEGER $pac_cv_f77_sizeof_integer
_ACEOF
-fi
-done
-if test "$ac_cv_func_mkstemp" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkstemp needs a declaration" >&5
-$as_echo_n "checking whether mkstemp needs a declaration... " >&6; }
-if ${pac_cv_func_decl_mkstemp+:} false; then :
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of Fortran type real" >&5
+$as_echo_n "checking for size of Fortran type real... " >&6; }
+if ${pac_cv_f77_sizeof_real+:} false; then :
$as_echo_n "(cached) " >&6
else
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdlib.h>
-void (*fptr)(void) = (void(*)(void))mkstemp;
-int
-main ()
-{
- ;
- return 0;
+
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define cisize_ CISIZE
+#define isize_ ISIZE
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define cisize_ cisize
+#define isize_ isize
+#endif
+int cisize_(char *,char*);
+int cisize_(char *i1p, char *i2p) {
+ int isize_val=0;
+ FILE *f = fopen("conftestval", "w");
+ if (!f) return 1;
+ isize_val = (int)(i2p - i1p);
+ fprintf(f,"%d\n", isize_val);
+ fclose(f);
+ return 0;
}
+
+
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_mkstemp=no
+
+ # pac_compile_ok=yes
+
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ # Save LIBS and prepend object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+ if test "$cross_compiling" = yes; then :
+
+ # Use -9999 as value to emit a warning message after the cache_check.
+ eval pac_cv_f77_sizeof_real=$CROSS_F77_SIZEOF_REAL
+
else
- pac_cv_func_decl_mkstemp=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_mkstemp" >&5
-$as_echo "$pac_cv_func_decl_mkstemp" >&6; }
-if test "$pac_cv_func_decl_mkstemp" = "yes" ; then
+ cat > conftest.$ac_ext <<_ACEOF
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_MKSTEMP_DECL 1
-_ACEOF
+ program main
+ real a(2)
+ integer irc, cisize
+ irc = cisize(a(1),a(2))
+ end
-fi
-fi
-# fdopen() converts from an fd to a FILE*
-for ac_func in fdopen
-do :
- ac_fn_c_check_func "$LINENO" "fdopen" "ac_cv_func_fdopen"
-if test "x$ac_cv_func_fdopen" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FDOPEN 1
_ACEOF
+if ac_fn_f77_try_run "$LINENO"; then :
+
+ eval pac_cv_f77_sizeof_real=`cat conftestval`
+
+else
+
+ eval pac_cv_f77_sizeof_real=0
fi
-done
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
-if test "$ac_cv_func_fdopen" = "yes" ; then
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ LIBS="$saved_LIBS"
+ # remove previously generated object file.
+ rm -f pac_conftest.$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fdopen needs a declaration" >&5
-$as_echo_n "checking whether fdopen needs a declaration... " >&6; }
-if ${pac_cv_func_decl_fdopen+:} false; then :
- $as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-void (*fptr)(void) = (void(*)(void))fdopen;
-int
-main ()
-{
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to compile the C routine for finding the size of a real" >&5
+$as_echo "$as_me: WARNING: Unable to compile the C routine for finding the size of a real" >&2;}
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_fdopen=no
-else
- pac_cv_func_decl_fdopen=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_sizeof_real" >&5
+$as_echo "$pac_cv_f77_sizeof_real" >&6; }
+if test "$pac_cv_f77_sizeof_real" = "-9999" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No value provided for size of real when cross-compiling" >&5
+$as_echo "$as_me: WARNING: No value provided for size of real when cross-compiling" >&2;}
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_fdopen" >&5
-$as_echo "$pac_cv_func_decl_fdopen" >&6; }
-if test "$pac_cv_func_decl_fdopen" = "yes" ; then
cat >>confdefs.h <<_ACEOF
-#define NEEDS_FDOPEN_DECL 1
+#define SIZEOF_F77_REAL $pac_cv_f77_sizeof_real
_ACEOF
-fi
-
-fi
-# putenv() sets environment variable
-for ac_func in putenv
-do :
- ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
-if test "x$ac_cv_func_putenv" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_PUTENV 1
-_ACEOF
-fi
-done
-if test "$ac_cv_func_putenv" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether putenv needs a declaration" >&5
-$as_echo_n "checking whether putenv needs a declaration... " >&6; }
-if ${pac_cv_func_decl_putenv+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of Fortran type double precision" >&5
+$as_echo_n "checking for size of Fortran type double precision... " >&6; }
+if ${pac_cv_f77_sizeof_double_precision+:} false; then :
$as_echo_n "(cached) " >&6
else
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdlib.h>
-void (*fptr)(void) = (void(*)(void))putenv;
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_putenv=no
-else
- pac_cv_func_decl_putenv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_putenv" >&5
-$as_echo "$pac_cv_func_decl_putenv" >&6; }
-if test "$pac_cv_func_decl_putenv" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_PUTENV_DECL 1
-_ACEOF
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define cisize_ CISIZE
+#define isize_ ISIZE
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define cisize_ cisize
+#define isize_ isize
+#endif
+int cisize_(char *,char*);
+int cisize_(char *i1p, char *i2p) {
+ int isize_val=0;
+ FILE *f = fopen("conftestval", "w");
+ if (!f) return 1;
+ isize_val = (int)(i2p - i1p);
+ fprintf(f,"%d\n", isize_val);
+ fclose(f);
+ return 0;
+}
-fi
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
-fi
+ # pac_compile_ok=yes
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ # Save LIBS and prepend object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-# ----------------------------------------------------------------------------
-# Support for timers. The following code processes the
-# --enable-timer-type=name argument and selects the timer based on
-# both that field and what configure is able to determine is available.
-# The file src/include/mpiu_timer.h is also created.
-# Note that at least the handling of the "device" option must come *after*
-# the setup_device script is loaded so that the device can set the appropriate
-# fields. For now, we've split this so that there is an update to the timer
-# after the setup_device script is loaded, but we should consider moving
-# this entire block.
-# FIXME DJG setup_device has been eliminated in favor of subconfigure.m4 files
-# ----------------------------------------------------------------------------
-# Default type for timer stamp.
-MPICH_TIMER_TYPE=long
+ if test "$cross_compiling" = yes; then :
+ # Use -9999 as value to emit a warning message after the cache_check.
+ eval pac_cv_f77_sizeof_double_precision=$CROSS_F77_SIZEOF_DOUBLE_PRECISION
-# If the device specified a timer type, use that by default. Else,
-# try to detect a type that works on this system.
-if test -n "$MPID_DEVICE_TIMER_TYPE" ; then
- default_timer_type=device
else
- default_timer_type=
-fi
+ cat > conftest.$ac_ext <<_ACEOF
-# clock_gettime is the POSIX gettimeofday
-# gethrtime is the Solaris high-resolution timer
-# Check whether --enable-timer-type was given.
-if test "${enable_timer_type+set}" = set; then :
- enableval=$enable_timer_type; timer_type=$enable_timer_type
-else
- timer_type=${default_timer_type}
-fi
+
+ program main
+ double precision a(2)
+ integer irc, cisize
+ irc = cisize(a(1),a(2))
+ end
-if test -z "$timer_type" ; then
- # Try to pick a timer based on what is available
- for ac_func in clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
+if ac_fn_f77_try_run "$LINENO"; then :
-fi
-done
+ eval pac_cv_f77_sizeof_double_precision=`cat conftestval`
- if test "$ac_cv_func_gethrtime" = "yes" ; then
- # Sigh. The Solaris include files do not define hrtime_t
- # Before we accept this choice, make sure that we can
- # do arithmetic with hrtime_t .
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking that hrtime_t is properly defined for gethrtime" >&5
-$as_echo_n "checking that hrtime_t is properly defined for gethrtime... " >&6; }
-if ${pac_cv_hrtime_works+:} false; then :
- $as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ eval pac_cv_f77_sizeof_double_precision=0
-#include <sys/time.h>
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ LIBS="$saved_LIBS"
+ # remove previously generated object file.
+ rm -f pac_conftest.$OBJEXT
-int
-main ()
-{
-hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_hrtime_works=yes
else
- pac_cv_hrtime_works=no
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to compile the C routine for finding the size of a double precision" >&5
+$as_echo "$as_me: WARNING: Unable to compile the C routine for finding the size of a double precision" >&2;}
+
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_hrtime_works" >&5
-$as_echo "$pac_cv_hrtime_works" >&6; }
- # A more ambitious test would look to see if casting an
- # hrtime_t to int64_t works, and even more ambitious
- # would check whether long or long long was 64 bits (or even
- # better, the sizeof hrtime_t).
- fi
- if test "$ac_cv_func_gethrtime" = "yes" -a \
- "$pac_cv_hrtime_works" = "yes" ; then
- timer_type=gethrtime
- elif test "$ac_cv_func_clock_gettime" = "yes" -a \
- "$ac_cv_func_clock_getres" = "yes" ; then
- # Test on both because some systems (e.g., cygwin) provide
- # clock_gettime but not clock_getres
- timer_type=clock_gettime
- elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
- timer_type=mach_absolute_time
- elif test "$ac_cv_func_gettimeofday" = "yes" ; then
- timer_type=gettimeofday
- fi
-fi
-if test -z "$timer_type" ; then
- as_fn_error $? "No timer found" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_f77_sizeof_double_precision" >&5
+$as_echo "$pac_cv_f77_sizeof_double_precision" >&6; }
+if test "$pac_cv_f77_sizeof_double_precision" = "-9999" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No value provided for size of double precision when cross-compiling" >&5
+$as_echo "$as_me: WARNING: No value provided for size of double precision when cross-compiling" >&2;}
fi
-# Check for valid timer and select datatypes for the time stamp
-case "$timer_type" in
-
- gethrtime)
- MPICH_TIMER_TYPE=hrtime_t
- ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
-if test "x$ac_cv_func_gethrtime" = xyes; then :
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_F77_DOUBLE_PRECISION $pac_cv_f77_sizeof_double_precision
+_ACEOF
-else
- as_fn_error $? "Requested timer gethrtime is not available" "$LINENO" 5
-fi
- ;;
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
- clock_gettime)
- missing_function=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
-$as_echo_n "checking for library containing clock_gettime... " >&6; }
-if ${ac_cv_search_clock_gettime+:} false; then :
+ # If we have sizes for real and double, we do not need to call
+ # mpir_get_fsize at run time.
+ # For the size-defined types (e.g., integer*2), we assume that if the
+ # compiler allows it, it has the stated size.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*1 is supported" >&5
+$as_echo_n "checking whether integer*1 is supported... " >&6; }
+if ${pac_cv_fort_integer1+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char clock_gettime ();
-int
-main ()
-{
-return clock_gettime ();
- ;
- return 0;
-}
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ integer*1 i
+ end
_ACEOF
-for ac_lib in '' rt; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_clock_gettime=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_clock_gettime+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_clock_gettime+:} false; then :
-
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_integer1=yes
else
- ac_cv_search_clock_gettime=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ pac_cv_fort_integer1=no
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
-$as_echo "$ac_cv_search_clock_gettime" >&6; }
-ac_res=$ac_cv_search_clock_gettime
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-else
- as_fn_error $? "clock_gettime is not available" "$LINENO" 5
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_getres" >&5
-$as_echo_n "checking for library containing clock_getres... " >&6; }
-if ${ac_cv_search_clock_getres+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer1" >&5
+$as_echo "$pac_cv_fort_integer1" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*2 is supported" >&5
+$as_echo_n "checking whether integer*2 is supported... " >&6; }
+if ${pac_cv_fort_integer2+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char clock_getres ();
-int
-main ()
-{
-return clock_getres ();
- ;
- return 0;
-}
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ integer*2 i
+ end
_ACEOF
-for ac_lib in '' rt; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_clock_getres=$ac_res
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_integer2=yes
+else
+ pac_cv_fort_integer2=no
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_clock_getres+:} false; then :
- break
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-done
-if ${ac_cv_search_clock_getres+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer2" >&5
+$as_echo "$pac_cv_fort_integer2" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*4 is supported" >&5
+$as_echo_n "checking whether integer*4 is supported... " >&6; }
+if ${pac_cv_fort_integer4+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ integer*4 i
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_integer4=yes
else
- ac_cv_search_clock_getres=no
+ pac_cv_fort_integer4=no
fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_getres" >&5
-$as_echo "$ac_cv_search_clock_getres" >&6; }
-ac_res=$ac_cv_search_clock_getres
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer4" >&5
+$as_echo "$pac_cv_fort_integer4" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*8 is supported" >&5
+$as_echo_n "checking whether integer*8 is supported... " >&6; }
+if ${pac_cv_fort_integer8+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ integer*8 i
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_integer8=yes
else
- as_fn_error $? "clock_getres is not available" "$LINENO" 5
+ pac_cv_fort_integer8=no
fi
-
- MPICH_TIMER_TYPE="struct timespec"
- # AIX does not always define struct timespec (!)
- # Make sure that we can use struct timespec
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h" >&5
-$as_echo_n "checking whether struct timespec is defined in time.h... " >&6; }
-if ${pac_cv_struct_timespec_defined+:} false; then :
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer8" >&5
+$as_echo "$pac_cv_fort_integer8" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer*16 is supported" >&5
+$as_echo_n "checking whether integer*16 is supported... " >&6; }
+if ${pac_cv_fort_integer16+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <time.h>
-int
-main ()
-{
-
- struct timespec t;
- ;
- return 0;
-}
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ integer*16 i
+ end
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_timespec_defined=yes
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_integer16=yes
else
- pac_cv_struct_timespec_defined=no
+ pac_cv_fort_integer16=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined" >&5
-$as_echo "$pac_cv_struct_timespec_defined" >&6; }
- if test "$pac_cv_struct_timespec_defined" != "yes" ; then
- # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500" >&5
-$as_echo_n "checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500... " >&6; }
-if ${pac_cv_struct_timespec_defined_with_xopen500+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_integer16" >&5
+$as_echo "$pac_cv_fort_integer16" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether real*4 is supported" >&5
+$as_echo_n "checking whether real*4 is supported... " >&6; }
+if ${pac_cv_fort_real4+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#define _XOPEN_SOURCE 500
-#include <time.h>
-int
-main ()
-{
-
- struct timespec t;
- ;
- return 0;
-}
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ real*4 a
+ end
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_timespec_defined_with_xopen500=yes
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_real4=yes
else
- pac_cv_struct_timespec_defined_with_xopen500=no
+ pac_cv_fort_real4=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined_with_xopen500" >&5
-$as_echo "$pac_cv_struct_timespec_defined_with_xopen500" >&6; }
- if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
- # We need to define _XOPEN_SOURCE=500, but we need to ensure that
- # this is done before any include files are loaded. At
- # this point it is really too late to add this definition,
- # since it may make other tests incompatible.
- as_fn_error $? "The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure" "$LINENO" 5
- fi
- fi
- #
- # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
- # time.h is required (see pages 45 and 46 in the POSIX standard).
- # See if we can compile
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLOCK_REALTIME defined in time.h" >&5
-$as_echo_n "checking for CLOCK_REALTIME defined in time.h... " >&6; }
-if ${pac_cv_posix_clock_realtime+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_real4" >&5
+$as_echo "$pac_cv_fort_real4" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether real*8 is supported" >&5
+$as_echo_n "checking whether real*8 is supported... " >&6; }
+if ${pac_cv_fort_real8+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <time.h>
-int
-main ()
-{
-
- clockid_t cid = CLOCK_REALTIME;
- ;
- return 0;
-}
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ real*8 a
+ end
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_posix_clock_realtime=yes
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_real8=yes
else
- pac_cv_posix_clock_realtime=no
+ pac_cv_fort_real8=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_posix_clock_realtime" >&5
-$as_echo "$pac_cv_posix_clock_realtime" >&6; }
- if test "$pac_cv_posix_clock_realtime" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: POSIX timer requires definitions in time.h" >&5
-$as_echo "$as_me: WARNING: POSIX timer requires definitions in time.h" >&2;}
- # Check for the definition in sys/time.h, which is where
- # OpenBSD and FreeBSD have put it by mistake
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <time.h>
-#include <sys/time.h>
-int
-main ()
-{
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_real8" >&5
+$as_echo "$pac_cv_fort_real8" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether real*16 is supported" >&5
+$as_echo_n "checking whether real*16 is supported... " >&6; }
+if ${pac_cv_fort_real16+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
- clockid_t cid = CLOCK_REALTIME;
- ;
- return 0;
-}
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+ real*16 a
+ end
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_posix_clock_realtime=yes
+if ac_fn_f77_try_compile "$LINENO"; then :
+ pac_cv_fort_real16=yes
else
- pac_cv_posix_clock_realtime=no
+ pac_cv_fort_real16=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test "$pac_cv_posix_clock_realtime" = yes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sys/time.h required for POSIX timer" >&5
-$as_echo "$as_me: WARNING: sys/time.h required for POSIX timer" >&2;}
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort_real16" >&5
+$as_echo "$pac_cv_fort_real16" >&6; }
+
+ # Create the default datatype names for the standard MPI Fortran types
+ MPI_CHARACTER=0x4c00011a
-$as_echo "#define NEEDS_SYS_TIME_H 1" >>confdefs.h
- else
- as_fn_error $? "Cannot find the definition of CLOCK_REALTIME for the POSIX timer" "$LINENO" 5
- fi
+ if test -z "$pac_cv_f77_sizeof_integer" -o \
+ "X$pac_cv_f77_sizeof_integer" = "X0" ; then
+ as_fn_error $? "Unable to configure with Fortran support because configure could not determine the size of a Fortran INTEGER. Consider setting CROSS_F77_SIZEOF_INTEGER to the length in bytes of a Fortran INTEGER" "$LINENO" 5
fi
- ;;
+ len_integer=$pac_cv_f77_sizeof_integer
+ # Convert to two digit hex
+ len=$len_integer
+ #
+ # Take len and turn it into two hex digits (there are 8 bits available
+ # in the built-in datatype handle for the length; see
+ # src/mpid/common/datatype/mpidu_datatype.h). This code is taken
+ # from the code in mpich/configure.ac
+ if test "$len" -gt 255 ; then
+ as_fn_error $? "Type sizes greater than 255 bytes are not supported (type INTEGER is $len bytes)" "$LINENO" 5
+ fi
+ tmplen=$len
+ hexlen=""
+ while test $tmplen -gt 0 ; do
+ lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
+ case $lowdigit in
+ 10) char=a ;;
+ 11) char=b ;;
+ 12) char=c ;;
+ 13) char=d ;;
+ 14) char=e ;;
+ 15) char=f ;;
+ *) char=$lowdigit ;;
+ esac
+ hexlen="$char$hexlen"
+ tmplen=`expr $tmplen / 16`
+ done
+ if test $len -lt 16 ; then
+ hexlen="0$hexlen"
+ fi
+ len_integer=$hexlen
+ if test "$len_integer" = 0 ; then
+ # We have a problem
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of an INTEGER type; using 4" >&5
+$as_echo "$as_me: WARNING: Unable to determine size of an INTEGER type; using 4" >&2;}
+ # We make the length 4
+ len_integer="04"
+ fi
+ MPI_INTEGER=0x4c00${len_integer}1b
+ MPI_REAL=0x4c00${len_integer}1c
+ MPI_LOGICAL=0x4c00${len_integer}1d
- gettimeofday)
- MPICH_TIMER_TYPE="struct timeval"
- # We may have already tested for gettimeofday. If we got a "yes",
- # we're good to go
- if test "$ac_cv_func_gettimeofday" != "yes" ; then
- ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
-if test "x$ac_cv_func_gettimeofday" = xyes; then :
-else
- as_fn_error $? "Requested timer gettimeofday is not available" "$LINENO" 5
-fi
+ if test -z "$pac_cv_f77_sizeof_double_precision" ; then
+ as_fn_error $? "Unable to configure with Fortran support because configure could not determine the size of a Fortran DOUBLE PRECISION. Consider setting CROSS_F77_SIZEOF_DOUBLE_PRECISION to the length in bytes of a Fortran DOUBLE PRECISION" "$LINENO" 5
+ fi
+ len_double=$pac_cv_f77_sizeof_double_precision
+ # Convert to two digit hex
+ len=$len_double
+ #
+ # Take len and turn it into two hex digits (there are 8 bits available
+ # in the built-in datatype handle for the length; see
+ # src/mpid/common/datatype/mpidu_datatype.h). This code is taken
+ # from the code in mpich/configure.ac
+ if test "$len" -gt 255 ; then
+ as_fn_error $? "Type sizes greater than 255 bytes are not supported (type DOUBLE is $len bytes)" "$LINENO" 5
+ fi
+ tmplen=$len
+ hexlen=""
+ while test $tmplen -gt 0 ; do
+ lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
+ case $lowdigit in
+ 10) char=a ;;
+ 11) char=b ;;
+ 12) char=c ;;
+ 13) char=d ;;
+ 14) char=e ;;
+ 15) char=f ;;
+ *) char=$lowdigit ;;
+ esac
+ hexlen="$char$hexlen"
+ tmplen=`expr $tmplen / 16`
+ done
+ if test $len -lt 16 ; then
+ hexlen="0$hexlen"
+ fi
+ len_double=$hexlen
+ if test "$len_double" = 0 ; then
+ # We have a problem
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&5
+$as_echo "$as_me: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&2;}
+ # We make the length 8
+ len_double="08"
+ fi
+ # Provide the corresponding C types for MPI_REAL and MPI_DOUBLE
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran real" >&5
+$as_echo_n "checking for C type matching Fortran real... " >&6; }
+ noval=yes
+ for c_type in float double "long_double" ; do
+ eval ctypelen=\$"ac_cv_sizeof_$c_type"
+ if test "$pac_cv_f77_sizeof_real" = "$ctypelen" -a \
+ "$ctypelen" -gt 0 ; then
+ c_type=`echo $c_type | sed -e 's/_/ /g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
+$as_echo "$c_type" >&6; }
+ MPIR_FC_REAL_CTYPE=$c_type
+ noval="no"
+ break
+ fi
+ done
+ if test "$noval" = "yes" ; then
+ # Set a default
+ MPIR_FC_REAL_CTYPE="float"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
+$as_echo "unavailable" >&6; }
fi
- ;;
- linux86_cycle|linux86_cycle_2)
+ noval=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran double" >&5
+$as_echo_n "checking for C type matching Fortran double... " >&6; }
+ for c_type in double "long_double" float ; do
+ eval ctypelen=\$"ac_cv_sizeof_$c_type"
+ if test "$pac_cv_f77_sizeof_double_precision" = "$ctypelen" -a \
+ "$ctypelen" -gt 0 ; then
+ c_type=`echo $c_type | sed -e 's/_/ /g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
+$as_echo "$c_type" >&6; }
+ MPIR_FC_DOUBLE_CTYPE=$c_type
+ noval="no"
+ break
+ fi
+ done
+ if test "$noval" = "yes" ; then
+ # Set a default
+ MPIR_FC_DOUBLE_CTYPE="double"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
+$as_echo "unavailable" >&6; }
+ fi
-# The following AC_TRY_RUN statements are needed because x86_64 compilers
-# usually know about rdtscp but the cpu may or may not actually implement the
-# feature. This is not cross-compile safe, unfortunately. In the long run we
-# should allow the user to override this with a configure flag.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking that linux86 cycle counter is available" >&5
-$as_echo_n "checking that linux86 cycle counter is available... " >&6; }
-if ${pac_cv_linux86_cycle+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ # These are needed to correctly implement the MPI reduction operations
-int
-main ()
-{
+cat >>confdefs.h <<_ACEOF
+#define MPIR_FC_REAL_CTYPE $MPIR_FC_REAL_CTYPE
+_ACEOF
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- ;
- return 0;
-}
+cat >>confdefs.h <<_ACEOF
+#define MPIR_FC_DOUBLE_CTYPE $MPIR_FC_DOUBLE_CTYPE
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_linux86_cycle=rdtscp
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_linux86_cycle=cpuid_rdtsc64
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ # Use the proper length values for these items in case we are building
+ # with Fortran integers that are not the same size as C ints and
+ # reals and double precision that are the same size (not valid Fortran,
+ # but used by some applications)
-int
-main ()
-{
+ len_2integer=`expr 2 \* $len_integer`
+ len_2real=`expr 2 \* $len_integer`
+ len_doublecplx=`expr $pac_cv_f77_sizeof_double_precision \* 2`
+ if test "$len_doublecplx" = 0 ; then
+ # We have a problem
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&5
+$as_echo "$as_me: WARNING: Unable to determine size of a DOUBLE PRECISION type; using 8" >&2;}
+ # We make the length 8*2 (in hex)
+ len_doublecplx="16"
+ fi
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ for lenname in len_2integer len_2real len_doublecplx ; do
+ eval len=\$$lenname
+ if test "$len" -gt 255 ; then
+ as_fn_error $? "Type sizes greater than 255 bytes are not supported (type $lenname is $len bytes)" "$LINENO" 5
+ fi
+ tmplen=$len
+ hexlen=""
+ while test $tmplen -gt 0 ; do
+ lowdigit=`expr $tmplen - 16 \* \( $tmplen / 16 \)`
+ case $lowdigit in
+ 10) char=a ;;
+ 11) char=b ;;
+ 12) char=c ;;
+ 13) char=d ;;
+ 14) char=e ;;
+ 15) char=f ;;
+ *) char=$lowdigit ;;
+ esac
+ hexlen="$char$hexlen"
+ tmplen=`expr $tmplen / 16`
+ done
+ if test $len -lt 16 ; then
+ hexlen="0$hexlen"
+ fi
+ eval ${lenname}=$hexlen
+ if test "$hexlen" = 0 ; then
+ # We have a problem
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to determine size of a $lenname type; using 8" >&5
+$as_echo "$as_me: WARNING: Unable to determine size of a $lenname type; using 8" >&2;}
+ # We make the length 8
+ eval ${lenname}=$hexlen
+ fi
+ done
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_linux86_cycle=cpuid_rdtsc32
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ MPI_DOUBLE_PRECISION=0x4c00${len_double}1f
+ MPI_2INTEGER=0x4c00${len_2integer}20
+ MPI_2REAL=0x4c00${len_2real}21
+ MPI_COMPLEX=0x4c00${len_2real}1e
-int
-main ()
-{
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_linux86_cycle=rdtsc
-else
- pac_cv_linux86_cycle=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ MPI_DOUBLE_COMPLEX=0x4c00${len_doublecplx}22
+ MPI_2DOUBLE_PRECISION=0x4c00${len_doublecplx}23
+ MPI_2COMPLEX=0x4c00${len_doublecplx}24
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int main()
-{
- /* rdtscp */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_linux86_cycle=rdtscp
-else
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int main()
-{
- /* cpuid 64 */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- return 0;
-}
+ #
+ # Temporary for the vast majority of systems that use 4 byte reals and
+ # 8 byte doubles
+ # Lengths at this point are in hex, hence "10" = 10 base 16 = 16 base 10.
+ if test "$len_double" = "08" ; then
+ F77_COMPLEX8=$MPI_COMPLEX
+ fi
+ if test "$len_doublecplx" = "10" ; then
+ F77_COMPLEX16=$MPI_DOUBLE_COMPLEX
+ fi
+ if test "$len_long_double" = "10" -a "$MPID_NO_LONG_DOUBLE" != "yes" ; then
+ F77_COMPLEX32="0x4c002025"
+ else
+ F77_COMPLEX32="MPI_DATATYPE_NULL"
+ fi
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_linux86_cycle=cpuid_rdtsc64
-else
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ len_2dc=`expr $pac_cv_f77_sizeof_double_precision \* 4`
+ firstdigit=0
+ seconddigit=0
+ while test $len_2dc -ge 16 ; do
+ firstdigit=`expr $firstdigit + 1`
+ len_2dc=`expr $len_2dc - 16`
+ done
+ case $len_2dc in
+ 10) seconddigit=a ;;
+ 11) seconddigit=b ;;
+ 12) seconddigit=c ;;
+ 13) seconddigit=d ;;
+ 14) seconddigit=e ;;
+ 15) seconddigit=f ;;
+ *) seconddigit=$len_2dc ;;
+ esac
+ len_2dc="$firstdigit$seconddigit"
+ #echo "2double complex = $len_2dc"
+ MPI_2DOUBLE_COMPLEX=0x4c00${len_2dc}25
-int main()
-{
- /* cpuid 32 */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
- return 0;
-}
+ MPI_F77_PACKED=$MPI_PACKED
+ MPI_F77_UB=$MPI_UB
+ MPI_F77_LB=$MPI_LB
+ MPI_F77_BYTE=$MPI_BYTE
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_linux86_cycle=cpuid_rdtsc32
-else
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int main()
-{
- /* simple */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_linux86_cycle=rdtsc
-else
- pac_cv_linux86_cycle=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+ #
+ # We must convert all hex values to decimal (!)
+ # It would be nice to use expr to extract the next character rather than
+ # the heavier-weight sed, but expr under Tru64 Unix discards leading zeros,
+ # even when used only with the match (:) command. Rather than have
+ # configure figure out if expr works, we just use sed. Sigh.
+ for var in CHARACTER INTEGER REAL LOGICAL DOUBLE_PRECISION COMPLEX \
+ DOUBLE_COMPLEX 2INTEGER 2REAL 2COMPLEX 2DOUBLE_PRECISION \
+ 2DOUBLE_COMPLEX F77_PACKED F77_UB F77_LB F77_BYTE; do
+ fullvar="MPI_$var"
+ eval fullvarvalue=\$$fullvar
+ #echo "$fullvar = $fullvarvalue"
+ value=0
+ fullvarvalue=`echo $fullvarvalue | sed -e 's/..\(.*\)/\1/'`
+ for pos in 3 4 5 6 7 8 9 10 ; do
+ # This works, even for Tru64, because only a single character
+ # is extracted
+ char=`expr $fullvarvalue : '\(.\)'`
+ # FIXME: Tru64 Unix eliminates leading zeros (!)
+ # How do we fix something that broken?
+ fullvarvalue=`echo $fullvarvalue | sed -e 's/.\(.*\)/\1/'`
+ case $char in
+ a) char=10 ;;
+ b) char=11 ;;
+ c) char=12 ;;
+ d) char=13 ;;
+ e) char=14 ;;
+ f) char=15 ;;
+ esac
+ value=`expr $value \* 16 + $char`
+ done
+ #echo "$fullvar = $value"
+ if test "X$value" = "X"; then
+ eval origvarvalue=\$$fullvar
+ as_fn_error $? "Internal Error: Failed to convert $fullvar value to hex! Original value was $origvarvalue" "$LINENO" 5
+ fi
+ eval $fullvar=$value
+ done
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+ # Now, handle the sized types
+ #
+ # Preload the C mpi types
+ # THESE MUST MATCH THE DEFINITIONS IN MPI.H and MPIF.H
+ # We use these to match the optional Fortran types
+ char_mpi=${MPI_CHAR:-0}
+ short_mpi=${MPI_SHORT:-0}
+ int_mpi=${MPI_INT:-0}
+ long_mpi=${MPI_LONG:-0}
+ long_long_mpi=${MPI_LONG_LONG:-0}
+ float_mpi=${MPI_FLOAT:-0}
+ double_mpi=${MPI_DOUBLE:-0}
+ long_double_mpi=${MPI_LONG_DOUBLE:-0}
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+ #
+ # The following code was correct for MPI-1, which allowed these datatypes
+ # to be an alias for another MPI type. MPI-2 requires these to
+ # be distinct types, so these are enumerated
+ if test "$use_alias_types" = yes ; then
+ for len in 1 2 4 8 16 ; do
+ eval F77_INTEGER$len=0
+ #eval testval=\$"pac_cv_f77_sizeof_integer_$len"
+ eval testval=\$"pac_cv_fort_integer$len"
+ if test "$testval" = no ; then continue ; fi
+ testval=$len
+ noval="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran integer*$len" >&5
+$as_echo_n "checking for C type matching Fortran integer*$len... " >&6; }
+ for c_type in char short int long "long_long" ; do
+ eval ctypelen=\$"ac_cv_sizeof_$c_type"
+ if test "$testval" = "$ctypelen" -a "$ctypelen" -gt 0 ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
+$as_echo "$c_type" >&6; }
+ eval F77_INTEGER$len=\$"${c_type}_mpi"
+ noval="no"
+ break
+ fi
+ done
+ if test "$noval" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
+$as_echo "unavailable" >&6; }
+ fi
+ done
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+ # Complex is set separately above
+ for len in 4 8 16 ; do
+ len2=`expr $len + $len`
+ eval F77_REAL$len=0
+ #eval F77_COMPLEX$len2=0
+ #eval testval=\$"pac_cv_f77_sizeof_real_$len"
+ eval testval=\$"pac_cv_fort_real$len"
+ if test "$testval" = no ; then continue ; fi
+ testval=$len
+ noval="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran real*$len" >&5
+$as_echo_n "checking for C type matching Fortran real*$len... " >&6; }
+ for c_type in float double "long_double" ; do
+ eval ctypelen=\$"ac_cv_sizeof_$c_type"
+ if test "$testval" = "$ctypelen" -a "$ctypelen" -gt 0 ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
+$as_echo "$c_type" >&6; }
+ eval F77_REAL$len=\$"${c_type}_mpi"
+ #eval F77_COMPLEX$len2=\$"${c_type}_cplx_mpi"
+ noval="no"
+ break
+ fi
+ done
+ if test "$noval" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
+$as_echo "unavailable" >&6; }
+ fi
+ done
+ else
+ # Simply determine which types exist. These may have been set by the
+ # toplevel configure
+ for var in INTEGER1 INTEGER2 INTEGER4 INTEGER8 INTEGER16 \
+ REAL4 REAL8 REAL16 COMPLEX8 COMPLEX16 COMPLEX32 ; do
+ eval varname=MPI_$var
+ eval varvalue=\$$varname
+ #echo "$varname = $varvalue"
+ if test "$varvalue" = MPI_DATATYPE_NULL ; then
+ eval F77_$var=0
+ else
+ eval F77_$var=\$$varname
+ fi
+ done
+ fi
+ # We must convert all hex values to decimal (!)
+ for var in INTEGER1 INTEGER2 INTEGER4 INTEGER8 INTEGER16 \
+ REAL4 REAL8 REAL16 COMPLEX8 COMPLEX16 COMPLEX32 ; do
+ fullvar="F77_$var"
+ eval fullvarvalue=\$$fullvar
+ if test "$fullvarvalue" = 0 -o -z "$fullvarvalue" ; then
+ eval $fullvar=MPI_DATATYPE_NULL
+ continue
+ fi
+ #echo "$fullvar = $fullvarvalue"
+ value=0
+ # See the comments above on why expr with : cannot be used here
+ fullvarvalue=`echo $fullvarvalue | sed -e 's/..\(.*\)/\1/'`
+ for pos in 3 4 5 6 7 8 9 10 ; do
+ #char=`expr substr $fullvarvalue $pos 1`
+ char=`expr $fullvarvalue : '\(.\)'`
+ # We don't test for success of expr here because some expr's are
+ # buggy and set the status to one on expressions like
+ # expr 00ccc : '\(.\)'
+ # while both
+ # expr 00ccc : '\(..\)'
+ # and
+ # expr 100cc : '\(.\)'
+ # return a zero status. So the status is set even on success,
+ # if the result is a single character that is a zero (!)
+ #rc=$?
+ #if test "$rc" != 0 ; then
+ # break
+ #fi
+ fullvarvalue=`echo $fullvarvalue | sed -e 's/.\(.*\)/\1/'`
+ case $char in
+ a) char=10 ;;
+ b) char=11 ;;
+ c) char=12 ;;
+ d) char=13 ;;
+ e) char=14 ;;
+ f) char=15 ;;
+ esac
+ value=`expr $value \* 16 + $char`
+ if test $? != 0 ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failure to evaluate $value \* 16 + $char" >&5
+$as_echo "$as_me: WARNING: Failure to evaluate $value \* 16 + $char" >&2;}
+ fi
+ done
+ #echo "$fullvar = $value"
+ eval $fullvar=$value
+ done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_linux86_cycle" >&5
-$as_echo "$pac_cv_linux86_cycle" >&6; }
- case "$pac_cv_linux86_cycle" in
- "rdtscp")
-$as_echo "#define LINUX86_CYCLE_RDTSCP 1" >>confdefs.h
- ;;
- "cpuid_rdtsc64")
-$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC64 1" >>confdefs.h
- ;;
- "cpuid_rdtsc32")
-$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC32 1" >>confdefs.h
- ;;
- "rdtsc")
-$as_echo "#define LINUX86_CYCLE_RDTSC 1" >>confdefs.h
- ;;
- *)
- cpu_gcc_x86_cycle=no
- ;;
- esac
- if test "$cpu_gcc_x86_cycle" = "no" ; then
- as_fn_error $? "Linux86 cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ noval="yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type matching Fortran integer" >&5
+$as_echo_n "checking for C type matching Fortran integer... " >&6; }
+ for c_type in char short int long "long_long" ; do
+ eval ctypelen=\$"ac_cv_sizeof_$c_type"
+ if test "$pac_cv_f77_sizeof_integer" = "$ctypelen" -a \
+ "$ctypelen" -gt 0 ; then
+ c_type=`echo $c_type | sed -e 's/_/ /g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $c_type" >&5
+$as_echo "$c_type" >&6; }
+ MPI_FINT=$c_type
+ noval="no"
+ break
+ fi
+ done
+ if test "$noval" = "yes" ; then
+ # Set a default
+ MPI_FINT="int"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unavailable" >&5
+$as_echo "unavailable" >&6; }
fi
- MPICH_TIMER_TYPE="long long"
- ;;
-
- gcc_ia64_cycle)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking that IPF timer is available" >&5
-$as_echo_n "checking that IPF timer is available... " >&6; }
-if ${pac_cv_ia64_cycle+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ # We also need to check the size of MPI_Aint vs MPI_Fint, and
+ # define AINT_LARGER_THAN_FINT if aint is larger (this
+ # affects code in MPI_Address)
+ if test "$ac_cv_sizeof_void_p" != "0" -a \
+ "$ac_cv_sizeof_void_p" -gt "$pac_cv_f77_sizeof_integer" ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+$as_echo "#define HAVE_AINT_LARGER_THAN_FINT 1" >>confdefs.h
-int
-main ()
-{
+ fi
+ if test "$ac_cv_sizeof_void_p" != 0 -a \
+ "$ac_cv_sizeof_void_p" != "$pac_cv_f77_sizeof_integer" ; then
- long var, *var_ptr=&var;
-#ifdef __INTEL_COMPILER
-#include "ia64regs.h"
- var=__getReg(_IA64_REG_AR_ITC);
-#else
- __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
-#endif
+$as_echo "#define HAVE_AINT_DIFFERENT_THAN_FINT 1" >>confdefs.h
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gcc_ia64_cycle=yes
-else
- pac_cv_gcc_ia64_cycle=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_ia64_cycle" >&5
-$as_echo "$pac_cv_ia64_cycle" >&6; }
- if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
- as_fn_error $? "IPF cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
- fi
- MPICH_TIMER_TYPE="long"
- ;;
+ fi
- linuxalpha_cycle)
- as_fn_error $? "linuxalpha_cycle is no longer supported" "$LINENO" 5
- ;;
+ # Include a defined value for Fint is int
+ if test "$MPI_FINT" = "int" ; then
- mach_absolute_time)
- ac_fn_c_check_func "$LINENO" "mach_absolute_time" "ac_cv_func_mach_absolute_time"
-if test "x$ac_cv_func_mach_absolute_time" = xyes; then :
+$as_echo "#define HAVE_FINT_IS_INT 1" >>confdefs.h
-else
- as_fn_error $? "mach_absolute_time is not available" "$LINENO" 5
-fi
+ elif test "$SIZEOF_F77_INTEGER" != "$ac_cv_sizeof_int" ; then
+ # Make this fatal because we do not want to build a broken fortran
+ # interface (was error)
+ # Check to see if the f77 binding has enabled the code to support
+ # the case of int != fint.
+ if grep HAVE_FINT_IS_INT $master_top_srcdir/src/binding/fortran/mpif_h/testf.c 2>&1 1>/dev/null ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran integers and C ints are not the same size. Support for this case is experimental; use at your own risk" >&5
+$as_echo "$as_me: WARNING: Fortran integers and C ints are not the same size. Support for this case is experimental; use at your own risk" >&2;}
+ else
+ as_fn_error $? "Fortran integers and C ints are not the same size. The current Fortran binding does not support this case. Either force the Fortran compiler to use integers of $ac_cv_sizeof_int bytes, or use --disable-fortran on the configure line for MPICH." "$LINENO" 5
+ fi
+ fi
- ac_fn_c_check_func "$LINENO" "mach_timebase_info" "ac_cv_func_mach_timebase_info"
-if test "x$ac_cv_func_mach_timebase_info" = xyes; then :
+ # We must convert all hex values to decimal (!).
+ # This is for the C types so they are also available in Fortran
+ for var in CHAR SIGNED_CHAR UNSIGNED_CHAR WCHAR SHORT \
+ UNSIGNED_SHORT INT UNSIGNED_INT LONG UNSIGNED_LONG \
+ FLOAT DOUBLE LONG_DOUBLE LONG_LONG_INT \
+ UNSIGNED_LONG_LONG LONG_LONG FLOAT_INT DOUBLE_INT \
+ LONG_INT SHORT_INT "2INT" LONG_DOUBLE_INT \
+ INT8_T INT16_T INT32_T INT64_T \
+ UINT8_T UINT16_T UINT32_T UINT64_T \
+ C_BOOL C_FLOAT_COMPLEX C_DOUBLE_COMPLEX \
+ C_LONG_DOUBLE_COMPLEX AINT OFFSET ; do
+ fullvar="MPI_$var"
+ fullf77var="MPI_F77_$var"
+ eval fullvarvalue=\$$fullvar
+ #echo "$fullvar = $fullvarvalue"
+ if test "x$fullvarvalue" = "x" -o \
+ "x$fullvarvalue" = "xMPI_DATATYPE_NULL" ; then
+ eval $fullf77var="MPI_DATATYPE_NULL"
+ continue
+ fi
+ value=0
+ fullvarvalue=`echo $fullvarvalue | sed -e 's/..\(.*\)/\1/'`
+ offset=0
+ for pos in 3 4 5 6 7 8 9 10 ; do
+ # This works, even for Tru64, because only a single character
+ # is extracted
+ char=`expr $fullvarvalue : '\(.\)'`
+ # FIXME: Tru64 Unix eliminates leading zeros (!)
+ # How do we fix something that broken?
+ fullvarvalue=`echo $fullvarvalue | sed -e 's/.\(.*\)/\1/'`
+ case $char in
+ a) char=10 ;;
+ b) char=11 ;;
+ c) char=12 ;;
+ d) char=13 ;;
+ e) char=14 ;;
+ f) char=15 ;;
+ esac
+ # For Fortran, if the value is too big for an unsigned int,
+ # we need to make it a signed (negative) int. Currently, the
+ # types in this class are the minloc/maxloc types.
+ if test $pos = 3 -a $char -ge 8 ; then
+ #echo "for $var in position $pos found a value >= 8"
+ char=`expr $char - 8`
+ offset=-2147483648
+ fi
+ value=`expr $value \* 16 + $char`
+ done
+ if test "$offset" != 0 ; then
+ #echo "$fullf77var: $value, $offset"
+ value=`expr $value + $offset`
+ fi
+ #echo "$fullf77var = $value"
+ eval $fullf77var=$value
+ done
-else
- as_fn_error $? "mach_timebase_info is not available" "$LINENO" 5
-fi
- MPICH_TIMER_TYPE="uint64_t"
- ;;
- device)
- # The device selected should export the datatype for the timer
- # in MPID_DEVICE_TIMER_TYPE if something other than long is needed
- if test -n "$MPID_DEVICE_TIMER_TYPE" ; then
- MPICH_TIMER_TYPE=$MPID_DEVICE_TIMER_TYPE
- fi
- ;;
- *)
- as_fn_error $? "Invalid timer type $timer_type" "$LINENO" 5
- ;;
-esac
-# Convert timer type to upper case
-timer_type=`echo $timer_type | \
- tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-MPICH_TIMER_KIND=MPIU_$timer_type
-# ----------------------------------------------------------------------------
-# End of code for timer support (except for ac_ OUTPUT)
-# ----------------------------------------------------------------------------
-# Setup other replaceable values
+ MPI_F77_UNSIGNED=$MPI_F77_UNSIGNED_INT
-if test "$NEEDSPLIB" = "yes" ; then
- LPMPILIBNAME="-l${PMPILIBNAME}"
-fi
-# Note that aint_size must be used instead of void_p where the desired check
-# is on the size of MPI_Aint
-aint_size=$ac_cv_sizeof_void_p
-if test "$with_aint_size" -gt 0 ; then
- aint_size=$with_aint_size
- if test "$aint_size" != "$ac_cv_sizeof_void_p" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Overriding MPI_Aint to be $aint_size bytes" >&5
-$as_echo "Overriding MPI_Aint to be $aint_size bytes" >&6; }
- fi
-fi
-MPI_AINT=int
-for type in int long long_long short ; do
- eval len=\$ac_cv_sizeof_$type
- if test "$len" = "$aint_size" ; then
- MPI_AINT=`echo $type | sed -e 's/_/ /'`
- # Make the sizeof AINT available to other configures
- MPI_SIZEOF_AINT=$len
- export MPI_SIZEOF_AINT
- case $type in
- int)
- MPI_AINT_FMT_DEC_SPEC="%d"
- MPI_AINT_FMT_HEX_SPEC="%x"
- MPIR_AINT_MAX="INT_MAX"
- ;;
- long)
- MPI_AINT_FMT_DEC_SPEC="%ld"
- MPI_AINT_FMT_HEX_SPEC="%lx"
- MPIR_AINT_MAX="LONG_MAX"
- ;;
- long_long)
- MPI_AINT_FMT_DEC_SPEC="%lld"
- MPI_AINT_FMT_HEX_SPEC="%llx"
- # tt#1776: if LLONG_MAX is missing, we fix it up in C, b/c it's
- # easier there. See mpiiimpl.h.
- MPIR_AINT_MAX="LLONG_MAX"
- ;;
- short)
- MPI_AINT_FMT_DEC_SPEC="%hd"
- MPI_AINT_FMT_HEX_SPEC="%hx"
- MPIR_AINT_MAX="SHRT_MAX"
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to determine format specifiers for MPI_Aint, defaulting to int" >&5
-$as_echo "$as_me: WARNING: unable to determine format specifiers for MPI_Aint, defaulting to int" >&2;}
- MPI_AINT_FMT_DEC_SPEC="%d"
- MPI_AINT_FMT_HEX_SPEC="%x"
- MPIR_AINT_MAX="INT_MAX"
- ;;
- esac
- export MPI_AINT_FMT_DEC_SPEC MPI_AINT_FMT_HEX_SPEC
- break
- fi
-done
-cat >>confdefs.h <<_ACEOF
-#define MPIR_AINT_MAX $MPIR_AINT_MAX
-_ACEOF
+ MPI_F77_LONG_LONG_INT=$MPI_F77_LONG_LONG
-# If sizeof(mpi_aint) = sizeof(int), set this value
-if test "$ac_cv_sizeof_int" = "$aint_size" ; then
-$as_echo "#define SIZEOF_INT_IS_AINT 1" >>confdefs.h
-fi
-# Find a pointer-sized int
-for type in int long long_long short ; do
- eval len=\$ac_cv_sizeof_$type
- if test "$len" = "$ac_cv_sizeof_void_p" ; then
- case $type in
- int)
- MPIU_PINT_FMT_DEC_SPEC="\"%d\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%u\""
- ;;
- long)
- MPIU_PINT_FMT_DEC_SPEC="\"%ld\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%lu\""
- ;;
- long_long)
- MPIU_PINT_FMT_DEC_SPEC="\"%lld\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%llu\""
- ;;
- short)
- MPIU_PINT_FMT_DEC_SPEC="\"%hd\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%hu\""
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to determine format specifiers for MPIU_Pint, defaulting to int" >&5
-$as_echo "$as_me: WARNING: unable to determine format specifiers for MPIU_Pint, defaulting to int" >&2;}
- MPIU_PINT_FMT_DEC_SPEC="\"%d\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%u\""
- ;;
- esac
- MPIU_PINT=`echo $type | sed -e 's/_/ /'`
- break
- fi
-done
-cat >>confdefs.h <<_ACEOF
-#define MPIU_Pint $MPIU_PINT
-_ACEOF
-# allow @MPIU_PINT@ substitution in glue_romio.h
-cat >>confdefs.h <<_ACEOF
-#define MPIU_PINT_FMT_DEC_SPEC $MPIU_PINT_FMT_DEC_SPEC
-_ACEOF
-cat >>confdefs.h <<_ACEOF
-#define MPIU_Upint unsigned $MPIU_PINT
-_ACEOF
-cat >>confdefs.h <<_ACEOF
-#define MPIU_UPINT_FMT_DEC_SPEC $MPIU_UPINT_FMT_DEC_SPEC
-_ACEOF
-# ----------------------------------------------------------------------------
-# MPI_AINT datatype
-# ----------------------------------------------------------------------------
-# Must be done after MPI_Aint type determination but before subconfigures.
-# convert to 2-char hex size
-case "$MPI_SIZEOF_AINT" in
- 4) len_mpi_aint=04 ;;
- 8) len_mpi_aint=08 ;;
- 16) len_mpi_aint=10 ;;
- *) as_fn_error $? "Unable to convert MPI_SIZEOF_AINT to a hex string. This is either because we are building on a very strange platform or there is a bug somewhere in configure." "$LINENO" 5 ;;
-esac
-# MPI_AINT and MPI_OFFSET are already taken, appending a _DATATYPE suffix
-MPI_AINT_DATATYPE=0x4c00${len_mpi_aint}43
-export MPI_AINT_DATATYPE
+ # C_COMPLEX is an alias for FLOAT_COMPLEX
+ MPI_F77_C_COMPLEX=$MPI_F77_C_FLOAT_COMPLEX
-# 0x4c000043 is 1275068483 in decimal, add ($MPI_SIZEOF_AINT * 256) and you get
-# the decimal equivalent of the hex number
-MPI_F77_AINT=`expr 1275068483 '+' '(' 256 '*' $MPI_SIZEOF_AINT ')'`
-export MPI_F77_AINT
-# ----------------------------------------------------------------------------
-# define MPIU_Size_t - used to express the size of objects
-# This is used in mpiu_type_defs.h to define MPIU_SIZE_T,
-# and is used in various parts of ch3 and mpid/common/sock.
-# This is used to handle the potential problem that a message is
-# too long to fit with an int. However, we may still need to make
-# some more adjustments in the code (this may not be used everywhere
-# that it is needed).
-#
-# FIXME: this should really be in a util configure file, but we don't
-# have one at the moment
-#
-MPIU_SIZE_T="unsigned $MPI_AINT"
+ # these two are not yet defined, but AC_SUBST only cares about them at
+ # AC_OUTPUT-time
-cat >>confdefs.h <<_ACEOF
-#define MPIU_SIZE_T $MPIU_SIZE_T
-_ACEOF
-if test "$ac_cv_sizeof_void_p" -lt "$aint_size" ; then
+ # Try and compute the values of .true. and .false. in Fortran
+ # This code has been removed because the Fortran binding code does
+ # not yet support it.
-$as_echo "#define USE_AINT_FOR_ATTRVAL 1" >>confdefs.h
-fi
-# with MPI_AINT defined, now we can
-# Get the size for the bsendoverhead
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of MPIR_Bsend_data_t" >&5
-$as_echo_n "checking size of MPIR_Bsend_data_t... " >&6; }
-if ${ac_cv_sizeof_MPIR_Bsend_data_t+:} false; then :
+pac_mpi_fint="$MPI_FINT"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for values of Fortran logicals" >&5
+$as_echo_n "checking for values of Fortran logicals... " >&6; }
+if ${pac_cv_prog_f77_true_false_value+:} false; then :
$as_echo_n "(cached) " >&6
else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (MPIR_Bsend_data_t))" "ac_cv_sizeof_MPIR_Bsend_data_t" "
-#define MPI_Datatype int
-typedef $MPI_AINT MPI_Aint;
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#include \"${master_top_srcdir}/src/include/mpibsend.h\"
-"; then :
+pac_cv_prog_f77_true_false_value=""
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-else
- if test "$ac_cv_type_MPIR_Bsend_data_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (MPIR_Bsend_data_t)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_MPIR_Bsend_data_t=0
- fi
-fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_MPIR_Bsend_data_t" >&5
-$as_echo "$ac_cv_sizeof_MPIR_Bsend_data_t" >&6; }
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#if defined(HAVE_STDLIB_H) || defined(STDC_HEADERS)
+#include <stdlib.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define ftest_ FTEST
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define ftest_ ftest
+#endif
+void ftest_( $pac_mpi_fint *, $pac_mpi_fint *);
+void ftest_( $pac_mpi_fint *itrue, $pac_mpi_fint *ifalse )
+{
+ FILE *f = fopen("conftestval","w");
+ if (!f) exit(1);
+ fprintf( f, "%d %d\n", *itrue, *ifalse );
+ fclose(f);
+}
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_MPIR_BSEND_DATA_T $ac_cv_sizeof_MPIR_Bsend_data_t
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
-if test "$ac_cv_sizeof_MPIR_Bsend_data_t" = "0" ; then
- as_fn_error $? "Unable to determine the size of MPI_BSEND_OVERHEAD" "$LINENO" 5
- # In the past, a default of 128 was used (still likely good enough),
- # but the autoconf SIZEOF macro has been changed to ignore the second
- # argument, so code that depended on the prior defined behavior now
- # silently breaks.
-fi
-BSEND_OVERHEAD=$ac_cv_sizeof_MPIR_Bsend_data_t
-export BSEND_OVERHEAD
-
-
-#
-# See if we need to update the timer type (which was converted to uppercase)
-if test "$timer_type" = "DEVICE" ; then
- # The device selected should export the datatype for the timer
- # in MPID_DEVICE_TIMER_TYPE if something other than long is needed
- if test -n "$MPID_DEVICE_TIMER_TYPE" ; then
- MPICH_TIMER_TYPE=$MPID_DEVICE_TIMER_TYPE
- fi
-fi
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS"
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+ if test "$cross_compiling" = yes; then :
-#
-# -----------------------------------------------------------------------------
-# Configure threads first. This is necessary to obtain all required
-# definitions, flags, and libraries that the other subsystems will need
-#
-#
-# -----------------------------------------------------------------------------
+ # Cross-Compiling. Allow the user to set the values
+ if test -n "$CROSS_F77_TRUE_VALUE" -a -n "$CROSS_F77_FALSE_VALUE" ; then
+ pac_cv_prog_f77_true_false_value="$CROSS_F77_TRUE_VALUE $CROSS_F77_FALSE_VALUE"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Either CROSS_F77_TRUE_VALUE=\"$CROSS_F77_TRUE_VALUE\" or CROSS_F77_FALSE_VALUE=\"$CROSS_F77_FALSE_VALUE\" is not set." >&5
+$as_echo "$as_me: WARNING: Either CROSS_F77_TRUE_VALUE=\"$CROSS_F77_TRUE_VALUE\" or CROSS_F77_FALSE_VALUE=\"$CROSS_F77_FALSE_VALUE\" is not set." >&2;}
+ fi
-# Check whether --with-thread-package was given.
-if test "${with_thread_package+set}" = set; then :
- withval=$with_thread_package;
else
- with_thread_package=posix
-fi
-
+ cat > conftest.$ac_ext <<_ACEOF
-if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
- with_thread_package=none
-fi
-if test "${with_thread_package}" = "yes" ; then
- with_thread_package=posix
-fi
+ program main
+ logical itrue, ifalse
+ itrue = .TRUE.
+ ifalse = .FALSE.
+ call ftest( itrue, ifalse )
+ end
-if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
- as_fn_error $? "if no thread package is available, use --enable-threads=single or funneled" "$LINENO" 5
-fi
-MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_INVALID
-case $with_thread_package in
- posix|pthreads)
- with_thread_package=posix
- for ac_header in pthread.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_PTHREAD_H 1
_ACEOF
+if ac_fn_f77_try_run "$LINENO"; then :
-fi
-
-done
-
+ pac_cv_prog_f77_true_false_value="`cat conftestval`"
- # If pthreads library is found, just include it on the link line. We don't try
- # to test if the C compiler needs it or not, since the C++ or Fortran
- # compilers might need it even if the C compiler doesn't
- # (nvcc with gfortran, for example).
- #
- # OSF1 has __pthread_create but not pthread_create (because of
- # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_key_create in -lpthread" >&5
-$as_echo_n "checking for pthread_key_create in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_key_create+:} false; then :
- $as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_key_create ();
-int
-main ()
-{
-return pthread_key_create ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread_pthread_key_create=yes
-else
- ac_cv_lib_pthread_pthread_key_create=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to build/run program to determine Fortran logical values." >&5
+$as_echo "$as_me: WARNING: Failed to build/run program to determine Fortran logical values." >&2;}
+
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_key_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_key_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_key_create" = xyes; then :
- have_pthreads=yes
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
fi
- if test "$have_pthreads" = "yes" ; then
+if test "X$pac_cv_prog_f77_true_false_value" != "X" ; then
+ true_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/ .*//g'`"
+ false_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/.* *//g'`"
+ if test -n "$true_val" -a -n "$false_val" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: True is $true_val and False is $false_val" >&5
+$as_echo "True is $true_val and False is $false_val" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not determine" >&5
+$as_echo "could not determine" >&6; }
+ fi
+fi
+if test -n "$true_val" -a -n "$false_val" ; then
+$as_echo "#define F77_TRUE_VALUE_SET 1" >>confdefs.h
- if echo "$LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lpthread', not prepending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-lpthread', prepending" >&5
- LIBS="-lpthread $LIBS"
-fi
+cat >>confdefs.h <<_ACEOF
+#define F77_TRUE_VALUE $true_val
+_ACEOF
- fi
- for ac_func in pthread_yield
-do :
- ac_fn_c_check_func "$LINENO" "pthread_yield" "ac_cv_func_pthread_yield"
-if test "x$ac_cv_func_pthread_yield" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_PTHREAD_YIELD 1
+cat >>confdefs.h <<_ACEOF
+#define F77_FALSE_VALUE $false_val
_ACEOF
fi
-done
- # this check should come after the AC_CHECK_LIB for -lpthread
- ac_fn_c_check_func "$LINENO" "pthread_key_create" "ac_cv_func_pthread_key_create"
-if test "x$ac_cv_func_pthread_key_create" = xyes; then :
+ # Get the INTEGER_KIND, ADDRESS_KIND and OFFSET_KIND if possible
+ #
+ # For Fortran 90, we'll also need MPI_ADDRESS_KIND and MPI_OFFSET_KIND
+ # Since our compiler might BE a Fortran 90 compiler, try and determine the
+ # values.
+ if test "$FC" = "no" ; then
-else
- as_fn_error $? "unable to find pthreads library" "$LINENO" 5
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 is a Fortran 90 compiler" >&5
+$as_echo_n "checking whether $F77 is a Fortran 90 compiler... " >&6; }
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+saved_ac_ext=$ac_ext
+ac_ext="f90"
+cat > conftest.$ac_ext <<_ACEOF
+
+
+ program main
+ integer, dimension(10) :: n
+ integer k
+ print *, range(k)
+ end
- # Check for a routine that specify a routine to call on
- # thread exit. We can use this to release memory that may
- # be allocated by the MPICH library in the thread.
- # A complication: pthread_cleanup_push may be a macro; in that
- # case, check_funcs will fail to find it.
- # Under OSX, pthread_cleanup_push and pop are macros that must
- # appear together in the same lexical scope, and hence are
- # really useless in libraries that may allocate data within
- # a user-managed thread.
- for ac_func in pthread_cleanup_push
-do :
- ac_fn_c_check_func "$LINENO" "pthread_cleanup_push" "ac_cv_func_pthread_cleanup_push"
-if test "x$ac_cv_func_pthread_cleanup_push" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_PTHREAD_CLEANUP_PUSH 1
_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
-fi
-done
+ pac_cv_prog_f77_is_fc=yes
- if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_cleanup_push is available (may be a macro in pthread.h)" >&5
-$as_echo_n "checking whether pthread_cleanup_push is available (may be a macro in pthread.h)... " >&6; }
-if ${pac_cv_func_pthread_cleanup_push+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ FC=$F77
+ if test -z "$FCFLAGS" ; then
+ FCFLAGS="$FFLAGS"
+ fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-void f1(void *a) { return; }
-int
-main ()
-{
-pthread_cleanup_push( f1, (void *)0 );
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_func_pthread_cleanup_push=yes
else
- pac_cv_func_pthread_cleanup_push=no
+
+ pac_cv_prog_f77_is_fc=no
+
+
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_pthread_cleanup_push" >&5
-$as_echo "$pac_cv_func_pthread_cleanup_push" >&6; }
- if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
-
-$as_echo "#define HAVE_PTHREAD_CLEANUP_PUSH_MACRO 1" >>confdefs.h
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_prog_f77_is_fc" >&5
+$as_echo "$pac_cv_prog_f77_is_fc" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- fi
+ fi
+ if test "$FC" != "no" ; then
+ # Offset kind should be for 8 bytes if possible (Romio prefers that)
+ # address should be sizeof void * (unless --with-aint-size has
+ # been set)
+ # FIXME in the current configure implementation OFFSET_KIND and
+ # MPI_Offset won't always agree, but generally will. The MPI Standard
+ # implies that these types must have identical size, so this is a bug
+ # waiting to happen.
+ if test "$with_aint_size" -gt 0 -a \
+ "$with_aint_size" -gt "$ac_cv_sizeof_void_p" ; then
+ testsize=$with_aint_size
+ else
+ testsize=$ac_cv_sizeof_void_p
+ fi
+ if test "$testsize" = 0 ; then
+ # Set a default
+ testsize=4
fi
- # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP" >&5
-$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP... " >&6; }
-if ${pac_cv_has_pthread_mutex_errorcheck_np+:} false; then :
- $as_echo_n "(cached) " >&6
+# Set the default
+ADDRESS_KIND=-1
+if test "$pac_cv_prog_fc_cross" = "yes" ; then
+ if test -z "$CROSS_F90_ADDRESS_KIND"; then :
+ as_fn_error $? "'$CROSS_F90_ADDRESS_KIND' is empty" "$LINENO" 5
+fi
+ ADDRESS_KIND="$CROSS_F90_ADDRESS_KIND"
else
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-int a=PTHREAD_MUTEX_ERRORCHECK_NP;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_has_pthread_mutex_errorcheck_np=yes
-else
- pac_cv_has_pthread_mutex_errorcheck_np=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck_np" >&5
-$as_echo "$pac_cv_has_pthread_mutex_errorcheck_np" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK" >&5
-$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK... " >&6; }
-if ${pac_cv_has_pthread_mutex_errorcheck+:} false; then :
- $as_echo_n "(cached) " >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 integer kind for ${testsize}-byte integers" >&5
+$as_echo_n "checking for Fortran 90 integer kind for ${testsize}-byte integers... " >&6; }
+ # Convert bytes to digits
+ case ${testsize} in
+ 1) sellen=2 ;;
+ 2) sellen=4 ;;
+ 4) sellen=8 ;;
+ 8) sellen=16 ;;
+ 16) sellen=30 ;;
+ *) sellen=8 ;;
+ esac
+ # Check for cached value
+ eval testval=\$"pac_cv_prog_fc_int_kind_$sellen"
+ if test -n "$testval" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $testval (cached)" >&5
+$as_echo "$testval (cached)" >&6; }
+ ADDRESS_KIND=$testval
+ else
+ KINDVAL="unavailable"
+ eval "pac_cv_prog_fc_int_kind_$sellen"=-1
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
else
+ cat > conftest.$ac_ext <<_ACEOF
+
+
+ program main
+ integer ii
+ ii = selected_int_kind($sellen)
+ open(8, file="conftest1.out", form="formatted")
+ write (8,*) ii
+ close(8)
+ stop
+ end
+
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-int a=PTHREAD_MUTEX_ERRORCHECK;
- ;
- return 0;
-}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_has_pthread_mutex_errorcheck=yes
+if ac_fn_fc_try_run "$LINENO"; then :
+ pac_run_ok=yes
else
- pac_cv_has_pthread_mutex_errorcheck=no
+ pac_run_ok=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck" >&5
-$as_echo "$pac_cv_has_pthread_mutex_errorcheck" >&6; }
- if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
+ if test "$pac_run_ok" = "yes" ; then
+ if test -s conftest1.out ; then
+ # Because of write, there may be a leading blank.
+ KINDVAL=`cat conftest1.out | sed 's/ //g'`
+ eval "pac_cv_prog_fc_int_kind_$sellen"=$KINDVAL
+ ADDRESS_KIND=$KINDVAL
+ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KINDVAL" >&5
+$as_echo "$KINDVAL" >&6; }
+ fi # not cached
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-$as_echo "#define MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK" >>confdefs.h
+fi # is not cross compiling
- elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
+ if test "$testsize" = 8 ; then
+ OFFSET_KIND=$ADDRESS_KIND
+ else
-$as_echo "#define MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK_NP" >>confdefs.h
+# Set the default
+OFFSET_KIND=-1
+if test "$pac_cv_prog_fc_cross" = "yes" ; then
+ if test -z "$CROSS_F90_OFFSET_KIND"; then :
+ as_fn_error $? "'$CROSS_F90_OFFSET_KIND' is empty" "$LINENO" 5
+fi
+ OFFSET_KIND="$CROSS_F90_OFFSET_KIND"
+else
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 integer kind for 8-byte integers" >&5
+$as_echo_n "checking for Fortran 90 integer kind for 8-byte integers... " >&6; }
+ # Convert bytes to digits
+ case 8 in
+ 1) sellen=2 ;;
+ 2) sellen=4 ;;
+ 4) sellen=8 ;;
+ 8) sellen=16 ;;
+ 16) sellen=30 ;;
+ *) sellen=8 ;;
+ esac
+ # Check for cached value
+ eval testval=\$"pac_cv_prog_fc_int_kind_$sellen"
+ if test -n "$testval" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $testval (cached)" >&5
+$as_echo "$testval (cached)" >&6; }
+ OFFSET_KIND=$testval
+ else
+ KINDVAL="unavailable"
+ eval "pac_cv_prog_fc_int_kind_$sellen"=-1
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat > conftest.$ac_ext <<_ACEOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_mutexattr_settype needs a declaration" >&5
-$as_echo_n "checking whether pthread_mutexattr_settype needs a declaration... " >&6; }
-if ${pac_cv_func_decl_pthread_mutexattr_settype+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ program main
+ integer ii
+ ii = selected_int_kind($sellen)
+ open(8, file="conftest1.out", form="formatted")
+ write (8,*) ii
+ close(8)
+ stop
+ end
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-void (*fptr)(void) = (void(*)(void))pthread_mutexattr_settype;
-int
-main ()
-{
- ;
- return 0;
-}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_pthread_mutexattr_settype=no
+if ac_fn_fc_try_run "$LINENO"; then :
+ pac_run_ok=yes
else
- pac_cv_func_decl_pthread_mutexattr_settype=yes
+ pac_run_ok=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_pthread_mutexattr_settype" >&5
-$as_echo "$pac_cv_func_decl_pthread_mutexattr_settype" >&6; }
-if test "$pac_cv_func_decl_pthread_mutexattr_settype" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL 1
-_ACEOF
+ if test "$pac_run_ok" = "yes" ; then
+ if test -s conftest1.out ; then
+ # Because of write, there may be a leading blank.
+ KINDVAL=`cat conftest1.out | sed 's/ //g'`
+ eval "pac_cv_prog_fc_int_kind_$sellen"=$KINDVAL
+ OFFSET_KIND=$KINDVAL
+ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KINDVAL" >&5
+$as_echo "$KINDVAL" >&6; }
+ fi # not cached
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
-
+fi # is not cross compiling
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_POSIX
- ;;
- solaris)
- for ac_header in thread.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "thread.h" "ac_cv_header_thread_h" "$ac_includes_default"
-if test "x$ac_cv_header_thread_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_THREAD_H 1
-_ACEOF
+ fi
+ #
+# Set the default
+INTEGER_KIND=-1
+if test "$pac_cv_prog_fc_cross" = "yes" ; then
+ if test -z "$CROSS_F90_INTEGER_KIND"; then :
+ as_fn_error $? "'$CROSS_F90_INTEGER_KIND' is empty" "$LINENO" 5
fi
+ INTEGER_KIND="$CROSS_F90_INTEGER_KIND"
+else
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 90 integer kind for $pac_cv_f77_sizeof_integer-byte integers" >&5
+$as_echo_n "checking for Fortran 90 integer kind for $pac_cv_f77_sizeof_integer-byte integers... " >&6; }
+ # Convert bytes to digits
+ case $pac_cv_f77_sizeof_integer in
+ 1) sellen=2 ;;
+ 2) sellen=4 ;;
+ 4) sellen=8 ;;
+ 8) sellen=16 ;;
+ 16) sellen=30 ;;
+ *) sellen=8 ;;
+ esac
+ # Check for cached value
+ eval testval=\$"pac_cv_prog_fc_int_kind_$sellen"
+ if test -n "$testval" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $testval (cached)" >&5
+$as_echo "$testval (cached)" >&6; }
+ INTEGER_KIND=$testval
+ else
+ KINDVAL="unavailable"
+ eval "pac_cv_prog_fc_int_kind_$sellen"=-1
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat > conftest.$ac_ext <<_ACEOF
- for ac_func in thr_yield
-do :
- ac_fn_c_check_func "$LINENO" "thr_yield" "ac_cv_func_thr_yield"
-if test "x$ac_cv_func_thr_yield" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_THR_YIELD 1
-_ACEOF
-fi
-done
+ program main
+ integer ii
+ ii = selected_int_kind($sellen)
+ open(8, file="conftest1.out", form="formatted")
+ write (8,*) ii
+ close(8)
+ stop
+ end
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing thr_create" >&5
-$as_echo_n "checking for library containing thr_create... " >&6; }
-if ${ac_cv_search_thr_create+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char thr_create ();
-int
-main ()
-{
-return thr_create ();
- ;
- return 0;
-}
_ACEOF
-for ac_lib in '' thread; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_thr_create=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_thr_create+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_thr_create+:} false; then :
-
+if ac_fn_fc_try_run "$LINENO"; then :
+ pac_run_ok=yes
else
- ac_cv_search_thr_create=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ pac_run_ok=no
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_thr_create" >&5
-$as_echo "$ac_cv_search_thr_create" >&6; }
-ac_res=$ac_cv_search_thr_create
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- found=yes
-else
- found=no
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- if test "$found" != "yes" ; then
- as_fn_error $? "unable to find Solaris threads library" "$LINENO" 5
- fi
- # FIXME: need to add -mt if using solaris compilers
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_SOLARIS
- ;;
- win|windows)
- with_thread_package=win
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_WIN
- as_fn_error $? "The 'win' thread package is not supported via autoconf builds at this time." "$LINENO" 5
- ;;
- no|none)
- with_thread_package=none
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_NONE
- ;;
- *)
- as_fn_error $? "The specified thread package, $with_thread_package, is not supported." "$LINENO" 5
- ;;
-esac
-
-# Define and export the selected thread library so that other packages
-# know what's used in MPICH
-
-cat >>confdefs.h <<_ACEOF
-#define MPICH_THREAD_PACKAGE_NAME $MPICH_THREAD_PACKAGE_NAME
-_ACEOF
+ if test "$pac_run_ok" = "yes" ; then
+ if test -s conftest1.out ; then
+ # Because of write, there may be a leading blank.
+ KINDVAL=`cat conftest1.out | sed 's/ //g'`
+ eval "pac_cv_prog_fc_int_kind_$sellen"=$KINDVAL
+ INTEGER_KIND=$KINDVAL
+ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KINDVAL" >&5
+$as_echo "$KINDVAL" >&6; }
+ fi # not cached
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi # is not cross compiling
-# check for compiler-support for thread-local storage (MPICH_TLS_SPECIFIER)
+ if test "$INTEGER_KIND" = "-1" ; then
+ # In our experience, this usually means that there is some
+ # problem building and/or running the f90 program. Fail
+ # in this case rather than attempt to continue
+ as_fn_error $? "Unable to determine Fortran 90 KIND values for either address-sized integers or offset-sized integers." "$LINENO" 5
+ fi
+ #
+ # Some compilers won't allow a -1 kind (e.g., absoft). In this case,
+ # use a fallback (sizeof(int) kind)
+ if test "$ADDRESS_KIND" = "-1" -o "$OFFSET_KIND" = "-1" ; then
+ if test "$ADDRESS_KIND" = "-1" ; then
+ ADDRESS_KIND=$INTEGER_KIND
+ fi
+ if test "$OFFSET_KIND" = "-1" ; then
+ OFFSET_KIND=$INTEGER_KIND
+ fi
+ fi
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage specifier" >&5
-$as_echo_n "checking for thread local storage specifier... " >&6; }
- if ${ac_cv_tls+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if real*8 is supported in Fortran 90" >&5
+$as_echo_n "checking if real*8 is supported in Fortran 90... " >&6; }
+if ${pac_cv_fort90_real8+:} false; then :
$as_echo_n "(cached) " >&6
else
- ax_tls_keywords="__thread __declspec(thread) none"
- for ax_tls_keyword in $ax_tls_keywords; do
- case $ax_tls_keyword in
- none) ac_cv_tls=none ; break ;;
- *)
- # MPICH modification: This was an AC_TRY_COMPILE before, but
- # Darwin with non-standard compilers will accept __thread at
- # compile time but fail to link due to an undefined
- # "__emutls_get_address" symbol unless -lgcc_eh is added to the
- # link line.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ax_tls_keyword int bar = 5;
-int
-main ()
-{
-++bar;
- ;
- return 0;
-}
+ cat > conftest.$ac_ext <<_ACEOF
+
+ program main
+ real*8 a
+ end
+
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_tls=$ax_tls_keyword
+if ac_fn_fc_try_compile "$LINENO"; then :
+
+ pac_cv_fort90_real8=yes
+
else
- ac_cv_tls=none
+
+ pac_cv_fort90_real8=no
+
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fort90_real8" >&5
+$as_echo "$pac_cv_fort90_real8" >&6; }
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ WTIME_DOUBLE_TYPE="DOUBLE PRECISION"
+ # Save a copy of the original mpi_base.f90 file
+ if test "$enable_fc" = "yes" -a "$pac_cv_fort90_real8" = "yes" ; then
+ WTIME_DOUBLE_TYPE="REAL*8"
+ fi
+ # WTIME_DOUBLE_TYPE is substituted into mpi_base.f90
+
+ fi
+ # Make sure that address kind and offset kind have values.
+ if test -z "$ADDRESS_KIND" ; then
+ ADDRESS_KIND=0
+ fi
+ if test -z "$OFFSET_KIND" ; then
+ OFFSET_KIND=0
+ fi
+ # Note, however, that zero value are (in all practical case) invalid
+ # for Fortran 90, and indicate a failure. Test and fail if Fortran 90
+ # enabled.
+ if test "$enable_fc" = "yes" ; then
+ if test "$ADDRESS_KIND" -le 0 -o "$OFFSET_KIND" -le 0 ; then
+ as_fn_error $? "Unable to determine Fortran 90 integer kinds for MPI types. If you do not need Fortran 90, add --disable-fc to the configure options." "$LINENO" 5
+ # If the above is converted to a warning, you need to change
+ # enable_fc and remote f90 from the bindings
+ enable_fc=no
+ fi
+ fi
- # MPICH modification: Also test with the extern keyword.
- # The intel compiler on Darwin (at least as of 15.0.1)
- # seems to break with the above error when the extern
- # keyword is specified in shared library builds.
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+ # Some compilers may require special directives to handle the common
+ # block in a library. In particular, directives are needed for Microsoft
+ # Windows to support dynamic library import. The following six
+ # directives may be needed:
+ # CMS\$ATTRIBUTES DLLIMPORT::/MPIPRIV1/
+ # CMS\$ATTRIBUTES DLLIMPORT::/MPIPRIV2/
+ # CMS\$ATTRIBUTES DLLIMPORT::/MPIPRIVC/
+ # CDEC\$ATTRIBUTES DLLIMPORT::/MPIPRIV1/
+ # CDEC\$ATTRIBUTES DLLIMPORT::/MPIPRIV2/
+ # CDEC\$ATTRIBUTES DLLIMPORT::/MPIPRIVC/
+ # CMS is for the Microsoft compiler,
+ # CDEC is (we believe) for the DEC Fortran compiler.
+ # We need to make this a configure-time variable because some compilers
+ # (in particular, a version of the Intel Fortran compiler for Linux)
+ # will read directives for other compilers and then flag as fatal
+ # errors directives that it does not support but does recognize.
- if echo "$LIBS" | $FGREP -e "\<-shared\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-shared', not appending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-shared', appending" >&5
- LIBS="$LIBS -shared"
+ DLLIMPORT=""
-fi
- if test "$ac_cv_tls" != "none" ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-extern $ax_tls_keyword int bar;
-int
-main ()
-{
-++bar;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_tls=$ax_tls_keyword
-else
- ac_cv_tls=none
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- fi
+ # FIXME:
+ # We also need to include
+ # SIZEOF_FC_MPI_OFFSET
+ # SIZEOF_FC_MPI_AINT
+ #
+ # If other "kinds" are supported, MPI_SIZEOF needs to identify
+ # those as well. This is very difficult to do in a general way.
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+ # To start with, we use the sizes determined for the Fortran 77 values.
+ # These must be the same as for the Fortran 90 values.
+ CROSS_F90_SIZEOF_INTEGER=${CROSS_F90_SIZEOF_INTEGER:-0}
+ CROSS_F90_SIZEOF_REAL=${CROSS_F90_SIZEOF_REAL:-0}
+ CROSS_F90_SIZEOF_DOUBLE_PRECISION=${CROSS_F90_SIZEOF_DOUBLE_PRECISION:-0}
+ SIZEOF_FC_INTEGER=$CROSS_F90_SIZEOF_INTEGER
+ SIZEOF_FC_REAL=$CROSS_F90_SIZEOF_REAL
+ SIZEOF_FC_CHARACTER=1
+ SIZEOF_FC_DOUBLE_PRECISION=$CROSS_F90_SIZEOF_DOUBLE_PRECISION
+ if test "$pac_cv_f77_sizeof_integer" -gt 0 -a \
+ "$SIZEOF_FC_INTEGER" = "0" ; then
+ SIZEOF_FC_INTEGER=$pac_cv_f77_sizeof_integer
+ fi
+ if test "$pac_cv_f77_sizeof_real" -gt 0 -a "$SIZEOF_FC_REAL" = "0" ; then
+ SIZEOF_FC_REAL=$pac_cv_f77_sizeof_real
+ fi
+ if test "$pac_cv_f77_sizeof_double_precision" -gt 0 -a \
+ "$SIZEOF_FC_DOUBLE_PRECISION" = "0" ; then
+ SIZEOF_FC_DOUBLE_PRECISION=$pac_cv_f77_sizeof_double_precision
+ fi
- if test "$ac_cv_tls" != "none" ; then break ; fi
- esac
- done
-fi
- if test "$ac_cv_tls" != "none"; then
- # MPICH modification: this was "TLS" before instead of
- # "MPICH_TLS_SPECIFIER", but TLS had a reasonably high chance of conflicting
- # with a system library.
+ # REQD is short for "real equal double precision" and is set to the
+ # Fortran 90 comment character if true. This is necessary to
+ # allow the mpi_sizeofs module to be built, since if this part of the
+ # Fortran standard is violated by the compiler (unfortunately common,
+ # as some applications are written to require this non-standard
+ # version), the double precision versions of the MPI_SIZEOF routine
+ # must be commented out of the module (!).
+ REQD=
+ if test "$SIZEOF_FC_REAL" = "$SIZEOF_FC_DOUBLE_PRECISION" ; then
+ REQD="!"
+ fi
-cat >>confdefs.h <<_ACEOF
-#define MPICH_TLS_SPECIFIER $ac_cv_tls
-_ACEOF
+ # Is integer*1 supported, and is it a different size than integer?
+ REQI1="!"
+ if test "$pac_cv_fort_integer1" = yes -a "$SIZEOF_FC_INTEGER" != 1 ; then
+ REQI1=
+ fi
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
-$as_echo "$ac_cv_tls" >&6; }
+ # Is integer*2 supported, and is it a different size than integer?
+ REQI2="!"
+ if test "$pac_cv_fort_integer2" = yes -a "$SIZEOF_FC_INTEGER" != 2 ; then
+ REQI2=
+ fi
+ # Is integer*8 supported, and is it a different size than integer?
+ REQI8="!"
+ if test "$pac_cv_fort_integer8" = yes -a "$SIZEOF_FC_INTEGER" != 8 ; then
+ REQI8=
+ fi
-for ac_func in getpid
-do :
- ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid"
-if test "x$ac_cv_func_getpid" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPID 1
-_ACEOF
+ #
-fi
-done
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
+# ----------------------------------------------------------------------------
+# C++ types
-# Choose a method to yield the procesor.
+# default to null types
+# Set to "0x0c000000" instead of "MPI_DATATYPE_NULL" because these values
+# sometimes are used in preprocessor tests where we cannot compare the
+# type-casted values.
+MPIR_CXX_BOOL=0x0c000000
+MPIR_CXX_COMPLEX=0x0c000000
+MPIR_CXX_DOUBLE_COMPLEX=0x0c000000
+MPIR_CXX_LONG_DOUBLE_COMPLEX=0x0c000000
+MPI_F77_CXX_BOOL=MPI_DATATYPE_NULL
+MPI_F77_CXX_FLOAT_COMPLEX=MPI_DATATYPE_NULL
+MPI_F77_CXX_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
+MPI_F77_CXX_LONG_DOUBLE_COMPLEX=MPI_DATATYPE_NULL
+if test "$enable_cxx" = "yes" ; then
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-# If the user specified a method to use, we check if it's available.
-# If a method was not specified, we make a guess based on the OS. The
-# default is to use sched_yield() or yield() if one is available,
-# otherwise, default to nothing. After that we define the appropriate
-# macro.
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of bool" >&5
+$as_echo_n "checking size of bool... " >&6; }
+if ${ac_cv_sizeof_bool+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (bool))" "ac_cv_sizeof_bool" "$ac_includes_default"; then :
-for ac_header in sched.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
-if test "x$ac_cv_header_sched_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SCHED_H 1
-_ACEOF
+else
+ if test "$ac_cv_type_bool" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (bool)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_bool=0
+ fi
+fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_bool" >&5
+$as_echo "$ac_cv_sizeof_bool" >&6; }
-done
-for ac_header in unistd.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_UNISTD_H 1
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_BOOL $ac_cv_sizeof_bool
_ACEOF
-fi
-done
-for ac_header in sys/select.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_select_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_SELECT_H 1
+ # Find a C type that matches the size of the C++ boolean type
+ case "$ac_cv_sizeof_bool" in
+ $ac_cv_sizeof__Bool)
+ bool_type=_Bool
+ ;;
+ $ac_cv_sizeof_unsigned_char)
+ bool_type="unsigned char"
+ ;;
+ $ac_cv_sizeof_unsigned_short)
+ bool_type="unsigned short"
+ ;;
+ $ac_cv_sizeof_unsigned_int)
+ bool_type="unsigned int"
+ ;;
+ $ac_cv_sizeof_unsigned_long)
+ bool_type="unsigned long"
+ ;;
+ $ac_cv_sizeof_unsigned_long_long)
+ bool_type="unsigned long long"
+ ;;
+ *)
+ as_fn_error $? "unable to determine matching C type for C++ bool" "$LINENO" 5
+ ;;
+ esac
+
+cat >>confdefs.h <<_ACEOF
+#define MPIR_CXX_BOOL_CTYPE $bool_type
_ACEOF
-fi
-done
-for ac_func in sched_yield yield usleep sleep select
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_cxx_check_header_mongrel "$LINENO" "complex" "ac_cv_header_complex" "$ac_includes_default"
+if test "x$ac_cv_header_complex" = xyes; then :
fi
-done
-if test "$ac_cv_func_usleep" = "yes" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep needs a declaration" >&5
-$as_echo_n "checking whether usleep needs a declaration... " >&6; }
-if ${pac_cv_func_decl_usleep+:} false; then :
+ if test "$ac_cv_header_complex" = "yes" ; then
+ # The C++ complex types are all templated. We finagle this by
+ # defining a standin name
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Complex" >&5
+$as_echo_n "checking size of Complex... " >&6; }
+if ${ac_cv_sizeof_Complex+:} false; then :
$as_echo_n "(cached) " >&6
else
+ if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (Complex))" "ac_cv_sizeof_Complex" "#include <stdio.h>
+#include <complex>
+using namespace std;
+#define Complex complex<float>
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <unistd.h>
-void (*fptr)(void) = (void(*)(void))usleep;
-int
-main ()
-{
+"; then :
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_usleep=no
else
- pac_cv_func_decl_usleep=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$ac_cv_type_Complex" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (Complex)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_Complex=0
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_usleep" >&5
-$as_echo "$pac_cv_func_decl_usleep" >&6; }
-if test "$pac_cv_func_decl_usleep" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_USLEEP_DECL 1
-_ACEOF
-
-
-fi
-
-fi
-
-# Check whether --enable-yield was given.
-if test "${enable_yield+set}" = set; then :
- enableval=$enable_yield; case $enableval in #(
- sched_yield) :
- if test "x$ac_cv_func_sched_yield" != "xyes"; then :
- enable_yield=unavail
-fi ;; #(
- yield) :
- if test "x$ac_cv_func_yield" != "xyes"; then :
- enable_yield=unavail
-fi ;; #(
- select) :
- if test "x$ac_cv_func_select" != "xyes"; then :
- enable_yield=unavail
-fi ;; #(
- usleep) :
- if test "x$ac_cv_func_usleep" != "xyes"; then :
- enable_yield=unavail
-fi ;; #(
- sleep) :
- if test "x$ac_cv_func_sleep" != "xyes"; then :
- enable_yield=unavail
-fi ;; #(
- nothing|no|none) :
- ;; #(
- *) :
- as_fn_error $? "Invalid option $enableval for --enable-yield" "$LINENO" 5 ;;
-esac
- if test "x$enable_yield" = "xunavail"; then :
- as_fn_error $? "Yield method $enableval is not available on this platform." "$LINENO" 5
fi
-
-else
- # none specified by user; make a guess based on os
- case $host in #(
- *-*-darwin*) :
- # In Lion, sched_yield worked but none of the other options had any effect
- if test "x$ac_cv_func_sched_yield" = "xyes"; then :
- enable_yield=sched_yield
-else
- enable_yield=nothing
-fi ;; #(
- *-*-linux*) :
- # sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
- enable_yield=nothing ;; #(
- *) :
- # default: just use sched_yield() or yield()
- if test "x$ac_cv_func_sched_yield" = "xyes"; then :
- enable_yield=sched_yield
-elif test "x$ac_cv_func_yield" = "xyes"; then :
- enable_yield=yield
-else
- enable_yield=nothing
-fi ;;
-esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_Complex" >&5
+$as_echo "$ac_cv_sizeof_Complex" >&6; }
-fi
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_COMPLEX $ac_cv_sizeof_Complex
+_ACEOF
-# set the appropriate macro
-case $enable_yield in #(
- sched_yield) :
-$as_echo "#define USE_SCHED_YIELD_FOR_YIELD 1" >>confdefs.h
- ;; #(
- yield) :
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of DoubleComplex" >&5
+$as_echo_n "checking size of DoubleComplex... " >&6; }
+if ${ac_cv_sizeof_DoubleComplex+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (DoubleComplex))" "ac_cv_sizeof_DoubleComplex" "#include <stdio.h>
+#include <complex>
+using namespace std;
+#define DoubleComplex complex<double>
-$as_echo "#define USE_YIELD_FOR_YIELD 1" >>confdefs.h
- ;; #(
- select) :
+"; then :
-$as_echo "#define USE_SELECT_FOR_YIELD 1" >>confdefs.h
- ;; #(
- usleep) :
+else
+ if test "$ac_cv_type_DoubleComplex" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (DoubleComplex)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_DoubleComplex=0
+ fi
+fi
-$as_echo "#define USE_USLEEP_FOR_YIELD 1" >>confdefs.h
- ;; #(
- sleep) :
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_DoubleComplex" >&5
+$as_echo "$ac_cv_sizeof_DoubleComplex" >&6; }
-$as_echo "#define USE_SLEEP_FOR_YIELD 1" >>confdefs.h
- ;; #(
- nothing|no|none) :
-$as_echo "#define USE_NOTHING_FOR_YIELD 1" >>confdefs.h
- ;; #(
- *) :
- as_fn_error $? "Invalid value $enable_yield for enable_yield." "$LINENO" 5
- ;;
-esac
-# Check for the Linux functions for controlling processor affinity.
-# LINUX: sched_setaffinity
-# AIX: bindprocessor
-# OSX (Leopard): thread_policy_set
-for ac_func in sched_setaffinity sched_getaffinity bindprocessor thread_policy_set
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_DOUBLECOMPLEX $ac_cv_sizeof_DoubleComplex
_ACEOF
-fi
-done
-if test "$ac_cv_func_sched_setaffinity" = "yes" ; then
- # Test for the cpu process set type
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cpu_set_t available" >&5
-$as_echo_n "checking whether cpu_set_t available... " >&6; }
-if ${pac_cv_have_cpu_set_t+:} false; then :
+ if test "$MPID_NO_LONG_DOUBLE" != yes ; then
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of LongDoubleComplex" >&5
+$as_echo_n "checking size of LongDoubleComplex... " >&6; }
+if ${ac_cv_sizeof_LongDoubleComplex+:} false; then :
$as_echo_n "(cached) " >&6
else
+ if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (LongDoubleComplex))" "ac_cv_sizeof_LongDoubleComplex" "#include <stdio.h>
+#include <complex>
+using namespace std;
+#define LongDoubleComplex complex<long double>
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+"; then :
-#include <sched.h>
-int
-main ()
-{
- cpu_set_t t;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_cpu_set_t=yes
else
- pac_cv_have_cpu_set_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$ac_cv_type_LongDoubleComplex" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (LongDoubleComplex)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_LongDoubleComplex=0
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cpu_set_t" >&5
-$as_echo "$pac_cv_have_cpu_set_t" >&6; }
- if test "$pac_cv_have_cpu_set_t" = yes ; then
-
-$as_echo "#define HAVE_CPU_SET_T 1" >>confdefs.h
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_LongDoubleComplex" >&5
+$as_echo "$ac_cv_sizeof_LongDoubleComplex" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the CPU_SET and CPU_ZERO macros are defined" >&5
-$as_echo_n "checking whether the CPU_SET and CPU_ZERO macros are defined... " >&6; }
-if ${pac_cv_cpu_set_defined+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sched.h>
-int
-main ()
-{
- cpu_set_t t; CPU_ZERO(&t); CPU_SET(1,&t);
- ;
- return 0;
-}
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONGDOUBLECOMPLEX $ac_cv_sizeof_LongDoubleComplex
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_cpu_set_defined=yes
-else
- pac_cv_cpu_set_defined=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cpu_set_defined" >&5
-$as_echo "$pac_cv_cpu_set_defined" >&6; }
- if test "$pac_cv_cpu_set_defined" = "yes" ; then
-$as_echo "#define HAVE_CPU_SET_MACROS 1" >>confdefs.h
fi
- # FIXME: Some versions of sched_setaffinity return ENOSYS (!),
- # so we should test for the unfriendly and useless behavior
- fi
-fi
-if test "$ac_cv_func_thread_policy_set" = yes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether thread affinity macros defined" >&5
-$as_echo_n "checking whether thread affinity macros defined... " >&6; }
-if ${pac_cv_have_thread_affinity_policy+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <mach/thread_policy.h>
-int
-main ()
-{
-#if !defined(THREAD_AFFINITY_POLICY) || !defined(THREAD_AFFINITY_TAG_NULL)
- :'thread macros not defined
+ # If either complex or double complex have length 0, then mark
+ # c++ complex as unavailable
+ if test "$ac_cv_sizeof_Complex" != 0 -a \
+ "$ac_cv_sizeof_DoubleComplex" != 0 ; then
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_thread_affinity_policy=yes
-else
- pac_cv_have_thread_affinity_policy=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_thread_affinity_policy" >&5
-$as_echo "$pac_cv_have_thread_affinity_policy" >&6; }
- if test "$pac_cv_have_thread_affinity_policy" = yes ; then
+$as_echo "#define HAVE_CXX_COMPLEX 1" >>confdefs.h
-$as_echo "#define HAVE_OSX_THREAD_AFFINITY 1" >>confdefs.h
+ fi
+ # Datatypes are given by
+ # 0x4c00 <length in bytes> (1 byte) <unique num> (1 byte)
+ # where the unique nums are
+ # 33,34,35,36
+ case "$ac_cv_sizeof_bool" in
+ 1) MPIR_CXX_BOOL=0x4c000133 ;;
+ 2) MPIR_CXX_BOOL=0x4c000233 ;;
+ 4) MPIR_CXX_BOOL=0x4c000433 ;;
+ 8) MPIR_CXX_BOOL=0x4c000833 ;;
+ *) ;;
+ esac
+ case "$ac_cv_sizeof_Complex" in
+ 8) MPIR_CXX_COMPLEX=0x4c000834 ;;
+ 16) MPIR_CXX_COMPLEX=0x4c001034 ;;
+ *) ;;
+ esac
+ case "$ac_cv_sizeof_DoubleComplex" in
+ 8) MPIR_CXX_DOUBLE_COMPLEX=0x4c000835 ;;
+ 16) MPIR_CXX_DOUBLE_COMPLEX=0x4c001035 ;;
+ 32) MPIR_CXX_DOUBLE_COMPLEX=0x4c002035 ;;
+ *) ;;
+ esac
+ # only enable CXX "long double" if we have a C "long double", since we
+ # currently perform reductions on CXX "long double" types via C.
+ if test "X$pac_cv_have_long_double" = "Xyes" ; then
+ case "$ac_cv_sizeof_LongDoubleComplex" in
+ 8) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c000836 ;;
+ 16) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c001036 ;;
+ 24) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c001836 ;;
+ 32) MPIR_CXX_LONG_DOUBLE_COMPLEX=0x4c002036 ;;
+ *) ;;
+ esac
+ fi
fi
-fi
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# -----------------------------------------------------------------------------
-# End of thread configure
-# -----------------------------------------------------------------------------
+ # Make these available to the collective operations and other code
-# Checkpointing
-# Check whether --enable-checkpointing was given.
-if test "${enable_checkpointing+set}" = set; then :
- enableval=$enable_checkpointing; if test "$enableval" != "no" ; then
+cat >>confdefs.h <<_ACEOF
+#define MPIR_CXX_BOOL_VALUE $MPIR_CXX_BOOL
+_ACEOF
-# Check whether --with-blcr was given.
-if test "${with_blcr+set}" = set; then :
- withval=$with_blcr; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-blcr=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-blcr=PATH expects a valid PATH" >&2;}
- with_blcr="" ;; #(
- *) :
- ;;
-esac
-else
- with_blcr=
-fi
+cat >>confdefs.h <<_ACEOF
+#define MPIR_CXX_COMPLEX_VALUE $MPIR_CXX_COMPLEX
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define MPIR_CXX_DOUBLE_COMPLEX_VALUE $MPIR_CXX_DOUBLE_COMPLEX
+_ACEOF
-# Check whether --with-blcr-include was given.
-if test "${with_blcr_include+set}" = set; then :
- withval=$with_blcr_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-blcr-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-blcr-include=PATH expects a valid PATH" >&2;}
- with_blcr_include="" ;; #(
- *) :
- ;;
-esac
-fi
+cat >>confdefs.h <<_ACEOF
+#define MPIR_CXX_LONG_DOUBLE_COMPLEX_VALUE $MPIR_CXX_LONG_DOUBLE_COMPLEX
+_ACEOF
-# Check whether --with-blcr-lib was given.
-if test "${with_blcr_lib+set}" = set; then :
- withval=$with_blcr_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-blcr-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-blcr-lib=PATH expects a valid PATH" >&2;}
- with_blcr_lib="" ;; #(
- *) :
- ;;
-esac
+ # compute F77 decimal constant values for these types
+ MPI_F77_CXX_BOOL=`printf "%d" $MPIR_CXX_BOOL`
+ MPI_F77_CXX_FLOAT_COMPLEX=`printf "%d" $MPIR_CXX_COMPLEX`
+ MPI_F77_CXX_DOUBLE_COMPLEX=`printf "%d" $MPIR_CXX_DOUBLE_COMPLEX`
+ MPI_F77_CXX_LONG_DOUBLE_COMPLEX=`printf "%d" $MPIR_CXX_LONG_DOUBLE_COMPLEX`
fi
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
-
- if test -n "${with_blcr_include}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_blcr_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_blcr_include}', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_blcr_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_blcr_include}"
-fi
-else
- if test -n "${with_blcr}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_blcr}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_blcr}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_blcr}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_blcr}/include"
-fi
+# ------------------------------------------------------------------------
+# Test if type_tag_for_datatype is agnostic to modifiers such as const, volatile, and restrict
+# if not, the type tags are disabled to avoid compiler warings. A new type_tag for const etc. does
+# does not help, since only the latest type_tag definition is used. Type tags are defined in mpi.h,
+# therefore, they must be also be activated/deavtivated there
-fi
-fi
+ if test -z "${pac_save_CFLAGS_nesting}" ; then
+ pac_save_CFLAGS_nesting=0
+ fi
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}='"$CFLAGS"'
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} + 1`
- if test -n "${with_blcr_lib}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_blcr_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_blcr_lib}', not appending" >&5
+ if echo "$CFLAGS" | $FGREP -e "\<-Werror\>" >/dev/null 2>&1; then :
+ echo "CFLAGS(='$CFLAGS') contains '-Werror', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_blcr_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_blcr_lib}"
+ echo "CFLAGS(='$CFLAGS') does not contain '-Werror', appending" >&5
+ CFLAGS="$CFLAGS -Werror"
fi
-else
- if test -n "${with_blcr}"; then :
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef int TEST_Datatype;
+#define TEST_INT ((TEST_Datatype)0x44)
+static const TEST_Datatype test_int __attribute__((type_tag_for_datatype(TEST,int))) = TEST_INT;
+void test(const void* buffer, TEST_Datatype datatype)__attribute__((pointer_with_type_tag(TEST,1,2)));
+int
+main ()
+{
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_blcr}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_blcr}/lib', not appending" >&5
+const int buf[10];
+test(buf, TEST_INT);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_attr_support=yes
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_blcr}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_blcr}/lib"
-
+ ac_attr_support=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test "$ac_attr_support" = yes
+then
+ DISABLE_TAG_SUPPORT="#undef NO_TAGS_WITH_MODIFIERS"
+else
+ DISABLE_TAG_SUPPORT="#define NO_TAGS_WITH_MODIFIERS 1"
fi
- if test -d "${with_blcr}/lib64}"; then :
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} - 1`
+ eval CFLAGS="\$pac_save_CFLAGS_${pac_save_CFLAGS_nesting}"
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}=""
+
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_blcr}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_blcr}/lib64', not appending" >&5
+# ----------------------------------------------------------------------------
+# Check for the alignment rules moves with types int64_t etc. These
+# are used in the datatype code to perform pack and unpack operations.
+# These only determine if different alignments *work*, not whether they
+# work efficiently. The datatype pack code (should) allow the developer
+# to include stricter alignment rules than are needed for correctness to
+# get better performance.
+if test "$ac_cv_c_int64_t" != "no" -o -n "$INT64_T" ; then
+ default_int64_t_alignment=${CROSS_INT64_T_ALIGNMENT:-"unknown"}
+ if test -z "$INT64_T" ; then
+ if test "$ac_cv_c_int64_t" = yes ; then
+ INT64_T="int64_t"
+ else
+ INT64_T="$ac_cv_int64_t"
+ fi
+ fi
+ # We use the type that we're going use for int64.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alignment restrictions on $INT64_T" >&5
+$as_echo_n "checking for alignment restrictions on $INT64_T... " >&6; }
+if ${pac_cv_int64_t_alignment+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_blcr}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_blcr}/lib64"
-fi
+ if test "$cross_compiling" = yes; then :
+ pac_cv_int64_t_alignment=$default_int64_t_alignment
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-fi
+#include <sys/types.h>
+#include <stdlib.h>
+int main(int argc, char **argv )
+{
+ $INT64_T *p1, v;
+ char *buf_p = (char *)malloc( 64 ), *bp;
+ bp = buf_p;
+ /* Make bp aligned on 4, not 8 bytes */
+ if (!( (long)bp & 0x7 ) ) bp += 4;
+ p1 = ($INT64_T *)bp;
+ v = -1;
+ *p1 = v;
+ if (!( (long)bp & 0x3 ) ) bp += 2;
+ p1 = ($INT64_T *)bp;
+ *p1 = 1;
+ if (!( (long)bp & 0x1 ) ) bp += 1;
+ p1 = ($INT64_T *)bp;
+ *p1 = 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_int64_t_alignment=no
+else
+ pac_cv_int64_t_alignment=yes
fi
-
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-
-
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_int64_t_alignment" >&5
+$as_echo "$pac_cv_int64_t_alignment" >&6; }
+ if test "$pac_cv_int64_t_alignment" = "no" ; then
- failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "libcr.h" "ac_cv_header_libcr_h" "$ac_includes_default"
-if test "x$ac_cv_header_libcr_h" = xyes; then :
+$as_echo "#define HAVE_ANY_INT64_T_ALIGNMENT 1" >>confdefs.h
-else
- failure=yes
+ fi
fi
+if test "$ac_cv_int32_t" != "no" ; then
+ default_int32_t_alignment=${CROSS_INT32_T_ALIGNMENT:-"unknown"}
+ if test -z "$INT32_T" ; then
+ if test "$ac_cv_c_int32_t" = yes ; then
+ INT32_T="int32_t"
+ else
+ INT32_T="$ac_cv_int32_t"
+ fi
+ fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cr_init in -lcr" >&5
-$as_echo_n "checking for cr_init in -lcr... " >&6; }
-if ${ac_cv_lib_cr_cr_init+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alignment restrictions on int32_t" >&5
+$as_echo_n "checking for alignment restrictions on int32_t... " >&6; }
+if ${pac_cv_int32_t_alignment+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcr $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+ if test "$cross_compiling" = yes; then :
+ pac_cv_int32_t_alignment=$default_int32_t_alignment
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char cr_init ();
-int
-main ()
+#include <sys/types.h>
+#include <stdlib.h>
+int main(int argc, char **argv )
{
-return cr_init ();
- ;
- return 0;
+ $INT32_T *p1, v;
+ char *buf_p = (char *)malloc( 64 ), *bp;
+ bp = buf_p;
+ /* Make bp aligned on 4, not 8 bytes */
+ if (!( (long)bp & 0x7 ) ) bp += 4;
+ p1 = ($INT32_T *)bp;
+ v = -1;
+ *p1 = v;
+ if (!( (long)bp & 0x3 ) ) bp += 2;
+ p1 = ($INT32_T *)bp;
+ *p1 = 1;
+ if (!( (long)bp & 0x1 ) ) bp += 1;
+ p1 = ($INT32_T *)bp;
+ *p1 = 1;
+ return 0;
}
+
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_cr_cr_init=yes
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_int32_t_alignment=no
else
- ac_cv_lib_cr_cr_init=no
+ pac_cv_int32_t_alignment=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cr_cr_init" >&5
-$as_echo "$ac_cv_lib_cr_cr_init" >&6; }
-if test "x$ac_cv_lib_cr_cr_init" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBCR 1
-_ACEOF
- LIBS="-lcr $LIBS"
-else
- failure=yes
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_int32_t_alignment" >&5
+$as_echo "$pac_cv_int32_t_alignment" >&6; }
+ if test "$pac_cv_int32_t_alignment" = "no" ; then
+
+$as_echo "#define HAVE_ANY_INT32_T_ALIGNMENT 1" >>confdefs.h
- if test "$failure" = "no" ; then
- success=yes
- else
- success=no
fi
+fi
- if test "$success" = "no" ; then
- as_fn_error $? "'libcr.h or libcr library not found. Did you specify --with-blcr= or --with-blcr-include= or --with-blcr-lib=?'" "$LINENO" 5
- fi
+# -----------------------------------------------------------------------------
+# Check for support of enable-coverage. Put this near the end of the tests
+# because the coverage options may affect the other tests.
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lcr\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lcr', not appending" >&5
+for ac_prog in gcov
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GCOV+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lcr', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lcr"
+ if test -n "$GCOV"; then
+ ac_cv_prog_GCOV="$GCOV" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_GCOV="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
fi
-
-
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-
-
-$as_echo "#define ENABLE_CHECKPOINTING 1" >>confdefs.h
-
- fi
+fi
+GCOV=$ac_cv_prog_GCOV
+if test -n "$GCOV"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5
+$as_echo "$GCOV" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-# Update the cache first with the results of the previous configure steps
-# We don't use the subdir cache because ensuring that the cache is consistant
-# with the way in which configure wishes to use it is very difficult and
-# too prone to error.
-# -----------------------------------------------------------------------------
-# experiment with creating a cache file
-#if test "$CONF_USE_CACHEFILE" = yes ; then
-# basecachefile=`pwd`/cache.base
-# set | grep ac_cv > $basecachefile
-# # Tell other configures to load this file
-# echo "Creating and exporting the base cache file $basecachefile"
-# CONF_BASE_CACHEFILE=$basecachefile
-# export CONF_BASE_CACHEFILE
-#fi
+ test -n "$GCOV" && break
+done
-# Check whether --enable-base-cache was given.
-if test "${enable_base_cache+set}" = set; then :
- enableval=$enable_base_cache;
+
+# Check whether --enable-coverage was given.
+if test "${enable_coverage+set}" = set; then :
+ enableval=$enable_coverage;
else
- enable_base_cache=default
+ enable_coverage=no
fi
-# The default case is controlled by the environment variable CONF_USE_CACHEFILE
-if test "$enable_base_cache" = "default" ; then
- if test "$CONF_USE_CACHEFILE" = yes ; then
- enable_base_cache=yes
+
+if test "$enable_coverage" = "yes" ; then
+ if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_CFLAGS+set} = set ; then
+ WRAPPER_CFLAGS="$WRAPPER_CFLAGS -fprofile-arcs -ftest-coverage"
+ fi
else
- enable_base_cache=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
fi
-fi
-if test "$enable_base_cache" != no ; then
- if test "$enable_base_cache" = yes ; then
- basecachefile=`pwd`/cache.base
- else
- basecachefile=`pwd`/$enable_base_cache
+ if test "$enable_cxx" = "yes" ; then
+ if test "$ac_cv_cxx_compiler_gnu" = "yes" ; then
+ CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_CXXFLAGS+set} = set ; then
+ WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
+ fi
fi
- set | grep ac_cv > $basecachefile
- # Tell other configures to load this file
- echo "Creating and exporting the base cache file $basecachefile"
- CONF_BASE_CACHEFILE=$basecachefile
- export CONF_BASE_CACHEFILE
+ # Add similar options for g77 so that the Fortran tests will also
+ #
+ if test "$enable_f77" = yes ; then
+ if test "$ac_cv_f77_compiler_gnu" = "yes" ; then
+ FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_FFLAGS+set} = set ; then
+ WRAPPER_FFLAGS="$WRAPPER_FFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&2;}
+ fi
+ fi
+ if test "$enable_fc" = yes ; then
+ if test "$ac_cv_fc_compiler_gnu" = "yes" ; then
+ FCFLAGS="$FCFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_FCFLAGS+set} = set ; then
+ WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GFORTRAN" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GFORTRAN" >&2;}
+ fi
+ fi
+ # On some platforms (e.g., Mac Darwin), we must also *link*
+ # with the -fprofile-args -ftest-coverage option.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compilation with coverage analysis enabled works" >&5
+$as_echo_n "checking whether compilation with coverage analysis enabled works... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(int argc, char **argv){return 1;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Unable to link programs when coverage analysis enabled" "$LINENO" 5
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
-# -----------------------------------------------------------------------------
-
-#
-# Configure the device second. This way, any libraries or variables that
-# it needs can be extracted before building the other subsystems (this is
-# particularly important for the bindings, which may need to know the
-# libraries in order to create the compilation scripts)
+ # Test for the routines that we need to use to ensure that the
+ # data files are (usually) written out
+ # FIXME: Some versions of Linux provide usleep, but it rounds times
+ # up to the next second (!)
+ for ac_func in usleep
+do :
+ ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
+if test "x$ac_cv_func_usleep" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_USLEEP 1
+_ACEOF
-user_specified_atomic_primitives=no
-if test "$DEBUG_SUBDIR_CACHE" = yes ; then
- set -x
fi
+done
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_hcoll
-
-# nothing to do
-
-## end expansion of PAC_SUBCFG_BODY_src_mpid_common_hcoll
-
-## begin expansion of PAC_SUBCFG_BODY_src_binding_fortran_use_mpi
-
-
-if test -z "$BUILD_FC_BINDING_TRUE"; then :
+ # NOTE: using a "pac_cv_" prefix but not caching because of xFLAGS "side effects"
+ pac_cv_use_coverage=yes
-# FIXME XXX DJG this code came from a sub-configure in src/binding/fortran/use_mpi. Why
-# isn't this just all up in the top-level configure? Alternatively, why doesn't
-# most/all of the f90 configure code from the top level configure.ac live here
-# instead? Is it because of the c/f77/f90 interplay?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR F90 CODE" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR F90 CODE" >&6;}
+$as_echo "#define USE_COVERAGE 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+fi
+ if test "X$pac_cv_use_coverage" = "Xyes"; then
+ BUILD_COVERAGE_TRUE=
+ BUILD_COVERAGE_FALSE='#'
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
+ BUILD_COVERAGE_TRUE='#'
+ BUILD_COVERAGE_FALSE=
fi
-# Determine the extension for Fortran 90 files (it isn't always .f90)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extension for Fortran 90 programs" >&5
-$as_echo_n "checking for extension for Fortran 90 programs... " >&6; }
-ac_fc_srcext="f90"
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+# -----------------------------------------------------------------------------
+# Look for Standard headers
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
-cat > conftest.$ac_ext <<_ACEOF
+int
+main ()
+{
- program main
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- end
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: f90" >&5
-$as_echo "f90" >&6; }
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
- ac_fc_srcext="f"
- cat > conftest.$ac_ext <<_ACEOF
-
- program main
+fi
- end
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: f" >&5
-$as_echo "f" >&6; }
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown!" >&5
-$as_echo "unknown!" >&6; }
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+else
+ ac_cv_header_stdc=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
-FCEXT=$ac_fc_srcext
-
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-# Determine the precision and range of the standard Fortran types. This
-# isn't quite enough for a full implementation of the Type_create_f90_xxx
-# routines, but will handle most programs. We can extend this by trying to
-# find (through selected_real_kind and selected_int_kind) types with larger or
-# smaller precisions and/or ranges than the basic types.
+fi
-pac_msg="the precision and range of reals"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pac_msg" >&5
-$as_echo_n "checking for $pac_msg... " >&6; }
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+# Check for a specific header
+# Grrr. OS/X fails the test for sys/uio.h because uio *requires* sys/types.h
+# to compile. Thus, we'll make that a separate test
+# stddef.h is sometimes needed for types like wchar_t
+for ac_header in stdlib.h stdarg.h sys/types.h string.h inttypes.h limits.h stddef.h errno.h sys/socket.h sys/time.h unistd.h endian.h assert.h sys/param.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
-rm -f pac_fconftest.out
-if test "$cross_compiling" = yes; then :
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_REAL_MODEL" >&5
-$as_echo "$CROSS_F90_REAL_MODEL" >&6; }
- FC_REAL_MODEL=$CROSS_F90_REAL_MODEL
+done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/uio.h" >&5
+$as_echo_n "checking for sys/uio.h... " >&6; }
+if ${ac_cv_header_sys_uio_h+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- cat > conftest.$ac_ext <<_ACEOF
-
- program main
- real aa
- open(8, file="pac_fconftest.out", form="formatted")
- write(8,*) precision(aa), ",", range(aa)
- close(8)
- end
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/uio.h>
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
_ACEOF
-if ac_fn_fc_try_run "$LINENO"; then :
-
- if test -s pac_fconftest.out ; then
- pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_fc_num_model" >&5
-$as_echo "$pac_fc_num_model" >&6; }
- FC_REAL_MODEL=$pac_fc_num_model
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
-$as_echo "$as_me: WARNING: No output from test program!" >&2;}
- fi
- rm -f pac_fconftest.out
-
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_sys_uio_h=yes
else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine $pac_msg" >&5
-$as_echo "$as_me: WARNING: Failed to run program to determine $pac_msg" >&2;}
-
+ ac_cv_header_sys_uio_h=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_uio_h" >&5
+$as_echo "$ac_cv_header_sys_uio_h" >&6; }
+if test "$ac_cv_header_sys_uio_h" = yes ; then
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
+$as_echo "#define HAVE_SYS_UIO_H 1" >>confdefs.h
-#
+fi
-pac_msg="the precision and range of double precision"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pac_msg" >&5
-$as_echo_n "checking for $pac_msg... " >&6; }
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+# Check for special types
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
-rm -f pac_fconftest.out
-if test "$cross_compiling" = yes; then :
+else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_DOUBLE_MODEL" >&5
-$as_echo "$CROSS_F90_DOUBLE_MODEL" >&6; }
- FC_DOUBLE_MODEL=$CROSS_F90_DOUBLE_MODEL
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
-else
- cat > conftest.$ac_ext <<_ACEOF
+fi
- program main
- double precision aa
- open(8, file="pac_fconftest.out", form="formatted")
- write(8,*) precision(aa), ",", range(aa)
- close(8)
- end
+# These are used to support timeouts
+for ac_func in setitimer alarm
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+fi
+done
+# These are used for error reporting
+for ac_func in vsnprintf vsprintf
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
-if ac_fn_fc_try_run "$LINENO"; then :
- if test -s pac_fconftest.out ; then
- pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_fc_num_model" >&5
-$as_echo "$pac_fc_num_model" >&6; }
- FC_DOUBLE_MODEL=$pac_fc_num_model
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
-$as_echo "$as_me: WARNING: No output from test program!" >&2;}
- fi
- rm -f pac_fconftest.out
+fi
+done
+
+if test "$ac_cv_func_vsnprintf" = "yes" ; then
+ # vsnprintf may be declared in stdio.h and may need stdarg.h
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf needs a declaration" >&5
+$as_echo_n "checking whether vsnprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_vsnprintf+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine $pac_msg" >&5
-$as_echo "$as_me: WARNING: Failed to run program to determine $pac_msg" >&2;}
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+#include <stdarg.h>
+void (*fptr)(void) = (void(*)(void))vsnprintf;
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_vsnprintf=no
+else
+ pac_cv_func_decl_vsnprintf=yes
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_vsnprintf" >&5
+$as_echo "$pac_cv_func_decl_vsnprintf" >&6; }
+if test "$pac_cv_func_decl_vsnprintf" = "yes" ; then
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_VSNPRINTF_DECL 1
+_ACEOF
-#
-pac_msg="the range of integer"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pac_msg" >&5
-$as_echo_n "checking for $pac_msg... " >&6; }
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+fi
-rm -f pac_fconftest.out
-if test "$cross_compiling" = yes; then :
+fi
+# We would like to use strerror in the file namepublisher; it is also used
+# in MPIR_Strerror (whose implementation is broken if strerror is not found)
+for ac_func in strerror strncasecmp
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_INTEGER_MODEL" >&5
-$as_echo "$CROSS_F90_INTEGER_MODEL" >&6; }
- FC_INTEGER_MODEL=$CROSS_F90_INTEGER_MODEL
+fi
+done
+ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strerror_r" = xyes; then :
+ ac_have_decl=1
else
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- integer aa
- open(8, file="pac_fconftest.out", form="formatted")
- write(8,*) range(aa)
- close(8)
- end
+ ac_have_decl=0
+fi
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R $ac_have_decl
+_ACEOF
+for ac_func in strerror_r
+do :
+ ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
+if test "x$ac_cv_func_strerror_r" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRERROR_R 1
_ACEOF
-if ac_fn_fc_try_run "$LINENO"; then :
- if test -s pac_fconftest.out ; then
- pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_fc_num_model" >&5
-$as_echo "$pac_fc_num_model" >&6; }
- FC_INTEGER_MODEL=$pac_fc_num_model
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
-$as_echo "$as_me: WARNING: No output from test program!" >&2;}
- fi
- rm -f pac_fconftest.out
+fi
+done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
+$as_echo_n "checking whether strerror_r returns char *... " >&6; }
+if ${ac_cv_func_strerror_r_char_p+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine $pac_msg" >&5
-$as_echo "$as_me: WARNING: Failed to run program to determine $pac_msg" >&2;}
+ ac_cv_func_strerror_r_char_p=no
+ if test $ac_cv_have_decl_strerror_r = yes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ char *p = strerror_r (0, buf, sizeof buf);
+ return !p || x;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_func_strerror_r_char_p=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+ # strerror_r is not declared. Choose between
+ # systems that have relatively inaccessible declarations for the
+ # function. BeOS and DEC UNIX 4.0 fall in this category, but the
+ # former has a strerror_r that returns char*, while the latter
+ # has a strerror_r that returns `int'.
+ # This test should segfault on the DEC system.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+ extern char *strerror_r ();
+int
+main ()
+{
+char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ return ! isalpha (x);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_func_strerror_r_char_p=yes
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
+ fi
-# Try to find the available integer kinds by using selected_int_kind
-# This produces a table of range,kind
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
+$as_echo "$ac_cv_func_strerror_r_char_p" >&6; }
+if test $ac_cv_func_strerror_r_char_p = yes; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for available integer kinds" >&5
-$as_echo_n "checking for available integer kinds... " >&6; }
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h
-rm -f pac_fconftest.out
-if test "$cross_compiling" = yes; then :
+fi
- pac_validKinds="`echo \"$CROSS_F90_ALL_INTEGER_MODELS\" | tr ',' ':'`"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_ALL_INTEGER_MODELS" >&5
-$as_echo "$CROSS_F90_ALL_INTEGER_MODELS" >&6; }
- FC_ALL_INTEGER_MODELS=$CROSS_F90_ALL_INTEGER_MODELS
+if test "$ac_cv_func_strerror_r" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r needs a declaration" >&5
+$as_echo_n "checking whether strerror_r needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strerror_r+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- cat > conftest.$ac_ext <<_ACEOF
-
-
- program main
- integer r, lastkind
- lastkind=selected_int_kind(1)
- open(8, file="pac_fconftest.out", form="formatted")
- do r=2,30
- k = selected_int_kind(r)
- if (k .ne. lastkind) then
- write(8,*) r-1, ",", lastkind
- lastkind = k
- endif
- if (k .le. 0) then
- exit
- endif
- enddo
- if (k.ne.lastkind) then
- write(8,*) 31, ",", k
- endif
- close(8)
- end
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strerror_r;
+int
+main ()
+{
+ ;
+ return 0;
+}
_ACEOF
-if ac_fn_fc_try_run "$LINENO"; then :
-
- if test -s pac_fconftest.out ; then
- pac_flag="`sed -e 's/ */ /g' pac_fconftest.out | tr '\012' ','`"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_flag" >&5
-$as_echo "$pac_flag" >&6; }
- pac_validKinds="`sed -e 's/ */ /g' pac_fconftest.out | tr '\012' ':'`"
- FC_ALL_INTEGER_MODELS=$pac_flag
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
-$as_echo "$as_me: WARNING: No output from test program!" >&2;}
- fi
- rm -f pac_fconftest.out
-
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strerror_r=no
else
+ pac_cv_func_decl_strerror_r=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strerror_r" >&5
+$as_echo "$pac_cv_func_decl_strerror_r" >&6; }
+if test "$pac_cv_func_decl_strerror_r" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRERROR_R_DECL 1
+_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
-$as_echo "Error" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine available integer models" >&5
-$as_echo "$as_me: WARNING: Failed to run program to determine available integer models" >&2;}
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
+# Use snprintf if possible when creating messages
+for ac_func in snprintf
+do :
+ ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
-#
+fi
+done
+if test "$ac_cv_func_snprintf" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for available integer ranges" >&5
-$as_echo_n "checking for available integer ranges... " >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
+$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_snprintf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-
-#ifdef F77_NAME_UPPER
-#define cisize_ CISIZE
-#define isize_ ISIZE
-#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
-#define cisize_ cisize
-#define isize_ isize
-#endif
-int cisize_(char *,char*);
-int cisize_(char *i1p, char *i2p)
+#include <stdio.h>
+void (*fptr)(void) = (void(*)(void))snprintf;
+int
+main ()
{
- int isize_val=0;
- isize_val = (int)(i2p - i1p);
- return isize_val;
-}
-
+ ;
+ return 0;
+}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
-
-
-{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
- (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
- ac_status=$?
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- test $ac_status = 0; }
- pac_ccompile_ok=yes
-
+ pac_cv_func_decl_snprintf=no
else
-
- pac_ccompile_ok=no
-
+ pac_cv_func_decl_snprintf=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-if test "$pac_ccompile_ok" = "yes" ; then
- saved_LIBS="$LIBS"
- LIBS="pac_conftest.$OBJEXT $LIBS"
- saved_IFS=$IFS
- IFS=:
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
+$as_echo "$pac_cv_func_decl_snprintf" >&6; }
+if test "$pac_cv_func_decl_snprintf" = "yes" ; then
- pac_flag=""
- for rangekind in $pac_validKinds ; do
- kind="`echo $rangekind | sed -e 's/.*,//'`"
- range="`echo $rangekind | sed -e 's/,.*//'`"
- cat > conftest.$ac_ext <<_ACEOF
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_SNPRINTF_DECL 1
+_ACEOF
- program main
- integer (kind=$kind) a(2)
- integer cisize
- open(8, file="pac_fconftest.out", form="formatted")
- write(8,*) $range, ",", $kind, ",", cisize( a(1), a(2) )
- close(8)
- end
+fi
+fi
+# qsort will be used in MPI_Comm_split, if available
+for ac_func in qsort
+do :
+ ac_fn_c_check_func "$LINENO" "qsort" "ac_cv_func_qsort"
+if test "x$ac_cv_func_qsort" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_QSORT 1
_ACEOF
- IFS=$saved_IFS
- rm -f pac_fconftest.out
- if test "$cross_compiling" = yes; then :
-
- pac_flag="$CROSS_F90_INTEGER_MODEL_MAP"
-else
- if ac_fn_fc_try_run "$LINENO"; then :
+fi
+done
- if test -s pac_fconftest.out ; then
- sizes="`sed -e 's/ */ /g' pac_fconftest.out`"
- pac_flag="$pac_flag { $sizes },"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
-$as_echo "$as_me: WARNING: No output from test program!" >&2;}
- fi
- rm -f pac_fconftest.out
+# if we are using stdarg, we may need va_copy . Test to see if we have it
+# Since it may be a built-in instead of a function, we must try to
+# compile and link a program that uses it.
+# va_copy is currently used only in src/util/dbg_printf.c, in an obsolete
+# debugging routine. We may want to withdraw this (saving the
+# test in confdb/aclocal_cc.m4).
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
+$as_echo_n "checking for va_copy... " >&6; }
+if ${pac_cv_func_va_copy+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran program fails to build or run!" >&5
-$as_echo "$as_me: WARNING: Fortran program fails to build or run!" >&2;}
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdarg.h>
+void foo1( char *fmt, ... ) {
+ va_list ap, list;
+ va_start(ap,fmt);
+ va_copy(list,ap);
+ va_end(list);
+ va_end(ap);
+}
+int
+main ()
+{
+foo1("a test %d", 3);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_func_va_copy=yes
+else
+ pac_cv_func_va_copy=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_va_copy" >&5
+$as_echo "$pac_cv_func_va_copy" >&6; }
- IFS=:
- done
- IFS=$saved_IFS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_flag" >&5
-$as_echo "$pac_flag" >&6; }
- FC_INTEGER_MODEL_MAP=$pac_flag
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test "$pac_cv_func_va_copy" = "yes" ; then
- LIBS="$saved_LIBS"
- rm -f pac_conftest.$OBJEXT
-fi
+$as_echo "#define HAVE_VA_COPY 1" >>confdefs.h
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __va_copy" >&5
+$as_echo_n "checking for __va_copy... " >&6; }
+if ${pac_cv_func___va_copy+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-ac_config_files="$ac_config_files src/binding/fortran/use_mpi/mpif90model.h"
+#include <stdarg.h>
+void foo1( char *fmt, ... ) {
+ va_list ap, list;
+ va_start(ap,fmt);
+ __va_copy(list,ap);
+ va_end(list);
+ va_end(ap);
+}
+int
+main ()
+{
+foo1("a test %d", 3);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_func___va_copy=yes
+else
+ pac_cv_func___va_copy=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func___va_copy" >&5
+$as_echo "$pac_cv_func___va_copy" >&6; }
+ if test "$pac_cv_func___va_copy" = "yes" ; then
+$as_echo "#define HAVE___VA_COPY 1" >>confdefs.h
+ fi
fi
-## end expansion of PAC_SUBCFG_BODY_src_binding_fortran_use_mpi
-## begin expansion of PAC_SUBCFG_BODY_src_pm
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable argument list macro functionality" >&5
+$as_echo_n "checking for variable argument list macro functionality... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-for pm_name in $pm_names ; do
- case $pm_name in #(
- hydra) :
- build_pm_hydra=yes ;; #(
- *) :
- ;;
-esac
-done
+ #include <stdio.h>
+ #define conftest_va_arg_macro(...) printf(__VA_ARGS__)
-# we handle these conditionals here in the BODY because they depend on logic in
-# the main portion of the top-level configure
- if test "x$build_pm_hydra" = "xyes"; then
- BUILD_PM_HYDRA_TRUE=
- BUILD_PM_HYDRA_FALSE='#'
+int
+main ()
+{
+conftest_va_arg_macro("a test %d", 3);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+$as_echo "#define HAVE_MACRO_VA_ARGS 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- BUILD_PM_HYDRA_TRUE='#'
- BUILD_PM_HYDRA_FALSE=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
-# do nothing extra here for now
-
+# Check for alloca function. May set HAVE_ALLOCA_H and HAVE_ALLOCA
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_working_alloca_h=yes
+else
+ ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
-## end expansion of PAC_SUBCFG_BODY_src_pm
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
-## begin expansion of PAC_SUBCFG_BODY_src_pm_gforker
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+# endif
+# endif
+# endif
+# endif
+#endif
-# the pm_names variable is set by the top level configure
-build_gforker=no
-for pm_name in $pm_names ; do
- if test "X$pm_name" = "Xgforker" ; then
- build_gforker=yes
- fi
-done
- if test "X$build_gforker" = "Xyes"; then
- BUILD_PM_GFORKER_TRUE=
- BUILD_PM_GFORKER_FALSE='#'
+int
+main ()
+{
+char *p = (char *) alloca (1);
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_func_alloca_works=yes
else
- BUILD_PM_GFORKER_TRUE='#'
- BUILD_PM_GFORKER_FALSE=
+ ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+if test $ac_cv_func_alloca_works = yes; then
-# first_pm_name is set by the top level configure
- if test "X$first_pm_name" = "Xgforker"; then
- PRIMARY_PM_GFORKER_TRUE=
- PRIMARY_PM_GFORKER_FALSE='#'
-else
- PRIMARY_PM_GFORKER_TRUE='#'
- PRIMARY_PM_GFORKER_FALSE=
-fi
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+else
+ # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble. Some versions do not even contain alloca or
+# contain a buggy version. If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
-if test -z "$BUILD_PM_GFORKER_TRUE"; then :
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR src/pm/gforker" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR src/pm/gforker" >&6;}
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
-# Check that we are using the simple PMI implementation
-# (Selecting multiple PMs may require incompatible PMI implementations
-# (e.g., gforker and SMPD).
-if test -z "$PM_REQUIRES_PMI" ; then
- PM_REQUIRES_PMI=simple
-elif test "$PM_REQUIRES_PMI" != "simple" ; then
- echo "gforker requires the simple PMI implementation; $PM_REQUIRES_PMI has already been selected"
- exit 1
-fi
-# tell src/pm/util to configure itself
-build_pm_util=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
-# Check whether --enable-allowport was given.
-if test "${enable_allowport+set}" = set; then :
- enableval=$enable_allowport;
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "webecray" >/dev/null 2>&1; then :
+ ac_cv_os_cray=yes
else
- enable_allowport=yes
+ ac_cv_os_cray=no
fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+ for ac_func in _getb67 GETB67 getb67; do
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+ break
+fi
+ done
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socketpair" >&5
-$as_echo_n "checking for library containing socketpair... " >&6; }
-if ${ac_cv_search_socketpair+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ if test "$cross_compiling" = yes; then :
+ ac_cv_c_stack_direction=0
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+ int dir, dummy = 0;
+ if (! addr)
+ addr = &dummy;
+ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+ return dir + dummy;
+}
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socketpair ();
int
-main ()
+main (int argc, char **argv)
{
-return socketpair ();
- ;
- return 0;
+ return find_stack_direction (0, argc + !argv + 20) < 0;
}
_ACEOF
-for ac_lib in '' socket; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_socketpair=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_socketpair+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_socketpair+:} false; then :
-
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_c_stack_direction=1
else
- ac_cv_search_socketpair=no
+ ac_cv_c_stack_direction=-1
fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socketpair" >&5
-$as_echo "$ac_cv_search_socketpair" >&6; }
-ac_res=$ac_cv_search_socketpair
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
-
-for ac_header in sys/types.h signal.h sys/ptrace.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
_ACEOF
+
+fi
+
+# We don't use alloca unless USE_ALLOCA is also set.
+# Check whether --enable-alloca was given.
+if test "${enable_alloca+set}" = set; then :
+ enableval=$enable_alloca;
+else
+ enable_alloca=no
fi
-done
+if test "$enable_alloca" = yes ; then
-for ac_func in strsignal
-do :
- ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal"
-if test "x$ac_cv_func_strsignal" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRSIGNAL 1
-_ACEOF
+$as_echo "#define USE_ALLOCA 1" >>confdefs.h
fi
-done
-for ac_func in sigaction signal sigset
+if test "$enable_g_mem" != "yes" ; then
+ # Strdup is needed only if memory tracing is not enabled.
+ for ac_func in strdup
do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_STRDUP 1
_ACEOF
fi
done
-sigaction_ok=no
-if test "$ac_cv_func_sigaction" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction" >&5
-$as_echo_n "checking for struct sigaction... " >&6; }
-if ${pac_cv_struct_sigaction+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <signal.h>
-int
-main ()
-{
+ if test "$ac_cv_func_strdup" = "yes" ; then
+ # Do we need to declare strdup?
-struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_sigaction="yes"
-else
- pac_cv_struct_sigaction="no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction" >&5
-$as_echo "$pac_cv_struct_sigaction" >&6; }
- if test "$pac_cv_struct_sigaction" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction with _POSIX_SOURCE" >&5
-$as_echo_n "checking for struct sigaction with _POSIX_SOURCE... " >&6; }
-if ${pac_cv_struct_sigaction_needs_posix+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
+$as_echo_n "checking whether strdup needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strdup+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#define _POSIX_SOURCE
-#include <signal.h>
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strdup;
int
main ()
{
-struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_sigaction_needs_posix="yes"
+ pac_cv_func_decl_strdup=no
else
- pac_cv_struct_sigaction_needs_posix="no"
+ pac_cv_func_decl_strdup=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_needs_posix" >&5
-$as_echo "$pac_cv_struct_sigaction_needs_posix" >&6; }
- if test "$pac_cv_struct_sigaction_needs_posix" = "yes" ; then
- sigaction_ok=yes
- fi
- else
- sigaction_ok=yes
- fi
-fi
-# Decide on the signal handler to use
-if test "$ac_cv_func_sigaction" = "yes" -a "$sigaction_ok" = "yes" ; then
- # FIXME DJG: where should this get set?
- if test "$pac_struct_sigaction_needs_posix" = yes ; then
-
-$as_echo "#define NEEDS_POSIX_FOR_SIGACTION 1" >>confdefs.h
-
- fi
-
-$as_echo "#define USE_SIGACTION 1" >>confdefs.h
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
+$as_echo "$pac_cv_func_decl_strdup" >&6; }
+if test "$pac_cv_func_decl_strdup" = "yes" ; then
-elif test "$ac_cv_func_signal" = "yes" ; then
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRDUP_DECL 1
+_ACEOF
-$as_echo "#define USE_SIGNAL 1" >>confdefs.h
fi
-if test "$enable_allowport" = "yes" ; then
-
-$as_echo "#define MPIEXEC_ALLOW_PORT 1" >>confdefs.h
+ fi
fi
-# some of these may be redundant with the upper level code, although the caching
-# should detect it and make the performance impact a non-issue
-for ac_header in string.h sys/time.h unistd.h stdlib.h sys/socket.h wait.h errno.h
+# ----------------------------------------------------------------------------
+# Look for some non-posix, but commonly provided functions
+# ----------------------------------------------------------------------------
+# mkstemp() is a better replacement for mktemp()
+for ac_func in mkstemp
do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_MKSTEMP 1
_ACEOF
fi
-
done
+if test "$ac_cv_func_mkstemp" = "yes" ; then
-
-fi
-## end expansion of PAC_SUBCFG_BODY_src_pm_gforker
-
-## begin expansion of PAC_SUBCFG_BODY_src_pmi
-
-
-# common ARG_ENABLE, shared by "simple" and "pmi2"
-# Check whether --enable-pmiport was given.
-if test "${enable_pmiport+set}" = set; then :
- enableval=$enable_pmiport;
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkstemp needs a declaration" >&5
+$as_echo_n "checking whether mkstemp needs a declaration... " >&6; }
+if ${pac_cv_func_decl_mkstemp+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- enable_pmiport=default
-fi
-
-
-
-## end expansion of PAC_SUBCFG_BODY_src_pmi
-
-## begin expansion of PAC_SUBCFG_BODY_src_pmi_pmi2
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))mkstemp;
+int
+main ()
+{
- if test "x$pmi_name" = "xpmi2"; then
- BUILD_PMI_PMI2_TRUE=
- BUILD_PMI_PMI2_FALSE='#'
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_mkstemp=no
else
- BUILD_PMI_PMI2_TRUE='#'
- BUILD_PMI_PMI2_FALSE=
-fi
-
-
-if test -z "$BUILD_PMI_PMI2_TRUE"; then :
-
-if test "$enable_pmiport" != "no" ; then
- enable_pmiport=yes
+ pac_cv_func_decl_mkstemp=yes
fi
-
-USE_PMI2_API=yes
-
-# common ARG_ENABLE, shared by "simple" and "poe"
-# Check whether --enable-pmiport was given.
-if test "${enable_pmiport+set}" = set; then :
- enableval=$enable_pmiport;
-else
- enable_pmiport=default
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_mkstemp" >&5
+$as_echo "$pac_cv_func_decl_mkstemp" >&6; }
+if test "$pac_cv_func_decl_mkstemp" = "yes" ; then
-for ac_header in unistd.h string.h stdlib.h sys/socket.h strings.h assert.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_MKSTEMP_DECL 1
_ACEOF
-fi
-done
+fi
-for ac_func in snprintf
+fi
+# putenv() sets environment variable
+for ac_func in putenv
do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
+ ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
+if test "x$ac_cv_func_putenv" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
+#define HAVE_PUTENV 1
_ACEOF
fi
done
-if test "$ac_cv_func_snprintf" = "yes" ; then
+if test "$ac_cv_func_putenv" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether putenv needs a declaration" >&5
+$as_echo_n "checking whether putenv needs a declaration... " >&6; }
+if ${pac_cv_func_decl_putenv+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))putenv;
int
main ()
{
@@ -45969,398 +44320,363 @@ main ()
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
+ pac_cv_func_decl_putenv=no
else
- pac_cv_func_decl_snprintf=yes
+ pac_cv_func_decl_putenv=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_putenv" >&5
+$as_echo "$pac_cv_func_decl_putenv" >&6; }
+if test "$pac_cv_func_decl_putenv" = "yes" ; then
cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
+#define NEEDS_PUTENV_DECL 1
_ACEOF
fi
fi
-for ac_func in strncasecmp
-do :
- ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
-if test "x$ac_cv_func_strncasecmp" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRNCASECMP 1
-_ACEOF
-fi
-done
-#
-# PM's that need support for a port can set the environment variable
-# NEED_PMIPORT in their setup_pm script.
-if test "$NEED_PMIPORT" = "yes" -a "$enable_pmiport" != "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&5
-$as_echo "$as_me: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&2;}
- enable_pmiport=yes
-fi
-#
-if test "$enable_pmiport" = "yes" ; then
- # Check for the necessary includes and functions
- missing_headers=no
- for ac_header in \
- sys/types.h \
- sys/param.h \
- sys/socket.h \
- netinet/in.h \
- netinet/tcp.h \
- sys/un.h \
- netdb.h \
+# ----------------------------------------------------------------------------
+# Setup other replaceable values
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-else
- missing_headers=yes
+
+if test "$NEEDSPLIB" = "yes" ; then
+ LPMPILIBNAME="-l${PMPILIBNAME}"
fi
+
+# Note that aint_size must be used instead of void_p where the desired check
+# is on the size of MPI_Aint
+aint_size=$ac_cv_sizeof_void_p
+if test "$with_aint_size" -gt 0 ; then
+ aint_size=$with_aint_size
+ if test "$aint_size" != "$ac_cv_sizeof_void_p" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Overriding MPI_Aint to be $aint_size bytes" >&5
+$as_echo "Overriding MPI_Aint to be $aint_size bytes" >&6; }
+ fi
+fi
+MPI_AINT=int
+for type in int long long_long short ; do
+ eval len=\$ac_cv_sizeof_$type
+ if test "$len" = "$aint_size" ; then
+ MPI_AINT=`echo $type | sed -e 's/_/ /'`
+ # Make the sizeof AINT available to other configures
+ MPI_SIZEOF_AINT=$len
+ export MPI_SIZEOF_AINT
+ case $type in
+ int)
+ MPI_AINT_FMT_DEC_SPEC="%d"
+ MPI_AINT_FMT_HEX_SPEC="%x"
+ MPIR_AINT_MAX="INT_MAX"
+ ;;
+ long)
+ MPI_AINT_FMT_DEC_SPEC="%ld"
+ MPI_AINT_FMT_HEX_SPEC="%lx"
+ MPIR_AINT_MAX="LONG_MAX"
+ ;;
+ long_long)
+ MPI_AINT_FMT_DEC_SPEC="%lld"
+ MPI_AINT_FMT_HEX_SPEC="%llx"
+ # tt#1776: if LLONG_MAX is missing, we fix it up in C, b/c it's
+ # easier there. See mpiiimpl.h.
+ MPIR_AINT_MAX="LLONG_MAX"
+ ;;
+ short)
+ MPI_AINT_FMT_DEC_SPEC="%hd"
+ MPI_AINT_FMT_HEX_SPEC="%hx"
+ MPIR_AINT_MAX="SHRT_MAX"
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to determine format specifiers for MPI_Aint, defaulting to int" >&5
+$as_echo "$as_me: WARNING: unable to determine format specifiers for MPI_Aint, defaulting to int" >&2;}
+ MPI_AINT_FMT_DEC_SPEC="%d"
+ MPI_AINT_FMT_HEX_SPEC="%x"
+ MPIR_AINT_MAX="INT_MAX"
+ ;;
+ esac
+ export MPI_AINT_FMT_DEC_SPEC MPI_AINT_FMT_HEX_SPEC
+ break
+ fi
done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
-$as_echo_n "checking for library containing socket... " >&6; }
-if ${ac_cv_search_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socket ();
-int
-main ()
-{
-return socket ();
- ;
- return 0;
-}
+
+
+cat >>confdefs.h <<_ACEOF
+#define MPIR_AINT_MAX $MPIR_AINT_MAX
_ACEOF
-for ac_lib in '' socket; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_socket=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_socket+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_socket+:} false; then :
-else
- ac_cv_search_socket=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+
+# If sizeof(mpi_aint) = sizeof(int), set this value
+if test "$ac_cv_sizeof_int" = "$aint_size" ; then
+
+$as_echo "#define SIZEOF_INT_IS_AINT 1" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
-$as_echo "$ac_cv_search_socket" >&6; }
-ac_res=$ac_cv_search_socket
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+# ----------------------------------------------------------------------------
+# MPI_AINT datatype
+# ----------------------------------------------------------------------------
+# Must be done after MPI_Aint type determination but before subconfigures.
+
+# convert to 2-char hex size
+case "$MPI_SIZEOF_AINT" in
+ 4) len_mpi_aint=04 ;;
+ 8) len_mpi_aint=08 ;;
+ 16) len_mpi_aint=10 ;;
+ *) as_fn_error $? "Unable to convert MPI_SIZEOF_AINT to a hex string. This is either because we are building on a very strange platform or there is a bug somewhere in configure." "$LINENO" 5 ;;
+esac
+# MPI_AINT and MPI_OFFSET are already taken, appending a _DATATYPE suffix
+MPI_AINT_DATATYPE=0x4c00${len_mpi_aint}43
+
+export MPI_AINT_DATATYPE
+
+# 0x4c000043 is 1275068483 in decimal, add ($MPI_SIZEOF_AINT * 256) and you get
+# the decimal equivalent of the hex number
+MPI_F77_AINT=`expr 1275068483 '+' '(' 256 '*' $MPI_SIZEOF_AINT ')'`
+
+export MPI_F77_AINT
+# ----------------------------------------------------------------------------
+
+if test "$ac_cv_sizeof_void_p" -lt "$aint_size" ; then
+
+$as_echo "#define USE_AINT_FOR_ATTRVAL 1" >>confdefs.h
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
-$as_echo_n "checking for library containing gethostbyname... " >&6; }
-if ${ac_cv_search_gethostbyname+:} false; then :
+# with MPI_AINT defined, now we can
+# Get the size for the bsendoverhead
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of MPII_Bsend_data_t" >&5
+$as_echo_n "checking size of MPII_Bsend_data_t... " >&6; }
+if ${ac_cv_sizeof_MPII_Bsend_data_t+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (MPII_Bsend_data_t))" "ac_cv_sizeof_MPII_Bsend_data_t" "
+#define MPI_Datatype int
+typedef $MPI_AINT MPI_Aint;
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' nsl; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_gethostbyname=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_gethostbyname+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_gethostbyname+:} false; then :
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#include \"${master_top_srcdir}/src/include/mpii_bsend.h\"
+
+"; then :
else
- ac_cv_search_gethostbyname=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ if test "$ac_cv_type_MPII_Bsend_data_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (MPII_Bsend_data_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_MPII_Bsend_data_t=0
+ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
-$as_echo "$ac_cv_search_gethostbyname" >&6; }
-ac_res=$ac_cv_search_gethostbyname
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_MPII_Bsend_data_t" >&5
+$as_echo "$ac_cv_sizeof_MPII_Bsend_data_t" >&6; }
- missing_functions=no
- for ac_func in socket setsockopt gethostbyname
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_MPII_BSEND_DATA_T $ac_cv_sizeof_MPII_Bsend_data_t
_ACEOF
-else
- missing_functions=yes
+
+if test "$ac_cv_sizeof_MPII_Bsend_data_t" = "0" ; then
+ as_fn_error $? "Unable to determine the size of MPI_BSEND_OVERHEAD" "$LINENO" 5
+ # In the past, a default of 128 was used (still likely good enough),
+ # but the autoconf SIZEOF macro has been changed to ignore the second
+ # argument, so code that depended on the prior defined behavior now
+ # silently breaks.
fi
-done
+BSEND_OVERHEAD=$ac_cv_sizeof_MPII_Bsend_data_t
+export BSEND_OVERHEAD
- if test "$missing_functions" = "no" ; then
-$as_echo "#define USE_PMI_PORT 1" >>confdefs.h
+# Check for the Linux functions for controlling processor affinity.
+# LINUX: sched_setaffinity
+# AIX: bindprocessor
+# OSX (Leopard): thread_policy_set
+for ac_func in sched_setaffinity sched_getaffinity bindprocessor thread_policy_set
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
- else
- as_fn_error $? "Cannot build simple PMI with support for an IP port because of missing functions" "$LINENO" 5
- fi
fi
+done
-# Check for socklen_t . If undefined, define it as int
-# (note the conditional inclusion of sys/socket.h)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
-$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
-if ${pac_cv_have_socklen_t+:} false; then :
+if test "$ac_cv_func_sched_setaffinity" = "yes" ; then
+ # Test for the cpu process set type
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cpu_set_t available" >&5
+$as_echo_n "checking whether cpu_set_t available... " >&6; }
+if ${pac_cv_have_cpu_set_t+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-typedef struct { double a; int b; } socklen_t;
+#include <sched.h>
int
main ()
{
-socklen_t a;a.a=1.0;
+ cpu_set_t t;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_socklen_t=no
+ pac_cv_have_cpu_set_t=yes
else
- pac_cv_have_socklen_t=yes
+ pac_cv_have_cpu_set_t=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
-$as_echo "$pac_cv_have_socklen_t" >&6; }
-if test "$pac_cv_have_socklen_t" = no ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cpu_set_t" >&5
+$as_echo "$pac_cv_have_cpu_set_t" >&6; }
+ if test "$pac_cv_have_cpu_set_t" = yes ; then
-$as_echo "#define socklen_t int" >>confdefs.h
+$as_echo "#define HAVE_CPU_SET_T 1" >>confdefs.h
-fi
-# Check for h_addr or h_addr_list
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
-$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
-if ${pac_cv_have_haddr_list+:} false; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the CPU_SET and CPU_ZERO macros are defined" >&5
+$as_echo_n "checking whether the CPU_SET and CPU_ZERO macros are defined... " >&6; }
+if ${pac_cv_cpu_set_defined+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <netdb.h>
+#include <sched.h>
int
main ()
{
-struct hostent hp;hp.h_addr_list[0]=0;
+ cpu_set_t t; CPU_ZERO(&t); CPU_SET(1,&t);
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_haddr_list=yes
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_cpu_set_defined=yes
else
- pac_cv_have_haddr_list=no
+ pac_cv_cpu_set_defined=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
-$as_echo "$pac_cv_have_haddr_list" >&6; }
-if test "$pac_cv_have_haddr_list" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cpu_set_defined" >&5
+$as_echo "$pac_cv_cpu_set_defined" >&6; }
+ if test "$pac_cv_cpu_set_defined" = "yes" ; then
-$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
+$as_echo "#define HAVE_CPU_SET_MACROS 1" >>confdefs.h
+ fi
+ # FIXME: Some versions of sched_setaffinity return ENOSYS (!),
+ # so we should test for the unfriendly and useless behavior
+ fi
fi
-
-
-if test "$ac_cv_c_compiler_gnu" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
-$as_echo_n "checking whether __attribute__ allowed... " >&6; }
-if ${pac_cv_gnu_attr_pure+:} false; then :
+if test "$ac_cv_func_thread_policy_set" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether thread affinity macros defined" >&5
+$as_echo_n "checking whether thread affinity macros defined... " >&6; }
+if ${pac_cv_have_thread_affinity_policy+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(int) __attribute__ ((pure));
+#include <mach/thread_policy.h>
int
main ()
{
-int a;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_pure=yes
-else
- pac_cv_gnu_attr_pure=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
-$as_echo "$pac_cv_gnu_attr_pure" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
-$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
-if ${pac_cv_gnu_attr_format+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo(char *,...) __attribute__ ((format(printf,1,2)));
-int
-main ()
-{
-int a;
+#if !defined(THREAD_AFFINITY_POLICY) || !defined(THREAD_AFFINITY_TAG_NULL)
+ :'thread macros not defined
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_format=yes
+ pac_cv_have_thread_affinity_policy=yes
else
- pac_cv_gnu_attr_format=no
+ pac_cv_have_thread_affinity_policy=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
-$as_echo "$pac_cv_gnu_attr_format" >&6; }
- if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_thread_affinity_policy" >&5
+$as_echo "$pac_cv_have_thread_affinity_policy" >&6; }
+ if test "$pac_cv_have_thread_affinity_policy" = yes ; then
-$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
+$as_echo "#define HAVE_OSX_THREAD_AFFINITY 1" >>confdefs.h
fi
fi
-
-fi
-
-## end expansion of PAC_SUBCFG_BODY_src_pmi_pmi2
-
-## begin expansion of PAC_SUBCFG_BODY_src_pmi_slurm
-
-
- if test "x$pmi_name" = "xslurm"; then
- BUILD_PMI_SLURM_TRUE=
- BUILD_PMI_SLURM_FALSE='#'
-else
- BUILD_PMI_SLURM_TRUE='#'
- BUILD_PMI_SLURM_FALSE=
-fi
-
-if test -z "$BUILD_PMI_SLURM_TRUE"; then :
+# -----------------------------------------------------------------------------
+# End of thread configure
+# -----------------------------------------------------------------------------
-# sets CPPFLAGS and LDFLAGS
+# Checkpointing
+# Check whether --enable-checkpointing was given.
+if test "${enable_checkpointing+set}" = set; then :
+ enableval=$enable_checkpointing; if test "$enableval" != "no" ; then
-# Check whether --with-slurm was given.
-if test "${with_slurm+set}" = set; then :
- withval=$with_slurm; case "$withval" in #(
+# Check whether --with-blcr was given.
+if test "${with_blcr+set}" = set; then :
+ withval=$with_blcr; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-slurm=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-slurm=PATH expects a valid PATH" >&2;}
- with_slurm="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-blcr=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-blcr=PATH expects a valid PATH" >&2;}
+ with_blcr="" ;; #(
*) :
;;
esac
else
- with_slurm=
+ with_blcr=
fi
-# Check whether --with-slurm-include was given.
-if test "${with_slurm_include+set}" = set; then :
- withval=$with_slurm_include; case "$withval" in #(
+# Check whether --with-blcr-include was given.
+if test "${with_blcr_include+set}" = set; then :
+ withval=$with_blcr_include; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-slurm-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-slurm-include=PATH expects a valid PATH" >&2;}
- with_slurm_include="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-blcr-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-blcr-include=PATH expects a valid PATH" >&2;}
+ with_blcr_include="" ;; #(
*) :
;;
esac
fi
-# Check whether --with-slurm-lib was given.
-if test "${with_slurm_lib+set}" = set; then :
- withval=$with_slurm_lib; case "$withval" in #(
+# Check whether --with-blcr-lib was given.
+if test "${with_blcr_lib+set}" = set; then :
+ withval=$with_blcr_lib; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-slurm-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-slurm-lib=PATH expects a valid PATH" >&2;}
- with_slurm_lib="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-blcr-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-blcr-lib=PATH expects a valid PATH" >&2;}
+ with_blcr_lib="" ;; #(
*) :
;;
esac
@@ -46371,339 +44687,97 @@ fi
# Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
# taking priority
- if test -n "${with_slurm_include}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_slurm_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_slurm_include}', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_slurm_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_slurm_include}"
-
-fi
-
-else
- if test -n "${with_slurm}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_slurm}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_slurm}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_slurm}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_slurm}/include"
-
-fi
-
-fi
-fi
-
- if test -n "${with_slurm_lib}"; then :
+ if test -n "${with_blcr_include}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_slurm_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_slurm_lib}', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_blcr_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_blcr_include}', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_slurm_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_slurm_lib}"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_blcr_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_blcr_include}"
fi
else
- if test -n "${with_slurm}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_slurm}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_slurm}/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_slurm}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_slurm}/lib"
-
-fi
-
- if test -d "${with_slurm}/lib64}"; then :
+ if test -n "${with_blcr}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_slurm}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_slurm}/lib64', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_blcr}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_blcr}/include', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_slurm}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_slurm}/lib64"
-
-fi
-
-fi
-
-fi
-
-fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "slurm/pmi.h" "ac_cv_header_slurm_pmi_h" "$ac_includes_default"
-if test "x$ac_cv_header_slurm_pmi_h" = xyes; then :
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_blcr}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_blcr}/include"
-else
- as_fn_error $? "could not find slurm/pmi.h. Configure aborted" "$LINENO" 5
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PMI_Init in -lpmi" >&5
-$as_echo_n "checking for PMI_Init in -lpmi... " >&6; }
-if ${ac_cv_lib_pmi_PMI_Init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpmi $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char PMI_Init ();
-int
-main ()
-{
-return PMI_Init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pmi_PMI_Init=yes
-else
- ac_cv_lib_pmi_PMI_Init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pmi_PMI_Init" >&5
-$as_echo "$ac_cv_lib_pmi_PMI_Init" >&6; }
-if test "x$ac_cv_lib_pmi_PMI_Init" = xyes; then :
-
-
- if echo "$LIBS" | $FGREP -e "\<-lpmi\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lpmi', not prepending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-lpmi', prepending" >&5
- LIBS="-lpmi $LIBS"
-
fi
+ if test -n "${with_blcr_lib}"; then :
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lpmi\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lpmi', not prepending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_blcr_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_blcr_lib}', not appending" >&5
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lpmi', prepending" >&5
- WRAPPER_LIBS="-lpmi $WRAPPER_LIBS"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_blcr_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_blcr_lib}"
fi
else
- as_fn_error $? "could not find the slurm libpmi. Configure aborted" "$LINENO" 5
-fi
-
-
-
-fi
-
-## end expansion of PAC_SUBCFG_BODY_src_pmi_slurm
-
-## begin expansion of PAC_SUBCFG_BODY_src_pmi_pmi2_simple
+ if test -n "${with_blcr}"; then :
- if test "x$pmi_name" = "xpmi2/simple"; then
- BUILD_PMI_PMI2_SIMPLE_TRUE=
- BUILD_PMI_PMI2_SIMPLE_FALSE='#'
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_blcr}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_blcr}/lib', not appending" >&5
else
- BUILD_PMI_PMI2_SIMPLE_TRUE='#'
- BUILD_PMI_PMI2_SIMPLE_FALSE=
-fi
-
-
-if test -z "$BUILD_PMI_PMI2_SIMPLE_TRUE"; then :
-
-if test "$enable_pmiport" != "no" ; then
- enable_pmiport=yes
-fi
-
-USE_PMI2_API=yes
-
-for ac_header in unistd.h string.h stdlib.h sys/socket.h strings.h assert.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-for ac_func in snprintf
-do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
-_ACEOF
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_blcr}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_blcr}/lib"
fi
-done
-
-if test "$ac_cv_func_snprintf" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ if test -d "${with_blcr}/lib64"; then :
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_blcr}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_blcr}/lib64', not appending" >&5
else
- pac_cv_func_decl_snprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
-_ACEOF
-
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_blcr}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_blcr}/lib64"
fi
fi
-for ac_func in strncasecmp
-do :
- ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
-if test "x$ac_cv_func_strncasecmp" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRNCASECMP 1
-_ACEOF
fi
-done
-#
-# PM's that need support for a port can set the environment variable
-# NEED_PMIPORT in their setup_pm script.
-if test "$NEED_PMIPORT" = "yes" -a "$enable_pmiport" != "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&5
-$as_echo "$as_me: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&2;}
- enable_pmiport=yes
fi
-#
-if test "$enable_pmiport" = "yes" ; then
- # Check for the necessary includes and functions
- missing_headers=no
- for ac_header in \
- sys/types.h \
- sys/param.h \
- sys/socket.h \
- netinet/in.h \
- netinet/tcp.h \
- sys/un.h \
- netdb.h \
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-else
- missing_headers=yes
-fi
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
-$as_echo_n "checking for library containing socket... " >&6; }
-if ${ac_cv_search_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socket ();
-int
-main ()
-{
-return socket ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' socket; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_socket=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_socket+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_socket+:} false; then :
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "libcr.h" "ac_cv_header_libcr_h" "$ac_includes_default"
+if test "x$ac_cv_header_libcr_h" = xyes; then :
else
- ac_cv_search_socket=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ failure=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
-$as_echo "$ac_cv_search_socket" >&6; }
-ac_res=$ac_cv_search_socket
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
-$as_echo_n "checking for library containing gethostbyname... " >&6; }
-if ${ac_cv_search_gethostbyname+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cr_init in -lcr" >&5
+$as_echo_n "checking for cr_init in -lcr... " >&6; }
+if ${ac_cv_lib_cr_cr_init+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_func_search_save_LIBS=$LIBS
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcr $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -46713,351 +44787,458 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char gethostbyname ();
+char cr_init ();
int
main ()
{
-return gethostbyname ();
+return cr_init ();
;
return 0;
}
_ACEOF
-for ac_lib in '' nsl; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_gethostbyname=$ac_res
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_cr_cr_init=yes
+else
+ ac_cv_lib_cr_cr_init=no
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_gethostbyname+:} false; then :
- break
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-done
-if ${ac_cv_search_gethostbyname+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cr_cr_init" >&5
+$as_echo "$ac_cv_lib_cr_cr_init" >&6; }
+if test "x$ac_cv_lib_cr_cr_init" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCR 1
+_ACEOF
+
+ LIBS="-lcr $LIBS"
else
- ac_cv_search_gethostbyname=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ failure=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
-$as_echo "$ac_cv_search_gethostbyname" >&6; }
-ac_res=$ac_cv_search_gethostbyname
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-fi
+ if test "$failure" = "no" ; then
+ success=yes
+ else
+ success=no
+ fi
- missing_functions=no
- for ac_func in socket setsockopt gethostbyname
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ if test "$success" = "no" ; then
+ as_fn_error $? "'libcr.h or libcr library not found. Did you specify --with-blcr= or --with-blcr-include= or --with-blcr-lib=?'" "$LINENO" 5
+ fi
+
+
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lcr\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lcr', not appending" >&5
else
- missing_functions=yes
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lcr', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lcr"
+
fi
-done
- if test "$missing_functions" = "no" ; then
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-$as_echo "#define USE_PMI_PORT 1" >>confdefs.h
- else
- as_fn_error $? "Cannot build simple PMI with support for an IP port because of missing functions" "$LINENO" 5
- fi
-fi
+$as_echo "#define ENABLE_CHECKPOINTING 1" >>confdefs.h
-# Check for socklen_t . If undefined, define it as int
-# (note the conditional inclusion of sys/socket.h)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
-$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
-if ${pac_cv_have_socklen_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ fi
+fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
+# Update the cache first with the results of the previous configure steps
+# We don't use the subdir cache because ensuring that the cache is consistant
+# with the way in which configure wishes to use it is very difficult and
+# too prone to error.
+# -----------------------------------------------------------------------------
+# experiment with creating a cache file
+#if test "$CONF_USE_CACHEFILE" = yes ; then
+# basecachefile=`pwd`/cache.base
+# set | grep ac_cv > $basecachefile
+# # Tell other configures to load this file
+# echo "Creating and exporting the base cache file $basecachefile"
+# CONF_BASE_CACHEFILE=$basecachefile
+# export CONF_BASE_CACHEFILE
+#fi
-typedef struct { double a; int b; } socklen_t;
-int
-main ()
-{
-socklen_t a;a.a=1.0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_socklen_t=no
+# Check whether --enable-base-cache was given.
+if test "${enable_base_cache+set}" = set; then :
+ enableval=$enable_base_cache;
else
- pac_cv_have_socklen_t=yes
+ enable_base_cache=default
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+# The default case is controlled by the environment variable CONF_USE_CACHEFILE
+if test "$enable_base_cache" = "default" ; then
+ if test "$CONF_USE_CACHEFILE" = yes ; then
+ enable_base_cache=yes
+ else
+ enable_base_cache=no
+ fi
+fi
+if test "$enable_base_cache" != no ; then
+ if test "$enable_base_cache" = yes ; then
+ basecachefile=`pwd`/cache.base
+ else
+ basecachefile=`pwd`/$enable_base_cache
+ fi
+ set | grep ac_cv > $basecachefile
+ # Tell other configures to load this file
+ echo "Creating and exporting the base cache file $basecachefile"
+ CONF_BASE_CACHEFILE=$basecachefile
+ export CONF_BASE_CACHEFILE
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
-$as_echo "$pac_cv_have_socklen_t" >&6; }
-if test "$pac_cv_have_socklen_t" = no ; then
-$as_echo "#define socklen_t int" >>confdefs.h
+# -----------------------------------------------------------------------------
+
+#
+# Configure the device second. This way, any libraries or variables that
+# it needs can be extracted before building the other subsystems (this is
+# particularly important for the bindings, which may need to know the
+# libraries in order to create the compilation scripts)
+user_specified_atomic_primitives=no
+if test "$DEBUG_SUBDIR_CACHE" = yes ; then
+ set -x
fi
-# Check for h_addr or h_addr_list
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
-$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
-if ${pac_cv_have_haddr_list+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <netdb.h>
-int
-main ()
-{
-struct hostent hp;hp.h_addr_list[0]=0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_haddr_list=yes
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3
+
+if test -z "$BUILD_CH3_TRUE"; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR CH3 DEVICE" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR CH3 DEVICE" >&6;}
+
+# ----------------------------------------------------------------------------
+# include ftb functionality
+# ----------------------------------------------------------------------------
+# Check whether --enable-ftb was given.
+if test "${enable_ftb+set}" = set; then :
+ enableval=$enable_ftb;
+$as_echo "#define ENABLE_FTB 1" >>confdefs.h
+
+
+
+# Check whether --with-ftb was given.
+if test "${with_ftb+set}" = set; then :
+ withval=$with_ftb; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ftb=PATH expects a valid PATH" >&2;}
+ with_ftb="" ;; #(
+ *) :
+ ;;
+esac
else
- pac_cv_have_haddr_list=no
+ with_ftb=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+# Check whether --with-ftb-include was given.
+if test "${with_ftb_include+set}" = set; then :
+ withval=$with_ftb_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ftb-include=PATH expects a valid PATH" >&2;}
+ with_ftb_include="" ;; #(
+ *) :
+ ;;
+esac
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
-$as_echo "$pac_cv_have_haddr_list" >&6; }
-if test "$pac_cv_have_haddr_list" = "yes" ; then
-$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
+# Check whether --with-ftb-lib was given.
+if test "${with_ftb_lib+set}" = set; then :
+ withval=$with_ftb_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ftb-lib=PATH expects a valid PATH" >&2;}
+ with_ftb_lib="" ;; #(
+ *) :
+ ;;
+esac
fi
-if test "$ac_cv_c_compiler_gnu" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
-$as_echo_n "checking whether __attribute__ allowed... " >&6; }
-if ${pac_cv_gnu_attr_pure+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo(int) __attribute__ ((pure));
-int
-main ()
-{
-int a;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_pure=yes
+ if test -n "${with_ftb_include}"; then :
+
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ftb_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ftb_include}', not appending" >&5
else
- pac_cv_gnu_attr_pure=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ftb_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ftb_include}"
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
-$as_echo "$pac_cv_gnu_attr_pure" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
-$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
-if ${pac_cv_gnu_attr_format+:} false; then :
- $as_echo_n "(cached) " >&6
+
else
+ if test -n "${with_ftb}"; then :
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo(char *,...) __attribute__ ((format(printf,1,2)));
-int
-main ()
-{
-int a;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_format=yes
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ftb}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ftb}/include', not appending" >&5
else
- pac_cv_gnu_attr_format=no
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ftb}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ftb}/include"
+
+fi
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
-$as_echo "$pac_cv_gnu_attr_format" >&6; }
- if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
-$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
+ if test -n "${with_ftb_lib}"; then :
- fi
-fi
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ftb_lib}"
fi
-## end expansion of PAC_SUBCFG_BODY_src_pmi_pmi2_simple
+else
+ if test -n "${with_ftb}"; then :
+
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ftb}/lib"
-## begin expansion of PAC_SUBCFG_BODY_src_pmi_pmi2_poe
+fi
+
+ if test -d "${with_ftb}/lib64"; then :
- if test "x$pmi_name" = "xpmi2/poe"; then
- BUILD_PMI_PMI2_POE_TRUE=
- BUILD_PMI_PMI2_POE_FALSE='#'
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb}/lib64', not appending" >&5
else
- BUILD_PMI_PMI2_POE_TRUE='#'
- BUILD_PMI_PMI2_POE_FALSE=
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ftb}/lib64"
+
fi
+fi
-if test -z "$BUILD_PMI_PMI2_POE_TRUE"; then :
+fi
-if test "$enable_pmiport" != "no" ; then
- enable_pmiport=yes
fi
-USE_PMI2_API=yes
+
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-if test "$ac_cv_c_compiler_gnu" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
-$as_echo_n "checking whether __attribute__ allowed... " >&6; }
-if ${pac_cv_gnu_attr_pure+:} false; then :
- $as_echo_n "(cached) " >&6
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "libftb.h" "ac_cv_header_libftb_h" "$ac_includes_default"
+if test "x$ac_cv_header_libftb_h" = xyes; then :
+
else
+ failure=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FTB_Connect in -lftb" >&5
+$as_echo_n "checking for FTB_Connect in -lftb... " >&6; }
+if ${ac_cv_lib_ftb_FTB_Connect+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lftb $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(int) __attribute__ ((pure));
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char FTB_Connect ();
int
main ()
{
-int a;
+return FTB_Connect ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_pure=yes
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_ftb_FTB_Connect=yes
else
- pac_cv_gnu_attr_pure=no
+ ac_cv_lib_ftb_FTB_Connect=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
-$as_echo "$pac_cv_gnu_attr_pure" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
-$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
-if ${pac_cv_gnu_attr_format+:} false; then :
- $as_echo_n "(cached) " >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ftb_FTB_Connect" >&5
+$as_echo "$ac_cv_lib_ftb_FTB_Connect" >&6; }
+if test "x$ac_cv_lib_ftb_FTB_Connect" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBFTB 1
+_ACEOF
+
+ LIBS="-lftb $LIBS"
+
else
+ failure=yes
+fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo(char *,...) __attribute__ ((format(printf,1,2)));
-int
-main ()
-{
-int a;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_format=yes
+ if test "$failure" = "no" ; then
+ success=yes
+ else
+ success=no
+ fi
+
+ if test "$success" = "no" ; then
+ as_fn_error $? "'libftb.h or libftb library not found. Did you specify --with-ftb= or --with-ftb-include= or --with-ftb-lib=?'" "$LINENO" 5
+ fi
+
+
+
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lftb\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lftb', not appending" >&5
else
- pac_cv_gnu_attr_format=no
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lftb', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lftb"
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
-$as_echo "$pac_cv_gnu_attr_format" >&6; }
- if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
-$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
- fi
+
+# Check whether --with-ch3-rank-bits was given.
+if test "${with_ch3_rank_bits+set}" = set; then :
+ withval=$with_ch3_rank_bits; rankbits=$withval
+else
+ rankbits=16
+fi
+
+if test "$rankbits" != "16" -a "$rankbits" != "32" ; then
+ as_fn_error $? "Only 16 or 32-bit ranks are supported" "$LINENO" 5
fi
+cat >>confdefs.h <<_ACEOF
+#define CH3_RANK_BITS $rankbits
+_ACEOF
+
+
+for ac_header in assert.h limits.h string.h sys/types.h sys/uio.h uuid/uuid.h \
+ time.h ctype.h unistd.h arpa/inet.h sys/socket.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
fi
-## end expansion of PAC_SUBCFG_BODY_src_pmi_pmi2_poe
+done
+
-## begin expansion of PAC_SUBCFG_BODY_src_pmi_simple
+# net/if.h requires special handling on darwin. The following code is
+# straight out of the autoconf-2.63 manual. Also, sys/socket.h (above)
+# is a prerequisite.
+for ac_header in net/if.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+"
+if test "x$ac_cv_header_net_if_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_NET_IF_H 1
+_ACEOF
- if test "x$pmi_name" = "xsimple"; then
- BUILD_PMI_SIMPLE_TRUE=
- BUILD_PMI_SIMPLE_FALSE='#'
-else
- BUILD_PMI_SIMPLE_TRUE='#'
- BUILD_PMI_SIMPLE_FALSE=
fi
+done
-if test -z "$BUILD_PMI_SIMPLE_TRUE"; then :
-if test "$enable_pmiport" != "no" ; then
- enable_pmiport=yes
+# Check for special types
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
fi
-for ac_header in unistd.h string.h stdlib.h sys/socket.h strings.h assert.h arpa/inet.h
+
+
+# Check for functions
+for ac_func in inet_pton
do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton"
+if test "x$ac_cv_func_inet_pton" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_INET_PTON 1
_ACEOF
fi
-
done
-for ac_func in snprintf
+for ac_func in gethostname
do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
+ ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
+if test "x$ac_cv_func_gethostname" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
+#define HAVE_GETHOSTNAME 1
_ACEOF
fi
done
-if test "$ac_cv_func_snprintf" = "yes" ; then
+if test "$ac_cv_func_gethostname" = "yes" ; then
+ # Do we need to declare gethostname?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
+$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
+if ${pac_cv_func_decl_gethostname+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))gethostname;
int
main ()
{
@@ -47067,905 +45248,1089 @@ main ()
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
+ pac_cv_func_decl_gethostname=no
else
- pac_cv_func_decl_snprintf=yes
+ pac_cv_func_decl_gethostname=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
+$as_echo "$pac_cv_func_decl_gethostname" >&6; }
+if test "$pac_cv_func_decl_gethostname" = "yes" ; then
cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
+#define NEEDS_GETHOSTNAME_DECL 1
_ACEOF
fi
fi
-for ac_func in strncasecmp
+
+for ac_func in CFUUIDCreate uuid_generate time
do :
- ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
-if test "x$ac_cv_func_strncasecmp" = xyes; then :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_STRNCASECMP 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
-#
-# PM's that need support for a port can set the environment variable
-# NEED_PMIPORT in their setup_pm script.
-if test "$NEED_PMIPORT" = "yes" -a "$enable_pmiport" != "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&5
-$as_echo "$as_me: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&2;}
- enable_pmiport=yes
-fi
-#
-if test "$enable_pmiport" = "yes" ; then
- # Check for the necessary includes and functions
- missing_headers=no
- for ac_header in \
- sys/types.h \
- sys/param.h \
- sys/socket.h \
- netinet/in.h \
- netinet/tcp.h \
- sys/un.h \
- netdb.h \
-
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-else
- missing_headers=yes
-fi
-
-done
+# ensure that atomic primitives are available
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenPA atomic primitive availability" >&5
+$as_echo_n "checking for OpenPA atomic primitive availability... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
-$as_echo_n "checking for library containing socket... " >&6; }
-if ${ac_cv_search_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
+# Double check that we actually have a present and working OpenPA
+# configuration. This must be AC_COMPILE_IFELSE instead of the stronger
+# AC_LINK_IFELSE because the OpenPA library will typically not be
+# completely built by this point.
+#
+# This test was taken from sanity.c in the OpenPA test suite.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socket ();
+#include <opa_primitives.h> /* will include pthread.h if present and needed */
+
int
main ()
{
-return socket ();
+
+ OPA_int_t a, b;
+ int c;
+#if defined(OPA_USE_LOCK_BASED_PRIMITIVES)
+ pthread_mutex_t shm_lock;
+ OPA_Interprocess_lock_init(&shm_lock, 1/*isLeader*/);
+#endif
+
+ OPA_store_int(&a, 0);
+ OPA_store_int(&b, 1);
+ OPA_add_int(&a, 10);
+ OPA_assert(10 == OPA_load_int(&a));
+ c = OPA_cas_int(&a, 10, 11);
+ OPA_assert(10 == c);
+ c = OPA_swap_int(&a, OPA_load_int(&b));
+ OPA_assert(11 == c);
+ OPA_assert(1 == OPA_load_int(&a));
+
;
return 0;
}
_ACEOF
-for ac_lib in '' socket; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_socket=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_socket+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_socket+:} false; then :
-
+if ac_fn_c_try_compile "$LINENO"; then :
+ openpa_present_and_working=yes
else
- ac_cv_search_socket=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
-$as_echo "$ac_cv_search_socket" >&6; }
-ac_res=$ac_cv_search_socket
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
+ openpa_present_and_working=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
-$as_echo_n "checking for library containing gethostbyname... " >&6; }
-if ${ac_cv_search_gethostbyname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if test "$openpa_present_and_working" = yes ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' nsl; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_gethostbyname=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_gethostbyname+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_gethostbyname+:} false; then :
-else
- ac_cv_search_gethostbyname=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
-$as_echo "$ac_cv_search_gethostbyname" >&6; }
-ac_res=$ac_cv_search_gethostbyname
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+#include <opa_primitives.h>
+#if defined(OPA_USE_LOCK_BASED_PRIMITIVES)
+#error "lock-based emulation is currently in use"
+#endif
-fi
- missing_functions=no
- for ac_func in socket setsockopt gethostbyname
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
-
+if ac_fn_c_try_cpp "$LINENO"; then :
+ using_emulated_atomics=no
else
- missing_functions=yes
+ using_emulated_atomics=yes
fi
-done
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test "$using_emulated_atomics" = "yes" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- if test "$missing_functions" = "no" ; then
-$as_echo "#define USE_PMI_PORT 1" >>confdefs.h
+#include <opa_primitives.h>
+/* may also be undefined in older (pre-r106) versions of OPA */
+#if !defined(OPA_EXPLICIT_EMULATION)
+#error "lock-based emulation was automatic, not explicit"
+#endif
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ atomics_explicitly_emulated=yes
+else
+ atomics_explicitly_emulated=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+ if test "$atomics_explicitly_emulated" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (emulated)" >&5
+$as_echo "yes (emulated)" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "
+The ch3 device was selected yet no native atomic primitives are
+available on this platform. OpenPA can emulate atomic primitives using
+locks by specifying --with-atomic-primitives=no but performance will be
+very poor. This override should only be specified for correctness
+testing purposes." "$LINENO" 5
+ fi
else
- as_fn_error $? "Cannot build simple PMI with support for an IP port because of missing functions" "$LINENO" 5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "
+The ch3 devies was selected yet a set of working OpenPA headers
+were not found. Please check the OpenPA configure step for errors." "$LINENO" 5
fi
-# Check for socklen_t . If undefined, define it as int
-# (note the conditional inclusion of sys/socket.h)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
-$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
-if ${pac_cv_have_socklen_t+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
$as_echo_n "(cached) " >&6
else
+ ac_cv_c_bigendian=unknown
+ # See if we're dealing with a universal compiler.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ # Check for potential -arch flags. It is not universal unless
+ # there are at least two -arch flags with different values.
+ ac_arch=
+ ac_prev=
+ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+ if test -n "$ac_prev"; then
+ case $ac_word in
+ i?86 | x86_64 | ppc | ppc64)
+ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+ ac_arch=$ac_word
+ else
+ ac_cv_c_bigendian=universal
+ break
+ fi
+ ;;
+ esac
+ ac_prev=
+ elif test "x$ac_word" = "x-arch"; then
+ ac_prev=arch
+ fi
+ done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+ && LITTLE_ENDIAN)
+ bogus endian macros
+ #endif
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
+ #include <sys/param.h>
-typedef struct { double a; int b; } socklen_t;
int
main ()
{
-socklen_t a;a.a=1.0;
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_socklen_t=no
+ ac_cv_c_bigendian=yes
else
- pac_cv_have_socklen_t=yes
+ ac_cv_c_bigendian=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
-$as_echo "$pac_cv_have_socklen_t" >&6; }
-if test "$pac_cv_have_socklen_t" = no ; then
-
-$as_echo "#define socklen_t int" >>confdefs.h
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
-fi
-# Check for h_addr or h_addr_list
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
-$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
-if ${pac_cv_have_haddr_list+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+ bogus endian macros
+ #endif
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ # It does; now see whether it defined to _BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <limits.h>
-#include <netdb.h>
int
main ()
{
-struct hostent hp;hp.h_addr_list[0]=0;
+#ifndef _BIG_ENDIAN
+ not big endian
+ #endif
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_haddr_list=yes
+ ac_cv_c_bigendian=yes
else
- pac_cv_have_haddr_list=no
+ ac_cv_c_bigendian=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
-$as_echo "$pac_cv_have_haddr_list" >&6; }
-if test "$pac_cv_have_haddr_list" = "yes" ; then
-
-$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # Compile a test program.
+ if test "$cross_compiling" = yes; then :
+ # Try to guess by grepping values from an object file.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+short int ascii_mm[] =
+ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ short int ascii_ii[] =
+ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ int use_ascii (int i) {
+ return ascii_mm[i] + ascii_ii[i];
+ }
+ short int ebcdic_ii[] =
+ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ short int ebcdic_mm[] =
+ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ int use_ebcdic (int i) {
+ return ebcdic_mm[i] + ebcdic_ii[i];
+ }
+ extern int foo;
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+ fi
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
-if test "$ac_cv_c_compiler_gnu" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
-$as_echo_n "checking whether __attribute__ allowed... " >&6; }
-if ${pac_cv_gnu_attr_pure+:} false; then :
- $as_echo_n "(cached) " >&6
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_c_bigendian=no
else
+ ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+ yes)
+ $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+ no)
+ ;; #(
+ universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+ ;; #(
+ *)
+ as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+
+
+fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3
+
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis
+
+
+if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis" >&6;}
+
+## below is code that formerly lived in configure.ac
+
+### Only include papi in CPPFLAGS configure will handle libs, and checking that it exists, etc.
+##if test -n "${papi_dir}" ; then
+## PAC_APPEND_FLAG([-I${papi_dir}/include], [CPPFLAGS])
+##fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(int) __attribute__ ((pure));
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+
int
main ()
{
-int a;
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_pure=yes
+ lac_cv_header_net_if_h=yes
else
- pac_cv_gnu_attr_pure=no
+ lac_cv_header_net_if_h=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "checking for net/if.h... $lac_cv_header_net_if_h"
+
+if test "$lac_cv_header_net_if_h" = "yes" ; then
+
+$as_echo "#define HAVE_NET_IF_H 1" >>confdefs.h
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
-$as_echo "$pac_cv_gnu_attr_pure" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
-$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
-if ${pac_cv_gnu_attr_format+:} false; then :
+
+for ac_header in \
+ assert.h \
+ netdb.h \
+ unistd.h \
+ sched.h \
+ sys/mman.h \
+ sys/ioctl.h \
+ sys/socket.h \
+ sys/sockio.h \
+ sys/types.h \
+ errno.h \
+ sys/ipc.h \
+ sys/shm.h \
+
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# netinet/in.h often requires sys/types.h first. With AC 2.57, check_headers
+# does the right thing, which is to test whether the header is found
+# by the compiler, but this can cause problems when the header needs
+# other headers. 2.57 changes the syntax (!) of check_headers to allow
+# additional headers.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for netinet/in.h" >&5
+$as_echo_n "checking for netinet/in.h... " >&6; }
+if ${ac_cv_header_netinet_in_h+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(char *,...) __attribute__ ((format(printf,1,2)));
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <netinet/in.h>
int
main ()
{
-int a;
+int a=0;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_gnu_attr_format=yes
+ ac_cv_header_netinet_in_h=yes
else
- pac_cv_gnu_attr_format=no
+ ac_cv_header_netinet_in_h=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
-$as_echo "$pac_cv_gnu_attr_format" >&6; }
- if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_netinet_in_h" >&5
+$as_echo "$ac_cv_header_netinet_in_h" >&6; }
+if test "$ac_cv_header_netinet_in_h" = yes ; then
-$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
+$as_echo "#define HAVE_NETINET_IN_H 1" >>confdefs.h
- fi
fi
-
+# Check whether --enable-fast was given.
+if test "${enable_fast+set}" = set; then :
+ enableval=$enable_fast;
+else
+ enable_fast=no
fi
-## end expansion of PAC_SUBCFG_BODY_src_pmi_simple
-
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_pamid
-
-if test -z "$BUILD_PAMID_TRUE"; then :
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR PAMI DEVICE" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR PAMI DEVICE" >&6;}
-
-ASSERT_LEVEL=2
+# make sure we support signal
+for ac_header in signal.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default"
+if test "x$ac_cv_header_signal_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNAL_H 1
+_ACEOF
-# Check whether --with-assert-level was given.
-if test "${with_assert_level+set}" = set; then :
- withval=$with_assert_level; ASSERT_LEVEL=$withval
fi
+done
-
-cat >>confdefs.h <<_ACEOF
-#define ASSERT_LEVEL $ASSERT_LEVEL
+for ac_func in signal
+do :
+ ac_fn_c_check_func "$LINENO" "signal" "ac_cv_func_signal"
+if test "x$ac_cv_func_signal" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNAL 1
_ACEOF
-
-
-
-# Check whether --with-pami was given.
-if test "${with_pami+set}" = set; then :
- withval=$with_pami; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-pami=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-pami=PATH expects a valid PATH" >&2;}
- with_pami="" ;; #(
- *) :
- ;;
-esac
-else
- with_pami=
fi
+done
-# Check whether --with-pami-include was given.
-if test "${with_pami_include+set}" = set; then :
- withval=$with_pami_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-pami-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-pami-include=PATH expects a valid PATH" >&2;}
- with_pami_include="" ;; #(
- *) :
- ;;
-esac
-fi
+nemesis_nets_dirs=""
+nemesis_nets_strings=""
+nemesis_nets_array=""
+nemesis_nets_func_decl=""
+nemesis_nets_func_array=""
+nemesis_nets_macro_defs=""
+net_index=0
+for net in $nemesis_networks ; do
+ if test ! -d $srcdir/src/mpid/ch3/channels/nemesis/netmod/${net} ; then
+ as_fn_error $? "Network module ${net} is unknown \"$srcdir/src/mpid/ch3/channels/nemesis/netmod/${net}\"" "$LINENO" 5
+ fi
+ net_macro=`echo $net | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ net_macro="MPIDI_NEM_${net_macro}"
+ if test -z "$nemesis_nets_array" ; then
+ nemesis_nets_array="$net_macro"
+ else
+ nemesis_nets_array="$nemesis_nets_array, $net_macro"
+ fi
-# Check whether --with-pami-lib was given.
-if test "${with_pami_lib+set}" = set; then :
- withval=$with_pami_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-pami-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-pami-lib=PATH expects a valid PATH" >&2;}
- with_pami_lib="" ;; #(
- *) :
- ;;
-esac
-fi
+ if test -z "$nemesis_nets_strings" ; then
+ nemesis_nets_strings="\"$net\""
+ else
+ nemesis_nets_strings="$nemesis_nets_strings, \"$net\""
+ fi
+ if test -z "$nemesis_nets_dirs" ; then
+ nemesis_nets_dirs="${net}"
+ else
+ nemesis_nets_dirs="$nemesis_nets_dirs ${net}"
+ fi
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
+ if test -z "$nemesis_nets_func_decl" ; then
+ nemesis_nets_func_decl="MPIDI_nem_${net}_funcs"
+ else
+ nemesis_nets_func_decl="${nemesis_nets_func_decl}, MPIDI_nem_${net}_funcs"
+ fi
- if test -n "${with_pami_include}"; then :
+ if test -z "$nemesis_nets_func_array" ; then
+ nemesis_nets_func_array="&MPIDI_nem_${net}_funcs"
+ else
+ nemesis_nets_func_array="${nemesis_nets_func_array}, &MPIDI_nem_${net}_funcs"
+ fi
+ if test -z "$nemesis_nets_macro_defs" ; then
+ nemesis_nets_macro_defs="#define $net_macro $net_index"
+ else
+ nemesis_nets_macro_defs=`printf "${nemesis_nets_macro_defs}\n#define $net_macro $net_index"`
+ fi
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_pami_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_pami_include}', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_pami_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_pami_include}"
+ net_index=`expr $net_index + 1`
-fi
+done
+nemesis_nets_array_sz=$net_index
-else
- if test -n "${with_pami}"; then :
+# Check whether --enable-nemesis-dbg-nolocal was given.
+if test "${enable_nemesis_dbg_nolocal+set}" = set; then :
+ enableval=$enable_nemesis_dbg_nolocal;
+$as_echo "#define ENABLED_NO_LOCAL 1" >>confdefs.h
+fi
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_pami}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_pami}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_pami}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_pami}/include"
-fi
+# Check whether --enable-nemesis-dbg-localoddeven was given.
+if test "${enable_nemesis_dbg_localoddeven+set}" = set; then :
+ enableval=$enable_nemesis_dbg_localoddeven;
+$as_echo "#define ENABLED_ODD_EVEN_CLIQUES 1" >>confdefs.h
fi
-fi
- if test -n "${with_pami_lib}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_pami_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_pami_lib}', not appending" >&5
+# Check whether --with-papi was given.
+if test "${with_papi+set}" = set; then :
+ withval=$with_papi;
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_pami_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_pami_lib}"
-
+ with_papi=no
fi
-else
- if test -n "${with_pami}"; then :
+if test "${with_papi}" != "no" ; then
+ if test "${with_papi}" != "yes" ; then
+ PAPI_INCLUDE="-I${with_papi}/include"
+ CPPFLAGS="$CPPFLAGS $PAPI_INCLUDE"
+# LDFLAGS="$LDFLAGS -L${with_papi}/lib"
+ LIBS="${with_papi}/lib/libpapi.a $LIBS"
+ LIBS="${with_papi}/lib/libperfctr.a $LIBS"
+ fi
+
+ ac_fn_c_check_header_mongrel "$LINENO" "papi.h" "ac_cv_header_papi_h" "$ac_includes_default"
+if test "x$ac_cv_header_papi_h" = xyes; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_pami}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_pami}/lib', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_pami}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_pami}/lib"
-
+ as_fn_error $? "'papi.h not found in ${with_papi}/include. Did you specify the correct path with --with-papi=?'" "$LINENO" 5
fi
- if test -d "${with_pami}/lib64}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_pami}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_pami}/lib64', not appending" >&5
+ echo -n "checking for papi libraries... "
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_pami}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_pami}/lib64"
-
-fi
-
-fi
-
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <papi.h>
+int
+main ()
+{
+PAPI_library_init(PAPI_VER_CURRENT);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo "yes"
+else
+ echo "yes" ; as_fn_error $? "'Cannot link with papi: Cannot find ${with_papi}/lib/libpapi.a or ${with_papi}/lib/libperfctr.a'" "$LINENO" 5
fi
-
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-D__${pamid_platform}__\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-D__${pamid_platform}__', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-D__${pamid_platform}__', appending" >&5
- CPPFLAGS="$CPPFLAGS -D__${pamid_platform}__"
-
+# AC_CHECK_LIB(papi, PAPI_accum, , [AC_MSG_ERROR(['papi library not found. Did you specify --with-papi=?'])])
+# AC_CHECK_LIB(perfctr, perfctr_info, , [AC_MSG_ERROR(['perfctr library not found. Did you specify --with-papi=?'])])
fi
+# handle missing mkstemp, or missing mkstemp declaration
+for ac_func in mkstemp
+do :
+ ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_MKSTEMP 1
+_ACEOF
-
-
-# check how to allocate shared memory
-
-# Check whether --with-shared-memory was given.
-if test "${with_shared_memory+set}" = set; then :
- withval=$with_shared_memory;
-else
- with_shared_memory=auto
fi
+done
-
-if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
- found_mmap_funcs=yes
- for ac_func in mmap munmap
+for ac_func in rand
do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ ac_fn_c_check_func "$LINENO" "rand" "ac_cv_func_rand"
+if test "x$ac_cv_func_rand" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_RAND 1
_ACEOF
-else
- found_mmap_funcs=no
fi
done
- if test "$found_mmap_funcs" = yes ; then
- with_shared_memory=mmap
-
-$as_echo "#define USE_MMAP_SHM 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using a memory-mapped file for shared memory" >&5
-$as_echo "$as_me: Using a memory-mapped file for shared memory" >&6;}
- elif test "$with_shared_memory" = mmap ; then
- as_fn_error $? "cannot support shared memory: mmap() or munmap() not found" "$LINENO" 5
- fi
-fi
-if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
- found_sysv_shm_funcs=yes
- for ac_func in shmget shmat shmctl shmdt
+for ac_func in srand
do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ ac_fn_c_check_func "$LINENO" "srand" "ac_cv_func_srand"
+if test "x$ac_cv_func_srand" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_SRAND 1
_ACEOF
-else
- found_sysv_shm_funcs=no
fi
done
- if test "$found_sysv_shm_funcs" = yes ; then
- with_shared_memory=sysv
-
-$as_echo "#define USE_SYSV_SHM 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using SYSV shared memory" >&5
-$as_echo "$as_me: Using SYSV shared memory" >&6;}
- elif test "$with_shared_memory" = sysv ; then
- as_fn_error $? "cannot support shared memory: sysv shared memory functions functions not found" "$LINENO" 5
- fi
-fi
-if test "$with_shared_memory" != "mmap" -a "$with_shared_memory" != "sysv"; then
- as_fn_error $? "cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory" "$LINENO" 5
-fi
+# Check for available shared memory functions
+#PAC_ARG_SHARED_MEMORY
+#if test "$with_shared_memory" != "mmap" -a "$with_shared_memory" != "sysv"; then
+# AC_MSG_ERROR([cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory])
+#fi
-enable_queue_binary_search=yes
-if test "${pamid_platform}" = "BGQ" ; then
- enable_queue_binary_search=no
-fi
+# Check whether --enable-nemesis-shm-collectives was given.
+if test "${enable_nemesis_shm_collectives+set}" = set; then :
+ enableval=$enable_nemesis_shm_collectives;
+$as_echo "#define ENABLED_SHM_COLLECTIVES 1" >>confdefs.h
- if test "$enable_queue_binary_search" = "yes"; then
- QUEUE_BINARY_SEARCH_SUPPORT_TRUE=
- QUEUE_BINARY_SEARCH_SUPPORT_FALSE='#'
-else
- QUEUE_BINARY_SEARCH_SUPPORT_TRUE='#'
- QUEUE_BINARY_SEARCH_SUPPORT_FALSE=
fi
-# Check whether --with-bgq-install-dir was given.
-if test "${with_bgq_install_dir+set}" = set; then :
- withval=$with_bgq_install_dir; BGQ_INSTALL_DIR=$withval
-fi
-
+# These are defines to turn on different optimizations. Turn them off only for testing
+$as_echo "#define MPID_NEM_INLINE 1" >>confdefs.h
-if test "${pamid_platform}" = "BGQ" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BGQ system software directory" >&5
-$as_echo_n "checking for BGQ system software directory... " >&6; }
+$as_echo "#define PREFETCH_CELL 1" >>confdefs.h
- bgq_driver_search_path="${BGQ_INSTALL_DIR} "
- for bgq_version in `echo 4 3 2 1`; do
- for bgq_release in `echo 4 3 2 1`; do
- for bgq_mod in `echo 4 3 2 1 0`; do
- bgq_driver_search_path+="/bgsys/drivers/V${bgq_version}R${bgq_release}M${bgq_mod}/ppc64 "
- done
- done
- done
- for bgq_driver in $bgq_driver_search_path ; do
- if test -d ${bgq_driver}/spi/include ; then
+$as_echo "#define USE_FASTBOX 1" >>confdefs.h
- found_bgq_driver=yes
+# We may need this only for tcp and related netmodules
+# Check for h_addr or h_addr_list
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
+$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
+if ${pac_cv_have_haddr_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${bgq_driver}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${bgq_driver}', not appending" >&5
+#include <netdb.h>
+int
+main ()
+{
+struct hostent hp;hp.h_addr_list[0]=0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_haddr_list=yes
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${bgq_driver}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${bgq_driver}"
-
+ pac_cv_have_haddr_list=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
+$as_echo "$pac_cv_have_haddr_list" >&6; }
+if test "$pac_cv_have_haddr_list" = "yes" ; then
+$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
+fi
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${bgq_driver}/spi/include/kernel/cnk\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${bgq_driver}/spi/include/kernel/cnk', not appending" >&5
+# If we need the socket code, see if we can use struct ifconf
+# sys/socket.h is needed on Solaris
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf" >&5
+$as_echo_n "checking whether we can use struct ifconf... " >&6; }
+if ${pac_cv_have_struct_ifconf+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${bgq_driver}/spi/include/kernel/cnk', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${bgq_driver}/spi/include/kernel/cnk"
-
-fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#include <net/if.h>
- if echo "$LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/spi/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${bgq_driver}/spi/lib', not appending" >&5
+int
+main ()
+{
+struct ifconf conftest; int s; s = sizeof(conftest);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_struct_ifconf=yes
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${bgq_driver}/spi/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${bgq_driver}/spi/lib"
-
+ pac_cv_have_struct_ifconf=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifconf" >&5
+$as_echo "$pac_cv_have_struct_ifconf" >&6; }
+# Intentionally not testing whether _SVID_SOURCE or _POSIX_C_SOURCE affects
+# ifconf availability. Making those sort of modifications at this stage
+# invalidates nearly all of our previous tests, since those macros fundamentally
+# change many features of the compiler on most platforms. See ticket #1568.
+if test "$pac_cv_have_struct_ifconf" = "yes" ; then
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/spi/lib\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${bgq_driver}/spi/lib', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${bgq_driver}/spi/lib', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${bgq_driver}/spi/lib"
+$as_echo "#define HAVE_STRUCT_IFCONF 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifreq" >&5
+$as_echo_n "checking whether we can use struct ifreq... " >&6; }
+if ${pac_cv_have_struct_ifreq+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
- if test "x${with_pami_include}" = "x" ; then :
- if test "x${with_pami}" = "x" ; then :
- if test -d ${bgq_driver}/comm/include ; then :
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#include <net/if.h>
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${bgq_driver}/comm/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${bgq_driver}/comm/include', not appending" >&5
+int
+main ()
+{
+struct ifreq conftest; int s; s = sizeof(conftest);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_struct_ifreq=yes
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${bgq_driver}/comm/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${bgq_driver}/comm/include"
-
+ pac_cv_have_struct_ifreq=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifreq" >&5
+$as_echo "$pac_cv_have_struct_ifreq" >&6; }
-else
-
+if test "$pac_cv_have_struct_ifreq" = "yes" ; then
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${bgq_driver}/comm/sys/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${bgq_driver}/comm/sys/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${bgq_driver}/comm/sys/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${bgq_driver}/comm/sys/include"
+$as_echo "#define HAVE_STRUCT_IFREQ 1" >>confdefs.h
fi
-fi
+# Check for knem options
+
+# Check whether --with-knem was given.
+if test "${with_knem+set}" = set; then :
+ withval=$with_knem; if test "${with_knem}" != "yes" -a "${with_knem}" != "no" ; then
+ CPPFLAGS="$CPPFLAGS -I${with_knem}/include"
fi
fi
- if test "x${with_pami_lib}" = "x" ; then :
- if test "x${with_pami}" = "x" ; then :
- if test "x${original_PAMILIBNAME}" = "x" ; then :
- if test -f ${bgq_driver}/comm/lib/libpami-gcc.a ; then :
- PAMILIBNAME=pami-gcc
+# Check whether --with-knem-include was given.
+if test "${with_knem_include+set}" = set; then :
+ withval=$with_knem_include; if test "${with_knem_include}" != "yes" -a "${with_knem_include}" != "no" ; then
+ CPPFLAGS="$CPPFLAGS -I${with_knem_include}"
+fi
+fi
- if echo "$LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${bgq_driver}/comm/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${bgq_driver}/comm/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${bgq_driver}/comm/lib"
+for ac_header in knem_io.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "knem_io.h" "ac_cv_header_knem_io_h" "$ac_includes_default"
+if test "x$ac_cv_header_knem_io_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_KNEM_IO_H 1
+_ACEOF
+ pac_cv_have_knem_io_h=yes
+else
+ pac_cv_have_knem_io_h=no
fi
+done
+if test "${pac_cv_have_knem_io_h}" = yes ; then
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/lib\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${bgq_driver}/comm/lib', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${bgq_driver}/comm/lib', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${bgq_driver}/comm/lib"
+$as_echo "#define HAVE_KNEM_IO_H 1" >>confdefs.h
fi
+# allow the user to select different local LMT implementations
+
+# Check whether --with-nemesis-local-lmt was given.
+if test "${with_nemesis_local_lmt+set}" = set; then :
+ withval=$with_nemesis_local_lmt;
else
- if test -f ${bgq_driver}/comm/sys/lib/libpami.a ; then :
+ with_nemesis_local_lmt=default
+fi
+
+case "$with_nemesis_local_lmt" in
+ shm_copy|default)
+ local_lmt_impl=MPID_NEM_LOCAL_LMT_SHM_COPY
+ ;;
+ dma|shm_dma|knem)
+ if test "${pac_cv_have_knem_io_h}" != yes ; then
+ as_fn_error $? "Failed to find knem_io.h for nemesis-local-lmt=knem" "$LINENO" 5
+ fi
+ local_lmt_impl=MPID_NEM_LOCAL_LMT_DMA
+ ;;
+ vmsplice)
+ local_lmt_impl=MPID_NEM_LOCAL_LMT_VMSPLICE
+ ;;
+ none)
+ local_lmt_impl=MPID_NEM_LOCAL_LMT_NONE
+ ;;
+ *)
+ as_fn_error $? "Unrecognized value $with_nemesis_local_lmt for --with-nemesis-local-lmt" "$LINENO" 5
+ ;;
+esac
+
+cat >>confdefs.h <<_ACEOF
+#define MPID_NEM_LOCAL_LMT_IMPL $local_lmt_impl
+_ACEOF
- if echo "$LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/sys/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${bgq_driver}/comm/sys/lib', not appending" >&5
+# Check whether --enable-nemesis-lock-free-queues was given.
+if test "${enable_nemesis_lock_free_queues+set}" = set; then :
+ enableval=$enable_nemesis_lock_free_queues;
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${bgq_driver}/comm/sys/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${bgq_driver}/comm/sys/lib"
+ enable_nemesis_lock_free_queues=yes
+fi
+
+if test "$enable_nemesis_lock_free_queues" = "yes" ; then
+
+$as_echo "#define MPID_NEM_USE_LOCK_FREE_QUEUES 1" >>confdefs.h
fi
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/sys/lib\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${bgq_driver}/comm/sys/lib', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${bgq_driver}/comm/sys/lib', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${bgq_driver}/comm/sys/lib"
-fi
-fi
-fi
-else
- if test -f ${bgq_driver}/comm/lib/lib${PAMILIBNAME}.a ; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${bgq_driver}/comm/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${bgq_driver}/comm/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${bgq_driver}/comm/lib"
-fi
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/lib\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${bgq_driver}/comm/lib', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${bgq_driver}/comm/lib', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${bgq_driver}/comm/lib"
-fi
-else
- if test -f ${bgq_driver}/comm/sys/lib/lib${PAMILIBNAME}.a ; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/sys/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${bgq_driver}/comm/sys/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${bgq_driver}/comm/sys/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${bgq_driver}/comm/sys/lib"
+AS=as
-fi
+ac_config_files="$ac_config_files src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c"
- if echo "$WRAPPER_LDFLAGS" | $FGREP -e "\<-L${bgq_driver}/comm/sys/lib\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') contains '-L${bgq_driver}/comm/sys/lib', not appending" >&5
-else
- echo "WRAPPER_LDFLAGS(='$WRAPPER_LDFLAGS') does not contain '-L${bgq_driver}/comm/sys/lib', appending" >&5
- WRAPPER_LDFLAGS="$WRAPPER_LDFLAGS -L${bgq_driver}/comm/sys/lib"
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis
-fi
-fi
-fi
-fi
-fi
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_ofi
- break
- fi
- done
+if test -z "$BUILD_NEMESIS_NETMOD_OFI_TRUE"; then :
- if test "x${found_bgq_driver}" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: '$bgq_driver'" >&5
-$as_echo "'$bgq_driver'" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'no'" >&5
-$as_echo "'no'" >&6; }
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:ofi" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:ofi" >&6;}
- if echo "$LIBS" | $FGREP -e "\<-lSPI\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lSPI', not appending" >&5
+# Check whether --with-ofi was given.
+if test "${with_ofi+set}" = set; then :
+ withval=$with_ofi; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ofi=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ofi=PATH expects a valid PATH" >&2;}
+ with_ofi="" ;; #(
+ *) :
+ ;;
+esac
else
- echo "LIBS(='$LIBS') does not contain '-lSPI', appending" >&5
- LIBS="$LIBS -lSPI"
-
+ with_ofi=
fi
-
- if echo "$LIBS" | $FGREP -e "\<-lSPI_cnk\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lSPI_cnk', not appending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-lSPI_cnk', appending" >&5
- LIBS="$LIBS -lSPI_cnk"
-
+# Check whether --with-ofi-include was given.
+if test "${with_ofi_include+set}" = set; then :
+ withval=$with_ofi_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ofi-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ofi-include=PATH expects a valid PATH" >&2;}
+ with_ofi_include="" ;; #(
+ *) :
+ ;;
+esac
fi
+# Check whether --with-ofi-lib was given.
+if test "${with_ofi_lib+set}" = set; then :
+ withval=$with_ofi_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ofi-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ofi-lib=PATH expects a valid PATH" >&2;}
+ with_ofi_lib="" ;; #(
+ *) :
+ ;;
+esac
+fi
- if echo "$LIBS" | $FGREP -e "\<-lrt\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lrt', not appending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-lrt', appending" >&5
- LIBS="$LIBS -lrt"
-fi
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
+ if test -n "${with_ofi_include}"; then :
- if echo "$LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lpthread', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ofi_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ofi_include}', not appending" >&5
else
- echo "LIBS(='$LIBS') does not contain '-lpthread', appending" >&5
- LIBS="$LIBS -lpthread"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ofi_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ofi_include}"
fi
+else
+ if test -n "${with_ofi}"; then :
- if echo "$LIBS" | $FGREP -e "\<-lstdc++\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lstdc++', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ofi}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ofi}/include', not appending" >&5
else
- echo "LIBS(='$LIBS') does not contain '-lstdc++', appending" >&5
- LIBS="$LIBS -lstdc++"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ofi}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ofi}/include"
fi
+fi
+fi
+ if test -n "${with_ofi_lib}"; then :
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-l${PAMILIBNAME}\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-l${PAMILIBNAME}', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ofi_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ofi_lib}', not appending" >&5
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-l${PAMILIBNAME}', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -l${PAMILIBNAME}"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ofi_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ofi_lib}"
fi
+else
+ if test -n "${with_ofi}"; then :
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lSPI\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lSPI', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ofi}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ofi}/lib', not appending" >&5
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lSPI', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lSPI"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ofi}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ofi}/lib"
fi
+ if test -d "${with_ofi}/lib64"; then :
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lSPI_cnk\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lSPI_cnk', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ofi}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ofi}/lib64', not appending" >&5
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lSPI_cnk', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lSPI_cnk"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ofi}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ofi}/lib64"
fi
-
-
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lrt\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lrt', not appending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lrt', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lrt"
+fi
fi
+fi
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lpthread', not appending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lpthread', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lpthread"
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-fi
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "rdma/fabric.h" "ac_cv_header_rdma_fabric_h" "$ac_includes_default"
+if test "x$ac_cv_header_rdma_fabric_h" = xyes; then :
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lstdc++\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lstdc++', not appending" >&5
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lstdc++', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lstdc++"
-
+ failure=yes
fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PAMI_Send" >&5
-$as_echo_n "checking for library containing PAMI_Send... " >&6; }
-if ${ac_cv_search_PAMI_Send+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fi_getinfo in -lfabric" >&5
+$as_echo_n "checking for fi_getinfo in -lfabric... " >&6; }
+if ${ac_cv_lib_fabric_fi_getinfo+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_func_search_save_LIBS=$LIBS
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfabric $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -47975,370 +46340,398 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char PAMI_Send ();
+char fi_getinfo ();
int
main ()
{
-return PAMI_Send ();
+return fi_getinfo ();
;
return 0;
}
_ACEOF
-for ac_lib in '' ${PAMILIBNAME} pami-gcc; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_PAMI_Send=$ac_res
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_fabric_fi_getinfo=yes
+else
+ ac_cv_lib_fabric_fi_getinfo=no
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_PAMI_Send+:} false; then :
- break
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-done
-if ${ac_cv_search_PAMI_Send+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fabric_fi_getinfo" >&5
+$as_echo "$ac_cv_lib_fabric_fi_getinfo" >&6; }
+if test "x$ac_cv_lib_fabric_fi_getinfo" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBFABRIC 1
+_ACEOF
+
+ LIBS="-lfabric $LIBS"
else
- ac_cv_search_PAMI_Send=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ failure=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PAMI_Send" >&5
-$as_echo "$ac_cv_search_PAMI_Send" >&6; }
-ac_res=$ac_cv_search_PAMI_Send
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-fi
+ if test "$failure" = "no" ; then
+ success=yes
+ else
+ success=no
+ fi
+ if test "$success" = "no" ; then
+ as_fn_error $? "'rdma/fabric.h or libfabric library not found. Did you specify --with-ofi= or --with-ofi-include= or --with-ofi-lib=?'" "$LINENO" 5
+ fi
- MPID_LIBTOOL_STATIC_FLAG="-all-static"
- if test "$INTERLIB_DEPS" = "yes"; then
- INTERLIB_DEPS="no"
- fi
-fi
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lfabric\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lfabric', not appending" >&5
+else
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lfabric', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lfabric"
-if test "${pamid_platform}" = "PE" ; then
- MPID_MAX_ERROR_STRING=512
fi
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_srcdir}/src/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_srcdir}/src/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_srcdir}/src/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/src/include"
-
-fi
+$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_srcdir}/src/util/wrappers\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_srcdir}/src/util/wrappers', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_srcdir}/src/util/wrappers', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/src/util/wrappers"
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_ofi
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_sock
+if test -z "$BUILD_CH3_SOCK_TRUE"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_srcdir}/src/mpid/pamid/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_srcdir}/src/mpid/pamid/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_srcdir}/src/mpid/pamid/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/src/mpid/pamid/include"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:sock" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:sock" >&6;}
+# code that formerly lived in configure.ac
+# FIXME this must be namespaced now that we've flattened things
+#
+# ABIVERSION is needed when a separate sock dll library is built
+if test "X$ABIVERSION" = "X" ; then
+ if test "X$libmpi_so_version" != X ; then
+ ABIVERSION="$libmpi_so_version"
+ else
+ # Note that an install of a sock-dll will fail if the ABI version is not
+ # available
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to set the ABIVERSION" >&5
+$as_echo "$as_me: WARNING: Unable to set the ABIVERSION" >&2;}
+ fi
fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_srcdir}/src/mpid/common/datatype\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_srcdir}/src/mpid/common/datatype', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_srcdir}/src/mpid/common/datatype', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/src/mpid/common/datatype"
-
-fi
-
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+int
+main ()
+{
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_srcdir}/src/mpid/common/locks\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_srcdir}/src/mpid/common/locks', not appending" >&5
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ lac_cv_header_net_if_h=yes
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_srcdir}/src/mpid/common/locks', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/src/mpid/common/locks"
-
+ lac_cv_header_net_if_h=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# FIXME why doesn't this use the proper machinery?
+echo "checking for net/if.h... $lac_cv_header_net_if_h"
+if test "$lac_cv_header_net_if_h" = "yes" ; then
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_srcdir}/src/mpid/common/thread\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_srcdir}/src/mpid/common/thread', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_srcdir}/src/mpid/common/thread', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/src/mpid/common/thread"
+$as_echo "#define HAVE_NET_IF_H 1" >>confdefs.h
fi
+for ac_header in \
+ netdb.h \
+ sys/ioctl.h \
+ sys/socket.h \
+ sys/sockio.h \
+ sys/types.h \
+ errno.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+fi
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_srcdir}/src/mpid/common/sched\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_srcdir}/src/mpid/common/sched', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_srcdir}/src/mpid/common/sched', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/src/mpid/common/sched"
+done
-fi
+# netinet/in.h often requires sys/types.h first. With AC 2.57, check_headers
+# does the right thing, which is to test whether the header is found
+# by the compiler, but this can cause problems when the header needs
+# other headers. 2.57 changes the syntax (!) of check_headers to allow
+# additional headers.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for netinet/in.h" >&5
+$as_echo_n "checking for netinet/in.h... " >&6; }
+if ${ac_cv_header_netinet_in_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAMI_IN_PLACE support" >&5
-$as_echo_n "checking for PAMI_IN_PLACE support... " >&6; }
-have_pami_in_place=0
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include "pami.h"
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <netinet/in.h>
int
main ()
{
-void * foo = PAMI_IN_PLACE;
+int a=0;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- have_pami_in_place=1
-
+ ac_cv_header_netinet_in_h=yes
+else
+ ac_cv_header_netinet_in_h=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$have_pami_in_place" != "0"; then
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_netinet_in_h" >&5
+$as_echo "$ac_cv_header_netinet_in_h" >&6; }
+if test "$ac_cv_header_netinet_in_h" = yes ; then
-$as_echo "#define HAVE_PAMI_IN_PLACE 1" >>confdefs.h
+$as_echo "#define HAVE_NETINET_IN_H 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'yes'" >&5
-$as_echo "'yes'" >&6; }
-else
+fi
-$as_echo "#define PAMI_IN_PLACE ((void *) -1L)" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'no'" >&5
-$as_echo "'no'" >&6; }
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_sock
+
+## begin expansion of PAC_SUBCFG_BODY_src_pmi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAMI_CLIENT_NONCONTIG support" >&5
-$as_echo_n "checking for PAMI_CLIENT_NONCONTIG support... " >&6; }
-have_pami_client_noncontig=0
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "pami.h"
-int
-main ()
-{
-int foo = PAMI_CLIENT_NONCONTIG;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- have_pami_client_noncontig=1
+# common ARG_ENABLE, shared by "simple" and "pmi2"
+# Check whether --enable-pmiport was given.
+if test "${enable_pmiport+set}" = set; then :
+ enableval=$enable_pmiport;
+else
+ enable_pmiport=default
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$have_pami_client_noncontig" != "0"; then
-$as_echo "#define HAVE_PAMI_CLIENT_NONCONTIG 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'yes'" >&5
-$as_echo "'yes'" >&6; }
+
+## end expansion of PAC_SUBCFG_BODY_src_pmi
+
+## begin expansion of PAC_SUBCFG_BODY_src_pmi_pmi2
+
+
+ if test "x$pmi_name" = "xpmi2"; then
+ BUILD_PMI_PMI2_TRUE=
+ BUILD_PMI_PMI2_FALSE='#'
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'no'" >&5
-$as_echo "'no'" >&6; }
+ BUILD_PMI_PMI2_TRUE='#'
+ BUILD_PMI_PMI2_FALSE=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAMI_CLIENT_MEMORY_OPTIMIZE support" >&5
-$as_echo_n "checking for PAMI_CLIENT_MEMORY_OPTIMIZE support... " >&6; }
-have_pami_client_memory_optimize=0
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "pami.h"
-int
-main ()
-{
-int foo = PAMI_CLIENT_MEMORY_OPTIMIZE;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- have_pami_client_memory_optimize=1
+if test -z "$BUILD_PMI_PMI2_TRUE"; then :
+
+if test "$enable_pmiport" != "no" ; then
+ enable_pmiport=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$have_pami_client_memory_optimize" != "0"; then
-$as_echo "#define HAVE_PAMI_CLIENT_MEMORY_OPTIMIZE 1" >>confdefs.h
+USE_PMI2_API=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'yes'" >&5
-$as_echo "'yes'" >&6; }
+# Check whether --enable-pmiport was given.
+if test "${enable_pmiport+set}" = set; then :
+ enableval=$enable_pmiport;
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'no'" >&5
-$as_echo "'no'" >&6; }
+ enable_pmiport=default
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAMI_GEOMETRY_NONCONTIG support" >&5
-$as_echo_n "checking for PAMI_GEOMETRY_NONCONTIG support... " >&6; }
-have_pami_geometry_noncontig=0
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "pami.h"
-int
-main ()
-{
-int foo = PAMI_GEOMETRY_NONCONTIG;
- ;
- return 0;
-}
+for ac_header in unistd.h string.h stdlib.h sys/socket.h strings.h assert.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- have_pami_geometry_noncontig=1
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$have_pami_geometry_noncontig" != "0"; then
-$as_echo "#define HAVE_PAMI_GEOMETRY_NONCONTIG 1" >>confdefs.h
+done
+
+for ac_func in snprintf
+do :
+ ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'yes'" >&5
-$as_echo "'yes'" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'no'" >&5
-$as_echo "'no'" >&6; }
fi
+done
+
+if test "$ac_cv_func_snprintf" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
+$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_snprintf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAMI_GEOMETRY_MEMORY_OPTIMIZE support" >&5
-$as_echo_n "checking for PAMI_GEOMETRY_MEMORY_OPTIMIZE support... " >&6; }
-have_pami_geometry_memory_optimize=0
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include "pami.h"
+#include <stdio.h>
+void (*fptr)(void) = (void(*)(void))snprintf;
int
main ()
{
-int foo = PAMI_GEOMETRY_MEMORY_OPTIMIZE;
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- have_pami_geometry_memory_optimize=1
-
+ pac_cv_func_decl_snprintf=no
+else
+ pac_cv_func_decl_snprintf=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$have_pami_geometry_memory_optimize" != "0"; then
-
-$as_echo "#define HAVE_PAMI_GEOMETRY_MEMORY_OPTIMIZE 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'yes'" >&5
-$as_echo "'yes'" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'no'" >&5
-$as_echo "'no'" >&6; }
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
+$as_echo "$pac_cv_func_decl_snprintf" >&6; }
+if test "$pac_cv_func_decl_snprintf" = "yes" ; then
-
-
-
-
-
-
-
-
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_SNPRINTF_DECL 1
+_ACEOF
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_pamid
-
-## begin expansion of PAC_SUBCFG_BODY_src_pm_remshell
+fi
+for ac_func in strncasecmp
+do :
+ ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
+if test "x$ac_cv_func_strncasecmp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCASECMP 1
+_ACEOF
-# the pm_names variable is set by the top level configure
-build_remshell=no
-for pm_name in $pm_names ; do
- if test "X$pm_name" = "Xremshell" ; then
- build_remshell=yes
- fi
+fi
done
- if test "X$build_remshell" = "Xyes"; then
- BUILD_PM_REMSHELL_TRUE=
- BUILD_PM_REMSHELL_FALSE='#'
-else
- BUILD_PM_REMSHELL_TRUE='#'
- BUILD_PM_REMSHELL_FALSE=
+
+#
+# PM's that need support for a port can set the environment variable
+# NEED_PMIPORT in their setup_pm script.
+if test "$NEED_PMIPORT" = "yes" -a "$enable_pmiport" != "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&5
+$as_echo "$as_me: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&2;}
+ enable_pmiport=yes
fi
+#
+if test "$enable_pmiport" = "yes" ; then
+ # Check for the necessary includes and functions
+ missing_headers=no
+ for ac_header in \
+ sys/types.h \
+ sys/param.h \
+ sys/socket.h \
+ netinet/in.h \
+ netinet/tcp.h \
+ sys/un.h \
+ netdb.h \
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
-# first_pm_name is set by the top level configure
- if test "X$first_pm_name" = "Xremshell"; then
- PRIMARY_PM_REMSHELL_TRUE=
- PRIMARY_PM_REMSHELL_FALSE='#'
else
- PRIMARY_PM_REMSHELL_TRUE='#'
- PRIMARY_PM_REMSHELL_FALSE=
+ missing_headers=yes
fi
+done
-if test -z "$BUILD_PM_REMSHELL_TRUE"; then :
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR src/pm/remshell" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR src/pm/remshell" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
+$as_echo_n "checking for library containing socket... " >&6; }
+if ${ac_cv_search_socket+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Check that we are using the simple PMI implementation
-# (Selecting multiple PMs may require incompatible PMI implementations
-# (e.g., remshell and SMPD).
-if test -z "$PM_REQUIRES_PMI" ; then
- PM_REQUIRES_PMI=simple
-elif test "$PM_REQUIRES_PMI" != "simple" ; then
- echo "remshell requires the simple PMI implementation; $PM_REQUIRES_PMI has already been selected"
- exit 1
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_socket=$ac_res
fi
-
-# tell src/pm/util to configure itself
-build_pm_util=yes
-
-# Check whether --enable-allowport was given.
-if test "${enable_allowport+set}" = set; then :
- enableval=$enable_allowport;
-else
- enable_allowport=yes
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_socket+:} false; then :
+ break
fi
+done
+if ${ac_cv_search_socket+:} false; then :
-# Check whether --enable-onsig was given.
-if test "${enable_onsig+set}" = set; then :
- enableval=$enable_onsig;
else
- enable_onsig=no
+ ac_cv_search_socket=no
fi
-
-# Check whether --enable-newsession was given.
-if test "${enable_newsession+set}" = set; then :
- enableval=$enable_newsession;
-else
- enable_newsession=yes
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
+$as_echo "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socketpair" >&5
-$as_echo_n "checking for library containing socketpair... " >&6; }
-if ${ac_cv_search_socketpair+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -48351,16 +46744,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char socketpair ();
+char gethostbyname ();
int
main ()
{
-return socketpair ();
+return gethostbyname ();
;
return 0;
}
_ACEOF
-for ac_lib in '' socket; do
+for ac_lib in '' nsl; do
if test -z "$ac_lib"; then
ac_res="none required"
else
@@ -48368,156 +46761,212 @@ for ac_lib in '' socket; do
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_socketpair=$ac_res
+ ac_cv_search_gethostbyname=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if ${ac_cv_search_socketpair+:} false; then :
+ if ${ac_cv_search_gethostbyname+:} false; then :
break
fi
done
-if ${ac_cv_search_socketpair+:} false; then :
+if ${ac_cv_search_gethostbyname+:} false; then :
else
- ac_cv_search_socketpair=no
+ ac_cv_search_gethostbyname=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socketpair" >&5
-$as_echo "$ac_cv_search_socketpair" >&6; }
-ac_res=$ac_cv_search_socketpair
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
-for ac_header in sys/types.h signal.h sys/ptrace.h
+ missing_functions=no
+ for ac_func in socket setsockopt gethostbyname
do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
+else
+ missing_functions=yes
fi
-
done
-for ac_func in strsignal
-do :
- ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal"
-if test "x$ac_cv_func_strsignal" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRSIGNAL 1
+
+ if test "$missing_functions" = "no" ; then
+
+$as_echo "#define USE_PMI_PORT 1" >>confdefs.h
+
+ else
+ as_fn_error $? "Cannot build simple PMI with support for an IP port because of missing functions" "$LINENO" 5
+ fi
+fi
+
+# Check for socklen_t . If undefined, define it as int
+# (note the conditional inclusion of sys/socket.h)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
+$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
+if ${pac_cv_have_socklen_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+typedef struct { double a; int b; } socklen_t;
+int
+main ()
+{
+socklen_t a;a.a=1.0;
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_socklen_t=no
+else
+ pac_cv_have_socklen_t=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
+$as_echo "$pac_cv_have_socklen_t" >&6; }
+if test "$pac_cv_have_socklen_t" = no ; then
+
+$as_echo "#define socklen_t int" >>confdefs.h
fi
-done
+# Check for h_addr or h_addr_list
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
+$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
+if ${pac_cv_have_haddr_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-for ac_func in sigaction signal sigset
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <netdb.h>
+int
+main ()
+{
+struct hostent hp;hp.h_addr_list[0]=0;
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_haddr_list=yes
+else
+ pac_cv_have_haddr_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
+$as_echo "$pac_cv_have_haddr_list" >&6; }
+if test "$pac_cv_have_haddr_list" = "yes" ; then
+
+$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
fi
-done
-sigaction_ok=no
-if test "$ac_cv_func_sigaction" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction" >&5
-$as_echo_n "checking for struct sigaction... " >&6; }
-if ${pac_cv_struct_sigaction+:} false; then :
+
+if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
+$as_echo_n "checking whether __attribute__ allowed... " >&6; }
+if ${pac_cv_gnu_attr_pure+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <signal.h>
+int foo(int) __attribute__ ((pure));
int
main ()
{
-
-struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
+int a;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_sigaction="yes"
+ pac_cv_gnu_attr_pure=yes
else
- pac_cv_struct_sigaction="no"
+ pac_cv_gnu_attr_pure=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction" >&5
-$as_echo "$pac_cv_struct_sigaction" >&6; }
- if test "$pac_cv_struct_sigaction" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction with _POSIX_SOURCE" >&5
-$as_echo_n "checking for struct sigaction with _POSIX_SOURCE... " >&6; }
-if ${pac_cv_struct_sigaction_needs_posix+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
+$as_echo "$pac_cv_gnu_attr_pure" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
+$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
+if ${pac_cv_gnu_attr_format+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#define _POSIX_SOURCE
-#include <signal.h>
+int foo(char *,...) __attribute__ ((format(printf,1,2)));
int
main ()
{
-
-struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
+int a;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_sigaction_needs_posix="yes"
+ pac_cv_gnu_attr_format=yes
else
- pac_cv_struct_sigaction_needs_posix="no"
+ pac_cv_gnu_attr_format=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_needs_posix" >&5
-$as_echo "$pac_cv_struct_sigaction_needs_posix" >&6; }
- if test "$pac_cv_struct_sigaction_needs_posix" = "yes" ; then
- sigaction_ok=yes
- fi
- else
- sigaction_ok=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
+$as_echo "$pac_cv_gnu_attr_format" >&6; }
+ if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+
+$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
+
fi
fi
-# Decide on the signal handler to use
-if test "$ac_cv_func_sigaction" = "yes" -a "$sigaction_ok" = "yes" ; then
- # FIXME DJG: where should this get set?
- if test "$pac_struct_sigaction_needs_posix" = yes ; then
-$as_echo "#define NEEDS_POSIX_FOR_SIGACTION 1" >>confdefs.h
- fi
+fi
-$as_echo "#define USE_SIGACTION 1" >>confdefs.h
+## end expansion of PAC_SUBCFG_BODY_src_pmi_pmi2
-elif test "$ac_cv_func_signal" = "yes" ; then
+## begin expansion of PAC_SUBCFG_BODY_src_pmi_simple
-$as_echo "#define USE_SIGNAL 1" >>confdefs.h
+ if test "x$pmi_name" = "xsimple"; then
+ BUILD_PMI_SIMPLE_TRUE=
+ BUILD_PMI_SIMPLE_FALSE='#'
+else
+ BUILD_PMI_SIMPLE_TRUE='#'
+ BUILD_PMI_SIMPLE_FALSE=
fi
-if test "$enable_allowport" = "yes" ; then
-$as_echo "#define MPIEXEC_ALLOW_PORT 1" >>confdefs.h
-fi
+if test -z "$BUILD_PMI_SIMPLE_TRUE"; then :
-# some of these may be redundant with the upper level code, although the caching
-# should detect it and make the performance impact a non-issue
-for ac_header in string.h sys/time.h unistd.h stdlib.h sys/socket.h wait.h errno.h
+if test "$enable_pmiport" != "no" ; then
+ enable_pmiport=yes
+fi
+for ac_header in unistd.h string.h stdlib.h sys/socket.h strings.h assert.h arpa/inet.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -48530,317 +46979,514 @@ fi
done
-
-for ac_func in ptrace
+for ac_func in snprintf
do :
- ac_fn_c_check_func "$LINENO" "ptrace" "ac_cv_func_ptrace"
-if test "x$ac_cv_func_ptrace" = xyes; then :
+ ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_PTRACE 1
+#define HAVE_SNPRINTF 1
_ACEOF
fi
done
-# It isn't enough to find ptrace. We also need the ptrace
-# parameters, which some systems, such as IRIX, do not define.
-if test "$ac_cv_func_ptrace" = yes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ptrace named parameters" >&5
-$as_echo_n "checking for ptrace named parameters... " >&6; }
-if ${pac_cv_has_ptrace_parms+:} false; then :
+if test "$ac_cv_func_snprintf" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
+$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_snprintf+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <sys/ptrace.h>
+#include <stdio.h>
+void (*fptr)(void) = (void(*)(void))snprintf;
int
main ()
{
-int i = PTRACE_CONT;
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_has_ptrace_parms=yes
+ pac_cv_func_decl_snprintf=no
else
- pac_cv_has_ptrace_parms=no
+ pac_cv_func_decl_snprintf=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_ptrace_parms" >&5
-$as_echo "$pac_cv_has_ptrace_parms" >&6; }
- if test "$pac_cv_has_ptrace_parms" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
+$as_echo "$pac_cv_func_decl_snprintf" >&6; }
+if test "$pac_cv_func_decl_snprintf" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_SNPRINTF_DECL 1
+_ACEOF
-$as_echo "#define HAVE_PTRACE_CONT /**/" >>confdefs.h
- fi
fi
-if test "$enable_newsession" = "yes" ; then
+fi
+for ac_func in strncasecmp
+do :
+ ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
+if test "x$ac_cv_func_strncasecmp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCASECMP 1
+_ACEOF
-$as_echo "#define USE_NEW_SESSION 1" >>confdefs.h
+fi
+done
+
+
+#
+# PM's that need support for a port can set the environment variable
+# NEED_PMIPORT in their setup_pm script.
+if test "$NEED_PMIPORT" = "yes" -a "$enable_pmiport" != "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&5
+$as_echo "$as_me: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&2;}
+ enable_pmiport=yes
+fi
+#
+if test "$enable_pmiport" = "yes" ; then
+ # Check for the necessary includes and functions
+ missing_headers=no
+ for ac_header in \
+ sys/types.h \
+ sys/param.h \
+ sys/socket.h \
+ netinet/in.h \
+ netinet/tcp.h \
+ sys/un.h \
+ netdb.h \
+
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+else
+ missing_headers=yes
fi
-# Extract the first word of "ssh", so it can be a program name with args.
-set dummy ssh; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SSH+:} false; then :
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
+$as_echo_n "checking for library containing socket... " >&6; }
+if ${ac_cv_search_socket+:} false; then :
$as_echo_n "(cached) " >&6
else
- case $SSH in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_SSH="$SSH" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_SSH="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_socket=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_socket+:} false; then :
+ break
+fi
done
- done
-IFS=$as_save_IFS
+if ${ac_cv_search_socket+:} false; then :
- ;;
-esac
-fi
-SSH=$ac_cv_path_SSH
-if test -n "$SSH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SSH" >&5
-$as_echo "$SSH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ ac_cv_search_socket=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
+$as_echo "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+fi
-# Extract the first word of "rsh", so it can be a program name with args.
-set dummy rsh; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_RSH+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
$as_echo_n "(cached) " >&6
else
- case $RSH in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_RSH="$RSH" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_RSH="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_gethostbyname=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_gethostbyname+:} false; then :
+ break
+fi
done
- done
-IFS=$as_save_IFS
+if ${ac_cv_search_gethostbyname+:} false; then :
- ;;
-esac
-fi
-RSH=$ac_cv_path_RSH
-if test -n "$RSH"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RSH" >&5
-$as_echo "$RSH" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+fi
+
+ missing_functions=no
+ for ac_func in socket setsockopt gethostbyname
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
-if test -z "$SSH" && test -n "$RSH" ; then
- remshell="$RSH"
else
- remshell="$SSH"
+ missing_functions=yes
fi
+done
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_MACHINES_PATH "$eval_datadir:."
-_ACEOF
+ if test "$missing_functions" = "no" ; then
+$as_echo "#define USE_PMI_PORT 1" >>confdefs.h
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_REMOTE_SHELL "$remshell"
+ else
+ as_fn_error $? "Cannot build simple PMI with support for an IP port because of missing functions" "$LINENO" 5
+ fi
+fi
+
+# Check for socklen_t . If undefined, define it as int
+# (note the conditional inclusion of sys/socket.h)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
+$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
+if ${pac_cv_have_socklen_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+typedef struct { double a; int b; } socklen_t;
+int
+main ()
+{
+socklen_t a;a.a=1.0;
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_socklen_t=no
+else
+ pac_cv_have_socklen_t=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
+$as_echo "$pac_cv_have_socklen_t" >&6; }
+if test "$pac_cv_have_socklen_t" = no ; then
+$as_echo "#define socklen_t int" >>confdefs.h
+fi
+# Check for h_addr or h_addr_list
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
+$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
+if ${pac_cv_have_haddr_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <netdb.h>
+int
+main ()
+{
+struct hostent hp;hp.h_addr_list[0]=0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_haddr_list=yes
+else
+ pac_cv_have_haddr_list=no
fi
-## end expansion of PAC_SUBCFG_BODY_src_pm_remshell
-
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
+$as_echo "$pac_cv_have_haddr_list" >&6; }
+if test "$pac_cv_have_haddr_list" = "yes" ; then
-if test -z "$BUILD_CH3_TRUE"; then :
+$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR CH3 DEVICE" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR CH3 DEVICE" >&6;}
+fi
-# ----------------------------------------------------------------------------
-# include ftb functionality
-# ----------------------------------------------------------------------------
-# Check whether --enable-ftb was given.
-if test "${enable_ftb+set}" = set; then :
- enableval=$enable_ftb;
-$as_echo "#define ENABLE_FTB 1" >>confdefs.h
+if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
+$as_echo_n "checking whether __attribute__ allowed... " >&6; }
+if ${pac_cv_gnu_attr_pure+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(int) __attribute__ ((pure));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gnu_attr_pure=yes
+else
+ pac_cv_gnu_attr_pure=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
+$as_echo "$pac_cv_gnu_attr_pure" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
+$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
+if ${pac_cv_gnu_attr_format+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-# Check whether --with-ftb was given.
-if test "${with_ftb+set}" = set; then :
- withval=$with_ftb; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ftb=PATH expects a valid PATH" >&2;}
- with_ftb="" ;; #(
- *) :
- ;;
-esac
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(char *,...) __attribute__ ((format(printf,1,2)));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gnu_attr_format=yes
else
- with_ftb=
+ pac_cv_gnu_attr_format=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
+$as_echo "$pac_cv_gnu_attr_format" >&6; }
+ if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
-# Check whether --with-ftb-include was given.
-if test "${with_ftb_include+set}" = set; then :
- withval=$with_ftb_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ftb-include=PATH expects a valid PATH" >&2;}
- with_ftb_include="" ;; #(
- *) :
- ;;
-esac
+ fi
fi
-# Check whether --with-ftb-lib was given.
-if test "${with_ftb_lib+set}" = set; then :
- withval=$with_ftb_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ftb-lib=PATH expects a valid PATH" >&2;}
- with_ftb_lib="" ;; #(
- *) :
- ;;
-esac
fi
+## end expansion of PAC_SUBCFG_BODY_src_pmi_simple
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
-
- if test -n "${with_ftb_include}"; then :
+## begin expansion of PAC_SUBCFG_BODY_src_pmi_pmi2_simple
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ftb_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ftb_include}', not appending" >&5
+ if test "x$pmi_name" = "xpmi2/simple"; then
+ BUILD_PMI_PMI2_SIMPLE_TRUE=
+ BUILD_PMI_PMI2_SIMPLE_FALSE='#'
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ftb_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ftb_include}"
-
+ BUILD_PMI_PMI2_SIMPLE_TRUE='#'
+ BUILD_PMI_PMI2_SIMPLE_FALSE=
fi
-else
- if test -n "${with_ftb}"; then :
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ftb}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ftb}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ftb}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ftb}/include"
+if test -z "$BUILD_PMI_PMI2_SIMPLE_TRUE"; then :
+if test "$enable_pmiport" != "no" ; then
+ enable_pmiport=yes
fi
-fi
-fi
+USE_PMI2_API=yes
- if test -n "${with_ftb_lib}"; then :
+for ac_header in unistd.h string.h stdlib.h sys/socket.h strings.h assert.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+fi
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb_lib}', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ftb_lib}"
+done
+
+for ac_func in snprintf
+do :
+ ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
fi
+done
+
+if test "$ac_cv_func_snprintf" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
+$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_snprintf+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- if test -n "${with_ftb}"; then :
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+void (*fptr)(void) = (void(*)(void))snprintf;
+int
+main ()
+{
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb}/lib', not appending" >&5
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_snprintf=no
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ftb}/lib"
-
+ pac_cv_func_decl_snprintf=yes
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
+$as_echo "$pac_cv_func_decl_snprintf" >&6; }
+if test "$pac_cv_func_decl_snprintf" = "yes" ; then
- if test -d "${with_ftb}/lib64}"; then :
-
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_SNPRINTF_DECL 1
+_ACEOF
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb}/lib64', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ftb}/lib64"
fi
fi
+for ac_func in strncasecmp
+do :
+ ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
+if test "x$ac_cv_func_strncasecmp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCASECMP 1
+_ACEOF
fi
+done
+#
+# PM's that need support for a port can set the environment variable
+# NEED_PMIPORT in their setup_pm script.
+if test "$NEED_PMIPORT" = "yes" -a "$enable_pmiport" != "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&5
+$as_echo "$as_me: WARNING: The process manager requires the pmiport capability. Do not specify --disable-pmiport." >&2;}
+ enable_pmiport=yes
fi
+#
+if test "$enable_pmiport" = "yes" ; then
+ # Check for the necessary includes and functions
+ missing_headers=no
+ for ac_header in \
+ sys/types.h \
+ sys/param.h \
+ sys/socket.h \
+ netinet/in.h \
+ netinet/tcp.h \
+ sys/un.h \
+ netdb.h \
-
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-
-
-
- failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "libftb.h" "ac_cv_header_libftb_h" "$ac_includes_default"
-if test "x$ac_cv_header_libftb_h" = xyes; then :
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
else
- failure=yes
+ missing_headers=yes
fi
+done
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FTB_Connect in -lftb" >&5
-$as_echo_n "checking for FTB_Connect in -lftb... " >&6; }
-if ${ac_cv_lib_ftb_FTB_Connect+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
+$as_echo_n "checking for library containing socket... " >&6; }
+if ${ac_cv_search_socket+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lftb $LIBS"
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -48850,1394 +47496,1613 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char FTB_Connect ();
+char socket ();
int
main ()
{
-return FTB_Connect ();
+return socket ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_ftb_FTB_Connect=yes
-else
- ac_cv_lib_ftb_FTB_Connect=no
+for ac_lib in '' socket; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_socket=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ conftest$ac_exeext
+ if ${ac_cv_search_socket+:} false; then :
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ftb_FTB_Connect" >&5
-$as_echo "$ac_cv_lib_ftb_FTB_Connect" >&6; }
-if test "x$ac_cv_lib_ftb_FTB_Connect" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBFTB 1
-_ACEOF
-
- LIBS="-lftb $LIBS"
+done
+if ${ac_cv_search_socket+:} false; then :
else
- failure=yes
+ ac_cv_search_socket=no
fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
+$as_echo "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- if test "$failure" = "no" ; then
- success=yes
- else
- success=no
- fi
-
- if test "$success" = "no" ; then
- as_fn_error $? "'libftb.h or libftb library not found. Did you specify --with-ftb= or --with-ftb-include= or --with-ftb-lib=?'" "$LINENO" 5
- fi
-
-
+fi
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lftb\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lftb', not appending" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lftb', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lftb"
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_gethostbyname=$ac_res
fi
-
-
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-
-
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_gethostbyname+:} false; then :
+ break
fi
+done
+if ${ac_cv_search_gethostbyname+:} false; then :
-
-
-# Check whether --with-ch3-rank-bits was given.
-if test "${with_ch3_rank_bits+set}" = set; then :
- withval=$with_ch3_rank_bits; rankbits=$withval
else
- rankbits=16
+ ac_cv_search_gethostbyname=no
fi
-
-if test "$rankbits" != "16" -a "$rankbits" != "32" ; then
- as_fn_error $? "Only 16 or 32-bit ranks are supported" "$LINENO" 5
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-cat >>confdefs.h <<_ACEOF
-#define CH3_RANK_BITS $rankbits
-_ACEOF
-
+fi
-for ac_header in assert.h limits.h string.h sys/types.h sys/uio.h uuid/uuid.h \
- time.h ctype.h unistd.h arpa/inet.h sys/socket.h
+ missing_functions=no
+ for ac_func in socket setsockopt gethostbyname
do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
+else
+ missing_functions=yes
fi
-
done
-# net/if.h requires special handling on darwin. The following code is
-# straight out of the autoconf-2.63 manual. Also, sys/socket.h (above)
-# is a prerequisite.
-for ac_header in net/if.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#include <stdio.h>
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
+ if test "$missing_functions" = "no" ; then
-"
-if test "x$ac_cv_header_net_if_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_NET_IF_H 1
-_ACEOF
+$as_echo "#define USE_PMI_PORT 1" >>confdefs.h
+ else
+ as_fn_error $? "Cannot build simple PMI with support for an IP port because of missing functions" "$LINENO" 5
+ fi
fi
-done
+# Check for socklen_t . If undefined, define it as int
+# (note the conditional inclusion of sys/socket.h)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
+$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
+if ${pac_cv_have_socklen_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Check for special types
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = xyes; then :
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+typedef struct { double a; int b; } socklen_t;
+int
+main ()
+{
+socklen_t a;a.a=1.0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_socklen_t=no
else
+ pac_cv_have_socklen_t=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
+$as_echo "$pac_cv_have_socklen_t" >&6; }
+if test "$pac_cv_have_socklen_t" = no ; then
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
+$as_echo "#define socklen_t int" >>confdefs.h
fi
+# Check for h_addr or h_addr_list
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
+$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
+if ${pac_cv_have_haddr_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Check for functions
-for ac_func in inet_pton
-do :
- ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton"
-if test "x$ac_cv_func_inet_pton" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_INET_PTON 1
+#include <netdb.h>
+int
+main ()
+{
+struct hostent hp;hp.h_addr_list[0]=0;
+ ;
+ return 0;
+}
_ACEOF
-
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_haddr_list=yes
+else
+ pac_cv_have_haddr_list=no
fi
-done
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
+$as_echo "$pac_cv_have_haddr_list" >&6; }
+if test "$pac_cv_have_haddr_list" = "yes" ; then
-for ac_func in gethostname
-do :
- ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
-if test "x$ac_cv_func_gethostname" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTNAME 1
-_ACEOF
+$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
fi
-done
-if test "$ac_cv_func_gethostname" = "yes" ; then
- # Do we need to declare gethostname?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
-$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
-if ${pac_cv_func_decl_gethostname+:} false; then :
+if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
+$as_echo_n "checking whether __attribute__ allowed... " >&6; }
+if ${pac_cv_gnu_attr_pure+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <unistd.h>
-void (*fptr)(void) = (void(*)(void))gethostname;
+int foo(int) __attribute__ ((pure));
int
main ()
{
-
+int a;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_gethostname=no
+ pac_cv_gnu_attr_pure=yes
else
- pac_cv_func_decl_gethostname=yes
+ pac_cv_gnu_attr_pure=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
-$as_echo "$pac_cv_func_decl_gethostname" >&6; }
-if test "$pac_cv_func_decl_gethostname" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
+$as_echo "$pac_cv_gnu_attr_pure" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
+$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
+if ${pac_cv_gnu_attr_format+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_GETHOSTNAME_DECL 1
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(char *,...) __attribute__ ((format(printf,1,2)));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gnu_attr_format=yes
+else
+ pac_cv_gnu_attr_format=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
+$as_echo "$pac_cv_gnu_attr_format" >&6; }
+ if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
+ fi
fi
+
fi
-for ac_func in CFUUIDCreate uuid_generate time
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+## end expansion of PAC_SUBCFG_BODY_src_pmi_pmi2_simple
+
+## begin expansion of PAC_SUBCFG_BODY_src_binding_fortran_use_mpi
+
+
+if test -z "$BUILD_FC_BINDING_TRUE"; then :
+
+# FIXME XXX DJG this code came from a sub-configure in src/binding/fortran/use_mpi. Why
+# isn't this just all up in the top-level configure? Alternatively, why doesn't
+# most/all of the f90 configure code from the top level configure.ac live here
+# instead? Is it because of the c/f77/f90 interplay?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR F90 CODE" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR F90 CODE" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
fi
-done
-# ensure that atomic primitives are available
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenPA atomic primitive availability" >&5
-$as_echo_n "checking for OpenPA atomic primitive availability... " >&6; }
+# Determine the extension for Fortran 90 files (it isn't always .f90)
-# Double check that we actually have a present and working OpenPA
-# configuration. This must be AC_COMPILE_IFELSE instead of the stronger
-# AC_LINK_IFELSE because the OpenPA library will typically not be
-# completely built by this point.
-#
-# This test was taken from sanity.c in the OpenPA test suite.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extension for Fortran 90 programs" >&5
+$as_echo_n "checking for extension for Fortran 90 programs... " >&6; }
+ac_fc_srcext="f90"
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-#include <opa_primitives.h> /* will include pthread.h if present and needed */
+cat > conftest.$ac_ext <<_ACEOF
-int
-main ()
-{
+ program main
- OPA_int_t a, b;
- int c;
-#if defined(OPA_USE_LOCK_BASED_PRIMITIVES)
- pthread_mutex_t shm_lock;
- OPA_Interprocess_lock_init(&shm_lock, 1/*isLeader*/);
-#endif
+ end
- OPA_store_int(&a, 0);
- OPA_store_int(&b, 1);
- OPA_add_int(&a, 10);
- OPA_assert(10 == OPA_load_int(&a));
- c = OPA_cas_int(&a, 10, 11);
- OPA_assert(10 == c);
- c = OPA_swap_int(&a, OPA_load_int(&b));
- OPA_assert(11 == c);
- OPA_assert(1 == OPA_load_int(&a));
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: f90" >&5
+$as_echo "f90" >&6; }
+
+else
+
+ ac_fc_srcext="f"
+ cat > conftest.$ac_ext <<_ACEOF
+
+ program main
+
+ end
- ;
- return 0;
-}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- openpa_present_and_working=yes
+if ac_fn_fc_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: f" >&5
+$as_echo "f" >&6; }
+
else
- openpa_present_and_working=no
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown!" >&5
+$as_echo "unknown!" >&6; }
+
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$openpa_present_and_working" = yes ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-#include <opa_primitives.h>
-#if defined(OPA_USE_LOCK_BASED_PRIMITIVES)
-#error "lock-based emulation is currently in use"
-#endif
+FCEXT=$ac_fc_srcext
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- using_emulated_atomics=no
-else
- using_emulated_atomics=yes
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
+# Determine the precision and range of the standard Fortran types. This
+# isn't quite enough for a full implementation of the Type_create_f90_xxx
+# routines, but will handle most programs. We can extend this by trying to
+# find (through selected_real_kind and selected_int_kind) types with larger or
+# smaller precisions and/or ranges than the basic types.
- if test "$using_emulated_atomics" = "yes" ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+pac_msg="the precision and range of reals"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pac_msg" >&5
+$as_echo_n "checking for $pac_msg... " >&6; }
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+rm -f pac_fconftest.out
+if test "$cross_compiling" = yes; then :
-#include <opa_primitives.h>
-/* may also be undefined in older (pre-r106) versions of OPA */
-#if !defined(OPA_EXPLICIT_EMULATION)
-#error "lock-based emulation was automatic, not explicit"
-#endif
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_REAL_MODEL" >&5
+$as_echo "$CROSS_F90_REAL_MODEL" >&6; }
+ FC_REAL_MODEL=$CROSS_F90_REAL_MODEL
+
+else
+ cat > conftest.$ac_ext <<_ACEOF
+
+
+ program main
+ real aa
+ open(8, file="pac_fconftest.out", form="formatted")
+ write(8,*) precision(aa), ",", range(aa)
+ close(8)
+ end
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- atomics_explicitly_emulated=yes
-else
- atomics_explicitly_emulated=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
- if test "$atomics_explicitly_emulated" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (emulated)" >&5
-$as_echo "yes (emulated)" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "
-The ch3 device was selected yet no native atomic primitives are
-available on this platform. OpenPA can emulate atomic primitives using
-locks by specifying --with-atomic-primitives=no but performance will be
-very poor. This override should only be specified for correctness
-testing purposes." "$LINENO" 5
- fi
+if ac_fn_fc_try_run "$LINENO"; then :
+
+ if test -s pac_fconftest.out ; then
+ pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_fc_num_model" >&5
+$as_echo "$pac_fc_num_model" >&6; }
+ FC_REAL_MODEL=$pac_fc_num_model
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
+$as_echo "$as_me: WARNING: No output from test program!" >&2;}
fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "
-The ch3 devies was selected yet a set of working OpenPA headers
-were not found. Please check the OpenPA configure step for errors." "$LINENO" 5
-fi
+ rm -f pac_fconftest.out
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
- $as_echo_n "(cached) " >&6
else
- ac_cv_c_bigendian=unknown
- # See if we're dealing with a universal compiler.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __APPLE_CC__
- not a universal capable compiler
- #endif
- typedef int dummy;
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine $pac_msg" >&5
+$as_echo "$as_me: WARNING: Failed to run program to determine $pac_msg" >&2;}
- # Check for potential -arch flags. It is not universal unless
- # there are at least two -arch flags with different values.
- ac_arch=
- ac_prev=
- for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
- if test -n "$ac_prev"; then
- case $ac_word in
- i?86 | x86_64 | ppc | ppc64)
- if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
- ac_arch=$ac_word
- else
- ac_cv_c_bigendian=universal
- break
- fi
- ;;
- esac
- ac_prev=
- elif test "x$ac_word" = "x-arch"; then
- ac_prev=arch
- fi
- done
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
- && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
- && LITTLE_ENDIAN)
- bogus endian macros
- #endif
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
- #endif
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
+#
+
+pac_msg="the precision and range of double precision"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pac_msg" >&5
+$as_echo_n "checking for $pac_msg... " >&6; }
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+rm -f pac_fconftest.out
+if test "$cross_compiling" = yes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_DOUBLE_MODEL" >&5
+$as_echo "$CROSS_F90_DOUBLE_MODEL" >&6; }
+ FC_DOUBLE_MODEL=$CROSS_F90_DOUBLE_MODEL
+
else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
+ cat > conftest.$ac_ext <<_ACEOF
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
- bogus endian macros
- #endif
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to _BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
+ program main
+ double precision aa
+ open(8, file="pac_fconftest.out", form="formatted")
+ write(8,*) precision(aa), ",", range(aa)
+ close(8)
+ end
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
- not big endian
- #endif
- ;
- return 0;
-}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
+if ac_fn_fc_try_run "$LINENO"; then :
+
+ if test -s pac_fconftest.out ; then
+ pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_fc_num_model" >&5
+$as_echo "$pac_fc_num_model" >&6; }
+ FC_DOUBLE_MODEL=$pac_fc_num_model
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
+$as_echo "$as_me: WARNING: No output from test program!" >&2;}
+ fi
+ rm -f pac_fconftest.out
+
else
- ac_cv_c_bigendian=no
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine $pac_msg" >&5
+$as_echo "$as_me: WARNING: Failed to run program to determine $pac_msg" >&2;}
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # Compile a test program.
- if test "$cross_compiling" = yes; then :
- # Try to guess by grepping values from an object file.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-short int ascii_mm[] =
- { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
- { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
- int use_ascii (int i) {
- return ascii_mm[i] + ascii_ii[i];
- }
- short int ebcdic_ii[] =
- { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
- { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
- int use_ebcdic (int i) {
- return ebcdic_mm[i] + ebcdic_ii[i];
- }
- extern int foo;
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
- ac_cv_c_bigendian=yes
- fi
- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
- if test "$ac_cv_c_bigendian" = unknown; then
- ac_cv_c_bigendian=no
- else
- # finding both strings is unlikely to happen, but who knows?
- ac_cv_c_bigendian=unknown
- fi
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+#
+
+pac_msg="the range of integer"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pac_msg" >&5
+$as_echo_n "checking for $pac_msg... " >&6; }
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+rm -f pac_fconftest.out
+if test "$cross_compiling" = yes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_INTEGER_MODEL" >&5
+$as_echo "$CROSS_F90_INTEGER_MODEL" >&6; }
+ FC_INTEGER_MODEL=$CROSS_F90_INTEGER_MODEL
+
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
+ cat > conftest.$ac_ext <<_ACEOF
+
+
+ program main
+ integer aa
+ open(8, file="pac_fconftest.out", form="formatted")
+ write(8,*) range(aa)
+ close(8)
+ end
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long int l;
- char c[sizeof (long int)];
- } u;
- u.l = 1;
- return u.c[sizeof (long int) - 1] == 1;
- ;
- return 0;
-}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_bigendian=no
+if ac_fn_fc_try_run "$LINENO"; then :
+
+ if test -s pac_fconftest.out ; then
+ pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_fc_num_model" >&5
+$as_echo "$pac_fc_num_model" >&6; }
+ FC_INTEGER_MODEL=$pac_fc_num_model
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
+$as_echo "$as_me: WARNING: No output from test program!" >&2;}
+ fi
+ rm -f pac_fconftest.out
+
else
- ac_cv_c_bigendian=yes
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine $pac_msg" >&5
+$as_echo "$as_me: WARNING: Failed to run program to determine $pac_msg" >&2;}
+
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
- yes)
- $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
- no)
- ;; #(
- universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
- ;; #(
- *)
- as_fn_error $? "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_sock
+# Try to find the available integer kinds by using selected_int_kind
+# This produces a table of range,kind
-if test -z "$BUILD_CH3_SOCK_TRUE"; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for available integer kinds" >&5
+$as_echo_n "checking for available integer kinds... " >&6; }
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:sock" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:sock" >&6;}
-# code that formerly lived in configure.ac
+rm -f pac_fconftest.out
+if test "$cross_compiling" = yes; then :
-# FIXME this must be namespaced now that we've flattened things
-#
-# ABIVERSION is needed when a separate sock dll library is built
-if test "X$ABIVERSION" = "X" ; then
- if test "X$libmpi_so_version" != X ; then
- ABIVERSION="$libmpi_so_version"
- else
- # Note that an install of a sock-dll will fail if the ABI version is not
- # available
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to set the ABIVERSION" >&5
-$as_echo "$as_me: WARNING: Unable to set the ABIVERSION" >&2;}
- fi
-fi
+ pac_validKinds="`echo \"$CROSS_F90_ALL_INTEGER_MODELS\" | tr ',' ':'`"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CROSS_F90_ALL_INTEGER_MODELS" >&5
+$as_echo "$CROSS_F90_ALL_INTEGER_MODELS" >&6; }
+ FC_ALL_INTEGER_MODELS=$CROSS_F90_ALL_INTEGER_MODELS
+else
+ cat > conftest.$ac_ext <<_ACEOF
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>
+ program main
+ integer r, lastkind
+ lastkind=selected_int_kind(1)
+ open(8, file="pac_fconftest.out", form="formatted")
+ do r=2,30
+ k = selected_int_kind(r)
+ if (k .ne. lastkind) then
+ write(8,*) r-1, ",", lastkind
+ lastkind = k
+ endif
+ if (k .le. 0) then
+ exit
+ endif
+ enddo
+ if (k.ne.lastkind) then
+ write(8,*) 31, ",", k
+ endif
+ close(8)
+ end
-int
-main ()
-{
- ;
- return 0;
-}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- lac_cv_header_net_if_h=yes
-else
- lac_cv_header_net_if_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if ac_fn_fc_try_run "$LINENO"; then :
-# FIXME why doesn't this use the proper machinery?
-echo "checking for net/if.h... $lac_cv_header_net_if_h"
+ if test -s pac_fconftest.out ; then
+ pac_flag="`sed -e 's/ */ /g' pac_fconftest.out | tr '\012' ','`"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_flag" >&5
+$as_echo "$pac_flag" >&6; }
+ pac_validKinds="`sed -e 's/ */ /g' pac_fconftest.out | tr '\012' ':'`"
+ FC_ALL_INTEGER_MODELS=$pac_flag
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
+$as_echo "$as_me: WARNING: No output from test program!" >&2;}
+ fi
+ rm -f pac_fconftest.out
-if test "$lac_cv_header_net_if_h" = "yes" ; then
+else
-$as_echo "#define HAVE_NET_IF_H 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error" >&5
+$as_echo "Error" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed to run program to determine available integer models" >&5
+$as_echo "$as_me: WARNING: Failed to run program to determine available integer models" >&2;}
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
-for ac_header in \
- netdb.h \
- sys/ioctl.h \
- sys/socket.h \
- sys/sockio.h \
- sys/types.h \
- errno.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-fi
-done
+#
-# netinet/in.h often requires sys/types.h first. With AC 2.57, check_headers
-# does the right thing, which is to test whether the header is found
-# by the compiler, but this can cause problems when the header needs
-# other headers. 2.57 changes the syntax (!) of check_headers to allow
-# additional headers.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for netinet/in.h" >&5
-$as_echo_n "checking for netinet/in.h... " >&6; }
-if ${ac_cv_header_netinet_in_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for available integer ranges" >&5
+$as_echo_n "checking for available integer ranges... " >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
+
+
+#ifdef F77_NAME_UPPER
+#define cisize_ CISIZE
+#define isize_ ISIZE
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define cisize_ cisize
+#define isize_ isize
#endif
-#include <netinet/in.h>
-int
-main ()
+int cisize_(char *,char*);
+int cisize_(char *i1p, char *i2p)
{
-int a=0;
- ;
- return 0;
+ int isize_val=0;
+ isize_val = (int)(i2p - i1p);
+ return isize_val;
}
+
+
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_netinet_in_h=yes
+
+
+{ $as_echo "$as_me:$LINENO: mv conftest.$OBJEXT pac_conftest.$OBJEXT" >&5
+ (eval mv conftest.$OBJEXT pac_conftest.$OBJEXT) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ pac_ccompile_ok=yes
+
else
- ac_cv_header_netinet_in_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_netinet_in_h" >&5
-$as_echo "$ac_cv_header_netinet_in_h" >&6; }
-if test "$ac_cv_header_netinet_in_h" = yes ; then
-$as_echo "#define HAVE_NETINET_IN_H 1" >>confdefs.h
+ pac_ccompile_ok=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test "$pac_ccompile_ok" = "yes" ; then
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ saved_IFS=$IFS
+ IFS=:
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_sock
+ pac_flag=""
+ for rangekind in $pac_validKinds ; do
+ kind="`echo $rangekind | sed -e 's/.*,//'`"
+ range="`echo $rangekind | sed -e 's/,.*//'`"
+ cat > conftest.$ac_ext <<_ACEOF
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_sock
-if test -z "$BUILD_MPID_COMMON_SOCK_TRUE"; then :
+ program main
+ integer (kind=$kind) a(2)
+ integer cisize
+ open(8, file="pac_fconftest.out", form="formatted")
+ write(8,*) $range, ",", $kind, ",", cisize( a(1), a(2) )
+ close(8)
+ end
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR src/mpid/common/sock" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR src/mpid/common/sock" >&6;}
-# Adding this prevents the pesky "(strerror() not found)" problem, which can be
-# very frustrating in the sock code, the most likely to receive an error code
-# from the system. [goodell@ 2008-01-10]
-for ac_func in strerror
-do :
- ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
-if test "x$ac_cv_func_strerror" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRERROR 1
_ACEOF
+ IFS=$saved_IFS
+ rm -f pac_fconftest.out
+ if test "$cross_compiling" = yes; then :
-fi
-done
+ pac_flag="$CROSS_F90_INTEGER_MODEL_MAP"
+
+else
+ if ac_fn_fc_try_run "$LINENO"; then :
+ if test -s pac_fconftest.out ; then
+ sizes="`sed -e 's/ */ /g' pac_fconftest.out`"
+ pac_flag="$pac_flag { $sizes },"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No output from test program!" >&5
+$as_echo "$as_me: WARNING: No output from test program!" >&2;}
+ fi
+ rm -f pac_fconftest.out
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran program fails to build or run!" >&5
+$as_echo "$as_me: WARNING: Fortran program fails to build or run!" >&2;}
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_common_sock
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam
+fi
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_sched
+ IFS=:
+ done
+ IFS=$saved_IFS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_flag" >&5
+$as_echo "$pac_flag" >&6; }
+ FC_INTEGER_MODEL_MAP=$pac_flag
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_common_sched
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_thread
+ac_config_files="$ac_config_files src/binding/fortran/use_mpi/mpif90model.h"
-if test -z "$BUILD_MPID_COMMON_THREAD_TRUE"; then :
- :
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_common_thread
-
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_datatype
+## end expansion of PAC_SUBCFG_BODY_src_binding_fortran_use_mpi
-# FIXME XXX DJG TODO move configure tests for datatype/dataloop code here?
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_tcp
-## end expansion of PAC_SUBCFG_BODY_src_mpid_common_datatype
+# nothing to do for tcp right now
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_util_sock
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_tcp
- if test -z "$BUILD_CH3_UTIL_SOCK_TRUE"; then :
+## begin expansion of PAC_SUBCFG_BODY_src_pm
- { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR CH3U SOCK CODE" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR CH3U SOCK CODE" >&6;}
- for ac_header in assert.h limits.h string.h sys/types.h sys/uio.h \
- time.h ctype.h unistd.h arpa/inet.h sys/socket.h net/if.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+for pm_name in $pm_names ; do
+ case $pm_name in #(
+ hydra) :
+ build_pm_hydra=yes ;; #(
+ *) :
+ ;;
+esac
+done
+# we handle these conditionals here in the BODY because they depend on logic in
+# the main portion of the top-level configure
+ if test "x$build_pm_hydra" = "xyes"; then
+ BUILD_PM_HYDRA_TRUE=
+ BUILD_PM_HYDRA_FALSE='#'
+else
+ BUILD_PM_HYDRA_TRUE='#'
+ BUILD_PM_HYDRA_FALSE=
fi
-done
+
+# do nothing extra here for now
- # Check for special types
- ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = xyes; then :
+## end expansion of PAC_SUBCFG_BODY_src_pm
+
+## begin expansion of PAC_SUBCFG_BODY_src_pm_gforker
+
+# the pm_names variable is set by the top level configure
+build_gforker=no
+for pm_name in $pm_names ; do
+ if test "X$pm_name" = "Xgforker" ; then
+ build_gforker=yes
+ fi
+done
+ if test "X$build_gforker" = "Xyes"; then
+ BUILD_PM_GFORKER_TRUE=
+ BUILD_PM_GFORKER_FALSE='#'
else
+ BUILD_PM_GFORKER_TRUE='#'
+ BUILD_PM_GFORKER_FALSE=
+fi
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
+# first_pm_name is set by the top level configure
+ if test "X$first_pm_name" = "Xgforker"; then
+ PRIMARY_PM_GFORKER_TRUE=
+ PRIMARY_PM_GFORKER_FALSE='#'
+else
+ PRIMARY_PM_GFORKER_TRUE='#'
+ PRIMARY_PM_GFORKER_FALSE=
fi
- # Check for functions
- for ac_func in inet_pton
-do :
- ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton"
-if test "x$ac_cv_func_inet_pton" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_INET_PTON 1
-_ACEOF
+if test -z "$BUILD_PM_GFORKER_TRUE"; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR src/pm/gforker" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR src/pm/gforker" >&6;}
+
+# Check that we are using the simple PMI implementation
+# (Selecting multiple PMs may require incompatible PMI implementations
+# (e.g., gforker and SMPD).
+if test -z "$PM_REQUIRES_PMI" ; then
+ PM_REQUIRES_PMI=simple
+elif test "$PM_REQUIRES_PMI" != "simple" ; then
+ echo "gforker requires the simple PMI implementation; $PM_REQUIRES_PMI has already been selected"
+ exit 1
fi
-done
- for ac_func in gethostname
-do :
- ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
-if test "x$ac_cv_func_gethostname" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTNAME 1
-_ACEOF
+# tell src/pm/util to configure itself
+build_pm_util=yes
+# Check whether --enable-allowport was given.
+if test "${enable_allowport+set}" = set; then :
+ enableval=$enable_allowport;
+else
+ enable_allowport=yes
fi
-done
- if test "$ac_cv_func_gethostname" = "yes" ; then
- # Do we need to declare gethostname?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
-$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
-if ${pac_cv_func_decl_gethostname+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socketpair" >&5
+$as_echo_n "checking for library containing socketpair... " >&6; }
+if ${ac_cv_search_socketpair+:} false; then :
$as_echo_n "(cached) " >&6
else
-
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <unistd.h>
-void (*fptr)(void) = (void(*)(void))gethostname;
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socketpair ();
int
main ()
{
-
+return socketpair ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_gethostname=no
+for ac_lib in '' socket; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_socketpair=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_socketpair+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_socketpair+:} false; then :
+
else
- pac_cv_func_decl_gethostname=yes
+ ac_cv_search_socketpair=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
-$as_echo "$pac_cv_func_decl_gethostname" >&6; }
-if test "$pac_cv_func_decl_gethostname" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socketpair" >&5
+$as_echo "$ac_cv_search_socketpair" >&6; }
+ac_res=$ac_cv_search_socketpair
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_GETHOSTNAME_DECL 1
+fi
+
+for ac_header in sys/types.h signal.h sys/ptrace.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
+fi
+
+done
+
+for ac_func in strsignal
+do :
+ ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal"
+if test "x$ac_cv_func_strsignal" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRSIGNAL 1
+_ACEOF
fi
+done
- fi
+for ac_func in sigaction signal sigset
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+fi
+done
- # If we need the socket code, see if we can use struct ifconf
- # sys/socket.h is needed on Solaris
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf" >&5
-$as_echo_n "checking whether we can use struct ifconf... " >&6; }
-if ${pac_cv_have_struct_ifconf+:} false; then :
+sigaction_ok=no
+if test "$ac_cv_func_sigaction" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction" >&5
+$as_echo_n "checking for struct sigaction... " >&6; }
+if ${pac_cv_struct_sigaction+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#include <net/if.h>
-
+#include <signal.h>
int
main ()
{
-struct ifconf conftest;
+
+struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_struct_ifconf=yes
+ pac_cv_struct_sigaction="yes"
else
- pac_cv_have_struct_ifconf=no
+ pac_cv_struct_sigaction="no"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifconf" >&5
-$as_echo "$pac_cv_have_struct_ifconf" >&6; }
-
- if test "$pac_cv_have_struct_ifconf" = "no" ; then
- # Try again with _SVID_SOURCE
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf with _SVID_SOURCE" >&5
-$as_echo_n "checking whether we can use struct ifconf with _SVID_SOURCE... " >&6; }
-if ${pac_cv_have_struct_ifconf_with_svid+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction" >&5
+$as_echo "$pac_cv_struct_sigaction" >&6; }
+ if test "$pac_cv_struct_sigaction" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction with _POSIX_SOURCE" >&5
+$as_echo_n "checking for struct sigaction with _POSIX_SOURCE... " >&6; }
+if ${pac_cv_struct_sigaction_needs_posix+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-#define _SVID_SOURCE
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#include <net/if.h>
-
+#define _POSIX_SOURCE
+#include <signal.h>
int
main ()
{
-struct ifconf conftest;
+
+struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_struct_ifconf_with_svid=yes
+ pac_cv_struct_sigaction_needs_posix="yes"
else
- pac_cv_have_struct_ifconf_with_svid=no
+ pac_cv_struct_sigaction_needs_posix="no"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifconf_with_svid" >&5
-$as_echo "$pac_cv_have_struct_ifconf_with_svid" >&6; }
- if test "$pac_cv_have_struct_ifconf_with_svid" = yes ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_needs_posix" >&5
+$as_echo "$pac_cv_struct_sigaction_needs_posix" >&6; }
+ if test "$pac_cv_struct_sigaction_needs_posix" = "yes" ; then
+ sigaction_ok=yes
+ fi
+ else
+ sigaction_ok=yes
+ fi
+fi
+# Decide on the signal handler to use
+if test "$ac_cv_func_sigaction" = "yes" -a "$sigaction_ok" = "yes" ; then
+ # FIXME DJG: where should this get set?
+ if test "$pac_struct_sigaction_needs_posix" = yes ; then
-$as_echo "#define USE_SVIDSOURCE_FOR_IFCONF 1" >>confdefs.h
+$as_echo "#define NEEDS_POSIX_FOR_SIGACTION 1" >>confdefs.h
- fi
fi
- if test "$pac_cv_have_struct_ifconf" = "no" -a \
- "$pac_cv_have_struct_ifconf_with_svid" = "no" ; then
- # Try again with undef _POSIX_C_SOURCE
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf without _POSIX_C_SOURCE" >&5
-$as_echo_n "checking whether we can use struct ifconf without _POSIX_C_SOURCE... " >&6; }
-if ${pac_cv_have_struct_ifconf_without_posix+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+$as_echo "#define USE_SIGACTION 1" >>confdefs.h
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+elif test "$ac_cv_func_signal" = "yes" ; then
-#undef _POSIX_C_SOURCE
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#include <net/if.h>
+$as_echo "#define USE_SIGNAL 1" >>confdefs.h
-int
-main ()
-{
-struct ifconf conftest;
- ;
- return 0;
-}
+fi
+if test "$enable_allowport" = "yes" ; then
+
+$as_echo "#define MPIEXEC_ALLOW_PORT 1" >>confdefs.h
+
+fi
+
+# some of these may be redundant with the upper level code, although the caching
+# should detect it and make the performance impact a non-issue
+for ac_header in string.h sys/time.h unistd.h stdlib.h sys/socket.h wait.h errno.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_struct_ifconf_without_posix=yes
+
+fi
+
+done
+
+
+
+fi
+## end expansion of PAC_SUBCFG_BODY_src_pm_gforker
+
+## begin expansion of PAC_SUBCFG_BODY_src_pmi_slurm
+
+
+ if test "x$pmi_name" = "xslurm"; then
+ BUILD_PMI_SLURM_TRUE=
+ BUILD_PMI_SLURM_FALSE='#'
else
- pac_cv_have_struct_ifconf_without_posix=no
+ BUILD_PMI_SLURM_TRUE='#'
+ BUILD_PMI_SLURM_FALSE=
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test -z "$BUILD_PMI_SLURM_TRUE"; then :
+
+
+# sets CPPFLAGS and LDFLAGS
+
+
+# Check whether --with-slurm was given.
+if test "${with_slurm+set}" = set; then :
+ withval=$with_slurm; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-slurm=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-slurm=PATH expects a valid PATH" >&2;}
+ with_slurm="" ;; #(
+ *) :
+ ;;
+esac
+else
+ with_slurm=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifconf_without_posix" >&5
-$as_echo "$pac_cv_have_struct_ifconf_without_posix" >&6; }
- if test "$pac_cv_have_struct_ifconf_without_posix" = yes ; then
-$as_echo "#define USE_NOPOSIX_FOR_IFCONF 1" >>confdefs.h
- fi
- fi
+# Check whether --with-slurm-include was given.
+if test "${with_slurm_include+set}" = set; then :
+ withval=$with_slurm_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-slurm-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-slurm-include=PATH expects a valid PATH" >&2;}
+ with_slurm_include="" ;; #(
+ *) :
+ ;;
+esac
+fi
- if test "$pac_cv_have_struct_ifconf" = "yes" -o \
- "$pac_cv_have_struct_ifconf_with_svid" = "yes" -o \
- "$pac_cv_have_struct_ifconf_without_posix" ; then
-$as_echo "#define HAVE_STRUCT_IFCONF 1" >>confdefs.h
+# Check whether --with-slurm-lib was given.
+if test "${with_slurm_lib+set}" = set; then :
+ withval=$with_slurm_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-slurm-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-slurm-lib=PATH expects a valid PATH" >&2;}
+ with_slurm_lib="" ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
+
+ if test -n "${with_slurm_include}"; then :
- fi
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_slurm_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_slurm_include}', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_slurm_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_slurm_include}"
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_util_sock
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis
+else
+ if test -n "${with_slurm}"; then :
-if test -z "$BUILD_CH3_NEMESIS_TRUE"; then :
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_slurm}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_slurm}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_slurm}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_slurm}/include"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis" >&6;}
+fi
-## below is code that formerly lived in configure.ac
+fi
+fi
-### Only include papi in CPPFLAGS configure will handle libs, and checking that it exists, etc.
-##if test -n "${papi_dir}" ; then
-## PAC_APPEND_FLAG([-I${papi_dir}/include], [CPPFLAGS])
-##fi
+ if test -n "${with_slurm_lib}"; then :
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_slurm_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_slurm_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_slurm_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_slurm_lib}"
-int
-main ()
-{
+fi
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- lac_cv_header_net_if_h=yes
else
- lac_cv_header_net_if_h=no
+ if test -n "${with_slurm}"; then :
+
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_slurm}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_slurm}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_slurm}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_slurm}/lib"
+
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "checking for net/if.h... $lac_cv_header_net_if_h"
+ if test -d "${with_slurm}/lib64"; then :
-if test "$lac_cv_header_net_if_h" = "yes" ; then
-$as_echo "#define HAVE_NET_IF_H 1" >>confdefs.h
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_slurm}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_slurm}/lib64', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_slurm}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_slurm}/lib64"
fi
-for ac_header in \
- assert.h \
- netdb.h \
- unistd.h \
- sched.h \
- sys/mman.h \
- sys/ioctl.h \
- sys/socket.h \
- sys/sockio.h \
- sys/types.h \
- errno.h \
- sys/ipc.h \
- sys/shm.h \
+fi
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
fi
-done
+ac_fn_c_check_header_mongrel "$LINENO" "slurm/pmi.h" "ac_cv_header_slurm_pmi_h" "$ac_includes_default"
+if test "x$ac_cv_header_slurm_pmi_h" = xyes; then :
-# netinet/in.h often requires sys/types.h first. With AC 2.57, check_headers
-# does the right thing, which is to test whether the header is found
-# by the compiler, but this can cause problems when the header needs
-# other headers. 2.57 changes the syntax (!) of check_headers to allow
-# additional headers.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for netinet/in.h" >&5
-$as_echo_n "checking for netinet/in.h... " >&6; }
-if ${ac_cv_header_netinet_in_h+:} false; then :
- $as_echo_n "(cached) " >&6
else
+ as_fn_error $? "could not find slurm/pmi.h. Configure aborted" "$LINENO" 5
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PMI_Init in -lpmi" >&5
+$as_echo_n "checking for PMI_Init in -lpmi... " >&6; }
+if ${ac_cv_lib_pmi_PMI_Init+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpmi $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
#endif
-#include <netinet/in.h>
+char PMI_Init ();
int
main ()
{
-int a=0;
+return PMI_Init ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_netinet_in_h=yes
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pmi_PMI_Init=yes
else
- ac_cv_header_netinet_in_h=no
+ ac_cv_lib_pmi_PMI_Init=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_netinet_in_h" >&5
-$as_echo "$ac_cv_header_netinet_in_h" >&6; }
-if test "$ac_cv_header_netinet_in_h" = yes ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pmi_PMI_Init" >&5
+$as_echo "$ac_cv_lib_pmi_PMI_Init" >&6; }
+if test "x$ac_cv_lib_pmi_PMI_Init" = xyes; then :
-$as_echo "#define HAVE_NETINET_IN_H 1" >>confdefs.h
+
+ if echo "$LIBS" | $FGREP -e "\<-lpmi\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-lpmi', not prepending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-lpmi', prepending" >&5
+ LIBS="-lpmi $LIBS"
fi
-# Check whether --enable-fast was given.
-if test "${enable_fast+set}" = set; then :
- enableval=$enable_fast;
+
+
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lpmi\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lpmi', not prepending" >&5
else
- enable_fast=no
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lpmi', prepending" >&5
+ WRAPPER_LIBS="-lpmi $WRAPPER_LIBS"
+
+fi
+
+else
+ as_fn_error $? "could not find the slurm libpmi. Configure aborted" "$LINENO" 5
fi
-# make sure we support signal
-for ac_header in signal.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default"
-if test "x$ac_cv_header_signal_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SIGNAL_H 1
-_ACEOF
fi
-done
+## end expansion of PAC_SUBCFG_BODY_src_pmi_slurm
-for ac_func in signal
-do :
- ac_fn_c_check_func "$LINENO" "signal" "ac_cv_func_signal"
-if test "x$ac_cv_func_signal" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SIGNAL 1
-_ACEOF
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_mxm
+
+if test -z "$BUILD_NEMESIS_NETMOD_MXM_TRUE"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:mxm" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:mxm" >&6;}
+
+
+# Check whether --with-mxm was given.
+if test "${with_mxm+set}" = set; then :
+ withval=$with_mxm; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-mxm=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-mxm=PATH expects a valid PATH" >&2;}
+ with_mxm="" ;; #(
+ *) :
+ ;;
+esac
+else
+ with_mxm=
fi
-done
-nemesis_nets_dirs=""
-nemesis_nets_strings=""
-nemesis_nets_array=""
-nemesis_nets_func_decl=""
-nemesis_nets_func_array=""
-nemesis_nets_macro_defs=""
-net_index=0
-for net in $nemesis_networks ; do
- if test ! -d $srcdir/src/mpid/ch3/channels/nemesis/netmod/${net} ; then
- as_fn_error $? "Network module ${net} is unknown \"$srcdir/src/mpid/ch3/channels/nemesis/netmod/${net}\"" "$LINENO" 5
- fi
- net_macro=`echo $net | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- net_macro="MPIDI_NEM_${net_macro}"
+# Check whether --with-mxm-include was given.
+if test "${with_mxm_include+set}" = set; then :
+ withval=$with_mxm_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-mxm-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-mxm-include=PATH expects a valid PATH" >&2;}
+ with_mxm_include="" ;; #(
+ *) :
+ ;;
+esac
+fi
- if test -z "$nemesis_nets_array" ; then
- nemesis_nets_array="$net_macro"
- else
- nemesis_nets_array="$nemesis_nets_array, $net_macro"
- fi
- if test -z "$nemesis_nets_strings" ; then
- nemesis_nets_strings="\"$net\""
- else
- nemesis_nets_strings="$nemesis_nets_strings, \"$net\""
- fi
+# Check whether --with-mxm-lib was given.
+if test "${with_mxm_lib+set}" = set; then :
+ withval=$with_mxm_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-mxm-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-mxm-lib=PATH expects a valid PATH" >&2;}
+ with_mxm_lib="" ;; #(
+ *) :
+ ;;
+esac
+fi
- if test -z "$nemesis_nets_dirs" ; then
- nemesis_nets_dirs="${net}"
- else
- nemesis_nets_dirs="$nemesis_nets_dirs ${net}"
- fi
- if test -z "$nemesis_nets_func_decl" ; then
- nemesis_nets_func_decl="MPIDI_nem_${net}_funcs"
- else
- nemesis_nets_func_decl="${nemesis_nets_func_decl}, MPIDI_nem_${net}_funcs"
- fi
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
- if test -z "$nemesis_nets_func_array" ; then
- nemesis_nets_func_array="&MPIDI_nem_${net}_funcs"
- else
- nemesis_nets_func_array="${nemesis_nets_func_array}, &MPIDI_nem_${net}_funcs"
- fi
+ if test -n "${with_mxm_include}"; then :
- if test -z "$nemesis_nets_macro_defs" ; then
- nemesis_nets_macro_defs="#define $net_macro $net_index"
- else
- nemesis_nets_macro_defs=`printf "${nemesis_nets_macro_defs}\n#define $net_macro $net_index"`
- fi
- net_index=`expr $net_index + 1`
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_mxm_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_mxm_include}', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_mxm_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_mxm_include}"
+
+fi
+
+else
+ if test -n "${with_mxm}"; then :
+
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_mxm}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_mxm}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_mxm}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_mxm}/include"
+
+fi
+
+fi
+fi
-done
-nemesis_nets_array_sz=$net_index
+ if test -n "${with_mxm_lib}"; then :
-# Check whether --enable-nemesis-dbg-nolocal was given.
-if test "${enable_nemesis_dbg_nolocal+set}" = set; then :
- enableval=$enable_nemesis_dbg_nolocal;
-$as_echo "#define ENABLED_NO_LOCAL 1" >>confdefs.h
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_mxm_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_mxm_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_mxm_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_mxm_lib}"
fi
+else
+ if test -n "${with_mxm}"; then :
-# Check whether --enable-nemesis-dbg-localoddeven was given.
-if test "${enable_nemesis_dbg_localoddeven+set}" = set; then :
- enableval=$enable_nemesis_dbg_localoddeven;
-$as_echo "#define ENABLED_ODD_EVEN_CLIQUES 1" >>confdefs.h
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_mxm}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_mxm}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_mxm}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_mxm}/lib"
fi
+ if test -d "${with_mxm}/lib64"; then :
-# Check whether --with-papi was given.
-if test "${with_papi+set}" = set; then :
- withval=$with_papi;
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_mxm}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_mxm}/lib64', not appending" >&5
else
- with_papi=no
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_mxm}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_mxm}/lib64"
+
fi
+fi
-if test "${with_papi}" != "no" ; then
- if test "${with_papi}" != "yes" ; then
- PAPI_INCLUDE="-I${with_papi}/include"
- CPPFLAGS="$CPPFLAGS $PAPI_INCLUDE"
-# LDFLAGS="$LDFLAGS -L${with_papi}/lib"
- LIBS="${with_papi}/lib/libpapi.a $LIBS"
- LIBS="${with_papi}/lib/libperfctr.a $LIBS"
- fi
+fi
- ac_fn_c_check_header_mongrel "$LINENO" "papi.h" "ac_cv_header_papi_h" "$ac_includes_default"
-if test "x$ac_cv_header_papi_h" = xyes; then :
+fi
+
+
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+
+
+
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "mxm/api/mxm_api.h" "ac_cv_header_mxm_api_mxm_api_h" "$ac_includes_default"
+if test "x$ac_cv_header_mxm_api_mxm_api_h" = xyes; then :
else
- as_fn_error $? "'papi.h not found in ${with_papi}/include. Did you specify the correct path with --with-papi=?'" "$LINENO" 5
+ failure=yes
fi
-
- echo -n "checking for papi libraries... "
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mxm_get_version in -lmxm" >&5
+$as_echo_n "checking for mxm_get_version in -lmxm... " >&6; }
+if ${ac_cv_lib_mxm_mxm_get_version+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmxm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <papi.h>
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mxm_get_version ();
int
main ()
{
-PAPI_library_init(PAPI_VER_CURRENT);
+return mxm_get_version ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- echo "yes"
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_mxm_mxm_get_version=yes
else
- echo "yes" ; as_fn_error $? "'Cannot link with papi: Cannot find ${with_papi}/lib/libpapi.a or ${with_papi}/lib/libperfctr.a'" "$LINENO" 5
+ ac_cv_lib_mxm_mxm_get_version=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mxm_mxm_get_version" >&5
+$as_echo "$ac_cv_lib_mxm_mxm_get_version" >&6; }
+if test "x$ac_cv_lib_mxm_mxm_get_version" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMXM 1
+_ACEOF
+ LIBS="-lmxm $LIBS"
-
-# AC_CHECK_LIB(papi, PAPI_accum, , [AC_MSG_ERROR(['papi library not found. Did you specify --with-papi=?'])])
-# AC_CHECK_LIB(perfctr, perfctr_info, , [AC_MSG_ERROR(['perfctr library not found. Did you specify --with-papi=?'])])
+else
+ failure=yes
fi
-# handle missing mkstemp, or missing mkstemp declaration
-for ac_func in mkstemp
-do :
- ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
-if test "x$ac_cv_func_mkstemp" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MKSTEMP 1
-_ACEOF
+ if test "$failure" = "no" ; then
+ success=yes
+ else
+ success=no
+ fi
-fi
-done
+ if test "$success" = "no" ; then
+ as_fn_error $? "'mxm/api/mxm_api.h or libmxm library not found. Did you specify --with-mxm= or --with-mxm-include= or --with-mxm-lib=?'" "$LINENO" 5
+ fi
-for ac_func in rand
-do :
- ac_fn_c_check_func "$LINENO" "rand" "ac_cv_func_rand"
-if test "x$ac_cv_func_rand" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_RAND 1
-_ACEOF
-fi
-done
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-for ac_func in srand
-do :
- ac_fn_c_check_func "$LINENO" "srand" "ac_cv_func_srand"
-if test "x$ac_cv_func_srand" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SRAND 1
-_ACEOF
+ ac_fn_c_check_header_mongrel "$LINENO" "mxm/api/mxm_api.h" "ac_cv_header_mxm_api_mxm_api_h" "$ac_includes_default"
+if test "x$ac_cv_header_mxm_api_mxm_api_h" = xyes; then :
-fi
-done
+else
+ as_fn_error $? "'mxm/api/mxm_api.h not found.'" "$LINENO" 5
-# Check for available shared memory functions
+fi
-# check how to allocate shared memory
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Check whether --with-shared-memory was given.
-if test "${with_shared_memory+set}" = set; then :
- withval=$with_shared_memory;
+ #include "mxm/api/mxm_version.h"
+#ifndef MXM_VERSION
+#error "MXM Version is less than 1.5, please upgrade"
+#endif
+#
+#if MXM_API < MXM_VERSION(3,1)
+#error "MXM Version is less than 3.1, please upgrade"
+#endif
+int
+main ()
+{
+int a=0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ mxm_api_version=yes
else
- with_shared_memory=auto
+ mxm_api_version=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$mxm_api_version" = no ; then
+ as_fn_error $? "'MXM API version Problem. Are you running a recent version of MXM (at least 3.1)?'" "$LINENO" 5
+ fi;
+$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
-if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
- found_mmap_funcs=yes
- for ac_func in mmap munmap
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lmxm\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lmxm', not appending" >&5
else
- found_mmap_funcs=no
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lmxm', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lmxm"
+
fi
-done
- if test "$found_mmap_funcs" = yes ; then
- with_shared_memory=mmap
-$as_echo "#define USE_MMAP_SHM 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using a memory-mapped file for shared memory" >&5
-$as_echo "$as_me: Using a memory-mapped file for shared memory" >&6;}
- elif test "$with_shared_memory" = mmap ; then
- as_fn_error $? "cannot support shared memory: mmap() or munmap() not found" "$LINENO" 5
- fi
fi
-if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
- found_sysv_shm_funcs=yes
- for ac_func in shmget shmat shmctl shmdt
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_mxm
+
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_util_sock
+
+ if test -z "$BUILD_CH3_UTIL_SOCK_TRUE"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR CH3U SOCK CODE" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR CH3U SOCK CODE" >&6;}
+
+ for ac_header in assert.h limits.h string.h sys/types.h sys/uio.h \
+ time.h ctype.h unistd.h arpa/inet.h sys/socket.h net/if.h
do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
-else
- found_sysv_shm_funcs=no
fi
-done
- if test "$found_sysv_shm_funcs" = yes ; then
- with_shared_memory=sysv
+done
-$as_echo "#define USE_SYSV_SHM 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using SYSV shared memory" >&5
-$as_echo "$as_me: Using SYSV shared memory" >&6;}
- elif test "$with_shared_memory" = sysv ; then
- as_fn_error $? "cannot support shared memory: sysv shared memory functions functions not found" "$LINENO" 5
- fi
-fi
+ # Check for special types
+ ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
-if test "$with_shared_memory" != "mmap" -a "$with_shared_memory" != "sysv"; then
- as_fn_error $? "cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory" "$LINENO" 5
-fi
+else
-# Check whether --enable-nemesis-shm-collectives was given.
-if test "${enable_nemesis_shm_collectives+set}" = set; then :
- enableval=$enable_nemesis_shm_collectives;
-$as_echo "#define ENABLED_SHM_COLLECTIVES 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
fi
+ # Check for functions
+ for ac_func in inet_pton
+do :
+ ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton"
+if test "x$ac_cv_func_inet_pton" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_INET_PTON 1
+_ACEOF
-# These are defines to turn on different optimizations. Turn them off only for testing
-
-$as_echo "#define MPID_NEM_INLINE 1" >>confdefs.h
-
-
-$as_echo "#define PREFETCH_CELL 1" >>confdefs.h
+fi
+done
+ for ac_func in gethostname
+do :
+ ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
+if test "x$ac_cv_func_gethostname" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GETHOSTNAME 1
+_ACEOF
-$as_echo "#define USE_FASTBOX 1" >>confdefs.h
+fi
+done
+ if test "$ac_cv_func_gethostname" = "yes" ; then
+ # Do we need to declare gethostname?
-# We may need this only for tcp and related netmodules
-# Check for h_addr or h_addr_list
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct hostent contains h_addr_list" >&5
-$as_echo_n "checking whether struct hostent contains h_addr_list... " >&6; }
-if ${pac_cv_have_haddr_list+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
+$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
+if ${pac_cv_func_decl_gethostname+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-#include <netdb.h>
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))gethostname;
int
main ()
{
-struct hostent hp;hp.h_addr_list[0]=0;
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_haddr_list=yes
+ pac_cv_func_decl_gethostname=no
else
- pac_cv_have_haddr_list=no
+ pac_cv_func_decl_gethostname=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_haddr_list" >&5
-$as_echo "$pac_cv_have_haddr_list" >&6; }
-if test "$pac_cv_have_haddr_list" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
+$as_echo "$pac_cv_func_decl_gethostname" >&6; }
+if test "$pac_cv_func_decl_gethostname" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_GETHOSTNAME_DECL 1
+_ACEOF
-$as_echo "#define HAVE_H_ADDR_LIST 1" >>confdefs.h
fi
-# If we need the socket code, see if we can use struct ifconf
-# sys/socket.h is needed on Solaris
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf" >&5
+ fi
+
+
+ # If we need the socket code, see if we can use struct ifconf
+ # sys/socket.h is needed on Solaris
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf" >&5
$as_echo_n "checking whether we can use struct ifconf... " >&6; }
if ${pac_cv_have_struct_ifconf+:} false; then :
$as_echo_n "(cached) " >&6
@@ -50255,7 +49120,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
main ()
{
-struct ifconf conftest; int s; s = sizeof(conftest);
+struct ifconf conftest;
;
return 0;
}
@@ -50270,26 +49135,61 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifconf" >&5
$as_echo "$pac_cv_have_struct_ifconf" >&6; }
-# Intentionally not testing whether _SVID_SOURCE or _POSIX_C_SOURCE affects
-# ifconf availability. Making those sort of modifications at this stage
-# invalidates nearly all of our previous tests, since those macros fundamentally
-# change many features of the compiler on most platforms. See ticket #1568.
+ if test "$pac_cv_have_struct_ifconf" = "no" ; then
+ # Try again with _SVID_SOURCE
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf with _SVID_SOURCE" >&5
+$as_echo_n "checking whether we can use struct ifconf with _SVID_SOURCE... " >&6; }
+if ${pac_cv_have_struct_ifconf_with_svid+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-if test "$pac_cv_have_struct_ifconf" = "yes" ; then
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-$as_echo "#define HAVE_STRUCT_IFCONF 1" >>confdefs.h
+#define _SVID_SOURCE
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#include <net/if.h>
+int
+main ()
+{
+struct ifconf conftest;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_struct_ifconf_with_svid=yes
+else
+ pac_cv_have_struct_ifconf_with_svid=no
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifconf_with_svid" >&5
+$as_echo "$pac_cv_have_struct_ifconf_with_svid" >&6; }
+ if test "$pac_cv_have_struct_ifconf_with_svid" = yes ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifreq" >&5
-$as_echo_n "checking whether we can use struct ifreq... " >&6; }
-if ${pac_cv_have_struct_ifreq+:} false; then :
+$as_echo "#define USE_SVIDSOURCE_FOR_IFCONF 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test "$pac_cv_have_struct_ifconf" = "no" -a \
+ "$pac_cv_have_struct_ifconf_with_svid" = "no" ; then
+ # Try again with undef _POSIX_C_SOURCE
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can use struct ifconf without _POSIX_C_SOURCE" >&5
+$as_echo_n "checking whether we can use struct ifconf without _POSIX_C_SOURCE... " >&6; }
+if ${pac_cv_have_struct_ifconf_without_posix+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#undef _POSIX_C_SOURCE
#include <sys/types.h>
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
@@ -50299,181 +49199,309 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
int
main ()
{
-struct ifreq conftest; int s; s = sizeof(conftest);
+struct ifconf conftest;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_struct_ifreq=yes
+ pac_cv_have_struct_ifconf_without_posix=yes
else
- pac_cv_have_struct_ifreq=no
+ pac_cv_have_struct_ifconf_without_posix=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifreq" >&5
-$as_echo "$pac_cv_have_struct_ifreq" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_struct_ifconf_without_posix" >&5
+$as_echo "$pac_cv_have_struct_ifconf_without_posix" >&6; }
+ if test "$pac_cv_have_struct_ifconf_without_posix" = yes ; then
-if test "$pac_cv_have_struct_ifreq" = "yes" ; then
+$as_echo "#define USE_NOPOSIX_FOR_IFCONF 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test "$pac_cv_have_struct_ifconf" = "yes" -o \
+ "$pac_cv_have_struct_ifconf_with_svid" = "yes" -o \
+ "$pac_cv_have_struct_ifconf_without_posix" ; then
+
+$as_echo "#define HAVE_STRUCT_IFCONF 1" >>confdefs.h
+
+ fi
-$as_echo "#define HAVE_STRUCT_IFREQ 1" >>confdefs.h
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_util_sock
-# Check for knem options
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_llc
-# Check whether --with-knem was given.
-if test "${with_knem+set}" = set; then :
- withval=$with_knem; if test "${with_knem}" != "yes" -a "${with_knem}" != "no" ; then
- CPPFLAGS="$CPPFLAGS -I${with_knem}/include"
+if test -z "$BUILD_NEMESIS_NETMOD_LLC_TRUE"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:llc" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:llc" >&6;}
+
+
+
+# Check whether --with-libmemcached was given.
+if test "${with_libmemcached+set}" = set; then :
+ withval=$with_libmemcached; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libmemcached=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libmemcached=PATH expects a valid PATH" >&2;}
+ with_libmemcached="" ;; #(
+ *) :
+ ;;
+esac
+else
+ with_libmemcached=
fi
+
+
+# Check whether --with-libmemcached-include was given.
+if test "${with_libmemcached_include+set}" = set; then :
+ withval=$with_libmemcached_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libmemcached-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libmemcached-include=PATH expects a valid PATH" >&2;}
+ with_libmemcached_include="" ;; #(
+ *) :
+ ;;
+esac
fi
-# Check whether --with-knem-include was given.
-if test "${with_knem_include+set}" = set; then :
- withval=$with_knem_include; if test "${with_knem_include}" != "yes" -a "${with_knem_include}" != "no" ; then
- CPPFLAGS="$CPPFLAGS -I${with_knem_include}"
+# Check whether --with-libmemcached-lib was given.
+if test "${with_libmemcached_lib+set}" = set; then :
+ withval=$with_libmemcached_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libmemcached-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libmemcached-lib=PATH expects a valid PATH" >&2;}
+ with_libmemcached_lib="" ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
+
+ if test -n "${with_libmemcached_include}"; then :
+
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libmemcached_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libmemcached_include}', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libmemcached_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_libmemcached_include}"
+
+fi
+
+else
+ if test -n "${with_libmemcached}"; then :
+
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libmemcached}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libmemcached}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libmemcached}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_libmemcached}/include"
+
+fi
+
+fi
+fi
+
+ if test -n "${with_libmemcached_lib}"; then :
+
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libmemcached_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libmemcached_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libmemcached_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libmemcached_lib}"
+
fi
+
+else
+ if test -n "${with_libmemcached}"; then :
+
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libmemcached}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libmemcached}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libmemcached}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libmemcached}/lib"
+
fi
+ if test -d "${with_libmemcached}/lib64"; then :
-for ac_header in knem_io.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "knem_io.h" "ac_cv_header_knem_io_h" "$ac_includes_default"
-if test "x$ac_cv_header_knem_io_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_KNEM_IO_H 1
-_ACEOF
- pac_cv_have_knem_io_h=yes
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libmemcached}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libmemcached}/lib64', not appending" >&5
else
- pac_cv_have_knem_io_h=no
-fi
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libmemcached}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libmemcached}/lib64"
-done
+fi
-if test "${pac_cv_have_knem_io_h}" = yes ; then
+fi
-$as_echo "#define HAVE_KNEM_IO_H 1" >>confdefs.h
+fi
fi
-# allow the user to select different local LMT implementations
-# Check whether --with-nemesis-local-lmt was given.
-if test "${with_nemesis_local_lmt+set}" = set; then :
- withval=$with_nemesis_local_lmt;
+
+# Check whether --with-ibverbs was given.
+if test "${with_ibverbs+set}" = set; then :
+ withval=$with_ibverbs; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ibverbs=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ibverbs=PATH expects a valid PATH" >&2;}
+ with_ibverbs="" ;; #(
+ *) :
+ ;;
+esac
else
- with_nemesis_local_lmt=default
+ with_ibverbs=
fi
-case "$with_nemesis_local_lmt" in
- shm_copy|default)
- local_lmt_impl=MPID_NEM_LOCAL_LMT_SHM_COPY
- ;;
- dma|shm_dma|knem)
- if test "${pac_cv_have_knem_io_h}" != yes ; then
- as_fn_error $? "Failed to find knem_io.h for nemesis-local-lmt=knem" "$LINENO" 5
- fi
- local_lmt_impl=MPID_NEM_LOCAL_LMT_DMA
- ;;
- vmsplice)
- local_lmt_impl=MPID_NEM_LOCAL_LMT_VMSPLICE
- ;;
- none)
- local_lmt_impl=MPID_NEM_LOCAL_LMT_NONE
- ;;
- *)
- as_fn_error $? "Unrecognized value $with_nemesis_local_lmt for --with-nemesis-local-lmt" "$LINENO" 5
- ;;
-esac
-cat >>confdefs.h <<_ACEOF
-#define MPID_NEM_LOCAL_LMT_IMPL $local_lmt_impl
-_ACEOF
+# Check whether --with-ibverbs-include was given.
+if test "${with_ibverbs_include+set}" = set; then :
+ withval=$with_ibverbs_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ibverbs-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ibverbs-include=PATH expects a valid PATH" >&2;}
+ with_ibverbs_include="" ;; #(
+ *) :
+ ;;
+esac
+fi
-# Check whether --enable-nemesis-lock-free-queues was given.
-if test "${enable_nemesis_lock_free_queues+set}" = set; then :
- enableval=$enable_nemesis_lock_free_queues;
-else
- enable_nemesis_lock_free_queues=yes
+# Check whether --with-ibverbs-lib was given.
+if test "${with_ibverbs_lib+set}" = set; then :
+ withval=$with_ibverbs_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ibverbs-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ibverbs-lib=PATH expects a valid PATH" >&2;}
+ with_ibverbs_lib="" ;; #(
+ *) :
+ ;;
+esac
fi
-if test "$enable_nemesis_lock_free_queues" = "yes" ; then
-$as_echo "#define MPID_NEM_USE_LOCK_FREE_QUEUES 1" >>confdefs.h
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
-fi
+ if test -n "${with_ibverbs_include}"; then :
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ibverbs_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ibverbs_include}', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ibverbs_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ibverbs_include}"
+fi
+else
+ if test -n "${with_ibverbs}"; then :
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ibverbs}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ibverbs}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ibverbs}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ibverbs}/include"
+fi
+fi
+fi
+ if test -n "${with_ibverbs_lib}"; then :
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ibverbs_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ibverbs_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ibverbs_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ibverbs_lib}"
+fi
+else
+ if test -n "${with_ibverbs}"; then :
-AS=as
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ibverbs}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ibverbs}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ibverbs}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ibverbs}/lib"
+fi
-ac_config_files="$ac_config_files src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c"
+ if test -d "${with_ibverbs}/lib64"; then :
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ibverbs}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ibverbs}/lib64', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ibverbs}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ibverbs}/lib64"
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_mxm
+fi
-if test -z "$BUILD_NEMESIS_NETMOD_MXM_TRUE"; then :
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:mxm" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:mxm" >&6;}
+fi
-# Check whether --with-mxm was given.
-if test "${with_mxm+set}" = set; then :
- withval=$with_mxm; case "$withval" in #(
+# Check whether --with-llc was given.
+if test "${with_llc+set}" = set; then :
+ withval=$with_llc; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-mxm=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-mxm=PATH expects a valid PATH" >&2;}
- with_mxm="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-llc=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-llc=PATH expects a valid PATH" >&2;}
+ with_llc="" ;; #(
*) :
;;
esac
else
- with_mxm=
+ with_llc=
fi
-# Check whether --with-mxm-include was given.
-if test "${with_mxm_include+set}" = set; then :
- withval=$with_mxm_include; case "$withval" in #(
+# Check whether --with-llc-include was given.
+if test "${with_llc_include+set}" = set; then :
+ withval=$with_llc_include; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-mxm-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-mxm-include=PATH expects a valid PATH" >&2;}
- with_mxm_include="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-llc-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-llc-include=PATH expects a valid PATH" >&2;}
+ with_llc_include="" ;; #(
*) :
;;
esac
fi
-# Check whether --with-mxm-lib was given.
-if test "${with_mxm_lib+set}" = set; then :
- withval=$with_mxm_lib; case "$withval" in #(
+# Check whether --with-llc-lib was given.
+if test "${with_llc_lib+set}" = set; then :
+ withval=$with_llc_lib; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-mxm-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-mxm-lib=PATH expects a valid PATH" >&2;}
- with_mxm_lib="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-llc-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-llc-lib=PATH expects a valid PATH" >&2;}
+ with_llc_lib="" ;; #(
*) :
;;
esac
@@ -50484,63 +49512,63 @@ fi
# Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
# taking priority
- if test -n "${with_mxm_include}"; then :
+ if test -n "${with_llc_include}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_mxm_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_mxm_include}', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_llc_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_llc_include}', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_mxm_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_mxm_include}"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_llc_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_llc_include}"
fi
else
- if test -n "${with_mxm}"; then :
+ if test -n "${with_llc}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_mxm}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_mxm}/include', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_llc}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_llc}/include', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_mxm}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_mxm}/include"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_llc}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_llc}/include"
fi
fi
fi
- if test -n "${with_mxm_lib}"; then :
+ if test -n "${with_llc_lib}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_mxm_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_mxm_lib}', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_llc_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_llc_lib}', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_mxm_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_mxm_lib}"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_llc_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_llc_lib}"
fi
else
- if test -n "${with_mxm}"; then :
+ if test -n "${with_llc}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_mxm}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_mxm}/lib', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_llc}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_llc}/lib', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_mxm}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_mxm}/lib"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_llc}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_llc}/lib"
fi
- if test -d "${with_mxm}/lib64}"; then :
+ if test -d "${with_llc}/lib64"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_mxm}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_mxm}/lib64', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_llc}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_llc}/lib64', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_mxm}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_mxm}/lib64"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_llc}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_llc}/lib64"
fi
@@ -50551,30 +49579,94 @@ fi
fi
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "libmemcached/memcached.h" "ac_cv_header_libmemcached_memcached_h" "$ac_includes_default"
+if test "x$ac_cv_header_libmemcached_memcached_h" = xyes; then :
+
+else
+ failure=yes
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memcached in -lmemcached" >&5
+$as_echo_n "checking for memcached in -lmemcached... " >&6; }
+if ${ac_cv_lib_memcached_memcached+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmemcached $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char memcached ();
+int
+main ()
+{
+return memcached ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_memcached_memcached=yes
+else
+ ac_cv_lib_memcached_memcached=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_memcached_memcached" >&5
+$as_echo "$ac_cv_lib_memcached_memcached" >&6; }
+if test "x$ac_cv_lib_memcached_memcached" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMEMCACHED 1
+_ACEOF
+
+ LIBS="-lmemcached $LIBS"
+
+else
+ failure=yes
+fi
+
+ if test "$failure" = "no" ; then
+ libmemcached_found=yes
+ else
+ libmemcached_found=no
+ fi
+
+ if test "${libmemcached_found}" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: libmemcached is going to be linked." >&5
+$as_echo "$as_me: libmemcached is going to be linked." >&6;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: libmemcached was not found" >&5
+$as_echo "$as_me: libmemcached was not found" >&6;}
+ fi
failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "mxm/api/mxm_api.h" "ac_cv_header_mxm_api_mxm_api_h" "$ac_includes_default"
-if test "x$ac_cv_header_mxm_api_mxm_api_h" = xyes; then :
+ ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default"
+if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then :
else
failure=yes
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mxm_get_version in -lmxm" >&5
-$as_echo_n "checking for mxm_get_version in -lmxm... " >&6; }
-if ${ac_cv_lib_mxm_mxm_get_version+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ibv_open_device in -libverbs" >&5
+$as_echo_n "checking for ibv_open_device in -libverbs... " >&6; }
+if ${ac_cv_lib_ibverbs_ibv_open_device+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmxm $LIBS"
+LIBS="-libverbs $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -50584,374 +49676,667 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char mxm_get_version ();
+char ibv_open_device ();
int
main ()
{
-return mxm_get_version ();
+return ibv_open_device ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_mxm_mxm_get_version=yes
+ ac_cv_lib_ibverbs_ibv_open_device=yes
else
- ac_cv_lib_mxm_mxm_get_version=no
+ ac_cv_lib_ibverbs_ibv_open_device=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mxm_mxm_get_version" >&5
-$as_echo "$ac_cv_lib_mxm_mxm_get_version" >&6; }
-if test "x$ac_cv_lib_mxm_mxm_get_version" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ibverbs_ibv_open_device" >&5
+$as_echo "$ac_cv_lib_ibverbs_ibv_open_device" >&6; }
+if test "x$ac_cv_lib_ibverbs_ibv_open_device" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMXM 1
+#define HAVE_LIBIBVERBS 1
+_ACEOF
+
+ LIBS="-libverbs $LIBS"
+
+else
+ failure=yes
+fi
+
+ if test "$failure" = "no" ; then
+ ibverbs_found=yes
+ else
+ ibverbs_found=no
+ fi
+
+ if test "${ibverbs_found}" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: libibverbs is going to be linked." >&5
+$as_echo "$as_me: libibverbs is going to be linked." >&6;}
+ else
+ as_fn_error $? "Internal error: ibverbs was not found" "$LINENO" 5
+ fi
+
+
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "llc.h" "ac_cv_header_llc_h" "$ac_includes_default"
+if test "x$ac_cv_header_llc_h" = xyes; then :
+
+else
+ failure=yes
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LLC_init in -lllc" >&5
+$as_echo_n "checking for LLC_init in -lllc... " >&6; }
+if ${ac_cv_lib_llc_LLC_init+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lllc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char LLC_init ();
+int
+main ()
+{
+return LLC_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_llc_LLC_init=yes
+else
+ ac_cv_lib_llc_LLC_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_llc_LLC_init" >&5
+$as_echo "$ac_cv_lib_llc_LLC_init" >&6; }
+if test "x$ac_cv_lib_llc_LLC_init" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLLC 1
+_ACEOF
+
+ LIBS="-lllc $LIBS"
+
+else
+ failure=yes
+fi
+
+ if test "$failure" = "no" ; then
+ llc_found=yes
+ else
+ llc_found=no
+ fi
+
+ if test "${llc_found}" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: libllc is going to be linked." >&5
+$as_echo "$as_me: libllc is going to be linked." >&6;}
+ else
+ as_fn_error $? "Internal error: llc was not found" "$LINENO" 5
+ fi
+
+ #AC_CHECK_HEADERS([stdlib.h dlfcn.h])
+ #AC_CHECK_FUNCS([dlopen])
+ #AC_SEARCH_LIBS([dlopen], [dl])
+
+
+
+$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
+
+
+fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_llc
+
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_hcoll
+
+# nothing to do
+
+## end expansion of PAC_SUBCFG_BODY_src_mpid_common_hcoll
+
+ GNULIB__EXIT=0;
+ GNULIB_ATOLL=0;
+ GNULIB_CALLOC_POSIX=0;
+ GNULIB_CANONICALIZE_FILE_NAME=0;
+ GNULIB_GETLOADAVG=0;
+ GNULIB_GETSUBOPT=0;
+ GNULIB_GRANTPT=0;
+ GNULIB_MALLOC_POSIX=0;
+ GNULIB_MBTOWC=0;
+ GNULIB_MKDTEMP=0;
+ GNULIB_MKOSTEMP=0;
+ GNULIB_MKOSTEMPS=0;
+ GNULIB_MKSTEMP=0;
+ GNULIB_MKSTEMPS=0;
+ GNULIB_POSIX_OPENPT=0;
+ GNULIB_PTSNAME=0;
+ GNULIB_PTSNAME_R=0;
+ GNULIB_PUTENV=0;
+ GNULIB_QSORT_R=0;
+ GNULIB_RANDOM=0;
+ GNULIB_RANDOM_R=0;
+ GNULIB_REALLOC_POSIX=0;
+ GNULIB_REALPATH=0;
+ GNULIB_RPMATCH=0;
+ GNULIB_SECURE_GETENV=0;
+ GNULIB_SETENV=0;
+ GNULIB_STRTOD=0;
+ GNULIB_STRTOLL=0;
+ GNULIB_STRTOULL=0;
+ GNULIB_SYSTEM_POSIX=0;
+ GNULIB_UNLOCKPT=0;
+ GNULIB_UNSETENV=0;
+ GNULIB_WCTOMB=0;
+ HAVE__EXIT=1;
+ HAVE_ATOLL=1;
+ HAVE_CANONICALIZE_FILE_NAME=1;
+ HAVE_DECL_GETLOADAVG=1;
+ HAVE_GETSUBOPT=1;
+ HAVE_GRANTPT=1;
+ HAVE_MKDTEMP=1;
+ HAVE_MKOSTEMP=1;
+ HAVE_MKOSTEMPS=1;
+ HAVE_MKSTEMP=1;
+ HAVE_MKSTEMPS=1;
+ HAVE_POSIX_OPENPT=1;
+ HAVE_PTSNAME=1;
+ HAVE_PTSNAME_R=1;
+ HAVE_RANDOM=1;
+ HAVE_RANDOM_H=1;
+ HAVE_RANDOM_R=1;
+ HAVE_REALPATH=1;
+ HAVE_RPMATCH=1;
+ HAVE_SECURE_GETENV=1;
+ HAVE_SETENV=1;
+ HAVE_DECL_SETENV=1;
+ HAVE_STRTOD=1;
+ HAVE_STRTOLL=1;
+ HAVE_STRTOULL=1;
+ HAVE_STRUCT_RANDOM_DATA=1;
+ HAVE_SYS_LOADAVG_H=0;
+ HAVE_UNLOCKPT=1;
+ HAVE_DECL_UNSETENV=1;
+ REPLACE_CALLOC=0;
+ REPLACE_CANONICALIZE_FILE_NAME=0;
+ REPLACE_MALLOC=0;
+ REPLACE_MBTOWC=0;
+ REPLACE_MKSTEMP=0;
+ REPLACE_PTSNAME=0;
+ REPLACE_PTSNAME_R=0;
+ REPLACE_PUTENV=0;
+ REPLACE_QSORT_R=0;
+ REPLACE_RANDOM_R=0;
+ REPLACE_REALLOC=0;
+ REPLACE_REALPATH=0;
+ REPLACE_SETENV=0;
+ REPLACE_STRTOD=0;
+ REPLACE_UNSETENV=0;
+ REPLACE_WCTOMB=0;
+
+
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch4
+
+if test -z "$BUILD_CH4_TRUE"; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR CH4 DEVICE" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR CH4 DEVICE" >&6;}
+
+
+# Check whether --with-ch4-rank-bits was given.
+if test "${with_ch4_rank_bits+set}" = set; then :
+ withval=$with_ch4_rank_bits; rankbits=$withval
+else
+ rankbits=32
+fi
+
+if test "$rankbits" != "16" -a "$rankbits" != "32" ; then
+ as_fn_error $? "Only 16 or 32-bit ranks are supported" "$LINENO" 5
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define CH4_RANK_BITS $rankbits
+_ACEOF
+
+
+# Check whether --enable-ch4r-per-comm-msg-queue was given.
+if test "${enable_ch4r_per_comm_msg_queue+set}" = set; then :
+ enableval=$enable_ch4r_per_comm_msg_queue;
+else
+ enable_ch4r_per_comm_msg_queue=yes
+fi
+
+
+if test "$enable_ch4r_per_comm_msg_queue" = "yes" ; then
+
+$as_echo "#define MPIDI_CH4U_USE_PER_COMM_QUEUE 1" >>confdefs.h
+
+fi
+
+
+
+# check how to allocate shared memory
+
+# Check whether --with-shared-memory was given.
+if test "${with_shared_memory+set}" = set; then :
+ withval=$with_shared_memory;
+else
+ with_shared_memory=auto
+fi
+
+
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
+ found_mmap_funcs=yes
+ for ac_func in mmap munmap
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ found_mmap_funcs=no
+fi
+done
+
+ if test "$found_mmap_funcs" = yes ; then
+ with_shared_memory=mmap
+
+$as_echo "#define USE_MMAP_SHM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using a memory-mapped file for shared memory" >&5
+$as_echo "$as_me: Using a memory-mapped file for shared memory" >&6;}
+ elif test "$with_shared_memory" = mmap ; then
+ as_fn_error $? "cannot support shared memory: mmap() or munmap() not found" "$LINENO" 5
+ fi
+fi
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
+ found_sysv_shm_funcs=yes
+ for ac_func in shmget shmat shmctl shmdt
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
- LIBS="-lmxm $LIBS"
+else
+ found_sysv_shm_funcs=no
+fi
+done
+
+ if test "$found_sysv_shm_funcs" = yes ; then
+ with_shared_memory=sysv
+
+$as_echo "#define USE_SYSV_SHM 1" >>confdefs.h
-else
- failure=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using SYSV shared memory" >&5
+$as_echo "$as_me: Using SYSV shared memory" >&6;}
+ elif test "$with_shared_memory" = sysv ; then
+ as_fn_error $? "cannot support shared memory: sysv shared memory functions functions not found" "$LINENO" 5
+ fi
fi
- if test "$failure" = "no" ; then
- success=yes
- else
- success=no
- fi
- if test "$success" = "no" ; then
- as_fn_error $? "'mxm/api/mxm_api.h or libmxm library not found. Did you specify --with-mxm= or --with-mxm-include= or --with-mxm-lib=?'" "$LINENO" 5
- fi
+ac_config_files="$ac_config_files src/mpid/ch4/src/mpid_ch4_net_array.c src/mpid/ch4/src/mpid_ch4_shm_array.c src/mpid/ch4/include/netmodpre.h src/mpid/ch4/include/shmpre.h"
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
- ac_fn_c_check_header_mongrel "$LINENO" "mxm/api/mxm_api.h" "ac_cv_header_mxm_api_mxm_api_h" "$ac_includes_default"
-if test "x$ac_cv_header_mxm_api_mxm_api_h" = xyes; then :
+# check how to allocate shared memory
+# Check whether --with-shared-memory was given.
+if test "${with_shared_memory+set}" = set; then :
+ withval=$with_shared_memory;
else
-
- as_fn_error $? "'mxm/api/mxm_api.h not found.'" "$LINENO" 5
-
+ with_shared_memory=auto
fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #include "mxm/api/mxm_version.h"
-#ifndef MXM_VERSION
-#error "MXM Version is less than 1.5, please upgrade"
-#endif
-#
-#if MXM_API < MXM_VERSION(3,1)
-#error "MXM Version is less than 3.1, please upgrade"
-#endif
-int
-main ()
-{
-int a=0;
- ;
- return 0;
-}
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
+ found_mmap_funcs=yes
+ for ac_func in mmap munmap
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- mxm_api_version=yes
+
else
- mxm_api_version=no
+ found_mmap_funcs=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test "$mxm_api_version" = no ; then
- as_fn_error $? "'MXM API version Problem. Are you running a recent version of MXM (at least 3.1)?'" "$LINENO" 5
- fi;
+done
-$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
+ if test "$found_mmap_funcs" = yes ; then
+ with_shared_memory=mmap
+$as_echo "#define USE_MMAP_SHM 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using a memory-mapped file for shared memory" >&5
+$as_echo "$as_me: Using a memory-mapped file for shared memory" >&6;}
+ elif test "$with_shared_memory" = mmap ; then
+ as_fn_error $? "cannot support shared memory: mmap() or munmap() not found" "$LINENO" 5
+ fi
+fi
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
+ found_sysv_shm_funcs=yes
+ for ac_func in shmget shmat shmctl shmdt
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lmxm\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lmxm', not appending" >&5
else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lmxm', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lmxm"
-
+ found_sysv_shm_funcs=no
fi
+done
+ if test "$found_sysv_shm_funcs" = yes ; then
+ with_shared_memory=sysv
+$as_echo "#define USE_SYSV_SHM 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using SYSV shared memory" >&5
+$as_echo "$as_me: Using SYSV shared memory" >&6;}
+ elif test "$with_shared_memory" = sysv ; then
+ as_fn_error $? "cannot support shared memory: sysv shared memory functions functions not found" "$LINENO" 5
+ fi
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_mxm
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_portals4
-if test -z "$BUILD_NEMESIS_NETMOD_PORTALS4_TRUE"; then :
+fi
+ if test "$ch4_shm_level" = "yes" -o "$ch4_shm_level" = "exclusive"; then
+ BUILD_CH4_SHM_TRUE=
+ BUILD_CH4_SHM_FALSE='#'
+else
+ BUILD_CH4_SHM_TRUE='#'
+ BUILD_CH4_SHM_FALSE=
+fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:portals4" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:portals4" >&6;}
+for ac_header in sys/mman.h sys/stat.h fcntl.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __func__" >&5
-$as_echo_n "checking whether the compiler defines __func__... " >&6; }
-if ${pac_cv_have__func__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+fi
+
+done
-tmp_am_cross=no
-if test "$cross_compiling" = yes; then :
- tmp_am_cross=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__func__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+
+ for ac_header in random.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "random.h" "ac_cv_header_random_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_random_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_RANDOM_H 1
_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_have__func__=yes
-else
- pac_cv_have__func__=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+
fi
-if test "$tmp_am_cross" = yes ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+done
+ if test $ac_cv_header_random_h = no; then
+ HAVE_RANDOM_H=0
+ fi
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__func__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+ ac_fn_c_check_type "$LINENO" "struct random_data" "ac_cv_type_struct_random_data" "#include <stdlib.h>
+ #if HAVE_RANDOM_H
+ # include <random.h>
+ #endif
+"
+if test "x$ac_cv_type_struct_random_data" = xyes; then :
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_RANDOM_DATA 1
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_have__func__=yes
+
+
else
- pac_cv_have__func__=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+ HAVE_STRUCT_RANDOM_DATA=0
fi
+
+ case "$host_os" in
+ aix* | osf*)
+ REPLACE_RANDOM_R=1
+ ;;
+ *)
+ for ac_func in random_r
+do :
+ ac_fn_c_check_func "$LINENO" "random_r" "ac_cv_func_random_r"
+if test "x$ac_cv_func_random_r" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_RANDOM_R 1
+_ACEOF
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__func__" >&5
-$as_echo "$pac_cv_have__func__" >&6; }
+done
-if test "$pac_cv_have__func__" = "yes" ; then
+ if test $ac_cv_func_random_r = no; then
+ HAVE_RANDOM_R=0
+ fi
+ ;;
+ esac
-$as_echo "#define HAVE__FUNC__ /**/" >>confdefs.h
+if test "$HAVE_RANDOM_R" = "1" -a "$HAVE_STRUCT_RANDOM_DATA" = "1" ; then
-fi
+$as_echo "#define USE_SYM_HEAP 1" >>confdefs.h
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __FUNC__" >&5
-$as_echo_n "checking whether the compiler defines __FUNC__... " >&6; }
-if ${pac_cv_have_cap__func__+:} false; then :
- $as_echo_n "(cached) " >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using a symmetric heap" >&5
+$as_echo "$as_me: Using a symmetric heap" >&6;}
else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using a non-symmetric heap" >&5
+$as_echo "$as_me: Using a non-symmetric heap" >&6;}
+fi
-tmp_am_cross=no
-if test "$cross_compiling" = yes; then :
- tmp_am_cross=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNC__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch4
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_ofi
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_have_cap__func__=yes
-else
- pac_cv_have_cap__func__=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+if test -z "$BUILD_CH4_NETMOD_OFI_TRUE"; then :
-if test "$tmp_am_cross" = yes ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch4:ofi" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch4:ofi" >&6;}
+ ofisrcdir=""
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNC__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+ ofilib=""
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_have__func__=yes
+ ofi_embedded=""
+ if test "${with_libfabric}" = "embedded" ; then
+ ofi_embedded="yes"
+ elif test -z ${with_libfabric} ; then
+ if test -f ${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/configure ; then
+ ofi_embedded="yes"
+ else
+ ofi_embedded="no"
+
+
+# Check whether --with-libfabric was given.
+if test "${with_libfabric+set}" = set; then :
+ withval=$with_libfabric; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libfabric=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libfabric=PATH expects a valid PATH" >&2;}
+ with_libfabric="" ;; #(
+ *) :
+ ;;
+esac
else
- pac_cv_have__func__=no
+ with_libfabric=
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+
+
+# Check whether --with-libfabric-include was given.
+if test "${with_libfabric_include+set}" = set; then :
+ withval=$with_libfabric_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libfabric-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libfabric-include=PATH expects a valid PATH" >&2;}
+ with_libfabric_include="" ;; #(
+ *) :
+ ;;
+esac
fi
+
+# Check whether --with-libfabric-lib was given.
+if test "${with_libfabric_lib+set}" = set; then :
+ withval=$with_libfabric_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libfabric-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libfabric-lib=PATH expects a valid PATH" >&2;}
+ with_libfabric_lib="" ;; #(
+ *) :
+ ;;
+esac
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cap__func__" >&5
-$as_echo "$pac_cv_have_cap__func__" >&6; }
-if test "$pac_cv_have_cap__func__" = "yes" ; then
-$as_echo "#define HAVE_CAP__FUNC__ /**/" >>confdefs.h
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
-fi
+ if test -n "${with_libfabric_include}"; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler sets __FUNCTION__" >&5
-$as_echo_n "checking whether the compiler sets __FUNCTION__... " >&6; }
-if ${pac_cv_have__function__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-tmp_am_cross=no
-if test "$cross_compiling" = yes; then :
- tmp_am_cross=yes
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libfabric_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libfabric_include}', not appending" >&5
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libfabric_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_libfabric_include}"
+fi
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNCTION__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+else
+ if test -n "${with_libfabric}"; then :
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- pac_cv_have__function__=yes
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libfabric}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libfabric}/include', not appending" >&5
else
- pac_cv_have__function__=no
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libfabric}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_libfabric}/include"
+
+fi
+
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-if test "$tmp_am_cross" = yes ; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ if test -n "${with_libfabric_lib}"; then :
-#include <string.h>
-int foo(void);
-int foo(void)
-{
- return (strcmp(__FUNCTION__, "foo") == 0);
-}
-int main(int argc, char ** argv)
-{
- return (foo() ? 0 : 1);
-}
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libfabric_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libfabric_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libfabric_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libfabric_lib}"
+fi
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_have__func__=yes
else
- pac_cv_have__func__=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
+ if test -n "${with_libfabric}"; then :
+
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libfabric}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libfabric}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libfabric}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libfabric}/lib"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__function__" >&5
-$as_echo "$pac_cv_have__function__" >&6; }
-if test "$pac_cv_have__function__" = "yes" ; then
+ if test -d "${with_libfabric}/lib64"; then :
-$as_echo "#define HAVE__FUNCTION__ /**/" >>confdefs.h
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libfabric}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libfabric}/lib64', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libfabric}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libfabric}/lib64"
+
+fi
fi
+fi
+fi
+ fi
+ else
+ ofi_embedded="no"
-# Check whether --with-portals4 was given.
-if test "${with_portals4+set}" = set; then :
- withval=$with_portals4; case "$withval" in #(
+# Check whether --with-libfabric was given.
+if test "${with_libfabric+set}" = set; then :
+ withval=$with_libfabric; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-portals4=PATH expects a valid PATH" >&2;}
- with_portals4="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libfabric=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libfabric=PATH expects a valid PATH" >&2;}
+ with_libfabric="" ;; #(
*) :
;;
esac
else
- with_portals4=
+ with_libfabric=
fi
-# Check whether --with-portals4-include was given.
-if test "${with_portals4_include+set}" = set; then :
- withval=$with_portals4_include; case "$withval" in #(
+# Check whether --with-libfabric-include was given.
+if test "${with_libfabric_include+set}" = set; then :
+ withval=$with_libfabric_include; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-portals4-include=PATH expects a valid PATH" >&2;}
- with_portals4_include="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libfabric-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libfabric-include=PATH expects a valid PATH" >&2;}
+ with_libfabric_include="" ;; #(
*) :
;;
esac
fi
-# Check whether --with-portals4-lib was given.
-if test "${with_portals4_lib+set}" = set; then :
- withval=$with_portals4_lib; case "$withval" in #(
+# Check whether --with-libfabric-lib was given.
+if test "${with_libfabric_lib+set}" = set; then :
+ withval=$with_libfabric_lib; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-portals4-lib=PATH expects a valid PATH" >&2;}
- with_portals4_lib="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libfabric-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-libfabric-lib=PATH expects a valid PATH" >&2;}
+ with_libfabric_lib="" ;; #(
*) :
;;
esac
@@ -50962,63 +50347,63 @@ fi
# Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
# taking priority
- if test -n "${with_portals4_include}"; then :
+ if test -n "${with_libfabric_include}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_portals4_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_portals4_include}', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libfabric_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libfabric_include}', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_portals4_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_portals4_include}"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libfabric_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_libfabric_include}"
fi
else
- if test -n "${with_portals4}"; then :
+ if test -n "${with_libfabric}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_portals4}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_portals4}/include', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libfabric}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libfabric}/include', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_portals4}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_portals4}/include"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libfabric}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_libfabric}/include"
fi
fi
fi
- if test -n "${with_portals4_lib}"; then :
+ if test -n "${with_libfabric_lib}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4_lib}', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libfabric_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libfabric_lib}', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_portals4_lib}"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libfabric_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libfabric_lib}"
fi
else
- if test -n "${with_portals4}"; then :
+ if test -n "${with_libfabric}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4}/lib', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libfabric}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libfabric}/lib', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_portals4}/lib"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libfabric}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libfabric}/lib"
fi
- if test -d "${with_portals4}/lib64}"; then :
+ if test -d "${with_libfabric}/lib64"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4}/lib64', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libfabric}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libfabric}/lib64', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_portals4}/lib64"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libfabric}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_libfabric}/lib64"
fi
@@ -51028,225 +50413,278 @@ fi
fi
+ fi
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-
-
-
- failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "portals4.h" "ac_cv_header_portals4_h" "$ac_includes_default"
-if test "x$ac_cv_header_portals4_h" = xyes; then :
-
-else
- failure=yes
-fi
-
+ if test "${ofi_embedded}" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: CH4 OFI Netmod: Using an embedded libfabric" >&5
+$as_echo "$as_me: CH4 OFI Netmod: Using an embedded libfabric" >&6;}
+ ofi_subdir_args="--enable-embedded"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PtlInit in -lportals" >&5
-$as_echo_n "checking for PtlInit in -lportals... " >&6; }
-if ${ac_cv_lib_portals_PtlInit+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lportals $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char PtlInit ();
-int
-main ()
-{
-return PtlInit ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_portals_PtlInit=yes
-else
- ac_cv_lib_portals_PtlInit=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_portals_PtlInit" >&5
-$as_echo "$ac_cv_lib_portals_PtlInit" >&6; }
-if test "x$ac_cv_lib_portals_PtlInit" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPORTALS 1
-_ACEOF
+ if test -z "${pac_save_CPPFLAGS_nesting}" ; then
+ pac_save_CPPFLAGS_nesting=0
+ fi
+ eval pac_save_CPPFLAGS_${pac_save_CPPFLAGS_nesting}='"$CPPFLAGS"'
+ pac_save_CPPFLAGS_nesting=`expr ${pac_save_CPPFLAGS_nesting} + 1`
- LIBS="-lportals $LIBS"
-else
- failure=yes
-fi
+ pac_dir="src/mpid/ch4/netmod/ofi/libfabric"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== configuring src/mpid/ch4/netmod/ofi/libfabric =====" >&5
+$as_echo "$as_me: ===== configuring src/mpid/ch4/netmod/ofi/libfabric =====" >&6;}
- if test "$failure" = "no" ; then
- success=yes
- else
- success=no
- fi
+ pac_abs_srcdir=`(cd $srcdir && pwd)`
- if test "$success" = "no" ; then
- as_fn_error $? "'portals4.h or libportals library not found. Did you specify --with-portals4= or --with-portals4-include= or --with-portals4-lib=?'" "$LINENO" 5
+ if test -f $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/setup ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/setup" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/setup" >&6;}
+ . $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/setup
fi
+ # Adapted for MPICH from the autoconf-2.67 implementation of
+ # AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
+ # local modifications.
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up. Otherwise relative paths (like --srcdir=.. from
+ # make distcheck) will be incorrect.
+ pac_sub_configure_args="$ofi_subdir_args"
+ pac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for pac_arg
+ do
+ if test -n "$pac_prev"; then
+ pac_prev=
+ continue
+ fi
+ case $pac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ pac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ pac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ pac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ # MPICH note: this is a more robust version of the "precious
+ # variable" propagation code that was present in the previous
+ # incarnation of this macro
+ for pac_pvar in $ac_precious_vars ; do
+ # check if configure argument token contains the
+ # precious variable, i.e. "name_of_prec_var=".
+ if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
+ # check if current precious variable is set in env
+ eval pvar_set=\${$pac_pvar+set}
+ if test "$pvar_set" = "set" ; then
+ # Append 'name_of_prec_var=value_of_prec_var'
+ # to the subconfigure arguments list, where
+ # value_of_prec_var is fetched from the env.
+ # this also overrides any value set on the command line
+ eval pac_pval=\${$pac_pvar}
+ pac_arg="$pac_pvar=$pac_pval"
+ break
+ fi
+ fi
+ done
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append pac_sub_configure_args " '$pac_arg'" ;;
+ esac
+ done
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lportals\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lportals', not appending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lportals', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lportals"
-
-fi
-
-
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ # MPICH note: see tt#983 for an example of why this is necessary
+ pac_arg="--prefix=$prefix"
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
+ # Pass --silent
+ if test "$silent" = yes; then
+ pac_sub_configure_args="--silent $pac_sub_configure_args"
+ fi
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
-$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
+ pac_popdir=`pwd`
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$pac_dir" || continue
+ # MPICH note: modified to remove the internal "_AS_*" macro usage, also
+ # msg is already printed at top
+ as_dir="$pac_dir"; as_fn_mkdir_p
+ # MPICH note: we leave this internal macro reference for now. We can clone
+ # the macro locally if this turns out to be non-portable across several autoconf
+ # versions. It sets the following variables: ac_builddir,
+ # ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
+ # ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
+ ac_builddir=.
-fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_portals4
+case "$pac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$pac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_ofi
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-if test -z "$BUILD_NEMESIS_NETMOD_OFI_TRUE"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:ofi" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:ofi" >&6;}
+ cd "$pac_dir"
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ pac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ pac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.ac"; then
+ # This should be Cygnus configure.
+ pac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $pac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $pac_dir" >&2;}
+ pac_sub_configure=
+ fi
+ # The recursion is here.
+ if test -n "$pac_sub_configure"; then
+ # MPICH note: overriding the cache file on purpose to prevent strange
+ # issues resulting from inter-dir caching
+ pac_sub_cache_file="/dev/null"
-# Check whether --with-ofi was given.
-if test "${with_ofi+set}" = set; then :
- withval=$with_ofi; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ofi=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ofi=PATH expects a valid PATH" >&2;}
- with_ofi="" ;; #(
- *) :
- ;;
-esac
-else
- with_ofi=
-fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ # MPICH note: we want to execute the provided actions, not be silent
+ # or error out if the subconfigure succeeded/failed
+ if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
+ --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
+ then
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+ else
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+ as_fn_error $? "libfabric configure failed" "$LINENO" 5
+ fi
+ fi
-# Check whether --with-ofi-include was given.
-if test "${with_ofi_include+set}" = set; then :
- withval=$with_ofi_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ofi-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ofi-include=PATH expects a valid PATH" >&2;}
- with_ofi_include="" ;; #(
- *) :
- ;;
-esac
-fi
+ cd "$pac_popdir"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== done with src/mpid/ch4/netmod/ofi/libfabric configure =====" >&5
+$as_echo "$as_me: ===== done with src/mpid/ch4/netmod/ofi/libfabric configure =====" >&6;}
-# Check whether --with-ofi-lib was given.
-if test "${with_ofi_lib+set}" = set; then :
- withval=$with_ofi_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ofi-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ofi-lib=PATH expects a valid PATH" >&2;}
- with_ofi_lib="" ;; #(
- *) :
- ;;
-esac
-fi
+ # Check for any localdefs files. These may be created, so we
+ # look in the local directory first.
+ if test -f src/mpid/ch4/netmod/ofi/libfabric/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing src/mpid/ch4/netmod/ofi/libfabric/localdefs" >&5
+$as_echo "$as_me: sourcing src/mpid/ch4/netmod/ofi/libfabric/localdefs" >&6;}
+ . src/mpid/ch4/netmod/ofi/libfabric/localdefs
+ elif test -f $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/localdefs" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/localdefs" >&6;}
+ . $pac_abs_srcdir/src/mpid/ch4/netmod/ofi/libfabric/localdefs
+ fi
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
+ pac_save_CPPFLAGS_nesting=`expr ${pac_save_CPPFLAGS_nesting} - 1`
+ eval CPPFLAGS="\$pac_save_CPPFLAGS_${pac_save_CPPFLAGS_nesting}"
+ eval pac_save_CPPFLAGS_${pac_save_CPPFLAGS_nesting}=""
- if test -n "${with_ofi_include}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ofi_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ofi_include}', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/include', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ofi_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ofi_include}"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/include"
fi
-else
- if test -n "${with_ofi}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ofi}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ofi}/include', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/include', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ofi}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ofi}/include"
-
-fi
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/include"
fi
-fi
-
- if test -n "${with_ofi_lib}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ofi_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ofi_lib}', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ofi_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ofi_lib}"
-fi
-else
- if test -n "${with_ofi}"; then :
+ if test "$do_direct_provider" = "true" ; then
+ if test "x${enable_direct}" != "x" && test "${enable_direct}" != "no" ; then
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ofi}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ofi}/lib', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ofi}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ofi}/lib"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include"
fi
- if test -d "${with_ofi}/lib64}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ofi}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ofi}/lib64', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ofi}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ofi}/lib64"
-
-fi
-
-fi
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include"
fi
-fi
+ else
+ as_fn_error $? "Enabled direct OFI provider but didn't specify which one" "$LINENO" 5
+ fi
+ fi
+ ofisrcdir="${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric"
+ ofilib="src/mpid/ch4/netmod/ofi/libfabric/src/libfabric.la"
+ else
if test -z "${pac_save_LIBS_nesting}" ; then
pac_save_LIBS_nesting=0
@@ -51255,7 +50693,6 @@ fi
pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-
failure=no
ac_fn_c_check_header_mongrel "$LINENO" "rdma/fabric.h" "ac_cv_header_rdma_fabric_h" "$ac_includes_default"
if test "x$ac_cv_header_rdma_fabric_h" = xyes; then :
@@ -51313,314 +50750,123 @@ else
fi
if test "$failure" = "no" ; then
- success=yes
+ have_libfabric=yes
else
- success=no
+ have_libfabric=no
fi
- if test "$success" = "no" ; then
- as_fn_error $? "'rdma/fabric.h or libfabric library not found. Did you specify --with-ofi= or --with-ofi-include= or --with-ofi-lib=?'" "$LINENO" 5
- fi
-
-
-
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lfabric\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lfabric', not appending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lfabric', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lfabric"
-
-fi
-
pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+ if test "${have_libfabric}" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: CH4 OFI Netmod: Using an external libfabric" >&5
+$as_echo "$as_me: CH4 OFI Netmod: Using an external libfabric" >&6;}
-$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
-
-
-fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_ofi
-
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_tcp
-
-# nothing to do for tcp right now
-
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_tcp
-
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_llc
-
-if test -z "$BUILD_NEMESIS_NETMOD_LLC_TRUE"; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:llc" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:llc" >&6;}
-
-
-
-# Check whether --with-libmemcached was given.
-if test "${with_libmemcached+set}" = set; then :
- withval=$with_libmemcached; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libmemcached=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-libmemcached=PATH expects a valid PATH" >&2;}
- with_libmemcached="" ;; #(
- *) :
- ;;
-esac
-else
- with_libmemcached=
-fi
-
-
-# Check whether --with-libmemcached-include was given.
-if test "${with_libmemcached_include+set}" = set; then :
- withval=$with_libmemcached_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libmemcached-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-libmemcached-include=PATH expects a valid PATH" >&2;}
- with_libmemcached_include="" ;; #(
- *) :
- ;;
-esac
-fi
-
-
-# Check whether --with-libmemcached-lib was given.
-if test "${with_libmemcached_lib+set}" = set; then :
- withval=$with_libmemcached_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-libmemcached-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-libmemcached-lib=PATH expects a valid PATH" >&2;}
- with_libmemcached_lib="" ;; #(
- *) :
- ;;
-esac
-fi
-
-
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
-
- if test -n "${with_libmemcached_include}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libmemcached_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libmemcached_include}', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libmemcached_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_libmemcached_include}"
-
-fi
-
-else
- if test -n "${with_libmemcached}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_libmemcached}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_libmemcached}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_libmemcached}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_libmemcached}/include"
-
-fi
-
-fi
-fi
-
- if test -n "${with_libmemcached_lib}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libmemcached_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libmemcached_lib}', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libmemcached_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_libmemcached_lib}"
-
-fi
-
-else
- if test -n "${with_libmemcached}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libmemcached}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libmemcached}/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libmemcached}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_libmemcached}/lib"
-
-fi
-
- if test -d "${with_libmemcached}/lib64}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_libmemcached}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_libmemcached}/lib64', not appending" >&5
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lfabric\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lfabric', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_libmemcached}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_libmemcached}/lib64"
-
-fi
-
-fi
-
-fi
-
-fi
-
-
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lfabric', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lfabric"
-# Check whether --with-ibverbs was given.
-if test "${with_ibverbs+set}" = set; then :
- withval=$with_ibverbs; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ibverbs=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ibverbs=PATH expects a valid PATH" >&2;}
- with_ibverbs="" ;; #(
- *) :
- ;;
-esac
-else
- with_ibverbs=
fi
-
-# Check whether --with-ibverbs-include was given.
-if test "${with_ibverbs_include+set}" = set; then :
- withval=$with_ibverbs_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ibverbs-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ibverbs-include=PATH expects a valid PATH" >&2;}
- with_ibverbs_include="" ;; #(
- *) :
- ;;
-esac
-fi
+ else
+ as_fn_error $? "Provided libfabric installation (--with-libfabric=${with_libfabric}) could not be configured." "$LINENO" 5
+ fi
+ fi
-# Check whether --with-ibverbs-lib was given.
-if test "${with_ibverbs_lib+set}" = set; then :
- withval=$with_ibverbs_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ibverbs-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ibverbs-lib=PATH expects a valid PATH" >&2;}
- with_ibverbs_lib="" ;; #(
- *) :
- ;;
-esac
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_ofi
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch4_shm_stubshm
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
-
- if test -n "${with_ibverbs_include}"; then :
-
+if test -z "$BUILD_SHM_STUBSHM_TRUE"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ibverbs_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ibverbs_include}', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ibverbs_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ibverbs_include}"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch4:shm:stubshm" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch4:shm:stubshm" >&6;}
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch4_shm_stubshm
-else
- if test -n "${with_ibverbs}"; then :
-
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch4_shm_posix
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ibverbs}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ibverbs}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ibverbs}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ibverbs}/include"
+if test -z "$BUILD_SHM_POSIX_TRUE"; then :
-fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch4:shm:posix" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch4:shm:posix" >&6;}
fi
-fi
-
- if test -n "${with_ibverbs_lib}"; then :
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch4_shm_posix
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_shm
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ibverbs_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ibverbs_lib}', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ibverbs_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ibverbs_lib}"
-fi
-else
- if test -n "${with_ibverbs}"; then :
+## end expansion of PAC_SUBCFG_BODY_src_mpid_common_shm
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_datatype
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ibverbs}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ibverbs}/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ibverbs}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ibverbs}/lib"
+# FIXME XXX DJG TODO move configure tests for datatype/dataloop code here?
-fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_common_datatype
- if test -d "${with_ibverbs}/lib64}"; then :
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_thread
+if test -z "$BUILD_MPID_COMMON_THREAD_TRUE"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ibverbs}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ibverbs}/lib64', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ibverbs}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ibverbs}/lib64"
+ :
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_common_thread
-fi
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_portals4
-fi
+if test -z "$BUILD_CH4_NETMOD_PORTALS4_TRUE"; then :
-fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch4:portals4" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch4:portals4" >&6;}
-# Check whether --with-llc was given.
-if test "${with_llc+set}" = set; then :
- withval=$with_llc; case "$withval" in #(
+# Check whether --with-portals4 was given.
+if test "${with_portals4+set}" = set; then :
+ withval=$with_portals4; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-llc=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-llc=PATH expects a valid PATH" >&2;}
- with_llc="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-portals4=PATH expects a valid PATH" >&2;}
+ with_portals4="" ;; #(
*) :
;;
esac
else
- with_llc=
+ with_portals4=
fi
-# Check whether --with-llc-include was given.
-if test "${with_llc_include+set}" = set; then :
- withval=$with_llc_include; case "$withval" in #(
+# Check whether --with-portals4-include was given.
+if test "${with_portals4_include+set}" = set; then :
+ withval=$with_portals4_include; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-llc-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-llc-include=PATH expects a valid PATH" >&2;}
- with_llc_include="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-portals4-include=PATH expects a valid PATH" >&2;}
+ with_portals4_include="" ;; #(
*) :
;;
esac
fi
-# Check whether --with-llc-lib was given.
-if test "${with_llc_lib+set}" = set; then :
- withval=$with_llc_lib; case "$withval" in #(
+# Check whether --with-portals4-lib was given.
+if test "${with_portals4_lib+set}" = set; then :
+ withval=$with_portals4_lib; case "$withval" in #(
yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-llc-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-llc-lib=PATH expects a valid PATH" >&2;}
- with_llc_lib="" ;; #(
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-portals4-lib=PATH expects a valid PATH" >&2;}
+ with_portals4_lib="" ;; #(
*) :
;;
esac
@@ -51631,63 +50877,63 @@ fi
# Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
# taking priority
- if test -n "${with_llc_include}"; then :
+ if test -n "${with_portals4_include}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_llc_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_llc_include}', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_portals4_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_portals4_include}', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_llc_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_llc_include}"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_portals4_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_portals4_include}"
fi
else
- if test -n "${with_llc}"; then :
+ if test -n "${with_portals4}"; then :
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_llc}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_llc}/include', not appending" >&5
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_portals4}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_portals4}/include', not appending" >&5
else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_llc}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_llc}/include"
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_portals4}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_portals4}/include"
fi
fi
fi
- if test -n "${with_llc_lib}"; then :
+ if test -n "${with_portals4_lib}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_llc_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_llc_lib}', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4_lib}', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_llc_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_llc_lib}"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_portals4_lib}"
fi
else
- if test -n "${with_llc}"; then :
+ if test -n "${with_portals4}"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_llc}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_llc}/lib', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4}/lib', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_llc}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_llc}/lib"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_portals4}/lib"
fi
- if test -d "${with_llc}/lib64}"; then :
+ if test -d "${with_portals4}/lib64"; then :
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_llc}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_llc}/lib64', not appending" >&5
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4}/lib64', not appending" >&5
else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_llc}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_llc}/lib64"
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_portals4}/lib64"
fi
@@ -51698,23 +50944,30 @@ fi
fi
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+
+
failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "libmemcached/memcached.h" "ac_cv_header_libmemcached_memcached_h" "$ac_includes_default"
-if test "x$ac_cv_header_libmemcached_memcached_h" = xyes; then :
+ ac_fn_c_check_header_mongrel "$LINENO" "portals4.h" "ac_cv_header_portals4_h" "$ac_includes_default"
+if test "x$ac_cv_header_portals4_h" = xyes; then :
else
failure=yes
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memcached in -lmemcached" >&5
-$as_echo_n "checking for memcached in -lmemcached... " >&6; }
-if ${ac_cv_lib_memcached_memcached+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PtlInit in -lportals" >&5
+$as_echo_n "checking for PtlInit in -lportals... " >&6; }
+if ${ac_cv_lib_portals_PtlInit+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmemcached $LIBS"
+LIBS="-lportals $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -51724,493 +50977,377 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char memcached ();
+char PtlInit ();
int
main ()
{
-return memcached ();
+return PtlInit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_memcached_memcached=yes
+ ac_cv_lib_portals_PtlInit=yes
else
- ac_cv_lib_memcached_memcached=no
+ ac_cv_lib_portals_PtlInit=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_memcached_memcached" >&5
-$as_echo "$ac_cv_lib_memcached_memcached" >&6; }
-if test "x$ac_cv_lib_memcached_memcached" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_portals_PtlInit" >&5
+$as_echo "$ac_cv_lib_portals_PtlInit" >&6; }
+if test "x$ac_cv_lib_portals_PtlInit" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMEMCACHED 1
+#define HAVE_LIBPORTALS 1
_ACEOF
- LIBS="-lmemcached $LIBS"
+ LIBS="-lportals $LIBS"
else
failure=yes
fi
if test "$failure" = "no" ; then
- libmemcached_found=yes
+ success=yes
else
- libmemcached_found=no
+ success=no
fi
- if test "${libmemcached_found}" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: libmemcached is going to be linked." >&5
-$as_echo "$as_me: libmemcached is going to be linked." >&6;}
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: libmemcached was not found" >&5
-$as_echo "$as_me: libmemcached was not found" >&6;}
- fi
+ if test "$success" = "no" ; then
+ as_fn_error $? "'portals4.h or libportals library not found. Did you specify --with-portals4= or --with-portals4-include= or --with-portals4-lib=?'" "$LINENO" 5
+ fi
- failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default"
-if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then :
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lportals\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lportals', not appending" >&5
else
- failure=yes
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lportals', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lportals"
+
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ibv_open_device in -libverbs" >&5
-$as_echo_n "checking for ibv_open_device in -libverbs... " >&6; }
-if ${ac_cv_lib_ibverbs_ibv_open_device+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-libverbs $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char ibv_open_device ();
-int
-main ()
-{
-return ibv_open_device ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_ibverbs_ibv_open_device=yes
-else
- ac_cv_lib_ibverbs_ibv_open_device=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ibverbs_ibv_open_device" >&5
-$as_echo "$ac_cv_lib_ibverbs_ibv_open_device" >&6; }
-if test "x$ac_cv_lib_ibverbs_ibv_open_device" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBIBVERBS 1
-_ACEOF
- LIBS="-libverbs $LIBS"
-else
- failure=yes
fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_portals4
- if test "$failure" = "no" ; then
- ibverbs_found=yes
- else
- ibverbs_found=no
- fi
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_stubnm
- if test "${ibverbs_found}" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: libibverbs is going to be linked." >&5
-$as_echo "$as_me: libibverbs is going to be linked." >&6;}
- else
- as_fn_error $? "Internal error: ibverbs was not found" "$LINENO" 5
- fi
+if test -z "$BUILD_CH4_NETMOD_STUBNM_TRUE"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch4:stubnm" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch4:stubnm" >&6;}
- failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "llc.h" "ac_cv_header_llc_h" "$ac_includes_default"
-if test "x$ac_cv_header_llc_h" = xyes; then :
+$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
-else
- failure=yes
-fi
+$as_echo "#define MPIDI_BUILD_CH4_LOCALITY_INFO 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LLC_init in -lllc" >&5
-$as_echo_n "checking for LLC_init in -lllc... " >&6; }
-if ${ac_cv_lib_llc_LLC_init+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lllc $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char LLC_init ();
-int
-main ()
-{
-return LLC_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_llc_LLC_init=yes
-else
- ac_cv_lib_llc_LLC_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_llc_LLC_init" >&5
-$as_echo "$ac_cv_lib_llc_LLC_init" >&6; }
-if test "x$ac_cv_lib_llc_LLC_init" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBLLC 1
-_ACEOF
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_stubnm
- LIBS="-lllc $LIBS"
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_sched
-else
- failure=yes
-fi
- if test "$failure" = "no" ; then
- llc_found=yes
- else
- llc_found=no
- fi
- if test "${llc_found}" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: libllc is going to be linked." >&5
-$as_echo "$as_me: libllc is going to be linked." >&6;}
- else
- as_fn_error $? "Internal error: llc was not found" "$LINENO" 5
- fi
+## end expansion of PAC_SUBCFG_BODY_src_mpid_common_sched
- #AC_CHECK_HEADERS([stdlib.h dlfcn.h])
- #AC_CHECK_FUNCS([dlopen])
- #AC_SEARCH_LIBS([dlopen], [dl])
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_ucx
+if test -z "$BUILD_CH4_NETMOD_UCX_TRUE"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch4:ucx" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch4:ucx" >&6;}
-$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
+# Check whether --with-ucx was given.
+if test "${with_ucx+set}" = set; then :
+ withval=$with_ucx; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ucx=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ucx=PATH expects a valid PATH" >&2;}
+ with_ucx="" ;; #(
+ *) :
+ ;;
+esac
+else
+ with_ucx=
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_llc
-## begin expansion of PAC_SUBCFG_BODY_src_mpid_common_sock_poll
-if test -z "$BUILD_MPID_COMMON_SOCK_POLL_TRUE"; then :
+# Check whether --with-ucx-include was given.
+if test "${with_ucx_include+set}" = set; then :
+ withval=$with_ucx_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ucx-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ucx-include=PATH expects a valid PATH" >&2;}
+ with_ucx_include="" ;; #(
+ *) :
+ ;;
+esac
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR src/mpid/common/sock/poll" >&5
-$as_echo "$as_me: RUNNING CONFIGURE FOR src/mpid/common/sock/poll" >&6;}
-# Check whether --enable-sock-debug was given.
-if test "${enable_sock_debug+set}" = set; then :
- enableval=$enable_sock_debug;
-else
- enable_sock_debug=no
+# Check whether --with-ucx-lib was given.
+if test "${with_ucx_lib+set}" = set; then :
+ withval=$with_ucx_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ucx-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-ucx-lib=PATH expects a valid PATH" >&2;}
+ with_ucx_lib="" ;; #(
+ *) :
+ ;;
+esac
fi
-if test "$enable_sock_debug" = yes ; then
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
+
+ if test -n "${with_ucx_include}"; then :
-$as_echo "#define USE_SOCK_VERIFY 1" >>confdefs.h
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ucx_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ucx_include}', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ucx_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ucx_include}"
fi
-ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll"
-if test "x$ac_cv_func_poll" = xyes; then :
- pac_cv_have_func_poll=yes
else
- pac_cv_have_func_poll=no
+ if test -n "${with_ucx}"; then :
+
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ucx}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ucx}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ucx}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_ucx}/include"
+
fi
-if test "X$pac_cv_have_func_poll" = "Xno" ; then
- if test -f /sw/include/sys/poll.h ; then
- CFLAGS="$CFLAGS -I/sw/include"
- LIBS="$LIBS -L/sw/lib -lpoll"
- else
- as_fn_error $? "This device requires the poll function" "$LINENO" 5
- fi
+fi
fi
-for ac_header in assert.h errno.h fcntl.h limits.h netdb.h netinet/in.h netinet/tcp.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ if test -n "${with_ucx_lib}"; then :
+
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ucx_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ucx_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ucx_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ucx_lib}"
fi
-done
+else
+ if test -n "${with_ucx}"; then :
-for ac_header in poll.h stdlib.h sys/param.h sys/poll.h sys/types.h sys/uio.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ucx}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ucx}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ucx}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ucx}/lib"
fi
-done
+ if test -d "${with_ucx}/lib64"; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if struct poll is defined" >&5
-$as_echo_n "checking if struct poll is defined... " >&6; };
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ucx}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ucx}/lib64', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ucx}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_ucx}/lib64"
-#if defined(HAVE_POLL_H)
-#include <poll.h>
-#endif
-#if defined(HAVE_SYS_POLL_H)
-#include <sys/poll.h>
-#endif
+fi
-int
-main ()
-{
+fi
-struct pollfd pollfd;
-pollfd.fd = -1;
+fi
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-as_fn_error $? "This device requires the poll function" "$LINENO" 5
+
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "ucp/api/ucp.h" "ac_cv_header_ucp_api_ucp_h" "$ac_includes_default"
+if test "x$ac_cv_header_ucp_api_ucp_h" = xyes; then :
+
+else
+ failure=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if a simple program using poll() can be compiled" >&5
-$as_echo_n "checking if a simple program using poll() can be compiled... " >&6; };
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ucp_config_read in -lucp" >&5
+$as_echo_n "checking for ucp_config_read in -lucp... " >&6; }
+if ${ac_cv_lib_ucp_ucp_config_read+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lucp $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#if defined(HAVE_POLL_H)
-#include <poll.h>
-#endif
-#if defined(HAVE_SYS_POLL_H)
-#include <sys/poll.h>
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
#endif
-
+char ucp_config_read ();
int
main ()
{
-
-struct pollfd pollfds[2];
-int n_fds;
-pollfds[0].fd = -1;
-pollfds[1].fd = -1;
-n_fds = poll(pollfds, 2, -1);
-
+return ucp_config_read ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_ucp_ucp_config_read=yes
else
+ ac_cv_lib_ucp_ucp_config_read=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ucp_ucp_config_read" >&5
+$as_echo "$ac_cv_lib_ucp_ucp_config_read" >&6; }
+if test "x$ac_cv_lib_ucp_ucp_config_read" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUCP 1
+_ACEOF
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-as_fn_error $? "This device requires the poll function" "$LINENO" 5
+ LIBS="-lucp $LIBS"
+else
+ failure=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bit fields work in ip.h" >&5
-$as_echo_n "checking whether bit fields work in ip.h... " >&6; };
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ if test "$failure" = "no" ; then
+ success=yes
+ else
+ success=no
+ fi
-#include <netinet/tcp.h>
+ if test "$success" = "no" ; then
+ as_fn_error $? "'ucp/api/ucp.h or libucp library not found. Did you specify --with-ucx= or --with-ucx-include= or --with-ucx-lib=?'" "$LINENO" 5
+ fi
-int
-main ()
-{
-int i;
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-bit_fields=yes
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lucp\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lucp', not appending" >&5
else
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lucp', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lucp"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-bit_fields=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$bit_fields" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Adding -D_NO_BITFIELDS to CFLAGS" >&5
-$as_echo "Adding -D_NO_BITFIELDS to CFLAGS" >&6; }
- CFLAGS="$CFLAGS -D_NO_BITFIELDS"
fi
-for ac_func in gethostname
-do :
- ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
-if test "x$ac_cv_func_gethostname" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTNAME 1
-_ACEOF
fi
-done
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch4_netmod_ucx
-if test "$ac_cv_func_gethostname" = "yes" ; then
- # Do we need to declare gethostname?
+## begin expansion of PAC_SUBCFG_BODY_src_pm_remshell
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
-$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
-if ${pac_cv_func_decl_gethostname+:} false; then :
- $as_echo_n "(cached) " >&6
+
+# the pm_names variable is set by the top level configure
+build_remshell=no
+for pm_name in $pm_names ; do
+ if test "X$pm_name" = "Xremshell" ; then
+ build_remshell=yes
+ fi
+done
+ if test "X$build_remshell" = "Xyes"; then
+ BUILD_PM_REMSHELL_TRUE=
+ BUILD_PM_REMSHELL_FALSE='#'
else
+ BUILD_PM_REMSHELL_TRUE='#'
+ BUILD_PM_REMSHELL_FALSE=
+fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <unistd.h>
-void (*fptr)(void) = (void(*)(void))gethostname;
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_gethostname=no
+# first_pm_name is set by the top level configure
+ if test "X$first_pm_name" = "Xremshell"; then
+ PRIMARY_PM_REMSHELL_TRUE=
+ PRIMARY_PM_REMSHELL_FALSE='#'
else
- pac_cv_func_decl_gethostname=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ PRIMARY_PM_REMSHELL_TRUE='#'
+ PRIMARY_PM_REMSHELL_FALSE=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
-$as_echo "$pac_cv_func_decl_gethostname" >&6; }
-if test "$pac_cv_func_decl_gethostname" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_GETHOSTNAME_DECL 1
-_ACEOF
+if test -z "$BUILD_PM_REMSHELL_TRUE"; then :
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR src/pm/remshell" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR src/pm/remshell" >&6;}
+# Check that we are using the simple PMI implementation
+# (Selecting multiple PMs may require incompatible PMI implementations
+# (e.g., remshell and SMPD).
+if test -z "$PM_REQUIRES_PMI" ; then
+ PM_REQUIRES_PMI=simple
+elif test "$PM_REQUIRES_PMI" != "simple" ; then
+ echo "remshell requires the simple PMI implementation; $PM_REQUIRES_PMI has already been selected"
+ exit 1
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
-$as_echo_n "checking for library containing socket... " >&6; }
-if ${ac_cv_search_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socket ();
-int
-main ()
-{
-return socket ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' socket; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_socket=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_socket+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_socket+:} false; then :
+# tell src/pm/util to configure itself
+build_pm_util=yes
+# Check whether --enable-allowport was given.
+if test "${enable_allowport+set}" = set; then :
+ enableval=$enable_allowport;
else
- ac_cv_search_socket=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ enable_allowport=yes
+fi
+
+# Check whether --enable-onsig was given.
+if test "${enable_onsig+set}" = set; then :
+ enableval=$enable_onsig;
+else
+ enable_onsig=no
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
-$as_echo "$ac_cv_search_socket" >&6; }
-ac_res=$ac_cv_search_socket
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+# Check whether --enable-newsession was given.
+if test "${enable_newsession+set}" = set; then :
+ enableval=$enable_newsession;
+else
+ enable_newsession=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
-$as_echo_n "checking for library containing gethostbyname... " >&6; }
-if ${ac_cv_search_gethostbyname+:} false; then :
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socketpair" >&5
+$as_echo_n "checking for library containing socketpair... " >&6; }
+if ${ac_cv_search_socketpair+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -52223,16 +51360,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char gethostbyname ();
+char socketpair ();
int
main ()
{
-return gethostbyname ();
+return socketpair ();
;
return 0;
}
_ACEOF
-for ac_lib in '' nsl; do
+for ac_lib in '' socket; do
if test -z "$ac_lib"; then
ac_res="none required"
else
@@ -52240,100 +51377,325 @@ for ac_lib in '' nsl; do
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_gethostbyname=$ac_res
+ ac_cv_search_socketpair=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if ${ac_cv_search_gethostbyname+:} false; then :
+ if ${ac_cv_search_socketpair+:} false; then :
break
fi
done
-if ${ac_cv_search_gethostbyname+:} false; then :
+if ${ac_cv_search_socketpair+:} false; then :
else
- ac_cv_search_gethostbyname=no
+ ac_cv_search_socketpair=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
-$as_echo "$ac_cv_search_gethostbyname" >&6; }
-ac_res=$ac_cv_search_gethostbyname
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socketpair" >&5
+$as_echo "$ac_cv_search_socketpair" >&6; }
+ac_res=$ac_cv_search_socketpair
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
+for ac_header in sys/types.h signal.h sys/ptrace.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
-# Check first for sys/socket.h . We check not only for existence but whether
-# it can be compiled (!), as we have seen some problems with this.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+fi
+
+done
+
+for ac_func in strsignal
+do :
+ ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal"
+if test "x$ac_cv_func_strsignal" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRSIGNAL 1
+_ACEOF
+
+fi
+done
+
+for ac_func in sigaction signal sigset
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+sigaction_ok=no
+if test "$ac_cv_func_sigaction" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction" >&5
+$as_echo_n "checking for struct sigaction... " >&6; }
+if ${pac_cv_struct_sigaction+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <signal.h>
+int
+main ()
+{
-#include <sys/types.h>
-#include <sys/socket.h>
+struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_struct_sigaction="yes"
+else
+ pac_cv_struct_sigaction="no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction" >&5
+$as_echo "$pac_cv_struct_sigaction" >&6; }
+ if test "$pac_cv_struct_sigaction" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction with _POSIX_SOURCE" >&5
+$as_echo_n "checking for struct sigaction with _POSIX_SOURCE... " >&6; }
+if ${pac_cv_struct_sigaction_needs_posix+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _POSIX_SOURCE
+#include <signal.h>
int
main ()
{
-int a;
+
+struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_sys_socket_h=yes
+ pac_cv_struct_sigaction_needs_posix="yes"
else
- ac_cv_header_sys_socket_h=no
+ pac_cv_struct_sigaction_needs_posix="no"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$ac_cv_header_sys_socket_h" = yes ; then
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_needs_posix" >&5
+$as_echo "$pac_cv_struct_sigaction_needs_posix" >&6; }
+ if test "$pac_cv_struct_sigaction_needs_posix" = "yes" ; then
+ sigaction_ok=yes
+ fi
+ else
+ sigaction_ok=yes
+ fi
+fi
+# Decide on the signal handler to use
+if test "$ac_cv_func_sigaction" = "yes" -a "$sigaction_ok" = "yes" ; then
+ # FIXME DJG: where should this get set?
+ if test "$pac_struct_sigaction_needs_posix" = yes ; then
-$as_echo "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
+$as_echo "#define NEEDS_POSIX_FOR_SIGACTION 1" >>confdefs.h
+
+ fi
+
+$as_echo "#define USE_SIGACTION 1" >>confdefs.h
+
+elif test "$ac_cv_func_signal" = "yes" ; then
+
+$as_echo "#define USE_SIGNAL 1" >>confdefs.h
fi
-# Check for socklen_t . If undefined, define it as int
-# (note the conditional inclusion of sys/socket.h)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
-$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
-if ${pac_cv_have_socklen_t+:} false; then :
+if test "$enable_allowport" = "yes" ; then
+
+$as_echo "#define MPIEXEC_ALLOW_PORT 1" >>confdefs.h
+
+fi
+
+# some of these may be redundant with the upper level code, although the caching
+# should detect it and make the performance impact a non-issue
+for ac_header in string.h sys/time.h unistd.h stdlib.h sys/socket.h wait.h errno.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in ptrace
+do :
+ ac_fn_c_check_func "$LINENO" "ptrace" "ac_cv_func_ptrace"
+if test "x$ac_cv_func_ptrace" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTRACE 1
+_ACEOF
+
+fi
+done
+
+# It isn't enough to find ptrace. We also need the ptrace
+# parameters, which some systems, such as IRIX, do not define.
+if test "$ac_cv_func_ptrace" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ptrace named parameters" >&5
+$as_echo_n "checking for ptrace named parameters... " >&6; }
+if ${pac_cv_has_ptrace_parms+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-typedef struct { double a; int b; } socklen_t;
+#include <sys/ptrace.h>
int
main ()
{
-socklen_t a;a.a=1.0;
+int i = PTRACE_CONT;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_socklen_t=no
+ pac_cv_has_ptrace_parms=yes
else
- pac_cv_have_socklen_t=yes
+ pac_cv_has_ptrace_parms=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
-$as_echo "$pac_cv_have_socklen_t" >&6; }
-if test "X$pac_cv_have_socklen_t" = Xno ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_ptrace_parms" >&5
+$as_echo "$pac_cv_has_ptrace_parms" >&6; }
+ if test "$pac_cv_has_ptrace_parms" = "yes" ; then
+
+$as_echo "#define HAVE_PTRACE_CONT /**/" >>confdefs.h
+
+ fi
+fi
+
+if test "$enable_newsession" = "yes" ; then
+
+$as_echo "#define USE_NEW_SESSION 1" >>confdefs.h
+
+fi
+
+# Extract the first word of "ssh", so it can be a program name with args.
+set dummy ssh; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_SSH+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $SSH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SSH="$SSH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_SSH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+SSH=$ac_cv_path_SSH
+if test -n "$SSH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SSH" >&5
+$as_echo "$SSH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "rsh", so it can be a program name with args.
+set dummy rsh; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_RSH+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $RSH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_RSH="$RSH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_RSH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+RSH=$ac_cv_path_RSH
+if test -n "$RSH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RSH" >&5
+$as_echo "$RSH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
-$as_echo "#define socklen_t int" >>confdefs.h
+if test -z "$SSH" && test -n "$RSH" ; then
+ remshell="$RSH"
+else
+ remshell="$SSH"
fi
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_MACHINES_PATH "$eval_datadir:."
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_REMOTE_SHELL "$remshell"
+_ACEOF
+
+
+
+
fi
-## end expansion of PAC_SUBCFG_BODY_src_mpid_common_sock_poll
+## end expansion of PAC_SUBCFG_BODY_src_pm_remshell
## begin expansion of PAC_SUBCFG_BODY_src_pm_util
@@ -52775,71 +52137,273 @@ do :
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+if test "$ac_cv_header_sys_uio_h" = "yes" ; then
+ # Test for iovec defined
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct iovec is defined in sys/uio.h" >&5
+$as_echo_n "checking whether struct iovec is defined in sys/uio.h... " >&6; }
+if ${pac_cv_has_struct_iovec+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/uio.h>
+int
+main ()
+{
+struct iovec v
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_has_struct_iovec=yes
+else
+ pac_cv_has_struct_iovec=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_struct_iovec" >&5
+$as_echo "$pac_cv_has_struct_iovec" >&6; }
+ if test "$pac_cv_has_struct_iovec" = "yes" ; then
+
+$as_echo "#define HAVE_IOVEC_DEFINITION 1" >>confdefs.h
+
+ fi
+fi
+for ac_func in strsignal
+do :
+ ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal"
+if test "x$ac_cv_func_strsignal" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRSIGNAL 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strsignal" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strsignal needs a declaration" >&5
+$as_echo_n "checking whether strsignal needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strsignal+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strsignal;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strsignal=no
+else
+ pac_cv_func_decl_strsignal=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strsignal" >&5
+$as_echo "$pac_cv_func_decl_strsignal" >&6; }
+if test "$pac_cv_func_decl_strsignal" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRSIGNAL_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+for ac_func in sigaction signal sigset
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+sigaction_ok=no
+if test "$ac_cv_func_sigaction" = "yes" ; then
+ # Make sure that the fields that we need in sigaction are defined
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction and sa_handler" >&5
+$as_echo_n "checking for struct sigaction and sa_handler... " >&6; }
+if ${pac_cv_struct_sigaction_with_sa_handler+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <signal.h>
+int
+main ()
+{
+
+struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
+act.sa_handler = SIG_IGN;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_struct_sigaction_with_sa_handler=yes
+else
+ pac_cv_struct_sigaction_with_sa_handler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_with_sa_handler" >&5
+$as_echo "$pac_cv_struct_sigaction_with_sa_handler" >&6; }
+ if test "$pac_cv_struct_sigaction_with_sa_handler" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction and sa_handler with _POSIX_SOURCE" >&5
+$as_echo_n "checking for struct sigaction and sa_handler with _POSIX_SOURCE... " >&6; }
+if ${pac_cv_struct_sigaction_with_sa_handler_needs_posix+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _POSIX_SOURCE
+#include <signal.h>
+int
+main ()
+{
+
+struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
+act.sa_handler = SIG_IGN;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_struct_sigaction_with_sa_handler_needs_posix=yes
+else
+ pac_cv_struct_sigaction_with_sa_handler_needs_posix=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_with_sa_handler_needs_posix" >&5
+$as_echo "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" >&6; }
+ if test "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" = "yes" ; then
+ sigaction_ok=yes
+ fi
+ else
+ sigaction_ok=yes
+ fi
+fi
+# Decide on the signal handler to use
+if test "$ac_cv_func_sigaction" = "yes" -a "$sigaction_ok" = "yes" ; then
+ if test "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" = yes ; then
+
+$as_echo "#define NEEDS_POSIX_FOR_SIGACTION 1" >>confdefs.h
+
+ fi
+
+$as_echo "#define USE_SIGACTION /**/" >>confdefs.h
+
+elif test "$ac_cv_func_signal" = "yes" ; then
+
+$as_echo "#define USE_SIGNAL /**/" >>confdefs.h
+
+fi
+# Check for needed declarations. This must be after any step that might
+# change the compilers behavior, such as the _POSIX_SOURCE test above
+# FIXME: need to include the test, at least for any file that
+# might set _POSIX_SOURCE
+# putenv() sets environment variable
+for ac_func in putenv
+do :
+ ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
+if test "x$ac_cv_func_putenv" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PUTENV 1
_ACEOF
fi
-
done
-if test "$ac_cv_header_sys_uio_h" = "yes" ; then
- # Test for iovec defined
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct iovec is defined in sys/uio.h" >&5
-$as_echo_n "checking whether struct iovec is defined in sys/uio.h... " >&6; }
-if ${pac_cv_has_struct_iovec+:} false; then :
+if test "$ac_cv_func_putenv" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether putenv needs a declaration" >&5
+$as_echo_n "checking whether putenv needs a declaration... " >&6; }
+if ${pac_cv_func_decl_putenv+:} false; then :
$as_echo_n "(cached) " >&6
else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/uio.h>
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))putenv;
int
main ()
{
-struct iovec v
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_has_struct_iovec=yes
+ pac_cv_func_decl_putenv=no
else
- pac_cv_has_struct_iovec=no
+ pac_cv_func_decl_putenv=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_struct_iovec" >&5
-$as_echo "$pac_cv_has_struct_iovec" >&6; }
- if test "$pac_cv_has_struct_iovec" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_putenv" >&5
+$as_echo "$pac_cv_func_decl_putenv" >&6; }
+if test "$pac_cv_func_decl_putenv" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_PUTENV_DECL 1
+_ACEOF
-$as_echo "#define HAVE_IOVEC_DEFINITION 1" >>confdefs.h
- fi
fi
-for ac_func in strsignal
+
+fi
+# gethostname() returns host name
+for ac_func in gethostname
do :
- ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal"
-if test "x$ac_cv_func_strsignal" = xyes; then :
+ ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
+if test "x$ac_cv_func_gethostname" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_STRSIGNAL 1
+#define HAVE_GETHOSTNAME 1
_ACEOF
fi
done
-if test "$ac_cv_func_strsignal" = "yes" ; then
+if test "$ac_cv_func_gethostname" = "yes" ; then
+ # Do we need to declare gethostname?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strsignal needs a declaration" >&5
-$as_echo_n "checking whether strsignal needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strsignal+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
+$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
+if ${pac_cv_func_decl_gethostname+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h>
-void (*fptr)(void) = (void(*)(void))strsignal;
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))gethostname;
int
main ()
{
@@ -52849,47 +52413,101 @@ main ()
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strsignal=no
+ pac_cv_func_decl_gethostname=no
else
- pac_cv_func_decl_strsignal=yes
+ pac_cv_func_decl_gethostname=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strsignal" >&5
-$as_echo "$pac_cv_func_decl_strsignal" >&6; }
-if test "$pac_cv_func_decl_strsignal" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
+$as_echo "$pac_cv_func_decl_gethostname" >&6; }
+if test "$pac_cv_func_decl_gethostname" = "yes" ; then
cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRSIGNAL_DECL 1
+#define NEEDS_GETHOSTNAME_DECL 1
_ACEOF
fi
fi
-for ac_func in snprintf
+
+
+#
+# Check for select and working FD_ZERO
+for ac_func in select
do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
+ ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select"
+if test "x$ac_cv_func_select" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
+#define HAVE_SELECT 1
_ACEOF
fi
done
-for ac_func in strdup
+for ac_header in sys/select.h
do :
- ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
-if test "x$ac_cv_func_strdup" = xyes; then :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_STRDUP 1
+#define HAVE_SYS_SELECT_H 1
_ACEOF
fi
+
done
-for ac_func in sigaction signal sigset
+if test "$ac_cv_func_select" != yes ; then
+ as_fn_error $? "select is required for the process manager utilities" "$LINENO" 5
+else
+ # Check that FD_ZERO works. Under the Darwin xlc (version 6) compiler,
+ # FD_ZERO gets turned into a referece to __builtin_bzero, which is not
+ # in the xlc libraries. This is apparently due to xlc pretending that it
+ # is GCC within the system header files (the same test that must
+ # succeed within the system header files to cause the declaration to
+ # be __builtin_bzero fails outside of the header file).
+ # (sys/select.h is POSIX)
+ if test "$ac_cv_header_sys_select_h" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FD_ZERO works" >&5
+$as_echo_n "checking whether FD_ZERO works... " >&6; }
+if ${pac_cv_fdzero_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/select.h>
+int
+main ()
+{
+fd_set v; FD_ZERO(&v)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_fdzero_works=yes
+else
+ pac_cv_fdzero_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fdzero_works" >&5
+$as_echo "$pac_cv_fdzero_works" >&6; }
+ if test "$pac_cv_fdzero_works" != yes ; then
+ as_fn_error $? "Programs with FD_ZERO cannot be linked (check your system includes)" "$LINENO" 5
+ fi
+ fi
+fi
+#
+# Check for the Linux functions for controlling processor affinity.
+#
+# LINUX: sched_setaffinity
+# AIX: bindprocessor
+# OSX (Leopard): thread_policy_set
+for ac_func in sched_setaffinity sched_getaffinity bindprocessor thread_policy_set
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -52901,527 +52519,621 @@ _ACEOF
fi
done
-sigaction_ok=no
-if test "$ac_cv_func_sigaction" = "yes" ; then
- # Make sure that the fields that we need in sigaction are defined
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction and sa_handler" >&5
-$as_echo_n "checking for struct sigaction and sa_handler... " >&6; }
-if ${pac_cv_struct_sigaction_with_sa_handler+:} false; then :
+if test "$ac_cv_func_sched_setaffinity" = "yes" ; then
+ # Test for the cpu process set type
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cpu_set_t available" >&5
+$as_echo_n "checking whether cpu_set_t available... " >&6; }
+if ${pac_cv_have_cpu_set_t+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <signal.h>
+
+#include <sched.h>
int
main ()
{
-
-struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
-act.sa_handler = SIG_IGN;
+ cpu_set_t t;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_sigaction_with_sa_handler=yes
+ pac_cv_have_cpu_set_t=yes
else
- pac_cv_struct_sigaction_with_sa_handler=no
+ pac_cv_have_cpu_set_t=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_with_sa_handler" >&5
-$as_echo "$pac_cv_struct_sigaction_with_sa_handler" >&6; }
- if test "$pac_cv_struct_sigaction_with_sa_handler" = "no" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sigaction and sa_handler with _POSIX_SOURCE" >&5
-$as_echo_n "checking for struct sigaction and sa_handler with _POSIX_SOURCE... " >&6; }
-if ${pac_cv_struct_sigaction_with_sa_handler_needs_posix+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cpu_set_t" >&5
+$as_echo "$pac_cv_have_cpu_set_t" >&6; }
+ if test "$pac_cv_have_cpu_set_t" = yes ; then
+
+$as_echo "#define HAVE_CPU_SET_T 1" >>confdefs.h
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the CPU_SET and CPU_ZERO macros are defined" >&5
+$as_echo_n "checking whether the CPU_SET and CPU_ZERO macros are defined... " >&6; }
+if ${pac_cv_cpu_set_defined+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#define _POSIX_SOURCE
-#include <signal.h>
+
+#include <sched.h>
+int
+main ()
+{
+ cpu_set_t t; CPU_ZERO(&t); CPU_SET(1,&t);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_cpu_set_defined=yes
+else
+ pac_cv_cpu_set_defined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cpu_set_defined" >&5
+$as_echo "$pac_cv_cpu_set_defined" >&6; }
+ if test "$pac_cv_cpu_set_defined" = "yes" ; then
+
+$as_echo "#define HAVE_CPU_SET_MACROS 1" >>confdefs.h
+
+ fi
+ # FIXME: Some versions of sched_setaffinity return ENOSYS (!),
+ # so we should test for the unfriendly and useless behavior
+ fi
+fi
+if test "$ac_cv_func_thread_policy_set" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether thread affinity macros defined" >&5
+$as_echo_n "checking whether thread affinity macros defined... " >&6; }
+if ${pac_cv_have_thread_affinity_policy+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <mach/thread_policy.h>
int
main ()
{
-struct sigaction act; sigaddset( &act.sa_mask, SIGINT );
-act.sa_handler = SIG_IGN;
+#if !defined(THREAD_AFFINITY_POLICY) || !defined(THREAD_AFFINITY_TAG_NULL)
+ :'thread macros not defined
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_struct_sigaction_with_sa_handler_needs_posix=yes
+ pac_cv_have_thread_affinity_policy=yes
else
- pac_cv_struct_sigaction_with_sa_handler_needs_posix=no
+ pac_cv_have_thread_affinity_policy=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_sigaction_with_sa_handler_needs_posix" >&5
-$as_echo "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" >&6; }
- if test "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" = "yes" ; then
- sigaction_ok=yes
- fi
- else
- sigaction_ok=yes
- fi
-fi
-# Decide on the signal handler to use
-if test "$ac_cv_func_sigaction" = "yes" -a "$sigaction_ok" = "yes" ; then
- if test "$pac_cv_struct_sigaction_with_sa_handler_needs_posix" = yes ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_thread_affinity_policy" >&5
+$as_echo "$pac_cv_have_thread_affinity_policy" >&6; }
+ if test "$pac_cv_have_thread_affinity_policy" = yes ; then
-$as_echo "#define NEEDS_POSIX_FOR_SIGACTION 1" >>confdefs.h
+$as_echo "#define HAVE_OSX_THREAD_AFFINITY 1" >>confdefs.h
fi
+fi
-$as_echo "#define USE_SIGACTION /**/" >>confdefs.h
+for ac_header in string.h sys/time.h time.h stdlib.h sys/socket.h wait.h errno.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
-elif test "$ac_cv_func_signal" = "yes" ; then
+fi
-$as_echo "#define USE_SIGNAL /**/" >>confdefs.h
+done
+
+for ac_func in time
+do :
+ ac_fn_c_check_func "$LINENO" "time" "ac_cv_func_time"
+if test "x$ac_cv_func_time" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_TIME 1
+_ACEOF
fi
-# Check for needed declarations. This must be after any step that might
-# change the compilers behavior, such as the _POSIX_SOURCE test above
-# FIXME: need to include the test, at least for any file that
-# might set _POSIX_SOURCE
-if test "$ac_cv_func_snprintf" = "yes" ; then
+done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
+# Check for socklen_t .
+# (note the conditional inclusion of sys/socket.h)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
+$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
+if ${pac_cv_have_socklen_t+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+typedef struct { double a; int b; } socklen_t;
int
main ()
{
-
+socklen_t a;a.a=1.0;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
+ pac_cv_have_socklen_t=no
else
- pac_cv_func_decl_snprintf=yes
+ pac_cv_have_socklen_t=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
+$as_echo "$pac_cv_have_socklen_t" >&6; }
+if test "$pac_cv_have_socklen_t" = yes ; then
+
+$as_echo "#define HAVE_SOCKLEN_T 1" >>confdefs.h
+
+fi
+
+
+fi
+## end expansion of PAC_SUBCFG_BODY_src_pm_util
+
+## begin expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_portals4
+
+if test -z "$BUILD_NEMESIS_NETMOD_PORTALS4_TRUE"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: RUNNING CONFIGURE FOR ch3:nemesis:portals4" >&5
+$as_echo "$as_me: RUNNING CONFIGURE FOR ch3:nemesis:portals4" >&6;}
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __func__" >&5
+$as_echo_n "checking whether the compiler defines __func__... " >&6; }
+if ${pac_cv_have__func__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+tmp_am_cross=no
+if test "$cross_compiling" = yes; then :
+ tmp_am_cross=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__func__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_have__func__=yes
+else
+ pac_cv_have__func__=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+if test "$tmp_am_cross" = yes ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__func__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_have__func__=yes
+else
+ pac_cv_have__func__=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
fi
-if test "$ac_cv_func_strdup" = "yes" ; then
- # Do we need to declare strdup?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__func__" >&5
+$as_echo "$pac_cv_have__func__" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
-$as_echo_n "checking whether strdup needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strdup+:} false; then :
+if test "$pac_cv_have__func__" = "yes" ; then
+
+$as_echo "#define HAVE__FUNC__ /**/" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __FUNC__" >&5
+$as_echo_n "checking whether the compiler defines __FUNC__... " >&6; }
+if ${pac_cv_have_cap__func__+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+tmp_am_cross=no
+if test "$cross_compiling" = yes; then :
+ tmp_am_cross=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+
+
#include <string.h>
-void (*fptr)(void) = (void(*)(void))strdup;
-int
-main ()
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNC__, "foo") == 0);
+}
+int main(int argc, char ** argv)
{
+ return (foo() ? 0 : 1);
+}
- ;
- return 0;
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_have_cap__func__=yes
+else
+ pac_cv_have_cap__func__=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+if test "$tmp_am_cross" = yes ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNC__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
}
+
+
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strdup=no
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_have__func__=yes
else
- pac_cv_func_decl_strdup=yes
+ pac_cv_have__func__=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
-$as_echo "$pac_cv_func_decl_strdup" >&6; }
-if test "$pac_cv_func_decl_strdup" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRDUP_DECL 1
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cap__func__" >&5
+$as_echo "$pac_cv_have_cap__func__" >&6; }
+
+if test "$pac_cv_have_cap__func__" = "yes" ; then
+
+$as_echo "#define HAVE_CAP__FUNC__ /**/" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler sets __FUNCTION__" >&5
+$as_echo_n "checking whether the compiler sets __FUNCTION__... " >&6; }
+if ${pac_cv_have__function__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+tmp_am_cross=no
+if test "$cross_compiling" = yes; then :
+ tmp_am_cross=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNCTION__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+
+
_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_have__function__=yes
+else
+ pac_cv_have__function__=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+if test "$tmp_am_cross" = yes ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNCTION__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_have__func__=yes
+else
+ pac_cv_have__func__=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have__function__" >&5
+$as_echo "$pac_cv_have__function__" >&6; }
-# putenv() sets environment variable
-for ac_func in putenv
-do :
- ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
-if test "x$ac_cv_func_putenv" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_PUTENV 1
-_ACEOF
+if test "$pac_cv_have__function__" = "yes" ; then
+
+$as_echo "#define HAVE__FUNCTION__ /**/" >>confdefs.h
fi
-done
-if test "$ac_cv_func_putenv" = "yes" ; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether putenv needs a declaration" >&5
-$as_echo_n "checking whether putenv needs a declaration... " >&6; }
-if ${pac_cv_func_decl_putenv+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-void (*fptr)(void) = (void(*)(void))putenv;
-int
-main ()
-{
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_putenv=no
+
+# Check whether --with-portals4 was given.
+if test "${with_portals4+set}" = set; then :
+ withval=$with_portals4; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-portals4=PATH expects a valid PATH" >&2;}
+ with_portals4="" ;; #(
+ *) :
+ ;;
+esac
else
- pac_cv_func_decl_putenv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ with_portals4=
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_putenv" >&5
-$as_echo "$pac_cv_func_decl_putenv" >&6; }
-if test "$pac_cv_func_decl_putenv" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_PUTENV_DECL 1
-_ACEOF
+# Check whether --with-portals4-include was given.
+if test "${with_portals4_include+set}" = set; then :
+ withval=$with_portals4_include; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4-include=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-portals4-include=PATH expects a valid PATH" >&2;}
+ with_portals4_include="" ;; #(
+ *) :
+ ;;
+esac
fi
-fi
-# gethostname() returns host name
-for ac_func in gethostname
-do :
- ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
-if test "x$ac_cv_func_gethostname" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTNAME 1
-_ACEOF
+# Check whether --with-portals4-lib was given.
+if test "${with_portals4_lib+set}" = set; then :
+ withval=$with_portals4_lib; case "$withval" in #(
+ yes|no|'') :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-portals4-lib=PATH expects a valid PATH" >&5
+$as_echo "$as_me: WARNING: --without-portals4-lib=PATH expects a valid PATH" >&2;}
+ with_portals4_lib="" ;; #(
+ *) :
+ ;;
+esac
fi
-done
-if test "$ac_cv_func_gethostname" = "yes" ; then
- # Do we need to declare gethostname?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethostname needs a declaration" >&5
-$as_echo_n "checking whether gethostname needs a declaration... " >&6; }
-if ${pac_cv_func_decl_gethostname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <unistd.h>
-void (*fptr)(void) = (void(*)(void))gethostname;
-int
-main ()
-{
+ if test -n "${with_portals4_include}"; then :
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_gethostname=no
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_portals4_include}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_portals4_include}', not appending" >&5
else
- pac_cv_func_decl_gethostname=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_portals4_include}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_portals4_include}"
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_gethostname" >&5
-$as_echo "$pac_cv_func_decl_gethostname" >&6; }
-if test "$pac_cv_func_decl_gethostname" = "yes" ; then
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_GETHOSTNAME_DECL 1
-_ACEOF
+else
+ if test -n "${with_portals4}"; then :
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_portals4}/include\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_portals4}/include', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_portals4}/include', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_portals4}/include"
fi
fi
+fi
+ if test -n "${with_portals4_lib}"; then :
-#
-# Check for select and working FD_ZERO
-for ac_func in select
-do :
- ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select"
-if test "x$ac_cv_func_select" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SELECT 1
-_ACEOF
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4_lib}\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4_lib}', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4_lib}', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_portals4_lib}"
fi
-done
-for ac_header in sys/select.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_select_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_SELECT_H 1
-_ACEOF
+else
+ if test -n "${with_portals4}"; then :
+
+
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4}/lib\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4}/lib', not appending" >&5
+else
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4}/lib', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_portals4}/lib"
fi
-done
+ if test -d "${with_portals4}/lib64"; then :
-if test "$ac_cv_func_select" != yes ; then
- as_fn_error $? "select is required for the process manager utilities" "$LINENO" 5
-else
- # Check that FD_ZERO works. Under the Darwin xlc (version 6) compiler,
- # FD_ZERO gets turned into a referece to __builtin_bzero, which is not
- # in the xlc libraries. This is apparently due to xlc pretending that it
- # is GCC within the system header files (the same test that must
- # succeed within the system header files to cause the declaration to
- # be __builtin_bzero fails outside of the header file).
- # (sys/select.h is POSIX)
- if test "$ac_cv_header_sys_select_h" = yes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FD_ZERO works" >&5
-$as_echo_n "checking whether FD_ZERO works... " >&6; }
-if ${pac_cv_fdzero_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/select.h>
-int
-main ()
-{
-fd_set v; FD_ZERO(&v)
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_fdzero_works=yes
+ if echo "$LDFLAGS" | $FGREP -e "\<-L${with_portals4}/lib64\>" >/dev/null 2>&1; then :
+ echo "LDFLAGS(='$LDFLAGS') contains '-L${with_portals4}/lib64', not appending" >&5
else
- pac_cv_fdzero_works=no
+ echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_portals4}/lib64', appending" >&5
+ LDFLAGS="$LDFLAGS -L${with_portals4}/lib64"
+
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_fdzero_works" >&5
-$as_echo "$pac_cv_fdzero_works" >&6; }
- if test "$pac_cv_fdzero_works" != yes ; then
- as_fn_error $? "Programs with FD_ZERO cannot be linked (check your system includes)" "$LINENO" 5
- fi
- fi
+
fi
-#
-# Check for the Linux functions for controlling processor affinity.
-#
-# LINUX: sched_setaffinity
-# AIX: bindprocessor
-# OSX (Leopard): thread_policy_set
-for ac_func in sched_setaffinity sched_getaffinity bindprocessor thread_policy_set
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
fi
-done
-if test "$ac_cv_func_sched_setaffinity" = "yes" ; then
- # Test for the cpu process set type
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cpu_set_t available" >&5
-$as_echo_n "checking whether cpu_set_t available... " >&6; }
-if ${pac_cv_have_cpu_set_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+
+
+
+ failure=no
+ ac_fn_c_check_header_mongrel "$LINENO" "portals4.h" "ac_cv_header_portals4_h" "$ac_includes_default"
+if test "x$ac_cv_header_portals4_h" = xyes; then :
-#include <sched.h>
-int
-main ()
-{
- cpu_set_t t;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_cpu_set_t=yes
else
- pac_cv_have_cpu_set_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ failure=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_cpu_set_t" >&5
-$as_echo "$pac_cv_have_cpu_set_t" >&6; }
- if test "$pac_cv_have_cpu_set_t" = yes ; then
-
-$as_echo "#define HAVE_CPU_SET_T 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the CPU_SET and CPU_ZERO macros are defined" >&5
-$as_echo_n "checking whether the CPU_SET and CPU_ZERO macros are defined... " >&6; }
-if ${pac_cv_cpu_set_defined+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PtlInit in -lportals" >&5
+$as_echo_n "checking for PtlInit in -lportals... " >&6; }
+if ${ac_cv_lib_portals_PtlInit+:} false; then :
$as_echo_n "(cached) " >&6
else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lportals $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <sched.h>
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char PtlInit ();
int
main ()
{
- cpu_set_t t; CPU_ZERO(&t); CPU_SET(1,&t);
+return PtlInit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- pac_cv_cpu_set_defined=yes
+ ac_cv_lib_portals_PtlInit=yes
else
- pac_cv_cpu_set_defined=no
+ ac_cv_lib_portals_PtlInit=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_cpu_set_defined" >&5
-$as_echo "$pac_cv_cpu_set_defined" >&6; }
- if test "$pac_cv_cpu_set_defined" = "yes" ; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_portals_PtlInit" >&5
+$as_echo "$ac_cv_lib_portals_PtlInit" >&6; }
+if test "x$ac_cv_lib_portals_PtlInit" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPORTALS 1
+_ACEOF
-$as_echo "#define HAVE_CPU_SET_MACROS 1" >>confdefs.h
+ LIBS="-lportals $LIBS"
- fi
- # FIXME: Some versions of sched_setaffinity return ENOSYS (!),
- # so we should test for the unfriendly and useless behavior
- fi
-fi
-if test "$ac_cv_func_thread_policy_set" = yes ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether thread affinity macros defined" >&5
-$as_echo_n "checking whether thread affinity macros defined... " >&6; }
-if ${pac_cv_have_thread_affinity_policy+:} false; then :
- $as_echo_n "(cached) " >&6
else
+ failure=yes
+fi
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <mach/thread_policy.h>
-int
-main ()
-{
-
-#if !defined(THREAD_AFFINITY_POLICY) || !defined(THREAD_AFFINITY_TAG_NULL)
- :'thread macros not defined
+ if test "$failure" = "no" ; then
+ success=yes
+ else
+ success=no
+ fi
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_thread_affinity_policy=yes
-else
- pac_cv_have_thread_affinity_policy=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_thread_affinity_policy" >&5
-$as_echo "$pac_cv_have_thread_affinity_policy" >&6; }
- if test "$pac_cv_have_thread_affinity_policy" = yes ; then
+ if test "$success" = "no" ; then
+ as_fn_error $? "'portals4.h or libportals library not found. Did you specify --with-portals4= or --with-portals4-include= or --with-portals4-lib=?'" "$LINENO" 5
+ fi
-$as_echo "#define HAVE_OSX_THREAD_AFFINITY 1" >>confdefs.h
- fi
-fi
-for ac_header in string.h sys/time.h time.h stdlib.h sys/socket.h wait.h errno.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lportals\>" >/dev/null 2>&1; then :
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lportals', not appending" >&5
+else
+ echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lportals', appending" >&5
+ WRAPPER_LIBS="$WRAPPER_LIBS -lportals"
fi
-done
-# Check for socklen_t .
-# (note the conditional inclusion of sys/socket.h)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether socklen_t is defined (in sys/socket.h if present)" >&5
-$as_echo_n "checking whether socklen_t is defined (in sys/socket.h if present)... " >&6; }
-if ${pac_cv_have_socklen_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-typedef struct { double a; int b; } socklen_t;
-int
-main ()
-{
-socklen_t a;a.a=1.0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_have_socklen_t=no
-else
- pac_cv_have_socklen_t=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_socklen_t" >&5
-$as_echo "$pac_cv_have_socklen_t" >&6; }
-if test "$pac_cv_have_socklen_t" = yes ; then
-$as_echo "#define HAVE_SOCKLEN_T 1" >>confdefs.h
+$as_echo "#define ENABLE_COMM_OVERRIDES 1" >>confdefs.h
-fi
fi
-## end expansion of PAC_SUBCFG_BODY_src_pm_util
+## end expansion of PAC_SUBCFG_BODY_src_mpid_ch3_channels_nemesis_netmod_portals4
# now configure any actual recursively configures subsystems, such as ROMIO and
@@ -55166,9 +54878,6 @@ ac_config_commands="$ac_config_commands default-3"
ac_config_commands="$ac_config_commands default-4"
-ac_config_commands="$ac_config_commands default-5"
-
-
$as_echo "#define HAVE_MPICHCONF 1" >>confdefs.h
@@ -55590,7 +55299,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool at gnu.org>."
lt_cl_version="\
-MPICH config.lt 3.2
+MPICH config.lt 3.3a2
configured by $0, generated by GNU Autoconf 2.69.
Copyright (C) 2011 Free Software Foundation, Inc.
@@ -57568,7 +57277,7 @@ fi
export pkgconfigdir
-ac_config_files="$ac_config_files Makefile examples/Makefile test/Makefile test/commands/Makefile src/include/mpichinfo.h mpich-doxygen src/include/glue_romio.h src/binding/cxx/mpicxx.h src/binding/fortran/mpif_h/mpif.h src/binding/fortran/mpif_h/setbotf.f src/binding/fortran/mpif_h/setbot.c src/binding/fortran/use_mpi/mpi_sizeofs.f90 src/binding/fortran/use_mpi/mpi_base.f90 src/binding/fortran/use_mpi/mpi_constants.f90 src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.f90 src/bi [...]
+ac_config_files="$ac_config_files Makefile examples/Makefile test/Makefile test/commands/Makefile src/include/mpichinfo.h mpich-doxygen src/include/mpir_ext.h src/binding/cxx/mpicxx.h src/binding/fortran/mpif_h/mpif.h src/binding/fortran/mpif_h/setbotf.f src/binding/fortran/mpif_h/setbot.c src/binding/fortran/use_mpi/mpi_sizeofs.f90 src/binding/fortran/use_mpi/mpi_base.f90 src/binding/fortran/use_mpi/mpi_constants.f90 src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.f90 src/bind [...]
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -57715,80 +57424,96 @@ if test -z "${INSTALL_MPIF77_TRUE}" && test -z "${INSTALL_MPIF77_FALSE}"; then
as_fn_error $? "conditional \"INSTALL_MPIF77\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_HCOLL_TRUE}" && test -z "${BUILD_HCOLL_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_HCOLL\" was never defined.
+if test -z "${BUILD_CH3_TRUE}" && test -z "${BUILD_CH3_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH3\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_CH3_UTIL_FTB_TRUE}" && test -z "${BUILD_CH3_UTIL_FTB_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH3_UTIL_FTB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_CH3_NEMESIS_TRUE}" && test -z "${BUILD_CH3_NEMESIS_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH3_NEMESIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_NEMESIS_NETMOD_OFI_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_OFI_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_OFI\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_CH3_SOCK_TRUE}" && test -z "${BUILD_CH3_SOCK_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH3_SOCK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILD_FC_BINDING_TRUE}" && test -z "${BUILD_FC_BINDING_FALSE}"; then
as_fn_error $? "conditional \"BUILD_FC_BINDING\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_PAMID_TRUE}" && test -z "${BUILD_PAMID_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_PAMID\" was never defined.
+if test -z "${BUILD_NEMESIS_NETMOD_TCP_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_TCP_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_TCP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${QUEUE_BINARY_SEARCH_SUPPORT_TRUE}" && test -z "${QUEUE_BINARY_SEARCH_SUPPORT_FALSE}"; then
- as_fn_error $? "conditional \"QUEUE_BINARY_SEARCH_SUPPORT\" was never defined.
+if test -z "${BUILD_NEMESIS_NETMOD_MXM_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_MXM_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_MXM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_CH3_TRUE}" && test -z "${BUILD_CH3_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_CH3\" was never defined.
+if test -z "${BUILD_CH3_UTIL_SOCK_TRUE}" && test -z "${BUILD_CH3_UTIL_SOCK_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH3_UTIL_SOCK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_CH3_UTIL_FTB_TRUE}" && test -z "${BUILD_CH3_UTIL_FTB_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_CH3_UTIL_FTB\" was never defined.
+if test -z "${BUILD_NEMESIS_NETMOD_LLC_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_LLC_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_LLC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_CH3_SOCK_TRUE}" && test -z "${BUILD_CH3_SOCK_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_CH3_SOCK\" was never defined.
+if test -z "${BUILD_HCOLL_TRUE}" && test -z "${BUILD_HCOLL_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_HCOLL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_MPID_COMMON_SOCK_TRUE}" && test -z "${BUILD_MPID_COMMON_SOCK_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_MPID_COMMON_SOCK\" was never defined.
+if test -z "${BUILD_CH4_TRUE}" && test -z "${BUILD_CH4_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH4\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_MPID_COMMON_SCHED_TRUE}" && test -z "${BUILD_MPID_COMMON_SCHED_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_MPID_COMMON_SCHED\" was never defined.
+if test -z "${BUILD_CH4_NETMOD_OFI_TRUE}" && test -z "${BUILD_CH4_NETMOD_OFI_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH4_NETMOD_OFI\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_MPID_COMMON_THREAD_TRUE}" && test -z "${BUILD_MPID_COMMON_THREAD_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_MPID_COMMON_THREAD\" was never defined.
+if test -z "${BUILD_SHM_STUBSHM_TRUE}" && test -z "${BUILD_SHM_STUBSHM_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_SHM_STUBSHM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_MPID_COMMON_DATATYPE_TRUE}" && test -z "${BUILD_MPID_COMMON_DATATYPE_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_MPID_COMMON_DATATYPE\" was never defined.
+if test -z "${BUILD_SHM_POSIX_TRUE}" && test -z "${BUILD_SHM_POSIX_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_SHM_POSIX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_CH3_UTIL_SOCK_TRUE}" && test -z "${BUILD_CH3_UTIL_SOCK_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_CH3_UTIL_SOCK\" was never defined.
+if test -z "${BUILD_MPID_COMMON_SHM_TRUE}" && test -z "${BUILD_MPID_COMMON_SHM_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_MPID_COMMON_SHM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_CH3_NEMESIS_TRUE}" && test -z "${BUILD_CH3_NEMESIS_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_CH3_NEMESIS\" was never defined.
+if test -z "${BUILD_MPID_COMMON_DATATYPE_TRUE}" && test -z "${BUILD_MPID_COMMON_DATATYPE_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_MPID_COMMON_DATATYPE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_NEMESIS_NETMOD_MXM_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_MXM_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_MXM\" was never defined.
+if test -z "${BUILD_MPID_COMMON_THREAD_TRUE}" && test -z "${BUILD_MPID_COMMON_THREAD_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_MPID_COMMON_THREAD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_NEMESIS_NETMOD_PORTALS4_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_PORTALS4_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_PORTALS4\" was never defined.
+if test -z "${BUILD_CH4_NETMOD_PORTALS4_TRUE}" && test -z "${BUILD_CH4_NETMOD_PORTALS4_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH4_NETMOD_PORTALS4\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_NEMESIS_NETMOD_OFI_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_OFI_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_OFI\" was never defined.
+if test -z "${BUILD_CH4_NETMOD_STUBNM_TRUE}" && test -z "${BUILD_CH4_NETMOD_STUBNM_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH4_NETMOD_STUBNM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_NEMESIS_NETMOD_TCP_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_TCP_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_TCP\" was never defined.
+if test -z "${BUILD_MPID_COMMON_SCHED_TRUE}" && test -z "${BUILD_MPID_COMMON_SCHED_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_MPID_COMMON_SCHED\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_NEMESIS_NETMOD_LLC_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_LLC_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_LLC\" was never defined.
+if test -z "${BUILD_CH4_NETMOD_UCX_TRUE}" && test -z "${BUILD_CH4_NETMOD_UCX_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH4_NETMOD_UCX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_MPID_COMMON_SOCK_POLL_TRUE}" && test -z "${BUILD_MPID_COMMON_SOCK_POLL_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_MPID_COMMON_SOCK_POLL\" was never defined.
+if test -z "${BUILD_NEMESIS_NETMOD_PORTALS4_TRUE}" && test -z "${BUILD_NEMESIS_NETMOD_PORTALS4_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_NEMESIS_NETMOD_PORTALS4\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILD_LOGGING_RLOG_TRUE}" && test -z "${BUILD_LOGGING_RLOG_FALSE}"; then
@@ -57827,6 +57552,19 @@ if test -z "${BUILD_COVERAGE_TRUE}" && test -z "${BUILD_COVERAGE_FALSE}"; then
as_fn_error $? "conditional \"BUILD_COVERAGE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+
+if test -z "${BUILD_PMI_PMI2_TRUE}" && test -z "${BUILD_PMI_PMI2_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_PMI_PMI2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_PMI_SIMPLE_TRUE}" && test -z "${BUILD_PMI_SIMPLE_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_PMI_SIMPLE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_PMI_PMI2_SIMPLE_TRUE}" && test -z "${BUILD_PMI_PMI2_SIMPLE_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_PMI_PMI2_SIMPLE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${BUILD_PM_HYDRA_TRUE}" && test -z "${BUILD_PM_HYDRA_FALSE}"; then
as_fn_error $? "conditional \"BUILD_PM_HYDRA\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -57839,28 +57577,12 @@ if test -z "${PRIMARY_PM_GFORKER_TRUE}" && test -z "${PRIMARY_PM_GFORKER_FALSE}"
as_fn_error $? "conditional \"PRIMARY_PM_GFORKER\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_PMI_PMI2_TRUE}" && test -z "${BUILD_PMI_PMI2_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_PMI_PMI2\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${BUILD_PMI_SLURM_TRUE}" && test -z "${BUILD_PMI_SLURM_FALSE}"; then
as_fn_error $? "conditional \"BUILD_PMI_SLURM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_PMI_PMI2_SIMPLE_TRUE}" && test -z "${BUILD_PMI_PMI2_SIMPLE_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_PMI_PMI2_SIMPLE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${BUILD_PMI_PMI2_POE_TRUE}" && test -z "${BUILD_PMI_PMI2_POE_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_PMI_PMI2_POE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${BUILD_PMI_SIMPLE_TRUE}" && test -z "${BUILD_PMI_SIMPLE_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_PMI_SIMPLE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${QUEUE_BINARY_SEARCH_SUPPORT_TRUE}" && test -z "${QUEUE_BINARY_SEARCH_SUPPORT_FALSE}"; then
- as_fn_error $? "conditional \"QUEUE_BINARY_SEARCH_SUPPORT\" was never defined.
+if test -z "${BUILD_CH4_SHM_TRUE}" && test -z "${BUILD_CH4_SHM_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_CH4_SHM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILD_PM_REMSHELL_TRUE}" && test -z "${BUILD_PM_REMSHELL_FALSE}"; then
@@ -57871,7 +57593,6 @@ if test -z "${PRIMARY_PM_REMSHELL_TRUE}" && test -z "${PRIMARY_PM_REMSHELL_FALSE
as_fn_error $? "conditional \"PRIMARY_PM_REMSHELL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-
if test -z "${BUILD_PM_UTIL_TRUE}" && test -z "${BUILD_PM_UTIL_FALSE}"; then
as_fn_error $? "conditional \"BUILD_PM_UTIL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -58281,7 +58002,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by MPICH $as_me 3.2, which was
+This file was extended by MPICH $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -58348,7 +58069,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-MPICH config.status 3.2
+MPICH config.status 3.3a2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -59051,7 +58772,6 @@ export MPI_NO_SPAWN
-
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -59064,20 +58784,23 @@ do
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
"default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
- "src/binding/fortran/use_mpi/mpif90model.h") CONFIG_FILES="$CONFIG_FILES src/binding/fortran/use_mpi/mpif90model.h" ;;
"src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h") CONFIG_FILES="$CONFIG_FILES src/mpid/ch3/channels/nemesis/include/mpid_nem_net_module_defs.h" ;;
"src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c") CONFIG_FILES="$CONFIG_FILES src/mpid/ch3/channels/nemesis/src/mpid_nem_net_array.c" ;;
+ "src/binding/fortran/use_mpi/mpif90model.h") CONFIG_FILES="$CONFIG_FILES src/binding/fortran/use_mpi/mpif90model.h" ;;
+ "src/mpid/ch4/src/mpid_ch4_net_array.c") CONFIG_FILES="$CONFIG_FILES src/mpid/ch4/src/mpid_ch4_net_array.c" ;;
+ "src/mpid/ch4/src/mpid_ch4_shm_array.c") CONFIG_FILES="$CONFIG_FILES src/mpid/ch4/src/mpid_ch4_shm_array.c" ;;
+ "src/mpid/ch4/include/netmodpre.h") CONFIG_FILES="$CONFIG_FILES src/mpid/ch4/include/netmodpre.h" ;;
+ "src/mpid/ch4/include/shmpre.h") CONFIG_FILES="$CONFIG_FILES src/mpid/ch4/include/shmpre.h" ;;
"default-2") CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;;
"default-3") CONFIG_COMMANDS="$CONFIG_COMMANDS default-3" ;;
"default-4") CONFIG_COMMANDS="$CONFIG_COMMANDS default-4" ;;
- "default-5") CONFIG_COMMANDS="$CONFIG_COMMANDS default-5" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
"test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
"test/commands/Makefile") CONFIG_FILES="$CONFIG_FILES test/commands/Makefile" ;;
"src/include/mpichinfo.h") CONFIG_FILES="$CONFIG_FILES src/include/mpichinfo.h" ;;
"mpich-doxygen") CONFIG_FILES="$CONFIG_FILES mpich-doxygen" ;;
- "src/include/glue_romio.h") CONFIG_FILES="$CONFIG_FILES src/include/glue_romio.h" ;;
+ "src/include/mpir_ext.h") CONFIG_FILES="$CONFIG_FILES src/include/mpir_ext.h" ;;
"src/binding/cxx/mpicxx.h") CONFIG_FILES="$CONFIG_FILES src/binding/cxx/mpicxx.h" ;;
"src/binding/fortran/mpif_h/mpif.h") CONFIG_FILES="$CONFIG_FILES src/binding/fortran/mpif_h/mpif.h" ;;
"src/binding/fortran/mpif_h/setbotf.f") CONFIG_FILES="$CONFIG_FILES src/binding/fortran/mpif_h/setbotf.f" ;;
@@ -59099,8 +58822,6 @@ do
"src/env/mpifort.sh") CONFIG_FILES="$CONFIG_FILES src/env/mpifort.sh" ;;
"src/env/mpifort.bash") CONFIG_FILES="$CONFIG_FILES src/env/mpifort.bash" ;;
"src/env/parkill") CONFIG_FILES="$CONFIG_FILES src/env/parkill" ;;
- "src/util/dbg/getfuncstack") CONFIG_FILES="$CONFIG_FILES src/util/dbg/getfuncstack" ;;
- "src/util/timers/mpiu_timer.h") CONFIG_FILES="$CONFIG_FILES src/util/timers/mpiu_timer.h" ;;
"src/include/mpi.h") CONFIG_FILES="$CONFIG_FILES src/include/mpi.h" ;;
"doc/design/Makefile") CONFIG_FILES="$CONFIG_FILES doc/design/Makefile" ;;
"doc/installguide/Makefile") CONFIG_FILES="$CONFIG_FILES doc/installguide/Makefile" ;;
@@ -60874,8 +60595,7 @@ for prog in $EXTERNAL_SETUPS - ; do
done ;;
"default-3":C) if [ ! -d lib ] ; then mkdir lib ; fi
date > lib/newconfig ;;
- "default-4":C) chmod a+x src/util/dbg/getfuncstack ;;
- "default-5":C) chmod a+x test/commands/cmdtests ;;
+ "default-4":C) chmod a+x test/commands/cmdtests ;;
esac
done # for ac_tag
diff --git a/configure.ac b/configure.ac
index 9ac2e21..0b42148 100644
--- a/configure.ac
+++ b/configure.ac
@@ -54,10 +54,6 @@ dnl MPID_LIBTOOL_STATIC_FLAG - The static compilation flag to use
dnl for the example executables within
dnl mpich. If not set, -static will be
dnl used.
-dnl PMI_REQUIRES_READABLE_TOKENS - if yes, define the C-preprocessor
-dnl value USE_HUMAN_READABLE_TOKENS, which is
-dnl used in src/include/mpimem.h to define token
-dnl separators used in src/util/mem/argstr.c
dnl PM_REQUIRES_PMI - if set, provides the name of the PMI
dnl interface implementation. If not set,
dnl the "simple" PMI implementation is used.
@@ -184,6 +180,11 @@ if test "$V5" -le 9 ; then V5=0$V5 ; fi
MPICH_NUMVERSION=`expr $V1$V2$V3$V4$V5 + 0`
AC_SUBST(MPICH_NUMVERSION)
+AC_ARG_WITH(custom-version-string,
+ AC_HELP_STRING([--with-custom-version-string], [Adds a user-specified value to the output of the mpichversion executable]),,with_custom_version_string="")
+MPICH_CUSTOM_STRING=$with_custom_version_string
+AC_SUBST(MPICH_CUSTOM_STRING)
+
# ABIVERSION is the name used by simplemake, so we reassign the
# libmpi_so_version number to it
ABIVERSION=${libmpi_so_version}
@@ -346,6 +347,12 @@ AC_ARG_ENABLE(error-messages,
none - No messages
],,enable_error_messages=all)
+AC_ARG_ENABLE(tag-error-bits,
+[ --enable-tag-error-bits=yes|no - Control whether bits are taken from the user tag for error handling.
+ yes - Two bits are taken from the user tag to support error propagation.
+ no - No bits are taken from the user tag (this could cause deadlock if an error is detected during a collective).
+],,enable_tag_error_bits=yes)
+
AC_ARG_ENABLE(timing,
[ --enable-timing=level - Control the amount of timing information
collected by the MPICH implementation.
@@ -365,7 +372,6 @@ AC_ARG_ENABLE(g,
compiler flags, i.e. MPICHLIB_CFLAGS, MPICHLIB_CXXFLAGS,
MPICHLIB_FFLAGS, and MPICHLIB_FCFLAGS.
debug - Synonym for dbg
- log - Enable debug event logging
mem - Memory usage tracing
meminit - Preinitialize memory associated structures and unions to
eliminate access warnings from programs like valgrind
@@ -408,7 +414,7 @@ AC_ARG_ENABLE(fast,
],,enable_fast=O2)
AC_ARG_ENABLE(interlib-deps,
- [AC_HELP_STRING([--interlib-deps - Enable interlibrary dependencies])],,enable_interlib_deps=yes)
+ [AC_HELP_STRING([--enable-interlib-deps - Enable interlibrary dependencies])],,enable_interlib_deps=yes)
AC_ARG_ENABLE(check-compiler-flags,
AC_HELP_STRING([--enable-check-compiler-flags], [enable the checks for all compiler
@@ -523,13 +529,6 @@ AC_ARG_ENABLE(mutex-timing,
AC_HELP_STRING([--enable-mutex-timing], [calculate the time spent waiting on mutexes]),
AC_DEFINE(MPIU_MUTEX_WAIT_TIME,1,[Define to enable timing mutexes]))
-AC_ARG_ENABLE(handle-allocation,
- AC_HELP_STRING([--enable-handle-allocation=type],
- [Choose the method used for allocating MPI
- object handles. Values may be 'tls' for
- thread-local storage or 'mutex' for simple
- locking. 'mutex' is the default.]),,enable_handle_allocation=default)
-
AC_ARG_ENABLE([predefined-refcount],
AS_HELP_STRING([--enable-predefined-refcount],
[control whether predefined objects like
@@ -587,10 +586,6 @@ AC_ARG_WITH(cross,
[Specify the values of variables that configure cannot
determine in a cross-compilation environment]),,
with_cross=$MPID_DEFAULT_CROSS_FILE)
-if test -z "$with_cross" ; then with_cross=no ; fi
-if test "$with_cross" != "no"; then
- AC_MSG_NOTICE([Using cross file: $with_cross])
-fi
AC_ARG_WITH(namepublisher,
[ --with-namepublisher=name Choose the system that will support
@@ -767,6 +762,17 @@ AC_SUBST(master_top_srcdir)
export master_top_builddir
export master_top_srcdir
+if test -z "$with_cross"; then
+ if test -f "$master_top_srcdir/src/cross/$host_alias"; then
+ with_cross="$master_top_srcdir/src/cross/$host_alias"
+ else
+ with_cross=no
+ fi
+fi
+if test "$with_cross" != "no"; then
+ AC_MSG_NOTICE([Using cross file: $with_cross])
+fi
+
# ----------------------------------------------------------------------------
dnl Export important "precious" variables so that any directories configured via
dnl PAC_CONFIG_SUBDIR will agree with the top-level configure about these
@@ -925,7 +931,7 @@ fi
if test "$enable_error_checking" = "yes" ; then
enable_error_checking=all
fi
-# glue_romio.h needs the variable HAVE_ERROR_CHECKING to have the value 0 or 1
+# mpir_ext.h needs the variable HAVE_ERROR_CHECKING to have the value 0 or 1
HAVE_ERROR_CHECKING=0
case "$enable_error_checking" in
no)
@@ -944,22 +950,22 @@ case "$enable_error_checking" in
AC_MSG_WARN([Unknown value $enable_error_checking for enable-error-checking])
;;
esac
-# permit @HAVE_ERROR_CHECKING@ substitution in glue_romio.h
+# permit @HAVE_ERROR_CHECKING@ substitution in mpir_ext.h
AC_SUBST([HAVE_ERROR_CHECKING])
# error-messages
case "$enable_error_messages" in
no|none)
- error_message_kind="MPICH_ERROR_MSG_NONE"
+ error_message_kind="MPICH_ERROR_MSG__NONE"
;;
all|yes)
- error_message_kind="MPICH_ERROR_MSG_ALL"
+ error_message_kind="MPICH_ERROR_MSG__ALL"
;;
generic)
- error_message_kind="MPICH_ERROR_MSG_GENERIC"
+ error_message_kind="MPICH_ERROR_MSG__GENERIC"
;;
class)
- error_message_kind="MPICH_ERROR_MSG_CLASS"
+ error_message_kind="MPICH_ERROR_MSG__CLASS"
;;
*)
AC_MSG_WARN([Unknown value $enable_error_messages for enable-error-messages])
@@ -967,6 +973,11 @@ case "$enable_error_messages" in
esac
AC_DEFINE_UNQUOTED(MPICH_ERROR_MSG_LEVEL,$error_message_kind,[define to enable error messages])
+#error-tags
+if test "$enable_tag_error_bits" = "yes" ; then
+ AC_DEFINE([HAVE_TAG_ERROR_BITS],[1],[Define to enable tag error bits])
+fi
+
# ----------------------------------------------------------------------------
#
# enable-timing and with-logging
@@ -1126,14 +1137,14 @@ fi
if test "$timing_name" != "none" ; then
timing_kind=`echo $timing_name | \
tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- timing_kind=MPID_TIMING_KIND_$timing_kind
+ timing_kind=MPICH_TIMING_KIND__$timing_kind
AC_DEFINE_UNQUOTED(HAVE_TIMING,$timing_kind,[define to enable timing collection])
if test "$collect_stats" = "true" ; then
AC_DEFINE(COLLECT_STATS,1,[define to enable collection of statistics])
fi
fi
-use_logging_variable="MPID_LOGGING_`echo $logging_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
+use_logging_variable="MPICH_LOGGING__`echo $logging_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
AC_DEFINE_UNQUOTED(USE_LOGGING,$use_logging_variable,[define to choose logging library])
# ----------------------------------------------------------------------------
# End of logging tests
@@ -1159,7 +1170,7 @@ AC_ARG_WITH([mpl-prefix],
[use the MPL library installed in DIR,
rather than the one included in src/mpl. Pass
"embedded" to force usage of the MPL source
- distributed with MPICH2.])],
+ distributed with MPICH.])],
[],dnl action-if-given
[with_mpl_prefix=embedded]) dnl action-if-not-given
mplsrcdir=""
@@ -1170,12 +1181,13 @@ mpllib=""
AC_SUBST([mpllib])
if test "$with_mpl_prefix" = "embedded" ; then
# no need for libtool versioning when embedding MPL
- mpl_subdir_args="--disable-versioning"
+ mpl_subdir_args="--disable-versioning --enable-embedded"
PAC_CONFIG_SUBDIR_ARGS([src/mpl],[$mpl_subdir_args],[],[AC_MSG_ERROR(MPL configure failed)])
PAC_APPEND_FLAG([-I${master_top_builddir}/src/mpl/include], [CPPFLAGS])
PAC_APPEND_FLAG([-I${use_top_srcdir}/src/mpl/include], [CPPFLAGS])
mplsrcdir="${master_top_builddir}/src/mpl"
+ mpllibdir="-L${master_top_builddir}/src/mpl"
mpllib="src/mpl/lib${MPLLIBNAME}.la"
else
# The user specified an already-installed MPL; just sanity check, don't
@@ -1225,7 +1237,7 @@ AC_SUBST([opalib])
if test "$with_openpa_prefix" = "embedded" ; then
if test -e "${use_top_srcdir}/src/openpa" ; then
opasrcdir="${master_top_builddir}/src/openpa"
- opalib="${master_top_builddir}/src/openpa/src/lib${OPALIBNAME}.la"
+ opalib="src/openpa/src/lib${OPALIBNAME}.la"
PAC_APPEND_FLAG([-I${use_top_srcdir}/src/openpa/src],[CPPFLAGS])
PAC_APPEND_FLAG([-I${master_top_builddir}/src/openpa/src],[CPPFLAGS])
@@ -1361,20 +1373,20 @@ if test "$MPICH_THREAD_LEVEL" != "MPI_THREAD_SINGLE"; then
fi
# Check for value thread_cs choice; set the refcount default if necessary
-thread_granularity=MPICH_THREAD_GRANULARITY_SINGLE
-thread_refcount=MPIU_REFCOUNT_NONE
+thread_granularity=MPICH_THREAD_GRANULARITY__SINGLE
+thread_refcount=MPICH_REFCOUNT__NONE
if test "$enable_threads" = "multiple" ; then
case $enable_thread_cs in
global)
- thread_granularity=MPICH_THREAD_GRANULARITY_GLOBAL
+ thread_granularity=MPICH_THREAD_GRANULARITY__GLOBAL
if test "$enable_refcount" = "default" ; then enable_refcount=none ; fi
;;
per-object|per_object)
- thread_granularity=MPICH_THREAD_GRANULARITY_PER_OBJECT
+ thread_granularity=MPICH_THREAD_GRANULARITY__POBJ
if test "$enable_refcount" = "default" ; then enable_refcount=lock-free ; fi
;;
lock-free|lock_free|lockfree)
- thread_granularity=MPICH_THREAD_GRANULARITY_LOCK_FREE
+ thread_granularity=MPICH_THREAD_GRANULARITY__LOCKFREE
if test "$enable_refcount" = "default" ; then enable_refcount=lock-free ; fi
if test "$enable_predefined_refcount" = "default" ; then enable_predefined_refcount=no ; fi
AC_MSG_ERROR([--enable-thread-cs=lock-free is not supported yet, please select a different granularity])
@@ -1386,10 +1398,10 @@ if test "$enable_threads" = "multiple" ; then
case $enable_refcount in
lock-free|lock_free|lockfree)
- thread_refcount=MPIU_REFCOUNT_LOCKFREE
+ thread_refcount=MPICH_REFCOUNT__LOCKFREE
;;
none)
- thread_refcount=MPIU_REFCOUNT_NONE
+ thread_refcount=MPICH_REFCOUNT__NONE
;;
*)
AC_MSG_ERROR([Unrecognized value $enable_refcount for --enable-refcount])
@@ -1399,24 +1411,10 @@ fi
AC_DEFINE_UNQUOTED([MPICH_THREAD_GRANULARITY],$thread_granularity,[Method used to implement atomic updates and access])
if test "$enable_predefined_refcount" = "no" ; then
- AC_DEFINE([MPIU_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS],[1],[define to disable reference counting predefined objects like MPI_COMM_WORLD])
+ AC_DEFINE([MPICH_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS],[1],[define to disable reference counting predefined objects like MPI_COMM_WORLD])
fi
-case $enable_handle_allocation in
- mutex|default)
- handle_allocation_method=MPIU_HANDLE_ALLOCATION_MUTEX
- ;;
- tls)
- handle_allocation_method=MPIU_HANDLE_ALLOCATION_THREAD_LOCAL
- ;;
- *)
- AC_MSG_ERROR([Unrecognized value $enable_handle_allocation for --enable-handle-allocation])
- ;;
-esac
-AC_DEFINE_UNQUOTED([MPIU_HANDLE_ALLOCATION_METHOD],$handle_allocation_method,[Method used to allocate MPI object handles])
-
-
-AC_DEFINE_UNQUOTED([MPIU_THREAD_REFCOUNT],$thread_refcount,[Method used to implement refcount updates])
+AC_DEFINE_UNQUOTED([MPICH_THREAD_REFCOUNT],$thread_refcount,[Method used to implement refcount updates])
# enable-g
# strip off multiple options, separated by commas
@@ -1445,9 +1443,6 @@ for option in $enable_g ; do
mem)
perform_memtracing=yes
;;
- log)
- perform_dbglog=yes
- ;;
mutex)
perform_dbgmutex=yes
;;
@@ -1456,7 +1451,6 @@ for option in $enable_g ; do
;;
most|yes)
perform_memtracing=yes
- perform_dbglog=yes
enable_append_g=yes
perform_meminit=yes
perform_dbgmutex=yes
@@ -1467,7 +1461,6 @@ for option in $enable_g ; do
all)
perform_memarena=yes
perform_memtracing=yes
- perform_dbglog=yes
enable_append_g=yes
perform_meminit=yes
perform_dbgmutex=yes
@@ -1510,17 +1503,6 @@ if test -n "$perform_memtracing" ; then
AC_DEFINE(MPICH_DEBUG_MEMARENA,1,[Define if each function exit should confirm memory arena correctness])
fi
fi
-USE_DBG_LOGGING=0
-if test -n "$perform_dbglog" ; then
- if test "$with_logging" != "none" ; then
- AC_MSG_WARN([--with-logging overrides --enable-g=log])
- else
- AC_DEFINE(USE_DBG_LOGGING,1,[Define to enable logging macros])
- USE_DBG_LOGGING=1
- fi
-fi
-# allow @USE_DBG_LOGGING@ substitution in glue_romio.h
-AC_SUBST([USE_DBG_LOGGING])
if test -n "$perform_dbgmutex" ; then
AC_DEFINE(MPICH_DEBUG_MUTEX,1,[Define to enable mutex debugging])
@@ -1693,11 +1675,6 @@ fi
pm_name=$first_pm_name
AC_SUBST(pm_name)
-# Some versions of PM and PMI require a special definition
-if test "$PMI_REQUIRES_READABLE_TOKENS" = "yes" ; then
- AC_DEFINE(USE_HUMAN_READABLE_TOKENS,1,[Define to use ='s and spaces in the string utilities.])
-fi
-
# Step 2:
# Once we've selected the process manager (or managers), we can
# check that we have a compatible PMI implemenatation.
@@ -1821,10 +1798,13 @@ for var in $enable_mpit_pvars ; do
[nem],[enable_pvar_nem=yes],
[recvq],[enable_pvar_recvq=yes],
[rma],[enable_pvar_rma=yes],
+ [dims],[enable_pvar_dims=yes],
[all|yes],
[enable_pvar_nem=yes
enable_pvar_recvq=yes
- enable_pvar_rma=yes],
+ enable_pvar_rma=yes
+ enable_pvar_dims=yes
+ ],
[no|none],[],
[IFS=$save_IFS
AC_MSG_WARN([Unknown value ($option) for enable-mpit-pvars])
@@ -1855,6 +1835,14 @@ else
fi
AC_DEFINE_UNQUOTED(ENABLE_PVAR_RMA,$status_rma_pvars,
[Define to 1 to enable rma-related MPI_T performance variables])
+
+if test -n "$enable_pvar_dims" ; then
+ status_dims_pvars=1
+else
+ status_dims_pvars=0
+fi
+AC_DEFINE_UNQUOTED(ENABLE_PVAR_DIMS,$status_dims_pvars,
+ [Define to 1 to enable getdims-related MPI_T performance variables])
# ---------------------------------------------------------------------------
# Support for the language bindings: Fortran 77, Fortran 90, and C++
#
@@ -2784,6 +2772,13 @@ AC_C_INLINE
PAC_C_GNU_ATTRIBUTE
PAC_C_BUILTIN_EXPECT
+PAC_CHECK_VISIBILITY
+AC_SUBST(VISIBILITY_CFLAGS)
+# disable visibility if building profiling library
+if test "$NEEDSPLIB" = "yes" ; then
+ VISIBILITY_CFLAGS=""
+fi
+
# We need to check for the endianess in order to implement the
# "external32" representations. This defines "WORDS_BIGENDIAN when
# the system is bigendian.
@@ -2980,6 +2975,11 @@ else
AC_MSG_RESULT([int or better])
fi
+# Require strict alignment memory access for alignment-sensitive platform (e.g., SPARC)
+if test "$host_cpu" = "sparc" ; then
+ AC_DEFINE(NEEDS_STRICT_ALIGNMENT,1,[Define if strict alignment memory access is required])
+fi
+
# There are further alignment checks after we test for int64_t etc. below.
# Get the size of the C types for encoding in the basic datatypes and for
@@ -3133,7 +3133,7 @@ system; this program outputs an appropriate file for the --with-cross option])
#
# Take len and turn it into two hex digits (there are 8 bits available
# in the built-in datatype handle for the length; see
- # src/mpid/common/datatype/mpid_datatype.h)
+ # src/mpid/common/datatype/mpidu_datatype.h)
if test "$len" -gt 255 ; then
AC_MSG_ERROR([Type sizes greater than 255 bytes are not supported (type $type is $len bytes)])
fi
@@ -3535,7 +3535,7 @@ if test "$enable_f77" = yes ; then
#
# Take len and turn it into two hex digits (there are 8 bits available
# in the built-in datatype handle for the length; see
- # src/mpid/common/datatype/mpid_datatype.h). This code is taken
+ # src/mpid/common/datatype/mpidu_datatype.h). This code is taken
# from the code in mpich/configure.ac
if test "$len" -gt 255 ; then
AC_MSG_ERROR([Type sizes greater than 255 bytes are not supported (type INTEGER is $len bytes)])
@@ -3582,7 +3582,7 @@ if test "$enable_f77" = yes ; then
#
# Take len and turn it into two hex digits (there are 8 bits available
# in the built-in datatype handle for the length; see
- # src/mpid/common/datatype/mpid_datatype.h). This code is taken
+ # src/mpid/common/datatype/mpidu_datatype.h). This code is taken
# from the code in mpich/configure.ac
if test "$len" -gt 255 ; then
AC_MSG_ERROR([Type sizes greater than 255 bytes are not supported (type DOUBLE is $len bytes)])
@@ -3720,7 +3720,7 @@ dnl len=$len_doublecplx
dnl #
dnl # Take len and turn it into two hex digits (there are 8 bits available
dnl # in the built-in datatype handle for the length; see
-dnl # src/mpid/common/datatype/mpid_datatype.h). This code is taken
+dnl # src/mpid/common/datatype/mpidu_datatype.h). This code is taken
dnl # from the code in mpich/configure.ac
dnl if test "$len" -gt 255 ; then
dnl AC_MSG_ERROR([Type sizes greater than 255 bytes are not supported (type DOUBLE COMPLEX is $len bytes)])
@@ -4587,7 +4587,7 @@ if test "$ac_cv_func_vsnprintf" = "yes" ; then
#include <stdarg.h>],vsnprintf)
fi
# We would like to use strerror in the file namepublisher; it is also used
-# in MPIU_Strerror (whose implementation is broken if strerror is not found)
+# in MPIR_Strerror (whose implementation is broken if strerror is not found)
AC_CHECK_FUNCS(strerror strncasecmp)
AC_FUNC_STRERROR_R
if test "$ac_cv_func_strerror_r" = "yes" ; then
@@ -4659,27 +4659,6 @@ if test "$enable_g_mem" != "yes" ; then
# Do we need to declare strdup?
PAC_FUNC_NEEDS_DECL([#include <string.h>],strdup)
fi
-else
- # search.h is used for fancier output from trmem. Disabled for now,
- # since the tsearch routines have problematic prototypes.
- AC_CHECK_HEADERS(search)
- AC_CHECK_FUNCS(tsearch)
- # Check that we can compile tsearch without error. Try to compile
- # it with the header and the char * args
- if test "$ac_cv_func_tsearch" = "yes" ; then
- AC_CACHE_CHECK([whether tsearch requires char* args],
- pac_cv_tsearch_charp,[
- AC_TRY_COMPILE([#include <search.h>
- char *tsearch( char *k, char **r, (int (*)())compare ) { return k; }],
- [int f=0;],pac_cv_tsearch_charp=yes,pac_cv_tsearch_charp=no)])
- if test "$pac_cv_tsearch_charp" = "yes" ; then
- # this should consider defining a name with the argument type
- # so that no further ifdefs are needed
- AC_DEFINE(USE_TSEARCH_WITH_CHARP,1,[Define if tsearch requires char pointers])
- fi
- fi
- # Note that HPUX and AIX may require _INCLUDE_XOPEN_SOURCE or
- # _XOPEN_SOURCE be defined respectively.
fi
# ----------------------------------------------------------------------------
@@ -4690,11 +4669,6 @@ AC_HAVE_FUNCS(mkstemp)
if test "$ac_cv_func_mkstemp" = "yes" ; then
PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],mkstemp)
fi
-# fdopen() converts from an fd to a FILE*
-AC_HAVE_FUNCS(fdopen)
-if test "$ac_cv_func_fdopen" = "yes" ; then
- PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],fdopen)
-fi
# putenv() sets environment variable
AC_HAVE_FUNCS(putenv)
if test "$ac_cv_func_putenv" = "yes" ; then
@@ -4703,327 +4677,6 @@ fi
# ----------------------------------------------------------------------------
-# Support for timers. The following code processes the
-# --enable-timer-type=name argument and selects the timer based on
-# both that field and what configure is able to determine is available.
-# The file src/include/mpiu_timer.h is also created.
-# Note that at least the handling of the "device" option must come *after*
-# the setup_device script is loaded so that the device can set the appropriate
-# fields. For now, we've split this so that there is an update to the timer
-# after the setup_device script is loaded, but we should consider moving
-# this entire block.
-# FIXME DJG setup_device has been eliminated in favor of subconfigure.m4 files
-# ----------------------------------------------------------------------------
-# Default type for timer stamp.
-MPICH_TIMER_TYPE=long
-AC_SUBST(MPICH_TIMER_TYPE)
-
-# If the device specified a timer type, use that by default. Else,
-# try to detect a type that works on this system.
-if test -n "$MPID_DEVICE_TIMER_TYPE" ; then
- default_timer_type=device
-else
- default_timer_type=
-fi
-
-# clock_gettime is the POSIX gettimeofday
-# gethrtime is the Solaris high-resolution timer
-dnl
-dnl Specific checks that a function works correctly
-dnl
-dnl Now that we know what the options are, choose the timer to use
-dnl
-dnl The default preference is
-dnl Solaris gethrtime
-dnl Posix clock_gettime
-dnl Unix gettimeofday (one of two versions)
-dnl
-dnl Also available are various hardware time stamps
-dnl Linux-x86 cycle counter
-dnl Linux-alpha cycle counter
-dnl
-dnl We also allow --enable-timer-type=name to select a timer type
-AC_ARG_ENABLE(timer-type,
-[ --enable-timer-type=name - Select the timer to use for MPI_Wtime and
- internal timestamps.
- gethrtime - Solaris timer (Solaris systems only)
- clock_gettime - Posix timer (where available)
- gettimeofday - Most Unix systems
- linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
- gcc_ia64_cycle - IPF ar.itc timer*
- mach_absolute_time - Mach absolute time (alternative to clock_gettime
- for OSX)
- device - The timer is provided by the device
-
- *Note that the cycle timers are intended to be used by MPICH
- developers for internal low-level timing. Normal users should
- not use these as they are not guaranteed to be accurate in
- certain situations.
-
- linuxalpha_cycle is no longer supported.
-],timer_type=$enable_timer_type,timer_type=${default_timer_type})
-
-if test -z "$timer_type" ; then
- # Try to pick a timer based on what is available
- AC_CHECK_FUNCS(clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday)
- if test "$ac_cv_func_gethrtime" = "yes" ; then
- # Sigh. The Solaris include files do not define hrtime_t
- # Before we accept this choice, make sure that we can
- # do arithmetic with hrtime_t .
- AC_CACHE_CHECK([that hrtime_t is properly defined for gethrtime],
- pac_cv_hrtime_works,[
- AC_TRY_COMPILE([
-#include <sys/time.h>
-],[hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;],
-pac_cv_hrtime_works=yes,pac_cv_hrtime_works=no)])
- # A more ambitious test would look to see if casting an
- # hrtime_t to int64_t works, and even more ambitious
- # would check whether long or long long was 64 bits (or even
- # better, the sizeof hrtime_t).
- fi
- if test "$ac_cv_func_gethrtime" = "yes" -a \
- "$pac_cv_hrtime_works" = "yes" ; then
- timer_type=gethrtime
- elif test "$ac_cv_func_clock_gettime" = "yes" -a \
- "$ac_cv_func_clock_getres" = "yes" ; then
- # Test on both because some systems (e.g., cygwin) provide
- # clock_gettime but not clock_getres
- timer_type=clock_gettime
- elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
- timer_type=mach_absolute_time
- elif test "$ac_cv_func_gettimeofday" = "yes" ; then
- timer_type=gettimeofday
- fi
-fi
-if test -z "$timer_type" ; then
- AC_MSG_ERROR([No timer found])
-fi
-
-# Check for valid timer and select datatypes for the time stamp
-case "$timer_type" in
-
- gethrtime)
- MPICH_TIMER_TYPE=hrtime_t
- AC_CHECK_FUNC(gethrtime,,[
- AC_MSG_ERROR([Requested timer gethrtime is not available])
-])
- ;;
-
- clock_gettime)
- missing_function=no
- AC_SEARCH_LIBS([clock_gettime],[rt],,AC_MSG_ERROR([clock_gettime is not available]))
- AC_SEARCH_LIBS([clock_getres],[rt],,AC_MSG_ERROR([clock_getres is not available]))
- MPICH_TIMER_TYPE="struct timespec"
- # AIX does not always define struct timespec (!)
- # Make sure that we can use struct timespec
- AC_CACHE_CHECK([whether struct timespec is defined in time.h],
- pac_cv_struct_timespec_defined,[
- AC_TRY_COMPILE([
-#include <time.h>],[
- struct timespec t;],pac_cv_struct_timespec_defined=yes,
- pac_cv_struct_timespec_defined=no)
-])
- if test "$pac_cv_struct_timespec_defined" != "yes" ; then
- # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
- AC_CACHE_CHECK([whether struct timespec is defined in time.h with _XOPEN_SOURCE=500],
- pac_cv_struct_timespec_defined_with_xopen500,[
- AC_TRY_COMPILE([
-#define _XOPEN_SOURCE 500
-#include <time.h>],[
- struct timespec t;],pac_cv_struct_timespec_defined_with_xopen500=yes,
- pac_cv_struct_timespec_defined_with_xopen500=no)
-])
- if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
- # We need to define _XOPEN_SOURCE=500, but we need to ensure that
- # this is done before any include files are loaded. At
- # this point it is really too late to add this definition,
- # since it may make other tests incompatible.
- AC_MSG_ERROR([The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure])
- fi
- fi
- #
- # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
- # time.h is required (see pages 45 and 46 in the POSIX standard).
- # See if we can compile
- AC_CACHE_CHECK([for CLOCK_REALTIME defined in time.h],pac_cv_posix_clock_realtime,[
- AC_TRY_COMPILE([
-#include <time.h>],[
- clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
-pac_cv_posix_clock_realtime=no)])
- if test "$pac_cv_posix_clock_realtime" = "no" ; then
- AC_MSG_WARN([POSIX timer requires definitions in time.h])
- # Check for the definition in sys/time.h, which is where
- # OpenBSD and FreeBSD have put it by mistake
- AC_TRY_COMPILE([
-#include <time.h>
-#include <sys/time.h>],[
- clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
-pac_cv_posix_clock_realtime=no)
- if test "$pac_cv_posix_clock_realtime" = yes ; then
- AC_MSG_WARN([sys/time.h required for POSIX timer])
- AC_DEFINE(NEEDS_SYS_TIME_H,1,[Define if sys/time.h is required to get timer definitions])
- else
- AC_MSG_ERROR([Cannot find the definition of CLOCK_REALTIME for the POSIX timer])
- fi
- fi
- ;;
-
- gettimeofday)
- MPICH_TIMER_TYPE="struct timeval"
- # We may have already tested for gettimeofday. If we got a "yes",
- # we're good to go
- if test "$ac_cv_func_gettimeofday" != "yes" ; then
- AC_CHECK_FUNC(gettimeofday,,[
- AC_MSG_ERROR([Requested timer gettimeofday is not available])
-])
- fi
- ;;
-
- linux86_cycle|linux86_cycle_2)
-
-# The following AC_TRY_RUN statements are needed because x86_64 compilers
-# usually know about rdtscp but the cpu may or may not actually implement the
-# feature. This is not cross-compile safe, unfortunately. In the long run we
-# should allow the user to override this with a configure flag.
- AC_CACHE_CHECK([that linux86 cycle counter is available],
- pac_cv_linux86_cycle,
- AC_TRY_RUN([
-int main()
-{
- /* rdtscp */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- return 0;
-}
- ],pac_cv_linux86_cycle=rdtscp,
- AC_TRY_RUN([[
-int main()
-{
- /* cpuid 64 */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- return 0;
-}
- ]],pac_cv_linux86_cycle=cpuid_rdtsc64,
- AC_TRY_RUN([[[
-int main()
-{
- /* cpuid 32 */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
- return 0;
-}
- ]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
- AC_TRY_RUN([[[[
-int main()
-{
- /* simple */
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
- return 0;
-}
- ]]]],pac_cv_linux86_cycle=rdtsc,
- pac_cv_linux86_cycle=no)
- )
- ),
-dnl The if-cross-compiling clause from the first AC_TRY_RUN. Hope that if the
-dnl compiler knows about the instruction then it's supported by the target
-dnl platform.
- AC_TRY_COMPILE(,[[
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- ]],pac_cv_linux86_cycle=rdtscp,
- AC_TRY_COMPILE(,[[[
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
- ]]],pac_cv_linux86_cycle=cpuid_rdtsc64,
- AC_TRY_COMPILE(,[[[[
- long long var, *var_ptr=&var;
- __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
- ]]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
- AC_TRY_COMPILE(,[[[[[
- long long var, *var_ptr=&var;
- __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
- ]]]]],pac_cv_linux86_cycle=rdtsc,
- pac_cv_linux86_cycle=no)
- )
- )
- )
- )
- )
-
- case "$pac_cv_linux86_cycle" in
- "rdtscp")
- AC_DEFINE(LINUX86_CYCLE_RDTSCP,1,[Define which x86 cycle counter to use])
- ;;
- "cpuid_rdtsc64")
- AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC64,1,[Define which x86 cycle counter to use])
- ;;
- "cpuid_rdtsc32")
- AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC32,1,[Define which x86 cycle counter to use])
- ;;
- "rdtsc")
- AC_DEFINE(LINUX86_CYCLE_RDTSC,1,[Define which x86 cycle counter to use])
- ;;
- *)
- cpu_gcc_x86_cycle=no
- ;;
- esac
-
- if test "$cpu_gcc_x86_cycle" = "no" ; then
- AC_MSG_ERROR([Linux86 cycle counter is not available on this system and or with the $CC compiler])
- fi
- MPICH_TIMER_TYPE="long long"
- ;;
-
- gcc_ia64_cycle)
- AC_CACHE_CHECK([that IPF timer is available],
-pac_cv_ia64_cycle,[
- AC_TRY_COMPILE(,[
- long var, *var_ptr=&var;
-#ifdef __INTEL_COMPILER
-#include "ia64regs.h"
- var=__getReg(_IA64_REG_AR_ITC);
-#else
- __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
-#endif
-],pac_cv_gcc_ia64_cycle=yes,pac_cv_gcc_ia64_cycle=no)])
- if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
- AC_MSG_ERROR([IPF cycle counter is not available on this system and or with the $CC compiler])
- fi
- MPICH_TIMER_TYPE="long"
- ;;
-
- linuxalpha_cycle)
- AC_MSG_ERROR([linuxalpha_cycle is no longer supported])
- ;;
-
- mach_absolute_time)
- AC_CHECK_FUNC(mach_absolute_time,,[AC_MSG_ERROR([mach_absolute_time is not available])])
- AC_CHECK_FUNC(mach_timebase_info,,[AC_MSG_ERROR([mach_timebase_info is not available])])
- MPICH_TIMER_TYPE="uint64_t"
- ;;
-
- device)
- # The device selected should export the datatype for the timer
- # in MPID_DEVICE_TIMER_TYPE if something other than long is needed
- if test -n "$MPID_DEVICE_TIMER_TYPE" ; then
- MPICH_TIMER_TYPE=$MPID_DEVICE_TIMER_TYPE
- fi
- ;;
-
- *)
- AC_MSG_ERROR([Invalid timer type $timer_type])
- ;;
-esac
-# Convert timer type to upper case
-timer_type=`echo $timer_type | \
- tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-MPICH_TIMER_KIND=MPIU_$timer_type
-AC_SUBST(MPICH_TIMER_KIND)
-# ----------------------------------------------------------------------------
-# End of code for timer support (except for ac_ OUTPUT)
-# ----------------------------------------------------------------------------
# Setup other replaceable values
AC_SUBST(MPILIBNAME)
AC_SUBST(PMPILIBNAME)
@@ -5094,49 +4747,6 @@ if test "$ac_cv_sizeof_int" = "$aint_size" ; then
AC_DEFINE(SIZEOF_INT_IS_AINT,1,[define if sizeof(int) = sizeof(MPI_Aint)])
fi
-# Find a pointer-sized int
-for type in int long long_long short ; do
- eval len=\$ac_cv_sizeof_$type
- if test "$len" = "$ac_cv_sizeof_void_p" ; then
- case $type in
- int)
- MPIU_PINT_FMT_DEC_SPEC="\"%d\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%u\""
- ;;
- long)
- MPIU_PINT_FMT_DEC_SPEC="\"%ld\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%lu\""
- ;;
- long_long)
- MPIU_PINT_FMT_DEC_SPEC="\"%lld\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%llu\""
- ;;
- short)
- MPIU_PINT_FMT_DEC_SPEC="\"%hd\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%hu\""
- ;;
- *)
- AC_MSG_WARN([unable to determine format specifiers for MPIU_Pint, defaulting to int])
- MPIU_PINT_FMT_DEC_SPEC="\"%d\""
- MPIU_UPINT_FMT_DEC_SPEC="\"%u\""
- ;;
- esac
- MPIU_PINT=`echo $type | sed -e 's/_/ /'`
- break
- fi
-done
-AC_DEFINE_UNQUOTED(MPIU_Pint,$MPIU_PINT,[MPIU_Pint is a pointer-sized integer])
-# allow @MPIU_PINT@ substitution in glue_romio.h
-AC_SUBST([MPIU_PINT])
-
-AC_DEFINE_UNQUOTED(MPIU_PINT_FMT_DEC_SPEC,
- $MPIU_PINT_FMT_DEC_SPEC,[MPIU_PINT_FMT_DEC_SPEC is the format
- specifier for printing Pint as a decimal])
-AC_DEFINE_UNQUOTED(MPIU_Upint,unsigned $MPIU_PINT,[MPIU_Upint is an unsigned pointer-sized integer])
-AC_DEFINE_UNQUOTED(MPIU_UPINT_FMT_DEC_SPEC,
- $MPIU_UPINT_FMT_DEC_SPEC,[MPIU_UPINT_FMT_DEC_SPEC is the format
- specifier for printing Upint as a decimal])
-
# ----------------------------------------------------------------------------
# MPI_AINT datatype
# ----------------------------------------------------------------------------
@@ -5161,27 +4771,13 @@ AC_SUBST(MPI_F77_AINT)
export MPI_F77_AINT
# ----------------------------------------------------------------------------
-# define MPIU_Size_t - used to express the size of objects
-# This is used in mpiu_type_defs.h to define MPIU_SIZE_T,
-# and is used in various parts of ch3 and mpid/common/sock.
-# This is used to handle the potential problem that a message is
-# too long to fit with an int. However, we may still need to make
-# some more adjustments in the code (this may not be used everywhere
-# that it is needed).
-#
-# FIXME: this should really be in a util configure file, but we don't
-# have one at the moment
-#
-MPIU_SIZE_T="unsigned $MPI_AINT"
-AC_DEFINE_UNQUOTED(MPIU_SIZE_T,$MPIU_SIZE_T,[Set to a type that can express the size of the entire address space])
-
if test "$ac_cv_sizeof_void_p" -lt "$aint_size" ; then
AC_DEFINE(USE_AINT_FOR_ATTRVAL,1,[Define if MPI_Aint should be used instead of void * for storing attribute values])
fi
# with MPI_AINT defined, now we can
# Get the size for the bsendoverhead
-AC_CHECK_SIZEOF(MPIR_Bsend_data_t,0,[
+AC_CHECK_SIZEOF(MPII_Bsend_data_t,0,[
#define MPI_Datatype int
typedef $MPI_AINT MPI_Aint;
#ifdef HAVE_STDLIB_H
@@ -5190,29 +4786,19 @@ typedef $MPI_AINT MPI_Aint;
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
-#include "${master_top_srcdir}/src/include/mpibsend.h"]
+#include "${master_top_srcdir}/src/include/mpii_bsend.h"]
)
-if test "$ac_cv_sizeof_MPIR_Bsend_data_t" = "0" ; then
+if test "$ac_cv_sizeof_MPII_Bsend_data_t" = "0" ; then
AC_MSG_ERROR([Unable to determine the size of MPI_BSEND_OVERHEAD])
# In the past, a default of 128 was used (still likely good enough),
# but the autoconf SIZEOF macro has been changed to ignore the second
# argument, so code that depended on the prior defined behavior now
# silently breaks.
fi
-BSEND_OVERHEAD=$ac_cv_sizeof_MPIR_Bsend_data_t
+BSEND_OVERHEAD=$ac_cv_sizeof_MPII_Bsend_data_t
export BSEND_OVERHEAD
AC_SUBST(BSEND_OVERHEAD)
-#
-# See if we need to update the timer type (which was converted to uppercase)
-if test "$timer_type" = "DEVICE" ; then
- # The device selected should export the datatype for the timer
- # in MPID_DEVICE_TIMER_TYPE if something other than long is needed
- if test -n "$MPID_DEVICE_TIMER_TYPE" ; then
- MPICH_TIMER_TYPE=$MPID_DEVICE_TIMER_TYPE
- fi
-fi
-
dnl Configure any subdirectories. Note that config.status will *not*
dnl reexecute these!
dnl
@@ -5226,203 +4812,6 @@ dnl autoconf did this in a way that caused problems, paritcularly with
dnl errors reported as inconsistent cache files. Instead, we simply
dnl invoke the configure scripts (if present) directly.
-#
-# -----------------------------------------------------------------------------
-# Configure threads first. This is necessary to obtain all required
-# definitions, flags, and libraries that the other subsystems will need
-#
-#
-# -----------------------------------------------------------------------------
-AC_ARG_WITH([thread-package],
-[ --with-thread-package=package Thread package to use. Supported thread packages include:
- posix or pthreads - POSIX threads (default, if required)
- solaris - Solaris threads (Solaris OS only)
- win - windows threads
- none - no threads
-],,with_thread_package=posix)
-
-if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
- with_thread_package=none
-fi
-
-if test "${with_thread_package}" = "yes" ; then
- with_thread_package=posix
-fi
-
-if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
- AC_ERROR([if no thread package is available, use --enable-threads=single or funneled])
-fi
-
-MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_INVALID
-case $with_thread_package in
- posix|pthreads)
- with_thread_package=posix
- AC_CHECK_HEADERS(pthread.h)
-
- # If pthreads library is found, just include it on the link line. We don't try
- # to test if the C compiler needs it or not, since the C++ or Fortran
- # compilers might need it even if the C compiler doesn't
- # (nvcc with gfortran, for example).
- #
- # OSF1 has __pthread_create but not pthread_create (because of
- # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
- AC_CHECK_LIB([pthread],[pthread_key_create],have_pthreads=yes)
- if test "$have_pthreads" = "yes" ; then
- PAC_PREPEND_FLAG([-lpthread],[LIBS])
- fi
-
- AC_CHECK_FUNCS(pthread_yield)
-
- # this check should come after the AC_CHECK_LIB for -lpthread
- AC_CHECK_FUNC([pthread_key_create],[],[AC_MSG_ERROR([unable to find pthreads library])])
-
- # Check for a routine that specify a routine to call on
- # thread exit. We can use this to release memory that may
- # be allocated by the MPICH library in the thread.
- # A complication: pthread_cleanup_push may be a macro; in that
- # case, check_funcs will fail to find it.
- # Under OSX, pthread_cleanup_push and pop are macros that must
- # appear together in the same lexical scope, and hence are
- # really useless in libraries that may allocate data within
- # a user-managed thread.
- AC_CHECK_FUNCS(pthread_cleanup_push)
- if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
- AC_CACHE_CHECK([whether pthread_cleanup_push is available (may be a macro in pthread.h)],pac_cv_func_pthread_cleanup_push,[
- AC_TRY_LINK([
-#include <pthread.h>
-void f1(void *a) { return; }],
-[pthread_cleanup_push( f1, (void *)0 );],
- pac_cv_func_pthread_cleanup_push=yes,
- pac_cv_func_pthread_cleanup_push=no)])
- if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
- AC_DEFINE(HAVE_PTHREAD_CLEANUP_PUSH_MACRO,1,[Define if pthread_cleanup_push is available, even as a macro])
- fi
-
- fi
-
- # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
- AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP],
- pac_cv_has_pthread_mutex_errorcheck_np,[
- AC_TRY_COMPILE([#include <pthread.h>],
- [int a=PTHREAD_MUTEX_ERRORCHECK_NP;],
- pac_cv_has_pthread_mutex_errorcheck_np=yes,
- pac_cv_has_pthread_mutex_errorcheck_np=no)])
- AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK],
- pac_cv_has_pthread_mutex_errorcheck,[
- AC_TRY_COMPILE([#include <pthread.h>],
- [int a=PTHREAD_MUTEX_ERRORCHECK;],
- pac_cv_has_pthread_mutex_errorcheck=yes,
- pac_cv_has_pthread_mutex_errorcheck=no)])
-
- if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
- AC_DEFINE(MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK,
- [Define to an expression that will result in an error checking mutex type.])
- elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
- AC_DEFINE(MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK_NP,
- [Define to an expression that will result in an error checking mutex type.])
- fi
-
- PAC_FUNC_NEEDS_DECL([#include <pthread.h>],pthread_mutexattr_settype)
-
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_POSIX
- ;;
- solaris)
- AC_CHECK_HEADERS(thread.h)
- AC_CHECK_FUNCS(thr_yield)
- AC_SEARCH_LIBS(thr_create,thread,found=yes,found=no)
- if test "$found" != "yes" ; then
- AC_MSG_ERROR([unable to find Solaris threads library])
- fi
- # FIXME: need to add -mt if using solaris compilers
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_SOLARIS
- ;;
- win|windows)
- with_thread_package=win
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_WIN
- AC_MSG_ERROR([The 'win' thread package is not supported via autoconf builds at this time.])
- ;;
- no|none)
- with_thread_package=none
- MPICH_THREAD_PACKAGE_NAME=MPICH_THREAD_PACKAGE_NONE
- ;;
- *)
- AC_MSG_ERROR([The specified thread package, $with_thread_package, is not supported.])
- ;;
-esac
-
-# Define and export the selected thread library so that other packages
-# know what's used in MPICH
-AC_DEFINE_UNQUOTED([MPICH_THREAD_PACKAGE_NAME],[$MPICH_THREAD_PACKAGE_NAME],[set to the name of the thread package])
-
-# check for compiler-support for thread-local storage (MPICH_TLS_SPECIFIER)
-AX_TLS
-
-AC_CHECK_FUNCS(getpid)
-
-# Choose a method to yield the procesor.
-
-# If the user specified a method to use, we check if it's available.
-# If a method was not specified, we make a guess based on the OS. The
-# default is to use sched_yield() or yield() if one is available,
-# otherwise, default to nothing. After that we define the appropriate
-# macro.
-
-AC_CHECK_HEADERS(sched.h)
-AC_CHECK_HEADERS(unistd.h)
-AC_CHECK_HEADERS(sys/select.h)
-AC_CHECK_FUNCS(sched_yield yield usleep sleep select)
-
-if test "$ac_cv_func_usleep" = "yes" ; then
- PAC_FUNC_NEEDS_DECL([#include <unistd.h>],usleep)
-fi
-
-AC_ARG_ENABLE([yield],
- [AS_HELP_STRING([--enable-yield], [choose a method to yield the processor in busy loops. Available methods are: sched_yield, yield, select, usleep, sleep, nothing])],
- [AS_CASE([$enableval],
- [sched_yield], [AS_IF([test "x$ac_cv_func_sched_yield" != "xyes"], [enable_yield=unavail])],
- [yield], [AS_IF([test "x$ac_cv_func_yield" != "xyes"], [enable_yield=unavail])],
- [select], [AS_IF([test "x$ac_cv_func_select" != "xyes"], [enable_yield=unavail])],
- [usleep], [AS_IF([test "x$ac_cv_func_usleep" != "xyes"], [enable_yield=unavail])],
- [sleep], [AS_IF([test "x$ac_cv_func_sleep" != "xyes"], [enable_yield=unavail])],
- [nothing|no|none], [],
- [AC_MSG_ERROR([Invalid option $enableval for --enable-yield])])
-
- AS_IF([test "x$enable_yield" = "xunavail"],
- [AC_MSG_ERROR([Yield method $enableval is not available on this platform.])])
- ],
- [# none specified by user; make a guess based on os
- AS_CASE([$host],
- [*-*-darwin*],
- [# In Lion, sched_yield worked but none of the other options had any effect
- AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
- [enable_yield=nothing])],
- [*-*-linux*],
- [# sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
- enable_yield=nothing],
- [# default: just use sched_yield() or yield()
- AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
- [test "x$ac_cv_func_yield" = "xyes"], [enable_yield=yield],
- [enable_yield=nothing])])
- ]
-)
-
-# set the appropriate macro
-AS_CASE([$enable_yield],
- [sched_yield],
- [AC_DEFINE(USE_SCHED_YIELD_FOR_YIELD,1,[Define to use sched_yield to yield processor])],
- [yield],
- [AC_DEFINE(USE_YIELD_FOR_YIELD,1,[Define to use yield to yield processor])],
- [select],
- [AC_DEFINE(USE_SELECT_FOR_YIELD,1,[Define to use select to yield processor])],
- [usleep],
- [AC_DEFINE(USE_USLEEP_FOR_YIELD,1,[Define to use usleep to yield processor])],
- [sleep],
- [AC_DEFINE(USE_SLEEP_FOR_YIELD,1,[Define to use sleep to yield processor])],
- [nothing|no|none],
- [AC_DEFINE(USE_NOTHING_FOR_YIELD,1,[Define to use nothing to yield processor])],
- [AC_MSG_ERROR([Invalid value $enable_yield for enable_yield.])]
-)
-
# Check for the Linux functions for controlling processor affinity.
# LINUX: sched_setaffinity
# AIX: bindprocessor
@@ -5932,8 +5321,6 @@ dnl a build aborts due to an error (this is intended to help developers)
AC_OUTPUT_COMMANDS([if [ ! -d lib ] ; then mkdir lib ; fi
date > lib/newconfig])
-AC_OUTPUT_COMMANDS([chmod a+x src/util/dbg/getfuncstack])
-
AC_OUTPUT_COMMANDS([chmod a+x test/commands/cmdtests])
@@ -6185,7 +5572,7 @@ AC_OUTPUT(Makefile \
test/commands/Makefile \
src/include/mpichinfo.h \
mpich-doxygen \
- src/include/glue_romio.h \
+ src/include/mpir_ext.h \
src/binding/cxx/mpicxx.h \
src/binding/fortran/mpif_h/mpif.h \
src/binding/fortran/mpif_h/setbotf.f \
@@ -6207,8 +5594,6 @@ AC_OUTPUT(Makefile \
src/env/mpifort.sh \
src/env/mpifort.bash \
src/env/parkill \
- src/util/dbg/getfuncstack \
- src/util/timers/mpiu_timer.h \
src/include/mpi.h \
doc/design/Makefile \
doc/installguide/Makefile \
diff --git a/doc/Makefile.mk b/doc/Makefile.mk
index 405dd69..dc0a2c4 100644
--- a/doc/Makefile.mk
+++ b/doc/Makefile.mk
@@ -8,6 +8,7 @@
DEVELOPER_SUBDIRS = doc/pmi doc/namepub
DOC_SUBDIRS += doc/mansrc doc/userguide doc/installguide doc/logging \
doc/design
+doc3_src_txt += doc/mansrc/mpiconsts.txt
userdocs:
for dir in $(DOC_SUBDIRS) ; do \
diff --git a/doc/installguide/install.pdf b/doc/installguide/install.pdf
index c1f9be0..a3de142 100644
Binary files a/doc/installguide/install.pdf and b/doc/installguide/install.pdf differ
diff --git a/doc/installguide/install.tex.vin b/doc/installguide/install.tex.vin
index 3b21843..44af9dd 100644
--- a/doc/installguide/install.tex.vin
+++ b/doc/installguide/install.tex.vin
@@ -49,10 +49,10 @@
Argonne National Laboratory}
\author{
-Abdelhalim Amer \and Pavan Balaji \and Wesley Bland \and William Gropp
-\and Rob Latham \and Huiwei Lu \and Lena Oden \and Antonio J. Pe\~na
-\and Ken Raffenetti \and Sangmin Seo \and Rajeev Thakur \and Junchao
-Zhang
+Abdelhalim Amer \and Pavan Balaji \and Wesley Bland \and William Gropp \and
+Yanfei Guo \and Rob Latham \and Huiwei Lu \and Lena Oden \and Antonio J. Pe\~na
+\and Ken Raffenetti \and Sangmin Seo \and Min Si \and Rajeev Thakur \and
+Junchao Zhang \and Xin Zhao
}
\maketitle
diff --git a/doc/logging/logging.pdf b/doc/logging/logging.pdf
index beafce4..77f4cf9 100644
Binary files a/doc/logging/logging.pdf and b/doc/logging/logging.pdf differ
diff --git a/doc/mansrc/cmdnotes b/doc/mansrc/cmdnotes
new file mode 100644
index 0000000..edf86ab
--- /dev/null
+++ b/doc/mansrc/cmdnotes
@@ -0,0 +1,21 @@
+The following name block provides the standard arguments for mpiexec, as
+defined by the MPI standard.
+An mpiexec manpage may include this name to get the common arguments.
+
+/*N mpiexecstdargs
+
++ \-n num - number of processes
+. \-host hostname - name of a host (machine, system) on which to run
+. \-arch architecture_name - name of the computer architecture required
+ for this executable
+. \-wdir working_directory - The working directory to use when running the
+ executable (set before the executable starts)
+. \-path pathlist - use this to find the executable
+. \-soft list - comma separated triplets specifying valid numbers of processes
+. \-file name - implementation-defined specification file
+- \-configfile name - file containing specifications of host/program,
+ one per line, with # as a comment indicator, e.g., the usual
+ mpiexec input, but with ":" replaced with a newline. That is,
+ the configfile contains lines with '-soft', '-n' etc.
+
+N*/
diff --git a/doc/mansrc/mpiconsts.txt b/doc/mansrc/mpiconsts.txt
new file mode 100644
index 0000000..4e7b741
--- /dev/null
+++ b/doc/mansrc/mpiconsts.txt
@@ -0,0 +1,547 @@
+This file contains the raw material for a file of the MPI defined
+constants
+
+The data could be organized to look like an enum - or add something to
+doctext that say "make each value in a list into an index entry to the
+same page.
+
+Doctext could also use a way to include an index to the corresponding
+page in the standard, perhaps by using an *input* index file (generated,
+perhaps, from the index entries in the LaTeX for the definition index entry).
+
+Needs to be updated for MPI-2 and MPI-3
+
+/*N Datatypes
+ Data types:
+ Note that the Fortran types should only be used in Fortran programs,
+ and the C types should only be used in C programs. For example,
+ it is in error to use 'MPI_INT' for a Fortran INTEGER.
+ Datatypes are of type 'MPI_Datatype' in C, type 'INTEGER' in Fortran,
+ and 'Type(MPI_Datatype)' in Fortran08
+N*/
+
+We may want to enlarge on some of these. For example, the description of
+communicators could include information from the standard, and/or links to the
+standard.
+
+/*D
+ Constants - Meaning of MPI''s defined constants
+
+.N Datatypes
+
+ C datatypes:
++I MPI_CHAR - char
+. MPI_SIGNED_CHAR - signed char
+. MPI_UNSIGNED_CHAR - unsigned char
+. MPI_BYTE - See standard; like unsigned char
+. MPI_WCHAR - wide character (wchar_t)
+. MPI_SHORT - short
+. MPI_UNSIGNED_SHORT - unsigned short
+. MPI_INT - int
+. MPI_UNSIGNED - unsigned int
+. MPI_LONG - long
+. MPI_UNSIGNED_LONG - unsigned long
+. MPI_LONG_LONG_INT - long long
+. MPI_LONG_LONG - synonyn for 'MPI_LONG_LONG_INT'
+. MPI_UNSIGNED_LONG_LONG - unsigned long long
+. MPI_FLOAT - float
+. MPI_DOUBLE - double
+. MPI_LONG_DOUBLE - long double (some systems may not implement this)
+. MPI_INT8_T - int8_t
+. MPI_INT16_T - int16_t
+. MPI_INT32_T - int32_t
+. MPI_INT64_T - int64_t
+. MPI_UINT8_T - uint8_t
+. MPI_UINT16_T - uint16_t
+. MPI_UINT32_T - uint32_t
+. MPI_UINT64_T - uint64_t
+. MPI_C_BOOL - _Bool
+. MPI_C_FLOAT_COMPLEX - float _Complex
+. MPI_C_COMPLEX - float _Complex
+. MPI_C_DOUBLE_COMPLEX - double _Complex
+- MPI_C_LONG_DOUBLE_COMPLEX - long double _Complex
+
+
+ The following are datatypes for the MPI functions 'MPI_MAXLOC' and
+ 'MPI_MINLOC'.
++I MPI_FLOAT_INT - 'struct { float, int }'
+. MPI_LONG_INT - 'struct { long, int }'
+. MPI_DOUBLE_INT - 'struct { double, int }'
+. MPI_SHORT_INT - 'struct { short, int }'
+. MPI_2INT - 'struct { int, int }'
+- MPI_LONG_DOUBLE_INT - 'struct { long double, int }'; this
+ is an `optional` type, and may be set to 'MPI_DATATYPE_NULL'
+
+
+ Special datatypes for C and Fortran
++I MPI_PACKED - For 'MPI_Pack' and 'MPI_Unpack'
+. MPI_UB - For 'MPI_Type_struct'; an upper-bound indicator. Removed in MPI 3
+- MPI_LB - For 'MPI_Type_struct'; a lower-bound indicator. Removed in MPI 3
+
+ Fortran datatypes:
++I MPI_REAL - 'REAL'
+. MPI_INTEGER - 'INTEGER'
+. MPI_LOGICAL - 'LOGICAL'
+. MPI_DOUBLE_PRECISION - 'DOUBLE PRECISION'
+. MPI_COMPLEX - 'COMPLEX'
+- MPI_DOUBLE_COMPLEX - 'complex*16' (or 'complex*32') where supported.
+
+ The following datatypes are optional
++I MPI_INTEGER1 - 'integer*1' if supported
+. MPI_INTEGER2 - 'integer*2' if supported
+. MPI_INTEGER4 - 'integer*4' if supported
+. MPI_INTEGER8 - 'integer*8' if supported
+. MPI_INTEGER16 - 'integer*16' if supported
+. MPI_REAL4 - 'real*4' if supported
+- MPI_REAL8 - 'real*8' if supported
+. MPI_REAL16 - 'real*16' if supported
+. MPI_COMPLEX8 - 'complex*8' if supported
+. MPI_COMPLEX16 - 'complex*16' if supported
+- MPI_COMPLEX32 - 'complex*32' if supported
+
+ The following are datatypes for the MPI functions 'MPI_MAXLOC' and
+ 'MPI_MINLOC'. In Fortran, these datatype always consist of
+ two elements of the same Fortran type.
++I MPI_2INTEGER - 'INTEGER,INTEGER'
+. MPI_2REAL - 'REAL, REAL'
+- MPI_2DOUBLE_PRECISION - 'DOUBLE PRECISION, DOUBLE PRECISION'
+
+ MPI Datatypes for MPI Types
++I MPI_AINT - Datatype for an 'MPI_Aint'
+. MPI_OFFSET - Datatype for an 'MPI_Offset'
+- MPI_COUNT - Datatype for an 'MPI_Count'
+
+ MPI Datatype Combiner Names:
++I MPI_COMBINER_NAMED - a named predefined datatype
+. MPI_COMBINER_DUP - MPI_TYPE_DUP
+. MPI_COMBINER_CONTIGUOUS - MPI_TYPE_CONTIGUOUS
+. MPI_COMBINER_VECTOR - MPI_TYPE_VECTOR
+. MPI_COMBINER_HVECTOR_INTEGER - Removed in MPI-3
+. MPI_COMBINER_HVECTOR - MPI_TYPE_CREATE_HVECTOR
+. MPI_COMBINER_INDEXED - MPI_TYPE_INDEXED
+. MPI_COMBINER_HINDEXED_INTEGER - Removed in MPI-3
+. MPI_COMBINER_HINDEXED - MPI_TYPE_CREATE_HINDEXED
+. MPI_COMBINER_INDEXED_BLOCK - MPI_TYPE_CREATE_INDEXED_BLOCK
+. MPI_COMBINER_STRUCT_INTEGER - Removed in MPI-3
+. MPI_COMBINER_STRUCT - MPI_TYPE_CREATE_STRUCT
+. MPI_COMBINER_SUBARRAY - MPI_TYPE_CREATE_SUBARRAY
+. MPI_COMBINER_DARRAY - MPI_TYPE_CREATE_DARRAY
+. MPI_COMBINER_F90_REAL - MPI_TYPE_CREATE_F90_REAL
+. MPI_COMBINER_F90_COMPLEX - MPI_TYPE_CREATE_F90_COMPLEX
+. MPI_COMBINER_F90_INTEGER - MPI_TYPE_CREATE_F90_INTEGER
+. MPI_COMBINER_RESIZED - MPI_TYPE_CREATE_RESIZED
+- MPI_COMBINER_HINDEXED_BLOCK - MPI_TYPE_CREATE_HINDEXED_BLOCK
+
+ MPI Datatype Type Classes:
+ MPI Type classes used with routines to return Fortran types with defined
+ precision and range
++I MPI_TYPECLASS_REAL - 'REAL'
+. MPI_TYPECLASS_INTEGER - 'INTEGER'
+- MPI_TYPECLASS_COMPLEX - 'COMPLEX'
+
+ MPI Darray and Subarray Values:
+ These values are used to create a datatype with the 'DARRAY' and 'SUBARRAY'
+ constructors.
++I MPI_ORDER_C - Row-major order (as used by C)
+. MPI_ORDER_FORTRAN - Column-major order (as used by Fortran)
+. MPI_DISTRIBUTE_BLOCK - Block distribution
+. MPI_DISTRIBUTE_CYCLIC - Cyclic distribution
+. MPI_DISTRIBUTE_NONE - This dimension is not distributed
+- MPI_DISTRIBUTE_DFLT_DARG - Use the default distribution
+
+ Communicators:
+ Communicators are of type 'MPI_Comm' in C, 'INTEGER' in Fortran, and
+ 'Type(MPI_Comm)' in Fortran08
++I MPI_COMM_WORLD - Contains all of the processes
+- MPI_COMM_SELF - Contains only the calling process
+
+ Kind of communicator for 'MPI_COMM_SPLIT_TYPE':
+.I MPI_COMM_TYPE_SHARED - All processes that can share memory are grouped into
+ the same communicator.
+
+ Groups:
+ Groups are of type 'MPI_Group' in C, 'INTEGER' in Fortran,
+ and 'Type(MPI_Group)' in Fortran08
+
+.I MPI_GROUP_EMPTY - A group containing no members.
+
+ Results of the compare operations on groups and communicators:
++I MPI_IDENT - Identical
+. MPI_CONGRUENT - (only for 'MPI_COMM_COMPARE') The groups are identical
+. MPI_SIMILAR - Same members, but in a different order
+- MPI_UNEQUAL - Different
+
+
+ Collective operations:
+ The collective combination operations (e.g., 'MPI_REDUCE', 'MPI_ALLREDUCE',
+ 'MPI_REDUCE_SCATTER', and 'MPI_SCAN') take a combination operation.
+ This operation is of type 'MPI_Op' in C and of type 'INTEGER' in Fortran.
+ The predefined operations are
+
++I MPI_MAX - return the maximum
+. MPI_MIN - return the minumum
+. MPI_SUM - return the sum
+. MPI_PROD - return the product
+. MPI_LAND - return the logical and
+. MPI_BAND - return the bitwise and
+. MPI_LOR - return the logical or
+. MPI_BOR - return the bitwise of
+. MPI_LXOR - return the logical exclusive or
+. MPI_BXOR - return the bitwise exclusive or
+. MPI_MINLOC - return the minimum and the location (actually, the value of
+ the second element of the structure where the minimum of
+ the first is found)
+. MPI_MAXLOC - return the maximum and the location
+. MPI_REPLACE - replace b with a
+- MPI_NO_OP - perform no operation
+
+Notes on collective operations:
+
+The reduction functions ('MPI_Op') do not return an error value. As a result,
+if the functions detect an error, all they can do is either call 'MPI_Abort'
+or silently skip the problem. Thus, if you change the error handler from
+'MPI_ERRORS_ARE_FATAL' to something else, for example, 'MPI_ERRORS_RETURN',
+then no error may be indicated.
+
+The reason for this is the performance problems in ensuring that
+all collective routines return the same error value.
+
+Note that not all datatypes are valid for these functions. For example,
+'MPI_COMPLEX' is not valid for 'MPI_MAX' and 'MPI_MIN'. In addition, the MPI
+1.1 standard did not include the C types 'MPI_CHAR' and 'MPI_UNSIGNED_CHAR'
+among the lists of arithmetic types for operations like 'MPI_SUM'. However,
+since the C type 'char' is an integer type (like 'short'), it should have been
+included. The MPI Forum will probably include 'char' and 'unsigned char'
+as a clarification to MPI 1.1; until then, users are advised that MPI
+implementations may not accept 'MPI_CHAR' and 'MPI_UNSIGNED_CHAR' as valid
+datatypes for 'MPI_SUM', 'MPI_PROD', etc. MPICH does allow these datatypes.
+
+ Permanent key values:
+ These are the same in C and Fortran
+
++I MPI_TAG_UB - Largest tag value
+. MPI_HOST - Rank of process that is host, if any
+. MPI_IO - Rank of process that can do I/O
+. MPI_WTIME_IS_GLOBAL - Has value 1 if 'MPI_WTIME' is globally synchronized.
+. MPI_UNIVERSE_SIZE - Number of available processes. See the standard for
+ a description of limitations on this value
+. MPI_LASTUSEDCODE - Last used MPI error code (check - code or class?)
+- MPI_APPNUM - Application number, starting from 0. See the standard for
+ 'MPI_COMM_SPAWN_MULTIPLE' and 'mpiexec' for details
+
+ Null objects:
++I MPI_COMM_NULL - Null communicator
+. MPI_OP_NULL - Null operation
+. MPI_GROUP_NULL - Null group
+. MPI_DATATYPE_NULL - Null datatype
+. MPI_REQUEST_NULL - Null request
+. MPI_ERRHANDLER_NULL - Null error handler
+. MPI_WIN_NULL - Null window handle
+. MPI_FILE_NULL - Null file handle
+. MPI_INFO_NULL - Null info handle
+. MPI_MESSAGE_NULL - Null message handle
+. MPI_ARGV_NULL - Empty ARGV value for spawn commands
+. MPI_ARGVS_NULL - Empty ARGV array for spawn-multiple command
+. MPI_T_ENUM_NULL - Null MPI_T enum
+. MPI_T_CVAR_HANDLE_NULL - Null MPI_T control variable handle
+. MPI_T_PVAR_HANDLE_NULL - Null MPI_T performance variable handle
+- MPI_T_PVAR_SESSION_NULL- Null MPI_T performance variable session handle
+
+ Predefined Constants:
++I MPI_MAX_PROCESSOR_NAME - Maximum length of name returned by
+ 'MPI_GET_PROCESSOR_NAME'
+. MPI_MAX_ERROR_STRING - Maximum length of string return by
+ 'MPI_ERROR_STRING'
+. MPI_MAX_LIBRARY_VERSION_STRING - Maximum length of string returned by
+ 'MPI_GET_LIBRARY_VERSION_STRING'???
+. MPI_MAX_PORT_NAME - Maximum length of a port
+. MPI_MAX_OBJECT_NAME - Maximum length of an object (?)
+. MPI_MAX_INFO_KEY - Maximum length of an info key
+. MPI_MAX_INFO_VAL - Maximum length of an info value
+. MPI_UNDEFINED - Used by many routines to indicated
+ undefined or unknown integer value
+. MPI_UNDEFINED_RANK - Unknown rank
+. MPI_KEYVAL_INVALID - Special keyval that may be used to detect
+ uninitialized keyvals.
+. MPI_BSEND_OVERHEAD - Add this to the size of a 'MPI_BSEND'
+ buffer for each outstanding message
+. MPI_PROC_NULL - This rank may be used to send or receive from no-one.
+. MPI_ANY_SOURCE - In a receive, accept a message from anyone.
+. MPI_ANY_TAG - In a receive, accept a message with any tag value.
+. MPI_BOTTOM - May be used to indicate the bottom of the address space
+. MPI_IN_PLACE - Special location for buffer in some
+ collective communication routines
+. MPI_VERSION - Numeric value of MPI version (e.g., 3)
+- MPI_SUBVERSION - Numeric value of MPI subversion (e.g., 1)
+
+ Topology types:
++I MPI_CART - Cartesian grid
+. MPI_GRAPH - General graph
+- MPI_DIST_GRAPH - General distributed graph
+
+ Special values for distributed graph:
++I MPI_UNWEIGHTED - Indicates that the edges are unweighted
+- MPI_WEIGHTS_EMPTY - Special address that indicates no array of weights
+ information
+
+ File Modes:
++I MPI_MODE_RDONLY - Read only
+. MPI_MODE_RDWR - Read and write
+. MPI_MODE_WRONLY - Write only
+. MPI_MODE_CREATE - Create the file if it does not exist
+. MPI_MODE_EXCL - It is an error if creating a file that already
+ exists
+. MPI_MODE_DELETE_ON_CLOSE - Delete the file on close
+. MPI_MODE_UNIQUE_OPEN - The file will not be concurrently opened elsewhere
+. MPI_MODE_APPEND - The initial position of all file pointers is at
+ the end of the file
+- MPI_MODE_SEQUENTIAL - File will only be accessed sequentially
+
+ File Displacement:
+.I MPI_DISPLACEMENT_CURRENT - Use with files opened with mode
+ 'MPI_MODE_SEQUENTIAL' in calls to 'MPI_FILE_SET_VIEW'
+
+File Positioning:
++I MPI_SEEK_SET - Set the pointer to 'offset'
+. MPI_SEEK_CUR - Set the pointer to the current position plus 'offset'
+- MPI_SEEK_END - Set the pointer to the end of the file plus 'offset'
+
+Window attributes:
++I MPI_WIN_BASE - window base address.
+. MPI_WIN_SIZE - window size, in bytes
+. MPI_WIN_DISP_UNIT - displacement unit associated with the window
+. MPI_WIN_CREATE_FLAVOR - how the window was created
+- MPI_WIN_MODEL - memory model for window
+
+Window flavors:
++I MPI_WIN_FLAVOR_CREATE - Window was created with MPI_WIN_CREATE.
+. MPI_WIN_FLAVOR_ALLOCATE - Window was created with MPI_WIN_ALLOCATE.
+. MPI_WIN_FLAVOR_DYNAMIC - Window was created with MPI_WIN_CREATE_DYNAMIC.
+- MPI_WIN_FLAVOR_SHARED - Window was created with MPI_WIN_ALLOCATE_SHARED.
+
+Window Memory Model:
++I MPI_WIN_SEPARATE - Separate public and private copies of window memory
+- MPI_WIN_UNIFIED - The publich and private copies are identical (by which
+ we mean that updates are eventually observed without additional RMA operations)
+
+Window Lock Types:
++I MPI_LOCK_EXCLUSIVE - Only one process at a time will execute accesses
+ within the lock
+- MPI_LOCK_SHARED - Not exclusive; multiple processes may execute accesses
+ within the lock
+
+Window Assertions:
+ See section 11.5 in MPI 3.1 for a detailed description of each of these
+ assertion values.
++I MPI_MODE_NOCHECK - The matching calls to MPI_WIN_POST or MPI_WIN_START
+ have already completed, or no process holds or will attempt to acquire, a
+ conflicting lock.
+. MPI_MODE_NOSTORE - The local window has not been updated by stores
+ since the last synchronization
+. MPI_MODE_NOPUT - The local window will not be updated by put or
+ accumulate until the next synchronization
+. MPI_MODE_NOPRECEDE - The fence does not complete any locally issued RMA
+ calls
+- MPI_MODE_NOSUCCEED - The fence does not start any locally issued RMA calls
+
+Predefined Info Object:
+.I MPI_INFO_ENV - Contains the execution environment
+
+ MPI Status:
+ The 'MPI_Status' datatype is a structure in C. The three elements for use
+ by programmers are
++I MPI_SOURCE - Who sent the message
+. MPI_TAG - What tag the message was sent with
+- MPI_ERROR - Any error return (only when the error returned by the routine
+ has error class 'MPI_ERR_IN_STATUS')
+
++I MPI_STATUS_IGNORE - Ignore a single 'MPI_Status' argument
+- MPI_STATUSES_IGNORE - Ignore an array of 'MPI_Status'
+
+Special value for error codes array:
+.I MPI_ERRCODES_IGNORE - Ignore an array of error codes
+
+ MPI_T Constants:
++I MPI_T_VERBOSITY_USER_BASIC - Basic information of interest to users
+. MPI_T_VERBOSITY_USER_DETAIL - Detailed information of interest to users
+. MPI_T_VERBOSITY_USER_ALL - All remaining information of interest to users
+. MPI_T_VERBOSITY_TUNER_BASIC - Basic information required for tuning
+. MPI_T_VERBOSITY_TUNER_DETAIL - Detailed information required for tuning
+. MPI_T_VERBOSITY_TUNER_ALL - All remaining information required for tuning
+. MPI_T_VERBOSITY_MPIDEV_BASIC - Basic information for MPI implementors
+
+
+. MPI_T_VERBOSITY_MPIDEV_DETAIL - Detailed information for MPI implementors
+. MPI_T_VERBOSITY_MPIDEV_ALL - All remaining information for MPI implementors
+. MPI_T_BIND_NO_OBJECT - Applies globally to entire MPI process
+. MPI_T_BIND_MPI_COMM - MPI communicators
+. MPI_T_BIND_MPI_DATATYPE - MPI datatypes
+. MPI_T_BIND_MPI_ERRHANDLER - MPI error handlers
+. MPI_T_BIND_MPI_FILE - MPI file handles
+. MPI_T_BIND_MPI_GROUP - MPI groups
+. MPI_T_BIND_MPI_OP - MPI reduction operators
+. MPI_T_BIND_MPI_REQUEST - MPI requests
+. MPI_T_BIND_MPI_WIN - MPI windows for one-sided communication
+. MPI_T_BIND_MPI_MESSAGE - MPI message object
+. MPI_T_BIND_MPI_INFO - MPI info object
+. MPI_T_SCOPE_CONSTANT -read-only, value is constant
+. MPI_T_SCOPE_READONLY - read-only, cannot be written, but can
+ change
+. MPI_T_SCOPE_LOCAL - may be writeable, writing is a local
+ operation
+. MPI_T_SCOPE_GROUP - may be writeable, must be done to a
+ group of processes, all processes in a group must be set to consistent values
+. MPI_T_SCOPE_GROUP_EQ - may be writeable, must be done to a
+ group of processes, all processes in a group must be set to the same value
+. MPI_T_SCOPE_ALL - may be writeable, must be done to all
+ processes, all connected processes must be set to consistent values
+. MPI_T_SCOPE_ALL_EQ - may be writeable, must be done to all
+ processes, all connected processes must be set to the same value
+. MPI_T_PVAR_CLASS_STATE - set of discrete states (MPI_INT)
+. MPI_T_PVAR_CLASS_LEVEL - utilization level of a resource
+. MPI_T_PVAR_CLASS_SIZE - size of a resource
+. MPI_T_PVAR_CLASS_PERCENTAGE - percentage utilization of a resource
+. MPI_T_PVAR_CLASS_HIGHWATERMARK - high watermark of a resource
+. MPI_T_PVAR_CLASS_LOWWATERMARK - low watermark of a resource
+. MPI_T_PVAR_CLASS_COUNTER - number of occurances of an event
+. MPI_T_PVAR_CLASS_AGGREGATE - aggregate value over an event (e.g.,
+ sum of all memory allocations)
+. MPI_T_PVAR_CLASS_TIMER - aggretate time spent executing event
+- MPI_T_PVAR_CLASS_GENERIC - used for any other time of performance
+ variable
+
+ Thread levels:
++I MPI_THREAD_SINGLE - Only one thread executes
+. MPI_THREAD_FUNNELED - Only the main thread makes MPI calls
+. MPI_THREAD_SERIALIZED - Only one thread at a time makes MPI calls
+- MPI_THREAD_MULTIPLE - Multiple threads may make MPI calls
+
+ Special MPI types and functions:
+
++I MPI_Aint - C type that holds any valid address.
+. MPI_Count - C type that holds any valid count.
+. MPI_Offset - C type that holds any valid file offset.
+. MPI_Handler_function - C function for handling errors (see
+ 'MPI_Errhandler_create') .
+. MPI_User_function - C function to combine values (see collective operations
+ and 'MPI_Op_create')
+. MPI_Copy_function - Function to copy attributes (see 'MPI_Keyval_create')
+. MPI_Delete_function - Function to delete attributes (see 'MPI_Keyval_create')
+. MPI_ERRORS_ARE_FATAL - Error handler that forces exit on error
+- MPI_ERRORS_RETURN - Error handler that returns error codes (as value of
+ MPI routine in C and through last argument in Fortran)
+
+ MPI Attribute Default Functions:
++I MPI_COMM_NULL_COPY_FN - Predefined attribute copy function for communicators
+. MPI_COMM_NULL_DELETE_FN - Predefined attribute delete function for communicators
+. MPI_COMM_DUP_FN - Predefined attribute duplicate function for communicators
+. MPI_WIN_NULL_COPY_FN - Predefined attribute copy function for windows
+. MPI_WIN_NULL_DELETE_FN - Predefined attribute delete function for windows
+. MPI_WIN_DUP_FN - Predefined attribute duplicate function for windows
+. MPI_TYPE_NULL_COPY_FN - Predefined attribute copy function for datatypes
+. MPI_TYPE_NULL_DELETE_FN - Predefined attribute delete function for datatypes
+- MPI_TYPE_DUP_FN - Predefined attribute duplicate function for datatypes
+
+ MPI-1 Attribute Default Functions:
++I MPI_NULL_COPY_FN - Predefined copy function
+. MPI_NULL_DELETE_FN - Predefined delete function
+- MPI_DUP_FN - Predefined duplication function
+
+ MPI Error classes:
++I MPI_SUCCESS - Successful return code
+. MPI_ERR_BUFFER - Invalid buffer pointer
+. MPI_ERR_COUNT - Invalid count argument
+. MPI_ERR_TYPE - Invalid datatype argument
+. MPI_ERR_TAG - Invalid tag argument
+. MPI_ERR_COMM - Invalid communicator
+. MPI_ERR_RANK - Invalid rank
+. MPI_ERR_ROOT - Invalid root
+. MPI_ERR_GROUP - Null group passed to function
+. MPI_ERR_OP - Invalid operation
+. MPI_ERR_TOPOLOGY - Invalid topology
+. MPI_ERR_DIMS - Illegal dimension argument
+. MPI_ERR_ARG - Invalid argument
+. MPI_ERR_UNKNOWN - Unknown error
+. MPI_ERR_TRUNCATE - Message truncated on receive
+. MPI_ERR_OTHER - Other error; use Error_string
+. MPI_ERR_INTERN - Internal error code
+. MPI_ERR_IN_STATUS - Look in status for error value
+. MPI_ERR_PENDING - Pending request
+. MPI_ERR_REQUEST - Invalid mpi_request handle
+. MPI_ERR_ACCESS - Permission denied
+. MPI_ERR_AMODE - Error related to the amode passed to
+ 'MPI_FILE_OPEN'
+. MPI_ERR_BAD_FILE - Invalid file name (e.g., path name too long)
+. MPI_ERR_CONVERSION - An error occurred in a user supplied data
+ conversion function
+. MPI_ERR_DUP_DATAREP - Conversion functions could not be registered
+ because a data representation identifier that was already defined was passed
+ to 'MPI_REGISTER_DATAREP'
+. MPI_ERR_FILE_EXISTS - File exists
+. MPI_ERR_FILE_IN_USE - File operation could not be completed, as
+ the file is currently open by some process
+. MPI_ERR_FILE - Invalid file handle
+. MPI_ERR_IO - Other I/O error
+. MPI_ERR_NO_SPACE - Not enough space
+. MPI_ERR_NO_SUCH_FILE - File does not exist
+. MPI_ERR_READ_ONLY - Read-only file or file system
+. MPI_ERR_UNSUPPORTED_DATAREP - Unsupported datarep passed to
+ 'MPI_FILE_SET_VIEW'
+. MPI_ERR_INFO - Invalid info argument
+. MPI_ERR_INFO_KEY - Key longer than MPI_MAX_INFO_KEY
+. MPI_ERR_INFO_VALUE - Value longer than MPI_MAX_INFO_VAL
+. MPI_ERR_INFO_NOKEY - Invalid key passed to MPI_INFO_DELETE
+. MPI_ERR_NAME - Invalid service name passed to MPI_LOOKUP_NAME
+. MPI_ERR_NO_MEM - Alloc_mem could not allocate memory
+. MPI_ERR_NOT_SAME - Collective argument not identical on all
+ processes, or collective routines called in a different order by different
+ processes
+. MPI_ERR_PORT - Invalid port name passed to MPI_COMM_CONNECT
+. MPI_ERR_QUOTA - Quota exceeded
+. MPI_ERR_SERVICE - Invalid service name passed to MPI_UNPUBLISH_NAME
+. MPI_ERR_SPAWN - Error in spawning processes
+. MPI_ERR_UNSUPPORTED_OPERATION - Unsupported operation, such as seeking on
+ a file which supports sequential access only
+. MPI_ERR_WIN - Invalid win argument
+. MPI_ERR_BASE - Invalid base passed to MPI_FREE_MEM
+. MPI_ERR_LOCKTYPE - Invalid locktype argument
+. MPI_ERR_KEYVAL - Erroneous attribute key
+. MPI_ERR_RMA_CONFLICT - Conflicting accesses to window
+. MPI_ERR_RMA_SYNC - Wrong synchronization of RMA calls
+. MPI_ERR_SIZE - Invalid size argument
+. MPI_ERR_DISP - Invalid disp argument
+. MPI_ERR_ASSERT - Invalid assert argument
+. MPI_ERR_RMA_RANGE - Target memory is not part of the window (in
+ the case of a window created with MPI_WIN_CREATE_DYNAMIC, target memory is
+ not attached)
+. MPI_ERR_RMA_ATTACH - Memory cannot be attached (e.g., because of
+ resource exhaustion)
+. MPI_ERR_RMA_SHARED - Memory cannot be shared (e.g., some process in
+ the group of the specified communicator cannot expose shared memory)
+. MPI_ERR_RMA_FLAVOR - Passed window has the wrong flavor for the
+ called function
+- MPI_ERR_LASTCODE - Last error code -- always at end
+
+Error codes for MPI_T:
+
++I MPI_T_ERR_MEMORY - Out of memory
+. MPI_T_ERR_NOT_INITIALIZED - Interface not initialized
+. MPI_T_ERR_CANNOT_INIT - Interface not in the state to be initialized
+. MPI_T_ERR_INVALID_INDEX - The index is invalid or has been deleted
+. MPI_T_ERR_INVALID_ITEM - Item index queried is out of range
+. MPI_T_ERR_INVALID_HANDLE - The handle is invalid
+. MPI_T_ERR_OUT_OF_HANDLES - No more handles available
+. MPI_T_ERR_OUT_OF_SESSIONS - No more sessions available
+. MPI_T_ERR_INVALID_SESSION - Session argument is not valid
+. MPI_T_ERR_CVAR_SET_NOT_NOW - Cvar can''t be set at this moment
+. MPI_T_ERR_CVAR_SET_NEVER - Cvar can''t be set until end of execution
+. MPI_T_ERR_PVAR_NO_STARTSTOP - Pvar can''t be started or stopped
+. MPI_T_ERR_PVAR_NO_WRITE - Pvar can''t be written or reset
+. MPI_T_ERR_PVAR_NO_ATOMIC - Pvar can''t be R/W atomically
+. MPI_T_ERR_INVALID_NAME - Name doesn''t match
+- MPI_T_ERR_INVALID - Invalid use of the interface or bad parameter
+ values(s)
+
+D*/
+
+
diff --git a/doc/namepub/namepub.tex b/doc/namepub/namepub.tex
index f62f38a..648934f 100644
--- a/doc/namepub/namepub.tex
+++ b/doc/namepub/namepub.tex
@@ -88,17 +88,17 @@ error code mechanism or, for external packages, use the MPI routines
for adding error codes and classes.
\begin{verbatim}
-int MPID_NS_Create( const MPID_Info *, MPID_NS_Handle * )
-int MPID_NS_Publish( MPID_NS_Handle, const MPID_Info *,
+int MPID_NS_Create( const MPIR_Info *, MPID_NS_Handle * )
+int MPID_NS_Publish( MPID_NS_Handle, const MPIR_Info *,
const char service_name[], const char port[] )
-int MPID_NS_Lookup( MPID_NS_Handle, const MPID_Info *,
+int MPID_NS_Lookup( MPID_NS_Handle, const MPIR_Info *,
const char service_name[], char port[] )
-int MPID_NS_Unpublish( MPID_NS_Handle, const MPID_Info *,
+int MPID_NS_Unpublish( MPID_NS_Handle, const MPIR_Info *,
const char service_name[] )
int MPID_NS_Free( MPID_NS_Handle * )
\end{verbatim}
-These calls make use of the \code{MPID_Info} pointer (a pointer to the
+These calls make use of the \code{MPIR_Info} pointer (a pointer to the
info object passed into the MPI name publisher routines) to provide other
information that the name service may require.
Predefined \code{MPI_Info} keys and values for name service are:
diff --git a/doc/notes/coll/collective.txt b/doc/notes/coll/collective.txt
index fc21466..6a516c5 100644
--- a/doc/notes/coll/collective.txt
+++ b/doc/notes/coll/collective.txt
@@ -96,12 +96,12 @@ a transfer block defines 0 or 1 envelope/payloads for sources and 0 to N envelop
account that there might be incoming active message or error conditions, so
we should poll all methods (and all vcs) periodically.
-- We believe that a MPID_Request might simply contain enough information for
+- We believe that a MPIR_Request might simply contain enough information for
signalling that one or more CARs have completed. This implies that a
- MPID_Request might consist of a integer counter of outstanding CARs. When
+ MPIR_Request might consist of a integer counter of outstanding CARs. When
the counter reached zero, the request is complete. David suggests making
- CARs and MPID_Requests reside in the same physical structure so that in the
- MPI_Send/Recv() case, two logical allocations (one for MPID_Request and CAR)
+ CARs and MPIR_Requests reside in the same physical structure so that in the
+ MPI_Send/Recv() case, two logical allocations (one for MPIR_Request and CAR)
are combined into one.
- operations within a block are prioritized by the order in which they are
diff --git a/doc/notes/pt2pt/pt2pt.txt b/doc/notes/pt2pt/pt2pt.txt
index b73dd75..459b922 100644
--- a/doc/notes/pt2pt/pt2pt.txt
+++ b/doc/notes/pt2pt/pt2pt.txt
@@ -204,12 +204,12 @@ a transfer block defines 0 or 1 envelope/payloads for sources and 0 to N envelop
account that there might be incoming active message or error conditions, so
we should poll all methods (and all vcs) periodically.
-- We believe that a MPID_Request might simply contain enough information for
+- We believe that a MPIR_Request might simply contain enough information for
signalling that one or more CARs have completed. This implies that a
- MPID_Request might consist of a integer counter of outstanding CARs. When
+ MPIR_Request might consist of a integer counter of outstanding CARs. When
the counter reached zero, the request is complete. David suggests making
- CARs and MPID_Requests reside in the same physical structure so that in the
- MPI_Send/Recv() case, two logical allocations (one for MPID_Request and CAR)
+ CARs and MPIR_Requests reside in the same physical structure so that in the
+ MPI_Send/Recv() case, two logical allocations (one for MPIR_Request and CAR)
are combined into one.
- operations within a block are prioritized by the order in which they are
@@ -259,4 +259,4 @@ MPID_Issend(buf, count, datatype, dest, tag, comm, request, error)
Items which make life more difficult:
--
\ No newline at end of file
+-
diff --git a/doc/notes/rma/dm-mt.c b/doc/notes/rma/dm-mt.c
index e0a70a3..6b10f31 100644
--- a/doc/notes/rma/dm-mt.c
+++ b/doc/notes/rma/dm-mt.c
@@ -11,7 +11,7 @@ MPID_Win_fence().
******************************************************************************/
-struct MPID_Win
+struct MPIR_Win
{
/*** insert struct MPIR_Win here ***/
diff --git a/doc/notes/rma/dm.c b/doc/notes/rma/dm.c
index 8be68c4..334713f 100644
--- a/doc/notes/rma/dm.c
+++ b/doc/notes/rma/dm.c
@@ -2,7 +2,7 @@
Distributed Memory Implementation
******************************************************************************/
-struct MPID_Win
+struct MPIR_Win
{
/*** insert struct MPIR_Win here ***/
diff --git a/doc/notes/rma/mpi.c b/doc/notes/rma/mpi.c
index 5bab749..6a6da01 100644
--- a/doc/notes/rma/mpi.c
+++ b/doc/notes/rma/mpi.c
@@ -21,7 +21,7 @@ struct MPIR_Win
MPI_Win_create(base, size, disp_unit, info, comm, win)
{
- dwin = malloc(sizeof(MPID_Win));
+ dwin = malloc(sizeof(MPIR_Win));
dwin->rank = MPI_Comm_rank(comm);
dwin->np = MPI_Comm_size(comm);
MPI_Comm_dup(comm, dwin_p.comm);
@@ -33,8 +33,8 @@ MPI_Win_create(base, size, disp_unit, info, comm, win)
dwin->displ = disp_unit;
dwin->bases = malloc(sizeof(void *) * dwin->np);
- dwin->sizes = malloc(sizeof(MPID_Win * dwin->np);
- dwin->displs = malloc(sizeof(MPID_Win) * dwin->np);
+ dwin->sizes = malloc(sizeof(MPIR_Win * dwin->np);
+ dwin->displs = malloc(sizeof(MPIR_Win) * dwin->np);
rc = MPI_Allgather(dwin->base, dwin->bases, dwin->comm);
rc = MPI_Allgather(dwin->size, dwin->sizes, dwin->comm);
diff --git a/doc/notes/rma/mpi.txt b/doc/notes/rma/mpi.txt
index 6b89ff3..1818e37 100644
--- a/doc/notes/rma/mpi.txt
+++ b/doc/notes/rma/mpi.txt
@@ -46,17 +46,17 @@ Data structures
MPI_Win_create
-* Allocate a MPID_Win structure and fill in the device independent portion
+* Allocate a MPIR_Win structure and fill in the device independent portion
(MPIR_Win).
* Create a copy of the communcator provided by the user so the
window has its own communcation context.
Q: Which layer (MPI/ADI3) should manage (be responsible for
- creating, destroying, etc.) the MPID_Win object?
+ creating, destroying, etc.) the MPIR_Win object?
- Q: Assuming the MPI layer managed the MPID_Win object, should
- MPID_Win be allocated using an MPID function? Would this buy us
+ Q: Assuming the MPI layer managed the MPIR_Win object, should
+ MPIR_Win be allocated using an MPID function? Would this buy us
anything?
* Acquire information about all of the processes involved in this window.
diff --git a/doc/userguide/user.pdf b/doc/userguide/user.pdf
index d9b3400..e69f090 100644
Binary files a/doc/userguide/user.pdf and b/doc/userguide/user.pdf differ
diff --git a/doc/userguide/user.tex.vin b/doc/userguide/user.tex.vin
index d255fd2..95334aa 100644
--- a/doc/userguide/user.tex.vin
+++ b/doc/userguide/user.tex.vin
@@ -47,10 +47,10 @@ Mathematics and Computer Science Division\\
Argonne National Laboratory}
\author{
-Abdelhalim Amer \and Pavan Balaji \and Wesley Bland \and William Gropp
-\and Rob Latham \and Huiwei Lu \and Lena Oden \and Antonio J. Pe\~na
-\and Ken Raffenetti \and Sangmin Seo \and Rajeev Thakur \and Junchao
-Zhang
+Abdelhalim Amer \and Pavan Balaji \and Wesley Bland \and William Gropp \and
+Yanfei Guo \and Rob Latham \and Huiwei Lu \and Lena Oden \and Antonio J. Pe\~na
+\and Ken Raffenetti \and Sangmin Seo \and Min Si \and Rajeev Thakur \and
+Junchao Zhang \and Xin Zhao
}
\maketitle
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 441d5d1..d895c87 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -110,6 +110,7 @@ am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_bugfix.m4 \
$(top_srcdir)/confdb/aclocal_cache.m4 \
$(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_check_visibility.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
$(top_srcdir)/confdb/aclocal_cxx.m4 \
$(top_srcdir)/confdb/aclocal_f77.m4 \
@@ -122,39 +123,45 @@ am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_shm.m4 \
$(top_srcdir)/confdb/aclocal_subcfg.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
- $(top_srcdir)/confdb/ax_tls.m4 $(top_srcdir)/confdb/libtool.m4 \
+ $(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
$(top_srcdir)/confdb/ltsugar.m4 \
$(top_srcdir)/confdb/ltversion.m4 \
$(top_srcdir)/confdb/lt~obsolete.m4 \
+ $(top_srcdir)/confdb/random_r.m4 \
+ $(top_srcdir)/confdb/stdlib_h.m4 \
$(top_srcdir)/maint/version.m4 $(top_srcdir)/subsys_include.m4 \
- $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
$(top_srcdir)/src/binding/fortran/use_mpi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
$(top_srcdir)/src/pm/subconfigure.m4 \
$(top_srcdir)/src/pm/gforker/subconfigure.m4 \
- $(top_srcdir)/src/pmi/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
$(top_srcdir)/src/pmi/slurm/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/poe/subconfigure.m4 \
- $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
- $(top_srcdir)/src/mpid/pamid/subconfigure.m4 \
- $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/poll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/stubshm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/posix/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/shm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/portals4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/stubnm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ucx/subconfigure.m4 \
+ $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
$(top_srcdir)/src/pm/util/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -301,13 +308,11 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
-ASSERT_LEVEL = @ASSERT_LEVEL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASH_SHELL = @BASH_SHELL@
-BGQ_INSTALL_DIR = @BGQ_INSTALL_DIR@
BSEND_OVERHEAD = @BSEND_OVERHEAD@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
@@ -443,10 +448,72 @@ FORTRAN_MPI_OFFSET = @FORTRAN_MPI_OFFSET@
GCOV = @GCOV@
GNUCXX_MINORVERSION = @GNUCXX_MINORVERSION@
GNUCXX_VERSION = @GNUCXX_VERSION@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
HAVE_CXX_EXCEPTIONS = @HAVE_CXX_EXCEPTIONS@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
HAVE_ERROR_CHECKING = @HAVE_ERROR_CHECKING@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_REALPATH = @HAVE_REALPATH@
HAVE_ROMIO = @HAVE_ROMIO@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE__EXIT = @HAVE__EXIT@
INCLUDE_MPICXX_H = @INCLUDE_MPICXX_H@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -478,6 +545,7 @@ MPICHLIB_CPPFLAGS = @MPICHLIB_CPPFLAGS@
MPICHLIB_CXXFLAGS = @MPICHLIB_CXXFLAGS@
MPICHLIB_FCFLAGS = @MPICHLIB_FCFLAGS@
MPICHLIB_FFLAGS = @MPICHLIB_FFLAGS@
+MPICH_CUSTOM_STRING = @MPICH_CUSTOM_STRING@
MPICH_MPICC_CFLAGS = @MPICH_MPICC_CFLAGS@
MPICH_MPICC_CPPFLAGS = @MPICH_MPICC_CPPFLAGS@
MPICH_MPICC_LDFLAGS = @MPICH_MPICC_LDFLAGS@
@@ -496,8 +564,6 @@ MPICH_MPIFORT_LDFLAGS = @MPICH_MPIFORT_LDFLAGS@
MPICH_MPIFORT_LIBS = @MPICH_MPIFORT_LIBS@
MPICH_NUMVERSION = @MPICH_NUMVERSION@
MPICH_RELEASE_DATE = @MPICH_RELEASE_DATE@
-MPICH_TIMER_KIND = @MPICH_TIMER_KIND@
-MPICH_TIMER_TYPE = @MPICH_TIMER_TYPE@
MPICH_VERSION = @MPICH_VERSION@
MPICONSTMODNAME = @MPICONSTMODNAME@
MPICPP_NAME = @MPICPP_NAME@
@@ -516,7 +582,6 @@ MPIR_CXX_DOUBLE_COMPLEX = @MPIR_CXX_DOUBLE_COMPLEX@
MPIR_CXX_LONG_DOUBLE_COMPLEX = @MPIR_CXX_LONG_DOUBLE_COMPLEX@
MPISIZEOFMODNAME = @MPISIZEOFMODNAME@
MPIU_DLL_SPEC_DEF = @MPIU_DLL_SPEC_DEF@
-MPIU_PINT = @MPIU_PINT@
MPI_2COMPLEX = @MPI_2COMPLEX@
MPI_2DOUBLE_COMPLEX = @MPI_2DOUBLE_COMPLEX@
MPI_2DOUBLE_PRECISION = @MPI_2DOUBLE_PRECISION@
@@ -663,13 +728,28 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
-PAMILIBNAME = @PAMILIBNAME@
PAPI_INCLUDE = @PAPI_INCLUDE@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PMPILIBNAME = @PMPILIBNAME@
PMPI_F08_NAME = @PMPI_F08_NAME@
RANLIB = @RANLIB@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
REQD = @REQD@
REQI1 = @REQI1@
REQI2 = @REQI2@
@@ -695,8 +775,8 @@ USER_FCFLAGS = @USER_FCFLAGS@
USER_FFLAGS = @USER_FFLAGS@
USER_LDFLAGS = @USER_LDFLAGS@
USER_LIBS = @USER_LIBS@
-USE_DBG_LOGGING = @USE_DBG_LOGGING@
VERSION = @VERSION@
+VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
WRAPPER_CFLAGS = @WRAPPER_CFLAGS@
WRAPPER_CPPFLAGS = @WRAPPER_CPPFLAGS@
WRAPPER_CXXFLAGS = @WRAPPER_CXXFLAGS@
@@ -731,6 +811,22 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
+ch4_netmods = @ch4_netmods@
+ch4_nets_array = @ch4_nets_array@
+ch4_nets_array_sz = @ch4_nets_array_sz@
+ch4_nets_func_array = @ch4_nets_func_array@
+ch4_nets_func_decl = @ch4_nets_func_decl@
+ch4_nets_native_func_array = @ch4_nets_native_func_array@
+ch4_nets_native_func_decl = @ch4_nets_native_func_decl@
+ch4_nets_strings = @ch4_nets_strings@
+ch4_shm = @ch4_shm@
+ch4_shm_array = @ch4_shm_array@
+ch4_shm_array_sz = @ch4_shm_array_sz@
+ch4_shm_func_array = @ch4_shm_func_array@
+ch4_shm_func_decl = @ch4_shm_func_decl@
+ch4_shm_native_func_array = @ch4_shm_native_func_array@
+ch4_shm_native_func_decl = @ch4_shm_native_func_decl@
+ch4_shm_strings = @ch4_shm_strings@
channel_name = @channel_name@
datadir = @datadir@
datarootdir = @datarootdir@
@@ -771,6 +867,8 @@ nemesis_nets_func_decl = @nemesis_nets_func_decl@
nemesis_nets_macro_defs = @nemesis_nets_macro_defs@
nemesis_nets_strings = @nemesis_nets_strings@
nemesis_networks = @nemesis_networks@
+ofilib = @ofilib@
+ofisrcdir = @ofisrcdir@
oldincludedir = @oldincludedir@
opalib = @opalib@
opalibdir = @opalibdir@
@@ -781,6 +879,7 @@ pm_name = @pm_name@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/maint/Version b/maint/Version
index 2f09e43..97dfefe 100644
--- a/maint/Version
+++ b/maint/Version
@@ -4,6 +4,6 @@
# intentionally not managed by the makefile system and may not be up to date at
# all times w.r.t. the version.m4 file.
-MPICH_VERSION=3.2
+MPICH_VERSION=3.3a2
export MPICH_VERSION
diff --git a/maint/checkbuilds b/maint/checkbuilds
index bd7a7c3..137a9ea 100755
--- a/maint/checkbuilds
+++ b/maint/checkbuilds
@@ -50,7 +50,7 @@ $hasDemon = 0;
@enable_array = (
'error-checking;no;runtime;all',
'error-messages;all;generic;class;none',
- 'timer-type;linux86_cycle;gethrtime;clock_gettime;gettimeofday;linuxalpha_cycle',
+ 'timer-type;linux86_cycle;gethrtime;clock_gettime;gettimeofday',
'timing;none;all;runtime;log;log_detailed',
'g;none;all;handle;dbg;log;meminit;handlealloc;instr;mem;mutex;mutexnesting;memarena',
'fast;nochkmsg;notiming;ndebug;all',
@@ -68,7 +68,6 @@ $hasDemon = 0;
'thread-cs;global;per-object;lock-free',
'refcount;lock;lock-free;none',
'mutex-timing',
- 'handle-allocation;tls;mutex',
'multi-aliases',
'wrapper-rpath',
'predefined-refcount',
diff --git a/maint/checkbuilds.in b/maint/checkbuilds.in
index ad8ca1b..01d487c 100644
--- a/maint/checkbuilds.in
+++ b/maint/checkbuilds.in
@@ -50,7 +50,7 @@ $hasDemon = 0;
@enable_array = (
'error-checking;no;runtime;all',
'error-messages;all;generic;class;none',
- 'timer-type;linux86_cycle;gethrtime;clock_gettime;gettimeofday;linuxalpha_cycle',
+ 'timer-type;linux86_cycle;gethrtime;clock_gettime;gettimeofday',
'timing;none;all;runtime;log;log_detailed',
'g;none;all;handle;dbg;log;meminit;handlealloc;instr;mem;mutex;mutexnesting;memarena',
'fast;nochkmsg;notiming;ndebug;all',
@@ -68,7 +68,6 @@ $hasDemon = 0;
'thread-cs;global;per-object;lock-free',
'refcount;lock;lock-free;none',
'mutex-timing',
- 'handle-allocation;tls;mutex',
'multi-aliases',
'wrapper-rpath',
'predefined-refcount',
diff --git a/maint/code-cleanup.sh b/maint/code-cleanup.sh
index 01c12ac..413c5b4 100755
--- a/maint/code-cleanup.sh
+++ b/maint/code-cleanup.sh
@@ -73,12 +73,15 @@ if [ "$recursive" = "1" ]; then
for i in `find . \! -type d | egrep '(\.c$|\.h$|\.c\.in$|\.h\.in$|\.cpp$|\.cpp.in$)' | \
egrep -v "($ignore_list)"` ; do
${debug} indent_code $i
+ ${debug} indent_code $i
done
elif [ "$all" = "1" ]; then
for i in `find . -maxdepth 1 \! -type d | egrep '(\.c$|\.h$|\.c\.in$|\.h\.in$|\.cpp$|\.cpp.in$)' | \
egrep -v "($ignore_list)"` ; do
${debug} indent_code $i
+ ${debug} indent_code $i
done
else
${debug} indent_code $@
+ ${debug} indent_code $@
fi
diff --git a/maint/configure b/maint/configure
index 1f56fff..fb127f3 100755
--- a/maint/configure
+++ b/maint/configure
@@ -606,6 +606,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -670,6 +671,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE}'
@@ -922,6 +924,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1059,7 +1070,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1212,6 +1223,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1740,7 +1752,7 @@ CXXFLAGS='@CXXFLAGS@'
# autoconf replacement.
# Note that top_srcdir and srcdir are special cases (they must not
# be changed in configure.ac because configure uses them to find other files)
-ac_config_files="$ac_config_files checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex cvardirs"
+ac_config_files="$ac_config_files checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex cvardirs getfuncstack"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -2470,6 +2482,7 @@ do
"gcovmerge") CONFIG_FILES="$CONFIG_FILES gcovmerge" ;;
"createhtmlindex") CONFIG_FILES="$CONFIG_FILES createhtmlindex" ;;
"cvardirs") CONFIG_FILES="$CONFIG_FILES cvardirs" ;;
+ "getfuncstack") CONFIG_FILES="$CONFIG_FILES getfuncstack" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
@@ -2888,7 +2901,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
case $ac_file$ac_mode in
- "default-1":C) chmod a+x checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex ;;
+ "default-1":C) chmod a+x checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex getfuncstack ;;
esac
done # for ac_tag
diff --git a/maint/configure.ac b/maint/configure.ac
index ba71a63..8767c80 100644
--- a/maint/configure.ac
+++ b/maint/configure.ac
@@ -27,7 +27,7 @@ if test "$xargs_out" != "0" ; then
fi
AC_SUBST(XARGS_NODATA_OPT)
-AC_OUTPUT_COMMANDS([chmod a+x checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex])
+AC_OUTPUT_COMMANDS([chmod a+x checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex getfuncstack])
# We have to redefine the variables that autoconf always substitutes and that
# are used in simplemake
CFLAGS='@CFLAGS@'
@@ -38,4 +38,4 @@ CXXFLAGS='@CXXFLAGS@'
# autoconf replacement.
# Note that top_srcdir and srcdir are special cases (they must not
# be changed in configure.ac because configure uses them to find other files)
-AC_OUTPUT(checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex cvardirs)
+AC_OUTPUT(checkbuilds getcoverage genstates clmake f77tof90 extractstrings extractcvars extractstates extractfixme createcoverage gcovmerge createhtmlindex cvardirs getfuncstack)
diff --git a/maint/createcoverage b/maint/createcoverage
index 1ee9389..82eafae 100755
--- a/maint/createcoverage
+++ b/maint/createcoverage
@@ -6,7 +6,7 @@
# The default approach is to prepare the coverage for this MPICH
# distribution and to place the coverage web pages into a
# (mpichsrc)/www/coverage
-srcdir=/tmp/wB2927n3sW/mpich-3.2
+srcdir=/tmp/hBL2ZMkkTy/mpich-3.3a2
tsuites=$srcdir/tests/mpi
weblocbase=$srcdir/www/coverage
weblocprefix=""
diff --git a/maint/createhtmlindex b/maint/createhtmlindex
index ee8d212..6b30307 100755
--- a/maint/createhtmlindex
+++ b/maint/createhtmlindex
@@ -47,12 +47,18 @@ be run in a VPATH directory after configuring.\n";
open( OUTFD, ">$WWWRoot/www/index.html" ) ||
die "Cannot open $WWWRoot/www/index.html\n";
-&AddHeader( "Web pages for MPI and MPE" );
+&AddHeader( "Web pages for MPI" );
print OUTFD "<H2>MPI Commands</H2>$eol";
&AddDirectoryContents( "www", "www1" );
-print OUTFD "<H2>MPI Routines</H2>$eol";
+print OUTFD "<H2>MPI Routines and Constants</H2>$eol";
+if (-f "www/www3/mpi.cit") {
+ &createRedirects("www/www3", "mpi.cit");
+}
+else {
+ print STDERR "Could not find mapping file\n";
+}
&AddDirectoryContents( "www", "www3" );
#print OUTFD "<H2>MPE Routines</H2>$eol";
@@ -74,7 +80,7 @@ close( OUTFD );
open( OUTFD, ">$WWWRoot/www/www3/index.htm" ) ||
die "Cannot open $WWWRoot/www/www3/index.htm\n";
-&AddHeader( "Web pages for MPI Routines" );
+&AddHeader( "Web pages for MPI Routines and Constants" );
&AddDirectoryContents( "www/www3", "." );
&AddTrailer( );
close( OUTFD );
@@ -105,6 +111,37 @@ sub AddTrailer {
print OUTFD "</BODY>$eol</HTML>$eol";
}
+# For the items (mostly MPI constants) that are within a single web page,
+# create a redirect page for them. This allows us to point to a location
+# on the page, rather than just a page which is what a file link would
+# accomplish
+sub createRedirects {
+ $rootdir = $_[0];
+ $mapfile = $_[1];
+ open( MAPFD, "<$rootdir/$mapfile" ) || die "Cannot open map file $mapfile\n";
+ while (<MAPFD>) {
+ @fields = split(/\+/);
+ $name = $fields[1];
+ $url = $fields[8];
+ if ($url =~ /(.*)\/([^\/]*)\.([HTMLhtml]*)#(.*)/) {
+ $rooturl = $1;
+ $basefile = $2;
+ $ext = $3;
+ $anchor = $4;
+ if ($basefile ne $anchor) {
+ open(RFD, ">$rootdir/$anchor.htm") || die "Cannot open redirect file $anchor.htm\n";
+ print RFD "<html><head><meta http-equiv=\"refresh\" content=\"0; url=$basefile.$ext#$anchor\" /></head></html>\n";
+ close RFD;
+ }
+ }
+ else {
+ print STDERR "Could not decode $url\n";
+ }
+
+ }
+ close MAPFD;
+}
+
# Take all .htm and .html files and add them to the OUTFD file.
# This works in two steps:
# 1. Read and sort the contents of the directory into the array
diff --git a/maint/createhtmlindex.in b/maint/createhtmlindex.in
index ee8d212..6b30307 100644
--- a/maint/createhtmlindex.in
+++ b/maint/createhtmlindex.in
@@ -47,12 +47,18 @@ be run in a VPATH directory after configuring.\n";
open( OUTFD, ">$WWWRoot/www/index.html" ) ||
die "Cannot open $WWWRoot/www/index.html\n";
-&AddHeader( "Web pages for MPI and MPE" );
+&AddHeader( "Web pages for MPI" );
print OUTFD "<H2>MPI Commands</H2>$eol";
&AddDirectoryContents( "www", "www1" );
-print OUTFD "<H2>MPI Routines</H2>$eol";
+print OUTFD "<H2>MPI Routines and Constants</H2>$eol";
+if (-f "www/www3/mpi.cit") {
+ &createRedirects("www/www3", "mpi.cit");
+}
+else {
+ print STDERR "Could not find mapping file\n";
+}
&AddDirectoryContents( "www", "www3" );
#print OUTFD "<H2>MPE Routines</H2>$eol";
@@ -74,7 +80,7 @@ close( OUTFD );
open( OUTFD, ">$WWWRoot/www/www3/index.htm" ) ||
die "Cannot open $WWWRoot/www/www3/index.htm\n";
-&AddHeader( "Web pages for MPI Routines" );
+&AddHeader( "Web pages for MPI Routines and Constants" );
&AddDirectoryContents( "www/www3", "." );
&AddTrailer( );
close( OUTFD );
@@ -105,6 +111,37 @@ sub AddTrailer {
print OUTFD "</BODY>$eol</HTML>$eol";
}
+# For the items (mostly MPI constants) that are within a single web page,
+# create a redirect page for them. This allows us to point to a location
+# on the page, rather than just a page which is what a file link would
+# accomplish
+sub createRedirects {
+ $rootdir = $_[0];
+ $mapfile = $_[1];
+ open( MAPFD, "<$rootdir/$mapfile" ) || die "Cannot open map file $mapfile\n";
+ while (<MAPFD>) {
+ @fields = split(/\+/);
+ $name = $fields[1];
+ $url = $fields[8];
+ if ($url =~ /(.*)\/([^\/]*)\.([HTMLhtml]*)#(.*)/) {
+ $rooturl = $1;
+ $basefile = $2;
+ $ext = $3;
+ $anchor = $4;
+ if ($basefile ne $anchor) {
+ open(RFD, ">$rootdir/$anchor.htm") || die "Cannot open redirect file $anchor.htm\n";
+ print RFD "<html><head><meta http-equiv=\"refresh\" content=\"0; url=$basefile.$ext#$anchor\" /></head></html>\n";
+ close RFD;
+ }
+ }
+ else {
+ print STDERR "Could not decode $url\n";
+ }
+
+ }
+ close MAPFD;
+}
+
# Take all .htm and .html files and add them to the OUTFD file.
# This works in two steps:
# 1. Read and sort the contents of the directory into the array
diff --git a/maint/cvardirs b/maint/cvardirs
index 4f035bb..18e2f28 100644
--- a/maint/cvardirs
+++ b/maint/cvardirs
@@ -1 +1 @@
-/tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi_t /tmp/wB2927n3sW/mpich-3.2/maint/../src/nameserv /tmp/wB2927n3sW/mpich-3.2/maint/../src/util /tmp/wB2927n3sW/mpich-3.2/maint/../src/binding /tmp/wB2927n3sW/mpich-3.2/maint/../src/include /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid /tmp/wB2927n3sW/mpich-3.2/maint/../src/pmi /tmp/wB2927n3sW/mpich-3.2/maint/../src/mutex
+/tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi_t /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/nameserv /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/binding /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/include /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/pmi /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mutex
diff --git a/maint/decode_handle b/maint/decode_handle
index 181ea2a..8895f03 100755
--- a/maint/decode_handle
+++ b/maint/decode_handle
@@ -57,32 +57,32 @@ while (scalar @ARGV) {
}
}
-## code from src/include/mpihandlemem.h from which this script was derived
+## code from src/include/mpir_objects.h from which this script was derived
## ----8<----
-##
-## typedef enum MPID_Object_kind {
-## MPID_COMM = 0x1,
-## MPID_GROUP = 0x2,
-## MPID_DATATYPE = 0x3,
-## MPID_FILE = 0x4, /* This is not used */
-## MPID_ERRHANDLER = 0x5,
-## MPID_OP = 0x6,
-## MPID_INFO = 0x7,
-## MPID_WIN = 0x8,
+##
+## typedef enum MPII_Object_kind {
+## MPIR_COMM = 0x1,
+## MPIR_GROUP = 0x2,
+## MPIR_DATATYPE = 0x3,
+## MPIR_FILE = 0x4, /* This is not used */
+## MPIR_ERRHANDLER = 0x5,
+## MPIR_OP = 0x6,
+## MPIR_INFO = 0x7,
+## MPIR_WIN = 0x8,
## MPID_KEYVAL = 0x9,
-## MPID_ATTR = 0xa,
-## MPID_REQUEST = 0xb,
-## MPID_PROCGROUP = 0xc, /* These are internal device objects */
-## MPID_VCONN = 0xd,
-## MPID_GREQ_CLASS = 0xf
-## } MPID_Object_kind;
-##
+## MPIR_ATTR = 0xa,
+## MPIR_REQUEST = 0xb,
+## MPIR_PROCGROUP = 0xc, /* These are internal device objects */
+## MPIR_VCONN = 0xd,
+## MPIR_GREQ_CLASS = 0xf
+## } MPII_Object_kind;
+##
## #define HANDLE_MPI_KIND_SHIFT 26
## #define HANDLE_GET_MPI_KIND(a) ( ((a)&0x3c000000) >> HANDLE_MPI_KIND_SHIFT )
## #define HANDLE_SET_MPI_KIND(a,kind) ((a) | ((kind) << HANDLE_MPI_KIND_SHIFT))
##
## /* returns the name of the handle kind for debugging/logging purposes */
-## const char *MPIU_Handle_get_kind_str(int kind);
+## const char *MPIR_Handle_get_kind_str(int kind);
##
## /* Handle types. These are really 2 bits */
## #define HANDLE_KIND_INVALID 0x0
diff --git a/maint/docnotes b/maint/docnotes
index 215ac56..736f4ca 100644
--- a/maint/docnotes
+++ b/maint/docnotes
@@ -488,6 +488,10 @@ N*/
. MPI_T_ERR_INVALID_ITEM - Item index queried is out of range.
N*/
+/*N MPI_T_ERR_INVALID_NAME
+. MPI_T_ERR_INVALID_NAME - The variable or category name is invalid
+N*/
+
/*N MPI_T_ERR_INVALID_HANDLE
. MPI_T_ERR_INVALID_HANDLE - The handle is invalid.
N*/
diff --git a/maint/extractcvars b/maint/extractcvars
index a383815..2f66a42 100755
--- a/maint/extractcvars
+++ b/maint/extractcvars
@@ -14,7 +14,7 @@ use Data::Dumper;
use Getopt::Long;
# Help perl find the YAML parsing module
-use lib '/tmp/wB2927n3sW/mpich-3.2/maint/local_perl/lib';
+use lib '/tmp/hBL2ZMkkTy/mpich-3.3a2/maint/local_perl/lib';
use YAML::Tiny qw();
# To format README file
@@ -42,9 +42,9 @@ my $alt_ns = "MPIR_PARAM";
my $dep_ns = "MPICH";
# Default :output source files
-my $header_file = "/tmp/wB2927n3sW/mpich-3.2/maint/../src/include/mpich_cvars.h";
-my $c_file = "/tmp/wB2927n3sW/mpich-3.2/maint/../src/util/cvar/mpich_cvars.c";
-my $readme_file = "/tmp/wB2927n3sW/mpich-3.2/maint/../README.envvar";
+my $header_file = "/tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/include/mpir_cvars.h";
+my $c_file = "/tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util/cvar/mpir_cvars.c";
+my $readme_file = "/tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../README.envvar";
sub Usage {
print <<EOT;
@@ -170,7 +170,7 @@ foreach my $p (@cvars) {
print OUTPUT_H <<EOT;
/* TODO: this should be defined elsewhere */
-#define ${ns}_assert MPIU_Assert
+#define ${ns}_assert MPIR_Assert
/* Arbitrary, simplifies interaction with external interfaces like MPI_T_ */
#define ${uc_ns}_MAX_STRLEN (384)
@@ -347,10 +347,10 @@ EOT
if ($p->{type} eq 'string') {
print OUTPUT_C <<EOT;
if (tmp_str != NULL) {
- ${var_name} = MPIU_Strdup(tmp_str);
+ ${var_name} = MPL_strdup(tmp_str);
${ns}_assert(${var_name});
if (${var_name} == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for ${var_name}");
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for ${var_name}");
goto fn_fail;
}
}
@@ -385,7 +385,7 @@ foreach my $p (@cvars) {
# Need to cleanup after whatever was strduped by the init routine
print OUTPUT_C <<EOT;
if (${var_name} != NULL) {
- MPIU_Free(${var_name});
+ MPL_free(${var_name});
${var_name} = NULL;
}
@@ -394,10 +394,7 @@ EOT
}
print OUTPUT_C <<EOT;
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
EOT
diff --git a/maint/extractcvars.in b/maint/extractcvars.in
index b21b688..278d08e 100755
--- a/maint/extractcvars.in
+++ b/maint/extractcvars.in
@@ -42,8 +42,8 @@ my $alt_ns = "MPIR_PARAM";
my $dep_ns = "MPICH";
# Default :output source files
-my $header_file = "@abs_srcdir@/../src/include/mpich_cvars.h";
-my $c_file = "@abs_srcdir@/../src/util/cvar/mpich_cvars.c";
+my $header_file = "@abs_srcdir@/../src/include/mpir_cvars.h";
+my $c_file = "@abs_srcdir@/../src/util/cvar/mpir_cvars.c";
my $readme_file = "@abs_srcdir@/../README.envvar";
sub Usage {
@@ -170,7 +170,7 @@ foreach my $p (@cvars) {
print OUTPUT_H <<EOT;
/* TODO: this should be defined elsewhere */
-#define ${ns}_assert MPIU_Assert
+#define ${ns}_assert MPIR_Assert
/* Arbitrary, simplifies interaction with external interfaces like MPI_T_ */
#define ${uc_ns}_MAX_STRLEN (384)
@@ -347,10 +347,10 @@ EOT
if ($p->{type} eq 'string') {
print OUTPUT_C <<EOT;
if (tmp_str != NULL) {
- ${var_name} = MPIU_Strdup(tmp_str);
+ ${var_name} = MPL_strdup(tmp_str);
${ns}_assert(${var_name});
if (${var_name} == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for ${var_name}");
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for ${var_name}");
goto fn_fail;
}
}
@@ -385,7 +385,7 @@ foreach my $p (@cvars) {
# Need to cleanup after whatever was strduped by the init routine
print OUTPUT_C <<EOT;
if (${var_name} != NULL) {
- MPIU_Free(${var_name});
+ MPL_free(${var_name});
${var_name} = NULL;
}
@@ -394,10 +394,7 @@ EOT
}
print OUTPUT_C <<EOT;
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
EOT
diff --git a/maint/extracterrmsgs b/maint/extracterrmsgs
index b22954b..2359bd1 100755
--- a/maint/extracterrmsgs
+++ b/maint/extracterrmsgs
@@ -159,7 +159,7 @@ sub CreateErrmsgsHeader {
* This file automatically created by extracterrmsgs\
* DO NOT EDIT\
*/\n";
- print $FD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_CLASS
+ print $FD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__CLASS
typedef struct msgpair {
const unsigned int sentinal1;
const char *short_name, *long_name;
@@ -214,7 +214,7 @@ sub CreateErrMsgMapping {
# For the case of classes only, output the strings for the class
# messages
- print $OUTFD "#if MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG_CLASS\n";
+ print $OUTFD "#if MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG__CLASS\n";
print $OUTFD "#define MPIR_MAX_ERROR_CLASS_INDEX $#class_msgs+1\n";
print $OUTFD "static const char *classToMsg[] = {\n";
for (my $i=0; $i<=$#class_msgs; $i++) {
@@ -230,7 +230,7 @@ sub CreateErrMsgMapping {
# The long messages must be available for the generic message output.
# An alternative is to separate the short from the long messages;
# the long messages are needed for > MSG_NONE, the short for > MSG_CLASS.
- print $OUTFD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_CLASS\n";
+ print $OUTFD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__CLASS\n";
print $OUTFD "/* The names are in sorted order, allowing the use of a simple\
linear search or bisection algorithm to find the message corresponding to\
a particular message */\n";
@@ -284,7 +284,7 @@ sub CreateErrMsgMapping {
$num = 0;
# Now output the instance specific messages
- print $OUTFD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_GENERIC\n";
+ print $OUTFD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__GENERIC\n";
foreach $key (sort keys %specific_msgs)
{
$longvalue = "\"\0\"";
@@ -320,7 +320,7 @@ sub CreateErrMsgMapping {
print $OUTFD "};\n";
print $OUTFD "#endif\n\n";
- print $OUTFD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_CLASS\n";
+ print $OUTFD "#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__CLASS\n";
$maxval = $#class_msgs + 1;
print $OUTFD "#define MPIR_MAX_ERROR_CLASS_INDEX $maxval\n";
print $OUTFD "static int class_to_index[] = {\n";
@@ -580,6 +580,8 @@ sub ReadErrnamesFile {
else
{
print STDERR "Warning: attempt to redefine $name. Duplicate ignored.\n";
+ print STDERR "Previously defined at $longnamesDefined{$name} with value \"$longnames{$name}\"\n";
+ print STDERR "Redefined at $sourcefile:$linecount with value \"$repl\"\n";
}
}
}
@@ -726,7 +728,7 @@ sub ProcessFile
if ($errClassLoc >= 0 && $checkErrClass) {
if (!($args[$errClassLoc] =~ /^MPI_ERR_/) &&
!($args[$errClassLoc] =~ /^MPI_T_ERR_/) &&
- !($args[$errClassLoc] =~ /^MPIDU_SOCK_ERR_/) &&
+ !($args[$errClassLoc] =~ /^MPIDI_CH3I_SOCK_ERR_/) &&
!($args[$errClassLoc] =~ /^MPIX_ERR_/) &&
!($args[$errClassLoc] =~ /^errclass/) &&
!($args[$errClassLoc] =~ /^\*\(errflag_\)/) &&
diff --git a/maint/extractstates b/maint/extractstates
index 7ff5162..88a4200 100755
--- a/maint/extractstates
+++ b/maint/extractstates
@@ -57,8 +57,8 @@ require "$maintdir/extractstrings";
'MPID_STATE_READV' => 'readv',
'MPID_STATE_WRITEV' => 'writev',
'MPID_STATE_MEMCPY' => 'memcpy',
- 'MPID_STATE_MPIDU_SOCK_LISTEN', # used in sock code
- 'MPID_STATE_MPIDU_SOCK_ACCEPT',
+ 'MPID_STATE_MPIDI_CH3I_SOCK_LISTEN', # used in sock code
+ 'MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT',
'MPID_STATE_POLL' => 'poll',
# MPICH internal implementation routines
'MPID_STATE_UPDATE_REQUEST' => 'update_request',
diff --git a/maint/extractstates.in b/maint/extractstates.in
index 7ff5162..88a4200 100644
--- a/maint/extractstates.in
+++ b/maint/extractstates.in
@@ -57,8 +57,8 @@ require "$maintdir/extractstrings";
'MPID_STATE_READV' => 'readv',
'MPID_STATE_WRITEV' => 'writev',
'MPID_STATE_MEMCPY' => 'memcpy',
- 'MPID_STATE_MPIDU_SOCK_LISTEN', # used in sock code
- 'MPID_STATE_MPIDU_SOCK_ACCEPT',
+ 'MPID_STATE_MPIDI_CH3I_SOCK_LISTEN', # used in sock code
+ 'MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT',
'MPID_STATE_POLL' => 'poll',
# MPICH internal implementation routines
'MPID_STATE_UPDATE_REQUEST' => 'update_request',
diff --git a/maint/genstates b/maint/genstates
index 6f71ba0..e96cbdc 100755
--- a/maint/genstates
+++ b/maint/genstates
@@ -252,9 +252,9 @@ print F "#ifndef MPICH_MPI_FROM_PMPI\n";
print F "\n";
print F "#ifdef HAVE_TIMING\n";
print F "\n";
-print F "#if (USE_LOGGING == MPID_LOGGING_RLOG)\n";
+print F "#if (USE_LOGGING == MPICH_LOGGING__RLOG)\n";
print F "\n";
-print F "int MPIR_Describe_timer_states()\n";
+print F "int MPII_Describe_timer_states()\n";
print F "{\n";
print F "\n";
foreach (@states)
@@ -267,6 +267,6 @@ foreach (@states)
print F " return 0;\n";
print F "}\n";
print F "\n";
-print F "#endif /* USE_LOGGING == MPID_LOGGING_RLOG */\n";
+print F "#endif /* USE_LOGGING == MPICH_LOGGING__RLOG */\n";
print F "#endif /* HAVE_TIMING */\n";
print F "#endif /* MPICH_MPI_FROM_PMPI */\n";
diff --git a/maint/genstates.in b/maint/genstates.in
index 6f71ba0..e96cbdc 100644
--- a/maint/genstates.in
+++ b/maint/genstates.in
@@ -252,9 +252,9 @@ print F "#ifndef MPICH_MPI_FROM_PMPI\n";
print F "\n";
print F "#ifdef HAVE_TIMING\n";
print F "\n";
-print F "#if (USE_LOGGING == MPID_LOGGING_RLOG)\n";
+print F "#if (USE_LOGGING == MPICH_LOGGING__RLOG)\n";
print F "\n";
-print F "int MPIR_Describe_timer_states()\n";
+print F "int MPII_Describe_timer_states()\n";
print F "{\n";
print F "\n";
foreach (@states)
@@ -267,6 +267,6 @@ foreach (@states)
print F " return 0;\n";
print F "}\n";
print F "\n";
-print F "#endif /* USE_LOGGING == MPID_LOGGING_RLOG */\n";
+print F "#endif /* USE_LOGGING == MPICH_LOGGING__RLOG */\n";
print F "#endif /* HAVE_TIMING */\n";
print F "#endif /* MPICH_MPI_FROM_PMPI */\n";
diff --git a/maint/getcoverage b/maint/getcoverage
index 6f7bec2..45860bc 100755
--- a/maint/getcoverage
+++ b/maint/getcoverage
@@ -109,7 +109,7 @@ for (@ARGV) {
# Create the coverage in default web pages for the device
# named as an argument (e.g., maint/getcoverage -webpages=ch3:sock)
my $device = $1;
- my $weblocbase = "/tmp/wB2927n3sW/mpich-3.2/www/coverage";
+ my $weblocbase = "/tmp/hBL2ZMkkTy/mpich-3.3a2/www/coverage";
my $webloc = $weblocbase . "/$device";
$annoteSrcDir = $webloc;
$annoteFiles = 1;
diff --git a/maint/getfuncstack b/maint/getfuncstack
new file mode 100755
index 0000000..719e95c
--- /dev/null
+++ b/maint/getfuncstack
@@ -0,0 +1,147 @@
+#! /usr/bin/perl
+# -*- Mode: perl; -*-
+#
+# In Progress script to make the default log files more readable.
+# This indents the routine enter/exit lines, and applies that indent to
+# other lines. It also simplifies the lines, removing all but the message
+# and location (and computing the time within each function)
+#
+# Set defaults
+my $whichrank = -1;
+my $filenameTrim = "default";
+my %elideCall = ();
+my $infile = "";
+my $isThreaded = 1;
+my $onlyRoutine = 0;
+
+for (@ARGV) {
+ if (/^--?rank=(\d+)/) {
+ $whichrank = $1;
+ }
+ elsif (/^--?srcdir=(.*)/) {
+ $filenameTrim = $1;
+ }
+ elsif (/^--?elide=(.*)/) {
+ # This must exactly match the function name recorded
+ $elideCall{$1} = 1;
+ $elideCall{"MPID_STATE_$1"} = 1;
+ }
+ elsif (/^-/) {
+ print STDERR
+ "getfuncstack [ -rank=n ] [-srcdir=path] [-elide=name] < logfile\n";
+ exit(1);
+ }
+ else {
+ $infile = $_;
+ break;
+ }
+}
+
+ at ARGV = ();
+
+# Set initial values
+my $linecount = 0;
+my $nestlevel = 0;
+my $curstate = "";
+my @routineStack = ();
+my @routineTime = ();
+my $inElide = 0;
+
+while (<>) {
+ my $spaces = "";
+ my $tottime = "";
+ my $extraMsg = "";
+ $linecount++;
+ ($world,$rank,$thread,$class,$time,$file,$line,$msg) = split( /\t/, $_ );
+
+# # Check for validity
+# Removed for now - best to use on separate file output
+# if ((!$isThreaded && $thread != 0) || $class < 0) {
+# # These should really be checks for is-int as well
+# next;
+# }
+
+ # Discard unwanted ranks
+ if ($whichrank >= 0 && ($rank != $whichrank || $world > 0) ) { next; }
+
+ # Automatically choose the default filename trim
+ if ($filenameTrim eq "default") {
+ $filenameTrim = $file;
+ $filenameTrim =~ s/(.*\/mpich[^\/]*\/src\/).*/\1/;
+ }
+ if ($filenameTrim ne "" && $file =~ /^$filenameTrim/) {
+ $file =~ s/^$filenameTrim//;
+ }
+
+ # Update nesting level
+ if ($msg =~ /^Entering (.*)/) {
+ $curstate = $1;
+ if (defined($elideCall{$curstate})) {
+ $inElide = 1;
+ }
+ elsif (!$inElide) {
+ $spaces = &indent($nestlevel++) . ">";
+ $routineStack[$#routineStack+1] = $curstate;
+ $routineTime[$#routineTime+1] = $time;
+ }
+ }
+ elsif ($msg =~ /^Leaving (.*)/) {
+ $curstate = $1;
+ if ($nestlevel > 0) {
+ if (defined($elideCall{$curstate})) {
+ $inElide = 0;
+ }
+ elsif (!$inElide) {
+ $spaces = &indent(--$nestlevel) . "<";
+ my $expected = $routineStack[$#routineStack];
+ $#routineStack--;
+ if ($expected ne $curstate) {
+ print STDERR "Expected state $expected but found $curstate\n";
+ }
+ # Get the total time in this routine
+ $tottime = $time - $routineTime[$#routineTime];
+ $#routineTime--;
+ # Round totaltime to a few digits
+ $tottime = sprintf("%.3g",$tottime);
+ $tottime = "($tottime)";
+ }
+ }
+ }
+ else {
+ if ($onlyRoutine) {
+ print STDERR "Malformed line $linecount: $_";
+ next;
+ }
+ $spaces = &indent($nestlevel);
+ $extraMsg = $msg;
+ $extraMsg =~ s/\r?\n//;
+ }
+
+ # Strip common text off of state
+ $curstate =~ s/^MPID_STATE_//;
+ $curstate =~ s/\r?\n//g;
+
+ if (! $inElide) {
+ my $baseinfo = $spaces;
+ if ($extraMsg ne "") {
+ $baseinfo .= $extraMsg;
+ }
+ else {
+ $baseinfo .= $curstate . "$tottime";
+ }
+ my $location = "$file\[$line\]";
+ my $pad = 40 - length($baseinfo);
+ for (my $i=0; $i<$pad; $i++) { $baseinfo .= " "; }
+ print "$baseinfo $location\n";
+ }
+}
+
+sub indent {
+ my $num = $_[0];
+ my $spaces = "";
+ for (my $i=0; $i<=$num; $i++) {
+ $spaces .= " ";
+ }
+ return $spaces;
+}
+
diff --git a/src/util/dbg/getfuncstack.in b/maint/getfuncstack.in
similarity index 100%
rename from src/util/dbg/getfuncstack.in
rename to maint/getfuncstack.in
diff --git a/maint/git-conflicts.bash b/maint/git-conflicts.bash
index 780c535..019d510 100755
--- a/maint/git-conflicts.bash
+++ b/maint/git-conflicts.bash
@@ -1,6 +1,7 @@
#! /bin/bash
max_abbrev=12
+scale=10
total=`git rev-list --all | wc -l`
@@ -8,7 +9,7 @@ echo "Conflicts:"
echo "Format: [abbrev length]: number of conflicts / total number of refs (percentage conflicts)"
for ((x = 1 ; x <= ${max_abbrev} ; x++)) ; do
conflicts=`git rev-list --all --abbrev=$x --abbrev-commit | sort | uniq -D -w$x | wc -l`
- percent=`echo "scale=8 ; 100 * $conflicts / $total" | bc | awk '{ printf("%1.2f\n", $0); }'`
+ percent=`echo "scale=$scale ; 100 * $conflicts / $total" | bc | awk '{ printf("%1.2f\n", $0); }'`
echo " [$x]: $conflicts / $total ($percent %)"
if test "$conflicts" = "0" ; then break ; fi
done
@@ -22,10 +23,22 @@ done
## but if it is online, it must be true, of course. ;-)
##
+min_abbrev=$x
+
echo
echo "Probability of collision on your next commit:"
echo "Format: [abbrev length]: probability of collision"
-for ((; x <= ${max_abbrev} ; x++)) ; do
- percent=`echo "scale=8 ; 100 * ($total) / (16 ^ $x)" | bc | awk '{ printf("%1.4f\n", $0); }'`
+for ((x = ${min_abbrev}; x <= ${max_abbrev} ; x++)) ; do
+ percent=`echo "scale=$scale ; 100 * ($total) / (16 ^ $x)" | bc | awk '{ printf("%1.4f\n", $0); }'`
+ echo " [$x]: $percent %"
+done
+
+commits_last_year=`git rev-list --all --since="1 year ago" | wc -l`
+
+echo
+echo "Probability of collision in the next year (based on commits last year):"
+echo "Format: [abbrev length]: probability of collision"
+for ((x = ${min_abbrev}; x <= ${max_abbrev} ; x++)) ; do
+ percent=`echo "scale=$scale ; 100 * (1 - ((1 - ($total / (16 ^ $x))) ^ ${commits_last_year}))" | bc | awk '{ printf("%1.4f\n", $0); }'`
echo " [$x]: $percent %"
done
diff --git a/maint/mpich-replace.sh b/maint/mpich-replace.sh
index 2d56707..55e4e30 100755
--- a/maint/mpich-replace.sh
+++ b/maint/mpich-replace.sh
@@ -1,3 +1,3 @@
#! /bin/bash
-grep -r $1 * | cut -f1 -d':' | uniq | xargs sed -i "s/$1/$2/g"
+git grep $1 * | cut -f1 -d':' | uniq | xargs sed -i "s/\b$1\b/$2/g"
diff --git a/maint/release.pl b/maint/release.pl
index 0d2db75..ccba751 100755
--- a/maint/release.pl
+++ b/maint/release.pl
@@ -174,7 +174,13 @@ print("\n");
my $current_ver = `git show ${branch}:maint/version.m4 | grep MPICH_VERSION_m4 | \
sed -e 's/^.*\\[MPICH_VERSION_m4\\],\\[\\(.*\\)\\].*/\\1/g'`;
if ("$current_ver" ne "$version\n") {
- print("\tWARNING: Version mismatch\n\n");
+ print("\tWARNING: maint/version does not match user version\n\n");
+}
+
+my $changes_ver = `git show ${branch}:CHANGES | grep "http://git.mpich.org/mpich.git/shortlog" | \
+ sed -e '2,\$d' -e 's/.*\.\.//g'`;
+if ("$changes_ver" ne "$version\n") {
+ print("\tWARNING: CHANGES/version does not match user version\n\n");
}
if ($append_commit_id) {
diff --git a/maint/version.m4 b/maint/version.m4
index 4e1ad59..69e7adc 100644
--- a/maint/version.m4
+++ b/maint/version.m4
@@ -14,8 +14,8 @@
# changing this by playing with diversions, but then we would probably be
# playing with autotools-fire.
-m4_define([MPICH_VERSION_m4],[3.2])dnl
-m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
+m4_define([MPICH_VERSION_m4],[3.3a2])dnl
+m4_define([MPICH_RELEASE_DATE_m4],[Sun Nov 13 09:12:11 MST 2016])dnl
# For libtool ABI versioning rules see:
# http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
@@ -35,6 +35,6 @@ m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
# libmpi so version only includes functionality defined in the MPI
# standard, and does not include MPIX_ functions and C++ bindings.
-m4_define([libmpi_so_version_m4],[13:0:1])dnl
+m4_define([libmpi_so_version_m4],[0:0:0])dnl
[#] end of __file__
diff --git a/man/man1/hydra_nameserver.1 b/man/man1/hydra_nameserver.1
index 19b13cf..2f43c8a 100644
--- a/man/man1/hydra_nameserver.1
+++ b/man/man1/hydra_nameserver.1
@@ -1,4 +1,4 @@
-.TH hydra_nameserver 1 "11/9/2015" " " "HYDRA"
+.TH hydra_nameserver 1 "11/12/2016" " " "HYDRA"
.SH NAME
hydra_nameserver \- Internal executable used by Hydra
.SH DESCRIPTION
@@ -7,4 +7,4 @@ support the Hydra process manager. As such, no documentation will be
provided here.
.SH LOCATION
-/tmp/wB2927n3sW/mpich-3.2/src/pm/hydra/tools/nameserver/hydra_nameserver.txt
+/tmp/hBL2ZMkkTy/mpich-3.3a2/src/pm/hydra/tools/nameserver/hydra_nameserver.txt
diff --git a/man/man1/hydra_persist.1 b/man/man1/hydra_persist.1
index 0b1cb58..76e8ccc 100644
--- a/man/man1/hydra_persist.1
+++ b/man/man1/hydra_persist.1
@@ -1,4 +1,4 @@
-.TH hydra_persist 1 "11/9/2015" " " "HYDRA"
+.TH hydra_persist 1 "11/12/2016" " " "HYDRA"
.SH NAME
hydra_persist \- Internal executable used by Hydra
.SH DESCRIPTION
@@ -7,4 +7,4 @@ support the Hydra process manager. As such, no documentation will be
provided here.
.SH LOCATION
-/tmp/wB2927n3sW/mpich-3.2/src/pm/hydra/tools/bootstrap/persist/hydra_persist.txt
+/tmp/hBL2ZMkkTy/mpich-3.3a2/src/pm/hydra/tools/bootstrap/persist/hydra_persist.txt
diff --git a/man/man1/hydra_pmi_proxy.1 b/man/man1/hydra_pmi_proxy.1
index 2c416f1..0a10f9b 100644
--- a/man/man1/hydra_pmi_proxy.1
+++ b/man/man1/hydra_pmi_proxy.1
@@ -1,4 +1,4 @@
-.TH hydra_pmi_proxy 1 "11/9/2015" " " "HYDRA"
+.TH hydra_pmi_proxy 1 "11/12/2016" " " "HYDRA"
.SH NAME
hydra_pmi_proxy \- Internal exectuable used by Hydra
.SH DESCRIPTION
@@ -7,4 +7,4 @@ support the Hydra process manager. As such, no documentation will be
provided here.
.SH LOCATION
-/tmp/wB2927n3sW/mpich-3.2/src/pm/hydra/pm/pmiserv/hydra_pmi_proxy.txt
+/tmp/hBL2ZMkkTy/mpich-3.3a2/src/pm/hydra/pm/pmiserv/hydra_pmi_proxy.txt
diff --git a/man/man1/mpicc.1 b/man/man1/mpicc.1
index f8ff6d2..7ae0f73 100644
--- a/man/man1/mpicc.1
+++ b/man/man1/mpicc.1
@@ -1,4 +1,4 @@
-.TH mpicc 1 "11/9/2015" " " "MPI"
+.TH mpicc 1 "11/12/2016" " " "MPI"
.SH NAME
mpicc \- Compiles and links MPI programs written in C
.SH DESCRIPTION
diff --git a/man/man1/mpicxx.1 b/man/man1/mpicxx.1
index 560dc10..8c7a8db 100644
--- a/man/man1/mpicxx.1
+++ b/man/man1/mpicxx.1
@@ -1,4 +1,4 @@
-.TH mpicxx 1 "11/9/2015" " " "MPI"
+.TH mpicxx 1 "11/12/2016" " " "MPI"
.SH NAME
mpicxx \- Compiles and links MPI programs written in C++
.SH DESCRIPTION
diff --git a/man/man1/mpiexec.1 b/man/man1/mpiexec.1
index 48fd2aa..d6180cd 100644
--- a/man/man1/mpiexec.1
+++ b/man/man1/mpiexec.1
@@ -1,4 +1,4 @@
-.TH mpiexec 1 "11/9/2015" " " "MPI"
+.TH mpiexec 1 "11/12/2016" " " "MPI"
.SH NAME
mpiexec \- Run an MPI program
.SH SYNOPSIS
diff --git a/man/man1/mpif77.1 b/man/man1/mpif77.1
index f256907..2b15ca4 100644
--- a/man/man1/mpif77.1
+++ b/man/man1/mpif77.1
@@ -1,4 +1,4 @@
-.TH mpif77 1 "11/9/2015" " " "MPI"
+.TH mpif77 1 "11/12/2016" " " "MPI"
.SH NAME
mpif77 \- Compiles and links MPI programs written in Fortran 77
.SH DESCRIPTION
diff --git a/man/man1/mpifort.1 b/man/man1/mpifort.1
index a474c5e..322dee4 100644
--- a/man/man1/mpifort.1
+++ b/man/man1/mpifort.1
@@ -1,4 +1,4 @@
-.TH mpifort 1 "11/9/2015" " " "MPI"
+.TH mpifort 1 "11/12/2016" " " "MPI"
.SH NAME
mpifort \- Compiles and links MPI programs written in Fortran 90
.SH DESCRIPTION
diff --git a/man/man3/Constants.3 b/man/man3/Constants.3
new file mode 100644
index 0000000..bdef0d2
--- /dev/null
+++ b/man/man3/Constants.3
@@ -0,0 +1,1892 @@
+.TH Constants 3 "11/12/2016" " " "MPI"
+.SH NAME
+Constants \- Meaning of MPI's defined constants
+.SH DATA TYPES
+Note that the Fortran types should only be used in Fortran programs,
+and the C types should only be used in C programs. For example,
+it is in error to use
+.I MPI_INT
+for a Fortran INTEGER.
+Datatypes are of type
+.I MPI_Datatype
+in C, type
+.I INTEGER
+in Fortran,
+and
+.I Type(MPI_Datatype)
+in Fortran08
+
+.SH C DATATYPES
+MPI_CHAR - char
+.PD 0
+.TP
+.B MPI_SIGNED_CHAR
+- signed char
+.PD 1
+.PD 0
+.TP
+.B MPI_UNSIGNED_CHAR
+- unsigned char
+.PD 1
+.PD 0
+.TP
+.B MPI_BYTE
+- See standard; like unsigned char
+.PD 1
+.PD 0
+.TP
+.B MPI_WCHAR
+- wide character (wchar_t)
+.PD 1
+.PD 0
+.TP
+.B MPI_SHORT
+- short
+.PD 1
+.PD 0
+.TP
+.B MPI_UNSIGNED_SHORT
+- unsigned short
+.PD 1
+.PD 0
+.TP
+.B MPI_INT
+- int
+.PD 1
+.PD 0
+.TP
+.B MPI_UNSIGNED
+- unsigned int
+.PD 1
+.PD 0
+.TP
+.B MPI_LONG
+- long
+.PD 1
+.PD 0
+.TP
+.B MPI_UNSIGNED_LONG
+- unsigned long
+.PD 1
+.PD 0
+.TP
+.B MPI_LONG_LONG_INT
+- long long
+.PD 1
+.PD 0
+.TP
+.B MPI_LONG_LONG
+- synonyn for
+.I MPI_LONG_LONG_INT
+
+.PD 1
+.PD 0
+.TP
+.B MPI_UNSIGNED_LONG_LONG
+- unsigned long long
+.PD 1
+.PD 0
+.TP
+.B MPI_FLOAT
+- float
+.PD 1
+.PD 0
+.TP
+.B MPI_DOUBLE
+- double
+.PD 1
+.PD 0
+.TP
+.B MPI_LONG_DOUBLE
+- long double (some systems may not implement this)
+.PD 1
+.PD 0
+.TP
+.B MPI_INT8_T
+- int8_t
+.PD 1
+.PD 0
+.TP
+.B MPI_INT16_T
+- int16_t
+.PD 1
+.PD 0
+.TP
+.B MPI_INT32_T
+- int32_t
+.PD 1
+.PD 0
+.TP
+.B MPI_INT64_T
+- int64_t
+.PD 1
+.PD 0
+.TP
+.B MPI_UINT8_T
+- uint8_t
+.PD 1
+.PD 0
+.TP
+.B MPI_UINT16_T
+- uint16_t
+.PD 1
+.PD 0
+.TP
+.B MPI_UINT32_T
+- uint32_t
+.PD 1
+.PD 0
+.TP
+.B MPI_UINT64_T
+- uint64_t
+.PD 1
+.PD 0
+.TP
+.B MPI_C_BOOL
+- _Bool
+.PD 1
+.PD 0
+.TP
+.B MPI_C_FLOAT_COMPLEX
+- float _Complex
+.PD 1
+.PD 0
+.TP
+.B MPI_C_COMPLEX
+- float _Complex
+.PD 1
+.PD 0
+.TP
+.B MPI_C_DOUBLE_COMPLEX
+- double _Complex
+.PD 1
+.PD 0
+.TP
+.B MPI_C_LONG_DOUBLE_COMPLEX
+- long double _Complex
+.PD 1
+
+
+The following are datatypes for the MPI functions
+.I MPI_MAXLOC
+and
+.I MPI_MINLOC
+\&.
+
+MPI_FLOAT_INT -
+.I struct { float, int }
+
+.PD 0
+.TP
+.B MPI_LONG_INT
+-
+.I struct { long, int }
+
+.PD 1
+.PD 0
+.TP
+.B MPI_DOUBLE_INT
+-
+.I struct { double, int }
+
+.PD 1
+.PD 0
+.TP
+.B MPI_SHORT_INT
+-
+.I struct { short, int }
+
+.PD 1
+.PD 0
+.TP
+.B MPI_2INT
+-
+.I struct { int, int }
+
+.PD 1
+.PD 0
+.TP
+.B MPI_LONG_DOUBLE_INT
+-
+.I struct { long double, int }
+; this
+is an
+.B optional
+type, and may be set to
+.I MPI_DATATYPE_NULL
+
+.PD 1
+
+
+Special datatypes for C and Fortran
+MPI_PACKED - For
+.I MPI_Pack
+and
+.I MPI_Unpack
+
+.PD 0
+.TP
+.B MPI_UB
+- For
+.I MPI_Type_struct
+; an upper-bound indicator. Removed in MPI 3
+.PD 1
+.PD 0
+.TP
+.B MPI_LB
+- For
+.I MPI_Type_struct
+; a lower-bound indicator. Removed in MPI 3
+.PD 1
+
+.SH FORTRAN DATATYPES
+MPI_REAL -
+.I REAL
+
+.PD 0
+.TP
+.B MPI_INTEGER
+-
+.I INTEGER
+
+.PD 1
+.PD 0
+.TP
+.B MPI_LOGICAL
+-
+.I LOGICAL
+
+.PD 1
+.PD 0
+.TP
+.B MPI_DOUBLE_PRECISION
+-
+.I DOUBLE PRECISION
+
+.PD 1
+.PD 0
+.TP
+.B MPI_COMPLEX
+-
+.I COMPLEX
+
+.PD 1
+.PD 0
+.TP
+.B MPI_DOUBLE_COMPLEX
+-
+.I complex*16
+(or
+.I complex*32
+) where supported.
+.PD 1
+
+The following datatypes are optional
+MPI_INTEGER1 -
+.I integer*1
+if supported
+.PD 0
+.TP
+.B MPI_INTEGER2
+-
+.I integer*2
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_INTEGER4
+-
+.I integer*4
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_INTEGER8
+-
+.I integer*8
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_INTEGER16
+-
+.I integer*16
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_REAL4
+-
+.I real*4
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_REAL8
+-
+.I real*8
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_REAL16
+-
+.I real*16
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_COMPLEX8
+-
+.I complex*8
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_COMPLEX16
+-
+.I complex*16
+if supported
+.PD 1
+.PD 0
+.TP
+.B MPI_COMPLEX32
+-
+.I complex*32
+if supported
+.PD 1
+
+The following are datatypes for the MPI functions
+.I MPI_MAXLOC
+and
+.I MPI_MINLOC
+\&.
+In Fortran, these datatype always consist of
+two elements of the same Fortran type.
+MPI_2INTEGER -
+.I INTEGER,INTEGER
+
+.PD 0
+.TP
+.B MPI_2REAL
+-
+.I REAL, REAL
+
+.PD 1
+.PD 0
+.TP
+.B MPI_2DOUBLE_PRECISION
+-
+.I DOUBLE PRECISION, DOUBLE PRECISION
+
+.PD 1
+
+MPI Datatypes for MPI Types
+MPI_AINT - Datatype for an
+.I MPI_Aint
+
+.PD 0
+.TP
+.B MPI_OFFSET
+- Datatype for an
+.I MPI_Offset
+
+.PD 1
+.PD 0
+.TP
+.B MPI_COUNT
+- Datatype for an
+.I MPI_Count
+
+.PD 1
+
+.SH MPI DATATYPE COMBINER NAMES
+MPI_COMBINER_NAMED - a named predefined datatype
+.PD 0
+.TP
+.B MPI_COMBINER_DUP
+- MPI_TYPE_DUP
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_CONTIGUOUS
+- MPI_TYPE_CONTIGUOUS
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_VECTOR
+- MPI_TYPE_VECTOR
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_HVECTOR_INTEGER
+- Removed in MPI-3
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_HVECTOR
+- MPI_TYPE_CREATE_HVECTOR
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_INDEXED
+- MPI_TYPE_INDEXED
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_HINDEXED_INTEGER
+- Removed in MPI-3
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_HINDEXED
+- MPI_TYPE_CREATE_HINDEXED
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_INDEXED_BLOCK
+- MPI_TYPE_CREATE_INDEXED_BLOCK
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_STRUCT_INTEGER
+- Removed in MPI-3
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_STRUCT
+- MPI_TYPE_CREATE_STRUCT
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_SUBARRAY
+- MPI_TYPE_CREATE_SUBARRAY
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_DARRAY
+- MPI_TYPE_CREATE_DARRAY
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_F90_REAL
+- MPI_TYPE_CREATE_F90_REAL
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_F90_COMPLEX
+- MPI_TYPE_CREATE_F90_COMPLEX
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_F90_INTEGER
+- MPI_TYPE_CREATE_F90_INTEGER
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_RESIZED
+- MPI_TYPE_CREATE_RESIZED
+.PD 1
+.PD 0
+.TP
+.B MPI_COMBINER_HINDEXED_BLOCK
+- MPI_TYPE_CREATE_HINDEXED_BLOCK
+.PD 1
+
+.SH MPI DATATYPE TYPE CLASSES
+MPI Type classes used with routines to return Fortran types with defined
+precision and range
+MPI_TYPECLASS_REAL -
+.I REAL
+
+.PD 0
+.TP
+.B MPI_TYPECLASS_INTEGER
+-
+.I INTEGER
+
+.PD 1
+.PD 0
+.TP
+.B MPI_TYPECLASS_COMPLEX
+-
+.I COMPLEX
+
+.PD 1
+
+.SH MPI DARRAY AND SUBARRAY VALUES
+These values are used to create a datatype with the
+.I DARRAY
+and
+.I SUBARRAY
+constructors.
+MPI_ORDER_C - Row-major order (as used by C)
+.PD 0
+.TP
+.B MPI_ORDER_FORTRAN
+- Column-major order (as used by Fortran)
+.PD 1
+.PD 0
+.TP
+.B MPI_DISTRIBUTE_BLOCK
+- Block distribution
+.PD 1
+.PD 0
+.TP
+.B MPI_DISTRIBUTE_CYCLIC
+- Cyclic distribution
+.PD 1
+.PD 0
+.TP
+.B MPI_DISTRIBUTE_NONE
+- This dimension is not distributed
+.PD 1
+.PD 0
+.TP
+.B MPI_DISTRIBUTE_DFLT_DARG
+- Use the default distribution
+.PD 1
+
+.SH COMMUNICATORS
+Communicators are of type
+.I MPI_Comm
+in C,
+.I INTEGER
+in Fortran, and
+.I Type(MPI_Comm)
+in Fortran08
+MPI_COMM_WORLD - Contains all of the processes
+.PD 0
+.TP
+.B MPI_COMM_SELF
+- Contains only the calling process
+.PD 1
+
+.SH KIND OF COMMUNICATOR FOR 'MPI_COMM_SPLIT_TYPE'
+MPI_COMM_TYPE_SHARED - All processes that can share memory are grouped into
+the same communicator.
+
+.SH GROUPS
+Groups are of type
+.I MPI_Group
+in C,
+.I INTEGER
+in Fortran,
+and
+.I Type(MPI_Group)
+in Fortran08
+
+MPI_GROUP_EMPTY - A group containing no members.
+
+.SH RESULTS OF THE COMPARE OPERATIONS ON GROUPS AND COMMUNICATORS
+MPI_IDENT - Identical
+.PD 0
+.TP
+.B MPI_CONGRUENT
+- (only for
+.I MPI_COMM_COMPARE
+) The groups are identical
+.PD 1
+.PD 0
+.TP
+.B MPI_SIMILAR
+- Same members, but in a different order
+.PD 1
+.PD 0
+.TP
+.B MPI_UNEQUAL
+- Different
+.PD 1
+
+
+.SH COLLECTIVE OPERATIONS
+The collective combination operations (e.g.,
+.I MPI_REDUCE
+,
+.I MPI_ALLREDUCE
+,
+.I MPI_REDUCE_SCATTER
+, and
+.I MPI_SCAN
+) take a combination operation.
+This operation is of type
+.I MPI_Op
+in C and of type
+.I INTEGER
+in Fortran.
+The predefined operations are
+
+MPI_MAX - return the maximum
+.PD 0
+.TP
+.B MPI_MIN
+- return the minumum
+.PD 1
+.PD 0
+.TP
+.B MPI_SUM
+- return the sum
+.PD 1
+.PD 0
+.TP
+.B MPI_PROD
+- return the product
+.PD 1
+.PD 0
+.TP
+.B MPI_LAND
+- return the logical and
+.PD 1
+.PD 0
+.TP
+.B MPI_BAND
+- return the bitwise and
+.PD 1
+.PD 0
+.TP
+.B MPI_LOR
+- return the logical or
+.PD 1
+.PD 0
+.TP
+.B MPI_BOR
+- return the bitwise of
+.PD 1
+.PD 0
+.TP
+.B MPI_LXOR
+- return the logical exclusive or
+.PD 1
+.PD 0
+.TP
+.B MPI_BXOR
+- return the bitwise exclusive or
+.PD 1
+.PD 0
+.TP
+.B MPI_MINLOC
+- return the minimum and the location (actually, the value of
+the second element of the structure where the minimum of
+the first is found)
+.PD 1
+.PD 0
+.TP
+.B MPI_MAXLOC
+- return the maximum and the location
+.PD 1
+.PD 0
+.TP
+.B MPI_REPLACE
+- replace b with a
+.PD 1
+.PD 0
+.TP
+.B MPI_NO_OP
+- perform no operation
+.PD 1
+
+.SH NOTES ON COLLECTIVE OPERATIONS
+
+The reduction functions (
+.I MPI_Op
+) do not return an error value. As a result,
+if the functions detect an error, all they can do is either call
+.I MPI_Abort
+or silently skip the problem. Thus, if you change the error handler from
+.I MPI_ERRORS_ARE_FATAL
+to something else, for example,
+.I MPI_ERRORS_RETURN
+,
+then no error may be indicated.
+
+The reason for this is the performance problems in ensuring that
+all collective routines return the same error value.
+
+Note that not all datatypes are valid for these functions. For example,
+.I MPI_COMPLEX
+is not valid for
+.I MPI_MAX
+and
+.I MPI_MIN
+\&.
+In addition, the MPI
+1.1 standard did not include the C types
+.I MPI_CHAR
+and
+.I MPI_UNSIGNED_CHAR
+among the lists of arithmetic types for operations like
+.I MPI_SUM
+\&.
+However,
+since the C type
+.I char
+is an integer type (like
+.I short
+), it should have been
+included. The MPI Forum will probably include
+.I char
+and
+.I unsigned char
+as a clarification to MPI 1.1; until then, users are advised that MPI
+implementations may not accept
+.I MPI_CHAR
+and
+.I MPI_UNSIGNED_CHAR
+as valid
+datatypes for
+.I MPI_SUM
+,
+.I MPI_PROD
+, etc. MPICH does allow these datatypes.
+
+.SH PERMANENT KEY VALUES
+These are the same in C and Fortran
+
+MPI_TAG_UB - Largest tag value
+.PD 0
+.TP
+.B MPI_HOST
+- Rank of process that is host, if any
+.PD 1
+.PD 0
+.TP
+.B MPI_IO
+- Rank of process that can do I/O
+.PD 1
+.PD 0
+.TP
+.B MPI_WTIME_IS_GLOBAL
+- Has value 1 if
+.I MPI_WTIME
+is globally synchronized.
+.PD 1
+.PD 0
+.TP
+.B MPI_UNIVERSE_SIZE
+- Number of available processes. See the standard for
+a description of limitations on this value
+.PD 1
+.PD 0
+.TP
+.B MPI_LASTUSEDCODE
+- Last used MPI error code (check - code or class?)
+.PD 1
+.PD 0
+.TP
+.B MPI_APPNUM
+- Application number, starting from 0. See the standard for
+.I MPI_COMM_SPAWN_MULTIPLE
+and
+.I mpiexec
+for details
+.PD 1
+
+.SH NULL OBJECTS
+MPI_COMM_NULL - Null communicator
+.PD 0
+.TP
+.B MPI_OP_NULL
+- Null operation
+.PD 1
+.PD 0
+.TP
+.B MPI_GROUP_NULL
+- Null group
+.PD 1
+.PD 0
+.TP
+.B MPI_DATATYPE_NULL
+- Null datatype
+.PD 1
+.PD 0
+.TP
+.B MPI_REQUEST_NULL
+- Null request
+.PD 1
+.PD 0
+.TP
+.B MPI_ERRHANDLER_NULL
+- Null error handler
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_NULL
+- Null window handle
+.PD 1
+.PD 0
+.TP
+.B MPI_FILE_NULL
+- Null file handle
+.PD 1
+.PD 0
+.TP
+.B MPI_INFO_NULL
+- Null info handle
+.PD 1
+.PD 0
+.TP
+.B MPI_MESSAGE_NULL
+- Null message handle
+.PD 1
+.PD 0
+.TP
+.B MPI_ARGV_NULL
+- Empty ARGV value for spawn commands
+.PD 1
+.PD 0
+.TP
+.B MPI_ARGVS_NULL
+- Empty ARGV array for spawn-multiple command
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ENUM_NULL
+- Null MPI_T enum
+.PD 1
+.PD 0
+.TP
+.B MPI_T_CVAR_HANDLE_NULL
+- Null MPI_T control variable handle
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_HANDLE_NULL
+- Null MPI_T performance variable handle
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_SESSION_NULL
+- Null MPI_T performance variable session handle
+.PD 1
+
+.SH PREDEFINED CONSTANTS
+MPI_MAX_PROCESSOR_NAME - Maximum length of name returned by
+.I MPI_GET_PROCESSOR_NAME
+
+.PD 0
+.TP
+.B MPI_MAX_ERROR_STRING
+- Maximum length of string return by
+.I MPI_ERROR_STRING
+
+.PD 1
+.PD 0
+.TP
+.B MPI_MAX_LIBRARY_VERSION_STRING
+- Maximum length of string returned by
+.I MPI_GET_LIBRARY_VERSION_STRING
+???
+.PD 1
+.PD 0
+.TP
+.B MPI_MAX_PORT_NAME
+- Maximum length of a port
+.PD 1
+.PD 0
+.TP
+.B MPI_MAX_OBJECT_NAME
+- Maximum length of an object (?)
+.PD 1
+.PD 0
+.TP
+.B MPI_MAX_INFO_KEY
+- Maximum length of an info key
+.PD 1
+.PD 0
+.TP
+.B MPI_MAX_INFO_VAL
+- Maximum length of an info value
+.PD 1
+.PD 0
+.TP
+.B MPI_UNDEFINED
+- Used by many routines to indicated
+undefined or unknown integer value
+.PD 1
+.PD 0
+.TP
+.B MPI_UNDEFINED_RANK
+- Unknown rank
+.PD 1
+.PD 0
+.TP
+.B MPI_KEYVAL_INVALID
+- Special keyval that may be used to detect
+uninitialized keyvals.
+.PD 1
+.PD 0
+.TP
+.B MPI_BSEND_OVERHEAD
+- Add this to the size of a
+.I MPI_BSEND
+buffer for each outstanding message
+.PD 1
+.PD 0
+.TP
+.B MPI_PROC_NULL
+- This rank may be used to send or receive from no-one.
+.PD 1
+.PD 0
+.TP
+.B MPI_ANY_SOURCE
+- In a receive, accept a message from anyone.
+.PD 1
+.PD 0
+.TP
+.B MPI_ANY_TAG
+- In a receive, accept a message with any tag value.
+.PD 1
+.PD 0
+.TP
+.B MPI_BOTTOM
+- May be used to indicate the bottom of the address space
+.PD 1
+.PD 0
+.TP
+.B MPI_IN_PLACE
+- Special location for buffer in some
+collective communication routines
+.PD 1
+.PD 0
+.TP
+.B MPI_VERSION
+- Numeric value of MPI version (e.g., 3)
+.PD 1
+.PD 0
+.TP
+.B MPI_SUBVERSION
+- Numeric value of MPI subversion (e.g., 1)
+.PD 1
+
+.SH TOPOLOGY TYPES
+MPI_CART - Cartesian grid
+.PD 0
+.TP
+.B MPI_GRAPH
+- General graph
+.PD 1
+.PD 0
+.TP
+.B MPI_DIST_GRAPH
+- General distributed graph
+.PD 1
+
+.SH SPECIAL VALUES FOR DISTRIBUTED GRAPH
+MPI_UNWEIGHTED - Indicates that the edges are unweighted
+.PD 0
+.TP
+.B MPI_WEIGHTS_EMPTY
+- Special address that indicates no array of weights
+information
+.PD 1
+
+.SH FILE MODES
+MPI_MODE_RDONLY - Read only
+.PD 0
+.TP
+.B MPI_MODE_RDWR
+- Read and write
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_WRONLY
+- Write only
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_CREATE
+- Create the file if it does not exist
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_EXCL
+- It is an error if creating a file that already
+exists
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_DELETE_ON_CLOSE
+- Delete the file on close
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_UNIQUE_OPEN
+- The file will not be concurrently opened elsewhere
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_APPEND
+- The initial position of all file pointers is at
+the end of the file
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_SEQUENTIAL
+- File will only be accessed sequentially
+.PD 1
+
+.SH FILE DISPLACEMENT
+MPI_DISPLACEMENT_CURRENT - Use with files opened with mode
+.I MPI_MODE_SEQUENTIAL
+in calls to
+.I MPI_FILE_SET_VIEW
+
+
+.SH FILE POSITIONING
+MPI_SEEK_SET - Set the pointer to
+.I offset
+
+.PD 0
+.TP
+.B MPI_SEEK_CUR
+- Set the pointer to the current position plus
+.I offset
+
+.PD 1
+.PD 0
+.TP
+.B MPI_SEEK_END
+- Set the pointer to the end of the file plus
+.I offset
+
+.PD 1
+
+.SH WINDOW ATTRIBUTES
+MPI_WIN_BASE - window base address.
+.PD 0
+.TP
+.B MPI_WIN_SIZE
+- window size, in bytes
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_DISP_UNIT
+- displacement unit associated with the window
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_CREATE_FLAVOR
+- how the window was created
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_MODEL
+- memory model for window
+.PD 1
+
+.SH WINDOW FLAVORS
+MPI_WIN_FLAVOR_CREATE - Window was created with MPI_WIN_CREATE.
+.PD 0
+.TP
+.B MPI_WIN_FLAVOR_ALLOCATE
+- Window was created with MPI_WIN_ALLOCATE.
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_FLAVOR_DYNAMIC
+- Window was created with MPI_WIN_CREATE_DYNAMIC.
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_FLAVOR_SHARED
+- Window was created with MPI_WIN_ALLOCATE_SHARED.
+.PD 1
+
+.SH WINDOW MEMORY MODEL
+MPI_WIN_SEPARATE - Separate public and private copies of window memory
+.PD 0
+.TP
+.B MPI_WIN_UNIFIED
+- The publich and private copies are identical (by which
+we mean that updates are eventually observed without additional RMA operations)
+.PD 1
+
+.SH WINDOW LOCK TYPES
+MPI_LOCK_EXCLUSIVE - Only one process at a time will execute accesses
+within the lock
+.PD 0
+.TP
+.B MPI_LOCK_SHARED
+- Not exclusive; multiple processes may execute accesses
+within the lock
+.PD 1
+
+.SH WINDOW ASSERTIONS
+See section 11.5 in MPI 3.1 for a detailed description of each of these
+assertion values.
+MPI_MODE_NOCHECK - The matching calls to MPI_WIN_POST or MPI_WIN_START
+have already completed, or no process holds or will attempt to acquire, a
+conflicting lock.
+.PD 0
+.TP
+.B MPI_MODE_NOSTORE
+- The local window has not been updated by stores
+since the last synchronization
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_NOPUT
+- The local window will not be updated by put or
+accumulate until the next synchronization
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_NOPRECEDE
+- The fence does not complete any locally issued RMA
+calls
+.PD 1
+.PD 0
+.TP
+.B MPI_MODE_NOSUCCEED
+- The fence does not start any locally issued RMA calls
+.PD 1
+
+.SH PREDEFINED INFO OBJECT
+MPI_INFO_ENV - Contains the execution environment
+
+.SH MPI STATUS
+The
+.I MPI_Status
+datatype is a structure in C. The three elements for use
+by programmers are
+MPI_SOURCE - Who sent the message
+.PD 0
+.TP
+.B MPI_TAG
+- What tag the message was sent with
+.PD 1
+.PD 0
+.TP
+.B MPI_ERROR
+- Any error return (only when the error returned by the routine
+has error class
+.I MPI_ERR_IN_STATUS
+)
+.PD 1
+
+MPI_STATUS_IGNORE - Ignore a single
+.I MPI_Status
+argument
+.PD 0
+.TP
+.B MPI_STATUSES_IGNORE
+- Ignore an array of
+.I MPI_Status
+
+.PD 1
+
+.SH SPECIAL VALUE FOR ERROR CODES ARRAY
+MPI_ERRCODES_IGNORE - Ignore an array of error codes
+
+.SH MPI_T CONSTANTS
+MPI_T_VERBOSITY_USER_BASIC - Basic information of interest to users
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_USER_DETAIL
+- Detailed information of interest to users
+.PD 1
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_USER_ALL
+- All remaining information of interest to users
+.PD 1
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_TUNER_BASIC
+- Basic information required for tuning
+.PD 1
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_TUNER_DETAIL
+- Detailed information required for tuning
+.PD 1
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_TUNER_ALL
+- All remaining information required for tuning
+.PD 1
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_MPIDEV_BASIC
+- Basic information for MPI implementors
+.PD 1
+
+
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_MPIDEV_DETAIL
+- Detailed information for MPI implementors
+.PD 1
+.PD 0
+.TP
+.B MPI_T_VERBOSITY_MPIDEV_ALL
+- All remaining information for MPI implementors
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_NO_OBJECT
+- Applies globally to entire MPI process
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_COMM
+- MPI communicators
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_DATATYPE
+- MPI datatypes
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_ERRHANDLER
+- MPI error handlers
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_FILE
+- MPI file handles
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_GROUP
+- MPI groups
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_OP
+- MPI reduction operators
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_REQUEST
+- MPI requests
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_WIN
+- MPI windows for one-sided communication
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_MESSAGE
+- MPI message object
+.PD 1
+.PD 0
+.TP
+.B MPI_T_BIND_MPI_INFO
+- MPI info object
+.PD 1
+.PD 0
+.TP
+.B MPI_T_SCOPE_CONSTANT
+- read-only, value is constant
+.PD 1
+.PD 0
+.TP
+.B MPI_T_SCOPE_READONLY
+- read-only, cannot be written, but can
+change
+.PD 1
+.PD 0
+.TP
+.B MPI_T_SCOPE_LOCAL
+- may be writeable, writing is a local
+operation
+.PD 1
+.PD 0
+.TP
+.B MPI_T_SCOPE_GROUP
+- may be writeable, must be done to a
+group of processes, all processes in a group must be set to consistent values
+.PD 1
+.PD 0
+.TP
+.B MPI_T_SCOPE_GROUP_EQ
+- may be writeable, must be done to a
+group of processes, all processes in a group must be set to the same value
+.PD 1
+.PD 0
+.TP
+.B MPI_T_SCOPE_ALL
+- may be writeable, must be done to all
+processes, all connected processes must be set to consistent values
+.PD 1
+.PD 0
+.TP
+.B MPI_T_SCOPE_ALL_EQ
+- may be writeable, must be done to all
+processes, all connected processes must be set to the same value
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_STATE
+- set of discrete states (MPI_INT)
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_LEVEL
+- utilization level of a resource
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_SIZE
+- size of a resource
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_PERCENTAGE
+- percentage utilization of a resource
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_HIGHWATERMARK
+- high watermark of a resource
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_LOWWATERMARK
+- low watermark of a resource
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_COUNTER
+- number of occurances of an event
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_AGGREGATE
+- aggregate value over an event (e.g.,
+sum of all memory allocations)
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_TIMER
+- aggretate time spent executing event
+.PD 1
+.PD 0
+.TP
+.B MPI_T_PVAR_CLASS_GENERIC
+- used for any other time of performance
+variable
+.PD 1
+
+.SH THREAD LEVELS
+MPI_THREAD_SINGLE - Only one thread executes
+.PD 0
+.TP
+.B MPI_THREAD_FUNNELED
+- Only the main thread makes MPI calls
+.PD 1
+.PD 0
+.TP
+.B MPI_THREAD_SERIALIZED
+- Only one thread at a time makes MPI calls
+.PD 1
+.PD 0
+.TP
+.B MPI_THREAD_MULTIPLE
+- Multiple threads may make MPI calls
+.PD 1
+
+.SH SPECIAL MPI TYPES AND FUNCTIONS
+
+MPI_Aint - C type that holds any valid address.
+.PD 0
+.TP
+.B MPI_Count
+- C type that holds any valid count.
+.PD 1
+.PD 0
+.TP
+.B MPI_Offset
+- C type that holds any valid file offset.
+.PD 1
+.PD 0
+.TP
+.B MPI_Handler_function
+- C function for handling errors (see
+.I MPI_Errhandler_create
+) .
+.PD 1
+.PD 0
+.TP
+.B MPI_User_function
+- C function to combine values (see collective operations
+and
+.I MPI_Op_create
+)
+.PD 1
+.PD 0
+.TP
+.B MPI_Copy_function
+- Function to copy attributes (see
+.I MPI_Keyval_create
+)
+.PD 1
+.PD 0
+.TP
+.B MPI_Delete_function
+- Function to delete attributes (see
+.I MPI_Keyval_create
+)
+.PD 1
+.PD 0
+.TP
+.B MPI_ERRORS_ARE_FATAL
+- Error handler that forces exit on error
+.PD 1
+.PD 0
+.TP
+.B MPI_ERRORS_RETURN
+- Error handler that returns error codes (as value of
+MPI routine in C and through last argument in Fortran)
+.PD 1
+
+.SH MPI ATTRIBUTE DEFAULT FUNCTIONS
+MPI_COMM_NULL_COPY_FN - Predefined attribute copy function for communicators
+.PD 0
+.TP
+.B MPI_COMM_NULL_DELETE_FN
+- Predefined attribute delete function for communicators
+.PD 1
+.PD 0
+.TP
+.B MPI_COMM_DUP_FN
+- Predefined attribute duplicate function for communicators
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_NULL_COPY_FN
+- Predefined attribute copy function for windows
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_NULL_DELETE_FN
+- Predefined attribute delete function for windows
+.PD 1
+.PD 0
+.TP
+.B MPI_WIN_DUP_FN
+- Predefined attribute duplicate function for windows
+.PD 1
+.PD 0
+.TP
+.B MPI_TYPE_NULL_COPY_FN
+- Predefined attribute copy function for datatypes
+.PD 1
+.PD 0
+.TP
+.B MPI_TYPE_NULL_DELETE_FN
+- Predefined attribute delete function for datatypes
+.PD 1
+.PD 0
+.TP
+.B MPI_TYPE_DUP_FN
+- Predefined attribute duplicate function for datatypes
+.PD 1
+
+.SH MPI-1 ATTRIBUTE DEFAULT FUNCTIONS
+MPI_NULL_COPY_FN - Predefined copy function
+.PD 0
+.TP
+.B MPI_NULL_DELETE_FN
+- Predefined delete function
+.PD 1
+.PD 0
+.TP
+.B MPI_DUP_FN
+- Predefined duplication function
+.PD 1
+
+.SH MPI ERROR CLASSES
+MPI_SUCCESS - Successful return code
+.PD 0
+.TP
+.B MPI_ERR_BUFFER
+- Invalid buffer pointer
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_COUNT
+- Invalid count argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_TYPE
+- Invalid datatype argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_TAG
+- Invalid tag argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_COMM
+- Invalid communicator
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_RANK
+- Invalid rank
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_ROOT
+- Invalid root
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_GROUP
+- Null group passed to function
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_OP
+- Invalid operation
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_TOPOLOGY
+- Invalid topology
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_DIMS
+- Illegal dimension argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_ARG
+- Invalid argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_UNKNOWN
+- Unknown error
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_TRUNCATE
+- Message truncated on receive
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_OTHER
+- Other error; use Error_string
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_INTERN
+- Internal error code
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_IN_STATUS
+- Look in status for error value
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_PENDING
+- Pending request
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_REQUEST
+- Invalid mpi_request handle
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_ACCESS
+- Permission denied
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_AMODE
+- Error related to the amode passed to
+.I MPI_FILE_OPEN
+
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_BAD_FILE
+- Invalid file name (e.g., path name too long)
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_CONVERSION
+- An error occurred in a user supplied data
+conversion function
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_DUP_DATAREP
+- Conversion functions could not be registered
+because a data representation identifier that was already defined was passed
+to
+.I MPI_REGISTER_DATAREP
+
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_FILE_EXISTS
+- File exists
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_FILE_IN_USE
+- File operation could not be completed, as
+the file is currently open by some process
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_FILE
+- Invalid file handle
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_IO
+- Other I/O error
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_NO_SPACE
+- Not enough space
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_NO_SUCH_FILE
+- File does not exist
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_READ_ONLY
+- Read-only file or file system
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_UNSUPPORTED_DATAREP
+- Unsupported datarep passed to
+.I MPI_FILE_SET_VIEW
+
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_INFO
+- Invalid info argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_INFO_KEY
+- Key longer than MPI_MAX_INFO_KEY
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_INFO_VALUE
+- Value longer than MPI_MAX_INFO_VAL
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_INFO_NOKEY
+- Invalid key passed to MPI_INFO_DELETE
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_NAME
+- Invalid service name passed to MPI_LOOKUP_NAME
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_NO_MEM
+- Alloc_mem could not allocate memory
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_NOT_SAME
+- Collective argument not identical on all
+processes, or collective routines called in a different order by different
+processes
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_PORT
+- Invalid port name passed to MPI_COMM_CONNECT
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_QUOTA
+- Quota exceeded
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_SERVICE
+- Invalid service name passed to MPI_UNPUBLISH_NAME
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_SPAWN
+- Error in spawning processes
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_UNSUPPORTED_OPERATION
+- Unsupported operation, such as seeking on
+a file which supports sequential access only
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_WIN
+- Invalid win argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_BASE
+- Invalid base passed to MPI_FREE_MEM
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_LOCKTYPE
+- Invalid locktype argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_KEYVAL
+- Erroneous attribute key
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_RMA_CONFLICT
+- Conflicting accesses to window
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_RMA_SYNC
+- Wrong synchronization of RMA calls
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_SIZE
+- Invalid size argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_DISP
+- Invalid disp argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_ASSERT
+- Invalid assert argument
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_RMA_RANGE
+- Target memory is not part of the window (in
+the case of a window created with MPI_WIN_CREATE_DYNAMIC, target memory is
+not attached)
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_RMA_ATTACH
+- Memory cannot be attached (e.g., because of
+resource exhaustion)
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_RMA_SHARED
+- Memory cannot be shared (e.g., some process in
+the group of the specified communicator cannot expose shared memory)
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_RMA_FLAVOR
+- Passed window has the wrong flavor for the
+called function
+.PD 1
+.PD 0
+.TP
+.B MPI_ERR_LASTCODE
+- Last error code -- always at end
+.PD 1
+
+.SH ERROR CODES FOR MPI_T
+
+MPI_T_ERR_MEMORY - Out of memory
+.PD 0
+.TP
+.B MPI_T_ERR_NOT_INITIALIZED
+- Interface not initialized
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_CANNOT_INIT
+- Interface not in the state to be initialized
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_INVALID_INDEX
+- The index is invalid or has been deleted
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_INVALID_ITEM
+- Item index queried is out of range
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_INVALID_HANDLE
+- The handle is invalid
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_OUT_OF_HANDLES
+- No more handles available
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_OUT_OF_SESSIONS
+- No more sessions available
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_INVALID_SESSION
+- Session argument is not valid
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_CVAR_SET_NOT_NOW
+- Cvar can't be set at this moment
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_CVAR_SET_NEVER
+- Cvar can't be set until end of execution
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_PVAR_NO_STARTSTOP
+- Pvar can't be started or stopped
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_PVAR_NO_WRITE
+- Pvar can't be written or reset
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_PVAR_NO_ATOMIC
+- Pvar can't be R/W atomically
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_INVALID_NAME
+- Name doesn't match
+.PD 1
+.PD 0
+.TP
+.B MPI_T_ERR_INVALID
+- Invalid use of the interface or bad parameter
+values(s)
+.PD 1
+
diff --git a/man/man3/MPIX_Comm_agree.3 b/man/man3/MPIX_Comm_agree.3
index 5ca24e8..737f695 100644
--- a/man/man3/MPIX_Comm_agree.3
+++ b/man/man3/MPIX_Comm_agree.3
@@ -1,4 +1,4 @@
-.TH MPIX_Comm_agree 3 "11/9/2015" " " "MPI"
+.TH MPIX_Comm_agree 3 "11/12/2016" " " "MPI"
.SH NAME
MPIX_Comm_agree \- Performs agreement operation on comm
.SH SYNOPSIS
@@ -19,6 +19,14 @@ int MPIX_Comm_agree(MPI_Comm comm, int *flag)
- new communicator (handle)
.PD 1
+.SH THREAD AND INTERRUPT SAFETY
+
+This routine is thread-safe. This means that this routine may be
+safely used by multiple threads without the need for any user-provided
+thread locks. However, the routine is not interrupt safe. Typically,
+this is due to the use of memory allocation routines such as
+.I malloc
+or other non-MPICH runtime routines that are themselves not interrupt-safe.
.SH NOTES FOR FORTRAN
All MPI routines in Fortran (except for
diff --git a/man/man3/MPIX_Comm_failure_ack.3 b/man/man3/MPIX_Comm_failure_ack.3
index d428462..0359ff7 100644
--- a/man/man3/MPIX_Comm_failure_ack.3
+++ b/man/man3/MPIX_Comm_failure_ack.3
@@ -1,4 +1,4 @@
-.TH MPIX_Comm_failure_ack 3 "11/9/2015" " " "MPI"
+.TH MPIX_Comm_failure_ack 3 "11/12/2016" " " "MPI"
.SH NAME
MPIX_Comm_failure_ack \- Acknowledge the current group of failed processes
.SH SYNOPSIS
diff --git a/man/man3/MPIX_Comm_failure_get_acked.3 b/man/man3/MPIX_Comm_failure_get_acked.3
index a35b770..4381ffe 100644
--- a/man/man3/MPIX_Comm_failure_get_acked.3
+++ b/man/man3/MPIX_Comm_failure_get_acked.3
@@ -1,4 +1,4 @@
-.TH MPIX_Comm_failure_get_acked 3 "11/9/2015" " " "MPI"
+.TH MPIX_Comm_failure_get_acked 3 "11/12/2016" " " "MPI"
.SH NAME
MPIX_Comm_failure_get_acked \- Get the group of acknowledged failures.
.SH SYNOPSIS
diff --git a/man/man3/MPIX_Comm_revoke.3 b/man/man3/MPIX_Comm_revoke.3
index 9ea925a..228a4b6 100644
--- a/man/man3/MPIX_Comm_revoke.3
+++ b/man/man3/MPIX_Comm_revoke.3
@@ -1,4 +1,4 @@
-.TH MPIX_Comm_revoke 3 "11/9/2015" " " "MPI"
+.TH MPIX_Comm_revoke 3 "11/12/2016" " " "MPI"
.SH NAME
MPIX_Comm_revoke \- Prevent a communicator from being used in the future
.SH SYNOPSIS
@@ -72,3 +72,8 @@ guarentee that an MPI program can continue past
an error; however, MPI implementations will attempt to continue whenever
possible.
+.PD 0
+.TP
+.B MPI_SUCCESS
+- No error; MPI routine completed successfully.
+.PD 1
diff --git a/man/man3/MPIX_Comm_shrink.3 b/man/man3/MPIX_Comm_shrink.3
index 04a7c09..f7f657b 100644
--- a/man/man3/MPIX_Comm_shrink.3
+++ b/man/man3/MPIX_Comm_shrink.3
@@ -1,4 +1,4 @@
-.TH MPIX_Comm_shrink 3 "11/9/2015" " " "MPI"
+.TH MPIX_Comm_shrink 3 "11/12/2016" " " "MPI"
.SH NAME
MPIX_Comm_shrink \- Creates a new communitor from an existing communicator while excluding failed processes
.SH SYNOPSIS
@@ -19,6 +19,14 @@ int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm)
- new communicator (handle)
.PD 1
+.SH THREAD AND INTERRUPT SAFETY
+
+This routine is thread-safe. This means that this routine may be
+safely used by multiple threads without the need for any user-provided
+thread locks. However, the routine is not interrupt safe. Typically,
+this is due to the use of memory allocation routines such as
+.I malloc
+or other non-MPICH runtime routines that are themselves not interrupt-safe.
.SH NOTES FOR FORTRAN
All MPI routines in Fortran (except for
diff --git a/man/man3/MPI_Abort.3 b/man/man3/MPI_Abort.3
index bad5b43..fb62c79 100644
--- a/man/man3/MPI_Abort.3
+++ b/man/man3/MPI_Abort.3
@@ -1,4 +1,4 @@
-.TH MPI_Abort 3 "11/9/2015" " " "MPI"
+.TH MPI_Abort 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Abort \- Terminates MPI execution environment
.SH SYNOPSIS
diff --git a/man/man3/MPI_Accumulate.3 b/man/man3/MPI_Accumulate.3
index 513b6a0..0220ba7 100644
--- a/man/man3/MPI_Accumulate.3
+++ b/man/man3/MPI_Accumulate.3
@@ -1,4 +1,4 @@
-.TH MPI_Accumulate 3 "11/9/2015" " " "MPI"
+.TH MPI_Accumulate 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Accumulate \- Accumulate data into the target process using remote memory access
.SH SYNOPSIS
diff --git a/man/man3/MPI_Add_error_class.3 b/man/man3/MPI_Add_error_class.3
index 0dc6f27..2393ea0 100644
--- a/man/man3/MPI_Add_error_class.3
+++ b/man/man3/MPI_Add_error_class.3
@@ -1,4 +1,4 @@
-.TH MPI_Add_error_class 3 "11/9/2015" " " "MPI"
+.TH MPI_Add_error_class 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Add_error_class \- Add an MPI error class to the known classes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Add_error_code.3 b/man/man3/MPI_Add_error_code.3
index 9eefab8..6373367 100644
--- a/man/man3/MPI_Add_error_code.3
+++ b/man/man3/MPI_Add_error_code.3
@@ -1,4 +1,4 @@
-.TH MPI_Add_error_code 3 "11/9/2015" " " "MPI"
+.TH MPI_Add_error_code 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Add_error_code \- Add an MPI error code to an MPI error class
.SH SYNOPSIS
diff --git a/man/man3/MPI_Add_error_string.3 b/man/man3/MPI_Add_error_string.3
index 0b6982e..f40b53c 100644
--- a/man/man3/MPI_Add_error_string.3
+++ b/man/man3/MPI_Add_error_string.3
@@ -1,4 +1,4 @@
-.TH MPI_Add_error_string 3 "11/9/2015" " " "MPI"
+.TH MPI_Add_error_string 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Add_error_string \- Associates an error string with an MPI error code or class
.SH SYNOPSIS
diff --git a/man/man3/MPI_Address.3 b/man/man3/MPI_Address.3
index 3bc59ba..5e1b792 100644
--- a/man/man3/MPI_Address.3
+++ b/man/man3/MPI_Address.3
@@ -1,9 +1,9 @@
-.TH MPI_Address 3 "11/9/2015" " " "MPI"
+.TH MPI_Address 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Address \- Gets the address of a location in memory
.SH SYNOPSIS
.nf
-int MPI_Address(const void *location, MPI_Aint *address)
+int MPI_Address(void *location, MPI_Aint *address)
.fi
.SH INPUT PARAMETERS
.PD 0
diff --git a/man/man3/MPI_Aint_add.3 b/man/man3/MPI_Aint_add.3
index 7d1f9f8..f9fa312 100644
--- a/man/man3/MPI_Aint_add.3
+++ b/man/man3/MPI_Aint_add.3
@@ -1,4 +1,4 @@
-.TH MPI_Aint_add 3 "11/9/2015" " " "MPI"
+.TH MPI_Aint_add 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Aint_add \- Returns the sum of base and disp
.SH SYNOPSIS
@@ -27,8 +27,11 @@ to MPI_GET_ADDRESS and disp represents a signed integer displacement. The result
address is valid only at the process that generated base, and it must correspond
to a location in the same object referenced by base. The addition is performed in
a manner that results in the correct MPI_Aint representation of the output address,
-.SH AS IF THE PROCESS THAT ORIGINALLY PRODUCED BASE HAD CALLED
+as if the process that originally produced base had called:
+.nf
MPI_Get_address((char *) base + disp, &result)
+.fi
+
.SH SEE ALSO
MPI_Aint_diff
diff --git a/man/man3/MPI_Aint_diff.3 b/man/man3/MPI_Aint_diff.3
index 234459a..9961a01 100644
--- a/man/man3/MPI_Aint_diff.3
+++ b/man/man3/MPI_Aint_diff.3
@@ -1,4 +1,4 @@
-.TH MPI_Aint_diff 3 "11/9/2015" " " "MPI"
+.TH MPI_Aint_diff 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Aint_diff \- Returns the difference between addr1 and addr2
.SH SYNOPSIS
@@ -28,7 +28,10 @@ process that generated addr1 and addr2, and addr1 and addr2 must correspond to
locations in the same object in the same process. The difference is calculated
in a manner that results the signed difference from addr1 to addr2, as if the
process that originally produced the addresses had called
+.nf
(char *) addr1 - (char *) addr2
+.fi
+
on the addresses initially passed to MPI_GET_ADDRESS.
.SH SEE ALSO
diff --git a/man/man3/MPI_Allgather.3 b/man/man3/MPI_Allgather.3
index dd3de17..b1e536d 100644
--- a/man/man3/MPI_Allgather.3
+++ b/man/man3/MPI_Allgather.3
@@ -1,4 +1,4 @@
-.TH MPI_Allgather 3 "11/9/2015" " " "MPI"
+.TH MPI_Allgather 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Allgather \- Gathers data from all tasks and distribute the combined data to all tasks
.SH SYNOPSIS
diff --git a/man/man3/MPI_Allgatherv.3 b/man/man3/MPI_Allgatherv.3
index cb87b92..5504cc6 100644
--- a/man/man3/MPI_Allgatherv.3
+++ b/man/man3/MPI_Allgatherv.3
@@ -1,4 +1,4 @@
-.TH MPI_Allgatherv 3 "11/9/2015" " " "MPI"
+.TH MPI_Allgatherv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Allgatherv \- Gathers data from all tasks and deliver the combined data to all tasks
.SH SYNOPSIS
diff --git a/man/man3/MPI_Alloc_mem.3 b/man/man3/MPI_Alloc_mem.3
index 09bfc3d..04aa43e 100644
--- a/man/man3/MPI_Alloc_mem.3
+++ b/man/man3/MPI_Alloc_mem.3
@@ -1,4 +1,4 @@
-.TH MPI_Alloc_mem 3 "11/9/2015" " " "MPI"
+.TH MPI_Alloc_mem 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Alloc_mem \- Allocate memory for message passing and RMA
.SH SYNOPSIS
diff --git a/man/man3/MPI_Allreduce.3 b/man/man3/MPI_Allreduce.3
index b9ea665..9a9bcac 100644
--- a/man/man3/MPI_Allreduce.3
+++ b/man/man3/MPI_Allreduce.3
@@ -1,4 +1,4 @@
-.TH MPI_Allreduce 3 "11/9/2015" " " "MPI"
+.TH MPI_Allreduce 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Allreduce \- Combines values from all processes and distributes the result back to all processes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Alltoall.3 b/man/man3/MPI_Alltoall.3
index cbfcb08..2327cd5 100644
--- a/man/man3/MPI_Alltoall.3
+++ b/man/man3/MPI_Alltoall.3
@@ -1,4 +1,4 @@
-.TH MPI_Alltoall 3 "11/9/2015" " " "MPI"
+.TH MPI_Alltoall 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Alltoall \- Sends data from all to all processes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Alltoallv.3 b/man/man3/MPI_Alltoallv.3
index 7c447a8..0aeebdc 100644
--- a/man/man3/MPI_Alltoallv.3
+++ b/man/man3/MPI_Alltoallv.3
@@ -1,4 +1,4 @@
-.TH MPI_Alltoallv 3 "11/9/2015" " " "MPI"
+.TH MPI_Alltoallv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Alltoallv \- Sends data from all to all processes; each process may send a different amount of data and provide displacements for the input and output data.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Alltoallw.3 b/man/man3/MPI_Alltoallw.3
index f3bdd06..faa8e17 100644
--- a/man/man3/MPI_Alltoallw.3
+++ b/man/man3/MPI_Alltoallw.3
@@ -1,4 +1,4 @@
-.TH MPI_Alltoallw 3 "11/9/2015" " " "MPI"
+.TH MPI_Alltoallw 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Alltoallw \- Generalized all-to-all communication allowing different datatypes, counts, and displacements for each partner
.SH SYNOPSIS
diff --git a/man/man3/MPI_Attr_delete.3 b/man/man3/MPI_Attr_delete.3
index fbc5e8a..ee674ab 100644
--- a/man/man3/MPI_Attr_delete.3
+++ b/man/man3/MPI_Attr_delete.3
@@ -1,4 +1,4 @@
-.TH MPI_Attr_delete 3 "11/9/2015" " " "MPI"
+.TH MPI_Attr_delete 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Attr_delete \- Deletes an attribute value associated with a key on a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Attr_get.3 b/man/man3/MPI_Attr_get.3
index bddd7eb..a781145 100644
--- a/man/man3/MPI_Attr_get.3
+++ b/man/man3/MPI_Attr_get.3
@@ -1,4 +1,4 @@
-.TH MPI_Attr_get 3 "11/9/2015" " " "MPI"
+.TH MPI_Attr_get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Attr_get \- Retrieves attribute value by key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Attr_put.3 b/man/man3/MPI_Attr_put.3
index d619c54..07042bd 100644
--- a/man/man3/MPI_Attr_put.3
+++ b/man/man3/MPI_Attr_put.3
@@ -1,4 +1,4 @@
-.TH MPI_Attr_put 3 "11/9/2015" " " "MPI"
+.TH MPI_Attr_put 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Attr_put \- Stores attribute value associated with a key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Barrier.3 b/man/man3/MPI_Barrier.3
index c0986fa..b2f01bc 100644
--- a/man/man3/MPI_Barrier.3
+++ b/man/man3/MPI_Barrier.3
@@ -1,4 +1,4 @@
-.TH MPI_Barrier 3 "11/9/2015" " " "MPI"
+.TH MPI_Barrier 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Barrier \- Blocks until all processes in the communicator have reached this routine.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Bcast.3 b/man/man3/MPI_Bcast.3
index 42b3cd2..e8085e5 100644
--- a/man/man3/MPI_Bcast.3
+++ b/man/man3/MPI_Bcast.3
@@ -1,4 +1,4 @@
-.TH MPI_Bcast 3 "11/9/2015" " " "MPI"
+.TH MPI_Bcast 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Bcast \- Broadcasts a message from the process with rank "root" to all other processes of the communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Bsend.3 b/man/man3/MPI_Bsend.3
index 049d530..385d216 100644
--- a/man/man3/MPI_Bsend.3
+++ b/man/man3/MPI_Bsend.3
@@ -1,4 +1,4 @@
-.TH MPI_Bsend 3 "11/9/2015" " " "MPI"
+.TH MPI_Bsend 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Bsend \- Basic send with user-provided buffering
.SH SYNOPSIS
diff --git a/man/man3/MPI_Bsend_init.3 b/man/man3/MPI_Bsend_init.3
index 80a4ec6..2cdc9f7 100644
--- a/man/man3/MPI_Bsend_init.3
+++ b/man/man3/MPI_Bsend_init.3
@@ -1,4 +1,4 @@
-.TH MPI_Bsend_init 3 "11/9/2015" " " "MPI"
+.TH MPI_Bsend_init 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Bsend_init \- Builds a handle for a buffered send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Buffer_attach.3 b/man/man3/MPI_Buffer_attach.3
index 15f1ad9..d1acf5b 100644
--- a/man/man3/MPI_Buffer_attach.3
+++ b/man/man3/MPI_Buffer_attach.3
@@ -1,4 +1,4 @@
-.TH MPI_Buffer_attach 3 "11/9/2015" " " "MPI"
+.TH MPI_Buffer_attach 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Buffer_attach \- Attaches a user-provided buffer for sending
.SH SYNOPSIS
diff --git a/man/man3/MPI_Buffer_detach.3 b/man/man3/MPI_Buffer_detach.3
index 2170cfa..5533822 100644
--- a/man/man3/MPI_Buffer_detach.3
+++ b/man/man3/MPI_Buffer_detach.3
@@ -1,4 +1,4 @@
-.TH MPI_Buffer_detach 3 "11/9/2015" " " "MPI"
+.TH MPI_Buffer_detach 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Buffer_detach \- Removes an existing buffer (for use in MPI_Bsend etc)
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cancel.3 b/man/man3/MPI_Cancel.3
index 32f446a..42e00b2 100644
--- a/man/man3/MPI_Cancel.3
+++ b/man/man3/MPI_Cancel.3
@@ -1,4 +1,4 @@
-.TH MPI_Cancel 3 "11/9/2015" " " "MPI"
+.TH MPI_Cancel 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cancel \- Cancels a communication request
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cart_coords.3 b/man/man3/MPI_Cart_coords.3
index 5f5943d..b75f867 100644
--- a/man/man3/MPI_Cart_coords.3
+++ b/man/man3/MPI_Cart_coords.3
@@ -1,4 +1,4 @@
-.TH MPI_Cart_coords 3 "11/9/2015" " " "MPI"
+.TH MPI_Cart_coords 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cart_coords \- Determines process coords in cartesian topology given rank in group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cart_create.3 b/man/man3/MPI_Cart_create.3
index 3eb470b..f27867c 100644
--- a/man/man3/MPI_Cart_create.3
+++ b/man/man3/MPI_Cart_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Cart_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Cart_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cart_create \- Makes a new communicator to which topology information has been attached
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cart_get.3 b/man/man3/MPI_Cart_get.3
index 5491da2..c2719fa 100644
--- a/man/man3/MPI_Cart_get.3
+++ b/man/man3/MPI_Cart_get.3
@@ -1,4 +1,4 @@
-.TH MPI_Cart_get 3 "11/9/2015" " " "MPI"
+.TH MPI_Cart_get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cart_get \- Retrieves Cartesian topology information associated with a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cart_map.3 b/man/man3/MPI_Cart_map.3
index fdf7f28..02eb51f 100644
--- a/man/man3/MPI_Cart_map.3
+++ b/man/man3/MPI_Cart_map.3
@@ -1,4 +1,4 @@
-.TH MPI_Cart_map 3 "11/9/2015" " " "MPI"
+.TH MPI_Cart_map 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cart_map \- Maps process to Cartesian topology information
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cart_rank.3 b/man/man3/MPI_Cart_rank.3
index 1b904d1..a415b57 100644
--- a/man/man3/MPI_Cart_rank.3
+++ b/man/man3/MPI_Cart_rank.3
@@ -1,4 +1,4 @@
-.TH MPI_Cart_rank 3 "11/9/2015" " " "MPI"
+.TH MPI_Cart_rank 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cart_rank \- Determines process rank in communicator given Cartesian location
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cart_shift.3 b/man/man3/MPI_Cart_shift.3
index 121c781..e2e1344 100644
--- a/man/man3/MPI_Cart_shift.3
+++ b/man/man3/MPI_Cart_shift.3
@@ -1,4 +1,4 @@
-.TH MPI_Cart_shift 3 "11/9/2015" " " "MPI"
+.TH MPI_Cart_shift 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cart_shift \- Returns the shifted source and destination ranks, given a shift direction and amount
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cart_sub.3 b/man/man3/MPI_Cart_sub.3
index 654a409..057bf1a 100644
--- a/man/man3/MPI_Cart_sub.3
+++ b/man/man3/MPI_Cart_sub.3
@@ -1,4 +1,4 @@
-.TH MPI_Cart_sub 3 "11/9/2015" " " "MPI"
+.TH MPI_Cart_sub 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cart_sub \- Partitions a communicator into subgroups which form lower-dimensional cartesian subgrids
.SH SYNOPSIS
diff --git a/man/man3/MPI_Cartdim_get.3 b/man/man3/MPI_Cartdim_get.3
index 5816a74..5a620b8 100644
--- a/man/man3/MPI_Cartdim_get.3
+++ b/man/man3/MPI_Cartdim_get.3
@@ -1,4 +1,4 @@
-.TH MPI_Cartdim_get 3 "11/9/2015" " " "MPI"
+.TH MPI_Cartdim_get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Cartdim_get \- Retrieves Cartesian topology information associated with a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Close_port.3 b/man/man3/MPI_Close_port.3
index fa4e2c5..81fc0c8 100644
--- a/man/man3/MPI_Close_port.3
+++ b/man/man3/MPI_Close_port.3
@@ -1,4 +1,4 @@
-.TH MPI_Close_port 3 "11/9/2015" " " "MPI"
+.TH MPI_Close_port 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Close_port \- close port
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_accept.3 b/man/man3/MPI_Comm_accept.3
index 9485d4b..315d013 100644
--- a/man/man3/MPI_Comm_accept.3
+++ b/man/man3/MPI_Comm_accept.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_accept 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_accept 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_accept \- Accept a request to form a new intercommunicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_call_errhandler.3 b/man/man3/MPI_Comm_call_errhandler.3
index d499a09..ec09afd 100644
--- a/man/man3/MPI_Comm_call_errhandler.3
+++ b/man/man3/MPI_Comm_call_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_call_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_call_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_call_errhandler \- Call the error handler installed on a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_compare.3 b/man/man3/MPI_Comm_compare.3
index cd67a05..fc72e8c 100644
--- a/man/man3/MPI_Comm_compare.3
+++ b/man/man3/MPI_Comm_compare.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_compare 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_compare 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_compare \- Compares two communicators
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_connect.3 b/man/man3/MPI_Comm_connect.3
index 019b5aa..65e9d3a 100644
--- a/man/man3/MPI_Comm_connect.3
+++ b/man/man3/MPI_Comm_connect.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_connect 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_connect 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_connect \- Make a request to form a new intercommunicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_create.3 b/man/man3/MPI_Comm_create.3
index 87d8c53..024f4de 100644
--- a/man/man3/MPI_Comm_create.3
+++ b/man/man3/MPI_Comm_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_create \- Creates a new communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_create_errhandler.3 b/man/man3/MPI_Comm_create_errhandler.3
index 8256a19..f1fd0a3 100644
--- a/man/man3/MPI_Comm_create_errhandler.3
+++ b/man/man3/MPI_Comm_create_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_create_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_create_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_create_errhandler \- Create a communicator error handler
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_create_group.3 b/man/man3/MPI_Comm_create_group.3
index ca949d3..64f8750 100644
--- a/man/man3/MPI_Comm_create_group.3
+++ b/man/man3/MPI_Comm_create_group.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_create_group 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_create_group 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_create_group \- Creates a new communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_create_keyval.3 b/man/man3/MPI_Comm_create_keyval.3
index afcea75..684ddc1 100644
--- a/man/man3/MPI_Comm_create_keyval.3
+++ b/man/man3/MPI_Comm_create_keyval.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_create_keyval 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_create_keyval 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_create_keyval \- Create a new attribute key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_delete_attr.3 b/man/man3/MPI_Comm_delete_attr.3
index d2a32f5..85ef172 100644
--- a/man/man3/MPI_Comm_delete_attr.3
+++ b/man/man3/MPI_Comm_delete_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_delete_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_delete_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_delete_attr \- Deletes an attribute value associated with a key on a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_disconnect.3 b/man/man3/MPI_Comm_disconnect.3
index cbec871..2330f15 100644
--- a/man/man3/MPI_Comm_disconnect.3
+++ b/man/man3/MPI_Comm_disconnect.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_disconnect 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_disconnect 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_disconnect \- Disconnect from a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_dup.3 b/man/man3/MPI_Comm_dup.3
index afa4b75..4bea85b 100644
--- a/man/man3/MPI_Comm_dup.3
+++ b/man/man3/MPI_Comm_dup.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_dup 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_dup 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_dup \- Duplicates an existing communicator with all its cached information
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_dup_with_info.3 b/man/man3/MPI_Comm_dup_with_info.3
index db4bd39..5720a33 100644
--- a/man/man3/MPI_Comm_dup_with_info.3
+++ b/man/man3/MPI_Comm_dup_with_info.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_dup_with_info 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_dup_with_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_dup_with_info \- Duplicates an existing communicator with all its cached information
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_free.3 b/man/man3/MPI_Comm_free.3
index 8e56680..d6527bb 100644
--- a/man/man3/MPI_Comm_free.3
+++ b/man/man3/MPI_Comm_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_free \- Marks the communicator object for deallocation
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_free_keyval.3 b/man/man3/MPI_Comm_free_keyval.3
index cd588c1..450b402 100644
--- a/man/man3/MPI_Comm_free_keyval.3
+++ b/man/man3/MPI_Comm_free_keyval.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_free_keyval 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_free_keyval 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_free_keyval \- Frees an attribute key for communicators
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_get_attr.3 b/man/man3/MPI_Comm_get_attr.3
index 291dbdc..5de67d2 100644
--- a/man/man3/MPI_Comm_get_attr.3
+++ b/man/man3/MPI_Comm_get_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_get_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_get_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_get_attr \- Retrieves attribute value by key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_get_errhandler.3 b/man/man3/MPI_Comm_get_errhandler.3
index 1f7d883..ce5c334 100644
--- a/man/man3/MPI_Comm_get_errhandler.3
+++ b/man/man3/MPI_Comm_get_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_get_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_get_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_get_errhandler \- Get the error handler attached to a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_get_info.3 b/man/man3/MPI_Comm_get_info.3
index cdc5d49..f558933 100644
--- a/man/man3/MPI_Comm_get_info.3
+++ b/man/man3/MPI_Comm_get_info.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_get_info 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_get_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_get_info \- Returns a new info object containing the hints of the communicator associated with comm. The current setting of all hints actually used by the system related to this communicator is returned in info_used. If no such hints exist, a handle to a newly created info object is returned that contains no key/value pair. The user is responsible for freeing info_used via MPI_INFO_FREE.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_get_name.3 b/man/man3/MPI_Comm_get_name.3
index ebb9c44..165a39f 100644
--- a/man/man3/MPI_Comm_get_name.3
+++ b/man/man3/MPI_Comm_get_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_get_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_get_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_get_name \- Return the print name from the communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_get_parent.3 b/man/man3/MPI_Comm_get_parent.3
index 7ca03d6..b453331 100644
--- a/man/man3/MPI_Comm_get_parent.3
+++ b/man/man3/MPI_Comm_get_parent.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_get_parent 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_get_parent 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_get_parent \- Return the parent communicator for this process
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_group.3 b/man/man3/MPI_Comm_group.3
index d60b53f..6b1f78d 100644
--- a/man/man3/MPI_Comm_group.3
+++ b/man/man3/MPI_Comm_group.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_group 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_group 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_group \- Accesses the group associated with given communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_idup.3 b/man/man3/MPI_Comm_idup.3
index 0d34098..d0f1fca 100644
--- a/man/man3/MPI_Comm_idup.3
+++ b/man/man3/MPI_Comm_idup.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_idup 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_idup 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_idup \- nonblocking communicator duplication
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_join.3 b/man/man3/MPI_Comm_join.3
index f302b78..4b2e8b2 100644
--- a/man/man3/MPI_Comm_join.3
+++ b/man/man3/MPI_Comm_join.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_join 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_join 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_join \- Create a communicator by joining two processes connected by a socket.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_rank.3 b/man/man3/MPI_Comm_rank.3
index 1427d48..ea7f4a7 100644
--- a/man/man3/MPI_Comm_rank.3
+++ b/man/man3/MPI_Comm_rank.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_rank 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_rank 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_rank \- Determines the rank of the calling process in the communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_remote_group.3 b/man/man3/MPI_Comm_remote_group.3
index 0883475..318ea99 100644
--- a/man/man3/MPI_Comm_remote_group.3
+++ b/man/man3/MPI_Comm_remote_group.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_remote_group 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_remote_group 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_remote_group \- Accesses the remote group associated with the given inter-communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_remote_size.3 b/man/man3/MPI_Comm_remote_size.3
index 0df22d0..e8fe355 100644
--- a/man/man3/MPI_Comm_remote_size.3
+++ b/man/man3/MPI_Comm_remote_size.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_remote_size 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_remote_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_remote_size \- Determines the size of the remote group associated with an inter-communictor
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_set_attr.3 b/man/man3/MPI_Comm_set_attr.3
index c05fd1b..512dd06 100644
--- a/man/man3/MPI_Comm_set_attr.3
+++ b/man/man3/MPI_Comm_set_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_set_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_set_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_set_attr \- Stores attribute value associated with a key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_set_errhandler.3 b/man/man3/MPI_Comm_set_errhandler.3
index 31cb728..56fce15 100644
--- a/man/man3/MPI_Comm_set_errhandler.3
+++ b/man/man3/MPI_Comm_set_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_set_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_set_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_set_errhandler \- Set the error handler for a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_set_info.3 b/man/man3/MPI_Comm_set_info.3
index 073a399..7898468 100644
--- a/man/man3/MPI_Comm_set_info.3
+++ b/man/man3/MPI_Comm_set_info.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_set_info 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_set_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_set_info \- Set new values for the hints of the communicator associated with comm. The call is collective on the group of comm. The info object may be different on each process, but any info entries that an implementation requires to be the same on all processes must appear with the same value in each process' info object.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_set_name.3 b/man/man3/MPI_Comm_set_name.3
index 35cc012..963c112 100644
--- a/man/man3/MPI_Comm_set_name.3
+++ b/man/man3/MPI_Comm_set_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_set_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_set_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_set_name \- Sets the print name for a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_size.3 b/man/man3/MPI_Comm_size.3
index ef7da0c..9d03731 100644
--- a/man/man3/MPI_Comm_size.3
+++ b/man/man3/MPI_Comm_size.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_size 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_size \- Determines the size of the group associated with a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_spawn.3 b/man/man3/MPI_Comm_spawn.3
index 8141e37..9d3a538 100644
--- a/man/man3/MPI_Comm_spawn.3
+++ b/man/man3/MPI_Comm_spawn.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_spawn 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_spawn 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_spawn \- Spawn up to maxprocs instances of a single MPI application
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_spawn_multiple.3 b/man/man3/MPI_Comm_spawn_multiple.3
index ae846df..7ba2bae 100644
--- a/man/man3/MPI_Comm_spawn_multiple.3
+++ b/man/man3/MPI_Comm_spawn_multiple.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_spawn_multiple 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_spawn_multiple 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_spawn_multiple \- short description
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_split.3 b/man/man3/MPI_Comm_split.3
index 993cc07..28ca3a5 100644
--- a/man/man3/MPI_Comm_split.3
+++ b/man/man3/MPI_Comm_split.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_split 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_split 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_split \- Creates new communicators based on colors and keys
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_split_type.3 b/man/man3/MPI_Comm_split_type.3
index 2255413..0939be8 100644
--- a/man/man3/MPI_Comm_split_type.3
+++ b/man/man3/MPI_Comm_split_type.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_split_type 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_split_type 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_split_type \- Creates new communicators based on split types and keys
.SH SYNOPSIS
diff --git a/man/man3/MPI_Comm_test_inter.3 b/man/man3/MPI_Comm_test_inter.3
index 927e197..d3d4775 100644
--- a/man/man3/MPI_Comm_test_inter.3
+++ b/man/man3/MPI_Comm_test_inter.3
@@ -1,4 +1,4 @@
-.TH MPI_Comm_test_inter 3 "11/9/2015" " " "MPI"
+.TH MPI_Comm_test_inter 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Comm_test_inter \- Tests to see if a comm is an inter-communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Compare_and_swap.3 b/man/man3/MPI_Compare_and_swap.3
index 945d633..c63d2fd 100644
--- a/man/man3/MPI_Compare_and_swap.3
+++ b/man/man3/MPI_Compare_and_swap.3
@@ -1,4 +1,4 @@
-.TH MPI_Compare_and_swap 3 "11/9/2015" " " "MPI"
+.TH MPI_Compare_and_swap 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Compare_and_swap \- Perform one-sided atomic compare-and-swap.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Dims_create.3 b/man/man3/MPI_Dims_create.3
index ed9d713..6a90122 100644
--- a/man/man3/MPI_Dims_create.3
+++ b/man/man3/MPI_Dims_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Dims_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Dims_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Dims_create \- Creates a division of processors in a cartesian grid
.SH SYNOPSIS
@@ -9,12 +9,12 @@ int MPI_Dims_create(int nnodes, int ndims, int dims[])
.PD 0
.TP
.B nnodes
-- number of nodes in a grid (integer)
+- number of nodes in a grid (integer)
.PD 1
.PD 0
.TP
.B ndims
-- number of cartesian dimensions (integer)
+- number of cartesian dimensions (integer)
.PD 1
.SH INPUT/OUTPUT PARAMETERS
@@ -23,7 +23,7 @@ int MPI_Dims_create(int nnodes, int ndims, int dims[])
.B dims
- integer array of size
.I ndims
-specifying the number of nodes in each
+specifying the number of nodes in each
dimension. A value of 0 indicates that
.I MPI_Dims_create
should fill in a
diff --git a/man/man3/MPI_Dist_graph_create.3 b/man/man3/MPI_Dist_graph_create.3
index c7bedd7..37980b0 100644
--- a/man/man3/MPI_Dist_graph_create.3
+++ b/man/man3/MPI_Dist_graph_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Dist_graph_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Dist_graph_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Dist_graph_create \- MPI_DIST_GRAPH_CREATE returns a handle to a new communicator to which the distributed graph topology information is attached.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Dist_graph_create_adjacent.3 b/man/man3/MPI_Dist_graph_create_adjacent.3
index ecf3ce3..11530ae 100644
--- a/man/man3/MPI_Dist_graph_create_adjacent.3
+++ b/man/man3/MPI_Dist_graph_create_adjacent.3
@@ -1,4 +1,4 @@
-.TH MPI_Dist_graph_create_adjacent 3 "11/9/2015" " " "MPI"
+.TH MPI_Dist_graph_create_adjacent 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Dist_graph_create_adjacent \- returns a handle to a new communicator to which the distributed graph topology information is attached.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Dist_graph_neighbors.3 b/man/man3/MPI_Dist_graph_neighbors.3
index 2e1c959..81c71ff 100644
--- a/man/man3/MPI_Dist_graph_neighbors.3
+++ b/man/man3/MPI_Dist_graph_neighbors.3
@@ -1,4 +1,4 @@
-.TH MPI_Dist_graph_neighbors 3 "11/9/2015" " " "MPI"
+.TH MPI_Dist_graph_neighbors 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Dist_graph_neighbors \- Provides adjacency information for a distributed graph topology.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Dist_graph_neighbors_count.3 b/man/man3/MPI_Dist_graph_neighbors_count.3
index e5ea5d8..56d43c7 100644
--- a/man/man3/MPI_Dist_graph_neighbors_count.3
+++ b/man/man3/MPI_Dist_graph_neighbors_count.3
@@ -1,4 +1,4 @@
-.TH MPI_Dist_graph_neighbors_count 3 "11/9/2015" " " "MPI"
+.TH MPI_Dist_graph_neighbors_count 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Dist_graph_neighbors_count \- Provides adjacency information for a distributed graph topology.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Errhandler_create.3 b/man/man3/MPI_Errhandler_create.3
index 35640e2..6bece1d 100644
--- a/man/man3/MPI_Errhandler_create.3
+++ b/man/man3/MPI_Errhandler_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Errhandler_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Errhandler_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Errhandler_create \- Creates an MPI-style errorhandler
.SH SYNOPSIS
diff --git a/man/man3/MPI_Errhandler_free.3 b/man/man3/MPI_Errhandler_free.3
index 6f64699..cf75eb8 100644
--- a/man/man3/MPI_Errhandler_free.3
+++ b/man/man3/MPI_Errhandler_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Errhandler_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Errhandler_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Errhandler_free \- Frees an MPI-style errorhandler
.SH SYNOPSIS
diff --git a/man/man3/MPI_Errhandler_get.3 b/man/man3/MPI_Errhandler_get.3
index 410c8a8..38877c5 100644
--- a/man/man3/MPI_Errhandler_get.3
+++ b/man/man3/MPI_Errhandler_get.3
@@ -1,4 +1,4 @@
-.TH MPI_Errhandler_get 3 "11/9/2015" " " "MPI"
+.TH MPI_Errhandler_get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Errhandler_get \- Gets the error handler for a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Errhandler_set.3 b/man/man3/MPI_Errhandler_set.3
index 1dcca39..7feb030 100644
--- a/man/man3/MPI_Errhandler_set.3
+++ b/man/man3/MPI_Errhandler_set.3
@@ -1,4 +1,4 @@
-.TH MPI_Errhandler_set 3 "11/9/2015" " " "MPI"
+.TH MPI_Errhandler_set 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Errhandler_set \- Sets the error handler for a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Error_class.3 b/man/man3/MPI_Error_class.3
index 6904dca..bfbcb9c 100644
--- a/man/man3/MPI_Error_class.3
+++ b/man/man3/MPI_Error_class.3
@@ -1,4 +1,4 @@
-.TH MPI_Error_class 3 "11/9/2015" " " "MPI"
+.TH MPI_Error_class 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Error_class \- Converts an error code into an error class
.SH SYNOPSIS
diff --git a/man/man3/MPI_Error_string.3 b/man/man3/MPI_Error_string.3
index 1a32b09..93db96f 100644
--- a/man/man3/MPI_Error_string.3
+++ b/man/man3/MPI_Error_string.3
@@ -1,4 +1,4 @@
-.TH MPI_Error_string 3 "11/9/2015" " " "MPI"
+.TH MPI_Error_string 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Error_string \- Return a string for a given error code
.SH SYNOPSIS
diff --git a/man/man3/MPI_Exscan.3 b/man/man3/MPI_Exscan.3
index 0ea4f39..1e98f0c 100644
--- a/man/man3/MPI_Exscan.3
+++ b/man/man3/MPI_Exscan.3
@@ -1,4 +1,4 @@
-.TH MPI_Exscan 3 "11/9/2015" " " "MPI"
+.TH MPI_Exscan 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Exscan \- Computes the exclusive scan (partial reductions) of data on a collection of processes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Fetch_and_op.3 b/man/man3/MPI_Fetch_and_op.3
index 53e7978..e378677 100644
--- a/man/man3/MPI_Fetch_and_op.3
+++ b/man/man3/MPI_Fetch_and_op.3
@@ -1,4 +1,4 @@
-.TH MPI_Fetch_and_op 3 "11/9/2015" " " "MPI"
+.TH MPI_Fetch_and_op 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Fetch_and_op \- Perform one-sided read-modify-write.
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_c2f.3 b/man/man3/MPI_File_c2f.3
index bf6965e..7a160af 100644
--- a/man/man3/MPI_File_c2f.3
+++ b/man/man3/MPI_File_c2f.3
@@ -1,4 +1,4 @@
-.TH MPI_File_c2f 3 "11/9/2015" " " "MPI"
+.TH MPI_File_c2f 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_c2f \- Translates a C file handle to a Fortran file handle
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_call_errhandler.3 b/man/man3/MPI_File_call_errhandler.3
index 28ffc69..3d3f602 100644
--- a/man/man3/MPI_File_call_errhandler.3
+++ b/man/man3/MPI_File_call_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_File_call_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_File_call_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_call_errhandler \- Call the error handler installed on a file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_close.3 b/man/man3/MPI_File_close.3
index accecb3..cfcfbbb 100644
--- a/man/man3/MPI_File_close.3
+++ b/man/man3/MPI_File_close.3
@@ -1,4 +1,4 @@
-.TH MPI_File_close 3 "11/9/2015" " " "MPI"
+.TH MPI_File_close 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_close \- Closes a file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_create_errhandler.3 b/man/man3/MPI_File_create_errhandler.3
index 09f87d8..ed00a32 100644
--- a/man/man3/MPI_File_create_errhandler.3
+++ b/man/man3/MPI_File_create_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_File_create_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_File_create_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_create_errhandler \- Create a file error handler
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_delete.3 b/man/man3/MPI_File_delete.3
index 16299e3..c283c88 100644
--- a/man/man3/MPI_File_delete.3
+++ b/man/man3/MPI_File_delete.3
@@ -1,4 +1,4 @@
-.TH MPI_File_delete 3 "11/9/2015" " " "MPI"
+.TH MPI_File_delete 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_delete \- Deletes a file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_f2c.3 b/man/man3/MPI_File_f2c.3
index 1901001..582a6e1 100644
--- a/man/man3/MPI_File_f2c.3
+++ b/man/man3/MPI_File_f2c.3
@@ -1,4 +1,4 @@
-.TH MPI_File_f2c 3 "11/9/2015" " " "MPI"
+.TH MPI_File_f2c 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_f2c \- Translates a Fortran file handle to a C file handle
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_amode.3 b/man/man3/MPI_File_get_amode.3
index c4ca24f..0a69c8b 100644
--- a/man/man3/MPI_File_get_amode.3
+++ b/man/man3/MPI_File_get_amode.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_amode 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_amode 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_amode \- Returns the file access mode
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_atomicity.3 b/man/man3/MPI_File_get_atomicity.3
index c29bf5f..a3a2260 100644
--- a/man/man3/MPI_File_get_atomicity.3
+++ b/man/man3/MPI_File_get_atomicity.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_atomicity 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_atomicity 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_atomicity \- Returns the atomicity mode
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_byte_offset.3 b/man/man3/MPI_File_get_byte_offset.3
index 19ba0cf..144f436 100644
--- a/man/man3/MPI_File_get_byte_offset.3
+++ b/man/man3/MPI_File_get_byte_offset.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_byte_offset 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_byte_offset 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_byte_offset \- Returns the absolute byte position in the file corresponding to "offset" etypes relative to the current view
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_errhandler.3 b/man/man3/MPI_File_get_errhandler.3
index b168293..b06d1e2 100644
--- a/man/man3/MPI_File_get_errhandler.3
+++ b/man/man3/MPI_File_get_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_errhandler \- Get the error handler attached to a file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_group.3 b/man/man3/MPI_File_get_group.3
index 94b9cda..da96ba5 100644
--- a/man/man3/MPI_File_get_group.3
+++ b/man/man3/MPI_File_get_group.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_group 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_group 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_group \- Returns the group of processes that opened the file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_info.3 b/man/man3/MPI_File_get_info.3
index 6d93bea..55f8ed5 100644
--- a/man/man3/MPI_File_get_info.3
+++ b/man/man3/MPI_File_get_info.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_info 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_info \- Returns the hints for a file that are actually being used by MPI
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_position.3 b/man/man3/MPI_File_get_position.3
index 40d3900..3a62ce3 100644
--- a/man/man3/MPI_File_get_position.3
+++ b/man/man3/MPI_File_get_position.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_position 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_position 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_position \- Returns the current position of the individual file pointer in etype units relative to the current view
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_position_shared.3 b/man/man3/MPI_File_get_position_shared.3
index efe8032..a75a286 100644
--- a/man/man3/MPI_File_get_position_shared.3
+++ b/man/man3/MPI_File_get_position_shared.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_position_shared 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_position_shared 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_position_shared \- Returns the current position of the shared file pointer in etype units relative to the current view
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_size.3 b/man/man3/MPI_File_get_size.3
index 30787b4..4f7fa25 100644
--- a/man/man3/MPI_File_get_size.3
+++ b/man/man3/MPI_File_get_size.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_size 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_size \- Returns the file size
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_type_extent.3 b/man/man3/MPI_File_get_type_extent.3
index d67cc65..e75cbc9 100644
--- a/man/man3/MPI_File_get_type_extent.3
+++ b/man/man3/MPI_File_get_type_extent.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_type_extent 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_type_extent 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_type_extent \- Returns the extent of datatype in the file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_get_view.3 b/man/man3/MPI_File_get_view.3
index 5727868..0512c39 100644
--- a/man/man3/MPI_File_get_view.3
+++ b/man/man3/MPI_File_get_view.3
@@ -1,4 +1,4 @@
-.TH MPI_File_get_view 3 "11/9/2015" " " "MPI"
+.TH MPI_File_get_view 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_get_view \- Returns the file view
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iread.3 b/man/man3/MPI_File_iread.3
index 281f556..f784579 100644
--- a/man/man3/MPI_File_iread.3
+++ b/man/man3/MPI_File_iread.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iread 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iread 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iread \- Nonblocking read using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iread_all.3 b/man/man3/MPI_File_iread_all.3
index 42c58fb..070e6e2 100644
--- a/man/man3/MPI_File_iread_all.3
+++ b/man/man3/MPI_File_iread_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iread_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iread_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iread_all \- Nonblocking collective read using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iread_at.3 b/man/man3/MPI_File_iread_at.3
index 2df9376..1262f91 100644
--- a/man/man3/MPI_File_iread_at.3
+++ b/man/man3/MPI_File_iread_at.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iread_at 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iread_at 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iread_at \- Nonblocking read using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iread_at_all.3 b/man/man3/MPI_File_iread_at_all.3
index ca79234..7b751d6 100644
--- a/man/man3/MPI_File_iread_at_all.3
+++ b/man/man3/MPI_File_iread_at_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iread_at_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iread_at_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iread_at_all \- Nonblocking collective read using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iread_shared.3 b/man/man3/MPI_File_iread_shared.3
index e46d725..ae47090 100644
--- a/man/man3/MPI_File_iread_shared.3
+++ b/man/man3/MPI_File_iread_shared.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iread_shared 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iread_shared 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iread_shared \- Nonblocking read using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iwrite.3 b/man/man3/MPI_File_iwrite.3
index f0010e3..9aaaee0 100644
--- a/man/man3/MPI_File_iwrite.3
+++ b/man/man3/MPI_File_iwrite.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iwrite 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iwrite 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iwrite \- Nonblocking write using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iwrite_all.3 b/man/man3/MPI_File_iwrite_all.3
index 37194dd..e32a085 100644
--- a/man/man3/MPI_File_iwrite_all.3
+++ b/man/man3/MPI_File_iwrite_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iwrite_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iwrite_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iwrite_all \- Nonblocking collective write using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iwrite_at.3 b/man/man3/MPI_File_iwrite_at.3
index be160b8..7124193 100644
--- a/man/man3/MPI_File_iwrite_at.3
+++ b/man/man3/MPI_File_iwrite_at.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iwrite_at 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iwrite_at 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iwrite_at \- Nonblocking write using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iwrite_at_all.3 b/man/man3/MPI_File_iwrite_at_all.3
index 74c0a63..311f82f 100644
--- a/man/man3/MPI_File_iwrite_at_all.3
+++ b/man/man3/MPI_File_iwrite_at_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iwrite_at_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iwrite_at_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iwrite_at_all \- Nonblocking collective write using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_iwrite_shared.3 b/man/man3/MPI_File_iwrite_shared.3
index f9e1cfc..a8156c2 100644
--- a/man/man3/MPI_File_iwrite_shared.3
+++ b/man/man3/MPI_File_iwrite_shared.3
@@ -1,4 +1,4 @@
-.TH MPI_File_iwrite_shared 3 "11/9/2015" " " "MPI"
+.TH MPI_File_iwrite_shared 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_iwrite_shared \- Nonblocking write using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_open.3 b/man/man3/MPI_File_open.3
index 467e68e..3d0db89 100644
--- a/man/man3/MPI_File_open.3
+++ b/man/man3/MPI_File_open.3
@@ -1,4 +1,4 @@
-.TH MPI_File_open 3 "11/9/2015" " " "MPI"
+.TH MPI_File_open 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_open \- Opens a file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_preallocate.3 b/man/man3/MPI_File_preallocate.3
index d329d03..89ed0d6 100644
--- a/man/man3/MPI_File_preallocate.3
+++ b/man/man3/MPI_File_preallocate.3
@@ -1,4 +1,4 @@
-.TH MPI_File_preallocate 3 "11/9/2015" " " "MPI"
+.TH MPI_File_preallocate 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_preallocate \- Preallocates storage space for a file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read.3 b/man/man3/MPI_File_read.3
index cb4ac51..dbb63fe 100644
--- a/man/man3/MPI_File_read.3
+++ b/man/man3/MPI_File_read.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read \- Read using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_all.3 b/man/man3/MPI_File_read_all.3
index d41b2ae..7b646bd 100644
--- a/man/man3/MPI_File_read_all.3
+++ b/man/man3/MPI_File_read_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_all \- Collective read using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_all_begin.3 b/man/man3/MPI_File_read_all_begin.3
index 86d0f67..268f833 100644
--- a/man/man3/MPI_File_read_all_begin.3
+++ b/man/man3/MPI_File_read_all_begin.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_all_begin 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_all_begin 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_all_begin \- Begin a split collective read using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_all_end.3 b/man/man3/MPI_File_read_all_end.3
index 88c0017..e6bfde2 100644
--- a/man/man3/MPI_File_read_all_end.3
+++ b/man/man3/MPI_File_read_all_end.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_all_end 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_all_end 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_all_end \- Complete a split collective read using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_at.3 b/man/man3/MPI_File_read_at.3
index d5469ae..ec58404 100644
--- a/man/man3/MPI_File_read_at.3
+++ b/man/man3/MPI_File_read_at.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_at 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_at 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_at \- Read using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_at_all.3 b/man/man3/MPI_File_read_at_all.3
index 8084148..8a2c8b2 100644
--- a/man/man3/MPI_File_read_at_all.3
+++ b/man/man3/MPI_File_read_at_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_at_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_at_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_at_all \- Collective read using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_at_all_begin.3 b/man/man3/MPI_File_read_at_all_begin.3
index 55414a8..ea5eef2 100644
--- a/man/man3/MPI_File_read_at_all_begin.3
+++ b/man/man3/MPI_File_read_at_all_begin.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_at_all_begin 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_at_all_begin 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_at_all_begin \- Begin a split collective read using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_at_all_end.3 b/man/man3/MPI_File_read_at_all_end.3
index ad321e0..5d29b25 100644
--- a/man/man3/MPI_File_read_at_all_end.3
+++ b/man/man3/MPI_File_read_at_all_end.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_at_all_end 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_at_all_end 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_at_all_end \- Complete a split collective read using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_ordered.3 b/man/man3/MPI_File_read_ordered.3
index 568be93..d569085 100644
--- a/man/man3/MPI_File_read_ordered.3
+++ b/man/man3/MPI_File_read_ordered.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_ordered 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_ordered 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_ordered \- Collective read using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_ordered_begin.3 b/man/man3/MPI_File_read_ordered_begin.3
index bb63cff..68b3487 100644
--- a/man/man3/MPI_File_read_ordered_begin.3
+++ b/man/man3/MPI_File_read_ordered_begin.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_ordered_begin 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_ordered_begin 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_ordered_begin \- Begin a split collective read using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_ordered_end.3 b/man/man3/MPI_File_read_ordered_end.3
index 76aa56c..0d58e92 100644
--- a/man/man3/MPI_File_read_ordered_end.3
+++ b/man/man3/MPI_File_read_ordered_end.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_ordered_end 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_ordered_end 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_ordered_end \- Complete a split collective read using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_read_shared.3 b/man/man3/MPI_File_read_shared.3
index 36f15af..f4365fb 100644
--- a/man/man3/MPI_File_read_shared.3
+++ b/man/man3/MPI_File_read_shared.3
@@ -1,4 +1,4 @@
-.TH MPI_File_read_shared 3 "11/9/2015" " " "MPI"
+.TH MPI_File_read_shared 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_read_shared \- Read using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_seek.3 b/man/man3/MPI_File_seek.3
index 490f8ee..d700123 100644
--- a/man/man3/MPI_File_seek.3
+++ b/man/man3/MPI_File_seek.3
@@ -1,4 +1,4 @@
-.TH MPI_File_seek 3 "11/9/2015" " " "MPI"
+.TH MPI_File_seek 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_seek \- Updates the individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_seek_shared.3 b/man/man3/MPI_File_seek_shared.3
index 40197ff..cb499ce 100644
--- a/man/man3/MPI_File_seek_shared.3
+++ b/man/man3/MPI_File_seek_shared.3
@@ -1,4 +1,4 @@
-.TH MPI_File_seek_shared 3 "11/9/2015" " " "MPI"
+.TH MPI_File_seek_shared 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_seek_shared \- Updates the shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_set_atomicity.3 b/man/man3/MPI_File_set_atomicity.3
index 53002ca..93d5cd0 100644
--- a/man/man3/MPI_File_set_atomicity.3
+++ b/man/man3/MPI_File_set_atomicity.3
@@ -1,4 +1,4 @@
-.TH MPI_File_set_atomicity 3 "11/9/2015" " " "MPI"
+.TH MPI_File_set_atomicity 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_set_atomicity \- Sets the atomicity mode
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_set_errhandler.3 b/man/man3/MPI_File_set_errhandler.3
index f5dd3ee..933337c 100644
--- a/man/man3/MPI_File_set_errhandler.3
+++ b/man/man3/MPI_File_set_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_File_set_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_File_set_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_set_errhandler \- Set the error handler for an MPI file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_set_info.3 b/man/man3/MPI_File_set_info.3
index be8393c..592a042 100644
--- a/man/man3/MPI_File_set_info.3
+++ b/man/man3/MPI_File_set_info.3
@@ -1,4 +1,4 @@
-.TH MPI_File_set_info 3 "11/9/2015" " " "MPI"
+.TH MPI_File_set_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_set_info \- Sets new values for the hints associated with a file
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_set_size.3 b/man/man3/MPI_File_set_size.3
index 6ad38c0..fb92b42 100644
--- a/man/man3/MPI_File_set_size.3
+++ b/man/man3/MPI_File_set_size.3
@@ -1,4 +1,4 @@
-.TH MPI_File_set_size 3 "11/9/2015" " " "MPI"
+.TH MPI_File_set_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_set_size \- Sets the file size
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_set_view.3 b/man/man3/MPI_File_set_view.3
index 40865ee..3778b77 100644
--- a/man/man3/MPI_File_set_view.3
+++ b/man/man3/MPI_File_set_view.3
@@ -1,4 +1,4 @@
-.TH MPI_File_set_view 3 "11/9/2015" " " "MPI"
+.TH MPI_File_set_view 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_set_view \- Sets the file view
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_sync.3 b/man/man3/MPI_File_sync.3
index 603f744..0d6d000 100644
--- a/man/man3/MPI_File_sync.3
+++ b/man/man3/MPI_File_sync.3
@@ -1,4 +1,4 @@
-.TH MPI_File_sync 3 "11/9/2015" " " "MPI"
+.TH MPI_File_sync 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_sync \- Causes all previous writes to be transferred to the storage device
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write.3 b/man/man3/MPI_File_write.3
index a49e6a1..6b8bcdd 100644
--- a/man/man3/MPI_File_write.3
+++ b/man/man3/MPI_File_write.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write \- Write using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_all.3 b/man/man3/MPI_File_write_all.3
index f9aa425..10a8fb4 100644
--- a/man/man3/MPI_File_write_all.3
+++ b/man/man3/MPI_File_write_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_all \- Collective write using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_all_begin.3 b/man/man3/MPI_File_write_all_begin.3
index 92a6f98..0e414d5 100644
--- a/man/man3/MPI_File_write_all_begin.3
+++ b/man/man3/MPI_File_write_all_begin.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_all_begin 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_all_begin 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_all_begin \- Begin a split collective write using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_all_end.3 b/man/man3/MPI_File_write_all_end.3
index ec2934b..9922982 100644
--- a/man/man3/MPI_File_write_all_end.3
+++ b/man/man3/MPI_File_write_all_end.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_all_end 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_all_end 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_all_end \- Complete a split collective write using individual file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_at.3 b/man/man3/MPI_File_write_at.3
index bfc42f5..8c60f48 100644
--- a/man/man3/MPI_File_write_at.3
+++ b/man/man3/MPI_File_write_at.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_at 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_at 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_at \- Write using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_at_all.3 b/man/man3/MPI_File_write_at_all.3
index 833346a..893c67d 100644
--- a/man/man3/MPI_File_write_at_all.3
+++ b/man/man3/MPI_File_write_at_all.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_at_all 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_at_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_at_all \- Collective write using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_at_all_begin.3 b/man/man3/MPI_File_write_at_all_begin.3
index 0a0bf7b..145604f 100644
--- a/man/man3/MPI_File_write_at_all_begin.3
+++ b/man/man3/MPI_File_write_at_all_begin.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_at_all_begin 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_at_all_begin 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_at_all_begin \- Begin a split collective write using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_at_all_end.3 b/man/man3/MPI_File_write_at_all_end.3
index e417646..31ef377 100644
--- a/man/man3/MPI_File_write_at_all_end.3
+++ b/man/man3/MPI_File_write_at_all_end.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_at_all_end 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_at_all_end 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_at_all_end \- Complete a split collective write using explicit offset
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_ordered.3 b/man/man3/MPI_File_write_ordered.3
index b6324f2..0f95d0b 100644
--- a/man/man3/MPI_File_write_ordered.3
+++ b/man/man3/MPI_File_write_ordered.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_ordered 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_ordered 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_ordered \- Collective write using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_ordered_begin.3 b/man/man3/MPI_File_write_ordered_begin.3
index 9d75a8f..63320cd 100644
--- a/man/man3/MPI_File_write_ordered_begin.3
+++ b/man/man3/MPI_File_write_ordered_begin.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_ordered_begin 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_ordered_begin 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_ordered_begin \- Begin a split collective write using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_ordered_end.3 b/man/man3/MPI_File_write_ordered_end.3
index c2ee569..dce17c8 100644
--- a/man/man3/MPI_File_write_ordered_end.3
+++ b/man/man3/MPI_File_write_ordered_end.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_ordered_end 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_ordered_end 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_ordered_end \- Complete a split collective write using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_File_write_shared.3 b/man/man3/MPI_File_write_shared.3
index affd414..0854022 100644
--- a/man/man3/MPI_File_write_shared.3
+++ b/man/man3/MPI_File_write_shared.3
@@ -1,4 +1,4 @@
-.TH MPI_File_write_shared 3 "11/9/2015" " " "MPI"
+.TH MPI_File_write_shared 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_File_write_shared \- Write using shared file pointer
.SH SYNOPSIS
diff --git a/man/man3/MPI_Finalize.3 b/man/man3/MPI_Finalize.3
index 59624c3..80bb428 100644
--- a/man/man3/MPI_Finalize.3
+++ b/man/man3/MPI_Finalize.3
@@ -1,4 +1,4 @@
-.TH MPI_Finalize 3 "11/9/2015" " " "MPI"
+.TH MPI_Finalize 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Finalize \- Terminates MPI execution environment
.SH SYNOPSIS
diff --git a/man/man3/MPI_Finalized.3 b/man/man3/MPI_Finalized.3
index 14ea24e..071e0fc 100644
--- a/man/man3/MPI_Finalized.3
+++ b/man/man3/MPI_Finalized.3
@@ -1,4 +1,4 @@
-.TH MPI_Finalized 3 "11/9/2015" " " "MPI"
+.TH MPI_Finalized 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Finalized \- Indicates whether
.I MPI_Finalize
diff --git a/man/man3/MPI_Free_mem.3 b/man/man3/MPI_Free_mem.3
index 9da0333..605483b 100644
--- a/man/man3/MPI_Free_mem.3
+++ b/man/man3/MPI_Free_mem.3
@@ -1,4 +1,4 @@
-.TH MPI_Free_mem 3 "11/9/2015" " " "MPI"
+.TH MPI_Free_mem 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Free_mem \- Free memory allocated with MPI_Alloc_mem
.SH SYNOPSIS
diff --git a/man/man3/MPI_Gather.3 b/man/man3/MPI_Gather.3
index 123eccf..84a3042 100644
--- a/man/man3/MPI_Gather.3
+++ b/man/man3/MPI_Gather.3
@@ -1,4 +1,4 @@
-.TH MPI_Gather 3 "11/9/2015" " " "MPI"
+.TH MPI_Gather 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Gather \- Gathers together values from a group of processes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Gatherv.3 b/man/man3/MPI_Gatherv.3
index 9eead42..becf3f7 100644
--- a/man/man3/MPI_Gatherv.3
+++ b/man/man3/MPI_Gatherv.3
@@ -1,4 +1,4 @@
-.TH MPI_Gatherv 3 "11/9/2015" " " "MPI"
+.TH MPI_Gatherv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Gatherv \- Gathers into specified locations from all processes in a group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get.3 b/man/man3/MPI_Get.3
index 1115711..91f2057 100644
--- a/man/man3/MPI_Get.3
+++ b/man/man3/MPI_Get.3
@@ -1,4 +1,4 @@
-.TH MPI_Get 3 "11/9/2015" " " "MPI"
+.TH MPI_Get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get \- Get data from a memory window on a remote process
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_accumulate.3 b/man/man3/MPI_Get_accumulate.3
index 7e7afa2..07fe6ef 100644
--- a/man/man3/MPI_Get_accumulate.3
+++ b/man/man3/MPI_Get_accumulate.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_accumulate 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_accumulate 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_accumulate \- Perform an atomic, one-sided read-and-accumulate operation.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_address.3 b/man/man3/MPI_Get_address.3
index f625999..08dc88f 100644
--- a/man/man3/MPI_Get_address.3
+++ b/man/man3/MPI_Get_address.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_address 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_address 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_address \- Get the address of a location in memory
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_count.3 b/man/man3/MPI_Get_count.3
index b88efa2..b9c04cd 100644
--- a/man/man3/MPI_Get_count.3
+++ b/man/man3/MPI_Get_count.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_count 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_count 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_count \- Gets the number of "top level" elements
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_elements.3 b/man/man3/MPI_Get_elements.3
index 475fc4f..f915168 100644
--- a/man/man3/MPI_Get_elements.3
+++ b/man/man3/MPI_Get_elements.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_elements 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_elements 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_elements \- Returns the number of basic elements in a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_elements_x.3 b/man/man3/MPI_Get_elements_x.3
index 1198a22..8df27d6 100644
--- a/man/man3/MPI_Get_elements_x.3
+++ b/man/man3/MPI_Get_elements_x.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_elements_x 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_elements_x 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_elements_x \- Returns the number of basic elements in a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_library_version.3 b/man/man3/MPI_Get_library_version.3
index 15e25ac..44f1b6a 100644
--- a/man/man3/MPI_Get_library_version.3
+++ b/man/man3/MPI_Get_library_version.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_library_version 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_library_version 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_library_version \- Return the version number of MPI library
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_processor_name.3 b/man/man3/MPI_Get_processor_name.3
index be0e899..7d2aa50 100644
--- a/man/man3/MPI_Get_processor_name.3
+++ b/man/man3/MPI_Get_processor_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_processor_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_processor_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_processor_name \- Gets the name of the processor
.SH SYNOPSIS
diff --git a/man/man3/MPI_Get_version.3 b/man/man3/MPI_Get_version.3
index 2efc938..8ac8278 100644
--- a/man/man3/MPI_Get_version.3
+++ b/man/man3/MPI_Get_version.3
@@ -1,4 +1,4 @@
-.TH MPI_Get_version 3 "11/9/2015" " " "MPI"
+.TH MPI_Get_version 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Get_version \- Return the version number of MPI
.SH SYNOPSIS
diff --git a/man/man3/MPI_Graph_create.3 b/man/man3/MPI_Graph_create.3
index c63059a..f439621 100644
--- a/man/man3/MPI_Graph_create.3
+++ b/man/man3/MPI_Graph_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Graph_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Graph_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Graph_create \- Makes a new communicator to which topology information has been attached
.SH SYNOPSIS
diff --git a/man/man3/MPI_Graph_get.3 b/man/man3/MPI_Graph_get.3
index 859d7ea..e78e4c5 100644
--- a/man/man3/MPI_Graph_get.3
+++ b/man/man3/MPI_Graph_get.3
@@ -1,4 +1,4 @@
-.TH MPI_Graph_get 3 "11/9/2015" " " "MPI"
+.TH MPI_Graph_get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Graph_get \- Retrieves graph topology information associated with a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Graph_map.3 b/man/man3/MPI_Graph_map.3
index 46445fb..b6fc411 100644
--- a/man/man3/MPI_Graph_map.3
+++ b/man/man3/MPI_Graph_map.3
@@ -1,4 +1,4 @@
-.TH MPI_Graph_map 3 "11/9/2015" " " "MPI"
+.TH MPI_Graph_map 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Graph_map \- Maps process to graph topology information
.SH SYNOPSIS
diff --git a/man/man3/MPI_Graph_neighbors.3 b/man/man3/MPI_Graph_neighbors.3
index bfd280b..352f4fb 100644
--- a/man/man3/MPI_Graph_neighbors.3
+++ b/man/man3/MPI_Graph_neighbors.3
@@ -1,4 +1,4 @@
-.TH MPI_Graph_neighbors 3 "11/9/2015" " " "MPI"
+.TH MPI_Graph_neighbors 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Graph_neighbors \- Returns the neighbors of a node associated with a graph topology
.SH SYNOPSIS
diff --git a/man/man3/MPI_Graph_neighbors_count.3 b/man/man3/MPI_Graph_neighbors_count.3
index 6b8b3b4..361dc0e 100644
--- a/man/man3/MPI_Graph_neighbors_count.3
+++ b/man/man3/MPI_Graph_neighbors_count.3
@@ -1,4 +1,4 @@
-.TH MPI_Graph_neighbors_count 3 "11/9/2015" " " "MPI"
+.TH MPI_Graph_neighbors_count 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Graph_neighbors_count \- Returns the number of neighbors of a node associated with a graph topology
.SH SYNOPSIS
diff --git a/man/man3/MPI_Graphdims_get.3 b/man/man3/MPI_Graphdims_get.3
index e6c6796..aa13f67 100644
--- a/man/man3/MPI_Graphdims_get.3
+++ b/man/man3/MPI_Graphdims_get.3
@@ -1,4 +1,4 @@
-.TH MPI_Graphdims_get 3 "11/9/2015" " " "MPI"
+.TH MPI_Graphdims_get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Graphdims_get \- Retrieves graph topology information associated with a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Grequest_complete.3 b/man/man3/MPI_Grequest_complete.3
index 0411ea4..36c44d9 100644
--- a/man/man3/MPI_Grequest_complete.3
+++ b/man/man3/MPI_Grequest_complete.3
@@ -1,4 +1,4 @@
-.TH MPI_Grequest_complete 3 "11/9/2015" " " "MPI"
+.TH MPI_Grequest_complete 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Grequest_complete \- Notify MPI that a user-defined request is complete
.SH SYNOPSIS
diff --git a/man/man3/MPI_Grequest_start.3 b/man/man3/MPI_Grequest_start.3
index a359a1b..97706f8 100644
--- a/man/man3/MPI_Grequest_start.3
+++ b/man/man3/MPI_Grequest_start.3
@@ -1,4 +1,4 @@
-.TH MPI_Grequest_start 3 "11/9/2015" " " "MPI"
+.TH MPI_Grequest_start 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Grequest_start \- Create and return a user-defined request
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_compare.3 b/man/man3/MPI_Group_compare.3
index 60b2089..137da8d 100644
--- a/man/man3/MPI_Group_compare.3
+++ b/man/man3/MPI_Group_compare.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_compare 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_compare 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_compare \- Compares two groups
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_difference.3 b/man/man3/MPI_Group_difference.3
index 245df3e..9de7edf 100644
--- a/man/man3/MPI_Group_difference.3
+++ b/man/man3/MPI_Group_difference.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_difference 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_difference 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_difference \- Makes a group from the difference of two groups
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_excl.3 b/man/man3/MPI_Group_excl.3
index 23e3253..24b1d89 100644
--- a/man/man3/MPI_Group_excl.3
+++ b/man/man3/MPI_Group_excl.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_excl 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_excl 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_excl \- Produces a group by reordering an existing group and taking only unlisted members
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_free.3 b/man/man3/MPI_Group_free.3
index 07e50b7..cef2d04 100644
--- a/man/man3/MPI_Group_free.3
+++ b/man/man3/MPI_Group_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_free \- Frees a group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_incl.3 b/man/man3/MPI_Group_incl.3
index e509b73..36cc1fc 100644
--- a/man/man3/MPI_Group_incl.3
+++ b/man/man3/MPI_Group_incl.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_incl 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_incl 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_incl \- Produces a group by reordering an existing group and taking only listed members
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_intersection.3 b/man/man3/MPI_Group_intersection.3
index a1d654a..acdd48e 100644
--- a/man/man3/MPI_Group_intersection.3
+++ b/man/man3/MPI_Group_intersection.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_intersection 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_intersection 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_intersection \- Produces a group as the intersection of two existing groups
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_range_excl.3 b/man/man3/MPI_Group_range_excl.3
index 9346387..3cf1321 100644
--- a/man/man3/MPI_Group_range_excl.3
+++ b/man/man3/MPI_Group_range_excl.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_range_excl 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_range_excl 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_range_excl \- Produces a group by excluding ranges of processes from an existing group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_range_incl.3 b/man/man3/MPI_Group_range_incl.3
index 36188d9..44b2de6 100644
--- a/man/man3/MPI_Group_range_incl.3
+++ b/man/man3/MPI_Group_range_incl.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_range_incl 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_range_incl 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_range_incl \- Creates a new group from ranges of ranks in an existing group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_rank.3 b/man/man3/MPI_Group_rank.3
index b659123..395a70e 100644
--- a/man/man3/MPI_Group_rank.3
+++ b/man/man3/MPI_Group_rank.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_rank 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_rank 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_rank \- Returns the rank of this process in the given group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_size.3 b/man/man3/MPI_Group_size.3
index 47f5c37..fcec411 100644
--- a/man/man3/MPI_Group_size.3
+++ b/man/man3/MPI_Group_size.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_size 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_size \- Returns the size of a group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_translate_ranks.3 b/man/man3/MPI_Group_translate_ranks.3
index 148512b..65ef29e 100644
--- a/man/man3/MPI_Group_translate_ranks.3
+++ b/man/man3/MPI_Group_translate_ranks.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_translate_ranks 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_translate_ranks 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_translate_ranks \- Translates the ranks of processes in one group to those in another group
.SH SYNOPSIS
diff --git a/man/man3/MPI_Group_union.3 b/man/man3/MPI_Group_union.3
index c01c846..26e97e0 100644
--- a/man/man3/MPI_Group_union.3
+++ b/man/man3/MPI_Group_union.3
@@ -1,4 +1,4 @@
-.TH MPI_Group_union 3 "11/9/2015" " " "MPI"
+.TH MPI_Group_union 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Group_union \- Produces a group by combining two groups
.SH SYNOPSIS
diff --git a/man/man3/MPI_Iallgather.3 b/man/man3/MPI_Iallgather.3
index b843473..f3b502a 100644
--- a/man/man3/MPI_Iallgather.3
+++ b/man/man3/MPI_Iallgather.3
@@ -1,4 +1,4 @@
-.TH MPI_Iallgather 3 "11/9/2015" " " "MPI"
+.TH MPI_Iallgather 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iallgather \- Gathers data from all tasks and distribute the combined data to all tasks in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Iallgatherv.3 b/man/man3/MPI_Iallgatherv.3
index 3f665c4..d13a5f7 100644
--- a/man/man3/MPI_Iallgatherv.3
+++ b/man/man3/MPI_Iallgatherv.3
@@ -1,4 +1,4 @@
-.TH MPI_Iallgatherv 3 "11/9/2015" " " "MPI"
+.TH MPI_Iallgatherv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iallgatherv \- Gathers data from all tasks and deliver the combined data to all tasks in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Iallreduce.3 b/man/man3/MPI_Iallreduce.3
index 0b06d34..298c8db 100644
--- a/man/man3/MPI_Iallreduce.3
+++ b/man/man3/MPI_Iallreduce.3
@@ -1,4 +1,4 @@
-.TH MPI_Iallreduce 3 "11/9/2015" " " "MPI"
+.TH MPI_Iallreduce 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iallreduce \- Combines values from all processes and distributes the result back to all processes in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ialltoall.3 b/man/man3/MPI_Ialltoall.3
index e3e7cae..65cc0fe 100644
--- a/man/man3/MPI_Ialltoall.3
+++ b/man/man3/MPI_Ialltoall.3
@@ -1,4 +1,4 @@
-.TH MPI_Ialltoall 3 "11/9/2015" " " "MPI"
+.TH MPI_Ialltoall 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ialltoall \- Sends data from all to all processes in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ialltoallv.3 b/man/man3/MPI_Ialltoallv.3
index 43eb5fd..e6f8453 100644
--- a/man/man3/MPI_Ialltoallv.3
+++ b/man/man3/MPI_Ialltoallv.3
@@ -1,4 +1,4 @@
-.TH MPI_Ialltoallv 3 "11/9/2015" " " "MPI"
+.TH MPI_Ialltoallv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ialltoallv \- Sends data from all to all processes in a nonblocking way; each process may send a different amount of data and provide displacements for the input and output data.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ialltoallw.3 b/man/man3/MPI_Ialltoallw.3
index 1178474..19cd70a 100644
--- a/man/man3/MPI_Ialltoallw.3
+++ b/man/man3/MPI_Ialltoallw.3
@@ -1,4 +1,4 @@
-.TH MPI_Ialltoallw 3 "11/9/2015" " " "MPI"
+.TH MPI_Ialltoallw 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ialltoallw \- Nonblocking generalized all-to-all communication allowing different datatypes, counts, and displacements for each partner
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ibarrier.3 b/man/man3/MPI_Ibarrier.3
index aeb914b..022d486 100644
--- a/man/man3/MPI_Ibarrier.3
+++ b/man/man3/MPI_Ibarrier.3
@@ -1,4 +1,4 @@
-.TH MPI_Ibarrier 3 "11/9/2015" " " "MPI"
+.TH MPI_Ibarrier 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ibarrier \- Notifies the process that it has reached the barrier and returns immediately
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ibcast.3 b/man/man3/MPI_Ibcast.3
index 1853ee7..e28a91d 100644
--- a/man/man3/MPI_Ibcast.3
+++ b/man/man3/MPI_Ibcast.3
@@ -1,4 +1,4 @@
-.TH MPI_Ibcast 3 "11/9/2015" " " "MPI"
+.TH MPI_Ibcast 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ibcast \- Broadcasts a message from the process with rank "root" to all other processes of the communicator in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ibsend.3 b/man/man3/MPI_Ibsend.3
index b7a8517..3f2db30 100644
--- a/man/man3/MPI_Ibsend.3
+++ b/man/man3/MPI_Ibsend.3
@@ -1,4 +1,4 @@
-.TH MPI_Ibsend 3 "11/9/2015" " " "MPI"
+.TH MPI_Ibsend 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ibsend \- Starts a nonblocking buffered send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Iexscan.3 b/man/man3/MPI_Iexscan.3
index 1f56286..9171789 100644
--- a/man/man3/MPI_Iexscan.3
+++ b/man/man3/MPI_Iexscan.3
@@ -1,4 +1,4 @@
-.TH MPI_Iexscan 3 "11/9/2015" " " "MPI"
+.TH MPI_Iexscan 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iexscan \- Computes the exclusive scan (partial reductions) of data on a collection of processes in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Igather.3 b/man/man3/MPI_Igather.3
index 8740e84..1b5ae5c 100644
--- a/man/man3/MPI_Igather.3
+++ b/man/man3/MPI_Igather.3
@@ -1,4 +1,4 @@
-.TH MPI_Igather 3 "11/9/2015" " " "MPI"
+.TH MPI_Igather 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Igather \- Gathers together values from a group of processes in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Igatherv.3 b/man/man3/MPI_Igatherv.3
index fe5c696..1fb73c0 100644
--- a/man/man3/MPI_Igatherv.3
+++ b/man/man3/MPI_Igatherv.3
@@ -1,4 +1,4 @@
-.TH MPI_Igatherv 3 "11/9/2015" " " "MPI"
+.TH MPI_Igatherv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Igatherv \- Gathers into specified locations from all processes in a group in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Improbe.3 b/man/man3/MPI_Improbe.3
index cf35e7f..01bc973 100644
--- a/man/man3/MPI_Improbe.3
+++ b/man/man3/MPI_Improbe.3
@@ -1,4 +1,4 @@
-.TH MPI_Improbe 3 "11/9/2015" " " "MPI"
+.TH MPI_Improbe 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Improbe \- Nonblocking matched probe.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Imrecv.3 b/man/man3/MPI_Imrecv.3
index 969cf82..55f88a8 100644
--- a/man/man3/MPI_Imrecv.3
+++ b/man/man3/MPI_Imrecv.3
@@ -1,4 +1,4 @@
-.TH MPI_Imrecv 3 "11/9/2015" " " "MPI"
+.TH MPI_Imrecv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Imrecv \- Nonblocking receive of message matched by MPI_Mprobe or MPI_Improbe.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ineighbor_allgather.3 b/man/man3/MPI_Ineighbor_allgather.3
index 54c75f7..54a1c24 100644
--- a/man/man3/MPI_Ineighbor_allgather.3
+++ b/man/man3/MPI_Ineighbor_allgather.3
@@ -1,4 +1,4 @@
-.TH MPI_Ineighbor_allgather 3 "11/9/2015" " " "MPI"
+.TH MPI_Ineighbor_allgather 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ineighbor_allgather \- Nonblocking version of MPI_Neighbor_allgather.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ineighbor_allgatherv.3 b/man/man3/MPI_Ineighbor_allgatherv.3
index 4f41fc3..e6b894a 100644
--- a/man/man3/MPI_Ineighbor_allgatherv.3
+++ b/man/man3/MPI_Ineighbor_allgatherv.3
@@ -1,4 +1,4 @@
-.TH MPI_Ineighbor_allgatherv 3 "11/9/2015" " " "MPI"
+.TH MPI_Ineighbor_allgatherv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ineighbor_allgatherv \- Nonblocking version of MPI_Neighbor_allgatherv.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ineighbor_alltoall.3 b/man/man3/MPI_Ineighbor_alltoall.3
index e26b662..f39f4bd 100644
--- a/man/man3/MPI_Ineighbor_alltoall.3
+++ b/man/man3/MPI_Ineighbor_alltoall.3
@@ -1,4 +1,4 @@
-.TH MPI_Ineighbor_alltoall 3 "11/9/2015" " " "MPI"
+.TH MPI_Ineighbor_alltoall 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ineighbor_alltoall \- Nonblocking version of MPI_Neighbor_alltoall.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ineighbor_alltoallv.3 b/man/man3/MPI_Ineighbor_alltoallv.3
index da5425b..c8931fb 100644
--- a/man/man3/MPI_Ineighbor_alltoallv.3
+++ b/man/man3/MPI_Ineighbor_alltoallv.3
@@ -1,4 +1,4 @@
-.TH MPI_Ineighbor_alltoallv 3 "11/9/2015" " " "MPI"
+.TH MPI_Ineighbor_alltoallv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ineighbor_alltoallv \- Nonblocking version of MPI_Neighbor_alltoallv.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ineighbor_alltoallw.3 b/man/man3/MPI_Ineighbor_alltoallw.3
index 1486b70..f3e5fcd 100644
--- a/man/man3/MPI_Ineighbor_alltoallw.3
+++ b/man/man3/MPI_Ineighbor_alltoallw.3
@@ -1,4 +1,4 @@
-.TH MPI_Ineighbor_alltoallw 3 "11/9/2015" " " "MPI"
+.TH MPI_Ineighbor_alltoallw 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ineighbor_alltoallw \- Nonblocking version of MPI_Neighbor_alltoallw.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_create.3 b/man/man3/MPI_Info_create.3
index bbeafba..276e94a 100644
--- a/man/man3/MPI_Info_create.3
+++ b/man/man3/MPI_Info_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_create \- Creates a new info object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_delete.3 b/man/man3/MPI_Info_delete.3
index 20da2e6..05b220a 100644
--- a/man/man3/MPI_Info_delete.3
+++ b/man/man3/MPI_Info_delete.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_delete 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_delete 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_delete \- Deletes a (key,value) pair from info
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_dup.3 b/man/man3/MPI_Info_dup.3
index 922aca2..fcd5dd3 100644
--- a/man/man3/MPI_Info_dup.3
+++ b/man/man3/MPI_Info_dup.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_dup 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_dup 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_dup \- Returns a duplicate of the info object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_free.3 b/man/man3/MPI_Info_free.3
index 1d478b7..ba18bfc 100644
--- a/man/man3/MPI_Info_free.3
+++ b/man/man3/MPI_Info_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_free \- Frees an info object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_get.3 b/man/man3/MPI_Info_get.3
index 237656e..508aadb 100644
--- a/man/man3/MPI_Info_get.3
+++ b/man/man3/MPI_Info_get.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_get 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_get 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_get \- Retrieves the value associated with a key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_get_nkeys.3 b/man/man3/MPI_Info_get_nkeys.3
index 85f90a6..c6d64f4 100644
--- a/man/man3/MPI_Info_get_nkeys.3
+++ b/man/man3/MPI_Info_get_nkeys.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_get_nkeys 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_get_nkeys 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_get_nkeys \- Returns the number of currently defined keys in info
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_get_nthkey.3 b/man/man3/MPI_Info_get_nthkey.3
index 153c1f5..96263fa 100644
--- a/man/man3/MPI_Info_get_nthkey.3
+++ b/man/man3/MPI_Info_get_nthkey.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_get_nthkey 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_get_nthkey 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_get_nthkey \- Returns the nth defined key in info
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_get_valuelen.3 b/man/man3/MPI_Info_get_valuelen.3
index 867e3fa..b781f0f 100644
--- a/man/man3/MPI_Info_get_valuelen.3
+++ b/man/man3/MPI_Info_get_valuelen.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_get_valuelen 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_get_valuelen 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_get_valuelen \- Retrieves the length of the value associated with a key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Info_set.3 b/man/man3/MPI_Info_set.3
index aca1191..2b51057 100644
--- a/man/man3/MPI_Info_set.3
+++ b/man/man3/MPI_Info_set.3
@@ -1,4 +1,4 @@
-.TH MPI_Info_set 3 "11/9/2015" " " "MPI"
+.TH MPI_Info_set 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Info_set \- Adds a (key,value) pair to info
.SH SYNOPSIS
diff --git a/man/man3/MPI_Init.3 b/man/man3/MPI_Init.3
index 55f3750..367def9 100644
--- a/man/man3/MPI_Init.3
+++ b/man/man3/MPI_Init.3
@@ -1,4 +1,4 @@
-.TH MPI_Init 3 "11/9/2015" " " "MPI"
+.TH MPI_Init 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Init \- Initialize the MPI execution environment
.SH SYNOPSIS
diff --git a/man/man3/MPI_Init_thread.3 b/man/man3/MPI_Init_thread.3
index 0e06435..36a147e 100644
--- a/man/man3/MPI_Init_thread.3
+++ b/man/man3/MPI_Init_thread.3
@@ -1,4 +1,4 @@
-.TH MPI_Init_thread 3 "11/9/2015" " " "MPI"
+.TH MPI_Init_thread 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Init_thread \- Initialize the MPI execution environment
.SH SYNOPSIS
diff --git a/man/man3/MPI_Initialized.3 b/man/man3/MPI_Initialized.3
index e663340..f494624 100644
--- a/man/man3/MPI_Initialized.3
+++ b/man/man3/MPI_Initialized.3
@@ -1,4 +1,4 @@
-.TH MPI_Initialized 3 "11/9/2015" " " "MPI"
+.TH MPI_Initialized 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Initialized \- Indicates whether
.I MPI_Init
diff --git a/man/man3/MPI_Intercomm_create.3 b/man/man3/MPI_Intercomm_create.3
index 29f590a..3902a6d 100644
--- a/man/man3/MPI_Intercomm_create.3
+++ b/man/man3/MPI_Intercomm_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Intercomm_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Intercomm_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Intercomm_create \- Creates an intercommuncator from two intracommunicators
.SH SYNOPSIS
diff --git a/man/man3/MPI_Intercomm_merge.3 b/man/man3/MPI_Intercomm_merge.3
index 4c8f7c8..29c889f 100644
--- a/man/man3/MPI_Intercomm_merge.3
+++ b/man/man3/MPI_Intercomm_merge.3
@@ -1,4 +1,4 @@
-.TH MPI_Intercomm_merge 3 "11/9/2015" " " "MPI"
+.TH MPI_Intercomm_merge 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Intercomm_merge \- Creates an intracommuncator from an intercommunicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Iprobe.3 b/man/man3/MPI_Iprobe.3
index 2c06e46..acd5fae 100644
--- a/man/man3/MPI_Iprobe.3
+++ b/man/man3/MPI_Iprobe.3
@@ -1,4 +1,4 @@
-.TH MPI_Iprobe 3 "11/9/2015" " " "MPI"
+.TH MPI_Iprobe 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iprobe \- Nonblocking test for a message
.SH SYNOPSIS
diff --git a/man/man3/MPI_Irecv.3 b/man/man3/MPI_Irecv.3
index fef68f9..2924bd1 100644
--- a/man/man3/MPI_Irecv.3
+++ b/man/man3/MPI_Irecv.3
@@ -1,4 +1,4 @@
-.TH MPI_Irecv 3 "11/9/2015" " " "MPI"
+.TH MPI_Irecv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Irecv \- Begins a nonblocking receive
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ireduce.3 b/man/man3/MPI_Ireduce.3
index d07b16c..8c39aa7 100644
--- a/man/man3/MPI_Ireduce.3
+++ b/man/man3/MPI_Ireduce.3
@@ -1,4 +1,4 @@
-.TH MPI_Ireduce 3 "11/9/2015" " " "MPI"
+.TH MPI_Ireduce 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ireduce \- Reduces values on all processes to a single value in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ireduce_scatter.3 b/man/man3/MPI_Ireduce_scatter.3
index 1391751..388a5da 100644
--- a/man/man3/MPI_Ireduce_scatter.3
+++ b/man/man3/MPI_Ireduce_scatter.3
@@ -1,4 +1,4 @@
-.TH MPI_Ireduce_scatter 3 "11/9/2015" " " "MPI"
+.TH MPI_Ireduce_scatter 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ireduce_scatter \- Combines values and scatters the results in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ireduce_scatter_block.3 b/man/man3/MPI_Ireduce_scatter_block.3
index e0a1129..ecfe15f 100644
--- a/man/man3/MPI_Ireduce_scatter_block.3
+++ b/man/man3/MPI_Ireduce_scatter_block.3
@@ -1,4 +1,4 @@
-.TH MPI_Ireduce_scatter_block 3 "11/9/2015" " " "MPI"
+.TH MPI_Ireduce_scatter_block 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ireduce_scatter_block \- Combines values and scatters the results in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Irsend.3 b/man/man3/MPI_Irsend.3
index a62b7dc..9114e91 100644
--- a/man/man3/MPI_Irsend.3
+++ b/man/man3/MPI_Irsend.3
@@ -1,4 +1,4 @@
-.TH MPI_Irsend 3 "11/9/2015" " " "MPI"
+.TH MPI_Irsend 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Irsend \- Starts a nonblocking ready send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Is_thread_main.3 b/man/man3/MPI_Is_thread_main.3
index 72d03cc..f23902d 100644
--- a/man/man3/MPI_Is_thread_main.3
+++ b/man/man3/MPI_Is_thread_main.3
@@ -1,4 +1,4 @@
-.TH MPI_Is_thread_main 3 "11/9/2015" " " "MPI"
+.TH MPI_Is_thread_main 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Is_thread_main \- Returns a flag indicating whether this thread called
.I MPI_Init
diff --git a/man/man3/MPI_Iscan.3 b/man/man3/MPI_Iscan.3
index 2354eb4..da1ce7c 100644
--- a/man/man3/MPI_Iscan.3
+++ b/man/man3/MPI_Iscan.3
@@ -1,4 +1,4 @@
-.TH MPI_Iscan 3 "11/9/2015" " " "MPI"
+.TH MPI_Iscan 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iscan \- Computes the scan (partial reductions) of data on a collection of processes in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Iscatter.3 b/man/man3/MPI_Iscatter.3
index 7c2d69b..5821e1d 100644
--- a/man/man3/MPI_Iscatter.3
+++ b/man/man3/MPI_Iscatter.3
@@ -1,4 +1,4 @@
-.TH MPI_Iscatter 3 "11/9/2015" " " "MPI"
+.TH MPI_Iscatter 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iscatter \- Sends data from one process to all other processes in a communicator in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Iscatterv.3 b/man/man3/MPI_Iscatterv.3
index c1625aa..aaa3cbb 100644
--- a/man/man3/MPI_Iscatterv.3
+++ b/man/man3/MPI_Iscatterv.3
@@ -1,4 +1,4 @@
-.TH MPI_Iscatterv 3 "11/9/2015" " " "MPI"
+.TH MPI_Iscatterv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Iscatterv \- Scatters a buffer in parts to all processes in a communicator in a nonblocking way
.SH SYNOPSIS
diff --git a/man/man3/MPI_Isend.3 b/man/man3/MPI_Isend.3
index 0805913..15212ba 100644
--- a/man/man3/MPI_Isend.3
+++ b/man/man3/MPI_Isend.3
@@ -1,4 +1,4 @@
-.TH MPI_Isend 3 "11/9/2015" " " "MPI"
+.TH MPI_Isend 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Isend \- Begins a nonblocking send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Issend.3 b/man/man3/MPI_Issend.3
index ce3a8fc..870f471 100644
--- a/man/man3/MPI_Issend.3
+++ b/man/man3/MPI_Issend.3
@@ -1,4 +1,4 @@
-.TH MPI_Issend 3 "11/9/2015" " " "MPI"
+.TH MPI_Issend 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Issend \- Starts a nonblocking synchronous send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Keyval_create.3 b/man/man3/MPI_Keyval_create.3
index c02812f..d24e52c 100644
--- a/man/man3/MPI_Keyval_create.3
+++ b/man/man3/MPI_Keyval_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Keyval_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Keyval_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Keyval_create \- Greates a new attribute key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Keyval_free.3 b/man/man3/MPI_Keyval_free.3
index 035a4ea..751687e 100644
--- a/man/man3/MPI_Keyval_free.3
+++ b/man/man3/MPI_Keyval_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Keyval_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Keyval_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Keyval_free \- Frees an attribute key for communicators
.SH SYNOPSIS
diff --git a/man/man3/MPI_Lookup_name.3 b/man/man3/MPI_Lookup_name.3
index 12ed779..9b578b2 100644
--- a/man/man3/MPI_Lookup_name.3
+++ b/man/man3/MPI_Lookup_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Lookup_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Lookup_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Lookup_name \- Lookup a port given a service name
.SH SYNOPSIS
diff --git a/man/man3/MPI_Mprobe.3 b/man/man3/MPI_Mprobe.3
index e85276c..85a780a 100644
--- a/man/man3/MPI_Mprobe.3
+++ b/man/man3/MPI_Mprobe.3
@@ -1,4 +1,4 @@
-.TH MPI_Mprobe 3 "11/9/2015" " " "MPI"
+.TH MPI_Mprobe 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Mprobe \- Blocking matched probe.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Mrecv.3 b/man/man3/MPI_Mrecv.3
index 364fab7..b3827da 100644
--- a/man/man3/MPI_Mrecv.3
+++ b/man/man3/MPI_Mrecv.3
@@ -1,4 +1,4 @@
-.TH MPI_Mrecv 3 "11/9/2015" " " "MPI"
+.TH MPI_Mrecv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Mrecv \- Blocking receive of message matched by MPI_Mprobe or MPI_Improbe.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Neighbor_allgather.3 b/man/man3/MPI_Neighbor_allgather.3
index 7e836a3..ac93c35 100644
--- a/man/man3/MPI_Neighbor_allgather.3
+++ b/man/man3/MPI_Neighbor_allgather.3
@@ -1,4 +1,4 @@
-.TH MPI_Neighbor_allgather 3 "11/9/2015" " " "MPI"
+.TH MPI_Neighbor_allgather 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Neighbor_allgather \- In this function, each process i gathers data items from each process j if an edge (j,i) exists in the topology graph, and each process i sends the same data items to all processes j where an edge (i,j) exists. The send buffer is sent to each neighboring process and the l-th block in the receive buffer is received from the l-th neighbor.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Neighbor_allgatherv.3 b/man/man3/MPI_Neighbor_allgatherv.3
index ef26352..3fa297d 100644
--- a/man/man3/MPI_Neighbor_allgatherv.3
+++ b/man/man3/MPI_Neighbor_allgatherv.3
@@ -1,4 +1,4 @@
-.TH MPI_Neighbor_allgatherv 3 "11/9/2015" " " "MPI"
+.TH MPI_Neighbor_allgatherv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Neighbor_allgatherv \- The vector variant of MPI_Neighbor_allgather.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Neighbor_alltoall.3 b/man/man3/MPI_Neighbor_alltoall.3
index 4f5bf66..9ea683d 100644
--- a/man/man3/MPI_Neighbor_alltoall.3
+++ b/man/man3/MPI_Neighbor_alltoall.3
@@ -1,4 +1,4 @@
-.TH MPI_Neighbor_alltoall 3 "11/9/2015" " " "MPI"
+.TH MPI_Neighbor_alltoall 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Neighbor_alltoall \- In this function, each process i receives data items from each process j if an edge (j,i) exists in the topology graph or Cartesian topology. Similarly, each process i sends data items to all processes j where an edge (i,j) exists. This call is more general than MPI_NEIGHBOR_ALLGATHER in that different data items can be sent to each neighbor. The k-th block in send buffer is sent to the k-th neighboring process and the l-th block in the receive buffer is receiv [...]
.SH SYNOPSIS
diff --git a/man/man3/MPI_Neighbor_alltoallv.3 b/man/man3/MPI_Neighbor_alltoallv.3
index 6ca689c..2d85f10 100644
--- a/man/man3/MPI_Neighbor_alltoallv.3
+++ b/man/man3/MPI_Neighbor_alltoallv.3
@@ -1,4 +1,4 @@
-.TH MPI_Neighbor_alltoallv 3 "11/9/2015" " " "MPI"
+.TH MPI_Neighbor_alltoallv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Neighbor_alltoallv \- The vector variant of MPI_Neighbor_alltoall allows sending/receiving different numbers of elements to and from each neighbor.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Neighbor_alltoallw.3 b/man/man3/MPI_Neighbor_alltoallw.3
index f4fe078..d986e70 100644
--- a/man/man3/MPI_Neighbor_alltoallw.3
+++ b/man/man3/MPI_Neighbor_alltoallw.3
@@ -1,4 +1,4 @@
-.TH MPI_Neighbor_alltoallw 3 "11/9/2015" " " "MPI"
+.TH MPI_Neighbor_alltoallw 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Neighbor_alltoallw \- Like MPI_Neighbor_alltoallv but it allows one to send and receive with different types to and from each neighbor.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Op_commute.3 b/man/man3/MPI_Op_commute.3
index a2681e6..3ee8840 100644
--- a/man/man3/MPI_Op_commute.3
+++ b/man/man3/MPI_Op_commute.3
@@ -1,4 +1,4 @@
-.TH MPI_Op_commute 3 "11/9/2015" " " "MPI"
+.TH MPI_Op_commute 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Op_commute \- Queries an MPI reduction operation for its commutativity.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Op_create.3 b/man/man3/MPI_Op_create.3
index 60e5287..ec56f57 100644
--- a/man/man3/MPI_Op_create.3
+++ b/man/man3/MPI_Op_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Op_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Op_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Op_create \- Creates a user-defined combination function handle
.SH SYNOPSIS
diff --git a/man/man3/MPI_Op_free.3 b/man/man3/MPI_Op_free.3
index 64126fe..70b7ab8 100644
--- a/man/man3/MPI_Op_free.3
+++ b/man/man3/MPI_Op_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Op_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Op_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Op_free \- Frees a user-defined combination function handle
.SH SYNOPSIS
diff --git a/man/man3/MPI_Open_port.3 b/man/man3/MPI_Open_port.3
index 6497c02..7462fb8 100644
--- a/man/man3/MPI_Open_port.3
+++ b/man/man3/MPI_Open_port.3
@@ -1,4 +1,4 @@
-.TH MPI_Open_port 3 "11/9/2015" " " "MPI"
+.TH MPI_Open_port 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Open_port \- Establish an address that can be used to establish connections between groups of MPI processes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Pack.3 b/man/man3/MPI_Pack.3
index 0493d72..5f8e009 100644
--- a/man/man3/MPI_Pack.3
+++ b/man/man3/MPI_Pack.3
@@ -1,4 +1,4 @@
-.TH MPI_Pack 3 "11/9/2015" " " "MPI"
+.TH MPI_Pack 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Pack \- Packs a datatype into contiguous memory
.SH SYNOPSIS
diff --git a/man/man3/MPI_Pack_external.3 b/man/man3/MPI_Pack_external.3
index f47919a..a33cc09 100644
--- a/man/man3/MPI_Pack_external.3
+++ b/man/man3/MPI_Pack_external.3
@@ -1,4 +1,4 @@
-.TH MPI_Pack_external 3 "11/9/2015" " " "MPI"
+.TH MPI_Pack_external 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Pack_external \- Packs a datatype into contiguous memory, using the external32 format
.SH SYNOPSIS
diff --git a/man/man3/MPI_Pack_external_size.3 b/man/man3/MPI_Pack_external_size.3
index f9e87ee..b221f3a 100644
--- a/man/man3/MPI_Pack_external_size.3
+++ b/man/man3/MPI_Pack_external_size.3
@@ -1,4 +1,4 @@
-.TH MPI_Pack_external_size 3 "11/9/2015" " " "MPI"
+.TH MPI_Pack_external_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Pack_external_size \- Returns the upper bound on the amount of space needed to pack a message using MPI_Pack_external.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Pack_size.3 b/man/man3/MPI_Pack_size.3
index 9872350..2e53a51 100644
--- a/man/man3/MPI_Pack_size.3
+++ b/man/man3/MPI_Pack_size.3
@@ -1,4 +1,4 @@
-.TH MPI_Pack_size 3 "11/9/2015" " " "MPI"
+.TH MPI_Pack_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Pack_size \- Returns the upper bound on the amount of space needed to pack a message
.SH SYNOPSIS
diff --git a/man/man3/MPI_Pcontrol.3 b/man/man3/MPI_Pcontrol.3
index 4495e82..f8eafee 100644
--- a/man/man3/MPI_Pcontrol.3
+++ b/man/man3/MPI_Pcontrol.3
@@ -1,4 +1,4 @@
-.TH MPI_Pcontrol 3 "11/9/2015" " " "MPI"
+.TH MPI_Pcontrol 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Pcontrol \- Controls profiling
.SH SYNOPSIS
diff --git a/man/man3/MPI_Probe.3 b/man/man3/MPI_Probe.3
index 750ae4c..9582c64 100644
--- a/man/man3/MPI_Probe.3
+++ b/man/man3/MPI_Probe.3
@@ -1,4 +1,4 @@
-.TH MPI_Probe 3 "11/9/2015" " " "MPI"
+.TH MPI_Probe 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Probe \- Blocking test for a message
.SH SYNOPSIS
diff --git a/man/man3/MPI_Publish_name.3 b/man/man3/MPI_Publish_name.3
index f500013..9b640ef 100644
--- a/man/man3/MPI_Publish_name.3
+++ b/man/man3/MPI_Publish_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Publish_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Publish_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Publish_name \- Publish a service name for use with MPI_Comm_connect
.SH SYNOPSIS
diff --git a/man/man3/MPI_Put.3 b/man/man3/MPI_Put.3
index 0676fd9..3dde867 100644
--- a/man/man3/MPI_Put.3
+++ b/man/man3/MPI_Put.3
@@ -1,4 +1,4 @@
-.TH MPI_Put 3 "11/9/2015" " " "MPI"
+.TH MPI_Put 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Put \- Put data into a memory window on a remote process
.SH SYNOPSIS
diff --git a/man/man3/MPI_Query_thread.3 b/man/man3/MPI_Query_thread.3
index d4f3308..7897348 100644
--- a/man/man3/MPI_Query_thread.3
+++ b/man/man3/MPI_Query_thread.3
@@ -1,4 +1,4 @@
-.TH MPI_Query_thread 3 "11/9/2015" " " "MPI"
+.TH MPI_Query_thread 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Query_thread \- Return the level of thread support provided by the MPI library
.SH SYNOPSIS
diff --git a/man/man3/MPI_Raccumulate.3 b/man/man3/MPI_Raccumulate.3
index 2e6bfa4..bc6ee93 100644
--- a/man/man3/MPI_Raccumulate.3
+++ b/man/man3/MPI_Raccumulate.3
@@ -1,4 +1,4 @@
-.TH MPI_Raccumulate 3 "11/9/2015" " " "MPI"
+.TH MPI_Raccumulate 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Raccumulate \- Accumulate data into the target process using remote memory access and return a request handle for the operation.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Recv.3 b/man/man3/MPI_Recv.3
index 2012536..0699f70 100644
--- a/man/man3/MPI_Recv.3
+++ b/man/man3/MPI_Recv.3
@@ -1,4 +1,4 @@
-.TH MPI_Recv 3 "11/9/2015" " " "MPI"
+.TH MPI_Recv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Recv \- Blocking receive for a message
.SH SYNOPSIS
diff --git a/man/man3/MPI_Recv_init.3 b/man/man3/MPI_Recv_init.3
index 4013a82..a3dc4b1 100644
--- a/man/man3/MPI_Recv_init.3
+++ b/man/man3/MPI_Recv_init.3
@@ -1,4 +1,4 @@
-.TH MPI_Recv_init 3 "11/9/2015" " " "MPI"
+.TH MPI_Recv_init 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Recv_init \- Create a persistent request for a receive
.SH SYNOPSIS
diff --git a/man/man3/MPI_Reduce.3 b/man/man3/MPI_Reduce.3
index 1c1a3d1..f60dc5b 100644
--- a/man/man3/MPI_Reduce.3
+++ b/man/man3/MPI_Reduce.3
@@ -1,4 +1,4 @@
-.TH MPI_Reduce 3 "11/9/2015" " " "MPI"
+.TH MPI_Reduce 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Reduce \- Reduces values on all processes to a single value
.SH SYNOPSIS
diff --git a/man/man3/MPI_Reduce_local.3 b/man/man3/MPI_Reduce_local.3
index 4ecdc32..b7b6453 100644
--- a/man/man3/MPI_Reduce_local.3
+++ b/man/man3/MPI_Reduce_local.3
@@ -1,4 +1,4 @@
-.TH MPI_Reduce_local 3 "11/9/2015" " " "MPI"
+.TH MPI_Reduce_local 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Reduce_local \- Applies a reduction operator to local arguments.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Reduce_scatter.3 b/man/man3/MPI_Reduce_scatter.3
index 7a3d69a..72ab533 100644
--- a/man/man3/MPI_Reduce_scatter.3
+++ b/man/man3/MPI_Reduce_scatter.3
@@ -1,4 +1,4 @@
-.TH MPI_Reduce_scatter 3 "11/9/2015" " " "MPI"
+.TH MPI_Reduce_scatter 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Reduce_scatter \- Combines values and scatters the results
.SH SYNOPSIS
diff --git a/man/man3/MPI_Reduce_scatter_block.3 b/man/man3/MPI_Reduce_scatter_block.3
index f5b17b3..1f9ad7c 100644
--- a/man/man3/MPI_Reduce_scatter_block.3
+++ b/man/man3/MPI_Reduce_scatter_block.3
@@ -1,4 +1,4 @@
-.TH MPI_Reduce_scatter_block 3 "11/9/2015" " " "MPI"
+.TH MPI_Reduce_scatter_block 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Reduce_scatter_block \- Combines values and scatters the results
.SH SYNOPSIS
diff --git a/man/man3/MPI_Register_datarep.3 b/man/man3/MPI_Register_datarep.3
index a8aa56c..18d5c5f 100644
--- a/man/man3/MPI_Register_datarep.3
+++ b/man/man3/MPI_Register_datarep.3
@@ -1,4 +1,4 @@
-.TH MPI_Register_datarep 3 "11/9/2015" " " "MPI"
+.TH MPI_Register_datarep 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Register_datarep \- Register functions for user-defined data representations
.SH SYNOPSIS
diff --git a/man/man3/MPI_Request_free.3 b/man/man3/MPI_Request_free.3
index 8970d71..9b6d2fd 100644
--- a/man/man3/MPI_Request_free.3
+++ b/man/man3/MPI_Request_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Request_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Request_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Request_free \- Frees a communication request object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Request_get_status.3 b/man/man3/MPI_Request_get_status.3
index 47536e1..f40823e 100644
--- a/man/man3/MPI_Request_get_status.3
+++ b/man/man3/MPI_Request_get_status.3
@@ -1,4 +1,4 @@
-.TH MPI_Request_get_status 3 "11/9/2015" " " "MPI"
+.TH MPI_Request_get_status 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Request_get_status \- Nondestructive test for the completion of a Request
.SH SYNOPSIS
diff --git a/man/man3/MPI_Rget.3 b/man/man3/MPI_Rget.3
index 5623008..4ee2ca3 100644
--- a/man/man3/MPI_Rget.3
+++ b/man/man3/MPI_Rget.3
@@ -1,4 +1,4 @@
-.TH MPI_Rget 3 "11/9/2015" " " "MPI"
+.TH MPI_Rget 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Rget \- Get data from a memory window on a remote process
.SH SYNOPSIS
diff --git a/man/man3/MPI_Rget_accumulate.3 b/man/man3/MPI_Rget_accumulate.3
index 126646e..004e389 100644
--- a/man/man3/MPI_Rget_accumulate.3
+++ b/man/man3/MPI_Rget_accumulate.3
@@ -1,4 +1,4 @@
-.TH MPI_Rget_accumulate 3 "11/9/2015" " " "MPI"
+.TH MPI_Rget_accumulate 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Rget_accumulate \- Perform an atomic, one-sided read-and-accumulate operation and return a request handle for the operation.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Rput.3 b/man/man3/MPI_Rput.3
index aca856a..4b0e4a4 100644
--- a/man/man3/MPI_Rput.3
+++ b/man/man3/MPI_Rput.3
@@ -1,4 +1,4 @@
-.TH MPI_Rput 3 "11/9/2015" " " "MPI"
+.TH MPI_Rput 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Rput \- Put data into a memory window on a remote process and return a request handle for the operation.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Rsend.3 b/man/man3/MPI_Rsend.3
index 64cb2c0..c3ac059 100644
--- a/man/man3/MPI_Rsend.3
+++ b/man/man3/MPI_Rsend.3
@@ -1,4 +1,4 @@
-.TH MPI_Rsend 3 "11/9/2015" " " "MPI"
+.TH MPI_Rsend 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Rsend \- Blocking ready send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Rsend_init.3 b/man/man3/MPI_Rsend_init.3
index 77a7ac4..af478fc 100644
--- a/man/man3/MPI_Rsend_init.3
+++ b/man/man3/MPI_Rsend_init.3
@@ -1,4 +1,4 @@
-.TH MPI_Rsend_init 3 "11/9/2015" " " "MPI"
+.TH MPI_Rsend_init 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Rsend_init \- Creates a persistent request for a ready send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Scan.3 b/man/man3/MPI_Scan.3
index 9483af3..d7c3046 100644
--- a/man/man3/MPI_Scan.3
+++ b/man/man3/MPI_Scan.3
@@ -1,4 +1,4 @@
-.TH MPI_Scan 3 "11/9/2015" " " "MPI"
+.TH MPI_Scan 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Scan \- Computes the scan (partial reductions) of data on a collection of processes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Scatter.3 b/man/man3/MPI_Scatter.3
index f23dfb8..98a5092 100644
--- a/man/man3/MPI_Scatter.3
+++ b/man/man3/MPI_Scatter.3
@@ -1,4 +1,4 @@
-.TH MPI_Scatter 3 "11/9/2015" " " "MPI"
+.TH MPI_Scatter 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Scatter \- Sends data from one process to all other processes in a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Scatterv.3 b/man/man3/MPI_Scatterv.3
index f17baa9..df556dc 100644
--- a/man/man3/MPI_Scatterv.3
+++ b/man/man3/MPI_Scatterv.3
@@ -1,4 +1,4 @@
-.TH MPI_Scatterv 3 "11/9/2015" " " "MPI"
+.TH MPI_Scatterv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Scatterv \- Scatters a buffer in parts to all processes in a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Send.3 b/man/man3/MPI_Send.3
index 12f958f..fe9785a 100644
--- a/man/man3/MPI_Send.3
+++ b/man/man3/MPI_Send.3
@@ -1,4 +1,4 @@
-.TH MPI_Send 3 "11/9/2015" " " "MPI"
+.TH MPI_Send 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Send \- Performs a blocking send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Send_init.3 b/man/man3/MPI_Send_init.3
index b511e40..8911248 100644
--- a/man/man3/MPI_Send_init.3
+++ b/man/man3/MPI_Send_init.3
@@ -1,4 +1,4 @@
-.TH MPI_Send_init 3 "11/9/2015" " " "MPI"
+.TH MPI_Send_init 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Send_init \- Create a persistent request for a standard send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Sendrecv.3 b/man/man3/MPI_Sendrecv.3
index 1783962..0b562dc 100644
--- a/man/man3/MPI_Sendrecv.3
+++ b/man/man3/MPI_Sendrecv.3
@@ -1,4 +1,4 @@
-.TH MPI_Sendrecv 3 "11/9/2015" " " "MPI"
+.TH MPI_Sendrecv 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Sendrecv \- Sends and receives a message
.SH SYNOPSIS
diff --git a/man/man3/MPI_Sendrecv_replace.3 b/man/man3/MPI_Sendrecv_replace.3
index 9ccb371..88f5f61 100644
--- a/man/man3/MPI_Sendrecv_replace.3
+++ b/man/man3/MPI_Sendrecv_replace.3
@@ -1,4 +1,4 @@
-.TH MPI_Sendrecv_replace 3 "11/9/2015" " " "MPI"
+.TH MPI_Sendrecv_replace 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Sendrecv_replace \- Sends and receives using a single buffer
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ssend.3 b/man/man3/MPI_Ssend.3
index 61c88dd..47b8d52 100644
--- a/man/man3/MPI_Ssend.3
+++ b/man/man3/MPI_Ssend.3
@@ -1,4 +1,4 @@
-.TH MPI_Ssend 3 "11/9/2015" " " "MPI"
+.TH MPI_Ssend 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ssend \- Blocking synchronous send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Ssend_init.3 b/man/man3/MPI_Ssend_init.3
index 26919bb..c5a3287 100644
--- a/man/man3/MPI_Ssend_init.3
+++ b/man/man3/MPI_Ssend_init.3
@@ -1,4 +1,4 @@
-.TH MPI_Ssend_init 3 "11/9/2015" " " "MPI"
+.TH MPI_Ssend_init 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Ssend_init \- Creates a persistent request for a synchronous send
.SH SYNOPSIS
diff --git a/man/man3/MPI_Start.3 b/man/man3/MPI_Start.3
index 43a41c5..ac363e7 100644
--- a/man/man3/MPI_Start.3
+++ b/man/man3/MPI_Start.3
@@ -1,4 +1,4 @@
-.TH MPI_Start 3 "11/9/2015" " " "MPI"
+.TH MPI_Start 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Start \- Initiates a communication with a persistent request handle
.SH SYNOPSIS
diff --git a/man/man3/MPI_Startall.3 b/man/man3/MPI_Startall.3
index aa4f74b..4c62d5f 100644
--- a/man/man3/MPI_Startall.3
+++ b/man/man3/MPI_Startall.3
@@ -1,4 +1,4 @@
-.TH MPI_Startall 3 "11/9/2015" " " "MPI"
+.TH MPI_Startall 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Startall \- Starts a collection of persistent requests
.SH SYNOPSIS
diff --git a/man/man3/MPI_Status_set_cancelled.3 b/man/man3/MPI_Status_set_cancelled.3
index 45fbd9f..eaae818 100644
--- a/man/man3/MPI_Status_set_cancelled.3
+++ b/man/man3/MPI_Status_set_cancelled.3
@@ -1,4 +1,4 @@
-.TH MPI_Status_set_cancelled 3 "11/9/2015" " " "MPI"
+.TH MPI_Status_set_cancelled 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Status_set_cancelled \- Sets the cancelled state associated with a Status object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Status_set_elements.3 b/man/man3/MPI_Status_set_elements.3
index 674b018..09f2af6 100644
--- a/man/man3/MPI_Status_set_elements.3
+++ b/man/man3/MPI_Status_set_elements.3
@@ -1,4 +1,4 @@
-.TH MPI_Status_set_elements 3 "11/9/2015" " " "MPI"
+.TH MPI_Status_set_elements 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Status_set_elements \- Set the number of elements in a status
.SH SYNOPSIS
diff --git a/man/man3/MPI_Status_set_elements_x.3 b/man/man3/MPI_Status_set_elements_x.3
index 28e6036..aae735c 100644
--- a/man/man3/MPI_Status_set_elements_x.3
+++ b/man/man3/MPI_Status_set_elements_x.3
@@ -1,6 +1,6 @@
-.TH MPI_Status_set_elements_x 3 "11/9/2015" " " "MPI"
+.TH MPI_Status_set_elements_x 3 "11/12/2016" " " "MPI"
.SH NAME
-MPI_Status_set_elements_x \- XXX description here
+MPI_Status_set_elements_x \- Set the number of elements in a status
.SH SYNOPSIS
.nf
int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count)
diff --git a/man/man3/MPI_T_category_changed.3 b/man/man3/MPI_T_category_changed.3
index 8e161ce..7f92be9 100644
--- a/man/man3/MPI_T_category_changed.3
+++ b/man/man3/MPI_T_category_changed.3
@@ -1,4 +1,4 @@
-.TH MPI_T_category_changed 3 "11/9/2015" " " "MPI"
+.TH MPI_T_category_changed 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_category_changed \- Get the timestamp indicating the last change to the categories
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_category_get_categories.3 b/man/man3/MPI_T_category_get_categories.3
index f431787..a2da725 100644
--- a/man/man3/MPI_T_category_get_categories.3
+++ b/man/man3/MPI_T_category_get_categories.3
@@ -1,4 +1,4 @@
-.TH MPI_T_category_get_categories 3 "11/9/2015" " " "MPI"
+.TH MPI_T_category_get_categories 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_category_get_categories \- Get sub-categories in a category
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_category_get_cvars.3 b/man/man3/MPI_T_category_get_cvars.3
index 770cee1..f7c38f0 100644
--- a/man/man3/MPI_T_category_get_cvars.3
+++ b/man/man3/MPI_T_category_get_cvars.3
@@ -1,4 +1,4 @@
-.TH MPI_T_category_get_cvars 3 "11/9/2015" " " "MPI"
+.TH MPI_T_category_get_cvars 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_category_get_cvars \- Get control variables in a category
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_category_get_index.3 b/man/man3/MPI_T_category_get_index.3
index 9058e1c..e6f73b8 100644
--- a/man/man3/MPI_T_category_get_index.3
+++ b/man/man3/MPI_T_category_get_index.3
@@ -1,4 +1,4 @@
-.TH MPI_T_category_get_index 3 "11/9/2015" " " "MPI"
+.TH MPI_T_category_get_index 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_category_get_index \- Get the index of a category
.SH SYNOPSIS
@@ -64,6 +64,11 @@ possible.
.PD 1
.PD 0
.TP
+.B MPI_T_ERR_INVALID_NAME
+- The variable or category name is invalid
+.PD 1
+.PD 0
+.TP
.B MPI_T_ERR_NOT_INITIALIZED
- The MPI tool information interface is not initialized.
.PD 1
diff --git a/man/man3/MPI_T_category_get_info.3 b/man/man3/MPI_T_category_get_info.3
index 7233bb6..f7990f2 100644
--- a/man/man3/MPI_T_category_get_info.3
+++ b/man/man3/MPI_T_category_get_info.3
@@ -1,4 +1,4 @@
-.TH MPI_T_category_get_info 3 "11/9/2015" " " "MPI"
+.TH MPI_T_category_get_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_category_get_info \- Get the information about a category
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_category_get_num.3 b/man/man3/MPI_T_category_get_num.3
index 5a89706..ad37363 100644
--- a/man/man3/MPI_T_category_get_num.3
+++ b/man/man3/MPI_T_category_get_num.3
@@ -1,4 +1,4 @@
-.TH MPI_T_category_get_num 3 "11/9/2015" " " "MPI"
+.TH MPI_T_category_get_num 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_category_get_num \- Get the number of categories
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_category_get_pvars.3 b/man/man3/MPI_T_category_get_pvars.3
index 12b1ff1..72f64da 100644
--- a/man/man3/MPI_T_category_get_pvars.3
+++ b/man/man3/MPI_T_category_get_pvars.3
@@ -1,4 +1,4 @@
-.TH MPI_T_category_get_pvars 3 "11/9/2015" " " "MPI"
+.TH MPI_T_category_get_pvars 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_category_get_pvars \- Get performance variables in a category
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_cvar_get_index.3 b/man/man3/MPI_T_cvar_get_index.3
index ea6c304..8587f57 100644
--- a/man/man3/MPI_T_cvar_get_index.3
+++ b/man/man3/MPI_T_cvar_get_index.3
@@ -1,4 +1,4 @@
-.TH MPI_T_cvar_get_index 3 "11/9/2015" " " "MPI"
+.TH MPI_T_cvar_get_index 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_cvar_get_index \- Get the index of a control variable
.SH SYNOPSIS
@@ -64,6 +64,11 @@ possible.
.PD 1
.PD 0
.TP
+.B MPI_T_ERR_INVALID_NAME
+- The variable or category name is invalid
+.PD 1
+.PD 0
+.TP
.B MPI_T_ERR_NOT_INITIALIZED
- The MPI tool information interface is not initialized.
.PD 1
diff --git a/man/man3/MPI_T_cvar_get_info.3 b/man/man3/MPI_T_cvar_get_info.3
index ea39ff3..9431e4b 100644
--- a/man/man3/MPI_T_cvar_get_info.3
+++ b/man/man3/MPI_T_cvar_get_info.3
@@ -1,4 +1,4 @@
-.TH MPI_T_cvar_get_info 3 "11/9/2015" " " "MPI"
+.TH MPI_T_cvar_get_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_cvar_get_info \- Get the information about a control variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_cvar_get_num.3 b/man/man3/MPI_T_cvar_get_num.3
index 0aec07f..e96f4c8 100644
--- a/man/man3/MPI_T_cvar_get_num.3
+++ b/man/man3/MPI_T_cvar_get_num.3
@@ -1,4 +1,4 @@
-.TH MPI_T_cvar_get_num 3 "11/9/2015" " " "MPI"
+.TH MPI_T_cvar_get_num 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_cvar_get_num \- Get the number of control variables
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_cvar_handle_alloc.3 b/man/man3/MPI_T_cvar_handle_alloc.3
index d431bac..74b454d 100644
--- a/man/man3/MPI_T_cvar_handle_alloc.3
+++ b/man/man3/MPI_T_cvar_handle_alloc.3
@@ -1,4 +1,4 @@
-.TH MPI_T_cvar_handle_alloc 3 "11/9/2015" " " "MPI"
+.TH MPI_T_cvar_handle_alloc 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_cvar_handle_alloc \- Allocate a handle for a control variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_cvar_handle_free.3 b/man/man3/MPI_T_cvar_handle_free.3
index a3a5cb6..1651b18 100644
--- a/man/man3/MPI_T_cvar_handle_free.3
+++ b/man/man3/MPI_T_cvar_handle_free.3
@@ -1,4 +1,4 @@
-.TH MPI_T_cvar_handle_free 3 "11/9/2015" " " "MPI"
+.TH MPI_T_cvar_handle_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_cvar_handle_free \- Free an existing handle for a control variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_cvar_read.3 b/man/man3/MPI_T_cvar_read.3
index 90553a3..1e4c092 100644
--- a/man/man3/MPI_T_cvar_read.3
+++ b/man/man3/MPI_T_cvar_read.3
@@ -1,4 +1,4 @@
-.TH MPI_T_cvar_read 3 "11/9/2015" " " "MPI"
+.TH MPI_T_cvar_read 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_cvar_read \- Read the value of a control variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_cvar_write.3 b/man/man3/MPI_T_cvar_write.3
index b86b1bb..9573f86 100644
--- a/man/man3/MPI_T_cvar_write.3
+++ b/man/man3/MPI_T_cvar_write.3
@@ -1,4 +1,4 @@
-.TH MPI_T_cvar_write 3 "11/9/2015" " " "MPI"
+.TH MPI_T_cvar_write 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_cvar_write \- Write a control variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_enum_get_info.3 b/man/man3/MPI_T_enum_get_info.3
index 4c128a2..e630e20 100644
--- a/man/man3/MPI_T_enum_get_info.3
+++ b/man/man3/MPI_T_enum_get_info.3
@@ -1,4 +1,4 @@
-.TH MPI_T_enum_get_info 3 "11/9/2015" " " "MPI"
+.TH MPI_T_enum_get_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_enum_get_info \- Get the information about an enumeration
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_enum_get_item.3 b/man/man3/MPI_T_enum_get_item.3
index c5de928..c66802e 100644
--- a/man/man3/MPI_T_enum_get_item.3
+++ b/man/man3/MPI_T_enum_get_item.3
@@ -1,4 +1,4 @@
-.TH MPI_T_enum_get_item 3 "11/9/2015" " " "MPI"
+.TH MPI_T_enum_get_item 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_enum_get_item \- Get the information about an item in an enumeration
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_finalize.3 b/man/man3/MPI_T_finalize.3
index e58231f..a02bded 100644
--- a/man/man3/MPI_T_finalize.3
+++ b/man/man3/MPI_T_finalize.3
@@ -1,4 +1,4 @@
-.TH MPI_T_finalize 3 "11/9/2015" " " "MPI"
+.TH MPI_T_finalize 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_finalize \- Finalize the MPI tool information interface
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_init_thread.3 b/man/man3/MPI_T_init_thread.3
index efb66c1..5dcc1ac 100644
--- a/man/man3/MPI_T_init_thread.3
+++ b/man/man3/MPI_T_init_thread.3
@@ -1,4 +1,4 @@
-.TH MPI_T_init_thread 3 "11/9/2015" " " "MPI"
+.TH MPI_T_init_thread 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_init_thread \- Initialize the MPI_T execution environment
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_get_index.3 b/man/man3/MPI_T_pvar_get_index.3
index f0ce47c..dec8850 100644
--- a/man/man3/MPI_T_pvar_get_index.3
+++ b/man/man3/MPI_T_pvar_get_index.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_get_index 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_get_index 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_get_index \- Get the index of a performance variable
.SH SYNOPSIS
@@ -69,6 +69,11 @@ possible.
.PD 1
.PD 0
.TP
+.B MPI_T_ERR_INVALID_NAME
+- The variable or category name is invalid
+.PD 1
+.PD 0
+.TP
.B MPI_T_ERR_NOT_INITIALIZED
- The MPI tool information interface is not initialized.
.PD 1
diff --git a/man/man3/MPI_T_pvar_get_info.3 b/man/man3/MPI_T_pvar_get_info.3
index 831312f..b0b5656 100644
--- a/man/man3/MPI_T_pvar_get_info.3
+++ b/man/man3/MPI_T_pvar_get_info.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_get_info 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_get_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_get_info \- Get the inforamtion about a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_get_num.3 b/man/man3/MPI_T_pvar_get_num.3
index 96da6a7..571074e 100644
--- a/man/man3/MPI_T_pvar_get_num.3
+++ b/man/man3/MPI_T_pvar_get_num.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_get_num 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_get_num 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_get_num \- Get the number of performance variables
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_handle_alloc.3 b/man/man3/MPI_T_pvar_handle_alloc.3
index 719cd6c..4f5bb44 100644
--- a/man/man3/MPI_T_pvar_handle_alloc.3
+++ b/man/man3/MPI_T_pvar_handle_alloc.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_handle_alloc 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_handle_alloc 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_handle_alloc \- Allocate a handle for a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_handle_free.3 b/man/man3/MPI_T_pvar_handle_free.3
index 943b5eb..6439d58 100644
--- a/man/man3/MPI_T_pvar_handle_free.3
+++ b/man/man3/MPI_T_pvar_handle_free.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_handle_free 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_handle_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_handle_free \- Free an existing handle for a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_read.3 b/man/man3/MPI_T_pvar_read.3
index f09ce3a..368d389 100644
--- a/man/man3/MPI_T_pvar_read.3
+++ b/man/man3/MPI_T_pvar_read.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_read 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_read 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_read \- Read the value of a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_readreset.3 b/man/man3/MPI_T_pvar_readreset.3
index aec1688..1c5b5ed 100644
--- a/man/man3/MPI_T_pvar_readreset.3
+++ b/man/man3/MPI_T_pvar_readreset.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_readreset 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_readreset 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_readreset \- Read the value of a performance variable and then reset it
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_reset.3 b/man/man3/MPI_T_pvar_reset.3
index 0f87985..ce5f104 100644
--- a/man/man3/MPI_T_pvar_reset.3
+++ b/man/man3/MPI_T_pvar_reset.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_reset 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_reset 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_reset \- Reset a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_session_create.3 b/man/man3/MPI_T_pvar_session_create.3
index 83ae4e7..4b2bf37 100644
--- a/man/man3/MPI_T_pvar_session_create.3
+++ b/man/man3/MPI_T_pvar_session_create.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_session_create 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_session_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_session_create \- Create a new session for accessing performance variables
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_session_free.3 b/man/man3/MPI_T_pvar_session_free.3
index 6956450..14bfb5a 100644
--- a/man/man3/MPI_T_pvar_session_free.3
+++ b/man/man3/MPI_T_pvar_session_free.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_session_free 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_session_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_session_free \- Free an existing performance variable session
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_start.3 b/man/man3/MPI_T_pvar_start.3
index 43db3cc..d821cd1 100644
--- a/man/man3/MPI_T_pvar_start.3
+++ b/man/man3/MPI_T_pvar_start.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_start 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_start 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_start \- Start a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_stop.3 b/man/man3/MPI_T_pvar_stop.3
index d3dd0a9..1edcd29 100644
--- a/man/man3/MPI_T_pvar_stop.3
+++ b/man/man3/MPI_T_pvar_stop.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_stop 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_stop 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_stop \- Stop a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_T_pvar_write.3 b/man/man3/MPI_T_pvar_write.3
index 14b7212..d379892 100644
--- a/man/man3/MPI_T_pvar_write.3
+++ b/man/man3/MPI_T_pvar_write.3
@@ -1,4 +1,4 @@
-.TH MPI_T_pvar_write 3 "11/9/2015" " " "MPI"
+.TH MPI_T_pvar_write 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_T_pvar_write \- Write a performance variable
.SH SYNOPSIS
diff --git a/man/man3/MPI_Test.3 b/man/man3/MPI_Test.3
index 78f2bc8..c4cc277 100644
--- a/man/man3/MPI_Test.3
+++ b/man/man3/MPI_Test.3
@@ -1,4 +1,4 @@
-.TH MPI_Test 3 "11/9/2015" " " "MPI"
+.TH MPI_Test 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Test \- Tests for the completion of a request
.SH SYNOPSIS
diff --git a/man/man3/MPI_Test_cancelled.3 b/man/man3/MPI_Test_cancelled.3
index e45badd..481f13d 100644
--- a/man/man3/MPI_Test_cancelled.3
+++ b/man/man3/MPI_Test_cancelled.3
@@ -1,4 +1,4 @@
-.TH MPI_Test_cancelled 3 "11/9/2015" " " "MPI"
+.TH MPI_Test_cancelled 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Test_cancelled \- Tests to see if a request was cancelled
.SH SYNOPSIS
diff --git a/man/man3/MPI_Testall.3 b/man/man3/MPI_Testall.3
index 8c244fe..2ffd6d6 100644
--- a/man/man3/MPI_Testall.3
+++ b/man/man3/MPI_Testall.3
@@ -1,4 +1,4 @@
-.TH MPI_Testall 3 "11/9/2015" " " "MPI"
+.TH MPI_Testall 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Testall \- Tests for the completion of all previously initiated requests
.SH SYNOPSIS
diff --git a/man/man3/MPI_Testany.3 b/man/man3/MPI_Testany.3
index a917e90..36329aa 100644
--- a/man/man3/MPI_Testany.3
+++ b/man/man3/MPI_Testany.3
@@ -1,4 +1,4 @@
-.TH MPI_Testany 3 "11/9/2015" " " "MPI"
+.TH MPI_Testany 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Testany \- Tests for completion of any previdously initiated requests
.SH SYNOPSIS
diff --git a/man/man3/MPI_Testsome.3 b/man/man3/MPI_Testsome.3
index daecd6a..3dbd027 100644
--- a/man/man3/MPI_Testsome.3
+++ b/man/man3/MPI_Testsome.3
@@ -1,4 +1,4 @@
-.TH MPI_Testsome 3 "11/9/2015" " " "MPI"
+.TH MPI_Testsome 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Testsome \- Tests for some given requests to complete
.SH SYNOPSIS
diff --git a/man/man3/MPI_Topo_test.3 b/man/man3/MPI_Topo_test.3
index 039f1da..26f189b 100644
--- a/man/man3/MPI_Topo_test.3
+++ b/man/man3/MPI_Topo_test.3
@@ -1,4 +1,4 @@
-.TH MPI_Topo_test 3 "11/9/2015" " " "MPI"
+.TH MPI_Topo_test 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Topo_test \- Determines the type of topology (if any) associated with a communicator
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_commit.3 b/man/man3/MPI_Type_commit.3
index f9d3224..573c1d1 100644
--- a/man/man3/MPI_Type_commit.3
+++ b/man/man3/MPI_Type_commit.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_commit 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_commit 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_commit \- Commits the datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_contiguous.3 b/man/man3/MPI_Type_contiguous.3
index e567ef4..48beefe 100644
--- a/man/man3/MPI_Type_contiguous.3
+++ b/man/man3/MPI_Type_contiguous.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_contiguous 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_contiguous 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_contiguous \- Creates a contiguous datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_darray.3 b/man/man3/MPI_Type_create_darray.3
index 4580221..a9bf1e9 100644
--- a/man/man3/MPI_Type_create_darray.3
+++ b/man/man3/MPI_Type_create_darray.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_darray 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_darray 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_darray \- Create a datatype representing a distributed array
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_hindexed.3 b/man/man3/MPI_Type_create_hindexed.3
index 72d874d..875a45a 100644
--- a/man/man3/MPI_Type_create_hindexed.3
+++ b/man/man3/MPI_Type_create_hindexed.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_hindexed 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_hindexed 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_hindexed \- Create a datatype for an indexed datatype with displacements in bytes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_hindexed_block.3 b/man/man3/MPI_Type_create_hindexed_block.3
index f662aa7..12e7933 100644
--- a/man/man3/MPI_Type_create_hindexed_block.3
+++ b/man/man3/MPI_Type_create_hindexed_block.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_hindexed_block 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_hindexed_block 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_hindexed_block \- Create an hindexed datatype with constant-sized blocks
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_hvector.3 b/man/man3/MPI_Type_create_hvector.3
index d10d3f7..a071457 100644
--- a/man/man3/MPI_Type_create_hvector.3
+++ b/man/man3/MPI_Type_create_hvector.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_hvector 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_hvector 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_hvector \- Create a datatype with a constant stride given in bytes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_indexed_block.3 b/man/man3/MPI_Type_create_indexed_block.3
index c00b07f..b2b20c1 100644
--- a/man/man3/MPI_Type_create_indexed_block.3
+++ b/man/man3/MPI_Type_create_indexed_block.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_indexed_block 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_indexed_block 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_indexed_block \- Create an indexed datatype with constant-sized blocks
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_keyval.3 b/man/man3/MPI_Type_create_keyval.3
index 3947de6..3d8ea04 100644
--- a/man/man3/MPI_Type_create_keyval.3
+++ b/man/man3/MPI_Type_create_keyval.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_keyval 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_keyval 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_keyval \- Create an attribute keyval for MPI datatypes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_resized.3 b/man/man3/MPI_Type_create_resized.3
index 13bf1e0..7b15df0 100644
--- a/man/man3/MPI_Type_create_resized.3
+++ b/man/man3/MPI_Type_create_resized.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_resized 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_resized 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_resized \- Create a datatype with a new lower bound and extent from an existing datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_struct.3 b/man/man3/MPI_Type_create_struct.3
index a9ab14e..12364f0 100644
--- a/man/man3/MPI_Type_create_struct.3
+++ b/man/man3/MPI_Type_create_struct.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_struct 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_struct 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_struct \- Create an MPI datatype from a general set of datatypes, displacements, and block sizes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_create_subarray.3 b/man/man3/MPI_Type_create_subarray.3
index a082231..99e5f2a 100644
--- a/man/man3/MPI_Type_create_subarray.3
+++ b/man/man3/MPI_Type_create_subarray.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_create_subarray 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_create_subarray 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_create_subarray \- Create a datatype for a subarray of a regular, multidimensional array
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_delete_attr.3 b/man/man3/MPI_Type_delete_attr.3
index d8cd3a6..a693fd7 100644
--- a/man/man3/MPI_Type_delete_attr.3
+++ b/man/man3/MPI_Type_delete_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_delete_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_delete_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_delete_attr \- Deletes an attribute value associated with a key on a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_dup.3 b/man/man3/MPI_Type_dup.3
index 4035d92..4ad2308 100644
--- a/man/man3/MPI_Type_dup.3
+++ b/man/man3/MPI_Type_dup.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_dup 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_dup 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_dup \- Duplicate a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_extent.3 b/man/man3/MPI_Type_extent.3
index 721be48..bf0656e 100644
--- a/man/man3/MPI_Type_extent.3
+++ b/man/man3/MPI_Type_extent.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_extent 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_extent 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_extent \- Returns the extent of a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_free.3 b/man/man3/MPI_Type_free.3
index b531e7d..cccbf80 100644
--- a/man/man3/MPI_Type_free.3
+++ b/man/man3/MPI_Type_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_free \- Frees the datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_free_keyval.3 b/man/man3/MPI_Type_free_keyval.3
index a28efef..6e4572a 100644
--- a/man/man3/MPI_Type_free_keyval.3
+++ b/man/man3/MPI_Type_free_keyval.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_free_keyval 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_free_keyval 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_free_keyval \- Frees an attribute key for datatypes
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_get_attr.3 b/man/man3/MPI_Type_get_attr.3
index 3cc3998..fba55c4 100644
--- a/man/man3/MPI_Type_get_attr.3
+++ b/man/man3/MPI_Type_get_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_get_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_get_attr \- Retrieves attribute value by key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_get_contents.3 b/man/man3/MPI_Type_get_contents.3
index 5e78777..0e5bc32 100644
--- a/man/man3/MPI_Type_get_contents.3
+++ b/man/man3/MPI_Type_get_contents.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_get_contents 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_contents 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_get_contents \- get type contents
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_get_envelope.3 b/man/man3/MPI_Type_get_envelope.3
index 350b2dd..835c425 100644
--- a/man/man3/MPI_Type_get_envelope.3
+++ b/man/man3/MPI_Type_get_envelope.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_get_envelope 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_envelope 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_get_envelope \- get type envelope
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_get_extent.3 b/man/man3/MPI_Type_get_extent.3
index 6763863..ae5549e 100644
--- a/man/man3/MPI_Type_get_extent.3
+++ b/man/man3/MPI_Type_get_extent.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_get_extent 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_extent 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_get_extent \- Get the lower bound and extent for a Datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_get_extent_x.3 b/man/man3/MPI_Type_get_extent_x.3
index 4e71ceb..5f0635a 100644
--- a/man/man3/MPI_Type_get_extent_x.3
+++ b/man/man3/MPI_Type_get_extent_x.3
@@ -1,6 +1,6 @@
-.TH MPI_Type_get_extent_x 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_extent_x 3 "11/12/2016" " " "MPI"
.SH NAME
-MPI_Type_get_extent_x \- XXX description here
+MPI_Type_get_extent_x \- Get the lower bound and extent as MPI_Count values for a Datatype
.SH SYNOPSIS
.nf
int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent)
diff --git a/man/man3/MPI_Type_get_name.3 b/man/man3/MPI_Type_get_name.3
index b703ad8..879961a 100644
--- a/man/man3/MPI_Type_get_name.3
+++ b/man/man3/MPI_Type_get_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_get_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_get_name \- Get the print name for a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_get_true_extent.3 b/man/man3/MPI_Type_get_true_extent.3
index 2eb684d..c22e79b 100644
--- a/man/man3/MPI_Type_get_true_extent.3
+++ b/man/man3/MPI_Type_get_true_extent.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_get_true_extent 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_true_extent 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_get_true_extent \- Get the true lower bound and extent for a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_get_true_extent_x.3 b/man/man3/MPI_Type_get_true_extent_x.3
index 75b7176..4533450 100644
--- a/man/man3/MPI_Type_get_true_extent_x.3
+++ b/man/man3/MPI_Type_get_true_extent_x.3
@@ -1,6 +1,6 @@
-.TH MPI_Type_get_true_extent_x 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_get_true_extent_x 3 "11/12/2016" " " "MPI"
.SH NAME
-MPI_Type_get_true_extent_x \- XXX description here
+MPI_Type_get_true_extent_x \- Get the true lower bound and extent as MPI_Count values for a datatype
.SH SYNOPSIS
.nf
int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Count *true_extent)
diff --git a/man/man3/MPI_Type_hindexed.3 b/man/man3/MPI_Type_hindexed.3
index 321dc16..2c11ac9 100644
--- a/man/man3/MPI_Type_hindexed.3
+++ b/man/man3/MPI_Type_hindexed.3
@@ -1,11 +1,11 @@
-.TH MPI_Type_hindexed 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_hindexed 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_hindexed \- Creates an indexed datatype with offsets in bytes
.SH SYNOPSIS
.nf
int MPI_Type_hindexed(int count,
- const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
+ int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
MPI_Datatype oldtype,
MPI_Datatype *newtype)
.fi
diff --git a/man/man3/MPI_Type_hvector.3 b/man/man3/MPI_Type_hvector.3
index 3490ffa..384788c 100644
--- a/man/man3/MPI_Type_hvector.3
+++ b/man/man3/MPI_Type_hvector.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_hvector 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_hvector 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_hvector \- type_hvector
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_indexed.3 b/man/man3/MPI_Type_indexed.3
index 4a0f4a4..79f467f 100644
--- a/man/man3/MPI_Type_indexed.3
+++ b/man/man3/MPI_Type_indexed.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_indexed 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_indexed 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_indexed \- Creates an indexed datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_lb.3 b/man/man3/MPI_Type_lb.3
index 207ef84..86f19f7 100644
--- a/man/man3/MPI_Type_lb.3
+++ b/man/man3/MPI_Type_lb.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_lb 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_lb 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_lb \- Returns the lower-bound of a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_match_size.3 b/man/man3/MPI_Type_match_size.3
index b4a39f0..64e6010 100644
--- a/man/man3/MPI_Type_match_size.3
+++ b/man/man3/MPI_Type_match_size.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_match_size 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_match_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_match_size \- Find an MPI datatype matching a specified size
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_set_attr.3 b/man/man3/MPI_Type_set_attr.3
index 2f1e0c4..335a29f 100644
--- a/man/man3/MPI_Type_set_attr.3
+++ b/man/man3/MPI_Type_set_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_set_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_set_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_set_attr \- Stores attribute value associated with a key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_set_name.3 b/man/man3/MPI_Type_set_name.3
index 7178e60..993d305 100644
--- a/man/man3/MPI_Type_set_name.3
+++ b/man/man3/MPI_Type_set_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_set_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_set_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_set_name \- set datatype name
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_size.3 b/man/man3/MPI_Type_size.3
index 19ad84c..6cfa722 100644
--- a/man/man3/MPI_Type_size.3
+++ b/man/man3/MPI_Type_size.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_size 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_size 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_size \- Return the number of bytes occupied by entries in the datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_size_x.3 b/man/man3/MPI_Type_size_x.3
index c234a1c..a07109f 100644
--- a/man/man3/MPI_Type_size_x.3
+++ b/man/man3/MPI_Type_size_x.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_size_x 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_size_x 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_size_x \- Return the number of bytes occupied by entries in the datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_struct.3 b/man/man3/MPI_Type_struct.3
index 029e462..f9f43fa 100644
--- a/man/man3/MPI_Type_struct.3
+++ b/man/man3/MPI_Type_struct.3
@@ -1,12 +1,12 @@
-.TH MPI_Type_struct 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_struct 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_struct \- Creates a struct datatype
.SH SYNOPSIS
.nf
int MPI_Type_struct(int count,
- const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
- const MPI_Datatype *array_of_types,
+ int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
+ MPI_Datatype *array_of_types,
MPI_Datatype *newtype)
.fi
.SH INPUT PARAMETERS
diff --git a/man/man3/MPI_Type_ub.3 b/man/man3/MPI_Type_ub.3
index 9f46c0e..69ac416 100644
--- a/man/man3/MPI_Type_ub.3
+++ b/man/man3/MPI_Type_ub.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_ub 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_ub 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_ub \- Returns the upper bound of a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Type_vector.3 b/man/man3/MPI_Type_vector.3
index 1b1b34b..3f08246 100644
--- a/man/man3/MPI_Type_vector.3
+++ b/man/man3/MPI_Type_vector.3
@@ -1,4 +1,4 @@
-.TH MPI_Type_vector 3 "11/9/2015" " " "MPI"
+.TH MPI_Type_vector 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Type_vector \- Creates a vector (strided) datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Unpack.3 b/man/man3/MPI_Unpack.3
index caa451b..8c239ea 100644
--- a/man/man3/MPI_Unpack.3
+++ b/man/man3/MPI_Unpack.3
@@ -1,4 +1,4 @@
-.TH MPI_Unpack 3 "11/9/2015" " " "MPI"
+.TH MPI_Unpack 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Unpack \- Unpack a buffer according to a datatype into contiguous memory
.SH SYNOPSIS
diff --git a/man/man3/MPI_Unpack_external.3 b/man/man3/MPI_Unpack_external.3
index 0c3a03a..1d9cd7b 100644
--- a/man/man3/MPI_Unpack_external.3
+++ b/man/man3/MPI_Unpack_external.3
@@ -1,4 +1,4 @@
-.TH MPI_Unpack_external 3 "11/9/2015" " " "MPI"
+.TH MPI_Unpack_external 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Unpack_external \- Unpack a buffer (packed with MPI_Pack_external) according to a datatype into contiguous memory
.SH SYNOPSIS
diff --git a/man/man3/MPI_Unpublish_name.3 b/man/man3/MPI_Unpublish_name.3
index b5da2a4..16736cf 100644
--- a/man/man3/MPI_Unpublish_name.3
+++ b/man/man3/MPI_Unpublish_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Unpublish_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Unpublish_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Unpublish_name \- Unpublish a service name published with MPI_Publish_name
.SH SYNOPSIS
diff --git a/man/man3/MPI_Wait.3 b/man/man3/MPI_Wait.3
index e2e2c97..51f106e 100644
--- a/man/man3/MPI_Wait.3
+++ b/man/man3/MPI_Wait.3
@@ -1,4 +1,4 @@
-.TH MPI_Wait 3 "11/9/2015" " " "MPI"
+.TH MPI_Wait 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Wait \- Waits for an MPI request to complete
.SH SYNOPSIS
diff --git a/man/man3/MPI_Waitall.3 b/man/man3/MPI_Waitall.3
index fb26555..07edeca 100644
--- a/man/man3/MPI_Waitall.3
+++ b/man/man3/MPI_Waitall.3
@@ -1,4 +1,4 @@
-.TH MPI_Waitall 3 "11/9/2015" " " "MPI"
+.TH MPI_Waitall 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Waitall \- Waits for all given MPI Requests to complete
.SH SYNOPSIS
diff --git a/man/man3/MPI_Waitany.3 b/man/man3/MPI_Waitany.3
index 0ecf012..e80d5a5 100644
--- a/man/man3/MPI_Waitany.3
+++ b/man/man3/MPI_Waitany.3
@@ -1,4 +1,4 @@
-.TH MPI_Waitany 3 "11/9/2015" " " "MPI"
+.TH MPI_Waitany 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Waitany \- Waits for any specified MPI Request to complete
.SH SYNOPSIS
diff --git a/man/man3/MPI_Waitsome.3 b/man/man3/MPI_Waitsome.3
index 08bf406..fc881d3 100644
--- a/man/man3/MPI_Waitsome.3
+++ b/man/man3/MPI_Waitsome.3
@@ -1,4 +1,4 @@
-.TH MPI_Waitsome 3 "11/9/2015" " " "MPI"
+.TH MPI_Waitsome 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Waitsome \- Waits for some given MPI Requests to complete
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_allocate.3 b/man/man3/MPI_Win_allocate.3
index fb73a59..cc77ab7 100644
--- a/man/man3/MPI_Win_allocate.3
+++ b/man/man3/MPI_Win_allocate.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_allocate 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_allocate 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_allocate \- Create and allocate an MPI Window object for one-sided communication.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_allocate_shared.3 b/man/man3/MPI_Win_allocate_shared.3
index 3b4991d..965fce4 100644
--- a/man/man3/MPI_Win_allocate_shared.3
+++ b/man/man3/MPI_Win_allocate_shared.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_allocate_shared 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_allocate_shared 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_allocate_shared \- Create an MPI Window object for one-sided communication and shared memory access, and allocate memory at each process.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_attach.3 b/man/man3/MPI_Win_attach.3
index f133978..96324e7 100644
--- a/man/man3/MPI_Win_attach.3
+++ b/man/man3/MPI_Win_attach.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_attach 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_attach 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_attach \- Attach memory to a dynamic window.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_call_errhandler.3 b/man/man3/MPI_Win_call_errhandler.3
index 0f72844..389e77e 100644
--- a/man/man3/MPI_Win_call_errhandler.3
+++ b/man/man3/MPI_Win_call_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_call_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_call_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_call_errhandler \- Call the error handler installed on a window object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_complete.3 b/man/man3/MPI_Win_complete.3
index 8e69c90..4b5add5 100644
--- a/man/man3/MPI_Win_complete.3
+++ b/man/man3/MPI_Win_complete.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_complete 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_complete 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_complete \- Completes an RMA operations begun after an MPI_Win_start.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_create.3 b/man/man3/MPI_Win_create.3
index b08883c..e98485c 100644
--- a/man/man3/MPI_Win_create.3
+++ b/man/man3/MPI_Win_create.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_create 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_create 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_create \- Create an MPI Window object for one-sided communication
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_create_dynamic.3 b/man/man3/MPI_Win_create_dynamic.3
index d476504..3b96622 100644
--- a/man/man3/MPI_Win_create_dynamic.3
+++ b/man/man3/MPI_Win_create_dynamic.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_create_dynamic 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_create_dynamic 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_create_dynamic \- Create an MPI Window object for one-sided communication. This window allows memory to be dynamically exposed and un-exposed for RMA operations.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_create_errhandler.3 b/man/man3/MPI_Win_create_errhandler.3
index 5fd854c..da6aa36 100644
--- a/man/man3/MPI_Win_create_errhandler.3
+++ b/man/man3/MPI_Win_create_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_create_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_create_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_create_errhandler \- Create an error handler for use with MPI window objects
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_create_keyval.3 b/man/man3/MPI_Win_create_keyval.3
index 214e7ef..6e208c6 100644
--- a/man/man3/MPI_Win_create_keyval.3
+++ b/man/man3/MPI_Win_create_keyval.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_create_keyval 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_create_keyval 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_create_keyval \- Create an attribute keyval for MPI window objects
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_delete_attr.3 b/man/man3/MPI_Win_delete_attr.3
index 39e9dfd..16c3f35 100644
--- a/man/man3/MPI_Win_delete_attr.3
+++ b/man/man3/MPI_Win_delete_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_delete_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_delete_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_delete_attr \- Deletes an attribute value associated with a key on a datatype
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_detach.3 b/man/man3/MPI_Win_detach.3
index 042f19f..54377cb 100644
--- a/man/man3/MPI_Win_detach.3
+++ b/man/man3/MPI_Win_detach.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_detach 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_detach 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_detach \- Detach memory from a dynamic window
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_fence.3 b/man/man3/MPI_Win_fence.3
index 1a7bd62..dbfa45d 100644
--- a/man/man3/MPI_Win_fence.3
+++ b/man/man3/MPI_Win_fence.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_fence 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_fence 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_fence \- Perform an MPI fence synchronization on a MPI window
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_flush.3 b/man/man3/MPI_Win_flush.3
index 71fc0c0..11e2160 100644
--- a/man/man3/MPI_Win_flush.3
+++ b/man/man3/MPI_Win_flush.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_flush 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_flush 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_flush \- Complete all outstanding RMA operations at the given target.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_flush_all.3 b/man/man3/MPI_Win_flush_all.3
index be7b79c..d3ec32f 100644
--- a/man/man3/MPI_Win_flush_all.3
+++ b/man/man3/MPI_Win_flush_all.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_flush_all 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_flush_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_flush_all \- Complete all outstanding RMA operations at all targets
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_flush_local.3 b/man/man3/MPI_Win_flush_local.3
index 7a90510..6934902 100644
--- a/man/man3/MPI_Win_flush_local.3
+++ b/man/man3/MPI_Win_flush_local.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_flush_local 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_flush_local 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_flush_local \- Complete locally all outstanding RMA operations at the given target
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_flush_local_all.3 b/man/man3/MPI_Win_flush_local_all.3
index edc511b..b1af97f 100644
--- a/man/man3/MPI_Win_flush_local_all.3
+++ b/man/man3/MPI_Win_flush_local_all.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_flush_local_all 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_flush_local_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_flush_local_all \- Complete locally all outstanding RMA operations at all targets
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_free.3 b/man/man3/MPI_Win_free.3
index 295cd87..5946826 100644
--- a/man/man3/MPI_Win_free.3
+++ b/man/man3/MPI_Win_free.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_free 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_free 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_free \- Free an MPI RMA window
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_free_keyval.3 b/man/man3/MPI_Win_free_keyval.3
index 75a5f56..8d44ff4 100644
--- a/man/man3/MPI_Win_free_keyval.3
+++ b/man/man3/MPI_Win_free_keyval.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_free_keyval 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_free_keyval 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_free_keyval \- Frees an attribute key for MPI RMA windows
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_get_attr.3 b/man/man3/MPI_Win_get_attr.3
index ed78306..32c3684 100644
--- a/man/man3/MPI_Win_get_attr.3
+++ b/man/man3/MPI_Win_get_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_get_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_get_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_get_attr \- Get attribute cached on an MPI window object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_get_errhandler.3 b/man/man3/MPI_Win_get_errhandler.3
index 6fd7c41..5c17663 100644
--- a/man/man3/MPI_Win_get_errhandler.3
+++ b/man/man3/MPI_Win_get_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_get_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_get_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_get_errhandler \- Get the error handler for the MPI RMA window
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_get_group.3 b/man/man3/MPI_Win_get_group.3
index 6f0ecdf..3b2cf20 100644
--- a/man/man3/MPI_Win_get_group.3
+++ b/man/man3/MPI_Win_get_group.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_get_group 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_get_group 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_get_group \- Get the MPI Group of the window object
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_get_info.3 b/man/man3/MPI_Win_get_info.3
index 3a10711..712fc38 100644
--- a/man/man3/MPI_Win_get_info.3
+++ b/man/man3/MPI_Win_get_info.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_get_info 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_get_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_get_info \- Returns a new info object containing the hints of the window associated with win.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_get_name.3 b/man/man3/MPI_Win_get_name.3
index 1c063f9..874e5c7 100644
--- a/man/man3/MPI_Win_get_name.3
+++ b/man/man3/MPI_Win_get_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_get_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_get_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_get_name \- Get the print name associated with the MPI RMA window
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_lock.3 b/man/man3/MPI_Win_lock.3
index e0d261c..f0a12af 100644
--- a/man/man3/MPI_Win_lock.3
+++ b/man/man3/MPI_Win_lock.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_lock 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_lock 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_lock \- Begin an RMA access epoch at the target process.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_lock_all.3 b/man/man3/MPI_Win_lock_all.3
index da29a3f..b8d02ed 100644
--- a/man/man3/MPI_Win_lock_all.3
+++ b/man/man3/MPI_Win_lock_all.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_lock_all 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_lock_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_lock_all \- Begin an RMA access epoch at all processes on the given window.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_post.3 b/man/man3/MPI_Win_post.3
index 4ed8559..b065c83 100644
--- a/man/man3/MPI_Win_post.3
+++ b/man/man3/MPI_Win_post.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_post 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_post 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_post \- Start an RMA exposure epoch
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_set_attr.3 b/man/man3/MPI_Win_set_attr.3
index bb7851d..dde7a5b 100644
--- a/man/man3/MPI_Win_set_attr.3
+++ b/man/man3/MPI_Win_set_attr.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_set_attr 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_set_attr 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_set_attr \- Stores attribute value associated with a key
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_set_errhandler.3 b/man/man3/MPI_Win_set_errhandler.3
index e31e570..f7ce551 100644
--- a/man/man3/MPI_Win_set_errhandler.3
+++ b/man/man3/MPI_Win_set_errhandler.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_set_errhandler 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_set_errhandler 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_set_errhandler \- Set window error handler
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_set_info.3 b/man/man3/MPI_Win_set_info.3
index 9591bb6..215c498 100644
--- a/man/man3/MPI_Win_set_info.3
+++ b/man/man3/MPI_Win_set_info.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_set_info 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_set_info 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_set_info \- Set new values for the hints of the window associated with win.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_set_name.3 b/man/man3/MPI_Win_set_name.3
index 25c1068..28aac4e 100644
--- a/man/man3/MPI_Win_set_name.3
+++ b/man/man3/MPI_Win_set_name.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_set_name 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_set_name 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_set_name \- Set the print name for an MPI RMA window
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_shared_query.3 b/man/man3/MPI_Win_shared_query.3
index 9776c7d..f7a05e8 100644
--- a/man/man3/MPI_Win_shared_query.3
+++ b/man/man3/MPI_Win_shared_query.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_shared_query 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_shared_query 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_shared_query \- Query the size and base pointer for a patch of a shared memory window.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_start.3 b/man/man3/MPI_Win_start.3
index c8b1bc0..e2d104e 100644
--- a/man/man3/MPI_Win_start.3
+++ b/man/man3/MPI_Win_start.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_start 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_start 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_start \- Start an RMA access epoch for MPI
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_sync.3 b/man/man3/MPI_Win_sync.3
index a23bfc7..b5d1667 100644
--- a/man/man3/MPI_Win_sync.3
+++ b/man/man3/MPI_Win_sync.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_sync 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_sync 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_sync \- Synchronize public and private copies of the given window.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_test.3 b/man/man3/MPI_Win_test.3
index 1b42ada..a039dec 100644
--- a/man/man3/MPI_Win_test.3
+++ b/man/man3/MPI_Win_test.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_test 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_test 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_test \- Test whether an RMA exposure epoch has completed
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_unlock.3 b/man/man3/MPI_Win_unlock.3
index 5fe9e26..d7925d0 100644
--- a/man/man3/MPI_Win_unlock.3
+++ b/man/man3/MPI_Win_unlock.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_unlock 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_unlock 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_unlock \- Completes an RMA access epoch at the target process
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_unlock_all.3 b/man/man3/MPI_Win_unlock_all.3
index 0162300..042475b 100644
--- a/man/man3/MPI_Win_unlock_all.3
+++ b/man/man3/MPI_Win_unlock_all.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_unlock_all 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_unlock_all 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_unlock_all \- Completes an RMA access epoch at all processes on the given window.
.SH SYNOPSIS
diff --git a/man/man3/MPI_Win_wait.3 b/man/man3/MPI_Win_wait.3
index 1d4efb6..2cbf39b 100644
--- a/man/man3/MPI_Win_wait.3
+++ b/man/man3/MPI_Win_wait.3
@@ -1,4 +1,4 @@
-.TH MPI_Win_wait 3 "11/9/2015" " " "MPI"
+.TH MPI_Win_wait 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Win_wait \- Completes an RMA exposure epoch begun with MPI_Win_post
.SH SYNOPSIS
diff --git a/man/man3/MPI_Wtick.3 b/man/man3/MPI_Wtick.3
index 98676b0..27363f1 100644
--- a/man/man3/MPI_Wtick.3
+++ b/man/man3/MPI_Wtick.3
@@ -1,4 +1,4 @@
-.TH MPI_Wtick 3 "11/9/2015" " " "MPI"
+.TH MPI_Wtick 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Wtick \- Returns the resolution of MPI_Wtime
.SH SYNOPSIS
diff --git a/man/man3/MPI_Wtime.3 b/man/man3/MPI_Wtime.3
index 71f4e51..1433e4d 100644
--- a/man/man3/MPI_Wtime.3
+++ b/man/man3/MPI_Wtime.3
@@ -1,4 +1,4 @@
-.TH MPI_Wtime 3 "11/9/2015" " " "MPI"
+.TH MPI_Wtime 3 "11/12/2016" " " "MPI"
.SH NAME
MPI_Wtime \- Returns an elapsed time on the calling processor
.SH SYNOPSIS
diff --git a/mpi.def b/mpi.def
index c7e3bf9..861bfd5 100644
--- a/mpi.def
+++ b/mpi.def
@@ -717,20 +717,20 @@ EXPORTS
;
; mpich extra and renamed symbols
;
- MPIR_CommGetAttr
- MPIR_CommGetAttr_fort
- MPIR_CommSetAttr
- MPIR_TypeGetAttr
- MPIR_TypeSetAttr
- MPIR_WinSetAttr
- MPIR_WinGetAttr
- MPIR_Keyval_set_proxy
- MPIR_Keyval_set_fortran
- MPIR_Keyval_set_fortran90
- MPIR_Grequest_set_lang_f77
- MPIR_Keyval_set_cxx
- MPIR_Errhandler_set_cxx
- MPIR_Op_set_cxx
+ MPII_Comm_get_attr
+ MPII_Comm_get_attr_fort
+ MPII_Comm_set_attr
+ MPII_Type_get_attr
+ MPII_Type_set_attr
+ MPII_Win_set_attr
+ MPII_Win_get_attr
+ MPII_Keyval_set_proxy
+ MPII_Keyval_set_fortran
+ MPII_Keyval_set_fortran90
+ MPII_Grequest_set_lang_f77
+ MPII_Keyval_set_cxx
+ MPII_Errhandler_set_cxx
+ MPII_Op_set_cxx
MPID_Wtick
MPID_Wtime_todouble
MPIR_Dup_fn
diff --git a/mpich.def b/mpich.def
index 0ea5f15..8e51fa0 100644
--- a/mpich.def
+++ b/mpich.def
@@ -2,24 +2,24 @@
EXPORTS
; Fortran values
-; MPIR_Keyval_set_fortran
-; MPIR_Keyval_set_fortran90
- MPIR_Grequest_set_lang_f77
+; MPII_Keyval_set_fortran
+; MPII_Keyval_set_fortran90
+ MPII_Grequest_set_lang_f77
MPI_F_STATUS_IGNORE
MPI_F_STATUSES_IGNORE
; C++ values
-; MPIR_Keyval_set_cxx
- MPIR_Errhandler_set_cxx
- MPIR_Op_set_cxx
+; MPII_Keyval_set_cxx
+ MPII_Errhandler_set_cxx
+ MPII_Op_set_cxx
; misc
- MPIR_CommGetAttr
- MPIR_CommGetAttr_fort
- MPIR_CommSetAttr
- MPIR_TypeGetAttr
- MPIR_TypeSetAttr
- MPIR_WinGetAttr
- MPIR_WinSetAttr
- MPIR_Keyval_set_proxy
+ MPII_Comm_get_attr
+ MPII_Comm_get_attr_fort
+ MPII_Comm_set_attr
+ MPII_Type_get_attr
+ MPII_Type_set_attr
+ MPII_Win_get_attr
+ MPII_Win_set_attr
+ MPII_Keyval_set_proxy
MPIR_Err_create_code
MPIR_Err_return_comm
MPID_Wtick
diff --git a/src/binding/cxx/.state-cache b/src/binding/cxx/.state-cache
index 2805b1c..e00c2b8 100644
--- a/src/binding/cxx/.state-cache
+++ b/src/binding/cxx/.state-cache
@@ -1,6 +1,6 @@
<dir>
-<file name="mpicxxcov.h" info="1447123141"/>
-<file name="mpicovsimple.h" info="1447123141"/>
+<file name="mpicxxcov.h" info="1478973152"/>
+<file name="mpicovsimple.h" info="1478973152"/>
</dir>
<data>
<fileinfo name="mpicxxcov.h">
diff --git a/src/binding/cxx/buildiface b/src/binding/cxx/buildiface
index 53589da..6c17990 100755
--- a/src/binding/cxx/buildiface
+++ b/src/binding/cxx/buildiface
@@ -2115,20 +2115,20 @@ int _mpi_lineno = __LINE__;
// FIXME: determine whether the type definition is needed, and include the
// correct definition.
typedef unsigned int size_t;
-extern \"C\" void *MPIU_trmalloc( size_t, int, const char [] );
-extern \"C\" void MPIU_trfree( void *, int, const char [] );
-extern \"C\" void MPIU_trdump( void *, int );
+extern \"C\" void *MPL_trmalloc( size_t, int, const char [] );
+extern \"C\" void MPL_trfree( void *, int, const char [] );
+extern \"C\" void MPL_trdump( void *, int );
void *operator new(size_t size) {
- void *p = MPIU_trmalloc( size, _mpi_lineno, __FILE__ );
+ void *p = MPL_trmalloc( size, _mpi_lineno, __FILE__ );
return p;}
void operator delete(void *p) {
- MPIU_trfree( p, _mpi_lineno, __FILE__ );}
+ MPL_trfree( p, _mpi_lineno, __FILE__ );}
void *operator new[]( size_t size) {
- void *p = MPIU_trmalloc( size, _mpi_lineno, __FILE__ );
+ void *p = MPL_trmalloc( size, _mpi_lineno, __FILE__ );
return p;}
void operator delete[](void *p) {
- MPIU_trfree( p, _mpi_lineno, __FILE__ );}
-#define MPIX_TRSummary() MPIU_trdump( 0, -1 )
+ MPL_trfree( p, _mpi_lineno, __FILE__ );}
+#define MPIX_TRSummary() MPL_trdump( 0, -1 )
#define MPIX_SetLineno _mpi_lineno = __LINE__ + 1
#else
#define MPIX_TRSummary()
@@ -2328,7 +2328,7 @@ void operator delete[](void *p) {
extern \"C\" {
typedef void (*mpircallback)(void);
}
-extern \"C\" void MPIR_Op_set_cxx( MPI_Op, void (*)(void) );
+extern \"C\" void MPII_Op_set_cxx( MPI_Op, void (*)(void) );
extern \"C\"
void MPIR_Call_op_fn( void *invec, void *outvec, int len, MPI_Datatype dtype,
User_function *uop )
@@ -2342,29 +2342,28 @@ void Op::Init( User_function *f, bool commute )
print $OUTFD "\
MPIX_CALLWORLD( MPI_Op_create( (MPI_User_function *)f,
(int) commute, &the_real_op ) );
- MPIR_Op_set_cxx( the_real_op, (mpircallback) MPIR_Call_op_fn );\n";
+ MPII_Op_set_cxx( the_real_op, (mpircallback) MPIR_Call_op_fn );\n";
&printCoverageEnd( $OUTFD, "Op_create", 2 );
print $OUTFD "\
}\n";
# Keyval and attribute routines
print $OUTFD <<EOT;
-#include \"mpi_attr.h\"
-#include \"mpi_lang.h\"
+#include \"mpir_attr_generic.h\"
static
int
MPIR_Comm_delete_attr_cxx_proxy(
MPI_Comm_delete_attr_function* user_function,
MPI_Comm comm,
int keyval,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void* extra_state
)
{
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -2418,12 +2417,12 @@ EOT
}
static
int
-MPIR_Comm_copy_attr_cxx_proxy(
+MPII_Comm_copy_attr_cxx_proxy(
MPI_Comm_copy_attr_function* user_function,
MPI_Comm comm,
int keyval,
void* extra_state,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void** new_value,
int* flag
@@ -2431,7 +2430,7 @@ MPIR_Comm_copy_attr_cxx_proxy(
{
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -2498,7 +2497,7 @@ EOT
MPIX_CALLWORLD( MPI_Comm_create_keyval( (MPI_Comm_copy_attr_function *)cf,
(MPI_Comm_delete_attr_function *)df,
&keyval, extra_state ) );
- MPIR_Keyval_set_proxy( keyval, MPIR_Comm_copy_attr_cxx_proxy, MPIR_Comm_delete_attr_cxx_proxy );
+ MPII_Keyval_set_proxy( keyval, MPII_Comm_copy_attr_cxx_proxy, MPIR_Comm_delete_attr_cxx_proxy );
EOT
&printCoverageEnd( $OUTFD, "Comm_create_keyval", 3 );
print $OUTFD <<EOT;
@@ -2511,7 +2510,7 @@ MPIR_Type_delete_attr_cxx_proxy(
MPI_Type_delete_attr_function* user_function,
MPI_Datatype datatype,
int keyval,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void* extra_state
)
@@ -2520,7 +2519,7 @@ MPIR_Type_delete_attr_cxx_proxy(
MPI::Datatype::Delete_attr_function* f = (MPI::Datatype::Delete_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -2536,7 +2535,7 @@ MPIR_Type_copy_attr_cxx_proxy(
MPI_Datatype datatype,
int keyval,
void* extra_state,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void** new_value,
int* flag
@@ -2547,7 +2546,7 @@ MPIR_Type_copy_attr_cxx_proxy(
MPI::Datatype::Copy_attr_function* f = (MPI::Datatype::Copy_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -2568,7 +2567,7 @@ EOT
MPIX_CALLWORLD( MPI_Type_create_keyval( (MPI_Type_copy_attr_function *)cf,
(MPI_Type_delete_attr_function *)df,
&keyval, extra_state ) );
- MPIR_Keyval_set_proxy( keyval, MPIR_Type_copy_attr_cxx_proxy, MPIR_Type_delete_attr_cxx_proxy );
+ MPII_Keyval_set_proxy( keyval, MPIR_Type_copy_attr_cxx_proxy, MPIR_Type_delete_attr_cxx_proxy );
EOT
&printCoverageEnd( $OUTFD, "Type_create_keyval", 3 );
print $OUTFD <<EOT;
@@ -2581,7 +2580,7 @@ MPIR_Win_delete_attr_cxx_proxy(
MPI_Win_delete_attr_function* user_function,
MPI_Win win,
int keyval,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void* extra_state
)
@@ -2590,7 +2589,7 @@ MPIR_Win_delete_attr_cxx_proxy(
MPI::Win::Delete_attr_function* f = (MPI::Win::Delete_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -2606,7 +2605,7 @@ MPIR_Win_copy_attr_cxx_proxy(
MPI_Win win,
int keyval,
void* extra_state,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void** new_value,
int* flag
@@ -2617,7 +2616,7 @@ MPIR_Win_copy_attr_cxx_proxy(
MPI::Win::Copy_attr_function* f = (MPI::Win::Copy_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -2638,7 +2637,7 @@ EOT
MPIX_CALLWORLD( MPI_Win_create_keyval( (MPI_Win_copy_attr_function *)cf,
(MPI_Win_delete_attr_function *)df,
&keyval, extra_state ) );
- MPIR_Keyval_set_proxy( keyval, MPIR_Win_copy_attr_cxx_proxy, MPIR_Win_delete_attr_cxx_proxy );
+ MPII_Keyval_set_proxy( keyval, MPIR_Win_copy_attr_cxx_proxy, MPIR_Win_delete_attr_cxx_proxy );
EOT
&printCoverageEnd( $OUTFD, "Win_create_keyval", 3 );
print $OUTFD <<EOT;
@@ -2650,7 +2649,7 @@ EOT
print $OUTFD <<EOT;
// Provide a C routine that can call the C++ error handler, handling
// any calling-sequence change.
-extern \"C\" void MPIR_Errhandler_set_cxx( MPI_Errhandler, void (*)(void) );
+extern \"C\" void MPII_Errhandler_set_cxx( MPI_Errhandler, void (*)(void) );
extern \"C\"
void MPIR_Call_errhandler_function( int kind, int *handle, int *errcode,
void (*cxxfn)(void) )
@@ -2698,7 +2697,7 @@ Errhandler File::Create_errhandler( Errhandler_function *f )
MPI_Errhandler eh;
MPI::Errhandler e1;
MPI_File_create_errhandler( (MPI_File_errhandler_function *)f, &eh );
- MPIR_Errhandler_set_cxx( eh,
+ MPII_Errhandler_set_cxx( eh,
(mpircallback)MPIR_Call_errhandler_function );
e1.the_real_errhandler = eh;
return e1;
@@ -2709,7 +2708,7 @@ Errhandler Comm::Create_errhandler( Errhandler_function *f )
MPI_Errhandler eh;
MPI::Errhandler e1;
MPI_Comm_create_errhandler( (MPI_Comm_errhandler_function *)f, &eh );
- MPIR_Errhandler_set_cxx( eh,
+ MPII_Errhandler_set_cxx( eh,
(mpircallback)MPIR_Call_errhandler_function );
e1.the_real_errhandler = eh;
return e1;
@@ -2719,7 +2718,7 @@ Errhandler Win::Create_errhandler( Errhandler_function *f )
MPI_Errhandler eh;
MPI::Errhandler e1;
MPI_Win_create_errhandler( (MPI_Win_errhandler_function *)f, &eh );
- MPIR_Errhandler_set_cxx( eh,
+ MPII_Errhandler_set_cxx( eh,
(mpircallback)MPIR_Call_errhandler_function );
e1.the_real_errhandler = eh;
return e1;
@@ -3526,6 +3525,8 @@ sub ReadInterface {
$args .= <FD>;
}
$args =~ s/MPICH_ATTR[A-Z_]*\([^)]*\)//g;
+ $args =~ s/MPICH_API_PUBLIC//g;
+ $args =~ s/ROMIO_API_PUBLIC//g;
$args =~ s/\)\s*;//g;
$args =~ s/[\r\n]*//g;
# Special substitutions
@@ -3574,14 +3575,14 @@ sub Clone_method {
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Comm *clone = new $classname(ncomm);
return *clone;
- };
+ }
#else
virtual $classname & Clone(void) const {
MPI_Comm ncomm;
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
$classname *clone = new $classname(ncomm);
return *clone;
- };
+ }
#endif\n";
}
sub Comm_methods {
@@ -3674,12 +3675,12 @@ sub Nullcomm_methods {
virtual Comm & Clone(void) const {
Comm *clone = new Nullcomm(MPI_COMM_NULL);
return *clone;
- };
+ }
#else
virtual Nullcomm & Clone(void) const {
Nullcomm *clone = new Nullcomm();
return *clone;
- };
+ }
#endif\n";
}
diff --git a/src/binding/cxx/initcxx.cxx b/src/binding/cxx/initcxx.cxx
index de84d64..722eb1d 100644
--- a/src/binding/cxx/initcxx.cxx
+++ b/src/binding/cxx/initcxx.cxx
@@ -23,20 +23,20 @@ int _mpi_lineno = __LINE__;
// FIXME: determine whether the type definition is needed, and include the
// correct definition.
typedef unsigned int size_t;
-extern "C" void *MPIU_trmalloc( size_t, int, const char [] );
-extern "C" void MPIU_trfree( void *, int, const char [] );
-extern "C" void MPIU_trdump( void *, int );
+extern "C" void *MPL_trmalloc( size_t, int, const char [] );
+extern "C" void MPL_trfree( void *, int, const char [] );
+extern "C" void MPL_trdump( void *, int );
void *operator new(size_t size) {
- void *p = MPIU_trmalloc( size, _mpi_lineno, __FILE__ );
+ void *p = MPL_trmalloc( size, _mpi_lineno, __FILE__ );
return p;}
void operator delete(void *p) {
- MPIU_trfree( p, _mpi_lineno, __FILE__ );}
+ MPL_trfree( p, _mpi_lineno, __FILE__ );}
void *operator new[]( size_t size) {
- void *p = MPIU_trmalloc( size, _mpi_lineno, __FILE__ );
+ void *p = MPL_trmalloc( size, _mpi_lineno, __FILE__ );
return p;}
void operator delete[](void *p) {
- MPIU_trfree( p, _mpi_lineno, __FILE__ );}
-#define MPIX_TRSummary() MPIU_trdump( 0, -1 )
+ MPL_trfree( p, _mpi_lineno, __FILE__ );}
+#define MPIX_TRSummary() MPL_trdump( 0, -1 )
#define MPIX_SetLineno _mpi_lineno = __LINE__ + 1
#else
#define MPIX_TRSummary()
@@ -377,7 +377,7 @@ void Free_mem( void * base )
extern "C" {
typedef void (*mpircallback)(void);
}
-extern "C" void MPIR_Op_set_cxx( MPI_Op, void (*)(void) );
+extern "C" void MPII_Op_set_cxx( MPI_Op, void (*)(void) );
extern "C"
void MPIR_Call_op_fn( void *invec, void *outvec, int len, MPI_Datatype dtype,
User_function *uop )
@@ -390,25 +390,24 @@ void Op::Init( User_function *f, bool commute )
MPIX_CALLWORLD( MPI_Op_create( (MPI_User_function *)f,
(int) commute, &the_real_op ) );
- MPIR_Op_set_cxx( the_real_op, (mpircallback) MPIR_Call_op_fn );
+ MPII_Op_set_cxx( the_real_op, (mpircallback) MPIR_Call_op_fn );
}
-#include "mpi_attr.h"
-#include "mpi_lang.h"
+#include "mpir_attr_generic.h"
static
int
MPIR_Comm_delete_attr_cxx_proxy(
MPI_Comm_delete_attr_function* user_function,
MPI_Comm comm,
int keyval,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void* extra_state
)
{
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -446,12 +445,12 @@ MPIR_Comm_delete_attr_cxx_proxy(
}
static
int
-MPIR_Comm_copy_attr_cxx_proxy(
+MPII_Comm_copy_attr_cxx_proxy(
MPI_Comm_copy_attr_function* user_function,
MPI_Comm comm,
int keyval,
void* extra_state,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void** new_value,
int* flag
@@ -459,7 +458,7 @@ MPIR_Comm_copy_attr_cxx_proxy(
{
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -507,7 +506,7 @@ int Comm::Create_keyval( Copy_attr_function *cf, Delete_attr_function *df, void
MPIX_CALLWORLD( MPI_Comm_create_keyval( (MPI_Comm_copy_attr_function *)cf,
(MPI_Comm_delete_attr_function *)df,
&keyval, extra_state ) );
- MPIR_Keyval_set_proxy( keyval, MPIR_Comm_copy_attr_cxx_proxy, MPIR_Comm_delete_attr_cxx_proxy );
+ MPII_Keyval_set_proxy( keyval, MPII_Comm_copy_attr_cxx_proxy, MPIR_Comm_delete_attr_cxx_proxy );
return keyval;
}
@@ -517,7 +516,7 @@ MPIR_Type_delete_attr_cxx_proxy(
MPI_Type_delete_attr_function* user_function,
MPI_Datatype datatype,
int keyval,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void* extra_state
)
@@ -526,7 +525,7 @@ MPIR_Type_delete_attr_cxx_proxy(
MPI::Datatype::Delete_attr_function* f = (MPI::Datatype::Delete_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -542,7 +541,7 @@ MPIR_Type_copy_attr_cxx_proxy(
MPI_Datatype datatype,
int keyval,
void* extra_state,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void** new_value,
int* flag
@@ -553,7 +552,7 @@ MPIR_Type_copy_attr_cxx_proxy(
MPI::Datatype::Copy_attr_function* f = (MPI::Datatype::Copy_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -571,7 +570,7 @@ int Datatype::Create_keyval( Copy_attr_function *cf, Delete_attr_function *df, v
MPIX_CALLWORLD( MPI_Type_create_keyval( (MPI_Type_copy_attr_function *)cf,
(MPI_Type_delete_attr_function *)df,
&keyval, extra_state ) );
- MPIR_Keyval_set_proxy( keyval, MPIR_Type_copy_attr_cxx_proxy, MPIR_Type_delete_attr_cxx_proxy );
+ MPII_Keyval_set_proxy( keyval, MPIR_Type_copy_attr_cxx_proxy, MPIR_Type_delete_attr_cxx_proxy );
return keyval;
}
@@ -581,7 +580,7 @@ MPIR_Win_delete_attr_cxx_proxy(
MPI_Win_delete_attr_function* user_function,
MPI_Win win,
int keyval,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void* extra_state
)
@@ -590,7 +589,7 @@ MPIR_Win_delete_attr_cxx_proxy(
MPI::Win::Delete_attr_function* f = (MPI::Win::Delete_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -606,7 +605,7 @@ MPIR_Win_copy_attr_cxx_proxy(
MPI_Win win,
int keyval,
void* extra_state,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void** new_value,
int* flag
@@ -617,7 +616,7 @@ MPIR_Win_copy_attr_cxx_proxy(
MPI::Win::Copy_attr_function* f = (MPI::Win::Copy_attr_function*)user_function;
void *value = 0;
/* Make sure that the attribute value is delivered as a pointer */
- if(MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if(MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
value = &attrib;
}
else{
@@ -635,13 +634,13 @@ int Win::Create_keyval( Copy_attr_function *cf, Delete_attr_function *df, void *
MPIX_CALLWORLD( MPI_Win_create_keyval( (MPI_Win_copy_attr_function *)cf,
(MPI_Win_delete_attr_function *)df,
&keyval, extra_state ) );
- MPIR_Keyval_set_proxy( keyval, MPIR_Win_copy_attr_cxx_proxy, MPIR_Win_delete_attr_cxx_proxy );
+ MPII_Keyval_set_proxy( keyval, MPIR_Win_copy_attr_cxx_proxy, MPIR_Win_delete_attr_cxx_proxy );
return keyval;
}
// Provide a C routine that can call the C++ error handler, handling
// any calling-sequence change.
-extern "C" void MPIR_Errhandler_set_cxx( MPI_Errhandler, void (*)(void) );
+extern "C" void MPII_Errhandler_set_cxx( MPI_Errhandler, void (*)(void) );
extern "C"
void MPIR_Call_errhandler_function( int kind, int *handle, int *errcode,
void (*cxxfn)(void) )
@@ -689,7 +688,7 @@ Errhandler File::Create_errhandler( Errhandler_function *f )
MPI_Errhandler eh;
MPI::Errhandler e1;
MPI_File_create_errhandler( (MPI_File_errhandler_function *)f, &eh );
- MPIR_Errhandler_set_cxx( eh,
+ MPII_Errhandler_set_cxx( eh,
(mpircallback)MPIR_Call_errhandler_function );
e1.the_real_errhandler = eh;
return e1;
@@ -700,7 +699,7 @@ Errhandler Comm::Create_errhandler( Errhandler_function *f )
MPI_Errhandler eh;
MPI::Errhandler e1;
MPI_Comm_create_errhandler( (MPI_Comm_errhandler_function *)f, &eh );
- MPIR_Errhandler_set_cxx( eh,
+ MPII_Errhandler_set_cxx( eh,
(mpircallback)MPIR_Call_errhandler_function );
e1.the_real_errhandler = eh;
return e1;
@@ -710,7 +709,7 @@ Errhandler Win::Create_errhandler( Errhandler_function *f )
MPI_Errhandler eh;
MPI::Errhandler e1;
MPI_Win_create_errhandler( (MPI_Win_errhandler_function *)f, &eh );
- MPIR_Errhandler_set_cxx( eh,
+ MPII_Errhandler_set_cxx( eh,
(mpircallback)MPIR_Call_errhandler_function );
e1.the_real_errhandler = eh;
return e1;
diff --git a/src/binding/cxx/mpicxx.h.in b/src/binding/cxx/mpicxx.h.in
index 375c081..586c327 100644
--- a/src/binding/cxx/mpicxx.h.in
+++ b/src/binding/cxx/mpicxx.h.in
@@ -1520,12 +1520,12 @@ class Nullcomm : public Comm {
virtual Comm & Clone(void) const {
Comm *clone = new Nullcomm(MPI_COMM_NULL);
return *clone;
- };
+ }
#else
virtual Nullcomm & Clone(void) const {
Nullcomm *clone = new Nullcomm();
return *clone;
- };
+ }
#endif
};
@@ -1586,14 +1586,14 @@ class Intercomm : public Comm {
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Comm *clone = new Intercomm(ncomm);
return *clone;
- };
+ }
#else
virtual Intercomm & Clone(void) const {
MPI_Comm ncomm;
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Intercomm *clone = new Intercomm(ncomm);
return *clone;
- };
+ }
#endif
};
@@ -1677,14 +1677,14 @@ class Intracomm : public Comm {
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Comm *clone = new Intracomm(ncomm);
return *clone;
- };
+ }
#else
virtual Intracomm & Clone(void) const {
MPI_Comm ncomm;
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Intracomm *clone = new Intracomm(ncomm);
return *clone;
- };
+ }
#endif
Intercomm Spawn(const char* command, const char* argv[], int maxprocs, const MPI::Info& info, int root) const {
@@ -2355,14 +2355,14 @@ class Graphcomm : public Intracomm {
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Comm *clone = new Graphcomm(ncomm);
return *clone;
- };
+ }
#else
virtual Graphcomm & Clone(void) const {
MPI_Comm ncomm;
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Graphcomm *clone = new Graphcomm(ncomm);
return *clone;
- };
+ }
#endif
};
@@ -2470,14 +2470,14 @@ class Cartcomm : public Intracomm {
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Comm *clone = new Cartcomm(ncomm);
return *clone;
- };
+ }
#else
virtual Cartcomm & Clone(void) const {
MPI_Comm ncomm;
MPI_Comm_dup( (MPI_Comm)the_real_comm, &ncomm);
Cartcomm *clone = new Cartcomm(ncomm);
return *clone;
- };
+ }
#endif
};
extern int Add_error_class( void ) ;
diff --git a/src/binding/fortran/mpif_h/.state-cache b/src/binding/fortran/mpif_h/.state-cache
index 3389727..c9cb6ae 100644
--- a/src/binding/fortran/mpif_h/.state-cache
+++ b/src/binding/fortran/mpif_h/.state-cache
@@ -1,1153 +1,1153 @@
<dir>
-<file name="dist_graph_neighbors_countf.c" info="1447301216"/>
-<file name="group_freef.c" info="1447301216"/>
-<file name="groupinterf.c" info="1447301216"/>
-<file name="windelattrf.c" info="1447301216"/>
-<file name="file_syncf.c" info="1447301216"/>
-<file name="file_write_all_beginf.c" info="1447301216"/>
-<file name="type_indexedf.c" info="1447301216"/>
-<file name="type_lbf.c" info="1447301216"/>
-<file name="comm_groupf.c" info="1447301216"/>
-<file name="file_seekf.c" info="1447301216"/>
-<file name="winnewkeyf.c" info="1447301216"/>
-<file name="type_extentf.c" info="1447301216"/>
-<file name="pack_sizef.c" info="1447301216"/>
-<file name="imrecvf.c" info="1447301216"/>
-<file name="iprobef.c" info="1447301216"/>
-<file name="isthrmainf.c" info="1447301216"/>
-<file name="file_iwrite_sharedf.c" info="1447301216"/>
-<file name="publish_namef.c" info="1447301216"/>
-<file name="attr_putf.c" info="1447301216"/>
-<file name="ialltoallf.c" info="1447301216"/>
-<file name="attr_getf.c" info="1447301216"/>
-<file name="type_match_sizef.c" info="1447301216"/>
-<file name="file_get_position_sharedf.c" info="1447301216"/>
-<file name="file_iwritef.c" info="1447301216"/>
-<file name="file_write_ordered_beginf.c" info="1447301216"/>
-<file name="rsendf.c" info="1447301216"/>
-<file name="file_get_type_extentf.c" info="1447301216"/>
-<file name="get_elements_xf.c" info="1447301216"/>
-<file name="testallf.c" info="1447301216"/>
-<file name="recvf.c" info="1447301216"/>
-<file name="finalizef.c" info="1447301216"/>
-<file name="alltoallwf.c" info="1447301216"/>
-<file name="icmergef.c" info="1447301216"/>
-<file name="bsend_initf.c" info="1447301216"/>
-<file name="op_createf.c" info="1447301216"/>
-<file name="type_get_true_extent_xf.c" info="1447301216"/>
-<file name="cart_getf.c" info="1447301216"/>
-<file name="mpi_fortimpl.h" info="1447123141"/>
-<file name="unpackextf.c" info="1447301216"/>
-<file name="iscattervf.c" info="1447301216"/>
-<file name="cancelf.c" info="1447301216"/>
-<file name="file_readf.c" info="1447301216"/>
-<file name="type_hvectorf.c" info="1447301216"/>
-<file name="putf.c" info="1447301216"/>
-<file name="comm_revokef.c" info="1447301216"/>
-<file name="igatherf.c" info="1447301216"/>
-<file name="ibarrierf.c" info="1447301216"/>
-<file name="file_read_ordered_endf.c" info="1447301216"/>
-<file name="pcontrolf.c" info="1447301216"/>
-<file name="typesetattrf.c" info="1447301216"/>
-<file name="waitanyf.c" info="1447301216"/>
-<file name="fproto.h" info="1447301216"/>
-<file name="comm_rankf.c" info="1447301216"/>
-<file name="pack_externalf.c" info="1447301216"/>
-<file name="win_get_groupf.c" info="1447301216"/>
-<file name="commfreekeyf.c" info="1447301216"/>
-<file name="file_ireadf.c" info="1447301216"/>
-<file name="dup_comm_fnf.c" info="1447301216"/>
-<file name="neighbor_allgatherf.c" info="1447301216"/>
-<file name="type_create_hindexed_blockf.c" info="1447301216"/>
-<file name="typedarrayf.c" info="1447301216"/>
-<file name="filecreerrf.c" info="1447301216"/>
-<file name="irecvf.c" info="1447301216"/>
-<file name="file_get_infof.c" info="1447301216"/>
-<file name="typecindbf.c" info="1447301216"/>
-<file name="null_comm_del_fnf.c" info="1447301216"/>
-<file name="startf.c" info="1447301216"/>
-<file name="comm_set_infof.c" info="1447301216"/>
-<file name="file_read_sharedf.c" info="1447301216"/>
-<file name="ineighbor_alltoallvf.c" info="1447301216"/>
-<file name="win_testf.c" info="1447301216"/>
-<file name="null_comm_copy_fnf.c" info="1447301216"/>
-<file name="comm_set_attrf.c" info="1447301216"/>
-<file name="raccumulatef.c" info="1447301216"/>
-<file name="type_get_attrf.c" info="1447301216"/>
-<file name="free_memf.c" info="1447301216"/>
-<file name="sndrcvrplf.c" info="1447301216"/>
-<file name="comm_shrinkf.c" info="1447301216"/>
-<file name="win_flush_local_allf.c" info="1447301216"/>
-<file name="statusc2f.c" info="1447301216"/>
-<file name="commdelattrf.c" info="1447301216"/>
-<file name="errhfreef.c" info="1447301216"/>
-<file name="win_get_infof.c" info="1447301216"/>
-<file name="file_openf.c" info="1447301216"/>
-<file name="info_createf.c" info="1447301216"/>
-<file name="file_iwrite_at_allf.c" info="1447301216"/>
-<file name="iscatterf.c" info="1447301216"/>
-<file name="igathervf.c" info="1447301216"/>
-<file name="file_read_at_allf.c" info="1447301216"/>
-<file name="mrecvf.c" info="1447301216"/>
-<file name="win_get_namef.c" info="1447301216"/>
-<file name="commseterrf.c" info="1447301216"/>
-<file name="null_win_copy_fnf.c" info="1447301216"/>
-<file name="testsomef.c" info="1447301216"/>
-<file name="win_unlockf.c" info="1447301216"/>
-<file name="ineighbor_allgathervf.c" info="1447301216"/>
-<file name="file_read_orderedf.c" info="1447301216"/>
-<file name="query_threadf.c" info="1447301216"/>
-<file name="null_del_fnf.c" info="1447301216"/>
-<file name="file_closef.c" info="1447301216"/>
-<file name="win_syncf.c" info="1447301216"/>
-<file name="typegetextentf.c" info="1447301216"/>
-<file name="typesetnamef.c" info="1447301216"/>
-<file name="wtimef.c" info="1447301216"/>
-<file name="statusf2c.c" info="1447301216"/>
-<file name="dist_graph_createf.c" info="1447301216"/>
-<file name="win_set_namef.c" info="1447301216"/>
-<file name="file_write_allf.c" info="1447301216"/>
-<file name="alltoallvf.c" info="1447301216"/>
-<file name="reduce_scatter_blockf.c" info="1447301216"/>
-<file name="keyval_freef.c" info="1447301216"/>
-<file name="reqgetstatf.c" info="1447301216"/>
-<file name="file_get_sizef.c" info="1447301216"/>
-<file name="alloc_memf.c" info="1447301216"/>
-<file name="comm_get_attrf.c" info="1447301216"/>
-<file name="cart_subf.c" info="1447301216"/>
-<file name="typegnamef.c" info="1447301216"/>
-<file name="typecontigf.c" info="1447301216"/>
-<file name="op_freef.c" info="1447301216"/>
-<file name="typechvecf.c" info="1447301216"/>
-<file name="typecresizef.c" info="1447301216"/>
-<file name="ssendf.c" info="1447301216"/>
-<file name="comm_get_infof.c" info="1447301216"/>
-<file name="ireduce_scatter_blockf.c" info="1447301216"/>
-<file name="info_dupf.c" info="1447301216"/>
-<file name="gatherf.c" info="1447301216"/>
-<file name="iccreatef.c" info="1447301216"/>
-<file name="iallgathervf.c" info="1447301216"/>
-<file name="file_read_at_all_beginf.c" info="1447301216"/>
-<file name="file_read_ordered_beginf.c" info="1447301216"/>
-<file name="comm_acceptf.c" info="1447301216"/>
-<file name="filecallerrf.c" info="1447301216"/>
-<file name="error_classf.c" info="1447301216"/>
-<file name="bcastf.c" info="1447301216"/>
-<file name="register_datarepf.c" info="1447301216"/>
-<file name="comm_set_namef.c" info="1447301216"/>
-<file name="file_read_atf.c" info="1447301216"/>
-<file name="typegtextf.c" info="1447301216"/>
-<file name="lookup_namef.c" info="1447301216"/>
-<file name="compare_and_swapf.c" info="1447301216"/>
-<file name="rputf.c" info="1447301216"/>
-<file name="improbef.c" info="1447301216"/>
-<file name="cart_mapf.c" info="1447301216"/>
-<file name="file_read_allf.c" info="1447301216"/>
-<file name="comm_splitf.c" info="1447301216"/>
-<file name="group_inclf.c" info="1447301216"/>
-<file name="infovallenf.c" info="1447301216"/>
-<file name="sendf.c" info="1447301216"/>
-<file name="null_type_copy_fnf.c" info="1447301216"/>
-<file name="wtickf.c" info="1447301216"/>
-<file name="scattervf.c" info="1447301216"/>
-<file name="addressf.c" info="1447301216"/>
-<file name="info_setf.c" info="1447301216"/>
-<file name="comm_dupf.c" info="1447301216"/>
-<file name="get_elementsf.c" info="1447301216"/>
-<file name="file_get_viewf.c" info="1447301216"/>
-<file name="rget_accumulatef.c" info="1447301216"/>
-<file name="isendf.c" info="1447301216"/>
-<file name="file_write_at_allf.c" info="1447301216"/>
-<file name="neighbor_alltoallf.c" info="1447301216"/>
-<file name="comm_failure_get_ackedf.c" info="1447301216"/>
-<file name="comm_failure_ackf.c" info="1447301216"/>
-<file name="errhcreatef.c" info="1447301216"/>
-<file name="get_countf.c" info="1447301216"/>
-<file name="neighbor_allgathervf.c" info="1447301216"/>
-<file name="unpubnamef.c" info="1447301216"/>
-<file name="type_hindexedf.c" info="1447301216"/>
-<file name="initthreadf.c" info="1447301216"/>
-<file name="cart_rankf.c" info="1447301216"/>
-<file name="cart_createf.c" info="1447301216"/>
-<file name="testcancelf.c" info="1447301216"/>
-<file name="commcallerrf.c" info="1447301216"/>
-<file name="mprobef.c" info="1447301216"/>
-<file name="grouprinclf.c" info="1447301216"/>
-<file name="error_stringf.c" info="1447301216"/>
-<file name="typechindf.c" info="1447301216"/>
-<file name="win_get_attrf.c" info="1447301216"/>
-<file name="cart_shiftf.c" info="1447301216"/>
-<file name="comm_dup_with_infof.c" info="1447301216"/>
-<file name="groupdifff.c" info="1447301216"/>
-<file name="probef.c" info="1447301216"/>
-<file name="win_lockf.c" info="1447301216"/>
-<file name="commgeterrf.c" info="1447301216"/>
-<file name="file_iread_at_allf.c" info="1447301216"/>
-<file name="accumulatef.c" info="1447301216"/>
-<file name="info_freef.c" info="1447301216"/>
-<file name="greqstartf.c" info="1447301216"/>
-<file name="fileseterrf.c" info="1447301216"/>
-<file name="ireducef.c" info="1447301216"/>
-<file name="comm_agreef.c" info="1447301216"/>
-<file name="bsendf.c" info="1447301216"/>
-<file name="file_read_at_all_endf.c" info="1447301216"/>
-<file name="adderrstringf.c" info="1447301216"/>
-<file name="file_preallocatef.c" info="1447301216"/>
-<file name="greqcompletef.c" info="1447301216"/>
-<file name="statgetclf.c" info="1447301216"/>
-<file name="file_read_all_beginf.c" info="1447301216"/>
-<file name="file_get_byte_offsetf.c" info="1447301216"/>
-<file name="win_detachf.c" info="1447301216"/>
-<file name="comm_connectf.c" info="1447301216"/>
-<file name="bufattachf.c" info="1447301216"/>
-<file name="dup_type_fnf.c" info="1447301216"/>
-<file name="reduce_localf.c" info="1447301216"/>
-<file name="type_size_xf.c" info="1447301216"/>
-<file name="cart_coordsf.c" info="1447301216"/>
-<file name="scanf.c" info="1447301216"/>
-<file name="file_writef.c" info="1447301216"/>
-<file name="file_get_amodef.c" info="1447301216"/>
-<file name="file_write_atf.c" info="1447301216"/>
-<file name="file_set_infof.c" info="1447301216"/>
-<file name="group_unionf.c" info="1447301216"/>
-<file name="file_write_orderedf.c" info="1447301216"/>
-<file name="group_exclf.c" info="1447301216"/>
-<file name="ialltoallvf.c" info="1447301216"/>
-<file name="typenewkeyf.c" info="1447301216"/>
-<file name="typefreekeyf.c" info="1447301216"/>
-<file name="file_get_groupf.c" info="1447301216"/>
-<file name="dup_win_fnf.c" info="1447301216"/>
-<file name="infognkf.c" info="1447301216"/>
-<file name="alltoallf.c" info="1447301216"/>
-<file name="null_type_del_fnf.c" info="1447301216"/>
-<file name="winfreekeyf.c" info="1447301216"/>
-<file name="bufdetachf.c" info="1447301216"/>
-<file name="ibsendf.c" info="1447301216"/>
-<file name="scatterf.c" info="1447301216"/>
-<file name="waitf.c" info="1447301216"/>
-<file name="wincallerrf.c" info="1447301216"/>
-<file name="win_postf.c" info="1447301216"/>
-<file name="commparentf.c" info="1447301216"/>
-<file name="fetch_and_opf.c" info="1447301216"/>
-<file name="get_library_versionf.c" info="1447301216"/>
-<file name="typecsubarrf.c" info="1447301216"/>
-<file name="comm_createf.c" info="1447301216"/>
-<file name="file_get_positionf.c" info="1447301216"/>
-<file name="info_getf.c" info="1447301216"/>
-<file name="get_versionf.c" info="1447301216"/>
-<file name="comm_split_typef.c" info="1447301216"/>
-<file name="graph_createf.c" info="1447301216"/>
-<file name="win_allocatef.c" info="1447301216"/>
-<file name="aint_difff.c" info="1447301216"/>
-<file name="file_set_viewf.c" info="1447301216"/>
-<file name="file_set_sizef.c" info="1447301216"/>
-<file name="keyval_createf.c" info="1447301216"/>
-<file name="comm_freef.c" info="1447301216"/>
-<file name="neighbor_alltoallwf.c" info="1447301216"/>
-<file name="initf.c" info="1447301216"/>
-<file name="open_portf.c" info="1447301216"/>
-<file name="errhgetf.c" info="1447301216"/>
-<file name="win_startf.c" info="1447301216"/>
-<file name="initializedf.c" info="1447301216"/>
-<file name="type_structf.c" info="1447301216"/>
-<file name="recv_initf.c" info="1447301216"/>
-<file name="ibcastf.c" info="1447301216"/>
-<file name="gathervf.c" info="1447301216"/>
-<file name="unpackf.c" info="1447301216"/>
-<file name="commrsizef.c" info="1447301216"/>
-<file name="waitallf.c" info="1447301216"/>
-<file name="commgetnamf.c" info="1447301216"/>
-<file name="startallf.c" info="1447301216"/>
-<file name="win_flush_localf.c" info="1447301216"/>
-<file name="sendrecvf.c" info="1447301216"/>
-<file name="file_write_ordered_endf.c" info="1447301216"/>
-<file name="commtesticf.c" info="1447301216"/>
-<file name="file_iread_allf.c" info="1447301216"/>
-<file name="ineighbor_alltoallwf.c" info="1447301216"/>
-<file name="redscatf.c" info="1447301216"/>
-<file name="win_create_dynamicf.c" info="1447301216"/>
-<file name="null_copy_fnf.c" info="1447301216"/>
-<file name="packf.c" info="1447301216"/>
-<file name="irsendf.c" info="1447301216"/>
-<file name="statsetelf.c" info="1447301216"/>
-<file name="infognthkf.c" info="1447301216"/>
-<file name="commnewkeyf.c" info="1447301216"/>
-<file name="topo_testf.c" info="1447301216"/>
-<file name="graph_mapf.c" info="1447301216"/>
-<file name="win_attachf.c" info="1447301216"/>
-<file name="null_win_del_fnf.c" info="1447301216"/>
-<file name="comm_spawnf.c" info="1447301216"/>
-<file name="barrierf.c" info="1447301216"/>
-<file name="grfnbrsf.c" info="1447301216"/>
-<file name="file_read_all_endf.c" info="1447301216"/>
-<file name="type_commitf.c" info="1447301216"/>
-<file name="status_set_elements_xf.c" info="1447301216"/>
-<file name="comm_sizef.c" info="1447301216"/>
-<file name="type_get_extent_xf.c" info="1447301216"/>
-<file name="dup_fnf.c" info="1447301216"/>
-<file name="get_accumulatef.c" info="1447301216"/>
-<file name="file_deletef.c" info="1447301216"/>
-<file name="wincreerrf.c" info="1447301216"/>
-<file name="errhsetf.c" info="1447301216"/>
-<file name="rsend_initf.c" info="1447301216"/>
-<file name="getaddressf.c" info="1447301216"/>
-<file name="dims_createf.c" info="1447301216"/>
-<file name="iexscanf.c" info="1447301216"/>
-<file name="win_shared_queryf.c" info="1447301216"/>
-<file name="cartdim_getf.c" info="1447301216"/>
-<file name="typedelattrf.c" info="1447301216"/>
-<file name="dist_graph_create_adjacentf.c" info="1447301216"/>
-<file name="win_unlock_allf.c" info="1447301216"/>
-<file name="grouptranksf.c" info="1447301216"/>
-<file name="type_vectorf.c" info="1447301216"/>
-<file name="finalizedf.c" info="1447301216"/>
-<file name="commrgroupf.c" info="1447301216"/>
-<file name="win_fencef.c" info="1447301216"/>
-<file name="testanyf.c" info="1447301216"/>
-<file name="win_flush_allf.c" info="1447301216"/>
-<file name="file_write_sharedf.c" info="1447301216"/>
-<file name="waitsomef.c" info="1447301216"/>
-<file name="file_write_at_all_endf.c" info="1447301216"/>
-<file name="rgetf.c" info="1447301216"/>
-<file name="comm_joinf.c" info="1447301216"/>
-<file name="packesizef.c" info="1447301216"/>
-<file name="graphdims_getf.c" info="1447301216"/>
-<file name="fdebug.c" info="1447123141"/>
-<file name="win_completef.c" info="1447301216"/>
-<file name="win_createf.c" info="1447301216"/>
-<file name="file_iwrite_atf.c" info="1447301216"/>
-<file name="ssend_initf.c" info="1447301216"/>
-<file name="filegeterrf.c" info="1447301216"/>
-<file name="win_freef.c" info="1447301216"/>
-<file name="ialltoallwf.c" info="1447301216"/>
-<file name="ineighbor_allgatherf.c" info="1447301216"/>
-<file name="file_iread_sharedf.c" info="1447301216"/>
-<file name="op_commutativef.c" info="1447301216"/>
-<file name="file_seek_sharedf.c" info="1447301216"/>
-<file name="attr_deletef.c" info="1447301216"/>
-<file name="getpnamef.c" info="1447301216"/>
-<file name="allgatherf.c" info="1447301216"/>
-<file name="commcreerrf.c" info="1447301216"/>
-<file name="type_freef.c" info="1447301216"/>
-<file name="comm_create_groupf.c" info="1447301216"/>
-<file name="info_deletef.c" info="1447301216"/>
-<file name="spawnmultf.c" info="1447301216"/>
-<file name="win_waitf.c" info="1447301216"/>
-<file name="file_iwrite_allf.c" info="1447301216"/>
-<file name="iallreducef.c" info="1447301216"/>
-<file name="iallgatherf.c" info="1447301216"/>
-<file name="reducef.c" info="1447301216"/>
-<file name="file_iread_atf.c" info="1447301216"/>
-<file name="type_ubf.c" info="1447301216"/>
-<file name="file_write_at_all_beginf.c" info="1447301216"/>
-<file name="request_freef.c" info="1447301216"/>
-<file name="ireduce_scatterf.c" info="1447301216"/>
-<file name="file_write_all_endf.c" info="1447301216"/>
-<file name="dist_graph_neighborsf.c" info="1447301216"/>
-<file name="win_flushf.c" info="1447301216"/>
-<file name="wingeterrf.c" info="1447301216"/>
-<file name="allgathervf.c" info="1447301216"/>
-<file name="aint_addf.c" info="1447301216"/>
-<file name="grfnbcountf.c" info="1447301216"/>
-<file name="grouprexclf.c" info="1447301216"/>
-<file name="exscanf.c" info="1447301216"/>
-<file name="iscanf.c" info="1447301216"/>
-<file name="group_rankf.c" info="1447301216"/>
-<file name="winseterrf.c" info="1447301216"/>
-<file name="send_initf.c" info="1447301216"/>
-<file name="comm_idupf.c" info="1447301216"/>
-<file name="typegetcntsf.c" info="1447301216"/>
-<file name="adderrcodef.c" info="1447301216"/>
-<file name="comm_comparef.c" info="1447301216"/>
-<file name="win_lock_allf.c" info="1447301216"/>
-<file name="group_sizef.c" info="1447301216"/>
-<file name="allreducef.c" info="1447301216"/>
-<file name="commdiscf.c" info="1447301216"/>
-<file name="neighbor_alltoallvf.c" info="1447301216"/>
-<file name="getf.c" info="1447301216"/>
-<file name="issendf.c" info="1447301216"/>
-<file name="win_set_attrf.c" info="1447301216"/>
-<file name="file_set_atomicityf.c" info="1447301216"/>
-<file name="typecstructf.c" info="1447301216"/>
-<file name="ineighbor_alltoallf.c" info="1447301216"/>
-<file name="abortf.c" info="1447301216"/>
-<file name="typegetenvf.c" info="1447301216"/>
-<file name="win_set_infof.c" info="1447301216"/>
-<file name="testf.c" info="1447301216"/>
-<file name="close_portf.c" info="1447301216"/>
-<file name="win_allocate_sharedf.c" info="1447301216"/>
-<file name="type_dupf.c" info="1447301216"/>
-<file name="adderrclassf.c" info="1447301216"/>
-<file name="group_comparef.c" info="1447301216"/>
-<file name="type_sizef.c" info="1447301216"/>
-<file name="graph_getf.c" info="1447301216"/>
-<file name="file_get_atomicityf.c" info="1447301216"/>
+<file name="comm_dup_with_infof.c" info="1479053539"/>
+<file name="winnewkeyf.c" info="1479053539"/>
+<file name="file_seekf.c" info="1479053539"/>
+<file name="typenewkeyf.c" info="1479053539"/>
+<file name="file_read_ordered_beginf.c" info="1479053539"/>
+<file name="win_lockf.c" info="1479053539"/>
+<file name="filecallerrf.c" info="1479053539"/>
+<file name="dist_graph_neighbors_countf.c" info="1479053539"/>
+<file name="unpackextf.c" info="1479053539"/>
+<file name="file_get_positionf.c" info="1479053539"/>
+<file name="errhsetf.c" info="1479053539"/>
+<file name="raccumulatef.c" info="1479053539"/>
+<file name="irsendf.c" info="1479053539"/>
+<file name="type_sizef.c" info="1479053539"/>
+<file name="info_getf.c" info="1479053539"/>
+<file name="wtimef.c" info="1479053539"/>
+<file name="win_flush_local_allf.c" info="1479053539"/>
+<file name="accumulatef.c" info="1479053539"/>
+<file name="type_structf.c" info="1479053539"/>
+<file name="dist_graph_create_adjacentf.c" info="1479053539"/>
+<file name="rgetf.c" info="1479053539"/>
+<file name="comm_groupf.c" info="1479053539"/>
+<file name="bcastf.c" info="1479053539"/>
+<file name="cart_subf.c" info="1479053539"/>
+<file name="statgetclf.c" info="1479053539"/>
+<file name="group_inclf.c" info="1479053539"/>
+<file name="mprobef.c" info="1479053539"/>
+<file name="null_del_fnf.c" info="1479053539"/>
+<file name="file_deletef.c" info="1479053539"/>
+<file name="commrgroupf.c" info="1479053539"/>
+<file name="iscattervf.c" info="1479053539"/>
+<file name="attr_deletef.c" info="1479053539"/>
+<file name="win_syncf.c" info="1479053539"/>
+<file name="comm_connectf.c" info="1479053539"/>
+<file name="win_testf.c" info="1479053539"/>
+<file name="type_get_true_extent_xf.c" info="1479053539"/>
+<file name="file_iwrite_at_allf.c" info="1479053539"/>
+<file name="commcreerrf.c" info="1479053539"/>
+<file name="ibarrierf.c" info="1479053539"/>
+<file name="bufattachf.c" info="1479053539"/>
+<file name="graphdims_getf.c" info="1479053539"/>
+<file name="file_iwrite_allf.c" info="1479053539"/>
+<file name="exscanf.c" info="1479053539"/>
+<file name="ireduce_scatter_blockf.c" info="1479053539"/>
+<file name="startallf.c" info="1479053539"/>
+<file name="commgeterrf.c" info="1479053539"/>
+<file name="neighbor_allgatherf.c" info="1479053539"/>
+<file name="ineighbor_alltoallf.c" info="1479053539"/>
+<file name="file_syncf.c" info="1479053539"/>
+<file name="file_get_viewf.c" info="1479053539"/>
+<file name="send_initf.c" info="1479053539"/>
+<file name="file_iread_allf.c" info="1479053539"/>
+<file name="file_get_atomicityf.c" info="1479053539"/>
+<file name="typecindbf.c" info="1479053539"/>
+<file name="group_sizef.c" info="1479053539"/>
+<file name="file_set_viewf.c" info="1479053539"/>
+<file name="filegeterrf.c" info="1479053539"/>
+<file name="initializedf.c" info="1479053539"/>
+<file name="groupinterf.c" info="1479053539"/>
+<file name="neighbor_allgathervf.c" info="1479053539"/>
+<file name="op_freef.c" info="1479053539"/>
+<file name="fdebug.c" info="1478973152"/>
+<file name="iscatterf.c" info="1479053539"/>
+<file name="initf.c" info="1479053539"/>
+<file name="group_freef.c" info="1479053539"/>
+<file name="get_elements_xf.c" info="1479053539"/>
+<file name="bsend_initf.c" info="1479053539"/>
+<file name="commgetnamf.c" info="1479053539"/>
+<file name="allreducef.c" info="1479053539"/>
+<file name="win_createf.c" info="1479053539"/>
+<file name="file_write_at_all_beginf.c" info="1479053539"/>
+<file name="ireduce_scatterf.c" info="1479053539"/>
+<file name="neighbor_alltoallvf.c" info="1479053539"/>
+<file name="file_get_groupf.c" info="1479053539"/>
+<file name="free_memf.c" info="1479053539"/>
+<file name="file_write_ordered_beginf.c" info="1479053539"/>
+<file name="win_set_infof.c" info="1479053539"/>
+<file name="file_write_orderedf.c" info="1479053539"/>
+<file name="alltoallwf.c" info="1479053539"/>
+<file name="barrierf.c" info="1479053539"/>
+<file name="comm_failure_ackf.c" info="1479053539"/>
+<file name="wingeterrf.c" info="1479053539"/>
+<file name="rget_accumulatef.c" info="1479053539"/>
+<file name="packesizef.c" info="1479053539"/>
+<file name="win_completef.c" info="1479053539"/>
+<file name="null_win_copy_fnf.c" info="1479053539"/>
+<file name="attr_getf.c" info="1479053539"/>
+<file name="file_write_allf.c" info="1479053539"/>
+<file name="putf.c" info="1479053539"/>
+<file name="win_detachf.c" info="1479053539"/>
+<file name="null_type_del_fnf.c" info="1479053539"/>
+<file name="typesetnamef.c" info="1479053539"/>
+<file name="publish_namef.c" info="1479053539"/>
+<file name="initthreadf.c" info="1479053539"/>
+<file name="rsendf.c" info="1479053539"/>
+<file name="error_stringf.c" info="1479053539"/>
+<file name="comm_idupf.c" info="1479053539"/>
+<file name="mrecvf.c" info="1479053539"/>
+<file name="typegtextf.c" info="1479053539"/>
+<file name="testcancelf.c" info="1479053539"/>
+<file name="comm_shrinkf.c" info="1479053539"/>
+<file name="info_setf.c" info="1479053539"/>
+<file name="commparentf.c" info="1479053539"/>
+<file name="scatterf.c" info="1479053539"/>
+<file name="file_closef.c" info="1479053539"/>
+<file name="type_vectorf.c" info="1479053539"/>
+<file name="null_type_copy_fnf.c" info="1479053539"/>
+<file name="typefreekeyf.c" info="1479053539"/>
+<file name="waitf.c" info="1479053539"/>
+<file name="file_openf.c" info="1479053539"/>
+<file name="file_read_all_beginf.c" info="1479053539"/>
+<file name="allgathervf.c" info="1479053539"/>
+<file name="iexscanf.c" info="1479053539"/>
+<file name="typedarrayf.c" info="1479053539"/>
+<file name="group_rankf.c" info="1479053539"/>
+<file name="typecstructf.c" info="1479053539"/>
+<file name="infognkf.c" info="1479053539"/>
+<file name="type_match_sizef.c" info="1479053539"/>
+<file name="win_flush_localf.c" info="1479053539"/>
+<file name="statusc2f.c" info="1479053539"/>
+<file name="dist_graph_createf.c" info="1479053539"/>
+<file name="comm_comparef.c" info="1479053539"/>
+<file name="ialltoallwf.c" info="1479053539"/>
+<file name="comm_freef.c" info="1479053539"/>
+<file name="register_datarepf.c" info="1479053539"/>
+<file name="testsomef.c" info="1479053539"/>
+<file name="win_get_groupf.c" info="1479053539"/>
+<file name="info_deletef.c" info="1479053539"/>
+<file name="file_get_byte_offsetf.c" info="1479053539"/>
+<file name="win_set_namef.c" info="1479053539"/>
+<file name="win_unlockf.c" info="1479053539"/>
+<file name="win_waitf.c" info="1479053539"/>
+<file name="type_ubf.c" info="1479053539"/>
+<file name="ireducef.c" info="1479053539"/>
+<file name="ssend_initf.c" info="1479053539"/>
+<file name="testf.c" info="1479053539"/>
+<file name="query_threadf.c" info="1479053539"/>
+<file name="file_set_infof.c" info="1479053539"/>
+<file name="comm_get_infof.c" info="1479053539"/>
+<file name="comm_agreef.c" info="1479053539"/>
+<file name="infognthkf.c" info="1479053539"/>
+<file name="scattervf.c" info="1479053539"/>
+<file name="file_read_allf.c" info="1479053539"/>
+<file name="ialltoallf.c" info="1479053539"/>
+<file name="testallf.c" info="1479053539"/>
+<file name="request_freef.c" info="1479053539"/>
+<file name="comm_set_attrf.c" info="1479053539"/>
+<file name="comm_set_infof.c" info="1479053539"/>
+<file name="file_get_sizef.c" info="1479053539"/>
+<file name="adderrstringf.c" info="1479053539"/>
+<file name="typechvecf.c" info="1479053539"/>
+<file name="dims_createf.c" info="1479053539"/>
+<file name="reqgetstatf.c" info="1479053539"/>
+<file name="comm_create_groupf.c" info="1479053539"/>
+<file name="rputf.c" info="1479053539"/>
+<file name="neighbor_alltoallwf.c" info="1479053539"/>
+<file name="commdelattrf.c" info="1479053539"/>
+<file name="null_comm_del_fnf.c" info="1479053539"/>
+<file name="compare_and_swapf.c" info="1479053539"/>
+<file name="file_iread_atf.c" info="1479053539"/>
+<file name="mpi_fortimpl.h" info="1478973152"/>
+<file name="comm_acceptf.c" info="1479053539"/>
+<file name="typecsubarrf.c" info="1479053539"/>
+<file name="iscanf.c" info="1479053539"/>
+<file name="type_lbf.c" info="1479053539"/>
+<file name="type_dupf.c" info="1479053539"/>
+<file name="open_portf.c" info="1479053539"/>
+<file name="grfnbcountf.c" info="1479053539"/>
+<file name="close_portf.c" info="1479053539"/>
+<file name="getaddressf.c" info="1479053539"/>
+<file name="graph_createf.c" info="1479053539"/>
+<file name="rsend_initf.c" info="1479053539"/>
+<file name="isendf.c" info="1479053539"/>
+<file name="irecvf.c" info="1479053539"/>
+<file name="igatherf.c" info="1479053539"/>
+<file name="bsendf.c" info="1479053539"/>
+<file name="reduce_scatter_blockf.c" info="1479053539"/>
+<file name="comm_dupf.c" info="1479053539"/>
+<file name="type_hvectorf.c" info="1479053539"/>
+<file name="file_iread_sharedf.c" info="1479053539"/>
+<file name="grouptranksf.c" info="1479053539"/>
+<file name="cancelf.c" info="1479053539"/>
+<file name="waitanyf.c" info="1479053539"/>
+<file name="file_preallocatef.c" info="1479053539"/>
+<file name="win_flushf.c" info="1479053539"/>
+<file name="op_createf.c" info="1479053539"/>
+<file name="typegetextentf.c" info="1479053539"/>
+<file name="fileseterrf.c" info="1479053539"/>
+<file name="alltoallf.c" info="1479053539"/>
+<file name="ibsendf.c" info="1479053539"/>
+<file name="commcallerrf.c" info="1479053539"/>
+<file name="alloc_memf.c" info="1479053539"/>
+<file name="ssendf.c" info="1479053539"/>
+<file name="file_read_at_allf.c" info="1479053539"/>
+<file name="typecresizef.c" info="1479053539"/>
+<file name="grouprinclf.c" info="1479053539"/>
+<file name="file_get_infof.c" info="1479053539"/>
+<file name="sendf.c" info="1479053539"/>
+<file name="info_createf.c" info="1479053539"/>
+<file name="neighbor_alltoallf.c" info="1479053539"/>
+<file name="comm_createf.c" info="1479053539"/>
+<file name="iallreducef.c" info="1479053539"/>
+<file name="keyval_createf.c" info="1479053539"/>
+<file name="cartdim_getf.c" info="1479053539"/>
+<file name="cart_createf.c" info="1479053539"/>
+<file name="packf.c" info="1479053539"/>
+<file name="typechindf.c" info="1479053539"/>
+<file name="win_postf.c" info="1479053539"/>
+<file name="improbef.c" info="1479053539"/>
+<file name="type_commitf.c" info="1479053539"/>
+<file name="type_hindexedf.c" info="1479053539"/>
+<file name="file_get_position_sharedf.c" info="1479053539"/>
+<file name="file_write_all_endf.c" info="1479053539"/>
+<file name="info_freef.c" info="1479053539"/>
+<file name="ibcastf.c" info="1479053539"/>
+<file name="lookup_namef.c" info="1479053539"/>
+<file name="status_set_elements_xf.c" info="1479053539"/>
+<file name="null_copy_fnf.c" info="1479053539"/>
+<file name="winfreekeyf.c" info="1479053539"/>
+<file name="pack_externalf.c" info="1479053539"/>
+<file name="iccreatef.c" info="1479053539"/>
+<file name="ineighbor_allgatherf.c" info="1479053539"/>
+<file name="dup_type_fnf.c" info="1479053539"/>
+<file name="infovallenf.c" info="1479053539"/>
+<file name="startf.c" info="1479053539"/>
+<file name="file_read_orderedf.c" info="1479053539"/>
+<file name="errhfreef.c" info="1479053539"/>
+<file name="file_read_all_endf.c" info="1479053539"/>
+<file name="recv_initf.c" info="1479053539"/>
+<file name="statsetelf.c" info="1479053539"/>
+<file name="file_write_ordered_endf.c" info="1479053539"/>
+<file name="comm_joinf.c" info="1479053539"/>
+<file name="file_iwrite_atf.c" info="1479053539"/>
+<file name="comm_sizef.c" info="1479053539"/>
+<file name="win_allocate_sharedf.c" info="1479053539"/>
+<file name="commdiscf.c" info="1479053539"/>
+<file name="abortf.c" info="1479053539"/>
+<file name="op_commutativef.c" info="1479053539"/>
+<file name="pcontrolf.c" info="1479053539"/>
+<file name="redscatf.c" info="1479053539"/>
+<file name="iallgathervf.c" info="1479053539"/>
+<file name="probef.c" info="1479053539"/>
+<file name="get_countf.c" info="1479053539"/>
+<file name="comm_set_namef.c" info="1479053539"/>
+<file name="file_write_at_all_endf.c" info="1479053539"/>
+<file name="cart_rankf.c" info="1479053539"/>
+<file name="comm_revokef.c" info="1479053539"/>
+<file name="greqcompletef.c" info="1479053539"/>
+<file name="reduce_localf.c" info="1479053539"/>
+<file name="fproto.h" info="1479053539"/>
+<file name="file_iread_at_allf.c" info="1479053539"/>
+<file name="ialltoallvf.c" info="1479053539"/>
+<file name="typecontigf.c" info="1479053539"/>
+<file name="winseterrf.c" info="1479053539"/>
+<file name="grouprexclf.c" info="1479053539"/>
+<file name="ineighbor_alltoallwf.c" info="1479053539"/>
+<file name="type_create_hindexed_blockf.c" info="1479053539"/>
+<file name="cart_mapf.c" info="1479053539"/>
+<file name="type_freef.c" info="1479053539"/>
+<file name="scanf.c" info="1479053539"/>
+<file name="gathervf.c" info="1479053539"/>
+<file name="group_exclf.c" info="1479053539"/>
+<file name="unpubnamef.c" info="1479053539"/>
+<file name="dup_win_fnf.c" info="1479053539"/>
+<file name="waitallf.c" info="1479053539"/>
+<file name="imrecvf.c" info="1479053539"/>
+<file name="keyval_freef.c" info="1479053539"/>
+<file name="getpnamef.c" info="1479053539"/>
+<file name="get_library_versionf.c" info="1479053539"/>
+<file name="graph_mapf.c" info="1479053539"/>
+<file name="file_set_atomicityf.c" info="1479053539"/>
+<file name="statusf2c.c" info="1479053539"/>
+<file name="cart_getf.c" info="1479053539"/>
+<file name="get_accumulatef.c" info="1479053539"/>
+<file name="win_create_dynamicf.c" info="1479053539"/>
+<file name="reducef.c" info="1479053539"/>
+<file name="comm_spawnf.c" info="1479053539"/>
+<file name="win_freef.c" info="1479053539"/>
+<file name="adderrcodef.c" info="1479053539"/>
+<file name="typedelattrf.c" info="1479053539"/>
+<file name="wincallerrf.c" info="1479053539"/>
+<file name="bufdetachf.c" info="1479053539"/>
+<file name="file_get_amodef.c" info="1479053539"/>
+<file name="finalizef.c" info="1479053539"/>
+<file name="waitsomef.c" info="1479053539"/>
+<file name="file_read_sharedf.c" info="1479053539"/>
+<file name="comm_get_attrf.c" info="1479053539"/>
+<file name="comm_split_typef.c" info="1479053539"/>
+<file name="graph_getf.c" info="1479053539"/>
+<file name="dup_fnf.c" info="1479053539"/>
+<file name="testanyf.c" info="1479053539"/>
+<file name="filecreerrf.c" info="1479053539"/>
+<file name="null_comm_copy_fnf.c" info="1479053539"/>
+<file name="aint_difff.c" info="1479053539"/>
+<file name="sndrcvrplf.c" info="1479053539"/>
+<file name="group_comparef.c" info="1479053539"/>
+<file name="file_write_atf.c" info="1479053539"/>
+<file name="type_get_extent_xf.c" info="1479053539"/>
+<file name="aint_addf.c" info="1479053539"/>
+<file name="info_dupf.c" info="1479053539"/>
+<file name="comm_rankf.c" info="1479053539"/>
+<file name="file_read_at_all_beginf.c" info="1479053539"/>
+<file name="win_shared_queryf.c" info="1479053539"/>
+<file name="comm_failure_get_ackedf.c" info="1479053539"/>
+<file name="type_extentf.c" info="1479053539"/>
+<file name="comm_splitf.c" info="1479053539"/>
+<file name="commnewkeyf.c" info="1479053539"/>
+<file name="greqstartf.c" info="1479053539"/>
+<file name="file_write_at_allf.c" info="1479053539"/>
+<file name="file_readf.c" info="1479053539"/>
+<file name="type_indexedf.c" info="1479053539"/>
+<file name="isthrmainf.c" info="1479053539"/>
+<file name="type_size_xf.c" info="1479053539"/>
+<file name="errhcreatef.c" info="1479053539"/>
+<file name="win_get_attrf.c" info="1479053539"/>
+<file name="commseterrf.c" info="1479053539"/>
+<file name="file_get_type_extentf.c" info="1479053539"/>
+<file name="typegnamef.c" info="1479053539"/>
+<file name="file_ireadf.c" info="1479053539"/>
+<file name="get_versionf.c" info="1479053539"/>
+<file name="finalizedf.c" info="1479053539"/>
+<file name="grfnbrsf.c" info="1479053539"/>
+<file name="file_write_all_beginf.c" info="1479053539"/>
+<file name="commrsizef.c" info="1479053539"/>
+<file name="null_win_del_fnf.c" info="1479053539"/>
+<file name="typegetenvf.c" info="1479053539"/>
+<file name="recvf.c" info="1479053539"/>
+<file name="file_seek_sharedf.c" info="1479053539"/>
+<file name="get_elementsf.c" info="1479053539"/>
+<file name="allgatherf.c" info="1479053539"/>
+<file name="iallgatherf.c" info="1479053539"/>
+<file name="ineighbor_alltoallvf.c" info="1479053539"/>
+<file name="attr_putf.c" info="1479053539"/>
+<file name="win_allocatef.c" info="1479053539"/>
+<file name="win_flush_allf.c" info="1479053539"/>
+<file name="cart_shiftf.c" info="1479053539"/>
+<file name="issendf.c" info="1479053539"/>
+<file name="errhgetf.c" info="1479053539"/>
+<file name="file_set_sizef.c" info="1479053539"/>
+<file name="win_unlock_allf.c" info="1479053539"/>
+<file name="file_iwritef.c" info="1479053539"/>
+<file name="windelattrf.c" info="1479053539"/>
+<file name="win_get_namef.c" info="1479053539"/>
+<file name="dup_comm_fnf.c" info="1479053539"/>
+<file name="commfreekeyf.c" info="1479053539"/>
+<file name="fetch_and_opf.c" info="1479053539"/>
+<file name="wtickf.c" info="1479053539"/>
+<file name="typesetattrf.c" info="1479053539"/>
+<file name="file_writef.c" info="1479053539"/>
+<file name="win_attachf.c" info="1479053539"/>
+<file name="iprobef.c" info="1479053539"/>
+<file name="wincreerrf.c" info="1479053539"/>
+<file name="sendrecvf.c" info="1479053539"/>
+<file name="win_startf.c" info="1479053539"/>
+<file name="win_set_attrf.c" info="1479053539"/>
+<file name="file_read_at_all_endf.c" info="1479053539"/>
+<file name="getf.c" info="1479053539"/>
+<file name="groupdifff.c" info="1479053539"/>
+<file name="file_iwrite_sharedf.c" info="1479053539"/>
+<file name="gatherf.c" info="1479053539"/>
+<file name="type_get_attrf.c" info="1479053539"/>
+<file name="ineighbor_allgathervf.c" info="1479053539"/>
+<file name="alltoallvf.c" info="1479053539"/>
+<file name="win_lock_allf.c" info="1479053539"/>
+<file name="icmergef.c" info="1479053539"/>
+<file name="group_unionf.c" info="1479053539"/>
+<file name="igathervf.c" info="1479053539"/>
+<file name="topo_testf.c" info="1479053539"/>
+<file name="file_write_sharedf.c" info="1479053539"/>
+<file name="addressf.c" info="1479053539"/>
+<file name="commtesticf.c" info="1479053539"/>
+<file name="file_read_ordered_endf.c" info="1479053539"/>
+<file name="unpackf.c" info="1479053539"/>
+<file name="file_read_atf.c" info="1479053539"/>
+<file name="typegetcntsf.c" info="1479053539"/>
+<file name="spawnmultf.c" info="1479053539"/>
+<file name="win_fencef.c" info="1479053539"/>
+<file name="adderrclassf.c" info="1479053539"/>
+<file name="cart_coordsf.c" info="1479053539"/>
+<file name="error_classf.c" info="1479053539"/>
+<file name="dist_graph_neighborsf.c" info="1479053539"/>
+<file name="pack_sizef.c" info="1479053539"/>
+<file name="win_get_infof.c" info="1479053539"/>
</dir>
<data>
-<fileinfo name="dist_graph_neighbors_countf.c">
+<fileinfo name="comm_dup_with_infof.c">
</fileinfo>
-<fileinfo name="group_freef.c">
+<fileinfo name="winnewkeyf.c">
</fileinfo>
-<fileinfo name="groupinterf.c">
+<fileinfo name="file_seekf.c">
</fileinfo>
-<fileinfo name="windelattrf.c">
+<fileinfo name="typenewkeyf.c">
</fileinfo>
-<fileinfo name="file_syncf.c">
+<fileinfo name="file_read_ordered_beginf.c">
</fileinfo>
-<fileinfo name="file_write_all_beginf.c">
+<fileinfo name="win_lockf.c">
</fileinfo>
-<fileinfo name="type_indexedf.c">
+<fileinfo name="filecallerrf.c">
</fileinfo>
-<fileinfo name="type_lbf.c">
+<fileinfo name="dist_graph_neighbors_countf.c">
</fileinfo>
-<fileinfo name="comm_groupf.c">
+<fileinfo name="unpackextf.c">
</fileinfo>
-<fileinfo name="file_seekf.c">
+<fileinfo name="file_get_positionf.c">
</fileinfo>
-<fileinfo name="winnewkeyf.c">
+<fileinfo name="errhsetf.c">
</fileinfo>
-<fileinfo name="type_extentf.c">
+<fileinfo name="raccumulatef.c">
</fileinfo>
-<fileinfo name="pack_sizef.c">
+<fileinfo name="irsendf.c">
</fileinfo>
-<fileinfo name="imrecvf.c">
+<fileinfo name="type_sizef.c">
</fileinfo>
-<fileinfo name="iprobef.c">
+<fileinfo name="info_getf.c">
</fileinfo>
-<fileinfo name="isthrmainf.c">
+<fileinfo name="wtimef.c">
</fileinfo>
-<fileinfo name="file_iwrite_sharedf.c">
+<fileinfo name="win_flush_local_allf.c">
</fileinfo>
-<fileinfo name="publish_namef.c">
+<fileinfo name="accumulatef.c">
</fileinfo>
-<fileinfo name="attr_putf.c">
+<fileinfo name="type_structf.c">
</fileinfo>
-<fileinfo name="ialltoallf.c">
+<fileinfo name="dist_graph_create_adjacentf.c">
</fileinfo>
-<fileinfo name="attr_getf.c">
+<fileinfo name="rgetf.c">
</fileinfo>
-<fileinfo name="type_match_sizef.c">
+<fileinfo name="comm_groupf.c">
</fileinfo>
-<fileinfo name="file_get_position_sharedf.c">
+<fileinfo name="bcastf.c">
</fileinfo>
-<fileinfo name="file_iwritef.c">
+<fileinfo name="cart_subf.c">
</fileinfo>
-<fileinfo name="file_write_ordered_beginf.c">
+<fileinfo name="statgetclf.c">
</fileinfo>
-<fileinfo name="rsendf.c">
+<fileinfo name="group_inclf.c">
</fileinfo>
-<fileinfo name="file_get_type_extentf.c">
+<fileinfo name="mprobef.c">
</fileinfo>
-<fileinfo name="get_elements_xf.c">
+<fileinfo name="null_del_fnf.c">
</fileinfo>
-<fileinfo name="testallf.c">
+<fileinfo name="file_deletef.c">
</fileinfo>
-<fileinfo name="recvf.c">
+<fileinfo name="commrgroupf.c">
</fileinfo>
-<fileinfo name="finalizef.c">
+<fileinfo name="iscattervf.c">
</fileinfo>
-<fileinfo name="alltoallwf.c">
+<fileinfo name="attr_deletef.c">
</fileinfo>
-<fileinfo name="icmergef.c">
+<fileinfo name="win_syncf.c">
</fileinfo>
-<fileinfo name="bsend_initf.c">
+<fileinfo name="comm_connectf.c">
</fileinfo>
-<fileinfo name="op_createf.c">
+<fileinfo name="win_testf.c">
</fileinfo>
<fileinfo name="type_get_true_extent_xf.c">
</fileinfo>
-<fileinfo name="cart_getf.c">
-</fileinfo>
-<fileinfo name="mpi_fortimpl.h">
+<fileinfo name="file_iwrite_at_allf.c">
</fileinfo>
-<fileinfo name="unpackextf.c">
+<fileinfo name="commcreerrf.c">
</fileinfo>
-<fileinfo name="iscattervf.c">
+<fileinfo name="ibarrierf.c">
</fileinfo>
-<fileinfo name="cancelf.c">
+<fileinfo name="bufattachf.c">
</fileinfo>
-<fileinfo name="file_readf.c">
+<fileinfo name="graphdims_getf.c">
</fileinfo>
-<fileinfo name="type_hvectorf.c">
+<fileinfo name="file_iwrite_allf.c">
</fileinfo>
-<fileinfo name="putf.c">
+<fileinfo name="exscanf.c">
</fileinfo>
-<fileinfo name="comm_revokef.c">
+<fileinfo name="ireduce_scatter_blockf.c">
</fileinfo>
-<fileinfo name="igatherf.c">
+<fileinfo name="startallf.c">
</fileinfo>
-<fileinfo name="ibarrierf.c">
+<fileinfo name="commgeterrf.c">
</fileinfo>
-<fileinfo name="file_read_ordered_endf.c">
+<fileinfo name="neighbor_allgatherf.c">
</fileinfo>
-<fileinfo name="pcontrolf.c">
+<fileinfo name="ineighbor_alltoallf.c">
</fileinfo>
-<fileinfo name="typesetattrf.c">
+<fileinfo name="file_syncf.c">
</fileinfo>
-<fileinfo name="waitanyf.c">
+<fileinfo name="file_get_viewf.c">
</fileinfo>
-<fileinfo name="fproto.h">
+<fileinfo name="send_initf.c">
</fileinfo>
-<fileinfo name="comm_rankf.c">
+<fileinfo name="file_iread_allf.c">
</fileinfo>
-<fileinfo name="pack_externalf.c">
+<fileinfo name="file_get_atomicityf.c">
</fileinfo>
-<fileinfo name="win_get_groupf.c">
+<fileinfo name="typecindbf.c">
</fileinfo>
-<fileinfo name="commfreekeyf.c">
+<fileinfo name="group_sizef.c">
</fileinfo>
-<fileinfo name="file_ireadf.c">
+<fileinfo name="file_set_viewf.c">
</fileinfo>
-<fileinfo name="dup_comm_fnf.c">
+<fileinfo name="filegeterrf.c">
</fileinfo>
-<fileinfo name="neighbor_allgatherf.c">
+<fileinfo name="initializedf.c">
</fileinfo>
-<fileinfo name="type_create_hindexed_blockf.c">
+<fileinfo name="groupinterf.c">
</fileinfo>
-<fileinfo name="typedarrayf.c">
+<fileinfo name="neighbor_allgathervf.c">
</fileinfo>
-<fileinfo name="filecreerrf.c">
+<fileinfo name="op_freef.c">
</fileinfo>
-<fileinfo name="irecvf.c">
+<fileinfo name="fdebug.c">
</fileinfo>
-<fileinfo name="file_get_infof.c">
+<fileinfo name="iscatterf.c">
</fileinfo>
-<fileinfo name="typecindbf.c">
+<fileinfo name="initf.c">
</fileinfo>
-<fileinfo name="null_comm_del_fnf.c">
+<fileinfo name="group_freef.c">
</fileinfo>
-<fileinfo name="startf.c">
+<fileinfo name="get_elements_xf.c">
</fileinfo>
-<fileinfo name="comm_set_infof.c">
+<fileinfo name="bsend_initf.c">
</fileinfo>
-<fileinfo name="file_read_sharedf.c">
+<fileinfo name="commgetnamf.c">
</fileinfo>
-<fileinfo name="ineighbor_alltoallvf.c">
+<fileinfo name="allreducef.c">
</fileinfo>
-<fileinfo name="win_testf.c">
+<fileinfo name="win_createf.c">
</fileinfo>
-<fileinfo name="null_comm_copy_fnf.c">
+<fileinfo name="file_write_at_all_beginf.c">
</fileinfo>
-<fileinfo name="comm_set_attrf.c">
+<fileinfo name="ireduce_scatterf.c">
</fileinfo>
-<fileinfo name="raccumulatef.c">
+<fileinfo name="neighbor_alltoallvf.c">
</fileinfo>
-<fileinfo name="type_get_attrf.c">
+<fileinfo name="file_get_groupf.c">
</fileinfo>
<fileinfo name="free_memf.c">
</fileinfo>
-<fileinfo name="sndrcvrplf.c">
+<fileinfo name="file_write_ordered_beginf.c">
</fileinfo>
-<fileinfo name="comm_shrinkf.c">
+<fileinfo name="win_set_infof.c">
</fileinfo>
-<fileinfo name="win_flush_local_allf.c">
+<fileinfo name="file_write_orderedf.c">
</fileinfo>
-<fileinfo name="statusc2f.c">
+<fileinfo name="alltoallwf.c">
</fileinfo>
-<fileinfo name="commdelattrf.c">
+<fileinfo name="barrierf.c">
</fileinfo>
-<fileinfo name="errhfreef.c">
+<fileinfo name="comm_failure_ackf.c">
</fileinfo>
-<fileinfo name="win_get_infof.c">
+<fileinfo name="wingeterrf.c">
</fileinfo>
-<fileinfo name="file_openf.c">
+<fileinfo name="rget_accumulatef.c">
</fileinfo>
-<fileinfo name="info_createf.c">
+<fileinfo name="packesizef.c">
</fileinfo>
-<fileinfo name="file_iwrite_at_allf.c">
+<fileinfo name="win_completef.c">
</fileinfo>
-<fileinfo name="iscatterf.c">
+<fileinfo name="null_win_copy_fnf.c">
</fileinfo>
-<fileinfo name="igathervf.c">
+<fileinfo name="attr_getf.c">
</fileinfo>
-<fileinfo name="file_read_at_allf.c">
+<fileinfo name="file_write_allf.c">
</fileinfo>
-<fileinfo name="mrecvf.c">
+<fileinfo name="putf.c">
</fileinfo>
-<fileinfo name="win_get_namef.c">
+<fileinfo name="win_detachf.c">
</fileinfo>
-<fileinfo name="commseterrf.c">
+<fileinfo name="null_type_del_fnf.c">
</fileinfo>
-<fileinfo name="null_win_copy_fnf.c">
+<fileinfo name="typesetnamef.c">
</fileinfo>
-<fileinfo name="testsomef.c">
+<fileinfo name="publish_namef.c">
</fileinfo>
-<fileinfo name="win_unlockf.c">
+<fileinfo name="initthreadf.c">
</fileinfo>
-<fileinfo name="ineighbor_allgathervf.c">
+<fileinfo name="rsendf.c">
</fileinfo>
-<fileinfo name="file_read_orderedf.c">
+<fileinfo name="error_stringf.c">
</fileinfo>
-<fileinfo name="query_threadf.c">
+<fileinfo name="comm_idupf.c">
</fileinfo>
-<fileinfo name="null_del_fnf.c">
+<fileinfo name="mrecvf.c">
</fileinfo>
-<fileinfo name="file_closef.c">
+<fileinfo name="typegtextf.c">
</fileinfo>
-<fileinfo name="win_syncf.c">
+<fileinfo name="testcancelf.c">
</fileinfo>
-<fileinfo name="typegetextentf.c">
+<fileinfo name="comm_shrinkf.c">
</fileinfo>
-<fileinfo name="typesetnamef.c">
+<fileinfo name="info_setf.c">
</fileinfo>
-<fileinfo name="wtimef.c">
+<fileinfo name="commparentf.c">
</fileinfo>
-<fileinfo name="statusf2c.c">
+<fileinfo name="scatterf.c">
</fileinfo>
-<fileinfo name="dist_graph_createf.c">
+<fileinfo name="file_closef.c">
</fileinfo>
-<fileinfo name="win_set_namef.c">
+<fileinfo name="type_vectorf.c">
</fileinfo>
-<fileinfo name="file_write_allf.c">
+<fileinfo name="null_type_copy_fnf.c">
</fileinfo>
-<fileinfo name="alltoallvf.c">
+<fileinfo name="typefreekeyf.c">
</fileinfo>
-<fileinfo name="reduce_scatter_blockf.c">
+<fileinfo name="waitf.c">
</fileinfo>
-<fileinfo name="keyval_freef.c">
+<fileinfo name="file_openf.c">
</fileinfo>
-<fileinfo name="reqgetstatf.c">
+<fileinfo name="file_read_all_beginf.c">
</fileinfo>
-<fileinfo name="file_get_sizef.c">
+<fileinfo name="allgathervf.c">
</fileinfo>
-<fileinfo name="alloc_memf.c">
+<fileinfo name="iexscanf.c">
</fileinfo>
-<fileinfo name="comm_get_attrf.c">
+<fileinfo name="typedarrayf.c">
</fileinfo>
-<fileinfo name="cart_subf.c">
+<fileinfo name="group_rankf.c">
</fileinfo>
-<fileinfo name="typegnamef.c">
+<fileinfo name="typecstructf.c">
</fileinfo>
-<fileinfo name="typecontigf.c">
+<fileinfo name="infognkf.c">
</fileinfo>
-<fileinfo name="op_freef.c">
+<fileinfo name="type_match_sizef.c">
</fileinfo>
-<fileinfo name="typechvecf.c">
+<fileinfo name="win_flush_localf.c">
</fileinfo>
-<fileinfo name="typecresizef.c">
+<fileinfo name="statusc2f.c">
</fileinfo>
-<fileinfo name="ssendf.c">
+<fileinfo name="dist_graph_createf.c">
</fileinfo>
-<fileinfo name="comm_get_infof.c">
+<fileinfo name="comm_comparef.c">
</fileinfo>
-<fileinfo name="ireduce_scatter_blockf.c">
+<fileinfo name="ialltoallwf.c">
</fileinfo>
-<fileinfo name="info_dupf.c">
+<fileinfo name="comm_freef.c">
</fileinfo>
-<fileinfo name="gatherf.c">
+<fileinfo name="register_datarepf.c">
</fileinfo>
-<fileinfo name="iccreatef.c">
+<fileinfo name="testsomef.c">
</fileinfo>
-<fileinfo name="iallgathervf.c">
+<fileinfo name="win_get_groupf.c">
</fileinfo>
-<fileinfo name="file_read_at_all_beginf.c">
+<fileinfo name="info_deletef.c">
</fileinfo>
-<fileinfo name="file_read_ordered_beginf.c">
+<fileinfo name="file_get_byte_offsetf.c">
</fileinfo>
-<fileinfo name="comm_acceptf.c">
+<fileinfo name="win_set_namef.c">
</fileinfo>
-<fileinfo name="filecallerrf.c">
+<fileinfo name="win_unlockf.c">
</fileinfo>
-<fileinfo name="error_classf.c">
+<fileinfo name="win_waitf.c">
</fileinfo>
-<fileinfo name="bcastf.c">
+<fileinfo name="type_ubf.c">
</fileinfo>
-<fileinfo name="register_datarepf.c">
+<fileinfo name="ireducef.c">
</fileinfo>
-<fileinfo name="comm_set_namef.c">
+<fileinfo name="ssend_initf.c">
</fileinfo>
-<fileinfo name="file_read_atf.c">
+<fileinfo name="testf.c">
</fileinfo>
-<fileinfo name="typegtextf.c">
+<fileinfo name="query_threadf.c">
</fileinfo>
-<fileinfo name="lookup_namef.c">
+<fileinfo name="file_set_infof.c">
</fileinfo>
-<fileinfo name="compare_and_swapf.c">
+<fileinfo name="comm_get_infof.c">
</fileinfo>
-<fileinfo name="rputf.c">
+<fileinfo name="comm_agreef.c">
</fileinfo>
-<fileinfo name="improbef.c">
+<fileinfo name="infognthkf.c">
</fileinfo>
-<fileinfo name="cart_mapf.c">
+<fileinfo name="scattervf.c">
</fileinfo>
<fileinfo name="file_read_allf.c">
</fileinfo>
-<fileinfo name="comm_splitf.c">
+<fileinfo name="ialltoallf.c">
</fileinfo>
-<fileinfo name="group_inclf.c">
+<fileinfo name="testallf.c">
</fileinfo>
-<fileinfo name="infovallenf.c">
+<fileinfo name="request_freef.c">
</fileinfo>
-<fileinfo name="sendf.c">
+<fileinfo name="comm_set_attrf.c">
</fileinfo>
-<fileinfo name="null_type_copy_fnf.c">
+<fileinfo name="comm_set_infof.c">
</fileinfo>
-<fileinfo name="wtickf.c">
+<fileinfo name="file_get_sizef.c">
</fileinfo>
-<fileinfo name="scattervf.c">
+<fileinfo name="adderrstringf.c">
</fileinfo>
-<fileinfo name="addressf.c">
+<fileinfo name="typechvecf.c">
</fileinfo>
-<fileinfo name="info_setf.c">
+<fileinfo name="dims_createf.c">
</fileinfo>
-<fileinfo name="comm_dupf.c">
+<fileinfo name="reqgetstatf.c">
</fileinfo>
-<fileinfo name="get_elementsf.c">
+<fileinfo name="comm_create_groupf.c">
</fileinfo>
-<fileinfo name="file_get_viewf.c">
+<fileinfo name="rputf.c">
</fileinfo>
-<fileinfo name="rget_accumulatef.c">
+<fileinfo name="neighbor_alltoallwf.c">
</fileinfo>
-<fileinfo name="isendf.c">
+<fileinfo name="commdelattrf.c">
</fileinfo>
-<fileinfo name="file_write_at_allf.c">
+<fileinfo name="null_comm_del_fnf.c">
</fileinfo>
-<fileinfo name="neighbor_alltoallf.c">
+<fileinfo name="compare_and_swapf.c">
</fileinfo>
-<fileinfo name="comm_failure_get_ackedf.c">
+<fileinfo name="file_iread_atf.c">
</fileinfo>
-<fileinfo name="comm_failure_ackf.c">
+<fileinfo name="mpi_fortimpl.h">
</fileinfo>
-<fileinfo name="errhcreatef.c">
+<fileinfo name="comm_acceptf.c">
</fileinfo>
-<fileinfo name="get_countf.c">
+<fileinfo name="typecsubarrf.c">
</fileinfo>
-<fileinfo name="neighbor_allgathervf.c">
+<fileinfo name="iscanf.c">
</fileinfo>
-<fileinfo name="unpubnamef.c">
+<fileinfo name="type_lbf.c">
</fileinfo>
-<fileinfo name="type_hindexedf.c">
+<fileinfo name="type_dupf.c">
</fileinfo>
-<fileinfo name="initthreadf.c">
+<fileinfo name="open_portf.c">
</fileinfo>
-<fileinfo name="cart_rankf.c">
+<fileinfo name="grfnbcountf.c">
</fileinfo>
-<fileinfo name="cart_createf.c">
+<fileinfo name="close_portf.c">
</fileinfo>
-<fileinfo name="testcancelf.c">
+<fileinfo name="getaddressf.c">
</fileinfo>
-<fileinfo name="commcallerrf.c">
+<fileinfo name="graph_createf.c">
</fileinfo>
-<fileinfo name="mprobef.c">
+<fileinfo name="rsend_initf.c">
</fileinfo>
-<fileinfo name="grouprinclf.c">
+<fileinfo name="isendf.c">
</fileinfo>
-<fileinfo name="error_stringf.c">
+<fileinfo name="irecvf.c">
</fileinfo>
-<fileinfo name="typechindf.c">
+<fileinfo name="igatherf.c">
</fileinfo>
-<fileinfo name="win_get_attrf.c">
+<fileinfo name="bsendf.c">
</fileinfo>
-<fileinfo name="cart_shiftf.c">
+<fileinfo name="reduce_scatter_blockf.c">
</fileinfo>
-<fileinfo name="comm_dup_with_infof.c">
+<fileinfo name="comm_dupf.c">
</fileinfo>
-<fileinfo name="groupdifff.c">
+<fileinfo name="type_hvectorf.c">
</fileinfo>
-<fileinfo name="probef.c">
+<fileinfo name="file_iread_sharedf.c">
</fileinfo>
-<fileinfo name="win_lockf.c">
+<fileinfo name="grouptranksf.c">
</fileinfo>
-<fileinfo name="commgeterrf.c">
+<fileinfo name="cancelf.c">
</fileinfo>
-<fileinfo name="file_iread_at_allf.c">
+<fileinfo name="waitanyf.c">
</fileinfo>
-<fileinfo name="accumulatef.c">
+<fileinfo name="file_preallocatef.c">
</fileinfo>
-<fileinfo name="info_freef.c">
+<fileinfo name="win_flushf.c">
</fileinfo>
-<fileinfo name="greqstartf.c">
+<fileinfo name="op_createf.c">
</fileinfo>
-<fileinfo name="fileseterrf.c">
+<fileinfo name="typegetextentf.c">
</fileinfo>
-<fileinfo name="ireducef.c">
+<fileinfo name="fileseterrf.c">
</fileinfo>
-<fileinfo name="comm_agreef.c">
+<fileinfo name="alltoallf.c">
</fileinfo>
-<fileinfo name="bsendf.c">
+<fileinfo name="ibsendf.c">
</fileinfo>
-<fileinfo name="file_read_at_all_endf.c">
+<fileinfo name="commcallerrf.c">
</fileinfo>
-<fileinfo name="adderrstringf.c">
+<fileinfo name="alloc_memf.c">
</fileinfo>
-<fileinfo name="file_preallocatef.c">
+<fileinfo name="ssendf.c">
</fileinfo>
-<fileinfo name="greqcompletef.c">
+<fileinfo name="file_read_at_allf.c">
</fileinfo>
-<fileinfo name="statgetclf.c">
+<fileinfo name="typecresizef.c">
</fileinfo>
-<fileinfo name="file_read_all_beginf.c">
+<fileinfo name="grouprinclf.c">
</fileinfo>
-<fileinfo name="file_get_byte_offsetf.c">
+<fileinfo name="file_get_infof.c">
</fileinfo>
-<fileinfo name="win_detachf.c">
+<fileinfo name="sendf.c">
</fileinfo>
-<fileinfo name="comm_connectf.c">
+<fileinfo name="info_createf.c">
</fileinfo>
-<fileinfo name="bufattachf.c">
+<fileinfo name="neighbor_alltoallf.c">
</fileinfo>
-<fileinfo name="dup_type_fnf.c">
+<fileinfo name="comm_createf.c">
</fileinfo>
-<fileinfo name="reduce_localf.c">
+<fileinfo name="iallreducef.c">
</fileinfo>
-<fileinfo name="type_size_xf.c">
+<fileinfo name="keyval_createf.c">
</fileinfo>
-<fileinfo name="cart_coordsf.c">
+<fileinfo name="cartdim_getf.c">
</fileinfo>
-<fileinfo name="scanf.c">
+<fileinfo name="cart_createf.c">
</fileinfo>
-<fileinfo name="file_writef.c">
+<fileinfo name="packf.c">
</fileinfo>
-<fileinfo name="file_get_amodef.c">
+<fileinfo name="typechindf.c">
</fileinfo>
-<fileinfo name="file_write_atf.c">
+<fileinfo name="win_postf.c">
</fileinfo>
-<fileinfo name="file_set_infof.c">
+<fileinfo name="improbef.c">
</fileinfo>
-<fileinfo name="group_unionf.c">
+<fileinfo name="type_commitf.c">
</fileinfo>
-<fileinfo name="file_write_orderedf.c">
+<fileinfo name="type_hindexedf.c">
</fileinfo>
-<fileinfo name="group_exclf.c">
+<fileinfo name="file_get_position_sharedf.c">
</fileinfo>
-<fileinfo name="ialltoallvf.c">
+<fileinfo name="file_write_all_endf.c">
</fileinfo>
-<fileinfo name="typenewkeyf.c">
+<fileinfo name="info_freef.c">
</fileinfo>
-<fileinfo name="typefreekeyf.c">
+<fileinfo name="ibcastf.c">
</fileinfo>
-<fileinfo name="file_get_groupf.c">
+<fileinfo name="lookup_namef.c">
</fileinfo>
-<fileinfo name="dup_win_fnf.c">
+<fileinfo name="status_set_elements_xf.c">
</fileinfo>
-<fileinfo name="infognkf.c">
+<fileinfo name="null_copy_fnf.c">
</fileinfo>
-<fileinfo name="alltoallf.c">
+<fileinfo name="winfreekeyf.c">
</fileinfo>
-<fileinfo name="null_type_del_fnf.c">
+<fileinfo name="pack_externalf.c">
</fileinfo>
-<fileinfo name="winfreekeyf.c">
+<fileinfo name="iccreatef.c">
</fileinfo>
-<fileinfo name="bufdetachf.c">
+<fileinfo name="ineighbor_allgatherf.c">
</fileinfo>
-<fileinfo name="ibsendf.c">
+<fileinfo name="dup_type_fnf.c">
</fileinfo>
-<fileinfo name="scatterf.c">
+<fileinfo name="infovallenf.c">
</fileinfo>
-<fileinfo name="waitf.c">
+<fileinfo name="startf.c">
</fileinfo>
-<fileinfo name="wincallerrf.c">
+<fileinfo name="file_read_orderedf.c">
</fileinfo>
-<fileinfo name="win_postf.c">
+<fileinfo name="errhfreef.c">
</fileinfo>
-<fileinfo name="commparentf.c">
+<fileinfo name="file_read_all_endf.c">
</fileinfo>
-<fileinfo name="fetch_and_opf.c">
+<fileinfo name="recv_initf.c">
</fileinfo>
-<fileinfo name="get_library_versionf.c">
+<fileinfo name="statsetelf.c">
</fileinfo>
-<fileinfo name="typecsubarrf.c">
+<fileinfo name="file_write_ordered_endf.c">
</fileinfo>
-<fileinfo name="comm_createf.c">
+<fileinfo name="comm_joinf.c">
</fileinfo>
-<fileinfo name="file_get_positionf.c">
+<fileinfo name="file_iwrite_atf.c">
</fileinfo>
-<fileinfo name="info_getf.c">
+<fileinfo name="comm_sizef.c">
</fileinfo>
-<fileinfo name="get_versionf.c">
+<fileinfo name="win_allocate_sharedf.c">
</fileinfo>
-<fileinfo name="comm_split_typef.c">
+<fileinfo name="commdiscf.c">
</fileinfo>
-<fileinfo name="graph_createf.c">
+<fileinfo name="abortf.c">
</fileinfo>
-<fileinfo name="win_allocatef.c">
+<fileinfo name="op_commutativef.c">
</fileinfo>
-<fileinfo name="aint_difff.c">
+<fileinfo name="pcontrolf.c">
</fileinfo>
-<fileinfo name="file_set_viewf.c">
+<fileinfo name="redscatf.c">
</fileinfo>
-<fileinfo name="file_set_sizef.c">
+<fileinfo name="iallgathervf.c">
</fileinfo>
-<fileinfo name="keyval_createf.c">
+<fileinfo name="probef.c">
</fileinfo>
-<fileinfo name="comm_freef.c">
+<fileinfo name="get_countf.c">
</fileinfo>
-<fileinfo name="neighbor_alltoallwf.c">
+<fileinfo name="comm_set_namef.c">
</fileinfo>
-<fileinfo name="initf.c">
+<fileinfo name="file_write_at_all_endf.c">
</fileinfo>
-<fileinfo name="open_portf.c">
+<fileinfo name="cart_rankf.c">
</fileinfo>
-<fileinfo name="errhgetf.c">
+<fileinfo name="comm_revokef.c">
</fileinfo>
-<fileinfo name="win_startf.c">
+<fileinfo name="greqcompletef.c">
</fileinfo>
-<fileinfo name="initializedf.c">
+<fileinfo name="reduce_localf.c">
</fileinfo>
-<fileinfo name="type_structf.c">
+<fileinfo name="fproto.h">
</fileinfo>
-<fileinfo name="recv_initf.c">
+<fileinfo name="file_iread_at_allf.c">
</fileinfo>
-<fileinfo name="ibcastf.c">
+<fileinfo name="ialltoallvf.c">
</fileinfo>
-<fileinfo name="gathervf.c">
+<fileinfo name="typecontigf.c">
</fileinfo>
-<fileinfo name="unpackf.c">
+<fileinfo name="winseterrf.c">
</fileinfo>
-<fileinfo name="commrsizef.c">
+<fileinfo name="grouprexclf.c">
</fileinfo>
-<fileinfo name="waitallf.c">
+<fileinfo name="ineighbor_alltoallwf.c">
</fileinfo>
-<fileinfo name="commgetnamf.c">
+<fileinfo name="type_create_hindexed_blockf.c">
</fileinfo>
-<fileinfo name="startallf.c">
+<fileinfo name="cart_mapf.c">
</fileinfo>
-<fileinfo name="win_flush_localf.c">
+<fileinfo name="type_freef.c">
</fileinfo>
-<fileinfo name="sendrecvf.c">
+<fileinfo name="scanf.c">
</fileinfo>
-<fileinfo name="file_write_ordered_endf.c">
+<fileinfo name="gathervf.c">
</fileinfo>
-<fileinfo name="commtesticf.c">
+<fileinfo name="group_exclf.c">
</fileinfo>
-<fileinfo name="file_iread_allf.c">
+<fileinfo name="unpubnamef.c">
</fileinfo>
-<fileinfo name="ineighbor_alltoallwf.c">
+<fileinfo name="dup_win_fnf.c">
</fileinfo>
-<fileinfo name="redscatf.c">
+<fileinfo name="waitallf.c">
</fileinfo>
-<fileinfo name="win_create_dynamicf.c">
+<fileinfo name="imrecvf.c">
</fileinfo>
-<fileinfo name="null_copy_fnf.c">
+<fileinfo name="keyval_freef.c">
</fileinfo>
-<fileinfo name="packf.c">
+<fileinfo name="getpnamef.c">
</fileinfo>
-<fileinfo name="irsendf.c">
+<fileinfo name="get_library_versionf.c">
</fileinfo>
-<fileinfo name="statsetelf.c">
+<fileinfo name="graph_mapf.c">
</fileinfo>
-<fileinfo name="infognthkf.c">
+<fileinfo name="file_set_atomicityf.c">
</fileinfo>
-<fileinfo name="commnewkeyf.c">
+<fileinfo name="statusf2c.c">
</fileinfo>
-<fileinfo name="topo_testf.c">
+<fileinfo name="cart_getf.c">
</fileinfo>
-<fileinfo name="graph_mapf.c">
+<fileinfo name="get_accumulatef.c">
</fileinfo>
-<fileinfo name="win_attachf.c">
+<fileinfo name="win_create_dynamicf.c">
</fileinfo>
-<fileinfo name="null_win_del_fnf.c">
+<fileinfo name="reducef.c">
</fileinfo>
<fileinfo name="comm_spawnf.c">
</fileinfo>
-<fileinfo name="barrierf.c">
+<fileinfo name="win_freef.c">
</fileinfo>
-<fileinfo name="grfnbrsf.c">
+<fileinfo name="adderrcodef.c">
</fileinfo>
-<fileinfo name="file_read_all_endf.c">
+<fileinfo name="typedelattrf.c">
</fileinfo>
-<fileinfo name="type_commitf.c">
+<fileinfo name="wincallerrf.c">
</fileinfo>
-<fileinfo name="status_set_elements_xf.c">
+<fileinfo name="bufdetachf.c">
</fileinfo>
-<fileinfo name="comm_sizef.c">
+<fileinfo name="file_get_amodef.c">
</fileinfo>
-<fileinfo name="type_get_extent_xf.c">
+<fileinfo name="finalizef.c">
</fileinfo>
-<fileinfo name="dup_fnf.c">
+<fileinfo name="waitsomef.c">
</fileinfo>
-<fileinfo name="get_accumulatef.c">
+<fileinfo name="file_read_sharedf.c">
</fileinfo>
-<fileinfo name="file_deletef.c">
+<fileinfo name="comm_get_attrf.c">
</fileinfo>
-<fileinfo name="wincreerrf.c">
+<fileinfo name="comm_split_typef.c">
</fileinfo>
-<fileinfo name="errhsetf.c">
+<fileinfo name="graph_getf.c">
</fileinfo>
-<fileinfo name="rsend_initf.c">
+<fileinfo name="dup_fnf.c">
</fileinfo>
-<fileinfo name="getaddressf.c">
+<fileinfo name="testanyf.c">
</fileinfo>
-<fileinfo name="dims_createf.c">
+<fileinfo name="filecreerrf.c">
</fileinfo>
-<fileinfo name="iexscanf.c">
+<fileinfo name="null_comm_copy_fnf.c">
</fileinfo>
-<fileinfo name="win_shared_queryf.c">
+<fileinfo name="aint_difff.c">
</fileinfo>
-<fileinfo name="cartdim_getf.c">
+<fileinfo name="sndrcvrplf.c">
</fileinfo>
-<fileinfo name="typedelattrf.c">
+<fileinfo name="group_comparef.c">
</fileinfo>
-<fileinfo name="dist_graph_create_adjacentf.c">
+<fileinfo name="file_write_atf.c">
</fileinfo>
-<fileinfo name="win_unlock_allf.c">
+<fileinfo name="type_get_extent_xf.c">
</fileinfo>
-<fileinfo name="grouptranksf.c">
+<fileinfo name="aint_addf.c">
</fileinfo>
-<fileinfo name="type_vectorf.c">
+<fileinfo name="info_dupf.c">
</fileinfo>
-<fileinfo name="finalizedf.c">
+<fileinfo name="comm_rankf.c">
</fileinfo>
-<fileinfo name="commrgroupf.c">
+<fileinfo name="file_read_at_all_beginf.c">
</fileinfo>
-<fileinfo name="win_fencef.c">
+<fileinfo name="win_shared_queryf.c">
</fileinfo>
-<fileinfo name="testanyf.c">
+<fileinfo name="comm_failure_get_ackedf.c">
</fileinfo>
-<fileinfo name="win_flush_allf.c">
+<fileinfo name="type_extentf.c">
</fileinfo>
-<fileinfo name="file_write_sharedf.c">
+<fileinfo name="comm_splitf.c">
</fileinfo>
-<fileinfo name="waitsomef.c">
+<fileinfo name="commnewkeyf.c">
</fileinfo>
-<fileinfo name="file_write_at_all_endf.c">
+<fileinfo name="greqstartf.c">
</fileinfo>
-<fileinfo name="rgetf.c">
+<fileinfo name="file_write_at_allf.c">
</fileinfo>
-<fileinfo name="comm_joinf.c">
+<fileinfo name="file_readf.c">
</fileinfo>
-<fileinfo name="packesizef.c">
+<fileinfo name="type_indexedf.c">
</fileinfo>
-<fileinfo name="graphdims_getf.c">
+<fileinfo name="isthrmainf.c">
</fileinfo>
-<fileinfo name="fdebug.c">
+<fileinfo name="type_size_xf.c">
</fileinfo>
-<fileinfo name="win_completef.c">
+<fileinfo name="errhcreatef.c">
</fileinfo>
-<fileinfo name="win_createf.c">
+<fileinfo name="win_get_attrf.c">
</fileinfo>
-<fileinfo name="file_iwrite_atf.c">
+<fileinfo name="commseterrf.c">
</fileinfo>
-<fileinfo name="ssend_initf.c">
+<fileinfo name="file_get_type_extentf.c">
</fileinfo>
-<fileinfo name="filegeterrf.c">
+<fileinfo name="typegnamef.c">
</fileinfo>
-<fileinfo name="win_freef.c">
+<fileinfo name="file_ireadf.c">
</fileinfo>
-<fileinfo name="ialltoallwf.c">
+<fileinfo name="get_versionf.c">
</fileinfo>
-<fileinfo name="ineighbor_allgatherf.c">
+<fileinfo name="finalizedf.c">
</fileinfo>
-<fileinfo name="file_iread_sharedf.c">
+<fileinfo name="grfnbrsf.c">
</fileinfo>
-<fileinfo name="op_commutativef.c">
+<fileinfo name="file_write_all_beginf.c">
</fileinfo>
-<fileinfo name="file_seek_sharedf.c">
+<fileinfo name="commrsizef.c">
</fileinfo>
-<fileinfo name="attr_deletef.c">
+<fileinfo name="null_win_del_fnf.c">
</fileinfo>
-<fileinfo name="getpnamef.c">
+<fileinfo name="typegetenvf.c">
</fileinfo>
-<fileinfo name="allgatherf.c">
+<fileinfo name="recvf.c">
</fileinfo>
-<fileinfo name="commcreerrf.c">
+<fileinfo name="file_seek_sharedf.c">
</fileinfo>
-<fileinfo name="type_freef.c">
+<fileinfo name="get_elementsf.c">
</fileinfo>
-<fileinfo name="comm_create_groupf.c">
+<fileinfo name="allgatherf.c">
</fileinfo>
-<fileinfo name="info_deletef.c">
+<fileinfo name="iallgatherf.c">
</fileinfo>
-<fileinfo name="spawnmultf.c">
+<fileinfo name="ineighbor_alltoallvf.c">
</fileinfo>
-<fileinfo name="win_waitf.c">
+<fileinfo name="attr_putf.c">
</fileinfo>
-<fileinfo name="file_iwrite_allf.c">
+<fileinfo name="win_allocatef.c">
</fileinfo>
-<fileinfo name="iallreducef.c">
+<fileinfo name="win_flush_allf.c">
</fileinfo>
-<fileinfo name="iallgatherf.c">
+<fileinfo name="cart_shiftf.c">
</fileinfo>
-<fileinfo name="reducef.c">
+<fileinfo name="issendf.c">
</fileinfo>
-<fileinfo name="file_iread_atf.c">
+<fileinfo name="errhgetf.c">
</fileinfo>
-<fileinfo name="type_ubf.c">
+<fileinfo name="file_set_sizef.c">
</fileinfo>
-<fileinfo name="file_write_at_all_beginf.c">
+<fileinfo name="win_unlock_allf.c">
</fileinfo>
-<fileinfo name="request_freef.c">
+<fileinfo name="file_iwritef.c">
</fileinfo>
-<fileinfo name="ireduce_scatterf.c">
+<fileinfo name="windelattrf.c">
</fileinfo>
-<fileinfo name="file_write_all_endf.c">
+<fileinfo name="win_get_namef.c">
</fileinfo>
-<fileinfo name="dist_graph_neighborsf.c">
+<fileinfo name="dup_comm_fnf.c">
</fileinfo>
-<fileinfo name="win_flushf.c">
+<fileinfo name="commfreekeyf.c">
</fileinfo>
-<fileinfo name="wingeterrf.c">
+<fileinfo name="fetch_and_opf.c">
</fileinfo>
-<fileinfo name="allgathervf.c">
+<fileinfo name="wtickf.c">
</fileinfo>
-<fileinfo name="aint_addf.c">
+<fileinfo name="typesetattrf.c">
</fileinfo>
-<fileinfo name="grfnbcountf.c">
+<fileinfo name="file_writef.c">
</fileinfo>
-<fileinfo name="grouprexclf.c">
+<fileinfo name="win_attachf.c">
</fileinfo>
-<fileinfo name="exscanf.c">
+<fileinfo name="iprobef.c">
</fileinfo>
-<fileinfo name="iscanf.c">
+<fileinfo name="wincreerrf.c">
</fileinfo>
-<fileinfo name="group_rankf.c">
+<fileinfo name="sendrecvf.c">
</fileinfo>
-<fileinfo name="winseterrf.c">
+<fileinfo name="win_startf.c">
</fileinfo>
-<fileinfo name="send_initf.c">
+<fileinfo name="win_set_attrf.c">
</fileinfo>
-<fileinfo name="comm_idupf.c">
+<fileinfo name="file_read_at_all_endf.c">
</fileinfo>
-<fileinfo name="typegetcntsf.c">
+<fileinfo name="getf.c">
</fileinfo>
-<fileinfo name="adderrcodef.c">
+<fileinfo name="groupdifff.c">
</fileinfo>
-<fileinfo name="comm_comparef.c">
+<fileinfo name="file_iwrite_sharedf.c">
</fileinfo>
-<fileinfo name="win_lock_allf.c">
+<fileinfo name="gatherf.c">
</fileinfo>
-<fileinfo name="group_sizef.c">
+<fileinfo name="type_get_attrf.c">
</fileinfo>
-<fileinfo name="allreducef.c">
+<fileinfo name="ineighbor_allgathervf.c">
</fileinfo>
-<fileinfo name="commdiscf.c">
+<fileinfo name="alltoallvf.c">
</fileinfo>
-<fileinfo name="neighbor_alltoallvf.c">
+<fileinfo name="win_lock_allf.c">
</fileinfo>
-<fileinfo name="getf.c">
+<fileinfo name="icmergef.c">
</fileinfo>
-<fileinfo name="issendf.c">
+<fileinfo name="group_unionf.c">
</fileinfo>
-<fileinfo name="win_set_attrf.c">
+<fileinfo name="igathervf.c">
</fileinfo>
-<fileinfo name="file_set_atomicityf.c">
+<fileinfo name="topo_testf.c">
</fileinfo>
-<fileinfo name="typecstructf.c">
+<fileinfo name="file_write_sharedf.c">
</fileinfo>
-<fileinfo name="ineighbor_alltoallf.c">
+<fileinfo name="addressf.c">
</fileinfo>
-<fileinfo name="abortf.c">
+<fileinfo name="commtesticf.c">
</fileinfo>
-<fileinfo name="typegetenvf.c">
+<fileinfo name="file_read_ordered_endf.c">
</fileinfo>
-<fileinfo name="win_set_infof.c">
+<fileinfo name="unpackf.c">
</fileinfo>
-<fileinfo name="testf.c">
+<fileinfo name="file_read_atf.c">
</fileinfo>
-<fileinfo name="close_portf.c">
+<fileinfo name="typegetcntsf.c">
</fileinfo>
-<fileinfo name="win_allocate_sharedf.c">
+<fileinfo name="spawnmultf.c">
</fileinfo>
-<fileinfo name="type_dupf.c">
+<fileinfo name="win_fencef.c">
</fileinfo>
<fileinfo name="adderrclassf.c">
</fileinfo>
-<fileinfo name="group_comparef.c">
+<fileinfo name="cart_coordsf.c">
</fileinfo>
-<fileinfo name="type_sizef.c">
+<fileinfo name="error_classf.c">
</fileinfo>
-<fileinfo name="graph_getf.c">
+<fileinfo name="dist_graph_neighborsf.c">
</fileinfo>
-<fileinfo name="file_get_atomicityf.c">
+<fileinfo name="pack_sizef.c">
+</fileinfo>
+<fileinfo name="win_get_infof.c">
</fileinfo>
</data>
diff --git a/src/binding/fortran/mpif_h/adderrstringf.c b/src/binding/fortran/mpif_h/adderrstringf.c
index 6579f7a..d8e46ac 100644
--- a/src/binding/fortran/mpif_h/adderrstringf.c
+++ b/src/binding/fortran/mpif_h/adderrstringf.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_add_error_string_ ( MPI_Fint *v1, char *v2 FORT
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
*ierr = MPI_Add_error_string( (int)*v1, p2 );
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/addressf.c b/src/binding/fortran/mpif_h/addressf.c
index e0e6a06..0fcfcf2 100644
--- a/src/binding/fortran/mpif_h/addressf.c
+++ b/src/binding/fortran/mpif_h/addressf.c
@@ -265,9 +265,8 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_address_( void*, MPI_Fint *, MPI_Fint *
/* Prototypes for the Fortran interfaces */
#include "fproto.h"
-#include "mpierrs.h"
+#include "mpir_err.h"
#include <stdio.h>
-#include "mpierror.h"
FORT_DLL_SPEC void FORT_CALL mpi_address_ ( void*v1, MPI_Fint *v2, MPI_Fint *ierr ){
MPI_Aint a, b;
*ierr = MPI_Address( v1, &a );
diff --git a/src/binding/fortran/mpif_h/attr_getf.c b/src/binding/fortran/mpif_h/attr_getf.c
index 6af5244..6f04d28 100644
--- a/src/binding/fortran/mpif_h/attr_getf.c
+++ b/src/binding/fortran/mpif_h/attr_getf.c
@@ -269,13 +269,13 @@ FORT_DLL_SPEC void FORT_CALL mpi_attr_get_ ( MPI_Fint *v1, MPI_Fint *v2, void*v3
void *attrv3;
int l4;
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_CommGetAttr_fort( (MPI_Comm)(*v1), (int)*v2, &attrv3, &l4, MPIR_ATTR_INT );
+ *ierr = MPII_Comm_get_attr_fort( (MPI_Comm)(*v1), (int)*v2, &attrv3, &l4, MPIR_ATTR_INT );
if ((int)*ierr || !l4) {
*(MPI_Fint*)v3 = 0;
}
else {
- *(MPI_Fint*)v3 = (MPI_Fint)(MPIU_Pint)attrv3;
+ *(MPI_Fint*)v3 = (MPI_Fint)(intptr_t)attrv3;
}
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/attr_putf.c b/src/binding/fortran/mpif_h/attr_putf.c
index cdad996..2e00246 100644
--- a/src/binding/fortran/mpif_h/attr_putf.c
+++ b/src/binding/fortran/mpif_h/attr_putf.c
@@ -267,5 +267,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_attr_put_( MPI_Fint *, MPI_Fint *, void
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_attr_put_ ( MPI_Fint *v1, MPI_Fint *v2, void*v3, MPI_Fint *ierr ){
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_CommSetAttr( (MPI_Comm)(*v1), (int)*v2, (void *)((MPIU_Pint)*(MPI_Fint *)v3), MPIR_ATTR_INT );
+ *ierr = MPII_Comm_set_attr( (MPI_Comm)(*v1), (int)*v2, (void *)((intptr_t)*(MPI_Fint *)v3), MPIR_ATTR_INT );
}
diff --git a/src/binding/fortran/mpif_h/buildiface b/src/binding/fortran/mpif_h/buildiface
index 9eebc69..a231f3b 100755
--- a/src/binding/fortran/mpif_h/buildiface
+++ b/src/binding/fortran/mpif_h/buildiface
@@ -37,8 +37,8 @@ $routine_pattern = "[A-Z][a-z0-9_]*";
my @routine_prefixes = qw(MPI_ MPIX_);
my @out_prefixes = qw(mpi_ mpix_);
-$malloc = "MPIU_Malloc";
-$free = "MPIU_Free";
+$malloc = "MPL_malloc";
+$free = "MPL_free";
$header_file = "mpi_fortimpl.h";
$debug = 0;
$writeRoutineList = 0; # Set to 1 to get a list of MPI routines
@@ -382,14 +382,14 @@ foreach $_ (@ARGV) {
# at the end. This is used with the attribute routines which must
# pass an additional argument to a special attribute routine that handles
# the differences between C and Fortran attributes.
-%ChangeCall = ( 'Comm_get_attr' => 'MPIR_CommGetAttr_fort:!MPIR_ATTR_AINT' ,
- 'Type_get_attr' => 'MPIR_TypeGetAttr:!MPIR_ATTR_AINT',
- 'Win_get_attr' => 'MPIR_WinGetAttr:!MPIR_ATTR_AINT',
- 'Attr_get' => 'MPIR_CommGetAttr_fort:!MPIR_ATTR_INT',
- 'Comm_set_attr' => 'MPIR_CommSetAttr:!MPIR_ATTR_AINT',
- 'Type_set_attr' => 'MPIR_TypeSetAttr:!MPIR_ATTR_AINT',
- 'Win_set_attr' => 'MPIR_WinSetAttr:!MPIR_ATTR_AINT',
- 'Attr_put' => 'MPIR_CommSetAttr:!MPIR_ATTR_INT',
+%ChangeCall = ( 'Comm_get_attr' => 'MPII_Comm_get_attr_fort:!MPIR_ATTR_AINT' ,
+ 'Type_get_attr' => 'MPII_Type_get_attr:!MPIR_ATTR_AINT',
+ 'Win_get_attr' => 'MPII_Win_get_attr:!MPIR_ATTR_AINT',
+ 'Attr_get' => 'MPII_Comm_get_attr_fort:!MPIR_ATTR_INT',
+ 'Comm_set_attr' => 'MPII_Comm_set_attr:!MPIR_ATTR_AINT',
+ 'Type_set_attr' => 'MPII_Type_set_attr:!MPIR_ATTR_AINT',
+ 'Win_set_attr' => 'MPII_Win_set_attr:!MPIR_ATTR_AINT',
+ 'Attr_put' => 'MPII_Comm_set_attr:!MPIR_ATTR_INT',
);
#
# Note that wtime and wtick aren't found because they don't match the
@@ -1906,7 +1906,7 @@ sub unweighted_out_ctof {
# Logical variables
sub logical_ftoc {
my $count = $_[0];
- print $OUTFD " l$count = MPIR_FROM_FLOG(*v$count);\n";
+ print $OUTFD " l$count = MPII_FROM_FLOG(*v$count);\n";
}
sub logical_in_decl {
my $count = $_[0];
@@ -1928,7 +1928,7 @@ sub logical_out_ctof {
my $coutvar = $_[0];
my $outvar = $_[1];
if ($do_logical) {
- print $OUTFD " if ($errparmlval == MPI_SUCCESS) *$outvar = MPIR_TO_FLOG($coutvar);\n";
+ print $OUTFD " if ($errparmlval == MPI_SUCCESS) *$outvar = MPII_TO_FLOG($coutvar);\n";
}
}
sub logical_out_decl {
@@ -1969,7 +1969,7 @@ sub logical_array_in_ftoc {
if ($ActSize) {int li;
l$count = (int *)$malloc($ActSize * sizeof(int));
for (li=0; li<$ActSize; li++) {
- l$count\[li\] = MPIR_FROM_FLOG(v$count\[li\]);
+ l$count\[li\] = MPII_FROM_FLOG(v$count\[li\]);
}
}
";
@@ -2002,7 +2002,7 @@ sub logical_array_out_ctof {
print $OUTFD "\
if ($errparmlval == MPI_SUCCESS) {int li;
for (li=0; li<$ActSize; li++) {
- $outvar\[li\] = MPIR_TO_FLOG($coutvar\[li\]);
+ $outvar\[li\] = MPII_TO_FLOG($coutvar\[li\]);
}
}
";
@@ -2363,7 +2363,7 @@ sub handle_array_in_arg {
# where an address is larger than an MPI_Fint. This is correct; these
# routines are for the MPI-1 routines that use an MPI_Fint where the
# C code uses a void * (MPI_Aint in MPI-2).
-# Instead of using MPI_Aint, we use MPIU_Pint. This allows the MPI
+# Instead of using MPI_Aint, we use intptr_t. This allows the MPI
# implementation to set MPI_Aint to be *larger* than a pointer-sized-int,
# which is needed (as a temporary workaround) on systems like Blue Gene, which
# have 4 byte pointers but file systems that need 8 byte datatypes (not just
@@ -2380,7 +2380,7 @@ sub addrint_in_decl {
}
sub addrint_in_arg {
my $count = $_[0];
- print $OUTFD "(void *)((MPIU_Pint)*(MPI_Fint *)v$count)";
+ print $OUTFD "(void *)((intptr_t)*(MPI_Fint *)v$count)";
}
sub attrint_ctof {
@@ -2399,7 +2399,7 @@ sub attrint_ctof {
*(MPI_Fint*)$cvar = 0;
}
else {
- *(MPI_Fint*)$cvar = (MPI_Fint)(MPIU_Pint)attr$cvar;
+ *(MPI_Fint*)$cvar = (MPI_Fint)(intptr_t)attr$cvar;
}\n";
}
@@ -3611,7 +3611,7 @@ sub setF90Type_keyval {
if ($within_fint) { $argname = "l$argnum"; }
print $FD "\
if (*ierr == MPI_SUCCESS) {
- MPIR_Keyval_set_proxy( (int)$argname, MPIR_Type_copy_attr_f90_proxy, MPIR_Type_delete_attr_f90_proxy );
+ MPII_Keyval_set_proxy( (int)$argname, MPIR_Type_copy_attr_f90_proxy, MPIR_Type_delete_attr_f90_proxy );
}\n";
}
sub setF90Comm_keyval {
@@ -3622,7 +3622,7 @@ sub setF90Comm_keyval {
if ($within_fint) { $argname = "l$argnum"; }
print $FD "\
if (*ierr == MPI_SUCCESS) {
- MPIR_Keyval_set_proxy( (int)$argname, MPIR_Comm_copy_attr_f90_proxy, MPIR_Comm_delete_attr_f90_proxy );
+ MPII_Keyval_set_proxy( (int)$argname, MPII_Comm_copy_attr_f90_proxy, MPIR_Comm_delete_attr_f90_proxy );
}\n";
}
sub setF90Win_keyval {
@@ -3633,7 +3633,7 @@ sub setF90Win_keyval {
if ($within_fint) { $argname = "l$argnum"; }
print $FD "\
if (*ierr == MPI_SUCCESS) {
- MPIR_Keyval_set_proxy( (int)$argname, MPIR_Win_copy_attr_f90_proxy, MPIR_Win_delete_attr_f90_proxy );
+ MPII_Keyval_set_proxy( (int)$argname, MPIR_Win_copy_attr_f90_proxy, MPIR_Win_delete_attr_f90_proxy );
}\n";
}
sub setF77greq {
@@ -3644,7 +3644,7 @@ sub setF77greq {
print $FD "\
if (*ierr == MPI_SUCCESS) {
- MPIR_Grequest_set_lang_f77( $argname );
+ MPII_Grequest_set_lang_f77( $argname );
}\n";
}
@@ -4221,11 +4221,9 @@ sub build_specials {
$args = "void *, int *";
&print_header( "mpi_", "MPI_Address", "address", $args );
# Add the definitions needed for error reporting
- # (We could use mpiimpl.h, but mpierrs.h should be sufficient)
- # mpierror.h references FILE *, so needs stdio.h
- print $OUTFD "#include \"mpierrs.h\"\n";
+ # (We could use mpiimpl.h, but mpir_err.h should be sufficient)
+ print $OUTFD "#include \"mpir_err.h\"\n";
print $OUTFD "#include <stdio.h>\n";
- print $OUTFD "#include \"mpierror.h\"\n";
&print_routine_type_decl( $OUTFD, $out_prefix, "address" );
&print_args( $OUTFD, $args, 0, "address" );
#&print_attr;
@@ -4256,11 +4254,9 @@ sub build_specials {
$args = "void *, MPI_FAintp";
&print_header( "mpi_", "MPI_Get_address", "get_address", $args );
# Add the definitions needed for error reporting
- # (We could use mpiimpl.h, but mpierrs.h should be sufficient)
- # mpierror.h references FILE *, so needs stdio.h
- print $OUTFD "#include \"mpierrs.h\"\n";
+ # (We could use mpiimpl.h, but mpir_err.h should be sufficient)
+ print $OUTFD "#include \"mpir_err.h\"\n";
print $OUTFD "#include <stdio.h>\n";
- print $OUTFD "#include \"mpierror.h\"\n";
&print_routine_type_decl( $OUTFD, $out_prefix, "get_address" );
&print_args( $OUTFD, $args, 0, "get_address" );
#&print_attr;
@@ -4283,9 +4279,7 @@ sub build_specials {
&set_weak_decl( "MPI_Wtime", "void", "double" );
&set_weak_decl( "PMPI_Wtime", "void", "double" );
&print_header( "mpi_", "MPI_Wtime", "wtime", "" );
- # mpiu_timer.h is needed for the timer definitions
print $OUTFD "#include \"mpichconf.h\"\n";
- print $OUTFD "#include \"mpiu_timer.h\"\n";
&print_routine_type_decl( $OUTFD, $out_prefix, "wtime" );
print $OUTFD "( void ) ";
#&print_attr;
@@ -4312,9 +4306,7 @@ sub build_specials {
&set_weak_decl( "MPI_Wtick", "void", "double" );
&set_weak_decl( "PMPI_Wtick", "void", "double" );
&print_header( "mpi_", "MPI_Wtick", "wtick", "" );
- # mpiu_timer.h is needed for the timer definitions
print $OUTFD "#include \"mpichconf.h\"\n";
- print $OUTFD "#include \"mpiu_timer.h\"\n";
&print_routine_type_decl( $OUTFD, $out_prefix, "wtick" );
print $OUTFD "( void ) ";
#&print_attr;
@@ -4402,12 +4394,12 @@ typedef void (FORT_CALL F77_CopyFunction) (MPI_Fint *, MPI_Fint *, MPI_Aint *, M
/* Helper proxy function to thunk the attr copy function call into F77 calling convention */
static
int
-MPIR_Comm_copy_attr_f77_proxy(
+MPII_Comm_copy_attr_f77_proxy(
MPI_Comm_copy_attr_function* user_function,
MPI_Comm comm,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -4416,15 +4408,15 @@ MPIR_Comm_copy_attr_f77_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint *fextra = (MPI_Aint *)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F77_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR ((MPI_Aint) fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR ((MPI_Aint) fnew);
return (int)ierr;
}
@@ -4439,7 +4431,7 @@ MPIR_Comm_delete_attr_f77_proxy(
MPI_Comm_delete_attr_function* user_function,
MPI_Comm comm,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -4447,7 +4439,7 @@ MPIR_Comm_delete_attr_f77_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint *fextra = (MPI_Aint *)extra_state;
((F77_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -4464,7 +4456,7 @@ MPIR_Comm_delete_attr_f77_proxy(
*ierr = MPI_Comm_create_keyval( v1, v2, &l3, v4 );
if (!*ierr) {
*v3 = l3;
- MPIR_Keyval_set_proxy((int)*v3, MPIR_Comm_copy_attr_f77_proxy, MPIR_Comm_delete_attr_f77_proxy);
+ MPII_Keyval_set_proxy((int)*v3, MPII_Comm_copy_attr_f77_proxy, MPIR_Comm_delete_attr_f77_proxy);
}
}\n";
close ($OUTFD);
@@ -4487,7 +4479,7 @@ MPIR_Comm_delete_attr_f77_proxy(
#&print_attr;
print $OUTFD "{
*v5 = *v4;
- *v6 = MPIR_TO_FLOG(1);
+ *v6 = MPII_TO_FLOG(1);
*ierr = MPI_SUCCESS;
}\n";
close ($OUTFD);
@@ -4520,7 +4512,7 @@ MPIR_Comm_delete_attr_f77_proxy(
&print_args( $OUTFD, $args, 0, "null_copy_fn" );
print $OUTFD "{
*ierr = MPI_SUCCESS;
- *v6 = MPIR_TO_FLOG(0);
+ *v6 = MPII_TO_FLOG(0);
}\n";
close ($OUTFD);
&ReplaceIfDifferent( $filename, $filename . ".new" );
@@ -4577,10 +4569,9 @@ MPIR_Comm_delete_attr_f77_proxy(
* DO NOT EDIT
*/
#include \"mpi_fortimpl.h\"
-/* mpierrs.h and mpierror.h for the error code creation */
-#include \"mpierrs.h\"
+/* mpir_err.h for the error code creation */
+#include \"mpir_err.h\"
#include <stdio.h>
-#include \"mpierror.h\"
/* -- Begin Profiling Symbol Block for routine MPI_Status_f2c */
#if defined(USE_WEAK_SYMBOLS) && !defined(USE_ONLY_MPI_NAMES)
@@ -4651,10 +4642,9 @@ print $OUTFD "\
* DO NOT EDIT
*/
#include \"mpi_fortimpl.h\"
-/* mpierrs.h and mpierror.h for the error code creation */
-#include \"mpierrs.h\"
+/* mpir_err.h for the error code creation */
+#include \"mpir_err.h\"
#include <stdio.h>
-#include \"mpierror.h\"
/* -- Begin Profiling Symbol Block for routine MPI_Status_c2f */
#if defined(USE_WEAK_SYMBOLS) && !defined(USE_ONLY_MPI_NAMES)
@@ -4854,6 +4844,8 @@ sub ReadAndProcessInterface {
$linecount++;
}
$args =~ s/MPICH_ATTR[A-Z_]*\([^)]*\)//g;
+ $args =~ s/MPICH_API_PUBLIC//g;
+ $args =~ s/ROMIO_API_PUBLIC//g;
$args =~ s/\)\s*;//g;
$args =~ s/[\r\n]*//g;
$args =~ s/const\s//g;
@@ -5222,7 +5214,7 @@ sub WriteAttrDefaults {
#&print_attr;
print $OUTFD "{
*v5 = *v4;
- *v6 = MPIR_TO_FLOG(1);
+ *v6 = MPII_TO_FLOG(1);
*ierr = MPI_SUCCESS;
}\n";
close ($OUTFD);
@@ -5257,7 +5249,7 @@ sub WriteAttrDefaults {
&print_args( $OUTFD, $args, 0, "${prefix}null_copy_fn" );
print $OUTFD "{
*ierr = MPI_SUCCESS;
- *v6 = MPIR_TO_FLOG(0);
+ *v6 = MPII_TO_FLOG(0);
}\n";
close ($OUTFD);
&ReplaceIfDifferent( $filename, $filename . ".new" );
@@ -5420,7 +5412,7 @@ MPIR_Type_copy_attr_f90_proxy(
MPI_Datatype datatype,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -5429,15 +5421,15 @@ MPIR_Type_copy_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)datatype;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F90_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR (fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR (fnew);
return (int)ierr;
}
@@ -5452,7 +5444,7 @@ MPIR_Type_delete_attr_f90_proxy(
MPI_Type_delete_attr_function* user_function,
MPI_Datatype datatype,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -5460,7 +5452,7 @@ MPIR_Type_delete_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)datatype;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
((F90_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -5479,12 +5471,12 @@ typedef void (FORT_CALL F90_CopyFunction) (MPI_Fint *, MPI_Fint *, MPI_Aint *, M
/* Helper proxy function to thunk the attr copy function call into F90 calling convention */
static
int
-MPIR_Comm_copy_attr_f90_proxy(
+MPII_Comm_copy_attr_f90_proxy(
MPI_Comm_copy_attr_function* user_function,
MPI_Comm comm,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -5493,15 +5485,15 @@ MPIR_Comm_copy_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F90_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR (fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR (fnew);
return (int)ierr;
}
@@ -5516,7 +5508,7 @@ MPIR_Comm_delete_attr_f90_proxy(
MPI_Comm_delete_attr_function* user_function,
MPI_Comm comm,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -5524,7 +5516,7 @@ MPIR_Comm_delete_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
((F90_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -5548,7 +5540,7 @@ MPIR_Win_copy_attr_f90_proxy(
MPI_Win win,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -5557,15 +5549,15 @@ MPIR_Win_copy_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)win;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F90_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR (fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR (fnew);
return (int)ierr;
}
@@ -5580,7 +5572,7 @@ MPIR_Win_delete_attr_f90_proxy(
MPI_Win_delete_attr_function* user_function,
MPI_Win win,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -5588,7 +5580,7 @@ MPIR_Win_delete_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)win;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
((F90_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -5792,13 +5784,13 @@ sub printCallForFint {
&print_int_to_fint( $routine_name, $args );
# Hack
if ($routine_name eq "Op_create") {
- print $OUTFD " MPIR_Op_set_fc( l3 );\n";
+ print $OUTFD " MPII_Op_set_fc( l3 );\n";
}
elsif ($routine_name eq "Comm_create_errhandler" ||
$routine_name eq "Win_create_errhandler" ||
$routine_name eq "File_create_errhandler" ||
$routine_name eq "Errhandler_create") {
- print $OUTFD " MPIR_Errhandler_set_fc( l2 );\n";
+ print $OUTFD " MPII_Errhandler_set_fc( l2 );\n";
}
$within_fint = 0;
diff --git a/src/binding/fortran/mpif_h/cart_createf.c b/src/binding/fortran/mpif_h/cart_createf.c
index e8e55f8..0195c77 100644
--- a/src/binding/fortran/mpif_h/cart_createf.c
+++ b/src/binding/fortran/mpif_h/cart_createf.c
@@ -270,12 +270,12 @@ FORT_DLL_SPEC void FORT_CALL mpi_cart_create_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_
int l5;
if (*v2) {int li;
- l4 = (int *)MPIU_Malloc(*v2 * sizeof(int));
+ l4 = (int *)MPL_malloc(*v2 * sizeof(int));
for (li=0; li<*v2; li++) {
- l4[li] = MPIR_FROM_FLOG(v4[li]);
+ l4[li] = MPII_FROM_FLOG(v4[li]);
}
}
- l5 = MPIR_FROM_FLOG(*v5);
+ l5 = MPII_FROM_FLOG(*v5);
*ierr = MPI_Cart_create( (MPI_Comm)(*v1), (int)*v2, v3, l4, l5, (MPI_Comm *)(v6) );
- if (l4) { MPIU_Free( l4 ); }
+ if (l4) { MPL_free( l4 ); }
}
diff --git a/src/binding/fortran/mpif_h/cart_getf.c b/src/binding/fortran/mpif_h/cart_getf.c
index 2a0170d..468c166 100644
--- a/src/binding/fortran/mpif_h/cart_getf.c
+++ b/src/binding/fortran/mpif_h/cart_getf.c
@@ -270,7 +270,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_cart_get_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fin
if (*ierr == MPI_SUCCESS) {int li;
for (li=0; li<*v2; li++) {
- v4[li] = MPIR_TO_FLOG(v4[li]);
+ v4[li] = MPII_TO_FLOG(v4[li]);
}
}
}
diff --git a/src/binding/fortran/mpif_h/cart_mapf.c b/src/binding/fortran/mpif_h/cart_mapf.c
index 6fad99c..2ddef50 100644
--- a/src/binding/fortran/mpif_h/cart_mapf.c
+++ b/src/binding/fortran/mpif_h/cart_mapf.c
@@ -269,11 +269,11 @@ FORT_DLL_SPEC void FORT_CALL mpi_cart_map_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fin
int *l4=0;
if (*v2) {int li;
- l4 = (int *)MPIU_Malloc(*v2 * sizeof(int));
+ l4 = (int *)MPL_malloc(*v2 * sizeof(int));
for (li=0; li<*v2; li++) {
- l4[li] = MPIR_FROM_FLOG(v4[li]);
+ l4[li] = MPII_FROM_FLOG(v4[li]);
}
}
*ierr = MPI_Cart_map( (MPI_Comm)(*v1), (int)*v2, v3, l4, v5 );
- if (l4) { MPIU_Free( l4 ); }
+ if (l4) { MPL_free( l4 ); }
}
diff --git a/src/binding/fortran/mpif_h/cart_subf.c b/src/binding/fortran/mpif_h/cart_subf.c
index 3c5e1f2..a1849f7 100644
--- a/src/binding/fortran/mpif_h/cart_subf.c
+++ b/src/binding/fortran/mpif_h/cart_subf.c
@@ -278,11 +278,11 @@ FORT_DLL_SPEC void FORT_CALL mpi_cart_sub_ ( MPI_Fint *v1, MPI_Fint v2[], MPI_Fi
}
if (_ctsize) {int li;
- l2 = (int *)MPIU_Malloc(_ctsize * sizeof(int));
+ l2 = (int *)MPL_malloc(_ctsize * sizeof(int));
for (li=0; li<_ctsize; li++) {
- l2[li] = MPIR_FROM_FLOG(v2[li]);
+ l2[li] = MPII_FROM_FLOG(v2[li]);
}
}
*ierr = MPI_Cart_sub( (MPI_Comm)(*v1), l2, (MPI_Comm *)(v3) );
- if (l2) { MPIU_Free( l2 ); }
+ if (l2) { MPL_free( l2 ); }
}
diff --git a/src/binding/fortran/mpif_h/close_portf.c b/src/binding/fortran/mpif_h/close_portf.c
index 7ca725d..6ea11a4 100644
--- a/src/binding/fortran/mpif_h/close_portf.c
+++ b/src/binding/fortran/mpif_h/close_portf.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_close_port_ ( char *v1 FORT_MIXED_LEN(d1), MPI_
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
*ierr = MPI_Close_port( p1 );
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/comm_acceptf.c b/src/binding/fortran/mpif_h/comm_acceptf.c
index 29d6821..7e5a917 100644
--- a/src/binding/fortran/mpif_h/comm_acceptf.c
+++ b/src/binding/fortran/mpif_h/comm_acceptf.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_accept_ ( char *v1 FORT_MIXED_LEN(d1), MPI
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
*ierr = MPI_Comm_accept( p1, (MPI_Info)(*v2), (int)*v3, (MPI_Comm)(*v4), (MPI_Comm *)(v5) );
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/comm_connectf.c b/src/binding/fortran/mpif_h/comm_connectf.c
index 1210121..5107c8e 100644
--- a/src/binding/fortran/mpif_h/comm_connectf.c
+++ b/src/binding/fortran/mpif_h/comm_connectf.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_connect_ ( char *v1 FORT_MIXED_LEN(d1), MP
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
*ierr = MPI_Comm_connect( p1, (MPI_Info)(*v2), (int)*v3, (MPI_Comm)(*v4), (MPI_Comm *)(v5) );
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/comm_get_attrf.c b/src/binding/fortran/mpif_h/comm_get_attrf.c
index 53c4c97..f27bdb9 100644
--- a/src/binding/fortran/mpif_h/comm_get_attrf.c
+++ b/src/binding/fortran/mpif_h/comm_get_attrf.c
@@ -269,7 +269,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_get_attr_ ( MPI_Fint *v1, MPI_Fint *v2, vo
void *attrv3;
int l4;
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_CommGetAttr_fort( (MPI_Comm)(*v1), (int)*v2, &attrv3, &l4, MPIR_ATTR_AINT );
+ *ierr = MPII_Comm_get_attr_fort( (MPI_Comm)(*v1), (int)*v2, &attrv3, &l4, MPIR_ATTR_AINT );
if ((int)*ierr || !l4) {
*(MPI_Aint*)v3 = 0;
@@ -277,5 +277,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_get_attr_ ( MPI_Fint *v1, MPI_Fint *v2, vo
else {
*(MPI_Aint*)v3 = (MPI_Aint)attrv3;
}
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/comm_set_attrf.c b/src/binding/fortran/mpif_h/comm_set_attrf.c
index 764c542..7872513 100644
--- a/src/binding/fortran/mpif_h/comm_set_attrf.c
+++ b/src/binding/fortran/mpif_h/comm_set_attrf.c
@@ -267,5 +267,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_comm_set_attr_( MPI_Fint *, MPI_Fint *,
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_comm_set_attr_ ( MPI_Fint *v1, MPI_Fint *v2, void*v3, MPI_Fint *ierr ){
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_CommSetAttr( (MPI_Comm)(*v1), (int)*v2, (void *)(*(MPI_Aint *)v3), MPIR_ATTR_AINT );
+ *ierr = MPII_Comm_set_attr( (MPI_Comm)(*v1), (int)*v2, (void *)(*(MPI_Aint *)v3), MPIR_ATTR_AINT );
}
diff --git a/src/binding/fortran/mpif_h/comm_set_namef.c b/src/binding/fortran/mpif_h/comm_set_namef.c
index af73fdf..e8edcf7 100644
--- a/src/binding/fortran/mpif_h/comm_set_namef.c
+++ b/src/binding/fortran/mpif_h/comm_set_namef.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_set_name_ ( MPI_Fint *v1, char *v2 FORT_MI
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
*ierr = MPI_Comm_set_name( (MPI_Comm)(*v1), p2 );
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/comm_spawnf.c b/src/binding/fortran/mpif_h/comm_spawnf.c
index 52c36de..049e5ae 100644
--- a/src/binding/fortran/mpif_h/comm_spawnf.c
+++ b/src/binding/fortran/mpif_h/comm_spawnf.c
@@ -275,7 +275,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_spawn_ ( char *v1 FORT_MIXED_LEN(d1), char
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
@@ -296,8 +296,8 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_spawn_ ( char *v1 FORT_MIXED_LEN(d1), char
pcpy2 += d2;
}
- p2 = (char **)MPIU_Malloc( asize2 * sizeof(char *) );
- if (asize2-1 > 0) ptmp = (char *)MPIU_Malloc( asize2 * (d2 + 1) );
+ p2 = (char **)MPL_malloc( asize2 * sizeof(char *) );
+ if (asize2-1 > 0) ptmp = (char *)MPL_malloc( asize2 * (d2 + 1) );
for (i=0; i<asize2-1; i++) {
char *p = v2 + i * d2, *pin, *pdest;
int j;
@@ -317,7 +317,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_spawn_ ( char *v1 FORT_MIXED_LEN(d1), char
if ((MPI_Fint*)v8 == MPI_F_ERRCODES_IGNORE) { v8 = (MPI_Fint *)MPI_ERRCODES_IGNORE; }
*ierr = MPI_Comm_spawn( p1, p2, (int)*v3, (MPI_Info)(*v4), (int)*v5, (MPI_Comm)(*v6), (MPI_Comm *)(v7), (int *)v8 );
- MPIU_Free( p1 );
- if (asize2-1 > 0) MPIU_Free( p2[0] );
- MPIU_Free( p2 );
+ MPL_free( p1 );
+ if (asize2-1 > 0) MPL_free( p2[0] );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/commgetnamf.c b/src/binding/fortran/mpif_h/commgetnamf.c
index bd22c34..95a0a66 100644
--- a/src/binding/fortran/mpif_h/commgetnamf.c
+++ b/src/binding/fortran/mpif_h/commgetnamf.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_comm_get_name_( MPI_Fint *, char * FORT
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_comm_get_name_ ( MPI_Fint *v1, char *v2 FORT_MIXED_LEN(d2), MPI_Fint *v3, MPI_Fint *ierr FORT_END_LEN(d2) ){
char *p2;
- p2 = (char *)MPIU_Malloc( d2 + 1 );
+ p2 = (char *)MPL_malloc( d2 + 1 );
*ierr = MPI_Comm_get_name( (MPI_Comm)(*v1), p2, v3 );
if (!*ierr) {char *p = v2, *pc=p2;
while (*pc) {*p++ = *pc++;}
while ((p-v2) < d2) { *p++ = ' '; }
}
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/commnewkeyf.c b/src/binding/fortran/mpif_h/commnewkeyf.c
index b562d50..9657920 100644
--- a/src/binding/fortran/mpif_h/commnewkeyf.c
+++ b/src/binding/fortran/mpif_h/commnewkeyf.c
@@ -273,12 +273,12 @@ typedef void (FORT_CALL F90_CopyFunction) (MPI_Fint *, MPI_Fint *, MPI_Aint *, M
/* Helper proxy function to thunk the attr copy function call into F90 calling convention */
static
int
-MPIR_Comm_copy_attr_f90_proxy(
+MPII_Comm_copy_attr_f90_proxy(
MPI_Comm_copy_attr_function* user_function,
MPI_Comm comm,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -287,15 +287,15 @@ MPIR_Comm_copy_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F90_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR (fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR (fnew);
return (int)ierr;
}
@@ -310,7 +310,7 @@ MPIR_Comm_delete_attr_f90_proxy(
MPI_Comm_delete_attr_function* user_function,
MPI_Comm comm,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -318,7 +318,7 @@ MPIR_Comm_delete_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
((F90_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -329,6 +329,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_create_keyval_ ( MPI_Comm_copy_attr_functi
*ierr = MPI_Comm_create_keyval( v1, v2, v3, v4 );
if (*ierr == MPI_SUCCESS) {
- MPIR_Keyval_set_proxy( (int)*v3, MPIR_Comm_copy_attr_f90_proxy, MPIR_Comm_delete_attr_f90_proxy );
+ MPII_Keyval_set_proxy( (int)*v3, MPII_Comm_copy_attr_f90_proxy, MPIR_Comm_delete_attr_f90_proxy );
}
}
diff --git a/src/binding/fortran/mpif_h/commtesticf.c b/src/binding/fortran/mpif_h/commtesticf.c
index c1e1d90..56371a9 100644
--- a/src/binding/fortran/mpif_h/commtesticf.c
+++ b/src/binding/fortran/mpif_h/commtesticf.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_comm_test_inter_( MPI_Fint *, MPI_Fint
FORT_DLL_SPEC void FORT_CALL mpi_comm_test_inter_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *ierr ){
int l2;
*ierr = MPI_Comm_test_inter( (MPI_Comm)(*v1), &l2 );
- if (*ierr == MPI_SUCCESS) *v2 = MPIR_TO_FLOG(l2);
+ if (*ierr == MPI_SUCCESS) *v2 = MPII_TO_FLOG(l2);
}
diff --git a/src/binding/fortran/mpif_h/dist_graph_create_adjacentf.c b/src/binding/fortran/mpif_h/dist_graph_create_adjacentf.c
index f85fe66..d24fb62 100644
--- a/src/binding/fortran/mpif_h/dist_graph_create_adjacentf.c
+++ b/src/binding/fortran/mpif_h/dist_graph_create_adjacentf.c
@@ -275,6 +275,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_dist_graph_create_adjacent_ ( MPI_Fint *v1, MPI
else if (v4 == MPIR_F_MPI_WEIGHTS_EMPTY) v4 = MPI_WEIGHTS_EMPTY;
if (v7 == MPIR_F_MPI_UNWEIGHTED) v7 = MPI_UNWEIGHTED;
else if (v7 == MPIR_F_MPI_WEIGHTS_EMPTY) v7 = MPI_WEIGHTS_EMPTY;
- l9 = MPIR_FROM_FLOG(*v9);
+ l9 = MPII_FROM_FLOG(*v9);
*ierr = MPI_Dist_graph_create_adjacent( (MPI_Comm)(*v1), (int)*v2, v3, v4, (int)*v5, v6, v7, (MPI_Info)(*v8), l9, (MPI_Comm *)(v10) );
}
diff --git a/src/binding/fortran/mpif_h/dist_graph_createf.c b/src/binding/fortran/mpif_h/dist_graph_createf.c
index d16368d..06cdd49 100644
--- a/src/binding/fortran/mpif_h/dist_graph_createf.c
+++ b/src/binding/fortran/mpif_h/dist_graph_createf.c
@@ -273,6 +273,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_dist_graph_create_ ( MPI_Fint *v1, MPI_Fint *v2
#endif
if (v6 == MPIR_F_MPI_UNWEIGHTED) v6 = MPI_UNWEIGHTED;
else if (v6 == MPIR_F_MPI_WEIGHTS_EMPTY) v6 = MPI_WEIGHTS_EMPTY;
- l8 = MPIR_FROM_FLOG(*v8);
+ l8 = MPII_FROM_FLOG(*v8);
*ierr = MPI_Dist_graph_create( (MPI_Comm)(*v1), (int)*v2, v3, v4, v5, v6, (MPI_Info)(*v7), l8, (MPI_Comm *)(v9) );
}
diff --git a/src/binding/fortran/mpif_h/dist_graph_neighbors_countf.c b/src/binding/fortran/mpif_h/dist_graph_neighbors_countf.c
index 5009d35..175e74d 100644
--- a/src/binding/fortran/mpif_h/dist_graph_neighbors_countf.c
+++ b/src/binding/fortran/mpif_h/dist_graph_neighbors_countf.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_dist_graph_neighbors_count_( MPI_Fint *
FORT_DLL_SPEC void FORT_CALL mpi_dist_graph_neighbors_count_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *v3, MPI_Fint *v4, MPI_Fint *ierr ){
int l4;
*ierr = MPI_Dist_graph_neighbors_count( (MPI_Comm)(*v1), v2, v3, &l4 );
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/dup_comm_fnf.c b/src/binding/fortran/mpif_h/dup_comm_fnf.c
index db020ea..da84d85 100644
--- a/src/binding/fortran/mpif_h/dup_comm_fnf.c
+++ b/src/binding/fortran/mpif_h/dup_comm_fnf.c
@@ -270,6 +270,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_comm_dup_fn_( MPI_Fint*, MPI_Fint*, voi
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_comm_dup_fn_ ( MPI_Fint*v1, MPI_Fint*v2, void*v3, MPI_Aint *v4, MPI_Aint *v5, MPI_Fint*v6, MPI_Fint *ierr ){
*v5 = *v4;
- *v6 = MPIR_TO_FLOG(1);
+ *v6 = MPII_TO_FLOG(1);
*ierr = MPI_SUCCESS;
}
diff --git a/src/binding/fortran/mpif_h/dup_fnf.c b/src/binding/fortran/mpif_h/dup_fnf.c
index 993c6e2..83e7271 100644
--- a/src/binding/fortran/mpif_h/dup_fnf.c
+++ b/src/binding/fortran/mpif_h/dup_fnf.c
@@ -267,6 +267,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_dup_fn_( MPI_Fint*, MPI_Fint*, void*, v
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_dup_fn_ ( MPI_Fint*v1, MPI_Fint*v2, void*v3, void**v4, void**v5, MPI_Fint*v6, MPI_Fint *ierr ){
*v5 = *v4;
- *v6 = MPIR_TO_FLOG(1);
+ *v6 = MPII_TO_FLOG(1);
*ierr = MPI_SUCCESS;
}
diff --git a/src/binding/fortran/mpif_h/dup_type_fnf.c b/src/binding/fortran/mpif_h/dup_type_fnf.c
index f0a55c5..4dd9080 100644
--- a/src/binding/fortran/mpif_h/dup_type_fnf.c
+++ b/src/binding/fortran/mpif_h/dup_type_fnf.c
@@ -270,6 +270,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_type_dup_fn_( MPI_Fint*, MPI_Fint*, voi
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_type_dup_fn_ ( MPI_Fint*v1, MPI_Fint*v2, void*v3, MPI_Aint *v4, MPI_Aint *v5, MPI_Fint*v6, MPI_Fint *ierr ){
*v5 = *v4;
- *v6 = MPIR_TO_FLOG(1);
+ *v6 = MPII_TO_FLOG(1);
*ierr = MPI_SUCCESS;
}
diff --git a/src/binding/fortran/mpif_h/dup_win_fnf.c b/src/binding/fortran/mpif_h/dup_win_fnf.c
index c55f6dd..6001a7a 100644
--- a/src/binding/fortran/mpif_h/dup_win_fnf.c
+++ b/src/binding/fortran/mpif_h/dup_win_fnf.c
@@ -270,6 +270,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_win_dup_fn_( MPI_Fint*, MPI_Fint*, void
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_win_dup_fn_ ( MPI_Fint*v1, MPI_Fint*v2, void*v3, MPI_Aint *v4, MPI_Aint *v5, MPI_Fint*v6, MPI_Fint *ierr ){
*v5 = *v4;
- *v6 = MPIR_TO_FLOG(1);
+ *v6 = MPII_TO_FLOG(1);
*ierr = MPI_SUCCESS;
}
diff --git a/src/binding/fortran/mpif_h/error_stringf.c b/src/binding/fortran/mpif_h/error_stringf.c
index effa1a9..0e7d0ce 100644
--- a/src/binding/fortran/mpif_h/error_stringf.c
+++ b/src/binding/fortran/mpif_h/error_stringf.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_error_string_( MPI_Fint *, char * FORT_
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_error_string_ ( MPI_Fint *v1, char *v2 FORT_MIXED_LEN(d2), MPI_Fint *v3, MPI_Fint *ierr FORT_END_LEN(d2) ){
char *p2;
- p2 = (char *)MPIU_Malloc( d2 + 1 );
+ p2 = (char *)MPL_malloc( d2 + 1 );
*ierr = MPI_Error_string( (int)*v1, p2, v3 );
if (!*ierr) {char *p = v2, *pc=p2;
while (*pc) {*p++ = *pc++;}
while ((p-v2) < d2) { *p++ = ' '; }
}
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/file_deletef.c b/src/binding/fortran/mpif_h/file_deletef.c
index 24d667b..c0361d8 100644
--- a/src/binding/fortran/mpif_h/file_deletef.c
+++ b/src/binding/fortran/mpif_h/file_deletef.c
@@ -273,12 +273,12 @@ FORT_DLL_SPEC void FORT_CALL mpi_file_delete_ ( char *v1 FORT_MIXED_LEN(d1), MPI
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
*ierr = MPI_File_delete( p1, (MPI_Info)(*v2) );
- MPIU_Free( p1 );
+ MPL_free( p1 );
#else
*ierr = MPI_ERR_INTERN;
#endif
diff --git a/src/binding/fortran/mpif_h/file_get_atomicityf.c b/src/binding/fortran/mpif_h/file_get_atomicityf.c
index 201f74d..ae9c89d 100644
--- a/src/binding/fortran/mpif_h/file_get_atomicityf.c
+++ b/src/binding/fortran/mpif_h/file_get_atomicityf.c
@@ -269,7 +269,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_file_get_atomicity_ ( MPI_Fint *v1, MPI_Fint *v
#ifdef MPI_MODE_RDONLY
int l2;
*ierr = MPI_File_get_atomicity( MPI_File_f2c(*v1), &l2 );
- if (*ierr == MPI_SUCCESS) *v2 = MPIR_TO_FLOG(l2);
+ if (*ierr == MPI_SUCCESS) *v2 = MPII_TO_FLOG(l2);
#else
*ierr = MPI_ERR_INTERN;
#endif
diff --git a/src/binding/fortran/mpif_h/file_get_viewf.c b/src/binding/fortran/mpif_h/file_get_viewf.c
index b161fa7..fc0ab3f 100644
--- a/src/binding/fortran/mpif_h/file_get_viewf.c
+++ b/src/binding/fortran/mpif_h/file_get_viewf.c
@@ -268,14 +268,14 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_file_get_view_( MPI_Fint *, MPI_Offset*
FORT_DLL_SPEC void FORT_CALL mpi_file_get_view_ ( MPI_Fint *v1, MPI_Offset*v2, MPI_Fint *v3, MPI_Fint *v4, char *v5 FORT_MIXED_LEN(d5), MPI_Fint *ierr FORT_END_LEN(d5) ){
#ifdef MPI_MODE_RDONLY
char *p5;
- p5 = (char *)MPIU_Malloc( d5 + 1 );
+ p5 = (char *)MPL_malloc( d5 + 1 );
*ierr = MPI_File_get_view( MPI_File_f2c(*v1), v2, (MPI_Datatype *)(v3), (MPI_Datatype *)(v4), p5 );
if (!*ierr) {char *p = v5, *pc=p5;
while (*pc) {*p++ = *pc++;}
while ((p-v5) < d5) { *p++ = ' '; }
}
- MPIU_Free( p5 );
+ MPL_free( p5 );
#else
*ierr = MPI_ERR_INTERN;
#endif
diff --git a/src/binding/fortran/mpif_h/file_openf.c b/src/binding/fortran/mpif_h/file_openf.c
index d5b1398..b423441 100644
--- a/src/binding/fortran/mpif_h/file_openf.c
+++ b/src/binding/fortran/mpif_h/file_openf.c
@@ -274,13 +274,13 @@ FORT_DLL_SPEC void FORT_CALL mpi_file_open_ ( MPI_Fint *v1, char *v2 FORT_MIXED_
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
*ierr = MPI_File_open( (MPI_Comm)(*v1), p2, (int)*v3, (MPI_Info)(*v4), &l5 );
*v5 = MPI_File_c2f(l5);
- MPIU_Free( p2 );
+ MPL_free( p2 );
#else
*ierr = MPI_ERR_INTERN;
#endif
diff --git a/src/binding/fortran/mpif_h/file_set_atomicityf.c b/src/binding/fortran/mpif_h/file_set_atomicityf.c
index c6574c3..79a3cf7 100644
--- a/src/binding/fortran/mpif_h/file_set_atomicityf.c
+++ b/src/binding/fortran/mpif_h/file_set_atomicityf.c
@@ -268,7 +268,7 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_file_set_atomicity_( MPI_Fint *, MPI_Fi
FORT_DLL_SPEC void FORT_CALL mpi_file_set_atomicity_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *ierr ){
#ifdef MPI_MODE_RDONLY
int l2;
- l2 = MPIR_FROM_FLOG(*v2);
+ l2 = MPII_FROM_FLOG(*v2);
*ierr = MPI_File_set_atomicity( MPI_File_f2c(*v1), l2 );
#else
*ierr = MPI_ERR_INTERN;
diff --git a/src/binding/fortran/mpif_h/file_set_viewf.c b/src/binding/fortran/mpif_h/file_set_viewf.c
index ad2b6e3..91309e8 100644
--- a/src/binding/fortran/mpif_h/file_set_viewf.c
+++ b/src/binding/fortran/mpif_h/file_set_viewf.c
@@ -273,12 +273,12 @@ FORT_DLL_SPEC void FORT_CALL mpi_file_set_view_ ( MPI_Fint *v1, MPI_Offset *v2,
int li;
while (*p == ' ' && p > v5) p--;
p++;
- p5 = (char *)MPIU_Malloc( p-v5 + 1 );
+ p5 = (char *)MPL_malloc( p-v5 + 1 );
for (li=0; li<(p-v5); li++) { p5[li] = v5[li]; }
p5[li] = 0;
}
*ierr = MPI_File_set_view( MPI_File_f2c(*v1), (MPI_Offset)*v2, (MPI_Datatype)(*v3), (MPI_Datatype)(*v4), p5, (MPI_Info)(*v6) );
- MPIU_Free( p5 );
+ MPL_free( p5 );
#else
*ierr = MPI_ERR_INTERN;
#endif
diff --git a/src/binding/fortran/mpif_h/finalizedf.c b/src/binding/fortran/mpif_h/finalizedf.c
index fea49e4..8e714fb 100644
--- a/src/binding/fortran/mpif_h/finalizedf.c
+++ b/src/binding/fortran/mpif_h/finalizedf.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_finalized_( MPI_Fint *, MPI_Fint * ) __
FORT_DLL_SPEC void FORT_CALL mpi_finalized_ ( MPI_Fint *v1, MPI_Fint *ierr ){
int l1;
*ierr = MPI_Finalized( &l1 );
- if (*ierr == MPI_SUCCESS) *v1 = MPIR_TO_FLOG(l1);
+ if (*ierr == MPI_SUCCESS) *v1 = MPII_TO_FLOG(l1);
}
diff --git a/src/binding/fortran/mpif_h/get_library_versionf.c b/src/binding/fortran/mpif_h/get_library_versionf.c
index 0a9e561..a5cb581 100644
--- a/src/binding/fortran/mpif_h/get_library_versionf.c
+++ b/src/binding/fortran/mpif_h/get_library_versionf.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_get_library_version_( char * FORT_MIXED
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_get_library_version_ ( char *v1 FORT_MIXED_LEN(d1), MPI_Fint *v2, MPI_Fint *ierr FORT_END_LEN(d1) ){
char *p1;
- p1 = (char *)MPIU_Malloc( d1 + 1 );
+ p1 = (char *)MPL_malloc( d1 + 1 );
*ierr = MPI_Get_library_version( p1, v2 );
if (!*ierr) {char *p = v1, *pc=p1;
while (*pc) {*p++ = *pc++;}
while ((p-v1) < d1) { *p++ = ' '; }
}
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/getaddressf.c b/src/binding/fortran/mpif_h/getaddressf.c
index c0635ae..a3f767e 100644
--- a/src/binding/fortran/mpif_h/getaddressf.c
+++ b/src/binding/fortran/mpif_h/getaddressf.c
@@ -265,9 +265,8 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_get_address_( void*, MPI_Aint *, MPI_Fi
/* Prototypes for the Fortran interfaces */
#include "fproto.h"
-#include "mpierrs.h"
+#include "mpir_err.h"
#include <stdio.h>
-#include "mpierror.h"
FORT_DLL_SPEC void FORT_CALL mpi_get_address_ ( void*v1, MPI_Aint *v2, MPI_Fint *ierr ){
MPI_Aint a;
*ierr = MPI_Get_address( v1, &a );
diff --git a/src/binding/fortran/mpif_h/getpnamef.c b/src/binding/fortran/mpif_h/getpnamef.c
index 341a715..17d3fed 100644
--- a/src/binding/fortran/mpif_h/getpnamef.c
+++ b/src/binding/fortran/mpif_h/getpnamef.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_get_processor_name_( char * FORT_MIXED_
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_get_processor_name_ ( char *v1 FORT_MIXED_LEN(d1), MPI_Fint *v2, MPI_Fint *ierr FORT_END_LEN(d1) ){
char *p1;
- p1 = (char *)MPIU_Malloc( d1 + 1 );
+ p1 = (char *)MPL_malloc( d1 + 1 );
*ierr = MPI_Get_processor_name( p1, v2 );
if (!*ierr) {char *p = v1, *pc=p1;
while (*pc) {*p++ = *pc++;}
while ((p-v1) < d1) { *p++ = ' '; }
}
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/graph_createf.c b/src/binding/fortran/mpif_h/graph_createf.c
index 623a452..dbd3e20 100644
--- a/src/binding/fortran/mpif_h/graph_createf.c
+++ b/src/binding/fortran/mpif_h/graph_createf.c
@@ -267,6 +267,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_graph_create_( MPI_Fint *, MPI_Fint *,
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_graph_create_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint v3[], MPI_Fint v4[], MPI_Fint *v5, MPI_Fint *v6, MPI_Fint *ierr ){
int l5;
- l5 = MPIR_FROM_FLOG(*v5);
+ l5 = MPII_FROM_FLOG(*v5);
*ierr = MPI_Graph_create( (MPI_Comm)(*v1), (int)*v2, v3, v4, l5, (MPI_Comm *)(v6) );
}
diff --git a/src/binding/fortran/mpif_h/greqstartf.c b/src/binding/fortran/mpif_h/greqstartf.c
index 5fb1267..ab73d32 100644
--- a/src/binding/fortran/mpif_h/greqstartf.c
+++ b/src/binding/fortran/mpif_h/greqstartf.c
@@ -270,6 +270,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_grequest_start_ ( MPI_Grequest_query_function*v
*ierr = MPI_Grequest_start( v1, v2, v3, v4, (MPI_Request *)(v5) );
if (*ierr == MPI_SUCCESS) {
- MPIR_Grequest_set_lang_f77( *v5 );
+ MPII_Grequest_set_lang_f77( *v5 );
}
}
diff --git a/src/binding/fortran/mpif_h/icmergef.c b/src/binding/fortran/mpif_h/icmergef.c
index 6f8b6ad..5243108 100644
--- a/src/binding/fortran/mpif_h/icmergef.c
+++ b/src/binding/fortran/mpif_h/icmergef.c
@@ -267,6 +267,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_intercomm_merge_( MPI_Fint *, MPI_Fint
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_intercomm_merge_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *v3, MPI_Fint *ierr ){
int l2;
- l2 = MPIR_FROM_FLOG(*v2);
+ l2 = MPII_FROM_FLOG(*v2);
*ierr = MPI_Intercomm_merge( (MPI_Comm)(*v1), l2, (MPI_Comm *)(v3) );
}
diff --git a/src/binding/fortran/mpif_h/improbef.c b/src/binding/fortran/mpif_h/improbef.c
index 437436c..44aad7a 100644
--- a/src/binding/fortran/mpif_h/improbef.c
+++ b/src/binding/fortran/mpif_h/improbef.c
@@ -274,5 +274,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_improbe_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint
if (v6 == MPI_F_STATUS_IGNORE) { v6 = (MPI_Fint*)MPI_STATUS_IGNORE; }
*ierr = MPI_Improbe( (int)*v1, (int)*v2, (MPI_Comm)(*v3), &l4, (MPI_Message *)(v5), (MPI_Status *)v6 );
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/info_deletef.c b/src/binding/fortran/mpif_h/info_deletef.c
index 3538829..8579669 100644
--- a/src/binding/fortran/mpif_h/info_deletef.c
+++ b/src/binding/fortran/mpif_h/info_deletef.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_info_delete_ ( MPI_Fint *v1, char *v2 FORT_MIXE
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
*ierr = MPI_Info_delete( (MPI_Info)(*v1), p2 );
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/info_getf.c b/src/binding/fortran/mpif_h/info_getf.c
index 0750a30..738da14 100644
--- a/src/binding/fortran/mpif_h/info_getf.c
+++ b/src/binding/fortran/mpif_h/info_getf.c
@@ -274,18 +274,18 @@ FORT_DLL_SPEC void FORT_CALL mpi_info_get_ ( MPI_Fint *v1, char *v2 FORT_MIXED_L
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
- p4 = (char *)MPIU_Malloc( d4 + 1 );
+ p4 = (char *)MPL_malloc( d4 + 1 );
*ierr = MPI_Info_get( (MPI_Info)(*v1), p2, (int)*v3, p4, &l5 );
if (l5 && !*ierr) {char *p = v4, *pc=p4;
while (*pc) {*p++ = *pc++;}
while ((p-v4) < d4) { *p++ = ' '; }
}
- if (*ierr == MPI_SUCCESS) *v5 = MPIR_TO_FLOG(l5);
- MPIU_Free( p2 );
- MPIU_Free( p4 );
+ if (*ierr == MPI_SUCCESS) *v5 = MPII_TO_FLOG(l5);
+ MPL_free( p2 );
+ MPL_free( p4 );
}
diff --git a/src/binding/fortran/mpif_h/info_setf.c b/src/binding/fortran/mpif_h/info_setf.c
index a8a36da..1229839 100644
--- a/src/binding/fortran/mpif_h/info_setf.c
+++ b/src/binding/fortran/mpif_h/info_setf.c
@@ -275,7 +275,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_info_set_ ( MPI_Fint *v1, char *v2 FORT_MIXED_L
while (*p == ' ' && p > v2) p--;
p++;
while (*pin == ' ' && pin < p) pin++;
- p2 = (char *)MPIU_Malloc( p-pin + 1 );
+ p2 = (char *)MPL_malloc( p-pin + 1 );
for (li=0; li<(p-pin); li++) { p2[li] = pin[li]; }
p2[li] = 0;
}
@@ -286,11 +286,11 @@ FORT_DLL_SPEC void FORT_CALL mpi_info_set_ ( MPI_Fint *v1, char *v2 FORT_MIXED_L
while (*p == ' ' && p > v3) p--;
p++;
while (*pin == ' ' && pin < p) pin++;
- p3 = (char *)MPIU_Malloc( p-pin + 1 );
+ p3 = (char *)MPL_malloc( p-pin + 1 );
for (li=0; li<(p-pin); li++) { p3[li] = pin[li]; }
p3[li] = 0;
}
*ierr = MPI_Info_set( (MPI_Info)(*v1), p2, p3 );
- MPIU_Free( p2 );
- MPIU_Free( p3 );
+ MPL_free( p2 );
+ MPL_free( p3 );
}
diff --git a/src/binding/fortran/mpif_h/infognthkf.c b/src/binding/fortran/mpif_h/infognthkf.c
index a11466c..0b49364 100644
--- a/src/binding/fortran/mpif_h/infognthkf.c
+++ b/src/binding/fortran/mpif_h/infognthkf.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_info_get_nthkey_( MPI_Fint *, MPI_Fint
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_info_get_nthkey_ ( MPI_Fint *v1, MPI_Fint *v2, char *v3 FORT_MIXED_LEN(d3), MPI_Fint *ierr FORT_END_LEN(d3) ){
char *p3;
- p3 = (char *)MPIU_Malloc( d3 + 1 );
+ p3 = (char *)MPL_malloc( d3 + 1 );
*ierr = MPI_Info_get_nthkey( (MPI_Info)(*v1), (int)*v2, p3 );
if (!*ierr) {char *p = v3, *pc=p3;
while (*pc) {*p++ = *pc++;}
while ((p-v3) < d3) { *p++ = ' '; }
}
- MPIU_Free( p3 );
+ MPL_free( p3 );
}
diff --git a/src/binding/fortran/mpif_h/infovallenf.c b/src/binding/fortran/mpif_h/infovallenf.c
index ad0af48..e3d67ae 100644
--- a/src/binding/fortran/mpif_h/infovallenf.c
+++ b/src/binding/fortran/mpif_h/infovallenf.c
@@ -273,11 +273,11 @@ FORT_DLL_SPEC void FORT_CALL mpi_info_get_valuelen_ ( MPI_Fint *v1, char *v2 FOR
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
*ierr = MPI_Info_get_valuelen( (MPI_Info)(*v1), p2, v3, &l4 );
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
- MPIU_Free( p2 );
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/initializedf.c b/src/binding/fortran/mpif_h/initializedf.c
index 1490009..388a742 100644
--- a/src/binding/fortran/mpif_h/initializedf.c
+++ b/src/binding/fortran/mpif_h/initializedf.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_initialized_( MPI_Fint *, MPI_Fint * )
FORT_DLL_SPEC void FORT_CALL mpi_initialized_ ( MPI_Fint *v1, MPI_Fint *ierr ){
int l1;
*ierr = MPI_Initialized( &l1 );
- if (*ierr == MPI_SUCCESS) *v1 = MPIR_TO_FLOG(l1);
+ if (*ierr == MPI_SUCCESS) *v1 = MPII_TO_FLOG(l1);
}
diff --git a/src/binding/fortran/mpif_h/iprobef.c b/src/binding/fortran/mpif_h/iprobef.c
index 54d88c7..2abb4de 100644
--- a/src/binding/fortran/mpif_h/iprobef.c
+++ b/src/binding/fortran/mpif_h/iprobef.c
@@ -274,5 +274,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_iprobe_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint
if (v5 == MPI_F_STATUS_IGNORE) { v5 = (MPI_Fint*)MPI_STATUS_IGNORE; }
*ierr = MPI_Iprobe( (int)*v1, (int)*v2, (MPI_Comm)(*v3), &l4, (MPI_Status *)v5 );
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/isthrmainf.c b/src/binding/fortran/mpif_h/isthrmainf.c
index 8a7f2b8..d4bb010 100644
--- a/src/binding/fortran/mpif_h/isthrmainf.c
+++ b/src/binding/fortran/mpif_h/isthrmainf.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_is_thread_main_( MPI_Fint *, MPI_Fint *
FORT_DLL_SPEC void FORT_CALL mpi_is_thread_main_ ( MPI_Fint *v1, MPI_Fint *ierr ){
int l1;
*ierr = MPI_Is_thread_main( &l1 );
- if (*ierr == MPI_SUCCESS) *v1 = MPIR_TO_FLOG(l1);
+ if (*ierr == MPI_SUCCESS) *v1 = MPII_TO_FLOG(l1);
}
diff --git a/src/binding/fortran/mpif_h/keyval_createf.c b/src/binding/fortran/mpif_h/keyval_createf.c
index 1f57bc5..a29064b 100644
--- a/src/binding/fortran/mpif_h/keyval_createf.c
+++ b/src/binding/fortran/mpif_h/keyval_createf.c
@@ -277,12 +277,12 @@ typedef void (FORT_CALL F77_CopyFunction) (MPI_Fint *, MPI_Fint *, MPI_Aint *, M
/* Helper proxy function to thunk the attr copy function call into F77 calling convention */
static
int
-MPIR_Comm_copy_attr_f77_proxy(
+MPII_Comm_copy_attr_f77_proxy(
MPI_Comm_copy_attr_function* user_function,
MPI_Comm comm,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -291,15 +291,15 @@ MPIR_Comm_copy_attr_f77_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint *fextra = (MPI_Aint *)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F77_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR ((MPI_Aint) fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR ((MPI_Aint) fnew);
return (int)ierr;
}
@@ -314,7 +314,7 @@ MPIR_Comm_delete_attr_f77_proxy(
MPI_Comm_delete_attr_function* user_function,
MPI_Comm comm,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -322,7 +322,7 @@ MPIR_Comm_delete_attr_f77_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)comm;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint *fextra = (MPI_Aint *)extra_state;
((F77_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -335,6 +335,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_keyval_create_ ( MPI_Copy_function v1, MPI_Dele
*ierr = MPI_Comm_create_keyval( v1, v2, &l3, v4 );
if (!*ierr) {
*v3 = l3;
- MPIR_Keyval_set_proxy((int)*v3, MPIR_Comm_copy_attr_f77_proxy, MPIR_Comm_delete_attr_f77_proxy);
+ MPII_Keyval_set_proxy((int)*v3, MPII_Comm_copy_attr_f77_proxy, MPIR_Comm_delete_attr_f77_proxy);
}
}
diff --git a/src/binding/fortran/mpif_h/lookup_namef.c b/src/binding/fortran/mpif_h/lookup_namef.c
index 6659854..7e75972 100644
--- a/src/binding/fortran/mpif_h/lookup_namef.c
+++ b/src/binding/fortran/mpif_h/lookup_namef.c
@@ -273,17 +273,17 @@ FORT_DLL_SPEC void FORT_CALL mpi_lookup_name_ ( char *v1 FORT_MIXED_LEN(d1), MPI
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
- p3 = (char *)MPIU_Malloc( d3 + 1 );
+ p3 = (char *)MPL_malloc( d3 + 1 );
*ierr = MPI_Lookup_name( p1, (MPI_Info)(*v2), p3 );
if (!*ierr) {char *p = v3, *pc=p3;
while (*pc) {*p++ = *pc++;}
while ((p-v3) < d3) { *p++ = ' '; }
}
- MPIU_Free( p1 );
- MPIU_Free( p3 );
+ MPL_free( p1 );
+ MPL_free( p3 );
}
diff --git a/src/binding/fortran/mpif_h/mpi_fortimpl.h b/src/binding/fortran/mpif_h/mpi_fortimpl.h
index 313a166..341d6e9 100644
--- a/src/binding/fortran/mpif_h/mpi_fortimpl.h
+++ b/src/binding/fortran/mpif_h/mpi_fortimpl.h
@@ -104,7 +104,7 @@
# define FORT_DLL_SPEC __declspec(dllimport)
# endif
#else
-# define FORT_DLL_SPEC
+# define FORT_DLL_SPEC MPICH_API_PUBLIC
#endif
@@ -122,20 +122,7 @@
/* mpi.h includes the definitions of MPI_Fint */
#include "mpi.h"
-#include "mpiutil.h"
-
-/* Include prototypes of helper functions.
- These include MPIR_Keyval_set_fortran, fortran90, and
- Grequest_set_lang_f77 */
-#include "mpi_f77interface.h"
-/* Include the attribute access routines that permit access to the
- attribute or its pointer, needed for cross-language access to attributes */
-#include "mpi_attr.h"
-
-/* mpi_lang.h - Prototypes for language specific routines. Currently used to
- * set keyval attribute callbacks
- */
-#include "mpi_lang.h"
+#include "mpiimpl.h"
/* If there is no MPI I/O support, and we are still using MPIO_Request,
make sure that one is defined */
@@ -156,8 +143,8 @@ typedef MPI_Aint MPI_FAint;
/* Fortran logicals */
/* The definitions for the Fortran logical values are also needed
by the reduction operations in mpi/coll/opland, oplor, and oplxor,
- so they are defined in src/include/mpi_fortlogical.h */
-#include "mpi_fortlogical.h"
+ so they are defined in src/include/mpii_fortlogical.h */
+#include "mpii_fortlogical.h"
/* MPIR_F_MPI_BOTTOM is the address of the Fortran MPI_BOTTOM value */
@@ -215,17 +202,6 @@ typedef char *MPID_FCHAR_T;
#include <stdlib.h>
#endif
-/* Temporary patch for the space routines. Eventually, this should use
- (FIXME) *just* the memory definitions currently in mpiimpl.h */
-/* style: allow:malloc:1 sig:0 */
-/* style: allow:free:1 sig:0 */
-/* style: allow:calloc:1 sig:0 */
-#ifndef MPIU_Malloc
-#define MPIU_Malloc(a) malloc((unsigned)(a))
-#define MPIU_Calloc(a,b) calloc((unsigned)(a),(unsigned)(b))
-#define MPIU_Free(a) free((void *)(a))
-#endif
-
/* To avoid constant allocation/deallocation of temporary arrays, define
a small default, predefined array size. */
#ifndef MPIR_USE_LOCAL_ARRAY
diff --git a/src/binding/fortran/mpif_h/mpichf.def b/src/binding/fortran/mpif_h/mpichf.def
index 58075ee..33cc256 100644
--- a/src/binding/fortran/mpif_h/mpichf.def
+++ b/src/binding/fortran/mpif_h/mpichf.def
@@ -751,8 +751,8 @@ EXPORTS
MPIFCMB6
MPIFCMB7
MPIFCMB8
-; MPIR_F_TRUE
-; MPIR_F_FALSE
+; MPII_F_TRUE
+; MPII_F_FALSE
MPIR_F_NeedInit
MPIR_F_MPI_BOTTOM
MPIR_F_MPI_IN_PLACE
diff --git a/src/binding/fortran/mpif_h/mpichfg.def b/src/binding/fortran/mpif_h/mpichfg.def
index 61a2026..d420e51 100644
--- a/src/binding/fortran/mpif_h/mpichfg.def
+++ b/src/binding/fortran/mpif_h/mpichfg.def
@@ -1943,8 +1943,8 @@ EXPORTS
mpifcmb6_
mpifcmb7_
mpifcmb8_
-; MPIR_F_TRUE
-; MPIR_F_FALSE
+; MPII_F_TRUE
+; MPII_F_FALSE
MPIR_F_NeedInit
MPIR_F_MPI_BOTTOM
MPIR_F_MPI_IN_PLACE
diff --git a/src/binding/fortran/mpif_h/mpichfs.def b/src/binding/fortran/mpif_h/mpichfs.def
index 5ce549c..720eda4 100644
--- a/src/binding/fortran/mpif_h/mpichfs.def
+++ b/src/binding/fortran/mpif_h/mpichfs.def
@@ -723,8 +723,8 @@ EXPORTS
MPIFCMB6
MPIFCMB7
MPIFCMB8
-; MPIR_F_TRUE
-; MPIR_F_FALSE
+; MPII_F_TRUE
+; MPII_F_FALSE
MPIR_F_NeedInit
MPIR_F_MPI_BOTTOM
MPIR_F_MPI_IN_PLACE
diff --git a/src/binding/fortran/mpif_h/mpif.h.in b/src/binding/fortran/mpif_h/mpif.h.in
index 61a51a3..d6b1336 100644
--- a/src/binding/fortran/mpif_h/mpif.h.in
+++ b/src/binding/fortran/mpif_h/mpif.h.in
@@ -17,122 +17,122 @@ C
CHARACTER*1 MPI_ARGV_NULL(1)
INTEGER MPI_SUCCESS
PARAMETER (MPI_SUCCESS=0)
- INTEGER MPI_ERR_SIZE
- PARAMETER (MPI_ERR_SIZE=51)
- INTEGER MPI_ERR_INFO_KEY
- PARAMETER (MPI_ERR_INFO_KEY=29)
+ INTEGER MPI_ERR_RMA_RANGE
+ PARAMETER (MPI_ERR_RMA_RANGE=55)
+ INTEGER MPI_ERR_FILE_EXISTS
+ PARAMETER (MPI_ERR_FILE_EXISTS=25)
+ INTEGER MPI_ERR_DUP_DATAREP
+ PARAMETER (MPI_ERR_DUP_DATAREP=24)
+ INTEGER MPI_ERR_NAME
+ PARAMETER (MPI_ERR_NAME=33)
+ INTEGER MPI_ERR_KEYVAL
+ PARAMETER (MPI_ERR_KEYVAL=48)
+ INTEGER MPI_ERR_ARG
+ PARAMETER (MPI_ERR_ARG=12)
+ INTEGER MPI_ERR_RANK
+ PARAMETER (MPI_ERR_RANK=6)
+ INTEGER MPI_ERR_LASTCODE
+ PARAMETER (MPI_ERR_LASTCODE=1073741823)
INTEGER MPI_ERR_FILE
PARAMETER (MPI_ERR_FILE=27)
- INTEGER MPI_ERR_AMODE
- PARAMETER (MPI_ERR_AMODE=21)
- INTEGER MPI_ERR_TRUNCATE
- PARAMETER (MPI_ERR_TRUNCATE=14)
+ INTEGER MPI_ERR_QUOTA
+ PARAMETER (MPI_ERR_QUOTA=39)
+ INTEGER MPI_ERR_DIMS
+ PARAMETER (MPI_ERR_DIMS=11)
+ INTEGER MPI_ERR_NO_SUCH_FILE
+ PARAMETER (MPI_ERR_NO_SUCH_FILE=37)
INTEGER MPI_ERR_BASE
PARAMETER (MPI_ERR_BASE=46)
- INTEGER MPI_ERR_OP
- PARAMETER (MPI_ERR_OP=9)
+ INTEGER MPI_ERR_NO_SPACE
+ PARAMETER (MPI_ERR_NO_SPACE=36)
+ INTEGER MPI_ERR_IN_STATUS
+ PARAMETER (MPI_ERR_IN_STATUS=17)
+ INTEGER MPI_ERR_INTERN
+ PARAMETER (MPI_ERR_INTERN=16)
+ INTEGER MPI_ERR_DISP
+ PARAMETER (MPI_ERR_DISP=52)
+ INTEGER MPI_ERR_SIZE
+ PARAMETER (MPI_ERR_SIZE=51)
+ INTEGER MPI_ERR_RMA_FLAVOR
+ PARAMETER (MPI_ERR_RMA_FLAVOR=58)
+ INTEGER MPI_ERR_INFO_KEY
+ PARAMETER (MPI_ERR_INFO_KEY=29)
INTEGER MPI_ERR_ASSERT
PARAMETER (MPI_ERR_ASSERT=53)
- INTEGER MPI_ERR_NAME
- PARAMETER (MPI_ERR_NAME=33)
- INTEGER MPI_ERR_NO_MEM
- PARAMETER (MPI_ERR_NO_MEM=34)
- INTEGER MPI_ERR_INFO
- PARAMETER (MPI_ERR_INFO=28)
- INTEGER MPI_ERR_COUNT
- PARAMETER (MPI_ERR_COUNT=2)
- INTEGER MPI_ERR_SPAWN
- PARAMETER (MPI_ERR_SPAWN=42)
- INTEGER MPI_ERR_CONVERSION
- PARAMETER (MPI_ERR_CONVERSION=23)
+ INTEGER MPI_ERR_BAD_FILE
+ PARAMETER (MPI_ERR_BAD_FILE=22)
INTEGER MPI_ERR_GROUP
PARAMETER (MPI_ERR_GROUP=8)
- INTEGER MPI_ERR_RMA_SYNC
- PARAMETER (MPI_ERR_RMA_SYNC=50)
INTEGER MPI_ERR_NOT_SAME
PARAMETER (MPI_ERR_NOT_SAME=35)
- INTEGER MPI_ERR_KEYVAL
- PARAMETER (MPI_ERR_KEYVAL=48)
- INTEGER MPI_ERR_ACCESS
- PARAMETER (MPI_ERR_ACCESS=20)
- INTEGER MPI_ERR_DIMS
- PARAMETER (MPI_ERR_DIMS=11)
+ INTEGER MPI_ERR_INFO
+ PARAMETER (MPI_ERR_INFO=28)
+ INTEGER MPI_ERR_RMA_CONFLICT
+ PARAMETER (MPI_ERR_RMA_CONFLICT=49)
+ INTEGER MPI_ERR_WIN
+ PARAMETER (MPI_ERR_WIN=45)
INTEGER MPI_ERR_FILE_IN_USE
PARAMETER (MPI_ERR_FILE_IN_USE=26)
+ INTEGER MPI_ERR_NO_MEM
+ PARAMETER (MPI_ERR_NO_MEM=34)
INTEGER MPI_ERR_READ_ONLY
PARAMETER (MPI_ERR_READ_ONLY=40)
- INTEGER MPI_ERR_RANK
- PARAMETER (MPI_ERR_RANK=6)
- INTEGER MPI_ERR_PENDING
- PARAMETER (MPI_ERR_PENDING=18)
- INTEGER MPI_ERR_NO_SPACE
- PARAMETER (MPI_ERR_NO_SPACE=36)
- INTEGER MPI_ERR_QUOTA
- PARAMETER (MPI_ERR_QUOTA=39)
- INTEGER MPI_ERR_TAG
- PARAMETER (MPI_ERR_TAG=4)
- INTEGER MPI_ERR_LOCKTYPE
- PARAMETER (MPI_ERR_LOCKTYPE=47)
- INTEGER MPI_ERR_OTHER
- PARAMETER (MPI_ERR_OTHER=15)
- INTEGER MPI_ERR_SERVICE
- PARAMETER (MPI_ERR_SERVICE=41)
- INTEGER MPI_ERR_DUP_DATAREP
- PARAMETER (MPI_ERR_DUP_DATAREP=24)
INTEGER MPI_ERR_UNSUPPORTED_DATAREP
PARAMETER (MPI_ERR_UNSUPPORTED_DATAREP=43)
+ INTEGER MPI_ERR_TOPOLOGY
+ PARAMETER (MPI_ERR_TOPOLOGY=10)
+ INTEGER MPI_ERR_UNKNOWN
+ PARAMETER (MPI_ERR_UNKNOWN=13)
INTEGER MPI_ERR_BUFFER
PARAMETER (MPI_ERR_BUFFER=1)
- INTEGER MPI_ERR_BAD_FILE
- PARAMETER (MPI_ERR_BAD_FILE=22)
- INTEGER MPI_ERR_RMA_ATTACH
- PARAMETER (MPI_ERR_RMA_ATTACH=56)
- INTEGER MPI_ERR_UNSUPPORTED_OPERATION
- PARAMETER (MPI_ERR_UNSUPPORTED_OPERATION=44)
- INTEGER MPI_ERR_ROOT
- PARAMETER (MPI_ERR_ROOT=7)
- INTEGER MPI_ERR_RMA_SHARED
- PARAMETER (MPI_ERR_RMA_SHARED=57)
- INTEGER MPI_ERR_INFO_NOKEY
- PARAMETER (MPI_ERR_INFO_NOKEY=31)
- INTEGER MPI_ERR_RMA_FLAVOR
- PARAMETER (MPI_ERR_RMA_FLAVOR=58)
- INTEGER MPI_ERR_IN_STATUS
- PARAMETER (MPI_ERR_IN_STATUS=17)
+ INTEGER MPI_ERR_PENDING
+ PARAMETER (MPI_ERR_PENDING=18)
+ INTEGER MPI_ERR_COUNT
+ PARAMETER (MPI_ERR_COUNT=2)
+ INTEGER MPI_ERR_LOCKTYPE
+ PARAMETER (MPI_ERR_LOCKTYPE=47)
+ INTEGER MPI_ERR_OP
+ PARAMETER (MPI_ERR_OP=9)
+ INTEGER MPI_ERR_REQUEST
+ PARAMETER (MPI_ERR_REQUEST=19)
+ INTEGER MPI_ERR_RMA_SYNC
+ PARAMETER (MPI_ERR_RMA_SYNC=50)
INTEGER MPI_ERR_TYPE
PARAMETER (MPI_ERR_TYPE=3)
+ INTEGER MPI_ERR_RMA_SHARED
+ PARAMETER (MPI_ERR_RMA_SHARED=57)
INTEGER MPI_ERR_IO
PARAMETER (MPI_ERR_IO=32)
- INTEGER MPI_ERR_LASTCODE
- PARAMETER (MPI_ERR_LASTCODE=1073741823)
- INTEGER MPI_ERR_TOPOLOGY
- PARAMETER (MPI_ERR_TOPOLOGY=10)
- INTEGER MPI_ERR_ARG
- PARAMETER (MPI_ERR_ARG=12)
- INTEGER MPI_ERR_WIN
- PARAMETER (MPI_ERR_WIN=45)
- INTEGER MPI_ERR_RMA_CONFLICT
- PARAMETER (MPI_ERR_RMA_CONFLICT=49)
+ INTEGER MPI_ERR_INFO_NOKEY
+ PARAMETER (MPI_ERR_INFO_NOKEY=31)
+ INTEGER MPI_ERR_TRUNCATE
+ PARAMETER (MPI_ERR_TRUNCATE=14)
INTEGER MPI_ERR_INFO_VALUE
PARAMETER (MPI_ERR_INFO_VALUE=30)
- INTEGER MPI_ERR_UNKNOWN
- PARAMETER (MPI_ERR_UNKNOWN=13)
- INTEGER MPI_ERR_INTERN
- PARAMETER (MPI_ERR_INTERN=16)
- INTEGER MPI_ERR_RMA_RANGE
- PARAMETER (MPI_ERR_RMA_RANGE=55)
- INTEGER MPI_ERR_REQUEST
- PARAMETER (MPI_ERR_REQUEST=19)
- INTEGER MPI_ERR_DISP
- PARAMETER (MPI_ERR_DISP=52)
+ INTEGER MPI_ERR_OTHER
+ PARAMETER (MPI_ERR_OTHER=15)
+ INTEGER MPI_ERR_ACCESS
+ PARAMETER (MPI_ERR_ACCESS=20)
+ INTEGER MPI_ERR_CONVERSION
+ PARAMETER (MPI_ERR_CONVERSION=23)
+ INTEGER MPI_ERR_SERVICE
+ PARAMETER (MPI_ERR_SERVICE=41)
+ INTEGER MPI_ERR_TAG
+ PARAMETER (MPI_ERR_TAG=4)
+ INTEGER MPI_ERR_SPAWN
+ PARAMETER (MPI_ERR_SPAWN=42)
+ INTEGER MPI_ERR_UNSUPPORTED_OPERATION
+ PARAMETER (MPI_ERR_UNSUPPORTED_OPERATION=44)
INTEGER MPI_ERR_PORT
PARAMETER (MPI_ERR_PORT=38)
- INTEGER MPI_ERR_FILE_EXISTS
- PARAMETER (MPI_ERR_FILE_EXISTS=25)
- INTEGER MPI_ERR_NO_SUCH_FILE
- PARAMETER (MPI_ERR_NO_SUCH_FILE=37)
+ INTEGER MPI_ERR_RMA_ATTACH
+ PARAMETER (MPI_ERR_RMA_ATTACH=56)
+ INTEGER MPI_ERR_AMODE
+ PARAMETER (MPI_ERR_AMODE=21)
INTEGER MPI_ERR_COMM
PARAMETER (MPI_ERR_COMM=5)
+ INTEGER MPI_ERR_ROOT
+ PARAMETER (MPI_ERR_ROOT=7)
INTEGER MPI_ERRORS_ARE_FATAL
PARAMETER (MPI_ERRORS_ARE_FATAL=1409286144)
INTEGER MPI_ERRORS_RETURN
diff --git a/src/binding/fortran/mpif_h/null_comm_copy_fnf.c b/src/binding/fortran/mpif_h/null_comm_copy_fnf.c
index 7c2d7d3..b1cc8e9 100644
--- a/src/binding/fortran/mpif_h/null_comm_copy_fnf.c
+++ b/src/binding/fortran/mpif_h/null_comm_copy_fnf.c
@@ -270,5 +270,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_comm_null_copy_fn_( MPI_Fint*, MPI_Fint
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_comm_null_copy_fn_ ( MPI_Fint*v1, MPI_Fint*v2, MPI_Aint *v3, MPI_Aint *v4, MPI_Aint *v5, MPI_Fint *v6, MPI_Fint *ierr ){
*ierr = MPI_SUCCESS;
- *v6 = MPIR_TO_FLOG(0);
+ *v6 = MPII_TO_FLOG(0);
}
diff --git a/src/binding/fortran/mpif_h/null_copy_fnf.c b/src/binding/fortran/mpif_h/null_copy_fnf.c
index 9f9088b..b4c8a85 100644
--- a/src/binding/fortran/mpif_h/null_copy_fnf.c
+++ b/src/binding/fortran/mpif_h/null_copy_fnf.c
@@ -267,5 +267,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_null_copy_fn_( MPI_Fint*, MPI_Fint*, vo
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_null_copy_fn_ ( MPI_Fint*v1, MPI_Fint*v2, void*v3, void*v4, void*v5, MPI_Fint *v6, MPI_Fint *ierr ){
*ierr = MPI_SUCCESS;
- *v6 = MPIR_TO_FLOG(0);
+ *v6 = MPII_TO_FLOG(0);
}
diff --git a/src/binding/fortran/mpif_h/null_type_copy_fnf.c b/src/binding/fortran/mpif_h/null_type_copy_fnf.c
index a238468..fbc4043 100644
--- a/src/binding/fortran/mpif_h/null_type_copy_fnf.c
+++ b/src/binding/fortran/mpif_h/null_type_copy_fnf.c
@@ -270,5 +270,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_type_null_copy_fn_( MPI_Fint*, MPI_Fint
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_type_null_copy_fn_ ( MPI_Fint*v1, MPI_Fint*v2, MPI_Aint *v3, MPI_Aint *v4, MPI_Aint *v5, MPI_Fint *v6, MPI_Fint *ierr ){
*ierr = MPI_SUCCESS;
- *v6 = MPIR_TO_FLOG(0);
+ *v6 = MPII_TO_FLOG(0);
}
diff --git a/src/binding/fortran/mpif_h/null_win_copy_fnf.c b/src/binding/fortran/mpif_h/null_win_copy_fnf.c
index 293bb40..b9775f2 100644
--- a/src/binding/fortran/mpif_h/null_win_copy_fnf.c
+++ b/src/binding/fortran/mpif_h/null_win_copy_fnf.c
@@ -270,5 +270,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_win_null_copy_fn_( MPI_Fint*, MPI_Fint*
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_win_null_copy_fn_ ( MPI_Fint*v1, MPI_Fint*v2, MPI_Aint *v3, MPI_Aint *v4, MPI_Aint *v5, MPI_Fint *v6, MPI_Fint *ierr ){
*ierr = MPI_SUCCESS;
- *v6 = MPIR_TO_FLOG(0);
+ *v6 = MPII_TO_FLOG(0);
}
diff --git a/src/binding/fortran/mpif_h/op_commutativef.c b/src/binding/fortran/mpif_h/op_commutativef.c
index 8666199..63880a2 100644
--- a/src/binding/fortran/mpif_h/op_commutativef.c
+++ b/src/binding/fortran/mpif_h/op_commutativef.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_op_commutative_( MPI_Fint *, MPI_Fint *
FORT_DLL_SPEC void FORT_CALL mpi_op_commutative_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *ierr ){
int l2;
*ierr = MPI_Op_commutative( (MPI_Op)*v1, &l2 );
- if (*ierr == MPI_SUCCESS) *v2 = MPIR_TO_FLOG(l2);
+ if (*ierr == MPI_SUCCESS) *v2 = MPII_TO_FLOG(l2);
}
diff --git a/src/binding/fortran/mpif_h/op_createf.c b/src/binding/fortran/mpif_h/op_createf.c
index 943463d..4d7ad9d 100644
--- a/src/binding/fortran/mpif_h/op_createf.c
+++ b/src/binding/fortran/mpif_h/op_createf.c
@@ -267,6 +267,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_op_create_( MPI_User_function*, MPI_Fin
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_op_create_ ( MPI_User_function*v1, MPI_Fint *v2, MPI_Fint *v3, MPI_Fint *ierr ){
int l2;
- l2 = MPIR_FROM_FLOG(*v2);
+ l2 = MPII_FROM_FLOG(*v2);
*ierr = MPI_Op_create( v1, l2, v3 );
}
diff --git a/src/binding/fortran/mpif_h/open_portf.c b/src/binding/fortran/mpif_h/open_portf.c
index 14fdb15..84fb07d 100644
--- a/src/binding/fortran/mpif_h/open_portf.c
+++ b/src/binding/fortran/mpif_h/open_portf.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_open_port_( MPI_Fint *, char * FORT_MIX
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_open_port_ ( MPI_Fint *v1, char *v2 FORT_MIXED_LEN(d2), MPI_Fint *ierr FORT_END_LEN(d2) ){
char *p2;
- p2 = (char *)MPIU_Malloc( d2 + 1 );
+ p2 = (char *)MPL_malloc( d2 + 1 );
*ierr = MPI_Open_port( (MPI_Info)(*v1), p2 );
if (!*ierr) {char *p = v2, *pc=p2;
while (*pc) {*p++ = *pc++;}
while ((p-v2) < d2) { *p++ = ' '; }
}
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/pack_externalf.c b/src/binding/fortran/mpif_h/pack_externalf.c
index dc29a07..9f722ae 100644
--- a/src/binding/fortran/mpif_h/pack_externalf.c
+++ b/src/binding/fortran/mpif_h/pack_externalf.c
@@ -272,12 +272,12 @@ FORT_DLL_SPEC void FORT_CALL mpi_pack_external_ ( char *v1 FORT_MIXED_LEN(d1), v
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
if (v2 == MPIR_F_MPI_BOTTOM) v2 = MPI_BOTTOM;
if (v5 == MPIR_F_MPI_BOTTOM) v5 = MPI_BOTTOM;
*ierr = MPI_Pack_external( p1, v2, (int)*v3, (MPI_Datatype)(*v4), v5, *v6, v7 );
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/packesizef.c b/src/binding/fortran/mpif_h/packesizef.c
index 7d9166e..5091ffa 100644
--- a/src/binding/fortran/mpif_h/packesizef.c
+++ b/src/binding/fortran/mpif_h/packesizef.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_pack_external_size_ ( char *v1 FORT_MIXED_LEN(d
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
*ierr = MPI_Pack_external_size( p1, (int)*v2, (MPI_Datatype)(*v3), v4 );
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/publish_namef.c b/src/binding/fortran/mpif_h/publish_namef.c
index a2bbc94..c87decb 100644
--- a/src/binding/fortran/mpif_h/publish_namef.c
+++ b/src/binding/fortran/mpif_h/publish_namef.c
@@ -273,7 +273,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_publish_name_ ( char *v1 FORT_MIXED_LEN(d1), MP
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
@@ -282,11 +282,11 @@ FORT_DLL_SPEC void FORT_CALL mpi_publish_name_ ( char *v1 FORT_MIXED_LEN(d1), MP
int li;
while (*p == ' ' && p > v3) p--;
p++;
- p3 = (char *)MPIU_Malloc( p-v3 + 1 );
+ p3 = (char *)MPL_malloc( p-v3 + 1 );
for (li=0; li<(p-v3); li++) { p3[li] = v3[li]; }
p3[li] = 0;
}
*ierr = MPI_Publish_name( p1, (MPI_Info)(*v2), p3 );
- MPIU_Free( p1 );
- MPIU_Free( p3 );
+ MPL_free( p1 );
+ MPL_free( p3 );
}
diff --git a/src/binding/fortran/mpif_h/register_datarepf.c b/src/binding/fortran/mpif_h/register_datarepf.c
index b6f3251..a8119d9 100644
--- a/src/binding/fortran/mpif_h/register_datarepf.c
+++ b/src/binding/fortran/mpif_h/register_datarepf.c
@@ -355,7 +355,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_register_datarep_ ( char *v1 FORT_MIXED_LEN(d1)
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
@@ -369,7 +369,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_register_datarep_ ( char *v1 FORT_MIXED_LEN(d1)
}
if (v5 == MPIR_F_MPI_BOTTOM) v5 = MPI_BOTTOM;
*ierr = MPI_Register_datarep( p1, v2, v3, v4, v5 );
- MPIU_Free( p1 );
+ MPL_free( p1 );
#else
*ierr = MPI_ERR_INTERN;
#endif
diff --git a/src/binding/fortran/mpif_h/reqgetstatf.c b/src/binding/fortran/mpif_h/reqgetstatf.c
index 5eeb94f..72c7cd5 100644
--- a/src/binding/fortran/mpif_h/reqgetstatf.c
+++ b/src/binding/fortran/mpif_h/reqgetstatf.c
@@ -274,5 +274,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_request_get_status_ ( MPI_Fint *v1, MPI_Fint *v
if (v3 == MPI_F_STATUS_IGNORE) { v3 = (MPI_Fint*)MPI_STATUS_IGNORE; }
*ierr = MPI_Request_get_status( (MPI_Request)*v1, &l2, (MPI_Status *)v3 );
- if (*ierr == MPI_SUCCESS) *v2 = MPIR_TO_FLOG(l2);
+ if (*ierr == MPI_SUCCESS) *v2 = MPII_TO_FLOG(l2);
}
diff --git a/src/binding/fortran/mpif_h/setbot.c.in b/src/binding/fortran/mpif_h/setbot.c.in
index faf193c..d7a97b6 100644
--- a/src/binding/fortran/mpif_h/setbot.c.in
+++ b/src/binding/fortran/mpif_h/setbot.c.in
@@ -40,10 +40,10 @@ FORT_DLL_SPEC void FORT_CALL mpirinitc2_( char * FORT_MIXED_LEN_DECL
*/
#ifndef F77_USE_BOOLEAN_LITERALS
#if defined(F77_RUNTIME_VALUES) || !defined(F77_TRUE_VALUE_SET)
-MPI_Fint MPIR_F_TRUE = 1, MPIR_F_FALSE = 0;
+MPI_Fint MPII_F_TRUE = 1, MPII_F_FALSE = 0;
#else
-const MPI_Fint MPIR_F_TRUE=F77_TRUE_VALUE;
-const MPI_Fint MPIR_F_FALSE=F77_FALSE_VALUE;
+const MPI_Fint MPII_F_TRUE=F77_TRUE_VALUE;
+const MPI_Fint MPII_F_FALSE=F77_FALSE_VALUE;
#endif
#endif
@@ -154,13 +154,13 @@ struct mpif_cmblk5_t_ {
MPI_Fint MPIF_UNWEIGHTED;
};
typedef struct mpif_cmblk5_t_ mpif_cmblk5_t;
-mpif_cmblk5_t mpifcmb5r @CMB_1INT_ALIGNMENT@ = {0};
-extern mpif_cmblk5_t _CMPIFCMB5 __attribute__ ((alias("mpifcmb5r")));
-extern mpif_cmblk5_t MPIFCMB5 __attribute__ ((alias("mpifcmb5r")));
-extern mpif_cmblk5_t MPIFCMB5_ __attribute__ ((alias("mpifcmb5r")));
-extern mpif_cmblk5_t _Cmpifcmb5 __attribute__ ((alias("mpifcmb5r")));
-extern mpif_cmblk5_t mpifcmb5 __attribute__ ((alias("mpifcmb5r")));
-extern mpif_cmblk5_t mpifcmb5_ __attribute__ ((alias("mpifcmb5r")));
+FORT_DLL_SPEC mpif_cmblk5_t mpifcmb5r @CMB_1INT_ALIGNMENT@ = {0};
+extern FORT_DLL_SPEC mpif_cmblk5_t _CMPIFCMB5 __attribute__ ((alias("mpifcmb5r")));
+extern FORT_DLL_SPEC mpif_cmblk5_t MPIFCMB5 __attribute__ ((alias("mpifcmb5r")));
+extern FORT_DLL_SPEC mpif_cmblk5_t MPIFCMB5_ __attribute__ ((alias("mpifcmb5r")));
+extern FORT_DLL_SPEC mpif_cmblk5_t _Cmpifcmb5 __attribute__ ((alias("mpifcmb5r")));
+extern FORT_DLL_SPEC mpif_cmblk5_t mpifcmb5 __attribute__ ((alias("mpifcmb5r")));
+extern FORT_DLL_SPEC mpif_cmblk5_t mpifcmb5_ __attribute__ ((alias("mpifcmb5r")));
struct mpif_cmblk6_t_ {
MPI_Fint MPIF_ERRCODES_IGNORE[1];
@@ -204,13 +204,13 @@ struct mpif_cmblk9_t_ {
MPI_Fint MPIF_WEIGHTS_EMPTY;
};
typedef struct mpif_cmblk9_t_ mpif_cmblk9_t;
-mpif_cmblk9_t mpifcmb9r @CMB_1INT_ALIGNMENT@ = {0};
-extern mpif_cmblk9_t _CMPIFCMB9 __attribute__ ((alias("mpifcmb9r")));
-extern mpif_cmblk9_t MPIFCMB9 __attribute__ ((alias("mpifcmb9r")));
-extern mpif_cmblk9_t MPIFCMB9_ __attribute__ ((alias("mpifcmb9r")));
-extern mpif_cmblk9_t _Cmpifcmb9 __attribute__ ((alias("mpifcmb9r")));
-extern mpif_cmblk9_t mpifcmb9 __attribute__ ((alias("mpifcmb9r")));
-extern mpif_cmblk9_t mpifcmb9_ __attribute__ ((alias("mpifcmb9r")));
+FORT_DLL_SPEC mpif_cmblk9_t mpifcmb9r @CMB_1INT_ALIGNMENT@ = {0};
+extern FORT_DLL_SPEC mpif_cmblk9_t _CMPIFCMB9 __attribute__ ((alias("mpifcmb9r")));
+extern FORT_DLL_SPEC mpif_cmblk9_t MPIFCMB9 __attribute__ ((alias("mpifcmb9r")));
+extern FORT_DLL_SPEC mpif_cmblk9_t MPIFCMB9_ __attribute__ ((alias("mpifcmb9r")));
+extern FORT_DLL_SPEC mpif_cmblk9_t _Cmpifcmb9 __attribute__ ((alias("mpifcmb9r")));
+extern FORT_DLL_SPEC mpif_cmblk9_t mpifcmb9 __attribute__ ((alias("mpifcmb9r")));
+extern FORT_DLL_SPEC mpif_cmblk9_t mpifcmb9_ __attribute__ ((alias("mpifcmb9r")));
#endif
diff --git a/src/binding/fortran/mpif_h/setbotf.f.in b/src/binding/fortran/mpif_h/setbotf.f.in
index 706aebf..2fafdac 100644
--- a/src/binding/fortran/mpif_h/setbotf.f.in
+++ b/src/binding/fortran/mpif_h/setbotf.f.in
@@ -8,8 +8,8 @@
parameter (mpi_status_size=@MPI_STATUS_SIZE@)
! STATUS_IGNORE, STATUSES_IGNORE
integer si(mpi_status_size), ssi(mpi_status_size,1)
-! BOTTOM, IN_PLACE, UNWEIGHTED, ERRCODES_IGNORE
- integer bt, ip, uw, ecsi(1)
+! BOTTOM, IN_PLACE, UNWEIGHTED, WEIGHTED, ERRCODES_IGNORE
+ integer bt, ip, uw, we, ecsi(1)
! ARGVS_NULL, ARGV_NULL
character*1 asn(1,1), an(1)
common /MPIFCMB5/ uw
diff --git a/src/binding/fortran/mpif_h/spawnmultf.c b/src/binding/fortran/mpif_h/spawnmultf.c
index c90960f..6d5fee8 100644
--- a/src/binding/fortran/mpif_h/spawnmultf.c
+++ b/src/binding/fortran/mpif_h/spawnmultf.c
@@ -279,8 +279,8 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_spawn_multiple_ ( MPI_Fint *v1, char *v2 F
asize2 = (int)*v1 + 1;
- p2 = (char **)MPIU_Malloc( asize2 * sizeof(char *) );
- if (asize2-1 > 0) ptmp = (char *)MPIU_Malloc( asize2 * (d2 + 1) );
+ p2 = (char **)MPL_malloc( asize2 * sizeof(char *) );
+ if (asize2-1 > 0) ptmp = (char *)MPL_malloc( asize2 * (d2 + 1) );
for (i=0; i<asize2-1; i++) {
char *p = v2 + i * d2, *pin, *pdest;
int j;
@@ -309,7 +309,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_spawn_multiple_ ( MPI_Fint *v1, char *v2 F
int k;
/* Allocate the array of pointers for the commands */
- p3 = (char ***)MPIU_Malloc( *v1 * sizeof(char **) );
+ p3 = (char ***)MPL_malloc( *v1 * sizeof(char **) );
for (k=0; k<*v1; k++) {
/* For each command, find the number of command-line arguments.
@@ -337,8 +337,8 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_spawn_multiple_ ( MPI_Fint *v1, char *v2 F
/* argcnt is the number of provided arguments.
Allocate the necessary elements and copy, null terminating copies */
- pargs = (char **)MPIU_Malloc( (argcnt+1)*sizeof(char *) );
- pdata = (char *)MPIU_Malloc( arglen );
+ pargs = (char **)MPL_malloc( (argcnt+1)*sizeof(char *) );
+ pdata = (char *)MPL_malloc( arglen );
p3[k] = pargs;
pargs[argcnt] = 0; /* Null terminate end */
/* Copy each argument to consequtive locations in pdata,
@@ -364,15 +364,15 @@ FORT_DLL_SPEC void FORT_CALL mpi_comm_spawn_multiple_ ( MPI_Fint *v1, char *v2 F
if ((MPI_Fint*)v9 == MPI_F_ERRCODES_IGNORE) { v9 = (MPI_Fint *)MPI_ERRCODES_IGNORE; }
*ierr = MPI_Comm_spawn_multiple( (int)*v1, p2, p3, v4, (MPI_Info *)(v5), (int)*v6, (MPI_Comm)(*v7), (MPI_Comm *)(v8), (int *)v9 );
- if (asize2-1 > 0) MPIU_Free( p2[0] );
- MPIU_Free( p2 );
+ if (asize2-1 > 0) MPL_free( p2[0] );
+ MPL_free( p2 );
if (v3 != (char *)MPI_ARGVS_NULL) {
int i;
for (i=0; i <*v1; i++) {
- MPIU_Free( p3[i][0] ); /* Free space allocated to args */
- MPIU_Free( p3[i] ); /* Free space allocated to arg array */
+ MPL_free( p3[i][0] ); /* Free space allocated to args */
+ MPL_free( p3[i] ); /* Free space allocated to arg array */
}
/* Free the array of arrays */
- MPIU_Free( p3 );
+ MPL_free( p3 );
}
}
diff --git a/src/binding/fortran/mpif_h/statgetclf.c b/src/binding/fortran/mpif_h/statgetclf.c
index 7839d64..fbf5464 100644
--- a/src/binding/fortran/mpif_h/statgetclf.c
+++ b/src/binding/fortran/mpif_h/statgetclf.c
@@ -267,6 +267,6 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_status_set_cancelled_( MPI_Fint *, MPI_
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_status_set_cancelled_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *ierr ){
int l2;
- l2 = MPIR_FROM_FLOG(*v2);
+ l2 = MPII_FROM_FLOG(*v2);
*ierr = MPI_Status_set_cancelled( (MPI_Status *)(v1), l2 );
}
diff --git a/src/binding/fortran/mpif_h/statusc2f.c b/src/binding/fortran/mpif_h/statusc2f.c
index 509d3aa..e418e3e 100644
--- a/src/binding/fortran/mpif_h/statusc2f.c
+++ b/src/binding/fortran/mpif_h/statusc2f.c
@@ -8,10 +8,9 @@
* DO NOT EDIT
*/
#include "mpi_fortimpl.h"
-/* mpierrs.h and mpierror.h for the error code creation */
-#include "mpierrs.h"
+/* mpir_err.h for the error code creation */
+#include "mpir_err.h"
#include <stdio.h>
-#include "mpierror.h"
/* -- Begin Profiling Symbol Block for routine MPI_Status_c2f */
#if defined(USE_WEAK_SYMBOLS) && !defined(USE_ONLY_MPI_NAMES)
diff --git a/src/binding/fortran/mpif_h/statusf2c.c b/src/binding/fortran/mpif_h/statusf2c.c
index 41872e3..380c267 100644
--- a/src/binding/fortran/mpif_h/statusf2c.c
+++ b/src/binding/fortran/mpif_h/statusf2c.c
@@ -8,10 +8,9 @@
* DO NOT EDIT
*/
#include "mpi_fortimpl.h"
-/* mpierrs.h and mpierror.h for the error code creation */
-#include "mpierrs.h"
+/* mpir_err.h for the error code creation */
+#include "mpir_err.h"
#include <stdio.h>
-#include "mpierror.h"
/* -- Begin Profiling Symbol Block for routine MPI_Status_f2c */
#if defined(USE_WEAK_SYMBOLS) && !defined(USE_ONLY_MPI_NAMES)
diff --git a/src/binding/fortran/mpif_h/testallf.c b/src/binding/fortran/mpif_h/testallf.c
index 1822d27..01a4877 100644
--- a/src/binding/fortran/mpif_h/testallf.c
+++ b/src/binding/fortran/mpif_h/testallf.c
@@ -274,5 +274,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_testall_ ( MPI_Fint *v1, MPI_Fint v2[], MPI_Fin
if (v4 == MPI_F_STATUSES_IGNORE) { v4 = (MPI_Fint *)MPI_STATUSES_IGNORE; }
*ierr = MPI_Testall( (int)*v1, (MPI_Request *)(v2), &l3, (MPI_Status *)v4 );
- if (*ierr == MPI_SUCCESS) *v3 = MPIR_TO_FLOG(l3);
+ if (*ierr == MPI_SUCCESS) *v3 = MPII_TO_FLOG(l3);
}
diff --git a/src/binding/fortran/mpif_h/testanyf.c b/src/binding/fortran/mpif_h/testanyf.c
index 57c1ce6..c40c1d3 100644
--- a/src/binding/fortran/mpif_h/testanyf.c
+++ b/src/binding/fortran/mpif_h/testanyf.c
@@ -277,5 +277,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_testany_ ( MPI_Fint *v1, MPI_Fint v2[], MPI_Fin
*ierr = MPI_Testany( (int)*v1, (MPI_Request *)(v2), &l3, &l4, (MPI_Status *)v5 );
*v3 = (MPI_Fint)l3;
if (l3 >= 0) *v3 = *v3 + 1;
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/testcancelf.c b/src/binding/fortran/mpif_h/testcancelf.c
index 61291db..bb03f56 100644
--- a/src/binding/fortran/mpif_h/testcancelf.c
+++ b/src/binding/fortran/mpif_h/testcancelf.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_test_cancelled_( MPI_Fint *, MPI_Fint *
FORT_DLL_SPEC void FORT_CALL mpi_test_cancelled_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *ierr ){
int l2;
*ierr = MPI_Test_cancelled( (MPI_Status *)(v1), &l2 );
- if (*ierr == MPI_SUCCESS) *v2 = MPIR_TO_FLOG(l2);
+ if (*ierr == MPI_SUCCESS) *v2 = MPII_TO_FLOG(l2);
}
diff --git a/src/binding/fortran/mpif_h/testf.c b/src/binding/fortran/mpif_h/testf.c
index e31a1a0..cc23050 100644
--- a/src/binding/fortran/mpif_h/testf.c
+++ b/src/binding/fortran/mpif_h/testf.c
@@ -274,5 +274,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_test_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *v
if (v3 == MPI_F_STATUS_IGNORE) { v3 = (MPI_Fint*)MPI_STATUS_IGNORE; }
*ierr = MPI_Test( (MPI_Request *)(v1), &l2, (MPI_Status *)v3 );
- if (*ierr == MPI_SUCCESS) *v2 = MPIR_TO_FLOG(l2);
+ if (*ierr == MPI_SUCCESS) *v2 = MPII_TO_FLOG(l2);
}
diff --git a/src/binding/fortran/mpif_h/type_get_attrf.c b/src/binding/fortran/mpif_h/type_get_attrf.c
index b269076..268876d 100644
--- a/src/binding/fortran/mpif_h/type_get_attrf.c
+++ b/src/binding/fortran/mpif_h/type_get_attrf.c
@@ -269,7 +269,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_get_attr_ ( MPI_Fint *v1, MPI_Fint *v2, vo
void *attrv3;
int l4;
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_TypeGetAttr( (MPI_Datatype)(*v1), (int)*v2, &attrv3, &l4, MPIR_ATTR_AINT );
+ *ierr = MPII_Type_get_attr( (MPI_Datatype)(*v1), (int)*v2, &attrv3, &l4, MPIR_ATTR_AINT );
if ((int)*ierr || !l4) {
*(MPI_Aint*)v3 = 0;
@@ -277,5 +277,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_get_attr_ ( MPI_Fint *v1, MPI_Fint *v2, vo
else {
*(MPI_Aint*)v3 = (MPI_Aint)attrv3;
}
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/type_hindexedf.c b/src/binding/fortran/mpif_h/type_hindexedf.c
index c0c6cf6..4b143c9 100644
--- a/src/binding/fortran/mpif_h/type_hindexedf.c
+++ b/src/binding/fortran/mpif_h/type_hindexedf.c
@@ -272,7 +272,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_hindexed_ ( MPI_Fint *v1, MPI_Fint *v2, MP
if (*v1 > 0) {
int li;
- l3 = (MPI_Aint *)MPIU_Malloc( *v1 * sizeof(MPI_Aint) );
+ l3 = (MPI_Aint *)MPL_malloc( *v1 * sizeof(MPI_Aint) );
for (li=0; li<*v1; li++)
l3[li] = v3[li];
}
@@ -283,6 +283,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_hindexed_ ( MPI_Fint *v1, MPI_Fint *v2, MP
*ierr = MPI_Type_hindexed( (int)*v1, v2, l3, (MPI_Datatype)(*v4), (MPI_Datatype *)(v5) );
#ifdef HAVE_AINT_LARGER_THAN_FINT
- if (l3) { MPIU_Free(l3); }
+ if (l3) { MPL_free(l3); }
#endif
}
diff --git a/src/binding/fortran/mpif_h/type_structf.c b/src/binding/fortran/mpif_h/type_structf.c
index 562951e..c6d6264 100644
--- a/src/binding/fortran/mpif_h/type_structf.c
+++ b/src/binding/fortran/mpif_h/type_structf.c
@@ -272,7 +272,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_struct_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_
if (*v1 > 0) {
int li;
- l3 = (MPI_Aint *)MPIU_Malloc( *v1 * sizeof(MPI_Aint) );
+ l3 = (MPI_Aint *)MPL_malloc( *v1 * sizeof(MPI_Aint) );
for (li=0; li<*v1; li++)
l3[li] = v3[li];
}
@@ -283,6 +283,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_struct_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_
*ierr = MPI_Type_struct( (int)*v1, v2, l3, (MPI_Datatype *)(v4), (MPI_Datatype *)(v5) );
#ifdef HAVE_AINT_LARGER_THAN_FINT
- if (l3) { MPIU_Free(l3); }
+ if (l3) { MPL_free(l3); }
#endif
}
diff --git a/src/binding/fortran/mpif_h/typegnamef.c b/src/binding/fortran/mpif_h/typegnamef.c
index 1063990..1a71078 100644
--- a/src/binding/fortran/mpif_h/typegnamef.c
+++ b/src/binding/fortran/mpif_h/typegnamef.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_type_get_name_( MPI_Fint *, char * FORT
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_type_get_name_ ( MPI_Fint *v1, char *v2 FORT_MIXED_LEN(d2), MPI_Fint *v3, MPI_Fint *ierr FORT_END_LEN(d2) ){
char *p2;
- p2 = (char *)MPIU_Malloc( d2 + 1 );
+ p2 = (char *)MPL_malloc( d2 + 1 );
*ierr = MPI_Type_get_name( (MPI_Datatype)(*v1), p2, v3 );
if (!*ierr) {char *p = v2, *pc=p2;
while (*pc) {*p++ = *pc++;}
while ((p-v2) < d2) { *p++ = ' '; }
}
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/typenewkeyf.c b/src/binding/fortran/mpif_h/typenewkeyf.c
index f337fdd..9dc9c31 100644
--- a/src/binding/fortran/mpif_h/typenewkeyf.c
+++ b/src/binding/fortran/mpif_h/typenewkeyf.c
@@ -278,7 +278,7 @@ MPIR_Type_copy_attr_f90_proxy(
MPI_Datatype datatype,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -287,15 +287,15 @@ MPIR_Type_copy_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)datatype;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F90_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR (fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR (fnew);
return (int)ierr;
}
@@ -310,7 +310,7 @@ MPIR_Type_delete_attr_f90_proxy(
MPI_Type_delete_attr_function* user_function,
MPI_Datatype datatype,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -318,7 +318,7 @@ MPIR_Type_delete_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)datatype;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
((F90_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -329,6 +329,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_create_keyval_ ( MPI_Type_copy_attr_functi
*ierr = MPI_Type_create_keyval( v1, v2, v3, v4 );
if (*ierr == MPI_SUCCESS) {
- MPIR_Keyval_set_proxy( (int)*v3, MPIR_Type_copy_attr_f90_proxy, MPIR_Type_delete_attr_f90_proxy );
+ MPII_Keyval_set_proxy( (int)*v3, MPIR_Type_copy_attr_f90_proxy, MPIR_Type_delete_attr_f90_proxy );
}
}
diff --git a/src/binding/fortran/mpif_h/typesetattrf.c b/src/binding/fortran/mpif_h/typesetattrf.c
index 7d9f147..94f5ec4 100644
--- a/src/binding/fortran/mpif_h/typesetattrf.c
+++ b/src/binding/fortran/mpif_h/typesetattrf.c
@@ -267,5 +267,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_type_set_attr_( MPI_Fint *, MPI_Fint *,
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_type_set_attr_ ( MPI_Fint *v1, MPI_Fint *v2, void*v3, MPI_Fint *ierr ){
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_TypeSetAttr( (MPI_Datatype)(*v1), (int)*v2, (void *)(*(MPI_Aint *)v3), MPIR_ATTR_AINT );
+ *ierr = MPII_Type_set_attr( (MPI_Datatype)(*v1), (int)*v2, (void *)(*(MPI_Aint *)v3), MPIR_ATTR_AINT );
}
diff --git a/src/binding/fortran/mpif_h/typesetnamef.c b/src/binding/fortran/mpif_h/typesetnamef.c
index 4752395..1b332d6 100644
--- a/src/binding/fortran/mpif_h/typesetnamef.c
+++ b/src/binding/fortran/mpif_h/typesetnamef.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_type_set_name_ ( MPI_Fint *v1, char *v2 FORT_MI
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
*ierr = MPI_Type_set_name( (MPI_Datatype)(*v1), p2 );
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/unpackextf.c b/src/binding/fortran/mpif_h/unpackextf.c
index bb5bea6..7094321 100644
--- a/src/binding/fortran/mpif_h/unpackextf.c
+++ b/src/binding/fortran/mpif_h/unpackextf.c
@@ -272,12 +272,12 @@ FORT_DLL_SPEC void FORT_CALL mpi_unpack_external_ ( char *v1 FORT_MIXED_LEN(d1),
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
if (v2 == MPIR_F_MPI_BOTTOM) v2 = MPI_BOTTOM;
if (v5 == MPIR_F_MPI_BOTTOM) v5 = MPI_BOTTOM;
*ierr = MPI_Unpack_external( p1, v2, *v3, v4, v5, (int)*v6, (MPI_Datatype)(*v7) );
- MPIU_Free( p1 );
+ MPL_free( p1 );
}
diff --git a/src/binding/fortran/mpif_h/unpubnamef.c b/src/binding/fortran/mpif_h/unpubnamef.c
index d68667f..466369c 100644
--- a/src/binding/fortran/mpif_h/unpubnamef.c
+++ b/src/binding/fortran/mpif_h/unpubnamef.c
@@ -273,7 +273,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_unpublish_name_ ( char *v1 FORT_MIXED_LEN(d1),
int li;
while (*p == ' ' && p > v1) p--;
p++;
- p1 = (char *)MPIU_Malloc( p-v1 + 1 );
+ p1 = (char *)MPL_malloc( p-v1 + 1 );
for (li=0; li<(p-v1); li++) { p1[li] = v1[li]; }
p1[li] = 0;
}
@@ -282,11 +282,11 @@ FORT_DLL_SPEC void FORT_CALL mpi_unpublish_name_ ( char *v1 FORT_MIXED_LEN(d1),
int li;
while (*p == ' ' && p > v3) p--;
p++;
- p3 = (char *)MPIU_Malloc( p-v3 + 1 );
+ p3 = (char *)MPL_malloc( p-v3 + 1 );
for (li=0; li<(p-v3); li++) { p3[li] = v3[li]; }
p3[li] = 0;
}
*ierr = MPI_Unpublish_name( p1, (MPI_Info)(*v2), p3 );
- MPIU_Free( p1 );
- MPIU_Free( p3 );
+ MPL_free( p1 );
+ MPL_free( p3 );
}
diff --git a/src/binding/fortran/mpif_h/win_get_attrf.c b/src/binding/fortran/mpif_h/win_get_attrf.c
index 15b7c9b..9a625ce 100644
--- a/src/binding/fortran/mpif_h/win_get_attrf.c
+++ b/src/binding/fortran/mpif_h/win_get_attrf.c
@@ -269,7 +269,7 @@ FORT_DLL_SPEC void FORT_CALL mpi_win_get_attr_ ( MPI_Fint *v1, MPI_Fint *v2, voi
void *attrv3;
int l4;
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_WinGetAttr( (MPI_Win)*v1, (int)*v2, &attrv3, &l4, MPIR_ATTR_AINT );
+ *ierr = MPII_Win_get_attr( (MPI_Win)*v1, (int)*v2, &attrv3, &l4, MPIR_ATTR_AINT );
if ((int)*ierr || !l4) {
*(MPI_Aint*)v3 = 0;
@@ -277,5 +277,5 @@ FORT_DLL_SPEC void FORT_CALL mpi_win_get_attr_ ( MPI_Fint *v1, MPI_Fint *v2, voi
else {
*(MPI_Aint*)v3 = (MPI_Aint)attrv3;
}
- if (*ierr == MPI_SUCCESS) *v4 = MPIR_TO_FLOG(l4);
+ if (*ierr == MPI_SUCCESS) *v4 = MPII_TO_FLOG(l4);
}
diff --git a/src/binding/fortran/mpif_h/win_get_namef.c b/src/binding/fortran/mpif_h/win_get_namef.c
index 5b54469..ea1fc39 100644
--- a/src/binding/fortran/mpif_h/win_get_namef.c
+++ b/src/binding/fortran/mpif_h/win_get_namef.c
@@ -267,12 +267,12 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_win_get_name_( MPI_Fint *, char * FORT_
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_win_get_name_ ( MPI_Fint *v1, char *v2 FORT_MIXED_LEN(d2), MPI_Fint *v3, MPI_Fint *ierr FORT_END_LEN(d2) ){
char *p2;
- p2 = (char *)MPIU_Malloc( d2 + 1 );
+ p2 = (char *)MPL_malloc( d2 + 1 );
*ierr = MPI_Win_get_name( (MPI_Win)*v1, p2, v3 );
if (!*ierr) {char *p = v2, *pc=p2;
while (*pc) {*p++ = *pc++;}
while ((p-v2) < d2) { *p++ = ' '; }
}
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/win_set_attrf.c b/src/binding/fortran/mpif_h/win_set_attrf.c
index 119ae94..263690e 100644
--- a/src/binding/fortran/mpif_h/win_set_attrf.c
+++ b/src/binding/fortran/mpif_h/win_set_attrf.c
@@ -267,5 +267,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_win_set_attr_( MPI_Fint *, MPI_Fint *,
#include "fproto.h"
FORT_DLL_SPEC void FORT_CALL mpi_win_set_attr_ ( MPI_Fint *v1, MPI_Fint *v2, void*v3, MPI_Fint *ierr ){
if (v3 == MPIR_F_MPI_BOTTOM) v3 = MPI_BOTTOM;
- *ierr = MPIR_WinSetAttr( (MPI_Win)*v1, (int)*v2, (void *)(*(MPI_Aint *)v3), MPIR_ATTR_AINT );
+ *ierr = MPII_Win_set_attr( (MPI_Win)*v1, (int)*v2, (void *)(*(MPI_Aint *)v3), MPIR_ATTR_AINT );
}
diff --git a/src/binding/fortran/mpif_h/win_set_namef.c b/src/binding/fortran/mpif_h/win_set_namef.c
index cb30129..21e6309 100644
--- a/src/binding/fortran/mpif_h/win_set_namef.c
+++ b/src/binding/fortran/mpif_h/win_set_namef.c
@@ -272,10 +272,10 @@ FORT_DLL_SPEC void FORT_CALL mpi_win_set_name_ ( MPI_Fint *v1, char *v2 FORT_MIX
int li;
while (*p == ' ' && p > v2) p--;
p++;
- p2 = (char *)MPIU_Malloc( p-v2 + 1 );
+ p2 = (char *)MPL_malloc( p-v2 + 1 );
for (li=0; li<(p-v2); li++) { p2[li] = v2[li]; }
p2[li] = 0;
}
*ierr = MPI_Win_set_name( (MPI_Win)*v1, p2 );
- MPIU_Free( p2 );
+ MPL_free( p2 );
}
diff --git a/src/binding/fortran/mpif_h/win_testf.c b/src/binding/fortran/mpif_h/win_testf.c
index 2b0463e..3a5619d 100644
--- a/src/binding/fortran/mpif_h/win_testf.c
+++ b/src/binding/fortran/mpif_h/win_testf.c
@@ -268,5 +268,5 @@ extern FORT_DLL_SPEC void FORT_CALL pmpi_win_test_( MPI_Fint *, MPI_Fint *, MPI_
FORT_DLL_SPEC void FORT_CALL mpi_win_test_ ( MPI_Fint *v1, MPI_Fint *v2, MPI_Fint *ierr ){
int l2;
*ierr = MPI_Win_test( (MPI_Win)*v1, &l2 );
- if (*ierr == MPI_SUCCESS) *v2 = MPIR_TO_FLOG(l2);
+ if (*ierr == MPI_SUCCESS) *v2 = MPII_TO_FLOG(l2);
}
diff --git a/src/binding/fortran/mpif_h/winnewkeyf.c b/src/binding/fortran/mpif_h/winnewkeyf.c
index dfcd4d0..ada2903 100644
--- a/src/binding/fortran/mpif_h/winnewkeyf.c
+++ b/src/binding/fortran/mpif_h/winnewkeyf.c
@@ -278,7 +278,7 @@ MPIR_Win_copy_attr_f90_proxy(
MPI_Win win,
int keyval,
void* extra_state,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void** new_value,
int* flag
@@ -287,15 +287,15 @@ MPIR_Win_copy_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)win;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
MPI_Aint fnew = 0;
MPI_Fint fflag = 0;
((F90_CopyFunction*)user_function)( &fhandle, &fkeyval, fextra, &fvalue, &fnew, &fflag, &ierr );
- *flag = MPIR_FROM_FLOG(fflag);
- *new_value = MPIU_AINT_CAST_TO_VOID_PTR (fnew);
+ *flag = MPII_FROM_FLOG(fflag);
+ *new_value = MPIR_AINT_CAST_TO_VOID_PTR (fnew);
return (int)ierr;
}
@@ -310,7 +310,7 @@ MPIR_Win_delete_attr_f90_proxy(
MPI_Win_delete_attr_function* user_function,
MPI_Win win,
int keyval,
- MPIR_AttrType value_type,
+ MPIR_Attr_type value_type,
void* value,
void* extra_state
)
@@ -318,7 +318,7 @@ MPIR_Win_delete_attr_f90_proxy(
MPI_Fint ierr = 0;
MPI_Fint fhandle = (MPI_Fint)win;
MPI_Fint fkeyval = (MPI_Fint)keyval;
- MPI_Aint fvalue = MPIU_VOID_PTR_CAST_TO_MPI_AINT (value);
+ MPI_Aint fvalue = MPIR_VOID_PTR_CAST_TO_MPI_AINT (value);
MPI_Aint* fextra = (MPI_Aint*)extra_state;
((F90_DeleteFunction*)user_function)( &fhandle, &fkeyval, &fvalue, fextra, &ierr );
@@ -329,6 +329,6 @@ FORT_DLL_SPEC void FORT_CALL mpi_win_create_keyval_ ( MPI_Win_copy_attr_function
*ierr = MPI_Win_create_keyval( v1, v2, v3, v4 );
if (*ierr == MPI_SUCCESS) {
- MPIR_Keyval_set_proxy( (int)*v3, MPIR_Win_copy_attr_f90_proxy, MPIR_Win_delete_attr_f90_proxy );
+ MPII_Keyval_set_proxy( (int)*v3, MPIR_Win_copy_attr_f90_proxy, MPIR_Win_delete_attr_f90_proxy );
}
}
diff --git a/src/binding/fortran/mpif_h/wtickf.c b/src/binding/fortran/mpif_h/wtickf.c
index 42f555b..f1b2d13 100644
--- a/src/binding/fortran/mpif_h/wtickf.c
+++ b/src/binding/fortran/mpif_h/wtickf.c
@@ -266,7 +266,6 @@ extern FORT_DLL_SPEC double FORT_CALL pmpi_wtick_(void) __attribute__((weak,alia
/* Prototypes for the Fortran interfaces */
#include "fproto.h"
#include "mpichconf.h"
-#include "mpiu_timer.h"
FORT_DLL_SPEC double FORT_CALL mpi_wtick_ ( void ) {
return MPI_Wtick();
}
diff --git a/src/binding/fortran/mpif_h/wtimef.c b/src/binding/fortran/mpif_h/wtimef.c
index 9141d10..1591d09 100644
--- a/src/binding/fortran/mpif_h/wtimef.c
+++ b/src/binding/fortran/mpif_h/wtimef.c
@@ -266,7 +266,6 @@ extern FORT_DLL_SPEC double FORT_CALL pmpi_wtime_(void) __attribute__((weak,alia
/* Prototypes for the Fortran interfaces */
#include "fproto.h"
#include "mpichconf.h"
-#include "mpiu_timer.h"
FORT_DLL_SPEC double FORT_CALL mpi_wtime_ ( void ) {
return MPI_Wtime();
}
diff --git a/src/binding/fortran/use_mpi/.state-cache b/src/binding/fortran/use_mpi/.state-cache
index c3f2b21..f2d2cdc 100644
--- a/src/binding/fortran/use_mpi/.state-cache
+++ b/src/binding/fortran/use_mpi/.state-cache
@@ -1,37 +1,37 @@
<dir>
-<file name="cf90t.h" info="1447123141"/>
-<file name="create_f90_util.c" info="1447123141"/>
-<file name="typef90cmplxf.c" info="1447301216"/>
-<file name="create_f90_complex.c" info="1447123141"/>
-<file name="typef90realf.c" info="1447301216"/>
-<file name="create_f90_util.h" info="1447123141"/>
-<file name="create_f90_real.c" info="1447123141"/>
-<file name="typef90intf.c" info="1447301216"/>
-<file name="create_f90_int.c" info="1447123141"/>
-<file name="mpif90type.h" info="1447301216"/>
+<file name="create_f90_real.c" info="1478973152"/>
+<file name="cf90t.h" info="1478973152"/>
+<file name="mpif90type.h" info="1479053539"/>
+<file name="create_f90_util.h" info="1478973152"/>
+<file name="typef90realf.c" info="1479053539"/>
+<file name="typef90cmplxf.c" info="1479053539"/>
+<file name="create_f90_util.c" info="1478973152"/>
+<file name="create_f90_complex.c" info="1478973152"/>
+<file name="create_f90_int.c" info="1478973152"/>
+<file name="typef90intf.c" info="1479053539"/>
</dir>
<data>
-<fileinfo name="cf90t.h">
+<fileinfo name="create_f90_real.c">
+MPID_STATE_MPI_TYPE_CREATE_F90_REAL MPI_Type_create_f90_real
</fileinfo>
-<fileinfo name="create_f90_util.c">
+<fileinfo name="cf90t.h">
</fileinfo>
-<fileinfo name="typef90cmplxf.c">
+<fileinfo name="mpif90type.h">
</fileinfo>
-<fileinfo name="create_f90_complex.c">
-MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX MPI_Type_create_f90_complex
+<fileinfo name="create_f90_util.h">
</fileinfo>
<fileinfo name="typef90realf.c">
</fileinfo>
-<fileinfo name="create_f90_util.h">
+<fileinfo name="typef90cmplxf.c">
</fileinfo>
-<fileinfo name="create_f90_real.c">
-MPID_STATE_MPI_TYPE_CREATE_F90_REAL MPI_Type_create_f90_real
+<fileinfo name="create_f90_util.c">
</fileinfo>
-<fileinfo name="typef90intf.c">
+<fileinfo name="create_f90_complex.c">
+MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX MPI_Type_create_f90_complex
</fileinfo>
<fileinfo name="create_f90_int.c">
MPID_STATE_MPI_TYPE_CREATE_F90_INTEGER MPI_Type_create_f90_integer
</fileinfo>
-<fileinfo name="mpif90type.h">
+<fileinfo name="typef90intf.c">
</fileinfo>
</data>
diff --git a/src/binding/fortran/use_mpi/binding.sub b/src/binding/fortran/use_mpi/binding.sub
index ad4d00f..10a71a1 100755
--- a/src/binding/fortran/use_mpi/binding.sub
+++ b/src/binding/fortran/use_mpi/binding.sub
@@ -53,6 +53,7 @@ sub ReadInterface {
$args .= <FD>;
}
$args =~ s/MPICH_ATTR[A-Z_]*\([^)]*\)//g;
+ $args =~ s/MPICH_API_PUBLIC//g;
$args =~ s/\)\s*;//g;
$args =~ s/[\r\n]*//g;
# remove qualifiers from args
diff --git a/src/binding/fortran/use_mpi/create_f90_complex.c b/src/binding/fortran/use_mpi/create_f90_complex.c
index cb485b7..a92e595 100644
--- a/src/binding/fortran/use_mpi/create_f90_complex.c
+++ b/src/binding/fortran/use_mpi/create_f90_complex.c
@@ -75,12 +75,12 @@ int MPI_Type_create_f90_complex( int precision, int range, MPI_Datatype *newtype
static realModel f90_real_model[2] = {
{ MPIR_F90_REAL_MODEL, MPI_COMPLEX},
{ MPIR_F90_DOUBLE_MODEL, MPI_DOUBLE_COMPLEX } };
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX);
/* ... body of routine ... */
/* MPI 2.1, Section 16.2, page 473 lines 12-27 make it clear that
@@ -124,7 +124,7 @@ int MPI_Type_create_f90_complex( int precision, int range, MPI_Datatype *newtype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_F90_COMPLEX);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
fn_fail:
diff --git a/src/binding/fortran/use_mpi/create_f90_int.c b/src/binding/fortran/use_mpi/create_f90_int.c
index 24484df..2f7507b 100644
--- a/src/binding/fortran/use_mpi/create_f90_int.c
+++ b/src/binding/fortran/use_mpi/create_f90_int.c
@@ -69,12 +69,12 @@ int MPI_Type_create_f90_integer( int range, MPI_Datatype *newtype )
MPI_Datatype basetype = MPI_DATATYPE_NULL;
static intModel f90_integer_map[] = { MPIR_F90_INTEGER_MODEL_MAP
{0, 0, 0 } };
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_F90_INTEGER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_F90_INTEGER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_F90_INTEGER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_F90_INTEGER);
/* ... body of routine ... */
for (i=0; f90_integer_map[i].range > 0; i++) {
@@ -107,7 +107,7 @@ int MPI_Type_create_f90_integer( int range, MPI_Datatype *newtype )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_F90_INTEGER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_F90_INTEGER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
fn_fail:
diff --git a/src/binding/fortran/use_mpi/create_f90_real.c b/src/binding/fortran/use_mpi/create_f90_real.c
index 1b1282a..04ff55a 100644
--- a/src/binding/fortran/use_mpi/create_f90_real.c
+++ b/src/binding/fortran/use_mpi/create_f90_real.c
@@ -74,12 +74,12 @@ int MPI_Type_create_f90_real( int precision, int range, MPI_Datatype *newtype )
static realModel f90_real_model[2] = {
{ MPIR_F90_REAL_MODEL, MPI_REAL},
{ MPIR_F90_DOUBLE_MODEL, MPI_DOUBLE_PRECISION } };
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_F90_REAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_F90_REAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_F90_REAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_F90_REAL);
/* ... body of routine ... */
/* MPI 2.1, Section 16.2, page 473 lines 12-27 make it clear that
@@ -123,7 +123,7 @@ int MPI_Type_create_f90_real( int precision, int range, MPI_Datatype *newtype )
fn_exit:
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_F90_REAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_F90_REAL);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/binding/fortran/use_mpi/create_f90_util.c b/src/binding/fortran/use_mpi/create_f90_util.c
index 0749891..1736661 100644
--- a/src/binding/fortran/use_mpi/create_f90_util.c
+++ b/src/binding/fortran/use_mpi/create_f90_util.c
@@ -80,7 +80,7 @@ int MPIR_Create_unnamed_predefined( MPI_Datatype old, int combiner,
/* Initialize the contents data */
{
- MPID_Datatype *new_dtp = NULL;
+ MPIR_Datatype *new_dtp = NULL;
int vals[2];
int nvals=0;
@@ -116,7 +116,7 @@ int MPIR_Create_unnamed_predefined( MPI_Datatype old, int combiner,
* MPID_Type_commit */
MPID_Datatype_get_basic_type(old, old_basic);
MPID_Datatype_get_basic_type(new_dtp->handle, new_basic);
- MPIU_Assert(new_basic == old_basic);
+ MPIR_Assert(new_basic == old_basic);
}
#endif
@@ -191,7 +191,7 @@ static int MPIR_Create_unnamed_predefined( MPI_Datatype old, int combiner,
/* Initialize the contents data */
if (mpi_errno == MPI_SUCCESS) {
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int vals[2];
int nvals=0;
diff --git a/src/binding/fortran/use_mpi/mpi_base.f90.in b/src/binding/fortran/use_mpi/mpi_base.f90.in
index 188bb86..bb3eee6 100644
--- a/src/binding/fortran/use_mpi/mpi_base.f90.in
+++ b/src/binding/fortran/use_mpi/mpi_base.f90.in
@@ -5,193 +5,146 @@
IMPLICIT NONE
! This module was created by the script buildiface
INTERFACE
- SUBROUTINE MPI_TYPE_GET_NAME(datatype,type_name,resultlen,ierror)
- INTEGER datatype
- CHARACTER (LEN=*) type_name
- INTEGER resultlen
+ SUBROUTINE MPI_IPROBE(source,tag,comm,flag,status,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER source
+ INTEGER tag
+ INTEGER comm
+ LOGICAL flag
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- END SUBROUTINE MPI_TYPE_GET_NAME
+ END SUBROUTINE MPI_IPROBE
- SUBROUTINE MPI_COMM_FREE_KEYVAL(comm_keyval,ierror)
- INTEGER comm_keyval
+ SUBROUTINE MPI_TYPE_CREATE_F90_COMPLEX(precision,range,newtype,ierror)
+ INTEGER precision
+ INTEGER range
+ INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_COMM_FREE_KEYVAL
+ END SUBROUTINE MPI_TYPE_CREATE_F90_COMPLEX
- SUBROUTINE MPI_TYPE_GET_EXTENT(datatype,lb,extent,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ SUBROUTINE MPI_TYPE_EXTENT(datatype,extent,ierror)
INTEGER datatype
- INTEGER(KIND=MPI_ADDRESS_KIND) lb
- INTEGER(KIND=MPI_ADDRESS_KIND) extent
- INTEGER ierror
- END SUBROUTINE MPI_TYPE_GET_EXTENT
-
- SUBROUTINE MPI_GREQUEST_COMPLETE(request,ierror)
- INTEGER request
- INTEGER ierror
- END SUBROUTINE MPI_GREQUEST_COMPLETE
-
- SUBROUTINE MPI_ERRHANDLER_CREATE(function,errhandler,ierror)
- INTERFACE
- SUBROUTINE function(vv0,vv1)
- INTEGER vv0,vv1
- END SUBROUTINE
- END INTERFACE
- INTEGER errhandler
- INTEGER ierror
- END SUBROUTINE MPI_ERRHANDLER_CREATE
-
- SUBROUTINE MPI_WIN_DELETE_ATTR(win,win_keyval,ierror)
- INTEGER win
- INTEGER win_keyval
+ INTEGER extent
INTEGER ierror
- END SUBROUTINE MPI_WIN_DELETE_ATTR
+ END SUBROUTINE MPI_TYPE_EXTENT
- SUBROUTINE MPI_COMM_SIZE(comm,size,ierror)
- INTEGER comm
- INTEGER size
+ SUBROUTINE MPI_FINALIZE(ierror)
INTEGER ierror
- END SUBROUTINE MPI_COMM_SIZE
+ END SUBROUTINE MPI_FINALIZE
- SUBROUTINE MPI_COMM_CREATE_GROUP(comm,group,tag,newcomm,ierror)
- INTEGER comm
- INTEGER group
- INTEGER tag
- INTEGER newcomm
+ SUBROUTINE MPI_TYPE_FREE_KEYVAL(type_keyval,ierror)
+ INTEGER type_keyval
INTEGER ierror
- END SUBROUTINE MPI_COMM_CREATE_GROUP
+ END SUBROUTINE MPI_TYPE_FREE_KEYVAL
- SUBROUTINE MPI_COMM_SET_NAME(comm,comm_name,ierror)
+ SUBROUTINE MPI_COMM_TEST_INTER(comm,flag,ierror)
INTEGER comm
- CHARACTER (LEN=*) comm_name
- INTEGER ierror
- END SUBROUTINE MPI_COMM_SET_NAME
-
- SUBROUTINE MPI_ADD_ERROR_CODE(errorclass,errorcode,ierror)
- INTEGER errorclass
- INTEGER errorcode
+ LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_ADD_ERROR_CODE
+ END SUBROUTINE MPI_COMM_TEST_INTER
- SUBROUTINE MPI_COMM_IDUP(comm,newcomm,request,ierror)
- INTEGER comm
- INTEGER newcomm
- INTEGER request
+ SUBROUTINE MPI_PACK_EXTERNAL_SIZE(datarep,incount,datatype,size,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ CHARACTER (LEN=*) datarep
+ INTEGER incount
+ INTEGER datatype
+ INTEGER(KIND=MPI_ADDRESS_KIND) size
INTEGER ierror
- END SUBROUTINE MPI_COMM_IDUP
+ END SUBROUTINE MPI_PACK_EXTERNAL_SIZE
- SUBROUTINE MPI_TYPE_CREATE_F90_REAL(precision,range,newtype,ierror)
- INTEGER precision
- INTEGER range
+ SUBROUTINE MPI_TYPE_INDEXED(count,array_of_blocklengths,&
+ array_of_displacements,oldtype,newtype,ierror)
+ INTEGER count
+ INTEGER array_of_blocklengths(*)
+ INTEGER array_of_displacements(*)
+ INTEGER oldtype
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_F90_REAL
+ END SUBROUTINE MPI_TYPE_INDEXED
- SUBROUTINE MPI_TYPE_CREATE_HVECTOR(count,blocklength,stride,oldtype,&
- newtype,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ SUBROUTINE MPI_TYPE_CREATE_INDEXED_BLOCK(count,blocklength,&
+ array_of_displacements,oldtype,newtype,ierror)
INTEGER count
INTEGER blocklength
- INTEGER(KIND=MPI_ADDRESS_KIND) stride
+ INTEGER array_of_displacements(*)
INTEGER oldtype
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_HVECTOR
+ END SUBROUTINE MPI_TYPE_CREATE_INDEXED_BLOCK
- SUBROUTINE MPI_OP_FREE(op,ierror)
- INTEGER op
+ SUBROUTINE MPI_INFO_GET_NTHKEY(info,n,key,ierror)
+ INTEGER info
+ INTEGER n
+ CHARACTER (LEN=*) key
INTEGER ierror
- END SUBROUTINE MPI_OP_FREE
+ END SUBROUTINE MPI_INFO_GET_NTHKEY
- SUBROUTINE MPI_IMPROBE(source,tag,comm,flag,message,status,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER source
- INTEGER tag
- INTEGER comm
+ SUBROUTINE MPI_INFO_GET(info,key,valuelen,value,flag,ierror)
+ INTEGER info
+ CHARACTER (LEN=*) key
+ INTEGER valuelen
+ CHARACTER (LEN=*) value
LOGICAL flag
- INTEGER message
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER ierror
- END SUBROUTINE MPI_IMPROBE
-
- SUBROUTINE MPI_COMM_REMOTE_GROUP(comm,group,ierror)
- INTEGER comm
- INTEGER group
INTEGER ierror
- END SUBROUTINE MPI_COMM_REMOTE_GROUP
+ END SUBROUTINE MPI_INFO_GET
- SUBROUTINE MPI_IPROBE(source,tag,comm,flag,status,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER source
- INTEGER tag
+ SUBROUTINE MPI_COMM_SET_ERRHANDLER(comm,errhandler,ierror)
INTEGER comm
- LOGICAL flag
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER ierror
- END SUBROUTINE MPI_IPROBE
-
- SUBROUTINE MPI_TYPE_DELETE_ATTR(datatype,type_keyval,ierror)
- INTEGER datatype
- INTEGER type_keyval
- INTEGER ierror
- END SUBROUTINE MPI_TYPE_DELETE_ATTR
-
- SUBROUTINE MPI_TYPE_FREE(datatype,ierror)
- INTEGER datatype
+ INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_TYPE_FREE
+ END SUBROUTINE MPI_COMM_SET_ERRHANDLER
- SUBROUTINE MPI_TYPE_CREATE_HINDEXED(count,array_of_blocklengths,&
- array_of_displacements,oldtype,newtype,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ SUBROUTINE MPI_TYPE_VECTOR(count,blocklength,stride,oldtype,newtype,&
+ ierror)
INTEGER count
- INTEGER array_of_blocklengths(*)
- INTEGER(KIND=MPI_ADDRESS_KIND) array_of_displacements(*)
+ INTEGER blocklength
+ INTEGER stride
INTEGER oldtype
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_HINDEXED
+ END SUBROUTINE MPI_TYPE_VECTOR
- SUBROUTINE MPI_FILE_CALL_ERRHANDLER(fh,errorcode,ierror)
- INTEGER fh
- INTEGER errorcode
+ SUBROUTINE MPI_TYPE_CREATE_F90_INTEGER(range,newtype,ierror)
+ INTEGER range
+ INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_FILE_CALL_ERRHANDLER
+ END SUBROUTINE MPI_TYPE_CREATE_F90_INTEGER
- SUBROUTINE MPI_COMM_CALL_ERRHANDLER(comm,errorcode,ierror)
+ SUBROUTINE MPI_COMM_RANK(comm,rank,ierror)
INTEGER comm
- INTEGER errorcode
+ INTEGER rank
INTEGER ierror
- END SUBROUTINE MPI_COMM_CALL_ERRHANDLER
+ END SUBROUTINE MPI_COMM_RANK
- SUBROUTINE MPI_GRAPHDIMS_GET(comm,nnodes,nedges,ierror)
- INTEGER comm
- INTEGER nnodes
- INTEGER nedges
+ SUBROUTINE MPI_COMM_FREE_KEYVAL(comm_keyval,ierror)
+ INTEGER comm_keyval
INTEGER ierror
- END SUBROUTINE MPI_GRAPHDIMS_GET
+ END SUBROUTINE MPI_COMM_FREE_KEYVAL
- SUBROUTINE MPI_IBARRIER(comm,request,ierror)
- INTEGER comm
- INTEGER request
+ SUBROUTINE MPI_COMM_COMPARE(comm1,comm2,result,ierror)
+ INTEGER comm1
+ INTEGER comm2
+ INTEGER result
INTEGER ierror
- END SUBROUTINE MPI_IBARRIER
+ END SUBROUTINE MPI_COMM_COMPARE
- SUBROUTINE MPI_WIN_GET_ERRHANDLER(win,errhandler,ierror)
- INTEGER win
- INTEGER errhandler
+ SUBROUTINE MPI_TYPE_SET_NAME(datatype,type_name,ierror)
+ INTEGER datatype
+ CHARACTER (LEN=*) type_name
INTEGER ierror
- END SUBROUTINE MPI_WIN_GET_ERRHANDLER
+ END SUBROUTINE MPI_TYPE_SET_NAME
- SUBROUTINE MPI_CLOSE_PORT(port_name,ierror)
- CHARACTER (LEN=*) port_name
+ SUBROUTINE MPI_GREQUEST_COMPLETE(request,ierror)
+ INTEGER request
INTEGER ierror
- END SUBROUTINE MPI_CLOSE_PORT
+ END SUBROUTINE MPI_GREQUEST_COMPLETE
- SUBROUTINE MPI_COMM_RANK(comm,rank,ierror)
+ SUBROUTINE MPI_WIN_CREATE_DYNAMIC(info,comm,win,ierror)
+ INTEGER info
INTEGER comm
- INTEGER rank
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_COMM_RANK
+ END SUBROUTINE MPI_WIN_CREATE_DYNAMIC
SUBROUTINE MPI_COMM_SPLIT_TYPE(comm,split_type,key,info,newcomm,ierror)
INTEGER comm
@@ -202,259 +155,231 @@
INTEGER ierror
END SUBROUTINE MPI_COMM_SPLIT_TYPE
- SUBROUTINE MPI_TYPE_SET_NAME(datatype,type_name,ierror)
- INTEGER datatype
- CHARACTER (LEN=*) type_name
+ SUBROUTINE MPI_OP_COMMUTATIVE(op,commute,ierror)
+ INTEGER op
+ LOGICAL commute
INTEGER ierror
- END SUBROUTINE MPI_TYPE_SET_NAME
+ END SUBROUTINE MPI_OP_COMMUTATIVE
- SUBROUTINE MPI_GROUP_COMPARE(group1,group2,result,ierror)
- INTEGER group1
- INTEGER group2
- INTEGER result
+ SUBROUTINE MPI_ERRHANDLER_SET(comm,errhandler,ierror)
+ INTEGER comm
+ INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_GROUP_COMPARE
+ END SUBROUTINE MPI_ERRHANDLER_SET
- SUBROUTINE MPI_GET_VERSION(version,subversion,ierror)
- INTEGER version
- INTEGER subversion
+ SUBROUTINE MPI_INFO_DUP(info,newinfo,ierror)
+ INTEGER info
+ INTEGER newinfo
INTEGER ierror
- END SUBROUTINE MPI_GET_VERSION
+ END SUBROUTINE MPI_INFO_DUP
- SUBROUTINE MPI_MPROBE(source,tag,comm,message,status,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER source
- INTEGER tag
- INTEGER comm
- INTEGER message
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER ierror
- END SUBROUTINE MPI_MPROBE
-
- SUBROUTINE MPI_TEST_CANCELLED(status,flag,ierror)
+ SUBROUTINE MPI_TYPE_GET_EXTENT(datatype,lb,extent,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ INTEGER datatype
+ INTEGER(KIND=MPI_ADDRESS_KIND) lb
+ INTEGER(KIND=MPI_ADDRESS_KIND) extent
+ INTEGER ierror
+ END SUBROUTINE MPI_TYPE_GET_EXTENT
+
+ SUBROUTINE MPI_STATUS_SET_CANCELLED(status,flag,ierror)
USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
INTEGER status(MPI_STATUS_SIZE)
LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_TEST_CANCELLED
-
- SUBROUTINE MPI_ABORT(comm,errorcode,ierror)
- INTEGER comm
- INTEGER errorcode
- INTEGER ierror
- END SUBROUTINE MPI_ABORT
+ END SUBROUTINE MPI_STATUS_SET_CANCELLED
- SUBROUTINE MPI_GET_PROCESSOR_NAME(name,resultlen,ierror)
- CHARACTER (LEN=*) name
- INTEGER resultlen
+ SUBROUTINE MPI_TYPE_DELETE_ATTR(datatype,type_keyval,ierror)
+ INTEGER datatype
+ INTEGER type_keyval
INTEGER ierror
- END SUBROUTINE MPI_GET_PROCESSOR_NAME
+ END SUBROUTINE MPI_TYPE_DELETE_ATTR
- SUBROUTINE MPI_TYPE_CREATE_SUBARRAY(ndims,array_of_sizes,&
- array_of_subsizes,array_of_starts,order,oldtype,newtype,&
- ierror)
- INTEGER ndims
- INTEGER array_of_sizes(*)
- INTEGER array_of_subsizes(*)
- INTEGER array_of_starts(*)
- INTEGER order
- INTEGER oldtype
+ SUBROUTINE MPI_TYPE_CREATE_F90_REAL(precision,range,newtype,ierror)
+ INTEGER precision
+ INTEGER range
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_SUBARRAY
+ END SUBROUTINE MPI_TYPE_CREATE_F90_REAL
- SUBROUTINE MPI_ATTR_DELETE(comm,keyval,ierror)
+ SUBROUTINE MPI_COMM_SPAWN(command,argv,maxprocs,info,root,comm,intercomm,&
+ array_of_errcodes,ierror)
+ CHARACTER (LEN=*) command
+ CHARACTER (LEN=*) argv(*)
+ INTEGER maxprocs
+ INTEGER info
+ INTEGER root
INTEGER comm
- INTEGER keyval
- INTEGER ierror
- END SUBROUTINE MPI_ATTR_DELETE
-
- SUBROUTINE MPI_GROUP_INTERSECTION(group1,group2,newgroup,ierror)
- INTEGER group1
- INTEGER group2
- INTEGER newgroup
+ INTEGER intercomm
+ INTEGER array_of_errcodes(*)
INTEGER ierror
- END SUBROUTINE MPI_GROUP_INTERSECTION
+ END SUBROUTINE MPI_COMM_SPAWN
- SUBROUTINE MPI_COMM_DISCONNECT(comm,ierror)
+ SUBROUTINE MPI_COMM_REMOTE_GROUP(comm,group,ierror)
INTEGER comm
+ INTEGER group
INTEGER ierror
- END SUBROUTINE MPI_COMM_DISCONNECT
+ END SUBROUTINE MPI_COMM_REMOTE_GROUP
- SUBROUTINE MPI_COMM_SET_ERRHANDLER(comm,errhandler,ierror)
+ SUBROUTINE MPI_CART_SHIFT(comm,direction,disp,rank_source,rank_dest,&
+ ierror)
INTEGER comm
- INTEGER errhandler
- INTEGER ierror
- END SUBROUTINE MPI_COMM_SET_ERRHANDLER
-
- SUBROUTINE MPI_OP_CREATE(user_fn,commute,op,ierror)
- EXTERNAL user_fn
- LOGICAL commute
- INTEGER op
- INTEGER ierror
- END SUBROUTINE MPI_OP_CREATE
-
- SUBROUTINE MPI_TYPE_EXTENT(datatype,extent,ierror)
- INTEGER datatype
- INTEGER extent
+ INTEGER direction
+ INTEGER disp
+ INTEGER rank_source
+ INTEGER rank_dest
INTEGER ierror
- END SUBROUTINE MPI_TYPE_EXTENT
+ END SUBROUTINE MPI_CART_SHIFT
- SUBROUTINE MPI_TYPE_HINDEXED(count,array_of_blocklengths,&
- array_of_displacements,oldtype,newtype,ierror)
- INTEGER count
- INTEGER array_of_blocklengths(*)
- INTEGER array_of_displacements(*)
+ SUBROUTINE MPI_TYPE_DUP(oldtype,newtype,ierror)
INTEGER oldtype
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_HINDEXED
+ END SUBROUTINE MPI_TYPE_DUP
SUBROUTINE MPI_COMM_FREE(comm,ierror)
INTEGER comm
INTEGER ierror
END SUBROUTINE MPI_COMM_FREE
- SUBROUTINE MPI_GET_ELEMENTS_X(status,datatype,count,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND, MPI_STATUS_SIZE
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER datatype
- INTEGER(KIND=MPI_COUNT_KIND) count
- INTEGER ierror
- END SUBROUTINE MPI_GET_ELEMENTS_X
-
- SUBROUTINE MPI_WIN_WAIT(win,ierror)
- INTEGER win
+ SUBROUTINE MPI_TYPE_CONTIGUOUS(count,oldtype,newtype,ierror)
+ INTEGER count
+ INTEGER oldtype
+ INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_WIN_WAIT
+ END SUBROUTINE MPI_TYPE_CONTIGUOUS
- SUBROUTINE MPI_REQUEST_GET_STATUS(request,flag,status,ierror)
+ SUBROUTINE MPI_TEST_CANCELLED(status,flag,ierror)
USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER request
- LOGICAL flag
INTEGER status(MPI_STATUS_SIZE)
+ LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_REQUEST_GET_STATUS
+ END SUBROUTINE MPI_TEST_CANCELLED
- SUBROUTINE MPI_INFO_GET_NKEYS(info,nkeys,ierror)
- INTEGER info
- INTEGER nkeys
+ SUBROUTINE MPI_OP_FREE(op,ierror)
+ INTEGER op
INTEGER ierror
- END SUBROUTINE MPI_INFO_GET_NKEYS
+ END SUBROUTINE MPI_OP_FREE
- SUBROUTINE MPI_GROUP_RANK(group,rank,ierror)
- INTEGER group
- INTEGER rank
+ SUBROUTINE MPI_REQUEST_FREE(request,ierror)
+ INTEGER request
INTEGER ierror
- END SUBROUTINE MPI_GROUP_RANK
+ END SUBROUTINE MPI_REQUEST_FREE
- SUBROUTINE MPI_WIN_TEST(win,flag,ierror)
- INTEGER win
+ SUBROUTINE MPI_COMM_DISCONNECT(comm,ierror)
+ INTEGER comm
+ INTEGER ierror
+ END SUBROUTINE MPI_COMM_DISCONNECT
+
+ SUBROUTINE MPI_IS_THREAD_MAIN(flag,ierror)
LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_WIN_TEST
+ END SUBROUTINE MPI_IS_THREAD_MAIN
- SUBROUTINE MPI_TYPE_GET_CONTENTS(datatype,max_integers,max_addresses,&
- max_datatypes,array_of_integers,array_of_addresses,&
- array_of_datatypes,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
- INTEGER datatype
- INTEGER max_integers
- INTEGER max_addresses
- INTEGER max_datatypes
- INTEGER array_of_integers(*)
- INTEGER(KIND=MPI_ADDRESS_KIND) array_of_addresses(*)
- INTEGER array_of_datatypes(*)
+ SUBROUTINE MPI_GRAPH_MAP(comm,nnodes,indx,edges,newrank,ierror)
+ INTEGER comm
+ INTEGER nnodes
+ INTEGER indx(*)
+ INTEGER edges(*)
+ INTEGER newrank
INTEGER ierror
- END SUBROUTINE MPI_TYPE_GET_CONTENTS
+ END SUBROUTINE MPI_GRAPH_MAP
- SUBROUTINE MPI_ERROR_CLASS(errorcode,errorclass,ierror)
- INTEGER errorcode
- INTEGER errorclass
+ SUBROUTINE MPI_INFO_FREE(info,ierror)
+ INTEGER info
INTEGER ierror
- END SUBROUTINE MPI_ERROR_CLASS
+ END SUBROUTINE MPI_INFO_FREE
- SUBROUTINE MPI_WIN_FLUSH_LOCAL_ALL(win,ierror)
- INTEGER win
+ SUBROUTINE MPI_COMM_SPAWN_MULTIPLE(count,array_of_commands,array_of_argv,&
+ array_of_maxprocs,array_of_info,root,comm,intercomm,&
+ array_of_errcodes,ierror)
+ INTEGER count
+ CHARACTER (LEN=*) array_of_commands(*)
+ CHARACTER (LEN=*) array_of_argv(count,*)
+ INTEGER array_of_maxprocs(*)
+ INTEGER array_of_info(*)
+ INTEGER root
+ INTEGER comm
+ INTEGER intercomm
+ INTEGER array_of_errcodes(*)
INTEGER ierror
- END SUBROUTINE MPI_WIN_FLUSH_LOCAL_ALL
+ END SUBROUTINE MPI_COMM_SPAWN_MULTIPLE
- SUBROUTINE MPI_WIN_LOCK(lock_type,rank,assert,win,ierror)
- INTEGER lock_type
- INTEGER rank
+ SUBROUTINE MPI_WIN_LOCK_ALL(assert,win,ierror)
INTEGER assert
INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_WIN_LOCK
+ END SUBROUTINE MPI_WIN_LOCK_ALL
- SUBROUTINE MPI_TYPE_CREATE_STRUCT(count,array_of_blocklengths,&
- array_of_displacements,array_of_types,newtype,ierror)
+ SUBROUTINE MPI_TYPE_CREATE_HVECTOR(count,blocklength,stride,oldtype,&
+ newtype,ierror)
USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
INTEGER count
- INTEGER array_of_blocklengths(*)
- INTEGER(KIND=MPI_ADDRESS_KIND) array_of_displacements(*)
- INTEGER array_of_types(*)
+ INTEGER blocklength
+ INTEGER(KIND=MPI_ADDRESS_KIND) stride
+ INTEGER oldtype
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_STRUCT
+ END SUBROUTINE MPI_TYPE_CREATE_HVECTOR
- SUBROUTINE MPI_COMM_SPAWN(command,argv,maxprocs,info,root,comm,intercomm,&
- array_of_errcodes,ierror)
- CHARACTER (LEN=*) command
- CHARACTER (LEN=*) argv(*)
- INTEGER maxprocs
+ SUBROUTINE MPI_WIN_TEST(win,flag,ierror)
+ INTEGER win
+ LOGICAL flag
+ INTEGER ierror
+ END SUBROUTINE MPI_WIN_TEST
+
+ SUBROUTINE MPI_TYPE_CREATE_RESIZED(oldtype,lb,extent,newtype,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ INTEGER oldtype
+ INTEGER(KIND=MPI_ADDRESS_KIND) lb
+ INTEGER(KIND=MPI_ADDRESS_KIND) extent
+ INTEGER newtype
+ INTEGER ierror
+ END SUBROUTINE MPI_TYPE_CREATE_RESIZED
+
+ SUBROUTINE MPI_GET_PROCESSOR_NAME(name,resultlen,ierror)
+ CHARACTER (LEN=*) name
+ INTEGER resultlen
+ INTEGER ierror
+ END SUBROUTINE MPI_GET_PROCESSOR_NAME
+
+ SUBROUTINE MPI_INFO_GET_NKEYS(info,nkeys,ierror)
INTEGER info
- INTEGER root
- INTEGER comm
- INTEGER intercomm
- INTEGER array_of_errcodes(*)
+ INTEGER nkeys
INTEGER ierror
- END SUBROUTINE MPI_COMM_SPAWN
+ END SUBROUTINE MPI_INFO_GET_NKEYS
- SUBROUTINE MPI_WIN_UNLOCK(rank,win,ierror)
- INTEGER rank
+ SUBROUTINE MPI_WIN_FLUSH_ALL(win,ierror)
INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_WIN_UNLOCK
+ END SUBROUTINE MPI_WIN_FLUSH_ALL
- SUBROUTINE MPI_STATUS_SET_ELEMENTS_X(status,datatype,count,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND, MPI_STATUS_SIZE
- INTEGER status(MPI_STATUS_SIZE)
+ SUBROUTINE MPI_TYPE_FREE(datatype,ierror)
INTEGER datatype
- INTEGER(KIND=MPI_COUNT_KIND) count
INTEGER ierror
- END SUBROUTINE MPI_STATUS_SET_ELEMENTS_X
+ END SUBROUTINE MPI_TYPE_FREE
- SUBROUTINE MPI_WIN_START(group,assert,win,ierror)
- INTEGER group
- INTEGER assert
- INTEGER win
+ SUBROUTINE MPI_WIN_FREE_KEYVAL(win_keyval,ierror)
+ INTEGER win_keyval
INTEGER ierror
- END SUBROUTINE MPI_WIN_START
+ END SUBROUTINE MPI_WIN_FREE_KEYVAL
- SUBROUTINE MPI_COMM_CONNECT(port_name,info,root,comm,newcomm,ierror)
- CHARACTER (LEN=*) port_name
- INTEGER info
- INTEGER root
- INTEGER comm
- INTEGER newcomm
+ SUBROUTINE MPI_WIN_FREE(win,ierror)
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_COMM_CONNECT
+ END SUBROUTINE MPI_WIN_FREE
- SUBROUTINE MPI_INFO_DUP(info,newinfo,ierror)
- INTEGER info
- INTEGER newinfo
+ SUBROUTINE MPI_CANCEL(request,ierror)
+ INTEGER request
INTEGER ierror
- END SUBROUTINE MPI_INFO_DUP
+ END SUBROUTINE MPI_CANCEL
- SUBROUTINE MPI_PUBLISH_NAME(service_name,info,port_name,ierror)
- CHARACTER (LEN=*) service_name
- INTEGER info
- CHARACTER (LEN=*) port_name
+ SUBROUTINE MPI_COMM_DELETE_ATTR(comm,comm_keyval,ierror)
+ INTEGER comm
+ INTEGER comm_keyval
INTEGER ierror
- END SUBROUTINE MPI_PUBLISH_NAME
+ END SUBROUTINE MPI_COMM_DELETE_ATTR
- SUBROUTINE MPI_TYPE_INDEXED(count,array_of_blocklengths,&
+ SUBROUTINE MPI_TYPE_HINDEXED(count,array_of_blocklengths,&
array_of_displacements,oldtype,newtype,ierror)
INTEGER count
INTEGER array_of_blocklengths(*)
@@ -462,237 +387,229 @@
INTEGER oldtype
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_INDEXED
+ END SUBROUTINE MPI_TYPE_HINDEXED
- SUBROUTINE MPI_GRAPH_GET(comm,maxindex,maxedges,indx,edges,ierror)
+ SUBROUTINE MPI_BARRIER(comm,ierror)
INTEGER comm
- INTEGER maxindex
- INTEGER maxedges
- INTEGER indx(*)
- INTEGER edges(*)
INTEGER ierror
- END SUBROUTINE MPI_GRAPH_GET
+ END SUBROUTINE MPI_BARRIER
- SUBROUTINE MPI_WIN_UNLOCK_ALL(win,ierror)
- INTEGER win
+ SUBROUTINE MPI_GROUP_RANK(group,rank,ierror)
+ INTEGER group
+ INTEGER rank
INTEGER ierror
- END SUBROUTINE MPI_WIN_UNLOCK_ALL
+ END SUBROUTINE MPI_GROUP_RANK
- SUBROUTINE MPI_FILE_GET_ERRHANDLER(file,errhandler,ierror)
- INTEGER file
+ SUBROUTINE MPI_COMM_GET_ERRHANDLER(comm,errhandler,ierror)
+ INTEGER comm
INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_FILE_GET_ERRHANDLER
+ END SUBROUTINE MPI_COMM_GET_ERRHANDLER
- SUBROUTINE MPI_GROUP_DIFFERENCE(group1,group2,newgroup,ierror)
+ SUBROUTINE MPI_KEYVAL_FREE(keyval,ierror)
+ INTEGER keyval
+ INTEGER ierror
+ END SUBROUTINE MPI_KEYVAL_FREE
+
+ SUBROUTINE MPI_COMM_ACCEPT(port_name,info,root,comm,newcomm,ierror)
+ CHARACTER (LEN=*) port_name
+ INTEGER info
+ INTEGER root
+ INTEGER comm
+ INTEGER newcomm
+ INTEGER ierror
+ END SUBROUTINE MPI_COMM_ACCEPT
+
+ SUBROUTINE MPI_GROUP_INTERSECTION(group1,group2,newgroup,ierror)
INTEGER group1
INTEGER group2
INTEGER newgroup
INTEGER ierror
- END SUBROUTINE MPI_GROUP_DIFFERENCE
+ END SUBROUTINE MPI_GROUP_INTERSECTION
- SUBROUTINE MPI_GROUP_EXCL(group,n,ranks,newgroup,ierror)
- INTEGER group
- INTEGER n
- INTEGER ranks(*)
- INTEGER newgroup
+ SUBROUTINE MPI_START(request,ierror)
+ INTEGER request
INTEGER ierror
- END SUBROUTINE MPI_GROUP_EXCL
+ END SUBROUTINE MPI_START
- SUBROUTINE MPI_PACK_EXTERNAL_SIZE(datarep,incount,datatype,size,ierror)
+ SUBROUTINE MPI_WIN_CREATE_ERRHANDLER(win_errhandler_fn,errhandler,ierror)
+ INTERFACE
+ SUBROUTINE win_errhandler_fn(vv0,vv1)
+ INTEGER vv0,vv1
+ END SUBROUTINE
+ END INTERFACE
+ INTEGER errhandler
+ INTEGER ierror
+ END SUBROUTINE MPI_WIN_CREATE_ERRHANDLER
+
+ SUBROUTINE MPI_TYPE_CREATE_STRUCT(count,array_of_blocklengths,&
+ array_of_displacements,array_of_types,newtype,ierror)
USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
- CHARACTER (LEN=*) datarep
- INTEGER incount
- INTEGER datatype
- INTEGER(KIND=MPI_ADDRESS_KIND) size
+ INTEGER count
+ INTEGER array_of_blocklengths(*)
+ INTEGER(KIND=MPI_ADDRESS_KIND) array_of_displacements(*)
+ INTEGER array_of_types(*)
+ INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_PACK_EXTERNAL_SIZE
+ END SUBROUTINE MPI_TYPE_CREATE_STRUCT
- SUBROUTINE MPI_WIN_LOCK_ALL(assert,win,ierror)
- INTEGER assert
- INTEGER win
+ SUBROUTINE MPI_GROUP_DIFFERENCE(group1,group2,newgroup,ierror)
+ INTEGER group1
+ INTEGER group2
+ INTEGER newgroup
INTEGER ierror
- END SUBROUTINE MPI_WIN_LOCK_ALL
+ END SUBROUTINE MPI_GROUP_DIFFERENCE
- SUBROUTINE MPI_INFO_GET_VALUELEN(info,key,valuelen,flag,ierror)
+ SUBROUTINE MPI_WIN_SET_INFO(win,info,ierror)
+ INTEGER win
INTEGER info
- CHARACTER (LEN=*) key
- INTEGER valuelen
- LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_INFO_GET_VALUELEN
+ END SUBROUTINE MPI_WIN_SET_INFO
- SUBROUTINE MPI_IS_THREAD_MAIN(flag,ierror)
- LOGICAL flag
+ SUBROUTINE MPI_QUERY_THREAD(provided,ierror)
+ INTEGER provided
INTEGER ierror
- END SUBROUTINE MPI_IS_THREAD_MAIN
+ END SUBROUTINE MPI_QUERY_THREAD
- SUBROUTINE MPI_INFO_FREE(info,ierror)
- INTEGER info
+ SUBROUTINE MPI_WIN_START(group,assert,win,ierror)
+ INTEGER group
+ INTEGER assert
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_INFO_FREE
+ END SUBROUTINE MPI_WIN_START
- SUBROUTINE MPI_CART_SHIFT(comm,direction,disp,rank_source,rank_dest,&
- ierror)
- INTEGER comm
- INTEGER direction
- INTEGER disp
- INTEGER rank_source
- INTEGER rank_dest
+ SUBROUTINE MPI_GROUP_COMPARE(group1,group2,result,ierror)
+ INTEGER group1
+ INTEGER group2
+ INTEGER result
INTEGER ierror
- END SUBROUTINE MPI_CART_SHIFT
+ END SUBROUTINE MPI_GROUP_COMPARE
- SUBROUTINE MPI_DIST_GRAPH_NEIGHBORS_COUNT(comm,indegree,outdegree,&
- weighted,ierror)
- INTEGER comm
- INTEGER indegree
- INTEGER outdegree
- LOGICAL weighted
+ SUBROUTINE MPI_INFO_CREATE(info,ierror)
+ INTEGER info
INTEGER ierror
- END SUBROUTINE MPI_DIST_GRAPH_NEIGHBORS_COUNT
+ END SUBROUTINE MPI_INFO_CREATE
- SUBROUTINE MPI_PROBE(source,tag,comm,status,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER source
- INTEGER tag
- INTEGER comm
- INTEGER status(MPI_STATUS_SIZE)
+ SUBROUTINE MPI_FILE_GET_ERRHANDLER(file,errhandler,ierror)
+ INTEGER file
+ INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_PROBE
+ END SUBROUTINE MPI_FILE_GET_ERRHANDLER
- SUBROUTINE MPI_QUERY_THREAD(provided,ierror)
- INTEGER provided
+ SUBROUTINE MPI_UNPUBLISH_NAME(service_name,info,port_name,ierror)
+ CHARACTER (LEN=*) service_name
+ INTEGER info
+ CHARACTER (LEN=*) port_name
INTEGER ierror
- END SUBROUTINE MPI_QUERY_THREAD
+ END SUBROUTINE MPI_UNPUBLISH_NAME
- SUBROUTINE MPI_TYPE_UB(datatype,displacement,ierror)
+ SUBROUTINE MPI_TYPE_LB(datatype,displacement,ierror)
INTEGER datatype
INTEGER displacement
INTEGER ierror
- END SUBROUTINE MPI_TYPE_UB
+ END SUBROUTINE MPI_TYPE_LB
- SUBROUTINE MPI_COMM_TEST_INTER(comm,flag,ierror)
+ SUBROUTINE MPI_COMM_GROUP(comm,group,ierror)
INTEGER comm
- LOGICAL flag
- INTEGER ierror
- END SUBROUTINE MPI_COMM_TEST_INTER
-
- SUBROUTINE MPI_TYPE_CREATE_RESIZED(oldtype,lb,extent,newtype,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
- INTEGER oldtype
- INTEGER(KIND=MPI_ADDRESS_KIND) lb
- INTEGER(KIND=MPI_ADDRESS_KIND) extent
- INTEGER newtype
+ INTEGER group
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_RESIZED
+ END SUBROUTINE MPI_COMM_GROUP
- SUBROUTINE MPI_TYPE_VECTOR(count,blocklength,stride,oldtype,newtype,&
- ierror)
- INTEGER count
- INTEGER blocklength
- INTEGER stride
- INTEGER oldtype
- INTEGER newtype
+ SUBROUTINE MPI_GROUP_EXCL(group,n,ranks,newgroup,ierror)
+ INTEGER group
+ INTEGER n
+ INTEGER ranks(*)
+ INTEGER newgroup
INTEGER ierror
- END SUBROUTINE MPI_TYPE_VECTOR
+ END SUBROUTINE MPI_GROUP_EXCL
- SUBROUTINE MPI_COMM_DUP_WITH_INFO(comm,info,newcomm,ierror)
- INTEGER comm
- INTEGER info
- INTEGER newcomm
+ SUBROUTINE MPI_FILE_CALL_ERRHANDLER(fh,errorcode,ierror)
+ INTEGER fh
+ INTEGER errorcode
INTEGER ierror
- END SUBROUTINE MPI_COMM_DUP_WITH_INFO
+ END SUBROUTINE MPI_FILE_CALL_ERRHANDLER
- SUBROUTINE MPI_TYPE_GET_EXTENT_X(datatype,lb,extent,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND
+ SUBROUTINE MPI_STATUS_SET_ELEMENTS_X(status,datatype,count,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND, MPI_STATUS_SIZE
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER datatype
- INTEGER(KIND=MPI_COUNT_KIND) lb
- INTEGER(KIND=MPI_COUNT_KIND) extent
+ INTEGER(KIND=MPI_COUNT_KIND) count
INTEGER ierror
- END SUBROUTINE MPI_TYPE_GET_EXTENT_X
+ END SUBROUTINE MPI_STATUS_SET_ELEMENTS_X
- SUBROUTINE MPI_FINALIZE(ierror)
+ SUBROUTINE MPI_INFO_GET_VALUELEN(info,key,valuelen,flag,ierror)
+ INTEGER info
+ CHARACTER (LEN=*) key
+ INTEGER valuelen
+ LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_FINALIZE
+ END SUBROUTINE MPI_INFO_GET_VALUELEN
- SUBROUTINE MPI_COMM_GET_INFO(comm,info,ierror)
- INTEGER comm
- INTEGER info
+ SUBROUTINE MPI_ERRHANDLER_CREATE(function,errhandler,ierror)
+ INTERFACE
+ SUBROUTINE function(vv0,vv1)
+ INTEGER vv0,vv1
+ END SUBROUTINE
+ END INTERFACE
+ INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_COMM_GET_INFO
+ END SUBROUTINE MPI_ERRHANDLER_CREATE
- SUBROUTINE MPI_WIN_FREE(win,ierror)
- INTEGER win
+ SUBROUTINE MPI_ERROR_CLASS(errorcode,errorclass,ierror)
+ INTEGER errorcode
+ INTEGER errorclass
INTEGER ierror
- END SUBROUTINE MPI_WIN_FREE
+ END SUBROUTINE MPI_ERROR_CLASS
- SUBROUTINE MPI_COMM_SPAWN_MULTIPLE(count,array_of_commands,array_of_argv,&
- array_of_maxprocs,array_of_info,root,comm,intercomm,&
- array_of_errcodes,ierror)
- INTEGER count
- CHARACTER (LEN=*) array_of_commands(*)
- CHARACTER (LEN=*) array_of_argv(count,*)
- INTEGER array_of_maxprocs(*)
- INTEGER array_of_info(*)
- INTEGER root
- INTEGER comm
- INTEGER intercomm
- INTEGER array_of_errcodes(*)
+ SUBROUTINE MPI_GROUP_FREE(group,ierror)
+ INTEGER group
INTEGER ierror
- END SUBROUTINE MPI_COMM_SPAWN_MULTIPLE
+ END SUBROUTINE MPI_GROUP_FREE
- SUBROUTINE MPI_INITIALIZED(flag,ierror)
- LOGICAL flag
+ SUBROUTINE MPI_GRAPHDIMS_GET(comm,nnodes,nedges,ierror)
+ INTEGER comm
+ INTEGER nnodes
+ INTEGER nedges
INTEGER ierror
- END SUBROUTINE MPI_INITIALIZED
+ END SUBROUTINE MPI_GRAPHDIMS_GET
- SUBROUTINE MPI_TYPE_CREATE_INDEXED_BLOCK(count,blocklength,&
- array_of_displacements,oldtype,newtype,ierror)
- INTEGER count
- INTEGER blocklength
- INTEGER array_of_displacements(*)
- INTEGER oldtype
- INTEGER newtype
+ SUBROUTINE MPI_INFO_DELETE(info,key,ierror)
+ INTEGER info
+ CHARACTER (LEN=*) key
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_INDEXED_BLOCK
+ END SUBROUTINE MPI_INFO_DELETE
- SUBROUTINE MPI_WIN_SYNC(win,ierror)
+ SUBROUTINE MPI_WIN_FENCE(assert,win,ierror)
+ INTEGER assert
INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_WIN_SYNC
+ END SUBROUTINE MPI_WIN_FENCE
- SUBROUTINE MPI_TYPE_STRUCT(count,array_of_blocklengths,&
- array_of_displacements,array_of_types,newtype,ierror)
- INTEGER count
- INTEGER array_of_blocklengths(*)
- INTEGER array_of_displacements(*)
- INTEGER array_of_types(*)
- INTEGER newtype
+ SUBROUTINE MPI_WIN_SET_NAME(win,win_name,ierror)
+ INTEGER win
+ CHARACTER (LEN=*) win_name
INTEGER ierror
- END SUBROUTINE MPI_TYPE_STRUCT
+ END SUBROUTINE MPI_WIN_SET_NAME
- SUBROUTINE MPI_TOPO_TEST(comm,status,ierror)
+ SUBROUTINE MPI_COMM_CALL_ERRHANDLER(comm,errorcode,ierror)
INTEGER comm
- INTEGER status
+ INTEGER errorcode
INTEGER ierror
- END SUBROUTINE MPI_TOPO_TEST
+ END SUBROUTINE MPI_COMM_CALL_ERRHANDLER
- SUBROUTINE MPI_INFO_CREATE(info,ierror)
- INTEGER info
+ SUBROUTINE MPI_WIN_FLUSH_LOCAL_ALL(win,ierror)
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_INFO_CREATE
+ END SUBROUTINE MPI_WIN_FLUSH_LOCAL_ALL
- SUBROUTINE MPI_COMM_SET_INFO(comm,info,ierror)
+ SUBROUTINE MPI_PROBE(source,tag,comm,status,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER source
+ INTEGER tag
INTEGER comm
- INTEGER info
- INTEGER ierror
- END SUBROUTINE MPI_COMM_SET_INFO
-
- SUBROUTINE MPI_OPEN_PORT(info,port_name,ierror)
- INTEGER info
- CHARACTER (LEN=*) port_name
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- END SUBROUTINE MPI_OPEN_PORT
+ END SUBROUTINE MPI_PROBE
SUBROUTINE MPI_INTERCOMM_CREATE(local_comm,local_leader,peer_comm,&
remote_leader,tag,newintercomm,ierror)
@@ -705,55 +622,38 @@
INTEGER ierror
END SUBROUTINE MPI_INTERCOMM_CREATE
- SUBROUTINE MPI_GROUP_RANGE_INCL(group,n,ranges,newgroup,ierror)
- INTEGER group
- INTEGER n
- INTEGER ranges(3,*)
- INTEGER newgroup
- INTEGER ierror
- END SUBROUTINE MPI_GROUP_RANGE_INCL
-
- SUBROUTINE MPI_TYPE_CREATE_DARRAY(size,rank,ndims,array_of_gsizes,&
- array_of_distribs,array_of_dargs,array_of_psizes,order,&
- oldtype,newtype,ierror)
- INTEGER size
- INTEGER rank
- INTEGER ndims
- INTEGER array_of_gsizes(*)
- INTEGER array_of_distribs(*)
- INTEGER array_of_dargs(*)
- INTEGER array_of_psizes(*)
- INTEGER order
- INTEGER oldtype
- INTEGER newtype
+ SUBROUTINE MPI_GET_VERSION(version,subversion,ierror)
+ INTEGER version
+ INTEGER subversion
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_DARRAY
+ END SUBROUTINE MPI_GET_VERSION
- SUBROUTINE MPI_COMM_SPLIT(comm,color,key,newcomm,ierror)
- INTEGER comm
- INTEGER color
- INTEGER key
- INTEGER newcomm
+ SUBROUTINE MPI_GROUP_RANGE_EXCL(group,n,ranges,newgroup,ierror)
+ INTEGER group
+ INTEGER n
+ INTEGER ranges(3,*)
+ INTEGER newgroup
INTEGER ierror
- END SUBROUTINE MPI_COMM_SPLIT
+ END SUBROUTINE MPI_GROUP_RANGE_EXCL
- SUBROUTINE MPI_COMM_GET_ERRHANDLER(comm,errhandler,ierror)
- INTEGER comm
- INTEGER errhandler
+ SUBROUTINE MPI_GROUP_UNION(group1,group2,newgroup,ierror)
+ INTEGER group1
+ INTEGER group2
+ INTEGER newgroup
INTEGER ierror
- END SUBROUTINE MPI_COMM_GET_ERRHANDLER
+ END SUBROUTINE MPI_GROUP_UNION
- SUBROUTINE MPI_TYPE_CREATE_F90_COMPLEX(precision,range,newtype,ierror)
- INTEGER precision
- INTEGER range
- INTEGER newtype
+ SUBROUTINE MPI_COMM_GET_INFO(comm,info,ierror)
+ INTEGER comm
+ INTEGER info
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_F90_COMPLEX
+ END SUBROUTINE MPI_COMM_GET_INFO
- SUBROUTINE MPI_KEYVAL_FREE(keyval,ierror)
- INTEGER keyval
+ SUBROUTINE MPI_WIN_GET_INFO(win,info_used,ierror)
+ INTEGER win
+ INTEGER info_used
INTEGER ierror
- END SUBROUTINE MPI_KEYVAL_FREE
+ END SUBROUTINE MPI_WIN_GET_INFO
SUBROUTINE MPI_LOOKUP_NAME(service_name,info,port_name,ierror)
CHARACTER (LEN=*) service_name
@@ -762,67 +662,93 @@
INTEGER ierror
END SUBROUTINE MPI_LOOKUP_NAME
- SUBROUTINE MPI_WIN_COMPLETE(win,ierror)
- INTEGER win
- INTEGER ierror
- END SUBROUTINE MPI_WIN_COMPLETE
-
- SUBROUTINE MPI_GROUP_UNION(group1,group2,newgroup,ierror)
- INTEGER group1
- INTEGER group2
- INTEGER newgroup
+ SUBROUTINE MPI_CLOSE_PORT(port_name,ierror)
+ CHARACTER (LEN=*) port_name
INTEGER ierror
- END SUBROUTINE MPI_GROUP_UNION
+ END SUBROUTINE MPI_CLOSE_PORT
- SUBROUTINE MPI_WIN_POST(group,assert,win,ierror)
+ SUBROUTINE MPI_GROUP_RANGE_INCL(group,n,ranges,newgroup,ierror)
INTEGER group
- INTEGER assert
- INTEGER win
+ INTEGER n
+ INTEGER ranges(3,*)
+ INTEGER newgroup
INTEGER ierror
- END SUBROUTINE MPI_WIN_POST
+ END SUBROUTINE MPI_GROUP_RANGE_INCL
- SUBROUTINE MPI_FILE_SET_ERRHANDLER(file,errhandler,ierror)
- INTEGER file
- INTEGER errhandler
+ SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT(datatype,true_lb,true_extent,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ INTEGER datatype
+ INTEGER(KIND=MPI_ADDRESS_KIND) true_lb
+ INTEGER(KIND=MPI_ADDRESS_KIND) true_extent
INTEGER ierror
- END SUBROUTINE MPI_FILE_SET_ERRHANDLER
+ END SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT
- SUBROUTINE MPI_FINALIZED(flag,ierror)
+ SUBROUTINE MPI_REQUEST_GET_STATUS(request,flag,status,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER request
LOGICAL flag
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- END SUBROUTINE MPI_FINALIZED
+ END SUBROUTINE MPI_REQUEST_GET_STATUS
- SUBROUTINE MPI_WIN_SET_INFO(win,info,ierror)
- INTEGER win
- INTEGER info
+ SUBROUTINE MPI_TYPE_CREATE_HINDEXED(count,array_of_blocklengths,&
+ array_of_displacements,oldtype,newtype,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ INTEGER count
+ INTEGER array_of_blocklengths(*)
+ INTEGER(KIND=MPI_ADDRESS_KIND) array_of_displacements(*)
+ INTEGER oldtype
+ INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_WIN_SET_INFO
+ END SUBROUTINE MPI_TYPE_CREATE_HINDEXED
- SUBROUTINE MPI_WIN_FLUSH(rank,win,ierror)
- INTEGER rank
+ SUBROUTINE MPI_WIN_GET_NAME(win,win_name,resultlen,ierror)
INTEGER win
+ CHARACTER (LEN=*) win_name
+ INTEGER resultlen
INTEGER ierror
- END SUBROUTINE MPI_WIN_FLUSH
+ END SUBROUTINE MPI_WIN_GET_NAME
- SUBROUTINE MPI_COMM_COMPARE(comm1,comm2,result,ierror)
- INTEGER comm1
- INTEGER comm2
- INTEGER result
+ SUBROUTINE MPI_GET_ELEMENTS(status,datatype,count,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER status(MPI_STATUS_SIZE)
+ INTEGER datatype
+ INTEGER count
INTEGER ierror
- END SUBROUTINE MPI_COMM_COMPARE
+ END SUBROUTINE MPI_GET_ELEMENTS
- SUBROUTINE MPI_TYPE_COMMIT(datatype,ierror)
+ SUBROUTINE MPI_TYPE_SIZE_X(datatype,size,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND
INTEGER datatype
+ INTEGER(KIND=MPI_COUNT_KIND) size
INTEGER ierror
- END SUBROUTINE MPI_TYPE_COMMIT
+ END SUBROUTINE MPI_TYPE_SIZE_X
- SUBROUTINE MPI_GROUP_INCL(group,n,ranks,newgroup,ierror)
- INTEGER group
- INTEGER n
- INTEGER ranks(*)
- INTEGER newgroup
+ SUBROUTINE MPI_COMM_CONNECT(port_name,info,root,comm,newcomm,ierror)
+ CHARACTER (LEN=*) port_name
+ INTEGER info
+ INTEGER root
+ INTEGER comm
+ INTEGER newcomm
INTEGER ierror
- END SUBROUTINE MPI_GROUP_INCL
+ END SUBROUTINE MPI_COMM_CONNECT
+
+ SUBROUTINE MPI_COMM_DUP(comm,newcomm,ierror)
+ INTEGER comm
+ INTEGER newcomm
+ INTEGER ierror
+ END SUBROUTINE MPI_COMM_DUP
+
+ SUBROUTINE MPI_ABORT(comm,errorcode,ierror)
+ INTEGER comm
+ INTEGER errorcode
+ INTEGER ierror
+ END SUBROUTINE MPI_ABORT
+
+ SUBROUTINE MPI_WIN_WAIT(win,ierror)
+ INTEGER win
+ INTEGER ierror
+ END SUBROUTINE MPI_WIN_WAIT
SUBROUTINE MPI_TYPE_MATCH_SIZE(typeclass,size,datatype,ierror)
INTEGER typeclass
@@ -831,11 +757,25 @@
INTEGER ierror
END SUBROUTINE MPI_TYPE_MATCH_SIZE
- SUBROUTINE MPI_ERRHANDLER_SET(comm,errhandler,ierror)
- INTEGER comm
+ SUBROUTINE MPI_INFO_SET(info,key,value,ierror)
+ INTEGER info
+ CHARACTER (LEN=*) key
+ CHARACTER (LEN=*) value
+ INTEGER ierror
+ END SUBROUTINE MPI_INFO_SET
+
+ SUBROUTINE MPI_FILE_SET_ERRHANDLER(file,errhandler,ierror)
+ INTEGER file
INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_ERRHANDLER_SET
+ END SUBROUTINE MPI_FILE_SET_ERRHANDLER
+
+ SUBROUTINE MPI_COMM_DUP_WITH_INFO(comm,info,newcomm,ierror)
+ INTEGER comm
+ INTEGER info
+ INTEGER newcomm
+ INTEGER ierror
+ END SUBROUTINE MPI_COMM_DUP_WITH_INFO
SUBROUTINE MPI_COMM_JOIN(fd,intercomm,ierror)
INTEGER fd
@@ -843,158 +783,140 @@
INTEGER ierror
END SUBROUTINE MPI_COMM_JOIN
- SUBROUTINE MPI_WIN_FLUSH_ALL(win,ierror)
- INTEGER win
+ SUBROUTINE MPI_ADD_ERROR_CLASS(errorclass,ierror)
+ INTEGER errorclass
INTEGER ierror
- END SUBROUTINE MPI_WIN_FLUSH_ALL
+ END SUBROUTINE MPI_ADD_ERROR_CLASS
- SUBROUTINE MPI_GET_ELEMENTS(status,datatype,count,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER datatype
- INTEGER count
+ SUBROUTINE MPI_COMM_GET_PARENT(parent,ierror)
+ INTEGER parent
INTEGER ierror
- END SUBROUTINE MPI_GET_ELEMENTS
+ END SUBROUTINE MPI_COMM_GET_PARENT
- SUBROUTINE MPI_WIN_CREATE_DYNAMIC(info,comm,win,ierror)
- INTEGER info
+ SUBROUTINE MPI_MPROBE(source,tag,comm,message,status,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER source
+ INTEGER tag
INTEGER comm
- INTEGER win
- INTEGER ierror
- END SUBROUTINE MPI_WIN_CREATE_DYNAMIC
-
- SUBROUTINE MPI_ERRHANDLER_FREE(errhandler,ierror)
- INTEGER errhandler
+ INTEGER message
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- END SUBROUTINE MPI_ERRHANDLER_FREE
+ END SUBROUTINE MPI_MPROBE
- SUBROUTINE MPI_GROUP_SIZE(group,size,ierror)
- INTEGER group
- INTEGER size
+ SUBROUTINE MPI_WIN_CALL_ERRHANDLER(win,errorcode,ierror)
+ INTEGER win
+ INTEGER errorcode
INTEGER ierror
- END SUBROUTINE MPI_GROUP_SIZE
+ END SUBROUTINE MPI_WIN_CALL_ERRHANDLER
- SUBROUTINE MPI_COMM_CREATE_ERRHANDLER(comm_errhandler_fn,errhandler,&
- ierror)
- INTERFACE
- SUBROUTINE comm_errhandler_fn(vv0,vv1)
- INTEGER vv0,vv1
- END SUBROUTINE
- END INTERFACE
- INTEGER errhandler
+ SUBROUTINE MPI_COMM_GET_NAME(comm,comm_name,resultlen,ierror)
+ INTEGER comm
+ CHARACTER (LEN=*) comm_name
+ INTEGER resultlen
INTEGER ierror
- END SUBROUTINE MPI_COMM_CREATE_ERRHANDLER
+ END SUBROUTINE MPI_COMM_GET_NAME
- SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT(datatype,true_lb,true_extent,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ SUBROUTINE MPI_TYPE_UB(datatype,displacement,ierror)
INTEGER datatype
- INTEGER(KIND=MPI_ADDRESS_KIND) true_lb
- INTEGER(KIND=MPI_ADDRESS_KIND) true_extent
- INTEGER ierror
- END SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT
-
- SUBROUTINE MPI_REQUEST_FREE(request,ierror)
- INTEGER request
- INTEGER ierror
- END SUBROUTINE MPI_REQUEST_FREE
-
- SUBROUTINE MPI_TYPE_CONTIGUOUS(count,oldtype,newtype,ierror)
- INTEGER count
- INTEGER oldtype
- INTEGER newtype
+ INTEGER displacement
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CONTIGUOUS
+ END SUBROUTINE MPI_TYPE_UB
- SUBROUTINE MPI_INFO_GET(info,key,valuelen,value,flag,ierror)
- INTEGER info
- CHARACTER (LEN=*) key
- INTEGER valuelen
- CHARACTER (LEN=*) value
+ SUBROUTINE MPI_INITIALIZED(flag,ierror)
LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_INFO_GET
+ END SUBROUTINE MPI_INITIALIZED
- SUBROUTINE MPI_INFO_GET_NTHKEY(info,n,key,ierror)
- INTEGER info
- INTEGER n
- CHARACTER (LEN=*) key
+ SUBROUTINE MPI_INTERCOMM_MERGE(intercomm,high,newintracomm,ierror)
+ INTEGER intercomm
+ LOGICAL high
+ INTEGER newintracomm
INTEGER ierror
- END SUBROUTINE MPI_INFO_GET_NTHKEY
+ END SUBROUTINE MPI_INTERCOMM_MERGE
- SUBROUTINE MPI_FILE_CREATE_ERRHANDLER(file_errhandler_fn,errhandler,&
+ SUBROUTINE MPI_GET_ELEMENTS_X(status,datatype,count,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE, MPI_COUNT_KIND
+ INTEGER status(MPI_STATUS_SIZE)
+ INTEGER datatype
+ INTEGER(KIND=MPI_COUNT_KIND) count
+ INTEGER ierror
+ END SUBROUTINE MPI_GET_ELEMENTS_X
+
+ SUBROUTINE MPI_COMM_CREATE_ERRHANDLER(comm_errhandler_fn,errhandler,&
ierror)
INTERFACE
- SUBROUTINE file_errhandler_fn(vv0,vv1)
+ SUBROUTINE comm_errhandler_fn(vv0,vv1)
INTEGER vv0,vv1
END SUBROUTINE
END INTERFACE
INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_FILE_CREATE_ERRHANDLER
+ END SUBROUTINE MPI_COMM_CREATE_ERRHANDLER
- SUBROUTINE MPI_WIN_GET_INFO(win,info_used,ierror)
- INTEGER win
- INTEGER info_used
+ SUBROUTINE MPI_ERROR_STRING(errorcode,string,resultlen,ierror)
+ INTEGER errorcode
+ CHARACTER (LEN=*) string
+ INTEGER resultlen
INTEGER ierror
- END SUBROUTINE MPI_WIN_GET_INFO
+ END SUBROUTINE MPI_ERROR_STRING
- SUBROUTINE MPI_TYPE_FREE_KEYVAL(type_keyval,ierror)
- INTEGER type_keyval
+ SUBROUTINE MPI_TYPE_GET_CONTENTS(datatype,max_integers,max_addresses,&
+ max_datatypes,array_of_integers,array_of_addresses,&
+ array_of_datatypes,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_ADDRESS_KIND
+ INTEGER datatype
+ INTEGER max_integers
+ INTEGER max_addresses
+ INTEGER max_datatypes
+ INTEGER array_of_integers(*)
+ INTEGER(KIND=MPI_ADDRESS_KIND) array_of_addresses(*)
+ INTEGER array_of_datatypes(*)
INTEGER ierror
- END SUBROUTINE MPI_TYPE_FREE_KEYVAL
+ END SUBROUTINE MPI_TYPE_GET_CONTENTS
- SUBROUTINE MPI_CARTDIM_GET(comm,ndims,ierror)
- INTEGER comm
- INTEGER ndims
+ SUBROUTINE MPI_WIN_UNLOCK(rank,win,ierror)
+ INTEGER rank
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_CARTDIM_GET
+ END SUBROUTINE MPI_WIN_UNLOCK
- SUBROUTINE MPI_INTERCOMM_MERGE(intercomm,high,newintracomm,ierror)
- INTEGER intercomm
- LOGICAL high
- INTEGER newintracomm
+ SUBROUTINE MPI_COMM_REMOTE_SIZE(comm,size,ierror)
+ INTEGER comm
+ INTEGER size
INTEGER ierror
- END SUBROUTINE MPI_INTERCOMM_MERGE
+ END SUBROUTINE MPI_COMM_REMOTE_SIZE
- SUBROUTINE MPI_GROUP_RANGE_EXCL(group,n,ranges,newgroup,ierror)
- INTEGER group
- INTEGER n
- INTEGER ranges(3,*)
- INTEGER newgroup
+ SUBROUTINE MPI_COMM_SIZE(comm,size,ierror)
+ INTEGER comm
+ INTEGER size
INTEGER ierror
- END SUBROUTINE MPI_GROUP_RANGE_EXCL
+ END SUBROUTINE MPI_COMM_SIZE
- SUBROUTINE MPI_TYPE_CREATE_F90_INTEGER(range,newtype,ierror)
- INTEGER range
- INTEGER newtype
+ SUBROUTINE MPI_TYPE_GET_NAME(datatype,type_name,resultlen,ierror)
+ INTEGER datatype
+ CHARACTER (LEN=*) type_name
+ INTEGER resultlen
INTEGER ierror
- END SUBROUTINE MPI_TYPE_CREATE_F90_INTEGER
+ END SUBROUTINE MPI_TYPE_GET_NAME
- SUBROUTINE MPI_STATUS_SET_CANCELLED(status,flag,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER status(MPI_STATUS_SIZE)
+ SUBROUTINE MPI_FINALIZED(flag,ierror)
LOGICAL flag
INTEGER ierror
- END SUBROUTINE MPI_STATUS_SET_CANCELLED
-
- SUBROUTINE MPI_WIN_FLUSH_LOCAL(rank,win,ierror)
- INTEGER rank
- INTEGER win
- INTEGER ierror
- END SUBROUTINE MPI_WIN_FLUSH_LOCAL
+ END SUBROUTINE MPI_FINALIZED
- SUBROUTINE MPI_TYPE_SIZE_X(datatype,size,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND
- INTEGER datatype
- INTEGER(KIND=MPI_COUNT_KIND) size
+ SUBROUTINE MPI_ADD_ERROR_CODE(errorclass,errorcode,ierror)
+ INTEGER errorclass
+ INTEGER errorcode
INTEGER ierror
- END SUBROUTINE MPI_TYPE_SIZE_X
+ END SUBROUTINE MPI_ADD_ERROR_CODE
- SUBROUTINE MPI_GET_LIBRARY_VERSION(version,resultlen,ierror)
- CHARACTER (LEN=*) version
- INTEGER resultlen
+ SUBROUTINE MPI_COMM_CREATE_GROUP(comm,group,tag,newcomm,ierror)
+ INTEGER comm
+ INTEGER group
+ INTEGER tag
+ INTEGER newcomm
INTEGER ierror
- END SUBROUTINE MPI_GET_LIBRARY_VERSION
+ END SUBROUTINE MPI_COMM_CREATE_GROUP
SUBROUTINE MPI_WIN_GET_GROUP(win,group,ierror)
INTEGER win
@@ -1002,33 +924,54 @@
INTEGER ierror
END SUBROUTINE MPI_WIN_GET_GROUP
- SUBROUTINE MPI_CANCEL(request,ierror)
- INTEGER request
+ SUBROUTINE MPI_WIN_SET_ERRHANDLER(win,errhandler,ierror)
+ INTEGER win
+ INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_CANCEL
+ END SUBROUTINE MPI_WIN_SET_ERRHANDLER
- SUBROUTINE MPI_COMM_DELETE_ATTR(comm,comm_keyval,ierror)
- INTEGER comm
- INTEGER comm_keyval
+ SUBROUTINE MPI_TYPE_STRUCT(count,array_of_blocklengths,&
+ array_of_displacements,array_of_types,newtype,ierror)
+ INTEGER count
+ INTEGER array_of_blocklengths(*)
+ INTEGER array_of_displacements(*)
+ INTEGER array_of_types(*)
+ INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_COMM_DELETE_ATTR
+ END SUBROUTINE MPI_TYPE_STRUCT
- SUBROUTINE MPI_GRAPH_NEIGHBORS_COUNT(comm,rank,nneighbors,ierror)
- INTEGER comm
- INTEGER rank
- INTEGER nneighbors
+ SUBROUTINE MPI_TYPE_GET_EXTENT_X(datatype,lb,extent,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND
+ INTEGER datatype
+ INTEGER(KIND=MPI_COUNT_KIND) lb
+ INTEGER(KIND=MPI_COUNT_KIND) extent
INTEGER ierror
- END SUBROUTINE MPI_GRAPH_NEIGHBORS_COUNT
+ END SUBROUTINE MPI_TYPE_GET_EXTENT_X
- SUBROUTINE MPI_ADD_ERROR_CLASS(errorclass,ierror)
- INTEGER errorclass
+ SUBROUTINE MPI_TEST(request,flag,status,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER request
+ LOGICAL flag
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- END SUBROUTINE MPI_ADD_ERROR_CLASS
+ END SUBROUTINE MPI_TEST
- SUBROUTINE MPI_WIN_FREE_KEYVAL(win_keyval,ierror)
- INTEGER win_keyval
+ SUBROUTINE MPI_STATUS_SET_ELEMENTS(status,datatype,count,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER status(MPI_STATUS_SIZE)
+ INTEGER datatype
+ INTEGER count
INTEGER ierror
- END SUBROUTINE MPI_WIN_FREE_KEYVAL
+ END SUBROUTINE MPI_STATUS_SET_ELEMENTS
+
+ SUBROUTINE MPI_GRAPH_GET(comm,maxindex,maxedges,indx,edges,ierror)
+ INTEGER comm
+ INTEGER maxindex
+ INTEGER maxedges
+ INTEGER indx(*)
+ INTEGER edges(*)
+ INTEGER ierror
+ END SUBROUTINE MPI_GRAPH_GET
SUBROUTINE MPI_TYPE_CREATE_HINDEXED_BLOCK(count,blocklength,&
array_of_displacements,oldtype,newtype,ierror)
@@ -1041,34 +984,50 @@
INTEGER ierror
END SUBROUTINE MPI_TYPE_CREATE_HINDEXED_BLOCK
- SUBROUTINE MPI_WIN_SET_ERRHANDLER(win,errhandler,ierror)
- INTEGER win
- INTEGER errhandler
- INTEGER ierror
- END SUBROUTINE MPI_WIN_SET_ERRHANDLER
-
- SUBROUTINE MPI_GROUP_FREE(group,ierror)
+ SUBROUTINE MPI_GROUP_SIZE(group,size,ierror)
INTEGER group
+ INTEGER size
INTEGER ierror
- END SUBROUTINE MPI_GROUP_FREE
+ END SUBROUTINE MPI_GROUP_SIZE
- SUBROUTINE MPI_TYPE_HVECTOR(count,blocklength,stride,oldtype,newtype,&
- ierror)
+ SUBROUTINE MPI_GET_COUNT(status,datatype,count,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER status(MPI_STATUS_SIZE)
+ INTEGER datatype
INTEGER count
- INTEGER blocklength
- INTEGER stride
- INTEGER oldtype
- INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_HVECTOR
+ END SUBROUTINE MPI_GET_COUNT
- SUBROUTINE MPI_TEST(request,flag,status,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ SUBROUTINE MPI_ADD_ERROR_STRING(errorcode,string,ierror)
+ INTEGER errorcode
+ CHARACTER (LEN=*) string
+ INTEGER ierror
+ END SUBROUTINE MPI_ADD_ERROR_STRING
+
+ SUBROUTINE MPI_GRAPH_NEIGHBORS_COUNT(comm,rank,nneighbors,ierror)
+ INTEGER comm
+ INTEGER rank
+ INTEGER nneighbors
+ INTEGER ierror
+ END SUBROUTINE MPI_GRAPH_NEIGHBORS_COUNT
+
+ SUBROUTINE MPI_IBARRIER(comm,request,ierror)
+ INTEGER comm
INTEGER request
- LOGICAL flag
- INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- END SUBROUTINE MPI_TEST
+ END SUBROUTINE MPI_IBARRIER
+
+ SUBROUTINE MPI_TYPE_COMMIT(datatype,ierror)
+ INTEGER datatype
+ INTEGER ierror
+ END SUBROUTINE MPI_TYPE_COMMIT
+
+ SUBROUTINE MPI_WIN_POST(group,assert,win,ierror)
+ INTEGER group
+ INTEGER assert
+ INTEGER win
+ INTEGER ierror
+ END SUBROUTINE MPI_WIN_POST
SUBROUTINE MPI_ERRHANDLER_GET(comm,errhandler,ierror)
INTEGER comm
@@ -1076,39 +1035,32 @@
INTEGER ierror
END SUBROUTINE MPI_ERRHANDLER_GET
- SUBROUTINE MPI_WIN_CALL_ERRHANDLER(win,errorcode,ierror)
+ SUBROUTINE MPI_WIN_LOCK(lock_type,rank,assert,win,ierror)
+ INTEGER lock_type
+ INTEGER rank
+ INTEGER assert
INTEGER win
- INTEGER errorcode
INTEGER ierror
- END SUBROUTINE MPI_WIN_CALL_ERRHANDLER
+ END SUBROUTINE MPI_WIN_LOCK
- SUBROUTINE MPI_ERROR_STRING(errorcode,string,resultlen,ierror)
- INTEGER errorcode
- CHARACTER (LEN=*) string
+ SUBROUTINE MPI_GET_LIBRARY_VERSION(version,resultlen,ierror)
+ CHARACTER (LEN=*) version
INTEGER resultlen
INTEGER ierror
- END SUBROUTINE MPI_ERROR_STRING
-
- SUBROUTINE MPI_OP_COMMUTATIVE(op,commute,ierror)
- INTEGER op
- LOGICAL commute
- INTEGER ierror
- END SUBROUTINE MPI_OP_COMMUTATIVE
+ END SUBROUTINE MPI_GET_LIBRARY_VERSION
- SUBROUTINE MPI_GRAPH_MAP(comm,nnodes,indx,edges,newrank,ierror)
- INTEGER comm
- INTEGER nnodes
- INTEGER indx(*)
- INTEGER edges(*)
- INTEGER newrank
+ SUBROUTINE MPI_PUBLISH_NAME(service_name,info,port_name,ierror)
+ CHARACTER (LEN=*) service_name
+ INTEGER info
+ CHARACTER (LEN=*) port_name
INTEGER ierror
- END SUBROUTINE MPI_GRAPH_MAP
+ END SUBROUTINE MPI_PUBLISH_NAME
- SUBROUTINE MPI_COMM_GROUP(comm,group,ierror)
- INTEGER comm
- INTEGER group
+ SUBROUTINE MPI_WIN_FLUSH(rank,win,ierror)
+ INTEGER rank
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_COMM_GROUP
+ END SUBROUTINE MPI_WIN_FLUSH
SUBROUTINE MPI_TYPE_SIZE(datatype,size,ierror)
INTEGER datatype
@@ -1116,152 +1068,212 @@
INTEGER ierror
END SUBROUTINE MPI_TYPE_SIZE
- SUBROUTINE MPI_COMM_GET_NAME(comm,comm_name,resultlen,ierror)
+ SUBROUTINE MPI_COMM_SPLIT(comm,color,key,newcomm,ierror)
INTEGER comm
- CHARACTER (LEN=*) comm_name
- INTEGER resultlen
+ INTEGER color
+ INTEGER key
+ INTEGER newcomm
INTEGER ierror
- END SUBROUTINE MPI_COMM_GET_NAME
+ END SUBROUTINE MPI_COMM_SPLIT
- SUBROUTINE MPI_TYPE_GET_ENVELOPE(datatype,num_integers,num_addresses,&
- num_datatypes,combiner,ierror)
- INTEGER datatype
- INTEGER num_integers
- INTEGER num_addresses
- INTEGER num_datatypes
- INTEGER combiner
+ SUBROUTINE MPI_ERRHANDLER_FREE(errhandler,ierror)
+ INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_TYPE_GET_ENVELOPE
+ END SUBROUTINE MPI_ERRHANDLER_FREE
- SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT_X(datatype,lb,extent,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND
- INTEGER datatype
- INTEGER(KIND=MPI_COUNT_KIND) lb
- INTEGER(KIND=MPI_COUNT_KIND) extent
+ SUBROUTINE MPI_OP_CREATE(user_fn,commute,op,ierror)
+ EXTERNAL user_fn
+ LOGICAL commute
+ INTEGER op
INTEGER ierror
- END SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT_X
+ END SUBROUTINE MPI_OP_CREATE
- SUBROUTINE MPI_STATUS_SET_ELEMENTS(status,datatype,count,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER datatype
- INTEGER count
+ SUBROUTINE MPI_COMM_IDUP(comm,newcomm,request,ierror)
+ INTEGER comm
+ INTEGER newcomm
+ INTEGER request
INTEGER ierror
- END SUBROUTINE MPI_STATUS_SET_ELEMENTS
+ END SUBROUTINE MPI_COMM_IDUP
- SUBROUTINE MPI_WIN_SET_NAME(win,win_name,ierror)
+ SUBROUTINE MPI_WIN_COMPLETE(win,ierror)
INTEGER win
- CHARACTER (LEN=*) win_name
INTEGER ierror
- END SUBROUTINE MPI_WIN_SET_NAME
+ END SUBROUTINE MPI_WIN_COMPLETE
- SUBROUTINE MPI_WIN_CREATE_ERRHANDLER(win_errhandler_fn,errhandler,ierror)
+ SUBROUTINE MPI_FILE_CREATE_ERRHANDLER(file_errhandler_fn,errhandler,&
+ ierror)
INTERFACE
- SUBROUTINE win_errhandler_fn(vv0,vv1)
+ SUBROUTINE file_errhandler_fn(vv0,vv1)
INTEGER vv0,vv1
END SUBROUTINE
END INTERFACE
INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_WIN_CREATE_ERRHANDLER
+ END SUBROUTINE MPI_FILE_CREATE_ERRHANDLER
- SUBROUTINE MPI_INFO_SET(info,key,value,ierror)
- INTEGER info
- CHARACTER (LEN=*) key
- CHARACTER (LEN=*) value
+ SUBROUTINE MPI_WIN_SYNC(win,ierror)
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_INFO_SET
+ END SUBROUTINE MPI_WIN_SYNC
- SUBROUTINE MPI_WIN_GET_NAME(win,win_name,resultlen,ierror)
- INTEGER win
- CHARACTER (LEN=*) win_name
- INTEGER resultlen
+ SUBROUTINE MPI_TOPO_TEST(comm,status,ierror)
+ INTEGER comm
+ INTEGER status
INTEGER ierror
- END SUBROUTINE MPI_WIN_GET_NAME
+ END SUBROUTINE MPI_TOPO_TEST
- SUBROUTINE MPI_START(request,ierror)
- INTEGER request
+ SUBROUTINE MPI_TYPE_HVECTOR(count,blocklength,stride,oldtype,newtype,&
+ ierror)
+ INTEGER count
+ INTEGER blocklength
+ INTEGER stride
+ INTEGER oldtype
+ INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_START
+ END SUBROUTINE MPI_TYPE_HVECTOR
- SUBROUTINE MPI_BARRIER(comm,ierror)
- INTEGER comm
+ SUBROUTINE MPI_WIN_GET_ERRHANDLER(win,errhandler,ierror)
+ INTEGER win
+ INTEGER errhandler
INTEGER ierror
- END SUBROUTINE MPI_BARRIER
+ END SUBROUTINE MPI_WIN_GET_ERRHANDLER
- SUBROUTINE MPI_GET_COUNT(status,datatype,count,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER datatype
- INTEGER count
+ SUBROUTINE MPI_ATTR_DELETE(comm,keyval,ierror)
+ INTEGER comm
+ INTEGER keyval
INTEGER ierror
- END SUBROUTINE MPI_GET_COUNT
+ END SUBROUTINE MPI_ATTR_DELETE
- SUBROUTINE MPI_COMM_DUP(comm,newcomm,ierror)
+ SUBROUTINE MPI_DIST_GRAPH_NEIGHBORS_COUNT(comm,indegree,outdegree,&
+ weighted,ierror)
INTEGER comm
- INTEGER newcomm
+ INTEGER indegree
+ INTEGER outdegree
+ LOGICAL weighted
INTEGER ierror
- END SUBROUTINE MPI_COMM_DUP
+ END SUBROUTINE MPI_DIST_GRAPH_NEIGHBORS_COUNT
- SUBROUTINE MPI_TYPE_DUP(oldtype,newtype,ierror)
+ SUBROUTINE MPI_GROUP_INCL(group,n,ranks,newgroup,ierror)
+ INTEGER group
+ INTEGER n
+ INTEGER ranks(*)
+ INTEGER newgroup
+ INTEGER ierror
+ END SUBROUTINE MPI_GROUP_INCL
+
+ SUBROUTINE MPI_TYPE_CREATE_DARRAY(size,rank,ndims,array_of_gsizes,&
+ array_of_distribs,array_of_dargs,array_of_psizes,order,&
+ oldtype,newtype,ierror)
+ INTEGER size
+ INTEGER rank
+ INTEGER ndims
+ INTEGER array_of_gsizes(*)
+ INTEGER array_of_distribs(*)
+ INTEGER array_of_dargs(*)
+ INTEGER array_of_psizes(*)
+ INTEGER order
INTEGER oldtype
INTEGER newtype
INTEGER ierror
- END SUBROUTINE MPI_TYPE_DUP
+ END SUBROUTINE MPI_TYPE_CREATE_DARRAY
- SUBROUTINE MPI_COMM_GET_PARENT(parent,ierror)
- INTEGER parent
+ SUBROUTINE MPI_PACK_SIZE(incount,datatype,comm,size,ierror)
+ INTEGER incount
+ INTEGER datatype
+ INTEGER comm
+ INTEGER size
INTEGER ierror
- END SUBROUTINE MPI_COMM_GET_PARENT
+ END SUBROUTINE MPI_PACK_SIZE
- SUBROUTINE MPI_TYPE_LB(datatype,displacement,ierror)
- INTEGER datatype
- INTEGER displacement
+ SUBROUTINE MPI_IMPROBE(source,tag,comm,flag,message,status,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER source
+ INTEGER tag
+ INTEGER comm
+ LOGICAL flag
+ INTEGER message
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- END SUBROUTINE MPI_TYPE_LB
+ END SUBROUTINE MPI_IMPROBE
- SUBROUTINE MPI_ADD_ERROR_STRING(errorcode,string,ierror)
- INTEGER errorcode
- CHARACTER (LEN=*) string
+ SUBROUTINE MPI_WIN_UNLOCK_ALL(win,ierror)
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_ADD_ERROR_STRING
+ END SUBROUTINE MPI_WIN_UNLOCK_ALL
- SUBROUTINE MPI_COMM_ACCEPT(port_name,info,root,comm,newcomm,ierror)
- CHARACTER (LEN=*) port_name
- INTEGER info
- INTEGER root
+ SUBROUTINE MPI_WAIT(request,status,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
+ INTEGER request
+ INTEGER status(MPI_STATUS_SIZE)
+ INTEGER ierror
+ END SUBROUTINE MPI_WAIT
+
+ SUBROUTINE MPI_CARTDIM_GET(comm,ndims,ierror)
INTEGER comm
- INTEGER newcomm
+ INTEGER ndims
INTEGER ierror
- END SUBROUTINE MPI_COMM_ACCEPT
+ END SUBROUTINE MPI_CARTDIM_GET
- SUBROUTINE MPI_UNPUBLISH_NAME(service_name,info,port_name,ierror)
- CHARACTER (LEN=*) service_name
+ SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT_X(datatype,lb,extent,ierror)
+ USE MPI_CONSTANTS,ONLY:MPI_COUNT_KIND
+ INTEGER datatype
+ INTEGER(KIND=MPI_COUNT_KIND) lb
+ INTEGER(KIND=MPI_COUNT_KIND) extent
+ INTEGER ierror
+ END SUBROUTINE MPI_TYPE_GET_TRUE_EXTENT_X
+
+ SUBROUTINE MPI_WIN_DELETE_ATTR(win,win_keyval,ierror)
+ INTEGER win
+ INTEGER win_keyval
+ INTEGER ierror
+ END SUBROUTINE MPI_WIN_DELETE_ATTR
+
+ SUBROUTINE MPI_OPEN_PORT(info,port_name,ierror)
INTEGER info
CHARACTER (LEN=*) port_name
INTEGER ierror
- END SUBROUTINE MPI_UNPUBLISH_NAME
+ END SUBROUTINE MPI_OPEN_PORT
- SUBROUTINE MPI_COMM_REMOTE_SIZE(comm,size,ierror)
+ SUBROUTINE MPI_TYPE_GET_ENVELOPE(datatype,num_integers,num_addresses,&
+ num_datatypes,combiner,ierror)
+ INTEGER datatype
+ INTEGER num_integers
+ INTEGER num_addresses
+ INTEGER num_datatypes
+ INTEGER combiner
+ INTEGER ierror
+ END SUBROUTINE MPI_TYPE_GET_ENVELOPE
+
+ SUBROUTINE MPI_COMM_SET_INFO(comm,info,ierror)
INTEGER comm
- INTEGER size
+ INTEGER info
INTEGER ierror
- END SUBROUTINE MPI_COMM_REMOTE_SIZE
+ END SUBROUTINE MPI_COMM_SET_INFO
- SUBROUTINE MPI_WAIT(request,status,ierror)
- USE MPI_CONSTANTS,ONLY:MPI_STATUS_SIZE
- INTEGER request
- INTEGER status(MPI_STATUS_SIZE)
+ SUBROUTINE MPI_WIN_FLUSH_LOCAL(rank,win,ierror)
+ INTEGER rank
+ INTEGER win
INTEGER ierror
- END SUBROUTINE MPI_WAIT
+ END SUBROUTINE MPI_WIN_FLUSH_LOCAL
- SUBROUTINE MPI_PACK_SIZE(incount,datatype,comm,size,ierror)
- INTEGER incount
- INTEGER datatype
+ SUBROUTINE MPI_TYPE_CREATE_SUBARRAY(ndims,array_of_sizes,&
+ array_of_subsizes,array_of_starts,order,oldtype,newtype,&
+ ierror)
+ INTEGER ndims
+ INTEGER array_of_sizes(*)
+ INTEGER array_of_subsizes(*)
+ INTEGER array_of_starts(*)
+ INTEGER order
+ INTEGER oldtype
+ INTEGER newtype
+ INTEGER ierror
+ END SUBROUTINE MPI_TYPE_CREATE_SUBARRAY
+
+ SUBROUTINE MPI_COMM_SET_NAME(comm,comm_name,ierror)
INTEGER comm
- INTEGER size
+ CHARACTER (LEN=*) comm_name
INTEGER ierror
- END SUBROUTINE MPI_PACK_SIZE
+ END SUBROUTINE MPI_COMM_SET_NAME
SUBROUTINE MPI_COMM_CREATE(comm,group,newcomm,ierror)
INTEGER comm
@@ -1270,18 +1282,6 @@
INTEGER ierror
END SUBROUTINE MPI_COMM_CREATE
- SUBROUTINE MPI_WIN_FENCE(assert,win,ierror)
- INTEGER assert
- INTEGER win
- INTEGER ierror
- END SUBROUTINE MPI_WIN_FENCE
-
- SUBROUTINE MPI_INFO_DELETE(info,key,ierror)
- INTEGER info
- CHARACTER (LEN=*) key
- INTEGER ierror
- END SUBROUTINE MPI_INFO_DELETE
-
SUBROUTINE MPI_INIT(ierror)
INTEGER ierror
diff --git a/src/binding/fortran/use_mpi/mpi_constants.f90.in b/src/binding/fortran/use_mpi/mpi_constants.f90.in
index d5eee19..5f1f4f8 100644
--- a/src/binding/fortran/use_mpi/mpi_constants.f90.in
+++ b/src/binding/fortran/use_mpi/mpi_constants.f90.in
@@ -10,30 +10,30 @@
INTEGER :: count_lo
INTEGER :: count_hi_and_cancelled
END TYPE MPI_Status
- TYPE :: MPI_Group
+ TYPE :: MPI_Message
SEQUENCE
INTEGER :: MPI_VAL
- END TYPE MPI_Group
+ END TYPE MPI_Message
TYPE :: MPI_Info
SEQUENCE
INTEGER :: MPI_VAL
END TYPE MPI_Info
- TYPE :: MPI_Message
- SEQUENCE
- INTEGER :: MPI_VAL
- END TYPE MPI_Message
TYPE :: MPI_Win
SEQUENCE
INTEGER :: MPI_VAL
END TYPE MPI_Win
- TYPE :: MPI_Datatype
+ TYPE :: MPI_Group
SEQUENCE
INTEGER :: MPI_VAL
- END TYPE MPI_Datatype
+ END TYPE MPI_Group
TYPE :: MPI_Request
SEQUENCE
INTEGER :: MPI_VAL
END TYPE MPI_Request
+ TYPE :: MPI_Datatype
+ SEQUENCE
+ INTEGER :: MPI_VAL
+ END TYPE MPI_Datatype
TYPE :: MPI_File
SEQUENCE
INTEGER :: MPI_VAL
@@ -51,46 +51,30 @@
INTEGER :: MPI_VAL
END TYPE MPI_Op
INTERFACE OPERATOR(.EQ.)
- MODULE PROCEDURE groupeq
- MODULE PROCEDURE infoeq
MODULE PROCEDURE messageeq
+ MODULE PROCEDURE infoeq
MODULE PROCEDURE wineq
- MODULE PROCEDURE datatypeeq
+ MODULE PROCEDURE groupeq
MODULE PROCEDURE requesteq
+ MODULE PROCEDURE datatypeeq
MODULE PROCEDURE fileeq
MODULE PROCEDURE errhandlereq
MODULE PROCEDURE commeq
MODULE PROCEDURE opeq
END INTERFACE
INTERFACE OPERATOR(.NE.)
- MODULE PROCEDURE groupneq
- MODULE PROCEDURE infoneq
MODULE PROCEDURE messageneq
+ MODULE PROCEDURE infoneq
MODULE PROCEDURE winneq
- MODULE PROCEDURE datatypeneq
+ MODULE PROCEDURE groupneq
MODULE PROCEDURE requestneq
+ MODULE PROCEDURE datatypeneq
MODULE PROCEDURE fileneq
MODULE PROCEDURE errhandlerneq
MODULE PROCEDURE commneq
MODULE PROCEDURE opneq
END INTERFACE
CONTAINS
- LOGICAL FUNCTION groupeq(lhs,rhs)
- TYPE(MPI_Group), INTENT(IN) :: lhs, rhs
- groupeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
- END FUNCTION groupeq
- LOGICAL FUNCTION groupneq(lhs,rhs)
- TYPE(MPI_Group), INTENT(IN) :: lhs, rhs
- groupneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
- END FUNCTION groupneq
- LOGICAL FUNCTION infoeq(lhs,rhs)
- TYPE(MPI_Info), INTENT(IN) :: lhs, rhs
- infoeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
- END FUNCTION infoeq
- LOGICAL FUNCTION infoneq(lhs,rhs)
- TYPE(MPI_Info), INTENT(IN) :: lhs, rhs
- infoneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
- END FUNCTION infoneq
LOGICAL FUNCTION messageeq(lhs,rhs)
TYPE(MPI_Message), INTENT(IN) :: lhs, rhs
messageeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
@@ -99,6 +83,14 @@
TYPE(MPI_Message), INTENT(IN) :: lhs, rhs
messageneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
END FUNCTION messageneq
+ LOGICAL FUNCTION infoeq(lhs,rhs)
+ TYPE(MPI_Info), INTENT(IN) :: lhs, rhs
+ infoeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
+ END FUNCTION infoeq
+ LOGICAL FUNCTION infoneq(lhs,rhs)
+ TYPE(MPI_Info), INTENT(IN) :: lhs, rhs
+ infoneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
+ END FUNCTION infoneq
LOGICAL FUNCTION wineq(lhs,rhs)
TYPE(MPI_Win), INTENT(IN) :: lhs, rhs
wineq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
@@ -107,14 +99,14 @@
TYPE(MPI_Win), INTENT(IN) :: lhs, rhs
winneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
END FUNCTION winneq
- LOGICAL FUNCTION datatypeeq(lhs,rhs)
- TYPE(MPI_Datatype), INTENT(IN) :: lhs, rhs
- datatypeeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
- END FUNCTION datatypeeq
- LOGICAL FUNCTION datatypeneq(lhs,rhs)
- TYPE(MPI_Datatype), INTENT(IN) :: lhs, rhs
- datatypeneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
- END FUNCTION datatypeneq
+ LOGICAL FUNCTION groupeq(lhs,rhs)
+ TYPE(MPI_Group), INTENT(IN) :: lhs, rhs
+ groupeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
+ END FUNCTION groupeq
+ LOGICAL FUNCTION groupneq(lhs,rhs)
+ TYPE(MPI_Group), INTENT(IN) :: lhs, rhs
+ groupneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
+ END FUNCTION groupneq
LOGICAL FUNCTION requesteq(lhs,rhs)
TYPE(MPI_Request), INTENT(IN) :: lhs, rhs
requesteq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
@@ -123,6 +115,14 @@
TYPE(MPI_Request), INTENT(IN) :: lhs, rhs
requestneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
END FUNCTION requestneq
+ LOGICAL FUNCTION datatypeeq(lhs,rhs)
+ TYPE(MPI_Datatype), INTENT(IN) :: lhs, rhs
+ datatypeeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
+ END FUNCTION datatypeeq
+ LOGICAL FUNCTION datatypeneq(lhs,rhs)
+ TYPE(MPI_Datatype), INTENT(IN) :: lhs, rhs
+ datatypeneq = lhs%MPI_VAL .NE. rhs%MPI_VAL
+ END FUNCTION datatypeneq
LOGICAL FUNCTION fileeq(lhs,rhs)
TYPE(MPI_File), INTENT(IN) :: lhs, rhs
fileeq = lhs%MPI_VAL .EQ. rhs%MPI_VAL
diff --git a/src/binding/fortran/use_mpi/mpi_t1.f90 b/src/binding/fortran/use_mpi/mpi_t1.f90
index 0727de8..38223f3 100644
--- a/src/binding/fortran/use_mpi/mpi_t1.f90
+++ b/src/binding/fortran/use_mpi/mpi_t1.f90
@@ -4,685 +4,512 @@
MODULE MPI_t1_s
IMPLICIT NONE
PRIVATE
- PUBLIC :: MPI_INEIGHBOR_ALLTOALL
- INTERFACE MPI_INEIGHBOR_ALLTOALL
- MODULE PROCEDURE MPI_INEIGHBOR_ALLTOALL_T
- END INTERFACE MPI_INEIGHBOR_ALLTOALL
-
- PUBLIC :: MPI_RECV
- INTERFACE MPI_RECV
- MODULE PROCEDURE MPI_RECV_T
- END INTERFACE MPI_RECV
-
- PUBLIC :: MPI_ATTR_PUT
- INTERFACE MPI_ATTR_PUT
- MODULE PROCEDURE MPI_ATTR_PUT_T
- END INTERFACE MPI_ATTR_PUT
-
- PUBLIC :: MPI_IALLGATHER
- INTERFACE MPI_IALLGATHER
- MODULE PROCEDURE MPI_IALLGATHER_T
- END INTERFACE MPI_IALLGATHER
-
- PUBLIC :: MPI_SSEND_INIT
- INTERFACE MPI_SSEND_INIT
- MODULE PROCEDURE MPI_SSEND_INIT_T
- END INTERFACE MPI_SSEND_INIT
-
- PUBLIC :: MPI_BUFFER_DETACH
- INTERFACE MPI_BUFFER_DETACH
- MODULE PROCEDURE MPI_BUFFER_DETACH_T
- END INTERFACE MPI_BUFFER_DETACH
-
- PUBLIC :: MPI_ALLTOALLW
- INTERFACE MPI_ALLTOALLW
- MODULE PROCEDURE MPI_ALLTOALLW_T
- END INTERFACE MPI_ALLTOALLW
-
- PUBLIC :: MPI_SEND_INIT
- INTERFACE MPI_SEND_INIT
- MODULE PROCEDURE MPI_SEND_INIT_T
- END INTERFACE MPI_SEND_INIT
-
- PUBLIC :: MPI_UNPACK
- INTERFACE MPI_UNPACK
- MODULE PROCEDURE MPI_UNPACK_T
- END INTERFACE MPI_UNPACK
-
- PUBLIC :: MPI_WIN_ALLOCATE
- INTERFACE MPI_WIN_ALLOCATE
- MODULE PROCEDURE MPI_WIN_ALLOCATE_T
- END INTERFACE MPI_WIN_ALLOCATE
-
- PUBLIC :: MPI_IALLTOALL
- INTERFACE MPI_IALLTOALL
- MODULE PROCEDURE MPI_IALLTOALL_T
- END INTERFACE MPI_IALLTOALL
-
- PUBLIC :: MPI_RGET
- INTERFACE MPI_RGET
- MODULE PROCEDURE MPI_RGET_T
- END INTERFACE MPI_RGET
-
PUBLIC :: MPI_PACK_EXTERNAL
INTERFACE MPI_PACK_EXTERNAL
MODULE PROCEDURE MPI_PACK_EXTERNAL_T
END INTERFACE MPI_PACK_EXTERNAL
- PUBLIC :: MPI_WIN_ALLOCATE_SHARED
- INTERFACE MPI_WIN_ALLOCATE_SHARED
- MODULE PROCEDURE MPI_WIN_ALLOCATE_SHARED_T
- END INTERFACE MPI_WIN_ALLOCATE_SHARED
-
- PUBLIC :: MPI_PACK
- INTERFACE MPI_PACK
- MODULE PROCEDURE MPI_PACK_T
- END INTERFACE MPI_PACK
-
- PUBLIC :: MPI_IALLTOALLV
- INTERFACE MPI_IALLTOALLV
- MODULE PROCEDURE MPI_IALLTOALLV_T
- END INTERFACE MPI_IALLTOALLV
-
- PUBLIC :: MPI_ALLGATHERV
- INTERFACE MPI_ALLGATHERV
- MODULE PROCEDURE MPI_ALLGATHERV_T
- END INTERFACE MPI_ALLGATHERV
-
- PUBLIC :: MPI_COMM_CREATE_KEYVAL
- INTERFACE MPI_COMM_CREATE_KEYVAL
- MODULE PROCEDURE MPI_COMM_CREATE_KEYVAL_T
- END INTERFACE MPI_COMM_CREATE_KEYVAL
+ PUBLIC :: MPI_GET_ADDRESS
+ INTERFACE MPI_GET_ADDRESS
+ MODULE PROCEDURE MPI_GET_ADDRESS_T
+ END INTERFACE MPI_GET_ADDRESS
- PUBLIC :: MPI_NEIGHBOR_ALLTOALL
- INTERFACE MPI_NEIGHBOR_ALLTOALL
- MODULE PROCEDURE MPI_NEIGHBOR_ALLTOALL_T
- END INTERFACE MPI_NEIGHBOR_ALLTOALL
+ PUBLIC :: MPI_UNPACK
+ INTERFACE MPI_UNPACK
+ MODULE PROCEDURE MPI_UNPACK_T
+ END INTERFACE MPI_UNPACK
- PUBLIC :: MPI_COMPARE_AND_SWAP
- INTERFACE MPI_COMPARE_AND_SWAP
- MODULE PROCEDURE MPI_COMPARE_AND_SWAP_T
- END INTERFACE MPI_COMPARE_AND_SWAP
+ PUBLIC :: MPI_ALLTOALL
+ INTERFACE MPI_ALLTOALL
+ MODULE PROCEDURE MPI_ALLTOALL_T
+ END INTERFACE MPI_ALLTOALL
- PUBLIC :: MPI_IBCAST
- INTERFACE MPI_IBCAST
- MODULE PROCEDURE MPI_IBCAST_T
- END INTERFACE MPI_IBCAST
+ PUBLIC :: MPI_IRECV
+ INTERFACE MPI_IRECV
+ MODULE PROCEDURE MPI_IRECV_T
+ END INTERFACE MPI_IRECV
- PUBLIC :: MPI_GET
- INTERFACE MPI_GET
- MODULE PROCEDURE MPI_GET_T
- END INTERFACE MPI_GET
+ PUBLIC :: MPI_ALLREDUCE
+ INTERFACE MPI_ALLREDUCE
+ MODULE PROCEDURE MPI_ALLREDUCE_T
+ END INTERFACE MPI_ALLREDUCE
PUBLIC :: MPI_WIN_SHARED_QUERY
INTERFACE MPI_WIN_SHARED_QUERY
MODULE PROCEDURE MPI_WIN_SHARED_QUERY_T
END INTERFACE MPI_WIN_SHARED_QUERY
- PUBLIC :: MPI_RACCUMULATE
- INTERFACE MPI_RACCUMULATE
- MODULE PROCEDURE MPI_RACCUMULATE_T
- END INTERFACE MPI_RACCUMULATE
+ PUBLIC :: MPI_GET_ACCUMULATE
+ INTERFACE MPI_GET_ACCUMULATE
+ MODULE PROCEDURE MPI_GET_ACCUMULATE_T
+ END INTERFACE MPI_GET_ACCUMULATE
- PUBLIC :: MPI_SCATTER
- INTERFACE MPI_SCATTER
- MODULE PROCEDURE MPI_SCATTER_T
- END INTERFACE MPI_SCATTER
+ PUBLIC :: MPI_BCAST
+ INTERFACE MPI_BCAST
+ MODULE PROCEDURE MPI_BCAST_T
+ END INTERFACE MPI_BCAST
+
+ PUBLIC :: MPI_COMM_GET_ATTR
+ INTERFACE MPI_COMM_GET_ATTR
+ MODULE PROCEDURE MPI_COMM_GET_ATTR_T
+ END INTERFACE MPI_COMM_GET_ATTR
+
+ PUBLIC :: MPI_IBSEND
+ INTERFACE MPI_IBSEND
+ MODULE PROCEDURE MPI_IBSEND_T
+ END INTERFACE MPI_IBSEND
+
+ PUBLIC :: MPI_REDUCE_SCATTER
+ INTERFACE MPI_REDUCE_SCATTER
+ MODULE PROCEDURE MPI_REDUCE_SCATTER_T
+ END INTERFACE MPI_REDUCE_SCATTER
PUBLIC :: MPI_GATHERV
INTERFACE MPI_GATHERV
MODULE PROCEDURE MPI_GATHERV_T
END INTERFACE MPI_GATHERV
- PUBLIC :: MPI_RSEND
- INTERFACE MPI_RSEND
- MODULE PROCEDURE MPI_RSEND_T
- END INTERFACE MPI_RSEND
+ PUBLIC :: MPI_INEIGHBOR_ALLTOALLV
+ INTERFACE MPI_INEIGHBOR_ALLTOALLV
+ MODULE PROCEDURE MPI_INEIGHBOR_ALLTOALLV_T
+ END INTERFACE MPI_INEIGHBOR_ALLTOALLV
- PUBLIC :: MPI_COMM_GET_ATTR
- INTERFACE MPI_COMM_GET_ATTR
- MODULE PROCEDURE MPI_COMM_GET_ATTR_T
- END INTERFACE MPI_COMM_GET_ATTR
+ PUBLIC :: MPI_IALLTOALLW
+ INTERFACE MPI_IALLTOALLW
+ MODULE PROCEDURE MPI_IALLTOALLW_T
+ END INTERFACE MPI_IALLTOALLW
- PUBLIC :: MPI_IGATHER
- INTERFACE MPI_IGATHER
- MODULE PROCEDURE MPI_IGATHER_T
- END INTERFACE MPI_IGATHER
+ PUBLIC :: MPI_BUFFER_ATTACH
+ INTERFACE MPI_BUFFER_ATTACH
+ MODULE PROCEDURE MPI_BUFFER_ATTACH_T
+ END INTERFACE MPI_BUFFER_ATTACH
- PUBLIC :: MPI_UNPACK_EXTERNAL
- INTERFACE MPI_UNPACK_EXTERNAL
- MODULE PROCEDURE MPI_UNPACK_EXTERNAL_T
- END INTERFACE MPI_UNPACK_EXTERNAL
+ PUBLIC :: MPI_IALLTOALLV
+ INTERFACE MPI_IALLTOALLV
+ MODULE PROCEDURE MPI_IALLTOALLV_T
+ END INTERFACE MPI_IALLTOALLV
- PUBLIC :: MPI_FREE_MEM
- INTERFACE MPI_FREE_MEM
- MODULE PROCEDURE MPI_FREE_MEM_T
- END INTERFACE MPI_FREE_MEM
+ PUBLIC :: MPI_BUFFER_DETACH
+ INTERFACE MPI_BUFFER_DETACH
+ MODULE PROCEDURE MPI_BUFFER_DETACH_T
+ END INTERFACE MPI_BUFFER_DETACH
- PUBLIC :: MPI_RECV_INIT
- INTERFACE MPI_RECV_INIT
- MODULE PROCEDURE MPI_RECV_INIT_T
- END INTERFACE MPI_RECV_INIT
+ PUBLIC :: MPI_INEIGHBOR_ALLGATHERV
+ INTERFACE MPI_INEIGHBOR_ALLGATHERV
+ MODULE PROCEDURE MPI_INEIGHBOR_ALLGATHERV_T
+ END INTERFACE MPI_INEIGHBOR_ALLGATHERV
- PUBLIC :: MPI_IGATHERV
- INTERFACE MPI_IGATHERV
- MODULE PROCEDURE MPI_IGATHERV_T
- END INTERFACE MPI_IGATHERV
+ PUBLIC :: MPI_WIN_ALLOCATE_SHARED
+ INTERFACE MPI_WIN_ALLOCATE_SHARED
+ MODULE PROCEDURE MPI_WIN_ALLOCATE_SHARED_T
+ END INTERFACE MPI_WIN_ALLOCATE_SHARED
PUBLIC :: MPI_ISCATTERV
INTERFACE MPI_ISCATTERV
MODULE PROCEDURE MPI_ISCATTERV_T
END INTERFACE MPI_ISCATTERV
- PUBLIC :: MPI_BSEND
- INTERFACE MPI_BSEND
- MODULE PROCEDURE MPI_BSEND_T
- END INTERFACE MPI_BSEND
+ PUBLIC :: MPI_IALLREDUCE
+ INTERFACE MPI_IALLREDUCE
+ MODULE PROCEDURE MPI_IALLREDUCE_T
+ END INTERFACE MPI_IALLREDUCE
- PUBLIC :: MPI_IREDUCE
- INTERFACE MPI_IREDUCE
- MODULE PROCEDURE MPI_IREDUCE_T
- END INTERFACE MPI_IREDUCE
+ PUBLIC :: MPI_PACK
+ INTERFACE MPI_PACK
+ MODULE PROCEDURE MPI_PACK_T
+ END INTERFACE MPI_PACK
- PUBLIC :: MPI_GREQUEST_START
- INTERFACE MPI_GREQUEST_START
- MODULE PROCEDURE MPI_GREQUEST_START_T
- END INTERFACE MPI_GREQUEST_START
+ PUBLIC :: MPI_WIN_CREATE_KEYVAL
+ INTERFACE MPI_WIN_CREATE_KEYVAL
+ MODULE PROCEDURE MPI_WIN_CREATE_KEYVAL_T
+ END INTERFACE MPI_WIN_CREATE_KEYVAL
- PUBLIC :: MPI_BCAST
- INTERFACE MPI_BCAST
- MODULE PROCEDURE MPI_BCAST_T
- END INTERFACE MPI_BCAST
+ PUBLIC :: MPI_UNPACK_EXTERNAL
+ INTERFACE MPI_UNPACK_EXTERNAL
+ MODULE PROCEDURE MPI_UNPACK_EXTERNAL_T
+ END INTERFACE MPI_UNPACK_EXTERNAL
- PUBLIC :: MPI_SENDRECV
- INTERFACE MPI_SENDRECV
- MODULE PROCEDURE MPI_SENDRECV_T
- END INTERFACE MPI_SENDRECV
+ PUBLIC :: MPI_FREE_MEM
+ INTERFACE MPI_FREE_MEM
+ MODULE PROCEDURE MPI_FREE_MEM_T
+ END INTERFACE MPI_FREE_MEM
PUBLIC :: MPI_TYPE_SET_ATTR
INTERFACE MPI_TYPE_SET_ATTR
MODULE PROCEDURE MPI_TYPE_SET_ATTR_T
END INTERFACE MPI_TYPE_SET_ATTR
- PUBLIC :: MPI_FETCH_AND_OP
- INTERFACE MPI_FETCH_AND_OP
- MODULE PROCEDURE MPI_FETCH_AND_OP_T
- END INTERFACE MPI_FETCH_AND_OP
-
PUBLIC :: MPI_RPUT
INTERFACE MPI_RPUT
MODULE PROCEDURE MPI_RPUT_T
END INTERFACE MPI_RPUT
- PUBLIC :: MPI_ALLTOALL
- INTERFACE MPI_ALLTOALL
- MODULE PROCEDURE MPI_ALLTOALL_T
- END INTERFACE MPI_ALLTOALL
+ PUBLIC :: MPI_RGET_ACCUMULATE
+ INTERFACE MPI_RGET_ACCUMULATE
+ MODULE PROCEDURE MPI_RGET_ACCUMULATE_T
+ END INTERFACE MPI_RGET_ACCUMULATE
- PUBLIC :: MPI_INEIGHBOR_ALLTOALLV
- INTERFACE MPI_INEIGHBOR_ALLTOALLV
- MODULE PROCEDURE MPI_INEIGHBOR_ALLTOALLV_T
- END INTERFACE MPI_INEIGHBOR_ALLTOALLV
+ PUBLIC :: MPI_NEIGHBOR_ALLTOALL
+ INTERFACE MPI_NEIGHBOR_ALLTOALL
+ MODULE PROCEDURE MPI_NEIGHBOR_ALLTOALL_T
+ END INTERFACE MPI_NEIGHBOR_ALLTOALL
- PUBLIC :: MPI_NEIGHBOR_ALLTOALLV
- INTERFACE MPI_NEIGHBOR_ALLTOALLV
- MODULE PROCEDURE MPI_NEIGHBOR_ALLTOALLV_T
- END INTERFACE MPI_NEIGHBOR_ALLTOALLV
+ PUBLIC :: MPI_GATHER
+ INTERFACE MPI_GATHER
+ MODULE PROCEDURE MPI_GATHER_T
+ END INTERFACE MPI_GATHER
- PUBLIC :: MPI_INEIGHBOR_ALLTOALLW
- INTERFACE MPI_INEIGHBOR_ALLTOALLW
- MODULE PROCEDURE MPI_INEIGHBOR_ALLTOALLW_T
- END INTERFACE MPI_INEIGHBOR_ALLTOALLW
+ PUBLIC :: MPI_SSEND_INIT
+ INTERFACE MPI_SSEND_INIT
+ MODULE PROCEDURE MPI_SSEND_INIT_T
+ END INTERFACE MPI_SSEND_INIT
- PUBLIC :: MPI_RSEND_INIT
- INTERFACE MPI_RSEND_INIT
- MODULE PROCEDURE MPI_RSEND_INIT_T
- END INTERFACE MPI_RSEND_INIT
+ PUBLIC :: MPI_WIN_ATTACH
+ INTERFACE MPI_WIN_ATTACH
+ MODULE PROCEDURE MPI_WIN_ATTACH_T
+ END INTERFACE MPI_WIN_ATTACH
- PUBLIC :: MPI_COMM_SET_ATTR
- INTERFACE MPI_COMM_SET_ATTR
- MODULE PROCEDURE MPI_COMM_SET_ATTR_T
- END INTERFACE MPI_COMM_SET_ATTR
+ PUBLIC :: MPI_ISEND
+ INTERFACE MPI_ISEND
+ MODULE PROCEDURE MPI_ISEND_T
+ END INTERFACE MPI_ISEND
- PUBLIC :: MPI_TYPE_GET_ATTR
- INTERFACE MPI_TYPE_GET_ATTR
- MODULE PROCEDURE MPI_TYPE_GET_ATTR_T
- END INTERFACE MPI_TYPE_GET_ATTR
+ PUBLIC :: MPI_MRECV
+ INTERFACE MPI_MRECV
+ MODULE PROCEDURE MPI_MRECV_T
+ END INTERFACE MPI_MRECV
- PUBLIC :: MPI_ALLGATHER
- INTERFACE MPI_ALLGATHER
- MODULE PROCEDURE MPI_ALLGATHER_T
- END INTERFACE MPI_ALLGATHER
+ PUBLIC :: MPI_NEIGHBOR_ALLGATHERV
+ INTERFACE MPI_NEIGHBOR_ALLGATHERV
+ MODULE PROCEDURE MPI_NEIGHBOR_ALLGATHERV_T
+ END INTERFACE MPI_NEIGHBOR_ALLGATHERV
- PUBLIC :: MPI_BSEND_INIT
- INTERFACE MPI_BSEND_INIT
- MODULE PROCEDURE MPI_BSEND_INIT_T
- END INTERFACE MPI_BSEND_INIT
+ PUBLIC :: MPI_SSEND
+ INTERFACE MPI_SSEND
+ MODULE PROCEDURE MPI_SSEND_T
+ END INTERFACE MPI_SSEND
- PUBLIC :: MPI_REDUCE_SCATTER_BLOCK
- INTERFACE MPI_REDUCE_SCATTER_BLOCK
- MODULE PROCEDURE MPI_REDUCE_SCATTER_BLOCK_T
- END INTERFACE MPI_REDUCE_SCATTER_BLOCK
+ PUBLIC :: MPI_GREQUEST_START
+ INTERFACE MPI_GREQUEST_START
+ MODULE PROCEDURE MPI_GREQUEST_START_T
+ END INTERFACE MPI_GREQUEST_START
+
+ PUBLIC :: MPI_EXSCAN
+ INTERFACE MPI_EXSCAN
+ MODULE PROCEDURE MPI_EXSCAN_T
+ END INTERFACE MPI_EXSCAN
PUBLIC :: MPI_NEIGHBOR_ALLGATHER
INTERFACE MPI_NEIGHBOR_ALLGATHER
MODULE PROCEDURE MPI_NEIGHBOR_ALLGATHER_T
END INTERFACE MPI_NEIGHBOR_ALLGATHER
- PUBLIC :: MPI_GATHER
- INTERFACE MPI_GATHER
- MODULE PROCEDURE MPI_GATHER_T
- END INTERFACE MPI_GATHER
+ PUBLIC :: MPI_ALLTOALLV
+ INTERFACE MPI_ALLTOALLV
+ MODULE PROCEDURE MPI_ALLTOALLV_T
+ END INTERFACE MPI_ALLTOALLV
- PUBLIC :: MPI_REDUCE
- INTERFACE MPI_REDUCE
- MODULE PROCEDURE MPI_REDUCE_T
- END INTERFACE MPI_REDUCE
+ PUBLIC :: MPI_ATTR_PUT
+ INTERFACE MPI_ATTR_PUT
+ MODULE PROCEDURE MPI_ATTR_PUT_T
+ END INTERFACE MPI_ATTR_PUT
- PUBLIC :: MPI_WIN_CREATE
- INTERFACE MPI_WIN_CREATE
- MODULE PROCEDURE MPI_WIN_CREATE_T
- END INTERFACE MPI_WIN_CREATE
+ PUBLIC :: MPI_KEYVAL_CREATE
+ INTERFACE MPI_KEYVAL_CREATE
+ MODULE PROCEDURE MPI_KEYVAL_CREATE_T
+ END INTERFACE MPI_KEYVAL_CREATE
- PUBLIC :: MPI_SCATTERV
- INTERFACE MPI_SCATTERV
- MODULE PROCEDURE MPI_SCATTERV_T
- END INTERFACE MPI_SCATTERV
+ PUBLIC :: MPI_RECV_INIT
+ INTERFACE MPI_RECV_INIT
+ MODULE PROCEDURE MPI_RECV_INIT_T
+ END INTERFACE MPI_RECV_INIT
- PUBLIC :: MPI_IRSEND
- INTERFACE MPI_IRSEND
- MODULE PROCEDURE MPI_IRSEND_T
- END INTERFACE MPI_IRSEND
+ PUBLIC :: MPI_ISSEND
+ INTERFACE MPI_ISSEND
+ MODULE PROCEDURE MPI_ISSEND_T
+ END INTERFACE MPI_ISSEND
- PUBLIC :: MPI_IREDUCE_SCATTER_BLOCK
- INTERFACE MPI_IREDUCE_SCATTER_BLOCK
- MODULE PROCEDURE MPI_IREDUCE_SCATTER_BLOCK_T
- END INTERFACE MPI_IREDUCE_SCATTER_BLOCK
+ PUBLIC :: MPI_COMPARE_AND_SWAP
+ INTERFACE MPI_COMPARE_AND_SWAP
+ MODULE PROCEDURE MPI_COMPARE_AND_SWAP_T
+ END INTERFACE MPI_COMPARE_AND_SWAP
- PUBLIC :: MPI_ISCAN
- INTERFACE MPI_ISCAN
- MODULE PROCEDURE MPI_ISCAN_T
- END INTERFACE MPI_ISCAN
+ PUBLIC :: MPI_IALLGATHERV
+ INTERFACE MPI_IALLGATHERV
+ MODULE PROCEDURE MPI_IALLGATHERV_T
+ END INTERFACE MPI_IALLGATHERV
PUBLIC :: MPI_TYPE_CREATE_KEYVAL
INTERFACE MPI_TYPE_CREATE_KEYVAL
MODULE PROCEDURE MPI_TYPE_CREATE_KEYVAL_T
END INTERFACE MPI_TYPE_CREATE_KEYVAL
- PUBLIC :: MPI_PUT
- INTERFACE MPI_PUT
- MODULE PROCEDURE MPI_PUT_T
- END INTERFACE MPI_PUT
-
- PUBLIC :: MPI_WIN_SET_ATTR
- INTERFACE MPI_WIN_SET_ATTR
- MODULE PROCEDURE MPI_WIN_SET_ATTR_T
- END INTERFACE MPI_WIN_SET_ATTR
+ PUBLIC :: MPI_ALLTOALLW
+ INTERFACE MPI_ALLTOALLW
+ MODULE PROCEDURE MPI_ALLTOALLW_T
+ END INTERFACE MPI_ALLTOALLW
- PUBLIC :: MPI_EXSCAN
- INTERFACE MPI_EXSCAN
- MODULE PROCEDURE MPI_EXSCAN_T
- END INTERFACE MPI_EXSCAN
+ PUBLIC :: MPI_SENDRECV
+ INTERFACE MPI_SENDRECV
+ MODULE PROCEDURE MPI_SENDRECV_T
+ END INTERFACE MPI_SENDRECV
- PUBLIC :: MPI_ISCATTER
- INTERFACE MPI_ISCATTER
- MODULE PROCEDURE MPI_ISCATTER_T
- END INTERFACE MPI_ISCATTER
+ PUBLIC :: MPI_WIN_DETACH
+ INTERFACE MPI_WIN_DETACH
+ MODULE PROCEDURE MPI_WIN_DETACH_T
+ END INTERFACE MPI_WIN_DETACH
- PUBLIC :: MPI_NEIGHBOR_ALLTOALLW
- INTERFACE MPI_NEIGHBOR_ALLTOALLW
- MODULE PROCEDURE MPI_NEIGHBOR_ALLTOALLW_T
- END INTERFACE MPI_NEIGHBOR_ALLTOALLW
+ PUBLIC :: MPI_BSEND_INIT
+ INTERFACE MPI_BSEND_INIT
+ MODULE PROCEDURE MPI_BSEND_INIT_T
+ END INTERFACE MPI_BSEND_INIT
- PUBLIC :: MPI_ALLREDUCE
- INTERFACE MPI_ALLREDUCE
- MODULE PROCEDURE MPI_ALLREDUCE_T
- END INTERFACE MPI_ALLREDUCE
+ PUBLIC :: MPI_ISCAN
+ INTERFACE MPI_ISCAN
+ MODULE PROCEDURE MPI_ISCAN_T
+ END INTERFACE MPI_ISCAN
PUBLIC :: MPI_WIN_GET_ATTR
INTERFACE MPI_WIN_GET_ATTR
MODULE PROCEDURE MPI_WIN_GET_ATTR_T
END INTERFACE MPI_WIN_GET_ATTR
- PUBLIC :: MPI_ALLTOALLV
- INTERFACE MPI_ALLTOALLV
- MODULE PROCEDURE MPI_ALLTOALLV_T
- END INTERFACE MPI_ALLTOALLV
+ PUBLIC :: MPI_IBCAST
+ INTERFACE MPI_IBCAST
+ MODULE PROCEDURE MPI_IBCAST_T
+ END INTERFACE MPI_IBCAST
- PUBLIC :: MPI_SENDRECV_REPLACE
- INTERFACE MPI_SENDRECV_REPLACE
- MODULE PROCEDURE MPI_SENDRECV_REPLACE_T
- END INTERFACE MPI_SENDRECV_REPLACE
+ PUBLIC :: MPI_COMM_SET_ATTR
+ INTERFACE MPI_COMM_SET_ATTR
+ MODULE PROCEDURE MPI_COMM_SET_ATTR_T
+ END INTERFACE MPI_COMM_SET_ATTR
- PUBLIC :: MPI_WIN_DETACH
- INTERFACE MPI_WIN_DETACH
- MODULE PROCEDURE MPI_WIN_DETACH_T
- END INTERFACE MPI_WIN_DETACH
+ PUBLIC :: MPI_WIN_CREATE
+ INTERFACE MPI_WIN_CREATE
+ MODULE PROCEDURE MPI_WIN_CREATE_T
+ END INTERFACE MPI_WIN_CREATE
PUBLIC :: MPI_INEIGHBOR_ALLGATHER
INTERFACE MPI_INEIGHBOR_ALLGATHER
MODULE PROCEDURE MPI_INEIGHBOR_ALLGATHER_T
END INTERFACE MPI_INEIGHBOR_ALLGATHER
- PUBLIC :: MPI_RGET_ACCUMULATE
- INTERFACE MPI_RGET_ACCUMULATE
- MODULE PROCEDURE MPI_RGET_ACCUMULATE_T
- END INTERFACE MPI_RGET_ACCUMULATE
+ PUBLIC :: MPI_ADDRESS
+ INTERFACE MPI_ADDRESS
+ MODULE PROCEDURE MPI_ADDRESS_T
+ END INTERFACE MPI_ADDRESS
- PUBLIC :: MPI_ISSEND
- INTERFACE MPI_ISSEND
- MODULE PROCEDURE MPI_ISSEND_T
- END INTERFACE MPI_ISSEND
+ PUBLIC :: MPI_ALLOC_MEM
+ INTERFACE MPI_ALLOC_MEM
+ MODULE PROCEDURE MPI_ALLOC_MEM_T
+ END INTERFACE MPI_ALLOC_MEM
- PUBLIC :: MPI_SCAN
- INTERFACE MPI_SCAN
- MODULE PROCEDURE MPI_SCAN_T
- END INTERFACE MPI_SCAN
+ PUBLIC :: MPI_RGET
+ INTERFACE MPI_RGET
+ MODULE PROCEDURE MPI_RGET_T
+ END INTERFACE MPI_RGET
- PUBLIC :: MPI_IBSEND
- INTERFACE MPI_IBSEND
- MODULE PROCEDURE MPI_IBSEND_T
- END INTERFACE MPI_IBSEND
+ PUBLIC :: MPI_WIN_ALLOCATE
+ INTERFACE MPI_WIN_ALLOCATE
+ MODULE PROCEDURE MPI_WIN_ALLOCATE_T
+ END INTERFACE MPI_WIN_ALLOCATE
- PUBLIC :: MPI_MRECV
- INTERFACE MPI_MRECV
- MODULE PROCEDURE MPI_MRECV_T
- END INTERFACE MPI_MRECV
+ PUBLIC :: MPI_RSEND_INIT
+ INTERFACE MPI_RSEND_INIT
+ MODULE PROCEDURE MPI_RSEND_INIT_T
+ END INTERFACE MPI_RSEND_INIT
- PUBLIC :: MPI_KEYVAL_CREATE
- INTERFACE MPI_KEYVAL_CREATE
- MODULE PROCEDURE MPI_KEYVAL_CREATE_T
- END INTERFACE MPI_KEYVAL_CREATE
+ PUBLIC :: MPI_ALLGATHER
+ INTERFACE MPI_ALLGATHER
+ MODULE PROCEDURE MPI_ALLGATHER_T
+ END INTERFACE MPI_ALLGATHER
- PUBLIC :: MPI_IRECV
- INTERFACE MPI_IRECV
- MODULE PROCEDURE MPI_IRECV_T
- END INTERFACE MPI_IRECV
-
- PUBLIC :: MPI_INEIGHBOR_ALLGATHERV
- INTERFACE MPI_INEIGHBOR_ALLGATHERV
- MODULE PROCEDURE MPI_INEIGHBOR_ALLGATHERV_T
- END INTERFACE MPI_INEIGHBOR_ALLGATHERV
+ PUBLIC :: MPI_SENDRECV_REPLACE
+ INTERFACE MPI_SENDRECV_REPLACE
+ MODULE PROCEDURE MPI_SENDRECV_REPLACE_T
+ END INTERFACE MPI_SENDRECV_REPLACE
PUBLIC :: MPI_IREDUCE_SCATTER
INTERFACE MPI_IREDUCE_SCATTER
MODULE PROCEDURE MPI_IREDUCE_SCATTER_T
END INTERFACE MPI_IREDUCE_SCATTER
- PUBLIC :: MPI_ACCUMULATE
- INTERFACE MPI_ACCUMULATE
- MODULE PROCEDURE MPI_ACCUMULATE_T
- END INTERFACE MPI_ACCUMULATE
-
- PUBLIC :: MPI_REDUCE_LOCAL
- INTERFACE MPI_REDUCE_LOCAL
- MODULE PROCEDURE MPI_REDUCE_LOCAL_T
- END INTERFACE MPI_REDUCE_LOCAL
-
- PUBLIC :: MPI_SSEND
- INTERFACE MPI_SSEND
- MODULE PROCEDURE MPI_SSEND_T
- END INTERFACE MPI_SSEND
+ PUBLIC :: MPI_REDUCE
+ INTERFACE MPI_REDUCE
+ MODULE PROCEDURE MPI_REDUCE_T
+ END INTERFACE MPI_REDUCE
- PUBLIC :: MPI_WIN_CREATE_KEYVAL
- INTERFACE MPI_WIN_CREATE_KEYVAL
- MODULE PROCEDURE MPI_WIN_CREATE_KEYVAL_T
- END INTERFACE MPI_WIN_CREATE_KEYVAL
+ PUBLIC :: MPI_ALLGATHERV
+ INTERFACE MPI_ALLGATHERV
+ MODULE PROCEDURE MPI_ALLGATHERV_T
+ END INTERFACE MPI_ALLGATHERV
- PUBLIC :: MPI_BUFFER_ATTACH
- INTERFACE MPI_BUFFER_ATTACH
- MODULE PROCEDURE MPI_BUFFER_ATTACH_T
- END INTERFACE MPI_BUFFER_ATTACH
+ PUBLIC :: MPI_IGATHER
+ INTERFACE MPI_IGATHER
+ MODULE PROCEDURE MPI_IGATHER_T
+ END INTERFACE MPI_IGATHER
PUBLIC :: MPI_ATTR_GET
INTERFACE MPI_ATTR_GET
MODULE PROCEDURE MPI_ATTR_GET_T
END INTERFACE MPI_ATTR_GET
- PUBLIC :: MPI_WIN_ATTACH
- INTERFACE MPI_WIN_ATTACH
- MODULE PROCEDURE MPI_WIN_ATTACH_T
- END INTERFACE MPI_WIN_ATTACH
-
- PUBLIC :: MPI_ALLOC_MEM
- INTERFACE MPI_ALLOC_MEM
- MODULE PROCEDURE MPI_ALLOC_MEM_T
- END INTERFACE MPI_ALLOC_MEM
-
- PUBLIC :: MPI_IALLREDUCE
- INTERFACE MPI_IALLREDUCE
- MODULE PROCEDURE MPI_IALLREDUCE_T
- END INTERFACE MPI_IALLREDUCE
-
- PUBLIC :: MPI_REDUCE_SCATTER
- INTERFACE MPI_REDUCE_SCATTER
- MODULE PROCEDURE MPI_REDUCE_SCATTER_T
- END INTERFACE MPI_REDUCE_SCATTER
-
- PUBLIC :: MPI_NEIGHBOR_ALLGATHERV
- INTERFACE MPI_NEIGHBOR_ALLGATHERV
- MODULE PROCEDURE MPI_NEIGHBOR_ALLGATHERV_T
- END INTERFACE MPI_NEIGHBOR_ALLGATHERV
-
- PUBLIC :: MPI_IALLTOALLW
- INTERFACE MPI_IALLTOALLW
- MODULE PROCEDURE MPI_IALLTOALLW_T
- END INTERFACE MPI_IALLTOALLW
+ PUBLIC :: MPI_GET
+ INTERFACE MPI_GET
+ MODULE PROCEDURE MPI_GET_T
+ END INTERFACE MPI_GET
- PUBLIC :: MPI_ISEND
- INTERFACE MPI_ISEND
- MODULE PROCEDURE MPI_ISEND_T
- END INTERFACE MPI_ISEND
+ PUBLIC :: MPI_IMRECV
+ INTERFACE MPI_IMRECV
+ MODULE PROCEDURE MPI_IMRECV_T
+ END INTERFACE MPI_IMRECV
PUBLIC :: MPI_SEND
INTERFACE MPI_SEND
MODULE PROCEDURE MPI_SEND_T
END INTERFACE MPI_SEND
- PUBLIC :: MPI_GET_ADDRESS
- INTERFACE MPI_GET_ADDRESS
- MODULE PROCEDURE MPI_GET_ADDRESS_T
- END INTERFACE MPI_GET_ADDRESS
+ PUBLIC :: MPI_RSEND
+ INTERFACE MPI_RSEND
+ MODULE PROCEDURE MPI_RSEND_T
+ END INTERFACE MPI_RSEND
- PUBLIC :: MPI_ADDRESS
- INTERFACE MPI_ADDRESS
- MODULE PROCEDURE MPI_ADDRESS_T
- END INTERFACE MPI_ADDRESS
+ PUBLIC :: MPI_SCAN
+ INTERFACE MPI_SCAN
+ MODULE PROCEDURE MPI_SCAN_T
+ END INTERFACE MPI_SCAN
- PUBLIC :: MPI_IMRECV
- INTERFACE MPI_IMRECV
- MODULE PROCEDURE MPI_IMRECV_T
- END INTERFACE MPI_IMRECV
+ PUBLIC :: MPI_REDUCE_SCATTER_BLOCK
+ INTERFACE MPI_REDUCE_SCATTER_BLOCK
+ MODULE PROCEDURE MPI_REDUCE_SCATTER_BLOCK_T
+ END INTERFACE MPI_REDUCE_SCATTER_BLOCK
- PUBLIC :: MPI_GET_ACCUMULATE
- INTERFACE MPI_GET_ACCUMULATE
- MODULE PROCEDURE MPI_GET_ACCUMULATE_T
- END INTERFACE MPI_GET_ACCUMULATE
+ PUBLIC :: MPI_RACCUMULATE
+ INTERFACE MPI_RACCUMULATE
+ MODULE PROCEDURE MPI_RACCUMULATE_T
+ END INTERFACE MPI_RACCUMULATE
PUBLIC :: MPI_IEXSCAN
INTERFACE MPI_IEXSCAN
MODULE PROCEDURE MPI_IEXSCAN_T
END INTERFACE MPI_IEXSCAN
- PUBLIC :: MPI_IALLGATHERV
- INTERFACE MPI_IALLGATHERV
- MODULE PROCEDURE MPI_IALLGATHERV_T
- END INTERFACE MPI_IALLGATHERV
+ PUBLIC :: MPI_IALLGATHER
+ INTERFACE MPI_IALLGATHER
+ MODULE PROCEDURE MPI_IALLGATHER_T
+ END INTERFACE MPI_IALLGATHER
- CONTAINS
+ PUBLIC :: MPI_SEND_INIT
+ INTERFACE MPI_SEND_INIT
+ MODULE PROCEDURE MPI_SEND_INIT_T
+ END INTERFACE MPI_SEND_INIT
- SUBROUTINE MPI_INEIGHBOR_ALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,&
- recvcount,recvtype,comm,request,ierror)
- <type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcount
- INTEGER recvtype
- INTEGER comm
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_INEIGHBOR_ALLTOALL
- CALL MPI_INEIGHBOR_ALLTOALL(sendbuf,sendcount,sendtype,recvbuf,&
- recvcount,recvtype,comm,request,ierror)
- END SUBROUTINE MPI_INEIGHBOR_ALLTOALL_T
+ PUBLIC :: MPI_INEIGHBOR_ALLTOALL
+ INTERFACE MPI_INEIGHBOR_ALLTOALL
+ MODULE PROCEDURE MPI_INEIGHBOR_ALLTOALL_T
+ END INTERFACE MPI_INEIGHBOR_ALLTOALL
- SUBROUTINE MPI_RECV_T(buf,count,datatype,source,tag,comm,status,ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER source
- INTEGER tag
- INTEGER comm
- INTEGER status(MPI_STATUS_SIZE)
- INTEGER ierror
- EXTERNAL MPI_RECV
- CALL MPI_RECV(buf,count,datatype,source,tag,comm,status,ierror)
- END SUBROUTINE MPI_RECV_T
+ PUBLIC :: MPI_ISCATTER
+ INTERFACE MPI_ISCATTER
+ MODULE PROCEDURE MPI_ISCATTER_T
+ END INTERFACE MPI_ISCATTER
- SUBROUTINE MPI_ATTR_PUT_T(comm,keyval,attribute_val,ierror)
- INTEGER comm
- INTEGER keyval
- <type> attribute_val<dims>
- INTEGER ierror
- EXTERNAL MPI_ATTR_PUT
- CALL MPI_ATTR_PUT(comm,keyval,attribute_val,ierror)
- END SUBROUTINE MPI_ATTR_PUT_T
+ PUBLIC :: MPI_INEIGHBOR_ALLTOALLW
+ INTERFACE MPI_INEIGHBOR_ALLTOALLW
+ MODULE PROCEDURE MPI_INEIGHBOR_ALLTOALLW_T
+ END INTERFACE MPI_INEIGHBOR_ALLTOALLW
- SUBROUTINE MPI_IALLGATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,request,ierror)
- <type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcount
- INTEGER recvtype
- INTEGER comm
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_IALLGATHER
- CALL MPI_IALLGATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,request,ierror)
- END SUBROUTINE MPI_IALLGATHER_T
+ PUBLIC :: MPI_COMM_CREATE_KEYVAL
+ INTERFACE MPI_COMM_CREATE_KEYVAL
+ MODULE PROCEDURE MPI_COMM_CREATE_KEYVAL_T
+ END INTERFACE MPI_COMM_CREATE_KEYVAL
- SUBROUTINE MPI_SSEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
- ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER dest
- INTEGER tag
- INTEGER comm
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_SSEND_INIT
- CALL MPI_SSEND_INIT(buf,count,datatype,dest,tag,comm,request,&
- ierror)
- END SUBROUTINE MPI_SSEND_INIT_T
+ PUBLIC :: MPI_SCATTER
+ INTERFACE MPI_SCATTER
+ MODULE PROCEDURE MPI_SCATTER_T
+ END INTERFACE MPI_SCATTER
+
+ PUBLIC :: MPI_SCATTERV
+ INTERFACE MPI_SCATTERV
+ MODULE PROCEDURE MPI_SCATTERV_T
+ END INTERFACE MPI_SCATTERV
+
+ PUBLIC :: MPI_IRSEND
+ INTERFACE MPI_IRSEND
+ MODULE PROCEDURE MPI_IRSEND_T
+ END INTERFACE MPI_IRSEND
+
+ PUBLIC :: MPI_FETCH_AND_OP
+ INTERFACE MPI_FETCH_AND_OP
+ MODULE PROCEDURE MPI_FETCH_AND_OP_T
+ END INTERFACE MPI_FETCH_AND_OP
+
+ PUBLIC :: MPI_IREDUCE
+ INTERFACE MPI_IREDUCE
+ MODULE PROCEDURE MPI_IREDUCE_T
+ END INTERFACE MPI_IREDUCE
+
+ PUBLIC :: MPI_NEIGHBOR_ALLTOALLV
+ INTERFACE MPI_NEIGHBOR_ALLTOALLV
+ MODULE PROCEDURE MPI_NEIGHBOR_ALLTOALLV_T
+ END INTERFACE MPI_NEIGHBOR_ALLTOALLV
+
+ PUBLIC :: MPI_RECV
+ INTERFACE MPI_RECV
+ MODULE PROCEDURE MPI_RECV_T
+ END INTERFACE MPI_RECV
+
+ PUBLIC :: MPI_IGATHERV
+ INTERFACE MPI_IGATHERV
+ MODULE PROCEDURE MPI_IGATHERV_T
+ END INTERFACE MPI_IGATHERV
+
+ PUBLIC :: MPI_TYPE_GET_ATTR
+ INTERFACE MPI_TYPE_GET_ATTR
+ MODULE PROCEDURE MPI_TYPE_GET_ATTR_T
+ END INTERFACE MPI_TYPE_GET_ATTR
+
+ PUBLIC :: MPI_ACCUMULATE
+ INTERFACE MPI_ACCUMULATE
+ MODULE PROCEDURE MPI_ACCUMULATE_T
+ END INTERFACE MPI_ACCUMULATE
+
+ PUBLIC :: MPI_WIN_SET_ATTR
+ INTERFACE MPI_WIN_SET_ATTR
+ MODULE PROCEDURE MPI_WIN_SET_ATTR_T
+ END INTERFACE MPI_WIN_SET_ATTR
- SUBROUTINE MPI_BUFFER_DETACH_T(buffer_addr,size,ierror)
- <type> buffer_addr<dims>
- INTEGER size
- INTEGER ierror
- EXTERNAL MPI_BUFFER_DETACH
- CALL MPI_BUFFER_DETACH(buffer_addr,size,ierror)
- END SUBROUTINE MPI_BUFFER_DETACH_T
+ PUBLIC :: MPI_PUT
+ INTERFACE MPI_PUT
+ MODULE PROCEDURE MPI_PUT_T
+ END INTERFACE MPI_PUT
- SUBROUTINE MPI_ALLTOALLW_T(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
- recvcounts,rdispls,recvtypes,comm,ierror)
- <type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER sdispls(*)
- INTEGER sendtypes(*)
- <type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER rdispls(*)
- INTEGER recvtypes(*)
- INTEGER comm
- INTEGER ierror
- EXTERNAL MPI_ALLTOALLW
- CALL MPI_ALLTOALLW(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
- recvcounts,rdispls,recvtypes,comm,ierror)
- END SUBROUTINE MPI_ALLTOALLW_T
+ PUBLIC :: MPI_IALLTOALL
+ INTERFACE MPI_IALLTOALL
+ MODULE PROCEDURE MPI_IALLTOALL_T
+ END INTERFACE MPI_IALLTOALL
- SUBROUTINE MPI_SEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
- ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER dest
- INTEGER tag
- INTEGER comm
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_SEND_INIT
- CALL MPI_SEND_INIT(buf,count,datatype,dest,tag,comm,request,&
- ierror)
- END SUBROUTINE MPI_SEND_INIT_T
+ PUBLIC :: MPI_REDUCE_LOCAL
+ INTERFACE MPI_REDUCE_LOCAL
+ MODULE PROCEDURE MPI_REDUCE_LOCAL_T
+ END INTERFACE MPI_REDUCE_LOCAL
- SUBROUTINE MPI_UNPACK_T(inbuf,insize,position,outbuf,outcount,datatype,&
- comm,ierror)
- <type> inbuf<dims>
- INTEGER insize
- INTEGER position
- <type1> outbuf<dims1>
- INTEGER outcount
- INTEGER datatype
- INTEGER comm
- INTEGER ierror
- EXTERNAL MPI_UNPACK
- CALL MPI_UNPACK(inbuf,insize,position,outbuf,outcount,datatype,&
- comm,ierror)
- END SUBROUTINE MPI_UNPACK_T
+ PUBLIC :: MPI_BSEND
+ INTERFACE MPI_BSEND
+ MODULE PROCEDURE MPI_BSEND_T
+ END INTERFACE MPI_BSEND
- SUBROUTINE MPI_WIN_ALLOCATE_T(size,disp_unit,info,comm,baseptr,win,&
- ierror)
- INTEGER(KIND=MPI_ADDRESS_KIND) size
- INTEGER disp_unit
- INTEGER info
- INTEGER comm
- <type> baseptr<dims>
- INTEGER win
- INTEGER ierror
- EXTERNAL MPI_WIN_ALLOCATE
- CALL MPI_WIN_ALLOCATE(size,disp_unit,info,comm,baseptr,win,&
- ierror)
- END SUBROUTINE MPI_WIN_ALLOCATE_T
+ PUBLIC :: MPI_IREDUCE_SCATTER_BLOCK
+ INTERFACE MPI_IREDUCE_SCATTER_BLOCK
+ MODULE PROCEDURE MPI_IREDUCE_SCATTER_BLOCK_T
+ END INTERFACE MPI_IREDUCE_SCATTER_BLOCK
- SUBROUTINE MPI_IALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,request,ierror)
- <type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcount
- INTEGER recvtype
- INTEGER comm
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_IALLTOALL
- CALL MPI_IALLTOALL(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,request,ierror)
- END SUBROUTINE MPI_IALLTOALL_T
+ PUBLIC :: MPI_NEIGHBOR_ALLTOALLW
+ INTERFACE MPI_NEIGHBOR_ALLTOALLW
+ MODULE PROCEDURE MPI_NEIGHBOR_ALLTOALLW_T
+ END INTERFACE MPI_NEIGHBOR_ALLTOALLW
- SUBROUTINE MPI_RGET_T(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,win,&
- request,ierror)
- <type> origin_addr<dims>
- INTEGER origin_count
- INTEGER origin_datatype
- INTEGER target_rank
- INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
- INTEGER target_count
- INTEGER target_datatype
- INTEGER win
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_RGET
- CALL MPI_RGET(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,win,&
- request,ierror)
- END SUBROUTINE MPI_RGET_T
+ CONTAINS
SUBROUTINE MPI_PACK_EXTERNAL_T(datarep,inbuf,incount,datatype,outbuf,&
outsize,position,ierror)
@@ -699,83 +526,31 @@
outsize,position,ierror)
END SUBROUTINE MPI_PACK_EXTERNAL_T
- SUBROUTINE MPI_WIN_ALLOCATE_SHARED_T(size,disp_unit,info,comm,baseptr,&
- win,ierror)
- INTEGER(KIND=MPI_ADDRESS_KIND) size
- INTEGER disp_unit
- INTEGER info
- INTEGER comm
- <type> baseptr<dims>
- INTEGER win
+ SUBROUTINE MPI_GET_ADDRESS_T(location,address,ierror)
+ <type> location<dims>
+ INTEGER(KIND=MPI_ADDRESS_KIND) address
INTEGER ierror
- EXTERNAL MPI_WIN_ALLOCATE_SHARED
- CALL MPI_WIN_ALLOCATE_SHARED(size,disp_unit,info,comm,baseptr,&
- win,ierror)
- END SUBROUTINE MPI_WIN_ALLOCATE_SHARED_T
+ EXTERNAL MPI_GET_ADDRESS
+ CALL MPI_GET_ADDRESS(location,address,ierror)
+ END SUBROUTINE MPI_GET_ADDRESS_T
- SUBROUTINE MPI_PACK_T(inbuf,incount,datatype,outbuf,outsize,position,&
+ SUBROUTINE MPI_UNPACK_T(inbuf,insize,position,outbuf,outcount,datatype,&
comm,ierror)
<type> inbuf<dims>
- INTEGER incount
- INTEGER datatype
- <type1> outbuf<dims1>
- INTEGER outsize
+ INTEGER insize
INTEGER position
+ <type1> outbuf<dims1>
+ INTEGER outcount
+ INTEGER datatype
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_PACK
- CALL MPI_PACK(inbuf,incount,datatype,outbuf,outsize,position,&
+ EXTERNAL MPI_UNPACK
+ CALL MPI_UNPACK(inbuf,insize,position,outbuf,outcount,datatype,&
comm,ierror)
- END SUBROUTINE MPI_PACK_T
-
- SUBROUTINE MPI_IALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
- recvcounts,rdispls,recvtype,comm,request,ierror)
- <type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER sdispls(*)
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER rdispls(*)
- INTEGER recvtype
- INTEGER comm
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_IALLTOALLV
- CALL MPI_IALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
- recvcounts,rdispls,recvtype,comm,request,ierror)
- END SUBROUTINE MPI_IALLTOALLV_T
-
- SUBROUTINE MPI_ALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,ierror)
- <type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER displs(*)
- INTEGER recvtype
- INTEGER comm
- INTEGER ierror
- EXTERNAL MPI_ALLGATHERV
- CALL MPI_ALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,ierror)
- END SUBROUTINE MPI_ALLGATHERV_T
-
- SUBROUTINE MPI_COMM_CREATE_KEYVAL_T(comm_copy_attr_fn,&
- comm_delete_attr_fn,comm_keyval,extra_state,ierror)
- EXTERNAL comm_copy_attr_fn
- EXTERNAL comm_delete_attr_fn
- INTEGER comm_keyval
- <type> extra_state<dims>
- INTEGER ierror
- EXTERNAL MPI_COMM_CREATE_KEYVAL
- CALL MPI_COMM_CREATE_KEYVAL(comm_copy_attr_fn,&
- comm_delete_attr_fn,comm_keyval,extra_state,ierror)
- END SUBROUTINE MPI_COMM_CREATE_KEYVAL_T
+ END SUBROUTINE MPI_UNPACK_T
- SUBROUTINE MPI_NEIGHBOR_ALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,&
- recvcount,recvtype,comm,ierror)
+ SUBROUTINE MPI_ALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,ierror)
<type> sendbuf<dims>
INTEGER sendcount
INTEGER sendtype
@@ -784,55 +559,35 @@
INTEGER recvtype
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_NEIGHBOR_ALLTOALL
- CALL MPI_NEIGHBOR_ALLTOALL(sendbuf,sendcount,sendtype,recvbuf,&
- recvcount,recvtype,comm,ierror)
- END SUBROUTINE MPI_NEIGHBOR_ALLTOALL_T
-
- SUBROUTINE MPI_COMPARE_AND_SWAP_T(origin_addr,compare_addr,result_addr,&
- datatype,target_rank,target_disp,win,ierror)
- <type> origin_addr<dims>
- <type1> compare_addr<dims1>
- <type2> result_addr<dims2>
- INTEGER datatype
- INTEGER target_rank
- INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
- INTEGER win
- INTEGER ierror
- EXTERNAL MPI_COMPARE_AND_SWAP
- CALL MPI_COMPARE_AND_SWAP(origin_addr,compare_addr,result_addr,&
- datatype,target_rank,target_disp,win,ierror)
- END SUBROUTINE MPI_COMPARE_AND_SWAP_T
+ EXTERNAL MPI_ALLTOALL
+ CALL MPI_ALLTOALL(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,ierror)
+ END SUBROUTINE MPI_ALLTOALL_T
- SUBROUTINE MPI_IBCAST_T(buffer,count,datatype,root,comm,request,ierror)
- <type> buffer<dims>
+ SUBROUTINE MPI_IRECV_T(buf,count,datatype,source,tag,comm,request,ierror)
+ <type> buf<dims>
INTEGER count
INTEGER datatype
- INTEGER root
+ INTEGER source
+ INTEGER tag
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_IBCAST
- CALL MPI_IBCAST(buffer,count,datatype,root,comm,request,ierror)
- END SUBROUTINE MPI_IBCAST_T
+ EXTERNAL MPI_IRECV
+ CALL MPI_IRECV(buf,count,datatype,source,tag,comm,request,ierror)
+ END SUBROUTINE MPI_IRECV_T
- SUBROUTINE MPI_GET_T(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,win,&
- ierror)
- <type> origin_addr<dims>
- INTEGER origin_count
- INTEGER origin_datatype
- INTEGER target_rank
- INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
- INTEGER target_count
- INTEGER target_datatype
- INTEGER win
+ SUBROUTINE MPI_ALLREDUCE_T(sendbuf,recvbuf,count,datatype,op,comm,ierror)
+ <type> sendbuf<dims>
+ <type1> recvbuf<dims1>
+ INTEGER count
+ INTEGER datatype
+ INTEGER op
+ INTEGER comm
INTEGER ierror
- EXTERNAL MPI_GET
- CALL MPI_GET(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,win,&
- ierror)
- END SUBROUTINE MPI_GET_T
+ EXTERNAL MPI_ALLREDUCE
+ CALL MPI_ALLREDUCE(sendbuf,recvbuf,count,datatype,op,comm,ierror)
+ END SUBROUTINE MPI_ALLREDUCE_T
SUBROUTINE MPI_WIN_SHARED_QUERY_T(win,rank,size,disp_unit,baseptr,ierror)
INTEGER win
@@ -845,41 +600,77 @@
CALL MPI_WIN_SHARED_QUERY(win,rank,size,disp_unit,baseptr,ierror)
END SUBROUTINE MPI_WIN_SHARED_QUERY_T
- SUBROUTINE MPI_RACCUMULATE_T(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,op,win,&
- request,ierror)
+ SUBROUTINE MPI_GET_ACCUMULATE_T(origin_addr,origin_count,origin_datatype,&
+ result_addr,result_count,result_datatype,target_rank,&
+ target_disp,target_count,target_datatype,op,win,ierror)
<type> origin_addr<dims>
INTEGER origin_count
INTEGER origin_datatype
+ <type1> result_addr<dims1>
+ INTEGER result_count
+ INTEGER result_datatype
INTEGER target_rank
INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
INTEGER target_count
INTEGER target_datatype
INTEGER op
INTEGER win
+ INTEGER ierror
+ EXTERNAL MPI_GET_ACCUMULATE
+ CALL MPI_GET_ACCUMULATE(origin_addr,origin_count,origin_datatype,&
+ result_addr,result_count,result_datatype,target_rank,&
+ target_disp,target_count,target_datatype,op,win,ierror)
+ END SUBROUTINE MPI_GET_ACCUMULATE_T
+
+ SUBROUTINE MPI_BCAST_T(buffer,count,datatype,root,comm,ierror)
+ <type> buffer<dims>
+ INTEGER count
+ INTEGER datatype
+ INTEGER root
+ INTEGER comm
+ INTEGER ierror
+ EXTERNAL MPI_BCAST
+ CALL MPI_BCAST(buffer,count,datatype,root,comm,ierror)
+ END SUBROUTINE MPI_BCAST_T
+
+ SUBROUTINE MPI_COMM_GET_ATTR_T(comm,comm_keyval,attribute_val,flag,&
+ ierror)
+ INTEGER comm
+ INTEGER comm_keyval
+ <type> attribute_val<dims>
+ LOGICAL flag
+ INTEGER ierror
+ EXTERNAL MPI_COMM_GET_ATTR
+ CALL MPI_COMM_GET_ATTR(comm,comm_keyval,attribute_val,flag,&
+ ierror)
+ END SUBROUTINE MPI_COMM_GET_ATTR_T
+
+ SUBROUTINE MPI_IBSEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
+ <type> buf<dims>
+ INTEGER count
+ INTEGER datatype
+ INTEGER dest
+ INTEGER tag
+ INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_RACCUMULATE
- CALL MPI_RACCUMULATE(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,op,&
- win,request,ierror)
- END SUBROUTINE MPI_RACCUMULATE_T
+ EXTERNAL MPI_IBSEND
+ CALL MPI_IBSEND(buf,count,datatype,dest,tag,comm,request,ierror)
+ END SUBROUTINE MPI_IBSEND_T
- SUBROUTINE MPI_SCATTER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,ierror)
+ SUBROUTINE MPI_REDUCE_SCATTER_T(sendbuf,recvbuf,recvcounts,datatype,op,&
+ comm,ierror)
<type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcount
- INTEGER recvtype
- INTEGER root
+ INTEGER recvcounts(*)
+ INTEGER datatype
+ INTEGER op
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_SCATTER
- CALL MPI_SCATTER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,ierror)
- END SUBROUTINE MPI_SCATTER_T
+ EXTERNAL MPI_REDUCE_SCATTER
+ CALL MPI_REDUCE_SCATTER(sendbuf,recvbuf,recvcounts,datatype,op,&
+ comm,ierror)
+ END SUBROUTINE MPI_REDUCE_SCATTER_T
SUBROUTINE MPI_GATHERV_T(sendbuf,sendcount,sendtype,recvbuf,recvcounts,&
displs,recvtype,root,comm,ierror)
@@ -898,86 +689,78 @@
displs,recvtype,root,comm,ierror)
END SUBROUTINE MPI_GATHERV_T
- SUBROUTINE MPI_RSEND_T(buf,count,datatype,dest,tag,comm,ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER dest
- INTEGER tag
- INTEGER comm
- INTEGER ierror
- EXTERNAL MPI_RSEND
- CALL MPI_RSEND(buf,count,datatype,dest,tag,comm,ierror)
- END SUBROUTINE MPI_RSEND_T
-
- SUBROUTINE MPI_COMM_GET_ATTR_T(comm,comm_keyval,attribute_val,flag,&
- ierror)
- INTEGER comm
- INTEGER comm_keyval
- <type> attribute_val<dims>
- LOGICAL flag
- INTEGER ierror
- EXTERNAL MPI_COMM_GET_ATTR
- CALL MPI_COMM_GET_ATTR(comm,comm_keyval,attribute_val,flag,&
- ierror)
- END SUBROUTINE MPI_COMM_GET_ATTR_T
-
- SUBROUTINE MPI_IGATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,request,ierror)
+ SUBROUTINE MPI_INEIGHBOR_ALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,&
+ recvbuf,recvcounts,rdispls,recvtype,comm,request,ierror)
<type> sendbuf<dims>
- INTEGER sendcount
+ INTEGER sendcounts(*)
+ INTEGER sdispls(*)
INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcount
+ INTEGER recvcounts(*)
+ INTEGER rdispls(*)
INTEGER recvtype
- INTEGER root
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_IGATHER
- CALL MPI_IGATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,request,ierror)
- END SUBROUTINE MPI_IGATHER_T
+ EXTERNAL MPI_INEIGHBOR_ALLTOALLV
+ CALL MPI_INEIGHBOR_ALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,&
+ recvbuf,recvcounts,rdispls,recvtype,comm,request,ierror)
+ END SUBROUTINE MPI_INEIGHBOR_ALLTOALLV_T
- SUBROUTINE MPI_UNPACK_EXTERNAL_T(datarep,inbuf,insize,position,outbuf,&
- outcount,datatype,ierror)
- CHARACTER (LEN=*) datarep
- <type> inbuf<dims>
- INTEGER(KIND=MPI_ADDRESS_KIND) insize
- INTEGER(KIND=MPI_ADDRESS_KIND) position
- <type1> outbuf<dims1>
- INTEGER outcount
- INTEGER datatype
+ SUBROUTINE MPI_IALLTOALLW_T(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
+ recvcounts,rdispls,recvtypes,comm,request,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcounts(*)
+ INTEGER sdispls(*)
+ INTEGER sendtypes(*)
+ <type1> recvbuf<dims1>
+ INTEGER recvcounts(*)
+ INTEGER rdispls(*)
+ INTEGER recvtypes(*)
+ INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_UNPACK_EXTERNAL
- CALL MPI_UNPACK_EXTERNAL(datarep,inbuf,insize,position,outbuf,&
- outcount,datatype,ierror)
- END SUBROUTINE MPI_UNPACK_EXTERNAL_T
+ EXTERNAL MPI_IALLTOALLW
+ CALL MPI_IALLTOALLW(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
+ recvcounts,rdispls,recvtypes,comm,request,ierror)
+ END SUBROUTINE MPI_IALLTOALLW_T
- SUBROUTINE MPI_FREE_MEM_T(base,ierror)
- <type> base<dims>
+ SUBROUTINE MPI_BUFFER_ATTACH_T(buffer,size,ierror)
+ <type> buffer<dims>
+ INTEGER size
INTEGER ierror
- EXTERNAL MPI_FREE_MEM
- CALL MPI_FREE_MEM(base,ierror)
- END SUBROUTINE MPI_FREE_MEM_T
+ EXTERNAL MPI_BUFFER_ATTACH
+ CALL MPI_BUFFER_ATTACH(buffer,size,ierror)
+ END SUBROUTINE MPI_BUFFER_ATTACH_T
- SUBROUTINE MPI_RECV_INIT_T(buf,count,datatype,source,tag,comm,request,&
- ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER source
- INTEGER tag
+ SUBROUTINE MPI_IALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
+ recvcounts,rdispls,recvtype,comm,request,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcounts(*)
+ INTEGER sdispls(*)
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcounts(*)
+ INTEGER rdispls(*)
+ INTEGER recvtype
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_RECV_INIT
- CALL MPI_RECV_INIT(buf,count,datatype,source,tag,comm,request,&
- ierror)
- END SUBROUTINE MPI_RECV_INIT_T
+ EXTERNAL MPI_IALLTOALLV
+ CALL MPI_IALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
+ recvcounts,rdispls,recvtype,comm,request,ierror)
+ END SUBROUTINE MPI_IALLTOALLV_T
- SUBROUTINE MPI_IGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,recvcounts,&
- displs,recvtype,root,comm,request,ierror)
+ SUBROUTINE MPI_BUFFER_DETACH_T(buffer_addr,size,ierror)
+ <type> buffer_addr<dims>
+ INTEGER size
+ INTEGER ierror
+ EXTERNAL MPI_BUFFER_DETACH
+ CALL MPI_BUFFER_DETACH(buffer_addr,size,ierror)
+ END SUBROUTINE MPI_BUFFER_DETACH_T
+
+ SUBROUTINE MPI_INEIGHBOR_ALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,request,ierror)
<type> sendbuf<dims>
INTEGER sendcount
INTEGER sendtype
@@ -985,14 +768,27 @@
INTEGER recvcounts(*)
INTEGER displs(*)
INTEGER recvtype
- INTEGER root
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_IGATHERV
- CALL MPI_IGATHERV(sendbuf,sendcount,sendtype,recvbuf,recvcounts,&
- displs,recvtype,root,comm,request,ierror)
- END SUBROUTINE MPI_IGATHERV_T
+ EXTERNAL MPI_INEIGHBOR_ALLGATHERV
+ CALL MPI_INEIGHBOR_ALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,request,ierror)
+ END SUBROUTINE MPI_INEIGHBOR_ALLGATHERV_T
+
+ SUBROUTINE MPI_WIN_ALLOCATE_SHARED_T(size,disp_unit,info,comm,baseptr,&
+ win,ierror)
+ INTEGER(KIND=MPI_ADDRESS_KIND) size
+ INTEGER disp_unit
+ INTEGER info
+ INTEGER comm
+ <type> baseptr<dims>
+ INTEGER win
+ INTEGER ierror
+ EXTERNAL MPI_WIN_ALLOCATE_SHARED
+ CALL MPI_WIN_ALLOCATE_SHARED(size,disp_unit,info,comm,baseptr,&
+ win,ierror)
+ END SUBROUTINE MPI_WIN_ALLOCATE_SHARED_T
SUBROUTINE MPI_ISCATTERV_T(sendbuf,sendcounts,displs,sendtype,recvbuf,&
recvcount,recvtype,root,comm,request,ierror)
@@ -1012,78 +808,69 @@
recvcount,recvtype,root,comm,request,ierror)
END SUBROUTINE MPI_ISCATTERV_T
- SUBROUTINE MPI_BSEND_T(buf,count,datatype,dest,tag,comm,ierror)
- <type> buf<dims>
+ SUBROUTINE MPI_IALLREDUCE_T(sendbuf,recvbuf,count,datatype,op,comm,&
+ request,ierror)
+ <type> sendbuf<dims>
+ <type1> recvbuf<dims1>
INTEGER count
INTEGER datatype
- INTEGER dest
- INTEGER tag
+ INTEGER op
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_BSEND
- CALL MPI_BSEND(buf,count,datatype,dest,tag,comm,ierror)
- END SUBROUTINE MPI_BSEND_T
+ EXTERNAL MPI_IALLREDUCE
+ CALL MPI_IALLREDUCE(sendbuf,recvbuf,count,datatype,op,comm,&
+ request,ierror)
+ END SUBROUTINE MPI_IALLREDUCE_T
- SUBROUTINE MPI_IREDUCE_T(sendbuf,recvbuf,count,datatype,op,root,comm,&
- request,ierror)
- <type> sendbuf<dims>
- <type1> recvbuf<dims1>
- INTEGER count
+ SUBROUTINE MPI_PACK_T(inbuf,incount,datatype,outbuf,outsize,position,&
+ comm,ierror)
+ <type> inbuf<dims>
+ INTEGER incount
INTEGER datatype
- INTEGER op
- INTEGER root
+ <type1> outbuf<dims1>
+ INTEGER outsize
+ INTEGER position
INTEGER comm
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_IREDUCE
- CALL MPI_IREDUCE(sendbuf,recvbuf,count,datatype,op,root,comm,&
- request,ierror)
- END SUBROUTINE MPI_IREDUCE_T
+ EXTERNAL MPI_PACK
+ CALL MPI_PACK(inbuf,incount,datatype,outbuf,outsize,position,&
+ comm,ierror)
+ END SUBROUTINE MPI_PACK_T
- SUBROUTINE MPI_GREQUEST_START_T(query_fn,free_fn,cancel_fn,extra_state,&
- request,ierror)
- EXTERNAL query_fn
- EXTERNAL free_fn
- EXTERNAL cancel_fn
+ SUBROUTINE MPI_WIN_CREATE_KEYVAL_T(win_copy_attr_fn,win_delete_attr_fn,&
+ win_keyval,extra_state,ierror)
+ EXTERNAL win_copy_attr_fn
+ EXTERNAL win_delete_attr_fn
+ INTEGER win_keyval
<type> extra_state<dims>
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_GREQUEST_START
- CALL MPI_GREQUEST_START(query_fn,free_fn,cancel_fn,extra_state,&
- request,ierror)
- END SUBROUTINE MPI_GREQUEST_START_T
+ EXTERNAL MPI_WIN_CREATE_KEYVAL
+ CALL MPI_WIN_CREATE_KEYVAL(win_copy_attr_fn,win_delete_attr_fn,&
+ win_keyval,extra_state,ierror)
+ END SUBROUTINE MPI_WIN_CREATE_KEYVAL_T
- SUBROUTINE MPI_BCAST_T(buffer,count,datatype,root,comm,ierror)
- <type> buffer<dims>
- INTEGER count
+ SUBROUTINE MPI_UNPACK_EXTERNAL_T(datarep,inbuf,insize,position,outbuf,&
+ outcount,datatype,ierror)
+ CHARACTER (LEN=*) datarep
+ <type> inbuf<dims>
+ INTEGER(KIND=MPI_ADDRESS_KIND) insize
+ INTEGER(KIND=MPI_ADDRESS_KIND) position
+ <type1> outbuf<dims1>
+ INTEGER outcount
INTEGER datatype
- INTEGER root
- INTEGER comm
INTEGER ierror
- EXTERNAL MPI_BCAST
- CALL MPI_BCAST(buffer,count,datatype,root,comm,ierror)
- END SUBROUTINE MPI_BCAST_T
+ EXTERNAL MPI_UNPACK_EXTERNAL
+ CALL MPI_UNPACK_EXTERNAL(datarep,inbuf,insize,position,outbuf,&
+ outcount,datatype,ierror)
+ END SUBROUTINE MPI_UNPACK_EXTERNAL_T
- SUBROUTINE MPI_SENDRECV_T(sendbuf,sendcount,sendtype,dest,sendtag,&
- recvbuf,recvcount,recvtype,source,recvtag,comm,status,ierror)
- <type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
- INTEGER dest
- INTEGER sendtag
- <type1> recvbuf<dims1>
- INTEGER recvcount
- INTEGER recvtype
- INTEGER source
- INTEGER recvtag
- INTEGER comm
- INTEGER status(MPI_STATUS_SIZE)
+ SUBROUTINE MPI_FREE_MEM_T(base,ierror)
+ <type> base<dims>
INTEGER ierror
- EXTERNAL MPI_SENDRECV
- CALL MPI_SENDRECV(sendbuf,sendcount,sendtype,dest,sendtag,&
- recvbuf,recvcount,recvtype,source,recvtag,comm,status,&
- ierror)
- END SUBROUTINE MPI_SENDRECV_T
+ EXTERNAL MPI_FREE_MEM
+ CALL MPI_FREE_MEM(base,ierror)
+ END SUBROUTINE MPI_FREE_MEM_T
SUBROUTINE MPI_TYPE_SET_ATTR_T(datatype,type_keyval,attribute_val,ierror)
INTEGER datatype
@@ -1094,21 +881,6 @@
CALL MPI_TYPE_SET_ATTR(datatype,type_keyval,attribute_val,ierror)
END SUBROUTINE MPI_TYPE_SET_ATTR_T
- SUBROUTINE MPI_FETCH_AND_OP_T(origin_addr,result_addr,datatype,&
- target_rank,target_disp,op,win,ierror)
- <type> origin_addr<dims>
- <type1> result_addr<dims1>
- INTEGER datatype
- INTEGER target_rank
- INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
- INTEGER op
- INTEGER win
- INTEGER ierror
- EXTERNAL MPI_FETCH_AND_OP
- CALL MPI_FETCH_AND_OP(origin_addr,result_addr,datatype,&
- target_rank,target_disp,op,win,ierror)
- END SUBROUTINE MPI_FETCH_AND_OP_T
-
SUBROUTINE MPI_RPUT_T(origin_addr,origin_count,origin_datatype,&
target_rank,target_disp,target_count,target_datatype,win,&
request,ierror)
@@ -1128,77 +900,63 @@
request,ierror)
END SUBROUTINE MPI_RPUT_T
- SUBROUTINE MPI_ALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,ierror)
- <type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcount
- INTEGER recvtype
- INTEGER comm
+ SUBROUTINE MPI_RGET_ACCUMULATE_T(origin_addr,origin_count,&
+ origin_datatype,result_addr,result_count,result_datatype,&
+ target_rank,target_disp,target_count,target_datatype,op,win,&
+ request,ierror)
+ <type> origin_addr<dims>
+ INTEGER origin_count
+ INTEGER origin_datatype
+ <type1> result_addr<dims1>
+ INTEGER result_count
+ INTEGER result_datatype
+ INTEGER target_rank
+ INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
+ INTEGER target_count
+ INTEGER target_datatype
+ INTEGER op
+ INTEGER win
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_ALLTOALL
- CALL MPI_ALLTOALL(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,ierror)
- END SUBROUTINE MPI_ALLTOALL_T
+ EXTERNAL MPI_RGET_ACCUMULATE
+ CALL MPI_RGET_ACCUMULATE(origin_addr,origin_count,&
+ origin_datatype,result_addr,result_count,result_datatype,&
+ target_rank,target_disp,target_count,target_datatype,op,&
+ win,request,ierror)
+ END SUBROUTINE MPI_RGET_ACCUMULATE_T
- SUBROUTINE MPI_INEIGHBOR_ALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,&
- recvbuf,recvcounts,rdispls,recvtype,comm,request,ierror)
+ SUBROUTINE MPI_NEIGHBOR_ALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcount,recvtype,comm,ierror)
<type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER sdispls(*)
+ INTEGER sendcount
INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER rdispls(*)
+ INTEGER recvcount
INTEGER recvtype
INTEGER comm
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_INEIGHBOR_ALLTOALLV
- CALL MPI_INEIGHBOR_ALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,&
- recvbuf,recvcounts,rdispls,recvtype,comm,request,ierror)
- END SUBROUTINE MPI_INEIGHBOR_ALLTOALLV_T
+ EXTERNAL MPI_NEIGHBOR_ALLTOALL
+ CALL MPI_NEIGHBOR_ALLTOALL(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcount,recvtype,comm,ierror)
+ END SUBROUTINE MPI_NEIGHBOR_ALLTOALL_T
- SUBROUTINE MPI_NEIGHBOR_ALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,&
- recvbuf,recvcounts,rdispls,recvtype,comm,ierror)
+ SUBROUTINE MPI_GATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,ierror)
<type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER sdispls(*)
+ INTEGER sendcount
INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER rdispls(*)
+ INTEGER recvcount
INTEGER recvtype
+ INTEGER root
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_NEIGHBOR_ALLTOALLV
- CALL MPI_NEIGHBOR_ALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,&
- recvbuf,recvcounts,rdispls,recvtype,comm,ierror)
- END SUBROUTINE MPI_NEIGHBOR_ALLTOALLV_T
-
- SUBROUTINE MPI_INEIGHBOR_ALLTOALLW_T(sendbuf,sendcounts,sdispls,&
- sendtypes,recvbuf,recvcounts,rdispls,recvtypes,comm,request,&
- ierror)
- <type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER(KIND=MPI_ADDRESS_KIND) sdispls(*)
- INTEGER sendtypes(*)
- <type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER(KIND=MPI_ADDRESS_KIND) rdispls(*)
- INTEGER recvtypes(*)
- INTEGER comm
- INTEGER request
- INTEGER ierror
- EXTERNAL MPI_INEIGHBOR_ALLTOALLW
- CALL MPI_INEIGHBOR_ALLTOALLW(sendbuf,sendcounts,sdispls,&
- sendtypes,recvbuf,recvcounts,rdispls,recvtypes,comm,&
- request,ierror)
- END SUBROUTINE MPI_INEIGHBOR_ALLTOALLW_T
+ EXTERNAL MPI_GATHER
+ CALL MPI_GATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,ierror)
+ END SUBROUTINE MPI_GATHER_T
- SUBROUTINE MPI_RSEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
+ SUBROUTINE MPI_SSEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
ierror)
<type> buf<dims>
INTEGER count
@@ -1208,75 +966,96 @@
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_RSEND_INIT
- CALL MPI_RSEND_INIT(buf,count,datatype,dest,tag,comm,request,&
+ EXTERNAL MPI_SSEND_INIT
+ CALL MPI_SSEND_INIT(buf,count,datatype,dest,tag,comm,request,&
ierror)
- END SUBROUTINE MPI_RSEND_INIT_T
+ END SUBROUTINE MPI_SSEND_INIT_T
- SUBROUTINE MPI_COMM_SET_ATTR_T(comm,comm_keyval,attribute_val,ierror)
+ SUBROUTINE MPI_WIN_ATTACH_T(win,base,size,ierror)
+ INTEGER win
+ <type> base<dims>
+ INTEGER(KIND=MPI_ADDRESS_KIND) size
+ INTEGER ierror
+ EXTERNAL MPI_WIN_ATTACH
+ CALL MPI_WIN_ATTACH(win,base,size,ierror)
+ END SUBROUTINE MPI_WIN_ATTACH_T
+
+ SUBROUTINE MPI_ISEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
+ <type> buf<dims>
+ INTEGER count
+ INTEGER datatype
+ INTEGER dest
+ INTEGER tag
INTEGER comm
- INTEGER comm_keyval
- <type> attribute_val<dims>
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_COMM_SET_ATTR
- CALL MPI_COMM_SET_ATTR(comm,comm_keyval,attribute_val,ierror)
- END SUBROUTINE MPI_COMM_SET_ATTR_T
+ EXTERNAL MPI_ISEND
+ CALL MPI_ISEND(buf,count,datatype,dest,tag,comm,request,ierror)
+ END SUBROUTINE MPI_ISEND_T
- SUBROUTINE MPI_TYPE_GET_ATTR_T(datatype,type_keyval,attribute_val,flag,&
- ierror)
+ SUBROUTINE MPI_MRECV_T(buf,count,datatype,message,status,ierror)
+ <type> buf<dims>
+ INTEGER count
INTEGER datatype
- INTEGER type_keyval
- <type> attribute_val<dims>
- LOGICAL flag
+ INTEGER message
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- EXTERNAL MPI_TYPE_GET_ATTR
- CALL MPI_TYPE_GET_ATTR(datatype,type_keyval,attribute_val,flag,&
- ierror)
- END SUBROUTINE MPI_TYPE_GET_ATTR_T
+ EXTERNAL MPI_MRECV
+ CALL MPI_MRECV(buf,count,datatype,message,status,ierror)
+ END SUBROUTINE MPI_MRECV_T
- SUBROUTINE MPI_ALLGATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,ierror)
+ SUBROUTINE MPI_NEIGHBOR_ALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,ierror)
<type> sendbuf<dims>
INTEGER sendcount
INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcount
+ INTEGER recvcounts(*)
+ INTEGER displs(*)
INTEGER recvtype
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_ALLGATHER
- CALL MPI_ALLGATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,comm,ierror)
- END SUBROUTINE MPI_ALLGATHER_T
+ EXTERNAL MPI_NEIGHBOR_ALLGATHERV
+ CALL MPI_NEIGHBOR_ALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,ierror)
+ END SUBROUTINE MPI_NEIGHBOR_ALLGATHERV_T
- SUBROUTINE MPI_BSEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
- ierror)
+ SUBROUTINE MPI_SSEND_T(buf,count,datatype,dest,tag,comm,ierror)
<type> buf<dims>
INTEGER count
INTEGER datatype
INTEGER dest
INTEGER tag
INTEGER comm
+ INTEGER ierror
+ EXTERNAL MPI_SSEND
+ CALL MPI_SSEND(buf,count,datatype,dest,tag,comm,ierror)
+ END SUBROUTINE MPI_SSEND_T
+
+ SUBROUTINE MPI_GREQUEST_START_T(query_fn,free_fn,cancel_fn,extra_state,&
+ request,ierror)
+ EXTERNAL query_fn
+ EXTERNAL free_fn
+ EXTERNAL cancel_fn
+ <type> extra_state<dims>
INTEGER request
INTEGER ierror
- EXTERNAL MPI_BSEND_INIT
- CALL MPI_BSEND_INIT(buf,count,datatype,dest,tag,comm,request,&
- ierror)
- END SUBROUTINE MPI_BSEND_INIT_T
+ EXTERNAL MPI_GREQUEST_START
+ CALL MPI_GREQUEST_START(query_fn,free_fn,cancel_fn,extra_state,&
+ request,ierror)
+ END SUBROUTINE MPI_GREQUEST_START_T
- SUBROUTINE MPI_REDUCE_SCATTER_BLOCK_T(sendbuf,recvbuf,recvcount,datatype,&
- op,comm,ierror)
+ SUBROUTINE MPI_EXSCAN_T(sendbuf,recvbuf,count,datatype,op,comm,ierror)
<type> sendbuf<dims>
<type1> recvbuf<dims1>
- INTEGER recvcount
+ INTEGER count
INTEGER datatype
INTEGER op
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_REDUCE_SCATTER_BLOCK
- CALL MPI_REDUCE_SCATTER_BLOCK(sendbuf,recvbuf,recvcount,datatype,&
- op,comm,ierror)
- END SUBROUTINE MPI_REDUCE_SCATTER_BLOCK_T
+ EXTERNAL MPI_EXSCAN
+ CALL MPI_EXSCAN(sendbuf,recvbuf,count,datatype,op,comm,ierror)
+ END SUBROUTINE MPI_EXSCAN_T
SUBROUTINE MPI_NEIGHBOR_ALLGATHER_T(sendbuf,sendcount,sendtype,recvbuf,&
recvcount,recvtype,comm,ierror)
@@ -1293,67 +1072,60 @@
recvcount,recvtype,comm,ierror)
END SUBROUTINE MPI_NEIGHBOR_ALLGATHER_T
- SUBROUTINE MPI_GATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,ierror)
+ SUBROUTINE MPI_ALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
+ recvcounts,rdispls,recvtype,comm,ierror)
<type> sendbuf<dims>
- INTEGER sendcount
+ INTEGER sendcounts(*)
+ INTEGER sdispls(*)
INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcount
+ INTEGER recvcounts(*)
+ INTEGER rdispls(*)
INTEGER recvtype
- INTEGER root
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_GATHER
- CALL MPI_GATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,ierror)
- END SUBROUTINE MPI_GATHER_T
+ EXTERNAL MPI_ALLTOALLV
+ CALL MPI_ALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
+ recvcounts,rdispls,recvtype,comm,ierror)
+ END SUBROUTINE MPI_ALLTOALLV_T
- SUBROUTINE MPI_REDUCE_T(sendbuf,recvbuf,count,datatype,op,root,comm,&
- ierror)
- <type> sendbuf<dims>
- <type1> recvbuf<dims1>
- INTEGER count
- INTEGER datatype
- INTEGER op
- INTEGER root
+ SUBROUTINE MPI_ATTR_PUT_T(comm,keyval,attribute_val,ierror)
INTEGER comm
+ INTEGER keyval
+ <type> attribute_val<dims>
INTEGER ierror
- EXTERNAL MPI_REDUCE
- CALL MPI_REDUCE(sendbuf,recvbuf,count,datatype,op,root,comm,&
- ierror)
- END SUBROUTINE MPI_REDUCE_T
+ EXTERNAL MPI_ATTR_PUT
+ CALL MPI_ATTR_PUT(comm,keyval,attribute_val,ierror)
+ END SUBROUTINE MPI_ATTR_PUT_T
- SUBROUTINE MPI_WIN_CREATE_T(base,size,disp_unit,info,comm,win,ierror)
- <type> base<dims>
- INTEGER(KIND=MPI_ADDRESS_KIND) size
- INTEGER disp_unit
- INTEGER info
- INTEGER comm
- INTEGER win
+ SUBROUTINE MPI_KEYVAL_CREATE_T(copy_fn,delete_fn,keyval,extra_state,&
+ ierror)
+ EXTERNAL copy_fn
+ EXTERNAL delete_fn
+ INTEGER keyval
+ <type> extra_state<dims>
INTEGER ierror
- EXTERNAL MPI_WIN_CREATE
- CALL MPI_WIN_CREATE(base,size,disp_unit,info,comm,win,ierror)
- END SUBROUTINE MPI_WIN_CREATE_T
+ EXTERNAL MPI_KEYVAL_CREATE
+ CALL MPI_KEYVAL_CREATE(copy_fn,delete_fn,keyval,extra_state,&
+ ierror)
+ END SUBROUTINE MPI_KEYVAL_CREATE_T
- SUBROUTINE MPI_SCATTERV_T(sendbuf,sendcounts,displs,sendtype,recvbuf,&
- recvcount,recvtype,root,comm,ierror)
- <type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER displs(*)
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcount
- INTEGER recvtype
- INTEGER root
+ SUBROUTINE MPI_RECV_INIT_T(buf,count,datatype,source,tag,comm,request,&
+ ierror)
+ <type> buf<dims>
+ INTEGER count
+ INTEGER datatype
+ INTEGER source
+ INTEGER tag
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_SCATTERV
- CALL MPI_SCATTERV(sendbuf,sendcounts,displs,sendtype,recvbuf,&
- recvcount,recvtype,root,comm,ierror)
- END SUBROUTINE MPI_SCATTERV_T
+ EXTERNAL MPI_RECV_INIT
+ CALL MPI_RECV_INIT(buf,count,datatype,source,tag,comm,request,&
+ ierror)
+ END SUBROUTINE MPI_RECV_INIT_T
- SUBROUTINE MPI_IRSEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
+ SUBROUTINE MPI_ISSEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
<type> buf<dims>
INTEGER count
INTEGER datatype
@@ -1362,39 +1134,41 @@
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_IRSEND
- CALL MPI_IRSEND(buf,count,datatype,dest,tag,comm,request,ierror)
- END SUBROUTINE MPI_IRSEND_T
+ EXTERNAL MPI_ISSEND
+ CALL MPI_ISSEND(buf,count,datatype,dest,tag,comm,request,ierror)
+ END SUBROUTINE MPI_ISSEND_T
- SUBROUTINE MPI_IREDUCE_SCATTER_BLOCK_T(sendbuf,recvbuf,recvcount,&
- datatype,op,comm,request,ierror)
- <type> sendbuf<dims>
- <type1> recvbuf<dims1>
- INTEGER recvcount
+ SUBROUTINE MPI_COMPARE_AND_SWAP_T(origin_addr,compare_addr,result_addr,&
+ datatype,target_rank,target_disp,win,ierror)
+ <type> origin_addr<dims>
+ <type1> compare_addr<dims1>
+ <type2> result_addr<dims2>
INTEGER datatype
- INTEGER op
- INTEGER comm
- INTEGER request
+ INTEGER target_rank
+ INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
+ INTEGER win
INTEGER ierror
- EXTERNAL MPI_IREDUCE_SCATTER_BLOCK
- CALL MPI_IREDUCE_SCATTER_BLOCK(sendbuf,recvbuf,recvcount,&
- datatype,op,comm,request,ierror)
- END SUBROUTINE MPI_IREDUCE_SCATTER_BLOCK_T
+ EXTERNAL MPI_COMPARE_AND_SWAP
+ CALL MPI_COMPARE_AND_SWAP(origin_addr,compare_addr,result_addr,&
+ datatype,target_rank,target_disp,win,ierror)
+ END SUBROUTINE MPI_COMPARE_AND_SWAP_T
- SUBROUTINE MPI_ISCAN_T(sendbuf,recvbuf,count,datatype,op,comm,request,&
- ierror)
+ SUBROUTINE MPI_IALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,request,ierror)
<type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER count
- INTEGER datatype
- INTEGER op
+ INTEGER recvcounts(*)
+ INTEGER displs(*)
+ INTEGER recvtype
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_ISCAN
- CALL MPI_ISCAN(sendbuf,recvbuf,count,datatype,op,comm,request,&
- ierror)
- END SUBROUTINE MPI_ISCAN_T
+ EXTERNAL MPI_IALLGATHERV
+ CALL MPI_IALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,request,ierror)
+ END SUBROUTINE MPI_IALLGATHERV_T
SUBROUTINE MPI_TYPE_CREATE_KEYVAL_T(type_copy_attr_fn,&
type_delete_attr_fn,type_keyval,extra_state,ierror)
@@ -1408,90 +1182,81 @@
type_delete_attr_fn,type_keyval,extra_state,ierror)
END SUBROUTINE MPI_TYPE_CREATE_KEYVAL_T
- SUBROUTINE MPI_PUT_T(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,win,&
- ierror)
- <type> origin_addr<dims>
- INTEGER origin_count
- INTEGER origin_datatype
- INTEGER target_rank
- INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
- INTEGER target_count
- INTEGER target_datatype
- INTEGER win
- INTEGER ierror
- EXTERNAL MPI_PUT
- CALL MPI_PUT(origin_addr,origin_count,origin_datatype,&
- target_rank,target_disp,target_count,target_datatype,win,&
- ierror)
- END SUBROUTINE MPI_PUT_T
-
- SUBROUTINE MPI_WIN_SET_ATTR_T(win,win_keyval,attribute_val,ierror)
- INTEGER win
- INTEGER win_keyval
- <type> attribute_val<dims>
- INTEGER ierror
- EXTERNAL MPI_WIN_SET_ATTR
- CALL MPI_WIN_SET_ATTR(win,win_keyval,attribute_val,ierror)
- END SUBROUTINE MPI_WIN_SET_ATTR_T
-
- SUBROUTINE MPI_EXSCAN_T(sendbuf,recvbuf,count,datatype,op,comm,ierror)
+ SUBROUTINE MPI_ALLTOALLW_T(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
+ recvcounts,rdispls,recvtypes,comm,ierror)
<type> sendbuf<dims>
+ INTEGER sendcounts(*)
+ INTEGER sdispls(*)
+ INTEGER sendtypes(*)
<type1> recvbuf<dims1>
- INTEGER count
- INTEGER datatype
- INTEGER op
+ INTEGER recvcounts(*)
+ INTEGER rdispls(*)
+ INTEGER recvtypes(*)
INTEGER comm
INTEGER ierror
- EXTERNAL MPI_EXSCAN
- CALL MPI_EXSCAN(sendbuf,recvbuf,count,datatype,op,comm,ierror)
- END SUBROUTINE MPI_EXSCAN_T
+ EXTERNAL MPI_ALLTOALLW
+ CALL MPI_ALLTOALLW(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
+ recvcounts,rdispls,recvtypes,comm,ierror)
+ END SUBROUTINE MPI_ALLTOALLW_T
- SUBROUTINE MPI_ISCATTER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,request,ierror)
+ SUBROUTINE MPI_SENDRECV_T(sendbuf,sendcount,sendtype,dest,sendtag,&
+ recvbuf,recvcount,recvtype,source,recvtag,comm,status,ierror)
<type> sendbuf<dims>
INTEGER sendcount
INTEGER sendtype
+ INTEGER dest
+ INTEGER sendtag
<type1> recvbuf<dims1>
INTEGER recvcount
INTEGER recvtype
- INTEGER root
+ INTEGER source
+ INTEGER recvtag
INTEGER comm
- INTEGER request
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- EXTERNAL MPI_ISCATTER
- CALL MPI_ISCATTER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
- recvtype,root,comm,request,ierror)
- END SUBROUTINE MPI_ISCATTER_T
+ EXTERNAL MPI_SENDRECV
+ CALL MPI_SENDRECV(sendbuf,sendcount,sendtype,dest,sendtag,&
+ recvbuf,recvcount,recvtype,source,recvtag,comm,status,&
+ ierror)
+ END SUBROUTINE MPI_SENDRECV_T
- SUBROUTINE MPI_NEIGHBOR_ALLTOALLW_T(sendbuf,sendcounts,sdispls,sendtypes,&
- recvbuf,recvcounts,rdispls,recvtypes,comm,ierror)
- <type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER(KIND=MPI_ADDRESS_KIND) sdispls(*)
- INTEGER sendtypes(*)
- <type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER(KIND=MPI_ADDRESS_KIND) rdispls(*)
- INTEGER recvtypes(*)
+ SUBROUTINE MPI_WIN_DETACH_T(win,base,ierror)
+ INTEGER win
+ <type> base<dims>
+ INTEGER ierror
+ EXTERNAL MPI_WIN_DETACH
+ CALL MPI_WIN_DETACH(win,base,ierror)
+ END SUBROUTINE MPI_WIN_DETACH_T
+
+ SUBROUTINE MPI_BSEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
+ ierror)
+ <type> buf<dims>
+ INTEGER count
+ INTEGER datatype
+ INTEGER dest
+ INTEGER tag
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_NEIGHBOR_ALLTOALLW
- CALL MPI_NEIGHBOR_ALLTOALLW(sendbuf,sendcounts,sdispls,sendtypes,&
- recvbuf,recvcounts,rdispls,recvtypes,comm,ierror)
- END SUBROUTINE MPI_NEIGHBOR_ALLTOALLW_T
+ EXTERNAL MPI_BSEND_INIT
+ CALL MPI_BSEND_INIT(buf,count,datatype,dest,tag,comm,request,&
+ ierror)
+ END SUBROUTINE MPI_BSEND_INIT_T
- SUBROUTINE MPI_ALLREDUCE_T(sendbuf,recvbuf,count,datatype,op,comm,ierror)
+ SUBROUTINE MPI_ISCAN_T(sendbuf,recvbuf,count,datatype,op,comm,request,&
+ ierror)
<type> sendbuf<dims>
<type1> recvbuf<dims1>
INTEGER count
INTEGER datatype
INTEGER op
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_ALLREDUCE
- CALL MPI_ALLREDUCE(sendbuf,recvbuf,count,datatype,op,comm,ierror)
- END SUBROUTINE MPI_ALLREDUCE_T
+ EXTERNAL MPI_ISCAN
+ CALL MPI_ISCAN(sendbuf,recvbuf,count,datatype,op,comm,request,&
+ ierror)
+ END SUBROUTINE MPI_ISCAN_T
SUBROUTINE MPI_WIN_GET_ATTR_T(win,win_keyval,attribute_val,flag,ierror)
INTEGER win
@@ -1503,47 +1268,38 @@
CALL MPI_WIN_GET_ATTR(win,win_keyval,attribute_val,flag,ierror)
END SUBROUTINE MPI_WIN_GET_ATTR_T
- SUBROUTINE MPI_ALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
- recvcounts,rdispls,recvtype,comm,ierror)
- <type> sendbuf<dims>
- INTEGER sendcounts(*)
- INTEGER sdispls(*)
- INTEGER sendtype
- <type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER rdispls(*)
- INTEGER recvtype
+ SUBROUTINE MPI_IBCAST_T(buffer,count,datatype,root,comm,request,ierror)
+ <type> buffer<dims>
+ INTEGER count
+ INTEGER datatype
+ INTEGER root
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_ALLTOALLV
- CALL MPI_ALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,recvbuf,&
- recvcounts,rdispls,recvtype,comm,ierror)
- END SUBROUTINE MPI_ALLTOALLV_T
+ EXTERNAL MPI_IBCAST
+ CALL MPI_IBCAST(buffer,count,datatype,root,comm,request,ierror)
+ END SUBROUTINE MPI_IBCAST_T
- SUBROUTINE MPI_SENDRECV_REPLACE_T(buf,count,datatype,dest,sendtag,source,&
- recvtag,comm,status,ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER dest
- INTEGER sendtag
- INTEGER source
- INTEGER recvtag
+ SUBROUTINE MPI_COMM_SET_ATTR_T(comm,comm_keyval,attribute_val,ierror)
INTEGER comm
- INTEGER status(MPI_STATUS_SIZE)
+ INTEGER comm_keyval
+ <type> attribute_val<dims>
INTEGER ierror
- EXTERNAL MPI_SENDRECV_REPLACE
- CALL MPI_SENDRECV_REPLACE(buf,count,datatype,dest,sendtag,source,&
- recvtag,comm,status,ierror)
- END SUBROUTINE MPI_SENDRECV_REPLACE_T
+ EXTERNAL MPI_COMM_SET_ATTR
+ CALL MPI_COMM_SET_ATTR(comm,comm_keyval,attribute_val,ierror)
+ END SUBROUTINE MPI_COMM_SET_ATTR_T
- SUBROUTINE MPI_WIN_DETACH_T(win,base,ierror)
- INTEGER win
+ SUBROUTINE MPI_WIN_CREATE_T(base,size,disp_unit,info,comm,win,ierror)
<type> base<dims>
+ INTEGER(KIND=MPI_ADDRESS_KIND) size
+ INTEGER disp_unit
+ INTEGER info
+ INTEGER comm
+ INTEGER win
INTEGER ierror
- EXTERNAL MPI_WIN_DETACH
- CALL MPI_WIN_DETACH(win,base,ierror)
- END SUBROUTINE MPI_WIN_DETACH_T
+ EXTERNAL MPI_WIN_CREATE
+ CALL MPI_WIN_CREATE(base,size,disp_unit,info,comm,win,ierror)
+ END SUBROUTINE MPI_WIN_CREATE_T
SUBROUTINE MPI_INEIGHBOR_ALLGATHER_T(sendbuf,sendcount,sendtype,recvbuf,&
recvcount,recvtype,comm,request,ierror)
@@ -1561,32 +1317,58 @@
recvcount,recvtype,comm,request,ierror)
END SUBROUTINE MPI_INEIGHBOR_ALLGATHER_T
- SUBROUTINE MPI_RGET_ACCUMULATE_T(origin_addr,origin_count,&
- origin_datatype,result_addr,result_count,result_datatype,&
- target_rank,target_disp,target_count,target_datatype,op,win,&
+ SUBROUTINE MPI_ADDRESS_T(location,address,ierror)
+ <type> location<dims>
+ INTEGER(KIND=MPI_ADDRESS_KIND) address
+ INTEGER ierror
+ EXTERNAL MPI_ADDRESS
+ CALL MPI_ADDRESS(location,address,ierror)
+ END SUBROUTINE MPI_ADDRESS_T
+
+ SUBROUTINE MPI_ALLOC_MEM_T(size,info,baseptr,ierror)
+ INTEGER(KIND=MPI_ADDRESS_KIND) size
+ INTEGER info
+ <type> baseptr<dims>
+ INTEGER ierror
+ EXTERNAL MPI_ALLOC_MEM
+ CALL MPI_ALLOC_MEM(size,info,baseptr,ierror)
+ END SUBROUTINE MPI_ALLOC_MEM_T
+
+ SUBROUTINE MPI_RGET_T(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,win,&
request,ierror)
<type> origin_addr<dims>
INTEGER origin_count
INTEGER origin_datatype
- <type1> result_addr<dims1>
- INTEGER result_count
- INTEGER result_datatype
INTEGER target_rank
INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
INTEGER target_count
INTEGER target_datatype
- INTEGER op
INTEGER win
INTEGER request
INTEGER ierror
- EXTERNAL MPI_RGET_ACCUMULATE
- CALL MPI_RGET_ACCUMULATE(origin_addr,origin_count,&
- origin_datatype,result_addr,result_count,result_datatype,&
- target_rank,target_disp,target_count,target_datatype,op,&
- win,request,ierror)
- END SUBROUTINE MPI_RGET_ACCUMULATE_T
+ EXTERNAL MPI_RGET
+ CALL MPI_RGET(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,win,&
+ request,ierror)
+ END SUBROUTINE MPI_RGET_T
- SUBROUTINE MPI_ISSEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
+ SUBROUTINE MPI_WIN_ALLOCATE_T(size,disp_unit,info,comm,baseptr,win,&
+ ierror)
+ INTEGER(KIND=MPI_ADDRESS_KIND) size
+ INTEGER disp_unit
+ INTEGER info
+ INTEGER comm
+ <type> baseptr<dims>
+ INTEGER win
+ INTEGER ierror
+ EXTERNAL MPI_WIN_ALLOCATE
+ CALL MPI_WIN_ALLOCATE(size,disp_unit,info,comm,baseptr,win,&
+ ierror)
+ END SUBROUTINE MPI_WIN_ALLOCATE_T
+
+ SUBROUTINE MPI_RSEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
+ ierror)
<type> buf<dims>
INTEGER count
INTEGER datatype
@@ -1595,106 +1377,198 @@
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_ISSEND
- CALL MPI_ISSEND(buf,count,datatype,dest,tag,comm,request,ierror)
- END SUBROUTINE MPI_ISSEND_T
+ EXTERNAL MPI_RSEND_INIT
+ CALL MPI_RSEND_INIT(buf,count,datatype,dest,tag,comm,request,&
+ ierror)
+ END SUBROUTINE MPI_RSEND_INIT_T
- SUBROUTINE MPI_SCAN_T(sendbuf,recvbuf,count,datatype,op,comm,ierror)
+ SUBROUTINE MPI_ALLGATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,ierror)
<type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
<type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER comm
+ INTEGER ierror
+ EXTERNAL MPI_ALLGATHER
+ CALL MPI_ALLGATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,ierror)
+ END SUBROUTINE MPI_ALLGATHER_T
+
+ SUBROUTINE MPI_SENDRECV_REPLACE_T(buf,count,datatype,dest,sendtag,source,&
+ recvtag,comm,status,ierror)
+ <type> buf<dims>
INTEGER count
INTEGER datatype
+ INTEGER dest
+ INTEGER sendtag
+ INTEGER source
+ INTEGER recvtag
+ INTEGER comm
+ INTEGER status(MPI_STATUS_SIZE)
+ INTEGER ierror
+ EXTERNAL MPI_SENDRECV_REPLACE
+ CALL MPI_SENDRECV_REPLACE(buf,count,datatype,dest,sendtag,source,&
+ recvtag,comm,status,ierror)
+ END SUBROUTINE MPI_SENDRECV_REPLACE_T
+
+ SUBROUTINE MPI_IREDUCE_SCATTER_T(sendbuf,recvbuf,recvcounts,datatype,op,&
+ comm,request,ierror)
+ <type> sendbuf<dims>
+ <type1> recvbuf<dims1>
+ INTEGER recvcounts(*)
+ INTEGER datatype
INTEGER op
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_SCAN
- CALL MPI_SCAN(sendbuf,recvbuf,count,datatype,op,comm,ierror)
- END SUBROUTINE MPI_SCAN_T
+ EXTERNAL MPI_IREDUCE_SCATTER
+ CALL MPI_IREDUCE_SCATTER(sendbuf,recvbuf,recvcounts,datatype,op,&
+ comm,request,ierror)
+ END SUBROUTINE MPI_IREDUCE_SCATTER_T
- SUBROUTINE MPI_IBSEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
- <type> buf<dims>
+ SUBROUTINE MPI_REDUCE_T(sendbuf,recvbuf,count,datatype,op,root,comm,&
+ ierror)
+ <type> sendbuf<dims>
+ <type1> recvbuf<dims1>
INTEGER count
INTEGER datatype
- INTEGER dest
- INTEGER tag
+ INTEGER op
+ INTEGER root
+ INTEGER comm
+ INTEGER ierror
+ EXTERNAL MPI_REDUCE
+ CALL MPI_REDUCE(sendbuf,recvbuf,count,datatype,op,root,comm,&
+ ierror)
+ END SUBROUTINE MPI_REDUCE_T
+
+ SUBROUTINE MPI_ALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcounts(*)
+ INTEGER displs(*)
+ INTEGER recvtype
+ INTEGER comm
+ INTEGER ierror
+ EXTERNAL MPI_ALLGATHERV
+ CALL MPI_ALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcounts,displs,recvtype,comm,ierror)
+ END SUBROUTINE MPI_ALLGATHERV_T
+
+ SUBROUTINE MPI_IGATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,request,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER root
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_IBSEND
- CALL MPI_IBSEND(buf,count,datatype,dest,tag,comm,request,ierror)
- END SUBROUTINE MPI_IBSEND_T
+ EXTERNAL MPI_IGATHER
+ CALL MPI_IGATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,request,ierror)
+ END SUBROUTINE MPI_IGATHER_T
+
+ SUBROUTINE MPI_ATTR_GET_T(comm,keyval,attribute_val,flag,ierror)
+ INTEGER comm
+ INTEGER keyval
+ <type> attribute_val<dims>
+ LOGICAL flag
+ INTEGER ierror
+ EXTERNAL MPI_ATTR_GET
+ CALL MPI_ATTR_GET(comm,keyval,attribute_val,flag,ierror)
+ END SUBROUTINE MPI_ATTR_GET_T
+
+ SUBROUTINE MPI_GET_T(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,win,&
+ ierror)
+ <type> origin_addr<dims>
+ INTEGER origin_count
+ INTEGER origin_datatype
+ INTEGER target_rank
+ INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
+ INTEGER target_count
+ INTEGER target_datatype
+ INTEGER win
+ INTEGER ierror
+ EXTERNAL MPI_GET
+ CALL MPI_GET(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,win,&
+ ierror)
+ END SUBROUTINE MPI_GET_T
- SUBROUTINE MPI_MRECV_T(buf,count,datatype,message,status,ierror)
+ SUBROUTINE MPI_IMRECV_T(buf,count,datatype,message,request,ierror)
<type> buf<dims>
INTEGER count
INTEGER datatype
INTEGER message
- INTEGER status(MPI_STATUS_SIZE)
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_MRECV
- CALL MPI_MRECV(buf,count,datatype,message,status,ierror)
- END SUBROUTINE MPI_MRECV_T
+ EXTERNAL MPI_IMRECV
+ CALL MPI_IMRECV(buf,count,datatype,message,request,ierror)
+ END SUBROUTINE MPI_IMRECV_T
- SUBROUTINE MPI_KEYVAL_CREATE_T(copy_fn,delete_fn,keyval,extra_state,&
- ierror)
- EXTERNAL copy_fn
- EXTERNAL delete_fn
- INTEGER keyval
- <type> extra_state<dims>
+ SUBROUTINE MPI_SEND_T(buf,count,datatype,dest,tag,comm,ierror)
+ <type> buf<dims>
+ INTEGER count
+ INTEGER datatype
+ INTEGER dest
+ INTEGER tag
+ INTEGER comm
INTEGER ierror
- EXTERNAL MPI_KEYVAL_CREATE
- CALL MPI_KEYVAL_CREATE(copy_fn,delete_fn,keyval,extra_state,&
- ierror)
- END SUBROUTINE MPI_KEYVAL_CREATE_T
+ EXTERNAL MPI_SEND
+ CALL MPI_SEND(buf,count,datatype,dest,tag,comm,ierror)
+ END SUBROUTINE MPI_SEND_T
- SUBROUTINE MPI_IRECV_T(buf,count,datatype,source,tag,comm,request,ierror)
+ SUBROUTINE MPI_RSEND_T(buf,count,datatype,dest,tag,comm,ierror)
<type> buf<dims>
INTEGER count
INTEGER datatype
- INTEGER source
+ INTEGER dest
INTEGER tag
INTEGER comm
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_IRECV
- CALL MPI_IRECV(buf,count,datatype,source,tag,comm,request,ierror)
- END SUBROUTINE MPI_IRECV_T
+ EXTERNAL MPI_RSEND
+ CALL MPI_RSEND(buf,count,datatype,dest,tag,comm,ierror)
+ END SUBROUTINE MPI_RSEND_T
- SUBROUTINE MPI_INEIGHBOR_ALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,request,ierror)
+ SUBROUTINE MPI_SCAN_T(sendbuf,recvbuf,count,datatype,op,comm,ierror)
<type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER displs(*)
- INTEGER recvtype
+ INTEGER count
+ INTEGER datatype
+ INTEGER op
INTEGER comm
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_INEIGHBOR_ALLGATHERV
- CALL MPI_INEIGHBOR_ALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,request,ierror)
- END SUBROUTINE MPI_INEIGHBOR_ALLGATHERV_T
+ EXTERNAL MPI_SCAN
+ CALL MPI_SCAN(sendbuf,recvbuf,count,datatype,op,comm,ierror)
+ END SUBROUTINE MPI_SCAN_T
- SUBROUTINE MPI_IREDUCE_SCATTER_T(sendbuf,recvbuf,recvcounts,datatype,op,&
- comm,request,ierror)
+ SUBROUTINE MPI_REDUCE_SCATTER_BLOCK_T(sendbuf,recvbuf,recvcount,datatype,&
+ op,comm,ierror)
<type> sendbuf<dims>
<type1> recvbuf<dims1>
- INTEGER recvcounts(*)
+ INTEGER recvcount
INTEGER datatype
INTEGER op
INTEGER comm
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_IREDUCE_SCATTER
- CALL MPI_IREDUCE_SCATTER(sendbuf,recvbuf,recvcounts,datatype,op,&
- comm,request,ierror)
- END SUBROUTINE MPI_IREDUCE_SCATTER_T
+ EXTERNAL MPI_REDUCE_SCATTER_BLOCK
+ CALL MPI_REDUCE_SCATTER_BLOCK(sendbuf,recvbuf,recvcount,datatype,&
+ op,comm,ierror)
+ END SUBROUTINE MPI_REDUCE_SCATTER_BLOCK_T
- SUBROUTINE MPI_ACCUMULATE_T(origin_addr,origin_count,origin_datatype,&
+ SUBROUTINE MPI_RACCUMULATE_T(origin_addr,origin_count,origin_datatype,&
target_rank,target_disp,target_count,target_datatype,op,win,&
- ierror)
+ request,ierror)
<type> origin_addr<dims>
INTEGER origin_count
INTEGER origin_datatype
@@ -1704,251 +1578,377 @@
INTEGER target_datatype
INTEGER op
INTEGER win
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_ACCUMULATE
- CALL MPI_ACCUMULATE(origin_addr,origin_count,origin_datatype,&
+ EXTERNAL MPI_RACCUMULATE
+ CALL MPI_RACCUMULATE(origin_addr,origin_count,origin_datatype,&
target_rank,target_disp,target_count,target_datatype,op,&
- win,ierror)
- END SUBROUTINE MPI_ACCUMULATE_T
+ win,request,ierror)
+ END SUBROUTINE MPI_RACCUMULATE_T
- SUBROUTINE MPI_REDUCE_LOCAL_T(inbuf,inoutbuf,count,datatype,op,ierror)
- <type> inbuf<dims>
- <type1> inoutbuf<dims1>
+ SUBROUTINE MPI_IEXSCAN_T(sendbuf,recvbuf,count,datatype,op,comm,request,&
+ ierror)
+ <type> sendbuf<dims>
+ <type1> recvbuf<dims1>
INTEGER count
INTEGER datatype
INTEGER op
+ INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_REDUCE_LOCAL
- CALL MPI_REDUCE_LOCAL(inbuf,inoutbuf,count,datatype,op,ierror)
- END SUBROUTINE MPI_REDUCE_LOCAL_T
+ EXTERNAL MPI_IEXSCAN
+ CALL MPI_IEXSCAN(sendbuf,recvbuf,count,datatype,op,comm,request,&
+ ierror)
+ END SUBROUTINE MPI_IEXSCAN_T
- SUBROUTINE MPI_SSEND_T(buf,count,datatype,dest,tag,comm,ierror)
+ SUBROUTINE MPI_IALLGATHER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,request,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER comm
+ INTEGER request
+ INTEGER ierror
+ EXTERNAL MPI_IALLGATHER
+ CALL MPI_IALLGATHER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,request,ierror)
+ END SUBROUTINE MPI_IALLGATHER_T
+
+ SUBROUTINE MPI_SEND_INIT_T(buf,count,datatype,dest,tag,comm,request,&
+ ierror)
<type> buf<dims>
INTEGER count
INTEGER datatype
INTEGER dest
INTEGER tag
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_SSEND
- CALL MPI_SSEND(buf,count,datatype,dest,tag,comm,ierror)
- END SUBROUTINE MPI_SSEND_T
+ EXTERNAL MPI_SEND_INIT
+ CALL MPI_SEND_INIT(buf,count,datatype,dest,tag,comm,request,&
+ ierror)
+ END SUBROUTINE MPI_SEND_INIT_T
- SUBROUTINE MPI_WIN_CREATE_KEYVAL_T(win_copy_attr_fn,win_delete_attr_fn,&
- win_keyval,extra_state,ierror)
- EXTERNAL win_copy_attr_fn
- EXTERNAL win_delete_attr_fn
- INTEGER win_keyval
- <type> extra_state<dims>
+ SUBROUTINE MPI_INEIGHBOR_ALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcount,recvtype,comm,request,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_WIN_CREATE_KEYVAL
- CALL MPI_WIN_CREATE_KEYVAL(win_copy_attr_fn,win_delete_attr_fn,&
- win_keyval,extra_state,ierror)
- END SUBROUTINE MPI_WIN_CREATE_KEYVAL_T
+ EXTERNAL MPI_INEIGHBOR_ALLTOALL
+ CALL MPI_INEIGHBOR_ALLTOALL(sendbuf,sendcount,sendtype,recvbuf,&
+ recvcount,recvtype,comm,request,ierror)
+ END SUBROUTINE MPI_INEIGHBOR_ALLTOALL_T
- SUBROUTINE MPI_BUFFER_ATTACH_T(buffer,size,ierror)
- <type> buffer<dims>
- INTEGER size
+ SUBROUTINE MPI_ISCATTER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,request,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER root
+ INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_BUFFER_ATTACH
- CALL MPI_BUFFER_ATTACH(buffer,size,ierror)
- END SUBROUTINE MPI_BUFFER_ATTACH_T
+ EXTERNAL MPI_ISCATTER
+ CALL MPI_ISCATTER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,request,ierror)
+ END SUBROUTINE MPI_ISCATTER_T
- SUBROUTINE MPI_ATTR_GET_T(comm,keyval,attribute_val,flag,ierror)
+ SUBROUTINE MPI_INEIGHBOR_ALLTOALLW_T(sendbuf,sendcounts,sdispls,&
+ sendtypes,recvbuf,recvcounts,rdispls,recvtypes,comm,request,&
+ ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcounts(*)
+ INTEGER(KIND=MPI_ADDRESS_KIND) sdispls(*)
+ INTEGER sendtypes(*)
+ <type1> recvbuf<dims1>
+ INTEGER recvcounts(*)
+ INTEGER(KIND=MPI_ADDRESS_KIND) rdispls(*)
+ INTEGER recvtypes(*)
INTEGER comm
- INTEGER keyval
- <type> attribute_val<dims>
- LOGICAL flag
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_ATTR_GET
- CALL MPI_ATTR_GET(comm,keyval,attribute_val,flag,ierror)
- END SUBROUTINE MPI_ATTR_GET_T
+ EXTERNAL MPI_INEIGHBOR_ALLTOALLW
+ CALL MPI_INEIGHBOR_ALLTOALLW(sendbuf,sendcounts,sdispls,&
+ sendtypes,recvbuf,recvcounts,rdispls,recvtypes,comm,&
+ request,ierror)
+ END SUBROUTINE MPI_INEIGHBOR_ALLTOALLW_T
- SUBROUTINE MPI_WIN_ATTACH_T(win,base,size,ierror)
- INTEGER win
- <type> base<dims>
- INTEGER(KIND=MPI_ADDRESS_KIND) size
+ SUBROUTINE MPI_COMM_CREATE_KEYVAL_T(comm_copy_attr_fn,&
+ comm_delete_attr_fn,comm_keyval,extra_state,ierror)
+ EXTERNAL comm_copy_attr_fn
+ EXTERNAL comm_delete_attr_fn
+ INTEGER comm_keyval
+ <type> extra_state<dims>
INTEGER ierror
- EXTERNAL MPI_WIN_ATTACH
- CALL MPI_WIN_ATTACH(win,base,size,ierror)
- END SUBROUTINE MPI_WIN_ATTACH_T
+ EXTERNAL MPI_COMM_CREATE_KEYVAL
+ CALL MPI_COMM_CREATE_KEYVAL(comm_copy_attr_fn,&
+ comm_delete_attr_fn,comm_keyval,extra_state,ierror)
+ END SUBROUTINE MPI_COMM_CREATE_KEYVAL_T
- SUBROUTINE MPI_ALLOC_MEM_T(size,info,baseptr,ierror)
- INTEGER(KIND=MPI_ADDRESS_KIND) size
- INTEGER info
- <type> baseptr<dims>
+ SUBROUTINE MPI_SCATTER_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER root
+ INTEGER comm
INTEGER ierror
- EXTERNAL MPI_ALLOC_MEM
- CALL MPI_ALLOC_MEM(size,info,baseptr,ierror)
- END SUBROUTINE MPI_ALLOC_MEM_T
+ EXTERNAL MPI_SCATTER
+ CALL MPI_SCATTER(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,root,comm,ierror)
+ END SUBROUTINE MPI_SCATTER_T
- SUBROUTINE MPI_IALLREDUCE_T(sendbuf,recvbuf,count,datatype,op,comm,&
- request,ierror)
+ SUBROUTINE MPI_SCATTERV_T(sendbuf,sendcounts,displs,sendtype,recvbuf,&
+ recvcount,recvtype,root,comm,ierror)
<type> sendbuf<dims>
+ INTEGER sendcounts(*)
+ INTEGER displs(*)
+ INTEGER sendtype
<type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER root
+ INTEGER comm
+ INTEGER ierror
+ EXTERNAL MPI_SCATTERV
+ CALL MPI_SCATTERV(sendbuf,sendcounts,displs,sendtype,recvbuf,&
+ recvcount,recvtype,root,comm,ierror)
+ END SUBROUTINE MPI_SCATTERV_T
+
+ SUBROUTINE MPI_IRSEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
+ <type> buf<dims>
INTEGER count
INTEGER datatype
- INTEGER op
+ INTEGER dest
+ INTEGER tag
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_IALLREDUCE
- CALL MPI_IALLREDUCE(sendbuf,recvbuf,count,datatype,op,comm,&
- request,ierror)
- END SUBROUTINE MPI_IALLREDUCE_T
+ EXTERNAL MPI_IRSEND
+ CALL MPI_IRSEND(buf,count,datatype,dest,tag,comm,request,ierror)
+ END SUBROUTINE MPI_IRSEND_T
- SUBROUTINE MPI_REDUCE_SCATTER_T(sendbuf,recvbuf,recvcounts,datatype,op,&
- comm,ierror)
- <type> sendbuf<dims>
- <type1> recvbuf<dims1>
- INTEGER recvcounts(*)
+ SUBROUTINE MPI_FETCH_AND_OP_T(origin_addr,result_addr,datatype,&
+ target_rank,target_disp,op,win,ierror)
+ <type> origin_addr<dims>
+ <type1> result_addr<dims1>
INTEGER datatype
+ INTEGER target_rank
+ INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
INTEGER op
- INTEGER comm
+ INTEGER win
INTEGER ierror
- EXTERNAL MPI_REDUCE_SCATTER
- CALL MPI_REDUCE_SCATTER(sendbuf,recvbuf,recvcounts,datatype,op,&
- comm,ierror)
- END SUBROUTINE MPI_REDUCE_SCATTER_T
+ EXTERNAL MPI_FETCH_AND_OP
+ CALL MPI_FETCH_AND_OP(origin_addr,result_addr,datatype,&
+ target_rank,target_disp,op,win,ierror)
+ END SUBROUTINE MPI_FETCH_AND_OP_T
- SUBROUTINE MPI_NEIGHBOR_ALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,ierror)
+ SUBROUTINE MPI_IREDUCE_T(sendbuf,recvbuf,count,datatype,op,root,comm,&
+ request,ierror)
<type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
<type1> recvbuf<dims1>
- INTEGER recvcounts(*)
- INTEGER displs(*)
- INTEGER recvtype
+ INTEGER count
+ INTEGER datatype
+ INTEGER op
+ INTEGER root
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_NEIGHBOR_ALLGATHERV
- CALL MPI_NEIGHBOR_ALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,ierror)
- END SUBROUTINE MPI_NEIGHBOR_ALLGATHERV_T
+ EXTERNAL MPI_IREDUCE
+ CALL MPI_IREDUCE(sendbuf,recvbuf,count,datatype,op,root,comm,&
+ request,ierror)
+ END SUBROUTINE MPI_IREDUCE_T
- SUBROUTINE MPI_IALLTOALLW_T(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
- recvcounts,rdispls,recvtypes,comm,request,ierror)
+ SUBROUTINE MPI_NEIGHBOR_ALLTOALLV_T(sendbuf,sendcounts,sdispls,sendtype,&
+ recvbuf,recvcounts,rdispls,recvtype,comm,ierror)
<type> sendbuf<dims>
INTEGER sendcounts(*)
INTEGER sdispls(*)
- INTEGER sendtypes(*)
+ INTEGER sendtype
<type1> recvbuf<dims1>
INTEGER recvcounts(*)
INTEGER rdispls(*)
- INTEGER recvtypes(*)
+ INTEGER recvtype
INTEGER comm
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_IALLTOALLW
- CALL MPI_IALLTOALLW(sendbuf,sendcounts,sdispls,sendtypes,recvbuf,&
- recvcounts,rdispls,recvtypes,comm,request,ierror)
- END SUBROUTINE MPI_IALLTOALLW_T
+ EXTERNAL MPI_NEIGHBOR_ALLTOALLV
+ CALL MPI_NEIGHBOR_ALLTOALLV(sendbuf,sendcounts,sdispls,sendtype,&
+ recvbuf,recvcounts,rdispls,recvtype,comm,ierror)
+ END SUBROUTINE MPI_NEIGHBOR_ALLTOALLV_T
- SUBROUTINE MPI_ISEND_T(buf,count,datatype,dest,tag,comm,request,ierror)
+ SUBROUTINE MPI_RECV_T(buf,count,datatype,source,tag,comm,status,ierror)
<type> buf<dims>
INTEGER count
INTEGER datatype
- INTEGER dest
+ INTEGER source
INTEGER tag
INTEGER comm
- INTEGER request
+ INTEGER status(MPI_STATUS_SIZE)
INTEGER ierror
- EXTERNAL MPI_ISEND
- CALL MPI_ISEND(buf,count,datatype,dest,tag,comm,request,ierror)
- END SUBROUTINE MPI_ISEND_T
+ EXTERNAL MPI_RECV
+ CALL MPI_RECV(buf,count,datatype,source,tag,comm,status,ierror)
+ END SUBROUTINE MPI_RECV_T
- SUBROUTINE MPI_SEND_T(buf,count,datatype,dest,tag,comm,ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER dest
- INTEGER tag
+ SUBROUTINE MPI_IGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,recvcounts,&
+ displs,recvtype,root,comm,request,ierror)
+ <type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
+ <type1> recvbuf<dims1>
+ INTEGER recvcounts(*)
+ INTEGER displs(*)
+ INTEGER recvtype
+ INTEGER root
INTEGER comm
+ INTEGER request
INTEGER ierror
- EXTERNAL MPI_SEND
- CALL MPI_SEND(buf,count,datatype,dest,tag,comm,ierror)
- END SUBROUTINE MPI_SEND_T
+ EXTERNAL MPI_IGATHERV
+ CALL MPI_IGATHERV(sendbuf,sendcount,sendtype,recvbuf,recvcounts,&
+ displs,recvtype,root,comm,request,ierror)
+ END SUBROUTINE MPI_IGATHERV_T
- SUBROUTINE MPI_GET_ADDRESS_T(location,address,ierror)
- <type> location<dims>
- INTEGER(KIND=MPI_ADDRESS_KIND) address
+ SUBROUTINE MPI_TYPE_GET_ATTR_T(datatype,type_keyval,attribute_val,flag,&
+ ierror)
+ INTEGER datatype
+ INTEGER type_keyval
+ <type> attribute_val<dims>
+ LOGICAL flag
INTEGER ierror
- EXTERNAL MPI_GET_ADDRESS
- CALL MPI_GET_ADDRESS(location,address,ierror)
- END SUBROUTINE MPI_GET_ADDRESS_T
+ EXTERNAL MPI_TYPE_GET_ATTR
+ CALL MPI_TYPE_GET_ATTR(datatype,type_keyval,attribute_val,flag,&
+ ierror)
+ END SUBROUTINE MPI_TYPE_GET_ATTR_T
- SUBROUTINE MPI_ADDRESS_T(location,address,ierror)
- <type> location<dims>
- INTEGER(KIND=MPI_ADDRESS_KIND) address
+ SUBROUTINE MPI_ACCUMULATE_T(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,op,win,&
+ ierror)
+ <type> origin_addr<dims>
+ INTEGER origin_count
+ INTEGER origin_datatype
+ INTEGER target_rank
+ INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
+ INTEGER target_count
+ INTEGER target_datatype
+ INTEGER op
+ INTEGER win
INTEGER ierror
- EXTERNAL MPI_ADDRESS
- CALL MPI_ADDRESS(location,address,ierror)
- END SUBROUTINE MPI_ADDRESS_T
+ EXTERNAL MPI_ACCUMULATE
+ CALL MPI_ACCUMULATE(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,op,&
+ win,ierror)
+ END SUBROUTINE MPI_ACCUMULATE_T
- SUBROUTINE MPI_IMRECV_T(buf,count,datatype,message,request,ierror)
- <type> buf<dims>
- INTEGER count
- INTEGER datatype
- INTEGER message
- INTEGER request
+ SUBROUTINE MPI_WIN_SET_ATTR_T(win,win_keyval,attribute_val,ierror)
+ INTEGER win
+ INTEGER win_keyval
+ <type> attribute_val<dims>
INTEGER ierror
- EXTERNAL MPI_IMRECV
- CALL MPI_IMRECV(buf,count,datatype,message,request,ierror)
- END SUBROUTINE MPI_IMRECV_T
+ EXTERNAL MPI_WIN_SET_ATTR
+ CALL MPI_WIN_SET_ATTR(win,win_keyval,attribute_val,ierror)
+ END SUBROUTINE MPI_WIN_SET_ATTR_T
- SUBROUTINE MPI_GET_ACCUMULATE_T(origin_addr,origin_count,origin_datatype,&
- result_addr,result_count,result_datatype,target_rank,&
- target_disp,target_count,target_datatype,op,win,ierror)
+ SUBROUTINE MPI_PUT_T(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,win,&
+ ierror)
<type> origin_addr<dims>
INTEGER origin_count
INTEGER origin_datatype
- <type1> result_addr<dims1>
- INTEGER result_count
- INTEGER result_datatype
INTEGER target_rank
INTEGER(KIND=MPI_ADDRESS_KIND) target_disp
INTEGER target_count
INTEGER target_datatype
- INTEGER op
INTEGER win
INTEGER ierror
- EXTERNAL MPI_GET_ACCUMULATE
- CALL MPI_GET_ACCUMULATE(origin_addr,origin_count,origin_datatype,&
- result_addr,result_count,result_datatype,target_rank,&
- target_disp,target_count,target_datatype,op,win,ierror)
- END SUBROUTINE MPI_GET_ACCUMULATE_T
+ EXTERNAL MPI_PUT
+ CALL MPI_PUT(origin_addr,origin_count,origin_datatype,&
+ target_rank,target_disp,target_count,target_datatype,win,&
+ ierror)
+ END SUBROUTINE MPI_PUT_T
- SUBROUTINE MPI_IEXSCAN_T(sendbuf,recvbuf,count,datatype,op,comm,request,&
- ierror)
+ SUBROUTINE MPI_IALLTOALL_T(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,request,ierror)
<type> sendbuf<dims>
+ INTEGER sendcount
+ INTEGER sendtype
<type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER recvtype
+ INTEGER comm
+ INTEGER request
+ INTEGER ierror
+ EXTERNAL MPI_IALLTOALL
+ CALL MPI_IALLTOALL(sendbuf,sendcount,sendtype,recvbuf,recvcount,&
+ recvtype,comm,request,ierror)
+ END SUBROUTINE MPI_IALLTOALL_T
+
+ SUBROUTINE MPI_REDUCE_LOCAL_T(inbuf,inoutbuf,count,datatype,op,ierror)
+ <type> inbuf<dims>
+ <type1> inoutbuf<dims1>
+ INTEGER count
+ INTEGER datatype
+ INTEGER op
+ INTEGER ierror
+ EXTERNAL MPI_REDUCE_LOCAL
+ CALL MPI_REDUCE_LOCAL(inbuf,inoutbuf,count,datatype,op,ierror)
+ END SUBROUTINE MPI_REDUCE_LOCAL_T
+
+ SUBROUTINE MPI_BSEND_T(buf,count,datatype,dest,tag,comm,ierror)
+ <type> buf<dims>
INTEGER count
INTEGER datatype
+ INTEGER dest
+ INTEGER tag
+ INTEGER comm
+ INTEGER ierror
+ EXTERNAL MPI_BSEND
+ CALL MPI_BSEND(buf,count,datatype,dest,tag,comm,ierror)
+ END SUBROUTINE MPI_BSEND_T
+
+ SUBROUTINE MPI_IREDUCE_SCATTER_BLOCK_T(sendbuf,recvbuf,recvcount,&
+ datatype,op,comm,request,ierror)
+ <type> sendbuf<dims>
+ <type1> recvbuf<dims1>
+ INTEGER recvcount
+ INTEGER datatype
INTEGER op
INTEGER comm
INTEGER request
INTEGER ierror
- EXTERNAL MPI_IEXSCAN
- CALL MPI_IEXSCAN(sendbuf,recvbuf,count,datatype,op,comm,request,&
- ierror)
- END SUBROUTINE MPI_IEXSCAN_T
+ EXTERNAL MPI_IREDUCE_SCATTER_BLOCK
+ CALL MPI_IREDUCE_SCATTER_BLOCK(sendbuf,recvbuf,recvcount,&
+ datatype,op,comm,request,ierror)
+ END SUBROUTINE MPI_IREDUCE_SCATTER_BLOCK_T
- SUBROUTINE MPI_IALLGATHERV_T(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,request,ierror)
+ SUBROUTINE MPI_NEIGHBOR_ALLTOALLW_T(sendbuf,sendcounts,sdispls,sendtypes,&
+ recvbuf,recvcounts,rdispls,recvtypes,comm,ierror)
<type> sendbuf<dims>
- INTEGER sendcount
- INTEGER sendtype
+ INTEGER sendcounts(*)
+ INTEGER(KIND=MPI_ADDRESS_KIND) sdispls(*)
+ INTEGER sendtypes(*)
<type1> recvbuf<dims1>
INTEGER recvcounts(*)
- INTEGER displs(*)
- INTEGER recvtype
+ INTEGER(KIND=MPI_ADDRESS_KIND) rdispls(*)
+ INTEGER recvtypes(*)
INTEGER comm
- INTEGER request
INTEGER ierror
- EXTERNAL MPI_IALLGATHERV
- CALL MPI_IALLGATHERV(sendbuf,sendcount,sendtype,recvbuf,&
- recvcounts,displs,recvtype,comm,request,ierror)
- END SUBROUTINE MPI_IALLGATHERV_T
+ EXTERNAL MPI_NEIGHBOR_ALLTOALLW
+ CALL MPI_NEIGHBOR_ALLTOALLW(sendbuf,sendcounts,sdispls,sendtypes,&
+ recvbuf,recvcounts,rdispls,recvtypes,comm,ierror)
+ END SUBROUTINE MPI_NEIGHBOR_ALLTOALLW_T
END MODULE MPI_t1_s
diff --git a/src/binding/fortran/use_mpi_f08/Makefile.mk b/src/binding/fortran/use_mpi_f08/Makefile.mk
index 6afe79f..52a6703 100644
--- a/src/binding/fortran/use_mpi_f08/Makefile.mk
+++ b/src/binding/fortran/use_mpi_f08/Makefile.mk
@@ -41,16 +41,16 @@ mpi_fc_modules += \
src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD)
f08_module_files = \
- src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/$(MPI_F08_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/$(MPI_F08_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/$(MPI_F08_COMPILE_CONSTANTS_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/$(MPI_F08_TYPES_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/$(PMPI_F08_NAME).$(MOD)
BUILT_SOURCES += $(f08_module_files)
@@ -761,6 +761,30 @@ mpi_fc_sources += \
F08_COMPILE_MODS = $(LTFCCOMPILE)
F08_COMPILE_MODS += $(FCMODOUTFLAG)src/binding/fortran/use_mpi_f08
+src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
+ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
+ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
+ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo
+ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
+
+src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
+ @if test -f $@; then :; else \
+ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp' 1 2 13 15; \
+ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock 2>/dev/null; then \
+ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
+ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; \
+ else \
+ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; do sleep 1; done; \
+ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; exit $$?; \
+ fi; \
+ fi
+
+CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
+
src/binding/fortran/use_mpi_f08/mpi_c_interface.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
@rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface.tmp
@touch src/binding/fortran/use_mpi_f08/mpi_c_interface.tmp
@@ -785,77 +809,29 @@ CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/mpi_c_interface.stamp \
src/binding/fortran/use_mpi_f08/mpi_c_interface.tmp
-src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 src/binding/fortran/use_mpi_f08/mpi_f08.stamp
- @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
- @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
- $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo
- @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
-
-src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
- @if test -f $@; then :; else \
- trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp' 1 2 13 15; \
- if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock 2>/dev/null; then \
- rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
- $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
- rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; \
- else \
- while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; do sleep 1; done; \
- test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; exit $$?; \
- fi; \
- fi
-
-CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
-
-src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90
- @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
- @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
- $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo
- @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
-
-src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
- @if test -f $@; then :; else \
- trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp' 1 2 13 15; \
- if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock 2>/dev/null; then \
- rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
- $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
- rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; \
- else \
- while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; do sleep 1; done; \
- test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; exit $$?; \
- fi; \
- fi
-
-CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
-
-src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
- @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
- @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
- $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo
- @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
+src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+ @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
+ @touch src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
+ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo
+ @mv src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
-src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
+src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo : src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
@if test -f $@; then :; else \
- trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp' 1 2 13 15; \
- if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock 2>/dev/null; then \
- rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
- $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
- rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; \
+ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp' 1 2 13 15; \
+ if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock 2>/dev/null; then \
+ rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
+ rmdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; \
else \
- while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; do sleep 1; done; \
- test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; exit $$?; \
+ while test -d src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; do sleep 1; done; \
+ test -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; exit $$?; \
fi; \
fi
-CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
+CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo \
+ src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp \
+ src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
src/binding/fortran/use_mpi_f08/mpi_f08.stamp: src/binding/fortran/use_mpi_f08/mpi_f08.f90 src/binding/fortran/use_mpi_f08/pmpi_f08.stamp
@rm -f src/binding/fortran/use_mpi_f08/mpi_f08.tmp
@@ -881,77 +857,53 @@ CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_F08_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/mpi_f08.stamp \
src/binding/fortran/use_mpi_f08/mpi_f08.tmp
-src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
- @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
- @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
- $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo
- @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
-
-src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp
- @if test -f $@; then :; else \
- trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp' 1 2 13 15; \
- if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock 2>/dev/null; then \
- rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
- $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; \
- rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; \
- else \
- while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc-lock; do sleep 1; done; \
- test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp; exit $$?; \
- fi; \
- fi
-
-CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_CDESC_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.lo \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.stamp \
- src/binding/fortran/use_mpi_f08/mpi_c_interface_cdesc.tmp
-
-src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
- @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
- @touch src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
- $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo
- @mv src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
+src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
+ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
+ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
+ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo
+ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
-src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo : src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
+src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp
@if test -f $@; then :; else \
- trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp' 1 2 13 15; \
- if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock 2>/dev/null; then \
- rm -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
- $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; \
- rmdir src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; \
+ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp' 1 2 13 15; \
+ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock 2>/dev/null; then \
+ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; \
+ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; \
else \
- while test -d src/binding/fortran/use_mpi_f08/mpi_f08_link_constants-lock; do sleep 1; done; \
- test -f src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp; exit $$?; \
+ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf-lock; do sleep 1; done; \
+ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp; exit $$?; \
fi; \
fi
-CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_F08_LINK_CONSTANTS_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.lo \
- src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp \
- src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.tmp
+CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_NOBUF_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.lo \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.stamp \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.tmp
-src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.stamp
- @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
- @touch src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
- $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo
- @mv src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90
+ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
+ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
+ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_types.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo
+ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
-src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo : src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp
@if test -f $@; then :; else \
- trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp' 1 2 13 15; \
- if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock 2>/dev/null; then \
- rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
- $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
- rmdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; \
+ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp' 1 2 13 15; \
+ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock 2>/dev/null; then \
+ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; \
+ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; \
else \
- while test -d src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; do sleep 1; done; \
- test -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; exit $$?; \
+ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_types-lock; do sleep 1; done; \
+ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp; exit $$?; \
fi; \
fi
-CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
- src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo \
- src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp \
- src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
+CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_TYPES_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.lo \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.stamp \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_types.tmp
src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.f90 src/binding/fortran/use_mpi_f08/mpi_f08_types.stamp
@rm -f src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.tmp
@@ -1001,6 +953,54 @@ CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_F08_TYPES_NAME).$(MOD) \
src/binding/fortran/use_mpi_f08/mpi_f08_types.stamp \
src/binding/fortran/use_mpi_f08/mpi_f08_types.tmp
+src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp: src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 src/binding/fortran/use_mpi_f08/mpi_f08.stamp
+ @rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
+ @touch src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
+ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 -o src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo
+ @mv src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
+
+src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo : src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp
+ @if test -f $@; then :; else \
+ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp' 1 2 13 15; \
+ if mkdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock 2>/dev/null; then \
+ rm -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; \
+ rmdir src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; \
+ else \
+ while test -d src/binding/fortran/use_mpi_f08/mpi_c_interface_glue-lock; do sleep 1; done; \
+ test -f src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp; exit $$?; \
+ fi; \
+ fi
+
+CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_C_INTERFACE_GLUE_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.lo \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.stamp \
+ src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.tmp
+
+src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp: src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 src/binding/fortran/use_mpi_f08/mpi_f08_compile_constants.stamp
+ @rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
+ @touch src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
+ $(mod_verbose)$(F08_COMPILE_MODS) -c `test -f 'src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90' || echo '$(srcdir)/'`src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.f90 -o src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo
+ @mv src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+
+src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo : src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp
+ @if test -f $@; then :; else \
+ trap 'rm -rf src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp' 1 2 13 15; \
+ if mkdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock 2>/dev/null; then \
+ rm -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; \
+ rmdir src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; \
+ else \
+ while test -d src/binding/fortran/use_mpi_f08/mpi_f08_callbacks-lock; do sleep 1; done; \
+ test -f src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp; exit $$?; \
+ fi; \
+ fi
+
+CLEANFILES += src/binding/fortran/use_mpi_f08/$(MPI_F08_CALLBACKS_NAME).$(MOD) \
+ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.lo \
+ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.stamp \
+ src/binding/fortran/use_mpi_f08/mpi_f08_callbacks.tmp
+
src/binding/fortran/use_mpi_f08/pmpi_f08.stamp: src/binding/fortran/use_mpi_f08/pmpi_f08.f90 src/binding/fortran/use_mpi_f08/mpi_f08_link_constants.stamp
@rm -f src/binding/fortran/use_mpi_f08/pmpi_f08.tmp
@touch src/binding/fortran/use_mpi_f08/pmpi_f08.tmp
diff --git a/src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90 b/src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90
index 74d0f07..bad02fa 100644
--- a/src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90
+++ b/src/binding/fortran/use_mpi_f08/mpi_c_interface_glue.f90
@@ -13,16 +13,16 @@ implicit none
public :: MPIR_Fortran_string_f2c
public :: MPIR_Fortran_string_c2f
-public :: MPIR_Comm_copy_attr_f08_proxy
+public :: MPII_Comm_copy_attr_f08_proxy
public :: MPIR_Comm_delete_attr_f08_proxy
public :: MPIR_Type_copy_attr_f08_proxy
public :: MPIR_Type_delete_attr_f08_proxy
public :: MPIR_Win_copy_attr_f08_proxy
public :: MPIR_Win_delete_attr_f08_proxy
-public :: MPIR_Keyval_set_proxy
+public :: MPII_Keyval_set_proxy
public :: MPIR_Grequest_set_lang_fortran
-! Bind to C's enum MPIR_AttrType in mpi_attr.h
+! Bind to C's enum MPIR_Attr_type in mpir_attr_generic.h
enum, bind(C)
enumerator :: MPIR_ATTR_PTR = 0
enumerator :: MPIR_ATTR_AINT = 1
@@ -31,15 +31,15 @@ end enum
interface
-subroutine MPIR_Keyval_set_proxy(keyval, attr_copy_proxy, attr_delete_proxy) bind(C, name="MPIR_Keyval_set_proxy")
+subroutine MPII_Keyval_set_proxy(keyval, attr_copy_proxy, attr_delete_proxy) bind(C, name="MPII_Keyval_set_proxy")
use :: iso_c_binding, only : c_int, c_funptr
integer(c_int), value, intent(in) :: keyval
type(c_funptr), value, intent(in) :: attr_copy_proxy, attr_delete_proxy
! The subroutine is implemented in attrutil.c on the C side
-end subroutine MPIR_Keyval_set_proxy
+end subroutine MPII_Keyval_set_proxy
! Just need to tag the lang is Fortran, so it is fine to bind to *_lang_f77
-subroutine MPIR_Grequest_set_lang_fortran(request) bind(C, name="MPIR_Grequest_set_lang_f77")
+subroutine MPIR_Grequest_set_lang_fortran(request) bind(C, name="MPII_Grequest_set_lang_f77")
use :: mpi_c_interface_types, only : c_Request
integer(c_Request), value, intent(in) :: request
! The subroutine is implemented in mpir_request.c on the C side
@@ -97,7 +97,7 @@ subroutine MPIR_Fortran_string_c2f(cstring, fstring)
end do
end subroutine MPIR_Fortran_string_c2f
-function MPIR_Comm_copy_attr_f08_proxy (user_function, oldcomm, comm_keyval, extra_state, &
+function MPII_Comm_copy_attr_f08_proxy (user_function, oldcomm, comm_keyval, extra_state, &
attr_type, attribute_val_in, attribute_val_out, flag) result(ierror)
use :: iso_c_binding, only : c_int, c_intptr_t
@@ -135,7 +135,7 @@ function MPIR_Comm_copy_attr_f08_proxy (user_function, oldcomm, comm_keyval, ext
flag = merge(1, 0, flag_f)
ierror = ierror_f
-end function MPIR_Comm_copy_attr_f08_proxy
+end function MPII_Comm_copy_attr_f08_proxy
function MPIR_Comm_delete_attr_f08_proxy (user_function, comm, comm_keyval, attr_type, &
attribute_val, extra_state) result(ierror)
diff --git a/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 b/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90
index 41ec748..a50befe 100644
--- a/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90
+++ b/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90
@@ -629,7 +629,7 @@ end function MPIR_Comm_free_keyval_c
! Not bind to MPI_Comm_get_attr directly due to the attr_type tag
function MPIR_Comm_get_attr_c(comm, comm_keyval, attribute_val, flag, attr_type) &
- bind(C, name="MPIR_CommGetAttr") result(ierror)
+ bind(C, name="MPII_Comm_get_attr") result(ierror)
use, intrinsic :: iso_c_binding, only : c_int
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_types, only : c_Comm
@@ -696,7 +696,7 @@ function MPIR_Comm_remote_size_c(comm, size) &
end function MPIR_Comm_remote_size_c
function MPIR_Comm_set_attr_c(comm, comm_keyval, attribute_val, attr_type) &
- bind(C, name="MPIR_CommSetAttr") result(ierror)
+ bind(C, name="MPII_Comm_set_attr") result(ierror)
use, intrinsic :: iso_c_binding, only : c_int
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_types, only : c_Comm
@@ -952,7 +952,7 @@ function MPIR_Type_free_keyval_c(type_keyval) &
end function MPIR_Type_free_keyval_c
function MPIR_Type_get_attr_c(datatype, type_keyval, attribute_val, flag, attr_type) &
- bind(C, name="MPIR_TypeGetAttr") result(ierror)
+ bind(C, name="MPII_Type_get_attr") result(ierror)
use, intrinsic :: iso_c_binding, only : c_int
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_types, only : c_Datatype
@@ -979,7 +979,7 @@ function MPIR_Type_get_name_c(datatype, type_name, resultlen) &
end function MPIR_Type_get_name_c
function MPIR_Type_set_attr_c(datatype, type_keyval, attribute_val, attr_type) &
- bind(C, name="MPIR_TypeSetAttr") result(ierror)
+ bind(C, name="MPII_Type_set_attr") result(ierror)
use, intrinsic :: iso_c_binding, only : c_int
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_types, only : c_Datatype
@@ -1033,7 +1033,7 @@ function MPIR_Win_free_keyval_c(win_keyval) &
end function MPIR_Win_free_keyval_c
function MPIR_Win_get_attr_c(win, win_keyval, attribute_val, flag, attr_type) &
- bind(C, name="MPIR_WinGetAttr") result(ierror)
+ bind(C, name="MPII_Win_get_attr") result(ierror)
use, intrinsic :: iso_c_binding, only : c_int
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_types, only : c_Win
@@ -1060,7 +1060,7 @@ function MPIR_Win_get_name_c(win, win_name, resultlen) &
end function MPIR_Win_get_name_c
function MPIR_Win_set_attr_c(win, win_keyval, attribute_val, attr_type) &
- bind(C, name="MPIR_WinSetAttr") result(ierror)
+ bind(C, name="MPII_Win_set_attr") result(ierror)
use, intrinsic :: iso_c_binding, only : c_int
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_types, only : c_Win
diff --git a/src/binding/fortran/use_mpi_f08/mpi_f08_types.f90 b/src/binding/fortran/use_mpi_f08/mpi_f08_types.f90
index f669123..f8b0fa8 100644
--- a/src/binding/fortran/use_mpi_f08/mpi_f08_types.f90
+++ b/src/binding/fortran/use_mpi_f08/mpi_f08_types.f90
@@ -1,3 +1,8 @@
+! -*- Mode: Fortran; -*-
+!
+! (C) 2014 by Argonne National Laboratory.
+! See COPYRIGHT in top-level directory.
+!
! MPI 3 data types for Fortran.
! From A.1.2, pp 676-677
! Note added MPI_Message type not in the spec by mistake
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/.state-cache b/src/binding/fortran/use_mpi_f08/wrappers_c/.state-cache
index d07ca34..5fc12c1 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/.state-cache
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/.state-cache
@@ -1,370 +1,370 @@
<dir>
-<file name="ssend_cdesc.c" info="1447301216"/>
-<file name="neighbor_alltoall_cdesc.c" info="1447301216"/>
-<file name="file_iread_cdesc.c" info="1447301216"/>
-<file name="file_iwrite_cdesc.c" info="1447301216"/>
-<file name="allreduce_cdesc.c" info="1447301216"/>
-<file name="sendrecv_replace_cdesc.c" info="1447301216"/>
-<file name="file_write_ordered_end_cdesc.c" info="1447301216"/>
-<file name="file_write_at_all_cdesc.c" info="1447301216"/>
-<file name="file_write_at_all_end_cdesc.c" info="1447301216"/>
-<file name="scatter_cdesc.c" info="1447301216"/>
-<file name="exscan_cdesc.c" info="1447301216"/>
-<file name="file_read_all_begin_cdesc.c" info="1447301216"/>
-<file name="file_write_cdesc.c" info="1447301216"/>
-<file name="file_write_all_begin_cdesc.c" info="1447301216"/>
-<file name="unpack_external_cdesc.c" info="1447301216"/>
-<file name="iallreduce_cdesc.c" info="1447301216"/>
-<file name="ireduce_scatter_block_cdesc.c" info="1447301216"/>
-<file name="free_mem_cdesc.c" info="1447301216"/>
-<file name="file_write_shared_cdesc.c" info="1447301216"/>
-<file name="file_iwrite_all_cdesc.c" info="1447301216"/>
-<file name="neighbor_allgatherv_cdesc.c" info="1447301216"/>
-<file name="ireduce_cdesc.c" info="1447301216"/>
-<file name="file_iread_at_cdesc.c" info="1447301216"/>
-<file name="file_read_ordered_cdesc.c" info="1447301216"/>
-<file name="iscan_cdesc.c" info="1447301216"/>
-<file name="mrecv_cdesc.c" info="1447301216"/>
-<file name="utils.c" info="1447123141"/>
-<file name="file_read_at_all_end_cdesc.c" info="1447301216"/>
-<file name="recv_cdesc.c" info="1447301216"/>
-<file name="igatherv_cdesc.c" info="1447301216"/>
-<file name="reduce_scatter_block_cdesc.c" info="1447301216"/>
-<file name="raccumulate_cdesc.c" info="1447301216"/>
-<file name="reduce_local_cdesc.c" info="1447301216"/>
-<file name="ineighbor_alltoall_cdesc.c" info="1447301216"/>
-<file name="file_read_at_all_begin_cdesc.c" info="1447301216"/>
-<file name="win_attach_cdesc.c" info="1447301216"/>
-<file name="neighbor_alltoallv_cdesc.c" info="1447301216"/>
-<file name="ialltoallv_cdesc.c" info="1447301216"/>
-<file name="scan_cdesc.c" info="1447301216"/>
-<file name="iscatter_cdesc.c" info="1447301216"/>
-<file name="file_iwrite_shared_cdesc.c" info="1447301216"/>
-<file name="file_read_at_all_cdesc.c" info="1447301216"/>
-<file name="file_read_cdesc.c" info="1447301216"/>
-<file name="sendrecv_cdesc.c" info="1447301216"/>
-<file name="bsend_cdesc.c" info="1447301216"/>
-<file name="file_iread_at_all_cdesc.c" info="1447301216"/>
-<file name="rget_accumulate_cdesc.c" info="1447301216"/>
-<file name="ibsend_cdesc.c" info="1447301216"/>
-<file name="fetch_and_op_cdesc.c" info="1447301216"/>
-<file name="neighbor_allgather_cdesc.c" info="1447301216"/>
-<file name="pack_cdesc.c" info="1447301216"/>
-<file name="file_read_all_cdesc.c" info="1447301216"/>
-<file name="allgatherv_cdesc.c" info="1447301216"/>
-<file name="ialltoall_cdesc.c" info="1447301216"/>
-<file name="pack_external_cdesc.c" info="1447301216"/>
-<file name="file_write_ordered_begin_cdesc.c" info="1447301216"/>
-<file name="ineighbor_allgather_cdesc.c" info="1447301216"/>
-<file name="allgather_cdesc.c" info="1447301216"/>
-<file name="rput_cdesc.c" info="1447301216"/>
-<file name="win_detach_cdesc.c" info="1447301216"/>
-<file name="file_read_shared_cdesc.c" info="1447301216"/>
-<file name="file_write_ordered_cdesc.c" info="1447301216"/>
-<file name="file_iread_shared_cdesc.c" info="1447301216"/>
-<file name="comm_spawn_multiple_c.c" info="1447123141"/>
-<file name="send_cdesc.c" info="1447301216"/>
-<file name="ireduce_scatter_cdesc.c" info="1447301216"/>
-<file name="iexscan_cdesc.c" info="1447301216"/>
-<file name="igather_cdesc.c" info="1447301216"/>
-<file name="f_sync_reg_c.c" info="1447123141"/>
-<file name="alltoallv_cdesc.c" info="1447301216"/>
-<file name="ibcast_cdesc.c" info="1447301216"/>
-<file name="iscatterv_cdesc.c" info="1447301216"/>
-<file name="file_write_all_end_cdesc.c" info="1447301216"/>
-<file name="irsend_cdesc.c" info="1447301216"/>
-<file name="alltoall_cdesc.c" info="1447301216"/>
-<file name="rget_cdesc.c" info="1447301216"/>
-<file name="buffer_attach_cdesc.c" info="1447301216"/>
-<file name="accumulate_cdesc.c" info="1447301216"/>
-<file name="get_address_cdesc.c" info="1447301216"/>
-<file name="alltoallw_cdesc.c" info="1447301216"/>
-<file name="bcast_cdesc.c" info="1447301216"/>
-<file name="comm_spawn_c.c" info="1447123141"/>
-<file name="compare_and_swap_cdesc.c" info="1447301216"/>
-<file name="irecv_cdesc.c" info="1447301216"/>
-<file name="ineighbor_alltoallv_cdesc.c" info="1447301216"/>
-<file name="reduce_cdesc.c" info="1447301216"/>
-<file name="neighbor_alltoallw_cdesc.c" info="1447301216"/>
-<file name="get_accumulate_cdesc.c" info="1447301216"/>
-<file name="ialltoallw_cdesc.c" info="1447301216"/>
-<file name="file_read_at_cdesc.c" info="1447301216"/>
-<file name="iallgather_cdesc.c" info="1447301216"/>
-<file name="ineighbor_allgatherv_cdesc.c" info="1447301216"/>
-<file name="gatherv_cdesc.c" info="1447301216"/>
-<file name="reduce_scatter_cdesc.c" info="1447301216"/>
-<file name="file_write_at_cdesc.c" info="1447301216"/>
-<file name="file_iwrite_at_cdesc.c" info="1447301216"/>
-<file name="recv_init_cdesc.c" info="1447301216"/>
-<file name="file_iread_all_cdesc.c" info="1447301216"/>
-<file name="bsend_init_cdesc.c" info="1447301216"/>
-<file name="win_create_cdesc.c" info="1447301216"/>
-<file name="cdesc.h" info="1447301216"/>
-<file name="file_iwrite_at_all_cdesc.c" info="1447301216"/>
-<file name="issend_cdesc.c" info="1447301216"/>
-<file name="file_read_ordered_begin_cdesc.c" info="1447301216"/>
-<file name="file_write_all_cdesc.c" info="1447301216"/>
-<file name="iallgatherv_cdesc.c" info="1447301216"/>
-<file name="ssend_init_cdesc.c" info="1447301216"/>
-<file name="put_cdesc.c" info="1447301216"/>
-<file name="unpack_cdesc.c" info="1447301216"/>
-<file name="file_read_all_end_cdesc.c" info="1447301216"/>
-<file name="ineighbor_alltoallw_cdesc.c" info="1447301216"/>
-<file name="rsend_init_cdesc.c" info="1447301216"/>
-<file name="get_cdesc.c" info="1447301216"/>
-<file name="isend_cdesc.c" info="1447301216"/>
-<file name="gather_cdesc.c" info="1447301216"/>
-<file name="send_init_cdesc.c" info="1447301216"/>
-<file name="file_read_ordered_end_cdesc.c" info="1447301216"/>
-<file name="cdesc.c" info="1447301216"/>
-<file name="file_write_at_all_begin_cdesc.c" info="1447301216"/>
-<file name="imrecv_cdesc.c" info="1447301216"/>
-<file name="rsend_cdesc.c" info="1447301216"/>
-<file name="scatterv_cdesc.c" info="1447301216"/>
+<file name="file_write_at_all_begin_cdesc.c" info="1479053539"/>
+<file name="bsend_cdesc.c" info="1479053539"/>
+<file name="ialltoallv_cdesc.c" info="1479053539"/>
+<file name="get_cdesc.c" info="1479053539"/>
+<file name="exscan_cdesc.c" info="1479053539"/>
+<file name="sendrecv_replace_cdesc.c" info="1479053539"/>
+<file name="neighbor_allgatherv_cdesc.c" info="1479053539"/>
+<file name="file_iwrite_shared_cdesc.c" info="1479053539"/>
+<file name="file_write_at_all_end_cdesc.c" info="1479053539"/>
+<file name="file_write_shared_cdesc.c" info="1479053539"/>
+<file name="put_cdesc.c" info="1479053539"/>
+<file name="f_sync_reg_c.c" info="1478973152"/>
+<file name="win_create_cdesc.c" info="1479053539"/>
+<file name="file_write_at_all_cdesc.c" info="1479053539"/>
+<file name="allgatherv_cdesc.c" info="1479053539"/>
+<file name="file_write_at_cdesc.c" info="1479053539"/>
+<file name="imrecv_cdesc.c" info="1479053539"/>
+<file name="reduce_scatter_cdesc.c" info="1479053539"/>
+<file name="rsend_init_cdesc.c" info="1479053539"/>
+<file name="bsend_init_cdesc.c" info="1479053539"/>
+<file name="iallreduce_cdesc.c" info="1479053539"/>
+<file name="neighbor_alltoallw_cdesc.c" info="1479053539"/>
+<file name="reduce_scatter_block_cdesc.c" info="1479053539"/>
+<file name="file_iread_at_all_cdesc.c" info="1479053539"/>
+<file name="send_cdesc.c" info="1479053539"/>
+<file name="irsend_cdesc.c" info="1479053539"/>
+<file name="ineighbor_alltoallv_cdesc.c" info="1479053539"/>
+<file name="file_iread_cdesc.c" info="1479053539"/>
+<file name="comm_spawn_c.c" info="1478973152"/>
+<file name="ireduce_cdesc.c" info="1479053539"/>
+<file name="scatterv_cdesc.c" info="1479053539"/>
+<file name="file_read_ordered_cdesc.c" info="1479053539"/>
+<file name="rsend_cdesc.c" info="1479053539"/>
+<file name="file_iread_at_cdesc.c" info="1479053539"/>
+<file name="file_write_cdesc.c" info="1479053539"/>
+<file name="bcast_cdesc.c" info="1479053539"/>
+<file name="file_write_ordered_cdesc.c" info="1479053539"/>
+<file name="file_read_all_end_cdesc.c" info="1479053539"/>
+<file name="ireduce_scatter_block_cdesc.c" info="1479053539"/>
+<file name="pack_cdesc.c" info="1479053539"/>
+<file name="neighbor_alltoallv_cdesc.c" info="1479053539"/>
+<file name="alltoallv_cdesc.c" info="1479053539"/>
+<file name="unpack_external_cdesc.c" info="1479053539"/>
+<file name="reduce_cdesc.c" info="1479053539"/>
+<file name="file_write_all_end_cdesc.c" info="1479053539"/>
+<file name="alltoallw_cdesc.c" info="1479053539"/>
+<file name="pack_external_cdesc.c" info="1479053539"/>
+<file name="mrecv_cdesc.c" info="1479053539"/>
+<file name="neighbor_allgather_cdesc.c" info="1479053539"/>
+<file name="ireduce_scatter_cdesc.c" info="1479053539"/>
+<file name="file_iwrite_cdesc.c" info="1479053539"/>
+<file name="allreduce_cdesc.c" info="1479053539"/>
+<file name="get_accumulate_cdesc.c" info="1479053539"/>
+<file name="file_read_all_cdesc.c" info="1479053539"/>
+<file name="ineighbor_alltoallw_cdesc.c" info="1479053539"/>
+<file name="file_read_at_all_begin_cdesc.c" info="1479053539"/>
+<file name="win_detach_cdesc.c" info="1479053539"/>
+<file name="gather_cdesc.c" info="1479053539"/>
+<file name="free_mem_cdesc.c" info="1479053539"/>
+<file name="neighbor_alltoall_cdesc.c" info="1479053539"/>
+<file name="iallgather_cdesc.c" info="1479053539"/>
+<file name="ialltoall_cdesc.c" info="1479053539"/>
+<file name="rget_cdesc.c" info="1479053539"/>
+<file name="buffer_attach_cdesc.c" info="1479053539"/>
+<file name="issend_cdesc.c" info="1479053539"/>
+<file name="file_iread_shared_cdesc.c" info="1479053539"/>
+<file name="cdesc.h" info="1479053539"/>
+<file name="file_read_shared_cdesc.c" info="1479053539"/>
+<file name="win_attach_cdesc.c" info="1479053539"/>
+<file name="file_iwrite_at_cdesc.c" info="1479053539"/>
+<file name="file_write_ordered_begin_cdesc.c" info="1479053539"/>
+<file name="scatter_cdesc.c" info="1479053539"/>
+<file name="file_iwrite_at_all_cdesc.c" info="1479053539"/>
+<file name="file_read_ordered_begin_cdesc.c" info="1479053539"/>
+<file name="irecv_cdesc.c" info="1479053539"/>
+<file name="iscatterv_cdesc.c" info="1479053539"/>
+<file name="get_address_cdesc.c" info="1479053539"/>
+<file name="sendrecv_cdesc.c" info="1479053539"/>
+<file name="ineighbor_allgather_cdesc.c" info="1479053539"/>
+<file name="file_write_all_begin_cdesc.c" info="1479053539"/>
+<file name="file_read_at_all_cdesc.c" info="1479053539"/>
+<file name="file_read_at_all_end_cdesc.c" info="1479053539"/>
+<file name="reduce_local_cdesc.c" info="1479053539"/>
+<file name="file_write_ordered_end_cdesc.c" info="1479053539"/>
+<file name="ineighbor_allgatherv_cdesc.c" info="1479053539"/>
+<file name="iexscan_cdesc.c" info="1479053539"/>
+<file name="recv_init_cdesc.c" info="1479053539"/>
+<file name="fetch_and_op_cdesc.c" info="1479053539"/>
+<file name="file_write_all_cdesc.c" info="1479053539"/>
+<file name="allgather_cdesc.c" info="1479053539"/>
+<file name="unpack_cdesc.c" info="1479053539"/>
+<file name="iscatter_cdesc.c" info="1479053539"/>
+<file name="recv_cdesc.c" info="1479053539"/>
+<file name="ssend_cdesc.c" info="1479053539"/>
+<file name="cdesc.c" info="1479053539"/>
+<file name="utils.c" info="1478973152"/>
+<file name="send_init_cdesc.c" info="1479053539"/>
+<file name="iscan_cdesc.c" info="1479053539"/>
+<file name="alltoall_cdesc.c" info="1479053539"/>
+<file name="file_read_cdesc.c" info="1479053539"/>
+<file name="ineighbor_alltoall_cdesc.c" info="1479053539"/>
+<file name="file_read_at_cdesc.c" info="1479053539"/>
+<file name="igatherv_cdesc.c" info="1479053539"/>
+<file name="iallgatherv_cdesc.c" info="1479053539"/>
+<file name="file_read_all_begin_cdesc.c" info="1479053539"/>
+<file name="gatherv_cdesc.c" info="1479053539"/>
+<file name="ibcast_cdesc.c" info="1479053539"/>
+<file name="scan_cdesc.c" info="1479053539"/>
+<file name="rput_cdesc.c" info="1479053539"/>
+<file name="ssend_init_cdesc.c" info="1479053539"/>
+<file name="igather_cdesc.c" info="1479053539"/>
+<file name="file_iread_all_cdesc.c" info="1479053539"/>
+<file name="comm_spawn_multiple_c.c" info="1478973152"/>
+<file name="raccumulate_cdesc.c" info="1479053539"/>
+<file name="file_read_ordered_end_cdesc.c" info="1479053539"/>
+<file name="rget_accumulate_cdesc.c" info="1479053539"/>
+<file name="file_iwrite_all_cdesc.c" info="1479053539"/>
+<file name="compare_and_swap_cdesc.c" info="1479053539"/>
+<file name="isend_cdesc.c" info="1479053539"/>
+<file name="accumulate_cdesc.c" info="1479053539"/>
+<file name="ibsend_cdesc.c" info="1479053539"/>
+<file name="ialltoallw_cdesc.c" info="1479053539"/>
</dir>
<data>
-<fileinfo name="ssend_cdesc.c">
+<fileinfo name="file_write_at_all_begin_cdesc.c">
</fileinfo>
-<fileinfo name="neighbor_alltoall_cdesc.c">
+<fileinfo name="bsend_cdesc.c">
</fileinfo>
-<fileinfo name="file_iread_cdesc.c">
+<fileinfo name="ialltoallv_cdesc.c">
</fileinfo>
-<fileinfo name="file_iwrite_cdesc.c">
+<fileinfo name="get_cdesc.c">
</fileinfo>
-<fileinfo name="allreduce_cdesc.c">
+<fileinfo name="exscan_cdesc.c">
</fileinfo>
<fileinfo name="sendrecv_replace_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_ordered_end_cdesc.c">
+<fileinfo name="neighbor_allgatherv_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_at_all_cdesc.c">
+<fileinfo name="file_iwrite_shared_cdesc.c">
</fileinfo>
<fileinfo name="file_write_at_all_end_cdesc.c">
</fileinfo>
-<fileinfo name="scatter_cdesc.c">
-</fileinfo>
-<fileinfo name="exscan_cdesc.c">
+<fileinfo name="file_write_shared_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_all_begin_cdesc.c">
+<fileinfo name="put_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_cdesc.c">
+<fileinfo name="f_sync_reg_c.c">
</fileinfo>
-<fileinfo name="file_write_all_begin_cdesc.c">
+<fileinfo name="win_create_cdesc.c">
</fileinfo>
-<fileinfo name="unpack_external_cdesc.c">
+<fileinfo name="file_write_at_all_cdesc.c">
</fileinfo>
-<fileinfo name="iallreduce_cdesc.c">
+<fileinfo name="allgatherv_cdesc.c">
</fileinfo>
-<fileinfo name="ireduce_scatter_block_cdesc.c">
+<fileinfo name="file_write_at_cdesc.c">
</fileinfo>
-<fileinfo name="free_mem_cdesc.c">
+<fileinfo name="imrecv_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_shared_cdesc.c">
+<fileinfo name="reduce_scatter_cdesc.c">
</fileinfo>
-<fileinfo name="file_iwrite_all_cdesc.c">
+<fileinfo name="rsend_init_cdesc.c">
</fileinfo>
-<fileinfo name="neighbor_allgatherv_cdesc.c">
+<fileinfo name="bsend_init_cdesc.c">
</fileinfo>
-<fileinfo name="ireduce_cdesc.c">
+<fileinfo name="iallreduce_cdesc.c">
</fileinfo>
-<fileinfo name="file_iread_at_cdesc.c">
+<fileinfo name="neighbor_alltoallw_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_ordered_cdesc.c">
+<fileinfo name="reduce_scatter_block_cdesc.c">
</fileinfo>
-<fileinfo name="iscan_cdesc.c">
+<fileinfo name="file_iread_at_all_cdesc.c">
</fileinfo>
-<fileinfo name="mrecv_cdesc.c">
+<fileinfo name="send_cdesc.c">
</fileinfo>
-<fileinfo name="utils.c">
+<fileinfo name="irsend_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_at_all_end_cdesc.c">
+<fileinfo name="ineighbor_alltoallv_cdesc.c">
</fileinfo>
-<fileinfo name="recv_cdesc.c">
+<fileinfo name="file_iread_cdesc.c">
</fileinfo>
-<fileinfo name="igatherv_cdesc.c">
+<fileinfo name="comm_spawn_c.c">
</fileinfo>
-<fileinfo name="reduce_scatter_block_cdesc.c">
+<fileinfo name="ireduce_cdesc.c">
</fileinfo>
-<fileinfo name="raccumulate_cdesc.c">
+<fileinfo name="scatterv_cdesc.c">
</fileinfo>
-<fileinfo name="reduce_local_cdesc.c">
+<fileinfo name="file_read_ordered_cdesc.c">
</fileinfo>
-<fileinfo name="ineighbor_alltoall_cdesc.c">
+<fileinfo name="rsend_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_at_all_begin_cdesc.c">
+<fileinfo name="file_iread_at_cdesc.c">
</fileinfo>
-<fileinfo name="win_attach_cdesc.c">
+<fileinfo name="file_write_cdesc.c">
</fileinfo>
-<fileinfo name="neighbor_alltoallv_cdesc.c">
+<fileinfo name="bcast_cdesc.c">
</fileinfo>
-<fileinfo name="ialltoallv_cdesc.c">
+<fileinfo name="file_write_ordered_cdesc.c">
</fileinfo>
-<fileinfo name="scan_cdesc.c">
+<fileinfo name="file_read_all_end_cdesc.c">
</fileinfo>
-<fileinfo name="iscatter_cdesc.c">
+<fileinfo name="ireduce_scatter_block_cdesc.c">
</fileinfo>
-<fileinfo name="file_iwrite_shared_cdesc.c">
+<fileinfo name="pack_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_at_all_cdesc.c">
+<fileinfo name="neighbor_alltoallv_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_cdesc.c">
+<fileinfo name="alltoallv_cdesc.c">
</fileinfo>
-<fileinfo name="sendrecv_cdesc.c">
+<fileinfo name="unpack_external_cdesc.c">
</fileinfo>
-<fileinfo name="bsend_cdesc.c">
+<fileinfo name="reduce_cdesc.c">
</fileinfo>
-<fileinfo name="file_iread_at_all_cdesc.c">
+<fileinfo name="file_write_all_end_cdesc.c">
</fileinfo>
-<fileinfo name="rget_accumulate_cdesc.c">
+<fileinfo name="alltoallw_cdesc.c">
</fileinfo>
-<fileinfo name="ibsend_cdesc.c">
+<fileinfo name="pack_external_cdesc.c">
</fileinfo>
-<fileinfo name="fetch_and_op_cdesc.c">
+<fileinfo name="mrecv_cdesc.c">
</fileinfo>
<fileinfo name="neighbor_allgather_cdesc.c">
</fileinfo>
-<fileinfo name="pack_cdesc.c">
-</fileinfo>
-<fileinfo name="file_read_all_cdesc.c">
-</fileinfo>
-<fileinfo name="allgatherv_cdesc.c">
+<fileinfo name="ireduce_scatter_cdesc.c">
</fileinfo>
-<fileinfo name="ialltoall_cdesc.c">
+<fileinfo name="file_iwrite_cdesc.c">
</fileinfo>
-<fileinfo name="pack_external_cdesc.c">
+<fileinfo name="allreduce_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_ordered_begin_cdesc.c">
+<fileinfo name="get_accumulate_cdesc.c">
</fileinfo>
-<fileinfo name="ineighbor_allgather_cdesc.c">
+<fileinfo name="file_read_all_cdesc.c">
</fileinfo>
-<fileinfo name="allgather_cdesc.c">
+<fileinfo name="ineighbor_alltoallw_cdesc.c">
</fileinfo>
-<fileinfo name="rput_cdesc.c">
+<fileinfo name="file_read_at_all_begin_cdesc.c">
</fileinfo>
<fileinfo name="win_detach_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_shared_cdesc.c">
+<fileinfo name="gather_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_ordered_cdesc.c">
+<fileinfo name="free_mem_cdesc.c">
</fileinfo>
-<fileinfo name="file_iread_shared_cdesc.c">
+<fileinfo name="neighbor_alltoall_cdesc.c">
</fileinfo>
-<fileinfo name="comm_spawn_multiple_c.c">
+<fileinfo name="iallgather_cdesc.c">
</fileinfo>
-<fileinfo name="send_cdesc.c">
+<fileinfo name="ialltoall_cdesc.c">
</fileinfo>
-<fileinfo name="ireduce_scatter_cdesc.c">
+<fileinfo name="rget_cdesc.c">
</fileinfo>
-<fileinfo name="iexscan_cdesc.c">
+<fileinfo name="buffer_attach_cdesc.c">
</fileinfo>
-<fileinfo name="igather_cdesc.c">
+<fileinfo name="issend_cdesc.c">
</fileinfo>
-<fileinfo name="f_sync_reg_c.c">
+<fileinfo name="file_iread_shared_cdesc.c">
</fileinfo>
-<fileinfo name="alltoallv_cdesc.c">
+<fileinfo name="cdesc.h">
</fileinfo>
-<fileinfo name="ibcast_cdesc.c">
+<fileinfo name="file_read_shared_cdesc.c">
</fileinfo>
-<fileinfo name="iscatterv_cdesc.c">
+<fileinfo name="win_attach_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_all_end_cdesc.c">
+<fileinfo name="file_iwrite_at_cdesc.c">
</fileinfo>
-<fileinfo name="irsend_cdesc.c">
+<fileinfo name="file_write_ordered_begin_cdesc.c">
</fileinfo>
-<fileinfo name="alltoall_cdesc.c">
+<fileinfo name="scatter_cdesc.c">
</fileinfo>
-<fileinfo name="rget_cdesc.c">
+<fileinfo name="file_iwrite_at_all_cdesc.c">
</fileinfo>
-<fileinfo name="buffer_attach_cdesc.c">
+<fileinfo name="file_read_ordered_begin_cdesc.c">
</fileinfo>
-<fileinfo name="accumulate_cdesc.c">
+<fileinfo name="irecv_cdesc.c">
+</fileinfo>
+<fileinfo name="iscatterv_cdesc.c">
</fileinfo>
<fileinfo name="get_address_cdesc.c">
</fileinfo>
-<fileinfo name="alltoallw_cdesc.c">
+<fileinfo name="sendrecv_cdesc.c">
</fileinfo>
-<fileinfo name="bcast_cdesc.c">
+<fileinfo name="ineighbor_allgather_cdesc.c">
</fileinfo>
-<fileinfo name="comm_spawn_c.c">
+<fileinfo name="file_write_all_begin_cdesc.c">
</fileinfo>
-<fileinfo name="compare_and_swap_cdesc.c">
+<fileinfo name="file_read_at_all_cdesc.c">
</fileinfo>
-<fileinfo name="irecv_cdesc.c">
+<fileinfo name="file_read_at_all_end_cdesc.c">
</fileinfo>
-<fileinfo name="ineighbor_alltoallv_cdesc.c">
+<fileinfo name="reduce_local_cdesc.c">
</fileinfo>
-<fileinfo name="reduce_cdesc.c">
+<fileinfo name="file_write_ordered_end_cdesc.c">
</fileinfo>
-<fileinfo name="neighbor_alltoallw_cdesc.c">
+<fileinfo name="ineighbor_allgatherv_cdesc.c">
</fileinfo>
-<fileinfo name="get_accumulate_cdesc.c">
+<fileinfo name="iexscan_cdesc.c">
</fileinfo>
-<fileinfo name="ialltoallw_cdesc.c">
+<fileinfo name="recv_init_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_at_cdesc.c">
+<fileinfo name="fetch_and_op_cdesc.c">
</fileinfo>
-<fileinfo name="iallgather_cdesc.c">
+<fileinfo name="file_write_all_cdesc.c">
</fileinfo>
-<fileinfo name="ineighbor_allgatherv_cdesc.c">
+<fileinfo name="allgather_cdesc.c">
</fileinfo>
-<fileinfo name="gatherv_cdesc.c">
+<fileinfo name="unpack_cdesc.c">
</fileinfo>
-<fileinfo name="reduce_scatter_cdesc.c">
+<fileinfo name="iscatter_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_at_cdesc.c">
+<fileinfo name="recv_cdesc.c">
</fileinfo>
-<fileinfo name="file_iwrite_at_cdesc.c">
+<fileinfo name="ssend_cdesc.c">
</fileinfo>
-<fileinfo name="recv_init_cdesc.c">
+<fileinfo name="cdesc.c">
</fileinfo>
-<fileinfo name="file_iread_all_cdesc.c">
+<fileinfo name="utils.c">
</fileinfo>
-<fileinfo name="bsend_init_cdesc.c">
+<fileinfo name="send_init_cdesc.c">
</fileinfo>
-<fileinfo name="win_create_cdesc.c">
+<fileinfo name="iscan_cdesc.c">
</fileinfo>
-<fileinfo name="cdesc.h">
+<fileinfo name="alltoall_cdesc.c">
</fileinfo>
-<fileinfo name="file_iwrite_at_all_cdesc.c">
+<fileinfo name="file_read_cdesc.c">
</fileinfo>
-<fileinfo name="issend_cdesc.c">
+<fileinfo name="ineighbor_alltoall_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_ordered_begin_cdesc.c">
+<fileinfo name="file_read_at_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_all_cdesc.c">
+<fileinfo name="igatherv_cdesc.c">
</fileinfo>
<fileinfo name="iallgatherv_cdesc.c">
</fileinfo>
-<fileinfo name="ssend_init_cdesc.c">
+<fileinfo name="file_read_all_begin_cdesc.c">
</fileinfo>
-<fileinfo name="put_cdesc.c">
+<fileinfo name="gatherv_cdesc.c">
</fileinfo>
-<fileinfo name="unpack_cdesc.c">
+<fileinfo name="ibcast_cdesc.c">
</fileinfo>
-<fileinfo name="file_read_all_end_cdesc.c">
+<fileinfo name="scan_cdesc.c">
</fileinfo>
-<fileinfo name="ineighbor_alltoallw_cdesc.c">
+<fileinfo name="rput_cdesc.c">
</fileinfo>
-<fileinfo name="rsend_init_cdesc.c">
+<fileinfo name="ssend_init_cdesc.c">
</fileinfo>
-<fileinfo name="get_cdesc.c">
+<fileinfo name="igather_cdesc.c">
</fileinfo>
-<fileinfo name="isend_cdesc.c">
+<fileinfo name="file_iread_all_cdesc.c">
</fileinfo>
-<fileinfo name="gather_cdesc.c">
+<fileinfo name="comm_spawn_multiple_c.c">
</fileinfo>
-<fileinfo name="send_init_cdesc.c">
+<fileinfo name="raccumulate_cdesc.c">
</fileinfo>
<fileinfo name="file_read_ordered_end_cdesc.c">
</fileinfo>
-<fileinfo name="cdesc.c">
+<fileinfo name="rget_accumulate_cdesc.c">
</fileinfo>
-<fileinfo name="file_write_at_all_begin_cdesc.c">
+<fileinfo name="file_iwrite_all_cdesc.c">
</fileinfo>
-<fileinfo name="imrecv_cdesc.c">
+<fileinfo name="compare_and_swap_cdesc.c">
</fileinfo>
-<fileinfo name="rsend_cdesc.c">
+<fileinfo name="isend_cdesc.c">
</fileinfo>
-<fileinfo name="scatterv_cdesc.c">
+<fileinfo name="accumulate_cdesc.c">
+</fileinfo>
+<fileinfo name="ibsend_cdesc.c">
+</fileinfo>
+<fileinfo name="ialltoallw_cdesc.c">
</fileinfo>
</data>
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
index 64425d6..e56ee44 100755
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
@@ -313,12 +313,12 @@ int cdesc_create_datatype(CFI_cdesc_t *cdesc, int oldcount, MPI_Datatype oldtype
#ifdef HAVE_ERROR_CHECKING
{
int size;
- MPIU_Assert(cdesc->rank <= MAX_RANK);
+ MPIR_Assert(cdesc->rank <= MAX_RANK);
MPI_Type_size(oldtype, &size);
/* When cdesc->elem_len != size, things suddenly become complicated. Generally, it is hard to create
* a composite datatype based on two datatypes. Currently we don't support it and doubt it is usefull.
*/
- MPIU_Assert(cdesc->elem_len == size);
+ MPIR_Assert(cdesc->elem_len == size);
}
#endif
@@ -432,7 +432,7 @@ while (<FD>) {
# parse out attributes
$fullline =~ s/MPICH_ATTR_POINTER_WITH_TYPE_TAG\(.*\)//g;
-
+ $fullline =~ s/MPICH_API_PUBLIC//g;
# parse out unnecessary spaces
$fullline =~ s/^ *//g;
$fullline =~ s/ *$//g;
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c b/src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c
index 38863e9..1e63d11 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c
@@ -24,12 +24,12 @@ int cdesc_create_datatype(CFI_cdesc_t *cdesc, int oldcount, MPI_Datatype oldtype
#ifdef HAVE_ERROR_CHECKING
{
int size;
- MPIU_Assert(cdesc->rank <= MAX_RANK);
+ MPIR_Assert(cdesc->rank <= MAX_RANK);
MPI_Type_size(oldtype, &size);
/* When cdesc->elem_len != size, things suddenly become complicated. Generally, it is hard to create
* a composite datatype based on two datatypes. Currently we don't support it and doubt it is usefull.
*/
- MPIU_Assert(cdesc->elem_len == size);
+ MPIR_Assert(cdesc->elem_len == size);
}
#endif
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_c.c b/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_c.c
index 108dfeb..016a342 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_c.c
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_c.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include "mpiimpl.h"
#include "cdesc.h"
@@ -18,7 +24,7 @@ int MPIR_Comm_spawn_c(const char *command, char *argv_f, int maxprocs, MPI_Info
mpi_errno = PMPI_Comm_spawn(command, argv_c, maxprocs, info, root, comm, intercomm, array_of_errcodes);
if (argv_c != MPI_ARGV_NULL) {
- MPIU_Free(argv_c);
+ MPL_free(argv_c);
}
fn_exit:
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_multiple_c.c b/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_multiple_c.c
index b7ab98c..deb0db8 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_multiple_c.c
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/comm_spawn_multiple_c.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include "mpiimpl.h"
#include "cdesc.h"
@@ -48,12 +54,12 @@ int MPIR_Comm_spawn_multiple_c(int count, char* array_of_commands_f,
if ((char***)array_of_argv_f == MPI_ARGVS_NULL) {
array_of_argv_c = MPI_ARGVS_NULL;
} else {
- array_of_argv_c = (char***) MPIU_Malloc(sizeof(char**)*count);
+ array_of_argv_c = (char***) MPL_malloc(sizeof(char**)*count);
if (!array_of_argv_c) MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
/* Allocate a temp buf to put args of a command */
len = 256; /* length of buf. Initialized with an arbitrary value */
- buf = (char*)MPIU_Malloc(sizeof(char)*len);
+ buf = (char*)MPL_malloc(sizeof(char)*len);
if (!buf) MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
for (i = 0; i < count; i++) {
@@ -64,9 +70,9 @@ int MPIR_Comm_spawn_multiple_c(int count, char* array_of_commands_f,
do {
if (offset + argv_elem_len > len) { /* Make sure buf is big enough */
len = offset + argv_elem_len;
- newbuf = (char*)MPIU_Realloc(buf, len);
+ newbuf = (char*)MPL_realloc(buf, len);
if (!newbuf) {
- MPIU_Free(buf);
+ MPL_free(buf);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
}
buf = newbuf;
@@ -88,24 +94,24 @@ int MPIR_Comm_spawn_multiple_c(int count, char* array_of_commands_f,
mpi_errno = MPIR_Fortran_array_of_string_f2c(buf, &(array_of_argv_c[i]), argv_elem_len, 0, 0);
if (mpi_errno != MPI_SUCCESS) {
for (j = i - 1; j >= 0; j--)
- MPIU_Free(array_of_argv_c[j]);
- MPIU_Free(buf);
+ MPL_free(array_of_argv_c[j]);
+ MPL_free(buf);
goto fn_fail;
}
}
- MPIU_Free(buf);
+ MPL_free(buf);
}
mpi_errno = PMPI_Comm_spawn_multiple(count, array_of_commands_c, array_of_argv_c,
array_of_maxprocs, array_of_info, root, comm, intercomm, array_of_errcodes);
- MPIU_Free(array_of_commands_c);
+ MPL_free(array_of_commands_c);
if (array_of_argv_c != MPI_ARGVS_NULL) {
for (i = 0; i < count; i++)
- MPIU_Free(array_of_argv_c[i]);
- MPIU_Free(array_of_argv_c);
+ MPL_free(array_of_argv_c[i]);
+ MPL_free(array_of_argv_c);
}
fn_exit:
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/f_sync_reg_c.c b/src/binding/fortran/use_mpi_f08/wrappers_c/f_sync_reg_c.c
index 7e9eb2d..54ce14d 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/f_sync_reg_c.c
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/f_sync_reg_c.c
@@ -1,3 +1,8 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
#include "cdesc.h"
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/utils.c b/src/binding/fortran/use_mpi_f08/wrappers_c/utils.c
index 4d0e112..2b48137 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/utils.c
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/utils.c
@@ -1,3 +1,8 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
#include "mpiimpl.h"
#include "cdesc.h"
@@ -51,7 +56,7 @@ extern int MPIR_Fortran_array_of_string_f2c(const char* strs_f, char*** strs_c,
}
/* Allocate memory for pointers to strings and the strings themself */
- buf = (char*) MPIU_Malloc(sizeof(char*) * num_strs + sizeof(char) * (num_chars + num_strs)); /* Add \0 for each string */
+ buf = (char*) MPL_malloc(sizeof(char*) * num_strs + sizeof(char) * (num_chars + num_strs)); /* Add \0 for each string */
if (buf == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
}
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/cart_sub_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/cart_sub_f08ts.f90
index aaea10d..3487de2 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/cart_sub_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/cart_sub_f08ts.f90
@@ -25,7 +25,7 @@ subroutine MPI_Cart_sub_f08(comm, remain_dims, newcomm, ierror)
comm_c = comm%MPI_VAL
ierror_c = MPIR_Cartdim_get_c(comm_c, ndims)
- if (ierror_c /= MPI_SUCCESS) then
+ if (ierror_c == MPI_SUCCESS) then
remain_dims_c = merge(1, 0, remain_dims(1:ndims))
ierror_c = MPIR_Cart_sub_c(comm_c, remain_dims_c, newcomm_c)
newcomm%MPI_VAL = newcomm_c
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/comm_create_keyval_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/comm_create_keyval_f08ts.f90
index e0303c0..edd973c 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/comm_create_keyval_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/comm_create_keyval_f08ts.f90
@@ -11,7 +11,7 @@ subroutine MPI_Comm_create_keyval_f08(comm_copy_attr_fn, comm_delete_attr_fn, co
use :: mpi_f08, only : MPI_Comm_delete_attr_function
use :: mpi_f08, only : MPI_ADDRESS_KIND
use :: mpi_c_interface, only : MPIR_Comm_create_keyval_c
- use :: mpi_c_interface, only : MPIR_Keyval_set_proxy, MPIR_Comm_copy_attr_f08_proxy, MPIR_Comm_delete_attr_f08_proxy
+ use :: mpi_c_interface, only : MPII_Keyval_set_proxy, MPII_Comm_copy_attr_f08_proxy, MPIR_Comm_delete_attr_f08_proxy
implicit none
@@ -31,7 +31,7 @@ subroutine MPI_Comm_create_keyval_f08(comm_copy_attr_fn, comm_delete_attr_fn, co
ierror_c = MPIR_Comm_create_keyval_c(comm_copy_attr_fn_c, comm_delete_attr_fn_c, comm_keyval_c, extra_state)
- call MPIR_Keyval_set_proxy(comm_keyval_c, c_funloc(MPIR_Comm_copy_attr_f08_proxy), c_funloc(MPIR_Comm_delete_attr_f08_proxy))
+ call MPII_Keyval_set_proxy(comm_keyval_c, c_funloc(MPII_Comm_copy_attr_f08_proxy), c_funloc(MPIR_Comm_delete_attr_f08_proxy))
comm_keyval = comm_keyval_c
if (present(ierror)) ierror = ierror_c
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcart_sub_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcart_sub_f08ts.f90
index aa43649..207832b 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcart_sub_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcart_sub_f08ts.f90
@@ -25,7 +25,7 @@ subroutine PMPIR_Cart_sub_f08(comm, remain_dims, newcomm, ierror)
comm_c = comm%MPI_VAL
ierror_c = MPIR_Cartdim_get_c(comm_c, ndims)
- if (ierror_c /= MPI_SUCCESS) then
+ if (ierror_c == MPI_SUCCESS) then
remain_dims_c = merge(1, 0, remain_dims(1:ndims))
ierror_c = MPIR_Cart_sub_c(comm_c, remain_dims_c, newcomm_c)
newcomm%MPI_VAL = newcomm_c
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcomm_create_keyval_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcomm_create_keyval_f08ts.f90
index 794f520..86f1c8d 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcomm_create_keyval_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pcomm_create_keyval_f08ts.f90
@@ -11,7 +11,7 @@ subroutine PMPIR_Comm_create_keyval_f08(comm_copy_attr_fn, comm_delete_attr_fn,
use :: mpi_f08, only : MPI_Comm_delete_attr_function
use :: mpi_f08, only : MPI_ADDRESS_KIND
use :: mpi_c_interface, only : MPIR_Comm_create_keyval_c
- use :: mpi_c_interface, only : MPIR_Keyval_set_proxy, MPIR_Comm_copy_attr_f08_proxy, MPIR_Comm_delete_attr_f08_proxy
+ use :: mpi_c_interface, only : MPII_Keyval_set_proxy, MPII_Comm_copy_attr_f08_proxy, MPIR_Comm_delete_attr_f08_proxy
implicit none
@@ -31,7 +31,7 @@ subroutine PMPIR_Comm_create_keyval_f08(comm_copy_attr_fn, comm_delete_attr_fn,
ierror_c = MPIR_Comm_create_keyval_c(comm_copy_attr_fn_c, comm_delete_attr_fn_c, comm_keyval_c, extra_state)
- call MPIR_Keyval_set_proxy(comm_keyval_c, c_funloc(MPIR_Comm_copy_attr_f08_proxy), c_funloc(MPIR_Comm_delete_attr_f08_proxy))
+ call MPII_Keyval_set_proxy(comm_keyval_c, c_funloc(MPII_Comm_copy_attr_f08_proxy), c_funloc(MPIR_Comm_delete_attr_f08_proxy))
comm_keyval = comm_keyval_c
if (present(ierror)) ierror = ierror_c
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/ptype_create_keyval_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/ptype_create_keyval_f08ts.f90
index b996f66..0475ee6 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/ptype_create_keyval_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/ptype_create_keyval_f08ts.f90
@@ -11,7 +11,7 @@ subroutine PMPIR_Type_create_keyval_f08(type_copy_attr_fn, type_delete_attr_fn,
use :: mpi_f08, only : MPI_Type_copy_attr_function
use :: mpi_f08, only : MPI_Type_delete_attr_function
use :: mpi_c_interface, only : MPIR_Type_create_keyval_c
- use :: mpi_c_interface, only : MPIR_Keyval_set_proxy, MPIR_Type_copy_attr_f08_proxy, MPIR_Type_delete_attr_f08_proxy
+ use :: mpi_c_interface, only : MPII_Keyval_set_proxy, MPIR_Type_copy_attr_f08_proxy, MPIR_Type_delete_attr_f08_proxy
implicit none
@@ -31,7 +31,7 @@ subroutine PMPIR_Type_create_keyval_f08(type_copy_attr_fn, type_delete_attr_fn,
ierror_c = MPIR_Type_create_keyval_c(type_copy_attr_fn_c, type_delete_attr_fn_c, type_keyval_c, extra_state)
- call MPIR_Keyval_set_proxy(type_keyval_c, c_funloc(MPIR_Type_copy_attr_f08_proxy), c_funloc(MPIR_Type_delete_attr_f08_proxy))
+ call MPII_Keyval_set_proxy(type_keyval_c, c_funloc(MPIR_Type_copy_attr_f08_proxy), c_funloc(MPIR_Type_delete_attr_f08_proxy))
type_keyval = type_keyval_c
if (present(ierror)) ierror = ierror_c
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pwin_create_keyval_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pwin_create_keyval_f08ts.f90
index 3e28686..b6a5fd7 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pwin_create_keyval_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/profiling/pwin_create_keyval_f08ts.f90
@@ -11,7 +11,7 @@ subroutine PMPIR_Win_create_keyval_f08(win_copy_attr_fn, win_delete_attr_fn, win
use :: mpi_f08, only : MPI_Win_copy_attr_function
use :: mpi_f08, only : MPI_Win_delete_attr_function
use :: mpi_c_interface, only : MPIR_Win_create_keyval_c
- use :: mpi_c_interface, only : MPIR_Keyval_set_proxy, MPIR_Win_copy_attr_f08_proxy, MPIR_Win_delete_attr_f08_proxy
+ use :: mpi_c_interface, only : MPII_Keyval_set_proxy, MPIR_Win_copy_attr_f08_proxy, MPIR_Win_delete_attr_f08_proxy
implicit none
@@ -31,7 +31,7 @@ subroutine PMPIR_Win_create_keyval_f08(win_copy_attr_fn, win_delete_attr_fn, win
ierror_c = MPIR_Win_create_keyval_c(win_copy_attr_fn_c, win_delete_attr_fn_c, win_keyval_c, extra_state)
- call MPIR_Keyval_set_proxy(win_keyval_c, c_funloc(MPIR_Win_copy_attr_f08_proxy), c_funloc(MPIR_Win_delete_attr_f08_proxy))
+ call MPII_Keyval_set_proxy(win_keyval_c, c_funloc(MPIR_Win_copy_attr_f08_proxy), c_funloc(MPIR_Win_delete_attr_f08_proxy))
win_keyval = win_keyval_c
if (present(ierror)) ierror = ierror_c
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/type_create_keyval_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/type_create_keyval_f08ts.f90
index 760a8af..2087f50 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/type_create_keyval_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/type_create_keyval_f08ts.f90
@@ -11,7 +11,7 @@ subroutine MPI_Type_create_keyval_f08(type_copy_attr_fn, type_delete_attr_fn, ty
use :: mpi_f08, only : MPI_Type_copy_attr_function
use :: mpi_f08, only : MPI_Type_delete_attr_function
use :: mpi_c_interface, only : MPIR_Type_create_keyval_c
- use :: mpi_c_interface, only : MPIR_Keyval_set_proxy, MPIR_Type_copy_attr_f08_proxy, MPIR_Type_delete_attr_f08_proxy
+ use :: mpi_c_interface, only : MPII_Keyval_set_proxy, MPIR_Type_copy_attr_f08_proxy, MPIR_Type_delete_attr_f08_proxy
implicit none
@@ -31,7 +31,7 @@ subroutine MPI_Type_create_keyval_f08(type_copy_attr_fn, type_delete_attr_fn, ty
ierror_c = MPIR_Type_create_keyval_c(type_copy_attr_fn_c, type_delete_attr_fn_c, type_keyval_c, extra_state)
- call MPIR_Keyval_set_proxy(type_keyval_c, c_funloc(MPIR_Type_copy_attr_f08_proxy), c_funloc(MPIR_Type_delete_attr_f08_proxy))
+ call MPII_Keyval_set_proxy(type_keyval_c, c_funloc(MPIR_Type_copy_attr_f08_proxy), c_funloc(MPIR_Type_delete_attr_f08_proxy))
type_keyval = type_keyval_c
if (present(ierror)) ierror = ierror_c
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/win_create_keyval_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/win_create_keyval_f08ts.f90
index 78f5bbc..b433089 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/win_create_keyval_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/win_create_keyval_f08ts.f90
@@ -11,7 +11,7 @@ subroutine MPI_Win_create_keyval_f08(win_copy_attr_fn, win_delete_attr_fn, win_k
use :: mpi_f08, only : MPI_Win_copy_attr_function
use :: mpi_f08, only : MPI_Win_delete_attr_function
use :: mpi_c_interface, only : MPIR_Win_create_keyval_c
- use :: mpi_c_interface, only : MPIR_Keyval_set_proxy, MPIR_Win_copy_attr_f08_proxy, MPIR_Win_delete_attr_f08_proxy
+ use :: mpi_c_interface, only : MPII_Keyval_set_proxy, MPIR_Win_copy_attr_f08_proxy, MPIR_Win_delete_attr_f08_proxy
implicit none
@@ -31,7 +31,7 @@ subroutine MPI_Win_create_keyval_f08(win_copy_attr_fn, win_delete_attr_fn, win_k
ierror_c = MPIR_Win_create_keyval_c(win_copy_attr_fn_c, win_delete_attr_fn_c, win_keyval_c, extra_state)
- call MPIR_Keyval_set_proxy(win_keyval_c, c_funloc(MPIR_Win_copy_attr_f08_proxy), c_funloc(MPIR_Win_delete_attr_f08_proxy))
+ call MPII_Keyval_set_proxy(win_keyval_c, c_funloc(MPIR_Win_copy_attr_f08_proxy), c_funloc(MPIR_Win_delete_attr_f08_proxy))
win_keyval = win_keyval_c
if (present(ierror)) ierror = ierror_c
diff --git a/src/cross/powerpc64-bgq-linux b/src/cross/powerpc64-bgq-linux
new file mode 100644
index 0000000..6dfaa0d
--- /dev/null
+++ b/src/cross/powerpc64-bgq-linux
@@ -0,0 +1,27 @@
+# begin_generated_IBM_copyright_prolog
+#
+# This is an automatically generated copyright prolog.
+# After initializing, DO NOT MODIFY OR MOVE
+# ---------------------------------------------------------------
+# Licensed Materials - Property of IBM
+# Blue Gene/Q 5765-PER 5765-PRP
+#
+# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
+# US Government Users Restricted Rights -
+# Use, duplication, or disclosure restricted
+# by GSA ADP Schedule Contract with IBM Corp.
+#
+# ---------------------------------------------------------------
+#
+# end_generated_IBM_copyright_prolog
+CROSS_F77_SIZEOF_INTEGER=4
+CROSS_F77_SIZEOF_REAL=4
+CROSS_F77_SIZEOF_DOUBLE_PRECISION=8
+CROSS_F90_ADDRESS_KIND=8
+CROSS_F90_OFFSET_KIND=8
+CROSS_F90_INTEGER_KIND=8
+CROSS_F90_REAL_MODEL=6,37
+CROSS_F90_DOUBLE_MODEL=15,307
+CROSS_F90_INTEGER_MODEL_MAP={9,4,4},
+CROSS_F77_TRUE_VALUE=1
+CROSS_F77_FALSE_VALUE=0
diff --git a/src/env/mpichversion.c b/src/env/mpichversion.c
index 38f3c6b..cdfd793 100644
--- a/src/env/mpichversion.c
+++ b/src/env/mpichversion.c
@@ -29,7 +29,7 @@
typedef enum { Version_number=0, Date=1,
Patches=2, Configure_args=3, Device=4,
- Compilers=5, LastField
+ Compilers=5, Custom=6, LastField
} fields;
/*D
@@ -81,6 +81,10 @@ int main( int argc, char *argv[] )
strcmp( argv[i], "--compiler" ) == 0 ||
strcmp( argv[i], "-b" ) == 0)
flags[Compilers] = 1;
+ else if (strcmp( argv[i], "-custom" ) == 0 ||
+ strcmp( argv[i], "--custom" ) == 0 ||
+ strcmp( argv[i], "-u" ) == 0)
+ flags[Custom] = 1;
else {
fprintf( stderr, "Unrecognized argument %s\n", argv[i] );
exit(1);
@@ -90,22 +94,25 @@ int main( int argc, char *argv[] )
/* Print out the information, one item per line */
if (flags[Version_number]) {
- printf( "MPICH Version: \t%s\n", MPIR_Version_string );
+ printf( "MPICH Version: \t%s\n", MPII_Version_string );
}
if (flags[Date]) {
- printf( "MPICH Release date:\t%s\n", MPIR_Version_date );
+ printf( "MPICH Release date:\t%s\n", MPII_Version_date );
}
if (flags[Device]) {
- printf( "MPICH Device: \t%s\n", MPIR_Version_device );
+ printf( "MPICH Device: \t%s\n", MPII_Version_device );
}
if (flags[Configure_args]) {
- printf( "MPICH configure: \t%s\n", MPIR_Version_configure );
+ printf( "MPICH configure: \t%s\n", MPII_Version_configure );
}
if (flags[Compilers]) {
- printf( "MPICH CC: \t%s\n", MPIR_Version_CC );
- printf( "MPICH CXX: \t%s\n", MPIR_Version_CXX );
- printf( "MPICH F77: \t%s\n", MPIR_Version_F77 );
- printf( "MPICH FC: \t%s\n", MPIR_Version_FC );
+ printf( "MPICH CC: \t%s\n", MPII_Version_CC );
+ printf( "MPICH CXX: \t%s\n", MPII_Version_CXX );
+ printf( "MPICH F77: \t%s\n", MPII_Version_F77 );
+ printf( "MPICH FC: \t%s\n", MPII_Version_FC );
+ }
+ if (flags[Custom]) {
+ printf( "MPICH Custom Information: \t%s\n", MPII_Version_custom);
}
return 0;
diff --git a/src/glue/romio/all_romio_symbols b/src/glue/romio/all_romio_symbols
index dfafd87..212142c 100755
--- a/src/glue/romio/all_romio_symbols
+++ b/src/glue/romio/all_romio_symbols
@@ -74,6 +74,7 @@ print OUTFD <<EOT;
#include <stdio.h>
#include "mpi.h"
+#include "mpiimpl.h"
void MPIR_All_romio_symbols(void);
void MPIR_All_romio_symbols(void)
@@ -196,6 +197,8 @@ print OUTFD <<EOT;
MPI_File_c2f(fh);
}
+
+ MPIR_Comm_split_filesystem(MPI_COMM_NULL, 0, NULL, NULL);
#endif /* MPI_MODE_RDONLY */
}
EOT
diff --git a/src/glue/romio/all_romio_symbols.c b/src/glue/romio/all_romio_symbols.c
index 9e1b35b..0aa9d6e 100644
--- a/src/glue/romio/all_romio_symbols.c
+++ b/src/glue/romio/all_romio_symbols.c
@@ -34,6 +34,7 @@
#include <stdio.h>
#include "mpi.h"
+#include "mpiimpl.h"
void MPIR_All_romio_symbols(void);
void MPIR_All_romio_symbols(void)
@@ -565,5 +566,7 @@ void MPIR_All_romio_symbols(void)
MPI_File_c2f(fh);
}
+
+ MPIR_Comm_split_filesystem(MPI_COMM_NULL, 0, NULL, NULL);
#endif /* MPI_MODE_RDONLY */
}
diff --git a/src/glue/romio/glue_romio.c b/src/glue/romio/glue_romio.c
index fa327ab..d2bded3 100644
--- a/src/glue/romio/glue_romio.c
+++ b/src/glue/romio/glue_romio.c
@@ -9,7 +9,11 @@
* the headers it includes) directly inside of ROMIO. */
#include "mpiimpl.h"
-#include "glue_romio.h"
+#include "mpir_ext.h"
+
+#if defined (MPL_USE_DBG_LOGGING)
+static MPL_dbg_class DBG_ROMIO;
+#endif /* MPL_USE_DBG_LOGGING */
int MPIR_Ext_dbg_romio_terse_enabled = 0;
int MPIR_Ext_dbg_romio_typical_enabled = 0;
@@ -19,12 +23,20 @@ int MPIR_Ext_dbg_romio_verbose_enabled = 0;
* glue code that cannot be initialized statically */
int MPIR_Ext_init(void)
{
- if (MPIU_DBG_SELECTED(ROMIO,TERSE))
+ MPIR_Ext_dbg_romio_terse_enabled = 0;
+ MPIR_Ext_dbg_romio_typical_enabled = 0;
+ MPIR_Ext_dbg_romio_verbose_enabled = 0;
+
+#if defined (MPL_USE_DBG_LOGGING)
+ DBG_ROMIO = MPL_dbg_class_alloc("ROMIO", "romio");
+
+ if (MPL_DBG_SELECTED(DBG_ROMIO,TERSE))
MPIR_Ext_dbg_romio_terse_enabled = 1;
- if (MPIU_DBG_SELECTED(ROMIO,TYPICAL))
+ if (MPL_DBG_SELECTED(DBG_ROMIO,TYPICAL))
MPIR_Ext_dbg_romio_typical_enabled = 1;
- if (MPIU_DBG_SELECTED(ROMIO,VERBOSE))
+ if (MPL_DBG_SELECTED(DBG_ROMIO,VERBOSE))
MPIR_Ext_dbg_romio_verbose_enabled = 1;
+#endif /* MPL_USE_DBG_LOGGING */
return MPI_SUCCESS;
}
@@ -71,10 +83,10 @@ int MPIR_Ext_datatype_iscommitted(MPI_Datatype datatype)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
@@ -85,3 +97,16 @@ fn_fail:
return mpi_errno;
}
+/* ROMIO could parse hostnames but it's easier if we can let it know
+ * node ids */
+int MPIR_Get_node_id(MPI_Comm comm, int rank, int *id)
+{
+ MPIR_Comm *comm_ptr;
+ MPID_Node_id_t node_id;
+
+ MPIR_Comm_get_ptr(comm, comm_ptr);
+ MPID_Get_node_id(comm_ptr, rank, &node_id);
+ *id = node_id;
+
+ return MPI_SUCCESS;
+}
diff --git a/src/include/.state-cache b/src/include/.state-cache
index 258f5f6..7c2b112 100644
--- a/src/include/.state-cache
+++ b/src/include/.state-cache
@@ -1,96 +1,159 @@
<dir>
-<file name="mpiinfo.h" info="1447123141"/>
-<file name="mpiimpl.h" info="1447123141"/>
-<file name="nopackage.h" info="1447123141"/>
-<file name="mpi_lang.h" info="1447123141"/>
-<file name="mpir_type_defs.h" info="1447123141"/>
-<file name="mpi_fortlogical.h" info="1447123141"/>
-<file name="mpiu_uthash.h" info="1447123141"/>
-<file name="pmi.h" info="1447123141"/>
-<file name="mpibsend.h" info="1447123141"/>
-<file name="mpiext.h" info="1447123141"/>
-<file name="mpiutil.h" info="1447123141"/>
-<file name="mpihandlemem.h" info="1447123141"/>
-<file name="mpiu_utarray.h" info="1447123141"/>
-<file name="bsocket.h" info="1447123141"/>
-<file name="mpit.h" info="1447123141"/>
-<file name="mpitimpl.h" info="1447123141"/>
-<file name="rlog.h" info="1447123141"/>
-<file name="oputil.h" info="1447123141"/>
-<file name="mpitimerimpl.h" info="1447123141"/>
-<file name="mpierrs.h" info="1447123141"/>
-<file name="mpishared.h" info="1447123141"/>
-<file name="mpifunc.h" info="1447123141"/>
-<file name="mpir_nbc.h" info="1447123141"/>
-<file name="pmi2.h" info="1447123141"/>
-<file name="mpi_attr.h" info="1447123141"/>
-<file name="mpimem.h" info="1447123141"/>
-<file name="mpierror.h" info="1447123141"/>
-<file name="mpi_f77interface.h" info="1447123141"/>
-<file name="rlog_macros.h" info="1447123141"/>
-<file name="mpistates.h" info="1447123141"/>
-<file name="mpichconfconst.h" info="1447123141"/>
+<file name="mpir_refcount_pobj.h" info="1478973152"/>
+<file name="mpir_errhandler.h" info="1478973152"/>
+<file name="pmi2.h" info="1478973152"/>
+<file name="mpir_request.h" info="1478973152"/>
+<file name="mpir_coll.h" info="1478973152"/>
+<file name="mpir_mem.h" info="1478973152"/>
+<file name="mpii_bsend.h" info="1478973152"/>
+<file name="mpii_fortlogical.h" info="1478973152"/>
+<file name="mpir_strerror.h" info="1478973152"/>
+<file name="bsocket.h" info="1478973152"/>
+<file name="mpir_tags.h" info="1478973152"/>
+<file name="mpii_f77interface.h" info="1478973152"/>
+<file name="mpir_utarray.h" info="1478973152"/>
+<file name="mpir_func.h" info="1478973152"/>
+<file name="mpir_process.h" info="1478973152"/>
+<file name="mpir_datatype.h" info="1478973152"/>
+<file name="mpir_handlemem.h" info="1478973152"/>
+<file name="mpir_op_util.h" info="1478973152"/>
+<file name="mpiimpl.h" info="1478973152"/>
+<file name="mpir_comm.h" info="1478973152"/>
+<file name="mpir_refcount.h" info="1478973152"/>
+<file name="mpir_debugger.h" info="1478973152"/>
+<file name="mpir_thread.h" info="1478973152"/>
+<file name="mpir_err.h" info="1478973152"/>
+<file name="mpir_topo.h" info="1478973152"/>
+<file name="rlog.h" info="1478973152"/>
+<file name="mpir_pointers.h" info="1478973152"/>
+<file name="mpir_group.h" info="1478973152"/>
+<file name="pmi.h" info="1478973152"/>
+<file name="mpir_objects.h" info="1478973152"/>
+<file name="rlog_macros.h" info="1478973152"/>
+<file name="mpir_info.h" info="1478973152"/>
+<file name="mpir_nbc.h" info="1478973152"/>
+<file name="mpitimpl.h" info="1478973152"/>
+<file name="mpir_misc.h" info="1478973152"/>
+<file name="mpir_win.h" info="1478973152"/>
+<file name="mpir_attr.h" info="1478973152"/>
+<file name="mpir_refcount_global.h" info="1478973152"/>
+<file name="mpir_misc_post.h" info="1478973152"/>
+<file name="mpir_pt2pt.h" info="1478973152"/>
+<file name="mpir_status.h" info="1478973152"/>
+<file name="mpir_assert.h" info="1478973152"/>
+<file name="mpit.h" info="1478973152"/>
+<file name="mpir_dbg.h" info="1478973152"/>
+<file name="mpir_contextid.h" info="1478973152"/>
+<file name="mpir_op.h" info="1478973152"/>
+<file name="mpir_type_defs.h" info="1478973152"/>
+<file name="nopackage.h" info="1478973152"/>
+<file name="mpir_attr_generic.h" info="1478973152"/>
+<file name="mpii_cxxinterface.h" info="1478973152"/>
+<file name="mpir_refcount_single.h" info="1478973152"/>
+<file name="mpichconfconst.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpiinfo.h">
+<fileinfo name="mpir_refcount_pobj.h">
</fileinfo>
-<fileinfo name="mpiimpl.h">
+<fileinfo name="mpir_errhandler.h">
</fileinfo>
-<fileinfo name="nopackage.h">
+<fileinfo name="pmi2.h">
</fileinfo>
-<fileinfo name="mpi_lang.h">
+<fileinfo name="mpir_request.h">
</fileinfo>
-<fileinfo name="mpir_type_defs.h">
+<fileinfo name="mpir_coll.h">
</fileinfo>
-<fileinfo name="mpi_fortlogical.h">
+<fileinfo name="mpir_mem.h">
</fileinfo>
-<fileinfo name="mpiu_uthash.h">
+<fileinfo name="mpii_bsend.h">
</fileinfo>
-<fileinfo name="pmi.h">
+<fileinfo name="mpii_fortlogical.h">
</fileinfo>
-<fileinfo name="mpibsend.h">
+<fileinfo name="mpir_strerror.h">
</fileinfo>
-<fileinfo name="mpiext.h">
+<fileinfo name="bsocket.h">
</fileinfo>
-<fileinfo name="mpiutil.h">
+<fileinfo name="mpir_tags.h">
</fileinfo>
-<fileinfo name="mpihandlemem.h">
+<fileinfo name="mpii_f77interface.h">
</fileinfo>
-<fileinfo name="mpiu_utarray.h">
+<fileinfo name="mpir_utarray.h">
</fileinfo>
-<fileinfo name="bsocket.h">
+<fileinfo name="mpir_func.h">
</fileinfo>
-<fileinfo name="mpit.h">
+<fileinfo name="mpir_process.h">
</fileinfo>
-<fileinfo name="mpitimpl.h">
+<fileinfo name="mpir_datatype.h">
+</fileinfo>
+<fileinfo name="mpir_handlemem.h">
+</fileinfo>
+<fileinfo name="mpir_op_util.h">
+</fileinfo>
+<fileinfo name="mpiimpl.h">
+</fileinfo>
+<fileinfo name="mpir_comm.h">
+</fileinfo>
+<fileinfo name="mpir_refcount.h">
+</fileinfo>
+<fileinfo name="mpir_debugger.h">
+</fileinfo>
+<fileinfo name="mpir_thread.h">
+</fileinfo>
+<fileinfo name="mpir_err.h">
+</fileinfo>
+<fileinfo name="mpir_topo.h">
</fileinfo>
<fileinfo name="rlog.h">
</fileinfo>
-<fileinfo name="oputil.h">
+<fileinfo name="mpir_pointers.h">
</fileinfo>
-<fileinfo name="mpitimerimpl.h">
+<fileinfo name="mpir_group.h">
</fileinfo>
-<fileinfo name="mpierrs.h">
+<fileinfo name="pmi.h">
</fileinfo>
-<fileinfo name="mpishared.h">
+<fileinfo name="mpir_objects.h">
</fileinfo>
-<fileinfo name="mpifunc.h">
+<fileinfo name="rlog_macros.h">
+</fileinfo>
+<fileinfo name="mpir_info.h">
</fileinfo>
<fileinfo name="mpir_nbc.h">
</fileinfo>
-<fileinfo name="pmi2.h">
+<fileinfo name="mpitimpl.h">
</fileinfo>
-<fileinfo name="mpi_attr.h">
+<fileinfo name="mpir_misc.h">
</fileinfo>
-<fileinfo name="mpimem.h">
+<fileinfo name="mpir_win.h">
</fileinfo>
-<fileinfo name="mpierror.h">
+<fileinfo name="mpir_attr.h">
</fileinfo>
-<fileinfo name="mpi_f77interface.h">
+<fileinfo name="mpir_refcount_global.h">
</fileinfo>
-<fileinfo name="rlog_macros.h">
+<fileinfo name="mpir_misc_post.h">
+</fileinfo>
+<fileinfo name="mpir_pt2pt.h">
+</fileinfo>
+<fileinfo name="mpir_status.h">
+</fileinfo>
+<fileinfo name="mpir_assert.h">
+</fileinfo>
+<fileinfo name="mpit.h">
+</fileinfo>
+<fileinfo name="mpir_dbg.h">
+</fileinfo>
+<fileinfo name="mpir_contextid.h">
+</fileinfo>
+<fileinfo name="mpir_op.h">
+</fileinfo>
+<fileinfo name="mpir_type_defs.h">
+</fileinfo>
+<fileinfo name="nopackage.h">
+</fileinfo>
+<fileinfo name="mpir_attr_generic.h">
+</fileinfo>
+<fileinfo name="mpii_cxxinterface.h">
</fileinfo>
-<fileinfo name="mpistates.h">
+<fileinfo name="mpir_refcount_single.h">
</fileinfo>
<fileinfo name="mpichconfconst.h">
</fileinfo>
diff --git a/src/include/Makefile.mk b/src/include/Makefile.mk
index 4c2eb76..7e685fe 100644
--- a/src/include/Makefile.mk
+++ b/src/include/Makefile.mk
@@ -12,49 +12,68 @@ nodist_include_HEADERS += src/include/mpi.h
## ".h.in" file. This ensures that these files are _not_ distributed, which is
## important because they contain lots of info that is computed by configure.
nodist_noinst_HEADERS += \
- src/include/glue_romio.h \
src/include/mpichinfo.h \
src/include/mpichconf.h
-## listed here in BUILT_SOURCES to ensure that if glue_romio.h is out of date
+## listed here in BUILT_SOURCES to ensure that if mpir_ext.h is out of date
## that it will be rebuilt before make recurses into src/mpi/romio and runs
## make. This isn't normally necessary when automake is tracking all the
## dependencies, but that's not true for SUBDIRS packages
-BUILT_SOURCES += src/include/glue_romio.h
+BUILT_SOURCES += src/include/mpir_ext.h
noinst_HEADERS += \
src/include/bsocket.h \
- src/include/mpi_attr.h \
- src/include/mpi_f77interface.h \
- src/include/mpi_fortlogical.h \
- src/include/mpi_lang.h \
+ src/include/mpir_refcount.h \
+ src/include/mpir_refcount_global.h \
+ src/include/mpir_refcount_pobj.h \
+ src/include/mpir_refcount_single.h \
+ src/include/mpir_refcount.h \
+ src/include/mpir_assert.h \
+ src/include/mpir_misc_post.h \
+ src/include/mpir_type_defs.h \
+ src/include/mpir_dbg.h \
+ src/include/mpir_attr_generic.h \
+ src/include/mpir_attr.h \
+ src/include/mpii_f77interface.h \
+ src/include/mpii_cxxinterface.h \
+ src/include/mpii_fortlogical.h \
src/include/mpiallstates.h \
- src/include/mpibsend.h \
- src/include/mpich_cvars.h \
+ src/include/mpii_bsend.h \
+ src/include/mpir_cvars.h \
src/include/mpichconfconst.h \
- src/include/mpierror.h \
- src/include/mpierrs.h \
- src/include/mpiext.h \
- src/include/mpifunc.h \
- src/include/mpihandlemem.h \
+ src/include/mpir_err.h \
+ src/include/mpir_ext.h \
+ src/include/mpir_func.h \
+ src/include/mpir_coll.h \
+ src/include/mpir_comm.h \
+ src/include/mpir_debugger.h \
+ src/include/mpir_request.h \
+ src/include/mpir_status.h \
+ src/include/mpir_contextid.h \
+ src/include/mpir_objects.h \
+ src/include/mpir_pointers.h \
+ src/include/mpir_topo.h \
+ src/include/mpir_group.h \
+ src/include/mpir_errhandler.h \
+ src/include/mpir_info.h \
src/include/mpiimpl.h \
- src/include/mpimem.h \
+ src/include/mpir_mem.h \
+ src/include/mpir_thread.h \
src/include/mpir_nbc.h \
- src/include/mpir_type_defs.h \
- src/include/mpishared.h \
- src/include/mpistates.h \
- src/include/mpitimerimpl.h \
- src/include/mpiu_utarray.h \
- src/include/mpiu_uthash.h \
- src/include/mpiutil.h \
+ src/include/mpir_op.h \
+ src/include/mpir_process.h \
+ src/include/mpir_utarray.h \
+ src/include/mpir_misc.h \
+ src/include/mpir_tags.h \
+ src/include/mpir_datatype.h \
+ src/include/mpir_win.h \
+ src/include/mpir_pt2pt.h \
src/include/nopackage.h \
- src/include/oputil.h \
src/include/pmi.h \
src/include/pmi2.h \
src/include/rlog.h \
src/include/rlog_macros.h \
- src/include/oputil.h \
- src/include/mpiinfo.h
+ src/include/mpir_op_util.h
-src/include/mpich_cvars.h:
+src/include/mpir_cvars.h:
$(top_srcdir)/maint/extractcvars --dirs="`cat $(top_srcdir)/maint/cvardirs`"
diff --git a/src/include/glue_romio.h.in b/src/include/glue_romio.h.in
deleted file mode 100644
index 9623833..0000000
--- a/src/include/glue_romio.h.in
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2011 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef GLUE_ROMIO_H_INCLUDED
-#define GLUE_ROMIO_H_INCLUDED
-
-/* TODO we should probaly eliminate this type entirely and just patch up the
- * environment so that intptr_t and uintptr_t always work. */
-#define MPIU_Pint @MPIU_PINT@
-#define MPIU_Upint unsigned @MPIU_PINT@
-
-#if @USE_DBG_LOGGING@
-#define USE_DBG_LOGGING 1
-#endif
-
-/* used by ROMIO, should be handled by a romio-private version of this macro
- * instead */
-#ifdef HAVE_WINDOWS_H
-#define MPIU_UNREFERENCED_ARG(a) a
-#else
-#define MPIU_UNREFERENCED_ARG(a)
-#endif
-
-int MPIR_Ext_assert_fail(const char *cond, const char *file_name, int line_num);
-
-#if (!defined(NDEBUG) && (@HAVE_ERROR_CHECKING@))
-#define MPIR_Ext_assert(a_) \
- do { \
- if (!(a_)) { \
- MPIR_Ext_assert_fail(#a_, __FILE__, __LINE__); \
- } \
- } while (0)
-#else
-#define MPIR_Ext_assert(a_) do {} while(0)
-#endif
-
-
-extern int MPIR_Ext_dbg_romio_terse_enabled;
-extern int MPIR_Ext_dbg_romio_typical_enabled;
-extern int MPIR_Ext_dbg_romio_verbose_enabled;
-
-/* a copy of MPIU_Ensure_Aint_fits_in_pointer for external use, slightly
- * modified to use ROMIO's version of the pointer-casting macro */
-#define MPIR_Ext_ensure_Aint_fits_in_pointer(aint) \
- MPIR_Ext_assert((aint) == (MPI_Aint)(MPIU_Upint) ADIOI_AINT_CAST_TO_VOID_PTR(aint));
-
-/* to be called early by ROMIO's initialization process in order to setup init-time
- * glue code that cannot be initialized statically */
-int MPIR_Ext_init(void);
-
-void MPIR_Ext_cs_enter(void);
-void MPIR_Ext_cs_exit(void);
-void MPIR_Ext_cs_yield(void);
-
-/* to facilitate error checking */
-int MPIR_Ext_datatype_iscommitted(MPI_Datatype datatype);
-
-/* prototypes for the mem tracing routines */
-void *MPIU_trmalloc(size_t a, int lineno, const char fname[]);
-void MPIU_trfree(void *a_ptr, int line, const char fname[]);
-void *MPIU_trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[]);
-void *MPIU_trrealloc(void *p, size_t size, int lineno, const char fname[]);
-void *MPIU_trstrdup(const char *str, int lineno, const char fname[]);
-
-#endif /* defined(GLUE_ROMIO_H_INCLUDED) */
-
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index 39cdec3..7aa7675 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -9,6 +9,12 @@
/* user include file for MPI programs */
+#if defined(HAVE_VISIBILITY)
+#define MPICH_API_PUBLIC __attribute__((visibility ("default")))
+#else
+#define MPICH_API_PUBLIC
+#endif
+
/* Keep C++ compilers from getting confused */
#if defined(__cplusplus)
extern "C" {
@@ -381,8 +387,8 @@ typedef enum MPIR_Win_model {
typedef enum MPIR_Topo_type { MPI_GRAPH=1, MPI_CART=2, MPI_DIST_GRAPH=3 } MPIR_Topo_type;
#define MPI_BOTTOM (void *)0
-extern int * const MPI_UNWEIGHTED;
-extern int * const MPI_WEIGHTS_EMPTY;
+extern int * const MPI_UNWEIGHTED MPICH_API_PUBLIC;
+extern int * const MPI_WEIGHTS_EMPTY MPICH_API_PUBLIC;
#define MPI_PROC_NULL (-1)
#define MPI_ANY_SOURCE (-2)
@@ -545,6 +551,9 @@ typedef int MPI_Info;
/* predefined types for MPI_Comm_split_type */
#define MPI_COMM_TYPE_SHARED 1
+/* MPICH-specific types */
+#define MPIX_COMM_TYPE_NEIGHBORHOOD 2
+
/* Definitions that are determined by configure. */
typedef @MPI_AINT@ MPI_Aint;
typedef @MPI_FINT@ MPI_Fint;
@@ -593,7 +602,7 @@ typedef struct MPIR_T_pvar_handle_s * MPI_T_pvar_handle;
typedef struct MPIR_T_pvar_session_s * MPI_T_pvar_session;
/* extra const at front would be safer, but is incompatible with MPI_T_ prototypes */
-extern struct MPIR_T_pvar_handle_s * const MPI_T_PVAR_ALL_HANDLES;
+extern struct MPIR_T_pvar_handle_s * const MPI_T_PVAR_ALL_HANDLES MPICH_API_PUBLIC;
#define MPI_T_ENUM_NULL ((MPI_T_enum)NULL)
#define MPI_T_CVAR_HANDLE_NULL ((MPI_T_cvar_handle)NULL)
@@ -724,8 +733,8 @@ typedef enum MPIR_T_pvar_class_t {
/* See 4.12.5 for MPI_F_STATUS(ES)_IGNORE */
@MPIU_DLL_SPEC_DEF@
-extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUS_IGNORE;
-extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUSES_IGNORE;
+extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUS_IGNORE MPICH_API_PUBLIC;
+extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUSES_IGNORE MPICH_API_PUBLIC;
/* The annotation MPIU_DLL_SPEC to the extern statements is used
as a hook for systems that require C extensions to correctly construct
DLLs, and is defined as an empty string otherwise
@@ -745,16 +754,16 @@ typedef struct {
MPI_Fint MPI_SOURCE;
MPI_Fint MPI_TAG;
MPI_Fint MPI_ERROR;
-} MPI_F08_Status;
+} MPI_F08_status;
-extern MPI_F08_Status MPIR_F08_MPI_STATUS_IGNORE_OBJ;
-extern MPI_F08_Status MPIR_F08_MPI_STATUSES_IGNORE_OBJ[1];
-extern int MPIR_F08_MPI_IN_PLACE;
-extern int MPIR_F08_MPI_BOTTOM;
+extern MPI_F08_status MPIR_F08_MPI_STATUS_IGNORE_OBJ MPICH_API_PUBLIC;
+extern MPI_F08_status MPIR_F08_MPI_STATUSES_IGNORE_OBJ[1] MPICH_API_PUBLIC;
+extern int MPIR_F08_MPI_IN_PLACE MPICH_API_PUBLIC;
+extern int MPIR_F08_MPI_BOTTOM MPICH_API_PUBLIC;
/* Pointers to above objects */
-extern MPI_F08_Status *MPI_F08_STATUS_IGNORE;
-extern MPI_F08_Status *MPI_F08_STATUSES_IGNORE;
+extern MPI_F08_status *MPI_F08_STATUS_IGNORE MPICH_API_PUBLIC;
+extern MPI_F08_status *MPI_F08_STATUSES_IGNORE MPICH_API_PUBLIC;
/* For supported thread levels */
#define MPI_THREAD_SINGLE 0
@@ -873,7 +882,6 @@ typedef int (MPIX_Grequest_wait_function)(int, void **, double, MPI_Status *);
#define MPI_ERR_LASTCODE 0x3fffffff /* Last valid error code for a
predefined error class */
-/* WARNING: this is also defined in mpishared.h. Update both locations */
#define MPICH_ERR_LAST_CLASS 74 /* It is also helpful to know the
last valid class */
@@ -914,642 +922,642 @@ typedef int (MPI_Datarep_extent_function)(MPI_Datatype datatype, MPI_Aint *,
/* We require that the C compiler support prototypes */
/* Begin Prototypes */
int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count);
+ MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_API_PUBLIC;
int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int MPI_Buffer_attach(void *buffer, int size);
-int MPI_Buffer_detach(void *buffer_addr, int *size);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int MPI_Buffer_attach(void *buffer, int size) MPICH_API_PUBLIC;
+int MPI_Buffer_detach(void *buffer_addr, int *size) MPICH_API_PUBLIC;
int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int MPI_Wait(MPI_Request *request, MPI_Status *status);
-int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status);
-int MPI_Request_free(MPI_Request *request);
-int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int MPI_Wait(MPI_Request *request, MPI_Status *status) MPICH_API_PUBLIC;
+int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) MPICH_API_PUBLIC;
+int MPI_Request_free(MPI_Request *request) MPICH_API_PUBLIC;
+int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status) MPICH_API_PUBLIC;
int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx, int *flag,
- MPI_Status *status);
-int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]);
+ MPI_Status *status) MPICH_API_PUBLIC;
+int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
- MPI_Status array_of_statuses[]);
+ MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
int MPI_Waitsome(int incount, MPI_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]);
+ int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]);
-int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status);
-int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status);
-int MPI_Cancel(MPI_Request *request);
-int MPI_Test_cancelled(const MPI_Status *status, int *flag);
+ int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
+int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) MPICH_API_PUBLIC;
+int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) MPICH_API_PUBLIC;
+int MPI_Cancel(MPI_Request *request) MPICH_API_PUBLIC;
+int MPI_Test_cancelled(const MPI_Status *status, int *flag) MPICH_API_PUBLIC;
int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int MPI_Start(MPI_Request *request);
-int MPI_Startall(int count, MPI_Request array_of_requests[]);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int MPI_Start(MPI_Request *request) MPICH_API_PUBLIC;
+int MPI_Startall(int count, MPI_Request array_of_requests[]) MPICH_API_PUBLIC;
int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest,
int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int source, int recvtag, MPI_Comm comm, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8) MPICH_API_PUBLIC;
int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest,
int sendtag, int source, int recvtag, MPI_Comm comm,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_indexed(int count, const int *array_of_blocklengths,
const int *array_of_displacements, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-int MPI_Type_hindexed(int count, const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-int MPI_Type_struct(int count, const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
- const MPI_Datatype *array_of_types, MPI_Datatype *newtype);
-int MPI_Address(const void *location, MPI_Aint *address);
-int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent);
-int MPI_Type_size(MPI_Datatype datatype, int *size);
-int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement);
-int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement);
-int MPI_Type_commit(MPI_Datatype *datatype);
-int MPI_Type_free(MPI_Datatype *datatype);
-int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int MPI_Type_hindexed(int count, int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int MPI_Type_struct(int count, int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
+ MPI_Datatype *array_of_types, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int MPI_Address(void *location, MPI_Aint *address) MPICH_API_PUBLIC;
+int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) MPICH_API_PUBLIC;
+int MPI_Type_size(MPI_Datatype datatype, int *size) MPICH_API_PUBLIC;
+int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_API_PUBLIC;
+int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_API_PUBLIC;
+int MPI_Type_commit(MPI_Datatype *datatype) MPICH_API_PUBLIC;
+int MPI_Type_free(MPI_Datatype *datatype) MPICH_API_PUBLIC;
+int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_API_PUBLIC;
int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf,
- int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Unpack(const void *inbuf, int insize, int *position, void *outbuf, int outcount,
- MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
-int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size);
-int MPI_Barrier(MPI_Comm comm);
+ MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
+int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size) MPICH_API_PUBLIC;
+int MPI_Barrier(MPI_Comm comm) MPICH_API_PUBLIC;
int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_API_PUBLIC;
int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int MPI_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
+ const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) MPICH_API_PUBLIC;
int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op);
-int MPI_Op_free(MPI_Op *op);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
+int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op) MPICH_API_PUBLIC;
+int MPI_Op_free(MPI_Op *op) MPICH_API_PUBLIC;
int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_Group_size(MPI_Group group, int *size);
-int MPI_Group_rank(MPI_Group group, int *rank);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
+int MPI_Group_size(MPI_Group group, int *size) MPICH_API_PUBLIC;
+int MPI_Group_rank(MPI_Group group, int *rank) MPICH_API_PUBLIC;
int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[], MPI_Group group2,
- int ranks2[]);
-int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result);
-int MPI_Comm_group(MPI_Comm comm, MPI_Group *group);
-int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
-int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
-int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
-int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
-int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
-int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
-int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
-int MPI_Group_free(MPI_Group *group);
-int MPI_Comm_size(MPI_Comm comm, int *size);
-int MPI_Comm_rank(MPI_Comm comm, int *rank);
-int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result);
-int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm);
-int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm);
-int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm);
-int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm);
-int MPI_Comm_free(MPI_Comm *comm);
-int MPI_Comm_test_inter(MPI_Comm comm, int *flag);
-int MPI_Comm_remote_size(MPI_Comm comm, int *size);
-int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group);
+ int ranks2[]) MPICH_API_PUBLIC;
+int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) MPICH_API_PUBLIC;
+int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) MPICH_API_PUBLIC;
+int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_API_PUBLIC;
+int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_API_PUBLIC;
+int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_API_PUBLIC;
+int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int MPI_Group_free(MPI_Group *group) MPICH_API_PUBLIC;
+int MPI_Comm_size(MPI_Comm comm, int *size) MPICH_API_PUBLIC;
+int MPI_Comm_rank(MPI_Comm comm, int *rank) MPICH_API_PUBLIC;
+int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result) MPICH_API_PUBLIC;
+int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int MPI_Comm_free(MPI_Comm *comm) MPICH_API_PUBLIC;
+int MPI_Comm_test_inter(MPI_Comm comm, int *flag) MPICH_API_PUBLIC;
+int MPI_Comm_remote_size(MPI_Comm comm, int *size) MPICH_API_PUBLIC;
+int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) MPICH_API_PUBLIC;
int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm,
- int remote_leader, int tag, MPI_Comm *newintercomm);
-int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm);
+ int remote_leader, int tag, MPI_Comm *newintercomm) MPICH_API_PUBLIC;
+int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) MPICH_API_PUBLIC;
int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn,
- int *keyval, void *extra_state);
-int MPI_Keyval_free(int *keyval);
-int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val);
-int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag);
-int MPI_Attr_delete(MPI_Comm comm, int keyval);
-int MPI_Topo_test(MPI_Comm comm, int *status);
+ int *keyval, void *extra_state) MPICH_API_PUBLIC;
+int MPI_Keyval_free(int *keyval) MPICH_API_PUBLIC;
+int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val) MPICH_API_PUBLIC;
+int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
+int MPI_Attr_delete(MPI_Comm comm, int keyval) MPICH_API_PUBLIC;
+int MPI_Topo_test(MPI_Comm comm, int *status) MPICH_API_PUBLIC;
int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int periods[],
- int reorder, MPI_Comm *comm_cart);
-int MPI_Dims_create(int nnodes, int ndims, int dims[]);
+ int reorder, MPI_Comm *comm_cart) MPICH_API_PUBLIC;
+int MPI_Dims_create(int nnodes, int ndims, int dims[]) MPICH_API_PUBLIC;
int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[], const int edges[],
- int reorder, MPI_Comm *comm_graph);
-int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges);
-int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]);
-int MPI_Cartdim_get(MPI_Comm comm, int *ndims);
-int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]);
-int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank);
-int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]);
-int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors);
-int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]);
-int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest);
-int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
-int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank);
-int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank);
-int MPI_Get_processor_name(char *name, int *resultlen);
-int MPI_Get_version(int *version, int *subversion);
-int MPI_Get_library_version(char *version, int *resultlen);
-int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler);
-int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler);
-int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler);
-int MPI_Errhandler_free(MPI_Errhandler *errhandler);
-int MPI_Error_string(int errorcode, char *string, int *resultlen);
-int MPI_Error_class(int errorcode, int *errorclass);
-double MPI_Wtime(void);
-double MPI_Wtick(void);
-int MPI_Init(int *argc, char ***argv);
-int MPI_Finalize(void);
-int MPI_Initialized(int *flag);
-int MPI_Abort(MPI_Comm comm, int errorcode);
+ int reorder, MPI_Comm *comm_graph) MPICH_API_PUBLIC;
+int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) MPICH_API_PUBLIC;
+int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]) MPICH_API_PUBLIC;
+int MPI_Cartdim_get(MPI_Comm comm, int *ndims) MPICH_API_PUBLIC;
+int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]) MPICH_API_PUBLIC;
+int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank) MPICH_API_PUBLIC;
+int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]) MPICH_API_PUBLIC;
+int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) MPICH_API_PUBLIC;
+int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]) MPICH_API_PUBLIC;
+int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) MPICH_API_PUBLIC;
+int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank) MPICH_API_PUBLIC;
+int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank) MPICH_API_PUBLIC;
+int MPI_Get_processor_name(char *name, int *resultlen) MPICH_API_PUBLIC;
+int MPI_Get_version(int *version, int *subversion) MPICH_API_PUBLIC;
+int MPI_Get_library_version(char *version, int *resultlen) MPICH_API_PUBLIC;
+int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
+int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_Errhandler_free(MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_Error_string(int errorcode, char *string, int *resultlen) MPICH_API_PUBLIC;
+int MPI_Error_class(int errorcode, int *errorclass) MPICH_API_PUBLIC;
+double MPI_Wtime(void) MPICH_API_PUBLIC;
+double MPI_Wtick(void) MPICH_API_PUBLIC;
+int MPI_Init(int *argc, char ***argv) MPICH_API_PUBLIC;
+int MPI_Finalize(void) MPICH_API_PUBLIC;
+int MPI_Initialized(int *flag) MPICH_API_PUBLIC;
+int MPI_Abort(MPI_Comm comm, int errorcode) MPICH_API_PUBLIC;
/* Note that we may need to define a @PCONTROL_LIST@ depending on whether
stdargs are supported */
-int MPI_Pcontrol(const int level, ...);
+int MPI_Pcontrol(const int level, ...) MPICH_API_PUBLIC;
int MPI_DUP_FN(MPI_Comm oldcomm, int keyval, void *extra_state, void *attribute_val_in,
- void *attribute_val_out, int *flag);
+ void *attribute_val_out, int *flag) MPICH_API_PUBLIC;
/* Process Creation and Management */
-int MPI_Close_port(const char *port_name);
+int MPI_Close_port(const char *port_name) MPICH_API_PUBLIC;
int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
- MPI_Comm *newcomm);
+ MPI_Comm *newcomm) MPICH_API_PUBLIC;
int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
- MPI_Comm *newcomm);
-int MPI_Comm_disconnect(MPI_Comm *comm);
-int MPI_Comm_get_parent(MPI_Comm *parent);
-int MPI_Comm_join(int fd, MPI_Comm *intercomm);
+ MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int MPI_Comm_disconnect(MPI_Comm *comm) MPICH_API_PUBLIC;
+int MPI_Comm_get_parent(MPI_Comm *parent) MPICH_API_PUBLIC;
+int MPI_Comm_join(int fd, MPI_Comm *intercomm) MPICH_API_PUBLIC;
int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info info, int root,
- MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
+ MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_API_PUBLIC;
int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[],
const int array_of_maxprocs[], const MPI_Info array_of_info[],
- int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
-int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name);
-int MPI_Open_port(MPI_Info info, char *port_name);
-int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name);
-int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name);
-int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info);
-int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info);
+ int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_API_PUBLIC;
+int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name) MPICH_API_PUBLIC;
+int MPI_Open_port(MPI_Info info, char *port_name) MPICH_API_PUBLIC;
+int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_API_PUBLIC;
+int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_API_PUBLIC;
+int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info) MPICH_API_PUBLIC;
+int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info) MPICH_API_PUBLIC;
/* One-Sided Communications */
int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
- MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
- MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int MPI_Win_complete(MPI_Win win);
+ MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int MPI_Win_complete(MPI_Win win) MPICH_API_PUBLIC;
int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
- MPI_Win *win);
-int MPI_Win_fence(int assert, MPI_Win win);
-int MPI_Win_free(MPI_Win *win);
-int MPI_Win_get_group(MPI_Win win, MPI_Group *group);
-int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win);
-int MPI_Win_post(MPI_Group group, int assert, MPI_Win win);
-int MPI_Win_start(MPI_Group group, int assert, MPI_Win win);
-int MPI_Win_test(MPI_Win win, int *flag);
-int MPI_Win_unlock(int rank, MPI_Win win);
-int MPI_Win_wait(MPI_Win win);
+ MPI_Win *win) MPICH_API_PUBLIC;
+int MPI_Win_fence(int assert, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_free(MPI_Win *win) MPICH_API_PUBLIC;
+int MPI_Win_get_group(MPI_Win win, MPI_Group *group) MPICH_API_PUBLIC;
+int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_test(MPI_Win win, int *flag) MPICH_API_PUBLIC;
+int MPI_Win_unlock(int rank, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_wait(MPI_Win win) MPICH_API_PUBLIC;
/* MPI-3 One-Sided Communication Routines */
int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr,
- MPI_Win *win);
+ MPI_Win *win) MPICH_API_PUBLIC;
int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
- void *baseptr, MPI_Win *win);
-int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr);
-int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win);
-int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size);
-int MPI_Win_detach(MPI_Win win, const void *base);
-int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used);
-int MPI_Win_set_info(MPI_Win win, MPI_Info info);
+ void *baseptr, MPI_Win *win) MPICH_API_PUBLIC;
+int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr) MPICH_API_PUBLIC;
+int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win) MPICH_API_PUBLIC;
+int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size) MPICH_API_PUBLIC;
+int MPI_Win_detach(MPI_Win win, const void *base) MPICH_API_PUBLIC;
+int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used) MPICH_API_PUBLIC;
+int MPI_Win_set_info(MPI_Win win, MPI_Info info) MPICH_API_PUBLIC;
int MPI_Get_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
MPI_Op op, MPI_Win win)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
void *result_addr, MPI_Datatype datatype, int target_rank,
MPI_Aint target_disp, MPI_Win win)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4) MPICH_API_PUBLIC;
int MPI_Rput(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Rget(void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Raccumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
-int MPI_Win_lock_all(int assert, MPI_Win win);
-int MPI_Win_unlock_all(MPI_Win win);
-int MPI_Win_flush(int rank, MPI_Win win);
-int MPI_Win_flush_all(MPI_Win win);
-int MPI_Win_flush_local(int rank, MPI_Win win);
-int MPI_Win_flush_local_all(MPI_Win win);
-int MPI_Win_sync(MPI_Win win);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
+int MPI_Win_lock_all(int assert, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_unlock_all(MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_flush(int rank, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_flush_all(MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_flush_local(int rank, MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_flush_local_all(MPI_Win win) MPICH_API_PUBLIC;
+int MPI_Win_sync(MPI_Win win) MPICH_API_PUBLIC;
/* External Interfaces */
-int MPI_Add_error_class(int *errorclass);
-int MPI_Add_error_code(int errorclass, int *errorcode);
-int MPI_Add_error_string(int errorcode, const char *string);
-int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode);
+int MPI_Add_error_class(int *errorclass) MPICH_API_PUBLIC;
+int MPI_Add_error_code(int errorclass, int *errorcode) MPICH_API_PUBLIC;
+int MPI_Add_error_string(int errorcode, const char *string) MPICH_API_PUBLIC;
+int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode) MPICH_API_PUBLIC;
int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
MPI_Comm_delete_attr_function *comm_delete_attr_fn, int *comm_keyval,
- void *extra_state);
-int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval);
-int MPI_Comm_free_keyval(int *comm_keyval);
-int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag);
-int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen);
-int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val);
-int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name);
-int MPI_File_call_errhandler(MPI_File fh, int errorcode);
-int MPI_Grequest_complete(MPI_Request request);
+ void *extra_state) MPICH_API_PUBLIC;
+int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval) MPICH_API_PUBLIC;
+int MPI_Comm_free_keyval(int *comm_keyval) MPICH_API_PUBLIC;
+int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
+int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen) MPICH_API_PUBLIC;
+int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val) MPICH_API_PUBLIC;
+int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name) MPICH_API_PUBLIC;
+int MPI_File_call_errhandler(MPI_File fh, int errorcode) MPICH_API_PUBLIC;
+int MPI_Grequest_complete(MPI_Request request) MPICH_API_PUBLIC;
int MPI_Grequest_start(MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn,
MPI_Grequest_cancel_function *cancel_fn, void *extra_state,
- MPI_Request *request);
-int MPI_Init_thread(int *argc, char ***argv, int required, int *provided);
-int MPI_Is_thread_main(int *flag);
-int MPI_Query_thread(int *provided);
-int MPI_Status_set_cancelled(MPI_Status *status, int flag);
-int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count);
+ MPI_Request *request) MPICH_API_PUBLIC;
+int MPI_Init_thread(int *argc, char ***argv, int required, int *provided) MPICH_API_PUBLIC;
+int MPI_Is_thread_main(int *flag) MPICH_API_PUBLIC;
+int MPI_Query_thread(int *provided) MPICH_API_PUBLIC;
+int MPI_Status_set_cancelled(MPI_Status *status, int flag) MPICH_API_PUBLIC;
+int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count) MPICH_API_PUBLIC;
int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
MPI_Type_delete_attr_function *type_delete_attr_fn,
- int *type_keyval, void *extra_state);
-int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval);
-int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype);
-int MPI_Type_free_keyval(int *type_keyval);
-int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag);
+ int *type_keyval, void *extra_state) MPICH_API_PUBLIC;
+int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval) MPICH_API_PUBLIC;
+int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int MPI_Type_free_keyval(int *type_keyval) MPICH_API_PUBLIC;
+int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
int MPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses,
int max_datatypes, int array_of_integers[],
- MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]);
+ MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]) MPICH_API_PUBLIC;
int MPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses,
- int *num_datatypes, int *combiner);
-int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen);
-int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val);
-int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name);
-int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype);
-int MPI_Win_call_errhandler(MPI_Win win, int errorcode);
+ int *num_datatypes, int *combiner) MPICH_API_PUBLIC;
+int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen) MPICH_API_PUBLIC;
+int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val) MPICH_API_PUBLIC;
+int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name) MPICH_API_PUBLIC;
+int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype) MPICH_API_PUBLIC;
+int MPI_Win_call_errhandler(MPI_Win win, int errorcode) MPICH_API_PUBLIC;
int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
MPI_Win_delete_attr_function *win_delete_attr_fn, int *win_keyval,
- void *extra_state);
-int MPI_Win_delete_attr(MPI_Win win, int win_keyval);
-int MPI_Win_free_keyval(int *win_keyval);
-int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag);
-int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen);
-int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val);
-int MPI_Win_set_name(MPI_Win win, const char *win_name);
-
-int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr);
+ void *extra_state) MPICH_API_PUBLIC;
+int MPI_Win_delete_attr(MPI_Win win, int win_keyval) MPICH_API_PUBLIC;
+int MPI_Win_free_keyval(int *win_keyval) MPICH_API_PUBLIC;
+int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
+int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen) MPICH_API_PUBLIC;
+int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) MPICH_API_PUBLIC;
+int MPI_Win_set_name(MPI_Win win, const char *win_name) MPICH_API_PUBLIC;
+
+int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) MPICH_API_PUBLIC;
int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
- MPI_Errhandler *errhandler);
-int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler);
-int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler);
+ MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
int MPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
- MPI_Errhandler *errhandler);
-int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
-int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler);
-int MPI_Finalized(int *flag);
-int MPI_Free_mem(void *base);
-int MPI_Get_address(const void *location, MPI_Aint *address);
-int MPI_Info_create(MPI_Info *info);
-int MPI_Info_delete(MPI_Info info, const char *key);
-int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo);
-int MPI_Info_free(MPI_Info *info);
-int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag);
-int MPI_Info_get_nkeys(MPI_Info info, int *nkeys);
-int MPI_Info_get_nthkey(MPI_Info info, int n, char *key);
-int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag);
-int MPI_Info_set(MPI_Info info, const char *key, const char *value);
+ MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
+int MPI_Finalized(int *flag) MPICH_API_PUBLIC;
+int MPI_Free_mem(void *base) MPICH_API_PUBLIC;
+int MPI_Get_address(const void *location, MPI_Aint *address) MPICH_API_PUBLIC;
+int MPI_Info_create(MPI_Info *info) MPICH_API_PUBLIC;
+int MPI_Info_delete(MPI_Info info, const char *key) MPICH_API_PUBLIC;
+int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) MPICH_API_PUBLIC;
+int MPI_Info_free(MPI_Info *info) MPICH_API_PUBLIC;
+int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag) MPICH_API_PUBLIC;
+int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) MPICH_API_PUBLIC;
+int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) MPICH_API_PUBLIC;
+int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag) MPICH_API_PUBLIC;
+int MPI_Info_set(MPI_Info info, const char *key, const char *value) MPICH_API_PUBLIC;
int MPI_Pack_external(const char datarep[], const void *inbuf, int incount,
MPI_Datatype datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Pack_external_size(const char datarep[], int incount, MPI_Datatype datatype,
- MPI_Aint *size);
-int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status);
-int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status);
-int MPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status);
+ MPI_Aint *size) MPICH_API_PUBLIC;
+int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status) MPICH_API_PUBLIC;
+int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status) MPICH_API_PUBLIC;
+int MPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status) MPICH_API_PUBLIC;
int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[],
const int array_of_distribs[], const int array_of_dargs[],
const int array_of_psizes[], int order, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_create_hindexed(int count, const int array_of_blocklengths[],
const MPI_Aint array_of_displacements[], MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_create_indexed_block(int count, int blocklength, const int array_of_displacements[],
- MPI_Datatype oldtype, MPI_Datatype *newtype);
+ MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_create_hindexed_block(int count, int blocklength,
const MPI_Aint array_of_displacements[],
- MPI_Datatype oldtype, MPI_Datatype *newtype);
+ MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_create_struct(int count, const int array_of_blocklengths[],
const MPI_Aint array_of_displacements[],
- const MPI_Datatype array_of_types[], MPI_Datatype *newtype);
+ const MPI_Datatype array_of_types[], MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Type_create_subarray(int ndims, const int array_of_sizes[],
const int array_of_subsizes[], const int array_of_starts[],
- int order, MPI_Datatype oldtype, MPI_Datatype *newtype);
-int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent);
-int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent);
+ int order, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent) MPICH_API_PUBLIC;
+int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent) MPICH_API_PUBLIC;
int MPI_Unpack_external(const char datarep[], const void *inbuf, MPI_Aint insize,
MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_API_PUBLIC;
int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
- MPI_Errhandler *errhandler);
-int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler);
-int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler);
+ MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
/* Fortran 90-related functions. These routines are available only if
Fortran 90 support is enabled
*/
-int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype);
-int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype);
-int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype);
+int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype,
MPI_Op op)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_Op_commutative(MPI_Op op, int *commute);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
+int MPI_Op_commutative(MPI_Op op, int *commute) MPICH_API_PUBLIC;
int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, const int sources[],
const int sourceweights[], int outdegree,
const int destinations[], const int destweights[],
- MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
+ MPI_Info info, int reorder, MPI_Comm *comm_dist_graph) MPICH_API_PUBLIC;
int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[], const int degrees[],
const int destinations[], const int weights[], MPI_Info info,
- int reorder, MPI_Comm *comm_dist_graph);
-int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted);
+ int reorder, MPI_Comm *comm_dist_graph) MPICH_API_PUBLIC;
+int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted) MPICH_API_PUBLIC;
int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int sources[], int sourceweights[],
- int maxoutdegree, int destinations[], int destweights[]);
+ int maxoutdegree, int destinations[], int destweights[]) MPICH_API_PUBLIC;
/* Matched probe functionality */
int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message,
- MPI_Status *status);
+ MPI_Status *status) MPICH_API_PUBLIC;
int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
- MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status);
+ MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status) MPICH_API_PUBLIC;
int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
/* Nonblocking collectives */
-int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request);
-int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request);
+int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request) MPICH_API_PUBLIC;
+int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request) MPICH_API_PUBLIC;
int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm,
- MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[],
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_API_PUBLIC;
int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm,
- MPI_Request *request);
+ MPI_Request *request) MPICH_API_PUBLIC;
int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
/* Neighborhood collectives */
int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
MPI_Comm comm, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[],
- const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request);
+ const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request) MPICH_API_PUBLIC;
int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) MPICH_API_PUBLIC;
/* Shared memory */
-int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm);
+int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm) MPICH_API_PUBLIC;
/* MPI-3 "large count" routines */
-int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count);
-int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count);
-int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
-int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
-int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size);
+int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count) MPICH_API_PUBLIC;
+int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count) MPICH_API_PUBLIC;
+int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_API_PUBLIC;
+int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_API_PUBLIC;
+int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size) MPICH_API_PUBLIC;
/* Noncollective communicator creation */
-int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm);
+int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm) MPICH_API_PUBLIC;
/* MPI_Aint addressing arithmetic */
-MPI_Aint MPI_Aint_add(MPI_Aint base, MPI_Aint disp);
-MPI_Aint MPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
+MPI_Aint MPI_Aint_add(MPI_Aint base, MPI_Aint disp) MPICH_API_PUBLIC;
+MPI_Aint MPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2) MPICH_API_PUBLIC;
/* MPI_T interface */
/* The MPI_T routines are available only in C bindings - tell tools that they
can skip these prototypes */
/* Begin Skip Prototypes */
-int MPI_T_init_thread(int required, int *provided);
-int MPI_T_finalize(void);
-int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len);
-int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len);
-int MPI_T_cvar_get_num(int *num_cvar);
+int MPI_T_init_thread(int required, int *provided) MPICH_API_PUBLIC;
+int MPI_T_finalize(void) MPICH_API_PUBLIC;
+int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len) MPICH_API_PUBLIC;
+int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len) MPICH_API_PUBLIC;
+int MPI_T_cvar_get_num(int *num_cvar) MPICH_API_PUBLIC;
int MPI_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity,
MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
- int *binding, int *scope);
+ int *binding, int *scope) MPICH_API_PUBLIC;
int MPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle,
- int *count);
-int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle);
-int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf);
-int MPI_T_cvar_write(MPI_T_cvar_handle handle, const void *buf);
-int MPI_T_pvar_get_num(int *num_pvar);
+ int *count) MPICH_API_PUBLIC;
+int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle) MPICH_API_PUBLIC;
+int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf) MPICH_API_PUBLIC;
+int MPI_T_cvar_write(MPI_T_cvar_handle handle, const void *buf) MPICH_API_PUBLIC;
+int MPI_T_pvar_get_num(int *num_pvar) MPICH_API_PUBLIC;
int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class,
MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
- int *binding, int *readonly, int *continuous, int *atomic);
-int MPI_T_pvar_session_create(MPI_T_pvar_session *session);
-int MPI_T_pvar_session_free(MPI_T_pvar_session *session);
+ int *binding, int *readonly, int *continuous, int *atomic) MPICH_API_PUBLIC;
+int MPI_T_pvar_session_create(MPI_T_pvar_session *session) MPICH_API_PUBLIC;
+int MPI_T_pvar_session_free(MPI_T_pvar_session *session) MPICH_API_PUBLIC;
int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index, void *obj_handle,
- MPI_T_pvar_handle *handle, int *count);
-int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle);
-int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
-int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const void *buf);
-int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
-int MPI_T_category_get_num(int *num_cat);
+ MPI_T_pvar_handle *handle, int *count) MPICH_API_PUBLIC;
+int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle) MPICH_API_PUBLIC;
+int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_API_PUBLIC;
+int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_API_PUBLIC;
+int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_API_PUBLIC;
+int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const void *buf) MPICH_API_PUBLIC;
+int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_API_PUBLIC;
+int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_API_PUBLIC;
+int MPI_T_category_get_num(int *num_cat) MPICH_API_PUBLIC;
int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len,
- int *num_cvars, int *num_pvars, int *num_categories);
-int MPI_T_category_get_cvars(int cat_index, int len, int indices[]);
-int MPI_T_category_get_pvars(int cat_index, int len, int indices[]);
-int MPI_T_category_get_categories(int cat_index, int len, int indices[]);
-int MPI_T_category_changed(int *stamp);
-int MPI_T_cvar_get_index(const char *name, int *cvar_index);
-int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index);
-int MPI_T_category_get_index(const char *name, int *cat_index);
+ int *num_cvars, int *num_pvars, int *num_categories) MPICH_API_PUBLIC;
+int MPI_T_category_get_cvars(int cat_index, int len, int indices[]) MPICH_API_PUBLIC;
+int MPI_T_category_get_pvars(int cat_index, int len, int indices[]) MPICH_API_PUBLIC;
+int MPI_T_category_get_categories(int cat_index, int len, int indices[]) MPICH_API_PUBLIC;
+int MPI_T_category_changed(int *stamp) MPICH_API_PUBLIC;
+int MPI_T_cvar_get_index(const char *name, int *cvar_index) MPICH_API_PUBLIC;
+int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index) MPICH_API_PUBLIC;
+int MPI_T_category_get_index(const char *name, int *cat_index) MPICH_API_PUBLIC;
/* End Skip Prototypes */
/* Non-standard but public extensions to MPI */
/* Fault Tolerance Extensions */
-int MPIX_Comm_failure_ack(MPI_Comm comm);
-int MPIX_Comm_failure_get_acked(MPI_Comm comm, MPI_Group *failedgrp);
-int MPIX_Comm_revoke(MPI_Comm comm);
-int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm);
-int MPIX_Comm_agree(MPI_Comm comm, int *flag);
+int MPIX_Comm_failure_ack(MPI_Comm comm) MPICH_API_PUBLIC;
+int MPIX_Comm_failure_get_acked(MPI_Comm comm, MPI_Group *failedgrp) MPICH_API_PUBLIC;
+int MPIX_Comm_revoke(MPI_Comm comm) MPICH_API_PUBLIC;
+int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int MPIX_Comm_agree(MPI_Comm comm, int *flag) MPICH_API_PUBLIC;
/* End Prototypes */
@@ -1559,643 +1567,643 @@ int MPIX_Comm_agree(MPI_Comm comm, int *flag);
/* Here are the bindings of the profiling routines */
#if !defined(MPI_BUILD_PROFILING)
int PMPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int PMPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count);
+ MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int PMPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_API_PUBLIC;
int PMPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int PMPI_Buffer_attach(void *buffer, int size);
-int PMPI_Buffer_detach(void *buffer_addr, int *size);
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int PMPI_Buffer_attach(void *buffer, int size) MPICH_API_PUBLIC;
+int PMPI_Buffer_detach(void *buffer_addr, int *size) MPICH_API_PUBLIC;
int PMPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int PMPI_Wait(MPI_Request *request, MPI_Status *status);
-int PMPI_Test(MPI_Request *request, int *flag, MPI_Status *status);
-int PMPI_Request_free(MPI_Request *request);
-int PMPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int PMPI_Wait(MPI_Request *request, MPI_Status *status) MPICH_API_PUBLIC;
+int PMPI_Test(MPI_Request *request, int *flag, MPI_Status *status) MPICH_API_PUBLIC;
+int PMPI_Request_free(MPI_Request *request) MPICH_API_PUBLIC;
+int PMPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status) MPICH_API_PUBLIC;
int PMPI_Testany(int count, MPI_Request array_of_requests[], int *indx, int *flag,
- MPI_Status *status);
-int PMPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]);
+ MPI_Status *status) MPICH_API_PUBLIC;
+int PMPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
int PMPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
- MPI_Status array_of_statuses[]);
+ MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
int PMPI_Waitsome(int incount, MPI_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]);
+ int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
int PMPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]);
-int PMPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status);
-int PMPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status);
-int PMPI_Cancel(MPI_Request *request);
-int PMPI_Test_cancelled(const MPI_Status *status, int *flag);
+ int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_API_PUBLIC;
+int PMPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) MPICH_API_PUBLIC;
+int PMPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) MPICH_API_PUBLIC;
+int PMPI_Cancel(MPI_Request *request) MPICH_API_PUBLIC;
+int PMPI_Test_cancelled(const MPI_Status *status, int *flag) MPICH_API_PUBLIC;
int PMPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int PMPI_Start(MPI_Request *request);
-int PMPI_Startall(int count, MPI_Request array_of_requests[]);
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int PMPI_Start(MPI_Request *request) MPICH_API_PUBLIC;
+int PMPI_Startall(int count, MPI_Request array_of_requests[]) MPICH_API_PUBLIC;
int PMPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest,
int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int source, int recvtag, MPI_Comm comm, MPI_Status *status)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8) MPICH_API_PUBLIC;
int PMPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest,
int sendtag, int source, int recvtag, MPI_Comm comm,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int PMPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int PMPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_indexed(int count, const int *array_of_blocklengths,
const int *array_of_displacements, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-int PMPI_Type_hindexed(int count, const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-int PMPI_Type_struct(int count, const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
- const MPI_Datatype *array_of_types, MPI_Datatype *newtype);
-int PMPI_Address(const void *location, MPI_Aint *address);
-int PMPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent);
-int PMPI_Type_size(MPI_Datatype datatype, int *size);
-int PMPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement);
-int PMPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement);
-int PMPI_Type_commit(MPI_Datatype *datatype);
-int PMPI_Type_free(MPI_Datatype *datatype);
-int PMPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int PMPI_Type_hindexed(int count, int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int PMPI_Type_struct(int count, int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
+ MPI_Datatype *array_of_types, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int PMPI_Address(void *location, MPI_Aint *address) MPICH_API_PUBLIC;
+int PMPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) MPICH_API_PUBLIC;
+int PMPI_Type_size(MPI_Datatype datatype, int *size) MPICH_API_PUBLIC;
+int PMPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_API_PUBLIC;
+int PMPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_API_PUBLIC;
+int PMPI_Type_commit(MPI_Datatype *datatype) MPICH_API_PUBLIC;
+int PMPI_Type_free(MPI_Datatype *datatype) MPICH_API_PUBLIC;
+int PMPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_API_PUBLIC;
int PMPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf,
- int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Unpack(const void *inbuf, int insize, int *position, void *outbuf, int outcount,
- MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
-int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size);
-int PMPI_Barrier(MPI_Comm comm);
+ MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
+int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size) MPICH_API_PUBLIC;
+int PMPI_Barrier(MPI_Comm comm) MPICH_API_PUBLIC;
int PMPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int PMPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_API_PUBLIC;
int PMPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int PMPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int PMPI_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
+ const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) MPICH_API_PUBLIC;
int PMPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op);
-int PMPI_Op_free(MPI_Op *op);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
+int PMPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op) MPICH_API_PUBLIC;
+int PMPI_Op_free(MPI_Op *op) MPICH_API_PUBLIC;
int PMPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_Group_size(MPI_Group group, int *size);
-int PMPI_Group_rank(MPI_Group group, int *rank);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
+int PMPI_Group_size(MPI_Group group, int *size) MPICH_API_PUBLIC;
+int PMPI_Group_rank(MPI_Group group, int *rank) MPICH_API_PUBLIC;
int PMPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[], MPI_Group group2,
- int ranks2[]);
-int PMPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result);
-int PMPI_Comm_group(MPI_Comm comm, MPI_Group *group);
-int PMPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
-int PMPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
-int PMPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
-int PMPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
-int PMPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
-int PMPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
-int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
-int PMPI_Group_free(MPI_Group *group);
-int PMPI_Comm_size(MPI_Comm comm, int *size);
-int PMPI_Comm_rank(MPI_Comm comm, int *rank);
-int PMPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result);
-int PMPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm);
-int PMPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm);
-int PMPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm);
-int PMPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm);
-int PMPI_Comm_free(MPI_Comm *comm);
-int PMPI_Comm_test_inter(MPI_Comm comm, int *flag);
-int PMPI_Comm_remote_size(MPI_Comm comm, int *size);
-int PMPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group);
+ int ranks2[]) MPICH_API_PUBLIC;
+int PMPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) MPICH_API_PUBLIC;
+int PMPI_Comm_group(MPI_Comm comm, MPI_Group *group) MPICH_API_PUBLIC;
+int PMPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_API_PUBLIC;
+int PMPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_API_PUBLIC;
+int PMPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_API_PUBLIC;
+int PMPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int PMPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int PMPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_API_PUBLIC;
+int PMPI_Group_free(MPI_Group *group) MPICH_API_PUBLIC;
+int PMPI_Comm_size(MPI_Comm comm, int *size) MPICH_API_PUBLIC;
+int PMPI_Comm_rank(MPI_Comm comm, int *rank) MPICH_API_PUBLIC;
+int PMPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result) MPICH_API_PUBLIC;
+int PMPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int PMPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int PMPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int PMPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int PMPI_Comm_free(MPI_Comm *comm) MPICH_API_PUBLIC;
+int PMPI_Comm_test_inter(MPI_Comm comm, int *flag) MPICH_API_PUBLIC;
+int PMPI_Comm_remote_size(MPI_Comm comm, int *size) MPICH_API_PUBLIC;
+int PMPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) MPICH_API_PUBLIC;
int PMPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm,
- int remote_leader, int tag, MPI_Comm *newintercomm);
-int PMPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm);
+ int remote_leader, int tag, MPI_Comm *newintercomm) MPICH_API_PUBLIC;
+int PMPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) MPICH_API_PUBLIC;
int PMPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn,
- int *keyval, void *extra_state);
-int PMPI_Keyval_free(int *keyval);
-int PMPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val);
-int PMPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag);
-int PMPI_Attr_delete(MPI_Comm comm, int keyval);
-int PMPI_Topo_test(MPI_Comm comm, int *status);
+ int *keyval, void *extra_state) MPICH_API_PUBLIC;
+int PMPI_Keyval_free(int *keyval) MPICH_API_PUBLIC;
+int PMPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val) MPICH_API_PUBLIC;
+int PMPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
+int PMPI_Attr_delete(MPI_Comm comm, int keyval) MPICH_API_PUBLIC;
+int PMPI_Topo_test(MPI_Comm comm, int *status) MPICH_API_PUBLIC;
int PMPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int periods[],
- int reorder, MPI_Comm *comm_cart);
-int PMPI_Dims_create(int nnodes, int ndims, int dims[]);
+ int reorder, MPI_Comm *comm_cart) MPICH_API_PUBLIC;
+int PMPI_Dims_create(int nnodes, int ndims, int dims[]) MPICH_API_PUBLIC;
int PMPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[], const int edges[],
- int reorder, MPI_Comm *comm_graph);
-int PMPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges);
-int PMPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]);
-int PMPI_Cartdim_get(MPI_Comm comm, int *ndims);
-int PMPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]);
-int PMPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank);
-int PMPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]);
-int PMPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors);
-int PMPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]);
-int PMPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest);
-int PMPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
-int PMPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank);
-int PMPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank);
-int PMPI_Get_processor_name(char *name, int *resultlen);
-int PMPI_Get_version(int *version, int *subversion);
-int PMPI_Get_library_version(char *version, int *resultlen);
-int PMPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler);
-int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler);
-int PMPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler);
-int PMPI_Errhandler_free(MPI_Errhandler *errhandler);
-int PMPI_Error_string(int errorcode, char *string, int *resultlen);
-int PMPI_Error_class(int errorcode, int *errorclass);
-double PMPI_Wtime(void);
-double PMPI_Wtick(void);
-int PMPI_Init(int *argc, char ***argv);
-int PMPI_Finalize(void);
-int PMPI_Initialized(int *flag);
-int PMPI_Abort(MPI_Comm comm, int errorcode);
+ int reorder, MPI_Comm *comm_graph) MPICH_API_PUBLIC;
+int PMPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) MPICH_API_PUBLIC;
+int PMPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]) MPICH_API_PUBLIC;
+int PMPI_Cartdim_get(MPI_Comm comm, int *ndims) MPICH_API_PUBLIC;
+int PMPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]) MPICH_API_PUBLIC;
+int PMPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank) MPICH_API_PUBLIC;
+int PMPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]) MPICH_API_PUBLIC;
+int PMPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) MPICH_API_PUBLIC;
+int PMPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]) MPICH_API_PUBLIC;
+int PMPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) MPICH_API_PUBLIC;
+int PMPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int PMPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank) MPICH_API_PUBLIC;
+int PMPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank) MPICH_API_PUBLIC;
+int PMPI_Get_processor_name(char *name, int *resultlen) MPICH_API_PUBLIC;
+int PMPI_Get_version(int *version, int *subversion) MPICH_API_PUBLIC;
+int PMPI_Get_library_version(char *version, int *resultlen) MPICH_API_PUBLIC;
+int PMPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
+int PMPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_Errhandler_free(MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_Error_string(int errorcode, char *string, int *resultlen) MPICH_API_PUBLIC;
+int PMPI_Error_class(int errorcode, int *errorclass) MPICH_API_PUBLIC;
+double PMPI_Wtime(void) MPICH_API_PUBLIC;
+double PMPI_Wtick(void) MPICH_API_PUBLIC;
+int PMPI_Init(int *argc, char ***argv) MPICH_API_PUBLIC;
+int PMPI_Finalize(void) MPICH_API_PUBLIC;
+int PMPI_Initialized(int *flag) MPICH_API_PUBLIC;
+int PMPI_Abort(MPI_Comm comm, int errorcode) MPICH_API_PUBLIC;
/* Note that we may need to define a @PCONTROL_LIST@ depending on whether
stdargs are supported */
-int PMPI_Pcontrol(const int level, ...);
+int PMPI_Pcontrol(const int level, ...) MPICH_API_PUBLIC;
/* Process Creation and Management */
-int PMPI_Close_port(const char *port_name);
+int PMPI_Close_port(const char *port_name) MPICH_API_PUBLIC;
int PMPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
- MPI_Comm *newcomm);
+ MPI_Comm *newcomm) MPICH_API_PUBLIC;
int PMPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
- MPI_Comm *newcomm);
-int PMPI_Comm_disconnect(MPI_Comm *comm);
-int PMPI_Comm_get_parent(MPI_Comm *parent);
-int PMPI_Comm_join(int fd, MPI_Comm *intercomm);
+ MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int PMPI_Comm_disconnect(MPI_Comm *comm) MPICH_API_PUBLIC;
+int PMPI_Comm_get_parent(MPI_Comm *parent) MPICH_API_PUBLIC;
+int PMPI_Comm_join(int fd, MPI_Comm *intercomm) MPICH_API_PUBLIC;
int PMPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info info, int root,
- MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
+ MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_API_PUBLIC;
int PMPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[],
const int array_of_maxprocs[], const MPI_Info array_of_info[],
- int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
-int PMPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name);
-int PMPI_Open_port(MPI_Info info, char *port_name);
-int PMPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name);
-int PMPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name);
-int PMPI_Comm_set_info(MPI_Comm comm, MPI_Info info);
-int PMPI_Comm_get_info(MPI_Comm comm, MPI_Info *info);
+ int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_API_PUBLIC;
+int PMPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name) MPICH_API_PUBLIC;
+int PMPI_Open_port(MPI_Info info, char *port_name) MPICH_API_PUBLIC;
+int PMPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_API_PUBLIC;
+int PMPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_API_PUBLIC;
+int PMPI_Comm_set_info(MPI_Comm comm, MPI_Info info) MPICH_API_PUBLIC;
+int PMPI_Comm_get_info(MPI_Comm comm, MPI_Info *info) MPICH_API_PUBLIC;
/* One-Sided Communications */
int PMPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
- MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
- MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int PMPI_Win_complete(MPI_Win win);
+ MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int PMPI_Win_complete(MPI_Win win) MPICH_API_PUBLIC;
int PMPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
- MPI_Win *win);
-int PMPI_Win_fence(int assert, MPI_Win win);
-int PMPI_Win_free(MPI_Win *win);
-int PMPI_Win_get_group(MPI_Win win, MPI_Group *group);
-int PMPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win);
-int PMPI_Win_post(MPI_Group group, int assert, MPI_Win win);
-int PMPI_Win_start(MPI_Group group, int assert, MPI_Win win);
-int PMPI_Win_test(MPI_Win win, int *flag);
-int PMPI_Win_unlock(int rank, MPI_Win win);
-int PMPI_Win_wait(MPI_Win win);
+ MPI_Win *win) MPICH_API_PUBLIC;
+int PMPI_Win_fence(int assert, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_free(MPI_Win *win) MPICH_API_PUBLIC;
+int PMPI_Win_get_group(MPI_Win win, MPI_Group *group) MPICH_API_PUBLIC;
+int PMPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_post(MPI_Group group, int assert, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_start(MPI_Group group, int assert, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_test(MPI_Win win, int *flag) MPICH_API_PUBLIC;
+int PMPI_Win_unlock(int rank, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_wait(MPI_Win win) MPICH_API_PUBLIC;
/* MPI-3 One-Sided Communication Routines */
int PMPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr,
- MPI_Win *win);
+ MPI_Win *win) MPICH_API_PUBLIC;
int PMPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
- void *baseptr, MPI_Win *win);
-int PMPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr);
-int PMPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win);
-int PMPI_Win_attach(MPI_Win win, void *base, MPI_Aint size);
-int PMPI_Win_detach(MPI_Win win, const void *base);
-int PMPI_Win_get_info(MPI_Win win, MPI_Info *info_used);
-int PMPI_Win_set_info(MPI_Win win, MPI_Info info);
+ void *baseptr, MPI_Win *win) MPICH_API_PUBLIC;
+int PMPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr) MPICH_API_PUBLIC;
+int PMPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win) MPICH_API_PUBLIC;
+int PMPI_Win_attach(MPI_Win win, void *base, MPI_Aint size) MPICH_API_PUBLIC;
+int PMPI_Win_detach(MPI_Win win, const void *base) MPICH_API_PUBLIC;
+int PMPI_Win_get_info(MPI_Win win, MPI_Info *info_used) MPICH_API_PUBLIC;
+int PMPI_Win_set_info(MPI_Win win, MPI_Info info) MPICH_API_PUBLIC;
int PMPI_Get_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Fetch_and_op(const void *origin_addr, void *result_addr,
MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
MPI_Op op, MPI_Win win)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
void *result_addr, MPI_Datatype datatype, int target_rank,
MPI_Aint target_disp, MPI_Win win)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4) MPICH_API_PUBLIC;
int PMPI_Rput(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Rget(void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Raccumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Rget_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
-int PMPI_Win_lock_all(int assert, MPI_Win win);
-int PMPI_Win_unlock_all(MPI_Win win);
-int PMPI_Win_flush(int rank, MPI_Win win);
-int PMPI_Win_flush_all(MPI_Win win);
-int PMPI_Win_flush_local(int rank, MPI_Win win);
-int PMPI_Win_flush_local_all(MPI_Win win);
-int PMPI_Win_sync(MPI_Win win);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
+int PMPI_Win_lock_all(int assert, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_unlock_all(MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_flush(int rank, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_flush_all(MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_flush_local(int rank, MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_flush_local_all(MPI_Win win) MPICH_API_PUBLIC;
+int PMPI_Win_sync(MPI_Win win) MPICH_API_PUBLIC;
/* External Interfaces */
-int PMPI_Add_error_class(int *errorclass);
-int PMPI_Add_error_code(int errorclass, int *errorcode);
-int PMPI_Add_error_string(int errorcode, const char *string);
-int PMPI_Comm_call_errhandler(MPI_Comm comm, int errorcode);
+int PMPI_Add_error_class(int *errorclass) MPICH_API_PUBLIC;
+int PMPI_Add_error_code(int errorclass, int *errorcode) MPICH_API_PUBLIC;
+int PMPI_Add_error_string(int errorcode, const char *string) MPICH_API_PUBLIC;
+int PMPI_Comm_call_errhandler(MPI_Comm comm, int errorcode) MPICH_API_PUBLIC;
int PMPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
MPI_Comm_delete_attr_function *comm_delete_attr_fn, int *comm_keyval,
- void *extra_state);
-int PMPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval);
-int PMPI_Comm_free_keyval(int *comm_keyval);
-int PMPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag);
-int PMPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen);
-int PMPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val);
-int PMPI_Comm_set_name(MPI_Comm comm, const char *comm_name);
-int PMPI_File_call_errhandler(MPI_File fh, int errorcode);
-int PMPI_Grequest_complete(MPI_Request request);
+ void *extra_state) MPICH_API_PUBLIC;
+int PMPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval) MPICH_API_PUBLIC;
+int PMPI_Comm_free_keyval(int *comm_keyval) MPICH_API_PUBLIC;
+int PMPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
+int PMPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen) MPICH_API_PUBLIC;
+int PMPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val) MPICH_API_PUBLIC;
+int PMPI_Comm_set_name(MPI_Comm comm, const char *comm_name) MPICH_API_PUBLIC;
+int PMPI_File_call_errhandler(MPI_File fh, int errorcode) MPICH_API_PUBLIC;
+int PMPI_Grequest_complete(MPI_Request request) MPICH_API_PUBLIC;
int PMPI_Grequest_start(MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn,
MPI_Grequest_cancel_function *cancel_fn, void *extra_state,
- MPI_Request *request);
-int PMPI_Init_thread(int *argc, char ***argv, int required, int *provided);
-int PMPI_Is_thread_main(int *flag);
-int PMPI_Query_thread(int *provided);
-int PMPI_Status_set_cancelled(MPI_Status *status, int flag);
-int PMPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count);
+ MPI_Request *request) MPICH_API_PUBLIC;
+int PMPI_Init_thread(int *argc, char ***argv, int required, int *provided) MPICH_API_PUBLIC;
+int PMPI_Is_thread_main(int *flag) MPICH_API_PUBLIC;
+int PMPI_Query_thread(int *provided) MPICH_API_PUBLIC;
+int PMPI_Status_set_cancelled(MPI_Status *status, int flag) MPICH_API_PUBLIC;
+int PMPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count) MPICH_API_PUBLIC;
int PMPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
MPI_Type_delete_attr_function *type_delete_attr_fn,
- int *type_keyval, void *extra_state);
-int PMPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval);
-int PMPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype);
-int PMPI_Type_free_keyval(int *type_keyval);
-int PMPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag);
+ int *type_keyval, void *extra_state) MPICH_API_PUBLIC;
+int PMPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval) MPICH_API_PUBLIC;
+int PMPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int PMPI_Type_free_keyval(int *type_keyval) MPICH_API_PUBLIC;
+int PMPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
int PMPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses,
int max_datatypes, int array_of_integers[],
- MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]);
+ MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]) MPICH_API_PUBLIC;
int PMPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses,
- int *num_datatypes, int *combiner);
-int PMPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen);
-int PMPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val);
-int PMPI_Type_set_name(MPI_Datatype datatype, const char *type_name);
-int PMPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype);
-int PMPI_Win_call_errhandler(MPI_Win win, int errorcode);
+ int *num_datatypes, int *combiner) MPICH_API_PUBLIC;
+int PMPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen) MPICH_API_PUBLIC;
+int PMPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val) MPICH_API_PUBLIC;
+int PMPI_Type_set_name(MPI_Datatype datatype, const char *type_name) MPICH_API_PUBLIC;
+int PMPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype) MPICH_API_PUBLIC;
+int PMPI_Win_call_errhandler(MPI_Win win, int errorcode) MPICH_API_PUBLIC;
int PMPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
MPI_Win_delete_attr_function *win_delete_attr_fn, int *win_keyval,
- void *extra_state);
-int PMPI_Win_delete_attr(MPI_Win win, int win_keyval);
-int PMPI_Win_free_keyval(int *win_keyval);
-int PMPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag);
-int PMPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen);
-int PMPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val);
-int PMPI_Win_set_name(MPI_Win win, const char *win_name);
-
-int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr);
+ void *extra_state) MPICH_API_PUBLIC;
+int PMPI_Win_delete_attr(MPI_Win win, int win_keyval) MPICH_API_PUBLIC;
+int PMPI_Win_free_keyval(int *win_keyval) MPICH_API_PUBLIC;
+int PMPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag) MPICH_API_PUBLIC;
+int PMPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen) MPICH_API_PUBLIC;
+int PMPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) MPICH_API_PUBLIC;
+int PMPI_Win_set_name(MPI_Win win, const char *win_name) MPICH_API_PUBLIC;
+
+int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) MPICH_API_PUBLIC;
int PMPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
- MPI_Errhandler *errhandler);
-int PMPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler);
-int PMPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler);
+ MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
int PMPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
- MPI_Errhandler *errhandler);
-int PMPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
-int PMPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler);
-int PMPI_Finalized(int *flag);
-int PMPI_Free_mem(void *base);
-int PMPI_Get_address(const void *location, MPI_Aint *address);
-int PMPI_Info_create(MPI_Info *info);
-int PMPI_Info_delete(MPI_Info info, const char *key);
-int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo);
-int PMPI_Info_free(MPI_Info *info);
-int PMPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag);
-int PMPI_Info_get_nkeys(MPI_Info info, int *nkeys);
-int PMPI_Info_get_nthkey(MPI_Info info, int n, char *key);
-int PMPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag);
-int PMPI_Info_set(MPI_Info info, const char *key, const char *value);
+ MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
+int PMPI_Finalized(int *flag) MPICH_API_PUBLIC;
+int PMPI_Free_mem(void *base) MPICH_API_PUBLIC;
+int PMPI_Get_address(const void *location, MPI_Aint *address) MPICH_API_PUBLIC;
+int PMPI_Info_create(MPI_Info *info) MPICH_API_PUBLIC;
+int PMPI_Info_delete(MPI_Info info, const char *key) MPICH_API_PUBLIC;
+int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo) MPICH_API_PUBLIC;
+int PMPI_Info_free(MPI_Info *info) MPICH_API_PUBLIC;
+int PMPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag) MPICH_API_PUBLIC;
+int PMPI_Info_get_nkeys(MPI_Info info, int *nkeys) MPICH_API_PUBLIC;
+int PMPI_Info_get_nthkey(MPI_Info info, int n, char *key) MPICH_API_PUBLIC;
+int PMPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag) MPICH_API_PUBLIC;
+int PMPI_Info_set(MPI_Info info, const char *key, const char *value) MPICH_API_PUBLIC;
int PMPI_Pack_external(const char datarep[], const void *inbuf, int incount,
MPI_Datatype datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Pack_external_size(const char datarep[], int incount, MPI_Datatype datatype,
- MPI_Aint *size);
-int PMPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status);
-int PMPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status);
-int PMPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status);
+ MPI_Aint *size) MPICH_API_PUBLIC;
+int PMPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status) MPICH_API_PUBLIC;
+int PMPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status) MPICH_API_PUBLIC;
+int PMPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status) MPICH_API_PUBLIC;
int PMPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[],
const int array_of_distribs[], const int array_of_dargs[],
const int array_of_psizes[], int order, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_create_hindexed(int count, const int array_of_blocklengths[],
const MPI_Aint array_of_displacements[], MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_create_indexed_block(int count, int blocklength, const int array_of_displacements[],
- MPI_Datatype oldtype, MPI_Datatype *newtype);
+ MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_create_hindexed_block(int count, int blocklength,
const MPI_Aint array_of_displacements[],
- MPI_Datatype oldtype, MPI_Datatype *newtype);
+ MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_create_struct(int count, const int array_of_blocklengths[],
const MPI_Aint array_of_displacements[],
- const MPI_Datatype array_of_types[], MPI_Datatype *newtype);
+ const MPI_Datatype array_of_types[], MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Type_create_subarray(int ndims, const int array_of_sizes[],
const int array_of_subsizes[], const int array_of_starts[],
- int order, MPI_Datatype oldtype, MPI_Datatype *newtype);
-int PMPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent);
-int PMPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent);
+ int order, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int PMPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent) MPICH_API_PUBLIC;
+int PMPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent) MPICH_API_PUBLIC;
int PMPI_Unpack_external(const char datarep[], const void *inbuf, MPI_Aint insize,
MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_API_PUBLIC;
int PMPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
- MPI_Errhandler *errhandler);
-int PMPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler);
-int PMPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler);
+ MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler) MPICH_API_PUBLIC;
+int PMPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) MPICH_API_PUBLIC;
/* Fortran 90-related functions. These routines are available only if
Fortran 90 support is enabled
*/
-int PMPI_Type_create_f90_integer(int r, MPI_Datatype *newtype);
-int PMPI_Type_create_f90_real(int p, int r, MPI_Datatype *newtype);
-int PMPI_Type_create_f90_complex(int p, int r, MPI_Datatype *newtype);
+int PMPI_Type_create_f90_integer(int r, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int PMPI_Type_create_f90_real(int p, int r, MPI_Datatype *newtype) MPICH_API_PUBLIC;
+int PMPI_Type_create_f90_complex(int p, int r, MPI_Datatype *newtype) MPICH_API_PUBLIC;
int PMPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype,
MPI_Op op)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_Op_commutative(MPI_Op op, int *commute);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
+int PMPI_Op_commutative(MPI_Op op, int *commute) MPICH_API_PUBLIC;
int PMPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, const int sources[],
const int sourceweights[], int outdegree,
const int destinations[], const int destweights[],
- MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
+ MPI_Info info, int reorder, MPI_Comm *comm_dist_graph) MPICH_API_PUBLIC;
int PMPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[], const int degrees[],
const int destinations[], const int weights[], MPI_Info info,
- int reorder, MPI_Comm *comm_dist_graph);
-int PMPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted);
+ int reorder, MPI_Comm *comm_dist_graph) MPICH_API_PUBLIC;
+int PMPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted) MPICH_API_PUBLIC;
int PMPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int sources[], int sourceweights[],
- int maxoutdegree, int destinations[], int destweights[]);
+ int maxoutdegree, int destinations[], int destweights[]) MPICH_API_PUBLIC;
/* Matched probe functionality */
int PMPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message,
- MPI_Status *status);
+ MPI_Status *status) MPICH_API_PUBLIC;
int PMPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
- MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
-int PMPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status);
+ MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
+int PMPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status) MPICH_API_PUBLIC;
int PMPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
/* Nonblocking collectives */
-int PMPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request);
-int PMPI_Ibarrier(MPI_Comm comm, MPI_Request *request);
+int PMPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request) MPICH_API_PUBLIC;
+int PMPI_Ibarrier(MPI_Comm comm, MPI_Request *request) MPICH_API_PUBLIC;
int PMPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm,
- MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+ MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_API_PUBLIC;
int PMPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int PMPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[],
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_API_PUBLIC;
int PMPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int PMPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int PMPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm,
- MPI_Request *request);
+ MPI_Request *request) MPICH_API_PUBLIC;
int PMPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
int PMPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_API_PUBLIC;
/* Neighborhood collectives */
int PMPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
MPI_Comm comm, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int PMPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int PMPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[],
- const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request);
+ const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request) MPICH_API_PUBLIC;
int PMPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_API_PUBLIC;
int PMPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_API_PUBLIC;
int PMPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_API_PUBLIC;
int PMPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
- MPI_Comm comm);
+ MPI_Comm comm) MPICH_API_PUBLIC;
/* Shared memory */
-int PMPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm);
+int PMPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm) MPICH_API_PUBLIC;
/* Noncollective communicator creation */
-int PMPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm);
+int PMPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm) MPICH_API_PUBLIC;
/* MPI-3 "large count" routines */
-int PMPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count);
-int PMPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count);
-int PMPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
-int PMPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
-int PMPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size);
+int PMPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count) MPICH_API_PUBLIC;
+int PMPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count) MPICH_API_PUBLIC;
+int PMPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_API_PUBLIC;
+int PMPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_API_PUBLIC;
+int PMPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size) MPICH_API_PUBLIC;
/* MPI_Aint addressing arithmetic */
-MPI_Aint PMPI_Aint_add(MPI_Aint base, MPI_Aint disp);
-MPI_Aint PMPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
+MPI_Aint PMPI_Aint_add(MPI_Aint base, MPI_Aint disp) MPICH_API_PUBLIC;
+MPI_Aint PMPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2) MPICH_API_PUBLIC;
/* MPI_T interface */
/* The MPI_T routines are available only in C bindings - tell tools that they
can skip these prototypes */
/* Begin Skip Prototypes */
-int PMPI_T_init_thread(int required, int *provided);
-int PMPI_T_finalize(void);
-int PMPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len);
-int PMPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len);
-int PMPI_T_cvar_get_num(int *num_cvar);
+int PMPI_T_init_thread(int required, int *provided) MPICH_API_PUBLIC;
+int PMPI_T_finalize(void) MPICH_API_PUBLIC;
+int PMPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len) MPICH_API_PUBLIC;
+int PMPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len) MPICH_API_PUBLIC;
+int PMPI_T_cvar_get_num(int *num_cvar) MPICH_API_PUBLIC;
int PMPI_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity,
MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
- int *binding, int *scope);
+ int *binding, int *scope) MPICH_API_PUBLIC;
int PMPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle,
- int *count);
-int PMPI_T_cvar_handle_free(MPI_T_cvar_handle *handle);
-int PMPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf);
-int PMPI_T_cvar_write(MPI_T_cvar_handle handle, const void *buf);
-int PMPI_T_pvar_get_num(int *num_pvar);
+ int *count) MPICH_API_PUBLIC;
+int PMPI_T_cvar_handle_free(MPI_T_cvar_handle *handle) MPICH_API_PUBLIC;
+int PMPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf) MPICH_API_PUBLIC;
+int PMPI_T_cvar_write(MPI_T_cvar_handle handle, const void *buf) MPICH_API_PUBLIC;
+int PMPI_T_pvar_get_num(int *num_pvar) MPICH_API_PUBLIC;
int PMPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class,
MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
- int *binding, int *readonly, int *continuous, int *atomic);
-int PMPI_T_pvar_session_create(MPI_T_pvar_session *session);
-int PMPI_T_pvar_session_free(MPI_T_pvar_session *session);
+ int *binding, int *readonly, int *continuous, int *atomic) MPICH_API_PUBLIC;
+int PMPI_T_pvar_session_create(MPI_T_pvar_session *session) MPICH_API_PUBLIC;
+int PMPI_T_pvar_session_free(MPI_T_pvar_session *session) MPICH_API_PUBLIC;
int PMPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index, void *obj_handle,
- MPI_T_pvar_handle *handle, int *count);
-int PMPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle);
-int PMPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int PMPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int PMPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
-int PMPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const void *buf);
-int PMPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int PMPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
-int PMPI_T_category_get_num(int *num_cat);
+ MPI_T_pvar_handle *handle, int *count) MPICH_API_PUBLIC;
+int PMPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle) MPICH_API_PUBLIC;
+int PMPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_API_PUBLIC;
+int PMPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_API_PUBLIC;
+int PMPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_API_PUBLIC;
+int PMPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const void *buf) MPICH_API_PUBLIC;
+int PMPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_API_PUBLIC;
+int PMPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_API_PUBLIC;
+int PMPI_T_category_get_num(int *num_cat) MPICH_API_PUBLIC;
int PMPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len,
- int *num_cvars, int *num_pvars, int *num_categories);
-int PMPI_T_category_get_cvars(int cat_index, int len, int indices[]);
-int PMPI_T_category_get_pvars(int cat_index, int len, int indices[]);
-int PMPI_T_category_get_categories(int cat_index, int len, int indices[]);
-int PMPI_T_category_changed(int *stamp);
-int PMPI_T_cvar_get_index(const char *name, int *cvar_index);
-int PMPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index);
-int PMPI_T_category_get_index(const char *name, int *cat_index);
+ int *num_cvars, int *num_pvars, int *num_categories) MPICH_API_PUBLIC;
+int PMPI_T_category_get_cvars(int cat_index, int len, int indices[]) MPICH_API_PUBLIC;
+int PMPI_T_category_get_pvars(int cat_index, int len, int indices[]) MPICH_API_PUBLIC;
+int PMPI_T_category_get_categories(int cat_index, int len, int indices[]) MPICH_API_PUBLIC;
+int PMPI_T_category_changed(int *stamp) MPICH_API_PUBLIC;
+int PMPI_T_cvar_get_index(const char *name, int *cvar_index) MPICH_API_PUBLIC;
+int PMPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index) MPICH_API_PUBLIC;
+int PMPI_T_category_get_index(const char *name, int *cat_index) MPICH_API_PUBLIC;
/* End Skip Prototypes */
/* Non-standard but public extensions to MPI */
/* Fault Tolerance Extensions */
-int PMPIX_Comm_failure_ack(MPI_Comm comm);
-int PMPIX_Comm_failure_get_acked(MPI_Comm comm, MPI_Group *failedgrp);
-int PMPIX_Comm_revoke(MPI_Comm comm);
-int PMPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm);
-int PMPIX_Comm_agree(MPI_Comm comm, int *flag);
+int PMPIX_Comm_failure_ack(MPI_Comm comm) MPICH_API_PUBLIC;
+int PMPIX_Comm_failure_get_acked(MPI_Comm comm, MPI_Group *failedgrp) MPICH_API_PUBLIC;
+int PMPIX_Comm_revoke(MPI_Comm comm) MPICH_API_PUBLIC;
+int PMPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm) MPICH_API_PUBLIC;
+int PMPIX_Comm_agree(MPI_Comm comm, int *flag) MPICH_API_PUBLIC;
#endif /* MPI_BUILD_PROFILING */
/* End of MPI bindings */
@@ -2240,23 +2248,23 @@ int MPIX_Grequest_class_create(MPI_Grequest_query_function *query_fn,
MPI_Grequest_cancel_function *cancel_fn,
MPIX_Grequest_poll_function *poll_fn,
MPIX_Grequest_wait_function *wait_fn,
- MPIX_Grequest_class *greq_class);
+ MPIX_Grequest_class *greq_class) MPICH_API_PUBLIC;
int MPIX_Grequest_class_allocate(MPIX_Grequest_class greq_class, void *extra_state,
- MPI_Request *request);
+ MPI_Request *request) MPICH_API_PUBLIC;
int MPIX_Grequest_start(MPI_Grequest_query_function *query_fn,
MPI_Grequest_free_function *free_fn,
MPI_Grequest_cancel_function *cancel_fn,
MPIX_Grequest_poll_function *poll_fn,
MPIX_Grequest_wait_function *wait_fn, void *extra_state,
- MPI_Request *request);
+ MPI_Request *request) MPICH_API_PUBLIC;
/* RMA Mutexes Extensions */
struct mpixi_mutex_s;
typedef struct mpixi_mutex_s * MPIX_Mutex;
-int MPIX_Mutex_create(int count, MPI_Comm comm, MPIX_Mutex *hdl);
-int MPIX_Mutex_free(MPIX_Mutex *hdl);
-int MPIX_Mutex_lock(MPIX_Mutex hdl, int mutex, int proc);
-int MPIX_Mutex_unlock(MPIX_Mutex hdl, int mutex, int proc);
+int MPIX_Mutex_create(int count, MPI_Comm comm, MPIX_Mutex *hdl) MPICH_API_PUBLIC;
+int MPIX_Mutex_free(MPIX_Mutex *hdl) MPICH_API_PUBLIC;
+int MPIX_Mutex_lock(MPIX_Mutex hdl, int mutex, int proc) MPICH_API_PUBLIC;
+int MPIX_Mutex_unlock(MPIX_Mutex hdl, int mutex, int proc) MPICH_API_PUBLIC;
#if !defined(MPI_BUILD_PROFILING)
@@ -2266,21 +2274,21 @@ int PMPIX_Grequest_class_create(MPI_Grequest_query_function *query_fn,
MPI_Grequest_cancel_function *cancel_fn,
MPIX_Grequest_poll_function *poll_fn,
MPIX_Grequest_wait_function *wait_fn,
- MPIX_Grequest_class *greq_class);
+ MPIX_Grequest_class *greq_class) MPICH_API_PUBLIC;
int PMPIX_Grequest_class_allocate(MPIX_Grequest_class greq_class, void *extra_state,
- MPI_Request *request);
+ MPI_Request *request) MPICH_API_PUBLIC;
int PMPIX_Grequest_start(MPI_Grequest_query_function *query_fn,
MPI_Grequest_free_function *free_fn,
MPI_Grequest_cancel_function *cancel_fn,
MPIX_Grequest_poll_function *poll_fn,
MPIX_Grequest_wait_function *wait_fn, void *extra_state,
- MPI_Request *request);
+ MPI_Request *request) MPICH_API_PUBLIC;
/* RMA Mutexes Extensions */
-int PMPIX_Mutex_create(int count, MPI_Comm comm, MPIX_Mutex *hdl);
-int PMPIX_Mutex_free(MPIX_Mutex *hdl);
-int PMPIX_Mutex_lock(MPIX_Mutex hdl, int mutex, int proc);
-int PMPIX_Mutex_unlock(MPIX_Mutex hdl, int mutex, int proc);
+int PMPIX_Mutex_create(int count, MPI_Comm comm, MPIX_Mutex *hdl) MPICH_API_PUBLIC;
+int PMPIX_Mutex_free(MPIX_Mutex *hdl) MPICH_API_PUBLIC;
+int PMPIX_Mutex_lock(MPIX_Mutex hdl, int mutex, int proc) MPICH_API_PUBLIC;
+int PMPIX_Mutex_unlock(MPIX_Mutex hdl, int mutex, int proc) MPICH_API_PUBLIC;
#endif /* MPI_BUILD_PROFILING */
#endif
diff --git a/src/include/mpi_attr.h b/src/include/mpi_attr.h
deleted file mode 100644
index 0369d1e..0000000
--- a/src/include/mpi_attr.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPI_ATTR_H_INCLUDED
-#define MPI_ATTR_H_INCLUDED
-
-/* bit 0 distinguishes between pointers (0) and integers (1) */
-typedef enum
- { MPIR_ATTR_PTR=0, MPIR_ATTR_AINT=1, MPIR_ATTR_INT=3 } MPIR_AttrType;
-
-#define MPIR_ATTR_KIND(_a) (_a & 0x1)
-
-int MPIR_CommSetAttr( MPI_Comm, int, void *, MPIR_AttrType );
-int MPIR_TypeSetAttr( MPI_Datatype, int, void *, MPIR_AttrType );
-int MPIR_WinSetAttr( MPI_Win, int, void *, MPIR_AttrType );
-int MPIR_CommGetAttr( MPI_Comm, int, void *, int *, MPIR_AttrType );
-int MPIR_TypeGetAttr( MPI_Datatype, int, void *, int *, MPIR_AttrType );
-int MPIR_WinGetAttr( MPI_Win, int, void *, int *, MPIR_AttrType );
-
-int MPIR_CommGetAttr_fort( MPI_Comm, int, void *, int *, MPIR_AttrType );
-
-#endif /* MPI_ATTR_H_INCLUDED */
diff --git a/src/include/mpi_f77interface.h b/src/include/mpi_f77interface.h
deleted file mode 100644
index fd09a47..0000000
--- a/src/include/mpi_f77interface.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* These functions are provided by the MPICH code for the Fortran interface,
- and provide the interfaces needed to keep track of which MPI internal
- objects need to have Fortran or Fortran 90 characteristics */
-void MPIR_Keyval_set_fortran( int );
-void MPIR_Keyval_set_fortran90( int );
-void MPIR_Grequest_set_lang_f77( MPI_Request greq );
-#if defined(HAVE_FORTRAN_BINDING) && !defined(HAVE_FINT_IS_INT)
-void MPIR_Op_set_fc( MPI_Op );
-typedef void (MPIR_F77_User_function) ( void *, void *, MPI_Fint *, MPI_Fint * );
-void MPIR_Errhandler_set_fc( MPI_Errhandler );
-#endif
-
-#define MPIR_ATTR_C_TO_FORTRAN(ATTR) ((ATTR)+1)
diff --git a/src/include/mpi_fortlogical.h b/src/include/mpi_fortlogical.h
deleted file mode 100644
index 004a7c2..0000000
--- a/src/include/mpi_fortlogical.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPI_FORTLOGICAL_H_INCLUDED
-#define MPI_FORTLOGICAL_H_INCLUDED
-
-/* Fortran logical values */
-#ifndef _CRAY
-#ifdef F77_USE_BOOLEAN_LITERALS
-#define MPIR_F_TRUE F77_TRUE_VALUE
-#define MPIR_F_FALSE F77_FALSE_VALUE
-#else
-#if !defined(F77_RUNTIME_VALUES) && defined(F77_TRUE_VALUE_SET)
-extern const MPI_Fint MPIR_F_TRUE, MPIR_F_FALSE;
-#else
-extern MPI_Fint MPIR_F_TRUE, MPIR_F_FALSE;
-#endif
-#endif
-#define MPIR_TO_FLOG(a) ((a) ? MPIR_F_TRUE : MPIR_F_FALSE)
-/*
- Note on true and false. This code is only an approximation.
- Some systems define either true or false, and allow some or ALL other
- patterns for the other. This is just like C, where 0 is false and
- anything not zero is true. Modify this test as necessary for your
- system.
-
- We check against FALSE instead of TRUE because many (perhaps all at this
- point) Fortran compilers use 0 for false and some non-zero value for
- true. By using this test, it is possible to use the same Fortran
- interface library for multiple compilers that differ only in the
- value used for Fortran .TRUE. .
- */
-#define MPIR_FROM_FLOG(a) ( (a) == MPIR_F_FALSE ? 0 : 1 )
-
-#else
-/* CRAY Vector processors only; these are defined in /usr/include/fortran.h
- Thanks to lmc at cray.com */
-#define MPIR_TO_FLOG(a) (_btol(a))
-#define MPIR_FROM_FLOG(a) ( _ltob(&(a)) ) /* (a) must be a pointer */
-#endif
-
-#endif /* MPI_FORTLOGICAL_H_INCLUDED */
diff --git a/src/include/mpi_lang.h b/src/include/mpi_lang.h
deleted file mode 100644
index 20994fd..0000000
--- a/src/include/mpi_lang.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- *
- * Portions of this code were written by Microsoft. Those portions are
- * Copyright (c) 2007 Microsoft Corporation. Microsoft grants
- * permission to use, reproduce, prepare derivative works, and to
- * redistribute to others. The code is licensed "as is." The User
- * bears the risk of using it. Microsoft gives no express warranties,
- * guarantees or conditions. To the extent permitted by law, Microsoft
- * excludes the implied warranties of merchantability, fitness for a
- * particular purpose and non-infringement.
- */
-
-#ifndef MPI_LANG_H_INCLUDED
-#define MPI_LANG_H_INCLUDED
-
-#include "mpi_attr.h"
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-/*E
- Language bindings for MPI
-
- A few operations in MPI need to know how to marshal the callback into the calling
- lanuage calling convention. The marshaling code is provided by a thunk layer which
- implements the correct behavior. Examples of these callback functions are the
- keyval attribute copy and delete functions.
-
- Module:
- Attribute-DS
- E*/
-
-/*
- * Support bindings for Attribute copy/del callbacks
- * Consolidate Comm/Type/Win attribute functions together as the handle type is the same
- * use MPI_Comm for the prototypes
- */
-typedef
-int
-(MPID_Attr_copy_proxy)(
- MPI_Comm_copy_attr_function* user_function,
- int handle,
- int keyval,
- void* extra_state,
- MPIR_AttrType attrib_type,
- void* attrib,
- void** attrib_copy,
- int* flag
- );
-
-typedef
-int
-(MPID_Attr_delete_proxy)(
- MPI_Comm_delete_attr_function* user_function,
- int handle,
- int keyval,
- MPIR_AttrType attrib_type,
- void* attrib,
- void* extra_state
- );
-
-void
-MPIR_Keyval_set_proxy(
- int keyval,
- MPID_Attr_copy_proxy copy_proxy,
- MPID_Attr_delete_proxy delete_proxy
- );
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* MPI_LANG_H_INCLUDED */
diff --git a/src/include/mpiallstates.h b/src/include/mpiallstates.h
index 265775d..5f78a92 100644
--- a/src/include/mpiallstates.h
+++ b/src/include/mpiallstates.h
@@ -19,7 +19,6 @@ enum MPID_TIMER_STATE {
MPID_STATE_ACQUIRE_LOCAL_LOCK,
MPID_STATE_APPEND_OVERFLOW,
MPID_STATE_CANCEL_RECV,
- MPID_STATE_CHECK_ALLOC,
MPID_STATE_CHECK_AND_SET_REQ_COMPLETION,
MPID_STATE_CHECK_TERMINATING_VCS,
MPID_STATE_CKPT_RESTART,
@@ -53,7 +52,6 @@ enum MPID_TIMER_STATE {
MPID_STATE_FLUSH_ALL,
MPID_STATE_FLUSH_LOCAL_ALL,
MPID_STATE_FOUND_BETTER_SC,
- MPID_STATE_GETQUEUEDCOMPLETIONSTATUS,
MPID_STATE_GET_BUSINESS_CARD,
MPID_STATE_GET_EVENT_INFO,
MPID_STATE_GET_FAILED_GROUP,
@@ -103,6 +101,8 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPIDI_CH3I_GET,
MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE,
MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM,
+ MPID_STATE_MPIDI_CH3I_PORT_DESTROY,
+ MPID_STATE_MPIDI_CH3I_PORT_INIT,
MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED,
MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED,
MPID_STATE_MPIDI_CH3I_PROGRESS,
@@ -120,9 +120,6 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP,
MPID_STATE_MPIDI_CH3I_PUT,
MPID_STATE_MPIDI_CH3I_RELEASE_LOCK,
- MPID_STATE_MPIDI_CH3I_SEG_ALLOC,
- MPID_STATE_MPIDI_CH3I_SEG_COMMIT,
- MPID_STATE_MPIDI_CH3I_SEG_DESTROY,
MPID_STATE_MPIDI_CH3I_SENDNONCONTIG,
MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT,
MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT,
@@ -135,7 +132,41 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPIDI_CH3I_SHM_PUT_OP,
MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS,
MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH,
+ MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_DEQUEUE,
+ MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_ENQUEUE,
+ MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_CONNECT,
+ MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLERR,
+ MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLHUP,
+ MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_READ,
+ MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_WRITE,
+ MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_ALLOC,
+ MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_FREE,
+ MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT,
+ MPID_STATE_MPIDI_CH3I_SOCK_CLOSE_OPEN_SOCKETS,
MPID_STATE_MPIDI_CH3I_SOCK_CONNECT,
+ MPID_STATE_MPIDI_CH3I_SOCK_CREATE_SET,
+ MPID_STATE_MPIDI_CH3I_SOCK_DESTROY_SET,
+ MPID_STATE_MPIDI_CH3I_SOCK_FINALIZE,
+ MPID_STATE_MPIDI_CH3I_SOCK_GET_CONNINFO_FROM_BC,
+ MPID_STATE_MPIDI_CH3I_SOCK_GET_ERROR_CLASS_STRING,
+ MPID_STATE_MPIDI_CH3I_SOCK_GET_HOST_DESCRIPTION,
+ MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_ID,
+ MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_SET_ID,
+ MPID_STATE_MPIDI_CH3I_SOCK_INIT,
+ MPID_STATE_MPIDI_CH3I_SOCK_LISTEN,
+ MPID_STATE_MPIDI_CH3I_SOCK_POST_CLOSE,
+ MPID_STATE_MPIDI_CH3I_SOCK_POST_CONNECT_IFADDR,
+ MPID_STATE_MPIDI_CH3I_SOCK_POST_READ,
+ MPID_STATE_MPIDI_CH3I_SOCK_POST_READV,
+ MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITE,
+ MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITEV,
+ MPID_STATE_MPIDI_CH3I_SOCK_READ,
+ MPID_STATE_MPIDI_CH3I_SOCK_READV,
+ MPID_STATE_MPIDI_CH3I_SOCK_SET_USER_PTR,
+ MPID_STATE_MPIDI_CH3I_SOCK_WAIT,
+ MPID_STATE_MPIDI_CH3I_SOCK_WAKEUP,
+ MPID_STATE_MPIDI_CH3I_SOCK_WRITE,
+ MPID_STATE_MPIDI_CH3I_SOCK_WRITEV,
MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK,
MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT,
MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM,
@@ -264,6 +295,7 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPIDI_PG_FIND,
MPID_STATE_MPIDI_PG_SetConnInfo,
MPID_STATE_MPIDI_PG_TO_STRING,
+ MPID_STATE_MPIDI_PORT_FINALIZE,
MPID_STATE_MPIDI_RMA_FINALIZE,
MPID_STATE_MPIDI_RMA_INIT,
MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET,
@@ -275,41 +307,12 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPIDU_FTB_FINALIZE,
MPID_STATE_MPIDU_FTB_INIT,
MPID_STATE_MPIDU_FTB_PUBLISH,
- MPID_STATE_MPIDU_SOCKI_HANDLE_CONNECT,
- MPID_STATE_MPIDU_SOCKI_HANDLE_POLLERR,
- MPID_STATE_MPIDU_SOCKI_HANDLE_POLLHUP,
- MPID_STATE_MPIDU_SOCKI_HANDLE_READ,
- MPID_STATE_MPIDU_SOCKI_HANDLE_WRITE,
- MPID_STATE_MPIDU_SOCKI_SOCK_ALLOC,
- MPID_STATE_MPIDU_SOCKI_SOCK_FREE,
- MPID_STATE_MPIDU_SOCK_ACCEPT,
- MPID_STATE_MPIDU_SOCK_CLOSE_OPEN_SOCKETS,
- MPID_STATE_MPIDU_SOCK_CREATE_SET,
- MPID_STATE_MPIDU_SOCK_DESTROY_SET,
- MPID_STATE_MPIDU_SOCK_FINALIZE,
- MPID_STATE_MPIDU_SOCK_GET_CONNINFO_FROM_BC,
- MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING,
- MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION,
- MPID_STATE_MPIDU_SOCK_GET_SOCK_ID,
- MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID,
- MPID_STATE_MPIDU_SOCK_HOSTNAME_TO_HOST_DESCRIPTION,
- MPID_STATE_MPIDU_SOCK_INIT,
- MPID_STATE_MPIDU_SOCK_LISTEN,
- MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK,
- MPID_STATE_MPIDU_SOCK_POST_CLOSE,
- MPID_STATE_MPIDU_SOCK_POST_CONNECT,
- MPID_STATE_MPIDU_SOCK_POST_CONNECT_IFADDR,
- MPID_STATE_MPIDU_SOCK_POST_READ,
- MPID_STATE_MPIDU_SOCK_POST_READV,
- MPID_STATE_MPIDU_SOCK_POST_WRITE,
- MPID_STATE_MPIDU_SOCK_POST_WRITEV,
- MPID_STATE_MPIDU_SOCK_READ,
- MPID_STATE_MPIDU_SOCK_READV,
- MPID_STATE_MPIDU_SOCK_SET_USER_PTR,
- MPID_STATE_MPIDU_SOCK_WAIT,
- MPID_STATE_MPIDU_SOCK_WAKEUP,
- MPID_STATE_MPIDU_SOCK_WRITE,
- MPID_STATE_MPIDU_SOCK_WRITEV,
+ MPID_STATE_MPIDU_SHM_BARRIER,
+ MPID_STATE_MPIDU_SHM_BARRIER_INIT,
+ MPID_STATE_MPIDU_SHM_CHECK_ALLOC,
+ MPID_STATE_MPIDU_SHM_SEG_ALLOC,
+ MPID_STATE_MPIDU_SHM_SEG_COMMIT,
+ MPID_STATE_MPIDU_SHM_SEG_DESTROY,
MPID_STATE_MPID_ABORT,
MPID_STATE_MPID_ACCUMULATE,
MPID_STATE_MPID_AINT_ADD,
@@ -344,8 +347,6 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPID_ISSEND,
MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION,
MPID_STATE_MPID_NEM_ATTACH_SHM_REGION,
- MPID_STATE_MPID_NEM_BARRIER,
- MPID_STATE_MPID_NEM_BARRIER_INIT,
MPID_STATE_MPID_NEM_BARRIER_VARS_INIT,
MPID_STATE_MPID_NEM_CELL_INIT,
MPID_STATE_MPID_NEM_CHOOSE_NETMOD,
@@ -495,13 +496,12 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPID_NEM_TCP_VC_TERMINATE,
MPID_STATE_MPID_NEM_VC_DESTROY,
MPID_STATE_MPID_NEM_VC_INIT,
- MPID_STATE_MPID_OPEN_PORT,
MPID_STATE_MPID_PROBE,
MPID_STATE_MPID_PUT,
MPID_STATE_MPID_RACCUMULATE,
MPID_STATE_MPID_RECV,
MPID_STATE_MPID_RECV_INIT,
- MPID_STATE_MPID_REQUEST_CREATE,
+ MPID_STATE_MPID_REQUEST_INIT,
MPID_STATE_MPID_RGET,
MPID_STATE_MPID_RGET_ACCUMULATE,
MPID_STATE_MPID_RPUT,
@@ -564,9 +564,11 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES,
MPID_STATE_MPIR_COMM_GET_ATTR,
MPID_STATE_MPIR_COMM_GROUP_IMPL,
- MPID_STATE_MPIR_COMM_MAP_DUP,
+ MPID_STATE_MPIR_COMM_KIND__INTERCOMM_CREATE_IMPL,
+ MPID_STATE_MPIR_COMM_KIND__INTERCOMM_MERGE_IMPL,
MPID_STATE_MPIR_COMM_MAP_FREE,
- MPID_STATE_MPIR_COMM_MAP_IRREGULAR,
+ MPID_STATE_MPIR_COMM_MAP_TYPE__DUP,
+ MPID_STATE_MPIR_COMM_MAP_TYPE__IRREGULAR,
MPID_STATE_MPIR_COMM_REGISTER_HINT,
MPID_STATE_MPIR_COMM_RELEASE_ALWAYS,
MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL,
@@ -588,9 +590,8 @@ enum MPID_TIMER_STATE {
MPID_STATE_MPIR_GROUP_UNION_IMPL,
MPID_STATE_MPIR_INFO_SET_IMPL,
MPID_STATE_MPIR_INIT_ASYNC_THREAD,
- MPID_STATE_MPIR_INTERCOMM_CREATE_IMPL,
- MPID_STATE_MPIR_INTERCOMM_MERGE_IMPL,
MPID_STATE_MPIR_LOCALCOPY,
+ MPID_STATE_MPIR_OPEN_PORT,
MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM,
MPID_STATE_MPIR_TOPO_CANON_NHB,
MPID_STATE_MPIR_TYPE_GET_ATTR,
@@ -926,7 +927,6 @@ enum MPID_TIMER_STATE {
MPID_STATE_NONEMPTY_INTERSECTION,
MPID_STATE_ON_DATA_AVAIL,
MPID_STATE_OPEN_IO_SOCKET,
- MPID_STATE_PARSE_MAPPING,
MPID_STATE_PKT_CKPT_MARKER_HANDLER,
MPID_STATE_PKT_COOKIE_HANDLER,
MPID_STATE_PKT_CTS_HANDLER,
@@ -962,8 +962,6 @@ enum MPID_TIMER_STATE {
MPID_STATE_SEND_UNLOCK_MSG,
MPID_STATE_SET_UP_LISTENER,
MPID_STATE_SHM_CONNECTION_TERMINATED,
- MPID_STATE_SOCKI_EVENT_DEQUEUE,
- MPID_STATE_SOCKI_EVENT_ENQUEUE,
MPID_STATE_SOCKI_FREE_EVENTQ_MEM,
MPID_STATE_SOCK_NATIVE_TO_SOCK,
MPID_STATE_START_REQ_COMPLETE,
diff --git a/src/include/mpibsend.h b/src/include/mpibsend.h
deleted file mode 100644
index 91996d7..0000000
--- a/src/include/mpibsend.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPIBSEND_H_INCLUDED
-#define MPIBSEND_H_INCLUDED
-
-/* This file is separated out as it is used by the configure script to
- * find the Bsend overhead value. */
-
-/*
- * Description of the Bsend data structures.
- *
- * Bsend is buffered send; a buffer, provided by the user, is used to store
- * both the user's message and information that my be needed to send that
- * message. In addition, space within that buffer must be allocated, so
- * additional information is required to manage that space allocation.
- * In the following, the term "segment" denotes a fragment of the user buffer
- * that has been allocated either to free (unused) space or to a particular
- * user message.
- *
- * The following datastructures are used:
- *
- * BsendMsg_t - Describes a user message, including the values of tag
- * and datatype (*could* be used incase the data is already
- * contiguous; see below)
- * BsendData_t - Describes a segment of the user buffer. This data structure
- * contains a BsendMsg_t for segments that contain a user
- * message. Each BsendData_t segment belongs to one of
- * three lists: avail (unused and free), active (currently
- * sending) and pending (contains a user message that has
- * not begun sending because of some resource limit, such
- * as no more MPID requests available).
- * BsendBuffer - This global structure contains pointers to the user buffer
- * and the three lists, along with the size of the user buffer.
- *
- */
-
-/* Used to communication the type of bsend */
-typedef enum {
- BSEND = 0,
- IBSEND = 1,
- BSEND_INIT = 2
-} MPIR_Bsend_kind_t;
-
-struct MPID_Request;
-struct MPID_Comm;
-
-/* BsendMsg is used to hold all of the message particulars in case a
- request is not currently available */
-typedef struct MPIR_Bsend_msg {
- void *msgbuf;
- MPI_Aint count;
- MPI_Datatype dtype;
- int tag;
- struct MPID_Comm *comm_ptr;
- int dest;
-} MPIR_Bsend_msg_t;
-
-/* BsendData describes a bsend request */
-typedef struct MPIR_Bsend_data {
- size_t size; /* size that is available for data */
- size_t total_size; /* total size of this segment,
- including all headers */
- struct MPIR_Bsend_data *next, *prev;
- MPIR_Bsend_kind_t kind;
- struct MPID_Request *request;
- MPIR_Bsend_msg_t msg;
- double alignpad; /* make sure that the struct
- shares double alignment */
-} MPIR_Bsend_data_t;
-
-#endif /* MPIBSEND_H_INCLUDED */
diff --git a/src/include/mpich_cvars.h b/src/include/mpich_cvars.h
deleted file mode 100644
index d8baa86..0000000
--- a/src/include/mpich_cvars.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2010 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* Automatically generated
- * by: ./maint/extractcvars
- * on: Wed Nov 11 22:07:04 2015
- *
- * DO NOT EDIT!!!
- */
-
-#if !defined(MPICH_CVARS_H_INCLUDED)
-#define MPICH_CVARS_H_INCLUDED
-
-#include "mpitimpl.h" /* for MPIR_T_cvar_range_value_t */
-
-/* Initializes cvar values from the environment */
-int MPIR_T_cvar_init(void);
-int MPIR_T_cvar_finalize(void);
-
-/* Extern declarations for each cvar
- * (definitions in /tmp/wB2927n3sW/mpich-3.2/maint/../src/util/cvar/mpich_cvars.c) */
-
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/initthread.c */
-extern int MPIR_CVAR_DEBUG_HOLD;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/initthread.c */
-extern int MPIR_CVAR_ERROR_CHECKING;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/init.c */
-extern int MPIR_CVAR_ASYNC_PROGRESS;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/init.c */
-extern char * MPIR_CVAR_DEFAULT_THREAD_LEVEL;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/finalize.c */
-extern int MPIR_CVAR_MEMDUMP;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/abort.c */
-extern int MPIR_CVAR_SUPPRESS_ABORT_MESSAGE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/reduce.c */
-extern int MPIR_CVAR_REDUCE_SHORT_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/reduce.c */
-extern int MPIR_CVAR_ENABLE_SMP_REDUCE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/reduce.c */
-extern int MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/red_scat.c */
-extern int MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/bcast.c */
-extern int MPIR_CVAR_BCAST_MIN_PROCS;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/bcast.c */
-extern int MPIR_CVAR_BCAST_SHORT_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/bcast.c */
-extern int MPIR_CVAR_BCAST_LONG_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/bcast.c */
-extern int MPIR_CVAR_ENABLE_SMP_BCAST;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/bcast.c */
-extern int MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/gatherv.c */
-extern int MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/allreduce.c */
-extern int MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/allreduce.c */
-extern int MPIR_CVAR_ENABLE_SMP_COLLECTIVES;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/allreduce.c */
-extern int MPIR_CVAR_ENABLE_SMP_ALLREDUCE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/allreduce.c */
-extern int MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/gather.c */
-extern int MPIR_CVAR_GATHER_VSMALL_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/gather.c */
-extern int MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/barrier.c */
-extern int MPIR_CVAR_ENABLE_SMP_BARRIER;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/allgather.c */
-extern int MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/allgather.c */
-extern int MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/alltoall.c */
-extern int MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/alltoall.c */
-extern int MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/alltoall.c */
-extern int MPIR_CVAR_ALLTOALL_THROTTLE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/scatter.c */
-extern int MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/allgatherv.c */
-extern int MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/comm/contextid.c */
-extern int MPIR_CVAR_CTXID_EAGER_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/comm/comm_split.c */
-extern int MPIR_CVAR_COMM_SPLIT_USE_QSORT;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/debugger/dbginit.c */
-extern int MPIR_CVAR_PROCTABLE_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/debugger/dbginit.c */
-extern int MPIR_CVAR_PROCTABLE_PRINT;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/errhan/errutil.c */
-extern int MPIR_CVAR_PRINT_ERROR_STACK;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/errhan/errutil.c */
-extern int MPIR_CVAR_CHOP_ERROR_STACK;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/nameserv/file/file_nameserv.c */
-extern char * MPIR_CVAR_NAMESERV_FILE_PUBDIR;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/util/mem/handlemem.c */
-extern int MPIR_CVAR_ABORT_ON_LEAKED_HANDLES;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/include/mpierrs.h */
-extern int MPIR_CVAR_COLL_ALIAS_CHECK;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/ch3u_comm.c */
-extern int MPIR_CVAR_CH3_ENABLE_HCOLL;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpid_vc.c */
-extern int MPIR_CVAR_CH3_NOLOCAL;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpid_vc.c */
-extern int MPIR_CVAR_CH3_ODD_EVEN_CLIQUES;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpid_vc.c */
-extern int MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpid_rma.c */
-extern int MPIR_CVAR_CH3_RMA_SLOTS_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpid_rma.c */
-extern int MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/ch3u_rma_ops.c */
-extern int MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/ch3u_rma_sync.c */
-extern int MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/ch3u_rma_sync.c */
-extern int MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/ch3u_rma_progress.c */
-extern int MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/ch3u_rma_progress.c */
-extern int MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpidi_rma.c */
-extern int MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpidi_rma.c */
-extern int MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpidi_rma.c */
-extern int MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpidi_rma.c */
-extern int MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpidi_rma.c */
-extern int MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c */
-extern int MPIR_CVAR_ENABLE_FT;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c */
-extern int MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c */
-extern int MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c */
-extern int MPIR_CVAR_NEMESIS_ENABLE_CKPOINT;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c */
-extern char * MPIR_CVAR_NEMESIS_NETMOD;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_dma.c */
-extern int MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h */
-extern int MPIR_CVAR_POLLS_BEFORE_YIELD;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c */
-extern char * MPIR_CVAR_OFI_USE_PROVIDER;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c */
-extern int MPIR_CVAR_OFI_DUMP_PROVIDERS;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
-extern char * MPIR_CVAR_CH3_INTERFACE_HOSTNAME;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
-extern MPIR_T_cvar_range_value_t MPIR_CVAR_CH3_PORT_RANGE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
-extern char * MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
-extern int MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c */
-extern int MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c */
-extern int MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT;
-/* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c */
-extern int MPIR_CVAR_NEMESIS_MXM_HUGEPAGE;
-
-/* TODO: this should be defined elsewhere */
-#define MPIR_CVAR_assert MPIU_Assert
-
-/* Arbitrary, simplifies interaction with external interfaces like MPI_T_ */
-#define MPIR_CVAR_MAX_STRLEN (384)
-
-#endif /* MPICH_CVARS_H_INCLUDED */
diff --git a/src/include/mpichconf.h.in b/src/include/mpichconf.h.in
index a346047..ad23e9a 100644
--- a/src/include/mpichconf.h.in
+++ b/src/include/mpichconf.h.in
@@ -12,12 +12,12 @@
/* Define if building universal (internal helper macro) */
#undef AC_APPLE_UNIVERSAL_BUILD
-/* The pamid assert level */
-#undef ASSERT_LEVEL
-
/* Define the number of CH3_RANK_BITS */
#undef CH3_RANK_BITS
+/* Define the number of CH4_RANK_BITS */
+#undef CH4_RANK_BITS
+
/* define to enable collection of statistics */
#undef COLLECT_STATS
@@ -55,6 +55,9 @@
/* Define if FTB is enabled */
#undef ENABLE_FTB
+/* Define to 1 to enable getdims-related MPI_T performance variables */
+#undef ENABLE_PVAR_DIMS
+
/* Define to 1 to enable nemesis-related MPI_T performance variables */
#undef ENABLE_PVAR_NEM
@@ -157,11 +160,14 @@
/* Define to 1 if you have the `CFUUIDCreate' function. */
#undef HAVE_CFUUIDCREATE
-/* Define to 1 if you have the `clock_getres' function. */
-#undef HAVE_CLOCK_GETRES
+/* OFI netmod is built */
+#undef HAVE_CH4_NETMOD_OFI
-/* Define to 1 if you have the `clock_gettime' function. */
-#undef HAVE_CLOCK_GETTIME
+/* Portals4 netmod is built */
+#undef HAVE_CH4_NETMOD_PORTALS4
+
+/* UCX netmod is built */
+#undef HAVE_CH4_NETMOD_UCX
/* Define to 1 if you have the <complex.h> header file. */
#undef HAVE_COMPLEX_H
@@ -229,9 +235,6 @@
/* Define if Fortran 90 type routines available */
#undef HAVE_FC_TYPE_ROUTINES
-/* Define to 1 if you have the `fdopen' function. */
-#undef HAVE_FDOPEN
-
/* Define if Fortran integer are the same size as C ints */
#undef HAVE_FINT_IS_INT
@@ -250,18 +253,9 @@
/* Define to 1 if you have the `gethostname' function. */
#undef HAVE_GETHOSTNAME
-/* Define to 1 if you have the `gethrtime' function. */
-#undef HAVE_GETHRTIME
-
-/* Define to 1 if you have the `getpid' function. */
-#undef HAVE_GETPID
-
/* Define to 1 if you have the `getsid' function. */
#undef HAVE_GETSID
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
/* Define if struct hostent contains h_addr_list */
#undef HAVE_H_ADDR_LIST
@@ -319,6 +313,9 @@
/* Define to 1 if you have the `portals' library (-lportals). */
#undef HAVE_LIBPORTALS
+/* Define to 1 if you have the `ucp' library (-lucp). */
+#undef HAVE_LIBUCP
+
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
@@ -338,9 +335,6 @@
/* Define if long long is supported */
#undef HAVE_LONG_LONG_INT
-/* Define to 1 if you have the `mach_absolute_time' function. */
-#undef HAVE_MACH_ABSOLUTE_TIME
-
/* Define if C99-style variable argument list macro functionality */
#undef HAVE_MACRO_VA_ARGS
@@ -402,7 +396,7 @@
/* Define to 1 if you have the <netinet/tcp.h> header file. */
#undef HAVE_NETINET_TCP_H
-/* Define if you have the <net/if.h> header file. */
+/* Define to 1 if you have the <net/if.h> header file. */
#undef HAVE_NET_IF_H
/* Define if the Fortran types are not available in C */
@@ -411,21 +405,6 @@
/* Define is the OSX thread affinity policy macros defined */
#undef HAVE_OSX_THREAD_AFFINITY
-/* Define if PAMI_CLIENT_MEMORY_OPTIMIZE is defined in pami.h */
-#undef HAVE_PAMI_CLIENT_MEMORY_OPTIMIZE
-
-/* Define if PAMI_CLIENT_NONCONTIG is defined in pami.h */
-#undef HAVE_PAMI_CLIENT_NONCONTIG
-
-/* Define if PAMI_GEOMETRY_MEMORY_OPTIMIZE is defined in pami.h */
-#undef HAVE_PAMI_GEOMETRY_MEMORY_OPTIMIZE
-
-/* Define if PAMI_GEOMETRY_NONCONTIG is defined in pami.h */
-#undef HAVE_PAMI_GEOMETRY_NONCONTIG
-
-/* Define if PAMI_IN_PLACE is defined in pami.h */
-#undef HAVE_PAMI_IN_PLACE
-
/* Define to 1 if you have the <poll.h> header file. */
#undef HAVE_POLL_H
@@ -438,18 +417,6 @@
/* Supports weak pragma */
#undef HAVE_PRAGMA_WEAK
-/* Define to 1 if you have the `pthread_cleanup_push' function. */
-#undef HAVE_PTHREAD_CLEANUP_PUSH
-
-/* Define if pthread_cleanup_push is available, even as a macro */
-#undef HAVE_PTHREAD_CLEANUP_PUSH_MACRO
-
-/* Define to 1 if you have the <pthread.h> header file. */
-#undef HAVE_PTHREAD_H
-
-/* Define to 1 if you have the `pthread_yield' function. */
-#undef HAVE_PTHREAD_YIELD
-
/* Define to 1 if you have the `ptrace' function. */
#undef HAVE_PTRACE
@@ -465,6 +432,12 @@
/* Define to 1 if you have the `rand' function. */
#undef HAVE_RAND
+/* Define to 1 if you have the <random.h> header file. */
+#undef HAVE_RANDOM_H
+
+/* Define to 1 if you have the `random_r' function. */
+#undef HAVE_RANDOM_R
+
/* Define if ROMIO is enabled */
#undef HAVE_ROMIO
@@ -477,12 +450,6 @@
/* Define to 1 if you have the `sched_setaffinity' function. */
#undef HAVE_SCHED_SETAFFINITY
-/* Define to 1 if you have the `sched_yield' function. */
-#undef HAVE_SCHED_YIELD
-
-/* Define to 1 if you have the <search> header file. */
-#undef HAVE_SEARCH
-
/* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT
@@ -519,9 +486,6 @@
/* Define to 1 if you have the `sigset' function. */
#undef HAVE_SIGSET
-/* Define to 1 if you have the `sleep' function. */
-#undef HAVE_SLEEP
-
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
@@ -579,6 +543,9 @@
/* Define if struct ifreq can be used */
#undef HAVE_STRUCT_IFREQ
+/* Define to 1 if the system has the type `struct random_data'. */
+#undef HAVE_STRUCT_RANDOM_DATA
+
/* Define if sys/bitypes.h exists */
#undef HAVE_SYS_BITYPES_H
@@ -627,15 +594,12 @@
/* Define to 1 if you have the <sys/un.h> header file. */
#undef HAVE_SYS_UN_H
-/* Define to 1 if you have the <thread.h> header file. */
-#undef HAVE_THREAD_H
+/* Define to enable tag error bits */
+#undef HAVE_TAG_ERROR_BITS
/* Define to 1 if you have the `thread_policy_set' function. */
#undef HAVE_THREAD_POLICY_SET
-/* Define to 1 if you have the `thr_yield' function. */
-#undef HAVE_THR_YIELD
-
/* Define to 1 if you have the `time' function. */
#undef HAVE_TIME
@@ -645,9 +609,6 @@
/* define to enable timing collection */
#undef HAVE_TIMING
-/* Define to 1 if you have the `tsearch' function. */
-#undef HAVE_TSEARCH
-
/* Define if uint16_t is supported by the C compiler */
#undef HAVE_UINT16_T
@@ -678,6 +639,9 @@
/* Define if we have va_copy */
#undef HAVE_VA_COPY
+/* Whether C compiler supports symbol visibility or not */
+#undef HAVE_VISIBILITY
+
/* Define to 1 if you have the `vsnprintf' function. */
#undef HAVE_VSNPRINTF
@@ -690,9 +654,6 @@
/* Attribute style weak pragma */
#undef HAVE_WEAK_ATTRIBUTE
-/* Define to 1 if you have the `yield' function. */
-#undef HAVE_YIELD
-
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
@@ -705,18 +666,6 @@
/* Define if we have __va_copy */
#undef HAVE___VA_COPY
-/* Define which x86 cycle counter to use */
-#undef LINUX86_CYCLE_CPUID_RDTSC32
-
-/* Define which x86 cycle counter to use */
-#undef LINUX86_CYCLE_CPUID_RDTSC64
-
-/* Define which x86 cycle counter to use */
-#undef LINUX86_CYCLE_RDTSC
-
-/* Define which x86 cycle counter to use */
-#undef LINUX86_CYCLE_RDTSCP
-
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#undef LT_OBJDIR
@@ -745,21 +694,32 @@
/* MPICH is configured to require thread safety */
#undef MPICH_IS_THREADED
-/* Define to an expression that will result in an error checking mutex type.
- */
-#undef MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE
-
/* Method used to implement atomic updates and access */
#undef MPICH_THREAD_GRANULARITY
/* Level of thread support selected at compile time */
#undef MPICH_THREAD_LEVEL
-/* set to the name of the thread package */
-#undef MPICH_THREAD_PACKAGE_NAME
+/* Method used to implement refcount updates */
+#undef MPICH_THREAD_REFCOUNT
-/* If the compiler supports a TLS storage class define it to that here */
-#undef MPICH_TLS_SPECIFIER
+/* define to disable reference counting predefined objects like MPI_COMM_WORLD
+ */
+#undef MPICH_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS
+
+/* CH4 should build locality info */
+#undef MPIDI_BUILD_CH4_LOCALITY_INFO
+
+/* Define if CH4 will build the default shared memory implementation as
+ opposed to only using a netmod implementation */
+#undef MPIDI_BUILD_CH4_SHM
+
+/* Define if CH4U will use per-communicator message queues */
+#undef MPIDI_CH4U_USE_PER_COMM_QUEUE
+
+/* Define if CH4 will be providing the exclusive implementation of shared
+ memory */
+#undef MPIDI_CH4_EXCLUSIVE_SHM
/* Define to turn on the inlining optimizations in Nemesis code */
#undef MPID_NEM_INLINE
@@ -833,45 +793,15 @@
/* MPIR_Ucount is an unsigned MPI_Count-sized integer */
#undef MPIR_Ucount
-/* Method used to allocate MPI object handles */
-#undef MPIU_HANDLE_ALLOCATION_METHOD
-
/* Define to enable timing mutexes */
#undef MPIU_MUTEX_WAIT_TIME
-/* MPIU_PINT_FMT_DEC_SPEC is the format specifier for printing Pint as a
- decimal */
-#undef MPIU_PINT_FMT_DEC_SPEC
-
-/* MPIU_Pint is a pointer-sized integer */
-#undef MPIU_Pint
-
-/* Set to a type that can express the size of the entire address space */
-#undef MPIU_SIZE_T
-
-/* Method used to implement refcount updates */
-#undef MPIU_THREAD_REFCOUNT
-
-/* define to disable reference counting predefined objects like MPI_COMM_WORLD
- */
-#undef MPIU_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS
-
-/* MPIU_UPINT_FMT_DEC_SPEC is the format specifier for printing Upint as a
- decimal */
-#undef MPIU_UPINT_FMT_DEC_SPEC
-
-/* MPIU_Upint is an unsigned pointer-sized integer */
-#undef MPIU_Upint
-
/* Define if /bin must be in path */
#undef NEEDS_BIN_IN_PATH
/* Define if environ decl needed */
#undef NEEDS_ENVIRON_DECL
-/* Define if fdopen needs a declaration */
-#undef NEEDS_FDOPEN_DECL
-
/* Define if gethostname needs a declaration */
#undef NEEDS_GETHOSTNAME_DECL
@@ -887,9 +817,6 @@
/* Define if _POSIX_SOURCE needed to get sigaction */
#undef NEEDS_POSIX_FOR_SIGACTION
-/* Define if pthread_mutexattr_settype needs a declaration */
-#undef NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL
-
/* Define if putenv needs a declaration */
#undef NEEDS_PUTENV_DECL
@@ -902,15 +829,12 @@
/* Define if strerror_r needs a declaration */
#undef NEEDS_STRERROR_R_DECL
+/* Define if strict alignment memory access is required */
+#undef NEEDS_STRICT_ALIGNMENT
+
/* Define if strsignal needs a declaration */
#undef NEEDS_STRSIGNAL_DECL
-/* Define if sys/time.h is required to get timer definitions */
-#undef NEEDS_SYS_TIME_H
-
-/* Define if usleep needs a declaration */
-#undef NEEDS_USLEEP_DECL
-
/* Define if vsnprintf needs a declaration */
#undef NEEDS_VSNPRINTF_DECL
@@ -935,9 +859,6 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
-/* Define if PAMI_IN_PLACE is not defined in pami.h */
-#undef PAMI_IN_PLACE
-
/* Define to turn on the prefetching optimization in Nemesis code */
#undef PREFETCH_CELL
@@ -1007,8 +928,8 @@
/* The size of `long long', as computed by sizeof. */
#undef SIZEOF_LONG_LONG
-/* The size of `MPIR_Bsend_data_t', as computed by sizeof. */
-#undef SIZEOF_MPIR_BSEND_DATA_T
+/* The size of `MPII_Bsend_data_t', as computed by sizeof. */
+#undef SIZEOF_MPII_BSEND_DATA_T
/* The size of `OPA_ptr_t', as computed by sizeof. */
#undef SIZEOF_OPA_PTR_T
@@ -1076,9 +997,6 @@
/* Define if performing coverage tests */
#undef USE_COVERAGE
-/* Define to enable logging macros */
-#undef USE_DBG_LOGGING
-
/* Define to use the fastboxes in Nemesis code */
#undef USE_FASTBOX
@@ -1089,9 +1007,6 @@
as size_t instead of int */
#undef USE_FORT_STR_LEN_SIZET
-/* Define to use ='s and spaces in the string utilities. */
-#undef USE_HUMAN_READABLE_TOKENS
-
/* define to choose logging library */
#undef USE_LOGGING
@@ -1107,8 +1022,17 @@
/* Define if _POSIX_C_SOURCE needs to be undefined for struct ifconf */
#undef USE_NOPOSIX_FOR_IFCONF
-/* Define to use nothing to yield processor */
-#undef USE_NOTHING_FOR_YIELD
+/* Define to use immediate data field */
+#undef USE_OFI_IMMEDIATE_DATA
+
+/* Define to use MR_SCALABLE */
+#undef USE_OFI_MR_SCALABLE
+
+/* Define to use per-window EP & counter */
+#undef USE_OFI_STX_RMA
+
+/* Define to use fi_tagged interfaces */
+#undef USE_OFI_TAGGED
/* Define if PMI2 API must be used */
#undef USE_PMI2_API
@@ -1117,42 +1041,27 @@
is allowed */
#undef USE_PMI_PORT
-/* Define to use sched_yield to yield processor */
-#undef USE_SCHED_YIELD_FOR_YIELD
-
-/* Define to use select to yield processor */
-#undef USE_SELECT_FOR_YIELD
-
/* Define if sigaction should be used to set signals */
#undef USE_SIGACTION
/* Define if signal should be used to set signals */
#undef USE_SIGNAL
-/* Define to use sleep to yield processor */
-#undef USE_SLEEP_FOR_YIELD
-
/* Define it the socket verify macros should be enabled */
#undef USE_SOCK_VERIFY
/* Define if _SVID_SOURCE needs to be defined for struct ifconf */
#undef USE_SVIDSOURCE_FOR_IFCONF
+/* Define if we can use a symmetric heap */
+#undef USE_SYM_HEAP
+
/* Define if we have sysv shared memory */
#undef USE_SYSV_SHM
-/* Define if tsearch requires char pointers */
-#undef USE_TSEARCH_WITH_CHARP
-
-/* Define to use usleep to yield processor */
-#undef USE_USLEEP_FOR_YIELD
-
/* Define if weak symbols should be used */
#undef USE_WEAK_SYMBOLS
-/* Define to use yield to yield processor */
-#undef USE_YIELD_FOR_YIELD
-
/* Version number of package */
#undef VERSION
diff --git a/src/include/mpichconfconst.h b/src/include/mpichconfconst.h
index 43370ef..b4c208d 100644
--- a/src/include/mpichconfconst.h
+++ b/src/include/mpichconfconst.h
@@ -13,11 +13,10 @@
#ifndef MPICHCONFCONST_H_INCLUDED
#define MPICHCONFCONST_H_INCLUDED
-#define MPICH_ERROR_MSG_NONE 0
-#define MPICH_ERROR_MSG_CLASS 1
-#define MPICH_ERROR_MSG_GENERIC 2
-#define MPICH_ERROR_MSG_ALL 8
-
+#define MPICH_ERROR_MSG__NONE 0
+#define MPICH_ERROR_MSG__CLASS 1
+#define MPICH_ERROR_MSG__GENERIC 2
+#define MPICH_ERROR_MSG__ALL 8
/* -------------------------------------------------------------------- */
/* thread-related constants */
@@ -29,22 +28,34 @@
* A configure choice will set MPICH_THREAD_GRANULARITY to one of these values */
/* _INVALID exists to avoid accidental macro evaluations to 0 */
-#define MPICH_THREAD_GRANULARITY_INVALID 0
-#define MPICH_THREAD_GRANULARITY_GLOBAL 1
-#define MPICH_THREAD_GRANULARITY_PER_OBJECT 2
-#define MPICH_THREAD_GRANULARITY_LOCK_FREE 3
+#define MPICH_THREAD_GRANULARITY__INVALID 0
+#define MPICH_THREAD_GRANULARITY__GLOBAL 1
+#define MPICH_THREAD_GRANULARITY__POBJ 2
+#define MPICH_THREAD_GRANULARITY__LOCKFREE 3
/* _SINGLE is the "null" granularity, where all processes are single-threaded */
-#define MPICH_THREAD_GRANULARITY_SINGLE 4
-
-/* controls the allocation mechanism for MPID_Request handles, which can greatly
- * affect concurrency on the critical path */
-#define MPIU_HANDLE_ALLOCATION_MUTEX 0
-#define MPIU_HANDLE_ALLOCATION_THREAD_LOCAL 1
+#define MPICH_THREAD_GRANULARITY__SINGLE 4
-/* _INVALID exists to avoid accidental macro evaluations to 0 */
-#define MPIU_REFCOUNT_INVALID 0
/* _NONE means no concurrency control, such as when using MPI_THREAD_SINGLE */
-#define MPIU_REFCOUNT_NONE 1
-#define MPIU_REFCOUNT_LOCKFREE 2
+#define MPICH_REFCOUNT__NONE 1
+#define MPICH_REFCOUNT__LOCKFREE 2
+
+/* Possible values for timing */
+#define MPICH_TIMING_KIND__NONE 0
+#define MPICH_TIMING_KIND__TIME 1
+#define MPICH_TIMING_KIND__LOG 2
+#define MPICH_TIMING_KIND__LOG_DETAILED 3
+#define MPICH_TIMING_KIND__ALL 4
+#define MPICH_TIMING_KIND__RUNTIME 5
+
+/* Possible values for USE_LOGGING */
+#define MPICH_LOGGING__NONE 0
+#define MPICH_LOGGING__RLOG 1
+#define MPICH_LOGGING__EXTERNAL 4
+
+/* Possible values for process state */
+#define MPICH_MPI_STATE__PRE_INIT 0
+#define MPICH_MPI_STATE__IN_INIT 1
+#define MPICH_MPI_STATE__POST_INIT 2
+#define MPICH_MPI_STATE__POST_FINALIZED 3
#endif /* MPICHCONFCONST_H_INCLUDED */
diff --git a/src/include/mpichinfo.h.in b/src/include/mpichinfo.h.in
index f186b75..8fbc771 100644
--- a/src/include/mpichinfo.h.in
+++ b/src/include/mpichinfo.h.in
@@ -20,5 +20,6 @@
#define MPICH_COMPILER_CXX "@CXX@ @CXXFLAGS@"
#define MPICH_COMPILER_F77 "@F77@ @FFLAGS@"
#define MPICH_COMPILER_FC "@FC@ @FCFLAGS@"
+#define MPICH_CUSTOM_STRING "@MPICH_CUSTOM_STRING@"
#endif
diff --git a/src/include/mpierror.h b/src/include/mpierror.h
deleted file mode 100644
index 5a68de7..0000000
--- a/src/include/mpierror.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPIERROR_H_INCLUDED
-#define MPIERROR_H_INCLUDED
-
-/* Error severity */
-#define MPIR_ERR_FATAL 1
-#define MPIR_ERR_RECOVERABLE 0
-
-struct MPID_Comm;
-struct MPID_Win;
-/*struct MPID_File;*/
-
-/* Bindings for internal routines */
-int MPIR_Err_return_comm( struct MPID_Comm *, const char [], int );
-int MPIR_Err_return_win( struct MPID_Win *, const char [], int );
-/*int MPIR_Err_return_file( struct MPID_File *, const char [], int );*/
-#ifdef MPI__FILE_DEFINED
-/* Only define if we have MPI_File */
-int MPIR_Err_return_file( MPI_File, const char [], int ); /* Romio version */
-#endif
-/* FIXME:
- * Update this description to match the current version of the routine,
- * in particular, the pseudo-format types (even better, fix it so that
- * the pseudo format types can work with the format attribute check).
- */
-/*@
- MPIR_Err_create_code - Create an error code and associated message
- to report an error
-
- Input Parameters:
-+ lastcode - Previous error code (see notes)
-. severity - Indicates severity of error
-. fcname - Name of the function in which the error has occurred.
-. line - Line number (usually '__LINE__')
-. class - Error class
-. generic_msg - A generic message to be used if not instance-specific
- message is available
-. instance_msg - A message containing printf-style formatting commands
- that, when combined with the instance_parameters, specify an error
- message containing instance-specific data.
-- instance_parameters - The remaining parameters. These must match
- the formatting commands in 'instance_msg'.
-
- Notes:
- A typical use is\:
-.vb
- mpi_errno = MPIR_Err_create_code( mpi_errno, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPI_ERR_RANK,
- "Invalid Rank", "Invalid rank %d", rank );
-.ve
-
- Predefined message may also be used. Any message that uses the
- prefix '"**"' will be looked up in a table. This allows standardized
- messages to be used for a message that is used in several different locations
- in the code. For example, the name '"**rank"' might be used instead of
- '"Invalid Rank"'; this would also allow the message to be made more
- specific and useful, such as
-.vb
- Invalid rank provided. The rank must be between 0 and the 1 less than
- the size of the communicator in this call.
-.ve
- This interface is compatible with the 'gettext' interface for
- internationalization, in the sense that the 'generic_msg' and 'instance_msg'
- may be used as arguments to 'gettext' to return a string in the appropriate
- language; the implementation of 'MPID_Err_create_code' can then convert
- this text into the appropriate code value.
-
- The current set of formatting commands is undocumented and will change.
- You may safely use '%d' and '%s' (though only use '%s' for names of
- objects, not text messages, as using '%s' for a message breaks support for
- internationalization.
-
- This interface allows error messages to be chained together. The first
- argument is the last error code; if there is no previous error code,
- use 'MPI_SUCCESS'.
-
- Extended Format Specifiers:
- In addition to the standard format specifies (e.g., %d for an int value),
- MPIR_Err_create_code accepts some additional values that correspond to
- various MPI types:
-+ i - an MPI rank; recognizes 'MPI_ANY_SOURCE', 'MPI_PROC_NULL', and
- 'MPI_ROOT'
-. t - an MPI tag; recognizes 'MPI_ANY_TAG'.
-. A - an MPI assert value.
-. C - an MPI communicator.
-. D - an MPI datatype.
-. E - an MPI Errhandler.
-. F - an MPI File object.
-. G - an MPI Group.
-. I - an MPI info object.
-. O - an MPI Op.
-. R - an MPI Request.
-- W - an MPI Window object.
-
-
- Module:
- Error
-
- @*/
-int MPIR_Err_create_code( int, int, const char [], int, int, const char [], const char [], ... );
-
-#ifdef USE_ERR_CODE_VALIST
-int MPIR_Err_create_code_valist( int, int, const char [], int, int, const char [], const char [], va_list );
-#endif
-
-/*@
- MPIR_Err_combine_codes - Combine two error codes, or more importantly
- two lists of error messages. The list associated with the second error
- code is appended to the list associated with the first error code. If
- the list associated with the first error code has a dangling tail, which
- is possible if the ring has wrapped and overwritten entries that were
- once part of the list, then the append operation is not performed and
- the error code for the first list is returned.
-
- Input Parameter:
-+ errorcode1 - the error code associated with the first list
-- errorcode2 - the error code associated with the second list
-
- Return value:
- An error code which resolves to the combined list of error messages
-
- Notes:
- If errorcode1 is equal to MPI_SUCCESS, then errorcode2 is returned.
- Likewise, if errorcode2 is equal to MPI_SUCCESS, then errorcode1 is
- returned.
-
- Module:
- Error
- @*/
-int MPIR_Err_combine_codes(int, int);
-
-int MPIR_Err_is_fatal(int);
-void MPIR_Err_init(void);
-void MPIR_Err_preOrPostInit( void );
-
-/* FIXME: This comment is incorrect because the routine was improperly modified
- to take an additional argument (the MPIR_Err_get_class_string_func_t).
- That arg needs to be removed and this function restored. */
-/*@
- MPID_Err_get_string - Get the message string that corresponds to an error
- class or code
-
- Input Parameter:
-+ code - An error class or code. If a code, it must have been created by
- 'MPID_Err_create_code'.
-- msg_len - Length of 'msg'.
-
- Output Parameter:
-. msg - A null-terminated text string of length (including the null) of no
- more than 'msg_len'.
-
- Return value:
- Zero on success. Non-zero returns indicate either (a) 'msg_len' is too
- small for the message or (b) the value of 'code' is neither a valid
- error class or code.
-
- Notes:
- This routine is used to implement 'MPI_ERROR_STRING'.
-
- Module:
- Error
-
- Question:
- What values should be used for the error returns? Should they be
- valid error codes?
-
- How do we get a good value for 'MPI_MAX_ERROR_STRING' for 'mpi.h'?
- See 'errgetmsg' for one idea.
-
- @*/
-typedef int (* MPIR_Err_get_class_string_func_t)(int error, char *str, int length);
-void MPIR_Err_get_string( int, char *, int, MPIR_Err_get_class_string_func_t );
-
-int MPIR_Err_set_msg( int code, const char *msg_string );
-
-/* This routine is called when there is a fatal error. Now public because file
- * error handling is defined in a separate file from comm and win, but all
- * three need to call it */
-void MPIR_Handle_fatal_error(struct MPID_Comm *comm_ptr,
- const char fcname[], int errcode);
-
-#define MPIR_ERR_CLASS_MASK 0x0000007f
-#define MPIR_ERR_CLASS_SIZE 128
-#define MPIR_ERR_GET_CLASS(mpi_errno_) (mpi_errno_ & MPIR_ERR_CLASS_MASK)
-
-#endif
diff --git a/src/include/mpierrs.h b/src/include/mpierrs.h
deleted file mode 100644
index 795e36d..0000000
--- a/src/include/mpierrs.h
+++ /dev/null
@@ -1,856 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIERRS_H_INCLUDED
-#define MPIERRS_H_INCLUDED
-/* ------------------------------------------------------------------------- */
-/* mpierrs.h */
-/* ------------------------------------------------------------------------- */
-
-/*
-=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
-
-cvars:
- - name : MPIR_CVAR_COLL_ALIAS_CHECK
- category : COLLECTIVE
- type : int
- default : 1
- class : device
- verbosity : MPI_T_VERBOSITY_USER_BASIC
- scope : MPI_T_SCOPE_ALL_EQ
- description : >-
- Enable checking of aliasing in collective operations
-
-=== END_MPI_T_CVAR_INFO_BLOCK ===
-*/
-
-/* Error checking (see --enable-error-checking for control of this) */
-#ifdef HAVE_ERROR_CHECKING
-
-#define MPID_ERROR_LEVEL_ALL 1
-#define MPID_ERROR_LEVEL_RUNTIME 2
-/* Use MPID_ERROR_DECL to wrap declarations that are needed only when
- error checking is turned on */
-#define MPID_ERROR_DECL(a) a
-
-#if HAVE_ERROR_CHECKING == MPID_ERROR_LEVEL_ALL
-#define MPID_BEGIN_ERROR_CHECKS
-#define MPID_END_ERROR_CHECKS
-#define MPID_ELSE_ERROR_CHECKS
-#elif HAVE_ERROR_CHECKING == MPID_ERROR_LEVEL_RUNTIME
-#define MPID_BEGIN_ERROR_CHECKS if (MPIR_Process.do_error_checks) {
-#define MPID_ELSE_ERROR_CHECKS }else{
-#define MPID_END_ERROR_CHECKS }
-#else
-#error "Unknown value for error checking"
-#endif
-
-#else
-#define MPID_BEGIN_ERROR_CHECKS
-#define MPID_END_ERROR_CHECKS
-#define MPID_ERROR_DECL(a)
-#endif /* HAVE_ERROR_CHECKING */
-
-/*
- * Standardized error checking macros. These provide the correct tests for
- * common tests. These set err with the encoded error value.
- */
-#define MPIR_ERRTEST_SEND_TAG(tag,err) \
- if ((tag) < 0 || (tag) > MPIR_Process.attrs.tag_ub) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_TAG, "**tag", "**tag %d", tag); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_RECV_TAG(tag,err) \
- if ((tag) < MPI_ANY_TAG || (tag) > MPIR_Process.attrs.tag_ub) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_TAG, "**tag", "**tag %d", tag ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_RANK(comm_ptr,rank,err) \
- if ((rank) < 0 || (rank) >= (comm_ptr)->remote_size) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_RANK, "**rank", "**rank %d %d", rank, \
- (comm_ptr)->remote_size ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_SEND_RANK(comm_ptr,rank,err) \
- if ((rank) < MPI_PROC_NULL || (rank) >= (comm_ptr)->remote_size) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_RANK, "**rank", "**rank %d %d", rank, \
- (comm_ptr)->remote_size ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_RECV_RANK(comm_ptr,rank,err) \
- if ((rank) < MPI_ANY_SOURCE || (rank) >= (comm_ptr)->remote_size) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_RANK, "**rank", "**rank %d %d", rank, \
- (comm_ptr)->remote_size ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_COUNT(count,err) \
- if ((count) < 0) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_COUNT, \
- "**countneg", \
- "**countneg %d", \
- count ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_DISP(disp,err) \
- if ((disp) < 0) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_DISP, \
- "**rmadisp", 0 ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_ALIAS(ptr1,ptr2,err) \
- if ((ptr1)==(ptr2) && (ptr1) != MPI_BOTTOM) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_BUFFER, \
- "**bufalias", 0 ); \
- goto fn_fail; \
- }
-
-/* FIXME this test is probably too broad. Comparing the (buffer,type,count)
- * tuples is really what is needed to check for aliasing. */
-#define MPIR_ERRTEST_ALIAS_COLL(ptr1,ptr2,err) \
- if (MPIR_CVAR_COLL_ALIAS_CHECK && (ptr1)==(ptr2)) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_BUFFER, \
- "**bufalias", 0 ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_ARGNULL(arg,arg_name,err) \
- if (!(arg)) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_ARG, \
- "**nullptr", \
- "**nullptr %s", \
- arg_name ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_ARGNEG(arg,arg_name,err) \
- if ((arg) < 0) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, MPI_ERR_ARG, \
- "**argneg", \
- "**argneg %s %d", arg_name, arg ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_ARGNONPOS(arg,arg_name,err,errclass) \
- if ((arg) <= 0) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- errclass, \
- "**argnonpos", \
- "**argnonpos %s %d", \
- arg_name, arg ); \
- goto fn_fail; \
- }
-
-/* An intracommunicator must have a root between 0 and local_size-1. */
-/* intercomm can be between MPI_PROC_NULL (or MPI_ROOT) and remote_size-1 */
-#define MPIR_ERRTEST_INTRA_ROOT(comm_ptr,root,err) \
- if ((root) < 0 || (root) >= (comm_ptr)->local_size) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_ROOT, "**root", "**root %d", root ); \
- goto fn_fail; \
- }
-
-/* We use -2 (MPI_PROC_NULL and MPI_ROOT are negative) for the
- intercomm test */
-#define MPIR_ERRTEST_INTER_ROOT(comm_ptr,root,err) \
- if ((root) < -3 || (root) >= (comm_ptr)->remote_size) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_ROOT, "**root", "**root %d", root ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_PERSISTENT(reqp,err) \
- if ((reqp)->kind != MPID_PREQUEST_SEND && reqp->kind != MPID_PREQUEST_RECV) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_REQUEST, "**requestnotpersist", 0 ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_PERSISTENT_ACTIVE(reqp,err) \
- if (((reqp)->kind == MPID_PREQUEST_SEND || \
- reqp->kind == MPID_PREQUEST_RECV) && reqp->partner_request != NULL) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_REQUEST, "**requestpersistactive", 0 ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_COMM_INTRA(comm_ptr, err ) \
- if ((comm_ptr)->comm_kind != MPID_INTRACOMM) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_COMM,"**commnotintra",0); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_COMM_TAG(tag,err) \
- if ((tag) < 0 || (tag) > MPIR_Process.attrs.tag_ub) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_TAG, "**tag", "**tag %d", tag); \
- goto fn_fail; \
- }
-
-/* Tests for totally meaningless datatypes first, then for
- * MPI_DATATYPE_NULL as a separate case.
- */
-#define MPIR_ERRTEST_DATATYPE(datatype, name_, err_) \
- { \
- if (HANDLE_GET_MPI_KIND(datatype) != MPID_DATATYPE || \
- (HANDLE_GET_KIND(datatype) == HANDLE_KIND_INVALID && \
- datatype != MPI_DATATYPE_NULL)) \
- { \
- err_ = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_TYPE, \
- "**dtype", 0 ); \
- goto fn_fail; \
- } \
- if (datatype == MPI_DATATYPE_NULL) \
- { \
- err_ = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_TYPE, \
- "**dtypenull", \
- "**dtypenull %s", \
- name_); \
- goto fn_fail; \
- } \
- }
-
-#define MPIR_ERRTEST_TYPE_RMA_ATOMIC(datatype_, err_) \
- do { \
- if (!MPIR_Type_is_rma_atomic(datatype_)) { \
- err_ = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_TYPE, \
- "**rmatypenotatomic", \
- "**rmatypenotatomic %D", \
- datatype); \
- goto fn_fail; \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_WIN_FLAVOR(win_, flavor_, err_) \
- do { \
- if ((win_)->create_flavor != (flavor_)) { \
- MPIR_ERR_SETANDSTMT1((err_), MPI_ERR_RMA_FLAVOR, \
- goto fn_fail, "**winflavor", \
- "**winflavor %s", #flavor_); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf,count,err) \
- if (count > 0 && sendbuf == MPI_IN_PLACE) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_BUFFER, "**sendbuf_inplace", 0 ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf,count,err) \
- if (count > 0 && recvbuf == MPI_IN_PLACE) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_BUFFER, "**recvbuf_inplace", 0 ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_BUF_INPLACE(buf,count,err) \
- if (count > 0 && buf == MPI_IN_PLACE) { \
- err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_BUFFER, "**buf_inplace", 0 ); \
- goto fn_fail; \
- }
-
-#define MPIR_ERRTEST_NAMED_BUF_INPLACE(buf, bufname, count, err) \
- do { \
- if (count > 0 && buf == MPI_IN_PLACE) { \
- MPIR_ERR_SETANDJUMP1(err, MPI_ERR_BUFFER, "**buf_inplace", \
- "**buf_inplace %s", bufname); \
- } \
- } while (0)
-
-/*
- * Check that the triple (buf,count,datatype) does not specify a null
- * buffer. This does not guarantee that the buffer is valid but does
- * catch the most common problems.
- * Question:
- * Should this be an (inlineable) routine?
- * Since it involves extracting the datatype pointer for non-builtin
- * datatypes, should it take a dtypeptr argument (valid only if not
- * builtin)?
- */
-#define MPIR_ERRTEST_USERBUFFER(buf,count,dtype,err) \
- if (count > 0 && buf == 0) { \
- int ferr = 0; \
- if (HANDLE_GET_KIND(dtype) == HANDLE_KIND_BUILTIN) { ferr=1; } \
- else { \
- MPI_Aint errsize; \
- MPID_Datatype *errdtypeptr; \
- MPID_Datatype_get_ptr(dtype,errdtypeptr); \
- MPID_Datatype_get_size_macro(dtype,errsize); \
- if (errdtypeptr && errdtypeptr->true_lb == 0 && \
- errsize > 0) { ferr=1; } \
- } \
- if (ferr) { \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, __LINE__, \
- MPI_ERR_BUFFER, \
- "**bufnull", 0 ); \
- goto fn_fail; \
- } \
- }
-
-/* The following are placeholders. We haven't decided yet whether these
- should take a handle or pointer, or if they should take a handle and return
- a pointer if the handle is valid. These need to be rationalized with the
- MPID_xxx_valid_ptr and MPID_xxx_get_ptr.
-
- [BRT] They should not take a handle and return a pointer if they will be
- placed inside of a #ifdef HAVE_ERROR_CHECKING block. Personally, I think
- the macros should take handles. We already have macros for validating
- pointers to various objects.
-*/
-/* --BEGIN ERROR MACROS-- */
-#define MPIR_ERRTEST_VALID_HANDLE(handle_,kind_,err_,errclass_,gmsg_) { \
- if (HANDLE_GET_MPI_KIND(handle_) != kind_ || \
- HANDLE_GET_KIND(handle_) == HANDLE_KIND_INVALID) { \
- MPIR_ERR_SETANDSTMT(err_,errclass_,goto fn_fail,gmsg_); \
- } \
- }
-/* --END ERROR MACROS-- */
-
-#define MPIR_ERRTEST_OP(op,err) \
- do { \
- if (op == MPI_OP_NULL) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnull"); \
- } \
- else if (op == MPI_NO_OP || op == MPI_REPLACE) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotallowed"); \
- } \
- else { \
- MPIR_ERRTEST_VALID_HANDLE(op,MPID_OP,err,MPI_ERR_OP,"**op"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_OP_ACC(op,err) \
- do { \
- if (op == MPI_OP_NULL) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnull"); \
- } \
- else if (op == MPI_NO_OP) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotallowed"); \
- } \
- else { \
- MPIR_ERRTEST_VALID_HANDLE(op,MPID_OP,err,MPI_ERR_OP,"**op"); \
- } \
- if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotpredefined"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_OP_GACC(op,err) \
- do { \
- if (op == MPI_OP_NULL) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnull"); \
- } \
- else { \
- MPIR_ERRTEST_VALID_HANDLE(op,MPID_OP,err,MPI_ERR_OP,"**op"); \
- } \
- if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotpredefined"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_GROUP(group,err) \
- if (group == MPI_GROUP_NULL) { \
- MPIR_ERR_SETANDSTMT(err,MPI_ERR_GROUP,goto fn_fail,"**groupnull"); \
- } \
- else { \
- MPIR_ERRTEST_VALID_HANDLE(group,MPID_GROUP,err,MPI_ERR_GROUP,"**group"); \
- }
-
-#define MPIR_ERRTEST_COMM(comm_, err_) \
- { \
- if ((comm_) == MPI_COMM_NULL) \
- { \
- MPIR_ERR_SETANDSTMT((err_), MPI_ERR_COMM,goto fn_fail,"**commnull"); \
- } \
- else \
- { \
- MPIR_ERRTEST_VALID_HANDLE((comm_), MPID_COMM, (err_), MPI_ERR_COMM, "**comm"); \
- } \
- }
-
-#define MPIR_ERRTEST_WIN(win_, err_) \
- { \
- if ((win_) == MPI_WIN_NULL) \
- { \
- MPIR_ERR_SETANDSTMT((err_), MPI_ERR_WIN,goto fn_fail, "**winnull"); \
- } \
- else \
- { \
- MPIR_ERRTEST_VALID_HANDLE((win_), MPID_WIN, (err_), MPI_ERR_WIN, "**win"); \
- } \
- }
-
-#define MPIR_ERRTEST_REQUEST(request_, err_) \
- { \
- if ((request_) == MPI_REQUEST_NULL) \
- { \
- MPIR_ERR_SETANDSTMT((err_), MPI_ERR_REQUEST,goto fn_fail, "**requestnull"); \
- } \
- else \
- { \
- MPIR_ERRTEST_VALID_HANDLE((request_), MPID_REQUEST, (err_), MPI_ERR_REQUEST, "**request"); \
- } \
- }
-
-#define MPIR_ERRTEST_REQUEST_OR_NULL(request_, err_) \
- { \
- if ((request_) != MPI_REQUEST_NULL) \
- { \
- MPIR_ERRTEST_VALID_HANDLE((request_), MPID_REQUEST, (err_), MPI_ERR_REQUEST, "**request"); \
- } \
- }
-
-/* This macro does *NOT* jump to fn_fail - all uses check mpi_errno */
-#define MPIR_ERRTEST_ARRAYREQUEST_OR_NULL(request_, i_, err_) \
- { \
- if ((request_) != MPI_REQUEST_NULL) \
- { \
- if (HANDLE_GET_MPI_KIND(request_) != MPID_REQUEST) { \
- MPIR_ERR_SETANDSTMT2(err_,MPI_ERR_REQUEST,goto fn_fail, \
- "**request_invalid_kind","**request_invalid_kind %d %d", \
- i_, HANDLE_GET_MPI_KIND(request_)); \
- } \
- else if (HANDLE_GET_KIND(request_) == HANDLE_KIND_INVALID) { \
- MPIR_ERR_SETANDSTMT1(err_,MPI_ERR_REQUEST,goto fn_fail, \
- "**request","**request %d", i_ ); \
- } \
- } \
- }
-
-#define MPIR_ERRTEST_ERRHANDLER(errhandler_,err_) \
- if (errhandler_ == MPI_ERRHANDLER_NULL) { \
- MPIR_ERR_SETANDSTMT(err_,MPI_ERR_ARG,goto fn_fail,"**errhandlernull"); \
- } \
- else { \
- MPIR_ERRTEST_VALID_HANDLE(errhandler_,MPID_ERRHANDLER, \
- err_,MPI_ERR_ARG,"**errhandler"); \
- }
-
-#define MPIR_ERRTEST_INFO(info_, err_) \
- { \
- if ((info_) == MPI_INFO_NULL) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_ERR_ARG,goto fn_fail, "**infonull"); \
- } \
- else \
- { \
- MPIR_ERRTEST_VALID_HANDLE((info_), MPID_INFO, (err_), MPI_ERR_ARG, "**info"); \
- } \
- }
-
-#define MPIR_ERRTEST_INFO_OR_NULL(info_, err_) \
- { \
- if ((info_) != MPI_INFO_NULL) \
- { \
- MPIR_ERRTEST_VALID_HANDLE((info_), MPID_INFO, (err_), MPI_ERR_ARG, "**info"); \
- } \
- }
-
-#define MPIR_ERRTEST_KEYVAL(keyval_, object_, objectdesc_, err_) \
- { \
- if ((keyval_) == MPI_KEYVAL_INVALID) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_ERR_KEYVAL,goto fn_fail, "**keyvalinvalid"); \
- } \
- else if (HANDLE_GET_MPI_KIND(keyval_) != MPID_KEYVAL) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_ERR_KEYVAL,goto fn_fail, "**keyval"); \
- } \
- else if ((((keyval_) & 0x03c00000) >> 22) != (object_)) \
- { \
- MPIR_ERR_SETANDSTMT1(err_, MPI_ERR_KEYVAL,goto fn_fail, "**keyvalobj", \
- "**keyvalobj %s", (objectdesc_)); \
- } \
- }
-
-#define MPIR_ERRTEST_KEYVAL_PERM(keyval_, err_) \
- { \
- if (HANDLE_GET_MPI_KIND(keyval_) == MPID_KEYVAL && \
- HANDLE_GET_KIND(keyval_) == HANDLE_KIND_BUILTIN) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_ERR_KEYVAL,goto fn_fail, "**permattr"); \
- } \
- }
-
-#ifdef HAVE_ERROR_CHECKING
-#define MPIR_ERRTEST_MPIT_INITIALIZED(err_) \
- do { \
- if (!MPIR_T_is_initialized()) { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_NOT_INITIALIZED, goto fn_fail, "**mpitinit"); \
- } \
- } while (0)
-#else
-#define MPIR_ERRTEST_MPIT_INITIALIZED(err_)
-#endif
-
-#define MPIR_ERRTEST_CAT_INDEX(index_,err_) \
- do { \
- if ((index_) < 0 || (index_) >= utarray_len(cat_table)) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_INDEX, goto fn_fail, "**catindex"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_ENUM_HANDLE(handle_, err_) \
- do { \
- if ((handle_) == MPI_T_ENUM_NULL) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**enumhandlenull"); \
- } \
- else if ((handle_)->kind != MPIR_T_ENUM_HANDLE) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**enumhandle"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_ENUM_ITEM(enum_, index_, err_) \
- do { \
- if ((index_) < 0 || (index_) >= utarray_len((enum_)->items)) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_ITEM, goto fn_fail, "**itemindex"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_CVAR_INDEX(index_,err_) \
- do { \
- if ((index_) < 0 || (index_) >= utarray_len(cvar_table)) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_INDEX, goto fn_fail, "**cvarindex"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_CVAR_HANDLE(handle_, err_) \
- do { \
- if ((handle_) == MPI_T_CVAR_HANDLE_NULL) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**cvarhandlenull"); \
- } \
- else if ((handle_)->kind != MPIR_T_CVAR_HANDLE) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**cvarhandle"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_PVAR_INDEX(index_,err_) \
- do { \
- if ((index_) < 0 || (index_) >= utarray_len(pvar_table)) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_INDEX, goto fn_fail, "**pvarindex"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_PVAR_HANDLE(handle_, err_) \
- do { \
- if (handle_ == MPI_T_PVAR_HANDLE_NULL) \
- { \
- MPIR_ERR_SETANDSTMT(err_,MPI_T_ERR_INVALID_HANDLE, goto fn_fail,"**pvarhandlenull"); \
- } \
- else if ((handle_)->kind != MPIR_T_PVAR_HANDLE) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**pvarhandle"); \
- } \
- } while (0)
-
-#define MPIR_ERRTEST_PVAR_SESSION(session_,err_) \
- do { \
- if ((session_) == MPI_T_PVAR_SESSION_NULL) \
- { \
- MPIR_ERR_SETANDSTMT(err_,MPI_T_ERR_INVALID_SESSION, goto fn_fail,"**pvarsessionnull"); \
- } \
- else if ((session_)->kind != MPIR_T_PVAR_SESSION) \
- { \
- MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_SESSION, goto fn_fail, "**pvarsession"); \
- } \
- } while (0)
-
-/* some simple memcpy aliasing checks */
-#define MPIR_ERR_CHKMEMCPYANDSTMT(err_,stmt_,src_,dst_,len_) \
- MPIR_ERR_CHKANDSTMT3(MPIU_MEM_RANGES_OVERLAP((dst_),(len_),(src_),(len_)),err_,MPI_ERR_INTERN,stmt_,"**memcpyalias","**memcpyalias %p %p %L",(src_),(dst_),(long long)(len_))
-#define MPIR_ERR_CHKMEMCPYANDJUMP(err_,src_,dst_,len_) \
- MPIR_ERR_CHKMEMCPYANDSTMT((err_),goto fn_fail,(src_),(dst_),(len_))
-
-/* Special MPI error "class/code" for out of memory */
-/* FIXME: not yet done */
-#define MPIR_ERR_MEMALLOCFAILED MPI_ERR_INTERN
-
-/*
- * Standardized error setting and checking macros
- * These are intended to simplify the insertion of standardized error
- * checks
- *
- */
-/* --BEGIN ERROR MACROS-- */
-#ifdef HAVE_ERROR_CHECKING
-#define MPIR_ERR_POP(err_) \
- MPIR_ERR_SETANDSTMT(err_,MPI_ERR_OTHER,goto fn_fail,"**fail")
-#define MPIR_ERR_POP_LABEL(err_, label_) \
- MPIR_ERR_SETANDSTMT(err_,MPI_ERR_OTHER,goto label_,"**fail")
-#define MPIR_ERR_POPFATAL(err_) \
- MPIR_ERR_SETFATALANDSTMT(err_,MPI_ERR_OTHER,goto fn_fail,"**fail")
-#define MPIR_ERR_POPFATAL_LABEL(err_, label_) \
- MPIR_ERR_SETFATALANDSTMT(err_,MPI_ERR_OTHER,goto label_,"**fail")
-#else
-#define MPIR_ERR_POP(err_) goto fn_fail
-#define MPIR_ERR_POP_LABEL(err_, label_) goto label_
-#define MPIR_ERR_POPFATAL(err_) goto fn_fail
-#define MPIR_ERR_POPFATAL_LABEL(err_, label_) goto label_
-#endif
-
-/* If you add any macros to this list, make sure that you update
- maint/extracterrmsgs to handle the additional macros (see the hash
- KnownErrRoutines in that script)
- ERR_SETSIMPLE is like ERR_SET except that it just sets the error, it
- doesn't add it to an existing error. This is appropriate in cases
- where there can be no pre-existing error, and MPI_SUCCESS is needed for the
- first argument to MPIR_Err_create_code .
-*/
-#ifdef HAVE_ERROR_CHECKING
-#define MPIR_ERR_SETSIMPLE(err_,class_,msg_) \
- err_ = MPIR_Err_create_code( MPI_SUCCESS,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, msg_, 0 )
-#define MPIR_ERR_SET(err_,class_,msg_) \
- err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, msg_, 0 )
-#define MPIR_ERR_SET1(err_,class_,gmsg_,smsg_,arg1_) \
- err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_ )
-#define MPIR_ERR_SET2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ )
-#define MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, msg_, 0 ); stmt_ ;} while (0)
-#define MPIR_ERR_SETANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_ ); stmt_ ;} while (0)
-#define MPIR_ERR_SETANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ ); stmt_ ;} while (0)
-#define MPIR_ERR_SETANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_ ); stmt_ ;} while (0)
-#define MPIR_ERR_SETANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_, arg4_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_, arg4_ ); stmt_ ;} while (0)
-
-#define MPIR_ERR_SETFATALSIMPLE(err_,class_,msg_) \
- err_ = MPIR_Err_create_code( MPI_SUCCESS,MPIR_ERR_FATAL,FCNAME, \
- __LINE__, class_, msg_, 0 )
-#define MPIR_ERR_SETFATAL(err_,class_,msg_) \
- err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, msg_, 0 )
-#define MPIR_ERR_SETFATAL1(err_,class_,gmsg_,smsg_,arg1_) \
- err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_ )
-#define MPIR_ERR_SETFATAL2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ )
-#define MPIR_ERR_SETFATALANDSTMT(err_,class_,stmt_,msg_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, msg_, 0 ); stmt_ ;} while (0)
-#define MPIR_ERR_SETFATALANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_ ); stmt_ ;} while (0)
-#define MPIR_ERR_SETFATALANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ ); stmt_ ;} while (0)
-#define MPIR_ERR_SETFATALANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_ ); stmt_ ;} while (0)
-#define MPIR_ERR_SETFATALANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_, arg4_) \
- do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
- __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_, arg4_ ); stmt_ ;} while (0)
-#define MPIR_ERR_ADD(err_, newerr_) \
- do {(err_) = MPIR_Err_combine_codes((err_), (newerr_));} while (0)
-#else
-/* Simply set the class, being careful not to override a previously
- set class. */
-#define MPIR_ERR_SETSIMPLE(err_,class_,msg_) \
- do {err_ = class_;} while (0)
-#define MPIR_ERR_SET(err_,class_,msg_) \
- do {if (!err_){err_=class_;}} while (0)
-#define MPIR_ERR_SET1(err_,class_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_SET(err_,class_,msg_)
-#define MPIR_ERR_SET2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_SET(err_,class_,msg_)
-#define MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_) \
- do {if (!err_){err_=class_;} stmt_;} while (0)
-#define MPIR_ERR_SETANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
-#define MPIR_ERR_SETANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
-#define MPIR_ERR_SETANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
-#define MPIR_ERR_SETANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
-
-#define MPIR_ERR_SETFATALSIMPLE(err_,class_,msg_) \
- do {err_ = class_;} while (0)
-#define MPIR_ERR_SETFATAL(err_,class_,msg_) \
- do {if (!err_){err_=class_;}} while (0)
-#define MPIR_ERR_SETFATAL1(err_,class_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_SET(err_,class_,msg_)
-#define MPIR_ERR_SETFATAL2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_SET(err_,class_,msg_)
-#define MPIR_ERR_SETFATALANDSTMT(err_,class_,stmt_,msg_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_)
-#define MPIR_ERR_SETFATALANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
-#define MPIR_ERR_SETFATALANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
-#define MPIR_ERR_SETFATALANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
-#define MPIR_ERR_SETFATALANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
- MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
- /* No-op - use original error class; discard newerr_ unless err is
- MPI_SUCCESS*/
-#define MPIR_ERR_ADD(err_, newerr_) \
- do {if (!err_) err_ = newerr_;} while (0)
-#endif
-
-/* The following definitions are the same independent of the choice of
- HAVE_ERROR_CHECKING */
-#define MPIR_ERR_SETANDJUMP(err_,class_,msg_) \
- MPIR_ERR_SETANDSTMT(err_,class_,goto fn_fail,msg_)
-#define MPIR_ERR_SETFATALANDJUMP(err_,class_,msg_) \
- MPIR_ERR_SETFATALANDSTMT(err_,class_,goto fn_fail,msg_)
-#define MPIR_ERR_CHKANDSTMT(cond_,err_,class_,stmt_,msg_) \
- do {if (cond_) { MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_); }} while (0)
-#define MPIR_ERR_CHKFATALANDSTMT(cond_,err_,class_,stmt_,msg_) \
- do {if (cond_) { MPIR_ERR_SETFATALANDSTMT(err_,class_,stmt_,msg_); }} while (0)
-#define MPIR_ERR_CHKANDJUMP(cond_,err_,class_,msg_) \
- MPIR_ERR_CHKANDSTMT(cond_,err_,class_,goto fn_fail,msg_)
-#define MPIR_ERR_CHKFATALANDJUMP(cond_,err_,class_,msg_) \
- MPIR_ERR_CHKFATALANDSTMT(cond_,err_,class_,goto fn_fail,msg_)
-
-#define MPIR_ERR_SETANDJUMP1(err_,class_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_SETANDSTMT1(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
-#define MPIR_ERR_SETFATALANDJUMP1(err_,class_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_SETFATALANDSTMT1(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
-#define MPIR_ERR_CHKANDSTMT1(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_) \
- do {if (cond_) { MPIR_ERR_SETANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_); }} while (0)
-#define MPIR_ERR_CHKFATALANDSTMT1(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_) \
- do {if (cond_) { MPIR_ERR_SETFATALANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_); }} while (0)
-#define MPIR_ERR_CHKANDJUMP1(cond_,err_,class_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_CHKANDSTMT1(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
-#define MPIR_ERR_CHKFATALANDJUMP1(cond_,err_,class_,gmsg_,smsg_,arg1_) \
- MPIR_ERR_CHKFATALANDSTMT1(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
-
-#define MPIR_ERR_SETANDJUMP2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_SETANDSTMT2(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
-#define MPIR_ERR_SETFATALANDJUMP2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_SETFATALANDSTMT2(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
-#define MPIR_ERR_CHKANDSTMT2(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
- do {if (cond_) { MPIR_ERR_SETANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_); }} while (0)
-#define MPIR_ERR_CHKFATALANDSTMT2(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
- do {if (cond_) { MPIR_ERR_SETFATALANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_); }} while (0)
-#define MPIR_ERR_CHKANDJUMP2(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_CHKANDSTMT2(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
-#define MPIR_ERR_CHKFATALANDJUMP2(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_) \
- MPIR_ERR_CHKFATALANDSTMT2(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
-
-#define MPIR_ERR_SETANDJUMP3(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- MPIR_ERR_SETANDSTMT3(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
-#define MPIR_ERR_SETFATALANDJUMP3(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- MPIR_ERR_SETFATALANDSTMT3(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
-#define MPIR_ERR_CHKANDSTMT3(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- do {if (cond_) { MPIR_ERR_SETANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_); }} while (0)
-#define MPIR_ERR_CHKFATALANDSTMT3(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- do {if (cond_) { MPIR_ERR_SETFATALANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_); }} while (0)
-#define MPIR_ERR_CHKANDJUMP3(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- MPIR_ERR_CHKANDSTMT3(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
-#define MPIR_ERR_CHKFATALANDJUMP3(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
- MPIR_ERR_CHKFATALANDSTMT3(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
-
-#define MPIR_ERR_SETANDJUMP4(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
- MPIR_ERR_SETANDSTMT4(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
-#define MPIR_ERR_SETFATALANDJUMP4(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
- MPIR_ERR_SETFATALANDSTMT4(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
-#define MPIR_ERR_CHKANDSTMT4(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_, arg4_) \
- do {if (cond_) { MPIR_ERR_SETANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_); }} while (0)
-#define MPIR_ERR_CHKFATALANDSTMT4(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_, arg4_) \
- do {if (cond_) { MPIR_ERR_SETFATALANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_); }} while (0)
-#define MPIR_ERR_CHKANDJUMP4(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
- MPIR_ERR_CHKANDSTMT4(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
-#define MPIR_ERR_CHKFATALANDJUMP4(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
- MPIR_ERR_CHKFATALANDSTMT4(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
-
-#define MPIR_ERR_INTERNAL(err_, msg_) \
- MPIR_ERR_SETFATAL1(err_, MPI_ERR_INTERN, "**intern", "**intern %s", msg_)
-#define MPIR_ERR_INTERNALANDSTMT(err_, msg_, stmt_) \
- MPIR_ERR_SETANDSTMT1(err_, MPI_ERR_INTERN, stmt_, "**intern", "**intern %s", msg_)
-#define MPIR_ERR_INTERNALANDJUMP(err_, msg_) \
- MPIR_ERR_INTERNALANDSTMT(err_, msg_, goto fn_fail)
-#define MPIR_ERR_CHKINTERNAL(cond_, err_, msg_) \
- do {if (cond_) MPIR_ERR_INTERNALANDJUMP(err_, msg_);} while(0)
-
-/* --END ERROR MACROS-- */
-
-/*
- * Special case for "is initialized".
- * This should be used in cases where there is no
- * additional error checking
- */
-#ifdef HAVE_ERROR_CHECKING
-#define MPIR_ERRTEST_INITIALIZED_ORDIE() \
-do { \
- if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_PRE_INIT || \
- OPA_load_int(&MPIR_Process.mpich_state) == MPICH_POST_FINALIZED) \
- { \
- MPIR_Err_preOrPostInit(); \
- } \
-} while (0)
-#else
-#define MPIR_ERRTEST_INITIALIZED_ORDIE() do {} while (0)
-#endif
-
-/* ------------------------------------------------------------------------- */
-/* end of mpierrs.h */
-/* ------------------------------------------------------------------------- */
-
-#endif
diff --git a/src/include/mpiext.h b/src/include/mpiext.h
deleted file mode 100644
index aff4bb1..0000000
--- a/src/include/mpiext.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2006 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* This file contains the prototypes for routines that are used with
- "external" modules such as ROMIO. These allow the different packages to
- hide their internal datatypes from one another */
-
-#ifndef MPIEXT_H_INCLUDED
-#define MPIEXT_H_INCLUDED
-
-/* This routine, given an MPI_Errhandler (from a file), returns
- a pointer to the user-supplied error function. The last argument
- is set to an integer indicating that the function is MPI_ERRORS_RETURN
- (value == 1), MPI_ERRORS_ARE_FATAL (value == 0), a valid user-function
- (value == 2), or a valid user-function that is a C++ routine (value == 3)
-
- This routine is implemented in mpich/src/mpi/errhan/file_set_errhandler.c
-*/
-void MPIR_Get_file_error_routine( MPI_Errhandler,
- void (**)(MPI_File *, int *, ...),
- int * );
-
-/* Invoke the C++ error handler (this invokes a special C++ routine that
- in turn calls the provided function. That special routine also
- resets the errorcode to MPI_SUCCESS to prevent the MPICH C++ error handling
- code from throwing an exception when the user routine returns.
-*/
-int MPIR_File_call_cxx_errhandler( MPI_File *, int *,
- void (*)(MPI_File *, int *, ... ) );
-/*
- These routines provide access to the MPI_Errhandler field within the
- ROMIO MPI_File structure
- */
-int MPIR_ROMIO_Get_file_errhand( MPI_File, MPI_Errhandler * );
-int MPIR_ROMIO_Set_file_errhand( MPI_File, MPI_Errhandler );
-
-/* FIXME: This routine is also defined in adio.h */
-int MPIO_Err_return_file( MPI_File, int );
-
-#endif
diff --git a/src/include/mpifunc.h b/src/include/mpifunc.h
deleted file mode 100644
index 8630cd4..0000000
--- a/src/include/mpifunc.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2008 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPIFUNC_H_INCLUDED
-#define MPIFUNC_H_INCLUDED
-
-/* state declaration macros */
-#if defined(USE_DBG_LOGGING) || defined(MPICH_DEBUG_MEMARENA)
-#define MPIR_STATE_DECL(a)
-#define MPID_MPI_STATE_DECL(a) MPIR_STATE_DECL(a)
-#define MPID_MPI_INIT_STATE_DECL(a) MPIR_STATE_DECL(a)
-#define MPID_MPI_FINALIZE_STATE_DECL(a) MPIR_STATE_DECL(a)
-#define MPIDI_STATE_DECL(a) MPIR_STATE_DECL(a)
-#define MPIDI_INIT_STATE_DECL(a) MPIR_STATE_DECL(a)
-#define MPIDI_FINALIZE_STATE_DECL(a) MPIR_STATE_DECL(a)
-
-/* Tell the package to define the rest of the enter/exit macros in
- terms of these */
-#define NEEDS_FUNC_ENTER_EXIT_DEFS 1
-#endif /* USE_DBG_LOGGING || MPICH_DEBUG_MEMARENA */
-
-/* function enter and exit macros */
-#if defined(USE_DBG_LOGGING)
-#define MPIR_FUNC_ENTER(a) MPIU_DBG_MSG(ROUTINE_ENTER,TYPICAL,"Entering "#a)
-#elif defined(MPICH_DEBUG_MEMARENA)
-#define MPIR_FUNC_ENTER(a) MPIU_trvalid("Entering " #a)
-#endif
-
-#if defined(USE_DBG_LOGGING)
-#define MPIR_FUNC_EXIT(a) MPIU_DBG_MSG(ROUTINE_EXIT,TYPICAL,"Leaving "#a)
-#elif defined(MPICH_DEBUG_MEMARENA)
-#define MPIR_FUNC_EXIT(a) MPIU_DBG_MSG(ROUTINE_EXIT,TYPICAL,"Leaving "#a)
-#endif
-
-#endif /* MPIFUNC_H_INCLUDED */
diff --git a/src/include/mpihandlemem.h b/src/include/mpihandlemem.h
deleted file mode 100644
index e099cb8..0000000
--- a/src/include/mpihandlemem.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIHANDLE_H_INCLUDED
-#define MPIHANDLE_H_INCLUDED
-
-/*TOpaqOverview.tex
- MPI Opaque Objects:
-
- MPI Opaque objects such as 'MPI_Comm' or 'MPI_Datatype' are specified by
- integers (in the MPICH implementation); the MPI standard calls these
- handles.
- Out of range values are invalid; the value 0 is reserved.
- For most (with the possible exception of
- 'MPI_Request' for performance reasons) MPI Opaque objects, the integer
- encodes both the kind of object (allowing runtime tests to detect a datatype
- passed where a communicator is expected) and important properties of the
- object. Even the 'MPI_xxx_NULL' values should be encoded so that
- different null handles can be distinguished. The details of the encoding
- of the handles is covered in more detail in the MPICH Design Document.
- For the most part, the ADI uses pointers to the underlying structures
- rather than the handles themselves. However, each structure contains an
- 'handle' field that is the corresponding integer handle for the MPI object.
-
- MPID objects (objects used within the implementation of MPI) are not opaque.
-
- T*/
-
-/* Known MPI object types. These are used for both the error handlers
- and for the handles. This is a 4 bit value. 0 is reserved for so
- that all-zero handles can be flagged as an error. */
-/*E
- MPID_Object_kind - Object kind (communicator, window, or file)
-
- Notes:
- This enum is used by keyvals and errhandlers to indicate the type of
- object for which MPI opaque types the data is valid. These are defined
- as bits to allow future expansion to the case where an object is value for
- multiple types (for example, we may want a universal error handler for
- errors return). This is also used to indicate the type of MPI object a
- MPI handle represents. It is an enum because only this applies only the
- the MPI and internal MPICH objects.
-
- The 'MPID_PROCGROUP' kind is used to manage process groups (different
- from MPI Groups) that are used to keep track of collections of
- processes (each 'MPID_PROCGROUP' corresponds to a group of processes
- that define an 'MPI_COMM_WORLD'. This becomes important only
- when MPI-2 dynamic process features are supported. 'MPID_VCONN' is
- a virtual connection; while this is not part of the overall ADI3
- design, an object that manages connections to other processes is
- a common need, and 'MPID_VCONN' may be used for that.
-
- Module:
- Attribute-DS
- E*/
-typedef enum MPID_Object_kind {
- MPID_COMM = 0x1,
- MPID_GROUP = 0x2,
- MPID_DATATYPE = 0x3,
- MPID_FILE = 0x4, /* only used obliquely inside MPID_Errhandler objs */
- MPID_ERRHANDLER = 0x5,
- MPID_OP = 0x6,
- MPID_INFO = 0x7,
- MPID_WIN = 0x8,
- MPID_KEYVAL = 0x9,
- MPID_ATTR = 0xa,
- MPID_REQUEST = 0xb,
- MPID_PROCGROUP = 0xc, /* These are internal device objects */
- MPID_VCONN = 0xd,
- MPID_GREQ_CLASS = 0xf
- } MPID_Object_kind;
-
-#define HANDLE_MPI_KIND_SHIFT 26
-#define HANDLE_GET_MPI_KIND(a) ( ((a)&0x3c000000) >> HANDLE_MPI_KIND_SHIFT )
-#define HANDLE_SET_MPI_KIND(a,kind) ((a) | ((kind) << HANDLE_MPI_KIND_SHIFT))
-
-/* returns the name of the handle kind for debugging/logging purposes */
-const char *MPIU_Handle_get_kind_str(int kind);
-
-/* Handle types. These are really 2 bits */
-#define HANDLE_KIND_INVALID 0x0
-#define HANDLE_KIND_BUILTIN 0x1
-#define HANDLE_KIND_DIRECT 0x2
-#define HANDLE_KIND_INDIRECT 0x3
-/* Mask assumes that ints are at least 4 bytes */
-#define HANDLE_KIND_MASK 0xc0000000
-#define HANDLE_KIND_SHIFT 30
-#define HANDLE_GET_KIND(a) (((unsigned)(a)&HANDLE_KIND_MASK)>>HANDLE_KIND_SHIFT)
-#define HANDLE_SET_KIND(a,kind) ((a)|((kind)<<HANDLE_KIND_SHIFT))
-
-/* For indirect, the remainder of the handle has a block and index within that
- * block */
-#define HANDLE_INDIRECT_SHIFT 12
-#define HANDLE_BLOCK(a) (((a)& 0x03FFF000) >> HANDLE_INDIRECT_SHIFT)
-#define HANDLE_BLOCK_INDEX(a) ((a) & 0x00000FFF)
-
-/* Number of blocks is between 1 and 16384 */
-#if defined MPID_HANDLE_NUM_BLOCKS
-#define HANDLE_NUM_BLOCKS MPID_HANDLE_NUM_BLOCKS
-#else
-#define HANDLE_NUM_BLOCKS 8192
-#endif /* MPID_HANDLE_NUM_BLOCKS */
-
-/* Number of objects in a block is bewtween 1 and 4096 (each obj has an index
- * within its block) */
-#if defined MPID_HANDLE_NUM_INDICES
-#define HANDLE_NUM_INDICES MPID_HANDLE_NUM_INDICES
-#else
-#define HANDLE_NUM_INDICES 1024
-#endif /* MPID_HANDLE_NUM_INDICES */
-
-/* For direct, the remainder of the handle is the index into a predefined
- block */
-#define HANDLE_MASK 0x03FFFFFF
-#define HANDLE_INDEX(a) ((a)& HANDLE_MASK)
-
-/* ------------------------------------------------------------------------- */
-/* reference counting macros */
-
-/* If we're debugging the handles (including reference counts),
- add an additional test. The check on a max refcount helps to
- detect objects whose refcounts are not decremented as many times
- as they are incremented */
-#ifdef MPICH_DEBUG_HANDLES
-#define MPICH_DEBUG_MAX_REFCOUNT 64
-#define MPIU_HANDLE_CHECK_REFCOUNT(objptr_,op_) \
- do { \
- int local_ref_count_ = MPIU_Object_get_ref(objptr_); \
- if (local_ref_count_ > MPICH_DEBUG_MAX_REFCOUNT || local_ref_count_ < 0) \
- { \
- MPIU_DBG_MSG_FMT(HANDLE,TYPICAL,(MPIU_DBG_FDEST, \
- "Invalid refcount (%d) in %p (0x%08x) %s", \
- local_ref_count_, (objptr_), (objptr_)->handle, op_)); \
- } \
- MPIU_Assert(local_ref_count_ >= 0); \
- } while (0)
-#else
-#define MPIU_HANDLE_CHECK_REFCOUNT(objptr_,op_) \
- MPIU_Assert(MPIU_Object_get_ref(objptr_) >= 0)
-#endif
-
-#define MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, action_str_) \
- MPIU_DBG_MSG_FMT(HANDLE,TYPICAL,(MPIU_DBG_FDEST, \
- "%s %p (0x%08x kind=%s) refcount to %d", \
- (action_str_), \
- (objptr_), \
- (objptr_)->handle, \
- MPIU_Handle_get_kind_str(HANDLE_GET_MPI_KIND((objptr_)->handle)), \
- MPIU_Object_get_ref(objptr_)))
-
-
-/*M
- MPIU_Object_add_ref - Increment the reference count for an MPI object
-
- Synopsis:
-.vb
- MPIU_Object_add_ref( MPIU_Object *ptr )
-.ve
-
- Input Parameter:
-. ptr - Pointer to the object.
-
- Notes:
- In an unthreaded implementation, this function will usually be implemented
- as a single-statement macro. In an 'MPI_THREAD_MULTIPLE' implementation,
- this routine must implement an atomic increment operation, using, for
- example, a lock on datatypes or special assembly code.
-M*/
-/*M
- MPIU_Object_release_ref - Decrement the reference count for an MPI object
-
- Synopsis:
-.vb
- MPIU_Object_release_ref( MPIU_Object *ptr, int *inuse_ptr )
-.ve
-
- Input Parameter:
-. objptr - Pointer to the object.
-
- Output Parameter:
-. inuse_ptr - Pointer to the value of the reference count after decrementing.
- This value is either zero or non-zero. See below for details.
-
- Notes:
- In an unthreaded implementation, this function will usually be implemented
- as a single-statement macro. In an 'MPI_THREAD_MULTIPLE' implementation,
- this routine must implement an atomic decrement operation, using, for
- example, a lock on datatypes or special assembly code.
-
- Once the reference count is decremented to zero, it is an error to
- change it. A correct MPI program will never do that, but an incorrect one
- (particularly a multithreaded program with a race condition) might.
-
- The following code is `invalid`\:
-.vb
- MPIU_Object_release_ref( datatype_ptr );
- if (datatype_ptr->ref_count == 0) MPID_Datatype_free( datatype_ptr );
-.ve
- In a multi-threaded implementation, the value of 'datatype_ptr->ref_count'
- may have been changed by another thread, resulting in both threads calling
- 'MPID_Datatype_free'. Instead, use
-.vb
- MPIU_Object_release_ref( datatype_ptr, &inUse );
- if (!inuse)
- MPID_Datatype_free( datatype_ptr );
-.ve
- M*/
-
-/* The "_always" versions of these macros unconditionally manipulate the
- * reference count of the given object. They exist to permit an optimization
- * of not reference counting predefined objects. */
-
-/* The MPIU_DBG... statements are macros that vanish unless
- --enable-g=log is selected. MPIU_HANDLE_CHECK_REFCOUNT is
- defined above, and adds an additional sanity check for the refcounts
-*/
-#if MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_NONE
-
-typedef int MPIU_Handle_ref_count;
-#define MPIU_HANDLE_REF_COUNT_INITIALIZER(val_) (val_)
-
-#define MPIU_Object_set_ref(objptr_,val) \
- do { \
- (objptr_)->ref_count = val; \
- MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "set"); \
- } while (0)
-
-/* must be used with care, since there is no synchronization for this read */
-#define MPIU_Object_get_ref(objptr_) \
- ((objptr_)->ref_count)
-
-#define MPIU_Object_add_ref_always(objptr_) \
- do { \
- (objptr_)->ref_count++; \
- MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "incr"); \
- MPIU_HANDLE_CHECK_REFCOUNT(objptr_,"incr"); \
- } while (0)
-#define MPIU_Object_release_ref_always(objptr_,inuse_ptr) \
- do { \
- *(inuse_ptr) = --((objptr_)->ref_count); \
- MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "decr"); \
- MPIU_HANDLE_CHECK_REFCOUNT(objptr_,"decr"); \
- } while (0)
-
-#elif MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_LOCKFREE
-
-#include "opa_primitives.h"
-typedef OPA_int_t MPIU_Handle_ref_count;
-#define MPIU_HANDLE_REF_COUNT_INITIALIZER(val_) OPA_INT_T_INITIALIZER(val_)
-
-#define MPIU_Object_set_ref(objptr_,val) \
- do { \
- OPA_store_int(&(objptr_)->ref_count, val); \
- MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "set"); \
- } while (0)
-
-/* must be used with care, since there is no synchronization for this read */
-#define MPIU_Object_get_ref(objptr_) \
- (OPA_load_int(&(objptr_)->ref_count))
-
-#define MPIU_Object_add_ref_always(objptr_) \
- do { \
- OPA_incr_int(&((objptr_)->ref_count)); \
- MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "incr"); \
- MPIU_HANDLE_CHECK_REFCOUNT(objptr_,"incr"); \
- } while (0)
-#define MPIU_Object_release_ref_always(objptr_,inuse_ptr) \
- do { \
- int got_zero_ = OPA_decr_and_test_int(&((objptr_)->ref_count)); \
- *(inuse_ptr) = got_zero_ ? 0 : 1; \
- MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "decr"); \
- MPIU_HANDLE_CHECK_REFCOUNT(objptr_,"decr"); \
- } while (0)
-#else
-#error invalid value for MPIU_THREAD_REFCOUNT
-#endif
-
-/* TODO someday we should probably always suppress predefined object refcounting,
- * but we don't have total confidence in it yet. So until we gain sufficient
- * confidence, this is a configurable option. */
-#if defined(MPIU_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS)
-
-/* The assumption here is that objects with handles of type HANDLE_KIND_BUILTIN
- * will be created/destroyed only at MPI_Init/MPI_Finalize time and don't need
- * to be reference counted. This can be a big performance win on some
- * platforms, such as BG/P.
- *
- * It is also assumed that any object being reference counted via these macros
- * will have a valid value in the handle field, even if it is
- * HANDLE_SET_KIND(0, HANDLE_KIND_INVALID) */
-/* TODO profile and examine the assembly that is generated for this if() on Blue
- * Gene (and elsewhere). We may need to mark it unlikely(). */
-#define MPIU_Object_add_ref(objptr_) \
- do { \
- int handle_kind_ = HANDLE_GET_KIND((objptr_)->handle); \
- if (unlikely(handle_kind_ != HANDLE_KIND_BUILTIN)) { \
- MPIU_Object_add_ref_always((objptr_)); \
- } \
- else { \
- MPIU_DBG_MSG_FMT(HANDLE,TYPICAL,(MPIU_DBG_FDEST, \
- "skipping add_ref on %p (0x%08x kind=%s) refcount=%d", \
- (objptr_), \
- (objptr_)->handle, \
- MPIU_Handle_get_kind_str(HANDLE_GET_MPI_KIND((objptr_)->handle)), \
- MPIU_Object_get_ref(objptr_))) \
- } \
- } while (0)
-#define MPIU_Object_release_ref(objptr_,inuse_ptr_) \
- do { \
- int handle_kind_ = HANDLE_GET_KIND((objptr_)->handle); \
- if (unlikely(handle_kind_ != HANDLE_KIND_BUILTIN)) { \
- MPIU_Object_release_ref_always((objptr_), (inuse_ptr_)); \
- } \
- else { \
- *(inuse_ptr_) = 1; \
- MPIU_DBG_MSG_FMT(HANDLE,TYPICAL,(MPIU_DBG_FDEST, \
- "skipping release_ref on %p (0x%08x kind=%s) refcount=%d", \
- (objptr_), \
- (objptr_)->handle, \
- MPIU_Handle_get_kind_str(HANDLE_GET_MPI_KIND((objptr_)->handle)), \
- MPIU_Object_get_ref(objptr_))) \
- } \
- } while (0)
-
-#else /* !defined(MPIU_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS) */
-
-/* the base case, where we just always manipulate the reference counts */
-#define MPIU_Object_add_ref(objptr_) \
- MPIU_Object_add_ref_always((objptr_))
-#define MPIU_Object_release_ref(objptr_,inuse_ptr_) \
- MPIU_Object_release_ref_always((objptr_),(inuse_ptr_))
-
-#endif
-
-
-/* end reference counting macros */
-/* ------------------------------------------------------------------------- */
-
-/* This macro defines structure fields that are needed in order to use the
- * reference counting and object allocation macros/functions in MPICH. This
- * allows us to avoid casting and violating C's strict aliasing rules in most
- * cases.
- *
- * All *active* (in use) objects have the handle as the first value; objects
- * with referene counts have the reference count as the second value. See
- * MPIU_Object_add_ref and MPIU_Object_release_ref.
- *
- * NOTE: This macro *must* be invoked as the very first element of the structure! */
-#define MPIU_OBJECT_HEADER \
- int handle; \
- MPIU_Handle_ref_count ref_count/*semicolon intentionally omitted*/
-
-/* ALL objects have the handle as the first value. */
-/* Inactive (unused and stored on the appropriate avail list) objects
- have MPIU_Handle_common as the head */
-typedef struct MPIU_Handle_common {
- MPIU_OBJECT_HEADER;
- void *next; /* Free handles use this field to point to the next
- free object */
-} MPIU_Handle_common;
-
-/* Provides a type to which a specific object structure can be casted. In
- * general this should not be used, since most uses are violations of C's strict
- * aliasing rules. */
-typedef struct MPIU_Handle_head {
- MPIU_OBJECT_HEADER;
-} MPIU_Handle_head;
-
-/* This type contains all of the data, except for the direct array,
- used by the object allocators. */
-typedef struct MPIU_Object_alloc_t {
- MPIU_Handle_common *avail; /* Next available object */
- int initialized; /* */
- void *(*indirect)[]; /* Pointer to indirect object blocks */
- int indirect_size; /* Number of allocated indirect blocks */
- MPID_Object_kind kind; /* Kind of object this is for */
- int size; /* Size of an individual object */
- void *direct; /* Pointer to direct block, used
- for allocation */
- int direct_size; /* Size of direct block */
-} MPIU_Object_alloc_t;
-extern void *MPIU_Handle_obj_alloc(MPIU_Object_alloc_t *);
-extern void *MPIU_Handle_obj_alloc_unsafe(MPIU_Object_alloc_t *);
-extern void MPIU_Handle_obj_alloc_complete(MPIU_Object_alloc_t *, int);
-extern void MPIU_Handle_obj_free( MPIU_Object_alloc_t *, void * );
-void *MPIU_Handle_get_ptr_indirect( int, MPIU_Object_alloc_t * );
-extern void *MPIU_Handle_direct_init(void *direct, int direct_size,
- int obj_size, int handle_type);
-int MPIU_Handle_obj_outstanding(const MPIU_Object_alloc_t *objmem);
-#endif
diff --git a/src/include/mpii_bsend.h b/src/include/mpii_bsend.h
new file mode 100644
index 0000000..83263da
--- /dev/null
+++ b/src/include/mpii_bsend.h
@@ -0,0 +1,76 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIR_BSEND_H_INCLUDED
+#define MPIR_BSEND_H_INCLUDED
+
+/* This file is separated out as it is used by the configure script to
+ * find the Bsend overhead value. */
+
+/*
+ * Description of the Bsend data structures.
+ *
+ * Bsend is buffered send; a buffer, provided by the user, is used to store
+ * both the user's message and information that my be needed to send that
+ * message. In addition, space within that buffer must be allocated, so
+ * additional information is required to manage that space allocation.
+ * In the following, the term "segment" denotes a fragment of the user buffer
+ * that has been allocated either to free (unused) space or to a particular
+ * user message.
+ *
+ * The following datastructures are used:
+ *
+ * BsendMsg_t - Describes a user message, including the values of tag
+ * and datatype (*could* be used incase the data is already
+ * contiguous; see below)
+ * BsendData_t - Describes a segment of the user buffer. This data structure
+ * contains a BsendMsg_t for segments that contain a user
+ * message. Each BsendData_t segment belongs to one of
+ * three lists: avail (unused and free), active (currently
+ * sending) and pending (contains a user message that has
+ * not begun sending because of some resource limit, such
+ * as no more MPID requests available).
+ * BsendBuffer - This global structure contains pointers to the user buffer
+ * and the three lists, along with the size of the user buffer.
+ *
+ */
+
+/* Used to communication the type of bsend */
+typedef enum {
+ BSEND = 0,
+ IBSEND = 1,
+ BSEND_INIT = 2
+} MPII_Bsend_kind_t;
+
+struct MPIR_Request;
+struct MPIR_Comm;
+
+/* BsendMsg is used to hold all of the message particulars in case a
+ request is not currently available */
+typedef struct MPII_Bsend_msg {
+ void *msgbuf;
+ MPI_Aint count;
+ MPI_Datatype dtype;
+ int tag;
+ struct MPIR_Comm *comm_ptr;
+ int dest;
+} MPII_Bsend_msg_t;
+
+/* BsendData describes a bsend request */
+typedef struct MPII_Bsend_data {
+ size_t size; /* size that is available for data */
+ size_t total_size; /* total size of this segment,
+ including all headers */
+ struct MPII_Bsend_data *next, *prev;
+ MPII_Bsend_kind_t kind;
+ struct MPIR_Request *request;
+ MPII_Bsend_msg_t msg;
+ double alignpad; /* make sure that the struct
+ shares double alignment */
+} MPII_Bsend_data_t;
+
+#endif /* MPIR_BSEND_H_INCLUDED */
diff --git a/src/include/mpii_cxxinterface.h b/src/include/mpii_cxxinterface.h
new file mode 100644
index 0000000..3c24a05
--- /dev/null
+++ b/src/include/mpii_cxxinterface.h
@@ -0,0 +1,15 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPII_CXX_INTERFACE_H_INCLUDED
+#define MPII_CXX_INTERFACE_H_INCLUDED
+
+MPICH_API_PUBLIC extern void MPII_Keyval_set_cxx( int, void (*)(void), void (*)(void) );
+MPICH_API_PUBLIC extern void MPII_Op_set_cxx( MPI_Op, void (*)(void) );
+MPICH_API_PUBLIC extern void MPII_Errhandler_set_cxx( MPI_Errhandler, void (*)(void) );
+
+#endif /* MPII_CXX_INTERFACE_H_INCLUDED */
diff --git a/src/include/mpii_f77interface.h b/src/include/mpii_f77interface.h
new file mode 100644
index 0000000..2ba89bd
--- /dev/null
+++ b/src/include/mpii_f77interface.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPII_F77INTERFACE_H_INCLUDED
+#define MPII_F77INTERFACE_H_INCLUDED
+
+/* These functions are provided by the MPICH code for the Fortran interface,
+ and provide the interfaces needed to keep track of which MPI internal
+ objects need to have Fortran or Fortran 90 characteristics */
+MPICH_API_PUBLIC void MPII_Keyval_set_fortran( int );
+MPICH_API_PUBLIC void MPII_Keyval_set_fortran90( int );
+MPICH_API_PUBLIC void MPII_Grequest_set_lang_f77( MPI_Request greq );
+#if defined(HAVE_FORTRAN_BINDING) && !defined(HAVE_FINT_IS_INT)
+MPICH_API_PUBLIC void MPII_Op_set_fc( MPI_Op );
+typedef void (MPII_F77_User_function) ( void *, void *, MPI_Fint *, MPI_Fint * );
+MPICH_API_PUBLIC void MPII_Errhandler_set_fc( MPI_Errhandler );
+#endif
+
+#define MPII_ATTR_C_TO_FORTRAN(ATTR) ((ATTR)+1)
+
+#endif /* MPII_F77INTERFACE_H_INCLUDED */
diff --git a/src/include/mpii_fortlogical.h b/src/include/mpii_fortlogical.h
new file mode 100644
index 0000000..d68c4db
--- /dev/null
+++ b/src/include/mpii_fortlogical.h
@@ -0,0 +1,45 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPII_FORTLOGICAL_H_INCLUDED
+#define MPII_FORTLOGICAL_H_INCLUDED
+
+/* Fortran logical values */
+#ifndef _CRAY
+#ifdef F77_USE_BOOLEAN_LITERALS
+#define MPII_F_TRUE F77_TRUE_VALUE
+#define MPII_F_FALSE F77_FALSE_VALUE
+#else
+#if !defined(F77_RUNTIME_VALUES) && defined(F77_TRUE_VALUE_SET)
+MPICH_API_PUBLIC extern const MPI_Fint MPII_F_TRUE, MPII_F_FALSE;
+#else
+MPICH_API_PUBLIC extern MPI_Fint MPII_F_TRUE, MPII_F_FALSE;
+#endif
+#endif
+#define MPII_TO_FLOG(a) ((a) ? MPII_F_TRUE : MPII_F_FALSE)
+/*
+ Note on true and false. This code is only an approximation.
+ Some systems define either true or false, and allow some or ALL other
+ patterns for the other. This is just like C, where 0 is false and
+ anything not zero is true. Modify this test as necessary for your
+ system.
+
+ We check against FALSE instead of TRUE because many (perhaps all at this
+ point) Fortran compilers use 0 for false and some non-zero value for
+ true. By using this test, it is possible to use the same Fortran
+ interface library for multiple compilers that differ only in the
+ value used for Fortran .TRUE. .
+ */
+#define MPII_FROM_FLOG(a) ( (a) == MPII_F_FALSE ? 0 : 1 )
+
+#else
+/* CRAY Vector processors only; these are defined in /usr/include/fortran.h
+ Thanks to lmc at cray.com */
+#define MPII_TO_FLOG(a) (_btol(a))
+#define MPII_FROM_FLOG(a) ( _ltob(&(a)) ) /* (a) must be a pointer */
+#endif
+
+#endif /* MPII_FORTLOGICAL_H_INCLUDED */
diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index e705e5d..a92f85c 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -1,5 +1,5 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
+/*
* (C) 2001 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*
@@ -12,12 +12,10 @@
* excludes the implied warranties of merchantability, fitness for a
* particular purpose and non-infringement.
*/
+
#ifndef MPIIMPL_H_INCLUDED
#define MPIIMPL_H_INCLUDED
-/* style: define:vsnprintf:1 sig:0 */
-/* style: allow:printf:3 sig:0 */
-
#include "mpichconfconst.h"
#include "mpichconf.h"
@@ -58,29 +56,9 @@ int usleep(useconds_t usec);
#endif
#endif
-/* if we are defining this, we must define it before including mpl.h */
-#if defined(MPICH_DEBUG_MEMINIT)
-#define MPL_VG_ENABLED 1
-#endif
-
-#include "mpl.h"
-#include "opa_primitives.h"
-#include "mpi.h"
-#include "mpiutil.h"
-#include "mpidpre.h"
-
#if defined(HAVE_LONG_LONG_INT)
-/* tt#1776: some platforms have "long long" but not a LLONG_MAX/ULLONG_MAX,
- * usually because some feature test macro has turned them off in glibc's
- * features.h header b/c we are not in a >=C99 mode. Use well-defined unsigned
- * integer overflow to determine ULLONG_MAX, and assume two's complement for
- * determining LLONG_MAX (already assumed elsewhere in MPICH). */
-#ifndef ULLONG_MIN
-#define ULLONG_MIN (0) /* trivial */
-#endif
-#ifndef ULLONG_MAX
-#define ULLONG_MAX ((unsigned long long)0 - 1)
-#endif
+/* Assume two's complement for determining LLONG_MAX (already assumed
+ * elsewhere in MPICH). */
#ifndef LLONG_MAX
/* slightly tricky (values in binary):
* - put a 1 in the second-to-msb digit (0100...0000)
@@ -89,11 +67,6 @@ int usleep(useconds_t usec);
* - add 1, yielding all 1s in positive space (0111...1111) */
#define LLONG_MAX (((((long long) 1 << (sizeof(long long) * CHAR_BIT - 2)) - 1 ) << 1) + 1)
#endif
-#ifndef LLONG_MIN
-/* (1000...0000) is the most negative value in a twos-complement representation,
- * which is the bitwise complement of the most positive value */
-#define LLONG_MIN (~LLONG_MAX)
-#endif
#endif /* defined(HAVE_LONG_LONG_INT) */
#if (!defined MAXHOSTNAMELEN) && (!defined MAX_HOSTNAME_LEN)
@@ -107,7 +80,7 @@ int usleep(useconds_t usec);
#ifdef USE_WEAK_SYMBOLS
#define PMPI_LOCAL static
#else
-#define PMPI_LOCAL
+#define PMPI_LOCAL
#endif
/* Fix for universal endianess added in autoconf 2.62 */
@@ -120,4303 +93,146 @@ int usleep(useconds_t usec);
#endif
#endif
-#include "mpir_type_defs.h"
-
-/* Overriding memcpy:
- This is a utility function for memory copy. The device might use
- this directly or override it with a different device-specific
- mechanism to provide an MPID_Memcpy function. However, we
- currently do not provide such an ADI function.
-*/
-#ifndef MPIU_Memcpy
-#define MPIU_Memcpy(dst, src, len) \
- do { \
- MPIU_MEM_CHECK_MEMCPY((dst),(src),(len)); \
- memcpy((dst), (src), (len)); \
- } while (0)
-#endif
-
-/* ------------------------------------------------------------------------- */
-/* mpidebug.h */
-/* ------------------------------------------------------------------------- */
-/* Debugging and printf control */
-/* Use these *only* for debugging output intended for the implementors
- and maintainers of MPICH. Do *not* use these for any output that
- general users may normally see. Use either the error code creation
- routines for error messages or MPIU_msg_printf etc. for general messages
- (MPIU_msg_printf will go through gettext).
-
- FIXME: Document all of these macros
-
- NOTE: These macros and values are deprecated. See
- www.mcs.anl.gov/mpi/mpich/developer/design/debugmsg.htm for
- the new design (only partially implemented at this time).
-
- The implementation is in mpidbg.h
-*/
-#include "mpidbg.h"
-
-#if defined(MPICH_DBG_OUTPUT)
-#define MPIU_DBG_PRINTF(e) \
-{ \
- if (MPIU_dbg_state != MPIU_DBG_STATE_NONE) \
- { \
- MPIU_dbg_printf e; \
- } \
-}
-/* The first argument is a place holder to allow the selection of a subset
- of debugging events. The second is a placeholder to allow a numeric
- level of debugging within that class. The third is the debugging text */
-#define MPIU_DBG_PRINTF_CLASS(_c,_l,_e) MPIU_DBG_PRINTF(_e)
-#else
-#define MPIU_DBG_PRINTF(e)
-#define MPIU_DBG_PRINTF_CLASS(_c,_l,_e)
-#endif
-
-/* The follow is temporarily provided for backward compatibility. Any code
- using dbg_printf should be updated to use MPIU_DBG_PRINTF. */
-#define dbg_printf MPIU_dbg_printf
-
-/* ------------------------------------------------------------------------- */
-/* end of mpidebug.h */
-/* ------------------------------------------------------------------------- */
-
-/* Routines for memory management */
-#include "mpimem.h"
-
-#if defined HAVE_LIBHCOLL
-#include "../mpid/common/hcoll/hcollpre.h"
-#endif
-
-/*
- * Use MPIU_SYSCALL to wrap system calls; this provides a convenient point
- * for timing the calls and keeping track of the use of system calls.
- * This macro simply invokes the system call and does not even handle
- * EINTR.
- * To use,
- * MPIU_SYSCALL( return-value, name-of-call, args-in-parenthesis )
- * e.g., change "n = read(fd,buf,maxn);" into
- * MPIU_SYSCALL( n,read,(fd,buf,maxn) );
- * An example that prints each syscall to stdout is shown below.
- */
-#ifdef USE_LOG_SYSCALLS
-#define MPIU_SYSCALL(a_,b_,c_) { \
- printf( "[%d]about to call %s\n", MPIR_Process.comm_world->rank,#b_);\
- fflush(stdout); errno = 0;\
- a_ = b_ c_; \
- if ((a_)>=0 || errno==0) {\
- printf( "[%d]%s returned %d\n", \
- MPIR_Process.comm_world->rank, #b_, a_ );\
- } \
- else { \
- printf( "[%d]%s returned %d (errno = %d,%s)\n", \
- MPIR_Process.comm_world->rank, \
- #b_, a_, errno, MPIU_Strerror(errno));\
- }; fflush(stdout);}
-#else
-#define MPIU_SYSCALL(a_,b_,c_) a_ = b_ c_
-#endif
-
-/*TDSOverview.tex
-
- MPI has a number of data structures, most of which are represented by
- an opaque handle in an MPI program. In the MPICH implementation of MPI,
- these handles are represented
- as integers; this makes implementation of the C/Fortran handle transfer
- calls (part of MPI-2) easy.
-
- MPID objects (again with the possible exception of 'MPI_Request's)
- are allocated by a common set of object allocation functions.
- These are
-.vb
- void *MPIU_Handle_obj_create( MPIU_Object_alloc_t *objmem )
- void MPIU_Handle_obj_destroy( MPIU_Object_alloc_t *objmem, void *object )
-.ve
- where 'objmem' is a pointer to a memory allocation object that knows
- enough to allocate objects, including the
- size of the object and the location of preallocated memory, as well
- as the type of memory allocator. By providing the routines to allocate and
- free the memory, we make it easy to use the same interface to allocate both
- local and shared memory for objects (always using the same kind for each
- type of object).
-
- The names create/destroy were chosen because they are different from
- new/delete (C++ operations) and malloc/free.
- Any name choice will have some conflicts with other uses, of course.
-
- Reference Counts:
- Many MPI objects have reference count semantics.
- The semantics of MPI require that many objects that have been freed by the
- user
- (e.g., with 'MPI_Type_free' or 'MPI_Comm_free') remain valid until all
- pending
- references to that object (e.g., by an 'MPI_Irecv') are complete. There
- are several ways to implement this; MPICH uses `reference counts` in the
- objects. To support the 'MPI_THREAD_MULTIPLE' level of thread-safety, these
- reference counts must be accessed and updated atomically.
- A reference count for
- `any` object can be incremented (atomically)
- with 'MPIU_Object_add_ref(objptr)'
- and decremented with 'MPIU_Object_release_ref(objptr,newval_ptr)'.
- These have been designed so that then can be implemented as inlined
- macros rather than function calls, even in the multithreaded case, and
- can use special processor instructions that guarantee atomicity to
- avoid thread locks.
- The decrement routine sets the value pointed at by 'inuse_ptr' to 0 if
- the postdecrement value of the reference counter is zero, and to a non-zero
- value otherwise. If this value is zero, then the routine that decremented
- the
- reference count should free the object. This may be as simple as
- calling 'MPIU_Handle_obj_destroy' (for simple objects with no other allocated
- storage) or may require calling a separate routine to destroy the object.
- Because MPI uses 'MPI_xxx_free' to both decrement the reference count and
- free the object if the reference count is zero, we avoid the use of 'free'
- in the MPID routines.
-
- The 'inuse_ptr' approach is used rather than requiring the post-decrement
- value because, for reference-count semantics, all that is necessary is
- to know when the reference count reaches zero, and this can sometimes
- be implemented more cheaply that requiring the post-decrement value (e.g.,
- on IA32, there is an instruction for this operation).
-
- Question:
- Should we state that this is a macro so that we can use a register for
- the output value? That avoids a store. Alternately, have the macro
- return the value as if it was a function?
-
- Structure Definitions:
- The structure definitions in this document define `only` that part of
- a structure that may be used by code that is making use of the ADI.
- Thus, some structures, such as 'MPID_Comm', have many defined fields;
- these are used to support MPI routines such as 'MPI_Comm_size' and
- 'MPI_Comm_remote_group'. Other structures may have few or no defined
- members; these structures have no fields used outside of the ADI.
- In C++ terms, all members of these structures are 'private'.
-
- For the initial implementation, we expect that the structure definitions
- will be designed for the multimethod device. However, all items that are
- specific to a particular device (including the multi-method device)
- will be placed at the end of the structure;
- the document will clearly identify the members that all implementations
- will provide. This simplifies much of the code in both the ADI and the
- implementation of the MPI routines because structure member can be directly
- accessed rather than using some macro or C++ style method interface.
-
- T*/
-
-/* mpi_lang.h - Prototypes for language specific routines. Currently used to
- * set keyval attribute callbacks
- */
-#include "mpi_lang.h"
-/* Known language bindings */
-/*E
- MPID_Lang_t - Known language bindings for MPI
-
- A few operations in MPI need to know what language they were called from
- or created by. This type enumerates the possible languages so that
- the MPI implementation can choose the correct behavior. An example of this
- are the keyval attribute copy and delete functions.
-
- Module:
- Attribute-DS
- E*/
-typedef enum MPID_Lang_t { MPID_LANG_C
-#ifdef HAVE_FORTRAN_BINDING
- , MPID_LANG_FORTRAN
- , MPID_LANG_FORTRAN90
-#endif
-#ifdef HAVE_CXX_BINDING
- , MPID_LANG_CXX
-#endif
-} MPID_Lang_t;
-
-/* Macros for the MPI handles (e.g., the object that encodes an
- MPI_Datatype) */
-#include "mpihandlemem.h"
-
-/* This routine is used to install an attribute free routine for datatypes
- at finalize-time */
-void MPIR_DatatypeAttrFinalize( void );
-
-/* ------------------------------------------------------------------------- */
-/* Should the following be moved into mpihandlemem.h ?*/
-/* ------------------------------------------------------------------------- */
-
-/* Routines to initialize handle allocations */
-/* These are now internal to the handlemem package
-void *MPIU_Handle_direct_init( void *, int, int, int );
-void *MPIU_Handle_indirect_init( void *(**)[], int *, int, int, int, int );
-int MPIU_Handle_free( void *((*)[]), int );
-*/
-/* Convert Handles to objects for MPI types that have predefined objects */
-/* TODO examine generated assembly for this construct, it's probably suboptimal
- * on Blue Gene. An if/else if/else might help the compiler out. It also lets
- * us hint that one case is likely(), usually the BUILTIN case. */
-#define MPID_Getb_ptr(kind,a,bmsk,ptr) \
-{ \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_BUILTIN: \
- ptr=MPID_##kind##_builtin+((a)&(bmsk)); \
- break; \
- case HANDLE_KIND_DIRECT: \
- ptr=MPID_##kind##_direct+HANDLE_INDEX(a); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr=((MPID_##kind*) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_##kind##_mem)); \
- break; \
- case HANDLE_KIND_INVALID: \
- default: \
- ptr=0; \
- break; \
- } \
-}
-
-/* Convert handles to objects for MPI types that do _not_ have any predefined
- objects */
-#define MPID_Get_ptr(kind,a,ptr) \
-{ \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr=MPID_##kind##_direct+HANDLE_INDEX(a); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr=((MPID_##kind*) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_##kind##_mem)); \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- ptr=0; \
- break; \
- } \
-}
-
-/* FIXME: the masks should be defined with the handle definitions instead
- of inserted here as literals */
-#define MPID_Comm_get_ptr(a,ptr) MPID_Getb_ptr(Comm,a,0x03ffffff,ptr)
-#define MPID_Group_get_ptr(a,ptr) MPID_Getb_ptr(Group,a,0x03ffffff,ptr)
-#define MPID_File_get_ptr(a,ptr) MPID_Get_ptr(File,a,ptr)
-#define MPID_Errhandler_get_ptr(a,ptr) MPID_Getb_ptr(Errhandler,a,0x3,ptr)
-#define MPID_Op_get_ptr(a,ptr) MPID_Getb_ptr(Op,a,0x000000ff,ptr)
-#define MPID_Info_get_ptr(a,ptr) MPID_Getb_ptr(Info,a,0x03ffffff,ptr)
-#define MPID_Win_get_ptr(a,ptr) MPID_Get_ptr(Win,a,ptr)
-#define MPID_Request_get_ptr(a,ptr) MPID_Get_ptr(Request,a,ptr)
-#define MPID_Grequest_class_get_ptr(a,ptr) MPID_Get_ptr(Grequest_class,a,ptr)
-/* Keyvals have a special format. This is roughly MPID_Get_ptrb, but
- the handle index is in a smaller bit field. In addition,
- there is no storage for the builtin keyvals.
- For the indirect case, we mask off the part of the keyval that is
- in the bits normally used for the indirect block index.
-*/
-#define MPID_Keyval_get_ptr(a,ptr) \
-{ \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_BUILTIN: \
- ptr=0; \
- break; \
- case HANDLE_KIND_DIRECT: \
- ptr=MPID_Keyval_direct+((a)&0x3fffff); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr=((MPID_Keyval*) \
- MPIU_Handle_get_ptr_indirect((a)&0xfc3fffff,&MPID_Keyval_mem)); \
- break; \
- case HANDLE_KIND_INVALID: \
- default: \
- ptr=0; \
- break; \
- } \
-}
-
-/* Valid pointer checks */
-/* This test is lame. Should eventually include cookie test
- and in-range addresses */
-#define MPID_Valid_ptr(kind,ptr,err) \
- {if (!(ptr)) { err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, \
- "**nullptrtype", "**nullptrtype %s", #kind ); } }
-#define MPID_Valid_ptr_class(kind,ptr,errclass,err) \
- {if (!(ptr)) { err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, errclass, \
- "**nullptrtype", "**nullptrtype %s", #kind ); } }
-
-#define MPID_Info_valid_ptr(ptr,err) MPID_Valid_ptr_class(Info,ptr,MPI_ERR_INFO,err)
-/* Check not only for a null pointer but for an invalid communicator,
- such as one that has been freed. Let's try the ref_count as the test
- for now */
-/* ticket #1441: check (refcount<=0) to cover the case of 0, an "over-free" of
- * -1 or similar, and the 0xecec... case when --enable-g=mem is used */
-#define MPID_Comm_valid_ptr(ptr,err,ignore_rev) { \
- MPID_Valid_ptr_class(Comm,ptr,MPI_ERR_COMM,err); \
- if ((ptr) && MPIU_Object_get_ref(ptr) <= 0) { \
- MPIR_ERR_SET(err,MPI_ERR_COMM,"**comm"); \
- ptr = 0; \
- } else if ((ptr) && (ptr)->revoked && !(ignore_rev)) { \
- MPIR_ERR_SET(err,MPIX_ERR_REVOKED,"**comm"); \
- } \
-}
-#define MPID_Group_valid_ptr(ptr,err) MPID_Valid_ptr_class(Group,ptr,MPI_ERR_GROUP,err)
-#define MPID_Win_valid_ptr(ptr,err) MPID_Valid_ptr_class(Win,ptr,MPI_ERR_WIN,err)
-#define MPID_Op_valid_ptr(ptr,err) MPID_Valid_ptr_class(Op,ptr,MPI_ERR_OP,err)
-#define MPID_Errhandler_valid_ptr(ptr,err) MPID_Valid_ptr_class(Errhandler,ptr,MPI_ERR_ARG,err)
-#define MPID_File_valid_ptr(ptr,err) MPID_Valid_ptr_class(File,ptr,MPI_ERR_FILE,err)
-#define MPID_Request_valid_ptr(ptr,err) MPID_Valid_ptr_class(Request,ptr,MPI_ERR_REQUEST,err)
-#define MPID_Keyval_valid_ptr(ptr,err) MPID_Valid_ptr_class(Keyval,ptr,MPI_ERR_KEYVAL,err)
-
-#define MPIR_DATATYPE_IS_PREDEFINED(type) \
- ((HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) || \
- (type == MPI_FLOAT_INT) || (type == MPI_DOUBLE_INT) || \
- (type == MPI_LONG_INT) || (type == MPI_SHORT_INT) || \
- (type == MPI_LONG_DOUBLE_INT))
-
-/* FIXME:
- Generic pointer test. This is applied to any address, not just one from
- an MPI object.
- Currently unimplemented (returns success except for null pointers.
- With a little work, could check that the pointer is properly aligned,
- using something like
- ((p) == 0 || ((char *)(p) & MPID_Alignbits[alignment] != 0)
- where MPID_Alignbits is set with a mask whose bits must be zero in a
- properly aligned quantity. For systems with no alignment rules,
- all of these masks are zero, and this part of test can be eliminated.
- */
-#define MPID_Pointer_is_invalid(p,alignment) ((p) == 0)
-/* Fixme: The following MPID_ALIGNED_xxx values are temporary. They
- need to be computed by configure and included in the mpichconf.h file.
- Note that they cannot be set conservatively (i.e., as sizeof(object)),
- since the runtime system may generate objects with lesser alignment
- rules if the processor allows them.
- */
-#define MPID_ALIGNED_PTR_INT 1
-#define MPID_ALIGNED_PTR_LONG 1
-#define MPID_ALIGNED_PTR_VOIDP 1
-/* ------------------------------------------------------------------------- */
-/* end of code that should the following be moved into mpihandlemem.h ?*/
-/* ------------------------------------------------------------------------- */
-
-/* ------------------------------------------------------------------------- */
-/* Info */
-/*TInfoOverview.tex
-
- 'MPI_Info' provides a way to create a list of '(key,value)' pairs
- where the 'key' and 'value' are both strings. Because many routines, both
- in the MPI implementation and in related APIs such as the PMI process
- management interface, require 'MPI_Info' arguments, we define a simple
- structure for each 'MPI_Info' element. Elements are allocated by the
- generic object allocator; the head element is always empty (no 'key'
- or 'value' is defined on the head element).
-
- For simplicity, we have not abstracted the info data structures;
- routines that want to work with the linked list may do so directly.
- Because the 'MPI_Info' type is a handle and not a pointer, an MPIU
- (utility) routine is provided to handle the
- deallocation of 'MPID_Info' elements. See the implementation of
- 'MPI_Info_create' for how an Info type is allocated.
-
- Thread Safety:
-
- The info interface itself is not thread-robust. In particular, the routines
- 'MPI_INFO_GET_NKEYS' and 'MPI_INFO_GET_NTHKEY' assume that no other
- thread modifies the info key. (If the info routines had the concept
- of a next value, they would not be thread safe. As it stands, a user
- must be careful if several threads have access to the same info object.)
- Further, 'MPI_INFO_DUP', while not
- explicitly advising implementers to be careful of one thread modifying the
- 'MPI_Info' structure while 'MPI_INFO_DUP' is copying it, requires that the
- operation take place in a thread-safe manner.
- There isn'' much that we can do about these cases. There are other cases
- that must be handled. In particular, multiple threads are allowed to
- update the same info value. Thus, all of the update routines must be thread
- safe; the simple implementation used in the MPICH implementation uses locks.
- Note that the 'MPI_Info_delete' call does not need a lock; the defintion of
- thread-safety means that any order of the calls functions correctly; since
- it invalid either to delete the same 'MPI_Info' twice or to modify an
- 'MPI_Info' that has been deleted, only one thread at a time can call
- 'MPI_Info_free' on any particular 'MPI_Info' value.
-
- T*/
-/*S
- MPID_Info - Structure of an MPID info
-
- Notes:
- There is no reference count because 'MPI_Info' values, unlike other MPI
- objects, may be changed after they are passed to a routine without
- changing the routine''s behavior. In other words, any routine that uses
- an 'MPI_Info' object must make a copy or otherwise act on any info value
- that it needs.
-
- A linked list is used because the typical 'MPI_Info' list will be short
- and a simple linked list is easy to implement and to maintain. Similarly,
- a single structure rather than separate header and element structures are
- defined for simplicity. No separate thread lock is provided because
- info routines are not performance critical; they may use the single
- critical section lock in the 'MPIR_Process' structure when they need a
- thread lock.
-
- This particular form of linked list (in particular, with this particular
- choice of the first two members) is used because it allows us to use
- the same routines to manage this list as are used to manage the
- list of free objects (in the file 'src/util/mem/handlemem.c'). In
- particular, if lock-free routines for updating a linked list are
- provided, they can be used for managing the 'MPID_Info' structure as well.
-
- The MPI standard requires that keys can be no less that 32 characters and
- no more than 255 characters. There is no mandated limit on the size
- of values.
-
- Module:
- Info-DS
- S*/
-typedef struct MPID_Info {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- struct MPID_Info *next;
- char *key;
- char *value;
-} MPID_Info;
-extern MPIU_Object_alloc_t MPID_Info_mem;
-/* Preallocated info objects */
-#define MPID_INFO_N_BUILTIN 2
-extern MPID_Info MPID_Info_builtin[MPID_INFO_N_BUILTIN];
-extern MPID_Info MPID_Info_direct[];
-/* ------------------------------------------------------------------------- */
-
-/* ------------------------------------------------------------------------- */
-/* Error Handlers */
-/*E
- MPID_Errhandler_fn - MPID Structure to hold an error handler function
-
- Notes:
- The MPI-1 Standard declared only the C version of this, implicitly
- assuming that 'int' and 'MPI_Fint' were the same.
-
- Since Fortran does not have a C-style variable number of arguments
- interface, the Fortran interface simply accepts two arguments. Some
- calling conventions for Fortran (particularly under Windows) require
- this.
-
- Module:
- ErrHand-DS
-
- Questions:
- What do we want to do about C++? Do we want a hook for a routine that can
- be called to throw an exception in C++, particularly if we give C++ access
- to this structure? Does the C++ handler need to be different (not part
- of the union)?
-
- E*/
-typedef union MPID_Errhandler_fn {
- void (*C_Comm_Handler_function) ( MPI_Comm *, int *, ... );
- void (*F77_Handler_function) ( MPI_Fint *, MPI_Fint * );
- void (*C_Win_Handler_function) ( MPI_Win *, int *, ... );
- void (*C_File_Handler_function) ( MPI_File *, int *, ... );
-} MPID_Errhandler_fn;
-
-/*S
- MPID_Errhandler - Description of the error handler structure
-
- Notes:
- Device-specific information may indicate whether the error handler is active;
- this can help prevent infinite recursion in error handlers caused by
- user-error without requiring the user to be as careful. We might want to
- make this part of the interface so that the 'MPI_xxx_call_errhandler'
- routines would check.
-
- It is useful to have a way to indicate that the errhandler is no longer
- valid, to help catch the case where the user has freed the errhandler but
- is still using a copy of the 'MPI_Errhandler' value. We may want to
- define the 'id' value for deleted errhandlers.
-
- Module:
- ErrHand-DS
- S*/
-typedef struct MPID_Errhandler {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPID_Lang_t language;
- MPID_Object_kind kind;
- MPID_Errhandler_fn errfn;
- /* Other, device-specific information */
-#ifdef MPID_DEV_ERRHANDLER_DECL
- MPID_DEV_ERRHANDLER_DECL
-#endif
-} MPID_Errhandler;
-extern MPIU_Object_alloc_t MPID_Errhandler_mem;
-/* Preallocated errhandler objects */
-extern MPID_Errhandler MPID_Errhandler_builtin[];
-extern MPID_Errhandler MPID_Errhandler_direct[];
-
-/* We never reference count the builtin error handler objects, regardless of how
- * we decide to reference count the other predefined objects. If we get to the
- * point where we never reference count *any* of the builtin objects then we
- * should probably remove these checks and let them fall through to the checks
- * for BUILTIN down in the MPIU_Object_* routines. */
-#define MPIR_Errhandler_add_ref( _errhand ) \
- do { \
- if (HANDLE_GET_KIND((_errhand)->handle) != HANDLE_KIND_BUILTIN) { \
- MPIU_Object_add_ref( _errhand ); \
- } \
- } while (0)
-#define MPIR_Errhandler_release_ref( _errhand, _inuse ) \
- do { \
- if (HANDLE_GET_KIND((_errhand)->handle) != HANDLE_KIND_BUILTIN) { \
- MPIU_Object_release_ref( (_errhand), (_inuse) ); \
- } \
- else { \
- *(_inuse) = 1; \
- } \
- } while (0)
-/* ------------------------------------------------------------------------- */
-
-/* ------------------------------------------------------------------------- */
-/* Keyvals and attributes */
-/*TKyOverview.tex
-
- Keyvals are MPI objects that, unlike most MPI objects, are defined to be
- integers rather than a handle (e.g., 'MPI_Comm'). However, they really
- `are` MPI opaque objects and are handled by the MPICH implementation in
- the same way as all other MPI opaque objects. The only difference is that
- there is no 'typedef int MPI_Keyval;' in 'mpi.h'. In particular, keyvals
- are encoded (for direct and indirect references) in the same way that
- other MPI opaque objects are
-
- Each keyval has a copy and a delete function associated with it.
- Unfortunately, these have a slightly different calling sequence for
- each language, particularly when the size of a pointer is
- different from the size of a Fortran integer. The unions
- 'MPID_Copy_function' and 'MPID_Delete_function' capture the differences
- in a single union type.
-
- The above comment is out of date but has never been updated as it should
- have to match the introduction of a different interface. Beware!
-
- Notes:
-
- In the original design, retrieving a attribute from a different
- language that set it was thought to be an error. The MPI Forum
- decided that this should be allowed, and after much discussion, the
- behavior was defined. Thus, we need to record what sort of
- attribute was provided, and be able to properly return the correct
- value in each case. See MPI 2.2, Section 16.3.7 (Attributes) for
- specific requirements. One consequence of this is that the value
- that is returned may have a different length that how it was set.
- On little-endian platforms (e.g., x86), this doesn't cause much of a
- problem, because the address is that of the least significant byte,
- and the lower bytes have the data that is needed in the case that
- the desired attribute type is shorter than the stored attribute.
- However, on a big-endian platform (e.g., IBM POWER), since the most
- significant bytes are stored first, depending on the length of the
- result type, the address of the result may not be the beginning of
- the memory area. For example, assume that an MPI_Fint is 4 bytes
- and a void * (and a Fortran INTEGER of kind MPI_ADDRESS_KIND) is 8
- bytes, and let the attribute store the value in an 8 byte integer in
- a field named "value". On a little-endian platform, the address of
- the value is always the beginning of the field "value". On a
- big-endian platform, the address of the value is the beginning of
- the field if the return type is a pointer (e.g., from C) or Fortran
- (KIND=MPI_ADDRESS_KIND), and the address of the beginning of the
- field + 4 if the return type is a Fortran 77 integer (and, as
- specified above, an MPI_Fint is 4 bytes shorter than a void *).
+#if defined(HAVE_VSNPRINTF) && defined(NEEDS_VSNPRINTF_DECL) && !defined(vsnprintf)
+int vsnprintf(char *str, size_t size, const char *format, va_list ap);
+# endif
- For the big-endian case, it is possible to manage these shifts (using
- WORDS_LITTLEENDIAN to detect the big-endian case). Alternatively,
- at a small cost in space, copies in variables of the correct length
- can be maintained. At this writing, the code in src/mpi/attr makes
- use of WORDS_LITTLEENDIAN to provide the appropriate code for the most
- common cases.
- T*/
-/*TAttrOverview.tex
- *
- * The MPI standard allows `attributes`, essentially an '(integer,pointer)'
- * pair, to be attached to communicators, windows, and datatypes.
- * The integer is a `keyval`, which is allocated by a call (at the MPI level)
- * to 'MPI_Comm/Type/Win_create_keyval'. The pointer is the value of
- * the attribute.
- * Attributes are primarily intended for use by the user, for example, to save
- * information on a communicator, but can also be used to pass data to the
- * MPI implementation. For example, an attribute may be used to pass
- * Quality of Service information to an implementation to be used with
- * communication on a particular communicator.
- * To provide the most general access by the ADI to all attributes, the
- * ADI defines a collection of routines that are used by the implementation
- * of the MPI attribute routines (such as 'MPI_Comm_get_attr').
- * In addition, the MPI routines involving attributes will invoke the
- * corresponding 'hook' functions (e.g., 'MPID_Dev_comm_attr_set_hook')
- * should the device define them.
- *
- * Attributes on windows and datatypes are defined by MPI but not of
- * interest (as yet) to the device.
+/*****************************************************************************
+ * We use the following ordering of information in this file:
*
- * In addition, there are seven predefined attributes that the device must
- * supply to the implementation. This is accomplished through
- * data values that are part of the 'MPIR_Process' data block.
- * The predefined keyvals on 'MPI_COMM_WORLD' are\:
- *.vb
- * Keyval Related Module
- * MPI_APPNUM Dynamic
- * MPI_HOST Core
- * MPI_IO Core
- * MPI_LASTUSEDCODE Error
- * MPI_TAG_UB Communication
- * MPI_UNIVERSE_SIZE Dynamic
- * MPI_WTIME_IS_GLOBAL Timer
- *.ve
- * The values stored in the 'MPIR_Process' block are the actual values. For
- * example, the value of 'MPI_TAG_UB' is the integer value of the largest tag.
- * The
- * value of 'MPI_WTIME_IS_GLOBAL' is a '1' for true and '0' for false. Likely
- * values for 'MPI_IO' and 'MPI_HOST' are 'MPI_ANY_SOURCE' and 'MPI_PROC_NULL'
- * respectively.
- *
- T*/
-
-/* Include the attribute access routines that permit access to the
- attribute or its pointer, needed for cross-language access to attributes */
-#include "mpi_attr.h"
-
-/* Because Comm, Datatype, and File handles are all ints, and because
- attributes are otherwise identical between the three types, we
- only store generic copy and delete functions. This allows us to use
- common code for the attribute set, delete, and dup functions */
-/*E
- MPID_Copy_function - MPID Structure to hold an attribute copy function
-
- Notes:
- The appropriate element of this union is selected by using the language
- field of the 'keyval'.
-
- Because 'MPI_Comm', 'MPI_Win', and 'MPI_Datatype' are all 'int's in
- MPICH, we use a single C copy function rather than have separate
- ones for the Communicator, Window, and Datatype attributes.
-
- There are no corresponding typedefs for the Fortran functions. The
- F77 function corresponds to the Fortran 77 binding used in MPI-1 and the
- F90 function corresponds to the Fortran 90 binding used in MPI-2.
-
- Module:
- Attribute-DS
-
- E*/
-int
-MPIR_Attr_copy_c_proxy(
- MPI_Comm_copy_attr_function* user_function,
- int handle,
- int keyval,
- void* extra_state,
- MPIR_AttrType attrib_type,
- void* attrib,
- void** attrib_copy,
- int* flag
- );
-
-typedef struct MPID_Copy_function {
- int (*C_CopyFunction)( int, int, void *, void *, void *, int * );
- void (*F77_CopyFunction) ( MPI_Fint *, MPI_Fint *, MPI_Fint *, MPI_Fint *,
- MPI_Fint *, MPI_Fint *, MPI_Fint * );
- void (*F90_CopyFunction) ( MPI_Fint *, MPI_Fint *, MPI_Aint *, MPI_Aint *,
- MPI_Aint *, MPI_Fint *, MPI_Fint * );
- /* The generic lang-independent user_function and proxy will
- * replace the lang dependent copy funcs above
- * Currently the lang-indpendent funcs are used only for keyvals
- */
- MPI_Comm_copy_attr_function *user_function;
- MPID_Attr_copy_proxy *proxy;
- /* The C++ function is the same as the C function */
-} MPID_Copy_function;
-
-/*E
- MPID_Delete_function - MPID Structure to hold an attribute delete function
-
- Notes:
- The appropriate element of this union is selected by using the language
- field of the 'keyval'.
-
- Because 'MPI_Comm', 'MPI_Win', and 'MPI_Datatype' are all 'int's in
- MPICH, we use a single C delete function rather than have separate
- ones for the Communicator, Window, and Datatype attributes.
-
- There are no corresponding typedefs for the Fortran functions. The
- F77 function corresponds to the Fortran 77 binding used in MPI-1 and the
- F90 function corresponds to the Fortran 90 binding used in MPI-2.
-
- Module:
- Attribute-DS
-
- E*/
-int
-MPIR_Attr_delete_c_proxy(
- MPI_Comm_delete_attr_function* user_function,
- int handle,
- int keyval,
- MPIR_AttrType attrib_type,
- void* attrib,
- void* extra_state
- );
-
-typedef struct MPID_Delete_function {
- int (*C_DeleteFunction) ( int, int, void *, void * );
- void (*F77_DeleteFunction)( MPI_Fint *, MPI_Fint *, MPI_Fint *, MPI_Fint *,
- MPI_Fint * );
- void (*F90_DeleteFunction)( MPI_Fint *, MPI_Fint *, MPI_Aint *, MPI_Aint *,
- MPI_Fint * );
- /* The generic lang-independent user_function and proxy will
- * replace the lang dependent copy funcs above
- * Currently the lang-indpendent funcs are used only for keyvals
- */
- MPI_Comm_delete_attr_function *user_function;
- MPID_Attr_delete_proxy *proxy;
-} MPID_Delete_function;
-
-/*S
- MPID_Keyval - Structure of an MPID keyval
-
- Module:
- Attribute-DS
-
- S*/
-typedef struct MPID_Keyval {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPID_Object_kind kind;
- int was_freed;
- void *extra_state;
- MPID_Copy_function copyfn;
- MPID_Delete_function delfn;
- /* other, device-specific information */
-#ifdef MPID_DEV_KEYVAL_DECL
- MPID_DEV_KEYVAL_DECL
-#endif
-} MPID_Keyval;
-
-#define MPIR_Keyval_add_ref( _keyval ) \
- do { \
- MPIU_Object_add_ref( _keyval ); \
- } while(0)
-
-#define MPIR_Keyval_release_ref( _keyval, _inuse ) \
- do { \
- MPIU_Object_release_ref( _keyval, _inuse ); \
- } while(0)
-
-
-/* Attribute values in C/C++ are void * and in Fortran are ADDRESS_SIZED
- integers. Normally, these are the same size, but in at least one
- case, the address-sized integers was selected as longer than void *
- to work with the datatype code used in the I/O library. While this
- is really a limitation in the current Datatype implementation. */
-#ifdef USE_AINT_FOR_ATTRVAL
-typedef MPI_Aint MPID_AttrVal_t;
-#else
-typedef void * MPID_AttrVal_t;
-#endif
-
-/* Attributes need no ref count or handle, but since we want to use the
- common block allocator for them, we must provide those elements
-*/
-/*S
- MPID_Attribute - Structure of an MPID attribute
-
- Notes:
- Attributes don''t have 'ref_count's because they don''t have reference
- count semantics. That is, there are no shallow copies or duplicates
- of an attibute. An attribute is copied when the communicator that
- it is attached to is duplicated. Subsequent operations, such as
- 'MPI_Comm_attr_free', can change the attribute list for one of the
- communicators but not the other, making it impractical to keep the
- same list. (We could defer making the copy until the list is changed,
- but even then, there would be no reference count on the individual
- attributes.)
-
- A pointer to the keyval, rather than the (integer) keyval itself is
- used since there is no need within the attribute structure to make
- it any harder to find the keyval structure.
-
- The attribute value is a 'void *'. If 'sizeof(MPI_Fint)' > 'sizeof(void*)',
- then this must be changed (no such system has been encountered yet).
- For the Fortran 77 routines in the case where 'sizeof(MPI_Fint)' <
- 'sizeof(void*)', the high end of the 'void *' value is used. That is,
- we cast it to 'MPI_Fint *' and use that value.
-
- MPI defines three kinds of attributes (see MPI 2.1, Section 16.3, pages
- 487-488 (the standard says two, but there are really three, as discussed
- below). These are pointer-valued attributes and two types of integer-valued
- attributes.
- Pointer-valued attributes are used in C.
- Integer-valued attributes are used in Fortran. These are of type either
- INTEGER or INTEGER(KIND=MPI_ADDRESS_KIND).
-
- The predefined attributes are a combination of INTEGER and pointers.
-
- Module:
- Attribute-DS
-
- S*/
-typedef struct MPID_Attribute {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPID_Keyval *keyval; /* Keyval structure for this attribute */
-
- struct MPID_Attribute *next; /* Pointer to next in the list */
- MPIR_AttrType attrType; /* Type of the attribute */
- long pre_sentinal; /* Used to detect user errors in accessing
- the value */
- MPID_AttrVal_t value; /* Stored value. An Aint must be at least
- as large as an address - some builds
- may make an Aint larger than a void * */
- long post_sentinal; /* Like pre_sentinal */
- /* other, device-specific information */
-#ifdef MPID_DEV_ATTR_DECL
- MPID_DEV_ATTR_DECL
-#endif
-} MPID_Attribute;
-/* ------------------------------------------------------------------------- */
-
-/*---------------------------------------------------------------------------
- * Groups are *not* a major data structure in MPICH-2. They are provided
- * only because they are required for the group operations (e.g.,
- * MPI_Group_intersection) and for the scalable RMA synchronization
- *---------------------------------------------------------------------------*/
-/* This structure is used to implement the group operations such as
- MPI_Group_translate_ranks */
-typedef struct MPID_Group_pmap_t {
- int lpid; /* local process id, from VCONN */
- int next_lpid; /* Index of next lpid (in lpid order) */
- int flag; /* marker, used to implement group operations */
-} MPID_Group_pmap_t;
-
-/* Any changes in the MPID_Group structure must be made to the
- predefined value in MPID_Group_builtin for MPI_GROUP_EMPTY in
- src/mpi/group/grouputil.c */
-/*S
- MPID_Group - Description of the Group data structure
-
- The processes in the group of 'MPI_COMM_WORLD' have lpid values 0 to 'size'-1,
- where 'size' is the size of 'MPI_COMM_WORLD'. Processes created by
- 'MPI_Comm_spawn' or 'MPI_Comm_spawn_multiple' or added by 'MPI_Comm_attach'
- or
- 'MPI_Comm_connect'
- are numbered greater than 'size - 1' (on the calling process). See the
- discussion of LocalPID values.
-
- Note that when dynamic process creation is used, the pids are `not` unique
- across the universe of connected MPI processes. This is ok, as long as
- pids are interpreted `only` on the process that owns them.
-
- Only for MPI-1 are the lpid''s equal to the `global` pids. The local pids
- can be thought of as a reference not to the remote process itself, but
- how the remote process can be reached from this process. We may want to
- have a structure 'MPID_Lpid_t' that contains information on the remote
- process, such as (for TCP) the hostname, ip address (it may be different if
- multiple interfaces are supported; we may even want plural ip addresses for
- stripping communication), and port (or ports). For shared memory connected
- processes, it might have the address of a remote queue. The lpid number
- is an index into a table of 'MPID_Lpid_t'''s that contain this (device- and
- method-specific) information.
-
- Module:
- Group-DS
-
- S*/
-typedef struct MPID_Group {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- int size; /* Size of a group */
- int rank; /* rank of this process relative to this
- group */
- int idx_of_first_lpid;
- MPID_Group_pmap_t *lrank_to_lpid; /* Array mapping a local rank to local
- process number */
- int is_local_dense_monotonic; /* see NOTE-G1 */
-
- /* We may want some additional data for the RMA syncrhonization calls */
- /* Other, device-specific information */
-#ifdef MPID_DEV_GROUP_DECL
- MPID_DEV_GROUP_DECL
-#endif
-} MPID_Group;
-
-/* NOTE-G1: is_local_dense_monotonic will be true iff the group meets the
- * following criteria:
- * 1) the lpids are all in the range [0,size-1], i.e. a subset of comm world
- * 2) the pids are sequentially numbered in increasing order, without any gaps,
- * stride, or repetitions
+ * 1. Start with independent headers that do not have any
+ * dependencies on the rest of the MPICH implementation (e.g.,
+ * mpl, opa, mpi.h).
*
- * This additional information allows us to handle the common case (insofar as
- * group ops are common) for MPI_Group_translate_ranks where group2 is
- * group_of(MPI_COMM_WORLD), or some simple subset. This is an important use
- * case for many MPI tool libraries, such as Scalasca.
- */
-
-extern MPIU_Object_alloc_t MPID_Group_mem;
-/* Preallocated group objects */
-#define MPID_GROUP_N_BUILTIN 1
-extern MPID_Group MPID_Group_builtin[MPID_GROUP_N_BUILTIN];
-extern MPID_Group MPID_Group_direct[];
-
-/* Object for empty group */
-extern MPID_Group * const MPID_Group_empty;
-
-#define MPIR_Group_add_ref( _group ) \
- do { MPIU_Object_add_ref( _group ); } while (0)
-
-#define MPIR_Group_release_ref( _group, _inuse ) \
- do { MPIU_Object_release_ref( _group, _inuse ); } while (0)
-
-void MPIR_Group_setup_lpid_list( MPID_Group * );
-
-/* ------------------------------------------------------------------------- */
-
-/*E
- MPID_Comm_kind_t - Name the two types of communicators
- E*/
-typedef enum MPID_Comm_kind_t {
- MPID_INTRACOMM = 0,
- MPID_INTERCOMM = 1 } MPID_Comm_kind_t;
-
-/* ideally we could add these to MPID_Comm_kind_t, but there's too much existing
- * code that assumes that the only valid values are INTRACOMM or INTERCOMM */
-typedef enum MPID_Comm_hierarchy_kind_t {
- MPID_HIERARCHY_FLAT = 0, /* no hierarchy */
- MPID_HIERARCHY_PARENT = 1, /* has subcommunicators */
- MPID_HIERARCHY_NODE_ROOTS = 2, /* is the subcomm for node roots */
- MPID_HIERARCHY_NODE = 3, /* is the subcomm for a node */
- MPID_HIERARCHY_SIZE /* cardinality of this enum */
-} MPID_Comm_hierarchy_kind_t;
-/* Communicators */
-
-typedef enum {
- MPIR_COMM_MAP_DUP,
- MPIR_COMM_MAP_IRREGULAR
-} MPIR_Comm_map_type_t;
-
-/* direction of mapping: local to local, local to remote, remote to
- * local, remote to remote */
-typedef enum {
- MPIR_COMM_MAP_DIR_L2L,
- MPIR_COMM_MAP_DIR_L2R,
- MPIR_COMM_MAP_DIR_R2L,
- MPIR_COMM_MAP_DIR_R2R
-} MPIR_Comm_map_dir_t;
-
-typedef struct MPIR_Comm_map {
- MPIR_Comm_map_type_t type;
-
- struct MPID_Comm *src_comm;
-
- /* mapping direction for intercomms, which contain local and
- * remote groups */
- MPIR_Comm_map_dir_t dir;
-
- /* only valid for irregular map type */
- int src_mapping_size;
- int *src_mapping;
- int free_mapping; /* we allocated the mapping */
-
- struct MPIR_Comm_map *next;
-} MPIR_Comm_map_t;
-
-int MPIR_Comm_map_irregular(struct MPID_Comm *newcomm, struct MPID_Comm *src_comm,
- int *src_mapping, int src_mapping_size,
- MPIR_Comm_map_dir_t dir,
- MPIR_Comm_map_t **map);
-int MPIR_Comm_map_dup(struct MPID_Comm *newcomm, struct MPID_Comm *src_comm,
- MPIR_Comm_map_dir_t dir);
-int MPIR_Comm_map_free(struct MPID_Comm *comm);
-
-/*S
- MPID_Comm - Description of the Communicator data structure
-
- Notes:
- Note that the size and rank duplicate data in the groups that
- make up this communicator. These are used often enough that this
- optimization is valuable.
-
- This definition provides only a 16-bit integer for context id''s .
- This should be sufficient for most applications. However, extending
- this to a 32-bit (or longer) integer should be easy.
-
- There are two context ids. One is used for sending and one for
- receiving. In the case of an Intracommunicator, they are the same
- context id. They differ in the case of intercommunicators, where
- they may come from processes in different comm worlds (in the
- case of MPI-2 dynamic process intercomms).
-
- The virtual connection table is an explicit member of this structure.
- This contains the information used to contact a particular process,
- indexed by the rank relative to this communicator.
-
- Groups are allocated lazily. That is, the group pointers may be
- null, created only when needed by a routine such as 'MPI_Comm_group'.
- The local process ids needed to form the group are available within
- the virtual connection table.
- For intercommunicators, we may want to always have the groups. If not,
- we either need the 'local_group' or we need a virtual connection table
- corresponding to the 'local_group' (we may want this anyway to simplify
- the implementation of the intercommunicator collective routines).
-
- The pointer to the structure 'MPID_Collops' containing pointers to the
- collective
- routines allows an implementation to replace each routine on a
- routine-by-routine basis. By default, this pointer is null, as are the
- pointers within the structure. If either pointer is null, the implementation
- uses the generic provided implementation. This choice, rather than
- initializing the table with pointers to all of the collective routines,
- is made to reduce the space used in the communicators and to eliminate the
- need to include the implementation of all collective routines in all MPI
- executables, even if the routines are not used.
-
- The macro 'MPID_HAS_HETERO' may be defined by a device to indicate that
- the device supports MPI programs that must communicate between processes with
- different data representations (e.g., different sized integers or different
- byte orderings). If the device does need to define this value, it should
- be defined in the file 'mpidpre.h'.
-
- Please note that the local_size and remote_size fields can be confusing. For
- intracommunicators both fields are always equal to the size of the
- communicator. For intercommunicators local_size is equal to the size of
- local_group while remote_size is equal to the size of remote_group.
-
- Module:
- Communicator-DS
-
- Question:
- For fault tolerance, do we want to have a standard field for communicator
- health? For example, ok, failure detected, all (live) members of failed
- communicator have acked.
- S*/
-typedef struct MPID_Comm {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPID_Thread_mutex_t mutex;
- MPIU_Context_id_t context_id; /* Send context id. See notes */
- MPIU_Context_id_t recvcontext_id; /* Send context id. See notes */
- int remote_size; /* Value of MPI_Comm_(remote)_size */
- int rank; /* Value of MPI_Comm_rank */
- MPID_Attribute *attributes; /* List of attributes */
- int local_size; /* Value of MPI_Comm_size for local group */
- MPID_Group *local_group, /* Groups in communicator. */
- *remote_group; /* The local and remote groups are the
- same for intra communicators */
- MPID_Comm_kind_t comm_kind; /* MPID_INTRACOMM or MPID_INTERCOMM */
- char name[MPI_MAX_OBJECT_NAME]; /* Required for MPI-2 */
- MPID_Errhandler *errhandler; /* Pointer to the error handler structure */
- struct MPID_Comm *local_comm; /* Defined only for intercomms, holds
- an intracomm for the local group */
-
- MPID_Comm_hierarchy_kind_t hierarchy_kind; /* flat, parent, node, or node_roots */
- struct MPID_Comm *node_comm; /* Comm of processes in this comm that are on
- the same node as this process. */
- struct MPID_Comm *node_roots_comm; /* Comm of root processes for other nodes. */
- int *intranode_table; /* intranode_table[i] gives the rank in
- node_comm of rank i in this comm or -1 if i
- is not in this process' node_comm.
- It is of size 'local_size'. */
- int *internode_table; /* internode_table[i] gives the rank in
- node_roots_comm of rank i in this comm.
- It is of size 'local_size'. */
-
- int is_low_group; /* For intercomms only, this boolean is
- set for all members of one of the
- two groups of processes and clear for
- the other. It enables certain
- intercommunicator collective operations
- that wish to use half-duplex operations
- to implement a full-duplex operation */
- struct MPID_Comm *comm_next;/* Provides a chain through all active
- communicators */
- struct MPID_Collops *coll_fns; /* Pointer to a table of functions
- implementing the collective
- routines */
- struct MPID_TopoOps *topo_fns; /* Pointer to a table of functions
- implementting the topology routines */
- int next_sched_tag; /* used by the NBC schedule code to allocate tags */
-
- int revoked; /* Flag to track whether the communicator
- * has been revoked */
- MPID_Info *info; /* Hints to the communicator */
-
-#ifdef MPID_HAS_HETERO
- int is_hetero;
-#endif
-
-#if defined HAVE_LIBHCOLL
- hcoll_comm_priv_t hcoll_priv;
-#endif /* HAVE_LIBHCOLL */
-
- /* the mapper is temporarily filled out in order to allow the
- * device to setup its network addresses. it will be freed after
- * the device has initialized the comm. */
- MPIR_Comm_map_t *mapper_head;
- MPIR_Comm_map_t *mapper_tail;
-
- /* Other, device-specific information */
-#ifdef MPID_DEV_COMM_DECL
- MPID_DEV_COMM_DECL
-#endif
-} MPID_Comm;
-extern MPIU_Object_alloc_t MPID_Comm_mem;
-
-typedef struct MPID_Gpid {
-#ifdef MPID_DEV_GPID_DECL
- MPID_DEV_GPID_DECL
-#else
- int dummy; /* don't create an empty structure */
-#endif
-}MPID_Gpid;
-
-/* this function should not be called by normal code! */
-int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr);
-
-#define MPIR_Comm_add_ref(_comm) \
- do { MPIU_Object_add_ref((_comm)); } while (0)
-#define MPIR_Comm_release_ref( _comm, _inuse ) \
- do { MPIU_Object_release_ref( _comm, _inuse ); } while (0)
-
-
-/* Release a reference to a communicator. If there are no pending
- references, delete the communicator and recover all storage and
- context ids.
-
- This routine has been inlined because keeping it as a separate routine
- results in a >5% performance hit for the SQMR benchmark.
-*/
-#undef FUNCNAME
-#define FUNCNAME MPIR_Comm_release
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIR_Comm_release(MPID_Comm * comm_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
- int in_use;
-
- MPIR_Comm_release_ref(comm_ptr, &in_use);
- if (unlikely(!in_use)) {
- /* the following routine should only be called by this function and its
- * "_always" variant. */
- mpi_errno = MPIR_Comm_delete_internal(comm_ptr);
- /* not ERR_POPing here to permit simpler inlining. Our caller will
- * still report the error from the comm_delete level. */
- }
-
- return mpi_errno;
-}
-#undef FUNCNAME
-#undef FCNAME
-
-/* MPIR_Comm_release_always is the same as MPIR_Comm_release except it uses
- MPIR_Comm_release_ref_always instead.
-*/
-int MPIR_Comm_release_always(MPID_Comm *comm_ptr);
-
-/* applies the specified info chain to the specified communicator */
-int MPIR_Comm_apply_hints(MPID_Comm *comm_ptr, MPID_Info *info_ptr);
-
-/* Preallocated comm objects. There are 3: comm_world, comm_self, and
- a private (non-user accessible) dup of comm world that is provided
- if needed in MPI_Finalize. Having a separate version of comm_world
- avoids possible interference with User code */
-#define MPID_COMM_N_BUILTIN 3
-extern MPID_Comm MPID_Comm_builtin[MPID_COMM_N_BUILTIN];
-extern MPID_Comm MPID_Comm_direct[];
-/* This is the handle for the internal MPI_COMM_WORLD . The "2" at the end
- of the handle is 3-1 (e.g., the index in the builtin array) */
-#define MPIR_ICOMM_WORLD ((MPI_Comm)0x44000002)
-
-/* The following preprocessor macros provide bitfield access information for
- * context ID values. They follow a uniform naming pattern:
+ * 2. Next is forward declarations of MPIR structures (MPIR_Comm,
+ * MPIR_Win, etc.).
*
- * MPID_CONTEXT_foo_WIDTH - the width in bits of the field
- * MPID_CONTEXT_foo_MASK - A valid bit mask for bit-wise AND and OR operations
- * with exactly all of the bits in the field set.
- * MPID_CONTEXT_foo_SHIFT - The number of bits that the field should be shifted
- * rightwards to place it in the least significant bits
- * of the ID. There may still be higher order bits
- * from other fields, so the _MASK should be used first
- * if you want to reliably retrieve the exact value of
- * the field.
- */
-
-/* yields an rvalue that is the value of the field_name_ in the least significant bits */
-#define MPID_CONTEXT_READ_FIELD(field_name_,id_) \
- (((id_) & MPID_CONTEXT_##field_name_##_MASK) >> MPID_CONTEXT_##field_name_##_SHIFT)
-/* yields an rvalue that is the old_id_ with field_name_ set to field_val_ */
-#define MPID_CONTEXT_SET_FIELD(field_name_,old_id_,field_val_) \
- ((old_id_ & ~MPID_CONTEXT_##field_name_##_MASK) | ((field_val_) << MPID_CONTEXT_##field_name_##_SHIFT))
-
-/* Context suffixes for separating pt2pt and collective communication */
-#define MPID_CONTEXT_SUFFIX_WIDTH (1)
-#define MPID_CONTEXT_SUFFIX_SHIFT (0)
-#define MPID_CONTEXT_SUFFIX_MASK ((1 << MPID_CONTEXT_SUFFIX_WIDTH) - 1)
-#define MPID_CONTEXT_INTRA_PT2PT (0)
-#define MPID_CONTEXT_INTRA_COLL (1)
-#define MPID_CONTEXT_INTER_PT2PT (0)
-#define MPID_CONTEXT_INTER_COLL (1)
-
-/* Used to derive context IDs for sub-communicators from a parent communicator's
- context ID value. This field comes after the one bit suffix.
- values are shifted left by 1. */
-#define MPID_CONTEXT_SUBCOMM_WIDTH (2)
-#define MPID_CONTEXT_SUBCOMM_SHIFT (MPID_CONTEXT_SUFFIX_WIDTH + MPID_CONTEXT_SUFFIX_SHIFT)
-#define MPID_CONTEXT_SUBCOMM_MASK (((1 << MPID_CONTEXT_SUBCOMM_WIDTH) - 1) << MPID_CONTEXT_SUBCOMM_SHIFT)
-
-/* these values may be added/subtracted directly to/from an existing context ID
- * in order to determine the context ID of the child/parent */
-#define MPID_CONTEXT_PARENT_OFFSET (0 << MPID_CONTEXT_SUBCOMM_SHIFT)
-#define MPID_CONTEXT_INTRANODE_OFFSET (1 << MPID_CONTEXT_SUBCOMM_SHIFT)
-#define MPID_CONTEXT_INTERNODE_OFFSET (2 << MPID_CONTEXT_SUBCOMM_SHIFT)
-
-/* this field (IS_LOCALCOM) is used to derive a context ID for local
- * communicators of intercommunicators without communication */
-#define MPID_CONTEXT_IS_LOCALCOMM_WIDTH (1)
-#define MPID_CONTEXT_IS_LOCALCOMM_SHIFT (MPID_CONTEXT_SUBCOMM_SHIFT + MPID_CONTEXT_SUBCOMM_WIDTH)
-#define MPID_CONTEXT_IS_LOCALCOMM_MASK (((1 << MPID_CONTEXT_IS_LOCALCOMM_WIDTH) - 1) << MPID_CONTEXT_IS_LOCALCOMM_SHIFT)
-
-/* MPIR_MAX_CONTEXT_MASK is the number of ints that make up the bit vector that
- * describes the context ID prefix space.
+ * 3. After that we have device-independent headers (MPIR
+ * functionality that does not have any dependency on MPID).
*
- * The following must hold:
- * (num_bits_in_vector) <= (maximum_context_id_prefix)
- * which is the following in concrete terms:
- * MPIR_MAX_CONTEXT_MASK*MPIR_CONTEXT_INT_BITS <= 2**(MPIR_CONTEXT_ID_BITS - (MPID_CONTEXT_PREFIX_SHIFT + MPID_CONTEXT_DYNAMIC_PROC_WIDTH))
+ * 4. Next is the device "pre" header that defines device-level
+ * initial objects that would be used by the MPIR structures.
*
- * We currently always assume MPIR_CONTEXT_INT_BITS is 32, regardless of the
- * value of sizeof(int)*CHAR_BITS. We also make the assumption that CHAR_BITS==8.
+ * 5. Then comes the device-dependent MPIR functionality, with the
+ * actual definitions of structures, function prototypes, etc.
+ * This functionality can only rely on the device "pre"
+ * functionality.
*
- * For a 16-bit context id field and CHAR_BITS==8, this implies MPIR_MAX_CONTEXT_MASK <= 256
- */
-
-/* number of bits to shift right by in order to obtain the context ID prefix */
-#define MPID_CONTEXT_PREFIX_SHIFT (MPID_CONTEXT_IS_LOCALCOMM_SHIFT + MPID_CONTEXT_IS_LOCALCOMM_WIDTH)
-#define MPID_CONTEXT_PREFIX_WIDTH (MPIR_CONTEXT_ID_BITS - (MPID_CONTEXT_PREFIX_SHIFT + MPID_CONTEXT_DYNAMIC_PROC_WIDTH))
-#define MPID_CONTEXT_PREFIX_MASK (((1 << MPID_CONTEXT_PREFIX_WIDTH) - 1) << MPID_CONTEXT_PREFIX_SHIFT)
-
-#define MPID_CONTEXT_DYNAMIC_PROC_WIDTH (1) /* the upper half is reserved for dynamic procs */
-#define MPID_CONTEXT_DYNAMIC_PROC_SHIFT (MPIR_CONTEXT_ID_BITS - MPID_CONTEXT_DYNAMIC_PROC_WIDTH) /* the upper half is reserved for dynamic procs */
-#define MPID_CONTEXT_DYNAMIC_PROC_MASK (((1 << MPID_CONTEXT_DYNAMIC_PROC_WIDTH) - 1) << MPID_CONTEXT_DYNAMIC_PROC_SHIFT)
-
-/* should probably be (sizeof(int)*CHAR_BITS) once we make the code CHAR_BITS-clean */
-#define MPIR_CONTEXT_INT_BITS (32)
-#define MPIR_CONTEXT_ID_BITS (sizeof(MPIU_Context_id_t)*8) /* 8 --> CHAR_BITS eventually */
-#define MPIR_MAX_CONTEXT_MASK \
- ((1 << (MPIR_CONTEXT_ID_BITS - (MPID_CONTEXT_PREFIX_SHIFT + MPID_CONTEXT_DYNAMIC_PROC_WIDTH))) / MPIR_CONTEXT_INT_BITS)
-
-/* Utility routines. Where possible, these are kept in the source directory
- with the other comm routines (src/mpi/comm, in mpicomm.h). However,
- to create a new communicator after a spawn or connect-accept operation,
- the device may need to create a new contextid */
-int MPIR_Get_contextid_sparse(MPID_Comm *comm_ptr, MPIU_Context_id_t *context_id, int ignore_id);
-int MPIR_Get_contextid_sparse_group(MPID_Comm *comm_ptr, MPID_Group *group_ptr, int tag, MPIU_Context_id_t *context_id, int ignore_id);
-void MPIR_Free_contextid( MPIU_Context_id_t );
-
-/* ------------------------------------------------------------------------- */
-
-/* Requests */
-/* This currently defines a single structure type for all requests.
- Eventually, we may want a union type, as used in MPICH-1 */
-/* NOTE-R1: MPID_REQUEST_MPROBE signifies that this is a request created by
- * MPI_Mprobe or MPI_Improbe. Since we use MPI_Request objects as our
- * MPI_Message objects, we use this separate kind in order to provide stronger
- * error checking. Once a message (backed by a request) is promoted to a real
- * request by calling MPI_Mrecv/MPI_Imrecv, we actually modify the kind to be
- * MPID_REQUEST_RECV in order to keep completion logic as simple as possible. */
-/*E
- MPID_Request_kind - Kinds of MPI Requests
-
- Module:
- Request-DS
-
- E*/
-typedef enum MPID_Request_kind_t {
- MPID_REQUEST_UNDEFINED,
- MPID_REQUEST_SEND,
- MPID_REQUEST_RECV,
- MPID_PREQUEST_SEND,
- MPID_PREQUEST_RECV,
- MPID_UREQUEST,
- MPID_COLL_REQUEST,
- MPID_REQUEST_MPROBE, /* see NOTE-R1 */
- MPID_WIN_REQUEST,
- MPID_LAST_REQUEST_KIND
-#ifdef MPID_DEV_REQUEST_KIND_DECL
- , MPID_DEV_REQUEST_KIND_DECL
-#endif
-} MPID_Request_kind_t;
+ * 6. Finally, we'll add the device "post" header that is allowed to
+ * use anything from the MPIR layer.
+ *****************************************************************************/
-/* Typedefs for Fortran generalized requests */
-typedef void (MPIR_Grequest_f77_cancel_function)(void *, MPI_Fint*, MPI_Fint *);
-typedef void (MPIR_Grequest_f77_free_function)(void *, MPI_Fint *);
-typedef void (MPIR_Grequest_f77_query_function)(void *, MPI_Fint *, MPI_Fint *);
-/* vtable-ish structure holding generalized request function pointers and other
- * state. Saves ~48 bytes in pt2pt requests on many platforms. */
-struct MPID_Grequest_fns {
- MPI_Grequest_cancel_function *cancel_fn;
- MPI_Grequest_free_function *free_fn;
- MPI_Grequest_query_function *query_fn;
- MPIX_Grequest_poll_function *poll_fn;
- MPIX_Grequest_wait_function *wait_fn;
- void *grequest_extra_state;
- MPIX_Grequest_class greq_class;
- MPID_Lang_t greq_lang; /* language that defined
- the generalize req */
-};
+/*****************************************************************************/
+/*********************** PART 1: INDEPENDENT HEADERS *************************/
+/*****************************************************************************/
-#define MPID_Request_is_complete(req_) (MPID_cc_is_complete((req_)->cc_ptr))
-
-/*S
- MPID_Request - Description of the Request data structure
-
- Module:
- Request-DS
-
- Notes:
- If it is necessary to remember the MPI datatype, this information is
- saved within the device-specific fields provided by 'MPID_DEV_REQUEST_DECL'.
-
- Requests come in many flavors, as stored in the 'kind' field. It is
- expected that each kind of request will have its own structure type
- (e.g., 'MPID_Request_send_t') that extends the 'MPID_Request'.
-
- S*/
-typedef struct MPID_Request {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPID_Request_kind_t kind;
- /* pointer to the completion counter */
- /* This is necessary for the case when an operation is described by a
- list of requests */
- MPID_cc_t *cc_ptr;
- /* A comm is needed to find the proper error handler */
- MPID_Comm *comm;
- /* completion counter. Ensure cc and status are in the same cache
- line, assuming the cache line size is a multiple of 32 bytes
- and 32-bit integers */
- MPID_cc_t cc;
- /* Status is needed for wait/test/recv */
- MPI_Status status;
- /* Persistent requests have their own "real" requests. Receive requests
- have partnering send requests when src=dest. etc. */
- struct MPID_Request *partner_request;
-
- /* User-defined request support via a "vtable". Saves space in the already
- * bloated request for regular pt2pt and NBC requests. */
- struct MPID_Grequest_fns *greq_fns;
-
- struct MPIR_Sendq *dbg_next;
-
- /* Errflag for NBC requests. Not used by other requests. */
- MPIR_Errflag_t errflag;
-
- /* Notes about request_completed_cb:
- *
- * 1. The callback function is triggered when this requests
- * completion count reaches 0.
- *
- * 2. The callback function should be nonblocking.
- *
- * 3. The callback function should not poke the progress engine,
- * or call any function that pokes the progress engine.
- *
- * 4. The callback function can complete other requests, thus
- * calling those requests' callback functions. However, the
- * recursion depth of request completion function is limited.
- * If we ever need deeper recurisve calls, we need to change
- * to an iterative design instead of a recursive design for
- * request completion.
- *
- * 5. In multithreaded programs, since the callback function is
- * nonblocking and never calls the progress engine, it would
- * never yield the lock to other threads. So the recursion
- * should be multithreading-safe.
- */
- int (*request_completed_cb)(struct MPID_Request *);
-
- /* Other, device-specific information */
-#ifdef MPID_DEV_REQUEST_DECL
- MPID_DEV_REQUEST_DECL
+/* if we are defining this, we must define it before including mpl.h */
+#if defined(MPICH_DEBUG_MEMINIT)
+#define MPL_VG_ENABLED 1
#endif
-} MPID_Request ATTRIBUTE((__aligned__(32)));
-
-extern MPIU_Object_alloc_t MPID_Request_mem;
-/* Preallocated request objects */
-extern MPID_Request MPID_Request_direct[];
-
-#define MPIR_Request_add_ref( _req ) \
- do { MPIU_Object_add_ref( _req ); } while (0)
-
-#define MPIR_Request_release_ref( _req, _inuse ) \
- do { MPIU_Object_release_ref( _req, _inuse ); } while (0)
-
-/* These macros allow us to implement a sendq when debugger support is
- selected. As there is extra overhead for this, we only do this
- when specifically requested
-*/
-#ifdef HAVE_DEBUGGER_SUPPORT
-void MPIR_WaitForDebugger( void );
-void MPIR_DebuggerSetAborting( const char * );
-void MPIR_Sendq_remember(MPID_Request *, int, int, int );
-void MPIR_Sendq_forget(MPID_Request *);
-void MPIR_CommL_remember( MPID_Comm * );
-void MPIR_CommL_forget( MPID_Comm * );
-#define MPIR_SENDQ_REMEMBER(_a,_b,_c,_d) MPIR_Sendq_remember(_a,_b,_c,_d)
-#define MPIR_SENDQ_FORGET(_a) MPIR_Sendq_forget(_a)
-#define MPIR_COMML_REMEMBER(_a) MPIR_CommL_remember( _a )
-#define MPIR_COMML_FORGET(_a) MPIR_CommL_forget( _a )
-#else
-#define MPIR_SENDQ_REMEMBER(a,b,c,d)
-#define MPIR_SENDQ_FORGET(a)
-#define MPIR_COMML_REMEMBER(_a)
-#define MPIR_COMML_FORGET(_a)
-#endif
+#include "mpl.h"
+#include "opa_primitives.h"
+#include "mpi.h"
-/* must come after MPID_Comm is declared/defined */
-int MPIR_Get_contextid_nonblock(MPID_Comm *comm_ptr, MPID_Comm *newcommp, MPID_Request **req);
-int MPIR_Get_intercomm_contextid_nonblock(MPID_Comm *comm_ptr, MPID_Comm *newcommp, MPID_Request **req);
-/* ------------------------------------------------------------------------- */
-/* Prototypes and definitions for the node ID code. This is used to support
- hierarchical collectives in a (mostly) device-independent way. */
-#if defined(MPID_USE_NODE_IDS)
-/* MPID_Node_id_t is a signed integer type defined by the device in mpidpre.h. */
-int MPID_Get_node_id(MPID_Comm *comm, int rank, MPID_Node_id_t *id_p);
-int MPID_Get_max_node_id(MPID_Comm *comm, MPID_Node_id_t *max_id_p);
-#endif
+/*****************************************************************************/
+/*********************** PART 2: FORWARD DECLARATION *************************/
+/*****************************************************************************/
-/* ------------------------------------------------------------------------- */
-/*S
- MPID_Progress_state - object to hold progress state when using the blocking
- progress routines.
+struct MPIR_Request;
+typedef struct MPIR_Request MPIR_Request;
- Module:
- Misc
+struct MPIR_Comm;
+typedef struct MPIR_Comm MPIR_Comm;
- Notes:
- The device must define MPID_PROGRESS_STATE_DECL. It should include any state
- that needs to be maintained between calls to MPID_Progress_{start,wait,end}.
- S*/
-typedef struct MPID_Progress_state
-{
- MPID_PROGRESS_STATE_DECL
-}
-MPID_Progress_state;
-/* ------------------------------------------------------------------------- */
+struct MPIR_Datatype;
+/* FIXME: waiting for Wes' patch revert to fix this */
+/* typedef struct MPIR_Datatype MPIR_Datatype; */
-/* ------------------------------------------------------------------------- */
-/* end of mpirma.h (in src/mpi/rma?) */
-/* ------------------------------------------------------------------------- */
+struct MPIR_Win;
+typedef struct MPIR_Win MPIR_Win;
-/*S
- MPID_Win - Description of the Window Object data structure.
+struct MPIR_Info;
+typedef struct MPIR_Info MPIR_Info;
- Module:
- Win-DS
+struct MPIR_Group;
+typedef struct MPIR_Group MPIR_Group;
- Notes:
- The following 3 keyvals are defined for attributes on all MPI
- Window objects\:
-.vb
- MPI_WIN_SIZE
- MPI_WIN_BASE
- MPI_WIN_DISP_UNIT
-.ve
- These correspond to the values in 'length', 'start_address', and
- 'disp_unit'.
+struct MPIR_Topology;
+typedef struct MPIR_Topology MPIR_Topology;
- The communicator in the window is the same communicator that the user
- provided to 'MPI_Win_create' (not a dup). However, each intracommunicator
- has a special context id that may be used if MPI communication is used
- by the implementation to implement the RMA operations.
- There is no separate window group; the group of the communicator should be
- used.
+/*****************************************************************************/
+/******************* PART 3: DEVICE INDEPENDENT HEADERS **********************/
+/*****************************************************************************/
- Question:
- Should a 'MPID_Win' be defined after 'MPID_Segment' in case the device
- wants to
- store a queue of pending put/get operations, described with 'MPID_Segment'
- (or 'MPID_Request')s?
+#include "mpir_misc.h"
+#include "mpir_dbg.h"
+#include "mpir_objects.h"
+#include "mpir_strerror.h"
+#include "mpir_type_defs.h"
+#include "mpir_assert.h"
+#include "mpir_pointers.h"
+#include "mpir_refcount.h"
+#include "mpir_mem.h"
+#include "mpir_info.h"
+#include "mpir_errhandler.h"
+#include "mpir_attr_generic.h"
+#include "mpir_contextid.h"
+#include "mpir_status.h"
+#include "mpir_debugger.h"
+#include "mpir_op.h"
+#include "mpir_topo.h"
+#include "mpir_tags.h"
+#include "mpir_pt2pt.h"
+#include "mpir_ext.h"
- S*/
-typedef struct MPID_Win {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPID_Thread_mutex_t mutex;
- MPID_Errhandler *errhandler; /* Pointer to the error handler structure */
- void *base;
- MPI_Aint size;
- int disp_unit; /* Displacement unit of *local* window */
- MPID_Attribute *attributes;
- MPID_Comm *comm_ptr; /* Pointer to comm of window (dup) */
-#ifdef USE_THREADED_WINDOW_CODE
- /* These were causing compilation errors. We need to figure out how to
- integrate threads into MPICH before including these fields. */
- /* FIXME: The test here should be within a test for threaded support */
-#ifdef HAVE_PTHREAD_H
- pthread_t wait_thread_id; /* id of thread handling MPI_Win_wait */
- pthread_t passive_target_thread_id; /* thread for passive target RMA */
-#elif defined(HAVE_WINTHREADS)
- HANDLE wait_thread_id;
- HANDLE passive_target_thread_id;
-#endif
+#ifdef HAVE_CXX_BINDING
+#include "mpii_cxxinterface.h"
#endif
- /* These are COPIES of the values so that addresses to them
- can be returned as attributes. They are initialized by the
- MPI_Win_get_attr function.
-
- These values are constant for the lifetime of the window, so
- this is thread-safe.
- */
- int copyDispUnit;
- MPI_Aint copySize;
-
- char name[MPI_MAX_OBJECT_NAME];
- MPIR_Win_flavor_t create_flavor;
- MPIR_Win_model_t model;
- MPIR_Win_flavor_t copyCreateFlavor;
- MPIR_Win_model_t copyModel;
-
- /* Other, device-specific information */
-#ifdef MPID_DEV_WIN_DECL
- MPID_DEV_WIN_DECL
+#ifdef HAVE_FORTRAN_BINDING
+#include "mpii_f77interface.h"
#endif
-} MPID_Win;
-extern MPIU_Object_alloc_t MPID_Win_mem;
-/* Preallocated win objects */
-extern MPID_Win MPID_Win_direct[];
-
-/* ------------------------------------------------------------------------- */
-/* also in mpirma.h ?*/
-/* ------------------------------------------------------------------------- */
-
-/*
- * Good Memory (may be required for passive target operations on MPI_Win)
- */
-/*@
- MPID_Alloc_mem - Allocate memory suitable for passive target RMA operations
- Input Parameter:
-+ size - Number of types to allocate.
-- info - Info object
+/*****************************************************************************/
+/********************** PART 4: DEVICE PRE DECLARATION ***********************/
+/*****************************************************************************/
- Return value:
- Pointer to the allocated memory. If the memory is not available,
- returns null.
-
- Notes:
- This routine is used to implement 'MPI_Alloc_mem'. It is for that reason
- that there is no communicator argument.
-
- This memory may `only` be freed with 'MPID_Free_mem'.
-
- This is a `local`, not a collective operation. It functions more like a
- good form of 'malloc' than collective shared-memory allocators such as
- the 'shmalloc' found on SGI systems.
-
- Implementations of this routine may wish to use 'MPID_Memory_register'.
- However, this routine has slighly different requirements, so a separate
- entry point is provided.
-
- Question:
- Since this takes an info object, should there be an error routine in the
- case that the info object contains an error?
-
- Module:
- Win
- @*/
-void *MPID_Alloc_mem( size_t size, MPID_Info *info );
-
-/*@
- MPID_Free_mem - Frees memory allocated with 'MPID_Alloc_mem'
-
- Input Parameter:
-. ptr - Pointer to memory allocated by 'MPID_Alloc_mem'.
-
- Return value:
- 'MPI_SUCCESS' if memory was successfully freed; an MPI error code otherwise.
-
- Notes:
- The return value is provided because it may not be easy to validate the
- value of 'ptr' without attempting to free the memory.
-
- Module:
- Win
- @*/
-int MPID_Free_mem( void *ptr );
-
-/*@
- MPID_Mem_was_alloced - Return true if this memory was allocated with
- 'MPID_Alloc_mem'
-
- Input Parameters:
-+ ptr - Address of memory
-- size - Size of reqion in bytes.
+#include "mpidpre.h"
- Return value:
- True if the memory was allocated with 'MPID_Alloc_mem', false otherwise.
- Notes:
- This routine may be needed by 'MPI_Win_create' to ensure that the memory
- for passive target RMA operations was allocated with 'MPI_Mem_alloc'.
- This may be used, for example, for ensuring that memory used with
- passive target operations was allocated with 'MPID_Alloc_mem'.
+/*****************************************************************************/
+/********************* PART 5: DEVICE DEPENDENT HEADERS **********************/
+/*****************************************************************************/
+
+#include "mpir_thread.h"
+#include "mpir_attr.h"
+#include "mpir_group.h"
+#include "mpir_comm.h"
+#include "mpir_request.h"
+#include "mpir_win.h"
+#include "mpir_coll.h"
+#include "mpir_func.h"
+#include "mpir_err.h"
+#include "mpir_datatype.h"
+#include "mpir_nbc.h"
+#include "mpir_process.h"
+#include "mpir_cvars.h"
+#include "mpir_misc_post.h"
+#include "mpit.h"
+#include "mpir_handlemem.h"
- Module:
- Win
- @*/
-int MPID_Mem_was_alloced( void *ptr ); /* brad : this isn't used or implemented anywhere */
+/*****************************************************************************/
+/******************** PART 6: DEVICE "POST" FUNCTIONALITY ********************/
+/*****************************************************************************/
-/* ------------------------------------------------------------------------- */
-/* end of also in mpirma.h ? */
-/* ------------------------------------------------------------------------- */
-
-/* ------------------------------------------------------------------------- */
-/* Reduction and accumulate operations */
-/*E
- MPID_Op_kind - Enumerates types of MPI_Op types
-
- Notes:
- These are needed for implementing 'MPI_Accumulate', since only predefined
- operations are allowed for that operation.
-
- A gap in the enum values was made allow additional predefined operations
- to be inserted. This might include future additions to MPI or experimental
- extensions (such as a Read-Modify-Write operation).
-
- Module:
- Collective-DS
- E*/
-typedef enum MPID_Op_kind { MPID_OP_NULL=0, MPID_OP_MAX=1, MPID_OP_MIN=2,
- MPID_OP_SUM=3, MPID_OP_PROD=4,
- MPID_OP_LAND=5, MPID_OP_BAND=6, MPID_OP_LOR=7, MPID_OP_BOR=8,
- MPID_OP_LXOR=9, MPID_OP_BXOR=10, MPID_OP_MAXLOC=11,
- MPID_OP_MINLOC=12, MPID_OP_REPLACE=13,
- MPID_OP_NO_OP=14,
- MPID_OP_USER_NONCOMMUTE=32, MPID_OP_USER=33 }
- MPID_Op_kind;
-
-/*S
- MPID_User_function - Definition of a user function for MPI_Op types.
-
- Notes:
- This includes a 'const' to make clear which is the 'in' argument and
- which the 'inout' argument, and to indicate that the 'count' and 'datatype'
- arguments are unchanged (they are addresses in an attempt to allow
- interoperation with Fortran). It includes 'restrict' to emphasize that
- no overlapping operations are allowed.
-
- We need to include a Fortran version, since those arguments will
- have type 'MPI_Fint *' instead. We also need to add a test to the
- test suite for this case; in fact, we need tests for each of the handle
- types to ensure that the transfered handle works correctly.
-
- This is part of the collective module because user-defined operations
- are valid only for the collective computation routines and not for
- RMA accumulate.
-
- Yes, the 'restrict' is in the correct location. C compilers that
- support 'restrict' should be able to generate code that is as good as a
- Fortran compiler would for these functions.
-
- We should note on the manual pages for user-defined operations that
- 'restrict' should be used when available, and that a cast may be
- required when passing such a function to 'MPI_Op_create'.
-
- Question:
- Should each of these function types have an associated typedef?
-
- Should there be a C++ function here?
-
- Module:
- Collective-DS
- S*/
-typedef union MPID_User_function {
- void (*c_function) ( const void *, void *,
- const int *, const MPI_Datatype * );
- void (*f77_function) ( const void *, void *,
- const MPI_Fint *, const MPI_Fint * );
-} MPID_User_function;
-/* FIXME: Should there be "restrict" in the definitions above, e.g.,
- (*c_function)( const void restrict * , void restrict *, ... )? */
-
-/*S
- MPID_Op - MPI_Op structure
-
- Notes:
- All of the predefined functions are commutative. Only user functions may
- be noncummutative, so there are two separate op types for commutative and
- non-commutative user-defined operations.
-
- Operations do not require reference counts because there are no nonblocking
- operations that accept user-defined operations. Thus, there is no way that
- a valid program can free an 'MPI_Op' while it is in use.
-
- Module:
- Collective-DS
- S*/
-typedef struct MPID_Op {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPID_Op_kind kind;
- MPID_Lang_t language;
- MPID_User_function function;
- } MPID_Op;
-#define MPID_OP_N_BUILTIN 15
-extern MPID_Op MPID_Op_builtin[MPID_OP_N_BUILTIN];
-extern MPID_Op MPID_Op_direct[];
-extern MPIU_Object_alloc_t MPID_Op_mem;
-
-#define MPIR_Op_add_ref(_op) \
- do { MPIU_Object_add_ref(_op); } while (0)
-#define MPIR_Op_release_ref( _op, _inuse ) \
- do { MPIU_Object_release_ref( _op, _inuse ); } while (0)
-
-/* release and free-if-not-in-use helper */
-#define MPIR_Op_release(op_p_) \
- do { \
- int in_use_; \
- MPIR_Op_release_ref((op_p_), &in_use_); \
- if (!in_use_) { \
- MPIU_Handle_obj_free(&MPID_Op_mem, (op_p_)); \
- } \
- } while (0)
-
-/* ------------------------------------------------------------------------- */
-
-/* ------------------------------------------------------------------------- */
-/* mpicoll.h (in src/mpi/coll?) */
-/* ------------------------------------------------------------------------- */
-
-/* Collective operations */
-typedef struct MPID_Collops {
- int ref_count; /* Supports lazy copies */
- /* Contains pointers to the functions for the MPI collectives */
- int (*Barrier) (MPID_Comm *, MPIR_Errflag_t *);
- int (*Bcast) (void*, int, MPI_Datatype, int, MPID_Comm *, MPIR_Errflag_t *);
- int (*Gather) (const void*, int, MPI_Datatype, void*, int, MPI_Datatype,
- int, MPID_Comm *, MPIR_Errflag_t *);
- int (*Gatherv) (const void*, int, MPI_Datatype, void*, const int *, const int *,
- MPI_Datatype, int, MPID_Comm *, MPIR_Errflag_t *);
- int (*Scatter) (const void*, int, MPI_Datatype, void*, int, MPI_Datatype,
- int, MPID_Comm *, MPIR_Errflag_t *);
- int (*Scatterv) (const void*, const int *, const int *, MPI_Datatype,
- void*, int, MPI_Datatype, int, MPID_Comm *, MPIR_Errflag_t *);
- int (*Allgather) (const void*, int, MPI_Datatype, void*, int,
- MPI_Datatype, MPID_Comm *, MPIR_Errflag_t *);
- int (*Allgatherv) (const void*, int, MPI_Datatype, void*, const int *,
- const int *, MPI_Datatype, MPID_Comm *, MPIR_Errflag_t *);
- int (*Alltoall) (const void*, int, MPI_Datatype, void*, int, MPI_Datatype,
- MPID_Comm *, MPIR_Errflag_t *);
- int (*Alltoallv) (const void*, const int *, const int *, MPI_Datatype,
- void*, const int *, const int *, MPI_Datatype, MPID_Comm *,
- MPIR_Errflag_t *);
- int (*Alltoallw) (const void*, const int *, const int *, const MPI_Datatype *, void*,
- const int *, const int *, const MPI_Datatype *, MPID_Comm *, MPIR_Errflag_t *);
- int (*Reduce) (const void*, void*, int, MPI_Datatype, MPI_Op, int,
- MPID_Comm *, MPIR_Errflag_t *);
- int (*Allreduce) (const void*, void*, int, MPI_Datatype, MPI_Op,
- MPID_Comm *, MPIR_Errflag_t *);
- int (*Reduce_scatter) (const void*, void*, const int *, MPI_Datatype, MPI_Op,
- MPID_Comm *, MPIR_Errflag_t *);
- int (*Scan) (const void*, void*, int, MPI_Datatype, MPI_Op, MPID_Comm *, MPIR_Errflag_t * );
- int (*Exscan) (const void*, void*, int, MPI_Datatype, MPI_Op, MPID_Comm *, MPIR_Errflag_t * );
- int (*Reduce_scatter_block) (const void*, void*, int, MPI_Datatype, MPI_Op,
- MPID_Comm *, MPIR_Errflag_t *);
-
- /* MPI-3 nonblocking collectives */
- int (*Ibarrier_sched)(MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ibarrier_req)(MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ibcast_sched)(void *buffer, int count, MPI_Datatype datatype, int root,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ibcast_req)(void *buffer, int count, MPI_Datatype datatype, int root,
- MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Igather_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
- MPID_Sched_t s);
- int (*Igather_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
- MPID_Request **request);
- int (*Igatherv_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Igatherv_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
- MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iscatter_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
- MPID_Sched_t s);
- int (*Iscatter_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
- MPID_Request **request);
- int (*Iscatterv_sched)(const void *sendbuf, const int *sendcounts, const int *displs,
- MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iscatterv_req)(const void *sendbuf, const int *sendcounts, const int *displs,
- MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iallgather_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Sched_t s);
- int (*Iallgather_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Request **request);
- int (*Iallgatherv_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- const int *recvcounts, const int *displs, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iallgatherv_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- const int *recvcounts, const int *displs, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPID_Request ** request);
- int (*Ialltoall_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Sched_t s);
- int (*Ialltoall_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Request **request);
- int (*Ialltoallv_sched)(const void *sendbuf, const int *sendcounts, const int *sdispls,
- MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
- const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Sched_t s);
- int (*Ialltoallv_req)(const void *sendbuf, const int *sendcounts, const int *sdispls,
- MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
- const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Request **request);
- int (*Ialltoallw_sched)(const void *sendbuf, const int *sendcounts, const int *sdispls,
- const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts,
- const int *rdispls, const MPI_Datatype *recvtypes,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ialltoallw_req)(const void *sendbuf, const int *sendcounts, const int *sdispls,
- const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts,
- const int *rdispls, const MPI_Datatype *recvtypes,
- MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ireduce_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
- int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ireduce_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
- int root, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iallreduce_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iallreduce_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ireduce_scatter_sched)(const void *sendbuf, void *recvbuf, const int *recvcounts,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ireduce_scatter_req)(const void *sendbuf, void *recvbuf, const int *recvcounts,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ireduce_scatter_block_sched)(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Sched_t s);
- int (*Ireduce_scatter_block_req)(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Request **request);
- int (*Iscan_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iscan_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iexscan_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iexscan_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPID_Request **request);
-
- struct MPID_Collops *prev_coll_fns; /* when overriding this table, set this to point to the old table */
-
- /* MPI-3 neighborhood collectives (blocking & nonblocking) */
- int (*Neighbor_allgather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr);
- int (*Neighbor_allgatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr);
- int (*Neighbor_alltoall)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr);
- int (*Neighbor_alltoallv)(const void *sendbuf, const int sendcounts[], const int sdispls[],
- MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
- const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr);
- int (*Neighbor_alltoallw)(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
- const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
- MPID_Comm *comm_ptr);
- int (*Ineighbor_allgather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ineighbor_allgatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ineighbor_alltoall)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ineighbor_alltoallv)(const void *sendbuf, const int sendcounts[], const int sdispls[],
- MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
- const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Sched_t s);
- int (*Ineighbor_alltoallw)(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
- const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
- MPID_Comm *comm_ptr, MPID_Sched_t s);
-} MPID_Collops;
-
-#define MPIR_BARRIER_TAG 1
-/* ------------------------------------------------------------------------- */
-/* end of mpicoll.h (in src/mpi/coll? */
-/* ------------------------------------------------------------------------- */
-
-/* ------------------------------------------------------------------------- */
-/* mpitopo.h (in src/mpi/topo? */
-/*
- * The following struture allows the device detailed control over the
- * functions that are used to implement the topology routines. If either
- * the pointer to this structure is null or any individual entry is null,
- * the default function is used (this follows exactly the same rules as the
- * collective operations, provided in the MPID_Collops structure).
- */
-/* ------------------------------------------------------------------------- */
-
-typedef struct MPID_TopoOps {
- int (*cartCreate)( const MPID_Comm *, int, const int[], const int [],
- int, MPI_Comm * );
- int (*cartMap) ( const MPID_Comm *, int, const int[], const int [],
- int * );
- int (*graphCreate)( const MPID_Comm *, int, const int[], const int [],
- int, MPI_Comm * );
- int (*graphMap) ( const MPID_Comm *, int, const int[], const int[],
- int * );
-} MPID_TopoOps;
-/* ------------------------------------------------------------------------- */
-/* end of mpitopo.h (in src/mpi/topo? */
-/* ------------------------------------------------------------------------- */
-
-
-typedef struct MPID_CommOps {
- int (*split_type)(MPID_Comm *, int, int, MPID_Info *, MPID_Comm **);
-} MPID_CommOps;
-extern struct MPID_CommOps *MPID_Comm_fns; /* Communicator creation functions */
-
-
-/* Per process data */
-typedef enum MPIR_MPI_State_t {
- MPICH_PRE_INIT=0,
- MPICH_IN_INIT,
- MPICH_POST_INIT,
- MPICH_POST_FINALIZED
-} MPIR_MPI_State_t;
-
-typedef struct PreDefined_attrs {
- int appnum; /* Application number provided by mpiexec (MPI-2) */
- int host; /* host */
- int io; /* standard io allowed */
- int lastusedcode; /* last used error code (MPI-2) */
- int tag_ub; /* Maximum message tag */
- int universe; /* Universe size from mpiexec (MPI-2) */
- int wtime_is_global; /* Wtime is global over processes in COMM_WORLD */
-} PreDefined_attrs;
-
-struct MPID_Datatype;
-
-typedef struct MPICH_PerProcess_t {
- OPA_int_t mpich_state; /* State of MPICH. Use OPA_int_t to make MPI_Initialized() etc.
- thread-safe per MPI-3.1. See MPI-Forum ticket 357 */
- int do_error_checks; /* runtime error check control */
- struct MPID_Comm *comm_world; /* Easy access to comm_world for
- error handler */
- struct MPID_Comm *comm_self; /* Easy access to comm_self */
- struct MPID_Comm *comm_parent; /* Easy access to comm_parent */
- struct MPID_Comm *icomm_world; /* An internal version of comm_world
- that is separate from user's
- versions */
- PreDefined_attrs attrs; /* Predefined attribute values */
- int tagged_coll_mask; /* Tag space mask for tagged collectives */
-
- /* The topology routines dimsCreate is independent of any communicator.
- If this pointer is null, the default routine is used */
- int (*dimsCreate)( int, int, int *);
-
- /* Attribute dup functions. Here for lazy initialization */
- int (*attr_dup)( int, MPID_Attribute *, MPID_Attribute ** );
- int (*attr_free)( int, MPID_Attribute ** );
- /* There is no win_attr_dup function because there can be no MPI_Win_dup
- function */
- /* Routine to get the messages corresponding to dynamically created
- error messages */
- const char *(*errcode_to_string)( int );
-#ifdef HAVE_CXX_BINDING
- /* Routines to call C++ functions from the C implementation of the
- MPI reduction and attribute routines */
- void (*cxx_call_op_fn)(const void *, void *, int, MPI_Datatype,
- MPI_User_function * );
- /* Error handling functions. As for the attribute functions,
- we pass the integer file/comm/win, the address of the error code,
- and the C function to call (itself a function defined by the
- C++ interface and exported to C). The first argument is used
- to specify the kind (comm,file,win) */
- void (*cxx_call_errfn) ( int, int *, int *, void (*)(void) );
-#endif /* HAVE_CXX_BINDING */
-} MPICH_PerProcess_t;
-extern MPICH_PerProcess_t MPIR_Process;
-
-/* ------------------------------------------------------------------------- */
-/* In MPICH, each function has an "enter" and "exit" macro. These can be
- * used to add various features to each function at compile time, or they
- * can be set to empty to provide the fastest possible production version.
- *
- * There are at this time three choices of features (beyond the empty choice)
- * 1. timing (controlled by macros in mpitimerimpl.h)
- * These collect data on when each function began and finished; the
- * resulting data can be displayed using special programs
- * 2. Debug logging (selected with --enable-g=log)
- * Invokes MPIU_DBG_MSG at the entry and exit for each routine
- * 3. Additional memory validation of the memory arena (--enable-g=memarena)
- */
-/* ------------------------------------------------------------------------- */
-/* allow the timing module the opportunity to define the macros */
-#include "mpifunc.h"
-#if !defined(NEEDS_FUNC_ENTER_EXIT_DEFS)
- /* If no timing choice is selected, this sets the entry/exit macros
- to empty */
-# include "mpitimerimpl.h"
-#endif
-
-#ifdef NEEDS_FUNC_ENTER_EXIT_DEFS
-/* mpich layer definitions */
-#define MPID_MPI_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_FRONT(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_FRONT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BACK(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BOTH(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BACK(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BOTH(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_COLL_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_COLL_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_RMA_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_RMA_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_INIT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_INIT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_FINALIZE_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_FINALIZE_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-
-/* device layer definitions */
-#define MPIDI_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER_FRONT(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT_FRONT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BACK(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BOTH(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BACK(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BOTH(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_COLL_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_COLL_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_RMA_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_RMA_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_INIT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_INIT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_FINALIZE_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_FINALIZE_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-
-/* evaporate the timing macros since timing is not selected */
-#define MPIU_Timer_init(rank, size)
-#define MPIU_Timer_finalize()
-#endif /* NEEDS_FUNC_ENTER_EXIT_DEFS */
-
-/* Definitions for error handling and reporting */
-#include "mpierror.h"
-#include "mpierrs.h"
-
-/* FIXME: This routine is only used within mpi/src/err/errutil.c. We
- * may not want to export it. */
-void MPIR_Err_print_stack(FILE *, int);
-
-/* ------------------------------------------------------------------------- */
-
-/* FIXME: Move these to the communicator block; make sure that all
- objects have such hooks */
-#ifndef HAVE_DEV_COMM_HOOK
-#define MPID_Dev_comm_create_hook( a ) MPI_SUCCESS
-#define MPID_Dev_comm_destroy_hook( a ) MPI_SUCCESS
-#endif
-
-/* ------------------------------------------------------------------------- */
-/* FIXME: What is the scope of these functions? Can they be moved into
- src/mpi/pt2pt? */
-/* ------------------------------------------------------------------------- */
-
-
-/* MPI_Status manipulation macros */
-#define MPIR_BITS_IN_INT (8 * SIZEOF_INT)
-
-/* We use bits from the "count_lo" and "count_hi_and_cancelled" fields
- * to represent the 'count' and 'cancelled' objects. The LSB of the
- * "count_hi_and_cancelled" field represents the 'cancelled' object.
- * The 'count' object is split between the "count_lo" and
- * "count_hi_and_cancelled" fields, with the lower order bits going
- * into the "count_lo" field, and the higher order bits goin into the
- * "count_hi_and_cancelled" field. This gives us 2N-1 bits for the
- * 'count' object, where N is the size of int. However, the value
- * returned to the user is bounded by the definition on MPI_Count. */
-/* NOTE: The below code assumes that the count value is never
- * negative. For negative values, right-shifting can have weird
- * implementation specific consequences. */
-#define MPIR_STATUS_SET_COUNT(status_, count_) \
- { \
- (status_).count_lo = ((int) count_); \
- (status_).count_hi_and_cancelled &= 1; \
- (status_).count_hi_and_cancelled |= (int) ((MPIR_Ucount) count_ >> MPIR_BITS_IN_INT << 1); \
- }
-
-#define MPIR_STATUS_GET_COUNT(status_) \
- ((MPI_Count) ((((MPIR_Ucount) (((unsigned int) (status_).count_hi_and_cancelled) >> 1)) << MPIR_BITS_IN_INT) + (unsigned int) (status_).count_lo))
-
-#define MPIR_STATUS_SET_CANCEL_BIT(status_, cancelled_) \
- { \
- (status_).count_hi_and_cancelled &= ~1; \
- (status_).count_hi_and_cancelled |= cancelled_; \
- }
-
-#define MPIR_STATUS_GET_CANCEL_BIT(status_) ((status_).count_hi_and_cancelled & 1)
-
-/* Do not set MPI_ERROR (only set if ERR_IN_STATUS is returned */
-#define MPIR_Status_set_empty(status_) \
- { \
- if ((status_) != MPI_STATUS_IGNORE) \
- { \
- (status_)->MPI_SOURCE = MPI_ANY_SOURCE; \
- (status_)->MPI_TAG = MPI_ANY_TAG; \
- MPIR_STATUS_SET_COUNT(*(status_), 0); \
- MPIR_STATUS_SET_CANCEL_BIT(*(status_), FALSE); \
- } \
- }
-/* See MPI 1.1, section 3.11, Null Processes */
-/* Do not set MPI_ERROR (only set if ERR_IN_STATUS is returned */
-#define MPIR_Status_set_procnull(status_) \
- { \
- if ((status_) != MPI_STATUS_IGNORE) \
- { \
- (status_)->MPI_SOURCE = MPI_PROC_NULL; \
- (status_)->MPI_TAG = MPI_ANY_TAG; \
- MPIR_STATUS_SET_COUNT(*(status_), 0); \
- MPIR_STATUS_SET_CANCEL_BIT(*(status_), FALSE); \
- } \
- }
-
-#define MPIR_Request_extract_status(request_ptr_, status_) \
-{ \
- if ((status_) != MPI_STATUS_IGNORE) \
- { \
- int error__; \
- \
- /* According to the MPI 1.1 standard page 22 lines 9-12, the MPI_ERROR field may not be modified except by the \
- functions in section 3.7.5 which return MPI_ERR_IN_STATUSES (MPI_Wait{all,some} and MPI_Test{all,some}). */ \
- error__ = (status_)->MPI_ERROR; \
- *(status_) = (request_ptr_)->status; \
- (status_)->MPI_ERROR = error__; \
- } \
-}
-/* ------------------------------------------------------------------------- */
-
-/* FIXME: The bindings should be divided into three groups:
- 1. ADI3 routines. These should have structure comment documentation, e.g.,
- the text from doc/adi3/adi3.c
- 2. General utility routines. These should have a short description
- 3. Local utility routines, e.g., routines used within a single subdirectory.
- These should be moved into an include file in that subdirectory
-*/
-/* Bindings for internal routines */
-/*@ MPIR_Add_finalize - Add a routine to be called when MPI_Finalize is invoked
-
-+ routine - Routine to call
-. extra - Void pointer to data to pass to the routine
-- priority - Indicates the priority of this callback and controls the order
- in which callbacks are executed. Use a priority of zero for most handlers;
- higher priorities will be executed first.
-
-Notes:
- The routine 'MPID_Finalize' is executed with priority
- 'MPIR_FINALIZE_CALLBACK_PRIO' (currently defined as 5). Handlers with
- a higher priority execute before 'MPID_Finalize' is called; those with
- a lower priority after 'MPID_Finalize' is called.
-@*/
-void MPIR_Add_finalize( int (*routine)( void * ), void *extra, int priority );
-
-#define MPIR_FINALIZE_CALLBACK_PRIO 5
-#define MPIR_FINALIZE_CALLBACK_HANDLE_CHECK_PRIO 1
-#define MPIR_FINALIZE_CALLBACK_DEFAULT_PRIO 0
-#define MPIR_FINALIZE_CALLBACK_MAX_PRIO 10
-
-/*int MPIR_Comm_attr_dup(MPID_Comm *, MPID_Attribute **);
- int MPIR_Comm_attr_delete(MPID_Comm *, MPID_Attribute *);*/
-int MPIR_Comm_copy( MPID_Comm *, int, MPID_Comm ** );
-int MPIR_Comm_copy_data(MPID_Comm *comm_ptr, MPID_Comm **outcomm_ptr);
-
-/* Fortran keyvals are set with functions in mpi_f77interface.h */
-#ifdef HAVE_CXX_BINDING
-extern void MPIR_Keyval_set_cxx( int, void (*)(void), void (*)(void) );
-extern void MPIR_Op_set_cxx( MPI_Op, void (*)(void) );
-extern void MPIR_Errhandler_set_cxx( MPI_Errhandler, void (*)(void) );
-#endif
-
-int MPIR_Group_create( int, MPID_Group ** );
-int MPIR_Group_release(MPID_Group *group_ptr);
-
-int MPIR_dup_fn ( MPI_Comm, int, void *, void *, void *, int * );
-/* marks a request as complete, extracting the status */
-int MPIR_Request_complete(MPI_Request *, MPID_Request *, MPI_Status *, int *);
-
-int MPIR_Request_get_error(MPID_Request *);
-/* run the progress engine until the given request is complete */
-int MPIR_Progress_wait_request(MPID_Request *req);
-
-/* The following routines perform the callouts to the user routines registered
- as part of a generalized request. They handle any language binding issues
- that are necessary. They are used when completing, freeing, cancelling or
- extracting the status from a generalized request. */
-int MPIR_Grequest_cancel(MPID_Request * request_ptr, int complete);
-int MPIR_Grequest_query(MPID_Request * request_ptr);
-int MPIR_Grequest_free(MPID_Request * request_ptr);
-
-/* this routine was added to support our extension relaxing the progress rules
- * for generalized requests */
-int MPIR_Grequest_progress_poke(int count, MPID_Request **request_ptrs,
- MPI_Status array_of_statuses[] );
-int MPIR_Grequest_waitall(int count, MPID_Request * const * request_ptrs);
-
-/* ------------------------------------------------------------------------- */
-/* Prototypes for language-specific routines, such as routines to set
- Fortran keyval attributes */
-#ifdef HAVE_FORTRAN_BINDING
-#include "mpi_f77interface.h"
-#endif
-
-/* ADI Bindings */
-/*@
- MPID_Init - Initialize the device
-
- Input Parameters:
-+ argc_p - Pointer to the argument count
-. argv_p - Pointer to the argument list
-- requested - Requested level of thread support. Values are the same as
- for the 'required' argument to 'MPI_Init_thread', except that we define
- an enum for these values.
-
- Output Parameters:
-+ provided - Provided level of thread support. May be less than the
- requested level of support.
-. has_args - Set to true if 'argc_p' and 'argv_p' contain the command
- line arguments. See below.
-- has_env - Set to true if the environment of the process has been
- set as the user expects. See below.
-
- Return value:
- Returns 'MPI_SUCCESS' on success and an MPI error code on failure. Failure
- can happen when, for example, the device is unable to start or contact the
- number of processes specified by the 'mpiexec' command.
-
- Notes:
- Null arguments for 'argc_p' and 'argv_p' `must` be valid (see MPI-2, section
- 4.2)
-
- Multi-method devices should initialize each method within this call.
- They can use environment variables and/or command-line arguments
- to decide which methods to initialize (but note that they must not
- `depend` on using command-line arguments).
-
- This call also initializes all MPID data needed by the device. This
- includes the 'MPID_Request's and any other data structures used by
- the device.
-
- The arguments 'has_args' and 'has_env' indicate whether the process was
- started with command-line arguments or environment variables. In some
- cases, only the root process is started with these values; in others,
- the startup environment ensures that each process receives the
- command-line arguments and environment variables that the user expects.
- While the MPI standard makes no requirements that command line arguments or
- environment variables are provided to all processes, most users expect a
- common environment. These variables allow an MPI implementation (that is
- based on ADI-3) to provide both of these by making use of MPI communication
- after 'MPID_Init' is called but before 'MPI_Init' returns to the user, if
- the process management environment does not provide this service.
-
-
- This routine is used to implement both 'MPI_Init' and 'MPI_Init_thread'.
-
- Setting the environment requires a 'setenv' function. Some
- systems may not have this. In that case, the documentation must make
- clear that the environment may not be propagated to the generated processes.
-
- Module:
- MPID_CORE
-
- Questions:
-
- The values for 'has_args' and 'has_env' are boolean.
- They could be more specific. For
- example, the value could indicate the rank in 'MPI_COMM_WORLD' of a
- process that has the values; the value 'MPI_ANY_SOURCE' (or a '-1') could
- indicate that the value is available on all processes (including this one).
- We may want this since otherwise the processes may need to determine whether
- any process needs the command line. Another option would be to use positive
- values in the same way that the 'color' argument is used in 'MPI_Comm_split';
- a negative value indicates the member of the processes with that color that
- has the values of the command line arguments (or environment). This allows
- for non-SPMD programs.
-
- Do we require that the startup environment (e.g., whatever 'mpiexec' is
- using to start processes) is responsible for delivering
- the command line arguments and environment variables that the user expects?
- That is, if the user is running an SPMD program, and expects each process
- to get the same command line argument, who is responsible for this?
- The 'has_args' and 'has_env' values are intended to allow the ADI to
- handle this while taking advantage of any support that the process
- manager framework may provide.
-
- Alternately, how do we find out from the process management environment
- whether it took care of the environment or the command line arguments?
- Do we need a 'PMI_Env_query' function that can answer these questions
- dynamically (in case a different process manager is used through the same
- interface)?
-
- Can we fix the Fortran command-line arguments? That is, can we arrange for
- 'iargc' and 'getarg' (and the POSIX equivalents) to return the correct
- values? See, for example, the Absoft implementations of 'getarg'.
- We could also contact PGI about the Portland Group compilers, and of
- course the 'g77' source code is available.
- Does each process have the same values for the environment variables
- when this routine returns?
-
- If we don''t require that all processes get the same argument list,
- we need to find out if they did anyway so that 'MPI_Init_thread' can
- fixup the list for the user. This argues for another return value that
- flags how much of the environment the 'MPID_Init' routine set up
- so that the 'MPI_Init_thread' call can provide the rest. The reason
- for this is that, even though the MPI standard does not require it,
- a user-friendly implementation should, in the SPMD mode, give each
- process the same environment and argument lists unless the user
- explicitly directed otherwise.
-
- How does this interface to PMI? Do we need to know anything? Should
- this call have an info argument to support PMI?
-
- The following questions involve how environment variables and command
- line arguments are used to control the behavior of the implementation.
- Many of these values must be determined at the time that 'MPID_Init'
- is called. These all should be considered in the context of the
- parameter routines described in the MPICH Design Document.
-
- Are there recommended environment variable names? For example, in ADI-2,
- there are many debugging options that are part of the common device.
- In MPI-2, we can''t require command line arguments, so any such options
- must also have environment variables. E.g., 'MPICH_ADI_DEBUG' or
- 'MPICH_ADI_DB'.
-
- Names that are explicitly prohibited? For example, do we want to
- reserve any names that 'MPI_Init_thread' (as opposed to 'MPID_Init')
- might use?
-
- How does information on command-line arguments and environment variables
- recognized by the device get added to the documentation?
-
- What about control for other impact on the environment? For example,
- what signals should the device catch (e.g., 'SIGFPE'? 'SIGTRAP'?)?
- Which of these should be optional (e.g., ignore or leave signal alone)
- or selectable (e.g., port to listen on)? For example, catching 'SIGTRAP'
- causes problems for 'gdb', so we''d like to be able to leave 'SIGTRAP'
- unchanged in some cases.
-
- Another environment variable should control whether fault-tolerance is
- desired. If fault-tolerance is selected, then some collective operations
- will need to use different algorithms and most fatal errors detected by the
- MPI implementation should abort only the affected process, not all processes.
- @*/
-int MPID_Init( int *argc_p, char ***argv_p, int requested,
- int *provided, int *has_args, int *has_env );
-
-/* was:
- int MPID_Init( int *argc_p, char ***argv_p,
- int requested, int *provided,
- MPID_Comm **parent_comm, int *has_args, int *has_env ); */
-
-/*@
- MPID_InitCompleted - Notify the device that the MPI_Init or MPI_Initthread
- call has completed setting up MPI
-
- Notes:
- This call allows the device to complete any setup that it wishes to perform
- and for which it needs to access any of the structures (such as 'MPIR_Process')
- that are initialized after 'MPID_Init' is called. If the device does not need
- any extra operations, then it may provide either an empty function or even
- define this as a macro with the value 'MPI_SUCCESS'.
- @*/
-int MPID_InitCompleted( void );
-
-/*@
- MPID_Finalize - Perform the device-specific termination of an MPI job
-
- Return Value:
- 'MPI_SUCCESS' or a valid MPI error code. Normally, this routine will
- return 'MPI_SUCCESS'. Only in extrordinary circumstances can this
- routine fail; for example, if some process stops responding during the
- finalize step. In this case, 'MPID_Finalize' should return an MPI
- error code indicating the reason that it failed.
-
- Notes:
-
- Module:
- MPID_CORE
-
- Questions:
- Need to check the MPI-2 requirements on 'MPI_Finalize' with respect to
- things like which process must remain after 'MPID_Finalize' is called.
- @*/
-int MPID_Finalize(void);
-/*@
- MPID_Abort - Abort at least the processes in the specified communicator.
-
- Input Parameters:
-+ comm - Communicator of processes to abort
-. mpi_errno - MPI error code containing the reason for the abort
-. exit_code - Exit code to return to the calling environment. See notes.
-- error_msg - Optional error message
-
- Return value:
- 'MPI_SUCCESS' or an MPI error code. Normally, this routine should not
- return, since the calling process must be a member of the communicator.
- However, under some circumstances, the 'MPID_Abort' might fail; in this
- case, returning an error indication is appropriate.
-
- Notes:
-
- In a fault-tolerant MPI implementation, this operation should abort `only`
- the processes in the specified communicator. Any communicator that shares
- processes with the aborted communicator becomes invalid. For more
- details, see (paper not yet written on fault-tolerant MPI).
-
- In particular, if the communicator is 'MPI_COMM_SELF', only the calling
- process should be aborted.
-
- The 'exit_code' is the exit code that this particular process will
- attempt to provide to the 'mpiexec' or other program invocation
- environment. See 'mpiexec' for a discussion of how exit codes from
- many processes may be combined.
-
- If the error_msg field is non-NULL this string will be used as the message
- with the abort output. Otherwise, the output message will be base on the
- error message associated with the mpi_errno.
-
- An external agent that is aborting processes can invoke this with either
- 'MPI_COMM_WORLD' or 'MPI_COMM_SELF'. For example, if the process manager
- wishes to abort a group of processes, it should cause 'MPID_Abort' to
- be invoked with 'MPI_COMM_SELF' on each process in the group.
-
- Question:
- An alternative design is to provide an 'MPID_Group' instead of a
- communicator. This would allow a process manager to ask the ADI
- to kill an entire group of processes without needing a communicator.
- However, the implementation of 'MPID_Abort' will either do this by
- communicating with other processes or by requesting the process manager
- to kill the processes. That brings up this question: should
- 'MPID_Abort' use 'PMI' to kill processes? Should it be required to
- notify the process manager? What about persistent resources (such
- as SYSV segments or forked processes)?
-
- This suggests that for any persistent resource, an exit handler be
- defined. These would be executed by 'MPID_Abort' or 'MPID_Finalize'.
- See the implementation of 'MPI_Finalize' for an example of exit callbacks.
- In addition, code that registered persistent resources could use persistent
- storage (i.e., a file) to record that information, allowing cleanup
- utilities (such as 'mpiexec') to remove any resources left after the
- process exits.
-
- 'MPI_Finalize' requires that attributes on 'MPI_COMM_SELF' be deleted
- before anything else happens; this allows libraries to attach end-of-job
- actions to 'MPI_Finalize'. It is valuable to have a similar
- capability on 'MPI_Abort', with the caveat that 'MPI_Abort' may not
- guarantee that the run-on-abort routines were called. This provides a
- consistent way for the MPICH implementation to handle freeing any
- persistent resources. However, such callbacks must be limited since
- communication may not be possible once 'MPI_Abort' is called. Further,
- any callbacks must guarantee that they have finite termination.
-
- One possible extension would be to allow `users` to add actions to be
- run when 'MPI_Abort' is called, perhaps through a special attribute value
- applied to 'MPI_COMM_SELF'. Note that is is incorrect to call the delete
- functions for the normal attributes on 'MPI_COMM_SELF' because MPI
- only specifies that those are run on 'MPI_Finalize' (i.e., normal
- termination).
-
- Module:
- MPID_CORE
- @*/
-
-int MPID_Abort( MPID_Comm *comm, int mpi_errno, int exit_code, const char *error_msg );
-
-int MPID_Open_port(MPID_Info *, char *);
-int MPID_Close_port(const char *);
-
-/*@
- MPID_Comm_accept - MPID entry point for MPI_Comm_accept
-
- Input Parameters:
-+ port_name - port name
-. info - info
-. root - root
-- comm - communicator
-
- Output Parameters:
-. MPI_Comm *newcomm - new communicator
-
- Return Value:
- 'MPI_SUCCESS' or a valid MPI error code.
-@*/
-int MPID_Comm_accept(const char *, MPID_Info *, int, MPID_Comm *, MPID_Comm **);
-
-/*@
- MPID_Comm_connect - MPID entry point for MPI_Comm_connect
-
- Input Parameters:
-+ port_name - port name
-. info - info
-. root - root
-- comm - communicator
-
- Output Parameters:
-. newcomm_ptr - new intercommunicator
-
- Return Value:
- 'MPI_SUCCESS' or a valid MPI error code.
-@*/
-int MPID_Comm_connect(const char *, MPID_Info *, int, MPID_Comm *, MPID_Comm **);
-
-int MPID_Comm_disconnect(MPID_Comm *);
-
-int MPID_Comm_spawn_multiple(int, char *[], char **[], const int [], MPID_Info* [],
- int, MPID_Comm *, MPID_Comm **, int []);
-
-/*@
- MPID_Comm_failure_ack - MPID entry point for MPI_Comm_failure_ack
-
- Input Parameters:
-. comm - communicator
-
- Return Value:
- 'MPI_SUCCESS' or a valid MPI error code.
-@*/
-int MPID_Comm_failure_ack(MPID_Comm *comm);
-
-/*@
- MPID_Comm_failure_get_acked - MPID entry point for MPI_Comm_failure_get_acked
-
- Input Parameters:
-. comm - communicator
-
- Output Parameters
-. failed_group_ptr - group of failed processes
-
- Return Value:
- 'MPI_SUCCESS' or a valid MPI error code.
-@*/
-int MPID_Comm_failure_get_acked(MPID_Comm *comm, MPID_Group **failed_group_ptr);
-
-/*@
- MPID_Comm_get_all_failed_procs - Constructs a group of failed processes that it uniform over a communicator
-
- Input Parameters:
-. comm - communicator
-. tag - Tag used to do communciation
-
- Output Parameters:
-. failed_grp - group of all failed processes
-
- Return Value:
- 'MPI_SUCCESS' or a valid MPI error code.
-@*/
-int MPID_Comm_get_all_failed_procs(MPID_Comm *comm_ptr, MPID_Group **failed_group, int tag);
-
-/*@
- MPID_Comm_revoke - MPID entry point for MPI_Comm_revoke
-
- Input Parameters:
- comm - communicator
- remote - True if we received the revoke message from a remote process
-
- Return Value:
- 'MPI_SUCCESS' or a valid MPI error code.
-@*/
-int MPID_Comm_revoke(MPID_Comm *comm, int is_remote);
-
-/*@
- MPID_Send - MPID entry point for MPI_Send
-
- Notes:
- The only difference between this and 'MPI_Send' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, a context id offset is provided in addition to the
- communicator, and a request may be returned. The context offset is
- added to the context of the communicator
- to get the context it used by the message.
- A request is returned only if the ADI implementation was unable to
- complete the send of the message. In that case, the usual 'MPI_Wait'
- logic should be used to complete the request. This approach is used to
- allow a simple implementation of the ADI. The ADI is free to always
- complete the message and never return a request.
-
- Module:
- Communication
-
- @*/
-int MPID_Send( const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Rsend - MPID entry point for MPI_Rsend
-
- Notes:
- The only difference between this and 'MPI_Rsend' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, a context id offset is provided in addition to the
- communicator, and a request may be returned. The context offset is
- added to the context of the communicator
- to get the context it used by the message.
- A request is returned only if the ADI implementation was unable to
- complete the send of the message. In that case, the usual 'MPI_Wait'
- logic should be used to complete the request. This approach is used to
- allow a simple implementation of the ADI. The ADI is free to always
- complete the message and never return a request.
-
- Module:
- Communication
-
- @*/
-int MPID_Rsend( const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Ssend - MPID entry point for MPI_Ssend
-
- Notes:
- The only difference between this and 'MPI_Ssend' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, a context id offset is provided in addition to the
- communicator, and a request may be returned. The context offset is
- added to the context of the communicator
- to get the context it used by the message.
- A request is returned only if the ADI implementation was unable to
- complete the send of the message. In that case, the usual 'MPI_Wait'
- logic should be used to complete the request. This approach is used to
- allow a simple implementation of the ADI. The ADI is free to always
- complete the message and never return a request.
-
- Module:
- Communication
-
- @*/
-int MPID_Ssend( const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_tBsend - Attempt a send and return if it would block
-
- Notes:
- This has the semantics of 'MPI_Bsend', except that it returns the internal
- error code 'MPID_WOULD_BLOCK' if the message can''t be sent immediately
- (t is for "try").
-
- The reason that this interface is chosen over a query to check whether
- a message `can` be sent is that the query approach is not
- thread-safe. Since the decision on whether a message can be sent
- without blocking depends (among other things) on the state of flow
- control managed by the device, this approach also gives the device
- the greatest freedom in implementing flow control. In particular,
- if another MPI process can change the flow control parameters, then
- even in a single-threaded implementation, it would not be safe to
- return, for example, a message size that could be sent with 'MPI_Bsend'.
-
- This routine allows an MPI implementation to optimize 'MPI_Bsend'
- for the case when the message can be delivered without blocking the
- calling process. An ADI implementation is free to have this routine
- always return 'MPID_WOULD_BLOCK', but is encouraged not to.
-
- To allow the MPI implementation to avoid trying this routine when it
- is not implemented by the ADI, the C preprocessor constant 'MPID_HAS_TBSEND'
- should be defined if this routine has a nontrivial implementation.
-
- This is an optional routine. The MPI code for 'MPI_Bsend' will attempt
- to call this routine only if the device defines 'MPID_HAS_TBSEND'.
-
- Module:
- Communication
- @*/
-int MPID_tBsend( const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset );
-
-/*@
- MPID_Isend - MPID entry point for MPI_Isend
-
- Notes:
- The only difference between this and 'MPI_Isend' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Isend( const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Irsend - MPID entry point for MPI_Irsend
-
- Notes:
- The only difference between this and 'MPI_Irsend' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Irsend( const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Issend - MPID entry point for MPI_Issend
-
- Notes:
- The only difference between this and 'MPI_Issend' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Issend( const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Recv - MPID entry point for MPI_Recv
-
- Notes:
- The only difference between this and 'MPI_Recv' is that the basic
- error checks (e.g., valid communicator, datatype, source, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, a context id offset is provided in addition to the
- communicator, and a request may be returned. The context offset is added
- to the context of the communicator to get the context it used by the message.
- As in 'MPID_Send', the request is returned only if the operation did not
- complete. Conversely, the status object is populated with valid information
- only if the operation completed.
-
- Module:
- Communication
-
- @*/
-int MPID_Recv( void *buf, MPI_Aint count, MPI_Datatype datatype,
- int source, int tag, MPID_Comm *comm, int context_offset,
- MPI_Status *status, MPID_Request **request );
-
-
-/*@
- MPID_Irecv - MPID entry point for MPI_Irecv
-
- Notes:
- The only difference between this and 'MPI_Irecv' is that the basic
- error checks (e.g., valid communicator, datatype, source, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Irecv( void *buf, MPI_Aint count, MPI_Datatype datatype,
- int source, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Send_init - MPID entry point for MPI_Send_init
-
- Notes:
- The only difference between this and 'MPI_Send_init' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Send_init( const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-int MPID_Bsend_init(const void *, int, MPI_Datatype, int, int, MPID_Comm *,
- int, MPID_Request **);
-/*@
- MPID_Rsend_init - MPID entry point for MPI_Rsend_init
-
- Notes:
- The only difference between this and 'MPI_Rsend_init' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Rsend_init( const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-/*@
- MPID_Ssend_init - MPID entry point for MPI_Ssend_init
-
- Notes:
- The only difference between this and 'MPI_Ssend_init' is that the basic
- error checks (e.g., valid communicator, datatype, dest, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Ssend_init( const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Recv_init - MPID entry point for MPI_Recv_init
-
- Notes:
- The only difference between this and 'MPI_Recv_init' is that the basic
- error checks (e.g., valid communicator, datatype, source, and tag)
- have been made, the MPI opaque objects have been replaced by
- MPID objects, and a context id offset is provided in addition to the
- communicator. This offset is added to the context of the communicator
- to get the context it used by the message.
-
- Module:
- Communication
-
- @*/
-int MPID_Recv_init( void *buf, int count, MPI_Datatype datatype,
- int source, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **request );
-
-/*@
- MPID_Startall - MPID entry point for MPI_Startall
-
- Notes:
- The only difference between this and 'MPI_Startall' is that the basic
- error checks (e.g., count) have been made, and the MPI opaque objects
- have been replaced by pointers to MPID objects.
-
- Rationale:
- This allows the device to schedule communication involving multiple requests,
- whereas an implementation built on just 'MPID_Start' would force the
- ADI to initiate the communication in the order encountered.
- @*/
-int MPID_Startall(int count, MPID_Request *requests[]);
-
-/*@
- MPID_Probe - Block until a matching request is found and return information
- about it
-
- Input Parameters:
-+ source - rank to match (or 'MPI_ANY_SOURCE')
-. tag - Tag to match (or 'MPI_ANY_TAG')
-. comm - communicator to match.
-- context_offset - context id offset of communicator to match
-
- Output Parameter:
-. status - 'MPI_Status' set as defined by 'MPI_Probe'
-
-
- Return Value:
- Error code.
-
- Notes:
- Note that the values returned in 'status' will be valid for a subsequent
- MPI receive operation only if no other thread attempts to receive the same
- message.
- (See the
- discussion of probe in Section 8.7.2 Clarifications of the MPI-2 standard.)
-
- Providing the 'context_offset' is necessary at this level to support the
- way in which the MPICH implementation uses context ids in the implementation
- of other operations. The communicator is present to allow the device
- to use message-queues attached to particular communicators or connections
- between processes.
-
- Module:
- Request
-
- @*/
-int MPID_Probe(int, int, MPID_Comm *, int, MPI_Status *);
-/*@
- MPID_Iprobe - Look for a matching request in the receive queue
- but do not remove or return it
-
- Input Parameters:
-+ source - rank to match (or 'MPI_ANY_SOURCE')
-. tag - Tag to match (or 'MPI_ANY_TAG')
-. comm - communicator to match.
-- context_offset - context id offset of communicator to match
-
- Output Parameter:
-+ flag - true if a matching request was found, false otherwise.
-- status - 'MPI_Status' set as defined by 'MPI_Iprobe' (only valid when return
- flag is true).
-
- Return Value:
- Error Code.
-
- Notes:
- Note that the values returned in 'status' will be valid for a subsequent
- MPI receive operation only if no other thread attempts to receive the same
- message.
- (See the
- discussion of probe in Section 8.7.2 (Clarifications) of the MPI-2 standard.)
-
- Providing the 'context_offset' is necessary at this level to support the
- way in which the MPICH implementation uses context ids in the implementation
- of other operations. The communicator is present to allow the device
- to use message-queues attached to particular communicators or connections
- between processes.
-
- Devices that rely solely on polling to make progress should call
- MPID_Progress_poke() (or some equivalent function) if a matching request
- could not be found. This insures that progress continues to be made even if
- the application is calling MPI_Iprobe() from within a loop not containing
- calls to any other MPI functions.
-
- Module:
- Request
-
- @*/
-int MPID_Iprobe(int, int, MPID_Comm *, int, int *, MPI_Status *);
-
-/*@
- MPID_Mprobe - Block until a matching request is found and return information
- about it, including a message handle for later reception.
-
- Input Parameters:
-+ source - rank to match (or 'MPI_ANY_SOURCE')
-. tag - Tag to match (or 'MPI_ANY_TAG')
-. comm - communicator to match.
-- context_offset - context id offset of communicator to match
-
- Output Parameter:
-+ message - 'MPID_Request' (logically a message) set as defined by 'MPI_Mprobe'
-- status - 'MPI_Status' set as defined by 'MPI_Mprobe'
-
- Return Value:
- Error code.
-
- Providing the 'context_offset' is necessary at this level to support the
- way in which the MPICH implementation uses context ids in the implementation
- of other operations. The communicator is present to allow the device
- to use message-queues attached to particular communicators or connections
- between processes.
-
- Module:
- Request
-
- @*/
-int MPID_Mprobe(int source, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **message, MPI_Status *status);
-
-/*@
- MPID_Improbe - Look for a matching request in the receive queue and return
- information about it, including a message handle for later reception.
-
- Input Parameters:
-+ source - rank to match (or 'MPI_ANY_SOURCE')
-. tag - Tag to match (or 'MPI_ANY_TAG')
-. comm - communicator to match.
-- context_offset - context id offset of communicator to match
-
- Output Parameter:
-+ flag - 'flag' set as defined by 'MPI_Improbe'
-. message - 'MPID_Request' (logically a message) set as defined by 'MPI_Improbe'
-- status - 'MPI_Status' set as defined by 'MPI_Improbe'
-
- Return Value:
- Error code.
-
- Providing the 'context_offset' is necessary at this level to support the
- way in which the MPICH implementation uses context ids in the implementation
- of other operations. The communicator is present to allow the device
- to use message-queues attached to particular communicators or connections
- between processes.
-
- Module:
- Request
-
- @*/
-int MPID_Improbe(int source, int tag, MPID_Comm *comm, int context_offset,
- int *flag, MPID_Request **message, MPI_Status *status);
-
-/*@
- MPID_Imrecv - Begin receiving the message indicated by the given message
- handle and return a request object for later completion.
-
- Input Parameters:
-+ count - number of elements to receive
-. datatype - datatype of each recv buffer element
-- message - 'MPID_Request' (logically a message) set as defined by 'MPI_Mprobe'
-
- Output Parameter:
-+ buf - receive buffer
-- request - request object for completing the recv
-
- Return Value:
- Error code.
-
- Module:
- Request
-
- NOTE: under most implementations the request object returned will
- probably be some modified version of the "message" object passed in.
-
- @*/
-int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
- MPID_Request *message, MPID_Request **rreqp);
-
-/*@
- MPID_Mrecv - Receive the message indicated by the given message handle.
-
- Input Parameters:
-+ count - number of elements to receive
-. datatype - datatype of each recv buffer element
-- message - 'MPID_Request' (logically a message) set as defined by 'MPI_Mprobe'
-
- Output Parameter:
-+ buf - receive buffer
-- status - 'MPI_Status' set as defined by 'MPI_Mrecv'
-
- Return Value:
- Error code.
-
- Module:
- Request
-
- NOTE: under most implementations the request object returned will
- probably be some modified version of the "message" object passed in.
-
- @*/
-int MPID_Mrecv(void *buf, int count, MPI_Datatype datatype,
- MPID_Request *message, MPI_Status *status);
-
-/*@
- MPID_Cancel_send - Cancel the indicated send request
-
- Input Parameter:
-. request - Send request to cancel
-
- Return Value:
- MPI error code.
-
- Notes:
- Cancel is a tricky operation, particularly for sends. Read the
- discussion in the MPI-1 and MPI-2 documents carefully. This call
- only requests that the request be cancelled; a subsequent wait
- or test must first succeed (i.e., the request completion counter must be
- zeroed).
-
- Module:
- Request
-
- @*/
-int MPID_Cancel_send(MPID_Request *);
-/*@
- MPID_Cancel_recv - Cancel the indicated recv request
-
- Input Parameter:
-. request - Receive request to cancel
-
- Return Value:
- MPI error code.
-
- Notes:
- This cancels a pending receive request. In many cases, this is implemented
- by simply removing the request from a pending receive request queue.
- However, some ADI implementations may maintain these queues in special
- places, such as within a NIC (Network Interface Card).
- This call only requests that the request be cancelled; a subsequent wait
- or test must first succeed (i.e., the request completion counter must be
- zeroed).
-
- Module:
- Request
-
- @*/
-int MPID_Cancel_recv(MPID_Request *);
-
-/*@
- MPID_Comm_AS_enabled - Query whether anysource operations are enabled for a communicator
-
- Input Parameter:
- communicator - Communicator being queried
-
- Return Value:
- 0 - The communicator will not currently permit anysource operations
- 1 - The communicator will currently permit anysource operations
- @*/
-int MPID_Comm_AS_enabled(MPID_Comm *);
-
-/*@
- MPID_Request_is_anysource - Query whether the request is an anysource receive
-
- Input Parameter:
- request - Receive request being queried
-
- Return Value:
- 0 - The request is not anysource
- 1 - The request is anysource
-
- @*/
-int MPID_Request_is_anysource(MPID_Request *);
-
-/*@
- MPID_Aint_add - Returns the sum of base and disp
-
- Input Parameters:
-+ base - base address (integer)
-- disp - displacement (integer)
-
- Return value:
- Sum of the base and disp argument
- @*/
-MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp);
-
-/*@
- MPID_Aint_diff - Returns the difference between addr1 and addr2
-
- Input Parameters:
-+ addr1 - minuend address (integer)
-- addr2 - subtrahend address (integer)
-
- Return value:
- Difference between addr1 and addr2
- @*/
-MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
-
-/* MPI-2 RMA Routines */
-
-int MPID_Win_create(void *, MPI_Aint, int, MPID_Info *, MPID_Comm *,
- MPID_Win **);
-int MPID_Win_free(MPID_Win **);
-
-int MPID_Put(const void *, int, MPI_Datatype, int, MPI_Aint, int,
- MPI_Datatype, MPID_Win *);
-int MPID_Get(void *, int, MPI_Datatype, int, MPI_Aint, int,
- MPI_Datatype, MPID_Win *);
-int MPID_Accumulate(const void *, int, MPI_Datatype, int, MPI_Aint, int,
- MPI_Datatype, MPI_Op, MPID_Win *);
-
-int MPID_Win_fence(int, MPID_Win *);
-int MPID_Win_post(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr);
-int MPID_Win_start(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr);
-int MPID_Win_test(MPID_Win *win_ptr, int *flag);
-int MPID_Win_wait(MPID_Win *win_ptr);
-int MPID_Win_complete(MPID_Win *win_ptr);
-
-int MPID_Win_lock(int lock_type, int dest, int assert, MPID_Win *win_ptr);
-int MPID_Win_unlock(int dest, MPID_Win *win_ptr);
-
-/* MPI-3 RMA Routines */
-
-int MPID_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info *info,
- MPID_Comm *comm, void *baseptr, MPID_Win **win);
-int MPID_Win_allocate_shared(MPI_Aint size, int disp_unit, MPID_Info *info_ptr, MPID_Comm *comm_ptr,
- void *base_ptr, MPID_Win **win_ptr);
-int MPID_Win_shared_query(MPID_Win *win, int rank, MPI_Aint *size, int *disp_unit,
- void *baseptr);
-int MPID_Win_create_dynamic(MPID_Info *info, MPID_Comm *comm, MPID_Win **win);
-int MPID_Win_attach(MPID_Win *win, void *base, MPI_Aint size);
-int MPID_Win_detach(MPID_Win *win, const void *base);
-int MPID_Win_get_info(MPID_Win *win, MPID_Info **info_used);
-int MPID_Win_set_info(MPID_Win *win, MPID_Info *info);
-
-int MPID_Get_accumulate(const void *origin_addr, int origin_count,
- MPI_Datatype origin_datatype, void *result_addr, int result_count,
- MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPI_Op op, MPID_Win *win);
-int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
- MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
- MPI_Op op, MPID_Win *win);
-int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
- void *result_addr, MPI_Datatype datatype, int target_rank,
- MPI_Aint target_disp, MPID_Win *win);
-int MPID_Rput(const void *origin_addr, int origin_count,
- MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win *win,
- MPID_Request **request);
-int MPID_Rget(void *origin_addr, int origin_count,
- MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win *win,
- MPID_Request **request);
-int MPID_Raccumulate(const void *origin_addr, int origin_count,
- MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPI_Op op, MPID_Win *win,
- MPID_Request **request);
-int MPID_Rget_accumulate(const void *origin_addr, int origin_count,
- MPI_Datatype origin_datatype, void *result_addr, int result_count,
- MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPI_Op op, MPID_Win *win,
- MPID_Request **request);
-
-int MPID_Win_lock_all(int assert, MPID_Win *win);
-int MPID_Win_unlock_all(MPID_Win *win);
-int MPID_Win_flush(int rank, MPID_Win *win);
-int MPID_Win_flush_all(MPID_Win *win);
-int MPID_Win_flush_local(int rank, MPID_Win *win);
-int MPID_Win_flush_local_all(MPID_Win *win);
-int MPID_Win_sync(MPID_Win *win);
-
-
-/*@
- MPID_Progress_start - Begin a block of operations that check the completion
- counters in requests.
-
- Input parameters:
-. state - pointer to a progress state variable
-
- Notes:
- This routine is informs the progress engine that a block of code follows that
- will examine the completion counter of some 'MPID_Request' objects and then
- call 'MPID_Progress_wait' zero or more times followed by a call to
- 'MPID_Progress_end'.
-
- The progress state variable must be specific to the thread calling it. If at
- all possible, the state should be declared as an auto variable and thus
- allocated on the stack of the current thread. Thread specific storage could
- be used instead, but doing such would incur additional (and typically
- unnecessary) overhead.
-
- This routine is needed to properly implement blocking tests when
- multithreaded progress engines are used. In a single-threaded implementation
- of the ADI, this may be defined as an empty macro.
-
- Module:
- Communication
- @*/
-void MPID_Progress_start(MPID_Progress_state * state);
-/*@
- MPID_Progress_wait - Wait for some communication since 'MPID_Progress_start'
-
- Input parameters:
-. state - pointer to the progress state initialized by MPID_Progress_start
-
- Return value:
- An mpi error code.
-
- Notes:
- This instructs the progress engine to wait until some communication event
- happens since 'MPID_Progress_start' was called. This call blocks the
- calling thread (only, not the process).
-
- Module:
- Communication
- @*/
-int MPID_Progress_wait(MPID_Progress_state * state);
-/*@
- MPID_Progress_end - End a block of operations begun with 'MPID_Progress_start'
-
- Input parameters:
- . state - pointer to the progress state variable passed to
- 'MPID_Progress_start'
-
- Notes:
- This routine instructs the progress engine to end the block begun with
- 'MPID_Progress_start'. The progress engine is not required to check for any
- pending communication.
-
- The purpose of this call is to release any locks initiated by
- 'MPID_Progess_start' or 'MPID_Progess_wait'. In a single threaded ADI
- implementation, this may be defined as an empty macro.
-
- Module:
- Communication
- @*/
-void MPID_Progress_end(MPID_Progress_state * stae);
-/*@
- MPID_Progress_test - Check for communication
-
- Return value:
- An mpi error code.
-
- Notes:
- Unlike 'MPID_Progress_wait', this routine is nonblocking. Therefore, it
- does not require the use of 'MPID_Progress_start' and 'MPID_Progress_end'.
-
- Module:
- Communication
- @*/
-int MPID_Progress_test(void);
-/*@
- MPID_Progress_poke - Allow a progress engine to check for pending
- communication
-
- Return value:
- An mpi error code.
-
- Notes:
- This routine provides a way to invoke the progress engine in a polling
- implementation of the ADI. This routine must be nonblocking.
-
- A multithreaded implementation is free to define this as an empty macro.
-
- Module:
- Communication
- @*/
-int MPID_Progress_poke(void);
-
-/*@
- MPID_Request_create - Create and return a bare request
-
- Return value:
- A pointer to a new request object.
-
- Notes:
- This routine is intended for use by 'MPI_Grequest_start' only. Note that
- once a request is created with this routine, any progress engine must assume
- that an outside function can complete a request with
- 'MPID_Request_complete'.
-
- The request object returned by this routine should be initialized such that
- ref_count is one and handle contains a valid handle referring to the object.
- @*/
-MPID_Request * MPID_Request_create(void);
-
-/*@
- MPID_Request_release - Release a request
-
- Input Parameter:
-. request - request to release
-
- Notes:
- This routine is called to release a reference to request object. If
- the reference count of the request object has reached zero, the object will
- be deallocated.
-
- Module:
- Request
-@*/
-void MPID_Request_release(MPID_Request *);
-
-/*@
- MPID_Request_complete - Complete a request
-
- Input Parameter:
-. request - request to complete
-
- Notes:
- This routine is called to decrement the completion count of a
- request object. If the completion count of the request object has
- reached zero, the reference count for the object will be
- decremented.
-
- Module:
- Request
-@*/
-int MPID_Request_complete(MPID_Request *);
-
-typedef struct MPID_Grequest_class {
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
- MPI_Grequest_query_function *query_fn;
- MPI_Grequest_free_function *free_fn;
- MPI_Grequest_cancel_function *cancel_fn;
- MPIX_Grequest_poll_function *poll_fn;
- MPIX_Grequest_wait_function *wait_fn;
- struct MPID_Grequest_class *next;
-} MPID_Grequest_class;
-
-
-/* Interfaces exposed by MPI_T */
-#include "mpit.h"
-
-/*TTopoOverview.tex
- *
- * The MPI collective and topology routines can benefit from information
- * about the topology of the underlying interconnect. Unfortunately, there
- * is no best form for the representation (the MPI-1 Forum tried to define
- * such a representation, but was unable to). One useful decomposition
- * that has been used in cluster enviroments is a hierarchical decomposition.
- *
- * The other obviously useful topology information would match the needs of
- * 'MPI_Cart_create'. However, it may be simpler to for the device to
- * implement this routine directly.
- *
- * Other useful information could be the topology information that matches
- * the needs of the collective operation, such as spanning trees and rings.
- * These may be added to ADI3 later.
- *
- * Question: Should we define a cart create function? Dims create?
- *
- * Usage:
- * This routine has nothing to do with the choice of communication method
- * that a implementation of the ADI may make. It is intended only to
- * communicate information on the heirarchy of processes, if any, to
- * the implementation of the collective communication routines. This routine
- * may also be useful for the MPI Graph topology functions.
- *
- T*/
-
-/*@
- MPID_Topo_cluster_info - Return information on the hierarchy of
- interconnections
-
- Input Parameter:
-. comm - Communicator to study. May be 'NULL', in which case 'MPI_COMM_WORLD'
- is the effective communicator.
-
- Output Parameters:
-+ levels - The number of levels in the hierarchy.
- To simplify the use of this routine, the maximum value is
- 'MPID_TOPO_CLUSTER_MAX_LEVELS' (typically 8 or less).
-. my_cluster - For each level, the id of the cluster that the calling process
- belongs to.
-- my_rank - For each level, the rank of the calling process in its cluster
-
- Notes:
- This routine returns a description of the system in terms of nested
- clusters of processes. Levels are numbered from zero. At each level,
- each process may belong to no more than cluster; if a process is in any
- cluster at level i, it must be in some cluster at level i-1.
-
- The communicator argument allows this routine to be used in the dynamic
- process case (i.e., with communicators that are created after 'MPI_Init'
- and that involve processes that are not part of 'MPI_COMM_WORLD').
-
- For non-hierarchical systems, this routine simply returns a single
- level containing all processes.
-
- Sample Outputs:
- For a single, switch-connected cluster or a uniform-memory-access (UMA)
- symmetric multiprocessor (SMP), the return values could be
-.vb
- level my_cluster my_rank
- 0 0 rank in comm_world
-.ve
- This is also a valid response for `any` device.
-
- For a switch-connected cluster of 2 processor SMPs
-.vb
- level my_cluster my_rank
- 0 0 rank in comm_world
- 1 0 to p/2 0 or 1
-.ve
- where the value each process on the same SMP has the same value for
- 'my_cluster[1]' and a different value for 'my_rank[1]'.
-
- For two SMPs connected by a network,
-.vb
- level my_cluster my_rank
- 0 0 rank in comm_world
- 1 0 or 1 0 to # on SMP
-.ve
-
- An example with more than 2 levels is a collection of clusters, each with
- SMP nodes.
-
- Limitations:
- This approach does not provide a representations for topologies that
- are not hierarchical. For example, a mesh interconnect is a single-level
- cluster in this view.
-
- Module:
- Topology
- @*/
-int MPID_Topo_cluster_info( MPID_Comm *comm,
- int *levels, int my_cluster[], int my_rank[] );
-
-/*@
- MPID_Get_processor_name - Return the name of the current processor
-
- Input Parameter:
-. namelen - Length of name
-
- Output Parameters:
-+ name - A unique specifier for the actual (as opposed to virtual) node. This
- must be an array of size at least 'MPI_MAX_PROCESSOR_NAME'.
-- resultlen - Length (in characters) of the name. If this pointer is null,
- this value is not set.
-
- Notes:
- The name returned should identify a particular piece of hardware;
- the exact format is implementation defined. This name may or may not
- be the same as might be returned by 'gethostname', 'uname', or 'sysinfo'.
-
- This routine is essentially an MPID version of 'MPI_Get_processor_name' .
- It must be part of the device because not all environments support calls
- to return the processor name. The additional argument (input name
- length) is used to provide better error checking and to ensure that
- the input buffer is large enough (rather than assuming that it is
- 'MPI_MAX_PROCESSOR_NAME' long).
- @*/
-int MPID_Get_processor_name( char *name, int namelen, int *resultlen);
-
-void MPID_Errhandler_free(MPID_Errhandler *errhan_ptr);
-
-/*@
- MPID_Get_universe_size - Return the number of processes that the current
- process management environment can handle
-
- Output Parameters:
-. universe_size - the universe size; MPIR_UNIVERSE_SIZE_NOT_AVAILABLE if the
- size cannot be determined
-
- Return value:
- A MPI error code.
-@*/
-int MPID_Get_universe_size(int * universe_size);
-
-#define MPIR_UNIVERSE_SIZE_NOT_SET -1
-#define MPIR_UNIVERSE_SIZE_NOT_AVAILABLE -2
-
-/*@
- MPID_Comm_get_lpid - Get the local process id that corresponds to a
- comm rank.
-
- Notes:
- The local process ids are described elsewhere. Basically, they are
- a nonnegative number by which this process can refer to other processes
- to which it is connected. These are local process ids because different
- processes may use different ids to identify the same target process
- @*/
-int MPID_Comm_get_lpid(MPID_Comm *comm_ptr, int idx, int * lpid_ptr, MPIU_BOOL is_remote);
-
-/* prototypes and declarations for the MPID_Sched interface for nonblocking
- * collectives */
-#include "mpir_nbc.h"
-
-/* Include definitions from the device which require items defined by this
- file (mpiimpl.h). */
#include "mpidpost.h"
-/* tunable cvar values */
-#include "mpich_cvars.h"
-
-/* Tags for point to point operations which implement collective and other
- internal operations */
-#define MPIR_BARRIER_TAG 1
-#define MPIR_BCAST_TAG 2
-#define MPIR_GATHER_TAG 3
-#define MPIR_GATHERV_TAG 4
-#define MPIR_SCATTER_TAG 5
-#define MPIR_SCATTERV_TAG 6
-#define MPIR_ALLGATHER_TAG 7
-#define MPIR_ALLGATHERV_TAG 8
-#define MPIR_ALLTOALL_TAG 9
-#define MPIR_ALLTOALLV_TAG 10
-#define MPIR_REDUCE_TAG 11
-#define MPIR_USER_REDUCE_TAG 12
-#define MPIR_USER_REDUCEA_TAG 13
-#define MPIR_ALLREDUCE_TAG 14
-#define MPIR_USER_ALLREDUCE_TAG 15
-#define MPIR_USER_ALLREDUCEA_TAG 16
-#define MPIR_REDUCE_SCATTER_TAG 17
-#define MPIR_USER_REDUCE_SCATTER_TAG 18
-#define MPIR_USER_REDUCE_SCATTERA_TAG 19
-#define MPIR_SCAN_TAG 20
-#define MPIR_USER_SCAN_TAG 21
-#define MPIR_USER_SCANA_TAG 22
-#define MPIR_LOCALCOPY_TAG 23
-#define MPIR_EXSCAN_TAG 24
-#define MPIR_ALLTOALLW_TAG 25
-#define MPIR_TOPO_A_TAG 26
-#define MPIR_TOPO_B_TAG 27
-#define MPIR_REDUCE_SCATTER_BLOCK_TAG 28
-#define MPIR_SHRINK_TAG 29
-#define MPIR_AGREE_TAG 30
-#define MPIR_FIRST_NBC_TAG 31
-
-/* These macros must be used carefully. These macros will not work with
- * negative tags. By definition, users are not to use negative tags and the
- * only negative tag in MPICH is MPI_ANY_TAG which is checked seperately, but
- * if there is a time where negative tags become more common, this setup won't
- * work anymore. */
-
-/* This bitmask can be used to manually mask the tag space wherever it might
- * be necessary to do so (for instance in the receive queue */
-#define MPIR_TAG_ERROR_BIT (1 << 30)
-
-/* This bitmask is used to differentiate between a process failure
- * (MPIX_ERR_PROC_FAILED) and any other kind of failure (MPI_ERR_OTHER). */
-#define MPIR_TAG_PROC_FAILURE_BIT (1 << 29)
-
-/* This macro checks the value of the error bit in the MPI tag and returns 1
- * if the tag is set and 0 if it is not. */
-#define MPIR_TAG_CHECK_ERROR_BIT(tag) ((MPIR_TAG_ERROR_BIT & (tag)) == MPIR_TAG_ERROR_BIT ? 1 : 0)
-
-/* This macro checks the value of the process failure bit in the MPI tag and
- * returns 1 if the tag is set and 0 if it is not. */
-#define MPIR_TAG_CHECK_PROC_FAILURE_BIT(tag) ((MPIR_TAG_PROC_FAILURE_BIT & (tag)) == MPIR_TAG_PROC_FAILURE_BIT ? 1 : 0)
-
-/* This macro sets the value of the error bit in the MPI tag to 1 */
-#define MPIR_TAG_SET_ERROR_BIT(tag) ((tag) |= MPIR_TAG_ERROR_BIT)
-
-/* This macro sets the value of the process failure bit in the MPI tag to 1 */
-#define MPIR_TAG_SET_PROC_FAILURE_BIT(tag) ((tag) |= (MPIR_TAG_ERROR_BIT | MPIR_TAG_PROC_FAILURE_BIT))
-
-/* This macro clears the value of the error bits in the MPI tag */
-#define MPIR_TAG_CLEAR_ERROR_BITS(tag) ((tag) &= ~(MPIR_TAG_ERROR_BIT ^ MPIR_TAG_PROC_FAILURE_BIT))
-
-/* This macro masks the value of the error bits in the MPI tag */
-#define MPIR_TAG_MASK_ERROR_BITS(tag) ((tag) & ~(MPIR_TAG_ERROR_BIT ^ MPIR_TAG_PROC_FAILURE_BIT))
-
-/* These functions are used in the implementation of collective and
- other internal operations. They are wrappers around MPID send/recv
- functions. They do sends/receives by setting the context offset to
- MPID_CONTEXT_INTRA(INTER)_COLL. */
-int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtype,
- void *recvbuf, MPI_Aint recvcount, MPI_Datatype recvtype);
-int MPIC_Wait(MPID_Request * request_ptr, MPIR_Errflag_t *errflag);
-int MPIC_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status);
-
-/* FT versions of te MPIC_ functions */
-int MPIC_Send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIC_Recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source, int tag,
- MPID_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag);
-int MPIC_Ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIC_Sendrecv(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtype,
- int dest, int sendtag, void *recvbuf, MPI_Aint recvcount,
- MPI_Datatype recvtype, int source, int recvtag,
- MPID_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag);
-int MPIC_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
- int dest, int sendtag,
- int source, int recvtag,
- MPID_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag);
-int MPIC_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPID_Request **request, MPIR_Errflag_t *errflag);
-int MPIC_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPID_Request **request, MPIR_Errflag_t *errflag);
-int MPIC_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
- int tag, MPID_Comm *comm_ptr, MPID_Request **request);
-int MPIC_Waitall(int numreq, MPID_Request *requests[], MPI_Status statuses[], MPIR_Errflag_t *errflag);
-
-
-void MPIR_MAXF ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_MINF ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_SUM ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_PROD ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_LAND ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_BAND ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_LOR ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_BOR ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_LXOR ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_BXOR ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_MAXLOC ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_MINLOC ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_REPLACE ( void *, void *, int *, MPI_Datatype * ) ;
-void MPIR_NO_OP ( void *, void *, int *, MPI_Datatype * ) ;
-
-int MPIR_MAXF_check_dtype ( MPI_Datatype ) ;
-int MPIR_MINF_check_dtype ( MPI_Datatype ) ;
-int MPIR_SUM_check_dtype ( MPI_Datatype ) ;
-int MPIR_PROD_check_dtype ( MPI_Datatype ) ;
-int MPIR_LAND_check_dtype ( MPI_Datatype ) ;
-int MPIR_BAND_check_dtype ( MPI_Datatype ) ;
-int MPIR_LOR_check_dtype ( MPI_Datatype ) ;
-int MPIR_BOR_check_dtype ( MPI_Datatype ) ;
-int MPIR_LXOR_check_dtype ( MPI_Datatype ) ;
-int MPIR_BXOR_check_dtype ( MPI_Datatype ) ;
-int MPIR_MAXLOC_check_dtype ( MPI_Datatype ) ;
-int MPIR_MINLOC_check_dtype ( MPI_Datatype ) ;
-int MPIR_REPLACE_check_dtype ( MPI_Datatype ) ;
-int MPIR_NO_OP_check_dtype ( MPI_Datatype ) ;
-
-#define MPIR_PREDEF_OP_COUNT 14
-extern MPI_User_function *MPIR_Op_table[];
-
-typedef int (MPIR_Op_check_dtype_fn) ( MPI_Datatype );
-extern MPIR_Op_check_dtype_fn *MPIR_Op_check_dtype_table[];
-
-#define MPIR_OP_HDL_TO_FN(op) MPIR_Op_table[((op)&0xf) - 1]
-#define MPIR_OP_HDL_TO_DTYPE_FN(op) MPIR_Op_check_dtype_table[((op)&0xf) - 1]
-
-#if !defined MPIR_MIN
-#define MPIR_MIN(a,b) (((a)>(b))?(b):(a))
-#endif /* MPIR_MIN */
-
-#if !defined MPIR_MAX
-#define MPIR_MAX(a,b) (((b)>(a))?(b):(a))
-#endif /* MPIR_MAX */
-
-int MPIR_Type_is_rma_atomic(MPI_Datatype type);
-int MPIR_Compare_equal(const void *a, const void *b, MPI_Datatype type);
-
-int MPIR_Allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Allgather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Allgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Allgatherv_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm *comm_pt, MPIR_Errflag_t *errflag );
-int MPIR_Allgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Allreduce_impl(const void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Allreduce(const void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Allreduce_intra(const void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Allreduce_inter(const void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Alltoall_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Alltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Alltoallv_impl(const void *sendbuf, const int *sendcnts, const int *sdispls,
- MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
- const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPIR_Errflag_t *errflag);
-int MPIR_Alltoallv(const void *sendbuf, const int *sendcnts, const int *sdispls,
- MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
- const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcnts, const int *sdispls,
- MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
- const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPIR_Errflag_t *errflag);
-int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcnts, const int *sdispls,
- MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
- const int *rdispls, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Alltoallw_impl(const void *sendbuf, const int *sendcnts, const int *sdispls,
- const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts,
- const int *rdispls, const MPI_Datatype *recvtypes, MPID_Comm *comm_ptr,
- MPIR_Errflag_t *errflag);
-int MPIR_Alltoallw(const void *sendbuf, const int *sendcnts, const int *sdispls,
- const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts,
- const int *rdispls, const MPI_Datatype *recvtypes, MPID_Comm *comm_ptr,
- MPIR_Errflag_t *errflag);
-int MPIR_Alltoallw_intra(const void *sendbuf, const int *sendcnts, const int *sdispls,
- const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts,
- const int *rdispls, const MPI_Datatype *recvtypes, MPID_Comm *comm_ptr,
- MPIR_Errflag_t *errflag);
-int MPIR_Alltoallw_inter(const void *sendbuf, const int *sendcnts, const int *sdispls,
- const MPI_Datatype *sendtypes, void *recvbuf,
- const int *recvcnts, const int *rdispls, const MPI_Datatype *recvtypes,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Bcast_inter(void *buffer, int count, MPI_Datatype datatype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Bcast_intra (void *buffer, int count, MPI_Datatype datatype, int
- root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Bcast (void *buffer, int count, MPI_Datatype datatype, int
- root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Bcast_impl (void *buffer, int count, MPI_Datatype datatype, int
- root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Exscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Gather_impl (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Gather (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Gather_intra (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Gather_inter (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Gatherv (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcnts, const int *displs,
- MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Gatherv_impl (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcnts, const int *displs,
- MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Reduce_scatter_impl(const void *sendbuf, void *recvbuf, const int *recvcnts,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Reduce_scatter(const void *sendbuf, void *recvbuf, const int *recvcnts,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int *recvcnts,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int *recvcnts,
- MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Reduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm
- *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm
- *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Reduce_scatter_block_intra(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm
- *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Reduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm
- *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Reduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Reduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Reduce_inter (const void *sendbuf, void *recvbuf, int count, MPI_Datatype
- datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Scan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Scatter_impl(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Scatter(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Scatter_intra(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Scatter_inter(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
- void *recvbuf, int recvcnt, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag );
-int MPIR_Scatterv_impl (const void *sendbuf, const int *sendcnts, const int *displs,
- MPI_Datatype sendtype, void *recvbuf, int recvcnt,
- MPI_Datatype recvtype, int root, MPID_Comm
- *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Scatterv (const void *sendbuf, const int *sendcnts, const int *displs,
- MPI_Datatype sendtype, void *recvbuf, int recvcnt,
- MPI_Datatype recvtype, int root, MPID_Comm
- *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Barrier_impl( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Barrier( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Barrier_intra( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-int MPIR_Barrier_inter( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-
-int MPIR_Reduce_local_impl(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op);
-
-int MPIR_Setup_intercomm_localcomm( MPID_Comm * );
-
-int MPIR_Comm_create( MPID_Comm ** );
-int MPIR_Comm_create_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr, int tag,
- MPID_Comm ** newcomm);
-
-/* comm_create helper functions, used by both comm_create and comm_create_group */
-int MPIR_Comm_create_calculate_mapping(MPID_Group *group_ptr,
- MPID_Comm *comm_ptr,
- int **mapping_out,
- MPID_Comm **mapping_comm);
-
-int MPIR_Comm_create_map(int local_n,
- int remote_n,
- int *local_mapping,
- int *remote_mapping,
- MPID_Comm *mapping_comm,
- MPID_Comm *newcomm);
-
-/* implements the logic for MPI_Comm_create for intracommunicators only */
-int MPIR_Comm_create_intra(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
- MPID_Comm **newcomm_ptr);
-
-
-int MPIR_Comm_commit( MPID_Comm * );
-
-int MPIR_Comm_is_node_aware( MPID_Comm * );
-
-int MPIR_Comm_is_node_consecutive( MPID_Comm *);
-
-void MPIR_Free_err_dyncodes( void );
-
-int MPIR_Comm_idup_impl(MPID_Comm *comm_ptr, MPID_Comm **newcomm, MPID_Request **reqp);
-
-int MPIR_Comm_shrink(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr);
-int MPIR_Comm_agree(MPID_Comm *comm_ptr, int *flag);
-
-int MPIR_Allreduce_group(void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
-int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
-
-
-int MPIR_Barrier_group(MPID_Comm *comm_ptr, MPID_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
-
-
-/* topology impl functions */
-int MPIR_Dist_graph_neighbors_count_impl(MPID_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted);
-int MPIR_Dist_graph_neighbors_impl(MPID_Comm *comm_ptr,
- int maxindegree, int sources[], int sourceweights[],
- int maxoutdegree, int destinations[], int destweights[]);
-int MPIR_Graph_neighbors_count_impl(MPID_Comm *comm_ptr, int rank, int *nneighbors);
-int MPIR_Graph_neighbors_impl(MPID_Comm *comm_ptr, int rank, int maxneighbors, int *neighbors);
-int MPIR_Cart_shift_impl(MPID_Comm *comm_ptr, int direction, int displ, int *source, int *dest);
-
-/* begin impl functions for NBC */
-int MPIR_Ibarrier_impl(MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Iscatterv_impl(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ialltoallv_impl(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ialltoallw_impl(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request);
-/* end impl functions for NBC */
-
-/* begin impl functions for neighborhood collectives */
-int MPIR_Ineighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ineighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ineighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ineighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Ineighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Neighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr);
-/* end impl functions for neighborhood collectives */
-
-/* neighborhood collective default algorithms */
-int MPIR_Neighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr);
-int MPIR_Neighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr);
-int MPIR_Ineighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ineighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ineighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ineighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ineighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr, MPID_Sched_t s);
-
-/* nonblocking collective default algorithms */
-int MPIR_Ibcast_intra(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ibcast_inter(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iscatter_for_bcast(void *tmp_buf, int root, MPID_Comm *comm_ptr, int nbytes, MPID_Sched_t s);
-int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ibarrier_intra(MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ibarrier_inter(MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoallv_intra(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoallv_inter(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallreduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallreduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallreduce_naive(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Igather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iscatterv(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_intra(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_pairwise(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_block_intra(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoall_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoall_inplace(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoall_perm_sr(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoall_pairwise(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgather_ring(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgatherv_ring(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgatherv_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iscan_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoallw_intra(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPID_Comm *comm_ptr, MPID_Sched_t s);
-int MPIR_Ialltoallw_inter(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPID_Comm *comm_ptr, MPID_Sched_t s);
-
-/* group functionality */
-int MPIR_Group_check_subset(MPID_Group * group_ptr, MPID_Comm * comm_ptr);
-
-/* begin impl functions for MPI_T (MPI_T_ right now) */
-int MPIR_T_cvar_handle_alloc_impl(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle, int *count);
-int MPIR_T_cvar_read_impl(MPI_T_cvar_handle handle, void *buf);
-int MPIR_T_cvar_write_impl(MPI_T_cvar_handle handle, const void *buf);
-int MPIR_T_pvar_session_create_impl(MPI_T_pvar_session *session);
-int MPIR_T_pvar_session_free_impl(MPI_T_pvar_session *session);
-int MPIR_T_pvar_handle_alloc_impl(MPI_T_pvar_session session, int pvar_index, void *obj_handle, MPI_T_pvar_handle *handle, int *count);
-int MPIR_T_pvar_handle_free_impl(MPI_T_pvar_session session, MPI_T_pvar_handle *handle);
-int MPIR_T_pvar_start_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int MPIR_T_pvar_stop_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int MPIR_T_pvar_read_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
-int MPIR_T_pvar_write_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const void *buf);
-int MPIR_T_pvar_reset_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
-int MPIR_T_pvar_readreset_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
-int MPIR_T_category_get_cvars_impl(int cat_index, int len, int indices[]);
-int MPIR_T_category_get_pvars_impl(int cat_index, int len, int indices[]);
-int MPIR_T_category_get_categories_impl(int cat_index, int len, int indices[]);
-/* end impl functions for MPI_T (MPI_T_ right now) */
-
-/* MPI-3 "large count" impl routines */
-int MPIR_Get_elements_x_impl(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *elements);
-int MPIR_Status_set_elements_x_impl(MPI_Status *status, MPI_Datatype datatype, MPI_Count count);
-void MPIR_Type_get_extent_x_impl(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
-void MPIR_Type_get_true_extent_x_impl(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Count *true_extent);
-int MPIR_Type_size_x_impl(MPI_Datatype datatype, MPI_Count *size);
-
-/* random initializers */
-int MPIR_Group_init(void);
-int MPIR_Comm_init(MPID_Comm *);
-
-
-/* Collective functions cannot be called from multiple threads. These
- are stubs used in the collective communication calls to check for
- user error. Currently they are just being macroed out. */
-#define MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER(comm_ptr)
-#define MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT(comm_ptr)
-
-/* Miscellaneous */
-void MPIU_SetTimeout( int );
-
-/* Communicator info hint functions */
-typedef int (*MPIR_Comm_hint_fn_t)(MPID_Comm *, MPID_Info *, void *);
-int MPIR_Comm_register_hint(const char *hint_key, MPIR_Comm_hint_fn_t fn, void *state);
-
-#if defined(HAVE_VSNPRINTF) && defined(NEEDS_VSNPRINTF_DECL) && !defined(vsnprintf)
-int vsnprintf(char *str, size_t size, const char *format, va_list ap);
-# endif
-
-/* Routines for determining local and remote processes */
-
-int MPIU_Find_local_and_external(struct MPID_Comm *comm, int *local_size_p, int *local_rank_p, int **local_ranks_p,
- int *external_size_p, int *external_rank_p, int **external_ranks_p,
- int **intranode_table, int **internode_table_p);
-int MPIU_Get_internode_rank(MPID_Comm *comm_ptr, int r);
-int MPIU_Get_intranode_rank(MPID_Comm *comm_ptr, int r);
-
-/* Trivial accessor macros */
-
-#define MPIR_Comm_rank(comm_ptr) ((comm_ptr)->rank)
-#define MPIR_Comm_size(comm_ptr) ((comm_ptr)->local_size)
-#define MPIR_Type_extent_impl(datatype, extent_ptr) MPID_Datatype_get_extent_macro(datatype, *(extent_ptr))
-#define MPIR_Type_size_impl(datatype, size) MPID_Datatype_get_size_macro(datatype, *(size))
-#define MPIR_Test_cancelled_impl(status, flag) *(flag) = MPIR_STATUS_GET_CANCEL_BIT(*(status))
-
-/* MPIR_ functions. These are versions of MPI_ functions appropriate for calling within MPI */
-int MPIR_Cancel_impl(MPID_Request *request_ptr);
-struct MPIR_Topology;
-void MPIR_Cart_rank_impl(struct MPIR_Topology *cart_ptr, const int *coords, int *rank);
-int MPIR_Cart_create_impl(MPID_Comm *comm_ptr, int ndims, const int dims[],
- const int periods[], int reorder, MPI_Comm *comm_cart);
-int MPIR_Cart_map_impl(const MPID_Comm *comm_ptr, int ndims, const int dims[],
- const int periodic[], int *newrank);
-int MPIR_Close_port_impl(const char *port_name);
-int MPIR_Open_port_impl(MPID_Info *info_ptr, char *port_name);
-int MPIR_Info_get_impl(MPID_Info *info_ptr, const char *key, int valuelen, char *value, int *flag);
-void MPIR_Info_get_nkeys_impl(MPID_Info *info_ptr, int *nkeys);
-int MPIR_Info_get_nthkey_impl(MPID_Info *info, int n, char *key);
-void MPIR_Info_get_valuelen_impl(MPID_Info *info_ptr, const char *key, int *valuelen, int *flag);
-int MPIR_Info_set_impl(MPID_Info *info_ptr, const char *key, const char *value);
-int MPIR_Info_dup_impl(MPID_Info *info_ptr, MPID_Info **new_info_ptr);
-int MPIR_Comm_delete_attr_impl(MPID_Comm *comm_ptr, MPID_Keyval *keyval_ptr);
-int MPIR_Comm_create_keyval_impl(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
- MPI_Comm_delete_attr_function *comm_delete_attr_fn,
- int *comm_keyval, void *extra_state);
-int MPIR_Comm_accept_impl(const char * port_name, MPID_Info * info_ptr, int root,
- MPID_Comm * comm_ptr, MPID_Comm ** newcomm_ptr);
-int MPIR_Comm_connect_impl(const char * port_name, MPID_Info * info_ptr, int root,
- MPID_Comm * comm_ptr, MPID_Comm ** newcomm_ptr);
-int MPIR_Comm_create_errhandler_impl(MPI_Comm_errhandler_function *function,
- MPI_Errhandler *errhandler);
-int MPIR_Comm_dup_impl(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr);
-int MPIR_Comm_dup_with_info_impl(MPID_Comm *comm_ptr, MPID_Info *info_ptr, MPID_Comm **newcomm_ptr);
-int MPIR_Comm_get_info_impl(MPID_Comm *comm_ptr, MPID_Info **info_ptr);
-int MPIR_Comm_set_info_impl(MPID_Comm *comm_ptr, MPID_Info *info_ptr);
-int MPIR_Comm_free_impl(MPID_Comm * comm_ptr);
-void MPIR_Comm_free_keyval_impl(int keyval);
-void MPIR_Comm_get_errhandler_impl(MPID_Comm *comm_ptr, MPID_Errhandler **errhandler_ptr);
-void MPIR_Comm_set_errhandler_impl(MPID_Comm *comm_ptr, MPID_Errhandler *errhandler_ptr);
-void MPIR_Comm_get_name_impl(MPID_Comm *comm, char *comm_name, int *resultlen);
-int MPIR_Intercomm_merge_impl(MPID_Comm *comm_ptr, int high, MPID_Comm **new_intracomm_ptr);
-int MPIR_Intercomm_create_impl(MPID_Comm *local_comm_ptr, int local_leader,
- MPID_Comm *peer_comm_ptr, int remote_leader, int tag,
- MPID_Comm **new_intercomm_ptr);
-int MPIR_Comm_group_impl(MPID_Comm *comm_ptr, MPID_Group **group_ptr);
-int MPIR_Comm_remote_group_impl(MPID_Comm *comm_ptr, MPID_Group **group_ptr);
-int MPIR_Comm_group_failed_impl(MPID_Comm *comm, MPID_Group **failed_group_ptr);
-int MPIR_Comm_remote_group_failed_impl(MPID_Comm *comm, MPID_Group **failed_group_ptr);
-int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **newcomm_ptr);
-int MPIR_Comm_split_type_impl(MPID_Comm *comm_ptr, int split_type, int key, MPID_Info *info_ptr,
- MPID_Comm **newcomm_ptr);
-int MPIR_Group_compare_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, int *result);
-int MPIR_Group_difference_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_Group **new_group_ptr);
-int MPIR_Group_excl_impl(MPID_Group *group_ptr, int n, const int *ranks, MPID_Group **new_group_ptr);
-int MPIR_Group_free_impl(MPID_Group *group_ptr);
-int MPIR_Group_incl_impl(MPID_Group *group_ptr, int n, const int *ranks, MPID_Group **new_group_ptr);
-int MPIR_Group_intersection_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_Group **new_group_ptr);
-int MPIR_Group_range_excl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MPID_Group **new_group_ptr);
-int MPIR_Group_range_incl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MPID_Group **new_group_ptr);
-int MPIR_Group_translate_ranks_impl(MPID_Group *group_ptr1, int n, const int *ranks1,
- MPID_Group *group_ptr2, int *ranks2);
-int MPIR_Group_union_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_Group **new_group_ptr);
-void MPIR_Get_count_impl(const MPI_Status *status, MPI_Datatype datatype, int *count);
-void MPIR_Grequest_complete_impl(MPID_Request *request_ptr);
-int MPIR_Grequest_start_impl(MPI_Grequest_query_function *query_fn,
- MPI_Grequest_free_function *free_fn,
- MPI_Grequest_cancel_function *cancel_fn,
- void *extra_state, MPID_Request **request_ptr);
-int MPIX_Grequest_start_impl(MPI_Grequest_query_function *,
- MPI_Grequest_free_function *,
- MPI_Grequest_cancel_function *,
- MPIX_Grequest_poll_function *,
- MPIX_Grequest_wait_function *, void *,
- MPID_Request **);
-int MPIR_Graph_map_impl(const MPID_Comm *comm_ptr, int nnodes,
- const int indx[], const int edges[], int *newrank);
-int MPIR_Type_commit_impl(MPI_Datatype *datatype);
-int MPIR_Type_create_struct_impl(int count,
- const int array_of_blocklengths[],
- const MPI_Aint array_of_displacements[],
- const MPI_Datatype array_of_types[],
- MPI_Datatype *newtype);
-int MPIR_Type_create_indexed_block_impl(int count,
- int blocklength,
- const int array_of_displacements[],
- MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-int MPIR_Type_create_hindexed_block_impl(int count, int blocklength,
- const MPI_Aint array_of_displacements[],
- MPI_Datatype oldtype, MPI_Datatype *newtype);
-int MPIR_Type_contiguous_impl(int count,
- MPI_Datatype old_type,
- MPI_Datatype *new_type_p);
-int MPIR_Type_contiguous_x_impl(MPI_Count count,
- MPI_Datatype old_type,
- MPI_Datatype *new_type_p);
-void MPIR_Type_get_extent_impl(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent);
-void MPIR_Type_get_true_extent_impl(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent);
-void MPIR_Type_get_envelope_impl(MPI_Datatype datatype, int *num_integers, int *num_addresses,
- int *num_datatypes, int *combiner);
-int MPIR_Type_hvector_impl(int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype *newtype_p);
-int MPIR_Type_indexed_impl(int count, const int blocklens[], const int indices[],
- MPI_Datatype old_type, MPI_Datatype *newtype);
-void MPIR_Type_free_impl(MPI_Datatype *datatype);
-int MPIR_Type_vector_impl(int count, int blocklength, int stride, MPI_Datatype old_type, MPI_Datatype *newtype_p);
-int MPIR_Type_struct_impl(int count, const int blocklens[], const MPI_Aint indices[], const MPI_Datatype old_types[], MPI_Datatype *newtype);
-int MPIR_Pack_impl(const void *inbuf, MPI_Aint incount, MPI_Datatype datatype, void *outbuf, MPI_Aint outcount, MPI_Aint *position);
-void MPIR_Pack_size_impl(int incount, MPI_Datatype datatype, MPI_Aint *size);
-int MPIR_Unpack_impl(const void *inbuf, MPI_Aint insize, MPI_Aint *position,
- void *outbuf, int outcount, MPI_Datatype datatype);
-void MPIR_Type_lb_impl(MPI_Datatype datatype, MPI_Aint *displacement);
-int MPIR_Ibsend_impl(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPI_Request *request);
-int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status);
-int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
- MPI_Status array_of_statuses[]);
-int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status);
-int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
- MPI_Status array_of_statuses[]);
-int MPIR_Comm_set_attr_impl(MPID_Comm *comm_ptr, int comm_keyval, void *attribute_val,
- MPIR_AttrType attrType);
-
-/* Pull the error status out of the tag space and put it into an errflag. */
-#undef FUNCNAME
-#define FUNCNAME MPIR_process_status
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline void MPIR_Process_status(MPI_Status *status, MPIR_Errflag_t *errflag)
-{
- if (MPI_PROC_NULL != status->MPI_SOURCE &&
- (MPIX_ERR_REVOKED == MPIR_ERR_GET_CLASS(status->MPI_ERROR) ||
- MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(status->MPI_ERROR) ||
- MPIR_TAG_CHECK_ERROR_BIT(status->MPI_TAG)) && !*errflag) {
- /* If the receive was completed within the MPID_Recv, handle the
- * errflag here. */
- if (MPIR_TAG_CHECK_PROC_FAILURE_BIT(status->MPI_TAG) ||
- MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(status->MPI_ERROR)) {
- *errflag = MPIR_ERR_PROC_FAILED;
- MPIR_TAG_CLEAR_ERROR_BITS(status->MPI_TAG);
- } else {
- *errflag = MPIR_ERR_OTHER;
- MPIR_TAG_CLEAR_ERROR_BITS(status->MPI_TAG);
- }
- }
-}
-
-extern const char MPIR_Version_string[];
-extern const char MPIR_Version_date[];
-extern const char MPIR_Version_configure[];
-extern const char MPIR_Version_device[];
-extern const char MPIR_Version_CC[];
-extern const char MPIR_Version_CXX[];
-extern const char MPIR_Version_F77[];
-extern const char MPIR_Version_FC[];
-
/* avoid conflicts in source files with old-style "char FCNAME[]" vars */
#undef FUNCNAME
#undef FCNAME
diff --git a/src/include/mpiinfo.h b/src/include/mpiinfo.h
deleted file mode 100644
index 7fb3259..0000000
--- a/src/include/mpiinfo.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-extern void MPIU_Info_free( MPID_Info *info_ptr );
-extern int MPIU_Info_alloc(MPID_Info **info_p_p);
diff --git a/src/include/mpimem.h b/src/include/mpimem.h
deleted file mode 100644
index cc4d1e0..0000000
--- a/src/include/mpimem.h
+++ /dev/null
@@ -1,482 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIMEM_H_INCLUDED
-#define MPIMEM_H_INCLUDED
-
-#ifndef MPICHCONF_H_INCLUDED
-#error 'mpimem.h requires that mpichconf.h be included first'
-#endif
-
-/* Make sure that we have the definitions for the malloc routines and size_t */
-#include <stdio.h>
-#include <stdlib.h>
-/* strdup is often declared in string.h, so if we plan to redefine strdup,
- we need to include string first. That is done below, only in the
- case where we redefine strdup */
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-#include "mpichconf.h"
-#include "mpl.h"
-
-/* Define attribute as empty if it has no definition */
-#ifndef ATTRIBUTE
-#define ATTRIBUTE(a)
-#endif
-
-/* ------------------------------------------------------------------------- */
-/* mpimem.h */
-/* ------------------------------------------------------------------------- */
-/* Memory allocation */
-/* style: allow:malloc:2 sig:0 */
-/* style: allow:free:2 sig:0 */
-/* style: allow:strdup:2 sig:0 */
-/* style: allow:calloc:2 sig:0 */
-/* style: allow:realloc:1 sig:0 */
-/* style: allow:alloca:1 sig:0 */
-/* style: define:__strdup:1 sig:0 */
-/* style: define:strdup:1 sig:0 */
-/* style: allow:fprintf:5 sig:0 */ /* For handle debugging ONLY */
-/* style: allow:snprintf:1 sig:0 */
-
-/*D
- Memory - Memory Management Routines
-
- Rules for memory management:
-
- MPICH explicity prohibits the appearence of 'malloc', 'free',
- 'calloc', 'realloc', or 'strdup' in any code implementing a device or
- MPI call (of course, users may use any of these calls in their code).
- Instead, you must use 'MPIU_Malloc' etc.; if these are defined
- as 'malloc', that is allowed, but an explicit use of 'malloc' instead of
- 'MPIU_Malloc' in the source code is not allowed. This restriction is
- made to simplify the use of portable tools to test for memory leaks,
- overwrites, and other consistency checks.
-
- Most memory should be allocated at the time that 'MPID_Init' is
- called and released with 'MPID_Finalize' is called. If at all possible,
- no other MPID routine should fail because memory could not be allocated
- (for example, because the user has allocated large arrays after 'MPI_Init').
-
- The implementation of the MPI routines will strive to avoid memory allocation
- as well; however, operations such as 'MPI_Type_index' that create a new
- data type that reflects data that must be copied from an array of arbitrary
- size will have to allocate memory (and can fail; note that there is an
- MPI error class for out-of-memory).
-
- Question:
- Do we want to have an aligned allocation routine? E.g., one that
- aligns memory on a cache-line.
- D*/
-
-/* Define the string copy and duplication functions */
-/* Safer string routines */
-int MPIU_Strncpy( char *outstr, const char *instr, size_t maxlen );
-
-int MPIU_Strnapp( char *, const char *, size_t );
-char *MPIU_Strdup( const char * );
-
-/* ---------------------------------------------------------------------- */
-/* FIXME - The string routines do not belong in the memory header file */
-/* FIXME - The string error code such be MPICH-usable error codes */
-#define MPIU_STR_SUCCESS 0
-#define MPIU_STR_FAIL -1
-#define MPIU_STR_NOMEM 1
-
-/* FIXME: Global types like this need to be discussed and agreed to */
-typedef int MPIU_BOOL;
-
-/* FIXME: These should be scoped to only the routines that need them */
-#ifdef USE_HUMAN_READABLE_TOKENS
-
-#define MPIU_STR_QUOTE_CHAR '\"'
-#define MPIU_STR_QUOTE_STR "\""
-#define MPIU_STR_DELIM_CHAR '='
-#define MPIU_STR_DELIM_STR "="
-#define MPIU_STR_ESCAPE_CHAR '\\'
-#define MPIU_STR_HIDE_CHAR '*'
-#define MPIU_STR_SEPAR_CHAR ' '
-#define MPIU_STR_SEPAR_STR " "
-
-#else
-
-#define MPIU_STR_QUOTE_CHAR '\"'
-#define MPIU_STR_QUOTE_STR "\""
-#define MPIU_STR_DELIM_CHAR '#'
-#define MPIU_STR_DELIM_STR "#"
-#define MPIU_STR_ESCAPE_CHAR '\\'
-#define MPIU_STR_HIDE_CHAR '*'
-#define MPIU_STR_SEPAR_CHAR '$'
-#define MPIU_STR_SEPAR_STR "$"
-
-#endif
-
-int MPIU_Str_get_string_arg(const char *str, const char *key, char *val,
- int maxlen);
-int MPIU_Str_get_binary_arg(const char *str, const char *key, char *buffer,
- int maxlen, int *out_length);
-int MPIU_Str_get_int_arg(const char *str, const char *key, int *val_ptr);
-int MPIU_Str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *key,
- const char *val);
-int MPIU_Str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *key,
- const char *buffer, int length);
-int MPIU_Str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *key,
- int val);
-MPIU_BOOL MPIU_Str_hide_string_arg(char *str, const char *key);
-int MPIU_Str_add_string(char **str_ptr, int *maxlen_ptr, const char *val);
-int MPIU_Str_get_string(char **str_ptr, char *val, int maxlen);
-
-/* ------------------------------------------------------------------------- */
-
-void MPIU_trinit(int);
-void *MPIU_trmalloc(size_t, int, const char []);
-void MPIU_trfree(void *, int, const char []);
-int MPIU_trvalid(const char []);
-void MPIU_trspace(size_t *, size_t *);
-void MPIU_trid(int);
-void MPIU_trlevel(int);
-void MPIU_trDebugLevel(int);
-void *MPIU_trcalloc(size_t, size_t, int, const char []);
-void *MPIU_trrealloc(void *, size_t, int, const char[]);
-void *MPIU_trstrdup(const char *, int, const char[]);
-void MPIU_TrSetMaxMem(size_t);
-void MPIU_trdump(FILE *, int);
-
-#ifdef USE_MEMORY_TRACING
-/*M
- MPIU_Malloc - Allocate memory
-
- Synopsis:
-.vb
- void *MPIU_Malloc( size_t len )
-.ve
-
- Input Parameter:
-. len - Length of memory to allocate in bytes
-
- Return Value:
- Pointer to allocated memory, or null if memory could not be allocated.
-
- Notes:
- This routine will often be implemented as the simple macro
-.vb
- #define MPIU_Malloc(n) malloc(n)
-.ve
- However, it can also be defined as
-.vb
- #define MPIU_Malloc(n) MPIU_trmalloc(n,__LINE__,__FILE__)
-.ve
- where 'MPIU_trmalloc' is a tracing version of 'malloc' that is included with
- MPICH.
-
- Module:
- Utility
- M*/
-#define MPIU_Malloc(a) MPIU_trmalloc((a),__LINE__,__FILE__)
-
-/*M
- MPIU_Calloc - Allocate memory that is initialized to zero.
-
- Synopsis:
-.vb
- void *MPIU_Calloc( size_t nelm, size_t elsize )
-.ve
-
- Input Parameters:
-+ nelm - Number of elements to allocate
-- elsize - Size of each element.
-
- Notes:
- Like 'MPIU_Malloc' and 'MPIU_Free', this will often be implemented as a
- macro but may use 'MPIU_trcalloc' to provide a tracing version.
-
- Module:
- Utility
- M*/
-#define MPIU_Calloc(a,b) \
- MPIU_trcalloc((a),(b),__LINE__,__FILE__)
-
-/*M
- MPIU_Free - Free memory
-
- Synopsis:
-.vb
- void MPIU_Free( void *ptr )
-.ve
-
- Input Parameter:
-. ptr - Pointer to memory to be freed. This memory must have been allocated
- with 'MPIU_Malloc'.
-
- Notes:
- This routine will often be implemented as the simple macro
-.vb
- #define MPIU_Free(n) free(n)
-.ve
- However, it can also be defined as
-.vb
- #define MPIU_Free(n) MPIU_trfree(n,__LINE__,__FILE__)
-.ve
- where 'MPIU_trfree' is a tracing version of 'free' that is included with
- MPICH.
-
- Module:
- Utility
- M*/
-#define MPIU_Free(a) MPIU_trfree(a,__LINE__,__FILE__)
-
-#define MPIU_Strdup(a) MPIU_trstrdup(a,__LINE__,__FILE__)
-
-#define MPIU_Realloc(a,b) MPIU_trrealloc((a),(b),__LINE__,__FILE__)
-
-/* Define these as invalid C to catch their use in the code */
-#define malloc(a) 'Error use MPIU_Malloc' :::
-#define calloc(a,b) 'Error use MPIU_Calloc' :::
-#define free(a) 'Error use MPIU_Free' :::
-#define realloc(a) 'Error use MPIU_Realloc' :::
-#if defined(strdup) || defined(__strdup)
-#undef strdup
-#endif
- /* We include string.h first, so that if it contains a definition of
- strdup, we won't have an obscure failure when a file include string.h
- later in the compilation process. */
-#include <string.h>
-
- /* The ::: should cause the compiler to choke; the string
- will give the explanation */
-#undef strdup /* in case strdup is a macro */
-#define strdup(a) 'Error use MPIU_Strdup' :::
-
-#else /* USE_MEMORY_TRACING */
-/* No memory tracing; just use native functions */
-#define MPIU_Malloc(a) malloc((size_t)(a))
-#define MPIU_Calloc(a,b) calloc((size_t)(a),(size_t)(b))
-#define MPIU_Free(a) free((void *)(a))
-#define MPIU_Realloc(a,b) realloc((void *)(a),(size_t)(b))
-
-#ifdef HAVE_STRDUP
-/* Watch for the case where strdup is defined as a macro by a header include */
-# if defined(NEEDS_STRDUP_DECL) && !defined(strdup)
-extern char *strdup( const char * );
-# endif
-#define MPIU_Strdup(a) strdup(a)
-#else
-/* Don't define MPIU_Strdup, provide it in safestr.c */
-#endif /* HAVE_STRDUP */
-
-#endif /* USE_MEMORY_TRACING */
-
-
-/* Memory allocation macros. See document. */
-
-/* Standard macro for generating error codes. We set the error to be
- * recoverable by default, but this can be changed. */
-#ifdef HAVE_ERROR_CHECKING
-#define MPIU_CHKMEM_SETERR(rc_,nbytes_,name_) \
- rc_=MPIR_Err_create_code( MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
- MPI_ERR_OTHER, "**nomem2", "**nomem2 %d %s", nbytes_, name_ )
-#else
-#define MPIU_CHKMEM_SETERR(rc_,nbytes_,name_) rc_=MPI_ERR_OTHER
-#endif
-
- /* CHKPMEM_REGISTER is used for memory allocated within another routine */
-
-/* Memory used and freed within the current scopy (alloca if feasible) */
-/* Configure with --enable-alloca to set USE_ALLOCA */
-#if defined(HAVE_ALLOCA) && defined(USE_ALLOCA)
-#ifdef HAVE_ALLOCA_H
-#include <alloca.h>
-#endif
-/* Define decl with a dummy definition to allow us to put a semi-colon
- after the macro without causing the declaration block to end (restriction
- imposed by C) */
-#define MPIU_CHKLMEM_DECL(n_) int dummy_ ATTRIBUTE((unused))
-#define MPIU_CHKLMEM_FREEALL()
-#define MPIU_CHKLMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
-{pointer_ = (type_)alloca(nbytes_); \
- if (!(pointer_) && (nbytes_ > 0)) { \
- MPIU_CHKMEM_SETERR(rc_,nbytes_,name_); \
- stmt_;\
-}}
-#else
-#define MPIU_CHKLMEM_DECL(n_) \
- void *(mpiu_chklmem_stk_[n_]); \
- int mpiu_chklmem_stk_sp_=0;\
- MPIU_AssertDeclValue(const int mpiu_chklmem_stk_sz_,n_)
-
-#define MPIU_CHKLMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
-{pointer_ = (type_)MPIU_Malloc(nbytes_); \
-if (pointer_) { \
- MPIU_Assert(mpiu_chklmem_stk_sp_<mpiu_chklmem_stk_sz_);\
- mpiu_chklmem_stk_[mpiu_chklmem_stk_sp_++] = pointer_;\
- } else if (nbytes_ > 0) { \
- MPIU_CHKMEM_SETERR(rc_,nbytes_,name_); \
- stmt_;\
-}}
-#define MPIU_CHKLMEM_FREEALL() \
- do { while (mpiu_chklmem_stk_sp_ > 0) {\
- MPIU_Free( mpiu_chklmem_stk_[--mpiu_chklmem_stk_sp_] ); } } while(0)
-#endif /* HAVE_ALLOCA */
-#define MPIU_CHKLMEM_MALLOC(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKLMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_)
-#define MPIU_CHKLMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKLMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,goto fn_fail)
-
-/* In some cases, we need to allocate large amounts of memory. This can
- be a problem if alloca is used, as the available stack space may be small.
- This is the same approach for the temporary memory as is used when alloca
- is not available. */
-#define MPIU_CHKLBIGMEM_DECL(n_) \
- void *(mpiu_chklbigmem_stk_[n_]);\
- int mpiu_chklbigmem_stk_sp_=0;\
- MPIU_AssertDeclValue(const int mpiu_chklbigmem_stk_sz_,n_)
-
-#define MPIU_CHKLBIGMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
-{pointer_ = (type_)MPIU_Malloc(nbytes_); \
-if (pointer_) { \
- MPIU_Assert(mpiu_chklbigmem_stk_sp_<mpiu_chklbigmem_stk_sz_);\
- mpiu_chklbigmem_stk_[mpiu_chklbigmem_stk_sp_++] = pointer_;\
- } else if (nbytes_ > 0) { \
- MPIU_CHKMEM_SETERR(rc_,nbytes_,name_); \
- stmt_;\
-}}
-#define MPIU_CHKLBIGMEM_FREEALL() \
- { while (mpiu_chklbigmem_stk_sp_ > 0) {\
- MPIU_Free( mpiu_chklbigmem_stk_[--mpiu_chklbigmem_stk_sp_] ); } }
-
-#define MPIU_CHKLBIGMEM_MALLOC(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKLBIGMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_)
-#define MPIU_CHKLBIGMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKLBIGMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,goto fn_fail)
-
-/* Persistent memory that we may want to recover if something goes wrong */
-#define MPIU_CHKPMEM_DECL(n_) \
- void *(mpiu_chkpmem_stk_[n_]) = { NULL }; \
- int mpiu_chkpmem_stk_sp_=0;\
- MPIU_AssertDeclValue(const int mpiu_chkpmem_stk_sz_,n_)
-#define MPIU_CHKPMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
-{pointer_ = (type_)MPIU_Malloc(nbytes_); \
-if (pointer_) { \
- MPIU_Assert(mpiu_chkpmem_stk_sp_<mpiu_chkpmem_stk_sz_);\
- mpiu_chkpmem_stk_[mpiu_chkpmem_stk_sp_++] = pointer_;\
- } else if (nbytes_ > 0) { \
- MPIU_CHKMEM_SETERR(rc_,nbytes_,name_); \
- stmt_;\
-}}
-#define MPIU_CHKPMEM_REGISTER(pointer_) \
- {MPIU_Assert(mpiu_chkpmem_stk_sp_<mpiu_chkpmem_stk_sz_);\
- mpiu_chkpmem_stk_[mpiu_chkpmem_stk_sp_++] = pointer_;}
-#define MPIU_CHKPMEM_REAP() \
- { while (mpiu_chkpmem_stk_sp_ > 0) {\
- MPIU_Free( mpiu_chkpmem_stk_[--mpiu_chkpmem_stk_sp_] ); } }
-#define MPIU_CHKPMEM_COMMIT() \
- mpiu_chkpmem_stk_sp_ = 0
-#define MPIU_CHKPMEM_MALLOC(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKPMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_)
-#define MPIU_CHKPMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKPMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,goto fn_fail)
-
-/* now the CALLOC version for zeroed memory */
-#define MPIU_CHKPMEM_CALLOC(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKPMEM_CALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_)
-#define MPIU_CHKPMEM_CALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_) \
- MPIU_CHKPMEM_CALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,goto fn_fail)
-#define MPIU_CHKPMEM_CALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
- do { \
- pointer_ = (type_)MPIU_Calloc(1, (nbytes_)); \
- if (pointer_) { \
- MPIU_Assert(mpiu_chkpmem_stk_sp_<mpiu_chkpmem_stk_sz_); \
- mpiu_chkpmem_stk_[mpiu_chkpmem_stk_sp_++] = pointer_; \
- } \
- else if (nbytes_ > 0) { \
- MPIU_CHKMEM_SETERR(rc_,nbytes_,name_); \
- stmt_; \
- } \
- } while (0)
-
-/* A special version for routines that only allocate one item */
-#define MPIU_CHKPMEM_MALLOC1(pointer_,type_,nbytes_,rc_,name_,stmt_) \
-{pointer_ = (type_)MPIU_Malloc(nbytes_); \
- if (!(pointer_) && (nbytes_ > 0)) { \
- MPIU_CHKMEM_SETERR(rc_,nbytes_,name_); \
- stmt_;\
-}}
-
-/* Provides a easy way to use realloc safely and avoid the temptation to use
- * realloc unsafely (direct ptr assignment). Zero-size reallocs returning NULL
- * are handled and are not considered an error. */
-#define MPIU_REALLOC_OR_FREE_AND_JUMP(ptr_,size_,rc_) do { \
- void *realloc_tmp_ = MPIU_Realloc((ptr_), (size_)); \
- if ((size_) && !realloc_tmp_) { \
- MPIU_Free(ptr_); \
- MPIR_ERR_SETANDJUMP2(rc_,MPI_ERR_OTHER,"**nomem2","**nomem2 %d %s",(size_),MPL_QUOTE(ptr_)); \
- } \
- (ptr_) = realloc_tmp_; \
-} while (0)
-/* this version does not free ptr_ */
-#define MPIU_REALLOC_ORJUMP(ptr_,size_,rc_) do { \
- void *realloc_tmp_ = MPIU_Realloc((ptr_), (size_)); \
- if (size_) \
- MPIR_ERR_CHKANDJUMP2(!realloc_tmp_,rc_,MPI_ERR_OTHER,"**nomem2","**nomem2 %d %s",(size_),MPL_QUOTE(ptr_)); \
- (ptr_) = realloc_tmp_; \
-} while (0)
-
-#if defined(HAVE_STRNCASECMP)
-# define MPIU_Strncasecmp strncasecmp
-#elif defined(HAVE_STRNICMP)
-# define MPIU_Strncasecmp strnicmp
-#else
-/* FIXME: Provide a fallback function ? */
-# error "No function defined for case-insensitive strncmp"
-#endif
-
-/* MPIU_Basename(path, basename)
- This function finds the basename in a path (ala "man 1 basename").
- *basename will point to an element in path.
- More formally: This function sets basename to the character just after the last '/' in path.
-*/
-void MPIU_Basename(char *path, char **basename);
-
-/* Evaluates to a boolean expression, true if the given byte ranges overlap,
- * false otherwise. That is, true iff [a_,a_+a_len_) overlaps with [b_,b_+b_len_) */
-#define MPIU_MEM_RANGES_OVERLAP(a_,a_len_,b_,b_len_) \
- ( ((char *)(a_) >= (char *)(b_) && ((char *)(a_) < ((char *)(b_) + (b_len_)))) || \
- ((char *)(b_) >= (char *)(a_) && ((char *)(b_) < ((char *)(a_) + (a_len_)))) )
-#if (!defined(NDEBUG) && defined(HAVE_ERROR_CHECKING))
-
-/* May be used to perform sanity and range checking on memcpy and mempcy-like
- function calls. This macro will bail out much like an MPIU_Assert if any of
- the checks fail. */
-#define MPIU_MEM_CHECK_MEMCPY(dst_,src_,len_) \
- do { \
- if (len_) { \
- MPIU_Assert((dst_) != NULL); \
- MPIU_Assert((src_) != NULL); \
- MPL_VG_CHECK_MEM_IS_ADDRESSABLE((dst_),(len_)); \
- MPL_VG_CHECK_MEM_IS_ADDRESSABLE((src_),(len_)); \
- if (MPIU_MEM_RANGES_OVERLAP((dst_),(len_),(src_),(len_))) { \
- MPIU_Assert_fmt_msg(FALSE,("memcpy argument memory ranges overlap, dst_=%p src_=%p len_=%ld\n", \
- (dst_), (src_), (long)(len_))); \
- } \
- } \
- } while (0)
-#else
-#define MPIU_MEM_CHECK_MEMCPY(dst_,src_,len_) do {} while(0)
-#endif
-
-/* valgrind macros are now provided by MPL (via mpl.h included in mpiimpl.h) */
-
-/* ------------------------------------------------------------------------- */
-/* end of mpimem.h */
-/* ------------------------------------------------------------------------- */
-
-#if defined(__cplusplus)
-}
-#endif
-#endif
diff --git a/src/include/mpir_assert.h b/src/include/mpir_assert.h
new file mode 100644
index 0000000..c4c698c
--- /dev/null
+++ b/src/include/mpir_assert.h
@@ -0,0 +1,130 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#if !defined(MPIR_ASSERT_H_INCLUDED)
+#define MPIR_ASSERT_H_INCLUDED
+
+#include "mpir_type_defs.h"
+
+/* modern versions of clang support lots of C11 features */
+#if defined(__has_extension)
+# if __has_extension(c_generic_selections)
+# define HAVE_C11__GENERIC 1
+# endif
+# if __has_extension(c_static_assert)
+# define HAVE_C11__STATIC_ASSERT 1
+# endif
+#endif
+
+/* GCC 4.6 added support for _Static_assert:
+ * http://gcc.gnu.org/gcc-4.6/changes.html */
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined __cplusplus
+# define HAVE_C11__STATIC_ASSERT 1
+#endif
+
+/* prototypes for assertion implementation helpers */
+int MPIR_Assert_fail(const char *cond, const char *file_name, int line_num);
+int MPIR_Assert_fail_fmt(const char *cond, const char *file_name, int line_num, const char *fmt, ...);
+
+/*
+ * MPIR_Assert()
+ *
+ * Similar to assert() except that it performs an MPID_Abort() when the
+ * assertion fails. Also, for Windows, it doesn't popup a
+ * mesage box on a remote machine.
+ */
+#if (!defined(NDEBUG) && defined(HAVE_ERROR_CHECKING))
+# define MPIR_AssertDeclValue(_a,_b) _a = _b
+# define MPIR_Assert(a_) \
+ do { \
+ if (unlikely(!(a_))) { \
+ MPIR_Assert_fail(#a_, __FILE__, __LINE__); \
+ } \
+ } while (0)
+#else
+# define MPIR_Assert(a_)
+/* Empty decls not allowed in C */
+# define MPIR_AssertDeclValue(_a,_b) _a ATTRIBUTE((unused)) = _b
+#endif
+
+/*
+ * MPIR_Assertp()
+ *
+ * Similar to MPIR_Assert() except that these assertions persist regardless of
+ * NDEBUG or HAVE_ERROR_CHECKING. MPIR_Assertp() may
+ * be used for error checking in prototype code, although it should be
+ * converted real error checking and reporting once the
+ * prototype becomes part of the official and supported code base.
+ */
+#define MPIR_Assertp(a_) \
+ do { \
+ if (unlikely(!(a_))) { \
+ MPIR_Assert_fail(#a_, __FILE__, __LINE__); \
+ } \
+ } while (0)
+
+/* Define the MPIR_Assert_fmt_msg macro. This macro takes two arguments. The
+ * first is the condition to assert. The second is a parenthesized list of
+ * arguments suitable for passing directly to printf that will yield a relevant
+ * error message. The macro will first evaluate the condition. If it evaluates
+ * to false the macro will take four steps:
+ *
+ * 1) It will emit an "Assertion failed..." message in the valgrind output with
+ * a backtrace, if valgrind client requests are available and the process is
+ * running under valgrind. It will also evaluate and print the supplied
+ * message.
+ * 2) It will emit an "Assertion failed..." message via MPL_internal_error_printf.
+ * The supplied error message will also be evaluated and printed.
+ * 3) It will similarly emit the assertion failure and caller supplied messages
+ * to the debug log, if enabled, via MPL_DBG_MSG_FMT.
+ * 4) It will invoke MPID_Abort, just like the other MPIR_Assert* macros.
+ *
+ * If the compiler doesn't support (...)/__VA_ARGS__ in macros then the user
+ * message will not be evaluated or printed. If NDEBUG is defined or
+ * HAVE_ERROR_CHECKING is undefined, this macro will expand to nothing, just
+ * like MPIR_Assert.
+ *
+ * Example usage:
+ *
+ * MPIR_Assert_fmg_msg(foo > bar,("foo is larger than bar: foo=%d bar=%d",foo,bar));
+ */
+#if (!defined(NDEBUG) && defined(HAVE_ERROR_CHECKING))
+# if defined(HAVE_MACRO_VA_ARGS)
+
+/* newlines are added internally by the impl function, callers do not need to include them */
+# define MPIR_Assert_fmt_msg(cond_,fmt_arg_parens_) \
+ do { \
+ if (unlikely(!(cond_))) { \
+ MPIR_Assert_fail_fmt(#cond_, __FILE__, __LINE__, \
+ fmt_msg_expand_ fmt_arg_parens_); \
+ } \
+ } while (0)
+/* helper to just expand the parens arg inline */
+# define fmt_msg_expand_(...) __VA_ARGS__
+
+# else /* defined(HAVE_MACRO_VA_ARGS) */
+
+# define MPIR_Assert_fmt_msg(cond_,fmt_arg_parens_) \
+ do { \
+ if (unlikely(!(cond_))) { \
+ MPIR_Assert_fail_fmt(#cond_, __FILE__, __LINE__, \
+ "%s", "macro __VA_ARGS__ not supported, unable to print user message"); \
+ } \
+ } while (0)
+
+# endif
+#else /* !defined(NDEBUG) && defined(HAVE_ERROR_CHECKING) */
+# define MPIR_Assert_fmt_msg(cond_,fmt_arg_parens_)
+#endif
+
+#ifdef HAVE_C11__STATIC_ASSERT
+# define MPIR_Static_assert(cond_,msg_) _Static_assert(cond_,msg_)
+#endif
+/* fallthrough to a run-time assertion */
+#ifndef MPIR_Static_assert
+# define MPIR_Static_assert(cond_,msg_) MPIR_Assert_fmt_msg((cond_), ("%s", (msg_)))
+#endif
+
+#endif /* !defined(MPIR_ASSERT_H_INCLUDED) */
diff --git a/src/include/mpir_attr.h b/src/include/mpir_attr.h
new file mode 100644
index 0000000..ca6e7ba
--- /dev/null
+++ b/src/include/mpir_attr.h
@@ -0,0 +1,205 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_ATTR_H_INCLUDED
+#define MPIR_ATTR_H_INCLUDED
+
+/* Because Comm, Datatype, and File handles are all ints, and because
+ attributes are otherwise identical between the three types, we
+ only store generic copy and delete functions. This allows us to use
+ common code for the attribute set, delete, and dup functions */
+/*E
+ copy_function - MPID Structure to hold an attribute copy function
+
+ Notes:
+ The appropriate element of this union is selected by using the language
+ field of the 'keyval'.
+
+ Because 'MPI_Comm', 'MPI_Win', and 'MPI_Datatype' are all 'int's in
+ MPICH, we use a single C copy function rather than have separate
+ ones for the Communicator, Window, and Datatype attributes.
+
+ There are no corresponding typedefs for the Fortran functions. The
+ F77 function corresponds to the Fortran 77 binding used in MPI-1 and the
+ F90 function corresponds to the Fortran 90 binding used in MPI-2.
+
+ Module:
+ Attribute-DS
+
+ E*/
+int
+MPII_Attr_copy_c_proxy(
+ MPI_Comm_copy_attr_function* user_function,
+ int handle,
+ int keyval,
+ void* extra_state,
+ MPIR_Attr_type attrib_type,
+ void* attrib,
+ void** attrib_copy,
+ int* flag
+ );
+
+typedef struct copy_function {
+ int (*C_CopyFunction)( int, int, void *, void *, void *, int * );
+ void (*F77_CopyFunction) ( MPI_Fint *, MPI_Fint *, MPI_Fint *, MPI_Fint *,
+ MPI_Fint *, MPI_Fint *, MPI_Fint * );
+ void (*F90_CopyFunction) ( MPI_Fint *, MPI_Fint *, MPI_Aint *, MPI_Aint *,
+ MPI_Aint *, MPI_Fint *, MPI_Fint * );
+ /* The generic lang-independent user_function and proxy will
+ * replace the lang dependent copy funcs above
+ * Currently the lang-indpendent funcs are used only for keyvals
+ */
+ MPI_Comm_copy_attr_function *user_function;
+ MPII_Attr_copy_proxy *proxy;
+ /* The C++ function is the same as the C function */
+} copy_function;
+
+/*E
+ delete_function - MPID Structure to hold an attribute delete function
+
+ Notes:
+ The appropriate element of this union is selected by using the language
+ field of the 'keyval'.
+
+ Because 'MPI_Comm', 'MPI_Win', and 'MPI_Datatype' are all 'int's in
+ MPICH, we use a single C delete function rather than have separate
+ ones for the Communicator, Window, and Datatype attributes.
+
+ There are no corresponding typedefs for the Fortran functions. The
+ F77 function corresponds to the Fortran 77 binding used in MPI-1 and the
+ F90 function corresponds to the Fortran 90 binding used in MPI-2.
+
+ Module:
+ Attribute-DS
+
+ E*/
+int
+MPII_Attr_delete_c_proxy(
+ MPI_Comm_delete_attr_function* user_function,
+ int handle,
+ int keyval,
+ MPIR_Attr_type attrib_type,
+ void* attrib,
+ void* extra_state
+ );
+
+typedef struct delete_function {
+ int (*C_DeleteFunction) ( int, int, void *, void * );
+ void (*F77_DeleteFunction)( MPI_Fint *, MPI_Fint *, MPI_Fint *, MPI_Fint *,
+ MPI_Fint * );
+ void (*F90_DeleteFunction)( MPI_Fint *, MPI_Fint *, MPI_Aint *, MPI_Aint *,
+ MPI_Fint * );
+ /* The generic lang-independent user_function and proxy will
+ * replace the lang dependent copy funcs above
+ * Currently the lang-indpendent funcs are used only for keyvals
+ */
+ MPI_Comm_delete_attr_function *user_function;
+ MPII_Attr_delete_proxy *proxy;
+} delete_function;
+
+/*S
+ MPII_Keyval - Structure of an MPID keyval
+
+ Module:
+ Attribute-DS
+
+ S*/
+typedef struct MPII_Keyval {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPII_Object_kind kind;
+ int was_freed;
+ void *extra_state;
+ copy_function copyfn;
+ delete_function delfn;
+ /* other, device-specific information */
+#ifdef MPID_DEV_KEYVAL_DECL
+ MPID_DEV_KEYVAL_DECL
+#endif
+} MPII_Keyval;
+
+#define MPII_Keyval_add_ref( _keyval ) \
+ do { \
+ MPIR_Object_add_ref( _keyval ); \
+ } while(0)
+
+#define MPII_Keyval_release_ref( _keyval, _inuse ) \
+ do { \
+ MPIR_Object_release_ref( _keyval, _inuse ); \
+ } while(0)
+
+
+/* Attribute values in C/C++ are void * and in Fortran are ADDRESS_SIZED
+ integers. Normally, these are the same size, but in at least one
+ case, the address-sized integers was selected as longer than void *
+ to work with the datatype code used in the I/O library. While this
+ is really a limitation in the current Datatype implementation. */
+#ifdef USE_AINT_FOR_ATTRVAL
+typedef MPI_Aint MPII_Attr_val_t;
+#else
+typedef void * MPII_Attr_val_t;
+#endif
+
+/* Attributes need no ref count or handle, but since we want to use the
+ common block allocator for them, we must provide those elements
+*/
+/*S
+ MPIR_Attribute - Structure of an MPID attribute
+
+ Notes:
+ Attributes don''t have 'ref_count's because they don''t have reference
+ count semantics. That is, there are no shallow copies or duplicates
+ of an attibute. An attribute is copied when the communicator that
+ it is attached to is duplicated. Subsequent operations, such as
+ 'MPI_Comm_attr_free', can change the attribute list for one of the
+ communicators but not the other, making it impractical to keep the
+ same list. (We could defer making the copy until the list is changed,
+ but even then, there would be no reference count on the individual
+ attributes.)
+
+ A pointer to the keyval, rather than the (integer) keyval itself is
+ used since there is no need within the attribute structure to make
+ it any harder to find the keyval structure.
+
+ The attribute value is a 'void *'. If 'sizeof(MPI_Fint)' > 'sizeof(void*)',
+ then this must be changed (no such system has been encountered yet).
+ For the Fortran 77 routines in the case where 'sizeof(MPI_Fint)' <
+ 'sizeof(void*)', the high end of the 'void *' value is used. That is,
+ we cast it to 'MPI_Fint *' and use that value.
+
+ MPI defines three kinds of attributes (see MPI 2.1, Section 16.3, pages
+ 487-488 (the standard says two, but there are really three, as discussed
+ below). These are pointer-valued attributes and two types of integer-valued
+ attributes.
+ Pointer-valued attributes are used in C.
+ Integer-valued attributes are used in Fortran. These are of type either
+ INTEGER or INTEGER(KIND=MPI_ADDRESS_KIND).
+
+ The predefined attributes are a combination of INTEGER and pointers.
+
+ Module:
+ Attribute-DS
+
+ S*/
+typedef struct MPIR_Attribute {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPII_Keyval *keyval; /* Keyval structure for this attribute */
+
+ struct MPIR_Attribute *next; /* Pointer to next in the list */
+ MPIR_Attr_type attrType; /* Type of the attribute */
+ long pre_sentinal; /* Used to detect user errors in accessing
+ the value */
+ MPII_Attr_val_t value; /* Stored value. An Aint must be at least
+ as large as an address - some builds
+ may make an Aint larger than a void * */
+ long post_sentinal; /* Like pre_sentinal */
+ /* other, device-specific information */
+#ifdef MPID_DEV_ATTR_DECL
+ MPID_DEV_ATTR_DECL
+#endif
+} MPIR_Attribute;
+
+#endif /* MPIR_ATTR_H_INCLUDED */
diff --git a/src/include/mpir_attr_generic.h b/src/include/mpir_attr_generic.h
new file mode 100644
index 0000000..f15c1f5
--- /dev/null
+++ b/src/include/mpir_attr_generic.h
@@ -0,0 +1,188 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIR_ATTR_GENERIC_H_INCLUDED
+#define MPIR_ATTR_GENERIC_H_INCLUDED
+
+/* ------------------------------------------------------------------------- */
+/* Keyvals and attributes */
+/*TKyOverview.tex
+
+ Keyvals are MPI objects that, unlike most MPI objects, are defined to be
+ integers rather than a handle (e.g., 'MPI_Comm'). However, they really
+ `are` MPI opaque objects and are handled by the MPICH implementation in
+ the same way as all other MPI opaque objects. The only difference is that
+ there is no 'typedef int MPI_Keyval;' in 'mpi.h'. In particular, keyvals
+ are encoded (for direct and indirect references) in the same way that
+ other MPI opaque objects are
+
+ Each keyval has a copy and a delete function associated with it.
+ Unfortunately, these have a slightly different calling sequence for
+ each language, particularly when the size of a pointer is
+ different from the size of a Fortran integer. The unions
+ 'copy_function' and 'delete_function' capture the differences
+ in a single union type.
+
+ The above comment is out of date but has never been updated as it should
+ have to match the introduction of a different interface. Beware!
+
+ Notes:
+
+ In the original design, retrieving a attribute from a different
+ language that set it was thought to be an error. The MPI Forum
+ decided that this should be allowed, and after much discussion, the
+ behavior was defined. Thus, we need to record what sort of
+ attribute was provided, and be able to properly return the correct
+ value in each case. See MPI 2.2, Section 16.3.7 (Attributes) for
+ specific requirements. One consequence of this is that the value
+ that is returned may have a different length that how it was set.
+ On little-endian platforms (e.g., x86), this doesn't cause much of a
+ problem, because the address is that of the least significant byte,
+ and the lower bytes have the data that is needed in the case that
+ the desired attribute type is shorter than the stored attribute.
+ However, on a big-endian platform (e.g., IBM POWER), since the most
+ significant bytes are stored first, depending on the length of the
+ result type, the address of the result may not be the beginning of
+ the memory area. For example, assume that an MPI_Fint is 4 bytes
+ and a void * (and a Fortran INTEGER of kind MPI_ADDRESS_KIND) is 8
+ bytes, and let the attribute store the value in an 8 byte integer in
+ a field named "value". On a little-endian platform, the address of
+ the value is always the beginning of the field "value". On a
+ big-endian platform, the address of the value is the beginning of
+ the field if the return type is a pointer (e.g., from C) or Fortran
+ (KIND=MPI_ADDRESS_KIND), and the address of the beginning of the
+ field + 4 if the return type is a Fortran 77 integer (and, as
+ specified above, an MPI_Fint is 4 bytes shorter than a void *).
+
+ For the big-endian case, it is possible to manage these shifts (using
+ WORDS_LITTLEENDIAN to detect the big-endian case). Alternatively,
+ at a small cost in space, copies in variables of the correct length
+ can be maintained. At this writing, the code in src/mpi/attr makes
+ use of WORDS_LITTLEENDIAN to provide the appropriate code for the most
+ common cases.
+
+ T*/
+/*TAttrOverview.tex
+ *
+ * The MPI standard allows `attributes`, essentially an '(integer,pointer)'
+ * pair, to be attached to communicators, windows, and datatypes.
+ * The integer is a `keyval`, which is allocated by a call (at the MPI level)
+ * to 'MPI_Comm/Type/Win_create_keyval'. The pointer is the value of
+ * the attribute.
+ * Attributes are primarily intended for use by the user, for example, to save
+ * information on a communicator, but can also be used to pass data to the
+ * MPI implementation. For example, an attribute may be used to pass
+ * Quality of Service information to an implementation to be used with
+ * communication on a particular communicator.
+ * To provide the most general access by the ADI to all attributes, the
+ * ADI defines a collection of routines that are used by the implementation
+ * of the MPI attribute routines (such as 'MPI_Comm_get_attr').
+ * In addition, the MPI routines involving attributes will invoke the
+ * corresponding 'hook' functions (e.g., 'MPID_Comm_attr_hook')
+ * should the device define them.
+ *
+ * Attributes on windows and datatypes are defined by MPI but not of
+ * interest (as yet) to the device.
+ *
+ * In addition, there are seven predefined attributes that the device must
+ * supply to the implementation. This is accomplished through
+ * data values that are part of the 'MPIR_Process' data block.
+ * The predefined keyvals on 'MPI_COMM_WORLD' are\:
+ *.vb
+ * Keyval Related Module
+ * MPI_APPNUM Dynamic
+ * MPI_HOST Core
+ * MPI_IO Core
+ * MPI_LASTUSEDCODE Error
+ * MPI_TAG_UB Communication
+ * MPI_UNIVERSE_SIZE Dynamic
+ * MPI_WTIME_IS_GLOBAL Timer
+ *.ve
+ * The values stored in the 'MPIR_Process' block are the actual values. For
+ * example, the value of 'MPI_TAG_UB' is the integer value of the largest tag.
+ * The
+ * value of 'MPI_WTIME_IS_GLOBAL' is a '1' for true and '0' for false. Likely
+ * values for 'MPI_IO' and 'MPI_HOST' are 'MPI_ANY_SOURCE' and 'MPI_PROC_NULL'
+ * respectively.
+ *
+ T*/
+
+/* bit 0 distinguishes between pointers (0) and integers (1) */
+typedef enum {
+ MPIR_ATTR_PTR=0,
+ MPIR_ATTR_AINT=1,
+ MPIR_ATTR_INT=3
+} MPIR_Attr_type;
+
+#define MPII_ATTR_KIND(_a) (_a & 0x1)
+
+MPICH_API_PUBLIC int MPII_Comm_set_attr( MPI_Comm, int, void *, MPIR_Attr_type );
+MPICH_API_PUBLIC int MPII_Type_set_attr( MPI_Datatype, int, void *, MPIR_Attr_type );
+MPICH_API_PUBLIC int MPII_Win_set_attr( MPI_Win, int, void *, MPIR_Attr_type );
+MPICH_API_PUBLIC int MPII_Comm_get_attr( MPI_Comm, int, void *, int *, MPIR_Attr_type );
+MPICH_API_PUBLIC int MPII_Type_get_attr( MPI_Datatype, int, void *, int *, MPIR_Attr_type );
+MPICH_API_PUBLIC int MPII_Win_get_attr( MPI_Win, int, void *, int *, MPIR_Attr_type );
+
+MPICH_API_PUBLIC int MPII_Comm_get_attr_fort( MPI_Comm, int, void *, int *, MPIR_Attr_type );
+
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*E
+ Language bindings for MPI
+
+ A few operations in MPI need to know how to marshal the callback into the calling
+ lanuage calling convention. The marshaling code is provided by a thunk layer which
+ implements the correct behavior. Examples of these callback functions are the
+ keyval attribute copy and delete functions.
+
+ Module:
+ Attribute-DS
+ E*/
+
+/*
+ * Support bindings for Attribute copy/del callbacks
+ * Consolidate Comm/Type/Win attribute functions together as the handle type is the same
+ * use MPI_Comm for the prototypes
+ */
+typedef
+int
+(MPII_Attr_copy_proxy)(
+ MPI_Comm_copy_attr_function* user_function,
+ int handle,
+ int keyval,
+ void* extra_state,
+ MPIR_Attr_type attrib_type,
+ void* attrib,
+ void** attrib_copy,
+ int* flag
+ );
+
+typedef
+int
+(MPII_Attr_delete_proxy)(
+ MPI_Comm_delete_attr_function* user_function,
+ int handle,
+ int keyval,
+ MPIR_Attr_type attrib_type,
+ void* attrib,
+ void* extra_state
+ );
+
+MPICH_API_PUBLIC void
+MPII_Keyval_set_proxy(
+ int keyval,
+ MPII_Attr_copy_proxy copy_proxy,
+ MPII_Attr_delete_proxy delete_proxy
+ );
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* MPIR_ATTR_GENERIC_H_INCLUDED */
diff --git a/src/include/mpir_coll.h b/src/include/mpir_coll.h
new file mode 100644
index 0000000..3b3a0c4
--- /dev/null
+++ b/src/include/mpir_coll.h
@@ -0,0 +1,451 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_COLL_H_INCLUDED
+#define MPIR_COLL_H_INCLUDED
+
+/* Collective operations */
+typedef struct MPIR_Collops {
+ int ref_count; /* Supports lazy copies */
+ /* Contains pointers to the functions for the MPI collectives */
+ int (*Barrier) (MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Bcast) (void*, int, MPI_Datatype, int, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Gather) (const void*, int, MPI_Datatype, void*, int, MPI_Datatype,
+ int, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Gatherv) (const void*, int, MPI_Datatype, void*, const int *, const int *,
+ MPI_Datatype, int, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Scatter) (const void*, int, MPI_Datatype, void*, int, MPI_Datatype,
+ int, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Scatterv) (const void*, const int *, const int *, MPI_Datatype,
+ void*, int, MPI_Datatype, int, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Allgather) (const void*, int, MPI_Datatype, void*, int,
+ MPI_Datatype, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Allgatherv) (const void*, int, MPI_Datatype, void*, const int *,
+ const int *, MPI_Datatype, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Alltoall) (const void*, int, MPI_Datatype, void*, int, MPI_Datatype,
+ MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Alltoallv) (const void*, const int *, const int *, MPI_Datatype,
+ void*, const int *, const int *, MPI_Datatype, MPIR_Comm *,
+ MPIR_Errflag_t *);
+ int (*Alltoallw) (const void*, const int *, const int *, const MPI_Datatype *, void*,
+ const int *, const int *, const MPI_Datatype *, MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Reduce) (const void*, void*, int, MPI_Datatype, MPI_Op, int,
+ MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Allreduce) (const void*, void*, int, MPI_Datatype, MPI_Op,
+ MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Reduce_scatter) (const void*, void*, const int *, MPI_Datatype, MPI_Op,
+ MPIR_Comm *, MPIR_Errflag_t *);
+ int (*Scan) (const void*, void*, int, MPI_Datatype, MPI_Op, MPIR_Comm *, MPIR_Errflag_t * );
+ int (*Exscan) (const void*, void*, int, MPI_Datatype, MPI_Op, MPIR_Comm *, MPIR_Errflag_t * );
+ int (*Reduce_scatter_block) (const void*, void*, int, MPI_Datatype, MPI_Op,
+ MPIR_Comm *, MPIR_Errflag_t *);
+
+ /* MPI-3 nonblocking collectives */
+ int (*Ibarrier_sched)(MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ibcast_sched)(void *buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Igather_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s);
+ int (*Igatherv_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Iscatter_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s);
+ int (*Iscatterv_sched)(const void *sendbuf, const int *sendcounts, const int *displs,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Iallgather_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s);
+ int (*Iallgatherv_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ialltoall_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s);
+ int (*Ialltoallv_sched)(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s);
+ int (*Ialltoallw_sched)(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype *recvtypes,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ireduce_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Iallreduce_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ireduce_scatter_sched)(const void *sendbuf, void *recvbuf, const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ireduce_scatter_block_sched)(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s);
+ int (*Iscan_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Iexscan_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+
+ struct MPIR_Collops *prev_coll_fns; /* when overriding this table, set this to point to the old table */
+
+ /* MPI-3 neighborhood collectives (blocking & nonblocking) */
+ int (*Neighbor_allgather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr);
+ int (*Neighbor_allgatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+ int (*Neighbor_alltoall)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr);
+ int (*Neighbor_alltoallv)(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+ int (*Neighbor_alltoallw)(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm *comm_ptr);
+ int (*Ineighbor_allgather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ineighbor_allgatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ineighbor_alltoall)(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+ int (*Ineighbor_alltoallv)(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s);
+ int (*Ineighbor_alltoallw)(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+} MPIR_Collops;
+
+
+/* Internal point-to-point communication for collectives */
+/* These functions are used in the implementation of collective and
+ other internal operations. They are wrappers around MPID send/recv
+ functions. They do sends/receives by setting the context offset to
+ MPIR_CONTEXT_INTRA(INTER)_COLL. */
+int MPIC_Wait(MPIR_Request * request_ptr, MPIR_Errflag_t *errflag);
+int MPIC_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status);
+
+int MPIC_Send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIC_Recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source, int tag,
+ MPIR_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag);
+int MPIC_Ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIC_Sendrecv(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtype,
+ int dest, int sendtag, void *recvbuf, MPI_Aint recvcount,
+ MPI_Datatype recvtype, int source, int recvtag,
+ MPIR_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag);
+int MPIC_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
+ int dest, int sendtag,
+ int source, int recvtag,
+ MPIR_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag);
+int MPIC_Isend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
+ MPIR_Comm *comm_ptr, MPIR_Request **request, MPIR_Errflag_t *errflag);
+int MPIC_Issend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
+ MPIR_Comm *comm_ptr, MPIR_Request **request, MPIR_Errflag_t *errflag);
+int MPIC_Irecv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source,
+ int tag, MPIR_Comm *comm_ptr, MPIR_Request **request);
+int MPIC_Waitall(int numreq, MPIR_Request *requests[], MPI_Status statuses[], MPIR_Errflag_t *errflag);
+
+
+/* Collective fallback implementations */
+int MPIR_Allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Allgather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Allgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Allgatherv_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm *comm_pt, MPIR_Errflag_t *errflag );
+int MPIR_Allgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Allreduce_impl(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Allreduce_intra(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Allreduce_inter(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Alltoall_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Alltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Alltoallv_impl(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
+ const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Errflag_t *errflag);
+int MPIR_Alltoallv(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
+ const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
+ const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Errflag_t *errflag);
+int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcnts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Alltoallw_impl(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts,
+ const int *rdispls, const MPI_Datatype *recvtypes, MPIR_Comm *comm_ptr,
+ MPIR_Errflag_t *errflag);
+int MPIR_Alltoallw(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts,
+ const int *rdispls, const MPI_Datatype *recvtypes, MPIR_Comm *comm_ptr,
+ MPIR_Errflag_t *errflag);
+int MPIR_Alltoallw_intra(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts,
+ const int *rdispls, const MPI_Datatype *recvtypes, MPIR_Comm *comm_ptr,
+ MPIR_Errflag_t *errflag);
+int MPIR_Alltoallw_inter(const void *sendbuf, const int *sendcnts, const int *sdispls,
+ const MPI_Datatype *sendtypes, void *recvbuf,
+ const int *recvcnts, const int *rdispls, const MPI_Datatype *recvtypes,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Bcast_inter(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Bcast_intra (void *buffer, int count, MPI_Datatype datatype, int
+ root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Bcast (void *buffer, int count, MPI_Datatype datatype, int
+ root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Bcast_impl (void *buffer, int count, MPI_Datatype datatype, int
+ root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Exscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Gather_impl (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Gather (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Gather_intra (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Gather_inter (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Gatherv (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcnts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Gatherv_impl (const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcnts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Reduce_scatter_impl(const void *sendbuf, void *recvbuf, const int *recvcnts,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Reduce_scatter(const void *sendbuf, void *recvbuf, const int *recvcnts,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int *recvcnts,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int *recvcnts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Reduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm
+ *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm
+ *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Reduce_scatter_block_intra(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm
+ *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Reduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm
+ *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Reduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Reduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Reduce_inter (const void *sendbuf, void *recvbuf, int count, MPI_Datatype
+ datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Scan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Scatter_impl(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Scatter(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Scatter_intra(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Scatter_inter(const void *sendbuf, int sendcnt, MPI_Datatype sendtype,
+ void *recvbuf, int recvcnt, MPI_Datatype recvtype,
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag );
+int MPIR_Scatterv_impl (const void *sendbuf, const int *sendcnts, const int *displs,
+ MPI_Datatype sendtype, void *recvbuf, int recvcnt,
+ MPI_Datatype recvtype, int root, MPIR_Comm
+ *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Scatterv (const void *sendbuf, const int *sendcnts, const int *displs,
+ MPI_Datatype sendtype, void *recvbuf, int recvcnt,
+ MPI_Datatype recvtype, int root, MPIR_Comm
+ *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Barrier_impl( MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Barrier( MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Barrier_intra( MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Barrier_inter( MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+int MPIR_Reduce_local_impl(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op);
+
+
+/* group collectives */
+int MPIR_Allreduce_group(void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
+int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
+
+
+int MPIR_Barrier_group(MPIR_Comm *comm_ptr, MPIR_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
+
+
+/* impl functions for NBC */
+int MPIR_Ibarrier_impl(MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Iscatterv_impl(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ialltoallv_impl(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ialltoallw_impl(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request);
+
+
+/* impl functions for neighborhood collectives */
+int MPIR_Ineighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ineighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ineighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ineighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Ineighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Neighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr);
+
+
+/* neighborhood collective default algorithms */
+int MPIR_Neighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr);
+int MPIR_Neighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr);
+int MPIR_Ineighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ineighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ineighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ineighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ineighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+
+
+/* nonblocking collective default algorithms */
+int MPIR_Ibcast_intra(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ibcast_inter(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iscatter_for_bcast(void *tmp_buf, int root, MPIR_Comm *comm_ptr, int nbytes, MPIR_Sched_t s);
+int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ibarrier_intra(MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ibarrier_inter(MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoallv_intra(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoallv_inter(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallreduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallreduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallreduce_naive(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Igather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iscatterv(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_intra(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_pairwise(const void *sendbuf, void *recvbuf, const int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_block_intra(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoall_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoall_inplace(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoall_perm_sr(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoall_pairwise(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgather_ring(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgatherv_ring(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgatherv_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iscan_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoallw_intra(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+int MPIR_Ialltoallw_inter(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPIR_Comm *comm_ptr, MPIR_Sched_t s);
+
+#endif /* MPIR_COLL_H_INCLUDED */
diff --git a/src/include/mpir_comm.h b/src/include/mpir_comm.h
new file mode 100644
index 0000000..cda9588
--- /dev/null
+++ b/src/include/mpir_comm.h
@@ -0,0 +1,355 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_COMM_H_INCLUDED
+#define MPIR_COMM_H_INCLUDED
+
+#if defined HAVE_LIBHCOLL
+#include "../mpid/common/hcoll/hcollpre.h"
+#endif
+
+/*E
+ MPIR_Comm_kind_t - Name the two types of communicators
+ E*/
+typedef enum MPIR_Comm_kind_t {
+ MPIR_COMM_KIND__INTRACOMM = 0,
+ MPIR_COMM_KIND__INTERCOMM = 1
+} MPIR_Comm_kind_t;
+
+/* ideally we could add these to MPIR_Comm_kind_t, but there's too much existing
+ * code that assumes that the only valid values are INTRACOMM or INTERCOMM */
+typedef enum MPIR_Comm_hierarchy_kind_t {
+ MPIR_COMM_HIERARCHY_KIND__FLAT = 0, /* no hierarchy */
+ MPIR_COMM_HIERARCHY_KIND__PARENT = 1, /* has subcommunicators */
+ MPIR_COMM_HIERARCHY_KIND__NODE_ROOTS = 2, /* is the subcomm for node roots */
+ MPIR_COMM_HIERARCHY_KIND__NODE = 3, /* is the subcomm for a node */
+ MPIR_COMM_HIERARCHY_KIND__SIZE /* cardinality of this enum */
+} MPIR_Comm_hierarchy_kind_t;
+
+typedef enum {
+ MPIR_COMM_MAP_TYPE__DUP,
+ MPIR_COMM_MAP_TYPE__IRREGULAR
+} MPIR_Comm_map_type_t;
+
+/* direction of mapping: local to local, local to remote, remote to
+ * local, remote to remote */
+typedef enum {
+ MPIR_COMM_MAP_DIR__L2L,
+ MPIR_COMM_MAP_DIR__L2R,
+ MPIR_COMM_MAP_DIR__R2L,
+ MPIR_COMM_MAP_DIR__R2R
+} MPIR_Comm_map_dir_t;
+
+typedef struct MPIR_Comm_map {
+ MPIR_Comm_map_type_t type;
+
+ struct MPIR_Comm *src_comm;
+
+ /* mapping direction for intercomms, which contain local and
+ * remote groups */
+ MPIR_Comm_map_dir_t dir;
+
+ /* only valid for irregular map type */
+ int src_mapping_size;
+ int *src_mapping;
+ int free_mapping; /* we allocated the mapping */
+
+ struct MPIR_Comm_map *next;
+} MPIR_Comm_map_t;
+
+int MPIR_Comm_map_irregular(struct MPIR_Comm *newcomm, struct MPIR_Comm *src_comm,
+ int *src_mapping, int src_mapping_size,
+ MPIR_Comm_map_dir_t dir,
+ MPIR_Comm_map_t **map);
+int MPIR_Comm_map_dup(struct MPIR_Comm *newcomm, struct MPIR_Comm *src_comm,
+ MPIR_Comm_map_dir_t dir);
+int MPIR_Comm_map_free(struct MPIR_Comm *comm);
+
+/*S
+ MPIR_Comm - Description of the Communicator data structure
+
+ Notes:
+ Note that the size and rank duplicate data in the groups that
+ make up this communicator. These are used often enough that this
+ optimization is valuable.
+
+ This definition provides only a 16-bit integer for context id''s .
+ This should be sufficient for most applications. However, extending
+ this to a 32-bit (or longer) integer should be easy.
+
+ There are two context ids. One is used for sending and one for
+ receiving. In the case of an Intracommunicator, they are the same
+ context id. They differ in the case of intercommunicators, where
+ they may come from processes in different comm worlds (in the
+ case of MPI-2 dynamic process intercomms).
+
+ The virtual connection table is an explicit member of this structure.
+ This contains the information used to contact a particular process,
+ indexed by the rank relative to this communicator.
+
+ Groups are allocated lazily. That is, the group pointers may be
+ null, created only when needed by a routine such as 'MPI_Comm_group'.
+ The local process ids needed to form the group are available within
+ the virtual connection table.
+ For intercommunicators, we may want to always have the groups. If not,
+ we either need the 'local_group' or we need a virtual connection table
+ corresponding to the 'local_group' (we may want this anyway to simplify
+ the implementation of the intercommunicator collective routines).
+
+ The pointer to the structure 'MPIR_Collops' containing pointers to the
+ collective
+ routines allows an implementation to replace each routine on a
+ routine-by-routine basis. By default, this pointer is null, as are the
+ pointers within the structure. If either pointer is null, the implementation
+ uses the generic provided implementation. This choice, rather than
+ initializing the table with pointers to all of the collective routines,
+ is made to reduce the space used in the communicators and to eliminate the
+ need to include the implementation of all collective routines in all MPI
+ executables, even if the routines are not used.
+
+ The macro 'MPID_HAS_HETERO' may be defined by a device to indicate that
+ the device supports MPI programs that must communicate between processes with
+ different data representations (e.g., different sized integers or different
+ byte orderings). If the device does need to define this value, it should
+ be defined in the file 'mpidpre.h'.
+
+ Please note that the local_size and remote_size fields can be confusing. For
+ intracommunicators both fields are always equal to the size of the
+ communicator. For intercommunicators local_size is equal to the size of
+ local_group while remote_size is equal to the size of remote_group.
+
+ Module:
+ Communicator-DS
+
+ Question:
+ For fault tolerance, do we want to have a standard field for communicator
+ health? For example, ok, failure detected, all (live) members of failed
+ communicator have acked.
+ S*/
+struct MPIR_Comm {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPID_Thread_mutex_t mutex;
+ MPIR_Context_id_t context_id; /* Send context id. See notes */
+ MPIR_Context_id_t recvcontext_id; /* Send context id. See notes */
+ int remote_size; /* Value of MPI_Comm_(remote)_size */
+ int rank; /* Value of MPI_Comm_rank */
+ MPIR_Attribute *attributes; /* List of attributes */
+ int local_size; /* Value of MPI_Comm_size for local group */
+ MPIR_Group *local_group, /* Groups in communicator. */
+ *remote_group; /* The local and remote groups are the
+ same for intra communicators */
+ MPIR_Comm_kind_t comm_kind; /* MPIR_COMM_KIND__INTRACOMM or MPIR_COMM_KIND__INTERCOMM */
+ char name[MPI_MAX_OBJECT_NAME]; /* Required for MPI-2 */
+ MPIR_Errhandler *errhandler; /* Pointer to the error handler structure */
+ struct MPIR_Comm *local_comm; /* Defined only for intercomms, holds
+ an intracomm for the local group */
+
+ MPIR_Comm_hierarchy_kind_t hierarchy_kind; /* flat, parent, node, or node_roots */
+ struct MPIR_Comm *node_comm; /* Comm of processes in this comm that are on
+ the same node as this process. */
+ struct MPIR_Comm *node_roots_comm; /* Comm of root processes for other nodes. */
+ int *intranode_table; /* intranode_table[i] gives the rank in
+ node_comm of rank i in this comm or -1 if i
+ is not in this process' node_comm.
+ It is of size 'local_size'. */
+ int *internode_table; /* internode_table[i] gives the rank in
+ node_roots_comm of rank i in this comm.
+ It is of size 'local_size'. */
+
+ int is_low_group; /* For intercomms only, this boolean is
+ set for all members of one of the
+ two groups of processes and clear for
+ the other. It enables certain
+ intercommunicator collective operations
+ that wish to use half-duplex operations
+ to implement a full-duplex operation */
+ struct MPIR_Comm *comm_next;/* Provides a chain through all active
+ communicators */
+ struct MPIR_Collops *coll_fns; /* Pointer to a table of functions
+ implementing the collective
+ routines */
+ struct MPII_Topo_ops *topo_fns; /* Pointer to a table of functions
+ implementting the topology routines */
+ int next_sched_tag; /* used by the NBC schedule code to allocate tags */
+
+ int revoked; /* Flag to track whether the communicator
+ * has been revoked */
+ MPIR_Info *info; /* Hints to the communicator */
+
+#ifdef MPID_HAS_HETERO
+ int is_hetero;
+#endif
+
+#if defined HAVE_LIBHCOLL
+ hcoll_comm_priv_t hcoll_priv;
+#endif /* HAVE_LIBHCOLL */
+
+ /* the mapper is temporarily filled out in order to allow the
+ * device to setup its network addresses. it will be freed after
+ * the device has initialized the comm. */
+ MPIR_Comm_map_t *mapper_head;
+ MPIR_Comm_map_t *mapper_tail;
+
+ /* Other, device-specific information */
+#ifdef MPID_DEV_COMM_DECL
+ MPID_DEV_COMM_DECL
+#endif
+};
+extern MPIR_Object_alloc_t MPIR_Comm_mem;
+
+/* this function should not be called by normal code! */
+int MPIR_Comm_delete_internal(MPIR_Comm * comm_ptr);
+
+#define MPIR_Comm_add_ref(_comm) \
+ do { MPIR_Object_add_ref((_comm)); } while (0)
+#define MPIR_Comm_release_ref( _comm, _inuse ) \
+ do { MPIR_Object_release_ref( _comm, _inuse ); } while (0)
+
+
+/* Release a reference to a communicator. If there are no pending
+ references, delete the communicator and recover all storage and
+ context ids.
+
+ This routine has been inlined because keeping it as a separate routine
+ results in a >5% performance hit for the SQMR benchmark.
+*/
+#undef FUNCNAME
+#define FUNCNAME MPIR_Comm_release
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIR_Comm_release(MPIR_Comm * comm_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int in_use;
+
+ MPIR_Comm_release_ref(comm_ptr, &in_use);
+ if (unlikely(!in_use)) {
+ /* the following routine should only be called by this function and its
+ * "_always" variant. */
+ mpi_errno = MPIR_Comm_delete_internal(comm_ptr);
+ /* not ERR_POPing here to permit simpler inlining. Our caller will
+ * still report the error from the comm_delete level. */
+ }
+
+ return mpi_errno;
+}
+#undef FUNCNAME
+#undef FCNAME
+
+/* MPIR_Comm_release_always is the same as MPIR_Comm_release except it uses
+ MPIR_Comm_release_ref_always instead.
+*/
+int MPIR_Comm_release_always(MPIR_Comm *comm_ptr);
+
+int MPIR_Comm_create( MPIR_Comm ** );
+int MPIR_Comm_create_group(MPIR_Comm * comm_ptr, MPIR_Group * group_ptr, int tag,
+ MPIR_Comm ** newcomm);
+
+/* implements the logic for MPI_Comm_create for intracommunicators only */
+int MPIR_Comm_create_intra(MPIR_Comm *comm_ptr, MPIR_Group *group_ptr,
+ MPIR_Comm **newcomm_ptr);
+
+
+int MPIR_Comm_commit( MPIR_Comm * );
+
+int MPIR_Comm_is_node_aware( MPIR_Comm * );
+
+int MPIR_Comm_idup_impl(MPIR_Comm *comm_ptr, MPIR_Comm **newcomm, MPIR_Request **reqp);
+
+int MPIR_Comm_shrink(MPIR_Comm *comm_ptr, MPIR_Comm **newcomm_ptr);
+int MPIR_Comm_agree(MPIR_Comm *comm_ptr, int *flag);
+
+#if defined(HAVE_ROMIO)
+int MPIR_Comm_split_filesystem(MPI_Comm comm, int key, const char *dirname, MPI_Comm *newcomm);
+#endif
+
+#define MPIR_Comm_rank(comm_ptr) ((comm_ptr)->rank)
+#define MPIR_Comm_size(comm_ptr) ((comm_ptr)->local_size)
+
+/* Communicator info hint functions */
+typedef int (*MPIR_Comm_hint_fn_t)(MPIR_Comm *, MPIR_Info *, void *);
+int MPIR_Comm_register_hint(const char *hint_key, MPIR_Comm_hint_fn_t fn, void *state);
+
+int MPIR_Comm_delete_attr_impl(MPIR_Comm *comm_ptr, MPII_Keyval *keyval_ptr);
+int MPIR_Comm_create_keyval_impl(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
+ MPI_Comm_delete_attr_function *comm_delete_attr_fn,
+ int *comm_keyval, void *extra_state);
+int MPIR_Comm_accept_impl(const char * port_name, MPIR_Info * info_ptr, int root,
+ MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm_ptr);
+int MPIR_Comm_connect_impl(const char * port_name, MPIR_Info * info_ptr, int root,
+ MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm_ptr);
+int MPIR_Comm_create_errhandler_impl(MPI_Comm_errhandler_function *function,
+ MPI_Errhandler *errhandler);
+int MPIR_Comm_dup_impl(MPIR_Comm *comm_ptr, MPIR_Comm **newcomm_ptr);
+int MPIR_Comm_dup_with_info_impl(MPIR_Comm *comm_ptr, MPIR_Info *info_ptr, MPIR_Comm **newcomm_ptr);
+int MPIR_Comm_get_info_impl(MPIR_Comm *comm_ptr, MPIR_Info **info_ptr);
+int MPIR_Comm_set_info_impl(MPIR_Comm *comm_ptr, MPIR_Info *info_ptr);
+int MPIR_Comm_free_impl(MPIR_Comm * comm_ptr);
+void MPIR_Comm_free_keyval_impl(int keyval);
+void MPIR_Comm_get_errhandler_impl(MPIR_Comm *comm_ptr, MPIR_Errhandler **errhandler_ptr);
+void MPIR_Comm_set_errhandler_impl(MPIR_Comm *comm_ptr, MPIR_Errhandler *errhandler_ptr);
+void MPIR_Comm_get_name_impl(MPIR_Comm *comm, char *comm_name, int *resultlen);
+int MPIR_Intercomm_merge_impl(MPIR_Comm *comm_ptr, int high, MPIR_Comm **new_intracomm_ptr);
+int MPIR_Intercomm_create_impl(MPIR_Comm *local_comm_ptr, int local_leader,
+ MPIR_Comm *peer_comm_ptr, int remote_leader, int tag,
+ MPIR_Comm **new_intercomm_ptr);
+int MPIR_Comm_group_impl(MPIR_Comm *comm_ptr, MPIR_Group **group_ptr);
+int MPIR_Comm_remote_group_impl(MPIR_Comm *comm_ptr, MPIR_Group **group_ptr);
+int MPIR_Comm_group_failed_impl(MPIR_Comm *comm, MPIR_Group **failed_group_ptr);
+int MPIR_Comm_remote_group_failed_impl(MPIR_Comm *comm, MPIR_Group **failed_group_ptr);
+int MPIR_Comm_split_impl(MPIR_Comm *comm_ptr, int color, int key, MPIR_Comm **newcomm_ptr);
+int MPIR_Comm_split_type_impl(MPIR_Comm *comm_ptr, int split_type, int key, MPIR_Info *info_ptr,
+ MPIR_Comm **newcomm_ptr);
+int MPIR_Comm_set_attr_impl(MPIR_Comm *comm_ptr, int comm_keyval, void *attribute_val,
+ MPIR_Attr_type attrType);
+
+
+/* Preallocated comm objects. There are 3: comm_world, comm_self, and
+ a private (non-user accessible) dup of comm world that is provided
+ if needed in MPI_Finalize. Having a separate version of comm_world
+ avoids possible interference with User code */
+#define MPIR_COMM_N_BUILTIN 3
+extern MPIR_Comm MPIR_Comm_builtin[MPIR_COMM_N_BUILTIN];
+extern MPIR_Comm MPIR_Comm_direct[];
+/* This is the handle for the internal MPI_COMM_WORLD . The "2" at the end
+ of the handle is 3-1 (e.g., the index in the builtin array) */
+#define MPIR_ICOMM_WORLD ((MPI_Comm)0x44000002)
+
+typedef struct MPIR_Commops {
+ int (*split_type)(MPIR_Comm *, int, int, MPIR_Info *, MPIR_Comm **);
+} MPIR_Commops;
+extern struct MPIR_Commops *MPIR_Comm_fns; /* Communicator creation functions */
+
+
+/* internal functions */
+
+int MPII_Comm_init(MPIR_Comm *);
+
+int MPII_Comm_is_node_consecutive( MPIR_Comm *);
+
+/* applies the specified info chain to the specified communicator */
+int MPII_Comm_apply_hints(MPIR_Comm *comm_ptr, MPIR_Info *info_ptr);
+
+int MPII_Comm_copy( MPIR_Comm *, int, MPIR_Comm ** );
+int MPII_Comm_copy_data(MPIR_Comm *comm_ptr, MPIR_Comm **outcomm_ptr);
+
+int MPII_Setup_intercomm_localcomm( MPIR_Comm * );
+
+/* comm_create helper functions, used by both comm_create and comm_create_group */
+int MPII_Comm_create_calculate_mapping(MPIR_Group *group_ptr,
+ MPIR_Comm *comm_ptr,
+ int **mapping_out,
+ MPIR_Comm **mapping_comm);
+
+int MPII_Comm_create_map(int local_n,
+ int remote_n,
+ int *local_mapping,
+ int *remote_mapping,
+ MPIR_Comm *mapping_comm,
+ MPIR_Comm *newcomm);
+
+#endif /* MPIR_COMM_H_INCLUDED */
diff --git a/src/include/mpir_contextid.h b/src/include/mpir_contextid.h
new file mode 100644
index 0000000..339e6e8
--- /dev/null
+++ b/src/include/mpir_contextid.h
@@ -0,0 +1,105 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_CONTEXTID_H_INCLUDED
+#define MPIR_CONTEXTID_H_INCLUDED
+
+#define MPIR_CONTEXT_ID_T_DATATYPE MPI_UINT16_T
+typedef uint16_t MPIR_Context_id_t;
+#define MPIR_INVALID_CONTEXT_ID ((MPIR_Context_id_t)0xffff)
+
+/* The following preprocessor macros provide bitfield access information for
+ * context ID values. They follow a uniform naming pattern:
+ *
+ * MPIR_CONTEXT_foo_WIDTH - the width in bits of the field
+ * MPIR_CONTEXT_foo_MASK - A valid bit mask for bit-wise AND and OR operations
+ * with exactly all of the bits in the field set.
+ * MPIR_CONTEXT_foo_SHIFT - The number of bits that the field should be shifted
+ * rightwards to place it in the least significant bits
+ * of the ID. There may still be higher order bits
+ * from other fields, so the _MASK should be used first
+ * if you want to reliably retrieve the exact value of
+ * the field.
+ */
+
+/* yields an rvalue that is the value of the field_name_ in the least significant bits */
+#define MPIR_CONTEXT_READ_FIELD(field_name_,id_) \
+ (((id_) & MPIR_CONTEXT_##field_name_##_MASK) >> MPIR_CONTEXT_##field_name_##_SHIFT)
+/* yields an rvalue that is the old_id_ with field_name_ set to field_val_ */
+#define MPIR_CONTEXT_SET_FIELD(field_name_,old_id_,field_val_) \
+ ((old_id_ & ~MPIR_CONTEXT_##field_name_##_MASK) | ((field_val_) << MPIR_CONTEXT_##field_name_##_SHIFT))
+
+/* Context suffixes for separating pt2pt and collective communication */
+#define MPIR_CONTEXT_SUFFIX_WIDTH (1)
+#define MPIR_CONTEXT_SUFFIX_SHIFT (0)
+#define MPIR_CONTEXT_SUFFIX_MASK ((1 << MPIR_CONTEXT_SUFFIX_WIDTH) - 1)
+#define MPIR_CONTEXT_INTRA_PT2PT (0)
+#define MPIR_CONTEXT_INTRA_COLL (1)
+#define MPIR_CONTEXT_INTER_PT2PT (0)
+#define MPIR_CONTEXT_INTER_COLL (1)
+
+/* Used to derive context IDs for sub-communicators from a parent communicator's
+ context ID value. This field comes after the one bit suffix.
+ values are shifted left by 1. */
+#define MPIR_CONTEXT_SUBCOMM_WIDTH (2)
+#define MPIR_CONTEXT_SUBCOMM_SHIFT (MPIR_CONTEXT_SUFFIX_WIDTH + MPIR_CONTEXT_SUFFIX_SHIFT)
+#define MPIR_CONTEXT_SUBCOMM_MASK (((1 << MPIR_CONTEXT_SUBCOMM_WIDTH) - 1) << MPIR_CONTEXT_SUBCOMM_SHIFT)
+
+/* these values may be added/subtracted directly to/from an existing context ID
+ * in order to determine the context ID of the child/parent */
+#define MPIR_CONTEXT_PARENT_OFFSET (0 << MPIR_CONTEXT_SUBCOMM_SHIFT)
+#define MPIR_CONTEXT_INTRANODE_OFFSET (1 << MPIR_CONTEXT_SUBCOMM_SHIFT)
+#define MPIR_CONTEXT_INTERNODE_OFFSET (2 << MPIR_CONTEXT_SUBCOMM_SHIFT)
+
+/* this field (IS_LOCALCOM) is used to derive a context ID for local
+ * communicators of intercommunicators without communication */
+#define MPIR_CONTEXT_IS_LOCALCOMM_WIDTH (1)
+#define MPIR_CONTEXT_IS_LOCALCOMM_SHIFT (MPIR_CONTEXT_SUBCOMM_SHIFT + MPIR_CONTEXT_SUBCOMM_WIDTH)
+#define MPIR_CONTEXT_IS_LOCALCOMM_MASK (((1 << MPIR_CONTEXT_IS_LOCALCOMM_WIDTH) - 1) << MPIR_CONTEXT_IS_LOCALCOMM_SHIFT)
+
+/* MPIR_MAX_CONTEXT_MASK is the number of ints that make up the bit vector that
+ * describes the context ID prefix space.
+ *
+ * The following must hold:
+ * (num_bits_in_vector) <= (maximum_context_id_prefix)
+ * which is the following in concrete terms:
+ * MPIR_MAX_CONTEXT_MASK*MPIR_CONTEXT_INT_BITS <= 2**(MPIR_CONTEXT_ID_BITS - (MPIR_CONTEXT_PREFIX_SHIFT + MPIR_CONTEXT_DYNAMIC_PROC_WIDTH))
+ *
+ * We currently always assume MPIR_CONTEXT_INT_BITS is 32, regardless of the
+ * value of sizeof(int)*CHAR_BITS. We also make the assumption that CHAR_BITS==8.
+ *
+ * For a 16-bit context id field and CHAR_BITS==8, this implies MPIR_MAX_CONTEXT_MASK <= 256
+ */
+
+/* number of bits to shift right by in order to obtain the context ID prefix */
+#define MPIR_CONTEXT_PREFIX_SHIFT (MPIR_CONTEXT_IS_LOCALCOMM_SHIFT + MPIR_CONTEXT_IS_LOCALCOMM_WIDTH)
+#define MPIR_CONTEXT_PREFIX_WIDTH (MPIR_CONTEXT_ID_BITS - (MPIR_CONTEXT_PREFIX_SHIFT + MPIR_CONTEXT_DYNAMIC_PROC_WIDTH))
+#define MPIR_CONTEXT_PREFIX_MASK (((1 << MPIR_CONTEXT_PREFIX_WIDTH) - 1) << MPIR_CONTEXT_PREFIX_SHIFT)
+
+#define MPIR_CONTEXT_DYNAMIC_PROC_WIDTH (1) /* the upper half is reserved for dynamic procs */
+#define MPIR_CONTEXT_DYNAMIC_PROC_SHIFT (MPIR_CONTEXT_ID_BITS - MPIR_CONTEXT_DYNAMIC_PROC_WIDTH) /* the upper half is reserved for dynamic procs */
+#define MPIR_CONTEXT_DYNAMIC_PROC_MASK (((1 << MPIR_CONTEXT_DYNAMIC_PROC_WIDTH) - 1) << MPIR_CONTEXT_DYNAMIC_PROC_SHIFT)
+
+/* should probably be (sizeof(int)*CHAR_BITS) once we make the code CHAR_BITS-clean */
+#define MPIR_CONTEXT_INT_BITS (32)
+#define MPIR_CONTEXT_ID_BITS (sizeof(MPIR_Context_id_t)*8) /* 8 --> CHAR_BITS eventually */
+#define MPIR_MAX_CONTEXT_MASK \
+ ((1 << (MPIR_CONTEXT_ID_BITS - (MPIR_CONTEXT_PREFIX_SHIFT + MPIR_CONTEXT_DYNAMIC_PROC_WIDTH))) / MPIR_CONTEXT_INT_BITS)
+
+/* Utility routines. Where possible, these are kept in the source directory
+ with the other comm routines (src/mpi/comm, in mpicomm.h). However,
+ to create a new communicator after a spawn or connect-accept operation,
+ the device may need to create a new contextid */
+int MPIR_Get_contextid_sparse(MPIR_Comm *comm_ptr, MPIR_Context_id_t *context_id, int ignore_id);
+int MPIR_Get_contextid_sparse_group(MPIR_Comm *comm_ptr, MPIR_Group *group_ptr, int tag, MPIR_Context_id_t *context_id, int ignore_id);
+
+int MPIR_Get_contextid_nonblock(MPIR_Comm *comm_ptr, MPIR_Comm *newcommp, MPIR_Request **req);
+int MPIR_Get_intercomm_contextid_nonblock(MPIR_Comm *comm_ptr, MPIR_Comm *newcommp, MPIR_Request **req);
+
+void MPIR_Free_contextid( MPIR_Context_id_t );
+
+#endif /* MPIR_CONTEXTID_H_INCLUDED */
diff --git a/src/include/mpir_cvars.h b/src/include/mpir_cvars.h
new file mode 100644
index 0000000..68abe18
--- /dev/null
+++ b/src/include/mpir_cvars.h
@@ -0,0 +1,183 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2010 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* Automatically generated
+ * by: ./maint/extractcvars
+ * on: Sun Nov 13 09:12:25 2016
+ *
+ * DO NOT EDIT!!!
+ */
+
+#if !defined(MPIR_CVARS_H_INCLUDED)
+#define MPIR_CVARS_H_INCLUDED
+
+#include "mpitimpl.h" /* for MPIR_T_cvar_range_value_t */
+
+/* Initializes cvar values from the environment */
+int MPIR_T_cvar_init(void);
+int MPIR_T_cvar_finalize(void);
+
+/* Extern declarations for each cvar
+ * (definitions in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util/cvar/mpir_cvars.c) */
+
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/topo/dims_create.c */
+extern int MPIR_CVAR_DIMS_VERBOSE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/initthread.c */
+extern int MPIR_CVAR_DEBUG_HOLD;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/initthread.c */
+extern int MPIR_CVAR_ERROR_CHECKING;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/init.c */
+extern int MPIR_CVAR_ASYNC_PROGRESS;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/init.c */
+extern char * MPIR_CVAR_DEFAULT_THREAD_LEVEL;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/finalize.c */
+extern int MPIR_CVAR_MEMDUMP;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/abort.c */
+extern int MPIR_CVAR_SUPPRESS_ABORT_MESSAGE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/reduce.c */
+extern int MPIR_CVAR_REDUCE_SHORT_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/reduce.c */
+extern int MPIR_CVAR_ENABLE_SMP_REDUCE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/reduce.c */
+extern int MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/red_scat.c */
+extern int MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/bcast.c */
+extern int MPIR_CVAR_BCAST_MIN_PROCS;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/bcast.c */
+extern int MPIR_CVAR_BCAST_SHORT_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/bcast.c */
+extern int MPIR_CVAR_BCAST_LONG_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/bcast.c */
+extern int MPIR_CVAR_ENABLE_SMP_BCAST;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/bcast.c */
+extern int MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/gatherv.c */
+extern int MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/allreduce.c */
+extern int MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/allreduce.c */
+extern int MPIR_CVAR_ENABLE_SMP_COLLECTIVES;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/allreduce.c */
+extern int MPIR_CVAR_ENABLE_SMP_ALLREDUCE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/allreduce.c */
+extern int MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/gather.c */
+extern int MPIR_CVAR_GATHER_VSMALL_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/gather.c */
+extern int MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/barrier.c */
+extern int MPIR_CVAR_ENABLE_SMP_BARRIER;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/allgather.c */
+extern int MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/allgather.c */
+extern int MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/alltoall.c */
+extern int MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/alltoall.c */
+extern int MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/alltoall.c */
+extern int MPIR_CVAR_ALLTOALL_THROTTLE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/scatter.c */
+extern int MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/allgatherv.c */
+extern int MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/comm/contextid.c */
+extern int MPIR_CVAR_CTXID_EAGER_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/comm/comm_split.c */
+extern int MPIR_CVAR_COMM_SPLIT_USE_QSORT;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/debugger/dbginit.c */
+extern int MPIR_CVAR_PROCTABLE_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/debugger/dbginit.c */
+extern int MPIR_CVAR_PROCTABLE_PRINT;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/errhan/errutil.c */
+extern int MPIR_CVAR_PRINT_ERROR_STACK;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/errhan/errutil.c */
+extern int MPIR_CVAR_CHOP_ERROR_STACK;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/nameserv/file/file_nameserv.c */
+extern char * MPIR_CVAR_NAMESERV_FILE_PUBDIR;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util/nodemap/build_nodemap.h */
+extern int MPIR_CVAR_NOLOCAL;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util/nodemap/build_nodemap.h */
+extern int MPIR_CVAR_ODD_EVEN_CLIQUES;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util/mem/handlemem.c */
+extern int MPIR_CVAR_ABORT_ON_LEAKED_HANDLES;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/include/mpir_err.h */
+extern int MPIR_CVAR_COLL_ALIAS_CHECK;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch4/src/ch4_init.h */
+extern char * MPIR_CVAR_CH4_NETMOD;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch4/src/ch4_init.h */
+extern char * MPIR_CVAR_CH4_SHM;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/ch3u_comm.c */
+extern int MPIR_CVAR_CH3_ENABLE_HCOLL;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpid_vc.c */
+extern int MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpid_rma.c */
+extern int MPIR_CVAR_CH3_RMA_SLOTS_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpid_rma.c */
+extern int MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/ch3u_port.c */
+extern int MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/ch3u_rma_ops.c */
+extern int MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/ch3u_rma_sync.c */
+extern int MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/ch3u_rma_sync.c */
+extern int MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/ch3u_rma_progress.c */
+extern int MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/ch3u_rma_progress.c */
+extern int MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpidi_rma.c */
+extern int MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpidi_rma.c */
+extern int MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpidi_rma.c */
+extern int MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpidi_rma.c */
+extern int MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpidi_rma.c */
+extern int MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c */
+extern int MPIR_CVAR_ENABLE_FT;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c */
+extern int MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c */
+extern int MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c */
+extern int MPIR_CVAR_NEMESIS_ENABLE_CKPOINT;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c */
+extern char * MPIR_CVAR_NEMESIS_NETMOD;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_dma.c */
+extern int MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h */
+extern int MPIR_CVAR_POLLS_BEFORE_YIELD;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c */
+extern char * MPIR_CVAR_OFI_USE_PROVIDER;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c */
+extern int MPIR_CVAR_OFI_DUMP_PROVIDERS;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+extern char * MPIR_CVAR_CH3_INTERFACE_HOSTNAME;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+extern MPIR_T_cvar_range_value_t MPIR_CVAR_CH3_PORT_RANGE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+extern char * MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+extern int MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c */
+extern int MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c */
+extern int MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT;
+/* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c */
+extern int MPIR_CVAR_NEMESIS_MXM_HUGEPAGE;
+
+/* TODO: this should be defined elsewhere */
+#define MPIR_CVAR_assert MPIR_Assert
+
+/* Arbitrary, simplifies interaction with external interfaces like MPI_T_ */
+#define MPIR_CVAR_MAX_STRLEN (384)
+
+#endif /* MPIR_CVARS_H_INCLUDED */
diff --git a/src/include/mpir_datatype.h b/src/include/mpir_datatype.h
new file mode 100644
index 0000000..f94abb5
--- /dev/null
+++ b/src/include/mpir_datatype.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_DATATYPE_H_INCLUDED
+#define MPIR_DATATYPE_H_INCLUDED
+
+/* This routine is used to install an attribute free routine for datatypes
+ at finalize-time */
+void MPII_Datatype_attr_finalize( void );
+
+#define MPIR_DATATYPE_IS_PREDEFINED(type) \
+ ((HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) || \
+ (type == MPI_FLOAT_INT) || (type == MPI_DOUBLE_INT) || \
+ (type == MPI_LONG_INT) || (type == MPI_SHORT_INT) || \
+ (type == MPI_LONG_DOUBLE_INT))
+
+int MPIR_Get_elements_x_impl(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *elements);
+int MPIR_Status_set_elements_x_impl(MPI_Status *status, MPI_Datatype datatype, MPI_Count count);
+void MPIR_Type_get_extent_x_impl(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
+void MPIR_Type_get_true_extent_x_impl(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Count *true_extent);
+int MPIR_Type_size_x_impl(MPI_Datatype datatype, MPI_Count *size);
+
+void MPIR_Get_count_impl(const MPI_Status *status, MPI_Datatype datatype, int *count);
+int MPIR_Type_commit_impl(MPI_Datatype *datatype);
+int MPIR_Type_create_struct_impl(int count,
+ const int array_of_blocklengths[],
+ const MPI_Aint array_of_displacements[],
+ const MPI_Datatype array_of_types[],
+ MPI_Datatype *newtype);
+int MPIR_Type_create_indexed_block_impl(int count,
+ int blocklength,
+ const int array_of_displacements[],
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype);
+int MPIR_Type_create_hindexed_block_impl(int count, int blocklength,
+ const MPI_Aint array_of_displacements[],
+ MPI_Datatype oldtype, MPI_Datatype *newtype);
+int MPIR_Type_contiguous_impl(int count,
+ MPI_Datatype old_type,
+ MPI_Datatype *new_type_p);
+int MPIR_Type_contiguous_x_impl(MPI_Count count,
+ MPI_Datatype old_type,
+ MPI_Datatype *new_type_p);
+void MPIR_Type_get_extent_impl(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent);
+void MPIR_Type_get_true_extent_impl(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent);
+void MPIR_Type_get_envelope_impl(MPI_Datatype datatype, int *num_integers, int *num_addresses,
+ int *num_datatypes, int *combiner);
+int MPIR_Type_hvector_impl(int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype *newtype_p);
+int MPIR_Type_indexed_impl(int count, const int blocklens[], const int indices[],
+ MPI_Datatype old_type, MPI_Datatype *newtype);
+void MPIR_Type_free_impl(MPI_Datatype *datatype);
+int MPIR_Type_vector_impl(int count, int blocklength, int stride, MPI_Datatype old_type, MPI_Datatype *newtype_p);
+int MPIR_Type_struct_impl(int count, const int blocklens[], const MPI_Aint indices[], const MPI_Datatype old_types[], MPI_Datatype *newtype);
+int MPIR_Pack_impl(const void *inbuf, MPI_Aint incount, MPI_Datatype datatype, void *outbuf, MPI_Aint outcount, MPI_Aint *position);
+void MPIR_Pack_size_impl(int incount, MPI_Datatype datatype, MPI_Aint *size);
+int MPIR_Unpack_impl(const void *inbuf, MPI_Aint insize, MPI_Aint *position,
+ void *outbuf, int outcount, MPI_Datatype datatype);
+void MPIR_Type_lb_impl(MPI_Datatype datatype, MPI_Aint *displacement);
+
+#endif /* MPIR_DATATYPE_H_INCLUDED */
diff --git a/src/include/mpir_dbg.h b/src/include/mpir_dbg.h
new file mode 100644
index 0000000..3cd1d28
--- /dev/null
+++ b/src/include/mpir_dbg.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_DBG_H_INCLUDED
+#define MPIR_DBG_H_INCLUDED
+
+#if defined (MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIR_DBG_INIT;
+extern MPL_dbg_class MPIR_DBG_PT2PT;
+extern MPL_dbg_class MPIR_DBG_THREAD;
+extern MPL_dbg_class MPIR_DBG_DATATYPE;
+extern MPL_dbg_class MPIR_DBG_COMM;
+extern MPL_dbg_class MPIR_DBG_BSEND;
+extern MPL_dbg_class MPIR_DBG_ERRHAND;
+extern MPL_dbg_class MPIR_DBG_OTHER;
+extern MPL_dbg_class MPIR_DBG_REQUEST;
+extern MPL_dbg_class MPIR_DBG_ASSERT;
+#endif /* MPL_USE_DBG_LOGGING */
+
+#endif /* MPIR_DBG_H_INCLUDED */
diff --git a/src/include/mpir_debugger.h b/src/include/mpir_debugger.h
new file mode 100644
index 0000000..1287c7c
--- /dev/null
+++ b/src/include/mpir_debugger.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_DEBUGGER_H_INCLUDED
+#define MPIR_DEBUGGER_H_INCLUDED
+
+/* These macros allow us to implement a sendq when debugger support is
+ selected. As there is extra overhead for this, we only do this
+ when specifically requested
+*/
+#ifdef HAVE_DEBUGGER_SUPPORT
+void MPIR_Debugger_set_aborting( const char * );
+
+/* internal functions */
+void MPII_Wait_for_debugger( void );
+void MPII_Sendq_remember(MPIR_Request *, int, int, int );
+void MPII_Sendq_forget(MPIR_Request *);
+void MPII_CommL_remember( MPIR_Comm * );
+void MPII_CommL_forget( MPIR_Comm * );
+
+#define MPII_SENDQ_REMEMBER(_a,_b,_c,_d) MPII_Sendq_remember(_a,_b,_c,_d)
+#define MPII_SENDQ_FORGET(_a) MPII_Sendq_forget(_a)
+#define MPII_COMML_REMEMBER(_a) MPII_CommL_remember( _a )
+#define MPII_COMML_FORGET(_a) MPII_CommL_forget( _a )
+#define MPII_REQUEST_CLEAR_DBG(_r) ((_r)->u.send.dbg_next = NULL)
+#else
+#define MPII_SENDQ_REMEMBER(a,b,c,d)
+#define MPII_SENDQ_FORGET(a)
+#define MPII_COMML_REMEMBER(_a)
+#define MPII_COMML_FORGET(_a)
+#define MPII_REQUEST_CLEAR_DBG(_r)
+#endif
+
+#endif /* MPIR_DEBUGGER_H_INCLUDED */
diff --git a/src/include/mpir_err.h b/src/include/mpir_err.h
new file mode 100644
index 0000000..4ed569c
--- /dev/null
+++ b/src/include/mpir_err.h
@@ -0,0 +1,1000 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIR_ERR_H_INCLUDED
+#define MPIR_ERR_H_INCLUDED
+
+/* Error severity */
+#define MPIR_ERR_FATAL 1
+#define MPIR_ERR_RECOVERABLE 0
+
+struct MPIR_Comm;
+struct MPIR_Win;
+
+/* Bindings for internal routines */
+MPICH_API_PUBLIC int MPIR_Err_return_comm( struct MPIR_Comm *, const char [], int );
+MPICH_API_PUBLIC int MPIR_Err_return_win( struct MPIR_Win *, const char [], int );
+#ifdef MPI__FILE_DEFINED
+/* Only define if we have MPI_File */
+MPICH_API_PUBLIC int MPIR_Err_return_file( MPI_File, const char [], int ); /* Romio version */
+#endif
+/* FIXME:
+ * Update this description to match the current version of the routine,
+ * in particular, the pseudo-format types (even better, fix it so that
+ * the pseudo format types can work with the format attribute check).
+ */
+/*@
+ MPIR_Err_create_code - Create an error code and associated message
+ to report an error
+
+ Input Parameters:
++ lastcode - Previous error code (see notes)
+. severity - Indicates severity of error
+. fcname - Name of the function in which the error has occurred.
+. line - Line number (usually '__LINE__')
+. class - Error class
+. generic_msg - A generic message to be used if not instance-specific
+ message is available
+. instance_msg - A message containing printf-style formatting commands
+ that, when combined with the instance_parameters, specify an error
+ message containing instance-specific data.
+- instance_parameters - The remaining parameters. These must match
+ the formatting commands in 'instance_msg'.
+
+ Notes:
+ A typical use is\:
+.vb
+ mpi_errno = MPIR_Err_create_code( mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPI_ERR_RANK,
+ "Invalid Rank", "Invalid rank %d", rank );
+.ve
+
+ Predefined message may also be used. Any message that uses the
+ prefix '"**"' will be looked up in a table. This allows standardized
+ messages to be used for a message that is used in several different locations
+ in the code. For example, the name '"**rank"' might be used instead of
+ '"Invalid Rank"'; this would also allow the message to be made more
+ specific and useful, such as
+.vb
+ Invalid rank provided. The rank must be between 0 and the 1 less than
+ the size of the communicator in this call.
+.ve
+ This interface is compatible with the 'gettext' interface for
+ internationalization, in the sense that the 'generic_msg' and 'instance_msg'
+ may be used as arguments to 'gettext' to return a string in the appropriate
+ language; the implementation of 'MPID_Err_create_code' can then convert
+ this text into the appropriate code value.
+
+ The current set of formatting commands is undocumented and will change.
+ You may safely use '%d' and '%s' (though only use '%s' for names of
+ objects, not text messages, as using '%s' for a message breaks support for
+ internationalization.
+
+ This interface allows error messages to be chained together. The first
+ argument is the last error code; if there is no previous error code,
+ use 'MPI_SUCCESS'.
+
+ Extended Format Specifiers:
+ In addition to the standard format specifies (e.g., %d for an int value),
+ MPIR_Err_create_code accepts some additional values that correspond to
+ various MPI types:
++ i - an MPI rank; recognizes 'MPI_ANY_SOURCE', 'MPI_PROC_NULL', and
+ 'MPI_ROOT'
+. t - an MPI tag; recognizes 'MPI_ANY_TAG'.
+. A - an MPI assert value.
+. C - an MPI communicator.
+. D - an MPI datatype.
+. E - an MPI Errhandler.
+. F - an MPI File object.
+. G - an MPI Group.
+. I - an MPI info object.
+. O - an MPI Op.
+. R - an MPI Request.
+- W - an MPI Window object.
+
+
+ Module:
+ Error
+
+ @*/
+MPICH_API_PUBLIC int MPIR_Err_create_code( int, int, const char [], int, int, const char [], const char [], ... );
+
+#ifdef USE_ERR_CODE_VALIST
+int MPIR_Err_create_code_valist( int, int, const char [], int, int, const char [], const char [], va_list );
+#endif
+
+/*@
+ MPIR_Err_combine_codes - Combine two error codes, or more importantly
+ two lists of error messages. The list associated with the second error
+ code is appended to the list associated with the first error code. If
+ the list associated with the first error code has a dangling tail, which
+ is possible if the ring has wrapped and overwritten entries that were
+ once part of the list, then the append operation is not performed and
+ the error code for the first list is returned.
+
+ Input Parameter:
++ errorcode1 - the error code associated with the first list
+- errorcode2 - the error code associated with the second list
+
+ Return value:
+ An error code which resolves to the combined list of error messages
+
+ Notes:
+ If errorcode1 is equal to MPI_SUCCESS, then errorcode2 is returned.
+ Likewise, if errorcode2 is equal to MPI_SUCCESS, then errorcode1 is
+ returned.
+
+ Module:
+ Error
+ @*/
+int MPIR_Err_combine_codes(int, int);
+
+int MPIR_Err_is_fatal(int);
+void MPIR_Err_init(void);
+void MPIR_Err_preOrPostInit( void );
+
+int MPIR_Err_set_msg( int code, const char *msg_string );
+
+/* This routine is called when there is a fatal error. Now public because file
+ * error handling is defined in a separate file from comm and win, but all
+ * three need to call it */
+void MPIR_Handle_fatal_error(struct MPIR_Comm *comm_ptr,
+ const char fcname[], int errcode);
+
+#define MPIR_ERR_CLASS_MASK 0x0000007f
+#define MPIR_ERR_CLASS_SIZE 128
+#define MPIR_ERR_GET_CLASS(mpi_errno_) (mpi_errno_ & MPIR_ERR_CLASS_MASK)
+
+
+/* ------------------------------------------------------------------------- */
+/* mpir_err.h */
+/* ------------------------------------------------------------------------- */
+
+/*
+=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
+
+cvars:
+ - name : MPIR_CVAR_COLL_ALIAS_CHECK
+ category : COLLECTIVE
+ type : int
+ default : 1
+ class : device
+ verbosity : MPI_T_VERBOSITY_USER_BASIC
+ scope : MPI_T_SCOPE_ALL_EQ
+ description : >-
+ Enable checking of aliasing in collective operations
+
+=== END_MPI_T_CVAR_INFO_BLOCK ===
+*/
+
+/* Error checking (see --enable-error-checking for control of this) */
+#ifdef HAVE_ERROR_CHECKING
+
+#define MPID_ERROR_LEVEL_ALL 1
+#define MPID_ERROR_LEVEL_RUNTIME 2
+/* Use MPID_ERROR_DECL to wrap declarations that are needed only when
+ error checking is turned on */
+#define MPID_ERROR_DECL(a) a
+
+#if HAVE_ERROR_CHECKING == MPID_ERROR_LEVEL_ALL
+#define MPID_BEGIN_ERROR_CHECKS
+#define MPID_END_ERROR_CHECKS
+#define MPID_ELSE_ERROR_CHECKS
+#elif HAVE_ERROR_CHECKING == MPID_ERROR_LEVEL_RUNTIME
+#define MPID_BEGIN_ERROR_CHECKS if (MPIR_Process.do_error_checks) {
+#define MPID_ELSE_ERROR_CHECKS }else{
+#define MPID_END_ERROR_CHECKS }
+#else
+#error "Unknown value for error checking"
+#endif
+
+#else
+#define MPID_BEGIN_ERROR_CHECKS
+#define MPID_END_ERROR_CHECKS
+#define MPID_ERROR_DECL(a)
+#endif /* HAVE_ERROR_CHECKING */
+
+/*
+ * Standardized error checking macros. These provide the correct tests for
+ * common tests. These set err with the encoded error value.
+ */
+#define MPIR_ERRTEST_SEND_TAG(tag,err) \
+ if ((tag) < 0 || (tag) > MPIR_Process.attrs.tag_ub) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_TAG, "**tag", "**tag %d", tag); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_RECV_TAG(tag,err) \
+ if ((tag) < MPI_ANY_TAG || (tag) > MPIR_Process.attrs.tag_ub) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_TAG, "**tag", "**tag %d", tag ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_RANK(comm_ptr,rank,err) \
+ if ((rank) < 0 || (rank) >= (comm_ptr)->remote_size) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_RANK, "**rank", "**rank %d %d", rank, \
+ (comm_ptr)->remote_size ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_SEND_RANK(comm_ptr,rank,err) \
+ if ((rank) < MPI_PROC_NULL || (rank) >= (comm_ptr)->remote_size) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_RANK, "**rank", "**rank %d %d", rank, \
+ (comm_ptr)->remote_size ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_RECV_RANK(comm_ptr,rank,err) \
+ if ((rank) < MPI_ANY_SOURCE || (rank) >= (comm_ptr)->remote_size) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_RANK, "**rank", "**rank %d %d", rank, \
+ (comm_ptr)->remote_size ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_COUNT(count,err) \
+ if ((count) < 0) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_COUNT, \
+ "**countneg", \
+ "**countneg %d", \
+ count ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_DISP(disp,err) \
+ if ((disp) < 0) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_DISP, \
+ "**rmadisp", 0 ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_ALIAS(ptr1,ptr2,err) \
+ if ((ptr1)==(ptr2) && (ptr1) != MPI_BOTTOM) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_BUFFER, \
+ "**bufalias", 0 ); \
+ goto fn_fail; \
+ }
+
+/* FIXME this test is probably too broad. Comparing the (buffer,type,count)
+ * tuples is really what is needed to check for aliasing. */
+#define MPIR_ERRTEST_ALIAS_COLL(ptr1,ptr2,err) \
+ if (MPIR_CVAR_COLL_ALIAS_CHECK && (ptr1)==(ptr2)) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_BUFFER, \
+ "**bufalias", 0 ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_ARGNULL(arg,arg_name,err) \
+ if (!(arg)) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_ARG, \
+ "**nullptr", \
+ "**nullptr %s", \
+ arg_name ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_ARGNEG(arg,arg_name,err) \
+ if ((arg) < 0) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, MPI_ERR_ARG, \
+ "**argneg", \
+ "**argneg %s %d", arg_name, arg ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_ARGNONPOS(arg,arg_name,err,errclass) \
+ if ((arg) <= 0) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ errclass, \
+ "**argnonpos", \
+ "**argnonpos %s %d", \
+ arg_name, arg ); \
+ goto fn_fail; \
+ }
+
+/* An intracommunicator must have a root between 0 and local_size-1. */
+/* intercomm can be between MPI_PROC_NULL (or MPI_ROOT) and remote_size-1 */
+#define MPIR_ERRTEST_INTRA_ROOT(comm_ptr,root,err) \
+ if ((root) < 0 || (root) >= (comm_ptr)->local_size) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_ROOT, "**root", "**root %d", root ); \
+ goto fn_fail; \
+ }
+
+/* We use -2 (MPI_PROC_NULL and MPI_ROOT are negative) for the
+ intercomm test */
+#define MPIR_ERRTEST_INTER_ROOT(comm_ptr,root,err) \
+ if ((root) < -3 || (root) >= (comm_ptr)->remote_size) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_ROOT, "**root", "**root %d", root ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_PERSISTENT(reqp,err) \
+ if ((reqp)->kind != MPIR_REQUEST_KIND__PREQUEST_SEND && reqp->kind != MPIR_REQUEST_KIND__PREQUEST_RECV) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_REQUEST, "**requestnotpersist", 0 ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_PERSISTENT_ACTIVE(reqp,err) \
+ if (((reqp)->kind == MPIR_REQUEST_KIND__PREQUEST_SEND || \
+ reqp->kind == MPIR_REQUEST_KIND__PREQUEST_RECV) && reqp->u.persist.real_request != NULL) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_REQUEST, "**requestpersistactive", 0 ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_COMM_INTRA(comm_ptr, err ) \
+ if ((comm_ptr)->comm_kind != MPIR_COMM_KIND__INTRACOMM) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_COMM,"**commnotintra",0); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_COMM_TAG(tag,err) \
+ if ((tag) < 0 || (tag) > MPIR_Process.attrs.tag_ub) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_TAG, "**tag", "**tag %d", tag); \
+ goto fn_fail; \
+ }
+
+/* Tests for totally meaningless datatypes first, then for
+ * MPI_DATATYPE_NULL as a separate case.
+ */
+#define MPIR_ERRTEST_DATATYPE(datatype, name_, err_) \
+ { \
+ if (HANDLE_GET_MPI_KIND(datatype) != MPIR_DATATYPE || \
+ (HANDLE_GET_KIND(datatype) == HANDLE_KIND_INVALID && \
+ datatype != MPI_DATATYPE_NULL)) \
+ { \
+ err_ = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_TYPE, \
+ "**dtype", 0 ); \
+ goto fn_fail; \
+ } \
+ if (datatype == MPI_DATATYPE_NULL) \
+ { \
+ err_ = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_TYPE, \
+ "**dtypenull", \
+ "**dtypenull %s", \
+ name_); \
+ goto fn_fail; \
+ } \
+ }
+
+#define MPIR_ERRTEST_TYPE_RMA_ATOMIC(datatype_, err_) \
+ do { \
+ if (!MPIR_Type_is_rma_atomic(datatype_)) { \
+ err_ = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_TYPE, \
+ "**rmatypenotatomic", \
+ "**rmatypenotatomic %D", \
+ datatype); \
+ goto fn_fail; \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_WIN_FLAVOR(win_, flavor_, err_) \
+ do { \
+ if ((win_)->create_flavor != (flavor_)) { \
+ MPIR_ERR_SETANDSTMT1((err_), MPI_ERR_RMA_FLAVOR, \
+ goto fn_fail, "**winflavor", \
+ "**winflavor %s", #flavor_); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf,count,err) \
+ if (count > 0 && sendbuf == MPI_IN_PLACE) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_BUFFER, "**sendbuf_inplace", 0 ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf,count,err) \
+ if (count > 0 && recvbuf == MPI_IN_PLACE) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_BUFFER, "**recvbuf_inplace", 0 ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_BUF_INPLACE(buf,count,err) \
+ if (count > 0 && buf == MPI_IN_PLACE) { \
+ err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_BUFFER, "**buf_inplace", 0 ); \
+ goto fn_fail; \
+ }
+
+#define MPIR_ERRTEST_NAMED_BUF_INPLACE(buf, bufname, count, err) \
+ do { \
+ if (count > 0 && buf == MPI_IN_PLACE) { \
+ MPIR_ERR_SETANDJUMP1(err, MPI_ERR_BUFFER, "**buf_inplace", \
+ "**buf_inplace %s", bufname); \
+ } \
+ } while (0)
+
+/*
+ * Check that the triple (buf,count,datatype) does not specify a null
+ * buffer. This does not guarantee that the buffer is valid but does
+ * catch the most common problems.
+ * Question:
+ * Should this be an (inlineable) routine?
+ * Since it involves extracting the datatype pointer for non-builtin
+ * datatypes, should it take a dtypeptr argument (valid only if not
+ * builtin)?
+ */
+#define MPIR_ERRTEST_USERBUFFER(buf,count,dtype,err) \
+ if (count > 0 && buf == 0) { \
+ int ferr = 0; \
+ if (HANDLE_GET_KIND(dtype) == HANDLE_KIND_BUILTIN) { ferr=1; } \
+ else { \
+ MPI_Aint errsize; \
+ MPIR_Datatype *errdtypeptr; \
+ MPID_Datatype_get_ptr(dtype,errdtypeptr); \
+ MPID_Datatype_get_size_macro(dtype,errsize); \
+ if (errdtypeptr && errdtypeptr->true_lb == 0 && \
+ errsize > 0) { ferr=1; } \
+ } \
+ if (ferr) { \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, __LINE__, \
+ MPI_ERR_BUFFER, \
+ "**bufnull", 0 ); \
+ goto fn_fail; \
+ } \
+ }
+
+/* The following are placeholders. We haven't decided yet whether these
+ should take a handle or pointer, or if they should take a handle and return
+ a pointer if the handle is valid. These need to be rationalized with the
+ MPID_xxx_valid_ptr and MPID_xxx_get_ptr.
+
+ [BRT] They should not take a handle and return a pointer if they will be
+ placed inside of a #ifdef HAVE_ERROR_CHECKING block. Personally, I think
+ the macros should take handles. We already have macros for validating
+ pointers to various objects.
+*/
+/* --BEGIN ERROR MACROS-- */
+#define MPIR_ERRTEST_VALID_HANDLE(handle_,kind_,err_,errclass_,gmsg_) { \
+ if (HANDLE_GET_MPI_KIND(handle_) != kind_ || \
+ HANDLE_GET_KIND(handle_) == HANDLE_KIND_INVALID) { \
+ MPIR_ERR_SETANDSTMT(err_,errclass_,goto fn_fail,gmsg_); \
+ } \
+ }
+/* --END ERROR MACROS-- */
+
+#define MPIR_ERRTEST_OP(op,err) \
+ do { \
+ if (op == MPI_OP_NULL) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnull"); \
+ } \
+ else if (op == MPI_NO_OP || op == MPI_REPLACE) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotallowed"); \
+ } \
+ else { \
+ MPIR_ERRTEST_VALID_HANDLE(op,MPIR_OP,err,MPI_ERR_OP,"**op"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_OP_ACC(op,err) \
+ do { \
+ if (op == MPI_OP_NULL) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnull"); \
+ } \
+ else if (op == MPI_NO_OP) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotallowed"); \
+ } \
+ else { \
+ MPIR_ERRTEST_VALID_HANDLE(op,MPIR_OP,err,MPI_ERR_OP,"**op"); \
+ } \
+ if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotpredefined"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_OP_GACC(op,err) \
+ do { \
+ if (op == MPI_OP_NULL) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnull"); \
+ } \
+ else { \
+ MPIR_ERRTEST_VALID_HANDLE(op,MPIR_OP,err,MPI_ERR_OP,"**op"); \
+ } \
+ if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_OP,goto fn_fail,"**opnotpredefined"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_GROUP(group,err) \
+ if (group == MPI_GROUP_NULL) { \
+ MPIR_ERR_SETANDSTMT(err,MPI_ERR_GROUP,goto fn_fail,"**groupnull"); \
+ } \
+ else { \
+ MPIR_ERRTEST_VALID_HANDLE(group,MPIR_GROUP,err,MPI_ERR_GROUP,"**group"); \
+ }
+
+#define MPIR_ERRTEST_COMM(comm_, err_) \
+ { \
+ if ((comm_) == MPI_COMM_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT((err_), MPI_ERR_COMM,goto fn_fail,"**commnull"); \
+ } \
+ else \
+ { \
+ MPIR_ERRTEST_VALID_HANDLE((comm_), MPIR_COMM, (err_), MPI_ERR_COMM, "**comm"); \
+ } \
+ }
+
+#define MPIR_ERRTEST_WIN(win_, err_) \
+ { \
+ if ((win_) == MPI_WIN_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT((err_), MPI_ERR_WIN,goto fn_fail, "**winnull"); \
+ } \
+ else \
+ { \
+ MPIR_ERRTEST_VALID_HANDLE((win_), MPIR_WIN, (err_), MPI_ERR_WIN, "**win"); \
+ } \
+ }
+
+#define MPIR_ERRTEST_REQUEST(request_, err_) \
+ { \
+ if ((request_) == MPI_REQUEST_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT((err_), MPI_ERR_REQUEST,goto fn_fail, "**requestnull"); \
+ } \
+ else \
+ { \
+ MPIR_ERRTEST_VALID_HANDLE((request_), MPIR_REQUEST, (err_), MPI_ERR_REQUEST, "**request"); \
+ } \
+ }
+
+#define MPIR_ERRTEST_REQUEST_OR_NULL(request_, err_) \
+ { \
+ if ((request_) != MPI_REQUEST_NULL) \
+ { \
+ MPIR_ERRTEST_VALID_HANDLE((request_), MPIR_REQUEST, (err_), MPI_ERR_REQUEST, "**request"); \
+ } \
+ }
+
+/* This macro does *NOT* jump to fn_fail - all uses check mpi_errno */
+#define MPIR_ERRTEST_ARRAYREQUEST_OR_NULL(request_, i_, err_) \
+ { \
+ if ((request_) != MPI_REQUEST_NULL) \
+ { \
+ if (HANDLE_GET_MPI_KIND(request_) != MPIR_REQUEST) { \
+ MPIR_ERR_SETANDSTMT2(err_,MPI_ERR_REQUEST,goto fn_fail, \
+ "**request_invalid_kind","**request_invalid_kind %d %d", \
+ i_, HANDLE_GET_MPI_KIND(request_)); \
+ } \
+ else if (HANDLE_GET_KIND(request_) == HANDLE_KIND_INVALID) { \
+ MPIR_ERR_SETANDSTMT1(err_,MPI_ERR_REQUEST,goto fn_fail, \
+ "**request","**request %d", i_ ); \
+ } \
+ } \
+ }
+
+#define MPIR_ERRTEST_ERRHANDLER(errhandler_,err_) \
+ if (errhandler_ == MPI_ERRHANDLER_NULL) { \
+ MPIR_ERR_SETANDSTMT(err_,MPI_ERR_ARG,goto fn_fail,"**errhandlernull"); \
+ } \
+ else { \
+ MPIR_ERRTEST_VALID_HANDLE(errhandler_,MPIR_ERRHANDLER, \
+ err_,MPI_ERR_ARG,"**errhandler"); \
+ }
+
+#define MPIR_ERRTEST_INFO(info_, err_) \
+ { \
+ if ((info_) == MPI_INFO_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_ERR_ARG,goto fn_fail, "**infonull"); \
+ } \
+ else \
+ { \
+ MPIR_ERRTEST_VALID_HANDLE((info_), MPIR_INFO, (err_), MPI_ERR_ARG, "**info"); \
+ } \
+ }
+
+#define MPIR_ERRTEST_INFO_OR_NULL(info_, err_) \
+ { \
+ if ((info_) != MPI_INFO_NULL) \
+ { \
+ MPIR_ERRTEST_VALID_HANDLE((info_), MPIR_INFO, (err_), MPI_ERR_ARG, "**info"); \
+ } \
+ }
+
+#define MPIR_ERRTEST_KEYVAL(keyval_, object_, objectdesc_, err_) \
+ { \
+ if ((keyval_) == MPI_KEYVAL_INVALID) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_ERR_KEYVAL,goto fn_fail, "**keyvalinvalid"); \
+ } \
+ else if (HANDLE_GET_MPI_KIND(keyval_) != MPIR_KEYVAL) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_ERR_KEYVAL,goto fn_fail, "**keyval"); \
+ } \
+ else if ((((keyval_) & 0x03c00000) >> 22) != (object_)) \
+ { \
+ MPIR_ERR_SETANDSTMT1(err_, MPI_ERR_KEYVAL,goto fn_fail, "**keyvalobj", \
+ "**keyvalobj %s", (objectdesc_)); \
+ } \
+ }
+
+#define MPIR_ERRTEST_KEYVAL_PERM(keyval_, err_) \
+ { \
+ if (HANDLE_GET_MPI_KIND(keyval_) == MPIR_KEYVAL && \
+ HANDLE_GET_KIND(keyval_) == HANDLE_KIND_BUILTIN) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_ERR_KEYVAL,goto fn_fail, "**permattr"); \
+ } \
+ }
+
+#ifdef HAVE_ERROR_CHECKING
+#define MPIR_ERRTEST_MPIT_INITIALIZED(err_) \
+ do { \
+ if (!MPIR_T_is_initialized()) { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_NOT_INITIALIZED, goto fn_fail, "**mpitinit"); \
+ } \
+ } while (0)
+#else
+#define MPIR_ERRTEST_MPIT_INITIALIZED(err_)
+#endif
+
+#define MPIR_ERRTEST_CAT_INDEX(index_,err_) \
+ do { \
+ if ((index_) < 0 || (index_) >= utarray_len(cat_table)) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_INDEX, goto fn_fail, "**catindex"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_ENUM_HANDLE(handle_, err_) \
+ do { \
+ if ((handle_) == MPI_T_ENUM_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**enumhandlenull"); \
+ } \
+ else if ((handle_)->kind != MPIR_T_ENUM_HANDLE) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**enumhandle"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_ENUM_ITEM(enum_, index_, err_) \
+ do { \
+ if ((index_) < 0 || (index_) >= utarray_len((enum_)->items)) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_ITEM, goto fn_fail, "**itemindex"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_CVAR_INDEX(index_,err_) \
+ do { \
+ if ((index_) < 0 || (index_) >= utarray_len(cvar_table)) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_INDEX, goto fn_fail, "**cvarindex"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_CVAR_HANDLE(handle_, err_) \
+ do { \
+ if ((handle_) == MPI_T_CVAR_HANDLE_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**cvarhandlenull"); \
+ } \
+ else if ((handle_)->kind != MPIR_T_CVAR_HANDLE) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**cvarhandle"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_PVAR_INDEX(index_,err_) \
+ do { \
+ if ((index_) < 0 || (index_) >= utarray_len(pvar_table)) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_INDEX, goto fn_fail, "**pvarindex"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_PVAR_HANDLE(handle_, err_) \
+ do { \
+ if (handle_ == MPI_T_PVAR_HANDLE_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_,MPI_T_ERR_INVALID_HANDLE, goto fn_fail,"**pvarhandlenull"); \
+ } \
+ else if ((handle_)->kind != MPIR_T_PVAR_HANDLE) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_HANDLE, goto fn_fail, "**pvarhandle"); \
+ } \
+ } while (0)
+
+#define MPIR_ERRTEST_PVAR_SESSION(session_,err_) \
+ do { \
+ if ((session_) == MPI_T_PVAR_SESSION_NULL) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_,MPI_T_ERR_INVALID_SESSION, goto fn_fail,"**pvarsessionnull"); \
+ } \
+ else if ((session_)->kind != MPIR_T_PVAR_SESSION) \
+ { \
+ MPIR_ERR_SETANDSTMT(err_, MPI_T_ERR_INVALID_SESSION, goto fn_fail, "**pvarsession"); \
+ } \
+ } while (0)
+
+/* some simple memcpy aliasing checks */
+#define MPIR_ERR_CHKMEMCPYANDSTMT(err_,stmt_,src_,dst_,len_) \
+ MPIR_ERR_CHKANDSTMT3(MPIR_MEM_RANGES_OVERLAP((dst_),(len_),(src_),(len_)),err_,MPI_ERR_INTERN,stmt_,"**memcpyalias","**memcpyalias %p %p %L",(src_),(dst_),(long long)(len_))
+#define MPIR_ERR_CHKMEMCPYANDJUMP(err_,src_,dst_,len_) \
+ MPIR_ERR_CHKMEMCPYANDSTMT((err_),goto fn_fail,(src_),(dst_),(len_))
+
+/* Special MPI error "class/code" for out of memory */
+/* FIXME: not yet done */
+#define MPIR_ERR_MEMALLOCFAILED MPI_ERR_INTERN
+
+/*
+ * Standardized error setting and checking macros
+ * These are intended to simplify the insertion of standardized error
+ * checks
+ *
+ */
+/* --BEGIN ERROR MACROS-- */
+#ifdef HAVE_ERROR_CHECKING
+#define MPIR_ERR_POP(err_) \
+ MPIR_ERR_SETANDSTMT(err_,MPI_ERR_OTHER,goto fn_fail,"**fail")
+#define MPIR_ERR_POP_LABEL(err_, label_) \
+ MPIR_ERR_SETANDSTMT(err_,MPI_ERR_OTHER,goto label_,"**fail")
+#define MPIR_ERR_POPFATAL(err_) \
+ MPIR_ERR_SETFATALANDSTMT(err_,MPI_ERR_OTHER,goto fn_fail,"**fail")
+#define MPIR_ERR_POPFATAL_LABEL(err_, label_) \
+ MPIR_ERR_SETFATALANDSTMT(err_,MPI_ERR_OTHER,goto label_,"**fail")
+#else
+#define MPIR_ERR_POP(err_) goto fn_fail
+#define MPIR_ERR_POP_LABEL(err_, label_) goto label_
+#define MPIR_ERR_POPFATAL(err_) goto fn_fail
+#define MPIR_ERR_POPFATAL_LABEL(err_, label_) goto label_
+#endif
+
+/* If you add any macros to this list, make sure that you update
+ maint/extracterrmsgs to handle the additional macros (see the hash
+ KnownErrRoutines in that script)
+ ERR_SETSIMPLE is like ERR_SET except that it just sets the error, it
+ doesn't add it to an existing error. This is appropriate in cases
+ where there can be no pre-existing error, and MPI_SUCCESS is needed for the
+ first argument to MPIR_Err_create_code .
+*/
+#ifdef HAVE_ERROR_CHECKING
+#define MPIR_ERR_SETSIMPLE(err_,class_,msg_) \
+ err_ = MPIR_Err_create_code( MPI_SUCCESS,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, msg_, 0 )
+#define MPIR_ERR_SET(err_,class_,msg_) \
+ err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, msg_, 0 )
+#define MPIR_ERR_SET1(err_,class_,gmsg_,smsg_,arg1_) \
+ err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_ )
+#define MPIR_ERR_SET2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ )
+#define MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, msg_, 0 ); stmt_ ;} while (0)
+#define MPIR_ERR_SETANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_ ); stmt_ ;} while (0)
+#define MPIR_ERR_SETANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ ); stmt_ ;} while (0)
+#define MPIR_ERR_SETANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_ ); stmt_ ;} while (0)
+#define MPIR_ERR_SETANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_, arg4_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_RECOVERABLE,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_, arg4_ ); stmt_ ;} while (0)
+
+#define MPIR_ERR_SETFATALSIMPLE(err_,class_,msg_) \
+ err_ = MPIR_Err_create_code( MPI_SUCCESS,MPIR_ERR_FATAL,FCNAME, \
+ __LINE__, class_, msg_, 0 )
+#define MPIR_ERR_SETFATAL(err_,class_,msg_) \
+ err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, msg_, 0 )
+#define MPIR_ERR_SETFATAL1(err_,class_,gmsg_,smsg_,arg1_) \
+ err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_ )
+#define MPIR_ERR_SETFATAL2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ )
+#define MPIR_ERR_SETFATALANDSTMT(err_,class_,stmt_,msg_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, msg_, 0 ); stmt_ ;} while (0)
+#define MPIR_ERR_SETFATALANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_ ); stmt_ ;} while (0)
+#define MPIR_ERR_SETFATALANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_ ); stmt_ ;} while (0)
+#define MPIR_ERR_SETFATALANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_ ); stmt_ ;} while (0)
+#define MPIR_ERR_SETFATALANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_, arg3_, arg4_) \
+ do {err_ = MPIR_Err_create_code( err_,MPIR_ERR_FATAL,FCNAME,\
+ __LINE__, class_, gmsg_, smsg_, arg1_, arg2_, arg3_, arg4_ ); stmt_ ;} while (0)
+#define MPIR_ERR_ADD(err_, newerr_) \
+ do {(err_) = MPIR_Err_combine_codes((err_), (newerr_));} while (0)
+#else
+/* Simply set the class, being careful not to override a previously
+ set class. */
+#define MPIR_ERR_SETSIMPLE(err_,class_,msg_) \
+ do {err_ = class_;} while (0)
+#define MPIR_ERR_SET(err_,class_,msg_) \
+ do {if (!err_){err_=class_;}} while (0)
+#define MPIR_ERR_SET1(err_,class_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_SET(err_,class_,msg_)
+#define MPIR_ERR_SET2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_SET(err_,class_,msg_)
+#define MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_) \
+ do {if (!err_){err_=class_;} stmt_;} while (0)
+#define MPIR_ERR_SETANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+#define MPIR_ERR_SETANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+#define MPIR_ERR_SETANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+#define MPIR_ERR_SETANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+
+#define MPIR_ERR_SETFATALSIMPLE(err_,class_,msg_) \
+ do {err_ = class_;} while (0)
+#define MPIR_ERR_SETFATAL(err_,class_,msg_) \
+ do {if (!err_){err_=class_;}} while (0)
+#define MPIR_ERR_SETFATAL1(err_,class_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_SET(err_,class_,msg_)
+#define MPIR_ERR_SETFATAL2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_SET(err_,class_,msg_)
+#define MPIR_ERR_SETFATALANDSTMT(err_,class_,stmt_,msg_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_)
+#define MPIR_ERR_SETFATALANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+#define MPIR_ERR_SETFATALANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+#define MPIR_ERR_SETFATALANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+#define MPIR_ERR_SETFATALANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,stmt_,gmsg_)
+ /* No-op - use original error class; discard newerr_ unless err is
+ MPI_SUCCESS*/
+#define MPIR_ERR_ADD(err_, newerr_) \
+ do {if (!err_) err_ = newerr_;} while (0)
+#endif
+
+/* The following definitions are the same independent of the choice of
+ HAVE_ERROR_CHECKING */
+#define MPIR_ERR_SETANDJUMP(err_,class_,msg_) \
+ MPIR_ERR_SETANDSTMT(err_,class_,goto fn_fail,msg_)
+#define MPIR_ERR_SETFATALANDJUMP(err_,class_,msg_) \
+ MPIR_ERR_SETFATALANDSTMT(err_,class_,goto fn_fail,msg_)
+#define MPIR_ERR_CHKANDSTMT(cond_,err_,class_,stmt_,msg_) \
+ do {if (cond_) { MPIR_ERR_SETANDSTMT(err_,class_,stmt_,msg_); }} while (0)
+#define MPIR_ERR_CHKFATALANDSTMT(cond_,err_,class_,stmt_,msg_) \
+ do {if (cond_) { MPIR_ERR_SETFATALANDSTMT(err_,class_,stmt_,msg_); }} while (0)
+#define MPIR_ERR_CHKANDJUMP(cond_,err_,class_,msg_) \
+ MPIR_ERR_CHKANDSTMT(cond_,err_,class_,goto fn_fail,msg_)
+#define MPIR_ERR_CHKFATALANDJUMP(cond_,err_,class_,msg_) \
+ MPIR_ERR_CHKFATALANDSTMT(cond_,err_,class_,goto fn_fail,msg_)
+
+#define MPIR_ERR_SETANDJUMP1(err_,class_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_SETANDSTMT1(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
+#define MPIR_ERR_SETFATALANDJUMP1(err_,class_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_SETFATALANDSTMT1(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
+#define MPIR_ERR_CHKANDSTMT1(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_) \
+ do {if (cond_) { MPIR_ERR_SETANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_); }} while (0)
+#define MPIR_ERR_CHKFATALANDSTMT1(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_) \
+ do {if (cond_) { MPIR_ERR_SETFATALANDSTMT1(err_,class_,stmt_,gmsg_,smsg_,arg1_); }} while (0)
+#define MPIR_ERR_CHKANDJUMP1(cond_,err_,class_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_CHKANDSTMT1(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
+#define MPIR_ERR_CHKFATALANDJUMP1(cond_,err_,class_,gmsg_,smsg_,arg1_) \
+ MPIR_ERR_CHKFATALANDSTMT1(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_)
+
+#define MPIR_ERR_SETANDJUMP2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_SETANDSTMT2(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
+#define MPIR_ERR_SETFATALANDJUMP2(err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_SETFATALANDSTMT2(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
+#define MPIR_ERR_CHKANDSTMT2(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
+ do {if (cond_) { MPIR_ERR_SETANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_); }} while (0)
+#define MPIR_ERR_CHKFATALANDSTMT2(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_) \
+ do {if (cond_) { MPIR_ERR_SETFATALANDSTMT2(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_); }} while (0)
+#define MPIR_ERR_CHKANDJUMP2(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_CHKANDSTMT2(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
+#define MPIR_ERR_CHKFATALANDJUMP2(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_) \
+ MPIR_ERR_CHKFATALANDSTMT2(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_)
+
+#define MPIR_ERR_SETANDJUMP3(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ MPIR_ERR_SETANDSTMT3(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
+#define MPIR_ERR_SETFATALANDJUMP3(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ MPIR_ERR_SETFATALANDSTMT3(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
+#define MPIR_ERR_CHKANDSTMT3(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ do {if (cond_) { MPIR_ERR_SETANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_); }} while (0)
+#define MPIR_ERR_CHKFATALANDSTMT3(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ do {if (cond_) { MPIR_ERR_SETFATALANDSTMT3(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_); }} while (0)
+#define MPIR_ERR_CHKANDJUMP3(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ MPIR_ERR_CHKANDSTMT3(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
+#define MPIR_ERR_CHKFATALANDJUMP3(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_) \
+ MPIR_ERR_CHKFATALANDSTMT3(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_)
+
+#define MPIR_ERR_SETANDJUMP4(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
+ MPIR_ERR_SETANDSTMT4(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
+#define MPIR_ERR_SETFATALANDJUMP4(err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
+ MPIR_ERR_SETFATALANDSTMT4(err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
+#define MPIR_ERR_CHKANDSTMT4(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_, arg4_) \
+ do {if (cond_) { MPIR_ERR_SETANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_); }} while (0)
+#define MPIR_ERR_CHKFATALANDSTMT4(cond_,err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_, arg4_) \
+ do {if (cond_) { MPIR_ERR_SETFATALANDSTMT4(err_,class_,stmt_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_); }} while (0)
+#define MPIR_ERR_CHKANDJUMP4(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
+ MPIR_ERR_CHKANDSTMT4(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
+#define MPIR_ERR_CHKFATALANDJUMP4(cond_,err_,class_,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_) \
+ MPIR_ERR_CHKFATALANDSTMT4(cond_,err_,class_,goto fn_fail,gmsg_,smsg_,arg1_,arg2_,arg3_,arg4_)
+
+#define MPIR_ERR_INTERNAL(err_, msg_) \
+ MPIR_ERR_SETFATAL1(err_, MPI_ERR_INTERN, "**intern", "**intern %s", msg_)
+#define MPIR_ERR_INTERNALANDSTMT(err_, msg_, stmt_) \
+ MPIR_ERR_SETANDSTMT1(err_, MPI_ERR_INTERN, stmt_, "**intern", "**intern %s", msg_)
+#define MPIR_ERR_INTERNALANDJUMP(err_, msg_) \
+ MPIR_ERR_INTERNALANDSTMT(err_, msg_, goto fn_fail)
+#define MPIR_ERR_CHKINTERNAL(cond_, err_, msg_) \
+ do {if (cond_) MPIR_ERR_INTERNALANDJUMP(err_, msg_);} while(0)
+
+/* --END ERROR MACROS-- */
+
+/*
+ * Special case for "is initialized".
+ * This should be used in cases where there is no
+ * additional error checking
+ */
+#ifdef HAVE_ERROR_CHECKING
+#define MPIR_ERRTEST_INITIALIZED_ORDIE() \
+do { \
+ if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__PRE_INIT || \
+ OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__POST_FINALIZED) \
+ { \
+ MPIR_Err_preOrPostInit(); \
+ } \
+} while (0)
+#else
+#define MPIR_ERRTEST_INITIALIZED_ORDIE() do {} while (0)
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* end of mpir_err.h */
+/* ------------------------------------------------------------------------- */
+
+#endif /* MPIR_ERR_H_INCLUDED */
diff --git a/src/include/mpir_errhandler.h b/src/include/mpir_errhandler.h
new file mode 100644
index 0000000..3fb9d88
--- /dev/null
+++ b/src/include/mpir_errhandler.h
@@ -0,0 +1,96 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_ERRHANDLER_H_INCLUDED
+#define MPIR_ERRHANDLER_H_INCLUDED
+
+/*E
+ errhandler_fn - MPIR Structure to hold an error handler function
+
+ Notes:
+ The MPI-1 Standard declared only the C version of this, implicitly
+ assuming that 'int' and 'MPI_Fint' were the same.
+
+ Since Fortran does not have a C-style variable number of arguments
+ interface, the Fortran interface simply accepts two arguments. Some
+ calling conventions for Fortran (particularly under Windows) require
+ this.
+
+ Module:
+ ErrHand-DS
+
+ Questions:
+ What do we want to do about C++? Do we want a hook for a routine that can
+ be called to throw an exception in C++, particularly if we give C++ access
+ to this structure? Does the C++ handler need to be different (not part
+ of the union)?
+
+ E*/
+typedef union errhandler_fn {
+ void (*C_Comm_Handler_function) ( MPI_Comm *, int *, ... );
+ void (*F77_Handler_function) ( MPI_Fint *, MPI_Fint * );
+ void (*C_Win_Handler_function) ( MPI_Win *, int *, ... );
+ void (*C_File_Handler_function) ( MPI_File *, int *, ... );
+} errhandler_fn;
+
+/*S
+ MPIR_Errhandler - Description of the error handler structure
+
+ Notes:
+ Device-specific information may indicate whether the error handler is active;
+ this can help prevent infinite recursion in error handlers caused by
+ user-error without requiring the user to be as careful. We might want to
+ make this part of the interface so that the 'MPI_xxx_call_errhandler'
+ routines would check.
+
+ It is useful to have a way to indicate that the errhandler is no longer
+ valid, to help catch the case where the user has freed the errhandler but
+ is still using a copy of the 'MPI_Errhandler' value. We may want to
+ define the 'id' value for deleted errhandlers.
+
+ Module:
+ ErrHand-DS
+ S*/
+typedef struct MPIR_Errhandler {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPIR_Lang_t language;
+ MPII_Object_kind kind;
+ errhandler_fn errfn;
+ /* Other, device-specific information */
+#ifdef MPID_DEV_ERRHANDLER_DECL
+ MPID_DEV_ERRHANDLER_DECL
+#endif
+} MPIR_Errhandler;
+extern MPIR_Object_alloc_t MPIR_Errhandler_mem;
+/* Preallocated errhandler objects */
+extern MPIR_Errhandler MPIR_Errhandler_builtin[];
+extern MPIR_Errhandler MPIR_Errhandler_direct[];
+
+/* We never reference count the builtin error handler objects, regardless of how
+ * we decide to reference count the other predefined objects. If we get to the
+ * point where we never reference count *any* of the builtin objects then we
+ * should probably remove these checks and let them fall through to the checks
+ * for BUILTIN down in the MPIR_Object_* routines. */
+#define MPIR_Errhandler_add_ref( _errhand ) \
+ do { \
+ if (HANDLE_GET_KIND((_errhand)->handle) != HANDLE_KIND_BUILTIN) { \
+ MPIR_Object_add_ref( _errhand ); \
+ } \
+ } while (0)
+#define MPIR_Errhandler_release_ref( _errhand, _inuse ) \
+ do { \
+ if (HANDLE_GET_KIND((_errhand)->handle) != HANDLE_KIND_BUILTIN) { \
+ MPIR_Object_release_ref( (_errhand), (_inuse) ); \
+ } \
+ else { \
+ *(_inuse) = 1; \
+ } \
+ } while (0)
+
+void MPIR_Errhandler_free(MPIR_Errhandler *errhan_ptr);
+
+#endif /* MPIR_ERRHANDLER_H_INCLUDED */
diff --git a/src/include/mpir_ext.h.in b/src/include/mpir_ext.h.in
new file mode 100644
index 0000000..c9805fe
--- /dev/null
+++ b/src/include/mpir_ext.h.in
@@ -0,0 +1,97 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* This file contains the prototypes for routines that are used with
+ "external" modules such as ROMIO. These allow the different packages to
+ hide their internal datatypes from one another */
+
+#ifndef MPIEXT_H_INCLUDED
+#define MPIEXT_H_INCLUDED
+
+#include <stdarg.h>
+
+/* This routine, given an MPI_Errhandler (from a file), returns
+ a pointer to the user-supplied error function. The last argument
+ is set to an integer indicating that the function is MPI_ERRORS_RETURN
+ (value == 1), MPI_ERRORS_ARE_FATAL (value == 0), a valid user-function
+ (value == 2), or a valid user-function that is a C++ routine (value == 3)
+
+ This routine is implemented in mpich/src/mpi/errhan/file_set_errhandler.c
+*/
+void MPIR_Get_file_error_routine( MPI_Errhandler,
+ void (**)(MPI_File *, int *, ...),
+ int * );
+
+/* Invoke the C++ error handler (this invokes a special C++ routine that
+ in turn calls the provided function. That special routine also
+ resets the errorcode to MPI_SUCCESS to prevent the MPICH C++ error handling
+ code from throwing an exception when the user routine returns.
+*/
+int MPIR_File_call_cxx_errhandler( MPI_File *, int *,
+ void (*)(MPI_File *, int *, ... ) );
+/*
+ These routines provide access to the MPI_Errhandler field within the
+ ROMIO MPI_File structure
+ */
+int MPIR_ROMIO_Get_file_errhand( MPI_File, MPI_Errhandler * );
+int MPIR_ROMIO_Set_file_errhand( MPI_File, MPI_Errhandler );
+
+/* FIXME: This routine is also defined in adio.h */
+int MPIO_Err_return_file( MPI_File, int );
+
+int MPIR_Err_create_code_valist(int, int, const char [], int, int,
+ const char [], const char [], va_list );
+int MPIR_Err_is_fatal(int);
+
+void MPIR_Get_file_error_routine( MPI_Errhandler,
+ void (**)(MPI_File *, int *, ...),
+ int * );
+int MPIR_File_call_cxx_errhandler( MPI_File *, int *,
+ void (*)(MPI_File *, int *, ... ) );
+
+typedef int (* MPIR_Err_get_class_string_func_t)(int error, char *str, int length);
+void MPIR_Err_get_string( int, char *, int, MPIR_Err_get_class_string_func_t );
+
+struct MPIR_Comm;
+int MPID_Abort(struct MPIR_Comm *comm, int mpi_errno, int exit_code, const char *error_msg);
+
+int MPIR_Ext_assert_fail(const char *cond, const char *file_name, int line_num);
+
+#if (!defined(NDEBUG) && (@HAVE_ERROR_CHECKING@))
+#define MPIR_Ext_assert(a_) \
+ do { \
+ if (!(a_)) { \
+ MPIR_Ext_assert_fail(#a_, __FILE__, __LINE__); \
+ } \
+ } while (0)
+#else
+#define MPIR_Ext_assert(a_) do {} while(0)
+#endif
+
+extern int MPIR_Ext_dbg_romio_terse_enabled;
+extern int MPIR_Ext_dbg_romio_typical_enabled;
+extern int MPIR_Ext_dbg_romio_verbose_enabled;
+
+/* a copy of MPIU_Ensure_Aint_fits_in_pointer for external use, slightly
+ * modified to use ROMIO's version of the pointer-casting macro */
+#define MPIR_Ext_ensure_Aint_fits_in_pointer(aint) \
+ MPIR_Ext_assert((aint) == (MPI_Aint)(uintptr_t) ADIOI_AINT_CAST_TO_VOID_PTR(aint));
+
+/* to be called early by ROMIO's initialization process in order to setup init-time
+ * glue code that cannot be initialized statically */
+int MPIR_Ext_init(void);
+
+void MPIR_Ext_cs_enter(void);
+void MPIR_Ext_cs_exit(void);
+void MPIR_Ext_cs_yield(void);
+
+/* to facilitate error checking */
+int MPIR_Ext_datatype_iscommitted(MPI_Datatype datatype);
+
+/* make comm split based on access to a common file system easier */
+int MPIR_Get_node_id(MPI_Comm comm, int rank, int *id);
+
+#endif
diff --git a/src/include/mpir_func.h b/src/include/mpir_func.h
new file mode 100644
index 0000000..8dd38c5
--- /dev/null
+++ b/src/include/mpir_func.h
@@ -0,0 +1,129 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2008 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIR_FUNC_H_INCLUDED
+#define MPIR_FUNC_H_INCLUDED
+
+/* In MPICH, each function has an "enter" and "exit" macro. These can be
+ * used to add various features to each function at compile time, or they
+ * can be set to empty to provide the fastest possible production version.
+ *
+ * There are at this time three choices of features (beyond the empty choice)
+ * 1. timing
+ * These collect data on when each function began and finished; the
+ * resulting data can be displayed using special programs
+ * 2. Debug logging (selected with --enable-g=log)
+ * Invokes MPL_DBG_MSG at the entry and exit for each routine
+ * 3. Additional memory validation of the memory arena (--enable-g=memarena)
+ */
+
+/* function enter and exit macros */
+#if defined(MPL_USE_DBG_LOGGING)
+#define MPIR_FUNC_ENTER(a) MPL_DBG_MSG(MPL_DBG_ROUTINE_ENTER,TYPICAL,"Entering "#a)
+#elif defined(MPICH_DEBUG_MEMARENA)
+#define MPIR_FUNC_ENTER(a) MPL_trvalid("Entering " #a)
+#endif
+
+#if defined(MPL_USE_DBG_LOGGING)
+#define MPIR_FUNC_EXIT(a) MPL_DBG_MSG(MPL_DBG_ROUTINE_EXIT,TYPICAL,"Leaving "#a)
+#elif defined(MPICH_DEBUG_MEMARENA)
+#define MPIR_FUNC_EXIT(a) MPL_trvalid("Leaving " #a)
+#endif
+
+/* state declaration macros */
+#if defined(MPL_USE_DBG_LOGGING) || defined(MPICH_DEBUG_MEMARENA)
+
+#define MPIR_FUNC_TERSE_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_INIT_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_FINALIZE_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_EXIT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_FRONT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_BACK(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_BOTH(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_BACK(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_BOTH(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_COLL_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_COLL_EXIT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_RMA_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_RMA_EXIT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_INIT_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_INIT_EXIT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_FINALIZE_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_FINALIZE_EXIT(a) MPIR_FUNC_EXIT(a)
+
+#define MPIR_FUNC_VERBOSE_STATE_DECL(a)
+#define MPIR_FUNC_VERBOSE_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_VERBOSE_EXIT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_EXIT(a) MPIR_FUNC_EXIT(a)
+#define MPIR_FUNC_VERBOSE_RMA_ENTER(a) MPIR_FUNC_ENTER(a)
+#define MPIR_FUNC_VERBOSE_RMA_EXIT(a) MPIR_FUNC_EXIT(a)
+
+#define MPII_Timer_init(rank, size)
+#define MPII_Timer_finalize()
+
+#else /* ! defined(MPL_USE_DBG_LOGGING) && ! defined(MPICH_DEBUG_MEMARENA) */
+
+/* Routine tracing (see --enable-timing for control of this) */
+#if defined(HAVE_TIMING) && (HAVE_TIMING == MPICH_TIMING_KIND__LOG || \
+ HAVE_TIMING == MPICH_TIMING_KIND__LOG_DETAILED || \
+ HAVE_TIMING == MPICH_TIMING_KIND__ALL || \
+ HAVE_TIMING == MPICH_TIMING_KIND__RUNTIME)
+
+#include "mpiallstates.h"
+
+#if (USE_LOGGING == MPICH_LOGGING__RLOG)
+#include "rlog_macros.h"
+#elif (USE_LOGGING == MPICH_LOGGING__EXTERNAL)
+#include "mpilogging.h"
+#else
+#error You must select a logging library if timing is enabled
+#endif
+
+#else /* HAVE_TIMING and doing logging */
+
+#define MPII_Timer_init(rank, size)
+#define MPII_Timer_finalize()
+
+#define MPIR_FUNC_TERSE_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_INIT_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_FINALIZE_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_EXIT(a)
+#define MPIR_FUNC_TERSE_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_FRONT(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_BACK(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_BOTH(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_BACK(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_BOTH(a)
+#define MPIR_FUNC_TERSE_COLL_ENTER(a)
+#define MPIR_FUNC_TERSE_COLL_EXIT(a)
+#define MPIR_FUNC_TERSE_RMA_ENTER(a)
+#define MPIR_FUNC_TERSE_RMA_EXIT(a)
+#define MPIR_FUNC_TERSE_INIT_ENTER(a)
+#define MPIR_FUNC_TERSE_INIT_EXIT(a)
+#define MPIR_FUNC_TERSE_FINALIZE_ENTER(a)
+#define MPIR_FUNC_TERSE_FINALIZE_EXIT(a)
+
+#define MPIR_FUNC_VERBOSE_STATE_DECL(a)
+#define MPIR_FUNC_VERBOSE_ENTER(a)
+#define MPIR_FUNC_VERBOSE_EXIT(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_ENTER(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_EXIT(a)
+#define MPIR_FUNC_VERBOSE_RMA_ENTER(a)
+#define MPIR_FUNC_VERBOSE_RMA_EXIT(a)
+
+#endif /* HAVE_TIMING */
+
+#endif /* ! defined(MPL_USE_DBG_LOGGING) && ! defined(MPICH_DEBUG_MEMARENA) */
+
+#endif /* MPIR_FUNC_H_INCLUDED */
diff --git a/src/include/mpir_group.h b/src/include/mpir_group.h
new file mode 100644
index 0000000..daa3f1e
--- /dev/null
+++ b/src/include/mpir_group.h
@@ -0,0 +1,121 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_GROUP_H_INCLUDED
+#define MPIR_GROUP_H_INCLUDED
+
+/*---------------------------------------------------------------------------
+ * Groups are *not* a major data structure in MPICH-2. They are provided
+ * only because they are required for the group operations (e.g.,
+ * MPI_Group_intersection) and for the scalable RMA synchronization
+ *---------------------------------------------------------------------------*/
+/* This structure is used to implement the group operations such as
+ MPI_Group_translate_ranks */
+typedef struct MPII_Group_pmap_t {
+ int lpid; /* local process id, from VCONN */
+ int next_lpid; /* Index of next lpid (in lpid order) */
+ int flag; /* marker, used to implement group operations */
+} MPII_Group_pmap_t;
+
+/* Any changes in the MPIR_Group structure must be made to the
+ predefined value in MPIR_Group_builtin for MPI_GROUP_EMPTY in
+ src/mpi/group/grouputil.c */
+/*S
+ MPIR_Group - Description of the Group data structure
+
+ The processes in the group of 'MPI_COMM_WORLD' have lpid values 0 to 'size'-1,
+ where 'size' is the size of 'MPI_COMM_WORLD'. Processes created by
+ 'MPI_Comm_spawn' or 'MPI_Comm_spawn_multiple' or added by 'MPI_Comm_attach'
+ or
+ 'MPI_Comm_connect'
+ are numbered greater than 'size - 1' (on the calling process). See the
+ discussion of LocalPID values.
+
+ Note that when dynamic process creation is used, the pids are `not` unique
+ across the universe of connected MPI processes. This is ok, as long as
+ pids are interpreted `only` on the process that owns them.
+
+ Only for MPI-1 are the lpid''s equal to the `global` pids. The local pids
+ can be thought of as a reference not to the remote process itself, but
+ how the remote process can be reached from this process. We may want to
+ have a structure 'MPID_Lpid_t' that contains information on the remote
+ process, such as (for TCP) the hostname, ip address (it may be different if
+ multiple interfaces are supported; we may even want plural ip addresses for
+ stripping communication), and port (or ports). For shared memory connected
+ processes, it might have the address of a remote queue. The lpid number
+ is an index into a table of 'MPID_Lpid_t'''s that contain this (device- and
+ method-specific) information.
+
+ Module:
+ Group-DS
+
+ S*/
+struct MPIR_Group {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ int size; /* Size of a group */
+ int rank; /* rank of this process relative to this
+ group */
+ int idx_of_first_lpid;
+ MPII_Group_pmap_t *lrank_to_lpid; /* Array mapping a local rank to local
+ process number */
+ int is_local_dense_monotonic; /* see NOTE-G1 */
+
+ /* We may want some additional data for the RMA syncrhonization calls */
+ /* Other, device-specific information */
+#ifdef MPID_DEV_GROUP_DECL
+ MPID_DEV_GROUP_DECL
+#endif
+};
+
+/* NOTE-G1: is_local_dense_monotonic will be true iff the group meets the
+ * following criteria:
+ * 1) the lpids are all in the range [0,size-1], i.e. a subset of comm world
+ * 2) the pids are sequentially numbered in increasing order, without any gaps,
+ * stride, or repetitions
+ *
+ * This additional information allows us to handle the common case (insofar as
+ * group ops are common) for MPI_Group_translate_ranks where group2 is
+ * group_of(MPI_COMM_WORLD), or some simple subset. This is an important use
+ * case for many MPI tool libraries, such as Scalasca.
+ */
+
+extern MPIR_Object_alloc_t MPIR_Group_mem;
+/* Preallocated group objects */
+#define MPIR_GROUP_N_BUILTIN 1
+extern MPIR_Group MPIR_Group_builtin[MPIR_GROUP_N_BUILTIN];
+extern MPIR_Group MPIR_Group_direct[];
+
+/* Object for empty group */
+extern MPIR_Group * const MPIR_Group_empty;
+
+#define MPIR_Group_add_ref( _group ) \
+ do { MPIR_Object_add_ref( _group ); } while (0)
+
+#define MPIR_Group_release_ref( _group, _inuse ) \
+ do { MPIR_Object_release_ref( _group, _inuse ); } while (0)
+
+int MPIR_Group_create( int, MPIR_Group ** );
+int MPIR_Group_release(MPIR_Group *group_ptr);
+
+int MPIR_Group_compare_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, int *result);
+int MPIR_Group_difference_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, MPIR_Group **new_group_ptr);
+int MPIR_Group_excl_impl(MPIR_Group *group_ptr, int n, const int *ranks, MPIR_Group **new_group_ptr);
+int MPIR_Group_free_impl(MPIR_Group *group_ptr);
+int MPIR_Group_incl_impl(MPIR_Group *group_ptr, int n, const int *ranks, MPIR_Group **new_group_ptr);
+int MPIR_Group_intersection_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, MPIR_Group **new_group_ptr);
+int MPIR_Group_range_excl_impl(MPIR_Group *group_ptr, int n, int ranges[][3], MPIR_Group **new_group_ptr);
+int MPIR_Group_range_incl_impl(MPIR_Group *group_ptr, int n, int ranges[][3], MPIR_Group **new_group_ptr);
+int MPIR_Group_translate_ranks_impl(MPIR_Group *group_ptr1, int n, const int *ranks1,
+ MPIR_Group *group_ptr2, int *ranks2);
+int MPIR_Group_union_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, MPIR_Group **new_group_ptr);
+int MPIR_Group_check_subset(MPIR_Group * group_ptr, MPIR_Comm * comm_ptr);
+int MPIR_Group_init(void);
+
+/* internal functions */
+void MPII_Group_setup_lpid_list( MPIR_Group * );
+
+#endif /* MPIR_GROUP_H_INCLUDED */
diff --git a/src/include/mpir_handlemem.h b/src/include/mpir_handlemem.h
new file mode 100644
index 0000000..be011fc
--- /dev/null
+++ b/src/include/mpir_handlemem.h
@@ -0,0 +1,538 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_HANDLEMEM_H_INCLUDED
+#define MPIR_HANDLEMEM_H_INCLUDED
+
+#include "mpichconfconst.h"
+#include "mpichconf.h"
+#include "mpir_objects.h"
+#include "mpir_thread.h"
+
+/* style: allow:printf:5 sig:0 */
+#ifdef MPICH_DEBUG_HANDLEALLOC
+
+/* The following is a handler that may be added to finalize to test whether
+ handles remain allocated, including those from the direct blocks.
+
+ When adding memory checking, this routine should be invoked as
+
+ MPIR_Add_finalize(MPIR_check_handles_on_finalize, objmem, 1);
+
+ as part of the object intialization.
+
+ The algorithm follows the following approach:
+
+ The memory allocation approach manages a list of available objects.
+ These objects are allocated from several places:
+ "direct" - this is a block of preallocated space
+ "indirect" - this is a block of blocks that are allocated as necessary.
+ E.g., objmem_ptr->indirect[0..objmem_ptr->indirect_size-1]
+ are pointers (or null) to a block of memory. This block is
+ then divided into objects that are added to the avail list.
+
+ To provide information on the handles that are still in use, we must
+ "repatriate" all of the free objects, at least virtually. To give
+ the best information, for each free item, we determine to which block
+ it belongs.
+*/
+static inline int MPIR_check_handles_on_finalize(void *objmem_ptr)
+{
+ MPIR_Object_alloc_t *objmem = (MPIR_Object_alloc_t *) objmem_ptr;
+ int i;
+ MPIR_Handle_common *ptr;
+ int leaked_handles = FALSE;
+ int directSize = objmem->direct_size;
+ char *direct = (char *) objmem->direct;
+ char *directEnd = (char *) direct + directSize * objmem->size - 1;
+ int nDirect = 0;
+ int *nIndirect = 0;
+
+ /* Return immediately if this object has not allocated any space */
+ if (!objmem->initialized) {
+ return 0;
+ }
+
+ if (objmem->indirect_size > 0) {
+ nIndirect = (int *) MPL_calloc(objmem->indirect_size, sizeof(int));
+ }
+ /* Count the number of items in the avail list. These include
+ * all objects, whether direct or indirect allocation */
+ ptr = objmem->avail;
+ while (ptr) {
+ /* printf("Looking at %p\n", ptr); */
+ /* Find where this object belongs */
+ if ((char *) ptr >= direct && (char *) ptr < directEnd) {
+ nDirect++;
+ }
+ else {
+ void **indirect = (void **) objmem->indirect;
+ for (i = 0; i < objmem->indirect_size; i++) {
+ char *start = indirect[i];
+ char *end = start + HANDLE_NUM_INDICES * objmem->size;
+ if ((char *) ptr >= start && (char *) ptr < end) {
+ nIndirect[i]++;
+ break;
+ }
+ }
+ if (i == objmem->indirect_size) {
+ /* Error - could not find the owning memory */
+ /* Temp */
+ printf("Could not place object at %p in handle memory for type %s\n", ptr,
+ MPIR_Handle_get_kind_str(objmem->kind));
+ printf("direct block is [%p,%p]\n", direct, directEnd);
+ if (objmem->indirect_size) {
+ printf("indirect block is [%p,%p]\n", indirect[0],
+ (char *) indirect[0] + HANDLE_NUM_INDICES * objmem->size);
+ }
+ }
+ }
+ ptr = ptr->next;
+ }
+
+ if (0) {
+ /* Produce a report */
+ printf("Object handles:\n\ttype \t%s\n\tsize \t%d\n\tdirect size\t%d\n\
+\tindirect size\t%d\n", MPIR_Handle_get_kind_str(objmem->kind), objmem->size, objmem->direct_size, objmem->indirect_size);
+ }
+ if (nDirect != directSize) {
+ leaked_handles = TRUE;
+ printf("In direct memory block for handle type %s, %d handles are still allocated\n",
+ MPIR_Handle_get_kind_str(objmem->kind), directSize - nDirect);
+ }
+ for (i = 0; i < objmem->indirect_size; i++) {
+ if (nIndirect[i] != HANDLE_NUM_INDICES) {
+ leaked_handles = TRUE;
+ printf
+ ("In indirect memory block %d for handle type %s, %d handles are still allocated\n",
+ i, MPIR_Handle_get_kind_str(objmem->kind), HANDLE_NUM_INDICES - nIndirect[i]);
+ }
+ }
+
+ if (nIndirect) {
+ MPL_free(nIndirect);
+ }
+
+ if (leaked_handles && MPIR_CVAR_ABORT_ON_LEAKED_HANDLES) {
+ /* comm_world has been (or should have been) destroyed by this point,
+ * pass comm=NULL */
+ MPID_Abort(NULL, MPI_ERR_OTHER, 1, "ERROR: leaked handles detected, aborting");
+ MPIR_Assert(0);
+ }
+
+ return 0;
+}
+
+#endif
+
+/* This is the utility file for info that contains routines used to
+ manage the arrays used to store handle objects.
+
+ To use these routines, allocate the following in a utility file
+ used by each object (e.g., info, datatype, comm, group, ...).
+ (The comment format // is used in this example but the usual
+ C comment convention should be used of course.) The usage is described
+ below.
+
+ // Declarations begin here
+ // Static declaration of the information about the block
+ // Define the number of preallocated entries # omitted)
+ define MPID_<OBJ>_PREALLOC 256
+ MPIR_Object_alloc_t MPID_<obj>_mem = { 0, 0, 0, 0, MPID_<obj>,
+ sizeof(MPID_<obj>), MPID_<obj>_direct,
+ MPID_<OBJ>_PREALLOC, };
+
+ // Preallocated objects
+ MPID_<obj> MPID_<obj>_direct[MPID_<OBJ>_PREALLOC];
+ static int initialized = 0;
+
+ // Next available object
+ static int MPID_<obj> *avail = 0;
+
+ // Extension (indirect) objects
+ static MPID_<obj> *(*MPID_<obj>_indirect)[] = 0;
+ static int MPID_<obj>_indirect_size = 0;
+ // Declarations end here
+
+ These provide for lazy initialization; applications that do not need a
+ particular object will not include any of the code or even reference
+ the space.
+
+ Note that these routines are designed for the MPI objects, and include the
+ creation of a "handle" that is appropriate for the MPI object value.
+
+ None of these routines is thread-safe. Any routine that uses them
+ must ensure that only one thread at a time may call them.
+*/
+
+/* This routine is called by finalize when MPI exits */
+static inline int MPIR_Handle_free(void *((*indirect)[]), int indirect_size)
+{
+ int i;
+
+ /* Remove any allocated storage */
+ for (i = 0; i < indirect_size; i++) {
+ MPL_free((*indirect)[i]);
+ }
+ if (indirect) {
+ MPL_free(indirect);
+ }
+ /* This does *not* remove any objects that the user created
+ * and then did not destroy */
+ return 0;
+}
+
+#if defined(MPL_VG_AVAILABLE)
+#define HANDLE_VG_LABEL(objptr_, objsize_, handle_type_, is_direct_) \
+ do { \
+ if (MPL_VG_RUNNING_ON_VALGRIND()) { \
+ char desc_str[256]; \
+ MPL_snprintf(desc_str, sizeof(desc_str)-1, \
+ "[MPICH handle: objptr=%p handle=0x%x %s/%s]", \
+ (objptr_), (objptr_)->handle, \
+ ((is_direct_) ? "DIRECT" : "INDIRECT"), \
+ MPIR_Handle_get_kind_str(handle_type_)); \
+ /* we don't keep track of the block descriptor because the handle */ \
+ /* values never change once allocated */ \
+ MPL_VG_CREATE_BLOCK((objptr_), (objsize_), desc_str); \
+ } \
+ } while (0)
+#else
+#define HANDLE_VG_LABEL(objptr_, objsize_, handle_type_, is_direct_) do {} while (0)
+#endif
+
+static inline void *MPIR_Handle_direct_init(void *direct,
+ int direct_size, int obj_size, int handle_type)
+{
+ int i;
+ MPIR_Handle_common *hptr = 0;
+ char *ptr = (char *) direct;
+
+ for (i = 0; i < direct_size; i++) {
+ /* printf("Adding %p in %d\n", ptr, handle_type); */
+ /* First cast to (void*) to avoid false warnings about alignment
+ * (consider that a requirement of the input parameters) */
+ hptr = (MPIR_Handle_common *) (void *) ptr;
+ ptr = ptr + obj_size;
+ hptr->next = ptr;
+ hptr->handle = ((unsigned) HANDLE_KIND_DIRECT << HANDLE_KIND_SHIFT) |
+ (handle_type << HANDLE_MPI_KIND_SHIFT) | i;
+
+ HANDLE_VG_LABEL(hptr, obj_size, handle_type, 1);
+ }
+
+ if (hptr)
+ hptr->next = 0;
+ return direct;
+}
+
+/* indirect is really a pointer to a pointer to an array of pointers */
+static inline void *MPIR_Handle_indirect_init(void *(**indirect)[],
+ int *indirect_size,
+ int indirect_num_blocks,
+ int indirect_num_indices,
+ int obj_size, int handle_type)
+{
+ void *block_ptr;
+ MPIR_Handle_common *hptr = 0;
+ char *ptr;
+ int i;
+
+ /* Must create new storage for dynamically allocated objects */
+ /* Create the table */
+ if (!*indirect) {
+ /* printf("Creating indirect table with %d pointers to blocks in it\n", indirect_num_blocks); */
+ *indirect = (void *) MPL_calloc(indirect_num_blocks, sizeof(void *));
+ if (!*indirect) {
+ return 0;
+ }
+ *indirect_size = 0;
+ }
+
+ /* See if we can allocate another block */
+ if (*indirect_size >= indirect_num_blocks) {
+ /* printf("Out of space in indirect table\n"); */
+ return 0;
+ }
+
+ /* Create the next block */
+ /* printf("Creating indirect block number %d with %d objects in it\n", *indirect_size, indirect_num_indices); */
+ block_ptr = (void *) MPL_calloc(indirect_num_indices, obj_size);
+ if (!block_ptr) {
+ return 0;
+ }
+ ptr = (char *) block_ptr;
+ for (i = 0; i < indirect_num_indices; i++) {
+ /* Cast to (void*) to avoid false warning about alignment */
+ hptr = (MPIR_Handle_common *) (void *) ptr;
+ ptr = ptr + obj_size;
+ hptr->next = ptr;
+ hptr->handle = ((unsigned) HANDLE_KIND_INDIRECT << HANDLE_KIND_SHIFT) |
+ (handle_type << HANDLE_MPI_KIND_SHIFT) | (*indirect_size << HANDLE_INDIRECT_SHIFT) | i;
+ /* printf("handle=%#x handle_type=%x *indirect_size=%d i=%d\n", hptr->handle, handle_type, *indirect_size, i); */
+
+ HANDLE_VG_LABEL(hptr, obj_size, handle_type, 0);
+ }
+ hptr->next = 0;
+ /* We're here because avail is null, so there is no need to set
+ * the last block ptr to avail */
+ /* printf("loc of update is %x\n", &(**indirect)[*indirect_size]); */
+ (**indirect)[*indirect_size] = block_ptr;
+ *indirect_size = *indirect_size + 1;
+ return block_ptr;
+}
+
+static inline int MPIR_Handle_finalize(void *objmem_ptr)
+{
+ MPIR_Object_alloc_t *objmem = (MPIR_Object_alloc_t *) objmem_ptr;
+
+ (void) MPIR_Handle_free(objmem->indirect, objmem->indirect_size);
+ /* This does *not* remove any Info objects that the user created
+ * and then did not destroy */
+
+ /* at this point we are done with the memory pool, inform valgrind */
+ MPL_VG_DESTROY_MEMPOOL(objmem_ptr);
+
+ return 0;
+}
+
+/*+
+ MPIR_Handle_obj_alloc - Create an object using the handle allocator
+
+Input Parameters:
+. objmem - Pointer to object memory block.
+
+ Return Value:
+ Pointer to new object. Null if no more objects are available or can
+ be allocated.
+
+ Notes:
+ In addition to returning a pointer to a new object, this routine may
+ allocate additional space for more objects.
+
+ This routine is thread-safe.
+
+ This routine is performance-critical (it may be used to allocate
+ MPI_Requests) and should not call any other routines in the common
+ case.
+
+ Threading: The 'MPID_THREAD_CS_ENTER/EXIT(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX)' enables both
+ finer-grain
+ locking with a single global mutex and with a mutex specific for handles.
+
+ +*/
+#undef FUNCNAME
+#define FUNCNAME MPIR_Handle_obj_alloc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void *MPIR_Handle_obj_alloc(MPIR_Object_alloc_t * objmem)
+{
+ void *ret;
+ MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
+ ret = MPIR_Handle_obj_alloc_unsafe(objmem);
+ MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
+ return ret;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIR_Handle_obj_alloc_unsafe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void *MPIR_Handle_obj_alloc_unsafe(MPIR_Object_alloc_t * objmem)
+{
+ MPIR_Handle_common *ptr;
+
+ if (objmem->avail) {
+ ptr = objmem->avail;
+ objmem->avail = objmem->avail->next;
+ /* We do not clear ptr->next as we set it to an invalid pattern
+ * when doing memory debugging and we don't need to set it
+ * for the production/default case */
+ /* ptr points to object to allocate */
+ }
+ else {
+ int objsize, objkind;
+
+ objsize = objmem->size;
+ objkind = objmem->kind;
+
+ if (!objmem->initialized) {
+ MPL_VG_CREATE_MEMPOOL(objmem, 0 /*rzB */ , 0 /*is_zeroed */);
+
+ /* Setup the first block. This is done here so that short MPI
+ * jobs do not need to include any of the Info code if no
+ * Info-using routines are used */
+ objmem->initialized = 1;
+ ptr = MPIR_Handle_direct_init(objmem->direct, objmem->direct_size, objsize, objkind);
+ if (ptr) {
+ objmem->avail = ptr->next;
+ }
+
+#ifdef MPICH_DEBUG_HANDLEALLOC
+ /* The priority of these callbacks must be greater than
+ * the priority of the callback that frees the objmem direct and
+ * indirect storage. */
+ MPIR_Add_finalize(MPIR_check_handles_on_finalize, objmem,
+ MPIR_FINALIZE_CALLBACK_HANDLE_CHECK_PRIO);
+#endif
+ MPIR_Add_finalize(MPIR_Handle_finalize, objmem, 0);
+ /* ptr points to object to allocate */
+ }
+ else {
+ /* no space left in direct block; setup the indirect block. */
+
+ ptr = MPIR_Handle_indirect_init(&objmem->indirect,
+ &objmem->indirect_size,
+ HANDLE_NUM_BLOCKS,
+ HANDLE_NUM_INDICES, objsize, objkind);
+ if (ptr) {
+ objmem->avail = ptr->next;
+ }
+
+ /* ptr points to object to allocate */
+ }
+ }
+
+ if (ptr) {
+#ifdef USE_MEMORY_TRACING
+ /* We set the object to an invalid pattern. This is similar to
+ * what is done by MPL_trmalloc by default (except that trmalloc uses
+ * 0xda as the byte in the memset)
+ */
+ /* if the object was previously freed then MEMPOOL_FREE marked it as
+ * NOACCESS, so we need to make it addressable again before memsetting
+ * it */
+ /* save and restore the handle -- it's a more robust method than
+ * encoding the layout of the structure */
+ int tmp_handle;
+ MPL_VG_MAKE_MEM_DEFINED(ptr, objmem->size);
+ tmp_handle = ptr->handle;
+ memset(ptr, 0xef, objmem->size);
+ ptr->handle = tmp_handle;
+#endif /* USE_MEMORY_TRACING */
+ /* mark the mem as addressable yet undefined if valgrind is available */
+ MPL_VG_MEMPOOL_ALLOC(objmem, ptr, objmem->size);
+ /* the handle value is always valid at return from this function */
+ MPL_VG_MAKE_MEM_DEFINED(&ptr->handle, sizeof(ptr->handle));
+
+ /* necessary to prevent annotations from being misinterpreted. HB/HA
+ * arcs will be drawn between a req object in across a free/alloc
+ * boundary otherwise */
+ /* NOTE: basically causes DRD's --trace-addr option to be useless for
+ * handlemem-allocated objects. Consider one of the trace-inducing
+ * annotations instead. */
+ MPL_VG_ANNOTATE_NEW_MEMORY(ptr, objmem->size);
+
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL, (MPL_DBG_FDEST,
+ "Allocating object ptr %p (handle val 0x%08x)",
+ ptr, ptr->handle));
+ }
+
+ return ptr;
+}
+
+/*+
+ MPIR_Handle_obj_free - Free an object allocated with MPID_Handle_obj_new
+
+Input Parameters:
++ objmem - Pointer to object block
+- object - Object to delete
+
+ Notes:
+ This routine assumes that only a single thread calls it at a time; this
+ is true for the SINGLE_CS approach to thread safety
+ +*/
+static inline void MPIR_Handle_obj_free(MPIR_Object_alloc_t * objmem, void *object)
+{
+ MPIR_Handle_common *obj = (MPIR_Handle_common *) object;
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
+
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL, (MPL_DBG_FDEST,
+ "Freeing object ptr %p (0x%08x kind=%s) refcount=%d",
+ (obj),
+ (obj)->handle,
+ MPIR_Handle_get_kind_str(HANDLE_GET_MPI_KIND
+ ((obj)->handle)),
+ MPIR_Object_get_ref(obj)));
+
+#ifdef USE_MEMORY_TRACING
+ {
+ /* set the object memory to an invalid value (0xec), except for the handle field */
+ int tmp_handle;
+ tmp_handle = obj->handle;
+ memset(obj, 0xec, objmem->size);
+ obj->handle = tmp_handle;
+ }
+#endif
+
+ if (MPL_VG_RUNNING_ON_VALGRIND()) {
+ int tmp_handle = obj->handle;
+
+ MPL_VG_MEMPOOL_FREE(objmem, obj);
+ /* MEMPOOL_FREE marks the object NOACCESS, so we have to make the
+ * MPIR_Handle_common area that is used for internal book keeping
+ * addressable again. */
+ MPL_VG_MAKE_MEM_DEFINED(&obj->handle, sizeof(obj->handle));
+ MPL_VG_MAKE_MEM_UNDEFINED(&obj->next, sizeof(obj->next));
+
+ /* tt#1626: MEMPOOL_FREE also uses the value of `--free-fill=0x..` to
+ * memset the object, so we need to restore the handle */
+ obj->handle = tmp_handle;
+
+ /* Necessary to prevent annotations from being misinterpreted. HB/HA arcs
+ * will be drawn between a req object in across a free/alloc boundary
+ * otherwise. Specifically, stores to obj->next when obj is actually an
+ * MPIR_Request falsely look like a race to DRD and Helgrind because of the
+ * other lockfree synchronization used with requests. */
+ MPL_VG_ANNOTATE_NEW_MEMORY(obj, objmem->size);
+ }
+
+ obj->next = objmem->avail;
+ objmem->avail = obj;
+ MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
+}
+
+/*
+ * Get an pointer to dynamically allocated storage for objects.
+ */
+static inline void *MPIR_Handle_get_ptr_indirect(int handle, MPIR_Object_alloc_t * objmem)
+{
+ int block_num, index_num;
+
+ /* Check for a valid handle type */
+ if (HANDLE_GET_MPI_KIND(handle) != objmem->kind) {
+ return 0;
+ }
+
+ /* Find the block */
+ block_num = HANDLE_BLOCK(handle);
+ if (block_num >= objmem->indirect_size) {
+ return 0;
+ }
+
+ /* Find the entry */
+ index_num = HANDLE_BLOCK_INDEX(handle);
+ /* If we could declare the blocks to a known size object, we
+ * could do something like
+ * return &((MPIR_Info**)*MPIU_Info_mem.indirect)[block_num][index_num];
+ * since we cannot, we do the calculation by hand.
+ */
+ /* Get the pointer to the block of addresses. This is an array of
+ * void * */
+ {
+ char *block_ptr;
+ /* Get the pointer to the block */
+ block_ptr = (char *) (*(objmem->indirect))[block_num];
+ /* Get the item */
+ block_ptr += index_num * objmem->size;
+ return block_ptr;
+ }
+}
+
+
+#endif /* MPIR_HANDLEMEM_H_INCLUDED */
diff --git a/src/include/mpir_info.h b/src/include/mpir_info.h
new file mode 100644
index 0000000..4fa2e85
--- /dev/null
+++ b/src/include/mpir_info.h
@@ -0,0 +1,105 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_INFO_H_INCLUDED
+#define MPIR_INFO_H_INCLUDED
+
+/* ------------------------------------------------------------------------- */
+/* Info */
+/*TInfoOverview.tex
+
+ 'MPI_Info' provides a way to create a list of '(key,value)' pairs
+ where the 'key' and 'value' are both strings. Because many routines, both
+ in the MPI implementation and in related APIs such as the PMI process
+ management interface, require 'MPI_Info' arguments, we define a simple
+ structure for each 'MPI_Info' element. Elements are allocated by the
+ generic object allocator; the head element is always empty (no 'key'
+ or 'value' is defined on the head element).
+
+ For simplicity, we have not abstracted the info data structures;
+ routines that want to work with the linked list may do so directly.
+ Because the 'MPI_Info' type is a handle and not a pointer, an MPIR
+ routine is provided to handle the
+ deallocation of 'MPIR_Info' elements. See the implementation of
+ 'MPI_Info_create' for how an Info type is allocated.
+
+ Thread Safety:
+
+ The info interface itself is not thread-robust. In particular, the routines
+ 'MPI_INFO_GET_NKEYS' and 'MPI_INFO_GET_NTHKEY' assume that no other
+ thread modifies the info key. (If the info routines had the concept
+ of a next value, they would not be thread safe. As it stands, a user
+ must be careful if several threads have access to the same info object.)
+ Further, 'MPI_INFO_DUP', while not
+ explicitly advising implementers to be careful of one thread modifying the
+ 'MPI_Info' structure while 'MPI_INFO_DUP' is copying it, requires that the
+ operation take place in a thread-safe manner.
+ There isn'' much that we can do about these cases. There are other cases
+ that must be handled. In particular, multiple threads are allowed to
+ update the same info value. Thus, all of the update routines must be thread
+ safe; the simple implementation used in the MPICH implementation uses locks.
+ Note that the 'MPI_Info_delete' call does not need a lock; the defintion of
+ thread-safety means that any order of the calls functions correctly; since
+ it invalid either to delete the same 'MPI_Info' twice or to modify an
+ 'MPI_Info' that has been deleted, only one thread at a time can call
+ 'MPI_Info_free' on any particular 'MPI_Info' value.
+
+ T*/
+/*S
+ MPIR_Info - Structure of an MPIR info
+
+ Notes:
+ There is no reference count because 'MPI_Info' values, unlike other MPI
+ objects, may be changed after they are passed to a routine without
+ changing the routine''s behavior. In other words, any routine that uses
+ an 'MPI_Info' object must make a copy or otherwise act on any info value
+ that it needs.
+
+ A linked list is used because the typical 'MPI_Info' list will be short
+ and a simple linked list is easy to implement and to maintain. Similarly,
+ a single structure rather than separate header and element structures are
+ defined for simplicity. No separate thread lock is provided because
+ info routines are not performance critical; they may use the single
+ critical section lock in the 'MPIR_Process' structure when they need a
+ thread lock.
+
+ This particular form of linked list (in particular, with this particular
+ choice of the first two members) is used because it allows us to use
+ the same routines to manage this list as are used to manage the
+ list of free objects (in the file 'src/util/mem/handlemem.c'). In
+ particular, if lock-free routines for updating a linked list are
+ provided, they can be used for managing the 'MPIR_Info' structure as well.
+
+ The MPI standard requires that keys can be no less that 32 characters and
+ no more than 255 characters. There is no mandated limit on the size
+ of values.
+
+ Module:
+ Info-DS
+ S*/
+struct MPIR_Info {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ struct MPIR_Info *next;
+ char *key;
+ char *value;
+};
+extern MPIR_Object_alloc_t MPIR_Info_mem;
+/* Preallocated info objects */
+#define MPIR_INFO_N_BUILTIN 2
+extern MPIR_Info MPIR_Info_builtin[MPIR_INFO_N_BUILTIN];
+extern MPIR_Info MPIR_Info_direct[];
+
+int MPIR_Info_get_impl(MPIR_Info *info_ptr, const char *key, int valuelen, char *value, int *flag);
+void MPIR_Info_get_nkeys_impl(MPIR_Info *info_ptr, int *nkeys);
+int MPIR_Info_get_nthkey_impl(MPIR_Info *info, int n, char *key);
+void MPIR_Info_get_valuelen_impl(MPIR_Info *info_ptr, const char *key, int *valuelen, int *flag);
+int MPIR_Info_set_impl(MPIR_Info *info_ptr, const char *key, const char *value);
+int MPIR_Info_dup_impl(MPIR_Info *info_ptr, MPIR_Info **new_info_ptr);
+void MPIR_Info_free( MPIR_Info *info_ptr );
+int MPIR_Info_alloc(MPIR_Info **info_p_p);
+
+#endif /* MPIR_INFO_H_INCLUDED */
diff --git a/src/include/mpir_mem.h b/src/include/mpir_mem.h
new file mode 100644
index 0000000..8fb8368
--- /dev/null
+++ b/src/include/mpir_mem.h
@@ -0,0 +1,268 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPIR_MEM_H_INCLUDED
+#define MPIR_MEM_H_INCLUDED
+
+#include "mpichconf.h"
+
+/* Make sure that we have the definitions for the malloc routines and size_t */
+#include <stdio.h>
+#include <stdlib.h>
+/* strdup is often declared in string.h, so if we plan to redefine strdup,
+ we need to include string first. That is done below, only in the
+ case where we redefine strdup */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#include "mpl.h"
+
+/* Define attribute as empty if it has no definition */
+#ifndef ATTRIBUTE
+#define ATTRIBUTE(a)
+#endif
+
+#if defined (MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIR_DBG_STRING;
+#endif /* MPL_USE_DBG_LOGGING */
+
+/* ------------------------------------------------------------------------- */
+/* mpir_mem.h */
+/* ------------------------------------------------------------------------- */
+/* Memory allocation */
+/* style: allow:malloc:2 sig:0 */
+/* style: allow:free:2 sig:0 */
+/* style: allow:strdup:2 sig:0 */
+/* style: allow:calloc:2 sig:0 */
+/* style: allow:realloc:1 sig:0 */
+/* style: allow:alloca:1 sig:0 */
+/* style: define:__strdup:1 sig:0 */
+/* style: define:strdup:1 sig:0 */
+/* style: allow:fprintf:5 sig:0 */ /* For handle debugging ONLY */
+/* style: allow:snprintf:1 sig:0 */
+
+/*D
+ Memory - Memory Management Routines
+
+ Rules for memory management:
+
+ MPICH explicity prohibits the appearence of 'malloc', 'free',
+ 'calloc', 'realloc', or 'strdup' in any code implementing a device or
+ MPI call (of course, users may use any of these calls in their code).
+ Instead, you must use 'MPL_malloc' etc.; if these are defined
+ as 'malloc', that is allowed, but an explicit use of 'malloc' instead of
+ 'MPL_malloc' in the source code is not allowed. This restriction is
+ made to simplify the use of portable tools to test for memory leaks,
+ overwrites, and other consistency checks.
+
+ Most memory should be allocated at the time that 'MPID_Init' is
+ called and released with 'MPID_Finalize' is called. If at all possible,
+ no other routine should fail because memory could not be allocated
+ (for example, because the user has allocated large arrays after 'MPI_Init').
+
+ The implementation of the MPI routines will strive to avoid memory allocation
+ as well; however, operations such as 'MPI_Type_index' that create a new
+ data type that reflects data that must be copied from an array of arbitrary
+ size will have to allocate memory (and can fail; note that there is an
+ MPI error class for out-of-memory).
+
+ Question:
+ Do we want to have an aligned allocation routine? E.g., one that
+ aligns memory on a cache-line.
+ D*/
+
+/* Define the string copy and duplication functions */
+/* ------------------------------------------------------------------------- */
+
+#define MPIR_Memcpy(dst, src, len) \
+ do { \
+ CHECK_MEMCPY((dst),(src),(len)); \
+ memcpy((dst), (src), (len)); \
+ } while (0)
+
+#ifdef USE_MEMORY_TRACING
+
+/* Define these as invalid C to catch their use in the code */
+#define malloc(a) 'Error use MPL_malloc' :::
+#define calloc(a,b) 'Error use MPL_calloc' :::
+#define free(a) 'Error use MPL_free' :::
+#define realloc(a) 'Error use MPL_realloc' :::
+#if defined(strdup) || defined(__strdup)
+#undef strdup
+#endif
+ /* The ::: should cause the compiler to choke; the string
+ will give the explanation */
+#undef strdup /* in case strdup is a macro */
+#define strdup(a) 'Error use MPL_strdup' :::
+
+#endif /* USE_MEMORY_TRACING */
+
+
+/* Memory allocation macros. See document. */
+
+/* Standard macro for generating error codes. We set the error to be
+ * recoverable by default, but this can be changed. */
+#ifdef HAVE_ERROR_CHECKING
+#define MPIR_CHKMEM_SETERR(rc_,nbytes_,name_) \
+ rc_=MPIR_Err_create_code( MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, \
+ MPI_ERR_OTHER, "**nomem2", "**nomem2 %d %s", nbytes_, name_ )
+#else
+#define MPIR_CHKMEM_SETERR(rc_,nbytes_,name_) rc_=MPI_ERR_OTHER
+#endif
+
+ /* CHKPMEM_REGISTER is used for memory allocated within another routine */
+
+/* Memory used and freed within the current scopy (alloca if feasible) */
+/* Configure with --enable-alloca to set USE_ALLOCA */
+#if defined(HAVE_ALLOCA) && defined(USE_ALLOCA)
+#ifdef HAVE_ALLOCA_H
+#include <alloca.h>
+#endif
+/* Define decl with a dummy definition to allow us to put a semi-colon
+ after the macro without causing the declaration block to end (restriction
+ imposed by C) */
+#define MPIR_CHKLMEM_DECL(n_) int dummy_ ATTRIBUTE((unused))
+#define MPIR_CHKLMEM_FREEALL()
+#define MPIR_CHKLMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
+{pointer_ = (type_)alloca(nbytes_); \
+ if (!(pointer_) && (nbytes_ > 0)) { \
+ MPIR_CHKMEM_SETERR(rc_,nbytes_,name_); \
+ stmt_;\
+}}
+#else
+#define MPIR_CHKLMEM_DECL(n_) \
+ void *(mpiu_chklmem_stk_[n_]); \
+ int mpiu_chklmem_stk_sp_=0;\
+ MPIR_AssertDeclValue(const int mpiu_chklmem_stk_sz_,n_)
+
+#define MPIR_CHKLMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
+{pointer_ = (type_)MPL_malloc(nbytes_); \
+if (pointer_) { \
+ MPIR_Assert(mpiu_chklmem_stk_sp_<mpiu_chklmem_stk_sz_);\
+ mpiu_chklmem_stk_[mpiu_chklmem_stk_sp_++] = pointer_;\
+ } else if (nbytes_ > 0) { \
+ MPIR_CHKMEM_SETERR(rc_,nbytes_,name_); \
+ stmt_;\
+}}
+#define MPIR_CHKLMEM_FREEALL() \
+ do { while (mpiu_chklmem_stk_sp_ > 0) {\
+ MPL_free( mpiu_chklmem_stk_[--mpiu_chklmem_stk_sp_] ); } } while(0)
+#endif /* HAVE_ALLOCA */
+#define MPIR_CHKLMEM_MALLOC(pointer_,type_,nbytes_,rc_,name_) \
+ MPIR_CHKLMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_)
+#define MPIR_CHKLMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_) \
+ MPIR_CHKLMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,goto fn_fail)
+
+/* Persistent memory that we may want to recover if something goes wrong */
+#define MPIR_CHKPMEM_DECL(n_) \
+ void *(mpiu_chkpmem_stk_[n_]) = { NULL }; \
+ int mpiu_chkpmem_stk_sp_=0;\
+ MPIR_AssertDeclValue(const int mpiu_chkpmem_stk_sz_,n_)
+#define MPIR_CHKPMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
+{pointer_ = (type_)MPL_malloc(nbytes_); \
+if (pointer_) { \
+ MPIR_Assert(mpiu_chkpmem_stk_sp_<mpiu_chkpmem_stk_sz_);\
+ mpiu_chkpmem_stk_[mpiu_chkpmem_stk_sp_++] = pointer_;\
+ } else if (nbytes_ > 0) { \
+ MPIR_CHKMEM_SETERR(rc_,nbytes_,name_); \
+ stmt_;\
+}}
+#define MPIR_CHKPMEM_REGISTER(pointer_) \
+ {MPIR_Assert(mpiu_chkpmem_stk_sp_<mpiu_chkpmem_stk_sz_);\
+ mpiu_chkpmem_stk_[mpiu_chkpmem_stk_sp_++] = pointer_;}
+#define MPIR_CHKPMEM_REAP() \
+ { while (mpiu_chkpmem_stk_sp_ > 0) {\
+ MPL_free( mpiu_chkpmem_stk_[--mpiu_chkpmem_stk_sp_] ); } }
+#define MPIR_CHKPMEM_COMMIT() \
+ mpiu_chkpmem_stk_sp_ = 0
+#define MPIR_CHKPMEM_MALLOC(pointer_,type_,nbytes_,rc_,name_) \
+ MPIR_CHKPMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_)
+#define MPIR_CHKPMEM_MALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_) \
+ MPIR_CHKPMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,goto fn_fail)
+
+/* now the CALLOC version for zeroed memory */
+#define MPIR_CHKPMEM_CALLOC(pointer_,type_,nbytes_,rc_,name_) \
+ MPIR_CHKPMEM_CALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_)
+#define MPIR_CHKPMEM_CALLOC_ORJUMP(pointer_,type_,nbytes_,rc_,name_) \
+ MPIR_CHKPMEM_CALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,goto fn_fail)
+#define MPIR_CHKPMEM_CALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
+ do { \
+ pointer_ = (type_)MPL_calloc(1, (nbytes_)); \
+ if (pointer_) { \
+ MPIR_Assert(mpiu_chkpmem_stk_sp_<mpiu_chkpmem_stk_sz_); \
+ mpiu_chkpmem_stk_[mpiu_chkpmem_stk_sp_++] = pointer_; \
+ } \
+ else if (nbytes_ > 0) { \
+ MPIR_CHKMEM_SETERR(rc_,nbytes_,name_); \
+ stmt_; \
+ } \
+ } while (0)
+
+/* A special version for routines that only allocate one item */
+#define MPIR_CHKPMEM_MALLOC1(pointer_,type_,nbytes_,rc_,name_,stmt_) \
+{pointer_ = (type_)MPL_malloc(nbytes_); \
+ if (!(pointer_) && (nbytes_ > 0)) { \
+ MPIR_CHKMEM_SETERR(rc_,nbytes_,name_); \
+ stmt_;\
+}}
+
+/* Provides a easy way to use realloc safely and avoid the temptation to use
+ * realloc unsafely (direct ptr assignment). Zero-size reallocs returning NULL
+ * are handled and are not considered an error. */
+#define MPIR_REALLOC_ORJUMP(ptr_,size_,rc_) do { \
+ void *realloc_tmp_ = MPL_realloc((ptr_), (size_)); \
+ if (size_) \
+ MPIR_ERR_CHKANDJUMP2(!realloc_tmp_,rc_,MPI_ERR_OTHER,"**nomem2","**nomem2 %d %s",(size_),MPL_QUOTE(ptr_)); \
+ (ptr_) = realloc_tmp_; \
+} while (0)
+
+#if defined(HAVE_STRNCASECMP)
+# define MPIR_Strncasecmp strncasecmp
+#elif defined(HAVE_STRNICMP)
+# define MPIR_Strncasecmp strnicmp
+#else
+/* FIXME: Provide a fallback function ? */
+# error "No function defined for case-insensitive strncmp"
+#endif
+
+/* Evaluates to a boolean expression, true if the given byte ranges overlap,
+ * false otherwise. That is, true iff [a_,a_+a_len_) overlaps with [b_,b_+b_len_) */
+#define MPIR_MEM_RANGES_OVERLAP(a_,a_len_,b_,b_len_) \
+ ( ((char *)(a_) >= (char *)(b_) && ((char *)(a_) < ((char *)(b_) + (b_len_)))) || \
+ ((char *)(b_) >= (char *)(a_) && ((char *)(b_) < ((char *)(a_) + (a_len_)))) )
+#if (!defined(NDEBUG) && defined(HAVE_ERROR_CHECKING))
+
+/* May be used to perform sanity and range checking on memcpy and mempcy-like
+ function calls. This macro will bail out much like an MPIR_Assert if any of
+ the checks fail. */
+#define CHECK_MEMCPY(dst_,src_,len_) \
+ do { \
+ if (len_) { \
+ MPL_VG_CHECK_MEM_IS_ADDRESSABLE((dst_),(len_)); \
+ MPL_VG_CHECK_MEM_IS_ADDRESSABLE((src_),(len_)); \
+ if (MPIR_MEM_RANGES_OVERLAP((dst_),(len_),(src_),(len_))) { \
+ MPIR_Assert_fmt_msg(FALSE,("memcpy argument memory ranges overlap, dst_=%p src_=%p len_=%ld\n", \
+ (dst_), (src_), (long)(len_))); \
+ } \
+ } \
+ } while (0)
+#else
+#define CHECK_MEMCPY(dst_,src_,len_) do {} while(0)
+#endif
+
+/* valgrind macros are now provided by MPL (via mpl.h included in mpiimpl.h) */
+
+/* ------------------------------------------------------------------------- */
+/* end of mpir_mem.h */
+/* ------------------------------------------------------------------------- */
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* MPIR_MEM_H_INCLUDED */
diff --git a/src/include/mpir_misc.h b/src/include/mpir_misc.h
new file mode 100644
index 0000000..b7f7750
--- /dev/null
+++ b/src/include/mpir_misc.h
@@ -0,0 +1,91 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_MISC_H_INCLUDED
+#define MPIR_MISC_H_INCLUDED
+
+#define MPIR_UNIVERSE_SIZE_NOT_SET -1
+#define MPIR_UNIVERSE_SIZE_NOT_AVAILABLE -2
+
+#define MPIR_FINALIZE_CALLBACK_PRIO 5
+#define MPIR_FINALIZE_CALLBACK_HANDLE_CHECK_PRIO 1
+#define MPIR_FINALIZE_CALLBACK_DEFAULT_PRIO 0
+#define MPIR_FINALIZE_CALLBACK_MAX_PRIO 10
+
+/* Define a typedef for the errflag value used by many internal
+ * functions. If an error needs to be returned, these values can be
+ * used to signal such. More details can be found further down in the
+ * code with the bitmasking logic */
+typedef enum {
+ MPIR_ERR_NONE = MPI_SUCCESS,
+ MPIR_ERR_PROC_FAILED = MPIX_ERR_PROC_FAILED,
+ MPIR_ERR_OTHER = MPI_ERR_OTHER
+} MPIR_Errflag_t;
+
+/*E
+ MPIR_Lang_t - Known language bindings for MPI
+
+ A few operations in MPI need to know what language they were called from
+ or created by. This type enumerates the possible languages so that
+ the MPI implementation can choose the correct behavior. An example of this
+ are the keyval attribute copy and delete functions.
+
+ Module:
+ Attribute-DS
+ E*/
+typedef enum MPIR_Lang_t {
+ MPIR_LANG__C
+#ifdef HAVE_FORTRAN_BINDING
+ , MPIR_LANG__FORTRAN
+ , MPIR_LANG__FORTRAN90
+#endif
+#ifdef HAVE_CXX_BINDING
+ , MPIR_LANG__CXX
+#endif
+} MPIR_Lang_t;
+
+extern const char MPII_Version_string[];
+extern const char MPII_Version_date[];
+extern const char MPII_Version_configure[];
+extern const char MPII_Version_device[];
+extern const char MPII_Version_CC[];
+extern const char MPII_Version_CXX[];
+extern const char MPII_Version_F77[];
+extern const char MPII_Version_FC[];
+extern const char MPII_Version_custom[];
+
+int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtype,
+ void *recvbuf, MPI_Aint recvcount, MPI_Datatype recvtype);
+
+/*@ MPIR_Add_finalize - Add a routine to be called when MPI_Finalize is invoked
+
++ routine - Routine to call
+. extra - Void pointer to data to pass to the routine
+- priority - Indicates the priority of this callback and controls the order
+ in which callbacks are executed. Use a priority of zero for most handlers;
+ higher priorities will be executed first.
+
+Notes:
+ The routine 'MPID_Finalize' is executed with priority
+ 'MPIR_FINALIZE_CALLBACK_PRIO' (currently defined as 5). Handlers with
+ a higher priority execute before 'MPID_Finalize' is called; those with
+ a lower priority after 'MPID_Finalize' is called.
+@*/
+void MPIR_Add_finalize( int (*routine)( void * ), void *extra, int priority );
+
+/* Routines for determining local and remote processes */
+int MPIR_Find_local_and_external(struct MPIR_Comm *comm, int *local_size_p, int *local_rank_p, int **local_ranks_p,
+ int *external_size_p, int *external_rank_p, int **external_ranks_p,
+ int **intranode_table, int **internode_table_p);
+int MPIR_Get_internode_rank(MPIR_Comm *comm_ptr, int r);
+int MPIR_Get_intranode_rank(MPIR_Comm *comm_ptr, int r);
+
+int MPIR_Close_port_impl(const char *port_name);
+int MPIR_Open_port_impl(MPIR_Info *info_ptr, char *port_name);
+int MPIR_Cancel_impl(MPIR_Request *request_ptr);
+
+#endif /* MPIR_MISC_H_INCLUDED */
diff --git a/src/include/mpir_misc_post.h b/src/include/mpir_misc_post.h
new file mode 100644
index 0000000..ca53ee7
--- /dev/null
+++ b/src/include/mpir_misc_post.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_MISC_POST_H_INCLUDED
+#define MPIR_MISC_POST_H_INCLUDED
+
+/* Pull the error status out of the tag space and put it into an errflag. */
+#undef FUNCNAME
+#define FUNCNAME MPIR_process_status
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIR_Process_status(MPI_Status *status, MPIR_Errflag_t *errflag)
+{
+ if (MPI_PROC_NULL != status->MPI_SOURCE &&
+ (MPIX_ERR_REVOKED == MPIR_ERR_GET_CLASS(status->MPI_ERROR) ||
+ MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(status->MPI_ERROR) ||
+ MPIR_TAG_CHECK_ERROR_BIT(status->MPI_TAG)) && !*errflag) {
+ /* If the receive was completed within the MPID_Recv, handle the
+ * errflag here. */
+ if (MPIR_TAG_CHECK_PROC_FAILURE_BIT(status->MPI_TAG) ||
+ MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(status->MPI_ERROR)) {
+ *errflag = MPIR_ERR_PROC_FAILED;
+ MPIR_TAG_CLEAR_ERROR_BITS(status->MPI_TAG);
+ } else {
+ *errflag = MPIR_ERR_OTHER;
+ MPIR_TAG_CLEAR_ERROR_BITS(status->MPI_TAG);
+ }
+ }
+}
+
+#endif /* MPIR_MISC_POST_H_INCLUDED */
diff --git a/src/include/mpir_nbc.h b/src/include/mpir_nbc.h
index 0e615e9..e90587d 100644
--- a/src/include/mpir_nbc.h
+++ b/src/include/mpir_nbc.h
@@ -8,18 +8,18 @@
#define MPIR_NBC_H_INCLUDED
/* This specifies the interface that must be exposed by the ADI in order to
- * support MPI-3 non-blocking collectives. MPID_Sched_ routines are all
+ * support MPI-3 non-blocking collectives. MPIR_Sched_ routines are all
* permitted to be inlines. They are not permitted to be macros.
*
* Most (currently all) devices will just use the default implementation that
* lives in "src/mpid/common/sched" */
-/* The device must supply a typedef for MPID_Sched_t. MPID_Sched_t is a handle
+/* The device must supply a typedef for MPIR_Sched_t. MPIR_Sched_t is a handle
* to the schedule (often a pointer under the hood), not the actual schedule.
* This makes it easy to cheaply pass the schedule between functions. Many
*
* The device must also define a constant (possibly a macro) for an invalid
- * schedule: MPID_SCHED_NULL */
+ * schedule: MPIR_SCHED_NULL */
/* Context/tag strategy for send/recv ops:
* -------------------------------
@@ -41,47 +41,49 @@
* mechanism as well.
*/
+#define MPIR_SCHED_NULL (NULL)
+
/* Open question: should tag allocation be rolled into Sched_start? Keeping it
* separate potentially allows more parallelism in the future, but it also
* pushes more work onto the clients of this interface. */
-int MPID_Sched_next_tag(MPID_Comm *comm_ptr, int *tag);
+int MPIR_Sched_next_tag(MPIR_Comm *comm_ptr, int *tag);
-/* the device must provide a typedef for MPID_Sched_t in mpidpre.h */
+/* the device must provide a typedef for MPIR_Sched_t in mpidpre.h */
/* creates a new opaque schedule object and returns a handle to it in (*sp) */
-int MPID_Sched_create(MPID_Sched_t *sp);
+int MPIR_Sched_create(MPIR_Sched_t *sp);
/* clones orig and returns a handle to the new schedule in (*cloned) */
-int MPID_Sched_clone(MPID_Sched_t orig, MPID_Sched_t *cloned);
-/* sets (*sp) to MPID_SCHED_NULL and gives you back a request pointer in (*req).
+int MPIR_Sched_clone(MPIR_Sched_t orig, MPIR_Sched_t *cloned);
+/* sets (*sp) to MPIR_SCHED_NULL and gives you back a request pointer in (*req).
* The caller is giving up ownership of the opaque schedule object.
*
* comm should be the primary (user) communicator with which this collective is
* associated, even if other hidden communicators are used for a subset of the
* operations. It will be used for error handling and similar operations. */
-int MPID_Sched_start(MPID_Sched_t *sp, MPID_Comm *comm, int tag, MPID_Request **req);
+int MPIR_Sched_start(MPIR_Sched_t *sp, MPIR_Comm *comm, int tag, MPIR_Request **req);
/* send and recv take a comm ptr to enable hierarchical collectives */
-int MPID_Sched_send(const void *buf, int count, MPI_Datatype datatype, int dest, MPID_Comm *comm, MPID_Sched_t s);
-int MPID_Sched_recv(void *buf, int count, MPI_Datatype datatype, int src, MPID_Comm *comm, MPID_Sched_t s);
+int MPIR_Sched_send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, MPIR_Comm *comm, MPIR_Sched_t s);
+int MPIR_Sched_recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int src, MPIR_Comm *comm, MPIR_Sched_t s);
/* just like MPI_Issend, can't complete until the matching recv is posted */
-int MPID_Sched_ssend(const void *buf, int count, MPI_Datatype datatype, int dest, MPID_Comm *comm, MPID_Sched_t s);
+int MPIR_Sched_ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, MPIR_Comm *comm, MPIR_Sched_t s);
-int MPID_Sched_reduce(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Sched_t s);
+int MPIR_Sched_reduce(const void *inbuf, void *inoutbuf, MPI_Aint count, MPI_Datatype datatype, MPI_Op op, MPIR_Sched_t s);
/* packing/unpacking can be accomplished by passing MPI_PACKED as either intype
* or outtype */
-int MPID_Sched_copy(const void *inbuf, int incount, MPI_Datatype intype,
- void *outbuf, int outcount, MPI_Datatype outtype, MPID_Sched_t s);
+int MPIR_Sched_copy(const void *inbuf, MPI_Aint incount, MPI_Datatype intype,
+ void *outbuf, MPI_Aint outcount, MPI_Datatype outtype, MPIR_Sched_t s);
/* require that all previously added ops are complete before subsequent ops
* may begin to execute */
-int MPID_Sched_barrier(MPID_Sched_t s);
+int MPIR_Sched_barrier(MPIR_Sched_t s);
/* A convenience macro for the extremely common case that "mpi_errno" is the
* variable used for tracking error state and MPIR_ERR_POP is needed. This
* declutters the NBC code substantially. */
-#define MPID_SCHED_BARRIER(sched_) \
+#define MPIR_SCHED_BARRIER(sched_) \
do { \
- mpi_errno = MPID_Sched_barrier(sched_); \
+ mpi_errno = MPIR_Sched_barrier(sched_); \
if (mpi_errno) MPIR_ERR_POP(mpi_errno); \
} while (0)
@@ -92,43 +94,37 @@ int MPID_Sched_barrier(MPID_Sched_t s);
* A corresponding _recv_defer function is not currently provided because there
* is no known use case. The recv count is just an upper bound, not an exact
* amount to be received, so an oversized recv is used instead of deferral. */
-int MPID_Sched_send_defer(const void *buf, const int *count, MPI_Datatype datatype, int dest, MPID_Comm *comm, MPID_Sched_t s);
-/* Just like MPID_Sched_recv except it populates the given status object with
+int MPIR_Sched_send_defer(const void *buf, const MPI_Aint *count, MPI_Datatype datatype, int dest, MPIR_Comm *comm, MPIR_Sched_t s);
+/* Just like MPIR_Sched_recv except it populates the given status object with
* the received count and error information, much like a normal recv. Often
- * useful in conjunction with MPID_Sched_send_defer. */
-int MPID_Sched_recv_status(void *buf, int count, MPI_Datatype datatype, int src, MPID_Comm *comm, MPI_Status *status, MPID_Sched_t s);
-
-/* Sched_cb_t funcitons take a comm parameter, the value of which will be the
- * comm passed to Sched_start */
-/* callback entries must be used judiciously, otherwise they will prevent
- * caching opportunities */
-typedef int (MPID_Sched_cb_t)(MPID_Comm *comm, int tag, void *state);
-typedef int (MPID_Sched_cb2_t)(MPID_Comm *comm, int tag, void *state, void *state2);
+ * useful in conjunction with MPIR_Sched_send_defer. */
+int MPIR_Sched_recv_status(void *buf, MPI_Aint count, MPI_Datatype datatype, int src, MPIR_Comm *comm, MPI_Status *status, MPIR_Sched_t s);
+
/* buffer management, fancy reductions, etc */
-int MPID_Sched_cb(MPID_Sched_cb_t *cb_p, void *cb_state, MPID_Sched_t s);
-int MPID_Sched_cb2(MPID_Sched_cb2_t *cb_p, void *cb_state, void *cb_state2, MPID_Sched_t s);
+int MPIR_Sched_cb(MPIR_Sched_cb_t *cb_p, void *cb_state, MPIR_Sched_t s);
+int MPIR_Sched_cb2(MPIR_Sched_cb2_t *cb_p, void *cb_state, void *cb_state2, MPIR_Sched_t s);
/* TODO: develop a caching infrastructure for use by the upper level as well,
* hopefully s.t. uthash can be used somehow */
/* common callback utility functions */
-int MPIR_Sched_cb_free_buf(MPID_Comm *comm, int tag, void *state);
+int MPIR_Sched_cb_free_buf(MPIR_Comm *comm, int tag, void *state);
-/* an upgraded version of MPIU_CHKPMEM_MALLOC/_DECL/_REAP/_COMMIT that adds
+/* an upgraded version of MPIR_CHKPMEM_MALLOC/_DECL/_REAP/_COMMIT that adds
* corresponding cleanup callbacks to the given schedule at _COMMIT time */
#define MPIR_SCHED_CHKPMEM_DECL(n_) \
void *(mpir_sched_chkpmem_stk_[n_]) = { NULL }; \
int mpir_sched_chkpmem_stk_sp_=0; \
- MPIU_AssertDeclValue(const int mpir_sched_chkpmem_stk_sz_,n_)
+ MPIR_AssertDeclValue(const int mpir_sched_chkpmem_stk_sz_,n_)
#define MPIR_SCHED_CHKPMEM_MALLOC_ORSTMT(pointer_,type_,nbytes_,rc_,name_,stmt_) \
do { \
- (pointer_) = (type_)MPIU_Malloc(nbytes_); \
+ (pointer_) = (type_)MPL_malloc(nbytes_); \
if (pointer_) { \
- MPIU_Assert(mpir_sched_chkpmem_stk_sp_ < mpir_sched_chkpmem_stk_sz_); \
+ MPIR_Assert(mpir_sched_chkpmem_stk_sp_ < mpir_sched_chkpmem_stk_sz_); \
mpir_sched_chkpmem_stk_[mpir_sched_chkpmem_stk_sp_++] = (pointer_); \
} else if ((nbytes_) > 0) { \
- MPIU_CHKMEM_SETERR((rc_),(nbytes_),(name_)); \
+ MPIR_CHKMEM_SETERR((rc_),(nbytes_),(name_)); \
stmt_; \
} \
} while (0)
@@ -140,15 +136,15 @@ int MPIR_Sched_cb_free_buf(MPID_Comm *comm, int tag, void *state);
#define MPIR_SCHED_CHKPMEM_REAP(sched_) \
do { \
while (mpir_sched_chkpmem_stk_sp_ > 0) { \
- MPIU_Free(mpir_sched_chkpmem_stk_[--mpir_sched_chkpmem_stk_sp_]); \
+ MPL_free(mpir_sched_chkpmem_stk_[--mpir_sched_chkpmem_stk_sp_]); \
} \
} while (0)
#define MPIR_SCHED_CHKPMEM_COMMIT(sched_) \
do { \
- MPID_SCHED_BARRIER(s); \
+ MPIR_SCHED_BARRIER(s); \
while (mpir_sched_chkpmem_stk_sp_ > 0) { \
- mpi_errno = MPID_Sched_cb(&MPIR_Sched_cb_free_buf, \
+ mpi_errno = MPIR_Sched_cb(&MPIR_Sched_cb_free_buf, \
(mpir_sched_chkpmem_stk_[--mpir_sched_chkpmem_stk_sp_]), \
(sched_)); \
if (mpi_errno) MPIR_ERR_POP(mpi_errno); \
diff --git a/src/include/mpir_objects.h b/src/include/mpir_objects.h
new file mode 100644
index 0000000..34b2342
--- /dev/null
+++ b/src/include/mpir_objects.h
@@ -0,0 +1,494 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIR_OBJECTS_H_INCLUDED
+#define MPIR_OBJECTS_H_INCLUDED
+
+#include "mpichconf.h"
+
+/*TDSOverview.tex
+
+ MPI has a number of data structures, most of which are represented by
+ an opaque handle in an MPI program. In the MPICH implementation of MPI,
+ these handles are represented
+ as integers; this makes implementation of the C/Fortran handle transfer
+ calls (part of MPI-2) easy.
+
+ MPIR objects
+ are allocated by a common set of object allocation functions.
+
+ where 'objmem' is a pointer to a memory allocation object that knows
+ enough to allocate objects, including the
+ size of the object and the location of preallocated memory, as well
+ as the type of memory allocator. By providing the routines to allocate and
+ free the memory, we make it easy to use the same interface to allocate both
+ local and shared memory for objects (always using the same kind for each
+ type of object).
+
+ The names create/destroy were chosen because they are different from
+ new/delete (C++ operations) and malloc/free.
+ Any name choice will have some conflicts with other uses, of course.
+
+ Reference Counts:
+ Many MPI objects have reference count semantics.
+ The semantics of MPI require that many objects that have been freed by the
+ user
+ (e.g., with 'MPI_Type_free' or 'MPI_Comm_free') remain valid until all
+ pending
+ references to that object (e.g., by an 'MPI_Irecv') are complete. There
+ are several ways to implement this; MPICH uses `reference counts` in the
+ objects. To support the 'MPI_THREAD_MULTIPLE' level of thread-safety, these
+ reference counts must be accessed and updated atomically.
+ A reference count for
+ `any` object can be incremented (atomically)
+ with 'MPIR_Object_add_ref(objptr)'
+ and decremented with 'MPIR_Object_release_ref(objptr,newval_ptr)'.
+ These have been designed so that then can be implemented as inlined
+ macros rather than function calls, even in the multithreaded case, and
+ can use special processor instructions that guarantee atomicity to
+ avoid thread locks.
+ The decrement routine sets the value pointed at by 'inuse_ptr' to 0 if
+ the postdecrement value of the reference counter is zero, and to a non-zero
+ value otherwise. If this value is zero, then the routine that decremented
+ the
+ reference count should free the object. This may be as simple as
+ calling 'destroy' (for simple objects with no other allocated
+ storage) or may require calling a separate routine to destroy the object.
+ Because MPI uses 'MPI_xxx_free' to both decrement the reference count and
+ free the object if the reference count is zero, we avoid the use of 'free'
+ in the MPIR destruction routines.
+
+ The 'inuse_ptr' approach is used rather than requiring the post-decrement
+ value because, for reference-count semantics, all that is necessary is
+ to know when the reference count reaches zero, and this can sometimes
+ be implemented more cheaply that requiring the post-decrement value (e.g.,
+ on IA32, there is an instruction for this operation).
+
+ Question:
+ Should we state that this is a macro so that we can use a register for
+ the output value? That avoids a store. Alternately, have the macro
+ return the value as if it was a function?
+
+ Structure Definitions:
+ The structure definitions in this document define `only` that part of
+ a structure that may be used by code that is making use of the ADI.
+ Thus, some structures, such as 'MPIR_Comm', have many defined fields;
+ these are used to support MPI routines such as 'MPI_Comm_size' and
+ 'MPI_Comm_remote_group'. Other structures may have few or no defined
+ members; these structures have no fields used outside of the ADI.
+ In C++ terms, all members of these structures are 'private'.
+
+ For the initial implementation, we expect that the structure definitions
+ will be designed for the multimethod device. However, all items that are
+ specific to a particular device (including the multi-method device)
+ will be placed at the end of the structure;
+ the document will clearly identify the members that all implementations
+ will provide. This simplifies much of the code in both the ADI and the
+ implementation of the MPI routines because structure member can be directly
+ accessed rather than using some macro or C++ style method interface.
+
+ T*/
+
+/*TOpaqOverview.tex
+ MPI Opaque Objects:
+
+ MPI Opaque objects such as 'MPI_Comm' or 'MPI_Datatype' are specified by
+ integers (in the MPICH implementation); the MPI standard calls these
+ handles.
+ Out of range values are invalid; the value 0 is reserved.
+ For most (with the possible exception of
+ 'MPI_Request' for performance reasons) MPI Opaque objects, the integer
+ encodes both the kind of object (allowing runtime tests to detect a datatype
+ passed where a communicator is expected) and important properties of the
+ object. Even the 'MPI_xxx_NULL' values should be encoded so that
+ different null handles can be distinguished. The details of the encoding
+ of the handles is covered in more detail in the MPICH Design Document.
+ For the most part, the ADI uses pointers to the underlying structures
+ rather than the handles themselves. However, each structure contains an
+ 'handle' field that is the corresponding integer handle for the MPI object.
+
+ MPIR objects are not opaque.
+
+ T*/
+
+/* Known MPI object types. These are used for both the error handlers
+ and for the handles. This is a 4 bit value. 0 is reserved for so
+ that all-zero handles can be flagged as an error. */
+/*E
+ MPII_Object_kind - Object kind (communicator, window, or file)
+
+ Notes:
+ This enum is used by keyvals and errhandlers to indicate the type of
+ object for which MPI opaque types the data is valid. These are defined
+ as bits to allow future expansion to the case where an object is value for
+ multiple types (for example, we may want a universal error handler for
+ errors return). This is also used to indicate the type of MPI object a
+ MPI handle represents. It is an enum because only this applies only the
+ the MPI and internal MPICH objects.
+
+ The 'MPIR_PROCGROUP' kind is used to manage process groups (different
+ from MPI Groups) that are used to keep track of collections of
+ processes (each 'MPIR_PROCGROUP' corresponds to a group of processes
+ that define an 'MPI_COMM_WORLD'. This becomes important only
+ when MPI-2 dynamic process features are supported. 'MPIR_VCONN' is
+ a virtual connection; while this is not part of the overall ADI3
+ design, an object that manages connections to other processes is
+ a common need, and 'MPIR_VCONN' may be used for that.
+
+ Module:
+ Attribute-DS
+ E*/
+typedef enum MPII_Object_kind {
+ MPIR_COMM = 0x1,
+ MPIR_GROUP = 0x2,
+ MPIR_DATATYPE = 0x3,
+ MPIR_FILE = 0x4, /* only used obliquely inside MPIR_Errhandler objs */
+ MPIR_ERRHANDLER = 0x5,
+ MPIR_OP = 0x6,
+ MPIR_INFO = 0x7,
+ MPIR_WIN = 0x8,
+ MPIR_KEYVAL = 0x9,
+ MPIR_ATTR = 0xa,
+ MPIR_REQUEST = 0xb,
+ MPIR_PROCGROUP = 0xc, /* These are internal device objects */
+ MPIR_VCONN = 0xd,
+ MPIR_GREQ_CLASS = 0xf
+} MPII_Object_kind;
+
+
+#define HANDLE_MPI_KIND_SHIFT 26
+#define HANDLE_GET_MPI_KIND(a) ( ((a)&0x3c000000) >> HANDLE_MPI_KIND_SHIFT )
+#define HANDLE_SET_MPI_KIND(a,kind) ((a) | ((kind) << HANDLE_MPI_KIND_SHIFT))
+
+/* returns the name of the handle kind for debugging/logging purposes */
+const char *MPIR_Handle_get_kind_str(int kind);
+
+/* Handle types. These are really 2 bits */
+#define HANDLE_KIND_INVALID 0x0
+#define HANDLE_KIND_BUILTIN 0x1
+#define HANDLE_KIND_DIRECT 0x2
+#define HANDLE_KIND_INDIRECT 0x3
+/* Mask assumes that ints are at least 4 bytes */
+#define HANDLE_KIND_MASK 0xc0000000
+#define HANDLE_KIND_SHIFT 30
+#define HANDLE_GET_KIND(a) (((unsigned)(a)&HANDLE_KIND_MASK)>>HANDLE_KIND_SHIFT)
+#define HANDLE_SET_KIND(a,kind) ((a)|((kind)<<HANDLE_KIND_SHIFT))
+
+/* For indirect, the remainder of the handle has a block and index within that
+ * block */
+#define HANDLE_INDIRECT_SHIFT 12
+#define HANDLE_BLOCK(a) (((a)& 0x03FFF000) >> HANDLE_INDIRECT_SHIFT)
+#define HANDLE_BLOCK_INDEX(a) ((a) & 0x00000FFF)
+
+/* Number of blocks is between 1 and 16384 */
+#if defined MPID_HANDLE_NUM_BLOCKS
+#define HANDLE_NUM_BLOCKS MPID_HANDLE_NUM_BLOCKS
+#else
+#define HANDLE_NUM_BLOCKS 8192
+#endif /* MPID_HANDLE_NUM_BLOCKS */
+
+/* Number of objects in a block is bewtween 1 and 4096 (each obj has an index
+ * within its block) */
+#if defined MPID_HANDLE_NUM_INDICES
+#define HANDLE_NUM_INDICES MPID_HANDLE_NUM_INDICES
+#else
+#define HANDLE_NUM_INDICES 1024
+#endif /* MPID_HANDLE_NUM_INDICES */
+
+/* For direct, the remainder of the handle is the index into a predefined
+ block */
+#define HANDLE_MASK 0x03FFFFFF
+#define HANDLE_INDEX(a) ((a)& HANDLE_MASK)
+
+#if defined (MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIR_DBG_HANDLE;
+#endif /* MPL_USE_DBG_LOGGING */
+
+/* ------------------------------------------------------------------------- */
+/* reference counting macros */
+
+/* If we're debugging the handles (including reference counts),
+ add an additional test. The check on a max refcount helps to
+ detect objects whose refcounts are not decremented as many times
+ as they are incremented */
+#ifdef MPICH_DEBUG_HANDLES
+#define MPICH_DEBUG_MAX_REFCOUNT 64
+#define HANDLE_CHECK_REFCOUNT(objptr_,op_) \
+ do { \
+ int local_ref_count_ = MPIR_Object_get_ref(objptr_); \
+ if (local_ref_count_ > MPICH_DEBUG_MAX_REFCOUNT || local_ref_count_ < 0) \
+ { \
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE,TYPICAL,(MPL_DBG_FDEST, \
+ "Invalid refcount (%d) in %p (0x%08x) %s", \
+ local_ref_count_, (objptr_), (objptr_)->handle, op_)); \
+ } \
+ MPIR_Assert(local_ref_count_ >= 0); \
+ } while (0)
+#else
+#define HANDLE_CHECK_REFCOUNT(objptr_,op_) \
+ MPIR_Assert(MPIR_Object_get_ref(objptr_) >= 0)
+#endif
+
+#define HANDLE_LOG_REFCOUNT_CHANGE(objptr_, action_str_) \
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE,TYPICAL,(MPL_DBG_FDEST, \
+ "%s %p (0x%08x kind=%s) refcount to %d", \
+ (action_str_), \
+ (objptr_), \
+ (objptr_)->handle, \
+ MPIR_Handle_get_kind_str(HANDLE_GET_MPI_KIND((objptr_)->handle)), \
+ MPIR_Object_get_ref(objptr_)))
+
+/* The "_always" versions of these macros unconditionally manipulate the
+ * reference count of the given object. They exist to permit an optimization
+ * of not reference counting predefined objects. */
+
+/* The MPL_DBG... statements are macros that vanish unless
+ --enable-g=log is selected. HANDLE_CHECK_REFCOUNT is
+ defined above, and adds an additional sanity check for the refcounts
+*/
+#if MPICH_THREAD_REFCOUNT == MPICH_REFCOUNT__NONE
+
+typedef int Handle_ref_count;
+
+#define MPIR_Object_set_ref(objptr_,val) \
+ do { \
+ (objptr_)->ref_count = val; \
+ HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "set"); \
+ } while (0)
+
+/* must be used with care, since there is no synchronization for this read */
+#define MPIR_Object_get_ref(objptr_) \
+ ((objptr_)->ref_count)
+
+#define MPIR_Object_add_ref_always(objptr_) \
+ do { \
+ (objptr_)->ref_count++; \
+ HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "incr"); \
+ HANDLE_CHECK_REFCOUNT(objptr_,"incr"); \
+ } while (0)
+#define MPIR_Object_release_ref_always(objptr_,inuse_ptr) \
+ do { \
+ *(inuse_ptr) = --((objptr_)->ref_count); \
+ HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "decr"); \
+ HANDLE_CHECK_REFCOUNT(objptr_,"decr"); \
+ } while (0)
+
+#elif MPICH_THREAD_REFCOUNT == MPICH_REFCOUNT__LOCKFREE
+
+#include "opa_primitives.h"
+typedef OPA_int_t Handle_ref_count;
+
+#define MPIR_Object_set_ref(objptr_,val) \
+ do { \
+ OPA_store_int(&(objptr_)->ref_count, val); \
+ HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "set"); \
+ } while (0)
+
+/* must be used with care, since there is no synchronization for this read */
+#define MPIR_Object_get_ref(objptr_) \
+ (OPA_load_int(&(objptr_)->ref_count))
+
+#define MPIR_Object_add_ref_always(objptr_) \
+ do { \
+ OPA_incr_int(&((objptr_)->ref_count)); \
+ HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "incr"); \
+ HANDLE_CHECK_REFCOUNT(objptr_,"incr"); \
+ } while (0)
+#define MPIR_Object_release_ref_always(objptr_,inuse_ptr) \
+ do { \
+ int got_zero_ = OPA_decr_and_test_int(&((objptr_)->ref_count)); \
+ *(inuse_ptr) = got_zero_ ? 0 : 1; \
+ HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "decr"); \
+ HANDLE_CHECK_REFCOUNT(objptr_,"decr"); \
+ } while (0)
+#else
+#error invalid value for MPICH_THREAD_REFCOUNT
+#endif
+
+/* TODO someday we should probably always suppress predefined object refcounting,
+ * but we don't have total confidence in it yet. So until we gain sufficient
+ * confidence, this is a configurable option. */
+#if defined(MPICH_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS)
+
+/* The assumption here is that objects with handles of type HANDLE_KIND_BUILTIN
+ * will be created/destroyed only at MPI_Init/MPI_Finalize time and don't need
+ * to be reference counted. This can be a big performance win on some
+ * platforms, such as BG/P.
+ *
+ * It is also assumed that any object being reference counted via these macros
+ * will have a valid value in the handle field, even if it is
+ * HANDLE_SET_KIND(0, HANDLE_KIND_INVALID) */
+/* TODO profile and examine the assembly that is generated for this if() on Blue
+ * Gene (and elsewhere). We may need to mark it unlikely(). */
+#define MPIR_Object_add_ref(objptr_) \
+ do { \
+ int handle_kind_ = HANDLE_GET_KIND((objptr_)->handle); \
+ if (unlikely(handle_kind_ != HANDLE_KIND_BUILTIN)) { \
+ MPIR_Object_add_ref_always((objptr_)); \
+ } \
+ else { \
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE,TYPICAL,(MPL_DBG_FDEST, \
+ "skipping add_ref on %p (0x%08x kind=%s) refcount=%d", \
+ (objptr_), \
+ (objptr_)->handle, \
+ MPIR_Handle_get_kind_str(HANDLE_GET_MPI_KIND((objptr_)->handle)), \
+ MPIR_Object_get_ref(objptr_))) \
+ } \
+ } while (0)
+#define MPIR_Object_release_ref(objptr_,inuse_ptr_) \
+ do { \
+ int handle_kind_ = HANDLE_GET_KIND((objptr_)->handle); \
+ if (unlikely(handle_kind_ != HANDLE_KIND_BUILTIN)) { \
+ MPIR_Object_release_ref_always((objptr_), (inuse_ptr_)); \
+ } \
+ else { \
+ *(inuse_ptr_) = 1; \
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE,TYPICAL,(MPL_DBG_FDEST, \
+ "skipping release_ref on %p (0x%08x kind=%s) refcount=%d", \
+ (objptr_), \
+ (objptr_)->handle, \
+ MPIR_Handle_get_kind_str(HANDLE_GET_MPI_KIND((objptr_)->handle)), \
+ MPIR_Object_get_ref(objptr_))) \
+ } \
+ } while (0)
+
+#else /* !defined(MPICH_THREAD_SUPPRESS_PREDEFINED_REFCOUNTS) */
+
+/* the base case, where we just always manipulate the reference counts */
+#define MPIR_Object_add_ref(objptr_) \
+ MPIR_Object_add_ref_always((objptr_))
+#define MPIR_Object_release_ref(objptr_,inuse_ptr_) \
+ MPIR_Object_release_ref_always((objptr_),(inuse_ptr_))
+
+#endif
+
+
+/* end reference counting macros */
+/* ------------------------------------------------------------------------- */
+
+/* This macro defines structure fields that are needed in order to use the
+ * reference counting and object allocation macros/functions in MPICH. This
+ * allows us to avoid casting and violating C's strict aliasing rules in most
+ * cases.
+ *
+ * All *active* (in use) objects have the handle as the first value; objects
+ * with referene counts have the reference count as the second value. See
+ * MPIR_Object_add_ref and MPIR_Object_release_ref.
+ *
+ * NOTE: This macro *must* be invoked as the very first element of the structure! */
+#define MPIR_OBJECT_HEADER \
+ int handle; \
+ Handle_ref_count ref_count/*semicolon intentionally omitted*/
+
+/* ALL objects have the handle as the first value. */
+/* Inactive (unused and stored on the appropriate avail list) objects
+ have MPIR_Handle_common as the head */
+typedef struct MPIR_Handle_common {
+ MPIR_OBJECT_HEADER;
+ void *next; /* Free handles use this field to point to the next
+ free object */
+} MPIR_Handle_common;
+
+/* This type contains all of the data, except for the direct array,
+ used by the object allocators. */
+typedef struct MPIR_Object_alloc_t {
+ MPIR_Handle_common *avail; /* Next available object */
+ int initialized; /* */
+ void *(*indirect)[]; /* Pointer to indirect object blocks */
+ int indirect_size; /* Number of allocated indirect blocks */
+ MPII_Object_kind kind; /* Kind of object this is for */
+ int size; /* Size of an individual object */
+ void *direct; /* Pointer to direct block, used
+ for allocation */
+ int direct_size; /* Size of direct block */
+} MPIR_Object_alloc_t;
+static inline void *MPIR_Handle_obj_alloc(MPIR_Object_alloc_t *);
+static inline void *MPIR_Handle_obj_alloc_unsafe(MPIR_Object_alloc_t *);
+static inline void MPIR_Handle_obj_free( MPIR_Object_alloc_t *, void * );
+static inline void *MPIR_Handle_get_ptr_indirect( int, MPIR_Object_alloc_t * );
+
+
+/* Convert Handles to objects for MPI types that have predefined objects */
+/* TODO examine generated assembly for this construct, it's probably suboptimal
+ * on Blue Gene. An if/else if/else might help the compiler out. It also lets
+ * us hint that one case is likely(), usually the BUILTIN case. */
+#define MPIR_Getb_ptr(kind,a,bmsk,ptr) \
+{ \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_BUILTIN: \
+ ptr=MPIR_##kind##_builtin+((a)&(bmsk)); \
+ break; \
+ case HANDLE_KIND_DIRECT: \
+ ptr=MPIR_##kind##_direct+HANDLE_INDEX(a); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr=((MPIR_##kind*) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIR_##kind##_mem)); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ default: \
+ ptr=0; \
+ break; \
+ } \
+}
+
+/* Convert handles to objects for MPI types that do _not_ have any predefined
+ objects */
+#define MPIR_Get_ptr(kind,a,ptr) \
+{ \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr=MPIR_##kind##_direct+HANDLE_INDEX(a); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr=((MPIR_##kind*) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIR_##kind##_mem)); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ ptr=0; \
+ break; \
+ } \
+}
+
+/* FIXME: the masks should be defined with the handle definitions instead
+ of inserted here as literals */
+#define MPIR_Comm_get_ptr(a,ptr) MPIR_Getb_ptr(Comm,a,0x03ffffff,ptr)
+#define MPIR_Group_get_ptr(a,ptr) MPIR_Getb_ptr(Group,a,0x03ffffff,ptr)
+#define MPIR_Errhandler_get_ptr(a,ptr) MPIR_Getb_ptr(Errhandler,a,0x3,ptr)
+#define MPIR_Op_get_ptr(a,ptr) MPIR_Getb_ptr(Op,a,0x000000ff,ptr)
+#define MPIR_Info_get_ptr(a,ptr) MPIR_Getb_ptr(Info,a,0x03ffffff,ptr)
+#define MPIR_Win_get_ptr(a,ptr) MPIR_Get_ptr(Win,a,ptr)
+#define MPIR_Request_get_ptr(a,ptr) MPIR_Get_ptr(Request,a,ptr)
+#define MPIR_Grequest_class_get_ptr(a,ptr) MPIR_Get_ptr(Grequest_class,a,ptr)
+/* Keyvals have a special format. This is roughly MPIR_Get_ptrb, but
+ the handle index is in a smaller bit field. In addition,
+ there is no storage for the builtin keyvals.
+ For the indirect case, we mask off the part of the keyval that is
+ in the bits normally used for the indirect block index.
+*/
+#define MPII_Keyval_get_ptr(a,ptr) \
+{ \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_BUILTIN: \
+ ptr=0; \
+ break; \
+ case HANDLE_KIND_DIRECT: \
+ ptr=MPII_Keyval_direct+((a)&0x3fffff); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr=((MPII_Keyval*) \
+ MPIR_Handle_get_ptr_indirect((a)&0xfc3fffff,&MPII_Keyval_mem)); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ default: \
+ ptr=0; \
+ break; \
+ } \
+}
+
+#endif /* MPIR_OBJECTS_H_INCLUDED */
diff --git a/src/include/mpir_op.h b/src/include/mpir_op.h
new file mode 100644
index 0000000..715dfe7
--- /dev/null
+++ b/src/include/mpir_op.h
@@ -0,0 +1,169 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_OP_H_INCLUDED
+#define MPIR_OP_H_INCLUDED
+
+/*E
+ MPIR_Op_kind - Enumerates types of MPI_Op types
+
+ Notes:
+ These are needed for implementing 'MPI_Accumulate', since only predefined
+ operations are allowed for that operation.
+
+ A gap in the enum values was made allow additional predefined operations
+ to be inserted. This might include future additions to MPI or experimental
+ extensions (such as a Read-Modify-Write operation).
+
+ Module:
+ Collective-DS
+ E*/
+typedef enum MPIR_Op_kind {
+ MPIR_OP_KIND__NULL=0,
+ MPIR_OP_KIND__MAX=1,
+ MPIR_OP_KIND__MIN=2,
+ MPIR_OP_KIND__SUM=3,
+ MPIR_OP_KIND__PROD=4,
+ MPIR_OP_KIND__LAND=5,
+ MPIR_OP_KIND__BAND=6,
+ MPIR_OP_KIND__LOR=7,
+ MPIR_OP_KIND__BOR=8,
+ MPIR_OP_KIND__LXOR=9,
+ MPIR_OP_KIND__BXOR=10,
+ MPIR_OP_KIND__MAXLOC=11,
+ MPIR_OP_KIND__MINLOC=12,
+ MPIR_OP_KIND__REPLACE=13,
+ MPIR_OP_KIND__NO_OP=14,
+ MPIR_OP_KIND__USER_NONCOMMUTE=32,
+ MPIR_OP_KIND__USER=33
+} MPIR_Op_kind;
+
+/*S
+ MPIR_User_function - Definition of a user function for MPI_Op types.
+
+ Notes:
+ This includes a 'const' to make clear which is the 'in' argument and
+ which the 'inout' argument, and to indicate that the 'count' and 'datatype'
+ arguments are unchanged (they are addresses in an attempt to allow
+ interoperation with Fortran). It includes 'restrict' to emphasize that
+ no overlapping operations are allowed.
+
+ We need to include a Fortran version, since those arguments will
+ have type 'MPI_Fint *' instead. We also need to add a test to the
+ test suite for this case; in fact, we need tests for each of the handle
+ types to ensure that the transfered handle works correctly.
+
+ This is part of the collective module because user-defined operations
+ are valid only for the collective computation routines and not for
+ RMA accumulate.
+
+ Yes, the 'restrict' is in the correct location. C compilers that
+ support 'restrict' should be able to generate code that is as good as a
+ Fortran compiler would for these functions.
+
+ We should note on the manual pages for user-defined operations that
+ 'restrict' should be used when available, and that a cast may be
+ required when passing such a function to 'MPI_Op_create'.
+
+ Question:
+ Should each of these function types have an associated typedef?
+
+ Should there be a C++ function here?
+
+ Module:
+ Collective-DS
+ S*/
+typedef union MPIR_User_function {
+ void (*c_function) ( const void *, void *,
+ const int *, const MPI_Datatype * );
+ void (*f77_function) ( const void *, void *,
+ const MPI_Fint *, const MPI_Fint * );
+} MPIR_User_function;
+/* FIXME: Should there be "restrict" in the definitions above, e.g.,
+ (*c_function)( const void restrict * , void restrict *, ... )? */
+
+/*S
+ MPIR_Op - MPI_Op structure
+
+ Notes:
+ All of the predefined functions are commutative. Only user functions may
+ be noncummutative, so there are two separate op types for commutative and
+ non-commutative user-defined operations.
+
+ Operations do not require reference counts because there are no nonblocking
+ operations that accept user-defined operations. Thus, there is no way that
+ a valid program can free an 'MPI_Op' while it is in use.
+
+ Module:
+ Collective-DS
+ S*/
+typedef struct MPIR_Op {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPIR_Op_kind kind;
+ MPIR_Lang_t language;
+ MPIR_User_function function;
+ } MPIR_Op;
+#define MPIR_OP_N_BUILTIN 15
+extern MPIR_Op MPIR_Op_builtin[MPIR_OP_N_BUILTIN];
+extern MPIR_Op MPIR_Op_direct[];
+extern MPIR_Object_alloc_t MPIR_Op_mem;
+
+#define MPIR_Op_add_ref(_op) \
+ do { MPIR_Object_add_ref(_op); } while (0)
+#define MPIR_Op_release_ref( _op, _inuse ) \
+ do { MPIR_Object_release_ref( _op, _inuse ); } while (0)
+
+/* release and free-if-not-in-use helper */
+#define MPIR_Op_release(op_p_) \
+ do { \
+ int in_use_; \
+ MPIR_Op_release_ref((op_p_), &in_use_); \
+ if (!in_use_) { \
+ MPIR_Handle_obj_free(&MPIR_Op_mem, (op_p_)); \
+ } \
+ } while (0)
+
+void MPIR_MAXF ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_MINF ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_SUM ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_PROD ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_LAND ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_BAND ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_LOR ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_BOR ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_LXOR ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_BXOR ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_MAXLOC ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_MINLOC ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_REPLACE ( void *, void *, int *, MPI_Datatype * ) ;
+void MPIR_NO_OP ( void *, void *, int *, MPI_Datatype * ) ;
+
+int MPIR_MAXF_check_dtype ( MPI_Datatype ) ;
+int MPIR_MINF_check_dtype ( MPI_Datatype ) ;
+int MPIR_SUM_check_dtype ( MPI_Datatype ) ;
+int MPIR_PROD_check_dtype ( MPI_Datatype ) ;
+int MPIR_LAND_check_dtype ( MPI_Datatype ) ;
+int MPIR_BAND_check_dtype ( MPI_Datatype ) ;
+int MPIR_LOR_check_dtype ( MPI_Datatype ) ;
+int MPIR_BOR_check_dtype ( MPI_Datatype ) ;
+int MPIR_LXOR_check_dtype ( MPI_Datatype ) ;
+int MPIR_BXOR_check_dtype ( MPI_Datatype ) ;
+int MPIR_MAXLOC_check_dtype ( MPI_Datatype ) ;
+int MPIR_MINLOC_check_dtype ( MPI_Datatype ) ;
+int MPIR_REPLACE_check_dtype ( MPI_Datatype ) ;
+int MPIR_NO_OP_check_dtype ( MPI_Datatype ) ;
+
+#define MPIR_PREDEF_OP_COUNT 14
+extern MPI_User_function *MPIR_Op_table[];
+
+typedef int (MPIR_Op_check_dtype_fn) ( MPI_Datatype );
+extern MPIR_Op_check_dtype_fn *MPIR_Op_check_dtype_table[];
+
+#define MPIR_OP_HDL_TO_FN(op) MPIR_Op_table[((op)&0xf) - 1]
+#define MPIR_OP_HDL_TO_DTYPE_FN(op) MPIR_Op_check_dtype_table[((op)&0xf) - 1]
+
+#endif /* MPIR_OP_H_INCLUDED */
diff --git a/src/include/mpir_op_util.h b/src/include/mpir_op_util.h
new file mode 100644
index 0000000..96d0b6e
--- /dev/null
+++ b/src/include/mpir_op_util.h
@@ -0,0 +1,375 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2009 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIR_OP_UTIL_H_INCLUDED
+#define MPIR_OP_UTIL_H_INCLUDED
+
+/* The MPI Standard (MPI-2.1, sec 5.9.2) defines which predfined reduction
+ operators are valid by groups of types:
+ C integer
+ Fortran integer
+ Floating point
+ Logical
+ Complex
+ Byte
+
+ We define an "x-macro" for each type group. Immediately prior to
+ instantiating any of these macros you should define a valid
+ MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_). The primary use for this
+ is to expand a given group's list into a sequence of case statements. The
+ macro MPIR_OP_TYPE_REDUCE_CASE is available as a convenience to generate a
+ case block that performs a reduction with the given operator. */
+
+#if 0 /* sample usage: */
+#undef MPIR_OP_TYPE_MACRO
+#define MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_REDUCE_CASE(mpi_type_,c_type_,MPIR_MAX)
+/* or */
+#define MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_) case (mpi_type_):
+
+MPIR_OP_TYPE_GROUP(C_INTEGER)
+MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER)
+#undef MPIR_OP_TYPE_MACRO
+#endif
+
+
+/* op_macro_ is a 2-arg macro or function that preforms the reduction
+ operation on a single element */
+/* FIXME: This code may penalize the performance on many platforms as
+ a work-around for a compiler bug in some versions of xlc. It
+ would be far better to either test for that bug or to confirm that
+ the work-around is really as benign as claimed. */
+/* Ideally "b" would be const, but xlc on POWER7 can't currently handle
+ * "const long double _Complex * restrict" as a valid pointer type. It just
+ * emits a warning and generates invalid arithmetic code. We could drop the
+ * restrict instead, but we are more likely to get an optimization from it than
+ * const. [goodell@ 2010-12-15] */
+#define MPIR_OP_TYPE_REDUCE_CASE(mpi_type_,c_type_,op_macro_) \
+ case (mpi_type_): { \
+ c_type_ * restrict a = (c_type_ *)inoutvec; \
+ /*const*/ c_type_ * restrict b = (c_type_ *)invec; \
+ for ( i=0; i<len; i++ ) \
+ a[i] = op_macro_(a[i],b[i]); \
+ break; \
+ }
+
+/* helps enforce consistent naming */
+#define MPIR_OP_TYPE_GROUP(group) MPIR_OP_TYPE_GROUP_##group
+
+/* -------------------------------------------------------------------- */
+/* These macros are used to disable non-existent types. They evaluate to
+ nothing if the particular feature test is false, otherwise they evaluate to
+ the standard macro to be expanded like any other type. */
+
+/* first define all wrapper macros as empty for possibly non-existent types */
+#define MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_CXX(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INT8_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INT16_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INT32_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_INT64_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_UINT8_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_UINT16_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_UINT32_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_UINT64_T(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_C_BOOL(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_)
+#define MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_)
+
+/* then redefine them to be valid based on other preprocessor definitions */
+#if defined(HAVE_FORTRAN_BINDING)
+# undef MPIR_OP_TYPE_MACRO_HAVE_FORTRAN
+# undef MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8
+# undef MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16
+# define MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+/* These two shouldn't really be gated on HAVE_FORTRAN_BINDING alone. There
+ should instead be an individual test like HAVE_LONG_DOUBLE, etc. */
+# define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+# define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+#if defined(HAVE_LONG_LONG_INT)
+# undef MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG
+# define MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+#if defined(HAVE_LONG_DOUBLE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE
+# define MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* Fortran fixed width integer type support */
+#if defined(MPIR_INTEGER1_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(MPIR_INTEGER2_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(MPIR_INTEGER4_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(MPIR_INTEGER8_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(MPIR_INTEGER16_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* Fortran fixed width floating point type support */
+#if defined(MPIR_REAL4_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(MPIR_REAL8_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(MPIR_REAL16_CTYPE)
+# undef MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE
+# define MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* general C++ types */
+#if defined(HAVE_CXX_BINDING)
+# undef MPIR_OP_TYPE_MACRO_HAVE_CXX
+# define MPIR_OP_TYPE_MACRO_HAVE_CXX(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* C++ complex types */
+#if defined(HAVE_CXX_COMPLEX)
+# undef MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX
+# define MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+/* also test against MPI_DATATYPE_NULL for extra safety, 0x0c000000 is the uncasted value. */
+#if defined(HAVE_CXX_COMPLEX) && (MPIR_CXX_LONG_DOUBLE_COMPLEX_VALUE != 0x0c000000)
+# undef MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX
+# define MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* C99 fixed-width types */
+#if defined(HAVE_INT8_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INT8_T
+# define MPIR_OP_TYPE_MACRO_HAVE_INT8_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_INT16_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INT16_T
+# define MPIR_OP_TYPE_MACRO_HAVE_INT16_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_INT32_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INT32_T
+# define MPIR_OP_TYPE_MACRO_HAVE_INT32_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_INT64_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_INT64_T
+# define MPIR_OP_TYPE_MACRO_HAVE_INT64_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_UINT8_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_UINT8_T
+# define MPIR_OP_TYPE_MACRO_HAVE_UINT8_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_UINT16_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_UINT16_T
+# define MPIR_OP_TYPE_MACRO_HAVE_UINT16_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_UINT32_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_UINT32_T
+# define MPIR_OP_TYPE_MACRO_HAVE_UINT32_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_UINT64_T)
+# undef MPIR_OP_TYPE_MACRO_HAVE_UINT64_T
+# define MPIR_OP_TYPE_MACRO_HAVE_UINT64_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* C boolean */
+#if defined(HAVE__BOOL)
+#undef MPIR_OP_TYPE_MACRO_HAVE_C_BOOL
+#define MPIR_OP_TYPE_MACRO_HAVE_C_BOOL(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* C complex types */
+/* Add another layer of indirection and make all of these macros evaluate to a
+ common MPIR_OP_C_COMPLEX_TYPE_MACRO macro which in turn evaluates to the
+ standard MPIR_OP_TYPE_MACRO. This lets us override behavior for these
+ natively handled types with a single macro redefinition instead of 3. */
+#undef MPIR_OP_C_COMPLEX_TYPE_MACRO
+#define MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#if defined(HAVE_FLOAT__COMPLEX)
+# undef MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX
+# define MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_DOUBLE__COMPLEX)
+# undef MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX
+# define MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+#if defined(HAVE_LONG_DOUBLE__COMPLEX)
+# undef MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX
+# define MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_)
+#endif
+
+/* C types needed to support some of the complex types.
+
+ FIXME These are a hack in most cases, but they seem to work in practice
+ and it's what we were doing prior to the mpir_op_util.h refactoring. */
+typedef struct {
+ float re;
+ float im;
+} s_complex;
+
+#if defined(HAVE_FORTRAN_BINDING)
+typedef struct {
+ MPIR_FC_REAL_CTYPE re;
+ MPIR_FC_REAL_CTYPE im;
+} s_fc_complex;
+
+typedef struct {
+ MPIR_FC_DOUBLE_CTYPE re;
+ MPIR_FC_DOUBLE_CTYPE im;
+} d_fc_complex;
+#endif
+
+typedef struct {
+ double re;
+ double im;
+} d_complex;
+
+#if defined(HAVE_LONG_DOUBLE)
+typedef struct {
+ long double re;
+ long double im;
+} ld_complex;
+#endif
+
+/* -------------------------------------------------------------------- */
+/* type group macros
+
+ Implementation note: it is important that no MPI type show up more than once
+ among all the lists. Otherwise it will be easy to end up with two case
+ statements with the same value, which is erroneous in C. Duplicate C types
+ in this list are not a problem. */
+
+/* c integer group */
+#define MPIR_OP_TYPE_GROUP_C_INTEGER \
+ MPIR_OP_TYPE_MACRO(MPI_INT, int, mpir_typename_int) \
+ MPIR_OP_TYPE_MACRO(MPI_LONG, long, mpir_typename_long) \
+ MPIR_OP_TYPE_MACRO(MPI_SHORT, short, mpir_typename_short) \
+ MPIR_OP_TYPE_MACRO(MPI_UNSIGNED_SHORT, unsigned short, mpir_typename_unsigned_short) \
+ MPIR_OP_TYPE_MACRO(MPI_UNSIGNED, unsigned, mpir_typename_unsigned) \
+ MPIR_OP_TYPE_MACRO(MPI_UNSIGNED_LONG, unsigned long, mpir_typename_unsigned_long) \
+ MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(MPI_LONG_LONG, long long, mpir_typename_long_long) \
+ MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(MPI_UNSIGNED_LONG_LONG, unsigned long long, mpir_typename_unsigned_long_long) \
+ MPIR_OP_TYPE_MACRO(MPI_SIGNED_CHAR, signed char, mpir_typename_signed_char) \
+ MPIR_OP_TYPE_MACRO(MPI_UNSIGNED_CHAR, unsigned char, mpir_typename_unsigned_char) \
+ MPIR_OP_TYPE_MACRO_HAVE_INT8_T(MPI_INT8_T, int8_t, mpir_typename_int8_t) \
+ MPIR_OP_TYPE_MACRO_HAVE_INT16_T(MPI_INT16_T, int16_t, mpir_typename_int16_t) \
+ MPIR_OP_TYPE_MACRO_HAVE_INT32_T(MPI_INT32_T, int32_t, mpir_typename_int32_t) \
+ MPIR_OP_TYPE_MACRO_HAVE_INT64_T(MPI_INT64_T, int64_t, mpir_typename_int64_t) \
+ MPIR_OP_TYPE_MACRO_HAVE_UINT8_T(MPI_UINT8_T, uint8_t, mpir_typename_uint8_t) \
+ MPIR_OP_TYPE_MACRO_HAVE_UINT16_T(MPI_UINT16_T, uint16_t, mpir_typename_uint16_t) \
+ MPIR_OP_TYPE_MACRO_HAVE_UINT32_T(MPI_UINT32_T, uint32_t, mpir_typename_uint32_t) \
+ MPIR_OP_TYPE_MACRO_HAVE_UINT64_T(MPI_UINT64_T, uint64_t, mpir_typename_uint64_t) \
+/* The MPI Standard doesn't include these types in the C integer group for
+ predefined operations but MPICH supports them when possible. */
+#define MPIR_OP_TYPE_GROUP_C_INTEGER_EXTRA \
+ MPIR_OP_TYPE_MACRO(MPI_CHAR, char, mpir_typename_char)
+
+/* fortran integer group */
+#define MPIR_OP_TYPE_GROUP_FORTRAN_INTEGER \
+ MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_INTEGER, MPI_Fint, mpir_typename_integer) \
+ MPIR_OP_TYPE_MACRO(MPI_AINT, MPI_Aint, mpir_typename_aint) \
+ MPIR_OP_TYPE_MACRO(MPI_OFFSET, MPI_Offset, mpir_typename_offset) \
+ MPIR_OP_TYPE_MACRO(MPI_COUNT, MPI_Count, mpir_typename_count)
+/* The MPI Standard doesn't include these types in the Fortran integer group for
+ predefined operations but MPICH supports them when possible. */
+#define MPIR_OP_TYPE_GROUP_FORTRAN_INTEGER_EXTRA \
+ MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_CHARACTER, char, mpir_typename_character) \
+ MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE(MPI_INTEGER1, MPIR_INTEGER1_CTYPE, mpir_typename_integer1) \
+ MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE(MPI_INTEGER2, MPIR_INTEGER2_CTYPE, mpir_typename_integer2) \
+ MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE(MPI_INTEGER4, MPIR_INTEGER4_CTYPE, mpir_typename_integer4) \
+ MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE(MPI_INTEGER8, MPIR_INTEGER8_CTYPE, mpir_typename_integer8) \
+ MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE(MPI_INTEGER16, MPIR_INTEGER16_CTYPE, mpir_typename_integer16)
+
+/* floating point group */
+/* FIXME: REAL need not be float, nor DOUBLE_PRECISION be double.
+ Fortran types are not synonyms for the C types */
+#define MPIR_OP_TYPE_GROUP_FLOATING_POINT \
+ MPIR_OP_TYPE_MACRO(MPI_FLOAT, float, mpir_typename_float) \
+ MPIR_OP_TYPE_MACRO(MPI_DOUBLE, double, mpir_typename_double) \
+ MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_REAL, MPIR_FC_REAL_CTYPE, mpir_typename_real) \
+ MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_DOUBLE_PRECISION, MPIR_FC_DOUBLE_CTYPE, mpir_typename_double_precision) \
+ MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE(MPI_LONG_DOUBLE, long double, mpir_typename_long_double) \
+/* The MPI Standard doesn't include these types in the floating point group for
+ predefined operations but MPICH supports them when possible. */
+#define MPIR_OP_TYPE_GROUP_FLOATING_POINT_EXTRA \
+ MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE(MPI_REAL4, MPIR_REAL4_CTYPE, mpir_typename_real4) \
+ MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE(MPI_REAL8, MPIR_REAL8_CTYPE, mpir_typename_real8) \
+ MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE(MPI_REAL16, MPIR_REAL16_CTYPE, mpir_typename_real16)
+
+/* logical group */
+/* FIXME Is MPI_Fint really OK here? */
+#define MPIR_OP_TYPE_GROUP_LOGICAL \
+ MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_LOGICAL, MPI_Fint, mpir_typename_logical) \
+ MPIR_OP_TYPE_MACRO_HAVE_C_BOOL(MPI_C_BOOL, _Bool, mpir_typename_c_bool) \
+ MPIR_OP_TYPE_MACRO_HAVE_CXX(MPIR_CXX_BOOL_VALUE, MPIR_CXX_BOOL_CTYPE, mpir_typename_cxx_bool_value)
+#define MPIR_OP_TYPE_GROUP_LOGICAL_EXTRA /* empty, provided for consistency */
+
+/* complex group */
+#define MPIR_OP_TYPE_GROUP_COMPLEX \
+ MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_COMPLEX, s_fc_complex, mpir_typename_complex) \
+ MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX(MPI_C_FLOAT_COMPLEX, float _Complex, mpir_typename_c_float_complex) \
+ MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX(MPI_C_DOUBLE_COMPLEX, double _Complex, mpir_typename_c_double_complex) \
+ MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX(MPI_C_LONG_DOUBLE_COMPLEX, long double _Complex, mpir_typename_c_long_double_complex)
+#define MPIR_OP_TYPE_GROUP_COMPLEX_EXTRA \
+ MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_DOUBLE_COMPLEX, d_fc_complex, mpir_typename_double_complex) \
+ MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8(MPI_COMPLEX8, s_complex, mpir_typename_complex8) \
+ MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16(MPI_COMPLEX16, d_complex, mpir_typename_complex16) \
+ MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(MPIR_CXX_COMPLEX_VALUE, s_complex, mpir_typename_cxx_complex_value) \
+ MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(MPIR_CXX_DOUBLE_COMPLEX_VALUE, d_complex, mpir_typename_cxx_double_complex_value) \
+ MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX(MPIR_CXX_LONG_DOUBLE_COMPLEX_VALUE, ld_complex, mpir_typename_cxx_long_double_complex_value)
+
+/* byte group */
+#define MPIR_OP_TYPE_GROUP_BYTE \
+ MPIR_OP_TYPE_MACRO(MPI_BYTE, unsigned char, mpir_typename_byte)
+#define MPIR_OP_TYPE_GROUP_BYTE_EXTRA /* empty, provided for consistency */
+
+/* convenience macro that just is all non-extra groups concatenated */
+#define MPIR_OP_TYPE_GROUP_ALL_BASIC \
+ MPIR_OP_TYPE_GROUP(C_INTEGER) \
+ MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER) \
+ MPIR_OP_TYPE_GROUP(FLOATING_POINT) \
+ MPIR_OP_TYPE_GROUP(LOGICAL) \
+ MPIR_OP_TYPE_GROUP(COMPLEX) \
+ MPIR_OP_TYPE_GROUP(BYTE)
+
+/* this macro includes just the extra type groups */
+#define MPIR_OP_TYPE_GROUP_ALL_EXTRA \
+ MPIR_OP_TYPE_GROUP(C_INTEGER_EXTRA) \
+ MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER_EXTRA) \
+ MPIR_OP_TYPE_GROUP(FLOATING_POINT_EXTRA) \
+ MPIR_OP_TYPE_GROUP(LOGICAL_EXTRA) \
+ MPIR_OP_TYPE_GROUP(COMPLEX_EXTRA) \
+ MPIR_OP_TYPE_GROUP(BYTE_EXTRA)
+
+#endif /* MPIR_OP_UTIL_H_INCLUDED */
diff --git a/src/include/mpir_pointers.h b/src/include/mpir_pointers.h
new file mode 100644
index 0000000..345d53d
--- /dev/null
+++ b/src/include/mpir_pointers.h
@@ -0,0 +1,79 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_POINTERS_H_INCLUDED
+#define MPIR_POINTERS_H_INCLUDED
+
+#include "mpi.h"
+#include "mpichconf.h"
+#include "mpichconfconst.h"
+#include "mpir_assert.h"
+#include "mpl.h"
+
+
+/* This test is lame. Should eventually include cookie test
+ and in-range addresses */
+#define MPIR_Valid_ptr_class(kind,ptr,errclass,err) \
+ {if (!(ptr)) { err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, errclass, \
+ "**nullptrtype", "**nullptrtype %s", #kind ); } }
+
+#define MPIR_Info_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Info,ptr,MPI_ERR_INFO,err)
+/* Check not only for a null pointer but for an invalid communicator,
+ such as one that has been freed. Let's try the ref_count as the test
+ for now */
+/* ticket #1441: check (refcount<=0) to cover the case of 0, an "over-free" of
+ * -1 or similar, and the 0xecec... case when --enable-g=mem is used */
+#define MPIR_Comm_valid_ptr(ptr,err,ignore_rev) { \
+ MPIR_Valid_ptr_class(Comm,ptr,MPI_ERR_COMM,err); \
+ if ((ptr) && MPIR_Object_get_ref(ptr) <= 0) { \
+ MPIR_ERR_SET(err,MPI_ERR_COMM,"**comm"); \
+ ptr = 0; \
+ } else if ((ptr) && (ptr)->revoked && !(ignore_rev)) { \
+ MPIR_ERR_SET(err,MPIX_ERR_REVOKED,"**comm"); \
+ } \
+}
+#define MPIR_Win_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Win,ptr,MPI_ERR_WIN,err)
+#define MPIR_Group_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Group,ptr,MPI_ERR_GROUP,err)
+#define MPIR_Op_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Op,ptr,MPI_ERR_OP,err)
+#define MPIR_Errhandler_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Errhandler,ptr,MPI_ERR_ARG,err)
+#define MPIR_Request_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Request,ptr,MPI_ERR_REQUEST,err)
+#define MPII_Keyval_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Keyval,ptr,MPI_ERR_KEYVAL,err)
+
+
+/* Assigns (src_) to (dst_), checking that (src_) fits in (dst_) without
+ * truncation.
+ *
+ * When fiddling with this macro, please keep C's overly complicated integer
+ * promotion/truncation/conversion rules in mind. A discussion of these issues
+ * can be found in Chapter 5 of "Secure Coding in C and C++" by Robert Seacord.
+ */
+#define MPIR_Assign_trunc(dst_,src_,dst_type_) \
+ do { \
+ /* will catch some of the cases if the expr_inttype macros aren't available */ \
+ MPIR_Assert((src_) == (dst_type_)(src_)); \
+ dst_ = (dst_type_)(src_); \
+ } while (0)
+
+/*
+ * Ensure an MPI_Aint value fits into a signed int.
+ * Useful for detecting overflow when MPI_Aint is larger than an int.
+ *
+ * \param[in] aint Variable of type MPI_Aint
+ */
+#define MPIR_Ensure_Aint_fits_in_int(aint) \
+ MPIR_Assert((aint) == (MPI_Aint)(int)(aint));
+
+/*
+ * Ensure an MPI_Aint value fits into a pointer.
+ * Useful for detecting overflow when MPI_Aint is larger than a pointer.
+ *
+ * \param[in] aint Variable of type MPI_Aint
+ */
+#define MPIR_Ensure_Aint_fits_in_pointer(aint) \
+ MPIR_Assert((aint) == (MPI_Aint)(uintptr_t) MPIR_AINT_CAST_TO_VOID_PTR(aint));
+
+#endif /* MPIR_POINTERS_H_INCLUDED */
diff --git a/src/include/mpir_process.h b/src/include/mpir_process.h
new file mode 100644
index 0000000..8c2dcab
--- /dev/null
+++ b/src/include/mpir_process.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_PROCESS_H_INCLUDED
+#define MPIR_PROCESS_H_INCLUDED
+
+/* Per process data */
+typedef struct PreDefined_attrs {
+ int appnum; /* Application number provided by mpiexec (MPI-2) */
+ int host; /* host */
+ int io; /* standard io allowed */
+ int lastusedcode; /* last used error code (MPI-2) */
+ int tag_ub; /* Maximum message tag */
+ int universe; /* Universe size from mpiexec (MPI-2) */
+ int wtime_is_global; /* Wtime is global over processes in COMM_WORLD */
+} PreDefined_attrs;
+
+typedef struct MPIR_Process_t {
+ OPA_int_t mpich_state; /* State of MPICH. Use OPA_int_t to make MPI_Initialized() etc.
+ thread-safe per MPI-3.1. See MPI-Forum ticket 357 */
+ int do_error_checks; /* runtime error check control */
+ struct MPIR_Comm *comm_world; /* Easy access to comm_world for
+ error handler */
+ struct MPIR_Comm *comm_self; /* Easy access to comm_self */
+ struct MPIR_Comm *comm_parent; /* Easy access to comm_parent */
+ struct MPIR_Comm *icomm_world; /* An internal version of comm_world
+ that is separate from user's
+ versions */
+ PreDefined_attrs attrs; /* Predefined attribute values */
+ int tagged_coll_mask; /* Tag space mask for tagged collectives */
+
+ /* The topology routines dimsCreate is independent of any communicator.
+ If this pointer is null, the default routine is used */
+ int (*dimsCreate)( int, int, int *);
+
+ /* Attribute dup functions. Here for lazy initialization */
+ int (*attr_dup)( int, MPIR_Attribute *, MPIR_Attribute ** );
+ int (*attr_free)( int, MPIR_Attribute ** );
+ /* There is no win_attr_dup function because there can be no MPI_Win_dup
+ function */
+ /* Routine to get the messages corresponding to dynamically created
+ error messages */
+ const char *(*errcode_to_string)( int );
+#ifdef HAVE_CXX_BINDING
+ /* Routines to call C++ functions from the C implementation of the
+ MPI reduction and attribute routines */
+ void (*cxx_call_op_fn)(const void *, void *, int, MPI_Datatype,
+ MPI_User_function * );
+ /* Error handling functions. As for the attribute functions,
+ we pass the integer file/comm/win, the address of the error code,
+ and the C function to call (itself a function defined by the
+ C++ interface and exported to C). The first argument is used
+ to specify the kind (comm,file,win) */
+ void (*cxx_call_errfn) ( int, int *, int *, void (*)(void) );
+#endif /* HAVE_CXX_BINDING */
+} MPIR_Process_t;
+extern MPIR_Process_t MPIR_Process;
+
+#endif /* MPIR_PROCESS_H_INCLUDED */
diff --git a/src/include/mpir_pt2pt.h b/src/include/mpir_pt2pt.h
new file mode 100644
index 0000000..729bf8b
--- /dev/null
+++ b/src/include/mpir_pt2pt.h
@@ -0,0 +1,20 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_PT2PT_H_INCLUDED
+#define MPIR_PT2PT_H_INCLUDED
+
+int MPIR_Ibsend_impl(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPIR_Comm *comm_ptr, MPI_Request *request);
+int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status);
+int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
+ MPI_Status array_of_statuses[]);
+int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status);
+int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
+ MPI_Status array_of_statuses[]);
+
+#endif /* MPIR_PT2PT_H_INCLUDED */
diff --git a/src/include/mpir_refcount.h b/src/include/mpir_refcount.h
new file mode 100644
index 0000000..27d45d3
--- /dev/null
+++ b/src/include/mpir_refcount.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPIR_REFCOUNT_H_INCLUDED)
+#define MPIR_REFCOUNT_H_INCLUDED
+
+#include "mpi.h"
+#include "mpichconf.h"
+
+#if MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL
+#include "mpir_refcount_global.h"
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+#include "mpir_refcount_pobj.h"
+#endif
+
+#else
+#include "mpir_refcount_single.h"
+
+#endif
+
+#endif /* !defined(MPIR_REFCOUNT_H_INCLUDED) */
diff --git a/src/include/mpir_refcount_global.h b/src/include/mpir_refcount_global.h
new file mode 100644
index 0000000..0803404
--- /dev/null
+++ b/src/include/mpir_refcount_global.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPIR_REFCOUNT_GLOBAL_H_INCLUDED)
+#define MPIR_REFCOUNT_GLOBAL_H_INCLUDED
+
+/* define a type for the completion counter */
+/* memory barriers aren't needed in this impl, because all access to completion
+ * counters is done while holding the GLOBAL critical section */
+typedef volatile int MPIR_cc_t;
+#define MPIR_cc_get(cc_) (cc_)
+#define MPIR_cc_set(cc_ptr_, val_) (*(cc_ptr_)) = (val_)
+#define MPIR_cc_is_complete(cc_ptr_) (0 == *(cc_ptr_))
+
+#define MPIR_cc_incr(cc_ptr_, was_incomplete_) \
+ do { \
+ *(was_incomplete_) = (*(cc_ptr_))++; \
+ } while (0)
+
+#define MPIR_cc_decr(cc_ptr_, incomplete_) \
+ do { \
+ *(incomplete_) = --(*(cc_ptr_)); \
+ MPIR_Assert(*(incomplete_) >= 0); \
+ } while (0)
+
+
+/* "publishes" the obj with handle value (handle_) via the handle pointer
+ * (hnd_lval_). That is, it is a version of the following statement that fixes
+ * memory consistency issues:
+ * (hnd_lval_) = (handle_);
+ *
+ * assumes that the following is always true: typeof(*hnd_lval_ptr_)==int
+ */
+/* This could potentially be generalized beyond MPI-handle objects, but we
+ * should only take that step after seeing good evidence of its use. A general
+ * macro (that is portable to non-gcc compilers) will need type information to
+ * make the appropriate volatile cast. */
+/* Ideally _GLOBAL would use this too, but we don't want to count on OPA
+ * availability in _GLOBAL mode. Instead the GLOBAL critical section should be
+ * used. */
+#define MPIR_OBJ_PUBLISH_HANDLE(hnd_lval_, handle_) \
+ do { \
+ (hnd_lval_) = (handle_); \
+ } while (0)
+
+#endif /* !defined(MPIR_REFCOUNT_MULTIPLE_H_INCLUDED) */
diff --git a/src/include/mpir_refcount_pobj.h b/src/include/mpir_refcount_pobj.h
new file mode 100644
index 0000000..6a98ed6
--- /dev/null
+++ b/src/include/mpir_refcount_pobj.h
@@ -0,0 +1,111 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPIR_REFCOUNT_POBJ_H_INCLUDED)
+#define MPIR_REFCOUNT_POBJ_H_INCLUDED
+
+/* define a type for the completion counter */
+#include "opa_primitives.h"
+
+typedef OPA_int_t MPIR_cc_t;
+
+/* implies no barrier, since this routine should only be used for request
+ * initialization */
+static inline void MPIR_cc_set(MPIR_cc_t * cc_ptr, int val)
+{
+ if (val == 0) {
+ /* values other than 0 do not enforce any ordering, and therefore do not
+ * start a HB arc */
+ /* MT FIXME using cc_set in this way is sloppy. Sometimes the caller
+ * really does know that the cc value may cleared, but more likely this
+ * is just a hack to avoid the work of figuring out what the cc value
+ * currently is and decrementing it instead. */
+ /* barrier ensures that any state written before indicating completion is
+ * seen by the thread polling on the cc. If OPA adds store-release
+ * semantics, we can convert to that instead. */
+ OPA_write_barrier();
+ MPL_VG_ANNOTATE_HAPPENS_BEFORE(cc_ptr);
+ }
+
+#if defined(MPL_VG_AVAILABLE)
+ /* MT subtle: store_int is actually safe to use, but Helgrind/DRD/TSan all
+ * view the store/load pair as a race. Using an atomic operation for the
+ * store side makes all three happy. DRD & TSan also support
+ * ANNOTATE_BENIGN_RACE, but Helgrind does not. */
+ OPA_swap_int(cc_ptr, val);
+#else
+ OPA_store_int(cc_ptr, val);
+#endif
+}
+
+ATTRIBUTE((unused))
+static inline int MPIR_cc_is_complete(MPIR_cc_t * cc_ptr)
+{
+ int complete;
+
+ complete = (0 == OPA_load_int(cc_ptr));
+ if (complete) {
+ MPL_VG_ANNOTATE_HAPPENS_AFTER(cc_ptr);
+ OPA_read_barrier();
+ }
+
+ return complete;
+}
+
+/* incomplete_==TRUE iff the cc > 0 after the decr */
+#define MPIR_cc_decr(cc_ptr_, incomplete_) \
+ do { \
+ int ctr_; \
+ OPA_write_barrier(); \
+ MPL_VG_ANNOTATE_HAPPENS_BEFORE(cc_ptr_); \
+ ctr_ = OPA_fetch_and_decr_int(cc_ptr_); \
+ MPIR_Assert(ctr_ >= 1); \
+ *(incomplete_) = (ctr_ != 1); \
+ /* TODO check if this HA is actually necessary */ \
+ if (!*(incomplete_)) { \
+ MPL_VG_ANNOTATE_HAPPENS_AFTER(cc_ptr_); \
+ } \
+ } while (0)
+
+/* MT FIXME does this need a HB/HA annotation? This macro is only used for
+ * cancel_send right now. */
+/* was_incomplete_==TRUE iff the cc==0 before the decr */
+#define MPIR_cc_incr(cc_ptr_, was_incomplete_) \
+ do { \
+ *(was_incomplete_) = OPA_fetch_and_incr_int(cc_ptr_); \
+ } while (0)
+
+#define MPIR_cc_get(cc_) OPA_load_int(&(cc_))
+
+/* "publishes" the obj with handle value (handle_) via the handle pointer
+ * (hnd_lval_). That is, it is a version of the following statement that fixes
+ * memory consistency issues:
+ * (hnd_lval_) = (handle_);
+ *
+ * assumes that the following is always true: typeof(*hnd_lval_ptr_)==int
+ */
+/* This could potentially be generalized beyond MPI-handle objects, but we
+ * should only take that step after seeing good evidence of its use. A general
+ * macro (that is portable to non-gcc compilers) will need type information to
+ * make the appropriate volatile cast. */
+/* Ideally _GLOBAL would use this too, but we don't want to count on OPA
+ * availability in _GLOBAL mode. Instead the GLOBAL critical section should be
+ * used. */
+#define MPIR_OBJ_PUBLISH_HANDLE(hnd_lval_, handle_) \
+ do { \
+ if (MPIR_ThreadInfo.isThreaded) { \
+ /* wmb ensures all read-only object field values are seen before the */ \
+ /* handle value is seen at the application level */ \
+ OPA_write_barrier(); \
+ /* volatile ensures lval is not speculatively read or written */ \
+ *(volatile int *)&(hnd_lval_) = (handle_); \
+ } \
+ else { \
+ (hnd_lval_) = (handle_); \
+ } \
+ } while (0)
+
+#endif /* !defined(MPIR_REFCOUNT_POBJ_H_INCLUDED) */
diff --git a/src/include/mpir_refcount_single.h b/src/include/mpir_refcount_single.h
new file mode 100644
index 0000000..c5116db
--- /dev/null
+++ b/src/include/mpir_refcount_single.h
@@ -0,0 +1,48 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPIR_REFCOUNT_SINGLE_H_INCLUDED)
+#define MPIR_REFCOUNT_SINGLE_H_INCLUDED
+
+/* define a type for the completion counter */
+typedef int MPIR_cc_t;
+
+#define MPIR_cc_get(cc_) (cc_)
+#define MPIR_cc_set(cc_ptr_, val_) (*(cc_ptr_)) = (val_)
+#define MPIR_cc_is_complete(cc_ptr_) (0 == *(cc_ptr_))
+
+#define MPIR_cc_incr(cc_ptr_, was_incomplete_) \
+ do { \
+ *(was_incomplete_) = (*(cc_ptr_))++; \
+ } while (0)
+
+#define MPIR_cc_decr(cc_ptr_, incomplete_) \
+ do { \
+ *(incomplete_) = --(*(cc_ptr_)); \
+ MPIR_Assert(*(incomplete_) >= 0); \
+ } while (0)
+
+
+/* "publishes" the obj with handle value (handle_) via the handle pointer
+ * (hnd_lval_). That is, it is a version of the following statement that fixes
+ * memory consistency issues:
+ * (hnd_lval_) = (handle_);
+ *
+ * assumes that the following is always true: typeof(*hnd_lval_ptr_)==int
+ */
+/* This could potentially be generalized beyond MPI-handle objects, but we
+ * should only take that step after seeing good evidence of its use. A general
+ * macro (that is portable to non-gcc compilers) will need type information to
+ * make the appropriate volatile cast. */
+/* Ideally _GLOBAL would use this too, but we don't want to count on OPA
+ * availability in _GLOBAL mode. Instead the GLOBAL critical section should be
+ * used. */
+#define MPIR_OBJ_PUBLISH_HANDLE(hnd_lval_, handle_) \
+ do { \
+ (hnd_lval_) = (handle_); \
+ } while (0)
+
+#endif /* !defined(MPIR_REFCOUNT_SINGLE_H_INCLUDED) */
diff --git a/src/include/mpir_request.h b/src/include/mpir_request.h
new file mode 100644
index 0000000..9458279
--- /dev/null
+++ b/src/include/mpir_request.h
@@ -0,0 +1,308 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_REQUEST_H_INCLUDED
+#define MPIR_REQUEST_H_INCLUDED
+
+/* NOTE-R1: MPIR_REQUEST_KIND__MPROBE signifies that this is a request created by
+ * MPI_Mprobe or MPI_Improbe. Since we use MPI_Request objects as our
+ * MPI_Message objects, we use this separate kind in order to provide stronger
+ * error checking. Once a message (backed by a request) is promoted to a real
+ * request by calling MPI_Mrecv/MPI_Imrecv, we actually modify the kind to be
+ * MPIR_REQUEST_KIND__RECV in order to keep completion logic as simple as possible. */
+/*E
+ MPIR_Request_kind - Kinds of MPI Requests
+
+ Module:
+ Request-DS
+
+ E*/
+typedef enum MPIR_Request_kind_t {
+ MPIR_REQUEST_KIND__UNDEFINED,
+ MPIR_REQUEST_KIND__SEND,
+ MPIR_REQUEST_KIND__RECV,
+ MPIR_REQUEST_KIND__PREQUEST_SEND,
+ MPIR_REQUEST_KIND__PREQUEST_RECV,
+ MPIR_REQUEST_KIND__GREQUEST,
+ MPIR_REQUEST_KIND__COLL,
+ MPIR_REQUEST_KIND__MPROBE, /* see NOTE-R1 */
+ MPIR_REQUEST_KIND__RMA,
+ MPIR_REQUEST_KIND__LAST
+#ifdef MPID_REQUEST_KIND_DECL
+ , MPID_REQUEST_KIND_DECL
+#endif
+} MPIR_Request_kind_t;
+
+/* This currently defines a single structure type for all requests.
+ Eventually, we may want a union type, as used in MPICH-1 */
+/* Typedefs for Fortran generalized requests */
+typedef void (MPIR_Grequest_f77_cancel_function)(void *, MPI_Fint*, MPI_Fint *);
+typedef void (MPIR_Grequest_f77_free_function)(void *, MPI_Fint *);
+typedef void (MPIR_Grequest_f77_query_function)(void *, MPI_Fint *, MPI_Fint *);
+
+/* vtable-ish structure holding generalized request function pointers and other
+ * state. Saves ~48 bytes in pt2pt requests on many platforms. */
+struct MPIR_Grequest_fns {
+ MPI_Grequest_cancel_function *cancel_fn;
+ MPI_Grequest_free_function *free_fn;
+ MPI_Grequest_query_function *query_fn;
+ MPIX_Grequest_poll_function *poll_fn;
+ MPIX_Grequest_wait_function *wait_fn;
+ void *grequest_extra_state;
+ MPIX_Grequest_class greq_class;
+ MPIR_Lang_t greq_lang; /* language that defined
+ the generalize req */
+};
+
+typedef struct MPIR_Grequest_class {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPI_Grequest_query_function *query_fn;
+ MPI_Grequest_free_function *free_fn;
+ MPI_Grequest_cancel_function *cancel_fn;
+ MPIX_Grequest_poll_function *poll_fn;
+ MPIX_Grequest_wait_function *wait_fn;
+ struct MPIR_Grequest_class *next;
+} MPIR_Grequest_class;
+
+#define MPIR_Request_extract_status(request_ptr_, status_) \
+ { \
+ if ((status_) != MPI_STATUS_IGNORE) \
+ { \
+ int error__; \
+ \
+ /* According to the MPI 1.1 standard page 22 lines 9-12, \
+ * the MPI_ERROR field may not be modified except by the \
+ * functions in section 3.7.5 which return \
+ * MPI_ERR_IN_STATUSES (MPI_Wait{all,some} and \
+ * MPI_Test{all,some}). */ \
+ error__ = (status_)->MPI_ERROR; \
+ *(status_) = (request_ptr_)->status; \
+ (status_)->MPI_ERROR = error__; \
+ } \
+ }
+
+#define MPIR_Request_is_complete(req_) (MPIR_cc_is_complete((req_)->cc_ptr))
+
+/*S
+ MPIR_Request - Description of the Request data structure
+
+ Module:
+ Request-DS
+
+ Notes:
+ If it is necessary to remember the MPI datatype, this information is
+ saved within the device-specific fields provided by 'MPID_DEV_REQUEST_DECL'.
+
+ Requests come in many flavors, as stored in the 'kind' field. It is
+ expected that each kind of request will have its own structure type
+ (e.g., 'MPIR_Request_send_t') that extends the 'MPIR_Request'.
+
+ S*/
+struct MPIR_Request {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+
+ MPIR_Request_kind_t kind;
+
+ /* pointer to the completion counter. This is necessary for the
+ * case when an operation is described by a list of requests */
+ MPIR_cc_t *cc_ptr;
+ /* the actual completion counter. Ensure cc and status are in the
+ * same cache line, assuming the cache line size is a multiple of
+ * 32 bytes and 32-bit integers */
+ MPIR_cc_t cc;
+
+ /* completion notification counter: this must be decremented by
+ * the request completion routine, when the completion count hits
+ * zero. this counter allows us to keep track of the completion
+ * of multiple requests in a single place. */
+ MPIR_cc_t *completion_notification;
+
+ /* A comm is needed to find the proper error handler */
+ MPIR_Comm *comm;
+ /* Status is needed for wait/test/recv */
+ MPI_Status status;
+
+ union {
+ struct {
+ struct MPIR_Grequest_fns *greq_fns;
+ } ureq; /* kind : MPIR_REQUEST_KIND__GREQUEST */
+ struct {
+ MPIR_Errflag_t errflag;
+ } nbc; /* kind : MPIR_REQUEST_KIND__COLL */
+#if defined HAVE_DEBUGGER_SUPPORT
+ struct {
+ struct MPIR_Sendq *dbg_next;
+ } send; /* kind : MPID_REQUEST_SEND */
+#endif /* HAVE_DEBUGGER_SUPPORT */
+ struct {
+#if defined HAVE_DEBUGGER_SUPPORT
+ struct MPIR_Sendq *dbg_next;
+#endif /* HAVE_DEBUGGER_SUPPORT */
+ /* Persistent requests have their own "real" requests */
+ struct MPIR_Request *real_request;
+ } persist; /* kind : MPID_PREQUEST_SEND or MPID_PREQUEST_RECV */
+ } u;
+
+ /* Other, device-specific information */
+#ifdef MPID_DEV_REQUEST_DECL
+ MPID_DEV_REQUEST_DECL
+#endif
+};
+
+#define MPIR_REQUEST_PREALLOC 8
+
+extern MPIR_Object_alloc_t MPIR_Request_mem;
+/* Preallocated request objects */
+extern MPIR_Request MPIR_Request_direct[];
+
+static inline MPIR_Request *MPIR_Request_create(MPIR_Request_kind_t kind)
+{
+ MPIR_Request *req;
+
+ req = MPIR_Handle_obj_alloc(&MPIR_Request_mem);
+ if (req != NULL) {
+ MPL_DBG_MSG_P(MPIR_DBG_REQUEST,VERBOSE,
+ "allocated request, handle=0x%08x", req->handle);
+#ifdef MPICH_DBG_OUTPUT
+ /*MPIR_Assert(HANDLE_GET_MPI_KIND(req->handle) == MPIR_REQUEST);*/
+ if (HANDLE_GET_MPI_KIND(req->handle) != MPIR_REQUEST)
+ {
+ int mpi_errno;
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
+ FCNAME, __LINE__, MPI_ERR_OTHER,
+ "**invalid_handle", "**invalid_handle %d", req->handle);
+ MPID_Abort(MPIR_Process.comm_world, mpi_errno, -1, NULL);
+ }
+#endif
+ /* FIXME: This makes request creation expensive. We need to
+ * trim this to the basics, with additional setup for
+ * special-purpose requests (think base class and
+ * inheritance). For example, do we really* want to set the
+ * kind to UNDEFINED? And should the RMA values be set only
+ * for RMA requests? */
+ MPIR_Object_set_ref(req, 1);
+ req->kind = kind;
+ MPIR_cc_set(&req->cc, 1);
+ req->cc_ptr = &req->cc;
+
+ req->completion_notification = NULL;
+
+ req->status.MPI_ERROR = MPI_SUCCESS;
+ MPIR_STATUS_SET_CANCEL_BIT(req->status, FALSE);
+
+ req->comm = NULL;
+
+ switch(kind) {
+ case MPIR_REQUEST_KIND__SEND:
+ MPII_REQUEST_CLEAR_DBG(req);
+ break;
+ case MPIR_REQUEST_KIND__COLL:
+ req->u.nbc.errflag = MPIR_ERR_NONE;
+ break;
+ default:
+ break;
+ }
+
+ MPID_Request_create_hook(req);
+ }
+ else
+ {
+ /* FIXME: This fails to fail if debugging is turned off */
+ MPL_DBG_MSG(MPIR_DBG_REQUEST,TYPICAL,"unable to allocate a request");
+ }
+
+ return req;
+}
+
+#define MPIR_Request_add_ref( _req ) \
+ do { MPIR_Object_add_ref( _req ); } while (0)
+
+#define MPIR_Request_release_ref( _req, _inuse ) \
+ do { MPIR_Object_release_ref( _req, _inuse ); } while (0)
+
+static inline void MPIR_Request_free(MPIR_Request *req)
+{
+ int inuse;
+
+ MPIR_Request_release_ref(req, &inuse);
+
+ /* inform the device that we are decrementing the ref-count on
+ * this request */
+ MPID_Request_free_hook(req);
+
+ if (inuse == 0) {
+ MPL_DBG_MSG_P(MPIR_DBG_REQUEST,VERBOSE,
+ "freeing request, handle=0x%08x", req->handle);
+
+#ifdef MPICH_DBG_OUTPUT
+ if (HANDLE_GET_MPI_KIND(req->handle) != MPIR_REQUEST)
+ {
+ int mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
+ FCNAME, __LINE__, MPI_ERR_OTHER,
+ "**invalid_handle", "**invalid_handle %d", req->handle);
+ MPID_Abort(MPIR_Process.comm_world, mpi_errno, -1, NULL);
+ }
+
+ if (req->ref_count != 0)
+ {
+ int mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
+ FCNAME, __LINE__, MPI_ERR_OTHER,
+ "**invalid_refcount", "**invalid_refcount %d", req->ref_count);
+ MPID_Abort(MPIR_Process.comm_world, mpi_errno, -1, NULL);
+ }
+#endif
+
+ /* FIXME: We need a better way to handle these so that we do
+ * not always need to initialize these fields and check them
+ * when we destroy a request */
+ /* FIXME: We need a way to call these routines ONLY when the
+ * related ref count has become zero. */
+ if (req->comm != NULL) {
+ MPIR_Comm_release(req->comm);
+ }
+
+ if (req->kind == MPIR_REQUEST_KIND__GREQUEST && req->u.ureq.greq_fns != NULL) {
+ MPL_free(req->u.ureq.greq_fns);
+ }
+
+ MPID_Request_destroy_hook(req);
+
+ MPIR_Handle_obj_free(&MPIR_Request_mem, req);
+ }
+}
+
+int MPIR_Request_complete(MPI_Request *, MPIR_Request *, MPI_Status *, int *);
+int MPIR_Request_get_error(MPIR_Request *);
+int MPIR_Progress_wait_request(MPIR_Request *req);
+
+/* The following routines perform the callouts to the user routines registered
+ as part of a generalized request. They handle any language binding issues
+ that are necessary. They are used when completing, freeing, cancelling or
+ extracting the status from a generalized request. */
+int MPIR_Grequest_cancel(MPIR_Request * request_ptr, int complete);
+int MPIR_Grequest_query(MPIR_Request * request_ptr);
+int MPIR_Grequest_free(MPIR_Request * request_ptr);
+
+/* this routine was added to support our extension relaxing the progress rules
+ * for generalized requests */
+int MPIR_Grequest_progress_poke(int count, MPIR_Request **request_ptrs,
+ MPI_Status array_of_statuses[] );
+int MPIR_Grequest_waitall(int count, MPIR_Request * const * request_ptrs);
+
+void MPIR_Grequest_complete_impl(MPIR_Request *request_ptr);
+int MPIR_Grequest_start_impl(MPI_Grequest_query_function *query_fn,
+ MPI_Grequest_free_function *free_fn,
+ MPI_Grequest_cancel_function *cancel_fn,
+ void *extra_state, MPIR_Request **request_ptr);
+int MPIX_Grequest_start_impl(MPI_Grequest_query_function *,
+ MPI_Grequest_free_function *,
+ MPI_Grequest_cancel_function *,
+ MPIX_Grequest_poll_function *,
+ MPIX_Grequest_wait_function *, void *,
+ MPIR_Request **);
+
+#endif /* MPIR_REQUEST_H_INCLUDED */
diff --git a/src/include/mpir_status.h b/src/include/mpir_status.h
new file mode 100644
index 0000000..abf4eb3
--- /dev/null
+++ b/src/include/mpir_status.h
@@ -0,0 +1,65 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_STATUS_H_INCLUDED
+#define MPIR_STATUS_H_INCLUDED
+
+/* We use bits from the "count_lo" and "count_hi_and_cancelled" fields
+ * to represent the 'count' and 'cancelled' objects. The LSB of the
+ * "count_hi_and_cancelled" field represents the 'cancelled' object.
+ * The 'count' object is split between the "count_lo" and
+ * "count_hi_and_cancelled" fields, with the lower order bits going
+ * into the "count_lo" field, and the higher order bits goin into the
+ * "count_hi_and_cancelled" field. This gives us 2N-1 bits for the
+ * 'count' object, where N is the size of int. However, the value
+ * returned to the user is bounded by the definition on MPI_Count. */
+/* NOTE: The below code assumes that the count value is never
+ * negative. For negative values, right-shifting can have weird
+ * implementation specific consequences. */
+#define MPIR_STATUS_SET_COUNT(status_, count_) \
+ { \
+ (status_).count_lo = ((int) count_); \
+ (status_).count_hi_and_cancelled &= 1; \
+ (status_).count_hi_and_cancelled |= (int) ((MPIR_Ucount) count_ >> (8 * SIZEOF_INT) << 1); \
+ }
+
+#define MPIR_STATUS_GET_COUNT(status_) \
+ ((MPI_Count) ((((MPIR_Ucount) (((unsigned int) (status_).count_hi_and_cancelled) >> 1)) << (8 * SIZEOF_INT)) + (unsigned int) (status_).count_lo))
+
+#define MPIR_STATUS_SET_CANCEL_BIT(status_, cancelled_) \
+ { \
+ (status_).count_hi_and_cancelled &= ~1; \
+ (status_).count_hi_and_cancelled |= cancelled_; \
+ }
+
+#define MPIR_STATUS_GET_CANCEL_BIT(status_) ((status_).count_hi_and_cancelled & 1)
+
+/* Do not set MPI_ERROR (only set if ERR_IN_STATUS is returned */
+#define MPIR_Status_set_empty(status_) \
+ { \
+ if ((status_) != MPI_STATUS_IGNORE) \
+ { \
+ (status_)->MPI_SOURCE = MPI_ANY_SOURCE; \
+ (status_)->MPI_TAG = MPI_ANY_TAG; \
+ MPIR_STATUS_SET_COUNT(*(status_), 0); \
+ MPIR_STATUS_SET_CANCEL_BIT(*(status_), FALSE); \
+ } \
+ }
+/* See MPI 1.1, section 3.11, Null Processes */
+/* Do not set MPI_ERROR (only set if ERR_IN_STATUS is returned */
+#define MPIR_Status_set_procnull(status_) \
+ { \
+ if ((status_) != MPI_STATUS_IGNORE) \
+ { \
+ (status_)->MPI_SOURCE = MPI_PROC_NULL; \
+ (status_)->MPI_TAG = MPI_ANY_TAG; \
+ MPIR_STATUS_SET_COUNT(*(status_), 0); \
+ MPIR_STATUS_SET_CANCEL_BIT(*(status_), FALSE); \
+ } \
+ }
+
+#endif /* MPIR_STATUS_H_INCLUDED */
diff --git a/src/include/mpir_strerror.h b/src/include/mpir_strerror.h
new file mode 100644
index 0000000..51ac036
--- /dev/null
+++ b/src/include/mpir_strerror.h
@@ -0,0 +1,15 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#if !defined(MPIR_STRERROR_H_INCLUDED)
+#define MPIR_STRERROR_H_INCLUDED
+
+/*
+ * MPIR_Sterror()
+ *
+ * Thread safe implementation of strerror(), whenever possible. */
+const char *MPIR_Strerror(int errnum);
+
+#endif /* !defined(MPIR_STRERROR_H_INCLUDED) */
diff --git a/src/include/mpir_tags.h b/src/include/mpir_tags.h
new file mode 100644
index 0000000..da14044
--- /dev/null
+++ b/src/include/mpir_tags.h
@@ -0,0 +1,111 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_TAGS_H_INCLUDED
+#define MPIR_TAGS_H_INCLUDED
+
+/* Tags for point to point operations which implement collective and other
+ internal operations */
+#define MPIR_BARRIER_TAG 1
+#define MPIR_BCAST_TAG 2
+#define MPIR_GATHER_TAG 3
+#define MPIR_GATHERV_TAG 4
+#define MPIR_SCATTER_TAG 5
+#define MPIR_SCATTERV_TAG 6
+#define MPIR_ALLGATHER_TAG 7
+#define MPIR_ALLGATHERV_TAG 8
+#define MPIR_ALLTOALL_TAG 9
+#define MPIR_ALLTOALLV_TAG 10
+#define MPIR_REDUCE_TAG 11
+#define MPIR_USER_REDUCE_TAG 12
+#define MPIR_USER_REDUCEA_TAG 13
+#define MPIR_ALLREDUCE_TAG 14
+#define MPIR_USER_ALLREDUCE_TAG 15
+#define MPIR_USER_ALLREDUCEA_TAG 16
+#define MPIR_REDUCE_SCATTER_TAG 17
+#define MPIR_USER_REDUCE_SCATTER_TAG 18
+#define MPIR_USER_REDUCE_SCATTERA_TAG 19
+#define MPIR_SCAN_TAG 20
+#define MPIR_USER_SCAN_TAG 21
+#define MPIR_USER_SCANA_TAG 22
+#define MPIR_LOCALCOPY_TAG 23
+#define MPIR_EXSCAN_TAG 24
+#define MPIR_ALLTOALLW_TAG 25
+#define MPIR_TOPO_A_TAG 26
+#define MPIR_TOPO_B_TAG 27
+#define MPIR_REDUCE_SCATTER_BLOCK_TAG 28
+#define MPIR_SHRINK_TAG 29
+#define MPIR_AGREE_TAG 30
+#define MPIR_FIRST_NBC_TAG 31
+
+/* These macros must be used carefully. These macros will not work with
+ * negative tags. By definition, users are not to use negative tags and the
+ * only negative tag in MPICH is MPI_ANY_TAG which is checked seperately, but
+ * if there is a time where negative tags become more common, this setup won't
+ * work anymore. */
+
+/* This bitmask can be used to manually mask the tag space wherever it might
+ * be necessary to do so (for instance in the receive queue */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_ERROR_BIT (1 << 30)
+#else
+#define MPIR_TAG_ERROR_BIT
+#endif
+
+/* This bitmask is used to differentiate between a process failure
+ * (MPIX_ERR_PROC_FAILED) and any other kind of failure (MPI_ERR_OTHER). */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_PROC_FAILURE_BIT (1 << 29)
+#else
+#define MPIR_TAG_PROC_FAILURE_BIT
+#endif
+
+/* This macro checks the value of the error bit in the MPI tag and returns 1
+ * if the tag is set and 0 if it is not. */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_CHECK_ERROR_BIT(tag) ((MPIR_TAG_ERROR_BIT & (tag)) == MPIR_TAG_ERROR_BIT ? 1 : 0)
+#else
+#define MPIR_TAG_CHECK_ERROR_BIT(tag) 0
+#endif
+
+/* This macro checks the value of the process failure bit in the MPI tag and
+ * returns 1 if the tag is set and 0 if it is not. */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_CHECK_PROC_FAILURE_BIT(tag) ((MPIR_TAG_PROC_FAILURE_BIT & (tag)) == MPIR_TAG_PROC_FAILURE_BIT ? 1 : 0)
+#else
+#define MPIR_TAG_CHECK_PROC_FAILURE_BIT(tag) 0
+#endif
+
+/* This macro sets the value of the error bit in the MPI tag to 1 */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_SET_ERROR_BIT(tag) ((tag) |= MPIR_TAG_ERROR_BIT)
+#else
+#define MPIR_TAG_SET_ERROR_BIT(tag) (tag)
+#endif
+
+/* This macro sets the value of the process failure bit in the MPI tag to 1 */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_SET_PROC_FAILURE_BIT(tag) ((tag) |= (MPIR_TAG_ERROR_BIT | MPIR_TAG_PROC_FAILURE_BIT))
+#else
+#define MPIR_TAG_SET_PROC_FAILURE_BIT(tag) (tag)
+#endif
+
+/* This macro clears the value of the error bits in the MPI tag */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_CLEAR_ERROR_BITS(tag) ((tag) &= ~(MPIR_TAG_ERROR_BIT ^ MPIR_TAG_PROC_FAILURE_BIT))
+#else
+#define MPIR_TAG_CLEAR_ERROR_BITS(tag) (tag)
+#endif
+
+/* This macro masks the value of the error bits in the MPI tag */
+#ifdef HAVE_TAG_ERROR_BITS
+#define MPIR_TAG_MASK_ERROR_BITS(tag) ((tag) & ~(MPIR_TAG_ERROR_BIT ^ MPIR_TAG_PROC_FAILURE_BIT))
+#else
+#define MPIR_TAG_MASK_ERROR_BITS(tag) (tag)
+#endif
+
+#endif /* MPIR_TAGS_H_INCLUDED */
diff --git a/src/include/mpir_thread.h b/src/include/mpir_thread.h
new file mode 100644
index 0000000..ed2426f
--- /dev/null
+++ b/src/include/mpir_thread.h
@@ -0,0 +1,85 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_THREAD_H_INCLUDED
+#define MPIR_THREAD_H_INCLUDED
+
+#include "mpichconfconst.h"
+#include "mpichconf.h"
+
+typedef struct {
+ int thread_provided; /* Provided level of thread support */
+
+ /* This is a special case for is_thread_main, which must be
+ * implemented even if MPICH itself is single threaded. */
+#if MPICH_THREAD_LEVEL >= MPI_THREAD_SERIALIZED
+ MPID_Thread_id_t master_thread; /* Thread that started MPI */
+#endif
+
+#if defined MPICH_IS_THREADED
+ int isThreaded; /* Set to true if user requested
+ * THREAD_MULTIPLE */
+#endif /* MPICH_IS_THREADED */
+} MPIR_Thread_info_t;
+extern MPIR_Thread_info_t MPIR_ThreadInfo;
+
+/* ------------------------------------------------------------------------- */
+/* thread-local storage macros */
+/* arbitrary, just needed to avoid cleaning up heap allocated memory at thread
+ * destruction time */
+#define MPIR_STRERROR_BUF_SIZE (1024)
+
+/* This structure contains all thread-local variables and will be zeroed at
+ * allocation time.
+ *
+ * Note that any pointers to dynamically allocated memory stored in this
+ * structure must be externally cleaned up.
+ * */
+typedef struct {
+ int op_errno; /* For errors in predefined MPI_Ops */
+
+ /* error string storage for MPIR_Strerror */
+ char strerrbuf[MPIR_STRERROR_BUF_SIZE];
+
+#if (MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE)
+ int lock_depth;
+#endif
+} MPIR_Per_thread_t;
+
+#if defined(MPICH_IS_THREADED) && defined(MPL_TLS_SPECIFIER)
+extern MPL_TLS_SPECIFIER MPIR_Per_thread_t MPIR_Per_thread;
+#else
+extern MPIR_Per_thread_t MPIR_Per_thread;
+#endif
+
+extern MPID_Thread_tls_t MPIR_Per_thread_key;
+
+#if defined(MPICH_IS_THREADED)
+#define MPIR_THREAD_CHECK_BEGIN if (MPIR_ThreadInfo.isThreaded) {
+#define MPIR_THREAD_CHECK_END }
+#else
+#define MPIR_THREAD_CHECK_BEGIN
+#define MPIR_THREAD_CHECK_END
+#endif /* MPICH_IS_THREADED */
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL || \
+ MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+extern MPID_Thread_mutex_t MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX;
+#endif
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+extern MPID_Thread_mutex_t MPIR_THREAD_POBJ_HANDLE_MUTEX;
+extern MPID_Thread_mutex_t MPIR_THREAD_POBJ_MSGQ_MUTEX;
+extern MPID_Thread_mutex_t MPIR_THREAD_POBJ_COMPLETION_MUTEX;
+extern MPID_Thread_mutex_t MPIR_THREAD_POBJ_CTX_MUTEX;
+extern MPID_Thread_mutex_t MPIR_THREAD_POBJ_PMI_MUTEX;
+
+#define MPIR_THREAD_POBJ_COMM_MUTEX(_comm_ptr) _comm_ptr->mutex
+#define MPIR_THREAD_POBJ_WIN_MUTEX(_win_ptr) _win_ptr->mutex
+#endif
+
+#endif /* MPIR_THREAD_H_INCLUDED */
diff --git a/src/include/mpir_topo.h b/src/include/mpir_topo.h
new file mode 100644
index 0000000..7541b7b
--- /dev/null
+++ b/src/include/mpir_topo.h
@@ -0,0 +1,112 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_TOPO_H_INCLUDED
+#define MPIR_TOPO_H_INCLUDED
+
+/*
+ * The following struture allows the device detailed control over the
+ * functions that are used to implement the topology routines. If either
+ * the pointer to this structure is null or any individual entry is null,
+ * the default function is used (this follows exactly the same rules as the
+ * collective operations, provided in the MPIR_Collops structure).
+ */
+
+typedef struct MPII_Topo_ops {
+ int (*cartCreate)( const MPIR_Comm *, int, const int[], const int [],
+ int, MPI_Comm * );
+ int (*cartMap) ( const MPIR_Comm *, int, const int[], const int [],
+ int * );
+ int (*graphCreate)( const MPIR_Comm *, int, const int[], const int [],
+ int, MPI_Comm * );
+ int (*graphMap) ( const MPIR_Comm *, int, const int[], const int[],
+ int * );
+} MPII_Topo_ops;
+
+
+typedef struct MPII_Graph_topology {
+ int nnodes;
+ int nedges;
+ int *index;
+ int *edges;
+} MPII_Graph_topology;
+
+typedef struct MPII_Cart_topology {
+ int nnodes; /* Product of dims[*], gives the size of the topology */
+ int ndims;
+ int *dims;
+ int *periodic;
+ int *position;
+} MPII_Cart_topology;
+
+typedef struct MPII_Dist_graph_topology {
+ int indegree;
+ int *in;
+ int *in_weights;
+ int outdegree;
+ int *out;
+ int *out_weights;
+ int is_weighted;
+} MPII_Dist_graph_topology;
+
+struct MPIR_Topology {
+ MPIR_Topo_type kind;
+ union topo {
+ MPII_Graph_topology graph;
+ MPII_Cart_topology cart;
+ MPII_Dist_graph_topology dist_graph;
+ } topo;
+};
+
+int MPIR_Dims_create( int, int, int * );
+
+MPIR_Topology *MPIR_Topology_get( MPIR_Comm * );
+int MPIR_Topology_put( MPIR_Comm *, MPIR_Topology * );
+
+/* Returns the canonicalized count of neighbors for the given topology as though
+ * MPI_Dist_graph_neighbors_count were called with a distributed graph topology,
+ * even if the given topology is actually Cartesian or Graph. Useful for
+ * implementing neighborhood collective operations. */
+int MPIR_Topo_canon_nhb_count(MPIR_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted);
+
+/* Returns the canonicalized list of neighbors for a given topology, separated
+ * into inbound and outbound edges. Equivalent to MPI_Dist_graph_neighbors but
+ * works for any topology type by canonicalizing according to the rules in
+ * Section 7.6 of the MPI-3.0 standard. */
+int MPIR_Topo_canon_nhb(MPIR_Comm *comm_ptr,
+ int indegree, int sources[], int inweights[],
+ int outdegree, int dests[], int outweights[]);
+
+#define MAX_CART_DIM 16
+
+/* topology impl functions */
+int MPIR_Cart_create( MPIR_Comm *, int, const int [],
+ const int [], int, MPI_Comm * );
+int MPIR_Cart_map( const MPIR_Comm *, int, const int[], const int[], int* );
+int MPIR_Cart_shift_impl(MPIR_Comm *comm_ptr, int direction, int displ, int *source, int *dest);
+
+void MPIR_Cart_rank_impl(struct MPIR_Topology *cart_ptr, const int *coords, int *rank);
+int MPIR_Cart_create_impl(MPIR_Comm *comm_ptr, int ndims, const int dims[],
+ const int periods[], int reorder, MPI_Comm *comm_cart);
+int MPIR_Cart_map_impl(const MPIR_Comm *comm_ptr, int ndims, const int dims[],
+ const int periodic[], int *newrank);
+
+int MPIR_Graph_create( MPIR_Comm *, int,
+ const int[], const int[], int,
+ MPI_Comm *);
+int MPIR_Graph_map( const MPIR_Comm *, int, const int[], const int[], int* );
+int MPIR_Graph_neighbors_count_impl(MPIR_Comm *comm_ptr, int rank, int *nneighbors);
+int MPIR_Graph_neighbors_impl(MPIR_Comm *comm_ptr, int rank, int maxneighbors, int *neighbors);
+int MPIR_Graph_map_impl(const MPIR_Comm *comm_ptr, int nnodes,
+ const int indx[], const int edges[], int *newrank);
+
+int MPIR_Dist_graph_neighbors_count_impl(MPIR_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted);
+int MPIR_Dist_graph_neighbors_impl(MPIR_Comm *comm_ptr,
+ int maxindegree, int sources[], int sourceweights[],
+ int maxoutdegree, int destinations[], int destweights[]);
+
+#endif /* MPIR_TOPO_H_INCLUDED */
diff --git a/src/include/mpir_type_defs.h b/src/include/mpir_type_defs.h
index e34b29e..ec66410 100644
--- a/src/include/mpir_type_defs.h
+++ b/src/include/mpir_type_defs.h
@@ -9,13 +9,73 @@
#include "mpichconf.h"
-/* Define a typedef for the errflag value used by many internal functions.
- * If an error needs to be returned, these values can be used to signal such.
- * More details can be found further down in the code with the bitmasking logic */
-typedef enum {
- MPIR_ERR_NONE = MPI_SUCCESS,
- MPIR_ERR_PROC_FAILED = MPIX_ERR_PROC_FAILED,
- MPIR_ERR_OTHER = MPI_ERR_OTHER
-} MPIR_Errflag_t;
+/* Basic typedefs */
+#ifdef HAVE_SYS_BITYPES_H
+#include <sys/bitypes.h>
+#endif
+
+/* inttypes.h is supposed to include stdint.h but this is here as
+ belt-and-suspenders for platforms that aren't fully compliant */
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+/* stdint.h gives us fixed-width C99 types like int16_t, among others */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+/* stdbool.h gives us the C boolean type */
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
+#endif
+
+/* complex.h gives us the C complex type */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#ifdef HAVE_WINDOWS_H
+#include <winsock2.h>
+#include <windows.h>
+#else
+#ifndef BOOL
+#define BOOL int
+#endif
+#endif
+
+#include "mpl.h"
+
+/* Use the MPIR_PtrToXXX macros to convert pointers to and from integer types */
+
+/* The Microsoft compiler will not allow casting of different sized types
+ * without
+ * printing a compiler warning. Using these macros allows compiler specific
+ * type casting and avoids the warning output. These macros should only be used
+ * in code that can handle loss of bits.
+ */
+
+/* PtrToAint converts a pointer to an MPI_Aint type, truncating bits if necessary */
+#ifdef HAVE_PTRTOAINT
+#define MPIR_Ptr_to_aint(a) ((MPI_Aint)(INT_PTR) (a))
+#else
+/* An MPI_Aint may be *larger* than a pointer. By using 2 casts, we can
+ keep some compilers from complaining about converting a pointer to an
+ integer of a different size */
+#define MPIR_Ptr_to_aint(a) ((MPI_Aint)(uintptr_t)(a))
+#endif
+
+/* AintToPtr converts an MPI_Aint to a pointer type, extending bits if necessary */
+#ifdef HAVE_AINTTOPTR
+#define MPIR_Aint_to_ptr(a) ((VOID *)(INT_PTR)((MPI_Aint)a))
+#else
+#define MPIR_Aint_to_ptr(a) (void*)(a)
+#endif
+
+/* Adding the 32-bit compute/64-bit I/O related type-casts in here as
+ * they are not a part of the MPI standard yet. */
+#define MPIR_AINT_CAST_TO_VOID_PTR (void *)(intptr_t)
+#define MPIR_VOID_PTR_CAST_TO_MPI_AINT (MPI_Aint)(uintptr_t)
+#define MPIR_PTR_DISP_CAST_TO_MPI_AINT (MPI_Aint)(intptr_t)
#endif /* !defined(MPIR_TYPE_DEFS_H_INCLUDED) */
diff --git a/src/include/mpir_utarray.h b/src/include/mpir_utarray.h
new file mode 100644
index 0000000..49bd303
--- /dev/null
+++ b/src/include/mpir_utarray.h
@@ -0,0 +1,258 @@
+/* MPICH notes:
+ * - The file name has been changed to avoid conflicts with any system-installed
+ * "utlist.h" header files.
+ * - malloc/free/realloc usages have been substituted with utarray_malloc_
+ * (etc.) indirection macros and then changed to use MPL_malloc and friends
+ * - add a ut_ptr_icd for the common case of dynamic tables of pointers
+ * - intentionally omitted from "mpiimpl.h" in order to require using code to
+ * opt-in
+ * [goodell@ 2011-10-04] */
+/*
+Copyright (c) 2008-2011, Troy D. Hanson http://uthash.sourceforge.net
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* a dynamic array implementation using macros
+ * see http://uthash.sourceforge.net/utarray
+ */
+#ifndef MPIR_UTARRAY_H_INCLUDED
+#define MPIR_UTARRAY_H_INCLUDED
+
+#define UTARRAY_VERSION 1.9.4
+
+#ifdef __GNUC__
+#define _UNUSED_ __attribute__ ((__unused__))
+#else
+#define _UNUSED_
+#endif
+
+#include <stddef.h> /* size_t */
+#include <string.h> /* memset, etc */
+#include <stdlib.h> /* exit */
+
+/* MPICH modification: override these to change what malloc/free/realloc
+ * routines are used by the utarray code */
+#define utarray_malloc_(x_) MPL_malloc(x_)
+#define utarray_free_(x_) MPL_free(x_)
+#define utarray_realloc_(x_,y_) MPL_realloc(x_,y_)
+#define utarray_strdup_(x_) MPL_strdup(x_)
+
+#ifndef utarray_oom
+#define utarray_oom() exit(-1)
+#endif
+
+typedef void (ctor_f)(void *dst, const void *src);
+typedef void (dtor_f)(void *elt);
+typedef void (init_f)(void *elt);
+typedef struct {
+ size_t sz;
+ init_f *init;
+ ctor_f *copy;
+ dtor_f *dtor;
+} UT_icd;
+
+typedef struct {
+ unsigned i,n;/* i: index of next available slot, n: num slots */
+ const UT_icd *icd; /* initializer, copy and destructor functions */
+ char *d; /* n slots of size icd->sz*/
+} UT_array;
+
+#define utarray_init(a,_icd) do { \
+ memset(a,0,sizeof(UT_array)); \
+ (a)->icd=_icd; \
+} while(0)
+
+#define utarray_done(a) do { \
+ if ((a)->n) { \
+ if ((a)->icd->dtor) { \
+ size_t _ut_i; \
+ for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \
+ (a)->icd->dtor(utarray_eltptr(a,_ut_i)); \
+ } \
+ } \
+ utarray_free_((a)->d); \
+ } \
+ (a)->n=0; \
+} while(0)
+
+#define utarray_new(a,_icd) do { \
+ a=(UT_array*)utarray_malloc_(sizeof(UT_array)); \
+ if (a == NULL) utarray_oom(); \
+ utarray_init(a,_icd); \
+} while(0)
+
+#define utarray_free(a) do { \
+ utarray_done(a); \
+ utarray_free_(a); \
+} while(0)
+
+#define utarray_reserve(a,by) do { \
+ if (((a)->i+by) > ((a)->n)) { \
+ void * d_; \
+ while(((a)->i+by) > ((a)->n)) { (a)->n = ((a)->n ? (2*(a)->n) : 8); } \
+ d_=(char*)utarray_realloc_((a)->d, (a)->n*(a)->icd->sz); \
+ if (d_ == NULL) utarray_oom(); \
+ (a)->d = d_; \
+ } \
+} while(0)
+
+#define utarray_push_back(a,p) do { \
+ utarray_reserve(a,1); \
+ if ((a)->icd->copy) { (a)->icd->copy( _utarray_eltptr(a,(a)->i++), p); } \
+ else { memcpy(_utarray_eltptr(a,(a)->i++), p, (a)->icd->sz); }; \
+} while(0)
+
+#define utarray_pop_back(a) do { \
+ if ((a)->icd->dtor) { (a)->icd->dtor( _utarray_eltptr(a,--((a)->i))); } \
+ else { (a)->i--; } \
+} while(0)
+
+#define utarray_extend_back(a) do { \
+ utarray_reserve(a,1); \
+ if ((a)->icd->init) { (a)->icd->init(_utarray_eltptr(a,(a)->i)); } \
+ else { memset(_utarray_eltptr(a,(a)->i),0,(a)->icd->sz); } \
+ (a)->i++; \
+} while(0)
+
+#define utarray_len(a) ((a)->i)
+
+#define utarray_eltptr(a,j) (((j) < (a)->i) ? _utarray_eltptr(a,j) : NULL)
+#define _utarray_eltptr(a,j) ((char*)((a)->d + ((a)->icd->sz*(j) )))
+
+#define utarray_insert(a,p,j) do { \
+ utarray_reserve(a,1); \
+ if (j > (a)->i) break; \
+ if ((j) < (a)->i) { \
+ memmove( _utarray_eltptr(a,(j)+1), _utarray_eltptr(a,j), \
+ ((a)->i - (j))*((a)->icd->sz)); \
+ } \
+ if ((a)->icd->copy) { (a)->icd->copy( _utarray_eltptr(a,j), p); } \
+ else { memcpy(_utarray_eltptr(a,j), p, (a)->icd->sz); }; \
+ (a)->i++; \
+} while(0)
+
+#define utarray_inserta(a,w,j) do { \
+ if (utarray_len(w) == 0) break; \
+ if (j > (a)->i) break; \
+ utarray_reserve(a,utarray_len(w)); \
+ if ((j) < (a)->i) { \
+ memmove(_utarray_eltptr(a,(j)+utarray_len(w)), \
+ _utarray_eltptr(a,j), \
+ ((a)->i - (j))*((a)->icd->sz)); \
+ } \
+ if ((a)->icd->copy) { \
+ size_t _ut_i; \
+ for(_ut_i=0;_ut_i<(w)->i;_ut_i++) { \
+ (a)->icd->copy(_utarray_eltptr(a,j+_ut_i), _utarray_eltptr(w,_ut_i)); \
+ } \
+ } else { \
+ memcpy(_utarray_eltptr(a,j), _utarray_eltptr(w,0), \
+ utarray_len(w)*((a)->icd->sz)); \
+ } \
+ (a)->i += utarray_len(w); \
+} while(0)
+
+#define utarray_resize(dst,num) do { \
+ size_t _ut_i; \
+ if (dst->i > (size_t)(num)) { \
+ if ((dst)->icd->dtor) { \
+ for(_ut_i=num; _ut_i < dst->i; _ut_i++) { \
+ (dst)->icd->dtor(utarray_eltptr(dst,_ut_i)); \
+ } \
+ } \
+ } else if (dst->i < (size_t)(num)) { \
+ utarray_reserve(dst,num-dst->i); \
+ if ((dst)->icd->init) { \
+ for(_ut_i=dst->i; _ut_i < num; _ut_i++) { \
+ (dst)->icd->init(utarray_eltptr(dst,_ut_i)); \
+ } \
+ } else { \
+ memset(_utarray_eltptr(dst,dst->i),0,(dst)->icd->sz*(num-dst->i)); \
+ } \
+ } \
+ dst->i = num; \
+} while(0)
+
+#define utarray_concat(dst,src) do { \
+ utarray_inserta((dst),(src),utarray_len(dst)); \
+} while(0)
+
+#define utarray_erase(a,pos,len) do { \
+ if ((a)->icd->dtor) { \
+ size_t _ut_i; \
+ for(_ut_i=0; _ut_i < len; _ut_i++) { \
+ (a)->icd->dtor(utarray_eltptr(a,pos+_ut_i)); \
+ } \
+ } \
+ if ((a)->i > (pos+len)) { \
+ memmove( _utarray_eltptr(a,pos), _utarray_eltptr(a,pos+len), \
+ ((a->i)-(pos+len))*((a)->icd->sz)); \
+ } \
+ (a)->i -= (len); \
+} while(0)
+
+#define utarray_clear(a) do { \
+ if ((a)->i > 0) { \
+ if ((a)->icd->dtor) { \
+ size_t _ut_i; \
+ for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \
+ (a)->icd->dtor(utarray_eltptr(a,_ut_i)); \
+ } \
+ } \
+ (a)->i = 0; \
+ } \
+} while(0)
+
+#define utarray_sort(a,cmp) do { \
+ qsort((a)->d, (a)->i, (a)->icd->sz, cmp); \
+} while(0)
+
+#define utarray_find(a,v,cmp) bsearch((v),(a)->d,(a)->i,(a)->icd->sz,cmp)
+
+#define utarray_front(a) (((a)->i) ? (_utarray_eltptr(a,0)) : NULL)
+#define utarray_next(a,e) (((e)==NULL) ? utarray_front(a) : ((((a)->i) > (utarray_eltidx(a,e)+1)) ? _utarray_eltptr(a,utarray_eltidx(a,e)+1) : NULL))
+#define utarray_back(a) (((a)->i) ? (_utarray_eltptr(a,(a)->i-1)) : NULL)
+#define utarray_eltidx(a,e) (((char*)(e) >= (char*)((a)->d)) ? (((char*)(e) - (char*)((a)->d))/(a)->icd->sz) : -1)
+
+/* last we pre-define a few icd for common utarrays of ints and strings */
+static void utarray_str_cpy(void *dst, const void *src) {
+ char **_src = (char**)src, **_dst = (char**)dst;
+ *_dst = (*_src == NULL) ? NULL : (char*)utarray_strdup_(*_src);
+}
+static void utarray_str_dtor(void *elt) {
+ char **eltc = (char**)elt;
+ if (*eltc) utarray_free_(*eltc);
+}
+static const UT_icd ut_str_icd _UNUSED_ = {sizeof(char*),NULL,utarray_str_cpy,utarray_str_dtor};
+static const UT_icd ut_int_icd _UNUSED_ = {sizeof(int),NULL,NULL,NULL};
+
+/* MPICH additions: */
+static const UT_icd ut_ptr_icd _UNUSED_ = {sizeof(void*),NULL,NULL,NULL};
+
+/* These are convenience macros for directly accessing the array.
+ Care should be taken when using the returned pointer as the pointer
+ can be invalidated by other utarray operations. */
+#define ut_int_array(a) ((int*)(a)->d)
+#define ut_str_array(a) ((char**)(a)->d)
+#define ut_ptr_array(a) ((void**)(a)->d)
+
+
+#endif /* MPIR_UTARRAY_H_INCLUDED */
diff --git a/src/include/mpir_win.h b/src/include/mpir_win.h
new file mode 100644
index 0000000..c19db03
--- /dev/null
+++ b/src/include/mpir_win.h
@@ -0,0 +1,93 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+
+#ifndef MPIR_WIN_H_INCLUDED
+#define MPIR_WIN_H_INCLUDED
+
+/*S
+ MPIR_Win - Description of the Window Object data structure.
+
+ Module:
+ Win-DS
+
+ Notes:
+ The following 3 keyvals are defined for attributes on all MPI
+ Window objects\:
+.vb
+ MPI_WIN_SIZE
+ MPI_WIN_BASE
+ MPI_WIN_DISP_UNIT
+.ve
+ These correspond to the values in 'length', 'start_address', and
+ 'disp_unit'.
+
+ The communicator in the window is the same communicator that the user
+ provided to 'MPI_Win_create' (not a dup). However, each intracommunicator
+ has a special context id that may be used if MPI communication is used
+ by the implementation to implement the RMA operations.
+
+ There is no separate window group; the group of the communicator should be
+ used.
+
+ Question:
+ Should a 'MPID_Win' be defined after 'MPID_Segment' in case the device
+ wants to
+ store a queue of pending put/get operations, described with 'MPID_Segment'
+ (or 'MPIR_Request')s?
+
+ S*/
+struct MPIR_Win {
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPID_Thread_mutex_t mutex;
+ MPIR_Errhandler *errhandler; /* Pointer to the error handler structure */
+ void *base;
+ MPI_Aint size;
+ int disp_unit; /* Displacement unit of *local* window */
+ MPIR_Attribute *attributes;
+ MPIR_Comm *comm_ptr; /* Pointer to comm of window (dup) */
+#ifdef USE_THREADED_WINDOW_CODE
+ /* These were causing compilation errors. We need to figure out how to
+ integrate threads into MPICH before including these fields. */
+ /* FIXME: The test here should be within a test for threaded support */
+#ifdef HAVE_PTHREAD_H
+ pthread_t wait_thread_id; /* id of thread handling MPI_Win_wait */
+ pthread_t passive_target_thread_id; /* thread for passive target RMA */
+#elif defined(HAVE_WINTHREADS)
+ HANDLE wait_thread_id;
+ HANDLE passive_target_thread_id;
+#endif
+#endif
+ /* These are COPIES of the values so that addresses to them
+ can be returned as attributes. They are initialized by the
+ MPI_Win_get_attr function.
+
+ These values are constant for the lifetime of the window, so
+ this is thread-safe.
+ */
+ int copyDispUnit;
+ MPI_Aint copySize;
+
+ char name[MPI_MAX_OBJECT_NAME];
+
+ MPIR_Win_flavor_t create_flavor;
+ MPIR_Win_model_t model;
+ MPIR_Win_flavor_t copyCreateFlavor;
+ MPIR_Win_model_t copyModel;
+
+ /* Other, device-specific information */
+#ifdef MPID_DEV_WIN_DECL
+ MPID_DEV_WIN_DECL
+#endif
+};
+extern MPIR_Object_alloc_t MPIR_Win_mem;
+/* Preallocated win objects */
+extern MPIR_Win MPIR_Win_direct[];
+
+int MPIR_Type_is_rma_atomic(MPI_Datatype type);
+int MPIR_Compare_equal(const void *a, const void *b, MPI_Datatype type);
+
+#endif /* MPIR_WIN_H_INCLUDED */
diff --git a/src/include/mpishared.h b/src/include/mpishared.h
deleted file mode 100644
index 4231d53..0000000
--- a/src/include/mpishared.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2007 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/*
- * This file provides the very basic definitions for use in a component
- * that is to work with MPICH. This defines (by inclusion) the
- * MPI error reporting routines, memory access routines, and common types.
- * Using this include (instead of the comprehensive mpiimpl.h file) is
- * appropriate for modules that perform more basic functions, such as
- * basic socket communications (see, for example, src/mpid/common/sock/poll)
- */
-
-#ifndef MPISHARED_H_INCLUDED
-#define MPISHARED_H_INCLUDED
-
-#ifdef MPIIMPL_H_INCLUDED
-#error 'mpishared.h should not be used if mpiimpl.h is included'
-#endif
-
-/* There are a few definitions that must be made *before* the mpichconf.h
- file is included. These include the definitions of the error levels and some
- thread granularity constants */
-#include "mpichconfconst.h"
-
-/* Make sure that we have the basic definitions */
-#ifndef MPICHCONF_H_INCLUDED
-#include "mpichconf.h"
-#endif
-
-/* if we are defining this, we must define it before including mpl.h */
-#if defined(MPICH_DEBUG_MEMINIT)
-#define MPL_VG_ENABLED 1
-#endif
-#include "mpl.h"
-
-/* The most common MPI error classes */
-#ifndef MPI_SUCCESS
-#define MPI_SUCCESS 0
-#define MPI_ERR_ARG 12 /* Invalid argument */
-#define MPI_ERR_UNKNOWN 13 /* Unknown error */
-#define MPI_ERR_OTHER 15 /* Other error; use Error_string */
-#define MPI_ERR_INTERN 16 /* Internal error code */
-#endif
-
-/* For supported thread levels */
-#ifndef MPI_THREAD_SINGLE
-#define MPI_THREAD_SINGLE 0
-#define MPI_THREAD_FUNNELED 1
-#define MPI_THREAD_SERIALIZED 2
-#define MPI_THREAD_MULTIPLE 3
-#endif
-
-/* Error reporting routines */
-#include "mpierror.h"
-#include "mpierrs.h"
-
-/* FIXME: This is extracted from mpi.h.in, where it may not be appropriate */
-#define MPICH_ERR_LAST_CLASS 74 /* It is also helpful to know the
- last valid class */
-
-#include "mpifunc.h"
-#if !defined(NEEDS_FUNC_ENTER_EXIT_DEFS)
- /* If no timing choice is selected, this sets the entry/exit macros
- to empty */
-# include "mpitimerimpl.h"
-#endif
-#ifdef NEEDS_FUNC_ENTER_EXIT_DEFS
-/* mpich layer definitions */
-#define MPID_MPI_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_FRONT(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_FRONT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BACK(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BOTH(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BACK(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BOTH(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_COLL_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_COLL_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_RMA_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_RMA_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_INIT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_INIT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPID_MPI_FINALIZE_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPID_MPI_FINALIZE_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-
-/* device layer definitions */
-#define MPIDI_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER_FRONT(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT_FRONT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BACK(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BOTH(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BACK(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BOTH(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_COLL_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_COLL_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_RMA_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_RMA_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_INIT_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_INIT_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-#define MPIDI_FINALIZE_FUNC_ENTER(a) MPIR_FUNC_ENTER(a)
-#define MPIDI_FINALIZE_FUNC_EXIT(a) MPIR_FUNC_EXIT(a)
-
-/* evaporate the timing macros since timing is not selected */
-#define MPIU_Timer_init(rank, size)
-#define MPIU_Timer_finalize()
-#endif /* NEEDS_FUNC_ENTER_EXIT_DEFS */
-
-/* Add support for the memory allocation routines */
-#define MPIU_MEM_NOSTDIO
-#include "mpimem.h"
-
-/* Add support for the debugging macros */
-#include "mpidbg.h"
-
-/* Add support for the assert and strerror routines */
-#include "mpiutil.h"
-
-/* Use this macro for each parameter to a function that is not referenced in
- the body of the function */
-#ifdef HAVE_WINDOWS_H
-#define MPIU_UNREFERENCED_ARG(a) a
-#else
-#define MPIU_UNREFERENCED_ARG(a)
-#endif
-
-#endif
diff --git a/src/include/mpistates.h b/src/include/mpistates.h
deleted file mode 100644
index 607159c..0000000
--- a/src/include/mpistates.h
+++ /dev/null
@@ -1,318 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPISTATES_H_INCLUDED
-#define MPISTATES_H_INCLUDED
-
-/* Insert all the states to be logged here */
-
-/* Note to package writers:
- * If you insert your timer states here, you
- * also need to insert a function call in
- * MPIU_Timer_init to describe your states
- * to the logging library.
- * MPIU_Timer_init is probably found in:
- * mpich/src/util/timing/timer.c
- */
-
-enum MPID_TIMER_STATE
-{
-/* device states */
-#ifdef MPID_STATE_LIST_MPID
-MPID_STATE_LIST_MPID
-#endif
-
-#ifdef MPID_STATE_LIST_SEGMENT
-MPID_STATE_LIST_SEGMENT
-#endif
-
-/* bsocket states */
-#ifdef MPID_STATE_LIST_BSOCKET
-MPID_STATE_LIST_BSOCKET
-#endif
-
-/* pmi states */
-#ifdef MPID_STATE_LIST_PMI
-MPID_STATE_LIST_PMI
-#endif
-
-/* mpi states */
-MPID_STATE_MPI_SEND,
-MPID_STATE_MPI_RECV,
-MPID_STATE_MPI_BSEND,
-MPID_STATE_MPI_SSEND,
-MPID_STATE_MPI_RSEND,
-MPID_STATE_MPI_ISEND,
-MPID_STATE_MPI_IBSEND,
-MPID_STATE_MPI_ISSEND,
-MPID_STATE_MPI_IRSEND,
-MPID_STATE_MPI_IRECV,
-MPID_STATE_MPI_WAIT,
-MPID_STATE_MPI_TEST,
-MPID_STATE_MPI_SENDRECV,
-MPID_STATE_MPI_SENDRECV_REPLACE,
-MPID_STATE_MPI_WAITANY,
-MPID_STATE_MPI_TESTANY,
-MPID_STATE_MPI_WAITALL,
-MPID_STATE_MPI_TESTALL,
-MPID_STATE_MPI_WAITSOME,
-MPID_STATE_MPI_TESTSOME,
-MPID_STATE_MPI_IPROBE,
-MPID_STATE_MPI_PROBE,
-MPID_STATE_MPI_CANCEL,
-MPID_STATE_MPI_TEST_CANCELLED,
-MPID_STATE_MPI_SEND_INIT,
-MPID_STATE_MPI_BSEND_INIT,
-MPID_STATE_MPI_SSEND_INIT,
-MPID_STATE_MPI_RSEND_INIT,
-MPID_STATE_MPI_RECV_INIT,
-MPID_STATE_MPI_START,
-MPID_STATE_MPI_STARTALL,
-MPID_STATE_MPI_BUFFER_ATTACH,
-MPID_STATE_MPI_BUFFER_DETACH,
-MPID_STATE_MPI_REQUEST_FREE,
-
-MPID_STATE_MPI_GET_COUNT,
-MPID_STATE_MPI_GET_ELEMENTS,
-
-MPID_STATE_MPI_TYPE_CONTIGUOUS,
-MPID_STATE_MPI_TYPE_VECTOR,
-MPID_STATE_MPI_TYPE_HVECTOR,
-MPID_STATE_MPI_TYPE_INDEXED,
-MPID_STATE_MPI_TYPE_HINDEXED,
-MPID_STATE_MPI_TYPE_STRUCT,
-MPID_STATE_MPI_TYPE_EXTENT,
-MPID_STATE_MPI_TYPE_SIZE,
-MPID_STATE_MPI_TYPE_COUNT,
-MPID_STATE_MPI_TYPE_LB,
-MPID_STATE_MPI_TYPE_UB,
-MPID_STATE_MPI_TYPE_COMMIT,
-MPID_STATE_MPI_TYPE_FREE,
-MPID_STATE_MPI_TYPE_CREATE_DARRAY,
-MPID_STATE_MPI_TYPE_CREATE_HINDEXED,
-MPID_STATE_MPI_TYPE_CREATE_HVECTOR,
-MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK,
-MPID_STATE_MPI_TYPE_CREATE_RESIZED,
-MPID_STATE_MPI_TYPE_CREATE_STRUCT,
-MPID_STATE_MPI_TYPE_CREATE_SUBARRAY,
-MPID_STATE_MPI_TYPE_GET_EXTENT,
-MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT,
-MPID_STATE_MPI_ADDRESS,
-
-MPID_STATE_MPI_PACK,
-MPID_STATE_MPI_UNPACK,
-MPID_STATE_MPI_PACK_SIZE,
-
-MPID_STATE_MPI_BARRIER,
-MPID_STATE_MPI_BCAST,
-MPID_STATE_MPI_ALLREDUCE,
-MPID_STATE_MPI_GATHER,
-MPID_STATE_MPI_GATHERV,
-MPID_STATE_MPI_SCATTER,
-MPID_STATE_MPI_SCATTERV,
-MPID_STATE_MPI_ALLGATHER,
-MPID_STATE_MPI_ALLGATHERV,
-MPID_STATE_MPI_ALLTOALL,
-MPID_STATE_MPI_ALLTOALLV,
-MPID_STATE_MPI_ALLTOALLW,
-MPID_STATE_MPI_EXSCAN,
-MPID_STATE_MPI_REDUCE,
-MPID_STATE_MPI_REDUCE_SCATTER,
-MPID_STATE_MPI_SCAN,
-MPID_STATE_MPI_OP_CREATE,
-MPID_STATE_MPI_OP_FREE,
-
-MPID_STATE_MPI_GROUP_SIZE,
-MPID_STATE_MPI_GROUP_RANK,
-MPID_STATE_MPI_GROUP_TRANSLATE_RANKS ,
-MPID_STATE_MPI_GROUP_COMPARE,
-MPID_STATE_MPI_COMM_GROUP,
-MPID_STATE_MPI_GROUP_UNION,
-MPID_STATE_MPI_GROUP_INTERSECTION,
-MPID_STATE_MPI_GROUP_DIFFERENCE,
-MPID_STATE_MPI_GROUP_INCL,
-MPID_STATE_MPI_GROUP_EXCL,
-MPID_STATE_MPI_GROUP_RANGE_INCL,
-MPID_STATE_MPI_GROUP_RANGE_EXCL,
-MPID_STATE_MPI_GROUP_FREE,
-
-MPID_STATE_MPI_COMM_DUP,
-MPID_STATE_MPI_COMM_SIZE,
-MPID_STATE_MPI_COMM_RANK,
-MPID_STATE_MPI_COMM_COMPARE,
-MPID_STATE_MPI_COMM_CREATE,
-MPID_STATE_MPI_COMM_SPLIT,
-MPID_STATE_MPI_COMM_FREE,
-MPID_STATE_MPI_COMM_TEST_INTER,
-MPID_STATE_MPI_COMM_REMOTE_SIZE,
-MPID_STATE_MPI_COMM_REMOTE_GROUP,
-
-MPID_STATE_MPI_INTERCOMM_CREATE,
-MPID_STATE_MPI_INTERCOMM_MERGE,
-
-MPID_STATE_MPI_KEYVAL_CREATE,
-MPID_STATE_MPI_KEYVAL_FREE,
-MPID_STATE_MPI_ATTR_PUT,
-MPID_STATE_MPI_ATTR_GET,
-MPID_STATE_MPI_ATTR_DELETE,
-
-MPID_STATE_MPI_TOPO_TEST,
-MPID_STATE_MPI_CART_CREATE,
-MPID_STATE_MPI_DIMS_CREATE,
-MPID_STATE_MPI_GRAPH_CREATE,
-MPID_STATE_MPI_GRAPHDIMS_GET,
-MPID_STATE_MPI_GRAPH_GET,
-MPID_STATE_MPI_CARTDIM_GET,
-MPID_STATE_MPI_CART_GET,
-MPID_STATE_MPI_CART_RANK,
-MPID_STATE_MPI_CART_COORDS,
-MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT,
-MPID_STATE_MPI_GRAPH_NEIGHBORS,
-MPID_STATE_MPI_CART_SHIFT,
-MPID_STATE_MPI_CART_SUB,
-MPID_STATE_MPI_CART_MAP,
-MPID_STATE_MPI_GRAPH_MAP,
-
-MPID_STATE_MPI_GET_PROCESSOR_NAME,
-MPID_STATE_MPI_GET_VERSION,
-
-MPID_STATE_MPI_ERRHANDLER_CREATE,
-MPID_STATE_MPI_ERRHANDLER_SET,
-MPID_STATE_MPI_ERRHANDLER_GET,
-MPID_STATE_MPI_ERRHANDLER_FREE,
-MPID_STATE_MPI_ERROR_STRING,
-MPID_STATE_MPI_ERROR_CLASS,
-
-MPID_STATE_MPI_WTIME,
-MPID_STATE_MPI_WTICK,
-
-MPID_STATE_MPI_INIT,
-MPID_STATE_MPI_FINALIZE,
-MPID_STATE_MPI_INITIALIZED,
-MPID_STATE_MPI_ABORT,
-
-MPID_STATE_MPI_PCONTROL,
-
-MPID_STATE_MPI_STATUS_F2C,
-MPID_STATE_MPI_STATUS_C2F,
-
-MPID_STATE_MPI_FINALIZED,
-MPID_STATE_MPI_IS_THREAD_MAIN,
-MPID_STATE_MPI_QUERY_THREAD,
-
-MPID_STATE_MPI_STATUS_SET_CANCELLED,
-MPID_STATE_MPI_STATUS_SET_ELEMENTS,
-
-MPID_STATE_MPI_CLOSE_PORT,
-MPID_STATE_MPI_COMM_ACCEPT,
-MPID_STATE_MPI_COMM_CONNECT,
-MPID_STATE_MPI_COMM_DISCONNECT,
-MPID_STATE_MPI_COMM_GET_PARENT,
-MPID_STATE_MPI_COMM_JOIN,
-MPID_STATE_MPI_COMM_SPAWN,
-MPID_STATE_MPI_COMM_SPAWN_MULTIPLE,
-
-MPID_STATE_MPI_LOOKUP_NAME,
-MPID_STATE_MPI_OPEN_PORT,
-MPID_STATE_MPI_PUBLISH_NAME,
-MPID_STATE_MPI_UNPUBLISH_NAME,
-
-MPID_STATE_MPI_ACCUMULATE,
-MPID_STATE_MPI_GET,
-MPID_STATE_MPI_PUT,
-MPID_STATE_MPI_WIN_COMPLETE,
-MPID_STATE_MPI_WIN_CREATE,
-MPID_STATE_MPI_WIN_ALLOCATE,
-MPID_STATE_MPI_WIN_FENCE,
-MPID_STATE_MPI_WIN_FREE,
-MPID_STATE_MPI_WIN_GET_GROUP,
-MPID_STATE_MPI_WIN_LOCK,
-MPID_STATE_MPI_WIN_POST,
-MPID_STATE_MPI_WIN_START,
-MPID_STATE_MPI_WIN_TEST,
-MPID_STATE_MPI_WIN_UNLOCK,
-MPID_STATE_MPI_WIN_WAIT,
-
-
-MPID_STATE_MPI_ADD_ERROR_CLASS,
-MPID_STATE_MPI_ADD_ERROR_CODE,
-MPID_STATE_MPI_ADD_ERROR_STRING,
-MPID_STATE_MPI_COMM_CALL_ERRHANDLER,
-
-MPID_STATE_MPI_COMM_CREATE_KEYVAL,
-MPID_STATE_MPI_COMM_DELETE_ATTR,
-MPID_STATE_MPI_COMM_FREE_KEYVAL,
-MPID_STATE_MPI_COMM_GET_ATTR,
-MPID_STATE_MPI_COMM_GET_NAME,
-MPID_STATE_MPI_COMM_SET_ATTR,
-MPID_STATE_MPI_COMM_SET_NAME,
-MPID_STATE_MPI_FILE_CALL_ERRHANDLER,
-MPID_STATE_MPI_GREQUEST_COMPLETE,
-MPID_STATE_MPI_GREQUEST_START,
-MPID_STATE_MPI_INIT_THREAD,
-
-MPID_STATE_MPI_TYPE_GET_ENVELOPE,
-MPID_STATE_MPI_TYPE_GET_CONTENTS,
-MPID_STATE_MPI_TYPE_CREATE_KEYVAL,
-MPID_STATE_MPI_TYPE_DELETE_ATTR,
-MPID_STATE_MPI_TYPE_DUP,
-MPID_STATE_MPI_TYPE_FREE_KEYVAL,
-MPID_STATE_MPI_TYPE_GET_ATTR,
-MPID_STATE_MPI_TYPE_GET_NAME,
-MPID_STATE_MPI_TYPE_SET_ATTR,
-MPID_STATE_MPI_TYPE_SET_NAME,
-MPID_STATE_MPI_WIN_CALL_ERRHANDLER,
-MPID_STATE_MPI_WIN_CREATE_KEYVAL,
-MPID_STATE_MPI_WIN_DELETE_ATTR,
-MPID_STATE_MPI_WIN_FREE_KEYVAL,
-MPID_STATE_MPI_WIN_GET_ATTR,
-MPID_STATE_MPI_WIN_GET_NAME,
-MPID_STATE_MPI_WIN_SET_ATTR,
-MPID_STATE_MPI_WIN_SET_NAME,
-MPID_STATE_MPI_ALLOC_MEM,
-MPID_STATE_MPI_COMM_CREATE_ERRHANDLER,
-MPID_STATE_MPI_COMM_GET_ERRHANDLER,
-MPID_STATE_MPI_COMM_SET_ERRHANDLER,
-MPID_STATE_MPI_FILE_CREATE_ERRHANDLER,
-MPID_STATE_MPI_FILE_GET_ERRHANDLER,
-MPID_STATE_MPI_FILE_SET_ERRHANDLER,
-MPID_STATE_MPI_FREE_MEM,
-
-MPID_STATE_MPI_GET_ADDRESS,
-
-/* Info */
-MPID_STATE_MPI_INFO_CREATE,
-MPID_STATE_MPI_INFO_DELETE,
-MPID_STATE_MPI_INFO_DUP,
-MPID_STATE_MPI_INFO_FREE,
-MPID_STATE_MPI_INFO_GET,
-MPID_STATE_MPI_INFO_GET_NKEYS,
-MPID_STATE_MPI_INFO_GET_NTHKEY,
-MPID_STATE_MPI_INFO_GET_VALUELEN,
-MPID_STATE_MPI_INFO_SET,
-
-MPID_STATE_MPI_PACK_EXTERNAL,
-MPID_STATE_MPI_PACK_EXTERNAL_SIZE,
-MPID_STATE_MPI_REQUEST_GET_STATUS,
-MPID_STATE_MPI_UNPACK_EXTERNAL,
-MPID_STATE_MPI_WIN_CREATE_ERRHANDLER,
-MPID_STATE_MPI_WIN_GET_ERRHANDLER,
-MPID_STATE_MPI_WIN_SET_ERRHANDLER,
-
-MPID_STATE_MPI_TYPE_MATCH_SIZE,
-MPID_STATE_MPI_REGISTER_DATAREP,
-
-/* internal mpi states */
-MPID_STATE_MPIC_SEND,
-MPID_STATE_MPIC_ISEND,
-MPID_STATE_MPIC_RECV,
-MPID_STATE_MPIC_IRECV,
-MPID_STATE_MPIC_SENDRECV,
-MPID_STATE_MPIC_WAIT,
-
-MPID_NUM_TIMER_STATES
-};
-
-#endif
diff --git a/src/include/mpit.h b/src/include/mpit.h
index 1a87f56..a8e7a08 100644
--- a/src/include/mpit.h
+++ b/src/include/mpit.h
@@ -42,10 +42,10 @@ extern int MPIR_T_cat_add_desc(const char *cat_name, const char *cat_desc);
static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
{
- int cvar_idx;
+ unsigned cvar_idx;
name2index_hash_t *hash_entry;
- HASH_FIND_STR(cvar_hash, cvar_name, hash_entry);
- MPIU_Assert(hash_entry != NULL);
+ MPL_HASH_FIND_STR(cvar_hash, cvar_name, hash_entry);
+ MPIR_Assert(hash_entry != NULL);
cvar_idx = hash_entry->idx;
return (cvar_table_entry_t *)utarray_eltptr(cvar_table, cvar_idx);
}
@@ -105,7 +105,7 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
#define MPIR_T_CVAR_REGISTER_STATIC(dtype_, name_, addr_, count_, verb_, \
scope_, default_, cat_, desc_) \
do { \
- MPIU_Assert(count_ > 0); \
+ MPIR_Assert(count_ > 0); \
MPIR_T_CVAR_REGISTER_impl(dtype_, #name_, addr_, count_, MPI_T_ENUM_NULL, \
verb_, MPI_T_BIND_NO_OBJECT, scope_, NULL, NULL, default_, cat_, desc_); \
} while (0)
@@ -117,8 +117,8 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
#define MPIR_T_CVAR_REGISTER_DYNAMIC(dtype_, name_, addr_, count_, etype_, \
verb_, bind_, scope_, get_addr_, get_count_, default_, cat_, desc_) \
do { \
- MPIU_Assert(addr_ != NULL || get_addr_ != NULL); \
- MPIU_Assert(count_ > 0 || get_count_ != NULL); \
+ MPIR_Assert(addr_ != NULL || get_addr_ != NULL); \
+ MPIR_Assert(count_ > 0 || get_count_ != NULL); \
MPIR_T_CVAR_REGISTER_impl(dtype_, #name_, addr_, count_, etype_, \
verb_, bind_, scope_, get_addr_, get_count_, default_, cat_, desc_); \
} while (0)
@@ -132,15 +132,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
*/
/* STATE */
-#define MPIR_T_PVAR_INT_STATE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_INT_STATE_DECL_impl(name_))
-
-#define MPIR_T_PVAR_INT_STATE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_INT_STATE_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_INT_STATE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_INT_STATE_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_STATE_SET_VAR(MODULE, ptr_, val_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_STATE_SET_VAR_impl(ptr_, val_))
/* Not gated by MODULE, since it is supposed to be a rvalue */
@@ -163,33 +154,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
addr_, count_, etype_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_))
/* LEVEL */
-#define MPIR_T_PVAR_UINT_LEVEL_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_LEVEL_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG_LEVEL_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_LEVEL_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG2_LEVEL_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_LEVEL_DECL_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_LEVEL_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_LEVEL_DECL_impl(name_))
-
-#define MPIR_T_PVAR_UINT_LEVEL_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_LEVEL_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG_LEVEL_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_LEVEL_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG2_LEVEL_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_LEVEL_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_LEVEL_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_LEVEL_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_UINT_LEVEL_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_LEVEL_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG_LEVEL_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_LEVEL_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG2_LEVEL_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_LEVEL_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_LEVEL_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_LEVEL_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_LEVEL_SET_VAR(MODULE, ptr_, val_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_LEVEL_SET_VAR_impl(ptr_, val_))
#define MPIR_T_PVAR_LEVEL_GET_VAR(ptr_) \
@@ -219,33 +183,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
addr_, count_, verb_, bind_, flags_, get_value_, get_count, cat_, desc_))
/* SIZE */
-#define MPIR_T_PVAR_UINT_SIZE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_SIZE_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG_SIZE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_SIZE_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG2_SIZE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_SIZE_DECL_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_SIZE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_SIZE_DECL_impl(name_))
-
-#define MPIR_T_PVAR_UINT_SIZE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_SIZE_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG_SIZE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_SIZE_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG2_SIZE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_SIZE_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_SIZE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_SIZE_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_UINT_SIZE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_SIZE_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG_SIZE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_SIZE_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG2_SIZE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_SIZE_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_SIZE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_SIZE_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_SIZE_SET_VAR(MODULE, ptr_, val_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_SIZE_SET_VAR_impl(ptr_, val_))
#define MPIR_T_PVAR_SIZE_GET_VAR(ptr_) \
@@ -267,15 +204,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
addr_, count_, verb_, bind_, flags_, get_value_, get_count, cat_, desc_))
/* PERCENTAGE */
-#define MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_impl(name_))
-
-#define MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_PERCENTAGE_SET_VAR(MODULE, ptr_, val_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_PERCENTAGE_SET_VAR_impl(ptr_, val_))
#define MPIR_T_PVAR_PERCENTAGE_GET_VAR(MODULE, ptr_) \
@@ -297,27 +225,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
addr_, count_, verb_, bind_, flags_, get_value_, get_count, cat_, desc_))
/* COUNTER */
-#define MPIR_T_PVAR_UINT_COUNTER_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_COUNTER_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG_COUNTER_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_COUNTER_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG2_COUNTER_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_COUNTER_DECL_impl(name_))
-
-#define MPIR_T_PVAR_UINT_COUNTER_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_COUNTER_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG_COUNTER_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_COUNTER_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG2_COUNTER_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_COUNTER_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_UINT_COUNTER_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_COUNTER_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG_COUNTER_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_COUNTER_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG2_COUNTER_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_COUNTER_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_COUNTER_INIT_VAR(MODULE, ptr_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_COUNTER_INIT_VAR_impl(ptr_))
#define MPIR_T_PVAR_COUNTER_GET_VAR(ptr_) \
@@ -345,27 +252,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_))
/* COUNTER ARRAY for user's convenience */
-#define MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_impl(name_, len_))
-#define MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_impl(name_, len_))
-#define MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_impl(name_, len_))
-
-#define MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_STATIC(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_STATIC_impl(name_, len_))
-#define MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_STATIC(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_STATIC_impl(name_, len_))
-#define MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_STATIC(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_STATIC_impl(name_, len_))
-
-#define MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_EXTERN(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_EXTERN_impl(name_, len_))
-#define MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_EXTERN(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_EXTERN_impl(name_, len_))
-#define MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_EXTERN(MODULE, name_, len_) \
- PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_EXTERN_impl(name_, len_))
-
#define MPIR_T_PVAR_COUNTER_ARRAY_INIT_VAR(MODULE, ptr_, count_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_COUNTER_ARRAY_INIT_VAR_impl(ptr_, count_))
#define MPIR_T_PVAR_COUNTER_ARRAY_GET_VAR(ptr_, idx_) \
@@ -386,33 +272,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
verb_, bind_, flags_, cat_, desc_))
/* ARRGEGATE */
-#define MPIR_T_PVAR_UINT_AGGREGATE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_AGGREGATE_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG_AGGREGATE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_AGGREGATE_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_impl(name_))
-
-#define MPIR_T_PVAR_UINT_AGGREGATE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_AGGREGATE_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG_AGGREGATE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_AGGREGATE_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_UINT_AGGREGATE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_AGGREGATE_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG_AGGREGATE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_AGGREGATE_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_AGGREGATE_INIT_VAR(MODULE, ptr_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_AGGREGATE_INIT_VAR_impl(ptr_))
#define MPIR_T_PVAR_AGGREGATE_GET_VAR(ptr_) \
@@ -445,15 +304,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
same name, but in two MPI_T_PVAR classes (timer and counter) and two data types
(double and unsigned long long) respectively.
*/
-#define MPIR_T_PVAR_DOUBLE_TIMER_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_TIMER_DECL_impl(name_))
-
-#define MPIR_T_PVAR_DOUBLE_TIMER_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_TIMER_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_TIMER_INIT_VAR(MODULE, ptr_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_TIMER_INIT_VAR_impl(ptr_))
#define MPIR_T_PVAR_TIMER_GET_VAR(MODULE, ptr_, buf) \
@@ -481,32 +331,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
verb_, bind_, flags_, cat_, desc_))
/* HIGHWATERMARK */
-#define MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_impl(name_))
-
-#define MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_EXTERN_impl(name_))
/* Embed type names in watermark operations because these operations need to
know types of watermark to work, however we can't use typeof(ptr_) in C.
@@ -558,33 +382,6 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_))
/* LOWWATERMARK */
-#define MPIR_T_PVAR_UINT_LOWWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_impl(name_))
-#define MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_impl(name_))
-
-#define MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_STATIC_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_STATIC(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_STATIC_impl(name_))
-
-#define MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_EXTERN_impl(name_))
-#define MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_EXTERN(MODULE, name_) \
- PVAR_GATED_DECL(MODULE, MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_EXTERN_impl(name_))
-
#define MPIR_T_PVAR_UINT_LOWWATERMARK_INIT_VAR(MODULE, ptr_, val_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_UINT_LOWWATERMARK_INIT_VAR_impl(ptr_, val_))
#define MPIR_T_PVAR_ULONG_LOWWATERMARK_INIT_VAR(MODULE, ptr_, val_) \
@@ -630,4 +427,22 @@ static inline cvar_table_entry_t * LOOKUP_CVAR_BY_NAME(const char* cvar_name)
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
PVAR_GATED_ACTION(MODULE, MPIR_T_PVAR_LOWWATERMARK_REGISTER_DYNAMIC_impl(dtype_, name_, \
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_))
-#endif
+
+int MPIR_T_cvar_handle_alloc_impl(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle, int *count);
+int MPIR_T_cvar_read_impl(MPI_T_cvar_handle handle, void *buf);
+int MPIR_T_cvar_write_impl(MPI_T_cvar_handle handle, const void *buf);
+int MPIR_T_pvar_session_create_impl(MPI_T_pvar_session *session);
+int MPIR_T_pvar_session_free_impl(MPI_T_pvar_session *session);
+int MPIR_T_pvar_handle_alloc_impl(MPI_T_pvar_session session, int pvar_index, void *obj_handle, MPI_T_pvar_handle *handle, int *count);
+int MPIR_T_pvar_handle_free_impl(MPI_T_pvar_session session, MPI_T_pvar_handle *handle);
+int MPIR_T_pvar_start_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPIR_T_pvar_stop_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPIR_T_pvar_read_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPIR_T_pvar_write_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const void *buf);
+int MPIR_T_pvar_reset_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPIR_T_pvar_readreset_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPIR_T_category_get_cvars_impl(int cat_index, int len, int indices[]);
+int MPIR_T_category_get_pvars_impl(int cat_index, int len, int indices[]);
+int MPIR_T_category_get_categories_impl(int cat_index, int len, int indices[]);
+
+#endif /* MPIT_H_INCLUDED */
diff --git a/src/include/mpitimerimpl.h b/src/include/mpitimerimpl.h
deleted file mode 100644
index ea6eae3..0000000
--- a/src/include/mpitimerimpl.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPITIMERIMPL_H_INCLUDED
-#define MPITIMERIMPL_H_INCLUDED
-
-/* Possible values for timing */
-#define MPID_TIMING_KIND_NONE 0
-#define MPID_TIMING_KIND_TIME 1
-#define MPID_TIMING_KIND_LOG 2
-#define MPID_TIMING_KIND_LOG_DETAILED 3
-#define MPID_TIMING_KIND_ALL 4
-#define MPID_TIMING_KIND_RUNTIME 5
-
-/* Routine tracing (see --enable-timing for control of this) */
-#if defined(HAVE_TIMING) && (HAVE_TIMING == MPID_TIMING_KIND_LOG || \
- HAVE_TIMING == MPID_TIMING_KIND_LOG_DETAILED || \
- HAVE_TIMING == MPID_TIMING_KIND_ALL || \
- HAVE_TIMING == MPID_TIMING_KIND_RUNTIME)
-
-/* define MPID_LOG_RECV_FROM_BEGINNING to log arrows from the beginning of
- send operations to the beginning of the corresponding receive operations.
- Otherwise, arrows are logged from the beginning of the send to the end of
- the receive. */
-/* FIXME: Document this and/or make it a runtime feature or decide on a
- single approach. */
-#undef MPID_LOG_RECV_FROM_BEGINNING
-/*#define MPID_LOG_RECV_FROM_BEGINNING*/
-
-/* This include file contains the static state definitions */
-#include "mpiallstates.h"
-
-/* Possible values for USE_LOGGING */
-#define MPID_LOGGING_NONE 0
-#define MPID_LOGGING_RLOG 1
-#define MPID_LOGGING_EXTERNAL 4
-
-/* Include the macros specific to the selected logging library */
-#if (USE_LOGGING == MPID_LOGGING_RLOG)
-#include "rlog_macros.h"
-#elif (USE_LOGGING == MPID_LOGGING_EXTERNAL)
-#include "mpilogging.h"
-#else
-#error You must select a logging library if timing is enabled
-#endif
-
-/* MPI layer definitions */
-#define MPID_MPI_STATE_DECL(a) MPIDU_STATE_DECL(a)
-#define MPID_MPI_INIT_STATE_DECL(a) MPIDU_INIT_STATE_DECL(a)
-#define MPID_MPI_FINALIZE_STATE_DECL(a) MPIDU_FINALIZE_STATE_DECL(a)
-
-#define MPID_MPI_FUNC_ENTER(a) MPIDU_FUNC_ENTER(a)
-#define MPID_MPI_FUNC_EXIT(a) MPIDU_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPID_MPI_COLL_FUNC_ENTER(a) MPIDU_COLL_FUNC_ENTER(a)
-#define MPID_MPI_COLL_FUNC_EXIT(a) MPIDU_COLL_FUNC_EXIT(a)
-#define MPID_MPI_RMA_FUNC_ENTER(a) MPIDU_RMA_FUNC_ENTER(a)
-#define MPID_MPI_RMA_FUNC_EXIT(a) MPIDU_RMA_FUNC_EXIT(a)
-#define MPID_MPI_INIT_FUNC_ENTER(a) MPIDU_INIT_FUNC_ENTER(a)
-#define MPID_MPI_INIT_FUNC_EXIT(a) MPIDU_INIT_FUNC_EXIT(a)
-#define MPID_MPI_FINALIZE_FUNC_ENTER(a) MPIDU_FINALIZE_FUNC_ENTER(a)
-#define MPID_MPI_FINALIZE_FUNC_EXIT(a) MPIDU_FINALIZE_FUNC_EXIT(a)
-
-#define MPID_LOG_ARROWS
-#ifdef MPID_LOG_ARROWS
-#define MPID_MPI_PT2PT_FUNC_ENTER_FRONT(a) MPIDU_PT2PT_FUNC_ENTER_FRONT(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_FRONT(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#ifdef MPID_LOG_RECV_FROM_BEGINNING
-#define MPID_MPI_PT2PT_FUNC_ENTER_BACK(a) MPIDU_PT2PT_FUNC_ENTER_BACK(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BACK(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BOTH(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#else
-#define MPID_MPI_PT2PT_FUNC_ENTER_BACK(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BACK(a) MPIDU_PT2PT_FUNC_EXIT_BACK(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BOTH(a) MPIDU_PT2PT_FUNC_EXIT_BOTH(a)
-#endif
-#define MPID_MPI_PT2PT_FUNC_ENTER_BOTH(a) MPIDU_PT2PT_FUNC_ENTER_BOTH(a)
-#else
-#define MPID_MPI_PT2PT_FUNC_ENTER_FRONT(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_FRONT(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BACK(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BOTH(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BACK(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BOTH(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#endif
-
-#if defined(HAVE_TIMING) && (HAVE_TIMING == MPID_TIMING_KIND_LOG_DETAILED || HAVE_TIMING == MPID_TIMING_KIND_ALL)
-
-/* device layer definitions */
-#define MPIDI_STATE_DECL(a) MPIDU_STATE_DECL(a)
-#define MPIDI_INIT_STATE_DECL(a) MPIDU_INIT_STATE_DECL(a)
-#define MPIDI_FINALIZE_STATE_DECL(a) MPIDU_FINALIZE_STATE_DECL(a)
-
-#define MPIDI_FUNC_ENTER(a) MPIDU_FUNC_ENTER(a)
-#define MPIDI_FUNC_EXIT(a) MPIDU_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPIDI_COLL_FUNC_ENTER(a) MPIDU_COLL_FUNC_ENTER(a)
-#define MPIDI_COLL_FUNC_EXIT(a) MPIDU_COLL_FUNC_EXIT(a)
-#define MPIDI_RMA_FUNC_ENTER(a) MPIDU_RMA_FUNC_ENTER(a)
-#define MPIDI_RMA_FUNC_EXIT(a) MPIDU_RMA_FUNC_EXIT(a)
-#define MPIDI_INIT_FUNC_ENTER(a) MPIDU_INIT_FUNC_ENTER(a)
-#define MPIDI_INIT_FUNC_EXIT(a) MPIDU_INIT_FUNC_EXIT(a)
-#define MPIDI_FINALIZE_FUNC_ENTER(a) MPIDU_FINALIZE_FUNC_ENTER(a)
-#define MPIDI_FINALIZE_FUNC_EXIT(a) MPIDU_FINALIZE_FUNC_EXIT(a)
-
-#define MPID_LOG_MPID_ARROWS
-#ifdef MPID_LOG_MPID_ARROWS
-#define MPIDI_PT2PT_FUNC_ENTER_FRONT(a) MPIDU_PT2PT_FUNC_ENTER_FRONT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_FRONT(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#ifdef MPID_LOG_RECV_FROM_BEGINNING
-#define MPIDI_PT2PT_FUNC_ENTER_BACK(a) MPIDU_PT2PT_FUNC_ENTER_BACK(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BACK(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BOTH(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#else
-#define MPIDI_PT2PT_FUNC_ENTER_BACK(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BACK(a) MPIDU_PT2PT_FUNC_EXIT_BACK(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BOTH(a) MPIDU_PT2PT_FUNC_EXIT_BOTH(a)
-#endif
-#define MPIDI_PT2PT_FUNC_ENTER_BOTH(a) MPIDU_PT2PT_FUNC_ENTER_BOTH(a)
-#else
-#define MPIDI_PT2PT_FUNC_ENTER_FRONT(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT_FRONT(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BACK(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BOTH(a) MPIDU_PT2PT_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BACK(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BOTH(a) MPIDU_PT2PT_FUNC_EXIT(a)
-#endif
-
-#else
-
-#define MPIDI_STATE_DECL(a)
-#define MPIDI_FUNC_ENTER(a)
-#define MPIDI_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_ENTER_FRONT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_FRONT(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BACK(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BOTH(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BACK(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BOTH(a)
-#define MPIDI_PT2PT_FUNC_EXIT(a)
-#define MPIDI_COLL_FUNC_ENTER(a)
-#define MPIDI_COLL_FUNC_EXIT(a)
-#define MPIDI_RMA_FUNC_ENTER(a)
-#define MPIDI_RMA_FUNC_EXIT(a)
-#define MPIDI_INIT_FUNC_ENTER(a)
-#define MPIDI_INIT_FUNC_EXIT(a)
-#define MPIDI_FINALIZE_FUNC_ENTER(a)
-#define MPIDI_FINALIZE_FUNC_EXIT(a)
-
-#endif /* (HAVE_TIMING == MPID_TIMING_KIND_LOG_DETAILED || HAVE_TIMING == MPID_TIMING_KIND_ALL) */
-
-/* prototype the initialization/finalization functions */
-int MPIU_Timer_init(int rank, int size);
-int MPIU_Timer_finalize(void);
-int MPIR_Describe_timer_states(void);
-
-/* The original statistics macros (see the design documentation)
- have been superceeded by the MPIR_T_PVAR_* macros (see mpit.h) */
-
-#else /* HAVE_TIMING and doing logging */
-
-/* evaporate all the timing macros if timing is not selected */
-#define MPIU_Timer_init(rank, size)
-#define MPIU_Timer_finalize()
-/* MPI layer */
-#define MPID_MPI_STATE_DECL(a)
-#define MPID_MPI_INIT_STATE_DECL(a)
-#define MPID_MPI_FINALIZE_STATE_DECL(a)
-#define MPID_MPI_FUNC_EXIT(a)
-#define MPID_MPI_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_FRONT(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_FRONT(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BACK(a)
-#define MPID_MPI_PT2PT_FUNC_ENTER_BOTH(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BACK(a)
-#define MPID_MPI_PT2PT_FUNC_EXIT_BOTH(a)
-#define MPID_MPI_COLL_FUNC_ENTER(a)
-#define MPID_MPI_COLL_FUNC_EXIT(a)
-#define MPID_MPI_RMA_FUNC_ENTER(a)
-#define MPID_MPI_RMA_FUNC_EXIT(a)
-#define MPID_MPI_INIT_FUNC_ENTER(a)
-#define MPID_MPI_INIT_FUNC_EXIT(a)
-#define MPID_MPI_FINALIZE_FUNC_ENTER(a)
-#define MPID_MPI_FINALIZE_FUNC_EXIT(a)
-/* device layer */
-#define MPIDI_STATE_DECL(a)
-#define MPIDI_FUNC_ENTER(a)
-#define MPIDI_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_ENTER(a)
-#define MPIDI_PT2PT_FUNC_ENTER_FRONT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_FRONT(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BACK(a)
-#define MPIDI_PT2PT_FUNC_ENTER_BOTH(a)
-#define MPIDI_PT2PT_FUNC_EXIT(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BACK(a)
-#define MPIDI_PT2PT_FUNC_EXIT_BOTH(a)
-#define MPIDI_COLL_FUNC_ENTER(a)
-#define MPIDI_COLL_FUNC_EXIT(a)
-#define MPIDI_RMA_FUNC_ENTER(a)
-#define MPIDI_RMA_FUNC_EXIT(a)
-#define MPIDI_INIT_FUNC_ENTER(a)
-#define MPIDI_INIT_FUNC_EXIT(a)
-#define MPIDI_FINALIZE_FUNC_ENTER(a)
-#define MPIDI_FINALIZE_FUNC_EXIT(a)
-
-#endif /* HAVE_TIMING */
-
-#endif
diff --git a/src/include/mpitimpl.h b/src/include/mpitimpl.h
index 48bf02b..bacf7c0 100644
--- a/src/include/mpitimpl.h
+++ b/src/include/mpitimpl.h
@@ -11,9 +11,13 @@
#define MPITIMPL_H_INCLUDED
#include "mpi.h"
-#include "mpiutil.h"
-#include "mpiu_utarray.h"
-#include "mpiu_uthash.h"
+#include "mpir_strerror.h"
+#include "mpir_type_defs.h"
+#include "mpir_assert.h"
+#include "mpir_pointers.h"
+#include "mpir_utarray.h"
+#include "mpl_uthash.h"
+#include "mpir_objects.h"
#ifdef HAVE_ERROR_CHECKING
typedef enum {
@@ -53,8 +57,8 @@ typedef struct {
/* Hash names to indices in a table */
typedef struct {
const char *name;
- int idx;
- UT_hash_handle hh; /* Makes this structure hashable */
+ unsigned idx;
+ MPL_UT_hash_handle hh; /* Makes this structure hashable */
} name2index_hash_t;
/* MPI_T control variable (cvar)
@@ -215,11 +219,6 @@ typedef struct {
action_; \
#endif \
} while (0)
-
-#define PVAR_GATED_DECL(MODULE, declaration_) \
- #ifdef ENABLE_PVAR_##MODULE \
- declaration_; \
- #endif
*/
/* ENABLE_PVAR_##MODULE must be defined by configure script either to 0 or 1 */
@@ -230,11 +229,6 @@ typedef struct {
} \
} while (0)
-/* The declaration is not gated. But any compiler should optimize it away if
- * there are no references to the declared varaible */
-#define PVAR_GATED_DECL(MODULE_, declaration_) \
- declaration_
-
/* For some classes of pvars, internally we can not represent them
* in basic data types. So come the following typedefs.
*/
@@ -365,14 +359,6 @@ extern void MPIR_T_PVAR_REGISTER_impl(
/* MPI_T_PVAR_CLASS_STATE (continuous only)
*/
-/* Declaration -- static pvar */
-#define MPIR_T_PVAR_INT_STATE_DECL_impl(name_) \
- int PVAR_STATE_##name_;
-#define MPIR_T_PVAR_INT_STATE_DECL_STATIC_impl(name_) \
- static int PVAR_STATE_##name_;
-#define MPIR_T_PVAR_INT_STATE_DECL_EXTERN_impl(name_) \
- extern int PVAR_STATE_##name_;
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_STATE_SET_VAR_impl(ptr_, val_) \
do { *(ptr_) = (val_); } while (0)
@@ -390,12 +376,12 @@ extern void MPIR_T_PVAR_REGISTER_impl(
do { \
void *addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_INT); \
+ MPIR_Assert((dtype_) == MPI_INT); \
/* Double check if dtype_ and name_ match */ \
- MPIU_Assert(sizeof(PVAR_STATE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert(sizeof(PVAR_STATE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
/* State pvars should be describled further by an enum */ \
- MPIU_Assert((etype_) != MPI_T_ENUM_NULL); \
+ MPIR_Assert((etype_) != MPI_T_ENUM_NULL); \
PVAR_STATE_##name_ = (initval_); \
addr_ = &PVAR_STATE_##name_; \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_STATE, dtype_, #name_, \
@@ -407,10 +393,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
etype_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_INT); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
- MPIU_Assert((etype_) != MPI_T_ENUM_NULL); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((dtype_) == MPI_INT); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert((etype_) != MPI_T_ENUM_NULL); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_STATE, dtype_, #name_, \
addr_, count_, etype_, verb_, bind_, flags_, get_value_, cat_, desc_); \
} while (0)
@@ -419,34 +405,6 @@ extern void MPIR_T_PVAR_REGISTER_impl(
/* MPI_T_PVAR_CLASS_LEVEL (continuous only)
*/
-/* Declaration -- static pvar */
-#define MPIR_T_PVAR_UINT_LEVEL_DECL_impl(name_) \
- unsigned int PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_ULONG_LEVEL_DECL_impl(name_) \
- unsigned long PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_ULONG2_LEVEL_DECL_impl(name_) \
- unsigned long long PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_DOUBLE_LEVEL_DECL_impl(name_) \
- double PVAR_LEVEL_##name_;
-
-#define MPIR_T_PVAR_UINT_LEVEL_DECL_STATIC_impl(name_) \
- static unsigned PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_ULONG_LEVEL_DECL_STATIC_impl(name_) \
- static unsigned long PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_ULONG2_LEVEL_DECL_STATIC_impl(name_) \
- static unsigned long long PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_DOUBLE_LEVEL_DECL_STATIC_impl(name_) \
- static double PVAR_LEVEL_##name_;
-
-#define MPIR_T_PVAR_UINT_LEVEL_DECL_EXTERN_impl(name_) \
- extern unsigned PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_ULONG_LEVEL_DECL_EXTERN_impl(name_) \
- extern unsigned long PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_ULONG2_LEVEL_DECL_EXTERN_impl(name_) \
- extern unsigned long long PVAR_LEVEL_##name_;
-#define MPIR_T_PVAR_DOUBLE_LEVEL_DECL_EXTERN_impl(name_) \
- extern double PVAR_LEVEL_##name_;
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_LEVEL_SET_VAR_impl(ptr_, val_) \
do { *(ptr_) = (val_); } while (0)
@@ -472,11 +430,11 @@ extern void MPIR_T_PVAR_REGISTER_impl(
do { \
void *addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
/* Double check if dtype_ and name_ match */ \
- MPIU_Assert(sizeof(PVAR_LEVEL_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert(sizeof(PVAR_LEVEL_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
PVAR_LEVEL_##name_ = (initval_); \
addr_ = &PVAR_LEVEL_##name_; \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_LEVEL, dtype_, #name_, \
@@ -488,10 +446,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
addr_, count_, verb_, bind_, flags_, get_value_, get_count, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_LEVEL, dtype_, #name_, \
addr_, count_, MPI_T_ENUM_NULL, verb_, bind_, flags_, get_value_, \
get_count, cat_, desc_); \
@@ -501,34 +459,6 @@ extern void MPIR_T_PVAR_REGISTER_impl(
/* MPI_T_PVAR_CLASS_SIZE (continuous only)
*/
-/* Declaration -- static pvar */
-#define MPIR_T_PVAR_UINT_SIZE_DECL_impl(name_) \
- unsigned PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_ULONG_SIZE_DECL_impl(name_) \
- unsigned long PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_ULONG2_SIZE_DECL_impl(name_) \
- unsigned long long PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_DOUBLE_SIZE_DECL_impl(name_) \
- double PVAR_SIZE_##name_;
-
-#define MPIR_T_PVAR_UINT_SIZE_DECL_STATIC_impl(name_) \
- static unsigned PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_ULONG_SIZE_DECL_STATIC_impl(name_) \
- static unsigned long PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_ULONG2_SIZE_DECL_STATIC_impl(name_) \
- static unsigned long long PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_DOUBLE_SIZE_DECL_STATIC_impl(name_) \
- static double PVAR_SIZE_##name_;
-
-#define MPIR_T_PVAR_UINT_SIZE_DECL_EXTERN_impl(name_) \
- extern unsigned PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_ULONG_SIZE_DECL_EXTERN_impl(name_) \
- extern unsigned long PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_ULONG2_SIZE_DECL_EXTERN_impl(name_) \
- extern unsigned long long PVAR_SIZE_##name_;
-#define MPIR_T_PVAR_DOUBLE_SIZE_DECL_EXTERN_impl(name_) \
- extern double PVAR_SIZE_##name_;
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_SIZE_SET_VAR_impl(ptr_, val_) \
do { *(ptr_) = (val_); } while (0)
@@ -546,11 +476,11 @@ extern void MPIR_T_PVAR_REGISTER_impl(
do { \
void *addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
/* Double check if dtype_ and name_ match */ \
- MPIU_Assert(sizeof(PVAR_SIZE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert(sizeof(PVAR_SIZE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
PVAR_SIZE_##name_ = (initval_); \
addr_ = &PVAR_SIZE_##name_; \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_SIZE, dtype_, #name_, \
@@ -562,10 +492,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_SIZE, dtype_, #name_, \
addr_, count_, MPI_T_ENUM_NULL, verb_, bind_, flags_, get_value_, \
get_count_, cat_, desc_); \
@@ -575,20 +505,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
/* MPI_T_PVAR_CLASS_PERCENTAGE (continuous only)
*/
-/* Declaration -- static pvar */
-#define MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_impl(name_) \
- double PVAR_PERCENTAGE_##name_;
-
-#define MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_STATIC_impl(name_) \
- static double PVAR_PERCENTAGE_##name_;
-
-#define MPIR_T_PVAR_DOUBLE_PERCENTAGE_DECL_EXTERN_impl(name_) \
- extern double PVAR_PERCENTAGE_##name_;
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_PERCENTAGE_SET_VAR_impl(ptr_, val_) \
do { \
- MPIU_Assert(0.0 <= (val_) && (val_) <= 1.0); \
+ MPIR_Assert(0.0 <= (val_) && (val_) <= 1.0); \
*(ptr_) = (val_); \
} while (0)
#define MPIR_T_PVAR_PERCENTAGE_GET_VAR_impl(ptr_) \
@@ -605,10 +525,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
do { \
void *addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_DOUBLE); \
+ MPIR_Assert((dtype_) == MPI_DOUBLE); \
/* Double check if dtype_ and name_ match */ \
- MPIU_Assert(sizeof(PVAR_PERCENTAGE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert(sizeof(PVAR_PERCENTAGE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
addr_ = &PVAR_PERCENTAGE_##name_; \
PVAR_PERCENTAGE_##name_ = (initval_); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_PERCENTAGE, dtype_, #name_, \
@@ -620,9 +540,9 @@ extern void MPIR_T_PVAR_REGISTER_impl(
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_DOUBLE); \
- MPIU_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((dtype_) == MPI_DOUBLE); \
+ MPIR_Assert((flags_) & MPIR_T_PVAR_FLAG_CONTINUOUS); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_PERCENTAGE, dtype_, #name_, \
addr_, count_, MPI_T_ENUM_NULL, verb_, bind_, flags_, get_value_, \
get_count_, cat_, desc_); \
@@ -632,28 +552,6 @@ extern void MPIR_T_PVAR_REGISTER_impl(
/* MPI_T_PVAR_CLASS_COUNTER (continuous or not)
*/
-/* Declaration -- static pvar */
-#define MPIR_T_PVAR_UINT_COUNTER_DECL_impl(name_) \
- unsigned PVAR_COUNTER_##name_;
-#define MPIR_T_PVAR_ULONG_COUNTER_DECL_impl(name_) \
- unsigned long PVAR_COUNTER_##name_;
-#define MPIR_T_PVAR_ULONG2_COUNTER_DECL_impl(name_) \
- unsigned long long PVAR_COUNTER_##name_;
-
-#define MPIR_T_PVAR_UINT_COUNTER_DECL_STATIC_impl(name_) \
- static unsigned PVAR_COUNTER_##name_;
-#define MPIR_T_PVAR_ULONG_COUNTER_DECL_STATIC_impl(name_) \
- static unsigned long PVAR_COUNTER_##name_;
-#define MPIR_T_PVAR_ULONG2_COUNTER_DECL_STATIC_impl(name_) \
- static unsigned long long PVAR_COUNTER_##name_;
-
-#define MPIR_T_PVAR_UINT_COUNTER_DECL_EXTERN_impl(name_) \
- extern unsigned PVAR_COUNTER_##name_;
-#define MPIR_T_PVAR_ULONG_COUNTER_DECL_EXTERN_impl(name_) \
- extern unsigned long PVAR_COUNTER_##name_;
-#define MPIR_T_PVAR_ULONG2_COUNTER_DECL_EXTERN_impl(name_) \
- extern unsigned long long PVAR_COUNTER_##name_;
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_COUNTER_INIT_VAR_impl(ptr_) \
do { *(ptr_) = 0; } while (0)
@@ -678,10 +576,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
do { \
void *addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG); \
/* Double check if dtype_ and name_ match*/ \
- MPIU_Assert(sizeof(PVAR_COUNTER_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
+ MPIR_Assert(sizeof(PVAR_COUNTER_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
PVAR_COUNTER_##name_ = 0; \
addr_ = &PVAR_COUNTER_##name_; \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_COUNTER, dtype_, #name_, \
@@ -693,36 +591,14 @@ extern void MPIR_T_PVAR_REGISTER_impl(
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_COUNTER, dtype_, #name_, \
addr_, count_, MPI_T_ENUM_NULL, verb_, bind_, flags_, get_value_, \
get_count_, cat_, desc_); \
} while (0)
-/* Declaration of a counter array -- static pvar */
-#define MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_impl(name_, len_) \
- unsigned PVAR_COUNTER_##name_[len_];
-#define MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_impl(name_, len_) \
- unsigned long PVAR_COUNTER_##name_[len_];
-#define MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_impl(name_, len_) \
- unsigned long long PVAR_COUNTER_##name_[len_];
-
-#define MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_STATIC_impl(name_, len_) \
- static unsigned PVAR_COUNTER_##name_[len_];
-#define MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_STATIC_impl(name_, len_) \
- static unsigned long PVAR_COUNTER_##name_[len_];
-#define MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_STATIC_impl(name_, len_) \
- static unsigned long long PVAR_COUNTER_##name_[len_];
-
-#define MPIR_T_PVAR_UINT_COUNTER_ARRAY_DECL_EXTERN_impl(name_, len_) \
- extern unsigned PVAR_COUNTER_##name_[len_];
-#define MPIR_T_PVAR_ULONG_COUNTER_ARRAY_DECL_EXTERN_impl(name_, len_) \
- extern unsigned long PVAR_COUNTER_##name_[len_];
-#define MPIR_T_PVAR_ULONG2_COUNTER_ARRAY_DECL_EXTERN_impl(name_, len_) \
- extern unsigned long long PVAR_COUNTER_##name_[len_];
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_COUNTER_ARRAY_INIT_VAR_impl(ptr_, count_) \
do { \
@@ -754,10 +630,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
void *addr_; \
int count_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG); \
/* Double check if dtype_ and name_ match */ \
- MPIU_Assert(sizeof(PVAR_COUNTER_##name_[0]) == MPID_Datatype_get_basic_size(dtype_)); \
+ MPIR_Assert(sizeof(PVAR_COUNTER_##name_[0]) == MPID_Datatype_get_basic_size(dtype_)); \
addr_ = PVAR_COUNTER_##name_; \
MPIR_T_PVAR_COUNTER_ARRAY_INIT_impl(name_); \
count_ = sizeof(PVAR_COUNTER_##name_)/sizeof(mpit_pvar_##name_[0]); \
@@ -770,34 +646,6 @@ extern void MPIR_T_PVAR_REGISTER_impl(
/* MPI_T_PVAR_CLASS_AGGREGATE (continuous or not)
*/
-/* Declaration -- static aggregate */
-#define MPIR_T_PVAR_UINT_AGGREGATE_DECL_impl(name_) \
- unsigned PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_ULONG_AGGREGATE_DECL_impl(name_) \
- unsigned long PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_impl(name_) \
- unsigned long long PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_DOUBLE_AGGREGATE_DECL_impl(name_) \
- double PVAR_AGGREGATE_##name_;
-
-#define MPIR_T_PVAR_UINT_AGGREGATE_DECL_STATIC_impl(name_) \
- static unsigned PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_ULONG_AGGREGATE_DECL_STATIC_impl(name_) \
- static unsigned long PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_STATIC_impl(name_) \
- static unsigned long long PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_DOUBLE_AGGREGATE_DECL_STATIC_impl(name_) \
- static double PVAR_AGGREGATE_##name_;
-
-#define MPIR_T_PVAR_UINT_AGGREGATE_DECL_EXTERN_impl(name_) \
- extern unsigned PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_ULONG_AGGREGATE_DECL_EXTERN_impl(name_) \
- extern unsigned long PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_ULONG2_AGGREGATE_DECL_EXTERN_impl(name_) \
- extern unsigned long long PVAR_AGGREGATE_##name_;
-#define MPIR_T_PVAR_DOUBLE_AGGREGATE_DECL_EXTERN_impl(name_) \
- extern double PVAR_AGGREGATE_##name_;
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_AGGREGATE_INIT_VAR_impl(ptr_) \
do { *(ptr_) = 0; } while (0)
@@ -820,10 +668,10 @@ extern void MPIR_T_PVAR_REGISTER_impl(
do { \
void *addr; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
/* Double check if dtype_ and name_ match*/ \
- MPIU_Assert(sizeof(PVAR_AGGREGATE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
+ MPIR_Assert(sizeof(PVAR_AGGREGATE_##name_) == MPID_Datatype_get_basic_size(dtype_)); \
PVAR_AGGREGATE_##name_ = 0; \
addr_ = &PVAR_AGGREGATE_##name_; \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_AGGREGATE, dtype_, #name_, \
@@ -835,9 +683,9 @@ extern void MPIR_T_PVAR_REGISTER_impl(
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_AGGREGATE, dtype_, #name_, \
addr_, count_, MPI_T_ENUM_NULL, verb_, bind_, flags_, get_value_, \
get_count_, cat_, desc_); \
@@ -847,16 +695,6 @@ extern void MPIR_T_PVAR_REGISTER_impl(
/* MPI_T_PVAR_CLASS_TIMER (continuous or not)
*/
-/* Declaration -- static timer */
-#define MPIR_T_PVAR_DOUBLE_TIMER_DECL_impl(name_) \
- MPIR_T_pvar_timer_t PVAR_TIMER_##name_;
-
-#define MPIR_T_PVAR_DOUBLE_TIMER_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_timer_t PVAR_TIMER_##name_;
-
-#define MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_timer_t PVAR_TIMER_##name_;
-
/* Interfaces through pointer or name */
#define MPIR_T_PVAR_TIMER_INIT_VAR_impl(ptr_) \
do { \
@@ -907,7 +745,7 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
void *addr_; \
void *count_addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_DOUBLE); \
+ MPIR_Assert((dtype_) == MPI_DOUBLE); \
MPIR_T_PVAR_TIMER_INIT_impl(name_); \
addr_ = &PVAR_TIMER_##name_; \
count_addr_ = &(PVAR_TIMER_##name_.count); \
@@ -923,34 +761,6 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
/* MPI_T_PVAR_CLASS_HIGHWATERMARK (continuous or not)
*/
-/* Declaration -- static pvar */
-#define MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-
-#define MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-
-#define MPIR_T_PVAR_UINT_HIGHWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG_HIGHWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG2_HIGHWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-#define MPIR_T_PVAR_DOUBLE_HIGHWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_HIGHWATERMARK_##name_;
-
/* Interfaces through pointer or name.
* In contrast to previous pvar classes, for each type we create a set
* of interfaces. That is because we have a pointer and a union in the
@@ -1084,7 +894,7 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
do { \
void *addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
switch (dtype_) { \
case MPI_UNSIGNED: \
@@ -1108,9 +918,9 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_HIGHWATERMARK, dtype_, #name_, \
addr_, count_, MPI_T_ENUM_NULL, verb_, bind_, flags_, get_value_, \
get_count_, cat_, desc_); \
@@ -1120,34 +930,6 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
/* MPI_T_PVAR_CLASS_LOWWATERMARK (continuous or not)
*/
-/* Declaration -- static pvar */
-#define MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_impl(name_) \
- MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-
-#define MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_STATIC_impl(name_) \
- static MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-
-#define MPIR_T_PVAR_UINT_LOWWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG_LOWWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_ULONG2_LOWWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-#define MPIR_T_PVAR_DOUBLE_LOWWATERMARK_DECL_EXTERN_impl(name_) \
- extern MPIR_T_pvar_watermark_t PVAR_LOWWATERMARK_##name_;
-
#define MPIR_T_PVAR_UINT_LOWWATERMARK_INIT_VAR_impl(ptr_, val_) \
do { \
(ptr_)->datatype = MPI_UNSIGNED; \
@@ -1277,7 +1059,7 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
do { \
void *addr_; \
/* Allowable datatypes only */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
switch (dtype_) { \
case MPI_UNSIGNED: \
@@ -1301,9 +1083,9 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
addr_, count_, verb_, bind_, flags_, get_value_, get_count_, cat_, desc_) \
do { \
/* Allowable datatypes */ \
- MPIU_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
+ MPIR_Assert((dtype_) == MPI_UNSIGNED || (dtype_) == MPI_UNSIGNED_LONG || \
(dtype_) == MPI_UNSIGNED_LONG_LONG || (dtype_) == MPI_DOUBLE); \
- MPIU_Assert((addr_) != NULL || (get_value_) != NULL); \
+ MPIR_Assert((addr_) != NULL || (get_value_) != NULL); \
MPIR_T_PVAR_REGISTER_impl(MPI_T_PVAR_CLASS_LOWWATERMARK, dtype_, #name_, \
addr_, count_, MPI_T_ENUM_NULL, verb_, bind_, flags_, get_value_, \
get_count_, cat_, desc_); \
@@ -1317,7 +1099,7 @@ void get_timer_time_in_double(MPIR_T_pvar_timer_t *timer, void *obj_handle,
(pvar_table_entry_t *)utarray_eltptr(pvar_table, idx_); \
if (pvar != NULL) { \
pvar->active = FALSE; \
- /* Do not do MPIU_Free(pvar->info), since it may be re-activated */ \
+ /* Do not do MPL_free(pvar->info), since it may be re-activated */ \
} \
} \
} while (0)
@@ -1390,13 +1172,13 @@ extern int MPIR_T_is_threaded;
#define MPIR_T_THREAD_CHECK_END }
#ifdef MPICH_IS_THREADED
-extern MPIU_Thread_mutex_t mpi_t_mutex;
+extern MPID_Thread_mutex_t mpi_t_mutex;
#define MPIR_T_THREAD_CS_INIT() \
do { \
int err_; \
MPIR_T_THREAD_CHECK_BEGIN \
MPID_Thread_mutex_create(&mpi_t_mutex, &err_); \
- MPIU_Assert(err_ == 0); \
+ MPIR_Assert(err_ == 0); \
MPIR_T_THREAD_CHECK_END \
} while (0)
@@ -1405,7 +1187,7 @@ extern MPIU_Thread_mutex_t mpi_t_mutex;
int err_; \
MPIR_T_THREAD_CHECK_BEGIN \
MPID_Thread_mutex_destroy(&mpi_t_mutex, &err_); \
- MPIU_Assert(err_ == 0); \
+ MPIR_Assert(err_ == 0); \
MPIR_T_THREAD_CHECK_END \
} while (0)
diff --git a/src/include/mpiu_utarray.h b/src/include/mpiu_utarray.h
deleted file mode 100644
index d5bb238..0000000
--- a/src/include/mpiu_utarray.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* MPICH notes:
- * - The file name has been changed to avoid conflicts with any system-installed
- * "utlist.h" header files.
- * - malloc/free/realloc usages have been substituted with utarray_malloc_
- * (etc.) indirection macros and then changed to use MPIU_Malloc and friends
- * - add a ut_ptr_icd for the common case of dynamic tables of pointers
- * - intentionally omitted from "mpiimpl.h" in order to require using code to
- * opt-in
- * [goodell@ 2011-10-04] */
-/*
-Copyright (c) 2008-2011, Troy D. Hanson http://uthash.sourceforge.net
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* a dynamic array implementation using macros
- * see http://uthash.sourceforge.net/utarray
- */
-#ifndef MPIU_UTARRAY_H
-#define MPIU_UTARRAY_H
-
-#define UTARRAY_VERSION 1.9.4
-
-#ifdef __GNUC__
-#define _UNUSED_ __attribute__ ((__unused__))
-#else
-#define _UNUSED_
-#endif
-
-#include <stddef.h> /* size_t */
-#include <string.h> /* memset, etc */
-#include <stdlib.h> /* exit */
-
-/* MPICH modification: override these to change what malloc/free/realloc
- * routines are used by the utarray code */
-#define utarray_malloc_(x_) MPIU_Malloc(x_)
-#define utarray_free_(x_) MPIU_Free(x_)
-#define utarray_realloc_(x_,y_) MPIU_Realloc(x_,y_)
-#define utarray_strdup_(x_) MPIU_Strdup(x_)
-
-#ifndef utarray_oom
-#define utarray_oom() exit(-1)
-#endif
-
-typedef void (ctor_f)(void *dst, const void *src);
-typedef void (dtor_f)(void *elt);
-typedef void (init_f)(void *elt);
-typedef struct {
- size_t sz;
- init_f *init;
- ctor_f *copy;
- dtor_f *dtor;
-} UT_icd;
-
-typedef struct {
- unsigned i,n;/* i: index of next available slot, n: num slots */
- const UT_icd *icd; /* initializer, copy and destructor functions */
- char *d; /* n slots of size icd->sz*/
-} UT_array;
-
-#define utarray_init(a,_icd) do { \
- memset(a,0,sizeof(UT_array)); \
- (a)->icd=_icd; \
-} while(0)
-
-#define utarray_done(a) do { \
- if ((a)->n) { \
- if ((a)->icd->dtor) { \
- size_t _ut_i; \
- for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \
- (a)->icd->dtor(utarray_eltptr(a,_ut_i)); \
- } \
- } \
- utarray_free_((a)->d); \
- } \
- (a)->n=0; \
-} while(0)
-
-#define utarray_new(a,_icd) do { \
- a=(UT_array*)utarray_malloc_(sizeof(UT_array)); \
- if (a == NULL) utarray_oom(); \
- utarray_init(a,_icd); \
-} while(0)
-
-#define utarray_free(a) do { \
- utarray_done(a); \
- utarray_free_(a); \
-} while(0)
-
-#define utarray_reserve(a,by) do { \
- if (((a)->i+by) > ((a)->n)) { \
- void * d_; \
- while(((a)->i+by) > ((a)->n)) { (a)->n = ((a)->n ? (2*(a)->n) : 8); } \
- d_=(char*)utarray_realloc_((a)->d, (a)->n*(a)->icd->sz); \
- if (d_ == NULL) utarray_oom(); \
- (a)->d = d_; \
- } \
-} while(0)
-
-#define utarray_push_back(a,p) do { \
- utarray_reserve(a,1); \
- if ((a)->icd->copy) { (a)->icd->copy( _utarray_eltptr(a,(a)->i++), p); } \
- else { memcpy(_utarray_eltptr(a,(a)->i++), p, (a)->icd->sz); }; \
-} while(0)
-
-#define utarray_pop_back(a) do { \
- if ((a)->icd->dtor) { (a)->icd->dtor( _utarray_eltptr(a,--((a)->i))); } \
- else { (a)->i--; } \
-} while(0)
-
-#define utarray_extend_back(a) do { \
- utarray_reserve(a,1); \
- if ((a)->icd->init) { (a)->icd->init(_utarray_eltptr(a,(a)->i)); } \
- else { memset(_utarray_eltptr(a,(a)->i),0,(a)->icd->sz); } \
- (a)->i++; \
-} while(0)
-
-#define utarray_len(a) ((a)->i)
-
-#define utarray_eltptr(a,j) (((j) < (a)->i) ? _utarray_eltptr(a,j) : NULL)
-#define _utarray_eltptr(a,j) ((char*)((a)->d + ((a)->icd->sz*(j) )))
-
-#define utarray_insert(a,p,j) do { \
- utarray_reserve(a,1); \
- if (j > (a)->i) break; \
- if ((j) < (a)->i) { \
- memmove( _utarray_eltptr(a,(j)+1), _utarray_eltptr(a,j), \
- ((a)->i - (j))*((a)->icd->sz)); \
- } \
- if ((a)->icd->copy) { (a)->icd->copy( _utarray_eltptr(a,j), p); } \
- else { memcpy(_utarray_eltptr(a,j), p, (a)->icd->sz); }; \
- (a)->i++; \
-} while(0)
-
-#define utarray_inserta(a,w,j) do { \
- if (utarray_len(w) == 0) break; \
- if (j > (a)->i) break; \
- utarray_reserve(a,utarray_len(w)); \
- if ((j) < (a)->i) { \
- memmove(_utarray_eltptr(a,(j)+utarray_len(w)), \
- _utarray_eltptr(a,j), \
- ((a)->i - (j))*((a)->icd->sz)); \
- } \
- if ((a)->icd->copy) { \
- size_t _ut_i; \
- for(_ut_i=0;_ut_i<(w)->i;_ut_i++) { \
- (a)->icd->copy(_utarray_eltptr(a,j+_ut_i), _utarray_eltptr(w,_ut_i)); \
- } \
- } else { \
- memcpy(_utarray_eltptr(a,j), _utarray_eltptr(w,0), \
- utarray_len(w)*((a)->icd->sz)); \
- } \
- (a)->i += utarray_len(w); \
-} while(0)
-
-#define utarray_resize(dst,num) do { \
- size_t _ut_i; \
- if (dst->i > (size_t)(num)) { \
- if ((dst)->icd->dtor) { \
- for(_ut_i=num; _ut_i < dst->i; _ut_i++) { \
- (dst)->icd->dtor(utarray_eltptr(dst,_ut_i)); \
- } \
- } \
- } else if (dst->i < (size_t)(num)) { \
- utarray_reserve(dst,num-dst->i); \
- if ((dst)->icd->init) { \
- for(_ut_i=dst->i; _ut_i < num; _ut_i++) { \
- (dst)->icd->init(utarray_eltptr(dst,_ut_i)); \
- } \
- } else { \
- memset(_utarray_eltptr(dst,dst->i),0,(dst)->icd->sz*(num-dst->i)); \
- } \
- } \
- dst->i = num; \
-} while(0)
-
-#define utarray_concat(dst,src) do { \
- utarray_inserta((dst),(src),utarray_len(dst)); \
-} while(0)
-
-#define utarray_erase(a,pos,len) do { \
- if ((a)->icd->dtor) { \
- size_t _ut_i; \
- for(_ut_i=0; _ut_i < len; _ut_i++) { \
- (a)->icd->dtor(utarray_eltptr(a,pos+_ut_i)); \
- } \
- } \
- if ((a)->i > (pos+len)) { \
- memmove( _utarray_eltptr(a,pos), _utarray_eltptr(a,pos+len), \
- ((a->i)-(pos+len))*((a)->icd->sz)); \
- } \
- (a)->i -= (len); \
-} while(0)
-
-#define utarray_clear(a) do { \
- if ((a)->i > 0) { \
- if ((a)->icd->dtor) { \
- size_t _ut_i; \
- for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \
- (a)->icd->dtor(utarray_eltptr(a,_ut_i)); \
- } \
- } \
- (a)->i = 0; \
- } \
-} while(0)
-
-#define utarray_sort(a,cmp) do { \
- qsort((a)->d, (a)->i, (a)->icd->sz, cmp); \
-} while(0)
-
-#define utarray_find(a,v,cmp) bsearch((v),(a)->d,(a)->i,(a)->icd->sz,cmp)
-
-#define utarray_front(a) (((a)->i) ? (_utarray_eltptr(a,0)) : NULL)
-#define utarray_next(a,e) (((e)==NULL) ? utarray_front(a) : ((((a)->i) > (utarray_eltidx(a,e)+1)) ? _utarray_eltptr(a,utarray_eltidx(a,e)+1) : NULL))
-#define utarray_back(a) (((a)->i) ? (_utarray_eltptr(a,(a)->i-1)) : NULL)
-#define utarray_eltidx(a,e) (((char*)(e) >= (char*)((a)->d)) ? (((char*)(e) - (char*)((a)->d))/(a)->icd->sz) : -1)
-
-/* last we pre-define a few icd for common utarrays of ints and strings */
-static void utarray_str_cpy(void *dst, const void *src) {
- char **_src = (char**)src, **_dst = (char**)dst;
- *_dst = (*_src == NULL) ? NULL : (char*)utarray_strdup_(*_src);
-}
-static void utarray_str_dtor(void *elt) {
- char **eltc = (char**)elt;
- if (*eltc) utarray_free_(*eltc);
-}
-static const UT_icd ut_str_icd _UNUSED_ = {sizeof(char*),NULL,utarray_str_cpy,utarray_str_dtor};
-static const UT_icd ut_int_icd _UNUSED_ = {sizeof(int),NULL,NULL,NULL};
-
-/* MPICH additions: */
-static const UT_icd ut_ptr_icd _UNUSED_ = {sizeof(void*),NULL,NULL,NULL};
-
-/* These are convenience macros for directly accessing the array.
- Care should be taken when using the returned pointer as the pointer
- can be invalidated by other utarray operations. */
-#define ut_int_array(a) ((int*)(a)->d)
-#define ut_str_array(a) ((char**)(a)->d)
-#define ut_ptr_array(a) ((void**)(a)->d)
-
-
-#endif /* MPIU_UTARRAY_H */
diff --git a/src/include/mpiu_uthash.h b/src/include/mpiu_uthash.h
deleted file mode 100644
index f455310..0000000
--- a/src/include/mpiu_uthash.h
+++ /dev/null
@@ -1,951 +0,0 @@
-/* MPICH-local modifications:
- *
- * 1) Rename header from "uthash.h" to "mpiu_uthash.h" to avoid accidentally
- * pulling in a system-installed version of the header.
- *
- * 2) Use MPIU_Malloc/MPIU_Free instead of malloc/free
- *
- * The actual macros themselves have not been namespaced, so if a plain
- * "uthash.h" is included anywhere in the tree then there could be a conflict.
- */
-
-/*
-Copyright (c) 2003-2013, Troy D. Hanson http://troydhanson.github.com/uthash/
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef UTHASH_H
-#define UTHASH_H
-
-#include <string.h> /* memcmp,strlen */
-#include <stddef.h> /* ptrdiff_t */
-#include <stdlib.h> /* exit() */
-
-/* These macros use decltype or the earlier __typeof GNU extension.
- As decltype is only available in newer compilers (VS2010 or gcc 4.3+
- when compiling c++ source) this code uses whatever method is needed
- or, for VS2008 where neither is available, uses casting workarounds. */
-#ifdef _MSC_VER /* MS compiler */
-#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
-#define DECLTYPE(x) (decltype(x))
-#else /* VS2008 or older (or VS2010 in C mode) */
-#define NO_DECLTYPE
-#define DECLTYPE(x)
-#endif
-#else /* GNU, Sun and other compilers */
-#define DECLTYPE(x) (__typeof(x))
-#endif
-
-#ifdef NO_DECLTYPE
-#define DECLTYPE_ASSIGN(dst,src) \
-do { \
- char **_da_dst = (char**)(&(dst)); \
- *_da_dst = (char*)(src); \
-} while(0)
-#else
-#define DECLTYPE_ASSIGN(dst,src) \
-do { \
- (dst) = DECLTYPE(dst)(src); \
-} while(0)
-#endif
-
-/* a number of the hash function use uint32_t which isn't defined on win32 */
-#ifdef _MSC_VER
-typedef unsigned int uint32_t;
-typedef unsigned char uint8_t;
-#else
-#include <inttypes.h> /* uint32_t */
-#endif
-
-#define UTHASH_VERSION 1.9.8
-
-#ifndef uthash_fatal
-#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */
-#endif
-#ifndef uthash_malloc
-#define uthash_malloc(sz) MPIU_Malloc(sz) /* malloc fcn */
-#endif
-#ifndef uthash_free
-#define uthash_free(ptr,sz) MPIU_Free(ptr) /* free fcn */
-#endif
-
-#ifndef uthash_noexpand_fyi
-#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
-#endif
-#ifndef uthash_expand_fyi
-#define uthash_expand_fyi(tbl) /* can be defined to log expands */
-#endif
-
-/* initial number of buckets */
-#define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */
-#define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */
-#define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */
-
-/* calculate the element whose hash handle address is hhe */
-#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
-
-#define HASH_FIND(hh,head,keyptr,keylen,out) \
-do { \
- unsigned _hf_bkt,_hf_hashv; \
- out=NULL; \
- if (head) { \
- HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \
- if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \
- HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \
- keyptr,keylen,out); \
- } \
- } \
-} while (0)
-
-#ifdef HASH_BLOOM
-#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM)
-#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0)
-#define HASH_BLOOM_MAKE(tbl) \
-do { \
- (tbl)->bloom_nbits = HASH_BLOOM; \
- (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \
- if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \
- memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \
- (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \
-} while (0)
-
-#define HASH_BLOOM_FREE(tbl) \
-do { \
- uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
-} while (0)
-
-#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8)))
-#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8)))
-
-#define HASH_BLOOM_ADD(tbl,hashv) \
- HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
-
-#define HASH_BLOOM_TEST(tbl,hashv) \
- HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
-
-#else
-#define HASH_BLOOM_MAKE(tbl)
-#define HASH_BLOOM_FREE(tbl)
-#define HASH_BLOOM_ADD(tbl,hashv)
-#define HASH_BLOOM_TEST(tbl,hashv) (1)
-#define HASH_BLOOM_BYTELEN 0
-#endif
-
-#define HASH_MAKE_TABLE(hh,head) \
-do { \
- (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \
- sizeof(UT_hash_table)); \
- if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \
- memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \
- (head)->hh.tbl->tail = &((head)->hh); \
- (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \
- (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \
- (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
- (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \
- HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
- if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \
- memset((head)->hh.tbl->buckets, 0, \
- HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
- HASH_BLOOM_MAKE((head)->hh.tbl); \
- (head)->hh.tbl->signature = HASH_SIGNATURE; \
-} while(0)
-
-#define HASH_ADD(hh,head,fieldname,keylen_in,add) \
- HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add)
-
-#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \
-do { \
- replaced=NULL; \
- HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \
- if (replaced!=NULL) { \
- HASH_DELETE(hh,head,replaced); \
- }; \
- HASH_ADD(hh,head,fieldname,keylen_in,add); \
-} while(0)
-
-#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
-do { \
- unsigned _ha_bkt; \
- (add)->hh.next = NULL; \
- (add)->hh.key = (char*)keyptr; \
- (add)->hh.keylen = (unsigned)keylen_in; \
- if (!(head)) { \
- head = (add); \
- (head)->hh.prev = NULL; \
- HASH_MAKE_TABLE(hh,head); \
- } else { \
- (head)->hh.tbl->tail->next = (add); \
- (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
- (head)->hh.tbl->tail = &((add)->hh); \
- } \
- (head)->hh.tbl->num_items++; \
- (add)->hh.tbl = (head)->hh.tbl; \
- HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \
- (add)->hh.hashv, _ha_bkt); \
- HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \
- HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \
- HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \
- HASH_FSCK(hh,head); \
-} while(0)
-
-#define HASH_TO_BKT( hashv, num_bkts, bkt ) \
-do { \
- bkt = ((hashv) & ((num_bkts) - 1)); \
-} while(0)
-
-/* delete "delptr" from the hash table.
- * "the usual" patch-up process for the app-order doubly-linked-list.
- * The use of _hd_hh_del below deserves special explanation.
- * These used to be expressed using (delptr) but that led to a bug
- * if someone used the same symbol for the head and deletee, like
- * HASH_DELETE(hh,users,users);
- * We want that to work, but by changing the head (users) below
- * we were forfeiting our ability to further refer to the deletee (users)
- * in the patch-up process. Solution: use scratch space to
- * copy the deletee pointer, then the latter references are via that
- * scratch pointer rather than through the repointed (users) symbol.
- */
-#define HASH_DELETE(hh,head,delptr) \
-do { \
- unsigned _hd_bkt; \
- struct UT_hash_handle *_hd_hh_del; \
- if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \
- uthash_free((head)->hh.tbl->buckets, \
- (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
- HASH_BLOOM_FREE((head)->hh.tbl); \
- uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
- head = NULL; \
- } else { \
- _hd_hh_del = &((delptr)->hh); \
- if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \
- (head)->hh.tbl->tail = \
- (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
- (head)->hh.tbl->hho); \
- } \
- if ((delptr)->hh.prev) { \
- ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
- (head)->hh.tbl->hho))->next = (delptr)->hh.next; \
- } else { \
- DECLTYPE_ASSIGN(head,(delptr)->hh.next); \
- } \
- if (_hd_hh_del->next) { \
- ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \
- (head)->hh.tbl->hho))->prev = \
- _hd_hh_del->prev; \
- } \
- HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
- HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
- (head)->hh.tbl->num_items--; \
- } \
- HASH_FSCK(hh,head); \
-} while (0)
-
-
-/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
-#define HASH_FIND_STR(head,findstr,out) \
- HASH_FIND(hh,head,findstr,strlen(findstr),out)
-#define HASH_ADD_STR(head,strfield,add) \
- HASH_ADD(hh,head,strfield,strlen(add->strfield),add)
-#define HASH_REPLACE_STR(head,strfield,add,replaced) \
- HASH_REPLACE(hh,head,strfield,strlen(add->strfield),add,replaced)
-#define HASH_FIND_INT(head,findint,out) \
- HASH_FIND(hh,head,findint,sizeof(int),out)
-#define HASH_ADD_INT(head,intfield,add) \
- HASH_ADD(hh,head,intfield,sizeof(int),add)
-#define HASH_REPLACE_INT(head,intfield,add,replaced) \
- HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
-#define HASH_FIND_PTR(head,findptr,out) \
- HASH_FIND(hh,head,findptr,sizeof(void *),out)
-#define HASH_ADD_PTR(head,ptrfield,add) \
- HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
-#define HASH_REPLACE_PTR(head,ptrfield,add) \
- HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
-#define HASH_DEL(head,delptr) \
- HASH_DELETE(hh,head,delptr)
-
-/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
- * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
- */
-#ifdef HASH_DEBUG
-#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
-#define HASH_FSCK(hh,head) \
-do { \
- unsigned _bkt_i; \
- unsigned _count, _bkt_count; \
- char *_prev; \
- struct UT_hash_handle *_thh; \
- if (head) { \
- _count = 0; \
- for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \
- _bkt_count = 0; \
- _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
- _prev = NULL; \
- while (_thh) { \
- if (_prev != (char*)(_thh->hh_prev)) { \
- HASH_OOPS("invalid hh_prev %p, actual %p\n", \
- _thh->hh_prev, _prev ); \
- } \
- _bkt_count++; \
- _prev = (char*)(_thh); \
- _thh = _thh->hh_next; \
- } \
- _count += _bkt_count; \
- if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
- HASH_OOPS("invalid bucket count %d, actual %d\n", \
- (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
- } \
- } \
- if (_count != (head)->hh.tbl->num_items) { \
- HASH_OOPS("invalid hh item count %d, actual %d\n", \
- (head)->hh.tbl->num_items, _count ); \
- } \
- /* traverse hh in app order; check next/prev integrity, count */ \
- _count = 0; \
- _prev = NULL; \
- _thh = &(head)->hh; \
- while (_thh) { \
- _count++; \
- if (_prev !=(char*)(_thh->prev)) { \
- HASH_OOPS("invalid prev %p, actual %p\n", \
- _thh->prev, _prev ); \
- } \
- _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \
- _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \
- (head)->hh.tbl->hho) : NULL ); \
- } \
- if (_count != (head)->hh.tbl->num_items) { \
- HASH_OOPS("invalid app item count %d, actual %d\n", \
- (head)->hh.tbl->num_items, _count ); \
- } \
- } \
-} while (0)
-#else
-#define HASH_FSCK(hh,head)
-#endif
-
-/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
- * the descriptor to which this macro is defined for tuning the hash function.
- * The app can #include <unistd.h> to get the prototype for write(2). */
-#ifdef HASH_EMIT_KEYS
-#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
-do { \
- unsigned _klen = fieldlen; \
- write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
- write(HASH_EMIT_KEYS, keyptr, fieldlen); \
-} while (0)
-#else
-#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
-#endif
-
-/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
-#ifdef HASH_FUNCTION
-#define HASH_FCN HASH_FUNCTION
-#else
-#define HASH_FCN HASH_JEN
-#endif
-
-/* The Bernstein hash function, used in Perl prior to v5.6 */
-#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \
-do { \
- unsigned _hb_keylen=keylen; \
- char *_hb_key=(char*)(key); \
- (hashv) = 0; \
- while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \
- bkt = (hashv) & (num_bkts-1); \
-} while (0)
-
-
-/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
- * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
-#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \
-do { \
- unsigned _sx_i; \
- char *_hs_key=(char*)(key); \
- hashv = 0; \
- for(_sx_i=0; _sx_i < keylen; _sx_i++) \
- hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
- bkt = hashv & (num_bkts-1); \
-} while (0)
-
-#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \
-do { \
- unsigned _fn_i; \
- char *_hf_key=(char*)(key); \
- hashv = 2166136261UL; \
- for(_fn_i=0; _fn_i < keylen; _fn_i++) \
- hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \
- bkt = hashv & (num_bkts-1); \
-} while(0)
-
-#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \
-do { \
- unsigned _ho_i; \
- char *_ho_key=(char*)(key); \
- hashv = 0; \
- for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
- hashv += _ho_key[_ho_i]; \
- hashv += (hashv << 10); \
- hashv ^= (hashv >> 6); \
- } \
- hashv += (hashv << 3); \
- hashv ^= (hashv >> 11); \
- hashv += (hashv << 15); \
- bkt = hashv & (num_bkts-1); \
-} while(0)
-
-#define HASH_JEN_MIX(a,b,c) \
-do { \
- a -= b; a -= c; a ^= ( c >> 13 ); \
- b -= c; b -= a; b ^= ( a << 8 ); \
- c -= a; c -= b; c ^= ( b >> 13 ); \
- a -= b; a -= c; a ^= ( c >> 12 ); \
- b -= c; b -= a; b ^= ( a << 16 ); \
- c -= a; c -= b; c ^= ( b >> 5 ); \
- a -= b; a -= c; a ^= ( c >> 3 ); \
- b -= c; b -= a; b ^= ( a << 10 ); \
- c -= a; c -= b; c ^= ( b >> 15 ); \
-} while (0)
-
-#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \
-do { \
- unsigned _hj_i,_hj_j,_hj_k; \
- unsigned char *_hj_key=(unsigned char*)(key); \
- hashv = 0xfeedbeef; \
- _hj_i = _hj_j = 0x9e3779b9; \
- _hj_k = (unsigned)keylen; \
- while (_hj_k >= 12) { \
- _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
- + ( (unsigned)_hj_key[2] << 16 ) \
- + ( (unsigned)_hj_key[3] << 24 ) ); \
- _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
- + ( (unsigned)_hj_key[6] << 16 ) \
- + ( (unsigned)_hj_key[7] << 24 ) ); \
- hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
- + ( (unsigned)_hj_key[10] << 16 ) \
- + ( (unsigned)_hj_key[11] << 24 ) ); \
- \
- HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
- \
- _hj_key += 12; \
- _hj_k -= 12; \
- } \
- hashv += keylen; \
- switch ( _hj_k ) { \
- case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \
- case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \
- case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \
- case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \
- case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \
- case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \
- case 5: _hj_j += _hj_key[4]; \
- case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \
- case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \
- case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \
- case 1: _hj_i += _hj_key[0]; \
- } \
- HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
- bkt = hashv & (num_bkts-1); \
-} while(0)
-
-/* The Paul Hsieh hash function */
-#undef get16bits
-#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
- || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
-#define get16bits(d) (*((const uint16_t *) (d)))
-#endif
-
-#if !defined (get16bits)
-#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
- +(uint32_t)(((const uint8_t *)(d))[0]) )
-#endif
-#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
-do { \
- unsigned char *_sfh_key=(unsigned char*)(key); \
- uint32_t _sfh_tmp, _sfh_len = keylen; \
- \
- int _sfh_rem = _sfh_len & 3; \
- _sfh_len >>= 2; \
- hashv = 0xcafebabe; \
- \
- /* Main loop */ \
- for (;_sfh_len > 0; _sfh_len--) { \
- hashv += get16bits (_sfh_key); \
- _sfh_tmp = (uint32_t)(get16bits (_sfh_key+2)) << 11 ^ hashv; \
- hashv = (hashv << 16) ^ _sfh_tmp; \
- _sfh_key += 2*sizeof (uint16_t); \
- hashv += hashv >> 11; \
- } \
- \
- /* Handle end cases */ \
- switch (_sfh_rem) { \
- case 3: hashv += get16bits (_sfh_key); \
- hashv ^= hashv << 16; \
- hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)] << 18); \
- hashv += hashv >> 11; \
- break; \
- case 2: hashv += get16bits (_sfh_key); \
- hashv ^= hashv << 11; \
- hashv += hashv >> 17; \
- break; \
- case 1: hashv += *_sfh_key; \
- hashv ^= hashv << 10; \
- hashv += hashv >> 1; \
- } \
- \
- /* Force "avalanching" of final 127 bits */ \
- hashv ^= hashv << 3; \
- hashv += hashv >> 5; \
- hashv ^= hashv << 4; \
- hashv += hashv >> 17; \
- hashv ^= hashv << 25; \
- hashv += hashv >> 6; \
- bkt = hashv & (num_bkts-1); \
-} while(0)
-
-#ifdef HASH_USING_NO_STRICT_ALIASING
-/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
- * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
- * MurmurHash uses the faster approach only on CPU's where we know it's safe.
- *
- * Note the preprocessor built-in defines can be emitted using:
- *
- * gcc -m64 -dM -E - < /dev/null (on gcc)
- * cc -## a.c (where a.c is a simple test file) (Sun Studio)
- */
-#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))
-#define MUR_GETBLOCK(p,i) p[i]
-#else /* non intel */
-#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0)
-#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1)
-#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2)
-#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3)
-#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
-#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
-#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
-#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
-#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8))
-#else /* assume little endian non-intel */
-#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
-#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
-#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8))
-#endif
-#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \
- (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \
- (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \
- MUR_ONE_THREE(p))))
-#endif
-#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
-#define MUR_FMIX(_h) \
-do { \
- _h ^= _h >> 16; \
- _h *= 0x85ebca6b; \
- _h ^= _h >> 13; \
- _h *= 0xc2b2ae35l; \
- _h ^= _h >> 16; \
-} while(0)
-
-#define HASH_MUR(key,keylen,num_bkts,hashv,bkt) \
-do { \
- const uint8_t *_mur_data = (const uint8_t*)(key); \
- const int _mur_nblocks = (keylen) / 4; \
- uint32_t _mur_h1 = 0xf88D5353; \
- uint32_t _mur_c1 = 0xcc9e2d51; \
- uint32_t _mur_c2 = 0x1b873593; \
- uint32_t _mur_k1 = 0; \
- const uint8_t *_mur_tail; \
- const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \
- int _mur_i; \
- for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) { \
- _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \
- _mur_k1 *= _mur_c1; \
- _mur_k1 = MUR_ROTL32(_mur_k1,15); \
- _mur_k1 *= _mur_c2; \
- \
- _mur_h1 ^= _mur_k1; \
- _mur_h1 = MUR_ROTL32(_mur_h1,13); \
- _mur_h1 = _mur_h1*5+0xe6546b64; \
- } \
- _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \
- _mur_k1=0; \
- switch((keylen) & 3) { \
- case 3: _mur_k1 ^= _mur_tail[2] << 16; \
- case 2: _mur_k1 ^= _mur_tail[1] << 8; \
- case 1: _mur_k1 ^= _mur_tail[0]; \
- _mur_k1 *= _mur_c1; \
- _mur_k1 = MUR_ROTL32(_mur_k1,15); \
- _mur_k1 *= _mur_c2; \
- _mur_h1 ^= _mur_k1; \
- } \
- _mur_h1 ^= (keylen); \
- MUR_FMIX(_mur_h1); \
- hashv = _mur_h1; \
- bkt = hashv & (num_bkts-1); \
-} while(0)
-#endif /* HASH_USING_NO_STRICT_ALIASING */
-
-/* key comparison function; return 0 if keys equal */
-#define HASH_KEYCMP(a,b,len) memcmp(a,b,len)
-
-/* iterate over items in a known bucket to find desired item */
-#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \
-do { \
- if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \
- else out=NULL; \
- while (out) { \
- if ((out)->hh.keylen == keylen_in) { \
- if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break; \
- } \
- if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \
- else out = NULL; \
- } \
-} while(0)
-
-/* add an item to a bucket */
-#define HASH_ADD_TO_BKT(head,addhh) \
-do { \
- head.count++; \
- (addhh)->hh_next = head.hh_head; \
- (addhh)->hh_prev = NULL; \
- if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \
- (head).hh_head=addhh; \
- if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \
- && (addhh)->tbl->noexpand != 1) { \
- HASH_EXPAND_BUCKETS((addhh)->tbl); \
- } \
-} while(0)
-
-/* remove an item from a given bucket */
-#define HASH_DEL_IN_BKT(hh,head,hh_del) \
- (head).count--; \
- if ((head).hh_head == hh_del) { \
- (head).hh_head = hh_del->hh_next; \
- } \
- if (hh_del->hh_prev) { \
- hh_del->hh_prev->hh_next = hh_del->hh_next; \
- } \
- if (hh_del->hh_next) { \
- hh_del->hh_next->hh_prev = hh_del->hh_prev; \
- }
-
-/* Bucket expansion has the effect of doubling the number of buckets
- * and redistributing the items into the new buckets. Ideally the
- * items will distribute more or less evenly into the new buckets
- * (the extent to which this is true is a measure of the quality of
- * the hash function as it applies to the key domain).
- *
- * With the items distributed into more buckets, the chain length
- * (item count) in each bucket is reduced. Thus by expanding buckets
- * the hash keeps a bound on the chain length. This bounded chain
- * length is the essence of how a hash provides constant time lookup.
- *
- * The calculation of tbl->ideal_chain_maxlen below deserves some
- * explanation. First, keep in mind that we're calculating the ideal
- * maximum chain length based on the *new* (doubled) bucket count.
- * In fractions this is just n/b (n=number of items,b=new num buckets).
- * Since the ideal chain length is an integer, we want to calculate
- * ceil(n/b). We don't depend on floating point arithmetic in this
- * hash, so to calculate ceil(n/b) with integers we could write
- *
- * ceil(n/b) = (n/b) + ((n%b)?1:0)
- *
- * and in fact a previous version of this hash did just that.
- * But now we have improved things a bit by recognizing that b is
- * always a power of two. We keep its base 2 log handy (call it lb),
- * so now we can write this with a bit shift and logical AND:
- *
- * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
- *
- */
-#define HASH_EXPAND_BUCKETS(tbl) \
-do { \
- unsigned _he_bkt; \
- unsigned _he_bkt_i; \
- struct UT_hash_handle *_he_thh, *_he_hh_nxt; \
- UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
- _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \
- 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
- if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \
- memset(_he_new_buckets, 0, \
- 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
- tbl->ideal_chain_maxlen = \
- (tbl->num_items >> (tbl->log2_num_buckets+1)) + \
- ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \
- tbl->nonideal_items = 0; \
- for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \
- { \
- _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \
- while (_he_thh) { \
- _he_hh_nxt = _he_thh->hh_next; \
- HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \
- _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \
- if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \
- tbl->nonideal_items++; \
- _he_newbkt->expand_mult = _he_newbkt->count / \
- tbl->ideal_chain_maxlen; \
- } \
- _he_thh->hh_prev = NULL; \
- _he_thh->hh_next = _he_newbkt->hh_head; \
- if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \
- _he_thh; \
- _he_newbkt->hh_head = _he_thh; \
- _he_thh = _he_hh_nxt; \
- } \
- } \
- uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
- tbl->num_buckets *= 2; \
- tbl->log2_num_buckets++; \
- tbl->buckets = _he_new_buckets; \
- tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \
- (tbl->ineff_expands+1) : 0; \
- if (tbl->ineff_expands > 1) { \
- tbl->noexpand=1; \
- uthash_noexpand_fyi(tbl); \
- } \
- uthash_expand_fyi(tbl); \
-} while(0)
-
-
-/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
-/* Note that HASH_SORT assumes the hash handle name to be hh.
- * HASH_SRT was added to allow the hash handle name to be passed in. */
-#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
-#define HASH_SRT(hh,head,cmpfcn) \
-do { \
- unsigned _hs_i; \
- unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
- struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
- if (head) { \
- _hs_insize = 1; \
- _hs_looping = 1; \
- _hs_list = &((head)->hh); \
- while (_hs_looping) { \
- _hs_p = _hs_list; \
- _hs_list = NULL; \
- _hs_tail = NULL; \
- _hs_nmerges = 0; \
- while (_hs_p) { \
- _hs_nmerges++; \
- _hs_q = _hs_p; \
- _hs_psize = 0; \
- for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \
- _hs_psize++; \
- _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
- ((void*)((char*)(_hs_q->next) + \
- (head)->hh.tbl->hho)) : NULL); \
- if (! (_hs_q) ) break; \
- } \
- _hs_qsize = _hs_insize; \
- while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \
- if (_hs_psize == 0) { \
- _hs_e = _hs_q; \
- _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
- ((void*)((char*)(_hs_q->next) + \
- (head)->hh.tbl->hho)) : NULL); \
- _hs_qsize--; \
- } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \
- _hs_e = _hs_p; \
- _hs_p = (UT_hash_handle*)((_hs_p->next) ? \
- ((void*)((char*)(_hs_p->next) + \
- (head)->hh.tbl->hho)) : NULL); \
- _hs_psize--; \
- } else if (( \
- cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \
- DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \
- ) <= 0) { \
- _hs_e = _hs_p; \
- _hs_p = (UT_hash_handle*)((_hs_p->next) ? \
- ((void*)((char*)(_hs_p->next) + \
- (head)->hh.tbl->hho)) : NULL); \
- _hs_psize--; \
- } else { \
- _hs_e = _hs_q; \
- _hs_q = (UT_hash_handle*)((_hs_q->next) ? \
- ((void*)((char*)(_hs_q->next) + \
- (head)->hh.tbl->hho)) : NULL); \
- _hs_qsize--; \
- } \
- if ( _hs_tail ) { \
- _hs_tail->next = ((_hs_e) ? \
- ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \
- } else { \
- _hs_list = _hs_e; \
- } \
- _hs_e->prev = ((_hs_tail) ? \
- ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \
- _hs_tail = _hs_e; \
- } \
- _hs_p = _hs_q; \
- } \
- _hs_tail->next = NULL; \
- if ( _hs_nmerges <= 1 ) { \
- _hs_looping=0; \
- (head)->hh.tbl->tail = _hs_tail; \
- DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
- } \
- _hs_insize *= 2; \
- } \
- HASH_FSCK(hh,head); \
- } \
-} while (0)
-
-/* This function selects items from one hash into another hash.
- * The end result is that the selected items have dual presence
- * in both hashes. There is no copy of the items made; rather
- * they are added into the new hash through a secondary hash
- * hash handle that must be present in the structure. */
-#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
-do { \
- unsigned _src_bkt, _dst_bkt; \
- void *_last_elt=NULL, *_elt; \
- UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
- ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
- if (src) { \
- for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
- for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
- _src_hh; \
- _src_hh = _src_hh->hh_next) { \
- _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
- if (cond(_elt)) { \
- _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \
- _dst_hh->key = _src_hh->key; \
- _dst_hh->keylen = _src_hh->keylen; \
- _dst_hh->hashv = _src_hh->hashv; \
- _dst_hh->prev = _last_elt; \
- _dst_hh->next = NULL; \
- if (_last_elt_hh) { _last_elt_hh->next = _elt; } \
- if (!dst) { \
- DECLTYPE_ASSIGN(dst,_elt); \
- HASH_MAKE_TABLE(hh_dst,dst); \
- } else { \
- _dst_hh->tbl = (dst)->hh_dst.tbl; \
- } \
- HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
- HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \
- (dst)->hh_dst.tbl->num_items++; \
- _last_elt = _elt; \
- _last_elt_hh = _dst_hh; \
- } \
- } \
- } \
- } \
- HASH_FSCK(hh_dst,dst); \
-} while (0)
-
-#define HASH_CLEAR(hh,head) \
-do { \
- if (head) { \
- uthash_free((head)->hh.tbl->buckets, \
- (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
- HASH_BLOOM_FREE((head)->hh.tbl); \
- uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
- (head)=NULL; \
- } \
-} while(0)
-
-#define HASH_OVERHEAD(hh,head) \
- (size_t)((((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
- ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
- (sizeof(UT_hash_table)) + \
- (HASH_BLOOM_BYTELEN)))
-
-#ifdef NO_DECLTYPE
-#define HASH_ITER(hh,head,el,tmp) \
-for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \
- el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL))
-#else
-#define HASH_ITER(hh,head,el,tmp) \
-for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \
- el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL))
-#endif
-
-/* obtain a count of items in the hash */
-#define HASH_COUNT(head) HASH_CNT(hh,head)
-#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0)
-
-typedef struct UT_hash_bucket {
- struct UT_hash_handle *hh_head;
- unsigned count;
-
- /* expand_mult is normally set to 0. In this situation, the max chain length
- * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
- * the bucket's chain exceeds this length, bucket expansion is triggered).
- * However, setting expand_mult to a non-zero value delays bucket expansion
- * (that would be triggered by additions to this particular bucket)
- * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
- * (The multiplier is simply expand_mult+1). The whole idea of this
- * multiplier is to reduce bucket expansions, since they are expensive, in
- * situations where we know that a particular bucket tends to be overused.
- * It is better to let its chain length grow to a longer yet-still-bounded
- * value, than to do an O(n) bucket expansion too often.
- */
- unsigned expand_mult;
-
-} UT_hash_bucket;
-
-/* random signature used only to find hash tables in external analysis */
-#define HASH_SIGNATURE 0xa0111fe1
-#define HASH_BLOOM_SIGNATURE 0xb12220f2
-
-typedef struct UT_hash_table {
- UT_hash_bucket *buckets;
- unsigned num_buckets, log2_num_buckets;
- unsigned num_items;
- struct UT_hash_handle *tail; /* tail hh in app order, for fast append */
- ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
-
- /* in an ideal situation (all buckets used equally), no bucket would have
- * more than ceil(#items/#buckets) items. that's the ideal chain length. */
- unsigned ideal_chain_maxlen;
-
- /* nonideal_items is the number of items in the hash whose chain position
- * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
- * hash distribution; reaching them in a chain traversal takes >ideal steps */
- unsigned nonideal_items;
-
- /* ineffective expands occur when a bucket doubling was performed, but
- * afterward, more than half the items in the hash had nonideal chain
- * positions. If this happens on two consecutive expansions we inhibit any
- * further expansion, as it's not helping; this happens when the hash
- * function isn't a good fit for the key domain. When expansion is inhibited
- * the hash will still work, albeit no longer in constant time. */
- unsigned ineff_expands, noexpand;
-
- uint32_t signature; /* used only to find hash tables in external analysis */
-#ifdef HASH_BLOOM
- uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
- uint8_t *bloom_bv;
- char bloom_nbits;
-#endif
-
-} UT_hash_table;
-
-typedef struct UT_hash_handle {
- struct UT_hash_table *tbl;
- void *prev; /* prev element in app order */
- void *next; /* next element in app order */
- struct UT_hash_handle *hh_prev; /* previous hh in bucket order */
- struct UT_hash_handle *hh_next; /* next hh in bucket order */
- void *key; /* ptr to enclosing struct's key */
- unsigned keylen; /* enclosing struct's key len */
- unsigned hashv; /* result of hash-fcn(key) */
-} UT_hash_handle;
-
-#endif /* UTHASH_H */
diff --git a/src/include/mpiutil.h b/src/include/mpiutil.h
deleted file mode 100644
index 18937de..0000000
--- a/src/include/mpiutil.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#if !defined(MPIUTIL_H_INCLUDED)
-#define MPIUTIL_H_INCLUDED
-
-#include "mpiu_strerror.h"
-#include "mpiu_thread.h"
-#include "mpiu_type_defs.h"
-#include "mpidbg.h"
-#include "mpiassert.h"
-#include "mpiu_timer.h"
-#include "mpiu_pointer.h"
-
-#endif /* !defined(MPIUTIL_H_INCLUDED) */
diff --git a/src/include/oputil.h b/src/include/oputil.h
deleted file mode 100644
index 0a6f23f..0000000
--- a/src/include/oputil.h
+++ /dev/null
@@ -1,375 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2009 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef OPUTIL_H_INCLUDED
-#define OPUTIL_H_INCLUDED
-
-/* The MPI Standard (MPI-2.1, sec 5.9.2) defines which predfined reduction
- operators are valid by groups of types:
- C integer
- Fortran integer
- Floating point
- Logical
- Complex
- Byte
-
- We define an "x-macro" for each type group. Immediately prior to
- instantiating any of these macros you should define a valid
- MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_). The primary use for this
- is to expand a given group's list into a sequence of case statements. The
- macro MPIR_OP_TYPE_REDUCE_CASE is available as a convenience to generate a
- case block that performs a reduction with the given operator. */
-
-#if 0 /* sample usage: */
-#undef MPIR_OP_TYPE_MACRO
-#define MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_REDUCE_CASE(mpi_type_,c_type_,MPIR_MAX)
-/* or */
-#define MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_) case (mpi_type_):
-
-MPIR_OP_TYPE_GROUP(C_INTEGER)
-MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER)
-#undef MPIR_OP_TYPE_MACRO
-#endif
-
-
-/* op_macro_ is a 2-arg macro or function that preforms the reduction
- operation on a single element */
-/* FIXME: This code may penalize the performance on many platforms as
- a work-around for a compiler bug in some versions of xlc. It
- would be far better to either test for that bug or to confirm that
- the work-around is really as benign as claimed. */
-/* Ideally "b" would be const, but xlc on POWER7 can't currently handle
- * "const long double _Complex * restrict" as a valid pointer type. It just
- * emits a warning and generates invalid arithmetic code. We could drop the
- * restrict instead, but we are more likely to get an optimization from it than
- * const. [goodell@ 2010-12-15] */
-#define MPIR_OP_TYPE_REDUCE_CASE(mpi_type_,c_type_,op_macro_) \
- case (mpi_type_): { \
- c_type_ * restrict a = (c_type_ *)inoutvec; \
- /*const*/ c_type_ * restrict b = (c_type_ *)invec; \
- for ( i=0; i<len; i++ ) \
- a[i] = op_macro_(a[i],b[i]); \
- break; \
- }
-
-/* helps enforce consistent naming */
-#define MPIR_OP_TYPE_GROUP(group) MPIR_OP_TYPE_GROUP_##group
-
-/* -------------------------------------------------------------------- */
-/* These macros are used to disable non-existent types. They evaluate to
- nothing if the particular feature test is false, otherwise they evaluate to
- the standard macro to be expanded like any other type. */
-
-/* first define all wrapper macros as empty for possibly non-existent types */
-#define MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_CXX(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INT8_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INT16_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INT32_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_INT64_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_UINT8_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_UINT16_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_UINT32_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_UINT64_T(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_C_BOOL(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_)
-#define MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_)
-
-/* then redefine them to be valid based on other preprocessor definitions */
-#if defined(HAVE_FORTRAN_BINDING)
-# undef MPIR_OP_TYPE_MACRO_HAVE_FORTRAN
-# undef MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8
-# undef MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16
-# define MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-/* These two shouldn't really be gated on HAVE_FORTRAN_BINDING alone. There
- should instead be an individual test like HAVE_LONG_DOUBLE, etc. */
-# define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-# define MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-#if defined(HAVE_LONG_LONG_INT)
-# undef MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG
-# define MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-#if defined(HAVE_LONG_DOUBLE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE
-# define MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* Fortran fixed width integer type support */
-#if defined(MPIR_INTEGER1_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(MPIR_INTEGER2_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(MPIR_INTEGER4_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(MPIR_INTEGER8_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(MPIR_INTEGER16_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* Fortran fixed width floating point type support */
-#if defined(MPIR_REAL4_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(MPIR_REAL8_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(MPIR_REAL16_CTYPE)
-# undef MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE
-# define MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* general C++ types */
-#if defined(HAVE_CXX_BINDING)
-# undef MPIR_OP_TYPE_MACRO_HAVE_CXX
-# define MPIR_OP_TYPE_MACRO_HAVE_CXX(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* C++ complex types */
-#if defined(HAVE_CXX_COMPLEX)
-# undef MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX
-# define MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-/* also test against MPI_DATATYPE_NULL for extra safety, 0x0c000000 is the uncasted value. */
-#if defined(HAVE_CXX_COMPLEX) && (MPIR_CXX_LONG_DOUBLE_COMPLEX_VALUE != 0x0c000000)
-# undef MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX
-# define MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* C99 fixed-width types */
-#if defined(HAVE_INT8_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INT8_T
-# define MPIR_OP_TYPE_MACRO_HAVE_INT8_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_INT16_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INT16_T
-# define MPIR_OP_TYPE_MACRO_HAVE_INT16_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_INT32_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INT32_T
-# define MPIR_OP_TYPE_MACRO_HAVE_INT32_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_INT64_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_INT64_T
-# define MPIR_OP_TYPE_MACRO_HAVE_INT64_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_UINT8_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_UINT8_T
-# define MPIR_OP_TYPE_MACRO_HAVE_UINT8_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_UINT16_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_UINT16_T
-# define MPIR_OP_TYPE_MACRO_HAVE_UINT16_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_UINT32_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_UINT32_T
-# define MPIR_OP_TYPE_MACRO_HAVE_UINT32_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_UINT64_T)
-# undef MPIR_OP_TYPE_MACRO_HAVE_UINT64_T
-# define MPIR_OP_TYPE_MACRO_HAVE_UINT64_T(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* C boolean */
-#if defined(HAVE__BOOL)
-#undef MPIR_OP_TYPE_MACRO_HAVE_C_BOOL
-#define MPIR_OP_TYPE_MACRO_HAVE_C_BOOL(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* C complex types */
-/* Add another layer of indirection and make all of these macros evaluate to a
- common MPIR_OP_C_COMPLEX_TYPE_MACRO macro which in turn evaluates to the
- standard MPIR_OP_TYPE_MACRO. This lets us override behavior for these
- natively handled types with a single macro redefinition instead of 3. */
-#undef MPIR_OP_C_COMPLEX_TYPE_MACRO
-#define MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#if defined(HAVE_FLOAT__COMPLEX)
-# undef MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX
-# define MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_DOUBLE__COMPLEX)
-# undef MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX
-# define MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-#if defined(HAVE_LONG_DOUBLE__COMPLEX)
-# undef MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX
-# define MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX(mpi_type_,c_type_,type_name_) MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_)
-#endif
-
-/* C types needed to support some of the complex types.
-
- FIXME These are a hack in most cases, but they seem to work in practice
- and it's what we were doing prior to the oputil.h refactoring. */
-typedef struct {
- float re;
- float im;
-} s_complex;
-
-#if defined(HAVE_FORTRAN_BINDING)
-typedef struct {
- MPIR_FC_REAL_CTYPE re;
- MPIR_FC_REAL_CTYPE im;
-} s_fc_complex;
-
-typedef struct {
- MPIR_FC_DOUBLE_CTYPE re;
- MPIR_FC_DOUBLE_CTYPE im;
-} d_fc_complex;
-#endif
-
-typedef struct {
- double re;
- double im;
-} d_complex;
-
-#if defined(HAVE_LONG_DOUBLE)
-typedef struct {
- long double re;
- long double im;
-} ld_complex;
-#endif
-
-/* -------------------------------------------------------------------- */
-/* type group macros
-
- Implementation note: it is important that no MPI type show up more than once
- among all the lists. Otherwise it will be easy to end up with two case
- statements with the same value, which is erroneous in C. Duplicate C types
- in this list are not a problem. */
-
-/* c integer group */
-#define MPIR_OP_TYPE_GROUP_C_INTEGER \
- MPIR_OP_TYPE_MACRO(MPI_INT, int, mpir_typename_int) \
- MPIR_OP_TYPE_MACRO(MPI_LONG, long, mpir_typename_long) \
- MPIR_OP_TYPE_MACRO(MPI_SHORT, short, mpir_typename_short) \
- MPIR_OP_TYPE_MACRO(MPI_UNSIGNED_SHORT, unsigned short, mpir_typename_unsigned_short) \
- MPIR_OP_TYPE_MACRO(MPI_UNSIGNED, unsigned, mpir_typename_unsigned) \
- MPIR_OP_TYPE_MACRO(MPI_UNSIGNED_LONG, unsigned long, mpir_typename_unsigned_long) \
- MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(MPI_LONG_LONG, long long, mpir_typename_long_long) \
- MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(MPI_UNSIGNED_LONG_LONG, unsigned long long, mpir_typename_unsigned_long_long) \
- MPIR_OP_TYPE_MACRO(MPI_SIGNED_CHAR, signed char, mpir_typename_signed_char) \
- MPIR_OP_TYPE_MACRO(MPI_UNSIGNED_CHAR, unsigned char, mpir_typename_unsigned_char) \
- MPIR_OP_TYPE_MACRO_HAVE_INT8_T(MPI_INT8_T, int8_t, mpir_typename_int8_t) \
- MPIR_OP_TYPE_MACRO_HAVE_INT16_T(MPI_INT16_T, int16_t, mpir_typename_int16_t) \
- MPIR_OP_TYPE_MACRO_HAVE_INT32_T(MPI_INT32_T, int32_t, mpir_typename_int32_t) \
- MPIR_OP_TYPE_MACRO_HAVE_INT64_T(MPI_INT64_T, int64_t, mpir_typename_int64_t) \
- MPIR_OP_TYPE_MACRO_HAVE_UINT8_T(MPI_UINT8_T, uint8_t, mpir_typename_uint8_t) \
- MPIR_OP_TYPE_MACRO_HAVE_UINT16_T(MPI_UINT16_T, uint16_t, mpir_typename_uint16_t) \
- MPIR_OP_TYPE_MACRO_HAVE_UINT32_T(MPI_UINT32_T, uint32_t, mpir_typename_uint32_t) \
- MPIR_OP_TYPE_MACRO_HAVE_UINT64_T(MPI_UINT64_T, uint64_t, mpir_typename_uint64_t) \
-/* The MPI Standard doesn't include these types in the C integer group for
- predefined operations but MPICH supports them when possible. */
-#define MPIR_OP_TYPE_GROUP_C_INTEGER_EXTRA \
- MPIR_OP_TYPE_MACRO(MPI_CHAR, char, mpir_typename_char)
-
-/* fortran integer group */
-#define MPIR_OP_TYPE_GROUP_FORTRAN_INTEGER \
- MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_INTEGER, MPI_Fint, mpir_typename_integer) \
- MPIR_OP_TYPE_MACRO(MPI_AINT, MPI_Aint, mpir_typename_aint) \
- MPIR_OP_TYPE_MACRO(MPI_OFFSET, MPI_Offset, mpir_typename_offset) \
- MPIR_OP_TYPE_MACRO(MPI_COUNT, MPI_Count, mpir_typename_count)
-/* The MPI Standard doesn't include these types in the Fortran integer group for
- predefined operations but MPICH supports them when possible. */
-#define MPIR_OP_TYPE_GROUP_FORTRAN_INTEGER_EXTRA \
- MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_CHARACTER, char, mpir_typename_character) \
- MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE(MPI_INTEGER1, MPIR_INTEGER1_CTYPE, mpir_typename_integer1) \
- MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE(MPI_INTEGER2, MPIR_INTEGER2_CTYPE, mpir_typename_integer2) \
- MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE(MPI_INTEGER4, MPIR_INTEGER4_CTYPE, mpir_typename_integer4) \
- MPIR_OP_TYPE_MACRO_HAVE_INTEGER8_CTYPE(MPI_INTEGER8, MPIR_INTEGER8_CTYPE, mpir_typename_integer8) \
- MPIR_OP_TYPE_MACRO_HAVE_INTEGER16_CTYPE(MPI_INTEGER16, MPIR_INTEGER16_CTYPE, mpir_typename_integer16)
-
-/* floating point group */
-/* FIXME: REAL need not be float, nor DOUBLE_PRECISION be double.
- Fortran types are not synonyms for the C types */
-#define MPIR_OP_TYPE_GROUP_FLOATING_POINT \
- MPIR_OP_TYPE_MACRO(MPI_FLOAT, float, mpir_typename_float) \
- MPIR_OP_TYPE_MACRO(MPI_DOUBLE, double, mpir_typename_double) \
- MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_REAL, MPIR_FC_REAL_CTYPE, mpir_typename_real) \
- MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_DOUBLE_PRECISION, MPIR_FC_DOUBLE_CTYPE, mpir_typename_double_precision) \
- MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE(MPI_LONG_DOUBLE, long double, mpir_typename_long_double) \
-/* The MPI Standard doesn't include these types in the floating point group for
- predefined operations but MPICH supports them when possible. */
-#define MPIR_OP_TYPE_GROUP_FLOATING_POINT_EXTRA \
- MPIR_OP_TYPE_MACRO_HAVE_REAL4_CTYPE(MPI_REAL4, MPIR_REAL4_CTYPE, mpir_typename_real4) \
- MPIR_OP_TYPE_MACRO_HAVE_REAL8_CTYPE(MPI_REAL8, MPIR_REAL8_CTYPE, mpir_typename_real8) \
- MPIR_OP_TYPE_MACRO_HAVE_REAL16_CTYPE(MPI_REAL16, MPIR_REAL16_CTYPE, mpir_typename_real16)
-
-/* logical group */
-/* FIXME Is MPI_Fint really OK here? */
-#define MPIR_OP_TYPE_GROUP_LOGICAL \
- MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_LOGICAL, MPI_Fint, mpir_typename_logical) \
- MPIR_OP_TYPE_MACRO_HAVE_C_BOOL(MPI_C_BOOL, _Bool, mpir_typename_c_bool) \
- MPIR_OP_TYPE_MACRO_HAVE_CXX(MPIR_CXX_BOOL_VALUE, MPIR_CXX_BOOL_CTYPE, mpir_typename_cxx_bool_value)
-#define MPIR_OP_TYPE_GROUP_LOGICAL_EXTRA /* empty, provided for consistency */
-
-/* complex group */
-#define MPIR_OP_TYPE_GROUP_COMPLEX \
- MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_COMPLEX, s_fc_complex, mpir_typename_complex) \
- MPIR_OP_TYPE_MACRO_HAVE_C_FLOAT_COMPLEX(MPI_C_FLOAT_COMPLEX, float _Complex, mpir_typename_c_float_complex) \
- MPIR_OP_TYPE_MACRO_HAVE_C_DOUBLE_COMPLEX(MPI_C_DOUBLE_COMPLEX, double _Complex, mpir_typename_c_double_complex) \
- MPIR_OP_TYPE_MACRO_HAVE_C_LONG_DOUBLE_COMPLEX(MPI_C_LONG_DOUBLE_COMPLEX, long double _Complex, mpir_typename_c_long_double_complex)
-#define MPIR_OP_TYPE_GROUP_COMPLEX_EXTRA \
- MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_DOUBLE_COMPLEX, d_fc_complex, mpir_typename_double_complex) \
- MPIR_OP_TYPE_MACRO_HAVE_COMPLEX8(MPI_COMPLEX8, s_complex, mpir_typename_complex8) \
- MPIR_OP_TYPE_MACRO_HAVE_COMPLEX16(MPI_COMPLEX16, d_complex, mpir_typename_complex16) \
- MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(MPIR_CXX_COMPLEX_VALUE, s_complex, mpir_typename_cxx_complex_value) \
- MPIR_OP_TYPE_MACRO_HAVE_CXX_COMPLEX(MPIR_CXX_DOUBLE_COMPLEX_VALUE, d_complex, mpir_typename_cxx_double_complex_value) \
- MPIR_OP_TYPE_MACRO_HAVE_CXX_LONG_DOUBLE_COMPLEX(MPIR_CXX_LONG_DOUBLE_COMPLEX_VALUE, ld_complex, mpir_typename_cxx_long_double_complex_value)
-
-/* byte group */
-#define MPIR_OP_TYPE_GROUP_BYTE \
- MPIR_OP_TYPE_MACRO(MPI_BYTE, unsigned char, mpir_typename_byte)
-#define MPIR_OP_TYPE_GROUP_BYTE_EXTRA /* empty, provided for consistency */
-
-/* convenience macro that just is all non-extra groups concatenated */
-#define MPIR_OP_TYPE_GROUP_ALL_BASIC \
- MPIR_OP_TYPE_GROUP(C_INTEGER) \
- MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER) \
- MPIR_OP_TYPE_GROUP(FLOATING_POINT) \
- MPIR_OP_TYPE_GROUP(LOGICAL) \
- MPIR_OP_TYPE_GROUP(COMPLEX) \
- MPIR_OP_TYPE_GROUP(BYTE)
-
-/* this macro includes just the extra type groups */
-#define MPIR_OP_TYPE_GROUP_ALL_EXTRA \
- MPIR_OP_TYPE_GROUP(C_INTEGER_EXTRA) \
- MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER_EXTRA) \
- MPIR_OP_TYPE_GROUP(FLOATING_POINT_EXTRA) \
- MPIR_OP_TYPE_GROUP(LOGICAL_EXTRA) \
- MPIR_OP_TYPE_GROUP(COMPLEX_EXTRA) \
- MPIR_OP_TYPE_GROUP(BYTE_EXTRA)
-
-#endif /* OPUTIL_H_INCLUDED */
diff --git a/src/include/pmi2.h b/src/include/pmi2.h
index 6e41663..9283ce0 100644
--- a/src/include/pmi2.h
+++ b/src/include/pmi2.h
@@ -102,7 +102,7 @@ typedef struct PMI2_Connect_comm {
int isMaster;
} PMI2_Connect_comm_t;
-struct MPID_Info;
+struct MPIR_Info;
/*@
PMI2_Init - initialize the Process Manager Interface
@@ -200,9 +200,9 @@ int PMI2_Job_Spawn(int count, const char * cmds[],
int argcs[], const char ** argvs[],
const int maxprocs[],
const int info_keyval_sizes[],
- const struct MPID_Info *info_keyval_vectors[],
+ const struct MPIR_Info *info_keyval_vectors[],
int preput_keyval_size,
- const struct MPID_Info *preput_keyval_vector[],
+ const struct MPIR_Info *preput_keyval_vector[],
char jobId[], int jobIdSize,
int errors[]);
@@ -508,7 +508,7 @@ int PMI2_Info_GetJobAttrIntArray(const char name[], int array[], int arraylen, i
Returns 'MPI_SUCCESS' on success and an MPI error code on failure.
@*/
-int PMI2_Nameserv_publish(const char service_name[], const struct MPID_Info *info_ptr, const char port[]);
+int PMI2_Nameserv_publish(const char service_name[], const struct MPIR_Info *info_ptr, const char port[]);
/*@
PMI2_Nameserv_lookup - lookup a service by name
@@ -525,7 +525,7 @@ int PMI2_Nameserv_publish(const char service_name[], const struct MPID_Info *inf
Returns 'MPI_SUCCESS' on success and an MPI error code on failure.
@*/
-int PMI2_Nameserv_lookup(const char service_name[], const struct MPID_Info *info_ptr,
+int PMI2_Nameserv_lookup(const char service_name[], const struct MPIR_Info *info_ptr,
char port[], int portLen);
/*@
PMI2_Nameserv_unpublish - unpublish a name
@@ -539,7 +539,7 @@ int PMI2_Nameserv_lookup(const char service_name[], const struct MPID_Info *info
@*/
int PMI2_Nameserv_unpublish(const char service_name[],
- const struct MPID_Info *info_ptr);
+ const struct MPIR_Info *info_ptr);
diff --git a/src/include/rlog_macros.h b/src/include/rlog_macros.h
index ccb8b11..465b20d 100644
--- a/src/include/rlog_macros.h
+++ b/src/include/rlog_macros.h
@@ -8,35 +8,39 @@
#define RLOG_MACROS_H_INCLUDED
#include "rlog.h"
-#include "mpiu_timer.h"
#ifndef MPIDM_Wtime_todouble
#error Failed to select a defintion for MPIDM_Wtime_todouble
#endif
+/* prototype the initialization/finalization functions */
+int MPII_Timer_init(int rank, int size);
+int MPII_Timer_finalize(void);
+int MPII_Describe_timer_states(void);
+
/* structures, global variables */
/* FIXME: All global names should follow the prefix rules to ensure that
there are no collisions with user-defined global names. g_pRLOG should be
- RLOG_something */
-extern RLOG_Struct *g_pRLOG;
+ RLOGI_something */
+extern RLOGI_Struct *g_pRLOG;
/* state declaration macros */
-#define MPIDU_STATE_DECL(a) MPID_Time_t time_stamp_in##a , time_stamp_out##a
-#define MPIDU_INIT_STATE_DECL(a)
-#define MPIDU_FINALIZE_STATE_DECL(a)
+#define RLOG_STATE_DECL(a) MPID_Time_t time_stamp_in##a , time_stamp_out##a
+#define RLOG_INIT_STATE_DECL(a)
+#define RLOG_FINALIZE_STATE_DECL(a)
/* function enter and exit macros */
-#define MPIDU_FUNC_ENTER(a) \
+#define RLOG_FUNC_ENTER(a) \
if (g_pRLOG) \
{ \
g_pRLOG->nRecursion++; \
MPID_Wtime( &time_stamp_in##a ); \
}
-#define RLOG_MACRO_HEADER_CAST() ((RLOG_HEADER*)g_pRLOG->pOutput->pCurHeader)
-#define RLOG_MACRO_EVENT_CAST() ((RLOG_EVENT*)((char*)g_pRLOG->pOutput->pCurHeader + sizeof(RLOG_HEADER)))
+#define RLOGI_MACRO_HEADER_CAST() ((RLOGI_HEADER*)g_pRLOG->pOutput->pCurHeader)
+#define RLOGI_MACRO_EVENT_CAST() ((RLOGI_EVENT*)((char*)g_pRLOG->pOutput->pCurHeader + sizeof(RLOGI_HEADER)))
-#define MPIDU_FUNC_EXIT(a) \
+#define RLOG_FUNC_EXIT(a) \
if (g_pRLOG) \
{ \
if (g_pRLOG->bLogging) \
@@ -46,84 +50,122 @@ if (g_pRLOG) \
MPIDM_Wtime_todouble( ( &time_stamp_in##a ), &d1); \
MPIDM_Wtime_todouble( ( &time_stamp_out##a ), &d2); \
g_pRLOG->nRecursion--; \
- if (g_pRLOG->pOutput->pCurHeader + sizeof(RLOG_HEADER) + sizeof(RLOG_EVENT) > g_pRLOG->pOutput->pEnd) \
+ if (g_pRLOG->pOutput->pCurHeader + sizeof(RLOGI_HEADER) + sizeof(RLOGI_EVENT) > g_pRLOG->pOutput->pEnd) \
{ \
WriteCurrentDataAndLogEvent(g_pRLOG, a , d1, d2, g_pRLOG->nRecursion); \
} \
else \
{ \
- RLOG_MACRO_HEADER_CAST()->type = RLOG_EVENT_TYPE; \
- RLOG_MACRO_HEADER_CAST()->length = sizeof(RLOG_HEADER) + sizeof(RLOG_EVENT); \
- RLOG_MACRO_EVENT_CAST()->rank = g_pRLOG->nRank; \
- RLOG_MACRO_EVENT_CAST()->end_time = d2 - g_pRLOG->dFirstTimestamp; \
- RLOG_MACRO_EVENT_CAST()->start_time = d1 - g_pRLOG->dFirstTimestamp; \
- RLOG_MACRO_EVENT_CAST()->event = a ; \
- RLOG_MACRO_EVENT_CAST()->recursion = g_pRLOG->nRecursion; \
+ RLOGI_MACRO_HEADER_CAST()->type = RLOGI_EVENT_TYPE; \
+ RLOGI_MACRO_HEADER_CAST()->length = sizeof(RLOGI_HEADER) + sizeof(RLOGI_EVENT); \
+ RLOGI_MACRO_EVENT_CAST()->rank = g_pRLOG->nRank; \
+ RLOGI_MACRO_EVENT_CAST()->end_time = d2 - g_pRLOG->dFirstTimestamp; \
+ RLOGI_MACRO_EVENT_CAST()->start_time = d1 - g_pRLOG->dFirstTimestamp; \
+ RLOGI_MACRO_EVENT_CAST()->event = a ; \
+ RLOGI_MACRO_EVENT_CAST()->recursion = g_pRLOG->nRecursion; \
/* advance the current position pointer */ \
- g_pRLOG->pOutput->pCurHeader += sizeof(RLOG_HEADER) + sizeof(RLOG_EVENT); \
+ g_pRLOG->pOutput->pCurHeader += sizeof(RLOGI_HEADER) + sizeof(RLOGI_EVENT); \
} \
} \
}
-#define MPIDU_PT2PT_FUNC_ENTER(a) MPIDU_FUNC_ENTER(a)
-#define MPIDU_PT2PT_FUNC_EXIT(a) MPIDU_FUNC_EXIT(a)
-#define MPIDU_COLL_FUNC_ENTER(a) MPIDU_FUNC_ENTER(a)
-#define MPIDU_COLL_FUNC_EXIT(a) MPIDU_FUNC_EXIT(a)
-#define MPIDU_RMA_FUNC_ENTER(a) MPIDU_FUNC_ENTER(a)
-#define MPIDU_RMA_FUNC_EXIT(a) MPIDU_FUNC_EXIT(a)
-#define MPIDU_INIT_FUNC_ENTER(a)
-#define MPIDU_INIT_FUNC_EXIT(a)
-#define MPIDU_FINALIZE_FUNC_ENTER(a)
-#define MPIDU_FINALIZE_FUNC_EXIT(a)
+#define RLOG_PT2PT_FUNC_ENTER(a) RLOG_FUNC_ENTER(a)
+#define RLOG_PT2PT_FUNC_EXIT(a) RLOG_FUNC_EXIT(a)
+#define RLOG_COLL_FUNC_ENTER(a) RLOG_FUNC_ENTER(a)
+#define RLOG_COLL_FUNC_EXIT(a) RLOG_FUNC_EXIT(a)
+#define RLOG_RMA_FUNC_ENTER(a) RLOG_FUNC_ENTER(a)
+#define RLOG_RMA_FUNC_EXIT(a) RLOG_FUNC_EXIT(a)
+#define RLOG_INIT_FUNC_ENTER(a)
+#define RLOG_INIT_FUNC_EXIT(a)
+#define RLOG_FINALIZE_FUNC_ENTER(a)
+#define RLOG_FINALIZE_FUNC_EXIT(a)
/* arrow generating enter and exit macros */
-#define MPIDU_PT2PT_FUNC_ENTER_FRONT(a) \
+#define RLOG_PT2PT_FUNC_ENTER_FRONT(a) \
if (g_pRLOG) \
{ \
g_pRLOG->nRecursion++; \
MPID_Wtime( &time_stamp_in##a ); \
- RLOG_LogSend( g_pRLOG, dest, tag, count ); \
+ RLOGI_LogSend( g_pRLOG, dest, tag, count ); \
}
-#define MPIDU_PT2PT_FUNC_ENTER_BACK(a) \
+#define RLOG_PT2PT_FUNC_ENTER_BACK(a) \
if (g_pRLOG) \
{ \
g_pRLOG->nRecursion++; \
MPID_Wtime( &time_stamp_in##a ); \
- RLOG_LogRecv( g_pRLOG, source, tag, count ); \
+ RLOGI_LogRecv( g_pRLOG, source, tag, count ); \
}
-#ifdef MPID_LOG_RECV_FROM_BEGINNING
-#define MPIDU_PT2PT_FUNC_ENTER_BOTH(a) \
+#define RLOG_PT2PT_FUNC_ENTER_BOTH(a) \
if (g_pRLOG) \
{ \
g_pRLOG->nRecursion++; \
MPID_Wtime( &time_stamp_in##a ); \
- RLOG_LogSend( g_pRLOG, dest, sendtag, sendcount ); \
- RLOG_LogRecv( g_pRLOG, source, recvtag, recvcount ); \
+ RLOGI_LogSend( g_pRLOG, dest, sendtag, sendcount ); \
}
-#else
-#define MPIDU_PT2PT_FUNC_ENTER_BOTH(a) \
-if (g_pRLOG) \
-{ \
- g_pRLOG->nRecursion++; \
- MPID_Wtime( &time_stamp_in##a ); \
- RLOG_LogSend( g_pRLOG, dest, sendtag, sendcount ); \
-}
-#endif
-#define MPIDU_PT2PT_FUNC_EXIT_BACK(a) \
+#define RLOG_PT2PT_FUNC_EXIT_BACK(a) \
if (g_pRLOG) \
{ \
- RLOG_LogRecv( g_pRLOG, source, tag, count ); \
- MPIDU_PT2PT_FUNC_EXIT(a) \
+ RLOGI_LogRecv( g_pRLOG, source, tag, count ); \
+ RLOG_PT2PT_FUNC_EXIT(a) \
}
-#define MPIDU_PT2PT_FUNC_EXIT_BOTH(a) \
+#define RLOG_PT2PT_FUNC_EXIT_BOTH(a) \
if (g_pRLOG) \
{ \
- RLOG_LogRecv( g_pRLOG, source, recvtag, recvcount ); \
- MPIDU_PT2PT_FUNC_EXIT(a) \
+ RLOGI_LogRecv( g_pRLOG, source, recvtag, recvcount ); \
+ RLOG_PT2PT_FUNC_EXIT(a) \
}
+
+/* MPI layer definitions */
+#define MPIR_FUNC_TERSE_STATE_DECL(a) RLOG_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_INIT_STATE_DECL(a) RLOG_INIT_STATE_DECL(a)
+#define MPIR_FUNC_TERSE_FINALIZE_STATE_DECL(a) RLOG_FINALIZE_STATE_DECL(a)
+
+#define MPIR_FUNC_TERSE_ENTER(a) RLOG_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_EXIT(a) RLOG_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER(a) RLOG_PT2PT_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT(a) RLOG_PT2PT_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_COLL_ENTER(a) RLOG_COLL_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_COLL_EXIT(a) RLOG_COLL_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_RMA_ENTER(a) RLOG_RMA_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_RMA_EXIT(a) RLOG_RMA_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_INIT_ENTER(a) RLOG_INIT_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_INIT_EXIT(a) RLOG_INIT_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_FINALIZE_ENTER(a) RLOG_FINALIZE_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_FINALIZE_EXIT(a) RLOG_FINALIZE_FUNC_EXIT(a)
+
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(a) RLOG_PT2PT_FUNC_ENTER_FRONT(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_FRONT(a) RLOG_PT2PT_FUNC_EXIT(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_BACK(a) RLOG_PT2PT_FUNC_ENTER(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_BACK(a) RLOG_PT2PT_FUNC_EXIT_BACK(a)
+#define MPIR_FUNC_TERSE_PT2PT_EXIT_BOTH(a) RLOG_PT2PT_FUNC_EXIT_BOTH(a)
+#define MPIR_FUNC_TERSE_PT2PT_ENTER_BOTH(a) RLOG_PT2PT_FUNC_ENTER_BOTH(a)
+
+#if defined(HAVE_TIMING) && (HAVE_TIMING == MPICH_TIMING_KIND__LOG_DETAILED || HAVE_TIMING == MPICH_TIMING_KIND__ALL)
+
+/* device layer definitions */
+#define MPIR_FUNC_VERBOSE_STATE_DECL(a) RLOG_STATE_DECL(a)
+#define MPIR_FUNC_VERBOSE_ENTER(a) RLOG_FUNC_ENTER(a)
+#define MPIR_FUNC_VERBOSE_EXIT(a) RLOG_FUNC_EXIT(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_ENTER(a) RLOG_PT2PT_FUNC_ENTER(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_EXIT(a) RLOG_PT2PT_FUNC_EXIT(a)
+#define MPIR_FUNC_VERBOSE_RMA_ENTER(a) RLOG_RMA_FUNC_ENTER(a)
+#define MPIR_FUNC_VERBOSE_RMA_EXIT(a) RLOG_RMA_FUNC_EXIT(a)
+
+#else
+
+#define MPIR_FUNC_VERBOSE_STATE_DECL(a)
+#define MPIR_FUNC_VERBOSE_ENTER(a)
+#define MPIR_FUNC_VERBOSE_EXIT(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_ENTER(a)
+#define MPIR_FUNC_VERBOSE_PT2PT_EXIT(a)
+#define MPIR_FUNC_VERBOSE_RMA_ENTER(a)
+#define MPIR_FUNC_VERBOSE_RMA_EXIT(a)
+
+#endif /* (HAVE_TIMING == MPICH_TIMING_KIND__LOG_DETAILED || HAVE_TIMING == MPICH_TIMING_KIND__ALL) */
+
#endif
diff --git a/src/mpi/attr/.state-cache b/src/mpi/attr/.state-cache
index b0e337e..5aa3c6b 100644
--- a/src/mpi/attr/.state-cache
+++ b/src/mpi/attr/.state-cache
@@ -1,99 +1,99 @@
<dir>
-<file name="comm_create_keyval.c" info="1447123141"/>
-<file name="type_free_keyval.c" info="1447123141"/>
-<file name="win_set_attr.c" info="1447123141"/>
-<file name="comm_delete_attr.c" info="1447123141"/>
-<file name="keyval_free.c" info="1447123141"/>
-<file name="comm_get_attr.c" info="1447123141"/>
-<file name="type_create_keyval.c" info="1447123141"/>
-<file name="attrutil.c" info="1447123141"/>
-<file name="attr_get.c" info="1447123141"/>
-<file name="comm_free_keyval.c" info="1447123141"/>
-<file name="win_get_attr.c" info="1447123141"/>
-<file name="type_set_attr.c" info="1447123141"/>
-<file name="win_free_keyval.c" info="1447123141"/>
-<file name="win_delete_attr.c" info="1447123141"/>
-<file name="attr_put.c" info="1447123141"/>
-<file name="dup_fn.c" info="1447123141"/>
-<file name="attr.h" info="1447123141"/>
-<file name="type_delete_attr.c" info="1447123141"/>
-<file name="win_create_keyval.c" info="1447123141"/>
-<file name="comm_set_attr.c" info="1447123141"/>
-<file name="type_get_attr.c" info="1447123141"/>
-<file name="attr_delete.c" info="1447123141"/>
-<file name="keyval_create.c" info="1447123141"/>
+<file name="type_get_attr.c" info="1478973152"/>
+<file name="type_create_keyval.c" info="1478973152"/>
+<file name="attr_delete.c" info="1478973152"/>
+<file name="attrutil.c" info="1478973152"/>
+<file name="type_delete_attr.c" info="1478973152"/>
+<file name="attr.h" info="1478973152"/>
+<file name="comm_create_keyval.c" info="1478973152"/>
+<file name="attr_get.c" info="1478973152"/>
+<file name="comm_set_attr.c" info="1478973152"/>
+<file name="dup_fn.c" info="1478973152"/>
+<file name="type_free_keyval.c" info="1478973152"/>
+<file name="win_set_attr.c" info="1478973152"/>
+<file name="attr_put.c" info="1478973152"/>
+<file name="win_create_keyval.c" info="1478973152"/>
+<file name="keyval_free.c" info="1478973152"/>
+<file name="win_free_keyval.c" info="1478973152"/>
+<file name="keyval_create.c" info="1478973152"/>
+<file name="win_delete_attr.c" info="1478973152"/>
+<file name="comm_delete_attr.c" info="1478973152"/>
+<file name="type_set_attr.c" info="1478973152"/>
+<file name="comm_free_keyval.c" info="1478973152"/>
+<file name="win_get_attr.c" info="1478973152"/>
+<file name="comm_get_attr.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="comm_create_keyval.c">
-MPID_STATE_MPI_COMM_CREATE_KEYVAL MPI_Comm_create_keyval
-</fileinfo>
-<fileinfo name="type_free_keyval.c">
-MPID_STATE_MPI_TYPE_FREE_KEYVAL MPI_Type_free_keyval
+<fileinfo name="type_get_attr.c">
+MPID_STATE_MPIR_TYPE_GET_ATTR MPII_Type_get_attr
+MPID_STATE_MPI_TYPE_GET_ATTR MPI_Type_get_attr
</fileinfo>
-<fileinfo name="win_set_attr.c">
-MPID_STATE_MPIR_WIN_SET_ATTR MPIR_WinSetAttr
-MPID_STATE_MPI_WIN_SET_ATTR MPI_Win_set_attr
+<fileinfo name="type_create_keyval.c">
+MPID_STATE_MPI_TYPE_CREATE_KEYVAL MPI_Type_create_keyval
</fileinfo>
-<fileinfo name="comm_delete_attr.c">
-MPID_STATE_MPI_COMM_DELETE_ATTR MPI_Comm_delete_attr
+<fileinfo name="attr_delete.c">
+MPID_STATE_MPI_ATTR_DELETE MPI_Attr_delete
</fileinfo>
-<fileinfo name="keyval_free.c">
-MPID_STATE_MPI_KEYVAL_FREE MPI_Keyval_free
+<fileinfo name="attrutil.c">
</fileinfo>
-<fileinfo name="comm_get_attr.c">
-MPID_STATE_MPIR_COMM_GET_ATTR MPIR_CommGetAttr
-MPID_STATE_MPI_COMM_GET_ATTR MPI_Comm_get_attr
+<fileinfo name="type_delete_attr.c">
+MPID_STATE_MPI_TYPE_DELETE_ATTR MPI_Type_delete_attr
</fileinfo>
-<fileinfo name="type_create_keyval.c">
-MPID_STATE_MPI_TYPE_CREATE_KEYVAL MPI_Type_create_keyval
+<fileinfo name="attr.h">
</fileinfo>
-<fileinfo name="attrutil.c">
+<fileinfo name="comm_create_keyval.c">
+MPID_STATE_MPI_COMM_CREATE_KEYVAL MPI_Comm_create_keyval
</fileinfo>
<fileinfo name="attr_get.c">
MPID_STATE_MPI_ATTR_GET MPI_Attr_get
</fileinfo>
-<fileinfo name="comm_free_keyval.c">
-MPID_STATE_MPI_COMM_FREE_KEYVAL MPI_Comm_free_keyval
-</fileinfo>
-<fileinfo name="win_get_attr.c">
-MPID_STATE_MPIR_WIN_GET_ATTR MPIR_WinGetAttr
-MPID_STATE_MPI_WIN_GET_ATTR MPI_Win_get_attr
+<fileinfo name="comm_set_attr.c">
+MPID_STATE_MPIR_COMM_SET_ATTR MPII_Comm_set_attr
+MPID_STATE_MPI_COMM_SET_ATTR MPI_Comm_set_attr
</fileinfo>
-<fileinfo name="type_set_attr.c">
-MPID_STATE_MPIR_TYPE_SET_ATTR MPIR_TypeSetAttr
-MPID_STATE_MPI_TYPE_SET_ATTR MPI_Type_set_attr
+<fileinfo name="dup_fn.c">
</fileinfo>
-<fileinfo name="win_free_keyval.c">
-MPID_STATE_MPI_WIN_FREE_KEYVAL MPI_Win_free_keyval
+<fileinfo name="type_free_keyval.c">
+MPID_STATE_MPI_TYPE_FREE_KEYVAL MPI_Type_free_keyval
</fileinfo>
-<fileinfo name="win_delete_attr.c">
-MPID_STATE_MPI_WIN_DELETE_ATTR MPI_Win_delete_attr
+<fileinfo name="win_set_attr.c">
+MPID_STATE_MPIR_WIN_SET_ATTR MPII_Win_set_attr
+MPID_STATE_MPI_WIN_SET_ATTR MPI_Win_set_attr
</fileinfo>
<fileinfo name="attr_put.c">
MPID_STATE_MPI_ATTR_PUT MPI_Attr_put
</fileinfo>
-<fileinfo name="dup_fn.c">
-</fileinfo>
-<fileinfo name="attr.h">
-</fileinfo>
-<fileinfo name="type_delete_attr.c">
-MPID_STATE_MPI_TYPE_DELETE_ATTR MPI_Type_delete_attr
-</fileinfo>
<fileinfo name="win_create_keyval.c">
MPID_STATE_MPI_WIN_CREATE_KEYVAL MPI_Win_create_keyval
</fileinfo>
-<fileinfo name="comm_set_attr.c">
-MPID_STATE_MPIR_COMM_SET_ATTR MPIR_CommSetAttr
-MPID_STATE_MPI_COMM_SET_ATTR MPI_Comm_set_attr
-</fileinfo>
-<fileinfo name="type_get_attr.c">
-MPID_STATE_MPIR_TYPE_GET_ATTR MPIR_TypeGetAttr
-MPID_STATE_MPI_TYPE_GET_ATTR MPI_Type_get_attr
+<fileinfo name="keyval_free.c">
+MPID_STATE_MPI_KEYVAL_FREE MPI_Keyval_free
</fileinfo>
-<fileinfo name="attr_delete.c">
-MPID_STATE_MPI_ATTR_DELETE MPI_Attr_delete
+<fileinfo name="win_free_keyval.c">
+MPID_STATE_MPI_WIN_FREE_KEYVAL MPI_Win_free_keyval
</fileinfo>
<fileinfo name="keyval_create.c">
MPID_STATE_MPI_KEYVAL_CREATE MPI_Keyval_create
</fileinfo>
+<fileinfo name="win_delete_attr.c">
+MPID_STATE_MPI_WIN_DELETE_ATTR MPI_Win_delete_attr
+</fileinfo>
+<fileinfo name="comm_delete_attr.c">
+MPID_STATE_MPI_COMM_DELETE_ATTR MPI_Comm_delete_attr
+</fileinfo>
+<fileinfo name="type_set_attr.c">
+MPID_STATE_MPIR_TYPE_SET_ATTR MPII_Type_set_attr
+MPID_STATE_MPI_TYPE_SET_ATTR MPI_Type_set_attr
+</fileinfo>
+<fileinfo name="comm_free_keyval.c">
+MPID_STATE_MPI_COMM_FREE_KEYVAL MPI_Comm_free_keyval
+</fileinfo>
+<fileinfo name="win_get_attr.c">
+MPID_STATE_MPIR_WIN_GET_ATTR MPII_Win_get_attr
+MPID_STATE_MPI_WIN_GET_ATTR MPI_Win_get_attr
+</fileinfo>
+<fileinfo name="comm_get_attr.c">
+MPID_STATE_MPIR_COMM_GET_ATTR MPII_Comm_get_attr
+MPID_STATE_MPI_COMM_GET_ATTR MPI_Comm_get_attr
+</fileinfo>
</data>
diff --git a/src/mpi/attr/attr.h b/src/mpi/attr/attr.h
index d25b0cb..6a9c0fb 100644
--- a/src/mpi/attr/attr.h
+++ b/src/mpi/attr/attr.h
@@ -16,14 +16,14 @@
/*
Keyval and attribute storage
*/
-extern MPIU_Object_alloc_t MPID_Keyval_mem;
-extern MPIU_Object_alloc_t MPID_Attr_mem;
-extern MPID_Keyval MPID_Keyval_direct[];
+extern MPIR_Object_alloc_t MPII_Keyval_mem;
+extern MPIR_Object_alloc_t MPID_Attr_mem;
+extern MPII_Keyval MPII_Keyval_direct[];
-extern int MPIR_Attr_dup_list( int, MPID_Attribute *, MPID_Attribute ** );
-extern int MPIR_Attr_delete_list( int, MPID_Attribute ** );
-extern MPID_Attribute *MPID_Attr_alloc(void);
-extern void MPID_Attr_free(MPID_Attribute *attr_ptr);
-extern int MPIR_Call_attr_delete( int, MPID_Attribute * );
-extern int MPIR_Call_attr_copy( int, MPID_Attribute *, void**, int* );
+extern int MPIR_Attr_dup_list( int, MPIR_Attribute *, MPIR_Attribute ** );
+extern int MPIR_Attr_delete_list( int, MPIR_Attribute ** );
+extern MPIR_Attribute *MPID_Attr_alloc(void);
+extern void MPID_Attr_free(MPIR_Attribute *attr_ptr);
+extern int MPIR_Call_attr_delete( int, MPIR_Attribute * );
+extern int MPIR_Call_attr_copy( int, MPIR_Attribute *, void**, int* );
diff --git a/src/mpi/attr/attr_delete.c b/src/mpi/attr/attr_delete.c
index 07d6777..989e5ba 100644
--- a/src/mpi/attr/attr_delete.c
+++ b/src/mpi/attr/attr_delete.c
@@ -56,14 +56,14 @@ int MPI_Attr_delete(MPI_Comm comm, int keyval)
{
static const char FCNAME[] = "MPI_Attr_delete";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Keyval *keyval_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ATTR_DELETE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPII_Keyval *keyval_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ATTR_DELETE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ATTR_DELETE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ATTR_DELETE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -77,8 +77,8 @@ int MPI_Attr_delete(MPI_Comm comm, int keyval)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Keyval_get_ptr( keyval, keyval_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPII_Keyval_get_ptr( keyval, keyval_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -86,10 +86,10 @@ int MPI_Attr_delete(MPI_Comm comm, int keyval)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
/* Validate keyval_ptr */
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -104,7 +104,7 @@ int MPI_Attr_delete(MPI_Comm comm, int keyval)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ATTR_DELETE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ATTR_DELETE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/attr_get.c b/src/mpi/attr/attr_get.c
index 77f8abc..d69d750 100644
--- a/src/mpi/attr/attr_get.c
+++ b/src/mpi/attr/attr_get.c
@@ -75,13 +75,13 @@ int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag)
{
static const char FCNAME[] = "MPI_Attr_get";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ATTR_GET);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ATTR_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ATTR_GET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ATTR_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -93,9 +93,9 @@ int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag)
/* A common user error is to pass the address of a 4-byte
int when the address of a pointer (or an address-sized int)
should have been used. We can test for this specific
- case. Note that this code assumes sizeof(MPIU_Pint) is
+ case. Note that this code assumes sizeof(intptr_t) is
a power of 2. */
- MPIR_ERR_CHKANDJUMP((MPIU_Pint)attribute_val & (sizeof(MPIU_Pint)-1),
+ MPIR_ERR_CHKANDJUMP((intptr_t)attribute_val & (sizeof(intptr_t)-1),
mpi_errno,MPI_ERR_ARG,"**attrnotptr");
# endif
}
@@ -104,7 +104,7 @@ int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -112,7 +112,7 @@ int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(attribute_val, "attribute_val", mpi_errno);
MPIR_ERRTEST_ARGNULL(flag, "flag", mpi_errno);
@@ -123,13 +123,13 @@ int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag)
/* ... body of routine ... */
- mpi_errno = MPIR_CommGetAttr( comm, keyval, attribute_val, flag, MPIR_ATTR_PTR);
+ mpi_errno = MPII_Comm_get_attr( comm, keyval, attribute_val, flag, MPIR_ATTR_PTR);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ATTR_GET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ATTR_GET);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/attr_put.c b/src/mpi/attr/attr_put.c
index 4a1c53a..cd154af 100644
--- a/src/mpi/attr/attr_put.c
+++ b/src/mpi/attr/attr_put.c
@@ -74,13 +74,13 @@ int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val)
{
static const char FCNAME[] = "MPI_Attr_put";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ATTR_PUT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ATTR_PUT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ATTR_PUT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ATTR_PUT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -88,7 +88,7 @@ int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_COMM(comm, mpi_errno);
- MPIR_ERRTEST_KEYVAL(keyval, MPID_COMM, "communicator", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(keyval, MPIR_COMM, "communicator", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -96,7 +96,7 @@ int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -104,7 +104,7 @@ int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -120,7 +120,7 @@ int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ATTR_PUT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ATTR_PUT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/attrutil.c b/src/mpi/attr/attrutil.c
index b9abbe6..22fc93c 100644
--- a/src/mpi/attr/attrutil.c
+++ b/src/mpi/attr/attrutil.c
@@ -27,37 +27,37 @@
#endif
/* Preallocated keyval objects */
-MPID_Keyval MPID_Keyval_direct[MPID_KEYVAL_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_Keyval_mem = { 0, 0, 0, 0, MPID_KEYVAL,
- sizeof(MPID_Keyval),
- MPID_Keyval_direct,
+MPII_Keyval MPII_Keyval_direct[MPID_KEYVAL_PREALLOC] = { {0} };
+MPIR_Object_alloc_t MPII_Keyval_mem = { 0, 0, 0, 0, MPIR_KEYVAL,
+ sizeof(MPII_Keyval),
+ MPII_Keyval_direct,
MPID_KEYVAL_PREALLOC, };
-#ifndef MPID_ATTR_PREALLOC
-#define MPID_ATTR_PREALLOC 32
+#ifndef MPIR_ATTR_PREALLOC
+#define MPIR_ATTR_PREALLOC 32
#endif
/* Preallocated keyval objects */
-MPID_Attribute MPID_Attr_direct[MPID_ATTR_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_Attr_mem = { 0, 0, 0, 0, MPID_ATTR,
- sizeof(MPID_Attribute),
+MPIR_Attribute MPID_Attr_direct[MPIR_ATTR_PREALLOC] = { {0} };
+MPIR_Object_alloc_t MPID_Attr_mem = { 0, 0, 0, 0, MPIR_ATTR,
+ sizeof(MPIR_Attribute),
MPID_Attr_direct,
- MPID_ATTR_PREALLOC, };
+ MPIR_ATTR_PREALLOC, };
/* Provides a way to trap all attribute allocations when debugging leaks. */
-MPID_Attribute *MPID_Attr_alloc(void)
+MPIR_Attribute *MPID_Attr_alloc(void)
{
- MPID_Attribute *attr = (MPID_Attribute *)MPIU_Handle_obj_alloc(&MPID_Attr_mem);
+ MPIR_Attribute *attr = (MPIR_Attribute *)MPIR_Handle_obj_alloc(&MPID_Attr_mem);
/* attributes don't have refcount semantics, but let's keep valgrind and
* the debug logging pacified */
- MPIU_Assert(attr != NULL);
- MPIU_Object_set_ref(attr, 0);
+ MPIR_Assert(attr != NULL);
+ MPIR_Object_set_ref(attr, 0);
return attr;
}
-void MPID_Attr_free(MPID_Attribute *attr_ptr)
+void MPID_Attr_free(MPIR_Attribute *attr_ptr)
{
- MPIU_Handle_obj_free(&MPID_Attr_mem, attr_ptr);
+ MPIR_Handle_obj_free(&MPID_Attr_mem, attr_ptr);
}
#undef FUNCNAME
@@ -77,11 +77,11 @@ void MPID_Attr_free(MPID_Attribute *attr_ptr)
Note that this simply invokes the attribute delete function. It does not
remove the attribute from the list of attributes.
*/
-int MPIR_Call_attr_delete( int handle, MPID_Attribute *attr_p )
+int MPIR_Call_attr_delete( int handle, MPIR_Attribute *attr_p )
{
int rc;
int mpi_errno = MPI_SUCCESS;
- MPID_Keyval* kv = attr_p->keyval;
+ MPII_Keyval* kv = attr_p->keyval;
if(kv->delfn.user_function == NULL)
goto fn_exit;
@@ -91,12 +91,12 @@ int MPIR_Call_attr_delete( int handle, MPID_Attribute *attr_p )
handle,
attr_p->keyval->handle,
attr_p->attrType,
- (void *)(MPIU_Pint)attr_p->value,
+ (void *)(intptr_t)attr_p->value,
attr_p->keyval->extra_state
);
/* --BEGIN ERROR HANDLING-- */
if(rc != 0){
-#if MPICH_ERROR_MSG_LEVEL < MPICH_ERROR_MSG_ALL
+#if MPICH_ERROR_MSG_LEVEL < MPICH_ERROR_MSG__ALL
/* If rc is a valid error class, then return that.
Note that it may be a dynamic error class */
/* AMBIGUOUS: This is an ambiguity in the MPI standard: What is the
@@ -134,11 +134,11 @@ int MPIR_Call_attr_delete( int handle, MPID_Attribute *attr_p )
#define FUNCNAME MPIR_Call_attr_copy
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Call_attr_copy( int handle, MPID_Attribute *attr_p, void** value_copy, int* flag)
+int MPIR_Call_attr_copy( int handle, MPIR_Attribute *attr_p, void** value_copy, int* flag)
{
int mpi_errno = MPI_SUCCESS;
int rc;
- MPID_Keyval* kv = attr_p->keyval;
+ MPII_Keyval* kv = attr_p->keyval;
if(kv->copyfn.user_function == NULL)
goto fn_exit;
@@ -149,14 +149,14 @@ int MPIR_Call_attr_copy( int handle, MPID_Attribute *attr_p, void** value_copy,
attr_p->keyval->handle,
attr_p->keyval->extra_state,
attr_p->attrType,
- (void *)(MPIU_Pint)attr_p->value,
+ (void *)(intptr_t)attr_p->value,
value_copy,
flag
);
/* --BEGIN ERROR HANDLING-- */
if(rc != 0){
-#if MPICH_ERROR_MSG_LEVEL < MPICH_ERROR_MSG_ALL
+#if MPICH_ERROR_MSG_LEVEL < MPICH_ERROR_MSG__ALL
mpi_errno = rc;
#else
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**user", "**usercopy %d", rc);
@@ -175,10 +175,10 @@ fn_fail:
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/* Routine to duplicate an attribute list */
-int MPIR_Attr_dup_list( int handle, MPID_Attribute *old_attrs,
- MPID_Attribute **new_attr )
+int MPIR_Attr_dup_list( int handle, MPIR_Attribute *old_attrs,
+ MPIR_Attribute **new_attr )
{
- MPID_Attribute *p, *new_p, **next_new_attr_ptr=new_attr;
+ MPIR_Attribute *p, *new_p, **next_new_attr_ptr=new_attr;
void* new_value = NULL;
int mpi_errno = MPI_SUCCESS;
@@ -217,13 +217,13 @@ int MPIR_Attr_dup_list( int handle, MPID_Attribute *old_attrs,
new_p->keyval = p->keyval;
/* Remember that we need this keyval */
- MPIR_Keyval_add_ref(p->keyval);
+ MPII_Keyval_add_ref(p->keyval);
new_p->attrType = p->attrType;
new_p->pre_sentinal = 0;
/* FIXME: This is not correct in some cases (size(MPI_Aint)>
- sizeof(MPIU_Pint)) */
- new_p->value = (MPID_AttrVal_t)(MPIU_Pint)new_value;
+ sizeof(intptr_t)) */
+ new_p->value = (MPII_Attr_val_t)(intptr_t)new_value;
new_p->post_sentinal = 0;
new_p->next = 0;
@@ -241,9 +241,9 @@ int MPIR_Attr_dup_list( int handle, MPID_Attribute *old_attrs,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/* Routine to delete an attribute list */
-int MPIR_Attr_delete_list( int handle, MPID_Attribute **attr )
+int MPIR_Attr_delete_list( int handle, MPIR_Attribute **attr )
{
- MPID_Attribute *p, *new_p;
+ MPIR_Attribute *p, *new_p;
int mpi_errno = MPI_SUCCESS;
p = *attr;
@@ -277,13 +277,13 @@ int MPIR_Attr_delete_list( int handle, MPID_Attribute **attr )
{
int in_use;
/* Decrement the use of the keyval */
- MPIR_Keyval_release_ref( p->keyval, &in_use);
+ MPII_Keyval_release_ref( p->keyval, &in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Keyval_mem, p->keyval );
+ MPIR_Handle_obj_free( &MPII_Keyval_mem, p->keyval );
}
}
- MPIU_Handle_obj_free( &MPID_Attr_mem, p );
+ MPIR_Handle_obj_free( &MPID_Attr_mem, p );
p = new_p;
}
@@ -302,12 +302,12 @@ int MPIR_Attr_delete_list( int handle, MPID_Attribute **attr )
}
int
-MPIR_Attr_copy_c_proxy(
+MPII_Attr_copy_c_proxy(
MPI_Comm_copy_attr_function* user_function,
int handle,
int keyval,
void* extra_state,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void** attrib_copy,
int* flag
@@ -317,7 +317,7 @@ MPIR_Attr_copy_c_proxy(
int ret;
/* Make sure that the attribute value is delieverd as a pointer */
- if (MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT)){
+ if (MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT)){
attrib_val = &attrib;
}
else{
@@ -336,11 +336,11 @@ MPIR_Attr_copy_c_proxy(
int
-MPIR_Attr_delete_c_proxy(
+MPII_Attr_delete_c_proxy(
MPI_Comm_delete_attr_function* user_function,
int handle,
int keyval,
- MPIR_AttrType attrib_type,
+ MPIR_Attr_type attrib_type,
void* attrib,
void* extra_state
)
@@ -349,7 +349,7 @@ MPIR_Attr_delete_c_proxy(
int ret;
/* Make sure that the attribute value is delieverd as a pointer */
- if (MPIR_ATTR_KIND(attrib_type) == MPIR_ATTR_KIND(MPIR_ATTR_INT))
+ if (MPII_ATTR_KIND(attrib_type) == MPII_ATTR_KIND(MPIR_ATTR_INT))
attrib_val = &attrib;
else
attrib_val = attrib;
@@ -366,14 +366,14 @@ MPIR_Attr_delete_c_proxy(
/* FIXME: Missing routine description */
void
-MPIR_Keyval_set_proxy(
+MPII_Keyval_set_proxy(
int keyval,
- MPID_Attr_copy_proxy copy_proxy,
- MPID_Attr_delete_proxy delete_proxy
+ MPII_Attr_copy_proxy copy_proxy,
+ MPII_Attr_delete_proxy delete_proxy
)
{
- MPID_Keyval* keyval_ptr;
- MPID_Keyval_get_ptr( keyval, keyval_ptr );
+ MPII_Keyval* keyval_ptr;
+ MPII_Keyval_get_ptr( keyval, keyval_ptr );
if(keyval_ptr == NULL)
return;
diff --git a/src/mpi/attr/comm_create_keyval.c b/src/mpi/attr/comm_create_keyval.c
index 01b18aa..bb4a155 100644
--- a/src/mpi/attr/comm_create_keyval.c
+++ b/src/mpi/attr/comm_create_keyval.c
@@ -46,9 +46,9 @@ int MPIR_Comm_create_keyval_impl(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
int *comm_keyval, void *extra_state)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Keyval *keyval_ptr;
+ MPII_Keyval *keyval_ptr;
- keyval_ptr = (MPID_Keyval *)MPIU_Handle_obj_alloc( &MPID_Keyval_mem );
+ keyval_ptr = (MPII_Keyval *)MPIR_Handle_obj_alloc( &MPII_Keyval_mem );
MPIR_ERR_CHKANDJUMP(!keyval_ptr, mpi_errno, MPI_ERR_OTHER,"**nomem");
/* Initialize the attribute dup function */
@@ -60,17 +60,17 @@ int MPIR_Comm_create_keyval_impl(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
/* The handle encodes the keyval kind. Modify it to have the correct
field */
keyval_ptr->handle = (keyval_ptr->handle & ~(0x03c00000)) |
- (MPID_COMM << 22);
- MPIU_Object_set_ref(keyval_ptr,1);
+ (MPIR_COMM << 22);
+ MPIR_Object_set_ref(keyval_ptr,1);
keyval_ptr->was_freed = 0;
- keyval_ptr->kind = MPID_COMM;
+ keyval_ptr->kind = MPIR_COMM;
keyval_ptr->extra_state = extra_state;
keyval_ptr->copyfn.user_function = comm_copy_attr_fn;
- keyval_ptr->copyfn.proxy = MPIR_Attr_copy_c_proxy;
+ keyval_ptr->copyfn.proxy = MPII_Attr_copy_c_proxy;
keyval_ptr->delfn.user_function = comm_delete_attr_fn;
- keyval_ptr->delfn.proxy = MPIR_Attr_delete_c_proxy;
+ keyval_ptr->delfn.proxy = MPII_Attr_delete_c_proxy;
- MPID_OBJ_PUBLISH_HANDLE(*comm_keyval, keyval_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*comm_keyval, keyval_ptr->handle);
fn_exit:
return mpi_errno;
@@ -126,12 +126,12 @@ int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
int *comm_keyval, void *extra_state)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_CREATE_KEYVAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_CREATE_KEYVAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_CREATE_KEYVAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_CREATE_KEYVAL);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -152,7 +152,7 @@ int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_CREATE_KEYVAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_CREATE_KEYVAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/comm_delete_attr.c b/src/mpi/attr/comm_delete_attr.c
index 575fe14..3ec8476 100644
--- a/src/mpi/attr/comm_delete_attr.c
+++ b/src/mpi/attr/comm_delete_attr.c
@@ -30,10 +30,10 @@ int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval) __attribute__((weak,ali
#define FUNCNAME MPIR_Comm_delete_attr_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_delete_attr_impl(MPID_Comm *comm_ptr, MPID_Keyval *keyval_ptr)
+int MPIR_Comm_delete_attr_impl(MPIR_Comm *comm_ptr, MPII_Keyval *keyval_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Attribute *p, **old_p;
+ MPIR_Attribute *p, **old_p;
/* Look for attribute. They are ordered by keyval handle */
@@ -67,9 +67,9 @@ int MPIR_Comm_delete_attr_impl(MPID_Comm *comm_ptr, MPID_Keyval *keyval_ptr)
/* We found the attribute. Remove it from the list */
*old_p = p->next;
/* Decrement the use of the keyval */
- MPIR_Keyval_release_ref( p->keyval, &in_use);
+ MPII_Keyval_release_ref( p->keyval, &in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Keyval_mem, p->keyval );
+ MPIR_Handle_obj_free( &MPII_Keyval_mem, p->keyval );
}
MPID_Attr_free(p);
}
@@ -108,14 +108,14 @@ Input Parameters:
int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Keyval *keyval_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_DELETE_ATTR);
+ MPIR_Comm *comm_ptr = NULL;
+ MPII_Keyval *keyval_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_DELETE_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_DELETE_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_DELETE_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -123,7 +123,7 @@ int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_COMM(comm, mpi_errno);
- MPIR_ERRTEST_KEYVAL(comm_keyval, MPID_COMM, "communicator", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(comm_keyval, MPIR_COMM, "communicator", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(comm_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -131,8 +131,8 @@ int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Keyval_get_ptr( comm_keyval, keyval_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPII_Keyval_get_ptr( comm_keyval, keyval_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -140,10 +140,10 @@ int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
/* Validate keyval_ptr */
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -158,7 +158,7 @@ int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_DELETE_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_DELETE_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/comm_free_keyval.c b/src/mpi/attr/comm_free_keyval.c
index ef4f6b8..289ccf8 100644
--- a/src/mpi/attr/comm_free_keyval.c
+++ b/src/mpi/attr/comm_free_keyval.c
@@ -33,14 +33,14 @@ int MPI_Comm_free_keyval(int *comm_keyval) __attribute__((weak,alias("PMPI_Comm_
void MPIR_Comm_free_keyval_impl(int keyval)
{
int in_use;
- MPID_Keyval *keyval_ptr;
+ MPII_Keyval *keyval_ptr;
- MPID_Keyval_get_ptr(keyval, keyval_ptr);
+ MPII_Keyval_get_ptr(keyval, keyval_ptr);
if (!keyval_ptr->was_freed) {
keyval_ptr->was_freed = 1;
- MPIR_Keyval_release_ref( keyval_ptr, &in_use);
+ MPII_Keyval_release_ref( keyval_ptr, &in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Keyval_mem, keyval_ptr );
+ MPIR_Handle_obj_free( &MPII_Keyval_mem, keyval_ptr );
}
}
return;
@@ -74,12 +74,12 @@ Key values are global (they can be used with any and all communicators)
int MPI_Comm_free_keyval(int *comm_keyval)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_FREE_KEYVAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_FREE_KEYVAL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,7 +87,7 @@ int MPI_Comm_free_keyval(int *comm_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_ARGNULL(comm_keyval, "comm_keyval", mpi_errno);
- MPIR_ERRTEST_KEYVAL(*comm_keyval, MPID_COMM, "communicator", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(*comm_keyval, MPIR_COMM, "communicator", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(*comm_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -99,12 +99,12 @@ int MPI_Comm_free_keyval(int *comm_keyval)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Keyval *keyval_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
/* Convert MPI object handles to object pointers */
- MPID_Keyval_get_ptr( *comm_keyval, keyval_ptr );
+ MPII_Keyval_get_ptr( *comm_keyval, keyval_ptr );
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -121,7 +121,7 @@ int MPI_Comm_free_keyval(int *comm_keyval)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_FREE_KEYVAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/comm_get_attr.c b/src/mpi/attr/comm_get_attr.c
index 74cebc1..0a93c92 100644
--- a/src/mpi/attr/comm_get_attr.c
+++ b/src/mpi/attr/comm_get_attr.c
@@ -26,7 +26,7 @@ int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *
#define MPI_Comm_get_attr PMPI_Comm_get_attr
#undef FUNCNAME
-#define FUNCNAME MPIR_CommGetAttr
+#define FUNCNAME MPII_Comm_get_attr
/* Find the requested attribute. If it exists, return either the attribute
entry or the address of the entry, based on whether the request is for
@@ -36,19 +36,19 @@ int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *
If the attribute has the same type as the request, it is returned as-is.
Otherwise, the address of the attribute is returned.
*/
-int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
- int *flag, MPIR_AttrType outAttrType )
+int MPII_Comm_get_attr( MPI_Comm comm, int comm_keyval, void *attribute_val,
+ int *flag, MPIR_Attr_type outAttrType )
{
- static const char FCNAME[] = "MPIR_CommGetAttr";
+ static const char FCNAME[] = "MPII_Comm_get_attr";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
static PreDefined_attrs attr_copy; /* Used to provide a copy of the
predefined attributes */
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_GET_ATTR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_GET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_GET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_GET_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -56,14 +56,14 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_COMM(comm, mpi_errno);
- MPIR_ERRTEST_KEYVAL(comm_keyval, MPID_COMM, "communicator", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(comm_keyval, MPIR_COMM, "communicator", mpi_errno);
# ifdef NEEDS_POINTER_ALIGNMENT_ADJUST
/* A common user error is to pass the address of a 4-byte
int when the address of a pointer (or an address-sized int)
should have been used. We can test for this specific
- case. Note that this code assumes sizeof(MPIU_Pint) is
+ case. Note that this code assumes sizeof(intptr_t) is
a power of 2. */
- if ((MPIU_Pint)attribute_val & (sizeof(MPIU_Pint)-1)) {
+ if ((intptr_t)attribute_val & (sizeof(intptr_t)-1)) {
MPIR_ERR_SETANDSTMT(mpi_errno,MPI_ERR_ARG,goto fn_fail,"**attrnotptr");
}
# endif
@@ -73,7 +73,7 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(attribute_val, "attr_val", mpi_errno);
MPIR_ERRTEST_ARGNULL(flag, "flag", mpi_errno);
@@ -105,7 +105,7 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
/* This is an address-sized int instead of a Fortran (MPI_Fint)
integer because, even for the Fortran keyvals, the C interface is
used which stores the result in a pointer (hence we need a
- pointer-sized int). Thus we use MPIU_Pint instead of MPI_Fint.
+ pointer-sized int). Thus we use intptr_t instead of MPI_Fint.
On some 64-bit plaforms, such as Solaris-SPARC, using an MPI_Fint
will cause the value to placed into the high, rather than low,
end of the output value. */
@@ -203,7 +203,7 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
version of INTEGER (KIND=MPI_ADDRESS_KIND) ) */
if (*flag) {
/* Use the internal pointer-sized-int for systems (e.g., BG/P)
- that define MPI_Aint as a different size than MPIU_Pint.
+ that define MPI_Aint as a different size than intptr_t.
The casts must be as they are:
On the right, the value is a pointer to an int, so to
get the correct value, we need to extract the int.
@@ -212,12 +212,12 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
/* FIXME: This code is broken. The MPIR_ATTR_INT is for Fortran
MPI_Fint types, not int, and MPIR_ATTR_AINT is for Fortran
INTEGER(KIND=MPI_ADDRESS_KIND), which is probably an MPI_Aint,
- and MPIU_Pint is for exactly the case where MPI_Aint is not
- the same as MPIU_Pint.
+ and intptr_t is for exactly the case where MPI_Aint is not
+ the same as intptr_t.
This code needs to be fixed in every place that it occurs
(i.e., see the win and type get_attr routines). */
if (outAttrType == MPIR_ATTR_AINT)
- *(MPIU_Pint*)attr_val_p = *(int*)*(void **)attr_val_p;
+ *(intptr_t*)attr_val_p = *(int*)*(void **)attr_val_p;
else if (outAttrType == MPIR_ATTR_INT) {
/* *(int*)attr_val_p = *(int *)*(void **)attr_val_p;*/
/* This is correct, because the cooresponding code
@@ -226,12 +226,12 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
endian systems. Any changes made here must have
corresponding changes in src/binding/f77/attr_getf.c ,
which is generated by src/binding/f77/buildiface . */
- *(MPIU_Pint*)attr_val_p = *(int*)*(void **)attr_val_p;
+ *(intptr_t*)attr_val_p = *(int*)*(void **)attr_val_p;
}
}
}
else {
- MPID_Attribute *p = comm_ptr->attributes;
+ MPIR_Attribute *p = comm_ptr->attributes;
/* */
*flag = 0;
@@ -260,11 +260,11 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
*(void**)attribute_val = &(p->value);
}
else {
- *(void**)attribute_val = (void *)(MPIU_Pint)(p->value);
+ *(void**)attribute_val = (void *)(intptr_t)(p->value);
}
}
else {
- *(void**)attribute_val = (void *)(MPIU_Pint)(p->value);
+ *(void**)attribute_val = (void *)(intptr_t)(p->value);
}
break;
@@ -275,7 +275,7 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_GET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_GET_ATTR);
return mpi_errno;
fn_fail:
@@ -294,14 +294,14 @@ int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
/* This function is called by the fortran bindings. */
/* FIXME: There is no reason to have this routine since it unnecessarily
- duplicates the MPIR_CommGetAttr interface. */
-int MPIR_CommGetAttr_fort(MPI_Comm comm, int comm_keyval, void *attribute_val,
- int *flag, MPIR_AttrType outAttrType )
+ duplicates the MPII_Comm_get_attr interface. */
+int MPII_Comm_get_attr_fort(MPI_Comm comm, int comm_keyval, void *attribute_val,
+ int *flag, MPIR_Attr_type outAttrType )
{
int mpi_errno;
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- mpi_errno = MPIR_CommGetAttr(comm, comm_keyval, attribute_val, flag, outAttrType);
+ mpi_errno = MPII_Comm_get_attr(comm, comm_keyval, attribute_val, flag, outAttrType);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -351,21 +351,21 @@ int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val,
int *flag)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_GET_ATTR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_GET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_GET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_GET_ATTR);
/* Instead, ask for a desired type. */
- mpi_errno = MPIR_CommGetAttr( comm, comm_keyval, attribute_val, flag,
+ mpi_errno = MPII_Comm_get_attr( comm, comm_keyval, attribute_val, flag,
MPIR_ATTR_PTR );
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_GET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_GET_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/comm_set_attr.c b/src/mpi/attr/comm_set_attr.c
index bca3a6e..c66a495 100644
--- a/src/mpi/attr/comm_set_attr.c
+++ b/src/mpi/attr/comm_set_attr.c
@@ -30,12 +30,12 @@ int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val) __att
#define FUNCNAME MPIR_Comm_set_attr_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_set_attr_impl(MPID_Comm *comm_ptr, int comm_keyval, void *attribute_val,
- MPIR_AttrType attrType)
+int MPIR_Comm_set_attr_impl(MPIR_Comm *comm_ptr, int comm_keyval, void *attribute_val,
+ MPIR_Attr_type attrType)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Keyval *keyval_ptr = NULL;
- MPID_Attribute *p;
+ MPII_Keyval *keyval_ptr = NULL;
+ MPIR_Attribute *p;
MPIR_ERR_CHKANDJUMP(comm_keyval == MPI_KEYVAL_INVALID, mpi_errno, MPI_ERR_KEYVAL, "**keyvalinvalid");
@@ -44,8 +44,8 @@ int MPIR_Comm_set_attr_impl(MPID_Comm *comm_ptr, int comm_keyval, void *attribut
a simple linear list algorithm because few applications use more than a
handful of attributes */
- MPID_Keyval_get_ptr( comm_keyval, keyval_ptr );
- MPIU_Assert(keyval_ptr != NULL);
+ MPII_Keyval_get_ptr( comm_keyval, keyval_ptr );
+ MPIR_Assert(keyval_ptr != NULL);
/* printf( "Setting attr val to %x\n", attribute_val ); */
p = comm_ptr->attributes;
@@ -59,13 +59,13 @@ int MPIR_Comm_set_attr_impl(MPID_Comm *comm_ptr, int comm_keyval, void *attribut
}
p->attrType = attrType;
/* FIXME: This code is incorrect in some cases, particularly
- in the case where MPIU_Pint is different from MPI_Aint,
+ in the case where intptr_t is different from MPI_Aint,
since in that case, the Fortran 9x interface will provide
more bytes in the attribute_val than this allows. The
dual casts are a sign that this is faulty. This will
need to be fixed in the type/win set_attr routines as
well. */
- p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
/* printf( "Updating attr at %x\n", &p->value ); */
/* Does not change the reference count on the keyval */
break;
@@ -74,24 +74,24 @@ int MPIR_Comm_set_attr_impl(MPID_Comm *comm_ptr, int comm_keyval, void *attribut
}
/* CHANGE FOR MPI 2.2: If not found, add at the beginning */
if (!p) {
- MPID_Attribute *new_p = MPID_Attr_alloc();
+ MPIR_Attribute *new_p = MPID_Attr_alloc();
MPIR_ERR_CHKANDJUMP(!new_p,mpi_errno,MPI_ERR_OTHER,"**nomem");
/* Did not find in list. Add at end */
new_p->keyval = keyval_ptr;
new_p->attrType = attrType;
new_p->pre_sentinal = 0;
/* FIXME: See the comment above on this dual cast. */
- new_p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ new_p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
new_p->post_sentinal = 0;
new_p->next = comm_ptr->attributes;
- MPIR_Keyval_add_ref( keyval_ptr );
+ MPII_Keyval_add_ref( keyval_ptr );
comm_ptr->attributes = new_p;
/* printf( "Creating attr at %x\n", &new_p->value ); */
}
/* Here is where we could add a hook for the device to detect attribute
value changes, using something like
- MPID_Dev_comm_attr_hook( comm_ptr, keyval, attribute_val );
+ MPID_Comm_attr_hook( comm_ptr, keyval, attribute_val );
*/
@@ -103,20 +103,20 @@ int MPIR_Comm_set_attr_impl(MPID_Comm *comm_ptr, int comm_keyval, void *attribut
#undef FUNCNAME
-#define FUNCNAME MPIR_CommSetAttr
+#define FUNCNAME MPII_Comm_set_attr
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_CommSetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
- MPIR_AttrType attrType )
+int MPII_Comm_set_attr( MPI_Comm comm, int comm_keyval, void *attribute_val,
+ MPIR_Attr_type attrType )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_SET_ATTR);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_SET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_SET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_SET_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -124,7 +124,7 @@ int MPIR_CommSetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_COMM(comm, mpi_errno);
- MPIR_ERRTEST_KEYVAL(comm_keyval, MPID_COMM, "communicator", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(comm_keyval, MPIR_COMM, "communicator", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(comm_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -132,21 +132,21 @@ int MPIR_CommSetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Keyval *keyval_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
/* Validate keyval_ptr */
- MPID_Keyval_get_ptr( comm_keyval, keyval_ptr );
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_get_ptr( comm_keyval, keyval_ptr );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -160,7 +160,7 @@ int MPIR_CommSetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_SET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_SET_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -219,11 +219,11 @@ corresponding keyval was created) will be called.
int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SET_ATTR);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SET_ATTR);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SET_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -231,7 +231,7 @@ int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_COMM(comm, mpi_errno);
- MPIR_ERRTEST_KEYVAL(comm_keyval, MPID_COMM, "communicator", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(comm_keyval, MPIR_COMM, "communicator", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(comm_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -239,21 +239,21 @@ int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Keyval *keyval_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
/* Validate keyval_ptr */
- MPID_Keyval_get_ptr( comm_keyval, keyval_ptr );
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_get_ptr( comm_keyval, keyval_ptr );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -266,7 +266,7 @@ int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SET_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/dup_fn.c b/src/mpi/attr/dup_fn.c
index 08ccdbe..e6f11da 100644
--- a/src/mpi/attr/dup_fn.c
+++ b/src/mpi/attr/dup_fn.c
@@ -19,9 +19,9 @@ int MPIR_Dup_fn ( MPI_Comm comm ATTRIBUTE((unused)),
{
/* No error checking at present */
- MPIU_UNREFERENCED_ARG(comm);
- MPIU_UNREFERENCED_ARG(keyval);
- MPIU_UNREFERENCED_ARG(extra_state);
+ MPL_UNREFERENCED_ARG(comm);
+ MPL_UNREFERENCED_ARG(keyval);
+ MPL_UNREFERENCED_ARG(extra_state);
/* Set attr_out, the flag and return success */
(*(void **)attr_out) = attr_in;
diff --git a/src/mpi/attr/keyval_create.c b/src/mpi/attr/keyval_create.c
index 0b90d3f..1e0282c 100644
--- a/src/mpi/attr/keyval_create.c
+++ b/src/mpi/attr/keyval_create.c
@@ -72,12 +72,12 @@ int MPI_Keyval_create(MPI_Copy_function *copy_fn,
{
static const char FCNAME[] = "MPI_Keyval_create";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_KEYVAL_CREATE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_KEYVAL_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_KEYVAL_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_KEYVAL_CREATE);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -98,7 +98,7 @@ int MPI_Keyval_create(MPI_Copy_function *copy_fn,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_KEYVAL_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_KEYVAL_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/keyval_free.c b/src/mpi/attr/keyval_free.c
index 2ec22d0..b221a64 100644
--- a/src/mpi/attr/keyval_free.c
+++ b/src/mpi/attr/keyval_free.c
@@ -59,12 +59,12 @@ int MPI_Keyval_free(int *keyval)
{
static const char FCNAME[] = "MPI_Keyval_free";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_KEYVAL_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_KEYVAL_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_KEYVAL_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_KEYVAL_FREE);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
@@ -80,12 +80,12 @@ int MPI_Keyval_free(int *keyval)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Keyval *keyval_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
/* Convert MPI object handles to object pointers */
- MPID_Keyval_get_ptr( *keyval, keyval_ptr );
+ MPII_Keyval_get_ptr( *keyval, keyval_ptr );
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -100,7 +100,7 @@ int MPI_Keyval_free(int *keyval)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_KEYVAL_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_KEYVAL_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/type_create_keyval.c b/src/mpi/attr/type_create_keyval.c
index f9436cb..6a95b31 100644
--- a/src/mpi/attr/type_create_keyval.c
+++ b/src/mpi/attr/type_create_keyval.c
@@ -76,13 +76,13 @@ int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
{
static const char FCNAME[] = "MPI_Type_create_keyval";
int mpi_errno = MPI_SUCCESS;
- MPID_Keyval *keyval_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_KEYVAL);
+ MPII_Keyval *keyval_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_KEYVAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_KEYVAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_KEYVAL);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -97,7 +97,7 @@ int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
/* ... body of routine ... */
- keyval_ptr = (MPID_Keyval *)MPIU_Handle_obj_alloc( &MPID_Keyval_mem );
+ keyval_ptr = (MPII_Keyval *)MPIR_Handle_obj_alloc( &MPII_Keyval_mem );
MPIR_ERR_CHKANDJUMP(!keyval_ptr,mpi_errno,MPI_ERR_OTHER,"**nomem");
/* Initialize the attribute dup function */
@@ -109,25 +109,25 @@ int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
/* The handle encodes the keyval kind. Modify it to have the correct
field */
keyval_ptr->handle = (keyval_ptr->handle & ~(0x03c00000)) |
- (MPID_DATATYPE << 22);
- MPIU_Object_set_ref(keyval_ptr,1);
+ (MPIR_DATATYPE << 22);
+ MPIR_Object_set_ref(keyval_ptr,1);
keyval_ptr->was_freed = 0;
- keyval_ptr->kind = MPID_DATATYPE;
+ keyval_ptr->kind = MPIR_DATATYPE;
keyval_ptr->extra_state = extra_state;
keyval_ptr->copyfn.user_function = type_copy_attr_fn;
- keyval_ptr->copyfn.proxy = MPIR_Attr_copy_c_proxy;
+ keyval_ptr->copyfn.proxy = MPII_Attr_copy_c_proxy;
keyval_ptr->delfn.user_function = type_delete_attr_fn;
- keyval_ptr->delfn.proxy = MPIR_Attr_delete_c_proxy;
+ keyval_ptr->delfn.proxy = MPII_Attr_delete_c_proxy;
/* Tell finalize to check for attributes on permenant types */
- MPIR_DatatypeAttrFinalize();
+ MPII_Datatype_attr_finalize();
- MPID_OBJ_PUBLISH_HANDLE(*type_keyval, keyval_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*type_keyval, keyval_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_KEYVAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_KEYVAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/type_delete_attr.c b/src/mpi/attr/type_delete_attr.c
index 42ba73c..5010ede 100644
--- a/src/mpi/attr/type_delete_attr.c
+++ b/src/mpi/attr/type_delete_attr.c
@@ -52,17 +52,17 @@ int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval)
{
static const char FCNAME[] = "MPI_Type_delete_attr";
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *type_ptr = NULL;
- MPID_Attribute *p, **old_p;
- MPID_Keyval *keyval_ptr = 0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_DELETE_ATTR);
+ MPIR_Datatype *type_ptr = NULL;
+ MPIR_Attribute *p, **old_p;
+ MPII_Keyval *keyval_ptr = 0;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_DELETE_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* The thread lock prevents a valid attr delete on the same datatype
but in a different thread from causing problems */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_DELETE_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_DELETE_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -70,7 +70,7 @@ int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
- MPIR_ERRTEST_KEYVAL(type_keyval, MPID_DATATYPE, "datatype", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(type_keyval, MPIR_DATATYPE, "datatype", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(type_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -79,7 +79,7 @@ int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval)
/* Validate parameters and objects (post conversion) */
MPID_Datatype_get_ptr( datatype, type_ptr );
- MPID_Keyval_get_ptr( type_keyval, keyval_ptr );
+ MPII_Keyval_get_ptr( type_keyval, keyval_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -87,7 +87,7 @@ int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate type_ptr */
- MPID_Datatype_valid_ptr( type_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( type_ptr, mpi_errno );
/* If type_ptr is not valid, it will be reset to null */
/* Validate keyval_ptr */
if (mpi_errno) goto fn_fail;
@@ -129,10 +129,10 @@ int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval)
/* We found the attribute. Remove it from the list */
*old_p = p->next;
/* Decrement the use of the keyval */
- MPIR_Keyval_release_ref( p->keyval, &in_use);
+ MPII_Keyval_release_ref( p->keyval, &in_use);
if (!in_use)
{
- MPIU_Handle_obj_free( &MPID_Keyval_mem, p->keyval );
+ MPIR_Handle_obj_free( &MPII_Keyval_mem, p->keyval );
}
MPID_Attr_free(p);
}
@@ -144,7 +144,7 @@ int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_DELETE_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_DELETE_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/type_free_keyval.c b/src/mpi/attr/type_free_keyval.c
index af60949..17e524f 100644
--- a/src/mpi/attr/type_free_keyval.c
+++ b/src/mpi/attr/type_free_keyval.c
@@ -51,15 +51,15 @@ int MPI_Type_free_keyval(int *type_keyval)
#ifdef HAVE_ERROR_CHECKING
static const char FCNAME[] = "MPI_Type_free_keyval";
#endif
- MPID_Keyval *keyval_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
int in_use;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_FREE_KEYVAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_FREE_KEYVAL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -67,7 +67,7 @@ int MPI_Type_free_keyval(int *type_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_ARGNULL(type_keyval, "type_keyval", mpi_errno);
- MPIR_ERRTEST_KEYVAL(*type_keyval, MPID_DATATYPE, "datatype", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(*type_keyval, MPIR_DATATYPE, "datatype", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(*type_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -75,14 +75,14 @@ int MPI_Type_free_keyval(int *type_keyval)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Keyval_get_ptr( *type_keyval, keyval_ptr );
+ MPII_Keyval_get_ptr( *type_keyval, keyval_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -93,9 +93,9 @@ int MPI_Type_free_keyval(int *type_keyval)
if (!keyval_ptr->was_freed) {
keyval_ptr->was_freed = 1;
- MPIR_Keyval_release_ref( keyval_ptr, &in_use);
+ MPII_Keyval_release_ref( keyval_ptr, &in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Keyval_mem, keyval_ptr );
+ MPIR_Handle_obj_free( &MPII_Keyval_mem, keyval_ptr );
}
}
*type_keyval = MPI_KEYVAL_INVALID;
@@ -105,7 +105,7 @@ int MPI_Type_free_keyval(int *type_keyval)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_FREE_KEYVAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/type_get_attr.c b/src/mpi/attr/type_get_attr.c
index a7d736a..49cba5b 100644
--- a/src/mpi/attr/type_get_attr.c
+++ b/src/mpi/attr/type_get_attr.c
@@ -27,23 +27,23 @@ int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_va
#define MPI_Type_get_attr PMPI_Type_get_attr
#undef FUNCNAME
-#define FUNCNAME MPIR_TypeGetAttr
+#define FUNCNAME MPII_Type_get_attr
-int MPIR_TypeGetAttr( MPI_Datatype datatype, int type_keyval, void *attribute_val,
- int *flag, MPIR_AttrType outAttrType )
+int MPII_Type_get_attr( MPI_Datatype datatype, int type_keyval, void *attribute_val,
+ int *flag, MPIR_Attr_type outAttrType )
{
#ifdef HAVE_ERROR_CHECKING
static const char FCNAME[] = "MPI_Type_get_attr";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *type_ptr = NULL;
- MPID_Attribute *p;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_TYPE_GET_ATTR);
+ MPIR_Datatype *type_ptr = NULL;
+ MPIR_Attribute *p;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_TYPE_GET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_TYPE_GET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_TYPE_GET_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -51,14 +51,14 @@ int MPIR_TypeGetAttr( MPI_Datatype datatype, int type_keyval, void *attribute_va
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
- MPIR_ERRTEST_KEYVAL(type_keyval, MPID_DATATYPE, "datatype", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(type_keyval, MPIR_DATATYPE, "datatype", mpi_errno);
# ifdef NEEDS_POINTER_ALIGNMENT_ADJUST
/* A common user error is to pass the address of a 4-byte
int when the address of a pointer (or an address-sized int)
should have been used. We can test for this specific
- case. Note that this code assumes sizeof(MPIU_Pint) is
+ case. Note that this code assumes sizeof(intptr_t) is
a power of 2. */
- if ((MPIU_Pint)attribute_val & (sizeof(MPIU_Pint)-1)) {
+ if ((intptr_t)attribute_val & (sizeof(intptr_t)-1)) {
MPIR_ERR_SETANDSTMT(mpi_errno,MPI_ERR_ARG,goto fn_fail,"**attrnotptr");
}
# endif
@@ -76,7 +76,7 @@ int MPIR_TypeGetAttr( MPI_Datatype datatype, int type_keyval, void *attribute_va
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate datatype pointer */
- MPID_Datatype_valid_ptr( type_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( type_ptr, mpi_errno );
/* If type_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -113,11 +113,11 @@ int MPIR_TypeGetAttr( MPI_Datatype datatype, int type_keyval, void *attribute_va
*(void**)attribute_val = &(p->value);
}
else {
- *(void**)attribute_val = (void *)(MPIU_Pint)(p->value);
+ *(void**)attribute_val = (void *)(intptr_t)(p->value);
}
}
else
- *(void**)attribute_val = (void *)(MPIU_Pint)(p->value);
+ *(void**)attribute_val = (void *)(intptr_t)(p->value);
break;
}
@@ -129,7 +129,7 @@ int MPIR_TypeGetAttr( MPI_Datatype datatype, int type_keyval, void *attribute_va
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_TYPE_GET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_TYPE_GET_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -189,21 +189,21 @@ int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_va
int *flag)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_ATTR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_ATTR);
/* ... body of routine ... */
- mpi_errno = MPIR_TypeGetAttr( datatype, type_keyval, attribute_val, flag,
+ mpi_errno = MPII_Type_get_attr( datatype, type_keyval, attribute_val, flag,
MPIR_ATTR_PTR );
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_ATTR);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/attr/type_set_attr.c b/src/mpi/attr/type_set_attr.c
index e36badd..b9d2b1d 100644
--- a/src/mpi/attr/type_set_attr.c
+++ b/src/mpi/attr/type_set_attr.c
@@ -27,23 +27,23 @@ int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_va
#define MPI_Type_set_attr PMPI_Type_set_attr
#undef FUNCNAME
-#define FUNCNAME MPIR_TypeSetAttr
-int MPIR_TypeSetAttr(MPI_Datatype datatype, int type_keyval, void *attribute_val,
- MPIR_AttrType attrType )
+#define FUNCNAME MPII_Type_set_attr
+int MPII_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val,
+ MPIR_Attr_type attrType )
{
- static const char FCNAME[] = "MPIR_TypeSetAttr";
+ static const char FCNAME[] = "MPII_Type_set_attr";
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *type_ptr = NULL;
- MPID_Keyval *keyval_ptr = NULL;
- MPID_Attribute *p, **old_p;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_TYPE_SET_ATTR);
+ MPIR_Datatype *type_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
+ MPIR_Attribute *p, **old_p;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_TYPE_SET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* The thread lock prevents a valid attr delete on the same datatype
but in a different thread from causing problems */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_TYPE_SET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_TYPE_SET_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -51,7 +51,7 @@ int MPIR_TypeSetAttr(MPI_Datatype datatype, int type_keyval, void *attribute_val
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
- MPIR_ERRTEST_KEYVAL(type_keyval, MPID_DATATYPE, "datatype", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(type_keyval, MPIR_DATATYPE, "datatype", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(type_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -60,7 +60,7 @@ int MPIR_TypeSetAttr(MPI_Datatype datatype, int type_keyval, void *attribute_val
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr( datatype, type_ptr );
- MPID_Keyval_get_ptr( type_keyval, keyval_ptr );
+ MPII_Keyval_get_ptr( type_keyval, keyval_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -68,10 +68,10 @@ int MPIR_TypeSetAttr(MPI_Datatype datatype, int type_keyval, void *attribute_val
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate type_ptr */
- MPID_Datatype_valid_ptr( type_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( type_ptr, mpi_errno );
/* If type_ptr is not valid, it will be reset to null */
/* Validate keyval_ptr */
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -95,21 +95,21 @@ int MPIR_TypeSetAttr(MPI_Datatype datatype, int type_keyval, void *attribute_val
goto fn_fail;
}
/* --END ERROR HANDLING-- */
- p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
p->attrType = attrType;
break;
}
else if (p->keyval->handle > keyval_ptr->handle) {
- MPID_Attribute *new_p = MPID_Attr_alloc();
+ MPIR_Attribute *new_p = MPID_Attr_alloc();
MPIR_ERR_CHKANDJUMP1(!new_p,mpi_errno,MPI_ERR_OTHER,
- "**nomem","**nomem %s", "MPID_Attribute" );
+ "**nomem","**nomem %s", "MPIR_Attribute" );
new_p->keyval = keyval_ptr;
new_p->attrType = attrType;
new_p->pre_sentinal = 0;
- new_p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ new_p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
new_p->post_sentinal = 0;
new_p->next = p->next;
- MPIR_Keyval_add_ref( keyval_ptr );
+ MPII_Keyval_add_ref( keyval_ptr );
p->next = new_p;
break;
}
@@ -118,29 +118,29 @@ int MPIR_TypeSetAttr(MPI_Datatype datatype, int type_keyval, void *attribute_val
}
if (!p)
{
- MPID_Attribute *new_p = MPID_Attr_alloc();
+ MPIR_Attribute *new_p = MPID_Attr_alloc();
MPIR_ERR_CHKANDJUMP1(!new_p,mpi_errno,MPI_ERR_OTHER,
- "**nomem","**nomem %s", "MPID_Attribute" );
+ "**nomem","**nomem %s", "MPIR_Attribute" );
/* Did not find in list. Add at end */
new_p->keyval = keyval_ptr;
new_p->attrType = attrType;
new_p->pre_sentinal = 0;
- new_p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ new_p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
new_p->post_sentinal = 0;
new_p->next = 0;
- MPIR_Keyval_add_ref( keyval_ptr );
+ MPII_Keyval_add_ref( keyval_ptr );
*old_p = new_p;
}
/* Here is where we could add a hook for the device to detect attribute
value changes, using something like
- MPID_Dev_type_attr_hook( type_ptr, keyval, attribute_val );
+ MPID_Type_attr_hook( type_ptr, keyval, attribute_val );
*/
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_TYPE_SET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_TYPE_SET_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -190,18 +190,18 @@ int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_va
{
static const char FCNAME[] = "MPI_Type_set_attr";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_SET_ATTR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_SET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_SET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_SET_ATTR);
- mpi_errno = MPIR_TypeSetAttr( datatype, type_keyval, attribute_val,
+ mpi_errno = MPII_Type_set_attr( datatype, type_keyval, attribute_val,
MPIR_ATTR_PTR );
if (mpi_errno) goto fn_fail;
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_SET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_SET_ATTR);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/attr/win_create_keyval.c b/src/mpi/attr/win_create_keyval.c
index 433869a..e0cd788 100644
--- a/src/mpi/attr/win_create_keyval.c
+++ b/src/mpi/attr/win_create_keyval.c
@@ -76,13 +76,13 @@ int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
{
static const char FCNAME[] = "MPI_Win_create_keyval";
int mpi_errno = MPI_SUCCESS;
- MPID_Keyval *keyval_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_CREATE_KEYVAL);
+ MPII_Keyval *keyval_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_CREATE_KEYVAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_CREATE_KEYVAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_CREATE_KEYVAL);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -97,9 +97,9 @@ int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
/* ... body of routine ... */
- keyval_ptr = (MPID_Keyval *)MPIU_Handle_obj_alloc( &MPID_Keyval_mem );
+ keyval_ptr = (MPII_Keyval *)MPIR_Handle_obj_alloc( &MPII_Keyval_mem );
MPIR_ERR_CHKANDJUMP1(!keyval_ptr,mpi_errno,MPI_ERR_OTHER,"**nomem",
- "**nomem %s", "MPID_Keyval" );
+ "**nomem %s", "MPII_Keyval" );
/* Initialize the attribute dup function */
if (!MPIR_Process.attr_dup) {
MPIR_Process.attr_dup = MPIR_Attr_dup_list;
@@ -109,21 +109,21 @@ int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
/* The handle encodes the keyval kind. Modify it to have the correct
field */
keyval_ptr->handle = (keyval_ptr->handle & ~(0x03c00000)) |
- (MPID_WIN << 22);
- MPIU_Object_set_ref(keyval_ptr,1);
+ (MPIR_WIN << 22);
+ MPIR_Object_set_ref(keyval_ptr,1);
keyval_ptr->was_freed = 0;
- keyval_ptr->kind = MPID_WIN;
+ keyval_ptr->kind = MPIR_WIN;
keyval_ptr->extra_state = extra_state;
keyval_ptr->copyfn.user_function = win_copy_attr_fn;
- keyval_ptr->copyfn.proxy = MPIR_Attr_copy_c_proxy;
+ keyval_ptr->copyfn.proxy = MPII_Attr_copy_c_proxy;
keyval_ptr->delfn.user_function = win_delete_attr_fn;
- keyval_ptr->delfn.proxy = MPIR_Attr_delete_c_proxy;
+ keyval_ptr->delfn.proxy = MPII_Attr_delete_c_proxy;
- MPID_OBJ_PUBLISH_HANDLE(*win_keyval, keyval_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*win_keyval, keyval_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_CREATE_KEYVAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_CREATE_KEYVAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/win_delete_attr.c b/src/mpi/attr/win_delete_attr.c
index bfea642..029b55f 100644
--- a/src/mpi/attr/win_delete_attr.c
+++ b/src/mpi/attr/win_delete_attr.c
@@ -53,17 +53,17 @@ int MPI_Win_delete_attr(MPI_Win win, int win_keyval)
{
static const char FCNAME[] = "MPI_Win_delete_attr";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Attribute *p, **old_p;
- MPID_Keyval *keyval_ptr=0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_DELETE_ATTR);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Attribute *p, **old_p;
+ MPII_Keyval *keyval_ptr=0;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_DELETE_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* The thread lock prevents a valid attr delete on the same window
but in a different thread from causing problems */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_DELETE_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_DELETE_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -71,7 +71,7 @@ int MPI_Win_delete_attr(MPI_Win win, int win_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_WIN(win, mpi_errno);
- MPIR_ERRTEST_KEYVAL(win_keyval, MPID_WIN, "window", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(win_keyval, MPIR_WIN, "window", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(win_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -79,18 +79,18 @@ int MPI_Win_delete_attr(MPI_Win win, int win_keyval)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
- MPID_Keyval_get_ptr( win_keyval, keyval_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
+ MPII_Keyval_get_ptr( win_keyval, keyval_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
/* Validate keyval_ptr */
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -128,10 +128,10 @@ int MPI_Win_delete_attr(MPI_Win win, int win_keyval)
/* We found the attribute. Remove it from the list */
*old_p = p->next;
/* Decrement the use of the keyval */
- MPIR_Keyval_release_ref( p->keyval, &in_use);
+ MPII_Keyval_release_ref( p->keyval, &in_use);
if (!in_use)
{
- MPIU_Handle_obj_free( &MPID_Keyval_mem, p->keyval );
+ MPIR_Handle_obj_free( &MPII_Keyval_mem, p->keyval );
}
MPID_Attr_free(p);
}
@@ -143,7 +143,7 @@ int MPI_Win_delete_attr(MPI_Win win, int win_keyval)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_DELETE_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_DELETE_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/win_free_keyval.c b/src/mpi/attr/win_free_keyval.c
index 67d516c..60a0898 100644
--- a/src/mpi/attr/win_free_keyval.c
+++ b/src/mpi/attr/win_free_keyval.c
@@ -53,14 +53,14 @@ int MPI_Win_free_keyval(int *win_keyval)
static const char FCNAME[] = "MPI_Win_free_keyval";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_Keyval *keyval_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
int in_use;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_FREE_KEYVAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_FREE_KEYVAL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -68,7 +68,7 @@ int MPI_Win_free_keyval(int *win_keyval)
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_ARGNULL(*win_keyval, "win_keyval", mpi_errno);
- MPIR_ERRTEST_KEYVAL(*win_keyval, MPID_WIN, "window", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(*win_keyval, MPIR_WIN, "window", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(*win_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -76,14 +76,14 @@ int MPI_Win_free_keyval(int *win_keyval)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Keyval_get_ptr( *win_keyval, keyval_ptr );
+ MPII_Keyval_get_ptr( *win_keyval, keyval_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -94,9 +94,9 @@ int MPI_Win_free_keyval(int *win_keyval)
if (!keyval_ptr->was_freed) {
keyval_ptr->was_freed = 1;
- MPIR_Keyval_release_ref( keyval_ptr, &in_use);
+ MPII_Keyval_release_ref( keyval_ptr, &in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Keyval_mem, keyval_ptr );
+ MPIR_Handle_obj_free( &MPII_Keyval_mem, keyval_ptr );
}
}
*win_keyval = MPI_KEYVAL_INVALID;
@@ -106,7 +106,7 @@ int MPI_Win_free_keyval(int *win_keyval)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_FREE_KEYVAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_FREE_KEYVAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/attr/win_get_attr.c b/src/mpi/attr/win_get_attr.c
index bf0e94c..456ce73 100644
--- a/src/mpi/attr/win_get_attr.c
+++ b/src/mpi/attr/win_get_attr.c
@@ -26,20 +26,20 @@ int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag
#define MPI_Win_get_attr PMPI_Win_get_attr
#undef FUNCNAME
-#define FUNCNAME MPIR_WinGetAttr
+#define FUNCNAME MPII_Win_get_attr
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
- int *flag, MPIR_AttrType outAttrType )
+int MPII_Win_get_attr( MPI_Win win, int win_keyval, void *attribute_val,
+ int *flag, MPIR_Attr_type outAttrType )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_WIN_GET_ATTR);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_WIN_GET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_WIN_GET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_WIN_GET_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -47,14 +47,14 @@ int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_WIN(win, mpi_errno);
- MPIR_ERRTEST_KEYVAL(win_keyval, MPID_WIN, "window", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(win_keyval, MPIR_WIN, "window", mpi_errno);
# ifdef NEEDS_POINTER_ALIGNMENT_ADJUST
/* A common user error is to pass the address of a 4-byte
int when the address of a pointer (or an address-sized int)
should have been used. We can test for this specific
- case. Note that this code assumes sizeof(MPIU_Pint) is
+ case. Note that this code assumes sizeof(intptr_t) is
a power of 2. */
- if ((MPIU_Pint)attribute_val & (sizeof(MPIU_Pint)-1)) {
+ if ((intptr_t)attribute_val & (sizeof(intptr_t)-1)) {
MPIR_ERR_SETANDSTMT(mpi_errno,MPI_ERR_ARG,goto fn_fail,"**attrnotptr");
}
# endif
@@ -64,7 +64,7 @@ int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -72,7 +72,7 @@ int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(attribute_val, "attribute_val", mpi_errno);
MPIR_ERRTEST_ARGNULL(flag, "flag", mpi_errno);
@@ -94,7 +94,7 @@ int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
#ifdef HAVE_FORTRAN_BINDING
/* Note that this routine only has a Fortran 90 binding,
so the attribute value is an address-sized int */
- MPIU_Pint *attr_int = (MPIU_Pint *)attribute_val;
+ intptr_t *attr_int = (intptr_t *)attribute_val;
#endif
*flag = 1;
@@ -124,35 +124,35 @@ int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
*attr_val_p = &win_ptr->copyModel;
break;
#ifdef HAVE_FORTRAN_BINDING
- case MPIR_ATTR_C_TO_FORTRAN(MPI_WIN_BASE):
+ case MPII_ATTR_C_TO_FORTRAN(MPI_WIN_BASE):
/* The Fortran routine that matches this routine should
provide an address-sized integer, not an MPI_Fint */
- *attr_int = MPIU_VOID_PTR_CAST_TO_MPI_AINT(win_ptr->base);
+ *attr_int = MPIR_VOID_PTR_CAST_TO_MPI_AINT(win_ptr->base);
break;
- case MPIR_ATTR_C_TO_FORTRAN(MPI_WIN_SIZE):
+ case MPII_ATTR_C_TO_FORTRAN(MPI_WIN_SIZE):
/* We do not need to copy because we return the value,
not a pointer to the value */
*attr_int = win_ptr->size;
break;
- case MPIR_ATTR_C_TO_FORTRAN(MPI_WIN_DISP_UNIT):
+ case MPII_ATTR_C_TO_FORTRAN(MPI_WIN_DISP_UNIT):
/* We do not need to copy because we return the value,
not a pointer to the value */
*attr_int = win_ptr->disp_unit;
break;
- case MPIR_ATTR_C_TO_FORTRAN(MPI_WIN_CREATE_FLAVOR):
+ case MPII_ATTR_C_TO_FORTRAN(MPI_WIN_CREATE_FLAVOR):
*attr_int = win_ptr->create_flavor;
break;
- case MPIR_ATTR_C_TO_FORTRAN(MPI_WIN_MODEL):
+ case MPII_ATTR_C_TO_FORTRAN(MPI_WIN_MODEL):
*attr_int = win_ptr->model;
break;
#endif
default:
- MPIU_Assert(FALSE);
+ MPIR_Assert(FALSE);
break;
}
}
else {
- MPID_Attribute *p = win_ptr->attributes;
+ MPIR_Attribute *p = win_ptr->attributes;
*flag = 0;
while (p) {
@@ -180,11 +180,11 @@ int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
*(void**)attribute_val = &(p->value);
}
else {
- *(void**)attribute_val = (void *)(MPIU_Pint)(p->value);
+ *(void**)attribute_val = (void *)(intptr_t)(p->value);
}
}
else
- *(void**)attribute_val = (void *)(MPIU_Pint)(p->value);
+ *(void**)attribute_val = (void *)(intptr_t)(p->value);
break;
}
@@ -197,7 +197,7 @@ int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val,
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_WIN_GET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_WIN_GET_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -255,22 +255,22 @@ int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val,
{
int mpi_errno = MPI_SUCCESS;
#ifdef HAVE_ERROR_CHECKING
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
#endif
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_GET_ATTR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_GET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_GET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_GET_ATTR);
/* ... body of routine ... */
- mpi_errno = MPIR_WinGetAttr( win, win_keyval, attribute_val, flag,
+ mpi_errno = MPII_Win_get_attr( win, win_keyval, attribute_val, flag,
MPIR_ATTR_PTR );
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_GET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_GET_ATTR);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -283,7 +283,7 @@ int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val,
"**mpi_win_get_attr %W %d %p %p",
win, win_keyval, attribute_val, flag);
}
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
mpi_errno = MPIR_Err_return_win( win_ptr, FCNAME, mpi_errno );
#endif
goto fn_exit;
diff --git a/src/mpi/attr/win_set_attr.c b/src/mpi/attr/win_set_attr.c
index 94d7dc0..ed4f9e5 100644
--- a/src/mpi/attr/win_set_attr.c
+++ b/src/mpi/attr/win_set_attr.c
@@ -27,23 +27,23 @@ int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) __attribu
#define MPI_Win_set_attr PMPI_Win_set_attr
#undef FUNCNAME
-#define FUNCNAME MPIR_WinSetAttr
-int MPIR_WinSetAttr( MPI_Win win, int win_keyval, void *attribute_val,
- MPIR_AttrType attrType )
+#define FUNCNAME MPII_Win_set_attr
+int MPII_Win_set_attr( MPI_Win win, int win_keyval, void *attribute_val,
+ MPIR_Attr_type attrType )
{
static const char FCNAME[] = "MPI_Win_set_attr";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Keyval *keyval_ptr = NULL;
- MPID_Attribute *p, **old_p;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_WIN_SET_ATTR);
+ MPIR_Win *win_ptr = NULL;
+ MPII_Keyval *keyval_ptr = NULL;
+ MPIR_Attribute *p, **old_p;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_WIN_SET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* The thread lock prevents a valid attr delete on the same window
but in a different thread from causing problems */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_WIN_SET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_WIN_SET_ATTR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -51,7 +51,7 @@ int MPIR_WinSetAttr( MPI_Win win, int win_keyval, void *attribute_val,
MPID_BEGIN_ERROR_CHECKS;
{
MPIR_ERRTEST_WIN(win, mpi_errno);
- MPIR_ERRTEST_KEYVAL(win_keyval, MPID_WIN, "window", mpi_errno);
+ MPIR_ERRTEST_KEYVAL(win_keyval, MPIR_WIN, "window", mpi_errno);
MPIR_ERRTEST_KEYVAL_PERM(win_keyval, mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -59,8 +59,8 @@ int MPIR_WinSetAttr( MPI_Win win, int win_keyval, void *attribute_val,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
- MPID_Keyval_get_ptr( win_keyval, keyval_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
+ MPII_Keyval_get_ptr( win_keyval, keyval_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -68,10 +68,10 @@ int MPIR_WinSetAttr( MPI_Win win, int win_keyval, void *attribute_val,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
/* Validate keyval */
- MPID_Keyval_valid_ptr( keyval_ptr, mpi_errno );
+ MPII_Keyval_valid_ptr( keyval_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -100,22 +100,22 @@ int MPIR_WinSetAttr( MPI_Win win, int win_keyval, void *attribute_val,
goto fn_fail;
}
/* --END ERROR HANDLING-- */
- p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
p->attrType = attrType;
/* Does not change the reference count on the keyval */
break;
}
else if (p->keyval->handle > keyval_ptr->handle) {
- MPID_Attribute *new_p = MPID_Attr_alloc();
+ MPIR_Attribute *new_p = MPID_Attr_alloc();
MPIR_ERR_CHKANDJUMP1(!new_p,mpi_errno,MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "MPID_Attribute" );
+ "**nomem", "**nomem %s", "MPIR_Attribute" );
new_p->keyval = keyval_ptr;
new_p->attrType = attrType;
new_p->pre_sentinal = 0;
- new_p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ new_p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
new_p->post_sentinal = 0;
new_p->next = p->next;
- MPIR_Keyval_add_ref( keyval_ptr );
+ MPII_Keyval_add_ref( keyval_ptr );
p->next = new_p;
break;
}
@@ -124,29 +124,29 @@ int MPIR_WinSetAttr( MPI_Win win, int win_keyval, void *attribute_val,
}
if (!p)
{
- MPID_Attribute *new_p = MPID_Attr_alloc();
+ MPIR_Attribute *new_p = MPID_Attr_alloc();
MPIR_ERR_CHKANDJUMP1(!new_p,mpi_errno,MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "MPID_Attribute" );
+ "**nomem", "**nomem %s", "MPIR_Attribute" );
/* Did not find in list. Add at end */
new_p->attrType = attrType;
new_p->keyval = keyval_ptr;
new_p->pre_sentinal = 0;
- new_p->value = (MPID_AttrVal_t)(MPIU_Pint)attribute_val;
+ new_p->value = (MPII_Attr_val_t)(intptr_t)attribute_val;
new_p->post_sentinal = 0;
new_p->next = 0;
- MPIR_Keyval_add_ref( keyval_ptr );
+ MPII_Keyval_add_ref( keyval_ptr );
*old_p = new_p;
}
/* Here is where we could add a hook for the device to detect attribute
value changes, using something like
- MPID_Dev_win_attr_hook( win_ptr, keyval, attribute_val );
+ MPID_Win_attr_hook( win_ptr, keyval, attribute_val );
*/
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_WIN_SET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_WIN_SET_ATTR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -199,19 +199,19 @@ corresponding keyval was created) will be called.
int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_SET_ATTR);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_SET_ATTR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_SET_ATTR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_SET_ATTR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* ... body of routine ... */
- mpi_errno = MPIR_WinSetAttr( win, win_keyval, attribute_val,
+ mpi_errno = MPII_Win_set_attr( win, win_keyval, attribute_val,
MPIR_ATTR_PTR );
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_SET_ATTR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_SET_ATTR);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/coll/.state-cache b/src/mpi/coll/.state-cache
index 0684ca7..f419a07 100644
--- a/src/mpi/coll/.state-cache
+++ b/src/mpi/coll/.state-cache
@@ -1,226 +1,226 @@
<dir>
-<file name="allgatherv.c" info="1447123141"/>
-<file name="alltoallw.c" info="1447123141"/>
-<file name="opmax.c" info="1447123141"/>
-<file name="reduce.c" info="1447123141"/>
-<file name="ireduce.c" info="1447123141"/>
-<file name="oplxor.c" info="1447123141"/>
-<file name="opband.c" info="1447123141"/>
-<file name="opno_op.c" info="1447123141"/>
-<file name="oplor.c" info="1447123141"/>
-<file name="iexscan.c" info="1447123141"/>
-<file name="scatter.c" info="1447123141"/>
-<file name="iscatter.c" info="1447123141"/>
-<file name="barrier.c" info="1447123141"/>
-<file name="iallgatherv.c" info="1447123141"/>
-<file name="iallgather.c" info="1447123141"/>
-<file name="red_scat.c" info="1447123141"/>
-<file name="opmin.c" info="1447123141"/>
-<file name="alltoallv.c" info="1447123141"/>
-<file name="opminloc.c" info="1447123141"/>
-<file name="exscan.c" info="1447123141"/>
-<file name="nbcutil.c" info="1447123141"/>
-<file name="allred_group.c" info="1447123141"/>
-<file name="igatherv.c" info="1447123141"/>
-<file name="op_create.c" info="1447123141"/>
-<file name="opprod.c" info="1447123141"/>
-<file name="iscatterv.c" info="1447123141"/>
-<file name="opland.c" info="1447123141"/>
-<file name="red_scat_block.c" info="1447123141"/>
-<file name="alltoall.c" info="1447123141"/>
-<file name="op_free.c" info="1447123141"/>
-<file name="scan.c" info="1447123141"/>
-<file name="igather.c" info="1447123141"/>
-<file name="iscan.c" info="1447123141"/>
-<file name="opbor.c" info="1447123141"/>
-<file name="opbxor.c" info="1447123141"/>
-<file name="opmaxloc.c" info="1447123141"/>
-<file name="iallreduce.c" info="1447123141"/>
-<file name="ialltoallw.c" info="1447123141"/>
-<file name="collutil.h" info="1447123141"/>
-<file name="allgather.c" info="1447123141"/>
-<file name="ibarrier.c" info="1447123141"/>
-<file name="ired_scat.c" info="1447123141"/>
-<file name="opsum.c" info="1447123141"/>
-<file name="ired_scat_block.c" info="1447123141"/>
-<file name="ibcast.c" info="1447123141"/>
-<file name="helper_fns.c" info="1447123141"/>
-<file name="opreplace.c" info="1447123141"/>
-<file name="scatterv.c" info="1447123141"/>
-<file name="gather.c" info="1447123141"/>
-<file name="ialltoallv.c" info="1447123141"/>
-<file name="barrier_group.c" info="1447123141"/>
-<file name="op_commutative.c" info="1447123141"/>
-<file name="ialltoall.c" info="1447123141"/>
-<file name="reduce_local.c" info="1447123141"/>
-<file name="gatherv.c" info="1447123141"/>
-<file name="bcast.c" info="1447123141"/>
-<file name="allreduce.c" info="1447123141"/>
+<file name="barrier_group.c" info="1478973152"/>
+<file name="opprod.c" info="1478973152"/>
+<file name="scatter.c" info="1478973152"/>
+<file name="opreplace.c" info="1478973152"/>
+<file name="opband.c" info="1478973152"/>
+<file name="red_scat.c" info="1478973152"/>
+<file name="allred_group.c" info="1478973152"/>
+<file name="helper_fns.c" info="1478973152"/>
+<file name="ired_scat_block.c" info="1478973152"/>
+<file name="iscatter.c" info="1478973152"/>
+<file name="iscatterv.c" info="1478973152"/>
+<file name="ialltoall.c" info="1478973152"/>
+<file name="red_scat_block.c" info="1478973152"/>
+<file name="opminloc.c" info="1478973152"/>
+<file name="opmin.c" info="1478973152"/>
+<file name="oplxor.c" info="1478973152"/>
+<file name="alltoall.c" info="1478973152"/>
+<file name="reduce.c" info="1478973152"/>
+<file name="ireduce.c" info="1478973152"/>
+<file name="bcast.c" info="1478973152"/>
+<file name="opbxor.c" info="1478973152"/>
+<file name="gather.c" info="1478973152"/>
+<file name="opmax.c" info="1478973152"/>
+<file name="opbor.c" info="1478973152"/>
+<file name="exscan.c" info="1478973152"/>
+<file name="scatterv.c" info="1478973152"/>
+<file name="allgatherv.c" info="1478973152"/>
+<file name="ired_scat.c" info="1478973152"/>
+<file name="gatherv.c" info="1478973152"/>
+<file name="iallgatherv.c" info="1478973152"/>
+<file name="allgather.c" info="1478973152"/>
+<file name="ibarrier.c" info="1478973152"/>
+<file name="oplor.c" info="1478973152"/>
+<file name="allreduce.c" info="1478973152"/>
+<file name="iallgather.c" info="1478973152"/>
+<file name="opland.c" info="1478973152"/>
+<file name="opsum.c" info="1478973152"/>
+<file name="scan.c" info="1478973152"/>
+<file name="alltoallv.c" info="1478973152"/>
+<file name="op_free.c" info="1478973152"/>
+<file name="iscan.c" info="1478973152"/>
+<file name="nbcutil.c" info="1478973152"/>
+<file name="igather.c" info="1478973152"/>
+<file name="ialltoallw.c" info="1478973152"/>
+<file name="barrier.c" info="1478973152"/>
+<file name="collutil.h" info="1478973152"/>
+<file name="reduce_local.c" info="1478973152"/>
+<file name="op_commutative.c" info="1478973152"/>
+<file name="alltoallw.c" info="1478973152"/>
+<file name="ibcast.c" info="1478973152"/>
+<file name="ialltoallv.c" info="1478973152"/>
+<file name="iallreduce.c" info="1478973152"/>
+<file name="igatherv.c" info="1478973152"/>
+<file name="op_create.c" info="1478973152"/>
+<file name="iexscan.c" info="1478973152"/>
+<file name="opmaxloc.c" info="1478973152"/>
+<file name="opno_op.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="allgatherv.c">
-MPID_STATE_MPI_ALLGATHERV MPI_Allgatherv
-</fileinfo>
-<fileinfo name="alltoallw.c">
-MPID_STATE_MPI_ALLTOALLW MPI_Alltoallw
-</fileinfo>
-<fileinfo name="opmax.c">
+<fileinfo name="barrier_group.c">
</fileinfo>
-<fileinfo name="reduce.c">
-MPID_STATE_MPI_REDUCE MPI_Reduce
+<fileinfo name="opprod.c">
</fileinfo>
-<fileinfo name="ireduce.c">
-MPID_STATE_MPI_IREDUCE MPI_Ireduce
+<fileinfo name="scatter.c">
+MPID_STATE_MPI_SCATTER MPI_Scatter
</fileinfo>
-<fileinfo name="oplxor.c">
+<fileinfo name="opreplace.c">
</fileinfo>
<fileinfo name="opband.c">
</fileinfo>
-<fileinfo name="opno_op.c">
+<fileinfo name="red_scat.c">
+MPID_STATE_MPI_REDUCE_SCATTER MPI_Reduce_scatter
</fileinfo>
-<fileinfo name="oplor.c">
+<fileinfo name="allred_group.c">
</fileinfo>
-<fileinfo name="iexscan.c">
-MPID_STATE_MPI_IEXSCAN MPI_Iexscan
+<fileinfo name="helper_fns.c">
+MPID_STATE_MPIR_LOCALCOPY MPIR_Localcopy
+MPID_STATE_MPIC_WAIT MPIC_Wait
+MPID_STATE_MPIC_SEND MPIC_Send
+MPID_STATE_MPIC_RECV MPIC_Recv
+MPID_STATE_MPIC_SSEND MPIC_Ssend
+MPID_STATE_MPIC_SENDRECV MPIC_Sendrecv
+MPID_STATE_MPIC_SENDRECV_REPLACE MPIC_Sendrecv_replace
+MPID_STATE_MPIC_ISEND MPIC_Isend
+MPID_STATE_MPIC_ISSEND MPIC_Issend
+MPID_STATE_MPIC_IRECV MPIC_Irecv
+MPID_STATE_MPIC_WAITALL MPIC_Waitall
</fileinfo>
-<fileinfo name="scatter.c">
-MPID_STATE_MPI_SCATTER MPI_Scatter
+<fileinfo name="ired_scat_block.c">
+MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK MPI_Ireduce_scatter_block
</fileinfo>
<fileinfo name="iscatter.c">
MPID_STATE_MPI_ISCATTER MPI_Iscatter
</fileinfo>
-<fileinfo name="barrier.c">
-MPID_STATE_MPI_BARRIER MPI_Barrier
+<fileinfo name="iscatterv.c">
+MPID_STATE_MPI_ISCATTERV MPI_Iscatterv
</fileinfo>
-<fileinfo name="iallgatherv.c">
-MPID_STATE_MPI_IALLGATHERV MPI_Iallgatherv
+<fileinfo name="ialltoall.c">
+MPID_STATE_MPI_IALLTOALL MPI_Ialltoall
</fileinfo>
-<fileinfo name="iallgather.c">
-MPID_STATE_MPI_IALLGATHER MPI_Iallgather
+<fileinfo name="red_scat_block.c">
+MPID_STATE_MPI_REDUCE_SCATTER_BLOCK MPI_Reduce_scatter_block
</fileinfo>
-<fileinfo name="red_scat.c">
-MPID_STATE_MPI_REDUCE_SCATTER MPI_Reduce_scatter
+<fileinfo name="opminloc.c">
</fileinfo>
<fileinfo name="opmin.c">
</fileinfo>
-<fileinfo name="alltoallv.c">
-MPID_STATE_MPI_ALLTOALLV MPI_Alltoallv
+<fileinfo name="oplxor.c">
</fileinfo>
-<fileinfo name="opminloc.c">
+<fileinfo name="alltoall.c">
+MPID_STATE_MPI_ALLTOALL MPI_Alltoall
+</fileinfo>
+<fileinfo name="reduce.c">
+MPID_STATE_MPI_REDUCE MPI_Reduce
+</fileinfo>
+<fileinfo name="ireduce.c">
+MPID_STATE_MPI_IREDUCE MPI_Ireduce
+</fileinfo>
+<fileinfo name="bcast.c">
+MPID_STATE_MPIR_BCAST MPIR_Bcast_intra
+MPID_STATE_MPIR_BCAST_INTER MPIR_Bcast_inter
+MPID_STATE_MPI_BCAST MPI_Bcast
+</fileinfo>
+<fileinfo name="opbxor.c">
+</fileinfo>
+<fileinfo name="gather.c">
+MPID_STATE_MPI_GATHER MPI_Gather
+</fileinfo>
+<fileinfo name="opmax.c">
+</fileinfo>
+<fileinfo name="opbor.c">
</fileinfo>
<fileinfo name="exscan.c">
MPID_STATE_MPI_EXSCAN MPI_Exscan
</fileinfo>
-<fileinfo name="nbcutil.c">
+<fileinfo name="scatterv.c">
+MPID_STATE_MPI_SCATTERV MPI_Scatterv
</fileinfo>
-<fileinfo name="allred_group.c">
+<fileinfo name="allgatherv.c">
+MPID_STATE_MPI_ALLGATHERV MPI_Allgatherv
</fileinfo>
-<fileinfo name="igatherv.c">
-MPID_STATE_MPI_IGATHERV MPI_Igatherv
+<fileinfo name="ired_scat.c">
+MPID_STATE_MPI_IREDUCE_SCATTER MPI_Ireduce_scatter
</fileinfo>
-<fileinfo name="op_create.c">
-MPID_STATE_MPI_OP_CREATE MPI_Op_create
+<fileinfo name="gatherv.c">
+MPID_STATE_MPI_GATHERV MPI_Gatherv
</fileinfo>
-<fileinfo name="opprod.c">
+<fileinfo name="iallgatherv.c">
+MPID_STATE_MPI_IALLGATHERV MPI_Iallgatherv
</fileinfo>
-<fileinfo name="iscatterv.c">
-MPID_STATE_MPI_ISCATTERV MPI_Iscatterv
+<fileinfo name="allgather.c">
+MPID_STATE_MPI_ALLGATHER MPI_Allgather
</fileinfo>
-<fileinfo name="opland.c">
+<fileinfo name="ibarrier.c">
+MPID_STATE_MPI_IBARRIER MPI_Ibarrier
</fileinfo>
-<fileinfo name="red_scat_block.c">
-MPID_STATE_MPI_REDUCE_SCATTER_BLOCK MPI_Reduce_scatter_block
+<fileinfo name="oplor.c">
</fileinfo>
-<fileinfo name="alltoall.c">
-MPID_STATE_MPI_ALLTOALL MPI_Alltoall
+<fileinfo name="allreduce.c">
+MPID_STATE_MPI_ALLREDUCE MPI_Allreduce
</fileinfo>
-<fileinfo name="op_free.c">
-MPID_STATE_MPI_OP_FREE MPI_Op_free
+<fileinfo name="iallgather.c">
+MPID_STATE_MPI_IALLGATHER MPI_Iallgather
+</fileinfo>
+<fileinfo name="opland.c">
+</fileinfo>
+<fileinfo name="opsum.c">
</fileinfo>
<fileinfo name="scan.c">
MPID_STATE_MPI_SCAN MPI_Scan
</fileinfo>
-<fileinfo name="igather.c">
-MPID_STATE_MPI_IGATHER MPI_Igather
+<fileinfo name="alltoallv.c">
+MPID_STATE_MPI_ALLTOALLV MPI_Alltoallv
+</fileinfo>
+<fileinfo name="op_free.c">
+MPID_STATE_MPI_OP_FREE MPI_Op_free
</fileinfo>
<fileinfo name="iscan.c">
MPID_STATE_MPI_ISCAN MPI_Iscan
</fileinfo>
-<fileinfo name="opbor.c">
-</fileinfo>
-<fileinfo name="opbxor.c">
-</fileinfo>
-<fileinfo name="opmaxloc.c">
+<fileinfo name="nbcutil.c">
</fileinfo>
-<fileinfo name="iallreduce.c">
-MPID_STATE_MPI_IALLREDUCE MPI_Iallreduce
+<fileinfo name="igather.c">
+MPID_STATE_MPI_IGATHER MPI_Igather
</fileinfo>
<fileinfo name="ialltoallw.c">
MPID_STATE_MPI_IALLTOALLW MPI_Ialltoallw
</fileinfo>
-<fileinfo name="collutil.h">
-</fileinfo>
-<fileinfo name="allgather.c">
-MPID_STATE_MPI_ALLGATHER MPI_Allgather
+<fileinfo name="barrier.c">
+MPID_STATE_MPI_BARRIER MPI_Barrier
</fileinfo>
-<fileinfo name="ibarrier.c">
-MPID_STATE_MPI_IBARRIER MPI_Ibarrier
+<fileinfo name="collutil.h">
</fileinfo>
-<fileinfo name="ired_scat.c">
-MPID_STATE_MPI_IREDUCE_SCATTER MPI_Ireduce_scatter
+<fileinfo name="reduce_local.c">
+MPID_STATE_MPI_REDUCE_LOCAL MPI_Reduce_local
</fileinfo>
-<fileinfo name="opsum.c">
+<fileinfo name="op_commutative.c">
+MPID_STATE_MPI_OP_COMMUTATIVE MPI_Op_commutative
</fileinfo>
-<fileinfo name="ired_scat_block.c">
-MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK MPI_Ireduce_scatter_block
+<fileinfo name="alltoallw.c">
+MPID_STATE_MPI_ALLTOALLW MPI_Alltoallw
</fileinfo>
<fileinfo name="ibcast.c">
MPID_STATE_MPI_IBCAST MPI_Ibcast
</fileinfo>
-<fileinfo name="helper_fns.c">
-MPID_STATE_MPIR_LOCALCOPY MPIR_Localcopy
-MPID_STATE_MPIC_WAIT MPIC_Wait
-MPID_STATE_MPIC_SEND MPIC_Send
-MPID_STATE_MPIC_RECV MPIC_Recv
-MPID_STATE_MPIC_SSEND MPIC_Ssend
-MPID_STATE_MPIC_SENDRECV MPIC_Sendrecv
-MPID_STATE_MPIC_SENDRECV_REPLACE MPIC_Sendrecv_replace
-MPID_STATE_MPIC_ISEND MPIC_Isend
-MPID_STATE_MPIC_ISSEND MPIC_Issend
-MPID_STATE_MPIC_IRECV MPIC_Irecv
-MPID_STATE_MPIC_WAITALL MPIC_Waitall
-</fileinfo>
-<fileinfo name="opreplace.c">
-</fileinfo>
-<fileinfo name="scatterv.c">
-MPID_STATE_MPI_SCATTERV MPI_Scatterv
-</fileinfo>
-<fileinfo name="gather.c">
-MPID_STATE_MPI_GATHER MPI_Gather
-</fileinfo>
<fileinfo name="ialltoallv.c">
MPID_STATE_MPI_IALLTOALLV MPI_Ialltoallv
</fileinfo>
-<fileinfo name="barrier_group.c">
-</fileinfo>
-<fileinfo name="op_commutative.c">
-MPID_STATE_MPI_OP_COMMUTATIVE MPI_Op_commutative
+<fileinfo name="iallreduce.c">
+MPID_STATE_MPI_IALLREDUCE MPI_Iallreduce
</fileinfo>
-<fileinfo name="ialltoall.c">
-MPID_STATE_MPI_IALLTOALL MPI_Ialltoall
+<fileinfo name="igatherv.c">
+MPID_STATE_MPI_IGATHERV MPI_Igatherv
</fileinfo>
-<fileinfo name="reduce_local.c">
-MPID_STATE_MPI_REDUCE_LOCAL MPI_Reduce_local
+<fileinfo name="op_create.c">
+MPID_STATE_MPI_OP_CREATE MPI_Op_create
</fileinfo>
-<fileinfo name="gatherv.c">
-MPID_STATE_MPI_GATHERV MPI_Gatherv
+<fileinfo name="iexscan.c">
+MPID_STATE_MPI_IEXSCAN MPI_Iexscan
</fileinfo>
-<fileinfo name="bcast.c">
-MPID_STATE_MPIR_BCAST MPIR_Bcast_intra
-MPID_STATE_MPIR_BCAST_INTER MPIR_Bcast_inter
-MPID_STATE_MPI_BCAST MPI_Bcast
+<fileinfo name="opmaxloc.c">
</fileinfo>
-<fileinfo name="allreduce.c">
-MPID_STATE_MPI_ALLREDUCE MPI_Allreduce
+<fileinfo name="opno_op.c">
</fileinfo>
</data>
diff --git a/src/mpi/coll/allgather.c b/src/mpi/coll/allgather.c
index fc9483e..0208db5 100644
--- a/src/mpi/coll/allgather.c
+++ b/src/mpi/coll/allgather.c
@@ -116,7 +116,7 @@ int MPIR_Allgather_intra (
void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int comm_size, rank;
@@ -135,7 +135,7 @@ int MPIR_Allgather_intra (
int position, tmp_buf_size, nbytes;
#endif
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
if (((sendcount == 0) && (sendbuf != MPI_IN_PLACE)) || (recvcount == 0))
return MPI_SUCCESS;
@@ -147,12 +147,9 @@ int MPIR_Allgather_intra (
MPID_Datatype_get_size_macro( recvtype, type_size );
/* This is the largest offset we add to recvbuf */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(comm_size * recvcount * recvtype_extent));
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
tot_bytes = (MPI_Aint)recvcount * comm_size * type_size;
if ((tot_bytes < MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE) && !(comm_size & (comm_size - 1))) {
@@ -319,7 +316,7 @@ int MPIR_Allgather_intra (
MPIR_Pack_size_impl(recvcount*comm_size, recvtype, &tmp_buf_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void*, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void*, tmp_buf_size, mpi_errno, "tmp_buf");
/* calculate the value of nbytes, the number of bytes in packed
representation that each process contributes. We can't simply divide
@@ -489,9 +486,9 @@ int MPIR_Allgather_intra (
MPIR_Type_get_true_extent_impl(recvtype, &recvtype_true_lb, &recvtype_true_extent);
recvbuf_extent = recvcount * comm_size *
- (MPIR_MAX(recvtype_true_extent, recvtype_extent));
+ (MPL_MAX(recvtype_true_extent, recvtype_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void*, recvbuf_extent, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void*, recvbuf_extent, mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - recvtype_true_lb);
@@ -625,9 +622,7 @@ int MPIR_Allgather_intra (
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -654,7 +649,7 @@ int MPIR_Allgather_inter (
void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
/* Intercommunicator Allgather.
@@ -666,9 +661,9 @@ int MPIR_Allgather_inter (
int mpi_errno_ret = MPI_SUCCESS;
MPI_Aint true_extent, true_lb = 0, extent, send_extent;
void *tmp_buf=NULL;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
local_size = comm_ptr->local_size;
remote_size = comm_ptr->remote_size;
@@ -680,10 +675,10 @@ int MPIR_Allgather_inter (
MPIR_Type_get_true_extent_impl(sendtype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro( sendtype, send_extent );
- extent = MPIR_MAX(send_extent, true_extent);
+ extent = MPL_MAX(send_extent, true_extent);
- MPIU_Ensure_Aint_fits_in_pointer(extent * sendcount * local_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void*, extent*sendcount*local_size, mpi_errno, "tmp_buf");
+ MPIR_Ensure_Aint_fits_in_pointer(extent * sendcount * local_size);
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void*, extent*sendcount*local_size, mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -691,12 +686,12 @@ int MPIR_Allgather_inter (
/* Get the local intracommunicator */
if (!comm_ptr->local_comm)
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
newcomm_ptr = comm_ptr->local_comm;
if (sendcount != 0) {
- mpi_errno = MPIR_Gather_impl(sendbuf, sendcount, sendtype, tmp_buf, sendcount,
+ mpi_errno = MPID_Gather(sendbuf, sendcount, sendtype, tmp_buf, sendcount,
sendtype, 0, newcomm_ptr, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -764,7 +759,7 @@ int MPIR_Allgather_inter (
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -787,11 +782,11 @@ int MPIR_Allgather_inter (
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Allgather_intra(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
@@ -821,7 +816,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -901,14 +896,14 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ALLGATHER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ALLGATHER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_ALLGATHER);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_ALLGATHER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -922,19 +917,19 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *recvtype_ptr=NULL, *sendtype_ptr=NULL;
+ MPIR_Datatype *recvtype_ptr=NULL, *sendtype_ptr=NULL;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
} else {
/* catch common aliasing cases */
@@ -953,7 +948,7 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN)
{
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -967,7 +962,7 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN)
{
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -980,15 +975,15 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Allgather_impl(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, &errflag);
+ mpi_errno = MPID_Allgather(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype,
+ comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_ALLGATHER);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_ALLGATHER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/allgatherv.c b/src/mpi/coll/allgatherv.c
index fc642df..ef108ee 100644
--- a/src/mpi/coll/allgatherv.c
+++ b/src/mpi/coll/allgatherv.c
@@ -97,7 +97,7 @@ int MPIR_Allgatherv_intra (
const int *recvcounts,
const int *displs,
MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int comm_size, rank, j, i, left, right;
@@ -115,11 +115,8 @@ int MPIR_Allgatherv_intra (
#ifdef MPID_HAS_HETERO
int tmp_buf_size, nbytes;
#endif
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -149,9 +146,9 @@ int MPIR_Allgatherv_intra (
MPIR_Type_get_true_extent_impl(recvtype, &recvtype_true_lb, &recvtype_true_extent);
- MPIU_Ensure_Aint_fits_in_pointer(total_count *
- (MPIR_MAX(recvtype_true_extent, recvtype_extent)));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, total_count*(MPIR_MAX(recvtype_true_extent,recvtype_extent)), mpi_errno, "tmp_buf");
+ MPIR_Ensure_Aint_fits_in_pointer(total_count *
+ (MPL_MAX(recvtype_true_extent, recvtype_extent)));
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, total_count*(MPL_MAX(recvtype_true_extent,recvtype_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - recvtype_true_lb);
@@ -347,7 +344,7 @@ int MPIR_Allgatherv_intra (
else {
/* heterogeneous. need to use temp. buffer. */
MPIR_Pack_size_impl(total_count, recvtype, &tmp_buf_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
/* calculate the value of nbytes, the number of bytes in packed
representation corresponding to a single recvtype. Since
@@ -539,12 +536,12 @@ int MPIR_Allgatherv_intra (
/* get true extent of recvtype */
MPIR_Type_get_true_extent_impl(recvtype, &recvtype_true_lb, &recvtype_true_extent);
- MPIU_Ensure_Aint_fits_in_pointer(total_count *
- MPIR_MAX(recvtype_true_extent, recvtype_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count *
+ MPL_MAX(recvtype_true_extent, recvtype_extent));
recvbuf_extent = total_count *
- (MPIR_MAX(recvtype_true_extent, recvtype_extent));
+ (MPL_MAX(recvtype_true_extent, recvtype_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, recvbuf_extent, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, recvbuf_extent, mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - recvtype_true_lb);
@@ -740,9 +737,7 @@ int MPIR_Allgatherv_intra (
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -768,7 +763,7 @@ int MPIR_Allgatherv_inter (
const int *recvcounts,
const int *displs,
MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
/* Intercommunicator Allgatherv.
@@ -781,7 +776,7 @@ int MPIR_Allgatherv_inter (
*/
int remote_size, mpi_errno, root, rank;
int mpi_errno_ret = MPI_SUCCESS;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPI_Datatype newtype = MPI_DATATYPE_NULL;
remote_size = comm_ptr->remote_size;
@@ -792,7 +787,7 @@ int MPIR_Allgatherv_inter (
if (comm_ptr->is_low_group) {
/* gatherv from right group */
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = MPID_Gatherv(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, errflag);
if (mpi_errno) {
@@ -803,7 +798,7 @@ int MPIR_Allgatherv_inter (
}
/* gatherv to right group */
root = 0;
- mpi_errno = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = MPID_Gatherv(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, errflag);
if (mpi_errno) {
@@ -816,7 +811,7 @@ int MPIR_Allgatherv_inter (
else {
/* gatherv to left group */
root = 0;
- mpi_errno = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = MPID_Gatherv(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, errflag);
if (mpi_errno) {
@@ -827,7 +822,7 @@ int MPIR_Allgatherv_inter (
}
/* gatherv from left group */
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = MPID_Gatherv(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, errflag);
if (mpi_errno) {
@@ -843,7 +838,7 @@ int MPIR_Allgatherv_inter (
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -892,11 +887,11 @@ int MPIR_Allgatherv_inter (
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Allgatherv_intra(sendbuf, sendcount, sendtype,
recvbuf, recvcounts, displs, recvtype,
@@ -928,7 +923,7 @@ int MPIR_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -1012,14 +1007,14 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Datatype recvtype, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ALLGATHERV);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ALLGATHERV);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_ALLGATHERV);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_ALLGATHERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -1033,27 +1028,27 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *recvtype_ptr=NULL, *sendtype_ptr=NULL;
+ MPIR_Datatype *recvtype_ptr=NULL, *sendtype_ptr=NULL;
int i, comm_size;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTERCOMM)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM)
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
if (sendbuf != MPI_IN_PLACE) {
MPIR_ERRTEST_COUNT(sendcount, mpi_errno);
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -1061,7 +1056,7 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_USERBUFFER(sendbuf,sendcount,sendtype,mpi_errno);
/* catch common aliasing cases */
- if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
sendtype == recvtype &&
recvcounts[comm_ptr->rank] != 0 &&
sendcount != 0) {
@@ -1071,7 +1066,7 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
}
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
comm_size = comm_ptr->local_size;
else
comm_size = comm_ptr->remote_size;
@@ -1083,7 +1078,7 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -1102,7 +1097,7 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Allgatherv_impl(sendbuf, sendcount, sendtype,
+ mpi_errno = MPID_Allgatherv(sendbuf, sendcount, sendtype,
recvbuf, recvcounts, displs, recvtype,
comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
@@ -1110,7 +1105,7 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_ALLGATHERV);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_ALLGATHERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/allred_group.c b/src/mpi/coll/allred_group.c
index 7a6d279..8fcba3c 100644
--- a/src/mpi/coll/allred_group.c
+++ b/src/mpi/coll/allred_group.c
@@ -8,8 +8,8 @@
#include "collutil.h"
int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Group *group_ptr, int tag, MPIR_Errflag_t *errflag);
/* Local utility macro: takes an two args and sets lvalue cr_ equal to the rank
* in comm_ptr corresponding to rvalue gr_ */
@@ -18,7 +18,7 @@ int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
int gr_tmp_ = (gr_); \
mpi_errno = MPIR_Group_translate_ranks_impl(group_ptr, 1, &(gr_tmp_), comm_ptr->local_group, &(cr_)); \
if (mpi_errno) MPIR_ERR_POP(mpi_errno); \
- MPIU_Assert((cr_) != MPI_UNDEFINED); \
+ MPIR_Assert((cr_) != MPI_UNDEFINED); \
} while (0)
#undef FUNCNAME
@@ -26,8 +26,8 @@ int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Group *group_ptr, int tag, MPIR_Errflag_t *errflag)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Group *group_ptr, int tag, MPIR_Errflag_t *errflag)
{
MPI_Aint type_size;
int mpi_errno = MPI_SUCCESS;
@@ -39,11 +39,11 @@ int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
void *tmp_buf;
int group_rank, group_size;
int cdst, csrc;
- MPIU_CHKLMEM_DECL(3);
+ MPIR_CHKLMEM_DECL(3);
#ifdef MPID_HAS_HETERO
if (comm_ptr->is_hetero)
- MPIU_Assert_fmt_msg(FALSE,("heterogeneous support for Allreduce_group_intra not yet implemented"));
+ MPIR_Assert_fmt_msg(FALSE,("heterogeneous support for Allreduce_group_intra not yet implemented"));
#endif
/* homogeneous case */
@@ -58,8 +58,8 @@ int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -197,8 +197,8 @@ int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
each process receives and the displacement within
the buffer */
- MPIU_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
- MPIU_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
+ MPIR_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
+ MPIR_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
for (i=0; i<(pof2-1); i++)
cnts[i] = count/pof2;
@@ -349,7 +349,7 @@ int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -365,12 +365,12 @@ int MPIR_Allreduce_group_intra(void *sendbuf, void *recvbuf, int count,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Allreduce_group(void *sendbuf, void *recvbuf, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Group *group_ptr, int tag, MPIR_Errflag_t *errflag)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Group *group_ptr, int tag, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- MPIR_ERR_CHKANDJUMP(comm_ptr->comm_kind != MPID_INTRACOMM, mpi_errno, MPI_ERR_OTHER, "**commnotintra");
+ MPIR_ERR_CHKANDJUMP(comm_ptr->comm_kind != MPIR_COMM_KIND__INTRACOMM, mpi_errno, MPI_ERR_OTHER, "**commnotintra");
mpi_errno = MPIR_Allreduce_group_intra(sendbuf, recvbuf, count, datatype,
op, comm_ptr, group_ptr, tag, errflag);
diff --git a/src/mpi/coll/allreduce.c b/src/mpi/coll/allreduce.c
index be26c3d..61f9190 100644
--- a/src/mpi/coll/allreduce.c
+++ b/src/mpi/coll/allreduce.c
@@ -149,7 +149,7 @@ MPIR_Op_check_dtype_fn *MPIR_Op_check_dtype_table[] = {
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline int allreduce_intra_or_coll_fn(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -182,7 +182,7 @@ int MPIR_Allreduce_intra (
int count,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
#ifdef MPID_HAS_HETERO
@@ -198,11 +198,8 @@ int MPIR_Allreduce_intra (
send_idx, recv_idx, last_idx, send_cnt, recv_cnt, *cnts, *disps;
MPI_Aint true_extent, true_lb, extent;
void *tmp_buf;
- MPIU_CHKLMEM_DECL(3);
+ MPIR_CHKLMEM_DECL(3);
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
if (count == 0) goto fn_exit;
is_commutative = MPIR_Op_is_commutative(op);
@@ -223,7 +220,7 @@ int MPIR_Allreduce_intra (
/* IN_PLACE and not root of reduce. Data supplied to this
allreduce is in recvbuf. Pass that as the sendbuf to reduce. */
- mpi_errno = MPIR_Reduce_impl(recvbuf, NULL, count, datatype, op, 0, comm_ptr->node_comm, errflag);
+ mpi_errno = MPID_Reduce(recvbuf, NULL, count, datatype, op, 0, comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -231,7 +228,7 @@ int MPIR_Allreduce_intra (
MPIR_ERR_ADD(mpi_errno_ret, mpi_errno);
}
} else {
- mpi_errno = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype, op, 0, comm_ptr->node_comm, errflag);
+ mpi_errno = MPID_Reduce(sendbuf, recvbuf, count, datatype, op, 0, comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -261,7 +258,7 @@ int MPIR_Allreduce_intra (
/* now broadcast the result among local processes */
if (comm_ptr->node_comm != NULL) {
- mpi_errno = MPIR_Bcast_impl(recvbuf, count, datatype, 0, comm_ptr->node_comm, errflag);
+ mpi_errno = MPID_Bcast(recvbuf, count, datatype, 0, comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -284,7 +281,7 @@ int MPIR_Allreduce_intra (
if (!is_homogeneous) {
/* heterogeneous. To get the same result on all processes, we
do a reduce to 0 and then broadcast. */
- mpi_errno = MPIR_Reduce_impl ( sendbuf, recvbuf, count, datatype,
+ mpi_errno = MPID_Reduce( sendbuf, recvbuf, count, datatype,
op, 0, comm_ptr, errflag );
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -293,7 +290,7 @@ int MPIR_Allreduce_intra (
MPIR_ERR_ADD(mpi_errno_ret, mpi_errno);
}
- mpi_errno = MPIR_Bcast_impl( recvbuf, count, datatype, 0, comm_ptr, errflag );
+ mpi_errno = MPID_Bcast( recvbuf, count, datatype, 0, comm_ptr, errflag );
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -315,8 +312,8 @@ int MPIR_Allreduce_intra (
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -448,8 +445,8 @@ int MPIR_Allreduce_intra (
each process receives and the displacement within
the buffer */
- MPIU_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
- MPIU_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
+ MPIR_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
+ MPIR_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
for (i=0; i<(pof2-1); i++)
cnts[i] = count/pof2;
@@ -598,10 +595,7 @@ int MPIR_Allreduce_intra (
}
fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
-
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
return (mpi_errno);
@@ -623,7 +617,7 @@ int MPIR_Allreduce_inter (
int count,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
/* Intercommunicator Allreduce.
@@ -635,26 +629,24 @@ int MPIR_Allreduce_inter (
int mpi_errno_ret = MPI_SUCCESS;
MPI_Aint true_extent, true_lb, extent;
void *tmp_buf=NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPIU_CHKLMEM_DECL(1);
-
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_CHKLMEM_DECL(1);
if (comm_ptr->rank == 0) {
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
/* I think this is the worse case, so we can avoid an assert()
* inside the for loop */
- /* Should MPIU_CHKLMEM_MALLOC do this? */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
+ /* Should MPIR_CHKLMEM_MALLOC do this? */
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
}
/* Get the local intracommunicator */
if (!comm_ptr->local_comm)
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
newcomm_ptr = comm_ptr->local_comm;
@@ -682,7 +674,7 @@ int MPIR_Allreduce_inter (
}
/* Do a local broadcast on this intracommunicator */
- mpi_errno = MPIR_Bcast_impl(recvbuf, count, datatype,
+ mpi_errno = MPID_Bcast(recvbuf, count, datatype,
0, newcomm_ptr, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -692,8 +684,7 @@ int MPIR_Allreduce_inter (
}
fn_exit:
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -714,11 +705,11 @@ int MPIR_Allreduce_inter (
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Allreduce_intra(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -744,7 +735,7 @@ fn_fail:
#define FUNCNAME MPIR_Allreduce_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Allreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
+int MPIR_Allreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -758,7 +749,7 @@ int MPIR_Allreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datat
}
else
{
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Allreduce_intra(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -815,14 +806,14 @@ int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
{
static const char FCNAME[] = "MPI_Allreduce";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ALLREDUCE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ALLREDUCE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_ALLREDUCE);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_ALLREDUCE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -836,17 +827,17 @@ int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
- MPID_Op *op_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
@@ -854,13 +845,13 @@ int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, count, mpi_errno);
} else {
if (count != 0 && sendbuf != MPI_IN_PLACE)
@@ -874,8 +865,8 @@ int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
MPIR_ERRTEST_USERBUFFER(recvbuf,count,datatype,mpi_errno);
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
}
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno =
@@ -889,13 +880,13 @@ int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
/* ... body of routine ... */
- mpi_errno = MPIR_Allreduce_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, &errflag);
+ mpi_errno = MPID_Allreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_ALLREDUCE);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_ALLREDUCE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/alltoall.c b/src/mpi/coll/alltoall.c
index 19332f4..b686562 100644
--- a/src/mpi/coll/alltoall.c
+++ b/src/mpi/coll/alltoall.c
@@ -134,7 +134,7 @@ int MPIR_Alltoall_intra(
void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int comm_size, i, j, pof2;
@@ -147,9 +147,9 @@ int MPIR_Alltoall_intra(
MPI_Aint pack_size, position;
MPI_Datatype newtype = MPI_DATATYPE_NULL;
void *tmp_buf;
- MPID_Request **reqarray;
+ MPIR_Request **reqarray;
MPI_Status *starray;
- MPIU_CHKLMEM_DECL(6);
+ MPIR_CHKLMEM_DECL(6);
if (recvcount == 0) return MPI_SUCCESS;
@@ -163,9 +163,6 @@ int MPIR_Alltoall_intra(
MPID_Datatype_get_size_macro(sendtype, sendtype_size);
nbytes = sendtype_size * sendcount;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
if (sendbuf == MPI_IN_PLACE) {
/* We use pair-wise sendrecv_replace in order to conserve memory usage,
* which is keeping with the spirit of the MPI-2.2 Standard. But
@@ -217,7 +214,7 @@ int MPIR_Alltoall_intra(
/* allocate temporary buffer */
MPIR_Pack_size_impl(recvcount*comm_size, recvtype, &pack_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, pack_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, pack_size, mpi_errno, "tmp_buf");
/* Do Phase 1 of the algorithim. Shift the data blocks on process i
* upwards by a distance of i blocks. Store the result in recvbuf. */
@@ -241,7 +238,7 @@ int MPIR_Alltoall_intra(
/* allocate displacements array for indexed datatype used in
communication */
- MPIU_CHKLMEM_MALLOC(displs, int *, comm_size * sizeof(int), mpi_errno, "displs");
+ MPIR_CHKLMEM_MALLOC(displs, int *, comm_size * sizeof(int), mpi_errno, "displs");
pof2 = 1;
while (pof2 < comm_size) {
@@ -293,8 +290,8 @@ int MPIR_Alltoall_intra(
MPIR_Type_get_true_extent_impl(recvtype, &recvtype_true_lb, &recvtype_true_extent);
recvbuf_extent = recvcount * comm_size *
- (MPIR_MAX(recvtype_true_extent, recvtype_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, recvbuf_extent, mpi_errno, "tmp_buf");
+ (MPL_MAX(recvtype_true_extent, recvtype_extent));
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, recvbuf_extent, mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - recvtype_true_lb);
@@ -338,9 +335,9 @@ int MPIR_Alltoall_intra(
bblock = MPIR_CVAR_ALLTOALL_THROTTLE;
if (bblock == 0) bblock = comm_size;
- MPIU_CHKLMEM_MALLOC(reqarray, MPID_Request **, 2*bblock*sizeof(MPID_Request*), mpi_errno, "reqarray");
+ MPIR_CHKLMEM_MALLOC(reqarray, MPIR_Request **, 2*bblock*sizeof(MPIR_Request*), mpi_errno, "reqarray");
- MPIU_CHKLMEM_MALLOC(starray, MPI_Status *, 2*bblock*sizeof(MPI_Status), mpi_errno, "starray");
+ MPIR_CHKLMEM_MALLOC(starray, MPI_Status *, 2*bblock*sizeof(MPI_Status), mpi_errno, "starray");
for (ii=0; ii<comm_size; ii+=bblock) {
ss = comm_size-ii < bblock ? comm_size-ii : bblock;
@@ -439,9 +436,7 @@ int MPIR_Alltoall_intra(
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -468,7 +463,7 @@ int MPIR_Alltoall_inter(
void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
/* Intercommunicator alltoall. We use a pairwise exchange algorithm
@@ -496,14 +491,11 @@ int MPIR_Alltoall_inter(
MPID_Datatype_get_extent_macro(sendtype, sendtype_extent);
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* Do the pairwise exchanges */
- max_size = MPIR_MAX(local_size, remote_size);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ max_size = MPL_MAX(local_size, remote_size);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
max_size*recvcount*recvtype_extent);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
max_size*sendcount*sendtype_extent);
for (i=0; i<max_size; i++) {
src = (rank - i + max_size) % max_size;
@@ -535,18 +527,13 @@ int MPIR_Alltoall_inter(
}
}
- fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
+ }
#undef FUNCNAME
@@ -555,11 +542,11 @@ int MPIR_Alltoall_inter(
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Alltoall_intra(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
@@ -585,7 +572,7 @@ int MPIR_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
if (comm_ptr->coll_fns != NULL && comm_ptr->coll_fns->Alltoall != NULL) {
@@ -644,14 +631,14 @@ int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ALLTOALL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ALLTOALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_ALLTOALL);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_ALLTOALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -665,16 +652,16 @@ int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (sendbuf != MPI_IN_PLACE) {
@@ -682,13 +669,13 @@ int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
sendbuf != MPI_IN_PLACE &&
sendcount == recvcount &&
sendtype == recvtype &&
@@ -700,13 +687,13 @@ int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
}
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
@@ -719,13 +706,13 @@ int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Alltoall_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &errflag);
+ mpi_errno = MPID_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_ALLTOALL);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_ALLTOALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/alltoallv.c b/src/mpi/coll/alltoallv.c
index 7e0135b..d7c6b0c 100644
--- a/src/mpi/coll/alltoallv.c
+++ b/src/mpi/coll/alltoallv.c
@@ -62,7 +62,7 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
- const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
+ const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int comm_size, i, j;
@@ -71,12 +71,12 @@ int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcounts, const int *
int mpi_errno_ret = MPI_SUCCESS;
MPI_Status *starray;
MPI_Status status;
- MPID_Request **reqarray;
+ MPIR_Request **reqarray;
int dst, rank, req_cnt;
int ii, ss, bblock;
int type_size;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -84,9 +84,6 @@ int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcounts, const int *
/* Get extent of recv type, but send type is only valid if (sendbuf!=MPI_IN_PLACE) */
MPID_Datatype_get_extent_macro(recvtype, recv_extent);
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
if (sendbuf == MPI_IN_PLACE) {
/* We use pair-wise sendrecv_replace in order to conserve memory usage,
* which is keeping with the spirit of the MPI-2.2 Standard. But
@@ -138,8 +135,8 @@ int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcounts, const int *
MPID_Datatype_get_extent_macro(sendtype, send_extent);
- MPIU_CHKLMEM_MALLOC(starray, MPI_Status*, 2*bblock*sizeof(MPI_Status), mpi_errno, "starray");
- MPIU_CHKLMEM_MALLOC(reqarray, MPID_Request**, 2*bblock*sizeof(MPID_Request *), mpi_errno, "reqarray");
+ MPIR_CHKLMEM_MALLOC(starray, MPI_Status*, 2*bblock*sizeof(MPI_Status), mpi_errno, "starray");
+ MPIR_CHKLMEM_MALLOC(reqarray, MPIR_Request**, 2*bblock*sizeof(MPIR_Request *), mpi_errno, "reqarray");
/* post only bblock isends/irecvs at a time as suggested by Tony Ladd */
for (ii=0; ii<comm_size; ii+=bblock) {
@@ -152,7 +149,7 @@ int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcounts, const int *
if (recvcounts[dst]) {
MPID_Datatype_get_size_macro(recvtype, type_size);
if (type_size) {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
rdispls[dst]*recv_extent);
mpi_errno = MPIC_Irecv((char *)recvbuf+rdispls[dst]*recv_extent,
recvcounts[dst], recvtype, dst,
@@ -174,7 +171,7 @@ int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcounts, const int *
if (sendcounts[dst]) {
MPID_Datatype_get_size_macro(sendtype, type_size);
if (type_size) {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
sdispls[dst]*send_extent);
mpi_errno = MPIC_Isend((char *)sendbuf+sdispls[dst]*send_extent,
sendcounts[dst], sendtype, dst,
@@ -213,9 +210,7 @@ int MPIR_Alltoallv_intra(const void *sendbuf, const int *sendcounts, const int *
}
fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -237,7 +232,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
- const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
+ const int *rdispls, MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
/* Intercommunicator alltoallv. We use a pairwise exchange algorithm
@@ -268,11 +263,8 @@ int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcounts, const int *
MPID_Datatype_get_extent_macro(sendtype, send_extent);
MPID_Datatype_get_extent_macro(recvtype, recv_extent);
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* Use pairwise exchange algorithm. */
- max_size = MPIR_MAX(local_size, remote_size);
+ max_size = MPL_MAX(local_size, remote_size);
for (i=0; i<max_size; i++) {
src = (rank - i + max_size) % max_size;
dst = (rank + i) % max_size;
@@ -282,7 +274,7 @@ int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcounts, const int *
recvcount = 0;
}
else {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
rdispls[src]*recv_extent);
recvaddr = (char *)recvbuf + rdispls[src]*recv_extent;
recvcount = recvcounts[src];
@@ -293,7 +285,7 @@ int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcounts, const int *
sendcount = 0;
}
else {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
sdispls[dst]*send_extent);
sendaddr = (char *)sendbuf + sdispls[dst]*send_extent;
sendcount = sendcounts[dst];
@@ -311,16 +303,11 @@ int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcounts, const int *
}
}
- fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
@@ -330,11 +317,11 @@ int MPIR_Alltoallv_inter(const void *sendbuf, const int *sendcounts, const int *
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls,
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Alltoallv_intra(sendbuf, sendcounts, sdispls,
sendtype, recvbuf, recvcounts,
@@ -361,7 +348,7 @@ int MPIR_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispl
int MPIR_Alltoallv_impl(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
const int *rdispls, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -435,14 +422,14 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts,
MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ALLTOALLV);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ALLTOALLV);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_ALLTOALLV);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_ALLTOALLV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -456,21 +443,21 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int i, comm_size;
- int check_send = (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE);
+ int check_send = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM && sendbuf != MPI_IN_PLACE);
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
comm_size = comm_ptr->local_size;
if (sendbuf != MPI_IN_PLACE && sendtype == recvtype && sendcounts == recvcounts)
@@ -478,7 +465,7 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts,
} else
comm_size = comm_ptr->remote_size;
- if (comm_ptr->comm_kind == MPID_INTERCOMM && sendbuf == MPI_IN_PLACE) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM && sendbuf == MPI_IN_PLACE) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**sendbuf_inplace");
}
@@ -492,14 +479,14 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts,
}
if (check_send && HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -524,7 +511,7 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts,
/* ... body of routine ... */
- mpi_errno = MPIR_Alltoallv_impl(sendbuf, sendcounts, sdispls,
+ mpi_errno = MPID_Alltoallv(sendbuf, sendcounts, sdispls,
sendtype, recvbuf, recvcounts,
rdispls, recvtype, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
@@ -532,7 +519,7 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_ALLTOALLV);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_ALLTOALLV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/alltoallw.c b/src/mpi/coll/alltoallw.c
index 4a8f315..6b5f925 100644
--- a/src/mpi/coll/alltoallw.c
+++ b/src/mpi/coll/alltoallw.c
@@ -56,7 +56,7 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Alltoallw_intra(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const int rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr,
+ const int rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int comm_size, i, j;
@@ -64,19 +64,16 @@ int MPIR_Alltoallw_intra(const void *sendbuf, const int sendcounts[], const int
int mpi_errno_ret = MPI_SUCCESS;
MPI_Status status;
MPI_Status *starray;
- MPID_Request **reqarray;
+ MPIR_Request **reqarray;
int dst, rank;
int outstanding_requests;
int ii, ss, bblock;
int type_size;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
if (sendbuf == MPI_IN_PLACE) {
/* We use pair-wise sendrecv_replace in order to conserve memory usage,
* which is keeping with the spirit of the MPI-2.2 Standard. But
@@ -125,8 +122,8 @@ int MPIR_Alltoallw_intra(const void *sendbuf, const int sendcounts[], const int
bblock = MPIR_CVAR_ALLTOALL_THROTTLE;
if (bblock == 0) bblock = comm_size;
- MPIU_CHKLMEM_MALLOC(starray, MPI_Status*, 2*bblock*sizeof(MPI_Status), mpi_errno, "starray");
- MPIU_CHKLMEM_MALLOC(reqarray, MPID_Request**, 2*bblock*sizeof(MPID_Request *), mpi_errno, "reqarray");
+ MPIR_CHKLMEM_MALLOC(starray, MPI_Status*, 2*bblock*sizeof(MPI_Status), mpi_errno, "starray");
+ MPIR_CHKLMEM_MALLOC(reqarray, MPIR_Request**, 2*bblock*sizeof(MPIR_Request *), mpi_errno, "reqarray");
/* post only bblock isends/irecvs at a time as suggested by Tony Ladd */
for (ii=0; ii<comm_size; ii+=bblock) {
@@ -215,10 +212,8 @@ int MPIR_Alltoallw_intra(const void *sendbuf, const int sendcounts[], const int
#endif
}
- /* check if multiple threads are calling this collective function */
fn_exit:
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -237,7 +232,7 @@ int MPIR_Alltoallw_intra(const void *sendbuf, const int sendcounts[], const int
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Alltoallw_inter(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const int rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr,
+ const int rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
/* Intercommunicator alltoallw. We use a pairwise exchange algorithm
@@ -263,11 +258,8 @@ int MPIR_Alltoallw_inter(const void *sendbuf, const int sendcounts[], const int
remote_size = comm_ptr->remote_size;
rank = comm_ptr->rank;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* Use pairwise exchange algorithm. */
- max_size = MPIR_MAX(local_size, remote_size);
+ max_size = MPL_MAX(local_size, remote_size);
for (i=0; i<max_size; i++) {
src = (rank - i + max_size) % max_size;
dst = (rank + i) % max_size;
@@ -305,17 +297,11 @@ int MPIR_Alltoallw_inter(const void *sendbuf, const int sendcounts[], const int
MPIR_ERR_ADD(mpi_errno_ret, mpi_errno);
}
}
-
- fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
#undef FUNCNAME
@@ -325,11 +311,11 @@ int MPIR_Alltoallw_inter(const void *sendbuf, const int sendcounts[], const int
int MPIR_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const int rdispls[], const MPI_Datatype recvtypes[],
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Alltoallw_intra(sendbuf, sendcounts, sdispls,
sendtypes, recvbuf, recvcounts,
@@ -356,7 +342,7 @@ int MPIR_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
int MPIR_Alltoallw_impl(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const int rdispls[], const MPI_Datatype recvtypes[],
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -430,14 +416,14 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
const MPI_Datatype recvtypes[], MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ALLTOALLW);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ALLTOALLW);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_ALLTOALLW);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_ALLTOALLW);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -451,27 +437,27 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int i, comm_size;
int check_send;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- check_send = (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE);
+ check_send = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM && sendbuf != MPI_IN_PLACE);
- if (comm_ptr->comm_kind == MPID_INTERCOMM && sendbuf == MPI_IN_PLACE) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM && sendbuf == MPI_IN_PLACE) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**sendbuf_inplace");
}
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
comm_size = comm_ptr->local_size;
if (sendbuf != MPI_IN_PLACE && sendcounts == recvcounts && sendtypes == recvtypes)
@@ -487,7 +473,7 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
}
if ((sendcounts[i] > 0) && (HANDLE_GET_KIND(sendtypes[i]) != HANDLE_KIND_BUILTIN)) {
MPID_Datatype_get_ptr(sendtypes[i], sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -500,7 +486,7 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
}
if ((recvcounts[i] > 0) && (HANDLE_GET_KIND(recvtypes[i]) != HANDLE_KIND_BUILTIN)) {
MPID_Datatype_get_ptr(recvtypes[i], recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -529,7 +515,7 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
/* ... body of routine ... */
- mpi_errno = MPIR_Alltoallw_impl(sendbuf, sendcounts, sdispls,
+ mpi_errno = MPID_Alltoallw(sendbuf, sendcounts, sdispls,
sendtypes, recvbuf, recvcounts,
rdispls, recvtypes, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
@@ -538,7 +524,7 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_ALLTOALLW);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_ALLTOALLW);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/barrier.c b/src/mpi/coll/barrier.c
index 5db5a5a..ef6590c 100644
--- a/src/mpi/coll/barrier.c
+++ b/src/mpi/coll/barrier.c
@@ -67,18 +67,18 @@ int MPI_Barrier(MPI_Comm comm) __attribute__((weak,alias("PMPI_Barrier")));
#define FUNCNAME barrier_smp_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int barrier_smp_intra(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+static int barrier_smp_intra(MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno=MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
- MPIU_Assert(MPIR_CVAR_ENABLE_SMP_COLLECTIVES && MPIR_CVAR_ENABLE_SMP_BARRIER &&
+ MPIR_Assert(MPIR_CVAR_ENABLE_SMP_COLLECTIVES && MPIR_CVAR_ENABLE_SMP_BARRIER &&
MPIR_Comm_is_node_aware(comm_ptr));
/* do the intranode barrier on all nodes */
if (comm_ptr->node_comm != NULL)
{
- mpi_errno = MPIR_Barrier_impl(comm_ptr->node_comm, errflag);
+ mpi_errno = MPID_Barrier(comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -89,7 +89,7 @@ static int barrier_smp_intra(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
/* do the barrier across roots of all nodes */
if (comm_ptr->node_roots_comm != NULL) {
- mpi_errno = MPIR_Barrier_impl(comm_ptr->node_roots_comm, errflag);
+ mpi_errno = MPID_Barrier(comm_ptr->node_roots_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -104,7 +104,7 @@ static int barrier_smp_intra(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
if (comm_ptr->node_comm != NULL)
{
int i=0;
- mpi_errno = MPIR_Bcast_impl(&i, 1, MPI_BYTE, 0, comm_ptr->node_comm, errflag);
+ mpi_errno = MPID_Bcast(&i, 1, MPI_BYTE, 0, comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -113,14 +113,11 @@ static int barrier_smp_intra(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
}
}
- fn_exit:
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
/* not declared static because it is called in ch3_comm_connect/accept */
@@ -128,15 +125,11 @@ static int barrier_smp_intra(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
#define FUNCNAME MPIR_Barrier_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Barrier_intra( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag )
+int MPIR_Barrier_intra( MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag )
{
int size, rank, src, dst, mask, mpi_errno=MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
- /* Only one collective operation per communicator can be active at any
- time */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
size = comm_ptr->local_size;
/* Trivial barriers return immediately */
if (size == 1) goto fn_exit;
@@ -173,14 +166,11 @@ int MPIR_Barrier_intra( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag )
}
fn_exit:
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
/* not declared static because a machine-specific function may call this one
@@ -189,18 +179,18 @@ int MPIR_Barrier_intra( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag )
#define FUNCNAME MPIR_Barrier_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Barrier_inter( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag )
+int MPIR_Barrier_inter( MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag )
{
int rank, mpi_errno = MPI_SUCCESS, root;
int mpi_errno_ret = MPI_SUCCESS;
int i = 0;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
rank = comm_ptr->rank;
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -274,19 +264,18 @@ int MPIR_Barrier_inter( MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag )
goto fn_exit;
}
-/* MPIR_Barrier performs an barrier using poin MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
-t-to-point messages.
+/* MPIR_Barrier performs an barrier using point-to-point messages.
This is intended to be used by device-specific implementations of
barrier. In all other cases MPIR_Barrier_impl should be used. */
#undef FUNCNAME
#define FUNCNAME MPIR_Barrier
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Barrier(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+int MPIR_Barrier(MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Barrier_intra( comm_ptr, errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -311,7 +300,7 @@ int MPIR_Barrier(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
#define FUNCNAME MPIR_Barrier_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Barrier_impl(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+int MPIR_Barrier_impl(MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
if (comm_ptr->coll_fns != NULL && comm_ptr->coll_fns->Barrier != NULL)
@@ -369,14 +358,14 @@ communicator have entered the call.
int MPI_Barrier( MPI_Comm comm )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_BARRIER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_BARRIER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_BARRIER);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_BARRIER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -390,7 +379,7 @@ int MPI_Barrier( MPI_Comm comm )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -398,7 +387,7 @@ int MPI_Barrier( MPI_Comm comm )
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate communicator */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -407,13 +396,13 @@ int MPI_Barrier( MPI_Comm comm )
/* ... body of routine ... */
- mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
+ mpi_errno = MPID_Barrier(comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_BARRIER);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_BARRIER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/barrier_group.c b/src/mpi/coll/barrier_group.c
index e7e5840..1c68132 100644
--- a/src/mpi/coll/barrier_group.c
+++ b/src/mpi/coll/barrier_group.c
@@ -13,7 +13,7 @@
This is an intracommunicator barrier only!
*/
-int MPIR_Barrier_group( MPID_Comm *comm_ptr, MPID_Group *group_ptr, int tag, MPIR_Errflag_t *errflag )
+int MPIR_Barrier_group( MPIR_Comm *comm_ptr, MPIR_Group *group_ptr, int tag, MPIR_Errflag_t *errflag )
{
int src = 0;
int dst, mpi_errno = MPI_SUCCESS;
@@ -27,9 +27,7 @@ int MPIR_Barrier_group( MPID_Comm *comm_ptr, MPID_Group *group_ptr, int tag, MPI
if (mpi_errno != MPI_SUCCESS || *errflag != MPIR_ERR_NONE)
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
- fn_exit:
+ fn_exit:
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
diff --git a/src/mpi/coll/bcast.c b/src/mpi/coll/bcast.c
index 64536a3..49149ff 100644
--- a/src/mpi/coll/bcast.c
+++ b/src/mpi/coll/bcast.c
@@ -126,7 +126,7 @@ static int MPIR_Bcast_binomial(
int count,
MPI_Datatype datatype,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int rank, comm_size, src, dst;
@@ -140,8 +140,8 @@ static int MPIR_Bcast_binomial(
MPI_Aint type_size;
MPI_Aint position;
void *tmp_buf=NULL;
- MPID_Datatype *dtp;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Datatype *dtp;
+ MPIR_CHKLMEM_DECL(1);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -182,7 +182,7 @@ static int MPIR_Bcast_binomial(
if (!is_contig || !is_homogeneous)
{
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, nbytes, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, nbytes, mpi_errno, "tmp_buf");
/* TODO: Pipeline the packing and communication */
position = 0;
@@ -302,7 +302,7 @@ static int MPIR_Bcast_binomial(
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -333,7 +333,7 @@ static int scatter_for_bcast(
int count ATTRIBUTE((unused)),
MPI_Datatype datatype ATTRIBUTE((unused)),
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
int nbytes,
void *tmp_buf,
int is_contig,
@@ -438,7 +438,6 @@ static int scatter_for_bcast(
mask >>= 1;
}
-fn_exit:
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -446,8 +445,6 @@ fn_exit:
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
/* --END ERROR HANDLING-- */
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
/*
@@ -479,7 +476,7 @@ static int MPIR_Bcast_scatter_doubling_allgather(
int count,
MPI_Datatype datatype,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
MPI_Status status;
@@ -493,8 +490,8 @@ static int MPIR_Bcast_scatter_doubling_allgather(
int relative_dst, dst_tree_root, my_tree_root, send_offset;
int recv_offset, tree_root, nprocs_completed, offset;
MPI_Aint position;
- MPIU_CHKLMEM_DECL(1);
- MPID_Datatype *dtp;
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_Datatype *dtp;
MPI_Aint true_extent, true_lb;
void *tmp_buf;
@@ -545,7 +542,7 @@ static int MPIR_Bcast_scatter_doubling_allgather(
}
else
{
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, nbytes, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, nbytes, mpi_errno, "tmp_buf");
/* TODO: Pipeline the packing and communication */
position = 0;
@@ -570,7 +567,7 @@ static int MPIR_Bcast_scatter_doubling_allgather(
/* curr_size is the amount of data that this process now has stored in
* buffer at byte offset (relative_rank*scatter_size) */
- curr_size = MPIU_MIN(scatter_size, (nbytes - (relative_rank * scatter_size)));
+ curr_size = MPL_MIN(scatter_size, (nbytes - (relative_rank * scatter_size)));
if (curr_size < 0)
curr_size = 0;
@@ -750,7 +747,7 @@ static int MPIR_Bcast_scatter_doubling_allgather(
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -787,7 +784,7 @@ static int MPIR_Bcast_scatter_ring_allgather(
int count,
MPI_Datatype datatype,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int rank, comm_size;
@@ -801,9 +798,9 @@ static int MPIR_Bcast_scatter_ring_allgather(
void *tmp_buf;
int recvd_size;
MPI_Status status;
- MPID_Datatype *dtp;
+ MPIR_Datatype *dtp;
MPI_Aint true_extent, true_lb;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -851,7 +848,7 @@ static int MPIR_Bcast_scatter_ring_allgather(
}
else
{
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, nbytes, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, nbytes, mpi_errno, "tmp_buf");
/* TODO: Pipeline the packing and communication */
position = 0;
@@ -876,7 +873,7 @@ static int MPIR_Bcast_scatter_ring_allgather(
/* long-message allgather or medium-size but non-power-of-two. use ring algorithm. */
/* Calculate how much data we already have */
- curr_size = MPIR_MIN(scatter_size,
+ curr_size = MPL_MIN(scatter_size,
nbytes - ((rank - root + comm_size) % comm_size) * scatter_size);
if (curr_size < 0)
curr_size = 0;
@@ -891,11 +888,11 @@ static int MPIR_Bcast_scatter_ring_allgather(
rel_j = (j - root + comm_size) % comm_size;
rel_jnext = (jnext - root + comm_size) % comm_size;
- left_count = MPIR_MIN(scatter_size, (nbytes - rel_jnext * scatter_size));
+ left_count = MPL_MIN(scatter_size, (nbytes - rel_jnext * scatter_size));
if (left_count < 0)
left_count = 0;
left_disp = rel_jnext * scatter_size;
- right_count = MPIR_MIN(scatter_size, (nbytes - rel_j * scatter_size));
+ right_count = MPL_MIN(scatter_size, (nbytes - rel_j * scatter_size));
if (right_count < 0)
right_count = 0;
right_disp = rel_j * scatter_size;
@@ -939,7 +936,7 @@ static int MPIR_Bcast_scatter_ring_allgather(
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -993,7 +990,7 @@ static int MPIR_SMP_Bcast(
int count,
MPI_Datatype datatype,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -1004,9 +1001,9 @@ static int MPIR_SMP_Bcast(
int recvd_size;
if (!MPIR_CVAR_ENABLE_SMP_COLLECTIVES || !MPIR_CVAR_ENABLE_SMP_BCAST) {
- MPIU_Assert(0);
+ MPIR_Assert(0);
}
- MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
+ MPIR_Assert(MPIR_Comm_is_node_aware(comm_ptr));
is_homogeneous = 1;
#ifdef MPID_HAS_HETERO
@@ -1036,7 +1033,7 @@ static int MPIR_SMP_Bcast(
{
/* send to intranode-rank 0 on the root's node */
if (comm_ptr->node_comm != NULL &&
- MPIU_Get_intranode_rank(comm_ptr, root) > 0) /* is not the node root (0) */
+ MPIR_Get_intranode_rank(comm_ptr, root) > 0) /* is not the node root (0) */
{ /* and is on our node (!-1) */
if (root == comm_ptr->rank) {
mpi_errno = MPIC_Send(buffer,count,datatype,0,
@@ -1049,7 +1046,7 @@ static int MPIR_SMP_Bcast(
}
}
else if (0 == comm_ptr->node_comm->rank) {
- mpi_errno = MPIC_Recv(buffer,count,datatype,MPIU_Get_intranode_rank(comm_ptr, root),
+ mpi_errno = MPIC_Recv(buffer,count,datatype,MPIR_Get_intranode_rank(comm_ptr, root),
MPIR_BCAST_TAG,comm_ptr->node_comm, &status, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -1077,7 +1074,7 @@ static int MPIR_SMP_Bcast(
{
MPIR_Bcast_fn_or_override(MPIR_Bcast_binomial, mpi_errno_ret,
buffer, count, datatype,
- MPIU_Get_internode_rank(comm_ptr, root),
+ MPIR_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, errflag);
}
@@ -1099,14 +1096,14 @@ static int MPIR_SMP_Bcast(
/* perform the intranode broadcast on the root's node */
if (comm_ptr->node_comm != NULL &&
- MPIU_Get_intranode_rank(comm_ptr, root) > 0) /* is not the node root (0) */
+ MPIR_Get_intranode_rank(comm_ptr, root) > 0) /* is not the node root (0) */
{ /* and is on our node (!-1) */
/* FIXME binomial may not be the best algorithm for on-node
bcast. We need a more comprehensive system for selecting the
right algorithms here. */
MPIR_Bcast_fn_or_override(MPIR_Bcast_binomial, mpi_errno_ret,
buffer, count, datatype,
- MPIU_Get_intranode_rank(comm_ptr, root),
+ MPIR_Get_intranode_rank(comm_ptr, root),
comm_ptr->node_comm, errflag);
}
@@ -1117,21 +1114,21 @@ static int MPIR_SMP_Bcast(
{
MPIR_Bcast_fn_or_override(MPIR_Bcast_scatter_doubling_allgather, mpi_errno_ret,
buffer, count, datatype,
- MPIU_Get_internode_rank(comm_ptr, root),
+ MPIR_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, errflag);
}
else
{
MPIR_Bcast_fn_or_override(MPIR_Bcast_scatter_ring_allgather, mpi_errno_ret,
buffer, count, datatype,
- MPIU_Get_internode_rank(comm_ptr, root),
+ MPIR_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, errflag);
}
}
/* perform the intranode broadcast on all except for the root's node */
if (comm_ptr->node_comm != NULL &&
- MPIU_Get_intranode_rank(comm_ptr, root) <= 0) /* 0 if root was local root too */
+ MPIR_Get_intranode_rank(comm_ptr, root) <= 0) /* 0 if root was local root too */
{ /* -1 if different node than root */
/* FIXME binomial may not be the best algorithm for on-node
bcast. We need a more comprehensive system for selecting the
@@ -1163,8 +1160,6 @@ fn_exit:
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
/* --END ERROR HANDLING-- */
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
@@ -1220,7 +1215,7 @@ int MPIR_Bcast_intra (
int count,
MPI_Datatype datatype,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int mpi_errno = MPI_SUCCESS;
@@ -1229,12 +1224,9 @@ int MPIR_Bcast_intra (
int nbytes=0;
int is_homogeneous;
MPI_Aint type_size;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_BCAST);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_BCAST);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_BCAST);
-
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_BCAST);
if (count == 0) goto fn_exit;
@@ -1316,10 +1308,7 @@ int MPIR_Bcast_intra (
}
fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
-
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_BCAST);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_BCAST);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
@@ -1328,8 +1317,6 @@ fn_exit:
MPIR_ERR_SET(mpi_errno, *errflag, "**coll_fail");
/* --END ERROR HANDLING-- */
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
@@ -1344,7 +1331,7 @@ int MPIR_Bcast_inter (
int count,
MPI_Datatype datatype,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
/* Intercommunicator broadcast.
@@ -1354,10 +1341,10 @@ int MPIR_Bcast_inter (
int rank, mpi_errno;
int mpi_errno_ret = MPI_SUCCESS;
MPI_Status status;
- MPID_Comm *newcomm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_BCAST_INTER);
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_BCAST_INTER);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_BCAST_INTER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_BCAST_INTER);
if (root == MPI_PROC_NULL)
@@ -1368,7 +1355,6 @@ int MPIR_Bcast_inter (
else if (root == MPI_ROOT)
{
/* root sends to rank 0 on remote group and returns */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
mpi_errno = MPIC_Send(buffer, count, datatype, 0,
MPIR_BCAST_TAG, comm_ptr, errflag);
if (mpi_errno) {
@@ -1377,7 +1363,6 @@ int MPIR_Bcast_inter (
MPIR_ERR_SET(mpi_errno, *errflag, "**fail");
MPIR_ERR_ADD(mpi_errno_ret, mpi_errno);
}
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
}
else
{
@@ -1399,7 +1384,7 @@ int MPIR_Bcast_inter (
/* Get the local intracommunicator */
if (!comm_ptr->local_comm)
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
newcomm_ptr = comm_ptr->local_comm;
@@ -1414,8 +1399,7 @@ int MPIR_Bcast_inter (
}
}
-fn_fail:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_BCAST_INTER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_BCAST_INTER);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -1434,7 +1418,7 @@ fn_fail:
#define FUNCNAME MPIR_Bcast_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Bcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+int MPIR_Bcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -1466,11 +1450,11 @@ int MPIR_Bcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MP
#define FUNCNAME MPIR_Bcast
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-inline int MPIR_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+inline int MPIR_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Bcast_intra( buffer, count, datatype, root, comm_ptr, errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -1524,14 +1508,14 @@ int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root,
MPI_Comm comm )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_BCAST);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_BCAST);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_BCAST);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_BCAST);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -1545,20 +1529,20 @@ int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
}
else {
@@ -1567,7 +1551,7 @@ int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root,
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -1582,13 +1566,13 @@ int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root,
/* ... body of routine ... */
- mpi_errno = MPIR_Bcast_impl( buffer, count, datatype, root, comm_ptr, &errflag );
+ mpi_errno = MPID_Bcast( buffer, count, datatype, root, comm_ptr, &errflag );
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_BCAST);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_BCAST);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/collutil.h b/src/mpi/coll/collutil.h
index bbdcc39..8fc26d3 100644
--- a/src/mpi/coll/collutil.h
+++ b/src/mpi/coll/collutil.h
@@ -31,14 +31,14 @@ static inline int MPIU_is_pof2(int val, int *ceil_pof2)
/* returns TRUE iff the given op is commutative */
static inline int MPIR_Op_is_commutative(MPI_Op op)
{
- MPID_Op *op_ptr;
+ MPIR_Op *op_ptr;
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
return TRUE;
}
else {
- MPID_Op_get_ptr(op, op_ptr);
- if (op_ptr->kind == MPID_OP_USER_NONCOMMUTE)
+ MPIR_Op_get_ptr(op, op_ptr);
+ if (op_ptr->kind == MPIR_OP_KIND__USER_NONCOMMUTE)
return FALSE;
else
return TRUE;
diff --git a/src/mpi/coll/exscan.c b/src/mpi/coll/exscan.c
index a17e54b..5191157 100644
--- a/src/mpi/coll/exscan.c
+++ b/src/mpi/coll/exscan.c
@@ -90,7 +90,7 @@ int MPIR_Exscan (
int count,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
MPI_Status status;
@@ -100,26 +100,31 @@ int MPIR_Exscan (
int mask, dst, is_commutative, flag;
MPI_Aint true_extent, true_lb, extent;
void *partial_scan, *tmp_buf;
- MPID_Op *op_ptr;
- MPIU_CHKLMEM_DECL(2);
- MPID_THREADPRIV_DECL;
+ MPIR_Op *op_ptr;
+ MPIR_CHKLMEM_DECL(2);
if (count == 0) return MPI_SUCCESS;
- MPID_THREADPRIV_GET;
-
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
/* set op_errno to 0. stored in perthread structure */
- MPID_THREADPRIV_FIELD(op_errno) = 0;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = 0;
+ }
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
is_commutative = 1;
}
else {
- MPID_Op_get_ptr(op, op_ptr);
- if (op_ptr->kind == MPID_OP_USER_NONCOMMUTE)
+ MPIR_Op_get_ptr(op, op_ptr);
+ if (op_ptr->kind == MPIR_OP_KIND__USER_NONCOMMUTE)
is_commutative = 0;
else
is_commutative = 1;
@@ -130,12 +135,12 @@ int MPIR_Exscan (
MPID_Datatype_get_extent_macro( datatype, extent );
- MPIU_CHKLMEM_MALLOC(partial_scan, void *, (count*(MPIR_MAX(true_extent,extent))), mpi_errno, "partial_scan");
+ MPIR_CHKLMEM_MALLOC(partial_scan, void *, (count*(MPL_MAX(true_extent,extent))), mpi_errno, "partial_scan");
/* adjust for potential negative lower bound in datatype */
partial_scan = (void *)((char*)partial_scan - true_lb);
/* need to allocate temporary buffer to store incoming data*/
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, (count*(MPIR_MAX(true_extent,extent))), mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, (count*(MPL_MAX(true_extent,extent))), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -143,9 +148,6 @@ int MPIR_Exscan (
partial_scan, count, datatype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
flag = 0;
mask = 0x1;
while (mask < comm_size) {
@@ -212,14 +214,20 @@ int MPIR_Exscan (
mask <<= 1;
}
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
- if (MPID_THREADPRIV_FIELD(op_errno))
- mpi_errno = MPID_THREADPRIV_FIELD(op_errno);
+ if (per_thread->op_errno)
+ mpi_errno = per_thread->op_errno;
+ }
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -238,7 +246,7 @@ fn_fail:
#define FUNCNAME MPIR_Exscan_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Exscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+int MPIR_Exscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -304,14 +312,14 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
MPI_Op op, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_EXSCAN);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_EXSCAN);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_EXSCAN);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_EXSCAN);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -325,18 +333,18 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
- MPID_Op *op_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
int rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_COMM_INTRA(comm_ptr, mpi_errno);
@@ -346,7 +354,7 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -363,8 +371,8 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
@@ -382,13 +390,13 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
/* ... body of routine ... */
- mpi_errno = MPIR_Exscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, &errflag);
+ mpi_errno = MPID_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_EXSCAN);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_EXSCAN);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/gather.c b/src/mpi/coll/gather.c
index e6387d3..1a1afac 100644
--- a/src/mpi/coll/gather.c
+++ b/src/mpi/coll/gather.c
@@ -86,7 +86,7 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
+ int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int comm_size, rank;
@@ -106,7 +106,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Aint struct_displs[2];
MPI_Datatype types[2], tmp_type;
int copy_offset = 0, copy_blks = 0;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
#ifdef MPID_HAS_HETERO
int position, recv_size;
@@ -125,9 +125,6 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
is_homogeneous = 0;
#endif
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* Use binomial tree algorithm. */
relative_rank = (rank >= root) ? rank - root : rank - root + comm_size;
@@ -135,7 +132,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (rank == root)
{
MPID_Datatype_get_extent_macro(recvtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf+
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf+
(extent*recvcount*comm_size));
}
@@ -175,7 +172,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
tmp_buf_size = 0;
if (tmp_buf_size) {
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
}
if (rank == root)
@@ -220,8 +217,8 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
* should cover the case where the root is
* rank 0. */
mpi_errno = MPIC_Recv(((char *)recvbuf +
- (((rank + mask) % comm_size)*recvcount*extent)),
- recvblks * recvcount, recvtype, src,
+ (((rank + mask) % comm_size)*(MPI_Aint)recvcount*extent)),
+ (MPI_Aint)recvblks * recvcount, recvtype, src,
MPIR_GATHER_TAG, comm_ptr,
&status, errflag);
if (mpi_errno) {
@@ -233,7 +230,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
else if (nbytes < MPIR_CVAR_GATHER_VSMALL_MSG_SIZE) {
/* small transfer size case. cast ok */
- MPIU_Assert(recvblks*nbytes == (int)(recvblks*nbytes));
+ MPIR_Assert(recvblks*nbytes == (int)(recvblks*nbytes));
mpi_errno = MPIC_Recv(tmp_buf, (int)(recvblks * nbytes),
MPI_BYTE, src, MPIR_GATHER_TAG,
comm_ptr, &status, errflag);
@@ -327,7 +324,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
else {
blocks[0] = sendcount;
- struct_displs[0] = MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf;
+ struct_displs[0] = MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf;
types[0] = sendtype;
/* check for overflow. work around int limits if needed*/
if (curr_cnt - nbytes != (int)(curr_cnt - nbytes)) {
@@ -335,10 +332,10 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_Type_contiguous_x_impl(curr_cnt - nbytes,
MPI_BYTE, &(types[1]));
} else {
- MPIU_Assign_trunc(blocks[1], curr_cnt - nbytes, int);
+ MPIR_Assign_trunc(blocks[1], curr_cnt - nbytes, int);
types[1] = MPI_BYTE;
}
- struct_displs[1] = MPIU_VOID_PTR_CAST_TO_MPI_AINT tmp_buf;
+ struct_displs[1] = MPIR_VOID_PTR_CAST_TO_MPI_AINT tmp_buf;
mpi_errno = MPIR_Type_create_struct_impl(2, blocks, struct_displs, types, &tmp_type);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -388,7 +385,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
else
MPIR_Pack_size_impl(sendcount*(comm_size/2), sendtype, &tmp_buf_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
position = 0;
if (sendbuf != MPI_IN_PLACE)
@@ -482,9 +479,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
#endif /* MPID_HAS_HETERO */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -502,7 +497,7 @@ int MPIR_Gather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Gather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
+ int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
/* Intercommunicator gather.
@@ -523,8 +518,8 @@ int MPIR_Gather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Status status;
MPI_Aint extent, true_extent, true_lb = 0;
void *tmp_buf=NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_CHKLMEM_DECL(1);
if (root == MPI_PROC_NULL)
{
@@ -532,8 +527,6 @@ int MPIR_Gather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
return MPI_SUCCESS;
}
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
remote_size = comm_ptr->remote_size;
local_size = comm_ptr->local_size;
@@ -577,23 +570,23 @@ int MPIR_Gather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_Type_get_true_extent_impl(sendtype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(sendtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(sendcount*local_size*
- (MPIR_MAX(extent, true_extent)));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, sendcount*local_size*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_Ensure_Aint_fits_in_pointer(sendcount*local_size*
+ (MPL_MAX(extent, true_extent)));
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, sendcount*local_size*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
}
/* all processes in remote group form new intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
newcomm_ptr = comm_ptr->local_comm;
/* now do the a local gather on this intracommunicator */
- mpi_errno = MPIR_Gather_impl(sendbuf, sendcount, sendtype,
+ mpi_errno = MPID_Gather(sendbuf, sendcount, sendtype,
tmp_buf, sendcount, sendtype, 0,
newcomm_ptr, errflag);
if (mpi_errno) {
@@ -623,7 +616,7 @@ int MPIR_Gather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (root == MPI_ROOT)
{
MPID_Datatype_get_extent_macro(recvtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(recvcount*remote_size*extent));
for (i=0; i<remote_size; i++)
@@ -653,8 +646,7 @@ int MPIR_Gather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -674,11 +666,11 @@ int MPIR_Gather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Gather_intra(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype, root,
@@ -708,7 +700,7 @@ int MPIR_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Gather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -773,14 +765,14 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
int root, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GATHER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GATHER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_GATHER);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_GATHER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -794,20 +786,20 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
if (sendbuf != MPI_IN_PLACE) {
@@ -815,7 +807,7 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -829,7 +821,7 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -848,7 +840,7 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
@@ -856,7 +848,7 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -870,7 +862,7 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -886,13 +878,13 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Gather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, &errflag);
+ mpi_errno = MPID_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_GATHER);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_GATHER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/gatherv.c b/src/mpi/coll/gatherv.c
index ae6cd29..1d5d184 100644
--- a/src/mpi/coll/gatherv.c
+++ b/src/mpi/coll/gatherv.c
@@ -82,7 +82,7 @@ int MPIR_Gatherv (
const int *displs,
MPI_Datatype recvtype,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int comm_size, rank;
@@ -91,35 +91,32 @@ int MPIR_Gatherv (
MPI_Aint extent;
int i, reqs;
int min_procs;
- MPID_Request **reqarray;
+ MPIR_Request **reqarray;
MPI_Status *starray;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
rank = comm_ptr->rank;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* If rank == root, then I recv lots, otherwise I send */
- if (((comm_ptr->comm_kind == MPID_INTRACOMM) && (root == rank)) ||
- ((comm_ptr->comm_kind == MPID_INTERCOMM) && (root == MPI_ROOT))) {
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (root == rank)) ||
+ ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) && (root == MPI_ROOT))) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
comm_size = comm_ptr->local_size;
else
comm_size = comm_ptr->remote_size;
MPID_Datatype_get_extent_macro(recvtype, extent);
/* each node can make sure it is not going to overflow aint */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
displs[rank] * extent);
- MPIU_CHKLMEM_MALLOC(reqarray, MPID_Request **, comm_size * sizeof(MPID_Request *), mpi_errno, "reqarray");
- MPIU_CHKLMEM_MALLOC(starray, MPI_Status *, comm_size * sizeof(MPI_Status), mpi_errno, "starray");
+ MPIR_CHKLMEM_MALLOC(reqarray, MPIR_Request **, comm_size * sizeof(MPIR_Request *), mpi_errno, "reqarray");
+ MPIR_CHKLMEM_MALLOC(starray, MPI_Status *, comm_size * sizeof(MPI_Status), mpi_errno, "starray");
reqs = 0;
for (i = 0; i < comm_size; i++) {
if (recvcounts[i]) {
- if ((comm_ptr->comm_kind == MPID_INTRACOMM) && (i == rank)) {
+ if ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (i == rank)) {
if (sendbuf != MPI_IN_PLACE) {
mpi_errno = MPIR_Localcopy(sendbuf, sendcount, sendtype,
((char *)recvbuf+displs[rank]*extent),
@@ -195,9 +192,7 @@ int MPIR_Gatherv (
fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -217,7 +212,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Gatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -286,14 +281,14 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Datatype recvtype, int root, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GATHERV);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GATHERV);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_GATHERV);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_GATHERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -307,20 +302,20 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int i, rank, comm_size;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
if (sendbuf != MPI_IN_PLACE) {
@@ -328,7 +323,7 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -345,7 +340,7 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -370,7 +365,7 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
@@ -381,7 +376,7 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -399,7 +394,7 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -415,7 +410,7 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype,
+ mpi_errno = MPID_Gatherv(sendbuf, sendcount, sendtype,
recvbuf, recvcounts, displs, recvtype,
root, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
@@ -423,7 +418,7 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_GATHERV);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_GATHERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/helper_fns.c b/src/mpi/coll/helper_fns.c
index 7b7fb83..2c38cdc 100644
--- a/src/mpi/coll/helper_fns.c
+++ b/src/mpi/coll/helper_fns.c
@@ -16,7 +16,7 @@
/* These functions are used in the implementation of collective
operations. They are wrappers around MPID send/recv functions. They do
sends/receives by setting the context offset to
- MPID_CONTEXT_INTRA_COLL or MPID_CONTEXT_INTER_COLL. */
+ MPIR_CONTEXT_INTRA_COLL or MPIR_CONTEXT_INTER_COLL. */
#undef FUNCNAME
#define FUNCNAME MPIC_Probe
@@ -26,12 +26,12 @@ int MPIC_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
- MPID_Comm *comm_ptr;
+ MPIR_Comm *comm_ptr;
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
mpi_errno = MPID_Probe(source, tag, comm_ptr, context_id, status);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -54,10 +54,10 @@ int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtyp
int sendtype_iscontig, recvtype_iscontig;
MPI_Aint sendsize, recvsize, sdata_sz, rdata_sz, copy_sz;
MPI_Aint true_extent, sendtype_true_lb, recvtype_true_lb;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_LOCALCOPY);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_LOCALCOPY);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_LOCALCOPY);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_LOCALCOPY);
MPID_Datatype_get_size_macro(sendtype, sendsize);
MPID_Datatype_get_size_macro(recvtype, recvsize);
@@ -81,7 +81,7 @@ int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtyp
/* Builtin types is the common case; optimize for it */
if ((HANDLE_GET_KIND(sendtype) == HANDLE_KIND_BUILTIN) &&
HANDLE_GET_KIND(recvtype) == HANDLE_KIND_BUILTIN) {
- MPIU_Memcpy(recvbuf, sendbuf, copy_sz);
+ MPIR_Memcpy(recvbuf, sendbuf, copy_sz);
goto fn_exit;
}
@@ -99,7 +99,7 @@ int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtyp
((char *)sendbuf + sendtype_true_lb),
copy_sz);
#endif
- MPIU_Memcpy(((char *) recvbuf + recvtype_true_lb),
+ MPIR_Memcpy(((char *) recvbuf + recvtype_true_lb),
((char *) sendbuf + sendtype_true_lb),
copy_sz);
}
@@ -126,13 +126,13 @@ int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtyp
else
{
char * buf;
- MPIDI_msg_sz_t buf_off;
+ intptr_t buf_off;
MPID_Segment sseg;
- MPIDI_msg_sz_t sfirst;
+ intptr_t sfirst;
MPID_Segment rseg;
- MPIDI_msg_sz_t rfirst;
+ intptr_t rfirst;
- MPIU_CHKLMEM_MALLOC(buf, char *, COPY_BUFFER_SZ, mpi_errno, "buf");
+ MPIR_CHKLMEM_MALLOC(buf, char *, COPY_BUFFER_SZ, mpi_errno, "buf");
MPID_Segment_init(sendbuf, sendcount, sendtype, &sseg, 0);
MPID_Segment_init(recvbuf, recvcount, recvtype, &rseg, 0);
@@ -156,13 +156,13 @@ int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtyp
}
MPID_Segment_pack(&sseg, sfirst, &last, buf + buf_off);
- MPIU_Assert(last > sfirst);
+ MPIR_Assert(last > sfirst);
buf_end = buf + buf_off + (last - sfirst);
sfirst = last;
MPID_Segment_unpack(&rseg, rfirst, &last, buf);
- MPIU_Assert(last > rfirst);
+ MPIR_Assert(last > rfirst);
rfirst = last;
@@ -186,8 +186,8 @@ int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtyp
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_LOCALCOPY);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_LOCALCOPY);
return mpi_errno;
fn_fail:
@@ -203,24 +203,24 @@ int MPIR_Localcopy(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtyp
#define FUNCNAME MPIC_Wait
#undef FCNAME
#define FCNAME "MPIC_Wait"
-int MPIC_Wait(MPID_Request * request_ptr, MPIR_Errflag_t *errflag)
+int MPIC_Wait(MPIR_Request * request_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_WAIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_WAIT);
- MPIDI_PT2PT_FUNC_ENTER(MPID_STATE_MPIC_WAIT);
+ MPIR_FUNC_VERBOSE_PT2PT_ENTER(MPID_STATE_MPIC_WAIT);
- MPIU_DBG_MSG_S(PT2PT, TYPICAL, "IN: errflag = %s", *errflag?"TRUE":"FALSE");
+ MPL_DBG_MSG_S(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %s", *errflag?"TRUE":"FALSE");
- if (request_ptr->kind == MPID_REQUEST_SEND)
+ if (request_ptr->kind == MPIR_REQUEST_KIND__SEND)
request_ptr->status.MPI_TAG = 0;
- if (!MPID_Request_is_complete(request_ptr))
+ if (!MPIR_Request_is_complete(request_ptr))
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(request_ptr))
+ while (!MPIR_Request_is_complete(request_ptr))
{
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
@@ -228,14 +228,14 @@ int MPIC_Wait(MPID_Request * request_ptr, MPIR_Errflag_t *errflag)
MPID_Progress_end(&progress_state);
}
- if (request_ptr->kind == MPID_REQUEST_RECV)
+ if (request_ptr->kind == MPIR_REQUEST_KIND__RECV)
MPIR_Process_status(&request_ptr->status, errflag);
MPIR_TAG_CLEAR_ERROR_BITS(request_ptr->status.MPI_TAG);
fn_exit:
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
- MPIDI_PT2PT_FUNC_EXIT(MPID_STATE_MPIC_WAIT);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
+ MPIR_FUNC_VERBOSE_PT2PT_EXIT(MPID_STATE_MPIC_WAIT);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
@@ -269,16 +269,16 @@ int MPIC_Wait(MPID_Request * request_ptr, MPIR_Errflag_t *errflag)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIC_Send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
- MPID_Request *request_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_SEND);
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_SEND);
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
MPIR_ERR_CHKANDJUMP1((count < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", count);
@@ -292,8 +292,8 @@ int MPIC_Send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
MPIR_TAG_SET_ERROR_BIT(tag);
}
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
mpi_errno = MPID_Send(buf, count, datatype, dest, tag, comm_ptr,
context_id, &request_ptr);
@@ -301,16 +301,16 @@ int MPIC_Send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
if (request_ptr) {
mpi_errno = MPIC_Wait(request_ptr, errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
}
fn_exit:
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_SEND);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_SEND);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- if (request_ptr) MPID_Request_release(request_ptr);
+ if (request_ptr) MPIR_Request_free(request_ptr);
if (mpi_errno && !*errflag) {
if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(mpi_errno)) {
*errflag = MPIR_ERR_PROC_FAILED;
@@ -327,23 +327,23 @@ int MPIC_Send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIC_Recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source, int tag,
- MPID_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
MPI_Status mystatus;
- MPID_Request *request_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_RECV);
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_RECV);
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
MPIR_ERR_CHKANDJUMP1((count < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", count);
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
if (status == MPI_STATUS_IGNORE)
status = &mystatus;
@@ -358,7 +358,7 @@ int MPIC_Recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source, int
*status = request_ptr->status;
mpi_errno = status->MPI_ERROR;
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
} else {
MPIR_Process_status(status, errflag);
@@ -366,16 +366,16 @@ int MPIC_Recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source, int
}
if (MPI_SUCCESS == MPIR_ERR_GET_CLASS(status->MPI_ERROR)) {
- MPIU_Assert(status->MPI_TAG == tag);
+ MPIR_Assert(status->MPI_TAG == tag);
}
fn_exit:
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_RECV);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_RECV);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- if (request_ptr) MPID_Request_release(request_ptr);
+ if (request_ptr) MPIR_Request_free(request_ptr);
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -385,22 +385,22 @@ int MPIC_Recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source, int
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIC_Ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
- MPID_Request *request_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_SSEND);
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_SSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_SSEND);
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
MPIR_ERR_CHKANDJUMP1((count < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", count);
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
switch(*errflag) {
case MPIR_ERR_NONE:
@@ -417,16 +417,16 @@ int MPIC_Ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
if (request_ptr) {
mpi_errno = MPIC_Wait(request_ptr, errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
}
fn_exit:
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_SSEND);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_SSEND);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- if (request_ptr) MPID_Request_release(request_ptr);
+ if (request_ptr) MPIR_Request_free(request_ptr);
if (mpi_errno && !*errflag) {
if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(mpi_errno)) {
*errflag = MPIR_ERR_PROC_FAILED;
@@ -445,25 +445,25 @@ int MPIC_Ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
int MPIC_Sendrecv(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtype,
int dest, int sendtag, void *recvbuf, MPI_Aint recvcount,
MPI_Datatype recvtype, int source, int recvtag,
- MPID_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
MPI_Status mystatus;
- MPID_Request *recv_req_ptr = NULL, *send_req_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_SENDRECV);
+ MPIR_Request *recv_req_ptr = NULL, *send_req_ptr = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_SENDRECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_SENDRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_SENDRECV);
- MPIU_DBG_MSG_S(PT2PT, TYPICAL, "IN: errflag = %s", *errflag?"TRUE":"FALSE");
+ MPL_DBG_MSG_S(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %s", *errflag?"TRUE":"FALSE");
MPIR_ERR_CHKANDJUMP1((sendcount < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", sendcount);
MPIR_ERR_CHKANDJUMP1((recvcount < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", recvcount);
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
if (status == MPI_STATUS_IGNORE) status = &mystatus;
switch(*errflag) {
@@ -497,19 +497,19 @@ int MPIC_Sendrecv(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtype
}
}
- MPID_Request_release(send_req_ptr);
- MPID_Request_release(recv_req_ptr);
+ MPIR_Request_free(send_req_ptr);
+ MPIR_Request_free(recv_req_ptr);
fn_exit:
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_SENDRECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_SENDRECV);
return mpi_errno;
fn_fail:
if (send_req_ptr)
- MPID_Request_release(send_req_ptr);
+ MPIR_Request_free(send_req_ptr);
if (recv_req_ptr)
- MPID_Request_release(recv_req_ptr);
+ MPIR_Request_free(recv_req_ptr);
goto fn_exit;
}
@@ -523,26 +523,22 @@ int MPIC_Sendrecv(const void *sendbuf, MPI_Aint sendcount, MPI_Datatype sendtype
int MPIC_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
int dest, int sendtag,
int source, int recvtag,
- MPID_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPI_Status *status, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
MPI_Status mystatus;
- MPIU_Context_id_t context_id_offset;
- MPID_Request *sreq = NULL;
- MPID_Request *rreq = NULL;
+ MPIR_Context_id_t context_id_offset;
+ MPIR_Request *sreq = NULL;
+ MPIR_Request *rreq = NULL;
void *tmpbuf = NULL;
MPI_Aint tmpbuf_size = 0;
MPI_Aint tmpbuf_count = 0;
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIC_SENDRECV_REPLACE);
-#ifdef MPID_LOG_ARROWS
- /* The logging macros log sendcount and recvcount */
- int sendcount = count, recvcount = count;
-#endif
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_SENDRECV_REPLACE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_SENDRECV_REPLACE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_SENDRECV_REPLACE);
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
MPIR_ERR_CHKANDJUMP1((count < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", count);
@@ -557,12 +553,12 @@ int MPIC_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
MPIR_TAG_SET_ERROR_BIT(sendtag);
}
- context_id_offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id_offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
if (count > 0 && dest != MPI_PROC_NULL) {
MPIR_Pack_size_impl(count, datatype, &tmpbuf_size);
- MPIU_CHKLMEM_MALLOC(tmpbuf, void *, tmpbuf_size, mpi_errno, "temporary send buffer");
+ MPIR_CHKLMEM_MALLOC(tmpbuf, void *, tmpbuf_size, mpi_errno, "temporary send buffer");
mpi_errno = MPIR_Pack_impl(buf, count, datatype, tmpbuf, tmpbuf_size, &tmpbuf_count);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -578,7 +574,7 @@ int MPIC_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
/* --BEGIN ERROR HANDLING-- */
/* FIXME: should we cancel the pending (possibly completed) receive
* request or wait for it to complete? */
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
MPIR_ERR_POP(mpi_errno);
/* --END ERROR HANDLING-- */
}
@@ -598,19 +594,19 @@ int MPIC_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
}
}
- MPID_Request_release(sreq);
- MPID_Request_release(rreq);
+ MPIR_Request_free(sreq);
+ MPIR_Request_free(rreq);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_SENDRECV_REPLACE);
+ MPIR_CHKLMEM_FREEALL();
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_SENDRECV_REPLACE);
return mpi_errno;
fn_fail:
if (sreq)
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
if (rreq)
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
goto fn_exit;
}
@@ -618,16 +614,16 @@ int MPIC_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
#define FUNCNAME MPIC_Isend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIC_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPID_Request **request_ptr, MPIR_Errflag_t *errflag)
+int MPIC_Isend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
+ MPIR_Comm *comm_ptr, MPIR_Request **request_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_ISEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_ISEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_ISEND);
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
MPIR_ERR_CHKANDJUMP1((count < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", count);
@@ -641,15 +637,15 @@ int MPIC_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int
MPIR_TAG_SET_ERROR_BIT(tag);
}
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
mpi_errno = MPID_Isend(buf, count, datatype, dest, tag, comm_ptr,
context_id, request_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_ISEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_ISEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -659,16 +655,16 @@ int MPIC_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int
#define FUNCNAME MPIC_Issend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIC_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPID_Request **request_ptr, MPIR_Errflag_t *errflag)
+int MPIC_Issend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
+ MPIR_Comm *comm_ptr, MPIR_Request **request_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_ISSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_ISSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_ISSEND);
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %d", *errflag);
MPIR_ERR_CHKANDJUMP1((count < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", count);
@@ -682,15 +678,15 @@ int MPIC_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int
MPIR_TAG_SET_ERROR_BIT(tag);
}
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
mpi_errno = MPID_Issend(buf, count, datatype, dest, tag, comm_ptr,
context_id, request_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_ISSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_ISSEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -700,27 +696,27 @@ int MPIC_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int
#define FUNCNAME MPIC_Irecv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIC_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
- int tag, MPID_Comm *comm_ptr, MPID_Request **request_ptr)
+int MPIC_Irecv(void *buf, MPI_Aint count, MPI_Datatype datatype, int source,
+ int tag, MPIR_Comm *comm_ptr, MPIR_Request **request_ptr)
{
int mpi_errno = MPI_SUCCESS;
int context_id;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_IRECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_IRECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_IRECV);
MPIR_ERR_CHKANDJUMP1((count < 0), mpi_errno, MPI_ERR_COUNT,
"**countneg", "**countneg %d", count);
- context_id = (comm_ptr->comm_kind == MPID_INTRACOMM) ?
- MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
+ context_id = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ?
+ MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
mpi_errno = MPID_Irecv(buf, count, datatype, source, tag, comm_ptr,
context_id, request_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_IRECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_IRECV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -731,7 +727,7 @@ int MPIC_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
#define FUNCNAME MPIC_Waitall
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIC_Waitall(int numreq, MPID_Request *requests[], MPI_Status statuses[], MPIR_Errflag_t *errflag)
+int MPIC_Waitall(int numreq, MPIR_Request *requests[], MPI_Status statuses[], MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -739,20 +735,20 @@ int MPIC_Waitall(int numreq, MPID_Request *requests[], MPI_Status statuses[], MP
MPI_Request *request_ptrs = request_ptr_array;
MPI_Status status_static_array[MPIC_REQUEST_PTR_ARRAY_SIZE];
MPI_Status *status_array = statuses;
- MPIDI_STATE_DECL(MPID_STATE_MPIC_WAITALL);
- MPIU_CHKLMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIC_WAITALL);
+ MPIR_CHKLMEM_DECL(2);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIC_WAITALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIC_WAITALL);
- MPIU_DBG_MSG_S(PT2PT, TYPICAL, "IN: errflag = %s", *errflag?"TRUE":"FALSE");
+ MPL_DBG_MSG_S(MPIR_DBG_PT2PT, TYPICAL, "IN: errflag = %s", *errflag?"TRUE":"FALSE");
if (statuses == MPI_STATUSES_IGNORE) {
status_array = status_static_array;
}
if (numreq > MPIC_REQUEST_PTR_ARRAY_SIZE) {
- MPIU_CHKLMEM_MALLOC(request_ptrs, MPI_Request *, numreq * sizeof(MPI_Request), mpi_errno, "request pointers");
- MPIU_CHKLMEM_MALLOC(status_array, MPI_Status *, numreq * sizeof(MPI_Status), mpi_errno, "status objects");
+ MPIR_CHKLMEM_MALLOC(request_ptrs, MPI_Request *, numreq * sizeof(MPI_Request), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC(status_array, MPI_Status *, numreq * sizeof(MPI_Status), mpi_errno, "status objects");
}
for (i = 0; i < numreq; ++i) {
@@ -760,8 +756,9 @@ int MPIC_Waitall(int numreq, MPID_Request *requests[], MPI_Status statuses[], MP
to check for the error bit in the tag below, we should initialize all
tag fields here. */
status_array[i].MPI_TAG = 0;
+ status_array[i].MPI_SOURCE = MPI_PROC_NULL;
- /* Convert the MPID_Request objects to MPI_Request objects */
+ /* Convert the MPIR_Request objects to MPI_Request objects */
request_ptrs[i] = requests[i]->handle;
}
@@ -778,10 +775,10 @@ int MPIC_Waitall(int numreq, MPID_Request *requests[], MPI_Status statuses[], MP
fn_exit:
if (numreq > MPIC_REQUEST_PTR_ARRAY_SIZE)
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
- MPIU_DBG_MSG_D(PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIC_WAITALL);
+ MPL_DBG_MSG_D(MPIR_DBG_PT2PT, TYPICAL, "OUT: errflag = %d", *errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIC_WAITALL);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index abebbe6..ef0f2ae 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -31,20 +31,22 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, vo
/* helper callbacks and associated state structures */
struct shared_state {
int recvtype;
- int curr_count;
- int last_recv_count;
+ MPI_Aint curr_count;
+ MPI_Aint last_recv_count;
MPI_Status status;
};
-static int get_count(MPID_Comm *comm, int tag, void *state)
+static int get_count(MPIR_Comm *comm, int tag, void *state)
{
struct shared_state *ss = state;
- MPIR_Get_count_impl(&ss->status, ss->recvtype, &ss->last_recv_count);
+ int recv_count;
+ MPIR_Get_count_impl(&ss->status, ss->recvtype, &recv_count);
+ ss->last_recv_count = recv_count;
ss->curr_count += ss->last_recv_count;
return MPI_SUCCESS;
}
-static int dtp_release_ref(MPID_Comm *comm, int tag, void *state)
+static int dtp_release_ref(MPIR_Comm *comm, int tag, void *state)
{
- MPID_Datatype *recv_dtp = state;
+ MPIR_Datatype *recv_dtp = state;
MPID_Datatype_release(recv_dtp);
return MPI_SUCCESS;
}
@@ -55,7 +57,7 @@ static int dtp_release_ref(MPID_Comm *comm, int tag, void *state)
#define FUNCNAME MPIR_Iallgather_rec_dbl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
struct shared_state *ss = NULL;
@@ -65,7 +67,7 @@ int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sen
int dst_tree_root, my_tree_root, tree_root;
int offset, send_offset, recv_offset;
MPI_Aint recvtype_extent;
- MPID_Datatype *recv_dtp;
+ MPIR_Datatype *recv_dtp;
MPIR_SCHED_CHKPMEM_DECL(1);
comm_size = comm_ptr->local_size;
@@ -79,16 +81,16 @@ int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sen
MPID_Datatype_get_extent_macro( recvtype, recvtype_extent );
/* This is the largest offset we add to recvbuf */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(comm_size * recvcount * recvtype_extent));
/* copy local data into recvbuf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
((char *)recvbuf + rank*recvcount*recvtype_extent),
recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
MPIR_SCHED_CHKPMEM_MALLOC(ss, struct shared_state *, sizeof(struct shared_state), mpi_errno, "ss");
@@ -119,19 +121,19 @@ int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sen
recv_offset = dst_tree_root * recvcount * recvtype_extent;
if (dst < comm_size) {
- mpi_errno = MPID_Sched_send_defer(((char *)recvbuf + send_offset),
+ mpi_errno = MPIR_Sched_send_defer(((char *)recvbuf + send_offset),
&ss->curr_count, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* send-recv, no sched barrier here */
- mpi_errno = MPID_Sched_recv_status(((char *)recvbuf + recv_offset),
+ mpi_errno = MPIR_Sched_recv_status(((char *)recvbuf + recv_offset),
((comm_size-dst_tree_root)*recvcount),
recvtype, dst, comm_ptr, &ss->status, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_cb(&get_count, ss, s);
+ mpi_errno = MPIR_Sched_cb(&get_count, ss, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* if some processes in this process's subtree in this step
@@ -184,11 +186,11 @@ int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sen
/* last_recv_count was set in the previous
receive. that's the amount of data to be
sent now. */
- mpi_errno = MPID_Sched_send_defer(((char *)recvbuf + offset),
+ mpi_errno = MPIR_Sched_send_defer(((char *)recvbuf + offset),
&ss->last_recv_count,
recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* recv only if this proc. doesn't have data and sender
has data */
@@ -198,13 +200,13 @@ int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sen
{
/* nprocs_completed is also equal to the
no. of processes whose data we don't have */
- mpi_errno = MPID_Sched_recv_status(((char *)recvbuf + offset),
+ mpi_errno = MPIR_Sched_recv_status(((char *)recvbuf + offset),
((comm_size - (my_tree_root + mask))*recvcount),
recvtype, dst, comm_ptr, &ss->status, s);
- MPID_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_cb(&get_count, ss, s);
+ MPIR_SCHED_BARRIER(s);
+ mpi_errno = MPIR_Sched_cb(&get_count, ss, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
tmp_mask >>= 1;
@@ -218,7 +220,7 @@ int MPIR_Iallgather_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sen
}
if (recv_dtp) {
- mpi_errno = MPID_Sched_cb(dtp_release_ref, recv_dtp, s);
+ mpi_errno = MPIR_Sched_cb(dtp_release_ref, recv_dtp, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -234,7 +236,7 @@ fn_fail:
#define FUNCNAME MPIR_Iallgather_bruck
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int pof2, curr_cnt, rem, src, dst;
@@ -250,13 +252,13 @@ int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendt
MPIR_Type_get_true_extent_impl(recvtype, &recvtype_true_lb, &recvtype_true_extent);
/* This is the largest offset we add to recvbuf */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(comm_size * recvcount * recvtype_extent));
/* allocate a temporary buffer of the same size as recvbuf. */
/* get true extent of recvtype */
- recvbuf_extent = recvcount * comm_size * (MPIR_MAX(recvtype_true_extent, recvtype_extent));
+ recvbuf_extent = recvcount * comm_size * (MPL_MAX(recvtype_true_extent, recvtype_extent));
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void*, recvbuf_extent, mpi_errno, "tmp_buf");
@@ -265,17 +267,17 @@ int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* copy local data to the top of tmp_buf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
tmp_buf, recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
- mpi_errno = MPID_Sched_copy(((char *)recvbuf + rank * recvcount * recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)recvbuf + rank * recvcount * recvtype_extent),
recvcount, recvtype, tmp_buf,
recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* do the first \floor(\lg p) steps */
@@ -286,13 +288,13 @@ int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendt
src = (rank + pof2) % comm_size;
dst = (rank - pof2 + comm_size) % comm_size;
- mpi_errno = MPID_Sched_send(tmp_buf, curr_cnt, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, curr_cnt, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* logically sendrecv, so no barrier here */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + curr_cnt*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + curr_cnt*recvtype_extent),
curr_cnt, recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
curr_cnt *= 2;
pof2 *= 2;
@@ -305,26 +307,26 @@ int MPIR_Iallgather_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendt
src = (rank + pof2) % comm_size;
dst = (rank - pof2 + comm_size) % comm_size;
- mpi_errno = MPID_Sched_send(tmp_buf, rem * recvcount, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, rem * recvcount, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* logically sendrecv, so no barrier here */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + curr_cnt*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + curr_cnt*recvtype_extent),
(rem * recvcount), recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* Rotate blocks in tmp_buf down by (rank) blocks and store
* result in recvbuf. */
- mpi_errno = MPID_Sched_copy(tmp_buf, ((comm_size-rank)*recvcount), recvtype,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, ((comm_size-rank)*recvcount), recvtype,
((char *) recvbuf + rank*recvcount*recvtype_extent),
((comm_size-rank)*recvcount), recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
if (rank) {
- mpi_errno = MPID_Sched_copy(((char *) tmp_buf + (comm_size-rank)*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *) tmp_buf + (comm_size-rank)*recvcount*recvtype_extent),
rank*recvcount, recvtype,
recvbuf, rank*recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -342,7 +344,7 @@ fn_fail:
#define FUNCNAME MPIR_Iallgather_ring
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallgather_ring(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallgather_ring(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size;
@@ -355,16 +357,16 @@ int MPIR_Iallgather_ring(const void *sendbuf, int sendcount, MPI_Datatype sendty
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
/* This is the largest offset we add to recvbuf */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(comm_size * recvcount * recvtype_extent));
/* First, load the "local" version in the recvbuf. */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
((char *)recvbuf + rank*recvcount*recvtype_extent),
recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* Now, send left to right. This fills in the receive area in
@@ -375,14 +377,14 @@ int MPIR_Iallgather_ring(const void *sendbuf, int sendcount, MPI_Datatype sendty
j = rank;
jnext = left;
for (i=1; i<comm_size; i++) {
- mpi_errno = MPID_Sched_send(((char *)recvbuf + j*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf + j*recvcount*recvtype_extent),
recvcount, recvtype, right, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* concurrent, no barrier here */
- mpi_errno = MPID_Sched_recv(((char *)recvbuf + jnext*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf + jnext*recvcount*recvtype_extent),
recvcount, recvtype, left, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
j = jnext;
jnext = (comm_size + jnext - 1) % comm_size;
@@ -443,7 +445,7 @@ fn_fail:
#define FUNCNAME MPIR_Iallgather_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallgather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallgather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, recvtype_size;
@@ -486,7 +488,7 @@ fn_fail:
#define FUNCNAME MPIR_Iallgather_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
/* Intercommunicator Allgather.
Each group does a gather to local root with the local
@@ -496,7 +498,7 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
int rank, local_size, remote_size, root;
MPI_Aint true_extent, true_lb = 0, extent, send_extent;
void *tmp_buf = NULL;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_SCHED_CHKPMEM_DECL(1);
local_size = comm_ptr->local_size;
@@ -509,9 +511,9 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
MPIR_Type_get_true_extent_impl(sendtype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro( sendtype, send_extent );
- extent = MPIR_MAX(send_extent, true_extent);
+ extent = MPL_MAX(send_extent, true_extent);
- MPIU_Ensure_Aint_fits_in_pointer(extent * sendcount * local_size);
+ MPIR_Ensure_Aint_fits_in_pointer(extent * sendcount * local_size);
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void*, extent*sendcount*local_size, mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
@@ -520,22 +522,22 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* Get the local intracommunicator */
if (!comm_ptr->local_comm)
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
newcomm_ptr = comm_ptr->local_comm;
if (sendcount != 0) {
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather_sched);
+ MPIR_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather_sched);
mpi_errno = newcomm_ptr->coll_fns->Igather_sched(sendbuf, sendcount, sendtype,
tmp_buf, sendcount, sendtype,
0, newcomm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* first broadcast from left to right group, then from right to
left group */
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast_sched);
+ MPIR_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast_sched);
if (comm_ptr->is_low_group) {
/* bcast to right*/
if (sendcount != 0) {
@@ -554,7 +556,7 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
/* receive bcast from left */
@@ -574,7 +576,7 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
sendtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
MPIR_SCHED_CHKPMEM_COMMIT(s);
@@ -589,38 +591,26 @@ fn_fail:
#define FUNCNAME MPIR_Iallgather_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iallgather_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iallgather_req(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iallgather_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Iallgather_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Iallgather_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -664,11 +654,11 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IALLGATHER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IALLGATHER);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IALLGATHER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IALLGATHER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -689,27 +679,27 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (sendbuf != MPI_IN_PLACE && HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -718,7 +708,7 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
/* catch common aliasing cases */
- if (comm_ptr->comm_kind == MPID_INTRACOMM && recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM && recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0) {
int recvtype_size;
MPID_Datatype_get_size_macro(recvtype, recvtype_size);
MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + comm_ptr->rank*recvcount*recvtype_size, mpi_errno);
@@ -732,13 +722,13 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IALLGATHER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IALLGATHER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/iallgatherv.c b/src/mpi/coll/iallgatherv.c
index e737956..064fff6 100644
--- a/src/mpi/coll/iallgatherv.c
+++ b/src/mpi/coll/iallgatherv.c
@@ -33,7 +33,7 @@ int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, v
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, rank, i, j, k;
@@ -52,7 +52,7 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
if (comm_ptr->is_hetero)
is_homogeneous = 0;
#endif
- MPIU_Assert(is_homogeneous); /* we only handle the homogeneous for now */
+ MPIR_Assert(is_homogeneous); /* we only handle the homogeneous for now */
/* need to receive contiguously into tmp_buf because
displs could make the recvbuf noncontiguous */
@@ -66,8 +66,8 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
if (total_count == 0)
goto fn_exit;
- MPIU_Ensure_Aint_fits_in_pointer(total_count*(MPIR_MAX(recvtype_true_extent, recvtype_extent)));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, total_count*(MPIR_MAX(recvtype_true_extent,recvtype_extent)), mpi_errno, "tmp_buf");
+ MPIR_Ensure_Aint_fits_in_pointer(total_count*(MPL_MAX(recvtype_true_extent, recvtype_extent)));
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, total_count*(MPL_MAX(recvtype_true_extent,recvtype_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - recvtype_true_lb);
@@ -77,7 +77,7 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
for (i=0; i<rank; i++) position += recvcounts[i];
if (sendbuf != MPI_IN_PLACE)
{
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
((char *)tmp_buf + position*recvtype_extent),
recvcounts[rank], recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -85,7 +85,7 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
else
{
/* if in_place specified, local data is found in recvbuf */
- mpi_errno = MPID_Sched_copy(((char *)recvbuf + displs[rank]*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)recvbuf + displs[rank]*recvtype_extent),
recvcounts[rank], recvtype,
((char *)tmp_buf + position*recvtype_extent),
recvcounts[rank], recvtype, s);
@@ -135,14 +135,14 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
for (j = dst_tree_root; j < (dst_tree_root + mask) && j < comm_size; ++j)
incoming_count += recvcounts[j];
- mpi_errno = MPID_Sched_send(((char *)tmp_buf + send_offset * recvtype_extent),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_buf + send_offset * recvtype_extent),
curr_count, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + recv_offset * recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + recv_offset * recvtype_extent),
incoming_count, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
curr_count += incoming_count;
}
@@ -204,10 +204,10 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
/* incoming_count was set in the previous
receive. that's the amount of data to be
sent now. */
- mpi_errno = MPID_Sched_send(((char *)tmp_buf + offset),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_buf + offset),
incoming_count, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* recv only if this proc. doesn't have data and sender
has data */
@@ -226,11 +226,11 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
for (j = dst_tree_root; j < (dst_tree_root + mask) && j < comm_size; ++j)
incoming_count += recvcounts[j];
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + offset * recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + offset * recvtype_extent),
incoming_count, recvtype,
dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
curr_count += incoming_count;
}
tmp_mask >>= 1;
@@ -244,7 +244,7 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
}
/* sanity check that we got all of the data blocks */
- MPIU_Assert(curr_count == total_count);
+ MPIR_Assert(curr_count == total_count);
/* copy data from tmp_buf to recvbuf */
position = 0;
@@ -252,7 +252,7 @@ int MPIR_Iallgatherv_rec_dbl(const void *sendbuf, int sendcount, MPI_Datatype se
if ((sendbuf != MPI_IN_PLACE) || (j != rank)) {
/* not necessary to copy if in_place and
j==rank. otherwise copy. */
- mpi_errno = MPID_Sched_copy(((char *)tmp_buf + position*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)tmp_buf + position*recvtype_extent),
recvcounts[j], recvtype,
((char *)recvbuf + displs[j]*recvtype_extent),
recvcounts[j], recvtype, s);
@@ -275,7 +275,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, rank, j, i;
@@ -302,8 +302,8 @@ int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype send
/* get true extent of recvtype */
MPIR_Type_get_true_extent_impl(recvtype, &recvtype_true_lb, &recvtype_true_extent);
- MPIU_Ensure_Aint_fits_in_pointer(total_count * MPIR_MAX(recvtype_true_extent, recvtype_extent));
- recvbuf_extent = total_count * (MPIR_MAX(recvtype_true_extent, recvtype_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count * MPL_MAX(recvtype_true_extent, recvtype_extent));
+ recvbuf_extent = total_count * (MPL_MAX(recvtype_true_extent, recvtype_extent));
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, recvbuf_extent, mpi_errno, "tmp_buf");
@@ -312,17 +312,17 @@ int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype send
/* copy local data to the top of tmp_buf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
tmp_buf, recvcounts[rank], recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
- mpi_errno = MPID_Sched_copy(((char *)recvbuf + displs[rank]*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)recvbuf + displs[rank]*recvtype_extent),
recvcounts[rank], recvtype,
tmp_buf, recvcounts[rank], recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* \floor(\lg p) send-recv rounds */
@@ -345,13 +345,13 @@ int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype send
incoming_count += recvcounts[(src + i) % comm_size];
}
- mpi_errno = MPID_Sched_send(tmp_buf, curr_count, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, curr_count, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + curr_count*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + curr_count*recvtype_extent),
incoming_count, recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* we will send everything we had plus what we just got to next round's dst */
curr_count += incoming_count;
@@ -368,13 +368,13 @@ int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype send
for (i=0; i<rem; i++)
send_cnt += recvcounts[(rank+i)%comm_size];
- mpi_errno = MPID_Sched_send(tmp_buf, send_cnt, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, send_cnt, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + curr_count*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + curr_count*recvtype_extent),
(total_count - curr_count), recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* Rotate blocks in tmp_buf down by (rank) blocks and store
@@ -383,7 +383,7 @@ int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype send
send_cnt = 0;
for (i=0; i < (comm_size-rank); i++) {
j = (rank+i)%comm_size;
- mpi_errno = MPID_Sched_copy(((char *)tmp_buf + send_cnt*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)tmp_buf + send_cnt*recvtype_extent),
recvcounts[j], recvtype,
((char *)recvbuf + displs[j]*recvtype_extent),
recvcounts[j], recvtype, s);
@@ -392,7 +392,7 @@ int MPIR_Iallgatherv_bruck(const void *sendbuf, int sendcount, MPI_Datatype send
}
for (i=0; i<rank; i++) {
- mpi_errno = MPID_Sched_copy(((char *)tmp_buf + send_cnt*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)tmp_buf + send_cnt*recvtype_extent),
recvcounts[i], recvtype,
((char *)recvbuf + displs[i]*recvtype_extent),
recvcounts[i], recvtype, s);
@@ -414,7 +414,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iallgatherv_ring(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i, total_count;
@@ -441,11 +441,11 @@ int MPIR_Iallgatherv_ring(const void *sendbuf, int sendcount, MPI_Datatype sendt
if (sendbuf != MPI_IN_PLACE) {
/* First, load the "local" version in the recvbuf. */
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
((char *)recvbuf + displs[rank]*recvtype_extent),
recvcounts[rank], recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
left = (comm_size + rank - 1) % comm_size;
@@ -483,16 +483,16 @@ int MPIR_Iallgatherv_ring(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* Communicate */
if (recvnow) { /* If there's no data to send, just do a recv call */
- mpi_errno = MPID_Sched_recv(rbuf, recvnow, recvtype, left, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(rbuf, recvnow, recvtype, left, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
torecv -= recvnow;
}
if (sendnow) { /* If there's no data to receive, just do a send call */
- mpi_errno = MPID_Sched_send(sbuf, sendnow, recvtype, right, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sbuf, sendnow, recvtype, right, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
tosend -= sendnow;
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
soffset += sendnow;
roffset += recvnow;
@@ -556,7 +556,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iallgatherv_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i, comm_size, total_count, recvtype_size;
@@ -604,7 +604,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
/* Intercommunicator Allgatherv.
This is done differently from the intercommunicator allgather
@@ -616,13 +616,13 @@ int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype send
*/
int mpi_errno = MPI_SUCCESS;
int remote_size, root, rank;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPI_Datatype newtype = MPI_DATATYPE_NULL;
remote_size = comm_ptr->remote_size;
rank = comm_ptr->rank;
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Igatherv_sched);
+ MPIR_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Igatherv_sched);
/* first do an intercommunicator gatherv from left to right group,
then from right to left group */
@@ -655,19 +655,19 @@ int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype send
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* now do an intracommunicator broadcast within each group. we use
a derived datatype to handle the displacements */
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
newcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Ibcast_sched);
+ MPIR_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Ibcast_sched);
mpi_errno = MPIR_Type_indexed_impl(remote_size, recvcounts, displs, recvtype, &newtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -692,38 +692,26 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
- MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
+ MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iallgatherv_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iallgatherv_req(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iallgatherv_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Iallgatherv_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Iallgatherv_sched(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -768,11 +756,11 @@ int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, v
MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IALLGATHERV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IALLGATHERV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IALLGATHERV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IALLGATHERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -793,28 +781,28 @@ int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, v
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (sendbuf != MPI_IN_PLACE) {
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
/* catch common aliasing cases */
- if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
sendtype == recvtype &&
recvcounts[comm_ptr->rank] != 0 &&
sendcount != 0) {
@@ -827,9 +815,9 @@ int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, v
MPIR_ERRTEST_ARGNULL(recvcounts,"recvcounts", mpi_errno);
MPIR_ERRTEST_ARGNULL(displs,"displs", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -844,13 +832,13 @@ int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, v
/* ... body of routine ... */
- mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IALLGATHERV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IALLGATHERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 1eb80e5..24eabc1 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -34,7 +34,7 @@ int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
#define FUNCNAME MPIR_Iallreduce_naive
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallreduce_naive(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallreduce_naive(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank;
@@ -50,7 +50,7 @@ int MPIR_Iallreduce_naive(const void *sendbuf, void *recvbuf, int count, MPI_Dat
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
mpi_errno = MPIR_Ibcast_intra(recvbuf, count, datatype, 0, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -66,7 +66,7 @@ fn_fail:
#define FUNCNAME MPIR_Iallreduce_redscat_allgather
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, rank, newrank, pof2, rem;
@@ -75,11 +75,11 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
void *tmp_buf = NULL;
int *cnts, *disps;
MPIR_SCHED_CHKPMEM_DECL(1);
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
/* we only support builtin datatypes for now, breaking up user types to do
* the reduce-scatter is tricky */
- MPIU_Assert(HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN);
+ MPIR_Assert(HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -88,18 +88,18 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
/* copy local data into recvbuf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* find nearest power-of-two less than or equal to comm_size */
@@ -117,9 +117,9 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
if (rank < 2*rem) {
if (rank % 2 == 0) { /* even */
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* temporarily set the rank to -1 so that this
process does not pariticipate in recursive
@@ -127,16 +127,16 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
newrank = -1;
}
else { /* odd */
- mpi_errno = MPID_Sched_recv(tmp_buf, count, datatype, rank-1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, count, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* do the reduction on received data. since the
ordering is right, it doesn't matter whether
the operation is commutative or not. */
- mpi_errno = MPID_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* change the rank */
newrank = rank / 2;
@@ -153,10 +153,10 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
* calculated directly during the loop, rather than requiring a less-scalable
* "2*pof2"-sized memory allocation */
- MPIU_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
- MPIU_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
+ MPIR_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
+ MPIR_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
- MPIU_Assert(count >= pof2); /* the cnts calculations assume this */
+ MPIR_Assert(count >= pof2); /* the cnts calculations assume this */
for (i=0; i<(pof2-1); i++)
cnts[i] = count/pof2;
cnts[pof2-1] = count - (count/pof2)*(pof2-1);
@@ -190,25 +190,25 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
}
/* Send data from recvbuf. Recv into tmp_buf */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + disps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + disps[recv_idx]*extent),
recv_cnt, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
send_cnt, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* tmp_buf contains data received in this step.
recvbuf contains data accumulated so far */
/* This algorithm is used only for predefined ops
and predefined ops are always commutative. */
- mpi_errno = MPID_Sched_reduce(((char *)tmp_buf + disps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_buf + disps[recv_idx]*extent),
((char *)recvbuf + disps[recv_idx]*extent),
recv_cnt, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* update send_idx for next iteration */
send_idx = recv_idx;
@@ -249,14 +249,14 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
recv_cnt += cnts[i];
}
- mpi_errno = MPID_Sched_recv(((char *)recvbuf + disps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf + disps[recv_idx]*extent),
recv_cnt, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
send_cnt, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
if (newrank > newdst) send_idx = recv_idx;
@@ -269,18 +269,18 @@ int MPIR_Iallreduce_redscat_allgather(const void *sendbuf, void *recvbuf, int co
(rank-1), the ranks who didn't participate above. */
if (rank < 2*rem) {
if (rank % 2) { /* odd */
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, rank-1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else { /* even */
- mpi_errno = MPID_Sched_recv(recvbuf, count, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, count, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
MPIR_SCHED_CHKPMEM_COMMIT(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
MPIR_SCHED_CHKPMEM_REAP(s);
@@ -291,7 +291,7 @@ fn_fail:
#define FUNCNAME MPIR_Iallreduce_rec_dbl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int pof2, rem, comm_size, is_commutative, rank;
@@ -309,18 +309,18 @@ int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_D
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
/* copy local data into recvbuf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* find nearest power-of-two less than or equal to comm_size */
@@ -338,9 +338,9 @@ int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_D
if (rank < 2*rem) {
if (rank % 2 == 0) { /* even */
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* temporarily set the rank to -1 so that this
process does not pariticipate in recursive
@@ -348,16 +348,16 @@ int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_D
newrank = -1;
}
else { /* odd */
- mpi_errno = MPID_Sched_recv(tmp_buf, count, datatype, rank-1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, count, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* do the reduction on received data. since the
ordering is right, it doesn't matter whether
the operation is commutative or not. */
- mpi_errno = MPID_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* change the rank */
newrank = rank / 2;
@@ -375,34 +375,34 @@ int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_D
/* Send the most current data, which is in recvbuf. Recv
into tmp_buf */
- mpi_errno = MPID_Sched_recv(tmp_buf, count, datatype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, count, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype,
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype,
dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* tmp_buf contains data received in this step.
recvbuf contains data accumulated so far */
if (is_commutative || (dst < rank)) {
/* op is commutative OR the order is already right */
- mpi_errno = MPID_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
/* op is noncommutative and the order is not right */
- mpi_errno = MPID_Sched_reduce(recvbuf, tmp_buf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(recvbuf, tmp_buf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* copy result back into recvbuf */
- mpi_errno = MPID_Sched_copy(tmp_buf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
mask <<= 1;
}
@@ -413,11 +413,11 @@ int MPIR_Iallreduce_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_D
(rank-1), the ranks who didn't participate above. */
if (rank < 2*rem) {
if (rank % 2) { /* odd */
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, rank-1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else { /* even */
- mpi_errno = MPID_Sched_recv(recvbuf, count, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, count, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -434,12 +434,12 @@ fn_fail:
#define FUNCNAME MPIR_Iallreduce_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallreduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallreduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, is_homogeneous, pof2, type_size;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
is_homogeneous = TRUE;
#ifdef MPID_HAS_HETERO
@@ -495,7 +495,7 @@ fn_fail:
#define FUNCNAME MPIR_Iallreduce_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallreduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallreduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
/* Intercommunicator Allreduce.
We first do an intercommunicator reduce to rank 0 on left group,
@@ -507,9 +507,9 @@ int MPIR_Iallreduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Dat
*/
int mpi_errno = MPI_SUCCESS;
int rank, root;
- MPID_Comm *lcomm_ptr = NULL;
+ MPIR_Comm *lcomm_ptr = NULL;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
rank = comm_ptr->rank;
@@ -543,17 +543,17 @@ int MPIR_Iallreduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Dat
}
/* don't bcast until the reductions have finished */
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
lcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(lcomm_ptr->coll_fns && lcomm_ptr->coll_fns->Ibcast_sched);
+ MPIR_Assert(lcomm_ptr->coll_fns && lcomm_ptr->coll_fns->Ibcast_sched);
mpi_errno = lcomm_ptr->coll_fns->Ibcast_sched(recvbuf, count, datatype, 0, lcomm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -568,16 +568,16 @@ fn_fail:
#define FUNCNAME MPIR_Iallreduce_SMP
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int is_commutative;
- MPID_Comm *nc;
- MPID_Comm *nrc;
+ MPIR_Comm *nc;
+ MPIR_Comm *nrc;
if (!MPIR_CVAR_ENABLE_SMP_COLLECTIVES || !MPIR_CVAR_ENABLE_SMP_ALLREDUCE)
MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
- MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
+ MPIR_Assert(MPIR_Comm_is_node_aware(comm_ptr));
nc = comm_ptr->node_comm;
nrc = comm_ptr->node_roots_comm;
@@ -597,7 +597,7 @@ int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datat
/* take care of the MPI_IN_PLACE case. For reduce,
MPI_IN_PLACE is specified only on the root;
for allreduce it is specified on all processes. */
- MPIU_Assert(nc->coll_fns && nc->coll_fns->Ireduce_sched);
+ MPIR_Assert(nc->coll_fns && nc->coll_fns->Ireduce_sched);
if ((sendbuf == MPI_IN_PLACE) && (comm_ptr->node_comm->rank != 0)) {
/* IN_PLACE and not root of reduce. Data supplied to this
@@ -608,31 +608,31 @@ int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datat
mpi_errno = nc->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype, op, 0, nc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
} else {
/* only one process on the node. copy sendbuf to recvbuf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* now do an IN_PLACE allreduce among the local roots of all nodes */
if (nrc != NULL) {
- MPIU_Assert(nrc->coll_fns && nrc->coll_fns->Iallreduce_sched);
+ MPIR_Assert(nrc->coll_fns && nrc->coll_fns->Iallreduce_sched);
mpi_errno = nrc->coll_fns->Iallreduce_sched(MPI_IN_PLACE, recvbuf, count, datatype, op, nrc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* now broadcast the result among local processes */
if (comm_ptr->node_comm != NULL) {
- MPIU_Assert(nc->coll_fns && nc->coll_fns->Ibcast_sched);
+ MPIR_Assert(nc->coll_fns && nc->coll_fns->Ibcast_sched);
mpi_errno = nc->coll_fns->Ibcast_sched(recvbuf, count, datatype, 0, nc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
fn_exit:
@@ -646,38 +646,26 @@ fn_fail:
#define FUNCNAME MPIR_Iallreduce_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iallreduce_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iallreduce_req(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iallreduce_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Iallreduce_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Iallreduce_sched(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -720,11 +708,11 @@ int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count,
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IALLREDUCE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IALLREDUCE);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IALLREDUCE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IALLREDUCE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -743,34 +731,34 @@ int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr(op_ptr, mpi_errno);
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr(op_ptr, mpi_errno);
}
else if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno = ( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
}
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTERCOMM)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM)
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, count, mpi_errno);
if (sendbuf != MPI_IN_PLACE)
@@ -778,7 +766,7 @@ int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count,
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM && count != 0 && sendbuf != MPI_IN_PLACE)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM && count != 0 && sendbuf != MPI_IN_PLACE)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -789,13 +777,13 @@ int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count,
/* ... body of routine ... */
- mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, request);
+ mpi_errno = MPID_Iallreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IALLREDUCE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IALLREDUCE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index f2b47e8..8555aff 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -44,7 +44,7 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, voi
#define FUNCNAME MPIR_Ialltoall_inplace
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ialltoall_inplace(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ialltoall_inplace(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
void *tmp_buf = NULL;
@@ -55,7 +55,7 @@ int MPIR_Ialltoall_inplace(const void *sendbuf, int sendcount, MPI_Datatype send
int peer;
MPIR_SCHED_CHKPMEM_DECL(1);
- MPIU_Assert(sendbuf == MPI_IN_PLACE);
+ MPIR_Assert(sendbuf == MPI_IN_PLACE);
if (recvcount == 0)
goto fn_exit;
@@ -81,19 +81,19 @@ int MPIR_Ialltoall_inplace(const void *sendbuf, int sendcount, MPI_Datatype send
peer = i;
/* pack to tmp_buf */
- mpi_errno = MPID_Sched_copy(((char *)recvbuf + peer*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)recvbuf + peer*recvcount*recvtype_extent),
recvcount, recvtype,
tmp_buf, nbytes, MPI_BYTE, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* now simultaneously send from tmp_buf and recv to recvbuf */
- mpi_errno = MPID_Sched_send(tmp_buf, nbytes, MPI_BYTE, peer, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, nbytes, MPI_BYTE, peer, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(((char *)recvbuf + peer*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf + peer*recvcount*recvtype_extent),
recvcount, recvtype, peer, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
}
@@ -110,7 +110,7 @@ fn_fail:
#define FUNCNAME MPIR_Ialltoall_bruck
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -122,10 +122,10 @@ int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendty
int count, block;
MPI_Datatype newtype;
int *displs;
- MPIU_CHKLMEM_DECL(1); /* displs */
+ MPIR_CHKLMEM_DECL(1); /* displs */
MPIR_SCHED_CHKPMEM_DECL(2); /* tmp_buf (2x) */
- MPIU_Assert(sendbuf != MPI_IN_PLACE); /* we do not handle in-place */
+ MPIR_Assert(sendbuf != MPI_IN_PLACE); /* we do not handle in-place */
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -141,15 +141,15 @@ int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendty
/* Do Phase 1 of the algorithim. Shift the data blocks on process i
* upwards by a distance of i blocks. Store the result in recvbuf. */
- mpi_errno = MPID_Sched_copy(((char *) sendbuf + rank*sendcount*sendtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *) sendbuf + rank*sendcount*sendtype_extent),
(comm_size - rank)*sendcount, sendtype,
recvbuf, (comm_size - rank)*recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_copy(sendbuf, rank*sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, rank*sendcount, sendtype,
((char *) recvbuf + (comm_size-rank)*recvcount*recvtype_extent),
rank*recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* Input data is now stored in recvbuf with datatype recvtype */
/* Now do Phase 2, the communication phase. It takes
@@ -160,7 +160,7 @@ int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendty
/* allocate displacements array for indexed datatype used in
communication */
- MPIU_CHKLMEM_MALLOC(displs, int *, comm_size * sizeof(int), mpi_errno, "displs");
+ MPIR_CHKLMEM_MALLOC(displs, int *, comm_size * sizeof(int), mpi_errno, "displs");
pof2 = 1;
while (pof2 < comm_size) {
@@ -187,16 +187,16 @@ int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendty
MPID_Datatype_get_size_macro(newtype, newtype_size);
/* we will usually copy much less than nbytes */
- mpi_errno = MPID_Sched_copy(recvbuf, 1, newtype, tmp_buf, newtype_size, MPI_BYTE, s);
+ mpi_errno = MPIR_Sched_copy(recvbuf, 1, newtype, tmp_buf, newtype_size, MPI_BYTE, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* now send and recv in parallel */
- mpi_errno = MPID_Sched_send(tmp_buf, newtype_size, MPI_BYTE, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, newtype_size, MPI_BYTE, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(recvbuf, 1, newtype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, 1, newtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
MPIR_Type_free_impl(&newtype);
@@ -209,27 +209,27 @@ int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendty
/* get true extent of recvtype */
MPIR_Type_get_true_extent_impl(recvtype, &recvtype_true_lb, &recvtype_true_extent);
- recvbuf_extent = recvcount * comm_size * (MPIR_MAX(recvtype_true_extent, recvtype_extent));
+ recvbuf_extent = recvcount * comm_size * (MPL_MAX(recvtype_true_extent, recvtype_extent));
/* not a leak, old tmp_buf value is still tracked by CHKPMEM macros */
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, recvbuf_extent, mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - recvtype_true_lb);
- mpi_errno = MPID_Sched_copy(((char *) recvbuf + (rank+1)*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *) recvbuf + (rank+1)*recvcount*recvtype_extent),
(comm_size - rank - 1)*recvcount, recvtype,
tmp_buf, (comm_size - rank - 1)*recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_copy(recvbuf, (rank+1)*recvcount, recvtype,
+ mpi_errno = MPIR_Sched_copy(recvbuf, (rank+1)*recvcount, recvtype,
((char *) tmp_buf + (comm_size-rank-1)*recvcount*recvtype_extent),
(rank+1)*recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* Blocks are in the reverse order now (comm_size-1 to 0).
* Reorder them to (0 to comm_size-1) and store them in recvbuf. */
for (i = 0; i < comm_size; i++){
- mpi_errno = MPID_Sched_copy(((char *) tmp_buf + i*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *) tmp_buf + i*recvcount*recvtype_extent),
recvcount, recvtype,
((char *) recvbuf + (comm_size-i-1)*recvcount*recvtype_extent),
recvcount, recvtype, s);
@@ -238,7 +238,7 @@ int MPIR_Ialltoall_bruck(const void *sendbuf, int sendcount, MPI_Datatype sendty
MPIR_SCHED_CHKPMEM_COMMIT(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
MPIR_SCHED_CHKPMEM_REAP(s);
@@ -254,7 +254,7 @@ fn_fail:
#define FUNCNAME MPIR_Ialltoall_perm_sr
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ialltoall_perm_sr(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ialltoall_perm_sr(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -262,7 +262,7 @@ int MPIR_Ialltoall_perm_sr(const void *sendbuf, int sendcount, MPI_Datatype send
int ii, ss, bblock, dst;
MPI_Aint sendtype_extent, recvtype_extent;
- MPIU_Assert(sendbuf != MPI_IN_PLACE); /* we do not handle in-place */
+ MPIR_Assert(sendbuf != MPI_IN_PLACE); /* we do not handle in-place */
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -278,20 +278,20 @@ int MPIR_Ialltoall_perm_sr(const void *sendbuf, int sendcount, MPI_Datatype send
/* do the communication -- post ss sends and receives: */
for (i = 0; i < ss; i++) {
dst = (rank+i+ii) % comm_size;
- mpi_errno = MPID_Sched_recv(((char *)recvbuf + dst*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf + dst*recvcount*recvtype_extent),
recvcount, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
for (i = 0; i < ss; i++) {
dst = (rank-i-ii+comm_size) % comm_size;
- mpi_errno = MPID_Sched_send(((char *)sendbuf + dst*sendcount*sendtype_extent),
+ mpi_errno = MPIR_Sched_send(((char *)sendbuf + dst*sendcount*sendtype_extent),
sendcount, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
/* force the (2*ss) sends/recvs above to complete before posting additional ops */
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
fn_exit:
@@ -307,7 +307,7 @@ fn_fail:
#define FUNCNAME MPIR_Ialltoall_pairwise
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ialltoall_pairwise(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ialltoall_pairwise(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -315,7 +315,7 @@ int MPIR_Ialltoall_pairwise(const void *sendbuf, int sendcount, MPI_Datatype sen
int rank, comm_size;
MPI_Aint sendtype_extent, recvtype_extent;
- MPIU_Assert(sendbuf != MPI_IN_PLACE); /* we do not handle in-place */
+ MPIR_Assert(sendbuf != MPI_IN_PLACE); /* we do not handle in-place */
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -324,7 +324,7 @@ int MPIR_Ialltoall_pairwise(const void *sendbuf, int sendcount, MPI_Datatype sen
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
/* Make local copy first */
- mpi_errno = MPID_Sched_copy(((char *)sendbuf + rank*sendcount*sendtype_extent),
+ mpi_errno = MPIR_Sched_copy(((char *)sendbuf + rank*sendcount*sendtype_extent),
sendcount, sendtype,
((char *)recvbuf + rank*recvcount*recvtype_extent),
recvcount, recvtype, s);
@@ -343,13 +343,13 @@ int MPIR_Ialltoall_pairwise(const void *sendbuf, int sendcount, MPI_Datatype sen
dst = (rank + i) % comm_size;
}
- mpi_errno = MPID_Sched_send(((char *)sendbuf + dst*sendcount*sendtype_extent),
+ mpi_errno = MPIR_Sched_send(((char *)sendbuf + dst*sendcount*sendtype_extent),
sendcount, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(((char *)recvbuf + src*recvcount*recvtype_extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf + src*recvcount*recvtype_extent),
recvcount, recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
fn_exit:
@@ -407,7 +407,7 @@ fn_fail:
#define FUNCNAME MPIR_Ialltoall_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ialltoall_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ialltoall_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int nbytes, comm_size, sendtype_size;
@@ -453,7 +453,7 @@ fn_fail:
#define FUNCNAME MPIR_Ialltoall_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ialltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ialltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
/* Intercommunicator alltoall. We use a pairwise exchange algorithm
similar to the one used in intracommunicator alltoall for long
@@ -479,10 +479,10 @@ int MPIR_Ialltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendty
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
/* Do the pairwise exchanges */
- max_size = MPIR_MAX(local_size, remote_size);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ max_size = MPL_MAX(local_size, remote_size);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
max_size*recvcount*recvtype_extent);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
max_size*sendcount*sendtype_extent);
for (i = 0; i < max_size; i++) {
src = (rank - i + max_size) % max_size;
@@ -502,11 +502,11 @@ int MPIR_Ialltoall_inter(const void *sendbuf, int sendcount, MPI_Datatype sendty
sendaddr = (char *)sendbuf + dst*sendcount*sendtype_extent;
}
- mpi_errno = MPID_Sched_send(sendaddr, sendcount, sendtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendaddr, sendcount, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(recvaddr, recvcount, recvtype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvaddr, recvcount, recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
fn_exit:
@@ -519,38 +519,26 @@ fn_fail:
#define FUNCNAME MPIR_Ialltoall_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ialltoall_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ialltoall_req(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ialltoall_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ialltoall_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ialltoall_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -593,11 +581,11 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IALLTOALL);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IALLTOALL);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IALLTOALL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IALLTOALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -619,29 +607,29 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (sendbuf != MPI_IN_PLACE && HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -649,7 +637,7 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
sendbuf != MPI_IN_PLACE &&
sendcount == recvcount &&
sendtype == recvtype &&
@@ -663,13 +651,13 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Ialltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IALLTOALL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IALLTOALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ialltoallv.c b/src/mpi/coll/ialltoallv.c
index 977c725..c0da8cc 100644
--- a/src/mpi/coll/ialltoallv.c
+++ b/src/mpi/coll/ialltoallv.c
@@ -36,8 +36,8 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ialltoallv_intra(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
- const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Sched_t s)
+ const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size;
@@ -47,7 +47,7 @@ int MPIR_Ialltoallv_intra(const void *sendbuf, const int sendcounts[], const int
int dst, rank;
MPIR_SCHED_CHKPMEM_DECL(1);
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -74,7 +74,7 @@ int MPIR_Ialltoallv_intra(const void *sendbuf, const int sendcounts[], const int
* algorithm. */
max_count = 0;
for (i = 0; i < comm_size; ++i) {
- max_count = MPIU_MAX(max_count, recvcounts[i]);
+ max_count = MPL_MAX(max_count, recvcounts[i]);
}
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, max_count*recv_extent, mpi_errno, "Ialltoallv tmp_buf");
@@ -91,23 +91,23 @@ int MPIR_Ialltoallv_intra(const void *sendbuf, const int sendcounts[], const int
else
dst = i;
- mpi_errno = MPID_Sched_send(((char *)recvbuf + rdispls[dst]*recv_extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf + rdispls[dst]*recv_extent),
recvcounts[dst], recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(tmp_buf, recvcounts[dst], recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, recvcounts[dst], recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_copy(tmp_buf, recvcounts[dst], recvtype,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, recvcounts[dst], recvtype,
((char *)recvbuf + rdispls[dst]*recv_extent),
recvcounts[dst], recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
bblock = MPIR_CVAR_ALLTOALL_THROTTLE;
@@ -126,9 +126,9 @@ int MPIR_Ialltoallv_intra(const void *sendbuf, const int sendcounts[], const int
for (i=0; i < ss; i++) {
dst = (rank+i+ii) % comm_size;
if (recvcounts[dst] && recvtype_size) {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
rdispls[dst]*recv_extent);
- mpi_errno = MPID_Sched_recv((char *)recvbuf+rdispls[dst]*recv_extent,
+ mpi_errno = MPIR_Sched_recv((char *)recvbuf+rdispls[dst]*recv_extent,
recvcounts[dst], recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -137,16 +137,16 @@ int MPIR_Ialltoallv_intra(const void *sendbuf, const int sendcounts[], const int
for (i=0; i < ss; i++) {
dst = (rank-i-ii+comm_size) % comm_size;
if (sendcounts[dst] && sendtype_size) {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
sdispls[dst]*send_extent);
- mpi_errno = MPID_Sched_send((char *)sendbuf+sdispls[dst]*send_extent,
+ mpi_errno = MPIR_Sched_send((char *)sendbuf+sdispls[dst]*send_extent,
sendcounts[dst], sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
/* force our block of sends/recvs to complete before starting the next block */
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -164,8 +164,8 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ialltoallv_inter(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
- const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Sched_t s)
+ const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s)
{
/* Intercommunicator alltoallv. We use a pairwise exchange algorithm
similar to the one used in intracommunicator alltoallv. Since the
@@ -182,7 +182,7 @@ int MPIR_Ialltoallv_inter(const void *sendbuf, const int sendcounts[], const int
int src, dst, rank, sendcount, recvcount;
char *sendaddr, *recvaddr;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
local_size = comm_ptr->local_size;
remote_size = comm_ptr->remote_size;
@@ -195,7 +195,7 @@ int MPIR_Ialltoallv_inter(const void *sendbuf, const int sendcounts[], const int
MPID_Datatype_get_size_macro(recvtype, recvtype_size);
/* Use pairwise exchange algorithm. */
- max_size = MPIR_MAX(local_size, remote_size);
+ max_size = MPL_MAX(local_size, remote_size);
for (i=0; i<max_size; i++) {
src = (rank - i + max_size) % max_size;
dst = (rank + i) % max_size;
@@ -205,7 +205,7 @@ int MPIR_Ialltoallv_inter(const void *sendbuf, const int sendcounts[], const int
recvcount = 0;
}
else {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
rdispls[src]*recv_extent);
recvaddr = (char *)recvbuf + rdispls[src]*recv_extent;
recvcount = recvcounts[src];
@@ -216,7 +216,7 @@ int MPIR_Ialltoallv_inter(const void *sendbuf, const int sendcounts[], const int
sendcount = 0;
}
else {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
sdispls[dst]*send_extent);
sendaddr = (char *)sendbuf + sdispls[dst]*send_extent;
sendcount = sendcounts[dst];
@@ -227,11 +227,11 @@ int MPIR_Ialltoallv_inter(const void *sendbuf, const int sendcounts[], const int
if (recvcount * recvtype_size == 0)
src = MPI_PROC_NULL;
- mpi_errno = MPID_Sched_send(sendaddr, sendcount, sendtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendaddr, sendcount, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(recvaddr, recvcount, recvtype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvaddr, recvcount, recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -247,39 +247,27 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ialltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
- const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr,
+ const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr,
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ialltoallv_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ialltoallv_req(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ialltoallv_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ialltoallv_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ialltoallv_sched(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -326,11 +314,11 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IALLTOALLV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IALLTOALLV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IALLTOALLV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IALLTOALLV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -349,23 +337,23 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (sendbuf != MPI_IN_PLACE) {
MPIR_ERRTEST_ARGNULL(sendcounts,"sendcounts", mpi_errno);
MPIR_ERRTEST_ARGNULL(sdispls,"sdispls", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -375,9 +363,9 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
MPIR_ERRTEST_ARGNULL(recvcounts,"recvcounts", mpi_errno);
MPIR_ERRTEST_ARGNULL(rdispls,"rdispls", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -385,7 +373,7 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
sendbuf != MPI_IN_PLACE &&
sendcounts == recvcounts &&
sendtype == recvtype)
@@ -398,13 +386,13 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
/* ... body of routine ... */
- mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Ialltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IALLTOALLV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IALLTOALLV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ialltoallw.c b/src/mpi/coll/ialltoallw.c
index 0060ad2..eaa6548 100644
--- a/src/mpi/coll/ialltoallw.c
+++ b/src/mpi/coll/ialltoallw.c
@@ -58,7 +58,7 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
int MPIR_Ialltoallw_intra(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const int rdispls[], const MPI_Datatype recvtypes[],
- MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, i, j;
@@ -93,7 +93,7 @@ int MPIR_Ialltoallw_intra(const void *sendbuf, const int sendcounts[], const int
* ignored when sendbuf==MPI_IN_PLACE */
MPIR_Type_get_true_extent_impl(recvtypes[i], &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(recvtypes[i], recv_extent);
- max_size = MPIU_MAX(max_size, recvcounts[i] * MPIU_MAX(recv_extent, true_extent));
+ max_size = MPL_MAX(max_size, recvcounts[i] * MPL_MAX(recv_extent, true_extent));
}
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, max_size, mpi_errno, "Ialltoallw tmp_buf");
@@ -112,18 +112,18 @@ int MPIR_Ialltoallw_intra(const void *sendbuf, const int sendcounts[], const int
MPIR_Type_get_true_extent_impl(recvtypes[i], &true_lb, &true_extent);
adj_tmp_buf = (void *)((char*)tmp_buf - true_lb);
- mpi_errno = MPID_Sched_send(((char *)recvbuf + rdispls[dst]),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf + rdispls[dst]),
recvcounts[dst], recvtypes[dst], dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(adj_tmp_buf, recvcounts[dst], recvtypes[dst], dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(adj_tmp_buf, recvcounts[dst], recvtypes[dst], dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_copy(adj_tmp_buf, recvcounts[dst], recvtypes[dst],
+ mpi_errno = MPIR_Sched_copy(adj_tmp_buf, recvcounts[dst], recvtypes[dst],
((char *)recvbuf + rdispls[dst]),
recvcounts[dst], recvtypes[dst], s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
}
@@ -142,7 +142,7 @@ int MPIR_Ialltoallw_intra(const void *sendbuf, const int sendcounts[], const int
if (recvcounts[dst]) {
MPID_Datatype_get_size_macro(recvtypes[dst], type_size);
if (type_size) {
- mpi_errno = MPID_Sched_recv((char *)recvbuf+rdispls[dst],
+ mpi_errno = MPIR_Sched_recv((char *)recvbuf+rdispls[dst],
recvcounts[dst], recvtypes[dst],
dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -155,7 +155,7 @@ int MPIR_Ialltoallw_intra(const void *sendbuf, const int sendcounts[], const int
if (sendcounts[dst]) {
MPID_Datatype_get_size_macro(sendtypes[dst], type_size);
if (type_size) {
- mpi_errno = MPID_Sched_send((char *)sendbuf+sdispls[dst],
+ mpi_errno = MPIR_Sched_send((char *)sendbuf+sdispls[dst],
sendcounts[dst], sendtypes[dst],
dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -164,7 +164,7 @@ int MPIR_Ialltoallw_intra(const void *sendbuf, const int sendcounts[], const int
}
/* force our block of sends/recvs to complete before starting the next block */
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -183,7 +183,7 @@ fn_fail:
int MPIR_Ialltoallw_inter(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const int rdispls[], const MPI_Datatype recvtypes[],
- MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
/* Intercommunicator alltoallw. We use a pairwise exchange algorithm
similar to the one used in intracommunicator alltoallw. Since the local and
@@ -205,7 +205,7 @@ int MPIR_Ialltoallw_inter(const void *sendbuf, const int sendcounts[], const int
rank = comm_ptr->rank;
/* Use pairwise exchange algorithm. */
- max_size = MPIR_MAX(local_size, remote_size);
+ max_size = MPL_MAX(local_size, remote_size);
for (i=0; i<max_size; i++) {
src = (rank - i + max_size) % max_size;
dst = (rank + i) % max_size;
@@ -232,12 +232,12 @@ int MPIR_Ialltoallw_inter(const void *sendbuf, const int sendcounts[], const int
sendtype = sendtypes[dst];
}
- mpi_errno = MPID_Sched_send(sendaddr, sendcount, sendtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendaddr, sendcount, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_recv(recvaddr, recvcount, recvtype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvaddr, recvcount, recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
fn_exit:
@@ -252,39 +252,27 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ialltoallw_impl(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const int rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr,
+ const int rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr,
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ialltoallw_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ialltoallw_req(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ialltoallw_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ialltoallw_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ialltoallw_sched(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -331,11 +319,11 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IALLTOALLW);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IALLTOALLW);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IALLTOALLW);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IALLTOALLW);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -351,14 +339,14 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (sendbuf != MPI_IN_PLACE) {
@@ -366,7 +354,7 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
MPIR_ERRTEST_ARGNULL(sdispls,"sdispls", mpi_errno);
MPIR_ERRTEST_ARGNULL(sendtypes,"sendtypes", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
sendcounts == recvcounts &&
sendtypes == recvtypes)
MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
@@ -374,7 +362,7 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
MPIR_ERRTEST_ARGNULL(recvcounts,"recvcounts", mpi_errno);
MPIR_ERRTEST_ARGNULL(rdispls,"rdispls", mpi_errno);
MPIR_ERRTEST_ARGNULL(recvtypes,"recvtypes", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTERCOMM && sendbuf == MPI_IN_PLACE) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM && sendbuf == MPI_IN_PLACE) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**sendbuf_inplace");
}
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
@@ -386,13 +374,13 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
/* ... body of routine ... */
- mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, request);
+ mpi_errno = MPID_Ialltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IALLTOALLW);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IALLTOALLW);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ibarrier.c b/src/mpi/coll/ibarrier.c
index 1d9826d..9af99a4 100644
--- a/src/mpi/coll/ibarrier.c
+++ b/src/mpi/coll/ibarrier.c
@@ -53,12 +53,12 @@ int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias(
#define FUNCNAME MPIR_Ibarrier_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibarrier_intra(MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibarrier_intra(MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int size, rank, src, dst, mask;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -71,13 +71,13 @@ int MPIR_Ibarrier_intra(MPID_Comm *comm_ptr, MPID_Sched_t s)
dst = (rank + mask) % size;
src = (rank - mask + size) % size;
- mpi_errno = MPID_Sched_send(NULL, 0, MPI_BYTE, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(NULL, 0, MPI_BYTE, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(NULL, 0, MPI_BYTE, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(NULL, 0, MPI_BYTE, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mask <<= 1;
@@ -96,29 +96,29 @@ fn_fail:
#define FUNCNAME MPIR_Ibarrier_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibarrier_inter(MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibarrier_inter(MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, root;
MPIR_SCHED_CHKPMEM_DECL(1);
char *buf = NULL;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
rank = comm_ptr->rank;
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm(comm_ptr);
+ mpi_errno = MPII_Setup_intercomm_localcomm(comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
/* do a barrier on the local intracommunicator */
- MPIU_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibarrier_sched);
+ MPIR_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibarrier_sched);
if(comm_ptr->local_size != 1) {
mpi_errno = comm_ptr->local_comm->coll_fns->Ibarrier_sched(comm_ptr->local_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* rank 0 on each group does an intercommunicator broadcast to the
remote group to indicate that all processes in the local group
@@ -130,13 +130,13 @@ int MPIR_Ibarrier_inter(MPID_Comm *comm_ptr, MPID_Sched_t s)
/* first broadcast from left to right group, then from right to
left group */
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast_sched);
+ MPIR_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast_sched);
if (comm_ptr->is_low_group) {
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buf, 1, MPI_BYTE, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* receive bcast from right */
root = 0;
@@ -149,7 +149,7 @@ int MPIR_Ibarrier_inter(MPID_Comm *comm_ptr, MPID_Sched_t s)
mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buf, 1, MPI_BYTE, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* bcast to left */
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
@@ -169,38 +169,26 @@ fn_fail:
#define FUNCNAME MPIR_Ibarrier_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibarrier_impl(MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ibarrier_impl(MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ibarrier_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ibarrier_req(comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- if (comm_ptr->local_size != 1 || comm_ptr->comm_kind == MPID_INTERCOMM) {
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ if (comm_ptr->local_size != 1 || comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Ibarrier_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ibarrier_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ibarrier_sched(comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -247,11 +235,11 @@ group have called MPI_Ibarrier.
int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IBARRIER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IBARRIER);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IBARRIER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IBARRIER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -267,14 +255,14 @@ int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -285,13 +273,13 @@ int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request)
/* ... body of routine ... */
- mpi_errno = MPIR_Ibarrier_impl(comm_ptr, request);
+ mpi_errno = MPID_Ibarrier(comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IBARRIER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IBARRIER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index 819bb93..0079708 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -20,12 +20,72 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Com
#endif
/* -- End Profiling Symbol Block */
+struct MPIR_Ibcast_status{
+ int curr_bytes;
+ int n_bytes;
+ MPI_Status status;
+};
+/* Add some functions for asynchronous error detection */
+
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
#ifndef MPICH_MPI_FROM_PMPI
#undef MPI_Ibcast
#define MPI_Ibcast PMPI_Ibcast
+#undef FUNCNAME
+#define FUNCNAME sched_test_length
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+
+static int sched_test_length(MPIR_Comm * comm, int tag, void *state)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int recv_size;
+ struct MPIR_Ibcast_status *status = (struct MPIR_Ibcast_status*) state;
+ MPIR_Get_count_impl(&status->status, MPI_BYTE, &recv_size);
+ if(status->n_bytes != recv_size || status->status.MPI_ERROR != MPI_SUCCESS) {
+ mpi_errno = MPIR_Err_create_code( mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPI_ERR_OTHER,
+ "**collective_size_mismatch",
+ "**collective_size_mismatch %d %d", status->n_bytes, recv_size);
+ }
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME sched_test_curr_length
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+
+static int sched_test_curr_length(MPIR_Comm * comm, int tag, void *state)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIR_Ibcast_status *status = (struct MPIR_Ibcast_status*) state;
+ if(status->n_bytes != status->curr_bytes) {
+ mpi_errno = MPIR_Err_create_code( mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPI_ERR_OTHER,
+ "**collective_size_mismatch",
+ "**collective_size_mismatch %d %d", status->n_bytes, status->curr_bytes);
+ }
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME sched_add_length
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+
+static int sched_add_length(MPIR_Comm * comm, int tag, void *state)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int recv_size;
+ struct MPIR_Ibcast_status *status = (struct MPIR_Ibcast_status*) state;
+ MPIR_Get_count_impl(&status->status, MPI_BYTE, &recv_size);
+ status->curr_bytes+= recv_size;
+ return mpi_errno;
+}
+
/* any non-MPI functions go here, especially non-static ones */
/* A binomial tree broadcast algorithm. Good for short messages,
@@ -38,7 +98,7 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Com
#define FUNCNAME MPIR_Ibcast_binomial
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int mask;
@@ -47,8 +107,9 @@ int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int roo
MPI_Aint nbytes, type_size;
int relative_rank;
int src, dst;
+ struct MPIR_Ibcast_status *status;
void *tmp_buf = NULL;
- MPIR_SCHED_CHKPMEM_DECL(1);
+ MPIR_SCHED_CHKPMEM_DECL(2);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -65,6 +126,9 @@ int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int roo
if (comm_ptr->is_hetero)
is_homogeneous = 0;
#endif
+ MPIR_SCHED_CHKPMEM_MALLOC(status, struct MPIR_Ibcast_status *,
+ sizeof(struct MPIR_Ibcast_status), mpi_errno, "MPI_Stauts");
+
/* MPI_Type_size() might not give the accurate size of the packed
* datatype for heterogeneous systems (because of padding, encoding,
@@ -80,15 +144,17 @@ int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int roo
nbytes = type_size * count;
+ status->n_bytes = nbytes;
+
if (!is_contig || !is_homogeneous)
{
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, nbytes, mpi_errno, "tmp_buf");
/* TODO: Pipeline the packing and communication */
if (rank == root) {
- mpi_errno = MPID_Sched_copy(buffer, count, datatype, tmp_buf, nbytes, MPI_PACKED, s);
+ mpi_errno = MPIR_Sched_copy(buffer, count, datatype, tmp_buf, nbytes, MPI_PACKED, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -125,13 +191,19 @@ int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int roo
src = rank - mask;
if (src < 0) src += comm_size;
if (!is_contig || !is_homogeneous)
- mpi_errno = MPID_Sched_recv(tmp_buf, nbytes, MPI_BYTE, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv_status(tmp_buf, nbytes, MPI_BYTE, src,
+ comm_ptr, &status->status, s);
else
- mpi_errno = MPID_Sched_recv(buffer, count, datatype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv_status(buffer, count, datatype, src,
+ comm_ptr, &status->status, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
-
+ MPIR_SCHED_BARRIER(s);
+ if(is_homogeneous){
+ mpi_errno = MPIR_Sched_cb(&sched_test_length, status, s);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_SCHED_BARRIER(s);
+ }
break;
}
mask <<= 1;
@@ -154,23 +226,23 @@ int MPIR_Ibcast_binomial(void *buffer, int count, MPI_Datatype datatype, int roo
dst = rank + mask;
if (dst >= comm_size) dst -= comm_size;
if (!is_contig || !is_homogeneous)
- mpi_errno = MPID_Sched_send(tmp_buf, nbytes, MPI_BYTE, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, nbytes, MPI_BYTE, dst, comm_ptr, s);
else
- mpi_errno = MPID_Sched_send(buffer, count, datatype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(buffer, count, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* NOTE: This is departure from MPIR_Bcast_binomial. A true analog
- * would put an MPID_Sched_barrier here after every send. */
+ * would put an MPIR_Sched_barrier here after every send. */
}
mask >>= 1;
}
if (!is_contig || !is_homogeneous) {
if (rank != root) {
- MPID_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_copy(tmp_buf, nbytes, MPI_PACKED, buffer, count, datatype, s);
+ MPIR_SCHED_BARRIER(s);
+ mpi_errno = MPIR_Sched_copy(tmp_buf, nbytes, MPI_PACKED, buffer, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -192,7 +264,7 @@ fn_fail:
#define FUNCNAME MPIR_Iscatter_for_bcast
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iscatter_for_bcast(void *tmp_buf, int root, MPID_Comm *comm_ptr, int nbytes, MPID_Sched_t s)
+int MPIR_Iscatter_for_bcast(void *tmp_buf, int root, MPIR_Comm *comm_ptr, int nbytes, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, src, dst;
@@ -231,10 +303,10 @@ int MPIR_Iscatter_for_bcast(void *tmp_buf, int root, MPID_Comm *comm_ptr, int nb
curr_size = recv_size;
if (recv_size > 0) {
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + relative_rank*scatter_size),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + relative_rank*scatter_size),
recv_size, MPI_BYTE, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
break;
}
@@ -256,7 +328,7 @@ int MPIR_Iscatter_for_bcast(void *tmp_buf, int root, MPID_Comm *comm_ptr, int nb
dst = rank + mask;
if (dst >= comm_size)
dst -= comm_size;
- mpi_errno = MPID_Sched_send(((char *)tmp_buf + scatter_size*(relative_rank+mask)),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_buf + scatter_size*(relative_rank+mask)),
send_size, MPI_BYTE, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -314,7 +386,7 @@ fn_fail:
#define FUNCNAME MPIR_Ibcast_scatter_rec_dbl_allgather
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, dst;
@@ -323,10 +395,11 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
int type_size, j, k, i, tmp_mask, is_contig, is_homogeneous ATTRIBUTE((unused));
int relative_dst, dst_tree_root, my_tree_root, send_offset;
int recv_offset, tree_root, nprocs_completed, offset;
- MPID_Datatype *dtp;
+ MPIR_Datatype *dtp;
MPI_Aint true_extent, true_lb;
void *tmp_buf;
- MPIR_SCHED_CHKPMEM_DECL(1);
+ struct MPIR_Ibcast_status *status;
+ MPIR_SCHED_CHKPMEM_DECL(2);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -344,17 +417,20 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
is_contig = dtp->is_contig;
}
+ MPIR_SCHED_CHKPMEM_MALLOC(status, struct MPIR_Ibcast_status*,
+ sizeof(struct MPIR_Ibcast_status), mpi_errno, "MPI_Status");
is_homogeneous = 1;
#ifdef MPID_HAS_HETERO
if (comm_ptr->is_hetero)
is_homogeneous = 0;
#endif
- MPIU_Assert(is_homogeneous); /* we don't handle the hetero case right now */
+ MPIR_Assert(is_homogeneous); /* we don't handle the hetero case right now */
MPID_Datatype_get_size_macro(datatype, type_size);
nbytes = type_size * count;
-
+ status->n_bytes = nbytes;
+ status->curr_bytes = 0;
if (is_contig) {
/* contiguous and homogeneous. no need to pack. */
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
@@ -366,10 +442,10 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
/* TODO: Pipeline the packing and communication */
if (rank == root) {
- mpi_errno = MPID_Sched_copy(buffer, count, datatype,
+ mpi_errno = MPIR_Sched_copy(buffer, count, datatype,
tmp_buf, nbytes, MPI_BYTE, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -382,7 +458,7 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
/* curr_size is the amount of data that this process now has stored in
* buffer at byte offset (relative_rank*scatter_size) */
- curr_size = MPIU_MIN(scatter_size, (nbytes - (relative_rank * scatter_size)));
+ curr_size = MPL_MIN(scatter_size, (nbytes - (relative_rank * scatter_size)));
if (curr_size < 0)
curr_size = 0;
@@ -415,19 +491,22 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
/* calculate the exact amount of data to be received */
/* alternative */
if ((nbytes - recv_offset) > 0)
- incoming_count = MPIU_MIN((nbytes-recv_offset), (mask * scatter_size));
+ incoming_count = MPL_MIN((nbytes-recv_offset), (mask * scatter_size));
else
incoming_count = 0;
- mpi_errno = MPID_Sched_send(((char *)tmp_buf + send_offset),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_buf + send_offset),
curr_size, MPI_BYTE, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + recv_offset),
+ mpi_errno = MPIR_Sched_recv_status(((char *)tmp_buf + recv_offset),
incoming_count,
- MPI_BYTE, dst, comm_ptr, s);
+ MPI_BYTE, dst, comm_ptr,&status->status, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
+ mpi_errno = MPIR_Sched_cb(&sched_add_length, status, s);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_SCHED_BARRIER(s);
curr_size += incoming_count;
}
@@ -482,10 +561,10 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
/* incoming_count was set in the previous
receive. that's the amount of data to be
sent now. */
- mpi_errno = MPID_Sched_send(((char *)tmp_buf + offset),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_buf + offset),
incoming_count, MPI_BYTE, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* recv only if this proc. doesn't have data and sender
has data */
@@ -496,16 +575,20 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
/* recalculate incoming_count, since not all processes will have
* this value */
if ((nbytes - offset) > 0)
- incoming_count = MPIU_MIN((nbytes-offset), (mask * scatter_size));
+ incoming_count = MPL_MIN((nbytes-offset), (mask * scatter_size));
else
incoming_count = 0;
/* nprocs_completed is also equal to the no. of processes
whose data we don't have */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + offset),
- incoming_count, MPI_BYTE, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv_status(((char *)tmp_buf + offset),
+ incoming_count, MPI_BYTE, dst, comm_ptr,
+ &status->status, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
+ mpi_errno = MPIR_Sched_cb(&sched_add_length, status, s);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_SCHED_BARRIER(s);
curr_size += incoming_count;
}
@@ -518,10 +601,13 @@ int MPIR_Ibcast_scatter_rec_dbl_allgather(void *buffer, int count, MPI_Datatype
mask <<= 1;
i++;
}
-
+ if(is_homogeneous){
+ mpi_errno = MPIR_Sched_cb(&sched_test_curr_length, status, s);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
if (!is_contig) {
if (rank != root) {
- mpi_errno = MPID_Sched_copy(tmp_buf, nbytes, MPI_BYTE,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, nbytes, MPI_BYTE,
buffer, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -555,7 +641,7 @@ fn_fail:
#define FUNCNAME MPIR_Ibcast_scatter_ring_allgather
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, rank;
@@ -564,8 +650,10 @@ int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype dat
int i, j, jnext, left, right;
MPI_Aint true_extent, true_lb;
void *tmp_buf = NULL;
- MPID_Datatype *dtp = NULL;
- MPIR_SCHED_CHKPMEM_DECL(3);
+ MPIR_Datatype *dtp = NULL;
+
+ struct MPIR_Ibcast_status *status;
+ MPIR_SCHED_CHKPMEM_DECL(4);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -586,11 +674,13 @@ int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype dat
if (comm_ptr->is_hetero)
is_homogeneous = 0;
#endif
- MPIU_Assert(is_homogeneous); /* we don't handle the hetero case yet */
-
+ MPIR_Assert(is_homogeneous); /* we don't handle the hetero case yet */
+ MPIR_SCHED_CHKPMEM_MALLOC(status, struct MPIR_Ibcast_status*,
+ sizeof(struct MPIR_Ibcast_status), mpi_errno, "MPI_Status");
MPID_Datatype_get_size_macro(datatype, type_size);
nbytes = type_size * count;
-
+ status->n_bytes = nbytes;
+ status->curr_bytes = 0;
if (is_contig) {
/* contiguous, no need to pack. */
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
@@ -602,9 +692,9 @@ int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype dat
/* TODO: Pipeline the packing and communication */
if (rank == root) {
- mpi_errno = MPID_Sched_copy(buffer, count, datatype, tmp_buf, nbytes, MPI_BYTE, s);
+ mpi_errno = MPIR_Sched_copy(buffer, count, datatype, tmp_buf, nbytes, MPI_BYTE, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -626,30 +716,35 @@ int MPIR_Ibcast_scatter_ring_allgather(void *buffer, int count, MPI_Datatype dat
rel_j = (j - root + comm_size) % comm_size;
rel_jnext = (jnext - root + comm_size) % comm_size;
- left_count = MPIR_MIN(scatter_size, (nbytes - rel_jnext * scatter_size));
+ left_count = MPL_MIN(scatter_size, (nbytes - rel_jnext * scatter_size));
if (left_count < 0)
left_count = 0;
left_disp = rel_jnext * scatter_size;
- right_count = MPIR_MIN(scatter_size, (nbytes - rel_j * scatter_size));
+ right_count = MPL_MIN(scatter_size, (nbytes - rel_j * scatter_size));
if (right_count < 0)
right_count = 0;
right_disp = rel_j * scatter_size;
- mpi_errno = MPID_Sched_send(((char *)tmp_buf + right_disp),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_buf + right_disp),
right_count, MPI_BYTE, right, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + left_disp),
- left_count, MPI_BYTE, left, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv_status(((char *)tmp_buf + left_disp),
+ left_count, MPI_BYTE, left, comm_ptr, &status->status, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
+ mpi_errno = MPIR_Sched_cb(&sched_add_length, status, s);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_SCHED_BARRIER(s);
j = jnext;
jnext = (comm_size + jnext - 1) % comm_size;
}
+ mpi_errno = MPIR_Sched_cb(&sched_test_curr_length, status, s);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (!is_contig && rank != root) {
- mpi_errno = MPID_Sched_copy(tmp_buf, nbytes, MPI_BYTE, buffer, count, datatype, s);
+ mpi_errno = MPIR_Sched_copy(tmp_buf, nbytes, MPI_BYTE, buffer, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -669,15 +764,19 @@ fn_fail:
#define FUNCNAME MPIR_Ibcast_SMP
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int is_homogeneous;
MPI_Aint type_size;
+ struct MPIR_Ibcast_status *status;
+ MPIR_SCHED_CHKPMEM_DECL(1);
if (!MPIR_CVAR_ENABLE_SMP_COLLECTIVES || !MPIR_CVAR_ENABLE_SMP_BCAST)
MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
- MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
+ MPIR_Assert(MPIR_Comm_is_node_aware(comm_ptr));
+ MPIR_SCHED_CHKPMEM_MALLOC(status, struct MPIR_Ibcast_status*,
+ sizeof(struct MPIR_Ibcast_status), mpi_errno, "MPI_Status");
is_homogeneous = 1;
#ifdef MPID_HAS_HETERO
@@ -685,14 +784,14 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
is_homogeneous = 0;
#endif
- MPIU_Assert(is_homogeneous); /* we don't handle the hetero case yet */
+ MPIR_Assert(is_homogeneous); /* we don't handle the hetero case yet */
if (comm_ptr->node_comm) {
- MPIU_Assert(comm_ptr->node_comm->coll_fns);
- MPIU_Assert(comm_ptr->node_comm->coll_fns->Ibcast_sched);
+ MPIR_Assert(comm_ptr->node_comm->coll_fns);
+ MPIR_Assert(comm_ptr->node_comm->coll_fns->Ibcast_sched);
}
if (comm_ptr->node_roots_comm) {
- MPIU_Assert(comm_ptr->node_roots_comm->coll_fns);
- MPIU_Assert(comm_ptr->node_roots_comm->coll_fns->Ibcast_sched);
+ MPIR_Assert(comm_ptr->node_roots_comm->coll_fns);
+ MPIR_Assert(comm_ptr->node_roots_comm->coll_fns->Ibcast_sched);
}
/* MPI_Type_size() might not give the accurate size of the packed
@@ -707,33 +806,38 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
else
MPIR_Pack_size_impl(1, datatype, &type_size);
+ status->n_bytes = type_size * count;
/* TODO insert packing here */
/* send to intranode-rank 0 on the root's node */
if (comm_ptr->node_comm != NULL &&
- MPIU_Get_intranode_rank(comm_ptr, root) > 0) /* is not the node root (0) */
+ MPIR_Get_intranode_rank(comm_ptr, root) > 0) /* is not the node root (0) */
{ /* and is on our node (!-1) */
if (root == comm_ptr->rank) {
- mpi_errno = MPID_Sched_send(buffer, count, datatype, 0, comm_ptr->node_comm, s);
+ mpi_errno = MPIR_Sched_send(buffer, count, datatype, 0, comm_ptr->node_comm, s);
}
else if (0 == comm_ptr->node_comm->rank) {
- mpi_errno = MPID_Sched_recv(buffer, count, datatype, MPIU_Get_intranode_rank(comm_ptr, root),
- comm_ptr->node_comm, s);
+ mpi_errno = MPIR_Sched_recv_status(buffer, count, datatype, MPIR_Get_intranode_rank(comm_ptr, root),
+ comm_ptr->node_comm, &status->status, s);
}
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
+ mpi_errno = MPIR_Sched_cb(&sched_test_length, status, s);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_SCHED_BARRIER(s);
}
/* perform the internode broadcast */
if (comm_ptr->node_roots_comm != NULL)
{
mpi_errno = comm_ptr->node_roots_comm->coll_fns->Ibcast_sched(buffer, count, datatype,
- MPIU_Get_internode_rank(comm_ptr, root),
+ MPIR_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* don't allow the local ops for the intranode phase to start until this has completed */
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* perform the intranode broadcast on all except for the root's node */
if (comm_ptr->node_comm != NULL)
@@ -742,9 +846,11 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
+ MPIR_SCHED_CHKPMEM_COMMIT(s);
fn_exit:
return mpi_errno;
fn_fail:
+ MPIR_SCHED_CHKPMEM_REAP(s);
goto fn_exit;
}
@@ -755,20 +861,20 @@ fn_fail:
#define FUNCNAME MPIR_Ibcast_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibcast_intra(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibcast_intra(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, is_homogeneous ATTRIBUTE((unused));
MPI_Aint type_size, nbytes;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
is_homogeneous = 1;
#ifdef MPID_HAS_HETERO
if (comm_ptr->is_hetero)
is_homogeneous = 0;
#endif
- MPIU_Assert(is_homogeneous); /* we don't handle the hetero case right now */
+ MPIR_Assert(is_homogeneous); /* we don't handle the hetero case right now */
comm_size = comm_ptr->local_size;
MPID_Datatype_get_size_macro(datatype, type_size);
@@ -806,11 +912,11 @@ fn_fail:
#define FUNCNAME MPIR_Ibcast_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibcast_inter(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ibcast_inter(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
/* Intercommunicator broadcast.
* Root sends to rank 0 in remote group. Remote group does local
@@ -823,26 +929,26 @@ int MPIR_Ibcast_inter(void *buffer, int count, MPI_Datatype datatype, int root,
else if (root == MPI_ROOT)
{
/* root sends to rank 0 on remote group and returns */
- mpi_errno = MPID_Sched_send(buffer, count, datatype, 0, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(buffer, count, datatype, 0, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else
{
/* remote group. rank 0 on remote group receives from root */
if (comm_ptr->rank == 0) {
- mpi_errno = MPID_Sched_recv(buffer, count, datatype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(buffer, count, datatype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
if (comm_ptr->local_comm == NULL) {
- mpi_errno = MPIR_Setup_intercomm_localcomm(comm_ptr);
+ mpi_errno = MPII_Setup_intercomm_localcomm(comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
/* now do the usual broadcast on this intracommunicator
with rank 0 as root. */
- MPIU_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibcast_sched);
+ MPIR_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibcast_sched);
mpi_errno = comm_ptr->local_comm->coll_fns->Ibcast_sched(buffer, count, datatype, root, comm_ptr->local_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -857,37 +963,25 @@ fn_fail:
#define FUNCNAME MPIR_Ibcast_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ibcast_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ibcast_req(buffer, count, datatype, root, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Ibcast_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ibcast_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buffer, count, datatype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -929,11 +1023,11 @@ Output Parameters:
int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IBCAST);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IBCAST);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IBCAST);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IBCAST);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -951,20 +1045,20 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Com
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -979,13 +1073,13 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Com
/* ... body of routine ... */
- mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm_ptr, request);
+ mpi_errno = MPID_Ibcast(buffer, count, datatype, root, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IBCAST);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IBCAST);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index d828e48..b33c39b 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -76,7 +76,7 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
#define FUNCNAME MPIR_Iexscan
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size;
@@ -97,16 +97,16 @@ int MPIR_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dat
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIR_SCHED_CHKPMEM_MALLOC(partial_scan, void *, (count*(MPIR_MAX(true_extent,extent))), mpi_errno, "partial_scan");
+ MPIR_SCHED_CHKPMEM_MALLOC(partial_scan, void *, (count*(MPL_MAX(true_extent,extent))), mpi_errno, "partial_scan");
/* adjust for potential negative lower bound in datatype */
partial_scan = (void *)((char*)partial_scan - true_lb);
/* need to allocate temporary buffer to store incoming data*/
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, (count*(MPIR_MAX(true_extent,extent))), mpi_errno, "tmp_buf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, (count*(MPL_MAX(true_extent,extent))), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
- mpi_errno = MPID_Sched_copy((sendbuf == MPI_IN_PLACE ? (const void *)recvbuf : sendbuf), count, datatype,
+ mpi_errno = MPIR_Sched_copy((sendbuf == MPI_IN_PLACE ? (const void *)recvbuf : sendbuf), count, datatype,
partial_scan, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -116,17 +116,17 @@ int MPIR_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dat
dst = rank ^ mask;
if (dst < comm_size) {
/* Send partial_scan to dst. Recv into tmp_buf */
- mpi_errno = MPID_Sched_send(partial_scan, count, datatype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(partial_scan, count, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_recv(tmp_buf, count, datatype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, count, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
if (rank > dst) {
- mpi_errno = MPID_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* On rank 0, recvbuf is not defined. For sendbuf==MPI_IN_PLACE
recvbuf must not change (per MPI-2.2).
@@ -137,35 +137,35 @@ int MPIR_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dat
if (rank != 0) {
if (flag == 0) {
/* simply copy data recd from rank 0 into recvbuf */
- mpi_errno = MPID_Sched_copy(tmp_buf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
flag = 1;
}
else {
- mpi_errno = MPID_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
}
else {
if (is_commutative) {
- mpi_errno = MPID_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
- mpi_errno = MPID_Sched_reduce(partial_scan, tmp_buf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(partial_scan, tmp_buf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_copy(tmp_buf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, count, datatype,
partial_scan, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
}
@@ -184,38 +184,26 @@ fn_fail:
#define FUNCNAME MPIR_Iexscan_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iexscan_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iexscan_req(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iexscan_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Iexscan_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Iexscan_sched(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -258,11 +246,11 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
MPI_Op op, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IEXSCAN);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IEXSCAN);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IEXSCAN);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IEXSCAN);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -280,28 +268,28 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
MPIR_ERRTEST_COMM_INTRA(comm_ptr, mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr(op_ptr, mpi_errno);
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr(op_ptr, mpi_errno);
}
else if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno = ( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
@@ -320,13 +308,13 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
/* ... body of routine ... */
- mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, request);
+ mpi_errno = MPID_Iexscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IEXSCAN);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IEXSCAN);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index 961e73d..26f9d15 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -54,12 +54,13 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
#define FUNCNAME MPIR_Igather_binomial
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, rank;
- int curr_cnt=0, relative_rank, nbytes, is_homogeneous;
- int mask, sendtype_size, recvtype_size, src, dst, relative_src;
+ int relative_rank, is_homogeneous;
+ int mask, src, dst, relative_src;
+ MPI_Aint recvtype_size, sendtype_size, curr_cnt=0, nbytes;
int recvblks;
int tmp_buf_size, missing;
void *tmp_buf = NULL;
@@ -82,7 +83,7 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
is_homogeneous = !comm_ptr->is_hetero;
#endif
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
/* Use binomial tree algorithm. */
@@ -91,7 +92,7 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
if (rank == root)
{
MPID_Datatype_get_extent_macro(recvtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf+
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf+
(extent*recvcount*comm_size));
}
@@ -167,15 +168,15 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
* should cover the case where the root is
* rank 0. */
char *rp = (char *)recvbuf + (((rank + mask) % comm_size)*recvcount*extent);
- mpi_errno = MPID_Sched_recv(rp, (recvblks * recvcount), recvtype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(rp, (recvblks * recvcount), recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else if (nbytes < MPIR_CVAR_GATHER_VSMALL_MSG_SIZE) {
- mpi_errno = MPID_Sched_recv(tmp_buf, (recvblks * nbytes), MPI_BYTE, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, (recvblks * nbytes), MPI_BYTE, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
copy_offset = rank + mask;
copy_blks = recvblks;
@@ -191,9 +192,9 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
mpi_errno = MPIR_Type_commit_impl(&tmp_type);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(recvbuf, 1, tmp_type, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, 1, tmp_type, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* this "premature" free is safe b/c the sched holds an actual ref to keep it alive */
@@ -201,7 +202,7 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
}
}
else { /* Intermediate nodes store in temporary buffer */
- int offset;
+ MPI_Aint offset;
/* Estimate the amount of data that is going to come in */
recvblks = mask;
@@ -213,10 +214,10 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
offset = mask * nbytes;
else
offset = (mask - 1) * nbytes;
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + offset), (recvblks * nbytes),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + offset), (recvblks * nbytes),
MPI_BYTE, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
curr_cnt += (recvblks * nbytes);
}
@@ -228,33 +229,40 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
if (!tmp_buf_size) {
/* leaf nodes send directly from sendbuf */
- mpi_errno = MPID_Sched_send(sendbuf, sendcount, sendtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendbuf, sendcount, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else if (nbytes < MPIR_CVAR_GATHER_VSMALL_MSG_SIZE) {
- mpi_errno = MPID_Sched_send(tmp_buf, curr_cnt, MPI_BYTE, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, curr_cnt, MPI_BYTE, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
blocks[0] = sendcount;
- struct_displs[0] = MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf;
+ struct_displs[0] = MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf;
types[0] = sendtype;
- blocks[1] = curr_cnt - nbytes;
- struct_displs[1] = MPIU_VOID_PTR_CAST_TO_MPI_AINT tmp_buf;
- types[1] = MPI_BYTE;
+ /* check for overflow. work around int limits if needed*/
+ if (curr_cnt - nbytes != (int)(curr_cnt-nbytes)) {
+ blocks[1] = 1;
+ MPIR_Type_contiguous_x_impl(curr_cnt - nbytes,
+ MPI_BYTE, &(types[1]));
+ } else {
+ MPIR_Assign_trunc(blocks[1], curr_cnt - nbytes, int);
+ types[1] = MPI_BYTE;
+ }
+ struct_displs[1] = MPIR_VOID_PTR_CAST_TO_MPI_AINT tmp_buf;
mpi_errno = MPIR_Type_create_struct_impl(2, blocks, struct_displs, types, &tmp_type);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = MPIR_Type_commit_impl(&tmp_type);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_send(MPI_BOTTOM, 1, tmp_type, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(MPI_BOTTOM, 1, tmp_type, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* this "premature" free is safe b/c the sched holds an actual ref to keep it alive */
MPIR_Type_free_impl(&tmp_type);
@@ -268,11 +276,11 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
if ((rank == root) && root && (nbytes < MPIR_CVAR_GATHER_VSMALL_MSG_SIZE) && copy_blks) {
/* reorder and copy from tmp_buf into recvbuf */
/* FIXME why are there two copies here? */
- mpi_errno = MPID_Sched_copy(tmp_buf, nbytes * (comm_size - copy_offset), MPI_BYTE,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, nbytes * (comm_size - copy_offset), MPI_BYTE,
((char *)recvbuf + extent * recvcount * copy_offset),
recvcount * (comm_size - copy_offset), recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_copy((char *)tmp_buf + nbytes * (comm_size - copy_offset),
+ mpi_errno = MPIR_Sched_copy((char *)tmp_buf + nbytes * (comm_size - copy_offset),
nbytes * (copy_blks - comm_size + copy_offset), MPI_BYTE,
recvbuf, recvcount * (copy_blks - comm_size + copy_offset),
recvtype, s);
@@ -284,7 +292,7 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* communicator is heterogeneous. pack data into tmp_buf. */
/* currently unimplemented & untested */
- MPIU_Assertp(FALSE);
+ MPIR_Assertp(FALSE);
#if 0
if (rank == root)
@@ -292,7 +300,7 @@ int MPIR_Igather_binomial(const void *sendbuf, int sendcount, MPI_Datatype sendt
else
MPIR_Pack_size_impl(sendcount*(comm_size/2), sendtype, &tmp_buf_size);
- MPIU_CHKPMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKPMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
position = 0;
if (sendbuf != MPI_IN_PLACE) {
@@ -380,7 +388,7 @@ fn_fail:
#define FUNCNAME MPIR_Igather_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Igather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Igather_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
@@ -397,14 +405,16 @@ fn_fail:
#define FUNCNAME MPIR_Igather_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
- int rank, local_size, remote_size;
- int i, nbytes, sendtype_size, recvtype_size;
+ int rank;
+ MPI_Aint local_size, remote_size;
+ int i;
+ MPI_Aint recvtype_size, sendtype_size, nbytes;
MPI_Aint extent, true_extent, true_lb = 0;
void *tmp_buf = NULL;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_SCHED_CHKPMEM_DECL(1);
/* Intercommunicator gather.
@@ -439,7 +449,7 @@ int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
if (nbytes < MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE) {
if (root == MPI_ROOT) {
/* root receives data from rank 0 on remote group */
- mpi_errno = MPID_Sched_recv(recvbuf, recvcount*remote_size, recvtype, 0, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, recvcount*remote_size, recvtype, 0, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
@@ -453,8 +463,8 @@ int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
MPIR_Type_get_true_extent_impl(sendtype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(sendtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(sendcount*local_size*(MPIR_MAX(extent, true_extent)));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, sendcount*local_size*(MPIR_MAX(extent,true_extent)),
+ MPIR_Ensure_Aint_fits_in_pointer(sendcount*local_size*(MPL_MAX(extent, true_extent)));
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, sendcount*local_size*(MPL_MAX(extent,true_extent)),
mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -462,21 +472,21 @@ int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
/* all processes in remote group form new intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
newcomm_ptr = comm_ptr->local_comm;
/* now do the a local gather on this intracommunicator */
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather_sched);
+ MPIR_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather_sched);
mpi_errno = newcomm_ptr->coll_fns->Igather_sched(sendbuf, sendcount, sendtype,
tmp_buf, sendcount, sendtype, 0,
newcomm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (rank == 0) {
- mpi_errno = MPID_Sched_send(tmp_buf, sendcount*local_size, sendtype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, sendcount*local_size, sendtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -485,17 +495,17 @@ int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
/* long message. use linear algorithm. */
if (root == MPI_ROOT) {
MPID_Datatype_get_extent_macro(recvtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(recvcount*remote_size*extent));
for (i=0; i<remote_size; i++) {
- mpi_errno = MPID_Sched_recv(((char *)recvbuf+recvcount*i*extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf+recvcount*i*extent),
recvcount, recvtype, i, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
else {
- mpi_errno = MPID_Sched_send(sendbuf, sendcount, sendtype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendbuf, sendcount, sendtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -512,40 +522,26 @@ fn_fail:
#define FUNCNAME MPIR_Igather_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Igather_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Igather_req(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Igather_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Igather_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Igather_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -590,11 +586,11 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
int root, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IGATHER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IGATHER);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IGATHER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IGATHER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -616,20 +612,20 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
if (sendbuf != MPI_IN_PLACE) {
@@ -637,7 +633,7 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -651,7 +647,7 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -661,7 +657,7 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* catch common aliasing cases */
if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0) {
- int recvtype_size;
+ MPI_Aint recvtype_size;
MPID_Datatype_get_size_macro(recvtype, recvtype_size);
MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + comm_ptr->rank*recvcount*recvtype_size, mpi_errno);
}
@@ -670,7 +666,7 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
@@ -678,7 +674,7 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -692,7 +688,7 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -708,13 +704,13 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, request);
+ mpi_errno = MPID_Igather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IGATHER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IGATHER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/igatherv.c b/src/mpi/coll/igatherv.c
index 547fcc3..136a0f6 100644
--- a/src/mpi/coll/igatherv.c
+++ b/src/mpi/coll/igatherv.c
@@ -35,7 +35,7 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,
- MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -46,30 +46,30 @@ int MPIR_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, voi
rank = comm_ptr->rank;
/* If rank == root, then I recv lots, otherwise I send */
- if (((comm_ptr->comm_kind == MPID_INTRACOMM) && (root == rank)) ||
- ((comm_ptr->comm_kind == MPID_INTERCOMM) && (root == MPI_ROOT)))
+ if (((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (root == rank)) ||
+ ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) && (root == MPI_ROOT)))
{
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
comm_size = comm_ptr->local_size;
else
comm_size = comm_ptr->remote_size;
MPID_Datatype_get_extent_macro(recvtype, extent);
/* each node can make sure it is not going to overflow aint */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf + displs[rank] * extent);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf + displs[rank] * extent);
for (i = 0; i < comm_size; i++) {
if (recvcounts[i]) {
- if ((comm_ptr->comm_kind == MPID_INTRACOMM) && (i == rank)) {
+ if ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (i == rank)) {
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
((char *)recvbuf+displs[rank]*extent),
recvcounts[rank], recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
else {
- mpi_errno = MPID_Sched_recv(((char *)recvbuf+displs[i]*extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf+displs[i]*extent),
recvcounts[i], recvtype, i, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -92,9 +92,9 @@ int MPIR_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, voi
MPIR_CVAR_GET_DEFAULT_INT(GATHERV_INTER_SSEND_MIN_PROCS,&min_procs);
if (comm_size >= min_procs)
- mpi_errno = MPID_Sched_ssend(sendbuf, sendcount, sendtype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_ssend(sendbuf, sendcount, sendtype, root, comm_ptr, s);
else
- mpi_errno = MPID_Sched_send(sendbuf, sendcount, sendtype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendbuf, sendcount, sendtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -111,40 +111,26 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPI_Request *request)
+ int root, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Igatherv_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Igatherv_req(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- root, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Igatherv_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Igatherv_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Igatherv_sched(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -190,11 +176,11 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IGATHERV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IGATHERV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IGATHERV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IGATHERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -210,20 +196,20 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int i, rank, comm_size;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
if (sendbuf != MPI_IN_PLACE) {
@@ -231,7 +217,7 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -248,7 +234,7 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -273,7 +259,7 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
@@ -284,7 +270,7 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -302,7 +288,7 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -318,13 +304,13 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
/* ... body of routine ... */
- mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm_ptr, request);
+ mpi_errno = MPID_Igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IGATHERV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IGATHERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index 0245e05..9a451c2 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -37,7 +37,7 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int recvcounts[],
MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, i;
@@ -57,7 +57,7 @@ int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int r
MPID_Datatype_get_extent_macro(datatype, extent);
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
- MPIU_Assert(MPIR_Op_is_commutative(op));
+ MPIR_Assert(MPIR_Op_is_commutative(op));
MPIR_SCHED_CHKPMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
@@ -74,25 +74,25 @@ int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int r
MPID_Datatype_get_size_macro(datatype, type_size);
/* allocate temp. buffer to receive incoming data */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results because recvbuf may not be big enough */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
/* copy sendbuf into tmp_results */
if (sendbuf != MPI_IN_PLACE)
- mpi_errno = MPID_Sched_copy(sendbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
else
- mpi_errno = MPID_Sched_copy(recvbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(recvbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
pof2 = 1;
while (pof2 <= comm_size) pof2 <<= 1;
@@ -108,9 +108,9 @@ int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int r
if (rank < 2*rem) {
if (rank % 2 == 0) { /* even */
- mpi_errno = MPID_Sched_send(tmp_results, total_count, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_results, total_count, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* temporarily set the rank to -1 so that this
process does not pariticipate in recursive
@@ -118,16 +118,16 @@ int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int r
newrank = -1;
}
else { /* odd */
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, total_count, datatype, rank-1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, total_count, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* do the reduction on received data. since the
ordering is right, it doesn't matter whether
the operation is commutative or not. */
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, tmp_results, total_count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, tmp_results, total_count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* change the rank */
newrank = rank / 2;
@@ -191,22 +191,22 @@ int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int r
int send_dst = (send_cnt ? dst : MPI_PROC_NULL);
int recv_dst = (recv_cnt ? dst : MPI_PROC_NULL);
- mpi_errno = MPID_Sched_send(((char *)tmp_results + newdisps[send_idx]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_results + newdisps[send_idx]*extent),
send_cnt, datatype, send_dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(((char *) tmp_recvbuf + newdisps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_recv(((char *) tmp_recvbuf + newdisps[recv_idx]*extent),
recv_cnt, datatype, recv_dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* tmp_recvbuf contains data received in this step.
tmp_results contains data accumulated so far */
if (recv_cnt) {
- mpi_errno = MPID_Sched_reduce(((char *)tmp_recvbuf + newdisps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_recvbuf + newdisps[recv_idx]*extent),
((char *)tmp_results + newdisps[recv_idx]*extent),
recv_cnt, datatype, op, s);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* update send_idx for next iteration */
@@ -217,11 +217,11 @@ int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int r
/* copy this process's result from tmp_results to recvbuf */
if (recvcounts[rank]) {
- mpi_errno = MPID_Sched_copy(((char *)tmp_results + disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)tmp_results + disps[rank]*extent),
recvcounts[rank], datatype,
recvbuf, recvcounts[rank], datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -232,17 +232,17 @@ int MPIR_Ireduce_scatter_rec_hlv(const void *sendbuf, void *recvbuf, const int r
if (rank < 2*rem) {
if (rank % 2) { /* odd */
if (recvcounts[rank-1]) {
- mpi_errno = MPID_Sched_send(((char *)tmp_results + disps[rank-1]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_results + disps[rank-1]*extent),
recvcounts[rank-1], datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
else { /* even */
if (recvcounts[rank]) {
- mpi_errno = MPID_Sched_recv(recvbuf, recvcounts[rank], datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, recvcounts[rank], datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
}
@@ -263,8 +263,8 @@ fn_fail:
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ireduce_scatter_pairwise(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Sched_t s)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, i;
@@ -283,7 +283,7 @@ int MPIR_Ireduce_scatter_pairwise(const void *sendbuf, void *recvbuf, const int
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
is_commutative = MPIR_Op_is_commutative(op);
- MPIU_Assert(is_commutative);
+ MPIR_Assert(is_commutative);
MPIR_SCHED_CHKPMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
@@ -298,19 +298,19 @@ int MPIR_Ireduce_scatter_pairwise(const void *sendbuf, void *recvbuf, const int
}
/* total_count*extent eventually gets malloced. it isn't added to
* a user-passed in buffer */
- MPIU_Ensure_Aint_fits_in_pointer(total_count * MPIR_MAX(true_extent, extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count * MPL_MAX(true_extent, extent));
if (sendbuf != MPI_IN_PLACE) {
/* copy local data into recvbuf */
- mpi_errno = MPID_Sched_copy(((char *)sendbuf+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)sendbuf+disps[rank]*extent),
recvcounts[rank], datatype,
recvbuf, recvcounts[rank], datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* allocate temporary buffer to store incoming data */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, recvcounts[rank]*(MPIR_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, recvcounts[rank]*(MPL_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
@@ -321,28 +321,28 @@ int MPIR_Ireduce_scatter_pairwise(const void *sendbuf, void *recvbuf, const int
/* send the data that dst needs. recv data that this process
needs from src into tmp_recvbuf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_send(((char *)sendbuf+disps[dst]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)sendbuf+disps[dst]*extent),
recvcounts[dst], datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- mpi_errno = MPID_Sched_send(((char *)recvbuf+disps[dst]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf+disps[dst]*extent),
recvcounts[dst], datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, recvcounts[rank], datatype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, recvcounts[rank], datatype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* FIXME does this algorithm actually work correctly for noncommutative ops?
* If so, relax restriction in assert and comments... */
if (is_commutative || (src < rank)) {
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, recvbuf, recvcounts[rank], datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, recvbuf, recvcounts[rank], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, ((char *)recvbuf+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, ((char *)recvbuf+disps[rank]*extent),
recvcounts[rank], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* We can't store the result at the beginning of
@@ -350,41 +350,41 @@ int MPIR_Ireduce_scatter_pairwise(const void *sendbuf, void *recvbuf, const int
other process/processes need. At the end we will copy back
the result to the beginning of recvbuf. */
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_reduce(recvbuf, tmp_recvbuf, recvcounts[rank], datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(recvbuf, tmp_recvbuf, recvcounts[rank], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* copy result back into recvbuf */
- mpi_errno = MPID_Sched_copy(tmp_recvbuf, recvcounts[rank], datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_recvbuf, recvcounts[rank], datatype,
recvbuf, recvcounts[rank], datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- mpi_errno = MPID_Sched_reduce(((char *)recvbuf+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)recvbuf+disps[rank]*extent),
tmp_recvbuf, recvcounts[rank], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* copy result back into recvbuf */
- mpi_errno = MPID_Sched_copy(tmp_recvbuf, recvcounts[rank], datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_recvbuf, recvcounts[rank], datatype,
((char *)recvbuf + disps[rank]*extent),
recvcounts[rank], datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
/* if MPI_IN_PLACE, move output data to the beginning of
recvbuf. already done for rank 0. */
if ((sendbuf == MPI_IN_PLACE) && (rank != 0)) {
- mpi_errno = MPID_Sched_copy(((char *)recvbuf + disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)recvbuf + disps[rank]*extent),
recvcounts[rank], datatype,
recvbuf, recvcounts[rank], datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
MPIR_SCHED_CHKPMEM_COMMIT(s);
@@ -402,8 +402,8 @@ fn_fail:
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Sched_t s)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, i;
@@ -440,30 +440,30 @@ int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int r
/* total_count*extent eventually gets malloced. it isn't added to
* a user-passed in buffer */
- MPIU_Ensure_Aint_fits_in_pointer(total_count * MPIR_MAX(true_extent, extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count * MPL_MAX(true_extent, extent));
/* need to allocate temporary buffer to receive incoming data*/
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
/* copy sendbuf into tmp_results */
if (sendbuf != MPI_IN_PLACE)
- mpi_errno = MPID_Sched_copy(sendbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
else
- mpi_errno = MPID_Sched_copy(recvbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(recvbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
mask = 0x1;
i = 0;
@@ -527,11 +527,11 @@ int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int r
received in tmp_recvbuf and then accumulated into
tmp_results. accumulation is done later below. */
- mpi_errno = MPID_Sched_send(tmp_results, 1, sendtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_results, 1, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
received = 1;
}
@@ -572,9 +572,9 @@ int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int r
&& (dst >= tree_root + nprocs_completed))
{
/* send the current result */
- mpi_errno = MPID_Sched_send(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* recv only if this proc. doesn't have data and sender
has data */
@@ -582,9 +582,9 @@ int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int r
(dst < tree_root + nprocs_completed) &&
(rank >= tree_root + nprocs_completed))
{
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
received = 1;
}
tmp_mask >>= 1;
@@ -606,28 +606,28 @@ int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int r
we do the reduce here. */
if (received) {
if (is_commutative || (dst_tree_root < my_tree_root)) {
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, tmp_results, blklens[0], datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, tmp_results, blklens[0], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_reduce(((char *)tmp_recvbuf + dis[1]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_recvbuf + dis[1]*extent),
((char *)tmp_results + dis[1]*extent),
blklens[1], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
- mpi_errno = MPID_Sched_reduce(tmp_results, tmp_recvbuf, blklens[0], datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_results, tmp_recvbuf, blklens[0], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_reduce(((char *)tmp_results + dis[1]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_results + dis[1]*extent),
((char *)tmp_recvbuf + dis[1]*extent),
blklens[1], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* copy result back into tmp_results */
- mpi_errno = MPID_Sched_copy(tmp_recvbuf, 1, recvtype,
+ mpi_errno = MPIR_Sched_copy(tmp_recvbuf, 1, recvtype,
tmp_results, 1, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -639,11 +639,11 @@ int MPIR_Ireduce_scatter_rec_dbl(const void *sendbuf, void *recvbuf, const int r
}
/* now copy final results from tmp_results to recvbuf */
- mpi_errno = MPID_Sched_copy(((char *)tmp_results+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)tmp_results+disps[rank]*extent),
recvcounts[rank], datatype,
recvbuf, recvcounts[rank], datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
MPIR_SCHED_CHKPMEM_COMMIT(s);
fn_exit:
@@ -664,7 +664,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
static int MPIR_Ireduce_scatter_noncomm(const void *sendbuf, void *recvbuf,
const int recvcounts[], MPI_Datatype datatype, MPI_Op op,
- MPID_Comm *comm_ptr, MPID_Sched_t s)
+ MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size = comm_ptr->local_size;
@@ -691,10 +691,10 @@ static int MPIR_Ireduce_scatter_noncomm(const void *sendbuf, void *recvbuf,
}
/* begin error checking */
- MPIU_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
+ MPIR_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
for (i = 0; i < (comm_size - 1); ++i) {
- MPIU_Assert(recvcounts[i] == recvcounts[i+1]);
+ MPIR_Assert(recvcounts[i] == recvcounts[i+1]);
}
/* end error checking */
@@ -711,12 +711,12 @@ static int MPIR_Ireduce_scatter_noncomm(const void *sendbuf, void *recvbuf,
/* Copy our send data to tmp_buf0. We do this one block at a time and
permute the blocks as we go according to the mirror permutation. */
for (i = 0; i < comm_size; ++i) {
- mpi_errno = MPID_Sched_copy(((char *)(sendbuf == MPI_IN_PLACE ? (const void *)recvbuf : sendbuf) + (i * true_extent * block_size)),
+ mpi_errno = MPIR_Sched_copy(((char *)(sendbuf == MPI_IN_PLACE ? (const void *)recvbuf : sendbuf) + (i * true_extent * block_size)),
block_size, datatype,
((char *)tmp_buf0 + (MPIU_Mirror_permutation(i, log2_comm_size) * true_extent * block_size)),
block_size, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
buf0_was_inout = 1;
@@ -739,43 +739,43 @@ static int MPIR_Ireduce_scatter_noncomm(const void *sendbuf, void *recvbuf,
send_offset += size;
}
- mpi_errno = MPID_Sched_send((outgoing_data + send_offset*true_extent),
+ mpi_errno = MPIR_Sched_send((outgoing_data + send_offset*true_extent),
size, datatype, peer, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv((incoming_data + recv_offset*true_extent),
+ mpi_errno = MPIR_Sched_recv((incoming_data + recv_offset*true_extent),
size, datatype, peer, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* always perform the reduction at recv_offset, the data at send_offset
is now our peer's responsibility */
if (rank > peer) {
/* higher ranked value so need to call op(received_data, my_data) */
- mpi_errno = MPID_Sched_reduce((incoming_data + recv_offset*true_extent),
+ mpi_errno = MPIR_Sched_reduce((incoming_data + recv_offset*true_extent),
(outgoing_data + recv_offset*true_extent),
size, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
/* lower ranked value so need to call op(my_data, received_data) */
- mpi_errno = MPID_Sched_reduce((outgoing_data + recv_offset*true_extent),
+ mpi_errno = MPIR_Sched_reduce((outgoing_data + recv_offset*true_extent),
(incoming_data + recv_offset*true_extent),
size, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
buf0_was_inout = !buf0_was_inout;
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* the next round of send/recv needs to happen within the block (of size
"size") that we just received and reduced */
send_offset = recv_offset;
}
- MPIU_Assert(size == recvcounts[rank]);
+ MPIR_Assert(size == recvcounts[rank]);
/* copy the reduced data to the recvbuf */
result_ptr = (char *)(buf0_was_inout ? tmp_buf0 : tmp_buf1) + recv_offset * true_extent;
- mpi_errno = MPID_Sched_copy(result_ptr, size, datatype,
+ mpi_errno = MPIR_Sched_copy(result_ptr, size, datatype,
recvbuf, size, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_SCHED_CHKPMEM_COMMIT(s);
@@ -837,8 +837,8 @@ fn_fail:
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ireduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Sched_t s)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -900,8 +900,8 @@ fn_fail:
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Sched_t s)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Sched_t s)
{
/* Intercommunicator Reduce_scatter.
We first do an intercommunicator reduce to rank 0 on left group,
@@ -913,7 +913,7 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
MPI_Aint true_extent, true_lb = 0, extent;
void *tmp_buf = NULL;
int *disps = NULL;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_SCHED_CHKPMEM_DECL(2);
rank = comm_ptr->rank;
@@ -938,7 +938,7 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, total_count*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, total_count*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -946,7 +946,7 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
/* first do a reduce from right group to rank 0 in left group,
then from left group to rank 0 in right group*/
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce_sched);
+ MPIR_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce_sched);
if (comm_ptr->is_low_group) {
/* reduce from right group to rank 0*/
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
@@ -979,17 +979,17 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm(comm_ptr);
+ mpi_errno = MPII_Setup_intercomm_localcomm(comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
newcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatterv_sched);
+ MPIR_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatterv_sched);
mpi_errno = newcomm_ptr->coll_fns->Iscatterv_sched(tmp_buf, recvcounts, disps, datatype,
recvbuf, recvcounts[rank], datatype, 0,
newcomm_ptr, s);
@@ -1008,41 +1008,27 @@ fn_fail:
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ireduce_scatter_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_req(sendbuf, recvbuf, recvcounts,
- datatype, op,
- comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ireduce_scatter_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ireduce_scatter_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_sched(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -1085,12 +1071,12 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IREDUCE_SCATTER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IREDUCE_SCATTER);
i = 0;
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IREDUCE_SCATTER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -1108,30 +1094,30 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(recvcounts,"recvcounts", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr(op_ptr, mpi_errno);
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr(op_ptr, mpi_errno);
}
else if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno = ( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
@@ -1142,7 +1128,7 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
while (i < comm_ptr->remote_size && recvcounts[i] == 0) ++i;
- if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE && i < comm_ptr->remote_size)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM && sendbuf != MPI_IN_PLACE && i < comm_ptr->remote_size)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
/* TODO more checks may be appropriate (counts, in_place, etc) */
}
@@ -1152,13 +1138,13 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
/* ... body of routine ... */
- mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, request);
+ mpi_errno = MPID_Ireduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IREDUCE_SCATTER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index 22233c9..9d69e20 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -36,7 +36,7 @@ int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
#define FUNCNAME MPIR_Ireduce_scatter_block_rec_hlv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, i;
@@ -56,7 +56,7 @@ int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int r
MPID_Datatype_get_extent_macro(datatype, extent);
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
- MPIU_Assert(MPIR_Op_is_commutative(op));
+ MPIR_Assert(MPIR_Op_is_commutative(op));
MPIR_SCHED_CHKPMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
@@ -73,25 +73,25 @@ int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int r
MPID_Datatype_get_size_macro(datatype, type_size);
/* allocate temp. buffer to receive incoming data */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results because recvbuf may not be big enough */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
/* copy sendbuf into tmp_results */
if (sendbuf != MPI_IN_PLACE)
- mpi_errno = MPID_Sched_copy(sendbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
else
- mpi_errno = MPID_Sched_copy(recvbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(recvbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
pof2 = 1;
while (pof2 <= comm_size) pof2 <<= 1;
@@ -107,9 +107,9 @@ int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int r
if (rank < 2*rem) {
if (rank % 2 == 0) { /* even */
- mpi_errno = MPID_Sched_send(tmp_results, total_count, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_results, total_count, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* temporarily set the rank to -1 so that this
process does not pariticipate in recursive
@@ -117,16 +117,16 @@ int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int r
newrank = -1;
}
else { /* odd */
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, total_count, datatype, rank-1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, total_count, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* do the reduction on received data. since the
ordering is right, it doesn't matter whether
the operation is commutative or not. */
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, tmp_results, total_count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, tmp_results, total_count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* change the rank */
newrank = rank / 2;
@@ -190,23 +190,23 @@ int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int r
int send_dst = (send_cnt ? dst : MPI_PROC_NULL);
int recv_dst = (recv_cnt ? dst : MPI_PROC_NULL);
- mpi_errno = MPID_Sched_send(((char *)tmp_results + newdisps[send_idx]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_results + newdisps[send_idx]*extent),
send_cnt, datatype, send_dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(((char *) tmp_recvbuf + newdisps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_recv(((char *) tmp_recvbuf + newdisps[recv_idx]*extent),
recv_cnt, datatype, recv_dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* tmp_recvbuf contains data received in this step.
tmp_results contains data accumulated so far */
if (recv_cnt) {
- mpi_errno = MPID_Sched_reduce(((char *)tmp_recvbuf + newdisps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_recvbuf + newdisps[recv_idx]*extent),
((char *)tmp_results + newdisps[recv_idx]*extent),
recv_cnt, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* update send_idx for next iteration */
@@ -216,11 +216,11 @@ int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int r
}
/* copy this process's result from tmp_results to recvbuf */
- mpi_errno = MPID_Sched_copy(((char *)tmp_results + disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)tmp_results + disps[rank]*extent),
recvcount, datatype,
recvbuf, recvcount, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
@@ -229,15 +229,15 @@ int MPIR_Ireduce_scatter_block_rec_hlv(const void *sendbuf, void *recvbuf, int r
calculated for that process */
if (rank < 2*rem) {
if (rank % 2) { /* odd */
- mpi_errno = MPID_Sched_send(((char *)tmp_results + disps[rank-1]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)tmp_results + disps[rank-1]*extent),
recvcount, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else { /* even */
- mpi_errno = MPID_Sched_recv(recvbuf, recvcount, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, recvcount, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -256,7 +256,7 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_scatter_block_rec_pairwise
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, i;
@@ -275,7 +275,7 @@ int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
is_commutative = MPIR_Op_is_commutative(op);
- MPIU_Assert(is_commutative);
+ MPIR_Assert(is_commutative);
MPIR_SCHED_CHKPMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
@@ -290,19 +290,19 @@ int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int
}
/* total_count*extent eventually gets malloced. it isn't added to
* a user-passed in buffer */
- MPIU_Ensure_Aint_fits_in_pointer(total_count * MPIR_MAX(true_extent, extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count * MPL_MAX(true_extent, extent));
if (sendbuf != MPI_IN_PLACE) {
/* copy local data into recvbuf */
- mpi_errno = MPID_Sched_copy(((char *)sendbuf+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)sendbuf+disps[rank]*extent),
recvcount, datatype,
recvbuf, recvcount, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* allocate temporary buffer to store incoming data */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, recvcount*(MPIR_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, recvcount*(MPL_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
@@ -313,28 +313,28 @@ int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int
/* send the data that dst needs. recv data that this process
needs from src into tmp_recvbuf */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_send(((char *)sendbuf+disps[dst]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)sendbuf+disps[dst]*extent),
recvcount, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- mpi_errno = MPID_Sched_send(((char *)recvbuf+disps[dst]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf+disps[dst]*extent),
recvcount, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, recvcount, datatype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, recvcount, datatype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* FIXME does this algorithm actually work correctly for noncommutative ops?
* If so, relax restriction in assert and comments... */
if (is_commutative || (src < rank)) {
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, recvbuf, recvcount, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, recvbuf, recvcount, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, ((char *)recvbuf+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, ((char *)recvbuf+disps[rank]*extent),
recvcount, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* We can't store the result at the beginning of
@@ -342,41 +342,41 @@ int MPIR_Ireduce_scatter_block_pairwise(const void *sendbuf, void *recvbuf, int
other process/processes need. At the end we will copy back
the result to the beginning of recvbuf. */
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_reduce(recvbuf, tmp_recvbuf, recvcount, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(recvbuf, tmp_recvbuf, recvcount, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* copy result back into recvbuf */
- mpi_errno = MPID_Sched_copy(tmp_recvbuf, recvcount, datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_recvbuf, recvcount, datatype,
recvbuf, recvcount, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- mpi_errno = MPID_Sched_reduce(((char *)recvbuf+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)recvbuf+disps[rank]*extent),
tmp_recvbuf, recvcount, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* copy result back into recvbuf */
- mpi_errno = MPID_Sched_copy(tmp_recvbuf, recvcount, datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_recvbuf, recvcount, datatype,
((char *)recvbuf + disps[rank]*extent),
recvcount, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
/* if MPI_IN_PLACE, move output data to the beginning of
recvbuf. already done for rank 0. */
if ((sendbuf == MPI_IN_PLACE) && (rank != 0)) {
- mpi_errno = MPID_Sched_copy(((char *)recvbuf + disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)recvbuf + disps[rank]*extent),
recvcount, datatype,
recvbuf, recvcount, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
MPIR_SCHED_CHKPMEM_COMMIT(s);
@@ -393,7 +393,7 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_scatter_block_rec_dbl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size, i;
@@ -430,30 +430,30 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
/* total_count*extent eventually gets malloced. it isn't added to
* a user-passed in buffer */
- MPIU_Ensure_Aint_fits_in_pointer(total_count * MPIR_MAX(true_extent, extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count * MPL_MAX(true_extent, extent));
/* need to allocate temporary buffer to receive incoming data*/
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results */
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
/* copy sendbuf into tmp_results */
if (sendbuf != MPI_IN_PLACE)
- mpi_errno = MPID_Sched_copy(sendbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
else
- mpi_errno = MPID_Sched_copy(recvbuf, total_count, datatype,
+ mpi_errno = MPIR_Sched_copy(recvbuf, total_count, datatype,
tmp_results, total_count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
mask = 0x1;
i = 0;
@@ -482,7 +482,7 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
blklens[1] = 0;
dis[0] = 0;
- dis[1] = blklens[0] + recvcount * (MPIR_MIN((my_tree_root + mask), comm_size) - my_tree_root);
+ dis[1] = blklens[0] + recvcount * (MPL_MIN((my_tree_root + mask), comm_size) - my_tree_root);
mpi_errno = MPIR_Type_indexed_impl(2, blklens, dis, datatype, &sendtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -491,14 +491,13 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* calculate recvtype */
- blklens[0] = recvcount * MPIR_MIN(dst_tree_root, comm_size);
+ blklens[0] = recvcount * MPL_MIN(dst_tree_root, comm_size);
blklens[1] = recvcount * (comm_size - (dst_tree_root + mask));
if (blklens[1] < 0)
blklens[1] = 0;
dis[0] = 0;
- dis[1] = blklens[0];
- dis[1] = blklens[0] + recvcount * (MPIR_MIN((dst_tree_root + mask), comm_size) - dst_tree_root);
+ dis[1] = blklens[0] + recvcount * (MPL_MIN((dst_tree_root + mask), comm_size) - dst_tree_root);
mpi_errno = MPIR_Type_indexed_impl(2, blklens, dis, datatype, &recvtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -511,11 +510,11 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
/* tmp_results contains data to be sent in each step. Data is
received in tmp_recvbuf and then accumulated into
tmp_results. accumulation is done later below. */
- mpi_errno = MPID_Sched_send(tmp_results, 1, sendtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_results, 1, sendtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
received = 1;
}
@@ -556,9 +555,9 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
&& (dst >= tree_root + nprocs_completed))
{
/* send the current result */
- mpi_errno = MPID_Sched_send(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* recv only if this proc. doesn't have data and sender
has data */
@@ -566,9 +565,9 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
(dst < tree_root + nprocs_completed) &&
(rank >= tree_root + nprocs_completed))
{
- mpi_errno = MPID_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_recvbuf, 1, recvtype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
received = 1;
}
tmp_mask >>= 1;
@@ -590,28 +589,28 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
we do the reduce here. */
if (received) {
if (is_commutative || (dst_tree_root < my_tree_root)) {
- mpi_errno = MPID_Sched_reduce(tmp_recvbuf, tmp_results, blklens[0], datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_recvbuf, tmp_results, blklens[0], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_reduce(((char *)tmp_recvbuf + dis[1]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_recvbuf + dis[1]*extent),
((char *)tmp_results + dis[1]*extent),
blklens[1], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
- mpi_errno = MPID_Sched_reduce(tmp_results, tmp_recvbuf, blklens[0], datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_results, tmp_recvbuf, blklens[0], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_reduce(((char *)tmp_results + dis[1]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_results + dis[1]*extent),
((char *)tmp_recvbuf + dis[1]*extent),
blklens[1], datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* copy result back into tmp_results */
- mpi_errno = MPID_Sched_copy(tmp_recvbuf, 1, recvtype,
+ mpi_errno = MPIR_Sched_copy(tmp_recvbuf, 1, recvtype,
tmp_results, 1, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -623,11 +622,11 @@ int MPIR_Ireduce_scatter_block_rec_dbl(const void *sendbuf, void *recvbuf, int r
}
/* now copy final results from tmp_results to recvbuf */
- mpi_errno = MPID_Sched_copy(((char *)tmp_results+disps[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)tmp_results+disps[rank]*extent),
recvcount, datatype,
recvbuf, recvcount, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
MPIR_SCHED_CHKPMEM_COMMIT(s);
fn_exit:
@@ -645,7 +644,7 @@ fn_fail:
#define FUNCNAME MPIR_Reduce_scatter_block_noncomm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size = comm_ptr->local_size;
@@ -672,7 +671,7 @@ int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int r
}
/* begin error checking */
- MPIU_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
+ MPIR_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
/* end error checking */
/* size of a block (count of datatype per block, NOT bytes per block) */
@@ -688,13 +687,13 @@ int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int r
/* Copy our send data to tmp_buf0. We do this one block at a time and
permute the blocks as we go according to the mirror permutation. */
for (i = 0; i < comm_size; ++i) {
- mpi_errno = MPID_Sched_copy(((char *)(sendbuf == MPI_IN_PLACE ? (const void *)recvbuf : sendbuf) + (i * true_extent * block_size)),
+ mpi_errno = MPIR_Sched_copy(((char *)(sendbuf == MPI_IN_PLACE ? (const void *)recvbuf : sendbuf) + (i * true_extent * block_size)),
block_size, datatype,
((char *)tmp_buf0 + (MPIU_Mirror_permutation(i, log2_comm_size) * true_extent * block_size)),
block_size, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
buf0_was_inout = 1;
send_offset = 0;
@@ -716,43 +715,43 @@ int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int r
send_offset += size;
}
- mpi_errno = MPID_Sched_send((outgoing_data + send_offset*true_extent),
+ mpi_errno = MPIR_Sched_send((outgoing_data + send_offset*true_extent),
size, datatype, peer, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_recv((incoming_data + recv_offset*true_extent),
+ mpi_errno = MPIR_Sched_recv((incoming_data + recv_offset*true_extent),
size, datatype, peer, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* always perform the reduction at recv_offset, the data at send_offset
is now our peer's responsibility */
if (rank > peer) {
/* higher ranked value so need to call op(received_data, my_data) */
- mpi_errno = MPID_Sched_reduce((incoming_data + recv_offset*true_extent),
+ mpi_errno = MPIR_Sched_reduce((incoming_data + recv_offset*true_extent),
(outgoing_data + recv_offset*true_extent),
size, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
/* lower ranked value so need to call op(my_data, received_data) */
- mpi_errno = MPID_Sched_reduce((outgoing_data + recv_offset*true_extent),
+ mpi_errno = MPIR_Sched_reduce((outgoing_data + recv_offset*true_extent),
(incoming_data + recv_offset*true_extent),
size, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
buf0_was_inout = !buf0_was_inout;
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* the next round of send/recv needs to happen within the block (of size
"size") that we just received and reduced */
send_offset = recv_offset;
}
- MPIU_Assert(size == recvcount);
+ MPIR_Assert(size == recvcount);
/* copy the reduced data to the recvbuf */
result_ptr = (char *)(buf0_was_inout ? tmp_buf0 : tmp_buf1) + recv_offset * true_extent;
- mpi_errno = MPID_Sched_copy(result_ptr, size, datatype,
+ mpi_errno = MPIR_Sched_copy(result_ptr, size, datatype,
recvbuf, size, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -768,7 +767,7 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_scatter_block_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_scatter_block_intra(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_scatter_block_intra(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int is_commutative;
@@ -818,7 +817,7 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_scatter_block_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
/* Intercommunicator Ireduce_scatter_block.
We first do an intercommunicator reduce to rank 0 on left group,
@@ -829,7 +828,7 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
int rank, root, local_size, total_count;
MPI_Aint true_extent, true_lb = 0, extent;
void *tmp_buf = NULL;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_SCHED_CHKPMEM_DECL(1);
rank = comm_ptr->rank;
@@ -843,7 +842,7 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, total_count*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, total_count*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -851,7 +850,7 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
/* first do a reduce from right group to rank 0 in left group,
then from left group to rank 0 in right group*/
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce_sched);
+ MPIR_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce_sched);
if (comm_ptr->is_low_group) {
/* reduce from right group to rank 0*/
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
@@ -884,17 +883,17 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm(comm_ptr);
+ mpi_errno = MPII_Setup_intercomm_localcomm(comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
newcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatter_sched);
+ MPIR_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatter_sched);
mpi_errno = newcomm_ptr->coll_fns->Iscatter_sched(tmp_buf, recvcount, datatype,
recvbuf, recvcount, datatype, 0,
newcomm_ptr, s);
@@ -912,40 +911,26 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_scatter_block_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ireduce_scatter_block_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_block_req(sendbuf, recvbuf, recvcount,
- datatype, op,
- comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ireduce_scatter_block_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ireduce_scatter_block_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_block_sched(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -989,11 +974,11 @@ int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf,
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -1011,27 +996,27 @@ int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr(op_ptr, mpi_errno);
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr(op_ptr, mpi_errno);
}
else if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno = ( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
@@ -1040,7 +1025,7 @@ int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf,
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE && recvcount != 0)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM && sendbuf != MPI_IN_PLACE && recvcount != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
/* TODO more checks may be appropriate (counts, in_place, etc) */
}
@@ -1050,13 +1035,13 @@ int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf,
/* ... body of routine ... */
- mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, request);
+ mpi_errno = MPID_Ireduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IREDUCE_SCATTER_BLOCK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index 262312e..42f2629 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -33,7 +33,7 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
#define FUNCNAME MPIR_Ireduce_binomial
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int comm_size, rank, is_commutative;
@@ -41,9 +41,8 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
MPI_Aint true_lb, true_extent, extent;
void *tmp_buf;
MPIR_SCHED_CHKPMEM_DECL(2);
- MPID_THREADPRIV_DECL;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
if (count == 0) return MPI_SUCCESS;
@@ -51,8 +50,15 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
rank = comm_ptr->rank;
/* set op_errno to 0. stored in perthread structure */
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = 0;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = 0;
+ }
/* Create a temporary buffer */
@@ -64,9 +70,9 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
/* I think this is the worse case, so we can avoid an assert()
* inside the for loop */
/* should be buf+{this}? */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)),
mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -75,7 +81,7 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
I have to allocate a temporary one */
if (rank != root) {
MPIR_SCHED_CHKPMEM_MALLOC(recvbuf, void *,
- count*(MPIR_MAX(extent,true_extent)),
+ count*(MPL_MAX(extent,true_extent)),
mpi_errno, "receive buffer");
recvbuf = (void *)((char*)recvbuf - true_lb);
}
@@ -83,9 +89,9 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
if ((rank != root) || (sendbuf != MPI_IN_PLACE)) {
/* could do this up front as an MPIR_Localcopy instead, but we'll defer
* it to the progress engine */
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype, recvbuf, count, datatype, s);
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype, recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -133,26 +139,26 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
source = (relrank | mask);
if (source < comm_size) {
source = (source + lroot) % comm_size;
- mpi_errno = MPID_Sched_recv(tmp_buf, count, datatype, source, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, count, datatype, source, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* The sender is above us, so the received buffer must be
the second argument (in the noncommutative case). */
if (is_commutative) {
- mpi_errno = MPID_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- mpi_errno = MPID_Sched_reduce(recvbuf, tmp_buf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(recvbuf, tmp_buf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_copy(tmp_buf, count, datatype, recvbuf, count, datatype, s);
+ mpi_errno = MPIR_Sched_copy(tmp_buf, count, datatype, recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -160,9 +166,9 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
/* I've received all that I'm going to. Send my result to
my parent */
source = ((relrank & (~ mask)) + lroot) % comm_size;
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, source, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, source, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
break;
@@ -174,16 +180,16 @@ int MPIR_Ireduce_binomial(const void *sendbuf, void *recvbuf, int count, MPI_Dat
{
if (rank == 0)
{
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else if (rank == root)
{
- mpi_errno = MPID_Sched_recv(recvbuf, count, datatype, 0, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, count, datatype, 0, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -227,7 +233,7 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_redscat_gather
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int i, j, comm_size, rank, pof2, is_commutative ATTRIBUTE((unused));
@@ -237,14 +243,14 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
int *cnts, *disps;
MPI_Aint true_lb, true_extent, extent;
MPIR_SCHED_CHKPMEM_DECL(2);
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
/* NOTE: this algorithm is currently only correct for commutative operations */
is_commutative = MPIR_Op_is_commutative(op);
- MPIU_Assert(is_commutative);
+ MPIR_Assert(is_commutative);
/* Create a temporary buffer */
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
@@ -253,9 +259,9 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
/* I think this is the worse case, so we can avoid an assert()
* inside the for loop */
/* should be buf+{this}? */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)),
mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -270,13 +276,13 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
/* If I'm not the root, then my recvbuf may not be valid, therefore
I have to allocate a temporary one */
if (rank != root) {
- MPIR_SCHED_CHKPMEM_MALLOC(recvbuf, void *, count*(MPIR_MAX(extent,true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(recvbuf, void *, count*(MPL_MAX(extent,true_extent)),
mpi_errno, "receive buffer");
recvbuf = (void *)((char*)recvbuf - true_lb);
}
if ((rank != root) || (sendbuf != MPI_IN_PLACE)) {
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -299,9 +305,9 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
if (rank < 2*rem) {
if (rank % 2 != 0) { /* odd */
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, rank-1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, rank-1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* temporarily set the rank to -1 so that this
process does not pariticipate in recursive
@@ -309,16 +315,16 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
newrank = -1;
}
else { /* even */
- mpi_errno = MPID_Sched_recv(tmp_buf, count, datatype, rank+1, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, count, datatype, rank+1, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* do the reduction on received data. */
/* This algorithm is used only for predefined ops
and predefined ops are always commutative. */
- mpi_errno = MPID_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* change the rank */
newrank = rank / 2;
@@ -335,8 +341,8 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
/* We allocate these arrays on all processes, even if newrank=-1,
because if root is one of the excluded processes, we will
need them on the root later on below. */
- MPIU_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
- MPIU_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
+ MPIR_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
+ MPIR_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
last_idx = send_idx = 0; /* suppress spurious compiler warnings */
@@ -374,26 +380,26 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
}
/* Send data from recvbuf. Recv into tmp_buf */
- mpi_errno = MPID_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
send_cnt, datatype,
dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_recv(((char *)tmp_buf + disps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_recv(((char *)tmp_buf + disps[recv_idx]*extent),
recv_cnt, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* tmp_buf contains data received in this step.
recvbuf contains data accumulated so far */
/* This algorithm is used only for predefined ops
and predefined ops are always commutative. */
- mpi_errno = MPID_Sched_reduce(((char *)tmp_buf + disps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_reduce(((char *)tmp_buf + disps[recv_idx]*extent),
((char *)recvbuf + disps[recv_idx]*extent),
recv_cnt, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* update send_idx for next iteration */
send_idx = recv_idx;
@@ -425,18 +431,18 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
for (i=1; i<pof2; i++)
disps[i] = disps[i-1] + cnts[i-1];
- mpi_errno = MPID_Sched_recv(recvbuf, cnts[0], datatype, 0, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, cnts[0], datatype, 0, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
newrank = 0;
send_idx = 0;
last_idx = 2;
}
else if (newrank == 0) { /* send */
- mpi_errno = MPID_Sched_send(recvbuf, cnts[0], datatype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, cnts[0], datatype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
newrank = -1;
}
newroot = 0;
@@ -499,18 +505,18 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
if (newdst_tree_root == newroot_tree_root) {
/* send and exit */
/* Send data from recvbuf. Recv into tmp_buf */
- mpi_errno = MPID_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)recvbuf + disps[send_idx]*extent),
send_cnt, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
break;
}
else {
/* recv and continue */
- mpi_errno = MPID_Sched_recv(((char *)recvbuf + disps[recv_idx]*extent),
+ mpi_errno = MPIR_Sched_recv(((char *)recvbuf + disps[recv_idx]*extent),
recv_cnt, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
if (newrank > newdst) send_idx = recv_idx;
@@ -522,7 +528,7 @@ int MPIR_Ireduce_redscat_gather(const void *sendbuf, void *recvbuf, int count, M
MPIR_SCHED_CHKPMEM_COMMIT(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
MPIR_SCHED_CHKPMEM_REAP(s);
@@ -533,12 +539,12 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_intra
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_intra(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int pof2, type_size, comm_size;
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
comm_size = comm_ptr->local_size;
@@ -573,20 +579,20 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_SMP
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int is_commutative;
MPI_Aint true_lb, true_extent, extent;
void *tmp_buf = NULL;
- MPID_Comm *nc;
- MPID_Comm *nrc;
+ MPIR_Comm *nc;
+ MPIR_Comm *nrc;
MPIR_SCHED_CHKPMEM_DECL(1);
if (!MPIR_CVAR_ENABLE_SMP_COLLECTIVES || !MPIR_CVAR_ENABLE_SMP_REDUCE)
MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
- MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(MPIR_Comm_is_node_aware(comm_ptr));
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
nc = comm_ptr->node_comm;
nrc = comm_ptr->node_roots_comm;
@@ -605,34 +611,34 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)),
mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
}
/* do the intranode reduce on all nodes other than the root's node */
- if (nc != NULL && MPIU_Get_intranode_rank(comm_ptr, root) == -1) {
- MPIU_Assert(nc->coll_fns && nc->coll_fns->Ireduce_sched);
+ if (nc != NULL && MPIR_Get_intranode_rank(comm_ptr, root) == -1) {
+ MPIR_Assert(nc->coll_fns && nc->coll_fns->Ireduce_sched);
mpi_errno = nc->coll_fns->Ireduce_sched(sendbuf, tmp_buf, count, datatype, op, 0, nc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* do the internode reduce to the root's node */
if (nrc != NULL) {
- MPIU_Assert(nrc->coll_fns && nrc->coll_fns->Ireduce_sched);
- if (nrc->rank != MPIU_Get_internode_rank(comm_ptr, root)) {
+ MPIR_Assert(nrc->coll_fns && nrc->coll_fns->Ireduce_sched);
+ if (nrc->rank != MPIR_Get_internode_rank(comm_ptr, root)) {
/* I am not on root's node. Use tmp_buf if we
participated in the first reduce, otherwise use sendbuf */
const void *buf = (nc == NULL ? sendbuf : tmp_buf);
mpi_errno = nrc->coll_fns->Ireduce_sched(buf, NULL, count, datatype,
- op, MPIU_Get_internode_rank(comm_ptr, root),
+ op, MPIR_Get_internode_rank(comm_ptr, root),
nrc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else { /* I am on root's node. I have not participated in the earlier reduce. */
if (comm_ptr->rank != root) {
@@ -640,10 +646,10 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
Use tmp_buf as recvbuf. */
mpi_errno = nrc->coll_fns->Ireduce_sched(sendbuf, tmp_buf, count, datatype,
- op, MPIU_Get_internode_rank(comm_ptr, root),
+ op, MPIR_Get_internode_rank(comm_ptr, root),
nrc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* point sendbuf at tmp_buf to make final intranode reduce easy */
sendbuf = tmp_buf;
@@ -652,10 +658,10 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
/* I am the root. in_place is automatically handled. */
mpi_errno = nrc->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype,
- op, MPIU_Get_internode_rank(comm_ptr, root),
+ op, MPIR_Get_internode_rank(comm_ptr, root),
nrc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* set sendbuf to MPI_IN_PLACE to make final intranode reduce easy. */
sendbuf = MPI_IN_PLACE;
@@ -664,12 +670,12 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
}
/* do the intranode reduce on the root's node */
- if (nc != NULL && MPIU_Get_intranode_rank(comm_ptr, root) != -1) {
+ if (nc != NULL && MPIR_Get_intranode_rank(comm_ptr, root) != -1) {
mpi_errno = nc->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype,
- op, MPIU_Get_intranode_rank(comm_ptr, root),
+ op, MPIR_Get_intranode_rank(comm_ptr, root),
nc, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
@@ -685,7 +691,7 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_inter
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ireduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank;
@@ -693,7 +699,7 @@ int MPIR_Ireduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Dataty
void *tmp_buf = NULL;
MPIR_SCHED_CHKPMEM_DECL(1);
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
/* Intercommunicator reduce.
Remote group does a local intracommunicator
@@ -707,9 +713,9 @@ int MPIR_Ireduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Dataty
if (root == MPI_ROOT) {
/* root receives data from rank 0 on remote group */
- mpi_errno = MPID_Sched_recv(recvbuf, count, datatype, 0, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, count, datatype, 0, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
@@ -725,26 +731,26 @@ int MPIR_Ireduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Dataty
/* I think this is the worse case, so we can avoid an assert()
* inside the for loop */
/* Should MPIR_SCHED_CHKPMEM_MALLOC do this? */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
}
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm(comm_ptr);
+ mpi_errno = MPII_Setup_intercomm_localcomm(comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
mpi_errno = MPIR_Ireduce_intra(sendbuf, tmp_buf, count, datatype, op, 0, comm_ptr->local_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (rank == 0) {
- mpi_errno = MPID_Sched_send(tmp_buf, count, datatype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(tmp_buf, count, datatype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_barrier(s);
+ mpi_errno = MPIR_Sched_barrier(s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -761,40 +767,26 @@ fn_fail:
#define FUNCNAME MPIR_Ireduce_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ireduce_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ireduce_req(sendbuf, recvbuf, count,
- datatype, op, root,
- comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ireduce_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ireduce_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -837,11 +829,11 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IREDUCE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IREDUCE);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IREDUCE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IREDUCE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -860,7 +852,7 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -869,20 +861,20 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
{
int rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr(op_ptr, mpi_errno);
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr(op_ptr, mpi_errno);
}
else if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno = ( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
@@ -891,7 +883,7 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
if (sendbuf != MPI_IN_PLACE)
MPIR_ERRTEST_USERBUFFER(sendbuf,count,datatype,mpi_errno);
@@ -915,13 +907,13 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
/* ... body of routine ... */
- mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, request);
+ mpi_errno = MPID_Ireduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IREDUCE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IREDUCE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index fb98f52..e651e4d 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -69,7 +69,7 @@ int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dataty
#define FUNCNAME MPIR_Iscan_rec_dbl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iscan_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iscan_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
MPI_Aint true_extent, true_lb, extent;
@@ -91,17 +91,17 @@ int MPIR_Iscan_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Dataty
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIR_SCHED_CHKPMEM_MALLOC(partial_scan, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "partial_scan");
+ MPIR_SCHED_CHKPMEM_MALLOC(partial_scan, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "partial_scan");
/* This eventually gets malloc()ed as a temp buffer, not added to
* any user buffers */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
/* adjust for potential negative lower bound in datatype */
partial_scan = (void *)((char*)partial_scan - true_lb);
/* need to allocate temporary buffer to store incoming data*/
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -109,16 +109,16 @@ int MPIR_Iscan_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Dataty
/* Since this is an inclusive scan, copy local contribution into
recvbuf. */
if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
if (sendbuf != MPI_IN_PLACE)
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype,
partial_scan, count, datatype, s);
else
- mpi_errno = MPID_Sched_copy(recvbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(recvbuf, count, datatype,
partial_scan, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -127,35 +127,35 @@ int MPIR_Iscan_rec_dbl(const void *sendbuf, void *recvbuf, int count, MPI_Dataty
dst = rank ^ mask;
if (dst < comm_size) {
/* Send partial_scan to dst. Recv into tmp_buf */
- mpi_errno = MPID_Sched_send(partial_scan, count, datatype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(partial_scan, count, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* sendrecv, no barrier here */
- mpi_errno = MPID_Sched_recv(tmp_buf, count, datatype, dst, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, count, datatype, dst, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
if (rank > dst) {
- mpi_errno = MPID_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
if (is_commutative) {
- mpi_errno = MPID_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tmp_buf, partial_scan, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
- mpi_errno = MPID_Sched_reduce(partial_scan, tmp_buf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(partial_scan, tmp_buf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_copy(tmp_buf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, count, datatype,
partial_scan, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
}
@@ -174,12 +174,12 @@ fn_fail:
#define FUNCNAME MPIR_Iscan_rec_dbl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank = comm_ptr->rank;
- MPID_Comm *node_comm;
- MPID_Comm *roots_comm;
+ MPIR_Comm *node_comm;
+ MPIR_Comm *roots_comm;
MPI_Aint true_extent, true_lb, extent;
void *tempbuf = NULL;
void *prefulldata = NULL;
@@ -191,7 +191,7 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
communicator in which all the nodes contain processes with
consecutive ranks. */
- if (!MPIR_Comm_is_node_consecutive(comm_ptr)) {
+ if (!MPII_Comm_is_node_consecutive(comm_ptr)) {
/* We can't use the SMP-aware algorithm, use the generic one */
return MPIR_Iscan_rec_dbl(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
}
@@ -199,29 +199,29 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
node_comm = comm_ptr->node_comm;
roots_comm = comm_ptr->node_roots_comm;
if (node_comm) {
- MPIU_Assert(node_comm->coll_fns && node_comm->coll_fns->Iscan_sched && node_comm->coll_fns->Ibcast_sched);
+ MPIR_Assert(node_comm->coll_fns && node_comm->coll_fns->Iscan_sched && node_comm->coll_fns->Ibcast_sched);
}
if (roots_comm) {
- MPIU_Assert(roots_comm->coll_fns && roots_comm->coll_fns->Iscan_sched);
+ MPIR_Assert(roots_comm->coll_fns && roots_comm->coll_fns->Iscan_sched);
}
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIR_SCHED_CHKPMEM_MALLOC(tempbuf, void *, count*(MPIR_MAX(extent, true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(tempbuf, void *, count*(MPL_MAX(extent, true_extent)),
mpi_errno, "temporary buffer");
tempbuf = (void *)((char*)tempbuf - true_lb);
/* Create prefulldata and localfulldata on local roots of all nodes */
if (comm_ptr->node_roots_comm != NULL) {
- MPIR_SCHED_CHKPMEM_MALLOC(prefulldata, void *, count*(MPIR_MAX(extent, true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(prefulldata, void *, count*(MPL_MAX(extent, true_extent)),
mpi_errno, "prefulldata for scan");
prefulldata = (void *)((char*)prefulldata - true_lb);
if (node_comm != NULL) {
- MPIR_SCHED_CHKPMEM_MALLOC(localfulldata, void *, count*(MPIR_MAX(extent, true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(localfulldata, void *, count*(MPL_MAX(extent, true_extent)),
mpi_errno, "localfulldata for scan");
localfulldata = (void *)((char*)localfulldata - true_lb);
}
@@ -232,13 +232,13 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
if (node_comm != NULL) {
mpi_errno = node_comm->coll_fns->Iscan_sched(sendbuf, recvbuf, count, datatype, op, node_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else if (sendbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(sendbuf, count, datatype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, count, datatype,
recvbuf, count, datatype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* get result from local node's last processor which
@@ -246,15 +246,15 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
localfulldata. For example, localfulldata from node 1 contains
reduced data of rank 1,2,3. */
if (roots_comm != NULL && node_comm != NULL) {
- mpi_errno = MPID_Sched_recv(localfulldata, count, datatype,
+ mpi_errno = MPIR_Sched_recv(localfulldata, count, datatype,
(node_comm->local_size - 1), node_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else if (roots_comm == NULL && node_comm != NULL && node_comm->rank == node_comm->local_size - 1) {
- mpi_errno = MPID_Sched_send(recvbuf, count, datatype, 0, node_comm, s);
+ mpi_errno = MPIR_Sched_send(recvbuf, count, datatype, 0, node_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else if (roots_comm != NULL) {
localfulldata = recvbuf;
@@ -266,22 +266,22 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
process of node 3. */
if (roots_comm != NULL) {
/* FIXME just use roots_comm->rank instead */
- int roots_rank = MPIU_Get_internode_rank(comm_ptr, rank);
- MPIU_Assert(roots_rank == roots_comm->rank);
+ int roots_rank = MPIR_Get_internode_rank(comm_ptr, rank);
+ MPIR_Assert(roots_rank == roots_comm->rank);
mpi_errno = roots_comm->coll_fns->Iscan_sched(localfulldata, prefulldata, count, datatype, op, roots_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
if (roots_rank != roots_comm->local_size-1) {
- mpi_errno = MPID_Sched_send(prefulldata, count, datatype, (roots_rank + 1), roots_comm, s);
+ mpi_errno = MPIR_Sched_send(prefulldata, count, datatype, (roots_rank + 1), roots_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
if (roots_rank != 0) {
- mpi_errno = MPID_Sched_recv(tempbuf, count, datatype, (roots_rank - 1), roots_comm, s);
+ mpi_errno = MPIR_Sched_recv(tempbuf, count, datatype, (roots_rank - 1), roots_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -291,18 +291,18 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
then we should broadcast this result in the local node, and
reduce it with recvbuf to get final result if nessesary. */
- if (MPIU_Get_internode_rank(comm_ptr, rank) != 0) {
+ if (MPIR_Get_internode_rank(comm_ptr, rank) != 0) {
/* we aren't on "node 0", so our node leader (possibly us) received
* "prefulldata" from another leader into "tempbuf" */
if (node_comm != NULL) {
mpi_errno = node_comm->coll_fns->Ibcast_sched(tempbuf, count, datatype, 0, node_comm, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* do reduce on tempbuf and recvbuf, finish scan. */
- mpi_errno = MPID_Sched_reduce(tempbuf, recvbuf, count, datatype, op, s);
+ mpi_errno = MPIR_Sched_reduce(tempbuf, recvbuf, count, datatype, op, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -318,39 +318,25 @@ fn_fail:
#define FUNCNAME MPIR_Iscan_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iscan_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iscan_req(sendbuf, recvbuf, count,
- datatype, op,
- comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Iscan_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Iscan_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Iscan_sched(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -392,11 +378,11 @@ int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dataty
MPI_Op op, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ISCAN);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ISCAN);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ISCAN);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ISCAN);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -415,30 +401,30 @@ int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dataty
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_COMM_INTRA(comm_ptr, mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr(op_ptr, mpi_errno);
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr(op_ptr, mpi_errno);
}
else if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno = ( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
@@ -457,13 +443,13 @@ int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dataty
/* ... body of routine ... */
- mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, request);
+ mpi_errno = MPID_Iscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ISCAN);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ISCAN);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/iscatter.c b/src/mpi/coll/iscatter.c
index 42be2d7..76fe9bb 100644
--- a/src/mpi/coll/iscatter.c
+++ b/src/mpi/coll/iscatter.c
@@ -31,31 +31,31 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
struct shared_state {
int sendcount;
int curr_count;
- int send_subtree_count;
+ MPI_Aint send_subtree_count;
int nbytes;
MPI_Status status;
};
-static int get_count(MPID_Comm *comm, int tag, void *state)
+static int get_count(MPIR_Comm *comm, int tag, void *state)
{
struct shared_state *ss = state;
MPIR_Get_count_impl(&ss->status, MPI_BYTE, &ss->curr_count);
return MPI_SUCCESS;
}
-static int calc_send_count_root(MPID_Comm *comm, int tag, void *state, void *state2)
+static int calc_send_count_root(MPIR_Comm *comm, int tag, void *state, void *state2)
{
struct shared_state *ss = state;
int mask = (int)(size_t)state2;
ss->send_subtree_count = ss->curr_count - ss->sendcount * mask;
return MPI_SUCCESS;
}
-static int calc_send_count_non_root(MPID_Comm *comm, int tag, void *state, void *state2)
+static int calc_send_count_non_root(MPIR_Comm *comm, int tag, void *state, void *state2)
{
struct shared_state *ss = state;
int mask = (int)(size_t)state2;
ss->send_subtree_count = ss->curr_count - ss->nbytes * mask;
return MPI_SUCCESS;
}
-static int calc_curr_count(MPID_Comm *comm, int tag, void *state)
+static int calc_curr_count(MPIR_Comm *comm, int tag, void *state)
{
struct shared_state *ss = state;
ss->curr_count -= ss->send_subtree_count;
@@ -90,7 +90,7 @@ static int calc_curr_count(MPID_Comm *comm, int tag, void *state)
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
MPI_Aint extent = 0;
@@ -131,14 +131,14 @@ int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
in the event of recvbuf=MPI_IN_PLACE on the root,
recvcount and recvtype are not valid */
MPID_Datatype_get_size_macro(sendtype, sendtype_size);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
extent*sendcount*comm_size);
ss->nbytes = sendtype_size * sendcount;
}
else {
MPID_Datatype_get_size_macro(recvtype, recvtype_size);
- MPIU_Ensure_Aint_fits_in_pointer(extent*recvcount*comm_size);
+ MPIR_Ensure_Aint_fits_in_pointer(extent*recvcount*comm_size);
ss->nbytes = recvtype_size * recvcount;
}
@@ -161,22 +161,22 @@ int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
if (recvbuf != MPI_IN_PLACE)
- mpi_errno = MPID_Sched_copy(((char *) sendbuf + extent*sendcount*rank),
+ mpi_errno = MPIR_Sched_copy(((char *) sendbuf + extent*sendcount*rank),
sendcount*(comm_size-rank), sendtype,
tmp_buf, ss->nbytes*(comm_size-rank), MPI_BYTE, s);
else
- mpi_errno = MPID_Sched_copy(((char *) sendbuf + extent*sendcount*(rank+1)),
+ mpi_errno = MPIR_Sched_copy(((char *) sendbuf + extent*sendcount*(rank+1)),
sendcount*(comm_size-rank-1), sendtype,
((char *)tmp_buf + ss->nbytes),
ss->nbytes*(comm_size-rank-1), MPI_BYTE, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount*rank, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount*rank, sendtype,
((char *) tmp_buf + ss->nbytes*(comm_size-rank)),
ss->nbytes*rank, MPI_BYTE, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
ss->curr_count = ss->nbytes*comm_size;
}
else
@@ -195,20 +195,20 @@ int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
they don't have to forward data to anyone. Others
receive data into a temporary buffer. */
if (relative_rank % 2) {
- mpi_errno = MPID_Sched_recv(recvbuf, recvcount, recvtype, src, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, recvcount, recvtype, src, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
/* the recv size is larger than what may be sent in
some cases. query amount of data actually received */
- mpi_errno = MPID_Sched_recv_status(tmp_buf, tmp_buf_size, MPI_BYTE, src, comm_ptr, &ss->status, s);
+ mpi_errno = MPIR_Sched_recv_status(tmp_buf, tmp_buf_size, MPI_BYTE, src, comm_ptr, &ss->status, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
- mpi_errno = MPID_Sched_cb(&get_count, ss, s);
+ MPIR_SCHED_BARRIER(s);
+ mpi_errno = MPIR_Sched_cb(&get_count, ss, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
break;
}
@@ -234,64 +234,64 @@ int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
* is it always true the (curr_cnt/2==sendcount*mask)? */
send_subtree_cnt = curr_cnt - sendcount * mask;
#endif
- mpi_errno = MPID_Sched_cb2(&calc_send_count_root, ss, ((void *)(size_t)mask), s);
+ mpi_errno = MPIR_Sched_cb2(&calc_send_count_root, ss, ((void *)(size_t)mask), s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* mask is also the size of this process's subtree */
- mpi_errno = MPID_Sched_send_defer(((char *)sendbuf + extent*sendcount*mask),
+ mpi_errno = MPIR_Sched_send_defer(((char *)sendbuf + extent*sendcount*mask),
&ss->send_subtree_count, sendtype, dst,
comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else
{
/* non-zero root and others */
- mpi_errno = MPID_Sched_cb2(&calc_send_count_non_root, ss, ((void *)(size_t)mask), s);
+ mpi_errno = MPIR_Sched_cb2(&calc_send_count_non_root, ss, ((void *)(size_t)mask), s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
/* mask is also the size of this process's subtree */
- mpi_errno = MPID_Sched_send_defer(((char *)tmp_buf + ss->nbytes*mask),
+ mpi_errno = MPIR_Sched_send_defer(((char *)tmp_buf + ss->nbytes*mask),
&ss->send_subtree_count, MPI_BYTE, dst,
comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
- mpi_errno = MPID_Sched_cb(&calc_curr_count, ss, s);
+ mpi_errno = MPIR_Sched_cb(&calc_curr_count, ss, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
mask >>= 1;
}
if ((rank == root) && (root == 0) && (recvbuf != MPI_IN_PLACE)) {
/* for root=0, put root's data in recvbuf if not MPI_IN_PLACE */
- mpi_errno = MPID_Sched_copy(sendbuf, sendcount, sendtype,
+ mpi_errno = MPIR_Sched_copy(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else if (!(relative_rank % 2) && (recvbuf != MPI_IN_PLACE)) {
/* for non-zero root and non-leaf nodes, copy from tmp_buf
into recvbuf */
- mpi_errno = MPID_Sched_copy(tmp_buf, ss->nbytes, MPI_BYTE,
+ mpi_errno = MPIR_Sched_copy(tmp_buf, ss->nbytes, MPI_BYTE,
recvbuf, recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
#ifdef MPID_HAS_HETERO
else { /* communicator is heterogeneous */
int position;
- MPIU_Assertp(FALSE); /* hetero case not yet implemented */
+ MPIR_Assertp(FALSE); /* hetero case not yet implemented */
if (rank == root) {
MPIR_Pack_size_impl(sendcount*comm_size, sendtype, &tmp_buf_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
/* calculate the value of nbytes, the number of bytes in packed
representation that each process receives. We can't
@@ -346,7 +346,7 @@ int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
}
else {
MPIR_Pack_size_impl(recvcount*(comm_size/2), recvtype, &tmp_buf_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
/* calculate nbytes */
position = 0;
@@ -432,7 +432,7 @@ int MPIR_Iscatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
/* Intercommunicator scatter.
For short messages, root sends to rank 0 in remote group. rank 0
@@ -447,7 +447,7 @@ int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
int i, nbytes, sendtype_size, recvtype_size;
MPI_Aint extent, true_extent, true_lb = 0;
void *tmp_buf = NULL;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_SCHED_CHKPMEM_DECL(1);
if (root == MPI_PROC_NULL) {
@@ -471,9 +471,9 @@ int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
if (nbytes < MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE) {
if (root == MPI_ROOT) {
/* root sends all data to rank 0 on remote group and returns */
- mpi_errno = MPID_Sched_send(sendbuf, sendcount*remote_size, sendtype, 0, comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendbuf, sendcount*remote_size, sendtype, 0, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
goto fn_exit;
}
else {
@@ -485,35 +485,35 @@ int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
MPIR_Type_get_true_extent_impl(recvtype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(recvtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(extent*recvcount*local_size);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(extent*recvcount*local_size);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
sendcount*remote_size*extent);
- MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, recvcount*local_size*(MPIR_MAX(extent,true_extent)),
+ MPIR_SCHED_CHKPMEM_MALLOC(tmp_buf, void *, recvcount*local_size*(MPL_MAX(extent,true_extent)),
mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
- mpi_errno = MPID_Sched_recv(tmp_buf, recvcount*local_size, recvtype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(tmp_buf, recvcount*local_size, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
/* Get the local intracommunicator */
if (!comm_ptr->local_comm)
- MPIR_Setup_intercomm_localcomm(comm_ptr);
+ MPII_Setup_intercomm_localcomm(comm_ptr);
newcomm_ptr = comm_ptr->local_comm;
/* now do the usual scatter on this intracommunicator */
- MPIU_Assert(newcomm_ptr->coll_fns != NULL);
- MPIU_Assert(newcomm_ptr->coll_fns->Iscatter_sched != NULL);
+ MPIR_Assert(newcomm_ptr->coll_fns != NULL);
+ MPIR_Assert(newcomm_ptr->coll_fns->Iscatter_sched != NULL);
mpi_errno = newcomm_ptr->coll_fns->Iscatter_sched(tmp_buf, recvcount, recvtype,
recvbuf, recvcount, recvtype,
0, newcomm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
else {
@@ -521,16 +521,16 @@ int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
if (root == MPI_ROOT) {
MPID_Datatype_get_extent_macro(sendtype, extent);
for (i = 0; i < remote_size; i++) {
- mpi_errno = MPID_Sched_send(((char *)sendbuf+sendcount*i*extent),
+ mpi_errno = MPIR_Sched_send(((char *)sendbuf+sendcount*i*extent),
sendcount, sendtype, i, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
else {
- mpi_errno = MPID_Sched_recv(recvbuf, recvcount, recvtype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
}
}
@@ -547,39 +547,25 @@ fn_fail:
#define FUNCNAME MPIR_Iscatter_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iscatter_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iscatter_req(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Iscatter_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Iscatter_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Iscatter_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -624,11 +610,11 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ISCATTER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ISCATTER);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ISCATTER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ISCATTER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -644,16 +630,16 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Datatype *sendtype_ptr, *recvtype_ptr;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ MPIR_Datatype *sendtype_ptr, *recvtype_ptr;
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
if (comm_ptr->rank == root) {
@@ -661,7 +647,7 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -684,7 +670,7 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -693,7 +679,7 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
@@ -701,7 +687,7 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -714,7 +700,7 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -730,13 +716,13 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, request);
+ mpi_errno = MPID_Iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ISCATTER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ISCATTER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/iscatterv.c b/src/mpi/coll/iscatterv.c
index 549e2f5..5107ed6 100644
--- a/src/mpi/coll/iscatterv.c
+++ b/src/mpi/coll/iscatterv.c
@@ -52,7 +52,7 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[],
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPID_Sched_t s)
+ int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int rank, comm_size;
@@ -62,10 +62,10 @@ int MPIR_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs
rank = comm_ptr->rank;
/* If I'm the root, then scatter */
- if (((comm_ptr->comm_kind == MPID_INTRACOMM) && (root == rank)) ||
- ((comm_ptr->comm_kind == MPID_INTERCOMM) && (root == MPI_ROOT)))
+ if (((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (root == rank)) ||
+ ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) && (root == MPI_ROOT)))
{
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
comm_size = comm_ptr->local_size;
else
comm_size = comm_ptr->remote_size;
@@ -77,20 +77,20 @@ int MPIR_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs
* a minimal sanity check. Maybe add a global var since we do
* loop over sendcount[] in MPI_Scatterv before calling
* this? */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf + extent);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf + extent);
for (i = 0; i < comm_size; i++) {
if (sendcounts[i]) {
- if ((comm_ptr->comm_kind == MPID_INTRACOMM) && (i == rank)) {
+ if ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (i == rank)) {
if (recvbuf != MPI_IN_PLACE) {
- mpi_errno = MPID_Sched_copy(((char *)sendbuf+displs[rank]*extent),
+ mpi_errno = MPIR_Sched_copy(((char *)sendbuf+displs[rank]*extent),
sendcounts[rank], sendtype,
recvbuf, recvcount, recvtype, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
else {
- mpi_errno = MPID_Sched_send(((char *)sendbuf+displs[i]*extent),
+ mpi_errno = MPIR_Sched_send(((char *)sendbuf+displs[i]*extent),
sendcounts[i], sendtype, i, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -101,7 +101,7 @@ int MPIR_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs
else if (root != MPI_PROC_NULL) {
/* non-root nodes, and in the intercomm. case, non-root nodes on remote side */
if (recvcount) {
- mpi_errno = MPID_Sched_recv(recvbuf, recvcount, recvtype, root, comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
@@ -118,39 +118,25 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Iscatterv_impl(const void *sendbuf, const int sendcounts[], const int displs[],
MPI_Datatype sendtype, void *recvbuf, int recvcount,
- MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
+ MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *reqp = NULL;
+ MPIR_Request *reqp = NULL;
int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iscatterv_req != NULL) {
- /* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iscatterv_req(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, &reqp);
- if (reqp) {
- *request = reqp->handle;
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- goto fn_exit;
- }
- /* --END USEREXTENSION-- */
- }
-
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Iscatterv_sched != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Iscatterv_sched != NULL);
mpi_errno = comm_ptr->coll_fns->Iscatterv_sched(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -196,11 +182,11 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
int root, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ISCATTERV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ISCATTERV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ISCATTERV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ISCATTERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -219,20 +205,20 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int i, comm_size, rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
rank = comm_ptr->rank;
comm_size = comm_ptr->local_size;
@@ -244,7 +230,7 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
}
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -277,7 +263,7 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -286,7 +272,7 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
}
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
comm_size = comm_ptr->remote_size;
@@ -296,7 +282,7 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
}
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -314,7 +300,7 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -332,13 +318,13 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
/* ... body of routine ... */
- mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, request);
+ mpi_errno = MPID_Iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ISCATTERV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ISCATTERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/nbcutil.c b/src/mpi/coll/nbcutil.c
index 080df12..e4ec34d 100644
--- a/src/mpi/coll/nbcutil.c
+++ b/src/mpi/coll/nbcutil.c
@@ -10,9 +10,9 @@
#define FUNCNAME MPIR_Sched_cb_free_buf
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Sched_cb_free_buf(MPID_Comm *comm, int tag, void *state)
+int MPIR_Sched_cb_free_buf(MPIR_Comm *comm, int tag, void *state)
{
- MPIU_Free(state);
+ MPL_free(state);
return MPI_SUCCESS;
}
diff --git a/src/mpi/coll/op_commutative.c b/src/mpi/coll/op_commutative.c
index 34d7a9e..72df322 100644
--- a/src/mpi/coll/op_commutative.c
+++ b/src/mpi/coll/op_commutative.c
@@ -54,22 +54,22 @@ Output Parameters:
@*/
int MPI_Op_commutative(MPI_Op op, int *commute)
{
- MPID_Op *op_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_OP_COMMUTATIVE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_OP_COMMUTATIVE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_OP_COMMUTATIVE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_OP_COMMUTATIVE);
- MPID_Op_get_ptr( op, op_ptr );
+ MPIR_Op_get_ptr( op, op_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -82,7 +82,7 @@ int MPI_Op_commutative(MPI_Op op, int *commute)
*commute = 1;
}
else {
- if (op_ptr->kind == MPID_OP_USER_NONCOMMUTE)
+ if (op_ptr->kind == MPIR_OP_KIND__USER_NONCOMMUTE)
*commute = 0;
else
*commute = 1;
@@ -91,7 +91,7 @@ int MPI_Op_commutative(MPI_Op op, int *commute)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_OP_COMMUTATIVE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_OP_COMMUTATIVE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/coll/op_create.c b/src/mpi/coll/op_create.c
index 416fc7a..6089172 100644
--- a/src/mpi/coll/op_create.c
+++ b/src/mpi/coll/op_create.c
@@ -25,25 +25,25 @@ int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op) __attribu
#undef MPI_Op_create
#define MPI_Op_create PMPI_Op_create
-#ifndef MPID_OP_PREALLOC
-#define MPID_OP_PREALLOC 16
+#ifndef MPIR_OP_PREALLOC
+#define MPIR_OP_PREALLOC 16
#endif
/* Preallocated op objects */
-MPID_Op MPID_Op_builtin[MPID_OP_N_BUILTIN] = { {0} };
-MPID_Op MPID_Op_direct[MPID_OP_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_Op_mem = { 0, 0, 0, 0, MPID_OP,
- sizeof(MPID_Op),
- MPID_Op_direct,
- MPID_OP_PREALLOC, };
+MPIR_Op MPIR_Op_builtin[MPIR_OP_N_BUILTIN] = { {0} };
+MPIR_Op MPIR_Op_direct[MPIR_OP_PREALLOC] = { {0} };
+MPIR_Object_alloc_t MPIR_Op_mem = { 0, 0, 0, 0, MPIR_OP,
+ sizeof(MPIR_Op),
+ MPIR_Op_direct,
+ MPIR_OP_PREALLOC, };
#ifdef HAVE_CXX_BINDING
-void MPIR_Op_set_cxx( MPI_Op op, void (*opcall)(void) )
+void MPII_Op_set_cxx( MPI_Op op, void (*opcall)(void) )
{
- MPID_Op *op_ptr;
+ MPIR_Op *op_ptr;
- MPID_Op_get_ptr( op, op_ptr );
- op_ptr->language = MPID_LANG_CXX;
+ MPIR_Op_get_ptr( op, op_ptr );
+ op_ptr->language = MPIR_LANG__CXX;
MPIR_Process.cxx_call_op_fn = (void (*)(const void *, void *, int,
MPI_Datatype, MPI_User_function *))opcall;
}
@@ -53,12 +53,12 @@ void MPIR_Op_set_cxx( MPI_Op op, void (*opcall)(void) )
MPI Standard. However, if MPI_Fint and int are not the same size (e.g.,
MPI_Fint was made 8 bytes but int is 4 bytes), then the C and Fortran
versions must be distinquished. */
-void MPIR_Op_set_fc( MPI_Op op )
+void MPII_Op_set_fc( MPI_Op op )
{
- MPID_Op *op_ptr;
+ MPIR_Op *op_ptr;
- MPID_Op_get_ptr( op, op_ptr );
- op_ptr->language = MPID_LANG_FORTRAN;
+ MPIR_Op_get_ptr( op, op_ptr );
+ op_ptr->language = MPIR_LANG__FORTRAN;
}
#endif
@@ -102,18 +102,18 @@ Output Parameters:
int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op)
{
static const char FCNAME[] = "MPI_Op_create";
- MPID_Op *op_ptr;
+ MPIR_Op *op_ptr;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_OP_CREATE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_OP_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_OP_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_OP_CREATE);
/* ... body of routine ... */
- op_ptr = (MPID_Op *)MPIU_Handle_obj_alloc( &MPID_Op_mem );
+ op_ptr = (MPIR_Op *)MPIR_Handle_obj_alloc( &MPIR_Op_mem );
/* --BEGIN ERROR HANDLING-- */
if (!op_ptr)
{
@@ -123,17 +123,21 @@ int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op)
}
/* --END ERROR HANDLING-- */
- op_ptr->language = MPID_LANG_C;
- op_ptr->kind = commute ? MPID_OP_USER : MPID_OP_USER_NONCOMMUTE;
+ op_ptr->language = MPIR_LANG__C;
+ op_ptr->kind = commute ? MPIR_OP_KIND__USER : MPIR_OP_KIND__USER_NONCOMMUTE;
op_ptr->function.c_function = (void (*)(const void *, void *,
const int *, const MPI_Datatype *))user_fn;
- MPIU_Object_set_ref(op_ptr,1);
+ MPIR_Object_set_ref(op_ptr,1);
- MPID_OBJ_PUBLISH_HANDLE(*op, op_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*op, op_ptr->handle);
+
+#ifdef MPID_Op_commit_hook
+ MPID_Op_commit_hook(op_ptr);
+#endif
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_OP_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_OP_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/op_free.c b/src/mpi/coll/op_free.c
index ccff7cc..4872e66 100644
--- a/src/mpi/coll/op_free.c
+++ b/src/mpi/coll/op_free.c
@@ -57,24 +57,24 @@ int MPI_Op_free(MPI_Op *op)
#ifdef HAVE_ERROR_CHECKING
static const char FCNAME[] = "MPI_Op_free";
#endif
- MPID_Op *op_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
int in_use;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_OP_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_OP_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_OP_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_OP_FREE);
- MPID_Op_get_ptr( *op, op_ptr );
+ MPIR_Op_get_ptr( *op, op_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
if (!mpi_errno) {
- if (op_ptr->kind < MPID_OP_USER_NONCOMMUTE) {
+ if (op_ptr->kind < MPIR_OP_KIND__USER_NONCOMMUTE) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP,
"**permop", 0 );
@@ -90,7 +90,10 @@ int MPI_Op_free(MPI_Op *op)
MPIR_Op_release_ref( op_ptr, &in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Op_mem, op_ptr );
+ MPIR_Handle_obj_free( &MPIR_Op_mem, op_ptr );
+#ifdef MPID_Op_free_hook
+ MPID_Op_free_hook(op_ptr);
+#endif
}
*op = MPI_OP_NULL;
@@ -99,7 +102,7 @@ int MPI_Op_free(MPI_Op *op)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_OP_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_OP_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/opband.c b/src/mpi/coll/opband.c
index 210dba7..d349e17 100644
--- a/src/mpi/coll/opband.c
+++ b/src/mpi/coll/opband.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/*
* In MPI-2.1, this operation is valid only for C integer, Fortran integer,
@@ -42,9 +42,15 @@ void MPIR_BAND (
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_BAND" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_BAND" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opbor.c b/src/mpi/coll/opbor.c
index 57e0001..85743bc 100644
--- a/src/mpi/coll/opbor.c
+++ b/src/mpi/coll/opbor.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/*
* In MPI-2.1, this operation is valid only for C integer, Fortran integer,
@@ -42,9 +42,15 @@ void MPIR_BOR (
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_BOR" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_BOR" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opbxor.c b/src/mpi/coll/opbxor.c
index 7edb83f..e7df1b5 100644
--- a/src/mpi/coll/opbxor.c
+++ b/src/mpi/coll/opbxor.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/*
* In MPI-2.1, this operation is valid only for C integer, Fortran integer,
@@ -42,9 +42,15 @@ void MPIR_BXOR (
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_BXOR" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_BXOR" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opland.c b/src/mpi/coll/opland.c
index 25660af..890d739 100644
--- a/src/mpi/coll/opland.c
+++ b/src/mpi/coll/opland.c
@@ -6,9 +6,9 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
#ifdef HAVE_FORTRAN_BINDING
-#include "mpi_fortlogical.h"
+#include "mpii_fortlogical.h"
#endif
/*
@@ -45,8 +45,8 @@ void MPIR_LAND (
c_type_ * restrict a = (c_type_ *)inoutvec; \
c_type_ * restrict b = (c_type_ *)invec; \
for (i=0; i<len; i++) \
- a[i] = MPIR_TO_FLOG(MPIR_LLAND(MPIR_FROM_FLOG(a[i]), \
- MPIR_FROM_FLOG(b[i]))); \
+ a[i] = MPII_TO_FLOG(MPIR_LLAND(MPII_FROM_FLOG(a[i]), \
+ MPII_FROM_FLOG(b[i]))); \
break; \
}
/* expand logicals (which may include MPI_C_BOOL, a non-Fortran type) */
@@ -73,9 +73,15 @@ void MPIR_LAND (
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_LAND" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_LAND" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/oplor.c b/src/mpi/coll/oplor.c
index c3d48f4..f334c91 100644
--- a/src/mpi/coll/oplor.c
+++ b/src/mpi/coll/oplor.c
@@ -6,9 +6,9 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
#ifdef HAVE_FORTRAN_BINDING
-#include "mpi_fortlogical.h"
+#include "mpii_fortlogical.h"
#endif
/*
@@ -45,8 +45,8 @@ void MPIR_LOR (
c_type_ * restrict a = (c_type_ *)inoutvec; \
c_type_ * restrict b = (c_type_ *)invec; \
for (i=0; i<len; i++) \
- a[i] = MPIR_TO_FLOG(MPIR_LLOR(MPIR_FROM_FLOG(a[i]), \
- MPIR_FROM_FLOG(b[i]))); \
+ a[i] = MPII_TO_FLOG(MPIR_LLOR(MPII_FROM_FLOG(a[i]), \
+ MPII_FROM_FLOG(b[i]))); \
break; \
}
/* expand logicals (which may include MPI_C_BOOL, a non-Fortran type) */
@@ -73,9 +73,15 @@ void MPIR_LOR (
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_LOR" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_LOR" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/oplxor.c b/src/mpi/coll/oplxor.c
index 0880073..7bcc44d 100644
--- a/src/mpi/coll/oplxor.c
+++ b/src/mpi/coll/oplxor.c
@@ -6,9 +6,9 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
#ifdef HAVE_FORTRAN_BINDING
-#include "mpi_fortlogical.h"
+#include "mpii_fortlogical.h"
#endif
/*
@@ -45,8 +45,8 @@ void MPIR_LXOR (
c_type_ * restrict a = (c_type_ *)inoutvec; \
c_type_ * restrict b = (c_type_ *)invec; \
for (i=0; i<len; i++) \
- a[i] = MPIR_TO_FLOG(MPIR_LLXOR(MPIR_FROM_FLOG(a[i]), \
- MPIR_FROM_FLOG(b[i]))); \
+ a[i] = MPII_TO_FLOG(MPIR_LLXOR(MPII_FROM_FLOG(a[i]), \
+ MPII_FROM_FLOG(b[i]))); \
break; \
}
/* expand logicals (which may include MPI_C_BOOL, a non-Fortran type) */
@@ -73,9 +73,15 @@ void MPIR_LXOR (
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_LXOR" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_LXOR" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opmax.c b/src/mpi/coll/opmax.c
index ec72607..7aeba8a 100644
--- a/src/mpi/coll/opmax.c
+++ b/src/mpi/coll/opmax.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/*
* In MPI-2.1, this operation is valid only for C integer, Fortran integer,
@@ -27,7 +27,7 @@ void MPIR_MAXF(
switch (*type) {
#undef MPIR_OP_TYPE_MACRO
-#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) MPIR_OP_TYPE_REDUCE_CASE(mpi_type_, c_type_, MPIR_MAX)
+#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) MPIR_OP_TYPE_REDUCE_CASE(mpi_type_, c_type_, MPL_MAX)
/* no semicolons by necessity */
MPIR_OP_TYPE_GROUP(C_INTEGER)
MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER)
@@ -39,9 +39,15 @@ void MPIR_MAXF(
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_MAX" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_MAX" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opmaxloc.c b/src/mpi/coll/opmaxloc.c
index 52b1f70..123a2d6 100644
--- a/src/mpi/coll/opmaxloc.c
+++ b/src/mpi/coll/opmaxloc.c
@@ -53,7 +53,7 @@ typedef struct MPIR_longdoubleint_loctype {
a[i].value = b[i].value; \
a[i].loc = b[i].loc; \
} else if (a[i].value <= b[i].value) \
- a[i].loc = MPIR_MIN(a[i].loc,b[i].loc); \
+ a[i].loc = MPL_MIN(a[i].loc,b[i].loc); \
} \
} \
break
@@ -66,7 +66,7 @@ typedef struct MPIR_longdoubleint_loctype {
a[i] = b[i]; \
a[i+1] = b[i+1]; \
} else if (a[i] <= b[i]) \
- a[i+1] = MPIR_MIN(a[i+1],b[i+1]); \
+ a[i+1] = MPL_MIN(a[i+1],b[i+1]); \
} \
} \
break
@@ -112,10 +112,16 @@ void MPIR_MAXLOC(
#endif
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
MPIR_ERR_SET1(mpi_errno, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_MAXLOC" );
- MPID_THREADPRIV_FIELD(op_errno) = mpi_errno;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = mpi_errno;
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opmin.c b/src/mpi/coll/opmin.c
index 7634f07..be1af55 100644
--- a/src/mpi/coll/opmin.c
+++ b/src/mpi/coll/opmin.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/*
* In MPI-2.1, this operation is valid only for C integer, Fortran integer,
@@ -26,7 +26,7 @@ void MPIR_MINF (
switch (*type) {
#undef MPIR_OP_TYPE_MACRO
-#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) MPIR_OP_TYPE_REDUCE_CASE(mpi_type_, c_type_, MPIR_MIN)
+#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) MPIR_OP_TYPE_REDUCE_CASE(mpi_type_, c_type_, MPL_MIN)
/* no semicolons by necessity */
MPIR_OP_TYPE_GROUP(C_INTEGER)
MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER)
@@ -38,9 +38,15 @@ void MPIR_MINF (
#undef MPIR_OP_TYPE_MACRO
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_MIN" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_MIN" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opminloc.c b/src/mpi/coll/opminloc.c
index 1c934e9..94d0537 100644
--- a/src/mpi/coll/opminloc.c
+++ b/src/mpi/coll/opminloc.c
@@ -53,7 +53,7 @@ typedef struct MPIR_longdoubleint_loctype {
a[i].value = b[i].value; \
a[i].loc = b[i].loc; \
} else if (a[i].value >= b[i].value) \
- a[i].loc = MPIR_MIN(a[i].loc,b[i].loc); \
+ a[i].loc = MPL_MIN(a[i].loc,b[i].loc); \
} \
} \
break
@@ -66,7 +66,7 @@ typedef struct MPIR_longdoubleint_loctype {
a[i] = b[i]; \
a[i+1] = b[i+1]; \
} else if (a[i] >= b[i]) \
- a[i+1] = MPIR_MIN(a[i+1],b[i+1]); \
+ a[i+1] = MPL_MIN(a[i+1],b[i+1]); \
} \
} \
break
@@ -111,10 +111,16 @@ void MPIR_MINLOC(
#endif
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
MPIR_ERR_SET1(mpi_errno, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_MINLOC" );
- MPID_THREADPRIV_FIELD(op_errno) = mpi_errno;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = mpi_errno;
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opprod.c b/src/mpi/coll/opprod.c
index 38b363f..54d9d57 100644
--- a/src/mpi/coll/opprod.c
+++ b/src/mpi/coll/opprod.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/*
* In MPI-2.1, this operation is valid only for C integer, Fortran integer,
@@ -62,9 +62,15 @@ void MPIR_PROD (
#define MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_PROD" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_PROD" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/opsum.c b/src/mpi/coll/opsum.c
index c500da7..0f47afd 100644
--- a/src/mpi/coll/opsum.c
+++ b/src/mpi/coll/opsum.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/*
* In MPI-2.1, this operation is valid only for C integer, Fortran integer,
@@ -61,9 +61,15 @@ void MPIR_SUM (
#define MPIR_OP_C_COMPLEX_TYPE_MACRO(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
/* --BEGIN ERROR HANDLING-- */
default: {
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_SUM" );
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OP, "**opundefined","**opundefined %s", "MPI_SUM" );
+ }
break;
}
/* --END ERROR HANDLING-- */
diff --git a/src/mpi/coll/red_scat.c b/src/mpi/coll/red_scat.c
index bf5d6c1..92f2625 100644
--- a/src/mpi/coll/red_scat.c
+++ b/src/mpi/coll/red_scat.c
@@ -56,7 +56,7 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int MPIR_Reduce_scatter_noncomm(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -73,7 +73,7 @@ static int MPIR_Reduce_scatter_noncomm(const void *sendbuf, void *recvbuf, const
void *tmp_buf0;
void *tmp_buf1;
void *result_ptr;
- MPIU_CHKLMEM_DECL(3);
+ MPIR_CHKLMEM_DECL(3);
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
@@ -85,10 +85,10 @@ static int MPIR_Reduce_scatter_noncomm(const void *sendbuf, void *recvbuf, const
}
/* begin error checking */
- MPIU_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
+ MPIR_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
for (i = 0; i < (comm_size - 1); ++i) {
- MPIU_Assert(recvcounts[i] == recvcounts[i+1]);
+ MPIR_Assert(recvcounts[i] == recvcounts[i+1]);
}
/* end error checking */
@@ -96,8 +96,8 @@ static int MPIR_Reduce_scatter_noncomm(const void *sendbuf, void *recvbuf, const
block_size = recvcounts[0];
total_count = block_size * comm_size;
- MPIU_CHKLMEM_MALLOC(tmp_buf0, void *, true_extent * total_count, mpi_errno, "tmp_buf0");
- MPIU_CHKLMEM_MALLOC(tmp_buf1, void *, true_extent * total_count, mpi_errno, "tmp_buf1");
+ MPIR_CHKLMEM_MALLOC(tmp_buf0, void *, true_extent * total_count, mpi_errno, "tmp_buf0");
+ MPIR_CHKLMEM_MALLOC(tmp_buf1, void *, true_extent * total_count, mpi_errno, "tmp_buf1");
/* adjust for potential negative lower bound in datatype */
tmp_buf0 = (void *)((char*)tmp_buf0 - true_lb);
tmp_buf1 = (void *)((char*)tmp_buf1 - true_lb);
@@ -167,7 +167,7 @@ static int MPIR_Reduce_scatter_noncomm(const void *sendbuf, void *recvbuf, const
send_offset = recv_offset;
}
- MPIU_Assert(size == recvcounts[rank]);
+ MPIR_Assert(size == recvcounts[rank]);
/* copy the reduced data to the recvbuf */
result_ptr = (char *)(buf0_was_inout ? tmp_buf0 : tmp_buf1) + recv_offset * true_extent;
@@ -176,7 +176,7 @@ static int MPIR_Reduce_scatter_noncomm(const void *sendbuf, void *recvbuf, const
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -240,7 +240,7 @@ fn_fail:
/* not declared static because a machine-specific function may call this one in some cases */
int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int rank, comm_size, i;
MPI_Aint extent, true_extent, true_lb;
@@ -255,16 +255,22 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
int pof2, old_i, newrank, received;
MPI_Datatype sendtype, recvtype;
int nprocs_completed, tmp_mask, tree_root, is_commutative;
- MPID_Op *op_ptr;
- MPID_THREADPRIV_DECL;
- MPIU_CHKLMEM_DECL(5);
+ MPIR_Op *op_ptr;
+ MPIR_CHKLMEM_DECL(5);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
/* set op_errno to 0. stored in perthread structure */
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = 0;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = 0;
+ }
MPID_Datatype_get_extent_macro(datatype, extent);
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
@@ -273,14 +279,14 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
is_commutative = 1;
}
else {
- MPID_Op_get_ptr(op, op_ptr);
- if (op_ptr->kind == MPID_OP_USER_NONCOMMUTE)
+ MPIR_Op_get_ptr(op, op_ptr);
+ if (op_ptr->kind == MPIR_OP_KIND__USER_NONCOMMUTE)
is_commutative = 0;
else
is_commutative = 1;
}
- MPIU_CHKLMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
+ MPIR_CHKLMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
total_count = 0;
for (i=0; i<comm_size; i++) {
@@ -295,24 +301,21 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
MPID_Datatype_get_size_macro(datatype, type_size);
nbytes = total_count * type_size;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* total_count*extent eventually gets malloced. it isn't added to
* a user-passed in buffer */
- MPIU_Ensure_Aint_fits_in_pointer(total_count * MPIR_MAX(true_extent, extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count * MPL_MAX(true_extent, extent));
if ((is_commutative) && (nbytes < MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE)) {
/* commutative and short. use recursive halving algorithm */
/* allocate temp. buffer to receive incoming data */
- MPIU_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results because recvbuf may not be big enough */
- MPIU_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
@@ -386,8 +389,8 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
have their result calculated by the process to their
right (rank+1). */
- MPIU_CHKLMEM_MALLOC(newcnts, int *, pof2*sizeof(int), mpi_errno, "newcnts");
- MPIU_CHKLMEM_MALLOC(newdisps, int *, pof2*sizeof(int), mpi_errno, "newdisps");
+ MPIR_CHKLMEM_MALLOC(newcnts, int *, pof2*sizeof(int), mpi_errno, "newcnts");
+ MPIR_CHKLMEM_MALLOC(newdisps, int *, pof2*sizeof(int), mpi_errno, "newdisps");
for (i=0; i<pof2; i++) {
/* what does i map to in the old ranking? */
@@ -539,7 +542,7 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
}
/* allocate temporary buffer to store incoming data */
- MPIU_CHKLMEM_MALLOC(tmp_recvbuf, void *, recvcounts[rank]*(MPIR_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
+ MPIR_CHKLMEM_MALLOC(tmp_recvbuf, void *, recvcounts[rank]*(MPL_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
@@ -652,13 +655,13 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
/* noncommutative and (non-pof2 or block irregular), use recursive doubling. */
/* need to allocate temporary buffer to receive incoming data*/
- MPIU_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results */
- MPIU_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
@@ -829,10 +832,13 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
mpi_errno = MPIR_Reduce_local_impl(
tmp_recvbuf, tmp_results, blklens[0],
datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
mpi_errno = MPIR_Reduce_local_impl(
((char *)tmp_recvbuf + dis[1]*extent),
((char *)tmp_results + dis[1]*extent),
blklens[1], datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
else {
@@ -840,10 +846,13 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
mpi_errno = MPIR_Reduce_local_impl(
tmp_results, tmp_recvbuf, blklens[0],
datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
mpi_errno = MPIR_Reduce_local_impl(
((char *)tmp_results + dis[1]*extent),
((char *)tmp_recvbuf + dis[1]*extent),
blklens[1], datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
/* copy result back into tmp_results */
mpi_errno = MPIR_Localcopy(tmp_recvbuf, 1, recvtype,
@@ -868,13 +877,18 @@ int MPIR_Reduce_scatter_intra(const void *sendbuf, void *recvbuf, const int recv
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
-
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
- if (MPID_THREADPRIV_FIELD(op_errno))
- mpi_errno = MPID_THREADPRIV_FIELD(op_errno);
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ if (per_thread->op_errno)
+ mpi_errno = per_thread->op_errno;
+ }
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -893,7 +907,7 @@ fn_fail:
/* not declared static because a machine-specific function may call this one in some cases */
int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
/* Intercommunicator Reduce_scatter.
@@ -907,8 +921,8 @@ int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recv
MPI_Aint true_extent, true_lb = 0, extent;
void *tmp_buf=NULL;
int *disps=NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_CHKLMEM_DECL(2);
rank = comm_ptr->rank;
local_size = comm_ptr->local_size;
@@ -920,7 +934,7 @@ int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recv
/* In each group, rank 0 allocates a temp. buffer for the
reduce */
- MPIU_CHKLMEM_MALLOC(disps, int *, local_size*sizeof(int), mpi_errno, "disps");
+ MPIR_CHKLMEM_MALLOC(disps, int *, local_size*sizeof(int), mpi_errno, "disps");
total_count = 0;
for (i=0; i<local_size; i++) {
@@ -931,7 +945,7 @@ int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recv
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, total_count*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, total_count*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -988,7 +1002,7 @@ int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recv
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -1004,7 +1018,7 @@ int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recv
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -1024,11 +1038,11 @@ int MPIR_Reduce_scatter_inter(const void *sendbuf, void *recvbuf, const int recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Reduce_scatter_intra(sendbuf, recvbuf, recvcounts,
datatype, op, comm_ptr, errflag);
@@ -1055,7 +1069,7 @@ int MPIR_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Reduce_scatter_impl(const void *sendbuf, void *recvbuf, const int recvcounts[],
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -1119,14 +1133,14 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_REDUCE_SCATTER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_REDUCE_SCATTER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -1140,18 +1154,18 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
- MPID_Op *op_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
int i, size, sum;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
size = comm_ptr->local_size;
@@ -1166,14 +1180,14 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcounts[comm_ptr->rank], mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sum, mpi_errno);
} else if (sendbuf != MPI_IN_PLACE && sum != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
@@ -1183,8 +1197,8 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
MPIR_ERRTEST_OP(op, mpi_errno);
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
}
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno =
@@ -1198,14 +1212,14 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
/* ... body of routine ... */
- mpi_errno = MPIR_Reduce_scatter_impl(sendbuf, recvbuf, recvcounts,
- datatype, op, comm_ptr, &errflag);
+ mpi_errno = MPID_Reduce_scatter(sendbuf, recvbuf, recvcounts,
+ datatype, op, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_REDUCE_SCATTER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/red_scat_block.c b/src/mpi/coll/red_scat_block.c
index a937c38..1a05bb5 100644
--- a/src/mpi/coll/red_scat_block.c
+++ b/src/mpi/coll/red_scat_block.c
@@ -52,7 +52,7 @@ static int MPIR_Reduce_scatter_block_noncomm (
int recvcount,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int mpi_errno = MPI_SUCCESS;
@@ -69,7 +69,7 @@ static int MPIR_Reduce_scatter_block_noncomm (
void *tmp_buf0;
void *tmp_buf1;
void *result_ptr;
- MPIU_CHKLMEM_DECL(3);
+ MPIR_CHKLMEM_DECL(3);
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
@@ -81,15 +81,15 @@ static int MPIR_Reduce_scatter_block_noncomm (
}
/* begin error checking */
- MPIU_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
+ MPIR_Assert(pof2 == comm_size); /* FIXME this version only works for power of 2 procs */
/* end error checking */
/* size of a block (count of datatype per block, NOT bytes per block) */
block_size = recvcount;
total_count = block_size * comm_size;
- MPIU_CHKLMEM_MALLOC(tmp_buf0, void *, true_extent * total_count, mpi_errno, "tmp_buf0");
- MPIU_CHKLMEM_MALLOC(tmp_buf1, void *, true_extent * total_count, mpi_errno, "tmp_buf1");
+ MPIR_CHKLMEM_MALLOC(tmp_buf0, void *, true_extent * total_count, mpi_errno, "tmp_buf0");
+ MPIR_CHKLMEM_MALLOC(tmp_buf1, void *, true_extent * total_count, mpi_errno, "tmp_buf1");
/* adjust for potential negative lower bound in datatype */
tmp_buf0 = (void *)((char*)tmp_buf0 - true_lb);
tmp_buf1 = (void *)((char*)tmp_buf1 - true_lb);
@@ -159,7 +159,7 @@ static int MPIR_Reduce_scatter_block_noncomm (
send_offset = recv_offset;
}
- MPIU_Assert(size == recvcount);
+ MPIR_Assert(size == recvcount);
/* copy the reduced data to the recvbuf */
result_ptr = (char *)(buf0_was_inout ? tmp_buf0 : tmp_buf1) + recv_offset * true_extent;
@@ -168,7 +168,7 @@ static int MPIR_Reduce_scatter_block_noncomm (
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -239,7 +239,7 @@ int MPIR_Reduce_scatter_block_intra (
int recvcount,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int rank, comm_size, i;
@@ -255,16 +255,22 @@ int MPIR_Reduce_scatter_block_intra (
int pof2, old_i, newrank, received;
MPI_Datatype sendtype, recvtype;
int nprocs_completed, tmp_mask, tree_root, is_commutative;
- MPID_Op *op_ptr;
- MPID_THREADPRIV_DECL;
- MPIU_CHKLMEM_DECL(5);
+ MPIR_Op *op_ptr;
+ MPIR_CHKLMEM_DECL(5);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
/* set op_errno to 0. stored in perthread structure */
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = 0;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = 0;
+ }
if (recvcount == 0) {
goto fn_exit;
@@ -277,14 +283,14 @@ int MPIR_Reduce_scatter_block_intra (
is_commutative = 1;
}
else {
- MPID_Op_get_ptr(op, op_ptr);
- if (op_ptr->kind == MPID_OP_USER_NONCOMMUTE)
+ MPIR_Op_get_ptr(op, op_ptr);
+ if (op_ptr->kind == MPIR_OP_KIND__USER_NONCOMMUTE)
is_commutative = 0;
else
is_commutative = 1;
}
- MPIU_CHKLMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
+ MPIR_CHKLMEM_MALLOC(disps, int *, comm_size * sizeof(int), mpi_errno, "disps");
total_count = comm_size*recvcount;
for (i=0; i<comm_size; i++) {
@@ -294,24 +300,21 @@ int MPIR_Reduce_scatter_block_intra (
MPID_Datatype_get_size_macro(datatype, type_size);
nbytes = total_count * type_size;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* total_count*extent eventually gets malloced. it isn't added to
* a user-passed in buffer */
- MPIU_Ensure_Aint_fits_in_pointer(total_count * MPIR_MAX(true_extent, extent));
+ MPIR_Ensure_Aint_fits_in_pointer(total_count * MPL_MAX(true_extent, extent));
if ((is_commutative) && (nbytes < MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE)) {
/* commutative and short. use recursive halving algorithm */
/* allocate temp. buffer to receive incoming data */
- MPIU_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results because recvbuf may not be big enough */
- MPIU_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
@@ -385,8 +388,8 @@ int MPIR_Reduce_scatter_block_intra (
have their result calculated by the process to their
right (rank+1). */
- MPIU_CHKLMEM_MALLOC(newcnts, int *, pof2*sizeof(int), mpi_errno, "newcnts");
- MPIU_CHKLMEM_MALLOC(newdisps, int *, pof2*sizeof(int), mpi_errno, "newdisps");
+ MPIR_CHKLMEM_MALLOC(newcnts, int *, pof2*sizeof(int), mpi_errno, "newcnts");
+ MPIR_CHKLMEM_MALLOC(newdisps, int *, pof2*sizeof(int), mpi_errno, "newdisps");
for (i=0; i<pof2; i++) {
/* what does i map to in the old ranking? */
@@ -525,7 +528,7 @@ int MPIR_Reduce_scatter_block_intra (
}
/* allocate temporary buffer to store incoming data */
- MPIU_CHKLMEM_MALLOC(tmp_recvbuf, void *, recvcount*(MPIR_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
+ MPIR_CHKLMEM_MALLOC(tmp_recvbuf, void *, recvcount*(MPL_MAX(true_extent,extent))+1, mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
@@ -627,13 +630,13 @@ int MPIR_Reduce_scatter_block_intra (
/* noncommutative and non-pof2, use recursive doubling. */
/* need to allocate temporary buffer to receive incoming data*/
- MPIU_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
+ MPIR_CHKLMEM_MALLOC(tmp_recvbuf, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_recvbuf");
/* adjust for potential negative lower bound in datatype */
tmp_recvbuf = (void *)((char*)tmp_recvbuf - true_lb);
/* need to allocate another temporary buffer to accumulate
results */
- MPIU_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPIR_MAX(true_extent,extent)), mpi_errno, "tmp_results");
+ MPIR_CHKLMEM_MALLOC(tmp_results, void *, total_count*(MPL_MAX(true_extent,extent)), mpi_errno, "tmp_results");
/* adjust for potential negative lower bound in datatype */
tmp_results = (void *)((char*)tmp_results - true_lb);
@@ -803,19 +806,26 @@ int MPIR_Reduce_scatter_block_intra (
mpi_errno = MPIR_Reduce_local_impl(
tmp_recvbuf, tmp_results, blklens[0],
datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
mpi_errno = MPIR_Reduce_local_impl(
((char *)tmp_recvbuf + dis[1]*extent),
((char *)tmp_results + dis[1]*extent),
blklens[1], datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
mpi_errno = MPIR_Reduce_local_impl(
tmp_results, tmp_recvbuf, blklens[0],
datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
mpi_errno = MPIR_Reduce_local_impl(
((char *)tmp_results + dis[1]*extent),
((char *)tmp_recvbuf + dis[1]*extent),
blklens[1], datatype, op);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
/* copy result back into tmp_results */
mpi_errno = MPIR_Localcopy(tmp_recvbuf, 1, recvtype,
tmp_results, 1, recvtype);
@@ -839,13 +849,18 @@ int MPIR_Reduce_scatter_block_intra (
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
-
- if (MPID_THREADPRIV_FIELD(op_errno))
- mpi_errno = MPID_THREADPRIV_FIELD(op_errno);
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ if (per_thread->op_errno)
+ mpi_errno = per_thread->op_errno;
+ }
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
@@ -871,7 +886,7 @@ int MPIR_Reduce_scatter_block_inter (
int recvcount,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag )
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag )
{
/* Intercommunicator Reduce_scatter_block.
We first do an intercommunicator reduce to rank 0 on left group,
@@ -883,8 +898,8 @@ int MPIR_Reduce_scatter_block_inter (
int mpi_errno_ret = MPI_SUCCESS;
MPI_Aint true_extent, true_lb = 0, extent;
void *tmp_buf=NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_CHKLMEM_DECL(1);
rank = comm_ptr->rank;
local_size = comm_ptr->local_size;
@@ -898,7 +913,7 @@ int MPIR_Reduce_scatter_block_inter (
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, total_count*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, total_count*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -955,11 +970,11 @@ int MPIR_Reduce_scatter_block_inter (
/* Get the local intracommunicator */
if (!comm_ptr->local_comm)
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
newcomm_ptr = comm_ptr->local_comm;
- mpi_errno = MPIR_Scatter_impl(tmp_buf, recvcount, datatype, recvbuf,
+ mpi_errno = MPID_Scatter(tmp_buf, recvcount, datatype, recvbuf,
recvcount, datatype, 0, newcomm_ptr, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -969,7 +984,7 @@ int MPIR_Reduce_scatter_block_inter (
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -992,11 +1007,11 @@ int MPIR_Reduce_scatter_block_inter (
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
int recvcount, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Reduce_scatter_block_intra(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -1023,7 +1038,7 @@ int MPIR_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Reduce_scatter_block_impl(const void *sendbuf, void *recvbuf,
int recvcount, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -1033,7 +1048,7 @@ int MPIR_Reduce_scatter_block_impl(const void *sendbuf, void *recvbuf,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* --END USEREXTENSION-- */
} else {
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Reduce_scatter_block_intra(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -1091,14 +1106,14 @@ int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_REDUCE_SCATTER_BLOCK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_REDUCE_SCATTER_BLOCK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -1112,17 +1127,17 @@ int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
- MPID_Op *op_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_COUNT(recvcount,mpi_errno);
@@ -1130,14 +1145,14 @@ int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, recvcount, mpi_errno);
} else if (sendbuf != MPI_IN_PLACE && recvcount != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
@@ -1149,8 +1164,8 @@ int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
}
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno =
@@ -1164,14 +1179,14 @@ int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
/* ... body of routine ... */
- mpi_errno = MPIR_Reduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ mpi_errno = MPID_Reduce_scatter_block(sendbuf, recvbuf, recvcount,
datatype, op, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_REDUCE_SCATTER_BLOCK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/reduce.c b/src/mpi/coll/reduce.c
index aaeffa3..717860c 100644
--- a/src/mpi/coll/reduce.c
+++ b/src/mpi/coll/reduce.c
@@ -83,7 +83,7 @@ static int MPIR_Reduce_binomial (
MPI_Datatype datatype,
MPI_Op op,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int mpi_errno = MPI_SUCCESS;
@@ -93,7 +93,7 @@ static int MPIR_Reduce_binomial (
int mask, relrank, source, lroot;
MPI_Aint true_lb, true_extent, extent;
void *tmp_buf;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
if (count == 0) return MPI_SUCCESS;
@@ -110,9 +110,9 @@ static int MPIR_Reduce_binomial (
/* I think this is the worse case, so we can avoid an assert()
* inside the for loop */
/* should be buf+{this}? */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)),
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)),
mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -120,8 +120,8 @@ static int MPIR_Reduce_binomial (
/* If I'm not the root, then my recvbuf may not be valid, therefore
I have to allocate a temporary one */
if (rank != root) {
- MPIU_CHKLMEM_MALLOC(recvbuf, void *,
- count*(MPIR_MAX(extent,true_extent)),
+ MPIR_CHKLMEM_MALLOC(recvbuf, void *,
+ count*(MPL_MAX(extent,true_extent)),
mpi_errno, "receive buffer");
recvbuf = (void *)((char*)recvbuf - true_lb);
}
@@ -241,7 +241,7 @@ static int MPIR_Reduce_binomial (
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -289,7 +289,7 @@ static int MPIR_Reduce_redscat_gather (
MPI_Datatype datatype,
MPI_Op op,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int mpi_errno = MPI_SUCCESS;
@@ -301,15 +301,21 @@ static int MPIR_Reduce_redscat_gather (
MPI_Aint true_lb, true_extent, extent;
void *tmp_buf;
- MPIU_CHKLMEM_DECL(4);
- MPID_THREADPRIV_DECL;
+ MPIR_CHKLMEM_DECL(4);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
/* set op_errno to 0. stored in perthread structure */
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = 0;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = 0;
+ }
/* Create a temporary buffer */
@@ -319,9 +325,9 @@ static int MPIR_Reduce_redscat_gather (
/* I think this is the worse case, so we can avoid an assert()
* inside the for loop */
/* should be buf+{this}? */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)),
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)),
mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -329,8 +335,8 @@ static int MPIR_Reduce_redscat_gather (
/* If I'm not the root, then my recvbuf may not be valid, therefore
I have to allocate a temporary one */
if (rank != root) {
- MPIU_CHKLMEM_MALLOC(recvbuf, void *,
- count*(MPIR_MAX(extent,true_extent)),
+ MPIR_CHKLMEM_MALLOC(recvbuf, void *,
+ count*(MPL_MAX(extent,true_extent)),
mpi_errno, "receive buffer");
recvbuf = (void *)((char*)recvbuf - true_lb);
}
@@ -414,8 +420,8 @@ static int MPIR_Reduce_redscat_gather (
/* We allocate these arrays on all processes, even if newrank=-1,
because if root is one of the excluded processes, we will
need them on the root later on below. */
- MPIU_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
- MPIU_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
+ MPIR_CHKLMEM_MALLOC(cnts, int *, pof2*sizeof(int), mpi_errno, "counts");
+ MPIR_CHKLMEM_MALLOC(disps, int *, pof2*sizeof(int), mpi_errno, "displacements");
if (newrank != -1) {
for (i=0; i<(pof2-1); i++)
@@ -634,14 +640,22 @@ static int MPIR_Reduce_redscat_gather (
/* FIXME does this need to be checked after each uop invocation for
predefined operators? */
/* --BEGIN ERROR HANDLING-- */
- if (MPID_THREADPRIV_FIELD(op_errno)) {
- mpi_errno = MPID_THREADPRIV_FIELD(op_errno);
- goto fn_fail;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ if (per_thread->op_errno) {
+ mpi_errno = per_thread->op_errno;
+ goto fn_fail;
+ }
}
/* --END ERROR HANDLING-- */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -719,27 +733,25 @@ int MPIR_Reduce_intra (
MPI_Datatype datatype,
MPI_Op op,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int mpi_errno = MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
int comm_size, is_commutative, type_size, pof2;
int nbytes = 0;
- MPID_Op *op_ptr;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Op *op_ptr;
+ MPIR_CHKLMEM_DECL(1);
if (count == 0) return MPI_SUCCESS;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
if (MPIR_CVAR_ENABLE_SMP_COLLECTIVES && MPIR_CVAR_ENABLE_SMP_REDUCE) {
/* is the op commutative? We do SMP optimizations only if it is. */
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN)
is_commutative = 1;
else {
- MPID_Op_get_ptr(op, op_ptr);
- is_commutative = (op_ptr->kind == MPID_OP_USER_NONCOMMUTE) ? 0 : 1;
+ MPIR_Op_get_ptr(op, op_ptr);
+ is_commutative = (op_ptr->kind == MPIR_OP_KIND__USER_NONCOMMUTE) ? 0 : 1;
}
MPID_Datatype_get_size_macro(datatype, type_size);
@@ -756,9 +768,9 @@ int MPIR_Reduce_intra (
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)),
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)),
mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -766,8 +778,8 @@ int MPIR_Reduce_intra (
/* do the intranode reduce on all nodes other than the root's node */
if (comm_ptr->node_comm != NULL &&
- MPIU_Get_intranode_rank(comm_ptr, root) == -1) {
- mpi_errno = MPIR_Reduce_impl(sendbuf, tmp_buf, count, datatype,
+ MPIR_Get_intranode_rank(comm_ptr, root) == -1) {
+ mpi_errno = MPID_Reduce(sendbuf, tmp_buf, count, datatype,
op, 0, comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -779,12 +791,12 @@ int MPIR_Reduce_intra (
/* do the internode reduce to the root's node */
if (comm_ptr->node_roots_comm != NULL) {
- if (comm_ptr->node_roots_comm->rank != MPIU_Get_internode_rank(comm_ptr, root)) {
+ if (comm_ptr->node_roots_comm->rank != MPIR_Get_internode_rank(comm_ptr, root)) {
/* I am not on root's node. Use tmp_buf if we
participated in the first reduce, otherwise use sendbuf */
const void *buf = (comm_ptr->node_comm == NULL ? sendbuf : tmp_buf);
- mpi_errno = MPIR_Reduce_impl(buf, NULL, count, datatype,
- op, MPIU_Get_internode_rank(comm_ptr, root),
+ mpi_errno = MPID_Reduce(buf, NULL, count, datatype,
+ op, MPIR_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -798,8 +810,8 @@ int MPIR_Reduce_intra (
/* I am not the root though. I don't have a valid recvbuf.
Use tmp_buf as recvbuf. */
- mpi_errno = MPIR_Reduce_impl(sendbuf, tmp_buf, count, datatype,
- op, MPIU_Get_internode_rank(comm_ptr, root),
+ mpi_errno = MPID_Reduce(sendbuf, tmp_buf, count, datatype,
+ op, MPIR_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -814,8 +826,8 @@ int MPIR_Reduce_intra (
else {
/* I am the root. in_place is automatically handled. */
- mpi_errno = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype,
- op, MPIU_Get_internode_rank(comm_ptr, root),
+ mpi_errno = MPID_Reduce(sendbuf, recvbuf, count, datatype,
+ op, MPIR_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -833,9 +845,9 @@ int MPIR_Reduce_intra (
/* do the intranode reduce on the root's node */
if (comm_ptr->node_comm != NULL &&
- MPIU_Get_intranode_rank(comm_ptr, root) != -1) {
- mpi_errno = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype,
- op, MPIU_Get_intranode_rank(comm_ptr, root),
+ MPIR_Get_intranode_rank(comm_ptr, root) != -1) {
+ mpi_errno = MPID_Reduce(sendbuf, recvbuf, count, datatype,
+ op, MPIR_Get_intranode_rank(comm_ptr, root),
comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -882,10 +894,7 @@ int MPIR_Reduce_intra (
fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
-
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -910,7 +919,7 @@ int MPIR_Reduce_inter (
MPI_Datatype datatype,
MPI_Op op,
int root,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
/* Intercommunicator reduce.
@@ -925,17 +934,14 @@ int MPIR_Reduce_inter (
MPI_Status status;
MPI_Aint true_extent, true_lb, extent;
void *tmp_buf=NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_CHKLMEM_DECL(1);
if (root == MPI_PROC_NULL) {
/* local processes other than root do nothing */
return MPI_SUCCESS;
}
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
-
if (root == MPI_ROOT) {
/* root receives data from rank 0 on remote group */
mpi_errno = MPIC_Recv(recvbuf, count, datatype, 0,
@@ -960,16 +966,16 @@ int MPIR_Reduce_inter (
MPID_Datatype_get_extent_macro(datatype, extent);
/* I think this is the worse case, so we can avoid an assert()
* inside the for loop */
- /* Should MPIU_CHKLMEM_MALLOC do this? */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
+ /* Should MPIR_CHKLMEM_MALLOC do this? */
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "temporary buffer");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
}
/* Get the local intracommunicator */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -999,8 +1005,7 @@ int MPIR_Reduce_inter (
}
fn_exit:
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -1021,11 +1026,11 @@ int MPIR_Reduce_inter (
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Reduce_intra(sendbuf, recvbuf, count, datatype,
op, root, comm_ptr, errflag);
@@ -1052,7 +1057,7 @@ int MPIR_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Reduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Op op, int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -1063,7 +1068,7 @@ int MPIR_Reduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* --END USEREXTENSION-- */
} else {
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Reduce_intra(sendbuf, recvbuf, count, datatype,
op, root, comm_ptr, errflag);
@@ -1126,14 +1131,14 @@ int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
MPI_Op op, int root, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_REDUCE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_REDUCE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_REDUCE);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_REDUCE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -1147,28 +1152,28 @@ int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
- MPID_Op *op_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
int rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -1189,7 +1194,7 @@ int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, count, mpi_errno);
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
@@ -1197,7 +1202,7 @@ int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -1211,7 +1216,7 @@ int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -1225,8 +1230,8 @@ int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
}
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno =
@@ -1240,13 +1245,13 @@ int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
/* ... body of routine ... */
- mpi_errno = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, &errflag);
+ mpi_errno = MPID_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_REDUCE);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_REDUCE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/reduce_local.c b/src/mpi/coll/reduce_local.c
index b171b39..c97126f 100644
--- a/src/mpi/coll/reduce_local.c
+++ b/src/mpi/coll/reduce_local.c
@@ -36,7 +36,7 @@ int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype
int MPIR_Reduce_local_impl(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Op *op_ptr;
+ MPIR_Op *op_ptr;
MPI_User_function *uop;
#ifdef HAVE_CXX_BINDING
int is_cxx_uop = 0;
@@ -44,29 +44,35 @@ int MPIR_Reduce_local_impl(const void *inbuf, void *inoutbuf, int count, MPI_Dat
#if defined(HAVE_FORTRAN_BINDING) && !defined(HAVE_FINT_IS_INT)
int is_f77_uop = 0;
#endif
- MPID_THREADPRIV_DECL;
if (count == 0) goto fn_exit;
- MPID_THREADPRIV_GET;
- MPID_THREADPRIV_FIELD(op_errno) = MPI_SUCCESS;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = MPI_SUCCESS;
+ }
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
/* get the function by indexing into the op table */
uop = MPIR_OP_HDL_TO_FN(op);
}
else {
- MPID_Op_get_ptr(op, op_ptr);
+ MPIR_Op_get_ptr(op, op_ptr);
#ifdef HAVE_CXX_BINDING
- if (op_ptr->language == MPID_LANG_CXX) {
+ if (op_ptr->language == MPIR_LANG__CXX) {
uop = (MPI_User_function *) op_ptr->function.c_function;
is_cxx_uop = 1;
}
else
#endif
{
- if (op_ptr->language == MPID_LANG_C) {
+ if (op_ptr->language == MPIR_LANG__C) {
uop = (MPI_User_function *) op_ptr->function.c_function;
}
else {
@@ -90,7 +96,7 @@ int MPIR_Reduce_local_impl(const void *inbuf, void *inoutbuf, int count, MPI_Dat
if (is_f77_uop) {
MPI_Fint lcount = (MPI_Fint)count;
MPI_Fint ldtype = (MPI_Fint)datatype;
- MPIR_F77_User_function *uop_f77 = (MPIR_F77_User_function *)uop;
+ MPII_F77_User_function *uop_f77 = (MPII_F77_User_function *)uop;
(*uop_f77)((void *) inbuf, inoutbuf, &lcount, &ldtype);
}
@@ -103,14 +109,20 @@ int MPIR_Reduce_local_impl(const void *inbuf, void *inoutbuf, int count, MPI_Dat
}
/* --BEGIN ERROR HANDLING-- */
- if (MPID_THREADPRIV_FIELD(op_errno))
- mpi_errno = MPID_THREADPRIV_FIELD(op_errno);
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ if (per_thread->op_errno)
+ mpi_errno = per_thread->op_errno;
+ }
/* --END ERROR HANDLING-- */
fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif
@@ -147,12 +159,12 @@ Output Parameters:
int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_REDUCE_LOCAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_REDUCE_LOCAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_REDUCE_LOCAL);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_REDUCE_LOCAL);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -162,9 +174,9 @@ int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype
MPIR_ERRTEST_OP(op, mpi_errno);
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr;
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op *op_ptr;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
@@ -189,7 +201,7 @@ int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_REDUCE_LOCAL);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_REDUCE_LOCAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/scan.c b/src/mpi/coll/scan.c
index cd5366b..ea26924 100644
--- a/src/mpi/coll/scan.c
+++ b/src/mpi/coll/scan.c
@@ -75,7 +75,7 @@ static int MPIR_Scan_generic (
int count,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
MPI_Status status;
@@ -85,28 +85,31 @@ static int MPIR_Scan_generic (
int mask, dst, is_commutative;
MPI_Aint true_extent, true_lb, extent;
void *partial_scan, *tmp_buf;
- MPID_Op *op_ptr;
- MPID_THREADPRIV_DECL;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_Op *op_ptr;
+ MPIR_CHKLMEM_DECL(2);
if (count == 0) return MPI_SUCCESS;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
- MPID_THREADPRIV_GET;
/* set op_errno to 0. stored in perthread structure */
- MPID_THREADPRIV_FIELD(op_errno) = 0;
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ per_thread->op_errno = 0;
+ }
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
is_commutative = 1;
}
else {
- MPID_Op_get_ptr(op, op_ptr);
- if (op_ptr->kind == MPID_OP_USER_NONCOMMUTE)
+ MPIR_Op_get_ptr(op, op_ptr);
+ if (op_ptr->kind == MPIR_OP_KIND__USER_NONCOMMUTE)
is_commutative = 0;
else
is_commutative = 1;
@@ -116,17 +119,17 @@ static int MPIR_Scan_generic (
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_CHKLMEM_MALLOC(partial_scan, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "partial_scan");
+ MPIR_CHKLMEM_MALLOC(partial_scan, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "partial_scan");
/* This eventually gets malloc()ed as a temp buffer, not added to
* any user buffers */
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
/* adjust for potential negative lower bound in datatype */
partial_scan = (void *)((char*)partial_scan - true_lb);
/* need to allocate temporary buffer to store incoming data*/
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, count*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -192,15 +195,21 @@ static int MPIR_Scan_generic (
mask <<= 1;
}
- if (MPID_THREADPRIV_FIELD(op_errno)) {
- mpi_errno = MPID_THREADPRIV_FIELD(op_errno);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ {
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ if (per_thread->op_errno) {
+ mpi_errno = per_thread->op_errno;
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
@@ -227,13 +236,12 @@ int MPIR_Scan(
int count,
MPI_Datatype datatype,
MPI_Op op,
- MPID_Comm *comm_ptr,
+ MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag )
{
int mpi_errno = MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(3);
- MPID_THREADPRIV_DECL;
+ MPIR_CHKLMEM_DECL(3);
int rank = comm_ptr->rank;
MPI_Status status;
void *tempbuf = NULL, *localfulldata = NULL, *prefulldata = NULL;
@@ -246,30 +254,29 @@ int MPIR_Scan(
communicator in which all the nodes contain processes with
consecutive ranks. */
- if (!MPIR_Comm_is_node_consecutive(comm_ptr)) {
+ if (!MPII_Comm_is_node_consecutive(comm_ptr)) {
/* We can't use the SMP-aware algorithm, use the generic one */
return MPIR_Scan_generic(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
}
- MPID_THREADPRIV_GET;
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(datatype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(count * MPIR_MAX(extent, true_extent));
+ MPIR_Ensure_Aint_fits_in_pointer(count * MPL_MAX(extent, true_extent));
- MPIU_CHKLMEM_MALLOC(tempbuf, void *, count*(MPIR_MAX(extent, true_extent)),
+ MPIR_CHKLMEM_MALLOC(tempbuf, void *, count*(MPL_MAX(extent, true_extent)),
mpi_errno, "temporary buffer");
tempbuf = (void *)((char*)tempbuf - true_lb);
/* Create prefulldata and localfulldata on local roots of all nodes */
if (comm_ptr->node_roots_comm != NULL) {
- MPIU_CHKLMEM_MALLOC(prefulldata, void *, count*(MPIR_MAX(extent, true_extent)),
+ MPIR_CHKLMEM_MALLOC(prefulldata, void *, count*(MPL_MAX(extent, true_extent)),
mpi_errno, "prefulldata for scan");
prefulldata = (void *)((char*)prefulldata - true_lb);
if (comm_ptr->node_comm != NULL) {
- MPIU_CHKLMEM_MALLOC(localfulldata, void *, count*(MPIR_MAX(extent, true_extent)),
+ MPIR_CHKLMEM_MALLOC(localfulldata, void *, count*(MPL_MAX(extent, true_extent)),
mpi_errno, "localfulldata for scan");
localfulldata = (void *)((char*)localfulldata - true_lb);
}
@@ -279,7 +286,7 @@ int MPIR_Scan(
one process, just copy the raw data. */
if (comm_ptr->node_comm != NULL)
{
- mpi_errno = MPIR_Scan_impl(sendbuf, recvbuf, count, datatype,
+ mpi_errno = MPID_Scan(sendbuf, recvbuf, count, datatype,
op, comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -313,7 +320,7 @@ int MPIR_Scan(
}
else if (comm_ptr->node_roots_comm == NULL &&
comm_ptr->node_comm != NULL &&
- MPIU_Get_intranode_rank(comm_ptr, rank) == comm_ptr->node_comm->local_size - 1)
+ MPIR_Get_intranode_rank(comm_ptr, rank) == comm_ptr->node_comm->local_size - 1)
{
mpi_errno = MPIC_Send(recvbuf, count, datatype,
0, MPIR_SCAN_TAG, comm_ptr->node_comm, errflag);
@@ -335,7 +342,7 @@ int MPIR_Scan(
process of node 3. */
if (comm_ptr->node_roots_comm != NULL)
{
- mpi_errno = MPIR_Scan_impl(localfulldata, prefulldata, count, datatype,
+ mpi_errno = MPID_Scan(localfulldata, prefulldata, count, datatype,
op, comm_ptr->node_roots_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -344,11 +351,11 @@ int MPIR_Scan(
MPIR_ERR_ADD(mpi_errno_ret, mpi_errno);
}
- if (MPIU_Get_internode_rank(comm_ptr, rank) !=
+ if (MPIR_Get_internode_rank(comm_ptr, rank) !=
comm_ptr->node_roots_comm->local_size-1)
{
mpi_errno = MPIC_Send(prefulldata, count, datatype,
- MPIU_Get_internode_rank(comm_ptr, rank) + 1,
+ MPIR_Get_internode_rank(comm_ptr, rank) + 1,
MPIR_SCAN_TAG, comm_ptr->node_roots_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -357,10 +364,10 @@ int MPIR_Scan(
MPIR_ERR_ADD(mpi_errno_ret, mpi_errno);
}
}
- if (MPIU_Get_internode_rank(comm_ptr, rank) != 0)
+ if (MPIR_Get_internode_rank(comm_ptr, rank) != 0)
{
mpi_errno = MPIC_Recv(tempbuf, count, datatype,
- MPIU_Get_internode_rank(comm_ptr, rank) - 1,
+ MPIR_Get_internode_rank(comm_ptr, rank) - 1,
MPIR_SCAN_TAG, comm_ptr->node_roots_comm, &status, errflag);
noneed = 0;
if (mpi_errno) {
@@ -379,7 +386,7 @@ int MPIR_Scan(
reduce it with recvbuf to get final result if nessesary. */
if (comm_ptr->node_comm != NULL) {
- mpi_errno = MPIR_Bcast_impl(&noneed, 1, MPI_INT, 0, comm_ptr->node_comm, errflag);
+ mpi_errno = MPID_Bcast(&noneed, 1, MPI_INT, 0, comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
*errflag = MPIR_ERR_GET_CLASS(mpi_errno);
@@ -390,7 +397,7 @@ int MPIR_Scan(
if (noneed == 0) {
if (comm_ptr->node_comm != NULL) {
- mpi_errno = MPIR_Bcast_impl(tempbuf, count, datatype, 0,
+ mpi_errno = MPID_Bcast(tempbuf, count, datatype, 0,
comm_ptr->node_comm, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -406,7 +413,7 @@ int MPIR_Scan(
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -426,7 +433,7 @@ int MPIR_Scan(
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Scan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -488,14 +495,14 @@ int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
MPI_Op op, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SCAN);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SCAN);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_SCAN);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_SCAN);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -509,17 +516,17 @@ int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
- MPID_Op *op_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_Op *op_ptr = NULL;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_COMM_INTRA(comm_ptr, mpi_errno);
@@ -529,7 +536,7 @@ int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( datatype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -541,8 +548,8 @@ int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
MPIR_ERRTEST_USERBUFFER(recvbuf,count,datatype,mpi_errno);
if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op_get_ptr(op, op_ptr);
- MPID_Op_valid_ptr( op_ptr, mpi_errno );
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_valid_ptr( op_ptr, mpi_errno );
}
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN) {
mpi_errno =
@@ -559,13 +566,13 @@ int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
/* ... body of routine ... */
- mpi_errno = MPIR_Scan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, &errflag);
+ mpi_errno = MPID_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_SCAN);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_SCAN);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/scatter.c b/src/mpi/coll/scatter.c
index 56022f4..9842e49 100644
--- a/src/mpi/coll/scatter.c
+++ b/src/mpi/coll/scatter.c
@@ -74,7 +74,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, int root,
- MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
MPI_Status status;
MPI_Aint extent=0;
@@ -85,7 +85,7 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
void *tmp_buf=NULL;
int mpi_errno = MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(4);
+ MPIR_CHKLMEM_DECL(4);
comm_size = comm_ptr->local_size;
rank = comm_ptr->rank;
@@ -94,9 +94,6 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
((rank != root) && (recvcount == 0)) )
return MPI_SUCCESS;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
is_homogeneous = 1;
#ifdef MPID_HAS_HETERO
if (comm_ptr->is_hetero)
@@ -118,14 +115,14 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
in the event of recvbuf=MPI_IN_PLACE on the root,
recvcount and recvtype are not valid */
MPID_Datatype_get_size_macro(sendtype, sendtype_size);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
extent*sendcount*comm_size);
nbytes = sendtype_size * sendcount;
}
else {
MPID_Datatype_get_size_macro(recvtype, recvtype_size);
- MPIU_Ensure_Aint_fits_in_pointer(extent*recvcount*comm_size);
+ MPIR_Ensure_Aint_fits_in_pointer(extent*recvcount*comm_size);
nbytes = recvtype_size * recvcount;
}
@@ -135,7 +132,7 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
receive data of max size (nbytes*comm_size)/2 */
if (relative_rank && !(relative_rank % 2)) {
tmp_buf_size = (nbytes*comm_size)/2;
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
}
/* if the root is not rank 0, we reorder the sendbuf in order of
@@ -145,7 +142,7 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
if (rank == root) {
if (root != 0) {
tmp_buf_size = nbytes*comm_size;
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
if (recvbuf != MPI_IN_PLACE)
mpi_errno = MPIR_Localcopy(((char *) sendbuf + extent*sendcount*rank),
@@ -274,7 +271,7 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
if (rank == root) {
MPIR_Pack_size_impl(sendcount*comm_size, sendtype, &tmp_buf_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
/* calculate the value of nbytes, the number of bytes in packed
representation that each process receives. We can't
@@ -329,7 +326,7 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
}
else {
MPIR_Pack_size_impl(recvcount*(comm_size/2), recvtype, &tmp_buf_size);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, tmp_buf_size, mpi_errno, "tmp_buf");
/* calculate nbytes */
position = 0;
@@ -401,9 +398,7 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
#endif /* MPID_HAS_HETERO */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -421,7 +416,7 @@ int MPIR_Scatter_intra(const void *sendbuf, int sendcount, MPI_Datatype sendtype
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Scatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
+ int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr,
MPIR_Errflag_t *errflag)
{
/* Intercommunicator scatter.
@@ -439,14 +434,13 @@ int MPIR_Scatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
MPI_Status status;
MPI_Aint extent, true_extent, true_lb = 0;
void *tmp_buf=NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_CHKLMEM_DECL(1);
if (root == MPI_PROC_NULL) {
/* local processes other than root do nothing */
return MPI_SUCCESS;
}
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
remote_size = comm_ptr->remote_size;
local_size = comm_ptr->local_size;
@@ -484,11 +478,11 @@ int MPIR_Scatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
MPIR_Type_get_true_extent_impl(recvtype, &true_lb, &true_extent);
MPID_Datatype_get_extent_macro(recvtype, extent);
- MPIU_Ensure_Aint_fits_in_pointer(extent*recvcount*local_size);
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(extent*recvcount*local_size);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
sendcount*remote_size*extent);
- MPIU_CHKLMEM_MALLOC(tmp_buf, void *, recvcount*local_size*(MPIR_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
+ MPIR_CHKLMEM_MALLOC(tmp_buf, void *, recvcount*local_size*(MPL_MAX(extent,true_extent)), mpi_errno, "tmp_buf");
/* adjust for potential negative lower bound in datatype */
tmp_buf = (void *)((char*)tmp_buf - true_lb);
@@ -506,12 +500,12 @@ int MPIR_Scatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
/* Get the local intracommunicator */
if (!comm_ptr->local_comm)
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
newcomm_ptr = comm_ptr->local_comm;
/* now do the usual scatter on this intracommunicator */
- mpi_errno = MPIR_Scatter_impl(tmp_buf, recvcount, recvtype,
+ mpi_errno = MPID_Scatter(tmp_buf, recvcount, recvtype,
recvbuf, recvcount, recvtype, 0,
newcomm_ptr, errflag);
if (mpi_errno) {
@@ -551,9 +545,7 @@ int MPIR_Scatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -573,11 +565,11 @@ int MPIR_Scatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* intracommunicator */
mpi_errno = MPIR_Scatter_intra(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype, root,
@@ -608,7 +600,7 @@ int MPIR_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Scatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -672,14 +664,14 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SCATTER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SCATTER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_SCATTER);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_SCATTER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -693,20 +685,20 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
rank = comm_ptr->rank;
@@ -715,7 +707,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -738,7 +730,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -747,7 +739,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
@@ -755,7 +747,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -768,7 +760,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -784,7 +776,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPIR_Scatter_impl(sendbuf, sendcount, sendtype,
+ mpi_errno = MPID_Scatter(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype, root,
comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
@@ -792,7 +784,7 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_SCATTER);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_SCATTER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/coll/scatterv.c b/src/mpi/coll/scatterv.c
index 67bf285..fc80200 100644
--- a/src/mpi/coll/scatterv.c
+++ b/src/mpi/coll/scatterv.c
@@ -55,25 +55,22 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int rank, comm_size, mpi_errno = MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
MPI_Aint extent;
int i, reqs;
- MPID_Request **reqarray;
+ MPIR_Request **reqarray;
MPI_Status *starray;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
rank = comm_ptr->rank;
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
/* If I'm the root, then scatter */
- if (((comm_ptr->comm_kind == MPID_INTRACOMM) && (root == rank)) ||
- ((comm_ptr->comm_kind == MPID_INTERCOMM) && (root == MPI_ROOT))) {
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (root == rank)) ||
+ ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) && (root == MPI_ROOT))) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
comm_size = comm_ptr->local_size;
else
comm_size = comm_ptr->remote_size;
@@ -85,15 +82,15 @@ int MPIR_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
* a minimal sanity check. Maybe add a global var since we do
* loop over sendcount[] in MPI_Scatterv before calling
* this? */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf + extent);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf + extent);
- MPIU_CHKLMEM_MALLOC(reqarray, MPID_Request **, comm_size * sizeof(MPID_Request *), mpi_errno, "reqarray");
- MPIU_CHKLMEM_MALLOC(starray, MPI_Status *, comm_size * sizeof(MPI_Status), mpi_errno, "starray");
+ MPIR_CHKLMEM_MALLOC(reqarray, MPIR_Request **, comm_size * sizeof(MPIR_Request *), mpi_errno, "reqarray");
+ MPIR_CHKLMEM_MALLOC(starray, MPI_Status *, comm_size * sizeof(MPI_Status), mpi_errno, "starray");
reqs = 0;
for (i = 0; i < comm_size; i++) {
if (sendcounts[i]) {
- if ((comm_ptr->comm_kind == MPID_INTRACOMM) && (i == rank)) {
+ if ((comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) && (i == rank)) {
if (recvbuf != MPI_IN_PLACE) {
mpi_errno = MPIR_Localcopy(((char *)sendbuf+displs[rank]*extent),
sendcounts[rank], sendtype,
@@ -144,9 +141,7 @@ int MPIR_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
fn_exit:
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag != MPIR_ERR_NONE)
@@ -166,7 +161,7 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Scatterv_impl(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+ int root, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
@@ -233,14 +228,14 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
int root, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SCATTERV);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SCATTERV);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_COLL_FUNC_ENTER(MPID_STATE_MPI_SCATTERV);
+ MPIR_FUNC_TERSE_COLL_ENTER(MPID_STATE_MPI_SCATTERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -254,20 +249,20 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
+ MPIR_Datatype *sendtype_ptr=NULL, *recvtype_ptr=NULL;
int i, comm_size, rank;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
MPIR_ERRTEST_INTRA_ROOT(comm_ptr, root, mpi_errno);
rank = comm_ptr->rank;
comm_size = comm_ptr->local_size;
@@ -279,7 +274,7 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
}
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -311,7 +306,7 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -320,7 +315,7 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
}
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_ERRTEST_INTER_ROOT(comm_ptr, root, mpi_errno);
if (root == MPI_ROOT) {
comm_size = comm_ptr->remote_size;
@@ -330,7 +325,7 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
}
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -348,7 +343,7 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr( recvtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -366,7 +361,7 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
/* ... body of routine ... */
- mpi_errno = MPIR_Scatterv_impl(sendbuf, sendcounts, displs, sendtype,
+ mpi_errno = MPID_Scatterv(sendbuf, sendcounts, displs, sendtype,
recvbuf, recvcount, recvtype,
root, comm_ptr, &errflag);
if (mpi_errno) goto fn_fail;
@@ -374,7 +369,7 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_COLL_FUNC_EXIT(MPID_STATE_MPI_SCATTERV);
+ MPIR_FUNC_TERSE_COLL_EXIT(MPID_STATE_MPI_SCATTERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/.state-cache b/src/mpi/comm/.state-cache
index 22f6e1e..958dd2e 100644
--- a/src/mpi/comm/.state-cache
+++ b/src/mpi/comm/.state-cache
@@ -1,104 +1,93 @@
<dir>
-<file name="commutil.c" info="1447123141"/>
-<file name="comm_get_info.c" info="1447123141"/>
-<file name="comm_compare.c" info="1447123141"/>
-<file name="intercomm_merge.c" info="1447123141"/>
-<file name="intercomm_create.c" info="1447123141"/>
-<file name="comm_agree.c" info="1447123141"/>
-<file name="comm_size.c" info="1447123141"/>
-<file name="comm_create.c" info="1447123141"/>
-<file name="comm_split_type.c" info="1447123141"/>
-<file name="comm_dup_with_info.c" info="1447123141"/>
-<file name="comm_set_name.c" info="1447123141"/>
-<file name="comm_free.c" info="1447123141"/>
-<file name="comm_rank.c" info="1447123141"/>
-<file name="comm_failure_get_acked.c" info="1447123141"/>
-<file name="comm_remote_group.c" info="1447123141"/>
-<file name="comm_set_info.c" info="1447123141"/>
-<file name="mpicomm.h" info="1447123141"/>
-<file name="contextid.c" info="1447123141"/>
-<file name="comm_failure_ack.c" info="1447123141"/>
-<file name="comm_shrink.c" info="1447123141"/>
-<file name="comm_test_inter.c" info="1447123141"/>
-<file name="comm_idup.c" info="1447123141"/>
-<file name="comm_dup.c" info="1447123141"/>
-<file name="comm_group.c" info="1447123141"/>
-<file name="comm_remote_size.c" info="1447123141"/>
-<file name="comm_revoke.c" info="1447123141"/>
-<file name="comm_get_name.c" info="1447123141"/>
-<file name="comm_split.c" info="1447123141"/>
-<file name="comm_create_group.c" info="1447123141"/>
+<file name="comm_set_info.c" info="1478973152"/>
+<file name="comm_split.c" info="1478973152"/>
+<file name="comm_dup_with_info.c" info="1478973152"/>
+<file name="comm_failure_get_acked.c" info="1478973152"/>
+<file name="intercomm_create.c" info="1478973152"/>
+<file name="comm_size.c" info="1478973152"/>
+<file name="comm_idup.c" info="1478973152"/>
+<file name="mpicomm.h" info="1478973152"/>
+<file name="comm_group.c" info="1478973152"/>
+<file name="comm_set_name.c" info="1478973152"/>
+<file name="comm_shrink.c" info="1478973152"/>
+<file name="comm_create_group.c" info="1478973152"/>
+<file name="comm_test_inter.c" info="1478973152"/>
+<file name="comm_compare.c" info="1478973152"/>
+<file name="comm_get_info.c" info="1478973152"/>
+<file name="comm_failure_ack.c" info="1478973152"/>
+<file name="comm_remote_size.c" info="1478973152"/>
+<file name="intercomm_merge.c" info="1478973152"/>
+<file name="contextid.c" info="1478973152"/>
+<file name="comm_free.c" info="1478973152"/>
+<file name="comm_agree.c" info="1478973152"/>
+<file name="comm_rank.c" info="1478973152"/>
+<file name="comm_create.c" info="1478973152"/>
+<file name="comm_split_type.c" info="1478973152"/>
+<file name="comm_remote_group.c" info="1478973152"/>
+<file name="comm_revoke.c" info="1478973152"/>
+<file name="comm_dup.c" info="1478973152"/>
+<file name="comm_get_name.c" info="1478973152"/>
+<file name="commutil.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="commutil.c">
-MPID_STATE_MPIR_COMM_CREATE MPIR_Comm_create
-MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM MPIR_Setup_intercomm_localcomm
-MPID_STATE_MPIR_COMM_MAP_IRREGULAR MPIR_Comm_map_irregular
-MPID_STATE_MPIR_COMM_MAP_DUP MPIR_Comm_map_dup
-MPID_STATE_MPIR_COMM_MAP_FREE MPIR_Comm_map_free
-MPID_STATE_MPIR_COMM_COMMIT MPIR_Comm_commit
-MPID_STATE_MPIR_COMM_COPY MPIR_Comm_copy
-MPID_STATE_MPIR_COMM_COPY_DATA MPIR_Comm_copy_data
-MPID_STATE_COMM_DELETE_INTERNAL MPIR_Comm_delete_internal
-MPID_STATE_MPIR_COMM_RELEASE_ALWAYS MPIR_Comm_release_always
-MPID_STATE_MPIR_COMM_APPLY_HINTS MPIR_Comm_apply_hints
-MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES free_hint_handles
-MPID_STATE_MPIR_COMM_REGISTER_HINT MPIR_Comm_register_hint
+<fileinfo name="comm_set_info.c">
+MPID_STATE_MPIR_COMM_SET_INFO_IMPL MPIR_Comm_set_info_impl
+MPID_STATE_MPI_COMM_SET_INFO MPI_Comm_set_info
</fileinfo>
-<fileinfo name="comm_get_info.c">
-MPID_STATE_MPI_COMM_GET_INFO MPI_Comm_get_info
+<fileinfo name="comm_split.c">
+MPID_STATE_MPI_COMM_SPLIT MPI_Comm_split
</fileinfo>
-<fileinfo name="comm_compare.c">
-MPID_STATE_MPI_COMM_COMPARE MPI_Comm_compare
+<fileinfo name="comm_dup_with_info.c">
+MPID_STATE_MPI_COMM_DUP_WITH_INFO MPI_Comm_dup_with_info
</fileinfo>
-<fileinfo name="intercomm_merge.c">
-MPID_STATE_MPIR_INTERCOMM_MERGE_IMPL MPIR_Intercomm_merge_impl
-MPID_STATE_MPI_INTERCOMM_MERGE MPI_Intercomm_merge
+<fileinfo name="comm_failure_get_acked.c">
+MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED MPIX_Comm_failure_get_acked
</fileinfo>
<fileinfo name="intercomm_create.c">
-MPID_STATE_MPIR_INTERCOMM_CREATE_IMPL MPIR_Intercomm_create_impl
+MPID_STATE_MPIR_COMM_KIND__INTERCOMM_CREATE_IMPL MPIR_Intercomm_create_impl
MPID_STATE_MPI_INTERCOMM_CREATE MPI_Intercomm_create
</fileinfo>
-<fileinfo name="comm_agree.c">
-MPID_STATE_MPIR_COMM_AGREE MPIR_Comm_agree
-MPID_STATE_MPIX_COMM_AGREE MPIX_Comm_agree
-</fileinfo>
<fileinfo name="comm_size.c">
MPID_STATE_MPI_COMM_SIZE MPI_Comm_size
</fileinfo>
-<fileinfo name="comm_create.c">
-MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING MPIR_Comm_create_calculate_mapping
-MPID_STATE_MPIR_COMM_CREATE_INTRA MPIR_Comm_create_intra
-MPID_STATE_MPIR_COMM_CREATE_INTER MPIR_Comm_create_inter
-MPID_STATE_MPI_COMM_CREATE MPI_Comm_create
+<fileinfo name="comm_idup.c">
+MPID_STATE_MPI_COMM_IDUP MPI_Comm_idup
</fileinfo>
-<fileinfo name="comm_split_type.c">
-MPID_STATE_MPI_COMM_SPLIT_TYPE MPI_Comm_split_type
+<fileinfo name="mpicomm.h">
</fileinfo>
-<fileinfo name="comm_dup_with_info.c">
-MPID_STATE_MPI_COMM_DUP_WITH_INFO MPI_Comm_dup_with_info
+<fileinfo name="comm_group.c">
+MPID_STATE_MPIR_COMM_GROUP_IMPL MPIR_Comm_group_impl
+MPID_STATE_MPI_COMM_GROUP MPI_Comm_group
</fileinfo>
<fileinfo name="comm_set_name.c">
MPID_STATE_MPI_COMM_SET_NAME MPI_Comm_set_name
</fileinfo>
-<fileinfo name="comm_free.c">
-MPID_STATE_MPI_COMM_FREE MPI_Comm_free
+<fileinfo name="comm_shrink.c">
+MPID_STATE_MPIR_COMM_SHRINK MPIR_Comm_shrink
+MPID_STATE_MPIX_COMM_SHRINK MPIX_Comm_shrink
</fileinfo>
-<fileinfo name="comm_rank.c">
-MPID_STATE_MPI_COMM_RANK MPI_Comm_rank
+<fileinfo name="comm_create_group.c">
+MPID_STATE_MPIR_COMM_CREATE_GROUP MPIR_Comm_create_group
+MPID_STATE_MPI_COMM_CREATE_GROUP MPI_Comm_create_group
</fileinfo>
-<fileinfo name="comm_failure_get_acked.c">
-MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED MPIX_Comm_failure_get_acked
+<fileinfo name="comm_test_inter.c">
+MPID_STATE_MPI_COMM_TEST_INTER MPI_Comm_test_inter
</fileinfo>
-<fileinfo name="comm_remote_group.c">
-MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL MPIR_Comm_remote_group_impl
-MPID_STATE_MPI_COMM_REMOTE_GROUP MPI_Comm_remote_group
+<fileinfo name="comm_compare.c">
+MPID_STATE_MPI_COMM_COMPARE MPI_Comm_compare
</fileinfo>
-<fileinfo name="comm_set_info.c">
-MPID_STATE_MPIR_COMM_SET_INFO_IMPL MPIR_Comm_set_info_impl
-MPID_STATE_MPI_COMM_SET_INFO MPI_Comm_set_info
+<fileinfo name="comm_get_info.c">
+MPID_STATE_MPI_COMM_GET_INFO MPI_Comm_get_info
</fileinfo>
-<fileinfo name="mpicomm.h">
+<fileinfo name="comm_failure_ack.c">
+MPID_STATE_MPIX_COMM_FAILURE_ACK MPIX_Comm_failure_ack
+</fileinfo>
+<fileinfo name="comm_remote_size.c">
+MPID_STATE_MPI_COMM_REMOTE_SIZE MPI_Comm_remote_size
+</fileinfo>
+<fileinfo name="intercomm_merge.c">
+MPID_STATE_MPIR_COMM_KIND__INTERCOMM_MERGE_IMPL MPIR_Intercomm_merge_impl
+MPID_STATE_MPI_INTERCOMM_MERGE MPI_Intercomm_merge
</fileinfo>
<fileinfo name="contextid.c">
MPID_STATE_MPIR_GET_CONTEXTID MPIR_Get_contextid_sparse_group
@@ -107,40 +96,51 @@ MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID_NONBLOCK MPIR_Get_intercomm_contextid_no
MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID MPIR_Get_intercomm_contextid
MPID_STATE_MPIR_FREE_CONTEXTID MPIR_Free_contextid
</fileinfo>
-<fileinfo name="comm_failure_ack.c">
-MPID_STATE_MPIX_COMM_FAILURE_ACK MPIX_Comm_failure_ack
-</fileinfo>
-<fileinfo name="comm_shrink.c">
-MPID_STATE_MPIR_COMM_SHRINK MPIR_Comm_shrink
-MPID_STATE_MPIX_COMM_SHRINK MPIX_Comm_shrink
+<fileinfo name="comm_free.c">
+MPID_STATE_MPI_COMM_FREE MPI_Comm_free
</fileinfo>
-<fileinfo name="comm_test_inter.c">
-MPID_STATE_MPI_COMM_TEST_INTER MPI_Comm_test_inter
+<fileinfo name="comm_agree.c">
+MPID_STATE_MPIR_COMM_AGREE MPIR_Comm_agree
+MPID_STATE_MPIX_COMM_AGREE MPIX_Comm_agree
</fileinfo>
-<fileinfo name="comm_idup.c">
-MPID_STATE_MPI_COMM_IDUP MPI_Comm_idup
+<fileinfo name="comm_rank.c">
+MPID_STATE_MPI_COMM_RANK MPI_Comm_rank
</fileinfo>
-<fileinfo name="comm_dup.c">
-MPID_STATE_MPI_COMM_DUP MPI_Comm_dup
+<fileinfo name="comm_create.c">
+MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING MPII_Comm_create_calculate_mapping
+MPID_STATE_MPIR_COMM_CREATE_INTRA MPIR_Comm_create_intra
+MPID_STATE_MPIR_COMM_CREATE_INTER MPIR_Comm_create_inter
+MPID_STATE_MPI_COMM_CREATE MPI_Comm_create
</fileinfo>
-<fileinfo name="comm_group.c">
-MPID_STATE_MPIR_COMM_GROUP_IMPL MPIR_Comm_group_impl
-MPID_STATE_MPI_COMM_GROUP MPI_Comm_group
+<fileinfo name="comm_split_type.c">
+MPID_STATE_MPI_COMM_SPLIT_TYPE MPI_Comm_split_type
</fileinfo>
-<fileinfo name="comm_remote_size.c">
-MPID_STATE_MPI_COMM_REMOTE_SIZE MPI_Comm_remote_size
+<fileinfo name="comm_remote_group.c">
+MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL MPIR_Comm_remote_group_impl
+MPID_STATE_MPI_COMM_REMOTE_GROUP MPI_Comm_remote_group
</fileinfo>
<fileinfo name="comm_revoke.c">
MPID_STATE_MPIX_COMM_REVOKE MPIX_Comm_revoke
</fileinfo>
+<fileinfo name="comm_dup.c">
+MPID_STATE_MPI_COMM_DUP MPI_Comm_dup
+</fileinfo>
<fileinfo name="comm_get_name.c">
MPID_STATE_MPI_COMM_GET_NAME MPI_Comm_get_name
</fileinfo>
-<fileinfo name="comm_split.c">
-MPID_STATE_MPI_COMM_SPLIT MPI_Comm_split
-</fileinfo>
-<fileinfo name="comm_create_group.c">
-MPID_STATE_MPIR_COMM_CREATE_GROUP MPIR_Comm_create_group
-MPID_STATE_MPI_COMM_CREATE_GROUP MPI_Comm_create_group
+<fileinfo name="commutil.c">
+MPID_STATE_MPIR_COMM_CREATE MPIR_Comm_create
+MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM MPII_Setup_intercomm_localcomm
+MPID_STATE_MPIR_COMM_MAP_TYPE__IRREGULAR MPIR_Comm_map_irregular
+MPID_STATE_MPIR_COMM_MAP_TYPE__DUP MPIR_Comm_map_dup
+MPID_STATE_MPIR_COMM_MAP_FREE MPIR_Comm_map_free
+MPID_STATE_MPIR_COMM_COMMIT MPIR_Comm_commit
+MPID_STATE_MPIR_COMM_COPY MPII_Comm_copy
+MPID_STATE_MPIR_COMM_COPY_DATA MPII_Comm_copy_data
+MPID_STATE_COMM_DELETE_INTERNAL MPIR_Comm_delete_internal
+MPID_STATE_MPIR_COMM_RELEASE_ALWAYS MPIR_Comm_release_always
+MPID_STATE_MPIR_COMM_APPLY_HINTS MPII_Comm_apply_hints
+MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES free_hint_handles
+MPID_STATE_MPIR_COMM_REGISTER_HINT MPIR_Comm_register_hint
</fileinfo>
</data>
diff --git a/src/mpi/comm/comm_agree.c b/src/mpi/comm/comm_agree.c
index 29a0935..32d207c 100644
--- a/src/mpi/comm/comm_agree.c
+++ b/src/mpi/comm/comm_agree.c
@@ -25,22 +25,21 @@ int MPIX_Comm_agree(MPI_Comm comm, int *flag) __attribute__((weak,alias("PMPIX_C
#ifndef MPICH_MPI_FROM_PMPI
#undef MPIX_Comm_agree
#define MPIX_Comm_agree PMPIX_Comm_agree
-#endif
#undef FUNCNAME
#define FUNCNAME MPIR_Comm_agree
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_agree(MPID_Comm *comm_ptr, int *flag)
+int MPIR_Comm_agree(MPIR_Comm *comm_ptr, int *flag)
{
int mpi_errno = MPI_SUCCESS, mpi_errno_tmp = MPI_SUCCESS;
- MPID_Group *comm_grp, *failed_grp, *new_group_ptr, *global_failed;
+ MPIR_Group *comm_grp, *failed_grp, *new_group_ptr, *global_failed;
int result, success = 1;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
int values[2];
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_AGREE);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_AGREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_AGREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_AGREE);
MPIR_Comm_group_impl(comm_ptr, &comm_grp);
@@ -84,11 +83,11 @@ int MPIR_Comm_agree(MPID_Comm *comm_ptr, int *flag)
* failure in between the first allreduce and the second one, it's ignored
* here. */
- if (failed_grp != MPID_Group_empty)
+ if (failed_grp != MPIR_Group_empty)
MPIR_Group_release(failed_grp);
MPIR_Group_release(new_group_ptr);
MPIR_Group_release(comm_grp);
- if (global_failed != MPID_Group_empty)
+ if (global_failed != MPIR_Group_empty)
MPIR_Group_release(global_failed);
success = values[0];
@@ -100,12 +99,14 @@ int MPIR_Comm_agree(MPID_Comm *comm_ptr, int *flag)
}
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_AGREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_AGREE);
return mpi_errno;
fn_fail:
goto fn_exit;
}
+#endif /* !defined(MPICH_MPI_FROM_PMPI) */
+
#undef FUNCNAME
#define FUNCNAME MPIX_Comm_agree
#undef FCNAME
@@ -114,12 +115,12 @@ int MPIR_Comm_agree(MPID_Comm *comm_ptr, int *flag)
MPIX_Comm_agree - Performs agreement operation on comm
Input Parameters:
-+ comm - communicator (handle)
+. comm - communicator (handle)
Output Parameters:
. newcomm - new communicator (handle)
-.N Threadsafe
+.N ThreadSafe
.N Fortran
@@ -131,13 +132,13 @@ Output Parameters:
int MPIX_Comm_agree(MPI_Comm comm, int *flag)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_COMM_AGREE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIX_COMM_AGREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_COMM_AGREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIX_COMM_AGREE);
/* Validate parameters, and convert MPI object handles to object pointers */
# ifdef HAVE_ERROR_CHECKING
@@ -148,19 +149,19 @@ int MPIX_Comm_agree(MPI_Comm comm, int *flag)
}
MPID_END_ERROR_CHECKS;
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
}
#else
{
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
}
#endif
@@ -171,7 +172,7 @@ int MPIX_Comm_agree(MPI_Comm comm, int *flag)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_COMM_AGREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIX_COMM_AGREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_compare.c b/src/mpi/comm/comm_compare.c
index 0cc5788..274e63e 100644
--- a/src/mpi/comm/comm_compare.c
+++ b/src/mpi/comm/comm_compare.c
@@ -71,14 +71,14 @@ this routine is only thread-safe.)
int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr1 = NULL;
- MPID_Comm *comm_ptr2 = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_COMPARE);
+ MPIR_Comm *comm_ptr1 = NULL;
+ MPIR_Comm *comm_ptr2 = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_COMPARE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_COMPARE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_COMPARE);
# ifdef HAVE_ERROR_CHECKING
{
@@ -92,8 +92,8 @@ int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
# endif /* HAVE_ERROR_CHECKING */
/* Get handles to MPI objects. */
- MPID_Comm_get_ptr( comm1, comm_ptr1 );
- MPID_Comm_get_ptr( comm2, comm_ptr2 );
+ MPIR_Comm_get_ptr( comm1, comm_ptr1 );
+ MPIR_Comm_get_ptr( comm2, comm_ptr2 );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -101,9 +101,9 @@ int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr1, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr1, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
- MPID_Comm_valid_ptr( comm_ptr2, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr2, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL( result, "result", mpi_errno );
}
@@ -118,8 +118,8 @@ int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
else if (comm1 == comm2) {
*result = MPI_IDENT;
}
- else if (comm_ptr1->comm_kind == MPID_INTRACOMM) {
- MPID_Group *group_ptr1, *group_ptr2;
+ else if (comm_ptr1->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ MPIR_Group *group_ptr1, *group_ptr2;
mpi_errno = MPIR_Comm_group_impl(comm_ptr1, &group_ptr1);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -139,8 +139,8 @@ int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
else {
/* INTER_COMM */
int lresult, rresult;
- MPID_Group *group_ptr1, *group_ptr2;
- MPID_Group *rgroup_ptr1, *rgroup_ptr2;
+ MPIR_Group *group_ptr1, *group_ptr2;
+ MPIR_Group *rgroup_ptr1, *rgroup_ptr2;
/* Get the groups and see what their relationship is */
mpi_errno = MPIR_Comm_group_impl(comm_ptr1, &group_ptr1);
@@ -179,7 +179,7 @@ int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_COMPARE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_COMPARE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_create.c b/src/mpi/comm/comm_create.c
index 9edeeab..7540e65 100644
--- a/src/mpi/comm/comm_create.c
+++ b/src/mpi/comm/comm_create.c
@@ -22,8 +22,8 @@ int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) __attribu
/* prototypes to make the compiler happy in the case that PMPI_LOCAL expands to
* nothing instead of "static" */
-PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
- MPID_Comm **newcomm_ptr);
+PMPI_LOCAL int MPIR_Comm_create_inter(MPIR_Comm *comm_ptr, MPIR_Group *group_ptr,
+ MPIR_Comm **newcomm_ptr);
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
@@ -38,29 +38,29 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
* Ownership of the (*mapping_out) array is transferred to the caller who is
* responsible for freeing it. */
#undef FUNCNAME
-#define FUNCNAME MPIR_Comm_create_calculate_mapping
+#define FUNCNAME MPII_Comm_create_calculate_mapping
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_create_calculate_mapping(MPID_Group *group_ptr,
- MPID_Comm *comm_ptr,
+int MPII_Comm_create_calculate_mapping(MPIR_Group *group_ptr,
+ MPIR_Comm *comm_ptr,
int **mapping_out,
- MPID_Comm **mapping_comm)
+ MPIR_Comm **mapping_comm)
{
int mpi_errno = MPI_SUCCESS;
int subsetOfWorld = 0;
int i, j;
int n;
int *mapping=0;
- MPIU_CHKPMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING);
*mapping_out = NULL;
*mapping_comm = comm_ptr;
n = group_ptr->size;
- MPIU_CHKPMEM_MALLOC(mapping,int*,n*sizeof(int),mpi_errno,"mapping");
+ MPIR_CHKPMEM_MALLOC(mapping,int*,n*sizeof(int),mpi_errno,"mapping");
/* Make sure that the processes for this group are contained within
the input communicator. Also identify the mapping from the ranks of
@@ -76,10 +76,10 @@ int MPIR_Comm_create_calculate_mapping(MPID_Group *group_ptr,
*/
/* we examine the group's lpids in both the intracomm and non-comm_world cases */
- MPIR_Group_setup_lpid_list( group_ptr );
+ MPII_Group_setup_lpid_list( group_ptr );
/* Optimize for groups contained within MPI_COMM_WORLD. */
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
int wsize;
subsetOfWorld = 1;
wsize = MPIR_Process.comm_world->local_size;
@@ -87,8 +87,8 @@ int MPIR_Comm_create_calculate_mapping(MPID_Group *group_ptr,
int g_lpid = group_ptr->lrank_to_lpid[i].lpid;
/* This mapping is relative to comm world */
- MPIU_DBG_MSG_FMT(COMM,VERBOSE,
- (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM,VERBOSE,
+ (MPL_DBG_FDEST,
"comm-create - mapping into world[%d] = %d",
i, g_lpid ));
if (g_lpid < wsize) {
@@ -100,7 +100,7 @@ int MPIR_Comm_create_calculate_mapping(MPID_Group *group_ptr,
}
}
}
- MPIU_DBG_MSG_D(COMM,VERBOSE, "subsetOfWorld=%d", subsetOfWorld );
+ MPL_DBG_MSG_D(MPIR_DBG_COMM,VERBOSE, "subsetOfWorld=%d", subsetOfWorld );
if (subsetOfWorld) {
# ifdef HAVE_ERROR_CHECKING
{
@@ -134,16 +134,16 @@ int MPIR_Comm_create_calculate_mapping(MPID_Group *group_ptr,
}
}
- MPIU_Assert(mapping != NULL);
+ MPIR_Assert(mapping != NULL);
*mapping_out = mapping;
MPL_VG_CHECK_MEM_IS_DEFINED(*mapping_out, n * sizeof(**mapping_out));
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -155,29 +155,25 @@ fn_fail:
* function. The caller is responsible for their storage and will
* need to retain them till Comm_commit. */
#undef FUNCNAME
-#define FUNCNAME MPIR_Comm_create_map
+#define FUNCNAME MPII_Comm_create_map
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_create_map(int local_n,
+int MPII_Comm_create_map(int local_n,
int remote_n,
int *local_mapping,
int *remote_mapping,
- MPID_Comm *mapping_comm,
- MPID_Comm *newcomm)
+ MPIR_Comm *mapping_comm,
+ MPIR_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Comm_map_irregular(newcomm, mapping_comm, local_mapping,
- local_n, MPIR_COMM_MAP_DIR_L2L, NULL);
- if (mapping_comm->comm_kind == MPID_INTERCOMM) {
+ local_n, MPIR_COMM_MAP_DIR__L2L, NULL);
+ if (mapping_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
MPIR_Comm_map_irregular(newcomm, mapping_comm, remote_mapping,
- remote_n, MPIR_COMM_MAP_DIR_R2R, NULL);
+ remote_n, MPIR_COMM_MAP_DIR__R2R, NULL);
}
-
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
@@ -187,18 +183,18 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
/* comm create impl for intracommunicators, assumes that the standard error
* checking has already taken place in the calling function */
-int MPIR_Comm_create_intra(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
- MPID_Comm **newcomm_ptr)
+int MPIR_Comm_create_intra(MPIR_Comm *comm_ptr, MPIR_Group *group_ptr,
+ MPIR_Comm **newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Context_id_t new_context_id = 0;
+ MPIR_Context_id_t new_context_id = 0;
int *mapping = NULL;
int n;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_INTRA);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_INTRA);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_CREATE_INTRA);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_CREATE_INTRA);
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
n = group_ptr->size;
*newcomm_ptr = NULL;
@@ -213,12 +209,12 @@ int MPIR_Comm_create_intra(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
mpi_errno = MPIR_Get_contextid_sparse( comm_ptr, &new_context_id,
group_ptr->rank == MPI_UNDEFINED );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(new_context_id != 0);
+ MPIR_Assert(new_context_id != 0);
if (group_ptr->rank != MPI_UNDEFINED) {
- MPID_Comm *mapping_comm = NULL;
+ MPIR_Comm *mapping_comm = NULL;
- mpi_errno = MPIR_Comm_create_calculate_mapping(group_ptr, comm_ptr,
+ mpi_errno = MPII_Comm_create_calculate_mapping(group_ptr, comm_ptr,
&mapping, &mapping_comm);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -243,7 +239,7 @@ int MPIR_Comm_create_intra(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
/* Setup the communicator's network address mapping. This is for the remote group,
which is the same as the local group for intracommunicators */
- mpi_errno = MPIR_Comm_create_map(n, 0,
+ mpi_errno = MPII_Comm_create_map(n, 0,
mapping,
NULL,
mapping_comm,
@@ -260,9 +256,9 @@ int MPIR_Comm_create_intra(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
fn_exit:
if (mapping)
- MPIU_Free(mapping);
+ MPL_free(mapping);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_CREATE_INTRA);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_CREATE_INTRA);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
@@ -283,23 +279,23 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
/* comm create impl for intercommunicators, assumes that the standard error
* checking has already taken place in the calling function */
-PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
- MPID_Comm **newcomm_ptr)
+PMPI_LOCAL int MPIR_Comm_create_inter(MPIR_Comm *comm_ptr, MPIR_Group *group_ptr,
+ MPIR_Comm **newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Context_id_t new_context_id;
+ MPIR_Context_id_t new_context_id;
int *mapping = NULL;
int *remote_mapping = NULL;
- MPID_Comm *mapping_comm = NULL;
+ MPIR_Comm *mapping_comm = NULL;
int remote_size = -1;
int rinfo[2];
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_INTER);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_INTER);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_CREATE_INTER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_CREATE_INTER);
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
/* Create a new communicator from the specified group members */
@@ -311,14 +307,14 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
/* In the multi-threaded case, MPIR_Get_contextid_sparse assumes that the
calling routine already holds the single criticial section */
if (!comm_ptr->local_comm) {
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
}
mpi_errno = MPIR_Get_contextid_sparse( comm_ptr->local_comm, &new_context_id, FALSE );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(new_context_id != 0);
- MPIU_Assert(new_context_id != comm_ptr->recvcontext_id);
+ MPIR_Assert(new_context_id != 0);
+ MPIR_Assert(new_context_id != comm_ptr->recvcontext_id);
- mpi_errno = MPIR_Comm_create_calculate_mapping(group_ptr, comm_ptr,
+ mpi_errno = MPII_Comm_create_calculate_mapping(group_ptr, comm_ptr,
&mapping, &mapping_comm);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -366,7 +362,7 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
}
remote_size = rinfo[1];
- MPIU_CHKLMEM_MALLOC(remote_mapping,int*,
+ MPIR_CHKLMEM_MALLOC(remote_mapping,int*,
remote_size*sizeof(int),
mpi_errno,"remote_mapping");
@@ -377,10 +373,10 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
if (mpi_errno) { MPIR_ERR_POP( mpi_errno ); }
/* Broadcast to the other members of the local group */
- mpi_errno = MPIR_Bcast_impl( rinfo, 2, MPI_INT, 0,
+ mpi_errno = MPID_Bcast( rinfo, 2, MPI_INT, 0,
comm_ptr->local_comm, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPIR_Bcast_impl( remote_mapping, remote_size, MPI_INT, 0,
+ mpi_errno = MPID_Bcast( remote_mapping, remote_size, MPI_INT, 0,
comm_ptr->local_comm, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
@@ -388,7 +384,7 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
else {
/* The other processes */
/* Broadcast to the other members of the local group */
- mpi_errno = MPIR_Bcast_impl( rinfo, 2, MPI_INT, 0,
+ mpi_errno = MPID_Bcast( rinfo, 2, MPI_INT, 0,
comm_ptr->local_comm, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
@@ -396,16 +392,16 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
(*newcomm_ptr)->context_id = rinfo[0];
}
remote_size = rinfo[1];
- MPIU_CHKLMEM_MALLOC(remote_mapping,int*,
+ MPIR_CHKLMEM_MALLOC(remote_mapping,int*,
remote_size*sizeof(int),
mpi_errno,"remote_mapping");
- mpi_errno = MPIR_Bcast_impl( remote_mapping, remote_size, MPI_INT, 0,
+ mpi_errno = MPID_Bcast( remote_mapping, remote_size, MPI_INT, 0,
comm_ptr->local_comm, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
}
- MPIU_Assert(remote_size >= 0);
+ MPIR_Assert(remote_size >= 0);
if (group_ptr->rank != MPI_UNDEFINED) {
(*newcomm_ptr)->remote_size = remote_size;
@@ -413,7 +409,7 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
the network address mapping. */
/* Setup the communicator's network addresses from the local mapping. */
- mpi_errno = MPIR_Comm_create_map(group_ptr->size,
+ mpi_errno = MPII_Comm_create_map(group_ptr->size,
remote_size,
mapping,
remote_mapping,
@@ -444,11 +440,11 @@ PMPI_LOCAL int MPIR_Comm_create_inter(MPID_Comm *comm_ptr, MPID_Group *group_ptr
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
if (mapping)
- MPIU_Free(mapping);
+ MPL_free(mapping);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_CREATE_INTER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_CREATE_INTER);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -485,14 +481,14 @@ Output Parameters:
int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
- MPID_Group *group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_CREATE);
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_Group *group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_CREATE);
/* Validate parameters, and convert MPI object handles to object pointers */
# ifdef HAVE_ERROR_CHECKING
@@ -503,12 +499,12 @@ int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm)
}
MPID_END_ERROR_CHECKS;
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
/* only test for MPI_GROUP_NULL after attempting to convert the comm
@@ -517,42 +513,42 @@ int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm)
}
MPID_END_ERROR_CHECKS;
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
MPID_BEGIN_ERROR_CHECKS;
{
/* Check the group ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
}
# else
{
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
}
# endif
/* ... body of routine ... */
- if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
mpi_errno = MPIR_Comm_create_intra(comm_ptr, group_ptr, &newcomm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else {
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
mpi_errno = MPIR_Comm_create_inter(comm_ptr, group_ptr, &newcomm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
if (newcomm_ptr)
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
else
*newcomm = MPI_COMM_NULL;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_create_group.c b/src/mpi/comm/comm_create_group.c
index 545a83e..9476af9 100644
--- a/src/mpi/comm/comm_create_group.c
+++ b/src/mpi/comm/comm_create_group.c
@@ -33,18 +33,18 @@ int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *new
#define FCNAME MPL_QUOTE(FUNCNAME)
/* comm create group impl; assumes that the standard error checking
* has already taken place in the calling function */
-int MPIR_Comm_create_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr, int tag,
- MPID_Comm ** newcomm_ptr)
+int MPIR_Comm_create_group(MPIR_Comm * comm_ptr, MPIR_Group * group_ptr, int tag,
+ MPIR_Comm ** newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Context_id_t new_context_id = 0;
+ MPIR_Context_id_t new_context_id = 0;
int *mapping = NULL;
int n;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_GROUP);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_CREATE_GROUP);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE_GROUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_CREATE_GROUP);
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
n = group_ptr->size;
*newcomm_ptr = NULL;
@@ -52,16 +52,16 @@ int MPIR_Comm_create_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr, int tag
/* Create a new communicator from the specified group members */
if (group_ptr->rank != MPI_UNDEFINED) {
- MPID_Comm *mapping_comm = NULL;
+ MPIR_Comm *mapping_comm = NULL;
/* For this routine, creation of the id is collective over the input
*group*, so processes not in the group do not participate. */
mpi_errno = MPIR_Get_contextid_sparse_group( comm_ptr, group_ptr, tag, &new_context_id, 0 );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(new_context_id != 0);
+ MPIR_Assert(new_context_id != 0);
- mpi_errno = MPIR_Comm_create_calculate_mapping(group_ptr, comm_ptr,
+ mpi_errno = MPII_Comm_create_calculate_mapping(group_ptr, comm_ptr,
&mapping, &mapping_comm);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -86,7 +86,7 @@ int MPIR_Comm_create_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr, int tag
/* Setup the communicator's vc table. This is for the remote group,
which is the same as the local group for intracommunicators */
- mpi_errno = MPIR_Comm_create_map(n, 0,
+ mpi_errno = MPII_Comm_create_map(n, 0,
mapping,
NULL,
mapping_comm,
@@ -103,9 +103,9 @@ int MPIR_Comm_create_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr, int tag
fn_exit:
if (mapping)
- MPIU_Free(mapping);
+ MPL_free(mapping);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_CREATE_GROUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_CREATE_GROUP);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
@@ -152,14 +152,14 @@ Output Parameters:
int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm * newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
- MPID_Group *group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_CREATE_GROUP);
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_Group *group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_CREATE_GROUP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_CREATE_GROUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_CREATE_GROUP);
/* Validate parameters, and convert MPI object handles to object pointers */
# ifdef HAVE_ERROR_CHECKING
@@ -170,12 +170,12 @@ int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm * ne
}
MPID_END_ERROR_CHECKS;
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_COMM_INTRA(comm_ptr, mpi_errno);
@@ -187,20 +187,20 @@ int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm * ne
}
MPID_END_ERROR_CHECKS;
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
MPID_BEGIN_ERROR_CHECKS;
{
/* Check the group ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
}
# else
{
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
}
# endif
@@ -209,13 +209,13 @@ int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm * ne
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (newcomm_ptr)
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
else
*newcomm = MPI_COMM_NULL;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_CREATE_GROUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_CREATE_GROUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_dup.c b/src/mpi/comm/comm_dup.c
index 725b253..dfc080f 100644
--- a/src/mpi/comm/comm_dup.c
+++ b/src/mpi/comm/comm_dup.c
@@ -30,10 +30,10 @@ int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) __attribute__((weak,alias("PM
#define FUNCNAME MPIR_Comm_dup_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_dup_impl(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr)
+int MPIR_Comm_dup_impl(MPIR_Comm *comm_ptr, MPIR_Comm **newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Attribute *new_attributes = 0;
+ MPIR_Attribute *new_attributes = 0;
/* Copy attributes, executing the attribute copy functions */
/* This accesses the attribute dup function through the perprocess
@@ -53,7 +53,7 @@ int MPIR_Comm_dup_impl(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr)
/* We must use the local size, because this is compared to the
rank of the process in the communicator. For intercomms,
this must be the local size */
- mpi_errno = MPIR_Comm_copy( comm_ptr, comm_ptr->local_size, newcomm_ptr );
+ mpi_errno = MPII_Comm_copy( comm_ptr, comm_ptr->local_size, newcomm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
(*newcomm_ptr)->attributes = new_attributes;
@@ -119,13 +119,13 @@ Notes:
int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_DUP);
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_DUP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_DUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_DUP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -139,7 +139,7 @@ int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -147,7 +147,7 @@ int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(newcomm, "newcomm", mpi_errno);
@@ -161,11 +161,11 @@ int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
mpi_errno = MPIR_Comm_dup_impl(comm_ptr, &newcomm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_DUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_DUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_dup_with_info.c b/src/mpi/comm/comm_dup_with_info.c
index a3542ec..03ba68a 100644
--- a/src/mpi/comm/comm_dup_with_info.c
+++ b/src/mpi/comm/comm_dup_with_info.c
@@ -30,8 +30,8 @@ int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm) __at
#define FUNCNAME MPIR_Comm_dup_with_info_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_dup_with_info_impl(MPID_Comm * comm_ptr, MPID_Info * info_ptr,
- MPID_Comm ** newcomm_p_p)
+int MPIR_Comm_dup_with_info_impl(MPIR_Comm * comm_ptr, MPIR_Info * info_ptr,
+ MPIR_Comm ** newcomm_p_p)
{
int mpi_errno = MPI_SUCCESS;
@@ -88,14 +88,14 @@ Notes:
int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_DUP_WITH_INFO);
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_DUP_WITH_INFO);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_DUP_WITH_INFO);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_DUP_WITH_INFO);
/* Validate parameters, especially handles needing to be converted */
#ifdef HAVE_ERROR_CHECKING
@@ -109,8 +109,8 @@ int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm)
#endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
- MPID_Info_get_ptr(info, info_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Info_get_ptr(info, info_ptr);
/* Validate parameters and objects (post conversion) */
#ifdef HAVE_ERROR_CHECKING
@@ -118,7 +118,7 @@ int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(newcomm, "newcomm", mpi_errno);
@@ -132,11 +132,11 @@ int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm)
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_DUP_WITH_INFO);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_DUP_WITH_INFO);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_failure_ack.c b/src/mpi/comm/comm_failure_ack.c
index 94f3bc5..ba1fd40 100644
--- a/src/mpi/comm/comm_failure_ack.c
+++ b/src/mpi/comm/comm_failure_ack.c
@@ -53,13 +53,13 @@ Notes:
int MPIX_Comm_failure_ack( MPI_Comm comm )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_COMM_FAILURE_ACK);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIX_COMM_FAILURE_ACK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_COMM_FAILURE_ACK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIX_COMM_FAILURE_ACK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,7 +73,7 @@ int MPIX_Comm_failure_ack( MPI_Comm comm )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects(post conversion */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPIX_Comm_failure_ack( MPI_Comm comm )
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -97,7 +97,7 @@ int MPIX_Comm_failure_ack( MPI_Comm comm )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_COMM_FAILURE_ACK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIX_COMM_FAILURE_ACK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_failure_get_acked.c b/src/mpi/comm/comm_failure_get_acked.c
index f16b3bc..a7e53db 100644
--- a/src/mpi/comm/comm_failure_get_acked.c
+++ b/src/mpi/comm/comm_failure_get_acked.c
@@ -56,14 +56,14 @@ Notes:
int MPIX_Comm_failure_get_acked( MPI_Comm comm, MPI_Group *failedgrp )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Group *group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Group *group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +77,7 @@ int MPIX_Comm_failure_get_acked( MPI_Comm comm, MPI_Group *failedgrp )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects(post conversion */
# ifdef HAVE_ERROR_CHECKING
@@ -85,7 +85,7 @@ int MPIX_Comm_failure_get_acked( MPI_Comm comm, MPI_Group *failedgrp )
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -101,7 +101,7 @@ int MPIX_Comm_failure_get_acked( MPI_Comm comm, MPI_Group *failedgrp )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_free.c b/src/mpi/comm/comm_free.c
index ba2cedc..d6354a0 100644
--- a/src/mpi/comm/comm_free.c
+++ b/src/mpi/comm/comm_free.c
@@ -30,7 +30,7 @@ int MPI_Comm_free(MPI_Comm *comm) __attribute__((weak,alias("PMPI_Comm_free")));
#define FUNCNAME MPIR_Comm_free_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_free_impl(MPID_Comm * comm_ptr)
+int MPIR_Comm_free_impl(MPIR_Comm * comm_ptr)
{
return MPIR_Comm_release(comm_ptr);
}
@@ -77,13 +77,13 @@ disallows freeing a null communicator. The text from the standard is:
int MPI_Comm_free(MPI_Comm *comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_FREE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -97,7 +97,7 @@ int MPI_Comm_free(MPI_Comm *comm)
# endif /* HAVE_ERROR_CHECKING */
/* Get handles to MPI objects. */
- MPID_Comm_get_ptr( *comm, comm_ptr );
+ MPIR_Comm_get_ptr( *comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -105,7 +105,7 @@ int MPI_Comm_free(MPI_Comm *comm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
/* Cannot free the predefined communicators */
@@ -131,7 +131,7 @@ int MPI_Comm_free(MPI_Comm *comm)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_get_info.c b/src/mpi/comm/comm_get_info.c
index 0c33785..8858ce4 100644
--- a/src/mpi/comm/comm_get_info.c
+++ b/src/mpi/comm/comm_get_info.c
@@ -6,7 +6,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Comm_get_info */
#if defined(HAVE_PRAGMA_WEAK)
@@ -30,12 +30,12 @@ int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info) __attribute__((weak,alias("
#define FUNCNAME MPIR_Comm_get_info_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_get_info_impl(MPID_Comm * comm_ptr, MPID_Info ** info_p_p)
+int MPIR_Comm_get_info_impl(MPIR_Comm * comm_ptr, MPIR_Info ** info_p_p)
{
int mpi_errno = MPI_SUCCESS;
/* Allocate an empty info object */
- mpi_errno = MPIU_Info_alloc(info_p_p);
+ mpi_errno = MPIR_Info_alloc(info_p_p);
if (mpi_errno != MPI_SUCCESS)
goto fn_fail;
@@ -78,14 +78,14 @@ Output Parameters:
int MPI_Comm_get_info(MPI_Comm comm, MPI_Info * info_used)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Info *info_used_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_GET_INFO);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Info *info_used_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_GET_INFO);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_GET_INFO);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_GET_INFO);
/* Validate parameters, especially handles needing to be converted */
#ifdef HAVE_ERROR_CHECKING
@@ -99,7 +99,7 @@ int MPI_Comm_get_info(MPI_Comm comm, MPI_Info * info_used)
#endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
#ifdef HAVE_ERROR_CHECKING
@@ -107,7 +107,7 @@ int MPI_Comm_get_info(MPI_Comm comm, MPI_Info * info_used)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -125,7 +125,7 @@ int MPI_Comm_get_info(MPI_Comm comm, MPI_Info * info_used)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_GET_INFO);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_GET_INFO);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_get_name.c b/src/mpi/comm/comm_get_name.c
index 0d05f5a..b6dc89d 100644
--- a/src/mpi/comm/comm_get_name.c
+++ b/src/mpi/comm/comm_get_name.c
@@ -25,10 +25,10 @@ int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen) __attribut
#undef MPI_Comm_get_name
#define MPI_Comm_get_name PMPI_Comm_get_name
-void MPIR_Comm_get_name_impl(MPID_Comm *comm_ptr, char *comm_name, int *resultlen)
+void MPIR_Comm_get_name_impl(MPIR_Comm *comm_ptr, char *comm_name, int *resultlen)
{
/* The user must allocate a large enough section of memory */
- MPIU_Strncpy(comm_name, comm_ptr->name, MPI_MAX_OBJECT_NAME);
+ MPL_strncpy(comm_name, comm_ptr->name, MPI_MAX_OBJECT_NAME);
*resultlen = (int)strlen(comm_name);
return;
}
@@ -66,12 +66,12 @@ Output Parameters:
int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_GET_NAME);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_GET_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_GET_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_GET_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -85,14 +85,14 @@ int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen)
# endif /* HAVE_ERROR_CHECKING */
/* Validate parameters and objects (post conversion) */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
@@ -112,7 +112,7 @@ int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_GET_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_GET_NAME);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/comm/comm_group.c b/src/mpi/comm/comm_group.c
index 9976164..5b502e3 100644
--- a/src/mpi/comm/comm_group.c
+++ b/src/mpi/comm/comm_group.c
@@ -30,14 +30,14 @@ int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) __attribute__((weak,alias("P
#define FUNCNAME MPIR_Comm_group_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_group_impl(MPID_Comm *comm_ptr, MPID_Group **group_ptr)
+int MPIR_Comm_group_impl(MPIR_Comm *comm_ptr, MPIR_Group **group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int i, lpid, n;
int comm_world_size = MPIR_Process.comm_world->local_size;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_GROUP_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_GROUP_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_GROUP_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_GROUP_IMPL);
/* Create a group if necessary and populate it with the
local process ids */
if (!comm_ptr->local_group) {
@@ -72,7 +72,7 @@ int MPIR_Comm_group_impl(MPID_Comm *comm_ptr, MPID_Group **group_ptr)
MPIR_Group_add_ref( comm_ptr->local_group );
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_GROUP_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_GROUP_IMPL);
return mpi_errno;
fn_fail:
@@ -109,14 +109,14 @@ Notes:
int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Group *group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_GROUP);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Group *group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_GROUP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_GROUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_GROUP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -131,7 +131,7 @@ int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -139,7 +139,7 @@ int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -155,7 +155,7 @@ int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_GROUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_GROUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_idup.c b/src/mpi/comm/comm_idup.c
index 10f2ce5..75c427b 100644
--- a/src/mpi/comm/comm_idup.c
+++ b/src/mpi/comm/comm_idup.c
@@ -30,10 +30,10 @@ int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request) __attr
#define FUNCNAME MPIR_Comm_idup_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_idup_impl(MPID_Comm *comm_ptr, MPID_Comm **newcommp, MPID_Request **reqp)
+int MPIR_Comm_idup_impl(MPIR_Comm *comm_ptr, MPIR_Comm **newcommp, MPIR_Request **reqp)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Attribute *new_attributes = 0;
+ MPIR_Attribute *new_attributes = 0;
/* Copy attributes, executing the attribute copy functions */
/* This accesses the attribute dup function through the perprocess
@@ -48,14 +48,14 @@ int MPIR_Comm_idup_impl(MPID_Comm *comm_ptr, MPID_Comm **newcommp, MPID_Request
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- mpi_errno = MPIR_Comm_copy_data(comm_ptr, newcommp);
+ mpi_errno = MPII_Comm_copy_data(comm_ptr, newcommp);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
(*newcommp)->attributes = new_attributes;
/* We now have a mostly-valid new communicator, so begin the process of
* allocating a context ID to use for actual communication */
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
mpi_errno = MPIR_Get_intercomm_contextid_nonblock(comm_ptr, *newcommp, reqp);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -95,13 +95,13 @@ Output Parameters:
int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPID_Request *dreq = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_IDUP);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_Request *dreq = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_IDUP);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_IDUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_IDUP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -116,14 +116,14 @@ int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request, "request", mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -143,13 +143,13 @@ int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request)
/* NOTE: this is a publication for most of the comm, but the context ID
* won't be valid yet, so we must "republish" relative to the request
* handle at request completion time. */
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
*request = dreq->handle;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_IDUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_IDUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_rank.c b/src/mpi/comm/comm_rank.c
index 97d07aa..8c4b2e1 100644
--- a/src/mpi/comm/comm_rank.c
+++ b/src/mpi/comm/comm_rank.c
@@ -52,13 +52,13 @@ Output Parameters:
int MPI_Comm_rank( MPI_Comm comm, int *rank )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = 0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_RANK);
+ MPIR_Comm *comm_ptr = 0;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_RANK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_RANK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_RANK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -72,7 +72,7 @@ int MPI_Comm_rank( MPI_Comm comm, int *rank )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPI_Comm_rank( MPI_Comm comm, int *rank )
{
MPIR_ERRTEST_ARGNULL(rank,"rank",mpi_errno);
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not value, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -98,7 +98,7 @@ int MPI_Comm_rank( MPI_Comm comm, int *rank )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_RANK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_RANK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_remote_group.c b/src/mpi/comm/comm_remote_group.c
index 0e45d7a..0e4ee4e 100644
--- a/src/mpi/comm/comm_remote_group.c
+++ b/src/mpi/comm/comm_remote_group.c
@@ -30,13 +30,13 @@ int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) __attribute__((weak,a
#define FUNCNAME MPIR_Comm_remote_group_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_remote_group_impl(MPID_Comm *comm_ptr, MPID_Group **group_ptr)
+int MPIR_Comm_remote_group_impl(MPIR_Comm *comm_ptr, MPIR_Group **group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int i, lpid, n;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL);
/* Create a group and populate it with the local process ids */
if (!comm_ptr->remote_group) {
n = comm_ptr->remote_size;
@@ -59,7 +59,7 @@ int MPIR_Comm_remote_group_impl(MPID_Comm *comm_ptr, MPID_Group **group_ptr)
MPIR_Group_add_ref( comm_ptr->remote_group );
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL);
return mpi_errno;
fn_fail:
@@ -99,14 +99,14 @@ The user is responsible for freeing the group when it is no longer needed.
int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Group *group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_REMOTE_GROUP);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Group *group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_REMOTE_GROUP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_REMOTE_GROUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_REMOTE_GROUP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -120,7 +120,7 @@ int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -128,9 +128,9 @@ int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
- if (comm_ptr && comm_ptr->comm_kind != MPID_INTERCOMM) {
+ if (comm_ptr && comm_ptr->comm_kind != MPIR_COMM_KIND__INTERCOMM) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_COMM,
"**commnotinter", 0 );
@@ -151,7 +151,7 @@ int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_REMOTE_GROUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_REMOTE_GROUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_remote_size.c b/src/mpi/comm/comm_remote_size.c
index 853d7b3..c99855e 100644
--- a/src/mpi/comm/comm_remote_size.c
+++ b/src/mpi/comm/comm_remote_size.c
@@ -55,12 +55,12 @@ Output Parameters:
int MPI_Comm_remote_size(MPI_Comm comm, int *size)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_REMOTE_SIZE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_REMOTE_SIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_REMOTE_SIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_REMOTE_SIZE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -74,7 +74,7 @@ int MPI_Comm_remote_size(MPI_Comm comm, int *size)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -82,9 +82,9 @@ int MPI_Comm_remote_size(MPI_Comm comm, int *size)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
- if (comm_ptr && comm_ptr->comm_kind != MPID_INTERCOMM) {
+ if (comm_ptr && comm_ptr->comm_kind != MPIR_COMM_KIND__INTERCOMM) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_COMM,
"**commnotinter", 0 );
@@ -104,7 +104,7 @@ int MPI_Comm_remote_size(MPI_Comm comm, int *size)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_REMOTE_SIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_REMOTE_SIZE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/comm/comm_revoke.c b/src/mpi/comm/comm_revoke.c
index 5526742..cd804ed 100644
--- a/src/mpi/comm/comm_revoke.c
+++ b/src/mpi/comm/comm_revoke.c
@@ -38,7 +38,7 @@ int MPIX_Comm_revoke(MPI_Comm comm) __attribute__((weak,alias("PMPIX_Comm_revoke
MPIX_Comm_revoke - Prevent a communicator from being used in the future
Input Parameters:
-+ comm - communicator to revoke
+. comm - communicator to revoke
Notes:
Asynchronously notifies all MPI processes associated with the communicator 'comm'.
@@ -48,18 +48,18 @@ call.
.N Fortran
.N Errors
-.N MPIX_SUCCESS
+.N MPI_SUCCESS
@*/
int MPIX_Comm_revoke(MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_COMM_REVOKE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIX_COMM_REVOKE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_COMM_REVOKE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIX_COMM_REVOKE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,7 +73,7 @@ int MPIX_Comm_revoke(MPI_Comm comm)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPIX_Comm_revoke(MPI_Comm comm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -96,7 +96,7 @@ int MPIX_Comm_revoke(MPI_Comm comm)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_COMM_REVOKE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIX_COMM_REVOKE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/comm/comm_set_info.c b/src/mpi/comm/comm_set_info.c
index 9cc1f67..ee03e8e 100644
--- a/src/mpi/comm/comm_set_info.c
+++ b/src/mpi/comm/comm_set_info.c
@@ -7,7 +7,7 @@
#include "mpiimpl.h"
#include "mpl_utlist.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Comm_set_info */
#if defined(HAVE_PRAGMA_WEAK)
@@ -31,21 +31,21 @@ int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info) __attribute__((weak,alias("P
#define FUNCNAME MPIR_Comm_set_info_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_set_info_impl(MPID_Comm * comm_ptr, MPID_Info * info_ptr)
+int MPIR_Comm_set_info_impl(MPIR_Comm * comm_ptr, MPIR_Info * info_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Info *curr_info = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_SET_INFO_IMPL);
+ MPIR_Info *curr_info = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_SET_INFO_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_SET_INFO_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_SET_INFO_IMPL);
- mpi_errno = MPIR_Comm_apply_hints(comm_ptr, info_ptr);
+ mpi_errno = MPII_Comm_apply_hints(comm_ptr, info_ptr);
if (mpi_errno != MPI_SUCCESS)
goto fn_fail;
if (comm_ptr->info == NULL) {
/* Always have at least a blank info hint. */
- mpi_errno = MPIU_Info_alloc(&(comm_ptr->info));
+ mpi_errno = MPIR_Info_alloc(&(comm_ptr->info));
if (mpi_errno != MPI_SUCCESS)
goto fn_fail;
}
@@ -62,7 +62,7 @@ int MPIR_Comm_set_info_impl(MPID_Comm * comm_ptr, MPID_Info * info_ptr)
}
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_SET_INFO_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_SET_INFO_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -98,14 +98,14 @@ Input Parameters:
int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SET_INFO);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SET_INFO);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SET_INFO);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SET_INFO);
/* Validate parameters, especially handles needing to be converted */
#ifdef HAVE_ERROR_CHECKING
@@ -119,8 +119,8 @@ int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info)
#endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
- MPID_Info_get_ptr(info, info_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Info_get_ptr(info, info_ptr);
/* Validate parameters and objects (post conversion) */
#ifdef HAVE_ERROR_CHECKING
@@ -128,7 +128,7 @@ int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -142,7 +142,7 @@ int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SET_INFO);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SET_INFO);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_set_name.c b/src/mpi/comm/comm_set_name.c
index 37b7538..6510c95 100644
--- a/src/mpi/comm/comm_set_name.c
+++ b/src/mpi/comm/comm_set_name.c
@@ -50,12 +50,12 @@ Input Parameters:
int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SET_NAME);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SET_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SET_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SET_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -69,7 +69,7 @@ int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +77,7 @@ int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL( comm_name, "comm_name", mpi_errno );
/* If comm_ptr is not valid, it will be reset to null */
@@ -89,7 +89,7 @@ int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name)
/* ... body of routine ... */
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
- MPIU_Strncpy( comm_ptr->name, comm_name, MPI_MAX_OBJECT_NAME );
+ MPL_strncpy( comm_ptr->name, comm_name, MPI_MAX_OBJECT_NAME );
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
/* ... end of body of routine ... */
@@ -97,7 +97,7 @@ int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SET_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SET_NAME);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/comm/comm_shrink.c b/src/mpi/comm/comm_shrink.c
index e9cdd1e..765001b 100644
--- a/src/mpi/comm/comm_shrink.c
+++ b/src/mpi/comm/comm_shrink.c
@@ -39,7 +39,6 @@ int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm) __attribute__((weak,alias
#ifndef MPICH_MPI_FROM_PMPI
#undef MPIX_Comm_shrink
#define MPIX_Comm_shrink PMPIX_Comm_shrink
-#endif
#undef FUNCNAME
#define FUNCNAME MPIR_Comm_shrink
@@ -47,15 +46,15 @@ int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm) __attribute__((weak,alias
#define FCNAME MPL_QUOTE(FUNCNAME)
/* comm shrink impl; assumes that standard error checking has already taken
* place in the calling function */
-int MPIR_Comm_shrink(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr)
+int MPIR_Comm_shrink(MPIR_Comm *comm_ptr, MPIR_Comm **newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *global_failed, *comm_grp, *new_group_ptr;
+ MPIR_Group *global_failed, *comm_grp, *new_group_ptr;
int attempts = 0;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_SHRINK);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_SHRINK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_SHRINK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_SHRINK);
/* TODO - Implement this function for intercommunicators */
MPIR_Comm_group_impl(comm_ptr, &comm_grp);
@@ -69,7 +68,7 @@ int MPIR_Comm_shrink(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr)
mpi_errno = MPIR_Group_difference_impl(comm_grp, global_failed, &new_group_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- if (MPID_Group_empty != global_failed) MPIR_Group_release(global_failed);
+ if (MPIR_Group_empty != global_failed) MPIR_Group_release(global_failed);
mpi_errno = MPIR_Comm_create_group(comm_ptr, new_group_ptr, MPIR_SHRINK_TAG, newcomm_ptr);
if (*newcomm_ptr == NULL) {
@@ -84,12 +83,12 @@ int MPIR_Comm_shrink(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr)
MPIR_Group_release(new_group_ptr);
if (errflag) {
- if (*newcomm_ptr != NULL && MPIU_Object_get_ref(*newcomm_ptr) > 0) {
- MPIU_Object_set_ref(*newcomm_ptr, 1);
+ if (*newcomm_ptr != NULL && MPIR_Object_get_ref(*newcomm_ptr) > 0) {
+ MPIR_Object_set_ref(*newcomm_ptr, 1);
MPIR_Comm_release(*newcomm_ptr);
}
- if (MPIU_Object_get_ref(new_group_ptr) > 0) {
- MPIU_Object_set_ref(new_group_ptr, 1);
+ if (MPIR_Object_get_ref(new_group_ptr) > 0) {
+ MPIR_Object_set_ref(new_group_ptr, 1);
MPIR_Group_release(new_group_ptr);
}
}
@@ -100,15 +99,17 @@ int MPIR_Comm_shrink(MPID_Comm *comm_ptr, MPID_Comm **newcomm_ptr)
fn_exit:
MPIR_Group_release(comm_grp);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_SHRINK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_SHRINK);
return mpi_errno;
fn_fail:
- if (*newcomm_ptr) MPIU_Object_set_ref(*newcomm_ptr, 0);
- MPIU_Object_set_ref(global_failed, 0);
- MPIU_Object_set_ref(new_group_ptr, 0);
+ if (*newcomm_ptr) MPIR_Object_set_ref(*newcomm_ptr, 0);
+ MPIR_Object_set_ref(global_failed, 0);
+ MPIR_Object_set_ref(new_group_ptr, 0);
goto fn_exit;
}
+#endif /* !defined(MPICH_MPI_FROM_PMPI) */
+
#undef FUNCNAME
#define FUNCNAME MPIX_Comm_shrink
#undef FCNAME
@@ -118,12 +119,12 @@ MPIX_Comm_shrink - Creates a new communitor from an existing communicator while
excluding failed processes
Input Parameters:
-+ comm - communicator (handle)
+. comm - communicator (handle)
Output Parameters:
. newcomm - new communicator (handle)
-.N Threadsafe
+.N ThreadSafe
.N Fortran
@@ -135,13 +136,13 @@ Output Parameters:
int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_COMM_SHRINK);
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIX_COMM_SHRINK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_COMM_SHRINK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIX_COMM_SHRINK);
/* Validate parameters, and convert MPI object handles to object pointers */
# ifdef HAVE_ERROR_CHECKING
@@ -152,19 +153,19 @@ int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm)
}
MPID_END_ERROR_CHECKS;
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
}
#else
{
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
}
#endif
@@ -173,13 +174,13 @@ int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (newcomm_ptr)
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
else
*newcomm = MPI_COMM_NULL;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_COMM_SHRINK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIX_COMM_SHRINK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_size.c b/src/mpi/comm/comm_size.c
index b8239a7..fe78d75 100644
--- a/src/mpi/comm/comm_size.c
+++ b/src/mpi/comm/comm_size.c
@@ -56,12 +56,12 @@ Notes:
int MPI_Comm_size( MPI_Comm comm, int *size )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = 0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SIZE);
+ MPIR_Comm *comm_ptr = 0;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SIZE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -75,7 +75,7 @@ int MPI_Comm_size( MPI_Comm comm, int *size )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -84,7 +84,7 @@ int MPI_Comm_size( MPI_Comm comm, int *size )
{
MPIR_ERRTEST_ARGNULL(size,"size",mpi_errno);
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -101,7 +101,7 @@ int MPI_Comm_size( MPI_Comm comm, int *size )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SIZE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/comm/comm_split.c b/src/mpi/comm/comm_split.c
index 6a489a2..ba6437a 100644
--- a/src/mpi/comm/comm_split.c
+++ b/src/mpi/comm/comm_split.c
@@ -127,35 +127,35 @@ static void MPIU_Sort_inttable( sorttype *keytable, int size )
#define FUNCNAME MPIR_Comm_split_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **newcomm_ptr)
+int MPIR_Comm_split_impl(MPIR_Comm *comm_ptr, int color, int key, MPIR_Comm **newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *local_comm_ptr;
+ MPIR_Comm *local_comm_ptr;
splittype *table, *remotetable=0;
sorttype *keytable, *remotekeytable=0;
int rank, size, remote_size, i, new_size, new_remote_size,
first_entry = 0, first_remote_entry = 0, *last_ptr;
int in_newcomm; /* TRUE iff *newcomm should be populated */
- MPIU_Context_id_t new_context_id, remote_context_id;
+ MPIR_Context_id_t new_context_id, remote_context_id;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
MPIR_Comm_map_t *mapper;
- MPIU_CHKLMEM_DECL(4);
+ MPIR_CHKLMEM_DECL(4);
rank = comm_ptr->rank;
size = comm_ptr->local_size;
remote_size = comm_ptr->remote_size;
/* Step 1: Find out what color and keys all of the processes have */
- MPIU_CHKLMEM_MALLOC(table,splittype*,size*sizeof(splittype),mpi_errno,
+ MPIR_CHKLMEM_MALLOC(table,splittype*,size*sizeof(splittype),mpi_errno,
"table");
table[rank].color = color;
table[rank].key = key;
/* Get the communicator to use in collectives on the local group of
processes */
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
if (!comm_ptr->local_comm) {
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
}
local_comm_ptr = comm_ptr->local_comm;
}
@@ -163,7 +163,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
local_comm_ptr = comm_ptr;
}
/* Gather information on the local group of processes */
- mpi_errno = MPIR_Allgather_impl( MPI_IN_PLACE, 2, MPI_INT, table, 2, MPI_INT, local_comm_ptr, &errflag );
+ mpi_errno = MPID_Allgather( MPI_IN_PLACE, 2, MPI_INT, table, 2, MPI_INT, local_comm_ptr, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
@@ -191,7 +191,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
/* If we're an intercomm, we need to do the same thing for the remote
table, as we need to know the size of the remote group of the
same color before deciding to create the communicator */
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
splittype mypair;
/* For the remote group, the situation is more complicated.
We need to find the size of our "partner" group in the
@@ -200,7 +200,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
local group - perform an (intercommunicator) all gather
of the color and rank information for the remote group.
*/
- MPIU_CHKLMEM_MALLOC(remotetable,splittype*,
+ MPIR_CHKLMEM_MALLOC(remotetable,splittype*,
remote_size*sizeof(splittype),mpi_errno,
"remotetable");
/* This is an intercommunicator allgather */
@@ -210,7 +210,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
same color */
mypair.color = color;
mypair.key = key;
- mpi_errno = MPIR_Allgather_impl( &mypair, 2, MPI_INT, remotetable, 2, MPI_INT,
+ mpi_errno = MPID_Allgather( &mypair, 2, MPI_INT, remotetable, 2, MPI_INT,
comm_ptr, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
@@ -250,22 +250,22 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
calling routine already holds the single criticial section */
mpi_errno = MPIR_Get_contextid_sparse(local_comm_ptr, &new_context_id, !in_newcomm);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(new_context_id != 0);
+ MPIR_Assert(new_context_id != 0);
/* In the intercomm case, we need to exchange the context ids */
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
if (comm_ptr->rank == 0) {
- mpi_errno = MPIC_Sendrecv( &new_context_id, 1, MPIU_CONTEXT_ID_T_DATATYPE, 0, 0,
- &remote_context_id, 1, MPIU_CONTEXT_ID_T_DATATYPE,
+ mpi_errno = MPIC_Sendrecv( &new_context_id, 1, MPIR_CONTEXT_ID_T_DATATYPE, 0, 0,
+ &remote_context_id, 1, MPIR_CONTEXT_ID_T_DATATYPE,
0, 0, comm_ptr, MPI_STATUS_IGNORE, &errflag );
if (mpi_errno) { MPIR_ERR_POP( mpi_errno ); }
- mpi_errno = MPIR_Bcast_impl( &remote_context_id, 1, MPIU_CONTEXT_ID_T_DATATYPE, 0, local_comm_ptr, &errflag );
+ mpi_errno = MPID_Bcast( &remote_context_id, 1, MPIR_CONTEXT_ID_T_DATATYPE, 0, local_comm_ptr, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
}
else {
/* Broadcast to the other members of the local group */
- mpi_errno = MPIR_Bcast_impl( &remote_context_id, 1, MPIU_CONTEXT_ID_T_DATATYPE, 0, local_comm_ptr, &errflag );
+ mpi_errno = MPID_Bcast( &remote_context_id, 1, MPIR_CONTEXT_ID_T_DATATYPE, 0, local_comm_ptr, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
}
@@ -289,7 +289,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
extract the table into a smaller array and sort that.
Also, store in the "color" entry the rank in the input communicator
of the entry. */
- MPIU_CHKLMEM_MALLOC(keytable,sorttype*,new_size*sizeof(sorttype),
+ MPIR_CHKLMEM_MALLOC(keytable,sorttype*,new_size*sizeof(sorttype),
mpi_errno,"keytable");
for (i=0; i<new_size; i++) {
keytable[i].key = table[first_entry].key;
@@ -301,8 +301,8 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
process in the input communicator */
MPIU_Sort_inttable( keytable, new_size );
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
- MPIU_CHKLMEM_MALLOC(remotekeytable,sorttype*,
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ MPIR_CHKLMEM_MALLOC(remotekeytable,sorttype*,
new_remote_size*sizeof(sorttype),
mpi_errno,"remote keytable");
for (i=0; i<new_remote_size; i++) {
@@ -316,7 +316,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
MPIU_Sort_inttable( remotekeytable, new_remote_size );
MPIR_Comm_map_irregular(*newcomm_ptr, comm_ptr, NULL,
- new_size, MPIR_COMM_MAP_DIR_L2L,
+ new_size, MPIR_COMM_MAP_DIR__L2L,
&mapper);
for (i = 0; i < new_size; i++) {
@@ -342,7 +342,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
MPIR_Comm_map_irregular(*newcomm_ptr, comm_ptr, NULL,
new_remote_size,
- MPIR_COMM_MAP_DIR_R2R, &mapper);
+ MPIR_COMM_MAP_DIR__R2R, &mapper);
for (i = 0; i < new_remote_size; i++)
mapper->src_mapping[i] = remotekeytable[i].color;
@@ -359,7 +359,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
(*newcomm_ptr)->remote_size = new_size;
MPIR_Comm_map_irregular(*newcomm_ptr, comm_ptr, NULL,
- new_size, MPIR_COMM_MAP_DIR_L2L,
+ new_size, MPIR_COMM_MAP_DIR__L2L,
&mapper);
for (i = 0; i < new_size; i++) {
@@ -382,7 +382,7 @@ int MPIR_Comm_split_impl(MPID_Comm *comm_ptr, int color, int key, MPID_Comm **ne
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -436,13 +436,13 @@ Algorithm:
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SPLIT);
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SPLIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SPLIT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SPLIT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -457,7 +457,7 @@ int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
# endif /* HAVE_ERROR_CHECKING */
/* Get handles to MPI objects. */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -465,7 +465,7 @@ int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -478,14 +478,14 @@ int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
mpi_errno = MPIR_Comm_split_impl(comm_ptr, color, key, &newcomm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (newcomm_ptr)
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
else
*newcomm = MPI_COMM_NULL;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SPLIT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SPLIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_split_type.c b/src/mpi/comm/comm_split_type.c
index b122126..1c34303 100644
--- a/src/mpi/comm/comm_split_type.c
+++ b/src/mpi/comm/comm_split_type.c
@@ -30,15 +30,54 @@ int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, M
#define FUNCNAME MPIR_Comm_split_type_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_split_type_impl(MPID_Comm * comm_ptr, int split_type, int key,
- MPID_Info * info_ptr, MPID_Comm ** newcomm_ptr)
+int MPIR_Comm_split_type_impl(MPIR_Comm * comm_ptr, int split_type, int key,
+ MPIR_Info * info_ptr, MPIR_Comm ** newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- /* Only MPI_COMM_TYPE_SHARED and MPI_UNDEFINED are supported */
- MPIU_Assert(split_type == MPI_COMM_TYPE_SHARED || split_type == MPI_UNDEFINED);
+ /* Only MPI_COMM_TYPE_SHARED, MPI_UNDEFINED, and
+ * NEIGHBORHOOD are supported */
+ MPIR_Assert(split_type == MPI_COMM_TYPE_SHARED ||
+ split_type == MPI_UNDEFINED ||
+ split_type == MPIX_COMM_TYPE_NEIGHBORHOOD);
+
+ if (split_type == MPIX_COMM_TYPE_NEIGHBORHOOD) {
+ int flag;
+ char hintval[MPI_MAX_INFO_VAL+1];
+
+ /* We plan on dispatching different NEIGHBORHOOD support to
+ * different parts of MPICH, based on the key provided in the
+ * info object. Right now, the one NEIGHBORHOOD we support is
+ * "nbhd_common_dirname", implementation of which lives in ROMIO */
+
+ MPIR_Info_get_impl(info_ptr, "nbhd_common_dirname", MPI_MAX_INFO_VAL, hintval,
+ &flag);
+ if (flag) {
+#ifdef HAVE_ROMIO
+ MPI_Comm dummycomm;
+ MPIR_Comm * dummycomm_ptr;
+
+ mpi_errno = MPIR_Comm_split_filesystem(comm_ptr->handle, key,
+ hintval, &dummycomm);
+ MPIR_Comm_get_ptr(dummycomm, dummycomm_ptr);
+ *newcomm_ptr = dummycomm_ptr;
+
+ goto fn_exit;
+#endif
+ /* fall through to the "not supported" case if ROMIO was not
+ * enabled for some reason */
+ }
+ /* we don't work with other hints yet, but if we did (e.g.
+ * nbhd_network, nbhd_partition), we'd do so here */
+
+ /* In the mean time, the user passed in COMM_TYPE_NEIGHBORHOOD
+ * but did not give us an info we know how to work with.
+ * Throw up our hands and treat it like UNDEFINED. This will
+ * result in MPI_COMM_NULL being returned to the user. */
+ split_type = MPI_UNDEFINED;
+ }
- if (MPID_Comm_fns == NULL || MPID_Comm_fns->split_type == NULL) {
+ if (MPIR_Comm_fns == NULL || MPIR_Comm_fns->split_type == NULL) {
int color = (split_type == MPI_COMM_TYPE_SHARED) ? comm_ptr->rank : MPI_UNDEFINED;
/* The default implementation is to either pass MPI_UNDEFINED
@@ -48,7 +87,7 @@ int MPIR_Comm_split_type_impl(MPID_Comm * comm_ptr, int split_type, int key,
}
else {
mpi_errno =
- MPID_Comm_fns->split_type(comm_ptr, split_type, key, info_ptr, newcomm_ptr);
+ MPIR_Comm_fns->split_type(comm_ptr, split_type, key, info_ptr, newcomm_ptr);
}
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -96,14 +135,14 @@ int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info,
MPI_Comm * newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SPLIT_TYPE);
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SPLIT_TYPE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SPLIT_TYPE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SPLIT_TYPE);
/* Validate parameters, especially handles needing to be converted */
#ifdef HAVE_ERROR_CHECKING
@@ -118,8 +157,8 @@ int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info,
#endif /* HAVE_ERROR_CHECKING */
/* Get handles to MPI objects. */
- MPID_Comm_get_ptr(comm, comm_ptr);
- MPID_Info_get_ptr(info, info_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Info_get_ptr(info, info_ptr);
/* Validate parameters and objects (post conversion) */
#ifdef HAVE_ERROR_CHECKING
@@ -127,7 +166,7 @@ int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno)
goto fn_fail;
@@ -142,14 +181,14 @@ int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info,
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
if (newcomm_ptr)
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
else
*newcomm = MPI_COMM_NULL;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SPLIT_TYPE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SPLIT_TYPE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/comm_test_inter.c b/src/mpi/comm/comm_test_inter.c
index 46878af..30e973c 100644
--- a/src/mpi/comm/comm_test_inter.c
+++ b/src/mpi/comm/comm_test_inter.c
@@ -54,12 +54,12 @@ Output Parameters:
int MPI_Comm_test_inter(MPI_Comm comm, int *flag)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_TEST_INTER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_TEST_INTER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_TEST_INTER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_TEST_INTER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,7 +73,7 @@ int MPI_Comm_test_inter(MPI_Comm comm, int *flag)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPI_Comm_test_inter(MPI_Comm comm, int *flag)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(flag,"flag",mpi_errno);
@@ -92,14 +92,14 @@ int MPI_Comm_test_inter(MPI_Comm comm, int *flag)
/* ... body of routine ... */
- *flag = (comm_ptr->comm_kind == MPID_INTERCOMM);
+ *flag = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM);
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_TEST_INTER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_TEST_INTER);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/comm/commutil.c b/src/mpi/comm/commutil.c
index 683b4e1..47e6607 100644
--- a/src/mpi/comm/commutil.c
+++ b/src/mpi/comm/commutil.c
@@ -6,10 +6,10 @@
#include "mpiimpl.h"
#include "mpicomm.h"
-#include "mpiinfo.h" /* MPIU_Info_free */
+#include "mpir_info.h" /* MPIR_Info_free */
#include "mpl_utlist.h"
-#include "mpiu_uthash.h"
+#include "mpl_uthash.h"
/* This is the utility file for comm that contains the basic comm items
and storage management */
@@ -19,27 +19,27 @@
/* Preallocated comm objects */
/* initialized in initthread.c */
-MPID_Comm MPID_Comm_builtin[MPID_COMM_N_BUILTIN] = { {0} };
-MPID_Comm MPID_Comm_direct[MPID_COMM_PREALLOC] = { {0} };
+MPIR_Comm MPIR_Comm_builtin[MPIR_COMM_N_BUILTIN] = { {0} };
+MPIR_Comm MPIR_Comm_direct[MPID_COMM_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_Comm_mem = {
+MPIR_Object_alloc_t MPIR_Comm_mem = {
0,
0,
0,
0,
- MPID_COMM,
- sizeof(MPID_Comm),
- MPID_Comm_direct,
+ MPIR_COMM,
+ sizeof(MPIR_Comm),
+ MPIR_Comm_direct,
MPID_COMM_PREALLOC
};
/* Communicator creation functions */
-struct MPID_CommOps *MPID_Comm_fns = NULL;
+struct MPIR_Commops *MPIR_Comm_fns = NULL;
struct MPIR_Comm_hint_fn_elt {
char name[MPI_MAX_INFO_KEY];
MPIR_Comm_hint_fn_t fn;
void *state;
- UT_hash_handle hh;
+ MPL_UT_hash_handle hh;
};
static struct MPIR_Comm_hint_fn_elt *MPID_hint_fns = NULL;
@@ -68,11 +68,11 @@ static struct MPIR_Comm_hint_fn_elt *MPID_hint_fns = NULL;
* to it.
*
* !!! The resulting struct is _not_ ready for communication !!! */
-int MPIR_Comm_init(MPID_Comm * comm_p)
+int MPII_Comm_init(MPIR_Comm * comm_p)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Object_set_ref(comm_p, 1);
+ MPIR_Object_set_ref(comm_p, 1);
/* initialize local and remote sizes to -1 to allow other parts of
* the stack to detect errors more easily */
@@ -90,7 +90,7 @@ int MPIR_Comm_init(MPID_Comm * comm_p)
comm_p->name[0] = '\0';
comm_p->info = NULL;
- comm_p->hierarchy_kind = MPID_HIERARCHY_FLAT;
+ comm_p->hierarchy_kind = MPIR_COMM_HIERARCHY_KIND__FLAT;
comm_p->node_comm = NULL;
comm_p->node_roots_comm = NULL;
comm_p->intranode_table = NULL;
@@ -104,10 +104,16 @@ int MPIR_Comm_init(MPID_Comm * comm_p)
comm_p->mapper_head = NULL;
comm_p->mapper_tail = NULL;
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+ {
+ int thr_err;
+ MPID_Thread_mutex_create(&MPIR_THREAD_POBJ_COMM_MUTEX(comm_p), &thr_err);
+ MPIR_Assert(thr_err == 0);
+ }
+#endif
/* Fields not set include context_id, remote and local size, and
* kind, since different communicator construction routines need
* different values */
- fn_fail:
return mpi_errno;
}
@@ -120,30 +126,30 @@ int MPIR_Comm_init(MPID_Comm * comm_p)
#define FUNCNAME MPIR_Comm_create
#undef FCNAME
#define FCNAME "MPIR_Comm_create"
-int MPIR_Comm_create(MPID_Comm ** newcomm_ptr)
+int MPIR_Comm_create(MPIR_Comm ** newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *newptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE);
+ MPIR_Comm *newptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_CREATE);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_CREATE);
- newptr = (MPID_Comm *) MPIU_Handle_obj_alloc(&MPID_Comm_mem);
+ newptr = (MPIR_Comm *) MPIR_Handle_obj_alloc(&MPIR_Comm_mem);
MPIR_ERR_CHKANDJUMP(!newptr, mpi_errno, MPI_ERR_OTHER, "**nomem");
*newcomm_ptr = newptr;
- mpi_errno = MPIR_Comm_init(newptr);
+ mpi_errno = MPII_Comm_init(newptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* Insert this new communicator into the list of known communicators.
* Make this conditional on debugger support to match the test in
* MPIR_Comm_release . */
- MPIR_COMML_REMEMBER(newptr);
+ MPII_COMML_REMEMBER(newptr);
fn_fail:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_CREATE);
return mpi_errno;
}
@@ -152,45 +158,45 @@ int MPIR_Comm_create(MPID_Comm ** newcomm_ptr)
specified intercomm. */
/* FIXME this is an alternative constructor that doesn't use MPIR_Comm_create! */
#undef FUNCNAME
-#define FUNCNAME MPIR_Setup_intercomm_localcomm
+#define FUNCNAME MPII_Setup_intercomm_localcomm
#undef FCNAME
-#define FCNAME "MPIR_Setup_intercomm_localcomm"
-int MPIR_Setup_intercomm_localcomm(MPID_Comm * intercomm_ptr)
+#define FCNAME "MPII_Setup_intercomm_localcomm"
+int MPII_Setup_intercomm_localcomm(MPIR_Comm * intercomm_ptr)
{
- MPID_Comm *localcomm_ptr;
+ MPIR_Comm *localcomm_ptr;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM);
- localcomm_ptr = (MPID_Comm *) MPIU_Handle_obj_alloc(&MPID_Comm_mem);
+ localcomm_ptr = (MPIR_Comm *) MPIR_Handle_obj_alloc(&MPIR_Comm_mem);
MPIR_ERR_CHKANDJUMP(!localcomm_ptr, mpi_errno, MPI_ERR_OTHER, "**nomem");
/* get sensible default values for most fields (usually zeros) */
- mpi_errno = MPIR_Comm_init(localcomm_ptr);
+ mpi_errno = MPII_Comm_init(localcomm_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* use the parent intercomm's recv ctx as the basis for our ctx */
localcomm_ptr->recvcontext_id =
- MPID_CONTEXT_SET_FIELD(IS_LOCALCOMM, intercomm_ptr->recvcontext_id, 1);
+ MPIR_CONTEXT_SET_FIELD(IS_LOCALCOMM, intercomm_ptr->recvcontext_id, 1);
localcomm_ptr->context_id = localcomm_ptr->recvcontext_id;
- MPIU_DBG_MSG_FMT(COMM, TYPICAL,
- (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, TYPICAL,
+ (MPL_DBG_FDEST,
"setup_intercomm_localcomm ic=%p ic->context_id=%d ic->recvcontext_id=%d lc->recvcontext_id=%d",
intercomm_ptr, intercomm_ptr->context_id, intercomm_ptr->recvcontext_id,
localcomm_ptr->recvcontext_id));
/* Save the kind of the communicator */
- localcomm_ptr->comm_kind = MPID_INTRACOMM;
+ localcomm_ptr->comm_kind = MPIR_COMM_KIND__INTRACOMM;
/* Set the sizes and ranks */
localcomm_ptr->remote_size = intercomm_ptr->local_size;
localcomm_ptr->local_size = intercomm_ptr->local_size;
localcomm_ptr->rank = intercomm_ptr->rank;
- MPIR_Comm_map_dup(localcomm_ptr, intercomm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ MPIR_Comm_map_dup(localcomm_ptr, intercomm_ptr, MPIR_COMM_MAP_DIR__L2L);
/* TODO More advanced version: if the group is available, dup it by
* increasing the reference count instead of recreating it later */
@@ -205,7 +211,7 @@ int MPIR_Setup_intercomm_localcomm(MPID_Comm * intercomm_ptr)
MPIR_ERR_POP(mpi_errno);
fn_fail:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM);
return mpi_errno;
}
@@ -213,10 +219,10 @@ int MPIR_Setup_intercomm_localcomm(MPID_Comm * intercomm_ptr)
/* holds default collop "vtables" for _intracomms_, where
* default[hierarchy_kind] is the pointer to the collop struct for that
* hierarchy kind */
-static struct MPID_Collops *default_collops[MPID_HIERARCHY_SIZE] = { NULL };
+static struct MPIR_Collops *default_collops[MPIR_COMM_HIERARCHY_KIND__SIZE] = { NULL };
/* default for intercomms */
-static struct MPID_Collops *ic_default_collops = NULL;
+static struct MPIR_Collops *ic_default_collops = NULL;
#undef FUNCNAME
#define FUNCNAME cleanup_default_collops
@@ -225,18 +231,18 @@ static struct MPID_Collops *ic_default_collops = NULL;
static int cleanup_default_collops(void *unused)
{
int i;
- for (i = 0; i < MPID_HIERARCHY_SIZE; ++i) {
+ for (i = 0; i < MPIR_COMM_HIERARCHY_KIND__SIZE; ++i) {
if (default_collops[i]) {
- MPIU_Assert(default_collops[i]->ref_count >= 1);
+ MPIR_Assert(default_collops[i]->ref_count >= 1);
if (--default_collops[i]->ref_count == 0)
- MPIU_Free(default_collops[i]);
+ MPL_free(default_collops[i]);
default_collops[i] = NULL;
}
}
if (ic_default_collops) {
- MPIU_Assert(ic_default_collops->ref_count >= 1);
+ MPIR_Assert(ic_default_collops->ref_count >= 1);
if (--ic_default_collops->ref_count == 0)
- MPIU_Free(ic_default_collops);
+ MPL_free(ic_default_collops);
}
return MPI_SUCCESS;
}
@@ -249,12 +255,12 @@ static int init_default_collops(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- struct MPID_Collops *ops = NULL;
- MPIU_CHKPMEM_DECL(MPID_HIERARCHY_SIZE + 1);
+ struct MPIR_Collops *ops = NULL;
+ MPIR_CHKPMEM_DECL(MPIR_COMM_HIERARCHY_KIND__SIZE + 1);
/* first initialize the intracomms */
- for (i = 0; i < MPID_HIERARCHY_SIZE; ++i) {
- MPIU_CHKPMEM_CALLOC(ops, struct MPID_Collops *, sizeof(struct MPID_Collops), mpi_errno,
+ for (i = 0; i < MPIR_COMM_HIERARCHY_KIND__SIZE; ++i) {
+ MPIR_CHKPMEM_CALLOC(ops, struct MPIR_Collops *, sizeof(struct MPIR_Collops), mpi_errno,
"default intracomm collops");
ops->ref_count = 1; /* force existence until finalize time */
@@ -289,22 +295,22 @@ static int init_default_collops(void)
/* override defaults, such as for SMP */
switch (i) {
- case MPID_HIERARCHY_FLAT:
+ case MPIR_COMM_HIERARCHY_KIND__FLAT:
break;
- case MPID_HIERARCHY_PARENT:
+ case MPIR_COMM_HIERARCHY_KIND__PARENT:
ops->Ibcast_sched = &MPIR_Ibcast_SMP;
ops->Iscan_sched = &MPIR_Iscan_SMP;
ops->Iallreduce_sched = &MPIR_Iallreduce_SMP;
ops->Ireduce_sched = &MPIR_Ireduce_SMP;
break;
- case MPID_HIERARCHY_NODE:
+ case MPIR_COMM_HIERARCHY_KIND__NODE:
break;
- case MPID_HIERARCHY_NODE_ROOTS:
+ case MPIR_COMM_HIERARCHY_KIND__NODE_ROOTS:
break;
/* --BEGIN ERROR HANDLING-- */
default:
- MPIU_Assertp(FALSE);
+ MPIR_Assertp(FALSE);
break;
/* --END ERROR HANDLING-- */
}
@@ -317,7 +323,7 @@ static int init_default_collops(void)
/* now the intercomm table */
{
- MPIU_CHKPMEM_CALLOC(ops, struct MPID_Collops *, sizeof(struct MPID_Collops), mpi_errno,
+ MPIR_CHKPMEM_CALLOC(ops, struct MPIR_Collops *, sizeof(struct MPIR_Collops), mpi_errno,
"default intercomm collops");
ops->ref_count = 1; /* force existence until finalize time */
@@ -351,12 +357,12 @@ static int init_default_collops(void)
/* run after MPID_Finalize to permit collective usage during finalize */
MPIR_Add_finalize(cleanup_default_collops, NULL, MPIR_FINALIZE_CALLBACK_PRIO - 1);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -372,7 +378,7 @@ static int init_default_collops(void)
#define FUNCNAME set_collops
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int set_collops(MPID_Comm * comm)
+static int set_collops(MPIR_Comm * comm)
{
int mpi_errno = MPI_SUCCESS;
static int initialized = FALSE;
@@ -388,7 +394,7 @@ static int set_collops(MPID_Comm * comm)
initialized = TRUE;
}
- if (comm->comm_kind == MPID_INTRACOMM) {
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
/* FIXME MT what protects access to this structure and ic_default_collops? */
comm->coll_fns = default_collops[comm->hierarchy_kind];
}
@@ -408,20 +414,20 @@ static int set_collops(MPID_Comm * comm)
#define FUNCNAME MPIR_Comm_map_irregular
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_map_irregular(MPID_Comm * newcomm, MPID_Comm * src_comm,
+int MPIR_Comm_map_irregular(MPIR_Comm * newcomm, MPIR_Comm * src_comm,
int *src_mapping, int src_mapping_size,
MPIR_Comm_map_dir_t dir, MPIR_Comm_map_t ** map)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Comm_map_t *mapper;
- MPIU_CHKPMEM_DECL(3);
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_MAP_IRREGULAR);
+ MPIR_CHKPMEM_DECL(3);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_MAP_TYPE__IRREGULAR);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_MAP_IRREGULAR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_MAP_TYPE__IRREGULAR);
- MPIU_CHKPMEM_MALLOC(mapper, MPIR_Comm_map_t *, sizeof(MPIR_Comm_map_t), mpi_errno, "mapper");
+ MPIR_CHKPMEM_MALLOC(mapper, MPIR_Comm_map_t *, sizeof(MPIR_Comm_map_t), mpi_errno, "mapper");
- mapper->type = MPIR_COMM_MAP_IRREGULAR;
+ mapper->type = MPIR_COMM_MAP_TYPE__IRREGULAR;
mapper->src_comm = src_comm;
mapper->dir = dir;
mapper->src_mapping_size = src_mapping_size;
@@ -431,7 +437,7 @@ int MPIR_Comm_map_irregular(MPID_Comm * newcomm, MPID_Comm * src_comm,
mapper->free_mapping = 0;
}
else {
- MPIU_CHKPMEM_MALLOC(mapper->src_mapping, int *,
+ MPIR_CHKPMEM_MALLOC(mapper->src_mapping, int *,
src_mapping_size * sizeof(int), mpi_errno, "mapper mapping");
mapper->free_mapping = 1;
}
@@ -444,11 +450,11 @@ int MPIR_Comm_map_irregular(MPID_Comm * newcomm, MPID_Comm * src_comm,
*map = mapper;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_MAP_IRREGULAR);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_MAP_TYPE__IRREGULAR);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -456,18 +462,18 @@ int MPIR_Comm_map_irregular(MPID_Comm * newcomm, MPID_Comm * src_comm,
#define FUNCNAME MPIR_Comm_map_dup
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_map_dup(MPID_Comm * newcomm, MPID_Comm * src_comm, MPIR_Comm_map_dir_t dir)
+int MPIR_Comm_map_dup(MPIR_Comm * newcomm, MPIR_Comm * src_comm, MPIR_Comm_map_dir_t dir)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Comm_map_t *mapper;
- MPIU_CHKPMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_MAP_DUP);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_MAP_TYPE__DUP);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_MAP_DUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_MAP_TYPE__DUP);
- MPIU_CHKPMEM_MALLOC(mapper, MPIR_Comm_map_t *, sizeof(MPIR_Comm_map_t), mpi_errno, "mapper");
+ MPIR_CHKPMEM_MALLOC(mapper, MPIR_Comm_map_t *, sizeof(MPIR_Comm_map_t), mpi_errno, "mapper");
- mapper->type = MPIR_COMM_MAP_DUP;
+ mapper->type = MPIR_COMM_MAP_TYPE__DUP;
mapper->src_comm = src_comm;
mapper->dir = dir;
@@ -476,11 +482,11 @@ int MPIR_Comm_map_dup(MPID_Comm * newcomm, MPID_Comm * src_comm, MPIR_Comm_map_d
MPL_LL_APPEND(newcomm->mapper_head, newcomm->mapper_tail, mapper);
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_MAP_DUP);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_MAP_TYPE__DUP);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -489,28 +495,25 @@ int MPIR_Comm_map_dup(MPID_Comm * newcomm, MPID_Comm * src_comm, MPIR_Comm_map_d
#define FUNCNAME MPIR_Comm_map_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_map_free(MPID_Comm * comm)
+int MPIR_Comm_map_free(MPIR_Comm * comm)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Comm_map_t *mapper, *tmp;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_MAP_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_MAP_FREE);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_MAP_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_MAP_FREE);
for (mapper = comm->mapper_head; mapper;) {
tmp = mapper->next;
- if (mapper->type == MPIR_COMM_MAP_IRREGULAR && mapper->free_mapping)
- MPIU_Free(mapper->src_mapping);
- MPIU_Free(mapper);
+ if (mapper->type == MPIR_COMM_MAP_TYPE__IRREGULAR && mapper->free_mapping)
+ MPL_free(mapper->src_mapping);
+ MPL_free(mapper);
mapper = tmp;
}
comm->mapper_head = NULL;
- fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_MAP_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_MAP_FREE);
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
/* Provides a hook for the top level functions to perform some manipulation on a
@@ -522,36 +525,37 @@ int MPIR_Comm_map_free(MPID_Comm * comm)
#define FUNCNAME MPIR_Comm_commit
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_commit(MPID_Comm * comm)
+int MPIR_Comm_commit(MPIR_Comm * comm)
{
int mpi_errno = MPI_SUCCESS;
int num_local = -1, num_external = -1;
int local_rank = -1, external_rank = -1;
int *local_procs = NULL, *external_procs = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_COMMIT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_COMMIT);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_COMMIT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_COMMIT);
/* It's OK to relax these assertions, but we should do so very
* intentionally. For now this function is the only place that we create
* our hierarchy of communicators */
- MPIU_Assert(comm->node_comm == NULL);
- MPIU_Assert(comm->node_roots_comm == NULL);
+ MPIR_Assert(comm->node_comm == NULL);
+ MPIR_Assert(comm->node_roots_comm == NULL);
mpi_errno = set_collops(comm);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* Notify device of communicator creation */
- mpi_errno = MPID_Dev_comm_create_hook(comm);
+ mpi_errno = MPID_Comm_create_hook(comm);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
MPIR_Comm_map_free(comm);
- if (comm->comm_kind == MPID_INTRACOMM) {
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
+ !MPIR_CONTEXT_READ_FIELD(SUBCOMM,comm->context_id)) { /*make sure this is not a subcomm*/
- mpi_errno = MPIU_Find_local_and_external(comm,
+ mpi_errno = MPIR_Find_local_and_external(comm,
&num_local, &local_rank, &local_procs,
&num_external, &external_rank, &external_procs,
&comm->intranode_table, &comm->internode_table);
@@ -562,12 +566,12 @@ int MPIR_Comm_commit(MPID_Comm * comm)
/* Non-fatal errors simply mean that this communicator will not have
* any node awareness. Node-aware collectives are an optimization. */
- MPIU_DBG_MSG_P(COMM, VERBOSE, "MPIU_Find_local_and_external failed for comm_ptr=%p",
+ MPL_DBG_MSG_P(MPIR_DBG_COMM, VERBOSE, "MPIR_Find_local_and_external failed for comm_ptr=%p",
comm);
if (comm->intranode_table)
- MPIU_Free(comm->intranode_table);
+ MPL_free(comm->intranode_table);
if (comm->internode_table)
- MPIU_Free(comm->internode_table);
+ MPL_free(comm->internode_table);
mpi_errno = MPI_SUCCESS;
goto fn_exit;
@@ -575,14 +579,14 @@ int MPIR_Comm_commit(MPID_Comm * comm)
/* --END ERROR HANDLING-- */
/* defensive checks */
- MPIU_Assert(num_local > 0);
- MPIU_Assert(num_local > 1 || external_rank >= 0);
- MPIU_Assert(external_rank < 0 || external_procs != NULL);
+ MPIR_Assert(num_local > 0);
+ MPIR_Assert(num_local > 1 || external_rank >= 0);
+ MPIR_Assert(external_rank < 0 || external_procs != NULL);
/* if the node_roots_comm and comm would be the same size, then creating
* the second communicator is useless and wasteful. */
if (num_external == comm->remote_size) {
- MPIU_Assert(num_local == 1);
+ MPIR_Assert(num_local == 1);
goto fn_exit;
}
@@ -592,26 +596,26 @@ int MPIR_Comm_commit(MPID_Comm * comm)
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- comm->node_comm->context_id = comm->context_id + MPID_CONTEXT_INTRANODE_OFFSET;
+ comm->node_comm->context_id = comm->context_id + MPIR_CONTEXT_INTRANODE_OFFSET;
comm->node_comm->recvcontext_id = comm->node_comm->context_id;
comm->node_comm->rank = local_rank;
- comm->node_comm->comm_kind = MPID_INTRACOMM;
- comm->node_comm->hierarchy_kind = MPID_HIERARCHY_NODE;
+ comm->node_comm->comm_kind = MPIR_COMM_KIND__INTRACOMM;
+ comm->node_comm->hierarchy_kind = MPIR_COMM_HIERARCHY_KIND__NODE;
comm->node_comm->local_comm = NULL;
- MPIU_DBG_MSG_D(CH3_OTHER, VERBOSE, "Create node_comm=%p\n", comm->node_comm);
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "Create node_comm=%p\n", comm->node_comm);
comm->node_comm->local_size = num_local;
comm->node_comm->remote_size = num_local;
MPIR_Comm_map_irregular(comm->node_comm, comm, local_procs,
- num_local, MPIR_COMM_MAP_DIR_L2L, NULL);
+ num_local, MPIR_COMM_MAP_DIR__L2L, NULL);
mpi_errno = set_collops(comm->node_comm);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* Notify device of communicator creation */
- mpi_errno = MPID_Dev_comm_create_hook(comm->node_comm);
+ mpi_errno = MPID_Comm_create_hook(comm->node_comm);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* don't call MPIR_Comm_commit here */
@@ -626,25 +630,25 @@ int MPIR_Comm_commit(MPID_Comm * comm)
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- comm->node_roots_comm->context_id = comm->context_id + MPID_CONTEXT_INTERNODE_OFFSET;
+ comm->node_roots_comm->context_id = comm->context_id + MPIR_CONTEXT_INTERNODE_OFFSET;
comm->node_roots_comm->recvcontext_id = comm->node_roots_comm->context_id;
comm->node_roots_comm->rank = external_rank;
- comm->node_roots_comm->comm_kind = MPID_INTRACOMM;
- comm->node_roots_comm->hierarchy_kind = MPID_HIERARCHY_NODE_ROOTS;
+ comm->node_roots_comm->comm_kind = MPIR_COMM_KIND__INTRACOMM;
+ comm->node_roots_comm->hierarchy_kind = MPIR_COMM_HIERARCHY_KIND__NODE_ROOTS;
comm->node_roots_comm->local_comm = NULL;
comm->node_roots_comm->local_size = num_external;
comm->node_roots_comm->remote_size = num_external;
MPIR_Comm_map_irregular(comm->node_roots_comm, comm,
- external_procs, num_external, MPIR_COMM_MAP_DIR_L2L, NULL);
+ external_procs, num_external, MPIR_COMM_MAP_DIR__L2L, NULL);
mpi_errno = set_collops(comm->node_roots_comm);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* Notify device of communicator creation */
- mpi_errno = MPID_Dev_comm_create_hook(comm->node_roots_comm);
+ mpi_errno = MPID_Comm_create_hook(comm->node_roots_comm);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* don't call MPIR_Comm_commit here */
@@ -652,16 +656,16 @@ int MPIR_Comm_commit(MPID_Comm * comm)
MPIR_Comm_map_free(comm->node_roots_comm);
}
- comm->hierarchy_kind = MPID_HIERARCHY_PARENT;
+ comm->hierarchy_kind = MPIR_COMM_HIERARCHY_KIND__PARENT;
}
fn_exit:
if (external_procs != NULL)
- MPIU_Free(external_procs);
+ MPL_free(external_procs);
if (local_procs != NULL)
- MPIU_Free(local_procs);
+ MPL_free(local_procs);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_COMMIT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_COMMIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -670,15 +674,15 @@ int MPIR_Comm_commit(MPID_Comm * comm)
/* Returns true if the given communicator is aware of node topology information,
false otherwise. Such information could be used to implement more efficient
collective communication, for example. */
-int MPIR_Comm_is_node_aware(MPID_Comm * comm)
+int MPIR_Comm_is_node_aware(MPIR_Comm * comm)
{
- return (comm->hierarchy_kind == MPID_HIERARCHY_PARENT);
+ return (comm->hierarchy_kind == MPIR_COMM_HIERARCHY_KIND__PARENT);
}
/* Returns true if the communicator is node-aware and processes in all the nodes
are consecutive. For example, if node 0 contains "0, 1, 2, 3", node 1
contains "4, 5, 6", and node 2 contains "7", we shall return true. */
-int MPIR_Comm_is_node_consecutive(MPID_Comm * comm)
+int MPII_Comm_is_node_consecutive(MPIR_Comm * comm)
{
int i = 0, curr_nodeidx = 0;
int *internode_table = comm->internode_table;
@@ -709,25 +713,25 @@ int MPIR_Comm_is_node_consecutive(MPID_Comm * comm)
* Used by cart_create, graph_create, and dup_create
*/
#undef FUNCNAME
-#define FUNCNAME MPIR_Comm_copy
+#define FUNCNAME MPII_Comm_copy
#undef FCNAME
-#define FCNAME "MPIR_Comm_copy"
-int MPIR_Comm_copy(MPID_Comm * comm_ptr, int size, MPID_Comm ** outcomm_ptr)
+#define FCNAME "MPII_Comm_copy"
+int MPII_Comm_copy(MPIR_Comm * comm_ptr, int size, MPIR_Comm ** outcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Context_id_t new_context_id, new_recvcontext_id;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Context_id_t new_context_id, new_recvcontext_id;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_Comm_map_t *map;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_COPY);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_COPY);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_COPY);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_COPY);
/* Get a new context first. We need this to be collective over the
* input communicator */
/* If there is a context id cache in oldcomm, use it here. Otherwise,
* use the appropriate algorithm to get a new context id. Be careful
* of intercomms here */
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
mpi_errno = MPIR_Get_intercomm_contextid(comm_ptr, &new_context_id, &new_recvcontext_id);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -737,7 +741,7 @@ int MPIR_Comm_copy(MPID_Comm * comm_ptr, int size, MPID_Comm ** outcomm_ptr)
new_recvcontext_id = new_context_id;
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(new_context_id != 0);
+ MPIR_Assert(new_context_id != 0);
}
/* This is the local size, not the remote size, in the case of
@@ -769,18 +773,18 @@ int MPIR_Comm_copy(MPID_Comm * comm_ptr, int size, MPID_Comm ** outcomm_ptr)
* test that matches the test on rank above. */
if (size == comm_ptr->local_size) {
/* Duplicate the network address mapping */
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
- MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__L2L);
else
- MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_R2R);
+ MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__R2R);
}
else {
int i;
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
- MPIR_Comm_map_irregular(newcomm_ptr, comm_ptr, NULL, size, MPIR_COMM_MAP_DIR_L2L, &map);
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIR_Comm_map_irregular(newcomm_ptr, comm_ptr, NULL, size, MPIR_COMM_MAP_DIR__L2L, &map);
else
- MPIR_Comm_map_irregular(newcomm_ptr, comm_ptr, NULL, size, MPIR_COMM_MAP_DIR_R2R, &map);
+ MPIR_Comm_map_irregular(newcomm_ptr, comm_ptr, NULL, size, MPIR_COMM_MAP_DIR__R2R, &map);
for (i = 0; i < size; i++) {
/* For rank i in the new communicator, find the corresponding
* rank in the input communicator */
@@ -789,13 +793,13 @@ int MPIR_Comm_copy(MPID_Comm * comm_ptr, int size, MPID_Comm ** outcomm_ptr)
}
/* If it is an intercomm, duplicate the local network address references */
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
- MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__L2L);
}
/* Set the sizes and ranks */
newcomm_ptr->rank = comm_ptr->rank;
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
newcomm_ptr->local_size = comm_ptr->local_size;
newcomm_ptr->remote_size = comm_ptr->remote_size;
newcomm_ptr->is_low_group = comm_ptr->is_low_group;
@@ -826,7 +830,7 @@ int MPIR_Comm_copy(MPID_Comm * comm_ptr, int size, MPID_Comm ** outcomm_ptr)
mpi_errno = MPIR_Info_dup_impl(comm_ptr->info, &(newcomm_ptr->info));
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPIR_Comm_apply_hints(newcomm_ptr, newcomm_ptr->info);
+ mpi_errno = MPII_Comm_apply_hints(newcomm_ptr, newcomm_ptr->info);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -835,7 +839,7 @@ int MPIR_Comm_copy(MPID_Comm * comm_ptr, int size, MPID_Comm ** outcomm_ptr)
fn_fail:
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_COPY);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_COPY);
return mpi_errno;
}
@@ -847,16 +851,16 @@ int MPIR_Comm_copy(MPID_Comm * comm_ptr, int size, MPID_Comm ** outcomm_ptr)
* Used by comm_idup.
*/
#undef FUNCNAME
-#define FUNCNAME MPIR_Comm_copy_data
+#define FUNCNAME MPII_Comm_copy_data
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_copy_data(MPID_Comm * comm_ptr, MPID_Comm ** outcomm_ptr)
+int MPII_Comm_copy_data(MPIR_Comm * comm_ptr, MPIR_Comm ** outcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *newcomm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_COPY_DATA);
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_COPY_DATA);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_COPY_DATA);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_COPY_DATA);
mpi_errno = MPIR_Comm_create(&newcomm_ptr);
if (mpi_errno)
@@ -870,14 +874,14 @@ int MPIR_Comm_copy_data(MPID_Comm * comm_ptr, MPID_Comm ** outcomm_ptr)
newcomm_ptr->comm_kind = comm_ptr->comm_kind;
newcomm_ptr->local_comm = 0;
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
- MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__L2L);
else
- MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_R2R);
+ MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__R2R);
/* If it is an intercomm, duplicate the network address mapping */
- if (comm_ptr->comm_kind == MPID_INTERCOMM) {
- MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ MPIR_Comm_map_dup(newcomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__L2L);
}
/* Set the sizes and ranks */
@@ -901,13 +905,12 @@ int MPIR_Comm_copy_data(MPID_Comm * comm_ptr, MPID_Comm ** outcomm_ptr)
*outcomm_ptr = newcomm_ptr;
fn_fail:
- fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_COPY_DATA);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_COPY_DATA);
return mpi_errno;
}
/* Common body between MPIR_Comm_release and MPIR_comm_release_always. This
- * helper function frees the actual MPID_Comm structure and any associated
+ * helper function frees the actual MPIR_Comm structure and any associated
* storage. It also releases any references to other objects.
* This function should only be called when the communicator's reference count
* has dropped to 0.
@@ -918,15 +921,15 @@ int MPIR_Comm_copy_data(MPID_Comm * comm_ptr, MPID_Comm ** outcomm_ptr)
#define FUNCNAME MPIR_Comm_delete_internal
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
+int MPIR_Comm_delete_internal(MPIR_Comm * comm_ptr)
{
int in_use;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_COMM_DELETE_INTERNAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_COMM_DELETE_INTERNAL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_COMM_DELETE_INTERNAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_COMM_DELETE_INTERNAL);
- MPIU_Assert(MPIU_Object_get_ref(comm_ptr) == 0); /* sanity check */
+ MPIR_Assert(MPIR_Object_get_ref(comm_ptr) == 0); /* sanity check */
/* Remove the attributes, executing the attribute delete routine.
* Do this only if the attribute functions are defined.
@@ -935,11 +938,11 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
if (MPIR_Process.attr_free && comm_ptr->attributes) {
/* Temporarily add a reference to this communicator because
* the attr_free code requires a valid communicator */
- MPIU_Object_add_ref(comm_ptr);
+ MPIR_Object_add_ref(comm_ptr);
mpi_errno = MPIR_Process.attr_free(comm_ptr->handle, &comm_ptr->attributes);
/* Release the temporary reference added before the call to
* attr_free */
- MPIU_Object_release_ref(comm_ptr, &in_use);
+ MPIR_Object_release_ref(comm_ptr, &in_use);
}
/* If the attribute delete functions return failure, the
@@ -953,24 +956,24 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
/* Notify the device that the communicator is about to be
* destroyed */
- mpi_errno = MPID_Dev_comm_destroy_hook(comm_ptr);
+ mpi_errno = MPID_Comm_free_hook(comm_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* Free info hints */
if (comm_ptr->info != NULL) {
- MPIU_Info_free(comm_ptr->info);
+ MPIR_Info_free(comm_ptr->info);
}
/* release our reference to the collops structure, comes after the
* destroy_hook to allow the device to manage these vtables in a custom
* fashion */
if (comm_ptr->coll_fns && --comm_ptr->coll_fns->ref_count == 0) {
- MPIU_Free(comm_ptr->coll_fns);
+ MPL_free(comm_ptr->coll_fns);
comm_ptr->coll_fns = NULL;
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM && comm_ptr->local_comm)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM && comm_ptr->local_comm)
MPIR_Comm_release(comm_ptr->local_comm);
/* Free the local and remote groups, if they exist */
@@ -985,9 +988,9 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
if (comm_ptr->node_roots_comm)
MPIR_Comm_release(comm_ptr->node_roots_comm);
if (comm_ptr->intranode_table != NULL)
- MPIU_Free(comm_ptr->intranode_table);
+ MPL_free(comm_ptr->intranode_table);
if (comm_ptr->internode_table != NULL)
- MPIU_Free(comm_ptr->internode_table);
+ MPL_free(comm_ptr->internode_table);
/* Free the context value. This should come after freeing the
* intra/inter-node communicators since those free calls won't
@@ -998,13 +1001,20 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
* allocated out of the remote group's bit vector, not ours. */
MPIR_Free_contextid(comm_ptr->recvcontext_id);
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+ {
+ int thr_err;
+ MPID_Thread_mutex_destroy(&MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr), &thr_err);
+ MPIR_Assert(thr_err == 0);
+ }
+#endif
/* We need to release the error handler */
if (comm_ptr->errhandler &&
!(HANDLE_GET_KIND(comm_ptr->errhandler->handle) == HANDLE_KIND_BUILTIN)) {
int errhInuse;
MPIR_Errhandler_release_ref(comm_ptr->errhandler, &errhInuse);
if (!errhInuse) {
- MPIU_Handle_obj_free(&MPID_Errhandler_mem, comm_ptr->errhandler);
+ MPIR_Handle_obj_free(&MPIR_Errhandler_mem, comm_ptr->errhandler);
}
}
@@ -1012,12 +1022,12 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
* we are supporting message-queue debugging. We make this
* conditional on having debugger support since the
* operation is not constant-time */
- MPIR_COMML_FORGET(comm_ptr);
+ MPII_COMML_FORGET(comm_ptr);
/* Check for predefined communicators - these should not
* be freed */
if (!(HANDLE_GET_KIND(comm_ptr->handle) == HANDLE_KIND_BUILTIN))
- MPIU_Handle_obj_free(&MPID_Comm_mem, comm_ptr);
+ MPIR_Handle_obj_free(&MPIR_Comm_mem, comm_ptr);
}
else {
/* If the user attribute free function returns an error,
@@ -1026,7 +1036,7 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
}
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_COMM_DELETE_INTERNAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_COMM_DELETE_INTERNAL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1040,17 +1050,17 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr)
#define FUNCNAME MPIR_Comm_release_always
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_release_always(MPID_Comm * comm_ptr)
+int MPIR_Comm_release_always(MPIR_Comm * comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
int in_use;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_RELEASE_ALWAYS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_RELEASE_ALWAYS);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_RELEASE_ALWAYS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_RELEASE_ALWAYS);
/* we want to short-circuit any optimization that avoids reference counting
* predefined communicators, such as MPI_COMM_WORLD or MPI_COMM_SELF. */
- MPIU_Object_release_ref_always(comm_ptr, &in_use);
+ MPIR_Object_release_ref_always(comm_ptr, &in_use);
if (!in_use) {
mpi_errno = MPIR_Comm_delete_internal(comm_ptr);
if (mpi_errno)
@@ -1058,7 +1068,7 @@ int MPIR_Comm_release_always(MPID_Comm * comm_ptr)
}
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_RELEASE_ALWAYS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_RELEASE_ALWAYS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1067,18 +1077,18 @@ int MPIR_Comm_release_always(MPID_Comm * comm_ptr)
/* Apply all known info hints in the specified info chain to the given
* communicator. */
#undef FUNCNAME
-#define FUNCNAME MPIR_Comm_apply_hints
+#define FUNCNAME MPII_Comm_apply_hints
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_apply_hints(MPID_Comm * comm_ptr, MPID_Info * info_ptr)
+int MPII_Comm_apply_hints(MPIR_Comm * comm_ptr, MPIR_Info * info_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Info *hint = NULL;
+ MPIR_Info *hint = NULL;
char hint_name[MPI_MAX_INFO_KEY] = { 0 };
struct MPIR_Comm_hint_fn_elt *hint_fn = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_APPLY_HINTS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_APPLY_HINTS);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_APPLY_HINTS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_APPLY_HINTS);
MPL_LL_FOREACH(info_ptr, hint) {
/* Have we hit the default, empty info hint? */
@@ -1087,7 +1097,7 @@ int MPIR_Comm_apply_hints(MPID_Comm * comm_ptr, MPID_Info * info_ptr)
strncpy(hint_name, hint->key, MPI_MAX_INFO_KEY);
- HASH_FIND_STR(MPID_hint_fns, hint_name, hint_fn);
+ MPL_HASH_FIND_STR(MPID_hint_fns, hint_name, hint_fn);
/* Skip hints that MPICH doesn't recognize. */
if (hint_fn) {
@@ -1098,7 +1108,7 @@ int MPIR_Comm_apply_hints(MPID_Comm * comm_ptr, MPID_Info * info_ptr)
}
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_APPLY_HINTS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_APPLY_HINTS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1112,22 +1122,19 @@ static int free_hint_handles(void *ignore)
{
int mpi_errno = MPI_SUCCESS;
struct MPIR_Comm_hint_fn_elt *curr_hint = NULL, *tmp = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES);
if (MPID_hint_fns) {
- HASH_ITER(hh, MPID_hint_fns, curr_hint, tmp) {
- HASH_DEL(MPID_hint_fns, curr_hint);
- MPIU_Free(curr_hint);
+ MPL_HASH_ITER(hh, MPID_hint_fns, curr_hint, tmp) {
+ MPL_HASH_DEL(MPID_hint_fns, curr_hint);
+ MPL_free(curr_hint);
}
}
- fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES);
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
/* The hint logic is stored in a uthash, with hint name as key and
@@ -1140,24 +1147,21 @@ int MPIR_Comm_register_hint(const char *hint_key, MPIR_Comm_hint_fn_t fn, void *
{
int mpi_errno = MPI_SUCCESS;
struct MPIR_Comm_hint_fn_elt *hint_elt = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_COMM_REGISTER_HINT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_REGISTER_HINT);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_COMM_REGISTER_HINT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_REGISTER_HINT);
if (MPID_hint_fns == NULL) {
MPIR_Add_finalize(free_hint_handles, NULL, MPIR_FINALIZE_CALLBACK_PRIO - 1);
}
- hint_elt = MPIU_Malloc(sizeof(struct MPIR_Comm_hint_fn_elt));
+ hint_elt = MPL_malloc(sizeof(struct MPIR_Comm_hint_fn_elt));
strncpy(hint_elt->name, hint_key, MPI_MAX_INFO_KEY);
hint_elt->state = state;
hint_elt->fn = fn;
- HASH_ADD_STR(MPID_hint_fns, name, hint_elt);
+ MPL_HASH_ADD_STR(MPID_hint_fns, name, hint_elt);
- fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_COMM_REGISTER_HINT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_REGISTER_HINT);
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
diff --git a/src/mpi/comm/contextid.c b/src/mpi/comm/contextid.c
index f06d361..d43d677 100644
--- a/src/mpi/comm/contextid.c
+++ b/src/mpi/comm/contextid.c
@@ -6,10 +6,9 @@
#include "mpiimpl.h"
#include "mpicomm.h"
-#include "mpiinfo.h" /* MPIU_Info_free */
+#include "mpir_info.h" /* MPIR_Info_free */
#include "mpl_utlist.h"
-#include "mpiu_uthash.h"
/*
=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
@@ -45,10 +44,10 @@ const int ALL_OWN_MASK_FLAG = MPIR_MAX_CONTEXT_MASK;
/* utility function to pretty print a context ID for debugging purposes, see
* mpiimpl.h for more info on the various fields */
-#ifdef USE_DBG_LOGGING
-static void dump_context_id(MPIU_Context_id_t context_id, char *out_str, int len)
+#ifdef MPL_USE_DBG_LOGGING
+static void dump_context_id(MPIR_Context_id_t context_id, char *out_str, int len)
{
- int subcomm_type = MPID_CONTEXT_READ_FIELD(SUBCOMM, context_id);
+ int subcomm_type = MPIR_CONTEXT_READ_FIELD(SUBCOMM, context_id);
const char *subcomm_type_name = NULL;
switch (subcomm_type) {
@@ -62,18 +61,18 @@ static void dump_context_id(MPIU_Context_id_t context_id, char *out_str, int len
subcomm_type_name = "internode";
break;
default:
- MPIU_Assert(FALSE);
+ MPIR_Assert(FALSE);
break;
}
MPL_snprintf(out_str, len,
"context_id=%d (%#x): DYNAMIC_PROC=%d PREFIX=%#x IS_LOCALCOMM=%d SUBCOMM=%s SUFFIX=%s",
context_id,
context_id,
- MPID_CONTEXT_READ_FIELD(DYNAMIC_PROC, context_id),
- MPID_CONTEXT_READ_FIELD(PREFIX, context_id),
- MPID_CONTEXT_READ_FIELD(IS_LOCALCOMM, context_id),
+ MPIR_CONTEXT_READ_FIELD(DYNAMIC_PROC, context_id),
+ MPIR_CONTEXT_READ_FIELD(PREFIX, context_id),
+ MPIR_CONTEXT_READ_FIELD(IS_LOCALCOMM, context_id),
subcomm_type_name,
- (MPID_CONTEXT_READ_FIELD(SUFFIX, context_id) ? "coll" : "pt2pt"));
+ (MPIR_CONTEXT_READ_FIELD(SUFFIX, context_id) ? "coll" : "pt2pt"));
}
#endif
@@ -223,7 +222,7 @@ static int locate_context_bit(uint32_t local_mask[])
if (val & 0xAAAAAAAA) {
j += 1;
}
- context_id = (MPIR_CONTEXT_INT_BITS * i + j) << MPID_CONTEXT_PREFIX_SHIFT;
+ context_id = (MPIR_CONTEXT_INT_BITS * i + j) << MPIR_CONTEXT_PREFIX_SHIFT;
return context_id;
}
}
@@ -233,20 +232,20 @@ static int locate_context_bit(uint32_t local_mask[])
/* Allocates a context ID from the given mask by clearing the bit
* corresponding to the the given id. Returns 0 on failure, id on
* success. */
-static int allocate_context_bit(uint32_t mask[], MPIU_Context_id_t id)
+static int allocate_context_bit(uint32_t mask[], MPIR_Context_id_t id)
{
int raw_prefix, idx, bitpos;
- raw_prefix = MPID_CONTEXT_READ_FIELD(PREFIX, id);
+ raw_prefix = MPIR_CONTEXT_READ_FIELD(PREFIX, id);
idx = raw_prefix / MPIR_CONTEXT_INT_BITS;
bitpos = raw_prefix % MPIR_CONTEXT_INT_BITS;
/* the bit should not already be cleared (allocated) */
- MPIU_Assert(mask[idx] & (1 << bitpos));
+ MPIR_Assert(mask[idx] & (1 << bitpos));
/* clear the bit */
mask[idx] &= ~(1 << bitpos);
- MPIU_DBG_MSG_FMT(COMM, VERBOSE, (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, VERBOSE, (MPL_DBG_FDEST,
"allocating contextid = %d, (mask=%p, mask[%d], bit %d)",
id, mask, idx, bitpos));
return id;
@@ -259,7 +258,7 @@ static int allocate_context_bit(uint32_t mask[], MPIU_Context_id_t id)
* Returns 0 on failure. Returns the allocated context ID on success. */
static int find_and_allocate_context_id(uint32_t local_mask[])
{
- MPIU_Context_id_t context_id;
+ MPIR_Context_id_t context_id;
context_id = locate_context_bit(local_mask);
if (context_id != 0) {
context_id = allocate_context_bit(context_mask, context_id);
@@ -293,7 +292,7 @@ static volatile int mask_in_use = 0;
#define FUNCNAME MPIR_Get_contextid_sparse
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Get_contextid_sparse(MPID_Comm * comm_ptr, MPIU_Context_id_t * context_id, int ignore_id)
+int MPIR_Get_contextid_sparse(MPIR_Comm * comm_ptr, MPIR_Context_id_t * context_id, int ignore_id)
{
return MPIR_Get_contextid_sparse_group(comm_ptr, NULL /*group_ptr */ ,
MPIR_Process.attrs.tag_ub /*tag */ ,
@@ -301,17 +300,17 @@ int MPIR_Get_contextid_sparse(MPID_Comm * comm_ptr, MPIU_Context_id_t * context_
}
struct gcn_state {
- MPIU_Context_id_t *ctx0;
- MPIU_Context_id_t *ctx1;
+ MPIR_Context_id_t *ctx0;
+ MPIR_Context_id_t *ctx1;
int own_mask;
int own_eager_mask;
int first_iter;
uint64_t tag;
- MPID_Comm *comm_ptr;
- MPID_Comm *comm_ptr_inter;
- MPID_Sched_t s;
- MPID_Comm *new_comm;
- MPID_Comm_kind_t gcn_cid_kind;
+ MPIR_Comm *comm_ptr;
+ MPIR_Comm *comm_ptr_inter;
+ MPIR_Sched_t s;
+ MPIR_Comm *new_comm;
+ MPIR_Comm_kind_t gcn_cid_kind;
uint32_t local_mask[MPIR_MAX_CONTEXT_MASK + 1];
struct gcn_state *next;
};
@@ -362,7 +361,7 @@ static int add_gcn_to_list(struct gcn_state *new_state)
* obtain the best performance and utilization of the context ID space.
*
* Processes that pass ignore_id==TRUE will receive
- * (*context_id==MPIU_INVALID_CONTEXT_ID) and should not attempt to use it.
+ * (*context_id==MPIR_INVALID_CONTEXT_ID) and should not attempt to use it.
*
* If a group pointer is given, the call is _not_ sparse, and only processes
* in the group should call this routine. That is, it is collective only over
@@ -372,16 +371,16 @@ static int add_gcn_to_list(struct gcn_state *new_state)
#define FUNCNAME MPIR_Get_contextid_sparse_group
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr, int tag,
- MPIU_Context_id_t * context_id, int ignore_id)
+int MPIR_Get_contextid_sparse_group(MPIR_Comm * comm_ptr, MPIR_Group * group_ptr, int tag,
+ MPIR_Context_id_t * context_id, int ignore_id)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
struct gcn_state st;
struct gcn_state *tmp;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GET_CONTEXTID);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GET_CONTEXTID);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GET_CONTEXTID);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GET_CONTEXTID);
st.first_iter = 1;
st.comm_ptr = comm_ptr;
@@ -389,11 +388,11 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
st.own_mask = 0;
st.own_eager_mask = 0;
/* Group-collective and ignore_id should never be combined */
- MPIU_Assert(!(group_ptr != NULL && ignore_id));
+ MPIR_Assert(!(group_ptr != NULL && ignore_id));
*context_id = 0;
- MPIU_DBG_MSG_FMT(COMM, VERBOSE, (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, VERBOSE, (MPL_DBG_FDEST,
"Entering; shared state is %d:%d, my ctx id is %d, tag=%d",
mask_in_use, eager_in_use, comm_ptr->context_id, tag));
@@ -409,7 +408,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
if (eager_nelem < 0) {
/* Ensure that at least one word of deadlock-free context IDs is
* always set aside for the base protocol */
- MPIU_Assert(MPIR_CVAR_CTXID_EAGER_SIZE >= 0 &&
+ MPIR_Assert(MPIR_CVAR_CTXID_EAGER_SIZE >= 0 &&
MPIR_CVAR_CTXID_EAGER_SIZE < MPIR_MAX_CONTEXT_MASK - 1);
eager_nelem = MPIR_CVAR_CTXID_EAGER_SIZE;
}
@@ -442,7 +441,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
}
else {
- MPIU_Assert(next_gcn != NULL);
+ MPIR_Assert(next_gcn != NULL);
/*If we are here, at least one element must be in the list, at least myself */
/* only the first element in the list can own the mask. However, maybe the mask is used
@@ -451,7 +450,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
if (mask_in_use || &st != next_gcn) {
memset(st.local_mask, 0, MPIR_MAX_CONTEXT_MASK * sizeof(int));
st.own_mask = 0;
- MPIU_DBG_MSG_FMT(COMM, VERBOSE, (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, VERBOSE, (MPL_DBG_FDEST,
"Mask is in use, my context_id is %d, owner context id is %d",
st.comm_ptr->context_id,
next_gcn->comm_ptr->context_id));
@@ -466,7 +465,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
mask_in_use = 1;
st.own_mask = 1;
- MPIU_DBG_MSG(COMM, VERBOSE, "Copied local_mask");
+ MPL_DBG_MSG(MPIR_DBG_COMM, VERBOSE, "Copied local_mask");
}
}
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX);
@@ -481,7 +480,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
st.local_mask[ALL_OWN_MASK_FLAG] = 0;
/* Now, try to get a context id */
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
/* In the global and brief-global cases, note that this routine will
* release that global lock when it needs to wait. That will allow
* other processes to enter the global or brief global critical section.
@@ -493,7 +492,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
&errflag);
}
else {
- mpi_errno = MPIR_Allreduce_impl(MPI_IN_PLACE, st.local_mask, MPIR_MAX_CONTEXT_MASK + 1,
+ mpi_errno = MPID_Allreduce(MPI_IN_PLACE, st.local_mask, MPIR_MAX_CONTEXT_MASK + 1,
MPI_INT, MPI_BAND, comm_ptr, &errflag);
}
if (mpi_errno)
@@ -513,7 +512,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
/* There is a chance that we've found a context id */
/* Find_and_allocate_context_id updates the context_mask if it finds a match */
*context_id = find_and_allocate_context_id(st.local_mask);
- MPIU_DBG_MSG_D(COMM, VERBOSE, "Context id is now %hd", *context_id);
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "Context id is now %hd", *context_id);
st.own_eager_mask = 0;
eager_in_use = 0;
@@ -533,7 +532,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
/* There is a chance that we've found a context id */
/* Find_and_allocate_context_id updates the context_mask if it finds a match */
*context_id = find_and_allocate_context_id(st.local_mask);
- MPIU_DBG_MSG_D(COMM, VERBOSE, "Context id is now %hd", *context_id);
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "Context id is now %hd", *context_id);
mask_in_use = 0;
@@ -599,7 +598,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
comm_ptr, group_ptr, coll_tag, &errflag);
}
else {
- mpi_errno = MPIR_Allreduce_impl(MPI_IN_PLACE, &minfree, 1, MPI_INT,
+ mpi_errno = MPID_Allreduce(MPI_IN_PLACE, &minfree, 1, MPI_INT,
MPI_MIN, comm_ptr, &errflag);
}
@@ -618,23 +617,26 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
if (st.first_iter == 1) {
st.first_iter = 0;
/* to avoid deadlocks, the element is not added to the list bevore the first iteration */
- if (!ignore_id && *context_id == 0)
+ if (!ignore_id && *context_id == 0) {
+ MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX);
add_gcn_to_list(&st);
+ MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX);
+ }
}
}
fn_exit:
if (ignore_id)
- *context_id = MPIU_INVALID_CONTEXT_ID;
- MPIU_DBG_MSG_S(COMM, VERBOSE, "Context mask = %s", context_mask_to_str());
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GET_CONTEXTID);
+ *context_id = MPIR_INVALID_CONTEXT_ID;
+ MPL_DBG_MSG_S(MPIR_DBG_COMM, VERBOSE, "Context mask = %s", context_mask_to_str());
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GET_CONTEXTID);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
/* Release the masks */
+ MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX);
if (st.own_mask) {
- /* is it safe to access this without holding the CS? */
mask_in_use = 0;
}
/*If in list, remove it */
@@ -647,6 +649,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
tmp->next = st.next;
}
}
+ MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX);
goto fn_exit;
@@ -655,14 +658,14 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
-static int sched_cb_gcn_copy_mask(MPID_Comm * comm, int tag, void *state);
-static int sched_cb_gcn_allocate_cid(MPID_Comm * comm, int tag, void *state);
-static int sched_cb_gcn_bcast(MPID_Comm * comm, int tag, void *state);
+static int sched_cb_gcn_copy_mask(MPIR_Comm * comm, int tag, void *state);
+static int sched_cb_gcn_allocate_cid(MPIR_Comm * comm, int tag, void *state);
+static int sched_cb_gcn_bcast(MPIR_Comm * comm, int tag, void *state);
#undef FUNCNAME
#define FUNCNAME sched_cb_commit_comm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int sched_cb_commit_comm(MPID_Comm * comm, int tag, void *state)
+static int sched_cb_commit_comm(MPIR_Comm * comm, int tag, void *state)
{
int mpi_errno = MPI_SUCCESS;
struct gcn_state *st = state;
@@ -680,38 +683,38 @@ static int sched_cb_commit_comm(MPID_Comm * comm, int tag, void *state)
#define FUNCNAME sched_cb_gcn_bcast
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int sched_cb_gcn_bcast(MPID_Comm * comm, int tag, void *state)
+static int sched_cb_gcn_bcast(MPIR_Comm * comm, int tag, void *state)
{
int mpi_errno = MPI_SUCCESS;
struct gcn_state *st = state;
- if (st->gcn_cid_kind == MPID_INTERCOMM) {
+ if (st->gcn_cid_kind == MPIR_COMM_KIND__INTERCOMM) {
if (st->comm_ptr_inter->rank == 0) {
mpi_errno =
- MPID_Sched_recv(st->ctx1, 1, MPIU_CONTEXT_ID_T_DATATYPE, 0, st->comm_ptr_inter,
+ MPIR_Sched_recv(st->ctx1, 1, MPIR_CONTEXT_ID_T_DATATYPE, 0, st->comm_ptr_inter,
st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
mpi_errno =
- MPID_Sched_send(st->ctx0, 1, MPIU_CONTEXT_ID_T_DATATYPE, 0, st->comm_ptr_inter,
+ MPIR_Sched_send(st->ctx0, 1, MPIR_CONTEXT_ID_T_DATATYPE, 0, st->comm_ptr_inter,
st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(st->s);
+ MPIR_SCHED_BARRIER(st->s);
}
mpi_errno = st->comm_ptr->coll_fns->Ibcast_sched(st->ctx1, 1,
- MPIU_CONTEXT_ID_T_DATATYPE, 0,
+ MPIR_CONTEXT_ID_T_DATATYPE, 0,
st->comm_ptr, st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(st->s);
+ MPIR_SCHED_BARRIER(st->s);
}
- mpi_errno = MPID_Sched_cb(&sched_cb_commit_comm, st, st->s);
+ mpi_errno = MPIR_Sched_cb(&sched_cb_commit_comm, st, st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_cb(&MPIR_Sched_cb_free_buf, st, st->s);
+ mpi_errno = MPIR_Sched_cb(&MPIR_Sched_cb_free_buf, st, st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -736,11 +739,11 @@ static int sched_cb_gcn_bcast(MPID_Comm * comm, int tag, void *state)
#define FUNCNAME sched_cb_gcn_allocate_cid
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int sched_cb_gcn_allocate_cid(MPID_Comm * comm, int tag, void *state)
+static int sched_cb_gcn_allocate_cid(MPIR_Comm * comm, int tag, void *state)
{
int mpi_errno = MPI_SUCCESS;
struct gcn_state *st = state, *tmp;
- MPIU_Context_id_t newctxid;
+ MPIR_Context_id_t newctxid;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
if (st->own_eager_mask) {
newctxid = find_and_allocate_context_id(st->local_mask);
@@ -781,7 +784,7 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm * comm, int tag, void *state)
int minfree;
context_mask_stats(&nfree, &ntotal);
minfree = nfree;
- MPIR_Allreduce_impl(MPI_IN_PLACE, &minfree, 1, MPI_INT,
+ MPID_Allreduce(MPI_IN_PLACE, &minfree, 1, MPI_INT,
MPI_MIN, st->comm_ptr, &errflag);
if (minfree > 0) {
MPIR_ERR_SETANDJUMP3(mpi_errno, MPI_ERR_OTHER,
@@ -809,24 +812,24 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm * comm, int tag, void *state)
* are not necessarily completed in the same order as they are issued, also on the
* same communicator. To avoid deadlocks, we cannot add the elements to the
* list bevfore the first iallreduce is completed. The "tag" is created for the
- * scheduling - by calling MPID_Sched_next_tag(comm_ptr, &tag) - and the same
+ * scheduling - by calling MPIR_Sched_next_tag(comm_ptr, &tag) - and the same
* for a idup operation on all processes. So we use it here. */
/* FIXME I'm not sure if there can be an overflows for this tag */
st->tag = (uint64_t) tag + MPIR_Process.attrs.tag_ub;
add_gcn_to_list(st);
}
- mpi_errno = MPID_Sched_cb(&sched_cb_gcn_copy_mask, st, st->s);
+ mpi_errno = MPIR_Sched_cb(&sched_cb_gcn_copy_mask, st, st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(st->s);
+ MPIR_SCHED_BARRIER(st->s);
}
}
else {
/* Successfully allocated a context id */
- mpi_errno = MPID_Sched_cb(&sched_cb_gcn_bcast, st, st->s);
+ mpi_errno = MPIR_Sched_cb(&sched_cb_gcn_bcast, st, st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(st->s);
+ MPIR_SCHED_BARRIER(st->s);
}
fn_exit:
@@ -845,8 +848,8 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm * comm, int tag, void *state)
/* In the case of failure, the new communicator was half created.
* So we need to clean the memory allocated for it. */
MPIR_Comm_map_free(st->new_comm);
- MPIU_Handle_obj_free(&MPID_Comm_mem, st->new_comm);
- MPIU_Free(st);
+ MPIR_Handle_obj_free(&MPIR_Comm_mem, st->new_comm);
+ MPL_free(st);
goto fn_exit;
}
@@ -854,7 +857,7 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm * comm, int tag, void *state)
#define FUNCNAME sched_cb_gcn_copy_mask
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int sched_cb_gcn_copy_mask(MPID_Comm * comm, int tag, void *state)
+static int sched_cb_gcn_copy_mask(MPIR_Comm * comm, int tag, void *state)
{
int mpi_errno = MPI_SUCCESS;
struct gcn_state *st = state;
@@ -899,12 +902,12 @@ static int sched_cb_gcn_copy_mask(MPID_Comm * comm, int tag, void *state)
st->comm_ptr, st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(st->s);
+ MPIR_SCHED_BARRIER(st->s);
- mpi_errno = MPID_Sched_cb(&sched_cb_gcn_allocate_cid, st, st->s);
+ mpi_errno = MPIR_Sched_cb(&sched_cb_gcn_allocate_cid, st, st->s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(st->s);
+ MPIR_SCHED_BARRIER(st->s);
fn_fail:
return mpi_errno;
@@ -951,22 +954,22 @@ static int sched_cb_gcn_copy_mask(MPID_Comm * comm, int tag, void *state)
#define FUNCNAME sched_get_cid_nonblock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int sched_get_cid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newcomm,
- MPIU_Context_id_t * ctx0, MPIU_Context_id_t * ctx1,
- MPID_Sched_t s, MPID_Comm_kind_t gcn_cid_kind)
+static int sched_get_cid_nonblock(MPIR_Comm * comm_ptr, MPIR_Comm * newcomm,
+ MPIR_Context_id_t * ctx0, MPIR_Context_id_t * ctx1,
+ MPIR_Sched_t s, MPIR_Comm_kind_t gcn_cid_kind)
{
int mpi_errno = MPI_SUCCESS;
struct gcn_state *st = NULL;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
if (initialize_context_mask) {
context_id_init();
}
- MPIU_CHKPMEM_MALLOC(st, struct gcn_state *, sizeof(struct gcn_state), mpi_errno, "gcn_state");
+ MPIR_CHKPMEM_MALLOC(st, struct gcn_state *, sizeof(struct gcn_state), mpi_errno, "gcn_state");
st->ctx0 = ctx0;
st->ctx1 = ctx1;
- if (gcn_cid_kind == MPID_INTRACOMM) {
+ if (gcn_cid_kind == MPIR_COMM_KIND__INTRACOMM) {
st->comm_ptr = comm_ptr;
st->comm_ptr_inter = NULL;
}
@@ -984,21 +987,21 @@ static int sched_get_cid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newcomm,
if (eager_nelem < 0) {
/* Ensure that at least one word of deadlock-free context IDs is
* always set aside for the base protocol */
- MPIU_Assert(MPIR_CVAR_CTXID_EAGER_SIZE >= 0 &&
+ MPIR_Assert(MPIR_CVAR_CTXID_EAGER_SIZE >= 0 &&
MPIR_CVAR_CTXID_EAGER_SIZE < MPIR_MAX_CONTEXT_MASK - 1);
eager_nelem = MPIR_CVAR_CTXID_EAGER_SIZE;
}
- mpi_errno = MPID_Sched_cb(&sched_cb_gcn_copy_mask, st, s);
+ mpi_errno = MPIR_Sched_cb(&sched_cb_gcn_copy_mask, st, s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -1007,38 +1010,38 @@ static int sched_get_cid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newcomm,
#define FUNCNAME MPIR_Get_contextid_nonblock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Get_contextid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newcommp, MPID_Request ** req)
+int MPIR_Get_contextid_nonblock(MPIR_Comm * comm_ptr, MPIR_Comm * newcommp, MPIR_Request ** req)
{
int mpi_errno = MPI_SUCCESS;
int tag;
- MPID_Sched_t s;
+ MPIR_Sched_t s;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GET_CONTEXTID_NONBLOCK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GET_CONTEXTID_NONBLOCK);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GET_CONTEXTID_NONBLOCK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GET_CONTEXTID_NONBLOCK);
/* now create a schedule */
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* add some entries to it */
mpi_errno =
sched_get_cid_nonblock(comm_ptr, newcommp, &newcommp->context_id, &newcommp->recvcontext_id,
- s, MPID_INTRACOMM);
+ s, MPIR_COMM_KIND__INTRACOMM);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* finally, kick off the schedule and give the caller a request */
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, req);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, req);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GET_CONTEXTID_NONBLOCK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GET_CONTEXTID_NONBLOCK);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1050,28 +1053,28 @@ int MPIR_Get_contextid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newcommp, MPID
#define FUNCNAME MPIR_Get_intercomm_contextid_nonblock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Get_intercomm_contextid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newcommp,
- MPID_Request ** req)
+int MPIR_Get_intercomm_contextid_nonblock(MPIR_Comm * comm_ptr, MPIR_Comm * newcommp,
+ MPIR_Request ** req)
{
int mpi_errno = MPI_SUCCESS;
int tag;
- MPID_Sched_t s;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID_NONBLOCK);
+ MPIR_Sched_t s;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID_NONBLOCK);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID_NONBLOCK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID_NONBLOCK);
/* do as much local setup as possible */
if (!comm_ptr->local_comm) {
- mpi_errno = MPIR_Setup_intercomm_localcomm(comm_ptr);
+ mpi_errno = MPII_Setup_intercomm_localcomm(comm_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
}
/* now create a schedule */
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -1080,17 +1083,17 @@ int MPIR_Get_intercomm_contextid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newc
/* first get a context ID over the local comm */
mpi_errno =
sched_get_cid_nonblock(comm_ptr, newcommp, &newcommp->recvcontext_id, &newcommp->context_id,
- s, MPID_INTERCOMM);
+ s, MPIR_COMM_KIND__INTERCOMM);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* finally, kick off the schedule and give the caller a request */
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, req);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, req);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
fn_fail:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID_NONBLOCK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID_NONBLOCK);
return mpi_errno;
}
@@ -1119,10 +1122,10 @@ int MPIR_Get_intercomm_contextid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newc
#define FUNCNAME MPIR_Get_intercomm_contextid
#undef FCNAME
#define FCNAME "MPIR_Get_intercomm_contextid"
-int MPIR_Get_intercomm_contextid(MPID_Comm * comm_ptr, MPIU_Context_id_t * context_id,
- MPIU_Context_id_t * recvcontext_id)
+int MPIR_Get_intercomm_contextid(MPIR_Comm * comm_ptr, MPIR_Context_id_t * context_id,
+ MPIR_Context_id_t * recvcontext_id)
{
- MPIU_Context_id_t mycontext_id, remote_context_id;
+ MPIR_Context_id_t mycontext_id, remote_context_id;
int mpi_errno = MPI_SUCCESS;
int tag = 31567; /* FIXME - we need an internal tag or
* communication channel. Can we use a different
@@ -1130,13 +1133,13 @@ int MPIR_Get_intercomm_contextid(MPID_Comm * comm_ptr, MPIU_Context_id_t * conte
* provided in the intercomm routine? (not on a dup,
* but in that case it can use the collective context) */
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID);
if (!comm_ptr->local_comm) {
/* Manufacture the local communicator */
- mpi_errno = MPIR_Setup_intercomm_localcomm(comm_ptr);
+ mpi_errno = MPII_Setup_intercomm_localcomm(comm_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
}
@@ -1144,14 +1147,14 @@ int MPIR_Get_intercomm_contextid(MPID_Comm * comm_ptr, MPIU_Context_id_t * conte
mpi_errno = MPIR_Get_contextid_sparse(comm_ptr->local_comm, &mycontext_id, FALSE);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(mycontext_id != 0);
+ MPIR_Assert(mycontext_id != 0);
/* MPIC routine uses an internal context id. The local leads (process 0)
* exchange data */
remote_context_id = -1;
if (comm_ptr->rank == 0) {
- mpi_errno = MPIC_Sendrecv(&mycontext_id, 1, MPIU_CONTEXT_ID_T_DATATYPE, 0, tag,
- &remote_context_id, 1, MPIU_CONTEXT_ID_T_DATATYPE, 0, tag,
+ mpi_errno = MPIC_Sendrecv(&mycontext_id, 1, MPIR_CONTEXT_ID_T_DATATYPE, 0, tag,
+ &remote_context_id, 1, MPIR_CONTEXT_ID_T_DATATYPE, 0, tag,
comm_ptr, MPI_STATUS_IGNORE, &errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -1159,7 +1162,7 @@ int MPIR_Get_intercomm_contextid(MPID_Comm * comm_ptr, MPIU_Context_id_t * conte
/* Make sure that all of the local processes now have this
* id */
- mpi_errno = MPIR_Bcast_impl(&remote_context_id, 1, MPIU_CONTEXT_ID_T_DATATYPE,
+ mpi_errno = MPID_Bcast(&remote_context_id, 1, MPIR_CONTEXT_ID_T_DATATYPE,
0, comm_ptr->local_comm, &errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -1171,7 +1174,7 @@ int MPIR_Get_intercomm_contextid(MPID_Comm * comm_ptr, MPIU_Context_id_t * conte
*context_id = remote_context_id;
*recvcontext_id = mycontext_id;
fn_fail:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GET_INTERCOMM_CONTEXTID);
return mpi_errno;
}
@@ -1179,15 +1182,15 @@ int MPIR_Get_intercomm_contextid(MPID_Comm * comm_ptr, MPIU_Context_id_t * conte
#define FUNCNAME MPIR_Free_contextid
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIR_Free_contextid(MPIU_Context_id_t context_id)
+void MPIR_Free_contextid(MPIR_Context_id_t context_id)
{
int idx, bitpos, raw_prefix;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_FREE_CONTEXTID);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_FREE_CONTEXTID);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_FREE_CONTEXTID);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_FREE_CONTEXTID);
/* Convert the context id to the bit position */
- raw_prefix = MPID_CONTEXT_READ_FIELD(PREFIX, context_id);
+ raw_prefix = MPIR_CONTEXT_READ_FIELD(PREFIX, context_id);
idx = raw_prefix / MPIR_CONTEXT_INT_BITS;
bitpos = raw_prefix % MPIR_CONTEXT_INT_BITS;
@@ -1200,8 +1203,8 @@ void MPIR_Free_contextid(MPIU_Context_id_t context_id)
/* The low order bits for dynamic context IDs don't have meaning the
* same way that low bits of non-dynamic ctx IDs do. So we have to
* check the dynamic case first. */
- if (MPID_CONTEXT_READ_FIELD(DYNAMIC_PROC, context_id)) {
- MPIU_DBG_MSG_D(COMM, VERBOSE, "skipping dynamic process ctx id, context_id=%d", context_id);
+ if (MPIR_CONTEXT_READ_FIELD(DYNAMIC_PROC, context_id)) {
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "skipping dynamic process ctx id, context_id=%d", context_id);
goto fn_exit;
}
else { /* non-dynamic context ID */
@@ -1209,16 +1212,16 @@ void MPIR_Free_contextid(MPIU_Context_id_t context_id)
* localcomms have the same value. To avoid a double-free situation we just
* don't free the context ID for localcomms and assume it will be cleaned up
* when the parent intercomm is itself completely freed. */
- if (MPID_CONTEXT_READ_FIELD(IS_LOCALCOMM, context_id)) {
-#ifdef USE_DBG_LOGGING
+ if (MPIR_CONTEXT_READ_FIELD(IS_LOCALCOMM, context_id)) {
+#ifdef MPL_USE_DBG_LOGGING
char dump_str[1024];
dump_context_id(context_id, dump_str, sizeof(dump_str));
- MPIU_DBG_MSG_S(COMM, VERBOSE, "skipping localcomm id: %s", dump_str);
+ MPL_DBG_MSG_S(MPIR_DBG_COMM, VERBOSE, "skipping localcomm id: %s", dump_str);
#endif
goto fn_exit;
}
- else if (MPID_CONTEXT_READ_FIELD(SUBCOMM, context_id)) {
- MPIU_DBG_MSG_D(COMM, VERBOSE, "skipping non-parent communicator ctx id, context_id=%d",
+ else if (MPIR_CONTEXT_READ_FIELD(SUBCOMM, context_id)) {
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "skipping non-parent communicator ctx id, context_id=%d",
context_id);
goto fn_exit;
}
@@ -1227,11 +1230,11 @@ void MPIR_Free_contextid(MPIU_Context_id_t context_id)
/* --BEGIN ERROR HANDLING-- */
/* Check that this context id has been allocated */
if ((context_mask[idx] & (0x1 << bitpos)) != 0) {
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
char dump_str[1024];
dump_context_id(context_id, dump_str, sizeof(dump_str));
- MPIU_DBG_MSG_S(COMM, VERBOSE, "context dump: %s", dump_str);
- MPIU_DBG_MSG_S(COMM, VERBOSE, "context mask = %s", context_mask_to_str());
+ MPL_DBG_MSG_S(MPIR_DBG_COMM, VERBOSE, "context dump: %s", dump_str);
+ MPL_DBG_MSG_S(MPIR_DBG_COMM, VERBOSE, "context mask = %s", context_mask_to_str());
#endif
MPID_Abort(0, MPI_ERR_INTERN, 1, "In MPIR_Free_contextid, the context id is not in use");
}
@@ -1244,10 +1247,10 @@ void MPIR_Free_contextid(MPIU_Context_id_t context_id)
context_mask[idx] |= (0x1 << bitpos);
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX);
- MPIU_DBG_MSG_FMT(COMM, VERBOSE,
- (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST,
"Freed context %d, mask[%d] bit %d (prefix=%#x)",
context_id, idx, bitpos, raw_prefix));
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_FREE_CONTEXTID);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_FREE_CONTEXTID);
}
diff --git a/src/mpi/comm/intercomm_create.c b/src/mpi/comm/intercomm_create.c
index 4f42a2d..8d3e0c3 100644
--- a/src/mpi/comm/intercomm_create.c
+++ b/src/mpi/comm/intercomm_create.c
@@ -8,7 +8,7 @@
#include "mpiimpl.h"
#include "mpicomm.h"
-#define MPIR_INTERCOMM_CREATE_TAG 0
+#define MPIR_COMM_KIND__INTERCOMM_CREATE_TAG 0
/* -- Begin Profiling Symbol Block for routine MPI_Intercomm_create */
#if defined(HAVE_PRAGMA_WEAK)
@@ -25,205 +25,38 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_co
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
-#ifdef HAVE_ERROR_CHECKING
-PMPI_LOCAL int MPIR_CheckDisjointLpids( int [], int, int [], int );
-#endif /* HAVE_ERROR_CHECKING */
-PMPI_LOCAL int MPID_LPID_GetAllInComm( MPID_Comm *comm_ptr, int local_size,
- int local_lpids[] );
-
#ifndef MPICH_MPI_FROM_PMPI
#undef MPI_Intercomm_create
#define MPI_Intercomm_create PMPI_Intercomm_create
-#ifdef HAVE_ERROR_CHECKING
-/* 128 allows us to handle up to 4k processes */
-#define N_STATIC_LPID32 128
-#undef FUNCNAME
-#define FUNCNAME MPIR_CheckDisjointLpids
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-PMPI_LOCAL int MPIR_CheckDisjointLpids( int lpids1[], int n1,
- int lpids2[], int n2 )
-{
- int i, mask_size, idx, bit, maxlpid = -1;
- int mpi_errno = MPI_SUCCESS;
- uint32_t lpidmaskPrealloc[N_STATIC_LPID32];
- uint32_t *lpidmask;
- MPIU_CHKLMEM_DECL(1);
-
- /* Find the max lpid */
- for (i=0; i<n1; i++) {
- if (lpids1[i] > maxlpid) maxlpid = lpids1[i];
- }
- for (i=0; i<n2; i++) {
- if (lpids2[i] > maxlpid) maxlpid = lpids2[i];
- }
-
- mask_size = (maxlpid / 32) + 1;
-
- if (mask_size > N_STATIC_LPID32) {
- MPIU_CHKLMEM_MALLOC(lpidmask,uint32_t*,mask_size*sizeof(uint32_t),
- mpi_errno,"lpidmask");
- }
- else {
- lpidmask = lpidmaskPrealloc;
- }
-
- /* zero the bitvector array */
- memset(lpidmask, 0x00, mask_size*sizeof(*lpidmask));
-
- /* Set the bits for the first array */
- for (i=0; i<n1; i++) {
- idx = lpids1[i] / 32;
- bit = lpids1[i] % 32;
- lpidmask[idx] = lpidmask[idx] | (1 << bit);
- MPIU_Assert(idx < mask_size);
- }
-
- /* Look for any duplicates in the second array */
- for (i=0; i<n2; i++) {
- idx = lpids2[i] / 32;
- bit = lpids2[i] % 32;
- if (lpidmask[idx] & (1 << bit)) {
- MPIR_ERR_SET1(mpi_errno,MPI_ERR_COMM,
- "**dupprocesses", "**dupprocesses %d", lpids2[i] );
- goto fn_fail;
- }
- /* Add a check on duplicates *within* group 2 */
- lpidmask[idx] = lpidmask[idx] | (1 << bit);
- MPIU_Assert(idx < mask_size);
- }
-
- /* Also fall through for normal return */
- fn_fail:
- MPIU_CHKLMEM_FREEALL();
- return mpi_errno;
-
-}
-#endif /* HAVE_ERROR_CHECKING */
-
-PMPI_LOCAL int MPID_LPID_GetAllInComm( MPID_Comm *comm_ptr, int local_size,
- int local_lpids[] )
-{
- int i;
-
- /* FIXME: Should be using the local_size argument */
- MPIU_Assert( comm_ptr->local_size == local_size );
- for (i=0; i<comm_ptr->local_size; i++) {
- (void)MPID_Comm_get_lpid( comm_ptr, i, &local_lpids[i], FALSE );
- }
- return 0;
-}
-
#undef FUNCNAME
#define FUNCNAME MPIR_Intercomm_create_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Intercomm_create_impl(MPID_Comm *local_comm_ptr, int local_leader,
- MPID_Comm *peer_comm_ptr, int remote_leader, int tag,
- MPID_Comm **new_intercomm_ptr)
+int MPIR_Intercomm_create_impl(MPIR_Comm *local_comm_ptr, int local_leader,
+ MPIR_Comm *peer_comm_ptr, int remote_leader, int tag,
+ MPIR_Comm **new_intercomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Context_id_t final_context_id, recvcontext_id;
- int remote_size, *remote_lpids=0, singlePG;
- int local_size,*local_lpids=0;
- MPID_Gpid *local_gpids=NULL, *remote_gpids=NULL;
+ MPIR_Context_id_t final_context_id, recvcontext_id;
+ int remote_size, *remote_lpids=NULL;
int comm_info[3];
int is_low_group = 0;
int cts_tag;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKLMEM_DECL(4);
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_INTERCOMM_CREATE_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_KIND__INTERCOMM_CREATE_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_INTERCOMM_CREATE_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_KIND__INTERCOMM_CREATE_IMPL);
/* Shift tag into the tagged coll space (tag provided by the user
is ignored as of MPI 3.0) */
- cts_tag = MPIR_INTERCOMM_CREATE_TAG | MPIR_Process.tagged_coll_mask;
-
- /*
- * Error checking for this routine requires care. Because this
- * routine is collective over two different sets of processes,
- * it is relatively easy for the user to try to create an
- * intercommunicator from two overlapping groups of processes.
- * This is made more likely by inconsistencies in the MPI-1
- * specification (clarified in MPI-2) that seemed to allow
- * the groups to overlap. Because of that, we first check that the
- * groups are in fact disjoint before performing any collective
- * operations.
- */
-
- if (local_comm_ptr->rank == local_leader) {
+ cts_tag = MPIR_COMM_KIND__INTERCOMM_CREATE_TAG | MPIR_Process.tagged_coll_mask;
- /* First, exchange the group information. If we were certain
- that the groups were disjoint, we could exchange possible
- context ids at the same time, saving one communication.
- But experience has shown that that is a risky assumption.
- */
- /* Exchange information with my peer. Use sendrecv */
- local_size = local_comm_ptr->local_size;
-
- /* printf( "About to sendrecv in intercomm_create\n" );fflush(stdout);*/
- MPIU_DBG_MSG_FMT(COMM,VERBOSE,(MPIU_DBG_FDEST,"rank %d sendrecv to rank %d", peer_comm_ptr->rank,
- remote_leader));
- mpi_errno = MPIC_Sendrecv( &local_size, 1, MPI_INT,
- remote_leader, cts_tag,
- &remote_size, 1, MPI_INT,
- remote_leader, cts_tag,
- peer_comm_ptr, MPI_STATUS_IGNORE, &errflag );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- MPIU_DBG_MSG_FMT(COMM,VERBOSE,(MPIU_DBG_FDEST, "local size = %d, remote size = %d", local_size,
- remote_size ));
- /* With this information, we can now send and receive the
- global process ids from the peer. */
- MPIU_CHKLMEM_MALLOC(remote_gpids,MPID_Gpid*,remote_size*sizeof(MPID_Gpid), mpi_errno,"remote_gpids");
- MPIU_CHKLMEM_MALLOC(remote_lpids,int*,remote_size*sizeof(int), mpi_errno,"remote_lpids");
- MPIU_CHKLMEM_MALLOC(local_gpids,MPID_Gpid*,local_size*sizeof(MPID_Gpid), mpi_errno,"local_gpids");
- MPIU_CHKLMEM_MALLOC(local_lpids,int*,local_size*sizeof(int), mpi_errno,"local_lpids");
-
- mpi_errno = MPID_GPID_GetAllInComm( local_comm_ptr, local_size, local_gpids, &singlePG );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* Exchange the lpid arrays */
- mpi_errno = MPIC_Sendrecv( local_gpids, local_size*sizeof(MPID_Gpid), MPI_BYTE,
- remote_leader, cts_tag,
- remote_gpids, remote_size*sizeof(MPID_Gpid), MPI_BYTE,
- remote_leader, cts_tag, peer_comm_ptr,
- MPI_STATUS_IGNORE, &errflag );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
-
- /* Convert the remote gpids to the lpids */
- mpi_errno = MPID_GPID_ToLpidArray( remote_size, remote_gpids, remote_lpids );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* Get our own lpids */
- mpi_errno = MPID_LPID_GetAllInComm( local_comm_ptr, local_size, local_lpids );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
-# ifdef HAVE_ERROR_CHECKING
- {
- MPID_BEGIN_ERROR_CHECKS;
- {
- /* Now that we have both the local and remote processes,
- check for any overlap */
- mpi_errno = MPIR_CheckDisjointLpids( local_lpids, local_size, remote_lpids, remote_size );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
- MPID_END_ERROR_CHECKS;
- }
-# endif /* HAVE_ERROR_CHECKING */
-
- /* Make an arbitrary decision about which group of processs is
- the low group. The LEADERS do this by comparing the
- local process ids of the 0th member of the two groups */
- is_low_group = local_lpids[0] < remote_lpids[0];
-
- /* At this point, we're done with the local lpids; they'll
- be freed with the other local memory on exit */
-
- } /* End of the first phase of the leader communication */
+ mpi_errno = MPID_Intercomm_exchange_map(local_comm_ptr, local_leader,
+ peer_comm_ptr, remote_leader,
+ &remote_size, &remote_lpids,
+ &is_low_group);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/*
* Create the contexts. Each group will have a context for sending
@@ -231,23 +64,23 @@ int MPIR_Intercomm_create_impl(MPID_Comm *local_comm_ptr, int local_leader,
* we know that the local and remote groups are disjoint, this
* step will complete
*/
- MPIU_DBG_MSG_FMT(COMM,VERBOSE, (MPIU_DBG_FDEST,"About to get contextid (local_size=%d) on rank %d",
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM,VERBOSE, (MPL_DBG_FDEST,"About to get contextid (local_size=%d) on rank %d",
local_comm_ptr->local_size, local_comm_ptr->rank ));
/* In the multi-threaded case, MPIR_Get_contextid_sparse assumes that the
calling routine already holds the single criticial section */
/* TODO: Make sure this is tag-safe */
mpi_errno = MPIR_Get_contextid_sparse( local_comm_ptr, &recvcontext_id, FALSE );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(recvcontext_id != 0);
- MPIU_DBG_MSG_FMT(COMM,VERBOSE, (MPIU_DBG_FDEST,"Got contextid=%d", recvcontext_id));
+ MPIR_Assert(recvcontext_id != 0);
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM,VERBOSE, (MPL_DBG_FDEST,"Got contextid=%d", recvcontext_id));
/* Leaders can now swap context ids and then broadcast the value
to the local group of processes */
if (local_comm_ptr->rank == local_leader) {
- MPIU_Context_id_t remote_context_id;
+ MPIR_Context_id_t remote_context_id;
- mpi_errno = MPIC_Sendrecv( &recvcontext_id, 1, MPIU_CONTEXT_ID_T_DATATYPE, remote_leader, cts_tag,
- &remote_context_id, 1, MPIU_CONTEXT_ID_T_DATATYPE, remote_leader, cts_tag,
+ mpi_errno = MPIC_Sendrecv( &recvcontext_id, 1, MPIR_CONTEXT_ID_T_DATATYPE, remote_leader, cts_tag,
+ &remote_context_id, 1, MPIR_CONTEXT_ID_T_DATATYPE, remote_leader, cts_tag,
peer_comm_ptr, MPI_STATUS_IGNORE, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -255,68 +88,26 @@ int MPIR_Intercomm_create_impl(MPID_Comm *local_comm_ptr, int local_leader,
/* Now, send all of our local processes the remote_lpids,
along with the final context id */
- comm_info[0] = remote_size;
- comm_info[1] = final_context_id;
- comm_info[2] = is_low_group;
- MPIU_DBG_MSG(COMM,VERBOSE,"About to bcast on local_comm");
- mpi_errno = MPIR_Bcast_impl( comm_info, 3, MPI_INT, local_leader, local_comm_ptr, &errflag );
+ comm_info[0] = final_context_id;
+ MPL_DBG_MSG(MPIR_DBG_COMM,VERBOSE,"About to bcast on local_comm");
+ mpi_errno = MPID_Bcast( comm_info, 1, MPI_INT, local_leader, local_comm_ptr, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
- mpi_errno = MPIR_Bcast_impl( remote_gpids, remote_size*sizeof(MPID_Gpid), MPI_BYTE, local_leader,
- local_comm_ptr, &errflag );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
- MPIU_DBG_MSG_D(COMM,VERBOSE,"end of bcast on local_comm of size %d",
+ MPL_DBG_MSG_D(MPIR_DBG_COMM,VERBOSE,"end of bcast on local_comm of size %d",
local_comm_ptr->local_size );
}
else
{
/* we're the other processes */
- MPIU_DBG_MSG(COMM,VERBOSE,"About to receive bcast on local_comm");
- mpi_errno = MPIR_Bcast_impl( comm_info, 3, MPI_INT, local_leader, local_comm_ptr, &errflag );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
- remote_size = comm_info[0];
- MPIU_CHKLMEM_MALLOC(remote_gpids,MPID_Gpid*,remote_size*sizeof(MPID_Gpid), mpi_errno,"remote_gpids");
- MPIU_CHKLMEM_MALLOC(remote_lpids,int*,remote_size*sizeof(int), mpi_errno,"remote_lpids");
- mpi_errno = MPIR_Bcast_impl( remote_gpids, remote_size*sizeof(MPID_Gpid), MPI_BYTE, local_leader,
- local_comm_ptr, &errflag );
+ MPL_DBG_MSG(MPIR_DBG_COMM,VERBOSE,"About to receive bcast on local_comm");
+ mpi_errno = MPID_Bcast( comm_info, 1, MPI_INT, local_leader, local_comm_ptr, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
/* Extract the context and group sign informatin */
- final_context_id = comm_info[1];
- is_low_group = comm_info[2];
+ final_context_id = comm_info[0];
}
- /* Finish up by giving the device the opportunity to update
- any other infomration among these processes. Note that the
- new intercomm has not been set up; in fact, we haven't yet
- attempted to set up the connection tables.
-
- In the case of the ch3 device, this calls MPID_PG_ForwardPGInfo
- to ensure that all processes have the information about all
- process groups. This must be done before the call
- to MPID_GPID_ToLpidArray, as that call needs to know about
- all of the process groups.
- */
-#ifdef MPID_ICCREATE_REMOTECOMM_HOOK
- MPID_ICCREATE_REMOTECOMM_HOOK( peer_comm_ptr, local_comm_ptr,
- remote_size, (const MPID_Gpid*)remote_gpids, local_leader );
-
-#endif
-
- /* Finally, if we are not the local leader, we need to
- convert the remote gpids to local pids. This must be done
- after we allow the device to handle any steps that it needs to
- take to ensure that all processes contain the necessary process
- group information */
- if (local_comm_ptr->rank != local_leader) {
- mpi_errno = MPID_GPID_ToLpidArray( remote_size, remote_gpids, remote_lpids );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
-
-
/* At last, we now have the information that we need to build the
intercommunicator */
@@ -330,14 +121,14 @@ int MPIR_Intercomm_create_impl(MPID_Comm *local_comm_ptr, int local_leader,
(*new_intercomm_ptr)->remote_size = remote_size;
(*new_intercomm_ptr)->local_size = local_comm_ptr->local_size;
(*new_intercomm_ptr)->rank = local_comm_ptr->rank;
- (*new_intercomm_ptr)->comm_kind = MPID_INTERCOMM;
+ (*new_intercomm_ptr)->comm_kind = MPIR_COMM_KIND__INTERCOMM;
(*new_intercomm_ptr)->local_comm = 0;
(*new_intercomm_ptr)->is_low_group = is_low_group;
mpi_errno = MPID_Create_intercomm_from_lpids( *new_intercomm_ptr, remote_size, remote_lpids );
if (mpi_errno) goto fn_fail;
- MPIR_Comm_map_dup(*new_intercomm_ptr, local_comm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ MPIR_Comm_map_dup(*new_intercomm_ptr, local_comm_ptr, MPIR_COMM_MAP_DIR__L2L);
/* Inherit the error handler (if any) */
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(local_comm_ptr));
@@ -352,8 +143,11 @@ int MPIR_Intercomm_create_impl(MPID_Comm *local_comm_ptr, int local_leader,
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_INTERCOMM_CREATE_IMPL);
+ if (remote_lpids) {
+ MPL_free(remote_lpids);
+ remote_lpids = NULL;
+ }
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_KIND__INTERCOMM_CREATE_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -420,15 +214,15 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader,
MPI_Comm *newintercomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *local_comm_ptr = NULL;
- MPID_Comm *peer_comm_ptr = NULL;
- MPID_Comm *new_intercomm_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INTERCOMM_CREATE);
+ MPIR_Comm *local_comm_ptr = NULL;
+ MPIR_Comm *peer_comm_ptr = NULL;
+ MPIR_Comm *new_intercomm_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INTERCOMM_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INTERCOMM_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INTERCOMM_CREATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -443,7 +237,7 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( local_comm, local_comm_ptr );
+ MPIR_Comm_get_ptr( local_comm, local_comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -451,7 +245,7 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate local_comm_ptr */
- MPID_Comm_valid_ptr( local_comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( local_comm_ptr, mpi_errno, FALSE );
if (local_comm_ptr) {
/* Only check if local_comm_ptr valid */
MPIR_ERRTEST_COMM_INTRA(local_comm_ptr, mpi_errno );
@@ -474,12 +268,12 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader,
if (local_comm_ptr->rank == local_leader) {
- MPID_Comm_get_ptr( peer_comm, peer_comm_ptr );
+ MPIR_Comm_get_ptr( peer_comm, peer_comm_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( peer_comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( peer_comm_ptr, mpi_errno, FALSE );
/* Note: In MPI 1.0, peer_comm was restricted to
intracommunicators. In 1.1, it may be any communicator */
@@ -503,7 +297,7 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader,
process that is the local leader (local_comm_ptr->rank ==
local_leader because we can then use peer_comm_ptr->rank
to get the rank in peer_comm of the local leader. */
- if (peer_comm_ptr->comm_kind == MPID_INTRACOMM &&
+ if (peer_comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
local_comm_ptr->rank == local_leader &&
peer_comm_ptr->rank == remote_leader) {
MPIR_ERR_SET(mpi_errno,MPI_ERR_RANK,"**ranksdistinct");
@@ -520,11 +314,11 @@ int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader,
remote_leader, tag, &new_intercomm_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newintercomm, new_intercomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newintercomm, new_intercomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INTERCOMM_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INTERCOMM_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/intercomm_merge.c b/src/mpi/comm/intercomm_merge.c
index fcdd0f1..31b9571 100644
--- a/src/mpi/comm/intercomm_merge.c
+++ b/src/mpi/comm/intercomm_merge.c
@@ -35,7 +35,7 @@ int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) __
#define FUNCNAME create_and_map
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int create_and_map(MPID_Comm *comm_ptr, int local_high, MPID_Comm *new_intracomm_ptr)
+static int create_and_map(MPIR_Comm *comm_ptr, int local_high, MPIR_Comm *new_intracomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -44,24 +44,23 @@ static int create_and_map(MPID_Comm *comm_ptr, int local_high, MPID_Comm *new_in
from the existing comm */
if (local_high) {
/* remote group first */
- MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_R2L);
+ MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__R2L);
- MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__L2L);
for (i = 0; i < comm_ptr->local_size; i++)
if (i == comm_ptr->rank)
new_intracomm_ptr->rank = comm_ptr->remote_size + i;
}
else {
/* local group first */
- MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_L2L);
+ MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__L2L);
for (i = 0; i < comm_ptr->local_size; i++)
if (i == comm_ptr->rank)
new_intracomm_ptr->rank = i;
- MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR_R2L);
+ MPIR_Comm_map_dup(new_intracomm_ptr, comm_ptr, MPIR_COMM_MAP_DIR__R2L);
}
-fn_fail:
return mpi_errno;
}
@@ -69,19 +68,19 @@ fn_fail:
#define FUNCNAME MPIR_Intercomm_merge_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Intercomm_merge_impl(MPID_Comm *comm_ptr, int high, MPID_Comm **new_intracomm_ptr)
+int MPIR_Intercomm_merge_impl(MPIR_Comm *comm_ptr, int high, MPIR_Comm **new_intracomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
int local_high, remote_high, new_size;
- MPIU_Context_id_t new_context_id;
+ MPIR_Context_id_t new_context_id;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_INTERCOMM_MERGE_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_COMM_KIND__INTERCOMM_MERGE_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_INTERCOMM_MERGE_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_COMM_KIND__INTERCOMM_MERGE_IMPL);
/* Make sure that we have a local intercommunicator */
if (!comm_ptr->local_comm) {
/* Manufacture the local communicator */
- mpi_errno = MPIR_Setup_intercomm_localcomm( comm_ptr );
+ mpi_errno = MPII_Setup_intercomm_localcomm( comm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -93,39 +92,16 @@ int MPIR_Intercomm_merge_impl(MPID_Comm *comm_ptr, int high, MPID_Comm **new_int
/* This routine allows use to use the collective communication
context rather than the point-to-point context. */
mpi_errno = MPIC_Sendrecv( &local_high, 1, MPI_INT, 0, 0,
- &remote_high, 1, MPI_INT, 0, 0, comm_ptr,
- MPI_STATUS_IGNORE, &errflag );
+ &remote_high, 1, MPI_INT, 0, 0, comm_ptr,
+ MPI_STATUS_IGNORE, &errflag );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
+
/* If local_high and remote_high are the same, then order is arbitrary.
- we use the gpids of the rank 0 member of the local and remote
- groups to choose an order in this case. */
+ we use the is_low_group in the intercomm in this case. */
if (local_high == remote_high) {
- MPID_Gpid ingpid, outgpid;
-
- mpi_errno = MPID_GPID_Get( comm_ptr, 0, &ingpid );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- mpi_errno = MPIC_Sendrecv( &ingpid, sizeof(MPID_Gpid), MPI_BYTE, 0, 1,
- &outgpid, sizeof(MPID_Gpid), MPI_BYTE, 0, 1, comm_ptr,
- MPI_STATUS_IGNORE, &errflag );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* Note that the gpids cannot be the same because we are
- starting from a valid intercomm */
- int rc = memcmp(&ingpid,&outgpid,sizeof(MPID_Gpid));
- if(rc < 0)
- local_high = 1;
- else if(rc > 0)
- local_high = 0;
- else
- {
- /* req#3930: The merge algorithm will deadlock if the gpids are inadvertently the
- same due to implementation bugs in the MPID_GPID_Get() function */
- MPIU_Assert(rc != 0);
- }
- }
+ local_high = !(comm_ptr->is_low_group);
}
+ }
/*
All processes in the local group now need to get the
@@ -136,58 +112,117 @@ int MPIR_Intercomm_merge_impl(MPID_Comm *comm_ptr, int high, MPID_Comm **new_int
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
- mpi_errno = MPIR_Comm_create( new_intracomm_ptr );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
+ /*
+ * For the intracomm, we need a consistent context id.
+ * That means that one of the two groups needs to use
+ * the recvcontext_id and the other must use the context_id
+ * The recvcontext_id is unique on each process, but another
+ * communicator may use the context_id. Therefore, we do a small hack.
+ * We set both flags indicating a sub-communicator (intra-node and
+ * inter-node) to one. This is normally not possible (a communicator
+ * is either intra- or inter-node) - which makes this context_id unique.
+ *
+ * There are two path to get it.
+ * 1. If the remote and local groups of the intercomm belongs to the same
+ * comm_world. We can merge them into on group and do a
+ * MPIR_Get_contextid_sparse_group on MPI_COMM_WORLD.
+ *
+ * 2. If not, we fallback to the old "temorary intracomm contextid hack"
+ */
+
new_size = comm_ptr->local_size + comm_ptr->remote_size;
- /* FIXME: For the intracomm, we need a consistent context id.
- That means that one of the two groups needs to use
- the recvcontext_id and the other must use the context_id */
- if (local_high) {
- (*new_intracomm_ptr)->context_id = comm_ptr->recvcontext_id + 2; /* See below */
- }
- else {
- (*new_intracomm_ptr)->context_id = comm_ptr->context_id + 2; /* See below */
- }
- (*new_intracomm_ptr)->recvcontext_id = (*new_intracomm_ptr)->context_id;
- (*new_intracomm_ptr)->remote_size = (*new_intracomm_ptr)->local_size = new_size;
- (*new_intracomm_ptr)->rank = -1;
- (*new_intracomm_ptr)->comm_kind = MPID_INTRACOMM;
+ if (MPID_INTERCOMM_NO_DYNPROC(comm_ptr)) {
+ MPIR_Group *merge_group_ptr = NULL;
+ MPIR_Group *comm_world_group = NULL;
+ int *lupids;
+ int lupid, i;
- /* Now we know which group comes first. Build the new mapping
- from the existing comm */
- mpi_errno = create_and_map(comm_ptr, local_high, (*new_intracomm_ptr));
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPL_DBG_MSG(MPIR_DBG_COMM,VERBOSE,"Intercomm_merge contextid fastpath");
+ lupids = (int*) MPL_malloc(new_size * sizeof(int));
- /* We've setup a temporary context id, based on the context id
- used by the intercomm. This allows us to perform the allreduce
- operations within the context id algorithm, since we already
- have a valid (almost - see comm_create_hook) communicator.
- */
- mpi_errno = MPIR_Comm_commit((*new_intracomm_ptr));
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ if (!local_high) {
+ for (i = 0; i < comm_ptr->local_size; i++) {
+ MPID_Comm_get_lpid(comm_ptr, i, &lupid, FALSE);
+ lupids[i] = lupid;
+ }
+ for (i = 0; i < comm_ptr->remote_size; i++) {
+ MPID_Comm_get_lpid(comm_ptr, i, &lupid, TRUE);
+ lupids[i+comm_ptr->local_size] = lupid;
+ }
+ } else {
+ for (i = 0; i < comm_ptr->remote_size; i++) {
+ MPID_Comm_get_lpid(comm_ptr, i, &lupid, TRUE);
+ lupids[i] = lupid;
+ }
+ for (i = 0; i < comm_ptr->local_size; i++) {
+ MPID_Comm_get_lpid(comm_ptr, i, &lupid, FALSE);
+ lupids[i+comm_ptr->remote_size] = lupid;
+ }
+ }
+ MPIR_Comm_group_impl(MPIR_Process.comm_world, &comm_world_group);
+ MPIR_Group_incl_impl(comm_world_group, new_size, lupids, &merge_group_ptr);
- /* printf( "About to get context id \n" ); fflush( stdout ); */
- /* In the multi-threaded case, MPIR_Get_contextid_sparse assumes that the
- calling routine already holds the single criticial section */
- new_context_id = 0;
- mpi_errno = MPIR_Get_contextid_sparse( (*new_intracomm_ptr), &new_context_id, FALSE );
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(new_context_id != 0);
+ MPL_free(lupids);
- /* We release this communicator that was involved just to
- * get valid context id and create true one
- */
- mpi_errno = MPIR_Comm_release(*new_intracomm_ptr);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ new_context_id = 0;
+ mpi_errno = MPIR_Get_contextid_sparse_group(MPIR_Process.comm_world, merge_group_ptr,
+ MPIR_Process.attrs.tag_ub, &new_context_id, FALSE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_Assert(new_context_id != 0);
+
+ mpi_errno = MPIR_Group_release(comm_world_group);
+ mpi_errno = MPIR_Group_release(merge_group_ptr);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ } else {
+ mpi_errno = MPIR_Comm_create( new_intracomm_ptr );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ if (local_high) {
+ (*new_intracomm_ptr)->context_id = MPIR_CONTEXT_SET_FIELD(SUBCOMM,comm_ptr->recvcontext_id, 3);
+ }
+ else {
+ (*new_intracomm_ptr)->context_id = MPIR_CONTEXT_SET_FIELD(SUBCOMM, comm_ptr->context_id, 3);
+ }
+ (*new_intracomm_ptr)->recvcontext_id = (*new_intracomm_ptr)->context_id;
+ (*new_intracomm_ptr)->remote_size = (*new_intracomm_ptr)->local_size = new_size;
+ (*new_intracomm_ptr)->rank = -1;
+ (*new_intracomm_ptr)->comm_kind = MPIR_COMM_KIND__INTRACOMM;
+
+ /* Now we know which group comes first. Build the new mapping
+ from the existing comm */
+ mpi_errno = create_and_map(comm_ptr, local_high, (*new_intracomm_ptr));
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* We've setup a temporary context id, based on the context id
+ used by the intercomm. This allows us to perform the allreduce
+ operations within the context id algorithm, since we already
+ have a valid (almost - see comm_create_hook) communicator.
+ */
+ mpi_errno = MPIR_Comm_commit((*new_intracomm_ptr));
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* printf( "About to get context id \n" ); fflush( stdout ); */
+ /* In the multi-threaded case, MPIR_Get_contextid_sparse assumes that the
+ calling routine already holds the single criticial section */
+ new_context_id = 0;
+ mpi_errno = MPIR_Get_contextid_sparse( (*new_intracomm_ptr), &new_context_id, FALSE );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_Assert(new_context_id != 0);
+
+ /* We release this communicator that was involved just to
+ * get valid context id and create true one
+ */
+ mpi_errno = MPIR_Comm_release(*new_intracomm_ptr);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
mpi_errno = MPIR_Comm_create( new_intracomm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
(*new_intracomm_ptr)->remote_size = (*new_intracomm_ptr)->local_size = new_size;
(*new_intracomm_ptr)->rank = -1;
- (*new_intracomm_ptr)->comm_kind = MPID_INTRACOMM;
+ (*new_intracomm_ptr)->comm_kind = MPIR_COMM_KIND__INTRACOMM;
(*new_intracomm_ptr)->context_id = new_context_id;
(*new_intracomm_ptr)->recvcontext_id = new_context_id;
@@ -198,7 +233,7 @@ int MPIR_Intercomm_merge_impl(MPID_Comm *comm_ptr, int high, MPID_Comm **new_int
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_INTERCOMM_MERGE_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_COMM_KIND__INTERCOMM_MERGE_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -253,14 +288,14 @@ Algorithm:
int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm *new_intracomm_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INTERCOMM_MERGE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Comm *new_intracomm_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INTERCOMM_MERGE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INTERCOMM_MERGE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INTERCOMM_MERGE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -274,7 +309,7 @@ int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( intercomm, comm_ptr );
+ MPIR_Comm_get_ptr( intercomm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -282,9 +317,9 @@ int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
- if (comm_ptr && comm_ptr->comm_kind != MPID_INTERCOMM) {
+ if (comm_ptr && comm_ptr->comm_kind != MPIR_COMM_KIND__INTERCOMM) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_COMM,
"**commnotinter", 0 );
@@ -298,7 +333,7 @@ int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm)
/* Make sure that we have a local intercommunicator */
if (!comm_ptr->local_comm) {
/* Manufacture the local communicator */
- MPIR_Setup_intercomm_localcomm( comm_ptr );
+ MPII_Setup_intercomm_localcomm( comm_ptr );
}
# ifdef HAVE_ERROR_CHECKING
@@ -334,12 +369,12 @@ int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm)
mpi_errno = MPIR_Intercomm_merge_impl(comm_ptr, high, &new_intracomm_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newintracomm, new_intracomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newintracomm, new_intracomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INTERCOMM_MERGE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INTERCOMM_MERGE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/comm/mpicomm.h b/src/mpi/comm/mpicomm.h
index 03b7873..fcc0187 100644
--- a/src/mpi/comm/mpicomm.h
+++ b/src/mpi/comm/mpicomm.h
@@ -5,4 +5,4 @@
*/
/* Function prototypes for communicator helper functions */
-int MPIR_Get_intercomm_contextid( MPID_Comm *, MPIU_Context_id_t *, MPIU_Context_id_t * );
+int MPIR_Get_intercomm_contextid( MPIR_Comm *, MPIR_Context_id_t *, MPIR_Context_id_t * );
diff --git a/src/mpi/datatype/.state-cache b/src/mpi/datatype/.state-cache
index 466910e..72a5265 100644
--- a/src/mpi/datatype/.state-cache
+++ b/src/mpi/datatype/.state-cache
@@ -1,190 +1,190 @@
<dir>
-<file name="type_indexed.c" info="1447123141"/>
-<file name="type_match_size.c" info="1447123141"/>
-<file name="type_create_resized.c" info="1447123141"/>
-<file name="type_ub.c" info="1447123141"/>
-<file name="pack_size.c" info="1447123141"/>
-<file name="register_datarep.c" info="1447123141"/>
-<file name="type_create_indexed_block.c" info="1447123141"/>
-<file name="type_get_true_extent_x.c" info="1447123141"/>
-<file name="type_create_hindexed_block.c" info="1447123141"/>
-<file name="type_extent.c" info="1447123141"/>
-<file name="type_hindexed.c" info="1447123141"/>
-<file name="type_vector.c" info="1447123141"/>
-<file name="type_create_hvector.c" info="1447123141"/>
-<file name="type_create_struct.c" info="1447123141"/>
-<file name="type_get_extent.c" info="1447123141"/>
-<file name="type_free.c" info="1447123141"/>
-<file name="type_contiguous.c" info="1447123141"/>
-<file name="type_size.c" info="1447123141"/>
-<file name="pack_external_size.c" info="1447123141"/>
-<file name="get_count.c" info="1447123141"/>
-<file name="unpack.c" info="1447123141"/>
-<file name="type_lb.c" info="1447123141"/>
-<file name="type_create_darray.c" info="1447123141"/>
-<file name="status_set_elements.c" info="1447123141"/>
-<file name="type_size_x.c" info="1447123141"/>
-<file name="datatype.h" info="1447123141"/>
-<file name="get_address.c" info="1447123141"/>
-<file name="type_commit.c" info="1447123141"/>
-<file name="type_create_hindexed.c" info="1447123141"/>
-<file name="type_create_subarray.c" info="1447123141"/>
-<file name="type_dup.c" info="1447123141"/>
-<file name="get_elements.c" info="1447123141"/>
-<file name="address.c" info="1447123141"/>
-<file name="get_elements_x.c" info="1447123141"/>
-<file name="type_hvector.c" info="1447123141"/>
-<file name="type_get_extent_x.c" info="1447123141"/>
-<file name="type_struct.c" info="1447123141"/>
-<file name="pack.c" info="1447123141"/>
-<file name="type_set_name.c" info="1447123141"/>
-<file name="type_get_contents.c" info="1447123141"/>
-<file name="unpack_external.c" info="1447123141"/>
-<file name="status_set_elements_x.c" info="1447123141"/>
-<file name="type_get_true_extent.c" info="1447123141"/>
-<file name="typeutil.c" info="1447123141"/>
-<file name="type_get_name.c" info="1447123141"/>
-<file name="type_get_envelope.c" info="1447123141"/>
-<file name="pack_external.c" info="1447123141"/>
+<file name="type_get_name.c" info="1478973152"/>
+<file name="type_get_true_extent_x.c" info="1478973152"/>
+<file name="type_size_x.c" info="1478973152"/>
+<file name="type_hvector.c" info="1478973152"/>
+<file name="type_commit.c" info="1478973152"/>
+<file name="type_create_hvector.c" info="1478973152"/>
+<file name="status_set_elements_x.c" info="1478973152"/>
+<file name="pack_external_size.c" info="1478973152"/>
+<file name="pack.c" info="1478973152"/>
+<file name="unpack_external.c" info="1478973152"/>
+<file name="type_get_envelope.c" info="1478973152"/>
+<file name="type_indexed.c" info="1478973152"/>
+<file name="get_elements.c" info="1478973152"/>
+<file name="pack_external.c" info="1478973152"/>
+<file name="type_set_name.c" info="1478973152"/>
+<file name="type_create_subarray.c" info="1478973152"/>
+<file name="pack_size.c" info="1478973152"/>
+<file name="type_hindexed.c" info="1478973152"/>
+<file name="type_create_darray.c" info="1478973152"/>
+<file name="type_create_resized.c" info="1478973152"/>
+<file name="type_size.c" info="1478973152"/>
+<file name="type_create_hindexed.c" info="1478973152"/>
+<file name="type_dup.c" info="1478973152"/>
+<file name="status_set_elements.c" info="1478973152"/>
+<file name="register_datarep.c" info="1478973152"/>
+<file name="typeutil.c" info="1478973152"/>
+<file name="type_get_true_extent.c" info="1478973152"/>
+<file name="datatype.h" info="1478973152"/>
+<file name="type_lb.c" info="1478973152"/>
+<file name="type_create_indexed_block.c" info="1478973152"/>
+<file name="type_match_size.c" info="1478973152"/>
+<file name="type_get_extent.c" info="1478973152"/>
+<file name="address.c" info="1478973152"/>
+<file name="get_count.c" info="1478973152"/>
+<file name="type_extent.c" info="1478973152"/>
+<file name="type_free.c" info="1478973152"/>
+<file name="type_ub.c" info="1478973152"/>
+<file name="type_get_extent_x.c" info="1478973152"/>
+<file name="type_vector.c" info="1478973152"/>
+<file name="type_struct.c" info="1478973152"/>
+<file name="type_create_hindexed_block.c" info="1478973152"/>
+<file name="type_create_struct.c" info="1478973152"/>
+<file name="get_address.c" info="1478973152"/>
+<file name="unpack.c" info="1478973152"/>
+<file name="type_get_contents.c" info="1478973152"/>
+<file name="get_elements_x.c" info="1478973152"/>
+<file name="type_contiguous.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="type_indexed.c">
-MPID_STATE_MPI_TYPE_INDEXED MPI_Type_indexed
+<fileinfo name="type_get_name.c">
+MPID_STATE_MPI_TYPE_GET_NAME MPI_Type_get_name
</fileinfo>
-<fileinfo name="type_match_size.c">
-MPID_STATE_MPI_TYPE_MATCH_SIZE MPI_Type_match_size
+<fileinfo name="type_get_true_extent_x.c">
+MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X MPI_Type_get_true_extent_x
</fileinfo>
-<fileinfo name="type_create_resized.c">
-MPID_STATE_MPI_TYPE_CREATE_RESIZED MPI_Type_create_resized
+<fileinfo name="type_size_x.c">
+MPID_STATE_MPI_TYPE_SIZE_X MPI_Type_size_x
</fileinfo>
-<fileinfo name="type_ub.c">
-MPID_STATE_MPI_TYPE_UB MPI_Type_ub
+<fileinfo name="type_hvector.c">
+MPID_STATE_MPI_TYPE_HVECTOR MPI_Type_hvector
</fileinfo>
-<fileinfo name="pack_size.c">
-MPID_STATE_MPI_PACK_SIZE MPI_Pack_size
+<fileinfo name="type_commit.c">
+MPID_STATE_MPI_TYPE_COMMIT MPI_Type_commit
</fileinfo>
-<fileinfo name="register_datarep.c">
-MPID_STATE_MPI_REGISTER_DATAREP MPI_Register_datarep
+<fileinfo name="type_create_hvector.c">
+MPID_STATE_MPI_TYPE_CREATE_HVECTOR MPI_Type_create_hvector
</fileinfo>
-<fileinfo name="type_create_indexed_block.c">
-MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK MPI_Type_create_indexed_block
+<fileinfo name="status_set_elements_x.c">
+MPID_STATE_MPI_STATUS_SET_ELEMENTS_X MPI_Status_set_elements_x
</fileinfo>
-<fileinfo name="type_get_true_extent_x.c">
-MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X MPI_Type_get_true_extent_x
+<fileinfo name="pack_external_size.c">
+MPID_STATE_MPI_PACK_EXTERNAL_SIZE MPI_Pack_external_size
</fileinfo>
-<fileinfo name="type_create_hindexed_block.c">
-MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK MPI_Type_create_hindexed_block
+<fileinfo name="pack.c">
+MPID_STATE_MPI_PACK MPI_Pack
</fileinfo>
-<fileinfo name="type_extent.c">
-MPID_STATE_MPI_TYPE_EXTENT MPI_Type_extent
+<fileinfo name="unpack_external.c">
+MPID_STATE_MPI_UNPACK_EXTERNAL MPI_Unpack_external
</fileinfo>
-<fileinfo name="type_hindexed.c">
-MPID_STATE_MPI_TYPE_HINDEXED MPI_Type_hindexed
+<fileinfo name="type_get_envelope.c">
+MPID_STATE_MPI_TYPE_GET_ENVELOPE MPI_Type_get_envelope
</fileinfo>
-<fileinfo name="type_vector.c">
-MPID_STATE_MPI_TYPE_VECTOR MPI_Type_vector
+<fileinfo name="type_indexed.c">
+MPID_STATE_MPI_TYPE_INDEXED MPI_Type_indexed
</fileinfo>
-<fileinfo name="type_create_hvector.c">
-MPID_STATE_MPI_TYPE_CREATE_HVECTOR MPI_Type_create_hvector
+<fileinfo name="get_elements.c">
+MPID_STATE_MPI_GET_ELEMENTS MPI_Get_elements
</fileinfo>
-<fileinfo name="type_create_struct.c">
-MPID_STATE_MPI_TYPE_CREATE_STRUCT MPI_Type_create_struct
+<fileinfo name="pack_external.c">
+MPID_STATE_MPI_PACK_EXTERNAL MPI_Pack_external
</fileinfo>
-<fileinfo name="type_get_extent.c">
-MPID_STATE_MPI_TYPE_GET_EXTENT MPI_Type_get_extent
+<fileinfo name="type_set_name.c">
+MPID_STATE_MPI_TYPE_SET_NAME MPI_Type_set_name
</fileinfo>
-<fileinfo name="type_free.c">
-MPID_STATE_MPI_TYPE_FREE MPI_Type_free
+<fileinfo name="type_create_subarray.c">
+MPID_STATE_MPI_TYPE_CREATE_SUBARRAY MPI_Type_create_subarray
</fileinfo>
-<fileinfo name="type_contiguous.c">
-MPID_STATE_MPI_TYPE_CONTIGUOUS MPI_Type_contiguous
+<fileinfo name="pack_size.c">
+MPID_STATE_MPI_PACK_SIZE MPI_Pack_size
</fileinfo>
-<fileinfo name="type_size.c">
-MPID_STATE_MPI_TYPE_SIZE MPI_Type_size
+<fileinfo name="type_hindexed.c">
+MPID_STATE_MPI_TYPE_HINDEXED MPI_Type_hindexed
</fileinfo>
-<fileinfo name="pack_external_size.c">
-MPID_STATE_MPI_PACK_EXTERNAL_SIZE MPI_Pack_external_size
+<fileinfo name="type_create_darray.c">
+MPID_STATE_MPI_TYPE_CREATE_DARRAY MPI_Type_create_darray
</fileinfo>
-<fileinfo name="get_count.c">
-MPID_STATE_MPI_GET_COUNT MPI_Get_count
+<fileinfo name="type_create_resized.c">
+MPID_STATE_MPI_TYPE_CREATE_RESIZED MPI_Type_create_resized
</fileinfo>
-<fileinfo name="unpack.c">
-MPID_STATE_MPI_UNPACK MPI_Unpack
+<fileinfo name="type_size.c">
+MPID_STATE_MPI_TYPE_SIZE MPI_Type_size
</fileinfo>
-<fileinfo name="type_lb.c">
-MPID_STATE_MPI_TYPE_LB MPI_Type_lb
+<fileinfo name="type_create_hindexed.c">
+MPID_STATE_MPI_TYPE_CREATE_HINDEXED MPI_Type_create_hindexed
</fileinfo>
-<fileinfo name="type_create_darray.c">
-MPID_STATE_MPI_TYPE_CREATE_DARRAY MPI_Type_create_darray
+<fileinfo name="type_dup.c">
+MPID_STATE_MPI_TYPE_DUP MPI_Type_dup
</fileinfo>
<fileinfo name="status_set_elements.c">
MPID_STATE_MPI_STATUS_SET_ELEMENTS MPI_Status_set_elements
</fileinfo>
-<fileinfo name="type_size_x.c">
-MPID_STATE_MPI_TYPE_SIZE_X MPI_Type_size_x
+<fileinfo name="register_datarep.c">
+MPID_STATE_MPI_REGISTER_DATAREP MPI_Register_datarep
</fileinfo>
-<fileinfo name="datatype.h">
+<fileinfo name="typeutil.c">
</fileinfo>
-<fileinfo name="get_address.c">
-MPID_STATE_MPI_GET_ADDRESS MPI_Get_address
+<fileinfo name="type_get_true_extent.c">
+MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT MPI_Type_get_true_extent
</fileinfo>
-<fileinfo name="type_commit.c">
-MPID_STATE_MPI_TYPE_COMMIT MPI_Type_commit
+<fileinfo name="datatype.h">
</fileinfo>
-<fileinfo name="type_create_hindexed.c">
-MPID_STATE_MPI_TYPE_CREATE_HINDEXED MPI_Type_create_hindexed
+<fileinfo name="type_lb.c">
+MPID_STATE_MPI_TYPE_LB MPI_Type_lb
</fileinfo>
-<fileinfo name="type_create_subarray.c">
-MPID_STATE_MPI_TYPE_CREATE_SUBARRAY MPI_Type_create_subarray
+<fileinfo name="type_create_indexed_block.c">
+MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK MPI_Type_create_indexed_block
</fileinfo>
-<fileinfo name="type_dup.c">
-MPID_STATE_MPI_TYPE_DUP MPI_Type_dup
+<fileinfo name="type_match_size.c">
+MPID_STATE_MPI_TYPE_MATCH_SIZE MPI_Type_match_size
</fileinfo>
-<fileinfo name="get_elements.c">
-MPID_STATE_MPI_GET_ELEMENTS MPI_Get_elements
+<fileinfo name="type_get_extent.c">
+MPID_STATE_MPI_TYPE_GET_EXTENT MPI_Type_get_extent
</fileinfo>
<fileinfo name="address.c">
MPID_STATE_MPI_ADDRESS MPI_Address
</fileinfo>
-<fileinfo name="get_elements_x.c">
-MPID_STATE_MPI_GET_ELEMENTS_X MPI_Get_elements_x
+<fileinfo name="get_count.c">
+MPID_STATE_MPI_GET_COUNT MPI_Get_count
</fileinfo>
-<fileinfo name="type_hvector.c">
-MPID_STATE_MPI_TYPE_HVECTOR MPI_Type_hvector
+<fileinfo name="type_extent.c">
+MPID_STATE_MPI_TYPE_EXTENT MPI_Type_extent
+</fileinfo>
+<fileinfo name="type_free.c">
+MPID_STATE_MPI_TYPE_FREE MPI_Type_free
+</fileinfo>
+<fileinfo name="type_ub.c">
+MPID_STATE_MPI_TYPE_UB MPI_Type_ub
</fileinfo>
<fileinfo name="type_get_extent_x.c">
MPID_STATE_MPI_TYPE_GET_EXTENT_X MPI_Type_get_extent_x
</fileinfo>
+<fileinfo name="type_vector.c">
+MPID_STATE_MPI_TYPE_VECTOR MPI_Type_vector
+</fileinfo>
<fileinfo name="type_struct.c">
MPID_STATE_MPI_TYPE_STRUCT MPI_Type_struct
</fileinfo>
-<fileinfo name="pack.c">
-MPID_STATE_MPI_PACK MPI_Pack
-</fileinfo>
-<fileinfo name="type_set_name.c">
-MPID_STATE_MPI_TYPE_SET_NAME MPI_Type_set_name
-</fileinfo>
-<fileinfo name="type_get_contents.c">
-MPID_STATE_MPI_TYPE_GET_CONTENTS MPI_Type_get_contents
-</fileinfo>
-<fileinfo name="unpack_external.c">
-MPID_STATE_MPI_UNPACK_EXTERNAL MPI_Unpack_external
+<fileinfo name="type_create_hindexed_block.c">
+MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK MPI_Type_create_hindexed_block
</fileinfo>
-<fileinfo name="status_set_elements_x.c">
-MPID_STATE_MPI_STATUS_SET_ELEMENTS_X MPI_Status_set_elements_x
+<fileinfo name="type_create_struct.c">
+MPID_STATE_MPI_TYPE_CREATE_STRUCT MPI_Type_create_struct
</fileinfo>
-<fileinfo name="type_get_true_extent.c">
-MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT MPI_Type_get_true_extent
+<fileinfo name="get_address.c">
+MPID_STATE_MPI_GET_ADDRESS MPI_Get_address
</fileinfo>
-<fileinfo name="typeutil.c">
+<fileinfo name="unpack.c">
+MPID_STATE_MPI_UNPACK MPI_Unpack
</fileinfo>
-<fileinfo name="type_get_name.c">
-MPID_STATE_MPI_TYPE_GET_NAME MPI_Type_get_name
+<fileinfo name="type_get_contents.c">
+MPID_STATE_MPI_TYPE_GET_CONTENTS MPI_Type_get_contents
</fileinfo>
-<fileinfo name="type_get_envelope.c">
-MPID_STATE_MPI_TYPE_GET_ENVELOPE MPI_Type_get_envelope
+<fileinfo name="get_elements_x.c">
+MPID_STATE_MPI_GET_ELEMENTS_X MPI_Get_elements_x
</fileinfo>
-<fileinfo name="pack_external.c">
-MPID_STATE_MPI_PACK_EXTERNAL MPI_Pack_external
+<fileinfo name="type_contiguous.c">
+MPID_STATE_MPI_TYPE_CONTIGUOUS MPI_Type_contiguous
</fileinfo>
</data>
diff --git a/src/mpi/datatype/address.c b/src/mpi/datatype/address.c
index 4557846..7681c6f 100644
--- a/src/mpi/datatype/address.c
+++ b/src/mpi/datatype/address.c
@@ -15,7 +15,7 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Address as PMPI_Address
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPI_Address(const void *location, MPI_Aint *address) __attribute__((weak,alias("PMPI_Address")));
+int MPI_Address(void *location, MPI_Aint *address) __attribute__((weak,alias("PMPI_Address")));
#endif
/* -- End Profiling Symbol Block */
@@ -59,14 +59,14 @@ The replacement for this routine is 'MPI_Get_address'.
.N MPI_SUCCESS
.N MPI_ERR_OTHER
@*/
-int MPI_Address(const void *location, MPI_Aint *address)
+int MPI_Address(void *location, MPI_Aint *address)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ADDRESS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ADDRESS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ADDRESS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ADDRESS);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -89,7 +89,7 @@ int MPI_Address(const void *location, MPI_Aint *address)
standard, I can't tell if this is a compiler bug or a language bug.
*/
#ifdef CHAR_PTR_IS_ADDRESS
- *address = MPIU_VOID_PTR_CAST_TO_MPI_AINT ((char *) location);
+ *address = MPIR_VOID_PTR_CAST_TO_MPI_AINT ((char *) location);
#else
/* Note that this is the "portable" way to generate an address.
The difference of two pointers is the number of elements
@@ -98,7 +98,7 @@ int MPI_Address(const void *location, MPI_Aint *address)
of bytes from 0 to location */
/* To cover the case where a pointer is 32 bits and MPI_Aint is 64 bits,
add cast to unsigned so the high order address bit is not sign-extended. */
- *address = MPIU_VOID_PTR_CAST_TO_MPI_AINT ((char *) location - (char *) MPI_BOTTOM);
+ *address = MPIR_VOID_PTR_CAST_TO_MPI_AINT ((char *) location - (char *) MPI_BOTTOM);
#endif
/* The same code is used in MPI_Get_address */
@@ -107,7 +107,7 @@ int MPI_Address(const void *location, MPI_Aint *address)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ADDRESS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ADDRESS);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/get_address.c b/src/mpi/datatype/get_address.c
index 2f291bf..2977321 100644
--- a/src/mpi/datatype/get_address.c
+++ b/src/mpi/datatype/get_address.c
@@ -72,11 +72,11 @@ Output Parameters:
int MPI_Get_address(const void *location, MPI_Aint *address)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_ADDRESS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_ADDRESS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GET_ADDRESS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GET_ADDRESS);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -99,14 +99,14 @@ int MPI_Get_address(const void *location, MPI_Aint *address)
standard, I can't tell if this is a compiler bug or a language bug.
*/
#ifdef CHAR_PTR_IS_ADDRESS
- *address = MPIU_VOID_PTR_CAST_TO_MPI_AINT ((char *) location);
+ *address = MPIR_VOID_PTR_CAST_TO_MPI_AINT ((char *) location);
#else
/* Note that this is the "portable" way to generate an address.
The difference of two pointers is the number of elements
between them, so this gives the number of chars between location
and ptr. As long as sizeof(char) represents one byte,
of bytes from 0 to location */
- *address = MPIU_VOID_PTR_CAST_TO_MPI_AINT ((char *) location - (char *) MPI_BOTTOM);
+ *address = MPIR_VOID_PTR_CAST_TO_MPI_AINT ((char *) location - (char *) MPI_BOTTOM);
#endif
/* The same code is used in MPI_Address */
@@ -115,7 +115,7 @@ int MPI_Get_address(const void *location, MPI_Aint *address)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GET_ADDRESS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GET_ADDRESS);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/get_count.c b/src/mpi/datatype/get_count.c
index a96f7a3..1ed418d 100644
--- a/src/mpi/datatype/get_count.c
+++ b/src/mpi/datatype/get_count.c
@@ -33,7 +33,7 @@ void MPIR_Get_count_impl(const MPI_Status *status, MPI_Datatype datatype, int *c
MPI_Count size;
MPID_Datatype_get_size_macro(datatype, size);
- MPIU_Assert(size >= 0 && MPIR_STATUS_GET_COUNT(*status) >= 0);
+ MPIR_Assert(size >= 0 && MPIR_STATUS_GET_COUNT(*status) >= 0);
if (size != 0) {
/* MPI-3 says return MPI_UNDEFINED if too large for an int */
if ((MPIR_STATUS_GET_COUNT(*status) % size) != 0 || ((MPIR_STATUS_GET_COUNT(*status) / size) > INT_MAX))
@@ -91,17 +91,17 @@ size of 'datatype' (so that 'count' would not be integral), a 'count' of
int MPI_Get_count( const MPI_Status *status, MPI_Datatype datatype, int *count )
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_COUNT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_COUNT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GET_COUNT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GET_COUNT);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_ARGNULL(status, "status", mpi_errno);
MPIR_ERRTEST_ARGNULL(count, "count", mpi_errno);
@@ -110,7 +110,7 @@ int MPI_Get_count( const MPI_Status *status, MPI_Datatype datatype, int *count )
/* Validate datatype_ptr */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
/* Q: Must the type be committed to be used with this function? */
}
@@ -128,7 +128,7 @@ int MPI_Get_count( const MPI_Status *status, MPI_Datatype datatype, int *count )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GET_COUNT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GET_COUNT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/get_elements.c b/src/mpi/datatype/get_elements.c
index 38c9bf7..01c9419 100644
--- a/src/mpi/datatype/get_elements.c
+++ b/src/mpi/datatype/get_elements.c
@@ -60,11 +60,11 @@ int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count
int mpi_errno = MPI_SUCCESS;
MPI_Count count_x;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_ELEMENTS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_ELEMENTS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GET_ELEMENTS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GET_ELEMENTS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -82,7 +82,7 @@ int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_ARGNULL(status, "status", mpi_errno);
MPIR_ERRTEST_ARGNULL(count, "count", mpi_errno);
@@ -91,7 +91,7 @@ int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count
/* Validate datatype_ptr */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
@@ -113,7 +113,7 @@ int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GET_ELEMENTS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GET_ELEMENTS);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/get_elements_x.c b/src/mpi/datatype/get_elements_x.c
index 128a2e5..d83bd21 100644
--- a/src/mpi/datatype/get_elements_x.c
+++ b/src/mpi/datatype/get_elements_x.c
@@ -76,7 +76,7 @@ PMPI_LOCAL MPI_Count MPIR_Type_get_basic_type_elements(MPI_Count *bytes_p,
usable_bytes = *bytes_p;
}
else {
- usable_bytes = MPIR_MIN(*bytes_p,
+ usable_bytes = MPL_MIN(*bytes_p,
count * MPID_Datatype_get_basic_size(datatype));
}
@@ -159,7 +159,7 @@ PMPI_LOCAL MPI_Count MPIR_Type_get_elements(MPI_Count *bytes_p,
MPI_Count count,
MPI_Datatype datatype)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr); /* invalid if builtin */
@@ -253,7 +253,7 @@ PMPI_LOCAL MPI_Count MPIR_Type_get_elements(MPI_Count *bytes_p,
types[i]);
nr_elements += last_nr_elements;
- MPIU_Assert(last_nr_elements >= 0);
+ MPIR_Assert(last_nr_elements >= 0);
if (last_nr_elements < ints[i+1]) break;
}
@@ -267,7 +267,7 @@ PMPI_LOCAL MPI_Count MPIR_Type_get_elements(MPI_Count *bytes_p,
case MPI_COMBINER_F90_INTEGER:
default:
/* --BEGIN ERROR HANDLING-- */
- MPIU_Assert(0);
+ MPIR_Assert(0);
return -1;
break;
/* --END ERROR HANDLING-- */
@@ -282,7 +282,7 @@ PMPI_LOCAL MPI_Count MPIR_Type_get_elements(MPI_Count *bytes_p,
int MPIR_Get_elements_x_impl(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *elements)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPI_Count byte_count;
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
@@ -323,7 +323,7 @@ int MPIR_Get_elements_x_impl(const MPI_Status *status, MPI_Datatype datatype, MP
-1,
datatype);
}
- MPIU_Assert(byte_count >= 0);
+ MPIR_Assert(byte_count >= 0);
}
else if (datatype_ptr->size == 0) {
if (MPIR_STATUS_GET_COUNT(*status) > 0) {
@@ -343,16 +343,13 @@ int MPIR_Get_elements_x_impl(const MPI_Status *status, MPI_Datatype datatype, MP
}
}
else /* derived type with weird element type or weird size */ {
- MPIU_Assert(datatype_ptr->builtin_element_size == -1);
+ MPIR_Assert(datatype_ptr->builtin_element_size == -1);
byte_count = MPIR_STATUS_GET_COUNT(*status);
*elements = MPIR_Type_get_elements(&byte_count, -1, datatype);
}
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -384,10 +381,10 @@ Output Parameters:
int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_ELEMENTS_X);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_ELEMENTS_X);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GET_ELEMENTS_X);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GET_ELEMENTS_X);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -411,9 +408,9 @@ int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Coun
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
}
@@ -432,7 +429,7 @@ int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Coun
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GET_ELEMENTS_X);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GET_ELEMENTS_X);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/pack.c b/src/mpi/datatype/pack.c
index 3232ee0..1e01a71 100644
--- a/src/mpi/datatype/pack.c
+++ b/src/mpi/datatype/pack.c
@@ -54,7 +54,7 @@ int MPIR_Pack_impl(const void *inbuf,
dt_true_lb = 0;
data_sz = incount * MPID_Datatype_get_basic_size(datatype);
} else {
- MPID_Datatype *dt_ptr;
+ MPIR_Datatype *dt_ptr;
MPID_Datatype_get_ptr(datatype, dt_ptr);
contig = dt_ptr->is_contig;
dt_true_lb = dt_ptr->true_lb;
@@ -62,7 +62,7 @@ int MPIR_Pack_impl(const void *inbuf,
}
if (contig) {
- MPIU_Memcpy((char *) outbuf + *position, (char *)inbuf + dt_true_lb, data_sz);
+ MPIR_Memcpy((char *) outbuf + *position, (char *)inbuf + dt_true_lb, data_sz);
*position = (int)((MPI_Aint)*position + data_sz);
goto fn_exit;
}
@@ -85,7 +85,7 @@ int MPIR_Pack_impl(const void *inbuf,
last = SEGMENT_IGNORE_LAST;
/* Ensure that pointer increment fits in a pointer */
- MPIU_Ensure_Aint_fits_in_pointer((MPIU_VOID_PTR_CAST_TO_MPI_AINT outbuf) +
+ MPIR_Ensure_Aint_fits_in_pointer((MPIR_VOID_PTR_CAST_TO_MPI_AINT outbuf) +
(MPI_Aint) *position);
MPID_Segment_pack(segp,
@@ -94,7 +94,7 @@ int MPIR_Pack_impl(const void *inbuf,
(void *) ((char *) outbuf + *position));
/* Ensure that calculation fits into an int datatype. */
- MPIU_Ensure_Aint_fits_in_int((MPI_Aint)*position + last);
+ MPIR_Ensure_Aint_fits_in_int((MPI_Aint)*position + last);
*position = (int)((MPI_Aint)*position + last);
@@ -155,13 +155,13 @@ int MPI_Pack(const void *inbuf,
{
int mpi_errno = MPI_SUCCESS;
MPI_Aint position_x;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PACK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PACK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_PACK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_PACK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -175,7 +175,7 @@ int MPI_Pack(const void *inbuf,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -191,16 +191,16 @@ int MPI_Pack(const void *inbuf,
MPIR_ERRTEST_ARGNULL(position, "position", mpi_errno);
/* Validate comm_ptr */
/* If comm_ptr is not valid, it will be reset to null */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -246,13 +246,13 @@ int MPI_Pack(const void *inbuf,
position_x = *position;
mpi_errno = MPIR_Pack_impl(inbuf, incount, datatype, outbuf, outsize, &position_x);
- MPIU_Assign_trunc(*position, position_x, int);
+ MPIR_Assign_trunc(*position, position_x, int);
if (mpi_errno) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_PACK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_PACK);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/datatype/pack_external.c b/src/mpi/datatype/pack_external.c
index 2972fa3..659bcdb 100644
--- a/src/mpi/datatype/pack_external.c
+++ b/src/mpi/datatype/pack_external.c
@@ -72,11 +72,11 @@ int MPI_Pack_external(const char datarep[],
MPI_Aint first, last;
MPID_Segment *segp;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PACK_EXTERNAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PACK_EXTERNAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_PACK_EXTERNAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_PACK_EXTERNAL);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -94,10 +94,10 @@ int MPI_Pack_external(const char datarep[],
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -137,7 +137,7 @@ int MPI_Pack_external(const char datarep[],
last = SEGMENT_IGNORE_LAST;
/* Ensure that pointer increment fits in a pointer */
- MPIU_Ensure_Aint_fits_in_pointer((MPIU_VOID_PTR_CAST_TO_MPI_AINT outbuf) + *position);
+ MPIR_Ensure_Aint_fits_in_pointer((MPIR_VOID_PTR_CAST_TO_MPI_AINT outbuf) + *position);
MPID_Segment_pack_external32(segp,
first,
@@ -151,7 +151,7 @@ int MPI_Pack_external(const char datarep[],
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_PACK_EXTERNAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_PACK_EXTERNAL);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/datatype/pack_external_size.c b/src/mpi/datatype/pack_external_size.c
index 7f5284d..6a23c94 100644
--- a/src/mpi/datatype/pack_external_size.c
+++ b/src/mpi/datatype/pack_external_size.c
@@ -60,11 +60,11 @@ int MPI_Pack_external_size(const char datarep[],
MPI_Aint *size)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PACK_EXTERNAL_SIZE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PACK_EXTERNAL_SIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_PACK_EXTERNAL_SIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_PACK_EXTERNAL_SIZE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -83,13 +83,13 @@ int MPI_Pack_external_size(const char datarep[],
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr(datatype, datatype_ptr);
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
/* If datatype_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -106,7 +106,7 @@ int MPI_Pack_external_size(const char datarep[],
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_PACK_EXTERNAL_SIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_PACK_EXTERNAL_SIZE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/pack_size.c b/src/mpi/datatype/pack_size.c
index 33de867..4984d98 100644
--- a/src/mpi/datatype/pack_size.c
+++ b/src/mpi/datatype/pack_size.c
@@ -77,15 +77,15 @@ int MPI_Pack_size(int incount,
int *size)
{
#ifdef HAVE_ERROR_CHECKING
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
#endif
int mpi_errno = MPI_SUCCESS;
MPI_Aint size_x = MPI_UNDEFINED;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PACK_SIZE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PACK_SIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_PACK_SIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_PACK_SIZE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -101,16 +101,16 @@ int MPI_Pack_size(int incount,
# ifdef HAVE_ERROR_CHECKING
{
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(incount, mpi_errno);
MPIR_ERRTEST_ARGNULL(size, "size", mpi_errno);
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
@@ -118,7 +118,7 @@ int MPI_Pack_size(int incount,
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
@@ -130,14 +130,14 @@ int MPI_Pack_size(int incount,
/* ... body of routine ... */
MPIR_Pack_size_impl(incount, datatype, &size_x);
- MPIU_Assign_trunc(*size, size_x, int);
+ MPIR_Assign_trunc(*size, size_x, int);
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_PACK_SIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_PACK_SIZE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/register_datarep.c b/src/mpi/datatype/register_datarep.c
index c445927..6865d72 100644
--- a/src/mpi/datatype/register_datarep.c
+++ b/src/mpi/datatype/register_datarep.c
@@ -55,13 +55,12 @@ int MPI_Register_datarep(char *datarep,
{
static const char FCNAME[] = "MPI_Register_datarep";
int mpi_errno = MPI_SUCCESS;
- MPID_THREADPRIV_DECL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_REGISTER_DATAREP);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_REGISTER_DATAREP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_REGISTER_DATAREP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_REGISTER_DATAREP);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -84,7 +83,7 @@ int MPI_Register_datarep(char *datarep,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_REGISTER_DATAREP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_REGISTER_DATAREP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/status_set_elements.c b/src/mpi/datatype/status_set_elements.c
index 0d0753c..4f86363 100644
--- a/src/mpi/datatype/status_set_elements.c
+++ b/src/mpi/datatype/status_set_elements.c
@@ -53,18 +53,18 @@ int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype,
int count)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_STATUS_SET_ELEMENTS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_STATUS_SET_ELEMENTS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_STATUS_SET_ELEMENTS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_STATUS_SET_ELEMENTS);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count,mpi_errno);
MPIR_ERRTEST_ARGNULL(status,"status",mpi_errno);
@@ -72,7 +72,7 @@ int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype,
/* Validate datatype_ptr */
MPID_Datatype_get_ptr( datatype, datatype_ptr );
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
/* If datatype_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -88,7 +88,7 @@ int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_STATUS_SET_ELEMENTS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_STATUS_SET_ELEMENTS);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/status_set_elements_x.c b/src/mpi/datatype/status_set_elements_x.c
index a0229a5..3acf576 100644
--- a/src/mpi/datatype/status_set_elements_x.c
+++ b/src/mpi/datatype/status_set_elements_x.c
@@ -39,16 +39,13 @@ int MPIR_Status_set_elements_x_impl(MPI_Status *status, MPI_Datatype datatype, M
/* overflow check, should probably be a real error check? */
if (count != 0) {
- MPIU_Assert(size_x >= 0 && count > 0);
- MPIU_Assert(count * size_x < MPIR_COUNT_MAX);
+ MPIR_Assert(size_x >= 0 && count > 0);
+ MPIR_Assert(count * size_x < MPIR_COUNT_MAX);
}
MPIR_STATUS_SET_COUNT(*status, size_x * count);
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -58,7 +55,7 @@ fn_fail:
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/*@
-MPI_Status_set_elements_x - XXX description here
+MPI_Status_set_elements_x - Set the number of elements in a status
Input/Output Parameters:
. status - status with which to associate count (Status)
@@ -76,10 +73,10 @@ Input Parameters:
int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_STATUS_SET_ELEMENTS_X);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_STATUS_SET_ELEMENTS_X);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_STATUS_SET_ELEMENTS_X);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_STATUS_SET_ELEMENTS_X);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -103,9 +100,9 @@ int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Cou
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
}
@@ -124,7 +121,7 @@ int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Cou
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_STATUS_SET_ELEMENTS_X);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_STATUS_SET_ELEMENTS_X);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_commit.c b/src/mpi/datatype/type_commit.c
index 0ad46ea..43e971a 100644
--- a/src/mpi/datatype/type_commit.c
+++ b/src/mpi/datatype/type_commit.c
@@ -74,12 +74,12 @@ Input Parameters:
int MPI_Type_commit(MPI_Datatype *datatype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_COMMIT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_COMMIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_COMMIT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_COMMIT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -98,13 +98,13 @@ int MPI_Type_commit(MPI_Datatype *datatype)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr( *datatype, datatype_ptr );
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -119,7 +119,7 @@ int MPI_Type_commit(MPI_Datatype *datatype)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_COMMIT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_COMMIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_contiguous.c b/src/mpi/datatype/type_contiguous.c
index f033cf2..f9361f7 100644
--- a/src/mpi/datatype/type_contiguous.c
+++ b/src/mpi/datatype/type_contiguous.c
@@ -34,7 +34,7 @@ int MPIR_Type_contiguous_impl(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
MPI_Datatype new_handle;
mpi_errno = MPID_Type_contiguous(count,
@@ -55,7 +55,7 @@ int MPIR_Type_contiguous_impl(int count,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
return mpi_errno;
@@ -85,7 +85,7 @@ int MPIR_Type_contiguous_x_impl(MPI_Count count,
/* truly stupendously large counts will overflow an integer with this math,
* but that is a problem for a few decades from now. Sorry, few decades
* from now! */
- MPIU_Assert(count/INT_MAX == (int)(count/INT_MAX));
+ MPIR_Assert(count/INT_MAX == (int)(count/INT_MAX));
int c = (int)(count/INT_MAX); /* OK to cast until 'count' is 256 bits */
int r = count%INT_MAX;
@@ -142,25 +142,25 @@ int MPI_Type_contiguous(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CONTIGUOUS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CONTIGUOUS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CONTIGUOUS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CONTIGUOUS);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_DATATYPE(oldtype, "datatype", mpi_errno);
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
}
@@ -176,7 +176,7 @@ int MPI_Type_contiguous(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CONTIGUOUS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CONTIGUOUS);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_darray.c b/src/mpi/datatype/type_create_darray.c
index e8c73db..30c115c 100644
--- a/src/mpi/datatype/type_create_darray.c
+++ b/src/mpi/datatype/type_create_darray.c
@@ -106,7 +106,7 @@ PMPI_LOCAL int MPIR_Type_block(const int *array_of_gsizes,
}
j = global_size - blksize*rank;
- mysize = MPIR_MIN(blksize, j);
+ mysize = MPL_MIN(blksize, j);
if (mysize < 0) mysize = 0;
stride = orig_extent;
@@ -223,7 +223,7 @@ PMPI_LOCAL int MPIR_Type_cyclic(const int *array_of_gsizes,
else {
local_size = ((end_index - st_index + 1)/(nprocs*blksize))*blksize;
rem = (end_index - st_index + 1) % (nprocs*blksize);
- local_size += MPIR_MIN(rem, blksize);
+ local_size += MPL_MIN(rem, blksize);
}
count = local_size/blksize;
@@ -386,14 +386,14 @@ int MPI_Type_create_darray(int size,
# endif
int *ints;
- MPID_Datatype *datatype_ptr = NULL;
- MPIU_CHKLMEM_DECL(3);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_DARRAY);
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_CHKLMEM_DECL(3);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_DARRAY);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_DARRAY);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_DARRAY);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -513,7 +513,7 @@ int MPI_Type_create_darray(int size,
}
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
/* If datatype_ptr is not valid, it will be reset to null */
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno) goto fn_fail;
@@ -527,7 +527,7 @@ int MPI_Type_create_darray(int size,
/* calculate position in Cartesian grid as MPI would (row-major
ordering) */
- MPIU_CHKLMEM_MALLOC_ORJUMP(coords, int *, ndims * sizeof(int), mpi_errno, "position is Cartesian grid");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(coords, int *, ndims * sizeof(int), mpi_errno, "position is Cartesian grid");
procs = size;
tmp_rank = rank;
@@ -537,7 +537,7 @@ int MPI_Type_create_darray(int size,
tmp_rank = tmp_rank % procs;
}
- MPIU_CHKLMEM_MALLOC_ORJUMP(st_offsets, MPI_Aint *, ndims * sizeof(MPI_Aint), mpi_errno, "st_offsets");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(st_offsets, MPI_Aint *, ndims * sizeof(MPI_Aint), mpi_errno, "st_offsets");
type_old = oldtype;
@@ -707,7 +707,7 @@ int MPI_Type_create_darray(int size,
*/
/* Save contents */
- MPIU_CHKLMEM_MALLOC_ORJUMP(ints, int *, (4 * ndims + 4) * sizeof(int), mpi_errno, "content description");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(ints, int *, (4 * ndims + 4) * sizeof(int), mpi_errno, "content description");
ints[0] = size;
ints[1] = rank;
@@ -739,12 +739,12 @@ int MPI_Type_create_darray(int size,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* --END ERROR HANDLING-- */
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
/* ... end of body of routine ... */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_DARRAY);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_DARRAY);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_hindexed.c b/src/mpi/datatype/type_create_hindexed.c
index c987a7a..704af44 100644
--- a/src/mpi/datatype/type_create_hindexed.c
+++ b/src/mpi/datatype/type_create_hindexed.c
@@ -64,22 +64,22 @@ int MPI_Type_create_hindexed(int count,
static const char FCNAME[] = "MPI_Type_create_hindexed";
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int i, *ints;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_HINDEXED);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_HINDEXED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_HINDEXED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_HINDEXED);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
int j;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
if (count > 0) {
@@ -91,7 +91,7 @@ int MPI_Type_create_hindexed(int count,
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
for (j=0; j < count; j++) {
@@ -113,7 +113,7 @@ int MPI_Type_create_hindexed(int count,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIU_CHKLMEM_MALLOC_ORJUMP(ints, int *, (count + 1) * sizeof(int), mpi_errno, "content description");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(ints, int *, (count + 1) * sizeof(int), mpi_errno, "content description");
ints[0] = count;
@@ -133,12 +133,12 @@ int MPI_Type_create_hindexed(int count,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
/* ... end of body of routine ... */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_HINDEXED);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_HINDEXED);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_hindexed_block.c b/src/mpi/datatype/type_create_hindexed_block.c
index 752a8ac..89bda44 100644
--- a/src/mpi/datatype/type_create_hindexed_block.c
+++ b/src/mpi/datatype/type_create_hindexed_block.c
@@ -37,7 +37,7 @@ int MPIR_Type_create_hindexed_block_impl(int count, int blocklength,
{
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int ints[2];
mpi_errno = MPID_Type_blockindexed(count, blocklength, array_of_displacements, 1,
@@ -59,7 +59,7 @@ int MPIR_Type_create_hindexed_block_impl(int count, int blocklength,
&oldtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
return mpi_errno;
@@ -102,19 +102,19 @@ int MPI_Type_create_hindexed_block(int count,
MPI_Datatype oldtype, MPI_Datatype * newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK);
/* Validate parameters and objects */
#ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_ARGNEG(blocklength, "blocklen", mpi_errno);
@@ -125,7 +125,7 @@ int MPI_Type_create_hindexed_block(int count,
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
}
if (mpi_errno)
@@ -146,7 +146,7 @@ int MPI_Type_create_hindexed_block(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_HINDEXED_BLOCK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_hvector.c b/src/mpi/datatype/type_create_hvector.c
index 23a871a..614d212 100644
--- a/src/mpi/datatype/type_create_hvector.c
+++ b/src/mpi/datatype/type_create_hvector.c
@@ -62,20 +62,20 @@ int MPI_Type_create_hvector(int count,
static const char FCNAME[] = "MPI_Type_create_hvector";
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int ints[2];
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_HVECTOR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_HVECTOR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_HVECTOR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_HVECTOR);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_ARGNEG(blocklength, "blocklen", mpi_errno);
@@ -83,7 +83,7 @@ int MPI_Type_create_hvector(int count,
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPIR_ERRTEST_ARGNULL(newtype, "newtype", mpi_errno);
@@ -116,11 +116,11 @@ int MPI_Type_create_hvector(int count,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_HVECTOR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_HVECTOR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_indexed_block.c b/src/mpi/datatype/type_create_indexed_block.c
index c297d55..e71c3ea 100644
--- a/src/mpi/datatype/type_create_indexed_block.c
+++ b/src/mpi/datatype/type_create_indexed_block.c
@@ -37,9 +37,9 @@ int MPIR_Type_create_indexed_block_impl(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int i, *ints;
mpi_errno = MPID_Type_blockindexed(count,
@@ -50,7 +50,7 @@ int MPIR_Type_create_indexed_block_impl(int count,
&new_handle);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC_ORJUMP(ints, int *, (count + 2) * sizeof(int), mpi_errno, "content description");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(ints, int *, (count + 2) * sizeof(int), mpi_errno, "content description");
ints[0] = count;
ints[1] = blocklength;
@@ -69,10 +69,10 @@ int MPIR_Type_create_indexed_block_impl(int count,
&oldtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -136,19 +136,19 @@ int MPI_Type_create_indexed_block(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK);
/* Validate parameters and objects */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_ARGNEG(blocklength, "blocklen", mpi_errno);
@@ -161,7 +161,7 @@ int MPI_Type_create_indexed_block(int count,
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
}
if (mpi_errno) goto fn_fail;
@@ -179,7 +179,7 @@ int MPI_Type_create_indexed_block(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_INDEXED_BLOCK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_resized.c b/src/mpi/datatype/type_create_resized.c
index b3b4b4f..b3ce957 100644
--- a/src/mpi/datatype/type_create_resized.c
+++ b/src/mpi/datatype/type_create_resized.c
@@ -59,27 +59,27 @@ int MPI_Type_create_resized(MPI_Datatype oldtype,
static const char FCNAME[] = "MPI_Type_create_resized";
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
MPI_Aint aints[2];
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_RESIZED);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_RESIZED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_RESIZED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_RESIZED);
/* Get handles to MPI objects. */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_DATATYPE(oldtype, "datatype", mpi_errno);
/* Validate datatype_ptr */
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
/* If datatype_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -110,11 +110,11 @@ int MPI_Type_create_resized(MPI_Datatype oldtype,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_RESIZED);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_RESIZED);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_struct.c b/src/mpi/datatype/type_create_struct.c
index a64803d..2460eb8 100644
--- a/src/mpi/datatype/type_create_struct.c
+++ b/src/mpi/datatype/type_create_struct.c
@@ -40,8 +40,8 @@ int MPIR_Type_create_struct_impl(int count,
int mpi_errno = MPI_SUCCESS;
int i, *ints;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Datatype *new_dtp;
+ MPIR_CHKLMEM_DECL(1);
mpi_errno = MPID_Type_struct(count,
array_of_blocklengths,
@@ -52,7 +52,7 @@ int MPIR_Type_create_struct_impl(int count,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC_ORJUMP(ints, int *, (count + 1) * sizeof(int), mpi_errno, "content description");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(ints, int *, (count + 1) * sizeof(int), mpi_errno, "content description");
ints[0] = count;
for (i=0; i < count; i++)
@@ -69,10 +69,10 @@ int MPIR_Type_create_struct_impl(int count,
array_of_types);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -115,19 +115,19 @@ int MPI_Type_create_struct(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_STRUCT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_STRUCT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_STRUCT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_STRUCT);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
int j;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count,mpi_errno);
@@ -143,7 +143,7 @@ int MPI_Type_create_struct(int count,
if (array_of_types[j] != MPI_DATATYPE_NULL && HANDLE_GET_KIND(array_of_types[j]) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(array_of_types[j], datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
}
@@ -161,7 +161,7 @@ int MPI_Type_create_struct(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_STRUCT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_STRUCT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_create_subarray.c b/src/mpi/datatype/type_create_subarray.c
index 2725a0d..8b5d7ba 100644
--- a/src/mpi/datatype/type_create_subarray.c
+++ b/src/mpi/datatype/type_create_subarray.c
@@ -81,21 +81,21 @@ int MPI_Type_create_subarray(int ndims,
/* for saving contents */
int *ints;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_SUBARRAY);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_CREATE_SUBARRAY);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_CREATE_SUBARRAY);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_CREATE_SUBARRAY);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Check parameters */
MPIR_ERRTEST_ARGNONPOS(ndims, "ndims", mpi_errno, MPI_ERR_DIMS);
@@ -147,7 +147,7 @@ int MPI_Type_create_subarray(int ndims,
goto fn_fail;
}
- MPIR_Type_extent_impl(oldtype, &extent);
+ MPID_Datatype_get_extent_macro(oldtype, extent);
/* check if MPI_Aint is large enough for size of global array.
if not, complain. */
@@ -172,7 +172,7 @@ int MPI_Type_create_subarray(int ndims,
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
/* If datatype_ptr is not valid, it will be reset to null */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -185,7 +185,7 @@ int MPI_Type_create_subarray(int ndims,
/* TODO: CHECK THE ERROR RETURNS FROM ALL THESE!!! */
/* TODO: GRAB EXTENT WITH A MACRO OR SOMETHING FASTER */
- MPIR_Type_extent_impl(oldtype, &extent);
+ MPID_Datatype_get_extent_macro(oldtype, extent);
if (order == MPI_ORDER_FORTRAN) {
if (ndims == 1)
@@ -301,7 +301,7 @@ int MPI_Type_create_subarray(int ndims,
*/
/* Save contents */
- MPIU_CHKLMEM_MALLOC_ORJUMP(ints, int *, (3 * ndims + 2) * sizeof(int), mpi_errno, "content description");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(ints, int *, (3 * ndims + 2) * sizeof(int), mpi_errno, "content description");
ints[0] = ndims;
for (i=0; i < ndims; i++) {
@@ -327,12 +327,12 @@ int MPI_Type_create_subarray(int ndims,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
/* ... end of body of routine ... */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_CREATE_SUBARRAY);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_CREATE_SUBARRAY);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_dup.c b/src/mpi/datatype/type_dup.c
index 817ea31..b3f6151 100644
--- a/src/mpi/datatype/type_dup.c
+++ b/src/mpi/datatype/type_dup.c
@@ -52,14 +52,14 @@ int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype)
static const char FCNAME[] = "MPI_Type_dup";
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *datatype_ptr = NULL;
- MPID_Datatype *new_dtp;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_DUP);
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *new_dtp;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_DUP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_DUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_DUP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(newtype, "newtype", mpi_errno);
}
@@ -129,11 +129,11 @@ int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype)
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_DUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_DUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_extent.c b/src/mpi/datatype/type_extent.c
index 7f8db44..25dac42 100644
--- a/src/mpi/datatype/type_extent.c
+++ b/src/mpi/datatype/type_extent.c
@@ -54,11 +54,11 @@ The replacement for this routine is 'MPI_Type_get_extent'.
int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_EXTENT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_EXTENT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_EXTENT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_EXTENT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -76,13 +76,13 @@ int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr(datatype, datatype_ptr);
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -91,14 +91,14 @@ int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent)
/* ... body of routine ... */
- MPIR_Type_extent_impl(datatype, extent);
+ MPID_Datatype_get_extent_macro(datatype, *extent);
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_EXTENT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_EXTENT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/type_free.c b/src/mpi/datatype/type_free.c
index dc68238..9cf2e9f 100644
--- a/src/mpi/datatype/type_free.c
+++ b/src/mpi/datatype/type_free.c
@@ -31,7 +31,7 @@ int MPI_Type_free(MPI_Datatype *datatype) __attribute__((weak,alias("PMPI_Type_f
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIR_Type_free_impl(MPI_Datatype *datatype)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr( *datatype, datatype_ptr );
MPID_Datatype_release(datatype_ptr);
@@ -73,12 +73,12 @@ it clear that it is an error to free a null datatype.
int MPI_Type_free(MPI_Datatype *datatype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -97,7 +97,7 @@ int MPI_Type_free(MPI_Datatype *datatype)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Check for built-in type */
if (HANDLE_GET_KIND(*datatype) == HANDLE_KIND_BUILTIN) {
@@ -129,7 +129,7 @@ int MPI_Type_free(MPI_Datatype *datatype)
MPID_Datatype_get_ptr( *datatype, datatype_ptr );
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -145,7 +145,7 @@ int MPI_Type_free(MPI_Datatype *datatype)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_get_contents.c b/src/mpi/datatype/type_get_contents.c
index e3a37e7..303f3d3 100644
--- a/src/mpi/datatype/type_get_contents.c
+++ b/src/mpi/datatype/type_get_contents.c
@@ -63,12 +63,12 @@ int MPI_Type_get_contents(MPI_Datatype datatype,
{
static const char FCNAME[] = "MPI_Type_get_contents";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_CONTENTS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_CONTENTS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_CONTENTS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_CONTENTS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -86,7 +86,7 @@ int MPI_Type_get_contents(MPI_Datatype datatype,
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Check for built-in type */
if (HANDLE_GET_KIND(datatype) == HANDLE_KIND_BUILTIN) {
@@ -119,7 +119,7 @@ int MPI_Type_get_contents(MPI_Datatype datatype,
MPID_Datatype_get_ptr(datatype, datatype_ptr);
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
/* If comm_ptr is not value, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -141,7 +141,7 @@ int MPI_Type_get_contents(MPI_Datatype datatype,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_CONTENTS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_CONTENTS);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_get_envelope.c b/src/mpi/datatype/type_get_envelope.c
index aa033ef..95ae900 100644
--- a/src/mpi/datatype/type_get_envelope.c
+++ b/src/mpi/datatype/type_get_envelope.c
@@ -49,7 +49,7 @@ void MPIR_Type_get_envelope_impl(MPI_Datatype datatype,
*num_datatypes = 0;
}
else {
- MPID_Datatype *dtp;
+ MPIR_Datatype *dtp;
MPID_Datatype_get_ptr(datatype, dtp);
@@ -93,11 +93,11 @@ int MPI_Type_get_envelope(MPI_Datatype datatype,
int *combiner)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_ENVELOPE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_ENVELOPE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_ENVELOPE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_ENVELOPE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -115,13 +115,13 @@ int MPI_Type_get_envelope(MPI_Datatype datatype,
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr( datatype, datatype_ptr );
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
/* If comm_ptr is not value, it will be reset to null */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -142,7 +142,7 @@ int MPI_Type_get_envelope(MPI_Datatype datatype,
# ifdef HAVE_ERROR_CHECKING
fn_exit:
# endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_ENVELOPE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_ENVELOPE);
return mpi_errno;
# ifdef HAVE_ERROR_CHECKING
diff --git a/src/mpi/datatype/type_get_extent.c b/src/mpi/datatype/type_get_extent.c
index f2a7149..9c3628a 100644
--- a/src/mpi/datatype/type_get_extent.c
+++ b/src/mpi/datatype/type_get_extent.c
@@ -66,11 +66,11 @@ Output Parameters:
int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_EXTENT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_EXTENT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_EXTENT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_EXTENT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -88,13 +88,13 @@ int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr(datatype, datatype_ptr);
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -110,7 +110,7 @@ int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_EXTENT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_EXTENT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/type_get_extent_x.c b/src/mpi/datatype/type_get_extent_x.c
index 0221f06..881aa81 100644
--- a/src/mpi/datatype/type_get_extent_x.c
+++ b/src/mpi/datatype/type_get_extent_x.c
@@ -32,7 +32,7 @@ int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *exten
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIR_Type_get_extent_x_impl(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
@@ -53,7 +53,8 @@ void MPIR_Type_get_extent_x_impl(MPI_Datatype datatype, MPI_Count *lb, MPI_Count
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/*@
-MPI_Type_get_extent_x - XXX description here
+MPI_Type_get_extent_x - Get the lower bound and extent as MPI_Count values
+ for a Datatype
Input Parameters:
. datatype - datatype (handle)
@@ -71,10 +72,10 @@ Output Parameters:
int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_EXTENT_X);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_EXTENT_X);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_EXTENT_X);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_EXTENT_X);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -98,9 +99,9 @@ int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *exten
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
}
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -117,7 +118,7 @@ int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *exten
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_EXTENT_X);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_EXTENT_X);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_get_name.c b/src/mpi/datatype/type_get_name.c
index 2d78d3a..3d7ed40 100644
--- a/src/mpi/datatype/type_get_name.c
+++ b/src/mpi/datatype/type_get_name.c
@@ -143,7 +143,7 @@ int MPIR_Datatype_init_names(void)
#endif
int mpi_errno = MPI_SUCCESS;
int i;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
static volatile int needsInit = 1;
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
@@ -167,8 +167,8 @@ int MPIR_Datatype_init_names(void)
MPID_Datatype_get_ptr(mpi_names[i].dtype, datatype_ptr);
- if (datatype_ptr < MPID_Datatype_builtin ||
- datatype_ptr > MPID_Datatype_builtin + MPID_DATATYPE_N_BUILTIN)
+ if (datatype_ptr < MPIR_Datatype_builtin ||
+ datatype_ptr > MPIR_Datatype_builtin + MPIR_DATATYPE_N_BUILTIN)
{
MPIR_ERR_SETFATALANDJUMP1(mpi_errno,MPI_ERR_INTERN,
"**typeinitbadmem","**typeinitbadmem %d", i);
@@ -178,10 +178,10 @@ int MPIR_Datatype_init_names(void)
"**typeinitfail", "**typeinitfail %d", i - 1);
}
- MPIU_DBG_MSG_FMT(DATATYPE,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,
"mpi_names[%d].name = %p", i, mpi_names[i].name));
- MPIU_Strncpy(datatype_ptr->name, mpi_names[i].name,
+ MPL_strncpy(datatype_ptr->name, mpi_names[i].name,
MPI_MAX_OBJECT_NAME);
}
/* Handle the minloc/maxloc types */
@@ -196,7 +196,7 @@ int MPIR_Datatype_init_names(void)
if (!datatype_ptr) {
MPIR_ERR_SETFATALANDJUMP(mpi_errno,MPI_ERR_INTERN, "**typeinitminmaxloc");
}
- MPIU_Strncpy(datatype_ptr->name, mpi_maxloc_names[i].name,
+ MPL_strncpy(datatype_ptr->name, mpi_maxloc_names[i].name,
MPI_MAX_OBJECT_NAME);
}
needsInit = 0;
@@ -238,13 +238,13 @@ int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen)
{
static const char FCNAME[] = "MPI_Type_get_name";
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
static int setup = 0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_NAME);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -270,7 +270,7 @@ int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
/* If datatype_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(type_name,"type_name", mpi_errno);
@@ -290,13 +290,13 @@ int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen)
}
/* Include the null in MPI_MAX_OBJECT_NAME */
- MPIU_Strncpy(type_name, datatype_ptr->name, MPI_MAX_OBJECT_NAME);
+ MPL_strncpy(type_name, datatype_ptr->name, MPI_MAX_OBJECT_NAME);
*resultlen = (int) strlen(type_name);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_NAME);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/datatype/type_get_true_extent.c b/src/mpi/datatype/type_get_true_extent.c
index e5e064b..8b86d4e 100644
--- a/src/mpi/datatype/type_get_true_extent.c
+++ b/src/mpi/datatype/type_get_true_extent.c
@@ -68,11 +68,11 @@ int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb,
MPI_Aint *true_extent)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -90,13 +90,13 @@ int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb,
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr(datatype, datatype_ptr);
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -112,7 +112,7 @@ int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb,
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/type_get_true_extent_x.c b/src/mpi/datatype/type_get_true_extent_x.c
index b16ab01..17e1f87 100644
--- a/src/mpi/datatype/type_get_true_extent_x.c
+++ b/src/mpi/datatype/type_get_true_extent_x.c
@@ -32,7 +32,7 @@ int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIR_Type_get_true_extent_x_impl(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Count *true_extent)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
@@ -53,7 +53,8 @@ void MPIR_Type_get_true_extent_x_impl(MPI_Datatype datatype, MPI_Count *true_lb,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/*@
-MPI_Type_get_true_extent_x - XXX description here
+MPI_Type_get_true_extent_x - Get the true lower bound and extent as MPI_Count
+ values for a datatype
Input Parameters:
. datatype - datatype (handle)
@@ -71,10 +72,10 @@ Output Parameters:
int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Count *true_extent)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -98,9 +99,9 @@ int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Co
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
}
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -117,7 +118,7 @@ int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Co
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_GET_TRUE_EXTENT_X);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_hindexed.c b/src/mpi/datatype/type_hindexed.c
index 7ed7a2f..009d5d0 100644
--- a/src/mpi/datatype/type_hindexed.c
+++ b/src/mpi/datatype/type_hindexed.c
@@ -15,8 +15,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_hindexed as PMPI_Type_hindexed
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPI_Type_hindexed(int count, const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
+int MPI_Type_hindexed(int count, int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_hindexed")));
#endif
/* -- End Profiling Symbol Block */
@@ -81,30 +81,30 @@ consider declaring the Fortran array with a zero origin
.N MPI_ERR_ARG
@*/
int MPI_Type_hindexed(int count,
- const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
+ int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
MPI_Datatype oldtype,
MPI_Datatype *newtype)
{
static const char FCNAME[] = "MPI_Type_hindexed";
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int i, *ints;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_HINDEXED);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_HINDEXED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_HINDEXED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_HINDEXED);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
int j;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_DATATYPE(oldtype, "datatype", mpi_errno);
@@ -115,7 +115,7 @@ int MPI_Type_hindexed(int count,
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr( oldtype, datatype_ptr );
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
/* verify that all blocklengths are >= 0 */
@@ -139,7 +139,7 @@ int MPI_Type_hindexed(int count,
&new_handle);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIU_CHKLMEM_MALLOC(ints, int *, (count + 1) * sizeof(int), mpi_errno, "contents integer array");
+ MPIR_CHKLMEM_MALLOC(ints, int *, (count + 1) * sizeof(int), mpi_errno, "contents integer array");
/* copy ints into temporary buffer (count and blocklengths) */
ints[0] = count;
@@ -159,12 +159,12 @@ int MPI_Type_hindexed(int count,
&oldtype);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
/* ... end of body of routine ... */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_HINDEXED);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_HINDEXED);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_hvector.c b/src/mpi/datatype/type_hvector.c
index a7ef432..12a23c6 100644
--- a/src/mpi/datatype/type_hvector.c
+++ b/src/mpi/datatype/type_hvector.c
@@ -34,7 +34,7 @@ int MPIR_Type_hvector_impl(int count, int blocklength, MPI_Aint stride, MPI_Data
{
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int ints[2];
mpi_errno = MPID_Type_vector(count,
@@ -58,7 +58,7 @@ int MPIR_Type_hvector_impl(int count, int blocklength, MPI_Aint stride, MPI_Data
&oldtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
return mpi_errno;
@@ -100,18 +100,18 @@ int MPI_Type_hvector(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_HVECTOR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_HVECTOR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_HVECTOR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_HVECTOR);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_ARGNEG(blocklength,"blocklength",mpi_errno);
@@ -119,7 +119,7 @@ int MPI_Type_hvector(int count,
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(oldtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
@@ -137,7 +137,7 @@ int MPI_Type_hvector(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_HVECTOR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_HVECTOR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_indexed.c b/src/mpi/datatype/type_indexed.c
index b4eda63..8284c4e 100644
--- a/src/mpi/datatype/type_indexed.c
+++ b/src/mpi/datatype/type_indexed.c
@@ -37,9 +37,9 @@ int MPIR_Type_indexed_impl(int count, const int *array_of_blocklengths,
{
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int i, *ints;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
mpi_errno = MPID_Type_indexed(count,
array_of_blocklengths,
@@ -52,7 +52,7 @@ int MPIR_Type_indexed_impl(int count, const int *array_of_blocklengths,
/* copy all integer values into a temporary buffer; this
* includes the count, the blocklengths, and the displacements.
*/
- MPIU_CHKLMEM_MALLOC(ints, int *, (2 * count + 1) * sizeof(int), mpi_errno, "contents integer array");
+ MPIR_CHKLMEM_MALLOC(ints, int *, (2 * count + 1) * sizeof(int), mpi_errno, "contents integer array");
ints[0] = count;
@@ -73,10 +73,10 @@ int MPIR_Type_indexed_impl(int count, const int *array_of_blocklengths,
&oldtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -141,12 +141,12 @@ int MPI_Type_indexed(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_INDEXED);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_INDEXED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_INDEXED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_INDEXED);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -154,7 +154,7 @@ int MPI_Type_indexed(int count,
MPID_BEGIN_ERROR_CHECKS;
{
int j;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPIR_ERRTEST_COUNT(count,mpi_errno);
if (count > 0) {
@@ -165,7 +165,7 @@ int MPI_Type_indexed(int count,
if (HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr( oldtype, datatype_ptr );
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
}
/* verify that all blocklengths are >= 0 */
for (j=0; j < count; j++) {
@@ -186,7 +186,7 @@ int MPI_Type_indexed(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_INDEXED);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_INDEXED);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_lb.c b/src/mpi/datatype/type_lb.c
index 2f0778f..22f9d12 100644
--- a/src/mpi/datatype/type_lb.c
+++ b/src/mpi/datatype/type_lb.c
@@ -34,7 +34,7 @@ void MPIR_Type_lb_impl(MPI_Datatype datatype, MPI_Aint *displacement)
if (HANDLE_GET_KIND(datatype) == HANDLE_KIND_BUILTIN) {
*displacement = 0;
} else {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
*displacement = datatype_ptr->lb;
}
@@ -71,11 +71,11 @@ The replacement for this routine is 'MPI_Type_Get_extent'.
int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_LB);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_LB);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_LB);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_LB);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -93,13 +93,13 @@ int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr(datatype, datatype_ptr);
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -115,7 +115,7 @@ int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_LB);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_LB);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/type_match_size.c b/src/mpi/datatype/type_match_size.c
index b8bbbe8..578e278 100644
--- a/src/mpi/datatype/type_match_size.c
+++ b/src/mpi/datatype/type_match_size.c
@@ -83,13 +83,13 @@ int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype)
MPI_Datatype matched_datatype = MPI_DATATYPE_NULL;
int i;
MPI_Aint tsize;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_MATCH_SIZE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_MATCH_SIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* FIXME: This routine does not require the global critical section */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_MATCH_SIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_MATCH_SIZE);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -122,7 +122,7 @@ int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype)
#endif
for (i=0; i<nRealTypes; i++) {
if (real_types[i] == MPI_DATATYPE_NULL) { continue; }
- MPIR_Type_size_impl( real_types[i], &tsize );
+ MPID_Datatype_get_size_macro( real_types[i], tsize );
if (tsize == size) {
matched_datatype = real_types[i];
break;
@@ -138,7 +138,7 @@ int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype)
#endif
for (i=0; i<nIntTypes; i++) {
if (int_types[i] == MPI_DATATYPE_NULL) { continue; }
- MPIR_Type_size_impl( int_types[i], &tsize );
+ MPID_Datatype_get_size_macro( int_types[i], tsize );
if (tsize == size) {
matched_datatype = int_types[i];
break;
@@ -154,7 +154,7 @@ int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype)
#endif
for (i=0; i<nComplexTypes; i++) {
if (complex_types[i] == MPI_DATATYPE_NULL) { continue; }
- MPIR_Type_size_impl( complex_types[i], &tsize );
+ MPID_Datatype_get_size_macro( complex_types[i], tsize );
if (tsize == size) {
matched_datatype = complex_types[i];
break;
@@ -183,7 +183,7 @@ int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_MATCH_SIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_MATCH_SIZE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_set_name.c b/src/mpi/datatype/type_set_name.c
index d590331..e89b4a3 100644
--- a/src/mpi/datatype/type_set_name.c
+++ b/src/mpi/datatype/type_set_name.c
@@ -51,13 +51,13 @@ Input Parameters:
int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
static int setup = 0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_SET_NAME);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_SET_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_SET_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_SET_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name)
int slen;
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
/* If datatype_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(type_name,"type_name", mpi_errno);
@@ -104,14 +104,14 @@ int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name)
}
/* Include the null in MPI_MAX_OBJECT_NAME */
- MPIU_Strncpy( datatype_ptr->name, type_name, MPI_MAX_OBJECT_NAME );
+ MPL_strncpy( datatype_ptr->name, type_name, MPI_MAX_OBJECT_NAME );
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_SET_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_SET_NAME);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/type_size.c b/src/mpi/datatype/type_size.c
index cc9a3f4..6d05d3d 100644
--- a/src/mpi/datatype/type_size.c
+++ b/src/mpi/datatype/type_size.c
@@ -55,11 +55,11 @@ int MPI_Type_size(MPI_Datatype datatype, int *size)
{
int mpi_errno = MPI_SUCCESS;
MPI_Count size_x = MPI_UNDEFINED;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_SIZE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_SIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_SIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_SIZE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -84,13 +84,13 @@ int MPI_Type_size(MPI_Datatype datatype, int *size)
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
/* Convert MPI object handles to object pointers */
MPID_Datatype_get_ptr( datatype, datatype_ptr );
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr( datatype_ptr, mpi_errno );
+ MPIR_Datatype_valid_ptr( datatype_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -102,14 +102,14 @@ int MPI_Type_size(MPI_Datatype datatype, int *size)
mpi_errno = MPIR_Type_size_x_impl(datatype, &size_x);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(size_x >= 0);
+ MPIR_Assert(size_x >= 0);
/* handle overflow: see MPI-3 p.104 */
*size = (size_x > INT_MAX) ? MPI_UNDEFINED : (int)size_x;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_SIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_SIZE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/type_size_x.c b/src/mpi/datatype/type_size_x.c
index 1a5a555..25ab1b5 100644
--- a/src/mpi/datatype/type_size_x.c
+++ b/src/mpi/datatype/type_size_x.c
@@ -36,10 +36,7 @@ int MPIR_Type_size_x_impl(MPI_Datatype datatype, MPI_Count *size)
MPID_Datatype_get_size_macro(datatype, *size);
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -67,10 +64,10 @@ Output Parameters:
int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_SIZE_X);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_SIZE_X);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_SIZE_X);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_SIZE_X);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -94,9 +91,9 @@ int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size)
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
}
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -114,7 +111,7 @@ int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_SIZE_X);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_SIZE_X);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_struct.c b/src/mpi/datatype/type_struct.c
index fde6b8a..903415e 100644
--- a/src/mpi/datatype/type_struct.c
+++ b/src/mpi/datatype/type_struct.c
@@ -15,9 +15,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_struct as PMPI_Type_struct
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPI_Type_struct(int count, const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
- const MPI_Datatype *array_of_types, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_struct")));
+int MPI_Type_struct(int count, int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
+ MPI_Datatype *array_of_types, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_struct")));
#endif
/* -- End Profiling Symbol Block */
@@ -37,8 +37,8 @@ int MPIR_Type_struct_impl(int count, const int *array_of_blocklengths,
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
int i, *ints;
- MPID_Datatype *new_dtp;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_Datatype *new_dtp;
+ MPIR_CHKLMEM_DECL(1);
mpi_errno = MPID_Type_struct(count,
array_of_blocklengths,
@@ -48,7 +48,7 @@ int MPIR_Type_struct_impl(int count, const int *array_of_blocklengths,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC(ints, int *, (count + 1) * sizeof(int), mpi_errno, "contents integer array");
+ MPIR_CHKLMEM_MALLOC(ints, int *, (count + 1) * sizeof(int), mpi_errno, "contents integer array");
ints[0] = count;
for (i=0; i < count; i++) {
@@ -67,10 +67,10 @@ int MPIR_Type_struct_impl(int count, const int *array_of_blocklengths,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -149,18 +149,18 @@ for the structure foo
.N MPI_ERR_EXHAUSTED
@*/
int MPI_Type_struct(int count,
- const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
- const MPI_Datatype *array_of_types,
+ int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
+ MPI_Datatype *array_of_types,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_STRUCT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_STRUCT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_STRUCT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_STRUCT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -168,7 +168,7 @@ int MPI_Type_struct(int count,
MPID_BEGIN_ERROR_CHECKS;
{
int i;
- MPID_Datatype *datatype_ptr;
+ MPIR_Datatype *datatype_ptr;
MPIR_ERRTEST_COUNT(count,mpi_errno);
if (count > 0) {
@@ -184,7 +184,7 @@ int MPI_Type_struct(int count,
if (array_of_types[i] != MPI_DATATYPE_NULL &&
HANDLE_GET_KIND(array_of_types[i]) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(array_of_types[i], datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
}
}
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -201,7 +201,7 @@ int MPI_Type_struct(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_STRUCT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_STRUCT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/type_ub.c b/src/mpi/datatype/type_ub.c
index afc6a45..62ea0ea 100644
--- a/src/mpi/datatype/type_ub.c
+++ b/src/mpi/datatype/type_ub.c
@@ -57,12 +57,12 @@ The replacement for this routine is 'MPI_Type_get_extent'
int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *datatype_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_UB);
+ MPIR_Datatype *datatype_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_UB);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_UB);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_UB);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -84,7 +84,7 @@ int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate datatype_ptr */
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -103,7 +103,7 @@ int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_UB);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_UB);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/datatype/type_vector.c b/src/mpi/datatype/type_vector.c
index 3402fce..f972b82 100644
--- a/src/mpi/datatype/type_vector.c
+++ b/src/mpi/datatype/type_vector.c
@@ -34,7 +34,7 @@ int MPIR_Type_vector_impl(int count, int blocklength, int stride, MPI_Datatype o
{
int mpi_errno = MPI_SUCCESS;
MPI_Datatype new_handle;
- MPID_Datatype *new_dtp;
+ MPIR_Datatype *new_dtp;
int ints[3];
mpi_errno = MPID_Type_vector(count,
@@ -60,7 +60,7 @@ int MPIR_Type_vector_impl(int count, int blocklength, int stride, MPI_Datatype o
&oldtype);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newtype, new_handle);
fn_exit:
return mpi_errno;
@@ -103,19 +103,19 @@ int MPI_Type_vector(int count,
MPI_Datatype *newtype)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TYPE_VECTOR);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TYPE_VECTOR);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TYPE_VECTOR);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TYPE_VECTOR);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Datatype *old_ptr = NULL;
+ MPIR_Datatype *old_ptr = NULL;
MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_ARGNEG(blocklength, "blocklen", mpi_errno);
@@ -123,7 +123,7 @@ int MPI_Type_vector(int count,
if (oldtype != MPI_DATATYPE_NULL && HANDLE_GET_KIND(oldtype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype_get_ptr(oldtype, old_ptr);
- MPID_Datatype_valid_ptr(old_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(old_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
}
@@ -139,7 +139,7 @@ int MPI_Type_vector(int count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_VECTOR);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_VECTOR);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/datatype/typeutil.c b/src/mpi/datatype/typeutil.c
index b3c58b4..954a57f 100644
--- a/src/mpi/datatype/typeutil.c
+++ b/src/mpi/datatype/typeutil.c
@@ -11,21 +11,21 @@
/* This is the utility file for datatypes that contains the basic datatype
items and storage management. It also contains a temporary routine
that is used by ROMIO to test to see if datatypes are contiguous */
-#ifndef MPID_DATATYPE_PREALLOC
-#define MPID_DATATYPE_PREALLOC 8
+#ifndef MPIR_DATATYPE_PREALLOC
+#define MPIR_DATATYPE_PREALLOC 8
#endif
/* Preallocated datatype objects */
-MPID_Datatype MPID_Datatype_builtin[MPID_DATATYPE_N_BUILTIN + 1] = { {0} };
-MPID_Datatype MPID_Datatype_direct[MPID_DATATYPE_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_Datatype_mem = { 0, 0, 0, 0, MPID_DATATYPE,
- sizeof(MPID_Datatype), MPID_Datatype_direct,
- MPID_DATATYPE_PREALLOC};
+MPIR_Datatype MPIR_Datatype_builtin[MPIR_DATATYPE_N_BUILTIN + 1] = { {0} };
+MPIR_Datatype MPIR_Datatype_direct[MPIR_DATATYPE_PREALLOC] = { {0} };
+MPIR_Object_alloc_t MPIR_Datatype_mem = { 0, 0, 0, 0, MPIR_DATATYPE,
+ sizeof(MPIR_Datatype), MPIR_Datatype_direct,
+ MPIR_DATATYPE_PREALLOC};
static int MPIR_Datatype_finalize(void *dummy );
-static int MPIR_DatatypeAttrFinalizeCallback(void *dummy );
+static int datatype_attr_finalize_cb(void *dummy );
-/* Call this routine to associate a MPID_Datatype with each predefined
+/* Call this routine to associate a MPIR_Datatype with each predefined
datatype. We do this with lazy initialization because many MPI
programs do not require anything except the predefined datatypes, and
all of the necessary information about those is stored within the
@@ -147,10 +147,10 @@ int MPIR_Datatype_init(void)
{
int i;
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *ptr;
+ MPIR_Datatype *ptr;
- MPIU_Assert(MPID_Datatype_mem.initialized == 0);
- MPIU_Assert(MPID_DATATYPE_PREALLOC >= 5);
+ MPIR_Assert(MPIR_Datatype_mem.initialized == 0);
+ MPIR_Assert(MPIR_DATATYPE_PREALLOC >= 5);
for (i=0; mpi_pairtypes[i] != (MPI_Datatype) -1; ++i) {
/* types based on 'long long' and 'long double', may be disabled at
@@ -168,14 +168,14 @@ int MPIR_Datatype_init(void)
/* we use the _unsafe version because we are still in MPI_Init, before
* multiple threads are permitted and possibly before support for
* critical sections is entirely setup */
- ptr = (MPID_Datatype *)MPIU_Handle_obj_alloc_unsafe( &MPID_Datatype_mem );
+ ptr = (MPIR_Datatype *)MPIR_Handle_obj_alloc_unsafe( &MPIR_Datatype_mem );
- MPIU_Assert(ptr);
- MPIU_Assert(ptr->handle == mpi_pairtypes[i]);
+ MPIR_Assert(ptr);
+ MPIR_Assert(ptr->handle == mpi_pairtypes[i]);
/* this is a redundant alternative to the previous statement */
- MPIU_Assert((void *) ptr == (void *) (MPID_Datatype_direct + HANDLE_INDEX(mpi_pairtypes[i])));
+ MPIR_Assert((void *) ptr == (void *) (MPIR_Datatype_direct + HANDLE_INDEX(mpi_pairtypes[i])));
- mpi_errno = MPID_Type_create_pairtype(mpi_pairtypes[i], (MPID_Datatype *) ptr);
+ mpi_errno = MPID_Type_create_pairtype(mpi_pairtypes[i], (MPIR_Datatype *) ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -193,7 +193,7 @@ fn_fail:
static int MPIR_Datatype_finalize(void *dummy ATTRIBUTE((unused)) )
{
int i;
- MPID_Datatype *dptr;
+ MPIR_Datatype *dptr;
for (i=0; mpi_pairtypes[i] != (MPI_Datatype) -1; i++) {
if (mpi_pairtypes[i] != MPI_DATATYPE_NULL) {
@@ -217,7 +217,7 @@ int MPIR_Datatype_builtin_fillin(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPID_Datatype *dptr;
+ MPIR_Datatype *dptr;
MPI_Datatype d = MPI_DATATYPE_NULL;
static int is_init = 0;
@@ -229,7 +229,7 @@ int MPIR_Datatype_builtin_fillin(void)
}
if (!is_init) {
- for (i=0; i<MPID_DATATYPE_N_BUILTIN; i++) {
+ for (i=0; i<MPIR_DATATYPE_N_BUILTIN; i++) {
/* Compute the index from the value of the handle */
d = mpi_dtypes[i];
if (d == -1) {
@@ -243,8 +243,8 @@ int MPIR_Datatype_builtin_fillin(void)
MPID_Datatype_get_ptr(d,dptr);
/* --BEGIN ERROR HANDLING-- */
- if (dptr < MPID_Datatype_builtin ||
- dptr > MPID_Datatype_builtin + MPID_DATATYPE_N_BUILTIN)
+ if (dptr < MPIR_Datatype_builtin ||
+ dptr > MPIR_Datatype_builtin + MPIR_DATATYPE_N_BUILTIN)
{
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
MPIR_ERR_FATAL, FCNAME,
@@ -255,11 +255,11 @@ int MPIR_Datatype_builtin_fillin(void)
}
/* --END ERROR HANDLING-- */
- /* dptr will point into MPID_Datatype_builtin */
+ /* dptr will point into MPIR_Datatype_builtin */
dptr->handle = d;
dptr->is_permanent = 1;
dptr->is_contig = 1;
- MPIU_Object_set_ref( dptr, 1 );
+ MPIR_Object_set_ref( dptr, 1 );
MPID_Datatype_get_size_macro(mpi_dtypes[i], dptr->size);
dptr->extent = dptr->size;
dptr->ub = dptr->size;
@@ -284,7 +284,7 @@ int MPIR_Datatype_builtin_fillin(void)
/* This will eventually be removed once ROMIO knows more about MPICH */
void MPIR_Datatype_iscontig(MPI_Datatype datatype, int *flag)
{
- MPID_Datatype *datatype_ptr;
+ MPIR_Datatype *datatype_ptr;
if (HANDLE_GET_KIND(datatype) == HANDLE_KIND_BUILTIN)
*flag = 1;
else {
@@ -295,13 +295,13 @@ void MPIR_Datatype_iscontig(MPI_Datatype datatype, int *flag)
/* If an attribute is added to a predefined type, we free the attributes
in Finalize */
-static int MPIR_DatatypeAttrFinalizeCallback(void *dummy ATTRIBUTE((unused)) )
+static int datatype_attr_finalize_cb(void *dummy ATTRIBUTE((unused)) )
{
- MPID_Datatype *dtype;
+ MPIR_Datatype *dtype;
int i, mpi_errno=MPI_SUCCESS;
- for (i=0; i<MPID_DATATYPE_N_BUILTIN; i++) {
- dtype = &MPID_Datatype_builtin[i];
+ for (i=0; i<MPIR_DATATYPE_N_BUILTIN; i++) {
+ dtype = &MPIR_Datatype_builtin[i];
if (dtype && MPIR_Process.attr_free && dtype->attributes) {
mpi_errno = MPIR_Process.attr_free( dtype->handle,
&dtype->attributes );
@@ -311,14 +311,14 @@ static int MPIR_DatatypeAttrFinalizeCallback(void *dummy ATTRIBUTE((unused)) )
return mpi_errno;
}
-void MPIR_DatatypeAttrFinalize( void )
+void MPII_Datatype_attr_finalize( void )
{
static int called=0;
/* FIXME: This needs to be make thread safe */
if (!called) {
called = 1;
- MPIR_Add_finalize(MPIR_DatatypeAttrFinalizeCallback, 0,
+ MPIR_Add_finalize(datatype_attr_finalize_cb, 0,
MPIR_FINALIZE_CALLBACK_PRIO-1);
}
}
diff --git a/src/mpi/datatype/unpack.c b/src/mpi/datatype/unpack.c
index a4e56fd..124cdab 100644
--- a/src/mpi/datatype/unpack.c
+++ b/src/mpi/datatype/unpack.c
@@ -49,7 +49,7 @@ int MPIR_Unpack_impl(const void *inbuf, MPI_Aint insize, MPI_Aint *position,
dt_true_lb = 0;
data_sz = outcount * MPID_Datatype_get_basic_size(datatype);
} else {
- MPID_Datatype *dt_ptr;
+ MPIR_Datatype *dt_ptr;
MPID_Datatype_get_ptr(datatype, dt_ptr);
contig = dt_ptr->is_contig;
dt_true_lb = dt_ptr->true_lb;
@@ -57,7 +57,7 @@ int MPIR_Unpack_impl(const void *inbuf, MPI_Aint insize, MPI_Aint *position,
}
if (contig) {
- MPIU_Memcpy((char *) outbuf + dt_true_lb, (char *)inbuf + *position, data_sz);
+ MPIR_Memcpy((char *) outbuf + dt_true_lb, (char *)inbuf + *position, data_sz);
*position = (int)((MPI_Aint)*position + data_sz);
goto fn_exit;
}
@@ -67,7 +67,7 @@ int MPIR_Unpack_impl(const void *inbuf, MPI_Aint insize, MPI_Aint *position,
segp = MPID_Segment_alloc();
MPIR_ERR_CHKANDJUMP1(segp == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
mpi_errno = MPID_Segment_init(outbuf, outcount, datatype, segp, 0);
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
/* NOTE: the use of buffer values and positions in MPI_Unpack and in
* MPID_Segment_unpack are quite different. See code or docs or something.
@@ -76,7 +76,7 @@ int MPIR_Unpack_impl(const void *inbuf, MPI_Aint insize, MPI_Aint *position,
last = SEGMENT_IGNORE_LAST;
/* Ensure that pointer increment fits in a pointer */
- MPIU_Ensure_Aint_fits_in_pointer((MPIU_VOID_PTR_CAST_TO_MPI_AINT inbuf) +
+ MPIR_Ensure_Aint_fits_in_pointer((MPIR_VOID_PTR_CAST_TO_MPI_AINT inbuf) +
(MPI_Aint) *position);
MPID_Segment_unpack(segp,
@@ -85,7 +85,7 @@ int MPIR_Unpack_impl(const void *inbuf, MPI_Aint insize, MPI_Aint *position,
(void *) ((char *) inbuf + *position));
/* Ensure that calculation fits into an int datatype. */
- MPIU_Ensure_Aint_fits_in_int((MPI_Aint)*position + last);
+ MPIR_Ensure_Aint_fits_in_int((MPI_Aint)*position + last);
*position = (int)((MPI_Aint)*position + last);
@@ -141,12 +141,12 @@ int MPI_Unpack(const void *inbuf, int insize, int *position,
{
int mpi_errno = MPI_SUCCESS;
MPI_Aint position_x;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_UNPACK);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_UNPACK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_UNPACK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_UNPACK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -160,7 +160,7 @@ int MPI_Unpack(const void *inbuf, int insize, int *position,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -175,7 +175,7 @@ int MPI_Unpack(const void *inbuf, int insize, int *position,
MPIR_ERRTEST_COUNT(outcount, mpi_errno);
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
@@ -183,10 +183,10 @@ int MPI_Unpack(const void *inbuf, int insize, int *position,
if (datatype != MPI_DATATYPE_NULL &&
HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
}
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -200,12 +200,12 @@ int MPI_Unpack(const void *inbuf, int insize, int *position,
position_x = *position;
mpi_errno = MPIR_Unpack_impl(inbuf, insize, &position_x, outbuf, outcount, datatype);
if (mpi_errno) goto fn_fail;
- MPIU_Assign_trunc(*position, position_x, int);
+ MPIR_Assign_trunc(*position, position_x, int);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_UNPACK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_UNPACK);
return mpi_errno;
diff --git a/src/mpi/datatype/unpack_external.c b/src/mpi/datatype/unpack_external.c
index d9e6d95..a6f8d49 100644
--- a/src/mpi/datatype/unpack_external.c
+++ b/src/mpi/datatype/unpack_external.c
@@ -70,11 +70,11 @@ int MPI_Unpack_external(const char datarep[],
int mpi_errno = MPI_SUCCESS;
MPI_Aint first, last;
MPID_Segment *segp;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_UNPACK_EXTERNAL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_UNPACK_EXTERNAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_UNPACK_EXTERNAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_UNPACK_EXTERNAL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -91,10 +91,10 @@ int MPI_Unpack_external(const char datarep[],
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
if (datatype != MPI_DATATYPE_NULL && HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
}
@@ -122,7 +122,7 @@ int MPI_Unpack_external(const char datarep[],
last = SEGMENT_IGNORE_LAST;
/* Ensure that pointer increment fits in a pointer */
- MPIU_Ensure_Aint_fits_in_pointer((MPIU_VOID_PTR_CAST_TO_MPI_AINT inbuf) + *position);
+ MPIR_Ensure_Aint_fits_in_pointer((MPIR_VOID_PTR_CAST_TO_MPI_AINT inbuf) + *position);
MPID_Segment_unpack_external32(segp,
first,
@@ -137,7 +137,7 @@ int MPI_Unpack_external(const char datarep[],
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_UNPACK_EXTERNAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_UNPACK_EXTERNAL);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/debugger/.state-cache b/src/mpi/debugger/.state-cache
index 12abc5b..2944254 100644
--- a/src/mpi/debugger/.state-cache
+++ b/src/mpi/debugger/.state-cache
@@ -1,34 +1,34 @@
<dir>
-<file name="tvtest.c" info="1447123141"/>
-<file name="dll_mpich.c" info="1447123141"/>
-<file name="mpi_interface.h" info="1447123141"/>
-<file name="mpich_dll_defs.h" info="1447123141"/>
-<file name="dbginit.c" info="1447123141"/>
-<file name="allcommdbg.c" info="1447123141"/>
-<file name="mpi2_interface.h" info="1447123141"/>
-<file name="dbexample.c" info="1447123141"/>
-<file name="dbgstub.c" info="1447123141"/>
-<file name="qdemo.c" info="1447123141"/>
+<file name="mpi2_interface.h" info="1478973152"/>
+<file name="mpi_interface.h" info="1478973152"/>
+<file name="qdemo.c" info="1478973152"/>
+<file name="dbexample.c" info="1478973152"/>
+<file name="dbginit.c" info="1478973152"/>
+<file name="tvtest.c" info="1478973152"/>
+<file name="allcommdbg.c" info="1478973152"/>
+<file name="mpich_dll_defs.h" info="1478973152"/>
+<file name="dbgstub.c" info="1478973152"/>
+<file name="dll_mpich.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="tvtest.c">
-</fileinfo>
-<fileinfo name="dll_mpich.c">
+<fileinfo name="mpi2_interface.h">
</fileinfo>
<fileinfo name="mpi_interface.h">
</fileinfo>
-<fileinfo name="mpich_dll_defs.h">
+<fileinfo name="qdemo.c">
+</fileinfo>
+<fileinfo name="dbexample.c">
</fileinfo>
<fileinfo name="dbginit.c">
</fileinfo>
-<fileinfo name="allcommdbg.c">
+<fileinfo name="tvtest.c">
</fileinfo>
-<fileinfo name="mpi2_interface.h">
+<fileinfo name="allcommdbg.c">
</fileinfo>
-<fileinfo name="dbexample.c">
+<fileinfo name="mpich_dll_defs.h">
</fileinfo>
<fileinfo name="dbgstub.c">
</fileinfo>
-<fileinfo name="qdemo.c">
+<fileinfo name="dll_mpich.c">
</fileinfo>
</data>
diff --git a/src/mpi/debugger/allcommdbg.c b/src/mpi/debugger/allcommdbg.c
index 690301c..2c49fff 100644
--- a/src/mpi/debugger/allcommdbg.c
+++ b/src/mpi/debugger/allcommdbg.c
@@ -10,7 +10,7 @@
/* style: allow:printf:6 sig:0 */
/* This definition is almost the same as the MPIR_Comm_list in dbginit,
- except a void * is used instead of MPID_Comm * for head; for the use
+ except a void * is used instead of MPIR_Comm * for head; for the use
here, void * is all that is needed */
typedef struct MPIR_Comm_list {
int sequence_number; /* Used to detect changes in the list */
diff --git a/src/mpi/debugger/dbginit.c b/src/mpi/debugger/dbginit.c
index ed3e4a5..bc76344 100644
--- a/src/mpi/debugger/dbginit.c
+++ b/src/mpi/debugger/dbginit.c
@@ -38,7 +38,7 @@ cvars:
verbosity : MPI_T_VERBOSITY_USER_BASIC
scope : MPI_T_SCOPE_ALL_EQ
description : >-
- If true, dump the proctable entries at MPIR_WaitForDebugger-time.
+ If true, dump the proctable entries at MPII_Wait_for_debugger-time.
=== END_MPI_T_CVAR_INFO_BLOCK ===
*/
@@ -101,7 +101,7 @@ void *MPIR_Breakpoint(void);
* offered to the debugger. Typical spots are in MPI_Init/MPI_Init_thread
* after initialization is completed and in MPI_Abort before exiting.
*
- * MPIR_DebuggerSetAborting( const char *msg )
+ * MPIR_Debugger_set_aborting( const char *msg )
*
* This routine should be called when MPI is exiting (either in finalize
* or abort. If a message is provided, it will call MPIR_Breakpoint.
@@ -111,7 +111,7 @@ void *MPIR_Breakpoint(void);
* MPIR_being_debugged, and MPIR_debug_gate where exported globally.
* In MPICH, while these are global variables (so that the debugger can
* find them easily), they are not explicitly exported or referenced outside
- * of a few routines. In particular, MPID_Abort uses MPIR_DebuggerSetAborting
+ * of a few routines. In particular, MPID_Abort uses MPIR_Debugger_set_aborting
* instead of directly accessing these variables.
*/
@@ -177,7 +177,7 @@ static int SendqFreePool( void * );
/*
* If MPICH is built with the --enable-debugger option, MPI_Init and
- * MPI_Init_thread will call MPIR_WaitForDebugger. This ensures both that
+ * MPI_Init_thread will call MPII_Wait_for_debugger. This ensures both that
* the debugger can gather information on the MPI job before the MPI_Init
* returns to the user and that the necessary symbols for providing
* information such as message queues is available.
@@ -186,7 +186,7 @@ static int SendqFreePool( void * );
* all MPI processes to wait in this routine until the variable
* MPIR_debug_gate is set to 1.
*/
-void MPIR_WaitForDebugger( void )
+void MPII_Wait_for_debugger( void )
{
#ifdef MPIU_PROCTABLE_NEEDED
int rank = MPIR_Process.comm_world->rank;
@@ -210,7 +210,7 @@ void MPIR_WaitForDebugger( void )
int hostlen;
int val;
- MPIR_proctable = (MPIR_PROCDESC *)MPIU_Malloc(
+ MPIR_proctable = (MPIR_PROCDESC *)MPL_malloc(
size * sizeof(MPIR_PROCDESC) );
for (i=0; i<size; i++) {
/* Initialize the proctable */
@@ -220,7 +220,7 @@ void MPIR_WaitForDebugger( void )
}
PMPI_Get_processor_name( hostname, &hostlen );
- MPIR_proctable[0].host_name = (char *)MPIU_Strdup( hostname );
+ MPIR_proctable[0].host_name = (char *)MPL_strdup( hostname );
MPIR_proctable[0].executable_name = 0;
MPIR_proctable[0].pid = getpid();
@@ -228,7 +228,7 @@ void MPIR_WaitForDebugger( void )
int msg[2];
PMPI_Recv( msg, 2, MPI_INT, i, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);
MPIR_proctable[i].pid = msg[1];
- MPIR_proctable[i].host_name = (char *)MPIU_Malloc( msg[0] + 1 );
+ MPIR_proctable[i].host_name = (char *)MPL_malloc( msg[0] + 1 );
PMPI_Recv( MPIR_proctable[i].host_name, msg[0]+1, MPI_CHAR,
i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE );
MPIR_proctable[i].host_name[msg[0]] = 0;
@@ -293,7 +293,7 @@ void MPIR_WaitForDebugger( void )
*/
void * MPIR_Breakpoint( void )
{
- MPIU_DBG_MSG(OTHER,VERBOSE,"In MPIR_Breakpoint");
+ MPL_DBG_MSG(MPIR_DBG_OTHER,VERBOSE,"In MPIR_Breakpoint");
return 0;
}
#endif
@@ -303,7 +303,7 @@ void * MPIR_Breakpoint( void )
* If there is an abort message, call the MPIR_Breakpoint routine (which
* allows a tool such as a debugger to gain control.
*/
-void MPIR_DebuggerSetAborting( const char *msg )
+void MPIR_Debugger_set_aborting( const char *msg )
{
MPIR_debug_abort_string = (char *)msg;
MPIR_debug_state = MPIR_DEBUG_ABORTING;
@@ -334,7 +334,7 @@ void MPIR_DebuggerSetAborting( const char *msg )
be included in the request. Saving the context_id also simplifies
matching these entries with a communicator */
typedef struct MPIR_Sendq {
- MPID_Request *sreq;
+ MPIR_Request *sreq;
int tag, rank, context_id;
struct MPIR_Sendq *next;
struct MPIR_Sendq *prev;
@@ -348,9 +348,10 @@ static MPIR_Sendq *pool = 0;
/* This routine is used to establish a queue of send requests to allow the
debugger easier access to the active requests. Some devices may be able
to provide this information without requiring this separate queue. */
-void MPIR_Sendq_remember( MPID_Request *req,
+void MPII_Sendq_remember( MPIR_Request *req,
int rank, int tag, int context_id )
{
+#if defined HAVE_DEBUGGER_SUPPORT
MPIR_Sendq *p;
MPID_THREAD_CS_ENTER(POBJ, req->pobj_mutex);
@@ -359,10 +360,13 @@ void MPIR_Sendq_remember( MPID_Request *req,
pool = p->next;
}
else {
- p = (MPIR_Sendq *)MPIU_Malloc( sizeof(MPIR_Sendq) );
+ p = (MPIR_Sendq *)MPL_malloc( sizeof(MPIR_Sendq) );
if (!p) {
/* Just ignore it */
- req->dbg_next = NULL;
+ if (MPIR_REQUEST_KIND__SEND == req->kind)
+ req->u.send.dbg_next = NULL;
+ else if (MPIR_REQUEST_KIND__PREQUEST_SEND == req->kind)
+ req->u.persist.dbg_next = NULL;
goto fn_exit;
}
}
@@ -374,17 +378,25 @@ void MPIR_Sendq_remember( MPID_Request *req,
p->prev = NULL;
MPIR_Sendq_head = p;
if (p->next) p->next->prev = p;
- req->dbg_next = p;
+ if (MPIR_REQUEST_KIND__SEND == req->kind)
+ req->u.send.dbg_next = p;
+ else if (MPIR_REQUEST_KIND__PREQUEST_SEND == req->kind)
+ req->u.persist.dbg_next = p;
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, req->pobj_mutex);
+#endif /* HAVE_DEBUGGER_SUPPORT */
}
-void MPIR_Sendq_forget( MPID_Request *req )
+void MPII_Sendq_forget( MPIR_Request *req )
{
+#if defined HAVE_DEBUGGER_SUPPORT
MPIR_Sendq *p, *prev;
MPID_THREAD_CS_ENTER(POBJ, req->pobj_mutex);
- p = req->dbg_next;
+ if (MPIR_REQUEST_KIND__SEND == req->kind)
+ p = req->u.send.dbg_next;
+ else if (MPIR_REQUEST_KIND__PREQUEST_SEND == req->kind)
+ p = req->u.persist.dbg_next;
if (!p) {
/* Just ignore it */
MPID_THREAD_CS_EXIT(POBJ, req->pobj_mutex);
@@ -398,6 +410,7 @@ void MPIR_Sendq_forget( MPID_Request *req )
p->next = pool;
pool = p;
MPID_THREAD_CS_EXIT(POBJ, req->pobj_mutex);
+#endif /* HAVE_DEBUGGER_SUPPORT */
}
static int SendqFreePool( void *d )
@@ -408,14 +421,14 @@ static int SendqFreePool( void *d )
p = pool;
while (p) {
pool = p->next;
- MPIU_Free( p );
+ MPL_free( p );
p = pool;
}
/* Free the list of pending sends */
p = MPIR_Sendq_head;
while (p) {
MPIR_Sendq_head = p->next;
- MPIU_Free( p );
+ MPL_free( p );
p = MPIR_Sendq_head;
}
return 0;
@@ -427,7 +440,7 @@ static void SendqInit( void )
/* Preallocated a few send requests */
for (i=0; i<10; i++) {
- p = (MPIR_Sendq *)MPIU_Malloc( sizeof(MPIR_Sendq) );
+ p = (MPIR_Sendq *)MPL_malloc( sizeof(MPIR_Sendq) );
if (!p) {
/* Just ignore it */
break;
@@ -445,16 +458,16 @@ static void SendqInit( void )
debugger message queue interface */
typedef struct MPIR_Comm_list {
int sequence_number; /* Used to detect changes in the list */
- MPID_Comm *head; /* Head of the list */
+ MPIR_Comm *head; /* Head of the list */
} MPIR_Comm_list;
MPIR_Comm_list MPIR_All_communicators = { 0, 0 };
-void MPIR_CommL_remember( MPID_Comm *comm_ptr )
+void MPII_CommL_remember( MPIR_Comm *comm_ptr )
{
- MPIU_DBG_MSG_P(COMM,VERBOSE,
+ MPL_DBG_MSG_P(MPIR_DBG_COMM,VERBOSE,
"Adding communicator %p to remember list",comm_ptr);
- MPIU_DBG_MSG_P(COMM,VERBOSE,
+ MPL_DBG_MSG_P(MPIR_DBG_COMM,VERBOSE,
"Remember list structure address is %p",&MPIR_All_communicators);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
if (comm_ptr == MPIR_All_communicators.head) {
@@ -464,17 +477,17 @@ void MPIR_CommL_remember( MPID_Comm *comm_ptr )
comm_ptr->comm_next = MPIR_All_communicators.head;
MPIR_All_communicators.head = comm_ptr;
MPIR_All_communicators.sequence_number++;
- MPIU_DBG_MSG_P(COMM,VERBOSE,
+ MPL_DBG_MSG_P(MPIR_DBG_COMM,VERBOSE,
"master head is %p", MPIR_All_communicators.head );
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
}
-void MPIR_CommL_forget( MPID_Comm *comm_ptr )
+void MPII_CommL_forget( MPIR_Comm *comm_ptr )
{
- MPID_Comm *p, *prev;
+ MPIR_Comm *p, *prev;
- MPIU_DBG_MSG_P(COMM,VERBOSE,
+ MPL_DBG_MSG_P(MPIR_DBG_COMM,VERBOSE,
"Forgetting communicator %p from remember list",comm_ptr);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
p = MPIR_All_communicators.head;
@@ -504,9 +517,9 @@ static int MPIR_FreeProctable( void *ptable )
int i;
MPIR_PROCDESC *proctable = (MPIR_PROCDESC *)ptable;
for (i=0; i<MPIR_proctable_size; i++) {
- if (proctable[i].host_name) { MPIU_Free( proctable[i].host_name ); }
+ if (proctable[i].host_name) { MPL_free( proctable[i].host_name ); }
}
- MPIU_Free( proctable );
+ MPL_free( proctable );
return 0;
}
diff --git a/src/mpi/debugger/dbgstub.c b/src/mpi/debugger/dbgstub.c
index 52c8d74..bfdff0e 100644
--- a/src/mpi/debugger/dbgstub.c
+++ b/src/mpi/debugger/dbgstub.c
@@ -10,14 +10,14 @@
/* These are pointers to the static variables in src/mpid/ch3/src/ch3u_recvq.c
that contains the *addresses* of the posted and unexpected queue head
pointers */
-extern MPID_Request ** const MPID_Recvq_posted_head_ptr,
+extern MPIR_Request ** const MPID_Recvq_posted_head_ptr,
** const MPID_Recvq_unexpected_head_ptr;
#include "mpi_interface.h"
/* This is from dbginit.c; it is not exported to other files */
typedef struct MPIR_Sendq {
- MPID_Request *sreq;
+ MPIR_Request *sreq;
int tag, rank, context_id;
struct MPIR_Sendq *next;
} MPIR_Sendq;
@@ -25,7 +25,7 @@ extern MPIR_Sendq *MPIR_Sendq_head;
/* This is from dbginit.c; it is not exported to other files */
typedef struct MPIR_Comm_list {
int sequence_number; /* Used to detect changes in the list */
- MPID_Comm *head; /* Head of the list */
+ MPIR_Comm *head; /* Head of the list */
} MPIR_Comm_list;
extern MPIR_Comm_list MPIR_All_communicators;
@@ -42,11 +42,11 @@ extern MPIR_Comm_list MPIR_All_communicators;
These routines (more precisely, the field_offset routine) need to
known the layout of the internal data structures */
enum { TYPE_UNKNOWN = 0,
- TYPE_MPID_COMM = 1,
+ TYPE_MPIR_COMM = 1,
TYPE_MPIR_COMM_LIST = 2,
TYPE_MPIDI_REQUEST = 3,
TYPE_MPIDI_MESSAGE_MATCH = 4,
- TYPE_MPID_REQUEST = 5,
+ TYPE_MPIR_REQUEST = 5,
TYPE_MPIR_SENDQ = 6,
TYPE_MPIDI_MESSAGE_MATCH_PARTS = 7,
} KnownTypes;
@@ -55,10 +55,10 @@ enum { TYPE_UNKNOWN = 0,
recent type, so a static current type will not work. Instead, we
have an example of each type, and return that value. */
-static int knownTypesArray[] = { TYPE_UNKNOWN, TYPE_MPID_COMM,
- TYPE_MPIR_COMM_LIST, TYPE_MPIDI_REQUEST,
- TYPE_MPIDI_MESSAGE_MATCH, TYPE_MPID_REQUEST,
- TYPE_MPIR_SENDQ,
+static int knownTypesArray[] = { TYPE_UNKNOWN, TYPE_MPIR_COMM,
+ TYPE_MPIR_COMM_LIST, TYPE_MPIDI_REQUEST,
+ TYPE_MPIDI_MESSAGE_MATCH, TYPE_MPIR_REQUEST,
+ TYPE_MPIR_SENDQ,
TYPE_MPIDI_MESSAGE_MATCH_PARTS };
mqs_type * dbgrI_find_type(mqs_image *image, char *name,
@@ -66,8 +66,8 @@ mqs_type * dbgrI_find_type(mqs_image *image, char *name,
{
int curType = TYPE_UNKNOWN;
- if (strcmp(name,"MPID_Comm") == 0) {
- curType = TYPE_MPID_COMM;
+ if (strcmp(name,"MPIR_Comm") == 0) {
+ curType = TYPE_MPIR_COMM;
}
else if (strcmp( name, "MPIR_Comm_list" ) == 0) {
curType = TYPE_MPIR_COMM_LIST;
@@ -81,8 +81,8 @@ mqs_type * dbgrI_find_type(mqs_image *image, char *name,
else if (strcmp( name, "MPIDI_Message_match_parts_t" ) == 0) {
curType = TYPE_MPIDI_MESSAGE_MATCH_PARTS;
}
- else if (strcmp( name, "MPID_Request" ) == 0) {
- curType = TYPE_MPID_REQUEST;
+ else if (strcmp( name, "MPIR_Request" ) == 0) {
+ curType = TYPE_MPIR_REQUEST;
}
else if (strcmp( name, "MPIR_Sendq" ) == 0) {
curType = TYPE_MPIR_SENDQ;
@@ -102,9 +102,9 @@ int dbgrI_field_offset(mqs_type *type, char *name)
/* printf ( "curtype is %d\n", curType ); */
switch (curType) {
- case TYPE_MPID_COMM:
+ case TYPE_MPIR_COMM:
{
- MPID_Comm c;
+ MPIR_Comm c;
if (strcmp( name, "name" ) == 0) {
off = ((char*)&(c.name[0]) - (char*)&c.handle);
}
@@ -192,9 +192,9 @@ int dbgrI_field_offset(mqs_type *type, char *name)
}
}
break;
- case TYPE_MPID_REQUEST:
+ case TYPE_MPIR_REQUEST:
{
- MPID_Request c;
+ MPIR_Request c;
if (strcmp( name, "dev" ) == 0) {
off = ((char *)&c.dev - (char *)&c);
}
@@ -253,7 +253,7 @@ int dbgrI_find_symbol( mqs_image *image, char *name, mqs_taddr_t * loc )
/* The following printfs can help is diagnosing problems when the
extern variable MPIR_All_communicators appears not to be
correctly resolved. */
- printf( "all communicators head at %p\n", *loc );
+ printf( "all communicators head at %p\n", (void *)*loc );
printf( "all communicators head as pointer %p\n", &MPIR_All_communicators );
printf( "head is %p\n", MPIR_All_communicators.head );
return mqs_ok;
diff --git a/src/mpi/debugger/dll_mpich.c b/src/mpi/debugger/dll_mpich.c
index abd55ca..9bef5f3 100644
--- a/src/mpi/debugger/dll_mpich.c
+++ b/src/mpi/debugger/dll_mpich.c
@@ -266,7 +266,7 @@ int mqs_image_has_queues (mqs_image *image, char **message)
/* Force in the file containing our wait-for-debugger function, to ensure
* that types have been read from there before we try to look them up.
*/
- dbgr_find_function (image, (char *)"MPIR_WaitForDebugger", mqs_lang_c, NULL);
+ dbgr_find_function (image, (char *)"MPII_Wait_for_debugger", mqs_lang_c, NULL);
/* Find the various global variables and structure definitions
that describe the communicator and message queue structures for
@@ -275,7 +275,7 @@ int mqs_image_has_queues (mqs_image *image, char **message)
/* First, the communicator information. This is in two parts:
MPIR_All_Communicators - a structure containing the head of the
list of all active communicators. The type is MPIR_Comm_list.
- The communicators themselves are of type MPID_Comm.
+ The communicators themselves are of type MPIR_Comm.
*/
{
mqs_type *cl_type = dbgr_find_type( image, (char *)"MPIR_Comm_list",
@@ -287,7 +287,7 @@ int mqs_image_has_queues (mqs_image *image, char **message)
}
}
{
- mqs_type *co_type = dbgr_find_type( image, (char *)"MPID_Comm", mqs_lang_c );
+ mqs_type *co_type = dbgr_find_type( image, (char *)"MPIR_Comm", mqs_lang_c );
if (co_type) {
i_info->comm_name_offs = dbgr_field_offset( co_type, (char *)"name" );
i_info->comm_next_offs = dbgr_field_offset( co_type, (char *)"comm_next" );
@@ -298,13 +298,13 @@ int mqs_image_has_queues (mqs_image *image, char **message)
}
}
- /* Now the receive queues. The receive queues contain MPID_Request
+ /* Now the receive queues. The receive queues contain MPIR_Request
objects, and the various fields are within types in that object.
To simplify the eventual access, we compute all offsets relative to the
request. This means diving into the types that make of the
request definition */
{
- mqs_type *req_type = dbgr_find_type( image, (char *)"MPID_Request", mqs_lang_c );
+ mqs_type *req_type = dbgr_find_type( image, (char *)"MPIR_Request", mqs_lang_c );
if (req_type) {
int dev_offs;
dev_offs = dbgr_field_offset( req_type, (char *)"dev" );
diff --git a/src/mpi/debugger/mpich_dll_defs.h b/src/mpi/debugger/mpich_dll_defs.h
index c66c39a..a6a0be8 100644
--- a/src/mpi/debugger/mpich_dll_defs.h
+++ b/src/mpi/debugger/mpich_dll_defs.h
@@ -20,7 +20,7 @@ typedef struct
int sequence_number_offs;
int comm_head_offs;
- /* Fields in MPID_Comm */
+ /* Fields in MPIR_Comm */
int comm_rsize_offs;
int lrank_to_grank_offs;
int comm_rank_offs;
@@ -29,7 +29,7 @@ typedef struct
int comm_next_offs;
int comm_name_offs;
- /* Fields in MPID_Request (including structures within the request) */
+ /* Fields in MPIR_Request (including structures within the request) */
int req_status_offs;
int req_cc_offs;
int req_dev_offs;
diff --git a/src/mpi/debugger/tvtest.c b/src/mpi/debugger/tvtest.c
index 14a2c7e..7affa3a 100644
--- a/src/mpi/debugger/tvtest.c
+++ b/src/mpi/debugger/tvtest.c
@@ -332,19 +332,19 @@ static int dbgrI_find_function( mqs_image *image, char *name,
}
-#define MPIU_Memcpy memcpy
+#define MPIR_Memcpy memcpy
/* Simulate requesting the debugger to fetch data from within this process */
static int dbgrI_fetch_data( mqs_process *proc, mqs_taddr_t addr, int asize,
void *data )
{
- MPIU_Memcpy( data, (void *)addr, (size_t) asize );
+ MPIR_Memcpy( data, (void *)addr, (size_t) asize );
return mqs_ok;
}
/* Simulate converting data to debuggers byte ordering */
static void dbgrI_target_to_host (mqs_process *proc, const void *in_data,
void *out_data, int asize )
{
- MPIU_Memcpy( out_data, in_data, asize );
+ MPIR_Memcpy( out_data, in_data, asize );
}
/* Return the "debuggers" image structure (statically allocated above) */
diff --git a/src/mpi/errhan/.state-cache b/src/mpi/errhan/.state-cache
index a468a25..a81dea8 100644
--- a/src/mpi/errhan/.state-cache
+++ b/src/mpi/errhan/.state-cache
@@ -1,103 +1,103 @@
<dir>
-<file name="file_call_errhandler.c" info="1447123141"/>
-<file name="error_string.c" info="1447123141"/>
-<file name="errhandler_get.c" info="1447123141"/>
-<file name="comm_create_errhandler.c" info="1447123141"/>
-<file name="windefmsg.h" info="1447123141"/>
-<file name="comm_call_errhandler.c" info="1447123141"/>
-<file name="win_get_errhandler.c" info="1447123141"/>
-<file name="errhandler_set.c" info="1447123141"/>
-<file name="errutil.c" info="1447123141"/>
-<file name="add_error_string.c" info="1447123141"/>
-<file name="file_get_errhandler.c" info="1447123141"/>
-<file name="comm_get_errhandler.c" info="1447123141"/>
-<file name="win_set_errhandler.c" info="1447123141"/>
-<file name="win_create_errhandler.c" info="1447123141"/>
-<file name="errhandler_create.c" info="1447123141"/>
-<file name="error_class.c" info="1447123141"/>
-<file name="file_create_errhandler.c" info="1447123141"/>
-<file name="add_error_class.c" info="1447123141"/>
-<file name="add_error_code.c" info="1447123141"/>
-<file name="defmsg.h" info="1447301223"/>
-<file name="win_call_errhandler.c" info="1447123141"/>
-<file name="errhandler_free.c" info="1447123141"/>
-<file name="dynerrutil.c" info="1447123141"/>
-<file name="file_set_errhandler.c" info="1447123141"/>
-<file name="errcodes.h" info="1447123141"/>
-<file name="comm_set_errhandler.c" info="1447123141"/>
+<file name="file_get_errhandler.c" info="1478973152"/>
+<file name="add_error_string.c" info="1478973152"/>
+<file name="file_set_errhandler.c" info="1478973152"/>
+<file name="win_create_errhandler.c" info="1478973152"/>
+<file name="comm_get_errhandler.c" info="1478973152"/>
+<file name="win_get_errhandler.c" info="1478973152"/>
+<file name="win_set_errhandler.c" info="1478973152"/>
+<file name="dynerrutil.c" info="1478973152"/>
+<file name="comm_set_errhandler.c" info="1478973152"/>
+<file name="file_create_errhandler.c" info="1478973152"/>
+<file name="add_error_code.c" info="1478973152"/>
+<file name="add_error_class.c" info="1478973152"/>
+<file name="comm_create_errhandler.c" info="1478973152"/>
+<file name="errcodes.h" info="1478973152"/>
+<file name="errhandler_set.c" info="1478973152"/>
+<file name="error_string.c" info="1478973152"/>
+<file name="errhandler_create.c" info="1478973152"/>
+<file name="defmsg.h" info="1479053544"/>
+<file name="errutil.c" info="1478973152"/>
+<file name="file_call_errhandler.c" info="1478973152"/>
+<file name="win_call_errhandler.c" info="1478973152"/>
+<file name="errhandler_free.c" info="1478973152"/>
+<file name="comm_call_errhandler.c" info="1478973152"/>
+<file name="errhandler_get.c" info="1478973152"/>
+<file name="error_class.c" info="1478973152"/>
+<file name="windefmsg.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="file_call_errhandler.c">
-MPID_STATE_MPI_FILE_CALL_ERRHANDLER MPI_File_call_errhandler
-</fileinfo>
-<fileinfo name="error_string.c">
-MPID_STATE_MPI_ERROR_STRING MPI_Error_string
-</fileinfo>
-<fileinfo name="errhandler_get.c">
-MPID_STATE_MPI_ERRHANDLER_GET MPI_Errhandler_get
-</fileinfo>
-<fileinfo name="comm_create_errhandler.c">
-MPID_STATE_MPI_COMM_CREATE_ERRHANDLER MPI_Comm_create_errhandler
-</fileinfo>
-<fileinfo name="windefmsg.h">
-</fileinfo>
-<fileinfo name="comm_call_errhandler.c">
-MPID_STATE_MPI_COMM_CALL_ERRHANDLER MPI_Comm_call_errhandler
-</fileinfo>
-<fileinfo name="win_get_errhandler.c">
-MPID_STATE_MPI_WIN_GET_ERRHANDLER MPI_Win_get_errhandler
-</fileinfo>
-<fileinfo name="errhandler_set.c">
-MPID_STATE_MPI_ERRHANDLER_SET MPI_Errhandler_set
-</fileinfo>
-<fileinfo name="errutil.c">
+<fileinfo name="file_get_errhandler.c">
+MPID_STATE_MPI_FILE_GET_ERRHANDLER MPI_File_get_errhandler
</fileinfo>
<fileinfo name="add_error_string.c">
MPID_STATE_MPI_ADD_ERROR_STRING MPI_Add_error_string
</fileinfo>
-<fileinfo name="file_get_errhandler.c">
-MPID_STATE_MPI_FILE_GET_ERRHANDLER MPI_File_get_errhandler
+<fileinfo name="file_set_errhandler.c">
+MPID_STATE_MPI_FILE_SET_ERRHANDLER MPI_File_set_errhandler
+</fileinfo>
+<fileinfo name="win_create_errhandler.c">
+MPID_STATE_MPI_WIN_CREATE_ERRHANDLER MPI_Win_create_errhandler
</fileinfo>
<fileinfo name="comm_get_errhandler.c">
MPID_STATE_MPI_COMM_GET_ERRHANDLER MPI_Comm_get_errhandler
</fileinfo>
+<fileinfo name="win_get_errhandler.c">
+MPID_STATE_MPI_WIN_GET_ERRHANDLER MPI_Win_get_errhandler
+</fileinfo>
<fileinfo name="win_set_errhandler.c">
MPID_STATE_MPI_WIN_SET_ERRHANDLER MPI_Win_set_errhandler
</fileinfo>
-<fileinfo name="win_create_errhandler.c">
-MPID_STATE_MPI_WIN_CREATE_ERRHANDLER MPI_Win_create_errhandler
-</fileinfo>
-<fileinfo name="errhandler_create.c">
-MPID_STATE_MPI_ERRHANDLER_CREATE MPI_Errhandler_create
+<fileinfo name="dynerrutil.c">
</fileinfo>
-<fileinfo name="error_class.c">
-MPID_STATE_MPI_ERROR_CLASS MPI_Error_class
+<fileinfo name="comm_set_errhandler.c">
+MPID_STATE_MPI_COMM_SET_ERRHANDLER MPI_Comm_set_errhandler
</fileinfo>
<fileinfo name="file_create_errhandler.c">
MPID_STATE_MPI_FILE_CREATE_ERRHANDLER MPI_File_create_errhandler
</fileinfo>
+<fileinfo name="add_error_code.c">
+MPID_STATE_MPI_ADD_ERROR_CODE MPI_Add_error_code
+</fileinfo>
<fileinfo name="add_error_class.c">
MPID_STATE_MPI_ADD_ERROR_CLASS MPI_Add_error_class
</fileinfo>
-<fileinfo name="add_error_code.c">
-MPID_STATE_MPI_ADD_ERROR_CODE MPI_Add_error_code
+<fileinfo name="comm_create_errhandler.c">
+MPID_STATE_MPI_COMM_CREATE_ERRHANDLER MPI_Comm_create_errhandler
+</fileinfo>
+<fileinfo name="errcodes.h">
+</fileinfo>
+<fileinfo name="errhandler_set.c">
+MPID_STATE_MPI_ERRHANDLER_SET MPI_Errhandler_set
+</fileinfo>
+<fileinfo name="error_string.c">
+MPID_STATE_MPI_ERROR_STRING MPI_Error_string
+</fileinfo>
+<fileinfo name="errhandler_create.c">
+MPID_STATE_MPI_ERRHANDLER_CREATE MPI_Errhandler_create
</fileinfo>
<fileinfo name="defmsg.h">
</fileinfo>
+<fileinfo name="errutil.c">
+</fileinfo>
+<fileinfo name="file_call_errhandler.c">
+MPID_STATE_MPI_FILE_CALL_ERRHANDLER MPI_File_call_errhandler
+</fileinfo>
<fileinfo name="win_call_errhandler.c">
MPID_STATE_MPI_WIN_CALL_ERRHANDLER MPI_Win_call_errhandler
</fileinfo>
<fileinfo name="errhandler_free.c">
MPID_STATE_MPI_ERRHANDLER_FREE MPI_Errhandler_free
</fileinfo>
-<fileinfo name="dynerrutil.c">
+<fileinfo name="comm_call_errhandler.c">
+MPID_STATE_MPI_COMM_CALL_ERRHANDLER MPI_Comm_call_errhandler
</fileinfo>
-<fileinfo name="file_set_errhandler.c">
-MPID_STATE_MPI_FILE_SET_ERRHANDLER MPI_File_set_errhandler
+<fileinfo name="errhandler_get.c">
+MPID_STATE_MPI_ERRHANDLER_GET MPI_Errhandler_get
</fileinfo>
-<fileinfo name="errcodes.h">
+<fileinfo name="error_class.c">
+MPID_STATE_MPI_ERROR_CLASS MPI_Error_class
</fileinfo>
-<fileinfo name="comm_set_errhandler.c">
-MPID_STATE_MPI_COMM_SET_ERRHANDLER MPI_Comm_set_errhandler
+<fileinfo name="windefmsg.h">
</fileinfo>
</data>
diff --git a/src/mpi/errhan/add_error_class.c b/src/mpi/errhan/add_error_class.c
index 9b3c232..4713b36 100644
--- a/src/mpi/errhan/add_error_class.c
+++ b/src/mpi/errhan/add_error_class.c
@@ -50,12 +50,12 @@ int MPI_Add_error_class(int *errorclass)
static const char FCNAME[] = "MPI_Add_error_class";
int mpi_errno = MPI_SUCCESS;
int new_class;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ADD_ERROR_CLASS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ADD_ERROR_CLASS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ADD_ERROR_CLASS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ADD_ERROR_CLASS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +83,7 @@ int MPI_Add_error_class(int *errorclass)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ADD_ERROR_CLASS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ADD_ERROR_CLASS);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/add_error_code.c b/src/mpi/errhan/add_error_code.c
index f560a05..b2a152f 100644
--- a/src/mpi/errhan/add_error_code.c
+++ b/src/mpi/errhan/add_error_code.c
@@ -53,12 +53,12 @@ int MPI_Add_error_code(int errorclass, int *errorcode)
static const char FCNAME[] = "MPI_Add_error_code";
int mpi_errno = MPI_SUCCESS;
int new_code;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ADD_ERROR_CODE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ADD_ERROR_CODE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ADD_ERROR_CODE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ADD_ERROR_CODE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -82,7 +82,7 @@ int MPI_Add_error_code(int errorclass, int *errorcode)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ADD_ERROR_CODE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ADD_ERROR_CODE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/add_error_string.c b/src/mpi/errhan/add_error_string.c
index d226f59..b8ea233 100644
--- a/src/mpi/errhan/add_error_string.c
+++ b/src/mpi/errhan/add_error_string.c
@@ -62,12 +62,12 @@ int MPI_Add_error_string(int errorcode, const char *string)
{
static const char FCNAME[] = "MPI_Add_error_string";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ADD_ERROR_STRING);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ADD_ERROR_STRING);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ADD_ERROR_STRING);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ADD_ERROR_STRING);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -88,7 +88,7 @@ int MPI_Add_error_string(int errorcode, const char *string)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ADD_ERROR_STRING);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ADD_ERROR_STRING);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/comm_call_errhandler.c b/src/mpi/errhan/comm_call_errhandler.c
index 4ce38f9..6bcd174 100644
--- a/src/mpi/errhan/comm_call_errhandler.c
+++ b/src/mpi/errhan/comm_call_errhandler.c
@@ -56,12 +56,12 @@ int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode)
{
int mpi_errno = MPI_SUCCESS;
int in_cs = FALSE;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_CALL_ERRHANDLER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_CALL_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_CALL_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_CALL_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -75,7 +75,7 @@ int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr)); /* protect access to comm_ptr->errhandler */
in_cs = TRUE;
@@ -87,7 +87,7 @@ int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode)
{
/* Validate comm_ptr; if comm_ptr is not value, it will be reset
to null */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (comm_ptr->errhandler) {
@@ -125,20 +125,20 @@ int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode)
/* Process any user-defined error handling function */
switch (comm_ptr->errhandler->language) {
- case MPID_LANG_C:
+ case MPIR_LANG__C:
(*comm_ptr->errhandler->errfn.C_Comm_Handler_function)(
&comm_ptr->handle, &errorcode );
break;
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
MPIR_Process.cxx_call_errfn( 0, &comm_ptr->handle,
&errorcode,
(void (*)(void))comm_ptr->errhandler->errfn.C_Comm_Handler_function );
break;
#endif
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN90:
- case MPID_LANG_FORTRAN:
+ case MPIR_LANG__FORTRAN90:
+ case MPIR_LANG__FORTRAN:
{
/* If int and MPI_Fint aren't the same size, we need to
convert. As this is not performance critical, we
@@ -158,7 +158,7 @@ int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode)
if (in_cs)
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_CALL_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_CALL_ERRHANDLER);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/errhan/comm_create_errhandler.c b/src/mpi/errhan/comm_create_errhandler.c
index de7bd8e..0d530ee 100644
--- a/src/mpi/errhan/comm_create_errhandler.c
+++ b/src/mpi/errhan/comm_create_errhandler.c
@@ -34,17 +34,17 @@ int MPIR_Comm_create_errhandler_impl(MPI_Comm_errhandler_function *comm_errhandl
MPI_Errhandler *errhandler)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Errhandler *errhan_ptr;
+ MPIR_Errhandler *errhan_ptr;
- errhan_ptr = (MPID_Errhandler *)MPIU_Handle_obj_alloc( &MPID_Errhandler_mem );
+ errhan_ptr = (MPIR_Errhandler *)MPIR_Handle_obj_alloc( &MPIR_Errhandler_mem );
MPIR_ERR_CHKANDJUMP(!errhan_ptr, mpi_errno, MPI_ERR_OTHER, "**nomem");
- errhan_ptr->language = MPID_LANG_C;
- errhan_ptr->kind = MPID_COMM;
- MPIU_Object_set_ref(errhan_ptr,1);
+ errhan_ptr->language = MPIR_LANG__C;
+ errhan_ptr->kind = MPIR_COMM;
+ MPIR_Object_set_ref(errhan_ptr,1);
errhan_ptr->errfn.C_Comm_Handler_function = comm_errhandler_fn;
- MPID_OBJ_PUBLISH_HANDLE(*errhandler, errhan_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*errhandler, errhan_ptr->handle);
fn_exit:
return mpi_errno;
fn_fail:
@@ -85,12 +85,12 @@ int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
MPI_Errhandler *errhandler)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_CREATE_ERRHANDLER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_CREATE_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_CREATE_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_CREATE_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -112,7 +112,7 @@ int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_CREATE_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_CREATE_ERRHANDLER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/comm_get_errhandler.c b/src/mpi/errhan/comm_get_errhandler.c
index f5e8bf3..26a3ce6 100644
--- a/src/mpi/errhan/comm_get_errhandler.c
+++ b/src/mpi/errhan/comm_get_errhandler.c
@@ -31,7 +31,7 @@ int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler) __attribu
#define FUNCNAME MPIR_Comm_get_errhandler_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIR_Comm_get_errhandler_impl(MPID_Comm *comm_ptr, MPID_Errhandler **errhandler_ptr)
+void MPIR_Comm_get_errhandler_impl(MPIR_Comm *comm_ptr, MPIR_Errhandler **errhandler_ptr)
{
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
*errhandler_ptr = comm_ptr->errhandler;
@@ -68,14 +68,14 @@ Output Parameters:
int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Errhandler *errhandler_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Errhandler *errhandler_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -89,7 +89,7 @@ int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -97,7 +97,7 @@ int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr; if comm_ptr is not valid, it will be reset to null */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL(errhandler,"errhandler",mpi_errno);
}
@@ -118,7 +118,7 @@ int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/comm_set_errhandler.c b/src/mpi/errhan/comm_set_errhandler.c
index ec1d1de..481dc54 100644
--- a/src/mpi/errhan/comm_set_errhandler.c
+++ b/src/mpi/errhan/comm_set_errhandler.c
@@ -29,7 +29,7 @@ int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) __attribut
#define FUNCNAME MPIR_Comm_set_errhandler_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIR_Comm_set_errhandler_impl(MPID_Comm *comm_ptr, MPID_Errhandler *errhandler_ptr)
+void MPIR_Comm_set_errhandler_impl(MPIR_Comm *comm_ptr, MPIR_Errhandler *errhandler_ptr)
{
int in_use;
@@ -41,7 +41,7 @@ void MPIR_Comm_set_errhandler_impl(MPID_Comm *comm_ptr, MPID_Errhandler *errhand
if (comm_ptr->errhandler != NULL) {
MPIR_Errhandler_release_ref(comm_ptr->errhandler, &in_use);
if (!in_use) {
- MPID_Errhandler_free( comm_ptr->errhandler );
+ MPIR_Errhandler_free( comm_ptr->errhandler );
}
}
@@ -80,14 +80,14 @@ Input Parameters:
int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Errhandler *errhan_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SET_ERRHANDLER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Errhandler *errhan_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SET_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SET_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SET_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -101,8 +101,8 @@ int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Errhandler_get_ptr( errhandler, errhan_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Errhandler_get_ptr( errhandler, errhan_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -110,10 +110,10 @@ int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr; if comm_ptr is not valid, it will be reset to null */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (HANDLE_GET_KIND(errhandler) != HANDLE_KIND_BUILTIN) {
- MPID_Errhandler_valid_ptr( errhan_ptr, mpi_errno );
+ MPIR_Errhandler_valid_ptr( errhan_ptr, mpi_errno );
}
MPIR_ERRTEST_ERRHANDLER(errhandler, mpi_errno);
}
@@ -130,7 +130,7 @@ int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SET_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SET_ERRHANDLER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/defmsg.h b/src/mpi/errhan/defmsg.h
index dfe38c5..f522654 100644
--- a/src/mpi/errhan/defmsg.h
+++ b/src/mpi/errhan/defmsg.h
@@ -6,13 +6,13 @@
* This file automatically created by extracterrmsgs
* DO NOT EDIT
*/
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_CLASS
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__CLASS
typedef struct msgpair {
const unsigned int sentinal1;
const char *short_name, *long_name;
const unsigned int sentinal2; } msgpair;
#endif
-#if MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG_CLASS
+#if MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG__CLASS
#define MPIR_MAX_ERROR_CLASS_INDEX 59+1
static const char *classToMsg[] = {
"No MPI error", /* 0 **success */
@@ -77,7 +77,7 @@ static const char *classToMsg[] = {
"Communication object revoked", /* 59 **revoked */
0 };
#endif /* MSG_CLASS */
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_CLASS
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__CLASS
/* The names are in sorted order, allowing the use of a simple
linear search or bisection algorithm to find the message corresponding to
a particular message */
@@ -109,1766 +109,1814 @@ static const char short_gen12[] = "**abi_version_mismatch";
static const char long_gen12[] = "ABI version mismatch";
static const char short_gen13[] = "**afinetinvalid";
static const char long_gen13[] = "Network type AF_INET invalid in call to inet_pton";
-static const char short_gen14[] = "**alloc_shar_mem";
-static const char long_gen14[] = "unable to allocate shared memory";
-static const char short_gen15[] = "**allocmem";
-static const char long_gen15[] = "Unable to allocate memory for MPI_Alloc_mem";
-static const char short_gen16[] = "**arg";
-static const char long_gen16[] = "Invalid argument";
-static const char short_gen17[] = "**argarrayneg";
-static const char long_gen17[] = "Negative value in array ";
-static const char short_gen18[] = "**argerrcode";
-static const char long_gen18[] = "Invalid error code";
-static const char short_gen19[] = "**argneg";
-static const char long_gen19[] = "Invalid argument; must be non-negative";
-static const char short_gen20[] = "**argnonpos";
-static const char long_gen20[] = "Invalid argument; must be positive";
-static const char short_gen21[] = "**argpackbuf";
-static const char long_gen21[] = "Pack buffer is too small for data";
-static const char short_gen22[] = "**argposneg";
-static const char long_gen22[] = "Value of position must be nonnegative";
-static const char short_gen23[] = "**argrange";
-static const char long_gen23[] = "Argument is not within valid range";
-static const char short_gen24[] = "**argstr_hostd";
-static const char long_gen24[] = "no space for the host description";
-static const char short_gen25[] = "**argstr_missinghost";
-static const char long_gen25[] = "Missing hostname or invalid host/port description in business card";
-static const char short_gen26[] = "**argstr_missingifname";
-static const char long_gen26[] = "Missing ifname or invalid host/port description in business card";
-static const char short_gen27[] = "**argstr_missingport";
-static const char long_gen27[] = "Missing port or invalid host/port description in business card";
-static const char short_gen28[] = "**argstr_no_port_name_tag";
-static const char long_gen28[] = "no port_name tag in MPI port. Make sure that port was created with MPI_Open_port";
-static const char short_gen29[] = "**argstr_port";
-static const char long_gen29[] = "no space for the listener port";
-static const char short_gen30[] = "**argstr_port_name_tag";
-static const char long_gen30[] = "no space for port_name tag";
-static const char short_gen31[] = "**argtoosmall";
-static const char long_gen31[] = "Invalid argument; value is too small";
-static const char short_gen32[] = "**assert";
-static const char long_gen32[] = "Invalid assert argument";
-static const char short_gen33[] = "**attach_shar_mem";
-static const char long_gen33[] = "unable to attach to shared memory";
-static const char short_gen34[] = "**attrnotptr";
-static const char long_gen34[] = "The attribute value is not the address of a pointer or pointer-sized integer. A common error is to pass the address of an integer to any of the MPI_Xxx_get_attr routines on systems where the size of a pointer is larger than the size of an integer.";
-static const char short_gen35[] = "**attrsentinal";
-static const char long_gen35[] = "Internal fields in an attribute have been overwritten; possible errors in using the attribute value in user code.";
-static const char short_gen36[] = "**bad_listenersock";
-static const char long_gen36[] = "bad listener sock";
-static const char short_gen37[] = "**bad_set";
-static const char long_gen37[] = "bad set parameter";
-static const char short_gen38[] = "**bad_sock";
-static const char long_gen38[] = "bad sock";
-static const char short_gen39[] = "**badbusinesscard";
-static const char long_gen39[] = "Invalid business card";
-static const char short_gen40[] = "**badcase";
-static const char long_gen40[] = "INTERNAL ERROR: unexpected value in case statement";
-static const char short_gen41[] = "**badportrange";
-static const char long_gen41[] = "MPICH_PORT_RANGE - invalid range specified";
-static const char short_gen42[] = "**base";
-static const char long_gen42[] = "Invalid base address";
-static const char short_gen43[] = "**bind";
-static const char long_gen43[] = " Unable to bind socket to address";
-static const char short_gen44[] = "**bindportrange";
-static const char long_gen44[] = " Unable to bind socket to port range";
-static const char short_gen45[] = "**blcr_mod";
-static const char long_gen45[] = "BLCR kernel module not present";
-static const char short_gen46[] = "**bsendbufsmall";
-static const char long_gen46[] = "Buffer size is smaller than MPI_BSEND_OVERHEAD";
-static const char short_gen47[] = "**bsendpending";
-static const char long_gen47[] = "Internal error - completion of Bsend requests that were deferred because of resource limits is not implemented";
-static const char short_gen48[] = "**buf_inplace";
-static const char long_gen48[] = "buffer cannot be MPI_IN_PLACE";
-static const char short_gen49[] = "**bufalias";
-static const char long_gen49[] = "Buffers must not be aliased";
-static const char short_gen50[] = "**bufbsend";
-static const char long_gen50[] = "Insufficient space in Bsend buffer";
-static const char short_gen51[] = "**bufexists";
-static const char long_gen51[] = "Buffer already attached with MPI_BUFFER_ATTACH.";
-static const char short_gen52[] = "**buffer";
-static const char long_gen52[] = "Invalid buffer pointer";
-static const char short_gen53[] = "**bufnull";
-static const char long_gen53[] = "Null buffer pointer";
-static const char short_gen54[] = "**buscard";
-static const char long_gen54[] = "unable to create a business card";
-static const char short_gen55[] = "**buscard_len";
-static const char long_gen55[] = "no space left in the business card to add a parameter";
-static const char short_gen56[] = "**cancelunknown";
-static const char long_gen56[] = "Attempt to cancel an unknown type of request";
-static const char short_gen57[] = "**cartcoordinvalid";
-static const char long_gen57[] = "Cartesian coordinate is invalid (not in range)";
-static const char short_gen58[] = "**cartdim";
-static const char long_gen58[] = "Size of Cartesian grid is larger than the size of the communicator";
-static const char short_gen59[] = "**catindex";
-static const char long_gen59[] = " Category index is invalid";
-static const char short_gen60[] = "**ch3|badmsgtype";
-static const char long_gen60[] = "request contained an invalid message type";
-static const char short_gen61[] = "**ch3|badreqtype";
-static const char long_gen61[] = "request contained an invalid request type";
-static const char short_gen62[] = "**ch3|cancelreq";
-static const char long_gen62[] = "failure occurred while sending remote cancellation request packet";
-static const char short_gen63[] = "**ch3|cancelresp";
-static const char long_gen63[] = "failure occurred while attempting to send cancel response packet";
-static const char short_gen64[] = "**ch3|cancelrndv";
-static const char long_gen64[] = "failure occurred while performing local cancellation of a rendezvous message";
-static const char short_gen65[] = "**ch3|ch3_init";
-static const char long_gen65[] = "channel initialization failed";
-static const char short_gen66[] = "**ch3|close_progress";
-static const char long_gen66[] = "an error occurred while the device was waiting for all open connections to close";
-static const char short_gen67[] = "**ch3|conn_parent";
-static const char long_gen67[] = "spawned process group was unable to connect back to the parent";
-static const char short_gen68[] = "**ch3|ctspkt";
-static const char long_gen68[] = "failure occurred while attempting to send CTS packet";
-static const char short_gen69[] = "**ch3|eagermsg";
-static const char long_gen69[] = "failure occurred while attempting to send an eager message";
-static const char short_gen70[] = "**ch3|get_parent_port";
-static const char long_gen70[] = "spawn process group was unable to obtain parent port name from the channel";
-static const char short_gen71[] = "**ch3|loadrecviov";
-static const char long_gen71[] = "failure occurred while loading the receive I/O vector";
-static const char short_gen72[] = "**ch3|loadsendiov";
-static const char long_gen72[] = "failure occurred while loading the send I/O vector";
-static const char short_gen73[] = "**ch3|nopktcontainermem";
-static const char long_gen73[] = "failed to allocate memory for a packet reorder container";
-static const char short_gen74[] = "**ch3|ooocancelreq";
-static const char long_gen74[] = "UNIMPLEMENTED: unable to process out-of-order cancellation requests";
-static const char short_gen75[] = "**ch3|pktarraytoosmall";
-static const char long_gen75[] = " Size of the array of packet handlers is too small";
-static const char short_gen76[] = "**ch3|pktordered";
-static const char long_gen76[] = "failure occurred while processing a reordered packet";
-static const char short_gen77[] = "**ch3|pmi_finalize";
-static const char long_gen77[] = "PMI_Finalize failed";
-static const char short_gen78[] = "**ch3|postrecv";
-static const char long_gen78[] = "failure occurred while posting a receive for message data";
-static const char short_gen79[] = "**ch3|rma_msg";
-static const char long_gen79[] = "RMA message operation failed";
-static const char short_gen80[] = "**ch3|rmamsg";
-static const char long_gen80[] = "failure occurred while attempting to send an RMA message";
-static const char short_gen81[] = "**ch3|rtspkt";
-static const char long_gen81[] = "failure occurred while attempting to send RTS packet";
-static const char short_gen82[] = "**ch3|send_close_ack";
-static const char long_gen82[] = "an error occurred when the device attempted to acknowledge the closing of a connection";
-static const char short_gen83[] = "**ch3|senddata";
-static const char long_gen83[] = "failure occurred while attempting to send message data";
-static const char short_gen84[] = "**ch3|sock|accept";
-static const char long_gen84[] = "[ch3:sock] accepting a new connection failed";
-static const char short_gen85[] = "**ch3|sock|addrinuse";
-static const char long_gen85[] = "[ch3:sock] tcp port already in use";
-static const char short_gen86[] = "**ch3|sock|badhost";
-static const char long_gen86[] = "[ch3:soc] invalid host description";
-static const char short_gen87[] = "**ch3|sock|badpacket";
-static const char long_gen87[] = "[ch3:sock] received packet of unknow type";
-static const char short_gen88[] = "**ch3|sock|badsock";
-static const char long_gen88[] = "[ch3:sock] internal error - bad sock";
-static const char short_gen89[] = "**ch3|sock|connalloc";
-static const char long_gen89[] = "[ch3:sock] unable to allocate an internal connection structure";
-static const char short_gen90[] = "**ch3|sock|connclose";
-static const char long_gen90[] = "[ch3:sock] active connection unexpectedly closed";
-static const char short_gen91[] = "**ch3|sock|connectionfailed";
-static const char long_gen91[] = "Connection failed for virtual channel";
-static const char short_gen92[] = "**ch3|sock|connfailed";
-static const char long_gen92[] = "[ch3:sock] failed to connnect to remote process";
-static const char short_gen93[] = "**ch3|sock|connrefused";
-static const char long_gen93[] = "[ch3:sock] connection refused";
-static const char short_gen94[] = "**ch3|sock|connterm";
-static const char long_gen94[] = "[ch3:sock] active connection unexpectedly terminated";
-static const char short_gen95[] = "**ch3|sock|failure";
-static const char long_gen95[] = "[ch3:sock] unknown failure";
-static const char short_gen96[] = "**ch3|sock|handle_sock_event";
-static const char long_gen96[] = "an error occurred while handling an event returned by MPIDU_Sock_Wait()";
-static const char short_gen97[] = "**ch3|sock|hostlookup";
-static const char long_gen97[] = "[ch3:sock] hostname lookup failed";
-static const char short_gen98[] = "**ch3|sock|immedread";
-static const char long_gen98[] = "immediate read operation failed";
-static const char short_gen99[] = "**ch3|sock|immedwrite";
-static const char long_gen99[] = "immediate write operation failed";
-static const char short_gen100[] = "**ch3|sock|open_lrecv_data";
-static const char long_gen100[] = "[ch3:sock] failed to handle open lrecv data packet";
-static const char short_gen101[] = "**ch3|sock|openlsend";
-static const char long_gen101[] = "[ch3:sock] failed to handle open lsend packet";
-static const char short_gen102[] = "**ch3|sock|postconnect";
-static const char long_gen102[] = "[ch3:sock] post connect failed";
-static const char short_gen103[] = "**ch3|sock|postread";
-static const char long_gen103[] = "attempt to post a read operation failed";
-static const char short_gen104[] = "**ch3|sock|postwrite";
-static const char long_gen104[] = "attempt to post a write operation failed";
-static const char short_gen105[] = "**ch3|sock|scconnaccept";
-static const char long_gen105[] = "[ch3:sock] failed to handle connection accept packet";
-static const char short_gen106[] = "**ch3|sock|scopenresp";
-static const char long_gen106[] = "[ch3:sock] failed to handle open response packet";
-static const char short_gen107[] = "**ch3|sock|writefailed";
-static const char long_gen107[] = "Write to socket failed";
-static const char short_gen108[] = "**ch3|syncack";
-static const char long_gen108[] = "failure occurred while attempting to send eager synchronization packet";
-static const char short_gen109[] = "**ch3|unhandled_connection_state";
-static const char long_gen109[] = "encountered an unexpected connection state";
-static const char short_gen110[] = "**ckptpkt";
-static const char long_gen110[] = "Failed to send checkpoint marker packet";
-static const char short_gen111[] = "**close";
-static const char long_gen111[] = "close of socket failed";
-static const char short_gen112[] = "**closesocket";
-static const char long_gen112[] = "closesocket failed";
-static const char short_gen113[] = "**coll_fail";
-static const char long_gen113[] = "Failure during collective";
-static const char short_gen114[] = "**collective_size_mismatch";
-static const char long_gen114[] = "message sizes do not match across processes in the collective routine";
-static const char short_gen115[] = "**comm";
-static const char long_gen115[] = "Invalid communicator";
-static const char short_gen116[] = "**comm_fail";
-static const char long_gen116[] = "Communication error";
-static const char short_gen117[] = "**comm_fail_conn";
-static const char long_gen117[] = "Communication error during connect sequence";
-static const char short_gen118[] = "**commnotinter";
-static const char long_gen118[] = "An intercommunicator is required but an intracommunicator was provided.";
-static const char short_gen119[] = "**commnotintra";
-static const char long_gen119[] = "An intracommunicator is required but an intercommunicator was provided.";
-static const char short_gen120[] = "**commnull";
-static const char long_gen120[] = "Null communicator";
-static const char short_gen121[] = "**commperm";
-static const char long_gen121[] = "Cannot free permanent communicator";
-static const char short_gen122[] = "**cond_create";
-static const char long_gen122[] = "MPID_Thread_cond_create failed";
-static const char short_gen123[] = "**contentspredef";
-static const char long_gen123[] = "Named predefined datatypes are not permitted in MPI_Type_get_contents";
-static const char short_gen124[] = "**conversion";
-static const char long_gen124[] = "An error occurred in a user-defined data conversion function";
-static const char short_gen125[] = "**cookiepkt";
-static const char long_gen125[] = "failure occurred while attempting to send COOKIE packet";
-static const char short_gen126[] = "**count";
-static const char long_gen126[] = "Invalid count";
-static const char short_gen127[] = "**countneg";
-static const char long_gen127[] = "Negative count";
-static const char short_gen128[] = "**ctspkt";
-static const char long_gen128[] = "failure occurred while attempting to send CTS packet";
-static const char short_gen129[] = "**cvarhandle";
-static const char long_gen129[] = " Control variable handle is invalid";
-static const char short_gen130[] = "**cvarhandlenull";
-static const char long_gen130[] = " Control variable handle is NULL";
-static const char short_gen131[] = "**cvarindex";
-static const char long_gen131[] = " Control variable index is invalid";
-static const char short_gen132[] = "**darrayblock";
-static const char long_gen132[] = "Value of m must be positive for block(m) distribution";
-static const char short_gen133[] = "**darrayblock2";
-static const char long_gen133[] = "m * nprocs is less than array_size and is not valid for block(m) distribution (optional arguments: {m*nprocs}, {array_size} (int))";
-static const char short_gen134[] = "**darraycyclic";
-static const char long_gen134[] = "Value of m must be positive for a cyclic(m) distribution";
-static const char short_gen135[] = "**darraydist";
-static const char long_gen135[] = "For MPI_DISTRIBUTE_NONE, the number of processes in that dimension of the grid must be 1";
-static const char short_gen136[] = "**darrayoverflow";
-static const char long_gen136[] = "Cannot use an array of this size unless the MPI implementation defines a 64-bit MPI_Aint";
-static const char short_gen137[] = "**darrayunknown";
-static const char long_gen137[] = "Unknown distribution type ";
-static const char short_gen138[] = "**datarepextent";
-static const char long_gen138[] = "Invalid extent callback";
-static const char short_gen139[] = "**datarepname";
-static const char long_gen139[] = "Invalid datarep name";
-static const char short_gen140[] = "**datarepunsupported";
-static const char long_gen140[] = "Unsupported datarep passed to MPI_File_set_view ";
-static const char short_gen141[] = "**datarepused";
-static const char long_gen141[] = "The requested datarep name has already been specified to MPI_REGISTER_DATAREP";
-static const char short_gen142[] = "**desc_len";
-static const char long_gen142[] = "host description buffer too small";
-static const char short_gen143[] = "**detach_shar_mem";
-static const char long_gen143[] = "unable to detach shared memory";
-static const char short_gen144[] = "**dev|pg_create";
-static const char long_gen144[] = "unable to create a new process group";
-static const char short_gen145[] = "**dev|pg_finalize|list_not_empty";
-static const char long_gen145[] = "process group list was not empty";
-static const char short_gen146[] = "**dev|pg_init";
-static const char long_gen146[] = "unable to initialize the process group management module";
-static const char short_gen147[] = "**dev|pg_not_found";
-static const char long_gen147[] = "the specified process group object could not be located";
-static const char short_gen148[] = "**dev|selfsenddeadlock";
-static const char long_gen148[] = "DEADLOCK: attempting to send a message to the local process without a prior matching receive";
-static const char short_gen149[] = "**dev|vcrt_create";
-static const char long_gen149[] = "failed to a create VCRT";
-static const char short_gen150[] = "**dims";
-static const char long_gen150[] = "Invalid dimension argument";
-static const char short_gen151[] = "**dimsmany";
-static const char long_gen151[] = "Number of dimensions is too large ";
-static const char short_gen152[] = "**dimspartition";
-static const char long_gen152[] = "Cannot partition nodes as requested ";
-static const char short_gen153[] = "**dimszero";
-static const char long_gen153[] = "Communicator associated with zero-dimensional cartesian topology";
-static const char short_gen154[] = "**donepkt";
-static const char long_gen154[] = "failure occurred while attempting to send DONE packet";
-static const char short_gen155[] = "**drconvnotsupported";
-static const char long_gen155[] = "Read and Write datarep conversions are currently not supported by MPI-IO";
-static const char short_gen156[] = "**dtype";
-static const char long_gen156[] = "Invalid datatype";
-static const char short_gen157[] = "**dtypecommit";
-static const char long_gen157[] = "Datatype has not been committed ";
-static const char short_gen158[] = "**dtypemismatch";
-static const char long_gen158[] = "Receiving data with a datatype whose signature does not match that of the sending datatype.";
-static const char short_gen159[] = "**dtypenull";
-static const char long_gen159[] = "Null datatype";
-static const char short_gen160[] = "**dtypeperm";
-static const char long_gen160[] = "Cannot free permanent data type ";
-static const char short_gen161[] = "**duphandle";
-static const char long_gen161[] = "unable to duplicate a handle";
-static const char short_gen162[] = "**dupprocesses";
-static const char long_gen162[] = "Local and remote groups in MPI_Intercomm_create must not contain the same processes";
-static const char short_gen163[] = "**dynamic_node_ids";
-static const char long_gen163[] = " Node information for dynamic processes currently is not implemented";
-static const char short_gen164[] = "**edgeoutrange";
-static const char long_gen164[] = "Edge index in graph topology is out of range";
-static const char short_gen165[] = "**enumhandle";
-static const char long_gen165[] = " Enum handle is invalid";
-static const char short_gen166[] = "**enumhandlenull";
-static const char long_gen166[] = " Enum handle is NULL";
-static const char short_gen167[] = "**eqdropped";
-static const char long_gen167[] = "Event queue overflowed";
-static const char short_gen168[] = "**errhandler";
-static const char long_gen168[] = "Invalid errhandler";
-static const char short_gen169[] = "**errhandlernull";
-static const char long_gen169[] = "Null errhandler ";
-static const char short_gen170[] = "**errhandnotfile";
-static const char long_gen170[] = "Error handler is not a file error handler";
-static const char short_gen171[] = "**errhandnotwin";
-static const char long_gen171[] = "Error handler is not a win error handler";
-static const char short_gen172[] = "**exceeded_connect_tries";
-static const char long_gen172[] = "Unable to establish connection to process";
-static const char short_gen173[] = "**f90typecomplexnone";
-static const char long_gen173[] = " No complex type with the requested range and/or precision is available";
-static const char short_gen174[] = "**f90typeintnone";
-static const char long_gen174[] = " No integer type with the requested range is available";
-static const char short_gen175[] = "**f90typerealnone";
-static const char long_gen175[] = " No real type with the requested range and/or precision is available";
-static const char short_gen176[] = "**f90typetoomany";
-static const char long_gen176[] = "Too many requests for unnamed, predefined f90 types";
-static const char short_gen177[] = "**fail";
-static const char long_gen177[] = "";
-static const char short_gen178[] = "**failure_pending";
-static const char long_gen178[] = "Request pending due to failure";
-static const char short_gen179[] = "**file";
-static const char long_gen179[] = "Invalid MPI_File";
-static const char short_gen180[] = "**fileaccess";
-static const char long_gen180[] = "Access denied to file";
-static const char short_gen181[] = "**fileamode";
-static const char long_gen181[] = "Invalid amode value in MPI_File_open ";
-static const char short_gen182[] = "**fileamodediff";
-static const char long_gen182[] = "amode must be the same on all processors";
-static const char short_gen183[] = "**fileamodeone";
-static const char long_gen183[] = "Exactly one of MPI_MODE_RDONLY, MPI_MODE_WRONLY, or MPI_MODE_RDWR must be specified";
-static const char short_gen184[] = "**fileamoderead";
-static const char long_gen184[] = "Cannot use MPI_MODE_CREATE or MPI_MODE_EXCL with MPI_MODE_RDONLY ";
-static const char short_gen185[] = "**fileamodeseq";
-static const char long_gen185[] = "Cannot specify MPI_MODE_SEQUENTIAL with MPI_MODE_RDWR";
-static const char short_gen186[] = "**fileexist";
-static const char long_gen186[] = "File exists";
-static const char short_gen187[] = "**fileinuse";
-static const char long_gen187[] = "File in use by some process";
-static const char short_gen188[] = "**filename";
-static const char long_gen188[] = "Invalid file name";
-static const char short_gen189[] = "**filenamedir";
-static const char long_gen189[] = "Invalid or missing directory";
-static const char short_gen190[] = "**filenamelong";
-static const char long_gen190[] = "Pathname too long";
-static const char short_gen191[] = "**filenoexist";
-static const char long_gen191[] = "File does not exist";
-static const char short_gen192[] = "**filenospace";
-static const char long_gen192[] = "Not enough space for file ";
-static const char short_gen193[] = "**fileopunsupported";
-static const char long_gen193[] = "Unsupported file operation ";
-static const char short_gen194[] = "**filequota";
-static const char long_gen194[] = "Quota exceeded for files";
-static const char short_gen195[] = "**filerdonly";
-static const char long_gen195[] = "Read-only file or filesystem name";
-static const char short_gen196[] = "**flag";
-static const char long_gen196[] = "invalid flag parameter";
-static const char short_gen197[] = "**ftb_connect";
-static const char long_gen197[] = "FTB_Connect failed";
-static const char short_gen198[] = "**ftb_declare_publishable_events";
-static const char long_gen198[] = "FTB_Declare_publishable_events failed";
-static const char short_gen199[] = "**gethostbyname";
-static const char long_gen199[] = "gethostbyname failed";
-static const char short_gen200[] = "**getinfo";
-static const char long_gen200[] = "getaddrinfo failed";
-static const char short_gen201[] = "**getsockname";
-static const char long_gen201[] = "getsockname failed";
-static const char short_gen202[] = "**getsockopt";
-static const char long_gen202[] = "getsockopt failed";
-static const char short_gen203[] = "**graphnnodes";
-static const char long_gen203[] = "Number of graph nodes exceeds size of communicator.";
-static const char short_gen204[] = "**group";
-static const char long_gen204[] = "Invalid group";
-static const char short_gen205[] = "**groupnotincomm";
-static const char long_gen205[] = "Specified group is not within the communicator";
-static const char short_gen206[] = "**groupnull";
-static const char long_gen206[] = "Null group";
-static const char short_gen207[] = "**groupperm";
-static const char long_gen207[] = "Cannot free permanent group";
-static const char short_gen208[] = "**hcoll_wrong_arg";
-static const char long_gen208[] = "Error in hcolrte api: wrong null argument";
-static const char short_gen209[] = "**iface_notfound";
-static const char long_gen209[] = "The network interface specified in MPIR_CVAR_CH3_NETWORK_IFACE was not found.";
-static const char short_gen210[] = "**ifname_and_hostname";
-static const char long_gen210[] = "Only one of MPIR_CVAR_CH3_INTERFACE_HOSTNAME and MPIR_CVAR_CH3_NETWORK_IFACE environment variables are allowed, but both were set.";
-static const char short_gen211[] = "**ifnameinvalid";
-static const char long_gen211[] = "Interface name was invalid in call to inet_pton";
-static const char short_gen212[] = "**indexneg";
-static const char long_gen212[] = "Index value in graph topology must be nonnegative";
-static const char short_gen213[] = "**indexnonmonotone";
-static const char long_gen213[] = "Index values in graph topology must be monotone nondecreasing";
-static const char short_gen214[] = "**inet_addr";
-static const char long_gen214[] = " inet_addr failed";
-static const char short_gen215[] = "**info";
-static const char long_gen215[] = "Invalid MPI_Info";
-static const char short_gen216[] = "**infohintparse";
-static const char long_gen216[] = "Unable to parse info hint";
-static const char short_gen217[] = "**infokey";
-static const char long_gen217[] = "Invalid key for MPI_Info ";
-static const char short_gen218[] = "**infokeyempty";
-static const char long_gen218[] = "Empty or blank key ";
-static const char short_gen219[] = "**infokeylong";
-static const char long_gen219[] = "Key is too long";
-static const char short_gen220[] = "**infokeynull";
-static const char long_gen220[] = "Null key";
-static const char short_gen221[] = "**infonkey";
-static const char long_gen221[] = "Requested nth key does not exist";
-static const char short_gen222[] = "**infonokey";
-static const char long_gen222[] = "MPI_Info key is not defined ";
-static const char short_gen223[] = "**infonull";
-static const char long_gen223[] = "Null MPI_Info ";
-static const char short_gen224[] = "**infoval";
-static const char long_gen224[] = "Invalid MPI_Info value ";
-static const char short_gen225[] = "**infovallong";
-static const char long_gen225[] = "Value is too long ";
-static const char short_gen226[] = "**infovalnull";
-static const char long_gen226[] = "Null value";
-static const char short_gen227[] = "**init_buscard";
-static const char long_gen227[] = "failed to get my business card";
-static const char short_gen228[] = "**init_progress";
-static const char long_gen228[] = "progress_init failed";
-static const char short_gen229[] = "**init_vcrt";
-static const char long_gen229[] = "failed to create VCRT";
-static const char short_gen230[] = "**initialized";
-static const char long_gen230[] = "MPI not initialized. Call MPI_Init or MPI_Init_thread first";
-static const char short_gen231[] = "**inittwice";
-static const char long_gen231[] = "Cannot call MPI_INIT or MPI_INIT_THREAD more than once";
-static const char short_gen232[] = "**inpending";
-static const char long_gen232[] = "Pending request (no error)";
-static const char short_gen233[] = "**instatus";
-static const char long_gen233[] = "See the MPI_ERROR field in MPI_Status for the error code";
-static const char short_gen234[] = "**intern";
-static const char long_gen234[] = "Internal MPI error!";
-static const char short_gen235[] = "**inttoosmall";
-static const char long_gen235[] = "An address does not fit into a Fortran INTEGER. Use MPI_Get_address instead";
-static const char short_gen236[] = "**invalid_handle";
-static const char long_gen236[] = "invalid handle";
-static const char short_gen237[] = "**invalid_knem_status";
-static const char long_gen237[] = "Invalid knem status value";
-static const char short_gen238[] = "**invalid_netmod";
-static const char long_gen238[] = "Invalid netmod specified";
-static const char short_gen239[] = "**invalid_refcount";
-static const char long_gen239[] = "invalid reference count";
-static const char short_gen240[] = "**invalidpkt";
-static const char long_gen240[] = " Invalid packet type";
-static const char short_gen241[] = "**io";
-static const char long_gen241[] = "Other I/O error ";
-static const char short_gen242[] = "**ioRMWrdwr";
-static const char long_gen242[] = "Must open file with MPI_MODE_RDWR for read-modify-write";
-static const char short_gen243[] = "**ioagnomatch";
-static const char long_gen243[] = "No aggregators match";
-static const char short_gen244[] = "**ioamodeseq";
-static const char long_gen244[] = "Cannot use this function when the file is opened with amode MPI_MODE_SEQUENTIAL ";
-static const char short_gen245[] = "**iobadcount";
-static const char long_gen245[] = "Invalid count argument";
-static const char short_gen246[] = "**iobaddisp";
-static const char long_gen246[] = "Invalid displacement argument";
-static const char short_gen247[] = "**iobadfh";
-static const char long_gen247[] = "Invalid file handle";
-static const char short_gen248[] = "**iobadoffset";
-static const char long_gen248[] = "Invalid offset argument";
-static const char short_gen249[] = "**iobadsize";
-static const char long_gen249[] = "Invalid size argument";
-static const char short_gen250[] = "**iobadwhence";
-static const char long_gen250[] = "Invalid whence argument";
-static const char short_gen251[] = "**iocp";
-static const char long_gen251[] = "unable to create an I/O completion port";
-static const char short_gen252[] = "**ioctl";
-static const char long_gen252[] = "ioctl failed";
-static const char short_gen253[] = "**ioctlsocket";
-static const char long_gen253[] = " ioctl on socket failed";
-static const char short_gen254[] = "**iodatarepnomem";
-static const char long_gen254[] = "User must allocate memory for datarep";
-static const char short_gen255[] = "**iodispifseq";
-static const char long_gen255[] = "disp must be set to MPI_DISPLACEMENT_CURRENT since file was opened with MPI_MODE_SEQUENTIAL";
-static const char short_gen256[] = "**ioetype";
-static const char long_gen256[] = "Only an integral number of etypes can be accessed";
-static const char short_gen257[] = "**iofiletype";
-static const char long_gen257[] = "Filetype must be constructed out of one or more etypes";
-static const char short_gen258[] = "**iofstypeunsupported";
-static const char long_gen258[] = "Specified filesystem is not available";
-static const char short_gen259[] = "**ioneedrd";
-static const char long_gen259[] = "Read access is required to this file";
-static const char short_gen260[] = "**ionegoffset";
-static const char long_gen260[] = "Negative offset argument";
-static const char short_gen261[] = "**iopreallocrdwr";
-static const char long_gen261[] = "Must open file with MPI_MODE_RDWR to preallocate disk space";
-static const char short_gen262[] = "**iordonly";
-static const char long_gen262[] = "Cannot write to a file opened with amode MPI_MODE_RDONLY";
-static const char short_gen263[] = "**iosequnsupported";
-static const char long_gen263[] = "MPI_MODE_SEQUENTIAL not supported on this file system";
-static const char short_gen264[] = "**iosharedfailed";
-static const char long_gen264[] = "Could not access shared file pointer";
-static const char short_gen265[] = "**iosharedunsupported";
-static const char long_gen265[] = "Shared file pointers not supported";
-static const char short_gen266[] = "**iosplitcoll";
-static const char long_gen266[] = "Only one active split collective I/O operation is allowed per file handle";
-static const char short_gen267[] = "**iosplitcollnone";
-static const char long_gen267[] = "No split collective I/O operation is active";
-static const char short_gen268[] = "**iowronly";
-static const char long_gen268[] = "Cannot read from a file opened with amode MPI_MODE_WRONLY";
-static const char short_gen269[] = "**iowsrc";
-static const char long_gen269[] = "Unable to read from the file as part of a strided write operation";
-static const char short_gen270[] = "**iowswc";
-static const char long_gen270[] = "Unable to write to the file as part of a strided write operation";
-static const char short_gen271[] = "**itemindex";
-static const char long_gen271[] = " Enum item index is invalid";
-static const char short_gen272[] = "**join_portname";
-static const char long_gen272[] = "local and remote port names are the same";
-static const char short_gen273[] = "**join_recv";
-static const char long_gen273[] = "recv from the socket failed";
-static const char short_gen274[] = "**join_send";
-static const char long_gen274[] = "send on the socket failed";
-static const char short_gen275[] = "**keyval";
-static const char long_gen275[] = "Invalid keyval";
-static const char short_gen276[] = "**keyvalinvalid";
-static const char long_gen276[] = "Attribute key was MPI_KEYVAL_INVALID";
-static const char short_gen277[] = "**keyvalobj";
-static const char long_gen277[] = "Keyval was not defined for the supplied object";
-static const char short_gen278[] = "**listen";
-static const char long_gen278[] = "listen failed";
-static const char short_gen279[] = "**llc_poll";
-static const char long_gen279[] = "llc_poll failed";
-static const char short_gen280[] = "**lockassertval";
-static const char long_gen280[] = "Invalid assert argument passed to MPI_Win_lock";
-static const char short_gen281[] = "**locktype";
-static const char long_gen281[] = "Invalid lock type";
-static const char short_gen282[] = "**lseek";
-static const char long_gen282[] = "lseek failed";
-static const char short_gen283[] = "**memcpyalias";
-static const char long_gen283[] = "memcpy arguments alias each other";
-static const char short_gen284[] = "**mkfifo";
-static const char long_gen284[] = "mkfifo failed";
-static const char short_gen285[] = "**mkstemp";
-static const char long_gen285[] = "mkstemp failed";
-static const char short_gen286[] = "**mmap";
-static const char long_gen286[] = "unable to map memory, mmap failed";
-static const char short_gen287[] = "**mpi_abort";
-static const char long_gen287[] = "MPI_Abort failed";
-static const char short_gen288[] = "**mpi_accumulate";
-static const char long_gen288[] = "MPI_Accumulate failed";
-static const char short_gen289[] = "**mpi_add_error_class";
-static const char long_gen289[] = "MPI_Add_error_class failed";
-static const char short_gen290[] = "**mpi_add_error_code";
-static const char long_gen290[] = "MPI_Add_error_code failed";
-static const char short_gen291[] = "**mpi_add_error_string";
-static const char long_gen291[] = "MPI_Add_error_string failed";
-static const char short_gen292[] = "**mpi_address";
-static const char long_gen292[] = "MPI_Address failed";
-static const char short_gen293[] = "**mpi_allgather";
-static const char long_gen293[] = "MPI_Allgather failed";
-static const char short_gen294[] = "**mpi_allgatherv";
-static const char long_gen294[] = "MPI_Allgatherv failed";
-static const char short_gen295[] = "**mpi_alloc_mem";
-static const char long_gen295[] = "MPI_Alloc_mem failed";
-static const char short_gen296[] = "**mpi_allreduce";
-static const char long_gen296[] = "MPI_Allreduce failed";
-static const char short_gen297[] = "**mpi_alltoall";
-static const char long_gen297[] = "MPI_Alltoall failed";
-static const char short_gen298[] = "**mpi_alltoallv";
-static const char long_gen298[] = "MPI_Alltoallv failed";
-static const char short_gen299[] = "**mpi_alltoallw";
-static const char long_gen299[] = "MPI_Alltoallw failed";
-static const char short_gen300[] = "**mpi_attr_delete";
-static const char long_gen300[] = "MPI_Attr_delete failed";
-static const char short_gen301[] = "**mpi_attr_get";
-static const char long_gen301[] = "MPI_Attr_get failed";
-static const char short_gen302[] = "**mpi_attr_put";
-static const char long_gen302[] = "MPI_Attr_put failed";
-static const char short_gen303[] = "**mpi_barrier";
-static const char long_gen303[] = "MPI_Barrier failed";
-static const char short_gen304[] = "**mpi_bcast";
-static const char long_gen304[] = "MPI_Bcast failed";
-static const char short_gen305[] = "**mpi_bsend";
-static const char long_gen305[] = "MPI_Bsend failed";
-static const char short_gen306[] = "**mpi_bsend_init";
-static const char long_gen306[] = "MPI_Bsend_init failed";
-static const char short_gen307[] = "**mpi_buffer_attach";
-static const char long_gen307[] = "MPI_Buffer_attach failed";
-static const char short_gen308[] = "**mpi_buffer_detach";
-static const char long_gen308[] = "MPI_Buffer_detach failed";
-static const char short_gen309[] = "**mpi_cancel";
-static const char long_gen309[] = "MPI_Cancel failed";
-static const char short_gen310[] = "**mpi_cart_coords";
-static const char long_gen310[] = "MPI_Cart_coords failed";
-static const char short_gen311[] = "**mpi_cart_create";
-static const char long_gen311[] = "MPI_Cart_create failed";
-static const char short_gen312[] = "**mpi_cart_get";
-static const char long_gen312[] = "MPI_Cart_get failed";
-static const char short_gen313[] = "**mpi_cart_map";
-static const char long_gen313[] = "MPI_Cart_map failed";
-static const char short_gen314[] = "**mpi_cart_rank";
-static const char long_gen314[] = "MPI_Cart_rank failed";
-static const char short_gen315[] = "**mpi_cart_shift";
-static const char long_gen315[] = "MPI_Cart_shift failed";
-static const char short_gen316[] = "**mpi_cart_sub";
-static const char long_gen316[] = "MPI_Cart_sub failed";
-static const char short_gen317[] = "**mpi_cartdim_get";
-static const char long_gen317[] = "MPI_Cartdim_get failed";
-static const char short_gen318[] = "**mpi_close_port";
-static const char long_gen318[] = "MPI_Close_port failed";
-static const char short_gen319[] = "**mpi_comm_accept";
-static const char long_gen319[] = "MPI_Comm_accept failed";
-static const char short_gen320[] = "**mpi_comm_call_errhandler";
-static const char long_gen320[] = "MPI_Comm_call_errhandler failed";
-static const char short_gen321[] = "**mpi_comm_compare";
-static const char long_gen321[] = "MPI_Comm_compare failed";
-static const char short_gen322[] = "**mpi_comm_connect";
-static const char long_gen322[] = "MPI_Comm_connect failed";
-static const char short_gen323[] = "**mpi_comm_create";
-static const char long_gen323[] = "MPI_Comm_create failed";
-static const char short_gen324[] = "**mpi_comm_create_errhandler";
-static const char long_gen324[] = "MPI_Comm_create_errhandler failed";
-static const char short_gen325[] = "**mpi_comm_create_group";
-static const char long_gen325[] = "MPI_Comm_create_group failed";
-static const char short_gen326[] = "**mpi_comm_create_keyval";
-static const char long_gen326[] = "MPI_Comm_create_keyval failed";
-static const char short_gen327[] = "**mpi_comm_delete_attr";
-static const char long_gen327[] = "MPI_Comm_delete_attr failed";
-static const char short_gen328[] = "**mpi_comm_disconnect";
-static const char long_gen328[] = "MPI_Comm_disconnect failed";
-static const char short_gen329[] = "**mpi_comm_dup";
-static const char long_gen329[] = "MPI_Comm_dup failed";
-static const char short_gen330[] = "**mpi_comm_dup_with_info";
-static const char long_gen330[] = "MPI_Comm_dup_with_info failed";
-static const char short_gen331[] = "**mpi_comm_free";
-static const char long_gen331[] = "MPI_Comm_free failed";
-static const char short_gen332[] = "**mpi_comm_free_keyval";
-static const char long_gen332[] = "MPI_Comm_free_keyval failed";
-static const char short_gen333[] = "**mpi_comm_get_attr";
-static const char long_gen333[] = "MPI_Comm_get_attr failed";
-static const char short_gen334[] = "**mpi_comm_get_errhandler";
-static const char long_gen334[] = "MPI_Comm_get_errhandler failed";
-static const char short_gen335[] = "**mpi_comm_get_info";
-static const char long_gen335[] = "MPI_Comm_get_info failed";
-static const char short_gen336[] = "**mpi_comm_get_name";
-static const char long_gen336[] = "MPI_Comm_get_name failed";
-static const char short_gen337[] = "**mpi_comm_get_parent";
-static const char long_gen337[] = "MPI_Comm_get_parent failed";
-static const char short_gen338[] = "**mpi_comm_group";
-static const char long_gen338[] = "MPI_Comm_group failed";
-static const char short_gen339[] = "**mpi_comm_idup";
-static const char long_gen339[] = " MPI_Comm_idup failed";
-static const char short_gen340[] = "**mpi_comm_join";
-static const char long_gen340[] = "MPI_Comm_join failed";
-static const char short_gen341[] = "**mpi_comm_rank";
-static const char long_gen341[] = "MPI_Comm_rank failed";
-static const char short_gen342[] = "**mpi_comm_remote_group";
-static const char long_gen342[] = "MPI_Comm_remote_group failed";
-static const char short_gen343[] = "**mpi_comm_remote_size";
-static const char long_gen343[] = "MPI_Comm_remote_size failed";
-static const char short_gen344[] = "**mpi_comm_set_attr";
-static const char long_gen344[] = "MPI_Comm_set_attr failed";
-static const char short_gen345[] = "**mpi_comm_set_errhandler";
-static const char long_gen345[] = "MPI_Comm_set_errhandler failed";
-static const char short_gen346[] = "**mpi_comm_set_info";
-static const char long_gen346[] = "MPI_Comm_set_info failed";
-static const char short_gen347[] = "**mpi_comm_set_name";
-static const char long_gen347[] = "MPI_Comm_set_name failed";
-static const char short_gen348[] = "**mpi_comm_size";
-static const char long_gen348[] = "MPI_Comm_size failed";
-static const char short_gen349[] = "**mpi_comm_spawn";
-static const char long_gen349[] = "MPI_Comm_spawn failed";
-static const char short_gen350[] = "**mpi_comm_spawn_multiple";
-static const char long_gen350[] = "MPI_Comm_spawn_multiple failed";
-static const char short_gen351[] = "**mpi_comm_split";
-static const char long_gen351[] = "MPI_Comm_split failed";
-static const char short_gen352[] = "**mpi_comm_test_inter";
-static const char long_gen352[] = "MPI_Comm_test_inter failed";
-static const char short_gen353[] = "**mpi_compare_and_swap";
-static const char long_gen353[] = " MPI_Compare_and_swap failed";
-static const char short_gen354[] = "**mpi_dims_create";
-static const char long_gen354[] = "MPI_Dims_create failed";
-static const char short_gen355[] = "**mpi_dist_graph_create";
-static const char long_gen355[] = " MPI_Dist_graph_create failed";
-static const char short_gen356[] = "**mpi_dist_graph_create_adjacent";
-static const char long_gen356[] = " MPI_Dist_graph_create_adjacent failed";
-static const char short_gen357[] = "**mpi_dist_graph_neighbors";
-static const char long_gen357[] = " MPI_Dist_graph_neighbors failed";
-static const char short_gen358[] = "**mpi_dist_graph_neighbors_count";
-static const char long_gen358[] = " MPI_Dist_graph_neighbors_count failed";
-static const char short_gen359[] = "**mpi_errhandler_create";
-static const char long_gen359[] = "MPI_Errhandler_create failed";
-static const char short_gen360[] = "**mpi_errhandler_free";
-static const char long_gen360[] = "MPI_Errhandler_free failed";
-static const char short_gen361[] = "**mpi_errhandler_get";
-static const char long_gen361[] = "MPI_Errhandler_get failed";
-static const char short_gen362[] = "**mpi_errhandler_set";
-static const char long_gen362[] = "MPI_Errhandler_set failed";
-static const char short_gen363[] = "**mpi_error_class";
-static const char long_gen363[] = "MPI_Error_class failed";
-static const char short_gen364[] = "**mpi_error_string";
-static const char long_gen364[] = "MPI_Error_string failed";
-static const char short_gen365[] = "**mpi_exscan";
-static const char long_gen365[] = "MPI_Exscan failed";
-static const char short_gen366[] = "**mpi_fetch_and_op";
-static const char long_gen366[] = "MPI_Fetch_and_op failed";
-static const char short_gen367[] = "**mpi_file_create_errhandler";
-static const char long_gen367[] = "MPI_File_create_errhandler failed";
-static const char short_gen368[] = "**mpi_file_get_errhandler";
-static const char long_gen368[] = "MPI_File_get_errhandler failed";
-static const char short_gen369[] = "**mpi_file_set_errhandler";
-static const char long_gen369[] = "MPI_File_set_errhandler failed";
-static const char short_gen370[] = "**mpi_finalize";
-static const char long_gen370[] = "MPI_Finalize failed";
-static const char short_gen371[] = "**mpi_finalized";
-static const char long_gen371[] = "MPI_Finalized failed";
-static const char short_gen372[] = "**mpi_free_mem";
-static const char long_gen372[] = "MPI_Free_mem failed";
-static const char short_gen373[] = "**mpi_gather";
-static const char long_gen373[] = "MPI_Gather failed";
-static const char short_gen374[] = "**mpi_gatherv";
-static const char long_gen374[] = "MPI_Gatherv failed";
-static const char short_gen375[] = "**mpi_get";
-static const char long_gen375[] = "MPI_Get failed";
-static const char short_gen376[] = "**mpi_get_accumulate";
-static const char long_gen376[] = "MPI_Get_accumulate failed";
-static const char short_gen377[] = "**mpi_get_address";
-static const char long_gen377[] = "MPI_Get_address failed";
-static const char short_gen378[] = "**mpi_get_count";
-static const char long_gen378[] = "MPI_Get_count failed";
-static const char short_gen379[] = "**mpi_get_elements";
-static const char long_gen379[] = "MPI_Get_elements failed";
-static const char short_gen380[] = "**mpi_get_elements_x";
-static const char long_gen380[] = " MPI_Get_elements_x failed";
-static const char short_gen381[] = "**mpi_get_library_version";
-static const char long_gen381[] = "MPI_Get_library_version failed";
-static const char short_gen382[] = "**mpi_get_processor_name";
-static const char long_gen382[] = "MPI_Get_processor_name failed";
-static const char short_gen383[] = "**mpi_get_version";
-static const char long_gen383[] = "MPI_Get_version failed";
-static const char short_gen384[] = "**mpi_graph_create";
-static const char long_gen384[] = "MPI_Graph_create failed";
-static const char short_gen385[] = "**mpi_graph_get";
-static const char long_gen385[] = "MPI_Graph_get failed";
-static const char short_gen386[] = "**mpi_graph_map";
-static const char long_gen386[] = "MPI_Graph_map failed";
-static const char short_gen387[] = "**mpi_graph_neighbors";
-static const char long_gen387[] = "MPI_Graph_neighbors failed";
-static const char short_gen388[] = "**mpi_graph_neighbors_count";
-static const char long_gen388[] = "MPI_Graph_neighbors_count failed";
-static const char short_gen389[] = "**mpi_graphdims_get";
-static const char long_gen389[] = "MPI_Graphdims_get failed";
-static const char short_gen390[] = "**mpi_grequest_complete";
-static const char long_gen390[] = "MPI_Grequest_complete failed";
-static const char short_gen391[] = "**mpi_grequest_start";
-static const char long_gen391[] = "MPI_Grequest_start failed";
-static const char short_gen392[] = "**mpi_group_compare";
-static const char long_gen392[] = "MPI_Group_compare failed";
-static const char short_gen393[] = "**mpi_group_difference";
-static const char long_gen393[] = "MPI_Group_difference failed";
-static const char short_gen394[] = "**mpi_group_excl";
-static const char long_gen394[] = "MPI_Group_excl failed";
-static const char short_gen395[] = "**mpi_group_free";
-static const char long_gen395[] = "MPI_Group_free failed";
-static const char short_gen396[] = "**mpi_group_incl";
-static const char long_gen396[] = "MPI_Group_incl failed";
-static const char short_gen397[] = "**mpi_group_intersection";
-static const char long_gen397[] = "MPI_Group_intersection failed";
-static const char short_gen398[] = "**mpi_group_range_excl";
-static const char long_gen398[] = "MPI_Group_range_excl failed";
-static const char short_gen399[] = "**mpi_group_range_incl";
-static const char long_gen399[] = "MPI_Group_range_incl failed";
-static const char short_gen400[] = "**mpi_group_rank";
-static const char long_gen400[] = "MPI_Group_rank failed";
-static const char short_gen401[] = "**mpi_group_size";
-static const char long_gen401[] = "MPI_Group_size failed";
-static const char short_gen402[] = "**mpi_group_translate_ranks";
-static const char long_gen402[] = "MPI_Group_translate_ranks failed";
-static const char short_gen403[] = "**mpi_group_union";
-static const char long_gen403[] = "MPI_Group_union failed";
-static const char short_gen404[] = "**mpi_iallgather";
-static const char long_gen404[] = " MPI_Iallgather failed";
-static const char short_gen405[] = "**mpi_iallgatherv";
-static const char long_gen405[] = " MPI_Iallgatherv failed";
-static const char short_gen406[] = "**mpi_iallreduce";
-static const char long_gen406[] = " MPI_Iallreduce failed";
-static const char short_gen407[] = "**mpi_ialltoall";
-static const char long_gen407[] = " MPI_Ialltoall failed";
-static const char short_gen408[] = "**mpi_ialltoallv";
-static const char long_gen408[] = " MPI_Ialltoallv failed";
-static const char short_gen409[] = "**mpi_ialltoallw";
-static const char long_gen409[] = " MPI_Ialltoallw failed";
-static const char short_gen410[] = "**mpi_ibarrier";
-static const char long_gen410[] = " MPI_Ibarrier failed";
-static const char short_gen411[] = "**mpi_ibcast";
-static const char long_gen411[] = " MPI_Ibcast failed";
-static const char short_gen412[] = "**mpi_ibsend";
-static const char long_gen412[] = "MPI_Ibsend failed";
-static const char short_gen413[] = "**mpi_iexscan";
-static const char long_gen413[] = " MPI_Iexscan failed";
-static const char short_gen414[] = "**mpi_igather";
-static const char long_gen414[] = " MPI_Igather failed";
-static const char short_gen415[] = "**mpi_igatherv";
-static const char long_gen415[] = " MPI_Igatherv failed";
-static const char short_gen416[] = "**mpi_improbe";
-static const char long_gen416[] = " MPI_Improbe failed";
-static const char short_gen417[] = "**mpi_imrecv";
-static const char long_gen417[] = " MPI_Imrecv failed";
-static const char short_gen418[] = "**mpi_ineighbor_allgather";
-static const char long_gen418[] = " MPI_Ineighbor_allgather failed";
-static const char short_gen419[] = "**mpi_ineighbor_allgatherv";
-static const char long_gen419[] = " MPI_Ineighbor_allgatherv failed";
-static const char short_gen420[] = "**mpi_ineighbor_alltoall";
-static const char long_gen420[] = " MPI_Ineighbor_alltoall failed";
-static const char short_gen421[] = "**mpi_ineighbor_alltoallv";
-static const char long_gen421[] = " MPI_Ineighbor_alltoallv failed";
-static const char short_gen422[] = "**mpi_ineighbor_alltoallw";
-static const char long_gen422[] = " MPI_Ineighbor_alltoallw failed";
-static const char short_gen423[] = "**mpi_info_create";
-static const char long_gen423[] = "MPI_Info_create failed";
-static const char short_gen424[] = "**mpi_info_delete";
-static const char long_gen424[] = "MPI_Info_delete failed";
-static const char short_gen425[] = "**mpi_info_dup";
-static const char long_gen425[] = "MPI_Info_dup failed";
-static const char short_gen426[] = "**mpi_info_free";
-static const char long_gen426[] = "MPI_Info_free failed";
-static const char short_gen427[] = "**mpi_info_get";
-static const char long_gen427[] = "MPI_Info_get failed";
-static const char short_gen428[] = "**mpi_info_get_nkeys";
-static const char long_gen428[] = "MPI_Info_get_nkeys failed";
-static const char short_gen429[] = "**mpi_info_get_nthkey";
-static const char long_gen429[] = "MPI_Info_get_nthkey failed";
-static const char short_gen430[] = "**mpi_info_get_valuelen";
-static const char long_gen430[] = "MPI_Info_get_valuelen failed";
-static const char short_gen431[] = "**mpi_info_set";
-static const char long_gen431[] = "MPI_Info_set failed";
-static const char short_gen432[] = "**mpi_init";
-static const char long_gen432[] = "MPI_Init failed";
-static const char short_gen433[] = "**mpi_init_thread";
-static const char long_gen433[] = "MPI_Init_thread failed";
-static const char short_gen434[] = "**mpi_initialized";
-static const char long_gen434[] = "MPI_Initialized failed";
-static const char short_gen435[] = "**mpi_intercomm_create";
-static const char long_gen435[] = "MPI_Intercomm_create failed";
-static const char short_gen436[] = "**mpi_intercomm_merge";
-static const char long_gen436[] = "MPI_Intercomm_merge failed";
-static const char short_gen437[] = "**mpi_iprobe";
-static const char long_gen437[] = "MPI_Iprobe failed";
-static const char short_gen438[] = "**mpi_irecv";
-static const char long_gen438[] = "MPI_Irecv failed";
-static const char short_gen439[] = "**mpi_ireduce";
-static const char long_gen439[] = " MPI_Ireduce failed";
-static const char short_gen440[] = "**mpi_ireduce_scatter";
-static const char long_gen440[] = " MPI_Ireduce_scatter failed";
-static const char short_gen441[] = "**mpi_ireduce_scatter_block";
-static const char long_gen441[] = " MPI_Ireduce_scatter_block failed";
-static const char short_gen442[] = "**mpi_irsend";
-static const char long_gen442[] = "MPI_Irsend failed";
-static const char short_gen443[] = "**mpi_is_thread_main";
-static const char long_gen443[] = "MPI_Is_thread_main failed";
-static const char short_gen444[] = "**mpi_iscan";
-static const char long_gen444[] = " MPI_Iscan failed";
-static const char short_gen445[] = "**mpi_iscatter";
-static const char long_gen445[] = " MPI_Iscatter failed";
-static const char short_gen446[] = "**mpi_iscatterv";
-static const char long_gen446[] = " MPI_Iscatterv failed";
-static const char short_gen447[] = "**mpi_isend";
-static const char long_gen447[] = "MPI_Isend failed";
-static const char short_gen448[] = "**mpi_issend";
-static const char long_gen448[] = "MPI_Issend failed";
-static const char short_gen449[] = "**mpi_keyval_create";
-static const char long_gen449[] = "MPI_Keyval_create failed";
-static const char short_gen450[] = "**mpi_keyval_free";
-static const char long_gen450[] = "MPI_Keyval_free failed";
-static const char short_gen451[] = "**mpi_lookup_name";
-static const char long_gen451[] = "MPI_Lookup_name failed";
-static const char short_gen452[] = "**mpi_mprobe";
-static const char long_gen452[] = " MPI_Mprobe failed";
-static const char short_gen453[] = "**mpi_mrecv";
-static const char long_gen453[] = " MPI_Mrecv failed";
-static const char short_gen454[] = "**mpi_neighbor_allgather";
-static const char long_gen454[] = " MPI_Neighbor_allgather failed";
-static const char short_gen455[] = "**mpi_neighbor_allgatherv";
-static const char long_gen455[] = " MPI_Neighbor_allgatherv failed";
-static const char short_gen456[] = "**mpi_neighbor_alltoall";
-static const char long_gen456[] = " MPI_Neighbor_alltoall failed";
-static const char short_gen457[] = "**mpi_neighbor_alltoallv";
-static const char long_gen457[] = " MPI_Neighbor_alltoallv failed";
-static const char short_gen458[] = "**mpi_neighbor_alltoallw";
-static const char long_gen458[] = " MPI_Neighbor_alltoallw failed";
-static const char short_gen459[] = "**mpi_op_commutative";
-static const char long_gen459[] = "MPI_Op_commutative failed";
-static const char short_gen460[] = "**mpi_op_create";
-static const char long_gen460[] = "MPI_Op_create failed";
-static const char short_gen461[] = "**mpi_op_free";
-static const char long_gen461[] = "MPI_Op_free failed";
-static const char short_gen462[] = "**mpi_open_port";
-static const char long_gen462[] = "MPI_Open_port failed";
-static const char short_gen463[] = "**mpi_pack";
-static const char long_gen463[] = "MPI_Pack failed";
-static const char short_gen464[] = "**mpi_pack_external";
-static const char long_gen464[] = "MPI_Pack_external failed";
-static const char short_gen465[] = "**mpi_pack_external_size";
-static const char long_gen465[] = "MPI_Pack_external_size failed";
-static const char short_gen466[] = "**mpi_pack_size";
-static const char long_gen466[] = "MPI_Pack_size failed";
-static const char short_gen467[] = "**mpi_probe";
-static const char long_gen467[] = "MPI_Probe failed";
-static const char short_gen468[] = "**mpi_publish_name";
-static const char long_gen468[] = "MPI_Publish_name failed";
-static const char short_gen469[] = "**mpi_put";
-static const char long_gen469[] = "MPI_Put failed";
-static const char short_gen470[] = "**mpi_query_thread";
-static const char long_gen470[] = "MPI_Query_thread failed";
-static const char short_gen471[] = "**mpi_raccumulate";
-static const char long_gen471[] = "MPI_Raccumulate failed";
-static const char short_gen472[] = "**mpi_recv";
-static const char long_gen472[] = "MPI_Recv failed";
-static const char short_gen473[] = "**mpi_recv_init";
-static const char long_gen473[] = "MPI_Recv_init failed";
-static const char short_gen474[] = "**mpi_reduce";
-static const char long_gen474[] = "MPI_Reduce failed";
-static const char short_gen475[] = "**mpi_reduce_local";
-static const char long_gen475[] = "MPI_Reduce_local failed";
-static const char short_gen476[] = "**mpi_reduce_scatter";
-static const char long_gen476[] = "MPI_Reduce_scatter failed";
-static const char short_gen477[] = "**mpi_reduce_scatter_block";
-static const char long_gen477[] = "MPI_Reduce_scatter_block failed";
-static const char short_gen478[] = "**mpi_register_datarep";
-static const char long_gen478[] = "MPI_Register_datarep failed";
-static const char short_gen479[] = "**mpi_request_free";
-static const char long_gen479[] = "MPI_Request_free failed";
-static const char short_gen480[] = "**mpi_request_get_status";
-static const char long_gen480[] = "MPI_Request_get_status failed";
-static const char short_gen481[] = "**mpi_rget";
-static const char long_gen481[] = "MPI_Rget failed";
-static const char short_gen482[] = "**mpi_rget_accumulate";
-static const char long_gen482[] = "MPI_Rget_accumulate failed";
-static const char short_gen483[] = "**mpi_rput";
-static const char long_gen483[] = "MPI_Rput failed";
-static const char short_gen484[] = "**mpi_rsend";
-static const char long_gen484[] = "MPI_Rsend failed";
-static const char short_gen485[] = "**mpi_rsend_init";
-static const char long_gen485[] = "MPI_Rsend_init failed";
-static const char short_gen486[] = "**mpi_scan";
-static const char long_gen486[] = "MPI_Scan failed";
-static const char short_gen487[] = "**mpi_scatter";
-static const char long_gen487[] = "MPI_Scatter failed";
-static const char short_gen488[] = "**mpi_scatterv";
-static const char long_gen488[] = "MPI_Scatterv failed";
-static const char short_gen489[] = "**mpi_send";
-static const char long_gen489[] = "MPI_Send failed";
-static const char short_gen490[] = "**mpi_send_init";
-static const char long_gen490[] = "MPI_Send_init failed";
-static const char short_gen491[] = "**mpi_sendrecv";
-static const char long_gen491[] = "MPI_Sendrecv failed";
-static const char short_gen492[] = "**mpi_sendrecv_replace";
-static const char long_gen492[] = "MPI_Sendrecv_replace failed";
-static const char short_gen493[] = "**mpi_ssend";
-static const char long_gen493[] = "MPI_Ssend failed";
-static const char short_gen494[] = "**mpi_ssend_init";
-static const char long_gen494[] = "MPI_Ssend_init failed";
-static const char short_gen495[] = "**mpi_start";
-static const char long_gen495[] = "MPI_Start failed";
-static const char short_gen496[] = "**mpi_startall";
-static const char long_gen496[] = "MPI_Start_all failed";
-static const char short_gen497[] = "**mpi_status_set_cancelled";
-static const char long_gen497[] = "MPI_Status_set_cancelled failed";
-static const char short_gen498[] = "**mpi_status_set_elements";
-static const char long_gen498[] = "MPI_Status_set_elements failed";
-static const char short_gen499[] = "**mpi_status_set_elements_x";
-static const char long_gen499[] = " MPI_Status_set_elements_x failed";
-static const char short_gen500[] = "**mpi_t_category_changed";
-static const char long_gen500[] = " MPI_T_category_changed failed";
-static const char short_gen501[] = "**mpi_t_category_get_categories";
-static const char long_gen501[] = " MPI_T_category_get_categories failed";
-static const char short_gen502[] = "**mpi_t_category_get_cvars";
-static const char long_gen502[] = " MPI_T_category_get_cvars failed";
-static const char short_gen503[] = "**mpi_t_category_get_info";
-static const char long_gen503[] = " MPI_T_category_get_info failed";
-static const char short_gen504[] = "**mpi_t_category_get_num";
-static const char long_gen504[] = " MPI_T_category_get_num failed";
-static const char short_gen505[] = "**mpi_t_category_get_pvars";
-static const char long_gen505[] = " MPI_T_category_get_pvars failed";
-static const char short_gen506[] = "**mpi_t_cvar_get_info";
-static const char long_gen506[] = " MPI_T_cvar_get_info failed";
-static const char short_gen507[] = "**mpi_t_cvar_get_num";
-static const char long_gen507[] = " MPI_T_cvar_get_num failed";
-static const char short_gen508[] = "**mpi_t_cvar_handle_alloc";
-static const char long_gen508[] = " MPI_T_cvar_handle_alloc failed";
-static const char short_gen509[] = "**mpi_t_cvar_handle_free";
-static const char long_gen509[] = " MPI_T_cvar_handle_free failed";
-static const char short_gen510[] = "**mpi_t_cvar_read";
-static const char long_gen510[] = " MPI_T_cvar_read failed";
-static const char short_gen511[] = "**mpi_t_cvar_write";
-static const char long_gen511[] = " MPI_T_cvar_write failed";
-static const char short_gen512[] = "**mpi_t_enum_get_info";
-static const char long_gen512[] = " MPI_T_enum_get_info failed";
-static const char short_gen513[] = "**mpi_t_enum_get_item";
-static const char long_gen513[] = " MPI_T_enum_get_item failed";
-static const char short_gen514[] = "**mpi_t_finalize";
-static const char long_gen514[] = " MPI_T_finalize failed";
-static const char short_gen515[] = "**mpi_t_init_thread";
-static const char long_gen515[] = " MPI_T_init_thread failed";
-static const char short_gen516[] = "**mpi_t_pvar_get_info";
-static const char long_gen516[] = " MPI_T_pvar_get_info failed";
-static const char short_gen517[] = "**mpi_t_pvar_get_num";
-static const char long_gen517[] = " MPI_T_pvar_get_num failed";
-static const char short_gen518[] = "**mpi_t_pvar_handle_alloc";
-static const char long_gen518[] = " MPI_T_pvar_handle_alloc failed";
-static const char short_gen519[] = "**mpi_t_pvar_handle_free";
-static const char long_gen519[] = " MPI_T_pvar_handle_free failed";
-static const char short_gen520[] = "**mpi_t_pvar_read";
-static const char long_gen520[] = " MPI_T_pvar_read failed";
-static const char short_gen521[] = "**mpi_t_pvar_readreset";
-static const char long_gen521[] = " MPI_T_pvar_readreset failed";
-static const char short_gen522[] = "**mpi_t_pvar_reset";
-static const char long_gen522[] = " MPI_T_pvar_reset failed";
-static const char short_gen523[] = "**mpi_t_pvar_session_create";
-static const char long_gen523[] = " MPI_T_pvar_session_create failed";
-static const char short_gen524[] = "**mpi_t_pvar_session_free";
-static const char long_gen524[] = " MPI_T_pvar_session_free failed";
-static const char short_gen525[] = "**mpi_t_pvar_start";
-static const char long_gen525[] = " MPI_T_pvar_start failed";
-static const char short_gen526[] = "**mpi_t_pvar_stop";
-static const char long_gen526[] = " MPI_T_pvar_stop failed";
-static const char short_gen527[] = "**mpi_t_pvar_write";
-static const char long_gen527[] = " MPI_T_pvar_write failed";
-static const char short_gen528[] = "**mpi_test";
-static const char long_gen528[] = "MPI_Test failed";
-static const char short_gen529[] = "**mpi_test_cancelled";
-static const char long_gen529[] = "MPI_Test_cancelled failed";
-static const char short_gen530[] = "**mpi_testall";
-static const char long_gen530[] = "MPI_Testall failed";
-static const char short_gen531[] = "**mpi_testany";
-static const char long_gen531[] = "MPI_Testany failed";
-static const char short_gen532[] = "**mpi_testsome";
-static const char long_gen532[] = "MPI_Testsome failed";
-static const char short_gen533[] = "**mpi_topo_test";
-static const char long_gen533[] = "MPI_Topo_test failed";
-static const char short_gen534[] = "**mpi_type_commit";
-static const char long_gen534[] = "MPI_Type_commit failed";
-static const char short_gen535[] = "**mpi_type_contiguous";
-static const char long_gen535[] = "MPI_Type_continuous failed";
-static const char short_gen536[] = "**mpi_type_create_darray";
-static const char long_gen536[] = "MPI_Type_create_darray failed";
-static const char short_gen537[] = "**mpi_type_create_f90_complex";
-static const char long_gen537[] = "MPI_Type_create_f90_complex failed";
-static const char short_gen538[] = "**mpi_type_create_f90_int";
-static const char long_gen538[] = "MPI_Type_create_f90_int failed";
-static const char short_gen539[] = "**mpi_type_create_f90_real";
-static const char long_gen539[] = "MPI_Type_create_f90_real failed";
-static const char short_gen540[] = "**mpi_type_create_hindexed";
-static const char long_gen540[] = "MPI_Type_create_hindexed failed";
-static const char short_gen541[] = "**mpi_type_create_hindexed_block";
-static const char long_gen541[] = "MPI_Type_create_hindexed_block failed";
-static const char short_gen542[] = "**mpi_type_create_hvector";
-static const char long_gen542[] = "MPI_Type_create_hvector failed";
-static const char short_gen543[] = "**mpi_type_create_indexed_block";
-static const char long_gen543[] = "MPI_Type_create_indexed_block failed";
-static const char short_gen544[] = "**mpi_type_create_keyval";
-static const char long_gen544[] = "MPI_Type_create_keyval failed";
-static const char short_gen545[] = "**mpi_type_create_resized";
-static const char long_gen545[] = "MPI_Type_create_resized failed";
-static const char short_gen546[] = "**mpi_type_create_struct";
-static const char long_gen546[] = "MPI_Type_create_struct failed";
-static const char short_gen547[] = "**mpi_type_create_subarray";
-static const char long_gen547[] = "MPI_Type_create_subarray failed";
-static const char short_gen548[] = "**mpi_type_delete_attr";
-static const char long_gen548[] = "MPI_Type_delete_attr failed";
-static const char short_gen549[] = "**mpi_type_dup";
-static const char long_gen549[] = "MPI_Type_dup failed";
-static const char short_gen550[] = "**mpi_type_extent";
-static const char long_gen550[] = "MPI_Type_extent failed";
-static const char short_gen551[] = "**mpi_type_free";
-static const char long_gen551[] = "MPI_Type_free failed";
-static const char short_gen552[] = "**mpi_type_free_keyval";
-static const char long_gen552[] = "MPI_Type_free_keyval failed";
-static const char short_gen553[] = "**mpi_type_get_attr";
-static const char long_gen553[] = "MPI_Type_get_attr failed";
-static const char short_gen554[] = "**mpi_type_get_contents";
-static const char long_gen554[] = "MPI_Type_get_contents failed";
-static const char short_gen555[] = "**mpi_type_get_envelope";
-static const char long_gen555[] = "MPI_Type_get_envelope failed";
-static const char short_gen556[] = "**mpi_type_get_extent";
-static const char long_gen556[] = "MPI_Type_get_extent failed";
-static const char short_gen557[] = "**mpi_type_get_extent_x";
-static const char long_gen557[] = " MPI_Type_get_extent_x failed";
-static const char short_gen558[] = "**mpi_type_get_name";
-static const char long_gen558[] = "MPI_Type_get_name failed";
-static const char short_gen559[] = "**mpi_type_get_true_extent";
-static const char long_gen559[] = "MPI_Type_get_true_extent failed";
-static const char short_gen560[] = "**mpi_type_get_true_extent_x";
-static const char long_gen560[] = " MPI_Type_get_true_extent_x failed";
-static const char short_gen561[] = "**mpi_type_hindexed";
-static const char long_gen561[] = "MPI_Type_hindexed failed";
-static const char short_gen562[] = "**mpi_type_hvector";
-static const char long_gen562[] = "MPI_Type_hvector failed";
-static const char short_gen563[] = "**mpi_type_indexed";
-static const char long_gen563[] = "MPI_Type_indexed failed";
-static const char short_gen564[] = "**mpi_type_lb";
-static const char long_gen564[] = "MPI_Type_lb failed";
-static const char short_gen565[] = "**mpi_type_match_size";
-static const char long_gen565[] = "MPI_Type_match_size failed";
-static const char short_gen566[] = "**mpi_type_set_attr";
-static const char long_gen566[] = "MPI_Type_set_attr failed";
-static const char short_gen567[] = "**mpi_type_set_name";
-static const char long_gen567[] = "MPI_Type_set_name failed";
-static const char short_gen568[] = "**mpi_type_size";
-static const char long_gen568[] = "MPI_Type_size failed";
-static const char short_gen569[] = "**mpi_type_size_x";
-static const char long_gen569[] = " MPI_Type_size_x failed";
-static const char short_gen570[] = "**mpi_type_struct";
-static const char long_gen570[] = "MPI_Type_struct failed";
-static const char short_gen571[] = "**mpi_type_ub";
-static const char long_gen571[] = "MPI_Type_ub failed";
-static const char short_gen572[] = "**mpi_type_vector";
-static const char long_gen572[] = "MPI_Type_vector failed";
-static const char short_gen573[] = "**mpi_unpack";
-static const char long_gen573[] = "MPI_Unpack failed";
-static const char short_gen574[] = "**mpi_unpack_external";
-static const char long_gen574[] = "MPI_Unpack_external failed";
-static const char short_gen575[] = "**mpi_unpublish_name";
-static const char long_gen575[] = "MPI_Unpublish_name failed";
-static const char short_gen576[] = "**mpi_wait";
-static const char long_gen576[] = "MPI_Wait failed";
-static const char short_gen577[] = "**mpi_waitall";
-static const char long_gen577[] = "MPI_Waitall failed";
-static const char short_gen578[] = "**mpi_waitany";
-static const char long_gen578[] = "MPI_Waitany failed";
-static const char short_gen579[] = "**mpi_waitsome";
-static const char long_gen579[] = "MPI_Waitsome failed";
-static const char short_gen580[] = "**mpi_win_allocate";
-static const char long_gen580[] = "MPI_Win_allocate failed";
-static const char short_gen581[] = "**mpi_win_allocate_shared";
-static const char long_gen581[] = "MPI_Win_allocate_shared failed";
-static const char short_gen582[] = "**mpi_win_attach";
-static const char long_gen582[] = "MPI_Win_attach failed";
-static const char short_gen583[] = "**mpi_win_call_errhandler";
-static const char long_gen583[] = "MPI_Win_call_errhandler failed";
-static const char short_gen584[] = "**mpi_win_complete";
-static const char long_gen584[] = "MPI_Win_complete failed";
-static const char short_gen585[] = "**mpi_win_create";
-static const char long_gen585[] = "MPI_Win_create failed";
-static const char short_gen586[] = "**mpi_win_create_dynamic";
-static const char long_gen586[] = "MPI_Win_create_dynamic failed";
-static const char short_gen587[] = "**mpi_win_create_errhandler";
-static const char long_gen587[] = "MPI_Win_create_errhandler failed";
-static const char short_gen588[] = "**mpi_win_create_keyval";
-static const char long_gen588[] = "MPI_Win_create_keyval failed";
-static const char short_gen589[] = "**mpi_win_delete_attr";
-static const char long_gen589[] = "MPI_Win_delete_attr failed";
-static const char short_gen590[] = "**mpi_win_detach";
-static const char long_gen590[] = "MPI_Win_detach failed";
-static const char short_gen591[] = "**mpi_win_fence";
-static const char long_gen591[] = "MPI_Win_fence failed";
-static const char short_gen592[] = "**mpi_win_flush";
-static const char long_gen592[] = "MPI_Win_flush failed";
-static const char short_gen593[] = "**mpi_win_flush_all";
-static const char long_gen593[] = "MPI_Win_flush_all failed";
-static const char short_gen594[] = "**mpi_win_flush_local";
-static const char long_gen594[] = "MPI_Win_flush_local failed";
-static const char short_gen595[] = "**mpi_win_flush_local_all";
-static const char long_gen595[] = "MPI_Win_flush_local_all failed";
-static const char short_gen596[] = "**mpi_win_free";
-static const char long_gen596[] = "MPI_Win_free failed";
-static const char short_gen597[] = "**mpi_win_free_keyval";
-static const char long_gen597[] = "MPI_Win_free_keyval failed";
-static const char short_gen598[] = "**mpi_win_get_attr";
-static const char long_gen598[] = "MPI_Win_get_attr failed";
-static const char short_gen599[] = "**mpi_win_get_errhandler";
-static const char long_gen599[] = "MPI_Win_get_errhandler failed";
-static const char short_gen600[] = "**mpi_win_get_group";
-static const char long_gen600[] = "MPI_Win_get_group failed";
-static const char short_gen601[] = "**mpi_win_get_info";
-static const char long_gen601[] = "MPI_Win_get_info failed";
-static const char short_gen602[] = "**mpi_win_get_name";
-static const char long_gen602[] = "MPI_Win_get_name failed";
-static const char short_gen603[] = "**mpi_win_lock";
-static const char long_gen603[] = "MPI_Win_lock failed";
-static const char short_gen604[] = "**mpi_win_lock_all";
-static const char long_gen604[] = "MPI_Win_lock_all failed";
-static const char short_gen605[] = "**mpi_win_post";
-static const char long_gen605[] = "MPI_Win_post failed";
-static const char short_gen606[] = "**mpi_win_set_attr";
-static const char long_gen606[] = "MPI_Win_set_attr failed";
-static const char short_gen607[] = "**mpi_win_set_errhandler";
-static const char long_gen607[] = "MPI_Win_set_errhandler failed";
-static const char short_gen608[] = "**mpi_win_set_info";
-static const char long_gen608[] = "MPI_Win_set_info failed";
-static const char short_gen609[] = "**mpi_win_set_name";
-static const char long_gen609[] = "MPI_Win_set_name failed";
-static const char short_gen610[] = "**mpi_win_shared_query";
-static const char long_gen610[] = "MPI_Win_shared_query failed";
-static const char short_gen611[] = "**mpi_win_start";
-static const char long_gen611[] = "MPI_Win_start failed";
-static const char short_gen612[] = "**mpi_win_sync";
-static const char long_gen612[] = "MPI_Win_sync failed";
-static const char short_gen613[] = "**mpi_win_test";
-static const char long_gen613[] = "MPI_Win_test failed";
-static const char short_gen614[] = "**mpi_win_unlock";
-static const char long_gen614[] = "MPI_Win_unlock failed";
-static const char short_gen615[] = "**mpi_win_unlock_all";
-static const char long_gen615[] = "MPI_Win_unlock_all failed";
-static const char short_gen616[] = "**mpi_win_wait";
-static const char long_gen616[] = "MPI_Win_wait failed";
-static const char short_gen617[] = "**mpir_comm_get_attr";
-static const char long_gen617[] = "MPIR_Comm_get_attr failed";
-static const char short_gen618[] = "**mpir_type_get_attr";
-static const char long_gen618[] = "MPIR_Type_get_attr failed";
-static const char short_gen619[] = "**mpir_wingetattr";
-static const char long_gen619[] = "MPIR_WinGetAttr failed";
-static const char short_gen620[] = "**mpitinit";
-static const char long_gen620[] = " MPI tool information interface is not initialized";
-static const char short_gen621[] = "**mpix_comm_agree";
-static const char long_gen621[] = "MPIX_Comm_agree failed";
-static const char short_gen622[] = "**mpix_comm_failure_ack";
-static const char long_gen622[] = "MPIX_Comm_failure_ack failed";
-static const char short_gen623[] = "**mpix_comm_failure_get_acked";
-static const char long_gen623[] = "MPIX_Comm_failure_get_acked failed";
-static const char short_gen624[] = "**mpix_comm_revoke";
-static const char long_gen624[] = "MPIX_Comm_revoke failed";
-static const char short_gen625[] = "**mpix_comm_shrink";
-static const char long_gen625[] = "MPIX_Comm_shrink failed";
-static const char short_gen626[] = "**mpix_grequest_class_create";
-static const char long_gen626[] = " MPIX_Grequest_class_create failed";
-static const char short_gen627[] = "**msgnotreq";
-static const char long_gen627[] = " Invalid MPI_Request (MPI_Message passed)";
-static const char short_gen628[] = "**mutex_create";
-static const char long_gen628[] = "MPID_Thread_mutex_create failed";
-static const char short_gen629[] = "**mxm_config_read_opts";
-static const char long_gen629[] = " mxm_config_read_opts failed";
-static const char short_gen630[] = "**mxm_ep_connect";
-static const char long_gen630[] = " mxm_ep_connect failed";
-static const char short_gen631[] = "**mxm_ep_create";
-static const char long_gen631[] = " mxm_ep_create failed";
-static const char short_gen632[] = "**mxm_ep_disconnect";
-static const char long_gen632[] = " mxm_ep_disconnect failed";
-static const char short_gen633[] = "**mxm_ep_get_address";
-static const char long_gen633[] = " mxm_ep_get_address failed";
-static const char short_gen634[] = "**mxm_init";
-static const char long_gen634[] = " mxm_init failed";
-static const char short_gen635[] = "**mxm_mq_create";
-static const char long_gen635[] = " mxm_mq_create failed";
-static const char short_gen636[] = "**mxm_set_am_handler";
-static const char long_gen636[] = " mxm_set_am_handler failed";
-static const char short_gen637[] = "**namepubfile";
-static const char long_gen637[] = "Unable to publish service name";
-static const char short_gen638[] = "**namepubnotfound";
-static const char long_gen638[] = "Lookup failed for service name";
-static const char short_gen639[] = "**namepubnotpub";
-static const char long_gen639[] = "Lookup failed for service name ";
-static const char short_gen640[] = "**namepubnotunpub";
-static const char long_gen640[] = "Failed to unpublish service name";
-static const char short_gen641[] = "**nameservice";
-static const char long_gen641[] = "Invalid service name (see MPI_Publish_name)";
-static const char short_gen642[] = "**noConnInfoToString";
-static const char long_gen642[] = "No ConnInfoToString routine defined for this process group";
-static const char short_gen643[] = "**noerrclasses";
-static const char long_gen643[] = "No more user-defined error classes";
-static const char short_gen644[] = "**noerrcodes";
-static const char long_gen644[] = "No more user-defined error codes";
-static const char short_gen645[] = "**nomem";
-static const char long_gen645[] = "Out of memory";
-static const char short_gen646[] = "**nomem2";
-static const char long_gen646[] = "Unable to allocate memory (probably out of memory)";
-static const char short_gen647[] = "**nomemreq";
-static const char long_gen647[] = "failure occurred while allocating memory for a request object";
-static const char short_gen648[] = "**nonamepub";
-static const char long_gen648[] = "No name publishing service available";
-static const char short_gen649[] = "**notcarttopo";
-static const char long_gen649[] = "No Cartesian topology associated with this communicator";
-static const char short_gen650[] = "**notcstatignore";
-static const char long_gen650[] = "MPI_STATUS_IGNORE cannot be passed to MPI_Status_c2f()";
-static const char short_gen651[] = "**notdistgraphtopo";
-static const char long_gen651[] = "No Distributed Graph topology associated with this communicator";
-static const char short_gen652[] = "**notfstatignore";
-static const char long_gen652[] = "MPI_STATUS_IGNORE cannot be passed to MPI_Status_f2c()";
-static const char short_gen653[] = "**notgenreq";
-static const char long_gen653[] = "Attempt to complete a request with MPI_GREQUEST_COMPLETE that was not started with MPI_GREQUEST_START";
-static const char short_gen654[] = "**notgraphtopo";
-static const char long_gen654[] = "No Graph topology associated with this communicator";
-static const char short_gen655[] = "**notimpl";
-static const char long_gen655[] = "Function not implemented";
-static const char short_gen656[] = "**notopology";
-static const char long_gen656[] = "No topology associated with this communicator";
-static const char short_gen657[] = "**notsame";
-static const char long_gen657[] = "Inconsistent arguments to collective routine ";
-static const char short_gen658[] = "**null_buff_ptr";
-static const char long_gen658[] = "Error in hcolrte api: buffer pointer is NULL for non DTE_ZERO INLINE data representation";
-static const char short_gen659[] = "**nullptr";
-static const char long_gen659[] = "Null pointer";
-static const char short_gen660[] = "**nullptrtype";
-static const char long_gen660[] = "Null pointer";
-static const char short_gen661[] = "**ofi_avclose";
-static const char long_gen661[] = "OFI av close failed";
-static const char short_gen662[] = "**ofi_avmap";
-static const char long_gen662[] = "OFI get address vector map failed";
-static const char short_gen663[] = "**ofi_avopen";
-static const char long_gen663[] = "OFI address vector open failed";
-static const char short_gen664[] = "**ofi_bind";
-static const char long_gen664[] = "OFI resource bind failure";
-static const char short_gen665[] = "**ofi_cancel";
-static const char long_gen665[] = "OFI cancel failed";
-static const char short_gen666[] = "**ofi_cqclose";
-static const char long_gen666[] = "OFI cq close failed";
-static const char short_gen667[] = "**ofi_domainclose";
-static const char long_gen667[] = "OFI domain close failed";
-static const char short_gen668[] = "**ofi_ep_enable";
-static const char long_gen668[] = "OFI endpoint enable failed";
-static const char short_gen669[] = "**ofi_epclose";
-static const char long_gen669[] = "OFI endpoint close failed";
-static const char short_gen670[] = "**ofi_fabricclose";
-static const char long_gen670[] = "OFI fabric close failed";
-static const char short_gen671[] = "**ofi_getinfo";
-static const char long_gen671[] = "OFI getinfo() failed";
-static const char short_gen672[] = "**ofi_getname";
-static const char long_gen672[] = "OFI get endpoint name failed";
-static const char short_gen673[] = "**ofi_opencq";
-static const char long_gen673[] = "OFI event queue create failure";
-static const char short_gen674[] = "**ofi_opendomain";
-static const char long_gen674[] = "OFI domain open failure";
-static const char short_gen675[] = "**ofi_openep";
-static const char long_gen675[] = "OFI endpoint open failed";
-static const char short_gen676[] = "**ofi_openfabric";
-static const char long_gen676[] = "OFI fabric open failure";
-static const char short_gen677[] = "**ofi_peek";
-static const char long_gen677[] = "OFI peek failed";
-static const char short_gen678[] = "**ofi_poll";
-static const char long_gen678[] = "OFI poll failed";
-static const char short_gen679[] = "**ofi_trecv";
-static const char long_gen679[] = "OFI tagged recvfrom failed";
-static const char short_gen680[] = "**ofi_tsend";
-static const char long_gen680[] = "OFI tagged sendto failed";
-static const char short_gen681[] = "**op";
-static const char long_gen681[] = "Invalid MPI_Op";
-static const char short_gen682[] = "**open";
-static const char long_gen682[] = "open failed";
-static const char short_gen683[] = "**openportfailed";
-static const char long_gen683[] = "Unable to establish a port";
-static const char short_gen684[] = "**opnotallowed";
-static const char long_gen684[] = "MPI_Op operation is not allowed in this routine";
-static const char short_gen685[] = "**opnotpredefined";
-static const char long_gen685[] = "only predefined ops are valid";
-static const char short_gen686[] = "**opnull";
-static const char long_gen686[] = "Null MPI_Op";
-static const char short_gen687[] = "**opundefined";
-static const char long_gen687[] = "MPI_Op operation not defined for this datatype ";
-static const char short_gen688[] = "**oremote_fail";
-static const char long_gen688[] = "open failed on a remote node";
-static const char short_gen689[] = "**other";
-static const char long_gen689[] = "Other MPI error";
-static const char short_gen690[] = "**outofmemory";
-static const char long_gen690[] = "outofmemory failed";
-static const char short_gen691[] = "**pctwice";
-static const char long_gen691[] = "post close called twice";
-static const char short_gen692[] = "**permattr";
-static const char long_gen692[] = "Cannot set permanent attribute";
-static const char short_gen693[] = "**permop";
-static const char long_gen693[] = "Cannot free permanent MPI_Op ";
-static const char short_gen694[] = "**pglookup";
-static const char long_gen694[] = "unable to find the process group structure";
-static const char short_gen695[] = "**pmi_barrier";
-static const char long_gen695[] = "PMI_Barrier failed";
-static const char short_gen696[] = "**pmi_get_appnum";
-static const char long_gen696[] = "PMI_Get_appnum failed";
-static const char short_gen697[] = "**pmi_get_id";
-static const char long_gen697[] = "PMI_Get_id failed";
-static const char short_gen698[] = "**pmi_get_id_length_max";
-static const char long_gen698[] = "PMI_Get_id_length_max failed";
-static const char short_gen699[] = "**pmi_get_rank";
-static const char long_gen699[] = "PMI_Get_rank failed";
-static const char short_gen700[] = "**pmi_get_size";
-static const char long_gen700[] = "PMI_Get_size failed";
-static const char short_gen701[] = "**pmi_get_universe_size";
-static const char long_gen701[] = "PMI_Get_universe_size failed";
-static const char short_gen702[] = "**pmi_init";
-static const char long_gen702[] = "PMI_Init failed";
-static const char short_gen703[] = "**pmi_jobgetid";
-static const char long_gen703[] = " PMI2 Job_GetID failed";
-static const char short_gen704[] = "**pmi_kvs_commit";
-static const char long_gen704[] = "PMI_KVS_Commit failed";
-static const char short_gen705[] = "**pmi_kvs_get";
-static const char long_gen705[] = "PMI_KVS_Get failed";
-static const char short_gen706[] = "**pmi_kvs_get_my_name";
-static const char long_gen706[] = "PMI_KVS_Get_my_name failed";
-static const char short_gen707[] = "**pmi_kvs_get_name_length_max";
-static const char long_gen707[] = "PMI_KVS_Get_name_length_max failed";
-static const char short_gen708[] = "**pmi_kvs_get_value_length_max";
-static const char long_gen708[] = "PMI_KVS_Get_value_length_max failed";
-static const char short_gen709[] = "**pmi_kvs_put";
-static const char long_gen709[] = "PMI_KVS_Put failed";
-static const char short_gen710[] = "**pmi_kvsget";
-static const char long_gen710[] = " PMI2 KVS_Get failed";
-static const char short_gen711[] = "**pmi_spawn_multiple";
-static const char long_gen711[] = "PMI_Spawn_multiple failed";
-static const char short_gen712[] = "**poll";
-static const char long_gen712[] = "poll of socket fds failed";
-static const char short_gen713[] = "**port";
-static const char long_gen713[] = "Invalid port";
-static const char short_gen714[] = "**portexist";
-static const char long_gen714[] = "Named port does not exist";
-static const char short_gen715[] = "**post_accept";
-static const char long_gen715[] = "post accept failed";
-static const char short_gen716[] = "**proc_failed";
-static const char long_gen716[] = "Process failed";
-static const char short_gen717[] = "**procnamefailed";
-static const char long_gen717[] = "Failed to get processor name";
-static const char short_gen718[] = "**progress_sock_wait";
-static const char long_gen718[] = "sock_wait failed";
-static const char short_gen719[] = "**progresshookstoomany";
-static const char long_gen719[] = " too many progress hooks are registered";
-static const char short_gen720[] = "**pthread_lock";
-static const char long_gen720[] = "pthread_lock failed";
-static const char short_gen721[] = "**pthread_mutex";
-static const char long_gen721[] = "pthread mutex routine failed";
-static const char short_gen722[] = "**pthread_unlock";
-static const char long_gen722[] = "pthread_unlock failed";
-static const char short_gen723[] = "**ptleqalloc";
-static const char long_gen723[] = "PtlEQAlloc() failed";
-static const char short_gen724[] = "**ptleqget";
-static const char long_gen724[] = "PtlEQGet() failed";
-static const char short_gen725[] = "**ptlget";
-static const char long_gen725[] = "PtlGet() failed";
-static const char short_gen726[] = "**ptlgetid";
-static const char long_gen726[] = "PtlGetId() failed";
-static const char short_gen727[] = "**ptlinit";
-static const char long_gen727[] = "PtlInit() failed";
-static const char short_gen728[] = "**ptlmdbind";
-static const char long_gen728[] = "PtlMDBind() failed";
-static const char short_gen729[] = "**ptlmdrelease";
-static const char long_gen729[] = "PtlMDRelease() failed";
-static const char short_gen730[] = "**ptlmeappend";
-static const char long_gen730[] = "PtlMEAppend() failed";
-static const char short_gen731[] = "**ptlmesearch";
-static const char long_gen731[] = "PtlMESearch() failed";
-static const char short_gen732[] = "**ptlmeunlink";
-static const char long_gen732[] = "PtlMEUnlink() failed";
-static const char short_gen733[] = "**ptlni_fail";
-static const char long_gen733[] = "communication failure";
-static const char short_gen734[] = "**ptlnifini";
-static const char long_gen734[] = "PtlNIFini() failed";
-static const char short_gen735[] = "**ptlniinit";
-static const char long_gen735[] = "PtlNIInit() failed";
-static const char short_gen736[] = "**ptlptalloc";
-static const char long_gen736[] = "PtlPTAlloc() failed";
-static const char short_gen737[] = "**ptlptfree";
-static const char long_gen737[] = "PtlPTFree() failed";
-static const char short_gen738[] = "**ptlput";
-static const char long_gen738[] = "PtlPut() failed";
-static const char short_gen739[] = "**putenv";
-static const char long_gen739[] = "putenv failed";
-static const char short_gen740[] = "**pvarhandle";
-static const char long_gen740[] = " Performance variable handle is invalid";
-static const char short_gen741[] = "**pvarhandlenull";
-static const char long_gen741[] = " Performance variable handle is NULL";
-static const char short_gen742[] = "**pvarindex";
-static const char long_gen742[] = " Performance variable index is invalid";
-static const char short_gen743[] = "**pvarsession";
-static const char long_gen743[] = " Performance variable session is invalid";
-static const char short_gen744[] = "**pvarsessionnull";
-static const char long_gen744[] = " Performance variable session is NULL";
-static const char short_gen745[] = "**rangedup";
-static const char long_gen745[] = "The range array specifies duplicate entries";
-static const char short_gen746[] = "**rangeendinvalid";
-static const char long_gen746[] = "Some element of a range array is either negative or too large";
-static const char short_gen747[] = "**rangestartinvalid";
-static const char long_gen747[] = "Some element of a range array is either negative or too large";
-static const char short_gen748[] = "**rank";
-static const char long_gen748[] = "Invalid rank";
-static const char short_gen749[] = "**rankarray";
-static const char long_gen749[] = "Invalid rank in rank array";
-static const char short_gen750[] = "**rankdup";
-static const char long_gen750[] = "Duplicate ranks in rank array ";
-static const char short_gen751[] = "**ranklocal";
-static const char long_gen751[] = "Error specifying local_leader ";
-static const char short_gen752[] = "**rankremote";
-static const char long_gen752[] = "Error specifying remote_leader ";
-static const char short_gen753[] = "**ranksdistinct";
-static const char long_gen753[] = "Local and remote leaders must be different processes";
-static const char short_gen754[] = "**read";
-static const char long_gen754[] = "read from socket failed";
-static const char short_gen755[] = "**recv_status";
-static const char long_gen755[] = "receive status failed";
-static const char short_gen756[] = "**recvbuf_inplace";
-static const char long_gen756[] = "recvbuf cannot be MPI_IN_PLACE";
-static const char short_gen757[] = "**remove_shar_mem";
-static const char long_gen757[] = "unable to remove shared memory";
-static const char short_gen758[] = "**reqnotmsg";
-static const char long_gen758[] = " Invalid MPI_Message (MPI_Request passed)";
-static const char short_gen759[] = "**request";
-static const char long_gen759[] = "Invalid MPI_Request";
-static const char short_gen760[] = "**request_invalid_kind";
-static const char long_gen760[] = "The supplied request was invalid";
-static const char short_gen761[] = "**requestnotpersist";
-static const char long_gen761[] = "Request is not persistent in MPI_Start or MPI_Startall.";
-static const char short_gen762[] = "**requestnull";
-static const char long_gen762[] = "Null MPI_Request ";
-static const char short_gen763[] = "**requestpersistactive";
-static const char long_gen763[] = "Persistent request passed to MPI_Start or MPI_Startall is already active.";
-static const char short_gen764[] = "**revoked";
-static const char long_gen764[] = "Communication object revoked";
-static const char short_gen765[] = "**rmaattach";
-static const char long_gen765[] = "Memory cannot be attached";
-static const char short_gen766[] = "**rmaconflict";
-static const char long_gen766[] = "Conflicting accesses to window ";
-static const char short_gen767[] = "**rmadisp";
-static const char long_gen767[] = "Invalid displacement argument in RMA call ";
-static const char short_gen768[] = "**rmaflavor";
-static const char long_gen768[] = "Incorrect window flavor";
-static const char short_gen769[] = "**rmarange";
-static const char long_gen769[] = "Target memory is not contained within the window";
-static const char short_gen770[] = "**rmashared";
-static const char long_gen770[] = "Memory cannot be shared";
-static const char short_gen771[] = "**rmasize";
-static const char long_gen771[] = "Invalid size argument in RMA call";
-static const char short_gen772[] = "**rmasync";
-static const char long_gen772[] = "Wrong synchronization of RMA calls ";
-static const char short_gen773[] = "**rmatypenotatomic";
-static const char long_gen773[] = " Datatype not permitted for atomic operations";
-static const char short_gen774[] = "**root";
-static const char long_gen774[] = "Invalid root";
-static const char short_gen775[] = "**rsendnomatch";
-static const char long_gen775[] = "Ready send had no matching receive ";
-static const char short_gen776[] = "**rtspkt";
-static const char long_gen776[] = "failure occurred while attempting to send RTS packet";
-static const char short_gen777[] = "**select";
-static const char long_gen777[] = "select failed";
-static const char short_gen778[] = "**sem_destroy";
-static const char long_gen778[] = "sem_destroy() failed";
-static const char short_gen779[] = "**sem_init";
-static const char long_gen779[] = "sem_init() failed";
-static const char short_gen780[] = "**sem_post";
-static const char long_gen780[] = "sem_post() failed";
-static const char short_gen781[] = "**sem_wait";
-static const char long_gen781[] = "sem_wait() failed";
-static const char short_gen782[] = "**sendbuf_inplace";
-static const char long_gen782[] = "sendbuf cannot be MPI_IN_PLACE";
-static const char short_gen783[] = "**servicename";
-static const char long_gen783[] = "Attempt to lookup an unknown service name ";
-static const char short_gen784[] = "**setsockopt";
-static const char long_gen784[] = "setsockopt failed";
-static const char short_gen785[] = "**shm_open";
-static const char long_gen785[] = "unable to open a shared memory object";
-static const char short_gen786[] = "**shmw_badhnd";
-static const char long_gen786[] = " Invalid handle to shared memory";
-static const char short_gen787[] = "**shmw_deserbufbig";
-static const char long_gen787[] = " Size of buffer to deserialize shared memory handle is too big (> MPIU_SHMW_GHND_SZ) ";
-static const char short_gen788[] = "**shmw_gethnd";
-static const char long_gen788[] = " Unable to get shared memory handle";
-static const char short_gen789[] = "**shmw_sethnd";
-static const char long_gen789[] = " Unable to set shared memory handle";
-static const char short_gen790[] = "**shutdown";
-static const char long_gen790[] = "shutdown failed";
-static const char short_gen791[] = "**signal";
-static const char long_gen791[] = "signal() failed";
-static const char short_gen792[] = "**snprintf";
-static const char long_gen792[] = "snprintf returned an invalid number";
-static const char short_gen793[] = "**sock_accept";
-static const char long_gen793[] = "accept of socket fd failed";
-static const char short_gen794[] = "**sock_close";
-static const char long_gen794[] = " unable to close a socket";
-static const char short_gen795[] = "**sock_closed";
-static const char long_gen795[] = "socket closed";
-static const char short_gen796[] = "**sock_connect";
-static const char long_gen796[] = "connect failed";
-static const char short_gen797[] = "**sock_create";
-static const char long_gen797[] = "unable to create a socket";
-static const char short_gen798[] = "**sock_gethost";
-static const char long_gen798[] = "gethostname failed";
-static const char short_gen799[] = "**sock_init";
-static const char long_gen799[] = "unable to initialize the sock library";
-static const char short_gen800[] = "**sock_nop_accept";
-static const char long_gen800[] = "accept called without having received an op_accept";
-static const char short_gen801[] = "**sock_post_close";
-static const char long_gen801[] = "posting a close of the socket failed";
-static const char short_gen802[] = "**sock_read";
-static const char long_gen802[] = "read from socket failed";
-static const char short_gen803[] = "**sock_write";
-static const char long_gen803[] = "Unable to write to a socket";
-static const char short_gen804[] = "**socket";
-static const char long_gen804[] = "WSASocket failed";
-static const char short_gen805[] = "**sock|badbuf";
-static const char long_gen805[] = "the supplied buffer contains invalid memory";
-static const char short_gen806[] = "**sock|badhandle";
-static const char long_gen806[] = "sock contains an invalid handle";
-static const char short_gen807[] = "**sock|badhdbuf";
-static const char long_gen807[] = "a memory fault occurred while accessing the host description string";
-static const char short_gen808[] = "**sock|badhdlen";
-static const char long_gen808[] = "host description string to small to store description";
-static const char short_gen809[] = "**sock|badhdmax";
-static const char long_gen809[] = "the length of the host description string must be non-negative";
-static const char short_gen810[] = "**sock|badiovn";
-static const char long_gen810[] = "size of iov is invalid";
-static const char short_gen811[] = "**sock|badlen";
-static const char long_gen811[] = "bad length parameter(s)";
-static const char short_gen812[] = "**sock|badport";
-static const char long_gen812[] = "port number is out of range";
-static const char short_gen813[] = "**sock|badsock";
-static const char long_gen813[] = "supplied sock is corrupt";
-static const char short_gen814[] = "**sock|close_cancel";
-static const char long_gen814[] = "operation cancelled because sock was closed locally";
-static const char short_gen815[] = "**sock|closing";
-static const char long_gen815[] = "sock is in the process of being closed locally";
-static const char short_gen816[] = "**sock|closing_already";
-static const char long_gen816[] = "a close operation is already posted";
-static const char short_gen817[] = "**sock|connclosed";
-static const char long_gen817[] = "connection closed by peer";
-static const char short_gen818[] = "**sock|connfailed";
-static const char long_gen818[] = "connection failure";
-static const char short_gen819[] = "**sock|connrefused";
-static const char long_gen819[] = "connection refused";
-static const char short_gen820[] = "**sock|getport";
-static const char long_gen820[] = "failed to obtain port number of the listener";
-static const char short_gen821[] = "**sock|listener_bad_sock";
-static const char long_gen821[] = "supplied sock is not a listener";
-static const char short_gen822[] = "**sock|listener_bad_state";
-static const char long_gen822[] = "supplied listener sock is in a bad state";
-static const char short_gen823[] = "**sock|listener_read";
-static const char long_gen823[] = "read operation not allowed on a listener";
-static const char short_gen824[] = "**sock|listener_write";
-static const char long_gen824[] = "write operation not allowed on a listener";
-static const char short_gen825[] = "**sock|nosock";
-static const char long_gen825[] = "no new sock was available to accept";
-static const char short_gen826[] = "**sock|notconnected";
-static const char long_gen826[] = "sock is not connected";
-static const char short_gen827[] = "**sock|oserror";
-static const char long_gen827[] = "unexpected operating system error";
-static const char short_gen828[] = "**sock|osnomem";
-static const char long_gen828[] = "operating system routine failed due to lack of memory";
-static const char short_gen829[] = "**sock|poll|accept";
-static const char long_gen829[] = "accept failed to acquire a new socket";
-static const char short_gen830[] = "**sock|poll|bind";
-static const char long_gen830[] = "unable to bind socket to port";
-static const char short_gen831[] = "**sock|poll|eqfail";
-static const char long_gen831[] = "fatal error: failed to enqueue an event; event was lost";
-static const char short_gen832[] = "**sock|poll|eqmalloc";
-static const char long_gen832[] = "MPIU_Malloc failed to allocate memory for an event queue structure";
-static const char short_gen833[] = "**sock|poll|listen";
-static const char long_gen833[] = "listen() failed";
-static const char short_gen834[] = "**sock|poll|nodelay";
-static const char long_gen834[] = "unable to set TCP no delay attribute on socket";
-static const char short_gen835[] = "**sock|poll|nonblock";
-static const char long_gen835[] = "unable to set socket to nonblocking";
-static const char short_gen836[] = "**sock|poll|pipe";
-static const char long_gen836[] = "unable to allocate pipe to wakeup a blocking poll()";
-static const char short_gen837[] = "**sock|poll|pipenonblock";
-static const char long_gen837[] = "unable to set wakeup pipe to nonblocking";
-static const char short_gen838[] = "**sock|poll|reuseaddr";
-static const char long_gen838[] = "unable to set reuseaddr attribute on socket";
-static const char short_gen839[] = "**sock|poll|setrcvbufsz";
-static const char long_gen839[] = " unable to set the receive socket buffer size";
-static const char short_gen840[] = "**sock|poll|setsndbufsz";
-static const char long_gen840[] = " unable to set the send socket buffer size";
-static const char short_gen841[] = "**sock|poll|socket";
-static const char long_gen841[] = "unable to obtain new socket";
-static const char short_gen842[] = "**sock|poll|unhandledstate";
-static const char long_gen842[] = "encountered an unexpected state";
-static const char short_gen843[] = "**sock|poll|unhandledtype";
-static const char long_gen843[] = "encountered an unexpected sock type";
-static const char short_gen844[] = "**sock|reads";
-static const char long_gen844[] = "attempt to perform multiple simultaneous reads";
-static const char short_gen845[] = "**sock|setalloc";
-static const char long_gen845[] = "unable to allocate a new sock set object";
-static const char short_gen846[] = "**sock|sockalloc";
-static const char long_gen846[] = "unable to allocate a new sock object";
-static const char short_gen847[] = "**sock|uninit";
-static const char long_gen847[] = "Sock library has not been initialized";
-static const char short_gen848[] = "**sock|writes";
-static const char long_gen848[] = "attempt to perform multiple simultaneous writes";
-static const char short_gen849[] = "**spawn";
-static const char long_gen849[] = "Error in spawn call";
-static const char short_gen850[] = "**stride";
-static const char long_gen850[] = "Range does not terminate";
-static const char short_gen851[] = "**stridezero";
-static const char long_gen851[] = "Zero stride is invalid";
-static const char short_gen852[] = "**subarrayoflow";
-static const char long_gen852[] = "Cannot use an array of this size unless the MPI implementation defines a 64-bit MPI_Aint";
-static const char short_gen853[] = "**success";
-static const char long_gen853[] = "No MPI error";
-static const char short_gen854[] = "**tag";
-static const char long_gen854[] = "Invalid tag";
-static const char short_gen855[] = "**tcp_cleanup_fail";
-static const char long_gen855[] = "Error while cleaning up failed connection";
-static const char short_gen856[] = "**tempnam";
-static const char long_gen856[] = "tempnam failed";
-static const char short_gen857[] = "**tmpvc_connect_fail";
-static const char long_gen857[] = "Failure during connection protocol";
-static const char short_gen858[] = "**toomanycomm";
-static const char long_gen858[] = "Too many communicators";
-static const char short_gen859[] = "**toomanycommfrag";
-static const char long_gen859[] = " Cannot allocate context ID because of fragmentation";
-static const char short_gen860[] = "**toomanynbc";
-static const char long_gen860[] = " too many outstanding nonblocking collectives detected";
-static const char short_gen861[] = "**topology";
-static const char long_gen861[] = "Invalid topology";
-static const char short_gen862[] = "**topotoolarge";
-static const char long_gen862[] = "Topology size is greater than communicator size";
-static const char short_gen863[] = "**truncate";
-static const char long_gen863[] = "Message truncated";
-static const char short_gen864[] = "**typeinitbadmem";
-static const char long_gen864[] = "builtin datatype handle references invalid memory";
-static const char short_gen865[] = "**typeinitfail";
-static const char long_gen865[] = "Did not initialize name for all of the predefined datatypes";
-static const char short_gen866[] = "**typeinitminmaxloc";
-static const char long_gen866[] = " Could not determine pointer for predefined minloc or maxloc type. Initialization of those names failed.";
-static const char short_gen867[] = "**typematchnoclass";
-static const char long_gen867[] = "The value of typeclass is not one of MPI_TYPECLASS_REAL, MPI_TYPECLASS_INTEGER, or MPI_TYPECLASS_COMPLEX";
-static const char short_gen868[] = "**typematchsize";
-static const char long_gen868[] = "No MPI datatype available for the given typeclass and size";
-static const char short_gen869[] = "**typenamelen";
-static const char long_gen869[] = "Specified datatype name is too long";
-static const char short_gen870[] = "**typenotpredefined";
-static const char long_gen870[] = " Datatype must be predefined";
-static const char short_gen871[] = "**unknown";
-static const char long_gen871[] = "Unknown error. Please file a bug report.";
-static const char short_gen872[] = "**unknowngpid";
-static const char long_gen872[] = "Internal MPI error: Unknown gpid";
-static const char short_gen873[] = "**unsupporteddatarep";
-static const char long_gen873[] = "Only native data representation currently supported";
-static const char short_gen874[] = "**unweightedboth";
-static const char long_gen874[] = "Must specify MPI_UNWEIGHTED for both or neither weight arguments";
-static const char short_gen875[] = "**user";
-static const char long_gen875[] = "user defined function returned an error code";
-static const char short_gen876[] = "**vc_in_error_state";
-static const char long_gen876[] = "Connection is in error state";
-static const char short_gen877[] = "**vmsplice";
-static const char long_gen877[] = "vmsplice failed";
-static const char short_gen878[] = "**win";
-static const char long_gen878[] = "Invalid MPI_Win";
-static const char short_gen879[] = "**winInvalidOp";
-static const char long_gen879[] = " Invalid RMA operation";
-static const char short_gen880[] = "**windeserialize";
-static const char long_gen880[] = "deserializing win object";
-static const char short_gen881[] = "**windows_mutex";
-static const char long_gen881[] = "Windows mutex routine failed";
-static const char short_gen882[] = "**winflavor";
-static const char long_gen882[] = " Window flavor is not compatible with the given operation";
-static const char short_gen883[] = "**winget_oob";
-static const char long_gen883[] = "source pointer for win_get is out of bounds";
-static const char short_gen884[] = "**winnoprogress";
-static const char long_gen884[] = " Detected an error while in progress wait for RMA messages";
-static const char short_gen885[] = "**winnull";
-static const char long_gen885[] = "Null MPI_Win";
-static const char short_gen886[] = "**winput_oob";
-static const char long_gen886[] = "target pointer for win_put is out of bounds";
-static const char short_gen887[] = "**winserialize";
-static const char long_gen887[] = "serializing win object";
-static const char short_gen888[] = "**write";
-static const char long_gen888[] = "write failed";
-static const char short_gen889[] = "**writev";
-static const char long_gen889[] = "writev failed";
-static const char short_gen890[] = "**wsacleanup";
-static const char long_gen890[] = " WSACleanup failed";
-static const char short_gen891[] = "**wsasock";
-static const char long_gen891[] = "WSAStartup failed";
-static const char short_gen892[] = "**wsastartup";
-static const char long_gen892[] = " WSAStartup failed";
+static const char short_gen14[] = "**allocmem";
+static const char long_gen14[] = "Unable to allocate memory for MPI_Alloc_mem";
+static const char short_gen15[] = "**arg";
+static const char long_gen15[] = "Invalid argument";
+static const char short_gen16[] = "**argarrayneg";
+static const char long_gen16[] = "Negative value in array ";
+static const char short_gen17[] = "**argerrcode";
+static const char long_gen17[] = "Invalid error code";
+static const char short_gen18[] = "**argneg";
+static const char long_gen18[] = "Invalid argument; must be non-negative";
+static const char short_gen19[] = "**argnonpos";
+static const char long_gen19[] = "Invalid argument; must be positive";
+static const char short_gen20[] = "**argpackbuf";
+static const char long_gen20[] = "Pack buffer is too small for data";
+static const char short_gen21[] = "**argposneg";
+static const char long_gen21[] = "Value of position must be nonnegative";
+static const char short_gen22[] = "**argrange";
+static const char long_gen22[] = "Argument is not within valid range";
+static const char short_gen23[] = "**argstr_hostd";
+static const char long_gen23[] = "no space for the host description";
+static const char short_gen24[] = "**argstr_missinghost";
+static const char long_gen24[] = "Missing hostname or invalid host/port description in business card";
+static const char short_gen25[] = "**argstr_missingifname";
+static const char long_gen25[] = "Missing ifname or invalid host/port description in business card";
+static const char short_gen26[] = "**argstr_missingport";
+static const char long_gen26[] = "Missing port or invalid host/port description in business card";
+static const char short_gen27[] = "**argstr_no_port_name_tag";
+static const char long_gen27[] = "no port_name tag in MPI port. Make sure that port was created with MPI_Open_port";
+static const char short_gen28[] = "**argstr_port";
+static const char long_gen28[] = "no space for the listener port";
+static const char short_gen29[] = "**argstr_port_name_tag";
+static const char long_gen29[] = "no space for port_name tag";
+static const char short_gen30[] = "**argtoosmall";
+static const char long_gen30[] = "Invalid argument; value is too small";
+static const char short_gen31[] = "**assert";
+static const char long_gen31[] = "Invalid assert argument";
+static const char short_gen32[] = "**attrnotptr";
+static const char long_gen32[] = "The attribute value is not the address of a pointer or pointer-sized integer. A common error is to pass the address of an integer to any of the MPI_Xxx_get_attr routines on systems where the size of a pointer is larger than the size of an integer.";
+static const char short_gen33[] = "**attrsentinal";
+static const char long_gen33[] = "Internal fields in an attribute have been overwritten; possible errors in using the attribute value in user code.";
+static const char short_gen34[] = "**badbusinesscard";
+static const char long_gen34[] = "Invalid business card";
+static const char short_gen35[] = "**badcase";
+static const char long_gen35[] = "INTERNAL ERROR: unexpected value in case statement";
+static const char short_gen36[] = "**badportrange";
+static const char long_gen36[] = "MPICH_PORT_RANGE - invalid range specified";
+static const char short_gen37[] = "**base";
+static const char long_gen37[] = "Invalid base address";
+static const char short_gen38[] = "**bind";
+static const char long_gen38[] = " Unable to bind socket to address";
+static const char short_gen39[] = "**bindportrange";
+static const char long_gen39[] = " Unable to bind socket to port range";
+static const char short_gen40[] = "**blcr_mod";
+static const char long_gen40[] = "BLCR kernel module not present";
+static const char short_gen41[] = "**bsendbufsmall";
+static const char long_gen41[] = "Buffer size is smaller than MPI_BSEND_OVERHEAD";
+static const char short_gen42[] = "**bsendpending";
+static const char long_gen42[] = "Internal error - completion of Bsend requests that were deferred because of resource limits is not implemented";
+static const char short_gen43[] = "**buf_inplace";
+static const char long_gen43[] = "buffer cannot be MPI_IN_PLACE";
+static const char short_gen44[] = "**bufalias";
+static const char long_gen44[] = "Buffers must not be aliased";
+static const char short_gen45[] = "**bufbsend";
+static const char long_gen45[] = "Insufficient space in Bsend buffer";
+static const char short_gen46[] = "**bufexists";
+static const char long_gen46[] = "Buffer already attached with MPI_BUFFER_ATTACH.";
+static const char short_gen47[] = "**buffer";
+static const char long_gen47[] = "Invalid buffer pointer";
+static const char short_gen48[] = "**bufnull";
+static const char long_gen48[] = "Null buffer pointer";
+static const char short_gen49[] = "**buscard";
+static const char long_gen49[] = "unable to create a business card";
+static const char short_gen50[] = "**buscard_len";
+static const char long_gen50[] = "no space left in the business card to add a parameter";
+static const char short_gen51[] = "**cancelunknown";
+static const char long_gen51[] = "Attempt to cancel an unknown type of request";
+static const char short_gen52[] = "**cartcoordinvalid";
+static const char long_gen52[] = "Cartesian coordinate is invalid (not in range)";
+static const char short_gen53[] = "**cartdim";
+static const char long_gen53[] = "Size of Cartesian grid is larger than the size of the communicator";
+static const char short_gen54[] = "**catindex";
+static const char long_gen54[] = " Category index is invalid";
+static const char short_gen55[] = "**ch3|badmsgtype";
+static const char long_gen55[] = "request contained an invalid message type";
+static const char short_gen56[] = "**ch3|badreqtype";
+static const char long_gen56[] = "request contained an invalid request type";
+static const char short_gen57[] = "**ch3|cancelreq";
+static const char long_gen57[] = "failure occurred while sending remote cancellation request packet";
+static const char short_gen58[] = "**ch3|cancelresp";
+static const char long_gen58[] = "failure occurred while attempting to send cancel response packet";
+static const char short_gen59[] = "**ch3|cancelrndv";
+static const char long_gen59[] = "failure occurred while performing local cancellation of a rendezvous message";
+static const char short_gen60[] = "**ch3|ch3_init";
+static const char long_gen60[] = "channel initialization failed";
+static const char short_gen61[] = "**ch3|close_progress";
+static const char long_gen61[] = "an error occurred while the device was waiting for all open connections to close";
+static const char short_gen62[] = "**ch3|conn_parent";
+static const char long_gen62[] = "spawned process group was unable to connect back to the parent";
+static const char short_gen63[] = "**ch3|conntimeout";
+static const char long_gen63[] = "Connection timed out";
+static const char short_gen64[] = "**ch3|ctspkt";
+static const char long_gen64[] = "failure occurred while attempting to send CTS packet";
+static const char short_gen65[] = "**ch3|eagermsg";
+static const char long_gen65[] = "failure occurred while attempting to send an eager message";
+static const char short_gen66[] = "**ch3|get_parent_port";
+static const char long_gen66[] = "spawn process group was unable to obtain parent port name from the channel";
+static const char short_gen67[] = "**ch3|loadrecviov";
+static const char long_gen67[] = "failure occurred while loading the receive I/O vector";
+static const char short_gen68[] = "**ch3|loadsendiov";
+static const char long_gen68[] = "failure occurred while loading the send I/O vector";
+static const char short_gen69[] = "**ch3|nopktcontainermem";
+static const char long_gen69[] = "failed to allocate memory for a packet reorder container";
+static const char short_gen70[] = "**ch3|ooocancelreq";
+static const char long_gen70[] = "UNIMPLEMENTED: unable to process out-of-order cancellation requests";
+static const char short_gen71[] = "**ch3|pktarraytoosmall";
+static const char long_gen71[] = " Size of the array of packet handlers is too small";
+static const char short_gen72[] = "**ch3|pktordered";
+static const char long_gen72[] = "failure occurred while processing a reordered packet";
+static const char short_gen73[] = "**ch3|pmi_finalize";
+static const char long_gen73[] = "PMI_Finalize failed";
+static const char short_gen74[] = "**ch3|portclose";
+static const char long_gen74[] = "Port is unexpectedly closed";
+static const char short_gen75[] = "**ch3|postrecv";
+static const char long_gen75[] = "failure occurred while posting a receive for message data";
+static const char short_gen76[] = "**ch3|rma_msg";
+static const char long_gen76[] = "RMA message operation failed";
+static const char short_gen77[] = "**ch3|rmamsg";
+static const char long_gen77[] = "failure occurred while attempting to send an RMA message";
+static const char short_gen78[] = "**ch3|rtspkt";
+static const char long_gen78[] = "failure occurred while attempting to send RTS packet";
+static const char short_gen79[] = "**ch3|send_close_ack";
+static const char long_gen79[] = "an error occurred when the device attempted to acknowledge the closing of a connection";
+static const char short_gen80[] = "**ch3|senddata";
+static const char long_gen80[] = "failure occurred while attempting to send message data";
+static const char short_gen81[] = "**ch3|sock|accept";
+static const char long_gen81[] = "[ch3:sock] accepting a new connection failed";
+static const char short_gen82[] = "**ch3|sock|addrinuse";
+static const char long_gen82[] = "[ch3:sock] tcp port already in use";
+static const char short_gen83[] = "**ch3|sock|badhost";
+static const char long_gen83[] = "[ch3:soc] invalid host description";
+static const char short_gen84[] = "**ch3|sock|badpacket";
+static const char long_gen84[] = "[ch3:sock] received packet of unknow type";
+static const char short_gen85[] = "**ch3|sock|badsock";
+static const char long_gen85[] = "[ch3:sock] internal error - bad sock";
+static const char short_gen86[] = "**ch3|sock|connalloc";
+static const char long_gen86[] = "[ch3:sock] unable to allocate an internal connection structure";
+static const char short_gen87[] = "**ch3|sock|connclose";
+static const char long_gen87[] = "[ch3:sock] active connection unexpectedly closed";
+static const char short_gen88[] = "**ch3|sock|connectionfailed";
+static const char long_gen88[] = "Connection failed for virtual channel";
+static const char short_gen89[] = "**ch3|sock|connfailed";
+static const char long_gen89[] = "[ch3:sock] failed to connnect to remote process";
+static const char short_gen90[] = "**ch3|sock|connrefused";
+static const char long_gen90[] = "[ch3:sock] connection refused";
+static const char short_gen91[] = "**ch3|sock|connterm";
+static const char long_gen91[] = "[ch3:sock] active connection unexpectedly terminated";
+static const char short_gen92[] = "**ch3|sock|failure";
+static const char long_gen92[] = "[ch3:sock] unknown failure";
+static const char short_gen93[] = "**ch3|sock|handle_sock_event";
+static const char long_gen93[] = "an error occurred while handling an event returned by MPIDI_CH3I_Sock_Wait()";
+static const char short_gen94[] = "**ch3|sock|hostlookup";
+static const char long_gen94[] = "[ch3:sock] hostname lookup failed";
+static const char short_gen95[] = "**ch3|sock|immedread";
+static const char long_gen95[] = "immediate read operation failed";
+static const char short_gen96[] = "**ch3|sock|immedwrite";
+static const char long_gen96[] = "immediate write operation failed";
+static const char short_gen97[] = "**ch3|sock|open_lrecv_data";
+static const char long_gen97[] = "[ch3:sock] failed to handle open lrecv data packet";
+static const char short_gen98[] = "**ch3|sock|openlsend";
+static const char long_gen98[] = "[ch3:sock] failed to handle open lsend packet";
+static const char short_gen99[] = "**ch3|sock|postconnect";
+static const char long_gen99[] = "[ch3:sock] post connect failed";
+static const char short_gen100[] = "**ch3|sock|postread";
+static const char long_gen100[] = "attempt to post a read operation failed";
+static const char short_gen101[] = "**ch3|sock|postwrite";
+static const char long_gen101[] = "attempt to post a write operation failed";
+static const char short_gen102[] = "**ch3|sock|scconnaccept";
+static const char long_gen102[] = "[ch3:sock] failed to handle connection accept packet";
+static const char short_gen103[] = "**ch3|sock|scopenresp";
+static const char long_gen103[] = "[ch3:sock] failed to handle open response packet";
+static const char short_gen104[] = "**ch3|sock|writefailed";
+static const char long_gen104[] = "Write to socket failed";
+static const char short_gen105[] = "**ch3|syncack";
+static const char long_gen105[] = "failure occurred while attempting to send eager synchronization packet";
+static const char short_gen106[] = "**ch3|unhandled_connection_state";
+static const char long_gen106[] = "encountered an unexpected connection state";
+static const char short_gen107[] = "**ch4|invalid_shm";
+static const char long_gen107[] = "Invalid shm specified";
+static const char short_gen108[] = "**ckptpkt";
+static const char long_gen108[] = "Failed to send checkpoint marker packet";
+static const char short_gen109[] = "**close";
+static const char long_gen109[] = "close of socket failed";
+static const char short_gen110[] = "**closesocket";
+static const char long_gen110[] = "closesocket failed";
+static const char short_gen111[] = "**coll_fail";
+static const char long_gen111[] = "Failure during collective";
+static const char short_gen112[] = "**collective_size_mismatch";
+static const char long_gen112[] = "message sizes do not match across processes in the collective routine";
+static const char short_gen113[] = "**comm";
+static const char long_gen113[] = "Invalid communicator";
+static const char short_gen114[] = "**comm_fail";
+static const char long_gen114[] = "Communication error";
+static const char short_gen115[] = "**comm_fail_conn";
+static const char long_gen115[] = "Communication error during connect sequence";
+static const char short_gen116[] = "**commnotinter";
+static const char long_gen116[] = "An intercommunicator is required but an intracommunicator was provided.";
+static const char short_gen117[] = "**commnotintra";
+static const char long_gen117[] = "An intracommunicator is required but an intercommunicator was provided.";
+static const char short_gen118[] = "**commnull";
+static const char long_gen118[] = "Null communicator";
+static const char short_gen119[] = "**commperm";
+static const char long_gen119[] = "Cannot free permanent communicator";
+static const char short_gen120[] = "**cond_create";
+static const char long_gen120[] = "MPID_Thread_cond_create failed";
+static const char short_gen121[] = "**contentspredef";
+static const char long_gen121[] = "Named predefined datatypes are not permitted in MPI_Type_get_contents";
+static const char short_gen122[] = "**conversion";
+static const char long_gen122[] = "An error occurred in a user-defined data conversion function";
+static const char short_gen123[] = "**cookiepkt";
+static const char long_gen123[] = "failure occurred while attempting to send COOKIE packet";
+static const char short_gen124[] = "**count";
+static const char long_gen124[] = "Invalid count";
+static const char short_gen125[] = "**countneg";
+static const char long_gen125[] = "Negative count";
+static const char short_gen126[] = "**ctspkt";
+static const char long_gen126[] = "failure occurred while attempting to send CTS packet";
+static const char short_gen127[] = "**cvarhandle";
+static const char long_gen127[] = " Control variable handle is invalid";
+static const char short_gen128[] = "**cvarhandlenull";
+static const char long_gen128[] = " Control variable handle is NULL";
+static const char short_gen129[] = "**cvarindex";
+static const char long_gen129[] = " Control variable index is invalid";
+static const char short_gen130[] = "**darrayblock";
+static const char long_gen130[] = "Value of m must be positive for block(m) distribution";
+static const char short_gen131[] = "**darrayblock2";
+static const char long_gen131[] = "m * nprocs is less than array_size and is not valid for block(m) distribution (optional arguments: {m*nprocs}, {array_size} (int))";
+static const char short_gen132[] = "**darraycyclic";
+static const char long_gen132[] = "Value of m must be positive for a cyclic(m) distribution";
+static const char short_gen133[] = "**darraydist";
+static const char long_gen133[] = "For MPI_DISTRIBUTE_NONE, the number of processes in that dimension of the grid must be 1";
+static const char short_gen134[] = "**darrayoverflow";
+static const char long_gen134[] = "Cannot use an array of this size unless the MPI implementation defines a 64-bit MPI_Aint";
+static const char short_gen135[] = "**darrayunknown";
+static const char long_gen135[] = "Unknown distribution type ";
+static const char short_gen136[] = "**datarepextent";
+static const char long_gen136[] = "Invalid extent callback";
+static const char short_gen137[] = "**datarepname";
+static const char long_gen137[] = "Invalid datarep name";
+static const char short_gen138[] = "**datarepunsupported";
+static const char long_gen138[] = "Unsupported datarep passed to MPI_File_set_view ";
+static const char short_gen139[] = "**datarepused";
+static const char long_gen139[] = "The requested datarep name has already been specified to MPI_REGISTER_DATAREP";
+static const char short_gen140[] = "**dev|pg_create";
+static const char long_gen140[] = "unable to create a new process group";
+static const char short_gen141[] = "**dev|pg_finalize|list_not_empty";
+static const char long_gen141[] = "process group list was not empty";
+static const char short_gen142[] = "**dev|pg_init";
+static const char long_gen142[] = "unable to initialize the process group management module";
+static const char short_gen143[] = "**dev|pg_not_found";
+static const char long_gen143[] = "the specified process group object could not be located";
+static const char short_gen144[] = "**dev|selfsenddeadlock";
+static const char long_gen144[] = "DEADLOCK: attempting to send a message to the local process without a prior matching receive";
+static const char short_gen145[] = "**dev|vcrt_create";
+static const char long_gen145[] = "failed to a create VCRT";
+static const char short_gen146[] = "**dims";
+static const char long_gen146[] = "Invalid dimension argument";
+static const char short_gen147[] = "**dimsmany";
+static const char long_gen147[] = "Number of dimensions is too large ";
+static const char short_gen148[] = "**dimspartition";
+static const char long_gen148[] = "Cannot partition nodes as requested ";
+static const char short_gen149[] = "**dimszero";
+static const char long_gen149[] = "Communicator associated with zero-dimensional cartesian topology";
+static const char short_gen150[] = "**donepkt";
+static const char long_gen150[] = "failure occurred while attempting to send DONE packet";
+static const char short_gen151[] = "**drconvnotsupported";
+static const char long_gen151[] = "Read and Write datarep conversions are currently not supported by MPI-IO";
+static const char short_gen152[] = "**dtype";
+static const char long_gen152[] = "Invalid datatype";
+static const char short_gen153[] = "**dtypecommit";
+static const char long_gen153[] = "Datatype has not been committed ";
+static const char short_gen154[] = "**dtypemismatch";
+static const char long_gen154[] = "Receiving data with a datatype whose signature does not match that of the sending datatype.";
+static const char short_gen155[] = "**dtypenull";
+static const char long_gen155[] = "Null datatype";
+static const char short_gen156[] = "**dtypeperm";
+static const char long_gen156[] = "Cannot free permanent data type ";
+static const char short_gen157[] = "**dupprocesses";
+static const char long_gen157[] = "Local and remote groups in MPI_Intercomm_create must not contain the same processes";
+static const char short_gen158[] = "**dynamic_node_ids";
+static const char long_gen158[] = " Node information for dynamic processes currently is not implemented";
+static const char short_gen159[] = "**edgeoutrange";
+static const char long_gen159[] = "Edge index in graph topology is out of range";
+static const char short_gen160[] = "**enumhandle";
+static const char long_gen160[] = " Enum handle is invalid";
+static const char short_gen161[] = "**enumhandlenull";
+static const char long_gen161[] = " Enum handle is NULL";
+static const char short_gen162[] = "**eqdropped";
+static const char long_gen162[] = "Event queue overflowed";
+static const char short_gen163[] = "**errhandler";
+static const char long_gen163[] = "Invalid errhandler";
+static const char short_gen164[] = "**errhandlernull";
+static const char long_gen164[] = "Null errhandler ";
+static const char short_gen165[] = "**errhandnotfile";
+static const char long_gen165[] = "Error handler is not a file error handler";
+static const char short_gen166[] = "**errhandnotwin";
+static const char long_gen166[] = "Error handler is not a win error handler";
+static const char short_gen167[] = "**exceeded_connect_tries";
+static const char long_gen167[] = "Unable to establish connection to process";
+static const char short_gen168[] = "**f90typecomplexnone";
+static const char long_gen168[] = " No complex type with the requested range and/or precision is available";
+static const char short_gen169[] = "**f90typeintnone";
+static const char long_gen169[] = " No integer type with the requested range is available";
+static const char short_gen170[] = "**f90typerealnone";
+static const char long_gen170[] = " No real type with the requested range and/or precision is available";
+static const char short_gen171[] = "**f90typetoomany";
+static const char long_gen171[] = "Too many requests for unnamed, predefined f90 types";
+static const char short_gen172[] = "**fail";
+static const char long_gen172[] = "";
+static const char short_gen173[] = "**failure_pending";
+static const char long_gen173[] = "Request pending due to failure";
+static const char short_gen174[] = "**file";
+static const char long_gen174[] = "Invalid MPI_File";
+static const char short_gen175[] = "**fileaccess";
+static const char long_gen175[] = "Access denied to file";
+static const char short_gen176[] = "**fileamode";
+static const char long_gen176[] = "Invalid amode value in MPI_File_open ";
+static const char short_gen177[] = "**fileamodediff";
+static const char long_gen177[] = "amode must be the same on all processors";
+static const char short_gen178[] = "**fileamodeone";
+static const char long_gen178[] = "Exactly one of MPI_MODE_RDONLY, MPI_MODE_WRONLY, or MPI_MODE_RDWR must be specified";
+static const char short_gen179[] = "**fileamoderead";
+static const char long_gen179[] = "Cannot use MPI_MODE_CREATE or MPI_MODE_EXCL with MPI_MODE_RDONLY ";
+static const char short_gen180[] = "**fileamodeseq";
+static const char long_gen180[] = "Cannot specify MPI_MODE_SEQUENTIAL with MPI_MODE_RDWR";
+static const char short_gen181[] = "**fileexist";
+static const char long_gen181[] = "File exists";
+static const char short_gen182[] = "**fileinuse";
+static const char long_gen182[] = "File in use by some process";
+static const char short_gen183[] = "**filename";
+static const char long_gen183[] = "Invalid file name";
+static const char short_gen184[] = "**filenamedir";
+static const char long_gen184[] = "Invalid or missing directory";
+static const char short_gen185[] = "**filenamelong";
+static const char long_gen185[] = "Pathname too long";
+static const char short_gen186[] = "**filenoexist";
+static const char long_gen186[] = "File does not exist";
+static const char short_gen187[] = "**filenospace";
+static const char long_gen187[] = "Not enough space for file ";
+static const char short_gen188[] = "**fileopunsupported";
+static const char long_gen188[] = "Unsupported file operation ";
+static const char short_gen189[] = "**filequota";
+static const char long_gen189[] = "Quota exceeded for files";
+static const char short_gen190[] = "**filerdonly";
+static const char long_gen190[] = "Read-only file or filesystem name";
+static const char short_gen191[] = "**flag";
+static const char long_gen191[] = "invalid flag parameter";
+static const char short_gen192[] = "**ftb_connect";
+static const char long_gen192[] = "FTB_Connect failed";
+static const char short_gen193[] = "**ftb_declare_publishable_events";
+static const char long_gen193[] = "FTB_Declare_publishable_events failed";
+static const char short_gen194[] = "**gethostbyname";
+static const char long_gen194[] = "gethostbyname failed";
+static const char short_gen195[] = "**getsockname";
+static const char long_gen195[] = "getsockname failed";
+static const char short_gen196[] = "**getsockopt";
+static const char long_gen196[] = "getsockopt failed";
+static const char short_gen197[] = "**graphnnodes";
+static const char long_gen197[] = "Number of graph nodes exceeds size of communicator.";
+static const char short_gen198[] = "**group";
+static const char long_gen198[] = "Invalid group";
+static const char short_gen199[] = "**groupnotincomm";
+static const char long_gen199[] = "Specified group is not within the communicator";
+static const char short_gen200[] = "**groupnull";
+static const char long_gen200[] = "Null group";
+static const char short_gen201[] = "**groupperm";
+static const char long_gen201[] = "Cannot free permanent group";
+static const char short_gen202[] = "**hcoll_wrong_arg";
+static const char long_gen202[] = "Error in hcolrte api: wrong null argument";
+static const char short_gen203[] = "**iface_notfound";
+static const char long_gen203[] = "The network interface specified in MPIR_CVAR_CH3_NETWORK_IFACE was not found.";
+static const char short_gen204[] = "**ifname_and_hostname";
+static const char long_gen204[] = "Only one of MPIR_CVAR_CH3_INTERFACE_HOSTNAME and MPIR_CVAR_CH3_NETWORK_IFACE environment variables are allowed, but both were set.";
+static const char short_gen205[] = "**ifnameinvalid";
+static const char long_gen205[] = "Interface name was invalid in call to inet_pton";
+static const char short_gen206[] = "**indexneg";
+static const char long_gen206[] = "Index value in graph topology must be nonnegative";
+static const char short_gen207[] = "**indexnonmonotone";
+static const char long_gen207[] = "Index values in graph topology must be monotone nondecreasing";
+static const char short_gen208[] = "**inet_addr";
+static const char long_gen208[] = " inet_addr failed";
+static const char short_gen209[] = "**info";
+static const char long_gen209[] = "Invalid MPI_Info";
+static const char short_gen210[] = "**infohintparse";
+static const char long_gen210[] = "Unable to parse info hint";
+static const char short_gen211[] = "**infokey";
+static const char long_gen211[] = "Invalid key for MPI_Info ";
+static const char short_gen212[] = "**infokeyempty";
+static const char long_gen212[] = "Empty or blank key ";
+static const char short_gen213[] = "**infokeylong";
+static const char long_gen213[] = "Key is too long";
+static const char short_gen214[] = "**infokeynull";
+static const char long_gen214[] = "Null key";
+static const char short_gen215[] = "**infonkey";
+static const char long_gen215[] = "Requested nth key does not exist";
+static const char short_gen216[] = "**infonokey";
+static const char long_gen216[] = "MPI_Info key is not defined ";
+static const char short_gen217[] = "**infonull";
+static const char long_gen217[] = "Null MPI_Info ";
+static const char short_gen218[] = "**infoval";
+static const char long_gen218[] = "Invalid MPI_Info value ";
+static const char short_gen219[] = "**infovallong";
+static const char long_gen219[] = "Value is too long ";
+static const char short_gen220[] = "**infovalnull";
+static const char long_gen220[] = "Null value";
+static const char short_gen221[] = "**init_buscard";
+static const char long_gen221[] = "failed to get my business card";
+static const char short_gen222[] = "**init_progress";
+static const char long_gen222[] = "progress_init failed";
+static const char short_gen223[] = "**init_vcrt";
+static const char long_gen223[] = "failed to create VCRT";
+static const char short_gen224[] = "**initialized";
+static const char long_gen224[] = "MPI not initialized. Call MPI_Init or MPI_Init_thread first";
+static const char short_gen225[] = "**inittwice";
+static const char long_gen225[] = "Cannot call MPI_INIT or MPI_INIT_THREAD more than once";
+static const char short_gen226[] = "**inpending";
+static const char long_gen226[] = "Pending request (no error)";
+static const char short_gen227[] = "**instatus";
+static const char long_gen227[] = "See the MPI_ERROR field in MPI_Status for the error code";
+static const char short_gen228[] = "**intern";
+static const char long_gen228[] = "Internal MPI error!";
+static const char short_gen229[] = "**inttoosmall";
+static const char long_gen229[] = "An address does not fit into a Fortran INTEGER. Use MPI_Get_address instead";
+static const char short_gen230[] = "**invalid_handle";
+static const char long_gen230[] = "invalid handle";
+static const char short_gen231[] = "**invalid_knem_status";
+static const char long_gen231[] = "Invalid knem status value";
+static const char short_gen232[] = "**invalid_netmod";
+static const char long_gen232[] = "Invalid netmod specified";
+static const char short_gen233[] = "**invalid_refcount";
+static const char long_gen233[] = "invalid reference count";
+static const char short_gen234[] = "**invalidpkt";
+static const char long_gen234[] = " Invalid packet type";
+static const char short_gen235[] = "**io";
+static const char long_gen235[] = "Other I/O error ";
+static const char short_gen236[] = "**ioRMWrdwr";
+static const char long_gen236[] = "Must open file with MPI_MODE_RDWR for read-modify-write";
+static const char short_gen237[] = "**ioagnomatch";
+static const char long_gen237[] = "No aggregators match";
+static const char short_gen238[] = "**ioamodeseq";
+static const char long_gen238[] = "Cannot use this function when the file is opened with amode MPI_MODE_SEQUENTIAL ";
+static const char short_gen239[] = "**iobadcount";
+static const char long_gen239[] = "Invalid count argument";
+static const char short_gen240[] = "**iobaddisp";
+static const char long_gen240[] = "Invalid displacement argument";
+static const char short_gen241[] = "**iobadfh";
+static const char long_gen241[] = "Invalid file handle";
+static const char short_gen242[] = "**iobadoffset";
+static const char long_gen242[] = "Invalid offset argument";
+static const char short_gen243[] = "**iobadsize";
+static const char long_gen243[] = "Invalid size argument";
+static const char short_gen244[] = "**iobadwhence";
+static const char long_gen244[] = "Invalid whence argument";
+static const char short_gen245[] = "**ioctl";
+static const char long_gen245[] = "ioctl failed";
+static const char short_gen246[] = "**ioctlsocket";
+static const char long_gen246[] = " ioctl on socket failed";
+static const char short_gen247[] = "**iodatarepnomem";
+static const char long_gen247[] = "User must allocate memory for datarep";
+static const char short_gen248[] = "**iodispifseq";
+static const char long_gen248[] = "disp must be set to MPI_DISPLACEMENT_CURRENT since file was opened with MPI_MODE_SEQUENTIAL";
+static const char short_gen249[] = "**ioetype";
+static const char long_gen249[] = "Only an integral number of etypes can be accessed";
+static const char short_gen250[] = "**iofiletype";
+static const char long_gen250[] = "Filetype must be constructed out of one or more etypes";
+static const char short_gen251[] = "**iofstypeunsupported";
+static const char long_gen251[] = "Specified filesystem is not available";
+static const char short_gen252[] = "**ioneedrd";
+static const char long_gen252[] = "Read access is required to this file";
+static const char short_gen253[] = "**ionegoffset";
+static const char long_gen253[] = "Negative offset argument";
+static const char short_gen254[] = "**iopreallocrdwr";
+static const char long_gen254[] = "Must open file with MPI_MODE_RDWR to preallocate disk space";
+static const char short_gen255[] = "**iordonly";
+static const char long_gen255[] = "Cannot write to a file opened with amode MPI_MODE_RDONLY";
+static const char short_gen256[] = "**iosequnsupported";
+static const char long_gen256[] = "MPI_MODE_SEQUENTIAL not supported on this file system";
+static const char short_gen257[] = "**iosharedfailed";
+static const char long_gen257[] = "Could not access shared file pointer";
+static const char short_gen258[] = "**iosharedunsupported";
+static const char long_gen258[] = "Shared file pointers not supported";
+static const char short_gen259[] = "**iosplitcoll";
+static const char long_gen259[] = "Only one active split collective I/O operation is allowed per file handle";
+static const char short_gen260[] = "**iosplitcollnone";
+static const char long_gen260[] = "No split collective I/O operation is active";
+static const char short_gen261[] = "**iowronly";
+static const char long_gen261[] = "Cannot read from a file opened with amode MPI_MODE_WRONLY";
+static const char short_gen262[] = "**iowsrc";
+static const char long_gen262[] = "Unable to read from the file as part of a strided write operation";
+static const char short_gen263[] = "**iowswc";
+static const char long_gen263[] = "Unable to write to the file as part of a strided write operation";
+static const char short_gen264[] = "**itemindex";
+static const char long_gen264[] = " Enum item index is invalid";
+static const char short_gen265[] = "**join_portname";
+static const char long_gen265[] = "local and remote port names are the same";
+static const char short_gen266[] = "**join_recv";
+static const char long_gen266[] = "recv from the socket failed";
+static const char short_gen267[] = "**join_send";
+static const char long_gen267[] = "send on the socket failed";
+static const char short_gen268[] = "**keyval";
+static const char long_gen268[] = "Invalid keyval";
+static const char short_gen269[] = "**keyvalinvalid";
+static const char long_gen269[] = "Attribute key was MPI_KEYVAL_INVALID";
+static const char short_gen270[] = "**keyvalobj";
+static const char long_gen270[] = "Keyval was not defined for the supplied object";
+static const char short_gen271[] = "**listen";
+static const char long_gen271[] = "listen failed";
+static const char short_gen272[] = "**llc_poll";
+static const char long_gen272[] = "llc_poll failed";
+static const char short_gen273[] = "**lockassertval";
+static const char long_gen273[] = "Invalid assert argument passed to MPI_Win_lock";
+static const char short_gen274[] = "**locktype";
+static const char long_gen274[] = "Invalid lock type";
+static const char short_gen275[] = "**memcpyalias";
+static const char long_gen275[] = "memcpy arguments alias each other";
+static const char short_gen276[] = "**mkfifo";
+static const char long_gen276[] = "mkfifo failed";
+static const char short_gen277[] = "**mmap";
+static const char long_gen277[] = "unable to map memory, mmap failed";
+static const char short_gen278[] = "**mpi_abort";
+static const char long_gen278[] = "MPI_Abort failed";
+static const char short_gen279[] = "**mpi_accumulate";
+static const char long_gen279[] = "MPI_Accumulate failed";
+static const char short_gen280[] = "**mpi_add_error_class";
+static const char long_gen280[] = "MPI_Add_error_class failed";
+static const char short_gen281[] = "**mpi_add_error_code";
+static const char long_gen281[] = "MPI_Add_error_code failed";
+static const char short_gen282[] = "**mpi_add_error_string";
+static const char long_gen282[] = "MPI_Add_error_string failed";
+static const char short_gen283[] = "**mpi_address";
+static const char long_gen283[] = "MPI_Address failed";
+static const char short_gen284[] = "**mpi_allgather";
+static const char long_gen284[] = "MPI_Allgather failed";
+static const char short_gen285[] = "**mpi_allgatherv";
+static const char long_gen285[] = "MPI_Allgatherv failed";
+static const char short_gen286[] = "**mpi_alloc_mem";
+static const char long_gen286[] = "MPI_Alloc_mem failed";
+static const char short_gen287[] = "**mpi_allreduce";
+static const char long_gen287[] = "MPI_Allreduce failed";
+static const char short_gen288[] = "**mpi_alltoall";
+static const char long_gen288[] = "MPI_Alltoall failed";
+static const char short_gen289[] = "**mpi_alltoallv";
+static const char long_gen289[] = "MPI_Alltoallv failed";
+static const char short_gen290[] = "**mpi_alltoallw";
+static const char long_gen290[] = "MPI_Alltoallw failed";
+static const char short_gen291[] = "**mpi_attr_delete";
+static const char long_gen291[] = "MPI_Attr_delete failed";
+static const char short_gen292[] = "**mpi_attr_get";
+static const char long_gen292[] = "MPI_Attr_get failed";
+static const char short_gen293[] = "**mpi_attr_put";
+static const char long_gen293[] = "MPI_Attr_put failed";
+static const char short_gen294[] = "**mpi_barrier";
+static const char long_gen294[] = "MPI_Barrier failed";
+static const char short_gen295[] = "**mpi_bcast";
+static const char long_gen295[] = "MPI_Bcast failed";
+static const char short_gen296[] = "**mpi_bsend";
+static const char long_gen296[] = "MPI_Bsend failed";
+static const char short_gen297[] = "**mpi_bsend_init";
+static const char long_gen297[] = "MPI_Bsend_init failed";
+static const char short_gen298[] = "**mpi_buffer_attach";
+static const char long_gen298[] = "MPI_Buffer_attach failed";
+static const char short_gen299[] = "**mpi_buffer_detach";
+static const char long_gen299[] = "MPI_Buffer_detach failed";
+static const char short_gen300[] = "**mpi_cancel";
+static const char long_gen300[] = "MPI_Cancel failed";
+static const char short_gen301[] = "**mpi_cart_coords";
+static const char long_gen301[] = "MPI_Cart_coords failed";
+static const char short_gen302[] = "**mpi_cart_create";
+static const char long_gen302[] = "MPI_Cart_create failed";
+static const char short_gen303[] = "**mpi_cart_get";
+static const char long_gen303[] = "MPI_Cart_get failed";
+static const char short_gen304[] = "**mpi_cart_map";
+static const char long_gen304[] = "MPI_Cart_map failed";
+static const char short_gen305[] = "**mpi_cart_rank";
+static const char long_gen305[] = "MPI_Cart_rank failed";
+static const char short_gen306[] = "**mpi_cart_shift";
+static const char long_gen306[] = "MPI_Cart_shift failed";
+static const char short_gen307[] = "**mpi_cart_sub";
+static const char long_gen307[] = "MPI_Cart_sub failed";
+static const char short_gen308[] = "**mpi_cartdim_get";
+static const char long_gen308[] = "MPI_Cartdim_get failed";
+static const char short_gen309[] = "**mpi_close_port";
+static const char long_gen309[] = "MPI_Close_port failed";
+static const char short_gen310[] = "**mpi_comm_accept";
+static const char long_gen310[] = "MPI_Comm_accept failed";
+static const char short_gen311[] = "**mpi_comm_call_errhandler";
+static const char long_gen311[] = "MPI_Comm_call_errhandler failed";
+static const char short_gen312[] = "**mpi_comm_compare";
+static const char long_gen312[] = "MPI_Comm_compare failed";
+static const char short_gen313[] = "**mpi_comm_connect";
+static const char long_gen313[] = "MPI_Comm_connect failed";
+static const char short_gen314[] = "**mpi_comm_create";
+static const char long_gen314[] = "MPI_Comm_create failed";
+static const char short_gen315[] = "**mpi_comm_create_errhandler";
+static const char long_gen315[] = "MPI_Comm_create_errhandler failed";
+static const char short_gen316[] = "**mpi_comm_create_group";
+static const char long_gen316[] = "MPI_Comm_create_group failed";
+static const char short_gen317[] = "**mpi_comm_create_keyval";
+static const char long_gen317[] = "MPI_Comm_create_keyval failed";
+static const char short_gen318[] = "**mpi_comm_delete_attr";
+static const char long_gen318[] = "MPI_Comm_delete_attr failed";
+static const char short_gen319[] = "**mpi_comm_disconnect";
+static const char long_gen319[] = "MPI_Comm_disconnect failed";
+static const char short_gen320[] = "**mpi_comm_dup";
+static const char long_gen320[] = "MPI_Comm_dup failed";
+static const char short_gen321[] = "**mpi_comm_dup_with_info";
+static const char long_gen321[] = "MPI_Comm_dup_with_info failed";
+static const char short_gen322[] = "**mpi_comm_free";
+static const char long_gen322[] = "MPI_Comm_free failed";
+static const char short_gen323[] = "**mpi_comm_free_keyval";
+static const char long_gen323[] = "MPI_Comm_free_keyval failed";
+static const char short_gen324[] = "**mpi_comm_get_attr";
+static const char long_gen324[] = "MPI_Comm_get_attr failed";
+static const char short_gen325[] = "**mpi_comm_get_errhandler";
+static const char long_gen325[] = "MPI_Comm_get_errhandler failed";
+static const char short_gen326[] = "**mpi_comm_get_info";
+static const char long_gen326[] = "MPI_Comm_get_info failed";
+static const char short_gen327[] = "**mpi_comm_get_name";
+static const char long_gen327[] = "MPI_Comm_get_name failed";
+static const char short_gen328[] = "**mpi_comm_get_parent";
+static const char long_gen328[] = "MPI_Comm_get_parent failed";
+static const char short_gen329[] = "**mpi_comm_group";
+static const char long_gen329[] = "MPI_Comm_group failed";
+static const char short_gen330[] = "**mpi_comm_idup";
+static const char long_gen330[] = " MPI_Comm_idup failed";
+static const char short_gen331[] = "**mpi_comm_join";
+static const char long_gen331[] = "MPI_Comm_join failed";
+static const char short_gen332[] = "**mpi_comm_rank";
+static const char long_gen332[] = "MPI_Comm_rank failed";
+static const char short_gen333[] = "**mpi_comm_remote_group";
+static const char long_gen333[] = "MPI_Comm_remote_group failed";
+static const char short_gen334[] = "**mpi_comm_remote_size";
+static const char long_gen334[] = "MPI_Comm_remote_size failed";
+static const char short_gen335[] = "**mpi_comm_set_attr";
+static const char long_gen335[] = "MPI_Comm_set_attr failed";
+static const char short_gen336[] = "**mpi_comm_set_errhandler";
+static const char long_gen336[] = "MPI_Comm_set_errhandler failed";
+static const char short_gen337[] = "**mpi_comm_set_info";
+static const char long_gen337[] = "MPI_Comm_set_info failed";
+static const char short_gen338[] = "**mpi_comm_set_name";
+static const char long_gen338[] = "MPI_Comm_set_name failed";
+static const char short_gen339[] = "**mpi_comm_size";
+static const char long_gen339[] = "MPI_Comm_size failed";
+static const char short_gen340[] = "**mpi_comm_spawn";
+static const char long_gen340[] = "MPI_Comm_spawn failed";
+static const char short_gen341[] = "**mpi_comm_spawn_multiple";
+static const char long_gen341[] = "MPI_Comm_spawn_multiple failed";
+static const char short_gen342[] = "**mpi_comm_split";
+static const char long_gen342[] = "MPI_Comm_split failed";
+static const char short_gen343[] = "**mpi_comm_test_inter";
+static const char long_gen343[] = "MPI_Comm_test_inter failed";
+static const char short_gen344[] = "**mpi_compare_and_swap";
+static const char long_gen344[] = " MPI_Compare_and_swap failed";
+static const char short_gen345[] = "**mpi_dims_create";
+static const char long_gen345[] = "MPI_Dims_create failed";
+static const char short_gen346[] = "**mpi_dist_graph_create";
+static const char long_gen346[] = " MPI_Dist_graph_create failed";
+static const char short_gen347[] = "**mpi_dist_graph_create_adjacent";
+static const char long_gen347[] = " MPI_Dist_graph_create_adjacent failed";
+static const char short_gen348[] = "**mpi_dist_graph_neighbors";
+static const char long_gen348[] = " MPI_Dist_graph_neighbors failed";
+static const char short_gen349[] = "**mpi_dist_graph_neighbors_count";
+static const char long_gen349[] = " MPI_Dist_graph_neighbors_count failed";
+static const char short_gen350[] = "**mpi_errhandler_create";
+static const char long_gen350[] = "MPI_Errhandler_create failed";
+static const char short_gen351[] = "**mpi_errhandler_free";
+static const char long_gen351[] = "MPI_Errhandler_free failed";
+static const char short_gen352[] = "**mpi_errhandler_get";
+static const char long_gen352[] = "MPI_Errhandler_get failed";
+static const char short_gen353[] = "**mpi_errhandler_set";
+static const char long_gen353[] = "MPI_Errhandler_set failed";
+static const char short_gen354[] = "**mpi_error_class";
+static const char long_gen354[] = "MPI_Error_class failed";
+static const char short_gen355[] = "**mpi_error_string";
+static const char long_gen355[] = "MPI_Error_string failed";
+static const char short_gen356[] = "**mpi_exscan";
+static const char long_gen356[] = "MPI_Exscan failed";
+static const char short_gen357[] = "**mpi_fetch_and_op";
+static const char long_gen357[] = "MPI_Fetch_and_op failed";
+static const char short_gen358[] = "**mpi_file_create_errhandler";
+static const char long_gen358[] = "MPI_File_create_errhandler failed";
+static const char short_gen359[] = "**mpi_file_get_errhandler";
+static const char long_gen359[] = "MPI_File_get_errhandler failed";
+static const char short_gen360[] = "**mpi_file_set_errhandler";
+static const char long_gen360[] = "MPI_File_set_errhandler failed";
+static const char short_gen361[] = "**mpi_finalize";
+static const char long_gen361[] = "MPI_Finalize failed";
+static const char short_gen362[] = "**mpi_finalized";
+static const char long_gen362[] = "MPI_Finalized failed";
+static const char short_gen363[] = "**mpi_free_mem";
+static const char long_gen363[] = "MPI_Free_mem failed";
+static const char short_gen364[] = "**mpi_gather";
+static const char long_gen364[] = "MPI_Gather failed";
+static const char short_gen365[] = "**mpi_gatherv";
+static const char long_gen365[] = "MPI_Gatherv failed";
+static const char short_gen366[] = "**mpi_get";
+static const char long_gen366[] = "MPI_Get failed";
+static const char short_gen367[] = "**mpi_get_accumulate";
+static const char long_gen367[] = "MPI_Get_accumulate failed";
+static const char short_gen368[] = "**mpi_get_address";
+static const char long_gen368[] = "MPI_Get_address failed";
+static const char short_gen369[] = "**mpi_get_count";
+static const char long_gen369[] = "MPI_Get_count failed";
+static const char short_gen370[] = "**mpi_get_elements";
+static const char long_gen370[] = "MPI_Get_elements failed";
+static const char short_gen371[] = "**mpi_get_elements_x";
+static const char long_gen371[] = " MPI_Get_elements_x failed";
+static const char short_gen372[] = "**mpi_get_library_version";
+static const char long_gen372[] = "MPI_Get_library_version failed";
+static const char short_gen373[] = "**mpi_get_processor_name";
+static const char long_gen373[] = "MPI_Get_processor_name failed";
+static const char short_gen374[] = "**mpi_get_version";
+static const char long_gen374[] = "MPI_Get_version failed";
+static const char short_gen375[] = "**mpi_graph_create";
+static const char long_gen375[] = "MPI_Graph_create failed";
+static const char short_gen376[] = "**mpi_graph_get";
+static const char long_gen376[] = "MPI_Graph_get failed";
+static const char short_gen377[] = "**mpi_graph_map";
+static const char long_gen377[] = "MPI_Graph_map failed";
+static const char short_gen378[] = "**mpi_graph_neighbors";
+static const char long_gen378[] = "MPI_Graph_neighbors failed";
+static const char short_gen379[] = "**mpi_graph_neighbors_count";
+static const char long_gen379[] = "MPI_Graph_neighbors_count failed";
+static const char short_gen380[] = "**mpi_graphdims_get";
+static const char long_gen380[] = "MPI_Graphdims_get failed";
+static const char short_gen381[] = "**mpi_grequest_complete";
+static const char long_gen381[] = "MPI_Grequest_complete failed";
+static const char short_gen382[] = "**mpi_grequest_start";
+static const char long_gen382[] = "MPI_Grequest_start failed";
+static const char short_gen383[] = "**mpi_group_compare";
+static const char long_gen383[] = "MPI_Group_compare failed";
+static const char short_gen384[] = "**mpi_group_difference";
+static const char long_gen384[] = "MPI_Group_difference failed";
+static const char short_gen385[] = "**mpi_group_excl";
+static const char long_gen385[] = "MPI_Group_excl failed";
+static const char short_gen386[] = "**mpi_group_free";
+static const char long_gen386[] = "MPI_Group_free failed";
+static const char short_gen387[] = "**mpi_group_incl";
+static const char long_gen387[] = "MPI_Group_incl failed";
+static const char short_gen388[] = "**mpi_group_intersection";
+static const char long_gen388[] = "MPI_Group_intersection failed";
+static const char short_gen389[] = "**mpi_group_range_excl";
+static const char long_gen389[] = "MPI_Group_range_excl failed";
+static const char short_gen390[] = "**mpi_group_range_incl";
+static const char long_gen390[] = "MPI_Group_range_incl failed";
+static const char short_gen391[] = "**mpi_group_rank";
+static const char long_gen391[] = "MPI_Group_rank failed";
+static const char short_gen392[] = "**mpi_group_size";
+static const char long_gen392[] = "MPI_Group_size failed";
+static const char short_gen393[] = "**mpi_group_translate_ranks";
+static const char long_gen393[] = "MPI_Group_translate_ranks failed";
+static const char short_gen394[] = "**mpi_group_union";
+static const char long_gen394[] = "MPI_Group_union failed";
+static const char short_gen395[] = "**mpi_iallgather";
+static const char long_gen395[] = " MPI_Iallgather failed";
+static const char short_gen396[] = "**mpi_iallgatherv";
+static const char long_gen396[] = " MPI_Iallgatherv failed";
+static const char short_gen397[] = "**mpi_iallreduce";
+static const char long_gen397[] = " MPI_Iallreduce failed";
+static const char short_gen398[] = "**mpi_ialltoall";
+static const char long_gen398[] = " MPI_Ialltoall failed";
+static const char short_gen399[] = "**mpi_ialltoallv";
+static const char long_gen399[] = " MPI_Ialltoallv failed";
+static const char short_gen400[] = "**mpi_ialltoallw";
+static const char long_gen400[] = " MPI_Ialltoallw failed";
+static const char short_gen401[] = "**mpi_ibarrier";
+static const char long_gen401[] = " MPI_Ibarrier failed";
+static const char short_gen402[] = "**mpi_ibcast";
+static const char long_gen402[] = " MPI_Ibcast failed";
+static const char short_gen403[] = "**mpi_ibsend";
+static const char long_gen403[] = "MPI_Ibsend failed";
+static const char short_gen404[] = "**mpi_iexscan";
+static const char long_gen404[] = " MPI_Iexscan failed";
+static const char short_gen405[] = "**mpi_igather";
+static const char long_gen405[] = " MPI_Igather failed";
+static const char short_gen406[] = "**mpi_igatherv";
+static const char long_gen406[] = " MPI_Igatherv failed";
+static const char short_gen407[] = "**mpi_improbe";
+static const char long_gen407[] = " MPI_Improbe failed";
+static const char short_gen408[] = "**mpi_imrecv";
+static const char long_gen408[] = " MPI_Imrecv failed";
+static const char short_gen409[] = "**mpi_ineighbor_allgather";
+static const char long_gen409[] = " MPI_Ineighbor_allgather failed";
+static const char short_gen410[] = "**mpi_ineighbor_allgatherv";
+static const char long_gen410[] = " MPI_Ineighbor_allgatherv failed";
+static const char short_gen411[] = "**mpi_ineighbor_alltoall";
+static const char long_gen411[] = " MPI_Ineighbor_alltoall failed";
+static const char short_gen412[] = "**mpi_ineighbor_alltoallv";
+static const char long_gen412[] = " MPI_Ineighbor_alltoallv failed";
+static const char short_gen413[] = "**mpi_ineighbor_alltoallw";
+static const char long_gen413[] = " MPI_Ineighbor_alltoallw failed";
+static const char short_gen414[] = "**mpi_info_create";
+static const char long_gen414[] = "MPI_Info_create failed";
+static const char short_gen415[] = "**mpi_info_delete";
+static const char long_gen415[] = "MPI_Info_delete failed";
+static const char short_gen416[] = "**mpi_info_dup";
+static const char long_gen416[] = "MPI_Info_dup failed";
+static const char short_gen417[] = "**mpi_info_free";
+static const char long_gen417[] = "MPI_Info_free failed";
+static const char short_gen418[] = "**mpi_info_get";
+static const char long_gen418[] = "MPI_Info_get failed";
+static const char short_gen419[] = "**mpi_info_get_nkeys";
+static const char long_gen419[] = "MPI_Info_get_nkeys failed";
+static const char short_gen420[] = "**mpi_info_get_nthkey";
+static const char long_gen420[] = "MPI_Info_get_nthkey failed";
+static const char short_gen421[] = "**mpi_info_get_valuelen";
+static const char long_gen421[] = "MPI_Info_get_valuelen failed";
+static const char short_gen422[] = "**mpi_info_set";
+static const char long_gen422[] = "MPI_Info_set failed";
+static const char short_gen423[] = "**mpi_init";
+static const char long_gen423[] = "MPI_Init failed";
+static const char short_gen424[] = "**mpi_init_thread";
+static const char long_gen424[] = "MPI_Init_thread failed";
+static const char short_gen425[] = "**mpi_initialized";
+static const char long_gen425[] = "MPI_Initialized failed";
+static const char short_gen426[] = "**mpi_intercomm_create";
+static const char long_gen426[] = "MPI_Intercomm_create failed";
+static const char short_gen427[] = "**mpi_intercomm_merge";
+static const char long_gen427[] = "MPI_Intercomm_merge failed";
+static const char short_gen428[] = "**mpi_iprobe";
+static const char long_gen428[] = "MPI_Iprobe failed";
+static const char short_gen429[] = "**mpi_irecv";
+static const char long_gen429[] = "MPI_Irecv failed";
+static const char short_gen430[] = "**mpi_ireduce";
+static const char long_gen430[] = " MPI_Ireduce failed";
+static const char short_gen431[] = "**mpi_ireduce_scatter";
+static const char long_gen431[] = " MPI_Ireduce_scatter failed";
+static const char short_gen432[] = "**mpi_ireduce_scatter_block";
+static const char long_gen432[] = " MPI_Ireduce_scatter_block failed";
+static const char short_gen433[] = "**mpi_irsend";
+static const char long_gen433[] = "MPI_Irsend failed";
+static const char short_gen434[] = "**mpi_is_thread_main";
+static const char long_gen434[] = "MPI_Is_thread_main failed";
+static const char short_gen435[] = "**mpi_iscan";
+static const char long_gen435[] = " MPI_Iscan failed";
+static const char short_gen436[] = "**mpi_iscatter";
+static const char long_gen436[] = " MPI_Iscatter failed";
+static const char short_gen437[] = "**mpi_iscatterv";
+static const char long_gen437[] = " MPI_Iscatterv failed";
+static const char short_gen438[] = "**mpi_isend";
+static const char long_gen438[] = "MPI_Isend failed";
+static const char short_gen439[] = "**mpi_issend";
+static const char long_gen439[] = "MPI_Issend failed";
+static const char short_gen440[] = "**mpi_keyval_create";
+static const char long_gen440[] = "MPI_Keyval_create failed";
+static const char short_gen441[] = "**mpi_keyval_free";
+static const char long_gen441[] = "MPI_Keyval_free failed";
+static const char short_gen442[] = "**mpi_lookup_name";
+static const char long_gen442[] = "MPI_Lookup_name failed";
+static const char short_gen443[] = "**mpi_mprobe";
+static const char long_gen443[] = " MPI_Mprobe failed";
+static const char short_gen444[] = "**mpi_mrecv";
+static const char long_gen444[] = " MPI_Mrecv failed";
+static const char short_gen445[] = "**mpi_neighbor_allgather";
+static const char long_gen445[] = " MPI_Neighbor_allgather failed";
+static const char short_gen446[] = "**mpi_neighbor_allgatherv";
+static const char long_gen446[] = " MPI_Neighbor_allgatherv failed";
+static const char short_gen447[] = "**mpi_neighbor_alltoall";
+static const char long_gen447[] = " MPI_Neighbor_alltoall failed";
+static const char short_gen448[] = "**mpi_neighbor_alltoallv";
+static const char long_gen448[] = " MPI_Neighbor_alltoallv failed";
+static const char short_gen449[] = "**mpi_neighbor_alltoallw";
+static const char long_gen449[] = " MPI_Neighbor_alltoallw failed";
+static const char short_gen450[] = "**mpi_op_commutative";
+static const char long_gen450[] = "MPI_Op_commutative failed";
+static const char short_gen451[] = "**mpi_op_create";
+static const char long_gen451[] = "MPI_Op_create failed";
+static const char short_gen452[] = "**mpi_op_free";
+static const char long_gen452[] = "MPI_Op_free failed";
+static const char short_gen453[] = "**mpi_open_port";
+static const char long_gen453[] = "MPI_Open_port failed";
+static const char short_gen454[] = "**mpi_pack";
+static const char long_gen454[] = "MPI_Pack failed";
+static const char short_gen455[] = "**mpi_pack_external";
+static const char long_gen455[] = "MPI_Pack_external failed";
+static const char short_gen456[] = "**mpi_pack_external_size";
+static const char long_gen456[] = "MPI_Pack_external_size failed";
+static const char short_gen457[] = "**mpi_pack_size";
+static const char long_gen457[] = "MPI_Pack_size failed";
+static const char short_gen458[] = "**mpi_probe";
+static const char long_gen458[] = "MPI_Probe failed";
+static const char short_gen459[] = "**mpi_publish_name";
+static const char long_gen459[] = "MPI_Publish_name failed";
+static const char short_gen460[] = "**mpi_put";
+static const char long_gen460[] = "MPI_Put failed";
+static const char short_gen461[] = "**mpi_query_thread";
+static const char long_gen461[] = "MPI_Query_thread failed";
+static const char short_gen462[] = "**mpi_raccumulate";
+static const char long_gen462[] = "MPI_Raccumulate failed";
+static const char short_gen463[] = "**mpi_recv";
+static const char long_gen463[] = "MPI_Recv failed";
+static const char short_gen464[] = "**mpi_recv_init";
+static const char long_gen464[] = "MPI_Recv_init failed";
+static const char short_gen465[] = "**mpi_reduce";
+static const char long_gen465[] = "MPI_Reduce failed";
+static const char short_gen466[] = "**mpi_reduce_local";
+static const char long_gen466[] = "MPI_Reduce_local failed";
+static const char short_gen467[] = "**mpi_reduce_scatter";
+static const char long_gen467[] = "MPI_Reduce_scatter failed";
+static const char short_gen468[] = "**mpi_reduce_scatter_block";
+static const char long_gen468[] = "MPI_Reduce_scatter_block failed";
+static const char short_gen469[] = "**mpi_register_datarep";
+static const char long_gen469[] = "MPI_Register_datarep failed";
+static const char short_gen470[] = "**mpi_request_free";
+static const char long_gen470[] = "MPI_Request_free failed";
+static const char short_gen471[] = "**mpi_request_get_status";
+static const char long_gen471[] = "MPI_Request_get_status failed";
+static const char short_gen472[] = "**mpi_rget";
+static const char long_gen472[] = "MPI_Rget failed";
+static const char short_gen473[] = "**mpi_rget_accumulate";
+static const char long_gen473[] = "MPI_Rget_accumulate failed";
+static const char short_gen474[] = "**mpi_rput";
+static const char long_gen474[] = "MPI_Rput failed";
+static const char short_gen475[] = "**mpi_rsend";
+static const char long_gen475[] = "MPI_Rsend failed";
+static const char short_gen476[] = "**mpi_rsend_init";
+static const char long_gen476[] = "MPI_Rsend_init failed";
+static const char short_gen477[] = "**mpi_scan";
+static const char long_gen477[] = "MPI_Scan failed";
+static const char short_gen478[] = "**mpi_scatter";
+static const char long_gen478[] = "MPI_Scatter failed";
+static const char short_gen479[] = "**mpi_scatterv";
+static const char long_gen479[] = "MPI_Scatterv failed";
+static const char short_gen480[] = "**mpi_send";
+static const char long_gen480[] = "MPI_Send failed";
+static const char short_gen481[] = "**mpi_send_init";
+static const char long_gen481[] = "MPI_Send_init failed";
+static const char short_gen482[] = "**mpi_sendrecv";
+static const char long_gen482[] = "MPI_Sendrecv failed";
+static const char short_gen483[] = "**mpi_sendrecv_replace";
+static const char long_gen483[] = "MPI_Sendrecv_replace failed";
+static const char short_gen484[] = "**mpi_ssend";
+static const char long_gen484[] = "MPI_Ssend failed";
+static const char short_gen485[] = "**mpi_ssend_init";
+static const char long_gen485[] = "MPI_Ssend_init failed";
+static const char short_gen486[] = "**mpi_start";
+static const char long_gen486[] = "MPI_Start failed";
+static const char short_gen487[] = "**mpi_startall";
+static const char long_gen487[] = "MPI_Start_all failed";
+static const char short_gen488[] = "**mpi_status_set_cancelled";
+static const char long_gen488[] = "MPI_Status_set_cancelled failed";
+static const char short_gen489[] = "**mpi_status_set_elements";
+static const char long_gen489[] = "MPI_Status_set_elements failed";
+static const char short_gen490[] = "**mpi_status_set_elements_x";
+static const char long_gen490[] = " MPI_Status_set_elements_x failed";
+static const char short_gen491[] = "**mpi_t_category_changed";
+static const char long_gen491[] = " MPI_T_category_changed failed";
+static const char short_gen492[] = "**mpi_t_category_get_categories";
+static const char long_gen492[] = " MPI_T_category_get_categories failed";
+static const char short_gen493[] = "**mpi_t_category_get_cvars";
+static const char long_gen493[] = " MPI_T_category_get_cvars failed";
+static const char short_gen494[] = "**mpi_t_category_get_info";
+static const char long_gen494[] = " MPI_T_category_get_info failed";
+static const char short_gen495[] = "**mpi_t_category_get_num";
+static const char long_gen495[] = " MPI_T_category_get_num failed";
+static const char short_gen496[] = "**mpi_t_category_get_pvars";
+static const char long_gen496[] = " MPI_T_category_get_pvars failed";
+static const char short_gen497[] = "**mpi_t_cvar_get_info";
+static const char long_gen497[] = " MPI_T_cvar_get_info failed";
+static const char short_gen498[] = "**mpi_t_cvar_get_num";
+static const char long_gen498[] = " MPI_T_cvar_get_num failed";
+static const char short_gen499[] = "**mpi_t_cvar_handle_alloc";
+static const char long_gen499[] = " MPI_T_cvar_handle_alloc failed";
+static const char short_gen500[] = "**mpi_t_cvar_handle_free";
+static const char long_gen500[] = " MPI_T_cvar_handle_free failed";
+static const char short_gen501[] = "**mpi_t_cvar_read";
+static const char long_gen501[] = " MPI_T_cvar_read failed";
+static const char short_gen502[] = "**mpi_t_cvar_write";
+static const char long_gen502[] = " MPI_T_cvar_write failed";
+static const char short_gen503[] = "**mpi_t_enum_get_info";
+static const char long_gen503[] = " MPI_T_enum_get_info failed";
+static const char short_gen504[] = "**mpi_t_enum_get_item";
+static const char long_gen504[] = " MPI_T_enum_get_item failed";
+static const char short_gen505[] = "**mpi_t_finalize";
+static const char long_gen505[] = " MPI_T_finalize failed";
+static const char short_gen506[] = "**mpi_t_pvar_get_info";
+static const char long_gen506[] = " MPI_T_pvar_get_info failed";
+static const char short_gen507[] = "**mpi_t_pvar_get_num";
+static const char long_gen507[] = " MPI_T_pvar_get_num failed";
+static const char short_gen508[] = "**mpi_t_pvar_handle_alloc";
+static const char long_gen508[] = " MPI_T_pvar_handle_alloc failed";
+static const char short_gen509[] = "**mpi_t_pvar_handle_free";
+static const char long_gen509[] = " MPI_T_pvar_handle_free failed";
+static const char short_gen510[] = "**mpi_t_pvar_read";
+static const char long_gen510[] = " MPI_T_pvar_read failed";
+static const char short_gen511[] = "**mpi_t_pvar_readreset";
+static const char long_gen511[] = " MPI_T_pvar_readreset failed";
+static const char short_gen512[] = "**mpi_t_pvar_reset";
+static const char long_gen512[] = " MPI_T_pvar_reset failed";
+static const char short_gen513[] = "**mpi_t_pvar_session_create";
+static const char long_gen513[] = " MPI_T_pvar_session_create failed";
+static const char short_gen514[] = "**mpi_t_pvar_session_free";
+static const char long_gen514[] = " MPI_T_pvar_session_free failed";
+static const char short_gen515[] = "**mpi_t_pvar_start";
+static const char long_gen515[] = " MPI_T_pvar_start failed";
+static const char short_gen516[] = "**mpi_t_pvar_stop";
+static const char long_gen516[] = " MPI_T_pvar_stop failed";
+static const char short_gen517[] = "**mpi_t_pvar_write";
+static const char long_gen517[] = " MPI_T_pvar_write failed";
+static const char short_gen518[] = "**mpi_test";
+static const char long_gen518[] = "MPI_Test failed";
+static const char short_gen519[] = "**mpi_test_cancelled";
+static const char long_gen519[] = "MPI_Test_cancelled failed";
+static const char short_gen520[] = "**mpi_testall";
+static const char long_gen520[] = "MPI_Testall failed";
+static const char short_gen521[] = "**mpi_testany";
+static const char long_gen521[] = "MPI_Testany failed";
+static const char short_gen522[] = "**mpi_testsome";
+static const char long_gen522[] = "MPI_Testsome failed";
+static const char short_gen523[] = "**mpi_topo_test";
+static const char long_gen523[] = "MPI_Topo_test failed";
+static const char short_gen524[] = "**mpi_type_commit";
+static const char long_gen524[] = "MPI_Type_commit failed";
+static const char short_gen525[] = "**mpi_type_contiguous";
+static const char long_gen525[] = "MPI_Type_continuous failed";
+static const char short_gen526[] = "**mpi_type_create_darray";
+static const char long_gen526[] = "MPI_Type_create_darray failed";
+static const char short_gen527[] = "**mpi_type_create_f90_complex";
+static const char long_gen527[] = "MPI_Type_create_f90_complex failed";
+static const char short_gen528[] = "**mpi_type_create_f90_int";
+static const char long_gen528[] = "MPI_Type_create_f90_int failed";
+static const char short_gen529[] = "**mpi_type_create_f90_real";
+static const char long_gen529[] = "MPI_Type_create_f90_real failed";
+static const char short_gen530[] = "**mpi_type_create_hindexed";
+static const char long_gen530[] = "MPI_Type_create_hindexed failed";
+static const char short_gen531[] = "**mpi_type_create_hindexed_block";
+static const char long_gen531[] = "MPI_Type_create_hindexed_block failed";
+static const char short_gen532[] = "**mpi_type_create_hvector";
+static const char long_gen532[] = "MPI_Type_create_hvector failed";
+static const char short_gen533[] = "**mpi_type_create_indexed_block";
+static const char long_gen533[] = "MPI_Type_create_indexed_block failed";
+static const char short_gen534[] = "**mpi_type_create_keyval";
+static const char long_gen534[] = "MPI_Type_create_keyval failed";
+static const char short_gen535[] = "**mpi_type_create_resized";
+static const char long_gen535[] = "MPI_Type_create_resized failed";
+static const char short_gen536[] = "**mpi_type_create_struct";
+static const char long_gen536[] = "MPI_Type_create_struct failed";
+static const char short_gen537[] = "**mpi_type_create_subarray";
+static const char long_gen537[] = "MPI_Type_create_subarray failed";
+static const char short_gen538[] = "**mpi_type_delete_attr";
+static const char long_gen538[] = "MPI_Type_delete_attr failed";
+static const char short_gen539[] = "**mpi_type_dup";
+static const char long_gen539[] = "MPI_Type_dup failed";
+static const char short_gen540[] = "**mpi_type_extent";
+static const char long_gen540[] = "MPI_Type_extent failed";
+static const char short_gen541[] = "**mpi_type_free";
+static const char long_gen541[] = "MPI_Type_free failed";
+static const char short_gen542[] = "**mpi_type_free_keyval";
+static const char long_gen542[] = "MPI_Type_free_keyval failed";
+static const char short_gen543[] = "**mpi_type_get_attr";
+static const char long_gen543[] = "MPI_Type_get_attr failed";
+static const char short_gen544[] = "**mpi_type_get_contents";
+static const char long_gen544[] = "MPI_Type_get_contents failed";
+static const char short_gen545[] = "**mpi_type_get_envelope";
+static const char long_gen545[] = "MPI_Type_get_envelope failed";
+static const char short_gen546[] = "**mpi_type_get_extent";
+static const char long_gen546[] = "MPI_Type_get_extent failed";
+static const char short_gen547[] = "**mpi_type_get_extent_x";
+static const char long_gen547[] = " MPI_Type_get_extent_x failed";
+static const char short_gen548[] = "**mpi_type_get_name";
+static const char long_gen548[] = "MPI_Type_get_name failed";
+static const char short_gen549[] = "**mpi_type_get_true_extent";
+static const char long_gen549[] = "MPI_Type_get_true_extent failed";
+static const char short_gen550[] = "**mpi_type_get_true_extent_x";
+static const char long_gen550[] = " MPI_Type_get_true_extent_x failed";
+static const char short_gen551[] = "**mpi_type_hindexed";
+static const char long_gen551[] = "MPI_Type_hindexed failed";
+static const char short_gen552[] = "**mpi_type_hvector";
+static const char long_gen552[] = "MPI_Type_hvector failed";
+static const char short_gen553[] = "**mpi_type_indexed";
+static const char long_gen553[] = "MPI_Type_indexed failed";
+static const char short_gen554[] = "**mpi_type_lb";
+static const char long_gen554[] = "MPI_Type_lb failed";
+static const char short_gen555[] = "**mpi_type_match_size";
+static const char long_gen555[] = "MPI_Type_match_size failed";
+static const char short_gen556[] = "**mpi_type_set_attr";
+static const char long_gen556[] = "MPI_Type_set_attr failed";
+static const char short_gen557[] = "**mpi_type_set_name";
+static const char long_gen557[] = "MPI_Type_set_name failed";
+static const char short_gen558[] = "**mpi_type_size";
+static const char long_gen558[] = "MPI_Type_size failed";
+static const char short_gen559[] = "**mpi_type_size_x";
+static const char long_gen559[] = " MPI_Type_size_x failed";
+static const char short_gen560[] = "**mpi_type_struct";
+static const char long_gen560[] = "MPI_Type_struct failed";
+static const char short_gen561[] = "**mpi_type_ub";
+static const char long_gen561[] = "MPI_Type_ub failed";
+static const char short_gen562[] = "**mpi_type_vector";
+static const char long_gen562[] = "MPI_Type_vector failed";
+static const char short_gen563[] = "**mpi_unpack";
+static const char long_gen563[] = "MPI_Unpack failed";
+static const char short_gen564[] = "**mpi_unpack_external";
+static const char long_gen564[] = "MPI_Unpack_external failed";
+static const char short_gen565[] = "**mpi_unpublish_name";
+static const char long_gen565[] = "MPI_Unpublish_name failed";
+static const char short_gen566[] = "**mpi_wait";
+static const char long_gen566[] = "MPI_Wait failed";
+static const char short_gen567[] = "**mpi_waitall";
+static const char long_gen567[] = "MPI_Waitall failed";
+static const char short_gen568[] = "**mpi_waitany";
+static const char long_gen568[] = "MPI_Waitany failed";
+static const char short_gen569[] = "**mpi_waitsome";
+static const char long_gen569[] = "MPI_Waitsome failed";
+static const char short_gen570[] = "**mpi_win_allocate";
+static const char long_gen570[] = "MPI_Win_allocate failed";
+static const char short_gen571[] = "**mpi_win_allocate_shared";
+static const char long_gen571[] = "MPI_Win_allocate_shared failed";
+static const char short_gen572[] = "**mpi_win_attach";
+static const char long_gen572[] = "MPI_Win_attach failed";
+static const char short_gen573[] = "**mpi_win_call_errhandler";
+static const char long_gen573[] = "MPI_Win_call_errhandler failed";
+static const char short_gen574[] = "**mpi_win_complete";
+static const char long_gen574[] = "MPI_Win_complete failed";
+static const char short_gen575[] = "**mpi_win_create";
+static const char long_gen575[] = "MPI_Win_create failed";
+static const char short_gen576[] = "**mpi_win_create_dynamic";
+static const char long_gen576[] = "MPI_Win_create_dynamic failed";
+static const char short_gen577[] = "**mpi_win_create_errhandler";
+static const char long_gen577[] = "MPI_Win_create_errhandler failed";
+static const char short_gen578[] = "**mpi_win_create_keyval";
+static const char long_gen578[] = "MPI_Win_create_keyval failed";
+static const char short_gen579[] = "**mpi_win_delete_attr";
+static const char long_gen579[] = "MPI_Win_delete_attr failed";
+static const char short_gen580[] = "**mpi_win_detach";
+static const char long_gen580[] = "MPI_Win_detach failed";
+static const char short_gen581[] = "**mpi_win_fence";
+static const char long_gen581[] = "MPI_Win_fence failed";
+static const char short_gen582[] = "**mpi_win_flush";
+static const char long_gen582[] = "MPI_Win_flush failed";
+static const char short_gen583[] = "**mpi_win_flush_all";
+static const char long_gen583[] = "MPI_Win_flush_all failed";
+static const char short_gen584[] = "**mpi_win_flush_local";
+static const char long_gen584[] = "MPI_Win_flush_local failed";
+static const char short_gen585[] = "**mpi_win_flush_local_all";
+static const char long_gen585[] = "MPI_Win_flush_local_all failed";
+static const char short_gen586[] = "**mpi_win_free";
+static const char long_gen586[] = "MPI_Win_free failed";
+static const char short_gen587[] = "**mpi_win_free_keyval";
+static const char long_gen587[] = "MPI_Win_free_keyval failed";
+static const char short_gen588[] = "**mpi_win_get_attr";
+static const char long_gen588[] = "MPI_Win_get_attr failed";
+static const char short_gen589[] = "**mpi_win_get_errhandler";
+static const char long_gen589[] = "MPI_Win_get_errhandler failed";
+static const char short_gen590[] = "**mpi_win_get_group";
+static const char long_gen590[] = "MPI_Win_get_group failed";
+static const char short_gen591[] = "**mpi_win_get_info";
+static const char long_gen591[] = "MPI_Win_get_info failed";
+static const char short_gen592[] = "**mpi_win_get_name";
+static const char long_gen592[] = "MPI_Win_get_name failed";
+static const char short_gen593[] = "**mpi_win_lock";
+static const char long_gen593[] = "MPI_Win_lock failed";
+static const char short_gen594[] = "**mpi_win_lock_all";
+static const char long_gen594[] = "MPI_Win_lock_all failed";
+static const char short_gen595[] = "**mpi_win_post";
+static const char long_gen595[] = "MPI_Win_post failed";
+static const char short_gen596[] = "**mpi_win_set_attr";
+static const char long_gen596[] = "MPI_Win_set_attr failed";
+static const char short_gen597[] = "**mpi_win_set_errhandler";
+static const char long_gen597[] = "MPI_Win_set_errhandler failed";
+static const char short_gen598[] = "**mpi_win_set_info";
+static const char long_gen598[] = "MPI_Win_set_info failed";
+static const char short_gen599[] = "**mpi_win_set_name";
+static const char long_gen599[] = "MPI_Win_set_name failed";
+static const char short_gen600[] = "**mpi_win_shared_query";
+static const char long_gen600[] = "MPI_Win_shared_query failed";
+static const char short_gen601[] = "**mpi_win_start";
+static const char long_gen601[] = "MPI_Win_start failed";
+static const char short_gen602[] = "**mpi_win_sync";
+static const char long_gen602[] = "MPI_Win_sync failed";
+static const char short_gen603[] = "**mpi_win_test";
+static const char long_gen603[] = "MPI_Win_test failed";
+static const char short_gen604[] = "**mpi_win_unlock";
+static const char long_gen604[] = "MPI_Win_unlock failed";
+static const char short_gen605[] = "**mpi_win_unlock_all";
+static const char long_gen605[] = "MPI_Win_unlock_all failed";
+static const char short_gen606[] = "**mpi_win_wait";
+static const char long_gen606[] = "MPI_Win_wait failed";
+static const char short_gen607[] = "**mpir_comm_get_attr";
+static const char long_gen607[] = "MPIR_Comm_get_attr failed";
+static const char short_gen608[] = "**mpir_type_get_attr";
+static const char long_gen608[] = "MPIR_Type_get_attr failed";
+static const char short_gen609[] = "**mpir_wingetattr";
+static const char long_gen609[] = "MPII_Win_get_attr failed";
+static const char short_gen610[] = "**mpitinit";
+static const char long_gen610[] = " MPI tool information interface is not initialized";
+static const char short_gen611[] = "**mpix_comm_agree";
+static const char long_gen611[] = "MPIX_Comm_agree failed";
+static const char short_gen612[] = "**mpix_comm_failure_ack";
+static const char long_gen612[] = "MPIX_Comm_failure_ack failed";
+static const char short_gen613[] = "**mpix_comm_failure_get_acked";
+static const char long_gen613[] = "MPIX_Comm_failure_get_acked failed";
+static const char short_gen614[] = "**mpix_comm_revoke";
+static const char long_gen614[] = "MPIX_Comm_revoke failed";
+static const char short_gen615[] = "**mpix_comm_shrink";
+static const char long_gen615[] = "MPIX_Comm_shrink failed";
+static const char short_gen616[] = "**mpix_grequest_class_create";
+static const char long_gen616[] = " MPIX_Grequest_class_create failed";
+static const char short_gen617[] = "**msgnotreq";
+static const char long_gen617[] = " Invalid MPI_Request (MPI_Message passed)";
+static const char short_gen618[] = "**mutex_create";
+static const char long_gen618[] = "MPID_Thread_mutex_create failed";
+static const char short_gen619[] = "**mxm_config_read_opts";
+static const char long_gen619[] = " mxm_config_read_opts failed";
+static const char short_gen620[] = "**mxm_ep_connect";
+static const char long_gen620[] = " mxm_ep_connect failed";
+static const char short_gen621[] = "**mxm_ep_create";
+static const char long_gen621[] = " mxm_ep_create failed";
+static const char short_gen622[] = "**mxm_ep_disconnect";
+static const char long_gen622[] = " mxm_ep_disconnect failed";
+static const char short_gen623[] = "**mxm_ep_get_address";
+static const char long_gen623[] = " mxm_ep_get_address failed";
+static const char short_gen624[] = "**mxm_init";
+static const char long_gen624[] = " mxm_init failed";
+static const char short_gen625[] = "**mxm_mq_create";
+static const char long_gen625[] = " mxm_mq_create failed";
+static const char short_gen626[] = "**mxm_set_am_handler";
+static const char long_gen626[] = " mxm_set_am_handler failed";
+static const char short_gen627[] = "**namepubfile";
+static const char long_gen627[] = "Unable to publish service name";
+static const char short_gen628[] = "**namepubnotfound";
+static const char long_gen628[] = "Lookup failed for service name";
+static const char short_gen629[] = "**namepubnotpub";
+static const char long_gen629[] = "Lookup failed for service name ";
+static const char short_gen630[] = "**namepubnotunpub";
+static const char long_gen630[] = "Failed to unpublish service name";
+static const char short_gen631[] = "**nameservice";
+static const char long_gen631[] = "Invalid service name (see MPI_Publish_name)";
+static const char short_gen632[] = "**noConnInfoToString";
+static const char long_gen632[] = "No ConnInfoToString routine defined for this process group";
+static const char short_gen633[] = "**noerrclasses";
+static const char long_gen633[] = "No more user-defined error classes";
+static const char short_gen634[] = "**noerrcodes";
+static const char long_gen634[] = "No more user-defined error codes";
+static const char short_gen635[] = "**nomem";
+static const char long_gen635[] = "Out of memory";
+static const char short_gen636[] = "**nomem2";
+static const char long_gen636[] = "Unable to allocate memory (probably out of memory)";
+static const char short_gen637[] = "**nomemreq";
+static const char long_gen637[] = "failure occurred while allocating memory for a request object";
+static const char short_gen638[] = "**nonamepub";
+static const char long_gen638[] = "No name publishing service available";
+static const char short_gen639[] = "**notcarttopo";
+static const char long_gen639[] = "No Cartesian topology associated with this communicator";
+static const char short_gen640[] = "**notcstatignore";
+static const char long_gen640[] = "MPI_STATUS_IGNORE cannot be passed to MPI_Status_c2f()";
+static const char short_gen641[] = "**notdistgraphtopo";
+static const char long_gen641[] = "No Distributed Graph topology associated with this communicator";
+static const char short_gen642[] = "**notfstatignore";
+static const char long_gen642[] = "MPI_STATUS_IGNORE cannot be passed to MPI_Status_f2c()";
+static const char short_gen643[] = "**notgenreq";
+static const char long_gen643[] = "Attempt to complete a request with MPI_GREQUEST_COMPLETE that was not started with MPI_GREQUEST_START";
+static const char short_gen644[] = "**notgraphtopo";
+static const char long_gen644[] = "No Graph topology associated with this communicator";
+static const char short_gen645[] = "**notimpl";
+static const char long_gen645[] = "Function not implemented";
+static const char short_gen646[] = "**notopology";
+static const char long_gen646[] = "No topology associated with this communicator";
+static const char short_gen647[] = "**notsame";
+static const char long_gen647[] = "Inconsistent arguments to collective routine ";
+static const char short_gen648[] = "**null_buff_ptr";
+static const char long_gen648[] = "Error in hcolrte api: buffer pointer is NULL for non DTE_ZERO INLINE data representation";
+static const char short_gen649[] = "**nullptr";
+static const char long_gen649[] = "Null pointer";
+static const char short_gen650[] = "**nullptrtype";
+static const char long_gen650[] = "Null pointer";
+static const char short_gen651[] = "**ofi_avclose";
+static const char long_gen651[] = "OFI av close failed";
+static const char short_gen652[] = "**ofi_avmap";
+static const char long_gen652[] = "OFI get address vector map failed";
+static const char short_gen653[] = "**ofi_avopen";
+static const char long_gen653[] = "OFI address vector open failed";
+static const char short_gen654[] = "**ofi_bind";
+static const char long_gen654[] = "OFI resource bind failure";
+static const char short_gen655[] = "**ofi_cancel";
+static const char long_gen655[] = "OFI cancel failed";
+static const char short_gen656[] = "**ofi_cqclose";
+static const char long_gen656[] = "OFI cq close failed";
+static const char short_gen657[] = "**ofi_domainclose";
+static const char long_gen657[] = "OFI domain close failed";
+static const char short_gen658[] = "**ofi_ep_enable";
+static const char long_gen658[] = "OFI endpoint enable failed";
+static const char short_gen659[] = "**ofi_epclose";
+static const char long_gen659[] = "OFI endpoint close failed";
+static const char short_gen660[] = "**ofi_fabricclose";
+static const char long_gen660[] = "OFI fabric close failed";
+static const char short_gen661[] = "**ofi_getinfo";
+static const char long_gen661[] = "OFI getinfo() failed";
+static const char short_gen662[] = "**ofi_getname";
+static const char long_gen662[] = "OFI get endpoint name failed";
+static const char short_gen663[] = "**ofi_opencq";
+static const char long_gen663[] = "OFI event queue create failure";
+static const char short_gen664[] = "**ofi_opendomain";
+static const char long_gen664[] = "OFI domain open failure";
+static const char short_gen665[] = "**ofi_openep";
+static const char long_gen665[] = "OFI endpoint open failed";
+static const char short_gen666[] = "**ofi_openfabric";
+static const char long_gen666[] = "OFI fabric open failure";
+static const char short_gen667[] = "**ofi_peek";
+static const char long_gen667[] = "OFI peek failed";
+static const char short_gen668[] = "**ofi_poll";
+static const char long_gen668[] = "OFI poll failed";
+static const char short_gen669[] = "**ofi_trecv";
+static const char long_gen669[] = "OFI tagged recvfrom failed";
+static const char short_gen670[] = "**ofi_tsend";
+static const char long_gen670[] = "OFI tagged sendto failed";
+static const char short_gen671[] = "**ofid_addrinfo";
+static const char long_gen671[] = "OFI addrinfo() failure";
+static const char short_gen672[] = "**ofid_alias";
+static const char long_gen672[] = "OFI cq alias failed";
+static const char short_gen673[] = "**ofid_avclose";
+static const char long_gen673[] = "OFI av close failed";
+static const char short_gen674[] = "**ofid_avlookup";
+static const char long_gen674[] = "OFI get address vector lookup failed";
+static const char short_gen675[] = "**ofid_avmap";
+static const char long_gen675[] = "OFI get address vector map failed";
+static const char short_gen676[] = "**ofid_avopen";
+static const char long_gen676[] = "OFI address vector open failed";
+static const char short_gen677[] = "**ofid_avsync";
+static const char long_gen677[] = "OFI get address vector sync failed";
+static const char short_gen678[] = "**ofid_bind";
+static const char long_gen678[] = "OFI resource bind failure";
+static const char short_gen679[] = "**ofid_cntr_wait";
+static const char long_gen679[] = "OFI Counter wait failed";
+static const char short_gen680[] = "**ofid_cqclose";
+static const char long_gen680[] = "OFI cq close failed";
+static const char short_gen681[] = "**ofid_ctrlcancel";
+static const char long_gen681[] = "OFI Control cancel failed";
+static const char short_gen682[] = "**ofid_domainclose";
+static const char long_gen682[] = "OFI domain close failed";
+static const char short_gen683[] = "**ofid_ep";
+static const char long_gen683[] = "OFI endpoint open failed";
+static const char short_gen684[] = "**ofid_ep_enable";
+static const char long_gen684[] = "OFI EP enable failure";
+static const char short_gen685[] = "**ofid_epclose";
+static const char long_gen685[] = "OFI endpoint close failed";
+static const char short_gen686[] = "**ofid_epsync";
+static const char long_gen686[] = "OFI synchronization failed";
+static const char short_gen687[] = "**ofid_fabric";
+static const char long_gen687[] = "OFI fi_fabric failure";
+static const char short_gen688[] = "**ofid_getname";
+static const char long_gen688[] = "OFI get endpoint name failed";
+static const char short_gen689[] = "**ofid_getopt";
+static const char long_gen689[] = "OFI getopt failed";
+static const char short_gen690[] = "**ofid_inject";
+static const char long_gen690[] = "OFI inject failed";
+static const char short_gen691[] = "**ofid_mr_reg";
+static const char long_gen691[] = "OFI memory registration failed";
+static const char short_gen692[] = "**ofid_mr_unreg";
+static const char long_gen692[] = "OFI memory deregistration failed";
+static const char short_gen693[] = "**ofid_opencq";
+static const char long_gen693[] = "OFI event queue create failure";
+static const char short_gen694[] = "**ofid_openct";
+static const char long_gen694[] = "OFI event counter create failure";
+static const char short_gen695[] = "**ofid_opendomain";
+static const char long_gen695[] = "OFI fi_open domain failure";
+static const char short_gen696[] = "**ofid_peek";
+static const char long_gen696[] = "OFI peek failed";
+static const char short_gen697[] = "**ofid_pmi";
+static const char long_gen697[] = "PMI_Init() failure";
+static const char short_gen698[] = "**ofid_poll";
+static const char long_gen698[] = "OFI poll failed";
+static const char short_gen699[] = "**ofid_prepost";
+static const char long_gen699[] = "OFI preposting receives failed";
+static const char short_gen700[] = "**ofid_rdma_atomicto";
+static const char long_gen700[] = "OFI rdma atomicto failed";
+static const char short_gen701[] = "**ofid_rdma_cswap";
+static const char long_gen701[] = "OFI rdma cswap failed";
+static const char short_gen702[] = "**ofid_rdma_inject_write";
+static const char long_gen702[] = "OFI rdma write immediatefailed";
+static const char short_gen703[] = "**ofid_rdma_readfrom";
+static const char long_gen703[] = "OFI rdma read failed";
+static const char short_gen704[] = "**ofid_rdma_write";
+static const char long_gen704[] = "OFI rdma write failed";
+static const char short_gen705[] = "**ofid_rma_init";
+static const char long_gen705[] = "OFI RMA Initialization failed";
+static const char short_gen706[] = "**ofid_send";
+static const char long_gen706[] = "OFI send failed";
+static const char short_gen707[] = "**ofid_setopt";
+static const char long_gen707[] = "OFI setopt failed";
+static const char short_gen708[] = "**ofid_tinject";
+static const char long_gen708[] = "OFI tagged inject failed";
+static const char short_gen709[] = "**ofid_trecv";
+static const char long_gen709[] = "OFI tagged recv failed";
+static const char short_gen710[] = "**ofid_trecvsync";
+static const char long_gen710[] = "OFI tagged recv sync failed";
+static const char short_gen711[] = "**ofid_tsend";
+static const char long_gen711[] = "OFI tagged send failed";
+static const char short_gen712[] = "**ofid_tsendsync";
+static const char long_gen712[] = "OFI tagged send sync failed";
+static const char short_gen713[] = "**op";
+static const char long_gen713[] = "Invalid MPI_Op";
+static const char short_gen714[] = "**open";
+static const char long_gen714[] = "open failed";
+static const char short_gen715[] = "**openportfailed";
+static const char long_gen715[] = "Unable to establish a port";
+static const char short_gen716[] = "**opnotallowed";
+static const char long_gen716[] = "MPI_Op operation is not allowed in this routine";
+static const char short_gen717[] = "**opnotpredefined";
+static const char long_gen717[] = "only predefined ops are valid";
+static const char short_gen718[] = "**opnull";
+static const char long_gen718[] = "Null MPI_Op";
+static const char short_gen719[] = "**opundefined";
+static const char long_gen719[] = "MPI_Op operation not defined for this datatype ";
+static const char short_gen720[] = "**oremote_fail";
+static const char long_gen720[] = "open failed on a remote node";
+static const char short_gen721[] = "**other";
+static const char long_gen721[] = "Other MPI error";
+static const char short_gen722[] = "**outofmemory";
+static const char long_gen722[] = "outofmemory failed";
+static const char short_gen723[] = "**permattr";
+static const char long_gen723[] = "Cannot set permanent attribute";
+static const char short_gen724[] = "**permop";
+static const char long_gen724[] = "Cannot free permanent MPI_Op ";
+static const char short_gen725[] = "**pglookup";
+static const char long_gen725[] = "unable to find the process group structure";
+static const char short_gen726[] = "**pmi_barrier";
+static const char long_gen726[] = "PMI_Barrier failed";
+static const char short_gen727[] = "**pmi_get_appnum";
+static const char long_gen727[] = "PMI_Get_appnum failed";
+static const char short_gen728[] = "**pmi_get_id";
+static const char long_gen728[] = "PMI_Get_id failed";
+static const char short_gen729[] = "**pmi_get_id_length_max";
+static const char long_gen729[] = "PMI_Get_id_length_max failed";
+static const char short_gen730[] = "**pmi_get_rank";
+static const char long_gen730[] = "PMI_Get_rank failed";
+static const char short_gen731[] = "**pmi_get_size";
+static const char long_gen731[] = "PMI_Get_size failed";
+static const char short_gen732[] = "**pmi_get_universe_size";
+static const char long_gen732[] = "PMI_Get_universe_size failed";
+static const char short_gen733[] = "**pmi_init";
+static const char long_gen733[] = "PMI_Init failed";
+static const char short_gen734[] = "**pmi_jobgetid";
+static const char long_gen734[] = " PMI2 Job_GetID failed";
+static const char short_gen735[] = "**pmi_kvs_commit";
+static const char long_gen735[] = "PMI_KVS_Commit failed";
+static const char short_gen736[] = "**pmi_kvs_get";
+static const char long_gen736[] = "PMI_KVS_Get failed";
+static const char short_gen737[] = "**pmi_kvs_get_my_name";
+static const char long_gen737[] = "PMI_KVS_Get_my_name failed";
+static const char short_gen738[] = "**pmi_kvs_get_name_length_max";
+static const char long_gen738[] = "PMI_KVS_Get_name_length_max failed";
+static const char short_gen739[] = "**pmi_kvs_get_value_length_max";
+static const char long_gen739[] = "PMI_KVS_Get_value_length_max failed";
+static const char short_gen740[] = "**pmi_kvs_put";
+static const char long_gen740[] = "PMI_KVS_Put failed";
+static const char short_gen741[] = "**pmi_kvsget";
+static const char long_gen741[] = " PMI2 KVS_Get failed";
+static const char short_gen742[] = "**pmi_spawn_multiple";
+static const char long_gen742[] = "PMI_Spawn_multiple failed";
+static const char short_gen743[] = "**poll";
+static const char long_gen743[] = "poll of socket fds failed";
+static const char short_gen744[] = "**port";
+static const char long_gen744[] = "Invalid port";
+static const char short_gen745[] = "**portexist";
+static const char long_gen745[] = "Named port does not exist";
+static const char short_gen746[] = "**proc_failed";
+static const char long_gen746[] = "Process failed";
+static const char short_gen747[] = "**procnamefailed";
+static const char long_gen747[] = "Failed to get processor name";
+static const char short_gen748[] = "**progress_sock_wait";
+static const char long_gen748[] = "sock_wait failed";
+static const char short_gen749[] = "**progresshookstoomany";
+static const char long_gen749[] = " too many progress hooks are registered";
+static const char short_gen750[] = "**pthread_lock";
+static const char long_gen750[] = "pthread_lock failed";
+static const char short_gen751[] = "**pthread_mutex";
+static const char long_gen751[] = "pthread mutex routine failed";
+static const char short_gen752[] = "**pthread_unlock";
+static const char long_gen752[] = "pthread_unlock failed";
+static const char short_gen753[] = "**ptleqalloc";
+static const char long_gen753[] = "PtlEQAlloc() failed";
+static const char short_gen754[] = "**ptleqget";
+static const char long_gen754[] = "PtlEQGet() failed";
+static const char short_gen755[] = "**ptlget";
+static const char long_gen755[] = "PtlGet() failed";
+static const char short_gen756[] = "**ptlgetid";
+static const char long_gen756[] = "PtlGetId() failed";
+static const char short_gen757[] = "**ptlinit";
+static const char long_gen757[] = "PtlInit() failed";
+static const char short_gen758[] = "**ptlmdbind";
+static const char long_gen758[] = "PtlMDBind() failed";
+static const char short_gen759[] = "**ptlmdrelease";
+static const char long_gen759[] = "PtlMDRelease() failed";
+static const char short_gen760[] = "**ptlmeappend";
+static const char long_gen760[] = "PtlMEAppend() failed";
+static const char short_gen761[] = "**ptlmesearch";
+static const char long_gen761[] = "PtlMESearch() failed";
+static const char short_gen762[] = "**ptlmeunlink";
+static const char long_gen762[] = "PtlMEUnlink() failed";
+static const char short_gen763[] = "**ptlni_fail";
+static const char long_gen763[] = "communication failure";
+static const char short_gen764[] = "**ptlnifini";
+static const char long_gen764[] = "PtlNIFini() failed";
+static const char short_gen765[] = "**ptlniinit";
+static const char long_gen765[] = "PtlNIInit() failed";
+static const char short_gen766[] = "**ptlptalloc";
+static const char long_gen766[] = "PtlPTAlloc() failed";
+static const char short_gen767[] = "**ptlptfree";
+static const char long_gen767[] = "PtlPTFree() failed";
+static const char short_gen768[] = "**ptlput";
+static const char long_gen768[] = "PtlPut() failed";
+static const char short_gen769[] = "**putenv";
+static const char long_gen769[] = "putenv failed";
+static const char short_gen770[] = "**pvarhandle";
+static const char long_gen770[] = " Performance variable handle is invalid";
+static const char short_gen771[] = "**pvarhandlenull";
+static const char long_gen771[] = " Performance variable handle is NULL";
+static const char short_gen772[] = "**pvarindex";
+static const char long_gen772[] = " Performance variable index is invalid";
+static const char short_gen773[] = "**pvarsession";
+static const char long_gen773[] = " Performance variable session is invalid";
+static const char short_gen774[] = "**pvarsessionnull";
+static const char long_gen774[] = " Performance variable session is NULL";
+static const char short_gen775[] = "**rangedup";
+static const char long_gen775[] = "The range array specifies duplicate entries";
+static const char short_gen776[] = "**rangeendinvalid";
+static const char long_gen776[] = "Some element of a range array is either negative or too large";
+static const char short_gen777[] = "**rangestartinvalid";
+static const char long_gen777[] = "Some element of a range array is either negative or too large";
+static const char short_gen778[] = "**rank";
+static const char long_gen778[] = "Invalid rank";
+static const char short_gen779[] = "**rankarray";
+static const char long_gen779[] = "Invalid rank in rank array";
+static const char short_gen780[] = "**rankdup";
+static const char long_gen780[] = "Duplicate ranks in rank array ";
+static const char short_gen781[] = "**ranklocal";
+static const char long_gen781[] = "Error specifying local_leader ";
+static const char short_gen782[] = "**rankremote";
+static const char long_gen782[] = "Error specifying remote_leader ";
+static const char short_gen783[] = "**ranksdistinct";
+static const char long_gen783[] = "Local and remote leaders must be different processes";
+static const char short_gen784[] = "**read";
+static const char long_gen784[] = "read from socket failed";
+static const char short_gen785[] = "**recv_status";
+static const char long_gen785[] = "receive status failed";
+static const char short_gen786[] = "**recvbuf_inplace";
+static const char long_gen786[] = "recvbuf cannot be MPI_IN_PLACE";
+static const char short_gen787[] = "**reqnotmsg";
+static const char long_gen787[] = " Invalid MPI_Message (MPI_Request passed)";
+static const char short_gen788[] = "**request";
+static const char long_gen788[] = "Invalid MPI_Request";
+static const char short_gen789[] = "**request_invalid_kind";
+static const char long_gen789[] = "The supplied request was invalid";
+static const char short_gen790[] = "**requestnotpersist";
+static const char long_gen790[] = "Request is not persistent in MPI_Start or MPI_Startall.";
+static const char short_gen791[] = "**requestnull";
+static const char long_gen791[] = "Null MPI_Request ";
+static const char short_gen792[] = "**requestpersistactive";
+static const char long_gen792[] = "Persistent request passed to MPI_Start or MPI_Startall is already active.";
+static const char short_gen793[] = "**revoked";
+static const char long_gen793[] = "Communication object revoked";
+static const char short_gen794[] = "**rmaattach";
+static const char long_gen794[] = "Memory cannot be attached";
+static const char short_gen795[] = "**rmaconflict";
+static const char long_gen795[] = "Conflicting accesses to window ";
+static const char short_gen796[] = "**rmadisp";
+static const char long_gen796[] = "Invalid displacement argument in RMA call ";
+static const char short_gen797[] = "**rmaflavor";
+static const char long_gen797[] = "Incorrect window flavor";
+static const char short_gen798[] = "**rmarange";
+static const char long_gen798[] = "Target memory is not contained within the window";
+static const char short_gen799[] = "**rmashared";
+static const char long_gen799[] = "Memory cannot be shared";
+static const char short_gen800[] = "**rmasize";
+static const char long_gen800[] = "Invalid size argument in RMA call";
+static const char short_gen801[] = "**rmasync";
+static const char long_gen801[] = "Wrong synchronization of RMA calls ";
+static const char short_gen802[] = "**rmatypenotatomic";
+static const char long_gen802[] = " Datatype not permitted for atomic operations";
+static const char short_gen803[] = "**root";
+static const char long_gen803[] = "Invalid root";
+static const char short_gen804[] = "**rsendnomatch";
+static const char long_gen804[] = "Ready send had no matching receive ";
+static const char short_gen805[] = "**rtspkt";
+static const char long_gen805[] = "failure occurred while attempting to send RTS packet";
+static const char short_gen806[] = "**select";
+static const char long_gen806[] = "select failed";
+static const char short_gen807[] = "**sem_destroy";
+static const char long_gen807[] = "sem_destroy() failed";
+static const char short_gen808[] = "**sem_init";
+static const char long_gen808[] = "sem_init() failed";
+static const char short_gen809[] = "**sem_post";
+static const char long_gen809[] = "sem_post() failed";
+static const char short_gen810[] = "**sem_wait";
+static const char long_gen810[] = "sem_wait() failed";
+static const char short_gen811[] = "**sendbuf_inplace";
+static const char long_gen811[] = "sendbuf cannot be MPI_IN_PLACE";
+static const char short_gen812[] = "**servicename";
+static const char long_gen812[] = "Attempt to lookup an unknown service name ";
+static const char short_gen813[] = "**setsockopt";
+static const char long_gen813[] = "setsockopt failed";
+static const char short_gen814[] = "**shm_open";
+static const char long_gen814[] = "unable to open a shared memory object";
+static const char short_gen815[] = "**signal";
+static const char long_gen815[] = "signal() failed";
+static const char short_gen816[] = "**snprintf";
+static const char long_gen816[] = "snprintf returned an invalid number";
+static const char short_gen817[] = "**sock_accept";
+static const char long_gen817[] = "accept of socket fd failed";
+static const char short_gen818[] = "**sock_close";
+static const char long_gen818[] = " unable to close a socket";
+static const char short_gen819[] = "**sock_closed";
+static const char long_gen819[] = "socket closed";
+static const char short_gen820[] = "**sock_connect";
+static const char long_gen820[] = "connect failed";
+static const char short_gen821[] = "**sock_create";
+static const char long_gen821[] = "unable to create a socket";
+static const char short_gen822[] = "**sock_gethost";
+static const char long_gen822[] = "gethostname failed";
+static const char short_gen823[] = "**sock_post_close";
+static const char long_gen823[] = "posting a close of the socket failed";
+static const char short_gen824[] = "**sock_read";
+static const char long_gen824[] = "read from socket failed";
+static const char short_gen825[] = "**sock_write";
+static const char long_gen825[] = "Unable to write to a socket";
+static const char short_gen826[] = "**sock|badbuf";
+static const char long_gen826[] = "the supplied buffer contains invalid memory";
+static const char short_gen827[] = "**sock|badhandle";
+static const char long_gen827[] = "sock contains an invalid handle";
+static const char short_gen828[] = "**sock|badhdbuf";
+static const char long_gen828[] = "a memory fault occurred while accessing the host description string";
+static const char short_gen829[] = "**sock|badhdlen";
+static const char long_gen829[] = "host description string to small to store description";
+static const char short_gen830[] = "**sock|badhdmax";
+static const char long_gen830[] = "the length of the host description string must be non-negative";
+static const char short_gen831[] = "**sock|badiovn";
+static const char long_gen831[] = "size of iov is invalid";
+static const char short_gen832[] = "**sock|badlen";
+static const char long_gen832[] = "bad length parameter(s)";
+static const char short_gen833[] = "**sock|badport";
+static const char long_gen833[] = "port number is out of range";
+static const char short_gen834[] = "**sock|badsock";
+static const char long_gen834[] = "supplied sock is corrupt";
+static const char short_gen835[] = "**sock|close_cancel";
+static const char long_gen835[] = "operation cancelled because sock was closed locally";
+static const char short_gen836[] = "**sock|closing";
+static const char long_gen836[] = "sock is in the process of being closed locally";
+static const char short_gen837[] = "**sock|closing_already";
+static const char long_gen837[] = "a close operation is already posted";
+static const char short_gen838[] = "**sock|connclosed";
+static const char long_gen838[] = "connection closed by peer";
+static const char short_gen839[] = "**sock|connfailed";
+static const char long_gen839[] = "connection failure";
+static const char short_gen840[] = "**sock|connrefused";
+static const char long_gen840[] = "connection refused";
+static const char short_gen841[] = "**sock|getport";
+static const char long_gen841[] = "failed to obtain port number of the listener";
+static const char short_gen842[] = "**sock|listener_bad_sock";
+static const char long_gen842[] = "supplied sock is not a listener";
+static const char short_gen843[] = "**sock|listener_bad_state";
+static const char long_gen843[] = "supplied listener sock is in a bad state";
+static const char short_gen844[] = "**sock|listener_read";
+static const char long_gen844[] = "read operation not allowed on a listener";
+static const char short_gen845[] = "**sock|listener_write";
+static const char long_gen845[] = "write operation not allowed on a listener";
+static const char short_gen846[] = "**sock|nosock";
+static const char long_gen846[] = "no new sock was available to accept";
+static const char short_gen847[] = "**sock|notconnected";
+static const char long_gen847[] = "sock is not connected";
+static const char short_gen848[] = "**sock|oserror";
+static const char long_gen848[] = "unexpected operating system error";
+static const char short_gen849[] = "**sock|osnomem";
+static const char long_gen849[] = "operating system routine failed due to lack of memory";
+static const char short_gen850[] = "**sock|poll|accept";
+static const char long_gen850[] = "accept failed to acquire a new socket";
+static const char short_gen851[] = "**sock|poll|bind";
+static const char long_gen851[] = "unable to bind socket to port";
+static const char short_gen852[] = "**sock|poll|eqfail";
+static const char long_gen852[] = "fatal error: failed to enqueue an event; event was lost";
+static const char short_gen853[] = "**sock|poll|eqmalloc";
+static const char long_gen853[] = "MPL_malloc failed to allocate memory for an event queue structure";
+static const char short_gen854[] = "**sock|poll|listen";
+static const char long_gen854[] = "listen() failed";
+static const char short_gen855[] = "**sock|poll|nodelay";
+static const char long_gen855[] = "unable to set TCP no delay attribute on socket";
+static const char short_gen856[] = "**sock|poll|nonblock";
+static const char long_gen856[] = "unable to set socket to nonblocking";
+static const char short_gen857[] = "**sock|poll|pipe";
+static const char long_gen857[] = "unable to allocate pipe to wakeup a blocking poll()";
+static const char short_gen858[] = "**sock|poll|pipenonblock";
+static const char long_gen858[] = "unable to set wakeup pipe to nonblocking";
+static const char short_gen859[] = "**sock|poll|reuseaddr";
+static const char long_gen859[] = "unable to set reuseaddr attribute on socket";
+static const char short_gen860[] = "**sock|poll|setrcvbufsz";
+static const char long_gen860[] = " unable to set the receive socket buffer size";
+static const char short_gen861[] = "**sock|poll|setsndbufsz";
+static const char long_gen861[] = " unable to set the send socket buffer size";
+static const char short_gen862[] = "**sock|poll|socket";
+static const char long_gen862[] = "unable to obtain new socket";
+static const char short_gen863[] = "**sock|poll|unhandledstate";
+static const char long_gen863[] = "encountered an unexpected state";
+static const char short_gen864[] = "**sock|poll|unhandledtype";
+static const char long_gen864[] = "encountered an unexpected sock type";
+static const char short_gen865[] = "**sock|reads";
+static const char long_gen865[] = "attempt to perform multiple simultaneous reads";
+static const char short_gen866[] = "**sock|setalloc";
+static const char long_gen866[] = "unable to allocate a new sock set object";
+static const char short_gen867[] = "**sock|sockalloc";
+static const char long_gen867[] = "unable to allocate a new sock object";
+static const char short_gen868[] = "**sock|uninit";
+static const char long_gen868[] = "Sock library has not been initialized";
+static const char short_gen869[] = "**sock|writes";
+static const char long_gen869[] = "attempt to perform multiple simultaneous writes";
+static const char short_gen870[] = "**spawn";
+static const char long_gen870[] = "Error in spawn call";
+static const char short_gen871[] = "**stride";
+static const char long_gen871[] = "Range does not terminate";
+static const char short_gen872[] = "**stridezero";
+static const char long_gen872[] = "Zero stride is invalid";
+static const char short_gen873[] = "**subarrayoflow";
+static const char long_gen873[] = "Cannot use an array of this size unless the MPI implementation defines a 64-bit MPI_Aint";
+static const char short_gen874[] = "**success";
+static const char long_gen874[] = "No MPI error";
+static const char short_gen875[] = "**tag";
+static const char long_gen875[] = "Invalid tag";
+static const char short_gen876[] = "**tcp_cleanup_fail";
+static const char long_gen876[] = "Error while cleaning up failed connection";
+static const char short_gen877[] = "**tempnam";
+static const char long_gen877[] = "tempnam failed";
+static const char short_gen878[] = "**tmpvc_connect_fail";
+static const char long_gen878[] = "Failure during connection protocol";
+static const char short_gen879[] = "**toomanycomm";
+static const char long_gen879[] = "Too many communicators";
+static const char short_gen880[] = "**toomanycommfrag";
+static const char long_gen880[] = " Cannot allocate context ID because of fragmentation";
+static const char short_gen881[] = "**toomanynbc";
+static const char long_gen881[] = " too many outstanding nonblocking collectives detected";
+static const char short_gen882[] = "**topology";
+static const char long_gen882[] = "Invalid topology";
+static const char short_gen883[] = "**topotoolarge";
+static const char long_gen883[] = "Topology size is greater than communicator size";
+static const char short_gen884[] = "**truncate";
+static const char long_gen884[] = "Message truncated";
+static const char short_gen885[] = "**typeinitbadmem";
+static const char long_gen885[] = "builtin datatype handle references invalid memory";
+static const char short_gen886[] = "**typeinitfail";
+static const char long_gen886[] = "Did not initialize name for all of the predefined datatypes";
+static const char short_gen887[] = "**typeinitminmaxloc";
+static const char long_gen887[] = " Could not determine pointer for predefined minloc or maxloc type. Initialization of those names failed.";
+static const char short_gen888[] = "**typematchnoclass";
+static const char long_gen888[] = "The value of typeclass is not one of MPI_TYPECLASS_REAL, MPI_TYPECLASS_INTEGER, or MPI_TYPECLASS_COMPLEX";
+static const char short_gen889[] = "**typematchsize";
+static const char long_gen889[] = "No MPI datatype available for the given typeclass and size";
+static const char short_gen890[] = "**typenamelen";
+static const char long_gen890[] = "Specified datatype name is too long";
+static const char short_gen891[] = "**typenotpredefined";
+static const char long_gen891[] = " Datatype must be predefined";
+static const char short_gen892[] = "**ucx_nm_pmi_error";
+static const char long_gen892[] = " pmi error in UCX netmod";
+static const char short_gen893[] = "**ucx_nm_rq_error";
+static const char long_gen893[] = " return failed request in UCX netmod";
+static const char short_gen894[] = "**ucx_nm_status";
+static const char long_gen894[] = " ucx function returned with failed status";
+static const char short_gen895[] = "**ucx_nm_str_error";
+static const char long_gen895[] = " string error in UCX netmod";
+static const char short_gen896[] = "**unknown";
+static const char long_gen896[] = "Unknown error. Please file a bug report.";
+static const char short_gen897[] = "**unknowngpid";
+static const char long_gen897[] = "Internal MPI error: Unknown gpid";
+static const char short_gen898[] = "**unsupporteddatarep";
+static const char long_gen898[] = "Only native data representation currently supported";
+static const char short_gen899[] = "**unweightedboth";
+static const char long_gen899[] = "Must specify MPI_UNWEIGHTED for both or neither weight arguments";
+static const char short_gen900[] = "**user";
+static const char long_gen900[] = "user defined function returned an error code";
+static const char short_gen901[] = "**vc_in_error_state";
+static const char long_gen901[] = "Connection is in error state";
+static const char short_gen902[] = "**vmsplice";
+static const char long_gen902[] = "vmsplice failed";
+static const char short_gen903[] = "**win";
+static const char long_gen903[] = "Invalid MPI_Win";
+static const char short_gen904[] = "**winInvalidOp";
+static const char long_gen904[] = " Invalid RMA operation";
+static const char short_gen905[] = "**windeserialize";
+static const char long_gen905[] = "deserializing win object";
+static const char short_gen906[] = "**windows_mutex";
+static const char long_gen906[] = "Windows mutex routine failed";
+static const char short_gen907[] = "**winflavor";
+static const char long_gen907[] = " Window flavor is not compatible with the given operation";
+static const char short_gen908[] = "**winget_oob";
+static const char long_gen908[] = "source pointer for win_get is out of bounds";
+static const char short_gen909[] = "**winnoprogress";
+static const char long_gen909[] = " Detected an error while in progress wait for RMA messages";
+static const char short_gen910[] = "**winnull";
+static const char long_gen910[] = "Null MPI_Win";
+static const char short_gen911[] = "**winput_oob";
+static const char long_gen911[] = "target pointer for win_put is out of bounds";
+static const char short_gen912[] = "**winserialize";
+static const char long_gen912[] = "serializing win object";
+static const char short_gen913[] = "**write";
+static const char long_gen913[] = "write failed";
+static const char short_gen914[] = "**writev";
+static const char long_gen914[] = "writev failed";
+static const char short_gen915[] = "**wsacleanup";
+static const char long_gen915[] = " WSACleanup failed";
+static const char short_gen916[] = "**wsastartup";
+static const char long_gen916[] = " WSAStartup failed";
-static const int generic_msgs_len = 893;
+static const int generic_msgs_len = 917;
static const msgpair generic_err_msgs[] = {
{ 0xacebad03, short_gen0, long_gen0, 0xcb0bfa11 },
{ 0xacebad03, short_gen1, long_gen1, 0xcb0bfa11 },
@@ -2762,75 +2810,99 @@ static const msgpair generic_err_msgs[] = {
{ 0xacebad03, short_gen889, long_gen889, 0xcb0bfa11 },
{ 0xacebad03, short_gen890, long_gen890, 0xcb0bfa11 },
{ 0xacebad03, short_gen891, long_gen891, 0xcb0bfa11 },
-{ 0xacebad03, short_gen892, long_gen892, 0xcb0bfa11 }
+{ 0xacebad03, short_gen892, long_gen892, 0xcb0bfa11 },
+{ 0xacebad03, short_gen893, long_gen893, 0xcb0bfa11 },
+{ 0xacebad03, short_gen894, long_gen894, 0xcb0bfa11 },
+{ 0xacebad03, short_gen895, long_gen895, 0xcb0bfa11 },
+{ 0xacebad03, short_gen896, long_gen896, 0xcb0bfa11 },
+{ 0xacebad03, short_gen897, long_gen897, 0xcb0bfa11 },
+{ 0xacebad03, short_gen898, long_gen898, 0xcb0bfa11 },
+{ 0xacebad03, short_gen899, long_gen899, 0xcb0bfa11 },
+{ 0xacebad03, short_gen900, long_gen900, 0xcb0bfa11 },
+{ 0xacebad03, short_gen901, long_gen901, 0xcb0bfa11 },
+{ 0xacebad03, short_gen902, long_gen902, 0xcb0bfa11 },
+{ 0xacebad03, short_gen903, long_gen903, 0xcb0bfa11 },
+{ 0xacebad03, short_gen904, long_gen904, 0xcb0bfa11 },
+{ 0xacebad03, short_gen905, long_gen905, 0xcb0bfa11 },
+{ 0xacebad03, short_gen906, long_gen906, 0xcb0bfa11 },
+{ 0xacebad03, short_gen907, long_gen907, 0xcb0bfa11 },
+{ 0xacebad03, short_gen908, long_gen908, 0xcb0bfa11 },
+{ 0xacebad03, short_gen909, long_gen909, 0xcb0bfa11 },
+{ 0xacebad03, short_gen910, long_gen910, 0xcb0bfa11 },
+{ 0xacebad03, short_gen911, long_gen911, 0xcb0bfa11 },
+{ 0xacebad03, short_gen912, long_gen912, 0xcb0bfa11 },
+{ 0xacebad03, short_gen913, long_gen913, 0xcb0bfa11 },
+{ 0xacebad03, short_gen914, long_gen914, 0xcb0bfa11 },
+{ 0xacebad03, short_gen915, long_gen915, 0xcb0bfa11 },
+{ 0xacebad03, short_gen916, long_gen916, 0xcb0bfa11 }
};
#endif
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_GENERIC
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__GENERIC
static const char short_spc0[] = "**abi_version_mismatch %D %D";
static const char long_spc0[] = "ABI version mismatch, expected %D - got %D";
-static const char short_spc1[] = "**alloc_shar_mem %s %s";
-static const char long_spc1[] = "unable to allocate shared memory - %s %s";
-static const char short_spc2[] = "**arg %s";
-static const char long_spc2[] = "Invalid argument %s";
-static const char short_spc3[] = "**argarrayneg %s %d %d";
-static const char long_spc3[] = "Negative value in array %s[%d] (value is %d)";
-static const char short_spc4[] = "**argerrcode %d";
-static const char long_spc4[] = "Invalid error code %d";
-static const char short_spc5[] = "**argneg %s %d";
-static const char long_spc5[] = "Invalid value for %s, must be non-negative but is %d";
-static const char short_spc6[] = "**argnonpos %s %d";
-static const char long_spc6[] = "Invalid value for %s; must be positive but is %d";
-static const char short_spc7[] = "**argpackbuf %d %d";
-static const char long_spc7[] = "Size of data to pack (%d bytes) is larger than remaining space in pack buffer (%d bytes)";
-static const char short_spc8[] = "**argposneg %d";
-static const char long_spc8[] = "Value of position is %d but must be nonnegative";
-static const char short_spc9[] = "**argrange %s %d %d";
-static const char long_spc9[] = "Argument %s has value %d but must be within [0,%d]";
-static const char short_spc10[] = "**argtoosmall %s %d %d";
-static const char long_spc10[] = "Invalid argument for %s: value is %d but must be at least %d";
-static const char short_spc11[] = "**attach_shar_mem %s %s";
-static const char long_spc11[] = "unable to attach to shared memory - %s %s";
-static const char short_spc12[] = "**badcase %d";
-static const char long_spc12[] = "INTERNAL ERROR: unexpected value in case statement (value=%d)";
-static const char short_spc13[] = "**bind %s %d";
-static const char long_spc13[] = " Unable to bind socket to address, %s (errno %d)";
-static const char short_spc14[] = "**bindportrange %d %d";
-static const char long_spc14[] = " Unable to bind socket to port range [%d, %d]";
-static const char short_spc15[] = "**bsendbufsmall %d %d";
-static const char long_spc15[] = "Buffer size of %d is smaller than MPI_BSEND_OVERHEAD (%d)";
-static const char short_spc16[] = "**buf_inplace %s";
-static const char long_spc16[] = "buffer '%s' cannot be MPI_IN_PLACE";
-static const char short_spc17[] = "**bufbsend %d %d";
-static const char long_spc17[] = "Insufficient space in Bsend buffer; requested %d; total buffer size is %d";
-static const char short_spc18[] = "**cartcoordinvalid %d %d %d";
-static const char long_spc18[] = "Cartesian coordinate for the %d coordinate is %d but must be between 0 and %d";
-static const char short_spc19[] = "**cartdim %d %d";
-static const char long_spc19[] = "Size of the communicator (%d) is smaller than the size of the Cartesian topology (%d)";
-static const char short_spc20[] = "**ch3|badmsgtype %d";
-static const char long_spc20[] = "request contained an invalid message type (%d)";
-static const char short_spc21[] = "**ch3|badreqtype %d";
-static const char long_spc21[] = "request contained an invalid request type (%d)";
-static const char short_spc22[] = "**ch3|conn_parent %s";
-static const char long_spc22[] = "spawned process group was unable to connect back to the parent on port <%s>";
-static const char short_spc23[] = "**ch3|pmi_finalize %d";
-static const char long_spc23[] = "PMI_Finalize failed, error %d";
-static const char short_spc24[] = "**ch3|postrecv %s";
-static const char long_spc24[] = "failure occurred while posting a receive for message data (%s)";
-static const char short_spc25[] = "**ch3|sock|badhost %s %d %s";
-static const char long_spc25[] = "[ch3:sock] invalid host description, %s:%d (%s)";
-static const char short_spc26[] = "**ch3|sock|badpacket %d";
-static const char long_spc26[] = "[ch3:sock] received packet of unknown type (%d)";
-static const char short_spc27[] = "**ch3|sock|connrefused %s %d %s";
-static const char long_spc27[] = "[ch3:sock] failed to connect to process %s:%d (%s)";
-static const char short_spc28[] = "**ch3|sock|failure %d";
-static const char long_spc28[] = "[ch3:sock] unknown failure, sock_errno=%d";
-static const char short_spc29[] = "**ch3|sock|postconnect %d %d %s";
-static const char long_spc29[] = "[ch3:sock] rank %d unable to connect to rank %d using business card <%s>";
-static const char short_spc30[] = "**ch3|sock|writefailed %d";
-static const char long_spc30[] = "Write to socket failed with code %d";
-static const char short_spc31[] = "**ch3|unhandled_connection_state %p %d";
-static const char long_spc31[] = "encountered an unexpected connection state (vc=%p, state=%d)";
+static const char short_spc1[] = "**arg %s";
+static const char long_spc1[] = "Invalid argument %s";
+static const char short_spc2[] = "**argarrayneg %s %d %d";
+static const char long_spc2[] = "Negative value in array %s[%d] (value is %d)";
+static const char short_spc3[] = "**argerrcode %d";
+static const char long_spc3[] = "Invalid error code %d";
+static const char short_spc4[] = "**argneg %s %d";
+static const char long_spc4[] = "Invalid value for %s, must be non-negative but is %d";
+static const char short_spc5[] = "**argnonpos %s %d";
+static const char long_spc5[] = "Invalid value for %s; must be positive but is %d";
+static const char short_spc6[] = "**argpackbuf %d %d";
+static const char long_spc6[] = "Size of data to pack (%d bytes) is larger than remaining space in pack buffer (%d bytes)";
+static const char short_spc7[] = "**argposneg %d";
+static const char long_spc7[] = "Value of position is %d but must be nonnegative";
+static const char short_spc8[] = "**argrange %s %d %d";
+static const char long_spc8[] = "Argument %s has value %d but must be within [0,%d]";
+static const char short_spc9[] = "**argtoosmall %s %d %d";
+static const char long_spc9[] = "Invalid argument for %s: value is %d but must be at least %d";
+static const char short_spc10[] = "**badcase %d";
+static const char long_spc10[] = "INTERNAL ERROR: unexpected value in case statement (value=%d)";
+static const char short_spc11[] = "**bind %s %d";
+static const char long_spc11[] = " Unable to bind socket to address, %s (errno %d)";
+static const char short_spc12[] = "**bindportrange %d %d";
+static const char long_spc12[] = " Unable to bind socket to port range [%d, %d]";
+static const char short_spc13[] = "**bsendbufsmall %d %d";
+static const char long_spc13[] = "Buffer size of %d is smaller than MPI_BSEND_OVERHEAD (%d)";
+static const char short_spc14[] = "**buf_inplace %s";
+static const char long_spc14[] = "buffer '%s' cannot be MPI_IN_PLACE";
+static const char short_spc15[] = "**bufbsend %d %d";
+static const char long_spc15[] = "Insufficient space in Bsend buffer; requested %d; total buffer size is %d";
+static const char short_spc16[] = "**cartcoordinvalid %d %d %d";
+static const char long_spc16[] = "Cartesian coordinate for the %d coordinate is %d but must be between 0 and %d";
+static const char short_spc17[] = "**cartdim %d %d";
+static const char long_spc17[] = "Size of the communicator (%d) is smaller than the size of the Cartesian topology (%d)";
+static const char short_spc18[] = "**ch3|badmsgtype %d";
+static const char long_spc18[] = "request contained an invalid message type (%d)";
+static const char short_spc19[] = "**ch3|badreqtype %d";
+static const char long_spc19[] = "request contained an invalid request type (%d)";
+static const char short_spc20[] = "**ch3|conn_parent %s";
+static const char long_spc20[] = "spawned process group was unable to connect back to the parent on port <%s>";
+static const char short_spc21[] = "**ch3|conntimeout %d";
+static const char long_spc21[] = "Connection timed out in %d seconds";
+static const char short_spc22[] = "**ch3|pmi_finalize %d";
+static const char long_spc22[] = "PMI_Finalize failed, error %d";
+static const char short_spc23[] = "**ch3|postrecv %s";
+static const char long_spc23[] = "failure occurred while posting a receive for message data (%s)";
+static const char short_spc24[] = "**ch3|sock|badhost %s %d %s";
+static const char long_spc24[] = "[ch3:sock] invalid host description, %s:%d (%s)";
+static const char short_spc25[] = "**ch3|sock|badpacket %d";
+static const char long_spc25[] = "[ch3:sock] received packet of unknown type (%d)";
+static const char short_spc26[] = "**ch3|sock|connrefused %s %d %s";
+static const char long_spc26[] = "[ch3:sock] failed to connect to process %s:%d (%s)";
+static const char short_spc27[] = "**ch3|sock|failure %d";
+static const char long_spc27[] = "[ch3:sock] unknown failure, sock_errno=%d";
+static const char short_spc28[] = "**ch3|sock|postconnect %d %d %s";
+static const char long_spc28[] = "[ch3:sock] rank %d unable to connect to rank %d using business card <%s>";
+static const char short_spc29[] = "**ch3|sock|writefailed %d";
+static const char long_spc29[] = "Write to socket failed with code %d";
+static const char short_spc30[] = "**ch3|unhandled_connection_state %p %d";
+static const char long_spc30[] = "encountered an unexpected connection state (vc=%p, state=%d)";
+static const char short_spc31[] = "**ch4|invalid_shm %s";
+static const char long_spc31[] = "Invalid shm specified (%s)";
static const char short_spc32[] = "**close %s";
static const char long_spc32[] = "close of socket failed - %s";
static const char short_spc33[] = "**closesocket %s %d";
@@ -2861,1180 +2933,1246 @@ static const char short_spc45[] = "**darrayoverflow %L";
static const char long_spc45[] = "Total size of array_of_gsizes[] is %L which requires the MPI implementation to use a 64-bit MPI_Aint";
static const char short_spc46[] = "**datarepused %s";
static const char long_spc46[] = "The requested datarep name %s has already been specified to MPI_REGISTER_DATAREP";
-static const char short_spc47[] = "**detach_shar_mem %s %s";
-static const char long_spc47[] = "unable to detach shared memory - %s %s";
-static const char short_spc48[] = "**dev|pg_not_found %p";
-static const char long_spc48[] = "the specified process group object could not be located (pg=%p)";
-static const char short_spc49[] = "**dev|vcrt_create %s";
-static const char long_spc49[] = "failed to create VCRT for %s";
-static const char short_spc50[] = "**dims %d";
-static const char long_spc50[] = "Invalid dimension argument (value is %d)";
-static const char short_spc51[] = "**dimsmany %d %d";
-static const char long_spc51[] = "Number of dimensions %d is too large (maximum is %d)";
-static const char short_spc52[] = "**dtypenull %s";
-static const char long_spc52[] = "Datatype for argument %s is a null datatype";
-static const char short_spc53[] = "**duphandle %s %d";
-static const char long_spc53[] = "unable to duplicate a handle, %s (errno %d)";
-static const char short_spc54[] = "**dupprocesses %d";
-static const char long_spc54[] = "Local and remote groups in MPI_Intercomm_create must not contain the same processes; both contain process %d";
-static const char short_spc55[] = "**edgeoutrange %d %d %d";
-static const char long_spc55[] = "Edge index edges[%d] is %d but must be nonnegative and less than %d";
-static const char short_spc56[] = "**exceeded_connect_tries %d";
-static const char long_spc56[] = "Unable to establish connection to rank %d";
-static const char short_spc57[] = "**f90typecomplexnone %d %d";
-static const char long_spc57[] = " No complex type with both %d digits of precision and an exponent range of %d is available";
-static const char short_spc58[] = "**f90typeintnone %d";
-static const char long_spc58[] = " No integer type with %d digits of range is available";
-static const char short_spc59[] = "**f90typerealnone %d %d";
-static const char long_spc59[] = " No real type with both %d digits of precision and an exponent range of %d is available";
-static const char short_spc60[] = "**fail %d";
-static const char long_spc60[] = "generic failure with errno = %d";
-static const char short_spc61[] = "**fail %s";
-static const char long_spc61[] = "%s";
-static const char short_spc62[] = "**fail %s %d";
-static const char long_spc62[] = "%s (errno %d)";
-static const char short_spc63[] = "**fileaccess %s";
-static const char long_spc63[] = "Access denied to file %s";
-static const char short_spc64[] = "**filename %s";
-static const char long_spc64[] = "Invalid file name %s";
-static const char short_spc65[] = "**filenamedir %s";
-static const char long_spc65[] = "Invalid or missing directory %s";
-static const char short_spc66[] = "**filenamelong %s %d";
-static const char long_spc66[] = "Pathname %s too long (%d characters)";
-static const char short_spc67[] = "**filenoexist %s";
-static const char long_spc67[] = "File %s does not exist";
-static const char short_spc68[] = "**flag %d";
-static const char long_spc68[] = "invalid flag parameter (flag = %d)";
-static const char short_spc69[] = "**gethostbyname %s %d";
-static const char long_spc69[] = "gethostbyname failed, %s (errno %d)";
-static const char short_spc70[] = "**getinfo %s %d";
-static const char long_spc70[] = "getinfo failed, %s (errno %d)";
-static const char short_spc71[] = "**getsockname %s";
-static const char long_spc71[] = "getsockname failed - %s";
-static const char short_spc72[] = "**getsockopt %s %d";
-static const char long_spc72[] = "getsockopt failed, %s (errno %d)";
-static const char short_spc73[] = "**groupnotincomm %d";
-static const char long_spc73[] = "Rank %d of the specified group is not a member of this communicator";
-static const char short_spc74[] = "**hcoll_wrong_arg %p %d";
-static const char long_spc74[] = "Error in hcolrte api: wrong null argument (ec_h.handle = %p, ec_h.rank = %d)";
-static const char short_spc75[] = "**iface_notfound %s";
-static const char long_spc75[] = "The network interface, \"%s\", specified in MPIR_CVAR_CH3_NETWORK_IFACE was not found.";
-static const char short_spc76[] = "**indexneg %d %d";
-static const char long_spc76[] = "Index value for index[%d] is %d but must be nonnegative";
-static const char short_spc77[] = "**indexnonmonotone %d %d %d";
-static const char long_spc77[] = "Index values in graph topology must be monotone nondecreasing but index[%d] is %d but the next index value is %d";
-static const char short_spc78[] = "**inet_addr %s %d";
-static const char long_spc78[] = " inet_addr failed, %s (errno %d)";
-static const char short_spc79[] = "**infohintparse %s";
-static const char long_spc79[] = "Unable to parse info hint (%s)";
-static const char short_spc80[] = "**infonkey %d %d";
-static const char long_spc80[] = "Requested key %d but this MPI_Info only has %d keys";
-static const char short_spc81[] = "**infonokey %s";
-static const char long_spc81[] = "MPI_Info key %s is not defined ";
-static const char short_spc82[] = "**intern %s";
-static const char long_spc82[] = "Internal MPI error! %s";
-static const char short_spc83[] = "**invalid_handle %d";
-static const char long_spc83[] = "invalid handle (%d)";
-static const char short_spc84[] = "**invalid_knem_status %d";
-static const char long_spc84[] = "Invalid knem status value - %d";
-static const char short_spc85[] = "**invalid_netmod %s";
-static const char long_spc85[] = "Invalid netmod specified (%s)";
-static const char short_spc86[] = "**invalid_refcount %d";
-static const char long_spc86[] = "invalid reference count (%d)";
-static const char short_spc87[] = "**invalidpkt %d";
-static const char long_spc87[] = " Invalid packet type (%d)";
-static const char short_spc88[] = "**io %s";
-static const char long_spc88[] = "Other I/O error %s";
-static const char short_spc89[] = "**iocp %s %d";
-static const char long_spc89[] = "unable to create an I/O copmletion port, %s (erron %d)";
-static const char short_spc90[] = "**ioctl %d %s";
-static const char long_spc90[] = "ioctl failed errno=%d - %s";
-static const char short_spc91[] = "**ioctlsocket %s %d";
-static const char long_spc91[] = " ioctl on socket failed, %s (errno %d)";
-static const char short_spc92[] = "**join_portname %s %s";
-static const char long_spc92[] = "local %s, remote %s";
-static const char short_spc93[] = "**join_recv %d";
-static const char long_spc93[] = "recv from the socket failed (errno %d)";
-static const char short_spc94[] = "**join_send %d";
-static const char long_spc94[] = "send on the socket failed (errno %d)";
-static const char short_spc95[] = "**keyvalobj %s";
-static const char long_spc95[] = "Keyval was not defined for %s objects";
-static const char short_spc96[] = "**listen %s %d";
-static const char long_spc96[] = "listen failed, %s (errno %d)";
-static const char short_spc97[] = "**lockassertval %d";
-static const char long_spc97[] = " Invalid assert argument (%d) passed to MPI_Win_lock";
-static const char short_spc98[] = "**lseek %s";
-static const char long_spc98[] = "lseek failed - %s";
-static const char short_spc99[] = "**memcpyalias %p %p %L";
-static const char long_spc99[] = "memcpy arguments alias each other, dst=%p src=%p len=%L";
-static const char short_spc100[] = "**mkfifo %d %s";
-static const char long_spc100[] = "mkfifo failed - errno %d (%s)";
-static const char short_spc101[] = "**mkstemp %s";
-static const char long_spc101[] = "mkstemp failed %s";
-static const char short_spc102[] = "**mmap %d";
-static const char long_spc102[] = "unable to map memory, mmap failed (errno %d)";
-static const char short_spc103[] = "**mpi_abort %C %d";
-static const char long_spc103[] = "MPI_Abort(%C, errorcode=%d) failed";
-static const char short_spc104[] = "**mpi_accumulate %p %d %D %d %d %d %D %O %W";
-static const char long_spc104[] = "MPI_Accumulate(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W) failed";
-static const char short_spc105[] = "**mpi_add_error_class %p";
-static const char long_spc105[] = "MPI_Add_error_class(errorclass=%p) failed";
-static const char short_spc106[] = "**mpi_add_error_code %d %p";
-static const char long_spc106[] = "MPI_Add_error_code(errorclass=%d, errorcode=%p) failed";
-static const char short_spc107[] = "**mpi_add_error_string %d %s";
-static const char long_spc107[] = "MPI_Add_error_string(code=%d, str=\"%s\") failed";
-static const char short_spc108[] = "**mpi_address %p %p";
-static const char long_spc108[] = "MPI_Address(location=%p, address=%p) failed";
-static const char short_spc109[] = "**mpi_allgather %p %d %D %p %d %D %C";
-static const char long_spc109[] = "MPI_Allgather(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, %C) failed";
-static const char short_spc110[] = "**mpi_allgatherv %p %d %D %p %p %p %D %C";
-static const char long_spc110[] = "MPI_Allgatherv(sbuf=%p, scount=%d, %D, rbuf=%p, rcounts=%p, displs=%p, %D, %C) failed";
-static const char short_spc111[] = "**mpi_alloc_mem %d %I %p";
-static const char long_spc111[] = "MPI_Alloc_mem(size=%d, %I, baseptr=%p) failed";
-static const char short_spc112[] = "**mpi_allreduce %p %p %d %D %O %C";
-static const char long_spc112[] = "MPI_Allreduce(sbuf=%p, rbuf=%p, count=%d, %D, %O, %C) failed";
-static const char short_spc113[] = "**mpi_alltoall %p %d %D %p %d %D %C";
-static const char long_spc113[] = "MPI_Alltoall(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, %C) failed";
-static const char short_spc114[] = "**mpi_alltoallv %p %p %p %D %p %p %p %D %C";
-static const char long_spc114[] = "MPI_Alltoallv(sbuf=%p, scnts=%p, sdispls=%p, %D, rbuf=%p, rcnts=%p, rdispls=%p, %D, %C) failed";
-static const char short_spc115[] = "**mpi_alltoallw %p %p %p %p %p %p %p %p %C";
-static const char long_spc115[] = "MPI_Alltoallw(sbuf=%p, scnts=%p, sdispls=%p, stypes=%p, rbuf=%p, rcnts=%p, rdispls=%p, rtypes=%p, %C) failed";
-static const char short_spc116[] = "**mpi_attr_delete %C %d";
-static const char long_spc116[] = "MPI_Attr_delete(%C, keyval=%d) failed";
-static const char short_spc117[] = "**mpi_attr_get %C %d %p %p";
-static const char long_spc117[] = "MPI_Attr_get(%C, keyval=%d, attr_value=%p, flag=%p) failed";
-static const char short_spc118[] = "**mpi_attr_put %C %d %p";
-static const char long_spc118[] = "MPI_Attr_put(%C, keyval=%d, attr_value=%p) failed";
-static const char short_spc119[] = "**mpi_barrier %C";
-static const char long_spc119[] = "MPI_Barrier(%C) failed";
-static const char short_spc120[] = "**mpi_bcast %p %d %D %d %C";
-static const char long_spc120[] = "MPI_Bcast(buf=%p, count=%d, %D, root=%d, %C) failed";
-static const char short_spc121[] = "**mpi_bsend %p %d %D %i %t %C";
-static const char long_spc121[] = "MPI_Bsend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C) failed";
-static const char short_spc122[] = "**mpi_bsend_init %p %d %D %i %t %C %p";
-static const char long_spc122[] = "MPI_Bsend_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc123[] = "**mpi_buffer_attach %p %d";
-static const char long_spc123[] = "MPI_Buffer_attach(buf=%p, size=%d) failed";
-static const char short_spc124[] = "**mpi_buffer_detach %p %p";
-static const char long_spc124[] = "MPI_Buffer_detach(buf=%p, size=%p) failed";
-static const char short_spc125[] = "**mpi_cancel %p";
-static const char long_spc125[] = "MPI_Cancel(request=%p) failed";
-static const char short_spc126[] = "**mpi_cart_coords %C %d %d %p";
-static const char long_spc126[] = "MPI_Cart_coords(%C, rank=%d, maxdims=%d, coords=%p) failed";
-static const char short_spc127[] = "**mpi_cart_create %C %d %p %p %d %p";
-static const char long_spc127[] = "MPI_Cart_create(%C, ndims=%d, dims=%p, periods=%p, reorder=%d, comm_cart=%p) failed";
-static const char short_spc128[] = "**mpi_cart_get %C %d %p %p %p";
-static const char long_spc128[] = "MPI_Cart_get(%C, maxdims=%d, dims=%p, periods=%p, coords=%p) failed";
-static const char short_spc129[] = "**mpi_cart_map %C %d %p %p %p";
-static const char long_spc129[] = "MPI_Cart_map(%C, ndims=%d, dims=%p, periods=%p, newrank=%p) failed";
-static const char short_spc130[] = "**mpi_cart_rank %C %p %p";
-static const char long_spc130[] = "MPI_Cart_rank(%C, coords=%p, rank=%p) failed";
-static const char short_spc131[] = "**mpi_cart_shift %C %d %d %p %p";
-static const char long_spc131[] = "MPI_Cart_shift(%C, direction=%d, displ=%d, source=%p, dest=%p) failed";
-static const char short_spc132[] = "**mpi_cart_sub %C %p %p";
-static const char long_spc132[] = "MPI_Cart_sub(%C, remain_dims=%p, comm_new=%p) failed";
-static const char short_spc133[] = "**mpi_cartdim_get %C %p";
-static const char long_spc133[] = "MPI_Cartdim_get(%C, ndims=%p) failed";
-static const char short_spc134[] = "**mpi_close_port %s";
-static const char long_spc134[] = "MPI_Close_port(port=\"%s\") failed";
-static const char short_spc135[] = "**mpi_comm_accept %s %I %d %C %p";
-static const char long_spc135[] = "MPI_Comm_accept(port=\"%s\", %I, root=%d, %C, newcomm=%p) failed";
-static const char short_spc136[] = "**mpi_comm_call_errhandler %C %d";
-static const char long_spc136[] = "MPI_Comm_call_errhandler(%C, errorcode=%d) failed";
-static const char short_spc137[] = "**mpi_comm_compare %C %C %p";
-static const char long_spc137[] = "MPI_Comm_compare(%C, %C, result=%p) failed";
-static const char short_spc138[] = "**mpi_comm_connect %s %I %d %C %p";
-static const char long_spc138[] = "MPI_Comm_connect(port=\"%s\", %I, root=%d, %C, newcomm=%p) failed";
-static const char short_spc139[] = "**mpi_comm_create %C %G %p";
-static const char long_spc139[] = "MPI_Comm_create(%C, %G, new_comm=%p) failed";
-static const char short_spc140[] = "**mpi_comm_create_errhandler %p %p";
-static const char long_spc140[] = "MPI_Comm_create_errhandler(function=%p, errhandler=%p) failed";
-static const char short_spc141[] = "**mpi_comm_create_group %C %G %d %p";
-static const char long_spc141[] = "MPI_Comm_create_group(%C, %G, %d, new_comm=%p) failed";
-static const char short_spc142[] = "**mpi_comm_create_keyval %p %p %p %p";
-static const char long_spc142[] = "MPI_Comm_create_keyval(comm_copy_attr_fn=%p, comm_delete_attr_fn=%p, comm_keyval=%p, extra_state=%p) failed";
-static const char short_spc143[] = "**mpi_comm_delete_attr %C %d";
-static const char long_spc143[] = "MPI_Comm_delete_attr(%C, comm_keyval=%d) failed";
-static const char short_spc144[] = "**mpi_comm_disconnect %C";
-static const char long_spc144[] = "MPI_Comm_disconnect(comm=%C) failed";
-static const char short_spc145[] = "**mpi_comm_dup %C %p";
-static const char long_spc145[] = "MPI_Comm_dup(%C, new_comm=%p) failed";
-static const char short_spc146[] = "**mpi_comm_dup_with_info %C %I %p";
-static const char long_spc146[] = "MPI_Comm_dup(%C, %I, new_comm=%p) failed";
-static const char short_spc147[] = "**mpi_comm_free %p";
-static const char long_spc147[] = "MPI_Comm_free(comm=%p) failed";
-static const char short_spc148[] = "**mpi_comm_free_keyval %p";
-static const char long_spc148[] = "MPI_Comm_free_keyval(comm_keyval=%p) failed";
-static const char short_spc149[] = "**mpi_comm_get_attr %C %d %p %p";
-static const char long_spc149[] = "MPI_Comm_get_attr(%C, comm_keyval=%d, attribute_val=%p, flag=%p) failed";
-static const char short_spc150[] = "**mpi_comm_get_errhandler %C %p";
-static const char long_spc150[] = "MPI_Comm_get_errhandler(%C, errhandler=%p) failed";
-static const char short_spc151[] = "**mpi_comm_get_info %W %p";
-static const char long_spc151[] = "MPI_Comm_get_info(comm=%C, info_used=%p) failed";
-static const char short_spc152[] = "**mpi_comm_get_name %C %p %p";
-static const char long_spc152[] = "MPI_Comm_get_name(%C, comm_name=%p, resultlen=%p) failed";
-static const char short_spc153[] = "**mpi_comm_get_parent %p";
-static const char long_spc153[] = "MPI_Comm_get_parent(comm=%p) failed";
-static const char short_spc154[] = "**mpi_comm_group %C %p";
-static const char long_spc154[] = "MPI_Comm_group(%C, group=%p) failed";
-static const char short_spc155[] = "**mpi_comm_idup %C %p %p";
-static const char long_spc155[] = " MPI_Comm_idup(comm=%C, newcomm=%p, request=%p)";
-static const char short_spc156[] = "**mpi_comm_join %d %p";
-static const char long_spc156[] = "MPI_Comm_join(fd=%d, intercomm=%p) failed";
-static const char short_spc157[] = "**mpi_comm_rank %C %p";
-static const char long_spc157[] = "MPI_Comm_rank(%C, rank=%p) failed";
-static const char short_spc158[] = "**mpi_comm_remote_group %C %p";
-static const char long_spc158[] = "MPI_Comm_remote_group(%C, group=%p) failed";
-static const char short_spc159[] = "**mpi_comm_remote_size %C %p";
-static const char long_spc159[] = "MPI_Comm_remote_size(%C, size=%p) failed";
-static const char short_spc160[] = "**mpi_comm_set_attr %C %d %p";
-static const char long_spc160[] = "MPI_Comm_set_attr(%C, comm_keyval=%d, attribute_val=%p) failed";
-static const char short_spc161[] = "**mpi_comm_set_errhandler %C %E";
-static const char long_spc161[] = "MPI_Comm_set_errhandler(%C, %E) failed";
-static const char short_spc162[] = "**mpi_comm_set_info %W %p";
-static const char long_spc162[] = "MPI_Comm_set_info(comm=%C, info=%p) failed";
-static const char short_spc163[] = "**mpi_comm_set_name %C %s";
-static const char long_spc163[] = "MPI_Comm_set_name(%C, comm_name=%s) failed";
-static const char short_spc164[] = "**mpi_comm_size %C %p";
-static const char long_spc164[] = "MPI_Comm_size(%C, size=%p) failed";
-static const char short_spc165[] = "**mpi_comm_spawn %s %p %d %I %d %C %p %p";
-static const char long_spc165[] = "MPI_Comm_spawn(cmd=\"%s\", argv=%p, maxprocs=%d, %I, root=%d, %C, intercomm=%p, errors=%p) failed";
-static const char short_spc166[] = "**mpi_comm_spawn_multiple %d %p %p %p %p %d %C %p %p";
-static const char long_spc166[] = "MPI_Comm_spawn_multiple(count=%d, cmds=%p, argvs=%p, maxprocs=%p, infos=%p, root=%d, %C, intercomm=%p, errors=%p) failed";
-static const char short_spc167[] = "**mpi_comm_split %C %d %d %p";
-static const char long_spc167[] = "MPI_Comm_split(%C, color=%d, key=%d, new_comm=%p) failed";
-static const char short_spc168[] = "**mpi_comm_test_inter %C %p";
-static const char long_spc168[] = "MPI_Comm_test_inter(%C, flag=%p) failed";
-static const char short_spc169[] = "**mpi_compare_and_swap %p %p %p %D %d %d %W";
-static const char long_spc169[] = "MPI_Compare_and_swap(origin_addr=%p, compare_addr=%p, result_addr=%p, %D, target_rank=%d, target_disp=%d, %W) failed";
-static const char short_spc170[] = "**mpi_dims_create %d %d %p";
-static const char long_spc170[] = "MPI_Dims_create(nnodes=%d, ndims=%d, dims=%p) failed";
-static const char short_spc171[] = "**mpi_dist_graph_create %C %d %p %p %p %p %I %d %p";
-static const char long_spc171[] = " MPI_Dist_graph_create(%C, n=%d, sources=%p, degrees=%p, destinations=%p, weights=%p, info=%I, reorder=%d, comm_dist_graph=%p) failed";
-static const char short_spc172[] = "**mpi_dist_graph_create_adjacent %C %d %p %p %d %p %p %I %d %p";
-static const char long_spc172[] = " MPI_Dist_graph_create_adjacent(%C, indegree=%d, sources=%p, sourceweights=%p, outdegree=%d, destinations=%p, destweights=%p, %I, %d, comm_dist_graph=%p) failed";
-static const char short_spc173[] = "**mpi_dist_graph_neighbors %C %d %p %p %d %p %p";
-static const char long_spc173[] = " MPI_Dist_graph_neighbors(%C, maxindegree=%d, sources=%p, sourceweights=%p, maxoutdegree=%d, destinations=%p, destweights=%p) failed";
-static const char short_spc174[] = "**mpi_dist_graph_neighbors_count %C %p %p %p";
-static const char long_spc174[] = " MPI_Dist_graph_neighbors_count(%C, indegree=%p, outdegree=%p, weighted=%p) failed";
-static const char short_spc175[] = "**mpi_errhandler_create %p %p";
-static const char long_spc175[] = "MPI_Errhandler_create(function=%p, errhandler=%p) failed";
-static const char short_spc176[] = "**mpi_errhandler_free %p";
-static const char long_spc176[] = "MPI_Errhandler_free(errhandler=%p) failed";
-static const char short_spc177[] = "**mpi_errhandler_get %C %p";
-static const char long_spc177[] = "MPI_Errhandler_get(%C, errhandler=%p) failed";
-static const char short_spc178[] = "**mpi_errhandler_set %C %E";
-static const char long_spc178[] = "MPI_Errhandler_set(%C, %E) failed";
-static const char short_spc179[] = "**mpi_error_class %d %p";
-static const char long_spc179[] = "MPI_Error_class(errorcode=%d, errorclass=%p) failed";
-static const char short_spc180[] = "**mpi_error_string %d %s %p";
-static const char long_spc180[] = "MPI_Error_string(errorcode=%d, string=%s, resultlen=%p) failed";
-static const char short_spc181[] = "**mpi_exscan %p %p %d %D %O %C";
-static const char long_spc181[] = "MPI_Exscan(sbuf=%p, rbuf=%p, count=%d, %D, %O, %C) failed";
-static const char short_spc182[] = "**mpi_fetch_and_op %p %p %D %d %d %O %W";
-static const char long_spc182[] = "MPI_Fetch_and_op(origin_addr=%p, result_addr=%p, %D, target_rank=%d, target_disp=%d, %O, %W) failed";
-static const char short_spc183[] = "**mpi_file_create_errhandler %p %p";
-static const char long_spc183[] = "MPI_File_create_errhandler(function=%p, errhandler=%p) failed";
-static const char short_spc184[] = "**mpi_file_get_errhandler %F %p";
-static const char long_spc184[] = "MPI_File_get_errhandler(%F, errhandler=%p) failed";
-static const char short_spc185[] = "**mpi_file_set_errhandler %F %E";
-static const char long_spc185[] = "MPI_File_set_errhandler(%F, %E) failed";
-static const char short_spc186[] = "**mpi_finalized %p";
-static const char long_spc186[] = "MPI_Finalized(flag=%p) failed";
-static const char short_spc187[] = "**mpi_free_mem %p";
-static const char long_spc187[] = "MPI_Free_mem(base=%p) failed";
-static const char short_spc188[] = "**mpi_gather %p %d %D %p %d %D %d %C";
-static const char long_spc188[] = "MPI_Gather(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, root=%d, %C) failed";
-static const char short_spc189[] = "**mpi_gatherv %p %d %D %p %p %p %D %d %C";
-static const char long_spc189[] = "MPI_Gatherv failed(sbuf=%p, scount=%d, %D, rbuf=%p, rcnts=%p, displs=%p, %D, root=%d, %C) failed";
-static const char short_spc190[] = "**mpi_get %p %d %D %d %d %d %D %W";
-static const char long_spc190[] = "MPI_Get(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W) failed";
-static const char short_spc191[] = "**mpi_get_accumulate %p %d %D %p %d %D %d %d %d %D %O %W";
-static const char long_spc191[] = "MPI_Get_accumulate(origin_addr=%p, origin_count=%d, %D, result_addr=%p, result_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W) failed";
-static const char short_spc192[] = "**mpi_get_address %p %p";
-static const char long_spc192[] = "MPI_Get_address(location=%p, address=%p) failed";
-static const char short_spc193[] = "**mpi_get_count %p %D %p";
-static const char long_spc193[] = "MPI_Get_count(status=%p, %D, count=%p) failed";
-static const char short_spc194[] = "**mpi_get_elements %p %D %p";
-static const char long_spc194[] = "MPI_Get_elements(status=%p, %D, elements=%p) failed";
-static const char short_spc195[] = "**mpi_get_elements_x %p %D %p";
-static const char long_spc195[] = " MPI_Get_elements_x(status=%p, datatype=%D, count=%p)";
-static const char short_spc196[] = "**mpi_get_library_version %p %p";
-static const char long_spc196[] = "MPI_Get_library_version(version=%p, resultlen=%p) failed";
-static const char short_spc197[] = "**mpi_get_processor_name %p %p";
-static const char long_spc197[] = "MPI_Get_processor_name(name=%p, resultlen=%p) failed";
-static const char short_spc198[] = "**mpi_get_version %p %p";
-static const char long_spc198[] = "MPI_Get_version(version=%p, subversion=%p) failed";
-static const char short_spc199[] = "**mpi_graph_create %C %d %p %p %d %p";
-static const char long_spc199[] = "MPI_Graph_create(%C, nnodes=%d, index=%p, edges=%p, reorder=%d, comm_graph=%p) failed";
-static const char short_spc200[] = "**mpi_graph_get %C %d %d %p %p";
-static const char long_spc200[] = "MPI_Graph_get(%C, maxindex=%d, maxedges=%d, index=%p, edges=%p) failed";
-static const char short_spc201[] = "**mpi_graph_map %C %d %p %p %p";
-static const char long_spc201[] = "MPI_Graph_map(%C, nnodes=%d, index=%p, edges=%p, newrank=%p) failed";
-static const char short_spc202[] = "**mpi_graph_neighbors %C %d %d %p";
-static const char long_spc202[] = "MPI_Graph_neighbors(%C, rank=%d, maxneighbors=%d, neighbors=%p) failed";
-static const char short_spc203[] = "**mpi_graph_neighbors_count %C %d %p";
-static const char long_spc203[] = "MPI_Graph_neighbors_count(%C, rank=%d, nneighbors=%p) failed";
-static const char short_spc204[] = "**mpi_graphdims_get %C %p %p";
-static const char long_spc204[] = "MPI_Graphdims_get(%C, nnodes=%p, nedges=%p) failed";
-static const char short_spc205[] = "**mpi_grequest_complete %R";
-static const char long_spc205[] = "MPI_Grequest_complete(%R) failed";
-static const char short_spc206[] = "**mpi_grequest_start %p %p %p %p %p";
-static const char long_spc206[] = "MPI_Grequest_start(query_fn=%p, free_fn=%p, cancel_fn=%p, extra_state=%p, request=%p) failed";
-static const char short_spc207[] = "**mpi_group_compare %G %G %p";
-static const char long_spc207[] = "MPI_Group_compare(%G, %G, result=%p) failed";
-static const char short_spc208[] = "**mpi_group_difference %G %G %p";
-static const char long_spc208[] = "MPI_Group_difference(%G, %G, new_group=%p) failed";
-static const char short_spc209[] = "**mpi_group_excl %G %d %p %p";
-static const char long_spc209[] = "MPI_Group_excl(%G, n=%d, ranks=%p, new_group=%p) failed";
-static const char short_spc210[] = "**mpi_group_free %p";
-static const char long_spc210[] = "MPI_Group_free(group=%p) failed";
-static const char short_spc211[] = "**mpi_group_incl %G %d %p %p";
-static const char long_spc211[] = "MPI_Group_incl(%G, n=%d, ranks=%p, new_group=%p) failed";
-static const char short_spc212[] = "**mpi_group_intersection %G %G %p";
-static const char long_spc212[] = "MPI_Group_intersection(%G, %G, new_group=%p) failed";
-static const char short_spc213[] = "**mpi_group_range_excl %G %d %p %p";
-static const char long_spc213[] = "MPI_Group_range_excl(%G, n=%d, ranges=%p, new_group=%p) failed";
-static const char short_spc214[] = "**mpi_group_range_incl %G %d %p %p";
-static const char long_spc214[] = "MPI_Group_range_incl(%G, n=%d, ranges=%p, new_group=%p) failed";
-static const char short_spc215[] = "**mpi_group_rank %G %p";
-static const char long_spc215[] = "MPI_Group_rank(%G, rank=%p) failed";
-static const char short_spc216[] = "**mpi_group_size %G %p";
-static const char long_spc216[] = "MPI_Group_size(%G, size=%p) failed";
-static const char short_spc217[] = "**mpi_group_translate_ranks %G %d %p %G %p";
-static const char long_spc217[] = "MPI_Group_translate_ranks(%G, n=%d, ranks1=%p, %G, ranks2=%p) failed";
-static const char short_spc218[] = "**mpi_group_union %G %G %p";
-static const char long_spc218[] = "MPI_Group_union(%G, %G, new_group=%p) failed";
-static const char short_spc219[] = "**mpi_iallgather %p %d %D %p %d %D %C %p";
-static const char long_spc219[] = " MPI_Iallgather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc220[] = "**mpi_iallgatherv %p %d %D %p %p %p %D %C %p";
-static const char long_spc220[] = " MPI_Iallgatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc221[] = "**mpi_iallreduce %p %p %d %D %O %C %p";
-static const char long_spc221[] = " MPI_Iallreduce(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, comm=%C, request=%p)";
-static const char short_spc222[] = "**mpi_ialltoall %p %d %D %p %d %D %C %p";
-static const char long_spc222[] = " MPI_Ialltoall(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc223[] = "**mpi_ialltoallv %p %p %p %D %p %p %p %D %C %p";
-static const char long_spc223[] = " MPI_Ialltoallv(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtype=%D, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc224[] = "**mpi_ialltoallw %p %p %p %p %p %p %p %p %C %p";
-static const char long_spc224[] = " MPI_Ialltoallw(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtypes=%p, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtypes=%p, comm=%C, request=%p)";
-static const char short_spc225[] = "**mpi_ibarrier %C %p";
-static const char long_spc225[] = " MPI_Ibarrier(comm=%C, request=%p)";
-static const char short_spc226[] = "**mpi_ibcast %p %d %D %C %p";
-static const char long_spc226[] = " MPI_Ibcast(buffer=%p, count=%d, datatype=%D, comm=%C, request=%p)";
-static const char short_spc227[] = "**mpi_ibsend %p %d %D %i %t %C %p";
-static const char long_spc227[] = "MPI_Ibsend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc228[] = "**mpi_iexscan %p %p %d %D %O %C %p";
-static const char long_spc228[] = " MPI_Iexscan(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, comm=%C, request=%p)";
-static const char short_spc229[] = "**mpi_igather %p %d %D %p %d %D %d %C %p";
-static const char long_spc229[] = " MPI_Igather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, root=%d, comm=%C, request=%p)";
-static const char short_spc230[] = "**mpi_igatherv %p %d %D %p %p %p %D %d %C %p";
-static const char long_spc230[] = " MPI_Igatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, root=%d, comm=%C, request=%p)";
-static const char short_spc231[] = "**mpi_improbe %d %d %C %p %p %p";
-static const char long_spc231[] = " MPI_Improbe(source=%d, tag=%d, comm=%C, flag=%p, message=%p, status=%p)";
-static const char short_spc232[] = "**mpi_imrecv %p %d %D %p %p";
-static const char long_spc232[] = " MPI_Imrecv(buf=%p, count=%d, datatype=%D, message=%p, request=%p)";
-static const char short_spc233[] = "**mpi_ineighbor_allgather %p %d %D %p %d %D %C %p";
-static const char long_spc233[] = " MPI_Ineighbor_allgather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc234[] = "**mpi_ineighbor_allgatherv %p %d %D %p %p %p %D %C %p";
-static const char long_spc234[] = " MPI_Ineighbor_allgatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc235[] = "**mpi_ineighbor_alltoall %p %d %D %p %d %D %C %p";
-static const char long_spc235[] = " MPI_Ineighbor_alltoall(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc236[] = "**mpi_ineighbor_alltoallv %p %p %p %D %p %p %p %D %C %p";
-static const char long_spc236[] = " MPI_Ineighbor_alltoallv(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtype=%D, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtype=%D, comm=%C, request=%p)";
-static const char short_spc237[] = "**mpi_ineighbor_alltoallw %p %p %p %p %p %p %p %p %C %p";
-static const char long_spc237[] = " MPI_Ineighbor_alltoallw(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtypes=%p, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtypes=%p, comm=%C, request=%p)";
-static const char short_spc238[] = "**mpi_info_create %p";
-static const char long_spc238[] = "MPI_Info_create(info=%p) failed";
-static const char short_spc239[] = "**mpi_info_delete %I %s";
-static const char long_spc239[] = "MPI_Info_delete(%I, key=%s) failed";
-static const char short_spc240[] = "**mpi_info_dup %I %p";
-static const char long_spc240[] = "MPI_Info_dup(%I, newinfo=%p) failed";
-static const char short_spc241[] = "**mpi_info_free %p";
-static const char long_spc241[] = "MPI_Info_free(info=%p) failed";
-static const char short_spc242[] = "**mpi_info_get %I %s %d %p %p";
-static const char long_spc242[] = "MPI_Info_get(%I, key=%s, valuelen=%d, value=%p, flag=%p) failed";
-static const char short_spc243[] = "**mpi_info_get_nkeys %I %p";
-static const char long_spc243[] = "MPI_Info_get_nkeys(%I, nkeys=%p) failed";
-static const char short_spc244[] = "**mpi_info_get_nthkey %I %d %p";
-static const char long_spc244[] = "MPI_Info_get_nthkey(%I, n=%d, key=%p) failed";
-static const char short_spc245[] = "**mpi_info_get_valuelen %I %s %p %p";
-static const char long_spc245[] = "MPI_Info_get_valuelen(%I, key=%s, valuelen=%p, flag=%p) failed";
-static const char short_spc246[] = "**mpi_info_set %I %s %s";
-static const char long_spc246[] = "MPI_Info_set(%I, key=%s, value=%s) failed";
-static const char short_spc247[] = "**mpi_init %p %p";
-static const char long_spc247[] = "MPI_Init(argc_p=%p, argv_p=%p) failed";
-static const char short_spc248[] = "**mpi_init_thread %p %p %d %p";
-static const char long_spc248[] = "MPI_Init_thread(argc_p=%p, argv_p=%p, required=%d, provided=%p)";
-static const char short_spc249[] = "**mpi_initialized %p";
-static const char long_spc249[] = "MPI_Initialized(flag=%p) failed";
-static const char short_spc250[] = "**mpi_intercomm_create %C %d %C %d %d %p";
-static const char long_spc250[] = "MPI_Intercomm_create(%C, local_leader=%d, %C, remote_leader=%d, tag=%d, newintercomm=%p) failed";
-static const char short_spc251[] = "**mpi_intercomm_merge %C %d %p";
-static const char long_spc251[] = "MPI_Intercomm_merge(%C, high=%d, newintracomm=%p) failed";
-static const char short_spc252[] = "**mpi_iprobe %i %t %C %p %p";
-static const char long_spc252[] = "MPI_Iprobe(src=%i, tag=%t, %C, flag=%p, status=%p) failed";
-static const char short_spc253[] = "**mpi_irecv %p %d %D %i %t %C %p";
-static const char long_spc253[] = "MPI_Irecv(buf=%p, count=%d, %D, src=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc254[] = "**mpi_ireduce %p %p %d %D %O %d %C %p";
-static const char long_spc254[] = " MPI_Ireduce(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, root=%d, comm=%C, request=%p)";
-static const char short_spc255[] = "**mpi_ireduce_scatter %p %p %p %D %O %C %p";
-static const char long_spc255[] = " MPI_Ireduce_scatter(sendbuf=%p, recvbuf=%p, recvcounts=%p, datatype=%D, op=%O, comm=%C, request=%p)";
-static const char short_spc256[] = "**mpi_ireduce_scatter_block %p %p %d %D %O %C %p";
-static const char long_spc256[] = " MPI_Ireduce_scatter_block(sendbuf=%p, recvbuf=%p, recvcount=%d, datatype=%D, op=%O, comm=%C, request=%p)";
-static const char short_spc257[] = "**mpi_irsend %p %d %D %i %t %C %p";
-static const char long_spc257[] = "MPI_Irsend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc258[] = "**mpi_is_thread_main %p";
-static const char long_spc258[] = "MPI_Is_thread_main(flag=%p) failed";
-static const char short_spc259[] = "**mpi_iscan %p %p %d %D %O %C %p";
-static const char long_spc259[] = " MPI_Iscan(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, comm=%C, request=%p)";
-static const char short_spc260[] = "**mpi_iscatter %p %d %D %p %d %D %d %C %p";
-static const char long_spc260[] = " MPI_Iscatter(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, root=%d, comm=%C, request=%p)";
-static const char short_spc261[] = "**mpi_iscatterv %p %p %p %D %p %d %D %d %C %p";
-static const char long_spc261[] = " MPI_Iscatterv(sendbuf=%p, sendcounts=%p, displs=%p, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, root=%d, comm=%C, request=%p)";
-static const char short_spc262[] = "**mpi_isend %p %d %D %i %t %C %p";
-static const char long_spc262[] = "MPI_Isend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc263[] = "**mpi_issend %p %d %D %i %t %C %p";
-static const char long_spc263[] = "MPI_Issend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc264[] = "**mpi_keyval_create %p %p %p %p";
-static const char long_spc264[] = "MPI_Keyval_create(copy_fn=%p, del_fn=%p, keyval=%p, extra=%p) failed";
-static const char short_spc265[] = "**mpi_keyval_free %p";
-static const char long_spc265[] = "MPI_Keyval_free(keyval=%p) failed";
-static const char short_spc266[] = "**mpi_lookup_name %s %I %p";
-static const char long_spc266[] = "MPI_Lookup_name(service=\"%s\", %I, port=%p) failed";
-static const char short_spc267[] = "**mpi_mprobe %d %d %C %p %p";
-static const char long_spc267[] = " MPI_Mprobe(source=%d, tag=%d, comm=%C, message=%p, status=%p)";
-static const char short_spc268[] = "**mpi_mrecv %p %d %D %p %p";
-static const char long_spc268[] = " MPI_Mrecv(buf=%p, count=%d, datatype=%D, message=%p, status=%p)";
-static const char short_spc269[] = "**mpi_neighbor_allgather %p %d %D %p %d %D %C";
-static const char long_spc269[] = " MPI_Neighbor_allgather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C)";
-static const char short_spc270[] = "**mpi_neighbor_allgatherv %p %d %D %p %p %p %D %C";
-static const char long_spc270[] = " MPI_Neighbor_allgatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, comm=%C)";
-static const char short_spc271[] = "**mpi_neighbor_alltoall %p %d %D %p %d %D %C";
-static const char long_spc271[] = " MPI_Neighbor_alltoall(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C)";
-static const char short_spc272[] = "**mpi_neighbor_alltoallv %p %p %p %D %p %p %p %D %C";
-static const char long_spc272[] = " MPI_Neighbor_alltoallv(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtype=%D, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtype=%D, comm=%C)";
-static const char short_spc273[] = "**mpi_neighbor_alltoallw %p %p %p %p %p %p %p %p %C";
-static const char long_spc273[] = " MPI_Neighbor_alltoallw(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtypes=%p, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtypes=%p, comm=%C)";
-static const char short_spc274[] = "**mpi_op_commutative %O %p";
-static const char long_spc274[] = "MPI_Op_commutative(op=%O, commute=%p) failed";
-static const char short_spc275[] = "**mpi_op_create %p %d %p";
-static const char long_spc275[] = "MPI_Op_create(fn=%p, commute=%d, op=%p) failed";
-static const char short_spc276[] = "**mpi_op_free %p";
-static const char long_spc276[] = "MPI_Op_free(op=%p) failed";
-static const char short_spc277[] = "**mpi_open_port %I %p";
-static const char long_spc277[] = "MPI_Open_port(%I, port=%p) failed";
-static const char short_spc278[] = "**mpi_pack %p %d %D %p %d %p %C";
-static const char long_spc278[] = "MPI_Pack(inbuf=%p, incount=%d, %D, outbuf=%p, outcount=%d, position=%p, %C) failed";
-static const char short_spc279[] = "**mpi_pack_external %s %p %d %D %p %d %p";
-static const char long_spc279[] = "MPI_Pack_external(datarep=%s, inbuf=%p, incount=%d, %D, outbuf=%p, outcount=%d, position=%p) failed";
-static const char short_spc280[] = "**mpi_pack_external_size %s %d %D %p";
-static const char long_spc280[] = "MPI_Pack_external_size(datarep=%s, incount=%d, %D, size=%p) failed";
-static const char short_spc281[] = "**mpi_pack_size %d %D %C %p";
-static const char long_spc281[] = "MPI_Pack_size(count=%d, %D, %C, size=%p) failed";
-static const char short_spc282[] = "**mpi_probe %i %t %C %p";
-static const char long_spc282[] = "MPI_Probe(src=%i, tag=%t, %C, status=%p) failed";
-static const char short_spc283[] = "**mpi_publish_name %s %I %s";
-static const char long_spc283[] = "MPI_Publish_name(service=\"%s\", %I, port=\"%s\") failed";
-static const char short_spc284[] = "**mpi_put %p %d %D %d %d %d %D %W";
-static const char long_spc284[] = "MPI_Put(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W) failed";
-static const char short_spc285[] = "**mpi_query_thread %p";
-static const char long_spc285[] = "MPI_Query_thread(provided=%p) failed";
-static const char short_spc286[] = "**mpi_raccumulate %p %d %D %d %d %d %D %O %W %p";
-static const char long_spc286[] = "MPI_Raccumulate(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W, request=%p) failed";
-static const char short_spc287[] = "**mpi_recv %p %d %D %i %t %C %p";
-static const char long_spc287[] = "MPI_Recv(buf=%p, count=%d, %D, src=%i, tag=%t, %C, status=%p) failed";
-static const char short_spc288[] = "**mpi_recv_init %p %d %D %i %t %C %p";
-static const char long_spc288[] = "MPI_Recv_init(buf=%p, count=%d, %D, src=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc289[] = "**mpi_reduce %p %p %d %D %O %d %C";
-static const char long_spc289[] = "MPI_Reduce(sbuf=%p, rbuf=%p, count=%d, %D, %O, root=%d, %C) failed";
-static const char short_spc290[] = "**mpi_reduce_local %p %p %d %D %O";
-static const char long_spc290[] = "MPI_Reduce_local(inbuf=%p, inoutbuf=%p, count=%d, %D, %O) failed";
-static const char short_spc291[] = "**mpi_reduce_scatter %p %p %p %D %O %C";
-static const char long_spc291[] = "MPI_Reduce_scatter(sbuf=%p, rbuf=%p, rcnts=%p, %D, %O, %C) failed";
-static const char short_spc292[] = "**mpi_reduce_scatter_block %p %p %d %D %O %C";
-static const char long_spc292[] = "MPI_Reduce_scatter_block(sbuf=%p, rbuf=%p, recvcount=%d, %D, %O, %C) failed";
-static const char short_spc293[] = "**mpi_register_datarep %s %p %p %p %p";
-static const char long_spc293[] = "MPI_Register_datarep(datarep=%s, read_conversion_fn=%p, write_conversion_fn=%p, dtype_file_extent_fn=%p, extra_state=%p) failed";
-static const char short_spc294[] = "**mpi_request_free %p";
-static const char long_spc294[] = "MPI_Request_free(request=%p) failed";
-static const char short_spc295[] = "**mpi_request_get_status %R %p %p";
-static const char long_spc295[] = "MPI_Request_get_status(%R, flag=%p, status=%p) failed";
-static const char short_spc296[] = "**mpi_rget %p %d %D %d %d %d %D %W %p";
-static const char long_spc296[] = "MPI_Rget(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W, request=%p) failed";
-static const char short_spc297[] = "**mpi_rget_accumulate %p %d %D %p %d %D %d %d %d %D %O %W %p";
-static const char long_spc297[] = "MPI_Rget_accumulate(origin_addr=%p, origin_count=%d, %D, result_addr=%p, result_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W, %p) failed";
-static const char short_spc298[] = "**mpi_rput %p %d %D %d %d %d %D %W %p";
-static const char long_spc298[] = "MPI_Rput(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W, request=%p) failed";
-static const char short_spc299[] = "**mpi_rsend %p %d %D %i %t %C";
-static const char long_spc299[] = "MPI_Rsend(buf=%p, count=%d, %D, src=%i, tag=%t, %C) failed";
-static const char short_spc300[] = "**mpi_rsend_init %p %d %D %i %t %C %p";
-static const char long_spc300[] = "MPI_Rsend_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc301[] = "**mpi_scan %p %p %d %D %O %C";
-static const char long_spc301[] = "MPI_Scan(sbuf=%p, rbuf=%p, count=%d, %D, %O, %C) failed";
-static const char short_spc302[] = "**mpi_scatter %p %d %D %p %d %D %d %C";
-static const char long_spc302[] = "MPI_Scatter(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, root=%d, %C) failed";
-static const char short_spc303[] = "**mpi_scatterv %p %p %p %D %p %d %D %d %C";
-static const char long_spc303[] = "MPI_Scatterv(sbuf=%p, scnts=%p, displs=%p, %D, rbuf=%p, rcount=%d, %D, root=%d, %C) failed";
-static const char short_spc304[] = "**mpi_send %p %d %D %i %t %C";
-static const char long_spc304[] = "MPI_Send(buf=%p, count=%d, %D, dest=%i, tag=%t, %C) failed";
-static const char short_spc305[] = "**mpi_send_init %p %d %D %i %t %C %p";
-static const char long_spc305[] = "MPI_Send_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc306[] = "**mpi_sendrecv %p %d %D %i %t %p %d %D %i %t %C %p";
-static const char long_spc306[] = "MPI_Sendrecv(sbuf=%p, scount=%d, %D, dest=%i, stag=%t, rbuf=%p, rcount=%d, %D, src=%i, rtag=%t, %C, status=%p) failed";
-static const char short_spc307[] = "**mpi_sendrecv_replace %p %d %D %i %t %i %t %C %p";
-static const char long_spc307[] = "MPI_Sendrecv_replace(buf=%p, count=%d, %D, dest=%i, stag=%t, src=%i, rtag=%t, %C, status=%p) failed";
-static const char short_spc308[] = "**mpi_ssend %p %d %D %i %t %C";
-static const char long_spc308[] = "MPI_Ssend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C) failed";
-static const char short_spc309[] = "**mpi_ssend_init %p %d %D %i %t %C %p";
-static const char long_spc309[] = "MPI_Ssend_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
-static const char short_spc310[] = "**mpi_start %p";
-static const char long_spc310[] = "MPI_Start(request=%p) failed";
-static const char short_spc311[] = "**mpi_startall %d %p";
-static const char long_spc311[] = "MPI_Startall(count=%d, req_array=%p) failed";
-static const char short_spc312[] = "**mpi_status_set_cancelled %p %d";
-static const char long_spc312[] = "MPI_Status_set_cancelled(status=%p, flag=%d) failed";
-static const char short_spc313[] = "**mpi_status_set_elements %p %D %d";
-static const char long_spc313[] = "MPI_Status_set_elements(status=%p, %D, count=%d) failed";
-static const char short_spc314[] = "**mpi_status_set_elements_x %p %D %c";
-static const char long_spc314[] = " MPI_Status_set_elements_x(status=%p, datatype=%D, count=%c)";
-static const char short_spc315[] = "**mpi_t_category_changed %p";
-static const char long_spc315[] = " MPI_T_category_changed(stamp=%p)";
-static const char short_spc316[] = "**mpi_t_category_get_categories %d %d %p";
-static const char long_spc316[] = " MPI_T_category_get_categories(cat_index=%d, len=%d, indices=%p)";
-static const char short_spc317[] = "**mpi_t_category_get_cvars %d %d %p";
-static const char long_spc317[] = " MPI_T_category_get_cvars(cat_index=%d, len=%d, indices=%p)";
-static const char short_spc318[] = "**mpi_t_category_get_info %d %p %p %p %p %p %p %p";
-static const char long_spc318[] = " MPI_T_category_get_info(cat_index=%d, name=%p, name_len=%p, desc=%p, desc_len=%p, num_controlvars=%p, num_pvars=%p, num_categories=%p)";
-static const char short_spc319[] = "**mpi_t_category_get_num %p";
-static const char long_spc319[] = " MPI_T_category_get_num(num_cat=%p)";
-static const char short_spc320[] = "**mpi_t_category_get_pvars %d %d %p";
-static const char long_spc320[] = " MPI_T_category_get_pvars(cat_index=%d, len=%d, indices=%p)";
-static const char short_spc321[] = "**mpi_t_cvar_get_info %d %p %p %p %p %p %p %p %p %p";
-static const char long_spc321[] = " MPI_T_cvar_get_info(cvar_index=%d, name=%p, name_len=%p, verbosity=%p, datatype=%p, enumtype=%p, desc=%p, desc_len=%p, bind=%p, scope=%p)";
-static const char short_spc322[] = "**mpi_t_cvar_get_num %p";
-static const char long_spc322[] = " MPI_T_cvar_get_num(num_cvar=%p)";
-static const char short_spc323[] = "**mpi_t_cvar_handle_alloc %d %p %p %p";
-static const char long_spc323[] = " MPI_T_cvar_handle_alloc(cvar_index=%d, obj_handle=%p, handle=%p, count=%p)";
-static const char short_spc324[] = "**mpi_t_cvar_handle_free %p";
-static const char long_spc324[] = " MPI_T_cvar_handle_free(handle=%p)";
-static const char short_spc325[] = "**mpi_t_cvar_read %p %p";
-static const char long_spc325[] = " MPI_T_cvar_read(handle=%p, buf=%p)";
-static const char short_spc326[] = "**mpi_t_cvar_write %p %p";
-static const char long_spc326[] = " MPI_T_cvar_write(handle=%p, buf=%p)";
-static const char short_spc327[] = "**mpi_t_enum_get_info %p %p %p %p";
-static const char long_spc327[] = " MPI_T_enum_get_info(enumtype=%p, num=%p, name=%p, name_len=%p)";
-static const char short_spc328[] = "**mpi_t_enum_get_item %p %d %p %p %p";
-static const char long_spc328[] = " MPI_T_enum_get_item(enumtype=%p, num=%d, value=%p, name=%p, name_len=%p)";
-static const char short_spc329[] = "**mpi_t_init_thread %d %p";
-static const char long_spc329[] = " MPI_T_init_thread(required=%d, provided=%p)";
-static const char short_spc330[] = "**mpi_t_pvar_get_info %d %p %p %p %p %p %p %p %p %p %p %p %p";
-static const char long_spc330[] = " MPI_T_pvar_get_info(pvar_index=%d, name=%p, name_len=%p, verbosity=%p, var_class=%p, datatype=%p, enumtype=%p, desc=%p, desc_len=%p, bind=%p, readonly=%p, continuous=%p, atomic=%p)";
-static const char short_spc331[] = "**mpi_t_pvar_get_num %p";
-static const char long_spc331[] = " MPI_T_pvar_get_num(num_pvar=%p)";
-static const char short_spc332[] = "**mpi_t_pvar_handle_alloc %p %d %p %p %p";
-static const char long_spc332[] = " MPI_T_pvar_handle_alloc(session=%p, pvar_index=%d, obj_handle=%p, handle=%p, count=%p)";
-static const char short_spc333[] = "**mpi_t_pvar_handle_free %p %p";
-static const char long_spc333[] = " MPI_T_pvar_handle_free(session=%p, handle=%p)";
-static const char short_spc334[] = "**mpi_t_pvar_read %p %p %p";
-static const char long_spc334[] = " MPI_T_pvar_read(session=%p, handle=%p, buf=%p)";
-static const char short_spc335[] = "**mpi_t_pvar_readreset %p %p %p";
-static const char long_spc335[] = " MPI_T_pvar_readreset(session=%p, handle=%p, buf=%p)";
-static const char short_spc336[] = "**mpi_t_pvar_reset %p %p";
-static const char long_spc336[] = " MPI_T_pvar_reset(session=%p, handle=%p)";
-static const char short_spc337[] = "**mpi_t_pvar_session_create %p";
-static const char long_spc337[] = " MPI_T_pvar_session_create(session=%p)";
-static const char short_spc338[] = "**mpi_t_pvar_session_free %p";
-static const char long_spc338[] = " MPI_T_pvar_session_free(session=%p)";
-static const char short_spc339[] = "**mpi_t_pvar_start %p %p";
-static const char long_spc339[] = " MPI_T_pvar_start(session=%p, handle=%p)";
-static const char short_spc340[] = "**mpi_t_pvar_stop %p %p";
-static const char long_spc340[] = " MPI_T_pvar_stop(session=%p, handle=%p)";
-static const char short_spc341[] = "**mpi_t_pvar_write %p %p %p";
-static const char long_spc341[] = " MPI_T_pvar_write(session=%p, handle=%p, buf=%p)";
-static const char short_spc342[] = "**mpi_test %p %p %p";
-static const char long_spc342[] = "MPI_Test(request=%p, flag=%p, status=%p) failed";
-static const char short_spc343[] = "**mpi_test_cancelled %p %p";
-static const char long_spc343[] = "MPI_Test_cancelled(status=%p, flag=%p) failed";
-static const char short_spc344[] = "**mpi_testall %d %p %p %p";
-static const char long_spc344[] = "MPI_Testall(count=%d, req_array=%p, flag=%p, status_array=%p) failed";
-static const char short_spc345[] = "**mpi_testany %d %p %p %p %p";
-static const char long_spc345[] = "MPI_Testany(count=%d, req_array=%p, index=%p, flag=%p, status=%p) failed";
-static const char short_spc346[] = "**mpi_testsome %d %p %p %p %p";
-static const char long_spc346[] = "MPI_Testsome(count=%d, req_array=%p, out_count=%p, indices=%p, status_array=%p) failed";
-static const char short_spc347[] = "**mpi_topo_test %C %p";
-static const char long_spc347[] = "MPI_Topo_test(%C, topo_type=%p) failed";
-static const char short_spc348[] = "**mpi_type_commit %p";
-static const char long_spc348[] = "MPI_Type_commit(datatype_p=%p) failed";
-static const char short_spc349[] = "**mpi_type_contiguous %d %D %p";
-static const char long_spc349[] = "MPI_Type_contiguous(count=%d, %D, new_type_p=%p) failed";
-static const char short_spc350[] = "**mpi_type_create_darray %d %d %d %p %p %p %p %d %D %p";
-static const char long_spc350[] = "MPI_Type_create_darray(size=%d, rank=%d, ndims=%d, array_of_gsizes=%p, array_of_distribs=%p, array_of_dargs=%p, array_of_psizes=%p, order=%d, %D, newtype=%p) failed";
-static const char short_spc351[] = "**mpi_type_create_f90_complex %d %d";
-static const char long_spc351[] = "MPI_Type_create_f90_complex (precision=%d, range=%d) failed";
-static const char short_spc352[] = "**mpi_type_create_f90_int %d";
-static const char long_spc352[] = " MPI_Type_create_f90_int (range=%d) failed";
-static const char short_spc353[] = "**mpi_type_create_f90_real %d %d";
-static const char long_spc353[] = "MPI_Type_create_f90_real (precision=%d, range=%d) failed";
-static const char short_spc354[] = "**mpi_type_create_hindexed %d %p %p %D %p";
-static const char long_spc354[] = "MPI_Type_create_hindexed(count=%d, array_of_blocklengths=%p, array_of_displacements=%p, %D, newtype=%p) failed";
-static const char short_spc355[] = "**mpi_type_create_hindexed_block %d %d %p %D %p";
-static const char long_spc355[] = "MPI_Type_create_hindexed_block(count=%d, blocklength=%d, array_of_displacements=%p, %D, newtype=%p) failed";
-static const char short_spc356[] = "**mpi_type_create_hvector %d %d %d %D %p";
-static const char long_spc356[] = "MPI_Type_create_hvector(count=%d, blocklength=%d, stride=%d, %D, newtype=%p) failed";
-static const char short_spc357[] = "**mpi_type_create_indexed_block %d %d %p %D %p";
-static const char long_spc357[] = "MPI_Type_create_indexed_block(count=%d, blocklength=%d, array_of_displacements=%p, %D, newtype=%p) failed";
-static const char short_spc358[] = "**mpi_type_create_keyval %p %p %p %p";
-static const char long_spc358[] = "MPI_Type_create_keyval(type_copy_attr_fn=%p, type_delete_attr_fn=%p, type_keyval=%p, extra_state=%p) failed";
-static const char short_spc359[] = "**mpi_type_create_resized %D %L %L %p";
-static const char long_spc359[] = "MPI_Type_create_resized(%D, lb=%L, extent=%L, newtype=%p) failed";
-static const char short_spc360[] = "**mpi_type_create_struct %d %p %p %p %p";
-static const char long_spc360[] = "MPI_Type_create_struct(count=%d, array_of_blocklengths=%p, array_of_displacements=%p, array_of_types=%p, newtype=%p) failed";
-static const char short_spc361[] = "**mpi_type_create_subarray %d %p %p %p %d %D %p";
-static const char long_spc361[] = "MPI_Type_create_subarray(ndims=%d, array_of_sizes=%p, array_of_subsizes=%p, array_of_starts=%p, order=%d, %D, newtype=%p) failed";
-static const char short_spc362[] = "**mpi_type_delete_attr %D %d";
-static const char long_spc362[] = "MPI_Type_delete_attr(%D, type_keyval=%d) failed";
-static const char short_spc363[] = "**mpi_type_dup %D %p";
-static const char long_spc363[] = "MPI_Type_dup(%D, newtype=%p) failed";
-static const char short_spc364[] = "**mpi_type_extent %D %p";
-static const char long_spc364[] = "MPI_Type_extent(%D, extent=%p) failed";
-static const char short_spc365[] = "**mpi_type_free %p";
-static const char long_spc365[] = "MPI_Type_free(datatype_p=%p) failed";
-static const char short_spc366[] = "**mpi_type_free_keyval %p";
-static const char long_spc366[] = "MPI_Type_free_keyval(type_keyval=%p) failed";
-static const char short_spc367[] = "**mpi_type_get_attr %D %d %p %p";
-static const char long_spc367[] = "MPI_Type_get_attr(%D, type_keyval=%d, attribute_val=%p, flag=%p) failed";
-static const char short_spc368[] = "**mpi_type_get_contents %D %d %d %d %p %p %p";
-static const char long_spc368[] = "MPI_Type_get_contents(%D, max_integers=%d, max_addresses=%d, max_datatypes=%d, array_of_integers=%p, array_of_addresses=%p, array_of_datatypes=%p) failed";
-static const char short_spc369[] = "**mpi_type_get_envelope %D %p %p %p %p";
-static const char long_spc369[] = "MPI_Type_get_envelope(%D, num_integers=%p, num_addresses=%p, num_datatypes=%p, combiner=%p) failed";
-static const char short_spc370[] = "**mpi_type_get_extent %D %p %p";
-static const char long_spc370[] = "MPI_Type_get_extent(%D, lb=%p, extent=%p) failed";
-static const char short_spc371[] = "**mpi_type_get_extent_x %D %p %p";
-static const char long_spc371[] = " MPI_Type_get_extent_x(datatype=%D, lb=%p, extent=%p)";
-static const char short_spc372[] = "**mpi_type_get_name %D %p %p";
-static const char long_spc372[] = "MPI_Type_get_name(%D, type_name=%p, resultlen=%p) failed";
-static const char short_spc373[] = "**mpi_type_get_true_extent %D %p %p";
-static const char long_spc373[] = "MPI_Type_get_true_extent(%D, lb=%p, true_extent=%p) failed";
-static const char short_spc374[] = "**mpi_type_get_true_extent_x %D %p %p";
-static const char long_spc374[] = " MPI_Type_get_true_extent_x(datatype=%D, lb=%p, extent=%p)";
-static const char short_spc375[] = "**mpi_type_hindexed %d %p %p %D %p";
-static const char long_spc375[] = "MPI_Type_hindexed(count=%d, blocklens=%p, indices=%p, %D, new_type_p=%p) failed";
-static const char short_spc376[] = "**mpi_type_hvector %d %d %d %D %p";
-static const char long_spc376[] = "MPI_Type_hvector(count=%d, blocklen=%d, stride=%d, %D, new_type_p=%p) failed";
-static const char short_spc377[] = "**mpi_type_indexed %d %p %p %D %p";
-static const char long_spc377[] = "MPI_Type_indexed(count=%d, blocklens=%p, indices=%p, %D, new_type_p=%p) failed";
-static const char short_spc378[] = "**mpi_type_lb %D %p";
-static const char long_spc378[] = "MPI_Type_lb(%D, displacement=%p) failed";
-static const char short_spc379[] = "**mpi_type_match_size %d %d %p";
-static const char long_spc379[] = "MPI_Type_match_size(typeclass=%d, size=%d, datatype=%p) failed";
-static const char short_spc380[] = "**mpi_type_set_attr %D %d %p";
-static const char long_spc380[] = "MPI_Type_set_attr(%D, type_keyval=%d, attribute_val=%p) failed";
-static const char short_spc381[] = "**mpi_type_set_name %D %s";
-static const char long_spc381[] = "MPI_Type_set_name(%D, type_name=%s) failed";
-static const char short_spc382[] = "**mpi_type_size %D %p";
-static const char long_spc382[] = "MPI_Type_size(%D) failed";
-static const char short_spc383[] = "**mpi_type_size_x %D %p";
-static const char long_spc383[] = " MPI_Type_size_x(datatype=%D, size=%p)";
-static const char short_spc384[] = "**mpi_type_struct %d %p %p %p %p";
-static const char long_spc384[] = "MPI_Type_struct(count=%d, blocklens=%p, indices=%p, old_types=%p, new_type_p=%p) failed";
-static const char short_spc385[] = "**mpi_type_ub %D %p";
-static const char long_spc385[] = "MPI_Type_ub(%D, displacement=%p) failed";
-static const char short_spc386[] = "**mpi_type_vector %d %d %d %D %p";
-static const char long_spc386[] = "MPI_Type_vector(count=%d, blocklength=%d, stride=%d, %D, new_type_p=%p) failed";
-static const char short_spc387[] = "**mpi_unpack %p %d %p %p %d %D %C";
-static const char long_spc387[] = "MPI_Unpack(inbuf=%p, insize=%d, position=%p, outbuf=%p, outcount=%d, %D, %C) failed";
-static const char short_spc388[] = "**mpi_unpack_external %s %p %d %p %p %d %D";
-static const char long_spc388[] = "MPI_Unpack_external(datarep=%s, inbuf=%p, insize=%d, position=%p, outbuf=%p, outcount=%d, %D) failed";
-static const char short_spc389[] = "**mpi_unpublish_name %s %I %s";
-static const char long_spc389[] = "MPI_Unpublish_name(service=\"%s\", %I, port=\"%s\") failed";
-static const char short_spc390[] = "**mpi_wait %p %p";
-static const char long_spc390[] = "MPI_Wait(request=%p, status=%p) failed";
-static const char short_spc391[] = "**mpi_waitall %d %p %p";
-static const char long_spc391[] = "MPI_Waitall(count=%d, req_array=%p, status_array=%p) failed";
-static const char short_spc392[] = "**mpi_waitany %d %p %p %p";
-static const char long_spc392[] = "MPI_Waitany(count=%d, req_array=%p, index=%p, status=%p) failed";
-static const char short_spc393[] = "**mpi_waitsome %d %p %p %p %p";
-static const char long_spc393[] = "MPI_Waitsome(count=%d, req_array=%p, out_count=%p, indices=%p, status_array=%p) failed";
-static const char short_spc394[] = "**mpi_win_allocate %d %d %I %C %p %p";
-static const char long_spc394[] = "MPI_Win_allocate(size=%d, disp_unit=%d, %I, %C, base=%p, win=%p) failed";
-static const char short_spc395[] = "**mpi_win_allocate_shared %d %I %C %p %p";
-static const char long_spc395[] = "MPI_Win_allocate_shared(size=%d, %I, %C, baseptr=%p, win=%p) failed";
-static const char short_spc396[] = "**mpi_win_attach %W %p %d";
-static const char long_spc396[] = "MPI_Win_attach(%W, base=%p, size=%d) failed";
-static const char short_spc397[] = "**mpi_win_call_errhandler %W %d";
-static const char long_spc397[] = "MPI_Win_call_errhandler(%W, errorcode=%d) failed";
-static const char short_spc398[] = "**mpi_win_complete %W";
-static const char long_spc398[] = "MPI_Win_complete(%W) failed";
-static const char short_spc399[] = "**mpi_win_create %p %d %d %I %C %p";
-static const char long_spc399[] = "MPI_Win_create(base=%p, size=%d, disp_unit=%d, %I, %C, win=%p) failed";
-static const char short_spc400[] = "**mpi_win_create_dynamic %I %C %p";
-static const char long_spc400[] = "MPI_Win_create_dynamic(%I, %C, win=%p) failed";
-static const char short_spc401[] = "**mpi_win_create_errhandler %p %p";
-static const char long_spc401[] = "MPI_Win_create_errhandler(function=%p, errhandler=%p) failed";
-static const char short_spc402[] = "**mpi_win_create_keyval %p %p %p %p";
-static const char long_spc402[] = "MPI_Win_create_keyval(win_copy_attr_fn=%p, win_delete_attr_fn=%p, win_keyval=%p, extra_state=%p) failed";
-static const char short_spc403[] = "**mpi_win_delete_attr %W %d";
-static const char long_spc403[] = "MPI_Win_delete_attr(%W, win_keyval=%d) failed";
-static const char short_spc404[] = "**mpi_win_detach %W %p";
-static const char long_spc404[] = "MPI_Win_detach(%W, base=%p) failed";
-static const char short_spc405[] = "**mpi_win_fence %A %W";
-static const char long_spc405[] = "MPI_Win_fence(%A, %W) failed";
-static const char short_spc406[] = "**mpi_win_flush %d %W";
-static const char long_spc406[] = "MPI_Win_flush(target_rank=%d, %W) failed";
-static const char short_spc407[] = "**mpi_win_flush_all %W";
-static const char long_spc407[] = "MPI_Win_flush_all(%W) failed";
-static const char short_spc408[] = "**mpi_win_flush_local %d %W";
-static const char long_spc408[] = "MPI_Win_flush_local(target_rank=%d, %W) failed";
-static const char short_spc409[] = "**mpi_win_flush_local_all %W";
-static const char long_spc409[] = "MPI_Win_flush_local_all(%W) failed";
-static const char short_spc410[] = "**mpi_win_free %p";
-static const char long_spc410[] = "MPI_Win_free(win=%p) failed";
-static const char short_spc411[] = "**mpi_win_free_keyval %p";
-static const char long_spc411[] = "MPI_Win_free_keyval(win_keyval=%p) failed";
-static const char short_spc412[] = "**mpi_win_get_attr %W %d %p %p";
-static const char long_spc412[] = "MPI_Win_get_attr(%W, win_keyval=%d, attribute_val=%p, flag=%p) failed";
-static const char short_spc413[] = "**mpi_win_get_errhandler %W %p";
-static const char long_spc413[] = "MPI_Win_get_errhandler(%W, errhandler=%p) failed";
-static const char short_spc414[] = "**mpi_win_get_group %W %p";
-static const char long_spc414[] = "MPI_Win_get_group(%W, group=%p) failed";
-static const char short_spc415[] = "**mpi_win_get_info %W %p";
-static const char long_spc415[] = "MPI_Win_get_info(win=%W, info_used=%p) failed";
-static const char short_spc416[] = "**mpi_win_get_name %W %p %p";
-static const char long_spc416[] = "MPI_Win_get_name(%W, win_name=%p, resultlen=%p) failed";
-static const char short_spc417[] = "**mpi_win_lock %d %d %A %W";
-static const char long_spc417[] = "MPI_Win_lock(lock_type=%d, rank=%d, %A, %W) failed";
-static const char short_spc418[] = "**mpi_win_lock_all %A %W";
-static const char long_spc418[] = "MPI_Win_lock_all(%A, %W) failed";
-static const char short_spc419[] = "**mpi_win_post %G %A %W";
-static const char long_spc419[] = "MPI_Win_post(%G, %A, %W) failed";
-static const char short_spc420[] = "**mpi_win_set_attr %W %d %p";
-static const char long_spc420[] = "MPI_Win_set_attr(%W, win_keyval=%d, attribute_val=%p) failed";
-static const char short_spc421[] = "**mpi_win_set_errhandler %W %E";
-static const char long_spc421[] = "MPI_Win_set_errhandler(%W, %E) failed";
-static const char short_spc422[] = "**mpi_win_set_info %W %I";
-static const char long_spc422[] = "MPI_Win_set_info(win=%W, info=%I) failed";
-static const char short_spc423[] = "**mpi_win_set_name %W %s";
-static const char long_spc423[] = "MPI_Win_set_name(%W, win_name=%s) failed";
-static const char short_spc424[] = "**mpi_win_shared_query %W %d %p %p";
-static const char long_spc424[] = "MPI_Win_shared_query(win=%W, rank=%d, size=%p, baseptr=%p) failed";
-static const char short_spc425[] = "**mpi_win_start %G %A %W";
-static const char long_spc425[] = "MPI_Win_start(%G, %A, %W) failed";
-static const char short_spc426[] = "**mpi_win_sync %W";
-static const char long_spc426[] = "MPI_Win_sync(%W) failed";
-static const char short_spc427[] = "**mpi_win_test %W %p";
-static const char long_spc427[] = "MPI_Win_test(%W, flag=%p) failed";
-static const char short_spc428[] = "**mpi_win_unlock %d %W";
-static const char long_spc428[] = "MPI_Win_unlock(rank=%d, %W) failed";
-static const char short_spc429[] = "**mpi_win_unlock_all %W";
-static const char long_spc429[] = "MPI_Win_unlock_all(%W) failed";
-static const char short_spc430[] = "**mpi_win_wait %W";
-static const char long_spc430[] = "MPI_Win_wait(%W) failed";
-static const char short_spc431[] = "**mpir_comm_get_attr %C %d %p %p";
-static const char long_spc431[] = "MPIR_Comm_get_attr(%C, comm_keyval=%d, attribute_val=%p, flag=%p) failed";
-static const char short_spc432[] = "**mpir_type_get_attr %D %d %p %p";
-static const char long_spc432[] = "MPIR_Type_get_attr(%D, type_keyval=%d, attribute_val=%p, flag=%p) failed";
-static const char short_spc433[] = "**mpir_wingetattr %W %d %p %p";
-static const char long_spc433[] = "MPIR_WinGetAttr(%W, win_keyval=%d, attribute_val=%p, flag=%p) failed";
-static const char short_spc434[] = "**mpix_comm_agree %C";
-static const char long_spc434[] = "MPIX_Comm_agree(%C) failed";
-static const char short_spc435[] = "**mpix_comm_failure_ack %C";
-static const char long_spc435[] = "MPIX_Comm_failure_ack(%C) failed";
-static const char short_spc436[] = "**mpix_comm_failure_get_acked %C %p";
-static const char long_spc436[] = "MPIX_Comm_failure_get_acked(%C, group=%p) failed";
-static const char short_spc437[] = "**mpix_comm_revoke %C";
-static const char long_spc437[] = "MPIX_Comm_revoke(%C) failed";
-static const char short_spc438[] = "**mpix_comm_shrink %C %p";
-static const char long_spc438[] = "MPIX_Comm_shrink(%C, new_comm=%p) failed";
-static const char short_spc439[] = "**mpix_grequest_class_create %p %p %p %p %p";
-static const char long_spc439[] = "MPIX_Grequest_class_create(query_fn=%p, free_fn=%p, cancel_fn=%p, %poll_fn=%p, wait_fn=%p) failed";
-static const char short_spc440[] = "**msgnotreq %d";
-static const char long_spc440[] = " Invalid MPI_Request at array index %d (MPI_Message passed)";
-static const char short_spc441[] = "**mutex_create %s";
-static const char long_spc441[] = "MPID_Thread_mutex_create failed: %s";
-static const char short_spc442[] = "**mxm_config_read_opts %s";
-static const char long_spc442[] = "mxm_config_read_opts failed (%s)";
-static const char short_spc443[] = "**mxm_ep_connect %s";
-static const char long_spc443[] = "mxm_ep_connect failed (%s)";
-static const char short_spc444[] = "**mxm_ep_create %s";
-static const char long_spc444[] = "mxm_ep_create failed (%s)";
-static const char short_spc445[] = "**mxm_ep_disconnect %s";
-static const char long_spc445[] = "mxm_ep_disconnect failed (%s)";
-static const char short_spc446[] = "**mxm_ep_get_address %s";
-static const char long_spc446[] = "mxm_ep_get_address failed (%s)";
-static const char short_spc447[] = "**mxm_init %s";
-static const char long_spc447[] = "mxm_init failed (%s)";
-static const char short_spc448[] = "**mxm_mq_create %s";
-static const char long_spc448[] = "mxm_mq_create failed (%s)";
-static const char short_spc449[] = "**mxm_set_am_handler %s";
-static const char long_spc449[] = "mxm_set_am_handler failed (%s)";
-static const char short_spc450[] = "**namepubfile %s %s %s";
-static const char long_spc450[] = "Unable to publish service name %s using file %s for reason %s";
-static const char short_spc451[] = "**namepubnotfound %s";
-static const char long_spc451[] = "Lookup failed for service name %s";
-static const char short_spc452[] = "**namepubnotpub %s";
-static const char long_spc452[] = "Lookup failed for service name %s";
-static const char short_spc453[] = "**namepubnotunpub %s";
-static const char long_spc453[] = "Failed to unpublish service name %s";
-static const char short_spc454[] = "**nomem %d";
-static const char long_spc454[] = "Out of memory (unable to allocate %d bytes)";
-static const char short_spc455[] = "**nomem %s";
-static const char long_spc455[] = "Out of memory (unable to allocate a '%s')";
-static const char short_spc456[] = "**nomem %s %d";
-static const char long_spc456[] = "Out of memory (unable to allocate a '%s' of size %d)";
-static const char short_spc457[] = "**nomem2 %d %s";
-static const char long_spc457[] = "Unable to allocate %d bytes of memory for %s (probably out of memory)";
-static const char short_spc458[] = "**nomemuereq %d";
-static const char long_spc458[] = "Failed to allocate memory for an unexpected message. %d unexpected messages queued.";
-static const char short_spc459[] = "**notimpl %s";
-static const char long_spc459[] = "Function %s not implemented";
-static const char short_spc460[] = "**notsame %s %s";
-static const char long_spc460[] = "Inconsistent arguments %s to collective routine %s";
-static const char short_spc461[] = "**nullptr %s";
-static const char long_spc461[] = "Null pointer in parameter %s";
-static const char short_spc462[] = "**nullptrtype %s";
-static const char long_spc462[] = "Null %s pointer";
-static const char short_spc463[] = "**ofi_avclose %s %d %s %s";
-static const char long_spc463[] = "OFI av close failed (%s:%d:%s:%s)";
-static const char short_spc464[] = "**ofi_avmap %s %d %s %s";
-static const char long_spc464[] = "OFI address vector map failed (%s:%d:%s:%s)";
-static const char short_spc465[] = "**ofi_avopen %s %d %s %s";
-static const char long_spc465[] = "OFI address vector open failed (%s:%d:%s:%s)";
-static const char short_spc466[] = "**ofi_bind %s %d %s %s";
-static const char long_spc466[] = "OFI resource bind failed (%s:%d:%s:%s)";
-static const char short_spc467[] = "**ofi_cancel %s %d %s %s";
-static const char long_spc467[] = "OFI cancel failed (%s:%d:%s:%s)";
-static const char short_spc468[] = "**ofi_cqclose %s %d %s %s";
-static const char long_spc468[] = "OFI cq close failed (%s:%d:%s:%s)";
-static const char short_spc469[] = "**ofi_domainclose %s %d %s %s";
-static const char long_spc469[] = "OFI domain close failed (%s:%d:%s:%s)";
-static const char short_spc470[] = "**ofi_ep_enable %s %d %s %s";
-static const char long_spc470[] = "OFI endpoint enable failed (%s:%d:%s:%s)";
-static const char short_spc471[] = "**ofi_epclose %s %d %s %s";
-static const char long_spc471[] = "OFI endpoint close failed (%s:%d:%s:%s)";
-static const char short_spc472[] = "**ofi_fabricclose %s %d %s %s";
-static const char long_spc472[] = "OFI fabric close failed (%s:%d:%s:%s)";
-static const char short_spc473[] = "**ofi_getinfo %s %d %s %s";
-static const char long_spc473[] = "OFI getinfo() failed (%s:%d:%s:%s)";
-static const char short_spc474[] = "**ofi_getname %s %d %s %s";
-static const char long_spc474[] = "OFI get endpoint name failed (%s:%d:%s:%s)";
-static const char short_spc475[] = "**ofi_opencq %s %d %s %s";
-static const char long_spc475[] = "OFI event queue create failed (%s:%d:%s:%s)";
-static const char short_spc476[] = "**ofi_opendomain %s %d %s %s";
-static const char long_spc476[] = "OFI domain open failed (%s:%d:%s:%s)";
-static const char short_spc477[] = "**ofi_openep %s %d %s %s";
-static const char long_spc477[] = "OFI endpoint open failed (%s:%d:%s:%s)";
-static const char short_spc478[] = "**ofi_openfabric %s %d %s %s";
-static const char long_spc478[] = "OFI fabric open failed (%s:%d:%s:%s)";
-static const char short_spc479[] = "**ofi_peek %s %d %s %s";
-static const char long_spc479[] = "OFI peek failed (%s:%d:%s:%s)";
-static const char short_spc480[] = "**ofi_poll %s %d %s %s";
-static const char long_spc480[] = "OFI poll failed (%s:%d:%s:%s)";
-static const char short_spc481[] = "**ofi_trecv %s %d %s %s";
-static const char long_spc481[] = "OFI tagged recvfrom failed (%s:%d:%s:%s)";
-static const char short_spc482[] = "**ofi_tsend %s %d %s %s";
-static const char long_spc482[] = "OFI tagged sendto failed (%s:%d:%s:%s)";
-static const char short_spc483[] = "**open %s";
-static const char long_spc483[] = "open failed - %s";
-static const char short_spc484[] = "**opnotpredefined %d";
-static const char long_spc484[] = "only predefined ops are valid (op = %d)";
-static const char short_spc485[] = "**opundefined %s";
-static const char long_spc485[] = "MPI_Op %s operation not defined for this datatype ";
-static const char short_spc486[] = "**pglookup %s";
-static const char long_spc486[] = "unable to find the process group structure with id <%s>";
-static const char short_spc487[] = "**pmi_barrier %d";
-static const char long_spc487[] = "PMI_Barrier returned %d";
-static const char short_spc488[] = "**pmi_get_appnum %d";
-static const char long_spc488[] = "PMI_Get_appnum returned %d";
-static const char short_spc489[] = "**pmi_get_id %d";
-static const char long_spc489[] = "PMI_Get_id returned %d";
-static const char short_spc490[] = "**pmi_get_id_length_max %d";
-static const char long_spc490[] = "PMI_Get_id_length_max returned %d";
-static const char short_spc491[] = "**pmi_get_rank %d";
-static const char long_spc491[] = "PMI_Get_rank returned %d";
-static const char short_spc492[] = "**pmi_get_size %d";
-static const char long_spc492[] = "PMI_Get_size returned %d";
-static const char short_spc493[] = "**pmi_get_universe_size %d";
-static const char long_spc493[] = "PMI_Get_universe_size returned %d";
-static const char short_spc494[] = "**pmi_init %d";
-static const char long_spc494[] = "PMI_Init returned %d";
-static const char short_spc495[] = "**pmi_kvs_commit %d";
-static const char long_spc495[] = "PMI_KVS_Commit returned %d";
-static const char short_spc496[] = "**pmi_kvs_get %d";
-static const char long_spc496[] = "PMI_KVS_Get returned %d";
-static const char short_spc497[] = "**pmi_kvs_get_my_name %d";
-static const char long_spc497[] = "PMI_KVS_Get_my_name returned %d";
-static const char short_spc498[] = "**pmi_kvs_get_name_length_max %d";
-static const char long_spc498[] = "PMI_KVS_Get_name_length_max returned %d";
-static const char short_spc499[] = "**pmi_kvs_get_value_length_max %d";
-static const char long_spc499[] = "PMI_KVS_Get_value_length_max returned %d";
-static const char short_spc500[] = "**pmi_kvs_put %d";
-static const char long_spc500[] = "PMI_KVS_Put returned %d";
-static const char short_spc501[] = "**pmi_kvsget %d";
-static const char long_spc501[] = " PMI2 KVS_Get failed: %d";
-static const char short_spc502[] = "**pmi_kvsget %s";
-static const char long_spc502[] = " PMI2 KVS_Get failed: %s";
-static const char short_spc503[] = "**pmi_spawn_multiple %d";
-static const char long_spc503[] = "PMI_Spawn_multiple returned %d";
-static const char short_spc504[] = "**poll %s";
-static const char long_spc504[] = "poll of socket fds failed - %s";
-static const char short_spc505[] = "**portexist %s";
-static const char long_spc505[] = "Named port %s does not exist";
-static const char short_spc506[] = "**pthread_lock %s";
-static const char long_spc506[] = "pthread_lock failed (%s)";
-static const char short_spc507[] = "**pthread_mutex %s";
-static const char long_spc507[] = "pthread mutex routine failed (%s)";
-static const char short_spc508[] = "**pthread_unlock %s";
-static const char long_spc508[] = "pthread_unlock failed (%s)";
-static const char short_spc509[] = "**ptleqalloc %s";
-static const char long_spc509[] = "PtlEQAlloc() failed (%s)";
-static const char short_spc510[] = "**ptleqget %s";
-static const char long_spc510[] = "PtlEQGet() failed (%s)";
-static const char short_spc511[] = "**ptlget %s";
-static const char long_spc511[] = "PtlGet() failed (%s)";
-static const char short_spc512[] = "**ptlgetid %s";
-static const char long_spc512[] = "PtlGetId() failed (%s)";
-static const char short_spc513[] = "**ptlinit %s";
-static const char long_spc513[] = "PtlInit() failed (%s)";
-static const char short_spc514[] = "**ptlmdbind %s";
-static const char long_spc514[] = "PtlMDBind() failed (%s)";
-static const char short_spc515[] = "**ptlmdrelease %s";
-static const char long_spc515[] = "PtlMDRelease() failed (%s)";
-static const char short_spc516[] = "**ptlmeappend %s";
-static const char long_spc516[] = "PtlMEAppend() failed (%s)";
-static const char short_spc517[] = "**ptlmesearch %s";
-static const char long_spc517[] = "PtlMESearch() failed (%s)";
-static const char short_spc518[] = "**ptlmeunlink %s";
-static const char long_spc518[] = "PtlMEUnlink() failed (%s)";
-static const char short_spc519[] = "**ptlni_fail %s %s";
-static const char long_spc519[] = "communication failure event=%s fail_type=%s";
-static const char short_spc520[] = "**ptlnifini %s";
-static const char long_spc520[] = "PtlNIFini() failed (%s)";
-static const char short_spc521[] = "**ptlniinit %s";
-static const char long_spc521[] = "PtlNIInit() failed (%s)";
-static const char short_spc522[] = "**ptlptalloc %s";
-static const char long_spc522[] = "PtlPTAlloc() failed (%s)";
-static const char short_spc523[] = "**ptlptfree %s";
-static const char long_spc523[] = "PtlPTFree() failed (%s)";
-static const char short_spc524[] = "**ptlput %s";
-static const char long_spc524[] = "PtlPut() failed (%s)";
-static const char short_spc525[] = "**rangedup %d %d %d";
-static const char long_spc525[] = "The range array specifies duplicate entries; process %d specified in range array %d was previously specified in range array %d";
-static const char short_spc526[] = "**rangeendinvalid %d %d %d";
-static const char long_spc526[] = "The %dth element of a range array ends at %d but must be nonnegative and less than %d";
-static const char short_spc527[] = "**rangestartinvalid %d %d %d";
-static const char long_spc527[] = "The %dth element of a range array starts at %d but must be nonnegative and less than %d";
-static const char short_spc528[] = "**rank %d %d";
-static const char long_spc528[] = "Invalid rank has value %d but must be nonnegative and less than %d";
-static const char short_spc529[] = "**rankarray %d %d %d";
-static const char long_spc529[] = "Invalid rank in rank array at index %d; value is %d but must be in the range 0 to %d";
-static const char short_spc530[] = "**rankdup %d %d %d";
-static const char long_spc530[] = "Duplicate ranks in rank array at index %d, has value %d which is also the value at index %d";
-static const char short_spc531[] = "**ranklocal %d %d";
-static const char long_spc531[] = "Error specifying local_leader; rank given was %d but must be in the range 0 to %d";
-static const char short_spc532[] = "**rankremote %d %d";
-static const char long_spc532[] = "Error specifying remote_leader; rank given was %d but must be in the range 0 to %d";
-static const char short_spc533[] = "**read %d %s";
-static const char long_spc533[] = "read from socket failed - nread=%d %s";
-static const char short_spc534[] = "**read %s";
-static const char long_spc534[] = "read from socket failed - %s";
-static const char short_spc535[] = "**readv %d %s";
-static const char long_spc535[] = "readv failed - errno %d (%s)";
-static const char short_spc536[] = "**recv_status %d";
-static const char long_spc536[] = "receive status failed %d";
-static const char short_spc537[] = "**remove_shar_mem %s %s";
-static const char long_spc537[] = "unable to remove shared memory - %s %s";
-static const char short_spc538[] = "**request %d";
-static const char long_spc538[] = "Invalid MPI_Request in array element %d (from 0)";
-static const char short_spc539[] = "**request_invalid_kind %d";
-static const char long_spc539[] = "The supplied request was invalid (kind=%d)";
-static const char short_spc540[] = "**request_invalid_kind %d %d";
-static const char long_spc540[] = "The supplied request in array element %d was invalid (kind=%d)";
-static const char short_spc541[] = "**rmasize %d";
-static const char long_spc541[] = "Invalid size argument in RMA call (value is %d)";
-static const char short_spc542[] = "**rmatypenotatomic %D";
-static const char long_spc542[] = " Datatype (%D) not permitted for atomic operations";
-static const char short_spc543[] = "**root %d";
-static const char long_spc543[] = "Invalid root (value given was %d)";
-static const char short_spc544[] = "**rsendnomatch %d %d";
-static const char long_spc544[] = "Ready send from source %d and with tag %d had no matching receive";
-static const char short_spc545[] = "**select %s %d";
-static const char long_spc545[] = " select of socket fds failed, %s (errno %d)";
-static const char short_spc546[] = "**sem_destroy %s";
-static const char long_spc546[] = "sem_destroy() failed %s";
-static const char short_spc547[] = "**sem_init %s";
-static const char long_spc547[] = "sem_init() failed %s";
-static const char short_spc548[] = "**sem_post %s";
-static const char long_spc548[] = "sem_post() failed %s";
-static const char short_spc549[] = "**sem_wait %s";
-static const char long_spc549[] = "sem_wait() failed %s";
-static const char short_spc550[] = "**setsockopt %s %d";
-static const char long_spc550[] = "setsockopt failed, %s (errno %d)";
-static const char short_spc551[] = "**shm_open %s %d";
-static const char long_spc551[] = "unable to open shared memory object %s (errno %d)";
-static const char short_spc552[] = "**shutdown %s %d";
-static const char long_spc552[] = "shutdown failed, %s (errno %d)";
-static const char short_spc553[] = "**signal %s";
-static const char long_spc553[] = "signal() failed: %s";
-static const char short_spc554[] = "**snprintf %d";
-static const char long_spc554[] = "snprintf returned %d";
-static const char short_spc555[] = "**sock_accept %s";
-static const char long_spc555[] = "accept of socket fd failed - %s";
-static const char short_spc556[] = "**sock_accept %s %d";
-static const char long_spc556[] = "accept failed, %s (errno %d) ";
-static const char short_spc557[] = "**sock_close %s %d";
-static const char long_spc557[] = " close of socket failed, %s (errno %d)";
-static const char short_spc558[] = "**sock_connect %d %s";
-static const char long_spc558[] = "connect failed - %s (errno %d)";
-static const char short_spc559[] = "**sock_connect %s %d";
-static const char long_spc559[] = "connect failed - %s (errno %d)";
-static const char short_spc560[] = "**sock_connect %s %d %s %d";
-static const char long_spc560[] = "unable to connect to %s on port %d, %s (errno %d)";
-static const char short_spc561[] = "**sock_create %s %d";
-static const char long_spc561[] = "unable to create a socket, %s (errno %d)";
-static const char short_spc562[] = "**sock_gethost %s %d";
-static const char long_spc562[] = "gethostname failed, %s (errno %d)";
-static const char short_spc563[] = "**sock_read %s %d";
-static const char long_spc563[] = "read from socket failed, %s (errno %d)";
-static const char short_spc564[] = "**sock_write %s %d";
-static const char long_spc564[] = " Unable to write to a socket, %s (errno %d)";
-static const char short_spc565[] = "**socket %s %d";
-static const char long_spc565[] = "WSASocket failed, %s (errno %d)";
-static const char short_spc566[] = "**sock|badiovn %d %d %d";
-static const char long_spc566[] = "size of iov is invalid (set=%d,sock=%d,iov_n=%d)";
-static const char short_spc567[] = "**sock|badlen %d %d %d %d";
-static const char long_spc567[] = "bad length parameter(s) (set=%d,sock=%d,min=%d,max=%d)";
-static const char short_spc568[] = "**sock|badport %d";
-static const char long_spc568[] = "port number is out of range (sock=%d)";
-static const char short_spc569[] = "**sock|close_cancel %d %d";
-static const char long_spc569[] = "operation cancelled because sock was closed locally (set=%d,sock=%d)";
-static const char short_spc570[] = "**sock|closing %d %d";
-static const char long_spc570[] = "sock is in the process of being closed locally (set=%d,sock=%d)";
-static const char short_spc571[] = "**sock|closing_already %d %d";
-static const char long_spc571[] = "a close operation is already post (set=%d,sock=%d)";
-static const char short_spc572[] = "**sock|connclosed %d %d";
-static const char long_spc572[] = "connection closed by peer (set=%d,sock=%d)";
-static const char short_spc573[] = "**sock|listener_bad_sock %d %d";
-static const char long_spc573[] = "supplied sock is not a listener (set=%d,sock=%d)";
-static const char short_spc574[] = "**sock|listener_bad_state %d %d %d";
-static const char long_spc574[] = "supplied listener sock is in a bad state (set=%d,sock=%d,state=%d)";
-static const char short_spc575[] = "**sock|listener_read %d %d";
-static const char long_spc575[] = "read operation not allowed on a listener (set=%d,sock=%d)";
-static const char short_spc576[] = "**sock|listener_write %d %d";
-static const char long_spc576[] = "write operation not allowed on a listener (set=%d,sock=%d)";
-static const char short_spc577[] = "**sock|notconnected %d %d";
-static const char long_spc577[] = "sock is not connected (set=%d,sock=%d)";
-static const char short_spc578[] = "**sock|osnomem %s %d %d";
-static const char long_spc578[] = "operating system routine %s failed due to lack of memory (set=%d,sock=%d)";
-static const char short_spc579[] = "**sock|poll|accept %d %s";
-static const char long_spc579[] = "accept failed to acquire a new socket (errno=%d:%s)";
-static const char short_spc580[] = "**sock|poll|badbuf %d %d %d %s";
-static const char long_spc580[] = "the supplied buffer contains invalid memory (set=%d,sock=%d,errno=%d:%s)";
-static const char short_spc581[] = "**sock|poll|badhandle %d %d %d";
-static const char long_spc581[] = "sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d)";
-static const char short_spc582[] = "**sock|poll|badhandle %d %d %d %d";
-static const char long_spc582[] = "sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d:%d)";
-static const char short_spc583[] = "**sock|poll|bind %d %d %s";
-static const char long_spc583[] = "unable to bind socket to port (port=%d,errno=%d:%s)";
-static const char short_spc584[] = "**sock|poll|connclosed %d %d %d %s";
-static const char long_spc584[] = "connection closed by peer (set=%d,sock=%d,errno=%d:%s)";
-static const char short_spc585[] = "**sock|poll|connfailed %d %d %d %s";
-static const char long_spc585[] = "connection failure (set=%d,sock=%d,errno=%d:%s)";
-static const char short_spc586[] = "**sock|poll|connrefused %d %d %s";
-static const char long_spc586[] = "connection refused (set=%d,sock=%d,host=%s)";
-static const char short_spc587[] = "**sock|poll|eqfail %d %d %d";
-static const char long_spc587[] = "fatal error: failed to enqueue an event; event was lost (set=%d,sock=%d,op=%d)";
-static const char short_spc588[] = "**sock|poll|getport %d %s";
-static const char long_spc588[] = "failed to obtain port number of listener (errno=%d:%s)";
-static const char short_spc589[] = "**sock|poll|listen %d %s";
-static const char long_spc589[] = "listen() failed (errno=%d:%s)";
-static const char short_spc590[] = "**sock|poll|nodelay %d %s";
-static const char long_spc590[] = "unable to set TCP no delay attribute on socket (errno=%d:%s)";
-static const char short_spc591[] = "**sock|poll|nonblock %d %s";
-static const char long_spc591[] = "unable to set socket to nonblocking (errno=%d:%s)";
-static const char short_spc592[] = "**sock|poll|oserror %d %d %d %s";
-static const char long_spc592[] = "unexpected operating system error (set=%d,sock=%d,errno=%d:%s)";
-static const char short_spc593[] = "**sock|poll|oserror %d %s";
-static const char long_spc593[] = "unexpected operating system error (errno=%d:%s)";
-static const char short_spc594[] = "**sock|poll|oserror %s %d %d %d %s";
-static const char long_spc594[] = "unpected operating system error from %s (set=%d,sock=%d,errno=%d:%s)";
-static const char short_spc595[] = "**sock|poll|osnomem %d %d %d %s";
-static const char long_spc595[] = "operating system routine failed due to lack of memory (set=%d,sock=%d,errno=%d:%s)";
-static const char short_spc596[] = "**sock|poll|pipe %d %s";
-static const char long_spc596[] = "unable to allocate pipe to wakeup a blocking poll() (errno=%d:%s)";
-static const char short_spc597[] = "**sock|poll|pipenonblock %d %s";
-static const char long_spc597[] = "unable to set wakeup pipe to nonblocking (errno=%d:%s)";
-static const char short_spc598[] = "**sock|poll|reuseaddr %d %s";
-static const char long_spc598[] = "unable to set reuseaddr attribute on socket (errno=%d:%s)";
-static const char short_spc599[] = "**sock|poll|setrcvbufsz %d %d %s";
-static const char long_spc599[] = " unable to set the receive socket buffer size (size=%d,errno=%d:%s)";
-static const char short_spc600[] = "**sock|poll|setsndbufsz %d %d %s";
-static const char long_spc600[] = " unable to set the send socket buffer size (size=%d,errno=%d:%s)";
-static const char short_spc601[] = "**sock|poll|socket %d %s";
-static const char long_spc601[] = "unable to obtain new socket (errno=%d:%s)";
-static const char short_spc602[] = "**sock|poll|unhandledstate %d";
-static const char long_spc602[] = "encountered an unexpected state (%d)";
-static const char short_spc603[] = "**sock|poll|unhandledtype %d";
-static const char long_spc603[] = "encountered an unexpected sock type (%d)";
-static const char short_spc604[] = "**sock|reads %d %d";
-static const char long_spc604[] = "attempt to perform multiple simultaneous reads (set=%d,sock=%d)";
-static const char short_spc605[] = "**sock|writes %d %d";
-static const char long_spc605[] = "attempt to perform multiple simultaneous writes (set=%d,sock=%d)";
-static const char short_spc606[] = "**stride %d %d %d";
-static const char long_spc606[] = "Range (start = %d, end = %d, stride = %d) does not terminate";
-static const char short_spc607[] = "**subarrayoflow %L";
-static const char long_spc607[] = "Total size of array_of_sizes[] is %L which requires the MPI implementation to use a 64-bit MPI_Aint";
-static const char short_spc608[] = "**tag %d";
-static const char long_spc608[] = "Invalid tag, value is %d";
-static const char short_spc609[] = "**tempnam %d %s";
-static const char long_spc609[] = "tempnam failed - errno %d (%s)";
-static const char short_spc610[] = "**toomanycomm %d %d %d";
-static const char long_spc610[] = "Too many communicators (%d/%d free on this process; ignore_id=%d)";
-static const char short_spc611[] = "**toomanycommfrag %d %d %d";
-static const char long_spc611[] = " Cannot allocate context ID because of fragmentation (%d/%d free on this process; ignore_id=%d)";
-static const char short_spc612[] = "**topotoolarge %d %d";
-static const char long_spc612[] = "Topology size %d is larger than communicator size (%d)";
-static const char short_spc613[] = "**truncate %d %d";
-static const char long_spc613[] = "Message truncated; %d bytes received but buffer size is %d";
-static const char short_spc614[] = "**truncate %d %d %d %d";
-static const char long_spc614[] = "Message from rank %d and tag %d truncated; %d bytes received but buffer size is %d";
-static const char short_spc615[] = "**typeinitbadmem %d";
-static const char long_spc615[] = "%dth builtin datatype handle references invalid memory";
-static const char short_spc616[] = "**typeinitfail %d";
-static const char long_spc616[] = "Did not initialize name for all of the predefined datatypes (only did first %d)";
-static const char short_spc617[] = "**typematchsize %s %d";
-static const char long_spc617[] = "No MPI datatype available for typeclass %s and size %d";
-static const char short_spc618[] = "**typenamelen %d";
-static const char long_spc618[] = "Specified datatype name is too long (%d characters)";
-static const char short_spc619[] = "**unknowngpid %d %d";
-static const char long_spc619[] = "Internal MPI error: Unknown gpid (%d)%d";
-static const char short_spc620[] = "**usercancel %d";
-static const char long_spc620[] = "user request cancel function returned error code %d";
-static const char short_spc621[] = "**usercopy %d";
-static const char long_spc621[] = "user copy function returned error code %d";
-static const char short_spc622[] = "**userdel %d";
-static const char long_spc622[] = "user delete function returned error code %d";
-static const char short_spc623[] = "**userfree %d";
-static const char long_spc623[] = "user request free function returned error code %d";
-static const char short_spc624[] = "**userquery %d";
-static const char long_spc624[] = "user request query function returned error code %d";
-static const char short_spc625[] = "**vmsplice %d %s";
-static const char long_spc625[] = "vmsplice failed - errno %d (%s)";
-static const char short_spc626[] = "**windows_mutex %s";
-static const char long_spc626[] = "Windows mutex routine failed (%s)";
-static const char short_spc627[] = "**winflavor %s";
-static const char long_spc627[] = " Window flavor is not compatible with the given operation (expected %s)";
-static const char short_spc628[] = "**write %s";
-static const char long_spc628[] = "write to socket failed - %s";
-static const char short_spc629[] = "**writev %s";
-static const char long_spc629[] = "writev to socket failed - %s";
-static const char short_spc630[] = "**wsacleanup %s %d";
-static const char long_spc630[] = " WSACleanup failed, %s (errno = %d)";
-static const char short_spc631[] = "**wsasock %s %d";
-static const char long_spc631[] = "WSAStartup failed, %s (errno %d)";
-static const char short_spc632[] = "**wsastartup %s %d";
-static const char long_spc632[] = " WSAStartup failed, %s (errno = %d)";
+static const char short_spc47[] = "**dev|pg_not_found %p";
+static const char long_spc47[] = "the specified process group object could not be located (pg=%p)";
+static const char short_spc48[] = "**dev|vcrt_create %s";
+static const char long_spc48[] = "failed to create VCRT for %s";
+static const char short_spc49[] = "**dims %d";
+static const char long_spc49[] = "Invalid dimension argument (value is %d)";
+static const char short_spc50[] = "**dimsmany %d %d";
+static const char long_spc50[] = "Number of dimensions %d is too large (maximum is %d)";
+static const char short_spc51[] = "**dtypenull %s";
+static const char long_spc51[] = "Datatype for argument %s is a null datatype";
+static const char short_spc52[] = "**dupprocesses %d";
+static const char long_spc52[] = "Local and remote groups in MPI_Intercomm_create must not contain the same processes; both contain process %d";
+static const char short_spc53[] = "**edgeoutrange %d %d %d";
+static const char long_spc53[] = "Edge index edges[%d] is %d but must be nonnegative and less than %d";
+static const char short_spc54[] = "**exceeded_connect_tries %d";
+static const char long_spc54[] = "Unable to establish connection to rank %d";
+static const char short_spc55[] = "**f90typecomplexnone %d %d";
+static const char long_spc55[] = " No complex type with both %d digits of precision and an exponent range of %d is available";
+static const char short_spc56[] = "**f90typeintnone %d";
+static const char long_spc56[] = " No integer type with %d digits of range is available";
+static const char short_spc57[] = "**f90typerealnone %d %d";
+static const char long_spc57[] = " No real type with both %d digits of precision and an exponent range of %d is available";
+static const char short_spc58[] = "**fail %d";
+static const char long_spc58[] = "generic failure with errno = %d";
+static const char short_spc59[] = "**fail %s %d";
+static const char long_spc59[] = "%s (errno %d)";
+static const char short_spc60[] = "**fileaccess %s";
+static const char long_spc60[] = "Access denied to file %s";
+static const char short_spc61[] = "**filename %s";
+static const char long_spc61[] = "Invalid file name %s";
+static const char short_spc62[] = "**filenamedir %s";
+static const char long_spc62[] = "Invalid or missing directory %s";
+static const char short_spc63[] = "**filenamelong %s %d";
+static const char long_spc63[] = "Pathname %s too long (%d characters)";
+static const char short_spc64[] = "**filenoexist %s";
+static const char long_spc64[] = "File %s does not exist";
+static const char short_spc65[] = "**flag %d";
+static const char long_spc65[] = "invalid flag parameter (flag = %d)";
+static const char short_spc66[] = "**gethostbyname %s %d";
+static const char long_spc66[] = "gethostbyname failed, %s (errno %d)";
+static const char short_spc67[] = "**getsockname %s";
+static const char long_spc67[] = "getsockname failed - %s";
+static const char short_spc68[] = "**getsockopt %s %d";
+static const char long_spc68[] = "getsockopt failed, %s (errno %d)";
+static const char short_spc69[] = "**groupnotincomm %d";
+static const char long_spc69[] = "Rank %d of the specified group is not a member of this communicator";
+static const char short_spc70[] = "**hcoll_wrong_arg %p %d";
+static const char long_spc70[] = "Error in hcolrte api: wrong null argument (ec_h.handle = %p, ec_h.rank = %d)";
+static const char short_spc71[] = "**iface_notfound %s";
+static const char long_spc71[] = "The network interface, \"%s\", specified in MPIR_CVAR_CH3_NETWORK_IFACE was not found.";
+static const char short_spc72[] = "**indexneg %d %d";
+static const char long_spc72[] = "Index value for index[%d] is %d but must be nonnegative";
+static const char short_spc73[] = "**indexnonmonotone %d %d %d";
+static const char long_spc73[] = "Index values in graph topology must be monotone nondecreasing but index[%d] is %d but the next index value is %d";
+static const char short_spc74[] = "**inet_addr %s %d";
+static const char long_spc74[] = " inet_addr failed, %s (errno %d)";
+static const char short_spc75[] = "**infohintparse %s";
+static const char long_spc75[] = "Unable to parse info hint (%s)";
+static const char short_spc76[] = "**infonkey %d %d";
+static const char long_spc76[] = "Requested key %d but this MPI_Info only has %d keys";
+static const char short_spc77[] = "**infonokey %s";
+static const char long_spc77[] = "MPI_Info key %s is not defined ";
+static const char short_spc78[] = "**intern %s";
+static const char long_spc78[] = "Internal MPI error! %s";
+static const char short_spc79[] = "**invalid_handle %d";
+static const char long_spc79[] = "invalid handle (%d)";
+static const char short_spc80[] = "**invalid_knem_status %d";
+static const char long_spc80[] = "Invalid knem status value - %d";
+static const char short_spc81[] = "**invalid_netmod %s";
+static const char long_spc81[] = "Invalid netmod specified (%s)";
+static const char short_spc82[] = "**invalid_refcount %d";
+static const char long_spc82[] = "invalid reference count (%d)";
+static const char short_spc83[] = "**invalidpkt %d";
+static const char long_spc83[] = " Invalid packet type (%d)";
+static const char short_spc84[] = "**io %s";
+static const char long_spc84[] = "Other I/O error %s";
+static const char short_spc85[] = "**ioctl %d %s";
+static const char long_spc85[] = "ioctl failed errno=%d - %s";
+static const char short_spc86[] = "**ioctlsocket %s %d";
+static const char long_spc86[] = " ioctl on socket failed, %s (errno %d)";
+static const char short_spc87[] = "**join_portname %s %s";
+static const char long_spc87[] = "local %s, remote %s";
+static const char short_spc88[] = "**join_recv %d";
+static const char long_spc88[] = "recv from the socket failed (errno %d)";
+static const char short_spc89[] = "**join_send %d";
+static const char long_spc89[] = "send on the socket failed (errno %d)";
+static const char short_spc90[] = "**keyvalobj %s";
+static const char long_spc90[] = "Keyval was not defined for %s objects";
+static const char short_spc91[] = "**listen %s %d";
+static const char long_spc91[] = "listen failed, %s (errno %d)";
+static const char short_spc92[] = "**lockassertval %d";
+static const char long_spc92[] = " Invalid assert argument (%d) passed to MPI_Win_lock";
+static const char short_spc93[] = "**memcpyalias %p %p %L";
+static const char long_spc93[] = "memcpy arguments alias each other, dst=%p src=%p len=%L";
+static const char short_spc94[] = "**mkfifo %d %s";
+static const char long_spc94[] = "mkfifo failed - errno %d (%s)";
+static const char short_spc95[] = "**mmap %d";
+static const char long_spc95[] = "unable to map memory, mmap failed (errno %d)";
+static const char short_spc96[] = "**mpi_abort %C %d";
+static const char long_spc96[] = "MPI_Abort(%C, errorcode=%d) failed";
+static const char short_spc97[] = "**mpi_accumulate %p %d %D %d %d %d %D %O %W";
+static const char long_spc97[] = "MPI_Accumulate(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W) failed";
+static const char short_spc98[] = "**mpi_add_error_class %p";
+static const char long_spc98[] = "MPI_Add_error_class(errorclass=%p) failed";
+static const char short_spc99[] = "**mpi_add_error_code %d %p";
+static const char long_spc99[] = "MPI_Add_error_code(errorclass=%d, errorcode=%p) failed";
+static const char short_spc100[] = "**mpi_add_error_string %d %s";
+static const char long_spc100[] = "MPI_Add_error_string(code=%d, str=\"%s\") failed";
+static const char short_spc101[] = "**mpi_address %p %p";
+static const char long_spc101[] = "MPI_Address(location=%p, address=%p) failed";
+static const char short_spc102[] = "**mpi_allgather %p %d %D %p %d %D %C";
+static const char long_spc102[] = "MPI_Allgather(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, %C) failed";
+static const char short_spc103[] = "**mpi_allgatherv %p %d %D %p %p %p %D %C";
+static const char long_spc103[] = "MPI_Allgatherv(sbuf=%p, scount=%d, %D, rbuf=%p, rcounts=%p, displs=%p, %D, %C) failed";
+static const char short_spc104[] = "**mpi_alloc_mem %d %I %p";
+static const char long_spc104[] = "MPI_Alloc_mem(size=%d, %I, baseptr=%p) failed";
+static const char short_spc105[] = "**mpi_allreduce %p %p %d %D %O %C";
+static const char long_spc105[] = "MPI_Allreduce(sbuf=%p, rbuf=%p, count=%d, %D, %O, %C) failed";
+static const char short_spc106[] = "**mpi_alltoall %p %d %D %p %d %D %C";
+static const char long_spc106[] = "MPI_Alltoall(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, %C) failed";
+static const char short_spc107[] = "**mpi_alltoallv %p %p %p %D %p %p %p %D %C";
+static const char long_spc107[] = "MPI_Alltoallv(sbuf=%p, scnts=%p, sdispls=%p, %D, rbuf=%p, rcnts=%p, rdispls=%p, %D, %C) failed";
+static const char short_spc108[] = "**mpi_alltoallw %p %p %p %p %p %p %p %p %C";
+static const char long_spc108[] = "MPI_Alltoallw(sbuf=%p, scnts=%p, sdispls=%p, stypes=%p, rbuf=%p, rcnts=%p, rdispls=%p, rtypes=%p, %C) failed";
+static const char short_spc109[] = "**mpi_attr_delete %C %d";
+static const char long_spc109[] = "MPI_Attr_delete(%C, keyval=%d) failed";
+static const char short_spc110[] = "**mpi_attr_get %C %d %p %p";
+static const char long_spc110[] = "MPI_Attr_get(%C, keyval=%d, attr_value=%p, flag=%p) failed";
+static const char short_spc111[] = "**mpi_attr_put %C %d %p";
+static const char long_spc111[] = "MPI_Attr_put(%C, keyval=%d, attr_value=%p) failed";
+static const char short_spc112[] = "**mpi_barrier %C";
+static const char long_spc112[] = "MPI_Barrier(%C) failed";
+static const char short_spc113[] = "**mpi_bcast %p %d %D %d %C";
+static const char long_spc113[] = "MPI_Bcast(buf=%p, count=%d, %D, root=%d, %C) failed";
+static const char short_spc114[] = "**mpi_bsend %p %d %D %i %t %C";
+static const char long_spc114[] = "MPI_Bsend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C) failed";
+static const char short_spc115[] = "**mpi_bsend_init %p %d %D %i %t %C %p";
+static const char long_spc115[] = "MPI_Bsend_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc116[] = "**mpi_buffer_attach %p %d";
+static const char long_spc116[] = "MPI_Buffer_attach(buf=%p, size=%d) failed";
+static const char short_spc117[] = "**mpi_buffer_detach %p %p";
+static const char long_spc117[] = "MPI_Buffer_detach(buf=%p, size=%p) failed";
+static const char short_spc118[] = "**mpi_cancel %p";
+static const char long_spc118[] = "MPI_Cancel(request=%p) failed";
+static const char short_spc119[] = "**mpi_cart_coords %C %d %d %p";
+static const char long_spc119[] = "MPI_Cart_coords(%C, rank=%d, maxdims=%d, coords=%p) failed";
+static const char short_spc120[] = "**mpi_cart_create %C %d %p %p %d %p";
+static const char long_spc120[] = "MPI_Cart_create(%C, ndims=%d, dims=%p, periods=%p, reorder=%d, comm_cart=%p) failed";
+static const char short_spc121[] = "**mpi_cart_get %C %d %p %p %p";
+static const char long_spc121[] = "MPI_Cart_get(%C, maxdims=%d, dims=%p, periods=%p, coords=%p) failed";
+static const char short_spc122[] = "**mpi_cart_map %C %d %p %p %p";
+static const char long_spc122[] = "MPI_Cart_map(%C, ndims=%d, dims=%p, periods=%p, newrank=%p) failed";
+static const char short_spc123[] = "**mpi_cart_rank %C %p %p";
+static const char long_spc123[] = "MPI_Cart_rank(%C, coords=%p, rank=%p) failed";
+static const char short_spc124[] = "**mpi_cart_shift %C %d %d %p %p";
+static const char long_spc124[] = "MPI_Cart_shift(%C, direction=%d, displ=%d, source=%p, dest=%p) failed";
+static const char short_spc125[] = "**mpi_cart_sub %C %p %p";
+static const char long_spc125[] = "MPI_Cart_sub(%C, remain_dims=%p, comm_new=%p) failed";
+static const char short_spc126[] = "**mpi_cartdim_get %C %p";
+static const char long_spc126[] = "MPI_Cartdim_get(%C, ndims=%p) failed";
+static const char short_spc127[] = "**mpi_close_port %s";
+static const char long_spc127[] = "MPI_Close_port(port=\"%s\") failed";
+static const char short_spc128[] = "**mpi_comm_accept %s %I %d %C %p";
+static const char long_spc128[] = "MPI_Comm_accept(port=\"%s\", %I, root=%d, %C, newcomm=%p) failed";
+static const char short_spc129[] = "**mpi_comm_call_errhandler %C %d";
+static const char long_spc129[] = "MPI_Comm_call_errhandler(%C, errorcode=%d) failed";
+static const char short_spc130[] = "**mpi_comm_compare %C %C %p";
+static const char long_spc130[] = "MPI_Comm_compare(%C, %C, result=%p) failed";
+static const char short_spc131[] = "**mpi_comm_connect %s %I %d %C %p";
+static const char long_spc131[] = "MPI_Comm_connect(port=\"%s\", %I, root=%d, %C, newcomm=%p) failed";
+static const char short_spc132[] = "**mpi_comm_create %C %G %p";
+static const char long_spc132[] = "MPI_Comm_create(%C, %G, new_comm=%p) failed";
+static const char short_spc133[] = "**mpi_comm_create_errhandler %p %p";
+static const char long_spc133[] = "MPI_Comm_create_errhandler(function=%p, errhandler=%p) failed";
+static const char short_spc134[] = "**mpi_comm_create_group %C %G %d %p";
+static const char long_spc134[] = "MPI_Comm_create_group(%C, %G, %d, new_comm=%p) failed";
+static const char short_spc135[] = "**mpi_comm_create_keyval %p %p %p %p";
+static const char long_spc135[] = "MPI_Comm_create_keyval(comm_copy_attr_fn=%p, comm_delete_attr_fn=%p, comm_keyval=%p, extra_state=%p) failed";
+static const char short_spc136[] = "**mpi_comm_delete_attr %C %d";
+static const char long_spc136[] = "MPI_Comm_delete_attr(%C, comm_keyval=%d) failed";
+static const char short_spc137[] = "**mpi_comm_disconnect %C";
+static const char long_spc137[] = "MPI_Comm_disconnect(comm=%C) failed";
+static const char short_spc138[] = "**mpi_comm_dup %C %p";
+static const char long_spc138[] = "MPI_Comm_dup(%C, new_comm=%p) failed";
+static const char short_spc139[] = "**mpi_comm_dup_with_info %C %I %p";
+static const char long_spc139[] = "MPI_Comm_dup(%C, %I, new_comm=%p) failed";
+static const char short_spc140[] = "**mpi_comm_free %p";
+static const char long_spc140[] = "MPI_Comm_free(comm=%p) failed";
+static const char short_spc141[] = "**mpi_comm_free_keyval %p";
+static const char long_spc141[] = "MPI_Comm_free_keyval(comm_keyval=%p) failed";
+static const char short_spc142[] = "**mpi_comm_get_attr %C %d %p %p";
+static const char long_spc142[] = "MPI_Comm_get_attr(%C, comm_keyval=%d, attribute_val=%p, flag=%p) failed";
+static const char short_spc143[] = "**mpi_comm_get_errhandler %C %p";
+static const char long_spc143[] = "MPI_Comm_get_errhandler(%C, errhandler=%p) failed";
+static const char short_spc144[] = "**mpi_comm_get_info %W %p";
+static const char long_spc144[] = "MPI_Comm_get_info(comm=%C, info_used=%p) failed";
+static const char short_spc145[] = "**mpi_comm_get_name %C %p %p";
+static const char long_spc145[] = "MPI_Comm_get_name(%C, comm_name=%p, resultlen=%p) failed";
+static const char short_spc146[] = "**mpi_comm_get_parent %p";
+static const char long_spc146[] = "MPI_Comm_get_parent(comm=%p) failed";
+static const char short_spc147[] = "**mpi_comm_group %C %p";
+static const char long_spc147[] = "MPI_Comm_group(%C, group=%p) failed";
+static const char short_spc148[] = "**mpi_comm_idup %C %p %p";
+static const char long_spc148[] = " MPI_Comm_idup(comm=%C, newcomm=%p, request=%p)";
+static const char short_spc149[] = "**mpi_comm_join %d %p";
+static const char long_spc149[] = "MPI_Comm_join(fd=%d, intercomm=%p) failed";
+static const char short_spc150[] = "**mpi_comm_rank %C %p";
+static const char long_spc150[] = "MPI_Comm_rank(%C, rank=%p) failed";
+static const char short_spc151[] = "**mpi_comm_remote_group %C %p";
+static const char long_spc151[] = "MPI_Comm_remote_group(%C, group=%p) failed";
+static const char short_spc152[] = "**mpi_comm_remote_size %C %p";
+static const char long_spc152[] = "MPI_Comm_remote_size(%C, size=%p) failed";
+static const char short_spc153[] = "**mpi_comm_set_attr %C %d %p";
+static const char long_spc153[] = "MPI_Comm_set_attr(%C, comm_keyval=%d, attribute_val=%p) failed";
+static const char short_spc154[] = "**mpi_comm_set_errhandler %C %E";
+static const char long_spc154[] = "MPI_Comm_set_errhandler(%C, %E) failed";
+static const char short_spc155[] = "**mpi_comm_set_info %W %p";
+static const char long_spc155[] = "MPI_Comm_set_info(comm=%C, info=%p) failed";
+static const char short_spc156[] = "**mpi_comm_set_name %C %s";
+static const char long_spc156[] = "MPI_Comm_set_name(%C, comm_name=%s) failed";
+static const char short_spc157[] = "**mpi_comm_size %C %p";
+static const char long_spc157[] = "MPI_Comm_size(%C, size=%p) failed";
+static const char short_spc158[] = "**mpi_comm_spawn %s %p %d %I %d %C %p %p";
+static const char long_spc158[] = "MPI_Comm_spawn(cmd=\"%s\", argv=%p, maxprocs=%d, %I, root=%d, %C, intercomm=%p, errors=%p) failed";
+static const char short_spc159[] = "**mpi_comm_spawn_multiple %d %p %p %p %p %d %C %p %p";
+static const char long_spc159[] = "MPI_Comm_spawn_multiple(count=%d, cmds=%p, argvs=%p, maxprocs=%p, infos=%p, root=%d, %C, intercomm=%p, errors=%p) failed";
+static const char short_spc160[] = "**mpi_comm_split %C %d %d %p";
+static const char long_spc160[] = "MPI_Comm_split(%C, color=%d, key=%d, new_comm=%p) failed";
+static const char short_spc161[] = "**mpi_comm_test_inter %C %p";
+static const char long_spc161[] = "MPI_Comm_test_inter(%C, flag=%p) failed";
+static const char short_spc162[] = "**mpi_compare_and_swap %p %p %p %D %d %d %W";
+static const char long_spc162[] = "MPI_Compare_and_swap(origin_addr=%p, compare_addr=%p, result_addr=%p, %D, target_rank=%d, target_disp=%d, %W) failed";
+static const char short_spc163[] = "**mpi_dims_create %d %d %p";
+static const char long_spc163[] = "MPI_Dims_create(nnodes=%d, ndims=%d, dims=%p) failed";
+static const char short_spc164[] = "**mpi_dist_graph_create %C %d %p %p %p %p %I %d %p";
+static const char long_spc164[] = " MPI_Dist_graph_create(%C, n=%d, sources=%p, degrees=%p, destinations=%p, weights=%p, info=%I, reorder=%d, comm_dist_graph=%p) failed";
+static const char short_spc165[] = "**mpi_dist_graph_create_adjacent %C %d %p %p %d %p %p %I %d %p";
+static const char long_spc165[] = " MPI_Dist_graph_create_adjacent(%C, indegree=%d, sources=%p, sourceweights=%p, outdegree=%d, destinations=%p, destweights=%p, %I, %d, comm_dist_graph=%p) failed";
+static const char short_spc166[] = "**mpi_dist_graph_neighbors %C %d %p %p %d %p %p";
+static const char long_spc166[] = " MPI_Dist_graph_neighbors(%C, maxindegree=%d, sources=%p, sourceweights=%p, maxoutdegree=%d, destinations=%p, destweights=%p) failed";
+static const char short_spc167[] = "**mpi_dist_graph_neighbors_count %C %p %p %p";
+static const char long_spc167[] = " MPI_Dist_graph_neighbors_count(%C, indegree=%p, outdegree=%p, weighted=%p) failed";
+static const char short_spc168[] = "**mpi_errhandler_create %p %p";
+static const char long_spc168[] = "MPI_Errhandler_create(function=%p, errhandler=%p) failed";
+static const char short_spc169[] = "**mpi_errhandler_free %p";
+static const char long_spc169[] = "MPI_Errhandler_free(errhandler=%p) failed";
+static const char short_spc170[] = "**mpi_errhandler_get %C %p";
+static const char long_spc170[] = "MPI_Errhandler_get(%C, errhandler=%p) failed";
+static const char short_spc171[] = "**mpi_errhandler_set %C %E";
+static const char long_spc171[] = "MPI_Errhandler_set(%C, %E) failed";
+static const char short_spc172[] = "**mpi_error_class %d %p";
+static const char long_spc172[] = "MPI_Error_class(errorcode=%d, errorclass=%p) failed";
+static const char short_spc173[] = "**mpi_error_string %d %s %p";
+static const char long_spc173[] = "MPI_Error_string(errorcode=%d, string=%s, resultlen=%p) failed";
+static const char short_spc174[] = "**mpi_exscan %p %p %d %D %O %C";
+static const char long_spc174[] = "MPI_Exscan(sbuf=%p, rbuf=%p, count=%d, %D, %O, %C) failed";
+static const char short_spc175[] = "**mpi_fetch_and_op %p %p %D %d %d %O %W";
+static const char long_spc175[] = "MPI_Fetch_and_op(origin_addr=%p, result_addr=%p, %D, target_rank=%d, target_disp=%d, %O, %W) failed";
+static const char short_spc176[] = "**mpi_file_create_errhandler %p %p";
+static const char long_spc176[] = "MPI_File_create_errhandler(function=%p, errhandler=%p) failed";
+static const char short_spc177[] = "**mpi_file_get_errhandler %F %p";
+static const char long_spc177[] = "MPI_File_get_errhandler(%F, errhandler=%p) failed";
+static const char short_spc178[] = "**mpi_file_set_errhandler %F %E";
+static const char long_spc178[] = "MPI_File_set_errhandler(%F, %E) failed";
+static const char short_spc179[] = "**mpi_finalized %p";
+static const char long_spc179[] = "MPI_Finalized(flag=%p) failed";
+static const char short_spc180[] = "**mpi_free_mem %p";
+static const char long_spc180[] = "MPI_Free_mem(base=%p) failed";
+static const char short_spc181[] = "**mpi_gather %p %d %D %p %d %D %d %C";
+static const char long_spc181[] = "MPI_Gather(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, root=%d, %C) failed";
+static const char short_spc182[] = "**mpi_gatherv %p %d %D %p %p %p %D %d %C";
+static const char long_spc182[] = "MPI_Gatherv failed(sbuf=%p, scount=%d, %D, rbuf=%p, rcnts=%p, displs=%p, %D, root=%d, %C) failed";
+static const char short_spc183[] = "**mpi_get %p %d %D %d %d %d %D %W";
+static const char long_spc183[] = "MPI_Get(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W) failed";
+static const char short_spc184[] = "**mpi_get_accumulate %p %d %D %p %d %D %d %d %d %D %O %W";
+static const char long_spc184[] = "MPI_Get_accumulate(origin_addr=%p, origin_count=%d, %D, result_addr=%p, result_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W) failed";
+static const char short_spc185[] = "**mpi_get_address %p %p";
+static const char long_spc185[] = "MPI_Get_address(location=%p, address=%p) failed";
+static const char short_spc186[] = "**mpi_get_count %p %D %p";
+static const char long_spc186[] = "MPI_Get_count(status=%p, %D, count=%p) failed";
+static const char short_spc187[] = "**mpi_get_elements %p %D %p";
+static const char long_spc187[] = "MPI_Get_elements(status=%p, %D, elements=%p) failed";
+static const char short_spc188[] = "**mpi_get_elements_x %p %D %p";
+static const char long_spc188[] = " MPI_Get_elements_x(status=%p, datatype=%D, count=%p)";
+static const char short_spc189[] = "**mpi_get_library_version %p %p";
+static const char long_spc189[] = "MPI_Get_library_version(version=%p, resultlen=%p) failed";
+static const char short_spc190[] = "**mpi_get_processor_name %p %p";
+static const char long_spc190[] = "MPI_Get_processor_name(name=%p, resultlen=%p) failed";
+static const char short_spc191[] = "**mpi_get_version %p %p";
+static const char long_spc191[] = "MPI_Get_version(version=%p, subversion=%p) failed";
+static const char short_spc192[] = "**mpi_graph_create %C %d %p %p %d %p";
+static const char long_spc192[] = "MPI_Graph_create(%C, nnodes=%d, index=%p, edges=%p, reorder=%d, comm_graph=%p) failed";
+static const char short_spc193[] = "**mpi_graph_get %C %d %d %p %p";
+static const char long_spc193[] = "MPI_Graph_get(%C, maxindex=%d, maxedges=%d, index=%p, edges=%p) failed";
+static const char short_spc194[] = "**mpi_graph_map %C %d %p %p %p";
+static const char long_spc194[] = "MPI_Graph_map(%C, nnodes=%d, index=%p, edges=%p, newrank=%p) failed";
+static const char short_spc195[] = "**mpi_graph_neighbors %C %d %d %p";
+static const char long_spc195[] = "MPI_Graph_neighbors(%C, rank=%d, maxneighbors=%d, neighbors=%p) failed";
+static const char short_spc196[] = "**mpi_graph_neighbors_count %C %d %p";
+static const char long_spc196[] = "MPI_Graph_neighbors_count(%C, rank=%d, nneighbors=%p) failed";
+static const char short_spc197[] = "**mpi_graphdims_get %C %p %p";
+static const char long_spc197[] = "MPI_Graphdims_get(%C, nnodes=%p, nedges=%p) failed";
+static const char short_spc198[] = "**mpi_grequest_complete %R";
+static const char long_spc198[] = "MPI_Grequest_complete(%R) failed";
+static const char short_spc199[] = "**mpi_grequest_start %p %p %p %p %p";
+static const char long_spc199[] = "MPI_Grequest_start(query_fn=%p, free_fn=%p, cancel_fn=%p, extra_state=%p, request=%p) failed";
+static const char short_spc200[] = "**mpi_group_compare %G %G %p";
+static const char long_spc200[] = "MPI_Group_compare(%G, %G, result=%p) failed";
+static const char short_spc201[] = "**mpi_group_difference %G %G %p";
+static const char long_spc201[] = "MPI_Group_difference(%G, %G, new_group=%p) failed";
+static const char short_spc202[] = "**mpi_group_excl %G %d %p %p";
+static const char long_spc202[] = "MPI_Group_excl(%G, n=%d, ranks=%p, new_group=%p) failed";
+static const char short_spc203[] = "**mpi_group_free %p";
+static const char long_spc203[] = "MPI_Group_free(group=%p) failed";
+static const char short_spc204[] = "**mpi_group_incl %G %d %p %p";
+static const char long_spc204[] = "MPI_Group_incl(%G, n=%d, ranks=%p, new_group=%p) failed";
+static const char short_spc205[] = "**mpi_group_intersection %G %G %p";
+static const char long_spc205[] = "MPI_Group_intersection(%G, %G, new_group=%p) failed";
+static const char short_spc206[] = "**mpi_group_range_excl %G %d %p %p";
+static const char long_spc206[] = "MPI_Group_range_excl(%G, n=%d, ranges=%p, new_group=%p) failed";
+static const char short_spc207[] = "**mpi_group_range_incl %G %d %p %p";
+static const char long_spc207[] = "MPI_Group_range_incl(%G, n=%d, ranges=%p, new_group=%p) failed";
+static const char short_spc208[] = "**mpi_group_rank %G %p";
+static const char long_spc208[] = "MPI_Group_rank(%G, rank=%p) failed";
+static const char short_spc209[] = "**mpi_group_size %G %p";
+static const char long_spc209[] = "MPI_Group_size(%G, size=%p) failed";
+static const char short_spc210[] = "**mpi_group_translate_ranks %G %d %p %G %p";
+static const char long_spc210[] = "MPI_Group_translate_ranks(%G, n=%d, ranks1=%p, %G, ranks2=%p) failed";
+static const char short_spc211[] = "**mpi_group_union %G %G %p";
+static const char long_spc211[] = "MPI_Group_union(%G, %G, new_group=%p) failed";
+static const char short_spc212[] = "**mpi_iallgather %p %d %D %p %d %D %C %p";
+static const char long_spc212[] = " MPI_Iallgather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc213[] = "**mpi_iallgatherv %p %d %D %p %p %p %D %C %p";
+static const char long_spc213[] = " MPI_Iallgatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc214[] = "**mpi_iallreduce %p %p %d %D %O %C %p";
+static const char long_spc214[] = " MPI_Iallreduce(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, comm=%C, request=%p)";
+static const char short_spc215[] = "**mpi_ialltoall %p %d %D %p %d %D %C %p";
+static const char long_spc215[] = " MPI_Ialltoall(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc216[] = "**mpi_ialltoallv %p %p %p %D %p %p %p %D %C %p";
+static const char long_spc216[] = " MPI_Ialltoallv(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtype=%D, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc217[] = "**mpi_ialltoallw %p %p %p %p %p %p %p %p %C %p";
+static const char long_spc217[] = " MPI_Ialltoallw(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtypes=%p, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtypes=%p, comm=%C, request=%p)";
+static const char short_spc218[] = "**mpi_ibarrier %C %p";
+static const char long_spc218[] = " MPI_Ibarrier(comm=%C, request=%p)";
+static const char short_spc219[] = "**mpi_ibcast %p %d %D %C %p";
+static const char long_spc219[] = " MPI_Ibcast(buffer=%p, count=%d, datatype=%D, comm=%C, request=%p)";
+static const char short_spc220[] = "**mpi_ibsend %p %d %D %i %t %C %p";
+static const char long_spc220[] = "MPI_Ibsend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc221[] = "**mpi_iexscan %p %p %d %D %O %C %p";
+static const char long_spc221[] = " MPI_Iexscan(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, comm=%C, request=%p)";
+static const char short_spc222[] = "**mpi_igather %p %d %D %p %d %D %d %C %p";
+static const char long_spc222[] = " MPI_Igather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, root=%d, comm=%C, request=%p)";
+static const char short_spc223[] = "**mpi_igatherv %p %d %D %p %p %p %D %d %C %p";
+static const char long_spc223[] = " MPI_Igatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, root=%d, comm=%C, request=%p)";
+static const char short_spc224[] = "**mpi_improbe %d %d %C %p %p %p";
+static const char long_spc224[] = " MPI_Improbe(source=%d, tag=%d, comm=%C, flag=%p, message=%p, status=%p)";
+static const char short_spc225[] = "**mpi_imrecv %p %d %D %p %p";
+static const char long_spc225[] = " MPI_Imrecv(buf=%p, count=%d, datatype=%D, message=%p, request=%p)";
+static const char short_spc226[] = "**mpi_ineighbor_allgather %p %d %D %p %d %D %C %p";
+static const char long_spc226[] = " MPI_Ineighbor_allgather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc227[] = "**mpi_ineighbor_allgatherv %p %d %D %p %p %p %D %C %p";
+static const char long_spc227[] = " MPI_Ineighbor_allgatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc228[] = "**mpi_ineighbor_alltoall %p %d %D %p %d %D %C %p";
+static const char long_spc228[] = " MPI_Ineighbor_alltoall(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc229[] = "**mpi_ineighbor_alltoallv %p %p %p %D %p %p %p %D %C %p";
+static const char long_spc229[] = " MPI_Ineighbor_alltoallv(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtype=%D, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtype=%D, comm=%C, request=%p)";
+static const char short_spc230[] = "**mpi_ineighbor_alltoallw %p %p %p %p %p %p %p %p %C %p";
+static const char long_spc230[] = " MPI_Ineighbor_alltoallw(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtypes=%p, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtypes=%p, comm=%C, request=%p)";
+static const char short_spc231[] = "**mpi_info_create %p";
+static const char long_spc231[] = "MPI_Info_create(info=%p) failed";
+static const char short_spc232[] = "**mpi_info_delete %I %s";
+static const char long_spc232[] = "MPI_Info_delete(%I, key=%s) failed";
+static const char short_spc233[] = "**mpi_info_dup %I %p";
+static const char long_spc233[] = "MPI_Info_dup(%I, newinfo=%p) failed";
+static const char short_spc234[] = "**mpi_info_free %p";
+static const char long_spc234[] = "MPI_Info_free(info=%p) failed";
+static const char short_spc235[] = "**mpi_info_get %I %s %d %p %p";
+static const char long_spc235[] = "MPI_Info_get(%I, key=%s, valuelen=%d, value=%p, flag=%p) failed";
+static const char short_spc236[] = "**mpi_info_get_nkeys %I %p";
+static const char long_spc236[] = "MPI_Info_get_nkeys(%I, nkeys=%p) failed";
+static const char short_spc237[] = "**mpi_info_get_nthkey %I %d %p";
+static const char long_spc237[] = "MPI_Info_get_nthkey(%I, n=%d, key=%p) failed";
+static const char short_spc238[] = "**mpi_info_get_valuelen %I %s %p %p";
+static const char long_spc238[] = "MPI_Info_get_valuelen(%I, key=%s, valuelen=%p, flag=%p) failed";
+static const char short_spc239[] = "**mpi_info_set %I %s %s";
+static const char long_spc239[] = "MPI_Info_set(%I, key=%s, value=%s) failed";
+static const char short_spc240[] = "**mpi_init %p %p";
+static const char long_spc240[] = "MPI_Init(argc_p=%p, argv_p=%p) failed";
+static const char short_spc241[] = "**mpi_init_thread %p %p %d %p";
+static const char long_spc241[] = "MPI_Init_thread(argc_p=%p, argv_p=%p, required=%d, provided=%p)";
+static const char short_spc242[] = "**mpi_initialized %p";
+static const char long_spc242[] = "MPI_Initialized(flag=%p) failed";
+static const char short_spc243[] = "**mpi_intercomm_create %C %d %C %d %d %p";
+static const char long_spc243[] = "MPI_Intercomm_create(%C, local_leader=%d, %C, remote_leader=%d, tag=%d, newintercomm=%p) failed";
+static const char short_spc244[] = "**mpi_intercomm_merge %C %d %p";
+static const char long_spc244[] = "MPI_Intercomm_merge(%C, high=%d, newintracomm=%p) failed";
+static const char short_spc245[] = "**mpi_iprobe %i %t %C %p %p";
+static const char long_spc245[] = "MPI_Iprobe(src=%i, tag=%t, %C, flag=%p, status=%p) failed";
+static const char short_spc246[] = "**mpi_irecv %p %d %D %i %t %C %p";
+static const char long_spc246[] = "MPI_Irecv(buf=%p, count=%d, %D, src=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc247[] = "**mpi_ireduce %p %p %d %D %O %d %C %p";
+static const char long_spc247[] = " MPI_Ireduce(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, root=%d, comm=%C, request=%p)";
+static const char short_spc248[] = "**mpi_ireduce_scatter %p %p %p %D %O %C %p";
+static const char long_spc248[] = " MPI_Ireduce_scatter(sendbuf=%p, recvbuf=%p, recvcounts=%p, datatype=%D, op=%O, comm=%C, request=%p)";
+static const char short_spc249[] = "**mpi_ireduce_scatter_block %p %p %d %D %O %C %p";
+static const char long_spc249[] = " MPI_Ireduce_scatter_block(sendbuf=%p, recvbuf=%p, recvcount=%d, datatype=%D, op=%O, comm=%C, request=%p)";
+static const char short_spc250[] = "**mpi_irsend %p %d %D %i %t %C %p";
+static const char long_spc250[] = "MPI_Irsend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc251[] = "**mpi_is_thread_main %p";
+static const char long_spc251[] = "MPI_Is_thread_main(flag=%p) failed";
+static const char short_spc252[] = "**mpi_iscan %p %p %d %D %O %C %p";
+static const char long_spc252[] = " MPI_Iscan(sendbuf=%p, recvbuf=%p, count=%d, datatype=%D, op=%O, comm=%C, request=%p)";
+static const char short_spc253[] = "**mpi_iscatter %p %d %D %p %d %D %d %C %p";
+static const char long_spc253[] = " MPI_Iscatter(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, root=%d, comm=%C, request=%p)";
+static const char short_spc254[] = "**mpi_iscatterv %p %p %p %D %p %d %D %d %C %p";
+static const char long_spc254[] = " MPI_Iscatterv(sendbuf=%p, sendcounts=%p, displs=%p, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, root=%d, comm=%C, request=%p)";
+static const char short_spc255[] = "**mpi_isend %p %d %D %i %t %C %p";
+static const char long_spc255[] = "MPI_Isend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc256[] = "**mpi_issend %p %d %D %i %t %C %p";
+static const char long_spc256[] = "MPI_Issend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc257[] = "**mpi_keyval_create %p %p %p %p";
+static const char long_spc257[] = "MPI_Keyval_create(copy_fn=%p, del_fn=%p, keyval=%p, extra=%p) failed";
+static const char short_spc258[] = "**mpi_keyval_free %p";
+static const char long_spc258[] = "MPI_Keyval_free(keyval=%p) failed";
+static const char short_spc259[] = "**mpi_lookup_name %s %I %s";
+static const char long_spc259[] = "MPI_Lookup_name(service=\"%s\", %I, port=%s) failed";
+static const char short_spc260[] = "**mpi_mprobe %d %d %C %p %p";
+static const char long_spc260[] = " MPI_Mprobe(source=%d, tag=%d, comm=%C, message=%p, status=%p)";
+static const char short_spc261[] = "**mpi_mrecv %p %d %D %p %p";
+static const char long_spc261[] = " MPI_Mrecv(buf=%p, count=%d, datatype=%D, message=%p, status=%p)";
+static const char short_spc262[] = "**mpi_neighbor_allgather %p %d %D %p %d %D %C";
+static const char long_spc262[] = " MPI_Neighbor_allgather(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C)";
+static const char short_spc263[] = "**mpi_neighbor_allgatherv %p %d %D %p %p %p %D %C";
+static const char long_spc263[] = " MPI_Neighbor_allgatherv(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcounts=%p, displs=%p, recvtype=%D, comm=%C)";
+static const char short_spc264[] = "**mpi_neighbor_alltoall %p %d %D %p %d %D %C";
+static const char long_spc264[] = " MPI_Neighbor_alltoall(sendbuf=%p, sendcount=%d, sendtype=%D, recvbuf=%p, recvcount=%d, recvtype=%D, comm=%C)";
+static const char short_spc265[] = "**mpi_neighbor_alltoallv %p %p %p %D %p %p %p %D %C";
+static const char long_spc265[] = " MPI_Neighbor_alltoallv(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtype=%D, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtype=%D, comm=%C)";
+static const char short_spc266[] = "**mpi_neighbor_alltoallw %p %p %p %p %p %p %p %p %C";
+static const char long_spc266[] = " MPI_Neighbor_alltoallw(sendbuf=%p, sendcounts=%p, sdispls=%p, sendtypes=%p, recvbuf=%p, recvcounts=%p, rdispls=%p, recvtypes=%p, comm=%C)";
+static const char short_spc267[] = "**mpi_op_commutative %O %p";
+static const char long_spc267[] = "MPI_Op_commutative(op=%O, commute=%p) failed";
+static const char short_spc268[] = "**mpi_op_create %p %d %p";
+static const char long_spc268[] = "MPI_Op_create(fn=%p, commute=%d, op=%p) failed";
+static const char short_spc269[] = "**mpi_op_free %p";
+static const char long_spc269[] = "MPI_Op_free(op=%p) failed";
+static const char short_spc270[] = "**mpi_open_port %I %p";
+static const char long_spc270[] = "MPI_Open_port(%I, port=%p) failed";
+static const char short_spc271[] = "**mpi_pack %p %d %D %p %d %p %C";
+static const char long_spc271[] = "MPI_Pack(inbuf=%p, incount=%d, %D, outbuf=%p, outcount=%d, position=%p, %C) failed";
+static const char short_spc272[] = "**mpi_pack_external %s %p %d %D %p %d %p";
+static const char long_spc272[] = "MPI_Pack_external(datarep=%s, inbuf=%p, incount=%d, %D, outbuf=%p, outcount=%d, position=%p) failed";
+static const char short_spc273[] = "**mpi_pack_external_size %s %d %D %p";
+static const char long_spc273[] = "MPI_Pack_external_size(datarep=%s, incount=%d, %D, size=%p) failed";
+static const char short_spc274[] = "**mpi_pack_size %d %D %C %p";
+static const char long_spc274[] = "MPI_Pack_size(count=%d, %D, %C, size=%p) failed";
+static const char short_spc275[] = "**mpi_probe %i %t %C %p";
+static const char long_spc275[] = "MPI_Probe(src=%i, tag=%t, %C, status=%p) failed";
+static const char short_spc276[] = "**mpi_publish_name %s %I %s";
+static const char long_spc276[] = "MPI_Publish_name(service=\"%s\", %I, port=\"%s\") failed";
+static const char short_spc277[] = "**mpi_put %p %d %D %d %d %d %D %W";
+static const char long_spc277[] = "MPI_Put(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W) failed";
+static const char short_spc278[] = "**mpi_query_thread %p";
+static const char long_spc278[] = "MPI_Query_thread(provided=%p) failed";
+static const char short_spc279[] = "**mpi_raccumulate %p %d %D %d %d %d %D %O %W %p";
+static const char long_spc279[] = "MPI_Raccumulate(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W, request=%p) failed";
+static const char short_spc280[] = "**mpi_recv %p %d %D %i %t %C %p";
+static const char long_spc280[] = "MPI_Recv(buf=%p, count=%d, %D, src=%i, tag=%t, %C, status=%p) failed";
+static const char short_spc281[] = "**mpi_recv_init %p %d %D %i %t %C %p";
+static const char long_spc281[] = "MPI_Recv_init(buf=%p, count=%d, %D, src=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc282[] = "**mpi_reduce %p %p %d %D %O %d %C";
+static const char long_spc282[] = "MPI_Reduce(sbuf=%p, rbuf=%p, count=%d, %D, %O, root=%d, %C) failed";
+static const char short_spc283[] = "**mpi_reduce_local %p %p %d %D %O";
+static const char long_spc283[] = "MPI_Reduce_local(inbuf=%p, inoutbuf=%p, count=%d, %D, %O) failed";
+static const char short_spc284[] = "**mpi_reduce_scatter %p %p %p %D %O %C";
+static const char long_spc284[] = "MPI_Reduce_scatter(sbuf=%p, rbuf=%p, rcnts=%p, %D, %O, %C) failed";
+static const char short_spc285[] = "**mpi_reduce_scatter_block %p %p %d %D %O %C";
+static const char long_spc285[] = "MPI_Reduce_scatter_block(sbuf=%p, rbuf=%p, recvcount=%d, %D, %O, %C) failed";
+static const char short_spc286[] = "**mpi_register_datarep %s %p %p %p %p";
+static const char long_spc286[] = "MPI_Register_datarep(datarep=%s, read_conversion_fn=%p, write_conversion_fn=%p, dtype_file_extent_fn=%p, extra_state=%p) failed";
+static const char short_spc287[] = "**mpi_request_free %p";
+static const char long_spc287[] = "MPI_Request_free(request=%p) failed";
+static const char short_spc288[] = "**mpi_request_get_status %R %p %p";
+static const char long_spc288[] = "MPI_Request_get_status(%R, flag=%p, status=%p) failed";
+static const char short_spc289[] = "**mpi_rget %p %d %D %d %d %d %D %W %p";
+static const char long_spc289[] = "MPI_Rget(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W, request=%p) failed";
+static const char short_spc290[] = "**mpi_rget_accumulate %p %d %D %p %d %D %d %d %d %D %O %W %p";
+static const char long_spc290[] = "MPI_Rget_accumulate(origin_addr=%p, origin_count=%d, %D, result_addr=%p, result_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %O, %W, %p) failed";
+static const char short_spc291[] = "**mpi_rput %p %d %D %d %d %d %D %W %p";
+static const char long_spc291[] = "MPI_Rput(origin_addr=%p, origin_count=%d, %D, target_rank=%d, target_disp=%d, target_count=%d, %D, %W, request=%p) failed";
+static const char short_spc292[] = "**mpi_rsend %p %d %D %i %t %C";
+static const char long_spc292[] = "MPI_Rsend(buf=%p, count=%d, %D, src=%i, tag=%t, %C) failed";
+static const char short_spc293[] = "**mpi_rsend_init %p %d %D %i %t %C %p";
+static const char long_spc293[] = "MPI_Rsend_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc294[] = "**mpi_scan %p %p %d %D %O %C";
+static const char long_spc294[] = "MPI_Scan(sbuf=%p, rbuf=%p, count=%d, %D, %O, %C) failed";
+static const char short_spc295[] = "**mpi_scatter %p %d %D %p %d %D %d %C";
+static const char long_spc295[] = "MPI_Scatter(sbuf=%p, scount=%d, %D, rbuf=%p, rcount=%d, %D, root=%d, %C) failed";
+static const char short_spc296[] = "**mpi_scatterv %p %p %p %D %p %d %D %d %C";
+static const char long_spc296[] = "MPI_Scatterv(sbuf=%p, scnts=%p, displs=%p, %D, rbuf=%p, rcount=%d, %D, root=%d, %C) failed";
+static const char short_spc297[] = "**mpi_send %p %d %D %i %t %C";
+static const char long_spc297[] = "MPI_Send(buf=%p, count=%d, %D, dest=%i, tag=%t, %C) failed";
+static const char short_spc298[] = "**mpi_send_init %p %d %D %i %t %C %p";
+static const char long_spc298[] = "MPI_Send_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc299[] = "**mpi_sendrecv %p %d %D %i %t %p %d %D %i %t %C %p";
+static const char long_spc299[] = "MPI_Sendrecv(sbuf=%p, scount=%d, %D, dest=%i, stag=%t, rbuf=%p, rcount=%d, %D, src=%i, rtag=%t, %C, status=%p) failed";
+static const char short_spc300[] = "**mpi_sendrecv_replace %p %d %D %i %t %i %t %C %p";
+static const char long_spc300[] = "MPI_Sendrecv_replace(buf=%p, count=%d, %D, dest=%i, stag=%t, src=%i, rtag=%t, %C, status=%p) failed";
+static const char short_spc301[] = "**mpi_ssend %p %d %D %i %t %C";
+static const char long_spc301[] = "MPI_Ssend(buf=%p, count=%d, %D, dest=%i, tag=%t, %C) failed";
+static const char short_spc302[] = "**mpi_ssend_init %p %d %D %i %t %C %p";
+static const char long_spc302[] = "MPI_Ssend_init(buf=%p, count=%d, %D, dest=%i, tag=%t, %C, request=%p) failed";
+static const char short_spc303[] = "**mpi_start %p";
+static const char long_spc303[] = "MPI_Start(request=%p) failed";
+static const char short_spc304[] = "**mpi_startall %d %p";
+static const char long_spc304[] = "MPI_Startall(count=%d, req_array=%p) failed";
+static const char short_spc305[] = "**mpi_status_set_cancelled %p %d";
+static const char long_spc305[] = "MPI_Status_set_cancelled(status=%p, flag=%d) failed";
+static const char short_spc306[] = "**mpi_status_set_elements %p %D %d";
+static const char long_spc306[] = "MPI_Status_set_elements(status=%p, %D, count=%d) failed";
+static const char short_spc307[] = "**mpi_status_set_elements_x %p %D %c";
+static const char long_spc307[] = " MPI_Status_set_elements_x(status=%p, datatype=%D, count=%c)";
+static const char short_spc308[] = "**mpi_t_category_changed %p";
+static const char long_spc308[] = " MPI_T_category_changed(stamp=%p)";
+static const char short_spc309[] = "**mpi_t_category_get_categories %d %d %p";
+static const char long_spc309[] = " MPI_T_category_get_categories(cat_index=%d, len=%d, indices=%p)";
+static const char short_spc310[] = "**mpi_t_category_get_cvars %d %d %p";
+static const char long_spc310[] = " MPI_T_category_get_cvars(cat_index=%d, len=%d, indices=%p)";
+static const char short_spc311[] = "**mpi_t_category_get_info %d %p %p %p %p %p %p %p";
+static const char long_spc311[] = " MPI_T_category_get_info(cat_index=%d, name=%p, name_len=%p, desc=%p, desc_len=%p, num_controlvars=%p, num_pvars=%p, num_categories=%p)";
+static const char short_spc312[] = "**mpi_t_category_get_num %p";
+static const char long_spc312[] = " MPI_T_category_get_num(num_cat=%p)";
+static const char short_spc313[] = "**mpi_t_category_get_pvars %d %d %p";
+static const char long_spc313[] = " MPI_T_category_get_pvars(cat_index=%d, len=%d, indices=%p)";
+static const char short_spc314[] = "**mpi_t_cvar_get_info %d %p %p %p %p %p %p %p %p %p";
+static const char long_spc314[] = " MPI_T_cvar_get_info(cvar_index=%d, name=%p, name_len=%p, verbosity=%p, datatype=%p, enumtype=%p, desc=%p, desc_len=%p, bind=%p, scope=%p)";
+static const char short_spc315[] = "**mpi_t_cvar_get_num %p";
+static const char long_spc315[] = " MPI_T_cvar_get_num(num_cvar=%p)";
+static const char short_spc316[] = "**mpi_t_cvar_handle_alloc %d %p %p %p";
+static const char long_spc316[] = " MPI_T_cvar_handle_alloc(cvar_index=%d, obj_handle=%p, handle=%p, count=%p)";
+static const char short_spc317[] = "**mpi_t_cvar_handle_free %p";
+static const char long_spc317[] = " MPI_T_cvar_handle_free(handle=%p)";
+static const char short_spc318[] = "**mpi_t_cvar_read %p %p";
+static const char long_spc318[] = " MPI_T_cvar_read(handle=%p, buf=%p)";
+static const char short_spc319[] = "**mpi_t_cvar_write %p %p";
+static const char long_spc319[] = " MPI_T_cvar_write(handle=%p, buf=%p)";
+static const char short_spc320[] = "**mpi_t_enum_get_info %p %p %p %p";
+static const char long_spc320[] = " MPI_T_enum_get_info(enumtype=%p, num=%p, name=%p, name_len=%p)";
+static const char short_spc321[] = "**mpi_t_enum_get_item %p %d %p %p %p";
+static const char long_spc321[] = " MPI_T_enum_get_item(enumtype=%p, num=%d, value=%p, name=%p, name_len=%p)";
+static const char short_spc322[] = "**mpi_t_pvar_get_info %d %p %p %p %p %p %p %p %p %p %p %p %p";
+static const char long_spc322[] = " MPI_T_pvar_get_info(pvar_index=%d, name=%p, name_len=%p, verbosity=%p, var_class=%p, datatype=%p, enumtype=%p, desc=%p, desc_len=%p, bind=%p, readonly=%p, continuous=%p, atomic=%p)";
+static const char short_spc323[] = "**mpi_t_pvar_get_num %p";
+static const char long_spc323[] = " MPI_T_pvar_get_num(num_pvar=%p)";
+static const char short_spc324[] = "**mpi_t_pvar_handle_alloc %p %d %p %p %p";
+static const char long_spc324[] = " MPI_T_pvar_handle_alloc(session=%p, pvar_index=%d, obj_handle=%p, handle=%p, count=%p)";
+static const char short_spc325[] = "**mpi_t_pvar_handle_free %p %p";
+static const char long_spc325[] = " MPI_T_pvar_handle_free(session=%p, handle=%p)";
+static const char short_spc326[] = "**mpi_t_pvar_read %p %p %p";
+static const char long_spc326[] = " MPI_T_pvar_read(session=%p, handle=%p, buf=%p)";
+static const char short_spc327[] = "**mpi_t_pvar_readreset %p %p %p";
+static const char long_spc327[] = " MPI_T_pvar_readreset(session=%p, handle=%p, buf=%p)";
+static const char short_spc328[] = "**mpi_t_pvar_reset %p %p";
+static const char long_spc328[] = " MPI_T_pvar_reset(session=%p, handle=%p)";
+static const char short_spc329[] = "**mpi_t_pvar_session_create %p";
+static const char long_spc329[] = " MPI_T_pvar_session_create(session=%p)";
+static const char short_spc330[] = "**mpi_t_pvar_session_free %p";
+static const char long_spc330[] = " MPI_T_pvar_session_free(session=%p)";
+static const char short_spc331[] = "**mpi_t_pvar_start %p %p";
+static const char long_spc331[] = " MPI_T_pvar_start(session=%p, handle=%p)";
+static const char short_spc332[] = "**mpi_t_pvar_stop %p %p";
+static const char long_spc332[] = " MPI_T_pvar_stop(session=%p, handle=%p)";
+static const char short_spc333[] = "**mpi_t_pvar_write %p %p %p";
+static const char long_spc333[] = " MPI_T_pvar_write(session=%p, handle=%p, buf=%p)";
+static const char short_spc334[] = "**mpi_test %p %p %p";
+static const char long_spc334[] = "MPI_Test(request=%p, flag=%p, status=%p) failed";
+static const char short_spc335[] = "**mpi_test_cancelled %p %p";
+static const char long_spc335[] = "MPI_Test_cancelled(status=%p, flag=%p) failed";
+static const char short_spc336[] = "**mpi_testall %d %p %p %p";
+static const char long_spc336[] = "MPI_Testall(count=%d, req_array=%p, flag=%p, status_array=%p) failed";
+static const char short_spc337[] = "**mpi_testany %d %p %p %p %p";
+static const char long_spc337[] = "MPI_Testany(count=%d, req_array=%p, index=%p, flag=%p, status=%p) failed";
+static const char short_spc338[] = "**mpi_testsome %d %p %p %p %p";
+static const char long_spc338[] = "MPI_Testsome(count=%d, req_array=%p, out_count=%p, indices=%p, status_array=%p) failed";
+static const char short_spc339[] = "**mpi_topo_test %C %p";
+static const char long_spc339[] = "MPI_Topo_test(%C, topo_type=%p) failed";
+static const char short_spc340[] = "**mpi_type_commit %p";
+static const char long_spc340[] = "MPI_Type_commit(datatype_p=%p) failed";
+static const char short_spc341[] = "**mpi_type_contiguous %d %D %p";
+static const char long_spc341[] = "MPI_Type_contiguous(count=%d, %D, new_type_p=%p) failed";
+static const char short_spc342[] = "**mpi_type_create_darray %d %d %d %p %p %p %p %d %D %p";
+static const char long_spc342[] = "MPI_Type_create_darray(size=%d, rank=%d, ndims=%d, array_of_gsizes=%p, array_of_distribs=%p, array_of_dargs=%p, array_of_psizes=%p, order=%d, %D, newtype=%p) failed";
+static const char short_spc343[] = "**mpi_type_create_f90_complex %d %d";
+static const char long_spc343[] = "MPI_Type_create_f90_complex (precision=%d, range=%d) failed";
+static const char short_spc344[] = "**mpi_type_create_f90_int %d";
+static const char long_spc344[] = " MPI_Type_create_f90_int (range=%d) failed";
+static const char short_spc345[] = "**mpi_type_create_f90_real %d %d";
+static const char long_spc345[] = "MPI_Type_create_f90_real (precision=%d, range=%d) failed";
+static const char short_spc346[] = "**mpi_type_create_hindexed %d %p %p %D %p";
+static const char long_spc346[] = "MPI_Type_create_hindexed(count=%d, array_of_blocklengths=%p, array_of_displacements=%p, %D, newtype=%p) failed";
+static const char short_spc347[] = "**mpi_type_create_hindexed_block %d %d %p %D %p";
+static const char long_spc347[] = "MPI_Type_create_hindexed_block(count=%d, blocklength=%d, array_of_displacements=%p, %D, newtype=%p) failed";
+static const char short_spc348[] = "**mpi_type_create_hvector %d %d %d %D %p";
+static const char long_spc348[] = "MPI_Type_create_hvector(count=%d, blocklength=%d, stride=%d, %D, newtype=%p) failed";
+static const char short_spc349[] = "**mpi_type_create_indexed_block %d %d %p %D %p";
+static const char long_spc349[] = "MPI_Type_create_indexed_block(count=%d, blocklength=%d, array_of_displacements=%p, %D, newtype=%p) failed";
+static const char short_spc350[] = "**mpi_type_create_keyval %p %p %p %p";
+static const char long_spc350[] = "MPI_Type_create_keyval(type_copy_attr_fn=%p, type_delete_attr_fn=%p, type_keyval=%p, extra_state=%p) failed";
+static const char short_spc351[] = "**mpi_type_create_resized %D %L %L %p";
+static const char long_spc351[] = "MPI_Type_create_resized(%D, lb=%L, extent=%L, newtype=%p) failed";
+static const char short_spc352[] = "**mpi_type_create_struct %d %p %p %p %p";
+static const char long_spc352[] = "MPI_Type_create_struct(count=%d, array_of_blocklengths=%p, array_of_displacements=%p, array_of_types=%p, newtype=%p) failed";
+static const char short_spc353[] = "**mpi_type_create_subarray %d %p %p %p %d %D %p";
+static const char long_spc353[] = "MPI_Type_create_subarray(ndims=%d, array_of_sizes=%p, array_of_subsizes=%p, array_of_starts=%p, order=%d, %D, newtype=%p) failed";
+static const char short_spc354[] = "**mpi_type_delete_attr %D %d";
+static const char long_spc354[] = "MPI_Type_delete_attr(%D, type_keyval=%d) failed";
+static const char short_spc355[] = "**mpi_type_dup %D %p";
+static const char long_spc355[] = "MPI_Type_dup(%D, newtype=%p) failed";
+static const char short_spc356[] = "**mpi_type_extent %D %p";
+static const char long_spc356[] = "MPI_Type_extent(%D, extent=%p) failed";
+static const char short_spc357[] = "**mpi_type_free %p";
+static const char long_spc357[] = "MPI_Type_free(datatype_p=%p) failed";
+static const char short_spc358[] = "**mpi_type_free_keyval %p";
+static const char long_spc358[] = "MPI_Type_free_keyval(type_keyval=%p) failed";
+static const char short_spc359[] = "**mpi_type_get_attr %D %d %p %p";
+static const char long_spc359[] = "MPI_Type_get_attr(%D, type_keyval=%d, attribute_val=%p, flag=%p) failed";
+static const char short_spc360[] = "**mpi_type_get_contents %D %d %d %d %p %p %p";
+static const char long_spc360[] = "MPI_Type_get_contents(%D, max_integers=%d, max_addresses=%d, max_datatypes=%d, array_of_integers=%p, array_of_addresses=%p, array_of_datatypes=%p) failed";
+static const char short_spc361[] = "**mpi_type_get_envelope %D %p %p %p %p";
+static const char long_spc361[] = "MPI_Type_get_envelope(%D, num_integers=%p, num_addresses=%p, num_datatypes=%p, combiner=%p) failed";
+static const char short_spc362[] = "**mpi_type_get_extent %D %p %p";
+static const char long_spc362[] = "MPI_Type_get_extent(%D, lb=%p, extent=%p) failed";
+static const char short_spc363[] = "**mpi_type_get_extent_x %D %p %p";
+static const char long_spc363[] = " MPI_Type_get_extent_x(datatype=%D, lb=%p, extent=%p)";
+static const char short_spc364[] = "**mpi_type_get_name %D %p %p";
+static const char long_spc364[] = "MPI_Type_get_name(%D, type_name=%p, resultlen=%p) failed";
+static const char short_spc365[] = "**mpi_type_get_true_extent %D %p %p";
+static const char long_spc365[] = "MPI_Type_get_true_extent(%D, lb=%p, true_extent=%p) failed";
+static const char short_spc366[] = "**mpi_type_get_true_extent_x %D %p %p";
+static const char long_spc366[] = " MPI_Type_get_true_extent_x(datatype=%D, lb=%p, extent=%p)";
+static const char short_spc367[] = "**mpi_type_hindexed %d %p %p %D %p";
+static const char long_spc367[] = "MPI_Type_hindexed(count=%d, blocklens=%p, indices=%p, %D, new_type_p=%p) failed";
+static const char short_spc368[] = "**mpi_type_hvector %d %d %d %D %p";
+static const char long_spc368[] = "MPI_Type_hvector(count=%d, blocklen=%d, stride=%d, %D, new_type_p=%p) failed";
+static const char short_spc369[] = "**mpi_type_indexed %d %p %p %D %p";
+static const char long_spc369[] = "MPI_Type_indexed(count=%d, blocklens=%p, indices=%p, %D, new_type_p=%p) failed";
+static const char short_spc370[] = "**mpi_type_lb %D %p";
+static const char long_spc370[] = "MPI_Type_lb(%D, displacement=%p) failed";
+static const char short_spc371[] = "**mpi_type_match_size %d %d %p";
+static const char long_spc371[] = "MPI_Type_match_size(typeclass=%d, size=%d, datatype=%p) failed";
+static const char short_spc372[] = "**mpi_type_set_attr %D %d %p";
+static const char long_spc372[] = "MPI_Type_set_attr(%D, type_keyval=%d, attribute_val=%p) failed";
+static const char short_spc373[] = "**mpi_type_set_name %D %s";
+static const char long_spc373[] = "MPI_Type_set_name(%D, type_name=%s) failed";
+static const char short_spc374[] = "**mpi_type_size %D %p";
+static const char long_spc374[] = "MPI_Type_size(%D) failed";
+static const char short_spc375[] = "**mpi_type_size_x %D %p";
+static const char long_spc375[] = " MPI_Type_size_x(datatype=%D, size=%p)";
+static const char short_spc376[] = "**mpi_type_struct %d %p %p %p %p";
+static const char long_spc376[] = "MPI_Type_struct(count=%d, blocklens=%p, indices=%p, old_types=%p, new_type_p=%p) failed";
+static const char short_spc377[] = "**mpi_type_ub %D %p";
+static const char long_spc377[] = "MPI_Type_ub(%D, displacement=%p) failed";
+static const char short_spc378[] = "**mpi_type_vector %d %d %d %D %p";
+static const char long_spc378[] = "MPI_Type_vector(count=%d, blocklength=%d, stride=%d, %D, new_type_p=%p) failed";
+static const char short_spc379[] = "**mpi_unpack %p %d %p %p %d %D %C";
+static const char long_spc379[] = "MPI_Unpack(inbuf=%p, insize=%d, position=%p, outbuf=%p, outcount=%d, %D, %C) failed";
+static const char short_spc380[] = "**mpi_unpack_external %s %p %d %p %p %d %D";
+static const char long_spc380[] = "MPI_Unpack_external(datarep=%s, inbuf=%p, insize=%d, position=%p, outbuf=%p, outcount=%d, %D) failed";
+static const char short_spc381[] = "**mpi_unpublish_name %s %I %s";
+static const char long_spc381[] = "MPI_Unpublish_name(service=\"%s\", %I, port=\"%s\") failed";
+static const char short_spc382[] = "**mpi_wait %p %p";
+static const char long_spc382[] = "MPI_Wait(request=%p, status=%p) failed";
+static const char short_spc383[] = "**mpi_waitall %d %p %p";
+static const char long_spc383[] = "MPI_Waitall(count=%d, req_array=%p, status_array=%p) failed";
+static const char short_spc384[] = "**mpi_waitany %d %p %p %p";
+static const char long_spc384[] = "MPI_Waitany(count=%d, req_array=%p, index=%p, status=%p) failed";
+static const char short_spc385[] = "**mpi_waitsome %d %p %p %p %p";
+static const char long_spc385[] = "MPI_Waitsome(count=%d, req_array=%p, out_count=%p, indices=%p, status_array=%p) failed";
+static const char short_spc386[] = "**mpi_win_allocate %d %d %I %C %p %p";
+static const char long_spc386[] = "MPI_Win_allocate(size=%d, disp_unit=%d, %I, %C, base=%p, win=%p) failed";
+static const char short_spc387[] = "**mpi_win_allocate_shared %d %I %C %p %p";
+static const char long_spc387[] = "MPI_Win_allocate_shared(size=%d, %I, %C, baseptr=%p, win=%p) failed";
+static const char short_spc388[] = "**mpi_win_attach %W %p %d";
+static const char long_spc388[] = "MPI_Win_attach(%W, base=%p, size=%d) failed";
+static const char short_spc389[] = "**mpi_win_call_errhandler %W %d";
+static const char long_spc389[] = "MPI_Win_call_errhandler(%W, errorcode=%d) failed";
+static const char short_spc390[] = "**mpi_win_complete %W";
+static const char long_spc390[] = "MPI_Win_complete(%W) failed";
+static const char short_spc391[] = "**mpi_win_create %p %d %d %I %C %p";
+static const char long_spc391[] = "MPI_Win_create(base=%p, size=%d, disp_unit=%d, %I, %C, win=%p) failed";
+static const char short_spc392[] = "**mpi_win_create_dynamic %I %C %p";
+static const char long_spc392[] = "MPI_Win_create_dynamic(%I, %C, win=%p) failed";
+static const char short_spc393[] = "**mpi_win_create_errhandler %p %p";
+static const char long_spc393[] = "MPI_Win_create_errhandler(function=%p, errhandler=%p) failed";
+static const char short_spc394[] = "**mpi_win_create_keyval %p %p %p %p";
+static const char long_spc394[] = "MPI_Win_create_keyval(win_copy_attr_fn=%p, win_delete_attr_fn=%p, win_keyval=%p, extra_state=%p) failed";
+static const char short_spc395[] = "**mpi_win_delete_attr %W %d";
+static const char long_spc395[] = "MPI_Win_delete_attr(%W, win_keyval=%d) failed";
+static const char short_spc396[] = "**mpi_win_detach %W %p";
+static const char long_spc396[] = "MPI_Win_detach(%W, base=%p) failed";
+static const char short_spc397[] = "**mpi_win_fence %A %W";
+static const char long_spc397[] = "MPI_Win_fence(%A, %W) failed";
+static const char short_spc398[] = "**mpi_win_flush %d %W";
+static const char long_spc398[] = "MPI_Win_flush(target_rank=%d, %W) failed";
+static const char short_spc399[] = "**mpi_win_flush_all %W";
+static const char long_spc399[] = "MPI_Win_flush_all(%W) failed";
+static const char short_spc400[] = "**mpi_win_flush_local %d %W";
+static const char long_spc400[] = "MPI_Win_flush_local(target_rank=%d, %W) failed";
+static const char short_spc401[] = "**mpi_win_flush_local_all %W";
+static const char long_spc401[] = "MPI_Win_flush_local_all(%W) failed";
+static const char short_spc402[] = "**mpi_win_free %p";
+static const char long_spc402[] = "MPI_Win_free(win=%p) failed";
+static const char short_spc403[] = "**mpi_win_free_keyval %p";
+static const char long_spc403[] = "MPI_Win_free_keyval(win_keyval=%p) failed";
+static const char short_spc404[] = "**mpi_win_get_attr %W %d %p %p";
+static const char long_spc404[] = "MPI_Win_get_attr(%W, win_keyval=%d, attribute_val=%p, flag=%p) failed";
+static const char short_spc405[] = "**mpi_win_get_errhandler %W %p";
+static const char long_spc405[] = "MPI_Win_get_errhandler(%W, errhandler=%p) failed";
+static const char short_spc406[] = "**mpi_win_get_group %W %p";
+static const char long_spc406[] = "MPI_Win_get_group(%W, group=%p) failed";
+static const char short_spc407[] = "**mpi_win_get_info %W %p";
+static const char long_spc407[] = "MPI_Win_get_info(win=%W, info_used=%p) failed";
+static const char short_spc408[] = "**mpi_win_get_name %W %p %p";
+static const char long_spc408[] = "MPI_Win_get_name(%W, win_name=%p, resultlen=%p) failed";
+static const char short_spc409[] = "**mpi_win_lock %d %d %A %W";
+static const char long_spc409[] = "MPI_Win_lock(lock_type=%d, rank=%d, %A, %W) failed";
+static const char short_spc410[] = "**mpi_win_lock_all %A %W";
+static const char long_spc410[] = "MPI_Win_lock_all(%A, %W) failed";
+static const char short_spc411[] = "**mpi_win_post %G %A %W";
+static const char long_spc411[] = "MPI_Win_post(%G, %A, %W) failed";
+static const char short_spc412[] = "**mpi_win_set_attr %W %d %p";
+static const char long_spc412[] = "MPI_Win_set_attr(%W, win_keyval=%d, attribute_val=%p) failed";
+static const char short_spc413[] = "**mpi_win_set_errhandler %W %E";
+static const char long_spc413[] = "MPI_Win_set_errhandler(%W, %E) failed";
+static const char short_spc414[] = "**mpi_win_set_info %W %I";
+static const char long_spc414[] = "MPI_Win_set_info(win=%W, info=%I) failed";
+static const char short_spc415[] = "**mpi_win_set_name %W %s";
+static const char long_spc415[] = "MPI_Win_set_name(%W, win_name=%s) failed";
+static const char short_spc416[] = "**mpi_win_shared_query %W %d %p %p";
+static const char long_spc416[] = "MPI_Win_shared_query(win=%W, rank=%d, size=%p, baseptr=%p) failed";
+static const char short_spc417[] = "**mpi_win_start %G %A %W";
+static const char long_spc417[] = "MPI_Win_start(%G, %A, %W) failed";
+static const char short_spc418[] = "**mpi_win_sync %W";
+static const char long_spc418[] = "MPI_Win_sync(%W) failed";
+static const char short_spc419[] = "**mpi_win_test %W %p";
+static const char long_spc419[] = "MPI_Win_test(%W, flag=%p) failed";
+static const char short_spc420[] = "**mpi_win_unlock %d %W";
+static const char long_spc420[] = "MPI_Win_unlock(rank=%d, %W) failed";
+static const char short_spc421[] = "**mpi_win_unlock_all %W";
+static const char long_spc421[] = "MPI_Win_unlock_all(%W) failed";
+static const char short_spc422[] = "**mpi_win_wait %W";
+static const char long_spc422[] = "MPI_Win_wait(%W) failed";
+static const char short_spc423[] = "**mpir_comm_get_attr %C %d %p %p";
+static const char long_spc423[] = "MPIR_Comm_get_attr(%C, comm_keyval=%d, attribute_val=%p, flag=%p) failed";
+static const char short_spc424[] = "**mpir_type_get_attr %D %d %p %p";
+static const char long_spc424[] = "MPIR_Type_get_attr(%D, type_keyval=%d, attribute_val=%p, flag=%p) failed";
+static const char short_spc425[] = "**mpir_wingetattr %W %d %p %p";
+static const char long_spc425[] = "MPII_Win_get_attr(%W, win_keyval=%d, attribute_val=%p, flag=%p) failed";
+static const char short_spc426[] = "**mpix_comm_agree %C";
+static const char long_spc426[] = "MPIX_Comm_agree(%C) failed";
+static const char short_spc427[] = "**mpix_comm_failure_ack %C";
+static const char long_spc427[] = "MPIX_Comm_failure_ack(%C) failed";
+static const char short_spc428[] = "**mpix_comm_failure_get_acked %C %p";
+static const char long_spc428[] = "MPIX_Comm_failure_get_acked(%C, group=%p) failed";
+static const char short_spc429[] = "**mpix_comm_revoke %C";
+static const char long_spc429[] = "MPIX_Comm_revoke(%C) failed";
+static const char short_spc430[] = "**mpix_comm_shrink %C %p";
+static const char long_spc430[] = "MPIX_Comm_shrink(%C, new_comm=%p) failed";
+static const char short_spc431[] = "**mpix_grequest_class_create %p %p %p %p %p";
+static const char long_spc431[] = "MPIX_Grequest_class_create(query_fn=%p, free_fn=%p, cancel_fn=%p, %poll_fn=%p, wait_fn=%p) failed";
+static const char short_spc432[] = "**msgnotreq %d";
+static const char long_spc432[] = " Invalid MPI_Request at array index %d (MPI_Message passed)";
+static const char short_spc433[] = "**mutex_create %s";
+static const char long_spc433[] = "MPID_Thread_mutex_create failed: %s";
+static const char short_spc434[] = "**mxm_config_read_opts %s";
+static const char long_spc434[] = "mxm_config_read_opts failed (%s)";
+static const char short_spc435[] = "**mxm_ep_connect %s";
+static const char long_spc435[] = "mxm_ep_connect failed (%s)";
+static const char short_spc436[] = "**mxm_ep_create %s";
+static const char long_spc436[] = "mxm_ep_create failed (%s)";
+static const char short_spc437[] = "**mxm_ep_disconnect %s";
+static const char long_spc437[] = "mxm_ep_disconnect failed (%s)";
+static const char short_spc438[] = "**mxm_ep_get_address %s";
+static const char long_spc438[] = "mxm_ep_get_address failed (%s)";
+static const char short_spc439[] = "**mxm_init %s";
+static const char long_spc439[] = "mxm_init failed (%s)";
+static const char short_spc440[] = "**mxm_mq_create %s";
+static const char long_spc440[] = "mxm_mq_create failed (%s)";
+static const char short_spc441[] = "**mxm_set_am_handler %s";
+static const char long_spc441[] = "mxm_set_am_handler failed (%s)";
+static const char short_spc442[] = "**namepubfile %s %s %s";
+static const char long_spc442[] = "Unable to publish service name %s using file %s for reason %s";
+static const char short_spc443[] = "**namepubnotfound %s";
+static const char long_spc443[] = "Lookup failed for service name %s";
+static const char short_spc444[] = "**namepubnotpub %s";
+static const char long_spc444[] = "Lookup failed for service name %s";
+static const char short_spc445[] = "**namepubnotunpub %s";
+static const char long_spc445[] = "Failed to unpublish service name %s";
+static const char short_spc446[] = "**nomem %d";
+static const char long_spc446[] = "Out of memory (unable to allocate %d bytes)";
+static const char short_spc447[] = "**nomem %s";
+static const char long_spc447[] = "Out of memory (unable to allocate a '%s')";
+static const char short_spc448[] = "**nomem %s %d";
+static const char long_spc448[] = "Out of memory (unable to allocate a '%s' of size %d)";
+static const char short_spc449[] = "**nomem2 %d %s";
+static const char long_spc449[] = "Unable to allocate %d bytes of memory for %s (probably out of memory)";
+static const char short_spc450[] = "**nomemuereq %d";
+static const char long_spc450[] = "Failed to allocate memory for an unexpected message. %d unexpected messages queued.";
+static const char short_spc451[] = "**notimpl %s";
+static const char long_spc451[] = "Function %s not implemented";
+static const char short_spc452[] = "**notsame %s %s";
+static const char long_spc452[] = "Inconsistent arguments %s to collective routine %s";
+static const char short_spc453[] = "**nullptr %s";
+static const char long_spc453[] = "Null pointer in parameter %s";
+static const char short_spc454[] = "**nullptrtype %s";
+static const char long_spc454[] = "Null %s pointer";
+static const char short_spc455[] = "**ofi_avclose %s %d %s %s";
+static const char long_spc455[] = "OFI av close failed (%s:%d:%s:%s)";
+static const char short_spc456[] = "**ofi_avmap %s %d %s %s";
+static const char long_spc456[] = "OFI address vector map failed (%s:%d:%s:%s)";
+static const char short_spc457[] = "**ofi_avopen %s %d %s %s";
+static const char long_spc457[] = "OFI address vector open failed (%s:%d:%s:%s)";
+static const char short_spc458[] = "**ofi_bind %s %d %s %s";
+static const char long_spc458[] = "OFI resource bind failed (%s:%d:%s:%s)";
+static const char short_spc459[] = "**ofi_cancel %s %d %s %s";
+static const char long_spc459[] = "OFI cancel failed (%s:%d:%s:%s)";
+static const char short_spc460[] = "**ofi_cqclose %s %d %s %s";
+static const char long_spc460[] = "OFI cq close failed (%s:%d:%s:%s)";
+static const char short_spc461[] = "**ofi_domainclose %s %d %s %s";
+static const char long_spc461[] = "OFI domain close failed (%s:%d:%s:%s)";
+static const char short_spc462[] = "**ofi_ep_enable %s %d %s %s";
+static const char long_spc462[] = "OFI endpoint enable failed (%s:%d:%s:%s)";
+static const char short_spc463[] = "**ofi_epclose %s %d %s %s";
+static const char long_spc463[] = "OFI endpoint close failed (%s:%d:%s:%s)";
+static const char short_spc464[] = "**ofi_fabricclose %s %d %s %s";
+static const char long_spc464[] = "OFI fabric close failed (%s:%d:%s:%s)";
+static const char short_spc465[] = "**ofi_getinfo %s %d %s %s";
+static const char long_spc465[] = "OFI getinfo() failed (%s:%d:%s:%s)";
+static const char short_spc466[] = "**ofi_getname %s %d %s %s";
+static const char long_spc466[] = "OFI get endpoint name failed (%s:%d:%s:%s)";
+static const char short_spc467[] = "**ofi_opencq %s %d %s %s";
+static const char long_spc467[] = "OFI event queue create failed (%s:%d:%s:%s)";
+static const char short_spc468[] = "**ofi_opendomain %s %d %s %s";
+static const char long_spc468[] = "OFI domain open failed (%s:%d:%s:%s)";
+static const char short_spc469[] = "**ofi_openep %s %d %s %s";
+static const char long_spc469[] = "OFI endpoint open failed (%s:%d:%s:%s)";
+static const char short_spc470[] = "**ofi_openfabric %s %d %s %s";
+static const char long_spc470[] = "OFI fabric open failed (%s:%d:%s:%s)";
+static const char short_spc471[] = "**ofi_peek %s %d %s %s";
+static const char long_spc471[] = "OFI peek failed (%s:%d:%s:%s)";
+static const char short_spc472[] = "**ofi_poll %s %d %s %s";
+static const char long_spc472[] = "OFI poll failed (%s:%d:%s:%s)";
+static const char short_spc473[] = "**ofi_trecv %s %d %s %s";
+static const char long_spc473[] = "OFI tagged recvfrom failed (%s:%d:%s:%s)";
+static const char short_spc474[] = "**ofi_tsend %s %d %s %s";
+static const char long_spc474[] = "OFI tagged sendto failed (%s:%d:%s:%s)";
+static const char short_spc475[] = "**ofid_addrinfo %s %d %s %s";
+static const char long_spc475[] = "OFI addrinfo() failed (%s:%d:%s:%s)";
+static const char short_spc476[] = "**ofid_alias %s %d %s %s";
+static const char long_spc476[] = "OFI cq alias failed (%s:%d:%s:%s)";
+static const char short_spc477[] = "**ofid_avclose %s %d %s %s";
+static const char long_spc477[] = "OFI av close failed (%s:%d:%s:%s)";
+static const char short_spc478[] = "**ofid_avlookup %s %d %s %s";
+static const char long_spc478[] = "OFI address vector lookup failed (%s:%d:%s:%s)";
+static const char short_spc479[] = "**ofid_avmap %s %d %s %s";
+static const char long_spc479[] = "OFI address vector map failed (%s:%d:%s:%s)";
+static const char short_spc480[] = "**ofid_avopen %s %d %s %s";
+static const char long_spc480[] = "OFI address vector open failed (%s:%d:%s:%s)";
+static const char short_spc481[] = "**ofid_avsync %s %d %s %s";
+static const char long_spc481[] = "OFI address vector sync failed (%s:%d:%s:%s)";
+static const char short_spc482[] = "**ofid_bind %s %d %s %s";
+static const char long_spc482[] = "OFI resource bind failed (%s:%d:%s:%s)";
+static const char short_spc483[] = "**ofid_cntr_wait %s %d %s %s";
+static const char long_spc483[] = "OFI OFI Counter wait failed (%s:%d:%s:%s)";
+static const char short_spc484[] = "**ofid_cqclose %s %d %s %s";
+static const char long_spc484[] = "OFI cq close failed (%s:%d:%s:%s)";
+static const char short_spc485[] = "**ofid_ctrlcancel %s %d %s %s";
+static const char long_spc485[] = "OFI control cancel failed (%s:%d:%s:%s)";
+static const char short_spc486[] = "**ofid_domainclose %s %d %s %s";
+static const char long_spc486[] = "OFI domain close failed (%s:%d:%s:%s)";
+static const char short_spc487[] = "**ofid_ep %s %d %s %s";
+static const char long_spc487[] = "OFI endpoint open failed (%s:%d:%s:%s)";
+static const char short_spc488[] = "**ofid_ep_enable %s %d %s %s";
+static const char long_spc488[] = "OFI EP enable failed (%s:%d:%s:%s)";
+static const char short_spc489[] = "**ofid_epclose %s %d %s %s";
+static const char long_spc489[] = "OFI endpoint close failed (%s:%d:%s:%s)";
+static const char short_spc490[] = "**ofid_epsync %s %d %s %s";
+static const char long_spc490[] = "OFI endpoint synchronization failed (%s:%d:%s:%s)";
+static const char short_spc491[] = "**ofid_fabric %s %d %s %s";
+static const char long_spc491[] = "OFI fi_fabric failed (%s:%d:%s:%s)";
+static const char short_spc492[] = "**ofid_getname %s %d %s %s";
+static const char long_spc492[] = "OFI get endpoint name failed (%s:%d:%s:%s)";
+static const char short_spc493[] = "**ofid_getopt %s %d %s %s";
+static const char long_spc493[] = "OFI getopt failed (%s:%d:%s:%s)";
+static const char short_spc494[] = "**ofid_inject %s %d %s %s";
+static const char long_spc494[] = "OFI inject failed (%s:%d:%s:%s)";
+static const char short_spc495[] = "**ofid_mr_reg %s %d %s %s";
+static const char long_spc495[] = "OFI memory registration failed (%s:%d:%s:%s)";
+static const char short_spc496[] = "**ofid_mr_unreg %s %d %s %s";
+static const char long_spc496[] = "OFI memory deregistration failed (%s:%d:%s:%s)";
+static const char short_spc497[] = "**ofid_opencq %s %d %s %s";
+static const char long_spc497[] = "OFI event queue create failed (%s:%d:%s:%s)";
+static const char short_spc498[] = "**ofid_openct %s %d %s %s";
+static const char long_spc498[] = "OFI event counter create failed (%s:%d:%s:%s)";
+static const char short_spc499[] = "**ofid_opendomain %s %d %s %s";
+static const char long_spc499[] = "OFI fi_open domain failed (%s:%d:%s:%s)";
+static const char short_spc500[] = "**ofid_peek %s %d %s %s";
+static const char long_spc500[] = "OFI peek failed (%s:%d:%s:%s)";
+static const char short_spc501[] = "**ofid_pmi %s %d %s %s";
+static const char long_spc501[] = "pmi failed (%s:%d:%s:%s)";
+static const char short_spc502[] = "**ofid_poll %s %d %s %s";
+static const char long_spc502[] = "OFI poll failed (%s:%d:%s:%s)";
+static const char short_spc503[] = "**ofid_prepost %s %d %s %s";
+static const char long_spc503[] = "OFI preposting receives failed (%s:%d:%s:%s)";
+static const char short_spc504[] = "**ofid_rdma_atomicto %s %d %s %s";
+static const char long_spc504[] = "OFI rdma atomicto failed (%s:%d:%s:%s)";
+static const char short_spc505[] = "**ofid_rdma_cswap %s %d %s %s";
+static const char long_spc505[] = "OFI rdma cswap failed (%s:%d:%s:%s)";
+static const char short_spc506[] = "**ofid_rdma_inject_write %s %d %s %s";
+static const char long_spc506[] = "OFI rdma write immediate failed (%s:%d:%s:%s)";
+static const char short_spc507[] = "**ofid_rdma_readfrom %s %d %s %s";
+static const char long_spc507[] = "OFI read failed (%s:%d:%s:%s)";
+static const char short_spc508[] = "**ofid_rdma_write %s %d %s %s";
+static const char long_spc508[] = "OFI rdma write failed (%s:%d:%s:%s)";
+static const char short_spc509[] = "**ofid_rma_init %s %d %s %s";
+static const char long_spc509[] = "OFI RMA Initialization failed (%s:%d:%s:%s)";
+static const char short_spc510[] = "**ofid_send %s %d %s %s";
+static const char long_spc510[] = "OFI send failed (%s:%d:%s:%s)";
+static const char short_spc511[] = "**ofid_setopt %s %d %s %s";
+static const char long_spc511[] = "OFI setopt failed (%s:%d:%s:%s)";
+static const char short_spc512[] = "**ofid_tinject %s %d %s %s";
+static const char long_spc512[] = "OFI tagged inject failed (%s:%d:%s:%s)";
+static const char short_spc513[] = "**ofid_trecv %s %d %s %s";
+static const char long_spc513[] = "OFI tagged recv failed (%s:%d:%s:%s)";
+static const char short_spc514[] = "**ofid_trecvsync %s %d %s %s";
+static const char long_spc514[] = "OFI tagged recv sync failed (%s:%d:%s:%s)";
+static const char short_spc515[] = "**ofid_tsend %s %d %s %s";
+static const char long_spc515[] = "OFI tagged send failed (%s:%d:%s:%s)";
+static const char short_spc516[] = "**ofid_tsendsync %s %d %s %s";
+static const char long_spc516[] = "OFI tagged send sync failed (%s:%d:%s:%s)";
+static const char short_spc517[] = "**open %s";
+static const char long_spc517[] = "open failed - %s";
+static const char short_spc518[] = "**opnotpredefined %d";
+static const char long_spc518[] = "only predefined ops are valid (op = %d)";
+static const char short_spc519[] = "**opundefined %s";
+static const char long_spc519[] = "MPI_Op %s operation not defined for this datatype ";
+static const char short_spc520[] = "**pglookup %s";
+static const char long_spc520[] = "unable to find the process group structure with id <%s>";
+static const char short_spc521[] = "**pmi_barrier %d";
+static const char long_spc521[] = "PMI_Barrier returned %d";
+static const char short_spc522[] = "**pmi_get_appnum %d";
+static const char long_spc522[] = "PMI_Get_appnum returned %d";
+static const char short_spc523[] = "**pmi_get_id %d";
+static const char long_spc523[] = "PMI_Get_id returned %d";
+static const char short_spc524[] = "**pmi_get_id_length_max %d";
+static const char long_spc524[] = "PMI_Get_id_length_max returned %d";
+static const char short_spc525[] = "**pmi_get_rank %d";
+static const char long_spc525[] = "PMI_Get_rank returned %d";
+static const char short_spc526[] = "**pmi_get_size %d";
+static const char long_spc526[] = "PMI_Get_size returned %d";
+static const char short_spc527[] = "**pmi_get_universe_size %d";
+static const char long_spc527[] = "PMI_Get_universe_size returned %d";
+static const char short_spc528[] = "**pmi_init %d";
+static const char long_spc528[] = "PMI_Init returned %d";
+static const char short_spc529[] = "**pmi_kvs_commit %d";
+static const char long_spc529[] = "PMI_KVS_Commit returned %d";
+static const char short_spc530[] = "**pmi_kvs_get %d";
+static const char long_spc530[] = "PMI_KVS_Get returned %d";
+static const char short_spc531[] = "**pmi_kvs_get_my_name %d";
+static const char long_spc531[] = "PMI_KVS_Get_my_name returned %d";
+static const char short_spc532[] = "**pmi_kvs_get_name_length_max %d";
+static const char long_spc532[] = "PMI_KVS_Get_name_length_max returned %d";
+static const char short_spc533[] = "**pmi_kvs_get_value_length_max %d";
+static const char long_spc533[] = "PMI_KVS_Get_value_length_max returned %d";
+static const char short_spc534[] = "**pmi_kvs_put %d";
+static const char long_spc534[] = "PMI_KVS_Put returned %d";
+static const char short_spc535[] = "**pmi_kvsget %d";
+static const char long_spc535[] = " PMI2 KVS_Get failed: %d";
+static const char short_spc536[] = "**pmi_kvsget %s";
+static const char long_spc536[] = " PMI2 KVS_Get failed: %s";
+static const char short_spc537[] = "**pmi_spawn_multiple %d";
+static const char long_spc537[] = "PMI_Spawn_multiple returned %d";
+static const char short_spc538[] = "**poll %s";
+static const char long_spc538[] = "poll of socket fds failed - %s";
+static const char short_spc539[] = "**portexist %s";
+static const char long_spc539[] = "Named port %s does not exist";
+static const char short_spc540[] = "**pthread_lock %s";
+static const char long_spc540[] = "pthread_lock failed (%s)";
+static const char short_spc541[] = "**pthread_mutex %s";
+static const char long_spc541[] = "pthread mutex routine failed (%s)";
+static const char short_spc542[] = "**pthread_unlock %s";
+static const char long_spc542[] = "pthread_unlock failed (%s)";
+static const char short_spc543[] = "**ptleqalloc %s";
+static const char long_spc543[] = "PtlEQAlloc() failed (%s)";
+static const char short_spc544[] = "**ptleqget %s";
+static const char long_spc544[] = "PtlEQGet() failed (%s)";
+static const char short_spc545[] = "**ptlget %s";
+static const char long_spc545[] = "PtlGet() failed (%s)";
+static const char short_spc546[] = "**ptlgetid %s";
+static const char long_spc546[] = "PtlGetId() failed (%s)";
+static const char short_spc547[] = "**ptlinit %s";
+static const char long_spc547[] = "PtlInit() failed (%s)";
+static const char short_spc548[] = "**ptlmdbind %s";
+static const char long_spc548[] = "PtlMDBind() failed (%s)";
+static const char short_spc549[] = "**ptlmdrelease %s";
+static const char long_spc549[] = "PtlMDRelease() failed (%s)";
+static const char short_spc550[] = "**ptlmeappend %s";
+static const char long_spc550[] = "PtlMEAppend() failed (%s)";
+static const char short_spc551[] = "**ptlmesearch %s";
+static const char long_spc551[] = "PtlMESearch() failed (%s)";
+static const char short_spc552[] = "**ptlmeunlink %s";
+static const char long_spc552[] = "PtlMEUnlink() failed (%s)";
+static const char short_spc553[] = "**ptlni_fail %s %s";
+static const char long_spc553[] = "communication failure event=%s fail_type=%s";
+static const char short_spc554[] = "**ptlnifini %s";
+static const char long_spc554[] = "PtlNIFini() failed (%s)";
+static const char short_spc555[] = "**ptlniinit %s";
+static const char long_spc555[] = "PtlNIInit() failed (%s)";
+static const char short_spc556[] = "**ptlptalloc %s";
+static const char long_spc556[] = "PtlPTAlloc() failed (%s)";
+static const char short_spc557[] = "**ptlptfree %s";
+static const char long_spc557[] = "PtlPTFree() failed (%s)";
+static const char short_spc558[] = "**ptlput %s";
+static const char long_spc558[] = "PtlPut() failed (%s)";
+static const char short_spc559[] = "**rangedup %d %d %d";
+static const char long_spc559[] = "The range array specifies duplicate entries; process %d specified in range array %d was previously specified in range array %d";
+static const char short_spc560[] = "**rangeendinvalid %d %d %d";
+static const char long_spc560[] = "The %dth element of a range array ends at %d but must be nonnegative and less than %d";
+static const char short_spc561[] = "**rangestartinvalid %d %d %d";
+static const char long_spc561[] = "The %dth element of a range array starts at %d but must be nonnegative and less than %d";
+static const char short_spc562[] = "**rank %d %d";
+static const char long_spc562[] = "Invalid rank has value %d but must be nonnegative and less than %d";
+static const char short_spc563[] = "**rankarray %d %d %d";
+static const char long_spc563[] = "Invalid rank in rank array at index %d; value is %d but must be in the range 0 to %d";
+static const char short_spc564[] = "**rankdup %d %d %d";
+static const char long_spc564[] = "Duplicate ranks in rank array at index %d, has value %d which is also the value at index %d";
+static const char short_spc565[] = "**ranklocal %d %d";
+static const char long_spc565[] = "Error specifying local_leader; rank given was %d but must be in the range 0 to %d";
+static const char short_spc566[] = "**rankremote %d %d";
+static const char long_spc566[] = "Error specifying remote_leader; rank given was %d but must be in the range 0 to %d";
+static const char short_spc567[] = "**read %d %s";
+static const char long_spc567[] = "read from socket failed - nread=%d %s";
+static const char short_spc568[] = "**read %s";
+static const char long_spc568[] = "read from socket failed - %s";
+static const char short_spc569[] = "**readv %d %s";
+static const char long_spc569[] = "readv failed - errno %d (%s)";
+static const char short_spc570[] = "**recv_status %d";
+static const char long_spc570[] = "receive status failed %d";
+static const char short_spc571[] = "**request %d";
+static const char long_spc571[] = "Invalid MPI_Request in array element %d (from 0)";
+static const char short_spc572[] = "**request_invalid_kind %d";
+static const char long_spc572[] = "The supplied request was invalid (kind=%d)";
+static const char short_spc573[] = "**request_invalid_kind %d %d";
+static const char long_spc573[] = "The supplied request in array element %d was invalid (kind=%d)";
+static const char short_spc574[] = "**rmasize %d";
+static const char long_spc574[] = "Invalid size argument in RMA call (value is %d)";
+static const char short_spc575[] = "**rmatypenotatomic %D";
+static const char long_spc575[] = " Datatype (%D) not permitted for atomic operations";
+static const char short_spc576[] = "**root %d";
+static const char long_spc576[] = "Invalid root (value given was %d)";
+static const char short_spc577[] = "**rsendnomatch %d %d";
+static const char long_spc577[] = "Ready send from source %d and with tag %d had no matching receive";
+static const char short_spc578[] = "**select %s %d";
+static const char long_spc578[] = " select of socket fds failed, %s (errno %d)";
+static const char short_spc579[] = "**sem_destroy %s";
+static const char long_spc579[] = "sem_destroy() failed %s";
+static const char short_spc580[] = "**sem_init %s";
+static const char long_spc580[] = "sem_init() failed %s";
+static const char short_spc581[] = "**sem_post %s";
+static const char long_spc581[] = "sem_post() failed %s";
+static const char short_spc582[] = "**sem_wait %s";
+static const char long_spc582[] = "sem_wait() failed %s";
+static const char short_spc583[] = "**setsockopt %s %d";
+static const char long_spc583[] = "setsockopt failed, %s (errno %d)";
+static const char short_spc584[] = "**shm_open %s %d";
+static const char long_spc584[] = "unable to open shared memory object %s (errno %d)";
+static const char short_spc585[] = "**signal %s";
+static const char long_spc585[] = "signal() failed: %s";
+static const char short_spc586[] = "**snprintf %d";
+static const char long_spc586[] = "snprintf returned %d";
+static const char short_spc587[] = "**sock_accept %s";
+static const char long_spc587[] = "accept of socket fd failed - %s";
+static const char short_spc588[] = "**sock_accept %s %d";
+static const char long_spc588[] = "accept failed, %s (errno %d) ";
+static const char short_spc589[] = "**sock_close %s %d";
+static const char long_spc589[] = " close of socket failed, %s (errno %d)";
+static const char short_spc590[] = "**sock_connect %d %s";
+static const char long_spc590[] = "connect failed - %s (errno %d)";
+static const char short_spc591[] = "**sock_connect %s %d";
+static const char long_spc591[] = "connect failed - %s (errno %d)";
+static const char short_spc592[] = "**sock_create %s %d";
+static const char long_spc592[] = "unable to create a socket, %s (errno %d)";
+static const char short_spc593[] = "**sock_gethost %s %d";
+static const char long_spc593[] = "gethostname failed, %s (errno %d)";
+static const char short_spc594[] = "**sock_read %s %d";
+static const char long_spc594[] = "read from socket failed, %s (errno %d)";
+static const char short_spc595[] = "**sock_write %s %d";
+static const char long_spc595[] = " Unable to write to a socket, %s (errno %d)";
+static const char short_spc596[] = "**sock|badiovn %d %d %d";
+static const char long_spc596[] = "size of iov is invalid (set=%d,sock=%d,iov_n=%d)";
+static const char short_spc597[] = "**sock|badlen %d %d %d %d";
+static const char long_spc597[] = "bad length parameter(s) (set=%d,sock=%d,min=%d,max=%d)";
+static const char short_spc598[] = "**sock|badport %d";
+static const char long_spc598[] = "port number is out of range (sock=%d)";
+static const char short_spc599[] = "**sock|close_cancel %d %d";
+static const char long_spc599[] = "operation cancelled because sock was closed locally (set=%d,sock=%d)";
+static const char short_spc600[] = "**sock|closing %d %d";
+static const char long_spc600[] = "sock is in the process of being closed locally (set=%d,sock=%d)";
+static const char short_spc601[] = "**sock|closing_already %d %d";
+static const char long_spc601[] = "a close operation is already post (set=%d,sock=%d)";
+static const char short_spc602[] = "**sock|connclosed %d %d";
+static const char long_spc602[] = "connection closed by peer (set=%d,sock=%d)";
+static const char short_spc603[] = "**sock|listener_bad_sock %d %d";
+static const char long_spc603[] = "supplied sock is not a listener (set=%d,sock=%d)";
+static const char short_spc604[] = "**sock|listener_bad_state %d %d %d";
+static const char long_spc604[] = "supplied listener sock is in a bad state (set=%d,sock=%d,state=%d)";
+static const char short_spc605[] = "**sock|listener_read %d %d";
+static const char long_spc605[] = "read operation not allowed on a listener (set=%d,sock=%d)";
+static const char short_spc606[] = "**sock|listener_write %d %d";
+static const char long_spc606[] = "write operation not allowed on a listener (set=%d,sock=%d)";
+static const char short_spc607[] = "**sock|notconnected %d %d";
+static const char long_spc607[] = "sock is not connected (set=%d,sock=%d)";
+static const char short_spc608[] = "**sock|osnomem %s %d %d";
+static const char long_spc608[] = "operating system routine %s failed due to lack of memory (set=%d,sock=%d)";
+static const char short_spc609[] = "**sock|poll|accept %d %s";
+static const char long_spc609[] = "accept failed to acquire a new socket (errno=%d:%s)";
+static const char short_spc610[] = "**sock|poll|badbuf %d %d %d %s";
+static const char long_spc610[] = "the supplied buffer contains invalid memory (set=%d,sock=%d,errno=%d:%s)";
+static const char short_spc611[] = "**sock|poll|badhandle %d %d %d";
+static const char long_spc611[] = "sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d)";
+static const char short_spc612[] = "**sock|poll|badhandle %d %d %d %d";
+static const char long_spc612[] = "sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d:%d)";
+static const char short_spc613[] = "**sock|poll|bind %d %d %s";
+static const char long_spc613[] = "unable to bind socket to port (port=%d,errno=%d:%s)";
+static const char short_spc614[] = "**sock|poll|connclosed %d %d %d %s";
+static const char long_spc614[] = "connection closed by peer (set=%d,sock=%d,errno=%d:%s)";
+static const char short_spc615[] = "**sock|poll|connfailed %d %d %d %s";
+static const char long_spc615[] = "connection failure (set=%d,sock=%d,errno=%d:%s)";
+static const char short_spc616[] = "**sock|poll|connrefused %d %d %s";
+static const char long_spc616[] = "connection refused (set=%d,sock=%d,host=%s)";
+static const char short_spc617[] = "**sock|poll|eqfail %d %d %d";
+static const char long_spc617[] = "fatal error: failed to enqueue an event; event was lost (set=%d,sock=%d,op=%d)";
+static const char short_spc618[] = "**sock|poll|getport %d %s";
+static const char long_spc618[] = "failed to obtain port number of listener (errno=%d:%s)";
+static const char short_spc619[] = "**sock|poll|listen %d %s";
+static const char long_spc619[] = "listen() failed (errno=%d:%s)";
+static const char short_spc620[] = "**sock|poll|nodelay %d %s";
+static const char long_spc620[] = "unable to set TCP no delay attribute on socket (errno=%d:%s)";
+static const char short_spc621[] = "**sock|poll|nonblock %d %s";
+static const char long_spc621[] = "unable to set socket to nonblocking (errno=%d:%s)";
+static const char short_spc622[] = "**sock|poll|oserror %d %d %d %s";
+static const char long_spc622[] = "unexpected operating system error (set=%d,sock=%d,errno=%d:%s)";
+static const char short_spc623[] = "**sock|poll|oserror %d %s";
+static const char long_spc623[] = "unexpected operating system error (errno=%d:%s)";
+static const char short_spc624[] = "**sock|poll|oserror %s %d %d %d %s";
+static const char long_spc624[] = "unpected operating system error from %s (set=%d,sock=%d,errno=%d:%s)";
+static const char short_spc625[] = "**sock|poll|osnomem %d %d %d %s";
+static const char long_spc625[] = "operating system routine failed due to lack of memory (set=%d,sock=%d,errno=%d:%s)";
+static const char short_spc626[] = "**sock|poll|pipe %d %s";
+static const char long_spc626[] = "unable to allocate pipe to wakeup a blocking poll() (errno=%d:%s)";
+static const char short_spc627[] = "**sock|poll|pipenonblock %d %s";
+static const char long_spc627[] = "unable to set wakeup pipe to nonblocking (errno=%d:%s)";
+static const char short_spc628[] = "**sock|poll|reuseaddr %d %s";
+static const char long_spc628[] = "unable to set reuseaddr attribute on socket (errno=%d:%s)";
+static const char short_spc629[] = "**sock|poll|setrcvbufsz %d %d %s";
+static const char long_spc629[] = " unable to set the receive socket buffer size (size=%d,errno=%d:%s)";
+static const char short_spc630[] = "**sock|poll|setsndbufsz %d %d %s";
+static const char long_spc630[] = " unable to set the send socket buffer size (size=%d,errno=%d:%s)";
+static const char short_spc631[] = "**sock|poll|socket %d %s";
+static const char long_spc631[] = "unable to obtain new socket (errno=%d:%s)";
+static const char short_spc632[] = "**sock|poll|unhandledstate %d";
+static const char long_spc632[] = "encountered an unexpected state (%d)";
+static const char short_spc633[] = "**sock|poll|unhandledtype %d";
+static const char long_spc633[] = "encountered an unexpected sock type (%d)";
+static const char short_spc634[] = "**sock|reads %d %d";
+static const char long_spc634[] = "attempt to perform multiple simultaneous reads (set=%d,sock=%d)";
+static const char short_spc635[] = "**sock|writes %d %d";
+static const char long_spc635[] = "attempt to perform multiple simultaneous writes (set=%d,sock=%d)";
+static const char short_spc636[] = "**stride %d %d %d";
+static const char long_spc636[] = "Range (start = %d, end = %d, stride = %d) does not terminate";
+static const char short_spc637[] = "**subarrayoflow %L";
+static const char long_spc637[] = "Total size of array_of_sizes[] is %L which requires the MPI implementation to use a 64-bit MPI_Aint";
+static const char short_spc638[] = "**tag %d";
+static const char long_spc638[] = "Invalid tag, value is %d";
+static const char short_spc639[] = "**tempnam %d %s";
+static const char long_spc639[] = "tempnam failed - errno %d (%s)";
+static const char short_spc640[] = "**toomanycomm %d %d %d";
+static const char long_spc640[] = "Too many communicators (%d/%d free on this process; ignore_id=%d)";
+static const char short_spc641[] = "**toomanycommfrag %d %d %d";
+static const char long_spc641[] = " Cannot allocate context ID because of fragmentation (%d/%d free on this process; ignore_id=%d)";
+static const char short_spc642[] = "**topotoolarge %d %d";
+static const char long_spc642[] = "Topology size %d is larger than communicator size (%d)";
+static const char short_spc643[] = "**truncate %d %d";
+static const char long_spc643[] = "Message truncated; %d bytes received but buffer size is %d";
+static const char short_spc644[] = "**truncate %d %d %d %d";
+static const char long_spc644[] = "Message from rank %d and tag %d truncated; %d bytes received but buffer size is %d";
+static const char short_spc645[] = "**typeinitbadmem %d";
+static const char long_spc645[] = "%dth builtin datatype handle references invalid memory";
+static const char short_spc646[] = "**typeinitfail %d";
+static const char long_spc646[] = "Did not initialize name for all of the predefined datatypes (only did first %d)";
+static const char short_spc647[] = "**typematchsize %s %d";
+static const char long_spc647[] = "No MPI datatype available for typeclass %s and size %d";
+static const char short_spc648[] = "**typenamelen %d";
+static const char long_spc648[] = "Specified datatype name is too long (%d characters)";
+static const char short_spc649[] = "**ucx_nm_pmi_error %s %d %s %s";
+static const char long_spc649[] = " string error in UCX netmod(%s %d %s %s)";
+static const char short_spc650[] = "**ucx_nm_rq_error %s %d %s %s";
+static const char long_spc650[] = " returned failed request in UCX netmod(%s %d %s %s)";
+static const char short_spc651[] = "**ucx_nm_status %s %d %s %s";
+static const char long_spc651[] = " ucx function returned with failed status(%s %d %s %s)";
+static const char short_spc652[] = "**ucx_nm_str_error %s %d %s %s";
+static const char long_spc652[] = " string error in UCX netmod(%s %d %s %s)";
+static const char short_spc653[] = "**unknowngpid %d %d";
+static const char long_spc653[] = "Internal MPI error: Unknown gpid (%d)%d";
+static const char short_spc654[] = "**usercancel %d";
+static const char long_spc654[] = "user request cancel function returned error code %d";
+static const char short_spc655[] = "**usercopy %d";
+static const char long_spc655[] = "user copy function returned error code %d";
+static const char short_spc656[] = "**userdel %d";
+static const char long_spc656[] = "user delete function returned error code %d";
+static const char short_spc657[] = "**userfree %d";
+static const char long_spc657[] = "user request free function returned error code %d";
+static const char short_spc658[] = "**userquery %d";
+static const char long_spc658[] = "user request query function returned error code %d";
+static const char short_spc659[] = "**vmsplice %d %s";
+static const char long_spc659[] = "vmsplice failed - errno %d (%s)";
+static const char short_spc660[] = "**windows_mutex %s";
+static const char long_spc660[] = "Windows mutex routine failed (%s)";
+static const char short_spc661[] = "**winflavor %s";
+static const char long_spc661[] = " Window flavor is not compatible with the given operation (expected %s)";
+static const char short_spc662[] = "**write %s";
+static const char long_spc662[] = "write to socket failed - %s";
+static const char short_spc663[] = "**writev %s";
+static const char long_spc663[] = "writev to socket failed - %s";
+static const char short_spc664[] = "**wsacleanup %s %d";
+static const char long_spc664[] = " WSACleanup failed, %s (errno = %d)";
+static const char short_spc665[] = "**wsastartup %s %d";
+static const char long_spc665[] = " WSAStartup failed, %s (errno = %d)";
-static const int specific_msgs_len = 633;
+static const int specific_msgs_len = 666;
static const msgpair specific_err_msgs[] = {
{ 0xacebad03, short_spc0, long_spc0, 0xcb0bfa11 },
{ 0xacebad03, short_spc1, long_spc1, 0xcb0bfa11 },
@@ -4668,18 +4806,51 @@ static const msgpair specific_err_msgs[] = {
{ 0xacebad03, short_spc629, long_spc629, 0xcb0bfa11 },
{ 0xacebad03, short_spc630, long_spc630, 0xcb0bfa11 },
{ 0xacebad03, short_spc631, long_spc631, 0xcb0bfa11 },
-{ 0xacebad03, short_spc632, long_spc632, 0xcb0bfa11 }
+{ 0xacebad03, short_spc632, long_spc632, 0xcb0bfa11 },
+{ 0xacebad03, short_spc633, long_spc633, 0xcb0bfa11 },
+{ 0xacebad03, short_spc634, long_spc634, 0xcb0bfa11 },
+{ 0xacebad03, short_spc635, long_spc635, 0xcb0bfa11 },
+{ 0xacebad03, short_spc636, long_spc636, 0xcb0bfa11 },
+{ 0xacebad03, short_spc637, long_spc637, 0xcb0bfa11 },
+{ 0xacebad03, short_spc638, long_spc638, 0xcb0bfa11 },
+{ 0xacebad03, short_spc639, long_spc639, 0xcb0bfa11 },
+{ 0xacebad03, short_spc640, long_spc640, 0xcb0bfa11 },
+{ 0xacebad03, short_spc641, long_spc641, 0xcb0bfa11 },
+{ 0xacebad03, short_spc642, long_spc642, 0xcb0bfa11 },
+{ 0xacebad03, short_spc643, long_spc643, 0xcb0bfa11 },
+{ 0xacebad03, short_spc644, long_spc644, 0xcb0bfa11 },
+{ 0xacebad03, short_spc645, long_spc645, 0xcb0bfa11 },
+{ 0xacebad03, short_spc646, long_spc646, 0xcb0bfa11 },
+{ 0xacebad03, short_spc647, long_spc647, 0xcb0bfa11 },
+{ 0xacebad03, short_spc648, long_spc648, 0xcb0bfa11 },
+{ 0xacebad03, short_spc649, long_spc649, 0xcb0bfa11 },
+{ 0xacebad03, short_spc650, long_spc650, 0xcb0bfa11 },
+{ 0xacebad03, short_spc651, long_spc651, 0xcb0bfa11 },
+{ 0xacebad03, short_spc652, long_spc652, 0xcb0bfa11 },
+{ 0xacebad03, short_spc653, long_spc653, 0xcb0bfa11 },
+{ 0xacebad03, short_spc654, long_spc654, 0xcb0bfa11 },
+{ 0xacebad03, short_spc655, long_spc655, 0xcb0bfa11 },
+{ 0xacebad03, short_spc656, long_spc656, 0xcb0bfa11 },
+{ 0xacebad03, short_spc657, long_spc657, 0xcb0bfa11 },
+{ 0xacebad03, short_spc658, long_spc658, 0xcb0bfa11 },
+{ 0xacebad03, short_spc659, long_spc659, 0xcb0bfa11 },
+{ 0xacebad03, short_spc660, long_spc660, 0xcb0bfa11 },
+{ 0xacebad03, short_spc661, long_spc661, 0xcb0bfa11 },
+{ 0xacebad03, short_spc662, long_spc662, 0xcb0bfa11 },
+{ 0xacebad03, short_spc663, long_spc663, 0xcb0bfa11 },
+{ 0xacebad03, short_spc664, long_spc664, 0xcb0bfa11 },
+{ 0xacebad03, short_spc665, long_spc665, 0xcb0bfa11 }
};
#endif
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_CLASS
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__CLASS
#define MPIR_MAX_ERROR_CLASS_INDEX 60
static int class_to_index[] = {
-853,52,126,156,854,115,748,774,204,681,
-861,150,16,871,863,689,234,233,232,178,
-180,181,188,124,141,186,187,179,215,217,
-224,222,241,641,15,657,192,191,713,194,
-195,783,849,140,193,878,42,281,275,766,
-772,771,767,32,716,769,765,770,768,764
+874,47,124,152,875,113,778,803,198,713,
+882,146,15,896,884,721,228,227,226,173,
+175,176,183,122,139,181,182,174,209,211,
+218,216,235,631,14,647,187,186,744,189,
+190,812,870,138,188,903,37,274,268,795,
+801,800,796,31,746,798,794,799,797,793
};
#endif
diff --git a/src/mpi/errhan/dynerrutil.c b/src/mpi/errhan/dynerrutil.c
index 0fb81cf..271b7e8 100644
--- a/src/mpi/errhan/dynerrutil.c
+++ b/src/mpi/errhan/dynerrutil.c
@@ -139,7 +139,7 @@ int MPIR_Err_set_msg( int code, const char *msg_string )
/* --------------------------------------------------------------------- */
msg_len = strlen( msg_string );
- str = (char *)MPIU_Malloc( msg_len + 1 );
+ str = (char *)MPL_malloc( msg_len + 1 );
/* --BEGIN ERROR HANDLING-- */
if (!str) {
return MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
@@ -150,29 +150,29 @@ int MPIR_Err_set_msg( int code, const char *msg_string )
/* --END ERROR HANDLING-- */
/* --------------------------------------------------------------------- */
- MPIU_Strncpy( str, msg_string, msg_len + 1 );
+ MPL_strncpy( str, msg_string, msg_len + 1 );
if (errcode) {
if (errcode < first_free_code) {
if (user_code_msgs[errcode]) {
- MPIU_Free( (void*)(user_code_msgs[errcode]) );
+ MPL_free( (void*)(user_code_msgs[errcode]) );
}
user_code_msgs[errcode] = (const char *)str;
}
else {
/* FIXME : Unallocated error code? */
- MPIU_Free( str );
+ MPL_free( str );
}
}
else {
if (errclass < first_free_class) {
if (user_class_msgs[errclass]) {
- MPIU_Free( (void*)(user_class_msgs[errclass]) );
+ MPL_free( (void*)(user_class_msgs[errclass]) );
}
user_class_msgs[errclass] = (const char *)str;
}
else {
/* FIXME : Unallocated error code? */
- MPIU_Free( str );
+ MPL_free( str );
}
}
@@ -316,18 +316,18 @@ static int MPIR_Dynerrcodes_finalize( void *p ATTRIBUTE((unused)) )
{
int i;
- MPIU_UNREFERENCED_ARG(p);
+ MPL_UNREFERENCED_ARG(p);
if (not_initialized == 0) {
for (i=0; i<first_free_class; i++) {
if (user_class_msgs[i])
- MPIU_Free((char *) user_class_msgs[i]);
+ MPL_free((char *) user_class_msgs[i]);
}
for (i=0; i<first_free_code; i++) {
if (user_code_msgs[i])
- MPIU_Free((char *) user_code_msgs[i]);
+ MPL_free((char *) user_code_msgs[i]);
}
}
return 0;
diff --git a/src/mpi/errhan/errcodes.h b/src/mpi/errhan/errcodes.h
index cad75f8..cbbc5d0 100644
--- a/src/mpi/errhan/errcodes.h
+++ b/src/mpi/errhan/errcodes.h
@@ -43,7 +43,7 @@ int MPIR_Err_add_code( int );
and the value of the attribute MPI_LASTUSEDCODE will fail).
*/
-/* the error class bits are defined in mpierror.h, are 0x0000007f */
+/* the error class bits are defined in mpir_err.h, are 0x0000007f */
#define ERROR_CLASS_MASK MPIR_ERR_CLASS_MASK
#define ERROR_CLASS_SIZE MPIR_ERR_CLASS_SIZE
#define ERROR_DYN_MASK 0x40000000
diff --git a/src/mpi/errhan/errhandler_create.c b/src/mpi/errhan/errhandler_create.c
index cfde34d..3a33582 100644
--- a/src/mpi/errhan/errhandler_create.c
+++ b/src/mpi/errhan/errhandler_create.c
@@ -65,12 +65,12 @@ int MPI_Errhandler_create(MPI_Handler_function *function,
{
static const char FCNAME[] = "MPI_Errhandler_create";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_CREATE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ERRHANDLER_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ERRHANDLER_CREATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -91,7 +91,7 @@ int MPI_Errhandler_create(MPI_Handler_function *function,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ERRHANDLER_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ERRHANDLER_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/errhandler_free.c b/src/mpi/errhan/errhandler_free.c
index 78af5a2..d6a5f94 100644
--- a/src/mpi/errhan/errhandler_free.c
+++ b/src/mpi/errhan/errhandler_free.c
@@ -51,14 +51,14 @@ int MPI_Errhandler_free(MPI_Errhandler *errhandler)
static const char FCNAME[] = "MPI_Errhandler_free";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_Errhandler *errhan_ptr = NULL;
+ MPIR_Errhandler *errhan_ptr = NULL;
int in_use;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ERRHANDLER_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ERRHANDLER_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,14 +73,14 @@ int MPI_Errhandler_free(MPI_Errhandler *errhandler)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Errhandler_get_ptr( *errhandler, errhan_ptr );
+ MPIR_Errhandler_get_ptr( *errhandler, errhan_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Errhandler_valid_ptr( errhan_ptr, mpi_errno );
+ MPIR_Errhandler_valid_ptr( errhan_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -91,7 +91,7 @@ int MPI_Errhandler_free(MPI_Errhandler *errhandler)
MPIR_Errhandler_release_ref( errhan_ptr,&in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Errhandler_mem, errhan_ptr );
+ MPIR_Handle_obj_free( &MPIR_Errhandler_mem, errhan_ptr );
}
*errhandler = MPI_ERRHANDLER_NULL;
@@ -100,7 +100,7 @@ int MPI_Errhandler_free(MPI_Errhandler *errhandler)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ERRHANDLER_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ERRHANDLER_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/errhandler_get.c b/src/mpi/errhan/errhandler_get.c
index f9c8a76..fee11fa 100644
--- a/src/mpi/errhan/errhandler_get.c
+++ b/src/mpi/errhan/errhandler_get.c
@@ -64,14 +64,14 @@ by 'MPI_Comm_group' is no longer needed.
int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Errhandler *errhandler_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_GET);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Errhandler *errhandler_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ERRHANDLER_GET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ERRHANDLER_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -85,7 +85,7 @@ int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -93,7 +93,7 @@ int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr; if comm_ptr is not value, it will be reset to null */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL(errhandler, "errhandler", mpi_errno);
}
@@ -114,7 +114,7 @@ int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
# ifdef HAVE_ERROR_CHECKING
fn_exit:
# endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ERRHANDLER_GET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ERRHANDLER_GET);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/errhandler_set.c b/src/mpi/errhan/errhandler_set.c
index 33f6b3c..eb777ff 100644
--- a/src/mpi/errhan/errhandler_set.c
+++ b/src/mpi/errhan/errhandler_set.c
@@ -55,14 +55,14 @@ The replacement for this routine is 'MPI_Comm_set_errhandler'.
int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Errhandler *errhan_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_SET);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Errhandler *errhan_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ERRHANDLER_SET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ERRHANDLER_SET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ERRHANDLER_SET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -76,8 +76,8 @@ int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Errhandler_get_ptr( errhandler, errhan_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Errhandler_get_ptr( errhandler, errhan_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -85,12 +85,12 @@ int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr; if comm_ptr is not value, it will be reset to null */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ERRHANDLER(errhandler, mpi_errno);
if (HANDLE_GET_KIND(errhandler) != HANDLE_KIND_BUILTIN) {
- MPID_Errhandler_valid_ptr( errhan_ptr, mpi_errno );
+ MPIR_Errhandler_valid_ptr( errhan_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
}
@@ -107,7 +107,7 @@ int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
# ifdef HAVE_ERROR_CHECKING
fn_exit:
# endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ERRHANDLER_SET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ERRHANDLER_SET);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/errnames.txt b/src/mpi/errhan/errnames.txt
index 1f60dd1..d06085e 100644
--- a/src/mpi/errhan/errnames.txt
+++ b/src/mpi/errhan/errnames.txt
@@ -560,7 +560,7 @@ is too big (> MPIU_SHMW_GHND_SZ)
#
**MPIDI_CH3I_SHM_Attach_to_mem:MPIDI_CH3I_SHM_Attach_to_mem failed
**MPIDI_CH3I_SHM_Attach_to_mem %d:MPIDI_CH3I_SHM_Attach_to_mem failed, error %d
-**MPIU_Strdup:MPIU_Strdup failed
+**MPL_strdup:MPL_strdup failed
**business_card:Invalid business card
**business_card %s:Invalid business card (%s)
**OpenProcess:OpenProcess failed
@@ -839,8 +839,6 @@ is too big (> MPIU_SHMW_GHND_SZ)
**mktemp_s %s:mktemp_s failed, %s
**lseek:lseek failed
**lseek %s:lseek failed - %s
-**fdopen:fdopen failed
-**fdopen %s:fdopen failed %s
**tmpnam:tmpnam failed
**tmpnam %s:tmpnam failed %s
**fopen:fopen failed
@@ -1202,7 +1200,7 @@ is too big (> MPIU_SHMW_GHND_SZ)
**mpi_comm_spawn_multiple:MPI_Comm_spawn_multiple failed
**mpi_comm_spawn_multiple %d %p %p %p %p %d %C %p %p:MPI_Comm_spawn_multiple(count=%d, cmds=%p, argvs=%p, maxprocs=%p, infos=%p, root=%d, %C, intercomm=%p, errors=%p) failed
**mpi_lookup_name:MPI_Lookup_name failed
-**mpi_lookup_name %s %I %p:MPI_Lookup_name(service=\"%s\", %I, port=%p) failed
+**mpi_lookup_name %s %I %s:MPI_Lookup_name(service=\"%s\", %I, port=%s) failed
**mpi_open_port:MPI_Open_port failed
**mpi_open_port %I %p:MPI_Open_port(%I, port=%p) failed
**mpi_publish_name:MPI_Publish_name failed
@@ -1501,8 +1499,8 @@ is too big (> MPIU_SHMW_GHND_SZ)
**mpir_comm_get_attr %C %d %p %p:MPIR_Comm_get_attr(%C, comm_keyval=%d, attribute_val=%p, flag=%p) failed
**mpir_type_get_attr:MPIR_Type_get_attr failed
**mpir_type_get_attr %D %d %p %p:MPIR_Type_get_attr(%D, type_keyval=%d, attribute_val=%p, flag=%p) failed
-**mpir_wingetattr:MPIR_WinGetAttr failed
-**mpir_wingetattr %W %d %p %p:MPIR_WinGetAttr(%W, win_keyval=%d, attribute_val=%p, flag=%p) failed
+**mpir_wingetattr:MPII_Win_get_attr failed
+**mpir_wingetattr %W %d %p %p:MPII_Win_get_attr(%W, win_keyval=%d, attribute_val=%p, flag=%p) failed
## MPI-3 Mprobe routines
**mpi_improbe: MPI_Improbe failed
diff --git a/src/mpi/errhan/error_class.c b/src/mpi/errhan/error_class.c
index 44b309b..06024c0 100644
--- a/src/mpi/errhan/error_class.c
+++ b/src/mpi/errhan/error_class.c
@@ -53,11 +53,11 @@ int MPI_Error_class(int errorcode, int *errorclass)
static const char FCNAME[] = "MPI_Error_class";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ERROR_CLASS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ERROR_CLASS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ERROR_CLASS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ERROR_CLASS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPI_Error_class(int errorcode, int *errorclass)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ERROR_CLASS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ERROR_CLASS);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/errhan/error_string.c b/src/mpi/errhan/error_string.c
index e967c66..5f6f9c5 100644
--- a/src/mpi/errhan/error_string.c
+++ b/src/mpi/errhan/error_string.c
@@ -59,11 +59,11 @@ int MPI_Error_string(int errorcode, char *string, int *resultlen)
static const char FCNAME[] = "MPI_Error_string";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ERROR_STRING);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ERROR_STRING);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ERROR_STRING);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ERROR_STRING);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,7 +87,7 @@ int MPI_Error_string(int errorcode, char *string, int *resultlen)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ERROR_STRING);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ERROR_STRING);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/errhan/errutil.c b/src/mpi/errhan/errutil.c
index 83f107c..fa0f676 100644
--- a/src/mpi/errhan/errutil.c
+++ b/src/mpi/errhan/errutil.c
@@ -11,7 +11,7 @@
MPIR_Err_create_code */
#include <stdarg.h>
/* Define USE_ERR_CODE_VALIST to get the prototype for the valist version
- of MPIR_Err_create_code in mpierror.h (without this definition,
+ of MPIR_Err_create_code in mpir_err.h (without this definition,
the prototype is not included. The "valist" version of the function
is used in only a few places, here and potentially in ROMIO) */
#define USE_ERR_CODE_VALIST
@@ -70,7 +70,7 @@ cvars:
* This file contains several groups of routines user for error handling
* and reporting.
*
- * The first group provides memory for the MPID_Errhandler objects
+ * The first group provides memory for the MPIR_Errhandler objects
* and the routines to free and manipulate them
*
* The second group provides routines to call the appropriate error handler,
@@ -85,20 +85,20 @@ cvars:
* The third group of code handles the error messages. There are four
* options, controlled by the value of MPICH_ERROR_MSG_LEVEL.
*
- * MPICH_ERROR_MSG_NONE - No text messages at all
- * MPICH_ERROR_MSG_CLASS - Only messages for the MPI error classes
- * MPICH_ERROR_MSG_GENERIC - Only predefiend messages for the MPI error codes
- * MPICH_ERROR_MSG_ALL - Instance specific error messages (and error message
+ * MPICH_ERROR_MSG__NONE - No text messages at all
+ * MPICH_ERROR_MSG__CLASS - Only messages for the MPI error classes
+ * MPICH_ERROR_MSG__GENERIC - Only predefiend messages for the MPI error codes
+ * MPICH_ERROR_MSG__ALL - Instance specific error messages (and error message
* stack)
*
- * In only the latter (MPICH_ERROR_MSG_ALL) case are instance-specific
+ * In only the latter (MPICH_ERROR_MSG__ALL) case are instance-specific
* messages maintained (including the error message "stack" that you may
* see mentioned in various places. In the other cases, an error code
- * identifies a fixed message string (unless MPICH_ERROR_MSG_NONE,
+ * identifies a fixed message string (unless MPICH_ERROR_MSG__NONE,
* when there are no strings) from the "generic" strings defined in defmsg.h
*
* A major subgroup in this section is the code to handle the instance-specific
- * messages (MPICH_ERROR_MSG_ALL only).
+ * messages (MPICH_ERROR_MSG__ALL only).
*
* An MPI error code is made up of a number of fields (see errcodes.h)
* These ar
@@ -118,7 +118,7 @@ static int did_err_init = FALSE; /* helps us solve a bootstrapping problem */
static int checkValidErrcode( int, const char [], int * );
-#if MPICH_ERROR_MSG_LEVEL >= MPICH_ERROR_MSG_ALL
+#if MPICH_ERROR_MSG_LEVEL >= MPICH_ERROR_MSG__ALL
static int ErrGetInstanceString( int, char [], int );
static void MPIR_Err_stack_init( void );
static int checkForUserErrcode( int );
@@ -130,7 +130,7 @@ static int checkForUserErrcode( int );
/* ------------------------------------------------------------------------- */
-/* Provide the MPID_Errhandler space and the routines to free and set them
+/* Provide the MPIR_Errhandler space and the routines to free and set them
from C++ and Fortran */
/* ------------------------------------------------------------------------- */
/*
@@ -138,33 +138,33 @@ static int checkForUserErrcode( int );
* in MPICH
*/
-#ifndef MPID_ERRHANDLER_PREALLOC
-#define MPID_ERRHANDLER_PREALLOC 8
+#ifndef MPIR_ERRHANDLER_PREALLOC
+#define MPIR_ERRHANDLER_PREALLOC 8
#endif
/* Preallocated errorhandler objects */
-MPID_Errhandler MPID_Errhandler_builtin[3] = { {0} };
-MPID_Errhandler MPID_Errhandler_direct[MPID_ERRHANDLER_PREALLOC] =
+MPIR_Errhandler MPIR_Errhandler_builtin[3] = { {0} };
+MPIR_Errhandler MPIR_Errhandler_direct[MPIR_ERRHANDLER_PREALLOC] =
{ {0} };
-MPIU_Object_alloc_t MPID_Errhandler_mem = { 0, 0, 0, 0, MPID_ERRHANDLER,
- sizeof(MPID_Errhandler),
- MPID_Errhandler_direct,
- MPID_ERRHANDLER_PREALLOC, };
+MPIR_Object_alloc_t MPIR_Errhandler_mem = { 0, 0, 0, 0, MPIR_ERRHANDLER,
+ sizeof(MPIR_Errhandler),
+ MPIR_Errhandler_direct,
+ MPIR_ERRHANDLER_PREALLOC, };
-void MPID_Errhandler_free(MPID_Errhandler *errhan_ptr)
+void MPIR_Errhandler_free(MPIR_Errhandler *errhan_ptr)
{
- MPIU_Handle_obj_free(&MPID_Errhandler_mem, errhan_ptr);
+ MPIR_Handle_obj_free(&MPIR_Errhandler_mem, errhan_ptr);
}
void MPIR_Err_init( void )
{
/* these are "stub" objects, so the other fields (which are statically
* initialized to zero) don't really matter */
- MPID_Errhandler_builtin[0].handle = MPI_ERRORS_ARE_FATAL;
- MPID_Errhandler_builtin[1].handle = MPI_ERRORS_RETURN;
- MPID_Errhandler_builtin[2].handle = MPIR_ERRORS_THROW_EXCEPTIONS;
+ MPIR_Errhandler_builtin[0].handle = MPI_ERRORS_ARE_FATAL;
+ MPIR_Errhandler_builtin[1].handle = MPI_ERRORS_RETURN;
+ MPIR_Errhandler_builtin[2].handle = MPIR_ERRORS_THROW_EXCEPTIONS;
-# if MPICH_ERROR_MSG_LEVEL >= MPICH_ERROR_MSG_ALL
+# if MPICH_ERROR_MSG_LEVEL >= MPICH_ERROR_MSG__ALL
MPIR_Err_stack_init();
# endif
did_err_init = TRUE;
@@ -176,24 +176,24 @@ void MPIR_Err_init( void )
/* This routine is used to install a callback used by the C++ binding
to invoke the (C++) error handler. The callback routine is a C routine,
defined in the C++ binding. */
-void MPIR_Errhandler_set_cxx( MPI_Errhandler errhand, void (*errcall)(void) )
+void MPII_Errhandler_set_cxx( MPI_Errhandler errhand, void (*errcall)(void) )
{
- MPID_Errhandler *errhand_ptr;
+ MPIR_Errhandler *errhand_ptr;
- MPID_Errhandler_get_ptr( errhand, errhand_ptr );
- errhand_ptr->language = MPID_LANG_CXX;
+ MPIR_Errhandler_get_ptr( errhand, errhand_ptr );
+ errhand_ptr->language = MPIR_LANG__CXX;
MPIR_Process.cxx_call_errfn = (void (*)( int, int *, int *,
void (*)(void) ))errcall;
}
#endif /* HAVE_CXX_BINDING */
#if defined(HAVE_FORTRAN_BINDING) && !defined(HAVE_FINT_IS_INT)
-void MPIR_Errhandler_set_fc( MPI_Errhandler errhand )
+void MPII_Errhandler_set_fc( MPI_Errhandler errhand )
{
- MPID_Errhandler *errhand_ptr;
+ MPIR_Errhandler *errhand_ptr;
- MPID_Errhandler_get_ptr( errhand, errhand_ptr );
- errhand_ptr->language = MPID_LANG_FORTRAN;
+ MPIR_Errhandler_get_ptr( errhand, errhand_ptr );
+ errhand_ptr->language = MPIR_LANG__FORTRAN;
}
#endif
@@ -210,10 +210,10 @@ void MPIR_Errhandler_set_fc( MPI_Errhandler errhand )
/* --BEGIN ERROR HANDLING-- */
void MPIR_Err_preOrPostInit( void )
{
- if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_PRE_INIT) {
+ if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__PRE_INIT) {
MPL_error_printf("Attempting to use an MPI routine before initializing MPICH\n");
}
- else if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_POST_FINALIZED) {
+ else if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__POST_FINALIZED) {
MPL_error_printf("Attempting to use an MPI routine after finalizing MPICH\n");
}
else {
@@ -234,17 +234,17 @@ int MPIR_Err_is_fatal(int errcode)
* report an error. It is legitimate to pass NULL for comm_ptr in order to get
* the default (MPI_COMM_WORLD) error handling.
*/
-int MPIR_Err_return_comm( MPID_Comm *comm_ptr, const char fcname[],
+int MPIR_Err_return_comm( MPIR_Comm *comm_ptr, const char fcname[],
int errcode )
{
const int error_class = ERROR_GET_CLASS(errcode);
- MPID_Errhandler *errhandler = NULL;
+ MPIR_Errhandler *errhandler = NULL;
checkValidErrcode( error_class, fcname, &errcode );
/* --BEGIN ERROR HANDLING-- */
- if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_PRE_INIT ||
- OPA_load_int(&MPIR_Process.mpich_state) == MPICH_POST_FINALIZED)
+ if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__PRE_INIT ||
+ OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__POST_FINALIZED)
{
/* for whatever reason, we aren't initialized (perhaps error
during MPI_Init) */
@@ -253,7 +253,7 @@ int MPIR_Err_return_comm( MPID_Comm *comm_ptr, const char fcname[],
}
/* --END ERROR HANDLING-- */
- MPIU_DBG_MSG_FMT(ERRHAND, TERSE, (MPIU_DBG_FDEST, "MPIR_Err_return_comm(comm_ptr=%p, fcname=%s, errcode=%d)", comm_ptr, fcname, errcode));
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND, TERSE, (MPL_DBG_FDEST, "MPIR_Err_return_comm(comm_ptr=%p, fcname=%s, errcode=%d)", comm_ptr, fcname, errcode));
if (comm_ptr) {
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr));
@@ -279,7 +279,7 @@ int MPIR_Err_return_comm( MPID_Comm *comm_ptr, const char fcname[],
}
/* --END ERROR HANDLING-- */
- MPIU_Assert(comm_ptr != NULL);
+ MPIR_Assert(comm_ptr != NULL);
/* comm_ptr may have changed to comm_world. Keep this locked as long as we
* are using the errhandler to prevent it from disappearing out from under
@@ -306,12 +306,12 @@ int MPIR_Err_return_comm( MPID_Comm *comm_ptr, const char fcname[],
because MPICH-1 expected that */
switch (comm_ptr->errhandler->language)
{
- case MPID_LANG_C:
+ case MPIR_LANG__C:
(*comm_ptr->errhandler->errfn.C_Comm_Handler_function)(
&comm_ptr->handle, &errcode, 0 );
break;
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
(*MPIR_Process.cxx_call_errfn)( 0, &comm_ptr->handle, &errcode,
(void (*)(void))*comm_ptr->errhandler->errfn.C_Comm_Handler_function );
/* The C++ code throws an exception if the error handler
@@ -321,8 +321,8 @@ int MPIR_Err_return_comm( MPID_Comm *comm_ptr, const char fcname[],
break;
#endif /* CXX_BINDING */
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN90:
- case MPID_LANG_FORTRAN:
+ case MPIR_LANG__FORTRAN90:
+ case MPIR_LANG__FORTRAN:
{
/* If int and MPI_Fint aren't the same size, we need to
convert. As this is not performance critical, we
@@ -345,7 +345,7 @@ int MPIR_Err_return_comm( MPID_Comm *comm_ptr, const char fcname[],
/*
* MPI routines that detect errors on window objects use this to report errors
*/
-int MPIR_Err_return_win( MPID_Win *win_ptr, const char fcname[], int errcode )
+int MPIR_Err_return_win( MPIR_Win *win_ptr, const char fcname[], int errcode )
{
const int error_class = ERROR_GET_CLASS(errcode);
@@ -357,7 +357,7 @@ int MPIR_Err_return_win( MPID_Win *win_ptr, const char fcname[], int errcode )
checkValidErrcode( error_class, fcname, &errcode );
- MPIU_DBG_MSG_FMT(ERRHAND, TERSE, (MPIU_DBG_FDEST, "MPIR_Err_return_win(win_ptr=%p, fcname=%s, errcode=%d)", win_ptr, fcname, errcode));
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND, TERSE, (MPL_DBG_FDEST, "MPIR_Err_return_win(win_ptr=%p, fcname=%s, errcode=%d)", win_ptr, fcname, errcode));
/* --BEGIN ERROR HANDLING-- */
if (MPIR_Err_is_fatal(errcode) ||
@@ -384,12 +384,12 @@ int MPIR_Err_return_win( MPID_Win *win_ptr, const char fcname[], int errcode )
because MPICH-1 expected that */
switch (win_ptr->errhandler->language)
{
- case MPID_LANG_C:
+ case MPIR_LANG__C:
(*win_ptr->errhandler->errfn.C_Win_Handler_function)(
&win_ptr->handle, &errcode, 0 );
break;
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
(*MPIR_Process.cxx_call_errfn)( 2, &win_ptr->handle, &errcode,
(void (*)(void))*win_ptr->errhandler->errfn.C_Win_Handler_function );
/* The C++ code throws an exception if the error handler
@@ -399,8 +399,8 @@ int MPIR_Err_return_win( MPID_Win *win_ptr, const char fcname[], int errcode )
break;
#endif /* CXX_BINDING */
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN90:
- case MPID_LANG_FORTRAN:
+ case MPIR_LANG__FORTRAN90:
+ case MPIR_LANG__FORTRAN:
{
/* If int and MPI_Fint aren't the same size, we need to
convert. As this is not performance critical, we
@@ -431,7 +431,7 @@ static void CombineSpecificCodes( int, int, int );
static const char *get_class_msg( int );
/* --BEGIN ERROR HANDLING-- */
-void MPIR_Handle_fatal_error( MPID_Comm *comm_ptr,
+void MPIR_Handle_fatal_error( MPIR_Comm *comm_ptr,
const char fcname[], int errcode )
{
/* Define length of the the maximum error message line (or string with
@@ -557,7 +557,7 @@ void MPIR_Err_get_string( int errorcode, char * msg, int length,
/* The fn (fourth) argument was added improperly and is no longer
used. */
- MPIU_Assert( fn == NULL );
+ MPIR_Assert( fn == NULL );
/* There was code to set num_remaining to MPI_MAX_ERROR_STRING
if it was zero. But based on the usage of this routine,
@@ -587,7 +587,7 @@ void MPIR_Err_get_string( int errorcode, char * msg, int length,
if (!MPIR_Process.errcode_to_string) {
/* FIXME: not internationalized */
/* --BEGIN ERROR HANDLING-- */
- if (MPIU_Strncpy(msg, "Undefined dynamic error code",
+ if (MPL_strncpy(msg, "Undefined dynamic error code",
num_remaining))
{
msg[num_remaining - 1] = '\0';
@@ -596,7 +596,7 @@ void MPIR_Err_get_string( int errorcode, char * msg, int length,
}
else
{
- if (MPIU_Strncpy(msg, MPIR_Process.errcode_to_string( errorcode ),
+ if (MPL_strncpy(msg, MPIR_Process.errcode_to_string( errorcode ),
num_remaining))
{
msg[num_remaining - 1] = '\0';
@@ -606,7 +606,7 @@ void MPIR_Err_get_string( int errorcode, char * msg, int length,
else if ( (errorcode & ERROR_CLASS_MASK) == errorcode) {
error_class = MPIR_ERR_GET_CLASS(errorcode);
- if (MPIU_Strncpy(msg, get_class_msg( errorcode ), num_remaining))
+ if (MPL_strncpy(msg, get_class_msg( errorcode ), num_remaining))
{
msg[num_remaining - 1] = '\0';
}
@@ -618,7 +618,7 @@ void MPIR_Err_get_string( int errorcode, char * msg, int length,
message is supposed to be complete by itself. */
error_class = MPIR_ERR_GET_CLASS(errorcode);
- MPIU_Strncpy(msg, get_class_msg(error_class), num_remaining);
+ MPL_strncpy(msg, get_class_msg(error_class), num_remaining);
msg[num_remaining - 1] = '\0';
len = (int)strlen(msg);
msg += len;
@@ -628,10 +628,10 @@ void MPIR_Err_get_string( int errorcode, char * msg, int length,
/* FIXME: Replace with function to add instance string or
error code string */
-# if MPICH_ERROR_MSG_LEVEL >= MPICH_ERROR_MSG_ALL
+# if MPICH_ERROR_MSG_LEVEL >= MPICH_ERROR_MSG__ALL
if (ErrGetInstanceString( errorcode, msg, num_remaining ))
goto fn_exit;
-#elif MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_CLASS
+#elif MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__CLASS
{
int generic_idx;
@@ -650,13 +650,13 @@ fn_exit:
return;
}
-#if MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG_NONE
+#if MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG__NONE
/* No error message support */
int MPIR_Err_create_code( int lastcode, int fatal, const char fcname[],
int line, int error_class, const char generic_msg[],
const char specific_msg[], ... )
{
- MPIU_DBG_MSG_FMT(ERRHAND, TYPICAL, (MPIU_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND, TYPICAL, (MPL_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
fatal ? "Fatal " : "", lastcode, error_class, fcname, line, generic_msg));
return (lastcode == MPI_SUCCESS) ? error_class : lastcode;
}
@@ -678,7 +678,7 @@ static const char *get_class_msg( int error_class )
return "Error message texts are not available";
}
-#elif MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG_CLASS
+#elif MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG__CLASS
/* Only class error messages. Note this is nearly the same as
MPICH_ERROR_MSG_LEVEL == NONE, since the handling of error codes
is the same */
@@ -686,7 +686,7 @@ int MPIR_Err_create_code( int lastcode, int fatal, const char fcname[],
int line, int error_class, const char generic_msg[],
const char specific_msg[], ... )
{
- MPIU_DBG_MSG_FMT(ERRHAND, TYPICAL, (MPIU_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND, TYPICAL, (MPL_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
fatal ? "Fatal " : "", lastcode, error_class, fcname, line, generic_msg));
return (lastcode == MPI_SUCCESS) ? error_class : lastcode;
}
@@ -714,7 +714,7 @@ static const char *get_class_msg( int error_class )
}
}
-#elif MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG_GENERIC
+#elif MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG__GENERIC
#define NEEDS_FIND_GENERIC_MSG_INDEX
static int FindGenericMsgIndex( const char [] );
@@ -727,7 +727,7 @@ int MPIR_Err_create_code( int lastcode, int fatal, const char fcname[],
int rc;
va_list Argp;
va_start(Argp, specific_msg);
- MPIU_DBG_MSG_FMT(ERRHAND, TYPICAL, (MPIU_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND, TYPICAL, (MPL_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
fatal ? "Fatal " : "", lastcode, error_class, fcname, line, generic_msg));
rc = MPIR_Err_create_code_valist( lastcode, fatal, fcname, line,
error_class, generic_msg, specific_msg,
@@ -769,7 +769,7 @@ static const char *get_class_msg( int error_class )
}
}
-#elif MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG_ALL
+#elif MPICH_ERROR_MSG_LEVEL == MPICH_ERROR_MSG__ALL
/* General error message support, including the error message stack */
static int checkErrcodeIsValid( int );
@@ -840,18 +840,18 @@ static MPID_Thread_mutex_t error_ring_mutex;
do { \
int err; \
if (did_err_init) { \
- MPID_THREAD_CHECK_BEGIN \
+ MPIR_THREAD_CHECK_BEGIN; \
MPID_Thread_mutex_lock(&error_ring_mutex,&err); \
- MPID_THREAD_CHECK_END \
+ MPIR_THREAD_CHECK_END; \
} \
} while (0)
#define error_ring_mutex_unlock() \
do { \
int err; \
if (did_err_init) { \
- MPID_THREAD_CHECK_BEGIN \
+ MPIR_THREAD_CHECK_BEGIN; \
MPID_Thread_mutex_unlock(&error_ring_mutex,&err); \
- MPID_THREAD_CHECK_END \
+ MPIR_THREAD_CHECK_END; \
} \
} while (0)
#else
@@ -869,7 +869,7 @@ int MPIR_Err_create_code( int lastcode, int fatal, const char fcname[],
int rc;
va_list Argp;
va_start(Argp, specific_msg);
- MPIU_DBG_MSG_FMT(ERRHAND, TYPICAL, (MPIU_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND, TYPICAL, (MPL_DBG_FDEST, "%sError created: last=%#010x class=%#010x %s(%d) %s",
fatal ? "Fatal " : "", lastcode, error_class, fcname, line, generic_msg));
rc = MPIR_Err_create_code_valist( lastcode, fatal, fcname, line,
error_class, generic_msg, specific_msg,
@@ -1020,17 +1020,17 @@ int MPIR_Err_create_code_valist( int lastcode, int fatal, const char fcname[],
specific_fmt, Argp );
}
else {
- MPIU_Strncpy( ring_msg, user_ring_msg, MPIR_MAX_ERROR_LINE );
+ MPL_strncpy( ring_msg, user_ring_msg, MPIR_MAX_ERROR_LINE );
}
}
else if (generic_idx >= 0)
{
- MPIU_Strncpy( ring_msg,generic_err_msgs[generic_idx].long_name,
+ MPL_strncpy( ring_msg,generic_err_msgs[generic_idx].long_name,
MPIR_MAX_ERROR_LINE );
}
else
{
- MPIU_Strncpy( ring_msg, generic_msg, MPIR_MAX_ERROR_LINE );
+ MPL_strncpy( ring_msg, generic_msg, MPIR_MAX_ERROR_LINE );
}
ring_msg[MPIR_MAX_ERROR_LINE] = '\0';
@@ -1084,10 +1084,10 @@ int MPIR_Err_create_code_valist( int lastcode, int fatal, const char fcname[],
ErrorRing[ring_idx].location[0] = '\0';
}
{
- MPIU_DBG_MSG_FMT(ERRHAND,VERBOSE,(MPIU_DBG_FDEST, "New ErrorRing[%d]", ring_idx));
- MPIU_DBG_MSG_FMT(ERRHAND,VERBOSE,(MPIU_DBG_FDEST, " id = %#010x", ErrorRing[ring_idx].id));
- MPIU_DBG_MSG_FMT(ERRHAND,VERBOSE,(MPIU_DBG_FDEST, " prev_error = %#010x", ErrorRing[ring_idx].prev_error));
- MPIU_DBG_MSG_FMT(ERRHAND,VERBOSE,(MPIU_DBG_FDEST, " user=%d", ErrorRing[ring_idx].use_user_error_code));
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND,VERBOSE,(MPL_DBG_FDEST, "New ErrorRing[%d]", ring_idx));
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND,VERBOSE,(MPL_DBG_FDEST, " id = %#010x", ErrorRing[ring_idx].id));
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND,VERBOSE,(MPL_DBG_FDEST, " prev_error = %#010x", ErrorRing[ring_idx].prev_error));
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND,VERBOSE,(MPL_DBG_FDEST, " user=%d", ErrorRing[ring_idx].use_user_error_code));
}
}
error_ring_mutex_unlock();
@@ -1138,7 +1138,7 @@ static void MPIR_Err_print_stack_string(int errcode, char *str, int maxlen )
if (ErrorRing[ring_idx].id == ring_id) {
len = (int)strlen(ErrorRing[ring_idx].location);
- max_location_len = MPIR_MAX(max_location_len, len);
+ max_location_len = MPL_MAX(max_location_len, len);
tmp_errcode = ErrorRing[ring_idx].prev_error;
}
else
@@ -1381,13 +1381,13 @@ static const char * GetAssertString(int d)
if (d == 0)
{
- MPIU_Strncpy(str, "assert=0", ASSERT_STR_MAXLEN);
+ MPL_strncpy(str, "assert=0", ASSERT_STR_MAXLEN);
return str;
}
cur = str;
if (d & MPI_MODE_NOSTORE)
{
- MPIU_Strncpy(cur, "MPI_MODE_NOSTORE", len);
+ MPL_strncpy(cur, "MPI_MODE_NOSTORE", len);
n = strlen(cur);
cur += n;
len -= n;
@@ -1396,9 +1396,9 @@ static const char * GetAssertString(int d)
if (d & MPI_MODE_NOCHECK)
{
if (len < ASSERT_STR_MAXLEN)
- MPIU_Strncpy(cur, " | MPI_MODE_NOCHECK", len);
+ MPL_strncpy(cur, " | MPI_MODE_NOCHECK", len);
else
- MPIU_Strncpy(cur, "MPI_MODE_NOCHECK", len);
+ MPL_strncpy(cur, "MPI_MODE_NOCHECK", len);
n = strlen(cur);
cur += n;
len -= n;
@@ -1407,9 +1407,9 @@ static const char * GetAssertString(int d)
if (d & MPI_MODE_NOPUT)
{
if (len < ASSERT_STR_MAXLEN)
- MPIU_Strncpy(cur, " | MPI_MODE_NOPUT", len);
+ MPL_strncpy(cur, " | MPI_MODE_NOPUT", len);
else
- MPIU_Strncpy(cur, "MPI_MODE_NOPUT", len);
+ MPL_strncpy(cur, "MPI_MODE_NOPUT", len);
n = strlen(cur);
cur += n;
len -= n;
@@ -1418,9 +1418,9 @@ static const char * GetAssertString(int d)
if (d & MPI_MODE_NOPRECEDE)
{
if (len < ASSERT_STR_MAXLEN)
- MPIU_Strncpy(cur, " | MPI_MODE_NOPRECEDE", len);
+ MPL_strncpy(cur, " | MPI_MODE_NOPRECEDE", len);
else
- MPIU_Strncpy(cur, "MPI_MODE_NOPRECEDE", len);
+ MPL_strncpy(cur, "MPI_MODE_NOPRECEDE", len);
n = strlen(cur);
cur += n;
len -= n;
@@ -1429,9 +1429,9 @@ static const char * GetAssertString(int d)
if (d & MPI_MODE_NOSUCCEED)
{
if (len < ASSERT_STR_MAXLEN)
- MPIU_Strncpy(cur, " | MPI_MODE_NOSUCCEED", len);
+ MPL_strncpy(cur, " | MPI_MODE_NOSUCCEED", len);
else
- MPIU_Strncpy(cur, "MPI_MODE_NOSUCCEED", len);
+ MPL_strncpy(cur, "MPI_MODE_NOSUCCEED", len);
n = strlen(cur);
cur += n;
len -= n;
@@ -1453,7 +1453,7 @@ static const char * GetDTypeString(MPI_Datatype d)
int num_integers, num_addresses, num_datatypes, combiner = 0;
char *str;
- if (HANDLE_GET_MPI_KIND(d) != MPID_DATATYPE || \
+ if (HANDLE_GET_MPI_KIND(d) != MPIR_DATATYPE || \
(HANDLE_GET_KIND(d) == HANDLE_KIND_INVALID && \
d != MPI_DATATYPE_NULL))
return "INVALID DATATYPE";
@@ -1464,7 +1464,7 @@ static const char * GetDTypeString(MPI_Datatype d)
if (d == 0)
{
- MPIU_Strncpy(default_str, "dtype=0x0", sizeof(default_str));
+ MPL_strncpy(default_str, "dtype=0x0", sizeof(default_str));
return default_str;
}
@@ -1564,7 +1564,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
MPI_Count c;
void *p;
- fmt = MPIU_Strdup(fmt_orig);
+ fmt = MPL_strdup(fmt_orig);
if (fmt == NULL)
{
if (maxlen > 0 && str != NULL)
@@ -1582,7 +1582,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
}
if (len)
{
- MPIU_Memcpy(str, begin, len);
+ MPIR_Memcpy(str, begin, len);
str += len;
maxlen -= len;
}
@@ -1593,9 +1593,9 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
case (int)'s':
s = va_arg(list, char *);
if (s)
- MPIU_Strncpy(str, s, maxlen);
+ MPL_strncpy(str, s, maxlen);
else {
- MPIU_Strncpy(str, "<NULL>", maxlen );
+ MPL_strncpy(str, "<NULL>", maxlen );
}
break;
case (int)'d':
@@ -1619,13 +1619,13 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
switch (i)
{
case MPI_ANY_SOURCE:
- MPIU_Strncpy(str, "MPI_ANY_SOURCE", maxlen);
+ MPL_strncpy(str, "MPI_ANY_SOURCE", maxlen);
break;
case MPI_PROC_NULL:
- MPIU_Strncpy(str, "MPI_PROC_NULL", maxlen);
+ MPL_strncpy(str, "MPI_PROC_NULL", maxlen);
break;
case MPI_ROOT:
- MPIU_Strncpy(str, "MPI_ROOT", maxlen);
+ MPL_strncpy(str, "MPI_ROOT", maxlen);
break;
default:
MPL_snprintf(str, maxlen, "%d", i);
@@ -1637,7 +1637,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
switch (t)
{
case MPI_ANY_TAG:
- MPIU_Strncpy(str, "MPI_ANY_TAG", maxlen);
+ MPL_strncpy(str, "MPI_ANY_TAG", maxlen);
break;
default:
/* Note that MPI_UNDEFINED is not a valid tag value,
@@ -1654,7 +1654,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
where that is valid */
if (p == MPI_IN_PLACE)
{
- MPIU_Strncpy(str, "MPI_IN_PLACE", maxlen);
+ MPL_strncpy(str, "MPI_IN_PLACE", maxlen);
}
else
{
@@ -1670,13 +1670,13 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
switch (C)
{
case MPI_COMM_WORLD:
- MPIU_Strncpy(str, "MPI_COMM_WORLD", maxlen);
+ MPL_strncpy(str, "MPI_COMM_WORLD", maxlen);
break;
case MPI_COMM_SELF:
- MPIU_Strncpy(str, "MPI_COMM_SELF", maxlen);
+ MPL_strncpy(str, "MPI_COMM_SELF", maxlen);
break;
case MPI_COMM_NULL:
- MPIU_Strncpy(str, "MPI_COMM_NULL", maxlen);
+ MPL_strncpy(str, "MPI_COMM_NULL", maxlen);
break;
default:
MPL_snprintf(str, maxlen, "comm=0x%x", C);
@@ -1687,7 +1687,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
info = va_arg(list, MPI_Info);
if (info == MPI_INFO_NULL)
{
- MPIU_Strncpy(str, "MPI_INFO_NULL", maxlen);
+ MPL_strncpy(str, "MPI_INFO_NULL", maxlen);
}
else
{
@@ -1706,7 +1706,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
F = va_arg(list, MPI_File);
if (F == MPI_FILE_NULL)
{
- MPIU_Strncpy(str, "MPI_FILE_NULL", maxlen);
+ MPL_strncpy(str, "MPI_FILE_NULL", maxlen);
}
else
{
@@ -1719,7 +1719,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
W = va_arg(list, MPI_Win);
if (W == MPI_WIN_NULL)
{
- MPIU_Strncpy(str, "MPI_WIN_NULL", maxlen);
+ MPL_strncpy(str, "MPI_WIN_NULL", maxlen);
}
else
{
@@ -1734,7 +1734,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
G = va_arg(list, MPI_Group);
if (G == MPI_GROUP_NULL)
{
- MPIU_Strncpy(str, "MPI_GROUP_NULL", maxlen);
+ MPL_strncpy(str, "MPI_GROUP_NULL", maxlen);
}
else
{
@@ -1749,7 +1749,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
R = va_arg(list, MPI_Request);
if (R == MPI_REQUEST_NULL)
{
- MPIU_Strncpy(str, "MPI_REQUEST_NULL", maxlen);
+ MPL_strncpy(str, "MPI_REQUEST_NULL", maxlen);
}
else
{
@@ -1760,7 +1760,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
E = va_arg(list, MPI_Errhandler);
if (E == MPI_ERRHANDLER_NULL)
{
- MPIU_Strncpy(str, "MPI_ERRHANDLER_NULL", maxlen);
+ MPL_strncpy(str, "MPI_ERRHANDLER_NULL", maxlen);
}
else
{
@@ -1769,7 +1769,7 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
break;
case (int)'c':
c = va_arg(list, MPI_Count);
- MPIU_Assert(sizeof(long long) >= sizeof(MPI_Count));
+ MPIR_Assert(sizeof(long long) >= sizeof(MPI_Count));
MPL_snprintf(str, maxlen, "%lld", (long long)c);
break;
default:
@@ -1788,10 +1788,10 @@ static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig,
}
if (*begin != '\0')
{
- MPIU_Strncpy(str, begin, maxlen);
+ MPL_strncpy(str, begin, maxlen);
}
/* Free the dup'ed format string */
- MPIU_Free( fmt );
+ MPL_free( fmt );
return mpi_errno;
}
@@ -1885,7 +1885,7 @@ static int checkErrcodeIsValid( int errcode )
if (errcode <= MPIR_MAX_ERROR_CLASS_INDEX && errcode >= 0) return 0;
convertErrcodeToIndexes( errcode, &ring_idx, &ring_id, &generic_idx );
- MPIU_DBG_MSG_FMT(ERRHAND, VERBOSE, (MPIU_DBG_FDEST, "code=%#010x ring_idx=%d ring_id=%#010x generic_idx=%d",
+ MPL_DBG_MSG_FMT(MPIR_DBG_ERRHAND, VERBOSE, (MPL_DBG_FDEST, "code=%#010x ring_idx=%d ring_id=%#010x generic_idx=%d",
errcode, ring_idx, ring_id, generic_idx));
if (ring_idx < 0 || ring_idx >= MAX_ERROR_RING ||
@@ -2003,7 +2003,7 @@ static int ErrGetInstanceString( int errorcode, char msg[], int num_remaining )
int len;
if (MPIR_CVAR_PRINT_ERROR_STACK) {
- MPIU_Strncpy(msg, ", error stack:\n", num_remaining);
+ MPL_strncpy(msg, ", error stack:\n", num_remaining);
msg[num_remaining - 1] = '\0';
len = (int)strlen(msg);
msg += len;
diff --git a/src/mpi/errhan/file_call_errhandler.c b/src/mpi/errhan/file_call_errhandler.c
index 8a120a3..8e3a71e 100644
--- a/src/mpi/errhan/file_call_errhandler.c
+++ b/src/mpi/errhan/file_call_errhandler.c
@@ -5,10 +5,7 @@
*/
#include "mpiimpl.h"
-
-/* mpiext.h contains the prototypes for functions to interface MPICH
- and ROMIO */
-#include "mpiext.h"
+#include "mpir_ext.h"
/* -- Begin Profiling Symbol Block for routine MPI_File_call_errhandler */
#if defined(HAVE_PRAGMA_WEAK)
@@ -54,17 +51,14 @@ int MPI_File_call_errhandler(MPI_File fh, int errorcode)
{
int mpi_errno = MPI_SUCCESS;
#ifdef MPI_MODE_RDONLY
- MPID_Errhandler *e;
+ MPIR_Errhandler *e;
MPI_Errhandler eh;
#endif
- MPID_THREADPRIV_DECL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_FILE_CALL_ERRHANDLER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_FILE_CALL_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_FILE_CALL_ERRHANDLER);
-
- MPID_THREADPRIV_GET;
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_FILE_CALL_ERRHANDLER);
#ifdef MPI_MODE_RDONLY
/* Validate parameters, especially handles needing to be converted */
@@ -85,10 +79,10 @@ int MPI_File_call_errhandler(MPI_File fh, int errorcode)
}
#endif
if (!eh) {
- MPID_Errhandler_get_ptr( MPI_ERRORS_RETURN, e );
+ MPIR_Errhandler_get_ptr( MPI_ERRORS_RETURN, e );
}
else {
- MPID_Errhandler_get_ptr( eh, e );
+ MPIR_Errhandler_get_ptr( eh, e );
}
/* Note that, unlike the rest of MPICH, MPI_File objects are pointers,
@@ -103,11 +97,11 @@ int MPI_File_call_errhandler(MPI_File fh, int errorcode)
}
switch (e->language) {
- case MPID_LANG_C:
+ case MPIR_LANG__C:
(*e->errfn.C_File_Handler_function)( &fh, &errorcode );
break;
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
/* See HAVE_LANGUAGE_FORTRAN below for an explanation */
{ void *fh1 = (void *)&fh;
(*MPIR_Process.cxx_call_errfn)( 1, fh1, &errorcode,
@@ -116,8 +110,8 @@ int MPI_File_call_errhandler(MPI_File fh, int errorcode)
break;
#endif
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN90:
- case MPID_LANG_FORTRAN:
+ case MPIR_LANG__FORTRAN90:
+ case MPIR_LANG__FORTRAN:
/* The assignemt to a local variable prevents the compiler
from generating a warning about a type-punned pointer. Since
the value is really const (but MPI didn't define error handlers
@@ -142,7 +136,7 @@ int MPI_File_call_errhandler(MPI_File fh, int errorcode)
#else
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_FILE_CALL_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_FILE_CALL_ERRHANDLER);
return mpi_errno;
}
diff --git a/src/mpi/errhan/file_create_errhandler.c b/src/mpi/errhan/file_create_errhandler.c
index 467585a..b382111 100644
--- a/src/mpi/errhan/file_create_errhandler.c
+++ b/src/mpi/errhan/file_create_errhandler.c
@@ -52,13 +52,13 @@ int MPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
{
static const char FCNAME[] = "MPI_File_create_errhandler";
int mpi_errno = MPI_SUCCESS;
- MPID_Errhandler *errhan_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_FILE_CREATE_ERRHANDLER);
+ MPIR_Errhandler *errhan_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_FILE_CREATE_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_FILE_CREATE_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_FILE_CREATE_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -74,18 +74,18 @@ int MPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
/* ... body of routine ... */
- errhan_ptr = (MPID_Errhandler *)MPIU_Handle_obj_alloc( &MPID_Errhandler_mem );
+ errhan_ptr = (MPIR_Errhandler *)MPIR_Handle_obj_alloc( &MPIR_Errhandler_mem );
MPIR_ERR_CHKANDJUMP(!errhan_ptr,mpi_errno,MPI_ERR_OTHER,"**nomem");
- errhan_ptr->language = MPID_LANG_C;
- errhan_ptr->kind = MPID_FILE;
- MPIU_Object_set_ref(errhan_ptr,1);
+ errhan_ptr->language = MPIR_LANG__C;
+ errhan_ptr->kind = MPIR_FILE;
+ MPIR_Object_set_ref(errhan_ptr,1);
errhan_ptr->errfn.C_File_Handler_function = file_errhandler_fn;
- MPID_OBJ_PUBLISH_HANDLE(*errhandler, errhan_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*errhandler, errhan_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_FILE_CREATE_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_FILE_CREATE_ERRHANDLER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/file_get_errhandler.c b/src/mpi/errhan/file_get_errhandler.c
index 22ac73c..3d6c223 100644
--- a/src/mpi/errhan/file_get_errhandler.c
+++ b/src/mpi/errhan/file_get_errhandler.c
@@ -6,10 +6,7 @@
*/
#include "mpiimpl.h"
-
-/* mpiext.h contains the prototypes for functions to interface MPICH
- and ROMIO */
-#include "mpiext.h"
+#include "mpir_ext.h"
/* -- Begin Profiling Symbol Block for routine MPI_File_get_errhandler */
#if defined(HAVE_PRAGMA_WEAK)
@@ -58,14 +55,14 @@ int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler)
int mpi_errno = MPI_SUCCESS;
#ifdef MPI_MODE_RDONLY
MPI_Errhandler eh;
- MPID_Errhandler *e;
+ MPIR_Errhandler *e;
#endif
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_FILE_GET_ERRHANDLER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_FILE_GET_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_FILE_GET_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_FILE_GET_ERRHANDLER);
#ifdef MPI_MODE_RDONLY
/* Validate parameters, especially handles needing to be converted */
@@ -86,10 +83,10 @@ int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler)
MPIR_ROMIO_Get_file_errhand( file, &eh );
if (!eh) {
- MPID_Errhandler_get_ptr( MPI_ERRORS_RETURN, e );
+ MPIR_Errhandler_get_ptr( MPI_ERRORS_RETURN, e );
}
else {
- MPID_Errhandler_get_ptr( eh, e );
+ MPIR_Errhandler_get_ptr( eh, e );
}
MPIR_Errhandler_add_ref( e );
*errhandler = e->handle;
@@ -106,7 +103,7 @@ int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_FILE_GET_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_FILE_GET_ERRHANDLER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/file_set_errhandler.c b/src/mpi/errhan/file_set_errhandler.c
index 1f841d1..9ffeba9 100644
--- a/src/mpi/errhan/file_set_errhandler.c
+++ b/src/mpi/errhan/file_set_errhandler.c
@@ -6,10 +6,7 @@
*/
#include "mpiimpl.h"
-
-/* mpiext.h contains the prototypes for functions to interface MPICH
- and ROMIO */
-#include "mpiext.h"
+#include "mpir_ext.h"
/* -- Begin Profiling Symbol Block for routine MPI_File_set_errhandler */
#if defined(HAVE_PRAGMA_WEAK)
@@ -56,14 +53,14 @@ int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler)
int mpi_errno = MPI_SUCCESS;
#ifdef MPI_MODE_RDONLY
int in_use;
- MPID_Errhandler *errhan_ptr = NULL, *old_errhandler_ptr;
+ MPIR_Errhandler *errhan_ptr = NULL, *old_errhandler_ptr;
MPI_Errhandler old_errhandler;
#endif
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_FILE_SET_ERRHANDLER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_FILE_SET_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_FILE_SET_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_FILE_SET_ERRHANDLER);
#ifdef MPI_MODE_RDONLY
@@ -80,7 +77,7 @@ int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler)
}
# endif /* HAVE_ERROR_CHECKING */
- MPID_Errhandler_get_ptr( errhandler, errhan_ptr );
+ MPIR_Errhandler_get_ptr( errhandler, errhan_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -88,10 +85,10 @@ int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler)
MPID_BEGIN_ERROR_CHECKS;
{
if (HANDLE_GET_KIND(errhandler) != HANDLE_KIND_BUILTIN) {
- MPID_Errhandler_valid_ptr( errhan_ptr,mpi_errno );
+ MPIR_Errhandler_valid_ptr( errhan_ptr,mpi_errno );
/* Also check for a valid errhandler kind */
if (!mpi_errno) {
- if (errhan_ptr->kind != MPID_FILE) {
+ if (errhan_ptr->kind != MPIR_FILE) {
mpi_errno = MPIR_Err_create_code(
MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_ARG, "**errhandnotfile", NULL );
}
@@ -109,16 +106,16 @@ int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler)
/* MPI_File objects default to the errhandler set on MPI_FILE_NULL
* at file open time, or MPI_ERRORS_RETURN if no errhandler is set
* on MPI_FILE_NULL. (MPI-2.2, sec 13.7) */
- MPID_Errhandler_get_ptr( MPI_ERRORS_RETURN, old_errhandler_ptr );
+ MPIR_Errhandler_get_ptr( MPI_ERRORS_RETURN, old_errhandler_ptr );
}
else {
- MPID_Errhandler_get_ptr( old_errhandler, old_errhandler_ptr );
+ MPIR_Errhandler_get_ptr( old_errhandler, old_errhandler_ptr );
}
if (old_errhandler_ptr) {
MPIR_Errhandler_release_ref(old_errhandler_ptr,&in_use);
if (!in_use) {
- MPID_Errhandler_free( old_errhandler_ptr );
+ MPIR_Errhandler_free( old_errhandler_ptr );
}
}
@@ -137,7 +134,7 @@ int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_FILE_SET_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_FILE_SET_ERRHANDLER);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -168,10 +165,10 @@ void MPIR_Get_file_error_routine( MPI_Errhandler e,
void (**c)(MPI_File *, int *, ...),
int *kind )
{
- MPID_Errhandler *e_ptr = 0;
+ MPIR_Errhandler *e_ptr = 0;
int mpi_errno = MPI_SUCCESS;
- /* Convert the MPI_Errhandler into an MPID_Errhandler */
+ /* Convert the MPI_Errhandler into an MPIR_Errhandler */
if (!e) {
*c = 0;
@@ -185,7 +182,7 @@ void MPIR_Get_file_error_routine( MPI_Errhandler e,
*kind = 1;
return;
}
- MPID_Errhandler_get_ptr(e,e_ptr);
+ MPIR_Errhandler_get_ptr(e,e_ptr);
if (!e_ptr) {
/* FIXME: We need an error return */
*c = 0;
@@ -207,7 +204,7 @@ void MPIR_Get_file_error_routine( MPI_Errhandler e,
interface. This is MPIR_File_call_cxx_errhandler.
See file_call_errhandler.c */
#ifdef HAVE_CXX_BINDING
- if (e_ptr->language == MPID_LANG_CXX) *kind = 3;
+ if (e_ptr->language == MPIR_LANG__CXX) *kind = 3;
#endif
}
}
diff --git a/src/mpi/errhan/win_call_errhandler.c b/src/mpi/errhan/win_call_errhandler.c
index 03395ce..973f4ae 100644
--- a/src/mpi/errhan/win_call_errhandler.c
+++ b/src/mpi/errhan/win_call_errhandler.c
@@ -55,17 +55,14 @@ Input Parameters:
int MPI_Win_call_errhandler(MPI_Win win, int errorcode)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
int in_cs = FALSE;
- MPID_THREADPRIV_DECL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_CALL_ERRHANDLER);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_CALL_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_CALL_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_CALL_ERRHANDLER);
- MPID_THREADPRIV_GET;
-
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
{
@@ -78,7 +75,7 @@ int MPI_Win_call_errhandler(MPI_Win win, int errorcode)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -86,7 +83,7 @@ int MPI_Win_call_errhandler(MPI_Win win, int errorcode)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -121,20 +118,20 @@ int MPI_Win_call_errhandler(MPI_Win win, int errorcode)
}
#endif
switch (win_ptr->errhandler->language) {
- case MPID_LANG_C:
+ case MPIR_LANG__C:
(*win_ptr->errhandler->errfn.C_Win_Handler_function)(
&win_ptr->handle, &errorcode );
break;
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
MPIR_Process.cxx_call_errfn( 2, &win_ptr->handle,
&errorcode,
(void (*)(void))win_ptr->errhandler->errfn.C_Win_Handler_function );
break;
#endif
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN90:
- case MPID_LANG_FORTRAN:
+ case MPIR_LANG__FORTRAN90:
+ case MPIR_LANG__FORTRAN:
{
/* If int and MPI_Fint aren't the same size, we need to
convert. As this is not performance critical, we
@@ -153,7 +150,7 @@ int MPI_Win_call_errhandler(MPI_Win win, int errorcode)
if (in_cs)
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_WIN_MUTEX(win_ptr));
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_CALL_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_CALL_ERRHANDLER);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/errhan/win_create_errhandler.c b/src/mpi/errhan/win_create_errhandler.c
index a805bdd..5ffcdc8 100644
--- a/src/mpi/errhan/win_create_errhandler.c
+++ b/src/mpi/errhan/win_create_errhandler.c
@@ -54,13 +54,13 @@ int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
{
static const char FCNAME[] = "MPI_Win_create_errhandler";
int mpi_errno = MPI_SUCCESS;
- MPID_Errhandler *errhan_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_CREATE_ERRHANDLER);
+ MPIR_Errhandler *errhan_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_CREATE_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_CREATE_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_CREATE_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -76,19 +76,19 @@ int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
/* ... body of routine ... */
- errhan_ptr = (MPID_Errhandler *)MPIU_Handle_obj_alloc( &MPID_Errhandler_mem );
+ errhan_ptr = (MPIR_Errhandler *)MPIR_Handle_obj_alloc( &MPIR_Errhandler_mem );
MPIR_ERR_CHKANDJUMP1(!errhan_ptr,mpi_errno,MPI_ERR_OTHER,"**nomem",
"**nomem %s", "MPI_Errhandler");
- errhan_ptr->language = MPID_LANG_C;
- errhan_ptr->kind = MPID_WIN;
- MPIU_Object_set_ref(errhan_ptr,1);
+ errhan_ptr->language = MPIR_LANG__C;
+ errhan_ptr->kind = MPIR_WIN;
+ MPIR_Object_set_ref(errhan_ptr,1);
errhan_ptr->errfn.C_Win_Handler_function = win_errhandler_fn;
- MPID_OBJ_PUBLISH_HANDLE(*errhandler, errhan_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*errhandler, errhan_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_CREATE_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_CREATE_ERRHANDLER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/win_get_errhandler.c b/src/mpi/errhan/win_get_errhandler.c
index 9b686fd..bae75e1 100644
--- a/src/mpi/errhan/win_get_errhandler.c
+++ b/src/mpi/errhan/win_get_errhandler.c
@@ -54,13 +54,13 @@ int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)
static const char FCNAME[] = "MPI_Win_get_errhandler";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_GET_ERRHANDLER);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_GET_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_GET_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_GET_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -74,7 +74,7 @@ int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +83,7 @@ int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)
{
MPIR_ERRTEST_ARGNULL(errhandler,"errhandler",mpi_errno);
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -111,7 +111,7 @@ int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_GET_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_GET_ERRHANDLER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/errhan/win_set_errhandler.c b/src/mpi/errhan/win_set_errhandler.c
index 44548b4..9ec2968 100644
--- a/src/mpi/errhan/win_set_errhandler.c
+++ b/src/mpi/errhan/win_set_errhandler.c
@@ -51,14 +51,14 @@ int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
static const char FCNAME[] = "MPI_Win_set_errhandler";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
int in_use;
- MPID_Errhandler *errhan_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_SET_ERRHANDLER);
+ MPIR_Errhandler *errhan_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_SET_ERRHANDLER);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_SET_ERRHANDLER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_SET_ERRHANDLER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,8 +73,8 @@ int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
- MPID_Errhandler_get_ptr( errhandler, errhan_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
+ MPIR_Errhandler_get_ptr( errhandler, errhan_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -82,14 +82,14 @@ int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not value, it will be reset to null */
if (HANDLE_GET_KIND(errhandler) != HANDLE_KIND_BUILTIN) {
- MPID_Errhandler_valid_ptr( errhan_ptr,mpi_errno );
+ MPIR_Errhandler_valid_ptr( errhan_ptr,mpi_errno );
/* Also check for a valid errhandler kind */
if (!mpi_errno) {
- if (errhan_ptr->kind != MPID_WIN) {
+ if (errhan_ptr->kind != MPIR_WIN) {
mpi_errno = MPIR_Err_create_code(
MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME,
__LINE__, MPI_ERR_ARG, "**errhandnotwin", NULL );
@@ -109,7 +109,7 @@ int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
if (win_ptr->errhandler != NULL) {
MPIR_Errhandler_release_ref(win_ptr->errhandler,&in_use);
if (!in_use) {
- MPID_Errhandler_free( win_ptr->errhandler );
+ MPIR_Errhandler_free( win_ptr->errhandler );
}
}
@@ -123,7 +123,7 @@ int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_SET_ERRHANDLER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_SET_ERRHANDLER);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/errhan/windefmsg.h b/src/mpi/errhan/windefmsg.h
index b5c1085..2e134f5 100644
--- a/src/mpi/errhan/windefmsg.h
+++ b/src/mpi/errhan/windefmsg.h
@@ -10,7 +10,7 @@ typedef struct msgpair {
const unsigned int sentinal1;
const char *short_name, *long_name;
const unsigned int sentinal2; } msgpair;
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_NONE
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__NONE
/* The names are in sorted order, allowing the use of a simple
linear search or bisection algorithm to find the message corresponding to
a particular message */
@@ -24,8 +24,8 @@ static const char short_gen3[] = "**GetMemTwice";
static const char long_gen3[] = "Global shared memory initializer called more than once";
static const char short_gen4[] = "**MPIDI_CH3I_SHM_Attach_to_mem";
static const char long_gen4[] = "MPIDI_CH3I_SHM_Attach_to_mem failed";
-static const char short_gen5[] = "**MPIU_Strdup";
-static const char long_gen5[] = "MPIU_Strdup failed";
+static const char short_gen5[] = "**MPL_strdup";
+static const char long_gen5[] = "MPL_strdup failed";
static const char short_gen6[] = "**MapViewOfFileEx";
static const char long_gen6[] = "MapViewOfFileEx failed";
static const char short_gen7[] = "**OpenProcess";
@@ -217,7 +217,7 @@ static const char long_gen99[] = "[ch3:sock] failed to handle connection accept
static const char short_gen100[] = "**ch3|sock|scopenresp";
static const char long_gen100[] = "[ch3:sock] failed to handle open response packet";
static const char short_gen101[] = "**ch3|sock|strdup";
-static const char long_gen101[] = "[ch3:sock] MPIU_Strdup failed";
+static const char long_gen101[] = "[ch3:sock] MPL_strdup failed";
static const char short_gen102[] = "**ch3|syncack";
static const char long_gen102[] = "failure occurred while attempting to send eager synchronization packet";
static const char short_gen103[] = "**ch3|unknownpkt";
@@ -1255,7 +1255,7 @@ static const char long_gen618[] = "unable to bind socket to port";
static const char short_gen619[] = "**sock|poll|eqfail";
static const char long_gen619[] = "fatal error: failed to enqueue an event; event was lost";
static const char short_gen620[] = "**sock|poll|eqmalloc";
-static const char long_gen620[] = "MPIU_Malloc failed to allocate memory for an event queue structure";
+static const char long_gen620[] = "MPL_malloc failed to allocate memory for an event queue structure";
static const char short_gen621[] = "**sock|poll|listen";
static const char long_gen621[] = "listen() failed";
static const char short_gen622[] = "**sock|poll|nodelay";
@@ -1997,7 +1997,7 @@ static const msgpair generic_err_msgs[] = {
};
#endif
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_GENERIC
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__GENERIC
static const char short_spc0[] = "**CreateFileMapping %d";
static const char long_spc0[] = "CreateFileMapping failed, error %d";
static const char short_spc1[] = "**CreateThread %d";
@@ -2414,8 +2414,8 @@ static const char short_spc206[] = "**mpi_keyval_create %p %p %p %p";
static const char long_spc206[] = "MPI_Keyval_create(copy_fn=%p, del_fn=%p, keyval=%p, extra=%p) failed";
static const char short_spc207[] = "**mpi_keyval_free %p";
static const char long_spc207[] = "MPI_Keyval_free(keyval=%p) failed";
-static const char short_spc208[] = "**mpi_lookup_name %s %I %p";
-static const char long_spc208[] = "MPI_Lookup_name(service=\"%s\", %I, port=%p) failed";
+static const char short_spc208[] = "**mpi_lookup_name %s %I %s";
+static const char long_spc208[] = "MPI_Lookup_name(service=\"%s\", %I, port=%s) failed";
static const char short_spc209[] = "**mpi_op_create %p %d %p";
static const char long_spc209[] = "MPI_Op_create(fn=%p, commute=%d, op=%p) failed";
static const char short_spc210[] = "**mpi_op_free %p";
@@ -3285,7 +3285,7 @@ static const msgpair specific_err_msgs[] = {
};
#endif
-#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG_NONE
+#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__NONE
#define MPIR_MAX_ERROR_CLASS_INDEX 54
static int class_to_index[] = {
641,42,113,126,642,104,548,564,164,504,
diff --git a/src/mpi/group/.state-cache b/src/mpi/group/.state-cache
index f88e6cf..4250ae0 100644
--- a/src/mpi/group/.state-cache
+++ b/src/mpi/group/.state-cache
@@ -1,68 +1,68 @@
<dir>
-<file name="grouputil.c" info="1447123141"/>
-<file name="groupdebug.c" info="1447123141"/>
-<file name="group_difference.c" info="1447123141"/>
-<file name="group_translate_ranks.c" info="1447123141"/>
-<file name="group_rank.c" info="1447123141"/>
-<file name="group_union.c" info="1447123141"/>
-<file name="group.h" info="1447123141"/>
-<file name="group_intersection.c" info="1447123141"/>
-<file name="group_range_incl.c" info="1447123141"/>
-<file name="group_excl.c" info="1447123141"/>
-<file name="group_compare.c" info="1447123141"/>
-<file name="group_incl.c" info="1447123141"/>
-<file name="group_range_excl.c" info="1447123141"/>
-<file name="group_free.c" info="1447123141"/>
-<file name="group_size.c" info="1447123141"/>
+<file name="group_range_incl.c" info="1478973152"/>
+<file name="group_intersection.c" info="1478973152"/>
+<file name="group_compare.c" info="1478973152"/>
+<file name="group_difference.c" info="1478973152"/>
+<file name="group_excl.c" info="1478973152"/>
+<file name="group_translate_ranks.c" info="1478973152"/>
+<file name="group_range_excl.c" info="1478973152"/>
+<file name="group_incl.c" info="1478973152"/>
+<file name="group_rank.c" info="1478973152"/>
+<file name="grouputil.c" info="1478973152"/>
+<file name="group_union.c" info="1478973152"/>
+<file name="groupdebug.c" info="1478973152"/>
+<file name="group_size.c" info="1478973152"/>
+<file name="group.h" info="1478973152"/>
+<file name="group_free.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="grouputil.c">
+<fileinfo name="group_range_incl.c">
+MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL MPIR_Group_range_incl_impl
+MPID_STATE_MPI_GROUP_RANGE_INCL MPI_Group_range_incl
</fileinfo>
-<fileinfo name="groupdebug.c">
+<fileinfo name="group_intersection.c">
+MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL MPIR_Group_intersection_impl
+MPID_STATE_MPI_GROUP_INTERSECTION MPI_Group_intersection
+</fileinfo>
+<fileinfo name="group_compare.c">
+MPID_STATE_MPI_GROUP_COMPARE MPI_Group_compare
</fileinfo>
<fileinfo name="group_difference.c">
MPID_STATE_MPIR_GROUP_DIFFERENCE_IMPL MPIR_Group_difference_impl
MPID_STATE_MPI_GROUP_DIFFERENCE MPI_Group_difference
</fileinfo>
+<fileinfo name="group_excl.c">
+MPID_STATE_MPIR_GROUP_EXCL_IMPL MPIR_Group_excl_impl
+MPID_STATE_MPI_GROUP_EXCL MPI_Group_excl
+</fileinfo>
<fileinfo name="group_translate_ranks.c">
MPID_STATE_MPI_GROUP_TRANSLATE_RANKS MPI_Group_translate_ranks
</fileinfo>
+<fileinfo name="group_range_excl.c">
+MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL MPIR_Group_range_excl_impl
+MPID_STATE_MPI_GROUP_RANGE_EXCL MPI_Group_range_excl
+</fileinfo>
+<fileinfo name="group_incl.c">
+MPID_STATE_MPIR_GROUP_INCL_IMPL MPIR_Group_incl_impl
+MPID_STATE_MPI_GROUP_INCL MPI_Group_incl
+</fileinfo>
<fileinfo name="group_rank.c">
MPID_STATE_MPI_GROUP_RANK MPI_Group_rank
</fileinfo>
+<fileinfo name="grouputil.c">
+</fileinfo>
<fileinfo name="group_union.c">
MPID_STATE_MPIR_GROUP_UNION_IMPL MPIR_Group_union_impl
MPID_STATE_MPI_GROUP_UNION MPI_Group_union
</fileinfo>
-<fileinfo name="group.h">
-</fileinfo>
-<fileinfo name="group_intersection.c">
-MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL MPIR_Group_intersection_impl
-MPID_STATE_MPI_GROUP_INTERSECTION MPI_Group_intersection
-</fileinfo>
-<fileinfo name="group_range_incl.c">
-MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL MPIR_Group_range_incl_impl
-MPID_STATE_MPI_GROUP_RANGE_INCL MPI_Group_range_incl
-</fileinfo>
-<fileinfo name="group_excl.c">
-MPID_STATE_MPIR_GROUP_EXCL_IMPL MPIR_Group_excl_impl
-MPID_STATE_MPI_GROUP_EXCL MPI_Group_excl
-</fileinfo>
-<fileinfo name="group_compare.c">
-MPID_STATE_MPI_GROUP_COMPARE MPI_Group_compare
+<fileinfo name="groupdebug.c">
</fileinfo>
-<fileinfo name="group_incl.c">
-MPID_STATE_MPIR_GROUP_INCL_IMPL MPIR_Group_incl_impl
-MPID_STATE_MPI_GROUP_INCL MPI_Group_incl
+<fileinfo name="group_size.c">
+MPID_STATE_MPI_GROUP_SIZE MPI_Group_size
</fileinfo>
-<fileinfo name="group_range_excl.c">
-MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL MPIR_Group_range_excl_impl
-MPID_STATE_MPI_GROUP_RANGE_EXCL MPI_Group_range_excl
+<fileinfo name="group.h">
</fileinfo>
<fileinfo name="group_free.c">
MPID_STATE_MPI_GROUP_FREE MPI_Group_free
</fileinfo>
-<fileinfo name="group_size.c">
-MPID_STATE_MPI_GROUP_SIZE MPI_Group_size
-</fileinfo>
</data>
diff --git a/src/mpi/group/group.h b/src/mpi/group/group.h
index 713d512..31d7f6c 100644
--- a/src/mpi/group/group.h
+++ b/src/mpi/group/group.h
@@ -6,8 +6,8 @@
/* MPIR_Group_create is needed by some of the routines that return groups
from communicators, so it is in mpidimpl.h */
-void MPIR_Group_setup_lpid_list( MPID_Group * );
-int MPIR_Group_check_valid_ranks( MPID_Group *, const int [], int );
-int MPIR_Group_check_valid_ranges( MPID_Group *, int [][3], int );
-void MPIR_Group_setup_lpid_pairs( MPID_Group *, MPID_Group * );
+void MPII_Group_setup_lpid_list( MPIR_Group * );
+int MPIR_Group_check_valid_ranks( MPIR_Group *, const int [], int );
+int MPIR_Group_check_valid_ranges( MPIR_Group *, int [][3], int );
+void MPIR_Group_setup_lpid_pairs( MPIR_Group *, MPIR_Group * );
diff --git a/src/mpi/group/group_compare.c b/src/mpi/group/group_compare.c
index 832c5ea..7c15e97 100644
--- a/src/mpi/group/group_compare.c
+++ b/src/mpi/group/group_compare.c
@@ -26,7 +26,7 @@ int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) __attribu
#undef MPI_Group_compare
#define MPI_Group_compare PMPI_Group_compare
-int MPIR_Group_compare_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, int *result)
+int MPIR_Group_compare_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, int *result)
{
int mpi_errno = MPI_SUCCESS;
int g1_idx, g2_idx, size, i;
@@ -43,11 +43,11 @@ int MPIR_Group_compare_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, int
g2_idx = group_ptr2->idx_of_first_lpid;
/* If the lpid list hasn't been created, do it now */
if (g1_idx < 0) {
- MPIR_Group_setup_lpid_list( group_ptr1 );
+ MPII_Group_setup_lpid_list( group_ptr1 );
g1_idx = group_ptr1->idx_of_first_lpid;
}
if (g2_idx < 0) {
- MPIR_Group_setup_lpid_list( group_ptr2 );
+ MPII_Group_setup_lpid_list( group_ptr2 );
g2_idx = group_ptr2->idx_of_first_lpid;
}
while (g1_idx >= 0 && g2_idx >= 0) {
@@ -75,8 +75,6 @@ int MPIR_Group_compare_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, int
fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif
@@ -110,9 +108,9 @@ and 'MPI_UNEQUAL' otherwise
int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr1 = NULL;
- MPID_Group *group_ptr2 = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_COMPARE);
+ MPIR_Group *group_ptr1 = NULL;
+ MPIR_Group *group_ptr2 = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_COMPARE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
@@ -120,7 +118,7 @@ int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
within a mutex. As most of the group routines are not performance
critical, we simple run these routines within the SINGLE_CS */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_COMPARE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_COMPARE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -136,8 +134,8 @@ int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group1, group_ptr1 );
- MPID_Group_get_ptr( group2, group_ptr2 );
+ MPIR_Group_get_ptr( group1, group_ptr1 );
+ MPIR_Group_get_ptr( group2, group_ptr2 );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -145,8 +143,8 @@ int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr1, mpi_errno );
- MPID_Group_valid_ptr( group_ptr2, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr1, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr2, mpi_errno );
/* If group_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -162,7 +160,7 @@ int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_COMPARE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_COMPARE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_difference.c b/src/mpi/group/group_difference.c
index bb79d8e..bc85663 100644
--- a/src/mpi/group/group_difference.c
+++ b/src/mpi/group/group_difference.c
@@ -30,13 +30,13 @@ int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup
#define FUNCNAME MPIR_Group_difference_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_difference_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_Group **new_group_ptr)
+int MPIR_Group_difference_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, MPIR_Group **new_group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int size1, i, k, g1_idx, g2_idx, l1_pid, l2_pid, nnew;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GROUP_DIFFERENCE_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GROUP_DIFFERENCE_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GROUP_DIFFERENCE_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GROUP_DIFFERENCE_IMPL);
/* Return a group consisting of the members of group1 that are *not*
in group2 */
size1 = group_ptr1->size;
@@ -72,7 +72,7 @@ int MPIR_Group_difference_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, M
/* See 5.3.2, Group Constructors. For many group routines,
the standard explicitly says to return MPI_GROUP_EMPTY;
for others it is implied */
- *new_group_ptr = MPID_Group_empty;
+ *new_group_ptr = MPIR_Group_empty;
goto fn_exit;
}
else {
@@ -97,7 +97,7 @@ int MPIR_Group_difference_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, M
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GROUP_DIFFERENCE_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GROUP_DIFFERENCE_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -139,15 +139,15 @@ The generated group containc the members of 'group1' that are not in 'group2'.
int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr1 = NULL;
- MPID_Group *group_ptr2 = NULL;
- MPID_Group *new_group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_DIFFERENCE);
+ MPIR_Group *group_ptr1 = NULL;
+ MPIR_Group *group_ptr2 = NULL;
+ MPIR_Group *new_group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_DIFFERENCE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_DIFFERENCE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_DIFFERENCE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -162,8 +162,8 @@ int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group1, group_ptr1 );
- MPID_Group_get_ptr( group2, group_ptr2 );
+ MPIR_Group_get_ptr( group1, group_ptr1 );
+ MPIR_Group_get_ptr( group2, group_ptr2 );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -171,8 +171,8 @@ int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr1, mpi_errno );
- MPID_Group_valid_ptr( group_ptr2, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr1, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr2, mpi_errno );
/* If either group_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -185,12 +185,12 @@ int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup
mpi_errno = MPIR_Group_difference_impl(group_ptr1, group_ptr2, &new_group_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_DIFFERENCE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_DIFFERENCE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_excl.c b/src/mpi/group/group_excl.c
index d158a7c..fb3e0ce 100644
--- a/src/mpi/group/group_excl.c
+++ b/src/mpi/group/group_excl.c
@@ -30,13 +30,13 @@ int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgrou
#define FUNCNAME MPIR_Group_excl_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_excl_impl(MPID_Group *group_ptr, int n, const int ranks[], MPID_Group **new_group_ptr)
+int MPIR_Group_excl_impl(MPIR_Group *group_ptr, int n, const int ranks[], MPIR_Group **new_group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int size, i, newi;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GROUP_EXCL_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GROUP_EXCL_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GROUP_EXCL_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GROUP_EXCL_IMPL);
size = group_ptr->size;
@@ -69,7 +69,7 @@ int MPIR_Group_excl_impl(MPID_Group *group_ptr, int n, const int ranks[], MPID_G
/* TODO calculate is_local_dense_monotonic */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GROUP_EXCL_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GROUP_EXCL_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -118,13 +118,13 @@ function is erroneous.
int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr = NULL, *new_group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_EXCL);
+ MPIR_Group *group_ptr = NULL, *new_group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_EXCL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_EXCL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_EXCL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
{
@@ -138,14 +138,14 @@ int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgrou
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
/* If group_ptr is not valid, it will be reset to null */
if (group_ptr) {
mpi_errno = MPIR_Group_check_valid_ranks( group_ptr,
@@ -166,12 +166,12 @@ int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgrou
mpi_errno = MPIR_Group_excl_impl(group_ptr, n, ranks, &new_group_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_EXCL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_EXCL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_free.c b/src/mpi/group/group_free.c
index a036cae..e3b9491 100644
--- a/src/mpi/group/group_free.c
+++ b/src/mpi/group/group_free.c
@@ -29,7 +29,7 @@ int MPI_Group_free(MPI_Group *group) __attribute__((weak,alias("PMPI_Group_free"
#define FUNCNAME MPIR_Group_free_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_free_impl(MPID_Group *group_ptr)
+int MPIR_Group_free_impl(MPIR_Group *group_ptr)
{
int mpi_errno = MPI_SUCCESS;
@@ -73,13 +73,13 @@ On output, group is set to 'MPI_GROUP_NULL'.
int MPI_Group_free(MPI_Group *group)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_FREE);
+ MPIR_Group *group_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -93,7 +93,7 @@ int MPI_Group_free(MPI_Group *group)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( *group, group_ptr );
+ MPIR_Group_get_ptr( *group, group_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -101,7 +101,7 @@ int MPI_Group_free(MPI_Group *group)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
/* If group_ptr is not valid, it will be reset to null */
/* Cannot free the predefined groups, but allow GROUP_EMPTY
@@ -127,7 +127,7 @@ int MPI_Group_free(MPI_Group *group)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_incl.c b/src/mpi/group/group_incl.c
index 98ee62b..a85c02a 100644
--- a/src/mpi/group/group_incl.c
+++ b/src/mpi/group/group_incl.c
@@ -30,16 +30,16 @@ int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgrou
#define FUNCNAME MPIR_Group_incl_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_incl_impl(MPID_Group *group_ptr, int n, const int ranks[], MPID_Group **new_group_ptr)
+int MPIR_Group_incl_impl(MPIR_Group *group_ptr, int n, const int ranks[], MPIR_Group **new_group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GROUP_INCL_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GROUP_INCL_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GROUP_INCL_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GROUP_INCL_IMPL);
if (n == 0) {
- *new_group_ptr = MPID_Group_empty;
+ *new_group_ptr = MPIR_Group_empty;
goto fn_exit;
}
@@ -59,7 +59,7 @@ int MPIR_Group_incl_impl(MPID_Group *group_ptr, int n, const int ranks[], MPID_G
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GROUP_INCL_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GROUP_INCL_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -104,13 +104,13 @@ Output Parameters:
int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr = NULL, *new_group_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_INCL);
+ MPIR_Group *group_ptr = NULL, *new_group_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_INCL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_INCL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_INCL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -125,7 +125,7 @@ int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgrou
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -133,7 +133,7 @@ int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgrou
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
/* If group_ptr is not valid, it will be reset to null */
if (group_ptr) {
mpi_errno = MPIR_Group_check_valid_ranks( group_ptr,
@@ -155,12 +155,12 @@ int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgrou
mpi_errno = MPIR_Group_incl_impl(group_ptr, n, ranks, &new_group_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_INCL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_INCL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_intersection.c b/src/mpi/group/group_intersection.c
index e337628..5da9730 100644
--- a/src/mpi/group/group_intersection.c
+++ b/src/mpi/group/group_intersection.c
@@ -30,13 +30,13 @@ int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgro
#define FUNCNAME MPIR_Group_intersection_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_intersection_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_Group **new_group_ptr)
+int MPIR_Group_intersection_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, MPIR_Group **new_group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int size1, i, k, g1_idx, g2_idx, l1_pid, l2_pid, nnew;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL);
/* Return a group consisting of the members of group1 that are
in group2 */
size1 = group_ptr1->size;
@@ -69,7 +69,7 @@ int MPIR_Group_intersection_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2,
}
/* Create the group. Handle the trivial case first */
if (nnew == 0) {
- *new_group_ptr = MPID_Group_empty;
+ *new_group_ptr = MPIR_Group_empty;
goto fn_exit;
}
@@ -95,7 +95,7 @@ int MPIR_Group_intersection_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2,
}
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GROUP_INTERSECTION_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -139,15 +139,15 @@ The output group contains those processes that are in both 'group1' and
int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr1 = NULL;
- MPID_Group *group_ptr2 = NULL;
- MPID_Group *new_group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_INTERSECTION);
+ MPIR_Group *group_ptr1 = NULL;
+ MPIR_Group *group_ptr2 = NULL;
+ MPIR_Group *new_group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_INTERSECTION);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_INTERSECTION);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_INTERSECTION);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -162,8 +162,8 @@ int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgro
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group1, group_ptr1 );
- MPID_Group_get_ptr( group2, group_ptr2 );
+ MPIR_Group_get_ptr( group1, group_ptr1 );
+ MPIR_Group_get_ptr( group2, group_ptr2 );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -171,8 +171,8 @@ int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgro
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr1, mpi_errno );
- MPID_Group_valid_ptr( group_ptr2, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr1, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr2, mpi_errno );
/* If either group_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -185,12 +185,12 @@ int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgro
mpi_errno = MPIR_Group_intersection_impl(group_ptr1, group_ptr2, &new_group_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_INTERSECTION);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_INTERSECTION);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_range_excl.c b/src/mpi/group/group_range_excl.c
index ee42a72..176e52c 100644
--- a/src/mpi/group/group_range_excl.c
+++ b/src/mpi/group/group_range_excl.c
@@ -29,13 +29,13 @@ int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *new
#define FUNCNAME MPIR_Group_range_excl_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_range_excl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MPID_Group **new_group_ptr)
+int MPIR_Group_range_excl_impl(MPIR_Group *group_ptr, int n, int ranges[][3], MPIR_Group **new_group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int size, i, j, k, nnew, first, last, stride;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL);
/* Compute size, assuming that included ranks are valid (and distinct) */
size = group_ptr->size;
nnew = 0;
@@ -48,7 +48,7 @@ int MPIR_Group_range_excl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MP
nnew = size - nnew;
if (nnew == 0) {
- *new_group_ptr = MPID_Group_empty;
+ *new_group_ptr = MPIR_Group_empty;
goto fn_exit;
}
@@ -103,7 +103,7 @@ int MPIR_Group_range_excl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MP
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GROUP_RANGE_EXCL_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -154,13 +154,13 @@ int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3],
MPI_Group *newgroup)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr = NULL, *new_group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_RANGE_EXCL);
+ MPIR_Group *group_ptr = NULL, *new_group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_RANGE_EXCL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_RANGE_EXCL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_RANGE_EXCL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -174,7 +174,7 @@ int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -182,7 +182,7 @@ int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
/* If group_ptr is not valid, it will be reset to null */
/* Check the exclusion array. Ensure that all ranges are
@@ -202,12 +202,12 @@ int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3],
mpi_errno = MPIR_Group_range_excl_impl(group_ptr, n, ranges, &new_group_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_RANGE_EXCL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_RANGE_EXCL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_range_incl.c b/src/mpi/group/group_range_incl.c
index 26ece15..b00cc85 100644
--- a/src/mpi/group/group_range_incl.c
+++ b/src/mpi/group/group_range_incl.c
@@ -30,13 +30,13 @@ int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *new
#define FUNCNAME MPIR_Group_range_incl_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_range_incl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MPID_Group **new_group_ptr)
+int MPIR_Group_range_incl_impl(MPIR_Group *group_ptr, int n, int ranges[][3], MPIR_Group **new_group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int first, last, stride, nnew, i, j, k;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL);
/* Compute size, assuming that included ranks are valid (and distinct) */
nnew = 0;
@@ -48,7 +48,7 @@ int MPIR_Group_range_incl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MP
}
if (nnew == 0) {
- *new_group_ptr = MPID_Group_empty;
+ *new_group_ptr = MPIR_Group_empty;
goto fn_exit;
}
@@ -86,7 +86,7 @@ int MPIR_Group_range_incl_impl(MPID_Group *group_ptr, int n, int ranges[][3], MP
/* TODO calculate is_local_dense_monotonic */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GROUP_RANGE_INCL_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -133,13 +133,13 @@ int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3],
MPI_Group *newgroup)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr = NULL, *new_group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_RANGE_INCL);
+ MPIR_Group *group_ptr = NULL, *new_group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_RANGE_INCL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_RANGE_INCL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_RANGE_INCL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -153,7 +153,7 @@ int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -161,7 +161,7 @@ int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
/* If group_ptr is not value, it will be reset to null */
if (group_ptr) {
mpi_errno = MPIR_Group_check_valid_ranges( group_ptr,
@@ -178,12 +178,12 @@ int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3],
mpi_errno = MPIR_Group_range_incl_impl(group_ptr, n, ranges, &new_group_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_RANGE_INCL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_RANGE_INCL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_rank.c b/src/mpi/group/group_rank.c
index 6d6c2ef..b420c23 100644
--- a/src/mpi/group/group_rank.c
+++ b/src/mpi/group/group_rank.c
@@ -55,12 +55,12 @@ process is not a member (integer)
int MPI_Group_rank(MPI_Group group, int *rank)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_RANK);
+ MPIR_Group *group_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_RANK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_RANK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_RANK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -74,7 +74,7 @@ int MPI_Group_rank(MPI_Group group, int *rank)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -82,7 +82,7 @@ int MPI_Group_rank(MPI_Group group, int *rank)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
/* If group_ptr is not value, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -97,7 +97,7 @@ int MPI_Group_rank(MPI_Group group, int *rank)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_RANK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_RANK);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/group/group_size.c b/src/mpi/group/group_size.c
index eddb427..67290fa 100644
--- a/src/mpi/group/group_size.c
+++ b/src/mpi/group/group_size.c
@@ -54,12 +54,12 @@ Output Parameters:
int MPI_Group_size(MPI_Group group, int *size)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_SIZE);
+ MPIR_Group *group_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_SIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_SIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_SIZE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,7 +73,7 @@ int MPI_Group_size(MPI_Group group, int *size)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group, group_ptr );
+ MPIR_Group_get_ptr( group, group_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPI_Group_size(MPI_Group group, int *size)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr, mpi_errno );
/* If group_ptr is not value, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -96,7 +96,7 @@ int MPI_Group_size(MPI_Group group, int *size)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_SIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_SIZE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/group/group_translate_ranks.c b/src/mpi/group/group_translate_ranks.c
index 1145f48..3cd24b0 100644
--- a/src/mpi/group/group_translate_ranks.c
+++ b/src/mpi/group/group_translate_ranks.c
@@ -31,13 +31,13 @@ int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[], MPI_G
#define FUNCNAME MPIR_Group_translate_ranks_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_translate_ranks_impl(MPID_Group *gp1, int n, const int ranks1[],
- MPID_Group *gp2, int ranks2[])
+int MPIR_Group_translate_ranks_impl(MPIR_Group *gp1, int n, const int ranks1[],
+ MPIR_Group *gp2, int ranks2[])
{
int mpi_errno = MPI_SUCCESS;
int i, g2_idx, l1_pid, l2_pid;
- MPIU_DBG_MSG_S(OTHER,VERBOSE,"gp2->is_local_dense_monotonic=%s", (gp2->is_local_dense_monotonic ? "TRUE" : "FALSE"));
+ MPL_DBG_MSG_S(MPIR_DBG_OTHER,VERBOSE,"gp2->is_local_dense_monotonic=%s", (gp2->is_local_dense_monotonic ? "TRUE" : "FALSE"));
/* Initialize the output ranks */
for (i=0; i<n; i++)
@@ -47,7 +47,7 @@ int MPIR_Group_translate_ranks_impl(MPID_Group *gp1, int n, const int ranks1[],
/* g2 probably == group_of(MPI_COMM_WORLD); use fast, constant-time lookup */
int lpid_offset = gp2->lrank_to_lpid[0].lpid;
- MPIU_Assert(lpid_offset >= 0);
+ MPIR_Assert(lpid_offset >= 0);
for (i = 0; i < n; ++i) {
int g1_lpid;
@@ -67,7 +67,7 @@ int MPIR_Group_translate_ranks_impl(MPID_Group *gp1, int n, const int ranks1[],
/* general, slow path; lookup time is dependent on the user-provided rank values! */
g2_idx = gp2->idx_of_first_lpid;
if (g2_idx < 0) {
- MPIR_Group_setup_lpid_list( gp2 );
+ MPII_Group_setup_lpid_list( gp2 );
g2_idx = gp2->idx_of_first_lpid;
}
if (g2_idx >= 0) {
@@ -100,10 +100,7 @@ int MPIR_Group_translate_ranks_impl(MPID_Group *gp1, int n, const int ranks1[],
}
}
}
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
@@ -141,9 +138,9 @@ int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[],
MPI_Group group2, int ranks2[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr1 = NULL;
- MPID_Group *group_ptr2 = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_TRANSLATE_RANKS);
+ MPIR_Group *group_ptr1 = NULL;
+ MPIR_Group *group_ptr2 = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_TRANSLATE_RANKS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
@@ -151,7 +148,7 @@ int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[],
within a mutex. As most of the group routines are not performance
critical, we simple run these routines within the SINGLE_CS */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_TRANSLATE_RANKS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_TRANSLATE_RANKS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -166,8 +163,8 @@ int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group1, group_ptr1 );
- MPID_Group_get_ptr( group2, group_ptr2 );
+ MPIR_Group_get_ptr( group1, group_ptr1 );
+ MPIR_Group_get_ptr( group2, group_ptr2 );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -175,8 +172,8 @@ int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr1, mpi_errno );
- MPID_Group_valid_ptr( group_ptr2, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr1, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr2, mpi_errno );
/* If either group_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNEG(n,"n",mpi_errno);
@@ -209,7 +206,7 @@ int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[],
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_TRANSLATE_RANKS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_TRANSLATE_RANKS);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/group_union.c b/src/mpi/group/group_union.c
index 4e56608..aba34e3 100644
--- a/src/mpi/group/group_union.c
+++ b/src/mpi/group/group_union.c
@@ -30,13 +30,13 @@ int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) __a
#define FUNCNAME MPIR_Group_union_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Group_union_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_Group **new_group_ptr)
+int MPIR_Group_union_impl(MPIR_Group *group_ptr1, MPIR_Group *group_ptr2, MPIR_Group **new_group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int g1_idx, g2_idx, nnew, i, k, size1, size2, mylpid;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GROUP_UNION_IMPL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_GROUP_UNION_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GROUP_UNION_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_GROUP_UNION_IMPL);
/* Determine the size of the new group. The new group consists of all
members of group1 plus the members of group2 that are not in group1.
@@ -46,11 +46,11 @@ int MPIR_Group_union_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_G
/* If the lpid list hasn't been created, do it now */
if (g1_idx < 0) {
- MPIR_Group_setup_lpid_list( group_ptr1 );
+ MPII_Group_setup_lpid_list( group_ptr1 );
g1_idx = group_ptr1->idx_of_first_lpid;
}
if (g2_idx < 0) {
- MPIR_Group_setup_lpid_list( group_ptr2 );
+ MPII_Group_setup_lpid_list( group_ptr2 );
g2_idx = group_ptr2->idx_of_first_lpid;
}
nnew = group_ptr1->size;
@@ -90,7 +90,7 @@ int MPIR_Group_union_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_G
}
if (nnew == 0) {
- *new_group_ptr = MPID_Group_empty;
+ *new_group_ptr = MPIR_Group_empty;
goto fn_exit;
}
@@ -133,7 +133,7 @@ int MPIR_Group_union_impl(MPID_Group *group_ptr1, MPID_Group *group_ptr2, MPID_G
/* TODO calculate is_local_dense_monotonic */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_GROUP_UNION_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_GROUP_UNION_IMPL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -172,15 +172,15 @@ Output Parameters:
int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *group_ptr1 = NULL;
- MPID_Group *group_ptr2 = NULL;
- MPID_Group *new_group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GROUP_UNION);
+ MPIR_Group *group_ptr1 = NULL;
+ MPIR_Group *group_ptr2 = NULL;
+ MPIR_Group *new_group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GROUP_UNION);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GROUP_UNION);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GROUP_UNION);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -195,8 +195,8 @@ int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Group_get_ptr( group1, group_ptr1 );
- MPID_Group_get_ptr( group2, group_ptr2 );
+ MPIR_Group_get_ptr( group1, group_ptr1 );
+ MPIR_Group_get_ptr( group2, group_ptr2 );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -204,8 +204,8 @@ int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate group_ptr */
- MPID_Group_valid_ptr( group_ptr1, mpi_errno );
- MPID_Group_valid_ptr( group_ptr2, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr1, mpi_errno );
+ MPIR_Group_valid_ptr( group_ptr2, mpi_errno );
/* If group_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -218,12 +218,12 @@ int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
mpi_errno = MPIR_Group_union_impl(group_ptr1, group_ptr2, &new_group_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newgroup, new_group_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GROUP_UNION);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GROUP_UNION);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/group/groupdebug.c b/src/mpi/group/groupdebug.c
index b4bc3b2..c21a846 100644
--- a/src/mpi/group/groupdebug.c
+++ b/src/mpi/group/groupdebug.c
@@ -20,16 +20,16 @@ void MPITEST_Group_print( MPI_Group );
/* --BEGIN DEBUG-- */
void MPITEST_Group_create( int nproc, int myrank, MPI_Group *new_group )
{
- MPID_Group *new_group_ptr;
+ MPIR_Group *new_group_ptr;
int i;
- new_group_ptr = (MPID_Group *)MPIU_Handle_obj_alloc( &MPID_Group_mem );
+ new_group_ptr = (MPIR_Group *)MPIR_Handle_obj_alloc( &MPIR_Group_mem );
if (!new_group_ptr) {
fprintf( stderr, "Could not create a new group\n" );
PMPI_Abort( MPI_COMM_WORLD, 1 );
}
- MPIU_Object_set_ref( new_group_ptr, 1 );
- new_group_ptr->lrank_to_lpid = (MPID_Group_pmap_t *)MPIU_Malloc( nproc * sizeof(MPID_Group_pmap_t) );
+ MPIR_Object_set_ref( new_group_ptr, 1 );
+ new_group_ptr->lrank_to_lpid = (MPII_Group_pmap_t *)MPL_malloc( nproc * sizeof(MPII_Group_pmap_t) );
if (!new_group_ptr->lrank_to_lpid) {
fprintf( stderr, "Could not create lrank map for new group\n" );
PMPI_Abort( MPI_COMM_WORLD, 1 );
@@ -49,14 +49,14 @@ void MPITEST_Group_create( int nproc, int myrank, MPI_Group *new_group )
void MPITEST_Group_print( MPI_Group g )
{
- MPID_Group *g_ptr;
+ MPIR_Group *g_ptr;
int g_idx, size, i;
- MPID_Group_get_ptr( g, g_ptr );
+ MPIR_Group_get_ptr( g, g_ptr );
g_idx = g_ptr->idx_of_first_lpid;
if (g_idx < 0) {
- MPIR_Group_setup_lpid_list( g_ptr );
+ MPII_Group_setup_lpid_list( g_ptr );
g_idx = g_ptr->idx_of_first_lpid;
}
diff --git a/src/mpi/group/grouputil.c b/src/mpi/group/grouputil.c
index 9f0b28c..5e17886 100644
--- a/src/mpi/group/grouputil.c
+++ b/src/mpi/group/grouputil.c
@@ -12,33 +12,33 @@
#endif
/* Preallocated group objects */
-MPID_Group MPID_Group_builtin[MPID_GROUP_N_BUILTIN] = { {0} };
-MPID_Group MPID_Group_direct[MPID_GROUP_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_Group_mem = { 0, 0, 0, 0, MPID_GROUP,
- sizeof(MPID_Group), MPID_Group_direct,
+MPIR_Group MPIR_Group_builtin[MPIR_GROUP_N_BUILTIN] = { {0} };
+MPIR_Group MPIR_Group_direct[MPID_GROUP_PREALLOC] = { {0} };
+MPIR_Object_alloc_t MPIR_Group_mem = { 0, 0, 0, 0, MPIR_GROUP,
+ sizeof(MPIR_Group), MPIR_Group_direct,
MPID_GROUP_PREALLOC};
-MPID_Group * const MPID_Group_empty = &MPID_Group_builtin[0];
+MPIR_Group * const MPIR_Group_empty = &MPIR_Group_builtin[0];
int MPIR_Group_init(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPID_GROUP_N_BUILTIN == 1); /* update this func if this ever triggers */
+ MPIR_Assert(MPIR_GROUP_N_BUILTIN == 1); /* update this func if this ever triggers */
- MPID_Group_builtin[0].handle = MPI_GROUP_EMPTY;
- MPIU_Object_set_ref(&MPID_Group_builtin[0], 1);
- MPID_Group_builtin[0].size = 0;
- MPID_Group_builtin[0].rank = MPI_UNDEFINED;
- MPID_Group_builtin[0].idx_of_first_lpid = -1;
- MPID_Group_builtin[0].lrank_to_lpid = NULL;
+ MPIR_Group_builtin[0].handle = MPI_GROUP_EMPTY;
+ MPIR_Object_set_ref(&MPIR_Group_builtin[0], 1);
+ MPIR_Group_builtin[0].size = 0;
+ MPIR_Group_builtin[0].rank = MPI_UNDEFINED;
+ MPIR_Group_builtin[0].idx_of_first_lpid = -1;
+ MPIR_Group_builtin[0].lrank_to_lpid = NULL;
/* TODO hook for device here? */
return mpi_errno;
}
-int MPIR_Group_release(MPID_Group *group_ptr)
+int MPIR_Group_release(MPIR_Group *group_ptr)
{
int mpi_errno = MPI_SUCCESS;
int inuse;
@@ -46,8 +46,8 @@ int MPIR_Group_release(MPID_Group *group_ptr)
MPIR_Group_release_ref(group_ptr, &inuse);
if (!inuse) {
/* Only if refcount is 0 do we actually free. */
- MPIU_Free(group_ptr->lrank_to_lpid);
- MPIU_Handle_obj_free( &MPID_Group_mem, group_ptr );
+ MPL_free(group_ptr->lrank_to_lpid);
+ MPIR_Handle_obj_free( &MPIR_Group_mem, group_ptr );
}
return mpi_errno;
}
@@ -58,25 +58,25 @@ int MPIR_Group_release(MPID_Group *group_ptr)
* initialize any arrays, but does set the reference count.
*/
#define FCNAME "MPIR_Group_create"
-int MPIR_Group_create( int nproc, MPID_Group **new_group_ptr )
+int MPIR_Group_create( int nproc, MPIR_Group **new_group_ptr )
{
int mpi_errno = MPI_SUCCESS;
- *new_group_ptr = (MPID_Group *)MPIU_Handle_obj_alloc( &MPID_Group_mem );
+ *new_group_ptr = (MPIR_Group *)MPIR_Handle_obj_alloc( &MPIR_Group_mem );
/* --BEGIN ERROR HANDLING-- */
if (!*new_group_ptr) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "MPIR_Group_create", __LINE__, MPI_ERR_OTHER, "**nomem", 0 );
return mpi_errno;
}
/* --END ERROR HANDLING-- */
- MPIU_Object_set_ref( *new_group_ptr, 1 );
+ MPIR_Object_set_ref( *new_group_ptr, 1 );
(*new_group_ptr)->lrank_to_lpid =
- (MPID_Group_pmap_t *)MPIU_Malloc( nproc * sizeof(MPID_Group_pmap_t) );
+ (MPII_Group_pmap_t *)MPL_malloc( nproc * sizeof(MPII_Group_pmap_t) );
/* --BEGIN ERROR HANDLING-- */
if (!(*new_group_ptr)->lrank_to_lpid) {
- MPIU_Handle_obj_free( &MPID_Group_mem, *new_group_ptr );
+ MPIR_Handle_obj_free( &MPIR_Group_mem, *new_group_ptr );
*new_group_ptr = NULL;
- MPIU_CHKMEM_SETERR(mpi_errno,nproc*sizeof(MPID_Group_pmap_t),
+ MPIR_CHKMEM_SETERR(mpi_errno,nproc*sizeof(MPII_Group_pmap_t),
"newgroup->lrank_to_lpid");
return mpi_errno;
}
@@ -99,7 +99,7 @@ int MPIR_Group_create( int nproc, MPID_Group **new_group_ptr )
* in group rank order). Instead it builds the traversal order (in increasing
* lpid order) through the maparray given by the "next_lpid" fields.
*/
-static int mergesort_lpidarray( MPID_Group_pmap_t maparray[], int n )
+static int mergesort_lpidarray( MPII_Group_pmap_t maparray[], int n )
{
int idx1, idx2, first_idx, cur_idx, next_lpid, idx2_offset;
@@ -199,7 +199,7 @@ static int mergesort_lpidarray( MPID_Group_pmap_t maparray[], int n )
* be held on entry to this routine. This forces some of the routines
* noted above to hold the SINGLE_CS; which would otherwise not be required.
*/
-void MPIR_Group_setup_lpid_list( MPID_Group *group_ptr )
+void MPII_Group_setup_lpid_list( MPIR_Group *group_ptr )
{
if (group_ptr->idx_of_first_lpid == -1) {
group_ptr->idx_of_first_lpid =
@@ -208,15 +208,15 @@ void MPIR_Group_setup_lpid_list( MPID_Group *group_ptr )
}
}
-void MPIR_Group_setup_lpid_pairs( MPID_Group *group_ptr1,
- MPID_Group *group_ptr2 )
+void MPIR_Group_setup_lpid_pairs( MPIR_Group *group_ptr1,
+ MPIR_Group *group_ptr2 )
{
/* If the lpid list hasn't been created, do it now */
if (group_ptr1->idx_of_first_lpid < 0) {
- MPIR_Group_setup_lpid_list( group_ptr1 );
+ MPII_Group_setup_lpid_list( group_ptr1 );
}
if (group_ptr2->idx_of_first_lpid < 0) {
- MPIR_Group_setup_lpid_list( group_ptr2 );
+ MPII_Group_setup_lpid_list( group_ptr2 );
}
}
@@ -237,7 +237,7 @@ void MPIR_Group_setup_lpid_pairs( MPID_Group *group_ptr1,
* must be used by only on thread at a time (per group). For the SINGLE_CS
* case, that means that the SINGLE_CS must be held on entry to this routine.
*/
-int MPIR_Group_check_valid_ranks( MPID_Group *group_ptr, const int ranks[], int n )
+int MPIR_Group_check_valid_ranks( MPIR_Group *group_ptr, const int ranks[], int n )
{
int mpi_errno = MPI_SUCCESS, i;
@@ -276,7 +276,7 @@ int MPIR_Group_check_valid_ranks( MPID_Group *group_ptr, const int ranks[], int
#define FUNCNAME MPIR_Group_check_valid_ranges
#undef FCNAME
#define FCNAME "MPIR_Group_check_valid_ranges"
-int MPIR_Group_check_valid_ranges( MPID_Group *group_ptr,
+int MPIR_Group_check_valid_ranges( MPIR_Group *group_ptr,
int ranges[][3], int n )
{
int i, j, size, first, last, stride, mpi_errno = MPI_SUCCESS;
@@ -373,19 +373,19 @@ int MPIR_Group_check_valid_ranges( MPID_Group *group_ptr,
We sort the lpids for the group and the comm. If the group has an
lpid that is not in the comm, then report an error.
*/
-int MPIR_Group_check_subset( MPID_Group *group_ptr, MPID_Comm *comm_ptr )
+int MPIR_Group_check_subset( MPIR_Group *group_ptr, MPIR_Comm *comm_ptr )
{
int mpi_errno = MPI_SUCCESS;
int g1_idx, g2_idx, l1_pid, l2_pid, i;
- MPID_Group_pmap_t *vmap=0;
- int vsize = comm_ptr->comm_kind == MPID_INTERCOMM ? comm_ptr->local_size :
+ MPII_Group_pmap_t *vmap=0;
+ int vsize = comm_ptr->comm_kind == MPIR_COMM_KIND__INTERCOMM ? comm_ptr->local_size :
comm_ptr->remote_size;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
- MPIU_Assert(group_ptr != NULL);
+ MPIR_Assert(group_ptr != NULL);
- MPIU_CHKLMEM_MALLOC(vmap,MPID_Group_pmap_t*,
- vsize*sizeof(MPID_Group_pmap_t),mpi_errno, "" );
+ MPIR_CHKLMEM_MALLOC(vmap,MPII_Group_pmap_t*,
+ vsize*sizeof(MPII_Group_pmap_t),mpi_errno, "" );
/* Initialize the vmap */
for (i=0; i<vsize; i++) {
MPID_Comm_get_lpid(comm_ptr, i, &vmap[i].lpid, FALSE);
@@ -393,15 +393,15 @@ int MPIR_Group_check_subset( MPID_Group *group_ptr, MPID_Comm *comm_ptr )
vmap[i].flag = 0;
}
- MPIR_Group_setup_lpid_list( group_ptr );
+ MPII_Group_setup_lpid_list( group_ptr );
g1_idx = group_ptr->idx_of_first_lpid;
g2_idx = mergesort_lpidarray( vmap, vsize );
- MPIU_DBG_MSG_FMT(COMM,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM,VERBOSE,(MPL_DBG_FDEST,
"initial indices: %d %d\n", g1_idx, g2_idx ));
while (g1_idx >= 0 && g2_idx >= 0) {
l1_pid = group_ptr->lrank_to_lpid[g1_idx].lpid;
l2_pid = vmap[g2_idx].lpid;
- MPIU_DBG_MSG_FMT(COMM,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM,VERBOSE,(MPL_DBG_FDEST,
"Lpids are %d, %d\n", l1_pid, l2_pid ));
if (l1_pid < l2_pid) {
/* If we have to advance g1, we didn't find a match, so
@@ -416,7 +416,7 @@ int MPIR_Group_check_subset( MPID_Group *group_ptr, MPID_Comm *comm_ptr )
g1_idx = group_ptr->lrank_to_lpid[g1_idx].next_lpid;
g2_idx = vmap[g2_idx].next_lpid;
}
- MPIU_DBG_MSG_FMT(COMM,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM,VERBOSE,(MPL_DBG_FDEST,
"g1 = %d, g2 = %d\n", g1_idx, g2_idx ));
}
@@ -426,7 +426,7 @@ int MPIR_Group_check_subset( MPID_Group *group_ptr, MPID_Comm *comm_ptr )
}
fn_fail:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
}
diff --git a/src/mpi/info/.state-cache b/src/mpi/info/.state-cache
index 6a032fb..281898b 100644
--- a/src/mpi/info/.state-cache
+++ b/src/mpi/info/.state-cache
@@ -1,27 +1,21 @@
<dir>
-<file name="info_free.c" info="1447123141"/>
-<file name="info_getnth.c" info="1447123141"/>
-<file name="info_dup.c" info="1447123141"/>
-<file name="info_getn.c" info="1447123141"/>
-<file name="info_set.c" info="1447123141"/>
-<file name="info_delete.c" info="1447123141"/>
-<file name="info_getvallen.c" info="1447123141"/>
-<file name="info_get.c" info="1447123141"/>
-<file name="infoutil.c" info="1447123141"/>
-<file name="info_create.c" info="1447123141"/>
+<file name="info_create.c" info="1478973152"/>
+<file name="info_getvallen.c" info="1478973152"/>
+<file name="info_set.c" info="1478973152"/>
+<file name="info_delete.c" info="1478973152"/>
+<file name="info_dup.c" info="1478973152"/>
+<file name="infoutil.c" info="1478973152"/>
+<file name="info_getn.c" info="1478973152"/>
+<file name="info_get.c" info="1478973152"/>
+<file name="info_getnth.c" info="1478973152"/>
+<file name="info_free.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="info_free.c">
-MPID_STATE_MPI_INFO_FREE MPI_Info_free
-</fileinfo>
-<fileinfo name="info_getnth.c">
-MPID_STATE_MPI_INFO_GET_NTHKEY MPI_Info_get_nthkey
-</fileinfo>
-<fileinfo name="info_dup.c">
-MPID_STATE_MPI_INFO_DUP MPI_Info_dup
+<fileinfo name="info_create.c">
+MPID_STATE_MPI_INFO_CREATE MPI_Info_create
</fileinfo>
-<fileinfo name="info_getn.c">
-MPID_STATE_MPI_INFO_GET_NKEYS MPI_Info_get_nkeys
+<fileinfo name="info_getvallen.c">
+MPID_STATE_MPI_INFO_GET_VALUELEN MPIRInfo_get_valuelen
</fileinfo>
<fileinfo name="info_set.c">
MPID_STATE_MPI_INFO_SET MPI_Info_set
@@ -30,15 +24,21 @@ MPID_STATE_MPIR_INFO_SET_IMPL MPIR_Info_set_impl
<fileinfo name="info_delete.c">
MPID_STATE_MPI_INFO_DELETE MPI_Info_delete
</fileinfo>
-<fileinfo name="info_getvallen.c">
-MPID_STATE_MPI_INFO_GET_VALUELEN MPIRInfo_get_valuelen
+<fileinfo name="info_dup.c">
+MPID_STATE_MPI_INFO_DUP MPI_Info_dup
+</fileinfo>
+<fileinfo name="infoutil.c">
+</fileinfo>
+<fileinfo name="info_getn.c">
+MPID_STATE_MPI_INFO_GET_NKEYS MPI_Info_get_nkeys
</fileinfo>
<fileinfo name="info_get.c">
MPID_STATE_MPI_INFO_GET MPI_Info_get
</fileinfo>
-<fileinfo name="infoutil.c">
+<fileinfo name="info_getnth.c">
+MPID_STATE_MPI_INFO_GET_NTHKEY MPI_Info_get_nthkey
</fileinfo>
-<fileinfo name="info_create.c">
-MPID_STATE_MPI_INFO_CREATE MPI_Info_create
+<fileinfo name="info_free.c">
+MPID_STATE_MPI_INFO_FREE MPI_Info_free
</fileinfo>
</data>
diff --git a/src/mpi/info/info_create.c b/src/mpi/info/info_create.c
index 8a9d9cd..665c851 100644
--- a/src/mpi/info/info_create.c
+++ b/src/mpi/info/info_create.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Info_create */
#if defined(HAVE_PRAGMA_WEAK)
@@ -45,15 +45,15 @@ Output Parameters:
@*/
int MPI_Info_create( MPI_Info *info )
{
- MPID_Info *info_ptr;
+ MPIR_Info *info_ptr;
static const char FCNAME[] = "MPI_Info_create";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_CREATE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_CREATE);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -68,7 +68,7 @@ int MPI_Info_create( MPI_Info *info )
/* ... body of routine ... */
- mpi_errno = MPIU_Info_alloc(&info_ptr);
+ mpi_errno = MPIR_Info_alloc(&info_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
*info = info_ptr->handle;
@@ -79,7 +79,7 @@ int MPI_Info_create( MPI_Info *info )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_delete.c b/src/mpi/info/info_delete.c
index a7a8ed1..2fb494b 100644
--- a/src/mpi/info/info_delete.c
+++ b/src/mpi/info/info_delete.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Info_delete */
#if defined(HAVE_PRAGMA_WEAK)
@@ -47,13 +47,13 @@ int MPI_Info_delete( MPI_Info info, const char *key )
{
static const char FCNAME[] = "MPI_Info_delete";
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr=0, *prev_ptr, *curr_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_DELETE);
+ MPIR_Info *info_ptr=0, *prev_ptr, *curr_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_DELETE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_DELETE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_DELETE);
/* Validate parameters, especially handles needing to be converted */
@@ -68,7 +68,7 @@ int MPI_Info_delete( MPI_Info info, const char *key )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -78,7 +78,7 @@ int MPI_Info_delete( MPI_Info info, const char *key )
int keylen;
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* Check key */
@@ -98,10 +98,10 @@ int MPI_Info_delete( MPI_Info info, const char *key )
while (curr_ptr) {
if (!strncmp(curr_ptr->key, key, MPI_MAX_INFO_KEY)) {
- MPIU_Free(curr_ptr->key);
- MPIU_Free(curr_ptr->value);
+ MPL_free(curr_ptr->key);
+ MPL_free(curr_ptr->value);
prev_ptr->next = curr_ptr->next;
- MPIU_Handle_obj_free( &MPID_Info_mem, curr_ptr );
+ MPIR_Handle_obj_free( &MPIR_Info_mem, curr_ptr );
break;
}
prev_ptr = curr_ptr;
@@ -114,7 +114,7 @@ int MPI_Info_delete( MPI_Info info, const char *key )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_DELETE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_DELETE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_dup.c b/src/mpi/info/info_dup.c
index 6ff8479..d8dcc11 100644
--- a/src/mpi/info/info_dup.c
+++ b/src/mpi/info/info_dup.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
#include <string.h>
@@ -31,10 +31,10 @@ int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) __attribute__((weak,alias("PM
#define FUNCNAME MPIR_Info_dup_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Info_dup_impl(MPID_Info *info_ptr, MPID_Info **new_info_ptr)
+int MPIR_Info_dup_impl(MPIR_Info *info_ptr, MPIR_Info **new_info_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Info *curr_old, *curr_new;
+ MPIR_Info *curr_old, *curr_new;
*new_info_ptr = NULL;
if (!info_ptr) goto fn_exit;
@@ -45,19 +45,19 @@ int MPIR_Info_dup_impl(MPID_Info *info_ptr, MPID_Info **new_info_ptr)
may want to add an "allocate n elements" routine and execute this
it two steps: count and then allocate */
/* FIXME : multithreaded */
- mpi_errno = MPIU_Info_alloc(&curr_new);
+ mpi_errno = MPIR_Info_alloc(&curr_new);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
*new_info_ptr = curr_new;
curr_old = info_ptr->next;
while (curr_old)
{
- mpi_errno = MPIU_Info_alloc(&curr_new->next);
+ mpi_errno = MPIR_Info_alloc(&curr_new->next);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
curr_new = curr_new->next;
- curr_new->key = MPIU_Strdup(curr_old->key);
- curr_new->value = MPIU_Strdup(curr_old->value);
+ curr_new->key = MPL_strdup(curr_old->key);
+ curr_new->value = MPL_strdup(curr_old->value);
curr_old = curr_old->next;
}
@@ -93,14 +93,14 @@ Output Parameters:
@*/
int MPI_Info_dup( MPI_Info info, MPI_Info *newinfo )
{
- MPID_Info *info_ptr = 0, *new_info_ptr;
+ MPIR_Info *info_ptr = 0, *new_info_ptr;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_DUP);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_DUP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_DUP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_DUP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -114,7 +114,7 @@ int MPI_Info_dup( MPI_Info info, MPI_Info *newinfo )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -122,7 +122,7 @@ int MPI_Info_dup( MPI_Info info, MPI_Info *newinfo )
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
MPIR_ERRTEST_ARGNULL(newinfo,"newinfo",mpi_errno);
}
MPID_END_ERROR_CHECKS;
@@ -139,7 +139,7 @@ int MPI_Info_dup( MPI_Info info, MPI_Info *newinfo )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_DUP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_DUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_free.c b/src/mpi/info/info_free.c
index fad762b..70e7f28 100644
--- a/src/mpi/info/info_free.c
+++ b/src/mpi/info/info_free.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Info_free */
#if defined(HAVE_PRAGMA_WEAK)
@@ -50,13 +50,13 @@ int MPI_Info_free( MPI_Info *info )
static const char FCNAME[] = "MPI_Info_free";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr=0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_FREE);
+ MPIR_Info *info_ptr=0;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -70,7 +70,7 @@ int MPI_Info_free( MPI_Info *info )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( *info, info_ptr );
+ MPIR_Info_get_ptr( *info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -78,7 +78,7 @@ int MPI_Info_free( MPI_Info *info )
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -87,7 +87,7 @@ int MPI_Info_free( MPI_Info *info )
/* ... body of routine ... */
- MPIU_Info_free( info_ptr );
+ MPIR_Info_free( info_ptr );
*info = MPI_INFO_NULL;
/* ... end of body of routine ... */
@@ -95,7 +95,7 @@ int MPI_Info_free( MPI_Info *info )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_get.c b/src/mpi/info/info_get.c
index a4f4898..9514472 100644
--- a/src/mpi/info/info_get.c
+++ b/src/mpi/info/info_get.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Info_get */
#if defined(HAVE_PRAGMA_WEAK)
@@ -29,9 +29,9 @@ int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int
#define FUNCNAME MPIR_Info_get_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Info_get_impl(MPID_Info *info_ptr, const char *key, int valuelen, char *value, int *flag)
+int MPIR_Info_get_impl(MPIR_Info *info_ptr, const char *key, int valuelen, char *value, int *flag)
{
- MPID_Info *curr_ptr;
+ MPIR_Info *curr_ptr;
int err=0, mpi_errno=0;
curr_ptr = info_ptr->next;
@@ -39,7 +39,7 @@ int MPIR_Info_get_impl(MPID_Info *info_ptr, const char *key, int valuelen, char
while (curr_ptr) {
if (!strncmp(curr_ptr->key, key, MPI_MAX_INFO_KEY)) {
- err = MPIU_Strncpy(value, curr_ptr->value, valuelen+1);
+ err = MPL_strncpy(value, curr_ptr->value, valuelen+1);
/* +1 because the MPI Standard says "In C, valuelen
* (passed to MPI_Info_get) should be one less than the
* amount of allocated space to allow for the null
@@ -93,14 +93,14 @@ Output Parameters:
int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value,
int *flag)
{
- MPID_Info *info_ptr=0;
+ MPIR_Info *info_ptr=0;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_GET);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_GET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -114,7 +114,7 @@ int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -124,7 +124,7 @@ int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value,
int keylen;
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* Check key */
@@ -151,7 +151,7 @@ int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value,
if (mpi_errno) goto fn_fail;
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_GET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_GET);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_getn.c b/src/mpi/info/info_getn.c
index ed07b6d..5d9fa80 100644
--- a/src/mpi/info/info_getn.c
+++ b/src/mpi/info/info_getn.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Info_get_nkeys */
#if defined(HAVE_PRAGMA_WEAK)
@@ -29,7 +29,7 @@ int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) __attribute__((weak,alias("PMP
#define FUNCNAME MPIR_Info_get_nkeys_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIR_Info_get_nkeys_impl(MPID_Info *info_ptr, int *nkeys)
+void MPIR_Info_get_nkeys_impl(MPIR_Info *info_ptr, int *nkeys)
{
int n;
@@ -71,14 +71,14 @@ Output Parameters:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPI_Info_get_nkeys( MPI_Info info, int *nkeys )
{
- MPID_Info *info_ptr=0;
+ MPIR_Info *info_ptr=0;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_GET_NKEYS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_GET_NKEYS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_GET_NKEYS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_GET_NKEYS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -92,7 +92,7 @@ int MPI_Info_get_nkeys( MPI_Info info, int *nkeys )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -100,7 +100,7 @@ int MPI_Info_get_nkeys( MPI_Info info, int *nkeys )
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
MPIR_ERRTEST_ARGNULL(nkeys,"nkeys",mpi_errno);
@@ -118,7 +118,7 @@ int MPI_Info_get_nkeys( MPI_Info info, int *nkeys )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_GET_NKEYS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_GET_NKEYS);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_getnth.c b/src/mpi/info/info_getnth.c
index 86a8bd8..33d7cab 100644
--- a/src/mpi/info/info_getnth.c
+++ b/src/mpi/info/info_getnth.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Info_get_nthkey */
#if defined(HAVE_PRAGMA_WEAK)
@@ -29,10 +29,10 @@ int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) __attribute__((weak,ali
#define FUNCNAME MPIR_Info_get_nthkey_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Info_get_nthkey_impl(MPID_Info *info_ptr, int n, char *key)
+int MPIR_Info_get_nthkey_impl(MPIR_Info *info_ptr, int n, char *key)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Info *curr_ptr;
+ MPIR_Info *curr_ptr;
int nkeys;
curr_ptr = info_ptr->next;
@@ -45,7 +45,9 @@ int MPIR_Info_get_nthkey_impl(MPID_Info *info_ptr, int n, char *key)
/* verify that n is valid */
MPIR_ERR_CHKANDJUMP2((!curr_ptr), mpi_errno, MPI_ERR_ARG, "**infonkey", "**infonkey %d %d", n, nkeys);
- MPIU_Strncpy( key, curr_ptr->key, MPI_MAX_INFO_KEY+1 );
+ /* if key is MPI_MAX_INFO_KEY long, MPL_strncpy will null-terminate it for
+ * us */
+ MPL_strncpy( key, curr_ptr->key, MPI_MAX_INFO_KEY);
/* Eventually, we could remember the location of this key in
the head using the key/value locations (and a union datatype?) */
@@ -83,13 +85,13 @@ Output Parameters:
int MPI_Info_get_nthkey( MPI_Info info, int n, char *key )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr=0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_GET_NTHKEY);
+ MPIR_Info *info_ptr=0;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_GET_NTHKEY);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_GET_NTHKEY);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_GET_NTHKEY);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -103,7 +105,7 @@ int MPI_Info_get_nthkey( MPI_Info info, int n, char *key )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -111,7 +113,7 @@ int MPI_Info_get_nthkey( MPI_Info info, int n, char *key )
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERR_CHKANDJUMP((!key), mpi_errno, MPI_ERR_INFO_KEY, "**infokeynull");
@@ -126,7 +128,7 @@ int MPI_Info_get_nthkey( MPI_Info info, int n, char *key )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_GET_NTHKEY);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_GET_NTHKEY);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_getvallen.c b/src/mpi/info/info_getvallen.c
index be42cbd..31ef9d1 100644
--- a/src/mpi/info/info_getvallen.c
+++ b/src/mpi/info/info_getvallen.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/* -- Begin Profiling Symbol Block for routine MPI_Info_get_valuelen */
#if defined(HAVE_PRAGMA_WEAK)
@@ -29,9 +29,9 @@ int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *fl
#define FUNCNAME MPIR_Info_get_valuelen_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIR_Info_get_valuelen_impl(MPID_Info *info_ptr, const char *key, int *valuelen, int *flag)
+void MPIR_Info_get_valuelen_impl(MPIR_Info *info_ptr, const char *key, int *valuelen, int *flag)
{
- MPID_Info *curr_ptr;
+ MPIR_Info *curr_ptr;
curr_ptr = info_ptr->next;
*flag = 0;
@@ -77,14 +77,14 @@ Output Parameters:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPI_Info_get_valuelen( MPI_Info info, const char *key, int *valuelen, int *flag )
{
- MPID_Info *info_ptr=0;
+ MPIR_Info *info_ptr=0;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_GET_VALUELEN);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_GET_VALUELEN);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_GET_VALUELEN);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_GET_VALUELEN);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -98,7 +98,7 @@ int MPI_Info_get_valuelen( MPI_Info info, const char *key, int *valuelen, int *f
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -108,7 +108,7 @@ int MPI_Info_get_valuelen( MPI_Info info, const char *key, int *valuelen, int *f
int keylen;
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* Check key */
@@ -135,7 +135,7 @@ int MPI_Info_get_valuelen( MPI_Info info, const char *key, int *valuelen, int *f
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_GET_VALUELEN);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_GET_VALUELEN);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/info/info_set.c b/src/mpi/info/info_set.c
index 0e839de..61b217d 100644
--- a/src/mpi/info/info_set.c
+++ b/src/mpi/info/info_set.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
#include <string.h>
@@ -53,13 +53,13 @@ int MPI_Info_set( MPI_Info info, const char *key, const char *value )
{
static const char FCNAME[] = "MPI_Info_set";
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INFO_SET);
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INFO_SET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INFO_SET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INFO_SET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,7 +73,7 @@ int MPI_Info_set( MPI_Info info, const char *key, const char *value )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +83,7 @@ int MPI_Info_set( MPI_Info info, const char *key, const char *value )
int keylen;
/* Validate info_ptr */
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* Check key */
@@ -105,7 +105,7 @@ int MPI_Info_set( MPI_Info info, const char *key, const char *value )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INFO_SET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INFO_SET);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -130,13 +130,13 @@ int MPI_Info_set( MPI_Info info, const char *key, const char *value )
#define FUNCNAME MPIR_Info_set_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Info_set_impl(MPID_Info *info_ptr, const char *key, const char *value)
+int MPIR_Info_set_impl(MPIR_Info *info_ptr, const char *key, const char *value)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Info *curr_ptr, *prev_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_INFO_SET_IMPL);
+ MPIR_Info *curr_ptr, *prev_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_INFO_SET_IMPL);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_INFO_SET_IMPL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_INFO_SET_IMPL);
prev_ptr = info_ptr;
curr_ptr = info_ptr->next;
@@ -144,8 +144,8 @@ int MPIR_Info_set_impl(MPID_Info *info_ptr, const char *key, const char *value)
while (curr_ptr) {
if (!strncmp(curr_ptr->key, key, MPI_MAX_INFO_KEY)) {
/* Key already present; replace value */
- MPIU_Free(curr_ptr->value);
- curr_ptr->value = MPIU_Strdup(value);
+ MPL_free(curr_ptr->value);
+ curr_ptr->value = MPL_strdup(value);
break;
}
prev_ptr = curr_ptr;
@@ -154,17 +154,17 @@ int MPIR_Info_set_impl(MPID_Info *info_ptr, const char *key, const char *value)
if (!curr_ptr) {
/* Key not present, insert value */
- mpi_errno = MPIU_Info_alloc(&curr_ptr);
+ mpi_errno = MPIR_Info_alloc(&curr_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/*printf( "Inserting new elm %x at %x\n", curr_ptr->id, prev_ptr->id );*/
prev_ptr->next = curr_ptr;
- curr_ptr->key = MPIU_Strdup(key);
- curr_ptr->value = MPIU_Strdup(value);
+ curr_ptr->key = MPL_strdup(key);
+ curr_ptr->value = MPL_strdup(value);
}
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_INFO_SET_IMPL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_INFO_SET_IMPL);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/info/infoutil.c b/src/mpi/info/infoutil.c
index 9c3df05..5b3c6e6 100644
--- a/src/mpi/info/infoutil.c
+++ b/src/mpi/info/infoutil.c
@@ -5,62 +5,62 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
/*#include <stdio.h>*/
/* This is the utility file for info that contains the basic info items
and storage management */
-#ifndef MPID_INFO_PREALLOC
-#define MPID_INFO_PREALLOC 8
+#ifndef MPIR_INFO_PREALLOC
+#define MPIR_INFO_PREALLOC 8
#endif
/* Preallocated info objects */
-MPID_Info MPID_Info_builtin[MPID_INFO_N_BUILTIN] = { { 0 } };
-MPID_Info MPID_Info_direct[MPID_INFO_PREALLOC] = { { 0 } };
-MPIU_Object_alloc_t MPID_Info_mem = { 0, 0, 0, 0, MPID_INFO,
- sizeof(MPID_Info), MPID_Info_direct,
- MPID_INFO_PREALLOC, };
+MPIR_Info MPIR_Info_builtin[MPIR_INFO_N_BUILTIN] = { { 0 } };
+MPIR_Info MPIR_Info_direct[MPIR_INFO_PREALLOC] = { { 0 } };
+MPIR_Object_alloc_t MPIR_Info_mem = { 0, 0, 0, 0, MPIR_INFO,
+ sizeof(MPIR_Info), MPIR_Info_direct,
+ MPIR_INFO_PREALLOC, };
/* Free an info structure. In the multithreaded case, this routine
relies on the SINGLE_CS in the info routines (particularly MPI_Info_free) */
#undef FUNCNAME
-#define FUNCNAME MPIU_Info_free
+#define FUNCNAME MPIR_Info_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIU_Info_free( MPID_Info *info_ptr )
+void MPIR_Info_free( MPIR_Info *info_ptr )
{
- MPID_Info *curr_ptr, *last_ptr;
+ MPIR_Info *curr_ptr, *last_ptr;
curr_ptr = info_ptr->next;
last_ptr = NULL;
- MPIU_Handle_obj_free(&MPID_Info_mem, info_ptr);
+ MPIR_Handle_obj_free(&MPIR_Info_mem, info_ptr);
/* printf( "Returning info %x\n", info_ptr->id ); */
/* First, free the string storage */
while (curr_ptr) {
- MPIU_Free(curr_ptr->key);
- MPIU_Free(curr_ptr->value);
+ MPL_free(curr_ptr->key);
+ MPL_free(curr_ptr->value);
last_ptr = curr_ptr;
curr_ptr = curr_ptr->next;
- MPIU_Handle_obj_free(&MPID_Info_mem, last_ptr);
+ MPIR_Handle_obj_free(&MPIR_Info_mem, last_ptr);
}
}
-/* Allocate and initialize an MPID_Info object.
+/* Allocate and initialize an MPIR_Info object.
*
* Returns MPICH error codes */
#undef FUNCNAME
-#define FUNCNAME MPIU_Info_alloc
+#define FUNCNAME MPIR_Info_alloc
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIU_Info_alloc(MPID_Info **info_p_p)
+int MPIR_Info_alloc(MPIR_Info **info_p_p)
{
int mpi_errno = MPI_SUCCESS;
- *info_p_p = (MPID_Info *)MPIU_Handle_obj_alloc(&MPID_Info_mem);
+ *info_p_p = (MPIR_Info *)MPIR_Handle_obj_alloc(&MPIR_Info_mem);
MPIR_ERR_CHKANDJUMP1(!*info_p_p, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPI_Info");
- MPIU_Object_set_ref(*info_p_p, 0);
+ MPIR_Object_set_ref(*info_p_p, 0);
(*info_p_p)->next = NULL;
(*info_p_p)->key = NULL;
(*info_p_p)->value = NULL;
diff --git a/src/mpi/init/.state-cache b/src/mpi/init/.state-cache
index 989c312..1c9ca13 100644
--- a/src/mpi/init/.state-cache
+++ b/src/mpi/init/.state-cache
@@ -1,47 +1,47 @@
<dir>
-<file name="abort.c" info="1447123141"/>
-<file name="initinfo.c" info="1447123141"/>
-<file name="ismain.c" info="1447123141"/>
-<file name="querythread.c" info="1447123141"/>
-<file name="async.c" info="1447123141"/>
-<file name="finalize.c" info="1447123141"/>
-<file name="initialized.c" info="1447123141"/>
-<file name="init.c" info="1447123141"/>
-<file name="initthread.c" info="1447123141"/>
-<file name="finalized.c" info="1447123141"/>
-<file name="mpi_init.h" info="1447123141"/>
+<file name="initinfo.c" info="1478973152"/>
+<file name="finalized.c" info="1478973152"/>
+<file name="initialized.c" info="1478973152"/>
+<file name="initthread.c" info="1478973152"/>
+<file name="ismain.c" info="1478973152"/>
+<file name="abort.c" info="1478973152"/>
+<file name="async.c" info="1478973152"/>
+<file name="mpi_init.h" info="1478973152"/>
+<file name="finalize.c" info="1478973152"/>
+<file name="querythread.c" info="1478973152"/>
+<file name="init.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="abort.c">
-MPID_STATE_MPI_ABORT MPI_Abort
-</fileinfo>
<fileinfo name="initinfo.c">
</fileinfo>
+<fileinfo name="finalized.c">
+MPID_STATE_MPI_FINALIZED MPI_Finalized
+</fileinfo>
+<fileinfo name="initialized.c">
+MPID_STATE_MPI_INITIALIZED MPI_Initialized
+</fileinfo>
+<fileinfo name="initthread.c">
+MPID_STATE_MPI_INIT_THREAD MPI_Init_thread
+</fileinfo>
<fileinfo name="ismain.c">
MPID_STATE_MPI_IS_THREAD_MAIN MPI_Is_thread_main
</fileinfo>
-<fileinfo name="querythread.c">
-MPID_STATE_MPI_QUERY_THREAD MPI_Query_thread
+<fileinfo name="abort.c">
+MPID_STATE_MPI_ABORT MPI_Abort
</fileinfo>
<fileinfo name="async.c">
MPID_STATE_MPIR_INIT_ASYNC_THREAD MPIR_Init_async_thread
MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD MPIR_Finalize_async_thread
</fileinfo>
+<fileinfo name="mpi_init.h">
+</fileinfo>
<fileinfo name="finalize.c">
MPID_STATE_MPI_FINALIZE MPI_Finalize
</fileinfo>
-<fileinfo name="initialized.c">
-MPID_STATE_MPI_INITIALIZED MPI_Initialized
+<fileinfo name="querythread.c">
+MPID_STATE_MPI_QUERY_THREAD MPI_Query_thread
</fileinfo>
<fileinfo name="init.c">
MPID_STATE_MPI_INIT MPI_Init
</fileinfo>
-<fileinfo name="initthread.c">
-MPID_STATE_MPI_INIT_THREAD MPI_Init_thread
-</fileinfo>
-<fileinfo name="finalized.c">
-MPID_STATE_MPI_FINALIZED MPI_Finalized
-</fileinfo>
-<fileinfo name="mpi_init.h">
-</fileinfo>
</data>
diff --git a/src/mpi/init/abort.c b/src/mpi/init/abort.c
index c6ff359..76fac72 100644
--- a/src/mpi/init/abort.c
+++ b/src/mpi/init/abort.c
@@ -74,11 +74,11 @@ int MPI_Abort(MPI_Comm comm, int errorcode)
{
static const char FCNAME[] = "MPI_Abort";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
/* FIXME: 100 is arbitrary and may not be long enough */
char abort_str[100] = "", comm_name[MPI_MAX_OBJECT_NAME];
int len = MPI_MAX_OBJECT_NAME;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ABORT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ABORT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
@@ -87,7 +87,7 @@ int MPI_Abort(MPI_Comm comm, int errorcode)
hung holding the critical section. Also note the "not thread-safe"
comment in the description of MPI_Abort above. */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ABORT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ABORT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -101,7 +101,7 @@ int MPI_Abort(MPI_Comm comm, int errorcode)
# endif /* HAVE_ERROR_CHECKING */
/* Get handles to MPI objects. */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -109,7 +109,7 @@ int MPI_Abort(MPI_Comm comm, int errorcode)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -138,12 +138,12 @@ int MPI_Abort(MPI_Comm comm, int errorcode)
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* MPID_Abort() should never return MPI_SUCCESS */
- MPIU_Assert(0);
+ MPIR_Assert(0);
/* --END ERROR HANDLING-- */
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ABORT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ABORT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/init/async.c b/src/mpi/init/async.c
index 72bfe52..39c6f24 100644
--- a/src/mpi/init/async.c
+++ b/src/mpi/init/async.c
@@ -6,12 +6,11 @@
#include "mpiimpl.h"
#include "mpi_init.h"
-#include "mpiu_thread.h"
#ifndef MPICH_MPI_FROM_PMPI
#if MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE
-static MPID_Comm *progress_comm_ptr;
+static MPIR_Comm *progress_comm_ptr;
static MPID_Thread_id_t progress_thread_id;
static MPID_Thread_mutex_t progress_mutex;
static MPID_Thread_cond_t progress_cond;
@@ -28,7 +27,7 @@ static volatile int progress_thread_done = 0;
static void progress_fn(void * data)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
MPI_Request request;
MPI_Status status;
@@ -47,23 +46,23 @@ static void progress_fn(void * data)
* this comment. */
mpi_errno = MPID_Irecv(NULL, 0, MPI_CHAR, 0, WAKE_TAG, progress_comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
- MPIU_Assert(!mpi_errno);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_Assert(!mpi_errno);
request = request_ptr->handle;
mpi_errno = MPIR_Wait_impl(&request, &status);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
/* Send a signal to the main thread saying we are done */
MPID_Thread_mutex_lock(&progress_mutex, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
progress_thread_done = 1;
MPID_Thread_mutex_unlock(&progress_mutex, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
MPID_Thread_cond_signal(&progress_cond, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
@@ -80,15 +79,15 @@ int MPIR_Init_async_thread(void)
{
#if MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_self_ptr;
+ MPIR_Comm *comm_self_ptr;
int err = 0;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_INIT_ASYNC_THREAD);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_INIT_ASYNC_THREAD);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_INIT_ASYNC_THREAD);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_INIT_ASYNC_THREAD);
/* Dup comm world for the progress thread */
- MPID_Comm_get_ptr(MPI_COMM_SELF, comm_self_ptr);
+ MPIR_Comm_get_ptr(MPI_COMM_SELF, comm_self_ptr);
mpi_errno = MPIR_Comm_dup_impl(comm_self_ptr, &progress_comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -101,7 +100,7 @@ int MPIR_Init_async_thread(void)
MPID_Thread_create((MPID_Thread_func_t) progress_fn, NULL, &progress_thread_id, &err);
MPIR_ERR_CHKANDJUMP1(err, mpi_errno, MPI_ERR_OTHER, "**mutex_create", "**mutex_create %s", strerror(err));
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_INIT_ASYNC_THREAD);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_INIT_ASYNC_THREAD);
fn_exit:
return mpi_errno;
@@ -120,46 +119,46 @@ int MPIR_Finalize_async_thread(void)
{
int mpi_errno = MPI_SUCCESS;
#if MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE
- MPID_Request *request_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
MPI_Request request;
MPI_Status status;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD);
mpi_errno = MPID_Isend(NULL, 0, MPI_CHAR, 0, WAKE_TAG, progress_comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
- MPIU_Assert(!mpi_errno);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_Assert(!mpi_errno);
request = request_ptr->handle;
mpi_errno = MPIR_Wait_impl(&request, &status);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
/* XXX DJG why is this unlock/lock necessary? Should we just YIELD here or later? */
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
MPID_Thread_mutex_lock(&progress_mutex, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
while (!progress_thread_done) {
MPID_Thread_cond_wait(&progress_cond, &progress_mutex, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
}
MPID_Thread_mutex_unlock(&progress_mutex, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
mpi_errno = MPIR_Comm_free_impl(progress_comm_ptr);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
MPID_Thread_cond_destroy(&progress_cond, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
MPID_Thread_mutex_destroy(&progress_mutex, &mpi_errno);
- MPIU_Assert(!mpi_errno);
+ MPIR_Assert(!mpi_errno);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD);
#endif /* MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE */
return mpi_errno;
diff --git a/src/mpi/init/finalize.c b/src/mpi/init/finalize.c
index 1b7eefa..02d7f87 100644
--- a/src/mpi/init/finalize.c
+++ b/src/mpi/init/finalize.c
@@ -78,8 +78,8 @@ void MPIR_Add_finalize( int (*f)( void * ), void *extra_data, int priority )
MPIR_Process.mpich_state to decide how to signal the error */
(void)MPL_internal_error_printf( "overflow in finalize stack! "
"Is MAX_FINALIZE_FUNC too small?\n" );
- if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_IN_INIT ||
- OPA_load_int(&MPIR_Process.mpich_state) == MPICH_POST_INIT)
+ if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__IN_INIT ||
+ OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__POST_INIT)
{
MPID_Abort( NULL, MPI_SUCCESS, 13, NULL );
}
@@ -145,14 +145,14 @@ int MPI_Finalize( void )
#if defined(HAVE_USLEEP) && defined(USE_COVERAGE)
int rank=0;
#endif
- MPID_MPI_FINALIZE_STATE_DECL(MPID_STATE_MPI_FINALIZE);
+ MPIR_FUNC_TERSE_FINALIZE_STATE_DECL(MPID_STATE_MPI_FINALIZE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* Note: Only one thread may ever call MPI_Finalize (MPI_Finalize may
be called at most once in any program) */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FINALIZE_FUNC_ENTER(MPID_STATE_MPI_FINALIZE);
+ MPIR_FUNC_TERSE_FINALIZE_ENTER(MPID_STATE_MPI_FINALIZE);
/* ... body of routine ... */
@@ -200,7 +200,7 @@ int MPI_Finalize( void )
MPIR_Errhandler_release_ref( MPIR_Process.comm_world->errhandler,
&in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Errhandler_mem,
+ MPIR_Handle_obj_free( &MPIR_Errhandler_mem,
MPIR_Process.comm_world->errhandler );
}
/* always set to NULL to avoid a double-release later in finalize */
@@ -213,7 +213,7 @@ int MPI_Finalize( void )
MPIR_Errhandler_release_ref( MPIR_Process.comm_self->errhandler,
&in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Errhandler_mem,
+ MPIR_Handle_obj_free( &MPIR_Errhandler_mem,
MPIR_Process.comm_self->errhandler );
}
/* always set to NULL to avoid a double-release later in finalize */
@@ -222,7 +222,7 @@ int MPI_Finalize( void )
/* FIXME: Why is this not one of the finalize callbacks?. Do we need
pre and post MPID_Finalize callbacks? */
- MPIU_Timer_finalize();
+ MPII_Timer_finalize();
/* Call the high-priority callbacks */
MPIR_Call_finalize_callbacks( MPIR_FINALIZE_CALLBACK_PRIO+1,
@@ -231,7 +231,7 @@ int MPI_Finalize( void )
/* Signal the debugger that we are about to exit. */
/* FIXME: Should this also be a finalize callback? */
#ifdef HAVE_DEBUGGER_SUPPORT
- MPIR_DebuggerSetAborting( (char *)0 );
+ MPIR_Debugger_set_aborting( (char *)0 );
#endif
mpi_errno = MPID_Finalize();
@@ -258,7 +258,7 @@ int MPI_Finalize( void )
finalize callbacks */
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- OPA_store_int(&MPIR_Process.mpich_state, MPICH_POST_FINALIZED);
+ OPA_store_int(&MPIR_Process.mpich_state, MPICH_MPI_STATE__POST_FINALIZED);
#if defined(MPICH_IS_THREADED)
MPIR_Thread_CS_Finalize();
@@ -275,7 +275,7 @@ int MPI_Finalize( void )
/* The second argument is the min id to print; memory allocated
after MPI_Init is given an id of one. This allows us to
ignore, if desired, memory leaks in the MPID_Init call */
- MPIU_trdump( (void *)0, -1 );
+ MPL_trdump( (void *)0, -1 );
}
}
#endif
@@ -306,7 +306,7 @@ int MPI_Finalize( void )
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FINALIZE_FUNC_EXIT(MPID_STATE_MPI_FINALIZE);
+ MPIR_FUNC_TERSE_FINALIZE_EXIT(MPID_STATE_MPI_FINALIZE);
return mpi_errno;
fn_fail:
@@ -318,7 +318,7 @@ int MPI_Finalize( void )
}
# endif
mpi_errno = MPIR_Err_return_comm( 0, FCNAME, mpi_errno );
- if (OPA_load_int(&MPIR_Process.mpich_state) < MPICH_POST_FINALIZED) {
+ if (OPA_load_int(&MPIR_Process.mpich_state) < MPICH_MPI_STATE__POST_FINALIZED) {
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
}
goto fn_exit;
diff --git a/src/mpi/init/finalized.c b/src/mpi/init/finalized.c
index e4c2cd2..0870ccc 100644
--- a/src/mpi/init/finalized.c
+++ b/src/mpi/init/finalized.c
@@ -48,9 +48,9 @@ int MPI_Finalized( int *flag )
static const char FCNAME[] = "MPI_Finalized";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_FINALIZED);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_FINALIZED);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_FINALIZED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_FINALIZED);
# ifdef HAVE_ERROR_CHECKING
{
@@ -69,21 +69,21 @@ int MPI_Finalized( int *flag )
/* ... body of routine ... */
- *flag = (OPA_load_int(&MPIR_Process.mpich_state) >= MPICH_POST_FINALIZED);
+ *flag = (OPA_load_int(&MPIR_Process.mpich_state) >= MPICH_MPI_STATE__POST_FINALIZED);
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_FINALIZED);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_FINALIZED);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
# ifdef HAVE_ERROR_CHECKING
fn_fail:
- if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_IN_INIT ||
- OPA_load_int(&MPIR_Process.mpich_state) == MPICH_POST_INIT)
+ if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__IN_INIT ||
+ OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__POST_INIT)
{
{
mpi_errno = MPIR_Err_create_code(
diff --git a/src/mpi/init/init.c b/src/mpi/init/init.c
index d5e01dc..340568c 100644
--- a/src/mpi/init/init.c
+++ b/src/mpi/init/init.c
@@ -4,6 +4,8 @@
* See COPYRIGHT in top-level directory.
*/
+#include <strings.h>
+
#include "mpiimpl.h"
#include "mpi_init.h"
@@ -44,7 +46,8 @@ cvars:
verbosity : MPI_T_VERBOSITY_USER_BASIC
scope : MPI_T_SCOPE_ALL_EQ
description : >-
- Sets the default thread level to use when using MPI_INIT.
+ Sets the default thread level to use when using MPI_INIT. This variable
+ is case-insensitive.
=== END_MPI_T_CVAR_INFO_BLOCK ===
*/
@@ -68,7 +71,7 @@ int MPI_Init(int *argc, char ***argv) __attribute__((weak,alias("PMPI_Init")));
#define MPI_Init PMPI_Init
/* Fortran logical values. extern'd in mpiimpl.h */
-/* MPI_Fint MPIR_F_TRUE, MPIR_F_FALSE; */
+/* MPI_Fint MPII_F_TRUE, MPII_F_FALSE; */
/* Any internal routines can go here. Make them static if possible */
@@ -120,19 +123,19 @@ int MPI_Init( int *argc, char ***argv )
int mpi_errno = MPI_SUCCESS;
int rc ATTRIBUTE((unused));
int threadLevel, provided;
- MPID_MPI_INIT_STATE_DECL(MPID_STATE_MPI_INIT);
+ MPIR_FUNC_TERSE_INIT_STATE_DECL(MPID_STATE_MPI_INIT);
rc = MPID_Wtime_init();
-#ifdef USE_DBG_LOGGING
- MPIU_DBG_PreInit( argc, argv, rc );
+#ifdef MPL_USE_DBG_LOGGING
+ MPL_dbg_pre_init( argc, argv, rc );
#endif
- MPID_MPI_INIT_FUNC_ENTER(MPID_STATE_MPI_INIT);
+ MPIR_FUNC_TERSE_INIT_ENTER(MPID_STATE_MPI_INIT);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- if (OPA_load_int(&MPIR_Process.mpich_state) != MPICH_PRE_INIT) {
+ if (OPA_load_int(&MPIR_Process.mpich_state) != MPICH_MPI_STATE__PRE_INIT) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
"**inittwice", NULL );
}
@@ -154,13 +157,13 @@ int MPI_Init( int *argc, char ***argv )
MPIR_T_env_init();
- if (!strcmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_MULTIPLE"))
+ if (!strcasecmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_MULTIPLE"))
threadLevel = MPI_THREAD_MULTIPLE;
- else if (!strcmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_SERIALIZED"))
+ else if (!strcasecmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_SERIALIZED"))
threadLevel = MPI_THREAD_SERIALIZED;
- else if (!strcmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_FUNNELED"))
+ else if (!strcasecmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_FUNNELED"))
threadLevel = MPI_THREAD_FUNNELED;
- else if (!strcmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_SINGLE"))
+ else if (!strcasecmp(MPIR_CVAR_DEFAULT_THREAD_LEVEL, "MPI_THREAD_SINGLE"))
threadLevel = MPI_THREAD_SINGLE;
else {
MPL_error_printf("Unrecognized thread level %s\n", MPIR_CVAR_DEFAULT_THREAD_LEVEL);
@@ -188,7 +191,7 @@ int MPI_Init( int *argc, char ***argv )
}
/* ... end of body of routine ... */
- MPID_MPI_INIT_FUNC_EXIT(MPID_STATE_MPI_INIT);
+ MPIR_FUNC_TERSE_INIT_EXIT(MPID_STATE_MPI_INIT);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/init/initialized.c b/src/mpi/init/initialized.c
index 0108a9f..c0dd45c 100644
--- a/src/mpi/init/initialized.c
+++ b/src/mpi/init/initialized.c
@@ -48,9 +48,9 @@ int MPI_Initialized( int *flag )
static const char FCNAME[] = "MPI_Initialized";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INITIALIZED);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INITIALIZED);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INITIALIZED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INITIALIZED);
# ifdef HAVE_ERROR_CHECKING
{
@@ -69,21 +69,21 @@ int MPI_Initialized( int *flag )
/* ... body of routine ... */
- *flag = (OPA_load_int(&MPIR_Process.mpich_state) >= MPICH_POST_INIT);
+ *flag = (OPA_load_int(&MPIR_Process.mpich_state) >= MPICH_MPI_STATE__POST_INIT);
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INITIALIZED);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INITIALIZED);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
# ifdef HAVE_ERROR_CHECKING
fn_fail:
- if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_IN_INIT ||
- OPA_load_int(&MPIR_Process.mpich_state) == MPICH_POST_INIT)
+ if (OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__IN_INIT ||
+ OPA_load_int(&MPIR_Process.mpich_state) == MPICH_MPI_STATE__POST_INIT)
{
{
mpi_errno = MPIR_Err_create_code(
diff --git a/src/mpi/init/initinfo.c b/src/mpi/init/initinfo.c
index ad79819..a524cf9 100644
--- a/src/mpi/init/initinfo.c
+++ b/src/mpi/init/initinfo.c
@@ -12,11 +12,12 @@
and configure information without requiring the user to run an MPI
program
*/
-const char MPIR_Version_string[] = MPICH_VERSION;
-const char MPIR_Version_date[] = MPICH_VERSION_DATE;
-const char MPIR_Version_configure[] = MPICH_CONFIGURE_ARGS_CLEAN;
-const char MPIR_Version_device[] = MPICH_DEVICE;
-const char MPIR_Version_CC[] = MPICH_COMPILER_CC;
-const char MPIR_Version_CXX[] = MPICH_COMPILER_CXX;
-const char MPIR_Version_F77[] = MPICH_COMPILER_F77;
-const char MPIR_Version_FC[] = MPICH_COMPILER_FC;
+const char MPII_Version_string[] = MPICH_VERSION;
+const char MPII_Version_date[] = MPICH_VERSION_DATE;
+const char MPII_Version_configure[] = MPICH_CONFIGURE_ARGS_CLEAN;
+const char MPII_Version_device[] = MPICH_DEVICE;
+const char MPII_Version_CC[] = MPICH_COMPILER_CC;
+const char MPII_Version_CXX[] = MPICH_COMPILER_CXX;
+const char MPII_Version_F77[] = MPICH_COMPILER_F77;
+const char MPII_Version_FC[] = MPICH_COMPILER_FC;
+const char MPII_Version_custom[] = MPICH_CUSTOM_STRING;
diff --git a/src/mpi/init/initthread.c b/src/mpi/init/initthread.c
index ab1f771..a5df4cc 100644
--- a/src/mpi/init/initthread.c
+++ b/src/mpi/init/initthread.c
@@ -14,7 +14,7 @@
*/
#include "mpiimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
#include "datatype.h"
#include "mpi_init.h"
#ifdef HAVE_CRTDBG_H
@@ -82,20 +82,28 @@ int MPI_Init_thread(int *argc, char ***argv, int required, int *provided) __attr
/* Any internal routines can go here. Make them static if possible */
/* Global variables can be initialized here */
-MPICH_PerProcess_t MPIR_Process = { OPA_INT_T_INITIALIZER(MPICH_PRE_INIT) };
+MPIR_Process_t MPIR_Process = { OPA_INT_T_INITIALIZER(MPICH_MPI_STATE__PRE_INIT) };
/* all other fields in MPIR_Process are irrelevant */
MPIR_Thread_info_t MPIR_ThreadInfo = { 0 };
+#if defined(MPICH_IS_THREADED) && defined(MPL_TLS_SPECIFIER)
+MPL_TLS_SPECIFIER MPIR_Per_thread_t MPIR_Per_thread = { 0 };
+#else
+MPIR_Per_thread_t MPIR_Per_thread = { 0 };
+#endif
+
+MPID_Thread_tls_t MPIR_Per_thread_key;
+
/* These are initialized as null (avoids making these into common symbols).
If the Fortran binding is supported, these can be initialized to
their Fortran values (MPI only requires that they be valid between
MPI_Init and MPI_Finalize) */
-MPIU_DLL_SPEC MPI_Fint *MPI_F_STATUS_IGNORE = 0;
-MPIU_DLL_SPEC MPI_Fint *MPI_F_STATUSES_IGNORE = 0;
+MPIU_DLL_SPEC MPI_Fint *MPI_F_STATUS_IGNORE ATTRIBUTE((used)) = 0;
+MPIU_DLL_SPEC MPI_Fint *MPI_F_STATUSES_IGNORE ATTRIBUTE((used)) = 0;
/* This will help force the load of initinfo.o, which contains data about
how MPICH was configured. */
-extern const char MPIR_Version_device[];
+extern const char MPII_Version_device[];
/* Make sure the Fortran symbols are initialized unless it will cause problems
for C programs linked with the C compilers (i.e., not using the
@@ -121,7 +129,7 @@ void mpirinitf_(void);
/* style: allow:fprintf:1 sig:0 */
static int assert_hook( int reportType, char *message, int *returnValue )
{
- MPIU_UNREFERENCED_ARG(reportType);
+ MPL_UNREFERENCED_ARG(reportType);
fprintf(stderr, "%s", message);
if (returnValue != NULL)
ExitProcess((UINT)(*returnValue));
@@ -158,6 +166,19 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
#if defined(MPICH_IS_THREADED)
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL || \
+ MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+MPID_Thread_mutex_t MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX;
+#endif
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+MPID_Thread_mutex_t MPIR_THREAD_POBJ_HANDLE_MUTEX;
+MPID_Thread_mutex_t MPIR_THREAD_POBJ_MSGQ_MUTEX;
+MPID_Thread_mutex_t MPIR_THREAD_POBJ_COMPLETION_MUTEX;
+MPID_Thread_mutex_t MPIR_THREAD_POBJ_CTX_MUTEX;
+MPID_Thread_mutex_t MPIR_THREAD_POBJ_PMI_MUTEX;
+#endif
+
/* These routine handle any thread initialization that my be required */
#undef FUNCNAME
#define FUNCNAME thread_cs_init
@@ -166,48 +187,42 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
static int thread_cs_init( void )
{
int err;
- MPID_THREADPRIV_DECL;
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL
/* There is a single, global lock, held for the duration of an MPI call */
MPID_Thread_mutex_create(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
- MPIU_Assert(err == 0);
- MPID_Thread_mutex_create(&MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT
- /* MPICH_THREAD_GRANULARITY_PER_OBJECT: Multiple locks */
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+ /* MPICH_THREAD_GRANULARITY__POBJ: Multiple locks */
MPID_Thread_mutex_create(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_create(&MPIR_THREAD_POBJ_HANDLE_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_create(&MPIR_THREAD_POBJ_MSGQ_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_create(&MPIR_THREAD_POBJ_COMPLETION_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_create(&MPIR_THREAD_POBJ_CTX_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_create(&MPIR_THREAD_POBJ_PMI_MUTEX, &err);
- MPIU_Assert(err == 0);
- MPID_Thread_mutex_create(&MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_LOCK_FREE
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__LOCKFREE
/* Updates to shared data and access to shared services is handled without
locks where ever possible. */
#error lock-free not yet implemented
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_SINGLE
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__SINGLE
/* No thread support, make all operations a no-op */
#else
#error Unrecognized thread granularity
#endif
- MPID_THREADPRIV_INITKEY;
- MPID_THREADPRIV_INIT;
+ MPID_THREADPRIV_KEY_CREATE;
- MPIU_DBG_MSG(THREAD,TYPICAL,"Created global mutex and private storage");
+ MPL_DBG_MSG(MPIR_DBG_INIT,TYPICAL,"Created global mutex and private storage");
return MPI_SUCCESS;
}
@@ -219,42 +234,42 @@ int MPIR_Thread_CS_Finalize( void )
{
int err;
- MPIU_DBG_MSG(THREAD,TYPICAL,"Freeing global mutex and private storage");
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL
+ MPL_DBG_MSG(MPIR_DBG_INIT,TYPICAL,"Freeing global mutex and private storage");
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL
/* There is a single, global lock, held for the duration of an MPI call */
MPID_Thread_mutex_destroy(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT
- /* MPICH_THREAD_GRANULARITY_PER_OBJECT: There are multiple locks,
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+ /* MPICH_THREAD_GRANULARITY__POBJ: There are multiple locks,
* one for each logical class (e.g., each type of object) */
MPID_Thread_mutex_destroy(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_destroy(&MPIR_THREAD_POBJ_HANDLE_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_destroy(&MPIR_THREAD_POBJ_MSGQ_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_destroy(&MPIR_THREAD_POBJ_COMPLETION_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_destroy(&MPIR_THREAD_POBJ_CTX_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
MPID_Thread_mutex_destroy(&MPIR_THREAD_POBJ_PMI_MUTEX, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_LOCK_FREE
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__LOCKFREE
/* Updates to shared data and access to shared services is handled without
locks where ever possible. */
#error lock-free not yet implemented
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_SINGLE
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__SINGLE
/* No thread support, make all operations a no-op */
#else
#error Unrecognized thread granularity
#endif
- MPID_THREADPRIV_FINALIZE;
+ MPID_THREADPRIV_KEY_DESTROY;
return MPI_SUCCESS;
}
@@ -269,16 +284,33 @@ int *MPIR_C_MPI_UNWEIGHTED;
int *MPIR_C_MPI_WEIGHTS_EMPTY;
int *MPIR_C_MPI_ERRCODES_IGNORE;
-MPI_F08_Status MPIR_F08_MPI_STATUS_IGNORE_OBJ;
-MPI_F08_Status MPIR_F08_MPI_STATUSES_IGNORE_OBJ[1];
+MPI_F08_status MPIR_F08_MPI_STATUS_IGNORE_OBJ;
+MPI_F08_status MPIR_F08_MPI_STATUSES_IGNORE_OBJ[1];
int MPIR_F08_MPI_IN_PLACE;
int MPIR_F08_MPI_BOTTOM;
/* Althought the two STATUS pointers are required but the MPI3.0, they are not used in MPICH F08 binding */
-MPI_F08_Status *MPI_F08_STATUS_IGNORE = &MPIR_F08_MPI_STATUS_IGNORE_OBJ;
-MPI_F08_Status *MPI_F08_STATUSES_IGNORE = &MPIR_F08_MPI_STATUSES_IGNORE_OBJ[0];
+MPI_F08_status *MPI_F08_STATUS_IGNORE = &MPIR_F08_MPI_STATUS_IGNORE_OBJ;
+MPI_F08_status *MPI_F08_STATUSES_IGNORE = &MPIR_F08_MPI_STATUSES_IGNORE_OBJ[0];
#endif
+#if defined (MPL_USE_DBG_LOGGING)
+MPL_dbg_class MPIR_DBG_INIT;
+MPL_dbg_class MPIR_DBG_PT2PT;
+MPL_dbg_class MPIR_DBG_THREAD;
+MPL_dbg_class MPIR_DBG_DATATYPE;
+MPL_dbg_class MPIR_DBG_HANDLE;
+MPL_dbg_class MPIR_DBG_COMM;
+MPL_dbg_class MPIR_DBG_BSEND;
+MPL_dbg_class MPIR_DBG_ERRHAND;
+MPL_dbg_class MPIR_DBG_OTHER;
+MPL_dbg_class MPIR_DBG_REQUEST;
+
+/* these classes might need to move out later */
+MPL_dbg_class MPIR_DBG_ASSERT;
+MPL_dbg_class MPIR_DBG_STRING;
+#endif /* MPL_USE_DBG_LOGGING */
+
#undef FUNCNAME
#define FUNCNAME MPIR_Init_thread
#undef FCNAME
@@ -290,7 +322,7 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
int has_env;
int thread_provided;
int exit_init_cs_on_failure = 0;
- MPID_Info *info_ptr;
+ MPIR_Info *info_ptr;
/* For any code in the device that wants to check for runtime
decisions on the value of isThreaded, set a provisional
@@ -387,34 +419,34 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
(partially) initialize predefined communicators. comm_parent is
intially NULL and will be allocated by the device if the process group
was started using one of the MPI_Comm_spawn functions. */
- MPIR_Process.comm_world = MPID_Comm_builtin + 0;
- MPIR_Comm_init(MPIR_Process.comm_world);
+ MPIR_Process.comm_world = MPIR_Comm_builtin + 0;
+ MPII_Comm_init(MPIR_Process.comm_world);
MPIR_Process.comm_world->handle = MPI_COMM_WORLD;
- MPIR_Process.comm_world->context_id = 0 << MPID_CONTEXT_PREFIX_SHIFT;
- MPIR_Process.comm_world->recvcontext_id = 0 << MPID_CONTEXT_PREFIX_SHIFT;
- MPIR_Process.comm_world->comm_kind = MPID_INTRACOMM;
+ MPIR_Process.comm_world->context_id = 0 << MPIR_CONTEXT_PREFIX_SHIFT;
+ MPIR_Process.comm_world->recvcontext_id = 0 << MPIR_CONTEXT_PREFIX_SHIFT;
+ MPIR_Process.comm_world->comm_kind = MPIR_COMM_KIND__INTRACOMM;
/* This initialization of the comm name could be done only when
comm_get_name is called */
- MPIU_Strncpy(MPIR_Process.comm_world->name, "MPI_COMM_WORLD",
+ MPL_strncpy(MPIR_Process.comm_world->name, "MPI_COMM_WORLD",
MPI_MAX_OBJECT_NAME);
- MPIR_Process.comm_self = MPID_Comm_builtin + 1;
- MPIR_Comm_init(MPIR_Process.comm_self);
+ MPIR_Process.comm_self = MPIR_Comm_builtin + 1;
+ MPII_Comm_init(MPIR_Process.comm_self);
MPIR_Process.comm_self->handle = MPI_COMM_SELF;
- MPIR_Process.comm_self->context_id = 1 << MPID_CONTEXT_PREFIX_SHIFT;
- MPIR_Process.comm_self->recvcontext_id = 1 << MPID_CONTEXT_PREFIX_SHIFT;
- MPIR_Process.comm_self->comm_kind = MPID_INTRACOMM;
- MPIU_Strncpy(MPIR_Process.comm_self->name, "MPI_COMM_SELF",
+ MPIR_Process.comm_self->context_id = 1 << MPIR_CONTEXT_PREFIX_SHIFT;
+ MPIR_Process.comm_self->recvcontext_id = 1 << MPIR_CONTEXT_PREFIX_SHIFT;
+ MPIR_Process.comm_self->comm_kind = MPIR_COMM_KIND__INTRACOMM;
+ MPL_strncpy(MPIR_Process.comm_self->name, "MPI_COMM_SELF",
MPI_MAX_OBJECT_NAME);
#ifdef MPID_NEEDS_ICOMM_WORLD
- MPIR_Process.icomm_world = MPID_Comm_builtin + 2;
- MPIR_Comm_init(MPIR_Process.icomm_world);
+ MPIR_Process.icomm_world = MPIR_Comm_builtin + 2;
+ MPII_Comm_init(MPIR_Process.icomm_world);
MPIR_Process.icomm_world->handle = MPIR_ICOMM_WORLD;
- MPIR_Process.icomm_world->context_id = 2 << MPID_CONTEXT_PREFIX_SHIFT;
- MPIR_Process.icomm_world->recvcontext_id= 2 << MPID_CONTEXT_PREFIX_SHIFT;
- MPIR_Process.icomm_world->comm_kind = MPID_INTRACOMM;
- MPIU_Strncpy(MPIR_Process.icomm_world->name, "MPI_ICOMM_WORLD",
+ MPIR_Process.icomm_world->context_id = 2 << MPIR_CONTEXT_PREFIX_SHIFT;
+ MPIR_Process.icomm_world->recvcontext_id= 2 << MPIR_CONTEXT_PREFIX_SHIFT;
+ MPIR_Process.icomm_world->comm_kind = MPIR_COMM_KIND__INTRACOMM;
+ MPL_strncpy(MPIR_Process.icomm_world->name, "MPI_ICOMM_WORLD",
MPI_MAX_OBJECT_NAME);
/* Note that these communicators are not ready for use - MPID_Init
@@ -425,8 +457,8 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
/* Setup the initial communicator list in case we have
enabled the debugger message-queue interface */
- MPIR_COMML_REMEMBER( MPIR_Process.comm_world );
- MPIR_COMML_REMEMBER( MPIR_Process.comm_self );
+ MPII_COMML_REMEMBER( MPIR_Process.comm_world );
+ MPII_COMML_REMEMBER( MPIR_Process.comm_self );
/* Call any and all MPID_Init type functions */
MPIR_Err_init();
@@ -452,7 +484,7 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
/* define MPI as initialized so that we can use MPI functions within
MPID_Init if necessary */
- OPA_store_int(&MPIR_Process.mpich_state, MPICH_IN_INIT);
+ OPA_store_int(&MPIR_Process.mpich_state, MPICH_MPI_STATE__IN_INIT);
/* We can't acquire any critical sections until this point. Any
* earlier the basic data structures haven't been initialized */
@@ -462,9 +494,9 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
/* create MPI_INFO_NULL object */
/* FIXME: Currently this info object is empty, we need to add data to this
as defined by the standard. */
- info_ptr = MPID_Info_builtin + 1;
+ info_ptr = MPIR_Info_builtin + 1;
info_ptr->handle = MPI_INFO_ENV;
- MPIU_Object_set_ref(info_ptr, 1);
+ MPIR_Object_set_ref(info_ptr, 1);
info_ptr->next = NULL;
info_ptr->key = NULL;
info_ptr->value = NULL;
@@ -474,16 +506,20 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Assert: tag_ub should be a power of 2 minus 1 */
- MPIU_Assert(((unsigned)MPIR_Process.attrs.tag_ub & ((unsigned)MPIR_Process.attrs.tag_ub + 1)) == 0);
+ MPIR_Assert(((unsigned)MPIR_Process.attrs.tag_ub & ((unsigned)MPIR_Process.attrs.tag_ub + 1)) == 0);
/* Set aside tag space for tagged collectives and failure notification */
+#ifdef HAVE_TAG_ERROR_BITS
MPIR_Process.attrs.tag_ub >>= 3;
+#else
+ MPIR_Process.attrs.tag_ub >>= 1;
+#endif
/* The bit for error checking is set in a macro in mpiimpl.h for
* performance reasons. */
MPIR_Process.tagged_coll_mask = MPIR_Process.attrs.tag_ub + 1;
/* Assert: tag_ub is at least the minimum asked for in the MPI spec */
- MPIU_Assert( MPIR_Process.attrs.tag_ub >= 32767 );
+ MPIR_Assert( MPIR_Process.attrs.tag_ub >= 32767 );
/* Capture the level of thread support provided */
MPIR_ThreadInfo.thread_provided = thread_provided;
@@ -493,22 +529,46 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
#endif /* MPICH_IS_THREADED */
/* FIXME: Define these in the interface. Does Timer init belong here? */
- MPIU_dbg_init(MPIR_Process.comm_world->rank);
- MPIU_Timer_init(MPIR_Process.comm_world->rank,
+ MPII_Timer_init(MPIR_Process.comm_world->rank,
MPIR_Process.comm_world->local_size);
#ifdef USE_MEMORY_TRACING
- MPIU_trinit( MPIR_Process.comm_world->rank );
+#ifdef MPICH_IS_THREADED
+ MPL_trinit( MPIR_Process.comm_world->rank, MPIR_ThreadInfo.isThreaded );
+#else
+ MPL_trinit( MPIR_Process.comm_world->rank, 0 );
+#endif
/* Indicate that we are near the end of the init step; memory
allocated already will have an id of zero; this helps
separate memory leaks in the initialization code from
leaks in the "active" code */
- /* Uncomment this code to leave out any of the MPID_Init/etc
- memory allocations from the memory leak testing */
- /* MPIU_trid( 1 ); */
#endif
-#ifdef USE_DBG_LOGGING
- MPIU_DBG_Init( argc, argv, has_args, has_env,
- MPIR_Process.comm_world->rank );
+#ifdef MPL_USE_DBG_LOGGING
+ /* FIXME: This is a hack to handle the common case of two worlds.
+ * If the parent comm is not NULL, we always give the world number
+ * as "1" (false). */
+#ifdef MPICH_IS_THREADED
+ MPL_dbg_init( argc, argv, has_args, has_env,
+ MPIR_Process.comm_parent != NULL, MPIR_Process.comm_world->rank,
+ MPIR_ThreadInfo.isThreaded );
+#else
+ MPL_dbg_init( argc, argv, has_args, has_env,
+ MPIR_Process.comm_parent != NULL, MPIR_Process.comm_world->rank,
+ 0 );
+#endif
+
+ MPIR_DBG_INIT = MPL_dbg_class_alloc("INIT", "init");
+ MPIR_DBG_PT2PT = MPL_dbg_class_alloc("PT2PT", "pt2pt");
+ MPIR_DBG_THREAD = MPL_dbg_class_alloc("THREAD", "thread");
+ MPIR_DBG_DATATYPE = MPL_dbg_class_alloc("DATATYPE", "datatype");
+ MPIR_DBG_HANDLE = MPL_dbg_class_alloc("HANDLE", "handle");
+ MPIR_DBG_COMM = MPL_dbg_class_alloc("COMM", "comm");
+ MPIR_DBG_BSEND = MPL_dbg_class_alloc("BSEND", "bsend");
+ MPIR_DBG_ERRHAND = MPL_dbg_class_alloc("ERRHAND", "errhand");
+ MPIR_DBG_OTHER = MPL_dbg_class_alloc("OTHER", "other");
+ MPIR_DBG_REQUEST = MPL_dbg_class_alloc("REQUEST", "request");
+
+ MPIR_DBG_ASSERT = MPL_dbg_class_alloc("ASSERT", "assert");
+ MPIR_DBG_STRING = MPL_dbg_class_alloc("STRING", "string");
#endif
/* Initialize the C versions of the Fortran link-time constants.
@@ -524,28 +584,27 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
#endif
/* FIXME: Does this need to come before the call to MPID_InitComplete?
- For some debugger support, MPIR_WaitForDebugger may want to use
+ For some debugger support, MPII_Wait_for_debugger may want to use
MPI communication routines to collect information for the debugger */
#ifdef HAVE_DEBUGGER_SUPPORT
- MPIR_WaitForDebugger();
+ MPII_Wait_for_debugger();
#endif
/* Let the device know that the rest of the init process is completed */
if (mpi_errno == MPI_SUCCESS)
mpi_errno = MPID_InitCompleted();
-fn_exit:
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
/* Make fields of MPIR_Process global visible and set mpich_state
atomically so that MPI_Initialized() etc. are thread safe */
OPA_write_barrier();
- OPA_store_int(&MPIR_Process.mpich_state, MPICH_POST_INIT);
+ OPA_store_int(&MPIR_Process.mpich_state, MPICH_MPI_STATE__POST_INIT);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
/* signal to error handling routines that core services are unavailable */
- OPA_store_int(&MPIR_Process.mpich_state, MPICH_PRE_INIT);
+ OPA_store_int(&MPIR_Process.mpich_state, MPICH_MPI_STATE__PRE_INIT);
if (exit_init_cs_on_failure) {
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
@@ -604,20 +663,20 @@ int MPI_Init_thread( int *argc, char ***argv, int required, int *provided )
{
int mpi_errno = MPI_SUCCESS;
int rc ATTRIBUTE((unused)), reqd = required;
- MPID_MPI_INIT_STATE_DECL(MPID_STATE_MPI_INIT_THREAD);
+ MPIR_FUNC_TERSE_INIT_STATE_DECL(MPID_STATE_MPI_INIT_THREAD);
rc = MPID_Wtime_init();
-#ifdef USE_DBG_LOGGING
- MPIU_DBG_PreInit( argc, argv, rc );
+#ifdef MPL_USE_DBG_LOGGING
+ MPL_dbg_pre_init( argc, argv, rc );
#endif
- MPID_MPI_INIT_FUNC_ENTER(MPID_STATE_MPI_INIT_THREAD);
+ MPIR_FUNC_TERSE_INIT_ENTER(MPID_STATE_MPI_INIT_THREAD);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- if (OPA_load_int(&MPIR_Process.mpich_state) != MPICH_PRE_INIT) {
+ if (OPA_load_int(&MPIR_Process.mpich_state) != MPICH_MPI_STATE__PRE_INIT) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "MPI_Init_thread", __LINE__, MPI_ERR_OTHER,
"**inittwice", 0 );
}
@@ -661,7 +720,7 @@ int MPI_Init_thread( int *argc, char ***argv, int required, int *provided )
/* ... end of body of routine ... */
- MPID_MPI_INIT_FUNC_EXIT(MPID_STATE_MPI_INIT_THREAD);
+ MPIR_FUNC_TERSE_INIT_EXIT(MPID_STATE_MPI_INIT_THREAD);
return mpi_errno;
fn_fail:
@@ -675,7 +734,7 @@ int MPI_Init_thread( int *argc, char ***argv, int required, int *provided )
}
# endif
mpi_errno = MPIR_Err_return_comm( 0, FCNAME, mpi_errno );
- MPID_MPI_INIT_FUNC_EXIT(MPID_STATE_MPI_INIT_THREAD);
+ MPIR_FUNC_TERSE_INIT_EXIT(MPID_STATE_MPI_INIT_THREAD);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
diff --git a/src/mpi/init/ismain.c b/src/mpi/init/ismain.c
index 47a1295..0d32580 100644
--- a/src/mpi/init/ismain.c
+++ b/src/mpi/init/ismain.c
@@ -49,7 +49,7 @@ int MPI_Is_thread_main( int *flag )
static const char FCNAME[] = "MPI_Is_thread_main";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IS_THREAD_MAIN);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IS_THREAD_MAIN);
MPIR_ERRTEST_INITIALIZED_ORDIE();
# ifdef HAVE_ERROR_CHECKING
@@ -62,7 +62,7 @@ int MPI_Is_thread_main( int *flag )
}
# endif /* HAVE_ERROR_CHECKING */
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IS_THREAD_MAIN);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IS_THREAD_MAIN);
/* ... body of routine ... */
# if MPICH_THREAD_LEVEL <= MPI_THREAD_FUNNELED || ! defined(MPICH_IS_THREADED)
@@ -82,7 +82,7 @@ int MPI_Is_thread_main( int *flag )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IS_THREAD_MAIN);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IS_THREAD_MAIN);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/init/querythread.c b/src/mpi/init/querythread.c
index ae281d8..5f79cef 100644
--- a/src/mpi/init/querythread.c
+++ b/src/mpi/init/querythread.c
@@ -66,11 +66,11 @@ int MPI_Query_thread( int *provided )
static const char FCNAME[] = "MPI_Query_thread";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_QUERY_THREAD);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_QUERY_THREAD);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_QUERY_THREAD);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_QUERY_THREAD);
# ifdef HAVE_ERROR_CHECKING
{
@@ -89,7 +89,7 @@ int MPI_Query_thread( int *provided )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_QUERY_THREAD);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_QUERY_THREAD);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/io/.state-cache b/src/mpi/io/.state-cache
deleted file mode 100644
index 8078de5..0000000
--- a/src/mpi/io/.state-cache
+++ /dev/null
@@ -1,7 +0,0 @@
-<dir>
-<file name="fileutil.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="fileutil.c">
-</fileinfo>
-</data>
diff --git a/src/mpi/io/Makefile.mk b/src/mpi/io/Makefile.mk
deleted file mode 100644
index 9fa99b8..0000000
--- a/src/mpi/io/Makefile.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-mpi_core_sources += \
- src/mpi/io/fileutil.c
-
diff --git a/src/mpi/io/fileutil.c b/src/mpi/io/fileutil.c
deleted file mode 100644
index 9467084..0000000
--- a/src/mpi/io/fileutil.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-
-#ifndef MPID_FILE_PREALLOC
-#define MPID_FILE_PREALLOC 8
-#endif
-
-/* Preallocated file objects */
-MPID_File MPID_File_direct[MPID_FILE_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_File_mem = { 0, 0, 0, 0, MPID_FILE,
- sizeof(MPID_File), MPID_File_direct,
- MPID_FILE_PREALLOC};
-
diff --git a/src/mpi/misc/.state-cache b/src/mpi/misc/.state-cache
index ec55932..81ca35a 100644
--- a/src/mpi/misc/.state-cache
+++ b/src/mpi/misc/.state-cache
@@ -1,10 +1,10 @@
<dir>
-<file name="library_version.c" info="1447123141"/>
-<file name="getpname.c" info="1447123141"/>
-<file name="version.c" info="1447123141"/>
-<file name="aint_add.c" info="1447123141"/>
-<file name="pcontrol.c" info="1447123141"/>
-<file name="aint_diff.c" info="1447123141"/>
+<file name="library_version.c" info="1478973152"/>
+<file name="getpname.c" info="1478973152"/>
+<file name="version.c" info="1478973152"/>
+<file name="aint_diff.c" info="1478973152"/>
+<file name="pcontrol.c" info="1478973152"/>
+<file name="aint_add.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="library_version.c">
@@ -16,13 +16,13 @@ MPID_STATE_MPI_GET_PROCESSOR_NAME MPI_Get_processor_name
<fileinfo name="version.c">
MPID_STATE_MPI_GET_VERSION MPI_Get_version
</fileinfo>
-<fileinfo name="aint_add.c">
-MPID_STATE_MPI_AINT_ADD MPI_Aint_add
+<fileinfo name="aint_diff.c">
+MPID_STATE_MPI_AINT_DIFF MPI_Aint_diff
</fileinfo>
<fileinfo name="pcontrol.c">
MPID_STATE_MPI_PCONTROL MPI_Pcontrol
</fileinfo>
-<fileinfo name="aint_diff.c">
-MPID_STATE_MPI_AINT_DIFF MPI_Aint_diff
+<fileinfo name="aint_add.c">
+MPID_STATE_MPI_AINT_ADD MPI_Aint_add
</fileinfo>
</data>
diff --git a/src/mpi/misc/aint_add.c b/src/mpi/misc/aint_add.c
index 7bad236..8c454a8 100644
--- a/src/mpi/misc/aint_add.c
+++ b/src/mpi/misc/aint_add.c
@@ -47,8 +47,10 @@ to MPI_GET_ADDRESS and disp represents a signed integer displacement. The result
address is valid only at the process that generated base, and it must correspond
to a location in the same object referenced by base. The addition is performed in
a manner that results in the correct MPI_Aint representation of the output address,
-as if the process that originally produced base had called:
+as if the process that originally produced base had called\:
+.vb
MPI_Get_address((char *) base + disp, &result)
+.ve
.seealso: MPI_Aint_diff
@*/
@@ -56,13 +58,13 @@ as if the process that originally produced base had called:
MPI_Aint MPI_Aint_add(MPI_Aint base, MPI_Aint disp)
{
MPI_Aint result;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_AINT_ADD);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_AINT_ADD);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_AINT_ADD);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_AINT_ADD);
result = MPID_Aint_add(base, disp);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_AINT_ADD);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_AINT_ADD);
return result;
}
diff --git a/src/mpi/misc/aint_diff.c b/src/mpi/misc/aint_diff.c
index 61147e4..93fcd87 100644
--- a/src/mpi/misc/aint_diff.c
+++ b/src/mpi/misc/aint_diff.c
@@ -48,7 +48,9 @@ process that generated addr1 and addr2, and addr1 and addr2 must correspond to
locations in the same object in the same process. The difference is calculated
in a manner that results the signed difference from addr1 to addr2, as if the
process that originally produced the addresses had called
+.vb
(char *) addr1 - (char *) addr2
+.ve
on the addresses initially passed to MPI_GET_ADDRESS.
.seealso: MPI_Aint_add
@@ -57,13 +59,13 @@ on the addresses initially passed to MPI_GET_ADDRESS.
MPI_Aint MPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
{
MPI_Aint result;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_AINT_DIFF);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_AINT_DIFF);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_AINT_DIFF);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_AINT_DIFF);
result = MPID_Aint_diff(addr1, addr2);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_AINT_DIFF);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_AINT_DIFF);
return result;
}
diff --git a/src/mpi/misc/getpname.c b/src/mpi/misc/getpname.c
index 26042c8..f4fcaa8 100644
--- a/src/mpi/misc/getpname.c
+++ b/src/mpi/misc/getpname.c
@@ -72,11 +72,11 @@ int MPI_Get_processor_name( char *name, int *resultlen )
{
static const char FCNAME[] = "MPI_Get_processor_name";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_PROCESSOR_NAME);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_PROCESSOR_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GET_PROCESSOR_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GET_PROCESSOR_NAME);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -100,7 +100,7 @@ int MPI_Get_processor_name( char *name, int *resultlen )
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GET_PROCESSOR_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GET_PROCESSOR_NAME);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/misc/library_version.c b/src/mpi/misc/library_version.c
index 7cb3655..410b190 100644
--- a/src/mpi/misc/library_version.c
+++ b/src/mpi/misc/library_version.c
@@ -48,11 +48,11 @@ Output Parameters:
int MPI_Get_library_version(char *version, int *resultlen)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_LIBRARY_VERSION);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_LIBRARY_VERSION);
/* Note that this routine may be called before MPI_Init */
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GET_LIBRARY_VERSION);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GET_LIBRARY_VERSION);
/* Validate parameters and objects (post conversion) */
#ifdef HAVE_ERROR_CHECKING
@@ -77,9 +77,9 @@ int MPI_Get_library_version(char *version, int *resultlen)
"MPICH CXX:\t%s\n"
"MPICH F77:\t%s\n"
"MPICH FC:\t%s\n",
- MPIR_Version_string, MPIR_Version_date, MPIR_Version_device,
- MPIR_Version_configure, MPIR_Version_CC, MPIR_Version_CXX,
- MPIR_Version_F77, MPIR_Version_FC);
+ MPII_Version_string, MPII_Version_date, MPII_Version_device,
+ MPII_Version_configure, MPII_Version_CC, MPII_Version_CXX,
+ MPII_Version_F77, MPII_Version_FC);
*resultlen = (int)strlen(version);
@@ -88,7 +88,7 @@ int MPI_Get_library_version(char *version, int *resultlen)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GET_LIBRARY_VERSION);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GET_LIBRARY_VERSION);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/misc/pcontrol.c b/src/mpi/misc/pcontrol.c
index 02627aa..4f76b8f 100644
--- a/src/mpi/misc/pcontrol.c
+++ b/src/mpi/misc/pcontrol.c
@@ -53,11 +53,11 @@ int MPI_Pcontrol(const int level, ...)
{
int mpi_errno = MPI_SUCCESS;
va_list list;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PCONTROL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PCONTROL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_PCONTROL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_PCONTROL);
/* ... body of routine ... */
@@ -70,7 +70,7 @@ int MPI_Pcontrol(const int level, ...)
va_end( list );
/* ... end of body of routine ... */
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_PCONTROL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_PCONTROL);
return mpi_errno;
/* There should never be any fn_fail case; this suppresses warnings from
compilers that object to unused labels */
diff --git a/src/mpi/misc/version.c b/src/mpi/misc/version.c
index 995f065..c4160fb 100644
--- a/src/mpi/misc/version.c
+++ b/src/mpi/misc/version.c
@@ -50,12 +50,12 @@ int MPI_Get_version( int *version, int *subversion )
static const char FCNAME[] = "MPI_Get_version";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_VERSION);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_VERSION);
/* Note that this routine may be called before MPI_Init */
/* MPIR_ERRTEST_INITIALIZED_ORDIE(); */
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GET_VERSION);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GET_VERSION);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -79,7 +79,7 @@ int MPI_Get_version( int *version, int *subversion )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GET_VERSION);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GET_VERSION);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/pt2pt/.state-cache b/src/mpi/pt2pt/.state-cache
index 15c92ae..58758ab 100644
--- a/src/mpi/pt2pt/.state-cache
+++ b/src/mpi/pt2pt/.state-cache
@@ -1,181 +1,181 @@
<dir>
-<file name="ssend.c" info="1447123141"/>
-<file name="irecv.c" info="1447123141"/>
-<file name="recv_init.c" info="1447123141"/>
-<file name="startall.c" info="1447123141"/>
-<file name="isend.c" info="1447123141"/>
-<file name="bsendutil.h" info="1447123141"/>
-<file name="imrecv.c" info="1447123141"/>
-<file name="start.c" info="1447123141"/>
-<file name="bufattach.c" info="1447123141"/>
-<file name="test_cancelled.c" info="1447123141"/>
-<file name="bsendutil.c" info="1447123141"/>
-<file name="send.c" info="1447123141"/>
-<file name="mrecv.c" info="1447123141"/>
-<file name="rsend_init.c" info="1447123141"/>
-<file name="send_init.c" info="1447123141"/>
-<file name="issend.c" info="1447123141"/>
-<file name="cancel.c" info="1447123141"/>
-<file name="request_free.c" info="1447123141"/>
-<file name="buffree.c" info="1447123141"/>
-<file name="irsend.c" info="1447123141"/>
-<file name="mpir_request.c" info="1447123141"/>
-<file name="testall.c" info="1447123141"/>
-<file name="waitany.c" info="1447123141"/>
-<file name="bsend.c" info="1447123141"/>
-<file name="improbe.c" info="1447123141"/>
-<file name="sendrecv.c" info="1447123141"/>
-<file name="iprobe.c" info="1447123141"/>
-<file name="wait.c" info="1447123141"/>
-<file name="status_set_cancelled.c" info="1447123141"/>
-<file name="testsome.c" info="1447123141"/>
-<file name="mprobe.c" info="1447123141"/>
-<file name="greq_start.c" info="1447123141"/>
-<file name="sendrecv_rep.c" info="1447123141"/>
-<file name="request_get_status.c" info="1447123141"/>
-<file name="bsend_init.c" info="1447123141"/>
-<file name="ibsend.c" info="1447123141"/>
-<file name="recv.c" info="1447123141"/>
-<file name="waitsome.c" info="1447123141"/>
-<file name="waitall.c" info="1447123141"/>
-<file name="greq_complete.c" info="1447123141"/>
-<file name="testany.c" info="1447123141"/>
-<file name="ssend_init.c" info="1447123141"/>
-<file name="probe.c" info="1447123141"/>
-<file name="rsend.c" info="1447123141"/>
-<file name="test.c" info="1447123141"/>
+<file name="irecv.c" info="1478973152"/>
+<file name="request_get_status.c" info="1478973152"/>
+<file name="bsend_init.c" info="1478973152"/>
+<file name="ssend.c" info="1478973152"/>
+<file name="bufattach.c" info="1478973152"/>
+<file name="ibsend.c" info="1478973152"/>
+<file name="probe.c" info="1478973152"/>
+<file name="testsome.c" info="1478973152"/>
+<file name="waitall.c" info="1478973152"/>
+<file name="imrecv.c" info="1478973152"/>
+<file name="sendrecv.c" info="1478973152"/>
+<file name="bsendutil.c" info="1478973152"/>
+<file name="recv_init.c" info="1478973152"/>
+<file name="greq_complete.c" info="1478973152"/>
+<file name="bsend.c" info="1478973152"/>
+<file name="rsend_init.c" info="1478973152"/>
+<file name="wait.c" info="1478973152"/>
+<file name="test_cancelled.c" info="1478973152"/>
+<file name="mrecv.c" info="1478973152"/>
+<file name="greq_start.c" info="1478973152"/>
+<file name="isend.c" info="1478973152"/>
+<file name="testany.c" info="1478973152"/>
+<file name="ssend_init.c" info="1478973152"/>
+<file name="status_set_cancelled.c" info="1478973152"/>
+<file name="mpir_request.c" info="1478973152"/>
+<file name="rsend.c" info="1478973152"/>
+<file name="request_free.c" info="1478973152"/>
+<file name="waitany.c" info="1478973152"/>
+<file name="recv.c" info="1478973152"/>
+<file name="waitsome.c" info="1478973152"/>
+<file name="sendrecv_rep.c" info="1478973152"/>
+<file name="send_init.c" info="1478973152"/>
+<file name="send.c" info="1478973152"/>
+<file name="mprobe.c" info="1478973152"/>
+<file name="startall.c" info="1478973152"/>
+<file name="cancel.c" info="1478973152"/>
+<file name="bsendutil.h" info="1478973152"/>
+<file name="issend.c" info="1478973152"/>
+<file name="start.c" info="1478973152"/>
+<file name="buffree.c" info="1478973152"/>
+<file name="test.c" info="1478973152"/>
+<file name="improbe.c" info="1478973152"/>
+<file name="testall.c" info="1478973152"/>
+<file name="irsend.c" info="1478973152"/>
+<file name="iprobe.c" info="1478973152"/>
</dir>
<data>
+<fileinfo name="irecv.c">
+MPID_STATE_MPI_IRECV MPI_Irecv
+</fileinfo>
+<fileinfo name="request_get_status.c">
+MPID_STATE_MPI_REQUEST_GET_STATUS MPI_Request_get_status
+</fileinfo>
+<fileinfo name="bsend_init.c">
+MPID_STATE_MPI_BSEND_INIT MPI_Bsend_init
+</fileinfo>
<fileinfo name="ssend.c">
MPID_STATE_MPI_SSEND MPI_Ssend
</fileinfo>
-<fileinfo name="irecv.c">
-MPID_STATE_MPI_IRECV MPI_Irecv
+<fileinfo name="bufattach.c">
+MPID_STATE_MPI_BUFFER_ATTACH MPI_Buffer_attach
</fileinfo>
-<fileinfo name="recv_init.c">
-MPID_STATE_MPI_RECV_INIT MPI_Recv_init
+<fileinfo name="ibsend.c">
+MPID_STATE_MPI_IBSEND MPI_Ibsend
</fileinfo>
-<fileinfo name="startall.c">
-MPID_STATE_MPI_STARTALL MPI_Startall
+<fileinfo name="probe.c">
+MPID_STATE_MPI_PROBE MPI_Probe
</fileinfo>
-<fileinfo name="isend.c">
-MPID_STATE_MPI_ISEND MPI_Isend
+<fileinfo name="testsome.c">
+MPID_STATE_MPI_TESTSOME MPI_Testsome
</fileinfo>
-<fileinfo name="bsendutil.h">
+<fileinfo name="waitall.c">
+MPID_STATE_MPI_WAITALL MPI_Waitall
</fileinfo>
<fileinfo name="imrecv.c">
MPID_STATE_MPI_IMRECV MPI_Imrecv
</fileinfo>
-<fileinfo name="start.c">
-MPID_STATE_MPI_START MPI_Start
-</fileinfo>
-<fileinfo name="bufattach.c">
-MPID_STATE_MPI_BUFFER_ATTACH MPI_Buffer_attach
-</fileinfo>
-<fileinfo name="test_cancelled.c">
-MPID_STATE_MPI_TEST_CANCELLED MPI_Test_cancelled
+<fileinfo name="sendrecv.c">
+MPID_STATE_MPI_SENDRECV MPI_Sendrecv
</fileinfo>
<fileinfo name="bsendutil.c">
</fileinfo>
-<fileinfo name="send.c">
-MPID_STATE_MPI_SEND MPI_Send
+<fileinfo name="recv_init.c">
+MPID_STATE_MPI_RECV_INIT MPI_Recv_init
</fileinfo>
-<fileinfo name="mrecv.c">
-MPID_STATE_MPI_MRECV MPI_Mrecv
+<fileinfo name="greq_complete.c">
+MPID_STATE_MPI_GREQUEST_COMPLETE MPI_Grequest_complete
+</fileinfo>
+<fileinfo name="bsend.c">
+MPID_STATE_MPI_BSEND MPI_Bsend
</fileinfo>
<fileinfo name="rsend_init.c">
MPID_STATE_MPI_RSEND_INIT MPI_Rsend_init
</fileinfo>
-<fileinfo name="send_init.c">
-MPID_STATE_MPI_SEND_INIT MPI_Send_init
+<fileinfo name="wait.c">
+MPID_STATE_MPI_WAIT MPI_Wait
</fileinfo>
-<fileinfo name="issend.c">
-MPID_STATE_MPI_ISSEND MPI_Issend
+<fileinfo name="test_cancelled.c">
+MPID_STATE_MPI_TEST_CANCELLED MPI_Test_cancelled
</fileinfo>
-<fileinfo name="cancel.c">
-MPID_STATE_MPI_CANCEL MPI_Cancel
+<fileinfo name="mrecv.c">
+MPID_STATE_MPI_MRECV MPI_Mrecv
</fileinfo>
-<fileinfo name="request_free.c">
-MPID_STATE_MPI_REQUEST_FREE MPI_Request_free
+<fileinfo name="greq_start.c">
+MPID_STATE_MPI_GREQUEST_START MPI_Grequest_start
</fileinfo>
-<fileinfo name="buffree.c">
-MPID_STATE_MPI_BUFFER_DETACH MPI_Buffer_detach
+<fileinfo name="isend.c">
+MPID_STATE_MPI_ISEND MPI_Isend
</fileinfo>
-<fileinfo name="irsend.c">
-MPID_STATE_MPI_IRSEND MPI_Irsend
+<fileinfo name="testany.c">
+MPID_STATE_MPI_TESTANY MPI_Testany
+</fileinfo>
+<fileinfo name="ssend_init.c">
+MPID_STATE_MPI_SSEND_INIT MPI_Ssend_init
+</fileinfo>
+<fileinfo name="status_set_cancelled.c">
+MPID_STATE_MPI_STATUS_SET_CANCELLED MPI_Status_set_cancelled
</fileinfo>
<fileinfo name="mpir_request.c">
</fileinfo>
-<fileinfo name="testall.c">
-MPID_STATE_MPI_TESTALL MPI_Testall
+<fileinfo name="rsend.c">
+MPID_STATE_MPI_RSEND MPI_Rsend
+</fileinfo>
+<fileinfo name="request_free.c">
+MPID_STATE_MPI_REQUEST_FREE MPI_Request_free
</fileinfo>
<fileinfo name="waitany.c">
MPID_STATE_MPI_WAITANY MPI_Waitany
</fileinfo>
-<fileinfo name="bsend.c">
-MPID_STATE_MPI_BSEND MPI_Bsend
-</fileinfo>
-<fileinfo name="improbe.c">
-MPID_STATE_MPI_IMPROBE MPI_Improbe
-</fileinfo>
-<fileinfo name="sendrecv.c">
-MPID_STATE_MPI_SENDRECV MPI_Sendrecv
+<fileinfo name="recv.c">
+MPID_STATE_MPI_RECV MPI_Recv
</fileinfo>
-<fileinfo name="iprobe.c">
-MPID_STATE_MPI_IPROBE MPI_Iprobe
+<fileinfo name="waitsome.c">
+MPID_STATE_MPI_WAITSOME MPI_Waitsome
</fileinfo>
-<fileinfo name="wait.c">
-MPID_STATE_MPI_WAIT MPI_Wait
+<fileinfo name="sendrecv_rep.c">
+MPID_STATE_MPI_SENDRECV_REPLACE MPI_Sendrecv_replace
</fileinfo>
-<fileinfo name="status_set_cancelled.c">
-MPID_STATE_MPI_STATUS_SET_CANCELLED MPI_Status_set_cancelled
+<fileinfo name="send_init.c">
+MPID_STATE_MPI_SEND_INIT MPI_Send_init
</fileinfo>
-<fileinfo name="testsome.c">
-MPID_STATE_MPI_TESTSOME MPI_Testsome
+<fileinfo name="send.c">
+MPID_STATE_MPI_SEND MPI_Send
</fileinfo>
<fileinfo name="mprobe.c">
MPID_STATE_MPI_MPROBE MPI_Mprobe
</fileinfo>
-<fileinfo name="greq_start.c">
-MPID_STATE_MPI_GREQUEST_START MPI_Grequest_start
-</fileinfo>
-<fileinfo name="sendrecv_rep.c">
-MPID_STATE_MPI_SENDRECV_REPLACE MPI_Sendrecv_replace
-</fileinfo>
-<fileinfo name="request_get_status.c">
-MPID_STATE_MPI_REQUEST_GET_STATUS MPI_Request_get_status
-</fileinfo>
-<fileinfo name="bsend_init.c">
-MPID_STATE_MPI_BSEND_INIT MPI_Bsend_init
+<fileinfo name="startall.c">
+MPID_STATE_MPI_STARTALL MPI_Startall
</fileinfo>
-<fileinfo name="ibsend.c">
-MPID_STATE_MPI_IBSEND MPI_Ibsend
+<fileinfo name="cancel.c">
+MPID_STATE_MPI_CANCEL MPI_Cancel
</fileinfo>
-<fileinfo name="recv.c">
-MPID_STATE_MPI_RECV MPI_Recv
+<fileinfo name="bsendutil.h">
</fileinfo>
-<fileinfo name="waitsome.c">
-MPID_STATE_MPI_WAITSOME MPI_Waitsome
+<fileinfo name="issend.c">
+MPID_STATE_MPI_ISSEND MPI_Issend
</fileinfo>
-<fileinfo name="waitall.c">
-MPID_STATE_MPI_WAITALL MPI_Waitall
+<fileinfo name="start.c">
+MPID_STATE_MPI_START MPI_Start
</fileinfo>
-<fileinfo name="greq_complete.c">
-MPID_STATE_MPI_GREQUEST_COMPLETE MPI_Grequest_complete
+<fileinfo name="buffree.c">
+MPID_STATE_MPI_BUFFER_DETACH MPI_Buffer_detach
</fileinfo>
-<fileinfo name="testany.c">
-MPID_STATE_MPI_TESTANY MPI_Testany
+<fileinfo name="test.c">
+MPID_STATE_MPI_TEST MPI_Test
</fileinfo>
-<fileinfo name="ssend_init.c">
-MPID_STATE_MPI_SSEND_INIT MPI_Ssend_init
+<fileinfo name="improbe.c">
+MPID_STATE_MPI_IMPROBE MPI_Improbe
</fileinfo>
-<fileinfo name="probe.c">
-MPID_STATE_MPI_PROBE MPI_Probe
+<fileinfo name="testall.c">
+MPID_STATE_MPI_TESTALL MPI_Testall
</fileinfo>
-<fileinfo name="rsend.c">
-MPID_STATE_MPI_RSEND MPI_Rsend
+<fileinfo name="irsend.c">
+MPID_STATE_MPI_IRSEND MPI_Irsend
</fileinfo>
-<fileinfo name="test.c">
-MPID_STATE_MPI_TEST MPI_Test
+<fileinfo name="iprobe.c">
+MPID_STATE_MPI_IPROBE MPI_Iprobe
</fileinfo>
</data>
diff --git a/src/mpi/pt2pt/bsend.c b/src/mpi/pt2pt/bsend.c
index caed31e..4aeef58 100644
--- a/src/mpi/pt2pt/bsend.c
+++ b/src/mpi/pt2pt/bsend.c
@@ -91,14 +91,14 @@ int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
{
static const char FCNAME[] = "MPI_Bsend";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_BSEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_BSEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_BSEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_BSEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -112,7 +112,7 @@ int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -121,7 +121,7 @@ int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
{
MPIR_ERRTEST_COUNT(count,mpi_errno);
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
if (comm_ptr) {
@@ -134,10 +134,10 @@ int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -172,7 +172,7 @@ int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_BSEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_BSEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/bsend_init.c b/src/mpi/pt2pt/bsend_init.c
index 6313626..2ddc1ad 100644
--- a/src/mpi/pt2pt/bsend_init.c
+++ b/src/mpi/pt2pt/bsend_init.c
@@ -64,14 +64,14 @@ int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype,
{
static const char FCNAME[] = "MPI_Bsend_init";
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr = NULL;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_BSEND_INIT);
+ MPIR_Request *request_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_BSEND_INIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_BSEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_BSEND_INIT);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -85,14 +85,14 @@ int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -104,10 +104,10 @@ int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -120,17 +120,17 @@ int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype,
/* ... body of routine ... */
mpi_errno = MPID_Bsend_init(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIR_SENDQ_REMEMBER(request_ptr, dest, tag, comm_ptr->context_id);
+ MPII_SENDQ_REMEMBER(request_ptr, dest, tag, comm_ptr->context_id);
/* return the handle of the request to the user */
- MPID_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_BSEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_BSEND_INIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/bsendutil.c b/src/mpi/pt2pt/bsendutil.c
index aa48a8f..e10ae28 100644
--- a/src/mpi/pt2pt/bsendutil.c
+++ b/src/mpi/pt2pt/bsendutil.c
@@ -5,7 +5,7 @@
*/
#include "mpiimpl.h"
-#include "mpibsend.h"
+#include "mpii_bsend.h"
#include "bsendutil.h"
/*
@@ -13,15 +13,15 @@
* By storing total_size along with "size available for messages", we
* avoid any complexities associated with alignment, since we must
* ensure that each KPIR_Bsend_data_t structure is properly aligned
- * (i.e., we can't simply do (sizeof(MPIR_Bsend_data_t) + size) to get
+ * (i.e., we can't simply do (sizeof(MPII_Bsend_data_t) + size) to get
* total_size).
*
* Function Summary
* MPIR_Bsend_attach - Performs the work of MPI_Buffer_attach
* MPIR_Bsend_detach - Performs the work of MPI_Buffer_detach
* MPIR_Bsend_isend - Essentially performs an MPI_Ibsend. Returns
- * an MPID_Request that is also stored internally in the
- * corresponding MPIR_Bsend_data_t entry
+ * an MPIR_Request that is also stored internally in the
+ * corresponding MPII_Bsend_data_t entry
* MPIR_Bsend_free_segment - Free a buffer that is no longer needed,
* merging with adjacent segments
* MPIR_Bsend_check_active - Check for completion of any pending sends
@@ -36,14 +36,14 @@
* MPIR_Bsend_take_buffer - Find and acquire a buffer for a message
* MPIR_Bsend_finalize - Finalize handler when Bsend routines are used
* MPIR_Bsend_dump - Debugging routine to print the contents of the control
- * information in the bsend buffer (the MPIR_Bsend_data_t entries)
+ * information in the bsend buffer (the MPII_Bsend_data_t entries)
*/
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
static void MPIR_Bsend_dump( void );
#endif
-#define BSENDDATA_HEADER_TRUE_SIZE (sizeof(MPIR_Bsend_data_t) - sizeof(double))
+#define BSENDDATA_HEADER_TRUE_SIZE (sizeof(MPII_Bsend_data_t) - sizeof(double))
/* BsendBuffer is the structure that describes the overall Bsend buffer */
/*
@@ -62,13 +62,13 @@ static struct BsendBuffer {
the user */
size_t origbuffer_size;/* Size of the buffer as provided
by the user */
- MPIR_Bsend_data_t *avail; /* Pointer to the first available block
+ MPII_Bsend_data_t *avail; /* Pointer to the first available block
of space */
- MPIR_Bsend_data_t *pending; /* Pointer to the first message that
+ MPII_Bsend_data_t *pending; /* Pointer to the first message that
could not be sent because of a
resource limit (e.g., no requests
available) */
- MPIR_Bsend_data_t *active; /* Pointer to the first active (sending)
+ MPII_Bsend_data_t *active; /* Pointer to the first active (sending)
message */
} BsendBuffer = { 0, 0, 0, 0, 0, 0, 0 };
@@ -78,10 +78,10 @@ static int initialized = 0; /* keep track of the first call to any
/* Forward references */
static void MPIR_Bsend_retry_pending( void );
static int MPIR_Bsend_check_active ( void );
-static MPIR_Bsend_data_t *MPIR_Bsend_find_buffer( int );
-static void MPIR_Bsend_take_buffer( MPIR_Bsend_data_t *, int );
+static MPII_Bsend_data_t *MPIR_Bsend_find_buffer( int );
+static void MPIR_Bsend_take_buffer( MPII_Bsend_data_t *, int );
static int MPIR_Bsend_finalize( void * );
-static void MPIR_Bsend_free_segment( MPIR_Bsend_data_t * );
+static void MPIR_Bsend_free_segment( MPII_Bsend_data_t * );
/*
* Attach a buffer. This checks for the error conditions and then
@@ -93,7 +93,7 @@ static void MPIR_Bsend_free_segment( MPIR_Bsend_data_t * );
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Bsend_attach( void *buffer, int buffer_size )
{
- MPIR_Bsend_data_t *p;
+ MPII_Bsend_data_t *p;
size_t offset, align_sz;
# ifdef HAVE_ERROR_CHECKING
@@ -134,7 +134,7 @@ int MPIR_Bsend_attach( void *buffer, int buffer_size )
code assumes pointer-alignment, and some code assumes double alignment.
Further, GCC 4.5.1 generates bad code on 32-bit platforms when this is
only 4-byte aligned (see #1149). */
- align_sz = MPIR_MAX(sizeof(void *), sizeof(double));
+ align_sz = MPL_MAX(sizeof(void *), sizeof(double));
offset = ((size_t)buffer) % align_sz;
if (offset) {
offset = align_sz - offset;
@@ -147,7 +147,7 @@ int MPIR_Bsend_attach( void *buffer, int buffer_size )
BsendBuffer.active = 0;
/* Set the first block */
- p = (MPIR_Bsend_data_t *)buffer;
+ p = (MPII_Bsend_data_t *)buffer;
p->size = buffer_size - BSENDDATA_HEADER_TRUE_SIZE;
p->total_size = buffer_size;
p->next = p->prev = NULL;
@@ -175,7 +175,7 @@ int MPIR_Bsend_detach( void *bufferp, int *size )
}
if (BsendBuffer.active) {
/* Loop through each active element and wait on it */
- MPIR_Bsend_data_t *p = BsendBuffer.active;
+ MPII_Bsend_data_t *p = BsendBuffer.active;
while (p) {
MPI_Request r = p->request->handle;
@@ -208,12 +208,12 @@ int MPIR_Bsend_detach( void *bufferp, int *size )
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
- int dest, int tag, MPID_Comm *comm_ptr,
- MPIR_Bsend_kind_t kind, MPID_Request **request )
+ int dest, int tag, MPIR_Comm *comm_ptr,
+ MPII_Bsend_kind_t kind, MPIR_Request **request )
{
int mpi_errno = MPI_SUCCESS;
- MPIR_Bsend_data_t *p;
- MPIR_Bsend_msg_t *msg;
+ MPII_Bsend_data_t *p;
+ MPII_Bsend_msg_t *msg;
MPI_Aint packsize;
int pass;
@@ -222,7 +222,7 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
no copying.
We may want to decide here whether we need to pack at all
- or if we can just use (a MPIU_Memcpy) of the buffer.
+ or if we can just use (a MPIR_Memcpy) of the buffer.
*/
@@ -236,7 +236,7 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
else
packsize = count;
- MPIU_DBG_MSG_D(BSEND,TYPICAL,"looking for buffer of size " MPI_AINT_FMT_DEC_SPEC, packsize);
+ MPL_DBG_MSG_D(MPIR_DBG_BSEND,TYPICAL,"looking for buffer of size " MPI_AINT_FMT_DEC_SPEC, packsize);
/*
* Use two passes. Each pass is the same; between the two passes,
* attempt to complete any active requests, and start any pending
@@ -247,7 +247,7 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
p = MPIR_Bsend_find_buffer( packsize );
if (p) {
- MPIU_DBG_MSG_FMT(BSEND,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_BSEND,TYPICAL,(MPL_DBG_FDEST,
"found buffer of size " MPI_AINT_FMT_DEC_SPEC " with address %p",packsize,p));
/* Found a segment */
@@ -256,7 +256,7 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
/* Pack the data into the buffer */
/* We may want to optimize for the special case of
either primative or contiguous types, and just
- use MPIU_Memcpy and the provided datatype */
+ use MPIR_Memcpy and the provided datatype */
msg->count = 0;
if (dtype != MPI_PACKED)
{
@@ -265,22 +265,22 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
}
else
{
- MPIU_Memcpy(p->msg.msgbuf, buf, count);
+ MPIR_Memcpy(p->msg.msgbuf, buf, count);
p->msg.count = count;
}
/* Try to send the message. We must use MPID_Isend
because this call must not block */
mpi_errno = MPID_Isend(msg->msgbuf, msg->count, MPI_PACKED,
dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &p->request );
+ MPIR_CONTEXT_INTRA_PT2PT, &p->request );
MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Bsend internal error: isend returned err");
/* If the error is "request not available", we should
put this on the pending list. This will depend on
how we signal failure to send. */
if (p->request) {
- MPIU_DBG_MSG_FMT(BSEND,TYPICAL,
- (MPIU_DBG_FDEST,"saving request %p in %p",p->request,p));
+ MPL_DBG_MSG_FMT(MPIR_DBG_BSEND,TYPICAL,
+ (MPL_DBG_FDEST,"saving request %p in %p",p->request,p));
/* An optimization is to check to see if the
data has already been sent. The original code
to do this was commented out and probably did not match
@@ -295,7 +295,7 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
Note that the test on phere is redundant, as the code breaks
out of the loop in the test above if a block p is found. */
if (p || pass == 1) break;
- MPIU_DBG_MSG(BSEND,TYPICAL,"Could not find storage, checking active");
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"Could not find storage, checking active");
/* Try to complete some pending bsends */
MPIR_Bsend_check_active( );
/* Give priority to any pending operations */
@@ -306,8 +306,8 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
/* Return error for no buffer space found */
/* Generate a traceback of the allocated space, explaining why
packsize could not be found */
- MPIU_DBG_MSG(BSEND,TYPICAL,"Could not find space; dumping arena" );
- MPIU_DBG_STMT(BSEND,TYPICAL,MPIR_Bsend_dump());
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"Could not find space; dumping arena" );
+ MPL_DBG_STMT(MPIR_DBG_BSEND,TYPICAL,MPIR_Bsend_dump());
MPIR_ERR_SETANDJUMP2(mpi_errno, MPI_ERR_BUFFER, "**bufbsend", "**bufbsend %d %d", packsize, BsendBuffer.buffer_size);
}
@@ -326,12 +326,12 @@ int MPIR_Bsend_isend(const void *buf, int count, MPI_Datatype dtype,
#define FUNCNAME MPIR_Bsend_free_seg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Bsend_free_req_seg( MPID_Request* req )
+int MPIR_Bsend_free_req_seg( MPIR_Request* req )
{
int mpi_errno = MPI_ERR_INTERN;
- MPIR_Bsend_data_t *active = BsendBuffer.active;
+ MPII_Bsend_data_t *active = BsendBuffer.active;
- MPIU_DBG_MSG_P(BSEND,TYPICAL,"Checking active starting at %p", active);
+ MPL_DBG_MSG_P(MPIR_DBG_BSEND,TYPICAL,"Checking active starting at %p", active);
while (active) {
if (active->request == req) {
@@ -341,13 +341,10 @@ int MPIR_Bsend_free_req_seg( MPID_Request* req )
active = active->next;;
- MPIU_DBG_MSG_P(BSEND,TYPICAL,"Next active is %p",active);
+ MPL_DBG_MSG_P(MPIR_DBG_BSEND,TYPICAL,"Next active is %p",active);
}
- fn_exit:
return mpi_errno;
- fn_fail:
- goto fn_exit;
}
/*
@@ -364,27 +361,27 @@ int MPIR_Bsend_free_req_seg( MPID_Request* req )
#define FUNCNAME MPIR_Bsend_free_segment
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static void MPIR_Bsend_free_segment( MPIR_Bsend_data_t *p )
+static void MPIR_Bsend_free_segment( MPII_Bsend_data_t *p )
{
- MPIR_Bsend_data_t *prev = p->prev, *avail = BsendBuffer.avail, *avail_prev;
+ MPII_Bsend_data_t *prev = p->prev, *avail = BsendBuffer.avail, *avail_prev;
- MPIU_DBG_MSG_FMT(BSEND,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_BSEND,TYPICAL,(MPL_DBG_FDEST,
"Freeing bsend segment at %p of size %llu, next at %p",
p, (unsigned long long) p->size, ((char *)p)+p->total_size));
- MPIU_DBG_MSG_D(BSEND,TYPICAL,
+ MPL_DBG_MSG_D(MPIR_DBG_BSEND,TYPICAL,
"At the begining of free_segment with size %llu:",
(unsigned long long) p->total_size );
- MPIU_DBG_STMT(BSEND,TYPICAL,MPIR_Bsend_dump());
+ MPL_DBG_STMT(MPIR_DBG_BSEND,TYPICAL,MPIR_Bsend_dump());
/* Remove the segment from the active list */
if (prev) {
- MPIU_DBG_MSG(BSEND,TYPICAL,"free segment is within active list");
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"free segment is within active list");
prev->next = p->next;
}
else {
/* p was at the head of the active list */
- MPIU_DBG_MSG(BSEND,TYPICAL,"free segment is head of active list");
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"free segment is head of active list");
BsendBuffer.active = p->next;
/* The next test sets the prev pointer to null */
}
@@ -392,7 +389,7 @@ static void MPIR_Bsend_free_segment( MPIR_Bsend_data_t *p )
p->next->prev = prev;
}
- MPIU_DBG_STMT(BSEND,VERBOSE,MPIR_Bsend_dump());
+ MPL_DBG_STMT(MPIR_DBG_BSEND,VERBOSE,MPIR_Bsend_dump());
/* Merge into the avail list */
/* Find avail_prev, avail, such that p is between them.
@@ -442,8 +439,8 @@ static void MPIR_Bsend_free_segment( MPIR_Bsend_data_t *p )
p->prev = 0;
}
- MPIU_DBG_MSG(BSEND,TYPICAL,"At the end of free_segment:" );
- MPIU_DBG_STMT(BSEND,TYPICAL,MPIR_Bsend_dump());
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"At the end of free_segment:" );
+ MPL_DBG_STMT(MPIR_DBG_BSEND,TYPICAL,MPIR_Bsend_dump());
}
/*
@@ -461,9 +458,9 @@ static void MPIR_Bsend_free_segment( MPIR_Bsend_data_t *p )
static int MPIR_Bsend_check_active( void )
{
int mpi_errno = MPI_SUCCESS;
- MPIR_Bsend_data_t *active = BsendBuffer.active, *next_active;
+ MPII_Bsend_data_t *active = BsendBuffer.active, *next_active;
- MPIU_DBG_MSG_P(BSEND,TYPICAL,"Checking active starting at %p", active);
+ MPL_DBG_MSG_P(MPIR_DBG_BSEND,TYPICAL,"Checking active starting at %p", active);
while (active) {
MPI_Request r = active->request->handle;
int flag;
@@ -479,7 +476,7 @@ static int MPIR_Bsend_check_active( void )
the request (it is a grequest, the free call will do it) */
flag = 0;
/* XXX DJG FIXME-MT should we be checking this? */
- if (MPIU_Object_get_ref(active->request) == 1) {
+ if (MPIR_Object_get_ref(active->request) == 1) {
mpi_errno = MPIR_Test_impl(&r, &flag, MPI_STATUS_IGNORE );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
} else {
@@ -497,11 +494,11 @@ static int MPIR_Bsend_check_active( void )
}
if (flag) {
/* We're done. Remove this segment */
- MPIU_DBG_MSG_P(BSEND,TYPICAL,"Removing segment %p", active);
+ MPL_DBG_MSG_P(MPIR_DBG_BSEND,TYPICAL,"Removing segment %p", active);
MPIR_Bsend_free_segment( active );
}
active = next_active;
- MPIU_DBG_MSG_P(BSEND,TYPICAL,"Next active is %p",active);
+ MPL_DBG_MSG_P(MPIR_DBG_BSEND,TYPICAL,"Next active is %p",active);
}
fn_exit:
@@ -516,7 +513,7 @@ static int MPIR_Bsend_check_active( void )
*/
static void MPIR_Bsend_retry_pending( void )
{
- MPIR_Bsend_data_t *pending = BsendBuffer.pending, *next_pending;
+ MPII_Bsend_data_t *pending = BsendBuffer.pending, *next_pending;
while (pending) {
next_pending = pending->next;
@@ -530,9 +527,9 @@ static void MPIR_Bsend_retry_pending( void )
* Find a slot in the avail buffer that can hold size bytes. Does *not*
* remove the slot from the avail buffer (see MPIR_Bsend_take_buffer)
*/
-static MPIR_Bsend_data_t *MPIR_Bsend_find_buffer( int size )
+static MPII_Bsend_data_t *MPIR_Bsend_find_buffer( int size )
{
- MPIR_Bsend_data_t *p = BsendBuffer.avail;
+ MPII_Bsend_data_t *p = BsendBuffer.avail;
while (p) {
if (p->size >= size) {
@@ -552,9 +549,9 @@ static MPIR_Bsend_data_t *MPIR_Bsend_find_buffer( int size )
* If there isn't enough left of p, remove the entire segment from
* the avail list.
*/
-static void MPIR_Bsend_take_buffer( MPIR_Bsend_data_t *p, int size )
+static void MPIR_Bsend_take_buffer( MPII_Bsend_data_t *p, int size )
{
- MPIR_Bsend_data_t *prev;
+ MPII_Bsend_data_t *prev;
int alloc_size;
/* Compute the remaining size. This must include any padding
@@ -565,7 +562,7 @@ static void MPIR_Bsend_take_buffer( MPIR_Bsend_data_t *p, int size )
/* alloc_size is the amount of space (out of size) that we will
allocate for this buffer. */
- MPIU_DBG_MSG_FMT(BSEND,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_BSEND,TYPICAL,(MPL_DBG_FDEST,
"Taking %d bytes from a block with %llu bytes\n",
alloc_size, (unsigned long long) p->total_size ));
@@ -573,10 +570,10 @@ static void MPIR_Bsend_take_buffer( MPIR_Bsend_data_t *p, int size )
if (alloc_size + (int)BSENDDATA_HEADER_TRUE_SIZE + MIN_BUFFER_BLOCK <= p->size) {
/* Yes, the available space (p->size) is large enough to
carve out a new block */
- MPIR_Bsend_data_t *newp;
+ MPII_Bsend_data_t *newp;
- MPIU_DBG_MSG_P(BSEND,TYPICAL,"Breaking block into used and allocated at %p", p );
- newp = (MPIR_Bsend_data_t *)( (char *)p + BSENDDATA_HEADER_TRUE_SIZE +
+ MPL_DBG_MSG_P(MPIR_DBG_BSEND,TYPICAL,"Breaking block into used and allocated at %p", p );
+ newp = (MPII_Bsend_data_t *)( (char *)p + BSENDDATA_HEADER_TRUE_SIZE +
alloc_size );
newp->total_size = p->total_size - alloc_size -
BSENDDATA_HEADER_TRUE_SIZE;
@@ -594,7 +591,7 @@ static void MPIR_Bsend_take_buffer( MPIR_Bsend_data_t *p, int size )
p->total_size = (char *)newp - (char*)p;
p->size = p->total_size - BSENDDATA_HEADER_TRUE_SIZE;
- MPIU_DBG_MSG_FMT(BSEND,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIR_DBG_BSEND,TYPICAL,(MPL_DBG_FDEST,
"broken blocks p (%llu) and new (%llu)\n",
(unsigned long long) p->total_size,
(unsigned long long) newp->total_size ));
@@ -620,9 +617,9 @@ static void MPIR_Bsend_take_buffer( MPIR_Bsend_data_t *p, int size )
p->prev = 0;
BsendBuffer.active = p;
- MPIU_DBG_MSG_P(BSEND,VERBOSE,"segment %p now head of active",p);
- MPIU_DBG_MSG(BSEND,TYPICAL,"At end of take buffer" );
- MPIU_DBG_STMT(BSEND,TYPICAL,MPIR_Bsend_dump());
+ MPL_DBG_MSG_P(MPIR_DBG_BSEND,VERBOSE,"segment %p now head of active",p);
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"At end of take buffer" );
+ MPL_DBG_STMT(MPIR_DBG_BSEND,TYPICAL,MPIR_Bsend_dump());
}
static int MPIR_Bsend_finalize( void *p ATTRIBUTE((unused)) )
@@ -630,7 +627,7 @@ static int MPIR_Bsend_finalize( void *p ATTRIBUTE((unused)) )
void *b;
int s;
- MPIU_UNREFERENCED_ARG(p);
+ MPL_UNREFERENCED_ARG(p);
if (BsendBuffer.buffer) {
/* Use detach to complete any communication */
@@ -642,39 +639,39 @@ static int MPIR_Bsend_finalize( void *p ATTRIBUTE((unused)) )
/*
* These routines are defined only if debug logging is enabled
*/
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
static void MPIR_Bsend_dump( void )
{
- MPIR_Bsend_data_t *a = BsendBuffer.avail;
+ MPII_Bsend_data_t *a = BsendBuffer.avail;
- MPIU_DBG_MSG_D(BSEND, TYPICAL, "Total size is %llu",
+ MPL_DBG_MSG_D(MPIR_DBG_BSEND, TYPICAL, "Total size is %llu",
(unsigned long long) BsendBuffer.buffer_size);
- MPIU_DBG_MSG(BSEND,TYPICAL,"Avail list is:" );
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"Avail list is:" );
while (a) {
- MPIU_DBG_MSG_FMT(BSEND, TYPICAL, (MPIU_DBG_FDEST, "[%p] totalsize = %llu(%llx)",
+ MPL_DBG_MSG_FMT(MPIR_DBG_BSEND, TYPICAL, (MPL_DBG_FDEST, "[%p] totalsize = %llu(%llx)",
a, (unsigned long long) a->total_size,
(unsigned long long) a->total_size));
if (a == a->next) {
- MPIU_DBG_MSG(BSEND,TYPICAL,
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,
"@@@Corrupt list; avail block points at itself" );
break;
}
a = a->next;
}
- MPIU_DBG_MSG(BSEND,TYPICAL,"Active list is:" );
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"Active list is:" );
a = BsendBuffer.active;
while (a) {
- MPIU_DBG_MSG_FMT(BSEND, TYPICAL, (MPIU_DBG_FDEST, "[%p] totalsize = %llu(%llx)",
+ MPL_DBG_MSG_FMT(MPIR_DBG_BSEND, TYPICAL, (MPL_DBG_FDEST, "[%p] totalsize = %llu(%llx)",
a, (unsigned long long) a->total_size,
(unsigned long long) a->total_size));
if (a == a->next) {
- MPIU_DBG_MSG(BSEND,TYPICAL,
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,
"@@@Corrupt list; active block points at itself" );
break;
}
a = a->next;
}
- MPIU_DBG_MSG(BSEND,TYPICAL,"end of list" );
+ MPL_DBG_MSG(MPIR_DBG_BSEND,TYPICAL,"end of list" );
}
#endif
diff --git a/src/mpi/pt2pt/bsendutil.h b/src/mpi/pt2pt/bsendutil.h
index ba29964..124cc79 100644
--- a/src/mpi/pt2pt/bsendutil.h
+++ b/src/mpi/pt2pt/bsendutil.h
@@ -5,12 +5,12 @@
* See COPYRIGHT in top-level directory.
*/
-#include "mpibsend.h"
+#include "mpii_bsend.h"
/* Function Prototypes for the bsend utility functions */
int MPIR_Bsend_attach( void *, int );
int MPIR_Bsend_detach( void *, int * );
-int MPIR_Bsend_isend(const void *, int, MPI_Datatype, int, int, MPID_Comm *,
- MPIR_Bsend_kind_t, MPID_Request ** );
-int MPIR_Bsend_free_req_seg(MPID_Request * );
+int MPIR_Bsend_isend(const void *, int, MPI_Datatype, int, int, MPIR_Comm *,
+ MPII_Bsend_kind_t, MPIR_Request ** );
+int MPIR_Bsend_free_req_seg(MPIR_Request * );
diff --git a/src/mpi/pt2pt/bufattach.c b/src/mpi/pt2pt/bufattach.c
index 37529c0..e32ac68 100644
--- a/src/mpi/pt2pt/bufattach.c
+++ b/src/mpi/pt2pt/bufattach.c
@@ -78,12 +78,12 @@ int MPI_Buffer_attach(void *buffer, int size)
{
static const char FCNAME[] = "MPI_Buffer_attach";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_BUFFER_ATTACH);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_BUFFER_ATTACH);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_BUFFER_ATTACH);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_BUFFER_ATTACH);
# ifdef HAVE_ERROR_CHECKING
{
@@ -103,7 +103,7 @@ int MPI_Buffer_attach(void *buffer, int size)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_BUFFER_ATTACH);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_BUFFER_ATTACH);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/buffree.c b/src/mpi/pt2pt/buffree.c
index 7332b25..08650bb 100644
--- a/src/mpi/pt2pt/buffree.c
+++ b/src/mpi/pt2pt/buffree.c
@@ -95,12 +95,12 @@ int MPI_Buffer_detach(void *buffer_addr, int *size)
{
static const char FCNAME[] = "MPI_Buffer_detach";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_BUFFER_DETACH);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_BUFFER_DETACH);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_BUFFER_DETACH);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_BUFFER_DETACH);
# ifdef HAVE_ERROR_CHECKING
{
@@ -120,7 +120,7 @@ int MPI_Buffer_detach(void *buffer_addr, int *size)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_BUFFER_DETACH);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_BUFFER_DETACH);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/cancel.c b/src/mpi/pt2pt/cancel.c
index 15c51cf..0a1058a 100644
--- a/src/mpi/pt2pt/cancel.c
+++ b/src/mpi/pt2pt/cancel.c
@@ -30,30 +30,30 @@ int MPI_Cancel(MPI_Request *request) __attribute__((weak,alias("PMPI_Cancel")));
#define FUNCNAME MPIR_Cancel_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Cancel_impl(MPID_Request *request_ptr)
+int MPIR_Cancel_impl(MPIR_Request *request_ptr)
{
int mpi_errno = MPI_SUCCESS;
switch (request_ptr->kind)
{
- case MPID_REQUEST_SEND:
+ case MPIR_REQUEST_KIND__SEND:
{
mpi_errno = MPID_Cancel_send(request_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
break;
}
- case MPID_REQUEST_RECV:
+ case MPIR_REQUEST_KIND__RECV:
{
mpi_errno = MPID_Cancel_recv(request_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
break;
}
- case MPID_PREQUEST_SEND:
+ case MPIR_REQUEST_KIND__PREQUEST_SEND:
{
- if (request_ptr->partner_request != NULL) {
- if (request_ptr->partner_request->kind != MPID_UREQUEST) {
+ if (request_ptr->u.persist.real_request != NULL) {
+ if (request_ptr->u.persist.real_request->kind != MPIR_REQUEST_KIND__GREQUEST) {
/* jratt at us.ibm.com: I don't know about the bsend
* comment below, but the CC stuff on the next
* line is *really* needed for persistent Bsend
@@ -68,16 +68,16 @@ int MPIR_Cancel_impl(MPID_Request *request_ptr)
* causing an MPI_Wait on the parent to block
* until the child is canceled or completed.
*/
- request_ptr->cc_ptr = request_ptr->partner_request->cc_ptr;
- mpi_errno = MPID_Cancel_send(request_ptr->partner_request);
+ request_ptr->cc_ptr = request_ptr->u.persist.real_request->cc_ptr;
+ mpi_errno = MPID_Cancel_send(request_ptr->u.persist.real_request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
} else {
/* This is needed for persistent Bsend requests */
/* FIXME why do we directly access the partner request's
* cc field? shouldn't our cc_ptr be set to the address
* of the partner req's cc field? */
- mpi_errno = MPIR_Grequest_cancel(request_ptr->partner_request,
- MPID_cc_is_complete(&request_ptr->partner_request->cc));
+ mpi_errno = MPIR_Grequest_cancel(request_ptr->u.persist.real_request,
+ MPIR_cc_is_complete(&request_ptr->u.persist.real_request->cc));
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
} else {
@@ -86,10 +86,10 @@ int MPIR_Cancel_impl(MPID_Request *request_ptr)
break;
}
- case MPID_PREQUEST_RECV:
+ case MPIR_REQUEST_KIND__PREQUEST_RECV:
{
- if (request_ptr->partner_request != NULL) {
- mpi_errno = MPID_Cancel_recv(request_ptr->partner_request);
+ if (request_ptr->u.persist.real_request != NULL) {
+ mpi_errno = MPID_Cancel_recv(request_ptr->u.persist.real_request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
} else {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_REQUEST,"**requestpersistactive");
@@ -97,9 +97,9 @@ int MPIR_Cancel_impl(MPID_Request *request_ptr)
break;
}
- case MPID_UREQUEST:
+ case MPIR_REQUEST_KIND__GREQUEST:
{
- mpi_errno = MPIR_Grequest_cancel(request_ptr, MPID_cc_is_complete(&request_ptr->cc));
+ mpi_errno = MPIR_Grequest_cancel(request_ptr, MPIR_cc_is_complete(&request_ptr->cc));
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
break;
}
@@ -159,16 +159,16 @@ messages).
int MPI_Cancel(MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request * request_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CANCEL);
+ MPIR_Request * request_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CANCEL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_CANCEL);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_CANCEL);
/* Convert MPI object handles to object pointers */
- MPID_Request_get_ptr( *request, request_ptr );
+ MPIR_Request_get_ptr( *request, request_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -176,7 +176,7 @@ int MPI_Cancel(MPI_Request *request)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate request_ptr */
- MPID_Request_valid_ptr( request_ptr, mpi_errno );
+ MPIR_Request_valid_ptr( request_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -191,7 +191,7 @@ int MPI_Cancel(MPI_Request *request)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_CANCEL);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_CANCEL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/greq_complete.c b/src/mpi/pt2pt/greq_complete.c
index 78382f8..d6e018e 100644
--- a/src/mpi/pt2pt/greq_complete.c
+++ b/src/mpi/pt2pt/greq_complete.c
@@ -33,14 +33,14 @@ int MPI_Grequest_complete(MPI_Request request) __attribute__((weak,alias("PMPI_G
#define FUNCNAME MPIR_Grequest_complete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIR_Grequest_complete_impl(MPID_Request *request_ptr)
+void MPIR_Grequest_complete_impl(MPIR_Request *request_ptr)
{
/* Set the request as completed. This does not change the
reference count on the generalized request */
MPID_Request_complete( request_ptr );
/* The request release comes with the wait/test, not this complete
- routine, so we don't call the MPID_Request_release routine */
+ routine, so we don't call the MPIR_Request_free routine */
}
#endif
@@ -67,13 +67,13 @@ Input Parameters:
int MPI_Grequest_complete( MPI_Request request )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GREQUEST_COMPLETE);
+ MPIR_Request *request_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GREQUEST_COMPLETE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GREQUEST_COMPLETE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GREQUEST_COMPLETE);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,15 +87,15 @@ int MPI_Grequest_complete( MPI_Request request )
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Request_get_ptr( request, request_ptr );
+ MPIR_Request_get_ptr( request, request_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr(request_ptr,mpi_errno);
- if (request_ptr && request_ptr->kind != MPID_UREQUEST) {
+ MPIR_Request_valid_ptr(request_ptr,mpi_errno);
+ if (request_ptr && request_ptr->kind != MPIR_REQUEST_KIND__GREQUEST) {
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_ARG,
"**notgenreq", 0 );
}
@@ -114,7 +114,7 @@ int MPI_Grequest_complete( MPI_Request request )
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GREQUEST_COMPLETE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GREQUEST_COMPLETE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/greq_start.c b/src/mpi/pt2pt/greq_start.c
index e60d9a7..e7a1d95 100644
--- a/src/mpi/pt2pt/greq_start.c
+++ b/src/mpi/pt2pt/greq_start.c
@@ -30,16 +30,16 @@ PMPI_LOCAL int MPIR_Grequest_free_classes_on_finalize(void *extra_data);
#define MPI_Grequest_start PMPI_Grequest_start
/* preallocated grequest classes */
-#ifndef MPID_GREQ_CLASS_PREALLOC
-#define MPID_GREQ_CLASS_PREALLOC 2
+#ifndef MPIR_GREQ_CLASS_PREALLOC
+#define MPIR_GREQ_CLASS_PREALLOC 2
#endif
-MPID_Grequest_class MPID_Grequest_class_direct[MPID_GREQ_CLASS_PREALLOC] =
+MPIR_Grequest_class MPIR_Grequest_class_direct[MPIR_GREQ_CLASS_PREALLOC] =
{ {0} };
-MPIU_Object_alloc_t MPID_Grequest_class_mem = {0, 0, 0, 0, MPID_GREQ_CLASS,
- sizeof(MPID_Grequest_class),
- MPID_Grequest_class_direct,
- MPID_GREQ_CLASS_PREALLOC, };
+MPIR_Object_alloc_t MPIR_Grequest_class_mem = {0, 0, 0, 0, MPIR_GREQ_CLASS,
+ sizeof(MPIR_Grequest_class),
+ MPIR_Grequest_class_direct,
+ MPIR_GREQ_CLASS_PREALLOC, };
/* We jump through some minor hoops to manage the list of classes ourselves and
* only register a single finalizer to avoid hitting limitations in the current
@@ -47,7 +47,7 @@ MPIU_Object_alloc_t MPID_Grequest_class_mem = {0, 0, 0, 0, MPID_GREQ_CLASS,
* is a good candidate for registering one callback per greq class and trimming
* some of this logic. */
int MPIR_Grequest_registered_finalizer = 0;
-MPID_Grequest_class *MPIR_Grequest_class_list = NULL;
+MPIR_Grequest_class *MPIR_Grequest_class_list = NULL;
/* Any internal routines can go here. Make them static if possible. If they
are used by both the MPI and PMPI versions, use PMPI_LOCAL instead of
@@ -56,15 +56,15 @@ MPID_Grequest_class *MPIR_Grequest_class_list = NULL;
PMPI_LOCAL int MPIR_Grequest_free_classes_on_finalize(void *extra_data ATTRIBUTE((unused)))
{
int mpi_errno = MPI_SUCCESS;
- MPID_Grequest_class *last = NULL;
- MPID_Grequest_class *cur = MPIR_Grequest_class_list;
+ MPIR_Grequest_class *last = NULL;
+ MPIR_Grequest_class *cur = MPIR_Grequest_class_list;
/* FIXME MT this function is not thread safe when using fine-grained threading */
MPIR_Grequest_class_list = NULL;
while (cur) {
last = cur;
cur = last->next;
- MPIU_Handle_obj_free(&MPID_Grequest_class_mem, last);
+ MPIR_Handle_obj_free(&MPIR_Grequest_class_mem, last);
}
return mpi_errno;
@@ -77,50 +77,48 @@ PMPI_LOCAL int MPIR_Grequest_free_classes_on_finalize(void *extra_data ATTRIBUTE
int MPIR_Grequest_start_impl(MPI_Grequest_query_function *query_fn,
MPI_Grequest_free_function *free_fn,
MPI_Grequest_cancel_function *cancel_fn,
- void *extra_state, MPID_Request **request_ptr)
+ void *extra_state, MPIR_Request **request_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
/* MT FIXME this routine is not thread-safe in the non-global case */
- *request_ptr = MPID_Request_create();
+ *request_ptr = MPIR_Request_create(MPIR_REQUEST_KIND__GREQUEST);
MPIR_ERR_CHKANDJUMP1(request_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "generalized request");
- (*request_ptr)->kind = MPID_UREQUEST;
- MPIU_Object_set_ref( *request_ptr, 1 );
+ MPIR_Object_set_ref( *request_ptr, 1 );
(*request_ptr)->cc_ptr = &(*request_ptr)->cc;
- MPID_cc_set((*request_ptr)->cc_ptr, 1);
+ MPIR_cc_set((*request_ptr)->cc_ptr, 1);
(*request_ptr)->comm = NULL;
- (*request_ptr)->greq_fns = NULL;
- MPIU_CHKPMEM_MALLOC((*request_ptr)->greq_fns, struct MPID_Grequest_fns *, sizeof(struct MPID_Grequest_fns), mpi_errno, "greq_fns");
- (*request_ptr)->greq_fns->cancel_fn = cancel_fn;
- (*request_ptr)->greq_fns->free_fn = free_fn;
- (*request_ptr)->greq_fns->query_fn = query_fn;
- (*request_ptr)->greq_fns->poll_fn = NULL;
- (*request_ptr)->greq_fns->wait_fn = NULL;
- (*request_ptr)->greq_fns->grequest_extra_state = extra_state;
- (*request_ptr)->greq_fns->greq_lang = MPID_LANG_C;
+ MPIR_CHKPMEM_MALLOC((*request_ptr)->u.ureq.greq_fns, struct MPIR_Grequest_fns *, sizeof(struct MPIR_Grequest_fns), mpi_errno, "greq_fns");
+ (*request_ptr)->u.ureq.greq_fns->cancel_fn = cancel_fn;
+ (*request_ptr)->u.ureq.greq_fns->free_fn = free_fn;
+ (*request_ptr)->u.ureq.greq_fns->query_fn = query_fn;
+ (*request_ptr)->u.ureq.greq_fns->poll_fn = NULL;
+ (*request_ptr)->u.ureq.greq_fns->wait_fn = NULL;
+ (*request_ptr)->u.ureq.greq_fns->grequest_extra_state = extra_state;
+ (*request_ptr)->u.ureq.greq_fns->greq_lang = MPIR_LANG__C;
/* Add an additional reference to the greq. One of them will be
* released when we complete the request, and the second one, when
* we test or wait on it. */
MPIR_Request_add_ref((*request_ptr));
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
#else
-extern MPID_Grequest_class MPID_Grequest_class_direct[];
-extern MPIU_Object_alloc_t MPID_Grequest_class_mem;
+extern MPIR_Grequest_class MPIR_Grequest_class_direct[];
+extern MPIR_Object_alloc_t MPIR_Grequest_class_mem;
extern int MPIR_Grequest_registered_finalizer;
-extern MPID_Grequest_class *MPIR_Grequest_class_list;
+extern MPIR_Grequest_class *MPIR_Grequest_class_list;
#endif
#undef FUNCNAME
@@ -179,13 +177,13 @@ int MPI_Grequest_start( MPI_Grequest_query_function *query_fn,
void *extra_state, MPI_Request *request )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GREQUEST_START);
+ MPIR_Request *request_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GREQUEST_START);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GREQUEST_START);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GREQUEST_START);
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -203,12 +201,12 @@ int MPI_Grequest_start( MPI_Grequest_query_function *query_fn,
mpi_errno = MPIR_Grequest_start_impl(query_fn, free_fn, cancel_fn, extra_state, &request_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GREQUEST_START);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GREQUEST_START);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
@@ -264,11 +262,11 @@ int MPIX_Grequest_class_create(MPI_Grequest_query_function *query_fn,
MPIX_Grequest_wait_function *wait_fn,
MPIX_Grequest_class *greq_class)
{
- MPID_Grequest_class *class_ptr;
+ MPIR_Grequest_class *class_ptr;
int mpi_errno = MPI_SUCCESS;
- class_ptr = (MPID_Grequest_class *)
- MPIU_Handle_obj_alloc(&MPID_Grequest_class_mem);
+ class_ptr = (MPIR_Grequest_class *)
+ MPIR_Handle_obj_alloc(&MPIR_Grequest_class_mem);
/* --BEGIN ERROR HANDLING-- */
if (!class_ptr)
{
@@ -286,7 +284,7 @@ int MPIX_Grequest_class_create(MPI_Grequest_query_function *query_fn,
class_ptr->poll_fn = poll_fn;
class_ptr->wait_fn = wait_fn;
- MPIU_Object_set_ref(class_ptr, 1);
+ MPIR_Object_set_ref(class_ptr, 1);
if (MPIR_Grequest_class_list == NULL) {
class_ptr->next = NULL;
@@ -304,7 +302,7 @@ int MPIX_Grequest_class_create(MPI_Grequest_query_function *query_fn,
MPIR_Grequest_registered_finalizer = 1;
}
- MPID_OBJ_PUBLISH_HANDLE(*greq_class, class_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*greq_class, class_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
@@ -352,20 +350,20 @@ int MPIX_Grequest_class_allocate(MPIX_Grequest_class greq_class,
MPI_Request *request)
{
int mpi_errno;
- MPID_Request *lrequest_ptr;
- MPID_Grequest_class *class_ptr;
+ MPIR_Request *lrequest_ptr;
+ MPIR_Grequest_class *class_ptr;
*request = MPI_REQUEST_NULL;
- MPID_Grequest_class_get_ptr(greq_class, class_ptr);
+ MPIR_Grequest_class_get_ptr(greq_class, class_ptr);
mpi_errno = MPIR_Grequest_start_impl(class_ptr->query_fn, class_ptr->free_fn,
class_ptr->cancel_fn, extra_state,
&lrequest_ptr);
if (mpi_errno == MPI_SUCCESS)
{
*request = lrequest_ptr->handle;
- lrequest_ptr->greq_fns->poll_fn = class_ptr->poll_fn;
- lrequest_ptr->greq_fns->wait_fn = class_ptr->wait_fn;
- lrequest_ptr->greq_fns->greq_class = greq_class;
+ lrequest_ptr->u.ureq.greq_fns->poll_fn = class_ptr->poll_fn;
+ lrequest_ptr->u.ureq.greq_fns->wait_fn = class_ptr->wait_fn;
+ lrequest_ptr->u.ureq.greq_fns->greq_class = greq_class;
}
return mpi_errno;
}
@@ -406,7 +404,7 @@ int MPIX_Grequest_start( MPI_Grequest_query_function *query_fn,
void *extra_state, MPI_Request *request )
{
int mpi_errno;
- MPID_Request *lrequest_ptr;
+ MPIR_Request *lrequest_ptr;
*request = MPI_REQUEST_NULL;
mpi_errno = MPIX_Grequest_start_impl(query_fn, free_fn, cancel_fn, poll_fn, wait_fn, extra_state, &lrequest_ptr);
@@ -430,15 +428,15 @@ int MPIX_Grequest_start_impl( MPI_Grequest_query_function *query_fn,
MPI_Grequest_cancel_function *cancel_fn,
MPIX_Grequest_poll_function *poll_fn,
MPIX_Grequest_wait_function *wait_fn,
- void *extra_state, MPID_Request **request )
+ void *extra_state, MPIR_Request **request )
{
int mpi_errno;
mpi_errno = MPIR_Grequest_start_impl(query_fn, free_fn, cancel_fn, extra_state, request);
if (mpi_errno == MPI_SUCCESS) {
- (*request)->greq_fns->poll_fn = poll_fn;
- (*request)->greq_fns->wait_fn = wait_fn;
+ (*request)->u.ureq.greq_fns->poll_fn = poll_fn;
+ (*request)->u.ureq.greq_fns->wait_fn = wait_fn;
}
return mpi_errno;
diff --git a/src/mpi/pt2pt/ibsend.c b/src/mpi/pt2pt/ibsend.c
index 8313f25..803716d 100644
--- a/src/mpi/pt2pt/ibsend.c
+++ b/src/mpi/pt2pt/ibsend.c
@@ -22,7 +22,7 @@ int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* -- End Profiling Symbol Block */
typedef struct {
- MPID_Request *req;
+ MPIR_Request *req;
int cancelled;
} ibsend_req_info;
@@ -46,7 +46,7 @@ PMPI_LOCAL int MPIR_Ibsend_free( void *extra )
{
ibsend_req_info *ibsend_info = (ibsend_req_info *)extra;
- MPIU_Free( ibsend_info );
+ MPL_free( ibsend_info );
return MPI_SUCCESS;
}
@@ -59,14 +59,14 @@ PMPI_LOCAL int MPIR_Ibsend_cancel( void *extra, int complete )
int mpi_errno = MPI_SUCCESS;
ibsend_req_info *ibsend_info = (ibsend_req_info *)extra;
MPI_Status status;
- MPID_Request *req = ibsend_info->req;
+ MPIR_Request *req = ibsend_info->req;
MPI_Request req_hdl = req->handle;
/* FIXME: There should be no unreferenced args! */
/* Note that this value should always be 1 because
Grequest_complete is called on this request when it is
created */
- MPIU_UNREFERENCED_ARG(complete);
+ MPL_UNREFERENCED_ARG(complete);
/* Try to cancel the underlying request */
@@ -74,7 +74,7 @@ PMPI_LOCAL int MPIR_Ibsend_cancel( void *extra, int complete )
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = MPIR_Wait_impl( &req_hdl, &status );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_Test_cancelled_impl( &status, &ibsend_info->cancelled );
+ ibsend_info->cancelled = MPIR_STATUS_GET_CANCEL_BIT(status);
/* If the cancelation is successful, free the memory in the
attached buffer used by the request */
@@ -93,10 +93,10 @@ PMPI_LOCAL int MPIR_Ibsend_cancel( void *extra, int complete )
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Ibsend_impl(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm_ptr, MPI_Request *request)
+ MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr, *new_request_ptr;
+ MPIR_Request *request_ptr, *new_request_ptr;
ibsend_req_info *ibinfo=0;
/* We don't try tbsend in for MPI_Ibsend because we must create a
@@ -105,10 +105,10 @@ int MPIR_Ibsend_impl(const void *buf, int count, MPI_Datatype datatype, int dest
mpi_errno = MPIR_Bsend_isend( buf, count, datatype, dest, tag, comm_ptr,
IBSEND, &request_ptr );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIR_SENDQ_REMEMBER(request_ptr, dest, tag, comm_ptr->context_id);
+ MPII_SENDQ_REMEMBER(request_ptr, dest, tag, comm_ptr->context_id);
/* FIXME: use the memory management macros */
- ibinfo = (ibsend_req_info *)MPIU_Malloc( sizeof(ibsend_req_info) );
+ ibinfo = (ibsend_req_info *)MPL_malloc( sizeof(ibsend_req_info) );
ibinfo->req = request_ptr;
ibinfo->cancelled = 0;
mpi_errno = MPIR_Grequest_start_impl( MPIR_Ibsend_query, MPIR_Ibsend_free,
@@ -117,7 +117,7 @@ int MPIR_Ibsend_impl(const void *buf, int count, MPI_Datatype datatype, int dest
/* The request is immediately complete because the MPIR_Bsend_isend has
already moved the data out of the user's buffer */
MPIR_Grequest_complete_impl(new_request_ptr);
- MPID_OBJ_PUBLISH_HANDLE(*request, new_request_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*request, new_request_ptr->handle);
fn_exit:
return mpi_errno;
@@ -164,13 +164,13 @@ int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IBSEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IBSEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_IBSEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_IBSEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -184,7 +184,7 @@ int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -193,7 +193,7 @@ int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
{
MPIR_ERRTEST_COUNT(count,mpi_errno);
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
if (comm_ptr) {
@@ -207,10 +207,10 @@ int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -231,7 +231,7 @@ int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_IBSEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_IBSEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/improbe.c b/src/mpi/pt2pt/improbe.c
index 253ad01..51012ed 100644
--- a/src/mpi/pt2pt/improbe.c
+++ b/src/mpi/pt2pt/improbe.c
@@ -55,12 +55,12 @@ Output Parameters:
int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *msgp = NULL;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IMPROBE);
+ MPIR_Request *msgp = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IMPROBE);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IMPROBE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IMPROBE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -76,14 +76,14 @@ int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *mess
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(flag, "flag", mpi_errno);
@@ -96,12 +96,12 @@ int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *mess
/* ... body of routine ... */
*message = MPI_MESSAGE_NULL;
- mpi_errno = MPID_Improbe(source, tag, comm_ptr, MPID_CONTEXT_INTRA_PT2PT, flag, &msgp, status);
+ mpi_errno = MPID_Improbe(source, tag, comm_ptr, MPIR_CONTEXT_INTRA_PT2PT, flag, &msgp, status);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (*flag) {
if (msgp == NULL) {
- MPIU_Assert(source == MPI_PROC_NULL);
+ MPIR_Assert(source == MPI_PROC_NULL);
*message = MPI_MESSAGE_NO_PROC;
}
else {
@@ -112,7 +112,7 @@ int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *mess
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IMPROBE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IMPROBE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/imrecv.c b/src/mpi/pt2pt/imrecv.c
index 693aa1d..2ae5cc7 100644
--- a/src/mpi/pt2pt/imrecv.c
+++ b/src/mpi/pt2pt/imrecv.c
@@ -56,12 +56,12 @@ Output Parameters:
int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *rreq = NULL;
- MPID_Request *msgp = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IMRECV);
+ MPIR_Request *rreq = NULL;
+ MPIR_Request *msgp = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IMRECV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IMRECV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_IMRECV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +77,7 @@ int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Request_get_ptr(*message, msgp);
+ MPIR_Request_get_ptr(*message, msgp);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -85,9 +85,9 @@ int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -95,9 +95,9 @@ int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message
/* MPI_MESSAGE_NO_PROC should yield a "proc null" status */
if (*message != MPI_MESSAGE_NO_PROC) {
- MPID_Request_valid_ptr(msgp, mpi_errno);
+ MPIR_Request_valid_ptr(msgp, mpi_errno);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKANDJUMP((msgp->kind != MPID_REQUEST_MPROBE),
+ MPIR_ERR_CHKANDJUMP((msgp->kind != MPIR_REQUEST_KIND__MPROBE),
mpi_errno, MPI_ERR_ARG, "**reqnotmsg");
}
@@ -113,14 +113,14 @@ int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message
mpi_errno = MPID_Imrecv(buf, count, datatype, msgp, &rreq);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(rreq != NULL);
+ MPIR_Assert(rreq != NULL);
*request = rreq->handle;
*message = MPI_MESSAGE_NULL;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IMRECV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_IMRECV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/iprobe.c b/src/mpi/pt2pt/iprobe.c
index 82df3fa..94a6029 100644
--- a/src/mpi/pt2pt/iprobe.c
+++ b/src/mpi/pt2pt/iprobe.c
@@ -59,13 +59,13 @@ int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag,
{
static const char FCNAME[] = "MPI_Iprobe";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IPROBE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IPROBE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_IPROBE);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_IPROBE);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -79,7 +79,7 @@ int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -87,7 +87,7 @@ int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate communicator */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL( flag, "flag", mpi_errno );
@@ -103,14 +103,14 @@ int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag,
/* ... body of routine ... */
/* FIXME: Is this correct for intercomms? */
- mpi_errno = MPID_Iprobe(source, tag, comm_ptr, MPID_CONTEXT_INTRA_PT2PT,
+ mpi_errno = MPID_Iprobe(source, tag, comm_ptr, MPIR_CONTEXT_INTRA_PT2PT,
flag, status);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_IPROBE);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_IPROBE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/irecv.c b/src/mpi/pt2pt/irecv.c
index 2d532ca..1980d23 100644
--- a/src/mpi/pt2pt/irecv.c
+++ b/src/mpi/pt2pt/irecv.c
@@ -63,14 +63,14 @@ int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
{
static const char FCNAME[] = "MPI_Irecv";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IRECV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IRECV);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_BACK(MPID_STATE_MPI_IRECV);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_BACK(MPID_STATE_MPI_IRECV);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -84,14 +84,14 @@ int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -105,10 +105,10 @@ int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -124,7 +124,7 @@ int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
/* ... body of routine ... */
mpi_errno = MPID_Irecv(buf, count, datatype, source, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
/* return the handle of the request to the user */
/* MPIU_OBJ_HANDLE_PUBLISH is unnecessary for irecv, lower-level access is
* responsible for its own consistency, while upper-level field access is
@@ -141,7 +141,7 @@ int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT_BACK(MPID_STATE_MPI_IRECV);
+ MPIR_FUNC_TERSE_PT2PT_EXIT_BACK(MPID_STATE_MPI_IRECV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/irsend.c b/src/mpi/pt2pt/irsend.c
index 985f6f1..6e9ded7 100644
--- a/src/mpi/pt2pt/irsend.c
+++ b/src/mpi/pt2pt/irsend.c
@@ -64,14 +64,14 @@ int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
{
static const char FCNAME[] = "MPI_Irsend";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_IRSEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_IRSEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_IRSEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_IRSEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -85,14 +85,14 @@ int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -106,10 +106,10 @@ int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -125,9 +125,9 @@ int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* ... body of routine ... */
mpi_errno = MPID_Irsend(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIR_SENDQ_REMEMBER(request_ptr,dest,tag,comm_ptr->context_id);
+ MPII_SENDQ_REMEMBER(request_ptr,dest,tag,comm_ptr->context_id);
/* return the handle of the request to the user */
/* MPIU_OBJ_HANDLE_PUBLISH is unnecessary for irsend, lower-level access is
@@ -138,7 +138,7 @@ int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_IRSEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_IRSEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/isend.c b/src/mpi/pt2pt/isend.c
index 5cfbcff..0ca0608 100644
--- a/src/mpi/pt2pt/isend.c
+++ b/src/mpi/pt2pt/isend.c
@@ -62,14 +62,14 @@ int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ISEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ISEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_ISEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_ISEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -83,14 +83,14 @@ int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -104,10 +104,10 @@ int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -123,10 +123,10 @@ int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* ... body of routine ... */
mpi_errno = MPID_Isend(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIR_SENDQ_REMEMBER(request_ptr,dest,tag,comm_ptr->context_id);
+ MPII_SENDQ_REMEMBER(request_ptr,dest,tag,comm_ptr->context_id);
/* return the handle of the request to the user */
/* MPIU_OBJ_HANDLE_PUBLISH is unnecessary for isend, lower-level access is
@@ -137,7 +137,7 @@ int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_ISEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_ISEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/issend.c b/src/mpi/pt2pt/issend.c
index a3a234d..9a5630c 100644
--- a/src/mpi/pt2pt/issend.c
+++ b/src/mpi/pt2pt/issend.c
@@ -63,14 +63,14 @@ int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int
{
static const char FCNAME[] = "MPI_Issend";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ISSEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ISSEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_ISSEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_ISSEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -84,14 +84,14 @@ int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -105,10 +105,10 @@ int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -124,9 +124,9 @@ int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* ... body of routine ... */
mpi_errno = MPID_Issend(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIR_SENDQ_REMEMBER(request_ptr,dest,tag,comm_ptr->context_id);
+ MPII_SENDQ_REMEMBER(request_ptr,dest,tag,comm_ptr->context_id);
/* return the handle of the request to the user */
/* MPIU_OBJ_HANDLE_PUBLISH is unnecessary for issend, lower-level access is
@@ -137,7 +137,7 @@ int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_ISSEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_ISSEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/mpir_request.c b/src/mpi/pt2pt/mpir_request.c
index 2c0264f..9453e58 100644
--- a/src/mpi/pt2pt/mpir_request.c
+++ b/src/mpi/pt2pt/mpir_request.c
@@ -9,6 +9,11 @@
/* style:PMPIuse:PMPI_Status_f2c:2 sig:0 */
+MPIR_Request MPIR_Request_direct[MPIR_REQUEST_PREALLOC] = {{0}};
+MPIR_Object_alloc_t MPIR_Request_mem = {
+ 0, 0, 0, 0, MPIR_REQUEST, sizeof(MPIR_Request), MPIR_Request_direct,
+ MPIR_REQUEST_PREALLOC };
+
#undef FUNCNAME
#define FUNCNAME MPIR_Progress_wait_request
#undef FCNAME
@@ -19,16 +24,16 @@
A helper routine that implements the very common case of running the progress
engine until the given request is complete.
@*/
-int MPIR_Progress_wait_request(MPID_Request *req)
+int MPIR_Progress_wait_request(MPIR_Request *req)
{
int mpi_errno = MPI_SUCCESS;
- if (!MPID_Request_is_complete(req))
+ if (!MPIR_Request_is_complete(req))
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(req))
+ while (!MPIR_Request_is_complete(req))
{
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno != MPI_SUCCESS)
@@ -41,8 +46,8 @@ int MPIR_Progress_wait_request(MPID_Request *req)
}
MPID_Progress_end(&progress_state);
}
-fn_fail: /* no special err handling at this level */
-fn_exit:
+
+ fn_fail:
return mpi_errno;
}
@@ -56,11 +61,11 @@ fn_exit:
was inactive and did not require any extra completion operation.
If debugger information is being provided for pending (user-initiated)
- send operations, the macros MPIR_SENDQ_FORGET will be defined to
- call the routine MPIR_Sendq_forget; otherwise that macro will be a no-op.
+ send operations, the macros MPII_SENDQ_FORGET will be defined to
+ call the routine MPII_Sendq_forget; otherwise that macro will be a no-op.
The implementation of the MPIR_Sendq_xxx is in src/mpi/debugger/dbginit.c .
*/
-int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
+int MPIR_Request_complete(MPI_Request * request, MPIR_Request * request_ptr,
MPI_Status * status, int * active)
{
int mpi_errno = MPI_SUCCESS;
@@ -68,39 +73,39 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
*active = TRUE;
switch(request_ptr->kind)
{
- case MPID_REQUEST_SEND:
+ case MPIR_REQUEST_KIND__SEND:
{
if (status != MPI_STATUS_IGNORE)
{
MPIR_STATUS_SET_CANCEL_BIT(*status, MPIR_STATUS_GET_CANCEL_BIT(request_ptr->status));
}
mpi_errno = request_ptr->status.MPI_ERROR;
- MPIR_SENDQ_FORGET(request_ptr);
- MPID_Request_release(request_ptr);
+ MPII_SENDQ_FORGET(request_ptr);
+ MPIR_Request_free(request_ptr);
if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
- case MPID_REQUEST_RECV:
+ case MPIR_REQUEST_KIND__RECV:
{
MPIR_Request_extract_status(request_ptr, status);
mpi_errno = request_ptr->status.MPI_ERROR;
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
- case MPID_PREQUEST_SEND:
+ case MPIR_REQUEST_KIND__PREQUEST_SEND:
{
- if (request_ptr->partner_request != NULL)
+ if (request_ptr->u.persist.real_request != NULL)
{
- MPID_Request * prequest_ptr = request_ptr->partner_request;
+ MPIR_Request * prequest_ptr = request_ptr->u.persist.real_request;
/* reset persistent request to inactive state */
- MPID_cc_set(&request_ptr->cc, 0);
+ MPIR_cc_set(&request_ptr->cc, 0);
request_ptr->cc_ptr = &request_ptr->cc;
- request_ptr->partner_request = NULL;
+ request_ptr->u.persist.real_request = NULL;
- if (prequest_ptr->kind != MPID_UREQUEST)
+ if (prequest_ptr->kind != MPIR_REQUEST_KIND__GREQUEST)
{
if (status != MPI_STATUS_IGNORE)
{
@@ -133,7 +138,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
}
}
- MPID_Request_release(prequest_ptr);
+ MPIR_Request_free(prequest_ptr);
}
else
{
@@ -157,21 +162,21 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
break;
}
- case MPID_PREQUEST_RECV:
+ case MPIR_REQUEST_KIND__PREQUEST_RECV:
{
- if (request_ptr->partner_request != NULL)
+ if (request_ptr->u.persist.real_request != NULL)
{
- MPID_Request * prequest_ptr = request_ptr->partner_request;
+ MPIR_Request * prequest_ptr = request_ptr->u.persist.real_request;
/* reset persistent request to inactive state */
- MPID_cc_set(&request_ptr->cc, 0);
+ MPIR_cc_set(&request_ptr->cc, 0);
request_ptr->cc_ptr = &request_ptr->cc;
- request_ptr->partner_request = NULL;
+ request_ptr->u.persist.real_request = NULL;
MPIR_Request_extract_status(prequest_ptr, status);
mpi_errno = prequest_ptr->status.MPI_ERROR;
- MPID_Request_release(prequest_ptr);
+ MPIR_Request_free(prequest_ptr);
}
else
{
@@ -193,7 +198,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
break;
}
- case MPID_UREQUEST:
+ case MPIR_REQUEST_KIND__GREQUEST:
{
int rc;
@@ -209,18 +214,18 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
mpi_errno = rc;
}
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
- case MPID_COLL_REQUEST:
- case MPID_WIN_REQUEST:
+ case MPIR_REQUEST_KIND__COLL:
+ case MPIR_REQUEST_KIND__RMA:
{
mpi_errno = request_ptr->status.MPI_ERROR;
MPIR_Request_extract_status(request_ptr, status);
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
@@ -249,33 +254,33 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
* [BRT] it is used by testall, although looking at testall now, I think the
* algorithm can be change slightly and eliminate the need for this routine
*/
-int MPIR_Request_get_error(MPID_Request * request_ptr)
+int MPIR_Request_get_error(MPIR_Request * request_ptr)
{
int mpi_errno = MPI_SUCCESS;
switch(request_ptr->kind)
{
- case MPID_REQUEST_SEND:
- case MPID_REQUEST_RECV:
- case MPID_COLL_REQUEST:
+ case MPIR_REQUEST_KIND__SEND:
+ case MPIR_REQUEST_KIND__RECV:
+ case MPIR_REQUEST_KIND__COLL:
{
mpi_errno = request_ptr->status.MPI_ERROR;
break;
}
- case MPID_PREQUEST_SEND:
+ case MPIR_REQUEST_KIND__PREQUEST_SEND:
{
- if (request_ptr->partner_request != NULL)
+ if (request_ptr->u.persist.real_request != NULL)
{
- if (request_ptr->partner_request->kind == MPID_UREQUEST)
+ if (request_ptr->u.persist.real_request->kind == MPIR_REQUEST_KIND__GREQUEST)
{
/* This is needed for persistent Bsend requests */
mpi_errno = MPIR_Grequest_query(
- request_ptr->partner_request);
+ request_ptr->u.persist.real_request);
}
if (mpi_errno == MPI_SUCCESS)
{
- mpi_errno = request_ptr->partner_request->status.MPI_ERROR;
+ mpi_errno = request_ptr->u.persist.real_request->status.MPI_ERROR;
}
}
else
@@ -286,11 +291,11 @@ int MPIR_Request_get_error(MPID_Request * request_ptr)
break;
}
- case MPID_PREQUEST_RECV:
+ case MPIR_REQUEST_KIND__PREQUEST_RECV:
{
- if (request_ptr->partner_request != NULL)
+ if (request_ptr->u.persist.real_request != NULL)
{
- mpi_errno = request_ptr->partner_request->status.MPI_ERROR;
+ mpi_errno = request_ptr->u.persist.real_request->status.MPI_ERROR;
}
else
{
@@ -300,32 +305,32 @@ int MPIR_Request_get_error(MPID_Request * request_ptr)
break;
}
- case MPID_UREQUEST:
+ case MPIR_REQUEST_KIND__GREQUEST:
{
int rc;
/* Note that we've acquired the thread private storage above */
- switch (request_ptr->greq_fns->greq_lang)
+ switch (request_ptr->u.ureq.greq_fns->greq_lang)
{
- case MPID_LANG_C:
+ case MPIR_LANG__C:
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
#endif
- rc = (request_ptr->greq_fns->query_fn)(
- request_ptr->greq_fns->grequest_extra_state,
+ rc = (request_ptr->u.ureq.greq_fns->query_fn)(
+ request_ptr->u.ureq.greq_fns->grequest_extra_state,
&request_ptr->status);
MPIR_ERR_CHKANDSTMT1((rc != MPI_SUCCESS), mpi_errno,
MPI_ERR_OTHER,;, "**user", "**userquery %d", rc);
break;
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN:
- case MPID_LANG_FORTRAN90:
+ case MPIR_LANG__FORTRAN:
+ case MPIR_LANG__FORTRAN90:
{
MPI_Fint ierr;
MPI_Fint is[sizeof(MPI_Status)/sizeof(int)];
- ((MPIR_Grequest_f77_query_function*)(request_ptr->greq_fns->query_fn))(
- request_ptr->greq_fns->grequest_extra_state, is,
+ ((MPIR_Grequest_f77_query_function*)(request_ptr->u.ureq.greq_fns->query_fn))(
+ request_ptr->u.ureq.greq_fns->grequest_extra_state, is,
&ierr );
rc = (int) ierr;
if (rc == MPI_SUCCESS)
@@ -342,7 +347,7 @@ int MPIR_Request_get_error(MPID_Request * request_ptr)
/* This should not happen */
MPIR_ERR_SETANDSTMT1(mpi_errno, MPI_ERR_INTERN,;,
"**badcase",
- "**badcase %d", request_ptr->greq_fns->greq_lang);
+ "**badcase %d", request_ptr->u.ureq.greq_fns->greq_lang);
break;
/* --END ERROR HANDLING-- */
}
@@ -367,13 +372,13 @@ int MPIR_Request_get_error(MPID_Request * request_ptr)
#ifdef HAVE_FORTRAN_BINDING
/* Set the language type to Fortran for this (generalized) request */
-void MPIR_Grequest_set_lang_f77( MPI_Request greq )
+void MPII_Grequest_set_lang_f77( MPI_Request greq )
{
- MPID_Request *greq_ptr;
+ MPIR_Request *greq_ptr;
- MPID_Request_get_ptr( greq, greq_ptr );
+ MPIR_Request_get_ptr( greq, greq_ptr );
- greq_ptr->greq_fns->greq_lang = MPID_LANG_FORTRAN;
+ greq_ptr->u.ureq.greq_fns->greq_lang = MPIR_LANG__FORTRAN;
}
#endif
@@ -382,31 +387,31 @@ void MPIR_Grequest_set_lang_f77( MPI_Request greq )
#define FUNCNAME MPIR_Grequest_cancel
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Grequest_cancel(MPID_Request * request_ptr, int complete)
+int MPIR_Grequest_cancel(MPIR_Request * request_ptr, int complete)
{
int rc;
int mpi_errno = MPI_SUCCESS;
- switch (request_ptr->greq_fns->greq_lang)
+ switch (request_ptr->u.ureq.greq_fns->greq_lang)
{
- case MPID_LANG_C:
+ case MPIR_LANG__C:
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
#endif
- rc = (request_ptr->greq_fns->cancel_fn)(
- request_ptr->greq_fns->grequest_extra_state, complete);
+ rc = (request_ptr->u.ureq.greq_fns->cancel_fn)(
+ request_ptr->u.ureq.greq_fns->grequest_extra_state, complete);
MPIR_ERR_CHKANDSTMT1((rc != MPI_SUCCESS), mpi_errno,
MPI_ERR_OTHER,;, "**user", "**usercancel %d", rc);
break;
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN:
- case MPID_LANG_FORTRAN90:
+ case MPIR_LANG__FORTRAN:
+ case MPIR_LANG__FORTRAN90:
{
MPI_Fint ierr;
MPI_Fint icomplete = complete;
- ((MPIR_Grequest_f77_cancel_function *)(request_ptr->greq_fns->cancel_fn))(
- request_ptr->greq_fns->grequest_extra_state, &icomplete, &ierr);
+ ((MPIR_Grequest_f77_cancel_function *)(request_ptr->u.ureq.greq_fns->cancel_fn))(
+ request_ptr->u.ureq.greq_fns->grequest_extra_state, &icomplete, &ierr);
rc = (int) ierr;
MPIR_ERR_CHKANDSTMT1((rc != MPI_SUCCESS), mpi_errno, MPI_ERR_OTHER,
{;}, "**user", "**usercancel %d", rc);
@@ -419,7 +424,7 @@ int MPIR_Grequest_cancel(MPID_Request * request_ptr, int complete)
/* --BEGIN ERROR HANDLING-- */
/* This should not happen */
MPIR_ERR_SETANDSTMT1(mpi_errno, MPI_ERR_INTERN,;, "**badcase",
- "**badcase %d", request_ptr->greq_fns->greq_lang);
+ "**badcase %d", request_ptr->u.ureq.greq_fns->greq_lang);
break;
/* --END ERROR HANDLING-- */
}
@@ -433,30 +438,30 @@ int MPIR_Grequest_cancel(MPID_Request * request_ptr, int complete)
#define FUNCNAME MPIR_Grequest_query
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Grequest_query(MPID_Request * request_ptr)
+int MPIR_Grequest_query(MPIR_Request * request_ptr)
{
int rc;
int mpi_errno = MPI_SUCCESS;
- switch (request_ptr->greq_fns->greq_lang)
+ switch (request_ptr->u.ureq.greq_fns->greq_lang)
{
- case MPID_LANG_C:
+ case MPIR_LANG__C:
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
#endif
- rc = (request_ptr->greq_fns->query_fn)(request_ptr->greq_fns->grequest_extra_state,
+ rc = (request_ptr->u.ureq.greq_fns->query_fn)(request_ptr->u.ureq.greq_fns->grequest_extra_state,
&request_ptr->status);
MPIR_ERR_CHKANDSTMT1((rc != MPI_SUCCESS), mpi_errno, MPI_ERR_OTHER,
{;}, "**user", "**userquery %d", rc);
break;
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN:
- case MPID_LANG_FORTRAN90:
+ case MPIR_LANG__FORTRAN:
+ case MPIR_LANG__FORTRAN90:
{
MPI_Fint ierr;
MPI_Fint is[sizeof(MPI_Status)/sizeof(int)];
- ((MPIR_Grequest_f77_query_function *)(request_ptr->greq_fns->query_fn))(
- request_ptr->greq_fns->grequest_extra_state, is, &ierr );
+ ((MPIR_Grequest_f77_query_function *)(request_ptr->u.ureq.greq_fns->query_fn))(
+ request_ptr->u.ureq.greq_fns->grequest_extra_state, is, &ierr );
rc = (int)ierr;
if (rc == MPI_SUCCESS)
PMPI_Status_f2c( is, &request_ptr->status );
@@ -470,7 +475,7 @@ int MPIR_Grequest_query(MPID_Request * request_ptr)
/* --BEGIN ERROR HANDLING-- */
/* This should not happen */
MPIR_ERR_SETANDSTMT1(mpi_errno, MPI_ERR_INTERN,;, "**badcase",
- "**badcase %d", request_ptr->greq_fns->greq_lang);
+ "**badcase %d", request_ptr->u.ureq.greq_fns->greq_lang);
break;
/* --END ERROR HANDLING-- */
}
@@ -484,29 +489,29 @@ int MPIR_Grequest_query(MPID_Request * request_ptr)
#define FUNCNAME MPIR_Grequest_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Grequest_free(MPID_Request * request_ptr)
+int MPIR_Grequest_free(MPIR_Request * request_ptr)
{
int rc;
int mpi_errno = MPI_SUCCESS;
- switch (request_ptr->greq_fns->greq_lang)
+ switch (request_ptr->u.ureq.greq_fns->greq_lang)
{
- case MPID_LANG_C:
+ case MPIR_LANG__C:
#ifdef HAVE_CXX_BINDING
- case MPID_LANG_CXX:
+ case MPIR_LANG__CXX:
#endif
- rc = (request_ptr->greq_fns->free_fn)(request_ptr->greq_fns->grequest_extra_state);
+ rc = (request_ptr->u.ureq.greq_fns->free_fn)(request_ptr->u.ureq.greq_fns->grequest_extra_state);
MPIR_ERR_CHKANDSTMT1((rc != MPI_SUCCESS), mpi_errno, MPI_ERR_OTHER,
{;}, "**user", "**userfree %d", rc);
break;
#ifdef HAVE_FORTRAN_BINDING
- case MPID_LANG_FORTRAN:
- case MPID_LANG_FORTRAN90:
+ case MPIR_LANG__FORTRAN:
+ case MPIR_LANG__FORTRAN90:
{
MPI_Fint ierr;
- ((MPIR_Grequest_f77_free_function *)(request_ptr->greq_fns->free_fn))(
- request_ptr->greq_fns->grequest_extra_state, &ierr);
+ ((MPIR_Grequest_f77_free_function *)(request_ptr->u.ureq.greq_fns->free_fn))(
+ request_ptr->u.ureq.greq_fns->grequest_extra_state, &ierr);
rc = (int) ierr;
MPIR_ERR_CHKANDSTMT1((rc != MPI_SUCCESS), mpi_errno, MPI_ERR_OTHER,
{;}, "**user", "**userfree %d", rc);
@@ -519,7 +524,7 @@ int MPIR_Grequest_free(MPID_Request * request_ptr)
/* --BEGIN ERROR HANDLING-- */
/* This should not happen */
MPIR_ERR_SETANDSTMT1(mpi_errno, MPI_ERR_INTERN, {;}, "**badcase",
- "**badcase %d", request_ptr->greq_fns->greq_lang);
+ "**badcase %d", request_ptr->u.ureq.greq_fns->greq_lang);
break;
/* --END ERROR HANDLING-- */
}
@@ -537,33 +542,33 @@ int MPIR_Grequest_free(MPID_Request * request_ptr)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Grequest_progress_poke(int count,
- MPID_Request **request_ptrs,
+ MPIR_Request **request_ptrs,
MPI_Status array_of_statuses[] )
{
MPIX_Grequest_wait_function *wait_fn = NULL;
void ** state_ptrs;
int i, j, n_classes, n_native, n_greq;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
- MPIU_CHKLMEM_MALLOC(state_ptrs, void **, sizeof(void*) * count, mpi_errno, "state_ptrs");
+ MPIR_CHKLMEM_MALLOC(state_ptrs, void **, sizeof(void*) * count, mpi_errno, "state_ptrs");
/* This somewhat messy for-loop computes how many requests are native
* requests and how many are generalized requests, and how many generalized
* request classes those grequests are members of */
for (i=0, j=0, n_classes=1, n_native=0, n_greq=0; i< count; i++)
{
- if (request_ptrs[i] == NULL || MPID_Request_is_complete(request_ptrs[i])) continue;
- if (request_ptrs[i]->kind == MPID_UREQUEST)
+ if (request_ptrs[i] == NULL || MPIR_Request_is_complete(request_ptrs[i])) continue;
+ if (request_ptrs[i]->kind == MPIR_REQUEST_KIND__GREQUEST)
{
n_greq += 1;
- wait_fn = request_ptrs[i]->greq_fns->wait_fn;
- state_ptrs[j] = request_ptrs[i]->greq_fns->grequest_extra_state;
+ wait_fn = request_ptrs[i]->u.ureq.greq_fns->wait_fn;
+ state_ptrs[j] = request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state;
j++;
if (i+1 < count) {
if (request_ptrs[i+1] == NULL ||
- (request_ptrs[i]->greq_fns->greq_class !=
- request_ptrs[i+1]->greq_fns->greq_class) )
+ (request_ptrs[i]->u.ureq.greq_fns->greq_class !=
+ request_ptrs[i+1]->u.ureq.greq_fns->greq_class) )
n_classes += 1;
}
} else {
@@ -577,17 +582,17 @@ int MPIR_Grequest_progress_poke(int count,
for (i = 0; i< count; i++ )
{
if (request_ptrs[i] != NULL &&
- request_ptrs[i]->kind == MPID_UREQUEST &&
- !MPID_Request_is_complete(request_ptrs[i]) &&
- request_ptrs[i]->greq_fns->poll_fn != NULL)
+ request_ptrs[i]->kind == MPIR_REQUEST_KIND__GREQUEST &&
+ !MPIR_Request_is_complete(request_ptrs[i]) &&
+ request_ptrs[i]->u.ureq.greq_fns->poll_fn != NULL)
{
- mpi_errno = (request_ptrs[i]->greq_fns->poll_fn)(request_ptrs[i]->greq_fns->grequest_extra_state, &(array_of_statuses[i]));
+ mpi_errno = (request_ptrs[i]->u.ureq.greq_fns->poll_fn)(request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state, &(array_of_statuses[i]));
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -600,15 +605,15 @@ fn_fail:
#define FUNCNAME MPIR_Grequest_waitall
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Grequest_waitall(int count, MPID_Request * const * request_ptrs)
+int MPIR_Grequest_waitall(int count, MPIR_Request * const * request_ptrs)
{
void ** state_ptrs;
int i;
int mpi_error = MPI_SUCCESS;
MPID_Progress_state progress_state;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
- MPIU_CHKLMEM_MALLOC(state_ptrs, void *, sizeof(void*)*count, mpi_error, "state_ptrs");
+ MPIR_CHKLMEM_MALLOC(state_ptrs, void *, sizeof(void*)*count, mpi_error, "state_ptrs");
/* DISABLED CODE: The greq wait_fn function returns when ANY
of the requests completes, rather than all. Also, once a
@@ -630,16 +635,16 @@ int MPIR_Grequest_waitall(int count, MPID_Request * const * request_ptrs)
for (i = 0; i < count; ++i)
{
/* skip over requests we're not interested in */
- if (request_ptrs[i] == NULL || *request_ptrs[i]->cc_ptr == 0 || request_ptrs[i]->kind != MPID_UREQUEST)
+ if (request_ptrs[i] == NULL || *request_ptrs[i]->cc_ptr == 0 || request_ptrs[i]->kind != MPIR_REQUEST_KIND__GREQUEST)
continue;
- if (n_greq == 0 || request_ptrs[i]->greq_fns->greq_class == curr_class)
+ if (n_greq == 0 || request_ptrs[i]->u.ureq.greq_fns->greq_class == curr_class)
{
/* if this is the first grequest of a group, or if it's the
same class as the last one, add its state to the list */
- curr_class = request_ptrs[i]->greq_fns->greq_class;
- wait_fn = request_ptrs[i]->greq_fns->wait_fn;
- state_ptrs[n_greq] = request_ptrs[i]->greq_fns->grequest_extra_state;
+ curr_class = request_ptrs[i]->u.ureq.greq_fns->greq_class;
+ wait_fn = request_ptrs[i]->u.ureq.greq_fns->wait_fn;
+ state_ptrs[n_greq] = request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state;
++n_greq;
}
else
@@ -649,9 +654,9 @@ int MPIR_Grequest_waitall(int count, MPID_Request * const * request_ptrs)
mpi_error = (wait_fn)(n_greq, state_ptrs, 0, NULL);
if (mpi_error) MPIR_ERR_POP(mpi_error);
- curr_class = request_ptrs[i]->greq_fns->greq_class;
- wait_fn = request_ptrs[i]->greq_fns->wait_fn;
- state_ptrs[0] = request_ptrs[i]->greq_fns->grequest_extra_state;
+ curr_class = request_ptrs[i]->u.ureq.greq_fns->greq_class;
+ wait_fn = request_ptrs[i]->u.ureq.greq_fns->wait_fn;
+ state_ptrs[0] = request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state;
n_greq = 1;
}
}
@@ -668,24 +673,24 @@ int MPIR_Grequest_waitall(int count, MPID_Request * const * request_ptrs)
{
/* skip over requests we're not interested in */
if (request_ptrs[i] == NULL ||
- MPID_Request_is_complete(request_ptrs[i]) ||
- request_ptrs[i]->kind != MPID_UREQUEST ||
- request_ptrs[i]->greq_fns->wait_fn == NULL)
+ MPIR_Request_is_complete(request_ptrs[i]) ||
+ request_ptrs[i]->kind != MPIR_REQUEST_KIND__GREQUEST ||
+ request_ptrs[i]->u.ureq.greq_fns->wait_fn == NULL)
{
continue;
}
- mpi_error = (request_ptrs[i]->greq_fns->wait_fn)(1, &request_ptrs[i]->greq_fns->grequest_extra_state, 0, NULL);
+ mpi_error = (request_ptrs[i]->u.ureq.greq_fns->wait_fn)(1, &request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state, 0, NULL);
if (mpi_error) MPIR_ERR_POP(mpi_error);
- MPIU_Assert(MPID_Request_is_complete(request_ptrs[i]));
+ MPIR_Assert(MPIR_Request_is_complete(request_ptrs[i]));
}
MPID_Progress_start(&progress_state);
for (i = 0; i < count; ++i)
{
if (request_ptrs[i] == NULL ||
- MPID_Request_is_complete(request_ptrs[i]) ||
- request_ptrs[i]->kind != MPID_UREQUEST)
+ MPIR_Request_is_complete(request_ptrs[i]) ||
+ request_ptrs[i]->kind != MPIR_REQUEST_KIND__GREQUEST)
{
continue;
}
@@ -695,7 +700,7 @@ int MPIR_Grequest_waitall(int count, MPID_Request * const * request_ptrs)
other thread, we'll make progress on regular requests too. The
progress engine should permit the other thread to run at some
point. */
- while (!MPID_Request_is_complete(request_ptrs[i]))
+ while (!MPIR_Request_is_complete(request_ptrs[i]))
{
mpi_error = MPID_Progress_wait(&progress_state);
if (mpi_error != MPI_SUCCESS)
@@ -711,7 +716,7 @@ int MPIR_Grequest_waitall(int count, MPID_Request * const * request_ptrs)
#endif
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_error;
fn_fail:
goto fn_exit;
diff --git a/src/mpi/pt2pt/mprobe.c b/src/mpi/pt2pt/mprobe.c
index b3c962a..526030f 100644
--- a/src/mpi/pt2pt/mprobe.c
+++ b/src/mpi/pt2pt/mprobe.c
@@ -53,12 +53,12 @@ Output Parameters:
int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *msgp = NULL;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_MPROBE);
+ MPIR_Request *msgp = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_MPROBE);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_MPROBE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_MPROBE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -74,14 +74,14 @@ int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Sta
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -92,11 +92,11 @@ int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Sta
/* ... body of routine ... */
*message = MPI_MESSAGE_NULL;
- mpi_errno = MPID_Mprobe(source, tag, comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &msgp, status);
+ mpi_errno = MPID_Mprobe(source, tag, comm_ptr, MPIR_CONTEXT_INTRA_PT2PT, &msgp, status);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (msgp == NULL) {
- MPIU_Assert(source == MPI_PROC_NULL);
+ MPIR_Assert(source == MPI_PROC_NULL);
*message = MPI_MESSAGE_NO_PROC;
}
else {
@@ -106,7 +106,7 @@ int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Sta
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_MPROBE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_MPROBE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/mrecv.c b/src/mpi/pt2pt/mrecv.c
index f1c1fa0..4bd8b3e 100644
--- a/src/mpi/pt2pt/mrecv.c
+++ b/src/mpi/pt2pt/mrecv.c
@@ -56,11 +56,11 @@ Output Parameters:
int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *msgp = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_MRECV);
+ MPIR_Request *msgp = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_MRECV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_MRECV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_MRECV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -76,7 +76,7 @@ int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Request_get_ptr(*message, msgp);
+ MPIR_Request_get_ptr(*message, msgp);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -84,9 +84,9 @@ int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -94,9 +94,9 @@ int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
/* MPI_MESSAGE_NO_PROC should yield a "proc null" status */
if (*message != MPI_MESSAGE_NO_PROC) {
- MPID_Request_valid_ptr(msgp, mpi_errno);
+ MPIR_Request_valid_ptr(msgp, mpi_errno);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKANDJUMP((msgp->kind != MPID_REQUEST_MPROBE),
+ MPIR_ERR_CHKANDJUMP((msgp->kind != MPIR_REQUEST_KIND__MPROBE),
mpi_errno, MPI_ERR_ARG, "**reqnotmsg");
}
@@ -116,7 +116,7 @@ int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_MRECV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_MRECV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/probe.c b/src/mpi/pt2pt/probe.c
index 68c9398..f0a9df4 100644
--- a/src/mpi/pt2pt/probe.c
+++ b/src/mpi/pt2pt/probe.c
@@ -55,13 +55,13 @@ int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
{
static const char FCNAME[] = "MPI_Probe";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PROBE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PROBE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_PROBE);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_PROBE);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -75,7 +75,7 @@ int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +83,7 @@ int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate communicator */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_RECV_TAG(tag,mpi_errno);
@@ -97,13 +97,13 @@ int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
/* ... body of routine ... */
- mpi_errno = MPID_Probe(source, tag, comm_ptr, MPID_CONTEXT_INTRA_PT2PT, status);
+ mpi_errno = MPID_Probe(source, tag, comm_ptr, MPIR_CONTEXT_INTRA_PT2PT, status);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_PROBE);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_PROBE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index e0a9185..dd774f3 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -69,14 +69,14 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
{
static const char FCNAME[] = "MPI_Recv";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request * request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RECV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request * request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RECV);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_BACK(MPID_STATE_MPI_RECV);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_BACK(MPID_STATE_MPI_RECV);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -93,14 +93,14 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -113,10 +113,10 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -135,7 +135,7 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
decides to block internally. MPID_Recv in that case will
re-aquire the SINGLE_CS before returnning */
mpi_errno = MPID_Recv(buf, count, datatype, source, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, status, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, status, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (request_ptr == NULL)
@@ -145,12 +145,12 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
/* If a request was returned, then we need to block until the request is
complete */
- if (!MPID_Request_is_complete(request_ptr))
+ if (!MPIR_Request_is_complete(request_ptr))
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(request_ptr))
+ while (!MPIR_Request_is_complete(request_ptr))
{
/* MT: Progress_wait may release the SINGLE_CS while it
waits */
@@ -164,7 +164,7 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
}
if (unlikely(MPIR_CVAR_ENABLE_FT &&
- !MPID_Request_is_complete(request_ptr) &&
+ !MPIR_Request_is_complete(request_ptr) &&
MPID_Request_is_anysource(request_ptr) &&
!MPID_Comm_AS_enabled(request_ptr->comm))) {
/* --BEGIN ERROR HANDLING-- */
@@ -181,14 +181,14 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
mpi_errno = request_ptr->status.MPI_ERROR;
MPIR_Request_extract_status(request_ptr, status);
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT_BACK(MPID_STATE_MPI_RECV);
+ MPIR_FUNC_TERSE_PT2PT_EXIT_BACK(MPID_STATE_MPI_RECV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/recv_init.c b/src/mpi/pt2pt/recv_init.c
index d684439..fe3b402 100644
--- a/src/mpi/pt2pt/recv_init.c
+++ b/src/mpi/pt2pt/recv_init.c
@@ -65,14 +65,14 @@ int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source,
{
static const char FCNAME[] = "MPI_Recv_init";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RECV_INIT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RECV_INIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_RECV_INIT);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_RECV_INIT);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -86,14 +86,14 @@ int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -107,10 +107,10 @@ int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -126,16 +126,16 @@ int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source,
/* ... body of routine ... */
mpi_errno = MPID_Recv_init(buf, count, datatype, source, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* return the handle of the request to the user */
- MPID_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_RECV_INIT);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_RECV_INIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/request_free.c b/src/mpi/pt2pt/request_free.c
index 0f5a4ea..5b3a770 100644
--- a/src/mpi/pt2pt/request_free.c
+++ b/src/mpi/pt2pt/request_free.c
@@ -67,13 +67,13 @@ int MPI_Request_free(MPI_Request *request)
{
static const char FCNAME[] = "MPI_Request_free";
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_REQUEST_FREE);
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_REQUEST_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_REQUEST_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_REQUEST_FREE);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -88,7 +88,7 @@ int MPI_Request_free(MPI_Request *request)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Request_get_ptr( *request, request_ptr );
+ MPIR_Request_get_ptr( *request, request_ptr );
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -96,7 +96,7 @@ int MPI_Request_free(MPI_Request *request)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate request_ptr */
- MPID_Request_valid_ptr( request_ptr, mpi_errno );
+ MPIR_Request_valid_ptr( request_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -109,46 +109,46 @@ int MPI_Request_free(MPI_Request *request)
switch (request_ptr->kind)
{
- case MPID_REQUEST_SEND:
+ case MPIR_REQUEST_KIND__SEND:
{
- MPIR_SENDQ_FORGET(request_ptr);
+ MPII_SENDQ_FORGET(request_ptr);
break;
}
- case MPID_REQUEST_RECV:
+ case MPIR_REQUEST_KIND__RECV:
{
break;
}
- case MPID_PREQUEST_SEND:
+ case MPIR_REQUEST_KIND__PREQUEST_SEND:
{
/* If this is an active persistent request, we must also
release the partner request. */
- if (request_ptr->partner_request != NULL)
+ if (request_ptr->u.persist.real_request != NULL)
{
- if (request_ptr->partner_request->kind == MPID_UREQUEST)
+ if (request_ptr->u.persist.real_request->kind == MPIR_REQUEST_KIND__GREQUEST)
{
/* This is needed for persistent Bsend requests */
mpi_errno = MPIR_Grequest_free(
- request_ptr->partner_request);
+ request_ptr->u.persist.real_request);
}
- MPID_Request_release(request_ptr->partner_request);
+ MPIR_Request_free(request_ptr->u.persist.real_request);
}
break;
}
- case MPID_PREQUEST_RECV:
+ case MPIR_REQUEST_KIND__PREQUEST_RECV:
{
/* If this is an active persistent request, we must also
release the partner request. */
- if (request_ptr->partner_request != NULL)
+ if (request_ptr->u.persist.real_request != NULL)
{
- MPID_Request_release(request_ptr->partner_request);
+ MPIR_Request_free(request_ptr->u.persist.real_request);
}
break;
}
- case MPID_UREQUEST:
+ case MPIR_REQUEST_KIND__GREQUEST:
{
mpi_errno = MPIR_Grequest_free(request_ptr);
break;
@@ -165,7 +165,7 @@ int MPI_Request_free(MPI_Request *request)
/* --END ERROR HANDLING-- */
}
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
*request = MPI_REQUEST_NULL;
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -173,7 +173,7 @@ int MPI_Request_free(MPI_Request *request)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_REQUEST_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_REQUEST_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/request_get_status.c b/src/mpi/pt2pt/request_get_status.c
index 529b02a..89fd97e 100644
--- a/src/mpi/pt2pt/request_get_status.c
+++ b/src/mpi/pt2pt/request_get_status.c
@@ -57,13 +57,13 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
{
static const char FCNAME[] = "MPI_Request_get_status";
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_REQUEST_GET_STATUS);
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_REQUEST_GET_STATUS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_REQUEST_GET_STATUS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_REQUEST_GET_STATUS);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -90,7 +90,7 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
}
/* Convert MPI object handles to object pointers */
- MPID_Request_get_ptr( request, request_ptr );
+ MPIR_Request_get_ptr( request, request_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -98,7 +98,7 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate request_ptr */
- MPID_Request_valid_ptr( request_ptr, mpi_errno );
+ MPIR_Request_valid_ptr( request_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -107,17 +107,17 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
/* ... body of routine ... */
- if (!MPID_Request_is_complete(request_ptr)) {
+ if (!MPIR_Request_is_complete(request_ptr)) {
/* request not complete. poke the progress engine. Req #3130 */
mpi_errno = MPID_Progress_test();
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (MPID_Request_is_complete(request_ptr))
+ if (MPIR_Request_is_complete(request_ptr))
{
switch(request_ptr->kind)
{
- case MPID_REQUEST_SEND:
+ case MPIR_REQUEST_KIND__SEND:
{
if (status != MPI_STATUS_IGNORE)
{
@@ -127,20 +127,20 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
break;
}
- case MPID_REQUEST_RECV:
+ case MPIR_REQUEST_KIND__RECV:
{
MPIR_Request_extract_status(request_ptr, status);
mpi_errno = request_ptr->status.MPI_ERROR;
break;
}
- case MPID_PREQUEST_SEND:
+ case MPIR_REQUEST_KIND__PREQUEST_SEND:
{
- MPID_Request * prequest_ptr = request_ptr->partner_request;
+ MPIR_Request * prequest_ptr = request_ptr->u.persist.real_request;
if (prequest_ptr != NULL)
{
- if (prequest_ptr->kind != MPID_UREQUEST)
+ if (prequest_ptr->kind != MPIR_REQUEST_KIND__GREQUEST)
{
if (status != MPI_STATUS_IGNORE)
{
@@ -189,9 +189,9 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
break;
}
- case MPID_PREQUEST_RECV:
+ case MPIR_REQUEST_KIND__PREQUEST_RECV:
{
- MPID_Request * prequest_ptr = request_ptr->partner_request;
+ MPIR_Request * prequest_ptr = request_ptr->u.persist.real_request;
if (prequest_ptr != NULL)
{
@@ -209,7 +209,7 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
break;
}
- case MPID_UREQUEST:
+ case MPIR_REQUEST_KIND__GREQUEST:
{
int rc;
@@ -245,7 +245,7 @@ int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_REQUEST_GET_STATUS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_REQUEST_GET_STATUS);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/rsend.c b/src/mpi/pt2pt/rsend.c
index 3146b72..daaabdd 100644
--- a/src/mpi/pt2pt/rsend.c
+++ b/src/mpi/pt2pt/rsend.c
@@ -60,14 +60,14 @@ int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
{
static const char FCNAME[] = "MPI_Rsend";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request * request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RSEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request * request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RSEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_RSEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_RSEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -81,14 +81,14 @@ int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -101,10 +101,10 @@ int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -120,7 +120,7 @@ int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* ... body of routine ... */
mpi_errno = MPID_Rsend(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (request_ptr == NULL)
@@ -130,12 +130,12 @@ int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* If a request was returned, then we need to block until the request
is complete */
- if (!MPID_Request_is_complete(request_ptr))
+ if (!MPIR_Request_is_complete(request_ptr))
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(request_ptr))
+ while (!MPIR_Request_is_complete(request_ptr))
{
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno != MPI_SUCCESS)
@@ -150,14 +150,14 @@ int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
}
mpi_errno = request_ptr->status.MPI_ERROR;
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_RSEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_RSEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/rsend_init.c b/src/mpi/pt2pt/rsend_init.c
index 3991348..0cf2a13 100644
--- a/src/mpi/pt2pt/rsend_init.c
+++ b/src/mpi/pt2pt/rsend_init.c
@@ -65,14 +65,14 @@ int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
{
static const char FCNAME[] = "MPI_Rsend_init";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RSEND_INIT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RSEND_INIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_RSEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_RSEND_INIT);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -86,14 +86,14 @@ int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -107,10 +107,10 @@ int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -126,16 +126,16 @@ int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
/* ... body of routine ... */
mpi_errno = MPID_Rsend_init(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* return the handle of the request to the user */
- MPID_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_RSEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_RSEND_INIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/send.c b/src/mpi/pt2pt/send.c
index 67752fb..7b75c47 100644
--- a/src/mpi/pt2pt/send.c
+++ b/src/mpi/pt2pt/send.c
@@ -65,14 +65,14 @@ int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int ta
{
static const char FCNAME[] = "MPI_Send";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request * request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request * request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_SEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_SEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -86,14 +86,14 @@ int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int ta
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -106,10 +106,10 @@ int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int ta
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -125,7 +125,7 @@ int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int ta
/* ... body of routine ... */
mpi_errno = MPID_Send(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (request_ptr == NULL)
@@ -135,12 +135,12 @@ int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int ta
/* If a request was returned, then we need to block until the request
is complete */
- if (!MPID_Request_is_complete(request_ptr))
+ if (!MPIR_Request_is_complete(request_ptr))
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(request_ptr))
+ while (!MPIR_Request_is_complete(request_ptr))
{
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno != MPI_SUCCESS)
@@ -155,14 +155,14 @@ int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int ta
}
mpi_errno = request_ptr->status.MPI_ERROR;
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_SEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_SEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/send_init.c b/src/mpi/pt2pt/send_init.c
index 6d51c13..31c34ed 100644
--- a/src/mpi/pt2pt/send_init.c
+++ b/src/mpi/pt2pt/send_init.c
@@ -65,14 +65,14 @@ int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest,
{
static const char FCNAME[] = "MPI_Send_init";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SEND_INIT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SEND_INIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_SEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_SEND_INIT);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -86,14 +86,14 @@ int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -107,10 +107,10 @@ int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -126,17 +126,17 @@ int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest,
/* ... body of routine ... */
mpi_errno = MPID_Send_init(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPIR_SENDQ_REMEMBER(request_ptr, dest, tag, comm_ptr->context_id);
+ MPII_SENDQ_REMEMBER(request_ptr, dest, tag, comm_ptr->context_id);
/* return the handle of the request to the user */
- MPID_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_SEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_SEND_INIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index 7787547..2f4eb0e 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -75,15 +75,15 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
{
static const char FCNAME[] = "MPI_Sendrecv";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request * sreq;
- MPID_Request * rreq;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SENDRECV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request * sreq;
+ MPIR_Request * rreq;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SENDRECV);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_BOTH(MPID_STATE_MPI_SENDRECV);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_BOTH(MPID_STATE_MPI_SENDRECV);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -97,14 +97,14 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
# endif /* HAVE_ERROR_CHECKING */
/* Convert handles to MPI objects. */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate communicator */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* Validate count */
@@ -131,20 +131,20 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* Validate datatype objects */
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -160,26 +160,26 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* ... body of routine ... */
- mpi_errno = MPID_Irecv(recvbuf, recvcount, recvtype, source, recvtag, comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &rreq);
+ mpi_errno = MPID_Irecv(recvbuf, recvcount, recvtype, source, recvtag, comm_ptr, MPIR_CONTEXT_INTRA_PT2PT, &rreq);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* FIXME - Performance for small messages might be better if MPID_Send() were used here instead of MPID_Isend() */
- mpi_errno = MPID_Isend(sendbuf, sendcount, sendtype, dest, sendtag, comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &sreq);
+ mpi_errno = MPID_Isend(sendbuf, sendcount, sendtype, dest, sendtag, comm_ptr, MPIR_CONTEXT_INTRA_PT2PT, &sreq);
if (mpi_errno != MPI_SUCCESS)
{
/* --BEGIN ERROR HANDLING-- */
/* FIXME: should we cancel the pending (possibly completed) receive request or wait for it to complete? */
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
goto fn_fail;
/* --END ERROR HANDLING-- */
}
- if (!MPID_Request_is_complete(sreq) || !MPID_Request_is_complete(rreq))
+ if (!MPIR_Request_is_complete(sreq) || !MPIR_Request_is_complete(rreq))
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(sreq) || !MPID_Request_is_complete(rreq))
+ while (!MPIR_Request_is_complete(sreq) || !MPIR_Request_is_complete(rreq))
{
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno != MPI_SUCCESS)
@@ -191,7 +191,7 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
if (unlikely(MPIR_CVAR_ENABLE_FT &&
- !MPID_Request_is_complete(rreq) &&
+ !MPIR_Request_is_complete(rreq) &&
MPID_Request_is_anysource(rreq) &&
!MPID_Comm_AS_enabled(rreq->comm))) {
/* --BEGIN ERROR HANDLING-- */
@@ -199,7 +199,7 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_STATUS_SET_CANCEL_BIT(rreq->status, FALSE);
MPIR_ERR_SET(rreq->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**proc_failed");
mpi_errno = rreq->status.MPI_ERROR;
- if (!MPID_Request_is_complete(sreq)) {
+ if (!MPIR_Request_is_complete(sreq)) {
MPID_Cancel_send(sreq);
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, FALSE);
}
@@ -212,20 +212,20 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
mpi_errno = rreq->status.MPI_ERROR;
MPIR_Request_extract_status(rreq, status);
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
if (mpi_errno == MPI_SUCCESS)
{
mpi_errno = sreq->status.MPI_ERROR;
}
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT_BOTH(MPID_STATE_MPI_SENDRECV);
+ MPIR_FUNC_TERSE_PT2PT_EXIT_BOTH(MPID_STATE_MPI_SENDRECV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/sendrecv_rep.c b/src/mpi/pt2pt/sendrecv_rep.c
index 140303f..ac2dcbc 100644
--- a/src/mpi/pt2pt/sendrecv_rep.c
+++ b/src/mpi/pt2pt/sendrecv_rep.c
@@ -71,28 +71,24 @@ int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
{
static const char FCNAME[] = "MPI_Sendrecv_replace";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
-#ifdef MPID_LOG_ARROWS
- /* This isn't the right test, but it is close enough for now */
- int sendcount = count, recvcount = count;
-#endif
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SENDRECV_REPLACE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SENDRECV_REPLACE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_BOTH(MPID_STATE_MPI_SENDRECV_REPLACE);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_BOTH(MPID_STATE_MPI_SENDRECV_REPLACE);
/* Convert handles to MPI objects. */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate communicator */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* Validate count */
@@ -115,10 +111,10 @@ int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -141,8 +137,8 @@ int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
}
# else
{
- MPID_Request * sreq;
- MPID_Request * rreq;
+ MPIR_Request * sreq;
+ MPIR_Request * rreq;
void * tmpbuf = NULL;
MPI_Aint tmpbuf_size = 0;
MPI_Aint tmpbuf_count = 0;
@@ -151,34 +147,34 @@ int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
{
MPIR_Pack_size_impl(count, datatype, &tmpbuf_size);
- MPIU_CHKLMEM_MALLOC_ORJUMP(tmpbuf, void *, tmpbuf_size, mpi_errno, "temporary send buffer");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(tmpbuf, void *, tmpbuf_size, mpi_errno, "temporary send buffer");
mpi_errno = MPIR_Pack_impl(buf, count, datatype, tmpbuf, tmpbuf_size, &tmpbuf_count);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
mpi_errno = MPID_Irecv(buf, count, datatype, source, recvtag,
- comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &rreq);
+ comm_ptr, MPIR_CONTEXT_INTRA_PT2PT, &rreq);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
mpi_errno = MPID_Isend(tmpbuf, tmpbuf_count, MPI_PACKED, dest,
- sendtag, comm_ptr, MPID_CONTEXT_INTRA_PT2PT,
+ sendtag, comm_ptr, MPIR_CONTEXT_INTRA_PT2PT,
&sreq);
if (mpi_errno != MPI_SUCCESS)
{
/* --BEGIN ERROR HANDLING-- */
/* FIXME: should we cancel the pending (possibly completed) receive request or wait for it to complete? */
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
goto fn_fail;
/* --END ERROR HANDLING-- */
}
- if (!MPID_Request_is_complete(sreq) || !MPID_Request_is_complete(rreq))
+ if (!MPIR_Request_is_complete(sreq) || !MPIR_Request_is_complete(rreq))
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(sreq) || !MPID_Request_is_complete(rreq))
+ while (!MPIR_Request_is_complete(sreq) || !MPIR_Request_is_complete(rreq))
{
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno != MPI_SUCCESS)
@@ -208,8 +204,8 @@ int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
}
}
- MPID_Request_release(sreq);
- MPID_Request_release(rreq);
+ MPIR_Request_free(sreq);
+ MPIR_Request_free(rreq);
}
# endif
@@ -218,8 +214,8 @@ int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
/* ... end of body of routine ... */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_PT2PT_FUNC_EXIT_BOTH(MPID_STATE_MPI_SENDRECV_REPLACE);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_PT2PT_EXIT_BOTH(MPID_STATE_MPI_SENDRECV_REPLACE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/ssend.c b/src/mpi/pt2pt/ssend.c
index 74df40f..c6d5449 100644
--- a/src/mpi/pt2pt/ssend.c
+++ b/src/mpi/pt2pt/ssend.c
@@ -59,14 +59,14 @@ int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
{
static const char FCNAME[] = "MPI_Ssend";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request * request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SSEND);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request * request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SSEND);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER_FRONT(MPID_STATE_MPI_SSEND);
+ MPIR_FUNC_TERSE_PT2PT_ENTER_FRONT(MPID_STATE_MPI_SSEND);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -80,14 +80,14 @@ int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -100,10 +100,10 @@ int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -119,7 +119,7 @@ int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
/* ... body of routine ... */
mpi_errno = MPID_Ssend(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (request_ptr == NULL)
@@ -133,14 +133,14 @@ int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int t
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = request_ptr->status.MPI_ERROR;
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_SSEND);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_SSEND);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/ssend_init.c b/src/mpi/pt2pt/ssend_init.c
index b4c7a5b..b13260c 100644
--- a/src/mpi/pt2pt/ssend_init.c
+++ b/src/mpi/pt2pt/ssend_init.c
@@ -62,14 +62,14 @@ int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
{
static const char FCNAME[] = "MPI_Ssend_init";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_SSEND_INIT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_SSEND_INIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_SSEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_SSEND_INIT);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -83,14 +83,14 @@ int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(count, mpi_errno);
@@ -104,10 +104,10 @@ int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
/* Validate datatype object */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno) goto fn_fail;
@@ -123,16 +123,16 @@ int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest,
/* ... body of routine ... */
mpi_errno = MPID_Ssend_init(buf, count, datatype, dest, tag, comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &request_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &request_ptr);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* return the handle of the request to the user */
- MPID_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*request, request_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_SSEND_INIT);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_SSEND_INIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/start.c b/src/mpi/pt2pt/start.c
index 975fff2..094afdf 100644
--- a/src/mpi/pt2pt/start.c
+++ b/src/mpi/pt2pt/start.c
@@ -48,14 +48,14 @@ Input Parameters:
int MPI_Start(MPI_Request *request)
{
static const char FCNAME[] = "MPI_Start";
- MPID_Request * request_ptr = NULL;
+ MPIR_Request * request_ptr = NULL;
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_START);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_START);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_START);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_START);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -70,14 +70,14 @@ int MPI_Start(MPI_Request *request)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI request handle to a request object pointer */
- MPID_Request_get_ptr( *request, request_ptr );
+ MPIR_Request_get_ptr( *request, request_ptr );
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptr, mpi_errno );
+ MPIR_Request_valid_ptr( request_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_PERSISTENT(request_ptr, mpi_errno);
MPIR_ERRTEST_PERSISTENT_ACTIVE(request_ptr, mpi_errno);
@@ -94,7 +94,7 @@ int MPI_Start(MPI_Request *request)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_START);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_START);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/startall.c b/src/mpi/pt2pt/startall.c
index 75034e7..f8017c4 100644
--- a/src/mpi/pt2pt/startall.c
+++ b/src/mpi/pt2pt/startall.c
@@ -7,8 +7,8 @@
#include "mpiimpl.h"
-#if !defined(MPID_REQUEST_PTR_ARRAY_SIZE)
-#define MPID_REQUEST_PTR_ARRAY_SIZE 16
+#if !defined(MPIR_REQUEST_PTR_ARRAY_SIZE)
+#define MPIR_REQUEST_PTR_ARRAY_SIZE 16
#endif
/* -- Begin Profiling Symbol Block for routine MPI_Startall */
@@ -61,17 +61,17 @@ Input Parameters:
int MPI_Startall(int count, MPI_Request array_of_requests[])
{
static const char FCNAME[] = "MPI_Startall";
- MPID_Request * request_ptr_array[MPID_REQUEST_PTR_ARRAY_SIZE];
- MPID_Request ** request_ptrs = request_ptr_array;
+ MPIR_Request * request_ptr_array[MPIR_REQUEST_PTR_ARRAY_SIZE];
+ MPIR_Request ** request_ptrs = request_ptr_array;
int i;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_STARTALL);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_STARTALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_STARTALL);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_STARTALL);
/* Validate handle parameters needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -90,14 +90,14 @@ int MPI_Startall(int count, MPI_Request array_of_requests[])
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI request handles to a request object pointers */
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPID_Request **, count * sizeof(MPID_Request *), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPIR_Request **, count * sizeof(MPIR_Request *), mpi_errno, "request pointers");
}
for (i = 0; i < count; i++)
{
- MPID_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
+ MPIR_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
}
/* Validate object pointers if error checking is enabled */
@@ -106,7 +106,7 @@ int MPI_Startall(int count, MPI_Request array_of_requests[])
MPID_BEGIN_ERROR_CHECKS;
{
for (i = 0; i < count; i++) {
- MPID_Request_valid_ptr( request_ptrs[i], mpi_errno );
+ MPIR_Request_valid_ptr( request_ptrs[i], mpi_errno );
if (mpi_errno) goto fn_fail;
}
for (i = 0; i < count; i++) {
@@ -126,12 +126,12 @@ int MPI_Startall(int count, MPI_Request array_of_requests[])
/* ... end of body of routine ... */
fn_exit:
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
}
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_STARTALL);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_STARTALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/status_set_cancelled.c b/src/mpi/pt2pt/status_set_cancelled.c
index 05ff76c..473b9d2 100644
--- a/src/mpi/pt2pt/status_set_cancelled.c
+++ b/src/mpi/pt2pt/status_set_cancelled.c
@@ -52,11 +52,11 @@ int MPI_Status_set_cancelled(MPI_Status *status, int flag)
static const char FCNAME[] = "MPI_Status_set_cancelled";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_STATUS_SET_CANCELLED);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_STATUS_SET_CANCELLED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_STATUS_SET_CANCELLED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_STATUS_SET_CANCELLED);
# ifdef HAVE_ERROR_CHECKING
{
@@ -77,7 +77,7 @@ int MPI_Status_set_cancelled(MPI_Status *status, int flag)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_STATUS_SET_CANCELLED);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_STATUS_SET_CANCELLED);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 9a3a9ed..5efd125 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -33,7 +33,7 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
int active_flag;
- MPID_Request *request_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
/* If this is a null request handle, then return an empty status */
if (*request == MPI_REQUEST_NULL) {
@@ -44,7 +44,7 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
*flag = FALSE;
- MPID_Request_get_ptr( *request, request_ptr );
+ MPIR_Request_get_ptr( *request, request_ptr );
/* If the request is already completed AND we want to avoid calling
the progress engine, we could make the call to MPID_Progress_test
@@ -52,15 +52,15 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
mpi_errno = MPID_Progress_test();
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (request_ptr->kind == MPID_UREQUEST &&
- request_ptr->greq_fns != NULL &&
- request_ptr->greq_fns->poll_fn != NULL)
+ if (request_ptr->kind == MPIR_REQUEST_KIND__GREQUEST &&
+ request_ptr->u.ureq.greq_fns != NULL &&
+ request_ptr->u.ureq.greq_fns->poll_fn != NULL)
{
- mpi_errno = (request_ptr->greq_fns->poll_fn)(request_ptr->greq_fns->grequest_extra_state, status);
+ mpi_errno = (request_ptr->u.ureq.greq_fns->poll_fn)(request_ptr->u.ureq.greq_fns->grequest_extra_state, status);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- if (MPID_Request_is_complete(request_ptr)) {
+ if (MPIR_Request_is_complete(request_ptr)) {
mpi_errno = MPIR_Request_complete(request, request_ptr, status,
&active_flag);
*flag = TRUE;
@@ -112,13 +112,13 @@ Output Parameters:
int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TEST);
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TEST);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_TEST);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_TEST);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -132,7 +132,7 @@ int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
}
# endif /* HAVE_ERROR_CHECKING */
- MPID_Request_get_ptr( *request, request_ptr );
+ MPIR_Request_get_ptr( *request, request_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -142,7 +142,7 @@ int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
if (*request != MPI_REQUEST_NULL)
{
/* Validate request_ptr */
- MPID_Request_valid_ptr( request_ptr, mpi_errno );
+ MPIR_Request_valid_ptr( request_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
@@ -162,7 +162,7 @@ int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_TEST);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_TEST);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/test_cancelled.c b/src/mpi/pt2pt/test_cancelled.c
index de502b8..3696928 100644
--- a/src/mpi/pt2pt/test_cancelled.c
+++ b/src/mpi/pt2pt/test_cancelled.c
@@ -51,11 +51,11 @@ Output Parameters:
int MPI_Test_cancelled(const MPI_Status *status, int *flag)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TEST_CANCELLED);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TEST_CANCELLED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_TEST_CANCELLED);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_TEST_CANCELLED);
/* Validate parameters if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
@@ -70,15 +70,14 @@ int MPI_Test_cancelled(const MPI_Status *status, int *flag)
# endif /* HAVE_ERROR_CHECKING */
/* ... body of routine ... */
-
- MPIR_Test_cancelled_impl(status, flag);
+ *flag = MPIR_STATUS_GET_CANCEL_BIT(*status);
/* ... end of body of routine ... */
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_TEST_CANCELLED);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_TEST_CANCELLED);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index 67a2c30..9079523 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -7,8 +7,8 @@
#include "mpiimpl.h"
-#if !defined(MPID_REQUEST_PTR_ARRAY_SIZE)
-#define MPID_REQUEST_PTR_ARRAY_SIZE 16
+#if !defined(MPIR_REQUEST_PTR_ARRAY_SIZE)
+#define MPIR_REQUEST_PTR_ARRAY_SIZE 16
#endif
/* -- Begin Profiling Symbol Block for routine MPI_Testall */
@@ -38,8 +38,8 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
MPI_Status array_of_statuses[])
{
- MPID_Request * request_ptr_array[MPID_REQUEST_PTR_ARRAY_SIZE];
- MPID_Request ** request_ptrs = request_ptr_array;
+ MPIR_Request * request_ptr_array[MPIR_REQUEST_PTR_ARRAY_SIZE];
+ MPIR_Request ** request_ptrs = request_ptr_array;
MPI_Status * status_ptr;
int i;
int n_completed;
@@ -47,13 +47,13 @@ int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
int rc;
int proc_failure = FALSE;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
/* Convert MPI request handles to a request object pointers */
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPID_Request **,
- count * sizeof(MPID_Request *), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPIR_Request **,
+ count * sizeof(MPIR_Request *), mpi_errno, "request pointers");
}
n_completed = 0;
@@ -61,13 +61,13 @@ int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
{
if (array_of_requests[i] != MPI_REQUEST_NULL)
{
- MPID_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
+ MPIR_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptrs[i], mpi_errno );
+ MPIR_Request_valid_ptr( request_ptrs[i], mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -87,16 +87,16 @@ int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
for (i = 0; i < count; i++)
{
if (request_ptrs[i] != NULL &&
- request_ptrs[i]->kind == MPID_UREQUEST &&
- request_ptrs[i]->greq_fns->poll_fn != NULL)
+ request_ptrs[i]->kind == MPIR_REQUEST_KIND__GREQUEST &&
+ request_ptrs[i]->u.ureq.greq_fns->poll_fn != NULL)
{
- mpi_errno = (request_ptrs[i]->greq_fns->poll_fn)(request_ptrs[i]->greq_fns->grequest_extra_state,
+ mpi_errno = (request_ptrs[i]->u.ureq.greq_fns->poll_fn)(request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state,
&(array_of_statuses[i]));
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (request_ptrs[i] != NULL)
{
- if (MPID_Request_is_complete(request_ptrs[i]))
+ if (MPIR_Request_is_complete(request_ptrs[i]))
{
n_completed++;
rc = MPIR_Request_get_error(request_ptrs[i]);
@@ -126,7 +126,7 @@ int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
{
if (request_ptrs[i] != NULL)
{
- if (MPID_Request_is_complete(request_ptrs[i]))
+ if (MPIR_Request_is_complete(request_ptrs[i]))
{
n_completed ++;
status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[i] : MPI_STATUS_IGNORE;
@@ -172,9 +172,9 @@ int MPIR_Testall_impl(int count, MPI_Request array_of_requests[], int *flag,
*flag = (n_completed == count) ? TRUE : FALSE;
fn_exit:
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
}
return mpi_errno;
@@ -234,12 +234,12 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TESTALL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TESTALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_TESTALL);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_TESTALL);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -272,7 +272,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_TESTALL);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_TESTALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index cee17db..26d86ed 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -7,8 +7,8 @@
#include "mpiimpl.h"
-#if !defined(MPID_REQUEST_PTR_ARRAY_SIZE)
-#define MPID_REQUEST_PTR_ARRAY_SIZE 16
+#if !defined(MPIR_REQUEST_PTR_ARRAY_SIZE)
+#define MPIR_REQUEST_PTR_ARRAY_SIZE 16
#endif
/* -- Begin Profiling Symbol Block for routine MPI_Testany */
@@ -68,20 +68,20 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
int *flag, MPI_Status *status)
{
static const char FCNAME[] = "MPI_Testany";
- MPID_Request * request_ptr_array[MPID_REQUEST_PTR_ARRAY_SIZE];
- MPID_Request ** request_ptrs = request_ptr_array;
+ MPIR_Request * request_ptr_array[MPIR_REQUEST_PTR_ARRAY_SIZE];
+ MPIR_Request ** request_ptrs = request_ptr_array;
int i;
int n_inactive;
int active_flag;
int last_disabled_anysource = -1;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TESTANY);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TESTANY);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_TESTANY);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_TESTANY);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -109,9 +109,9 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
/* ... body of routine ... */
/* Convert MPI request handles to a request object pointers */
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPID_Request **, count * sizeof(MPID_Request *), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPIR_Request **, count * sizeof(MPIR_Request *), mpi_errno, "request pointers");
}
n_inactive = 0;
@@ -119,13 +119,13 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
{
if (array_of_requests[i] != MPI_REQUEST_NULL)
{
- MPID_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
+ MPIR_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptrs[i], mpi_errno );
+ MPIR_Request_valid_ptr( request_ptrs[i], mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -162,16 +162,16 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
for (i = 0; i < count; i++)
{
if (request_ptrs[i] != NULL &&
- request_ptrs[i]->kind == MPID_UREQUEST &&
- request_ptrs[i]->greq_fns->poll_fn != NULL)
+ request_ptrs[i]->kind == MPIR_REQUEST_KIND__GREQUEST &&
+ request_ptrs[i]->u.ureq.greq_fns->poll_fn != NULL)
{
- mpi_errno = (request_ptrs[i]->greq_fns->poll_fn)(request_ptrs[i]->greq_fns->grequest_extra_state,
+ mpi_errno = (request_ptrs[i]->u.ureq.greq_fns->poll_fn)(request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state,
status);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (request_ptrs[i] != NULL)
{
- if (MPID_Request_is_complete(request_ptrs[i]))
+ if (MPIR_Request_is_complete(request_ptrs[i]))
{
mpi_errno = MPIR_Request_complete(&array_of_requests[i],
request_ptrs[i],
@@ -215,12 +215,12 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
/* ... end of body of routine ... */
fn_exit:
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
}
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_TESTANY);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_TESTANY);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 9ec15eb..30cec08 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -7,8 +7,8 @@
#include "mpiimpl.h"
-#if !defined(MPID_REQUEST_PTR_ARRAY_SIZE)
-#define MPID_REQUEST_PTR_ARRAY_SIZE 16
+#if !defined(MPIR_REQUEST_PTR_ARRAY_SIZE)
+#define MPIR_REQUEST_PTR_ARRAY_SIZE 16
#endif
/* -- Begin Profiling Symbol Block for routine MPI_Testsome */
@@ -70,8 +70,8 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
int array_of_indices[], MPI_Status array_of_statuses[])
{
static const char FCNAME[] = "MPI_Testsome";
- MPID_Request * request_ptr_array[MPID_REQUEST_PTR_ARRAY_SIZE];
- MPID_Request ** request_ptrs = request_ptr_array;
+ MPIR_Request * request_ptr_array[MPIR_REQUEST_PTR_ARRAY_SIZE];
+ MPIR_Request ** request_ptrs = request_ptr_array;
MPI_Status * status_ptr;
int i;
int n_active;
@@ -79,13 +79,13 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
int active_flag;
int rc;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TESTSOME);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TESTSOME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_TESTSOME);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_TESTSOME);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -115,9 +115,9 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
*outcount = 0;
/* Convert MPI request handles to a request object pointers */
- if (incount > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (incount > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPID_Request **, incount * sizeof(MPID_Request *), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPIR_Request **, incount * sizeof(MPIR_Request *), mpi_errno, "request pointers");
}
n_inactive = 0;
@@ -125,13 +125,13 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
{
if (array_of_requests[i] != MPI_REQUEST_NULL)
{
- MPID_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
+ MPIR_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptrs[i], mpi_errno );
+ MPIR_Request_valid_ptr( request_ptrs[i], mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -162,17 +162,17 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
for (i = 0; i < incount; i++)
{
if (request_ptrs[i] != NULL &&
- request_ptrs[i]->kind == MPID_UREQUEST &&
- request_ptrs[i]->greq_fns->poll_fn != NULL)
+ request_ptrs[i]->kind == MPIR_REQUEST_KIND__GREQUEST &&
+ request_ptrs[i]->u.ureq.greq_fns->poll_fn != NULL)
{
- mpi_errno = (request_ptrs[i]->greq_fns->poll_fn)(request_ptrs[i]->greq_fns->grequest_extra_state,
+ mpi_errno = (request_ptrs[i]->u.ureq.greq_fns->poll_fn)(request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state,
array_of_statuses);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
if (request_ptrs[i] != NULL)
{
- if (MPID_Request_is_complete(request_ptrs[i]))
+ if (MPIR_Request_is_complete(request_ptrs[i]))
{
rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
if (active_flag)
@@ -238,12 +238,12 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
/* ... end of body of routine ... */
fn_exit:
- if (incount > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (incount > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
}
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_TESTSOME);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_TESTSOME);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index c6d8930..696ce0a 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -32,7 +32,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
int active_flag;
- MPID_Request *request_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
/* If this is a null request handle, then return an empty status */
if (*request == MPI_REQUEST_NULL)
@@ -41,9 +41,9 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
goto fn_exit;
}
- MPID_Request_get_ptr(*request, request_ptr);
+ MPIR_Request_get_ptr(*request, request_ptr);
- if (!MPID_Request_is_complete(request_ptr))
+ if (!MPIR_Request_is_complete(request_ptr))
{
MPID_Progress_state progress_state;
@@ -58,11 +58,11 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
}
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(request_ptr))
+ while (!MPIR_Request_is_complete(request_ptr))
{
mpi_errno = MPIR_Grequest_progress_poke(1, &request_ptr, status);
- if (request_ptr->kind == MPID_UREQUEST &&
- request_ptr->greq_fns->wait_fn != NULL)
+ if (request_ptr->kind == MPIR_REQUEST_KIND__GREQUEST &&
+ request_ptr->u.ureq.greq_fns->wait_fn != NULL)
{
if (mpi_errno) {
/* --BEGIN ERROR HANDLING-- */
@@ -85,7 +85,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
if (unlikely(
MPIR_CVAR_ENABLE_FT &&
MPID_Request_is_anysource(request_ptr) &&
- !MPID_Request_is_complete(request_ptr) &&
+ !MPIR_Request_is_complete(request_ptr) &&
!MPID_Comm_AS_enabled(request_ptr->comm))) {
MPID_Progress_end(&progress_state);
MPIR_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
@@ -135,15 +135,15 @@ Output Parameters:
@*/
int MPI_Wait(MPI_Request *request, MPI_Status *status)
{
- MPID_Request * request_ptr = NULL;
+ MPIR_Request * request_ptr = NULL;
int mpi_errno = MPI_SUCCESS;
- MPID_Comm * comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAIT);
+ MPIR_Comm * comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WAIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_WAIT);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_WAIT);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -167,14 +167,14 @@ int MPI_Wait(MPI_Request *request, MPI_Status *status)
}
/* Convert MPI request handle to a request object pointer */
- MPID_Request_get_ptr(*request, request_ptr);
+ MPIR_Request_get_ptr(*request, request_ptr);
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptr, mpi_errno );
+ MPIR_Request_valid_ptr( request_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -192,7 +192,7 @@ int MPI_Wait(MPI_Request *request, MPI_Status *status)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_WAIT);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_WAIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index f8d78d9..f3327bb 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -7,9 +7,9 @@
#include "mpiimpl.h"
-#if !defined(MPID_REQUEST_PTR_ARRAY_SIZE)
+#if !defined(MPIR_REQUEST_PTR_ARRAY_SIZE)
/* use a larger default size of 64 in order to enhance SQMR performance */
-#define MPID_REQUEST_PTR_ARRAY_SIZE 64
+#define MPIR_REQUEST_PTR_ARRAY_SIZE 64
#endif
/* -- Begin Profiling Symbol Block for routine MPI_Waitall */
@@ -32,7 +32,7 @@ int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_
/* The "fastpath" version of MPIR_Request_complete. It only handles
- * MPID_REQUEST_SEND and MPID_REQUEST_RECV kinds, and it does not attempt to
+ * MPIR_REQUEST_KIND__SEND and MPIR_REQUEST_KIND__RECV kinds, and it does not attempt to
* deal with status structures under the assumption that bleeding fast code will
* pass either MPI_STATUS_IGNORE or MPI_STATUSES_IGNORE as appropriate. This
* routine (or some a variation of it) is an unfortunately necessary stunt to
@@ -42,21 +42,21 @@ int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_
#define FUNCNAME request_complete_fastpath
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int request_complete_fastpath(MPI_Request *request, MPID_Request *request_ptr)
+static inline int request_complete_fastpath(MPI_Request *request, MPIR_Request *request_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(request_ptr->kind == MPID_REQUEST_SEND || request_ptr->kind == MPID_REQUEST_RECV);
+ MPIR_Assert(request_ptr->kind == MPIR_REQUEST_KIND__SEND || request_ptr->kind == MPIR_REQUEST_KIND__RECV);
- if (request_ptr->kind == MPID_REQUEST_SEND) {
+ if (request_ptr->kind == MPIR_REQUEST_KIND__SEND) {
/* FIXME: are Ibsend requests added to the send queue? */
- MPIR_SENDQ_FORGET(request_ptr);
+ MPII_SENDQ_FORGET(request_ptr);
}
/* the completion path for SEND and RECV is the same at this time, modulo
* the SENDQ hook above */
mpi_errno = request_ptr->status.MPI_ERROR;
- MPID_Request_release(request_ptr);
+ MPIR_Request_free(request_ptr);
*request = MPI_REQUEST_NULL;
/* avoid normal fn_exit/fn_fail jump pattern to reduce jumps and compiler confusion */
@@ -71,8 +71,8 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
MPI_Status array_of_statuses[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request * request_ptr_array[MPID_REQUEST_PTR_ARRAY_SIZE];
- MPID_Request ** request_ptrs = request_ptr_array;
+ MPIR_Request * request_ptr_array[MPIR_REQUEST_PTR_ARRAY_SIZE];
+ MPIR_Request ** request_ptrs = request_ptr_array;
MPI_Status * status_ptr;
MPID_Progress_state progress_state;
int i, j;
@@ -84,12 +84,12 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
int disabled_anysource = FALSE;
const int ignoring_statuses = (array_of_statuses == MPI_STATUSES_IGNORE);
int optimize = ignoring_statuses; /* see NOTE-O1 */
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
/* Convert MPI request handles to a request object pointers */
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_MALLOC(request_ptrs, MPID_Request **, count * sizeof(MPID_Request *), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC(request_ptrs, MPIR_Request **, count * sizeof(MPIR_Request *), mpi_errno, "request pointers");
}
n_greqs = 0;
@@ -98,27 +98,27 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
{
if (array_of_requests[i] != MPI_REQUEST_NULL)
{
- MPID_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
+ MPIR_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptrs[i], mpi_errno );
+ MPIR_Request_valid_ptr( request_ptrs[i], mpi_errno );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKANDJUMP1((request_ptrs[i]->kind == MPID_REQUEST_MPROBE),
+ MPIR_ERR_CHKANDJUMP1((request_ptrs[i]->kind == MPIR_REQUEST_KIND__MPROBE),
mpi_errno, MPI_ERR_ARG, "**msgnotreq", "**msgnotreq %d", i);
}
MPID_END_ERROR_CHECKS;
}
# endif
- if (request_ptrs[i]->kind != MPID_REQUEST_RECV &&
- request_ptrs[i]->kind != MPID_REQUEST_SEND)
+ if (request_ptrs[i]->kind != MPIR_REQUEST_KIND__RECV &&
+ request_ptrs[i]->kind != MPIR_REQUEST_KIND__SEND)
{
optimize = FALSE;
}
- if (request_ptrs[i]->kind == MPID_UREQUEST)
+ if (request_ptrs[i]->kind == MPIR_REQUEST_KIND__GREQUEST)
++n_greqs;
/* If one of the requests is an anysource on a communicator that's
@@ -126,7 +126,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
* instead to prevent getting stuck in the progress engine. */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPID_Request_is_anysource(request_ptrs[i]) &&
- !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIR_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
disabled_anysource = TRUE;
}
@@ -160,7 +160,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
if (optimize) {
MPID_Progress_start(&progress_state);
for (i = 0; i < count; ++i) {
- while (!MPID_Request_is_complete(request_ptrs[i])) {
+ while (!MPIR_Request_is_complete(request_ptrs[i])) {
mpi_errno = MPID_Progress_wait(&progress_state);
/* must check and handle the error, can't guard with HAVE_ERROR_CHECKING, but it's
* OK for the error case to be slower */
@@ -168,7 +168,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
/* --BEGIN ERROR HANDLING-- */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPID_Request_is_anysource(request_ptrs[i]) &&
- !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIR_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
MPIR_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
}
@@ -209,10 +209,10 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
}
/* wait for ith request to complete */
- while (!MPID_Request_is_complete(request_ptrs[i]))
+ while (!MPIR_Request_is_complete(request_ptrs[i]))
{
/* generalized requests should already be finished */
- MPIU_Assert(request_ptrs[i]->kind != MPID_UREQUEST);
+ MPIR_Assert(request_ptrs[i]->kind != MPIR_REQUEST_KIND__GREQUEST);
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno != MPI_SUCCESS) {
@@ -222,7 +222,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
/* --END ERROR HANDLING-- */
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPID_Request_is_anysource(request_ptrs[i]) &&
- !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIR_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
/* Check for pending failures */
MPID_Progress_end(&progress_state);
@@ -234,7 +234,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
}
}
- if (MPID_Request_is_complete(request_ptrs[i])) {
+ if (MPIR_Request_is_complete(request_ptrs[i])) {
/* complete the request and check the status */
status_ptr = (ignoring_statuses) ? MPI_STATUS_IGNORE : &array_of_statuses[i];
rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
@@ -287,9 +287,9 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
MPID_Progress_end(&progress_state);
fn_exit:
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
}
return mpi_errno;
@@ -343,12 +343,12 @@ int MPI_Waitall(int count, MPI_Request array_of_requests[],
MPI_Status array_of_statuses[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAITALL);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WAITALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_WAITALL);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_WAITALL);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -381,7 +381,7 @@ int MPI_Waitall(int count, MPI_Request array_of_requests[],
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_WAITALL);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_WAITALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index 6a713e4..95b0bb0 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -7,8 +7,8 @@
#include "mpiimpl.h"
-#if !defined(MPID_REQUEST_PTR_ARRAY_SIZE)
-#define MPID_REQUEST_PTR_ARRAY_SIZE 16
+#if !defined(MPIR_REQUEST_PTR_ARRAY_SIZE)
+#define MPIR_REQUEST_PTR_ARRAY_SIZE 16
#endif
/* -- Begin Profiling Symbol Block for routine MPI_Waitany */
@@ -69,8 +69,8 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
MPI_Status *status)
{
static const char FCNAME[] = "MPI_Waitany";
- MPID_Request * request_ptr_array[MPID_REQUEST_PTR_ARRAY_SIZE];
- MPID_Request ** request_ptrs = request_ptr_array;
+ MPIR_Request * request_ptr_array[MPIR_REQUEST_PTR_ARRAY_SIZE];
+ MPIR_Request ** request_ptrs = request_ptr_array;
MPID_Progress_state progress_state;
int i;
int n_inactive;
@@ -79,13 +79,13 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
int found_nonnull_req;
int last_disabled_anysource = -1;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAITANY);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WAITANY);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_WAITANY);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_WAITANY);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -108,9 +108,9 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
/* ... body of routine ... */
/* Convert MPI request handles to a request object pointers */
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPID_Request **, count * sizeof(MPID_Request *), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPIR_Request **, count * sizeof(MPIR_Request *), mpi_errno, "request pointers");
}
n_inactive = 0;
@@ -133,13 +133,13 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
#endif /* HAVE_ERROR_CHECKING */
if (array_of_requests[i] != MPI_REQUEST_NULL)
{
- MPID_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
+ MPIR_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
/* Validate object pointers if error checking is enabled */
#ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptrs[i], mpi_errno );
+ MPIR_Request_valid_ptr( request_ptrs[i], mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_progress_end_fail;
}
MPID_END_ERROR_CHECKS;
@@ -157,13 +157,13 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
/* we found at least one non-null request */
found_nonnull_req = TRUE;
- if (request_ptrs[i]->kind == MPID_UREQUEST && request_ptrs[i]->greq_fns->poll_fn != NULL)
+ if (request_ptrs[i]->kind == MPIR_REQUEST_KIND__GREQUEST && request_ptrs[i]->u.ureq.greq_fns->poll_fn != NULL)
{
/* this is a generalized request; make progress on it */
- mpi_errno = (request_ptrs[i]->greq_fns->poll_fn)(request_ptrs[i]->greq_fns->grequest_extra_state, status);
+ mpi_errno = (request_ptrs[i]->u.ureq.greq_fns->poll_fn)(request_ptrs[i]->u.ureq.greq_fns->grequest_extra_state, status);
if (mpi_errno != MPI_SUCCESS) goto fn_progress_end_fail;
}
- if (MPID_Request_is_complete(request_ptrs[i]))
+ if (MPIR_Request_is_complete(request_ptrs[i]))
{
mpi_errno = MPIR_Request_complete(&array_of_requests[i],
request_ptrs[i], status,
@@ -220,12 +220,12 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
/* ... end of body of routine ... */
fn_exit:
- if (count > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (count > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
}
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_WAITANY);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_WAITANY);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index 95dc784..efbb6ab 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -7,8 +7,8 @@
#include "mpiimpl.h"
-#if !defined(MPID_REQUEST_PTR_ARRAY_SIZE)
-#define MPID_REQUEST_PTR_ARRAY_SIZE 16
+#if !defined(MPIR_REQUEST_PTR_ARRAY_SIZE)
+#define MPIR_REQUEST_PTR_ARRAY_SIZE 16
#endif
/* -- Begin Profiling Symbol Block for routine MPI_Waitsome */
@@ -87,8 +87,8 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
MPI_Status array_of_statuses[])
{
static const char FCNAME[] = "MPI_Waitsome";
- MPID_Request * request_ptr_array[MPID_REQUEST_PTR_ARRAY_SIZE];
- MPID_Request ** request_ptrs = request_ptr_array;
+ MPIR_Request * request_ptr_array[MPIR_REQUEST_PTR_ARRAY_SIZE];
+ MPIR_Request ** request_ptrs = request_ptr_array;
MPI_Status * status_ptr;
MPID_Progress_state progress_state;
int i;
@@ -98,13 +98,13 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
int rc;
int disabled_anysource = FALSE;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAITSOME);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WAITSOME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_PT2PT_FUNC_ENTER(MPID_STATE_MPI_WAITSOME);
+ MPIR_FUNC_TERSE_PT2PT_ENTER(MPID_STATE_MPI_WAITSOME);
/* Check the arguments */
# ifdef HAVE_ERROR_CHECKING
@@ -134,9 +134,9 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
*outcount = 0;
/* Convert MPI request handles to a request object pointers */
- if (incount > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (incount > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPID_Request **, incount * sizeof(MPID_Request *), mpi_errno, "request pointers");
+ MPIR_CHKLMEM_MALLOC_ORJUMP(request_ptrs, MPIR_Request **, incount * sizeof(MPIR_Request *), mpi_errno, "request pointers");
}
n_inactive = 0;
@@ -144,13 +144,13 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
{
if (array_of_requests[i] != MPI_REQUEST_NULL)
{
- MPID_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
+ MPIR_Request_get_ptr(array_of_requests[i], request_ptrs[i]);
/* Validate object pointers if error checking is enabled */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Request_valid_ptr( request_ptrs[i], mpi_errno );
+ MPIR_Request_valid_ptr( request_ptrs[i], mpi_errno );
if (mpi_errno != MPI_SUCCESS)
{
goto fn_fail;
@@ -166,7 +166,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
* instead to prevent getting stuck in the progress engine. */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPID_Request_is_anysource(request_ptrs[i]) &&
- !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIR_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
disabled_anysource = TRUE;
}
@@ -212,7 +212,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
{
if (request_ptrs[i] != NULL)
{
- if (MPID_Request_is_complete(request_ptrs[i]))
+ if (MPIR_Request_is_complete(request_ptrs[i]))
{
status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
@@ -291,12 +291,12 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
/* ... end of body of routine ... */
fn_exit:
- if (incount > MPID_REQUEST_PTR_ARRAY_SIZE)
+ if (incount > MPIR_REQUEST_PTR_ARRAY_SIZE)
{
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
}
- MPID_MPI_PT2PT_FUNC_EXIT(MPID_STATE_MPI_WAITSOME);
+ MPIR_FUNC_TERSE_PT2PT_EXIT(MPID_STATE_MPI_WAITSOME);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/.state-cache b/src/mpi/rma/.state-cache
index 0c1c45a..e6f47f9 100644
--- a/src/mpi/rma/.state-cache
+++ b/src/mpi/rma/.state-cache
@@ -1,89 +1,85 @@
<dir>
-<file name="win_set_info.c" info="1447123141"/>
-<file name="win_set_name.c" info="1447123141"/>
-<file name="rget.c" info="1447123141"/>
-<file name="win_attach.c" info="1447123141"/>
-<file name="win_get_info.c" info="1447123141"/>
-<file name="win_sync.c" info="1447123141"/>
-<file name="win_allocate_shared.c" info="1447123141"/>
-<file name="rput.c" info="1447123141"/>
-<file name="put.c" info="1447123141"/>
-<file name="alloc_mem.c" info="1447123141"/>
-<file name="win_flush_all.c" info="1447123141"/>
-<file name="win_flush_local.c" info="1447123141"/>
-<file name="win_fence.c" info="1447123141"/>
-<file name="win_unlock.c" info="1447123141"/>
-<file name="win_post.c" info="1447123141"/>
-<file name="win_shared_query.c" info="1447123141"/>
-<file name="win_unlock_all.c" info="1447123141"/>
-<file name="win_detach.c" info="1447123141"/>
-<file name="win_complete.c" info="1447123141"/>
-<file name="free_mem.c" info="1447123141"/>
-<file name="win_start.c" info="1447123141"/>
-<file name="winutil.c" info="1447123141"/>
-<file name="win_create_dynamic.c" info="1447123141"/>
-<file name="win_flush_local_all.c" info="1447123141"/>
-<file name="win_flush.c" info="1447123141"/>
-<file name="fetch_and_op.c" info="1447123141"/>
-<file name="win_lock.c" info="1447123141"/>
-<file name="win_create.c" info="1447123141"/>
-<file name="win_allocate.c" info="1447123141"/>
-<file name="win_lock_all.c" info="1447123141"/>
-<file name="raccumulate.c" info="1447123141"/>
-<file name="rmatypeutil.c" info="1447123141"/>
-<file name="win_free.c" info="1447123141"/>
-<file name="rget_accumulate.c" info="1447123141"/>
-<file name="get.c" info="1447123141"/>
-<file name="get_accumulate.c" info="1447123141"/>
-<file name="accumulate.c" info="1447123141"/>
-<file name="win_test.c" info="1447123141"/>
-<file name="compare_and_swap.c" info="1447123141"/>
-<file name="win_wait.c" info="1447123141"/>
-<file name="win_get_name.c" info="1447123141"/>
-<file name="win_get_group.c" info="1447123141"/>
+<file name="win_create.c" info="1478973152"/>
+<file name="win_unlock.c" info="1478973152"/>
+<file name="rput.c" info="1478973152"/>
+<file name="accumulate.c" info="1478973152"/>
+<file name="compare_and_swap.c" info="1478973152"/>
+<file name="win_detach.c" info="1478973152"/>
+<file name="win_flush.c" info="1478973152"/>
+<file name="win_get_name.c" info="1478973152"/>
+<file name="win_start.c" info="1478973152"/>
+<file name="get.c" info="1478973152"/>
+<file name="rmatypeutil.c" info="1478973152"/>
+<file name="free_mem.c" info="1478973152"/>
+<file name="win_allocate_shared.c" info="1478973152"/>
+<file name="win_post.c" info="1478973152"/>
+<file name="win_shared_query.c" info="1478973152"/>
+<file name="win_test.c" info="1478973152"/>
+<file name="win_free.c" info="1478973152"/>
+<file name="rget_accumulate.c" info="1478973152"/>
+<file name="win_complete.c" info="1478973152"/>
+<file name="win_sync.c" info="1478973152"/>
+<file name="win_allocate.c" info="1478973152"/>
+<file name="win_flush_local_all.c" info="1478973152"/>
+<file name="put.c" info="1478973152"/>
+<file name="win_set_name.c" info="1478973152"/>
+<file name="rget.c" info="1478973152"/>
+<file name="win_wait.c" info="1478973152"/>
+<file name="win_unlock_all.c" info="1478973152"/>
+<file name="winutil.c" info="1478973152"/>
+<file name="win_flush_local.c" info="1478973152"/>
+<file name="raccumulate.c" info="1478973152"/>
+<file name="win_set_info.c" info="1478973152"/>
+<file name="win_lock.c" info="1478973152"/>
+<file name="win_lock_all.c" info="1478973152"/>
+<file name="alloc_mem.c" info="1478973152"/>
+<file name="win_get_info.c" info="1478973152"/>
+<file name="win_attach.c" info="1478973152"/>
+<file name="win_get_group.c" info="1478973152"/>
+<file name="get_accumulate.c" info="1478973152"/>
+<file name="win_fence.c" info="1478973152"/>
+<file name="fetch_and_op.c" info="1478973152"/>
+<file name="win_create_dynamic.c" info="1478973152"/>
+<file name="win_flush_all.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="win_set_info.c">
-MPID_STATE_MPI_WIN_SET_INFO MPI_Win_set_info
-</fileinfo>
-<fileinfo name="win_set_name.c">
-MPID_STATE_MPI_WIN_SET_NAME MPI_Win_set_name
+<fileinfo name="win_create.c">
+MPID_STATE_MPI_WIN_CREATE MPI_Win_create
</fileinfo>
-<fileinfo name="rget.c">
-MPID_STATE_MPI_RGET MPI_Rget
+<fileinfo name="win_unlock.c">
+MPID_STATE_MPI_WIN_UNLOCK MPI_Win_unlock
</fileinfo>
-<fileinfo name="win_attach.c">
-MPID_STATE_MPI_WIN_ATTACH MPI_Win_attach
+<fileinfo name="rput.c">
+MPID_STATE_MPI_RPUT MPI_Rput
</fileinfo>
-<fileinfo name="win_get_info.c">
-MPID_STATE_MPI_WIN_GET_INFO MPI_Win_get_info
+<fileinfo name="accumulate.c">
+MPID_STATE_MPI_ACCUMULATE MPI_Accumulate
</fileinfo>
-<fileinfo name="win_sync.c">
-MPID_STATE_MPI_WIN_SYNC MPI_Win_sync
+<fileinfo name="compare_and_swap.c">
+MPID_STATE_MPI_COMPARE_AND_SWAP MPI_Compare_and_swap
</fileinfo>
-<fileinfo name="win_allocate_shared.c">
-MPID_STATE_MPI_WIN_ALLOCATE_SHARED MPI_Win_allocate_shared
+<fileinfo name="win_detach.c">
+MPID_STATE_MPI_WIN_DETACH MPI_Win_detach
</fileinfo>
-<fileinfo name="rput.c">
-MPID_STATE_MPI_RPUT MPI_Rput
+<fileinfo name="win_flush.c">
+MPID_STATE_MPI_WIN_FLUSH MPI_Win_flush
</fileinfo>
-<fileinfo name="put.c">
-MPID_STATE_MPI_PUT MPI_Put
+<fileinfo name="win_get_name.c">
+MPID_STATE_MPI_WIN_GET_NAME MPI_Win_get_name
</fileinfo>
-<fileinfo name="alloc_mem.c">
-MPID_STATE_MPI_ALLOC_MEM MPI_Alloc_mem
+<fileinfo name="win_start.c">
+MPID_STATE_MPI_WIN_START MPI_Win_start
</fileinfo>
-<fileinfo name="win_flush_all.c">
-MPID_STATE_MPI_WIN_FLUSH_ALL MPI_Win_flush_all
+<fileinfo name="get.c">
+MPID_STATE_MPI_GET MPI_Get
</fileinfo>
-<fileinfo name="win_flush_local.c">
-MPID_STATE_MPI_WIN_FLUSH_LOCAL MPI_Win_flush_local
+<fileinfo name="rmatypeutil.c">
</fileinfo>
-<fileinfo name="win_fence.c">
-MPID_STATE_MPI_WIN_FENCE MPI_Win_fence
+<fileinfo name="free_mem.c">
+MPID_STATE_MPI_FREE_MEM MPI_Free_mem
</fileinfo>
-<fileinfo name="win_unlock.c">
-MPID_STATE_MPI_WIN_UNLOCK MPI_Win_unlock
+<fileinfo name="win_allocate_shared.c">
+MPID_STATE_MPI_WIN_ALLOCATE_SHARED MPI_Win_allocate_shared
</fileinfo>
<fileinfo name="win_post.c">
MPID_STATE_MPI_WIN_POST MPI_Win_post
@@ -91,80 +87,84 @@ MPID_STATE_MPI_WIN_POST MPI_Win_post
<fileinfo name="win_shared_query.c">
MPID_STATE_MPI_WIN_SHARED_QUERY MPI_Win_shared_query
</fileinfo>
-<fileinfo name="win_unlock_all.c">
-MPID_STATE_MPI_WIN_UNLOCK_ALL MPI_Win_unlock_all
+<fileinfo name="win_test.c">
+MPID_STATE_MPI_WIN_TEST MPI_Win_test
</fileinfo>
-<fileinfo name="win_detach.c">
-MPID_STATE_MPI_WIN_DETACH MPI_Win_detach
+<fileinfo name="win_free.c">
+MPID_STATE_MPI_WIN_FREE MPI_Win_free
+</fileinfo>
+<fileinfo name="rget_accumulate.c">
+MPID_STATE_MPI_RGET_ACCUMULATE MPI_Rget_accumulate
</fileinfo>
<fileinfo name="win_complete.c">
MPID_STATE_MPI_WIN_COMPLETE MPI_Win_complete
</fileinfo>
-<fileinfo name="free_mem.c">
-MPID_STATE_MPI_FREE_MEM MPI_Free_mem
-</fileinfo>
-<fileinfo name="win_start.c">
-MPID_STATE_MPI_WIN_START MPI_Win_start
-</fileinfo>
-<fileinfo name="winutil.c">
+<fileinfo name="win_sync.c">
+MPID_STATE_MPI_WIN_SYNC MPI_Win_sync
</fileinfo>
-<fileinfo name="win_create_dynamic.c">
-MPID_STATE_MPI_WIN_CREATE_DYNAMIC MPI_Win_create_dynamic
+<fileinfo name="win_allocate.c">
+MPID_STATE_MPI_WIN_ALLOCATE MPI_Win_allocate
</fileinfo>
<fileinfo name="win_flush_local_all.c">
MPID_STATE_MPI_WIN_FLUSH_LOCAL_ALL MPI_Win_flush_local_all
</fileinfo>
-<fileinfo name="win_flush.c">
-MPID_STATE_MPI_WIN_FLUSH MPI_Win_flush
+<fileinfo name="put.c">
+MPID_STATE_MPI_PUT MPI_Put
</fileinfo>
-<fileinfo name="fetch_and_op.c">
-MPID_STATE_MPI_FETCH_AND_OP MPI_Fetch_and_op
+<fileinfo name="win_set_name.c">
+MPID_STATE_MPI_WIN_SET_NAME MPI_Win_set_name
</fileinfo>
-<fileinfo name="win_lock.c">
-MPID_STATE_MPI_WIN_LOCK MPI_Win_lock
+<fileinfo name="rget.c">
+MPID_STATE_MPI_RGET MPI_Rget
</fileinfo>
-<fileinfo name="win_create.c">
-MPID_STATE_MPI_WIN_CREATE MPI_Win_create
+<fileinfo name="win_wait.c">
+MPID_STATE_MPI_WIN_WAIT MPI_Win_wait
</fileinfo>
-<fileinfo name="win_allocate.c">
-MPID_STATE_MPI_WIN_ALLOCATE MPI_Win_allocate
+<fileinfo name="win_unlock_all.c">
+MPID_STATE_MPI_WIN_UNLOCK_ALL MPI_Win_unlock_all
</fileinfo>
-<fileinfo name="win_lock_all.c">
-MPID_STATE_MPI_WIN_LOCK_ALL MPI_Win_lock_all
+<fileinfo name="winutil.c">
+</fileinfo>
+<fileinfo name="win_flush_local.c">
+MPID_STATE_MPI_WIN_FLUSH_LOCAL MPI_Win_flush_local
</fileinfo>
<fileinfo name="raccumulate.c">
MPID_STATE_MPI_RACCUMULATE MPI_Raccumulate
</fileinfo>
-<fileinfo name="rmatypeutil.c">
+<fileinfo name="win_set_info.c">
+MPID_STATE_MPI_WIN_SET_INFO MPI_Win_set_info
</fileinfo>
-<fileinfo name="win_free.c">
-MPID_STATE_MPI_WIN_FREE MPI_Win_free
+<fileinfo name="win_lock.c">
+MPID_STATE_MPI_WIN_LOCK MPI_Win_lock
</fileinfo>
-<fileinfo name="rget_accumulate.c">
-MPID_STATE_MPI_RGET_ACCUMULATE MPI_Rget_accumulate
+<fileinfo name="win_lock_all.c">
+MPID_STATE_MPI_WIN_LOCK_ALL MPI_Win_lock_all
</fileinfo>
-<fileinfo name="get.c">
-MPID_STATE_MPI_GET MPI_Get
+<fileinfo name="alloc_mem.c">
+MPID_STATE_MPI_ALLOC_MEM MPI_Alloc_mem
</fileinfo>
-<fileinfo name="get_accumulate.c">
-MPID_STATE_MPI_GET_ACCUMULATE MPI_Get_accumulate
+<fileinfo name="win_get_info.c">
+MPID_STATE_MPI_WIN_GET_INFO MPI_Win_get_info
</fileinfo>
-<fileinfo name="accumulate.c">
-MPID_STATE_MPI_ACCUMULATE MPI_Accumulate
+<fileinfo name="win_attach.c">
+MPID_STATE_MPI_WIN_ATTACH MPI_Win_attach
</fileinfo>
-<fileinfo name="win_test.c">
-MPID_STATE_MPI_WIN_TEST MPI_Win_test
+<fileinfo name="win_get_group.c">
+MPID_STATE_MPI_WIN_GET_GROUP MPI_Win_get_group
</fileinfo>
-<fileinfo name="compare_and_swap.c">
-MPID_STATE_MPI_COMPARE_AND_SWAP MPI_Compare_and_swap
+<fileinfo name="get_accumulate.c">
+MPID_STATE_MPI_GET_ACCUMULATE MPI_Get_accumulate
</fileinfo>
-<fileinfo name="win_wait.c">
-MPID_STATE_MPI_WIN_WAIT MPI_Win_wait
+<fileinfo name="win_fence.c">
+MPID_STATE_MPI_WIN_FENCE MPI_Win_fence
</fileinfo>
-<fileinfo name="win_get_name.c">
-MPID_STATE_MPI_WIN_GET_NAME MPI_Win_get_name
+<fileinfo name="fetch_and_op.c">
+MPID_STATE_MPI_FETCH_AND_OP MPI_Fetch_and_op
</fileinfo>
-<fileinfo name="win_get_group.c">
-MPID_STATE_MPI_WIN_GET_GROUP MPI_Win_get_group
+<fileinfo name="win_create_dynamic.c">
+MPID_STATE_MPI_WIN_CREATE_DYNAMIC MPI_Win_create_dynamic
+</fileinfo>
+<fileinfo name="win_flush_all.c">
+MPID_STATE_MPI_WIN_FLUSH_ALL MPI_Win_flush_all
</fileinfo>
</data>
diff --git a/src/mpi/rma/accumulate.c b/src/mpi/rma/accumulate.c
index b5aaf4f..74c9825 100644
--- a/src/mpi/rma/accumulate.c
+++ b/src/mpi/rma/accumulate.c
@@ -72,13 +72,13 @@ int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
{
static const char FCNAME[] = "MPI_Accumulate";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ACCUMULATE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ACCUMULATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_ACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_ACCUMULATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -92,17 +92,17 @@ int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(origin_count, mpi_errno);
@@ -115,10 +115,10 @@ int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -126,10 +126,10 @@ int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -154,7 +154,7 @@ int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_ACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_ACCUMULATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/alloc_mem.c b/src/mpi/rma/alloc_mem.c
index 3660e25..f837516 100644
--- a/src/mpi/rma/alloc_mem.c
+++ b/src/mpi/rma/alloc_mem.c
@@ -65,13 +65,13 @@ int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
static const char FCNAME[] = "MPI_Alloc_mem";
int mpi_errno = MPI_SUCCESS;
void *ap;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_ALLOC_MEM);
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_ALLOC_MEM);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_ALLOC_MEM);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_ALLOC_MEM);
# ifdef HAVE_ERROR_CHECKING
{
@@ -85,11 +85,11 @@ int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
}
# endif /* HAVE_ERROR_CHECKING */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* ... body of routine ... */
- MPIU_Ensure_Aint_fits_in_pointer(size);
+ MPIR_Ensure_Aint_fits_in_pointer(size);
ap = MPID_Alloc_mem(size, info_ptr);
/* --BEGIN ERROR HANDLING-- */
@@ -100,12 +100,13 @@ int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
}
/* --END ERROR HANDLING-- */
+ MPL_VG_MEM_INIT(ap, size);
*(void **)baseptr = ap;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_ALLOC_MEM);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_ALLOC_MEM);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/compare_and_swap.c b/src/mpi/rma/compare_and_swap.c
index a50f7df..961b88c 100644
--- a/src/mpi/rma/compare_and_swap.c
+++ b/src/mpi/rma/compare_and_swap.c
@@ -78,13 +78,13 @@ int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
{
static const char FCNAME[] = "MPI_Compare_and_swap";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMPARE_AND_SWAP);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMPARE_AND_SWAP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_COMPARE_AND_SWAP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -98,17 +98,17 @@ int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm *comm_ptr;
+ MPIR_Comm *comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL(origin_addr, "origin_addr", mpi_errno);
@@ -142,7 +142,7 @@ int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_COMPARE_AND_SWAP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/fetch_and_op.c b/src/mpi/rma/fetch_and_op.c
index 0f14079..df81331 100644
--- a/src/mpi/rma/fetch_and_op.c
+++ b/src/mpi/rma/fetch_and_op.c
@@ -83,13 +83,13 @@ int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
{
static const char FCNAME[] = "MPI_Fetch_and_op";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_FETCH_AND_OP);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_FETCH_AND_OP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_FETCH_AND_OP);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_FETCH_AND_OP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -103,17 +103,17 @@ int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm *comm_ptr;
+ MPIR_Comm *comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
if (op != MPI_NO_OP) {
@@ -158,7 +158,7 @@ int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_FETCH_AND_OP);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_FETCH_AND_OP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/free_mem.c b/src/mpi/rma/free_mem.c
index db0b6b2..57ba8c1 100644
--- a/src/mpi/rma/free_mem.c
+++ b/src/mpi/rma/free_mem.c
@@ -48,12 +48,12 @@ int MPI_Free_mem(void *base)
{
static const char FCNAME[] = "MPI_Free_mem";
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_FREE_MEM);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_FREE_MEM);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_FREE_MEM);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_FREE_MEM);
/* ... body of routine ... */
@@ -65,7 +65,7 @@ int MPI_Free_mem(void *base)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_FREE_MEM);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_FREE_MEM);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/get.c b/src/mpi/rma/get.c
index 23c7bed..b7f3aed 100644
--- a/src/mpi/rma/get.c
+++ b/src/mpi/rma/get.c
@@ -67,13 +67,13 @@ int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype
{
static const char FCNAME[] = "MPI_Get";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_GET);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,17 +87,17 @@ int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(origin_count, mpi_errno);
@@ -110,10 +110,10 @@ int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -121,10 +121,10 @@ int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -147,7 +147,7 @@ int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_GET);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_GET);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/get_accumulate.c b/src/mpi/rma/get_accumulate.c
index 0797a29..24c7911 100644
--- a/src/mpi/rma/get_accumulate.c
+++ b/src/mpi/rma/get_accumulate.c
@@ -103,13 +103,13 @@ int MPI_Get_accumulate(const void *origin_addr, int origin_count,
{
static const char FCNAME[] = "MPI_Get_accumulate";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GET_ACCUMULATE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GET_ACCUMULATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_GET_ACCUMULATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -123,17 +123,17 @@ int MPI_Get_accumulate(const void *origin_addr, int origin_count,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
if (op != MPI_NO_OP) {
@@ -156,10 +156,10 @@ int MPI_Get_accumulate(const void *origin_addr, int origin_count,
if (op != MPI_NO_OP &&
HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -167,10 +167,10 @@ int MPI_Get_accumulate(const void *origin_addr, int origin_count,
if (HANDLE_GET_KIND(result_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(result_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -178,10 +178,10 @@ int MPI_Get_accumulate(const void *origin_addr, int origin_count,
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -208,7 +208,7 @@ int MPI_Get_accumulate(const void *origin_addr, int origin_count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_GET_ACCUMULATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/put.c b/src/mpi/rma/put.c
index 5b46007..e7d8781 100644
--- a/src/mpi/rma/put.c
+++ b/src/mpi/rma/put.c
@@ -67,13 +67,13 @@ int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype
{
static const char FCNAME[] = "MPI_Put";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PUT);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PUT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_PUT);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_PUT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,17 +87,17 @@ int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(origin_count, mpi_errno);
@@ -110,10 +110,10 @@ int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -121,10 +121,10 @@ int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -147,7 +147,7 @@ int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_PUT);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_PUT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/raccumulate.c b/src/mpi/rma/raccumulate.c
index 9fb0edd..75e7e2d 100644
--- a/src/mpi/rma/raccumulate.c
+++ b/src/mpi/rma/raccumulate.c
@@ -85,14 +85,14 @@ int MPI_Raccumulate(const void *origin_addr, int origin_count, MPI_Datatype
{
static const char FCNAME[] = "MPI_Raccumulate";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RACCUMULATE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RACCUMULATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_RACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_RACCUMULATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -106,17 +106,17 @@ int MPI_Raccumulate(const void *origin_addr, int origin_count, MPI_Datatype
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(origin_count, mpi_errno);
@@ -129,10 +129,10 @@ int MPI_Raccumulate(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -140,10 +140,10 @@ int MPI_Raccumulate(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -171,7 +171,7 @@ int MPI_Raccumulate(const void *origin_addr, int origin_count, MPI_Datatype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_RACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_RACCUMULATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/rget.c b/src/mpi/rma/rget.c
index cac765d..e030fe1 100644
--- a/src/mpi/rma/rget.c
+++ b/src/mpi/rma/rget.c
@@ -80,14 +80,14 @@ int MPI_Rget(void *origin_addr, int origin_count, MPI_Datatype
{
static const char FCNAME[] = "MPI_Rget";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RGET);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RGET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_RGET);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_RGET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -101,17 +101,17 @@ int MPI_Rget(void *origin_addr, int origin_count, MPI_Datatype
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(origin_count, mpi_errno);
@@ -124,10 +124,10 @@ int MPI_Rget(void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -135,10 +135,10 @@ int MPI_Rget(void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -164,7 +164,7 @@ int MPI_Rget(void *origin_addr, int origin_count, MPI_Datatype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_RGET);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_RGET);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/rget_accumulate.c b/src/mpi/rma/rget_accumulate.c
index f46bd05..4d5ca12 100644
--- a/src/mpi/rma/rget_accumulate.c
+++ b/src/mpi/rma/rget_accumulate.c
@@ -95,14 +95,14 @@ int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
{
static const char FCNAME[] = "MPI_Rget_accumulate";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RGET_ACCUMULATE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RGET_ACCUMULATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_RGET_ACCUMULATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -116,17 +116,17 @@ int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
if (op != MPI_NO_OP) {
@@ -145,10 +145,10 @@ int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
if (op != MPI_NO_OP &&
HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -156,10 +156,10 @@ int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
if (HANDLE_GET_KIND(result_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -167,10 +167,10 @@ int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -200,7 +200,7 @@ int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_RGET_ACCUMULATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/rmatypeutil.c b/src/mpi/rma/rmatypeutil.c
index 1bd81ea..cab4a3f 100644
--- a/src/mpi/rma/rmatypeutil.c
+++ b/src/mpi/rma/rmatypeutil.c
@@ -5,13 +5,13 @@
*/
/* This file contains functions that support the RMA code but use some "private"
- * headers from the oputil.h in the "coll" directory. The alternative is to put
+ * headers from the mpir_op_util.h in the "coll" directory. The alternative is to put
* this file in src/mpi/rma instead and add -I${top_srcdir}/src/mpi/coll to the
- * AM_CPPFLAGS. That option is less preferable because the usage of "oputil.h"
+ * AM_CPPFLAGS. That option is less preferable because the usage of "mpir_op_util.h"
* can bleed out of this directory and it clutters the CPPFLAGS further. */
#include "mpiimpl.h"
-#include "oputil.h"
+#include "mpir_op_util.h"
/* Returns true iff the given type is valid for use in MPI-3 RMA atomics, such
* as MPI_Compare_and_swap or MPI_Fetch_and_op. Does NOT return MPICH error
diff --git a/src/mpi/rma/rput.c b/src/mpi/rma/rput.c
index d149d44..1219dc7 100644
--- a/src/mpi/rma/rput.c
+++ b/src/mpi/rma/rput.c
@@ -82,14 +82,14 @@ int MPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype
{
static const char FCNAME[] = "MPI_Rput";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Request *request_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_RPUT);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Request *request_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_RPUT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_RPUT);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_RPUT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -103,17 +103,17 @@ int MPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_COUNT(origin_count, mpi_errno);
@@ -126,10 +126,10 @@ int MPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(origin_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(origin_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -137,10 +137,10 @@ int MPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype
if (HANDLE_GET_KIND(target_datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype *datatype_ptr = NULL;
+ MPIR_Datatype *datatype_ptr = NULL;
MPID_Datatype_get_ptr(target_datatype, datatype_ptr);
- MPID_Datatype_valid_ptr(datatype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(datatype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -166,7 +166,7 @@ int MPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_RPUT);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_RPUT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_allocate.c b/src/mpi/rma/win_allocate.c
index 3ee66f1..79a3b85 100644
--- a/src/mpi/rma/win_allocate.c
+++ b/src/mpi/rma/win_allocate.c
@@ -73,15 +73,15 @@ int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info,
{
static const char FCNAME[] = "MPI_Win_allocate";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Comm *comm_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_ALLOCATE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_ALLOCATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_ALLOCATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -97,8 +97,8 @@ int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -106,7 +106,7 @@ int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (size < 0)
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
@@ -147,12 +147,12 @@ int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info,
win_ptr->errhandler = 0;
/* return the handle of the window object to the user */
- MPID_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_ALLOCATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_allocate_shared.c b/src/mpi/rma/win_allocate_shared.c
index 0c84cdb..324f857 100644
--- a/src/mpi/rma/win_allocate_shared.c
+++ b/src/mpi/rma/win_allocate_shared.c
@@ -83,15 +83,15 @@ int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Com
void *baseptr, MPI_Win *win)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Comm *comm_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_ALLOCATE_SHARED);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_ALLOCATE_SHARED);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -107,8 +107,8 @@ int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Com
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -116,7 +116,7 @@ int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Com
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERR_CHKANDJUMP1(disp_unit <= 0, mpi_errno, MPI_ERR_ARG,
@@ -145,12 +145,12 @@ int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Com
win_ptr->errhandler = 0;
/* return the handle of the window object to the user */
- MPID_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_ALLOCATE_SHARED);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_attach.c b/src/mpi/rma/win_attach.c
index 1335d4b..9f39a44 100644
--- a/src/mpi/rma/win_attach.c
+++ b/src/mpi/rma/win_attach.c
@@ -64,13 +64,13 @@ int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size)
{
static const char FCNAME[] = "MPI_Win_attach";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_ATTACH);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_ATTACH);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_ATTACH);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_ATTACH);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -84,7 +84,7 @@ int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -92,7 +92,7 @@ int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
if (size < 0)
@@ -126,7 +126,7 @@ int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_ATTACH);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_ATTACH);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_complete.c b/src/mpi/rma/win_complete.c
index 445de58..e3fc53b 100644
--- a/src/mpi/rma/win_complete.c
+++ b/src/mpi/rma/win_complete.c
@@ -49,13 +49,13 @@ int MPI_Win_complete(MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_complete";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_COMPLETE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_COMPLETE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_COMPLETE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_COMPLETE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -69,7 +69,7 @@ int MPI_Win_complete(MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +77,7 @@ int MPI_Win_complete(MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
@@ -93,7 +93,7 @@ int MPI_Win_complete(MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_COMPLETE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_COMPLETE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_create.c b/src/mpi/rma/win_create.c
index 21747af..ffb134f 100644
--- a/src/mpi/rma/win_create.c
+++ b/src/mpi/rma/win_create.c
@@ -101,15 +101,15 @@ int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info,
{
static const char FCNAME[] = "MPI_Win_create";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Comm *comm_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_CREATE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_CREATE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_CREATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -125,8 +125,8 @@ int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -134,7 +134,7 @@ int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
if (size < 0)
mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
@@ -175,12 +175,12 @@ int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info,
win_ptr->errhandler = 0;
/* return the handle of the window object to the user */
- MPID_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_CREATE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_create_dynamic.c b/src/mpi/rma/win_create_dynamic.c
index 7d5ac94..76fa606 100644
--- a/src/mpi/rma/win_create_dynamic.c
+++ b/src/mpi/rma/win_create_dynamic.c
@@ -89,15 +89,15 @@ int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win)
{
static const char FCNAME[] = "MPI_Win_create_dynamic";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Comm *comm_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_CREATE_DYNAMIC);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_CREATE_DYNAMIC);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -113,8 +113,8 @@ int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -122,7 +122,7 @@ int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -139,12 +139,12 @@ int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win)
win_ptr->errhandler = 0;
/* return the handle of the window object to the user */
- MPID_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*win, win_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_CREATE_DYNAMIC);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_detach.c b/src/mpi/rma/win_detach.c
index ed9d22e..b1c601c 100644
--- a/src/mpi/rma/win_detach.c
+++ b/src/mpi/rma/win_detach.c
@@ -63,13 +63,13 @@ int MPI_Win_detach(MPI_Win win, const void *base)
{
static const char FCNAME[] = "MPI_Win_detach";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_DETACH);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_DETACH);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_DETACH);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_DETACH);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +83,7 @@ int MPI_Win_detach(MPI_Win win, const void *base)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -91,7 +91,7 @@ int MPI_Win_detach(MPI_Win win, const void *base)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -108,7 +108,7 @@ int MPI_Win_detach(MPI_Win win, const void *base)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_DETACH);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_DETACH);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_fence.c b/src/mpi/rma/win_fence.c
index 8b7dc96..4ba5a1a 100644
--- a/src/mpi/rma/win_fence.c
+++ b/src/mpi/rma/win_fence.c
@@ -67,13 +67,13 @@ int MPI_Win_fence(int assert, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_fence";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_FENCE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_FENCE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_FENCE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_FENCE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,7 +87,7 @@ int MPI_Win_fence(int assert, MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -95,7 +95,7 @@ int MPI_Win_fence(int assert, MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* TODO: validate window is not in passive mode */
/* TODO: validate assert argument */
@@ -114,7 +114,7 @@ int MPI_Win_fence(int assert, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_FENCE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_FENCE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_flush.c b/src/mpi/rma/win_flush.c
index e751e47..8a3370c 100644
--- a/src/mpi/rma/win_flush.c
+++ b/src/mpi/rma/win_flush.c
@@ -58,13 +58,13 @@ int MPI_Win_flush(int rank, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_flush";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_FLUSH);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_FLUSH);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -78,17 +78,17 @@ int MPI_Win_flush(int rank, MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
comm_ptr = win_ptr->comm_ptr;
@@ -109,7 +109,7 @@ int MPI_Win_flush(int rank, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_FLUSH);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_FLUSH);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_flush_all.c b/src/mpi/rma/win_flush_all.c
index 7855e25..fdea8c3 100644
--- a/src/mpi/rma/win_flush_all.c
+++ b/src/mpi/rma/win_flush_all.c
@@ -57,13 +57,13 @@ int MPI_Win_flush_all(MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_flush_all";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH_ALL);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH_ALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_FLUSH_ALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +77,7 @@ int MPI_Win_flush_all(MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -85,7 +85,7 @@ int MPI_Win_flush_all(MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* TODO: Validate that the given window is in passive mode */
@@ -103,7 +103,7 @@ int MPI_Win_flush_all(MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_FLUSH_ALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_flush_local.c b/src/mpi/rma/win_flush_local.c
index fd64eee..138b5ac 100644
--- a/src/mpi/rma/win_flush_local.c
+++ b/src/mpi/rma/win_flush_local.c
@@ -60,13 +60,13 @@ int MPI_Win_flush_local(int rank, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_flush_local";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH_LOCAL);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH_LOCAL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_FLUSH_LOCAL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -80,17 +80,17 @@ int MPI_Win_flush_local(int rank, MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
comm_ptr = win_ptr->comm_ptr;
@@ -111,7 +111,7 @@ int MPI_Win_flush_local(int rank, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_FLUSH_LOCAL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_flush_local_all.c b/src/mpi/rma/win_flush_local_all.c
index c5c629e..d99311b 100644
--- a/src/mpi/rma/win_flush_local_all.c
+++ b/src/mpi/rma/win_flush_local_all.c
@@ -56,13 +56,13 @@ int MPI_Win_flush_local_all(MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_flush_local_all";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_FLUSH_LOCAL_ALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_FLUSH_LOCAL_ALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -76,7 +76,7 @@ int MPI_Win_flush_local_all(MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -84,7 +84,7 @@ int MPI_Win_flush_local_all(MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* TODO: Validate that the given window is in passive mode */
@@ -101,7 +101,7 @@ int MPI_Win_flush_local_all(MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_FLUSH_LOCAL_ALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_free.c b/src/mpi/rma/win_free.c
index 5c7788f..e614a21 100644
--- a/src/mpi/rma/win_free.c
+++ b/src/mpi/rma/win_free.c
@@ -52,13 +52,13 @@ int MPI_Win_free(MPI_Win *win)
{
static const char FCNAME[] = "MPI_Win_free";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_FREE);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_FREE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_FREE);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -72,7 +72,7 @@ int MPI_Win_free(MPI_Win *win)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( *win, win_ptr );
+ MPIR_Win_get_ptr( *win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -80,7 +80,7 @@ int MPI_Win_free(MPI_Win *win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* TODO: Check for unterminated passive target epoch */
@@ -112,7 +112,7 @@ int MPI_Win_free(MPI_Win *win)
int in_use;
MPIR_Errhandler_release_ref( win_ptr->errhandler,&in_use);
if (!in_use) {
- MPIU_Handle_obj_free( &MPID_Errhandler_mem, win_ptr->errhandler );
+ MPIR_Handle_obj_free( &MPIR_Errhandler_mem, win_ptr->errhandler );
}
}
@@ -123,7 +123,7 @@ int MPI_Win_free(MPI_Win *win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_FREE);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_FREE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_get_group.c b/src/mpi/rma/win_get_group.c
index 6a5cb1f..333c014 100644
--- a/src/mpi/rma/win_get_group.c
+++ b/src/mpi/rma/win_get_group.c
@@ -59,15 +59,15 @@ int MPI_Win_get_group(MPI_Win win, MPI_Group *group)
{
static const char FCNAME[] = "MPI_Win_get_group";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Comm *win_comm_ptr;
- MPID_Group *group_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_GET_GROUP);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Comm *win_comm_ptr;
+ MPIR_Group *group_ptr;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_GET_GROUP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_GET_GROUP);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_GET_GROUP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -82,7 +82,7 @@ int MPI_Win_get_group(MPI_Win win, MPI_Group *group)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -90,7 +90,7 @@ int MPI_Win_get_group(MPI_Win win, MPI_Group *group)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
@@ -109,7 +109,7 @@ int MPI_Win_get_group(MPI_Win win, MPI_Group *group)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_GET_GROUP);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_GET_GROUP);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_get_info.c b/src/mpi/rma/win_get_info.c
index 4f13dc0..bb46e06 100644
--- a/src/mpi/rma/win_get_info.c
+++ b/src/mpi/rma/win_get_info.c
@@ -70,14 +70,14 @@ int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used)
{
static const char FCNAME[] = "MPI_Win_get_info";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_GET_INFO);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_GET_INFO);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_GET_INFO);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_GET_INFO);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -91,7 +91,7 @@ int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -99,7 +99,7 @@ int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -117,7 +117,7 @@ int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_GET_INFO);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_GET_INFO);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_get_name.c b/src/mpi/rma/win_get_name.c
index 10900d1..1b13ff1 100644
--- a/src/mpi/rma/win_get_name.c
+++ b/src/mpi/rma/win_get_name.c
@@ -56,12 +56,12 @@ Output Parameters:
int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_GET_NAME);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_GET_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_GET_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_GET_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -75,7 +75,7 @@ int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +83,7 @@ int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* If win_ptr is not valid, it will be reset to null */
@@ -96,13 +96,13 @@ int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
/* ... body of routine ... */
- MPIU_Strncpy( win_name, win_ptr->name, MPI_MAX_OBJECT_NAME );
+ MPL_strncpy( win_name, win_ptr->name, MPI_MAX_OBJECT_NAME );
*resultlen = (int)strlen( win_name );
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_GET_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_GET_NAME);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/rma/win_lock.c b/src/mpi/rma/win_lock.c
index 7972ef3..908be33 100644
--- a/src/mpi/rma/win_lock.c
+++ b/src/mpi/rma/win_lock.c
@@ -77,13 +77,13 @@ int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_lock";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_LOCK);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_LOCK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_LOCK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_LOCK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -97,17 +97,17 @@ int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm *comm_ptr;
+ MPIR_Comm *comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
@@ -142,7 +142,7 @@ int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_LOCK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_LOCK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_lock_all.c b/src/mpi/rma/win_lock_all.c
index ebf8cdd..90e6a0b 100644
--- a/src/mpi/rma/win_lock_all.c
+++ b/src/mpi/rma/win_lock_all.c
@@ -81,13 +81,13 @@ int MPI_Win_lock_all(int assert, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_lock_all";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_LOCK_ALL);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_LOCK_ALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_LOCK_ALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -101,7 +101,7 @@ int MPI_Win_lock_all(int assert, MPI_Win win)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -109,7 +109,7 @@ int MPI_Win_lock_all(int assert, MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
if (assert != 0 && assert != MPI_MODE_NOCHECK) {
@@ -136,7 +136,7 @@ int MPI_Win_lock_all(int assert, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_LOCK_ALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_post.c b/src/mpi/rma/win_post.c
index 53d606d..3ddc506 100644
--- a/src/mpi/rma/win_post.c
+++ b/src/mpi/rma/win_post.c
@@ -65,14 +65,14 @@ int MPI_Win_post(MPI_Group group, int assert, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_post";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Group *group_ptr=NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_POST);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Group *group_ptr=NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_POST);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_POST);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_POST);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,8 +87,8 @@ int MPI_Win_post(MPI_Group group, int assert, MPI_Win win)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
- MPID_Group_get_ptr(group, group_ptr);
+ MPIR_Win_get_ptr( win, win_ptr );
+ MPIR_Group_get_ptr(group, group_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -96,9 +96,9 @@ int MPI_Win_post(MPI_Group group, int assert, MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
- MPID_Group_valid_ptr(group_ptr, mpi_errno);
+ MPIR_Group_valid_ptr(group_ptr, mpi_errno);
/* TODO: Validate assert argument */
/* TODO: Validate that window is not in passive mode */
@@ -117,7 +117,7 @@ int MPI_Win_post(MPI_Group group, int assert, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_POST);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_POST);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_set_info.c b/src/mpi/rma/win_set_info.c
index 34f535e..00ace6e 100644
--- a/src/mpi/rma/win_set_info.c
+++ b/src/mpi/rma/win_set_info.c
@@ -67,14 +67,14 @@ int MPI_Win_set_info(MPI_Win win, MPI_Info info)
{
static const char FCNAME[] = "MPI_Win_set_info";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_SET_INFO);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_SET_INFO);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_SET_INFO);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_SET_INFO);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -88,8 +88,8 @@ int MPI_Win_set_info(MPI_Win win, MPI_Info info)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -97,10 +97,10 @@ int MPI_Win_set_info(MPI_Win win, MPI_Info info)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate pointers */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -116,7 +116,7 @@ int MPI_Win_set_info(MPI_Win win, MPI_Info info)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_SET_INFO);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_SET_INFO);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_set_name.c b/src/mpi/rma/win_set_name.c
index b04f415..ac7c311 100644
--- a/src/mpi/rma/win_set_name.c
+++ b/src/mpi/rma/win_set_name.c
@@ -51,12 +51,12 @@ int MPI_Win_set_name(MPI_Win win, const char *win_name)
{
static const char FCNAME[] = "MPI_Win_set_name";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_SET_NAME);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_SET_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_SET_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_SET_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -70,7 +70,7 @@ int MPI_Win_set_name(MPI_Win win, const char *win_name)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -78,7 +78,7 @@ int MPI_Win_set_name(MPI_Win win, const char *win_name)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* If win_ptr is not valid, it will be reset to null */
@@ -90,12 +90,12 @@ int MPI_Win_set_name(MPI_Win win, const char *win_name)
/* ... body of routine ... */
- MPIU_Strncpy( win_ptr->name, win_name, MPI_MAX_OBJECT_NAME );
+ MPL_strncpy( win_ptr->name, win_name, MPI_MAX_OBJECT_NAME );
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_SET_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_SET_NAME);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/rma/win_shared_query.c b/src/mpi/rma/win_shared_query.c
index 9931dda..a9c7bf9 100644
--- a/src/mpi/rma/win_shared_query.c
+++ b/src/mpi/rma/win_shared_query.c
@@ -75,13 +75,13 @@ int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit,
{
static const char FCNAME[] = "MPI_Win_shared_query";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_SHARED_QUERY);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_SHARED_QUERY);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_SHARED_QUERY);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -95,17 +95,17 @@ int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit,
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL(size, "size", mpi_errno);
@@ -128,7 +128,7 @@ int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_SHARED_QUERY);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_start.c b/src/mpi/rma/win_start.c
index 2bc8e6b..1af67de 100644
--- a/src/mpi/rma/win_start.c
+++ b/src/mpi/rma/win_start.c
@@ -66,14 +66,14 @@ int MPI_Win_start(MPI_Group group, int assert, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_start";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_Group *group_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_START);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_Group *group_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_START);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_START);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_START);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -88,18 +88,18 @@ int MPI_Win_start(MPI_Group group, int assert, MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Get handles to MPI objects. */
- MPID_Win_get_ptr( win, win_ptr );
- MPID_Group_get_ptr(group, group_ptr);
+ MPIR_Win_get_ptr( win, win_ptr );
+ MPIR_Group_get_ptr(group, group_ptr);
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
- MPID_Group_valid_ptr(group_ptr, mpi_errno);
+ MPIR_Group_valid_ptr(group_ptr, mpi_errno);
/* TODO: Validate assert argument */
/* TODO: Validate window state */
@@ -118,7 +118,7 @@ int MPI_Win_start(MPI_Group group, int assert, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_START);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_START);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_sync.c b/src/mpi/rma/win_sync.c
index 28156b7..418ce95 100644
--- a/src/mpi/rma/win_sync.c
+++ b/src/mpi/rma/win_sync.c
@@ -59,13 +59,13 @@ int MPI_Win_sync(MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_sync";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_SYNC);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_SYNC);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_SYNC);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_SYNC);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -79,14 +79,14 @@ int MPI_Win_sync(MPI_Win win)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* TODO: Ensure that window is in a passive mode epoch */
@@ -103,7 +103,7 @@ int MPI_Win_sync(MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_SYNC);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_SYNC);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_test.c b/src/mpi/rma/win_test.c
index d422a8a..b24ec51 100644
--- a/src/mpi/rma/win_test.c
+++ b/src/mpi/rma/win_test.c
@@ -58,13 +58,13 @@ int MPI_Win_test(MPI_Win win, int *flag)
{
static const char FCNAME[] = "MPI_Win_test";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_TEST);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_TEST);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_TEST);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_TEST);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -78,13 +78,13 @@ int MPI_Win_test(MPI_Win win, int *flag)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
if (mpi_errno) goto fn_fail;
/* If win_ptr is not valid, it will be reset to null */
@@ -104,7 +104,7 @@ int MPI_Win_test(MPI_Win win, int *flag)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_TEST);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_TEST);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_unlock.c b/src/mpi/rma/win_unlock.c
index 0211e15..f37f7c7 100644
--- a/src/mpi/rma/win_unlock.c
+++ b/src/mpi/rma/win_unlock.c
@@ -53,13 +53,13 @@ int MPI_Win_unlock(int rank, MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_unlock";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_UNLOCK);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_UNLOCK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_UNLOCK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_UNLOCK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -73,17 +73,17 @@ int MPI_Win_unlock(int rank, MPI_Win win)
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm * comm_ptr;
+ MPIR_Comm * comm_ptr;
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
@@ -104,7 +104,7 @@ int MPI_Win_unlock(int rank, MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_UNLOCK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_UNLOCK);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_unlock_all.c b/src/mpi/rma/win_unlock_all.c
index e3ac876..8e2616c 100644
--- a/src/mpi/rma/win_unlock_all.c
+++ b/src/mpi/rma/win_unlock_all.c
@@ -60,13 +60,13 @@ int MPI_Win_unlock_all(MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_unlock_all";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_UNLOCK_ALL);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_UNLOCK_ALL);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WIN_UNLOCK_ALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -80,7 +80,7 @@ int MPI_Win_unlock_all(MPI_Win win)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -88,7 +88,7 @@ int MPI_Win_unlock_all(MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* If win_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
@@ -106,7 +106,7 @@ int MPI_Win_unlock_all(MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WIN_UNLOCK_ALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/win_wait.c b/src/mpi/rma/win_wait.c
index c9b004a..0ffb88f 100644
--- a/src/mpi/rma/win_wait.c
+++ b/src/mpi/rma/win_wait.c
@@ -49,13 +49,13 @@ int MPI_Win_wait(MPI_Win win)
{
static const char FCNAME[] = "MPI_Win_wait";
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WIN_WAIT);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WIN_WAIT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_RMA_FUNC_ENTER(MPID_STATE_MPI_WIN_WAIT);
+ MPIR_FUNC_TERSE_RMA_ENTER(MPID_STATE_MPI_WIN_WAIT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -69,7 +69,7 @@ int MPI_Win_wait(MPI_Win win)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Win_get_ptr( win, win_ptr );
+ MPIR_Win_get_ptr( win, win_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +77,7 @@ int MPI_Win_wait(MPI_Win win)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate win_ptr */
- MPID_Win_valid_ptr( win_ptr, mpi_errno );
+ MPIR_Win_valid_ptr( win_ptr, mpi_errno );
/* TODO: Ensure window is in a PSCW active mode epoch */
if (mpi_errno) goto fn_fail;
@@ -94,7 +94,7 @@ int MPI_Win_wait(MPI_Win win)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_RMA_FUNC_EXIT(MPID_STATE_MPI_WIN_WAIT);
+ MPIR_FUNC_TERSE_RMA_EXIT(MPID_STATE_MPI_WIN_WAIT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/rma/winutil.c b/src/mpi/rma/winutil.c
index 1f4bcd3..326c3cf 100644
--- a/src/mpi/rma/winutil.c
+++ b/src/mpi/rma/winutil.c
@@ -8,12 +8,12 @@
/* FIXME: Move this into wincreate (having a separate file is unneccessary,
and it leads to a false "missing coverage" report) */
-#ifndef MPID_WIN_PREALLOC
-#define MPID_WIN_PREALLOC 8
+#ifndef MPIR_WIN_PREALLOC
+#define MPIR_WIN_PREALLOC 8
#endif
/* Preallocated window objects */
-MPID_Win MPID_Win_direct[MPID_WIN_PREALLOC] = { {0} };
-MPIU_Object_alloc_t MPID_Win_mem = { 0, 0, 0, 0, MPID_WIN,
- sizeof(MPID_Win), MPID_Win_direct,
- MPID_WIN_PREALLOC};
+MPIR_Win MPIR_Win_direct[MPIR_WIN_PREALLOC] = { {0} };
+MPIR_Object_alloc_t MPIR_Win_mem = { 0, 0, 0, 0, MPIR_WIN,
+ sizeof(MPIR_Win), MPIR_Win_direct,
+ MPIR_WIN_PREALLOC};
diff --git a/src/mpi/romio/.codingcheck b/src/mpi/romio/.codingcheck
index 9b52b35..bc77906 100644
--- a/src/mpi/romio/.codingcheck
+++ b/src/mpi/romio/.codingcheck
@@ -28,7 +28,6 @@
'PVFS_.+' => romio,
'MPI_hpux'=> romio,
'FORTRANCAPS'=> romio,
- 'MPILAM'=> romio,
'NEEDS_ADIOCB_T'=> romio,
'AGG_DEBUG'=> romio,
'SOLARIS'=> romio,
diff --git a/src/mpi/romio/Makefile.am b/src/mpi/romio/Makefile.am
index b9d4e25..1abb339 100644
--- a/src/mpi/romio/Makefile.am
+++ b/src/mpi/romio/Makefile.am
@@ -17,11 +17,18 @@ ACLOCAL_AMFLAGS = -I confdb
include_HEADERS =
nodist_include_HEADERS =
noinst_HEADERS =
+AM_CFLAGS = @VISIBILITY_CFLAGS@
AM_CPPFLAGS =
EXTRA_DIST =
SUFFIXES =
doc1_src_txt =
+external_subdirs = @mpl_srcdir@
+external_dist_subdirs = @mpl_dist_srcdir@
+external_includes = @mpl_includedir@
+external_ldflags = @mpl_libdir@
+external_libs = @mpl_lib@
+
# ------------------------------------------------------------------------
# variables to be populated by the included Makefile.mk fragments:
@@ -44,14 +51,14 @@ AM_CPPFLAGS += $(MPI_H_INCLUDE)
# ------------------------------------------------------------------------
# handle the "include" directory here
-AM_CPPFLAGS += -I$(top_builddir)/include -I$(top_srcdir)/include
+AM_CPPFLAGS += -I$(top_builddir)/include -I$(top_srcdir)/include $(external_includes)
# nodist_ b/c these are created by config.status and should not be distributed
nodist_include_HEADERS += include/mpio.h include/mpiof.h
# ------------------------------------------------------------------------
-SUBDIRS =
-DIST_SUBDIRS = test test-internal
+SUBDIRS = $(external_subdirs)
+DIST_SUBDIRS = test test-internal $(external_dist_subdirs)
# for the sake of parallel make and avoiding an excessive number of convenience
# libs, we use a subdir automake fragment strategy
@@ -83,7 +90,12 @@ if BUILD_PROFILING_LIB
noinst_LTLIBRARIES += libpromio.la
libpromio_la_SOURCES = $(romio_mpi_sources)
libpromio_la_CPPFLAGS = $(AM_CPPFLAGS) -DMPIO_BUILD_PROFILING
-endif BUILD_PROFILING_LIB
+libpromio_la_LDFLAGS = $(external_ldflags)
+libpromio_la_LIBADD = $(external_libs)
+else !BUILD_PROFILING_LIB
+libromio_la_LDFLAGS = $(external_ldflags)
+libromio_la_LIBADD = $(external_libs)
+endif !BUILD_PROFILING_LIB
else !BUILD_ROMIO_EMBEDDED
lib_LTLIBRARIES = libromio.la
diff --git a/src/mpi/romio/Makefile.in b/src/mpi/romio/Makefile.in
index 56637e9..94cbaaf 100644
--- a/src/mpi/romio/Makefile.in
+++ b/src/mpi/romio/Makefile.in
@@ -198,32 +198,8 @@ host_triplet = @host@
@BUILD_AD_PE_TRUE at am__append_12 = \
@BUILD_AD_PE_TRUE@ adio/ad_gpfs/pe/ad_pe_aggrs.c
- at BUILD_AD_GRIDFTP_TRUE@am__append_13 = adio/ad_gridftp/ad_gridftp.h
- at BUILD_AD_GRIDFTP_TRUE@am__append_14 = \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_close.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_open.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_read.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_write.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_fcntl.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_flush.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_resize.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_hints.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_delete.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/globus_routines.c \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_features.c
-
- at BUILD_AD_HFS_TRUE@am__append_15 = adio/ad_hfs/ad_hfs.h
- at BUILD_AD_HFS_TRUE@am__append_16 = \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_read.c \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_open.c \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_write.c \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_fcntl.c \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_resize.c \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs.c
-
- at BUILD_AD_LUSTRE_TRUE@am__append_17 = adio/ad_lustre/ad_lustre.h
- at BUILD_AD_LUSTRE_TRUE@am__append_18 = \
+ at BUILD_AD_LUSTRE_TRUE@am__append_13 = adio/ad_lustre/ad_lustre.h
+ at BUILD_AD_LUSTRE_TRUE@am__append_14 = \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre.c \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_open.c \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_rwcontig.c \
@@ -232,8 +208,8 @@ host_triplet = @host@
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_hints.c \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_aggregate.c
- at BUILD_AD_NFS_TRUE@am__append_19 = adio/ad_nfs/ad_nfs.h
- at BUILD_AD_NFS_TRUE@am__append_20 = \
+ at BUILD_AD_NFS_TRUE@am__append_15 = adio/ad_nfs/ad_nfs.h
+ at BUILD_AD_NFS_TRUE@am__append_16 = \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_read.c \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_open.c \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_write.c \
@@ -248,8 +224,8 @@ host_triplet = @host@
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_resize.c \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_features.c
- at BUILD_AD_PANFS_TRUE@am__append_21 = adio/ad_panfs/ad_panfs.h
- at BUILD_AD_PANFS_TRUE@am__append_22 = \
+ at BUILD_AD_PANFS_TRUE@am__append_17 = adio/ad_panfs/ad_panfs.h
+ at BUILD_AD_PANFS_TRUE@am__append_18 = \
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs.c \
@BUILD_AD_PANFS_TRUE@ $(panfs_open) \
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs_hints.c \
@@ -257,47 +233,11 @@ host_triplet = @host@
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs_resize.c \
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs_write.c
- at BUILD_AD_PFS_TRUE@am__append_23 = adio/ad_pfs/ad_pfs.h
- at BUILD_AD_PFS_TRUE@am__append_24 = \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_read.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_open.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_write.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_done.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_fcntl.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_iread.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_iwrite.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_wait.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_flush.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_hints.c \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs.c
-
- at BUILD_AD_PIOFS_TRUE@am__append_25 = adio/ad_piofs/ad_piofs.h
- at BUILD_AD_PIOFS_TRUE@am__append_26 = \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_read.c \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_open.c \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_write.c \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_fcntl.c \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_hints.c \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs.c
-
- at BUILD_AD_PVFS_TRUE@am__append_27 = adio/ad_pvfs/ad_pvfs.h
- at BUILD_AD_PVFS_TRUE@am__append_28 = \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_close.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_read.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_open.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_write.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_fcntl.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_flush.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_resize.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_hints.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_delete.c \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs.c
-
- at BUILD_AD_PVFS2_TRUE@am__append_29 = adio/ad_pvfs2/ad_pvfs2.h \
+ at BUILD_AD_PVFS2_TRUE@am__append_19 = adio/ad_pvfs2/ad_pvfs2.h \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_io.h \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_common.h
- at BUILD_AD_PVFS2_TRUE@am__append_30 = \
+ at BUILD_AD_PVFS2_TRUE@am__append_20 = \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_close.c \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_read.c \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_open.c \
@@ -316,15 +256,8 @@ host_triplet = @host@
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_write_list_classic.c \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_features.c
- at BUILD_AD_SFS_TRUE@am__append_31 = adio/ad_sfs/ad_sfs.h
- at BUILD_AD_SFS_TRUE@am__append_32 = \
- at BUILD_AD_SFS_TRUE@ adio/ad_sfs/ad_sfs_open.c \
- at BUILD_AD_SFS_TRUE@ adio/ad_sfs/ad_sfs_fcntl.c \
- at BUILD_AD_SFS_TRUE@ adio/ad_sfs/ad_sfs_flush.c \
- at BUILD_AD_SFS_TRUE@ adio/ad_sfs/ad_sfs.c
-
- at BUILD_AD_TESTFS_TRUE@am__append_33 = adio/ad_testfs/ad_testfs.h
- at BUILD_AD_TESTFS_TRUE@am__append_34 = \
+ at BUILD_AD_TESTFS_TRUE@am__append_21 = adio/ad_testfs/ad_testfs.h
+ at BUILD_AD_TESTFS_TRUE@am__append_22 = \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_close.c \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_read.c \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_rdcoll.c \
@@ -343,13 +276,13 @@ host_triplet = @host@
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_delete.c \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs.c
- at BUILD_AD_UFS_TRUE@am__append_35 = adio/ad_ufs/ad_ufs.h
- at BUILD_AD_UFS_TRUE@am__append_36 = \
+ at BUILD_AD_UFS_TRUE@am__append_23 = adio/ad_ufs/ad_ufs.h
+ at BUILD_AD_UFS_TRUE@am__append_24 = \
@BUILD_AD_UFS_TRUE@ adio/ad_ufs/ad_ufs.c \
@BUILD_AD_UFS_TRUE@ adio/ad_ufs/ad_ufs_open.c
- at BUILD_AD_XFS_TRUE@am__append_37 = adio/ad_xfs/ad_xfs.h
- at BUILD_AD_XFS_TRUE@am__append_38 = \
+ at BUILD_AD_XFS_TRUE@am__append_25 = adio/ad_xfs/ad_xfs.h
+ at BUILD_AD_XFS_TRUE@am__append_26 = \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs.c \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_fcntl.c \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_hints.c \
@@ -358,36 +291,23 @@ host_triplet = @host@
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_resize.c \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_write.c
- at BUILD_AD_ZOIDFS_TRUE@am__append_39 = adio/ad_zoidfs/ad_zoidfs.h adio/ad_zoidfs/ad_zoidfs_common.h
- at BUILD_AD_ZOIDFS_TRUE@am__append_40 = \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_close.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_common.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_delete.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_fcntl.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_flush.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_io.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_open.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_resize.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_features.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_read_list.c \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_write_list.c
-
# The current best strategy for now is to build the PMPI symbols as a separate
# convenience lib to permit adding the special "-D..." argument for all objects.
# MPICH will then link in both convenience library into libmpi, since it
# won't work very well the other way around.
- at BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at am__append_41 = libpromio.la
+ at BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at am__append_27 = libpromio.la
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_check_visibility.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
$(top_srcdir)/confdb/aclocal_f77.m4 \
$(top_srcdir)/confdb/aclocal_fc.m4 \
$(top_srcdir)/confdb/aclocal_make.m4 \
$(top_srcdir)/confdb/aclocal_romio.m4 \
$(top_srcdir)/confdb/aclocal_runlog.m4 \
+ $(top_srcdir)/confdb/aclocal_subcfg.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
$(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
@@ -439,7 +359,8 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \
"$(DESTDIR)$(includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
-libpromio_la_LIBADD =
+am__DEPENDENCIES_1 =
+ at BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at libpromio_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__libpromio_la_SOURCES_DIST = mpi-io/fortran/closef.c \
mpi-io/fortran/deletef.c mpi-io/fortran/fsyncf.c \
mpi-io/fortran/get_amodef.c mpi-io/fortran/get_atomf.c \
@@ -601,8 +522,11 @@ AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+libpromio_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libpromio_la_LDFLAGS) $(LDFLAGS) -o $@
@BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at am_libpromio_la_rpath =
-libromio_la_LIBADD =
+ at BUILD_PROFILING_LIB_FALSE@@BUILD_ROMIO_EMBEDDED_TRUE at libromio_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__libromio_la_SOURCES_DIST = mpi-io/fortran/closef.c \
mpi-io/fortran/deletef.c mpi-io/fortran/fsyncf.c \
mpi-io/fortran/get_amodef.c mpi-io/fortran/get_atomf.c \
@@ -654,7 +578,8 @@ am__libromio_la_SOURCES_DIST = mpi-io/fortran/closef.c \
mpi-io/glue/default/mpio_err.c mpi-io/glue/mpich/mpio_file.c \
mpi-io/glue/mpich/mpio_err.c mpi-io/glue/large_count.c \
mpi-io/mpich_fileutil.c mpi-io/mpir-mpioinit.c \
- mpi-io/mpiu_greq.c mpi-io/mpiu_external32.c mpi-io/ioreq_c2f.c \
+ mpi-io/mpiu_greq.c mpi-io/mpiu_external32.c \
+ mpi-io/mpir_cst_filesys.c mpi-io/ioreq_c2f.c \
mpi-io/ioreq_f2c.c mpi-io/iotest.c mpi-io/iotestall.c \
mpi-io/iotestany.c mpi-io/iotestsome.c mpi-io/iowait.c \
mpi-io/iowaitall.c mpi-io/iowaitany.c mpi-io/iowaitsome.c \
@@ -664,20 +589,6 @@ am__libromio_la_SOURCES_DIST = mpi-io/fortran/closef.c \
adio/ad_gpfs/ad_gpfs_hints.c adio/ad_gpfs/ad_gpfs_rdcoll.c \
adio/ad_gpfs/ad_gpfs_wrcoll.c adio/ad_gpfs/bg/ad_bg_aggrs.c \
adio/ad_gpfs/bg/ad_bg_pset.c adio/ad_gpfs/pe/ad_pe_aggrs.c \
- adio/ad_gridftp/ad_gridftp_close.c \
- adio/ad_gridftp/ad_gridftp_open.c \
- adio/ad_gridftp/ad_gridftp_read.c \
- adio/ad_gridftp/ad_gridftp_write.c \
- adio/ad_gridftp/ad_gridftp_fcntl.c \
- adio/ad_gridftp/ad_gridftp_flush.c \
- adio/ad_gridftp/ad_gridftp_resize.c \
- adio/ad_gridftp/ad_gridftp_hints.c \
- adio/ad_gridftp/ad_gridftp_delete.c \
- adio/ad_gridftp/ad_gridftp.c adio/ad_gridftp/globus_routines.c \
- adio/ad_gridftp/ad_gridftp_features.c \
- adio/ad_hfs/ad_hfs_read.c adio/ad_hfs/ad_hfs_open.c \
- adio/ad_hfs/ad_hfs_write.c adio/ad_hfs/ad_hfs_fcntl.c \
- adio/ad_hfs/ad_hfs_resize.c adio/ad_hfs/ad_hfs.c \
adio/ad_lustre/ad_lustre.c adio/ad_lustre/ad_lustre_open.c \
adio/ad_lustre/ad_lustre_rwcontig.c \
adio/ad_lustre/ad_lustre_wrcoll.c \
@@ -693,33 +604,19 @@ am__libromio_la_SOURCES_DIST = mpi-io/fortran/closef.c \
adio/ad_panfs/ad_panfs.c adio/ad_panfs/ad_panfs_open.c \
adio/ad_panfs/ad_panfs_open6.c adio/ad_panfs/ad_panfs_hints.c \
adio/ad_panfs/ad_panfs_read.c adio/ad_panfs/ad_panfs_resize.c \
- adio/ad_panfs/ad_panfs_write.c adio/ad_pfs/ad_pfs_read.c \
- adio/ad_pfs/ad_pfs_open.c adio/ad_pfs/ad_pfs_write.c \
- adio/ad_pfs/ad_pfs_done.c adio/ad_pfs/ad_pfs_fcntl.c \
- adio/ad_pfs/ad_pfs_iread.c adio/ad_pfs/ad_pfs_iwrite.c \
- adio/ad_pfs/ad_pfs_wait.c adio/ad_pfs/ad_pfs_flush.c \
- adio/ad_pfs/ad_pfs_hints.c adio/ad_pfs/ad_pfs.c \
- adio/ad_piofs/ad_piofs_read.c adio/ad_piofs/ad_piofs_open.c \
- adio/ad_piofs/ad_piofs_write.c adio/ad_piofs/ad_piofs_fcntl.c \
- adio/ad_piofs/ad_piofs_hints.c adio/ad_piofs/ad_piofs.c \
- adio/ad_pvfs/ad_pvfs_close.c adio/ad_pvfs/ad_pvfs_read.c \
- adio/ad_pvfs/ad_pvfs_open.c adio/ad_pvfs/ad_pvfs_write.c \
- adio/ad_pvfs/ad_pvfs_fcntl.c adio/ad_pvfs/ad_pvfs_flush.c \
- adio/ad_pvfs/ad_pvfs_resize.c adio/ad_pvfs/ad_pvfs_hints.c \
- adio/ad_pvfs/ad_pvfs_delete.c adio/ad_pvfs/ad_pvfs.c \
- adio/ad_pvfs2/ad_pvfs2_close.c adio/ad_pvfs2/ad_pvfs2_read.c \
- adio/ad_pvfs2/ad_pvfs2_open.c adio/ad_pvfs2/ad_pvfs2_write.c \
- adio/ad_pvfs2/ad_pvfs2_fcntl.c adio/ad_pvfs2/ad_pvfs2_flush.c \
- adio/ad_pvfs2/ad_pvfs2_resize.c adio/ad_pvfs2/ad_pvfs2_hints.c \
- adio/ad_pvfs2/ad_pvfs2_delete.c adio/ad_pvfs2/ad_pvfs2.c \
- adio/ad_pvfs2/ad_pvfs2_common.c adio/ad_pvfs2/ad_pvfs2_aio.c \
+ adio/ad_panfs/ad_panfs_write.c adio/ad_pvfs2/ad_pvfs2_close.c \
+ adio/ad_pvfs2/ad_pvfs2_read.c adio/ad_pvfs2/ad_pvfs2_open.c \
+ adio/ad_pvfs2/ad_pvfs2_write.c adio/ad_pvfs2/ad_pvfs2_fcntl.c \
+ adio/ad_pvfs2/ad_pvfs2_flush.c adio/ad_pvfs2/ad_pvfs2_resize.c \
+ adio/ad_pvfs2/ad_pvfs2_hints.c adio/ad_pvfs2/ad_pvfs2_delete.c \
+ adio/ad_pvfs2/ad_pvfs2.c adio/ad_pvfs2/ad_pvfs2_common.c \
+ adio/ad_pvfs2/ad_pvfs2_aio.c \
adio/ad_pvfs2/ad_pvfs2_read_list_classic.c \
adio/ad_pvfs2/ad_pvfs2_io_list.c \
adio/ad_pvfs2/ad_pvfs2_io_dtype.c \
adio/ad_pvfs2/ad_pvfs2_write_list_classic.c \
- adio/ad_pvfs2/ad_pvfs2_features.c adio/ad_sfs/ad_sfs_open.c \
- adio/ad_sfs/ad_sfs_fcntl.c adio/ad_sfs/ad_sfs_flush.c \
- adio/ad_sfs/ad_sfs.c adio/ad_testfs/ad_testfs_close.c \
+ adio/ad_pvfs2/ad_pvfs2_features.c \
+ adio/ad_testfs/ad_testfs_close.c \
adio/ad_testfs/ad_testfs_read.c \
adio/ad_testfs/ad_testfs_rdcoll.c \
adio/ad_testfs/ad_testfs_wrcoll.c \
@@ -739,19 +636,9 @@ am__libromio_la_SOURCES_DIST = mpi-io/fortran/closef.c \
adio/ad_xfs/ad_xfs.c adio/ad_xfs/ad_xfs_fcntl.c \
adio/ad_xfs/ad_xfs_hints.c adio/ad_xfs/ad_xfs_open.c \
adio/ad_xfs/ad_xfs_read.c adio/ad_xfs/ad_xfs_resize.c \
- adio/ad_xfs/ad_xfs_write.c adio/ad_zoidfs/ad_zoidfs.c \
- adio/ad_zoidfs/ad_zoidfs_close.c \
- adio/ad_zoidfs/ad_zoidfs_common.c \
- adio/ad_zoidfs/ad_zoidfs_delete.c \
- adio/ad_zoidfs/ad_zoidfs_fcntl.c \
- adio/ad_zoidfs/ad_zoidfs_flush.c adio/ad_zoidfs/ad_zoidfs_io.c \
- adio/ad_zoidfs/ad_zoidfs_open.c \
- adio/ad_zoidfs/ad_zoidfs_resize.c \
- adio/ad_zoidfs/ad_zoidfs_features.c \
- adio/ad_zoidfs/ad_zoidfs_read_list.c \
- adio/ad_zoidfs/ad_zoidfs_write_list.c \
- adio/common/ad_aggregate.c adio/common/ad_aggregate_new.c \
- adio/common/ad_close.c adio/common/ad_coll_build_req_new.c \
+ adio/ad_xfs/ad_xfs_write.c adio/common/ad_aggregate.c \
+ adio/common/ad_aggregate_new.c adio/common/ad_close.c \
+ adio/common/ad_coll_build_req_new.c \
adio/common/ad_coll_exch_new.c adio/common/ad_darray.c \
adio/common/ad_delete.c adio/common/ad_done.c \
adio/common/ad_done_fake.c adio/common/ad_end.c \
@@ -783,7 +670,8 @@ am__libromio_la_SOURCES_DIST = mpi-io/fortran/closef.c \
adio/common/strfns.c adio/common/system_hints.c \
adio/common/hint_fns.c adio/common/ad_threaded_io.c \
adio/common/p2p_aggregation.c \
- adio/common/onesided_aggregation.c adio/common/utils.c
+ adio/common/onesided_aggregation.c adio/common/ad_tuning.c \
+ adio/common/utils.c
@BUILD_F77_BINDINGS_TRUE at am__objects_3 = mpi-io/fortran/closef.lo \
@BUILD_F77_BINDINGS_TRUE@ mpi-io/fortran/deletef.lo \
@BUILD_F77_BINDINGS_TRUE@ mpi-io/fortran/fsyncf.lo \
@@ -884,33 +772,14 @@ am__objects_8 = mpi-io/ioreq_c2f.lo mpi-io/ioreq_f2c.lo \
@BUILD_AD_BG_TRUE at am__objects_12 = adio/ad_gpfs/bg/ad_bg_aggrs.lo \
@BUILD_AD_BG_TRUE@ adio/ad_gpfs/bg/ad_bg_pset.lo
@BUILD_AD_PE_TRUE at am__objects_13 = adio/ad_gpfs/pe/ad_pe_aggrs.lo
- at BUILD_AD_GRIDFTP_TRUE@am__objects_14 = \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_close.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_open.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_read.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_write.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_fcntl.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_flush.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_resize.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_hints.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_delete.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/globus_routines.lo \
- at BUILD_AD_GRIDFTP_TRUE@ adio/ad_gridftp/ad_gridftp_features.lo
- at BUILD_AD_HFS_TRUE@am__objects_15 = adio/ad_hfs/ad_hfs_read.lo \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_open.lo \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_write.lo \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_fcntl.lo \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs_resize.lo \
- at BUILD_AD_HFS_TRUE@ adio/ad_hfs/ad_hfs.lo
- at BUILD_AD_LUSTRE_TRUE@am__objects_16 = adio/ad_lustre/ad_lustre.lo \
+ at BUILD_AD_LUSTRE_TRUE@am__objects_14 = adio/ad_lustre/ad_lustre.lo \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_open.lo \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_rwcontig.lo \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_wrcoll.lo \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_wrstr.lo \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_hints.lo \
@BUILD_AD_LUSTRE_TRUE@ adio/ad_lustre/ad_lustre_aggregate.lo
- at BUILD_AD_NFS_TRUE@am__objects_17 = adio/ad_nfs/ad_nfs_read.lo \
+ at BUILD_AD_NFS_TRUE@am__objects_15 = adio/ad_nfs/ad_nfs_read.lo \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_open.lo \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_write.lo \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_done.lo \
@@ -923,44 +792,17 @@ am__objects_8 = mpi-io/ioreq_c2f.lo mpi-io/ioreq_f2c.lo \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs.lo \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_resize.lo \
@BUILD_AD_NFS_TRUE@ adio/ad_nfs/ad_nfs_features.lo
- at BUILD_PANFS_OPEN6_FALSE@am__objects_18 = \
+ at BUILD_PANFS_OPEN6_FALSE@am__objects_16 = \
@BUILD_PANFS_OPEN6_FALSE@ adio/ad_panfs/ad_panfs_open.lo
- at BUILD_PANFS_OPEN6_TRUE@am__objects_18 = \
+ at BUILD_PANFS_OPEN6_TRUE@am__objects_16 = \
@BUILD_PANFS_OPEN6_TRUE@ adio/ad_panfs/ad_panfs_open6.lo
- at BUILD_AD_PANFS_TRUE@am__objects_19 = adio/ad_panfs/ad_panfs.lo \
- at BUILD_AD_PANFS_TRUE@ $(am__objects_18) \
+ at BUILD_AD_PANFS_TRUE@am__objects_17 = adio/ad_panfs/ad_panfs.lo \
+ at BUILD_AD_PANFS_TRUE@ $(am__objects_16) \
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs_hints.lo \
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs_read.lo \
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs_resize.lo \
@BUILD_AD_PANFS_TRUE@ adio/ad_panfs/ad_panfs_write.lo
- at BUILD_AD_PFS_TRUE@am__objects_20 = adio/ad_pfs/ad_pfs_read.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_open.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_write.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_done.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_fcntl.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_iread.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_iwrite.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_wait.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_flush.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs_hints.lo \
- at BUILD_AD_PFS_TRUE@ adio/ad_pfs/ad_pfs.lo
- at BUILD_AD_PIOFS_TRUE@am__objects_21 = adio/ad_piofs/ad_piofs_read.lo \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_open.lo \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_write.lo \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_fcntl.lo \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs_hints.lo \
- at BUILD_AD_PIOFS_TRUE@ adio/ad_piofs/ad_piofs.lo
- at BUILD_AD_PVFS_TRUE@am__objects_22 = adio/ad_pvfs/ad_pvfs_close.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_read.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_open.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_write.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_fcntl.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_flush.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_resize.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_hints.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs_delete.lo \
- at BUILD_AD_PVFS_TRUE@ adio/ad_pvfs/ad_pvfs.lo
- at BUILD_AD_PVFS2_TRUE@am__objects_23 = adio/ad_pvfs2/ad_pvfs2_close.lo \
+ at BUILD_AD_PVFS2_TRUE@am__objects_18 = adio/ad_pvfs2/ad_pvfs2_close.lo \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_read.lo \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_open.lo \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_write.lo \
@@ -977,11 +819,7 @@ am__objects_8 = mpi-io/ioreq_c2f.lo mpi-io/ioreq_f2c.lo \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_io_dtype.lo \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_write_list_classic.lo \
@BUILD_AD_PVFS2_TRUE@ adio/ad_pvfs2/ad_pvfs2_features.lo
- at BUILD_AD_SFS_TRUE@am__objects_24 = adio/ad_sfs/ad_sfs_open.lo \
- at BUILD_AD_SFS_TRUE@ adio/ad_sfs/ad_sfs_fcntl.lo \
- at BUILD_AD_SFS_TRUE@ adio/ad_sfs/ad_sfs_flush.lo \
- at BUILD_AD_SFS_TRUE@ adio/ad_sfs/ad_sfs.lo
- at BUILD_AD_TESTFS_TRUE@am__objects_25 = \
+ at BUILD_AD_TESTFS_TRUE@am__objects_19 = \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_close.lo \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_read.lo \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_rdcoll.lo \
@@ -999,38 +837,25 @@ am__objects_8 = mpi-io/ioreq_c2f.lo mpi-io/ioreq_f2c.lo \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_hints.lo \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs_delete.lo \
@BUILD_AD_TESTFS_TRUE@ adio/ad_testfs/ad_testfs.lo
- at BUILD_AD_UFS_TRUE@am__objects_26 = adio/ad_ufs/ad_ufs.lo \
+ at BUILD_AD_UFS_TRUE@am__objects_20 = adio/ad_ufs/ad_ufs.lo \
@BUILD_AD_UFS_TRUE@ adio/ad_ufs/ad_ufs_open.lo
- at BUILD_AD_XFS_TRUE@am__objects_27 = adio/ad_xfs/ad_xfs.lo \
+ at BUILD_AD_XFS_TRUE@am__objects_21 = adio/ad_xfs/ad_xfs.lo \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_fcntl.lo \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_hints.lo \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_open.lo \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_read.lo \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_resize.lo \
@BUILD_AD_XFS_TRUE@ adio/ad_xfs/ad_xfs_write.lo
- at BUILD_AD_ZOIDFS_TRUE@am__objects_28 = adio/ad_zoidfs/ad_zoidfs.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_close.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_common.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_delete.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_fcntl.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_flush.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_io.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_open.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_resize.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_features.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_read_list.lo \
- at BUILD_AD_ZOIDFS_TRUE@ adio/ad_zoidfs/ad_zoidfs_write_list.lo
-am__objects_29 = $(am__objects_5) $(am__objects_6) $(am__objects_7) \
+am__objects_22 = $(am__objects_5) $(am__objects_6) $(am__objects_7) \
mpi-io/mpich_fileutil.lo mpi-io/mpir-mpioinit.lo \
- mpi-io/mpiu_greq.lo mpi-io/mpiu_external32.lo $(am__objects_9) \
- $(am__objects_10) $(am__objects_11) $(am__objects_12) \
- $(am__objects_13) $(am__objects_14) $(am__objects_15) \
- $(am__objects_16) $(am__objects_17) $(am__objects_19) \
- $(am__objects_20) $(am__objects_21) $(am__objects_22) \
- $(am__objects_23) $(am__objects_24) $(am__objects_25) \
- $(am__objects_26) $(am__objects_27) $(am__objects_28) \
- adio/common/ad_aggregate.lo adio/common/ad_aggregate_new.lo \
- adio/common/ad_close.lo adio/common/ad_coll_build_req_new.lo \
+ mpi-io/mpiu_greq.lo mpi-io/mpiu_external32.lo \
+ mpi-io/mpir_cst_filesys.lo $(am__objects_9) $(am__objects_10) \
+ $(am__objects_11) $(am__objects_12) $(am__objects_13) \
+ $(am__objects_14) $(am__objects_15) $(am__objects_17) \
+ $(am__objects_18) $(am__objects_19) $(am__objects_20) \
+ $(am__objects_21) adio/common/ad_aggregate.lo \
+ adio/common/ad_aggregate_new.lo adio/common/ad_close.lo \
+ adio/common/ad_coll_build_req_new.lo \
adio/common/ad_coll_exch_new.lo adio/common/ad_darray.lo \
adio/common/ad_delete.lo adio/common/ad_done.lo \
adio/common/ad_done_fake.lo adio/common/ad_end.lo \
@@ -1062,14 +887,18 @@ am__objects_29 = $(am__objects_5) $(am__objects_6) $(am__objects_7) \
adio/common/strfns.lo adio/common/system_hints.lo \
adio/common/hint_fns.lo adio/common/ad_threaded_io.lo \
adio/common/p2p_aggregation.lo \
- adio/common/onesided_aggregation.lo adio/common/utils.lo
-am__objects_30 =
+ adio/common/onesided_aggregation.lo adio/common/ad_tuning.lo \
+ adio/common/utils.lo
+am__objects_23 =
@BUILD_ROMIO_EMBEDDED_FALSE at am_libromio_la_OBJECTS = $(am__objects_4) \
- at BUILD_ROMIO_EMBEDDED_FALSE@ $(am__objects_29) \
- at BUILD_ROMIO_EMBEDDED_FALSE@ $(am__objects_30)
+ at BUILD_ROMIO_EMBEDDED_FALSE@ $(am__objects_22) \
+ at BUILD_ROMIO_EMBEDDED_FALSE@ $(am__objects_23)
@BUILD_ROMIO_EMBEDDED_TRUE at am_libromio_la_OBJECTS = $(am__objects_4) \
- at BUILD_ROMIO_EMBEDDED_TRUE@ $(am__objects_29) $(am__objects_30)
+ at BUILD_ROMIO_EMBEDDED_TRUE@ $(am__objects_22) $(am__objects_23)
libromio_la_OBJECTS = $(am_libromio_la_OBJECTS)
+libromio_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libromio_la_LDFLAGS) $(LDFLAGS) -o $@
@BUILD_ROMIO_EMBEDDED_FALSE at am_libromio_la_rpath = -rpath $(libdir)
@BUILD_ROMIO_EMBEDDED_TRUE at am_libromio_la_rpath =
AM_V_P = $(am__v_P_ at AM_V@)
@@ -1133,15 +962,11 @@ am__noinst_HEADERS_DIST = mpi-io/mpioimpl.h mpi-io/mpioprof.h \
adio/ad_gpfs/ad_gpfs_aggrs.h adio/ad_gpfs/ad_gpfs.h \
adio/ad_gpfs/ad_gpfs_tuning.h adio/ad_gpfs/bg/ad_bg_aggrs.h \
adio/ad_gpfs/bg/ad_bg_pset.h adio/ad_gpfs/pe/ad_pe_aggrs.h \
- adio/ad_gridftp/ad_gridftp.h adio/ad_hfs/ad_hfs.h \
adio/ad_lustre/ad_lustre.h adio/ad_nfs/ad_nfs.h \
- adio/ad_panfs/ad_panfs.h adio/ad_pfs/ad_pfs.h \
- adio/ad_piofs/ad_piofs.h adio/ad_pvfs/ad_pvfs.h \
- adio/ad_pvfs2/ad_pvfs2.h adio/ad_pvfs2/ad_pvfs2_io.h \
- adio/ad_pvfs2/ad_pvfs2_common.h adio/ad_sfs/ad_sfs.h \
+ adio/ad_panfs/ad_panfs.h adio/ad_pvfs2/ad_pvfs2.h \
+ adio/ad_pvfs2/ad_pvfs2_io.h adio/ad_pvfs2/ad_pvfs2_common.h \
adio/ad_testfs/ad_testfs.h adio/ad_ufs/ad_ufs.h \
- adio/ad_xfs/ad_xfs.h adio/ad_zoidfs/ad_zoidfs.h \
- adio/ad_zoidfs/ad_zoidfs_common.h
+ adio/ad_xfs/ad_xfs.h
HEADERS = $(include_HEADERS) $(nodist_include_HEADERS) \
$(noinst_HEADERS)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
@@ -1177,20 +1002,13 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/adio/Makefile.mk \
$(top_srcdir)/adio/ad_gpfs/Makefile.mk \
$(top_srcdir)/adio/ad_gpfs/bg/Makefile.mk \
$(top_srcdir)/adio/ad_gpfs/pe/Makefile.mk \
- $(top_srcdir)/adio/ad_gridftp/Makefile.mk \
- $(top_srcdir)/adio/ad_hfs/Makefile.mk \
$(top_srcdir)/adio/ad_lustre/Makefile.mk \
$(top_srcdir)/adio/ad_nfs/Makefile.mk \
$(top_srcdir)/adio/ad_panfs/Makefile.mk \
- $(top_srcdir)/adio/ad_pfs/Makefile.mk \
- $(top_srcdir)/adio/ad_piofs/Makefile.mk \
- $(top_srcdir)/adio/ad_pvfs/Makefile.mk \
$(top_srcdir)/adio/ad_pvfs2/Makefile.mk \
- $(top_srcdir)/adio/ad_sfs/Makefile.mk \
$(top_srcdir)/adio/ad_testfs/Makefile.mk \
$(top_srcdir)/adio/ad_ufs/Makefile.mk \
$(top_srcdir)/adio/ad_xfs/Makefile.mk \
- $(top_srcdir)/adio/ad_zoidfs/Makefile.mk \
$(top_srcdir)/adio/common/Makefile.mk \
$(top_srcdir)/adio/include/romioconf.h.in \
$(top_srcdir)/confdb/ar-lib $(top_srcdir)/confdb/compile \
@@ -1353,6 +1171,7 @@ MPI_LIB = @MPI_LIB@
MPI_OFFSET_KIND1 = @MPI_OFFSET_KIND1@
MPI_OFFSET_KIND2 = @MPI_OFFSET_KIND2@
MPI_OFFSET_TYPE = @MPI_OFFSET_TYPE@
+MPLLIBNAME = @MPLLIBNAME@
NEEDS_MPI_FINT = @NEEDS_MPI_FINT@
NM = @NM@
NMEDIT = @NMEDIT@
@@ -1391,6 +1210,7 @@ TEST_LIBNAME = @TEST_LIBNAME@
USER_CFLAGS = @USER_CFLAGS@
USER_FFLAGS = @USER_FFLAGS@
VERSION = @VERSION@
+VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
WITHIN_KNOWN_MPI_IMPL = @WITHIN_KNOWN_MPI_IMPL@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
@@ -1437,11 +1257,17 @@ master_top_builddir = @master_top_builddir@
master_top_srcdir = @master_top_srcdir@
master_topbuild_dir = @master_topbuild_dir@
mkdir_p = @mkdir_p@
+mpl_dist_srcdir = @mpl_dist_srcdir@
+mpl_includedir = @mpl_includedir@
+mpl_lib = @mpl_lib@
+mpl_libdir = @mpl_libdir@
+mpl_srcdir = @mpl_srcdir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -1470,9 +1296,8 @@ noinst_HEADERS = mpi-io/mpioimpl.h mpi-io/mpioprof.h \
$(am__append_7) $(am__append_9) $(am__append_11) \
$(am__append_13) $(am__append_15) $(am__append_17) \
$(am__append_19) $(am__append_21) $(am__append_23) \
- $(am__append_25) $(am__append_27) $(am__append_29) \
- $(am__append_31) $(am__append_33) $(am__append_35) \
- $(am__append_37) $(am__append_39)
+ $(am__append_25)
+AM_CFLAGS = @VISIBILITY_CFLAGS@
# ------------------------------------------------------------------------
# when building under MPICH we must be able to find mpi.h
@@ -1480,15 +1305,20 @@ noinst_HEADERS = mpi-io/mpioimpl.h mpi-io/mpioprof.h \
# ------------------------------------------------------------------------
# handle the "include" directory here
AM_CPPFLAGS = $(MPI_H_INCLUDE) -I$(top_builddir)/include \
- -I$(top_srcdir)/include -I$(top_builddir)/mpi-io \
- -I$(top_srcdir)/mpi-io -I$(top_builddir)/adio/include \
- -I$(top_srcdir)/adio/include
+ -I$(top_srcdir)/include $(external_includes) \
+ -I$(top_builddir)/mpi-io -I$(top_srcdir)/mpi-io \
+ -I$(top_builddir)/adio/include -I$(top_srcdir)/adio/include
# for the sake of parallel make and avoiding an excessive number of convenience
# libs, we use a subdir automake fragment strategy
EXTRA_DIST = autogen.sh
SUFFIXES = .man-phony .html-phony .man1-phony .html1-phony .txt
doc1_src_txt =
+external_subdirs = @mpl_srcdir@
+external_dist_subdirs = @mpl_dist_srcdir@
+external_includes = @mpl_includedir@
+external_ldflags = @mpl_libdir@
+external_libs = @mpl_lib@
# ------------------------------------------------------------------------
# variables to be populated by the included Makefile.mk fragments:
@@ -1523,15 +1353,14 @@ romio_mpi_sources = $(am__append_4) mpi-io/close.c mpi-io/delete.c \
# non-MPI/PMPI sources that will be included in libromio
romio_other_sources = $(am__append_1) $(am__append_2) $(am__append_3) \
mpi-io/mpich_fileutil.c mpi-io/mpir-mpioinit.c \
- mpi-io/mpiu_greq.c mpi-io/mpiu_external32.c $(am__append_5) \
- $(am__append_6) $(am__append_8) $(am__append_10) \
- $(am__append_12) $(am__append_14) $(am__append_16) \
- $(am__append_18) $(am__append_20) $(am__append_22) \
- $(am__append_24) $(am__append_26) $(am__append_28) \
- $(am__append_30) $(am__append_32) $(am__append_34) \
- $(am__append_36) $(am__append_38) $(am__append_40) \
- adio/common/ad_aggregate.c adio/common/ad_aggregate_new.c \
- adio/common/ad_close.c adio/common/ad_coll_build_req_new.c \
+ mpi-io/mpiu_greq.c mpi-io/mpiu_external32.c \
+ mpi-io/mpir_cst_filesys.c $(am__append_5) $(am__append_6) \
+ $(am__append_8) $(am__append_10) $(am__append_12) \
+ $(am__append_14) $(am__append_16) $(am__append_18) \
+ $(am__append_20) $(am__append_22) $(am__append_24) \
+ $(am__append_26) adio/common/ad_aggregate.c \
+ adio/common/ad_aggregate_new.c adio/common/ad_close.c \
+ adio/common/ad_coll_build_req_new.c \
adio/common/ad_coll_exch_new.c adio/common/ad_darray.c \
adio/common/ad_delete.c adio/common/ad_done.c \
adio/common/ad_done_fake.c adio/common/ad_end.c \
@@ -1563,15 +1392,16 @@ romio_other_sources = $(am__append_1) $(am__append_2) $(am__append_3) \
adio/common/strfns.c adio/common/system_hints.c \
adio/common/hint_fns.c adio/common/ad_threaded_io.c \
adio/common/p2p_aggregation.c \
- adio/common/onesided_aggregation.c adio/common/utils.c
+ adio/common/onesided_aggregation.c adio/common/ad_tuning.c \
+ adio/common/utils.c
# code that may need to be "up" called from the MPI library and/or is
# MPI-implementation-specific in some way
glue_sources =
# ------------------------------------------------------------------------
-SUBDIRS =
-DIST_SUBDIRS = test test-internal
+SUBDIRS = $(external_subdirs)
+DIST_SUBDIRS = test test-internal $(external_dist_subdirs)
# helper variables for conditionally compiled sources
mpio_request_sources = \
@@ -1598,13 +1428,17 @@ mpio_extra_sources = \
# Build a libtool convenience library that the enclosing MPI implementation can
# use by adding it to the right _LIBADD variable.
@BUILD_ROMIO_EMBEDDED_TRUE at noinst_LTLIBRARIES = libromio.la \
- at BUILD_ROMIO_EMBEDDED_TRUE@ $(am__append_41)
+ at BUILD_ROMIO_EMBEDDED_TRUE@ $(am__append_27)
@BUILD_ROMIO_EMBEDDED_FALSE at libromio_la_SOURCES = $(romio_mpi_sources) $(romio_other_sources) $(glue_sources)
@BUILD_ROMIO_EMBEDDED_TRUE at libromio_la_SOURCES = $(romio_mpi_sources) $(romio_other_sources) $(glue_sources)
@BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_FALSE at libpromio_la_SOURCES = $(romio_mpi_sources)
@BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at libpromio_la_SOURCES = $(romio_mpi_sources)
@BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_FALSE at libpromio_la_CPPFLAGS = $(AM_CPPFLAGS) -DMPIO_BUILD_PROFILING
@BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at libpromio_la_CPPFLAGS = $(AM_CPPFLAGS) -DMPIO_BUILD_PROFILING
+ at BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at libpromio_la_LDFLAGS = $(external_ldflags)
+ at BUILD_PROFILING_LIB_TRUE@@BUILD_ROMIO_EMBEDDED_TRUE at libpromio_la_LIBADD = $(external_libs)
+ at BUILD_PROFILING_LIB_FALSE@@BUILD_ROMIO_EMBEDDED_TRUE at libromio_la_LDFLAGS = $(external_ldflags)
+ at BUILD_PROFILING_LIB_FALSE@@BUILD_ROMIO_EMBEDDED_TRUE at libromio_la_LIBADD = $(external_libs)
@BUILD_ROMIO_EMBEDDED_FALSE at lib_LTLIBRARIES = libromio.la
gcov_sources = $(libmpl_la_SOURCES)
@@ -1634,7 +1468,7 @@ all: all-recursive
.SUFFIXES: .man-phony .html-phony .man1-phony .html1-phony .txt .c .lo .o .obj
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/mpi-io/Makefile.mk $(top_srcdir)/mpi-io/glue/Makefile.mk $(top_srcdir)/mpi-io/glue/default/Makefile.mk $(top_srcdir)/mpi-io/glue/mpich/Makefile.mk $(top_srcdir)/mpi-io/fortran/Makefile.mk $(srcdir)/adio/Makefile.mk $(top_srcdir)/adio/ad_gpfs/Makefile.mk $(top_srcdir)/adio/ad_gpfs/bg/Makefile.mk $(top_srcdir)/adio/ad_gpfs/pe/Makefile.mk $(top_srcdir)/adio/ad_gridftp/Makefile.mk $(top_srcdir)/adio/ad_hfs/Makefile [...]
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/mpi-io/Makefile.mk $(top_srcdir)/mpi-io/glue/Makefile.mk $(top_srcdir)/mpi-io/glue/default/Makefile.mk $(top_srcdir)/mpi-io/glue/mpich/Makefile.mk $(top_srcdir)/mpi-io/fortran/Makefile.mk $(srcdir)/adio/Makefile.mk $(top_srcdir)/adio/ad_gpfs/Makefile.mk $(top_srcdir)/adio/ad_gpfs/bg/Makefile.mk $(top_srcdir)/adio/ad_gpfs/pe/Makefile.mk $(top_srcdir)/adio/ad_lustre/Makefile.mk $(top_srcdir)/adio/ad_nfs/Makefile. [...]
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -1656,7 +1490,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
-$(srcdir)/mpi-io/Makefile.mk $(top_srcdir)/mpi-io/glue/Makefile.mk $(top_srcdir)/mpi-io/glue/default/Makefile.mk $(top_srcdir)/mpi-io/glue/mpich/Makefile.mk $(top_srcdir)/mpi-io/fortran/Makefile.mk $(srcdir)/adio/Makefile.mk $(top_srcdir)/adio/ad_gpfs/Makefile.mk $(top_srcdir)/adio/ad_gpfs/bg/Makefile.mk $(top_srcdir)/adio/ad_gpfs/pe/Makefile.mk $(top_srcdir)/adio/ad_gridftp/Makefile.mk $(top_srcdir)/adio/ad_hfs/Makefile.mk $(top_srcdir)/adio/ad_lustre/Makefile.mk $(top_srcdir)/adio/ad_n [...]
+$(srcdir)/mpi-io/Makefile.mk $(top_srcdir)/mpi-io/glue/Makefile.mk $(top_srcdir)/mpi-io/glue/default/Makefile.mk $(top_srcdir)/mpi-io/glue/mpich/Makefile.mk $(top_srcdir)/mpi-io/fortran/Makefile.mk $(srcdir)/adio/Makefile.mk $(top_srcdir)/adio/ad_gpfs/Makefile.mk $(top_srcdir)/adio/ad_gpfs/bg/Makefile.mk $(top_srcdir)/adio/ad_gpfs/pe/Makefile.mk $(top_srcdir)/adio/ad_lustre/Makefile.mk $(top_srcdir)/adio/ad_nfs/Makefile.mk $(top_srcdir)/adio/ad_panfs/Makefile.mk $(top_srcdir)/adio/ad_pvf [...]
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -2031,7 +1865,7 @@ mpi-io/libpromio_la-write_sh.lo: mpi-io/$(am__dirstamp) \
mpi-io/$(DEPDIR)/$(am__dirstamp)
libpromio.la: $(libpromio_la_OBJECTS) $(libpromio_la_DEPENDENCIES) $(EXTRA_libpromio_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(am_libpromio_la_rpath) $(libpromio_la_OBJECTS) $(libpromio_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(libpromio_la_LINK) $(am_libpromio_la_rpath) $(libpromio_la_OBJECTS) $(libpromio_la_LIBADD) $(LIBS)
mpi-io/fortran/closef.lo: mpi-io/fortran/$(am__dirstamp) \
mpi-io/fortran/$(DEPDIR)/$(am__dirstamp)
mpi-io/fortran/deletef.lo: mpi-io/fortran/$(am__dirstamp) \
@@ -2294,6 +2128,8 @@ mpi-io/mpiu_greq.lo: mpi-io/$(am__dirstamp) \
mpi-io/$(DEPDIR)/$(am__dirstamp)
mpi-io/mpiu_external32.lo: mpi-io/$(am__dirstamp) \
mpi-io/$(DEPDIR)/$(am__dirstamp)
+mpi-io/mpir_cst_filesys.lo: mpi-io/$(am__dirstamp) \
+ mpi-io/$(DEPDIR)/$(am__dirstamp)
mpi-io/ioreq_c2f.lo: mpi-io/$(am__dirstamp) \
mpi-io/$(DEPDIR)/$(am__dirstamp)
mpi-io/ioreq_f2c.lo: mpi-io/$(am__dirstamp) \
@@ -2356,55 +2192,6 @@ adio/ad_gpfs/pe/$(DEPDIR)/$(am__dirstamp):
@: > adio/ad_gpfs/pe/$(DEPDIR)/$(am__dirstamp)
adio/ad_gpfs/pe/ad_pe_aggrs.lo: adio/ad_gpfs/pe/$(am__dirstamp) \
adio/ad_gpfs/pe/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_gridftp
- @: > adio/ad_gridftp/$(am__dirstamp)
-adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_gridftp/$(DEPDIR)
- @: > adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_close.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_open.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_read.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_write.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_fcntl.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_flush.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_resize.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_hints.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_delete.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/globus_routines.lo: adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_gridftp/ad_gridftp_features.lo: \
- adio/ad_gridftp/$(am__dirstamp) \
- adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
-adio/ad_hfs/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_hfs
- @: > adio/ad_hfs/$(am__dirstamp)
-adio/ad_hfs/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_hfs/$(DEPDIR)
- @: > adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_hfs/ad_hfs_read.lo: adio/ad_hfs/$(am__dirstamp) \
- adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_hfs/ad_hfs_open.lo: adio/ad_hfs/$(am__dirstamp) \
- adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_hfs/ad_hfs_write.lo: adio/ad_hfs/$(am__dirstamp) \
- adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_hfs/ad_hfs_fcntl.lo: adio/ad_hfs/$(am__dirstamp) \
- adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_hfs/ad_hfs_resize.lo: adio/ad_hfs/$(am__dirstamp) \
- adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_hfs/ad_hfs.lo: adio/ad_hfs/$(am__dirstamp) \
- adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
adio/ad_lustre/$(am__dirstamp):
@$(MKDIR_P) adio/ad_lustre
@: > adio/ad_lustre/$(am__dirstamp)
@@ -2477,78 +2264,6 @@ adio/ad_panfs/ad_panfs_resize.lo: adio/ad_panfs/$(am__dirstamp) \
adio/ad_panfs/$(DEPDIR)/$(am__dirstamp)
adio/ad_panfs/ad_panfs_write.lo: adio/ad_panfs/$(am__dirstamp) \
adio/ad_panfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_pfs
- @: > adio/ad_pfs/$(am__dirstamp)
-adio/ad_pfs/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_pfs/$(DEPDIR)
- @: > adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_read.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_open.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_write.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_done.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_fcntl.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_iread.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_iwrite.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_wait.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_flush.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs_hints.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pfs/ad_pfs.lo: adio/ad_pfs/$(am__dirstamp) \
- adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_piofs/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_piofs
- @: > adio/ad_piofs/$(am__dirstamp)
-adio/ad_piofs/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_piofs/$(DEPDIR)
- @: > adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_piofs/ad_piofs_read.lo: adio/ad_piofs/$(am__dirstamp) \
- adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_piofs/ad_piofs_open.lo: adio/ad_piofs/$(am__dirstamp) \
- adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_piofs/ad_piofs_write.lo: adio/ad_piofs/$(am__dirstamp) \
- adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_piofs/ad_piofs_fcntl.lo: adio/ad_piofs/$(am__dirstamp) \
- adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_piofs/ad_piofs_hints.lo: adio/ad_piofs/$(am__dirstamp) \
- adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_piofs/ad_piofs.lo: adio/ad_piofs/$(am__dirstamp) \
- adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_pvfs
- @: > adio/ad_pvfs/$(am__dirstamp)
-adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_pvfs/$(DEPDIR)
- @: > adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_close.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_read.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_open.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_write.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_fcntl.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_flush.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_resize.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_hints.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs_delete.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_pvfs/ad_pvfs.lo: adio/ad_pvfs/$(am__dirstamp) \
- adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
adio/ad_pvfs2/$(am__dirstamp):
@$(MKDIR_P) adio/ad_pvfs2
@: > adio/ad_pvfs2/$(am__dirstamp)
@@ -2591,20 +2306,6 @@ adio/ad_pvfs2/ad_pvfs2_write_list_classic.lo: \
adio/ad_pvfs2/$(DEPDIR)/$(am__dirstamp)
adio/ad_pvfs2/ad_pvfs2_features.lo: adio/ad_pvfs2/$(am__dirstamp) \
adio/ad_pvfs2/$(DEPDIR)/$(am__dirstamp)
-adio/ad_sfs/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_sfs
- @: > adio/ad_sfs/$(am__dirstamp)
-adio/ad_sfs/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_sfs/$(DEPDIR)
- @: > adio/ad_sfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_sfs/ad_sfs_open.lo: adio/ad_sfs/$(am__dirstamp) \
- adio/ad_sfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_sfs/ad_sfs_fcntl.lo: adio/ad_sfs/$(am__dirstamp) \
- adio/ad_sfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_sfs/ad_sfs_flush.lo: adio/ad_sfs/$(am__dirstamp) \
- adio/ad_sfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_sfs/ad_sfs.lo: adio/ad_sfs/$(am__dirstamp) \
- adio/ad_sfs/$(DEPDIR)/$(am__dirstamp)
adio/ad_testfs/$(am__dirstamp):
@$(MKDIR_P) adio/ad_testfs
@: > adio/ad_testfs/$(am__dirstamp)
@@ -2675,37 +2376,6 @@ adio/ad_xfs/ad_xfs_resize.lo: adio/ad_xfs/$(am__dirstamp) \
adio/ad_xfs/$(DEPDIR)/$(am__dirstamp)
adio/ad_xfs/ad_xfs_write.lo: adio/ad_xfs/$(am__dirstamp) \
adio/ad_xfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_zoidfs
- @: > adio/ad_zoidfs/$(am__dirstamp)
-adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) adio/ad_zoidfs/$(DEPDIR)
- @: > adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_close.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_common.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_delete.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_fcntl.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_flush.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_io.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_open.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_resize.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_features.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_read_list.lo: adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
-adio/ad_zoidfs/ad_zoidfs_write_list.lo: \
- adio/ad_zoidfs/$(am__dirstamp) \
- adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
adio/common/$(am__dirstamp):
@$(MKDIR_P) adio/common
@: > adio/common/$(am__dirstamp)
@@ -2844,11 +2514,13 @@ adio/common/p2p_aggregation.lo: adio/common/$(am__dirstamp) \
adio/common/$(DEPDIR)/$(am__dirstamp)
adio/common/onesided_aggregation.lo: adio/common/$(am__dirstamp) \
adio/common/$(DEPDIR)/$(am__dirstamp)
+adio/common/ad_tuning.lo: adio/common/$(am__dirstamp) \
+ adio/common/$(DEPDIR)/$(am__dirstamp)
adio/common/utils.lo: adio/common/$(am__dirstamp) \
adio/common/$(DEPDIR)/$(am__dirstamp)
libromio.la: $(libromio_la_OBJECTS) $(libromio_la_DEPENDENCIES) $(EXTRA_libromio_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(am_libromio_la_rpath) $(libromio_la_OBJECTS) $(libromio_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(libromio_la_LINK) $(am_libromio_la_rpath) $(libromio_la_OBJECTS) $(libromio_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -2858,34 +2530,20 @@ mostlyclean-compile:
-rm -f adio/ad_gpfs/bg/*.lo
-rm -f adio/ad_gpfs/pe/*.$(OBJEXT)
-rm -f adio/ad_gpfs/pe/*.lo
- -rm -f adio/ad_gridftp/*.$(OBJEXT)
- -rm -f adio/ad_gridftp/*.lo
- -rm -f adio/ad_hfs/*.$(OBJEXT)
- -rm -f adio/ad_hfs/*.lo
-rm -f adio/ad_lustre/*.$(OBJEXT)
-rm -f adio/ad_lustre/*.lo
-rm -f adio/ad_nfs/*.$(OBJEXT)
-rm -f adio/ad_nfs/*.lo
-rm -f adio/ad_panfs/*.$(OBJEXT)
-rm -f adio/ad_panfs/*.lo
- -rm -f adio/ad_pfs/*.$(OBJEXT)
- -rm -f adio/ad_pfs/*.lo
- -rm -f adio/ad_piofs/*.$(OBJEXT)
- -rm -f adio/ad_piofs/*.lo
- -rm -f adio/ad_pvfs/*.$(OBJEXT)
- -rm -f adio/ad_pvfs/*.lo
-rm -f adio/ad_pvfs2/*.$(OBJEXT)
-rm -f adio/ad_pvfs2/*.lo
- -rm -f adio/ad_sfs/*.$(OBJEXT)
- -rm -f adio/ad_sfs/*.lo
-rm -f adio/ad_testfs/*.$(OBJEXT)
-rm -f adio/ad_testfs/*.lo
-rm -f adio/ad_ufs/*.$(OBJEXT)
-rm -f adio/ad_ufs/*.lo
-rm -f adio/ad_xfs/*.$(OBJEXT)
-rm -f adio/ad_xfs/*.lo
- -rm -f adio/ad_zoidfs/*.$(OBJEXT)
- -rm -f adio/ad_zoidfs/*.lo
-rm -f adio/common/*.$(OBJEXT)
-rm -f adio/common/*.lo
-rm -f mpi-io/*.$(OBJEXT)
@@ -2914,24 +2572,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gpfs/bg/$(DEPDIR)/ad_bg_aggrs.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gpfs/bg/$(DEPDIR)/ad_bg_pset.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gpfs/pe/$(DEPDIR)/ad_pe_aggrs.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_close.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_delete.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_fcntl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_features.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_flush.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_hints.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_open.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_read.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_resize.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/ad_gridftp_write.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_gridftp/$(DEPDIR)/globus_routines.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_hfs/$(DEPDIR)/ad_hfs.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_hfs/$(DEPDIR)/ad_hfs_fcntl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_hfs/$(DEPDIR)/ad_hfs_open.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_hfs/$(DEPDIR)/ad_hfs_read.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_hfs/$(DEPDIR)/ad_hfs_resize.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_hfs/$(DEPDIR)/ad_hfs_write.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_lustre/$(DEPDIR)/ad_lustre.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_lustre/$(DEPDIR)/ad_lustre_aggregate.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_lustre/$(DEPDIR)/ad_lustre_hints.Plo at am__quote@
@@ -2959,33 +2599,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_panfs/$(DEPDIR)/ad_panfs_read.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_panfs/$(DEPDIR)/ad_panfs_resize.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_panfs/$(DEPDIR)/ad_panfs_write.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_done.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_fcntl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_flush.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_hints.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_iread.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_iwrite.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_open.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_read.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_wait.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pfs/$(DEPDIR)/ad_pfs_write.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_piofs/$(DEPDIR)/ad_piofs.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_piofs/$(DEPDIR)/ad_piofs_fcntl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_piofs/$(DEPDIR)/ad_piofs_hints.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_piofs/$(DEPDIR)/ad_piofs_open.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_piofs/$(DEPDIR)/ad_piofs_read.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_piofs/$(DEPDIR)/ad_piofs_write.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_close.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_delete.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_fcntl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_flush.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_hints.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_open.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_read.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_resize.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs/$(DEPDIR)/ad_pvfs_write.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs2/$(DEPDIR)/ad_pvfs2.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs2/$(DEPDIR)/ad_pvfs2_aio.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs2/$(DEPDIR)/ad_pvfs2_close.Plo at am__quote@
@@ -3003,10 +2616,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs2/$(DEPDIR)/ad_pvfs2_resize.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs2/$(DEPDIR)/ad_pvfs2_write.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_pvfs2/$(DEPDIR)/ad_pvfs2_write_list_classic.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_sfs/$(DEPDIR)/ad_sfs.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_sfs/$(DEPDIR)/ad_sfs_fcntl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_sfs/$(DEPDIR)/ad_sfs_flush.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_sfs/$(DEPDIR)/ad_sfs_open.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_testfs/$(DEPDIR)/ad_testfs.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_testfs/$(DEPDIR)/ad_testfs_close.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_testfs/$(DEPDIR)/ad_testfs_delete.Plo at am__quote@
@@ -3033,18 +2642,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_xfs/$(DEPDIR)/ad_xfs_read.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_xfs/$(DEPDIR)/ad_xfs_resize.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/ad_xfs/$(DEPDIR)/ad_xfs_write.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_close.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_common.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_delete.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_fcntl.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_features.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_flush.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_io.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_open.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_read_list.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_resize.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at adio/ad_zoidfs/$(DEPDIR)/ad_zoidfs_write_list.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_aggregate.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_aggregate_new.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_close.Plo at am__quote@
@@ -3085,6 +2682,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_set_view.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_subarray.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_threaded_io.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_tuning.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_wait.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_wait_fake.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at adio/common/$(DEPDIR)/ad_write.Plo at am__quote@
@@ -3207,6 +2805,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at mpi-io/$(DEPDIR)/libpromio_la-write_sh.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at mpi-io/$(DEPDIR)/mpich_fileutil.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at mpi-io/$(DEPDIR)/mpir-mpioinit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at mpi-io/$(DEPDIR)/mpir_cst_filesys.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at mpi-io/$(DEPDIR)/mpiu_external32.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at mpi-io/$(DEPDIR)/mpiu_greq.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at mpi-io/$(DEPDIR)/open.Plo at am__quote@
@@ -4181,20 +3780,13 @@ clean-libtool:
-rm -rf adio/ad_gpfs/.libs adio/ad_gpfs/_libs
-rm -rf adio/ad_gpfs/bg/.libs adio/ad_gpfs/bg/_libs
-rm -rf adio/ad_gpfs/pe/.libs adio/ad_gpfs/pe/_libs
- -rm -rf adio/ad_gridftp/.libs adio/ad_gridftp/_libs
- -rm -rf adio/ad_hfs/.libs adio/ad_hfs/_libs
-rm -rf adio/ad_lustre/.libs adio/ad_lustre/_libs
-rm -rf adio/ad_nfs/.libs adio/ad_nfs/_libs
-rm -rf adio/ad_panfs/.libs adio/ad_panfs/_libs
- -rm -rf adio/ad_pfs/.libs adio/ad_pfs/_libs
- -rm -rf adio/ad_piofs/.libs adio/ad_piofs/_libs
- -rm -rf adio/ad_pvfs/.libs adio/ad_pvfs/_libs
-rm -rf adio/ad_pvfs2/.libs adio/ad_pvfs2/_libs
- -rm -rf adio/ad_sfs/.libs adio/ad_sfs/_libs
-rm -rf adio/ad_testfs/.libs adio/ad_testfs/_libs
-rm -rf adio/ad_ufs/.libs adio/ad_ufs/_libs
-rm -rf adio/ad_xfs/.libs adio/ad_xfs/_libs
- -rm -rf adio/ad_zoidfs/.libs adio/ad_zoidfs/_libs
-rm -rf adio/common/.libs adio/common/_libs
-rm -rf mpi-io/.libs mpi-io/_libs
-rm -rf mpi-io/fortran/.libs mpi-io/fortran/_libs
@@ -4581,34 +4173,20 @@ distclean-generic:
-rm -f adio/ad_gpfs/bg/$(am__dirstamp)
-rm -f adio/ad_gpfs/pe/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_gpfs/pe/$(am__dirstamp)
- -rm -f adio/ad_gridftp/$(DEPDIR)/$(am__dirstamp)
- -rm -f adio/ad_gridftp/$(am__dirstamp)
- -rm -f adio/ad_hfs/$(DEPDIR)/$(am__dirstamp)
- -rm -f adio/ad_hfs/$(am__dirstamp)
-rm -f adio/ad_lustre/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_lustre/$(am__dirstamp)
-rm -f adio/ad_nfs/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_nfs/$(am__dirstamp)
-rm -f adio/ad_panfs/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_panfs/$(am__dirstamp)
- -rm -f adio/ad_pfs/$(DEPDIR)/$(am__dirstamp)
- -rm -f adio/ad_pfs/$(am__dirstamp)
- -rm -f adio/ad_piofs/$(DEPDIR)/$(am__dirstamp)
- -rm -f adio/ad_piofs/$(am__dirstamp)
- -rm -f adio/ad_pvfs/$(DEPDIR)/$(am__dirstamp)
- -rm -f adio/ad_pvfs/$(am__dirstamp)
-rm -f adio/ad_pvfs2/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_pvfs2/$(am__dirstamp)
- -rm -f adio/ad_sfs/$(DEPDIR)/$(am__dirstamp)
- -rm -f adio/ad_sfs/$(am__dirstamp)
-rm -f adio/ad_testfs/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_testfs/$(am__dirstamp)
-rm -f adio/ad_ufs/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_ufs/$(am__dirstamp)
-rm -f adio/ad_xfs/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/ad_xfs/$(am__dirstamp)
- -rm -f adio/ad_zoidfs/$(DEPDIR)/$(am__dirstamp)
- -rm -f adio/ad_zoidfs/$(am__dirstamp)
-rm -f adio/common/$(DEPDIR)/$(am__dirstamp)
-rm -f adio/common/$(am__dirstamp)
-rm -f mpi-io/$(DEPDIR)/$(am__dirstamp)
@@ -4632,7 +4210,7 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf adio/ad_gpfs/$(DEPDIR) adio/ad_gpfs/bg/$(DEPDIR) adio/ad_gpfs/pe/$(DEPDIR) adio/ad_gridftp/$(DEPDIR) adio/ad_hfs/$(DEPDIR) adio/ad_lustre/$(DEPDIR) adio/ad_nfs/$(DEPDIR) adio/ad_panfs/$(DEPDIR) adio/ad_pfs/$(DEPDIR) adio/ad_piofs/$(DEPDIR) adio/ad_pvfs/$(DEPDIR) adio/ad_pvfs2/$(DEPDIR) adio/ad_sfs/$(DEPDIR) adio/ad_testfs/$(DEPDIR) adio/ad_ufs/$(DEPDIR) adio/ad_xfs/$(DEPDIR) adio/ad_zoidfs/$(DEPDIR) adio/common/$(DEPDIR) mpi-io/$(DEPDIR) mpi-io/fortran/$(DEPDIR) mpi-io/glue/$(DE [...]
+ -rm -rf adio/ad_gpfs/$(DEPDIR) adio/ad_gpfs/bg/$(DEPDIR) adio/ad_gpfs/pe/$(DEPDIR) adio/ad_lustre/$(DEPDIR) adio/ad_nfs/$(DEPDIR) adio/ad_panfs/$(DEPDIR) adio/ad_pvfs2/$(DEPDIR) adio/ad_testfs/$(DEPDIR) adio/ad_ufs/$(DEPDIR) adio/ad_xfs/$(DEPDIR) adio/common/$(DEPDIR) mpi-io/$(DEPDIR) mpi-io/fortran/$(DEPDIR) mpi-io/glue/$(DEPDIR) mpi-io/glue/default/$(DEPDIR) mpi-io/glue/mpich/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags
@@ -4680,7 +4258,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf adio/ad_gpfs/$(DEPDIR) adio/ad_gpfs/bg/$(DEPDIR) adio/ad_gpfs/pe/$(DEPDIR) adio/ad_gridftp/$(DEPDIR) adio/ad_hfs/$(DEPDIR) adio/ad_lustre/$(DEPDIR) adio/ad_nfs/$(DEPDIR) adio/ad_panfs/$(DEPDIR) adio/ad_pfs/$(DEPDIR) adio/ad_piofs/$(DEPDIR) adio/ad_pvfs/$(DEPDIR) adio/ad_pvfs2/$(DEPDIR) adio/ad_sfs/$(DEPDIR) adio/ad_testfs/$(DEPDIR) adio/ad_ufs/$(DEPDIR) adio/ad_xfs/$(DEPDIR) adio/ad_zoidfs/$(DEPDIR) adio/common/$(DEPDIR) mpi-io/$(DEPDIR) mpi-io/fortran/$(DEPDIR) mpi-io/glue/$(DE [...]
+ -rm -rf adio/ad_gpfs/$(DEPDIR) adio/ad_gpfs/bg/$(DEPDIR) adio/ad_gpfs/pe/$(DEPDIR) adio/ad_lustre/$(DEPDIR) adio/ad_nfs/$(DEPDIR) adio/ad_panfs/$(DEPDIR) adio/ad_pvfs2/$(DEPDIR) adio/ad_testfs/$(DEPDIR) adio/ad_ufs/$(DEPDIR) adio/ad_xfs/$(DEPDIR) adio/common/$(DEPDIR) mpi-io/$(DEPDIR) mpi-io/fortran/$(DEPDIR) mpi-io/glue/$(DEPDIR) mpi-io/glue/default/$(DEPDIR) mpi-io/glue/mpich/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
diff --git a/src/mpi/romio/aclocal.m4 b/src/mpi/romio/aclocal.m4
index 7afc615..d88e94a 100644
--- a/src/mpi/romio/aclocal.m4
+++ b/src/mpi/romio/aclocal.m4
@@ -1247,12 +1247,14 @@ AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([confdb/aclocal_cc.m4])
+m4_include([confdb/aclocal_check_visibility.m4])
m4_include([confdb/aclocal_coverage.m4])
m4_include([confdb/aclocal_f77.m4])
m4_include([confdb/aclocal_fc.m4])
m4_include([confdb/aclocal_make.m4])
m4_include([confdb/aclocal_romio.m4])
m4_include([confdb/aclocal_runlog.m4])
+m4_include([confdb/aclocal_subcfg.m4])
m4_include([confdb/aclocal_util.m4])
m4_include([confdb/libtool.m4])
m4_include([confdb/ltoptions.m4])
diff --git a/src/mpi/romio/adio/Makefile.mk b/src/mpi/romio/adio/Makefile.mk
index 505d518..10c3ec9 100644
--- a/src/mpi/romio/adio/Makefile.mk
+++ b/src/mpi/romio/adio/Makefile.mk
@@ -26,21 +26,14 @@ noinst_HEADERS += \
include $(top_srcdir)/adio/ad_gpfs/Makefile.mk
include $(top_srcdir)/adio/ad_gpfs/bg/Makefile.mk
include $(top_srcdir)/adio/ad_gpfs/pe/Makefile.mk
-include $(top_srcdir)/adio/ad_gridftp/Makefile.mk
-include $(top_srcdir)/adio/ad_hfs/Makefile.mk
include $(top_srcdir)/adio/ad_lustre/Makefile.mk
include $(top_srcdir)/adio/ad_nfs/Makefile.mk
## NTFS builds are handled entirely by the separate Windows build system
##include $(top_srcdir)/adio/ad_ntfs/Makefile.mk
include $(top_srcdir)/adio/ad_panfs/Makefile.mk
-include $(top_srcdir)/adio/ad_pfs/Makefile.mk
-include $(top_srcdir)/adio/ad_piofs/Makefile.mk
-include $(top_srcdir)/adio/ad_pvfs/Makefile.mk
include $(top_srcdir)/adio/ad_pvfs2/Makefile.mk
-include $(top_srcdir)/adio/ad_sfs/Makefile.mk
include $(top_srcdir)/adio/ad_testfs/Makefile.mk
include $(top_srcdir)/adio/ad_ufs/Makefile.mk
include $(top_srcdir)/adio/ad_xfs/Makefile.mk
-include $(top_srcdir)/adio/ad_zoidfs/Makefile.mk
include $(top_srcdir)/adio/common/Makefile.mk
diff --git a/src/mpi/romio/adio/ad_gpfs/.state-cache b/src/mpi/romio/adio/ad_gpfs/.state-cache
index a176ed8..7ac4005 100644
--- a/src/mpi/romio/adio/ad_gpfs/.state-cache
+++ b/src/mpi/romio/adio/ad_gpfs/.state-cache
@@ -1,40 +1,40 @@
<dir>
-<file name="ad_gpfs_flush.c" info="1447123141"/>
-<file name="ad_gpfs_rdcoll.c" info="1447123141"/>
-<file name="ad_gpfs.h" info="1447123141"/>
-<file name="ad_gpfs_tuning.c" info="1447123141"/>
-<file name="ad_gpfs_tuning.h" info="1447123141"/>
-<file name="ad_gpfs_aggrs.c" info="1447123141"/>
-<file name="ad_gpfs_open.c" info="1447123141"/>
-<file name="ad_gpfs.c" info="1447123141"/>
-<file name="ad_gpfs_hints.c" info="1447123141"/>
-<file name="ad_gpfs_close.c" info="1447123141"/>
-<file name="ad_gpfs_wrcoll.c" info="1447123141"/>
-<file name="ad_gpfs_aggrs.h" info="1447123141"/>
+<file name="ad_gpfs_hints.c" info="1478973152"/>
+<file name="ad_gpfs_open.c" info="1478973152"/>
+<file name="ad_gpfs_flush.c" info="1478973152"/>
+<file name="ad_gpfs.h" info="1478973152"/>
+<file name="ad_gpfs_tuning.c" info="1478973152"/>
+<file name="ad_gpfs_wrcoll.c" info="1478973152"/>
+<file name="ad_gpfs_rdcoll.c" info="1478973152"/>
+<file name="ad_gpfs_tuning.h" info="1478973152"/>
+<file name="ad_gpfs_aggrs.c" info="1478973152"/>
+<file name="ad_gpfs_aggrs.h" info="1478973152"/>
+<file name="ad_gpfs_close.c" info="1478973152"/>
+<file name="ad_gpfs.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_gpfs_flush.c">
+<fileinfo name="ad_gpfs_hints.c">
</fileinfo>
-<fileinfo name="ad_gpfs_rdcoll.c">
+<fileinfo name="ad_gpfs_open.c">
+</fileinfo>
+<fileinfo name="ad_gpfs_flush.c">
</fileinfo>
<fileinfo name="ad_gpfs.h">
</fileinfo>
<fileinfo name="ad_gpfs_tuning.c">
</fileinfo>
-<fileinfo name="ad_gpfs_tuning.h">
+<fileinfo name="ad_gpfs_wrcoll.c">
</fileinfo>
-<fileinfo name="ad_gpfs_aggrs.c">
+<fileinfo name="ad_gpfs_rdcoll.c">
</fileinfo>
-<fileinfo name="ad_gpfs_open.c">
+<fileinfo name="ad_gpfs_tuning.h">
</fileinfo>
-<fileinfo name="ad_gpfs.c">
+<fileinfo name="ad_gpfs_aggrs.c">
</fileinfo>
-<fileinfo name="ad_gpfs_hints.c">
+<fileinfo name="ad_gpfs_aggrs.h">
</fileinfo>
<fileinfo name="ad_gpfs_close.c">
</fileinfo>
-<fileinfo name="ad_gpfs_wrcoll.c">
-</fileinfo>
-<fileinfo name="ad_gpfs_aggrs.h">
+<fileinfo name="ad_gpfs.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs.h b/src/mpi/romio/adio/ad_gpfs/ad_gpfs.h
index d64dcae..9f1e0e0 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs.h
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs.h
@@ -67,6 +67,7 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
void ADIOI_GPFS_Flush(ADIO_File fd, int *error_code);
+#include "ad_tuning.h"
#include "ad_gpfs_tuning.h"
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c
index 3eb3d84..c5719c9 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c
@@ -23,7 +23,7 @@
#endif
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define AGG_DEBUG 1
#endif
@@ -223,8 +223,8 @@ void ADIOI_GPFS_Calc_file_domains(ADIO_File fd,
min_st_offset = st_offsets [0];
max_end_offset = end_offsets[0];
for (i=1; i<nprocs; i++) {
- min_st_offset = ADIOI_MIN(min_st_offset, st_offsets[i]);
- max_end_offset = ADIOI_MAX(max_end_offset, end_offsets[i]);
+ min_st_offset = MPL_MIN(min_st_offset, st_offsets[i]);
+ max_end_offset = MPL_MAX(max_end_offset, end_offsets[i]);
}
/* DBG_FPRINTF(stderr, "_calc_file_domains, min_st_offset, max_
@@ -719,9 +719,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
others_req[i].lens =
ADIOI_Malloc(count_others_req_per_proc[i]*sizeof(ADIO_Offset));
- if ( (MPIU_Upint)others_req[i].offsets < (MPIU_Upint)recvBufForOffsets )
+ if ( (uintptr_t)others_req[i].offsets < (uintptr_t)recvBufForOffsets )
recvBufForOffsets = others_req[i].offsets;
- if ( (MPIU_Upint)others_req[i].lens < (MPIU_Upint)recvBufForLens )
+ if ( (uintptr_t)others_req[i].lens < (uintptr_t)recvBufForLens )
recvBufForLens = others_req[i].lens;
others_req[i].mem_ptrs = (MPI_Aint *)
@@ -750,13 +750,13 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
for (i=0; i<nprocs; i++)
{
if ( (my_req[i].count) &&
- ((MPIU_Upint)my_req[i].offsets <= (MPIU_Upint)sendBufForOffsets) )
+ ((uintptr_t)my_req[i].offsets <= (uintptr_t)sendBufForOffsets) )
{
sendBufForOffsets = my_req[i].offsets;
}
if ( (my_req[i].count) &&
- ((MPIU_Upint)my_req[i].lens <= (MPIU_Upint)sendBufForLens) )
+ ((uintptr_t)my_req[i].lens <= (uintptr_t)sendBufForLens) )
{
sendBufForLens = my_req[i].lens;
}
@@ -775,9 +775,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
sdispls[i] = 0;
else
sdispls[i] = (int)
- ( ( (MPIU_Upint)my_req[i].offsets -
- (MPIU_Upint)sendBufForOffsets ) /
- (MPIU_Upint)sizeof(ADIO_Offset) );
+ ( ( (uintptr_t)my_req[i].offsets -
+ (uintptr_t)sendBufForOffsets ) /
+ (uintptr_t)sizeof(ADIO_Offset) );
/* Receive these offsets from process i.*/
rcounts[i] = count_others_req_per_proc[i];
@@ -785,9 +785,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
rdispls[i] = 0;
else
rdispls[i] = (int)
- ( ( (MPIU_Upint)others_req[i].offsets -
- (MPIU_Upint)recvBufForOffsets ) /
- (MPIU_Upint)sizeof(ADIO_Offset) );
+ ( ( (uintptr_t)others_req[i].offsets -
+ (uintptr_t)recvBufForOffsets ) /
+ (uintptr_t)sizeof(ADIO_Offset) );
}
/* Exchange the offsets */
@@ -809,9 +809,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
sdispls[i] = 0;
else
sdispls[i] = (int)
- ( ( (MPIU_Upint)my_req[i].lens -
- (MPIU_Upint)sendBufForLens ) /
- (MPIU_Upint) sizeof(ADIO_Offset) );
+ ( ( (uintptr_t)my_req[i].lens -
+ (uintptr_t)sendBufForLens ) /
+ (uintptr_t) sizeof(ADIO_Offset) );
/* Receive these offsets from process i. */
rcounts[i] = count_others_req_per_proc[i];
@@ -819,9 +819,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
rdispls[i] = 0;
else
rdispls[i] = (int)
- ( ( (MPIU_Upint)others_req[i].lens -
- (MPIU_Upint)recvBufForLens ) /
- (MPIU_Upint) sizeof(ADIO_Offset) );
+ ( ( (uintptr_t)others_req[i].lens -
+ (uintptr_t)recvBufForLens ) /
+ (uintptr_t) sizeof(ADIO_Offset) );
}
/* Exchange the lengths */
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_hints.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_hints.c
index 7af0a0c..c561ec9 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_hints.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_hints.c
@@ -87,6 +87,7 @@ void ADIOI_GPFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
*/
if (!fd->hints->initialized) {
+ ad_get_env_vars();
ad_gpfs_get_env_vars();
did_anything = 1;
@@ -108,7 +109,7 @@ void ADIOI_GPFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
/* number of processes that perform I/O in collective I/O */
MPI_Comm_size(fd->comm, &nprocs);
nprocs_is_valid = 1;
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
+ MPL_snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
ADIOI_Info_set(info, "cb_nodes", value);
fd->hints->cb_nodes = -1;
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c
index 36f1f5c..68df849 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c
@@ -22,7 +22,7 @@
#include "mpe.h"
#endif
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define RDCOLL_DEBUG 1
#endif
#ifdef AGGREGATION_PROFILE
@@ -179,14 +179,14 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
/* One-sided aggregation needs the amount of data per rank as well because the difference in
* starting and ending offsets for 1 byte is 0 the same as 0 bytes so it cannot be distiguished.
*/
- if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
+ if ((romio_read_aggmethod == 1) || (romio_read_aggmethod == 2)) {
count_sizes = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
MPI_Count buftype_size;
MPI_Type_size_x(datatype, &buftype_size);
my_count_size = (ADIO_Offset) count * (ADIO_Offset)buftype_size;
}
- if (gpfsmpio_tunegather) {
- if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
+ if (romio_tunegather) {
+ if ((romio_read_aggmethod == 1) || (romio_read_aggmethod == 2)) {
gpfs_offsets0 = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
gpfs_offsets = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
for (ii=0; ii<nprocs; ii++) {
@@ -228,7 +228,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
ADIO_OFFSET, fd->comm);
MPI_Allgather(&end_offset, 1, ADIO_OFFSET, end_offsets, 1,
ADIO_OFFSET, fd->comm);
- if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
+ if ((romio_read_aggmethod == 1) || (romio_read_aggmethod == 2)) {
MPI_Allgather(&count_sizes, 1, ADIO_OFFSET, count_sizes, 1,
ADIO_OFFSET, fd->comm);
}
@@ -295,7 +295,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
*
*/
int currentNonZeroDataIndex = 0;
- if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
+ if ((romio_read_aggmethod == 1) || (romio_read_aggmethod == 2)) {
/* Take out the 0-data offsets by shifting the indexes with data to the
* front and keeping track of the non-zero data index for use as the
* length. By doing this we will optimally use all available aggs
@@ -312,7 +312,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
}
}
if (gpfsmpio_tuneblocking) {
- if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
+ if ((romio_read_aggmethod == 1) || (romio_read_aggmethod == 2)) {
ADIOI_GPFS_Calc_file_domains(fd, st_offsets, end_offsets, currentNonZeroDataIndex,
nprocs_for_coll, &min_st_offset,
&fd_start, &fd_end, &fd_size, fd->fs_ptr);
@@ -324,7 +324,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
}
}
else {
- if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
+ if ((romio_read_aggmethod == 1) || (romio_read_aggmethod == 2)) {
ADIOI_Calc_file_domains(st_offsets, end_offsets, currentNonZeroDataIndex,
nprocs_for_coll, &min_st_offset,
&fd_start, &fd_end,
@@ -341,7 +341,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
}
GPFSMPIO_T_CIO_SET_GET( r, 1, 1, GPFSMPIO_CIO_T_MYREQ, GPFSMPIO_CIO_T_FD_PART );
- if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
+ if ((romio_read_aggmethod == 1) || (romio_read_aggmethod == 2)) {
/* If the user has specified to use a one-sided aggregation method then do that at
* this point instead of the two-phase I/O.
*/
@@ -464,7 +464,6 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
GPFSMPIO_T_CIO_REPORT( 0, fd, myrank, nprocs)
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
/* free all memory allocated for collective I/O */
for (i=0; i<nprocs; i++) {
@@ -553,8 +552,8 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
/* now find the real values */
for (i=0; i < nprocs; i++)
for (j=0; j<others_req[i].count; j++) {
- st_loc = ADIOI_MIN(st_loc, others_req[i].offsets[j]);
- end_loc = ADIOI_MAX(end_loc, (others_req[i].offsets[j]
+ st_loc = MPL_MIN(st_loc, others_req[i].offsets[j]);
+ end_loc = MPL_MAX(end_loc, (others_req[i].offsets[j]
+ others_req[i].lens[j] - 1));
}
@@ -660,7 +659,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
#ifdef PROFILE
MPE_Log_event(13, 0, "start computation");
#endif
- size = ADIOI_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
+ size = MPL_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
real_off = off - for_curr_iter;
real_size = size + for_curr_iter;
@@ -693,11 +692,11 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
}
if (req_off < real_off + real_size) {
count[i]++;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf)+req_off-real_off) == (ADIO_Offset)(MPIU_Upint)(read_buf+req_off-real_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)read_buf)+req_off-real_off) == (ADIO_Offset)(uintptr_t)(read_buf+req_off-real_off));
MPI_Address(read_buf+req_off-real_off,
&(others_req[i].mem_ptrs[j]));
ADIOI_Assert((real_off + real_size - req_off) == (int)(real_off + real_size - req_off));
- send_size[i] += (int)(ADIOI_MIN(real_off + real_size - req_off,
+ send_size[i] += (int)(MPL_MIN(real_off + real_size - req_off,
(ADIO_Offset)(unsigned)req_len));
if (real_off+real_size-req_off < (ADIO_Offset)(unsigned)req_len) {
@@ -707,7 +706,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
real_off+real_size)) {
/* this is the case illustrated in the
figure above. */
- for_next_iter = ADIOI_MAX(for_next_iter,
+ for_next_iter = MPL_MAX(for_next_iter,
real_off + real_size - others_req[i].offsets[j+1]);
/* max because it must cover requests
from different processes */
@@ -777,7 +776,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
if (for_next_iter) {
tmp_buf = (char *) ADIOI_Malloc(for_next_iter);
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(MPIU_Upint)(read_buf+real_size-for_next_iter));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(uintptr_t)(read_buf+real_size-for_next_iter));
ADIOI_Assert((for_next_iter+coll_bufsize) == (size_t)(for_next_iter+coll_bufsize));
memcpy(tmp_buf, read_buf+real_size-for_next_iter, for_next_iter);
ADIOI_Free(fd->io_buf);
@@ -970,7 +969,7 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
#define ADIOI_BUF_INCR \
{ \
while (buf_incr) { \
- size_in_buf = ADIOI_MIN(buf_incr, flat_buf_sz); \
+ size_in_buf = MPL_MIN(buf_incr, flat_buf_sz); \
user_buf_idx += size_in_buf; \
flat_buf_sz -= size_in_buf; \
if (!flat_buf_sz) { \
@@ -991,8 +990,8 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
#define ADIOI_BUF_COPY \
{ \
while (size) { \
- size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIU_Upint)(buf + user_buf_idx)); \
+ size_in_buf = MPL_MIN(size, flat_buf_sz); \
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + user_buf_idx) == (ADIO_Offset)(uintptr_t)(buf + user_buf_idx)); \
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
memcpy(((char *) buf) + user_buf_idx, \
&(recv_buf[p][recv_buf_idx[p]]), size_in_buf); \
@@ -1037,8 +1036,8 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
/* Not sure unsigned is necessary, but it makes the math safer */
unsigned *curr_from_proc, *done_from_proc, *recv_buf_idx;
- ADIOI_UNREFERENCED_ARG(requests);
- ADIOI_UNREFERENCED_ARG(statuses);
+ MPL_UNREFERENCED_ARG(requests);
+ MPL_UNREFERENCED_ARG(statuses);
/* curr_from_proc[p] = amount of data recd from proc. p that has already
been accounted for so far
@@ -1086,7 +1085,7 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
if (recv_buf_idx[p] < recv_size[p]) {
if (curr_from_proc[p]+len > done_from_proc[p]) {
if (done_from_proc[p] > curr_from_proc[p]) {
- size = ADIOI_MIN(curr_from_proc[p] + len -
+ size = MPL_MIN(curr_from_proc[p] + len -
done_from_proc[p], recv_size[p]-recv_buf_idx[p]);
buf_incr = done_from_proc[p] - curr_from_proc[p];
ADIOI_BUF_INCR
@@ -1096,7 +1095,7 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
ADIOI_BUF_COPY
}
else {
- size = ADIOI_MIN(len,recv_size[p]-recv_buf_idx[p]);
+ size = MPL_MIN(len,recv_size[p]-recv_buf_idx[p]);
buf_incr = len;
ADIOI_Assert((curr_from_proc[p] + size) == (unsigned)((ADIO_Offset)curr_from_proc[p] + size));
curr_from_proc[p] += (unsigned) size;
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.c
index 333612b..548ae67 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.c
@@ -31,20 +31,14 @@ int gpfsmpio_timing;
int gpfsmpio_timing2;
int gpfsmpio_timing_cw_level;
int gpfsmpio_comm;
-int gpfsmpio_tunegather;
int gpfsmpio_tuneblocking;
long bglocklessmpio_f_type;
int gpfsmpio_bg_nagg_pset;
int gpfsmpio_pthreadio;
int gpfsmpio_p2pcontig;
-int gpfsmpio_write_aggmethod;
-int gpfsmpio_read_aggmethod;
int gpfsmpio_balancecontig;
int gpfsmpio_devnullio;
int gpfsmpio_bridgeringagg;
-int gpfsmpio_onesided_no_rmw;
-int gpfsmpio_onesided_always_rmw;
-int gpfsmpio_onesided_inform_rmw;
double gpfsmpio_prof_cw [GPFSMPIO_CIO_LAST+1];
double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
@@ -64,12 +58,6 @@ double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
* - 1 - Collect/report timing.
* - Default is 0.
*
- * - GPFSMPIO_TUNEGATHER - Tune how starting and ending offsets are communicated
- * for aggregator collective i/o. Possible values:
- * - 0 - Use two MPI_Allgather's to collect starting and ending offsets.
- * - 1 - Use MPI_Allreduce(MPI_MAX) to collect starting and ending offsets.
- * - Default is 1.
- *
* - GPFSMPIO_TUNEBLOCKING - Tune how aggregate file domains are
* calculated (block size). Possible values:
* - 0 - Evenly calculate file domains across aggregators. Also use
@@ -110,40 +98,6 @@ double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
* 3.) There are no gaps between the offsets.
* 4.) No single rank has a data size which spans multiple file domains.
*
- * - GPFSMPIO_WRITE_AGGMETHOD/GPFSMPIO_READ_AGGMETHOD - Replaces the two-phase
- * collective IO aggregation
- * with a one-sided algorithm, significantly reducing communication and
- * memory overhead. Fully
- * supports all datasets and datatypes, the only caveat is that any holes in the data
- * when writing to a pre-existing file are ignored -- there is no read-modify-write
- * support to maintain the correctness of regions of pre-existing data so every byte
- * must be explicitly written to maintain correctness. Users must beware of middle-ware
- * libraries like PNETCDF which may count on read-modify-write functionality for certain
- * features (like fill values). Possible values:
- * - 0 - Normal two-phase collective IO is used.
- * - 1 - A separate one-sided MPI_Put or MPI_Get is used for each contigous chunk of data
- * for a compute to write to or read from the collective buffer on the aggregator.
- * - 2 - An MPI derived datatype is created using all the contigous chunks and just one
- * call to MPI_Put or MPI_Get is done with the derived datatype. On Blue Gene /Q
- * optimal performance for this is achieved when paired with PAMID_TYPED_ONESIDED=1.
- * - Default is 0
- *
- * - GPFSMPIO_ONESIDED_NO_RMW - For one-sided aggregation (GPFSMPIO_WRITE_AGGMETHOD = 1 or 2)
- * disable the detection of holes in the data when writing to a pre-existing
- * file requiring a read-modify-write, thereby avoiding the communication
- * overhead for this detection.
- * - 0 (hole detection enabled) or 1 (hole detection disabled)
- * - Default is 0
- *
- * - GPFSMPIO_ONESIDED_INFORM_RMW - For one-sided aggregation
- * (GPFSMPIO_AGGMETHOD = 1 or 2) generate an informational message informing
- * the user whether holes exist in the data when writing to a pre-existing
- * file requiring a read-modify-write, thereby educating the user to set
- * GPFSMPIO_ONESIDED_NO_RMW=1 on a future run to avoid the communication
- * overhead for this detection.
- * - 0 (disabled) or 1 (enabled)
- * - Default is 0
- *
* - GPFSMPIO_BALANCECONTIG - Relevant only to BGQ. File domain blocks are assigned
* to aggregators in a breadth-first fashion relative to the ions - additionally,
* file domains on the aggregators sharing the same bridgeset and ion have contiguous
@@ -178,9 +132,6 @@ void ad_gpfs_get_env_vars() {
gpfsmpio_timing = 0;
x = getenv( "GPFSMPIO_TIMING" );
if (x) gpfsmpio_timing = atoi(x);
- gpfsmpio_tunegather = 1;
- x = getenv( "GPFSMPIO_TUNEGATHER" );
- if (x) gpfsmpio_tunegather = atoi(x);
gpfsmpio_tuneblocking = 1;
x = getenv( "GPFSMPIO_TUNEBLOCKING" );
if (x) gpfsmpio_tuneblocking = atoi(x);
@@ -196,22 +147,10 @@ void ad_gpfs_get_env_vars() {
x = getenv("GPFSMPIO_NAGG_PSET");
if (x) gpfsmpio_bg_nagg_pset = atoi(x);
- gpfsmpio_pthreadio = 0;
- x = getenv( "GPFSMPIO_PTHREADIO" );
- if (x) gpfsmpio_pthreadio = atoi(x);
-
gpfsmpio_p2pcontig = 0;
x = getenv( "GPFSMPIO_P2PCONTIG" );
if (x) gpfsmpio_p2pcontig = atoi(x);
- gpfsmpio_write_aggmethod = 0;
- x = getenv( "GPFSMPIO_WRITE_AGGMETHOD" );
- if (x) gpfsmpio_write_aggmethod = atoi(x);
-
- gpfsmpio_read_aggmethod = 0;
- x = getenv( "GPFSMPIO_READ_AGGMETHOD" );
- if (x) gpfsmpio_read_aggmethod = atoi(x);
-
gpfsmpio_balancecontig = 0;
x = getenv( "GPFSMPIO_BALANCECONTIG" );
if (x) gpfsmpio_balancecontig = atoi(x);
@@ -224,19 +163,6 @@ void ad_gpfs_get_env_vars() {
x = getenv( "GPFSMPIO_BRIDGERINGAGG" );
if (x) gpfsmpio_bridgeringagg = atoi(x);
- gpfsmpio_onesided_no_rmw = 0;
- x = getenv( "GPFSMPIO_ONESIDED_NO_RMW" );
- if (x) gpfsmpio_onesided_no_rmw = atoi(x);
-
- gpfsmpio_onesided_always_rmw = 0;
- x = getenv( "GPFSMPIO_ONESIDED_ALWAYS_RMW" );
- if (x) gpfsmpio_onesided_always_rmw = atoi(x);
- if (gpfsmpio_onesided_always_rmw)
- gpfsmpio_onesided_no_rmw = 1;
-
- gpfsmpio_onesided_inform_rmw = 0;
- x = getenv( "GPFSMPIO_ONESIDED_INFORM_RMW" );
- if (x) gpfsmpio_onesided_inform_rmw = atoi(x);
}
/* report timing breakdown for MPI I/O collective call */
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h
index 35fdc8d..df0139d 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h
@@ -61,19 +61,13 @@ extern double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
extern int gpfsmpio_timing;
extern int gpfsmpio_timing_cw_level;
extern int gpfsmpio_comm;
-extern int gpfsmpio_tunegather;
extern int gpfsmpio_tuneblocking;
extern long bglocklessmpio_f_type;
extern int gpfsmpio_pthreadio;
extern int gpfsmpio_p2pcontig;
-extern int gpfsmpio_write_aggmethod;
-extern int gpfsmpio_read_aggmethod;
extern int gpfsmpio_balancecontig;
extern int gpfsmpio_devnullio;
extern int gpfsmpio_bridgeringagg;
-extern int gpfsmpio_onesided_no_rmw;
-extern int gpfsmpio_onesided_always_rmw;
-extern int gpfsmpio_onesided_inform_rmw;
/* Default is, well, kind of complicated. Blue Gene /L and /P had "psets": one
* i/o node and all compute nodes wired to it. On Blue Gene /Q that
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c
index acb6d1e..f52f2d7 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c
@@ -181,14 +181,14 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
* the difference in starting and ending offsets for 1 byte is 0 the same
* as 0 bytes so it cannot be distiguished.
*/
- if ((gpfsmpio_write_aggmethod == 1) || (gpfsmpio_write_aggmethod == 2)) {
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
count_sizes = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
MPI_Count buftype_size;
MPI_Type_size_x(datatype, &buftype_size);
my_count_size = (ADIO_Offset) count * (ADIO_Offset)buftype_size;
}
- if (gpfsmpio_tunegather) {
- if ((gpfsmpio_write_aggmethod == 1) || (gpfsmpio_write_aggmethod == 2)) {
+ if (romio_tunegather) {
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
gpfs_offsets0 = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
gpfs_offsets = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
for (ii=0; ii<nprocs; ii++) {
@@ -230,8 +230,8 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
ADIO_OFFSET, fd->comm);
MPI_Allgather(&end_offset, 1, ADIO_OFFSET, end_offsets, 1,
ADIO_OFFSET, fd->comm);
- if ((gpfsmpio_write_aggmethod == 1) || (gpfsmpio_write_aggmethod == 2)) {
- MPI_Allgather(&count_sizes, 1, ADIO_OFFSET, count_sizes, 1,
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
+ MPI_Allgather(&my_count_size, 1, ADIO_OFFSET, count_sizes, 1,
ADIO_OFFSET, fd->comm);
}
}
@@ -286,8 +286,9 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
done by (logically) dividing the file into file domains (FDs); each
process may directly access only its own file domain. */
+ ADIO_Offset lastFileOffset = 0, firstFileOffset = -1;
int currentValidDataIndex = 0;
- if ((gpfsmpio_write_aggmethod == 1) || (gpfsmpio_write_aggmethod == 2)) {
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
/* Take out the 0-data offsets by shifting the indexes with data to the front
* and keeping track of the valid data index for use as the length.
*/
@@ -295,13 +296,19 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
if (count_sizes[i] > 0) {
st_offsets[currentValidDataIndex] = st_offsets[i];
end_offsets[currentValidDataIndex] = end_offsets[i];
+ lastFileOffset = MPL_MAX(lastFileOffset,end_offsets[currentValidDataIndex]);
+ if (firstFileOffset == -1)
+ firstFileOffset = st_offsets[currentValidDataIndex];
+ else
+ firstFileOffset = MPL_MIN(firstFileOffset,st_offsets[currentValidDataIndex]);
+
currentValidDataIndex++;
}
}
}
if (gpfsmpio_tuneblocking) {
- if ((gpfsmpio_write_aggmethod == 1) || (gpfsmpio_write_aggmethod == 2)) {
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
ADIOI_GPFS_Calc_file_domains(fd, st_offsets, end_offsets,
currentValidDataIndex,
nprocs_for_coll, &min_st_offset,
@@ -315,7 +322,7 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
}
}
else {
- if ((gpfsmpio_write_aggmethod == 1) || (gpfsmpio_write_aggmethod == 2)) {
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
ADIOI_Calc_file_domains(st_offsets, end_offsets, currentValidDataIndex,
nprocs_for_coll, &min_st_offset,
&fd_start, &fd_end,
@@ -333,16 +340,28 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
GPFSMPIO_T_CIO_SET_GET( w, 1, 1, GPFSMPIO_CIO_T_MYREQ, GPFSMPIO_CIO_T_FD_PART );
- if ((gpfsmpio_write_aggmethod == 1) || (gpfsmpio_write_aggmethod == 2)) {
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
/* If the user has specified to use a one-sided aggregation method then do that at
* this point instead of the two-phase I/O.
*/
+ /* pass this datastructure to indicate we are a non-striping filesystem
+ * to the onesided algorithm by setting stripe size to 0.
+ */
+ ADIOI_OneSidedStripeParms noStripeParms;
+ noStripeParms.stripeSize = 0;
+ noStripeParms.segmentLen = 0;
+ noStripeParms.stripesPerAgg = 0;
+ noStripeParms.segmentIter = 0;
+ noStripeParms.flushCB = 1;
+ noStripeParms.stripedLastFileOffset = 0;
+ noStripeParms.firstStripedWriteCall = 0;
+ noStripeParms.lastStripedWriteCall = 0;
int holeFound = 0;
ADIOI_OneSidedWriteAggregation(fd, offset_list, len_list, contig_access_count,
- buf, datatype, error_code, st_offsets, end_offsets,
- currentValidDataIndex, fd_start, fd_end, &holeFound);
+ buf, datatype, error_code, firstFileOffset, lastFileOffset,
+ currentValidDataIndex, fd_start, fd_end, &holeFound, noStripeParms);
int anyHolesFound = 0;
- if (!gpfsmpio_onesided_no_rmw)
+ if (!romio_onesided_no_rmw)
MPI_Allreduce(&holeFound, &anyHolesFound, 1, MPI_INT, MPI_MAX, fd->comm);
if (anyHolesFound == 0) {
GPFSMPIO_T_CIO_REPORT( 1, fd, myrank, nprocs)
@@ -357,21 +376,21 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
}
else {
/* Holes are found in the data and the user has not set
- * gpfsmpio_onesided_no_rmw --- set gpfsmpio_onesided_always_rmw to 1
+ * romio_onesided_no_rmw --- set romio_onesided_always_rmw to 1
* and re-call ADIOI_OneSidedWriteAggregation and if the user has
- * gpfsmpio_onesided_inform_rmw set then inform him of this condition
+ * romio_onesided_inform_rmw set then inform him of this condition
* and behavior.
*/
- if (gpfsmpio_onesided_inform_rmw && (myrank ==0))
+ if (romio_onesided_inform_rmw && (myrank ==0))
FPRINTF(stderr,"Information: Holes found during one-sided "
"write aggregation algorithm --- re-running one-sided "
- "write aggregation with GPFSMPIO_ONESIDED_ALWAYS_RMW set to 1.\n");
- gpfsmpio_onesided_always_rmw = 1;
- int prev_gpfsmpio_onesided_no_rmw = gpfsmpio_onesided_no_rmw;
- gpfsmpio_onesided_no_rmw = 1;
- ADIOI_OneSidedWriteAggregation(fd, offset_list, len_list, contig_access_count, buf, datatype, error_code, st_offsets, end_offsets, currentValidDataIndex, fd_start, fd_end, &holeFound);
- gpfsmpio_onesided_no_rmw = prev_gpfsmpio_onesided_no_rmw;
+ "write aggregation with ROMIO_ONESIDED_ALWAYS_RMW set to 1.\n");
+ romio_onesided_always_rmw = 1;
+ int prev_romio_onesided_no_rmw = romio_onesided_no_rmw;
+ romio_onesided_no_rmw = 1;
+ ADIOI_OneSidedWriteAggregation(fd, offset_list, len_list, contig_access_count, buf, datatype, error_code, firstFileOffset, lastFileOffset, currentValidDataIndex, fd_start, fd_end, &holeFound, noStripeParms);
+ romio_onesided_no_rmw = prev_romio_onesided_no_rmw;
GPFSMPIO_T_CIO_REPORT( 1, fd, myrank, nprocs)
ADIOI_Free(offset_list);
ADIOI_Free(len_list);
@@ -471,7 +490,6 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
GPFSMPIO_T_CIO_REPORT( 1, fd, myrank, nprocs)
/* free all memory allocated for collective I/O */
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
for (i=0; i<nprocs; i++) {
if (others_req[i].count) {
@@ -593,8 +611,8 @@ static int gpfs_find_access_for_ion(ADIO_File fd,
for (i=0; i<fd->hints->cb_nodes; i++ ){
if (my_ionode == rank_to_ionode[fd->hints->ranklist[i]] ) {
- group_start = ADIOI_MIN(fd_start[i], group_start);
- group_end = ADIOI_MAX(fd_end[i], group_end);
+ group_start = MPL_MIN(fd_start[i], group_start);
+ group_end = MPL_MAX(fd_end[i], group_end);
}
}
*start = group_start;
@@ -674,8 +692,8 @@ static void ADIOI_Exch_and_write(ADIO_File fd, const void *buf, MPI_Datatype
for (i=0; i < nprocs; i++)
for (j=0; j < others_req[i].count; j++) {
- st_loc = ADIOI_MIN(st_loc, others_req[i].offsets[j]);
- end_loc = ADIOI_MAX(end_loc, (others_req[i].offsets[j]
+ st_loc = MPL_MIN(st_loc, others_req[i].offsets[j]);
+ end_loc = MPL_MAX(end_loc, (others_req[i].offsets[j]
+ others_req[i].lens[j] - 1));
}
@@ -799,7 +817,7 @@ static void ADIOI_Exch_and_write(ADIO_File fd, const void *buf, MPI_Datatype
#endif
for (i=0; i < nprocs; i++) count[i] = recv_size[i] = 0;
- size = ADIOI_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
+ size = MPL_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
for (i=0; i < nprocs; i++) {
if (others_req[i].count) {
@@ -823,11 +841,11 @@ static void ADIOI_Exch_and_write(ADIO_File fd, const void *buf, MPI_Datatype
}
if (req_off < off + size) {
count[i]++;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)write_buf)+req_off-off) == (ADIO_Offset)(MPIU_Upint)(write_buf+req_off-off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)write_buf)+req_off-off) == (ADIO_Offset)(uintptr_t)(write_buf+req_off-off));
MPI_Address(write_buf+req_off-off,
&(others_req[i].mem_ptrs[j]));
ADIOI_Assert((off + size - req_off) == (int)(off + size - req_off));
- recv_size[i] += (int)(ADIOI_MIN(off + size - req_off,
+ recv_size[i] += (int)(MPL_MIN(off + size - req_off,
(unsigned)req_len));
if (off+size-req_off < (unsigned)req_len)
@@ -914,11 +932,12 @@ static void ADIOI_Exch_and_write(ADIO_File fd, const void *buf, MPI_Datatype
/* do a little pointer shuffling: background I/O works from one
* buffer while two-phase machinery fills up another */
io_thread_args.buf = write_buf;
- ADIOI_SWAP(write_buf, write_buf2, char*);
+ write_buf = write_buf2;
+ write_buf2 = io_thread_args.buf;
io_thread_args.io_kind = ADIOI_WRITE;
io_thread_args.size = size;
io_thread_args.offset = off;
- io_thread_args.status = status;
+ io_thread_args.status = &status;
io_thread_args.error_code = *error_code;
if ( (pthread_create(&io_thread, NULL,
ADIOI_IO_Thread_Func, &(io_thread_args))) != 0)
@@ -1247,7 +1266,7 @@ static void ADIOI_W_Exchange_data(ADIO_File fd, const void *buf, char *write_buf
#define ADIOI_BUF_INCR \
{ \
while (buf_incr) { \
- size_in_buf = ADIOI_MIN(buf_incr, flat_buf_sz); \
+ size_in_buf = MPL_MIN(buf_incr, flat_buf_sz); \
user_buf_idx += size_in_buf; \
flat_buf_sz -= size_in_buf; \
if (!flat_buf_sz) { \
@@ -1268,8 +1287,8 @@ static void ADIOI_W_Exchange_data(ADIO_File fd, const void *buf, char *write_buf
#define ADIOI_BUF_COPY \
{ \
while (size) { \
- size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + user_buf_idx)); \
+ size_in_buf = MPL_MIN(size, flat_buf_sz); \
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + user_buf_idx) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + user_buf_idx)); \
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
memcpy(&(send_buf[p][send_buf_idx[p]]), \
((char *) buf) + user_buf_idx, size_in_buf); \
@@ -1355,7 +1374,7 @@ static void ADIOI_Fill_send_buffer(ADIO_File fd, const void *buf, ADIOI_Flatlist
if (send_buf_idx[p] < send_size[p]) {
if (curr_to_proc[p]+len > done_to_proc[p]) {
if (done_to_proc[p] > curr_to_proc[p]) {
- size = ADIOI_MIN(curr_to_proc[p] + len -
+ size = MPL_MIN(curr_to_proc[p] + len -
done_to_proc[p], send_size[p]-send_buf_idx[p]);
buf_incr = done_to_proc[p] - curr_to_proc[p];
ADIOI_BUF_INCR
@@ -1366,7 +1385,7 @@ static void ADIOI_Fill_send_buffer(ADIO_File fd, const void *buf, ADIOI_Flatlist
ADIOI_BUF_COPY
}
else {
- size = ADIOI_MIN(len,send_size[p]-send_buf_idx[p]);
+ size = MPL_MIN(len,send_size[p]-send_buf_idx[p]);
buf_incr = len;
ADIOI_Assert((curr_to_proc[p] + size) == (unsigned)((ADIO_Offset)curr_to_proc[p] + size));
curr_to_proc[p] += size;
@@ -1768,7 +1787,7 @@ static void ADIOI_Fill_send_buffer_nosend(ADIO_File fd, const void *buf, ADIOI_F
if (send_buf_idx[p] < send_size[p]) {
if (curr_to_proc[p]+len > done_to_proc[p]) {
if (done_to_proc[p] > curr_to_proc[p]) {
- size = ADIOI_MIN(curr_to_proc[p] + len -
+ size = MPL_MIN(curr_to_proc[p] + len -
done_to_proc[p], send_size[p]-send_buf_idx[p]);
buf_incr = done_to_proc[p] - curr_to_proc[p];
ADIOI_BUF_INCR
@@ -1779,7 +1798,7 @@ static void ADIOI_Fill_send_buffer_nosend(ADIO_File fd, const void *buf, ADIOI_F
ADIOI_BUF_COPY
}
else {
- size = ADIOI_MIN(len,send_size[p]-send_buf_idx[p]);
+ size = MPL_MIN(len,send_size[p]-send_buf_idx[p]);
buf_incr = len;
ADIOI_Assert((curr_to_proc[p] + size) == (unsigned)((ADIO_Offset)curr_to_proc[p] + size));
curr_to_proc[p] += size;
diff --git a/src/mpi/romio/adio/ad_gpfs/bg/.state-cache b/src/mpi/romio/adio/ad_gpfs/bg/.state-cache
index 33aa903..8af2d6a 100644
--- a/src/mpi/romio/adio/ad_gpfs/bg/.state-cache
+++ b/src/mpi/romio/adio/ad_gpfs/bg/.state-cache
@@ -1,16 +1,16 @@
<dir>
-<file name="ad_bg_pset.h" info="1447123141"/>
-<file name="ad_bg_aggrs.h" info="1447123141"/>
-<file name="ad_bg_pset.c" info="1447123141"/>
-<file name="ad_bg_aggrs.c" info="1447123141"/>
+<file name="ad_bg_aggrs.c" info="1478973152"/>
+<file name="ad_bg_pset.h" info="1478973152"/>
+<file name="ad_bg_pset.c" info="1478973152"/>
+<file name="ad_bg_aggrs.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_bg_pset.h">
+<fileinfo name="ad_bg_aggrs.c">
</fileinfo>
-<fileinfo name="ad_bg_aggrs.h">
+<fileinfo name="ad_bg_pset.h">
</fileinfo>
<fileinfo name="ad_bg_pset.c">
</fileinfo>
-<fileinfo name="ad_bg_aggrs.c">
+<fileinfo name="ad_bg_aggrs.h">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_gpfs/bg/Makefile.mk b/src/mpi/romio/adio/ad_gpfs/bg/Makefile.mk
index 1d957ef..3e850d7 100644
--- a/src/mpi/romio/adio/ad_gpfs/bg/Makefile.mk
+++ b/src/mpi/romio/adio/ad_gpfs/bg/Makefile.mk
@@ -1,7 +1,7 @@
## -*- Mode: Makefile; -*-
## vim: set ft=automake :
##
-## (C) 2012 by Argonne National Laboratory.
+## (C) 2014 by Argonne National Laboratory.
## See COPYRIGHT in top-level directory.
##
diff --git a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c
index 240c013..d578b67 100644
--- a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c
+++ b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c
@@ -28,7 +28,7 @@
#endif
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define AGG_DEBUG 1
#endif
diff --git a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c
index a94c996..b8ca777 100644
--- a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c
+++ b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c
@@ -350,7 +350,7 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
if(conf->nAggrs <=0)
conf->nAggrs = gpfsmpio_bg_nagg_pset;
if(conf->ioMinSize <= conf->nAggrs)
- conf->nAggrs = ADIOI_MAX(1,conf->ioMinSize-1); /* not including bridge itself */
+ conf->nAggrs = MPL_MAX(1,conf->ioMinSize-1); /* not including bridge itself */
/* if(conf->nAggrs > conf->numBridgeRanks)
conf->nAggrs = conf->numBridgeRanks;
*/
diff --git a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.h b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.h
index bcdc61f..487a52b 100644
--- a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.h
+++ b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.h
@@ -55,9 +55,6 @@ typedef struct {
} ADIOI_BG_ConfInfo_t __attribute__((aligned(16)));
-#undef MIN
-#define MIN(a,b) (((a)<(b) ? (a) : (b)))
-
diff --git a/src/mpi/romio/adio/ad_gpfs/pe/.state-cache b/src/mpi/romio/adio/ad_gpfs/pe/.state-cache
index 78c6e28..0da5735 100644
--- a/src/mpi/romio/adio/ad_gpfs/pe/.state-cache
+++ b/src/mpi/romio/adio/ad_gpfs/pe/.state-cache
@@ -1,10 +1,10 @@
<dir>
-<file name="ad_pe_aggrs.c" info="1447123141"/>
-<file name="ad_pe_aggrs.h" info="1447123141"/>
+<file name="ad_pe_aggrs.h" info="1478973152"/>
+<file name="ad_pe_aggrs.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_pe_aggrs.c">
-</fileinfo>
<fileinfo name="ad_pe_aggrs.h">
</fileinfo>
+<fileinfo name="ad_pe_aggrs.c">
+</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_gpfs/pe/Makefile.mk b/src/mpi/romio/adio/ad_gpfs/pe/Makefile.mk
index 6173bd7..0f12433 100644
--- a/src/mpi/romio/adio/ad_gpfs/pe/Makefile.mk
+++ b/src/mpi/romio/adio/ad_gpfs/pe/Makefile.mk
@@ -1,7 +1,7 @@
## -*- Mode: Makefile; -*-
## vim: set ft=automake :
##
-## (C) 2012 by Argonne National Laboratory.
+## (C) 2014 by Argonne National Laboratory.
## See COPYRIGHT in top-level directory.
##
diff --git a/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c b/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c
index 8453238..3849048 100644
--- a/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c
+++ b/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c
@@ -24,7 +24,7 @@
#include "mpe.h"
#endif
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define AGG_DEBUG 1
#endif
@@ -143,9 +143,9 @@ ADIOI_PE_gen_agg_ranklist(ADIO_File fd)
}
}
if (numAggs == 0) {
- MPID_Comm *mpidCommData;
+ MPIR_Comm *mpidCommData;
- MPID_Comm_get_ptr(fd->comm,mpidCommData);
+ MPIR_Comm_get_ptr(fd->comm,mpidCommData);
int localSize = mpidCommData->local_size;
// get my node rank
@@ -157,7 +157,7 @@ ADIOI_PE_gen_agg_ranklist(ADIO_File fd)
MPI_Allgather(MPI_IN_PLACE, 1, MPI_INT, allNodeRanks, 1, MPI_INT, fd->comm);
#ifdef AGG_DEBUG
- printf("MPID_Comm data: local_size is %d\nintranode_table entries:\n",mpidCommData->local_size);
+ printf("MPIR_Comm data: local_size is %d\nintranode_table entries:\n",mpidCommData->local_size);
for (i=0;i<localSize;i++) {
printf("%d ",mpidCommData->intranode_table[i]);
}
diff --git a/src/mpi/romio/adio/ad_gridftp/.state-cache b/src/mpi/romio/adio/ad_gridftp/.state-cache
deleted file mode 100644
index cd4c9c2..0000000
--- a/src/mpi/romio/adio/ad_gridftp/.state-cache
+++ /dev/null
@@ -1,43 +0,0 @@
-<dir>
-<file name="ad_gridftp_open.c" info="1447123141"/>
-<file name="ad_gridftp_features.c" info="1447123141"/>
-<file name="ad_gridftp_read.c" info="1447123141"/>
-<file name="ad_gridftp_close.c" info="1447123141"/>
-<file name="ad_gridftp_flush.c" info="1447123141"/>
-<file name="ad_gridftp_hints.c" info="1447123141"/>
-<file name="ad_gridftp_delete.c" info="1447123141"/>
-<file name="ad_gridftp_fcntl.c" info="1447123141"/>
-<file name="globus_routines.c" info="1447123141"/>
-<file name="ad_gridftp_write.c" info="1447123141"/>
-<file name="ad_gridftp_resize.c" info="1447123141"/>
-<file name="ad_gridftp.h" info="1447123141"/>
-<file name="ad_gridftp.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_gridftp_open.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_features.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_read.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_close.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_flush.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_hints.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_delete.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_fcntl.c">
-</fileinfo>
-<fileinfo name="globus_routines.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_write.c">
-</fileinfo>
-<fileinfo name="ad_gridftp_resize.c">
-</fileinfo>
-<fileinfo name="ad_gridftp.h">
-</fileinfo>
-<fileinfo name="ad_gridftp.c">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_gridftp/Makefile.mk b/src/mpi/romio/adio/ad_gridftp/Makefile.mk
deleted file mode 100644
index 2cd83a2..0000000
--- a/src/mpi/romio/adio/ad_gridftp/Makefile.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_AD_GRIDFTP
-
-noinst_HEADERS += adio/ad_gridftp/ad_gridftp.h
-
-romio_other_sources += \
- adio/ad_gridftp/ad_gridftp_close.c \
- adio/ad_gridftp/ad_gridftp_open.c \
- adio/ad_gridftp/ad_gridftp_read.c \
- adio/ad_gridftp/ad_gridftp_write.c \
- adio/ad_gridftp/ad_gridftp_fcntl.c \
- adio/ad_gridftp/ad_gridftp_flush.c \
- adio/ad_gridftp/ad_gridftp_resize.c \
- adio/ad_gridftp/ad_gridftp_hints.c \
- adio/ad_gridftp/ad_gridftp_delete.c \
- adio/ad_gridftp/ad_gridftp.c \
- adio/ad_gridftp/globus_routines.c \
- adio/ad_gridftp/ad_gridftp_features.c
-
-endif BUILD_AD_GRIDFTP
-
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp.c
deleted file mode 100644
index f3767dc..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_GRIDFTP_operations = {
- ADIOI_GRIDFTP_Open, /* Open */
- ADIOI_GRIDFTP_ReadContig, /* ReadContig */
- ADIOI_GRIDFTP_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_GRIDFTP_Fcntl, /* Fcntl */
- ADIOI_GRIDFTP_SetInfo, /* SetInfo */
- ADIOI_GRIDFTP_ReadStrided, /* ReadStrided */
- ADIOI_GRIDFTP_WriteStrided, /* WriteStrided */
- ADIOI_GRIDFTP_Close, /* Close */
- ADIOI_FAKE_IreadContig, /* IreadContig */
- ADIOI_FAKE_IwriteContig, /* IwriteContig */
- ADIOI_FAKE_IODone, /* ReadDone */
- ADIOI_FAKE_IODone, /* WriteDone */
- ADIOI_FAKE_IOComplete, /* ReadComplete */
- ADIOI_FAKE_IOComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_GRIDFTP_Flush, /* Flush */
- ADIOI_GRIDFTP_Resize, /* Resize */
- ADIOI_GRIDFTP_Delete, /* Delete */
- ADIOI_GRIDFTP_Feature, /* Features */
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp.h b/src/mpi/romio/adio/ad_gridftp/ad_gridftp.h
deleted file mode 100644
index 0b94c78..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#ifndef AD_GRIDFTP_INCLUDE
-#define AD_GRIDFTP_INCLUDE
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <fcntl.h>
-#include "adio.h"
-#include <globus_ftp_client.h>
-
-/* These live in globus_routines.c */
-extern int num_gridftp_handles;
-#ifndef ADIO_GRIDFTP_HANDLES_MAX
-#define ADIO_GRIDFTP_HANDLES_MAX 200
-#endif /* ! ADIO_GRIDFTP_HANDLES_MAX */
-extern globus_ftp_client_handle_t gridftp_fh[ADIO_GRIDFTP_HANDLES_MAX];
-extern globus_ftp_client_operationattr_t oattr[ADIO_GRIDFTP_HANDLES_MAX];
-
-
-/* TODO: weed out the now-unused prototypes */
-void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code);
-void ADIOI_GRIDFTP_Close(ADIO_File fd, int *error_code);
-void ADIOI_GRIDFTP_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_GRIDFTP_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_GRIDFTP_IwriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-void ADIOI_GRIDFTP_IreadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-int ADIOI_GRIDFTP_ReadDone(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-int ADIOI_GRIDFTP_WriteDone(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-void ADIOI_GRIDFTP_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-void ADIOI_GRIDFTP_WriteComplete(ADIO_Request *request, ADIO_Status *status,
- int *error_code);
-void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
- int *error_code);
-void ADIOI_GRIDFTP_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code);
-void ADIOI_GRIDFTP_ReadStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_GRIDFTP_WriteStridedColl(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_GRIDFTP_ReadStridedColl(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_GRIDFTP_IreadStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-void ADIOI_GRIDFTP_IwriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-void ADIOI_GRIDFTP_Flush(ADIO_File fd, int *error_code);
-void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
-void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
-void ADIOI_GRIDFTP_Get_shared_fp(ADIO_File fd, int size,
- ADIO_Offset *shared_fp,
- int *error_code);
-void ADIOI_GRIDFTP_Set_shared_fp(ADIO_File fd, ADIO_Offset offset,
- int *error_code);
-void ADIOI_GRIDFTP_Delete(char *filename, int *error_code);
-
-void globus_err_handler(const char *routine, const char *caller,
- globus_result_t result);
-
-#endif
-
-
-
-
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_close.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_close.c
deleted file mode 100644
index c1693d6..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_close.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-
-void ADIOI_GRIDFTP_Close(ADIO_File fd, int *error_code)
-{
- int err;
- static char myname[]="ADIOI_GRIDFTP_Close";
-
- globus_result_t result;
-
- MPI_Barrier(fd->comm);
-
- /* Destroy the ftp handle and opattr */
- result = globus_ftp_client_operationattr_destroy(&(oattr[fd->fd_sys]));
- if (result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_operationattr_destroy",
- myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s",globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- result=globus_ftp_client_handle_destroy(&(gridftp_fh[fd->fd_sys]));
- if (result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_handle_destroy",
- myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
- fd->fd_sys = -1;
- fd->fp_ind=0;
- fd->fp_sys_posn=0;
- num_gridftp_handles--;
-
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_delete.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_delete.c
deleted file mode 100644
index 54eb714..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_delete.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-
-static globus_mutex_t lock;
-static globus_cond_t cond;
-static globus_bool_t delete_done, delete_success;
-static void delete_cb(void *myarg, globus_ftp_client_handle_t *handle, globus_object_t *error)
-{
-
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- else
- {
- delete_success=GLOBUS_TRUE;
- }
- delete_done=GLOBUS_TRUE;
-}
-
-void ADIOI_GRIDFTP_Delete(char *filename, int *error_code)
-{
- char myname[]="ADIOI_GRIDFTP_Delete";
- int myrank, nprocs;
- globus_ftp_client_handle_t handle;
- globus_result_t result;
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
- MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
-
- globus_module_activate(GLOBUS_FTP_CLIENT_MODULE);
- result=globus_ftp_client_handle_init(&handle,GLOBUS_NULL);
-
- if (result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_handle_init",myname,result);
- *error_code= MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
- delete_done=GLOBUS_FALSE;
- delete_success=GLOBUS_FALSE;
- result=globus_ftp_client_delete(&handle,filename,GLOBUS_NULL,delete_cb,GLOBUS_NULL);
- if (result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_delete",myname,result);
- *error_code= MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&lock);
- while ( delete_done!=GLOBUS_TRUE )
- globus_cond_wait(&cond,&lock);
- globus_mutex_unlock(&lock);
- result=globus_ftp_client_handle_destroy(&handle);
- if (result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_handle_destroy",myname,result);
- *error_code= MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
- if ( delete_success!=GLOBUS_TRUE )
- {
- *error_code= MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- }
-}
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_fcntl.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_fcntl.c
deleted file mode 100644
index dd9cb5e..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_fcntl.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-#include "adio_extern.h"
-
-globus_mutex_t fcntl_size_lock;
-globus_cond_t fcntl_size_cond;
-globus_bool_t fcntl_size_done;
-
-void fcntl_size_cb(void *myargs, globus_ftp_client_handle_t *handle,
- globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- globus_mutex_lock(&fcntl_size_lock);
- fcntl_size_done=GLOBUS_TRUE;
- globus_cond_signal(&fcntl_size_cond);
- globus_mutex_unlock(&fcntl_size_lock);
-}
-
-void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
- int *error_code)
-{
- MPI_Datatype copy_etype, copy_filetype;
- int combiner, i, j, k, filetype_is_contig, err;
- ADIOI_Flatlist_node *flat_file;
- char myname[]="ADIOI_GRIDFTP_Fcntl";
-
- int myrank, nprocs;
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
-
- switch(flag) {
- case ADIO_FCNTL_GET_FSIZE:
- {
- globus_result_t result;
- globus_off_t fsize=0;
-
- globus_mutex_init(&fcntl_size_lock,GLOBUS_NULL);
- globus_cond_init(&fcntl_size_cond,GLOBUS_NULL);
- fcntl_size_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_size(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- &(fsize),
- fcntl_size_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_size",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&fcntl_size_lock);
- while ( fcntl_size_done!=GLOBUS_TRUE )
- globus_cond_wait(&fcntl_size_lock,&fcntl_size_cond);
- globus_mutex_unlock(&fcntl_size_lock);
- globus_mutex_destroy(&fcntl_size_lock);
- globus_cond_destroy(&fcntl_size_cond);
- fcntl_struct->fsize=fsize;
- }
- *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- ADIOI_GEN_Prealloc(fd, fcntl_struct->diskspace, error_code);
- break;
-
- case ADIO_FCNTL_SET_ATOMICITY:
- default:
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_ARG,
- "**flag", "**flag %d", flag);
- }
-}
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_features.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_features.c
deleted file mode 100644
index cbdc395..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_features.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2008 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-int ADIOI_GRIDFTP_Feature (ADIO_File fd, int flag)
-{
- switch(flag) {
- case ADIO_SCALABLE_OPEN:
- case ADIO_SHARED_FP:
- case ADIO_LOCKS:
- case ADIO_SEQUENTIAL:
- case ADIO_DATA_SIEVING_WRITES:
- default:
- return 0;
- }
-}
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_flush.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_flush.c
deleted file mode 100644
index 795341e..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_flush.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-
-/* GridFTP doesn't give you a way to cache writes on the client side, so
- is essentially a no-op */
-/* if there is a mechanism where we can ask the server to flush data to disk we
- * should do it here. I'll leave that up to Troy */
-
-void ADIOI_GRIDFTP_Flush(ADIO_File fd, int *error_code)
-{
- return;
-}
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_hints.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_hints.c
deleted file mode 100644
index c0b0a40..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_hints.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-/*
-
-Valid hints for ftp:// and gsiftp:// URLs (aside from the std. ones):
-
- ftp_control_mode extended|block|stream|compressed
- (default extended for gsiftp:// URLs and stream for ftp:// URLs)
-
- parallelism integer number of simultaneous threads connecting to
- ftp server (default 1)
-
- striped_ftp true|false or enable|disable; enables gsiftp striped data transfer
-
- tcp_buffer integer size of tcp stream buffers in bytes
-
- transfer_type ascii or binary (default binary)
-
-These *must* be specified at open time currently.
-*/
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-
-void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
-{
-
- if (!(fd->info))
- {
- if ( users_info==MPI_INFO_NULL )
- {
- /* This must be part of the open call. */
- MPI_Info_create(&(fd->info));
- }
- else
- {
- MPI_Info_dup(users_info,&(fd->info));
- }
- }
- else
- {
- int i,nkeys,valuelen,flag;
- char key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL];
-
- if ( users_info!=MPI_INFO_NULL )
- {
- MPI_Info_get_nkeys(users_info,&nkeys);
- for (i=0;i<nkeys;i++)
- {
- MPI_Info_get_nthkey(users_info,i,key);
- MPI_Info_get_valuelen(users_info,key,&valuelen,&flag);
- if (flag)
- {
- ADIOI_Info_get(users_info,key,valuelen,value,&flag);
- if (flag) ADIOI_Info_set(fd->info,key,value);
- }
- }
- }
- }
-
- /* let the generic ROMIO and MPI-I/O stuff happen... */
- ADIOI_GEN_SetInfo(fd, users_info, error_code);
-}
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_open.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_open.c
deleted file mode 100644
index 45aab92..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_open.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-
-static globus_mutex_t lock;
-static globus_cond_t cond;
-
-static globus_bool_t file_exists,exists_done;
-static void exists_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- else
- {
- file_exists=GLOBUS_TRUE;
- }
- exists_done=GLOBUS_TRUE;
-}
-
-static globus_bool_t touch_ctl_done;
-static void touch_ctl_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- globus_mutex_lock(&lock);
- touch_ctl_done=GLOBUS_TRUE;
- globus_cond_signal(&cond);
- globus_mutex_unlock(&lock);
-}
-
-static void touch_data_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error,
- globus_byte_t *buffer, globus_size_t length, globus_off_t offset,
- globus_bool_t eof)
-{
- if (error)
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- globus_ftp_client_register_read(handle,buffer,length,touch_data_cb,myargs);
- return;
-}
-
-void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
-{
- static char myname[]="ADIOI_GRIDFTP_Open";
- int myrank, nprocs, keyfound;
- char hintval[MPI_MAX_INFO_VAL+1];
- globus_ftp_client_handleattr_t hattr;
- globus_result_t result;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
-
- /* activate Globus ftp client module -- can be called multiple times, so
- it's safest to call once per file/connection */
- globus_module_activate(GLOBUS_FTP_CLIENT_MODULE);
- fd->fd_sys = num_gridftp_handles;
- /* No shared file pointers for now */
- fd->shared_fp_fname = NULL;
- *error_code = MPI_SUCCESS;
-
- /* Access modes here mean something very different here than they
- would on a "real" filesystem... As a result, the amode and hint
- processing here is intermingled and a little weird because many
- of them have to do with the connection rather than the file itself.
- The thing that sucks about this is that read and write ops will
- have to check themselves if the file is being accessed rdonly, rdwr,
- or wronly.
- */
- result=globus_ftp_client_handleattr_init(&hattr);
- if ( result != GLOBUS_SUCCESS )
- {
-
-
- globus_err_handler("globus_ftp_client_handleattr_init",
- myname,result);
- fd->fd_sys = -1;
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- result = globus_ftp_client_operationattr_init(&(oattr[fd->fd_sys]));
- if ( result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_operationattr_init",
- myname,result);
- fd->fd_sys = -1;
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
-
- /* Always use connection caching unless told otherwise */
- result=globus_ftp_client_handleattr_set_cache_all(&hattr,GLOBUS_TRUE);
- if ( result !=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_handleattr_set_cache_all",myname,result);
-
- /* Assume that it's safe to cache a file if it's read-only */
- if ( (fd->access_mode&ADIO_RDONLY) &&
- (result=globus_ftp_client_handleattr_add_cached_url(&hattr,fd->filename))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_handleattr_add_cached_url",myname,result);
-
- /* Since we're (almost by definition) doing things that FTP S (stream)
- control mode can't handle, default to E (extended block) control mode
- for gsiftp:// URLs. ftp:// URLs use standard stream control mode
- by default. This behavior can be overridden by the ftp_control_mode
- hint. */
-
- /*
- if ( !strncmp(fd->filename,"gsiftp:",7) &&
- (result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_EXTENDED_BLOCK))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
- else if ( !strncmp(fd->filename,"ftp:",4) &&
- (result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_STREAM))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
- */
-
- /* Set append mode if necessary */
- if ( (fd->access_mode&ADIO_APPEND) &&
- ((result=globus_ftp_client_operationattr_set_append(&(oattr[fd->fd_sys]),GLOBUS_TRUE))!=GLOBUS_SUCCESS) )
- globus_err_handler("globus_ftp_client_operationattr_set_append",myname,result);
-
- /* Other hint and amode processing that would affect hattr and/or
- oattr[] (eg. parallelism, striping, etc.) goes here */
- if ( fd->info!=MPI_INFO_NULL )
- {
- ADIOI_Info_get(fd->info,"ftp_control_mode",MPI_MAX_INFO_VAL,hintval,&keyfound);
- if ( keyfound )
- {
- if ( ( !strcmp(hintval,"extended") || !strcmp(hintval,"extended_block") ) &&
- (result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_EXTENDED_BLOCK))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
- else if ( !strcmp(hintval,"block") &&
- (result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_BLOCK))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
- else if ( !strcmp(hintval,"compressed") &&
- (result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_COMPRESSED))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
- else if ( !strcmp(hintval,"stream") &&
- (result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_STREAM))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
- }
-
- ADIOI_Info_get(fd->info,"parallelism",MPI_MAX_INFO_VAL,hintval,&keyfound);
- if ( keyfound )
- {
- int nftpthreads;
-
- if ( sscanf(hintval,"%d",&nftpthreads)==1 )
- {
- globus_ftp_control_parallelism_t parallelism;
-
- parallelism.mode = GLOBUS_FTP_CONTROL_PARALLELISM_FIXED;
- parallelism.fixed.size = nftpthreads;
- if ( (result=globus_ftp_client_operationattr_set_parallelism(&(oattr[fd->fd_sys]),
- ¶llelism))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_parallelism",myname,result);
- }
- }
-
- ADIOI_Info_get(fd->info,"striped_ftp",MPI_MAX_INFO_VAL,hintval,&keyfound);
- if ( keyfound )
- {
- /* if set to "true" or "enable", set up round-robin block layout */
- if ( !strncmp("true",hintval,4) || !strncmp("TRUE",hintval,4) ||
- !strncmp("enable",hintval,4) || !strncmp("ENABLE",hintval,4) )
- {
- ADIOI_Info_get(fd->info,"striping_factor",MPI_MAX_INFO_VAL,hintval,&keyfound);
- if ( keyfound )
- {
- int striping_factor;
-
- if ( sscanf(hintval,"%d",&striping_factor)==1 )
- {
- globus_ftp_control_layout_t layout;
-
- layout.mode = GLOBUS_FTP_CONTROL_STRIPING_BLOCKED_ROUND_ROBIN;
- layout.round_robin.block_size = striping_factor;
- if ( (result=globus_ftp_client_operationattr_set_layout(&(oattr[fd->fd_sys]),
- &layout))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_layout",
- myname,result);
- }
- }
- }
- }
-
- ADIOI_Info_get(fd->info,"tcp_buffer",MPI_MAX_INFO_VAL,hintval,&keyfound);
- if ( keyfound )
- {
- /* set tcp buffer size */
- int buffer_size;
- if ( sscanf(hintval,"%d",&buffer_size)==1 )
- {
- globus_ftp_control_tcpbuffer_t tcpbuf;
-
- tcpbuf.mode = GLOBUS_FTP_CONTROL_TCPBUFFER_FIXED;
- tcpbuf.fixed.size = buffer_size;
- if ( (result=globus_ftp_client_operationattr_set_tcp_buffer(&(oattr[fd->fd_sys]),
- &tcpbuf))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_tcp_buffer",myname,result);
- }
- }
-
- ADIOI_Info_get(fd->info,"transfer_type",MPI_MAX_INFO_VAL,hintval,&keyfound);
- if ( keyfound )
- {
- globus_ftp_control_type_t filetype;
- /* set transfer type (i.e. ASCII or binary) */
- if ( !strcmp("ascii",hintval) || !strcmp("ASCII",hintval) )
- {
- filetype=GLOBUS_FTP_CONTROL_TYPE_ASCII;
- }
- else
- {
- filetype=GLOBUS_FTP_CONTROL_TYPE_IMAGE;
- }
- if ( (result=globus_ftp_client_operationattr_set_type(&(oattr[fd->fd_sys]),filetype))!=GLOBUS_SUCCESS )
- globus_err_handler("globus_ftp_client_operationattr_set_type",myname,result);
- }
- }
- else
- FPRINTF(stderr,"no MPI_Info object associated with %s\n",fd->filename);
-
- /* Create the ftp handle */
- result=globus_ftp_client_handle_init(&(gridftp_fh[fd->fd_sys]),&hattr);
- if ( result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_handle_init",myname,result);
- fd->fd_sys = -1;
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
- /* Check for existence of the file */
- globus_mutex_init(&lock, GLOBUS_NULL);
- globus_cond_init(&cond, GLOBUS_NULL);
- file_exists=GLOBUS_FALSE;
- exists_done=GLOBUS_FALSE;
- if ( myrank==0 )
- {
- if ( (result=globus_ftp_client_exists(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- exists_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_exists",myname,result);
- fd->fd_sys = -1;
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- /* wait till the callback completes */
- globus_mutex_lock(&lock);
- while ( exists_done!=GLOBUS_TRUE )
- globus_cond_wait(&cond,&lock);
- globus_mutex_unlock(&lock);
- }
- MPI_Barrier(fd->comm);
- MPI_Bcast(&file_exists,1,MPI_INT,0,fd->comm);
-
- /* It turns out that this is handled by MPI_File_open() directly */
- if ( (file_exists!=GLOBUS_TRUE) && (fd->access_mode&ADIO_CREATE) &&
- !(fd->access_mode&ADIO_EXCL) && !(fd->access_mode&ADIO_RDONLY) )
- {
- if ( myrank==0 )
- {
- /* if the file doesn't exist, write a single NULL to it */
- globus_byte_t touchbuf=(globus_byte_t)'\0';
- touch_ctl_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_put(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- GLOBUS_NULL,
- touch_ctl_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_put",myname,result);
- fd->fd_sys = -1;
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- result=globus_ftp_client_register_write(&(gridftp_fh[fd->fd_sys]),
- (globus_byte_t *)&touchbuf, 0,
- (globus_off_t)0, GLOBUS_TRUE,
- touch_data_cb, GLOBUS_NULL);
-
- if ( result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_register_write",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&lock);
- while ( touch_ctl_done!=GLOBUS_TRUE )
- globus_cond_wait(&cond,&lock);
- globus_mutex_unlock(&lock);
- }
- MPI_Barrier(fd->comm);
- }
- else if ( (fd->access_mode&ADIO_EXCL) && (file_exists==GLOBUS_TRUE) )
- {
- fd->fd_sys = -1;
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", 0);
- return;
- }
- else if ( (fd->access_mode&ADIO_RDONLY) && (file_exists!=GLOBUS_TRUE) )
- {
- if ( myrank==0 )
- {
- FPRINTF(stderr,"WARNING: read-only file %s does not exist!\n",fd->filename);
- }
- }
- num_gridftp_handles++;
-}
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_read.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_read.c
deleted file mode 100644
index 19351b7..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_read.c
+++ /dev/null
@@ -1,465 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-#include "adio_extern.h"
-
-static globus_mutex_t readcontig_ctl_lock;
-static globus_cond_t readcontig_ctl_cond;
-static globus_bool_t readcontig_ctl_done;
-static void readcontig_ctl_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- globus_mutex_lock(&readcontig_ctl_lock);
- if ( readcontig_ctl_done!=GLOBUS_TRUE )
- readcontig_ctl_done=GLOBUS_TRUE;
- globus_cond_signal(&readcontig_ctl_cond);
- globus_mutex_unlock(&readcontig_ctl_lock);
- return;
-}
-
-static void readcontig_data_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error,
- globus_byte_t *buffer, globus_size_t length, globus_off_t offset,
- globus_bool_t eof)
-{
- globus_size_t *bytes_read;
-
- bytes_read=(globus_size_t *)myargs;
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- *bytes_read+=length;
- /* I don't understand why the data callback has to keep recalling register_read,
- but everything I've done and all the examples I've seen seem to require
- that behavior to work... */
- /*
- * Using buffer+length seems to work, but is probably not the correct
- * solution. A big read of 256kB chunks will have lines like this:
- readcontig_data_cb: buffer 0x404e0008 length 0 offset 31719424 eof 1
- readcontig_data_cb: buffer 0x404a0008 length 65536 offset 31981568 eof 0
- readcontig_data_cb: buffer 0x404b0008 length 65536 offset 32047104 eof 0
- readcontig_data_cb: buffer 0x404c0008 length 65536 offset 32112640 eof 0
- readcontig_data_cb: buffer 0x404d0008 length 65536 offset 32178176 eof 0
- */
- if ( !eof )
- globus_ftp_client_register_read(handle,
- buffer+length,
- length,
- readcontig_data_cb,
- (void *)(bytes_read));
- return;
-}
-
-static globus_mutex_t readdiscontig_ctl_lock;
-static globus_cond_t readdiscontig_ctl_cond;
-static globus_bool_t readdiscontig_ctl_done;
-static void readdiscontig_ctl_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- globus_mutex_lock(&readdiscontig_ctl_lock);
- if ( readdiscontig_ctl_done!=GLOBUS_TRUE )
- readdiscontig_ctl_done=GLOBUS_TRUE;
- globus_cond_signal(&readdiscontig_ctl_cond);
- globus_mutex_unlock(&readdiscontig_ctl_lock);
- return;
-}
-
-static void readdiscontig_data_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error,
- globus_byte_t *buffer, globus_size_t length, globus_off_t offset,
- globus_bool_t eof)
-{
- globus_size_t *bytes_read;
-
- bytes_read=(globus_size_t *)myargs;
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- *bytes_read+=length;
- /* I don't understand why the data callback has to keep recalling register_read,
- but everything I've done and all the examples I've seen seem to require
- that behavior to work... */
- if ( !eof )
- globus_ftp_client_register_read(handle,
- buffer,
- length,
- readdiscontig_data_cb,
- (void *)(bytes_read));
- return;
-}
-
-void ADIOI_GRIDFTP_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
- static char myname[]="ADIOI_GRIDFTP_ReadContig";
- int myrank, nprocs;
- MPI_Count datatype_size;
- globus_size_t len,bytes_read=0;
- globus_off_t goff;
- globus_result_t result;
-
- if ( fd->access_mode&ADIO_WRONLY )
- {
- *error_code=MPIR_ERR_MODE_WRONLY;
- return;
- }
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
- MPI_Type_size_x(datatype, &datatype_size);
-
- if (file_ptr_type != ADIO_EXPLICIT_OFFSET)
- {
- offset = fd->fp_ind;
- }
-
- /* Do the gridftp I/O transfer */
- goff = (globus_off_t)offset;
- len = ((globus_size_t)datatype_size)*((globus_size_t)count);
-
- globus_mutex_init(&readcontig_ctl_lock, GLOBUS_NULL);
- globus_cond_init(&readcontig_ctl_cond, GLOBUS_NULL);
- readcontig_ctl_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_partial_get(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- GLOBUS_NULL,
- goff,
- goff+(globus_off_t)len,
- readcontig_ctl_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_partial_get",myname,result);
- *error_code=MPI_ERR_IO;
- ADIOI_Error(fd,*error_code,myname);
- return;
- }
- result=globus_ftp_client_register_read(&(gridftp_fh[fd->fd_sys]),
- (globus_byte_t *)buf, len, readcontig_data_cb,
- (void *)(&bytes_read));
- if ( result != GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_register_read",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
-
- /* The ctl callback won't start till the data callbacks complete, so it's
- safe to wait on just the ctl callback */
- globus_mutex_lock(&readcontig_ctl_lock);
- while ( readcontig_ctl_done!=GLOBUS_TRUE )
- globus_cond_wait(&readcontig_ctl_cond,&readcontig_ctl_lock);
- globus_mutex_unlock(&readcontig_ctl_lock);
-
- globus_mutex_destroy(&readcontig_ctl_lock);
- globus_cond_destroy(&readcontig_ctl_cond);
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bytes_read);
-#endif
- if (file_ptr_type != ADIO_EXPLICIT_OFFSET)
- {
- fd->fp_ind += bytes_read;
- fd->fp_sys_posn = fd->fp_ind;
- }
- else {
- fd->fp_sys_posn = offset + bytes_read;
- }
-}
-
-void ADIOI_GRIDFTP_ReadDiscontig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
- char myname[]="ADIOI_GRIDFTP_ReadDiscontig";
- int myrank,nprocs;
- /* size and extent of buffer in memory */
- MPI_Aint btype_size,btype_extent;
- /* size and extent of file record layout */
- MPI_Aint ftype_size,ftype_extent;
- /* size of file elemental type; seeks are done in units of this */
- MPI_Aint etype_size;
- MPI_Aint extent;
- ADIOI_Flatlist_node *flat_file;
- int i,buf_contig,boff,nblks;
- globus_off_t start,end,goff;
- globus_size_t bytes_read;
- globus_result_t result;
- globus_byte_t *tmp;
-
- if ( fd->access_mode&ADIO_WRONLY )
- {
- *error_code=MPIR_ERR_MODE_WRONLY;
- return;
- }
-
- *error_code=MPI_SUCCESS;
-
- MPI_Comm_rank(fd->comm,&myrank);
- MPI_Comm_size(fd->comm,&nprocs);
-
- etype_size=fd->etype_size;
- MPI_Type_size_x(fd->filetype,&ftype_size);
- MPI_Type_extent(fd->filetype,&ftype_extent);
- /* This is arguably unnecessary, as this routine assumes that the
- buffer in memory is contiguous */
- MPI_Type_size_x(datatype,&btype_size);
- MPI_Type_extent(datatype,&btype_extent);
- ADIOI_Datatype_iscontig(datatype,&buf_contig);
-
- if ( ( btype_extent!=btype_size ) || ( ! buf_contig ) )
- {
- FPRINTF(stderr,"[%d/%d] %s called with discontigous memory buffer\n",
- myrank,nprocs,myname);
- fflush(stderr);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", 0 );
- return;
- }
- /* from here we can assume btype_extent==btype_size */
-
- /* Flatten out fd->filetype so we know which blocks to skip */
- flat_file = ADIOI_Flatten_and_find(fd->filetype);
-
- /* Figure out how big the area to read is */
- start=(globus_off_t)(offset*etype_size);
- goff=start;
- boff=0;
- extent=0;
- nblks=0;
- while ( boff < (count*btype_size) )
- {
- int blklen=0;
-
- for (i=0;i<flat_file->count;i++)
- {
- /* find the length of the next block */
- if ( (boff+flat_file->blocklens[i]) < (count*btype_size) )
- blklen=flat_file->blocklens[i];
- else
- blklen=(count*btype_size)-boff;
- /* increment buffer size to be used */
- boff+=blklen;
- /* compute extent -- the nblks*ftype_extent bit is
- there so we remember how many ftypes we've already
- been through */
- extent=MAX(extent,nblks*ftype_extent+flat_file->indices[i]+blklen);
- if ( boff>=(count*btype_size) )
- break;
- }
- nblks++;
- }
- if ( extent < count*btype_size )
- {
- FPRINTF(stderr,"[%d/%d] %s error in computing extent -- extent %d is smaller than total bytes requested %d!\n",
- myrank,nprocs,myname,extent,count*btype_size);
- fflush(stderr);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", 0);
- return;
- }
- end=start+(globus_off_t)extent;
- tmp=(globus_byte_t *)ADIOI_Malloc((size_t)extent*sizeof(globus_byte_t));
-
- /* start up the globus partial read */
- globus_mutex_init(&readdiscontig_ctl_lock, GLOBUS_NULL);
- globus_cond_init(&readdiscontig_ctl_cond, GLOBUS_NULL);
- readdiscontig_ctl_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_partial_get(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- GLOBUS_NULL,
- start,
- end,
- readdiscontig_ctl_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_partial_get",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
- /* Do all the actual I/Os */
- /* Since globus_ftp_client_register_read() is brain-dead and doesn't
- let you specify an offset, we have to slurp the entire extent into
- memory and then parse out the pieces we want... Sucks, doesn't it?
-
- This should probably be done in chunks (preferably of a size
- set using a file hint), but that'll have to come later.
- --TB */
- if ( (result=globus_ftp_client_register_read(&(gridftp_fh[fd->fd_sys]),
- tmp,
- (globus_size_t)extent,
- readdiscontig_data_cb,
- (void *)(&bytes_read)))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_register_read",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- /* The ctl callback won't start till the data callbacks complete, so it's
- safe to wait on just the ctl callback */
- globus_mutex_lock(&readdiscontig_ctl_lock);
- while ( readdiscontig_ctl_done!=GLOBUS_TRUE )
- globus_cond_wait(&readdiscontig_ctl_cond,&readdiscontig_ctl_lock);
- globus_mutex_unlock(&readdiscontig_ctl_lock);
-
- globus_mutex_destroy(&readdiscontig_ctl_lock);
- globus_cond_destroy(&readdiscontig_ctl_cond);
-
- boff=0;
- nblks=0;
- goff=0;
- while ( boff < (count*btype_size) )
- {
- int i,blklen;
-
- for (i=0;i<flat_file->count;i++)
- {
- if ( (boff+flat_file->blocklens[i]) < (count*btype_size) )
- blklen=flat_file->blocklens[i];
- else
- blklen=(count*btype_size)-boff;
- if ( blklen > 0 )
- {
- goff=nblks*ftype_extent+flat_file->indices[i];
- memcpy((globus_byte_t *)buf+boff,tmp+goff,(size_t)blklen);
- boff+=blklen;
- if ( boff>=(count*btype_size) )
- break;
- }
- }
- nblks++;
- }
- ADIOI_Free(tmp);
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bytes_read);
-#endif
- if (file_ptr_type != ADIO_EXPLICIT_OFFSET)
- {
- fd->fp_ind += extent;
- fd->fp_sys_posn = fd->fp_ind;
- }
- else {
- fd->fp_sys_posn = offset + extent;
- }
-}
-
-void ADIOI_GRIDFTP_ReadStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
- /*
- int myrank, nprocs;
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
-#ifdef PRINT_ERR_MSG
- FPRINTF(stdout, "[%d/%d] ADIOI_GRIDFTP_ReadStrided called on %s\n", myrank,
- nprocs, fd->filename);
- FPRINTF(stdout, "[%d/%d] calling ADIOI_GEN_ReadStrided\n", myrank,
- nprocs);
-#endif
-
- ADIOI_GEN_ReadStrided(fd, buf, count, datatype, file_ptr_type, offset,
- status, error_code);
-
- */
-
- char myname[]="ADIOI_GRIDFTP_ReadStrided";
- int myrank, nprocs;
- int i,j;
- int buf_contig,file_contig;
- MPI_Aint btype_size,bufsize;
- globus_off_t start,disp;
- globus_size_t bytes_read;
- globus_byte_t *intermediate;
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
-
- MPI_Type_size_x(datatype,&btype_size);
- bufsize=count*btype_size;
- ADIOI_Datatype_iscontig(fd->filetype,&file_contig);
- ADIOI_Datatype_iscontig(datatype,&buf_contig);
- if ( buf_contig && !file_contig )
- {
- /* Contiguous in memory, discontig in file */
- ADIOI_GRIDFTP_ReadDiscontig(fd, buf, count, datatype,
- file_ptr_type, offset, status, error_code);
- }
- else if ( !buf_contig && file_contig )
- {
- /* Discontiguous in mem, contig in file -- comparatively easy */
- int posn=0;
-
- /* read contiguous data into intermediate buffer */
- intermediate=(globus_byte_t *)ADIOI_Malloc((size_t)bufsize);
- ADIOI_GRIDFTP_ReadContig(fd, intermediate, bufsize, MPI_BYTE,
- file_ptr_type, offset, status, error_code);
-
- /* explode contents of intermediate buffer into main buffer */
- MPI_Unpack(intermediate,bufsize,&posn,buf,count,datatype,fd->comm);
-
- ADIOI_Free(intermediate);
- }
- else if ( !buf_contig && !file_contig )
- {
- /* Discontig in both mem and file -- the hardest case */
- int posn=0;
-
- /* Read discontiguous data into intermediate buffer */
- intermediate=(globus_byte_t *)ADIOI_Malloc((size_t)bufsize);
- ADIOI_GRIDFTP_ReadDiscontig(fd, intermediate, bufsize, MPI_BYTE,
- file_ptr_type, offset, status, error_code);
-
- /* explode contents of intermediate buffer into main buffer */
- posn=0;
- MPI_Unpack(intermediate,bufsize,&posn,buf,count,datatype,fd->comm);
-
- ADIOI_Free(intermediate);
- }
- else
- {
- /* Why did you bother calling ReadStrided?!?!?! */
- ADIOI_GRIDFTP_ReadContig(fd, buf, count, datatype,
- file_ptr_type, offset, status, error_code);
- }
-
-}
-
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_resize.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_resize.c
deleted file mode 100644
index 96c0460..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_resize.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-
-static globus_mutex_t resize_lock;
-static globus_cond_t resize_cond;
-static globus_bool_t resize_done;
-static globus_bool_t resize_success;
-
-void resize_cb(void *myargs, globus_ftp_client_handle_t *handle,
- globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- globus_mutex_lock(&resize_lock);
- resize_success=GLOBUS_FALSE;
- globus_mutex_unlock(&resize_lock);
- }
- else
- {
- globus_mutex_lock(&resize_lock);
- resize_success=GLOBUS_TRUE;
- globus_mutex_unlock(&resize_lock);
- }
- globus_mutex_lock(&resize_lock);
- resize_done=GLOBUS_TRUE;
- globus_cond_signal(&resize_cond);
- globus_mutex_unlock(&resize_lock);
-}
-
-
-static void resize_wrdata_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error,
- globus_byte_t *buffer, globus_size_t length, globus_off_t offset,
- globus_bool_t eof)
-{
- if (error)
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- if (!eof)
- globus_ftp_client_register_read(handle,
- buffer,
- length,
- resize_wrdata_cb,
- myargs);
- return;
-}
-
-
-void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
-{
- int myrank, nprocs;
- char myname[]="ADIOI_GRIDFTP_Resize";
- globus_off_t fsize;
- globus_result_t result;
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
-
- /* Sanity check */
- if ( fd->access_mode&ADIO_RDONLY )
- {
- FPRINTF(stderr,"%s: attempt to resize read-only file %s!\n",
- myname,fd->filename);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", 0);
- return;
- }
-
- /* This routine is supposed to do the moral equivalent of truncate(),
- but there's not an equivalent operation in the globus_ftp_client API. */
- globus_mutex_init(&resize_lock,GLOBUS_NULL);
- globus_cond_init(&resize_cond,GLOBUS_NULL);
- resize_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_size(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- &(fsize),
- resize_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_size",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&resize_lock);
- while ( resize_done!=GLOBUS_TRUE )
- globus_cond_wait(&resize_lock,&resize_cond);
- if ( fsize < (globus_off_t)size )
- {
- /* The file is smaller than the requested size, so
- do a zero-byte write to where the new EOF should be. */
- globus_byte_t touchbuf=(globus_byte_t)'\0';
- resize_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_partial_put(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- GLOBUS_NULL,
- (globus_off_t)size,
- (globus_off_t)size,
- resize_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_partial_put",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
- if ( (result=globus_ftp_client_register_write(&(gridftp_fh[fd->fd_sys]),
- (globus_byte_t *)&touchbuf,
- 0,
- (globus_off_t)0,
- GLOBUS_TRUE,
- resize_wrdata_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_register_write",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&resize_lock);
- while ( resize_done!=GLOBUS_TRUE )
- globus_cond_wait(&resize_cond,&resize_lock);
- globus_mutex_unlock(&resize_lock);
- }
- else if ( fsize > (globus_off_t)size )
- {
- /* The file is bigger than the requested size, so
- we'll abuse globus_ftp_client_third_party_partial_put()
- into truncating it for us. */
- char *urlold;
- size_t urllen;
-
- urllen=strlen(fd->filename);
- urlold=(char *)ADIOI_Malloc(urllen+5);
- ADIOI_Snprintf(urlold,urllen+5,"%s.old",fd->filename);
- resize_done=GLOBUS_FALSE;
- resize_success=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_move(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- urlold,
- &(oattr[fd->fd_sys]),
- resize_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_move",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&resize_lock);
- while ( resize_done!=GLOBUS_TRUE )
- globus_cond_wait(&resize_cond,&resize_lock);
- globus_mutex_unlock(&resize_lock);
- if ( resize_success!=GLOBUS_TRUE )
- {
- *error_code = MPI_ERR_IO;
- return;
- }
- resize_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_partial_third_party_transfer(&(gridftp_fh[fd->fd_sys]),
- urlold,
- &(oattr[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- GLOBUS_NULL,
- 0,
- (globus_off_t)size,
- resize_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_partial_third_party_transfer",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&resize_lock);
- while ( resize_done!=GLOBUS_TRUE )
- globus_cond_wait(&resize_cond,&resize_lock);
- globus_mutex_unlock(&resize_lock);
- if ( resize_success!=GLOBUS_TRUE )
- {
- *error_code = MPI_ERR_IO;
- ADIOI_Error(fd,*error_code,myname);
- return;
- }
- resize_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_delete(&(gridftp_fh[fd->fd_sys]),
- urlold,
- &(oattr[fd->fd_sys]),
- resize_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_delete",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname, __LINE__,
- MPI_ERR_IO, "**io", "**io %s",
- globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- globus_mutex_lock(&resize_lock);
- while ( resize_done!=GLOBUS_TRUE )
- globus_cond_wait(&resize_cond,&resize_lock);
- globus_mutex_unlock(&resize_lock);
- if ( resize_success!=GLOBUS_TRUE )
- {
- *error_code = MPI_ERR_IO;
- ADIOI_Error(fd,*error_code,myname);
- return;
- }
- ADIOI_Free(urlold);
- }
- globus_mutex_destroy(&resize_lock);
- globus_cond_destroy(&resize_cond);
-}
-
-
-
-
-
diff --git a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_write.c b/src/mpi/romio/adio/ad_gridftp/ad_gridftp_write.c
deleted file mode 100644
index 22e2523..0000000
--- a/src/mpi/romio/adio/ad_gridftp/ad_gridftp_write.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_gridftp.h"
-#include "adioi.h"
-#include "adio_extern.h"
-
-static globus_mutex_t writecontig_ctl_lock;
-static globus_cond_t writecontig_ctl_cond;
-static globus_bool_t writecontig_ctl_done;
-static void writecontig_ctl_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- globus_mutex_lock(&writecontig_ctl_lock);
- if ( writecontig_ctl_done!=GLOBUS_TRUE )
- writecontig_ctl_done=GLOBUS_TRUE;
- globus_cond_signal(&writecontig_ctl_cond);
- globus_mutex_unlock(&writecontig_ctl_lock);
-#ifdef PRINT_ERR_MSG
- FPRINTF(stderr,"finished with contig write transaction\n");
-#endif /* PRINT_ERR_MSG */
- return;
-}
-
-static void writecontig_data_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error,
- globus_byte_t *buffer, globus_size_t length, globus_off_t offset,
- globus_bool_t eof)
-{
- globus_size_t *bytes_written;
-
- bytes_written=(globus_size_t *)myargs;
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- *bytes_written+=length;
- /* I don't understand why the data callback has to keep recalling register_write,
- but everything I've done and all the examples I've seen seem to require
- that behavior to work... */
- if ( !eof )
- {
- globus_ftp_client_register_write(handle,
- buffer,
- length,
- offset,
- GLOBUS_TRUE,
- writecontig_data_cb,
- (void *)(bytes_written));
- }
-#ifdef PRINT_ERR_MSG
- FPRINTF(stderr,"wrote %Ld bytes...",(long long)length);
-#endif /* PRINT_ERR_MSG */
- return;
-}
-
-
-static globus_mutex_t writediscontig_ctl_lock;
-static globus_cond_t writediscontig_ctl_cond;
-static globus_bool_t writediscontig_ctl_done;
-static void writediscontig_ctl_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
-{
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- globus_mutex_lock(&writediscontig_ctl_lock);
- if ( writediscontig_ctl_done!=GLOBUS_TRUE )
- writediscontig_ctl_done=GLOBUS_TRUE;
- globus_cond_signal(&writediscontig_ctl_cond);
- globus_mutex_unlock(&writediscontig_ctl_lock);
- return;
-}
-
-static void writediscontig_data_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error,
- globus_byte_t *buffer, globus_size_t length, globus_off_t offset,
- globus_bool_t eof)
-{
- globus_size_t *bytes_written;
-
- bytes_written=(globus_size_t *)myargs;
- if (error)
- {
- FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
- }
- *bytes_written+=length;
- /* I don't understand why the data callback has to keep recalling register_read,
- but everything I've done and all the examples I've seen seem to require
- that behavior to work... */
- if ( !eof )
- globus_ftp_client_register_write(handle,
- buffer,
- length,
- offset,
- eof,
- writediscontig_data_cb,
- (void *)(bytes_written));
- FPRINTF(stderr,"wrote %Ld bytes...",(long long)length);
- return;
-}
-
-
-void ADIOI_GRIDFTP_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
- char myname[]="ADIOI_GRIDFTP_WriteContig";
- int myrank, nprocs;
- MPI_Count datatype_size;
- globus_size_t len,bytes_written=0;
- globus_off_t goff;
- globus_result_t result;
-
- if ( fd->access_mode&ADIO_RDONLY )
- {
- *error_code=MPI_ERR_AMODE;
- return;
- }
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
- MPI_Type_size_x(datatype, &datatype_size);
-
- if (file_ptr_type != ADIO_EXPLICIT_OFFSET)
- {
- offset = fd->fp_ind;
- }
-
- /* Do the gridftp I/O transfer */
- goff = (globus_off_t)offset;
- len = ((globus_size_t)datatype_size)*((globus_size_t)count);
-
- globus_mutex_init(&writecontig_ctl_lock, GLOBUS_NULL);
- globus_cond_init(&writecontig_ctl_cond, GLOBUS_NULL);
- writecontig_ctl_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_partial_put(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- GLOBUS_NULL,
- goff,
- goff+(globus_off_t)len,
- writecontig_ctl_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_partial_put",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- if ( (result=globus_ftp_client_register_write(&(gridftp_fh[fd->fd_sys]),
- (globus_byte_t *)buf,
- len,
- goff,
- GLOBUS_TRUE,
- writecontig_data_cb,
- (void *)(&bytes_written)))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_register_write",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
-
- /* The ctl callback won't start till the data callbacks complete, so it's
- safe to wait on just the ctl callback */
- globus_mutex_lock(&writecontig_ctl_lock);
- while ( writecontig_ctl_done!=GLOBUS_TRUE )
- globus_cond_wait(&writecontig_ctl_cond,&writecontig_ctl_lock);
- globus_mutex_unlock(&writecontig_ctl_lock);
-
- globus_mutex_destroy(&writecontig_ctl_lock);
- globus_cond_destroy(&writecontig_ctl_cond);
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bytes_written);
-#endif
- if (file_ptr_type != ADIO_EXPLICIT_OFFSET)
- {
- offset = fd->fp_ind;
- fd->fp_ind += bytes_written;
- fd->fp_sys_posn = fd->fp_ind;
- }
- else {
- fd->fp_sys_posn = offset + bytes_written;
- }
-}
-
-
-void ADIOI_GRIDFTP_WriteDiscontig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
- char myname[]="ADIOI_GRIDFTP_WriteDiscontig";
- int myrank,nprocs;
- MPI_Aint btype_size,btype_extent;
- MPI_Aint ftype_size,ftype_extent;
- MPI_Aint etype_size;
- MPI_Aint extent;
- ADIOI_Flatlist_node *flat_file;
- int buf_contig,boff,i,nblks;
- globus_off_t start,end,goff;
- globus_size_t bytes_written;
- globus_result_t result;
-
- MPI_Comm_rank(fd->comm,&myrank);
- MPI_Comm_size(fd->comm,&nprocs);
- etype_size=fd->etype_size;
- MPI_Type_size_x(fd->filetype,&ftype_size);
- MPI_Type_extent(fd->filetype,&ftype_extent);
- /* This is arguably unnecessary, as this routine assumes that the
- buffer in memory is contiguous */
- MPI_Type_size_x(datatype,&btype_size);
- MPI_Type_extent(datatype,&btype_extent);
- ADIOI_Datatype_iscontig(datatype,&buf_contig);
-
- if ( ( btype_extent!=btype_size ) || ( ! buf_contig ) )
- {
- FPRINTF(stderr,"[%d/%d] %s called with discontigous memory buffer\n",
- myrank,nprocs,myname);
- fflush(stderr);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- /* from here we can assume btype_extent==btype_size */
-
- /* Flatten out fd->filetype so we know which blocks to skip */
- flat_file = ADIOI_Flatten_and_find(fd->filetype);
-
- /* Figure out how big the area to write is */
- /* ASSUMPTION: ftype_size is an integer multiple of btype_size or vice versa. */
- start=(globus_off_t)(offset*etype_size);
- goff=start;
- boff=0;
- extent=0;
- nblks=0;
- while ( boff < (count*btype_size) )
- {
- int blklen;
-
- for (i=0;i<flat_file->count;i++)
- {
- if ( (boff+flat_file->blocklens[i]) < (count*btype_size) )
- blklen=flat_file->blocklens[i];
- else
- blklen=(count*btype_size)-boff;
- boff+=blklen;
- extent=MAX(extent,nblks*ftype_extent+flat_file->indices[i]+blklen);
- if ( boff>=(count*btype_size) )
- break;
- }
- nblks++;
- }
- if ( extent < count*btype_size )
- {
- FPRINTF(stderr,"[%d/%d] %s error in computing extent -- extent %d is smaller than total bytes requested %d!\n",
- myrank,nprocs,myname,extent,count*btype_size);
- fflush(stderr);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
- end=start+(globus_off_t)extent;
- FPRINTF(stderr,"[%d/%d] %s writing %d bytes into extent of %d bytes starting at offset %Ld\n",
- myrank,nprocs,myname,count*btype_size,extent,(long long)start);
- fflush(stderr);
-
- /* start up the globus partial write */
- globus_mutex_init(&writediscontig_ctl_lock, GLOBUS_NULL);
- globus_cond_init(&writediscontig_ctl_cond, GLOBUS_NULL);
- writediscontig_ctl_done=GLOBUS_FALSE;
- if ( (result=globus_ftp_client_partial_put(&(gridftp_fh[fd->fd_sys]),
- fd->filename,
- &(oattr[fd->fd_sys]),
- GLOBUS_NULL,
- start,
- end,
- writediscontig_ctl_cb,
- GLOBUS_NULL))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_partial_get",myname,result);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", globus_object_printable_to_string(globus_error_get(result)));
- return;
- }
-
- /* Do all the actual I/Os */
- boff=0;
- nblks=0;
- while ( boff < (count*btype_size) )
- {
- int i,blklen;
-
- for (i=0;i<flat_file->count;i++)
- {
- if ( (boff+flat_file->blocklens[i]) < (count*btype_size) )
- blklen=flat_file->blocklens[i];
- else
- blklen=(count*btype_size)-boff;
- if ( blklen > 0 )
- {
- goff=start+nblks*ftype_extent+((globus_off_t)flat_file->indices[i]);
- /*
- FPRINTF(stderr,"[%d/%d] %s writing %d bytes from boff=%d at goff=%Ld\n",myrank,nprocs,myname,blklen,boff,goff);
- */
- if ( (result=globus_ftp_client_register_write(&(gridftp_fh[fd->fd_sys]),
- ((globus_byte_t *)buf)+boff,
- (globus_size_t)blklen,
- goff,
- GLOBUS_TRUE,
- writediscontig_data_cb,
- (void *)(&bytes_written)))!=GLOBUS_SUCCESS )
- {
- globus_err_handler("globus_ftp_client_register_write",myname,result);
- *error_code=MPI_ERR_IO;
- ADIOI_Error(fd,*error_code,myname);
- return;
- }
- boff+=blklen;
- if ( boff>=(count*btype_size) )
- break;
- }
- }
- nblks++;
- }
-
-
- /* The ctl callback won't start till the data callbacks complete, so it's
- safe to wait on just the ctl callback */
- globus_mutex_lock(&writediscontig_ctl_lock);
- while ( writediscontig_ctl_done!=GLOBUS_TRUE )
- globus_cond_wait(&writediscontig_ctl_cond,&writediscontig_ctl_lock);
- globus_mutex_unlock(&writediscontig_ctl_lock);
- globus_mutex_destroy(&writediscontig_ctl_lock);
- globus_cond_destroy(&writediscontig_ctl_cond);
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bytes_written);
-#endif
- if (file_ptr_type != ADIO_EXPLICIT_OFFSET)
- {
- fd->fp_ind += extent;
- fd->fp_sys_posn = fd->fp_ind;
- }
- else {
- fd->fp_sys_posn = offset + extent;
- }
-}
-
-
-#define GRIDFTP_USE_GENERIC_STRIDED
-void ADIOI_GRIDFTP_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
-#ifdef GRIDFTP_USE_GENERIC_STRIDED
- int myrank, nprocs;
-
- if ( fd->access_mode&ADIO_RDONLY )
- {
- *error_code=MPI_ERR_AMODE;
- return;
- }
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
-
- ADIOI_GEN_WriteStrided(fd, buf, count, datatype, file_ptr_type, offset,
- status, error_code);
- return;
-#else
- char myname[]="ADIOI_GRIDFTP_WriteStrided";
- int myrank, nprocs;
- int buf_contig,file_contig;
- MPI_Aint btype_size,bufsize;
- globus_byte_t *intermediate;
-
- *error_code = MPI_SUCCESS;
-
- MPI_Comm_size(fd->comm, &nprocs);
- MPI_Comm_rank(fd->comm, &myrank);
-
- MPI_Type_size_x(datatype,&btype_size);
- bufsize=count*btype_size;
- ADIOI_Datatype_iscontig(fd->filetype,&file_contig);
- ADIOI_Datatype_iscontig(datatype,&buf_contig);
- if ( buf_contig && !file_contig )
- {
- /* Contiguous in memory, discontig in file */
- FPRINTF(stderr,"[%d/%d] %s called w/ contig mem, discontig file\n",
- myrank,nprocs,myname);
- fflush(stderr);
-
- ADIOI_GRIDFTP_WriteDiscontig(fd, buf, count, datatype,
- file_ptr_type, offset, status, error_code);
- }
- else if ( !buf_contig && file_contig )
- {
- /* Discontiguous in mem, contig in file -- comparatively easy */
- int posn=0;
-
- FPRINTF(stderr,"[%d/%d] %s called w/ discontig mem, contig file\n",
- myrank,nprocs,myname);
- fflush(stderr);
-
-
- /* squeeze contents of main buffer into intermediate buffer*/
- intermediate=(globus_byte_t *)ADIOI_Malloc((size_t)bufsize);
- MPI_Pack(buf,count,datatype,intermediate,bufsize,&posn,fd->comm);
-
- /* write contiguous data from intermediate buffer */
- ADIOI_GRIDFTP_WriteContig(fd, intermediate, bufsize, MPI_BYTE,
- file_ptr_type, offset, status, error_code);
-
- ADIOI_Free(intermediate);
- }
- else if ( !buf_contig && !file_contig )
- {
- /* Discontig in both mem and file -- the hardest case */
- int posn=0;
-
- FPRINTF(stderr,"[%d/%d] %s called w/ discontig mem, discontig file\n",
- myrank,nprocs,myname);
- fflush(stderr);
-
- /* squeeze contents of main buffer into intermediate buffer*/
- intermediate=(globus_byte_t *)ADIOI_Malloc((size_t)bufsize);
- MPI_Pack(buf,count,datatype,intermediate,bufsize,&posn,fd->comm);
-
- /* write contiguous data from intermediate buffer */
- ADIOI_GRIDFTP_WriteDiscontig(fd, intermediate, bufsize, MPI_BYTE,
- file_ptr_type, offset, status, error_code);
-
- ADIOI_Free(intermediate);
- }
- else
- {
- /* Why did you bother calling WriteStrided?!?!?! */
- FPRINTF(stderr,"[%d/%d] Why the heck did you call %s with contiguous buffer *and* file types?\n",
- myrank,nprocs,myname);
- ADIOI_GRIDFTP_WriteContig(fd, buf, count, datatype,
- file_ptr_type, offset, status, error_code);
- }
-#endif /* ! GRIDFTP_USE_GENERIC_STRIDED */
-}
-
diff --git a/src/mpi/romio/adio/ad_gridftp/globus_routines.c b/src/mpi/romio/adio/ad_gridftp/globus_routines.c
deleted file mode 100644
index 1cca367..0000000
--- a/src/mpi/romio/adio/ad_gridftp/globus_routines.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <fcntl.h>
-#include "adio.h"
-#include <globus_ftp_client.h>
-
-/* Here are the canonical definitions of the extern's referenced by
- ad_gridftp.h */
-int num_gridftp_handles=0;
-#ifndef ADIO_GRIDFTP_HANDLES_MAX
-#define ADIO_GRIDFTP_HANDLES_MAX 200
-#endif /* ! ADIO_GRIDFTP_HANDLES_MAX */
-/* having to keep not one but two big global tables sucks... */
-globus_ftp_client_handle_t gridftp_fh[ADIO_GRIDFTP_HANDLES_MAX];
-globus_ftp_client_operationattr_t oattr[ADIO_GRIDFTP_HANDLES_MAX];
-
-void globus_err_handler(const char *routine, const char *caller,
- globus_result_t result)
-{
- int myrank,nprocs;
- globus_object_t *err;
-
- MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
- MPI_Comm_size(MPI_COMM_WORLD,&nprocs);
- err = globus_error_get(result);
- FPRINTF(stderr, "[%d/%d] %s error \"%s\", called from %s\n",
- myrank,nprocs,routine,globus_object_printable_to_string(err),caller);
-}
diff --git a/src/mpi/romio/adio/ad_hfs/.state-cache b/src/mpi/romio/adio/ad_hfs/.state-cache
deleted file mode 100644
index 2a2e7f8..0000000
--- a/src/mpi/romio/adio/ad_hfs/.state-cache
+++ /dev/null
@@ -1,25 +0,0 @@
-<dir>
-<file name="ad_hfs_read.c" info="1447123141"/>
-<file name="ad_hfs_fcntl.c" info="1447123141"/>
-<file name="ad_hfs_write.c" info="1447123141"/>
-<file name="ad_hfs.c" info="1447123141"/>
-<file name="ad_hfs_resize.c" info="1447123141"/>
-<file name="ad_hfs_open.c" info="1447123141"/>
-<file name="ad_hfs.h" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_hfs_read.c">
-</fileinfo>
-<fileinfo name="ad_hfs_fcntl.c">
-</fileinfo>
-<fileinfo name="ad_hfs_write.c">
-</fileinfo>
-<fileinfo name="ad_hfs.c">
-</fileinfo>
-<fileinfo name="ad_hfs_resize.c">
-</fileinfo>
-<fileinfo name="ad_hfs_open.c">
-</fileinfo>
-<fileinfo name="ad_hfs.h">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_hfs/Makefile.mk b/src/mpi/romio/adio/ad_hfs/Makefile.mk
deleted file mode 100644
index 318b507..0000000
--- a/src/mpi/romio/adio/ad_hfs/Makefile.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_AD_HFS
-
-noinst_HEADERS += adio/ad_hfs/ad_hfs.h
-
-romio_other_sources += \
- adio/ad_hfs/ad_hfs_read.c \
- adio/ad_hfs/ad_hfs_open.c \
- adio/ad_hfs/ad_hfs_write.c \
- adio/ad_hfs/ad_hfs_fcntl.c \
- adio/ad_hfs/ad_hfs_resize.c \
- adio/ad_hfs/ad_hfs.c
-
-endif BUILD_AD_HFS
-
diff --git a/src/mpi/romio/adio/ad_hfs/README b/src/mpi/romio/adio/ad_hfs/README
deleted file mode 100644
index 933677b..0000000
--- a/src/mpi/romio/adio/ad_hfs/README
+++ /dev/null
@@ -1 +0,0 @@
-This code is no longer supported.
diff --git a/src/mpi/romio/adio/ad_hfs/ad_hfs.c b/src/mpi/romio/adio/ad_hfs/ad_hfs.c
deleted file mode 100644
index 5b34354..0000000
--- a/src/mpi/romio/adio/ad_hfs/ad_hfs.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2001 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_hfs.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_HFS_operations = {
- ADIOI_HFS_Open, /* Open */
- ADIOI_HFS_ReadContig, /* ReadContig */
- ADIOI_HFS_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_HFS_Fcntl, /* Fcntl */
- ADIOI_GEN_SetInfo, /* SetInfo */
- ADIOI_GEN_ReadStrided, /* ReadStrided */
- ADIOI_GEN_WriteStrided, /* WriteStrided */
- ADIOI_GEN_Close, /* Close */
- ADIOI_FAKE_IreadContig, /* IreadContig */
- ADIOI_FAKE_IwriteContig, /* IwriteContig */
- ADIOI_FAKE_IODone, /* ReadDone */
- ADIOI_FAKE_IODone, /* WriteDone */
- ADIOI_FAKE_IOComplete, /* ReadComplete */
- ADIOI_FAKE_IOComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_GEN_Flush, /* Flush */
- ADIOI_HFS_Resize, /* Resize */
- ADIOI_GEN_Delete, /* Delete */
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
diff --git a/src/mpi/romio/adio/ad_hfs/ad_hfs.h b/src/mpi/romio/adio/ad_hfs/ad_hfs.h
deleted file mode 100644
index 2950aa5..0000000
--- a/src/mpi/romio/adio/ad_hfs/ad_hfs.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#ifndef AD_HFS_INCLUDE
-#define AD_HFS_INCLUDE
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include "adio.h"
-#ifdef SPPUX
-# include <sys/cnx_types.h>
-# include <sys/puio.h>
-# include <cnx_unistd.h>
-#endif
-
-void ADIOI_HFS_Open(ADIO_File fd, int *error_code);
-void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_HFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
- *error_code);
-void ADIOI_HFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
-
-#endif
diff --git a/src/mpi/romio/adio/ad_hfs/ad_hfs_fcntl.c b/src/mpi/romio/adio/ad_hfs/ad_hfs_fcntl.c
deleted file mode 100644
index 460c736..0000000
--- a/src/mpi/romio/adio/ad_hfs/ad_hfs_fcntl.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_hfs.h"
-#include "adio_extern.h"
-
-#ifndef HAVE_LSEEK64
-#define lseek64 lseek
-#endif
-void ADIOI_HFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code)
-{
- int i, ntimes, err;
- ADIO_Offset curr_fsize, alloc_size, size, len, done;
- ADIO_Status status;
- char *buf;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_HFS_FCNTL";
-#endif
-
- switch(flag) {
- case ADIO_FCNTL_GET_FSIZE:
- fcntl_struct->fsize = lseek64(fd->fd_sys, 0, SEEK_END);
-#ifdef HPUX
- if (fd->fp_sys_posn != -1)
- lseek64(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
-/* not required in SPPUX since there we use pread/pwrite */
-#endif
- if (fcntl_struct->fsize == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- /* will be called by one process only */
-
-#ifdef HPUX
- err = prealloc64(fd->fd_sys, fcntl_struct->diskspace);
- /* prealloc64 works only if file is of zero length */
- if (err && (errno != ENOTEMPTY)) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- return;
- }
- if (err && (errno == ENOTEMPTY)) {
-#endif
-
-#ifdef SPPUX
- /* SPPUX has no prealloc64. therefore, use prealloc
- if size < (2GB - 1), otherwise use long method. */
- if (fcntl_struct->diskspace <= 2147483647) {
- err = prealloc(fd->fd_sys, (off_t) fcntl_struct->diskspace);
- if (err && (errno != ENOTEMPTY)) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- return;
- }
- }
-
- if ((fcntl_struct->diskspace > 2147483647) ||
- (err && (errno == ENOTEMPTY))) {
-#endif
- ADIOI_GEN_Prealloc(fd,fcntl_struct->diskspace, error_code);
- }
- ADIOI_Free(buf);
-#ifdef HPUX
- if (fd->fp_sys_posn != -1)
- lseek64(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
- /* not required in SPPUX since there we use pread/pwrite */
-#endif
- }
- *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_ATOMICITY:
- fd->atomicity = (fcntl_struct->atomicity == 0) ? 0 : 1;
- *error_code = MPI_SUCCESS;
- break;
-
- default:
- FPRINTF(stderr, "Unknown flag passed to ADIOI_HFS_Fcntl\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
-}
diff --git a/src/mpi/romio/adio/ad_hfs/ad_hfs_open.c b/src/mpi/romio/adio/ad_hfs/ad_hfs_open.c
deleted file mode 100644
index 46ee284..0000000
--- a/src/mpi/romio/adio/ad_hfs/ad_hfs_open.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_hfs.h"
-
-#ifndef HAVE_LSEEK64
-#define lseek64 lseek
-#endif
-
-void ADIOI_HFS_Open(ADIO_File fd, int *error_code)
-{
- int perm, old_mask, amode;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_HFS_OPEN";
-#endif
-
- if (fd->perm == ADIO_PERM_NULL) {
- old_mask = umask(022);
- umask(old_mask);
- perm = old_mask ^ 0666;
- }
- else perm = fd->perm;
-
- amode = 0;
- if (fd->access_mode & ADIO_CREATE)
- amode = amode | O_CREAT;
- if (fd->access_mode & ADIO_RDONLY)
- amode = amode | O_RDONLY;
- if (fd->access_mode & ADIO_WRONLY)
- amode = amode | O_WRONLY;
- if (fd->access_mode & ADIO_RDWR)
- amode = amode | O_RDWR;
- if (fd->access_mode & ADIO_EXCL)
- amode = amode | O_EXCL;
-
- fd->fd_sys = open64(fd->filename, amode, perm);
- fd->fd_direct = -1;
-
- if ((fd->fd_sys != -1) && (fd->access_mode & ADIO_APPEND)) {
- fd->fp_ind = lseek64(fd->fd_sys, 0, SEEK_END);
-#ifdef HPUX
- fd->fp_sys_posn = fd->fp_ind;
-#endif
- }
-
-#ifdef SPPUX
- fd->fp_sys_posn = -1; /* set it to null bec. we use pread, pwrite*/
-#endif
-
- if (fd->fd_sys == -1 ) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(ADIO_FILE_NULL, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_hfs/ad_hfs_read.c b/src/mpi/romio/adio/ad_hfs/ad_hfs_read.c
deleted file mode 100644
index eac03ab..0000000
--- a/src/mpi/romio/adio/ad_hfs/ad_hfs_read.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_hfs.h"
-
-#ifndef HAVE_LSEEK64
-#define lseek64 lseek
-#endif
-
-void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_HFS_READCONTIG";
-#endif
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
-#ifdef SPPUX
- fd->fp_sys_posn = -1; /* set it to null, since we are using pread */
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
- err = pread64(fd->fd_sys, buf, len, offset);
- else { /* read from curr. location of ind. file pointer */
- err = pread64(fd->fd_sys, buf, len, fd->fp_ind);
- fd->fp_ind += err;
- }
-#endif
-
-#ifdef HPUX
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset)
- lseek64(fd->fd_sys, offset, SEEK_SET);
- err = read(fd->fd_sys, buf, len);
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* read from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind)
- lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
- err = read(fd->fd_sys, buf, len);
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-#endif
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1 ) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = (err == -1) ? MPI_ERR_UNKNOWN : MPI_SUCCESS;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_hfs/ad_hfs_resize.c b/src/mpi/romio/adio/ad_hfs/ad_hfs_resize.c
deleted file mode 100644
index de24ad6..0000000
--- a/src/mpi/romio/adio/ad_hfs/ad_hfs_resize.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_hfs.h"
-
-void ADIOI_HFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
-{
- int err;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_HFS_RESIZE";
-#endif
-
- err = ftruncate64(fd->fd_sys, size);
- if (err == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_hfs/ad_hfs_write.c b/src/mpi/romio/adio/ad_hfs/ad_hfs_write.c
deleted file mode 100644
index 4bffa82..0000000
--- a/src/mpi/romio/adio/ad_hfs/ad_hfs_write.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_hfs.h"
-
-#ifndef HAVE_LSEEK64
-#define lseek64 lseek
-#endif
-
-void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_HFS_WRITECONTIG";
-#endif
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
-#ifdef SPPUX
- fd->fp_sys_posn = -1; /* set it to null, since we are using pwrite */
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
- err = pwrite64(fd->fd_sys, buf, len, offset);
- else { /* write from curr. location of ind. file pointer */
- err = pwrite64(fd->fd_sys, buf, len, fd->fp_ind);
- fd->fp_ind += err;
- }
-#endif
-
-#ifdef HPUX
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset)
- lseek64(fd->fd_sys, offset, SEEK_SET);
- err = write(fd->fd_sys, buf, len);
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* write from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind)
- lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
- err = write(fd->fd_sys, buf, len);
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-#endif
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_SUCCESS;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_lustre/.state-cache b/src/mpi/romio/adio/ad_lustre/.state-cache
index c881a75..ce21de9 100644
--- a/src/mpi/romio/adio/ad_lustre/.state-cache
+++ b/src/mpi/romio/adio/ad_lustre/.state-cache
@@ -1,31 +1,31 @@
<dir>
-<file name="ad_lustre_open.c" info="1447123141"/>
-<file name="ad_lustre_wrstr.c" info="1447123141"/>
-<file name="ad_lustre_aggregate.c" info="1447123141"/>
-<file name="ad_lustre.c" info="1447123141"/>
-<file name="ad_lustre_rwcontig.c" info="1447123141"/>
-<file name="ad_lustre_fcntl.c" info="1447123141"/>
-<file name="ad_lustre_wrcoll.c" info="1447123141"/>
-<file name="ad_lustre_hints.c" info="1447123141"/>
-<file name="ad_lustre.h" info="1447123141"/>
+<file name="ad_lustre_fcntl.c" info="1478973152"/>
+<file name="ad_lustre_rwcontig.c" info="1478973152"/>
+<file name="ad_lustre.h" info="1478973152"/>
+<file name="ad_lustre.c" info="1478973152"/>
+<file name="ad_lustre_open.c" info="1478973152"/>
+<file name="ad_lustre_wrstr.c" info="1478973152"/>
+<file name="ad_lustre_aggregate.c" info="1478973152"/>
+<file name="ad_lustre_wrcoll.c" info="1478973152"/>
+<file name="ad_lustre_hints.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_lustre_open.c">
+<fileinfo name="ad_lustre_fcntl.c">
</fileinfo>
-<fileinfo name="ad_lustre_wrstr.c">
+<fileinfo name="ad_lustre_rwcontig.c">
</fileinfo>
-<fileinfo name="ad_lustre_aggregate.c">
+<fileinfo name="ad_lustre.h">
</fileinfo>
<fileinfo name="ad_lustre.c">
</fileinfo>
-<fileinfo name="ad_lustre_rwcontig.c">
+<fileinfo name="ad_lustre_open.c">
</fileinfo>
-<fileinfo name="ad_lustre_fcntl.c">
+<fileinfo name="ad_lustre_wrstr.c">
+</fileinfo>
+<fileinfo name="ad_lustre_aggregate.c">
</fileinfo>
<fileinfo name="ad_lustre_wrcoll.c">
</fileinfo>
<fileinfo name="ad_lustre_hints.c">
</fileinfo>
-<fileinfo name="ad_lustre.h">
-</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre.h b/src/mpi/romio/adio/ad_lustre/ad_lustre.h
index edd2bd3..27f13e7 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre.h
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre.h
@@ -29,6 +29,7 @@
#include <sys/ioctl.h>
#include <lustre/lustre_user.h>
#include "adio.h"
+#include "ad_tuning.h"
/*#include "adioi.h"*/
#ifdef HAVE_SIGNAL_H
@@ -88,7 +89,7 @@ void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list,
int *count_my_req_procs_ptr,
int **count_my_req_per_proc_ptr,
ADIOI_Access **my_req_ptr,
- int ***buf_idx_ptr);
+ ADIO_Offset ***buf_idx_ptr);
int ADIOI_LUSTRE_Calc_aggregator(ADIO_File fd, ADIO_Offset off,
ADIO_Offset *len, int *striping_info);
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre_aggregate.c b/src/mpi/romio/adio/ad_lustre/ad_lustre_aggregate.c
index cd55282..a9840cc 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_aggregate.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_aggregate.c
@@ -61,7 +61,7 @@ void ADIOI_LUSTRE_Get_striping_info(ADIO_File fd, int **striping_info_ptr,
* e.g. if stripe_count=20, nprocs_for_coll=42 and CO=3 then
* avail_cb_nodes should be equal to 40 */
avail_cb_nodes =
- stripe_count * ADIOI_MIN(nprocs_for_coll/stripe_count, CO);
+ stripe_count * MPL_MIN(nprocs_for_coll/stripe_count, CO);
else {
/* nprocs_for_coll is less than stripe_count */
/* avail_cb_nodes should divide stripe_count */
@@ -140,13 +140,13 @@ void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list,
int *count_my_req_procs_ptr,
int **count_my_req_per_proc_ptr,
ADIOI_Access **my_req_ptr,
- int ***buf_idx_ptr)
+ ADIO_Offset ***buf_idx_ptr)
{
/* Nothing different from ADIOI_Calc_my_req(), except calling
* ADIOI_Lustre_Calc_aggregator() instead of the old one */
- int *count_my_req_per_proc, count_my_req_procs, **buf_idx;
+ int *count_my_req_per_proc, count_my_req_procs;
int i, l, proc;
- ADIO_Offset avail_len, rem_len, curr_idx, off;
+ ADIO_Offset avail_len, rem_len, curr_idx, off, **buf_idx;
ADIOI_Access *my_req;
*count_my_req_per_proc_ptr = (int *) ADIOI_Calloc(nprocs, sizeof(int));
@@ -157,7 +157,7 @@ void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list,
* MPI_Alltoall later on.
*/
- buf_idx = (int **) ADIOI_Malloc(nprocs * sizeof(int*));
+ buf_idx = (ADIO_Offset **) ADIOI_Malloc(nprocs * sizeof(ADIO_Offset *));
/* one pass just to calculate how much space to allocate for my_req;
* contig_access_count was calculated way back in ADIOI_Calc_my_off_len()
@@ -201,8 +201,8 @@ void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list,
/* initialize buf_idx vectors */
for (i = 0; i < nprocs; i++) {
/* add one to count_my_req_per_proc[i] to avoid zero size malloc */
- buf_idx[i] = (int *) ADIOI_Malloc((count_my_req_per_proc[i] + 1)
- * sizeof(int));
+ buf_idx[i] = (ADIO_Offset *) ADIOI_Malloc((count_my_req_per_proc[i] + 1)
+ * sizeof(ADIO_Offset));
}
/* now allocate space for my_req, offset, and len */
@@ -235,9 +235,8 @@ void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list,
l = my_req[proc].count;
- ADIOI_Assert(curr_idx == (int) curr_idx);
ADIOI_Assert(l < count_my_req_per_proc[proc]);
- buf_idx[proc][l] = (int) curr_idx;
+ buf_idx[proc][l] = curr_idx;
curr_idx += avail_len;
rem_len = len_list[i] - avail_len;
@@ -259,9 +258,8 @@ void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list,
striping_info);
l = my_req[proc].count;
- ADIOI_Assert(curr_idx == (int) curr_idx);
ADIOI_Assert(l < count_my_req_per_proc[proc]);
- buf_idx[proc][l] = (int) curr_idx;
+ buf_idx[proc][l] = curr_idx;
curr_idx += avail_len;
rem_len -= avail_len;
@@ -310,8 +308,13 @@ int ADIOI_LUSTRE_Docollect(ADIO_File fd, int contig_access_count,
fd->comm);
MPI_Allreduce(&contig_access_count, &total_access_count, 1, MPI_INT, MPI_SUM,
fd->comm);
- /* estimate average req_size */
- avg_req_size = (int)(total_req_size / total_access_count);
+ /* avoid possible divide-by-zero) */
+ if (total_access_count != 0) {
+ /* estimate average req_size */
+ avg_req_size = (int)(total_req_size / total_access_count);
+ } else {
+ avg_req_size = 0;
+ }
/* get hint of big_req_size */
big_req_size = fd->hints->fs_hints.lustre.coll_threshold;
/* Don't perform collective I/O if there are big requests */
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre_fcntl.c b/src/mpi/romio/adio/ad_lustre/ad_lustre_fcntl.c
index a4bd6fc..f322835 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_fcntl.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_fcntl.c
@@ -45,14 +45,14 @@ void ADIOI_LUSTRE_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
curr_fsize = lseek(fd->fd_sys, 0, SEEK_END);
alloc_size = fcntl_struct->diskspace;
- size = ADIOI_MIN(curr_fsize, alloc_size);
+ size = MPL_MIN(curr_fsize, alloc_size);
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
buf = (char *) ADIOI_Malloc(ADIOI_PREALLOC_BUFSZ);
done = 0;
for (i=0; i<ntimes; i++) {
- len = ADIOI_MIN(size-done, ADIOI_PREALLOC_BUFSZ);
+ len = MPL_MIN(size-done, ADIOI_PREALLOC_BUFSZ);
ADIO_ReadContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET, done,
&status, error_code);
if (*error_code != MPI_SUCCESS) {
@@ -72,7 +72,7 @@ void ADIOI_LUSTRE_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
size = alloc_size - curr_fsize;
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
for (i=0; i<ntimes; i++) {
- len = ADIOI_MIN(alloc_size-done, ADIOI_PREALLOC_BUFSZ);
+ len = MPL_MIN(alloc_size-done, ADIOI_PREALLOC_BUFSZ);
ADIO_WriteContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET,
done, &status, error_code);
if (*error_code != MPI_SUCCESS) return;
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre_hints.c b/src/mpi/romio/adio/ad_lustre/ad_lustre_hints.c
index 0046a24..1d40c86 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_hints.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_hints.c
@@ -20,7 +20,7 @@ void ADIOI_LUSTRE_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
char *value;
int flag;
ADIO_Offset stripe_val[3], str_factor = -1, str_unit=0, start_iodev=-1;
- int err, myrank;
+ int myrank;
static char myname[] = "ADIOI_LUSTRE_SETINFO";
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre_open.c b/src/mpi/romio/adio/ad_lustre/ad_lustre_open.c
index a3b03be..9028aec 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_open.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_open.c
@@ -91,8 +91,9 @@ void ADIOI_LUSTRE_Open(ADIO_File fd, int *error_code)
/* It was strange and buggy to open the file in the hint path. Instead,
* we'll apply the file tunings at open time */
if ((amode & O_CREAT) && set_layout ) {
- /* if user has specified striping info, process 0 tries to set it */
- if (!myrank) {
+ /* if user has specified striping info, first aggregator tries to set
+ * it */
+ if (myrank == fd->hints->ranklist[0] || fd->comm == MPI_COMM_SELF) {
lum->lmm_magic = LOV_USER_MAGIC;
lum->lmm_pattern = 0;
/* crude check for overflow of lustre internal datatypes.
@@ -138,7 +139,7 @@ void ADIOI_LUSTRE_Open(ADIO_File fd, int *error_code)
sprintf(value, "%d", lum->lmm_stripe_count);
ADIOI_Info_set(fd->info, "striping_factor", value);
- fd->hints->fs_hints.lustre.start_iodevice = lum->lmm_stripe_offset;
+ fd->hints->start_iodevice = lum->lmm_stripe_offset;
sprintf(value, "%d", lum->lmm_stripe_offset);
ADIOI_Info_set(fd->info, "romio_lustre_start_iodevice", value);
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre_rwcontig.c b/src/mpi/romio/adio/ad_lustre/ad_lustre_rwcontig.c
index cb187a3..ffd096a 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_rwcontig.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_rwcontig.c
@@ -16,12 +16,12 @@
#define LUSTRE_MEMALIGN (1<<12) /* to use page_shift */
-static void ADIOI_LUSTRE_Aligned_Mem_File_Write(ADIO_File fd, const void *buf, int len,
- ADIO_Offset offset, int *err);
-static void ADIOI_LUSTRE_Aligned_Mem_File_Write(ADIO_File fd, const void *buf, int len,
- ADIO_Offset offset, int *err)
+static void ADIOI_LUSTRE_Aligned_Mem_File_Write(ADIO_File fd, const void *buf, MPI_Count len,
+ ADIO_Offset offset, ssize_t *err);
+static void ADIOI_LUSTRE_Aligned_Mem_File_Write(ADIO_File fd, const void *buf, MPI_Count len,
+ ADIO_Offset offset, ssize_t *err)
{
- int rem, size, nbytes;
+ ssize_t rem, size, nbytes;
if (!(len % fd->d_miniosz) && (len >= fd->d_miniosz)) {
*err = pwrite(fd->fd_direct, buf, len, offset);
} else if (len < fd->d_miniosz) {
@@ -29,18 +29,22 @@ static void ADIOI_LUSTRE_Aligned_Mem_File_Write(ADIO_File fd, const void *buf, i
} else {
rem = len % fd->d_miniosz;
size = len - rem;
- nbytes = pwrite(fd->fd_direct, buf, size, offset);
- nbytes += pwrite(fd->fd_sys, ((char *)buf) + size, rem, offset+size);
- *err = nbytes;
+ *err = pwrite(fd->fd_direct, buf, size, offset);
+ if (*err == -1) return;
+ nbytes = *err;
+ *err = pwrite(fd->fd_sys, ((char *)buf) + size, rem, offset+size);
+ if (*err == -1) return;
+ *err += nbytes;
}
}
-static void ADIOI_LUSTRE_Aligned_Mem_File_Read(ADIO_File fd, const void *buf, int len,
- ADIO_Offset offset, int *err);
-static void ADIOI_LUSTRE_Aligned_Mem_File_Read(ADIO_File fd, const void *buf, int len,
- ADIO_Offset offset, int *err)
+static void ADIOI_LUSTRE_Aligned_Mem_File_Read(ADIO_File fd, const void *buf, MPI_Count len,
+ ADIO_Offset offset, ssize_t *err);
+static void ADIOI_LUSTRE_Aligned_Mem_File_Read(ADIO_File fd, const void *buf, MPI_Count len,
+ ADIO_Offset offset, ssize_t *err)
{
- int rem, size, nbytes;
+ MPI_Count rem, size;
+ ssize_t nbytes;
if (!(len % fd->d_miniosz) && (len >= fd->d_miniosz))
*err = pread(fd->fd_direct, (void *)buf, len, offset);
else if (len < fd->d_miniosz)
@@ -48,69 +52,83 @@ static void ADIOI_LUSTRE_Aligned_Mem_File_Read(ADIO_File fd, const void *buf, in
else {
rem = len % fd->d_miniosz;
size = len - rem;
- nbytes = pread(fd->fd_direct, (void *)buf, size, offset);
- nbytes += pread(fd->fd_sys, ((char *)buf) + size, rem, offset+size);
- *err = nbytes;
+ *err = pread(fd->fd_direct, (void *)buf, size, offset);
+ if (*err == -1) return;
+ nbytes = *err;
+ *err = pread(fd->fd_sys, ((char *)buf) + size, rem, offset+size);
+ if (*err == -1) return;
+ *err += nbytes;
}
}
-
-static int ADIOI_LUSTRE_Directio(ADIO_File fd, const void *buf, int len,
+static ssize_t ADIOI_LUSTRE_Directio(ADIO_File fd, const void *buf, MPI_Count len,
off_t offset, int rw);
-static int ADIOI_LUSTRE_Directio(ADIO_File fd, const void *buf, int len,
+static ssize_t ADIOI_LUSTRE_Directio(ADIO_File fd, const void *buf, MPI_Count len,
off_t offset, int rw)
{
- int err=-1, diff, size=len, nbytes = 0;
+ ssize_t err=-1, diff, nbytes = 0;
+ MPI_Count size=len;
void *newbuf;
if (offset % fd->d_miniosz) {
diff = fd->d_miniosz - (offset % fd->d_miniosz);
- diff = ADIOI_MIN(diff, len);
+ diff = MPL_MIN(diff, len);
if (rw)
nbytes = pwrite(fd->fd_sys, (void *)buf, diff, offset);
else
nbytes = pread(fd->fd_sys, (void *)buf, diff, offset);
+ if (nbytes == -1) return -1;
buf = ((char *) buf) + diff;
offset += diff;
size = len - diff;
}
if (!size) {
- return diff;
+ return nbytes;
}
if (rw) { /* direct I/O enabled */
if (!(((long) buf) % fd->d_mem)) {
ADIOI_LUSTRE_Aligned_Mem_File_Write(fd, buf, size, offset, &err);
+ if (err == -1) return -1;
nbytes += err;
} else {
newbuf = (void *) memalign(LUSTRE_MEMALIGN, size);
if (newbuf) {
memcpy(newbuf, buf, size);
ADIOI_LUSTRE_Aligned_Mem_File_Write(fd, newbuf, size, offset, &err);
+ if (err == -1) return -1;
nbytes += err;
ADIOI_Free(newbuf);
}
- else nbytes += pwrite(fd->fd_sys, buf, size, offset);
+ else {
+ err = pwrite(fd->fd_sys, buf, size, offset);
+ if (err == -1) return -1;
+ nbytes += err;
+ }
}
- err = nbytes;
} else {
if (!(((long) buf) % fd->d_mem)) {
ADIOI_LUSTRE_Aligned_Mem_File_Read(fd, buf, size, offset, &err);
+ if (err == -1) return -1;
nbytes += err;
} else {
newbuf = (void *) memalign(LUSTRE_MEMALIGN, size);
if (newbuf) {
ADIOI_LUSTRE_Aligned_Mem_File_Read(fd, newbuf, size, offset, &err);
+ if (err == -1) return -1;
if (err > 0) memcpy((void *)buf, newbuf, err);
nbytes += err;
ADIOI_Free(newbuf);
}
- else nbytes += pread(fd->fd_sys, (void *)buf, size, offset);
+ else {
+ err = pread(fd->fd_sys, (void *)buf, size, offset);
+ if (err == -1) return -1;
+ nbytes += err;
+ }
}
- err = nbytes;
}
- return err;
+ return nbytes;
}
static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
@@ -122,9 +140,12 @@ static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
ADIO_Offset offset, ADIO_Status *status,
int io_mode, int *error_code)
{
- int err=-1;
+ ssize_t err=-1;
+ size_t rw_count;
+ ADIO_Offset bytes_xfered=0;
MPI_Count datatype_size, len;
static char myname[] = "ADIOI_LUSTRE_IOCONTIG";
+ char *p;
MPI_Type_size_x(datatype, &datatype_size);
len = datatype_size * count;
@@ -139,36 +160,52 @@ static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
if (err == -1) goto ioerr;
}
+ p = (char *)buf;
if (io_mode) {
+ while (bytes_xfered < len) {
#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event(ADIOI_MPE_write_a, 0, NULL);
+ MPE_Log_event(ADIOI_MPE_write_a, 0, NULL);
#endif
- err = write(fd->fd_sys, buf, len);
+ rw_count = len - bytes_xfered;
+ err = pwrite(fd->fd_sys, p, rw_count, offset+bytes_xfered);
+ if (err == -1) goto ioerr;
#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event(ADIOI_MPE_write_b, 0, NULL);
+ MPE_Log_event(ADIOI_MPE_write_b, 0, NULL);
#endif
+ if (err == 0) break;
+ bytes_xfered += err;
+ p += err;
+ }
} else {
+ while (bytes_xfered < len) {
#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event(ADIOI_MPE_read_a, 0, NULL);
+ MPE_Log_event(ADIOI_MPE_read_a, 0, NULL);
#endif
- err = read(fd->fd_sys, (void *)buf, len);
+ rw_count = len - bytes_xfered;
+ err = pread(fd->fd_sys, p, rw_count, offset+bytes_xfered);
+ if (err == -1) goto ioerr;
#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event(ADIOI_MPE_read_b, 0, NULL);
+ MPE_Log_event(ADIOI_MPE_read_b, 0, NULL);
#endif
+ if (err == 0) break;
+ bytes_xfered += err;
+ p += err;
+ }
}
} else {
err = ADIOI_LUSTRE_Directio(fd, buf, len, offset, io_mode);
+ if (err == -1) goto ioerr;
+ bytes_xfered = err;
}
- if (err == -1) goto ioerr;
- fd->fp_sys_posn = offset + err;
+ fd->fp_sys_posn = offset + bytes_xfered;
if (file_ptr_type == ADIO_INDIVIDUAL) {
- fd->fp_ind += err;
+ fd->fp_ind += bytes_xfered;
}
#ifdef HAVE_STATUS_SET_BYTES
- if (status) MPIR_Status_set_bytes(status, datatype, err);
+ if (status) MPIR_Status_set_bytes(status, datatype, bytes_xfered);
#endif
*error_code = MPI_SUCCESS;
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre_wrcoll.c b/src/mpi/romio/adio/ad_lustre/ad_lustre_wrcoll.c
index 9dca62d..cf6787c 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_wrcoll.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_wrcoll.c
@@ -21,7 +21,7 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
ADIO_Offset *len_list,
int contig_access_count,
int *striping_info,
- int **buf_idx, int *error_code);
+ ADIO_Offset **buf_idx, int *error_code);
static void ADIOI_LUSTRE_Fill_send_buffer(ADIO_File fd, const void *buf,
ADIOI_Flatlist_node *flat_buf,
char **send_buf,
@@ -31,7 +31,7 @@ static void ADIOI_LUSTRE_Fill_send_buffer(ADIO_File fd, const void *buf,
int *sent_to_proc, int nprocs,
int myrank, int contig_access_count,
int *striping_info,
- int *send_buf_idx,
+ ADIO_Offset *send_buf_idx,
int *curr_to_proc,
int *done_to_proc, int iter,
MPI_Aint buftype_extent);
@@ -42,23 +42,31 @@ static void ADIOI_LUSTRE_W_Exchange_data(ADIO_File fd, const void *buf,
ADIO_Offset *len_list, int *send_size,
int *recv_size, ADIO_Offset off,
int size, int *count,
- int *start_pos,
+ int *start_pos,
int *sent_to_proc, int nprocs,
int myrank, int buftype_is_contig,
int contig_access_count,
int *striping_info,
ADIOI_Access *others_req,
- int *send_buf_idx,
+ ADIO_Offset *send_buf_idx,
int *curr_to_proc,
int *done_to_proc, int *hole,
int iter, MPI_Aint buftype_extent,
- int *buf_idx,
+ ADIO_Offset *buf_idx,
ADIO_Offset **srt_off, int **srt_len, int *srt_num,
int *error_code);
void ADIOI_Heap_merge(ADIOI_Access *others_req, int *count,
ADIO_Offset *srt_off, int *srt_len, int *start_pos,
int nprocs, int nprocs_recv, int total_elements);
+static void ADIOI_LUSTRE_IterateOneSided(ADIO_File fd, const void *buf, int *striping_info,
+ ADIO_Offset *offset_list, ADIO_Offset *len_list,
+ int contig_access_count, int currentValidDataIndex,
+ int count, int file_ptr_type, ADIO_Offset offset,
+ ADIO_Offset start_offset, ADIO_Offset end_offset,
+ ADIO_Offset firstFileOffset, ADIO_Offset lastFileOffset,
+ MPI_Datatype datatype, int myrank, int *error_code);
+
void ADIOI_LUSTRE_WriteStridedColl(ADIO_File fd, const void *buf, int count,
MPI_Datatype datatype,
int file_ptr_type, ADIO_Offset offset,
@@ -85,8 +93,10 @@ void ADIOI_LUSTRE_WriteStridedColl(ADIO_File fd, const void *buf, int count,
ADIO_Offset orig_fp, start_offset, end_offset, off;
ADIO_Offset *offset_list = NULL, *st_offsets = NULL, *end_offsets = NULL;
ADIO_Offset *len_list = NULL;
- int **buf_idx = NULL, *striping_info = NULL;
+ int *striping_info = NULL;
+ ADIO_Offset **buf_idx = NULL;
int old_error, tmp_error;
+ ADIO_Offset *lustre_offsets0, *lustre_offsets, *count_sizes;
MPI_Comm_size(fd->comm, &nprocs);
MPI_Comm_rank(fd->comm, &myrank);
@@ -112,10 +122,66 @@ void ADIOI_LUSTRE_WriteStridedColl(ADIO_File fd, const void *buf, int count,
*/
st_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs * sizeof(ADIO_Offset));
end_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs * sizeof(ADIO_Offset));
+ ADIO_Offset my_count_size=0;
+ /* One-sided aggregation needs the amount of data per rank as well because
+ * the difference in starting and ending offsets for 1 byte is 0 the same
+ * as 0 bytes so it cannot be distiguished.
+ */
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
+ count_sizes = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
+ MPI_Count buftype_size;
+ MPI_Type_size_x(datatype, &buftype_size);
+ my_count_size = (ADIO_Offset) count * (ADIO_Offset)buftype_size;
+ }
+ if (romio_tunegather) {
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
+ lustre_offsets0 = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
+ lustre_offsets = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
+ for (i=0; i<nprocs; i++) {
+ lustre_offsets0[i*3] = 0;
+ lustre_offsets0[i*3+1] = 0;
+ lustre_offsets0[i*3+2] = 0;
+ }
+ lustre_offsets0[myrank*3] = start_offset;
+ lustre_offsets0[myrank*3+1] = end_offset;
+ lustre_offsets0[myrank*3+2] = my_count_size;
+ MPI_Allreduce( lustre_offsets0, lustre_offsets, nprocs*3, ADIO_OFFSET, MPI_MAX, fd->comm );
+ for (i=0; i<nprocs; i++) {
+ st_offsets [i] = lustre_offsets[i*3] ;
+ end_offsets[i] = lustre_offsets[i*3+1];
+ count_sizes[i] = lustre_offsets[i*3+2];
+ }
+ }
+ else {
+ lustre_offsets0 = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
+ lustre_offsets = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
+ for (i=0; i<nprocs; i++) {
+ lustre_offsets0[i*2] = 0;
+ lustre_offsets0[i*2+1] = 0;
+ }
+ lustre_offsets0[myrank*2] = start_offset;
+ lustre_offsets0[myrank*2+1] = end_offset;
+
+ MPI_Allreduce( lustre_offsets0, lustre_offsets, nprocs*2, ADIO_OFFSET, MPI_MAX, fd->comm );
+
+ for (i=0; i<nprocs; i++) {
+ st_offsets [i] = lustre_offsets[i*2] ;
+ end_offsets[i] = lustre_offsets[i*2+1];
+ }
+ }
+ ADIOI_Free( lustre_offsets0 );
+ ADIOI_Free( lustre_offsets );
+ }
+ else {
MPI_Allgather(&start_offset, 1, ADIO_OFFSET, st_offsets, 1,
ADIO_OFFSET, fd->comm);
MPI_Allgather(&end_offset, 1, ADIO_OFFSET, end_offsets, 1,
ADIO_OFFSET, fd->comm);
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
+ MPI_Allgather(&my_count_size, 1, ADIO_OFFSET, count_sizes, 1,
+ ADIO_OFFSET, fd->comm);
+ }
+ }
/* are the accesses of different processes interleaved? */
for (i = 1; i < nprocs; i++)
if ((st_offsets[i] < end_offsets[i-1]) &&
@@ -147,6 +213,8 @@ void ADIOI_LUSTRE_WriteStridedColl(ADIO_File fd, const void *buf, int count,
ADIOI_Free(len_list);
ADIOI_Free(st_offsets);
ADIOI_Free(end_offsets);
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2))
+ ADIOI_Free(count_sizes);
}
fd->fp_ind = orig_fp;
@@ -167,8 +235,47 @@ void ADIOI_LUSTRE_WriteStridedColl(ADIO_File fd, const void *buf, int count,
return;
}
+ ADIO_Offset lastFileOffset = 0, firstFileOffset = -1;
+ int currentValidDataIndex = 0;
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
+ /* Take out the 0-data offsets by shifting the indexes with data to the front
+ * and keeping track of the valid data index for use as the length.
+ */
+ for (i=0; i<nprocs; i++) {
+ if (count_sizes[i] > 0) {
+ st_offsets[currentValidDataIndex] = st_offsets[i];
+ end_offsets[currentValidDataIndex] = end_offsets[i];
+
+ lastFileOffset = MPL_MAX(lastFileOffset,end_offsets[currentValidDataIndex]);
+ if (firstFileOffset == -1)
+ firstFileOffset = st_offsets[currentValidDataIndex];
+ else
+ firstFileOffset = MPL_MIN(firstFileOffset,st_offsets[currentValidDataIndex]);
+
+ currentValidDataIndex++;
+ }
+ }
+ }
+
/* Get Lustre hints information */
ADIOI_LUSTRE_Get_striping_info(fd, &striping_info, 1);
+ /* If the user has specified to use a one-sided aggregation method then do that at
+ * this point instead of the two-phase I/O.
+ */
+ if ((romio_write_aggmethod == 1) || (romio_write_aggmethod == 2)) {
+
+ ADIOI_LUSTRE_IterateOneSided(fd, buf, striping_info, offset_list, len_list, contig_access_count, currentValidDataIndex, count, file_ptr_type, offset, start_offset, end_offset, firstFileOffset, lastFileOffset, datatype, myrank, error_code);
+
+ ADIOI_Free(offset_list);
+ ADIOI_Free(len_list);
+ ADIOI_Free(st_offsets);
+ ADIOI_Free(end_offsets);
+ ADIOI_Free(count_sizes);
+ ADIOI_Free(striping_info);
+
+ goto fn_exit;
+
+ } // onesided aggregation
/* calculate what portions of the access requests of this process are
* located in which process
@@ -233,9 +340,6 @@ void ADIOI_LUSTRE_WriteStridedColl(ADIO_File fd, const void *buf, int count,
*error_code = old_error;
- if (!buftype_is_contig)
- ADIOI_Delete_flattened(datatype);
-
/* free all memory allocated for collective I/O */
/* free others_req */
for (i = 0; i < nprocs; i++) {
@@ -264,6 +368,7 @@ void ADIOI_LUSTRE_WriteStridedColl(ADIO_File fd, const void *buf, int count,
ADIOI_Free(end_offsets);
ADIOI_Free(striping_info);
+fn_exit:
#ifdef HAVE_STATUS_SET_BYTES
if (status) {
MPI_Count bufsize, size;
@@ -290,7 +395,7 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
ADIO_Offset *offset_list,
ADIO_Offset *len_list,
int contig_access_count,
- int *striping_info, int **buf_idx,
+ int *striping_info, ADIO_Offset **buf_idx,
int *error_code)
{
/* Send data to appropriate processes and write in sizes of no more
@@ -311,8 +416,8 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
int *recv_curr_offlen_ptr, *recv_count, *recv_size;
int *send_curr_offlen_ptr, *send_size;
int *sent_to_proc, *recv_start_pos;
- int *send_buf_idx, *curr_to_proc, *done_to_proc;
- int *this_buf_idx;
+ int *curr_to_proc, *done_to_proc;
+ ADIO_Offset *send_buf_idx, *this_buf_idx;
char *write_buf = NULL;
MPI_Status status;
ADIOI_Flatlist_node *flat_buf = NULL;
@@ -344,8 +449,8 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
}
for (i = 0; i < nprocs; i++) {
for (j = 0; j < others_req[i].count; j++) {
- st_loc = ADIOI_MIN(st_loc, others_req[i].offsets[j]);
- end_loc = ADIOI_MAX(end_loc, (others_req[i].offsets[j] +
+ st_loc = MPL_MIN(st_loc, others_req[i].offsets[j]);
+ end_loc = MPL_MAX(end_loc, (others_req[i].offsets[j] +
others_req[i].lens[j] - 1));
}
}
@@ -379,7 +484,7 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
for (j = 0; j < others_req[i].count; j ++) {
req_off = others_req[i].offsets[j];
m = (int)((req_off - min_st_loc) / step_size);
- off_list[m] = ADIOI_MIN(off_list[m], req_off);
+ off_list[m] = MPL_MIN(off_list[m], req_off);
}
}
@@ -402,12 +507,12 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
/* amount of data sent to each proc so far. Used in
ADIOI_Fill_send_buffer. initialized to 0 here. */
- send_buf_idx = (int *) ADIOI_Malloc(nprocs * sizeof(int));
+ send_buf_idx = (ADIO_Offset *) ADIOI_Malloc(nprocs * sizeof(ADIO_Offset));
curr_to_proc = (int *) ADIOI_Malloc(nprocs * sizeof(int));
done_to_proc = (int *) ADIOI_Malloc(nprocs * sizeof(int));
/* Above three are used in ADIOI_Fill_send_buffer */
- this_buf_idx = (int *) ADIOI_Malloc(nprocs * sizeof(int));
+ this_buf_idx = (ADIO_Offset *) ADIOI_Malloc(nprocs * sizeof(ADIO_Offset));
recv_start_pos = (int *) ADIOI_Malloc(nprocs * sizeof(int));
/* used to store the starting value of recv_curr_offlen_ptr[i] in
@@ -471,8 +576,8 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
recv_count[i] = recv_size[i] = send_size[i] = 0;
off = off_list[m];
- max_size = ADIOI_MIN(step_size, max_end_loc - iter_st_off + 1);
- real_size = (int) ADIOI_MIN((off / stripe_size + 1) * stripe_size -
+ max_size = MPL_MIN(step_size, max_end_loc - iter_st_off + 1);
+ real_size = (int) MPL_MIN((off / stripe_size + 1) * stripe_size -
off,
end_loc - off + 1);
@@ -497,7 +602,7 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
req_len = others_req[i].lens[j];
if (req_off < iter_st_off + max_size) {
recv_count[i]++;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)write_buf)+req_off-off) == (ADIO_Offset)(MPIU_Upint)(write_buf+req_off-off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)write_buf)+req_off-off) == (ADIO_Offset)(uintptr_t)(write_buf+req_off-off));
MPI_Address(write_buf + req_off - off,
&(others_req[i].mem_ptrs[j]));
recv_size[i] += req_len;
@@ -623,11 +728,11 @@ static void ADIOI_LUSTRE_W_Exchange_data(ADIO_File fd, const void *buf,
int contig_access_count,
int *striping_info,
ADIOI_Access *others_req,
- int *send_buf_idx,
+ ADIO_Offset *send_buf_idx,
int *curr_to_proc, int *done_to_proc,
int *hole, int iter,
MPI_Aint buftype_extent,
- int *buf_idx,
+ ADIO_Offset *buf_idx,
ADIO_Offset **srt_off, int **srt_len, int *srt_num,
int *error_code)
{
@@ -837,7 +942,7 @@ static void ADIOI_LUSTRE_W_Exchange_data(ADIO_File fd, const void *buf,
#define ADIOI_BUF_INCR \
{ \
while (buf_incr) { \
- size_in_buf = ADIOI_MIN(buf_incr, flat_buf_sz); \
+ size_in_buf = MPL_MIN(buf_incr, flat_buf_sz); \
user_buf_idx += size_in_buf; \
flat_buf_sz -= size_in_buf; \
if (!flat_buf_sz) { \
@@ -858,8 +963,8 @@ static void ADIOI_LUSTRE_W_Exchange_data(ADIO_File fd, const void *buf,
#define ADIOI_BUF_COPY \
{ \
while (size) { \
- size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + user_buf_idx)); \
+ size_in_buf = MPL_MIN(size, flat_buf_sz); \
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + user_buf_idx) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + user_buf_idx)); \
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
memcpy(&(send_buf[p][send_buf_idx[p]]), \
((char *) buf) + user_buf_idx, size_in_buf); \
@@ -892,7 +997,7 @@ static void ADIOI_LUSTRE_Fill_send_buffer(ADIO_File fd, const void *buf,
int myrank,
int contig_access_count,
int *striping_info,
- int *send_buf_idx,
+ ADIO_Offset *send_buf_idx,
int *curr_to_proc,
int *done_to_proc, int iter,
MPI_Aint buftype_extent)
@@ -940,7 +1045,7 @@ static void ADIOI_LUSTRE_Fill_send_buffer(ADIO_File fd, const void *buf,
if (send_buf_idx[p] < send_size[p]) {
if (curr_to_proc[p] + len > done_to_proc[p]) {
if (done_to_proc[p] > curr_to_proc[p]) {
- size = (int) ADIOI_MIN(curr_to_proc[p] + len -
+ size = (int) MPL_MIN(curr_to_proc[p] + len -
done_to_proc[p],
send_size[p] -
send_buf_idx[p]);
@@ -953,7 +1058,7 @@ static void ADIOI_LUSTRE_Fill_send_buffer(ADIO_File fd, const void *buf,
curr_to_proc[p] = done_to_proc[p] + size;
ADIOI_BUF_COPY
} else {
- size = (int) ADIOI_MIN(len, send_size[p] -
+ size = (int) MPL_MIN(len, send_size[p] -
send_buf_idx[p]);
buf_incr = (int) len;
ADIOI_Assert((curr_to_proc[p] + size) == (unsigned)((ADIO_Offset)curr_to_proc[p] + size));
@@ -984,3 +1089,337 @@ static void ADIOI_LUSTRE_Fill_send_buffer(ADIO_File fd, const void *buf,
if (send_size[i])
sent_to_proc[i] = curr_to_proc[i];
}
+
+/* This function calls ADIOI_OneSidedWriteAggregation iteratively to
+ * essentially pack stripes of data into the collective buffer and then
+ * flush the collective buffer to the file when fully packed, repeating this
+ * process until all the data is written to the file.
+ */
+static void ADIOI_LUSTRE_IterateOneSided(ADIO_File fd, const void *buf, int *striping_info,
+ ADIO_Offset *offset_list, ADIO_Offset *len_list,
+ int contig_access_count, int currentValidDataIndex,
+ int count, int file_ptr_type, ADIO_Offset offset,
+ ADIO_Offset start_offset, ADIO_Offset end_offset,
+ ADIO_Offset firstFileOffset, ADIO_Offset lastFileOffset,
+ MPI_Datatype datatype, int myrank, int *error_code)
+{
+ int i;
+ int stripesPerAgg = fd->hints->cb_buffer_size/striping_info[0];
+ if (stripesPerAgg == 0) {
+ /* The striping unit is larger than the collective buffer size
+ * therefore we must abort since the buffer has already been
+ * allocated during the open.
+ */
+ FPRINTF(stderr,"Error: The collective buffer size %d is less "
+ "than the striping unit size %d - the ROMIO "
+ "Lustre one-sided write aggregation algorithm "
+ "cannot continue.\n",fd->hints->cb_buffer_size,striping_info[0]);
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+
+ /* The maximum number of aggregators we can use is the number of
+ * stripes used in the file - each agg writes exactly 1 stripe.
+ */
+ int numStripedAggs = striping_info[2];
+
+ int orig_cb_nodes = fd->hints->cb_nodes;
+ if (fd->hints->cb_nodes > numStripedAggs)
+ fd->hints->cb_nodes = numStripedAggs;
+ else if (fd->hints->cb_nodes < numStripedAggs)
+ numStripedAggs = fd->hints->cb_nodes;
+
+ /* Declare ADIOI_OneSidedStripeParms here as some fields will not change.
+ */
+ ADIOI_OneSidedStripeParms stripeParms;
+ stripeParms.stripeSize = striping_info[0];
+ stripeParms.stripedLastFileOffset = lastFileOffset;
+
+ /* The general algorithm here is to divide the file up into segements, a segment
+ * being defined as a contiguous region of the file which has up to one occurrence
+ * of each stripe - the data for each stripe being written out by a particular
+ * aggregator. The segmentLen is the maximum size in bytes of each segment
+ * (stripeSize*number of aggs). Iteratively call ADIOI_OneSidedWriteAggregation
+ * for each segment to aggregate the data to the collective buffers, but only do
+ * the actual write (via flushCB stripe parm) once stripesPerAgg stripes
+ * have been packed or the aggregation for all the data is complete, minimizing
+ * synchronization.
+ */
+ stripeParms.segmentLen = ((ADIO_Offset)numStripedAggs)*((ADIO_Offset)(striping_info[0]));
+ ADIO_Offset totalFileSize = (lastFileOffset-firstFileOffset)+(ADIO_Offset)1;
+
+ /* These arrays define the file offsets for the stripes for a given segment - similar
+ * to the concept of file domains in GPFS, essentially file domeains for the segment.
+ */
+ ADIO_Offset *segment_stripe_start = (ADIO_Offset *) ADIOI_Malloc(numStripedAggs*sizeof(ADIO_Offset));
+ ADIO_Offset *segment_stripe_end = (ADIO_Offset *) ADIOI_Malloc(numStripedAggs*sizeof(ADIO_Offset));
+
+ /* Find the actual range of stripes in the file that have data in the offset
+ * ranges being written -- skip holes at the front and back of the file.
+ */
+ int currentOffsetListIndex = 0;
+ int fileSegmentIter = 0;
+ int startingStripeWithData = 0;
+ int foundStartingStripeWithData = 0;
+ while (!foundStartingStripeWithData) {
+ if ( ((startingStripeWithData+1) * (ADIO_Offset)(striping_info[0])) > firstFileOffset)
+ foundStartingStripeWithData = 1;
+ else
+ startingStripeWithData++;
+ }
+
+ ADIO_Offset currentSegementOffset = (ADIO_Offset)startingStripeWithData * (ADIO_Offset)(striping_info[0]);
+
+ int numSegments = (int) ((lastFileOffset+(ADIO_Offset)1 - currentSegementOffset)/stripeParms.segmentLen);
+ if ((lastFileOffset+(ADIO_Offset)1 - currentSegementOffset)%stripeParms.segmentLen > 0)
+ numSegments++;
+
+ /* To support read-modify-write use a while-loop to redo the aggregation if necessary
+ * to fill in the holes.
+ */
+ int doAggregation = 1;
+ int holeFound = 0;
+
+ /* Remember romio_onesided_no_rmw setting if we have to re-do
+ * the aggregation if holes are found.
+ */
+ int prev_romio_onesided_no_rmw = romio_onesided_no_rmw;
+
+ while (doAggregation) {
+
+ int totalDataWrittenLastRound = 0;
+
+ /* This variable tracks how many segment stripes we have packed into the agg
+ * buffers so we know when to flush to the file system.
+ */
+ stripeParms.segmentIter = 0;
+
+ /* stripeParms.stripesPerAgg is the number of stripes to aggregate before doing a flush.
+ */
+ stripeParms.stripesPerAgg = stripesPerAgg;
+ if (stripeParms.stripesPerAgg > numSegments)
+ stripeParms.stripesPerAgg = numSegments;
+
+ for (fileSegmentIter=0;fileSegmentIter < numSegments;fileSegmentIter++) {
+
+ int dataWrittenThisRound = 0;
+
+ /* Define the segment range in terms of file offsets.
+ */
+ ADIO_Offset segmentFirstFileOffset = currentSegementOffset;
+ if ((currentSegementOffset+stripeParms.segmentLen-(ADIO_Offset)1) > lastFileOffset)
+ currentSegementOffset = lastFileOffset;
+ else
+ currentSegementOffset += (stripeParms.segmentLen-(ADIO_Offset)1);
+ ADIO_Offset segmentLastFileOffset = currentSegementOffset;
+ currentSegementOffset++;
+
+ ADIO_Offset segment_stripe_offset = segmentFirstFileOffset;
+ for (i=0;i<numStripedAggs;i++) {
+ if (firstFileOffset > segmentFirstFileOffset)
+ segment_stripe_start[i] = firstFileOffset;
+ else
+ segment_stripe_start[i] = segment_stripe_offset;
+ if ((segment_stripe_offset + (ADIO_Offset)(striping_info[0])) > lastFileOffset)
+ segment_stripe_end[i] = lastFileOffset;
+ else
+ segment_stripe_end[i] = segment_stripe_offset + (ADIO_Offset)(striping_info[0]) - (ADIO_Offset)1;
+ segment_stripe_offset += (ADIO_Offset)(striping_info[0]);
+ }
+
+ /* In the interest of performance for non-contiguous data with large offset lists
+ * essentially modify the given offset and length list appropriately for this segment
+ * and then pass pointers to the sections of the lists being used for this segment
+ * to ADIOI_OneSidedWriteAggregation. Remember how we have modified the list for this
+ * segment, and then restore it appropriately after processing for this segment has
+ * concluded, so it is ready for the next segment.
+ */
+ int segmentContigAccessCount = 0;
+ int startingOffsetListIndex = -1;
+ int endingOffsetListIndex = -1;
+ ADIO_Offset startingOffsetAdvancement = 0;
+ ADIO_Offset startingLenTrim = 0;
+ ADIO_Offset endingLenTrim = 0;
+
+ while ( ((offset_list[currentOffsetListIndex] + ((ADIO_Offset)(len_list[currentOffsetListIndex]))-(ADIO_Offset)1) < segmentFirstFileOffset) && (currentOffsetListIndex < (contig_access_count-1)))
+ currentOffsetListIndex++;
+ startingOffsetListIndex = currentOffsetListIndex;
+ endingOffsetListIndex = currentOffsetListIndex;
+ int offsetInSegment = 0;
+ ADIO_Offset offsetStart = offset_list[currentOffsetListIndex];
+ ADIO_Offset offsetEnd = (offset_list[currentOffsetListIndex] + ((ADIO_Offset)(len_list[currentOffsetListIndex]))-(ADIO_Offset)1);
+
+ if (len_list[currentOffsetListIndex] == 0)
+ offsetInSegment = 0;
+ else if ((offsetStart >= segmentFirstFileOffset) && (offsetStart <= segmentLastFileOffset)) {
+ offsetInSegment = 1;
+ }
+ else if ((offsetEnd >= segmentFirstFileOffset) && (offsetEnd <= segmentLastFileOffset)) {
+ offsetInSegment = 1;
+ }
+ else if ((offsetStart <= segmentFirstFileOffset) && (offsetEnd >= segmentLastFileOffset)) {
+ offsetInSegment = 1;
+ }
+
+ if (!offsetInSegment) {
+ segmentContigAccessCount = 0;
+ }
+ else {
+ /* We are in the segment, advance currentOffsetListIndex until we are out of segment.
+ */
+ segmentContigAccessCount = 1;
+
+ while ((offset_list[currentOffsetListIndex] <= segmentLastFileOffset) && (currentOffsetListIndex < contig_access_count)) {
+ dataWrittenThisRound += (int) len_list[currentOffsetListIndex];
+ currentOffsetListIndex++;
+ }
+
+ if (currentOffsetListIndex > startingOffsetListIndex) {
+ /* If we did advance, if we are at the end need to check if we are still in segment.
+ */
+ if (currentOffsetListIndex == contig_access_count) {
+ currentOffsetListIndex--;
+ }
+ else if (offset_list[currentOffsetListIndex] > segmentLastFileOffset) {
+ /* We advanced into the last one and it still in the segment.
+ */
+ currentOffsetListIndex--;
+ }
+ else {
+ dataWrittenThisRound += (int) len_list[currentOffsetListIndex];
+ }
+ segmentContigAccessCount += (currentOffsetListIndex-startingOffsetListIndex);
+ endingOffsetListIndex = currentOffsetListIndex;
+ }
+ }
+
+ if (segmentContigAccessCount > 0) {
+ /* Trim edges here so all data in the offset list range fits exactly in the segment.
+ */
+ if (offset_list[startingOffsetListIndex] < segmentFirstFileOffset) {
+ startingOffsetAdvancement = segmentFirstFileOffset-offset_list[startingOffsetListIndex];
+ offset_list[startingOffsetListIndex] += startingOffsetAdvancement;
+ dataWrittenThisRound -= (int) startingOffsetAdvancement;
+ startingLenTrim = startingOffsetAdvancement;
+ len_list[startingOffsetListIndex] -= startingLenTrim;
+ }
+
+ if ((offset_list[endingOffsetListIndex] + ((ADIO_Offset)(len_list[endingOffsetListIndex]))-(ADIO_Offset)1) > segmentLastFileOffset) {
+ endingLenTrim = offset_list[endingOffsetListIndex]+ ((ADIO_Offset)(len_list[endingOffsetListIndex]))-(ADIO_Offset)1 - segmentLastFileOffset;
+ len_list[endingOffsetListIndex] -= endingLenTrim;
+ dataWrittenThisRound -= (int) endingLenTrim;
+ }
+ }
+
+ int holeFoundThisRound = 0;
+
+ /* Once we have packed the collective buffers do the actual write.
+ */
+ if ((stripeParms.segmentIter == (stripeParms.stripesPerAgg-1)) || (fileSegmentIter == (numSegments-1))) {
+ stripeParms.flushCB = 1;
+ }
+ else
+ stripeParms.flushCB = 0;
+
+ stripeParms.firstStripedWriteCall = 0;
+ stripeParms.lastStripedWriteCall = 0;
+ if (fileSegmentIter == 0) {
+ stripeParms.firstStripedWriteCall = 1;
+ }
+ else if (fileSegmentIter == (numSegments-1))
+ stripeParms.lastStripedWriteCall = 1;
+
+ /* The difference in calls to ADIOI_OneSidedWriteAggregation is based on the whether the buftype is
+ * contiguous. The algorithm tracks the position in the source buffer when called
+ * multiple times -- in the case of contiguous data this is simple and can be externalized with
+ * a buffer offset, in the case of non-contiguous data this is complex and the state must be tracked
+ * internally, therefore no external buffer offset. Care was taken to minimize
+ * ADIOI_OneSidedWriteAggregation changes at the expense of some added complexity to the caller.
+ */
+ int bufTypeIsContig;
+ ADIOI_Datatype_iscontig(datatype, &bufTypeIsContig);
+ if (bufTypeIsContig) {
+ ADIOI_OneSidedWriteAggregation(fd,(ADIO_Offset*)&(offset_list[startingOffsetListIndex]), (ADIO_Offset*)&(len_list[startingOffsetListIndex]), segmentContigAccessCount, buf+totalDataWrittenLastRound, datatype, error_code, segmentFirstFileOffset, segmentLastFileOffset, currentValidDataIndex, segment_stripe_start, segment_stripe_end, &holeFoundThisRound,stripeParms);
+ }
+ else {
+ ADIOI_OneSidedWriteAggregation(fd,(ADIO_Offset*)&(offset_list[startingOffsetListIndex]), (ADIO_Offset*)&(len_list[startingOffsetListIndex]), segmentContigAccessCount, buf, datatype, error_code, segmentFirstFileOffset, segmentLastFileOffset, currentValidDataIndex, segment_stripe_start, segment_stripe_end, &holeFoundThisRound,stripeParms);
+ }
+
+ if (stripeParms.flushCB) {
+ stripeParms.segmentIter = 0;
+ if (stripesPerAgg > (numSegments-fileSegmentIter-1))
+ stripeParms.stripesPerAgg = numSegments-fileSegmentIter-1;
+ else
+ stripeParms.stripesPerAgg = stripesPerAgg;
+ }
+ else
+ stripeParms.segmentIter++;
+
+ if (holeFoundThisRound)
+ holeFound = 1;
+
+ /* If we know we won't be doing a pre-read in a subsequent call to
+ * ADIOI_OneSidedWriteAggregation which will have a barrier to keep
+ * feeder ranks from doing rma to the collective buffer before the
+ * write completes that we told it do with the stripeParms.flushCB
+ * flag then we need to do a barrier here.
+ */
+ if (!romio_onesided_always_rmw && stripeParms.flushCB) {
+ if (fileSegmentIter < (numSegments-1)) {
+ MPI_Barrier(fd->comm);
+ }
+ }
+
+ /* Restore the offset_list and len_list to values that are ready for the
+ * next iteration.
+ */
+ if (segmentContigAccessCount > 0) {
+ offset_list[endingOffsetListIndex] += len_list[endingOffsetListIndex];
+ len_list[endingOffsetListIndex] = endingLenTrim;
+ }
+ totalDataWrittenLastRound += dataWrittenThisRound;
+ } // fileSegmentIter for-loop
+
+ /* Check for holes in the data unless romio_onesided_no_rmw is set.
+ * If a hole is found redo the entire aggregation and write.
+ */
+ if (!romio_onesided_no_rmw) {
+ int anyHolesFound = 0;
+ MPI_Allreduce(&holeFound, &anyHolesFound, 1, MPI_INT, MPI_MAX, fd->comm);
+
+ if (anyHolesFound) {
+ ADIOI_Free(offset_list);
+ ADIOI_Free(len_list);
+ ADIOI_Calc_my_off_len(fd, count, datatype, file_ptr_type, offset,
+ &offset_list, &len_list, &start_offset,
+ &end_offset, &contig_access_count);
+
+ currentSegementOffset = (ADIO_Offset)startingStripeWithData * (ADIO_Offset)(striping_info[0]);
+ romio_onesided_always_rmw = 1;
+ romio_onesided_no_rmw = 1;
+
+ /* Holes are found in the data and the user has not set
+ * romio_onesided_no_rmw --- set romio_onesided_always_rmw to 1
+ * and redo the entire aggregation and write and if the user has
+ * romio_onesided_inform_rmw set then inform him of this condition
+ * and behavior.
+ */
+ if (romio_onesided_inform_rmw && (myrank ==0)) {
+ FPRINTF(stderr,"Information: Holes found during one-sided "
+ "write aggregation algorithm --- re-running one-sided "
+ "write aggregation with ROMIO_ONESIDED_ALWAYS_RMW set to 1.\n");
+ }
+ }
+ else
+ doAggregation = 0;
+ }
+ else
+ doAggregation = 0;
+ } // while doAggregation
+ romio_onesided_no_rmw = prev_romio_onesided_no_rmw;
+
+ ADIOI_Free(segment_stripe_start);
+ ADIOI_Free(segment_stripe_end);
+
+ fd->hints->cb_nodes = orig_cb_nodes;
+
+}
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre_wrstr.c b/src/mpi/romio/adio/ad_lustre/ad_lustre_wrstr.c
index 071c51e..638636c 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_wrstr.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_wrstr.c
@@ -32,7 +32,7 @@
} \
writebuf_off = req_off; \
/* stripe_size alignment */ \
- writebuf_len = (unsigned) ADIOI_MIN(end_offset - writebuf_off + 1, \
+ writebuf_len = (unsigned) MPL_MIN(end_offset - writebuf_off + 1, \
(writebuf_off / stripe_size + 1) * \
stripe_size - writebuf_off); \
if (!(fd->atomicity)) \
@@ -50,10 +50,10 @@
return; \
} \
} \
- write_sz = (unsigned) (ADIOI_MIN(req_len, \
+ write_sz = (unsigned) (MPL_MIN(req_len, \
writebuf_off + writebuf_len - req_off)); \
ADIOI_Assert((ADIO_Offset)write_sz == \
- ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
memcpy(writebuf + req_off - writebuf_off, (char *)buf +userbuf_off, write_sz); \
while (write_sz != req_len) { \
ADIO_WriteContig(fd, writebuf, writebuf_len, MPI_BYTE, \
@@ -72,7 +72,7 @@
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
/* stripe_size alignment */ \
- writebuf_len = (unsigned) ADIOI_MIN(end_offset - writebuf_off + 1, \
+ writebuf_len = (unsigned) MPL_MIN(end_offset - writebuf_off + 1, \
(writebuf_off / stripe_size + 1) * \
stripe_size - writebuf_off); \
if (!(fd->atomicity)) \
@@ -88,7 +88,7 @@
ADIOI_Free(writebuf); \
return; \
} \
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz); \
} \
}
@@ -113,12 +113,12 @@
} \
writebuf_off = req_off; \
/* stripe_size alignment */ \
- writebuf_len = (unsigned) ADIOI_MIN(end_offset - writebuf_off + 1, \
+ writebuf_len = (unsigned) MPL_MIN(end_offset - writebuf_off + 1, \
(writebuf_off / stripe_size + 1) * \
stripe_size - writebuf_off); \
} \
- write_sz = (unsigned) ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off); \
- ADIOI_Assert((ADIO_Offset)write_sz == ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ write_sz = (unsigned) MPL_MIN(req_len, writebuf_off + writebuf_len - req_off); \
+ ADIOI_Assert((ADIO_Offset)write_sz == MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
memcpy(writebuf + req_off - writebuf_off, \
(char *)buf + userbuf_off, write_sz); \
while (write_sz != req_len) { \
@@ -136,10 +136,10 @@
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
/* stripe_size alignment */ \
- writebuf_len = (unsigned) ADIOI_MIN(end_offset - writebuf_off + 1, \
+ writebuf_len = (unsigned) MPL_MIN(end_offset - writebuf_off + 1, \
(writebuf_off / stripe_size + 1) * \
stripe_size - writebuf_off); \
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz); \
} \
}
@@ -217,7 +217,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
start_off = off;
end_offset = start_off + bufsize - 1;
/* write stripe size buffer each time */
- writebuf = (char *) ADIOI_Malloc(ADIOI_MIN(bufsize, stripe_size));
+ writebuf = (char *) ADIOI_Malloc(MPL_MIN(bufsize, stripe_size));
writebuf_off = 0;
writebuf_len = 0;
@@ -252,10 +252,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
fd->fp_ind = off;
} else {
/* noncontiguous in file */
- /* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype)
- flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
@@ -318,8 +315,8 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
req_off = start_off;
req_len = bufsize;
end_offset = start_off + bufsize - 1;
- writebuf = (char *) ADIOI_Malloc(ADIOI_MIN(bufsize, stripe_size));
- memset(writebuf, -1, ADIOI_MIN(bufsize, stripe_size));
+ writebuf = (char *) ADIOI_Malloc(MPL_MIN(bufsize, stripe_size));
+ memset(writebuf, -1, MPL_MIN(bufsize, stripe_size));
writebuf_off = 0;
writebuf_len = 0;
userbuf_off = 0;
@@ -361,7 +358,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
i_offset = 0;
j = st_index;
off = offset;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
while (i_offset < bufsize) {
i_offset += fwr_size;
end_offset = off + fwr_size - 1;
@@ -375,7 +372,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
off = disp + flat_file->indices[j] +
n_filetypes*(ADIO_Offset)filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i_offset);
+ fwr_size = MPL_MIN(flat_file->blocklens[j], bufsize-i_offset);
}
/* if atomicity is true, lock the region to be accessed */
@@ -396,7 +393,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
j = st_index;
off = offset;
n_filetypes = st_n_filetypes;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
while (i_offset < bufsize) {
if (fwr_size) {
/* TYPE_UB and TYPE_LB can result in
@@ -426,7 +423,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
}
off = disp + flat_file->indices[j] +
n_filetypes*(ADIO_Offset)filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j],
+ fwr_size = MPL_MIN(flat_file->blocklens[j],
bufsize-i_offset);
}
}
@@ -444,7 +441,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
bwr_size = flat_buf->blocklens[0];
while (num < bufsize) {
- size = ADIOI_MIN(fwr_size, bwr_size);
+ size = MPL_MIN(fwr_size, bwr_size);
if (size) {
/* lseek(fd->fd_sys, off, SEEK_SET);
err = write(fd->fd_sys, ((char *) buf) + i_offset, size); */
@@ -522,6 +519,4 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
#endif
- if (!buftype_is_contig)
- ADIOI_Delete_flattened(datatype);
}
diff --git a/src/mpi/romio/adio/ad_nfs/.state-cache b/src/mpi/romio/adio/ad_nfs/.state-cache
index 26718ce..d1b076d 100644
--- a/src/mpi/romio/adio/ad_nfs/.state-cache
+++ b/src/mpi/romio/adio/ad_nfs/.state-cache
@@ -1,49 +1,49 @@
<dir>
-<file name="ad_nfs_getsh.c" info="1447123141"/>
-<file name="ad_nfs_write.c" info="1447123141"/>
-<file name="ad_nfs_setsh.c" info="1447123141"/>
-<file name="ad_nfs_wait.c" info="1447123141"/>
-<file name="ad_nfs_iread.c" info="1447123141"/>
-<file name="ad_nfs_resize.c" info="1447123141"/>
-<file name="ad_nfs_features.c" info="1447123141"/>
-<file name="ad_nfs_hints.c" info="1447123141"/>
-<file name="ad_nfs_fcntl.c" info="1447123141"/>
-<file name="ad_nfs_done.c" info="1447123141"/>
-<file name="ad_nfs_read.c" info="1447123141"/>
-<file name="ad_nfs.c" info="1447123141"/>
-<file name="ad_nfs_iwrite.c" info="1447123141"/>
-<file name="ad_nfs.h" info="1447123141"/>
-<file name="ad_nfs_open.c" info="1447123141"/>
+<file name="ad_nfs.h" info="1478973152"/>
+<file name="ad_nfs_getsh.c" info="1478973152"/>
+<file name="ad_nfs_setsh.c" info="1478973152"/>
+<file name="ad_nfs_resize.c" info="1478973152"/>
+<file name="ad_nfs_hints.c" info="1478973152"/>
+<file name="ad_nfs_fcntl.c" info="1478973152"/>
+<file name="ad_nfs_write.c" info="1478973152"/>
+<file name="ad_nfs_open.c" info="1478973152"/>
+<file name="ad_nfs_read.c" info="1478973152"/>
+<file name="ad_nfs_done.c" info="1478973152"/>
+<file name="ad_nfs_iwrite.c" info="1478973152"/>
+<file name="ad_nfs_wait.c" info="1478973152"/>
+<file name="ad_nfs_features.c" info="1478973152"/>
+<file name="ad_nfs_iread.c" info="1478973152"/>
+<file name="ad_nfs.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_nfs_getsh.c">
+<fileinfo name="ad_nfs.h">
</fileinfo>
-<fileinfo name="ad_nfs_write.c">
+<fileinfo name="ad_nfs_getsh.c">
</fileinfo>
<fileinfo name="ad_nfs_setsh.c">
</fileinfo>
-<fileinfo name="ad_nfs_wait.c">
-</fileinfo>
-<fileinfo name="ad_nfs_iread.c">
-</fileinfo>
<fileinfo name="ad_nfs_resize.c">
</fileinfo>
-<fileinfo name="ad_nfs_features.c">
-</fileinfo>
<fileinfo name="ad_nfs_hints.c">
</fileinfo>
<fileinfo name="ad_nfs_fcntl.c">
</fileinfo>
-<fileinfo name="ad_nfs_done.c">
+<fileinfo name="ad_nfs_write.c">
+</fileinfo>
+<fileinfo name="ad_nfs_open.c">
</fileinfo>
<fileinfo name="ad_nfs_read.c">
</fileinfo>
-<fileinfo name="ad_nfs.c">
+<fileinfo name="ad_nfs_done.c">
</fileinfo>
<fileinfo name="ad_nfs_iwrite.c">
</fileinfo>
-<fileinfo name="ad_nfs.h">
+<fileinfo name="ad_nfs_wait.c">
</fileinfo>
-<fileinfo name="ad_nfs_open.c">
+<fileinfo name="ad_nfs_features.c">
+</fileinfo>
+<fileinfo name="ad_nfs_iread.c">
+</fileinfo>
+<fileinfo name="ad_nfs.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_nfs/ad_nfs_fcntl.c b/src/mpi/romio/adio/ad_nfs/ad_nfs_fcntl.c
index c73006e..729291f 100644
--- a/src/mpi/romio/adio/ad_nfs/ad_nfs_fcntl.c
+++ b/src/mpi/romio/adio/ad_nfs/ad_nfs_fcntl.c
@@ -7,9 +7,6 @@
#include "ad_nfs.h"
#include "adio_extern.h"
-/* #ifdef MPISGI
-#include "mpisgi2.h"
-#endif */
void ADIOI_NFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code)
{
diff --git a/src/mpi/romio/adio/ad_nfs/ad_nfs_read.c b/src/mpi/romio/adio/ad_nfs/ad_nfs_read.c
index dd2f1c8..8be751c 100644
--- a/src/mpi/romio/adio/ad_nfs/ad_nfs_read.c
+++ b/src/mpi/romio/adio/ad_nfs/ad_nfs_read.c
@@ -92,7 +92,7 @@ void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
{ \
if (req_off >= readbuf_off + readbuf_len) { \
readbuf_off = req_off; \
- readbuf_len = (int) (ADIOI_MIN(max_bufsize, end_offset-readbuf_off+1));\
+ readbuf_len = (int) (MPL_MIN(max_bufsize, end_offset-readbuf_off+1));\
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL ); \
lseek(fd->fd_sys, readbuf_off, SEEK_SET);\
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL ); \
@@ -112,7 +112,7 @@ void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
memcpy(readbuf, tmp_buf, partial_read); \
ADIOI_Free(tmp_buf); \
readbuf_off += readbuf_len-partial_read; \
- readbuf_len = (int) (partial_read + ADIOI_MIN(max_bufsize, \
+ readbuf_len = (int) (partial_read + MPL_MIN(max_bufsize, \
end_offset-readbuf_off+1)); \
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL ); \
lseek(fd->fd_sys, readbuf_off+partial_read, SEEK_SET);\
@@ -131,7 +131,7 @@ void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
{ \
if (req_off >= readbuf_off + readbuf_len) { \
readbuf_off = req_off; \
- readbuf_len = (int) (ADIOI_MIN(max_bufsize, end_offset-readbuf_off+1));\
+ readbuf_len = (int) (MPL_MIN(max_bufsize, end_offset-readbuf_off+1));\
lseek(fd->fd_sys, readbuf_off, SEEK_SET);\
if (!(fd->atomicity)) ADIOI_READ_LOCK(fd, readbuf_off, SEEK_SET, readbuf_len);\
err = read(fd->fd_sys, readbuf, readbuf_len);\
@@ -147,7 +147,7 @@ void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
memcpy(readbuf, tmp_buf, partial_read); \
ADIOI_Free(tmp_buf); \
readbuf_off += readbuf_len-partial_read; \
- readbuf_len = (int) (partial_read + ADIOI_MIN(max_bufsize, \
+ readbuf_len = (int) (partial_read + MPL_MIN(max_bufsize, \
end_offset-readbuf_off+1)); \
lseek(fd->fd_sys, readbuf_off+partial_read, SEEK_SET);\
if (!(fd->atomicity)) ADIOI_READ_LOCK(fd, readbuf_off+partial_read, SEEK_SET, readbuf_len-partial_read);\
@@ -224,7 +224,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
end_offset = off + bufsize - 1;
readbuf_off = off;
readbuf = (char *) ADIOI_Malloc(max_bufsize);
- readbuf_len = (int) (ADIOI_MIN(max_bufsize, end_offset-readbuf_off+1));
+ readbuf_len = (int) (MPL_MIN(max_bufsize, end_offset-readbuf_off+1));
/* if atomicity is true, lock (exclusive) the region to be accessed */
if (fd->atomicity)
@@ -275,9 +275,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
else { /* noncontiguous in file */
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
@@ -370,7 +368,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
i = 0;
j = st_index;
off = offset;
- frd_size = ADIOI_MIN(st_frd_size, bufsize);
+ frd_size = MPL_MIN(st_frd_size, bufsize);
while (i < bufsize) {
i += frd_size;
end_offset = off + frd_size - 1;
@@ -382,7 +380,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
}
off = disp + flat_file->indices[j] + (ADIO_Offset) n_filetypes*filetype_extent;
- frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
+ frd_size = MPL_MIN(flat_file->blocklens[j], bufsize-i);
}
/* if atomicity is true, lock (exclusive) the region to be accessed */
@@ -392,7 +390,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
/* initial read into readbuf */
readbuf_off = offset;
readbuf = (char *) ADIOI_Malloc(max_bufsize);
- readbuf_len = (int) (ADIOI_MIN(max_bufsize, end_offset-readbuf_off+1));
+ readbuf_len = (int) (MPL_MIN(max_bufsize, end_offset-readbuf_off+1));
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
@@ -422,7 +420,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
j = st_index;
off = offset;
n_filetypes = st_n_filetypes;
- frd_size = ADIOI_MIN(st_frd_size, bufsize);
+ frd_size = MPL_MIN(st_frd_size, bufsize);
while (i < bufsize) {
if (frd_size) {
/* TYPE_UB and TYPE_LB can result in
@@ -451,7 +449,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
}
off = disp + flat_file->indices[j] +
(ADIO_Offset) n_filetypes*filetype_extent;
- frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
+ frd_size = MPL_MIN(flat_file->blocklens[j], bufsize-i);
}
}
}
@@ -469,7 +467,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
brd_size = flat_buf->blocklens[0];
while (num < bufsize) {
- size = ADIOI_MIN(frd_size, brd_size);
+ size = MPL_MIN(frd_size, brd_size);
if (size) {
/* lseek(fd->fd_sys, off, SEEK_SET);
err = read(fd->fd_sys, ((char *) buf) + i, size); */
@@ -545,5 +543,4 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
by ADIOI_BUFFERED_READ. */
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
}
diff --git a/src/mpi/romio/adio/ad_nfs/ad_nfs_write.c b/src/mpi/romio/adio/ad_nfs/ad_nfs_write.c
index d9ee5d2..68f5d11 100644
--- a/src/mpi/romio/adio/ad_nfs/ad_nfs_write.c
+++ b/src/mpi/romio/adio/ad_nfs/ad_nfs_write.c
@@ -98,7 +98,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
if (err == -1) err_flag = 1; \
writebuf_off = req_off; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
if (!(fd->atomicity)) ADIOI_WRITE_LOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL ); \
lseek(fd->fd_sys, writebuf_off, SEEK_SET); \
@@ -114,7 +114,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
goto fn_exit; \
} \
} \
- write_sz = (int) (ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ write_sz = (int) (MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
memcpy(writebuf+req_off-writebuf_off, (char *)buf +userbuf_off, write_sz);\
while (write_sz != req_len) { \
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL ); \
@@ -128,7 +128,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
req_len -= write_sz; \
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
if (!(fd->atomicity)) ADIOI_WRITE_LOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL ); \
lseek(fd->fd_sys, writebuf_off, SEEK_SET); \
@@ -143,7 +143,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
"**ioRMWrdwr", 0); \
goto fn_exit; \
} \
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz);\
} \
}
@@ -156,7 +156,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
if (err == -1) err_flag = 1; \
writebuf_off = req_off; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
if (!(fd->atomicity)) ADIOI_WRITE_LOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
lseek(fd->fd_sys, writebuf_off, SEEK_SET); \
err = read(fd->fd_sys, writebuf, writebuf_len); \
@@ -168,7 +168,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
goto fn_exit; \
} \
} \
- write_sz = (int) (ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ write_sz = (int) (MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
memcpy(writebuf+req_off-writebuf_off, (char *)buf +userbuf_off, write_sz);\
while (write_sz != req_len) { \
lseek(fd->fd_sys, writebuf_off, SEEK_SET); \
@@ -178,7 +178,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
req_len -= write_sz; \
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
if (!(fd->atomicity)) ADIOI_WRITE_LOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
lseek(fd->fd_sys, writebuf_off, SEEK_SET); \
err = read(fd->fd_sys, writebuf, writebuf_len); \
@@ -189,7 +189,7 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
"**ioRMWrdwr", 0); \
goto fn_exit; \
} \
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz);\
} \
}
@@ -211,9 +211,9 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
if (err == -1) err_flag = 1; \
writebuf_off = req_off; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
} \
- write_sz = (int) (ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ write_sz = (int) (MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
memcpy(writebuf+req_off-writebuf_off, (char *)buf +userbuf_off, write_sz);\
while (write_sz != req_len) { \
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL ); \
@@ -228,8 +228,8 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
req_len -= write_sz; \
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz);\
} \
}
@@ -243,9 +243,9 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
if (err == -1) err_flag = 1; \
writebuf_off = req_off; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
} \
- write_sz = (int) (ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ write_sz = (int) (MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
memcpy(writebuf+req_off-writebuf_off, (char *)buf +userbuf_off, write_sz);\
while (write_sz != req_len) { \
lseek(fd->fd_sys, writebuf_off, SEEK_SET); \
@@ -256,8 +256,8 @@ void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
req_len -= write_sz; \
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz);\
} \
}
@@ -327,7 +327,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
end_offset = off + bufsize - 1;
writebuf_off = off;
writebuf = (char *) ADIOI_Malloc(max_bufsize);
- writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));
+ writebuf_len = (int) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));
/* if atomicity is true, lock the region to be accessed */
if (fd->atomicity)
@@ -376,9 +376,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
else { /* noncontiguous in file */
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
@@ -470,7 +468,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
i = 0;
j = st_index;
off = offset;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
while (i < bufsize) {
i += fwr_size;
end_offset = off + fwr_size - 1;
@@ -483,7 +481,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
off = disp + flat_file->indices[j] +
(ADIO_Offset) n_filetypes*filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
+ fwr_size = MPL_MIN(flat_file->blocklens[j], bufsize-i);
}
/* if atomicity is true, lock the region to be accessed */
@@ -493,7 +491,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
/* initial read for the read-modify-write */
writebuf_off = offset;
writebuf = (char *) ADIOI_Malloc(max_bufsize);
- writebuf_len = (int)(ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));
+ writebuf_len = (int)(MPL_MIN(max_bufsize,end_offset-writebuf_off+1));
if (!(fd->atomicity)) ADIOI_WRITE_LOCK(fd, writebuf_off, SEEK_SET, writebuf_len);
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
@@ -527,7 +525,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
j = st_index;
off = offset;
n_filetypes = st_n_filetypes;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
while (i < bufsize) {
if (fwr_size) {
/* TYPE_UB and TYPE_LB can result in
@@ -556,7 +554,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
}
off = disp + flat_file->indices[j] +
(ADIO_Offset) n_filetypes*filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
+ fwr_size = MPL_MIN(flat_file->blocklens[j], bufsize-i);
}
}
}
@@ -574,7 +572,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
bwr_size = flat_buf->blocklens[0];
while (num < bufsize) {
- size = ADIOI_MIN(fwr_size, bwr_size);
+ size = MPL_MIN(fwr_size, bwr_size);
if (size) {
/* lseek(fd->fd_sys, off, SEEK_SET);
err = write(fd->fd_sys, ((char *) buf) + i, size); */
@@ -667,7 +665,6 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
fn_exit:
if (writebuf != NULL) ADIOI_Free(writebuf);
diff --git a/src/mpi/romio/adio/ad_ntfs/.state-cache b/src/mpi/romio/adio/ad_ntfs/.state-cache
deleted file mode 100644
index 24b03ab..0000000
--- a/src/mpi/romio/adio/ad_ntfs/.state-cache
+++ /dev/null
@@ -1,46 +0,0 @@
-<dir>
-<file name="ad_ntfs_close.c" info="1447123141"/>
-<file name="ad_ntfs.c" info="1447123141"/>
-<file name="ad_ntfs_wait.c" info="1447123141"/>
-<file name="ad_ntfs_flush.c" info="1447123141"/>
-<file name="ad_ntfs_feature.c" info="1447123141"/>
-<file name="ad_ntfs_fcntl.c" info="1447123141"/>
-<file name="ad_ntfs_iread.c" info="1447123141"/>
-<file name="ad_ntfs.h" info="1447123141"/>
-<file name="ad_ntfs_read.c" info="1447123141"/>
-<file name="ad_ntfs_open.c" info="1447123141"/>
-<file name="ad_ntfs_iwrite.c" info="1447123141"/>
-<file name="ad_ntfs_resize.c" info="1447123141"/>
-<file name="ad_ntfs_done.c" info="1447123141"/>
-<file name="ad_ntfs_write.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_ntfs_close.c">
-</fileinfo>
-<fileinfo name="ad_ntfs.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_wait.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_flush.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_feature.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_fcntl.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_iread.c">
-</fileinfo>
-<fileinfo name="ad_ntfs.h">
-</fileinfo>
-<fileinfo name="ad_ntfs_read.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_open.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_iwrite.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_resize.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_done.c">
-</fileinfo>
-<fileinfo name="ad_ntfs_write.c">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs.c
deleted file mode 100644
index 9788274..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2001 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_NTFS_operations = {
- ADIOI_NTFS_Open, /* Open */
- ADIOI_FAILSAFE_OpenColl, /* OpenColl */
- ADIOI_NTFS_ReadContig, /* ReadContig */
- ADIOI_NTFS_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_NTFS_Fcntl, /* Fcntl */
- ADIOI_GEN_SetInfo, /* SetInfo */
- ADIOI_GEN_ReadStrided, /* ReadStrided */
- ADIOI_GEN_WriteStrided, /* WriteStrided */
- ADIOI_NTFS_Close, /* Close */
- ADIOI_NTFS_IreadContig, /* IreadContig */
- ADIOI_NTFS_IwriteContig, /* IwriteContig */
- ADIOI_NTFS_ReadDone, /* ReadDone */
- ADIOI_NTFS_WriteDone, /* WriteDone */
- ADIOI_NTFS_ReadComplete, /* ReadComplete */
- ADIOI_NTFS_WriteComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_NTFS_Flush, /* Flush */
- ADIOI_NTFS_Resize, /* Resize */
- ADIOI_GEN_Delete, /* Delete */
- ADIOI_NTFS_Feature, /* Features */
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs.h b/src/mpi/romio/adio/ad_ntfs/ad_ntfs.h
deleted file mode 100644
index aed6168..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#ifndef AD_NTFS_INCLUDE
-#define AD_NTFS_INCLUDE
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include "adio.h"
-
-#ifdef HAVE_INT64
-#define DWORDLOW(x) ( (DWORD) ( x & (__int64) 0xFFFFFFFF ) )
-#define DWORDHIGH(x) ( (DWORD) ( (x >> 32) & (__int64) 0xFFFFFFFF ) )
-#define DWORDTOINT64(x,y) ( (__int64) ( ( (__int64 x) << 32 ) + (__int64) y ) )
-#else
-#define DWORDLOW(x) x
-#define DWORDHIGH(x) 0
-#define DWORDTOINT64(x,y) x
-#endif
-
-int ADIOI_NTFS_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset,
- int wr, void *handle);
-
-void ADIOI_NTFS_Open(ADIO_File fd, int *error_code);
-void ADIOI_NTFS_Close(ADIO_File fd, int *error_code);
-void ADIOI_NTFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_NTFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_NTFS_IwriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-void ADIOI_NTFS_IreadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-int ADIOI_NTFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-int ADIOI_NTFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-void ADIOI_NTFS_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-void ADIOI_NTFS_WriteComplete(ADIO_Request *request, ADIO_Status *status,
- int *error_code);
-void ADIOI_NTFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
- *error_code);
-void ADIOI_NTFS_IwriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-void ADIOI_NTFS_Flush(ADIO_File fd, int *error_code);
-void ADIOI_NTFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
-
-#define FORMAT_MESSAGE_MIN_SIZE 100
-#define ADIOI_NTFS_ERR_MSG_MAX FORMAT_MESSAGE_MIN_SIZE
-void ADIOI_NTFS_Strerror(int error, char *errMsg, int errMsgLen);
-
-#endif
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_close.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_close.c
deleted file mode 100644
index 95022dc..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_close.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_Close(ADIO_File fd, int *error_code)
-{
- int err;
- static char myname[] = "ADIOI_NTFS_Close";
-
- err = CloseHandle(fd->fd_sys);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_done.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_done.c
deleted file mode 100644
index 9f4967b..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_done.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-int ADIOI_NTFS_ReadDone(ADIO_Request *request, ADIO_Status *status,
- int *error_code)
-{
- return 0;
-}
-
-
-int ADIOI_NTFS_WriteDone(ADIO_Request *request, ADIO_Status *status,
- int *error_code)
-{
- return 0;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_fcntl.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_fcntl.c
deleted file mode 100644
index 4c7d66c..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_fcntl.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-#include "adio_extern.h"
-
-void ADIOI_NTFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code)
-{
- DWORD err;
- LONG dwTemp;
- static char myname[] = "ADIOI_NTFS_FCNTL";
-
- switch(flag)
- {
- case ADIO_FCNTL_GET_FSIZE:
- fcntl_struct->fsize = SetFilePointer(fd->fd_sys, 0, 0, FILE_END);
- if (fd->fp_sys_posn != -1)
- {
- dwTemp = DWORDHIGH(fd->fp_sys_posn);
- if (SetFilePointer(fd->fd_sys, DWORDLOW(fd->fp_sys_posn), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- if (err != NO_ERROR)
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- return;
- }
- }
- }
- /* --BEGIN ERROR HANDLING-- */
- if (fcntl_struct->fsize == INVALID_SET_FILE_POINTER)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- dwTemp = GetLastError();
- ADIOI_NTFS_Strerror(dwTemp, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", errMsg);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- ADIOI_GEN_Prealloc(fd, fcntl_struct->diskspace, error_code);
- break;
-
- case ADIO_FCNTL_SET_ATOMICITY:
- fd->atomicity = (fcntl_struct->atomicity == 0) ? 0 : 1;
- *error_code = MPI_SUCCESS;
- /*
- fd->atomicity = 0;
- *error_code = MPI_ERR_UNSUPPORTED_OPERATION;
- */
- break;
-
- default:
- /* --BEGIN ERROR HANDLING-- */
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_ARG,
- "**flag", "**flag %d", flag);
- return;
- /* --END ERROR HANDLING-- */
- }
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_feature.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_feature.c
deleted file mode 100644
index 335b5ae..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_feature.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2008 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#include "adio.h"
-
-int ADIOI_NTFS_Feature(ADIO_File fd, int flag)
-{
- switch(flag) {
- /* supported features */
- case ADIO_LOCKS:
- case ADIO_SHARED_FP:
- case ADIO_ATOMIC_MODE:
- case ADIO_DATA_SIEVING_WRITES:
- return 1;
- break;
- /* unsupported features */
- case ADIO_SCALABLE_OPEN:
- case ADIO_UNLINK_AFTER_CLOSE:
- default:
- return 0;
- break;
- }
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_flush.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_flush.c
deleted file mode 100644
index 7656d60..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_flush.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_Flush(ADIO_File fd, int *error_code)
-{
- int err;
- static char myname[] = "ADIOI_NTFS_Flush";
-
- err = (fd->access_mode & ADIO_RDONLY) ? TRUE :
- FlushFileBuffers(fd->fd_sys);
-
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_iread.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_iread.c
deleted file mode 100644
index 845401a..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_iread.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_IreadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int *error_code)
-{
- MPI_Count len, typesize;
- int err;
- static char myname[] = "ADIOI_NTFS_IreadContig";
-
- MPI_Type_size_x(datatype, &typesize);
- len = count * typesize;
-
- if (file_ptr_type == ADIO_INDIVIDUAL)
- {
- offset = fd->fp_ind;
- }
- err = ADIOI_NTFS_aio(fd, buf, len, offset, 0, request);
- if (file_ptr_type == ADIO_INDIVIDUAL)
- {
- fd->fp_ind += len;
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (err != MPI_SUCCESS)
- {
- *error_code = MPIO_Err_create_code(err, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-
- fd->fp_sys_posn = -1; /* set it to null. */
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_iwrite.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_iwrite.c
deleted file mode 100644
index 40a567e..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_iwrite.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-#include "../../mpi-io/mpioimpl.h"
-#include "../../mpi-io/mpioprof.h"
-#include "mpiu_greq.h"
-
-static MPIX_Grequest_class ADIOI_NTFS_greq_class = 0;
-
-/* Fills the input buffer, errMsg, with the error message
- corresponding to error code, error */
-void ADIOI_NTFS_Strerror(int error, char *errMsg, int errMsgLen)
-{
- LPTSTR str;
- int num_bytes;
- num_bytes = FormatMessage(
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_ALLOCATE_BUFFER,
- NULL,
- error,
- 0,
- &str,
- FORMAT_MESSAGE_MIN_SIZE,
- 0);
- if (num_bytes == 0)
- {
- strncpy(errMsg, "\0", errMsgLen);
- }
- else
- {
- strncpy(errMsg, str, errMsgLen);
- LocalFree(str);
- }
-}
-
-/* poll for completion of a single outstanding AIO request */
-int ADIOI_NTFS_aio_poll_fn(void *extra_state, MPI_Status *status)
-{
- ADIOI_AIO_Request *aio_req;
- int mpi_errno = MPI_SUCCESS;
-
- /* FIXME: Validate the args -- has it already been done by the
- caller ? */
-
- aio_req = (ADIOI_AIO_Request *)extra_state;
-
- /* XXX: test for AIO completion here */
- if(!GetOverlappedResult( aio_req->fd, aio_req->lpOvl,
- &(aio_req->nbytes), FALSE)){
- if(GetLastError() == ERROR_IO_INCOMPLETE){
- /* IO in progress */
- /* TODO: need to diddle with status somehow */
- }else{
- /* Error occured */
- /* TODO: unsure how to handle this */
- }
- }else{
- mpi_errno = MPI_Grequest_complete(aio_req->req);
- if (mpi_errno != MPI_SUCCESS) {
- mpi_errno = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "ADIOI_NTFS_aio_poll_fn", __LINE__,
- MPI_ERR_IO, "**mpi_grequest_complete",
- 0);
- }
- }
- return mpi_errno;
-}
-
-
-/* Wait for completion of one of the outstanding AIO requests */
-int ADIOI_NTFS_aio_wait_fn(int count, void **array_of_states,
- double timeout, MPI_Status *status)
-{
- int i, mpi_errno = MPI_SUCCESS;
- ADIOI_AIO_Request **aio_reqlist;
- LPHANDLE lpHandles;
- DWORD retObject=0;
-
- /* FIXME: Validate the args -- has it already been done by the
- caller ? */
- aio_reqlist = (ADIOI_AIO_Request **)array_of_states;
- lpHandles = (LPHANDLE) ADIOI_Calloc(count, sizeof(HANDLE));
- if (lpHandles == NULL)
- {
- mpi_errno = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "ADIOI_NTFS_aio_wait_fn", __LINE__, MPI_ERR_IO,
- "**nomem", "**nomem %s", "Event handles");
- return mpi_errno;
- }
- /* XXX: set-up arrays of outstanding requests */
- for(i=0; i<count; i++){
- lpHandles[i] = (aio_reqlist[i])->lpOvl->hEvent;
- }
-
- /* XXX: wait for one request to complete */
- /* FIXME: Is the timeout in seconds ? */
- timeout = (timeout <= 0) ? INFINITE : (timeout * 1000);
-
- if((retObject = WaitForMultipleObjects(count, lpHandles,
- FALSE, timeout)) != WAIT_FAILED){
- retObject = retObject - WAIT_OBJECT_0;
- if(GetOverlappedResult( aio_reqlist[retObject]->fd,
- aio_reqlist[retObject]->lpOvl, &(aio_reqlist[retObject]->nbytes),
- FALSE)){
- /* XXX: mark completed requests as 'done'*/
- mpi_errno = MPI_Grequest_complete(aio_reqlist[retObject]->req);
- if (mpi_errno != MPI_SUCCESS) {
- mpi_errno = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "ADIOI_NTFS_aio_wait_fn", __LINE__,
- MPI_ERR_IO, "**mpi_grequest_complete",
- 0);
- }
- }else{
- if(GetLastError() == ERROR_IO_INCOMPLETE){
- /* IO in progress */
- /* TODO: need to diddle with status somehow */
- }else{
- /* Error occured */
- /* TODO: not sure how to handle this */
- }
- }
- }else{
- /* TODO: How to handle error while waiting ? */
- }
- ADIOI_Free(lpHandles);
- return mpi_errno;
-}
-
-int ADIOI_NTFS_aio_query_fn(void *extra_state, MPI_Status *status)
-{
- ADIOI_AIO_Request *aio_req;
-
- aio_req = (ADIOI_AIO_Request *)extra_state;
-
-
- MPI_Status_set_elements(status, MPI_BYTE, aio_req->nbytes);
-
- /* can never cancel so always true */
- MPI_Status_set_cancelled(status, 0);
-
- /* choose not to return a value for this */
- status->MPI_SOURCE = MPI_UNDEFINED;
- /* tag has no meaning for this generalized request */
- status->MPI_TAG = MPI_UNDEFINED;
- /* this generalized request never fails */
- return MPI_SUCCESS;
-}
-
-
-int ADIOI_NTFS_aio_free_fn(void *extra_state)
-{
- ADIOI_AIO_Request *aio_req;
- /* FIXME: Validate the args -- has it already been done by the
- caller ? */
- aio_req = (ADIOI_AIO_Request*)extra_state;
- CloseHandle(aio_req->lpOvl->hEvent);
- ADIOI_Free(aio_req->lpOvl);
- ADIOI_Free(aio_req);
- return MPI_SUCCESS;
-}
-
-void ADIOI_NTFS_IwriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request,
- int *error_code)
-{
- MPI_Count len, typesize;
- int err;
- static char myname[] = "ADIOI_NTFS_IwriteContig";
-
- MPI_Type_size_x(datatype, &typesize);
- len = count * typesize;
-
- if (file_ptr_type == ADIO_INDIVIDUAL)
- {
- offset = fd->fp_ind;
- }
- err = ADIOI_NTFS_aio(fd, buf, len, offset, 1, request);
- if (file_ptr_type == ADIO_INDIVIDUAL)
- {
- fd->fp_ind += len;
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (err != MPI_SUCCESS)
- {
- *error_code = MPIO_Err_create_code(err, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-
- fd->fp_sys_posn = -1; /* set it to null. */
-}
-
-
-/* This function is for implementation convenience. It is not user-visible.
- * If wr==1 write, wr==0 read.
- *
- * Returns MPI_SUCCESS on success, mpi_errno on failure.
- */
-int ADIOI_NTFS_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset,
- int wr, MPI_Request *request)
-{
- static char myname[] = "ADIOI_NTFS_aio";
-
- ADIOI_AIO_Request *aio_req;
- static DWORD dwNumWritten, dwNumRead;
- BOOL ret_val = FALSE;
- FDTYPE fd_sys;
- int mpi_errno = MPI_SUCCESS;
- DWORD err;
-
- fd_sys = fd->fd_sys;
-
- aio_req = (ADIOI_AIO_Request *)ADIOI_Calloc(sizeof(ADIOI_AIO_Request), 1);
- if (aio_req == NULL)
- {
- mpi_errno = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**nomem", "**nomem %s", "AIO_REQ");
- return mpi_errno;
- }
- aio_req->lpOvl = (LPOVERLAPPED ) ADIOI_Calloc(sizeof(OVERLAPPED), 1);
- if (aio_req->lpOvl == NULL)
- {
- mpi_errno = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**nomem", "**nomem %s", "OVERLAPPED");
- ADIOI_Free(aio_req);
- return mpi_errno;
- }
- aio_req->lpOvl->hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (aio_req->lpOvl->hEvent == NULL)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- mpi_errno = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- ADIOI_Free(aio_req->lpOvl);
- ADIOI_Free(aio_req);
- return mpi_errno;
- }
- aio_req->lpOvl->Offset = DWORDLOW(offset);
- aio_req->lpOvl->OffsetHigh = DWORDHIGH(offset);
- aio_req->fd = fd_sys;
-
- /* XXX: initiate async I/O */
- if (wr)
- {
- ret_val = WriteFile(fd_sys, buf, len, &dwNumWritten, aio_req->lpOvl);
- }
- else
- {
- ret_val = ReadFile(fd_sys, buf, len, &dwNumRead, aio_req->lpOvl);
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (ret_val == FALSE)
- {
- mpi_errno = GetLastError();
- if (mpi_errno != ERROR_IO_PENDING)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- ADIOI_NTFS_Strerror(mpi_errno, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- mpi_errno = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return mpi_errno;
- }
- mpi_errno = MPI_SUCCESS;
- }
- /* --END ERROR HANDLING-- */
-
- /* XXX: set up generalized request class and request */
- if (ADIOI_NTFS_greq_class == 0) {
- mpi_errno = MPIX_Grequest_class_create(ADIOI_NTFS_aio_query_fn,
- ADIOI_NTFS_aio_free_fn, MPIU_Greq_cancel_fn,
- ADIOI_NTFS_aio_poll_fn, ADIOI_NTFS_aio_wait_fn,
- &ADIOI_NTFS_greq_class);
- if(mpi_errno != MPI_SUCCESS){
- /* FIXME: Pass appropriate error code to user */
- }
- }
- mpi_errno = MPIX_Grequest_class_allocate(ADIOI_NTFS_greq_class, aio_req, request);
- if(mpi_errno != MPI_SUCCESS){
- /* FIXME: Pass appropriate error code to user */
- }
- memcpy(&(aio_req->req), request, sizeof(MPI_Request));
- return mpi_errno;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_open.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_open.c
deleted file mode 100644
index 3a49418..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_open.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_Open(ADIO_File fd, int *error_code)
-{
- int err;
- int cmode, amode, attrib;
- static char myname[] = "ADIOI_NTFS_Open";
-
- amode = 0;
- cmode = OPEN_EXISTING;
-#ifdef USE_WIN_THREADED_IO
- attrib = FILE_FLAG_OVERLAPPED;
-#else
- attrib = FILE_ATTRIBUTE_NORMAL;
-#endif
-
- if (fd->access_mode & ADIO_CREATE)
- {
- cmode = OPEN_ALWAYS;
- }
- if (fd->access_mode & ADIO_EXCL)
- {
- cmode = CREATE_NEW;
- }
-
- if (fd->access_mode & ADIO_RDONLY)
- {
- amode = GENERIC_READ;
- }
- if (fd->access_mode & ADIO_WRONLY)
- {
- amode = GENERIC_WRITE;
- }
- if (fd->access_mode & ADIO_RDWR)
- {
- amode = GENERIC_READ | GENERIC_WRITE;
- }
-
- if (fd->access_mode & ADIO_DELETE_ON_CLOSE)
- {
- attrib = attrib | FILE_FLAG_DELETE_ON_CLOSE;
- }
- if (fd->access_mode & ADIO_SEQUENTIAL)
- {
- attrib = attrib | FILE_FLAG_SEQUENTIAL_SCAN;
- }
- else
- {
- attrib = attrib | FILE_FLAG_RANDOM_ACCESS;
- }
-
- fd->fd_sys = CreateFile(fd->filename,
- amode,
- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
- NULL,
- cmode,
- attrib,
- NULL);
- fd->fd_direct = -1;
-
- if ((fd->fd_sys != INVALID_HANDLE_VALUE) && (fd->access_mode & ADIO_APPEND))
- {
- fd->fp_ind = fd->fp_sys_posn = SetFilePointer(fd->fd_sys, 0, NULL, FILE_END);
- if (fd->fp_ind == INVALID_SET_FILE_POINTER)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- if (err != NO_ERROR)
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- return;
- }
- }
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (fd->fd_sys == INVALID_HANDLE_VALUE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_read.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_read.c
deleted file mode 100644
index 7c55c1b..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_read.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
- LONG dwTemp;
- DWORD dwNumRead = 0;
- int err=-1;
- MPI_Count datatype_size, len;
- static char myname[] = "ADIOI_NTFS_ReadContig";
- OVERLAPPED *pOvl;
-
- /* If file pointer is of type ADIO_INDIVIDUAL ignore the offset
- and use the current location of file pointer */
- if(file_ptr_type == ADIO_INDIVIDUAL){
- offset = fd->fp_ind;
- }
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- pOvl = (OVERLAPPED *) ADIOI_Calloc(sizeof(OVERLAPPED), 1);
- if (pOvl == NULL)
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**nomem", "**nomem %s", "OVERLAPPED");
- return;
- }
- pOvl->hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
- if (pOvl->hEvent == NULL)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- ADIOI_Free(pOvl);
- return;
- }
- pOvl->Offset = DWORDLOW(offset);
- pOvl->OffsetHigh = DWORDHIGH(offset);
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
- {
- if (fd->fp_sys_posn != offset)
- {
- dwTemp = DWORDHIGH(offset);
- if (SetFilePointer(fd->fd_sys, DWORDLOW(offset), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- if (err != NO_ERROR)
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- }
- /*
- {
- ADIO_Fcntl_t fcntl_struct;
- int error_code;
- ADIO_Fcntl(fd, ADIO_FCNTL_GET_FSIZE, &fcntl_struct, &error_code);
- printf("File size b: %d\n", fcntl_struct.fsize);
- }
- printf("ReadFile(%d bytes)\n", len);fflush(stdout);
- */
- err = ReadFile(fd->fd_sys, buf, len, &dwNumRead, pOvl);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- switch (err)
- {
- case ERROR_IO_PENDING:
- break;
- case ERROR_HANDLE_EOF:
- /*printf("EOF error\n");fflush(stdout);*/
- SetEvent(pOvl->hEvent);
- break;
- default:
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- /* --END ERROR HANDLING-- */
- err = GetOverlappedResult(fd->fd_sys, pOvl, &dwNumRead, TRUE);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- if (err != ERROR_HANDLE_EOF) /* Ignore EOF errors */
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- /* --END ERROR HANDLING-- */
- if (!CloseHandle(pOvl->hEvent))
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- ADIOI_Free(pOvl);
-
- fd->fp_sys_posn = offset + (ADIO_Offset)dwNumRead;
- /* individual file pointer not updated */
- }
- else
- {
- /* read from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind)
- {
- dwTemp = DWORDHIGH(fd->fp_ind);
- if (SetFilePointer(fd->fd_sys, DWORDLOW(fd->fp_ind), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- if (err != NO_ERROR)
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- }
- /*
- {
- ADIO_Fcntl_t fcntl_struct;
- int error_code;
- ADIO_Fcntl(fd, ADIO_FCNTL_GET_FSIZE, &fcntl_struct, &error_code);
- printf("File size c: %d\n", fcntl_struct.fsize);
- }
- printf("ReadFile(%d bytes)\n", len);fflush(stdout);
- */
- err = ReadFile(fd->fd_sys, buf, len, &dwNumRead, pOvl);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- switch (err)
- {
- case ERROR_IO_PENDING:
- break;
- case ERROR_HANDLE_EOF:
- /*printf("EOF error\n");fflush(stdout);*/
- SetEvent(pOvl->hEvent);
- break;
- default:
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- /* --END ERROR HANDLING-- */
- err = GetOverlappedResult(fd->fd_sys, pOvl, &dwNumRead, TRUE);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- if (err != ERROR_HANDLE_EOF) /* Ignore EOF errors */
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- /* --END ERROR HANDLING-- */
- if (!CloseHandle(pOvl->hEvent))
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- ADIOI_Free(pOvl);
- return;
- }
- ADIOI_Free(pOvl);
-
- fd->fp_ind = fd->fp_ind + (ADIO_Offset)dwNumRead;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != FALSE)
- {
- MPIR_Status_set_bytes(status, datatype, dwNumRead);
- }
-#endif
-
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_resize.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_resize.c
deleted file mode 100644
index 0fbeaaf..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_resize.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
-{
- LONG dwTemp;
- DWORD err;
- BOOL result;
- static char myname[] = "ADIOI_NTFS_Resize";
-
- dwTemp = DWORDHIGH(size);
- err = SetFilePointer(fd->fd_sys, DWORDLOW(size), &dwTemp, FILE_BEGIN);
- /* --BEGIN ERROR HANDLING-- */
- if (err == INVALID_SET_FILE_POINTER)
- {
- err = GetLastError();
- if (err != NO_ERROR)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return;
- }
- }
- /*printf("setting file length to %d\n", size);fflush(stdout);*/
- /* --END ERROR HANDLING-- */
- result = SetEndOfFile(fd->fd_sys);
- /* --BEGIN ERROR HANDLING-- */
- if (result == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_wait.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_wait.c
deleted file mode 100644
index 80dfa4d..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_wait.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_ReadComplete(ADIO_Request *request, ADIO_Status *status,
- int *error_code)
-{
- return;
-}
-
-
-void ADIOI_NTFS_WriteComplete(ADIO_Request *request, ADIO_Status *status,
- int *error_code)
-{
- return;
-}
diff --git a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_write.c b/src/mpi/romio/adio/ad_ntfs/ad_ntfs_write.c
deleted file mode 100644
index 389e866..0000000
--- a/src/mpi/romio/adio/ad_ntfs/ad_ntfs_write.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_ntfs.h"
-
-void ADIOI_NTFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
- static char myname[] = "ADIOI_NTFS_WriteContig";
- LONG dwTemp;
- DWORD dwNumWritten = 0;
- MPI_Count err=-1, datatype_size, len;
- OVERLAPPED *pOvl;
-
- /* If file pointer type in ADIO_INDIVIDUAL then offset should be
- ignored and the current location of file pointer should be used */
- if(file_ptr_type == ADIO_INDIVIDUAL){
- offset = fd->fp_ind;
- }
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- pOvl = (OVERLAPPED *) ADIOI_Calloc(sizeof(OVERLAPPED), 1);
- if (pOvl == NULL)
- {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**nomem", "**nomem %s", "OVERLAPPED");
- return;
- }
- pOvl->hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
- if (pOvl->hEvent == NULL)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- ADIOI_Free(pOvl);
- return;
- }
- pOvl->Offset = DWORDLOW(offset);
- pOvl->OffsetHigh = DWORDHIGH(offset);
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
- {
- if (fd->fp_sys_posn != offset)
- {
- dwTemp = DWORDHIGH(offset);
- if (SetFilePointer(fd->fd_sys, DWORDLOW(offset), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
- {
- err = GetLastError();
- if (err != NO_ERROR)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- }
- /*printf("WriteFile(%d bytes)\n", len);fflush(stdout);*/
- err = WriteFile(fd->fd_sys, buf, len, &dwNumWritten, pOvl);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- err = GetLastError();
- if (err != ERROR_IO_PENDING)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- /* --END ERROR HANDLING-- */
- err = GetOverlappedResult(fd->fd_sys, pOvl, &dwNumWritten, TRUE);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- /* --END ERROR HANDLING-- */
- if (!CloseHandle(pOvl->hEvent))
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- ADIOI_Free(pOvl);
-
- fd->fp_sys_posn = offset + dwNumWritten;
- /* individual file pointer not updated */
- }
- else
- {
- /* write from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind)
- {
- dwTemp = DWORDHIGH(fd->fp_ind);
- if (SetFilePointer(fd->fd_sys, DWORDLOW(fd->fp_ind), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
- {
- err = GetLastError();
- if (err != NO_ERROR)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- }
- /*printf("WriteFile(%d bytes)\n", len);fflush(stdout);*/
- err = WriteFile(fd->fd_sys, buf, len, &dwNumWritten, pOvl);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- err = GetLastError();
- if (err != ERROR_IO_PENDING)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- }
- /* --END ERROR HANDLING-- */
- err = GetOverlappedResult(fd->fd_sys, pOvl, &dwNumWritten, TRUE);
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", errMsg);
- CloseHandle(pOvl->hEvent);
- ADIOI_Free(pOvl);
- return;
- }
- /* --END ERROR HANDLING-- */
- if (!CloseHandle(pOvl->hEvent))
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io", "**io %s", errMsg);
- ADIOI_Free(pOvl);
- return;
- }
- ADIOI_Free(pOvl);
-
- fd->fp_ind = fd->fp_ind + dwNumWritten;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != FALSE)
- {
- MPIR_Status_set_bytes(status, datatype, dwNumWritten);
- }
-#endif
-
- /* --BEGIN ERROR HANDLING-- */
- if (err == FALSE)
- {
- char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
- err = GetLastError();
- ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", errMsg);
- return;
- }
- /* --END ERROR HANDLING-- */
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_panfs/.state-cache b/src/mpi/romio/adio/ad_panfs/.state-cache
index 7f92e5d..d164b90 100644
--- a/src/mpi/romio/adio/ad_panfs/.state-cache
+++ b/src/mpi/romio/adio/ad_panfs/.state-cache
@@ -1,28 +1,28 @@
<dir>
-<file name="ad_panfs_open6.c" info="1447123141"/>
-<file name="ad_panfs_resize.c" info="1447123141"/>
-<file name="ad_panfs_write.c" info="1447123141"/>
-<file name="ad_panfs_open.c" info="1447123141"/>
-<file name="ad_panfs_hints.c" info="1447123141"/>
-<file name="ad_panfs.c" info="1447123141"/>
-<file name="ad_panfs_read.c" info="1447123141"/>
-<file name="ad_panfs.h" info="1447123141"/>
+<file name="ad_panfs.c" info="1478973152"/>
+<file name="ad_panfs_resize.c" info="1478973152"/>
+<file name="ad_panfs_open6.c" info="1478973152"/>
+<file name="ad_panfs.h" info="1478973152"/>
+<file name="ad_panfs_write.c" info="1478973152"/>
+<file name="ad_panfs_open.c" info="1478973152"/>
+<file name="ad_panfs_read.c" info="1478973152"/>
+<file name="ad_panfs_hints.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_panfs_open6.c">
+<fileinfo name="ad_panfs.c">
</fileinfo>
<fileinfo name="ad_panfs_resize.c">
</fileinfo>
-<fileinfo name="ad_panfs_write.c">
+<fileinfo name="ad_panfs_open6.c">
</fileinfo>
-<fileinfo name="ad_panfs_open.c">
+<fileinfo name="ad_panfs.h">
</fileinfo>
-<fileinfo name="ad_panfs_hints.c">
+<fileinfo name="ad_panfs_write.c">
</fileinfo>
-<fileinfo name="ad_panfs.c">
+<fileinfo name="ad_panfs_open.c">
</fileinfo>
<fileinfo name="ad_panfs_read.c">
</fileinfo>
-<fileinfo name="ad_panfs.h">
+<fileinfo name="ad_panfs_hints.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_panfs/ad_panfs_open.c b/src/mpi/romio/adio/ad_panfs/ad_panfs_open.c
index d5374eb..4a8fafc 100644
--- a/src/mpi/romio/adio/ad_panfs/ad_panfs_open.c
+++ b/src/mpi/romio/adio/ad_panfs/ad_panfs_open.c
@@ -295,36 +295,36 @@ void ADIOI_PANFS_Open(ADIO_File fd, int *error_code)
}
else
{
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.agg_type);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.agg_type);
ADIOI_Info_set(fd->info, "panfs_layout_type", temp_buffer);
if (file_query_args.layout.layout_is_valid == 1)
{
switch (file_query_args.layout.agg_type)
{
case PAN_FS_CLIENT_LAYOUT_TYPE__RAID0:
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid0.stripe_unit);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid0.stripe_unit);
ADIOI_Info_set(fd->info, "panfs_layout_stripe_unit", temp_buffer);
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid0.total_num_comps);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid0.total_num_comps);
ADIOI_Info_set(fd->info, "panfs_layout_total_num_comps", temp_buffer);
break;
case PAN_FS_CLIENT_LAYOUT_TYPE__RAID1_5_PARITY_STRIPE:
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.stripe_unit);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.stripe_unit);
ADIOI_Info_set(fd->info, "panfs_layout_stripe_unit", temp_buffer);
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.parity_stripe_width);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.parity_stripe_width);
ADIOI_Info_set(fd->info, "panfs_layout_parity_stripe_width", temp_buffer);
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.parity_stripe_depth);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.parity_stripe_depth);
ADIOI_Info_set(fd->info, "panfs_layout_parity_stripe_depth", temp_buffer);
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.total_num_comps);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.total_num_comps);
ADIOI_Info_set(fd->info, "panfs_layout_total_num_comps", temp_buffer);
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.layout_visit_policy);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid1_5_parity_stripe.layout_visit_policy);
ADIOI_Info_set(fd->info, "panfs_layout_visit_policy", temp_buffer);
break;
case PAN_FS_CLIENT_LAYOUT_TYPE__RAID10:
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid10.stripe_unit);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid10.stripe_unit);
ADIOI_Info_set(fd->info, "panfs_layout_stripe_unit", temp_buffer);
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid10.total_num_comps);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid10.total_num_comps);
ADIOI_Info_set(fd->info, "panfs_layout_total_num_comps", temp_buffer);
- ADIOI_Snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid10.layout_visit_policy);
+ MPL_snprintf(temp_buffer,TEMP_BUFFER_SIZE,"%u",file_query_args.layout.u.raid10.layout_visit_policy);
ADIOI_Info_set(fd->info, "panfs_layout_visit_policy", temp_buffer);
break;
case PAN_FS_CLIENT_LAYOUT_TYPE__INVALID:
diff --git a/src/mpi/romio/adio/ad_panfs/ad_panfs_open6.c b/src/mpi/romio/adio/ad_panfs/ad_panfs_open6.c
index 6906ff0..9876878 100644
--- a/src/mpi/romio/adio/ad_panfs/ad_panfs_open6.c
+++ b/src/mpi/romio/adio/ad_panfs/ad_panfs_open6.c
@@ -361,60 +361,60 @@ void ADIOI_PANFS_Open6(ADIO_File fd, int *error_code)
ADIOI_Info_set(fd->info, "panfs_layout_type", "PAN_FS_CLIENT_LAYOUT_TYPE__INVALID");
}
else {
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u", file_query_args.layout.agg_type);
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u", file_query_args.layout.agg_type);
ADIOI_Info_set(fd->info, "panfs_layout_type", temp_buffer);
if (file_query_args.layout.layout_is_valid == 1) {
switch (file_query_args.layout.agg_type) {
case PAN_FS_CLIENT_LAYOUT_TYPE__RAIDN_PARITY_STRIPE:
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raidn_parity_stripe.stripe_unit);
ADIOI_Info_set(fd->info, "panfs_layout_stripe_unit", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raidn_parity_stripe.
parity_stripe_width);
ADIOI_Info_set(fd->info, "panfs_layout_parity_stripe_width", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raidn_parity_stripe.
parity_stripe_depth);
ADIOI_Info_set(fd->info, "panfs_layout_parity_stripe_depth", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raidn_parity_stripe.total_num_comps);
ADIOI_Info_set(fd->info, "panfs_layout_total_num_comps", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raidn_parity_stripe.max_faults);
ADIOI_Info_set(fd->info, "panfs_layout_max_faults", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raidn_parity_stripe.encoding);
ADIOI_Info_set(fd->info, "panfs_layout_encoding", temp_buffer);
break;
case PAN_FS_CLIENT_LAYOUT_TYPE__RAID1_5_PARITY_STRIPE:
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid1_5_parity_stripe.stripe_unit);
ADIOI_Info_set(fd->info, "panfs_layout_stripe_unit", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid1_5_parity_stripe.
parity_stripe_width);
ADIOI_Info_set(fd->info, "panfs_layout_parity_stripe_width", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid1_5_parity_stripe.
parity_stripe_depth);
ADIOI_Info_set(fd->info, "panfs_layout_parity_stripe_depth", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid1_5_parity_stripe.total_num_comps);
ADIOI_Info_set(fd->info, "panfs_layout_total_num_comps", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid1_5_parity_stripe.
layout_visit_policy);
ADIOI_Info_set(fd->info, "panfs_layout_visit_policy", temp_buffer);
break;
case PAN_FS_CLIENT_LAYOUT_TYPE__RAID10:
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid10.stripe_unit);
ADIOI_Info_set(fd->info, "panfs_layout_stripe_unit", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid10.total_num_comps);
ADIOI_Info_set(fd->info, "panfs_layout_total_num_comps", temp_buffer);
- ADIOI_Snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
+ MPL_snprintf(temp_buffer, TEMP_BUFFER_SIZE, "%u",
file_query_args.layout.u.raid10.layout_visit_policy);
ADIOI_Info_set(fd->info, "panfs_layout_visit_policy", temp_buffer);
break;
diff --git a/src/mpi/romio/adio/ad_pfs/.state-cache b/src/mpi/romio/adio/ad_pfs/.state-cache
deleted file mode 100644
index 48bc1ac..0000000
--- a/src/mpi/romio/adio/ad_pfs/.state-cache
+++ /dev/null
@@ -1,40 +0,0 @@
-<dir>
-<file name="ad_pfs_flush.c" info="1447123141"/>
-<file name="ad_pfs_fcntl.c" info="1447123141"/>
-<file name="ad_pfs.h" info="1447123141"/>
-<file name="ad_pfs_write.c" info="1447123141"/>
-<file name="ad_pfs_read.c" info="1447123141"/>
-<file name="ad_pfs_iread.c" info="1447123141"/>
-<file name="ad_pfs_wait.c" info="1447123141"/>
-<file name="ad_pfs_done.c" info="1447123141"/>
-<file name="ad_pfs.c" info="1447123141"/>
-<file name="ad_pfs_open.c" info="1447123141"/>
-<file name="ad_pfs_iwrite.c" info="1447123141"/>
-<file name="ad_pfs_hints.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_pfs_flush.c">
-</fileinfo>
-<fileinfo name="ad_pfs_fcntl.c">
-</fileinfo>
-<fileinfo name="ad_pfs.h">
-</fileinfo>
-<fileinfo name="ad_pfs_write.c">
-</fileinfo>
-<fileinfo name="ad_pfs_read.c">
-</fileinfo>
-<fileinfo name="ad_pfs_iread.c">
-</fileinfo>
-<fileinfo name="ad_pfs_wait.c">
-</fileinfo>
-<fileinfo name="ad_pfs_done.c">
-</fileinfo>
-<fileinfo name="ad_pfs.c">
-</fileinfo>
-<fileinfo name="ad_pfs_open.c">
-</fileinfo>
-<fileinfo name="ad_pfs_iwrite.c">
-</fileinfo>
-<fileinfo name="ad_pfs_hints.c">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_pfs/Makefile.mk b/src/mpi/romio/adio/ad_pfs/Makefile.mk
deleted file mode 100644
index 3521c07..0000000
--- a/src/mpi/romio/adio/ad_pfs/Makefile.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_AD_PFS
-
-noinst_HEADERS += adio/ad_pfs/ad_pfs.h
-
-romio_other_sources += \
- adio/ad_pfs/ad_pfs_read.c \
- adio/ad_pfs/ad_pfs_open.c \
- adio/ad_pfs/ad_pfs_write.c \
- adio/ad_pfs/ad_pfs_done.c \
- adio/ad_pfs/ad_pfs_fcntl.c \
- adio/ad_pfs/ad_pfs_iread.c \
- adio/ad_pfs/ad_pfs_iwrite.c \
- adio/ad_pfs/ad_pfs_wait.c \
- adio/ad_pfs/ad_pfs_flush.c \
- adio/ad_pfs/ad_pfs_hints.c \
- adio/ad_pfs/ad_pfs.c
-
-endif BUILD_AD_PFS
-
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs.c b/src/mpi/romio/adio/ad_pfs/ad_pfs.c
deleted file mode 100644
index cc480b0..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2001 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_PFS_operations = {
- ADIOI_PFS_Open, /* Open */
- ADIOI_PFS_ReadContig, /* ReadContig */
- ADIOI_PFS_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_PFS_Fcntl, /* Fcntl */
- ADIOI_PFS_SetInfo, /* SetInfo */
- ADIOI_GEN_ReadStrided, /* ReadStrided */
- ADIOI_GEN_WriteStrided, /* WriteStrided */
- ADIOI_GEN_Close, /* Close */
- ADIOI_PFS_IreadContig, /* IreadContig */
- ADIOI_PFS_IwriteContig, /* IwriteContig */
- ADIOI_PFS_ReadDone, /* ReadDone */
- ADIOI_PFS_WriteDone, /* WriteDone */
- ADIOI_PFS_ReadComplete, /* ReadComplete */
- ADIOI_PFS_WriteComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_PFS_Flush, /* Flush */
- ADIOI_GEN_Resize, /* Resize */
- ADIOI_GEN_Delete, /* Delete */
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs.h b/src/mpi/romio/adio/ad_pfs/ad_pfs.h
deleted file mode 100644
index fbe055c..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-/* contains definitions, declarations, and macros specific to the
- implementation of ADIO on PFS */
-
-#ifndef AD_PFS_INCLUDE
-#define AD_PFS_INCLUDE
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <nx.h>
-#include <sys/uio.h>
-#include "adio.h"
-
-#ifdef tflops
-#define lseek eseek
-#define _gopen(n,m,i,p) open(n,m,p)
-#endif
-
-/* PFS file-pointer modes (removed most of them because they are unused) */
-#ifndef M_ASYNC
-#define M_UNIX 0
-#define M_ASYNC 5
-#endif
-
-void ADIOI_PFS_Open(ADIO_File fd, int *error_code);
-void ADIOI_PFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PFS_IwriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-void ADIOI_PFS_IreadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int
- *error_code);
-int ADIOI_PFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-int ADIOI_PFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-void ADIOI_PFS_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
- *error_code);
-void ADIOI_PFS_WriteComplete(ADIO_Request *request, ADIO_Status *status,
- int *error_code);
-void ADIOI_PFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
- *error_code);
-void ADIOI_PFS_Flush(ADIO_File fd, int *error_code);
-void ADIOI_PFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
-
-#endif
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_done.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_done.c
deleted file mode 100644
index 60e2d7d..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_done.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-int ADIOI_PFS_ReadDone(ADIO_Request *request, ADIO_Status *status,
- int *error_code)
-{
- int done=0;
- static char myname[] = "ADIOI_PFS_READDONE";
-
- if (*request == ADIO_REQUEST_NULL) {
- *error_code = MPI_SUCCESS;
- return 1;
- }
-
- if ((*request)->queued)
- done = _iodone(*((long *) (*request)->handle));
- else done = 1; /* ADIOI_Complete_Async completed this request,
- but request object was not freed. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- if ((done >= 0) && ((*request)->nbytes != -1))
- MPIR_Status_set_bytes(status, (*request)->datatype, (*request)->nbytes);
-#endif
-
- if (done >= 0) {
- /* if request is still queued in the system, it is also there
- on ADIOI_Async_list. Delete it from there. */
- if ((*request)->queued) ADIOI_Del_req_from_list(request);
-
- (*request)->fd->async_count--;
- if ((*request)->handle) ADIOI_Free((*request)->handle);
- ADIOI_Free_request((ADIOI_Req_node *) (*request));
- *request = ADIO_REQUEST_NULL;
- }
-
- if (done == -1 && errno != 0) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
- return done;
-}
-
-
-int ADIOI_PFS_WriteDone(ADIO_Request *request, ADIO_Status *status,
- int *error_code)
-{
- return ADIOI_PFS_ReadDone(request, status, error_code);
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_fcntl.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_fcntl.c
deleted file mode 100644
index 4a2c0fd..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_fcntl.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-#include "adio_extern.h"
-
-void ADIOI_PFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
- int *error_code)
-{
- int i, err;
- int iomod, np_total, np_comm;
- static char myname[] = "ADIOI_PFS_FCNTL";
-
- switch(flag) {
- case ADIO_FCNTL_GET_FSIZE:
- if (!(fd->atomicity)) {
- /* in M_ASYNC mode, all processes are not aware of changes
- in file size (although the manual says otherwise). Therefore,
- temporarily change to M_UNIX and then change
- back to M_ASYNC.*/
- MPI_Comm_size(MPI_COMM_WORLD, &np_total);
- MPI_Comm_size(fd->comm, &np_comm);
- if (np_total == np_comm) {
- err = _setiomode(fd->fd_sys, M_UNIX);
- err = _setiomode(fd->fd_sys, M_ASYNC);
- }
- /* else it is M_UNIX anyway, so no problem */
- }
- fcntl_struct->fsize = lseek(fd->fd_sys, 0, SEEK_END);
- if (fd->fp_sys_posn != -1)
- lseek(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
- *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- err = _lsize(fd->fd_sys, fcntl_struct->diskspace, SEEK_SET);
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_ATOMICITY:
- MPI_Comm_size(MPI_COMM_WORLD, &np_total);
- MPI_Comm_size(fd->comm, &np_comm);
- if (np_total == np_comm) {
- iomod = (fcntl_struct->atomicity == 0) ? M_ASYNC : M_UNIX;
- err = _setiomode(fd->fd_sys, iomod);
- }
- /* else can't do anything because setiomode is global. but
- the file will have been opened with M_UNIX anyway, because
- gopen is also global. */
-
- fd->atomicity = (fcntl_struct->atomicity == 0) ? 0 : 1;
- if (err == -1) {
- /* --BEGIN ERROR HANDLING-- */
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- /* --END ERROR HANDLING-- */
- }
- else *error_code = MPI_SUCCESS;
- break;
-
- default:
- /* --BEGIN ERROR HANDLING-- */
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPI_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_ARG,
- "**flag", "**flag %d", flag);
- return;
- /* --END ERROR HANDLING-- */
- }
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_flush.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_flush.c
deleted file mode 100644
index 98dedc0..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_flush.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_Flush(ADIO_File fd, int *error_code)
-{
- int err, np_total, np_comm;
- static char myname[] = "ADIOI_PFS_FLUSH";
-
-/* fsync is not actually needed in PFS, because it uses something
- called fast-path I/O. However, it doesn't do any harm either. */
- err = fsync(fd->fd_sys);
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-
-/* MPI-IO requires that after an fsync all processes must see the same
- file size. In PFS M_ASYNC mode, this doesn't automatically happen.
- Therefore, if M_ASYNC mode, temporarily change it to M_UNIX mode
- and then switch back to M_ASYNC. That updates the file size! */
-
- MPI_Comm_size(MPI_COMM_WORLD, &np_total);
- MPI_Comm_size(fd->comm, &np_comm);
- if ((np_total == np_comm) && (!(fd->atomicity))) {
- err = _setiomode(fd->fd_sys, M_UNIX);
- err = _setiomode(fd->fd_sys, M_ASYNC);
- }
- /* else it is M_UNIX anyway. don't do anything. */
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_hints.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_hints.c
deleted file mode 100644
index 407a0eb..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_hints.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
-{
- char *value, *value_in_fd;
- int flag, tmp_val, str_factor=-1, str_unit=-1, start_iodev=-1;
- struct sattr attr;
- int err, myrank, fd_sys, perm, amode, old_mask;
-
- if ( (fd->info) == MPI_INFO_NULL) {
- /* This must be part of the open call. can set striping parameters
- if necessary. */
- MPI_Info_create(&(fd->info));
-
- /* has user specified striping or server buffering parameters
- and do they have the same value on all processes? */
- if (users_info != MPI_INFO_NULL) {
- value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
-
- ADIOI_Info_get(users_info, "striping_factor", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- str_factor=atoi(value);
- tmp_val = str_factor;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- /* --BEGIN ERROR HANDLING-- */
- if (tmp_val != str_factor) {
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "striping_factor",
- error_code);
- return;
- }
- /* --END ERROR HANDLING-- */
- }
-
- ADIOI_Info_get(users_info, "striping_unit", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- str_unit=atoi(value);
- tmp_val = str_unit;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- /* --BEGIN ERROR HANDLING-- */
- if (tmp_val != str_unit) {
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "striping_unit",
- error_code);
- return;
- }
- /* --END ERROR HANDLING-- */
- }
-
- ADIOI_Info_get(users_info, "start_iodevice", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- start_iodev=atoi(value);
- tmp_val = start_iodev;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- /* --BEGIN ERROR HANDLING-- */
- if (tmp_val != start_iodev) {
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "start_iodevice",
- error_code);
- return;
- }
- /* --END ERROR HANDLING-- */
- }
-
- /* if user has specified striping info, process 0 tries to set it */
- if ((str_factor > 0) || (str_unit > 0) || (start_iodev >= 0)) {
- MPI_Comm_rank(fd->comm, &myrank);
- if (!myrank) {
- if (fd->perm == ADIO_PERM_NULL) {
- old_mask = umask(022);
- umask(old_mask);
- perm = old_mask ^ 0666;
- }
- else perm = fd->perm;
-
- amode = 0;
- if (fd->access_mode & ADIO_CREATE)
- amode = amode | O_CREAT;
- if (fd->access_mode & ADIO_RDONLY)
- amode = amode | O_RDONLY;
- if (fd->access_mode & ADIO_WRONLY)
- amode = amode | O_WRONLY;
- if (fd->access_mode & ADIO_RDWR)
- amode = amode | O_RDWR;
- if (fd->access_mode & ADIO_EXCL)
- amode = amode | O_EXCL;
-
- fd_sys = open(fd->filename, amode, perm);
- err = fcntl(fd_sys, F_GETSATTR, &attr);
-
- if (!err) {
- if (str_unit > 0) attr.s_sunitsize = str_unit;
- if ((start_iodev >= 0) &&
- (start_iodev < attr.s_sfactor))
- attr.s_start_sdir = start_iodev;
- if ((str_factor > 0) && (str_factor < attr.s_sfactor))
- attr.s_sfactor = str_factor;
-
- err = fcntl(fd_sys, F_SETSATTR, &attr);
- }
-
- close(fd_sys);
- }
-
- MPI_Barrier(fd->comm);
- }
-
- /* Has user asked for pfs server buffering to be turned on?
- If so, mark it as true in fd->info and turn it on in
- ADIOI_PFS_Open after the file is opened */
-
- ADIOI_Info_get(users_info, "pfs_svr_buf", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag && (!strcmp(value, "true")))
- ADIOI_Info_set(fd->info, "pfs_svr_buf", "true");
- else ADIOI_Info_set(fd->info, "pfs_svr_buf", "false");
-
- ADIOI_Free(value);
- }
- else ADIOI_Info_set(fd->info, "pfs_svr_buf", "false");
-
- /* set the values for collective I/O and data sieving parameters */
- ADIOI_GEN_SetInfo(fd, users_info, error_code);
- }
-
- else {
- /* The file has been opened previously and fd->fd_sys is a valid
- file descriptor. cannot set striping parameters now. */
-
- /* set the values for collective I/O and data sieving parameters */
- ADIOI_GEN_SetInfo(fd, users_info, error_code);
-
- /* has user specified value for pfs_svr_buf? */
- if (users_info != MPI_INFO_NULL) {
- value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
-
- ADIOI_Info_get(users_info, "pfs_svr_buf", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag && (!strcmp(value, "true") || !strcmp(value, "false"))) {
- value_in_fd = (char *)
- ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
- ADIOI_Info_get(fd->info, "pfs_svr_buf", MPI_MAX_INFO_VAL,
- value_in_fd, &flag);
- if (strcmp(value, value_in_fd)) {
- if (!strcmp(value, "true")) {
- err = fcntl(fd->fd_sys, F_PFS_SVR_BUF, TRUE);
- if (!err)
- ADIOI_Info_set(fd->info, "pfs_svr_buf", "true");
- }
- else {
- err = fcntl(fd->fd_sys, F_PFS_SVR_BUF, FALSE);
- if (!err)
- ADIOI_Info_set(fd->info, "pfs_svr_buf", "false");
- }
- }
- ADIOI_Free(value_in_fd);
- }
- ADIOI_Free(value);
- }
-
- }
-
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_iread.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_iread.c
deleted file mode 100644
index 78b3c59..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_iread.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_IreadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request,
- int *error_code)
-{
- long *id_sys;
- int err=-1;
- MPI_Count len, typesize;
- ADIO_Offset off;
- static char myname[] = "ADIOI_PFS_IREADCONTIG";
-
- *request = ADIOI_Malloc_request();
- (*request)->optype = ADIOI_READ;
- (*request)->fd = fd;
- (*request)->datatype = datatype;
-
- MPI_Type_size_x(datatype, &typesize);
- len = count * typesize;
-
- id_sys = (long *) ADIOI_Malloc(sizeof(long));
- (*request)->handle = (void *) id_sys;
-
- off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind : offset;
-
- lseek(fd->fd_sys, off, SEEK_SET);
- *id_sys = _iread(fd->fd_sys, buf, len);
-
- if ((*id_sys == -1) && (errno == EQNOMID)) {
- /* the man pages say EMREQUEST, but in reality errno is set to EQNOMID! */
-
- /* exceeded the max. no. of outstanding requests. */
-
- /* complete all previous async. requests */
- /*ADIOI_Complete_async(error_code); */
- if (*error_code != MPI_SUCCESS) return;
-
- /* try again */
- *id_sys = _iread(fd->fd_sys, buf, len);
-
- if ((*id_sys == -1) && (errno == EQNOMID)) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- return;
- }
- }
- else if (*id_sys == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- return;
- }
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind += len;
-
- (*request)->queued = 1;
- (*request)->nbytes = len;
- ADIOI_Add_req_to_list(request);
- fd->async_count++;
-
- fd->fp_sys_posn = -1; /* set it to null. */
-
- if (*id_sys == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_iwrite.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_iwrite.c
deleted file mode 100644
index 5dda2fb..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_iwrite.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_IwriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Request *request, int *error_code)
-{
- long *id_sys;
- ADIO_Offset off;
- int err;
- MPI_Count len, typesize;
- static char myname[] = "ADIOI_PFS_IWRITECONTIG";
-
- *request = ADIOI_Malloc_request();
- (*request)->optype = ADIOI_WRITE;
- (*request)->fd = fd;
- (*request)->datatype = datatype;
-
- MPI_Type_size_x(datatype, &typesize);
- len = count * typesize;
-
- id_sys = (long *) ADIOI_Malloc(sizeof(long));
- (*request)->handle = (void *) id_sys;
-
- off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind : offset;
-
- lseek(fd->fd_sys, off, SEEK_SET);
- *id_sys = _iwrite(fd->fd_sys, buf, len);
-
- if ((*id_sys == -1) && (errno == EQNOMID)) {
- /* the man pages say EMREQUEST, but in reality errno is set to EQNOMID! */
-
- /* exceeded the max. no. of outstanding requests. */
-
- /* complete all previous async. requests */
- ADIOI_Complete_async(error_code);
- if (error_code != MPI_SUCCESS) return;
-
- /* try again */
- *id_sys = _iwrite(fd->fd_sys, buf, len);
-
- if ((*id_sys == -1) && (errno == EQNOMID)) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- return;
- }
- }
- else if (*id_sys == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- return;
- }
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind += len;
-
- (*request)->queued = 1;
- (*request)->nbytes = len;
- ADIOI_Add_req_to_list(request);
- fd->async_count++;
-
- fd->fp_sys_posn = -1; /* set it to null. */
-
- if (*id_sys == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_open.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_open.c
deleted file mode 100644
index f814b7c..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_open.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_Open(ADIO_File fd, int *error_code)
-{
- int perm, amode, old_mask, np_comm, np_total, err, flag;
- char *value;
- struct sattr attr;
- static char myname[] = "ADIOI_PFS_OPEN";
-
- if (fd->perm == ADIO_PERM_NULL) {
- old_mask = umask(022);
- umask(old_mask);
- perm = old_mask ^ 0666;
- }
- else perm = fd->perm;
-
- amode = 0;
- if (fd->access_mode & ADIO_CREATE)
- amode = amode | O_CREAT;
- if (fd->access_mode & ADIO_RDONLY)
- amode = amode | O_RDONLY;
- if (fd->access_mode & ADIO_WRONLY)
- amode = amode | O_WRONLY;
- if (fd->access_mode & ADIO_RDWR)
- amode = amode | O_RDWR;
- if (fd->access_mode & ADIO_EXCL)
- amode = amode | O_EXCL;
-
- MPI_Comm_size(MPI_COMM_WORLD, &np_total);
- MPI_Comm_size(fd->comm, &np_comm);
-
- if (np_total == np_comm)
- fd->fd_sys = _gopen(fd->filename, amode, M_ASYNC, perm);
- else fd->fd_sys = open(fd->filename, amode, perm);
- fd->fd_direct = -1;
-
- if (fd->fd_sys != -1) {
- value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
-
- /* if user has asked for pfs server buffering to be turned on,
- it will be set to true in fd->info in the earlier call
- to ADIOI_PFS_SetInfo. Turn it on now, since we now have a
- valid file descriptor. */
-
- ADIOI_Info_get(fd->info, "pfs_svr_buf", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag && (!strcmp(value, "true"))) {
- err = fcntl(fd->fd_sys, F_PFS_SVR_BUF, TRUE);
- if (err) ADIOI_Info_set(fd->info, "pfs_svr_buf", "false");
- }
-
- /* get file striping information and set it in info */
- err = fcntl(fd->fd_sys, F_GETSATTR, &attr);
-
- if (!err) {
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", attr.s_sunitsize);
- ADIOI_Info_set(fd->info, "striping_unit", value);
-
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", attr.s_sfactor);
- ADIOI_Info_set(fd->info, "striping_factor", value);
-
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", attr.s_start_sdir);
- ADIOI_Info_set(fd->info, "start_iodevice", value);
- }
- ADIOI_Free(value);
-
- if (fd->access_mode & ADIO_APPEND)
- fd->fp_ind = fd->fp_sys_posn = lseek(fd->fd_sys, 0, SEEK_END);
- }
-
- if (fd->fd_sys == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_read.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_read.c
deleted file mode 100644
index bd3b7e7..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_read.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
- static char myname[] = "ADIOI_PFS_READCONTIG";
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset) {
- lseek(fd->fd_sys, offset, SEEK_SET);
- }
- err = _cread(fd->fd_sys, buf, len);
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* read from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind) {
- lseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
- }
- err = _cread(fd->fd_sys, buf, len);
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_wait.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_wait.c
deleted file mode 100644
index e141595..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_wait.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_ReadComplete(ADIO_Request *request, ADIO_Status *status,
- int *error_code)
-{
- int err=0;
- static char myname[] = "ADIOI_PFS_READCOMPLETE";
-
- if (*request == ADIO_REQUEST_NULL) {
- *error_code = MPI_SUCCESS;
- return;
- }
-
- if ((*request)->queued) {
- err = _iowait(*((long *) (*request)->handle));
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
- } /* if ((*request)->queued) ... */
- else *error_code = MPI_SUCCESS;
-#ifdef HAVE_STATUS_SET_BYTES
- if ((*request)->nbytes != -1)
- MPIR_Status_set_bytes(status, (*request)->datatype, (*request)->nbytes);
-#endif
-
- if ((*request)->queued != -1) {
-
- /* queued = -1 is an internal hack used when the request must
- be completed, but the request object should not be
- freed. This is used in ADIOI_Complete_async, because the user
- will call MPI_Wait later, which would require status to
- be filled. Ugly but works. queued = -1 should be used only
- in ADIOI_Complete_async.
- This should not affect the user in any way. */
-
- /* if request is still queued in the system, it is also there
- on ADIOI_Async_list. Delete it from there. */
- if ((*request)->queued) ADIOI_Del_req_from_list(request);
-
- (*request)->fd->async_count--;
- if ((*request)->handle) ADIOI_Free((*request)->handle);
- ADIOI_Free_request((ADIOI_Req_node *) (*request));
- *request = ADIO_REQUEST_NULL;
- }
-}
-
-
-void ADIOI_PFS_WriteComplete(ADIO_Request *request, ADIO_Status *status, int *error_code)
-{
- ADIOI_PFS_ReadComplete(request, status, error_code);
-}
diff --git a/src/mpi/romio/adio/ad_pfs/ad_pfs_write.c b/src/mpi/romio/adio/ad_pfs/ad_pfs_write.c
deleted file mode 100644
index c64e976..0000000
--- a/src/mpi/romio/adio/ad_pfs/ad_pfs_write.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pfs.h"
-
-void ADIOI_PFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
- static char myname[] = "ADIOI_PFS_WRITECONTIG";
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset) {
- lseek(fd->fd_sys, offset, SEEK_SET);
- }
- err = _cwrite(fd->fd_sys, buf, len);
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* write from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind) {
- lseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
- }
- err = _cwrite(fd->fd_sys, buf, len);
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_piofs/.state-cache b/src/mpi/romio/adio/ad_piofs/.state-cache
deleted file mode 100644
index 78c662b..0000000
--- a/src/mpi/romio/adio/ad_piofs/.state-cache
+++ /dev/null
@@ -1,28 +0,0 @@
-<dir>
-<file name="ad_piofs_write.c" info="1447123141"/>
-<file name="ad_piofs.c" info="1447123141"/>
-<file name="ad_piofs_fcntl.c" info="1447123141"/>
-<file name="ad_piofs_hints.c" info="1447123141"/>
-<file name="ad_piofs_features.c" info="1447123141"/>
-<file name="ad_piofs_open.c" info="1447123141"/>
-<file name="ad_piofs_read.c" info="1447123141"/>
-<file name="ad_piofs.h" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_piofs_write.c">
-</fileinfo>
-<fileinfo name="ad_piofs.c">
-</fileinfo>
-<fileinfo name="ad_piofs_fcntl.c">
-</fileinfo>
-<fileinfo name="ad_piofs_hints.c">
-</fileinfo>
-<fileinfo name="ad_piofs_features.c">
-</fileinfo>
-<fileinfo name="ad_piofs_open.c">
-</fileinfo>
-<fileinfo name="ad_piofs_read.c">
-</fileinfo>
-<fileinfo name="ad_piofs.h">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_piofs/Makefile.mk b/src/mpi/romio/adio/ad_piofs/Makefile.mk
deleted file mode 100644
index 4bcbd61..0000000
--- a/src/mpi/romio/adio/ad_piofs/Makefile.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_AD_PIOFS
-
-noinst_HEADERS += adio/ad_piofs/ad_piofs.h
-
-romio_other_sources += \
- adio/ad_piofs/ad_piofs_read.c \
- adio/ad_piofs/ad_piofs_open.c \
- adio/ad_piofs/ad_piofs_write.c \
- adio/ad_piofs/ad_piofs_fcntl.c \
- adio/ad_piofs/ad_piofs_hints.c \
- adio/ad_piofs/ad_piofs.c
-
-endif BUILD_AD_PIOFS
-
diff --git a/src/mpi/romio/adio/ad_piofs/README b/src/mpi/romio/adio/ad_piofs/README
deleted file mode 100644
index 933677b..0000000
--- a/src/mpi/romio/adio/ad_piofs/README
+++ /dev/null
@@ -1 +0,0 @@
-This code is no longer supported.
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs.c b/src/mpi/romio/adio/ad_piofs/ad_piofs.c
deleted file mode 100644
index 726bbf1..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2001 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_piofs.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_PIOFS_operations = {
- ADIOI_PIOFS_Open, /* Open */
- ADIOI_PIOFS_ReadContig, /* ReadContig */
- ADIOI_PIOFS_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_PIOFS_Fcntl, /* Fcntl */
- ADIOI_PIOFS_SetInfo, /* SetInfo */
- ADIOI_GEN_ReadStrided, /* ReadStrided */
- ADIOI_PIOFS_WriteStrided, /* WriteStrided */
- ADIOI_GEN_Close, /* Close */
- ADIOI_FAKE_IreadContig, /* IreadContig */
- ADIOI_FAKE_IwriteContig, /* IwriteContig */
- ADIOI_FAKE_IODone, /* ReadDone */
- ADIOI_FAKE_IODone, /* WriteDone */
- ADIOI_FAKE_IOComplete, /* ReadComplete */
- ADIOI_FAKE_IOComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_GEN_Flush, /* Flush */
- ADIOI_GEN_Resize, /* Resize */
- ADIOI_GEN_Delete, /* Delete */
- ADIOI_PIOFS_Feature,
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs.h b/src/mpi/romio/adio/ad_piofs/ad_piofs.h
deleted file mode 100644
index e9b74c9..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-/* contains definitions, declarations, and macros specific to the
- implementation of ADIO on PIOFS */
-
-#ifndef AD_PIOFS_INCLUDE
-#define AD_PIOFS_INCLUDE
-
-#include <unistd.h>
-#include <sys/uio.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <piofs/piofs_ioctl.h>
-#include "adio.h"
-
-void ADIOI_PIOFS_Open(ADIO_File fd, int *error_code);
-void ADIOI_PIOFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PIOFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PIOFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
- *error_code);
-void ADIOI_PIOFS_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PIOFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
-
-void ADIOI_PIOFS_Feature(ADIO_File fd, int flag);
-
-#endif
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs_fcntl.c b/src/mpi/romio/adio/ad_piofs/ad_piofs_fcntl.c
deleted file mode 100644
index 7d4a37c..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs_fcntl.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_piofs.h"
-#include "adio_extern.h"
-
-void ADIOI_PIOFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code)
-{
- MPI_Datatype copy_etype, copy_filetype;
- int i, ntimes, err;
- ADIO_Offset curr_fsize, alloc_size, size, len, done;
- ADIO_Status status;
- char *buf;
- piofs_change_view_t *piofs_change_view;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_PIOFS_FCNTL";
-#endif
-
- switch(flag) {
- case ADIO_FCNTL_GET_FSIZE:
- fcntl_struct->fsize = llseek(fd->fd_sys, 0, SEEK_END);
- if (fd->fp_sys_posn != -1)
- llseek(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
- if (fcntl_struct->fsize == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- ADIOI_GEN_Prealloc(fd, fcntl_struct->diskspace, error_code);
- break;
-
- case ADIO_FCNTL_SET_ATOMICITY:
- piofs_change_view = (piofs_change_view_t *)
- ADIOI_Malloc(sizeof(piofs_change_view_t));
- piofs_change_view->Vbs = piofs_change_view->Vn =
- piofs_change_view->Hbs = piofs_change_view->Hn = 1;
- piofs_change_view->subfile = 0;
- piofs_change_view->flags = (fcntl_struct->atomicity == 0)
- ? (ACTIVE | NORMAL) : (ACTIVE | CAUTIOUS);
- err = piofsioctl(fd->fd_sys, PIOFS_CHANGE_VIEW, piofs_change_view);
- ADIOI_Free(piofs_change_view);
- fd->atomicity = (fcntl_struct->atomicity == 0) ? 0 : 1;
- if (err == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
- break;
-
- default:
- FPRINTF(stderr, "Unknown flag passed to ADIOI_PIOFS_Fcntl\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
-}
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs_features.c b/src/mpi/romio/adio/ad_piofs/ad_piofs_features.c
deleted file mode 100644
index f3b0df6..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs_features.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2008 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-int ADIOI_PIOFS_Features(int flag)
-{
- switch(flag) {
- case ADIO_LOCKS:
- case ADIO_SHARED_FP:
- case ADIO_ATOMIC_MODE:
- case ADIO_DATA_SIEVING_WRITES:
- case ADIO_SCALABLE_OPEN:
- default:
- return 0;
- break;
- }
-}
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs_hints.c b/src/mpi/romio/adio/ad_piofs/ad_piofs_hints.c
deleted file mode 100644
index 242ebb3..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs_hints.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_piofs.h"
-
-void ADIOI_PIOFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
-{
- piofs_create_t piofs_create;
- piofs_statfs_t piofs_statfs;
- char *value, *path, *slash;
- int flag, tmp_val, str_factor=-1, str_unit=-1, start_iodev=-1;
- int err, myrank, perm, old_mask, nioservers;
-
- if ((fd->info) == MPI_INFO_NULL) {
- /* This must be part of the open call. can set striping parameters
- if necessary. */
- MPI_Info_create(&(fd->info));
-
- /* has user specified striping parameters
- and do they have the same value on all processes? */
- if (users_info != MPI_INFO_NULL) {
- value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
-
- ADIOI_Info_get(users_info, "striping_factor", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- str_factor=atoi(value);
- tmp_val = str_factor;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != str_factor) {
- FPRINTF(stderr, "ADIOI_PIOFS_SetInfo: the value for key \"striping_factor\" must be the same on all processes\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
- }
-
- ADIOI_Info_get(users_info, "striping_unit", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- str_unit=atoi(value);
- tmp_val = str_unit;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != str_unit) {
- FPRINTF(stderr, "ADIOI_PIOFS_SetInfo: the value for key \"striping_unit\" must be the same on all processes\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
- }
-
- ADIOI_Info_get(users_info, "start_iodevice", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- start_iodev=atoi(value);
- tmp_val = start_iodev;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != start_iodev) {
- FPRINTF(stderr, "ADIOI_PIOFS_SetInfo: the value for key \"start_iodevice\" must be the same on all processes\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
- }
-
- ADIOI_Free(value);
-
- /* if user has specified striping info, process 0 tries to set it */
- if ((str_factor > 0) || (str_unit > 0) || (start_iodev >= 0)) {
- MPI_Comm_rank(fd->comm, &myrank);
- if (!myrank) {
- int len;
-
- if (fd->perm == ADIO_PERM_NULL) {
- old_mask = umask(022);
- umask(old_mask);
- perm = old_mask ^ 0666;
- }
- else perm = fd->perm;
-
- /* to find out the number of I/O servers, I need
- the path to the directory containing the file */
-
- path = ADIOI_Strdup(fd->filename);
- len = strlen(path) + 1;
- slash = strrchr(path, '/');
- if (!slash) ADIOI_Strncpy(path, ".", len);
- else {
- if (slash == path) *(path + 1) = '\0';
- else *slash = '\0';
- }
- ADIOI_Strncpy(piofs_statfs.name, path, len);
- err = piofsioctl(0, PIOFS_STATFS, &piofs_statfs);
- nioservers = (err) ? -1 : piofs_statfs.f_nodes;
-
- ADIOI_Free(path);
-
- str_factor = ADIOI_MIN(nioservers, str_factor);
- if (start_iodev >= nioservers) start_iodev = -1;
-
- ADIOI_Strncpy(piofs_create.name, fd->filename, len);
- piofs_create.bsu = (str_unit > 0) ? str_unit : -1;
- piofs_create.cells = (str_factor > 0) ? str_factor : -1;
- piofs_create.permissions = perm;
- piofs_create.base_node = (start_iodev >= 0) ?
- start_iodev : -1;
- piofs_create.flags = 0;
-
- err = piofsioctl(0, PIOFS_CREATE, &piofs_create);
- }
- MPI_Barrier(fd->comm);
- }
- }
- }
-
- /* set the values for collective I/O and data sieving parameters */
- ADIOI_GEN_SetInfo(fd, users_info, error_code);
-
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs_open.c b/src/mpi/romio/adio/ad_piofs/ad_piofs_open.c
deleted file mode 100644
index e02e90c..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs_open.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_piofs.h"
-
-void ADIOI_PIOFS_Open(ADIO_File fd, int *error_code)
-{
- int amode, perm, old_mask, err;
- piofs_fstat_t piofs_fstat;
- char *value;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_PIOFS_OPEN";
-#endif
-
- if (fd->perm == ADIO_PERM_NULL) {
- old_mask = umask(022);
- umask(old_mask);
- perm = old_mask ^ 0666;
- }
- else perm = fd->perm;
-
- amode = 0;
- if (fd->access_mode & ADIO_CREATE)
- amode = amode | O_CREAT;
- if (fd->access_mode & ADIO_RDONLY)
- amode = amode | O_RDONLY;
- if (fd->access_mode & ADIO_WRONLY)
- amode = amode | O_WRONLY;
- if (fd->access_mode & ADIO_RDWR)
- amode = amode | O_RDWR;
- if (fd->access_mode & ADIO_EXCL)
- amode = amode | O_EXCL;
-
- fd->fd_sys = open(fd->filename, amode, perm);
- fd->fd_direct = -1;
-
- llseek(fd->fd_sys, 0, SEEK_SET);
-/* required to initiate use of 64-bit offset */
-
- if (fd->fd_sys != -1) {
- value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
-
- /* get file striping information and set it in info */
- err = piofsioctl(fd->fd_sys, PIOFS_FSTAT, &piofs_fstat);
-
- if (!err) {
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", piofs_fstat.st_bsu);
- ADIOI_Info_set(fd->info, "striping_unit", value);
-
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", piofs_fstat.st_cells);
- ADIOI_Info_set(fd->info, "striping_factor", value);
-
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", piofs_fstat.st_base_node);
- ADIOI_Info_set(fd->info, "start_iodevice", value);
- }
- ADIOI_Free(value);
-
- if (fd->access_mode & ADIO_APPEND)
- fd->fp_ind = fd->fp_sys_posn = llseek(fd->fd_sys, 0, SEEK_END);
- }
-
- if (fd->fd_sys == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(ADIO_FILE_NULL, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs_read.c b/src/mpi/romio/adio/ad_piofs/ad_piofs_read.c
deleted file mode 100644
index 2785486..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs_read.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_piofs.h"
-
-void ADIOI_PIOFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_PIOFS_READCONTIG";
-#endif
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset) {
- llseek(fd->fd_sys, offset, SEEK_SET);
- }
- err = read(fd->fd_sys, buf, len);
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* read from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind) {
- llseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
- }
- err = read(fd->fd_sys, buf, len);
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_piofs/ad_piofs_write.c b/src/mpi/romio/adio/ad_piofs/ad_piofs_write.c
deleted file mode 100644
index 4da38ba..0000000
--- a/src/mpi/romio/adio/ad_piofs/ad_piofs_write.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_piofs.h"
-#include "adio_extern.h"
-
-void ADIOI_PIOFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_PIOFS_WRITECONTIG";
-#endif
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset) {
- llseek(fd->fd_sys, offset, SEEK_SET);
- }
- err = write(fd->fd_sys, buf, len);
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* write from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind) {
- llseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
- }
- err = write(fd->fd_sys, buf, len);
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
-
-
-
-void ADIOI_PIOFS_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
-/* Since PIOFS does not support file locking, can't do buffered writes
- as on Unix */
-
-/* offset is in units of etype relative to the filetype. */
-
- ADIOI_Flatlist_node *flat_buf, *flat_file;
- struct iovec *iov;
- int i, j, k, err=-1, bwr_size, fwr_size=0, st_index=0;
- int num, size, sum, n_etypes_in_filetype, size_in_filetype;
- MPI_Count bufsize;
- int n_filetypes, etype_in_filetype;
- ADIO_Offset abs_off_in_filetype=0;
- MPI_Count filetype_size, etype_size, buftype_size;
- MPI_Aint filetype_extent, buftype_extent, indx;
- int buf_count, buftype_is_contig, filetype_is_contig;
- ADIO_Offset off, disp;
- int flag, new_bwr_size, new_fwr_size, err_flag=0;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_PIOFS_WRITESTRIDED";
-#endif
-
- if (fd->atomicity) {
- FPRINTF(stderr, "ROMIO cannot guarantee atomicity of noncontiguous accesses in atomic mode, as PIOFS doesn't support file locking. Use nonatomic mode and its associated semantics.\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
-
- ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
- ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
-
- MPI_Type_size_x(fd->filetype, &filetype_size);
- if ( ! filetype_size ) {
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, 0);
-#endif
- *error_code = MPI_SUCCESS;
- return;
- }
-
- MPI_Type_extent(fd->filetype, &filetype_extent);
- MPI_Type_size_x(datatype, &buftype_size);
- MPI_Type_extent(datatype, &buftype_extent);
- etype_size = fd->etype_size;
-
- bufsize = buftype_size * count;
-
- if (!buftype_is_contig && filetype_is_contig) {
-
-/* noncontiguous in memory, contiguous in file. use writev */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
-/* There is a limit of 16 on the number of iovecs for readv/writev! */
-
- iov = (struct iovec *) ADIOI_Malloc(16*sizeof(struct iovec));
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- off = fd->disp + etype_size * offset;
- llseek(fd->fd_sys, off, SEEK_SET);
- }
- else off = llseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
-
- k = 0;
- for (j=0; j<count; j++)
- for (i=0; i<flat_buf->count; i++) {
- iov[k].iov_base = ((char *) buf) + j*buftype_extent +
- flat_buf->indices[i];
- iov[k].iov_len = flat_buf->blocklens[i];
- /*FPRINTF(stderr, "%d %d\n", iov[k].iov_base, iov[k].iov_len);*/
-
- off += flat_buf->blocklens[i];
- k = (k+1)%16;
-
- if (!k) {
- err = writev(fd->fd_sys, iov, 16);
- if (err == -1) err_flag = 1;
- }
- }
-
- if (k) {
- err = writev(fd->fd_sys, iov, k);
- if (err == -1) err_flag = 1;
- }
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
-
- ADIOI_Free(iov);
- if (err_flag) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
- } /* if (!buftype_is_contig && filetype_is_contig) ... */
-
- else { /* noncontiguous in file */
-
-/* split up into several contiguous writes */
-
-/* find starting location in the file */
-
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
- disp = fd->disp;
-
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- offset = fd->fp_ind; /* in bytes */
- n_filetypes = -1;
- flag = 0;
- while (!flag) {
- n_filetypes++;
- for (i=0; i<flat_file->count; i++) {
- if (disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent + flat_file->blocklens[i]
- >= offset) {
- st_index = i;
- fwr_size = disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent
- + flat_file->blocklens[i] - offset;
- flag = 1;
- break;
- }
- }
- }
- }
- else {
- n_etypes_in_filetype = filetype_size/etype_size;
- n_filetypes = (int) (offset / n_etypes_in_filetype);
- etype_in_filetype = (int) (offset % n_etypes_in_filetype);
- size_in_filetype = etype_in_filetype * etype_size;
-
- sum = 0;
- for (i=0; i<flat_file->count; i++) {
- sum += flat_file->blocklens[i];
- if (sum > size_in_filetype) {
- st_index = i;
- fwr_size = sum - size_in_filetype;
- abs_off_in_filetype = flat_file->indices[i] +
- size_in_filetype - (sum - flat_file->blocklens[i]);
- break;
- }
- }
-
- /* abs. offset in bytes in the file */
- offset = disp + (ADIO_Offset) n_filetypes*filetype_extent + abs_off_in_filetype;
- }
-
- if (buftype_is_contig && !filetype_is_contig) {
-
-/* contiguous in memory, noncontiguous in file. should be the most
- common case. */
-
- i = 0;
- j = st_index;
- off = offset;
- fwr_size = ADIOI_MIN(fwr_size, bufsize);
- while (i < bufsize) {
- if (fwr_size) {
- /* TYPE_UB and TYPE_LB can result in
- fwr_size = 0. save system call in such cases */
- llseek(fd->fd_sys, off, SEEK_SET);
- err = write(fd->fd_sys, ((char *) buf) + i, fwr_size);
- if (err == -1) err_flag = 1;
- }
- i += fwr_size;
-
- if (off + fwr_size < disp + flat_file->indices[j] +
- flat_file->blocklens[j] + (ADIO_Offset) n_filetypes*filetype_extent)
- off += fwr_size;
- /* did not reach end of contiguous block in filetype.
- no more I/O needed. off is incremented by fwr_size. */
- else {
- if (j < (flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- off = disp + flat_file->indices[j] +
- (ADIO_Offset) n_filetypes*filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
- }
- }
- }
- else {
-/* noncontiguous in memory as well as in file */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- k = num = buf_count = 0;
- indx = flat_buf->indices[0];
- j = st_index;
- off = offset;
- bwr_size = flat_buf->blocklens[0];
-
- while (num < bufsize) {
- size = ADIOI_MIN(fwr_size, bwr_size);
- if (size) {
- llseek(fd->fd_sys, off, SEEK_SET);
- err = write(fd->fd_sys, ((char *) buf) + indx, size);
- if (err == -1) err_flag = 1;
- }
-
- new_fwr_size = fwr_size;
- new_bwr_size = bwr_size;
-
- if (size == fwr_size) {
-/* reached end of contiguous block in file */
- if (j < (flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
-
- off = disp + flat_file->indices[j] +
- (ADIO_Offset) n_filetypes*filetype_extent;
-
- new_fwr_size = flat_file->blocklens[j];
- if (size != bwr_size) {
- indx += size;
- new_bwr_size -= size;
- }
- }
-
- if (size == bwr_size) {
-/* reached end of contiguous block in memory */
-
- k = (k + 1)%flat_buf->count;
- buf_count++;
- indx = buftype_extent*(buf_count/flat_buf->count) +
- flat_buf->indices[k];
- new_bwr_size = flat_buf->blocklens[k];
- if (size != fwr_size) {
- off += size;
- new_fwr_size -= size;
- }
- }
- num += size;
- fwr_size = new_fwr_size;
- bwr_size = new_bwr_size;
- }
- }
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
- if (err_flag) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
- }
-
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
-/* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
-#endif
-
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/.state-cache b/src/mpi/romio/adio/ad_pvfs/.state-cache
deleted file mode 100644
index 77c7b19..0000000
--- a/src/mpi/romio/adio/ad_pvfs/.state-cache
+++ /dev/null
@@ -1,37 +0,0 @@
-<dir>
-<file name="ad_pvfs.h" info="1447123141"/>
-<file name="ad_pvfs_flush.c" info="1447123141"/>
-<file name="ad_pvfs_hints.c" info="1447123141"/>
-<file name="ad_pvfs_delete.c" info="1447123141"/>
-<file name="ad_pvfs_read.c" info="1447123141"/>
-<file name="ad_pvfs_fcntl.c" info="1447123141"/>
-<file name="ad_pvfs_resize.c" info="1447123141"/>
-<file name="ad_pvfs_write.c" info="1447123141"/>
-<file name="ad_pvfs_close.c" info="1447123141"/>
-<file name="ad_pvfs_open.c" info="1447123141"/>
-<file name="ad_pvfs.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_pvfs.h">
-</fileinfo>
-<fileinfo name="ad_pvfs_flush.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_hints.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_delete.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_read.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_fcntl.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_resize.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_write.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_close.c">
-</fileinfo>
-<fileinfo name="ad_pvfs_open.c">
-</fileinfo>
-<fileinfo name="ad_pvfs.c">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_pvfs/Makefile.mk b/src/mpi/romio/adio/ad_pvfs/Makefile.mk
deleted file mode 100644
index 50e7bd0..0000000
--- a/src/mpi/romio/adio/ad_pvfs/Makefile.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_AD_PVFS
-
-noinst_HEADERS += adio/ad_pvfs/ad_pvfs.h
-
-romio_other_sources += \
- adio/ad_pvfs/ad_pvfs_close.c \
- adio/ad_pvfs/ad_pvfs_read.c \
- adio/ad_pvfs/ad_pvfs_open.c \
- adio/ad_pvfs/ad_pvfs_write.c \
- adio/ad_pvfs/ad_pvfs_fcntl.c \
- adio/ad_pvfs/ad_pvfs_flush.c \
- adio/ad_pvfs/ad_pvfs_resize.c \
- adio/ad_pvfs/ad_pvfs_hints.c \
- adio/ad_pvfs/ad_pvfs_delete.c \
- adio/ad_pvfs/ad_pvfs.c
-
-endif BUILD_AD_PVFS
-
-
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs.c
deleted file mode 100644
index 27a3df8..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2001 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_PVFS_operations = {
- ADIOI_PVFS_Open, /* Open */
- ADIOI_PVFS_ReadContig, /* ReadContig */
- ADIOI_PVFS_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_PVFS_Fcntl, /* Fcntl */
- ADIOI_PVFS_SetInfo, /* SetInfo */
- ADIOI_PVFS_ReadStrided, /* ReadStrided */
- ADIOI_PVFS_WriteStrided, /* WriteStrided */
- ADIOI_PVFS_Close, /* Close */
- ADIOI_FAKE_IreadContig, /* IreadContig */
- ADIOI_FAKE_IwriteContig, /* IwriteContig */
- ADIOI_FAKE_IODone, /* ReadDone */
- ADIOI_FAKE_IODone, /* WriteDone */
- ADIOI_FAKE_IOComplete, /* ReadComplete */
- ADIOI_FAKE_IOComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_PVFS_Flush, /* Flush */
- ADIOI_PVFS_Resize, /* Resize */
- ADIOI_PVFS_Delete, /* Delete */
- ADIOI_PVFS_Feature, /* Features */
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs.h b/src/mpi/romio/adio/ad_pvfs/ad_pvfs.h
deleted file mode 100644
index 88e1a9f..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#ifndef AD_PVFS_INCLUDE
-#define AD_PVFS_INCLUDE
-
-#ifndef ROMIOCONF_H_INCLUDED
-#include "romioconf.h"
-#define ROMIOCONF_H_INCLUDED
-#endif
-#ifdef ROMIO_PVFS_NEEDS_INT64_DEFINITION
-typedef long long int int64_t;
-#endif
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <fcntl.h>
-#ifdef HAVE_PVFS_H
-#include <pvfs.h>
-#endif
-#include "adio.h"
-
-void ADIOI_PVFS_Open(ADIO_File fd, int *error_code);
-void ADIOI_PVFS_Close(ADIO_File fd, int *error_code);
-void ADIOI_PVFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PVFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PVFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
- *error_code);
-void ADIOI_PVFS_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PVFS_ReadStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_PVFS_Flush(ADIO_File fd, int *error_code);
-void ADIOI_PVFS_Delete(char *filename, int *error_code);
-void ADIOI_PVFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
-void ADIOI_PVFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
-
-
-#endif
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_close.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_close.c
deleted file mode 100644
index c2da2e3..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_close.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-
-void ADIOI_PVFS_Close(ADIO_File fd, int *error_code)
-{
- int err;
- static char myname[] = "ADIOI_PVFS_CLOSE";
-
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_close_a, 0, NULL );
-#endif
- err = pvfs_close(fd->fd_sys);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_close_b, 0, NULL );
-#endif
- fd->fd_sys = -1;
-
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_delete.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_delete.c
deleted file mode 100644
index 0e322ad..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_delete.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-#include "adio.h"
-
-void ADIOI_PVFS_Delete(char *filename, int *error_code)
-{
- int err;
- static char myname[] = "ADIOI_PVFS_DELETE";
-
- err = pvfs_unlink(filename);
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_fcntl.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_fcntl.c
deleted file mode 100644
index eeff250..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_fcntl.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-#include "adio_extern.h"
-
-void ADIOI_PVFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
- int *error_code)
-{
- static char myname[] = "ADIOI_PVFS_FCNTL";
-
- switch(flag) {
- case ADIO_FCNTL_GET_FSIZE:
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- fcntl_struct->fsize = pvfs_lseek64(fd->fd_sys, 0, SEEK_END);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- if (fd->fp_sys_posn != -1) {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
- if (fcntl_struct->fsize == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- ADIOI_GEN_Prealloc(fd, fcntl_struct->diskspace, error_code);
- break;
-
- case ADIO_FCNTL_SET_ATOMICITY:
- fd->atomicity = 0;
- /* --BEGIN ERROR HANDLING-- */
- if (fcntl_struct->atomicity != 0) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_UNSUPPORTED_OPERATION,
- "PVFS does not support atomic mode",
- 0);
- return;
- }
- /* --END ERROR HANDLING-- */
- break;
-
- default:
- /* --BEGIN ERROR HANDLING-- */
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_ARG,
- "**flag", "**flag %d", flag);
- return;
- /* --END ERROR HANDLING-- */
- }
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_flush.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_flush.c
deleted file mode 100644
index 340f0cb..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_flush.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-
-void ADIOI_PVFS_Flush(ADIO_File fd, int *error_code)
-{
- int err, rank, dummy=0, dummy_in=0;
- static char myname[] = "ADIOI_PVFS_FLUSH";
-
- /* a collective routine: because we do not cache data in PVFS1, one process
- * can initiate the fsync operation and broadcast the result to the others.
- * One catch: MPI_File_sync has special meaning with respect to file system
- * consistency. Ensure no clients have outstanding write operations.
- */
-
- MPI_Comm_rank(fd->comm, &rank);
- MPI_Reduce(&dummy_in, &dummy, 1, MPI_INT, MPI_SUM,
- fd->hints->ranklist[0], fd->comm);
- if (rank == fd->hints->ranklist[0]) {
- err = pvfs_fsync(fd->fd_sys);
- }
- MPI_Bcast(&err, 1, MPI_INT, fd->hints->ranklist[0], fd->comm);
-
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_hints.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_hints.c
deleted file mode 100644
index fdc06ed..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_hints.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-
-void ADIOI_PVFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
-{
- char *value;
- int flag, tmp_val, str_factor=-1, str_unit=-1, start_iodev=-1;
- static char myname[] = "ADIOI_PVFS_SETINFO";
-
- if ((fd->info) == MPI_INFO_NULL) {
- /* This must be part of the open call. can set striping parameters
- if necessary. */
- MPI_Info_create(&(fd->info));
- ADIOI_Info_set(fd->info, "romio_pvfs_listio_read", "disable");
- ADIOI_Info_set(fd->info, "romio_pvfs_listio_write", "disable");
- fd->hints->fs_hints.pvfs.listio_read = ADIOI_HINT_DISABLE;
- fd->hints->fs_hints.pvfs.listio_write = ADIOI_HINT_DISABLE;
-
- /* has user specified any pvfs-specific hints (striping params, listio)
- and do they have the same value on all processes? */
- if (users_info != MPI_INFO_NULL) {
- value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
-
- ADIOI_Info_get(users_info, "striping_factor", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- str_factor=atoi(value);
- tmp_val = str_factor;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != str_factor) {
- /* --BEGIN ERROR HANDLING-- */
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "striping_factor",
- error_code);
- return;
- /* --END ERROR HANDLING-- */
- }
- else ADIOI_Info_set(fd->info, "striping_factor", value);
- }
-
- ADIOI_Info_get(users_info, "striping_unit", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- str_unit=atoi(value);
- tmp_val = str_unit;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != str_unit) {
- /* --BEGIN ERROR HANDLING-- */
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "striping_unit",
- error_code);
- return;
- /* --END ERROR HANDLING-- */
- }
- else ADIOI_Info_set(fd->info, "striping_unit", value);
- }
-
- ADIOI_Info_get(users_info, "start_iodevice", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- start_iodev=atoi(value);
- tmp_val = start_iodev;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != start_iodev) {
- /* --BEGIN ERROR HANDLING-- */
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "start_iodevice",
- error_code);
- return;
- /* --END ERROR HANDLING-- */
- }
- else ADIOI_Info_set(fd->info, "start_iodevice", value);
- }
-
- ADIOI_Info_get(users_info, "romio_pvfs_listio_read",
- MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- if ( !strcmp(value, "enable") || !strcmp(value, "ENABLE"))
- {
- ADIOI_Info_set(fd->info, "romio_pvfs_listio_read", value);
- fd->hints->fs_hints.pvfs.listio_read = ADIOI_HINT_ENABLE;
- } else if ( !strcmp(value, "disable") || !strcmp(value, "DISABLE"))
- {
- ADIOI_Info_set(fd->info , "romio_pvfs_listio_read", value);
- fd->hints->fs_hints.pvfs.listio_read = ADIOI_HINT_DISABLE;
- }
- else if ( !strcmp(value, "automatic") || !strcmp(value, "AUTOMATIC"))
- {
- ADIOI_Info_set(fd->info, "romio_pvfs_listio_read", value);
- fd->hints->fs_hints.pvfs.listio_read = ADIOI_HINT_AUTO;
- }
- tmp_val = fd->hints->fs_hints.pvfs.listio_read;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != fd->hints->fs_hints.pvfs.listio_read) {
- /* --BEGIN ERROR HANDLING-- */
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "romio_pvfs_listio_read",
- error_code);
- return;
- /* --END ERROR HANDLING-- */
- }
- }
- ADIOI_Info_get(users_info, "romio_pvfs_listio_write", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag) {
- if ( !strcmp(value, "enable") || !strcmp(value, "ENABLE"))
- {
- ADIOI_Info_set(fd->info, "romio_pvfs_listio_write", value);
- fd->hints->fs_hints.pvfs.listio_write = ADIOI_HINT_ENABLE;
- } else if ( !strcmp(value, "disable") || !strcmp(value, "DISABLE"))
- {
- ADIOI_Info_set(fd->info, "romio_pvfs_listio_write", value);
- fd->hints->fs_hints.pvfs.listio_write = ADIOI_HINT_DISABLE;
- }
- else if ( !strcmp(value, "automatic") || !strcmp(value, "AUTOMATIC"))
- {
- ADIOI_Info_set(fd->info, "romio_pvfs_listio_write", value);
- fd->hints->fs_hints.pvfs.listio_write = ADIOI_HINT_AUTO;
- }
- tmp_val = fd->hints->fs_hints.pvfs.listio_write;
- MPI_Bcast(&tmp_val, 1, MPI_INT, 0, fd->comm);
- if (tmp_val != fd->hints->fs_hints.pvfs.listio_write) {
- /* --BEGIN ERROR HANDLING-- */
- MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(myname,
- "romio_pvfs_listio_write",
- error_code);
- return;
- /* --END ERROR HANDLING-- */
- }
- }
- ADIOI_Free(value);
- }
- }
-
- /* set the values for collective I/O and data sieving parameters */
- ADIOI_GEN_SetInfo(fd, users_info, error_code);
-
- *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_open.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_open.c
deleted file mode 100644
index c4fa288..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_open.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-
-void ADIOI_PVFS_Open(ADIO_File fd, int *error_code)
-{
- int perm, amode, old_mask, flag;
- char *value;
- /* some really old versions of pvfs may not have a release nr */
- /* we changed the structure of pvfs_filestat in pvfs-1.5.7 */
- struct pvfs_filestat pstat = {-1,-1,-1};
- static char myname[] = "ADIOI_PVFS_OPEN";
-
- if (fd->perm == ADIO_PERM_NULL) {
- old_mask = umask(022);
- umask(old_mask);
- perm = old_mask ^ 0666;
- }
- else perm = fd->perm;
-
- amode = O_META;
- if (fd->access_mode & ADIO_CREATE)
- amode = amode | O_CREAT;
- if (fd->access_mode & ADIO_RDONLY)
- amode = amode | O_RDONLY;
- if (fd->access_mode & ADIO_WRONLY)
- amode = amode | O_WRONLY;
- if (fd->access_mode & ADIO_RDWR)
- amode = amode | O_RDWR;
- if (fd->access_mode & ADIO_EXCL)
- amode = amode | O_EXCL;
-
- value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
-
- ADIOI_Info_get(fd->info, "striping_factor", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag && (atoi(value) > 0)) pstat.pcount = atoi(value);
-
- ADIOI_Info_get(fd->info, "striping_unit", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag && (atoi(value) > 0)) pstat.ssize = atoi(value);
-
- ADIOI_Info_get(fd->info, "start_iodevice", MPI_MAX_INFO_VAL,
- value, &flag);
- if (flag && (atoi(value) >= 0)) pstat.base = atoi(value);
-
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_open_a, 0, NULL );
-#endif
- fd->fd_sys = pvfs_open64(fd->filename, amode, perm, &pstat, NULL);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_open_b, 0, NULL );
-#endif
- fd->fd_direct = -1;
-
- if ((fd->fd_sys != -1) && (fd->access_mode & ADIO_APPEND)) {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- fd->fp_ind = fd->fp_sys_posn = pvfs_lseek64(fd->fd_sys, 0, SEEK_END);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- }
-
- if (fd->fd_sys != -1) {
- pvfs_ioctl(fd->fd_sys, GETMETA, &pstat);
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", pstat.pcount);
- ADIOI_Info_set(fd->info, "striping_factor", value);
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", pstat.ssize);
- ADIOI_Info_set(fd->info, "striping_unit", value);
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", pstat.base);
- ADIOI_Info_set(fd->info, "start_iodevice", value);
- }
-
- ADIOI_Free(value);
-
- if (fd->fd_sys == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_read.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_read.c
deleted file mode 100644
index 1d294ea..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_read.c
+++ /dev/null
@@ -1,784 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "adio.h"
-#include "adio_extern.h"
-#include "ad_pvfs.h"
-
-#ifdef HAVE_PVFS_LISTIO
-void ADIOI_PVFS_ReadStridedListIO(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-#endif
-
-void ADIOI_PVFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
- static char myname[] = "ADIOI_PVFS_READCONTIG";
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset) {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, offset, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
-#endif
- err = pvfs_read(fd->fd_sys, buf, len);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
-#endif
- if (err>0)
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* read from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind) {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
-#endif
- err = pvfs_read(fd->fd_sys, buf, len);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
-#endif
- if (err > 0)
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
-
-
-void ADIOI_PVFS_ReadStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
-#ifdef HAVE_PVFS_LISTIO
- if ( fd->hints->fs_hints.pvfs.listio_read == ADIOI_HINT_ENABLE) {
- ADIOI_PVFS_ReadStridedListIO(fd, buf, count, datatype, file_ptr_type,
- offset, status, error_code);
- return;
- }
-#endif
-/* If hint set to DISABLE or AUTOMATIC, don't use listio */
- ADIOI_GEN_ReadStrided(fd, buf, count, datatype, file_ptr_type,
- offset, status, error_code);
-}
-
-#ifdef HAVE_PVFS_LISTIO
-void ADIOI_PVFS_ReadStridedListIO(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
-/* offset is in units of etype relative to the filetype. */
-
- ADIOI_Flatlist_node *flat_buf, *flat_file;
- int i, j, k, l, brd_size, frd_size=0, st_index=0;
- int sum, n_etypes_in_filetype, size_in_filetype;
- MPI_Count bufsize;
- int n_filetypes, etype_in_filetype;
- ADIO_Offset abs_off_in_filetype=0;
- MPI_Count filetype_size, etype_size, buftype_size;
- MPI_Aint filetype_extent, buftype_extent;
- int buf_count, buftype_is_contig, filetype_is_contig;
- ADIO_Offset userbuf_off;
- ADIO_Offset off, disp, start_off;
- int flag, st_frd_size, st_n_filetypes;
- int new_brd_size, new_frd_size;
-
- int mem_list_count, file_list_count;
- char **mem_offsets;
- int64_t *file_offsets;
- int *mem_lengths;
- int32_t *file_lengths;
- int total_blks_to_read;
-
- int max_mem_list, max_file_list;
-
- int b_blks_read;
- int f_data_read;
- int size_read=0, n_read_lists, extra_blks;
-
- int end_brd_size, end_frd_size;
- int start_k, start_j, new_file_read, new_buffer_read;
- int start_mem_offset;
-
-#define MAX_ARRAY_SIZE 1024
-
-#ifndef PRINT_ERR_MESG
- static char myname[] = "ADIOI_PVFS_ReadStrided";
-#endif
-
- *error_code = MPI_SUCCESS; /* changed below if error */
-
- ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
- ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
- MPI_Type_size_x(fd->filetype, &filetype_size);
- if ( ! filetype_size ) {
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, 0);
-#endif
- *error_code = MPI_SUCCESS;
- return;
- }
-
- MPI_Type_extent(fd->filetype, &filetype_extent);
- MPI_Type_size_x(datatype, &buftype_size);
- MPI_Type_extent(datatype, &buftype_extent);
- etype_size = fd->etype_size;
-
- bufsize = buftype_size * count;
-
- if (!buftype_is_contig && filetype_is_contig) {
-
-/* noncontiguous in memory, contiguous in file. */
- int64_t file_offsets;
- int32_t file_lengths;
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
- fd->disp + etype_size * offset;
-
- file_list_count = 1;
- file_offsets = off;
- file_lengths = 0;
- total_blks_to_read = count*flat_buf->count;
- b_blks_read = 0;
-
- /* allocate arrays according to max usage */
- if (total_blks_to_read > MAX_ARRAY_SIZE)
- mem_list_count = MAX_ARRAY_SIZE;
- else mem_list_count = total_blks_to_read;
- mem_offsets = (char**)ADIOI_Malloc(mem_list_count*sizeof(char*));
- mem_lengths = (int*)ADIOI_Malloc(mem_list_count*sizeof(int));
-
- j = 0;
- /* step through each block in memory, filling memory arrays */
- while (b_blks_read < total_blks_to_read) {
- for (i=0; i<flat_buf->count; i++) {
- mem_offsets[b_blks_read % MAX_ARRAY_SIZE] =
- (char*)((char *)buf + j*buftype_extent + flat_buf->indices[i]);
- mem_lengths[b_blks_read % MAX_ARRAY_SIZE] =
- flat_buf->blocklens[i];
- file_lengths += flat_buf->blocklens[i];
- b_blks_read++;
- if (!(b_blks_read % MAX_ARRAY_SIZE) ||
- (b_blks_read == total_blks_to_read)) {
-
- /* in the case of the last read list call,
- adjust mem_list_count */
- if (b_blks_read == total_blks_to_read) {
- mem_list_count = total_blks_to_read % MAX_ARRAY_SIZE;
- /* in case last read list call fills max arrays */
- if (!mem_list_count) mem_list_count = MAX_ARRAY_SIZE;
- }
-
- pvfs_read_list(fd->fd_sys ,mem_list_count, mem_offsets,
- mem_lengths, file_list_count,
- &file_offsets, &file_lengths);
-
- /* in the case of the last read list call, leave here */
- if (b_blks_read == total_blks_to_read) break;
-
- file_offsets += file_lengths;
- file_lengths = 0;
- }
- } /* for (i=0; i<flat_buf->count; i++) */
- j++;
- } /* while (b_blks_read < total_blks_to_read) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
-
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
- /* This isa temporary way of filling in status. The right way is to
- keep tracke of how much data was actually read adn placed in buf
- by ADIOI_BUFFERED_READ. */
-#endif
- ADIOI_Delete_flattened(datatype);
-
- return;
- } /* if (!buftype_is_contig && filetype_is_contig) */
-
- /* know file is noncontiguous from above */
- /* noncontiguous in file */
-
- /* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
-
- disp = fd->disp;
-
- /* for each case - ADIO_Individual pointer or explicit, find the file
- offset in bytes (offset), n_filetypes (how many filetypes into
- file to start), frd_size (remaining amount of data in present
- file block), and st_index (start point in terms of blocks in
- starting filetype) */
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- offset = fd->fp_ind; /* in bytes */
- n_filetypes = -1;
- flag = 0;
- while (!flag) {
- n_filetypes++;
- for (i=0; i<flat_file->count; i++) {
- if (disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent +
- flat_file->blocklens[i] >= offset) {
- st_index = i;
- frd_size = (int) (disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent
- + flat_file->blocklens[i] - offset);
- flag = 1;
- break;
- }
- }
- } /* while (!flag) */
- } /* if (file_ptr_type == ADIO_INDIVIDUAL) */
- else {
- n_etypes_in_filetype = filetype_size/etype_size;
- n_filetypes = (int) (offset / n_etypes_in_filetype);
- etype_in_filetype = (int) (offset % n_etypes_in_filetype);
- size_in_filetype = etype_in_filetype * etype_size;
-
- sum = 0;
- for (i=0; i<flat_file->count; i++) {
- sum += flat_file->blocklens[i];
- if (sum > size_in_filetype) {
- st_index = i;
- frd_size = sum - size_in_filetype;
- abs_off_in_filetype = flat_file->indices[i] +
- size_in_filetype - (sum - flat_file->blocklens[i]);
- break;
- }
- }
-
- /* abs. offset in bytes in the file */
- offset = disp + (ADIO_Offset) n_filetypes*filetype_extent +
- abs_off_in_filetype;
- } /* else [file_ptr_type != ADIO_INDIVIDUAL] */
-
- start_off = offset;
- st_frd_size = frd_size;
- st_n_filetypes = n_filetypes;
-
- if (buftype_is_contig && !filetype_is_contig) {
-
-/* contiguous in memory, noncontiguous in file. should be the most
- common case. */
-
- int mem_lengths;
- char *mem_offsets;
-
- i = 0;
- j = st_index;
- n_filetypes = st_n_filetypes;
-
- mem_list_count = 1;
-
- /* determine how many blocks in file to read */
- f_data_read = ADIOI_MIN(st_frd_size, bufsize);
- total_blks_to_read = 1;
- j++;
- while (f_data_read < bufsize) {
- f_data_read += flat_file->blocklens[j];
- total_blks_to_read++;
- if (j<(flat_file->count-1)) j++;
- else j = 0;
- }
-
- j = st_index;
- n_filetypes = st_n_filetypes;
- n_read_lists = total_blks_to_read/MAX_ARRAY_SIZE;
- extra_blks = total_blks_to_read%MAX_ARRAY_SIZE;
-
- mem_offsets = buf;
- mem_lengths = 0;
-
- /* if at least one full readlist, allocate file arrays
- at max array size and don't free until very end */
- if (n_read_lists) {
- file_offsets = (int64_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(int64_t));
- file_lengths = (int32_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(int32_t));
- }
- /* if there's no full readlist allocate file arrays according
- to needed size (extra_blks) */
- else {
- file_offsets = (int64_t*)ADIOI_Malloc(extra_blks*
- sizeof(int64_t));
- file_lengths = (int32_t*)ADIOI_Malloc(extra_blks*
- sizeof(int32_t));
- }
-
- /* for file arrays that are of MAX_ARRAY_SIZE, build arrays */
- for (i=0; i<n_read_lists; i++) {
- file_list_count = MAX_ARRAY_SIZE;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = st_frd_size;
- mem_lengths = st_frd_size;
- }
- for (k=0; k<MAX_ARRAY_SIZE; k++) {
- if (i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent
- + flat_file->indices[j];
- file_lengths[k] = flat_file->blocklens[j];
- mem_lengths += file_lengths[k];
- }
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<MAX_ARRAY_SIZE; k++) */
- pvfs_read_list(fd->fd_sys, mem_list_count,
- &mem_offsets, &mem_lengths,
- file_list_count, file_offsets,
- file_lengths);
- mem_offsets += mem_lengths;
- mem_lengths = 0;
- } /* for (i=0; i<n_read_lists; i++) */
-
- /* for file arrays smaller than MAX_ARRAY_SIZE (last read_list call) */
- if (extra_blks) {
- file_list_count = extra_blks;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = st_frd_size;
- }
- for (k=0; k<extra_blks; k++) {
- if(i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent +
- flat_file->indices[j];
- if (k == (extra_blks - 1)) {
- file_lengths[k] = bufsize - (int32_t) mem_lengths
- - (int32_t) mem_offsets + (int32_t) buf;
- }
- else file_lengths[k] = flat_file->blocklens[j];
- } /* if(i || k) */
- mem_lengths += file_lengths[k];
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<extra_blks; k++) */
- pvfs_read_list(fd->fd_sys, mem_list_count, &mem_offsets,
- &mem_lengths, file_list_count, file_offsets,
- file_lengths);
- }
- }
- else {
-/* noncontiguous in memory as well as in file */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- size_read = 0;
- n_filetypes = st_n_filetypes;
- frd_size = st_frd_size;
- brd_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
- max_mem_list = 0;
- max_file_list = 0;
-
- /* run through and file max_file_list and max_mem_list so that you
- can allocate the file and memory arrays less than MAX_ARRAY_SIZE
- if possible */
-
- while (size_read < bufsize) {
- k = start_k;
- new_buffer_read = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data read and data to be
- read in the next immediate read list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k] +
- size_read) > bufsize) {
- end_brd_size = new_buffer_read +
- flat_buf->blocklens[k] - (bufsize - size_read);
- new_buffer_read = bufsize - size_read;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- else new_buffer_read = brd_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
- j = start_j;
- new_file_read = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_read < new_buffer_read)) {
- if(file_list_count) {
- if((new_file_read + flat_file->blocklens[j]) >
- new_buffer_read) {
- end_frd_size = new_buffer_read - new_file_read;
- new_file_read = new_buffer_read;
- j--;
- }
- else {
- new_file_read += flat_file->blocklens[j];
- end_frd_size = flat_file->blocklens[j];
- }
- }
- else {
- if (frd_size > new_buffer_read) {
- new_file_read = new_buffer_read;
- frd_size = new_file_read;
- }
- else new_file_read = frd_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_read < new_buffer_read) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_read = 0;
- mem_list_count = 0;
- while (new_buffer_read < new_file_read) {
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k]) >
- new_file_read) {
- end_brd_size = new_file_read - new_buffer_read;
- new_buffer_read = new_file_read;
- k--;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_read = brd_size;
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_read < new_file_read) */
- } /* if ((new_file_read < new_buffer_read) && (file_list_count
- == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
-
- /* fakes filling the readlist arrays of lengths found above */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- if(i) {
- if (i == (mem_list_count - 1)) {
- if (flat_buf->blocklens[k] == end_brd_size)
- brd_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- brd_size = flat_buf->blocklens[k] - end_brd_size;
- k--;
- buf_count--;
- }
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- if (i) {
- if (i == (file_list_count - 1)) {
- if (flat_file->blocklens[j] == end_frd_size)
- frd_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- frd_size = flat_file->blocklens[j] - end_frd_size;
- j--;
- }
- }
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
- size_read += new_buffer_read;
- start_k = k;
- start_j = j;
- if (max_mem_list < mem_list_count)
- max_mem_list = mem_list_count;
- if (max_file_list < file_list_count)
- max_file_list = file_list_count;
- } /* while (size_read < bufsize) */
-
- mem_offsets = (char **)ADIOI_Malloc(max_mem_list*sizeof(char *));
- mem_lengths = (int *)ADIOI_Malloc(max_mem_list*sizeof(int));
- file_offsets = (int64_t *)ADIOI_Malloc(max_file_list*sizeof(int64_t));
- file_lengths = (int32_t *)ADIOI_Malloc(max_file_list*sizeof(int32_t));
-
- size_read = 0;
- n_filetypes = st_n_filetypes;
- frd_size = st_frd_size;
- brd_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
-
- /* this section calculates mem_list_count and file_list_count
- and also finds the possibly odd sized last array elements
- in new_frd_size and new_brd_size */
-
- while (size_read < bufsize) {
- k = start_k;
- new_buffer_read = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data read and data to be
- read in the next immediate read list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k] +
- size_read) > bufsize) {
- end_brd_size = new_buffer_read +
- flat_buf->blocklens[k] - (bufsize - size_read);
- new_buffer_read = bufsize - size_read;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- else new_buffer_read = brd_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
- j = start_j;
- new_file_read = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_read < new_buffer_read)) {
- if(file_list_count) {
- if((new_file_read + flat_file->blocklens[j]) >
- new_buffer_read) {
- end_frd_size = new_buffer_read - new_file_read;
- new_file_read = new_buffer_read;
- j--;
- }
- else {
- new_file_read += flat_file->blocklens[j];
- end_frd_size = flat_file->blocklens[j];
- }
- }
- else {
- if (frd_size > new_buffer_read) {
- new_file_read = new_buffer_read;
- frd_size = new_file_read;
- }
- else new_file_read = frd_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_read < new_buffer_read) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_read = 0;
- mem_list_count = 0;
- while (new_buffer_read < new_file_read) {
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k]) >
- new_file_read) {
- end_brd_size = new_file_read - new_buffer_read;
- new_buffer_read = new_file_read;
- k--;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_read = brd_size;
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_read < new_file_read) */
- } /* if ((new_file_read < new_buffer_read) && (file_list_count
- == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
-
- /* fills the allocated readlist arrays */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- mem_offsets[i] = (char*)((char *)buf + buftype_extent*
- (buf_count/flat_buf->count) +
- (int)flat_buf->indices[k]);
- if(!i) {
- mem_lengths[0] = brd_size;
- mem_offsets[0] += flat_buf->blocklens[k] - brd_size;
- }
- else {
- if (i == (mem_list_count - 1)) {
- mem_lengths[i] = end_brd_size;
- if (flat_buf->blocklens[k] == end_brd_size)
- brd_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- brd_size = flat_buf->blocklens[k] - end_brd_size;
- k--;
- buf_count--;
- }
- }
- else {
- mem_lengths[i] = flat_buf->blocklens[k];
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- file_offsets[i] = disp + flat_file->indices[j] + n_filetypes *
- filetype_extent;
- if (!i) {
- file_lengths[0] = frd_size;
- file_offsets[0] += flat_file->blocklens[j] - frd_size;
- }
- else {
- if (i == (file_list_count - 1)) {
- file_lengths[i] = end_frd_size;
- if (flat_file->blocklens[j] == end_frd_size)
- frd_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- frd_size = flat_file->blocklens[j] - end_frd_size;
- j--;
- }
- }
- else file_lengths[i] = flat_file->blocklens[j];
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
-
- /*
- printf("about to call read_list in noncontig/noncontig\n");
- printf("offsets and lengths in terms of integers\n");
- printf("\nmem_list_count = %d\n", mem_list_count);
- for (i=0; i<mem_list_count; i++) {
- printf("mem_offsets[%2d] = %2d ", i, (int)(mem_offsets[i] - (int)buf)/4);
- printf("mem_lengths[%2d] = %2d\n", i, mem_lengths[i]/4);
- }
- printf("\nfile_list_count = %d\n", file_list_count);
- for (i=0; i<file_list_count; i++) {
- printf("file_offsets[%2d] = %2d ", i, (int)file_offsets[i]/4);
- printf("file_lengths[%2d] = %2d\n", i, file_lengths[i]/4);
- }
- printf("\n\n");
- */
- pvfs_read_list(fd->fd_sys,mem_list_count, mem_offsets,
- mem_lengths, file_list_count, file_offsets,
- file_lengths);
- size_read += new_buffer_read;
- start_k = k;
- start_j = j;
- } /* while (size_read < bufsize) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
- }
- ADIOI_Free(file_offsets);
- ADIOI_Free(file_lengths);
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
- /* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually read and placed in buf
- by ADIOI_BUFFERED_READ. */
-#endif
-
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
-}
-#endif /* HAVE_PVFS_LISTIO */
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_resize.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_resize.c
deleted file mode 100644
index b4b9553..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_resize.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-
-void ADIOI_PVFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
-{
- int err;
- int rank;
- static char myname[] = "ADIOI_PVFS_RESIZE";
-
- /* because MPI_File_set_size is a collective operation, and PVFS1 clients
- * do not cache metadata locally, one client can resize and broadcast the
- * result to the others */
- MPI_Comm_rank(fd->comm, &rank);
- if (rank == fd->hints->ranklist[0]) {
- err = pvfs_ftruncate64(fd->fd_sys, size);
- }
- MPI_Bcast(&err, 1, MPI_INT, fd->hints->ranklist[0], fd->comm);
-
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_write.c b/src/mpi/romio/adio/ad_pvfs/ad_pvfs_write.c
deleted file mode 100644
index 5388de4..0000000
--- a/src/mpi/romio/adio/ad_pvfs/ad_pvfs_write.c
+++ /dev/null
@@ -1,1167 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_pvfs.h"
-#include "adio_extern.h"
-
-#ifdef HAVE_PVFS_LISTIO
-void ADIOI_PVFS_WriteStridedListIO(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-#endif
-
-void ADIOI_PVFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
- MPI_Count err=-1, datatype_size, len;
- static char myname[] = "ADIOI_PVFS_WRITECONTIG";
-
- MPI_Type_size_x(datatype, &datatype_size);
- len = datatype_size * count;
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- if (fd->fp_sys_posn != offset) {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, offset, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- err = pvfs_write(fd->fd_sys, buf, len);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- if (err > 0)
- fd->fp_sys_posn = offset + err;
- /* individual file pointer not updated */
- }
- else { /* write from curr. location of ind. file pointer */
- if (fd->fp_sys_posn != fd->fp_ind) {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- err = pvfs_write(fd->fd_sys, buf, len);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- if (err > 0)
- fd->fp_ind += err;
- fd->fp_sys_posn = fd->fp_ind;
- }
-
-#ifdef HAVE_STATUS_SET_BYTES
- if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
-#endif
-
- if (err == -1) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-}
-
-
-
-void ADIOI_PVFS_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
-/* Since PVFS does not support file locking, can't do buffered writes
- as on Unix */
-
-/* offset is in units of etype relative to the filetype. */
-
- ADIOI_Flatlist_node *flat_buf, *flat_file;
- int i, j, k, err=-1, bwr_size, fwr_size=0, st_index=0;
- int num, size, sum, n_etypes_in_filetype, size_in_filetype;
- MPI_Count bufsize;
- int n_filetypes, etype_in_filetype;
- ADIO_Offset abs_off_in_filetype=0;
- MPI_Count filetype_size, etype_size, buftype_size;
- MPI_Aint filetype_extent, buftype_extent, indx;
- int buf_count, buftype_is_contig, filetype_is_contig;
- ADIO_Offset off, disp;
- int flag, new_bwr_size, new_fwr_size, err_flag=0;
- static char myname[] = "ADIOI_PVFS_WRITESTRIDED";
-
-#ifdef HAVE_PVFS_LISTIO
- if ( fd->hints->fs_hints.pvfs.listio_write == ADIOI_HINT_ENABLE ) {
- ADIOI_PVFS_WriteStridedListIO(fd, buf, count, datatype,
- file_ptr_type, offset, status, error_code);
- return;
- }
-#endif
- /* if hint set to DISABLE or AUTOMATIC, don't use listio */
-
- /* --BEGIN ERROR HANDLING-- */
- if (fd->atomicity) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_INTERN,
- "Atomic mode set in PVFS I/O function", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
-
- ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
- ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
-
- MPI_Type_size_x(fd->filetype, &filetype_size);
- if ( ! filetype_size ) {
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, 0);
-#endif
- *error_code = MPI_SUCCESS;
- return;
- }
-
- MPI_Type_extent(fd->filetype, &filetype_extent);
- MPI_Type_size_x(datatype, &buftype_size);
- MPI_Type_extent(datatype, &buftype_extent);
- etype_size = fd->etype_size;
-
- bufsize = buftype_size * count;
-
- if (!buftype_is_contig && filetype_is_contig) {
- char *combine_buf, *combine_buf_ptr;
- ADIO_Offset combine_buf_remain;
-/* noncontiguous in memory, contiguous in file. use writev */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- /* allocate our "combine buffer" to pack data into before writing */
- combine_buf = (char *) ADIOI_Malloc(fd->hints->ind_wr_buffer_size);
- combine_buf_ptr = combine_buf;
- combine_buf_remain = fd->hints->ind_wr_buffer_size;
-
- /* seek to the right spot in the file */
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- off = fd->disp + etype_size * offset;
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, off, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
- else {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- off = pvfs_lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
-
- /* loop through all the flattened pieces. combine into buffer until
- * no more will fit, then write.
- *
- * special case of a given piece being bigger than the combine buffer
- * is also handled.
- */
- for (j=0; j<count; j++) {
- for (i=0; i<flat_buf->count; i++) {
- if (flat_buf->blocklens[i] > combine_buf_remain && combine_buf != combine_buf_ptr) {
- /* there is data in the buffer; write out the buffer so far */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- err = pvfs_write(fd->fd_sys,
- combine_buf,
- fd->hints->ind_wr_buffer_size - combine_buf_remain);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- if (err == -1) err_flag = 1;
-
- /* reset our buffer info */
- combine_buf_ptr = combine_buf;
- combine_buf_remain = fd->hints->ind_wr_buffer_size;
- }
-
- /* TODO: heuristic for when to not bother to use combine buffer? */
- if (flat_buf->blocklens[i] >= combine_buf_remain) {
- /* special case: blocklen is as big as or bigger than the combine buf;
- * write directly
- */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- err = pvfs_write(fd->fd_sys,
- ((char *) buf) + j*buftype_extent + flat_buf->indices[i],
- flat_buf->blocklens[i]);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- if (err == -1) err_flag = 1;
- off += flat_buf->blocklens[i]; /* keep up with the final file offset too */
- }
- else {
- /* copy more data into combine buffer */
- memcpy(combine_buf_ptr,
- ((char *) buf) + j*buftype_extent + flat_buf->indices[i],
- flat_buf->blocklens[i]);
- combine_buf_ptr += flat_buf->blocklens[i];
- combine_buf_remain -= flat_buf->blocklens[i];
- off += flat_buf->blocklens[i]; /* keep up with the final file offset too */
- }
- }
- }
-
- if (combine_buf_ptr != combine_buf) {
- /* data left in buffer to write */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- err = pvfs_write(fd->fd_sys,
- combine_buf,
- fd->hints->ind_wr_buffer_size - combine_buf_remain);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- if (err == -1) err_flag = 1;
- }
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
-
- ADIOI_Free(combine_buf);
-
- if (err_flag) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
- } /* if (!buftype_is_contig && filetype_is_contig) ... */
-
- else { /* noncontiguous in file */
-
-/* split up into several contiguous writes */
-
-/* find starting location in the file */
-
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
- disp = fd->disp;
-
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- offset = fd->fp_ind; /* in bytes */
- n_filetypes = -1;
- flag = 0;
- while (!flag) {
- n_filetypes++;
- for (i=0; i<flat_file->count; i++) {
- if (disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent + flat_file->blocklens[i]
- >= offset) {
- st_index = i;
- fwr_size = disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent
- + flat_file->blocklens[i] - offset;
- flag = 1;
- break;
- }
- }
- }
- }
- else {
- n_etypes_in_filetype = filetype_size/etype_size;
- n_filetypes = (int) (offset / n_etypes_in_filetype);
- etype_in_filetype = (int) (offset % n_etypes_in_filetype);
- size_in_filetype = etype_in_filetype * etype_size;
-
- sum = 0;
- for (i=0; i<flat_file->count; i++) {
- sum += flat_file->blocklens[i];
- if (sum > size_in_filetype) {
- st_index = i;
- fwr_size = sum - size_in_filetype;
- abs_off_in_filetype = flat_file->indices[i] +
- size_in_filetype - (sum - flat_file->blocklens[i]);
- break;
- }
- }
-
- /* abs. offset in bytes in the file */
- offset = disp + (ADIO_Offset) n_filetypes*filetype_extent + abs_off_in_filetype;
- }
-
- if (buftype_is_contig && !filetype_is_contig) {
-
-/* contiguous in memory, noncontiguous in file. should be the most
- common case. */
-
- i = 0;
- j = st_index;
- off = offset;
- fwr_size = ADIOI_MIN(fwr_size, bufsize);
- while (i < bufsize) {
- if (fwr_size) {
- /* TYPE_UB and TYPE_LB can result in
- fwr_size = 0. save system call in such cases */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, off, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- err = pvfs_write(fd->fd_sys, ((char *) buf) + i, fwr_size);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- if (err == -1) err_flag = 1;
- }
- i += fwr_size;
-
- if (off + fwr_size < disp + flat_file->indices[j] +
- flat_file->blocklens[j] + (ADIO_Offset) n_filetypes*filetype_extent)
- off += fwr_size;
- /* did not reach end of contiguous block in filetype.
- no more I/O needed. off is incremented by fwr_size. */
- else {
- if (j < (flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- off = disp + flat_file->indices[j] +
- (ADIO_Offset) n_filetypes*filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
- }
- }
- }
- else {
-/* noncontiguous in memory as well as in file */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- k = num = buf_count = 0;
- indx = flat_buf->indices[0];
- j = st_index;
- off = offset;
- bwr_size = flat_buf->blocklens[0];
-
- while (num < bufsize) {
- size = ADIOI_MIN(fwr_size, bwr_size);
- if (size) {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, off, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- err = pvfs_write(fd->fd_sys, ((char *) buf) + indx, size);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- if (err == -1) err_flag = 1;
- }
-
- new_fwr_size = fwr_size;
- new_bwr_size = bwr_size;
-
- if (size == fwr_size) {
-/* reached end of contiguous block in file */
- if (j < (flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
-
- off = disp + flat_file->indices[j] +
- (ADIO_Offset) n_filetypes*filetype_extent;
-
- new_fwr_size = flat_file->blocklens[j];
- if (size != bwr_size) {
- indx += size;
- new_bwr_size -= size;
- }
- }
-
- if (size == bwr_size) {
-/* reached end of contiguous block in memory */
-
- k = (k + 1)%flat_buf->count;
- buf_count++;
- indx = buftype_extent*(buf_count/flat_buf->count) +
- flat_buf->indices[k];
- new_bwr_size = flat_buf->blocklens[k];
- if (size != fwr_size) {
- off += size;
- new_fwr_size -= size;
- }
- }
- num += size;
- fwr_size = new_fwr_size;
- bwr_size = new_bwr_size;
- }
- }
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
- if (err_flag) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
- }
-
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
-/* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
-#endif
-
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
-}
-
-#ifdef HAVE_PVFS_LISTIO
-void ADIOI_PVFS_WriteStridedListIO(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
-/* Since PVFS does not support file locking, can't do buffered writes
- as on Unix */
-
-/* offset is in units of etype relative to the filetype. */
-
- ADIOI_Flatlist_node *flat_buf, *flat_file;
- int i, j, k, err=-1, bwr_size, fwr_size=0, st_index=0;
- int size, sum, n_etypes_in_filetype, size_in_filetype;
- MPI_Count bufsize;
- int n_filetypes, etype_in_filetype;
- ADIO_Offset abs_off_in_filetype=0;
- MPI_Count filetype_size, etype_size, buftype_size;
- MPI_Aint filetype_extent, buftype_extent;
- int buf_count, buftype_is_contig, filetype_is_contig;
- ADIO_Offset userbuf_off;
- ADIO_Offset off, disp, start_off;
- int flag, st_fwr_size, st_n_filetypes;
- int new_bwr_size, new_fwr_size, err_flag=0;
-
- int mem_list_count, file_list_count;
- char ** mem_offsets;
- int64_t *file_offsets;
- int *mem_lengths;
- int32_t *file_lengths;
- int total_blks_to_write;
-
- int max_mem_list, max_file_list;
-
- int b_blks_wrote;
- int f_data_wrote;
- int size_wrote=0, n_write_lists, extra_blks;
-
- int end_bwr_size, end_fwr_size;
- int start_k, start_j, new_file_write, new_buffer_write;
- int start_mem_offset;
-#define MAX_ARRAY_SIZE 1024
- static char myname[] = "ADIOI_PVFS_WRITESTRIDED";
-
-/* PFS file pointer modes are not relevant here, because PFS does
- not support strided accesses. */
-
- /* --BEGIN ERROR HANDLING-- */
- if (fd->atomicity) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_INTERN,
- "Atomic mode set in PVFS I/O function", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
-
- ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
- ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
-
- MPI_Type_size_x(fd->filetype, &filetype_size);
- if ( ! filetype_size ) {
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, 0);
-#endif
- *error_code = MPI_SUCCESS;
- return;
- }
-
- MPI_Type_extent(fd->filetype, &filetype_extent);
- MPI_Type_size_x(datatype, &buftype_size);
- MPI_Type_extent(datatype, &buftype_extent);
- etype_size = fd->etype_size;
-
- bufsize = buftype_size * count;
-
- if (!buftype_is_contig && filetype_is_contig) {
-
-/* noncontiguous in memory, contiguous in file. */
- int64_t file_offsets;
- int32_t file_lengths;
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- off = fd->disp + etype_size * offset;
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- pvfs_lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
- else {
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
-#endif
- off = pvfs_lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
-#endif
- }
-
- file_list_count = 1;
- file_offsets = off;
- file_lengths = 0;
- total_blks_to_write = count*flat_buf->count;
- b_blks_wrote = 0;
-
- /* allocate arrays according to max usage */
- if (total_blks_to_write > MAX_ARRAY_SIZE)
- mem_list_count = MAX_ARRAY_SIZE;
- else mem_list_count = total_blks_to_write;
- mem_offsets = (char**)ADIOI_Malloc(mem_list_count*sizeof(char*));
- mem_lengths = (int*)ADIOI_Malloc(mem_list_count*sizeof(int));
-
- j = 0;
- /* step through each block in memory, filling memory arrays */
- while (b_blks_wrote < total_blks_to_write) {
- for (i=0; i<flat_buf->count; i++) {
- mem_offsets[b_blks_wrote % MAX_ARRAY_SIZE] =
- ((char*)buf + j*buftype_extent + flat_buf->indices[i]);
- mem_lengths[b_blks_wrote % MAX_ARRAY_SIZE] =
- flat_buf->blocklens[i];
- file_lengths += flat_buf->blocklens[i];
- b_blks_wrote++;
- if (!(b_blks_wrote % MAX_ARRAY_SIZE) ||
- (b_blks_wrote == total_blks_to_write)) {
-
- /* in the case of the last read list call,
- adjust mem_list_count */
- if (b_blks_wrote == total_blks_to_write) {
- mem_list_count = total_blks_to_write % MAX_ARRAY_SIZE;
- /* in case last read list call fills max arrays */
- if (!mem_list_count) mem_list_count = MAX_ARRAY_SIZE;
- }
-
- pvfs_write_list(fd->fd_sys ,mem_list_count, mem_offsets,
- mem_lengths, file_list_count,
- &file_offsets, &file_lengths);
-
- /* in the case of the last read list call, leave here */
- if (b_blks_wrote == total_blks_to_write) break;
-
- file_offsets += file_lengths;
- file_lengths = 0;
- }
- } /* for (i=0; i<flat_buf->count; i++) */
- j++;
- } /* while (b_blks_wrote < total_blks_to_write) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
-
- if (err_flag) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE, myname,
- __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-
- fd->fp_sys_posn = -1; /* clear this. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
-/* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
-#endif
-
- ADIOI_Delete_flattened(datatype);
- return;
- } /* if (!buftype_is_contig && filetype_is_contig) */
-
- /* already know that file is noncontiguous from above */
- /* noncontiguous in file */
-
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
-
- disp = fd->disp;
-
- /* for each case - ADIO_Individual pointer or explicit, find offset
- (file offset in bytes), n_filetypes (how many filetypes into file
- to start), fwr_size (remaining amount of data in present file
- block), and st_index (start point in terms of blocks in starting
- filetype) */
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- offset = fd->fp_ind; /* in bytes */
- n_filetypes = -1;
- flag = 0;
- while (!flag) {
- n_filetypes++;
- for (i=0; i<flat_file->count; i++) {
- if (disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent +
- flat_file->blocklens[i] >= offset) {
- st_index = i;
- fwr_size = disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent
- + flat_file->blocklens[i] - offset;
- flag = 1;
- break;
- }
- }
- } /* while (!flag) */
- } /* if (file_ptr_type == ADIO_INDIVIDUAL) */
- else {
- n_etypes_in_filetype = filetype_size/etype_size;
- n_filetypes = (int) (offset / n_etypes_in_filetype);
- etype_in_filetype = (int) (offset % n_etypes_in_filetype);
- size_in_filetype = etype_in_filetype * etype_size;
-
- sum = 0;
- for (i=0; i<flat_file->count; i++) {
- sum += flat_file->blocklens[i];
- if (sum > size_in_filetype) {
- st_index = i;
- fwr_size = sum - size_in_filetype;
- abs_off_in_filetype = flat_file->indices[i] +
- size_in_filetype - (sum - flat_file->blocklens[i]);
- break;
- }
- }
-
- /* abs. offset in bytes in the file */
- offset = disp + (ADIO_Offset) n_filetypes*filetype_extent +
- abs_off_in_filetype;
- } /* else [file_ptr_type != ADIO_INDIVIDUAL] */
-
- start_off = offset;
- st_fwr_size = fwr_size;
- st_n_filetypes = n_filetypes;
-
- if (buftype_is_contig && !filetype_is_contig) {
-
-/* contiguous in memory, noncontiguous in file. should be the most
- common case. */
-
- int mem_lengths;
- char *mem_offsets;
-
- i = 0;
- j = st_index;
- off = offset;
- n_filetypes = st_n_filetypes;
-
- mem_list_count = 1;
-
- /* determine how many blocks in file to read */
- f_data_wrote = ADIOI_MIN(st_fwr_size, bufsize);
- total_blks_to_write = 1;
- j++;
- while (f_data_wrote < bufsize) {
- f_data_wrote += flat_file->blocklens[j];
- total_blks_to_write++;
- if (j<(flat_file->count-1)) j++;
- else j = 0;
- }
-
- j = st_index;
- n_filetypes = st_n_filetypes;
- n_write_lists = total_blks_to_write/MAX_ARRAY_SIZE;
- extra_blks = total_blks_to_write%MAX_ARRAY_SIZE;
-
- mem_offsets = buf;
- mem_lengths = 0;
-
- /* if at least one full readlist, allocate file arrays
- at max array size and don't free until very end */
- if (n_write_lists) {
- file_offsets = (int64_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(int64_t));
- file_lengths = (int32_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(int32_t));
- }
- /* if there's no full readlist allocate file arrays according
- to needed size (extra_blks) */
- else {
- file_offsets = (int64_t*)ADIOI_Malloc(extra_blks*
- sizeof(int64_t));
- file_lengths = (int32_t*)ADIOI_Malloc(extra_blks*
- sizeof(int32_t));
- }
-
- /* for file arrays that are of MAX_ARRAY_SIZE, build arrays */
- for (i=0; i<n_write_lists; i++) {
- file_list_count = MAX_ARRAY_SIZE;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = st_fwr_size;
- mem_lengths = st_fwr_size;
- }
- for (k=0; k<MAX_ARRAY_SIZE; k++) {
- if (i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent
- + flat_file->indices[j];
- file_lengths[k] = flat_file->blocklens[j];
- mem_lengths += file_lengths[k];
- }
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<MAX_ARRAY_SIZE; k++) */
- pvfs_write_list(fd->fd_sys, mem_list_count,
- &mem_offsets, &mem_lengths,
- file_list_count, file_offsets,
- file_lengths);
- mem_offsets += mem_lengths;
- mem_lengths = 0;
- } /* for (i=0; i<n_write_lists; i++) */
-
- /* for file arrays smaller than MAX_ARRAY_SIZE (last read_list call) */
- if (extra_blks) {
- file_list_count = extra_blks;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = st_fwr_size;
- }
- for (k=0; k<extra_blks; k++) {
- if(i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent +
- flat_file->indices[j];
- if (k == (extra_blks - 1)) {
- file_lengths[k] = bufsize - (int32_t) mem_lengths
- - (int32_t) mem_offsets + (int32_t) buf;
- }
- else file_lengths[k] = flat_file->blocklens[j];
- } /* if(i || k) */
- mem_lengths += file_lengths[k];
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<extra_blks; k++) */
- pvfs_write_list(fd->fd_sys, mem_list_count, &mem_offsets,
- &mem_lengths, file_list_count, file_offsets,
- file_lengths);
- }
- }
- else {
- /* noncontiguous in memory as well as in file */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- size_wrote = 0;
- n_filetypes = st_n_filetypes;
- fwr_size = st_fwr_size;
- bwr_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
- max_mem_list = 0;
- max_file_list = 0;
-
- /* run through and file max_file_list and max_mem_list so that you
- can allocate the file and memory arrays less than MAX_ARRAY_SIZE
- if possible */
-
- while (size_wrote < bufsize) {
- k = start_k;
- new_buffer_write = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data read and data to be
- read in the next immediate read list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k] +
- size_wrote) > bufsize) {
- end_bwr_size = new_buffer_write +
- flat_buf->blocklens[k] - (bufsize - size_wrote);
- new_buffer_write = bufsize - size_wrote;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- else new_buffer_write = bwr_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
- j = start_j;
- new_file_write = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_write < new_buffer_write)) {
- if(file_list_count) {
- if((new_file_write + flat_file->blocklens[j]) >
- new_buffer_write) {
- end_fwr_size = new_buffer_write - new_file_write;
- new_file_write = new_buffer_write;
- j--;
- }
- else {
- new_file_write += flat_file->blocklens[j];
- end_fwr_size = flat_file->blocklens[j];
- }
- }
- else {
- if (fwr_size > new_buffer_write) {
- new_file_write = new_buffer_write;
- fwr_size = new_file_write;
- }
- else new_file_write = fwr_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_write = 0;
- mem_list_count = 0;
- while (new_buffer_write < new_file_write) {
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k]) >
- new_file_write) {
- end_bwr_size = new_file_write -
- new_buffer_write;
- new_buffer_write = new_file_write;
- k--;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_write = bwr_size;
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_write < new_file_write) */
- } /* if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
-
- /* fakes filling the writelist arrays of lengths found above */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- if(i) {
- if (i == (mem_list_count - 1)) {
- if (flat_buf->blocklens[k] == end_bwr_size)
- bwr_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- bwr_size = flat_buf->blocklens[k] - end_bwr_size;
- k--;
- buf_count--;
- }
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- if (i) {
- if (i == (file_list_count - 1)) {
- if (flat_file->blocklens[j] == end_fwr_size)
- fwr_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- fwr_size = flat_file->blocklens[j] - end_fwr_size;
- j--;
- }
- }
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
- size_wrote += new_buffer_write;
- start_k = k;
- start_j = j;
- if (max_mem_list < mem_list_count)
- max_mem_list = mem_list_count;
- if (max_file_list < file_list_count)
- max_file_list = file_list_count;
- } /* while (size_wrote < bufsize) */
-
- mem_offsets = (char **)ADIOI_Malloc(max_mem_list*sizeof(char *));
- mem_lengths = (int *)ADIOI_Malloc(max_mem_list*sizeof(int));
- file_offsets = (int64_t *)ADIOI_Malloc(max_file_list*sizeof(int64_t));
- file_lengths = (int32_t *)ADIOI_Malloc(max_file_list*sizeof(int32_t));
-
- size_wrote = 0;
- n_filetypes = st_n_filetypes;
- fwr_size = st_fwr_size;
- bwr_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
-
- /* this section calculates mem_list_count and file_list_count
- and also finds the possibly odd sized last array elements
- in new_fwr_size and new_bwr_size */
-
- while (size_wrote < bufsize) {
- k = start_k;
- new_buffer_write = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data read and data to be
- read in the next immediate read list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k] +
- size_wrote) > bufsize) {
- end_bwr_size = new_buffer_write +
- flat_buf->blocklens[k] - (bufsize - size_wrote);
- new_buffer_write = bufsize - size_wrote;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- else new_buffer_write = bwr_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
- j = start_j;
- new_file_write = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_write < new_buffer_write)) {
- if(file_list_count) {
- if((new_file_write + flat_file->blocklens[j]) >
- new_buffer_write) {
- end_fwr_size = new_buffer_write - new_file_write;
- new_file_write = new_buffer_write;
- j--;
- }
- else {
- new_file_write += flat_file->blocklens[j];
- end_fwr_size = flat_file->blocklens[j];
- }
- }
- else {
- if (fwr_size > new_buffer_write) {
- new_file_write = new_buffer_write;
- fwr_size = new_file_write;
- }
- else new_file_write = fwr_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_write = 0;
- mem_list_count = 0;
- while (new_buffer_write < new_file_write) {
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k]) >
- new_file_write) {
- end_bwr_size = new_file_write -
- new_buffer_write;
- new_buffer_write = new_file_write;
- k--;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_write = bwr_size;
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_write < new_file_write) */
- } /* if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
-
- /* fills the allocated readlist arrays */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- mem_offsets[i] = ((char*)buf + buftype_extent*
- (buf_count/flat_buf->count) +
- (int)flat_buf->indices[k]);
-
- if(!i) {
- mem_lengths[0] = bwr_size;
- mem_offsets[0] += flat_buf->blocklens[k] - bwr_size;
- }
- else {
- if (i == (mem_list_count - 1)) {
- mem_lengths[i] = end_bwr_size;
- if (flat_buf->blocklens[k] == end_bwr_size)
- bwr_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- bwr_size = flat_buf->blocklens[k] - end_bwr_size;
- k--;
- buf_count--;
- }
- }
- else {
- mem_lengths[i] = flat_buf->blocklens[k];
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- file_offsets[i] = disp + flat_file->indices[j] + n_filetypes *
- filetype_extent;
- if (!i) {
- file_lengths[0] = fwr_size;
- file_offsets[0] += flat_file->blocklens[j] - fwr_size;
- }
- else {
- if (i == (file_list_count - 1)) {
- file_lengths[i] = end_fwr_size;
- if (flat_file->blocklens[j] == end_fwr_size)
- fwr_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- fwr_size = flat_file->blocklens[j] - end_fwr_size;
- j--;
- }
- }
- else file_lengths[i] = flat_file->blocklens[j];
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
- pvfs_write_list(fd->fd_sys,mem_list_count, mem_offsets,
- mem_lengths, file_list_count, file_offsets,
- file_lengths);
- size_wrote += new_buffer_write;
- start_k = k;
- start_j = j;
- } /* while (size_wrote < bufsize) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
- }
- ADIOI_Free(file_offsets);
- ADIOI_Free(file_lengths);
-
- if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
- if (err_flag) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**io",
- "**io %s", strerror(errno));
- }
- else *error_code = MPI_SUCCESS;
-
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
-/* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
-#endif
-
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
-}
-#endif /* HAVE_PVFS_LISTIO */
diff --git a/src/mpi/romio/adio/ad_pvfs2/.state-cache b/src/mpi/romio/adio/ad_pvfs2/.state-cache
index da8f398..55cb781 100644
--- a/src/mpi/romio/adio/ad_pvfs2/.state-cache
+++ b/src/mpi/romio/adio/ad_pvfs2/.state-cache
@@ -1,64 +1,64 @@
<dir>
-<file name="ad_pvfs2_io_dtype.c" info="1447123141"/>
-<file name="ad_pvfs2_close.c" info="1447123141"/>
-<file name="ad_pvfs2_read_list_classic.c" info="1447123141"/>
-<file name="ad_pvfs2_open.c" info="1447123141"/>
-<file name="ad_pvfs2_flush.c" info="1447123141"/>
-<file name="ad_pvfs2_io_list.c" info="1447123141"/>
-<file name="ad_pvfs2_resize.c" info="1447123141"/>
-<file name="ad_pvfs2.h" info="1447123141"/>
-<file name="ad_pvfs2_delete.c" info="1447123141"/>
-<file name="ad_pvfs2_write.c" info="1447123141"/>
-<file name="ad_pvfs2_io.h" info="1447123141"/>
-<file name="ad_pvfs2_fcntl.c" info="1447123141"/>
-<file name="ad_pvfs2_aio.c" info="1447123141"/>
-<file name="ad_pvfs2_features.c" info="1447123141"/>
-<file name="ad_pvfs2_write_list_classic.c" info="1447123141"/>
-<file name="ad_pvfs2_hints.c" info="1447123141"/>
-<file name="ad_pvfs2_common.h" info="1447123141"/>
-<file name="ad_pvfs2_common.c" info="1447123141"/>
-<file name="ad_pvfs2_read.c" info="1447123141"/>
-<file name="ad_pvfs2.c" info="1447123141"/>
+<file name="ad_pvfs2_common.c" info="1478973152"/>
+<file name="ad_pvfs2_delete.c" info="1478973152"/>
+<file name="ad_pvfs2_fcntl.c" info="1478973152"/>
+<file name="ad_pvfs2.c" info="1478973152"/>
+<file name="ad_pvfs2_io_dtype.c" info="1478973152"/>
+<file name="ad_pvfs2_hints.c" info="1478973152"/>
+<file name="ad_pvfs2_flush.c" info="1478973152"/>
+<file name="ad_pvfs2_resize.c" info="1478973152"/>
+<file name="ad_pvfs2_write_list_classic.c" info="1478973152"/>
+<file name="ad_pvfs2_io_list.c" info="1478973152"/>
+<file name="ad_pvfs2_features.c" info="1478973152"/>
+<file name="ad_pvfs2_write.c" info="1478973152"/>
+<file name="ad_pvfs2_read.c" info="1478973152"/>
+<file name="ad_pvfs2_io.h" info="1478973152"/>
+<file name="ad_pvfs2_close.c" info="1478973152"/>
+<file name="ad_pvfs2_common.h" info="1478973152"/>
+<file name="ad_pvfs2_aio.c" info="1478973152"/>
+<file name="ad_pvfs2_read_list_classic.c" info="1478973152"/>
+<file name="ad_pvfs2_open.c" info="1478973152"/>
+<file name="ad_pvfs2.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_pvfs2_io_dtype.c">
-</fileinfo>
-<fileinfo name="ad_pvfs2_close.c">
+<fileinfo name="ad_pvfs2_common.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_read_list_classic.c">
+<fileinfo name="ad_pvfs2_delete.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_open.c">
+<fileinfo name="ad_pvfs2_fcntl.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_flush.c">
+<fileinfo name="ad_pvfs2.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_io_list.c">
+<fileinfo name="ad_pvfs2_io_dtype.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_resize.c">
+<fileinfo name="ad_pvfs2_hints.c">
</fileinfo>
-<fileinfo name="ad_pvfs2.h">
+<fileinfo name="ad_pvfs2_flush.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_delete.c">
+<fileinfo name="ad_pvfs2_resize.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_write.c">
+<fileinfo name="ad_pvfs2_write_list_classic.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_io.h">
+<fileinfo name="ad_pvfs2_io_list.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_fcntl.c">
+<fileinfo name="ad_pvfs2_features.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_aio.c">
+<fileinfo name="ad_pvfs2_write.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_features.c">
+<fileinfo name="ad_pvfs2_read.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_write_list_classic.c">
+<fileinfo name="ad_pvfs2_io.h">
</fileinfo>
-<fileinfo name="ad_pvfs2_hints.c">
+<fileinfo name="ad_pvfs2_close.c">
</fileinfo>
<fileinfo name="ad_pvfs2_common.h">
</fileinfo>
-<fileinfo name="ad_pvfs2_common.c">
+<fileinfo name="ad_pvfs2_aio.c">
</fileinfo>
-<fileinfo name="ad_pvfs2_read.c">
+<fileinfo name="ad_pvfs2_read_list_classic.c">
</fileinfo>
-<fileinfo name="ad_pvfs2.c">
+<fileinfo name="ad_pvfs2_open.c">
+</fileinfo>
+<fileinfo name="ad_pvfs2.h">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_dtype.c b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_dtype.c
index 0901252..b96825a 100644
--- a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_dtype.c
+++ b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_dtype.c
@@ -28,7 +28,7 @@ int ADIOI_PVFS2_StridedDtypeIO(ADIO_File fd, void *buf, int count,
int i = -1;
MPI_Count etype_size;
PVFS_size pvfs_disp = -1;
- ADIOI_Flatlist_node *flat_file_p = ADIOI_Flatlist;
+ ADIOI_Flatlist_node *flat_file_p;
/* Use for offseting the PVFS2 filetype */
int pvfs_blk = 1;
@@ -79,11 +79,7 @@ int ADIOI_PVFS2_StridedDtypeIO(ADIO_File fd, void *buf, int count,
else
{
int flag = 0;
- /* Should have already been flattened in ADIO_Open*/
- while (flat_file_p->type != fd->filetype)
- {
- flat_file_p = flat_file_p->next;
- }
+ flat_file_p = ADIOI_Flatten_and_find(fd->filetype);
num_filetypes = -1;
while (!flag)
{
diff --git a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_list.c b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_list.c
index 39befcc..7394605 100644
--- a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_list.c
+++ b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_io_list.c
@@ -325,18 +325,14 @@ error_state:
/* This is a temporary way of filling in status. The right way is to
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
#endif
- if (buftype_is_contig == 0)
- ADIOI_Delete_flattened(datatype);
- else
+ if (buftype_is_contig != 0)
{
ADIOI_Free(flat_buf_p->blocklens);
ADIOI_Free(flat_buf_p->indices);
ADIOI_Free(flat_buf_p);
}
- if (filetype_is_contig == 0)
- ADIOI_Delete_flattened(fd->filetype);
- else
+ if (filetype_is_contig != 0)
{
ADIOI_Free(flat_file_p->blocklens);
ADIOI_Free(flat_file_p->indices);
diff --git a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_read_list_classic.c b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_read_list_classic.c
index 40ff2c1..d85dcf5 100644
--- a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_read_list_classic.c
+++ b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_read_list_classic.c
@@ -63,8 +63,7 @@ void ADIOI_PVFS2_OldReadStrided(ADIO_File fd, void *buf, int count,
* lines down below). We added a workaround, but common HDF5 file types
* are actually contiguous and do not need the expensive workarond */
if (!filetype_is_contig) {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
if (flat_file->count == 1 && !buftype_is_contig)
filetype_is_contig = 1;
}
@@ -187,7 +186,6 @@ void ADIOI_PVFS2_OldReadStrided(ADIO_File fd, void *buf, int count,
keep tracke of how much data was actually read adn placed in buf
by ADIOI_BUFFERED_READ. */
#endif
- ADIOI_Delete_flattened(datatype);
return;
} /* if (!buftype_is_contig && filetype_is_contig) */
@@ -196,8 +194,7 @@ void ADIOI_PVFS2_OldReadStrided(ADIO_File fd, void *buf, int count,
/* noncontiguous in file */
/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
initial_off = offset;
@@ -270,7 +267,7 @@ void ADIOI_PVFS2_OldReadStrided(ADIO_File fd, void *buf, int count,
mem_list_count = 1;
/* determine how many blocks in file to read */
- f_data_read = ADIOI_MIN(st_frd_size, bufsize);
+ f_data_read = MPL_MIN(st_frd_size, bufsize);
total_blks_to_read = 1;
if (j < (flat_file->count-1)) j++;
else {
@@ -394,7 +391,7 @@ void ADIOI_PVFS2_OldReadStrided(ADIO_File fd, void *buf, int count,
file_list_count = extra_blks;
if(!i) {
file_offsets[0] = offset;
- file_lengths[0] = ADIOI_MIN(st_frd_size, bufsize);
+ file_lengths[0] = MPL_MIN(st_frd_size, bufsize);
}
for (k=0; k<extra_blks; k++) {
if(i || k) {
@@ -646,7 +643,6 @@ void ADIOI_PVFS2_OldReadStrided(ADIO_File fd, void *buf, int count,
(new_buffer_read < flat_file->blocklens[0])) )
{
- ADIOI_Delete_flattened(datatype);
ADIOI_GEN_ReadStrided_naive(fd, buf, count, datatype,
file_ptr_type, initial_off, status, error_code);
return;
@@ -904,6 +900,5 @@ error_state:
by ADIOI_BUFFERED_READ. */
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
}
diff --git a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_write_list_classic.c b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_write_list_classic.c
index 5adae31..af7f734 100644
--- a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_write_list_classic.c
+++ b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_write_list_classic.c
@@ -79,8 +79,7 @@ void ADIOI_PVFS2_OldWriteStrided(ADIO_File fd, const void *buf, int count,
* lines down below). We added a workaround, but common HDF5 file types
* are actually contiguous and do not need the expensive workarond */
if (!filetype_is_contig) {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
if (flat_file->count == 1 && !buftype_is_contig)
filetype_is_contig = 1;
}
@@ -230,7 +229,6 @@ void ADIOI_PVFS2_OldWriteStrided(ADIO_File fd, const void *buf, int count,
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
#endif
- ADIOI_Delete_flattened(datatype);
return;
} /* if (!buftype_is_contig && filetype_is_contig) */
@@ -238,8 +236,7 @@ void ADIOI_PVFS2_OldWriteStrided(ADIO_File fd, const void *buf, int count,
/* noncontiguous in file */
/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_flie = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
initial_off = offset;
@@ -312,7 +309,7 @@ void ADIOI_PVFS2_OldWriteStrided(ADIO_File fd, const void *buf, int count,
mem_list_count = 1;
/* determine how many blocks in file to write */
- f_data_wrote = ADIOI_MIN(st_fwr_size, bufsize);
+ f_data_wrote = MPL_MIN(st_fwr_size, bufsize);
total_blks_to_write = 1;
if (j < (flat_file->count -1)) j++;
else {
@@ -437,7 +434,7 @@ void ADIOI_PVFS2_OldWriteStrided(ADIO_File fd, const void *buf, int count,
file_list_count = extra_blks;
if(!i) {
file_offsets[0] = offset;
- file_lengths[0] = ADIOI_MIN(st_fwr_size, bufsize);
+ file_lengths[0] = MPL_MIN(st_fwr_size, bufsize);
}
for (k=0; k<extra_blks; k++) {
if(i || k) {
@@ -692,7 +689,6 @@ void ADIOI_PVFS2_OldWriteStrided(ADIO_File fd, const void *buf, int count,
( (mem_list_count == MAX_ARRAY_SIZE) &&
(new_buffer_write < flat_file->blocklens[0])) )
{
- ADIOI_Delete_flattened(datatype);
ADIOI_GEN_WriteStrided_naive(fd, buf, count, datatype,
file_ptr_type, initial_off, status, error_code);
return;
@@ -959,5 +955,4 @@ error_state:
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
}
diff --git a/src/mpi/romio/adio/ad_sfs/.state-cache b/src/mpi/romio/adio/ad_sfs/.state-cache
deleted file mode 100644
index 063cff4..0000000
--- a/src/mpi/romio/adio/ad_sfs/.state-cache
+++ /dev/null
@@ -1,19 +0,0 @@
-<dir>
-<file name="ad_sfs_open.c" info="1447123141"/>
-<file name="ad_sfs_fcntl.c" info="1447123141"/>
-<file name="ad_sfs.c" info="1447123141"/>
-<file name="ad_sfs.h" info="1447123141"/>
-<file name="ad_sfs_flush.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_sfs_open.c">
-</fileinfo>
-<fileinfo name="ad_sfs_fcntl.c">
-</fileinfo>
-<fileinfo name="ad_sfs.c">
-</fileinfo>
-<fileinfo name="ad_sfs.h">
-</fileinfo>
-<fileinfo name="ad_sfs_flush.c">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_sfs/Makefile.mk b/src/mpi/romio/adio/ad_sfs/Makefile.mk
deleted file mode 100644
index 2db1ac2..0000000
--- a/src/mpi/romio/adio/ad_sfs/Makefile.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_AD_SFS
-
-noinst_HEADERS += adio/ad_sfs/ad_sfs.h
-
-romio_other_sources += \
- adio/ad_sfs/ad_sfs_open.c \
- adio/ad_sfs/ad_sfs_fcntl.c \
- adio/ad_sfs/ad_sfs_flush.c \
- adio/ad_sfs/ad_sfs.c
-
-endif BUILD_AD_SFS
-
diff --git a/src/mpi/romio/adio/ad_sfs/README b/src/mpi/romio/adio/ad_sfs/README
deleted file mode 100644
index 933677b..0000000
--- a/src/mpi/romio/adio/ad_sfs/README
+++ /dev/null
@@ -1 +0,0 @@
-This code is no longer supported.
diff --git a/src/mpi/romio/adio/ad_sfs/ad_sfs.c b/src/mpi/romio/adio/ad_sfs/ad_sfs.c
deleted file mode 100644
index c4c1609..0000000
--- a/src/mpi/romio/adio/ad_sfs/ad_sfs.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2001 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_sfs.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_SFS_operations = {
- ADIOI_SFS_Open, /* Open */
- ADIOI_GEN_ReadContig, /* ReadContig */
- ADIOI_GEN_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_SFS_Fcntl, /* Fcntl */
- ADIOI_GEN_SetInfo, /* SetInfo */
- ADIOI_GEN_ReadStrided, /* ReadStrided */
- ADIOI_GEN_WriteStrided, /* WriteStrided */
- ADIOI_GEN_Close, /* Close */
- ADIOI_FAKE_IreadContig, /* IreadContig */
- ADIOI_FAKE_IwriteContig, /* IwriteContig */
- ADIOI_FAKE_IODone, /* ReadDone */
- ADIOI_FAKE_IODone, /* WriteDone */
- ADIOI_FAKE_IOComplete, /* ReadComplete */
- ADIOI_FAKE_IOComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_SFS_Flush, /* Flush */
- ADIOI_GEN_Resize, /* Resize */
- ADIOI_GEN_Delete, /* Delete */
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
diff --git a/src/mpi/romio/adio/ad_sfs/ad_sfs.h b/src/mpi/romio/adio/ad_sfs/ad_sfs.h
deleted file mode 100644
index 9f029f0..0000000
--- a/src/mpi/romio/adio/ad_sfs/ad_sfs.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#ifndef AD_SFS_INCLUDE
-#define AD_SFS_INCLUDE
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include "adio.h"
-
-void ADIOI_SFS_Open(ADIO_File fd, int *error_code);
-void ADIOI_SFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
- *error_code);
-void ADIOI_SFS_Flush(ADIO_File fd, int *error_code);
-
-#endif
diff --git a/src/mpi/romio/adio/ad_sfs/ad_sfs_fcntl.c b/src/mpi/romio/adio/ad_sfs/ad_sfs_fcntl.c
deleted file mode 100644
index 533e26a..0000000
--- a/src/mpi/romio/adio/ad_sfs/ad_sfs_fcntl.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_sfs.h"
-#include "adio_extern.h"
-
-void ADIOI_SFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code)
-{
- int i, ntimes, len;
- ADIO_Offset curr_fsize, alloc_size, size, done;
- ADIO_Status status;
- char *buf;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_SFS_FCNTL";
-#endif
-
- switch(flag) {
- case ADIO_FCNTL_GET_FSIZE:
- /* On SFS, I find that a write from one process, which changes
- the file size, does not automatically make the new file size
- visible to other processes. Therefore, a sync-barrier-sync is
- needed. (Other processes are able to read the data written
- though; only file size is returned incorrectly.) */
-
- fsync(fd->fd_sys);
- MPI_Barrier(fd->comm);
- fsync(fd->fd_sys);
-
- fcntl_struct->fsize = llseek(fd->fd_sys, 0, SEEK_END);
- if (fd->fp_sys_posn != -1)
- llseek(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
- if (fcntl_struct->fsize == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(fd, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
- break;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- ADIOI_GEN_Prealloc(fd, fcntl_struct->diskspace, error_code);
- break;
-
- case ADIO_FCNTL_SET_ATOMICITY:
- fd->atomicity = (fcntl_struct->atomicity == 0) ? 0 : 1;
- *error_code = MPI_SUCCESS;
- break;
-
- default:
- FPRINTF(stderr, "Unknown flag passed to ADIOI_SFS_Fcntl\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
-}
diff --git a/src/mpi/romio/adio/ad_sfs/ad_sfs_flush.c b/src/mpi/romio/adio/ad_sfs/ad_sfs_flush.c
deleted file mode 100644
index 8fc7e35..0000000
--- a/src/mpi/romio/adio/ad_sfs/ad_sfs_flush.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_sfs.h"
-
-void ADIOI_SFS_Flush(ADIO_File fd, int *error_code)
-{
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_SFS_FLUSH";
-#endif
-
- /* there is no fsync on SX-4 */
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_UNSUPPORTED_OPERATION, 1,
- myname, (char *) 0, (char *) 0);
- ADIOI_Error(fd, *error_code, myname);
-#endif
-}
diff --git a/src/mpi/romio/adio/ad_sfs/ad_sfs_open.c b/src/mpi/romio/adio/ad_sfs/ad_sfs_open.c
deleted file mode 100644
index ebeefdc..0000000
--- a/src/mpi/romio/adio/ad_sfs/ad_sfs_open.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_sfs.h"
-
-void ADIOI_SFS_Open(ADIO_File fd, int *error_code)
-{
- int perm, old_mask, amode;
-#ifndef PRINT_ERR_MSG
- static char myname[] = "ADIOI_SFS_OPEN";
-#endif
-
- if (fd->perm == ADIO_PERM_NULL) {
- old_mask = umask(022);
- umask(old_mask);
- perm = old_mask ^ 0666;
- }
- else perm = fd->perm;
-
- amode = 0;
- if (fd->access_mode & ADIO_CREATE)
- amode = amode | O_CREAT;
- if (fd->access_mode & ADIO_RDONLY)
- amode = amode | O_RDONLY;
- if (fd->access_mode & ADIO_WRONLY)
- amode = amode | O_WRONLY;
- if (fd->access_mode & ADIO_RDWR)
- amode = amode | O_RDWR;
- if (fd->access_mode & ADIO_EXCL)
- amode = amode | O_EXCL;
-
- fd->fd_sys = open(fd->filename, amode, perm);
- fd->fd_direct = -1;
-
- if ((fd->fd_sys != -1) && (fd->access_mode & ADIO_APPEND)) {
- fd->fp_ind = llseek(fd->fd_sys, 0, SEEK_END);
- fd->fp_sys_posn = fd->fp_ind;
- }
-
- if (fd->fd_sys == -1) {
-#ifdef MPICH
- *error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
- "**io %s", strerror(errno));
-#elif defined(PRINT_ERR_MSG)
- *error_code = MPI_ERR_UNKNOWN;
-#else /* MPICH-1 */
- *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
- myname, "I/O Error", "%s", strerror(errno));
- ADIOI_Error(ADIO_FILE_NULL, *error_code, myname);
-#endif
- }
- else *error_code = MPI_SUCCESS;
-}
diff --git a/src/mpi/romio/adio/ad_testfs/.state-cache b/src/mpi/romio/adio/ad_testfs/.state-cache
index 58be5ea..e48a188 100644
--- a/src/mpi/romio/adio/ad_testfs/.state-cache
+++ b/src/mpi/romio/adio/ad_testfs/.state-cache
@@ -1,64 +1,64 @@
<dir>
-<file name="ad_testfs_wait.c" info="1447123141"/>
-<file name="ad_testfs_done.c" info="1447123141"/>
-<file name="ad_testfs_delete.c" info="1447123141"/>
-<file name="ad_testfs_write.c" info="1447123141"/>
-<file name="ad_testfs.h" info="1447123141"/>
-<file name="ad_testfs_open.c" info="1447123141"/>
-<file name="ad_testfs_hints.c" info="1447123141"/>
-<file name="ad_testfs_iwrite.c" info="1447123141"/>
-<file name="ad_testfs_rdcoll.c" info="1447123141"/>
-<file name="ad_testfs.c" info="1447123141"/>
-<file name="ad_testfs_fcntl.c" info="1447123141"/>
-<file name="ad_testfs_flush.c" info="1447123141"/>
-<file name="ad_testfs_setsh.c" info="1447123141"/>
-<file name="ad_testfs_wrcoll.c" info="1447123141"/>
-<file name="ad_testfs_close.c" info="1447123141"/>
-<file name="ad_testfs_resize.c" info="1447123141"/>
-<file name="ad_testfs_read.c" info="1447123141"/>
-<file name="ad_testfs_iread.c" info="1447123141"/>
-<file name="ad_testfs_seek.c" info="1447123141"/>
-<file name="ad_testfs_getsh.c" info="1447123141"/>
+<file name="ad_testfs_wrcoll.c" info="1478973152"/>
+<file name="ad_testfs_getsh.c" info="1478973152"/>
+<file name="ad_testfs_close.c" info="1478973152"/>
+<file name="ad_testfs_flush.c" info="1478973152"/>
+<file name="ad_testfs.h" info="1478973152"/>
+<file name="ad_testfs_delete.c" info="1478973152"/>
+<file name="ad_testfs_iwrite.c" info="1478973152"/>
+<file name="ad_testfs_read.c" info="1478973152"/>
+<file name="ad_testfs_seek.c" info="1478973152"/>
+<file name="ad_testfs_done.c" info="1478973152"/>
+<file name="ad_testfs_fcntl.c" info="1478973152"/>
+<file name="ad_testfs_resize.c" info="1478973152"/>
+<file name="ad_testfs_rdcoll.c" info="1478973152"/>
+<file name="ad_testfs_wait.c" info="1478973152"/>
+<file name="ad_testfs_hints.c" info="1478973152"/>
+<file name="ad_testfs_setsh.c" info="1478973152"/>
+<file name="ad_testfs_iread.c" info="1478973152"/>
+<file name="ad_testfs_open.c" info="1478973152"/>
+<file name="ad_testfs.c" info="1478973152"/>
+<file name="ad_testfs_write.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_testfs_wait.c">
+<fileinfo name="ad_testfs_wrcoll.c">
</fileinfo>
-<fileinfo name="ad_testfs_done.c">
+<fileinfo name="ad_testfs_getsh.c">
</fileinfo>
-<fileinfo name="ad_testfs_delete.c">
+<fileinfo name="ad_testfs_close.c">
</fileinfo>
-<fileinfo name="ad_testfs_write.c">
+<fileinfo name="ad_testfs_flush.c">
</fileinfo>
<fileinfo name="ad_testfs.h">
</fileinfo>
-<fileinfo name="ad_testfs_open.c">
-</fileinfo>
-<fileinfo name="ad_testfs_hints.c">
+<fileinfo name="ad_testfs_delete.c">
</fileinfo>
<fileinfo name="ad_testfs_iwrite.c">
</fileinfo>
-<fileinfo name="ad_testfs_rdcoll.c">
+<fileinfo name="ad_testfs_read.c">
</fileinfo>
-<fileinfo name="ad_testfs.c">
+<fileinfo name="ad_testfs_seek.c">
</fileinfo>
-<fileinfo name="ad_testfs_fcntl.c">
+<fileinfo name="ad_testfs_done.c">
</fileinfo>
-<fileinfo name="ad_testfs_flush.c">
+<fileinfo name="ad_testfs_fcntl.c">
</fileinfo>
-<fileinfo name="ad_testfs_setsh.c">
+<fileinfo name="ad_testfs_resize.c">
</fileinfo>
-<fileinfo name="ad_testfs_wrcoll.c">
+<fileinfo name="ad_testfs_rdcoll.c">
</fileinfo>
-<fileinfo name="ad_testfs_close.c">
+<fileinfo name="ad_testfs_wait.c">
</fileinfo>
-<fileinfo name="ad_testfs_resize.c">
+<fileinfo name="ad_testfs_hints.c">
</fileinfo>
-<fileinfo name="ad_testfs_read.c">
+<fileinfo name="ad_testfs_setsh.c">
</fileinfo>
<fileinfo name="ad_testfs_iread.c">
</fileinfo>
-<fileinfo name="ad_testfs_seek.c">
+<fileinfo name="ad_testfs_open.c">
</fileinfo>
-<fileinfo name="ad_testfs_getsh.c">
+<fileinfo name="ad_testfs.c">
+</fileinfo>
+<fileinfo name="ad_testfs_write.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_testfs/ad_testfs_seek.c b/src/mpi/romio/adio/ad_testfs/ad_testfs_seek.c
index df6d30a..9d10ee2 100644
--- a/src/mpi/romio/adio/ad_testfs/ad_testfs_seek.c
+++ b/src/mpi/romio/adio/ad_testfs/ad_testfs_seek.c
@@ -44,8 +44,7 @@ ADIO_Offset ADIOI_TESTFS_SeekIndividual(ADIO_File fd, ADIO_Offset offset,
if (filetype_is_contig) off = fd->disp + etype_size * offset;
else {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
MPI_Type_extent(fd->filetype, &filetype_extent);
MPI_Type_size_x(fd->filetype, &filetype_size);
diff --git a/src/mpi/romio/adio/ad_ufs/.state-cache b/src/mpi/romio/adio/ad_ufs/.state-cache
index 0971683..fea94a4 100644
--- a/src/mpi/romio/adio/ad_ufs/.state-cache
+++ b/src/mpi/romio/adio/ad_ufs/.state-cache
@@ -1,7 +1,7 @@
<dir>
-<file name="ad_ufs.c" info="1447123141"/>
-<file name="ad_ufs_open.c" info="1447123141"/>
-<file name="ad_ufs.h" info="1447123141"/>
+<file name="ad_ufs.c" info="1478973152"/>
+<file name="ad_ufs_open.c" info="1478973152"/>
+<file name="ad_ufs.h" info="1478973152"/>
</dir>
<data>
<fileinfo name="ad_ufs.c">
diff --git a/src/mpi/romio/adio/ad_xfs/.state-cache b/src/mpi/romio/adio/ad_xfs/.state-cache
index 921bc10..596e8e1 100644
--- a/src/mpi/romio/adio/ad_xfs/.state-cache
+++ b/src/mpi/romio/adio/ad_xfs/.state-cache
@@ -1,28 +1,28 @@
<dir>
-<file name="ad_xfs_write.c" info="1447123141"/>
-<file name="ad_xfs_fcntl.c" info="1447123141"/>
-<file name="ad_xfs_open.c" info="1447123141"/>
-<file name="ad_xfs.c" info="1447123141"/>
-<file name="ad_xfs.h" info="1447123141"/>
-<file name="ad_xfs_resize.c" info="1447123141"/>
-<file name="ad_xfs_hints.c" info="1447123141"/>
-<file name="ad_xfs_read.c" info="1447123141"/>
+<file name="ad_xfs.c" info="1478973152"/>
+<file name="ad_xfs_write.c" info="1478973152"/>
+<file name="ad_xfs_hints.c" info="1478973152"/>
+<file name="ad_xfs_resize.c" info="1478973152"/>
+<file name="ad_xfs_open.c" info="1478973152"/>
+<file name="ad_xfs.h" info="1478973152"/>
+<file name="ad_xfs_read.c" info="1478973152"/>
+<file name="ad_xfs_fcntl.c" info="1478973152"/>
</dir>
<data>
+<fileinfo name="ad_xfs.c">
+</fileinfo>
<fileinfo name="ad_xfs_write.c">
</fileinfo>
-<fileinfo name="ad_xfs_fcntl.c">
+<fileinfo name="ad_xfs_hints.c">
</fileinfo>
-<fileinfo name="ad_xfs_open.c">
+<fileinfo name="ad_xfs_resize.c">
</fileinfo>
-<fileinfo name="ad_xfs.c">
+<fileinfo name="ad_xfs_open.c">
</fileinfo>
<fileinfo name="ad_xfs.h">
</fileinfo>
-<fileinfo name="ad_xfs_resize.c">
-</fileinfo>
-<fileinfo name="ad_xfs_hints.c">
-</fileinfo>
<fileinfo name="ad_xfs_read.c">
</fileinfo>
+<fileinfo name="ad_xfs_fcntl.c">
+</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/ad_xfs/ad_xfs_read.c b/src/mpi/romio/adio/ad_xfs/ad_xfs_read.c
index c3c237c..c893fce 100644
--- a/src/mpi/romio/adio/ad_xfs/ad_xfs_read.c
+++ b/src/mpi/romio/adio/ad_xfs/ad_xfs_read.c
@@ -48,7 +48,7 @@ void ADIOI_XFS_ReadContig(ADIO_File fd, void *buf, int count,
else copy into aligned buf and then use (1) */
else if (offset % fd->d_miniosz) {
diff = fd->d_miniosz - (offset % fd->d_miniosz);
- diff = ADIOI_MIN(diff, len);
+ diff = MPL_MIN(diff, len);
nbytes = pread(fd->fd_sys, buf, diff, offset);
buf = ((char *) buf) + diff;
diff --git a/src/mpi/romio/adio/ad_xfs/ad_xfs_write.c b/src/mpi/romio/adio/ad_xfs/ad_xfs_write.c
index 9ab8276..d0901c5 100644
--- a/src/mpi/romio/adio/ad_xfs/ad_xfs_write.c
+++ b/src/mpi/romio/adio/ad_xfs/ad_xfs_write.c
@@ -52,7 +52,7 @@ void ADIOI_XFS_WriteContig(ADIO_File fd, void *buf, int count,
else copy into aligned buf and then use (1) */
} else if (offset % fd->d_miniosz) {
diff = fd->d_miniosz - (offset % fd->d_miniosz);
- diff = ADIOI_MIN(diff, len);
+ diff = MPL_MIN(diff, len);
err = pwrite(fd->fd_sys, buf, diff, offset);
if (err < 0) {goto leaving;}
diff --git a/src/mpi/romio/adio/ad_zoidfs/.state-cache b/src/mpi/romio/adio/ad_zoidfs/.state-cache
deleted file mode 100644
index e89d198..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/.state-cache
+++ /dev/null
@@ -1,46 +0,0 @@
-<dir>
-<file name="ad_zoidfs_features.c" info="1447123141"/>
-<file name="ad_zoidfs.h" info="1447123141"/>
-<file name="ad_zoidfs_write_list.c" info="1447123141"/>
-<file name="ad_zoidfs_common.c" info="1447123141"/>
-<file name="ad_zoidfs_open.c" info="1447123141"/>
-<file name="ad_zoidfs_flush.c" info="1447123141"/>
-<file name="ad_zoidfs_read_list.c" info="1447123141"/>
-<file name="ad_zoidfs.c" info="1447123141"/>
-<file name="ad_zoidfs_resize.c" info="1447123141"/>
-<file name="ad_zoidfs_io.c" info="1447123141"/>
-<file name="ad_zoidfs_close.c" info="1447123141"/>
-<file name="ad_zoidfs_delete.c" info="1447123141"/>
-<file name="ad_zoidfs_common.h" info="1447123141"/>
-<file name="ad_zoidfs_fcntl.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="ad_zoidfs_features.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs.h">
-</fileinfo>
-<fileinfo name="ad_zoidfs_write_list.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_common.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_open.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_flush.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_read_list.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_resize.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_io.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_close.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_delete.c">
-</fileinfo>
-<fileinfo name="ad_zoidfs_common.h">
-</fileinfo>
-<fileinfo name="ad_zoidfs_fcntl.c">
-</fileinfo>
-</data>
diff --git a/src/mpi/romio/adio/ad_zoidfs/Makefile.mk b/src/mpi/romio/adio/ad_zoidfs/Makefile.mk
deleted file mode 100644
index a26e59c..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/Makefile.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_AD_ZOIDFS
-
-noinst_HEADERS += adio/ad_zoidfs/ad_zoidfs.h adio/ad_zoidfs/ad_zoidfs_common.h
-
-romio_other_sources += \
- adio/ad_zoidfs/ad_zoidfs.c \
- adio/ad_zoidfs/ad_zoidfs_close.c \
- adio/ad_zoidfs/ad_zoidfs_common.c \
- adio/ad_zoidfs/ad_zoidfs_delete.c \
- adio/ad_zoidfs/ad_zoidfs_fcntl.c \
- adio/ad_zoidfs/ad_zoidfs_flush.c \
- adio/ad_zoidfs/ad_zoidfs_io.c \
- adio/ad_zoidfs/ad_zoidfs_open.c \
- adio/ad_zoidfs/ad_zoidfs_resize.c \
- adio/ad_zoidfs/ad_zoidfs_features.c \
- adio/ad_zoidfs/ad_zoidfs_read_list.c \
- adio/ad_zoidfs/ad_zoidfs_write_list.c
-
-endif BUILD_AD_ZOIDFS
-
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.c
deleted file mode 100644
index 3c9131a..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-
-/* adioi.h has the ADIOI_Fns_struct define */
-#include "adioi.h"
-
-struct ADIOI_Fns_struct ADIO_ZOIDFS_operations = {
- ADIOI_ZOIDFS_Open, /* Open */
- ADIOI_SCALEABLE_OpenColl, /* OpenColl */
- ADIOI_ZOIDFS_ReadContig, /* ReadContig */
- ADIOI_ZOIDFS_WriteContig, /* WriteContig */
- ADIOI_GEN_ReadStridedColl, /* ReadStridedColl */
- ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
- ADIOI_GEN_SeekIndividual, /* SeekIndividual */
- ADIOI_ZOIDFS_Fcntl, /* Fcntl */
- ADIOI_GEN_SetInfo, /* SetInfo */
- ADIOI_GEN_ReadStrided, /* ReadStrided */
- ADIOI_ZOIDFS_WriteStrided, /* WriteStrided */
- ADIOI_ZOIDFS_Close, /* Close */
- ADIOI_FAKE_IreadContig, /* IreadContig */
- ADIOI_FAKE_IwriteContig, /* IwriteContig */
- ADIOI_FAKE_IODone, /* ReadDone */
- ADIOI_FAKE_IODone, /* WriteDone */
- ADIOI_FAKE_IOComplete, /* ReadComplete */
- ADIOI_FAKE_IOComplete, /* WriteComplete */
- ADIOI_FAKE_IreadStrided, /* IreadStrided */
- ADIOI_FAKE_IwriteStrided, /* IwriteStrided */
- ADIOI_ZOIDFS_Flush, /* Flush */
- ADIOI_ZOIDFS_Resize, /* Resize */
- ADIOI_ZOIDFS_Delete, /* Delete */
- ADIOI_ZOIDFS_Feature,
- ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
- ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
-};
-
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.h b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.h
deleted file mode 100644
index d4999b6..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#ifndef AD_ZOIDFS_INCLUDE
-#define AD_ZOIDFS_INCLUDE
-
-#include "adio.h"
-#ifdef HAVE_ZOIDFS_H
-#include "zoidfs.h"
-#endif
-
-
-typedef zoidfs_handle_t ADIOI_ZOIDFS_object;
-
-void ADIOI_ZOIDFS_Open(ADIO_File fd, int *error_code);
-void ADIOI_ZOIDFS_Close(ADIO_File fd, int *error_code);
-void ADIOI_ZOIDFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_ZOIDFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_ZOIDFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
- *error_code);
-void ADIOI_ZOIDFS_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_ZOIDFS_ReadStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code);
-void ADIOI_ZOIDFS_Flush(ADIO_File fd, int *error_code);
-void ADIOI_ZOIDFS_Delete(char *filename, int *error_code);
-void ADIOI_ZOIDFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
-void ADIOI_ZOIDFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
-int ADIOI_ZOIDFS_Feature(ADIO_File fd, int flag);
-#endif
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_close.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_close.c
deleted file mode 100644
index 0126783..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_close.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-
-void ADIOI_ZOIDFS_Close(ADIO_File fd, int *error_code)
-{
- ADIOI_Free(fd->fs_ptr);
- fd->fs_ptr = NULL;
-
- /* At some point or another it was decided that ROMIO would not
- * explicitly flush (other than any local cache) on close, because
- * there is no way to *avoid* that overhead if you implement it here
- * and don't actually want it.
- */
-
- *error_code = MPI_SUCCESS;
-}
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.c
deleted file mode 100644
index 018d439..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * Copyright (C) 2003 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-#include "ad_zoidfs_common.h"
-#include <unistd.h>
-#include <sys/types.h>
-
-/* keyval hack to both tell us if we've already initialized zoidfs and also
- * close it down when mpi exits */
-int ADIOI_ZOIDFS_Initialized = MPI_KEYVAL_INVALID;
-
-void ADIOI_ZOIDFS_End(int *error_code)
-{
- int ret;
- static char myname[] = "ADIOI_ZOIDFS_END";
-
- ret = zoidfs_finalize();
-
- /* --BEGIN ERROR HANDLING-- */
- if (ret != 0 ) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(ret),
- "Error in zoidfs_finalize", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
-
- *error_code = MPI_SUCCESS;
-}
-
-int ADIOI_ZOIDFS_End_call(MPI_Comm comm, int keyval,
- void *attribute_val, void *extra_state)
-{
- int error_code;
- ADIOI_ZOIDFS_End(&error_code);
- MPI_Keyval_free(&keyval);
- return error_code;
-}
-
-void ADIOI_ZOIDFS_Init(int rank, int *error_code )
-{
- int ret;
- static char myname[] = "ADIOI_ZOIDFS_INIT";
-
- /* do nothing if we've already fired up the zoidfs interface */
- if (ADIOI_ZOIDFS_Initialized != MPI_KEYVAL_INVALID) {
- *error_code = MPI_SUCCESS;
- return;
- }
-
- ret = zoidfs_init();
- if (ret < 0 ) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(ret),
- "Error in zoidfs_init",
- 0);
- return;
- }
-
- MPI_Keyval_create(MPI_NULL_COPY_FN, ADIOI_ZOIDFS_End_call,
- &ADIOI_ZOIDFS_Initialized, (void *)0);
- /* just like romio does, we make a dummy attribute so we
- * get cleaned up */
- MPI_Attr_put(MPI_COMM_SELF, ADIOI_ZOIDFS_Initialized, (void *)0);
-}
-
-void ADIOI_ZOIDFS_makeattribs(zoidfs_sattr_t * attribs)
-{
- memset(attribs, 0, sizeof(zoidfs_sattr_t));
-
- attribs->mask = ZOIDFS_ATTR_MODE;
- attribs->mode = 0644;
-}
-
-int ADIOI_ZOIDFS_error_convert(int error)
-{
- switch (error)
- {
- case ZFSERR_PERM: /* ??? */
- case ZFSERR_ACCES:
- return MPI_ERR_ACCESS;
- case ZFSERR_NOENT:
- case ZFSERR_NXIO: /* ??? */
- case ZFSERR_NODEV: /* ??? */
- return MPI_ERR_NO_SUCH_FILE;
- case ZFSERR_IO:
- return MPI_ERR_IO;
- case ZFSERR_EXIST:
- return MPI_ERR_FILE_EXISTS;
- case ZFSERR_NOTDIR: /* ??? */
- case ZFSERR_ISDIR: /* ??? */
- case ZFSERR_NAMETOOLONG:
- return MPI_ERR_BAD_FILE;
- case ZFSERR_INVAL:
- case ZFSERR_STALE:
- return MPI_ERR_FILE;
- case ZFSERR_FBIG: /* ??? */
- case ZFSERR_NOSPC:
- return MPI_ERR_NO_SPACE;
- case ZFSERR_ROFS:
- return MPI_ERR_READ_ONLY;
- case ZFSERR_NOTIMPL:
- return MPI_ERR_UNSUPPORTED_OPERATION;
- case ZFSERR_DQUOT:
- return MPI_ERR_QUOTA;
- /* case ZFSERR_NOTEMPTY: */
- /* case ZFSERR_WFLUSH: */
- /* case ZFSERR_OTHER: */
- case ZFSERR_NOMEM:
- return MPI_ERR_INTERN;
- default:
- return MPI_UNDEFINED;
- }
-}
-
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.h b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.h
deleted file mode 100644
index ba985b4..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
- * vim: ts=8 sts=4 sw=4 noexpandtab
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#ifndef _AD_ZOIDFS_COMMON_H
-#define _AD_ZOIDFS_COMMON_H
-#include "ad_zoidfs.h"
-
-/* The ESTALE problem:
- * The IO forwarding protocol can respond to any call with ESTALE, which means
- * the handle upon which that call operates has expired from the metadata
- * cache. We thus wrap any zoidfs routine (expr) in this macro.
- *
- * ROMIO stores the filename in the ADIOI_File structrue (fd), so we can always
- * re-lookup in response to ESTALE */
-
-#define NO_STALE(ret, fd, handle_p, expr) \
- do { \
- (ret) = (expr); \
- while ((ret) == ZFSERR_STALE) { \
- /* lookup again */ \
- (ret) = zoidfs_lookup(NULL, NULL, (fd)->filename, \
- (zoidfs_handle_t*)((fd)->fs_ptr), ZOIDFS_NO_OP_HINT); \
- if ((ret) == ZFS_OK) { \
- *((ADIOI_ZOIDFS_object*)handle_p) \
- = *((ADIOI_ZOIDFS_object*)((fd)->fs_ptr)); \
- /* re-execute the expr with new handle */ \
- (ret) = (expr); \
- } \
- } \
- } while (0)
-
-void ADIOI_ZOIDFS_Init(int rank, int *error_code );
-void ADIOI_ZOIDFS_makeattribs(zoidfs_sattr_t * attribs);
-void ADIOI_ZOIDFS_End(int *error_code);
-int ADIOI_ZOIDFS_End_call(MPI_Comm comm, int keyval,
- void *attribute_val, void *extra_state);
-int ADIOI_ZOIDFS_error_convert(int error);
-
-#endif
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_delete.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_delete.c
deleted file mode 100644
index 8719314..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_delete.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 2003 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-#include "adio.h"
-
-#include "ad_zoidfs_common.h"
-
-void ADIOI_ZOIDFS_Delete(char *filename, int *error_code)
-{
- int ret;
- static char myname[] = "ADIOI_ZOIDFS_DELETE";
-
- ADIOI_ZOIDFS_Init(0, error_code);
- /* --BEGIN ERROR HANDLING-- */
- if (*error_code != MPI_SUCCESS)
- {
- /* ADIOI_ZOIDFS_INIT handles creating error codes itself */
- return;
- }
- /* --END ERROR HANDLING-- */
-
- ret = zoidfs_remove(NULL, NULL, filename, NULL, ZOIDFS_NO_OP_HINT);
- /* --BEGIN ERROR HANDLING-- */
- if (ret != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(ret),
- "Error in zoidfs_remove", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
-
- *error_code = MPI_SUCCESS;
- return;
-}
-
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_fcntl.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_fcntl.c
deleted file mode 100644
index 22c2671..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_fcntl.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-#include "adio_extern.h"
-#include "ad_zoidfs_common.h"
-
-void ADIOI_ZOIDFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
- int *error_code)
-{
- int ret;
- zoidfs_attr_t attr;
- ADIOI_ZOIDFS_object *zoidfs_obj_ptr;
- static char myname[] = "ADIOI_ZOIDFS_FCNTL";
-
- zoidfs_obj_ptr = (ADIOI_ZOIDFS_object*)fd->fs_ptr;
-
- switch(flag) {
- case ADIO_FCNTL_GET_FSIZE:
- attr.mask = ZOIDFS_ATTR_SIZE;
- NO_STALE(ret, fd, zoidfs_obj_ptr,
- zoidfs_getattr(zoidfs_obj_ptr, &attr, ZOIDFS_NO_OP_HINT));
- if ( !(attr.mask & ZOIDFS_ATTR_SIZE) || (ret != ZFS_OK ) ) {
- /* --BEGIN ERROR HANDLING-- */
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(ret),
- "Error in zoidfs_getattr", 0);
- /* --END ERROR HANDLING-- */
- }
- else {
- *error_code = MPI_SUCCESS;
- }
- fcntl_struct->fsize = attr.size;
- return;
-
- case ADIO_FCNTL_SET_DISKSPACE:
- ADIOI_GEN_Prealloc(fd, fcntl_struct->diskspace, error_code);
- break;
-
- /* --BEGIN ERROR HANDLING-- */
- case ADIO_FCNTL_SET_ATOMICITY:
- default:
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_ARG,
- "**flag", "**flag %d", flag);
- /* --END ERROR HANDLING-- */
- }
-}
-
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_features.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_features.c
deleted file mode 100644
index a3f5c14..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_features.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2008 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#include "adio.h"
-#include "ad_zoidfs.h"
-
-int ADIOI_ZOIDFS_Feature(ADIO_File fd, int flag)
-{
- switch(flag) {
- case ADIO_SCALABLE_OPEN:
- return 1;
- case ADIO_SHARED_FP:
- case ADIO_LOCKS:
- case ADIO_SEQUENTIAL:
- case ADIO_DATA_SIEVING_WRITES:
- default:
- return 0;
- }
-}
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_flush.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_flush.c
deleted file mode 100644
index 8ec0b8d..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_flush.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-#include "ad_zoidfs_common.h"
-
-/* we want to be a bit clever here: at scale, if every client sends a
- * flush request, it will stress the file system with redundant
- * commit requests. Instead, one process should wait for
- * everyone to catch up, do the sync, then broadcast the result.
- */
-
-void ADIOI_ZOIDFS_Flush(ADIO_File fd, int *error_code)
-{
- int ret, rank, dummy=0, dummy_in=0;
- ADIOI_ZOIDFS_object *zoidfs_obj_ptr;
- static char myname[] = "ADIOI_ZOIDFS_FLUSH";
-
- *error_code = MPI_SUCCESS;
-
- zoidfs_obj_ptr = (ADIOI_ZOIDFS_object*)fd->fs_ptr;
-
- MPI_Comm_rank(fd->comm, &rank);
-
- /* collective call to ensure no outstanding write requests. reduce is
- * slightly less expensvie than barrier */
- MPI_Reduce(&dummy_in, &dummy, 1, MPI_INT, MPI_SUM,
- fd->hints->ranklist[0], fd->comm);
-
- if (rank == fd->hints->ranklist[0]) {
- ret = zoidfs_commit(zoidfs_obj_ptr, ZOIDFS_NO_OP_HINT);
- }
- MPI_Bcast(&ret, 1, MPI_INT, fd->hints->ranklist[0], fd->comm);
-
- /* --BEGIN ERROR HANDLING-- */
- if (ret != 0) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(ret),
- "Error in zoidfs_commit", 0);
- }
- /* --END ERROR HANDLING-- */
-}
-
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_io.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_io.c
deleted file mode 100644
index 337c92f..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_io.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "adio.h"
-#include "adio_extern.h"
-#include "ad_zoidfs.h"
-
-#include "ad_zoidfs_common.h"
-
-#define ZOIDFS_READ 0
-#define ZOIDFS_WRITE 1
-
-static void ZOIDFS_IOContig(ADIO_File fd, void * buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int flag, int *error_code)
-{
- int ret;
- MPI_Count datatype_size;
- uint64_t file_len;
- size_t mem_len;
- ADIOI_ZOIDFS_object *zoidfs_obj_ptr;
- uint64_t file_offset = offset;
- static char myname[] = "ADIOI_ZOIDFS_IOCONTIG";
-
- zoidfs_obj_ptr = (ADIOI_ZOIDFS_object*)fd->fs_ptr;
-
- MPI_Type_size_x(datatype, &datatype_size);
- file_len = mem_len = datatype_size * count;
-
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- file_offset = fd->fp_ind;
- }
-
- if (flag == ZOIDFS_READ) {
- NO_STALE(ret, fd, zoidfs_obj_ptr,
- zoidfs_read(zoidfs_obj_ptr,
- 1, &buf, &mem_len,
- 1, &file_offset, &file_len, ZOIDFS_NO_OP_HINT));
- } else {
- NO_STALE(ret, fd, zoidfs_obj_ptr,
- zoidfs_write(zoidfs_obj_ptr,
- 1, (const void **)&buf, &mem_len,
- 1, &file_offset, &file_len, ZOIDFS_NO_OP_HINT));
- }
- /* --BEGIN ERROR HANDLING-- */
- if (ret != ZFS_OK ) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(ret),
- "Error in ZOIDFS I/O", 0);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- fd->fp_ind += file_len;
- }
- fd->fp_sys_posn = file_offset + file_len;
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, file_len);
-#endif
-
- *error_code = MPI_SUCCESS;
-
-fn_exit:
- return;
-}
-
-void ADIOI_ZOIDFS_ReadContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
- ZOIDFS_IOContig(fd, buf, count, datatype, file_ptr_type,
- offset, status, ZOIDFS_READ, error_code);
-}
-
-void ADIOI_ZOIDFS_WriteContig(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
- ZOIDFS_IOContig(fd, buf, count, datatype, file_ptr_type,
- offset, status, ZOIDFS_WRITE, error_code);
-}
-
-
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_open.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_open.c
deleted file mode 100644
index 55fb950..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_open.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
- * vim: ts=8 sts=4 sw=4 noexpandtab
- *
- * Copyright (C) 2007 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-#include "ad_zoidfs_common.h"
-
-/* open_status is helpful for bcasting values around */
-struct open_status_s {
- int error;
- zoidfs_handle_t handle;
-};
-typedef struct open_status_s open_status;
-
-static void fake_an_open(char *fname, int access_mode,
- int nr_datafiles, MPI_Offset strip_size,
- ADIOI_ZOIDFS_object *zoidfs_ptr,
- open_status *o_status)
-{
- int ret, created;
- zoidfs_sattr_t attribs;
- zoidfs_handle_t handle;
-
- ADIOI_ZOIDFS_makeattribs(&attribs);
-
- /* zoidfs_create succeeds even if a file already exists, so we can do
- * our job with fewer calls than in other cases. However, we need to
- * be careful with ADIO_EXCL.
- */
- if (access_mode & ADIO_CREATE) {
- ret = zoidfs_create(NULL, NULL,
- fname, &attribs, &handle, &created, ZOIDFS_NO_OP_HINT);
- if ((ret == ZFS_OK) && !created && (access_mode & ADIO_EXCL)) {
- /* lookup should not succeed if opened with EXCL */
- o_status->error = ZFSERR_EXIST;
- return;
- }
- }
- else {
- ret = zoidfs_lookup(NULL, NULL, fname, &handle, ZOIDFS_NO_OP_HINT);
- }
-
- o_status->error = ret;
- o_status->handle = handle;
- return;
-}
-
-
-/* ADIOI_ZOIDFS_Open:
- * one process opens (or creates) the file, then broadcasts the result to the
- * remaining processors.
- *
- * ADIO_Open used to perform an optimization when MPI_MODE_CREATE (and before
- * that, MPI_MODE_EXCL) was set. Because ZoidFS handles file lookup and
- * creation more scalably than traditional file systems, ADIO_Open now skips any
- * special handling when CREATE is set. */
-void ADIOI_ZOIDFS_Open(ADIO_File fd, int *error_code)
-{
- int rank;
- static char myname[] = "ADIOI_ZOIDFS_OPEN";
- ADIOI_ZOIDFS_object *zoidfs_obj_ptr;
-
- /* since one process is doing the open, that means one process is also
- * doing the error checking. define a struct for both the object reference
- * and the error code to broadcast to all the processors */
-
- open_status o_status;
- MPI_Datatype open_status_type;
- MPI_Datatype types[2] = {MPI_INT, MPI_BYTE};
- int lens[2] = {1, sizeof(ADIOI_ZOIDFS_object)};
- MPI_Aint offsets[2];
-
- memset(&o_status, 0, sizeof(o_status));
- zoidfs_obj_ptr = (ADIOI_ZOIDFS_object *)
- ADIOI_Malloc(sizeof(ADIOI_ZOIDFS_object));
- /* --BEGIN ERROR HANDLING-- */
- if (zoidfs_obj_ptr == NULL) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_UNKNOWN,
- "Error allocating memory", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
-
- MPI_Comm_rank(fd->comm, &rank);
-
- ADIOI_ZOIDFS_Init(rank, error_code);
- if (*error_code != MPI_SUCCESS)
- {
- /* ADIOI_ZOIDFS_INIT handles creating error codes on its own */
- ADIOI_Free(zoidfs_obj_ptr);
- return;
- }
-
- /* one process resolves name and will later bcast to others */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_open_a, 0, NULL );
-#endif
- if (rank == fd->hints->ranklist[0] && fd->fs_ptr == NULL) {
- fake_an_open(fd->filename, fd->access_mode,
- fd->hints->striping_factor,
- fd->hints->striping_unit,
- zoidfs_obj_ptr, &o_status);
- /* store credentials and object reference in fd */
- *zoidfs_obj_ptr = o_status.handle;
- fd->fs_ptr = zoidfs_obj_ptr;
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_open_b, 0, NULL );
-#endif
-
- /* broadcast status and (possibly valid) object reference */
- MPI_Address(&o_status.error, &offsets[0]);
- MPI_Address(&o_status.handle, &offsets[1]);
-
- MPI_Type_struct(2, lens, offsets, types, &open_status_type);
- MPI_Type_commit(&open_status_type);
-
- /* Assertion: if we hit this Bcast, then all processes collectively
- * called this open.
- *
- * That's because deferred open never happens with this fs.
- */
- MPI_Bcast(MPI_BOTTOM, 1, open_status_type, fd->hints->ranklist[0],
- fd->comm);
- MPI_Type_free(&open_status_type);
-
- /* --BEGIN ERROR HANDLING-- */
- if (o_status.error != ZFS_OK)
- {
- ADIOI_Free(zoidfs_obj_ptr);
- fd->fs_ptr = NULL;
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(o_status.error),
- "Unknown error", 0);
- /* TODO: FIX STRING */
- return;
- }
- /* --END ERROR HANDLING-- */
-
- *zoidfs_obj_ptr = o_status.handle;
- fd->fs_ptr = zoidfs_obj_ptr;
-
- *error_code = MPI_SUCCESS;
- return;
-}
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_read_list.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_read_list.c
deleted file mode 100644
index 3541072..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_read_list.c
+++ /dev/null
@@ -1,826 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
- * vim: ts=8 sts=4 sw=4 noexpandtab
- *
- * Copyright (C) 2008 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "adio.h"
-#include "adio_extern.h"
-#include "ad_zoidfs.h"
-
-#include "ad_zoidfs_common.h"
-
-/* Copied from ADIOI_PVFS2_OldReadStrided. It would be good to have fewer
- * copies of this code... */
-void ADIOI_ZOIDFS_ReadStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status, int
- *error_code)
-{
- /* offset is in units of etype relative to the filetype. */
- ADIOI_Flatlist_node *flat_buf, *flat_file;
- int i, j, k, brd_size, frd_size=0, st_index=0;
- int sum, n_etypes_in_filetype, size_in_filetype;
- MPI_Count bufsize;
- int n_filetypes, etype_in_filetype;
- ADIO_Offset abs_off_in_filetype=0;
- MPI_Count filetype_size, etype_size, buftype_size;
- MPI_Aint filetype_extent, buftype_extent;
- int buf_count, buftype_is_contig, filetype_is_contig;
- ADIO_Offset off, disp, start_off, initial_off;
- int flag, st_frd_size, st_n_filetypes;
-
- size_t mem_list_count, file_list_count;
- void ** mem_offsets;
- uint64_t *file_offsets;
- size_t *mem_lengths;
- uint64_t *file_lengths;
- int total_blks_to_read;
-
- int max_mem_list, max_file_list;
-
- int b_blks_read;
- int f_data_read;
- int size_read=0, n_read_lists, extra_blks;
-
- int end_brd_size, end_frd_size;
- int start_k, start_j, new_file_read, new_buffer_read;
- int start_mem_offset;
- ADIOI_ZOIDFS_object * zoidfs_obj_ptr;
- int err_flag=0;
- MPI_Offset total_bytes_read = 0;
- static char myname[] = "ADIOI_ZOIDFS_ReadStrided";
-
- /* note: I don't know what zoidfs will do if you pass it a super-long list,
- * so let's keep with the PVFS limit for now */
-#define MAX_ARRAY_SIZE 64
-
- *error_code = MPI_SUCCESS; /* changed below if error */
-
- ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
- ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
-
- /* the HDF5 tests showed a bug in this list processing code (see many many
- * lines down below). We added a workaround, but common HDF5 file types
- * are actually contiguous and do not need the expensive workarond */
- if (!filetype_is_contig) {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
- if (flat_file->count == 1 && !buftype_is_contig)
- filetype_is_contig = 1;
- }
-
- MPI_Type_size_x(fd->filetype, &filetype_size);
- if ( ! filetype_size ) {
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, 0);
-#endif
- *error_code = MPI_SUCCESS;
- return;
- }
-
- MPI_Type_extent(fd->filetype, &filetype_extent);
- MPI_Type_size_x(datatype, &buftype_size);
- MPI_Type_extent(datatype, &buftype_extent);
- etype_size = fd->etype_size;
-
- bufsize = buftype_size * count;
-
- zoidfs_obj_ptr = (ADIOI_ZOIDFS_object *)fd->fs_ptr;
-
- if (!buftype_is_contig && filetype_is_contig) {
-
-/* noncontiguous in memory, contiguous in file. */
- uint64_t file_offsets;
- uint64_t file_lengths;
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
- fd->disp + etype_size * offset;
-
- file_list_count = 1;
- file_offsets = off;
- file_lengths = 0;
- total_blks_to_read = count*flat_buf->count;
- b_blks_read = 0;
-
- /* allocate arrays according to max usage */
- if (total_blks_to_read > MAX_ARRAY_SIZE)
- mem_list_count = MAX_ARRAY_SIZE;
- else mem_list_count = total_blks_to_read;
- mem_offsets = (void*)ADIOI_Malloc(mem_list_count*sizeof(void*));
- mem_lengths = (size_t*)ADIOI_Malloc(mem_list_count*sizeof(size_t));
-
- /* TODO: CHECK RESULTS OF MEMORY ALLOCATION */
-
- j = 0;
- /* step through each block in memory, filling memory arrays */
- while (b_blks_read < total_blks_to_read) {
- for (i=0; i<flat_buf->count; i++) {
- mem_offsets[b_blks_read % MAX_ARRAY_SIZE] =
- buf + j*buftype_extent + flat_buf->indices[i];
- mem_lengths[b_blks_read % MAX_ARRAY_SIZE] =
- flat_buf->blocklens[i];
- file_lengths += flat_buf->blocklens[i];
- b_blks_read++;
- if (!(b_blks_read % MAX_ARRAY_SIZE) ||
- (b_blks_read == total_blks_to_read)) {
-
- /* in the case of the last read list call,
- adjust mem_list_count */
- if (b_blks_read == total_blks_to_read) {
- mem_list_count = total_blks_to_read % MAX_ARRAY_SIZE;
- /* in case last read list call fills max arrays */
- if (!mem_list_count) mem_list_count = MAX_ARRAY_SIZE;
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_read(zoidfs_obj_ptr,
- mem_list_count,
- mem_offsets, mem_lengths,
- 1, &file_offsets, &file_lengths, ZOIDFS_NO_OP_HINT));
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
-#endif
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_read", 0);
- goto error_state;
- }
- total_bytes_read += file_lengths;
- /* --END ERROR HANDLING-- */
-
- /* in the case of error or the last read list call,
- * leave here */
- if (err_flag || b_blks_read == total_blks_to_read) break;
-
- file_offsets += file_lengths;
- file_lengths = 0;
- }
- } /* for (i=0; i<flat_buf->count; i++) */
- j++;
- } /* while (b_blks_read < total_blks_to_read) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
-
- if (file_ptr_type == ADIO_INDIVIDUAL)
- fd->fp_ind += total_bytes_read;
-
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
- /* This isa temporary way of filling in status. The right way is to
- keep tracke of how much data was actually read adn placed in buf
- by ADIOI_BUFFERED_READ. */
-#endif
- ADIOI_Delete_flattened(datatype);
-
- return;
- } /* if (!buftype_is_contig && filetype_is_contig) */
-
- /* know file is noncontiguous from above */
- /* noncontiguous in file */
-
- /* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
-
- disp = fd->disp;
- initial_off = offset;
-
-
- /* for each case - ADIO_Individual pointer or explicit, find the file
- offset in bytes (offset), n_filetypes (how many filetypes into
- file to start), frd_size (remaining amount of data in present
- file block), and st_index (start point in terms of blocks in
- starting filetype) */
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- offset = fd->fp_ind; /* in bytes */
- n_filetypes = -1;
- flag = 0;
- while (!flag) {
- n_filetypes++;
- for (i=0; i<flat_file->count; i++) {
- if (disp + flat_file->indices[i] +
- ((ADIO_Offset) n_filetypes)*filetype_extent +
- flat_file->blocklens[i] >= offset) {
- st_index = i;
- frd_size = disp + flat_file->indices[i] +
- ((ADIO_Offset) n_filetypes)*filetype_extent
- + flat_file->blocklens[i] - offset;
- flag = 1;
- break;
- }
- }
- } /* while (!flag) */
- } /* if (file_ptr_type == ADIO_INDIVIDUAL) */
- else {
- n_etypes_in_filetype = filetype_size/etype_size;
- n_filetypes = (int) (offset / n_etypes_in_filetype);
- etype_in_filetype = (int) (offset % n_etypes_in_filetype);
- size_in_filetype = etype_in_filetype * etype_size;
-
- sum = 0;
- for (i=0; i<flat_file->count; i++) {
- sum += flat_file->blocklens[i];
- if (sum > size_in_filetype) {
- st_index = i;
- frd_size = sum - size_in_filetype;
- abs_off_in_filetype = flat_file->indices[i] +
- size_in_filetype - (sum - flat_file->blocklens[i]);
- break;
- }
- }
-
- /* abs. offset in bytes in the file */
- offset = disp + ((ADIO_Offset) n_filetypes)*filetype_extent +
- abs_off_in_filetype;
- } /* else [file_ptr_type != ADIO_INDIVIDUAL] */
-
- start_off = offset;
- st_frd_size = frd_size;
- st_n_filetypes = n_filetypes;
-
- if (buftype_is_contig && !filetype_is_contig) {
-
-/* contiguous in memory, noncontiguous in file. should be the most
- common case. */
-
- /* only one memory off-len pair, so no array here */
- size_t mem_lengths;
- size_t mem_offsets;
-
- i = 0;
- j = st_index;
- n_filetypes = st_n_filetypes;
-
- mem_list_count = 1;
-
- /* determine how many blocks in file to read */
- f_data_read = ADIOI_MIN(st_frd_size, bufsize);
- total_blks_to_read = 1;
- if (j < (flat_file->count-1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- while (f_data_read < bufsize) {
- f_data_read += flat_file->blocklens[j];
- total_blks_to_read++;
- if (j<(flat_file->count-1)) j++;
- else j = 0;
- }
-
- j = st_index;
- n_filetypes = st_n_filetypes;
- n_read_lists = total_blks_to_read/MAX_ARRAY_SIZE;
- extra_blks = total_blks_to_read%MAX_ARRAY_SIZE;
-
- mem_offsets = (size_t)buf;
- mem_lengths = 0;
-
- /* if at least one full readlist, allocate file arrays
- at max array size and don't free until very end */
- if (n_read_lists) {
- file_offsets = (int64_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(int64_t));
- file_lengths = (uint64_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(uint64_t));
- }
- /* if there's no full readlist allocate file arrays according
- to needed size (extra_blks) */
- else {
- file_offsets = (int64_t*)ADIOI_Malloc(extra_blks*
- sizeof(int64_t));
- file_lengths = (uint64_t*)ADIOI_Malloc(extra_blks*
- sizeof(uint64_t));
- }
-
- /* for file arrays that are of MAX_ARRAY_SIZE, build arrays */
- for (i=0; i<n_read_lists; i++) {
- file_list_count = MAX_ARRAY_SIZE;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = st_frd_size;
- mem_lengths = st_frd_size;
- }
- for (k=0; k<MAX_ARRAY_SIZE; k++) {
- if (i || k) {
- file_offsets[k] = disp +
- ((ADIO_Offset)n_filetypes)*filetype_extent
- + flat_file->indices[j];
- file_lengths[k] = flat_file->blocklens[j];
- mem_lengths += file_lengths[k];
- }
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<MAX_ARRAY_SIZE; k++) */
- /* --END ERROR HANDLING-- */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_read(zoidfs_obj_ptr,
- 1, buf, &mem_lengths,
- file_list_count,
- file_offsets, file_lengths, ZOIDFS_NO_OP_HINT));
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
-#endif
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_read", 0);
- goto error_state;
- }
- /* --END ERROR HANDING-- */
- total_bytes_read += mem_lengths;
-
- mem_offsets += mem_lengths;
- mem_lengths = 0;
- } /* for (i=0; i<n_read_lists; i++) */
-
- /* for file arrays smaller than MAX_ARRAY_SIZE (last read_list call) */
- if (extra_blks) {
- file_list_count = extra_blks;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = ADIOI_MIN(st_frd_size, bufsize);
- }
- for (k=0; k<extra_blks; k++) {
- if(i || k) {
- file_offsets[k] = disp +
- ((ADIO_Offset)n_filetypes)*filetype_extent +
- flat_file->indices[j];
- if (k == (extra_blks - 1)) {
- file_lengths[k] = bufsize - mem_lengths
- - mem_offsets + (size_t)buf;
- }
- else file_lengths[k] = flat_file->blocklens[j];
- } /* if(i || k) */
- mem_lengths += file_lengths[k];
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<extra_blks; k++) */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_read(zoidfs_obj_ptr, 1,
- (void **)&mem_offsets,
- &mem_lengths,
- file_list_count,
- file_offsets, file_lengths, ZOIDFS_NO_OP_HINT));
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
-#endif
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != 0) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_read", 0);
- goto error_state;
- }
- /* --END ERROR HANDLING-- */
- total_bytes_read += mem_lengths;
- }
- }
- else {
-/* noncontiguous in memory as well as in file */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- size_read = 0;
- n_filetypes = st_n_filetypes;
- frd_size = st_frd_size;
- brd_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
- max_mem_list = 0;
- max_file_list = 0;
-
- /* run through and file max_file_list and max_mem_list so that you
- can allocate the file and memory arrays less than MAX_ARRAY_SIZE
- if possible */
-
- while (size_read < bufsize) {
- k = start_k;
- new_buffer_read = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data read and data to be
- read in the next immediate read list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k] +
- size_read) > bufsize) {
- end_brd_size = new_buffer_read +
- flat_buf->blocklens[k] - (bufsize - size_read);
- new_buffer_read = bufsize - size_read;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- else new_buffer_read = brd_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
- j = start_j;
- new_file_read = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_read < new_buffer_read)) {
- if(file_list_count) {
- if((new_file_read + flat_file->blocklens[j]) >
- new_buffer_read) {
- end_frd_size = new_buffer_read - new_file_read;
- new_file_read = new_buffer_read;
- j--;
- }
- else {
- new_file_read += flat_file->blocklens[j];
- end_frd_size = flat_file->blocklens[j];
- }
- }
- else {
- if (frd_size > new_buffer_read) {
- new_file_read = new_buffer_read;
- frd_size = new_file_read;
- }
- else new_file_read = frd_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_read < new_buffer_read) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_read = 0;
- mem_list_count = 0;
- while (new_buffer_read < new_file_read) {
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k]) >
- new_file_read) {
- end_brd_size = new_file_read - new_buffer_read;
- new_buffer_read = new_file_read;
- k--;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_read = brd_size;
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_read < new_file_read) */
- } /* if ((new_file_read < new_buffer_read) && (file_list_count
- == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
-
- /* fakes filling the readlist arrays of lengths found above */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- if(i) {
- if (i == (mem_list_count - 1)) {
- if (flat_buf->blocklens[k] == end_brd_size)
- brd_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- brd_size = flat_buf->blocklens[k] - end_brd_size;
- k--;
- buf_count--;
- }
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- if (i) {
- if (i == (file_list_count - 1)) {
- if (flat_file->blocklens[j] == end_frd_size)
- frd_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- frd_size = flat_file->blocklens[j] - end_frd_size;
- j--;
- }
- }
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
- size_read += new_buffer_read;
- start_k = k;
- start_j = j;
- if (max_mem_list < mem_list_count)
- max_mem_list = mem_list_count;
- if (max_file_list < file_list_count)
- max_file_list = file_list_count;
- } /* while (size_read < bufsize) */
-
- /* one last check before we actually carry out the operation:
- * this code has hard-to-fix bugs when a noncontiguous file type has
- * such large pieces that the sum of the lengths of the memory type is
- * not larger than one of those pieces (and vice versa for large memory
- * types and many pices of file types. In these cases, give up and
- * fall back to naive reads and writes. The testphdf5 test created a
- * type with two very large memory regions and 600 very small file
- * regions. The same test also created a type with one very large file
- * region and many (700) very small memory regions. both cases caused
- * problems for this code */
-
- if ( ( (file_list_count == 1) &&
- (new_file_read < flat_file->blocklens[0] ) ) ||
- ((mem_list_count == 1) &&
- (new_buffer_read < flat_buf->blocklens[0]) ) ||
- ((file_list_count == MAX_ARRAY_SIZE) &&
- (new_file_read < flat_buf->blocklens[0]) ) ||
- ( (mem_list_count == MAX_ARRAY_SIZE) &&
- (new_buffer_read < flat_file->blocklens[0])) )
- {
-
- ADIOI_Delete_flattened(datatype);
- ADIOI_GEN_ReadStrided_naive(fd, buf, count, datatype,
- file_ptr_type, initial_off, status, error_code);
- return;
- }
-
- mem_offsets = (void *)ADIOI_Malloc(max_mem_list*sizeof(void *));
- mem_lengths = (size_t*)ADIOI_Malloc(max_mem_list*sizeof(size_t));
- file_offsets = (uint64_t *)ADIOI_Malloc(max_file_list*sizeof(uint64_t));
- file_lengths = (uint64_t *)ADIOI_Malloc(max_file_list*sizeof(uint64_t));
-
- size_read = 0;
- n_filetypes = st_n_filetypes;
- frd_size = st_frd_size;
- brd_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
-
- /* this section calculates mem_list_count and file_list_count
- and also finds the possibly odd sized last array elements
- in new_frd_size and new_brd_size */
-
- while (size_read < bufsize) {
- k = start_k;
- new_buffer_read = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data read and data to be
- read in the next immediate read list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k] +
- size_read) > bufsize) {
- end_brd_size = new_buffer_read +
- flat_buf->blocklens[k] - (bufsize - size_read);
- new_buffer_read = bufsize - size_read;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- else new_buffer_read = brd_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
- j = start_j;
- new_file_read = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_read < new_buffer_read)) {
- if(file_list_count) {
- if((new_file_read + flat_file->blocklens[j]) >
- new_buffer_read) {
- end_frd_size = new_buffer_read - new_file_read;
- new_file_read = new_buffer_read;
- j--;
- }
- else {
- new_file_read += flat_file->blocklens[j];
- end_frd_size = flat_file->blocklens[j];
- }
- }
- else {
- if (frd_size > new_buffer_read) {
- new_file_read = new_buffer_read;
- frd_size = new_file_read;
- }
- else new_file_read = frd_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_read < new_buffer_read) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_read = 0;
- mem_list_count = 0;
- while (new_buffer_read < new_file_read) {
- if(mem_list_count) {
- if((new_buffer_read + flat_buf->blocklens[k]) >
- new_file_read) {
- end_brd_size = new_file_read - new_buffer_read;
- new_buffer_read = new_file_read;
- k--;
- }
- else {
- new_buffer_read += flat_buf->blocklens[k];
- end_brd_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_read = brd_size;
- if (brd_size > (bufsize - size_read)) {
- new_buffer_read = bufsize - size_read;
- brd_size = new_buffer_read;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_read < new_file_read) */
- } /* if ((new_file_read < new_buffer_read) && (file_list_count
- == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_read < bufsize-size_read)) */
-
- /* fills the allocated readlist arrays */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- mem_offsets[i] = buf +
- buftype_extent* (buf_count/flat_buf->count) +
- flat_buf->indices[k];
- if(!i) {
- mem_lengths[0] = brd_size;
- mem_offsets[0] += flat_buf->blocklens[k] - brd_size;
- }
- else {
- if (i == (mem_list_count - 1)) {
- mem_lengths[i] = end_brd_size;
- if (flat_buf->blocklens[k] == end_brd_size)
- brd_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- brd_size = flat_buf->blocklens[k] - end_brd_size;
- k--;
- buf_count--;
- }
- }
- else {
- mem_lengths[i] = flat_buf->blocklens[k];
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- file_offsets[i] = disp + flat_file->indices[j] +
- ((ADIO_Offset)n_filetypes) * filetype_extent;
- if (!i) {
- file_lengths[0] = frd_size;
- file_offsets[0] += flat_file->blocklens[j] - frd_size;
- }
- else {
- if (i == (file_list_count - 1)) {
- file_lengths[i] = end_frd_size;
- if (flat_file->blocklens[j] == end_frd_size)
- frd_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- frd_size = flat_file->blocklens[j] - end_frd_size;
- j--;
- }
- }
- else file_lengths[i] = flat_file->blocklens[j];
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
-
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_read(zoidfs_obj_ptr,
- mem_list_count, mem_offsets, mem_lengths,
- file_list_count,
- file_offsets, file_lengths, ZOIDFS_NO_OP_HINT));
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
-#endif
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_read", 0);
- }
- /* --END ERROR HANDLING-- */
- size_read += new_buffer_read;
- total_bytes_read += new_buffer_read; /* XXX: is this right? */
- start_k = k;
- start_j = j;
- } /* while (size_read < bufsize) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
- }
- /* Other ADIO routines will convert absolute bytes into counts of datatypes */
- /* when incrementing fp_ind, need to also take into account the file type:
- * consider an N-element 1-d subarray with a lb and ub: ( |---xxxxx-----|
- * if we wrote N elements, offset needs to point at beginning of type, not
- * at empty region at offset N+1)
- *
- * As we discussed on mpich-discuss in may/june 2009, the code below might
- * look wierd, but by putting fp_ind at the last byte written, the next
- * time we run through the strided code we'll update the fp_ind to the
- * right location. */
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- fd->fp_ind = file_offsets[file_list_count-1]+
- file_lengths[file_list_count-1];
- }
-
- ADIOI_Free(file_offsets);
- ADIOI_Free(file_lengths);
-
- if (err_flag == 0) *error_code = MPI_SUCCESS;
-
-error_state:
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
- /* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually read and placed in buf
- by ADIOI_BUFFERED_READ. */
-#endif
-
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
-}
-
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_resize.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_resize.c
deleted file mode 100644
index 60d2fca..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_resize.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "ad_zoidfs.h"
-#include "ad_zoidfs_common.h"
-
-/* as with flush, implement the resize operation in a scalable
- * manner. one process does the work, then broadcasts the result to everyone
- * else. fortunately, this operation is defined to be collective */
-void ADIOI_ZOIDFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
-{
- int ret, rank;
- ADIOI_ZOIDFS_object *zoidfs_obj_ptr;
- static char myname[] = "ADIOI_ZOIDFS_RESIZE";
-
- *error_code = MPI_SUCCESS;
-
- zoidfs_obj_ptr = (ADIOI_ZOIDFS_object *)fd->fs_ptr;
-
- MPI_Comm_rank(fd->comm, &rank);
-
-
- /* MPI-IO semantics treat conflicting MPI_File_set_size requests the
- * same as conflicting write requests. Thus, a resize from one
- * process does not have to be visible to the other processes until a
- * syncronization point is reached */
-
- if (rank == fd->hints->ranklist[0]) {
- NO_STALE(ret, fd, zoidfs_obj_ptr,
- zoidfs_resize(zoidfs_obj_ptr, size, ZOIDFS_NO_OP_HINT));
- MPI_Bcast(&ret, 1, MPI_INT, fd->hints->ranklist[0], fd->comm);
- } else {
- MPI_Bcast(&ret, 1, MPI_INT, fd->hints->ranklist[0], fd->comm);
- }
- /* --BEGIN ERROR HANDLING-- */
- if (ret != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(ret),
- "Error in zoidfs_resize", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
-}
-
-/*
- * vim: ts=8 sts=4 sw=4 noexpandtab
- */
diff --git a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_write_list.c b/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_write_list.c
deleted file mode 100644
index 040d92a..0000000
--- a/src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_write_list.c
+++ /dev/null
@@ -1,857 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
- * vim: ts=8 sts=4 sw=4 noexpandtab
- *
- * Copyright (C) 2008 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "adio.h"
-#include "adio_extern.h"
-#include "ad_zoidfs.h"
-
-#include "ad_zoidfs_common.h"
-
-/* Copied from ADIOI_PVFS2_OldWriteStrided. It would be good to have fewer
- * copies of this code... */
-void ADIOI_ZOIDFS_WriteStrided(ADIO_File fd, void *buf, int count,
- MPI_Datatype datatype, int file_ptr_type,
- ADIO_Offset offset, ADIO_Status *status,
- int *error_code)
-{
- /* as with all the other WriteStrided functions, offset is in units of
- * etype relative to the filetype */
-
- /* Since zoidfs does not support file locking, can't do buffered writes
- as on Unix */
-
- ADIOI_Flatlist_node *flat_buf, *flat_file;
- int i, j, k, bwr_size, fwr_size=0, st_index=0;
- int sum, n_etypes_in_filetype, size_in_filetype;
- MPI_Count bufsize;
- int n_filetypes, etype_in_filetype;
- ADIO_Offset abs_off_in_filetype=0;
- MPI_Count filetype_size, etype_size, buftype_size;
- MPI_Aint filetype_extent, buftype_extent;
- int buf_count, buftype_is_contig, filetype_is_contig;
- ADIO_Offset off, disp, start_off, initial_off;
- int flag, st_fwr_size, st_n_filetypes;
- int err_flag=0;
-
- size_t mem_list_count, file_list_count;
- const void ** mem_offsets;
- uint64_t *file_offsets;
- size_t *mem_lengths;
- uint64_t *file_lengths;
- int total_blks_to_write;
-
- int max_mem_list, max_file_list;
-
- int b_blks_wrote;
- int f_data_wrote;
- int size_wrote=0, n_write_lists, extra_blks;
-
- int end_bwr_size, end_fwr_size;
- int start_k, start_j, new_file_write, new_buffer_write;
- int start_mem_offset;
- ADIOI_ZOIDFS_object *zoidfs_obj_ptr;
- MPI_Offset total_bytes_written=0;
- static char myname[] = "ADIOI_ZOIDFS_WRITESTRIDED";
-
- /* note: I don't know what zoidfs will do if you pass it a super-long list,
- * so let's keep with the PVFS limit for now */
-#define MAX_ARRAY_SIZE 64
-
- /* --BEGIN ERROR HANDLING-- */
- if (fd->atomicity) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- MPI_ERR_ARG,
- "Atomic noncontiguous writes are not supported by ZOIDFS", 0);
- return;
- }
- /* --END ERROR HANDLING-- */
-
- ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
- ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
-
- /* the HDF5 tests showed a bug in this list processing code (see many many
- * lines down below). We added a workaround, but common HDF5 file types
- * are actually contiguous and do not need the expensive workarond */
- if (!filetype_is_contig) {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
- if (flat_file->count == 1 && !buftype_is_contig)
- filetype_is_contig = 1;
- }
-
- MPI_Type_size_x(fd->filetype, &filetype_size);
- if ( ! filetype_size ) {
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, 0);
-#endif
- *error_code = MPI_SUCCESS;
- return;
- }
-
- MPI_Type_extent(fd->filetype, &filetype_extent);
- MPI_Type_size_x(datatype, &buftype_size);
- MPI_Type_extent(datatype, &buftype_extent);
- etype_size = fd->etype_size;
-
- bufsize = buftype_size * count;
-
- zoidfs_obj_ptr = (ADIOI_ZOIDFS_object*)fd->fs_ptr;
-
- if (!buftype_is_contig && filetype_is_contig) {
-
-/* noncontiguous in memory, contiguous in file. */
- uint64_t file_offsets;
- uint64_t file_lengths;
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
- off = fd->disp + etype_size * offset;
- }
- else off = fd->fp_ind;
-
- file_list_count = 1;
- file_offsets = off;
- file_lengths = 0;
- total_blks_to_write = count*flat_buf->count;
- b_blks_wrote = 0;
-
- /* allocate arrays according to max usage */
- if (total_blks_to_write > MAX_ARRAY_SIZE)
- mem_list_count = MAX_ARRAY_SIZE;
- else mem_list_count = total_blks_to_write;
- mem_offsets = (void*)ADIOI_Malloc(mem_list_count*sizeof(void*));
- mem_lengths = (size_t*)ADIOI_Malloc(mem_list_count*sizeof(size_t));
-
- j = 0;
- /* step through each block in memory, filling memory arrays */
- while (b_blks_wrote < total_blks_to_write) {
- for (i=0; i<flat_buf->count; i++) {
- mem_offsets[b_blks_wrote % MAX_ARRAY_SIZE] =
- buf +
- j*buftype_extent +
- flat_buf->indices[i];
- mem_lengths[b_blks_wrote % MAX_ARRAY_SIZE] =
- flat_buf->blocklens[i];
- file_lengths += flat_buf->blocklens[i];
- b_blks_wrote++;
- if (!(b_blks_wrote % MAX_ARRAY_SIZE) ||
- (b_blks_wrote == total_blks_to_write)) {
-
- /* in the case of the last write list call,
- adjust mem_list_count */
- if (b_blks_wrote == total_blks_to_write) {
- mem_list_count = total_blks_to_write % MAX_ARRAY_SIZE;
- /* in case last write list call fills max arrays */
- if (!mem_list_count) mem_list_count = MAX_ARRAY_SIZE;
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_write(zoidfs_obj_ptr,
- mem_list_count,
- mem_offsets, mem_lengths,
- 1, &file_offsets, &file_lengths, ZOIDFS_NO_OP_HINT));
-
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_write", 0);
- break;
- }
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- total_bytes_written += file_lengths;
-
- /* in the case of error or the last write list call,
- * leave here */
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_write", 0);
- break;
- }
- /* --END ERROR HANDLING-- */
- if (b_blks_wrote == total_blks_to_write) break;
-
- file_offsets += file_lengths;
- file_lengths = 0;
- }
- } /* for (i=0; i<flat_buf->count; i++) */
- j++;
- } /* while (b_blks_wrote < total_blks_to_write) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
-
- if (file_ptr_type == ADIO_INDIVIDUAL)
- fd->fp_ind += total_bytes_written;
-
- if (!err_flag) *error_code = MPI_SUCCESS;
-
- fd->fp_sys_posn = -1; /* clear this. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
-/* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
-#endif
-
- ADIOI_Delete_flattened(datatype);
- return;
- } /* if (!buftype_is_contig && filetype_is_contig) */
-
- /* already know that file is noncontiguous from above */
- /* noncontiguous in file */
-
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
-
- disp = fd->disp;
- initial_off = offset;
-
- /* for each case - ADIO_Individual pointer or explicit, find offset
- (file offset in bytes), n_filetypes (how many filetypes into file
- to start), fwr_size (remaining amount of data in present file
- block), and st_index (start point in terms of blocks in starting
- filetype) */
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- offset = fd->fp_ind; /* in bytes */
- n_filetypes = -1;
- flag = 0;
- while (!flag) {
- n_filetypes++;
- for (i=0; i<flat_file->count; i++) {
- if (disp + flat_file->indices[i] +
- ((ADIO_Offset) n_filetypes)*filetype_extent +
- flat_file->blocklens[i] >= offset) {
- st_index = i;
- fwr_size = disp + flat_file->indices[i] +
- ((ADIO_Offset) n_filetypes)*filetype_extent
- + flat_file->blocklens[i] - offset;
- flag = 1;
- break;
- }
- }
- } /* while (!flag) */
- } /* if (file_ptr_type == ADIO_INDIVIDUAL) */
- else {
- n_etypes_in_filetype = filetype_size/etype_size;
- n_filetypes = (int) (offset / n_etypes_in_filetype);
- etype_in_filetype = (int) (offset % n_etypes_in_filetype);
- size_in_filetype = etype_in_filetype * etype_size;
-
- sum = 0;
- for (i=0; i<flat_file->count; i++) {
- sum += flat_file->blocklens[i];
- if (sum > size_in_filetype) {
- st_index = i;
- fwr_size = sum - size_in_filetype;
- abs_off_in_filetype = flat_file->indices[i] +
- size_in_filetype - (sum - flat_file->blocklens[i]);
- break;
- }
- }
-
- /* abs. offset in bytes in the file */
- offset = disp + ((ADIO_Offset) n_filetypes)*filetype_extent +
- abs_off_in_filetype;
- } /* else [file_ptr_type != ADIO_INDIVIDUAL] */
-
- start_off = offset;
- st_fwr_size = fwr_size;
- st_n_filetypes = n_filetypes;
-
- if (buftype_is_contig && !filetype_is_contig) {
-
-/* contiguous in memory, noncontiguous in file. should be the most
- common case. */
-
- /* only one memory off-len pair, so no array */
- size_t mem_lengths;
- size_t mem_offsets;
-
- i = 0;
- j = st_index;
- off = offset;
- n_filetypes = st_n_filetypes;
-
- mem_list_count = 1;
-
- /* determine how many blocks in file to write */
- f_data_wrote = ADIOI_MIN(st_fwr_size, bufsize);
- total_blks_to_write = 1;
- if (j < (flat_file->count -1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- while (f_data_wrote < bufsize) {
- f_data_wrote += flat_file->blocklens[j];
- total_blks_to_write++;
- if (j<(flat_file->count-1)) j++;
- else j = 0;
- }
-
- j = st_index;
- n_filetypes = st_n_filetypes;
- n_write_lists = total_blks_to_write/MAX_ARRAY_SIZE;
- extra_blks = total_blks_to_write%MAX_ARRAY_SIZE;
-
- mem_offsets = (size_t)buf;
- mem_lengths = 0;
-
- /* if at least one full writelist, allocate file arrays
- at max array size and don't free until very end */
- if (n_write_lists) {
- file_offsets = (int64_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(int64_t));
- file_lengths = (uint64_t*)ADIOI_Malloc(MAX_ARRAY_SIZE*
- sizeof(uint64_t));
- }
- /* if there's no full writelist allocate file arrays according
- to needed size (extra_blks) */
- else {
- file_offsets = (int64_t*)ADIOI_Malloc(extra_blks*
- sizeof(int64_t));
- file_lengths = (uint64_t*)ADIOI_Malloc(extra_blks*
- sizeof(uint64_t));
- }
-
- /* for file arrays that are of MAX_ARRAY_SIZE, build arrays */
- for (i=0; i<n_write_lists; i++) {
- file_list_count = MAX_ARRAY_SIZE;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = st_fwr_size;
- mem_lengths = st_fwr_size;
- }
- for (k=0; k<MAX_ARRAY_SIZE; k++) {
- if (i || k) {
- file_offsets[k] = disp +
- ((ADIO_Offset)n_filetypes)*filetype_extent
- + flat_file->indices[j];
- file_lengths[k] = flat_file->blocklens[j];
- mem_lengths += file_lengths[k];
- }
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<MAX_ARRAY_SIZE; k++) */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_write(zoidfs_obj_ptr,
- 1, buf, &mem_lengths,
- file_list_count,
- file_offsets, file_lengths, ZOIDFS_NO_OP_HINT));
-
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_write", 0);
- goto error_state;
- }
- /* --END ERROR HANDLING-- */
- total_bytes_written += mem_lengths;
-
- mem_offsets += mem_lengths;
- mem_lengths = 0;
-
- } /* for (i=0; i<n_write_lists; i++) */
-
- /* for file arrays smaller than MAX_ARRAY_SIZE (last write_list call) */
- if (extra_blks) {
- file_list_count = extra_blks;
- if(!i) {
- file_offsets[0] = offset;
- file_lengths[0] = ADIOI_MIN(st_fwr_size, bufsize);
- }
- for (k=0; k<extra_blks; k++) {
- if(i || k) {
- file_offsets[k] = disp +
- ((ADIO_Offset)n_filetypes)*filetype_extent +
- flat_file->indices[j];
- /* XXX: double-check these casts */
- if (k == (extra_blks - 1)) {
- file_lengths[k] = bufsize
- - mem_lengths - mem_offsets + (size_t)buf;
- }
- else file_lengths[k] = flat_file->blocklens[j];
- } /* if(i || k) */
- mem_lengths += file_lengths[k];
- if (j<(flat_file->count - 1)) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (k=0; k<extra_blks; k++) */
-
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_write(zoidfs_obj_ptr, 1,
- (const void **)&mem_offsets,
- &mem_lengths,
- file_list_count,
- file_offsets, file_lengths, ZOIDFS_NO_OP_HINT));
-
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != 0) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_write", 0);
- goto error_state;
- }
- /* --END ERROR HANDLING-- */
- total_bytes_written += mem_lengths;
- }
- }
- else {
- /* noncontiguous in memory as well as in file */
-
- flat_buf = ADIOI_Flatten_and_find(datatype);
-
- size_wrote = 0;
- n_filetypes = st_n_filetypes;
- fwr_size = st_fwr_size;
- bwr_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
- max_mem_list = 0;
- max_file_list = 0;
-
- /* run through and file max_file_list and max_mem_list so that you
- can allocate the file and memory arrays less than MAX_ARRAY_SIZE
- if possible */
-
- while (size_wrote < bufsize) {
- k = start_k;
- new_buffer_write = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data written and data to be
- written in the next immediate write list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k] +
- size_wrote) > bufsize) {
- end_bwr_size = new_buffer_write +
- flat_buf->blocklens[k] - (bufsize - size_wrote);
- new_buffer_write = bufsize - size_wrote;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- else new_buffer_write = bwr_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
- j = start_j;
- new_file_write = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_write < new_buffer_write)) {
- if(file_list_count) {
- if((new_file_write + flat_file->blocklens[j]) >
- new_buffer_write) {
- end_fwr_size = new_buffer_write - new_file_write;
- new_file_write = new_buffer_write;
- j--;
- }
- else {
- new_file_write += flat_file->blocklens[j];
- end_fwr_size = flat_file->blocklens[j];
- }
- }
- else {
- if (fwr_size > new_buffer_write) {
- new_file_write = new_buffer_write;
- fwr_size = new_file_write;
- }
- else new_file_write = fwr_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_write = 0;
- mem_list_count = 0;
- while (new_buffer_write < new_file_write) {
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k]) >
- new_file_write) {
- end_bwr_size = new_file_write -
- new_buffer_write;
- new_buffer_write = new_file_write;
- k--;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_write = bwr_size;
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_write < new_file_write) */
- } /* if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
-
- /* fakes filling the writelist arrays of lengths found above */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- if(i) {
- if (i == (mem_list_count - 1)) {
- if (flat_buf->blocklens[k] == end_bwr_size)
- bwr_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- bwr_size = flat_buf->blocklens[k] - end_bwr_size;
- k--;
- buf_count--;
- }
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- if (i) {
- if (i == (file_list_count - 1)) {
- if (flat_file->blocklens[j] == end_fwr_size)
- fwr_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- fwr_size = flat_file->blocklens[j] - end_fwr_size;
- j--;
- }
- }
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
- size_wrote += new_buffer_write;
- start_k = k;
- start_j = j;
- if (max_mem_list < mem_list_count)
- max_mem_list = mem_list_count;
- if (max_file_list < file_list_count)
- max_file_list = file_list_count;
- } /* while (size_wrote < bufsize) */
-
- /* one last check before we actually carry out the operation:
- * this code has hard-to-fix bugs when a noncontiguous file type has
- * such large pieces that the sum of the lengths of the memory type is
- * not larger than one of those pieces (and vice versa for large memory
- * types and many pices of file types. In these cases, give up and
- * fall back to naive reads and writes. The testphdf5 test created a
- * type with two very large memory regions and 600 very small file
- * regions. The same test also created a type with one very large file
- * region and many (700) very small memory regions. both cases caused
- * problems for this code */
-
- if ( ( (file_list_count == 1) &&
- (new_file_write < flat_file->blocklens[0] ) ) ||
- ((mem_list_count == 1) &&
- (new_buffer_write < flat_buf->blocklens[0]) ) ||
- ((file_list_count == MAX_ARRAY_SIZE) &&
- (new_file_write < flat_buf->blocklens[0]) ) ||
- ( (mem_list_count == MAX_ARRAY_SIZE) &&
- (new_buffer_write < flat_file->blocklens[0])) )
- {
- ADIOI_Delete_flattened(datatype);
- ADIOI_GEN_WriteStrided_naive(fd, buf, count, datatype,
- file_ptr_type, initial_off, status, error_code);
- return;
- }
-
-
- mem_offsets = (void *)ADIOI_Malloc(max_mem_list*sizeof(void *));
- mem_lengths = (size_t*)ADIOI_Malloc(max_mem_list*sizeof(size_t));
- file_offsets = (uint64_t *)ADIOI_Malloc(max_file_list*sizeof(uint64_t));
- file_lengths = (uint64_t*)ADIOI_Malloc(max_file_list*sizeof(uint64_t));
-
- size_wrote = 0;
- n_filetypes = st_n_filetypes;
- fwr_size = st_fwr_size;
- bwr_size = flat_buf->blocklens[0];
- buf_count = 0;
- start_mem_offset = 0;
- start_k = k = 0;
- start_j = st_index;
-
- /* this section calculates mem_list_count and file_list_count
- and also finds the possibly odd sized last array elements
- in new_fwr_size and new_bwr_size */
-
- while (size_wrote < bufsize) {
- k = start_k;
- new_buffer_write = 0;
- mem_list_count = 0;
- while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) {
- /* find mem_list_count and file_list_count such that both are
- less than MAX_ARRAY_SIZE, the sum of their lengths are
- equal, and the sum of all the data written and data to be
- written in the next immediate write list is less than
- bufsize */
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k] +
- size_wrote) > bufsize) {
- end_bwr_size = new_buffer_write +
- flat_buf->blocklens[k] - (bufsize - size_wrote);
- new_buffer_write = bufsize - size_wrote;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- else new_buffer_write = bwr_size;
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
- j = start_j;
- new_file_write = 0;
- file_list_count = 0;
- while ((file_list_count < MAX_ARRAY_SIZE) &&
- (new_file_write < new_buffer_write)) {
- if(file_list_count) {
- if((new_file_write + flat_file->blocklens[j]) >
- new_buffer_write) {
- end_fwr_size = new_buffer_write - new_file_write;
- new_file_write = new_buffer_write;
- j--;
- }
- else {
- new_file_write += flat_file->blocklens[j];
- end_fwr_size = flat_file->blocklens[j];
- }
- }
- else {
- if (fwr_size > new_buffer_write) {
- new_file_write = new_buffer_write;
- fwr_size = new_file_write;
- }
- else new_file_write = fwr_size;
- }
- file_list_count++;
- if (j < (flat_file->count - 1)) j++;
- else j = 0;
-
- k = start_k;
- if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) {
- new_buffer_write = 0;
- mem_list_count = 0;
- while (new_buffer_write < new_file_write) {
- if(mem_list_count) {
- if((new_buffer_write + flat_buf->blocklens[k]) >
- new_file_write) {
- end_bwr_size = new_file_write -
- new_buffer_write;
- new_buffer_write = new_file_write;
- k--;
- }
- else {
- new_buffer_write += flat_buf->blocklens[k];
- end_bwr_size = flat_buf->blocklens[k];
- }
- }
- else {
- new_buffer_write = bwr_size;
- if (bwr_size > (bufsize - size_wrote)) {
- new_buffer_write = bufsize - size_wrote;
- bwr_size = new_buffer_write;
- }
- }
- mem_list_count++;
- k = (k + 1)%flat_buf->count;
- } /* while (new_buffer_write < new_file_write) */
- } /* if ((new_file_write < new_buffer_write) &&
- (file_list_count == MAX_ARRAY_SIZE)) */
- } /* while ((mem_list_count < MAX_ARRAY_SIZE) &&
- (new_buffer_write < bufsize-size_wrote)) */
-
- /* fills the allocated writelist arrays */
- k = start_k;
- j = start_j;
- for (i=0; i<mem_list_count; i++) {
- mem_offsets[i] = buf +
- buftype_extent* (buf_count/flat_buf->count) +
- flat_buf->indices[k];
-
- if(!i) {
- mem_lengths[0] = bwr_size;
- mem_offsets[0] += flat_buf->blocklens[k] - bwr_size;
- }
- else {
- if (i == (mem_list_count - 1)) {
- mem_lengths[i] = end_bwr_size;
- if (flat_buf->blocklens[k] == end_bwr_size)
- bwr_size = flat_buf->blocklens[(k+1)%
- flat_buf->count];
- else {
- bwr_size = flat_buf->blocklens[k] - end_bwr_size;
- k--;
- buf_count--;
- }
- }
- else {
- mem_lengths[i] = flat_buf->blocklens[k];
- }
- }
- buf_count++;
- k = (k + 1)%flat_buf->count;
- } /* for (i=0; i<mem_list_count; i++) */
- for (i=0; i<file_list_count; i++) {
- file_offsets[i] = disp + flat_file->indices[j] +
- ((ADIO_Offset)n_filetypes) * filetype_extent;
- if (!i) {
- file_lengths[0] = fwr_size;
- file_offsets[0] += flat_file->blocklens[j] - fwr_size;
- }
- else {
- if (i == (file_list_count - 1)) {
- file_lengths[i] = end_fwr_size;
- if (flat_file->blocklens[j] == end_fwr_size)
- fwr_size = flat_file->blocklens[(j+1)%
- flat_file->count];
- else {
- fwr_size = flat_file->blocklens[j] - end_fwr_size;
- j--;
- }
- }
- else file_lengths[i] = flat_file->blocklens[j];
- }
- if (j < flat_file->count - 1) j++;
- else {
- j = 0;
- n_filetypes++;
- }
- } /* for (i=0; i<file_list_count; i++) */
-
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
-#endif
- NO_STALE(err_flag, fd, zoidfs_obj_ptr,
- zoidfs_write(zoidfs_obj_ptr,
- mem_list_count, mem_offsets, mem_lengths,
- file_list_count,
- file_offsets, file_lengths, ZOIDFS_NO_OP_HINT));
- /* --BEGIN ERROR HANDLING-- */
- if (err_flag != ZFS_OK) {
- *error_code = MPIO_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- myname, __LINE__,
- ADIOI_ZOIDFS_error_convert(err_flag),
- "Error in zoidfs_write", 0);
- goto error_state;
- }
- /* --END ERROR HANDLING-- */
-#ifdef ADIOI_MPE_LOGGING
- MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
-#endif
- size_wrote += new_buffer_write;
- total_bytes_written += new_buffer_write; /* XXX: is this right? */
- start_k = k;
- start_j = j;
- } /* while (size_wrote < bufsize) */
- ADIOI_Free(mem_offsets);
- ADIOI_Free(mem_lengths);
- }
- /* when incrementing fp_ind, need to also take into account the file type:
- * consider an N-element 1-d subarray with a lb and ub: ( |---xxxxx-----|
- * if we wrote N elements, offset needs to point at beginning of type, not
- * at empty region at offset N+1).
- *
- * As we discussed on mpich-discuss in may/june 2009, the code below might
- * look wierd, but by putting fp_ind at the last byte written, the next
- * time we run through the strided code we'll update the fp_ind to the
- * right location. */
- if (file_ptr_type == ADIO_INDIVIDUAL) {
- fd->fp_ind = file_offsets[file_list_count-1]+
- file_lengths[file_list_count-1];
- }
- ADIOI_Free(file_offsets);
- ADIOI_Free(file_lengths);
-
- *error_code = MPI_SUCCESS;
-
-error_state:
- fd->fp_sys_posn = -1; /* set it to null. */
-
-#ifdef HAVE_STATUS_SET_BYTES
- MPIR_Status_set_bytes(status, datatype, bufsize);
-/* This is a temporary way of filling in status. The right way is to
- keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
-#endif
-
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
-}
diff --git a/src/mpi/romio/adio/common/.state-cache b/src/mpi/romio/adio/common/.state-cache
index ee25b13..7a8c6ec 100644
--- a/src/mpi/romio/adio/common/.state-cache
+++ b/src/mpi/romio/adio/common/.state-cache
@@ -1,211 +1,214 @@
<dir>
-<file name="ad_fcntl.c" info="1447123141"/>
-<file name="flatten.c" info="1447123141"/>
-<file name="ad_write.c" info="1447123141"/>
-<file name="ad_hints.c" info="1447123141"/>
-<file name="utils.c" info="1447123141"/>
-<file name="error.c" info="1447123141"/>
-<file name="ad_opencoll.c" info="1447123141"/>
-<file name="ad_set_sh_fp.c" info="1447123141"/>
-<file name="ad_coll_build_req_new.c" info="1447123141"/>
-<file name="strfns.c" info="1447123141"/>
-<file name="ad_wait.c" info="1447123141"/>
-<file name="heap-sort.c" info="1447123141"/>
-<file name="eof_offset.c" info="1447123141"/>
-<file name="ad_wait_fake.c" info="1447123141"/>
-<file name="ad_set_view.c" info="1447123141"/>
-<file name="ad_delete.c" info="1447123141"/>
-<file name="ad_seek.c" info="1447123141"/>
-<file name="ad_close.c" info="1447123141"/>
-<file name="req_malloc.c" info="1447123141"/>
-<file name="system_hints.c" info="1447123141"/>
-<file name="ad_init.c" info="1447123141"/>
-<file name="ad_darray.c" info="1447123141"/>
-<file name="iscontig.c" info="1447123141"/>
-<file name="ad_write_coll.c" info="1447123141"/>
-<file name="ad_write_nolock.c" info="1447123141"/>
-<file name="ad_opencoll_scalable.c" info="1447123141"/>
-<file name="ad_aggregate_new.c" info="1447123141"/>
-<file name="shfp_fname.c" info="1447123141"/>
-<file name="ad_subarray.c" info="1447123141"/>
-<file name="ad_iread.c" info="1447123141"/>
-<file name="ad_iwrite.c" info="1447123141"/>
-<file name="greq_fns.c" info="1447123141"/>
-<file name="ad_opencoll_failsafe.c" info="1447123141"/>
-<file name="hint_fns.c" info="1447123141"/>
-<file name="ad_io_coll.c" info="1447123141"/>
-<file name="ad_open.c" info="1447123141"/>
-<file name="p2p_aggregation.c" info="1447123141"/>
-<file name="ad_threaded_io.c" info="1447123141"/>
-<file name="ad_iopen.c" info="1447123141"/>
-<file name="ad_read_str_naive.c" info="1447123141"/>
-<file name="malloc.c" info="1447123141"/>
-<file name="get_fp_posn.c" info="1447123141"/>
-<file name="status_setb.c" info="1447123141"/>
-<file name="ad_end.c" info="1447123141"/>
-<file name="async_list.c" info="1447123141"/>
-<file name="ad_features.c" info="1447123141"/>
-<file name="ad_coll_exch_new.c" info="1447123141"/>
-<file name="ad_write_str_naive.c" info="1447123141"/>
-<file name="adi_close.c" info="1447123141"/>
-<file name="ad_flush.c" info="1447123141"/>
-<file name="ad_read_str.c" info="1447123141"/>
-<file name="ad_prealloc.c" info="1447123141"/>
-<file name="ad_aggregate.c" info="1447123141"/>
-<file name="ad_iwrite_fake.c" info="1447123141"/>
-<file name="ad_read.c" info="1447123141"/>
-<file name="ad_fstype.c" info="1447123141"/>
-<file name="ad_write_str.c" info="1447123141"/>
-<file name="byte_offset.c" info="1447123141"/>
-<file name="ad_iread_coll.c" info="1447123141"/>
-<file name="ad_resize.c" info="1447123141"/>
-<file name="cb_config_list.c" info="1447123141"/>
-<file name="onesided_aggregation.c" info="1447123141"/>
-<file name="ad_iwrite_coll.c" info="1447123141"/>
-<file name="lock.c" info="1447123141"/>
-<file name="ad_read_coll.c" info="1447123141"/>
-<file name="ad_get_sh_fp.c" info="1447123141"/>
-<file name="ad_done_fake.c" info="1447123141"/>
-<file name="ad_iread_fake.c" info="1447123141"/>
-<file name="ad_done.c" info="1447123141"/>
+<file name="system_hints.c" info="1478973152"/>
+<file name="ad_tuning.c" info="1478973152"/>
+<file name="ad_write_coll.c" info="1478973152"/>
+<file name="ad_iwrite_fake.c" info="1478973152"/>
+<file name="ad_iread_fake.c" info="1478973152"/>
+<file name="ad_write_str.c" info="1478973152"/>
+<file name="ad_write_nolock.c" info="1478973152"/>
+<file name="ad_seek.c" info="1478973152"/>
+<file name="ad_coll_exch_new.c" info="1478973152"/>
+<file name="malloc.c" info="1478973152"/>
+<file name="ad_set_sh_fp.c" info="1478973152"/>
+<file name="async_list.c" info="1478973152"/>
+<file name="ad_done_fake.c" info="1478973152"/>
+<file name="ad_iwrite.c" info="1478973152"/>
+<file name="ad_end.c" info="1478973152"/>
+<file name="adi_close.c" info="1478973152"/>
+<file name="ad_iread.c" info="1478973152"/>
+<file name="ad_init.c" info="1478973152"/>
+<file name="get_fp_posn.c" info="1478973152"/>
+<file name="ad_read_coll.c" info="1478973152"/>
+<file name="ad_opencoll_scalable.c" info="1478973152"/>
+<file name="ad_get_sh_fp.c" info="1478973152"/>
+<file name="ad_opencoll_failsafe.c" info="1478973152"/>
+<file name="greq_fns.c" info="1478973152"/>
+<file name="ad_read.c" info="1478973152"/>
+<file name="ad_read_str_naive.c" info="1478973152"/>
+<file name="ad_features.c" info="1478973152"/>
+<file name="strfns.c" info="1478973152"/>
+<file name="ad_opencoll.c" info="1478973152"/>
+<file name="ad_fcntl.c" info="1478973152"/>
+<file name="ad_aggregate.c" info="1478973152"/>
+<file name="ad_threaded_io.c" info="1478973152"/>
+<file name="status_setb.c" info="1478973152"/>
+<file name="ad_set_view.c" info="1478973152"/>
+<file name="flatten.c" info="1478973152"/>
+<file name="ad_resize.c" info="1478973152"/>
+<file name="ad_io_coll.c" info="1478973152"/>
+<file name="cb_config_list.c" info="1478973152"/>
+<file name="req_malloc.c" info="1478973152"/>
+<file name="ad_iread_coll.c" info="1478973152"/>
+<file name="error.c" info="1478973152"/>
+<file name="shfp_fname.c" info="1478973152"/>
+<file name="p2p_aggregation.c" info="1478973152"/>
+<file name="heap-sort.c" info="1478973152"/>
+<file name="ad_open.c" info="1478973152"/>
+<file name="utils.c" info="1478973152"/>
+<file name="ad_wait_fake.c" info="1478973152"/>
+<file name="ad_flush.c" info="1478973152"/>
+<file name="hint_fns.c" info="1478973152"/>
+<file name="ad_write.c" info="1478973152"/>
+<file name="ad_aggregate_new.c" info="1478973152"/>
+<file name="byte_offset.c" info="1478973152"/>
+<file name="ad_prealloc.c" info="1478973152"/>
+<file name="onesided_aggregation.c" info="1478973152"/>
+<file name="ad_subarray.c" info="1478973152"/>
+<file name="ad_iwrite_coll.c" info="1478973152"/>
+<file name="ad_coll_build_req_new.c" info="1478973152"/>
+<file name="ad_done.c" info="1478973152"/>
+<file name="ad_darray.c" info="1478973152"/>
+<file name="ad_fstype.c" info="1478973152"/>
+<file name="ad_delete.c" info="1478973152"/>
+<file name="ad_wait.c" info="1478973152"/>
+<file name="ad_read_str.c" info="1478973152"/>
+<file name="ad_write_str_naive.c" info="1478973152"/>
+<file name="eof_offset.c" info="1478973152"/>
+<file name="ad_hints.c" info="1478973152"/>
+<file name="iscontig.c" info="1478973152"/>
+<file name="ad_iopen.c" info="1478973152"/>
+<file name="ad_close.c" info="1478973152"/>
+<file name="lock.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ad_fcntl.c">
+<fileinfo name="system_hints.c">
</fileinfo>
-<fileinfo name="flatten.c">
+<fileinfo name="ad_tuning.c">
</fileinfo>
-<fileinfo name="ad_write.c">
+<fileinfo name="ad_write_coll.c">
</fileinfo>
-<fileinfo name="ad_hints.c">
+<fileinfo name="ad_iwrite_fake.c">
</fileinfo>
-<fileinfo name="utils.c">
+<fileinfo name="ad_iread_fake.c">
</fileinfo>
-<fileinfo name="error.c">
+<fileinfo name="ad_write_str.c">
</fileinfo>
-<fileinfo name="ad_opencoll.c">
+<fileinfo name="ad_write_nolock.c">
</fileinfo>
-<fileinfo name="ad_set_sh_fp.c">
+<fileinfo name="ad_seek.c">
</fileinfo>
-<fileinfo name="ad_coll_build_req_new.c">
+<fileinfo name="ad_coll_exch_new.c">
</fileinfo>
-<fileinfo name="strfns.c">
+<fileinfo name="malloc.c">
</fileinfo>
-<fileinfo name="ad_wait.c">
+<fileinfo name="ad_set_sh_fp.c">
</fileinfo>
-<fileinfo name="heap-sort.c">
+<fileinfo name="async_list.c">
</fileinfo>
-<fileinfo name="eof_offset.c">
+<fileinfo name="ad_done_fake.c">
</fileinfo>
-<fileinfo name="ad_wait_fake.c">
+<fileinfo name="ad_iwrite.c">
</fileinfo>
-<fileinfo name="ad_set_view.c">
+<fileinfo name="ad_end.c">
</fileinfo>
-<fileinfo name="ad_delete.c">
+<fileinfo name="adi_close.c">
</fileinfo>
-<fileinfo name="ad_seek.c">
+<fileinfo name="ad_iread.c">
</fileinfo>
-<fileinfo name="ad_close.c">
+<fileinfo name="ad_init.c">
</fileinfo>
-<fileinfo name="req_malloc.c">
+<fileinfo name="get_fp_posn.c">
</fileinfo>
-<fileinfo name="system_hints.c">
+<fileinfo name="ad_read_coll.c">
</fileinfo>
-<fileinfo name="ad_init.c">
+<fileinfo name="ad_opencoll_scalable.c">
</fileinfo>
-<fileinfo name="ad_darray.c">
+<fileinfo name="ad_get_sh_fp.c">
</fileinfo>
-<fileinfo name="iscontig.c">
+<fileinfo name="ad_opencoll_failsafe.c">
</fileinfo>
-<fileinfo name="ad_write_coll.c">
+<fileinfo name="greq_fns.c">
</fileinfo>
-<fileinfo name="ad_write_nolock.c">
+<fileinfo name="ad_read.c">
</fileinfo>
-<fileinfo name="ad_opencoll_scalable.c">
+<fileinfo name="ad_read_str_naive.c">
</fileinfo>
-<fileinfo name="ad_aggregate_new.c">
+<fileinfo name="ad_features.c">
</fileinfo>
-<fileinfo name="shfp_fname.c">
+<fileinfo name="strfns.c">
</fileinfo>
-<fileinfo name="ad_subarray.c">
+<fileinfo name="ad_opencoll.c">
</fileinfo>
-<fileinfo name="ad_iread.c">
+<fileinfo name="ad_fcntl.c">
</fileinfo>
-<fileinfo name="ad_iwrite.c">
+<fileinfo name="ad_aggregate.c">
</fileinfo>
-<fileinfo name="greq_fns.c">
+<fileinfo name="ad_threaded_io.c">
</fileinfo>
-<fileinfo name="ad_opencoll_failsafe.c">
+<fileinfo name="status_setb.c">
</fileinfo>
-<fileinfo name="hint_fns.c">
+<fileinfo name="ad_set_view.c">
</fileinfo>
-<fileinfo name="ad_io_coll.c">
+<fileinfo name="flatten.c">
</fileinfo>
-<fileinfo name="ad_open.c">
+<fileinfo name="ad_resize.c">
</fileinfo>
-<fileinfo name="p2p_aggregation.c">
+<fileinfo name="ad_io_coll.c">
</fileinfo>
-<fileinfo name="ad_threaded_io.c">
+<fileinfo name="cb_config_list.c">
</fileinfo>
-<fileinfo name="ad_iopen.c">
+<fileinfo name="req_malloc.c">
</fileinfo>
-<fileinfo name="ad_read_str_naive.c">
+<fileinfo name="ad_iread_coll.c">
</fileinfo>
-<fileinfo name="malloc.c">
+<fileinfo name="error.c">
</fileinfo>
-<fileinfo name="get_fp_posn.c">
+<fileinfo name="shfp_fname.c">
</fileinfo>
-<fileinfo name="status_setb.c">
+<fileinfo name="p2p_aggregation.c">
</fileinfo>
-<fileinfo name="ad_end.c">
+<fileinfo name="heap-sort.c">
</fileinfo>
-<fileinfo name="async_list.c">
+<fileinfo name="ad_open.c">
</fileinfo>
-<fileinfo name="ad_features.c">
+<fileinfo name="utils.c">
</fileinfo>
-<fileinfo name="ad_coll_exch_new.c">
+<fileinfo name="ad_wait_fake.c">
</fileinfo>
-<fileinfo name="ad_write_str_naive.c">
+<fileinfo name="ad_flush.c">
</fileinfo>
-<fileinfo name="adi_close.c">
+<fileinfo name="hint_fns.c">
</fileinfo>
-<fileinfo name="ad_flush.c">
+<fileinfo name="ad_write.c">
</fileinfo>
-<fileinfo name="ad_read_str.c">
+<fileinfo name="ad_aggregate_new.c">
+</fileinfo>
+<fileinfo name="byte_offset.c">
</fileinfo>
<fileinfo name="ad_prealloc.c">
</fileinfo>
-<fileinfo name="ad_aggregate.c">
+<fileinfo name="onesided_aggregation.c">
</fileinfo>
-<fileinfo name="ad_iwrite_fake.c">
+<fileinfo name="ad_subarray.c">
</fileinfo>
-<fileinfo name="ad_read.c">
+<fileinfo name="ad_iwrite_coll.c">
</fileinfo>
-<fileinfo name="ad_fstype.c">
+<fileinfo name="ad_coll_build_req_new.c">
</fileinfo>
-<fileinfo name="ad_write_str.c">
+<fileinfo name="ad_done.c">
</fileinfo>
-<fileinfo name="byte_offset.c">
+<fileinfo name="ad_darray.c">
</fileinfo>
-<fileinfo name="ad_iread_coll.c">
+<fileinfo name="ad_fstype.c">
</fileinfo>
-<fileinfo name="ad_resize.c">
+<fileinfo name="ad_delete.c">
</fileinfo>
-<fileinfo name="cb_config_list.c">
+<fileinfo name="ad_wait.c">
</fileinfo>
-<fileinfo name="onesided_aggregation.c">
+<fileinfo name="ad_read_str.c">
</fileinfo>
-<fileinfo name="ad_iwrite_coll.c">
+<fileinfo name="ad_write_str_naive.c">
</fileinfo>
-<fileinfo name="lock.c">
+<fileinfo name="eof_offset.c">
</fileinfo>
-<fileinfo name="ad_read_coll.c">
+<fileinfo name="ad_hints.c">
</fileinfo>
-<fileinfo name="ad_get_sh_fp.c">
+<fileinfo name="iscontig.c">
</fileinfo>
-<fileinfo name="ad_done_fake.c">
+<fileinfo name="ad_iopen.c">
</fileinfo>
-<fileinfo name="ad_iread_fake.c">
+<fileinfo name="ad_close.c">
</fileinfo>
-<fileinfo name="ad_done.c">
+<fileinfo name="lock.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/common/Makefile.mk b/src/mpi/romio/adio/common/Makefile.mk
index 80194ef..a06f059 100644
--- a/src/mpi/romio/adio/common/Makefile.mk
+++ b/src/mpi/romio/adio/common/Makefile.mk
@@ -72,5 +72,6 @@ romio_other_sources += \
adio/common/ad_threaded_io.c \
adio/common/p2p_aggregation.c \
adio/common/onesided_aggregation.c \
+ adio/common/ad_tuning.c \
adio/common/utils.c
diff --git a/src/mpi/romio/adio/common/ad_aggregate.c b/src/mpi/romio/adio/common/ad_aggregate.c
index 77c69bd..ccd9764 100644
--- a/src/mpi/romio/adio/common/ad_aggregate.c
+++ b/src/mpi/romio/adio/common/ad_aggregate.c
@@ -81,7 +81,7 @@ int ADIOI_Calc_aggregator(ADIO_File fd,
int rank_index, rank;
ADIO_Offset avail_bytes;
- ADIOI_UNREFERENCED_ARG(fd_start);
+ MPL_UNREFERENCED_ARG(fd_start);
/* get an index into our array of aggregators */
rank_index = (int) ((off - min_off + fd_size)/ fd_size - 1);
@@ -154,8 +154,8 @@ void ADIOI_Calc_file_domains(ADIO_Offset *st_offsets, ADIO_Offset
max_end_offset = end_offsets[0];
for (i=1; i<nprocs; i++) {
- min_st_offset = ADIOI_MIN(min_st_offset, st_offsets[i]);
- max_end_offset = ADIOI_MAX(max_end_offset, end_offsets[i]);
+ min_st_offset = MPL_MIN(min_st_offset, st_offsets[i]);
+ max_end_offset = MPL_MAX(max_end_offset, end_offsets[i]);
}
/* determine the "file domain (FD)" of each process, i.e., the portion of
diff --git a/src/mpi/romio/adio/common/ad_aggregate_new.c b/src/mpi/romio/adio/common/ad_aggregate_new.c
index ba5af6b..53b0210 100644
--- a/src/mpi/romio/adio/common/ad_aggregate_new.c
+++ b/src/mpi/romio/adio/common/ad_aggregate_new.c
@@ -78,7 +78,7 @@ void ADIOI_Calc_file_realms (ADIO_File fd, ADIO_Offset min_st_offset,
MPI_Type_contiguous ((max_end_offset - min_st_offset + 1), MPI_BYTE,
file_realm_types);
MPI_Type_commit (file_realm_types);
- ADIOI_Add_contig_flattened (*file_realm_types);
+ ADIOI_Flatten_datatype(*file_realm_types);
}
else if (fd->file_realm_st_offs == NULL) {
file_realm_st_offs = (ADIO_Offset *)
@@ -220,7 +220,7 @@ void ADIOI_Calc_file_realms_fsize (ADIO_File fd, int nprocs_for_coll,
ADIO_Fcntl (fd, ADIO_FCNTL_GET_FSIZE, &fcntl_struct, &error_code);
/* use impending file size since a write call may lengthen the file */
- fsize = ADIOI_MAX (fcntl_struct.fsize, max_end_offset+1);
+ fsize = MPL_MAX (fcntl_struct.fsize, max_end_offset+1);
fr_size = (fsize + nprocs_for_coll - 1) / nprocs_for_coll;
align_fr(fr_size, 0, fd->hints->cb_fr_alignment,
&aligned_fr_size, &aligned_fr_off);
diff --git a/src/mpi/romio/adio/common/ad_close.c b/src/mpi/romio/adio/common/ad_close.c
index 01cf1ba..c107b23 100644
--- a/src/mpi/romio/adio/common/ad_close.c
+++ b/src/mpi/romio/adio/common/ad_close.c
@@ -13,7 +13,7 @@
void ADIO_Close(ADIO_File fd, int *error_code)
{
- int i, j, k, combiner, myrank, err, is_contig;
+ int i, j, k, combiner, myrank, err;
static char myname[] = "ADIO_CLOSE";
if (fd->async_count) {
@@ -60,8 +60,8 @@ void ADIO_Close(ADIO_File fd, int *error_code)
ADIOI_Ftable[fd->fortran_handle] = MPI_FILE_NULL;
}
- if (fd->hints && fd->hints->ranklist) ADIOI_Free(fd->hints->ranklist);
- if (fd->hints && fd->hints->cb_config_list) ADIOI_Free(fd->hints->cb_config_list);
+ if (fd->hints) ADIOI_Free(fd->hints->ranklist);
+ if (fd->hints) ADIOI_Free(fd->hints->cb_config_list);
/* This BlueGene platform-specific free must be done in the common code
* because the malloc's for these hint data structures are done at the
@@ -71,9 +71,9 @@ void ADIO_Close(ADIO_File fd, int *error_code)
* ADIOI_GPFS_Close and re-open via ADIOI_GPFS_Open are done which results
* in a double-free - ADIOI_GPFS_Open does not redo the SetInfo... */
#ifdef BGQPLATFORM
- if (fd->hints && fd->hints->fs_hints.bg.bridgelist)
+ if (fd->hints)
ADIOI_Free(fd->hints->fs_hints.bg.bridgelist);
- if (fd->hints && fd->hints->fs_hints.bg.bridgelistnum)
+ if (fd->hints)
ADIOI_Free(fd->hints->fs_hints.bg.bridgelistnum);
#endif
@@ -81,21 +81,17 @@ void ADIO_Close(ADIO_File fd, int *error_code)
if (fd->hints->cb_pfr == ADIOI_HINT_ENABLE) {
/* AAR, FSIZE, and User provided uniform File realms */
if (1) {
- ADIOI_Delete_flattened (fd->file_realm_types[0]);
MPI_Type_free (&fd->file_realm_types[0]);
}
else {
for (i=0; i<fd->hints->cb_nodes; i++) {
- ADIOI_Datatype_iscontig(fd->file_realm_types[i], &is_contig);
- if (!is_contig)
- ADIOI_Delete_flattened(fd->file_realm_types[i]);
MPI_Type_free (&fd->file_realm_types[i]);
}
}
ADIOI_Free(fd->file_realm_st_offs);
ADIOI_Free(fd->file_realm_types);
}
- if (fd->hints) ADIOI_Free(fd->hints);
+ ADIOI_Free(fd->hints);
@@ -105,15 +101,12 @@ void ADIO_Close(ADIO_File fd, int *error_code)
MPI_Type_get_envelope(fd->etype, &i, &j, &k, &combiner);
if (combiner != MPI_COMBINER_NAMED) MPI_Type_free(&(fd->etype));
- ADIOI_Datatype_iscontig(fd->filetype, &is_contig);
- if (!is_contig) ADIOI_Delete_flattened(fd->filetype);
-
MPI_Type_get_envelope(fd->filetype, &i, &j, &k, &combiner);
if (combiner != MPI_COMBINER_NAMED) MPI_Type_free(&(fd->filetype));
MPI_Info_free(&(fd->info));
- if (fd->io_buf != NULL) ADIOI_Free(fd->io_buf);
+ ADIOI_Free(fd->io_buf);
ADIOI_OneSidedCleanup(fd);
/* memory for fd is freed in MPI_File_close */
diff --git a/src/mpi/romio/adio/common/ad_coll_build_req_new.c b/src/mpi/romio/adio/common/ad_coll_build_req_new.c
index 2ea9754..4e088c5 100644
--- a/src/mpi/romio/adio/common/ad_coll_build_req_new.c
+++ b/src/mpi/romio/adio/common/ad_coll_build_req_new.c
@@ -281,12 +281,11 @@ static inline int get_next_fr_off(ADIO_File fd,
{
MPI_Aint fr_extent = -1;
ADIO_Offset tmp_off, off_rem;
- ADIOI_Flatlist_node *fr_node_p = ADIOI_Flatlist;
+ ADIOI_Flatlist_node *fr_node_p;
int i = -1, fr_dtype_ct = 0;
/* Should have already been flattened in calc_file_realms() */
- while (fr_node_p->type != (*fr_type_p))
- fr_node_p = fr_node_p->next;
+ fr_node_p = ADIOI_Flatten_and_find(*fr_type_p);
assert(fr_node_p != NULL);
/* Did we get to the first region of the file realm? */
diff --git a/src/mpi/romio/adio/common/ad_coll_exch_new.c b/src/mpi/romio/adio/common/ad_coll_exch_new.c
index cbc6454..7d02090 100644
--- a/src/mpi/romio/adio/common/ad_coll_exch_new.c
+++ b/src/mpi/romio/adio/common/ad_coll_exch_new.c
@@ -58,47 +58,6 @@ void ADIOI_Print_flatlist_node(ADIOI_Flatlist_node *flatlist_node_p)
fprintf(stderr, "\n");
}
-/* Since ADIOI_Flatten_datatype won't add a contig datatype to the
- * ADIOI_Flatlist, we can force it to do so with this function. */
-ADIOI_Flatlist_node * ADIOI_Add_contig_flattened(MPI_Datatype contig_type)
-{
- MPI_Count contig_type_sz = -1;
- ADIOI_Flatlist_node *flat_node_p = ADIOI_Flatlist;
-
- /* Add contig type to the end of the list if it doesn't already
- * exist. */
- while (flat_node_p->next)
- {
- if (flat_node_p->type == contig_type)
- return flat_node_p;
- flat_node_p = flat_node_p->next;
- }
- if (flat_node_p->type == contig_type)
- return flat_node_p;
-
- MPI_Type_size_x(contig_type, &contig_type_sz);
- if ((flat_node_p->next = (ADIOI_Flatlist_node *) ADIOI_Malloc
- (sizeof(ADIOI_Flatlist_node))) == NULL)
- {
- fprintf(stderr, "ADIOI_Add_contig_flattened: malloc next failed\n");
- }
- flat_node_p = flat_node_p->next;
- flat_node_p->type = contig_type;
- if ((flat_node_p->blocklens = (ADIO_Offset *) ADIOI_Malloc(sizeof(ADIO_Offset))) == NULL)
- {
- fprintf(stderr, "ADIOI_Flatlist_node: malloc blocklens failed\n");
- }
- if ((flat_node_p->indices = (ADIO_Offset *)
- ADIOI_Malloc(sizeof(ADIO_Offset))) == NULL)
- {
- fprintf(stderr, "ADIOI_Flatlist_node: malloc indices failed\n");
- }
- flat_node_p->blocklens[0] = contig_type_sz;
- flat_node_p->indices[0] = 0;
- flat_node_p->count = 1;
- flat_node_p->next = NULL;
- return flat_node_p;
-}
/* ADIOI_Exchange_file_views - Sends all the aggregators the file
* views and file view states of the clients. It fills in the
@@ -146,7 +105,7 @@ void ADIOI_Exch_file_views(int myrank, int nprocs, int file_ptr_type,
MPI_Type_extent(datatype, &memtype_extent);
if (memtype_sz == memtype_extent) {
memtype_is_contig = 1;
- flat_mem_p = ADIOI_Add_contig_flattened(datatype);
+ flat_mem_p = ADIOI_Flatten_and_find(datatype);
flat_mem_p->blocklens[0] = memtype_sz*count;
}
else {
@@ -155,17 +114,12 @@ void ADIOI_Exch_file_views(int myrank, int nprocs, int file_ptr_type,
MPI_Type_extent(fd->filetype, &filetype_extent);
MPI_Type_size_x(fd->filetype, &filetype_sz);
+ flat_file_p = ADIOI_Flatten_and_find(fd->filetype);
if (filetype_extent == filetype_sz) {
- flat_file_p = ADIOI_Add_contig_flattened(fd->filetype);
flat_file_p->blocklens[0] = memtype_sz*count;
filetype_extent = memtype_sz*count;
filetype_sz = filetype_extent;
}
- else {
- flat_file_p = ADIOI_Flatlist;
- while (flat_file_p->type != fd->filetype)
- flat_file_p = flat_file_p->next;
- }
disp_off_sz_ext_typesz[0] = fd->fp_ind;
disp_off_sz_ext_typesz[1] = fd->disp;
@@ -435,7 +389,7 @@ void ADIOI_Exch_file_views(int myrank, int nprocs, int file_ptr_type,
/* Since ADIOI_Malloc may do other things we add the +1
* to avoid a 0-size malloc */
statuses = (MPI_Status *)
- ADIOI_Malloc(1 + 2 * ADIOI_MAX(send_req_arr_sz,recv_req_arr_sz)
+ ADIOI_Malloc(1 + 2 * MPL_MAX(send_req_arr_sz,recv_req_arr_sz)
* sizeof(MPI_Status));
if (send_req_arr_sz > 0) {
@@ -465,7 +419,7 @@ void ADIOI_Exch_file_views(int myrank, int nprocs, int file_ptr_type,
#ifdef DEBUG
if (fd->is_agg == 1)
{
- ADIOI_Flatlist_node *fr_node_p = ADIOI_Flatlist;
+ ADIOI_Flatlist_node *fr_node_p;
for (i = 0; i < nprocs; i++)
{
fprintf(stderr, "client_file_view_state_arr[%d]=(fp_ind=%Ld,"
@@ -477,9 +431,8 @@ void ADIOI_Exch_file_views(int myrank, int nprocs, int file_ptr_type,
client_file_view_state_arr[i].ext);
}
- while (fr_node_p->type !=
- fd->file_realm_types[fd->my_cb_nodes_index])
- fr_node_p = fr_node_p->next;
+ fr_node_p =
+ ADIOI_Flatten_and_find(fd->file_realm_types[fd->my-cb_nodes_index]);
assert(fr_node_p != NULL);
fprintf(stderr, "my file realm (idx=%d,st_off=%Ld) ",
diff --git a/src/mpi/romio/adio/common/ad_darray.c b/src/mpi/romio/adio/common/ad_darray.c
index 23715c4..632669b 100644
--- a/src/mpi/romio/adio/common/ad_darray.c
+++ b/src/mpi/romio/adio/common/ad_darray.c
@@ -175,7 +175,7 @@ static int MPIOI_Type_block(int *array_of_gsizes, int dim, int ndims, int nprocs
}
j = global_size - blksize*rank;
- mysize = ADIOI_MIN(blksize, j);
+ mysize = MPL_MIN(blksize, j);
if (mysize < 0) mysize = 0;
stride = orig_extent;
@@ -235,7 +235,7 @@ static int MPIOI_Type_cyclic(int *array_of_gsizes, int dim, int ndims, int nproc
else {
local_size = ((end_index - st_index + 1)/(nprocs*blksize))*blksize;
rem = (end_index - st_index + 1) % (nprocs*blksize);
- local_size += ADIOI_MIN(rem, blksize);
+ local_size += MPL_MIN(rem, blksize);
}
count = local_size/blksize;
diff --git a/src/mpi/romio/adio/common/ad_end.c b/src/mpi/romio/adio/common/ad_end.c
index ea4dfeb..2557c80 100644
--- a/src/mpi/romio/adio/common/ad_end.c
+++ b/src/mpi/romio/adio/common/ad_end.c
@@ -9,7 +9,6 @@
void ADIO_End(int *error_code)
{
- ADIOI_Flatlist_node *curr, *next;
ADIOI_Datarep *datarep, *datarep_next;
/* FPRINTF(stderr, "reached end\n"); */
@@ -18,17 +17,6 @@ void ADIO_End(int *error_code)
* that our reference to that errhandler is released */
PMPI_File_set_errhandler(MPI_FILE_NULL, MPI_ERRORS_RETURN);
-/* delete the flattened datatype list */
- curr = ADIOI_Flatlist;
- while (curr) {
- if (curr->blocklens) ADIOI_Free(curr->blocklens);
- if (curr->indices) ADIOI_Free(curr->indices);
- next = curr->next;
- ADIOI_Free(curr);
- curr = next;
- }
- ADIOI_Flatlist = NULL;
-
/* free file and info tables used for Fortran interface */
if (ADIOI_Ftable) ADIOI_Free(ADIOI_Ftable);
#ifndef HAVE_MPI_INFO
@@ -54,7 +42,6 @@ void ADIO_End(int *error_code)
}
-
/* This is the delete callback function associated with
ADIO_Init_keyval when MPI_COMM_SELF is freed */
@@ -63,9 +50,9 @@ int ADIOI_End_call(MPI_Comm comm, int keyval, void *attribute_val, void
{
int error_code;
- ADIOI_UNREFERENCED_ARG(comm);
- ADIOI_UNREFERENCED_ARG(attribute_val);
- ADIOI_UNREFERENCED_ARG(extra_state);
+ MPL_UNREFERENCED_ARG(comm);
+ MPL_UNREFERENCED_ARG(attribute_val);
+ MPL_UNREFERENCED_ARG(extra_state);
MPI_Keyval_free(&keyval);
@@ -75,6 +62,9 @@ int ADIOI_End_call(MPI_Comm comm, int keyval, void *attribute_val, void
if (ADIOI_cb_config_list_keyval != MPI_KEYVAL_INVALID)
MPI_Keyval_free(&ADIOI_cb_config_list_keyval);
+ if (ADIOI_Flattened_type_keyval != MPI_KEYVAL_INVALID)
+ MPI_Type_free_keyval(&ADIOI_Flattened_type_keyval);
+
ADIO_End(&error_code);
return error_code;
}
diff --git a/src/mpi/romio/adio/common/ad_fstype.c b/src/mpi/romio/adio/common/ad_fstype.c
index c89b560..94451c6 100644
--- a/src/mpi/romio/adio/common/ad_fstype.c
+++ b/src/mpi/romio/adio/common/ad_fstype.c
@@ -192,8 +192,8 @@ static void ADIO_FileSysType_parentdir(const char *filename, char **dirnamep)
/* successfully read the link */
linkbuf[namelen] = '\0'; /* readlink doesn't null terminate */
dir = ADIOI_Strdup(linkbuf);
- ADIOI_Free(linkbuf);
}
+ ADIOI_Free(linkbuf);
}
slash = strrchr(dir, '/');
@@ -338,7 +338,7 @@ static void ADIO_FileSysType_fncall(const char *filename, int *fstype, int *erro
/* --END ERROR HANDLING-- */
# ifdef ROMIO_HAVE_STRUCT_STATFS_WITH_F_FSTYPENAME
- /* uncommon: maybe only on Darwin ? */
+ /* less common: Darwin and OpenBSD */
if ( !strncmp("nfs",fsbuf.f_fstypename,3) ) {
*fstype = ADIO_NFS;
return;
@@ -346,6 +346,8 @@ static void ADIO_FileSysType_fncall(const char *filename, int *fstype, int *erro
# endif
+# ifdef ROMIO_HAVE_STRUCT_STATFS_WITH_F_TYPE
+
#ifdef ROMIO_GPFS
if (fsbuf.f_type == GPFS_SUPER_MAGIC) {
*fstype = ADIO_GPFS;
@@ -413,6 +415,8 @@ static void ADIO_FileSysType_fncall(const char *filename, int *fstype, int *erro
}
# endif
+# endif /*ROMIO_HAVE_STRUCT_STATFS_WITH_F_TYPE */
+
# ifdef ROMIO_UFS
/* if UFS support is enabled, default to that */
*fstype = ADIO_UFS;
@@ -460,8 +464,8 @@ static void ADIO_FileSysType_fncall(const char *filename, int *fstype, int *erro
#endif /* STAT APPROACH */
#ifdef ROMIO_NTFS
- ADIOI_UNREFERENCED_ARG(filename);
- ADIOI_UNREFERENCED_ARG(error_code);
+ MPL_UNREFERENCED_ARG(filename);
+ MPL_UNREFERENCED_ARG(error_code);
*fstype = ADIO_NTFS; /* only supported FS on Windows */
#elif defined(ROMIO_NFS)
*fstype = ADIO_NFS;
@@ -519,13 +523,7 @@ static void ADIO_FileSysType_prefix(const char *filename, int *fstype, int *erro
static char myname[] = "ADIO_RESOLVEFILETYPE_PREFIX";
*error_code = MPI_SUCCESS;
- if (!strncmp(filename, "pfs:", 4) || !strncmp(filename, "PFS:", 4)) {
- *fstype = ADIO_PFS;
- }
- else if (!strncmp(filename, "piofs:", 6) || !strncmp(filename, "PIOFS:", 6)) {
- *fstype = ADIO_PIOFS;
- }
- else if (!strncmp(filename, "ufs:", 4) || !strncmp(filename, "UFS:", 4)) {
+ if (!strncmp(filename, "ufs:", 4) || !strncmp(filename, "UFS:", 4)) {
*fstype = ADIO_UFS;
}
else if (!strncmp(filename, "nfs:", 4) || !strncmp(filename, "NFS:", 4)) {
@@ -534,35 +532,17 @@ static void ADIO_FileSysType_prefix(const char *filename, int *fstype, int *erro
else if (!strncmp(filename, "panfs:", 6) || !strncmp(filename, "PANFS:", 6)) {
*fstype = ADIO_PANFS;
}
- else if (!strncmp(filename, "hfs:", 4) || !strncmp(filename, "HFS:", 4)) {
- *fstype = ADIO_HFS;
- }
else if (!strncmp(filename, "xfs:", 4) || !strncmp(filename, "XFS:", 4)) {
*fstype = ADIO_XFS;
}
- else if (!strncmp(filename, "sfs:", 4) || !strncmp(filename, "SFS:", 4)) {
- *fstype = ADIO_SFS;
- }
- else if (!strncmp(filename, "pvfs:", 5) || !strncmp(filename, "PVFS:", 5)) {
- *fstype = ADIO_PVFS;
- }
else if (!strncmp(filename, "pvfs2:", 6)||!strncmp(filename, "PVFS2:", 6)) {
*fstype = ADIO_PVFS2;
- }
- else if (!strncmp(filename, "zoidfs:", 7)||
- !strncmp(filename, "ZOIDFS:", 7)) {
- *fstype = ADIO_ZOIDFS;
}
else if (!strncmp(filename, "testfs:", 7)
|| !strncmp(filename, "TESTFS:", 7))
{
*fstype = ADIO_TESTFS;
}
- else if (!strncmp(filename, "ftp:", 4)
- || !strncmp(filename, "gsiftp:", 7))
- {
- *fstype = ADIO_GRIDFTP;
- }
else if (!strncmp(filename, "lustre:", 7)
|| !strncmp(filename, "LUSTRE:", 7))
{
@@ -572,16 +552,12 @@ static void ADIO_FileSysType_prefix(const char *filename, int *fstype, int *erro
*fstype = ADIO_GPFS;
}
else {
-#ifdef ROMIO_NTFS
- *fstype = ADIO_NTFS;
-#else
*fstype = 0;
/* --BEGIN ERROR HANDLING-- */
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
myname, __LINE__, MPI_ERR_NO_SUCH_FILE,
"**filename", "**filename %s", filename);
/* --END ERROR HANDLING-- */
-#endif
}
}
@@ -703,26 +679,6 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
}
/* verify that we support this file system type and set ops pointer */
- if (file_system == ADIO_PFS) {
-#ifndef ROMIO_PFS
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_PFS_operations;
-#endif
- }
- if (file_system == ADIO_PIOFS) {
-#ifndef ROMIO_PIOFS
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_PIOFS_operations;
-#endif
- }
if (file_system == ADIO_UFS) {
#ifndef ROMIO_UFS
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
@@ -753,16 +709,6 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
*ops = &ADIO_PANFS_operations;
#endif
}
- if (file_system == ADIO_HFS) {
-#ifndef ROMIO_HFS
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_HFS_operations;
-#endif
- }
if (file_system == ADIO_XFS) {
#ifndef ROMIO_XFS
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
@@ -773,26 +719,6 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
*ops = &ADIO_XFS_operations;
#endif
}
- if (file_system == ADIO_SFS) {
-#ifndef ROMIO_SFS
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_SFS_operations;
-#endif
- }
- if (file_system == ADIO_PVFS) {
-#ifndef ROMIO_PVFS
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_PVFS_operations;
-#endif
- }
if (file_system == ADIO_PVFS2) {
#ifndef ROMIO_PVFS2
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
@@ -803,16 +729,6 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
*ops = &ADIO_PVFS2_operations;
#endif
}
- if (file_system == ADIO_NTFS) {
-#ifndef ROMIO_NTFS
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_NTFS_operations;
-#endif
- }
if (file_system == ADIO_TESTFS) {
#ifndef ROMIO_TESTFS
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
@@ -835,16 +751,6 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
#endif
}
- if (file_system == ADIO_GRIDFTP) {
-#ifndef ROMIO_GRIDFTP
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_GRIDFTP_operations;
-#endif
- }
if (file_system == ADIO_LUSTRE) {
#ifndef ROMIO_LUSTRE
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**iofstypeunsupported", 0);
@@ -853,16 +759,6 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
*ops = &ADIO_LUSTRE_operations;
#endif
}
- if (file_system == ADIO_ZOIDFS) {
-#ifndef ROMIO_ZOIDFS
- *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- myname, __LINE__, MPI_ERR_IO,
- "**iofstypeunsupported", 0);
- return;
-#else
- *ops = &ADIO_ZOIDFS_operations;
-#endif
- }
*error_code = MPI_SUCCESS;
*fstype = file_system;
return;
diff --git a/src/mpi/romio/adio/common/ad_hints.c b/src/mpi/romio/adio/common/ad_hints.c
index 1bc74f1..dcad549 100644
--- a/src/mpi/romio/adio/common/ad_hints.c
+++ b/src/mpi/romio/adio/common/ad_hints.c
@@ -8,6 +8,7 @@
#include "adio.h"
#include "adio_extern.h"
#include "hint_fns.h"
+#include "ad_tuning.h"
void ADIOI_GEN_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
{
@@ -31,6 +32,7 @@ void ADIOI_GEN_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
*error_code = MPI_SUCCESS;
return;
}
+ ad_get_env_vars();
if (fd->info == MPI_INFO_NULL) MPI_Info_create(&(fd->info));
info = fd->info;
@@ -72,7 +74,7 @@ void ADIOI_GEN_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
fd->hints->cb_config_list = NULL;
/* number of processes that perform I/O in collective I/O */
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
+ MPL_snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
ADIOI_Info_set(info, "cb_nodes", value);
fd->hints->cb_nodes = nprocs;
@@ -215,7 +217,7 @@ void ADIOI_GEN_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
/* can't ask for more aggregators than mpi processes, though it
* might be interesting to think what such oversubscription
* might mean... someday */
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
+ MPL_snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
ADIOI_Info_set(info, "cb_nodes", value);
fd->hints->cb_nodes = nprocs;
}
@@ -259,6 +261,7 @@ void ADIOI_GEN_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
len = (strlen(ADIOI_CB_CONFIG_LIST_DFLT)+1) * sizeof(char);
fd->hints->cb_config_list = ADIOI_Malloc(len);
if (fd->hints->cb_config_list == NULL) {
+ ADIOI_Free(value);
*error_code = MPIO_Err_create_code(*error_code,
MPIR_ERR_RECOVERABLE,
myname,
diff --git a/src/mpi/romio/adio/common/ad_init.c b/src/mpi/romio/adio/common/ad_init.c
index 88e75a5..fd1b167 100644
--- a/src/mpi/romio/adio/common/ad_init.c
+++ b/src/mpi/romio/adio/common/ad_init.c
@@ -7,7 +7,6 @@
#include "adio.h"
-ADIOI_Flatlist_node *ADIOI_Flatlist = NULL;
ADIOI_Datarep *ADIOI_Datarep_head = NULL;
/* list of datareps registered by the user */
@@ -53,20 +52,13 @@ void ADIO_Init(int *argc, char ***argv, int *error_code)
char *c;
#endif
- ADIOI_UNREFERENCED_ARG(argc);
- ADIOI_UNREFERENCED_ARG(argv);
+ MPL_UNREFERENCED_ARG(argc);
+ MPL_UNREFERENCED_ARG(argv);
#ifdef ROMIO_INSIDE_MPICH
MPIR_Ext_init();
#endif
-/* initialize the linked list containing flattened datatypes */
- ADIOI_Flatlist = (ADIOI_Flatlist_node *) ADIOI_Malloc(sizeof(ADIOI_Flatlist_node));
- ADIOI_Flatlist->type = MPI_DATATYPE_NULL;
- ADIOI_Flatlist->next = NULL;
- ADIOI_Flatlist->blocklens = NULL;
- ADIOI_Flatlist->indices = NULL;
-
#if defined(ROMIO_XFS) || defined(ROMIO_LUSTRE)
c = getenv("MPIO_DIRECT_READ");
if (c && (!strcmp(c, "true") || !strcmp(c, "TRUE")))
diff --git a/src/mpi/romio/adio/common/ad_io_coll.c b/src/mpi/romio/adio/common/ad_io_coll.c
index 7e980e1..e2c4f16 100644
--- a/src/mpi/romio/adio/common/ad_io_coll.c
+++ b/src/mpi/romio/adio/common/ad_io_coll.c
@@ -142,9 +142,9 @@ void ADIOI_IOStridedColl (ADIO_File fd, void *buf, int count, int rdwr,
/* This is a rudimentary check for interleaving, but should
* suffice for the moment. */
- min_st_offset = ADIOI_MIN(all_st_end_offsets[i*2],
+ min_st_offset = MPL_MIN(all_st_end_offsets[i*2],
min_st_offset);
- max_end_offset = ADIOI_MAX(all_st_end_offsets[i*2+1],
+ max_end_offset = MPL_MAX(all_st_end_offsets[i*2+1],
max_end_offset);
}
}
@@ -631,14 +631,11 @@ void ADIOI_IOStridedColl (ADIO_File fd, void *buf, int count, int rdwr,
if (fd->hints->cb_pfr != ADIOI_HINT_ENABLE) {
/* AAR, FSIZE, and User provided uniform File realms */
if (1) {
- ADIOI_Delete_flattened (fd->file_realm_types[0]);
MPI_Type_free (&fd->file_realm_types[0]);
}
else {
for (i=0; i<fd->hints->cb_nodes; i++) {
ADIOI_Datatype_iscontig(fd->file_realm_types[i], &is_contig);
- if (!is_contig)
- ADIOI_Delete_flattened(fd->file_realm_types[i]);
MPI_Type_free (&fd->file_realm_types[i]);
}
}
@@ -646,11 +643,6 @@ void ADIOI_IOStridedColl (ADIO_File fd, void *buf, int count, int rdwr,
ADIOI_Free (fd->file_realm_st_offs);
}
- /* This memtype must be deleted from the ADIOI_Flatlist or else it
- * will match incorrectly with other datatypes which use this
- * pointer. */
- ADIOI_Delete_flattened(datatype);
- ADIOI_Delete_flattened(fd->filetype);
if (fd->is_agg) {
if (buffered_io_size > 0)
@@ -741,8 +733,7 @@ void ADIOI_Calc_bounds (ADIO_File fd, int count, MPI_Datatype buftype,
end_byte_off = st_byte_off + total_io - 1;
}
else {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
/* we need to take care of some weirdness since fd->fp_ind
points at an accessible byte in file. the first accessible
@@ -959,9 +950,6 @@ void ADIOI_IOFiletype(ADIO_File fd, void *buf, int count,
status, error_code);
}
- /* Delete flattened temporary filetype */
- if (!f_is_contig)
- ADIOI_Delete_flattened (custom_ftype);
/* restore the user specified file view to cover our tracks */
fd->filetype = user_filetype;
diff --git a/src/mpi/romio/adio/common/ad_iread_coll.c b/src/mpi/romio/adio/common/ad_iread_coll.c
index 2ec23fb..9fe2ead 100644
--- a/src/mpi/romio/adio/common/ad_iread_coll.c
+++ b/src/mpi/romio/adio/common/ad_iread_coll.c
@@ -9,7 +9,7 @@
#include "mpiu_greq.h"
#include "mpioimpl.h"
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define RDCOLL_DEBUG 1
#endif
#ifdef AGGREGATION_PROFILE
@@ -515,12 +515,10 @@ static void ADIOI_GEN_IreadStridedColl_free(ADIOI_NBC_Request *nbc_req,
{
ADIOI_GEN_IreadStridedColl_vars *vars = nbc_req->data.rd.rsc_vars;
ADIO_File fd = vars->fd;
- MPI_Datatype datatype = vars->datatype;
ADIOI_Access *others_req = vars->others_req;
int nprocs = vars->nprocs;
int i;
- if (!vars->buftype_is_contig) ADIOI_Delete_flattened(datatype);
/* free all memory allocated for collective I/O */
for (i = 0; i < nprocs; i++) {
@@ -614,8 +612,8 @@ static void ADIOI_Iread_and_exch(ADIOI_NBC_Request *nbc_req, int *error_code)
/* now find the real values */
for (i = 0; i < nprocs; i++)
for (j = 0; j < others_req[i].count; j++) {
- st_loc = ADIOI_MIN(st_loc, others_req[i].offsets[j]);
- end_loc = ADIOI_MAX(end_loc, (others_req[i].offsets[j]
+ st_loc = MPL_MIN(st_loc, others_req[i].offsets[j]);
+ end_loc = MPL_MAX(end_loc, (others_req[i].offsets[j]
+ others_req[i].lens[j] - 1));
}
@@ -754,7 +752,7 @@ static void ADIOI_Iread_and_exch_l1_begin(ADIOI_NBC_Request *nbc_req,
minus what was satisfied in previous iteration
req_size = size corresponding to req_off */
- size = ADIOI_MIN((unsigned)vars->coll_bufsize,
+ size = MPL_MIN((unsigned)vars->coll_bufsize,
vars->end_loc - vars->st_loc + 1 - vars->done);
real_off = vars->off - vars->for_curr_iter;
real_size = size + vars->for_curr_iter;
@@ -789,11 +787,11 @@ static void ADIOI_Iread_and_exch_l1_begin(ADIOI_NBC_Request *nbc_req,
}
if (req_off < real_off + real_size) {
count[i]++;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf) + req_off - real_off) == (ADIO_Offset)(MPIU_Upint)(read_buf + req_off - real_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)read_buf) + req_off - real_off) == (ADIO_Offset)(uintptr_t)(read_buf + req_off - real_off));
MPI_Address(read_buf + req_off - real_off,
&(others_req[i].mem_ptrs[j]));
ADIOI_Assert((real_off + real_size - req_off) == (int)(real_off + real_size - req_off));
- send_size[i] += (int)(ADIOI_MIN(real_off + real_size - req_off,
+ send_size[i] += (int)(MPL_MIN(real_off + real_size - req_off,
(ADIO_Offset)(unsigned)req_len));
if (real_off + real_size - req_off < (ADIO_Offset)(unsigned)req_len) {
@@ -802,7 +800,7 @@ static void ADIOI_Iread_and_exch_l1_begin(ADIOI_NBC_Request *nbc_req,
(others_req[i].offsets[j+1] < real_off + real_size)) {
/* this is the case illustrated in the
figure above. */
- for_next_iter = ADIOI_MAX(for_next_iter,
+ for_next_iter = MPL_MAX(for_next_iter,
real_off + real_size - others_req[i].offsets[j+1]);
/* max because it must cover requests
from different processes */
@@ -885,7 +883,7 @@ static void ADIOI_Iread_and_exch_l1_end(ADIOI_NBC_Request *nbc_req,
if (for_next_iter) {
tmp_buf = (char *)ADIOI_Malloc(for_next_iter);
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(MPIU_Upint)(read_buf+real_size-for_next_iter));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(uintptr_t)(read_buf+real_size-for_next_iter));
ADIOI_Assert((for_next_iter+vars->coll_bufsize) == (size_t)(for_next_iter+vars->coll_bufsize));
memcpy(tmp_buf, read_buf+real_size-for_next_iter, for_next_iter);
ADIOI_Free(fd->io_buf);
diff --git a/src/mpi/romio/adio/common/ad_iwrite.c b/src/mpi/romio/adio/common/ad_iwrite.c
index 0a3d97e..e72af5f 100644
--- a/src/mpi/romio/adio/common/ad_iwrite.c
+++ b/src/mpi/romio/adio/common/ad_iwrite.c
@@ -162,6 +162,8 @@ int ADIOI_GEN_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset,
if (aio_req != NULL) ADIOI_Free(aio_req);
return 0;
} else {
+ ADIOI_Free(aio_req);
+ ADIOI_Free(aiocbp);
return errno;
}
}
diff --git a/src/mpi/romio/adio/common/ad_iwrite_coll.c b/src/mpi/romio/adio/common/ad_iwrite_coll.c
index d275f78..62a932c 100644
--- a/src/mpi/romio/adio/common/ad_iwrite_coll.c
+++ b/src/mpi/romio/adio/common/ad_iwrite_coll.c
@@ -549,7 +549,6 @@ static void ADIOI_GEN_IwriteStridedColl_free(ADIOI_NBC_Request *nbc_req,
{
ADIOI_GEN_IwriteStridedColl_vars *vars = nbc_req->data.wr.wsc_vars;
ADIO_File fd = vars->fd;
- MPI_Datatype datatype = vars->datatype;
ADIOI_Access *others_req = vars->others_req;
int nprocs = vars->nprocs;
int old_error = vars->old_error;
@@ -566,8 +565,6 @@ static void ADIOI_GEN_IwriteStridedColl_free(ADIOI_NBC_Request *nbc_req,
*error_code = old_error;
- if (!vars->buftype_is_contig) ADIOI_Delete_flattened(datatype);
-
/* free all memory allocated for collective I/O */
for (i = 0; i < nprocs; i++) {
if (others_req[i].count) {
@@ -663,8 +660,8 @@ static void ADIOI_Iexch_and_write(ADIOI_NBC_Request *nbc_req, int *error_code)
for (i = 0; i < nprocs; i++)
for (j = 0; j < others_req[i].count; j++) {
- st_loc = ADIOI_MIN(st_loc, others_req[i].offsets[j]);
- end_loc = ADIOI_MAX(end_loc, (others_req[i].offsets[j]
+ st_loc = MPL_MIN(st_loc, others_req[i].offsets[j]);
+ end_loc = MPL_MAX(end_loc, (others_req[i].offsets[j]
+ others_req[i].lens[j] - 1));
}
@@ -794,7 +791,7 @@ static void ADIOI_Iexch_and_write_l1_begin(ADIOI_NBC_Request *nbc_req,
for (i = 0; i < nprocs; i++) count[i] = recv_size[i] = 0;
- size = ADIOI_MIN((unsigned)vars->coll_bufsize,
+ size = MPL_MIN((unsigned)vars->coll_bufsize,
vars->end_loc - vars->st_loc + 1 - vars->done);
vars->size = size;
@@ -820,11 +817,11 @@ static void ADIOI_Iexch_and_write_l1_begin(ADIOI_NBC_Request *nbc_req,
}
if (req_off < off + size) {
count[i]++;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)write_buf)+req_off-off) == (ADIO_Offset)(MPIU_Upint)(write_buf+req_off-off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)write_buf)+req_off-off) == (ADIO_Offset)(uintptr_t)(write_buf+req_off-off));
MPI_Address(write_buf + req_off - off,
&(others_req[i].mem_ptrs[j]));
ADIOI_Assert((off + size - req_off) == (int)(off + size - req_off));
- recv_size[i] += (int)(ADIOI_MIN(off + size - req_off,
+ recv_size[i] += (int)(MPL_MIN(off + size - req_off,
(unsigned)req_len));
if (off+size-req_off < (unsigned)req_len)
diff --git a/src/mpi/romio/adio/common/ad_open.c b/src/mpi/romio/adio/common/ad_open.c
index 04468de..5cdb94c 100644
--- a/src/mpi/romio/adio/common/ad_open.c
+++ b/src/mpi/romio/adio/common/ad_open.c
@@ -38,6 +38,15 @@ MPI_File ADIO_Open(MPI_Comm orig_comm,
/* obtain MPI_File handle */
mpi_fh = MPIO_File_create(sizeof(struct ADIOI_FileD));
if (mpi_fh == MPI_FILE_NULL) {
+ fd = MPI_FILE_NULL;
+ *error_code = MPIO_Err_create_code(*error_code,
+ MPIR_ERR_RECOVERABLE,
+ myname,
+ __LINE__,
+ MPI_ERR_OTHER,
+ "**nomem2",0);
+ goto fn_exit;
+
}
fd = MPIO_File_resolve(mpi_fh);
@@ -192,12 +201,12 @@ MPI_File ADIO_Open(MPI_Comm orig_comm,
(*(fd->fns->ADIOI_xxx_Close))(fd, error_code);
}
}
- if (fd->filename) ADIOI_Free(fd->filename);
- if (fd->hints->ranklist) ADIOI_Free(fd->hints->ranklist);
- if (fd->hints->cb_config_list) ADIOI_Free(fd->hints->cb_config_list);
- if (fd->hints) ADIOI_Free(fd->hints);
+ ADIOI_Free(fd->filename);
+ ADIOI_Free(fd->hints->ranklist);
+ ADIOI_Free(fd->hints->cb_config_list);
+ ADIOI_Free(fd->hints);
if (fd->info != MPI_INFO_NULL) MPI_Info_free(&(fd->info));
- if (fd->io_buf) ADIOI_Free(fd->io_buf);
+ ADIOI_Free(fd->io_buf);
ADIOI_Free(fd);
fd = ADIO_FILE_NULL;
if (*error_code == MPI_SUCCESS)
@@ -298,7 +307,7 @@ static int build_cb_config_list(ADIO_File fd,
fd->hints->cb_nodes = rank_ct;
/* TEMPORARY -- REMOVE WHEN NO LONGER UPDATING INFO FOR FS-INDEP. */
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", rank_ct);
+ MPL_snprintf(value, MPI_MAX_INFO_VAL+1, "%d", rank_ct);
ADIOI_Info_set(fd->info, "cb_nodes", value);
ADIOI_Free(value);
}
diff --git a/src/mpi/romio/adio/common/ad_opencoll.c b/src/mpi/romio/adio/common/ad_opencoll.c
index 467a322..712d0e9 100644
--- a/src/mpi/romio/adio/common/ad_opencoll.c
+++ b/src/mpi/romio/adio/common/ad_opencoll.c
@@ -21,11 +21,52 @@
* on MPI-IO scalability").
*/
+enum {
+ BLOCKSIZE = 0,
+ STRIPE_SIZE,
+ STRIPE_FACTOR,
+ START_IODEVICE,
+ STAT_ITEMS
+} file_stats;
+
+
+/* generate an MPI datatype describing the members of the ADIO_File struct that
+ * we want to ensure all processes have. In deferred open, aggregators will
+ * open the file and possibly read layout and other information.
+ * non-aggregators will skip the open, but still need to know how the file is
+ * being treated and what optimizations to apply */
+
+static MPI_Datatype make_stats_type(ADIO_File fd) {
+ int lens[STAT_ITEMS];
+ MPI_Aint offsets[STAT_ITEMS];
+ MPI_Datatype types[STAT_ITEMS];
+ MPI_Datatype newtype;
+
+ lens[BLOCKSIZE] = 1;
+ MPI_Address(&fd->blksize, &offsets[BLOCKSIZE]);
+ types[BLOCKSIZE] = MPI_LONG;
+
+ lens[STRIPE_SIZE]= lens[STRIPE_FACTOR]= lens[START_IODEVICE] = 1;
+ types[STRIPE_SIZE] = types[STRIPE_FACTOR] =
+ types[START_IODEVICE] = MPI_INT;
+ MPI_Address(&fd->hints->striping_unit, &offsets[STRIPE_SIZE]);
+ MPI_Address(&fd->hints->striping_factor, &offsets[STRIPE_FACTOR]);
+ MPI_Address(&fd->hints->start_iodevice, &offsets[START_IODEVICE]);
+
+
+ MPI_Type_create_struct(STAT_ITEMS, lens, offsets, types, &newtype);
+ MPI_Type_commit(&newtype);
+ return newtype;
+
+}
void ADIOI_GEN_OpenColl(ADIO_File fd, int rank,
int access_mode, int *error_code)
{
int orig_amode_excl, orig_amode_wronly;
MPI_Comm tmp_comm;
+ MPI_Datatype stats_type; /* deferred open: some processes might not
+ open the file, so we'll exchange some
+ information with those non-aggregators */
orig_amode_excl = access_mode;
@@ -68,6 +109,7 @@ void ADIOI_GEN_OpenColl(ADIO_File fd, int rank,
/* if we are doing deferred open, non-aggregators should return now */
if (fd->hints->deferred_open ) {
if (!(fd->is_agg)) {
+ char value[MPI_MAX_INFO_VAL+1];
/* we might have turned off EXCL for the aggregators.
* restore access_mode that non-aggregators get the right
* value from get_amode */
@@ -78,9 +120,24 @@ void ADIOI_GEN_OpenColl(ADIO_File fd, int rank,
* this open call. Broadcast a bit of information in case
* lower-level file system driver (e.g. 'bluegene') collected it
* (not all do)*/
- MPI_Bcast(&(fd->blksize), 1, MPI_LONG, fd->hints->ranklist[0], fd->comm);
- *error_code = MPI_SUCCESS;
+ stats_type = make_stats_type(fd);
+ MPI_Bcast(MPI_BOTTOM, 1, stats_type, fd->hints->ranklist[0], fd->comm);
ADIOI_Assert(fd->blksize > 0);
+ /* some file systems (e.g. lustre) will inform the user via the
+ * info object about the file configuration. deferred open,
+ * though, skips that step for non-aggregators. we do the
+ * info-setting here */
+ sprintf(value, "%d", fd->hints->striping_unit);
+ ADIOI_Info_set(fd->info, "striping_unit", value);
+
+ sprintf(value, "%d", fd->hints->striping_factor);
+ ADIOI_Info_set(fd->info, "striping_factor", value);
+
+ sprintf(value, "%d", fd->hints->start_iodevice);
+ ADIOI_Info_set(fd->info, "romio_lustre_start_iodevice", value);
+
+ *error_code = MPI_SUCCESS;
+ MPI_Type_free(&stats_type);
return;
}
}
@@ -112,12 +169,16 @@ void ADIOI_GEN_OpenColl(ADIO_File fd, int rank,
/* if we turned off EXCL earlier, then we should turn it back on */
if (fd->access_mode != orig_amode_excl) fd->access_mode = orig_amode_excl;
- /* broadcast a bit of information (blocksize for now) to all proceses in
+ /* broadcast information to all proceses in
* communicator, not just those who participated in open */
- MPI_Bcast(&(fd->blksize), 1, MPI_LONG, fd->hints->ranklist[0], fd->comm);
+
+ stats_type = make_stats_type(fd);
+ MPI_Bcast(MPI_BOTTOM, 1, stats_type, fd->hints->ranklist[0], fd->comm);
+ MPI_Type_free(&stats_type);
/* file domain code will get terribly confused in a hard-to-debug way if
* gpfs blocksize not sensible */
ADIOI_Assert( fd->blksize > 0);
+
/* for deferred open: this process has opened the file (because if we are
* not an aggregaor and we are doing deferred open, we returned earlier)*/
fd->is_open = 1;
diff --git a/src/mpi/romio/adio/common/ad_opencoll_failsafe.c b/src/mpi/romio/adio/common/ad_opencoll_failsafe.c
index e7ac871..962f191 100644
--- a/src/mpi/romio/adio/common/ad_opencoll_failsafe.c
+++ b/src/mpi/romio/adio/common/ad_opencoll_failsafe.c
@@ -15,6 +15,7 @@
void ADIOI_FAILSAFE_OpenColl(ADIO_File fd, int rank,
int access_mode, int *error_code)
{
+ MPI_Comm tmp_comm;
int orig_amode_excl, orig_amode_wronly;
orig_amode_excl = access_mode;
@@ -25,12 +26,20 @@ void ADIOI_FAILSAFE_OpenColl(ADIO_File fd, int rank,
* and others who reach later will return error. */
if(rank == fd->hints->ranklist[0]) {
fd->access_mode = access_mode;
+
+ /* if the lower-level file system tries to communicate, COMM_SELF
+ * will ensure it doesn't get stuck waiting for non-existant
+ * participants */
+ tmp_comm = fd->comm;
+ fd->comm = MPI_COMM_SELF;
(*(fd->fns->ADIOI_xxx_Open))(fd, error_code);
MPI_Bcast(error_code, 1, MPI_INT, \
- fd->hints->ranklist[0], fd->comm);
+ fd->hints->ranklist[0], tmp_comm);
/* if no error, close the file and reopen normally below */
if (*error_code == MPI_SUCCESS)
(*(fd->fns->ADIOI_xxx_Close))(fd, error_code);
+ /* and put it all back the way we found it for subsequent code */
+ fd->comm = tmp_comm;
}
else MPI_Bcast(error_code, 1, MPI_INT,
fd->hints->ranklist[0], fd->comm);
diff --git a/src/mpi/romio/adio/common/ad_prealloc.c b/src/mpi/romio/adio/common/ad_prealloc.c
index 9462f77..58168e8 100644
--- a/src/mpi/romio/adio/common/ad_prealloc.c
+++ b/src/mpi/romio/adio/common/ad_prealloc.c
@@ -39,14 +39,14 @@ void ADIOI_GEN_Prealloc(ADIO_File fd, ADIO_Offset diskspace, int *error_code)
working on a pre-existing file */
alloc_size = diskspace;
- size = ADIOI_MIN(curr_fsize, alloc_size);
+ size = MPL_MIN(curr_fsize, alloc_size);
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
buf = (char *) ADIOI_Malloc(ADIOI_PREALLOC_BUFSZ);
done = 0;
for (i=0; i<ntimes; i++) {
- len = ADIOI_MIN(size-done, ADIOI_PREALLOC_BUFSZ);
+ len = MPL_MIN(size-done, ADIOI_PREALLOC_BUFSZ);
ADIO_ReadContig(fd, buf,
(int)len, /* len is ADIO_Offset but is <= ADIOI_PREALLOC_BUFSZ (16M),
so it fits in an int parameter */
@@ -75,7 +75,7 @@ void ADIOI_GEN_Prealloc(ADIO_File fd, ADIO_Offset diskspace, int *error_code)
size = alloc_size - curr_fsize;
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
for (i=0; i<ntimes; i++) {
- len = ADIOI_MIN(alloc_size-done, ADIOI_PREALLOC_BUFSZ);
+ len = MPL_MIN(alloc_size-done, ADIOI_PREALLOC_BUFSZ);
ADIO_WriteContig(fd, buf,
(int)len, /* len is ADIO_Offset but is <= ADIOI_PREALLOC_BUFSZ (16M),
so it fits in an int parameter */
diff --git a/src/mpi/romio/adio/common/ad_read.c b/src/mpi/romio/adio/common/ad_read.c
index 19f2908..75b6c48 100644
--- a/src/mpi/romio/adio/common/ad_read.c
+++ b/src/mpi/romio/adio/common/ad_read.c
@@ -6,9 +6,9 @@
*/
+#include "adio.h"
#include <unistd.h>
-#include "adio.h"
#ifdef AGGREGATION_PROFILE
#include "mpe.h"
#endif
diff --git a/src/mpi/romio/adio/common/ad_read_coll.c b/src/mpi/romio/adio/common/ad_read_coll.c
index 4cd481b..0335374 100644
--- a/src/mpi/romio/adio/common/ad_read_coll.c
+++ b/src/mpi/romio/adio/common/ad_read_coll.c
@@ -8,7 +8,7 @@
#include "adio.h"
#include "adio_extern.h"
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define RDCOLL_DEBUG 1
#endif
#ifdef AGGREGATION_PROFILE
@@ -242,7 +242,6 @@ void ADIOI_GEN_ReadStridedColl(ADIO_File fd, void *buf, int count,
len_list, contig_access_count, min_st_offset,
fd_size, fd_start, fd_end, buf_idx, error_code);
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
/* free all memory allocated for collective I/O */
for (i=0; i<nprocs; i++) {
@@ -351,9 +350,7 @@ void ADIOI_Calc_my_off_len(ADIO_File fd, int bufcount, MPI_Datatype
/* First calculate what size of offset_list and len_list to allocate */
- /* filetype already flattened in ADIO_Open or ADIO_Fcntl */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
#ifdef RDCOLL_DEBUG
@@ -422,12 +419,12 @@ void ADIOI_Calc_my_off_len(ADIO_File fd, int bufcount, MPI_Datatype
contig_access_count = i_offset = 0;
j = st_index;
bufsize = (ADIO_Offset)buftype_size * (ADIO_Offset)bufcount;
- frd_size = ADIOI_MIN(frd_size, bufsize);
+ frd_size = MPL_MIN(frd_size, bufsize);
while (i_offset < bufsize) {
if (frd_size) contig_access_count++;
i_offset += frd_size;
j = (j + 1) % flat_file->count;
- frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i_offset);
+ frd_size = MPL_MIN(flat_file->blocklens[j], bufsize-i_offset);
}
/* allocate space for offset_list and len_list */
@@ -447,7 +444,7 @@ void ADIOI_Calc_my_off_len(ADIO_File fd, int bufcount, MPI_Datatype
i_offset = k = 0;
j = st_index;
off = offset;
- frd_size = ADIOI_MIN(old_frd_size, bufsize);
+ frd_size = MPL_MIN(old_frd_size, bufsize);
while (i_offset < bufsize) {
if (frd_size) {
offset_list[k] = off;
@@ -480,7 +477,7 @@ void ADIOI_Calc_my_off_len(ADIO_File fd, int bufcount, MPI_Datatype
}
off = disp + flat_file->indices[j] +
n_filetypes* (ADIO_Offset)filetype_extent;
- frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i_offset);
+ frd_size = MPL_MIN(flat_file->blocklens[j], bufsize-i_offset);
}
}
@@ -549,8 +546,8 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
/* now find the real values */
for (i=0; i < nprocs; i++)
for (j=0; j<others_req[i].count; j++) {
- st_loc = ADIOI_MIN(st_loc, others_req[i].offsets[j]);
- end_loc = ADIOI_MAX(end_loc, (others_req[i].offsets[j]
+ st_loc = MPL_MIN(st_loc, others_req[i].offsets[j]);
+ end_loc = MPL_MAX(end_loc, (others_req[i].offsets[j]
+ others_req[i].lens[j] - 1));
}
@@ -649,7 +646,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
minus what was satisfied in previous iteration
req_size = size corresponding to req_off */
- size = ADIOI_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
+ size = MPL_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
real_off = off - for_curr_iter;
real_size = size + for_curr_iter;
@@ -682,11 +679,11 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
}
if (req_off < real_off + real_size) {
count[i]++;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf)+req_off-real_off) == (ADIO_Offset)(MPIU_Upint)(read_buf+req_off-real_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)read_buf)+req_off-real_off) == (ADIO_Offset)(uintptr_t)(read_buf+req_off-real_off));
MPI_Address(read_buf+req_off-real_off,
&(others_req[i].mem_ptrs[j]));
ADIOI_Assert((real_off + real_size - req_off) == (int)(real_off + real_size - req_off));
- send_size[i] += (int)(ADIOI_MIN(real_off + real_size - req_off,
+ send_size[i] += (int)(MPL_MIN(real_off + real_size - req_off,
(ADIO_Offset)(unsigned)req_len));
if (real_off+real_size-req_off < (ADIO_Offset)(unsigned)req_len) {
@@ -696,7 +693,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
real_off+real_size)) {
/* this is the case illustrated in the
figure above. */
- for_next_iter = ADIOI_MAX(for_next_iter,
+ for_next_iter = MPL_MAX(for_next_iter,
real_off + real_size - others_req[i].offsets[j+1]);
/* max because it must cover requests
from different processes */
@@ -735,7 +732,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
if (for_next_iter) {
tmp_buf = (char *) ADIOI_Malloc(for_next_iter);
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(MPIU_Upint)(read_buf+real_size-for_next_iter));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(uintptr_t)(read_buf+real_size-for_next_iter));
ADIOI_Assert((for_next_iter+coll_bufsize) == (size_t)(for_next_iter+coll_bufsize));
memcpy(tmp_buf, read_buf+real_size-for_next_iter, for_next_iter);
ADIOI_Free(fd->io_buf);
@@ -907,7 +904,7 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
#define ADIOI_BUF_INCR \
{ \
while (buf_incr) { \
- size_in_buf = ADIOI_MIN(buf_incr, flat_buf_sz); \
+ size_in_buf = MPL_MIN(buf_incr, flat_buf_sz); \
user_buf_idx += size_in_buf; \
flat_buf_sz -= size_in_buf; \
if (!flat_buf_sz) { \
@@ -928,8 +925,8 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
#define ADIOI_BUF_COPY \
{ \
while (size) { \
- size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + user_buf_idx)); \
+ size_in_buf = MPL_MIN(size, flat_buf_sz); \
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + user_buf_idx) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + user_buf_idx)); \
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
memcpy(((char *) buf) + user_buf_idx, \
&(recv_buf[p][recv_buf_idx[p]]), size_in_buf); \
@@ -974,8 +971,8 @@ void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
/* Not sure unsigned is necessary, but it makes the math safer */
unsigned *curr_from_proc, *done_from_proc, *recv_buf_idx;
- ADIOI_UNREFERENCED_ARG(requests);
- ADIOI_UNREFERENCED_ARG(statuses);
+ MPL_UNREFERENCED_ARG(requests);
+ MPL_UNREFERENCED_ARG(statuses);
/* curr_from_proc[p] = amount of data recd from proc. p that has already
been accounted for so far
@@ -1023,7 +1020,7 @@ void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
if (recv_buf_idx[p] < recv_size[p]) {
if (curr_from_proc[p]+len > done_from_proc[p]) {
if (done_from_proc[p] > curr_from_proc[p]) {
- size = ADIOI_MIN(curr_from_proc[p] + len -
+ size = MPL_MIN(curr_from_proc[p] + len -
done_from_proc[p], recv_size[p]-recv_buf_idx[p]);
buf_incr = done_from_proc[p] - curr_from_proc[p];
ADIOI_BUF_INCR
@@ -1033,7 +1030,7 @@ void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
ADIOI_BUF_COPY
}
else {
- size = ADIOI_MIN(len,recv_size[p]-recv_buf_idx[p]);
+ size = MPL_MIN(len,recv_size[p]-recv_buf_idx[p]);
buf_incr = len;
ADIOI_Assert((curr_from_proc[p] + size) == (unsigned)((ADIO_Offset)curr_from_proc[p] + size));
curr_from_proc[p] += (unsigned) size;
diff --git a/src/mpi/romio/adio/common/ad_read_str.c b/src/mpi/romio/adio/common/ad_read_str.c
index 9b22a44..08c1389 100644
--- a/src/mpi/romio/adio/common/ad_read_str.c
+++ b/src/mpi/romio/adio/common/ad_read_str.c
@@ -12,7 +12,7 @@
{ \
if (req_off >= readbuf_off + readbuf_len) { \
readbuf_off = req_off; \
- readbuf_len = (unsigned) (ADIOI_MIN(max_bufsize, end_offset-readbuf_off+1));\
+ readbuf_len = (unsigned) (MPL_MIN(max_bufsize, end_offset-readbuf_off+1));\
ADIO_ReadContig(fd, readbuf, readbuf_len, MPI_BYTE, \
ADIO_EXPLICIT_OFFSET, readbuf_off, &status1, error_code); \
if (*error_code != MPI_SUCCESS) return; \
@@ -27,7 +27,7 @@
memcpy(readbuf, tmp_buf, partial_read); \
ADIOI_Free(tmp_buf); \
readbuf_off += readbuf_len-partial_read; \
- readbuf_len = (unsigned) (partial_read + ADIOI_MIN(max_bufsize, \
+ readbuf_len = (unsigned) (partial_read + MPL_MIN(max_bufsize, \
end_offset-readbuf_off+1)); \
ADIO_ReadContig(fd, readbuf+partial_read, readbuf_len-partial_read, \
MPI_BYTE, ADIO_EXPLICIT_OFFSET, readbuf_off+partial_read, \
@@ -124,7 +124,7 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
end_offset = off + bufsize - 1;
readbuf_off = off;
readbuf = (char *) ADIOI_Malloc(max_bufsize);
- readbuf_len = (unsigned) (ADIOI_MIN(max_bufsize, end_offset-readbuf_off+1));
+ readbuf_len = (unsigned) (MPL_MIN(max_bufsize, end_offset-readbuf_off+1));
/* if atomicity is true, lock (exclusive) the region to be accessed */
if ((fd->atomicity) && ADIO_Feature(fd, ADIO_LOCKS))
@@ -155,9 +155,7 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
else { /* noncontiguous in file */
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
@@ -251,7 +249,7 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
i_offset = 0;
j = st_index;
off = offset;
- frd_size = ADIOI_MIN(st_frd_size, bufsize);
+ frd_size = MPL_MIN(st_frd_size, bufsize);
while (i_offset < bufsize) {
i_offset += frd_size;
end_offset = off + frd_size - 1;
@@ -263,7 +261,7 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
n_filetypes += (j == 0) ? 1 : 0;
}
off = disp + flat_file->indices[j] + n_filetypes*(ADIO_Offset)filetype_extent;
- frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i_offset);
+ frd_size = MPL_MIN(flat_file->blocklens[j], bufsize-i_offset);
}
/* if atomicity is true, lock (exclusive) the region to be accessed */
@@ -283,7 +281,7 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
j = st_index;
off = offset;
n_filetypes = st_n_filetypes;
- frd_size = ADIOI_MIN(st_frd_size, bufsize);
+ frd_size = MPL_MIN(st_frd_size, bufsize);
while (i_offset < bufsize) {
if (frd_size) {
/* TYPE_UB and TYPE_LB can result in
@@ -312,7 +310,7 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
}
off = disp + flat_file->indices[j] +
n_filetypes*(ADIO_Offset)filetype_extent;
- frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i_offset);
+ frd_size = MPL_MIN(flat_file->blocklens[j], bufsize-i_offset);
}
}
}
@@ -330,7 +328,7 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
brd_size = flat_buf->blocklens[0];
while (num < bufsize) {
- size = ADIOI_MIN(frd_size, brd_size);
+ size = MPL_MIN(frd_size, brd_size);
if (size) {
/* lseek(fd->fd_sys, off, SEEK_SET);
err = read(fd->fd_sys, ((char *) buf) + i, size); */
@@ -399,5 +397,4 @@ void ADIOI_GEN_ReadStrided(ADIO_File fd, void *buf, int count,
by ADIOI_BUFFERED_READ. */
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
}
diff --git a/src/mpi/romio/adio/common/ad_read_str_naive.c b/src/mpi/romio/adio/common/ad_read_str_naive.c
index 44abee7..7be46ba 100644
--- a/src/mpi/romio/adio/common/ad_read_str_naive.c
+++ b/src/mpi/romio/adio/common/ad_read_str_naive.c
@@ -81,7 +81,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
req_off = off;
req_len = flat_buf->blocklens[b_index];
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + userbuf_off) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + userbuf_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + userbuf_off) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + userbuf_off));
ADIOI_Assert(req_len == (int) req_len);
ADIO_ReadContig(fd,
(char *) buf + userbuf_off,
@@ -127,9 +127,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
*
*/
- /* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
@@ -192,7 +190,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
userbuf_off = 0;
f_index = st_index;
off = start_off;
- frd_size = ADIOI_MIN(st_frd_size, bufsize);
+ frd_size = MPL_MIN(st_frd_size, bufsize);
while (userbuf_off < bufsize) {
userbuf_off += frd_size;
end_offset = off + frd_size - 1;
@@ -205,7 +203,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
off = disp + flat_file->indices[f_index] +
n_filetypes*(ADIO_Offset)filetype_extent;
- frd_size = ADIOI_MIN(flat_file->blocklens[f_index],
+ frd_size = MPL_MIN(flat_file->blocklens[f_index],
bufsize-(unsigned)userbuf_off);
}
@@ -233,7 +231,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
f_index = st_index;
off = start_off;
n_filetypes = st_n_filetypes;
- frd_size = ADIOI_MIN(st_frd_size, bufsize);
+ frd_size = MPL_MIN(st_frd_size, bufsize);
/* while there is still space in the buffer, read more data */
while (userbuf_off < bufsize) {
@@ -243,7 +241,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
req_off = off;
req_len = frd_size;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + userbuf_off) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + userbuf_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + userbuf_off) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + userbuf_off));
ADIOI_Assert(req_len == (int) req_len);
ADIO_ReadContig(fd,
(char *) buf + userbuf_off,
@@ -278,7 +276,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
}
off = disp + flat_file->indices[f_index] +
n_filetypes*(ADIO_Offset)filetype_extent;
- frd_size = ADIOI_MIN(flat_file->blocklens[f_index],
+ frd_size = MPL_MIN(flat_file->blocklens[f_index],
bufsize-(unsigned)userbuf_off);
}
}
@@ -301,13 +299,13 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
while (tmp_bufsize < bufsize) {
ADIO_Offset new_brd_size = brd_size, new_frd_size = frd_size;
- size = ADIOI_MIN(frd_size, brd_size);
+ size = MPL_MIN(frd_size, brd_size);
if (size) {
req_off = off;
req_len = size;
userbuf_off = i_offset;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + userbuf_off) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + userbuf_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + userbuf_off) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + userbuf_off));
ADIOI_Assert(req_len == (int) req_len);
ADIO_ReadContig(fd,
(char *) buf + userbuf_off,
@@ -358,8 +356,7 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
}
/* unlock the file region if we locked it */
- if ((fd->atomicity) && (fd->file_system != ADIO_PIOFS) &&
- (fd->file_system != ADIO_PVFS) && (fd->file_system != ADIO_PVFS2))
+ if ((fd->atomicity) && ADIO_Feature(fd, ADIO_LOCKS))
{
ADIOI_UNLOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
}
@@ -376,5 +373,4 @@ void ADIOI_GEN_ReadStrided_naive(ADIO_File fd, void *buf, int count,
*/
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(buftype);
}
diff --git a/src/mpi/romio/adio/common/ad_seek.c b/src/mpi/romio/adio/common/ad_seek.c
index ceaf6f2..62c67cb 100644
--- a/src/mpi/romio/adio/common/ad_seek.c
+++ b/src/mpi/romio/adio/common/ad_seek.c
@@ -30,15 +30,14 @@ ADIO_Offset ADIOI_GEN_SeekIndividual(ADIO_File fd, ADIO_Offset offset,
int filetype_is_contig;
MPI_Aint filetype_extent;
- ADIOI_UNREFERENCED_ARG(whence);
+ MPL_UNREFERENCED_ARG(whence);
ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
etype_size = fd->etype_size;
if (filetype_is_contig) off = fd->disp + etype_size * offset;
else {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
MPI_Type_extent(fd->filetype, &filetype_extent);
MPI_Type_size_x(fd->filetype, &filetype_size);
diff --git a/src/mpi/romio/adio/common/ad_set_view.c b/src/mpi/romio/adio/common/ad_set_view.c
index 31aa6c6..449cf22 100644
--- a/src/mpi/romio/adio/common/ad_set_view.c
+++ b/src/mpi/romio/adio/common/ad_set_view.c
@@ -25,7 +25,6 @@ void ADIO_Set_view(ADIO_File fd, ADIO_Offset disp, MPI_Datatype etype,
if (combiner != MPI_COMBINER_NAMED) MPI_Type_free(&(fd->etype));
ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
- if (!filetype_is_contig) ADIOI_Delete_flattened(fd->filetype);
MPI_Type_get_envelope(fd->filetype, &i, &j, &k, &combiner);
if (combiner != MPI_COMBINER_NAMED) MPI_Type_free(&(fd->filetype));
@@ -49,10 +48,8 @@ void ADIO_Set_view(ADIO_File fd, ADIO_Offset disp, MPI_Datatype etype,
MPI_Type_contiguous(1, filetype, ©_filetype);
MPI_Type_commit(©_filetype);
fd->filetype = copy_filetype;
- ADIOI_Flatten_datatype(fd->filetype);
- /* this function will not flatten the filetype if it turns out
- to be all contiguous. */
}
+ ADIOI_Flatten_datatype(fd->filetype);
MPI_Type_size_x(fd->etype, &(fd->etype_size));
fd->disp = disp;
@@ -63,9 +60,7 @@ void ADIO_Set_view(ADIO_File fd, ADIO_Offset disp, MPI_Datatype etype,
ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
if (filetype_is_contig) fd->fp_ind = disp;
else {
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype)
- flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
for (i=0; i<flat_file->count; i++) {
if (flat_file->blocklens[i]) {
fd->fp_ind = disp + flat_file->indices[i];
diff --git a/src/mpi/romio/adio/common/ad_threaded_io.c b/src/mpi/romio/adio/common/ad_threaded_io.c
index a4b3da3..2436a7a 100644
--- a/src/mpi/romio/adio/common/ad_threaded_io.c
+++ b/src/mpi/romio/adio/common/ad_threaded_io.c
@@ -21,11 +21,11 @@ void *ADIOI_IO_Thread_Func(void *vptr_args) {
if (args->io_kind == ADIOI_READ) {
ADIO_ReadContig(args->fd, args->buf, args->size, MPI_BYTE,
ADIO_EXPLICIT_OFFSET, args->offset,
- &(args->status), &(args->error_code));
+ args->status, &(args->error_code));
} else {
ADIO_WriteContig(args->fd, args->buf, args->size, MPI_BYTE,
ADIO_EXPLICIT_OFFSET, args->offset,
- &(args->status), &(args->error_code));
+ args->status, &(args->error_code));
}
pthread_exit(&(args->error_code));
return NULL;
diff --git a/src/mpi/romio/adio/common/ad_tuning.c b/src/mpi/romio/adio/common/ad_tuning.c
new file mode 100644
index 0000000..fd39213
--- /dev/null
+++ b/src/mpi/romio/adio/common/ad_tuning.c
@@ -0,0 +1,111 @@
+/* ---------------------------------------------------------------- */
+/* (C)Copyright IBM Corp. 2007, 2008 */
+/* ---------------------------------------------------------------- */
+/**
+ * \file ad_tuning.c
+ * \brief Defines common performance tuning env var options
+ */
+
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * Copyright (C) 2008 University of Chicago.
+ * See COPYRIGHT notice in top-level directory.
+ */
+
+/*---------------------------------------------------------------------
+ * ad_tuning.c
+ *
+ * defines common global variables and functions for performance tuning
+ * and functional debugging.
+ *---------------------------------------------------------------------*/
+
+#include "ad_tuning.h"
+
+int romio_write_aggmethod;
+int romio_read_aggmethod;
+int romio_onesided_no_rmw;
+int romio_onesided_always_rmw;
+int romio_onesided_inform_rmw;
+int romio_tunegather;
+
+/* set internal variables for tuning environment variables */
+/** \page mpiio_vars MPIIO Configuration
+ \section env_sec Environment Variables
+ *
+ * - ROMIO_WRITE_AGGMETHOD/ROMIO_READ_AGGMETHOD - Replaces the two-phase
+ * collective IO aggregation
+ * with a one-sided algorithm, significantly reducing communication and
+ * memory overhead. Fully
+ * supports all datasets and datatypes, the only caveat is that any holes in the data
+ * when writing to a pre-existing file are ignored -- there is no read-modify-write
+ * support to maintain the correctness of regions of pre-existing data so every byte
+ * must be explicitly written to maintain correctness. Users must beware of middle-ware
+ * libraries like PNETCDF which may count on read-modify-write functionality for certain
+ * features (like fill values). Possible values:
+ * - 0 - Normal two-phase collective IO is used.
+ * - 1 - A separate one-sided MPI_Put or MPI_Get is used for each contigous chunk of data
+ * for a compute to write to or read from the collective buffer on the aggregator.
+ * - 2 - An MPI derived datatype is created using all the contigous chunks and just one
+ * call to MPI_Put or MPI_Get is done with the derived datatype. On Blue Gene /Q
+ * optimal performance for this is achieved when paired with PAMID_TYPED_ONESIDED=1.
+ * - Default is 0
+ *
+ * - ROMIO_ONESIDED_NO_RMW - For one-sided write aggregation (ROMIO_WRITE_AGGMETHOD = 1 or 2)
+ * disable the detection of holes in the data when writing to a pre-existing
+ * file requiring a read-modify-write, thereby avoiding the communication
+ * overhead for this detection.
+ * - 0 (hole detection enabled) or 1 (hole detection disabled)
+ * - Default is 0
+ *
+ * - ROMIO_ONESIDED_ALWAYS_RMW - For one-sided write aggregation (ROMIO_WRITE_AGGMETHOD = 1 or 2)
+ * always pre-read the offset range being written to a pre-existing file thereby filling
+ * any holes that may exist in the data before being written.
+ * - 0 (do not pre-read file offset range) or 1 (pre-read file offset range)
+ * - Default is 0
+ *
+ * - ROMIO_ONESIDED_INFORM_RMW - For one-sided aggregation
+ * (ROMIO_WRITE_AGGMETHOD = 1 or 2) generate an informational message informing
+ * the user whether holes exist in the data when writing to a pre-existing
+ * file requiring a read-modify-write, thereby educating the user to set
+ * ROMIO_ONESIDED_NO_RMW=1 on a future run to avoid the communication
+ * overhead for this detection.
+ * - 0 (disabled) or 1 (enabled)
+ * - Default is 0
+ *
+ * - ROMIO_TUNEGATHER - Tune how starting and ending offsets are communicated
+ * for aggregator collective i/o. Possible values:
+ * - 0 - Use two or three MPI_Allgather's to collect starting and ending offsets.
+ * - 1 - Use MPI_Allreduce(MPI_MAX) to collect starting and ending offsets.
+ * - Default is 1.
+ *
+ */
+
+void ad_get_env_vars() {
+ char *x;
+
+ romio_write_aggmethod = 0;
+ x = getenv( "ROMIO_WRITE_AGGMETHOD" );
+ if (x) romio_write_aggmethod = atoi(x);
+
+ romio_read_aggmethod = 0;
+ x = getenv( "ROMIO_READ_AGGMETHOD" );
+ if (x) romio_read_aggmethod = atoi(x);
+
+ romio_onesided_no_rmw = 0;
+ x = getenv( "ROMIO_ONESIDED_NO_RMW" );
+ if (x) romio_onesided_no_rmw = atoi(x);
+
+ romio_onesided_always_rmw = 0;
+ x = getenv( "ROMIO_ONESIDED_ALWAYS_RMW" );
+ if (x) romio_onesided_always_rmw = atoi(x);
+ if (romio_onesided_always_rmw)
+ romio_onesided_no_rmw = 1;
+
+ romio_onesided_inform_rmw = 0;
+ x = getenv( "ROMIO_ONESIDED_INFORM_RMW" );
+ if (x) romio_onesided_inform_rmw = atoi(x);
+
+ romio_tunegather = 1;
+ x = getenv( "ROMIO_TUNEGATHER" );
+ if (x) romio_tunegather = atoi(x);
+}
diff --git a/src/mpi/romio/adio/common/ad_write.c b/src/mpi/romio/adio/common/ad_write.c
index 34a31d9..d1c24ac 100644
--- a/src/mpi/romio/adio/common/ad_write.c
+++ b/src/mpi/romio/adio/common/ad_write.c
@@ -6,9 +6,9 @@
*/
+#include "adio.h"
#include <unistd.h>
-#include "adio.h"
#ifdef AGGREGATION_PROFILE
#include "mpe.h"
#endif
diff --git a/src/mpi/romio/adio/common/ad_write_coll.c b/src/mpi/romio/adio/common/ad_write_coll.c
index ce4d620..ac5aae7 100644
--- a/src/mpi/romio/adio/common/ad_write_coll.c
+++ b/src/mpi/romio/adio/common/ad_write_coll.c
@@ -248,8 +248,6 @@ void ADIOI_GEN_WriteStridedColl(ADIO_File fd, const void *buf, int count,
*error_code = old_error;
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
-
/* free all memory allocated for collective I/O */
for (i=0; i<nprocs; i++) {
@@ -350,8 +348,8 @@ static void ADIOI_Exch_and_write(ADIO_File fd, void *buf, MPI_Datatype
for (i=0; i < nprocs; i++)
for (j=0; j < others_req[i].count; j++) {
- st_loc = ADIOI_MIN(st_loc, others_req[i].offsets[j]);
- end_loc = ADIOI_MAX(end_loc, (others_req[i].offsets[j]
+ st_loc = MPL_MIN(st_loc, others_req[i].offsets[j]);
+ end_loc = MPL_MAX(end_loc, (others_req[i].offsets[j]
+ others_req[i].lens[j] - 1));
}
@@ -441,7 +439,7 @@ static void ADIOI_Exch_and_write(ADIO_File fd, void *buf, MPI_Datatype
for (i=0; i < nprocs; i++) count[i] = recv_size[i] = 0;
- size = ADIOI_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
+ size = MPL_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
for (i=0; i < nprocs; i++) {
if (others_req[i].count) {
@@ -465,11 +463,11 @@ static void ADIOI_Exch_and_write(ADIO_File fd, void *buf, MPI_Datatype
}
if (req_off < off + size) {
count[i]++;
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)write_buf)+req_off-off) == (ADIO_Offset)(MPIU_Upint)(write_buf+req_off-off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)write_buf)+req_off-off) == (ADIO_Offset)(uintptr_t)(write_buf+req_off-off));
MPI_Address(write_buf+req_off-off,
&(others_req[i].mem_ptrs[j]));
ADIOI_Assert((off + size - req_off) == (int)(off + size - req_off));
- recv_size[i] += (int)(ADIOI_MIN(off + size - req_off,
+ recv_size[i] += (int)(MPL_MIN(off + size - req_off,
(unsigned)req_len));
if (off+size-req_off < (unsigned)req_len)
@@ -809,7 +807,7 @@ static void ADIOI_W_Exchange_data(ADIO_File fd, void *buf, char *write_buf,
#define ADIOI_BUF_INCR \
{ \
while (buf_incr) { \
- size_in_buf = ADIOI_MIN(buf_incr, flat_buf_sz); \
+ size_in_buf = MPL_MIN(buf_incr, flat_buf_sz); \
user_buf_idx += size_in_buf; \
flat_buf_sz -= size_in_buf; \
if (!flat_buf_sz) { \
@@ -830,8 +828,8 @@ static void ADIOI_W_Exchange_data(ADIO_File fd, void *buf, char *write_buf,
#define ADIOI_BUF_COPY \
{ \
while (size) { \
- size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + user_buf_idx)); \
+ size_in_buf = MPL_MIN(size, flat_buf_sz); \
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + user_buf_idx) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + user_buf_idx)); \
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
memcpy(&(send_buf[p][send_buf_idx[p]]), \
((char *) buf) + user_buf_idx, size_in_buf); \
@@ -921,7 +919,7 @@ void ADIOI_Fill_send_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
if (send_buf_idx[p] < send_size[p]) {
if (curr_to_proc[p]+len > done_to_proc[p]) {
if (done_to_proc[p] > curr_to_proc[p]) {
- size = ADIOI_MIN(curr_to_proc[p] + len -
+ size = MPL_MIN(curr_to_proc[p] + len -
done_to_proc[p], send_size[p]-send_buf_idx[p]);
buf_incr = done_to_proc[p] - curr_to_proc[p];
ADIOI_BUF_INCR
@@ -933,7 +931,7 @@ void ADIOI_Fill_send_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
ADIOI_BUF_COPY
}
else {
- size = ADIOI_MIN(len,send_size[p]-send_buf_idx[p]);
+ size = MPL_MIN(len,send_size[p]-send_buf_idx[p]);
buf_incr = len;
ADIOI_Assert((curr_to_proc[p] + size) == (unsigned)((ADIO_Offset)curr_to_proc[p] + size));
curr_to_proc[p] += size;
diff --git a/src/mpi/romio/adio/common/ad_write_nolock.c b/src/mpi/romio/adio/common/ad_write_nolock.c
index e26474c..3f0fb6a 100644
--- a/src/mpi/romio/adio/common/ad_write_nolock.c
+++ b/src/mpi/romio/adio/common/ad_write_nolock.c
@@ -141,7 +141,7 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
flat_buf->blocklens[i]);
#endif
ADIOI_Assert(flat_buf->blocklens[i] == (unsigned)flat_buf->blocklens[i]);
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + (ADIO_Offset)j*(ADIO_Offset)buftype_extent + flat_buf->indices[i]) == (ADIO_Offset)((MPIU_Upint)buf + (ADIO_Offset)j*(ADIO_Offset)buftype_extent + flat_buf->indices[i]));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + (ADIO_Offset)j*(ADIO_Offset)buftype_extent + flat_buf->indices[i]) == (ADIO_Offset)((uintptr_t)buf + (ADIO_Offset)j*(ADIO_Offset)buftype_extent + flat_buf->indices[i]));
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
#endif
@@ -204,10 +204,8 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
/* find starting location in the file */
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
- disp = fd->disp;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
+ disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
offset = fd->fp_ind; /* in bytes */
@@ -261,7 +259,7 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
i_offset = 0;
j = st_index;
off = offset;
- fwr_size = ADIOI_MIN(fwr_size, bufsize);
+ fwr_size = MPL_MIN(fwr_size, bufsize);
while (i_offset < bufsize) {
if (fwr_size) {
/* TYPE_UB and TYPE_LB can result in
@@ -302,7 +300,7 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
}
off = disp + flat_file->indices[j] +
n_filetypes*(ADIO_Offset)filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i_offset);
+ fwr_size = MPL_MIN(flat_file->blocklens[j], bufsize-i_offset);
}
}
}
@@ -318,7 +316,7 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
bwr_size = flat_buf->blocklens[0];
while (num < bufsize) {
- size = ADIOI_MIN(fwr_size, bwr_size);
+ size = MPL_MIN(fwr_size, bwr_size);
if (size) {
#ifdef IO_DEBUG
printf("[%d/%d] nc mem nc file writing loc = %Ld sz = %d\n",
@@ -402,5 +400,4 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
}
diff --git a/src/mpi/romio/adio/common/ad_write_str.c b/src/mpi/romio/adio/common/ad_write_str.c
index 6c62a7c..878bc6e 100644
--- a/src/mpi/romio/adio/common/ad_write_str.c
+++ b/src/mpi/romio/adio/common/ad_write_str.c
@@ -24,7 +24,7 @@
} \
} \
writebuf_off = req_off; \
- writebuf_len = (unsigned) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (unsigned) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
if (!(fd->atomicity)) ADIOI_WRITE_LOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
ADIO_ReadContig(fd, writebuf, writebuf_len, MPI_BYTE, \
ADIO_EXPLICIT_OFFSET, writebuf_off, &status1, error_code); \
@@ -36,8 +36,8 @@
goto fn_exit; \
} \
} \
- write_sz = (unsigned) (ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
- ADIOI_Assert((ADIO_Offset)write_sz == ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off));\
+ write_sz = (unsigned) (MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ ADIOI_Assert((ADIO_Offset)write_sz == MPL_MIN(req_len, writebuf_off + writebuf_len - req_off));\
memcpy(writebuf+req_off-writebuf_off, (char *)buf +userbuf_off, write_sz);\
while (write_sz != req_len) { \
ADIO_WriteContig(fd, writebuf, writebuf_len, MPI_BYTE, \
@@ -53,7 +53,7 @@
req_len -= write_sz; \
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
- writebuf_len = (unsigned) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (unsigned) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
if (!(fd->atomicity)) ADIOI_WRITE_LOCK(fd, writebuf_off, SEEK_SET, writebuf_len); \
ADIO_ReadContig(fd, writebuf, writebuf_len, MPI_BYTE, \
ADIO_EXPLICIT_OFFSET, writebuf_off, &status1, error_code); \
@@ -64,7 +64,7 @@
"**iowsrc", 0); \
goto fn_exit; \
} \
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz);\
} \
}
@@ -85,10 +85,10 @@
goto fn_exit; \
} \
writebuf_off = req_off; \
- writebuf_len = (unsigned) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ writebuf_len = (unsigned) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
} \
- write_sz = (unsigned) (ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
- ADIOI_Assert((ADIO_Offset)write_sz == ADIOI_MIN(req_len, writebuf_off + writebuf_len - req_off));\
+ write_sz = (unsigned) (MPL_MIN(req_len, writebuf_off + writebuf_len - req_off)); \
+ ADIOI_Assert((ADIO_Offset)write_sz == MPL_MIN(req_len, writebuf_off + writebuf_len - req_off));\
memcpy(writebuf+req_off-writebuf_off, (char *)buf +userbuf_off, write_sz);\
while (write_sz != req_len) { \
ADIO_WriteContig(fd, writebuf, writebuf_len, MPI_BYTE, \
@@ -103,8 +103,8 @@
req_len -= write_sz; \
userbuf_off += write_sz; \
writebuf_off += writebuf_len; \
- writebuf_len = (unsigned) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));\
- write_sz = ADIOI_MIN(req_len, writebuf_len); \
+ writebuf_len = (unsigned) (MPL_MIN(max_bufsize,end_offset-writebuf_off+1));\
+ write_sz = MPL_MIN(req_len, writebuf_len); \
memcpy(writebuf, (char *)buf + userbuf_off, write_sz);\
} \
}
@@ -189,7 +189,7 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
end_offset = off + bufsize - 1;
writebuf_off = off;
writebuf = (char *) ADIOI_Malloc(max_bufsize);
- writebuf_len = (unsigned) (ADIOI_MIN(max_bufsize, end_offset-writebuf_off+1));
+ writebuf_len = (unsigned) (MPL_MIN(max_bufsize, end_offset-writebuf_off+1));
/* if atomicity is true, lock the region to be accessed */
if (fd->atomicity)
@@ -220,9 +220,7 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
else { /* noncontiguous in file */
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
@@ -321,7 +319,7 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
i_offset = 0;
j = st_index;
off = offset;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
while (i_offset < bufsize) {
i_offset += fwr_size;
end_offset = off + fwr_size - 1;
@@ -335,7 +333,7 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
off = disp + flat_file->indices[j] +
n_filetypes*(ADIO_Offset)filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i_offset);
+ fwr_size = MPL_MIN(flat_file->blocklens[j], bufsize-i_offset);
}
/* if atomicity is true, lock the region to be accessed */
@@ -356,7 +354,7 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
j = st_index;
off = offset;
n_filetypes = st_n_filetypes;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
while (i_offset < bufsize) {
if (fwr_size) {
/* TYPE_UB and TYPE_LB can result in
@@ -385,7 +383,7 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
}
off = disp + flat_file->indices[j] +
n_filetypes*(ADIO_Offset)filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[j],
+ fwr_size = MPL_MIN(flat_file->blocklens[j],
bufsize-i_offset);
}
}
@@ -404,7 +402,7 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
bwr_size = flat_buf->blocklens[0];
while (num < bufsize) {
- size = ADIOI_MIN(fwr_size, bwr_size);
+ size = MPL_MIN(fwr_size, bwr_size);
if (size) {
/* lseek(fd->fd_sys, off, SEEK_SET);
err = write(fd->fd_sys, ((char *) buf) + i_offset, size); */
@@ -479,7 +477,6 @@ void ADIOI_GEN_WriteStrided(ADIO_File fd, const void *buf, int count,
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(datatype);
fn_exit:
if (writebuf != NULL) ADIOI_Free(writebuf);
}
diff --git a/src/mpi/romio/adio/common/ad_write_str_naive.c b/src/mpi/romio/adio/common/ad_write_str_naive.c
index f004cd8..adcfc35 100644
--- a/src/mpi/romio/adio/common/ad_write_str_naive.c
+++ b/src/mpi/romio/adio/common/ad_write_str_naive.c
@@ -83,7 +83,7 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
req_len = flat_buf->blocklens[b_index];
ADIOI_Assert(req_len == (int) req_len);
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + userbuf_off) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + userbuf_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + userbuf_off) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + userbuf_off));
ADIO_WriteContig(fd,
(char *) buf + userbuf_off,
(int)req_len,
@@ -127,9 +127,7 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
*
*/
- /* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
disp = fd->disp;
if (file_ptr_type == ADIO_INDIVIDUAL) {
@@ -192,7 +190,7 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
userbuf_off = 0;
f_index = st_index;
off = start_off;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
while (userbuf_off < bufsize) {
userbuf_off += fwr_size;
end_offset = off + fwr_size - 1;
@@ -205,7 +203,7 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
off = disp + flat_file->indices[f_index] +
n_filetypes*(ADIO_Offset)filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[f_index],
+ fwr_size = MPL_MIN(flat_file->blocklens[f_index],
bufsize-(unsigned)userbuf_off);
}
@@ -233,7 +231,7 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
f_index = st_index;
off = start_off;
n_filetypes = st_n_filetypes;
- fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
+ fwr_size = MPL_MIN(st_fwr_size, bufsize);
/* while there is still space in the buffer, write more data */
while (userbuf_off < bufsize) {
@@ -244,7 +242,7 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
req_len = fwr_size;
ADIOI_Assert(req_len == (int) req_len);
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + userbuf_off) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + userbuf_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + userbuf_off) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + userbuf_off));
ADIO_WriteContig(fd,
(char *) buf + userbuf_off,
(int)req_len,
@@ -278,7 +276,7 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
}
off = disp + flat_file->indices[f_index] +
n_filetypes*(ADIO_Offset)filetype_extent;
- fwr_size = ADIOI_MIN(flat_file->blocklens[f_index],
+ fwr_size = MPL_MIN(flat_file->blocklens[f_index],
bufsize-(unsigned)userbuf_off);
}
}
@@ -301,14 +299,14 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
while (tmp_bufsize < bufsize) {
ADIO_Offset new_bwr_size = bwr_size, new_fwr_size = fwr_size;
- size = ADIOI_MIN(fwr_size, bwr_size);
+ size = MPL_MIN(fwr_size, bwr_size);
if (size) {
req_off = off;
req_len = size;
userbuf_off = i_offset;
ADIOI_Assert(req_len == (int) req_len);
- ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + userbuf_off) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + userbuf_off));
+ ADIOI_Assert((((ADIO_Offset)(uintptr_t)buf) + userbuf_off) == (ADIO_Offset)(uintptr_t)((uintptr_t)buf + userbuf_off));
ADIO_WriteContig(fd,
(char *) buf + userbuf_off,
(int)req_len,
@@ -375,5 +373,4 @@ void ADIOI_GEN_WriteStrided_naive(ADIO_File fd, const void *buf, int count,
*/
#endif
- if (!buftype_is_contig) ADIOI_Delete_flattened(buftype);
}
diff --git a/src/mpi/romio/adio/common/byte_offset.c b/src/mpi/romio/adio/common/byte_offset.c
index df0a240..94bcee5 100644
--- a/src/mpi/romio/adio/common/byte_offset.c
+++ b/src/mpi/romio/adio/common/byte_offset.c
@@ -25,9 +25,7 @@ void ADIOI_Get_byte_offset(ADIO_File fd, ADIO_Offset offset, ADIO_Offset *disp)
if (filetype_is_contig) *disp = fd->disp + etype_size * offset;
else {
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
MPI_Type_size_x(fd->filetype, &filetype_size);
n_etypes_in_filetype = filetype_size/etype_size;
diff --git a/src/mpi/romio/adio/common/cb_config_list.c b/src/mpi/romio/adio/common/cb_config_list.c
index 626709f..d8622c9 100644
--- a/src/mpi/romio/adio/common/cb_config_list.c
+++ b/src/mpi/romio/adio/common/cb_config_list.c
@@ -92,7 +92,7 @@ int ADIOI_cb_bcast_rank_map(ADIO_File fd)
/* TEMPORARY -- REMOVE WHEN NO LONGER UPDATING INFO FOR
* FS-INDEP. */
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
- ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", fd->hints->cb_nodes);
+ MPL_snprintf(value, MPI_MAX_INFO_VAL+1, "%d", fd->hints->cb_nodes);
ADIOI_Info_set(fd->info, "cb_nodes", value);
p = value;
/* the (by MPI rank) list of aggregators can be larger than
@@ -101,7 +101,7 @@ int ADIOI_cb_bcast_rank_map(ADIO_File fd)
* end in the truncate case */
for (i=0; i< fd->hints->cb_nodes; i++) {
int incr, remain = (MPI_MAX_INFO_VAL) - (p-value);
- incr = ADIOI_Snprintf(p, remain, "%d ", fd->hints->ranklist[i]);
+ incr = MPL_snprintf(p, remain, "%d ", fd->hints->ranklist[i]);
if (incr >= remain) break;
p += incr;
}
@@ -202,6 +202,7 @@ int ADIOI_cb_gather_name_array(MPI_Comm comm,
procname[0] = ADIOI_Malloc(alloc_size);
if (procname[0] == NULL) {
+ ADIOI_Free(array);
return -1;
}
@@ -394,9 +395,9 @@ int ADIOI_cb_copy_name_array(MPI_Comm comm,
{
ADIO_cb_name_array array;
- ADIOI_UNREFERENCED_ARG(comm);
- ADIOI_UNREFERENCED_ARG(keyval);
- ADIOI_UNREFERENCED_ARG(extra);
+ MPL_UNREFERENCED_ARG(comm);
+ MPL_UNREFERENCED_ARG(keyval);
+ MPL_UNREFERENCED_ARG(extra);
array = (ADIO_cb_name_array) attr_in;
if (array != NULL) array->refct++;
@@ -416,8 +417,8 @@ int ADIOI_cb_delete_name_array(MPI_Comm comm,
{
ADIO_cb_name_array array;
- ADIOI_UNREFERENCED_ARG(comm);
- ADIOI_UNREFERENCED_ARG(extra);
+ MPL_UNREFERENCED_ARG(comm);
+ MPL_UNREFERENCED_ARG(extra);
array = (ADIO_cb_name_array) attr_val;
ADIOI_Assert(array != NULL);
@@ -702,7 +703,7 @@ static int get_max_procs(int cb_nodes)
*
* Returns a token of types defined at top of this file.
*/
-#if defined(ROMIO_GPFS)
+#if defined(BGQPLATFORM)
/* On BlueGene, the ',' character shows up in get_processor_name, so we have to
* use a different delimiter */
#define COLON ':'
diff --git a/src/mpi/romio/adio/common/eof_offset.c b/src/mpi/romio/adio/common/eof_offset.c
index 0fb3539..a16bf6b 100644
--- a/src/mpi/romio/adio/common/eof_offset.c
+++ b/src/mpi/romio/adio/common/eof_offset.c
@@ -39,10 +39,7 @@ void ADIOI_Get_eof_offset(ADIO_File fd, ADIO_Offset *eof_offset)
*eof_offset = (fsize - fd->disp + etype_size - 1)/etype_size;
/* ceiling division in case fsize is not a multiple of etype_size;*/
else {
- /* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype)
- flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
MPI_Type_size_x(fd->filetype, &filetype_size);
MPI_Type_extent(fd->filetype, &filetype_extent);
diff --git a/src/mpi/romio/adio/common/error.c b/src/mpi/romio/adio/common/error.c
index e990a5e..d90a190 100644
--- a/src/mpi/romio/adio/common/error.c
+++ b/src/mpi/romio/adio/common/error.c
@@ -8,33 +8,6 @@
#include "adio.h"
#include "adio_extern.h"
-/* NOTE: THIS FUNCTION IS DEPRECATED AND ONLY EXISTS HERE BECAUSE
- * SOME DEPRECATED ADIO IMPLEMENTATIONS STILL CALL IT (SFS, HFS, PIOFS).
- */
-int ADIOI_Error(ADIO_File fd, int error_code, char *string)
-{
- char buf[MPI_MAX_ERROR_STRING];
- int myrank, result_len;
- MPI_Errhandler err_handler;
-
- if (fd == ADIO_FILE_NULL) err_handler = ADIOI_DFLT_ERR_HANDLER;
- else err_handler = fd->err_handler;
-
- MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
- if (err_handler == MPI_ERRORS_ARE_FATAL) {
- MPI_Error_string(error_code, buf, &result_len);
- FPRINTF(stderr, "[%d] - %s : %s\n", myrank, string, buf);
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
- else if (err_handler != MPI_ERRORS_RETURN) {
- /* MPI_File_call_errorhandler(fd, error_code); */
-
- FPRINTF(stderr, "Only MPI_ERRORS_RETURN and MPI_ERRORS_ARE_FATAL are currently supported as error handlers for files\n");
- MPI_Abort(MPI_COMM_WORLD, 1);
- }
-
- return error_code;
-}
/* Check for special error codes for those MPI error
classes that relate to particular problems.
Returns an MPI error code corresponding to "my_errno", for function "myname"
@@ -114,7 +87,7 @@ int ADIOI_Err_create_code(const char *myname, const char *filename, int my_errno
MPIR_ERR_RECOVERABLE, myname, __LINE__,
MPI_ERR_QUOTA,
"**filequota", 0);
-
+ break;
default:
error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
myname, __LINE__, MPI_ERR_IO, "**io",
diff --git a/src/mpi/romio/adio/common/flatten.c b/src/mpi/romio/adio/common/flatten.c
index ac31007..398e7ab 100644
--- a/src/mpi/romio/adio/common/flatten.c
+++ b/src/mpi/romio/adio/common/flatten.c
@@ -6,71 +6,82 @@
#include "adio.h"
#include "adio_extern.h"
-/* #ifdef MPISGI
-#include "mpisgi2.h"
-#endif */
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define FLATTEN_DEBUG 1
#endif
+static ADIOI_Flatlist_node* flatlist_node_new(MPI_Datatype datatype,
+ MPI_Count count)
+{
+ ADIOI_Flatlist_node * flat;
+ flat = ADIOI_Malloc(sizeof(ADIOI_Flatlist_node));
+
+ flat->type = datatype;
+ flat->blocklens = NULL;
+ flat->indices = NULL;
+ flat->lb_idx = flat->ub_idx = -1;
+ flat->refct = 1;
+ flat->count = count;
+
+ flat->blocklens = (ADIO_Offset *) ADIOI_Malloc(flat->count * sizeof(ADIO_Offset));
+ flat->indices = (ADIO_Offset *) ADIOI_Malloc(flat->count * sizeof(ADIO_Offset));
+ return flat;
+}
+
void ADIOI_Optimize_flattened(ADIOI_Flatlist_node *flat_type);
/* flatten datatype and add it to Flatlist */
-void ADIOI_Flatten_datatype(MPI_Datatype datatype)
+ADIOI_Flatlist_node *ADIOI_Flatten_datatype(MPI_Datatype datatype)
{
#ifdef HAVE_MPIR_TYPE_FLATTEN
MPI_Aint flatten_idx;
#endif
- MPI_Count curr_index=0;
- int is_contig;
- ADIOI_Flatlist_node *flat, *prev=0;
+ MPI_Count flat_count, curr_index=0;
+ int is_contig, flag;
+ ADIOI_Flatlist_node *flat;
+
+ if (ADIOI_Flattened_type_keyval == MPI_KEYVAL_INVALID) {
+ /* ADIOI_End_call will take care of cleanup */
+ MPI_Type_create_keyval(ADIOI_Flattened_type_copy,
+ ADIOI_Flattened_type_delete,
+ &ADIOI_Flattened_type_keyval, NULL);
+ }
/* check if necessary to flatten. */
- /* is it entirely contiguous? */
- ADIOI_Datatype_iscontig(datatype, &is_contig);
#ifdef FLATTEN_DEBUG
DBG_FPRINTF(stderr,"ADIOI_Flatten_datatype:: is_contig %#X\n",is_contig);
#endif
- if (is_contig) return;
/* has it already been flattened? */
- flat = ADIOI_Flatlist;
- while (flat) {
- if (flat->type == datatype) {
+ MPI_Type_get_attr(datatype, ADIOI_Flattened_type_keyval, &flat, &flag);
+ if (flag) {
#ifdef FLATTEN_DEBUG
DBG_FPRINTF(stderr,"ADIOI_Flatten_datatype:: found datatype %#X\n", datatype);
#endif
- return;
- }
- else {
- prev = flat;
- flat = flat->next;
- }
+ return flat;
}
- /* flatten and add to the list */
- flat = prev;
- flat->next = (ADIOI_Flatlist_node *)ADIOI_Malloc(sizeof(ADIOI_Flatlist_node));
- flat = flat->next;
-
- flat->type = datatype;
- flat->next = NULL;
- flat->blocklens = NULL;
- flat->indices = NULL;
- flat->lb_idx = flat->ub_idx = -1;
-
- flat->count = ADIOI_Count_contiguous_blocks(datatype, &curr_index);
-#ifdef FLATTEN_DEBUG
- DBG_FPRINTF(stderr,"ADIOI_Flatten_datatype:: count %llX, cur_idx = %#llX\n",flat->count,curr_index);
-#endif
-/* DBG_FPRINTF(stderr, "%d\n", flat->count);*/
-
- if (flat->count) {
- flat->blocklens = (ADIO_Offset *) ADIOI_Malloc(flat->count * sizeof(ADIO_Offset));
- flat->indices = (ADIO_Offset *) ADIOI_Malloc(flat->count * sizeof(ADIO_Offset));
+ /* is it entirely contiguous? */
+ ADIOI_Datatype_iscontig(datatype, &is_contig);
+ /* it would be great if ADIOI_Count_contiguous_blocks and the rest of the
+ * flattening code operated on the built-in named types, but
+ * it recursively processes types, stopping when it hits a named type. So
+ * we will do the little bit of work that named types require right here,
+ * and avoid touching the scary flattening code. */
+
+ if (is_contig)
+ flat_count = 1;
+ else {
+ flat_count = ADIOI_Count_contiguous_blocks(datatype, &curr_index);
}
-
+ /* flatten and add to datatype */
+ flat = flatlist_node_new(datatype, flat_count);
+ if (is_contig) {
+ MPI_Type_size_x(datatype, &(flat->blocklens[0]));
+ flat->indices[0] = 0;
+ } else {
+
curr_index = 0;
#ifdef HAVE_MPIR_TYPE_FLATTEN
flatten_idx = (MPI_Aint) flat->count;
@@ -98,6 +109,10 @@ void ADIOI_Flatten_datatype(MPI_Datatype datatype)
);
}
#endif
+ }
+ MPI_Type_set_attr(datatype, ADIOI_Flattened_type_keyval, flat);
+ return flat;
+
}
/* ADIOI_Flatten()
@@ -107,14 +122,14 @@ void ADIOI_Flatten_datatype(MPI_Datatype datatype)
void ADIOI_Flatten(MPI_Datatype datatype, ADIOI_Flatlist_node *flat,
ADIO_Offset st_offset, MPI_Count *curr_index)
{
- int i, k, m, n, basic_num, nonzeroth, is_hindexed_block=0;
+ int k, m, n, is_hindexed_block=0;
int lb_updated=0;
int combiner, old_combiner, old_is_contig;
int nints, nadds, ntypes, old_nints, old_nadds, old_ntypes;
/* By using ADIO_Offset we preserve +/- sign and
avoid >2G integer arithmetic problems */
ADIO_Offset top_count;
- MPI_Count j, old_size, prev_index, num;
+ MPI_Count i, j, old_size, prev_index, basic_num, num, nonzeroth;
MPI_Aint old_extent;/* Assume extents are non-negative */
int *ints;
MPI_Aint *adds; /* Make no assumptions about +/- sign on these */
@@ -130,15 +145,15 @@ void ADIOI_Flatten(MPI_Datatype datatype, ADIOI_Flatlist_node *flat,
DBG_FPRINTF(stderr,"ADIOI_Flatten:: nints %#X, nadds %#X, ntypes %#X\n",nints, nadds, ntypes);
for(i=0; i< nints; ++i)
{
- DBG_FPRINTF(stderr,"ADIOI_Flatten:: ints[%d]=%#X\n",i,ints[i]);
+ DBG_FPRINTF(stderr,"ADIOI_Flatten:: ints[%lld]=%#X\n",i,ints[i]);
}
for(i=0; i< nadds; ++i)
{
- DBG_FPRINTF(stderr,"ADIOI_Flatten:: adds[%d]="MPI_AINT_FMT_HEX_SPEC"\n",i,adds[i]);
+ DBG_FPRINTF(stderr,"ADIOI_Flatten:: adds[%lld]="MPI_AINT_FMT_HEX_SPEC"\n",i,adds[i]);
}
for(i=0; i< ntypes; ++i)
{
- DBG_FPRINTF(stderr,"ADIOI_Flatten:: types[%d]=%#llX\n",i,(unsigned long long)(unsigned long)types[i]);
+ DBG_FPRINTF(stderr,"ADIOI_Flatten:: types[%lld]=%#llX\n",i,(unsigned long long)(unsigned long)types[i]);
}
#endif
/* Chapter 4, page 83: when processing datatypes, note this item from the
@@ -702,6 +717,9 @@ void ADIOI_Flatten(MPI_Datatype datatype, ADIOI_Flatlist_node *flat,
DBG_FPRINTF(stderr,"ADIOI_Flatten:: simple adds[%#X] "MPI_AINT_FMT_HEX_SPEC", flat->indices[%#llX] %#llX, flat->blocklens[%#llX] %#llX\n",n,adds[n],j, flat->indices[j], j, flat->blocklens[j]);
#endif
(*curr_index)++;
+ } else {
+ flat->count--; /* don't count/consider any zero-length
+ blocklens */
}
}
else {
@@ -816,15 +834,11 @@ void ADIOI_Flatten(MPI_Datatype datatype, ADIOI_Flatlist_node *flat,
MPI_Abort(MPI_COMM_WORLD, 1);
}
-#ifndef MPISGI
-/* There is a bug in SGI's impl. of MPI_Type_get_contents. It doesn't
- return new datatypes. Therefore no need to free. */
for (i=0; i<ntypes; i++) {
MPI_Type_get_envelope(types[i], &old_nints, &old_nadds, &old_ntypes,
&old_combiner);
if (old_combiner != MPI_COMBINER_NAMED) MPI_Type_free(types+i);
}
-#endif
ADIOI_Free(ints);
ADIOI_Free(adds);
@@ -1104,15 +1118,11 @@ MPI_Count ADIOI_Count_contiguous_blocks(MPI_Datatype datatype, MPI_Count *curr_i
MPI_Abort(MPI_COMM_WORLD, 1);
}
-#ifndef MPISGI
-/* There is a bug in SGI's impl. of MPI_Type_get_contents. It doesn't
- return new datatypes. Therefore no need to free. */
for (i=0; i<ntypes; i++) {
MPI_Type_get_envelope(types[i], &old_nints, &old_nadds, &old_ntypes,
&old_combiner);
if (old_combiner != MPI_COMBINER_NAMED) MPI_Type_free(types+i);
}
-#endif
ADIOI_Free(ints);
ADIOI_Free(adds);
@@ -1178,28 +1188,49 @@ void ADIOI_Optimize_flattened(ADIOI_Flatlist_node *flat_type)
return;
}
-void ADIOI_Delete_flattened(MPI_Datatype datatype)
-{
- ADIOI_Flatlist_node *flat, *prev;
+int ADIOI_Flattened_type_keyval=MPI_KEYVAL_INVALID;
- prev = flat = ADIOI_Flatlist;
- while (flat && (flat->type != datatype)) {
- prev = flat;
- flat = flat->next;
- }
- if (flat) {
- prev->next = flat->next;
- if (flat->blocklens) ADIOI_Free(flat->blocklens);
- if (flat->indices) ADIOI_Free(flat->indices);
- ADIOI_Free(flat);
- }
+int ADIOI_Flattened_type_copy(MPI_Datatype oldtype,
+ int type_keyval, void *extra_state, void *attribute_val_in,
+ void *attribute_val_out, int *flag)
+{
+ ADIOI_Flatlist_node *node = (ADIOI_Flatlist_node *)attribute_val_in;
+ if (node != NULL) node->refct++;
+ *(ADIOI_Flatlist_node **)attribute_val_out= node;
+ *flag = 1; /* attribute copied to new communicator */
+ return MPI_SUCCESS;
}
+int ADIOI_Flattened_type_delete(MPI_Datatype datatype,
+ int type_keyval, void *attribute_val, void *extra_state)
+{
+ ADIOI_Flatlist_node *node = (ADIOI_Flatlist_node *)attribute_val;
+ ADIOI_Assert(node != NULL);
+ node->refct--;
+
+ if (node->refct <= 0) {
+ ADIOI_Free(node->blocklens);
+ ADIOI_Free(node->indices);
+ ADIOI_Free(node);
+ }
+ return MPI_SUCCESS;
+}
ADIOI_Flatlist_node * ADIOI_Flatten_and_find(MPI_Datatype datatype)
{
ADIOI_Flatlist_node *node;
- ADIOI_Flatten_datatype(datatype);
- node = ADIOI_Flatlist;
- while (node->type != datatype) node = node->next;
+ int flag=0;
+
+ if (ADIOI_Flattened_type_keyval == MPI_KEYVAL_INVALID) {
+ /* ADIOI_End_call will take care of cleanup */
+ MPI_Type_create_keyval(ADIOI_Flattened_type_copy,
+ ADIOI_Flattened_type_delete,
+ &ADIOI_Flattened_type_keyval, NULL);
+ }
+
+ MPI_Type_get_attr(datatype, ADIOI_Flattened_type_keyval, &node, &flag);
+ if (flag == 0) {
+ node = ADIOI_Flatten_datatype(datatype);
+ }
+
return node;
}
diff --git a/src/mpi/romio/adio/common/get_fp_posn.c b/src/mpi/romio/adio/common/get_fp_posn.c
index 671dde3..68092fa 100644
--- a/src/mpi/romio/adio/common/get_fp_posn.c
+++ b/src/mpi/romio/adio/common/get_fp_posn.c
@@ -26,9 +26,7 @@ void ADIOI_Get_position(ADIO_File fd, ADIO_Offset *offset)
if (filetype_is_contig) *offset = (fd->fp_ind - fd->disp)/etype_size;
else {
-/* filetype already flattened in ADIO_Open */
- flat_file = ADIOI_Flatlist;
- while (flat_file->type != fd->filetype) flat_file = flat_file->next;
+ flat_file = ADIOI_Flatten_and_find(fd->filetype);
MPI_Type_size_x(fd->filetype, &filetype_size);
MPI_Type_extent(fd->filetype, &filetype_extent);
diff --git a/src/mpi/romio/adio/common/hint_fns.c b/src/mpi/romio/adio/common/hint_fns.c
index 34c898b..284e4a9 100644
--- a/src/mpi/romio/adio/common/hint_fns.c
+++ b/src/mpi/romio/adio/common/hint_fns.c
@@ -12,7 +12,7 @@
int ADIOI_Info_check_and_install_int(ADIO_File fd, MPI_Info info, const char *key,
int *local_cache, char *funcname, int *error_code)
{
- int intval, tmp_val, flag;
+ int intval, tmp_val, flag, ret=0;
char *value;
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
@@ -37,7 +37,8 @@ int ADIOI_Info_check_and_install_int(ADIO_File fd, MPI_Info info, const char *ke
MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(funcname,
key,
error_code);
- return -1;
+ ret = -1;
+ goto fn_exit;
}
/* --END ERROR HANDLING-- */
@@ -45,14 +46,15 @@ int ADIOI_Info_check_and_install_int(ADIO_File fd, MPI_Info info, const char *ke
/* some file systems do not cache hints in the fd struct */
if (local_cache != NULL) *local_cache = intval;
}
+fn_exit:
ADIOI_Free(value);
- return 0;
+ return ret;
}
int ADIOI_Info_check_and_install_enabled(ADIO_File fd, MPI_Info info, const char *key,
int *local_cache, char *funcname, int *error_code)
{
- int tmp_val, flag;
+ int tmp_val, flag, ret=0;
char *value;
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
@@ -90,17 +92,19 @@ int ADIOI_Info_check_and_install_enabled(ADIO_File fd, MPI_Info info, const char
MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(funcname,
key,
error_code);
- return -1;
+ ret = -1;
+ goto fn_exit;
}
/* --END ERROR HANDLING-- */
}
+fn_exit:
ADIOI_Free(value);
- return 0;
+ return ret;
}
int ADIOI_Info_check_and_install_true(ADIO_File fd, MPI_Info info, const char *key,
int *local_cache, char *funcname, int *error_code)
{
- int flag, tmp_val;
+ int flag, tmp_val, ret=0;
char *value;
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
@@ -132,18 +136,19 @@ int ADIOI_Info_check_and_install_true(ADIO_File fd, MPI_Info info, const char *k
MPIO_ERR_CREATE_CODE_INFO_NOT_SAME(funcname,
key,
error_code);
- return -1;
+ ret = -1;
+ goto fn_exit;
}
/* --END ERROR HANDLING-- */
}
-
+fn_exit:
ADIOI_Free(value);
- return 0;
+ return ret;
}
int ADIOI_Info_check_and_install_str(ADIO_File fd, MPI_Info info, const char *key,
char **local_cache, char *funcname, int *error_code)
{
- int flag;
+ int flag, ret=0;
size_t len;
char *value;
@@ -171,7 +176,8 @@ int ADIOI_Info_check_and_install_str(ADIO_File fd, MPI_Info info, const char *ke
__LINE__,
MPI_ERR_OTHER,
"**nomem2",0);
- return -1;
+ ret = -1;
+ goto fn_exit;
}
ADIOI_Strncpy(*local_cache, value, len);
}
@@ -179,6 +185,7 @@ int ADIOI_Info_check_and_install_str(ADIO_File fd, MPI_Info info, const char *ke
* otherwise we would get an error if someone used the same
* info value with a cb_config_list value in it in a couple
* of calls, which would be irritating. */
+fn_exit:
ADIOI_Free(value);
- return 0;
+ return ret;
}
diff --git a/src/mpi/romio/adio/common/iscontig.c b/src/mpi/romio/adio/common/iscontig.c
index 3c8aa71..0825ffd 100644
--- a/src/mpi/romio/adio/common/iscontig.c
+++ b/src/mpi/romio/adio/common/iscontig.c
@@ -5,9 +5,6 @@
*/
#include "adio.h"
-/* #ifdef MPISGI
-#include "mpisgi2.h"
-#endif */
#if defined(MPICH)
/* MPICH also provides this routine */
@@ -83,12 +80,8 @@ void ADIOI_Datatype_iscontig(MPI_Datatype datatype, int *flag)
adds, types);
ADIOI_Datatype_iscontig(types[0], flag);
-#ifndef MPISGI
-/* There is a bug in SGI's impl. of MPI_Type_get_contents. It doesn't
- return new datatypes. Therefore no need to free. */
MPI_Type_get_envelope(types[0], &ni, &na, &nt, &cb);
if (cb != MPI_COMBINER_NAMED) MPI_Type_free(types);
-#endif
ADIOI_Free(ints);
ADIOI_Free(adds);
diff --git a/src/mpi/romio/adio/common/lock.c b/src/mpi/romio/adio/common/lock.c
index 2590d77..6c15428 100644
--- a/src/mpi/romio/adio/common/lock.c
+++ b/src/mpi/romio/adio/common/lock.c
@@ -19,7 +19,7 @@ int ADIOI_Set_lock(FDTYPE fd, int cmd, int type, ADIO_Offset offset, int whence,
OVERLAPPED Overlapped;
DWORD dwFlags;
- ADIOI_UNREFERENCED_ARG(whence);
+ MPL_UNREFERENCED_ARG(whence);
if (len == 0) return MPI_SUCCESS;
@@ -124,8 +124,8 @@ int ADIOI_Set_lock(FDTYPE fd, int cmd, int type, ADIO_Offset offset, int whence,
errno = 0;
do {
err = fcntl(fd, cmd, &lock);
-#ifdef USE_DBG_LOGGING
-/* if (MPIU_DBG_SELECTED(ROMIO,TERSE)) */
+#ifdef MPL_USE_DBG_LOGGING
+/* if (MPL_DBG_SELECTED(ROMIO,TERSE)) */
{
if (err && ((errno == EINTR) || (errno == EINPROGRESS)))
{
@@ -179,7 +179,7 @@ int ADIOI_Set_lock(FDTYPE fd, int cmd, int type, ADIO_Offset offset, int whence,
}
#endif
-#if (defined(ROMIO_HFS) || defined(ROMIO_XFS))
+#if defined(ROMIO_XFS)
int ADIOI_Set_lock64(FDTYPE fd, int cmd, int type, ADIO_Offset offset,
int whence,
ADIO_Offset len)
diff --git a/src/mpi/romio/adio/common/malloc.c b/src/mpi/romio/adio/common/malloc.c
index 73c5a70..b10d75f 100644
--- a/src/mpi/romio/adio/common/malloc.c
+++ b/src/mpi/romio/adio/common/malloc.c
@@ -44,16 +44,13 @@ void *ADIOI_Malloc_fn(size_t size, int lineno, const char *fname)
#ifdef ROMIO_XFS
new = (void *) memalign(XFS_MEMALIGN, size);
#else
-#ifdef HAVE_MPIU_FUNCS
- new = (void *) MPIU_trmalloc(size, lineno, fname);
-#else
- new = (void *) malloc(size);
-#endif
+ new = (void *) MPL_malloc(size);
#endif
if (!new && size) {
FPRINTF(stderr, "Out of memory in file %s, line %d\n", fname, lineno);
MPI_Abort(MPI_COMM_WORLD, 1);
}
+ MPL_VG_MEM_INIT(new, size);
DBG_FPRINTF(stderr, "ADIOI_Malloc %s:<%d> %p (%#zX)\n", fname, lineno, new, size);
return new;
}
@@ -63,11 +60,7 @@ void *ADIOI_Calloc_fn(size_t nelem, size_t elsize, int lineno, const char *fname
{
void *new;
-#ifdef HAVE_MPIU_FUNCS
- new = (void *) MPIU_trcalloc(nelem, elsize, lineno, fname);
-#else
- new = (void *) calloc(nelem, elsize);
-#endif
+ new = (void *) MPL_calloc(nelem, elsize);
if (!new && nelem) {
FPRINTF(stderr, "Out of memory in file %s, line %d\n", fname, lineno);
MPI_Abort(MPI_COMM_WORLD, 1);
@@ -81,11 +74,7 @@ void *ADIOI_Realloc_fn(void *ptr, size_t size, int lineno, const char *fname)
{
void *new;
-#ifdef HAVE_MPIU_FUNCS
- new = (void *) MPIU_trrealloc(ptr, size, lineno, fname);
-#else
- new = (void *) realloc(ptr, size);
-#endif
+ new = (void *) MPL_realloc(ptr, size);
if (!new && size) {
FPRINTF(stderr, "realloc failed in file %s, line %d\n", fname, lineno);
MPI_Abort(MPI_COMM_WORLD, 1);
@@ -103,11 +92,7 @@ void ADIOI_Free_fn(void *ptr, int lineno, const char *fname)
MPI_Abort(MPI_COMM_WORLD, 1);
}
-#ifdef HAVE_MPIU_FUNCS
- MPIU_trfree(ptr, lineno, fname);
-#else
- free(ptr);
-#endif
+ MPL_free(ptr);
}
diff --git a/src/mpi/romio/adio/common/onesided_aggregation.c b/src/mpi/romio/adio/common/onesided_aggregation.c
index 305e0f7..1445000 100644
--- a/src/mpi/romio/adio/common/onesided_aggregation.c
+++ b/src/mpi/romio/adio/common/onesided_aggregation.c
@@ -1,20 +1,45 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include "adio.h"
#include "adio_extern.h"
+#include "ad_tuning.h"
#ifdef ROMIO_GPFS
-/* right now this is GPFS only but TODO: extend this to all file systems */
#include "../ad_gpfs/ad_gpfs_tuning.h"
-#else
-int gpfsmpio_onesided_no_rmw = 0;
-int gpfsmpio_write_aggmethod = 0;
-int gpfsmpio_read_aggmethod = 0;
-int gpfsmpio_onesided_always_rmw = 0;
#endif
+
#include <pthread.h>
// #define onesidedtrace 1
-
+/* Data that needs to persist throughout multiple calls to ADIOI_OneSidedWriteAggregation
+ * to support file systems that stripe data -- the algorithm can now be called once
+ * for each segment of data, a segment being defined as a contiguous region of the file which
+ * is the size of one striping unit times the number of aggregators. Each call effectively packs one
+ * striping unit of data into the collective buffer on each agg, with additional parameters which govern when to flush
+ * the collective buffer to the file. Therefore in practice the collective write call for a file system such as
+ * lustre on a dataset composed of multiple segments would call the algorithm several times without a
+ * flush parameter to fill the collective buffers with multiple stripes of data, before calling it again to flush
+ * the collective buffer to the file system. In this fashion the synchronization can be minimized as that
+ * only needs to occur during the actual read from or write to the file system.
+ */
+int iWasUsedStripingAgg; /* whether this rank was ever a used agg for this striping segement */
+int numStripesUsed; /* the number of stripes packed into an aggregator */
+/* These 2 variables are the offset and lengths in the file corresponding to the actual stripes */
+ADIO_Offset *stripeWriteOffsets, *stripeWriteLens;
+int amountOfStripedDataExpected; /* used to determine holes in this segment thereby requiring a rmw */
+/* Since ADIOI_OneSidedWriteAggregation can be called multiple times now only flatten the buffer once */
+/* for optimal performance so persist these two variables through multiple calls */
+MPI_Aint bufTypeExtent;
+ADIOI_Flatlist_node *flatBuf;
+/* These three variables track the state of the source buffer advancement through multiple calls */
+int lastDataTypeExtent;
+int lastFlatBufIndice;
+ADIO_Offset lastIndiceOffset;
/* This data structure holds the number of extents, the index into the flattened buffer and the remnant length
* beyond the flattened buffer index corresponding to the base buffer offset for non-contiguous source data
* for the range to be written coresponding to the round and target agg.
@@ -47,16 +72,16 @@ typedef struct FDSourceBufferState {
} FDSourceBufferState;
-
static int ADIOI_OneSidedSetup(ADIO_File fd, int procs) {
int ret = MPI_SUCCESS;
ret = MPI_Win_create(fd->io_buf,fd->hints->cb_buffer_size,1,
MPI_INFO_NULL,fd->comm, &fd->io_buf_window);
if (ret != MPI_SUCCESS) goto fn_exit;
- fd->io_buf_put_amounts = (int *) ADIOI_Malloc(procs*sizeof(int));
- ret =MPI_Win_create(fd->io_buf_put_amounts,procs*sizeof(int),sizeof(int),
+ fd->io_buf_put_amounts = 0;
+ ret =MPI_Win_create(&(fd->io_buf_put_amounts),sizeof(int),sizeof(int),
MPI_INFO_NULL,fd->comm, &fd->io_buf_put_amounts_window);
+
fn_exit:
return ret;
}
@@ -68,8 +93,6 @@ int ADIOI_OneSidedCleanup(ADIO_File fd)
ret = MPI_Win_free(&fd->io_buf_window);
if (fd->io_buf_put_amounts_window != MPI_WIN_NULL)
ret = MPI_Win_free(&fd->io_buf_put_amounts_window);
- if (fd->io_buf_put_amounts != NULL)
- ADIOI_Free(fd->io_buf_put_amounts);
return ret;
}
@@ -182,16 +205,19 @@ void ADIOI_OneSidedWriteAggregation(ADIO_File fd,
const void *buf,
MPI_Datatype datatype,
int *error_code,
- ADIO_Offset *st_offsets,
- ADIO_Offset *end_offsets,
+ ADIO_Offset firstFileOffset,
+ ADIO_Offset lastFileOffset,
int numNonZeroDataOffsets,
ADIO_Offset *fd_start,
ADIO_Offset* fd_end,
- int *hole_found)
+ int *hole_found,
+ ADIOI_OneSidedStripeParms stripe_parms)
{
int i,j; /* generic iterators */
+ if ((stripe_parms.stripeSize > 0) && stripe_parms.firstStripedWriteCall)
+ iWasUsedStripingAgg = 0;
#ifdef onesidedtrace
if (buf == NULL) {
printf("ADIOI_OneSidedWriteAggregation - buf is NULL contig_access_count is %d\n",contig_access_count);
@@ -244,14 +270,15 @@ printf("ADIOI_OneSidedWriteAggregation started on rank %d\n",myrank);
*/
int bufTypeIsContig;
- MPI_Aint bufTypeExtent;
- ADIOI_Flatlist_node *flatBuf=NULL;
ADIOI_Datatype_iscontig(datatype, &bufTypeIsContig);
if (!bufTypeIsContig) {
/* Flatten the non-contiguous source datatype and set the extent. */
- flatBuf = ADIOI_Flatten_and_find(datatype);
- MPI_Type_extent(datatype, &bufTypeExtent);
+ if ((stripe_parms.stripeSize == 0) || stripe_parms.firstStripedWriteCall) {
+ flatBuf = ADIOI_Flatten_and_find(datatype);
+ MPI_Type_extent(datatype, &bufTypeExtent);
+ }
+
#ifdef onesidedtrace
printf("flatBuf->count is %d bufTypeExtent is %d\n", flatBuf->count,bufTypeExtent);
for (i=0;i<flatBuf->count;i++)
@@ -272,9 +299,9 @@ printf("ADIOI_OneSidedWriteAggregation started on rank %d\n",myrank);
#ifdef onesidedtrace
printf("sizeof(FDSourceBufferState) is %d - make sure is 32 for 32-byte memalign optimal\n",sizeof(FDSourceBufferState));
#endif
- FDSourceBufferState *currentFDSourceBufferState;
- currentFDSourceBufferState = (FDSourceBufferState *) ADIOI_Malloc(naggs * sizeof(FDSourceBufferState));
+ FDSourceBufferState *currentFDSourceBufferState = (FDSourceBufferState *) ADIOI_Malloc(naggs * sizeof(FDSourceBufferState));
+
for (i=0;i<naggs;i++) {
/* initialize based on the bufType to indicate that it is unset.
*/
@@ -295,27 +322,17 @@ printf("ADIOI_OneSidedWriteAggregation started on rank %d\n",myrank);
*/
int maxNumContigOperations = contig_access_count;
- ADIO_Offset lastFileOffset = 0, firstFileOffset = -1;
- /* Get the total range being written - in the case of just 1 byte the starting and ending offsets
- * will match the same as they would for 0 bytes so to distinguish we need the actual data count.
- */
- for (j=0;j<numNonZeroDataOffsets;j++) {
-#ifdef onesidedtrace
-printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_offsets[j]);
-#endif
- lastFileOffset = ADIOI_MAX(lastFileOffset,end_offsets[j]);
- if (firstFileOffset == -1)
- firstFileOffset = st_offsets[j];
- else
- firstFileOffset = ADIOI_MIN(firstFileOffset,st_offsets[j]);
- }
-
int myAggRank = -1; /* if I am an aggregor this is my index into fd->hints->ranklist */
int iAmUsedAgg = 0; /* whether or not this rank is used as an aggregator. */
/* Make coll_bufsize an ADIO_Offset since it is used in calculations with offsets.
*/
- ADIO_Offset coll_bufsize = (ADIO_Offset)(fd->hints->cb_buffer_size);
+ ADIO_Offset coll_bufsize = 0;
+ if (stripe_parms.stripeSize == 0)
+ coll_bufsize = (ADIO_Offset)(fd->hints->cb_buffer_size);
+ else
+ coll_bufsize = stripe_parms.stripeSize;
+
#ifdef ROMIO_GPFS
if (gpfsmpio_pthreadio == 1) {
/* split buffer in half for a kind of double buffering with the threads*/
@@ -342,6 +359,7 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
myAggRank = j;
if (fd_end[j] > fd_start[j]) {
iAmUsedAgg = 1;
+ iWasUsedStripingAgg = 1;
}
}
}
@@ -406,6 +424,16 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
int currentFlatBufIndice=0;
ADIO_Offset currentIndiceOffset = 0;
+ /* Remember where we left off in the source buffer when packing stripes. */
+ if ((stripe_parms.stripeSize > 0) && !stripe_parms.firstStripedWriteCall) {
+ currentDataTypeExtent = lastDataTypeExtent;
+ currentFlatBufIndice = lastFlatBufIndice;
+ currentIndiceOffset = lastIndiceOffset;
+#ifdef onesidedtrace
+ printf("using lastDataTypeExtent %d lastFlatBufIndice %d lastIndiceOffset %ld\n",lastDataTypeExtent,lastFlatBufIndice,lastIndiceOffset);
+#endif
+ }
+
/* This denotes the coll_bufsize boundaries within the source buffer for writing for the same round.
*/
ADIO_Offset intraRoundCollBufsizeOffset = 0;
@@ -592,8 +620,7 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
ADIO_Offset amountToAdvanceSBOffsetForFD = 0;
int additionalFDCounter = 0;
- while (blockEnd >= fd_end[currentAggRankListIndex]) {
- ADIO_Offset thisAggBlockEnd = fd_end[currentAggRankListIndex];
+ while (blockEnd > fd_end[currentAggRankListIndex]) { ADIO_Offset thisAggBlockEnd = fd_end[currentAggRankListIndex];
if (thisAggBlockEnd >= intraRoundCollBufsizeOffset) {
while (thisAggBlockEnd >= intraRoundCollBufsizeOffset) {
targetAggsForMyDataCurrentRoundIter[numTargetAggs]++;
@@ -706,10 +733,11 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
additionalFDCounter++;
#ifdef onesidedtrace
- printf("block extended beyond fd init settings numTargetAggs %d offset_list[%d] with value %ld past fd border %ld with len %ld\n",numTargetAggs,i,offset_list[blockIter],fd_start[currentAggRankListIndex],len_list[blockIter]);
+ printf("block extended beyond fd init settings numTargetAggs %d offset_list[%d] with value %ld past fd border %ld with len %ld\n",numTargetAggs,blockIter,offset_list[blockIter],fd_start[currentAggRankListIndex],len_list[blockIter]);
#endif
intraRoundCollBufsizeOffset = fd_start[currentAggRankListIndex] + coll_bufsize;
targetAggsForMyDataLastOffLenIndex[targetAggsForMyDataCurrentRoundIter[numTargetAggs]][numTargetAggs] = blockIter;
+
} // if (blockEnd >= fd_start[currentAggRankListIndex])
} // while (blockEnd >= fd_end[currentAggRankListIndex])
} // if (blockEnd > fd_end[currentAggRankListIndex])
@@ -769,11 +797,8 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
char *write_buf = write_buf0;
MPI_Win write_buf_window = fd->io_buf_window;
- int *write_buf_put_amounts = fd->io_buf_put_amounts;
- if(!gpfsmpio_onesided_no_rmw) {
+ if(!romio_onesided_no_rmw) {
*hole_found = 0;
- for (i=0;i<nprocs;i++)
- write_buf_put_amounts[i] = 0;
}
/* Counters to track the offset range being written by the used aggs.
@@ -783,6 +808,7 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
if (iAmUsedAgg) {
currentRoundFDStart = fd_start[myAggRank];
+ currentRoundFDEnd = fd_end[myAggRank];
if (myAggRank == smallestFileDomainAggRank) {
if (currentRoundFDStart < firstFileOffset)
currentRoundFDStart = firstFileOffset;
@@ -794,7 +820,49 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
#ifdef onesidedtrace
printf("iAmUsedAgg - currentRoundFDStart initialized to %ld currentRoundFDEnd to %ld\n",currentRoundFDStart,currentRoundFDEnd);
#endif
- if (gpfsmpio_onesided_always_rmw) { // read in the first buffer
+
+ if ((stripe_parms.stripeSize > 0) && (stripe_parms.segmentIter == 0)) {
+ numStripesUsed = 0;
+ stripeWriteOffsets = (ADIO_Offset *) ADIOI_Malloc(stripe_parms.stripesPerAgg*sizeof(ADIO_Offset));
+ stripeWriteLens = (ADIO_Offset *) ADIOI_Malloc(stripe_parms.stripesPerAgg*sizeof(ADIO_Offset));
+ amountOfStripedDataExpected = 0;
+ int stripeIter = 0;
+ for (stripeIter=0;stripeIter<stripe_parms.stripesPerAgg;stripeIter++) {
+ if (stripeIter == 0) {
+ stripeWriteOffsets[stripeIter] = currentRoundFDStart;
+ stripeWriteLens[stripeIter] = (int)(currentRoundFDEnd - currentRoundFDStart)+1;
+ amountOfStripedDataExpected += (int)(currentRoundFDEnd - currentRoundFDStart)+1;
+ numStripesUsed++;
+ }
+ else {
+ if (((currentRoundFDEnd + (ADIO_Offset)1 + ((ADIO_Offset)stripeIter * stripe_parms.segmentLen))) > stripe_parms.stripedLastFileOffset) {
+ if (((currentRoundFDEnd + (ADIO_Offset)1 - (ADIO_Offset)(stripe_parms.stripeSize) + ((ADIO_Offset)stripeIter * stripe_parms.segmentLen))) <= stripe_parms.stripedLastFileOffset) {
+ stripeWriteOffsets[stripeIter] = (currentRoundFDEnd + (ADIO_Offset)1) - (ADIO_Offset)(stripe_parms.stripeSize) + ((ADIO_Offset)stripeIter * stripe_parms.segmentLen);
+ stripeWriteLens[stripeIter] = (int)(stripe_parms.stripedLastFileOffset - (currentRoundFDEnd + (ADIO_Offset)1 - (ADIO_Offset)(stripe_parms.stripeSize) + ((ADIO_Offset)stripeIter * stripe_parms.segmentLen)) + (ADIO_Offset)1);
+ amountOfStripedDataExpected += (int)(stripe_parms.stripedLastFileOffset - (currentRoundFDEnd + (ADIO_Offset)1 - (ADIO_Offset)(stripe_parms.stripeSize) + ((ADIO_Offset)stripeIter * stripe_parms.segmentLen)) + (ADIO_Offset)1);
+ numStripesUsed++;
+ }
+ }
+ else {
+ stripeWriteOffsets[stripeIter] = (currentRoundFDEnd + (ADIO_Offset)1) - (ADIO_Offset)(stripe_parms.stripeSize) + ((ADIO_Offset)stripeIter * stripe_parms.segmentLen);
+ stripeWriteLens[stripeIter] = stripe_parms.stripeSize;
+ amountOfStripedDataExpected += stripe_parms.stripeSize;
+ numStripesUsed++;
+ }
+ }
+ } // for-loop
+
+#ifdef onesidedtrace
+ printf("amountOfStripedDataExpected is %d numStripesUsed is %d offsets and lengths are ",amountOfStripedDataExpected,numStripesUsed);
+ for (i=0;i<numStripesUsed;i++) {
+ printf("%ld %ld --",stripeWriteOffsets[i],stripeWriteLens[i]);
+ }
+ printf("\n");
+#endif
+ } // if ((stripe_parms.stripeSize>0) && (stripe_parms.segmentIter==0))
+
+
+ if (romio_onesided_always_rmw && ((stripe_parms.stripeSize==0) || (stripe_parms.segmentIter==0))) { // read in the first buffer
ADIO_Offset tmpCurrentRoundFDEnd = 0;
if ((fd_end[myAggRank] - currentRoundFDStart) < coll_bufsize) {
if (myAggRank == greatestFileDomainAggRank) {
@@ -809,14 +877,23 @@ printf("iAmUsedAgg - currentRoundFDStart initialized to %ld currentRoundFDEnd to
else
tmpCurrentRoundFDEnd = currentRoundFDStart + coll_bufsize - (ADIO_Offset)1;
#ifdef onesidedtrace
-printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %ld to %ld total is %d\n",currentRoundFDStart,tmpCurrentRoundFDEnd,(int)(tmpCurrentRoundFDEnd - currentRoundFDStart)+1);
-#endif
- ADIO_ReadContig(fd, write_buf, (int)(tmpCurrentRoundFDEnd - currentRoundFDStart)+1,
- MPI_BYTE, ADIO_EXPLICIT_OFFSET,currentRoundFDStart, &status, error_code);
-
+printf("romio_onesided_always_rmw - first buffer pre-read for file offsets %ld to %ld total is %d\n",currentRoundFDStart,tmpCurrentRoundFDEnd,(int)(tmpCurrentRoundFDEnd - currentRoundFDStart)+1);
+#endif
+
+ if (stripe_parms.stripeSize==0) {
+ ADIO_ReadContig(fd, write_buf, (int)(tmpCurrentRoundFDEnd - currentRoundFDStart)+1,
+ MPI_BYTE, ADIO_EXPLICIT_OFFSET,currentRoundFDStart, &status, error_code);
+ }
+ else {
+ // pre-read the entire batch of stripes we will do before writing
+ int stripeIter = 0;
+ for (stripeIter=0;stripeIter<numStripesUsed;stripeIter++)
+ ADIO_ReadContig(fd, (char*)write_buf + ((ADIO_Offset)stripeIter * (ADIO_Offset)stripe_parms.stripeSize), stripeWriteLens[stripeIter],
+ MPI_BYTE, ADIO_EXPLICIT_OFFSET,stripeWriteOffsets[stripeIter], &status, error_code);
+ }
}
- }
- if (gpfsmpio_onesided_always_rmw) // wait until the first buffer is read
+ } // if iAmUsedAgg
+ if (romio_onesided_always_rmw && ((stripe_parms.stripeSize == 0) || (stripe_parms.segmentIter == 0))) // wait until the first buffer is read
MPI_Barrier(fd->comm);
#ifdef ROMIO_GPFS
@@ -825,11 +902,12 @@ printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %l
startTimeBase = MPI_Wtime();
#endif
+
/* This is the second main loop of the algorithm, actually nested loop of target aggs within rounds. There are 2 flavors of this.
- * For gpfsmpio_write_aggmethod of 1 each nested iteration for the target
+ * For romio_write_aggmethod of 1 each nested iteration for the target
* agg does an mpi_put on a contiguous chunk using a primative datatype
* determined using the data structures from the first main loop. For
- * gpfsmpio_write_aggmethod of 2 each nested iteration for the target agg
+ * romio_write_aggmethod of 2 each nested iteration for the target agg
* builds up data to use in created a derived data type for 1 mpi_put that is done for the target agg for each round.
* To support lustre there will need to be an additional layer of nesting
* for the multiple file domains within target aggs.
@@ -853,7 +931,7 @@ printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %l
int targetAggContigAccessCount = 0;
/* These data structures are used for the derived datatype mpi_put
- * in the gpfsmpio_write_aggmethod of 2 case.
+ * in the romio_write_aggmethod of 2 case.
*/
int *targetAggBlockLengths=NULL;
MPI_Aint *targetAggDisplacements=NULL, *sourceBufferDisplacements=NULL;
@@ -914,7 +992,7 @@ printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %l
printf("bufferAmountToSend is %d\n",bufferAmountToSend);
#endif
if (bufferAmountToSend > 0) { /* we have data to send this round */
- if (gpfsmpio_write_aggmethod == 2) {
+ if (romio_write_aggmethod == 2) {
/* Only allocate these arrays if we are using method 2 and only do it once for this round/target agg.
*/
if (!allocatedDerivedTypeArrays) {
@@ -941,7 +1019,7 @@ printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %l
/* Determine the offset into the target window.
*/
- MPI_Aint targetDisplacementToUseThisRound = (MPI_Aint) (offsetStart - currentRoundFDStartForMyTargetAgg);
+ MPI_Aint targetDisplacementToUseThisRound = (MPI_Aint) (offsetStart - currentRoundFDStartForMyTargetAgg) + ((MPI_Aint)(stripe_parms.segmentIter)*(MPI_Aint)(stripe_parms.stripeSize));
/* If using the thread writer select the appropriate side of the split window.
*/
@@ -949,30 +1027,33 @@ printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %l
targetDisplacementToUseThisRound += (MPI_Aint) coll_bufsize;
}
- /* For gpfsmpio_write_aggmethod of 1 do the mpi_put using the primitive MPI_BYTE type for each contiguous
+ /* For romio_write_aggmethod of 1 do the mpi_put using the primitive MPI_BYTE type for each contiguous
* chunk in the target, of source data is non-contiguous then pack the data first.
*/
- if (gpfsmpio_write_aggmethod == 1) {
+ if (romio_write_aggmethod == 1) {
MPI_Win_lock(MPI_LOCK_SHARED, targetAggsForMyData[aggIter], 0, write_buf_window);
+ char *putSourceData;
if (bufTypeIsContig) {
MPI_Put(((char*)buf) + currentFDSourceBufferState[aggIter].sourceBufferOffset,bufferAmountToSend, MPI_BYTE,targetAggsForMyData[aggIter],targetDisplacementToUseThisRound, bufferAmountToSend,MPI_BYTE,write_buf_window);
currentFDSourceBufferState[aggIter].sourceBufferOffset += (ADIO_Offset)bufferAmountToSend;
}
else {
- char *putSourceData = (char *) ADIOI_Malloc(bufferAmountToSend*sizeof(char));
+ putSourceData = (char *) ADIOI_Malloc(bufferAmountToSend*sizeof(char));
nonContigSourceDataBufferAdvance(((char*)buf), flatBuf, bufferAmountToSend, 1, ¤tFDSourceBufferState[aggIter], putSourceData);
MPI_Put(putSourceData,bufferAmountToSend, MPI_BYTE,targetAggsForMyData[aggIter],targetDisplacementToUseThisRound, bufferAmountToSend,MPI_BYTE,write_buf_window);
- ADIOI_Free(putSourceData);
+
}
MPI_Win_unlock(targetAggsForMyData[aggIter], write_buf_window);
+ if (!bufTypeIsContig)
+ ADIOI_Free(putSourceData);
}
- /* For gpfsmpio_write_aggmethod of 2 populate the data structures for this round/agg for this offset iter
+ /* For romio_write_aggmethod of 2 populate the data structures for this round/agg for this offset iter
* to be used subsequently when building the derived type for 1 mpi_put for all the data for this
* round/agg.
*/
- else if (gpfsmpio_write_aggmethod == 2) {
+ else if (romio_write_aggmethod == 2) {
if (bufTypeIsContig) {
targetAggBlockLengths[targetAggContigAccessCount]= bufferAmountToSend;
@@ -993,15 +1074,15 @@ printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %l
}
}
#ifdef onesidedtrace
- printf("roundIter %d bufferAmountToSend is %d offsetStart is %ld currentRoundFDStartForMyTargetAgg is %ld targetDisplacementToUseThisRound is %ld targetAggsForMyDataFDStart[aggIter] is %ld\n",roundIter, bufferAmountToSend, offsetStart,currentRoundFDStartForMyTargetAgg,targetDisplacementToUseThisRound,targetAggsForMyDataFDStart[aggIter]);
+ printf("roundIter %d bufferAmountToSend is %d offsetStart is %ld currentRoundFDStartForMyTargetAgg is %ld currentRoundFDEndForMyTargetAgg is %ld targetDisplacementToUseThisRound is %ld targetAggsForMyDataFDStart[aggIter] is %ld\n",roundIter, bufferAmountToSend, offsetStart,currentRoundFDStartForMyTargetAgg,currentRoundFDEndForMyTargetAgg,targetDisplacementToUseThisRound,targetAggsForMyDataFDStart[aggIter]);
#endif
} // bufferAmountToSend > 0
} // contig list
- /* For gpfsmpio_write_aggmethod of 2 now build the derived type using the data from this round/agg and do 1 single mpi_put.
+ /* For romio_write_aggmethod of 2 now build the derived type using the data from this round/agg and do 1 single mpi_put.
*/
- if (gpfsmpio_write_aggmethod == 2) {
+ if (romio_write_aggmethod == 2) {
MPI_Datatype sourceBufferDerivedDataType, targetBufferDerivedDataType;
MPI_Type_create_struct(targetAggContigAccessCount, targetAggBlockLengths, sourceBufferDisplacements, targetAggDataTypes, &sourceBufferDerivedDataType);
@@ -1039,23 +1120,40 @@ printf("gpfsmpio_onesided_always_rmw - first buffer pre-read for file offsets %l
MPI_Type_free(&targetBufferDerivedDataType);
}
}
- if (!gpfsmpio_onesided_no_rmw) {
+ if (!romio_onesided_no_rmw) {
MPI_Win_lock(MPI_LOCK_SHARED, targetAggsForMyData[aggIter], 0, fd->io_buf_put_amounts_window);
- MPI_Put(&numBytesPutThisAggRound,1, MPI_INT,targetAggsForMyData[aggIter],myrank, 1,MPI_INT,fd->io_buf_put_amounts_window);
+ MPI_Accumulate(&numBytesPutThisAggRound,1, MPI_INT,targetAggsForMyData[aggIter],0, 1, MPI_INT, MPI_SUM, fd->io_buf_put_amounts_window);
MPI_Win_unlock(targetAggsForMyData[aggIter], fd->io_buf_put_amounts_window);
}
} // baseoffset != -1
} // target aggs
- } /// contig_access_count > 0
+
+ if (stripe_parms.stripeSize > 0) {
+ lastDataTypeExtent = currentFDSourceBufferState[numTargetAggs-1].dataTypeExtent;
+ lastFlatBufIndice = currentFDSourceBufferState[numTargetAggs-1].flatBufIndice;
+ lastIndiceOffset = currentFDSourceBufferState[numTargetAggs-1].indiceOffset;
#ifdef onesidedtrace
-printf("first barrier roundIter %d\n",roundIter);
+printf("setting lastDataTypeExtent %d lastFlatBufIndice %d lastIndiceOffset %ld\n",lastDataTypeExtent,lastFlatBufIndice,lastIndiceOffset);
#endif
- MPI_Barrier(fd->comm);
- if (iAmUsedAgg) {
+ }
+
+ } /// contig_access_count > 0
+
+ /* Synchronize all procs before the file write */
+ if ((stripe_parms.stripeSize == 0) || (stripe_parms.flushCB)) {
+#ifdef onesidedtrace
+ printf("first barrier roundIter %d\n",roundIter);
+#endif
+ MPI_Barrier(fd->comm);
+ }
+
+ if ((iAmUsedAgg || iWasUsedStripingAgg) && ((stripe_parms.stripeSize == 0) || (stripe_parms.flushCB))) {
+ iWasUsedStripingAgg = 0;
/* Determine what offsets define the portion of the file domain the agg is writing this round.
*/
+ if (iAmUsedAgg) {
if ((fd_end[myAggRank] - currentRoundFDStart) < coll_bufsize) {
if (myAggRank == greatestFileDomainAggRank) {
if (fd_end[myAggRank] > lastFileOffset)
@@ -1070,27 +1168,59 @@ printf("first barrier roundIter %d\n",roundIter);
currentRoundFDEnd = currentRoundFDStart + coll_bufsize - (ADIO_Offset)1;
#ifdef onesidedtrace
- printf("used agg about to writecontig - currentRoundFDStart is %ld currentRoundFDEnd is %ld within file domeain %ld to %ld\n",currentRoundFDStart,currentRoundFDEnd,fd_start[myAggRank],fd_end[myAggRank]);
+ printf("current used agg about to writecontig - currentRoundFDStart is %ld currentRoundFDEnd is %ld within file domeain %ld to %ld\n",currentRoundFDStart,currentRoundFDEnd,fd_start[myAggRank],fd_end[myAggRank]);
+#endif
+ }
+#ifdef onesidedtrace
+ else {
+ printf("former used agg about to writecontig\n");
+ }
#endif
-
int doWriteContig = 1;
- if (!gpfsmpio_onesided_no_rmw) {
- int numBytesPutIntoBuf = 0;
- for (i=0;i<nprocs;i++) {
- numBytesPutIntoBuf += write_buf_put_amounts[i];
- write_buf_put_amounts[i] = 0;
+ if (!romio_onesided_no_rmw) {
+ if (stripe_parms.stripeSize == 0) {
+ if (fd->io_buf_put_amounts != ((int)(currentRoundFDEnd - currentRoundFDStart)+1)) {
+ doWriteContig = 0;
+ *hole_found = 1;
+#ifdef onesidedtrace
+ printf("hole found --- fd->io_buf_put_amounts is %d currentRoundFDEnd is %ld currentRoundFDStart is %ld on roundIter %d\n",fd->io_buf_put_amounts,currentRoundFDEnd,currentRoundFDStart,roundIter);
+#endif
+ }
}
- if (numBytesPutIntoBuf != ((int)(currentRoundFDEnd - currentRoundFDStart)+1)) {
- doWriteContig = 0;
- *hole_found = 1;
+ else { // file striping
+ if (fd->io_buf_put_amounts != amountOfStripedDataExpected) {
+ doWriteContig = 0;
+ *hole_found = 1;
+#ifdef onesidedtrace
+ printf("striping hole found --- fd->io_buf_put_amounts is %d amountOfStripedDataExpected is %d on roundIter %d\n",fd->io_buf_put_amounts,amountOfStripedDataExpected,roundIter);
+#endif
+ }
}
+ fd->io_buf_put_amounts = 0;
}
if (!useIOBuffer) {
- if (doWriteContig)
- ADIO_WriteContig(fd, write_buf, (int)(currentRoundFDEnd - currentRoundFDStart)+1,
- MPI_BYTE, ADIO_EXPLICIT_OFFSET,currentRoundFDStart, &status, error_code);
-
+ if (doWriteContig) {
+ if (stripe_parms.stripeSize > 0) {
+#ifdef onesidedtrace
+ printf("about to write out %d stripes\n",numStripesUsed);
+#endif
+ int stripeIter = 0;
+ for (stripeIter=0;stripeIter<numStripesUsed;stripeIter++) {
+#ifdef onesidedtrace
+ printf("writing write_buf offset %ld len %ld file offset %ld\n",((ADIO_Offset)stripeIter * (ADIO_Offset)(stripe_parms.stripeSize)),stripeWriteLens[stripeIter],stripeWriteOffsets[stripeIter]);
+#endif
+ ADIO_WriteContig(fd, (char*)write_buf + ((ADIO_Offset)stripeIter * (ADIO_Offset)(stripe_parms.stripeSize)), stripeWriteLens[stripeIter],
+ MPI_BYTE, ADIO_EXPLICIT_OFFSET,stripeWriteOffsets[stripeIter], &status, error_code);
+ }
+ ADIOI_Free(stripeWriteLens);
+ ADIOI_Free(stripeWriteOffsets);
+ }
+ else {
+ ADIO_WriteContig(fd, write_buf, (int)(currentRoundFDEnd - currentRoundFDStart)+1,
+ MPI_BYTE, ADIO_EXPLICIT_OFFSET,currentRoundFDStart, &status, error_code);
+ }
+ }
} else { /* use the thread writer */
if(!pthread_equal(io_thread, pthread_self())) {
@@ -1118,7 +1248,8 @@ printf("first barrier roundIter %d\n",roundIter);
io_thread_args.io_kind = ADIOI_WRITE;
io_thread_args.size = (currentRoundFDEnd-currentRoundFDStart) + 1;
io_thread_args.offset = currentRoundFDStart;
- io_thread_args.status = status;
+ ADIO_Status adio_status;
+ io_thread_args.status = &adio_status;
io_thread_args.error_code = *error_code;
if ( (pthread_create(&io_thread, NULL,
@@ -1129,7 +1260,7 @@ printf("first barrier roundIter %d\n",roundIter);
} // iAmUsedAgg
- if (!iAmUsedAgg && useIOBuffer) {
+ if (!iAmUsedAgg && useIOBuffer && ((stripe_parms.stripeSize == 0) || (stripe_parms.flushCB))) {
if (currentWriteBuf == 0) {
currentWriteBuf = 1;
write_buf = write_buf1;
@@ -1140,10 +1271,10 @@ printf("first barrier roundIter %d\n",roundIter);
}
}
- if (iAmUsedAgg) {
+ if (iAmUsedAgg && stripe_parms.stripeSize == 0) {
currentRoundFDStart += coll_bufsize;
- if (gpfsmpio_onesided_always_rmw && (roundIter<(numberOfRounds-1))) { // read in the buffer for the next round unless this is the last round
+ if (romio_onesided_always_rmw && (roundIter<(numberOfRounds-1))) { // read in the buffer for the next round unless this is the last round
ADIO_Offset tmpCurrentRoundFDEnd = 0;
if ((fd_end[myAggRank] - currentRoundFDStart) < coll_bufsize) {
if (myAggRank == greatestFileDomainAggRank) {
@@ -1158,7 +1289,7 @@ printf("first barrier roundIter %d\n",roundIter);
else
tmpCurrentRoundFDEnd = currentRoundFDStart + coll_bufsize - (ADIO_Offset)1;
#ifdef onesidedtrace
-printf("gpfsmpio_onesided_always_rmw - round %d buffer pre-read for file offsets %ld to %ld total is %d\n",roundIter, currentRoundFDStart,tmpCurrentRoundFDEnd,(int)(tmpCurrentRoundFDEnd - currentRoundFDStart)+1);
+ printf("romio_onesided_always_rmw - round %d buffer pre-read for file offsets %ld to %ld total is %d\n",roundIter, currentRoundFDStart,tmpCurrentRoundFDEnd,(int)(tmpCurrentRoundFDEnd - currentRoundFDStart)+1);
#endif
ADIO_ReadContig(fd, write_buf, (int)(tmpCurrentRoundFDEnd - currentRoundFDStart)+1,
MPI_BYTE, ADIO_EXPLICIT_OFFSET,currentRoundFDStart, &status, error_code);
@@ -1168,7 +1299,7 @@ printf("gpfsmpio_onesided_always_rmw - round %d buffer pre-read for file offsets
if (roundIter<(numberOfRounds-1)) {
#ifdef onesidedtrace
-printf("second barrier roundIter %d\n",roundIter);
+printf("second barrier roundIter %d --- waiting in loop this time\n",roundIter);
#endif
MPI_Barrier(fd->comm);
}
@@ -1206,8 +1337,6 @@ printf("freeing datastructures\n");
ADIOI_Free(currentFDSourceBufferState);
- if (!bufTypeIsContig)
- ADIOI_Delete_flattened(datatype);
return;
}
@@ -1341,11 +1470,11 @@ printf("ADIOI_OneSidedReadAggregation started on rank %d\n",myrank);
#ifdef onesidedtrace
printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_offsets[j]);
#endif
- lastFileOffset = ADIOI_MAX(lastFileOffset,end_offsets[j]);
+ lastFileOffset = MPL_MAX(lastFileOffset,end_offsets[j]);
if (firstFileOffset == -1)
firstFileOffset = st_offsets[j];
else
- firstFileOffset = ADIOI_MIN(firstFileOffset,st_offsets[j]);
+ firstFileOffset = MPL_MIN(firstFileOffset,st_offsets[j]);
}
int myAggRank = -1; /* if I am an aggregor this is my index into fd->hints->ranklist */
@@ -1716,7 +1845,7 @@ printf("end_offsets[%d] is %ld st_offsets[%d] is %ld\n",j,end_offsets[j],j,st_of
}
additionalFDCounter++;
-
+
#ifdef onesidedtrace
printf("block extended beyond fd init settings numSourceAggs %d offset_list[%d] with value %ld past fd border %ld with len %ld\n",numSourceAggs,i,offset_list[blockIter],fd_start[currentAggRankListIndex],len_list[blockIter]);
@@ -1816,8 +1945,8 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
/* This is the second main loop of the algorithm, actually nested loop of target aggs within rounds. There are 2 flavors of this.
- * For gpfsmpio_read_aggmethod of 1 each nested iteration for the source agg does an mpi_put on a contiguous chunk using a primative datatype
- * determined using the data structures from the first main loop. For gpfsmpio_read_aggmethod of 2 each nested iteration for the source agg
+ * For romio_read_aggmethod of 1 each nested iteration for the source agg does an mpi_put on a contiguous chunk using a primative datatype
+ * determined using the data structures from the first main loop. For romio_read_aggmethod of 2 each nested iteration for the source agg
* builds up data to use in created a derived data type for 1 mpi_put that is done for the target agg for each round.
* To support lustre there will need to be an additional layer of nesting for the multiple file domains
* within target aggs.
@@ -1892,7 +2021,7 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
io_thread_args.io_kind = ADIOI_READ;
io_thread_args.size = amountDataToReadNextRound;
io_thread_args.offset = nextRoundFDStart;
- io_thread_args.status = status;
+ io_thread_args.status = &status;
io_thread_args.error_code = *error_code;
if ( (pthread_create(&io_thread, NULL,
ADIOI_IO_Thread_Func, &(io_thread_args))) != 0)
@@ -1955,7 +2084,7 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
int sourceAggContigAccessCount = 0;
/* These data structures are used for the derived datatype mpi_get
- * in the gpfsmpio_read_aggmethod of 2 case.
+ * in the romio_read_aggmethod of 2 case.
*/
int *sourceAggBlockLengths=NULL;
MPI_Aint *sourceAggDisplacements=NULL, *recvBufferDisplacements=NULL;
@@ -2000,7 +2129,7 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
}
if (bufferAmountToRecv > 0) { /* we have data to recv this round */
- if (gpfsmpio_read_aggmethod == 2) {
+ if (romio_read_aggmethod == 2) {
/* Only allocate these arrays if we are using method 2 and only do it once for this round/source agg.
*/
if (!allocatedDerivedTypeArrays) {
@@ -2035,11 +2164,11 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
sourceDisplacementToUseThisRound += (MPI_Aint)coll_bufsize;
}
- /* For gpfsmpio_read_aggmethod of 1 do the mpi_get using the primitive MPI_BYTE type from each
+ /* For romio_read_aggmethod of 1 do the mpi_get using the primitive MPI_BYTE type from each
* contiguous chunk from the target, if the source is non-contiguous then unpack the data after
* the MPI_Win_unlock is done to make sure the data has arrived first.
*/
- if (gpfsmpio_read_aggmethod == 1) {
+ if (romio_read_aggmethod == 1) {
MPI_Win_lock(MPI_LOCK_SHARED, sourceAggsForMyData[aggIter], 0, read_buf_window);
char *getSourceData = NULL;
if (bufTypeIsContig) {
@@ -2059,11 +2188,11 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
}
}
- /* For gpfsmpio_read_aggmethod of 2 populate the data structures for this round/agg for this offset iter
+ /* For romio_read_aggmethod of 2 populate the data structures for this round/agg for this offset iter
* to be used subsequently when building the derived type for 1 mpi_put for all the data for this
* round/agg.
*/
- else if (gpfsmpio_read_aggmethod == 2) {
+ else if (romio_read_aggmethod == 2) {
if (bufTypeIsContig) {
sourceAggBlockLengths[sourceAggContigAccessCount]= bufferAmountToRecv;
sourceAggDataTypes[sourceAggContigAccessCount] = MPI_BYTE;
@@ -2084,9 +2213,9 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
} // bufferAmountToRecv > 0
} // contig list
- /* For gpfsmpio_read_aggmethod of 2 now build the derived type using the data from this round/agg and do 1 single mpi_put.
+ /* For romio_read_aggmethod of 2 now build the derived type using the data from this round/agg and do 1 single mpi_put.
*/
- if (gpfsmpio_read_aggmethod == 2) {
+ if (romio_read_aggmethod == 2) {
MPI_Datatype recvBufferDerivedDataType, sourceBufferDerivedDataType;
MPI_Type_create_struct(sourceAggContigAccessCount, sourceAggBlockLengths, recvBufferDisplacements, sourceAggDataTypes, &recvBufferDerivedDataType);
@@ -2162,7 +2291,5 @@ printf("iAmUsedAgg - currentRoundFDStart initialized "
ADIOI_Free(currentFDSourceBufferState);
- if (!bufTypeIsContig)
- ADIOI_Delete_flattened(datatype);
return;
}
diff --git a/src/mpi/romio/adio/common/p2p_aggregation.c b/src/mpi/romio/adio/common/p2p_aggregation.c
index 89e891b..5ea590f 100644
--- a/src/mpi/romio/adio/common/p2p_aggregation.c
+++ b/src/mpi/romio/adio/common/p2p_aggregation.c
@@ -1,5 +1,12 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include "adio.h"
#include "adio_extern.h"
+#include "ad_tuning.h"
#include "../ad_gpfs/ad_gpfs_tuning.h"
#include <pthread.h>
@@ -417,7 +424,7 @@ void ADIOI_P2PContigWriteAggregation(ADIO_File fd,
io_thread_args.io_kind = ADIOI_WRITE;
io_thread_args.size = totalDataReceivedThisRound;
io_thread_args.offset = currentRoundFDStart;
- io_thread_args.status = status;
+ io_thread_args.status = &status;
io_thread_args.error_code = *error_code;
if ( (pthread_create(&io_thread, NULL,
ADIOI_IO_Thread_Func, &(io_thread_args))) != 0)
@@ -716,7 +723,7 @@ void ADIOI_P2PContigReadAggregation(ADIO_File fd,
io_thread_args.io_kind = ADIOI_READ;
io_thread_args.size = amountDataToReadNextRound;
io_thread_args.offset = nextRoundFDStart;
- io_thread_args.status = status;
+ io_thread_args.status = &status;
io_thread_args.error_code = *error_code;
if ( (pthread_create(&io_thread, NULL,
ADIOI_IO_Thread_Func, &(io_thread_args))) != 0)
diff --git a/src/mpi/romio/adio/common/shfp_fname.c b/src/mpi/romio/adio/common/shfp_fname.c
index dfa5baf..1e76885 100644
--- a/src/mpi/romio/adio/common/shfp_fname.c
+++ b/src/mpi/romio/adio/common/shfp_fname.c
@@ -39,7 +39,9 @@ void ADIOI_Shfp_fname(ADIO_File fd, int rank, int *error_code)
fd->shared_fp_fname = (char *) ADIOI_Malloc(PATH_MAX);
if (!rank) {
- srand(time(NULL));
+ /* srand takes int but time returns long; keep the lower and most
+ * significant 32 bits */
+ srand(time(NULL)& 0xffffffff);
i = rand();
pid = (int)getpid();
@@ -87,9 +89,9 @@ void ADIOI_Shfp_fname(ADIO_File fd, int rank, int *error_code)
}
}
- ADIOI_Snprintf(tmp, 128, ".shfp.%d.%d", pid, i);
- /* ADIOI_Strnapp will return non-zero if truncated. That's ok */
- ADIOI_Strnapp(fd->shared_fp_fname, tmp, PATH_MAX);
+ MPL_snprintf(tmp, 128, ".shfp.%d.%d", pid, i);
+ /* MPL_strnapp will return non-zero if truncated. That's ok */
+ MPL_strnapp(fd->shared_fp_fname, tmp, PATH_MAX);
len = (int)strlen(fd->shared_fp_fname);
MPI_Bcast(&len, 1, MPI_INT, 0, fd->comm);
diff --git a/src/mpi/romio/adio/common/status_setb.c b/src/mpi/romio/adio/common/status_setb.c
index ec1e4ff..c54d958 100644
--- a/src/mpi/romio/adio/common/status_setb.c
+++ b/src/mpi/romio/adio/common/status_setb.c
@@ -8,7 +8,7 @@
#include "adio.h"
#include "mpi.h"
-#if defined(MPICH2) || (defined(MPICH) && (MPICH_NAME >= 3))
+#if defined(HAVE_MPI_STATUS_SET_ELEMENTS_X)
/* Not quite correct, but much closer for MPI2 */
/* TODO: still needs to handle partial datatypes and situations where the mpi
* implementation fills status with something other than bytes (globus2 might
@@ -16,22 +16,11 @@
int MPIR_Status_set_bytes(MPI_Status *status, MPI_Datatype datatype,
MPI_Count nbytes)
{
- ADIOI_UNREFERENCED_ARG(datatype);
+ MPL_UNREFERENCED_ARG(datatype);
/* it's ok that ROMIO stores number-of-bytes in status, not
* count-of-copies, as long as MPI_GET_COUNT knows what to do */
if (status != MPI_STATUS_IGNORE)
MPI_Status_set_elements_x(status, MPI_BYTE, nbytes);
return MPI_SUCCESS;
}
-#elif defined(MPILAM) || defined(MPISGI)
-int MPIR_Status_set_bytes(MPI_Status *status, MPI_Datatype datatype,
- MPI_Count nbytes)
-{
- /* Bogusness to silence compiler warnings */
- if (datatype == MPI_DATATYPE_NULL);
-
- if (status != MPI_STATUS_IGNORE)
- status->st_length = nbytes;
- return MPI_SUCCESS;
-}
#endif
diff --git a/src/mpi/romio/adio/common/strfns.c b/src/mpi/romio/adio/common/strfns.c
index 65e5ac2..14cf81c 100644
--- a/src/mpi/romio/adio/common/strfns.c
+++ b/src/mpi/romio/adio/common/strfns.c
@@ -7,8 +7,6 @@
#include "adio.h"
-/* style: allow:sprintf:3 sig:0 */
-
/*
* Below are the "safe" versions of the various string and printf
* operations. They are directly taken from MPICH, with MPIU replaced by ADIOI.
@@ -68,58 +66,6 @@ int ADIOI_Strncpy( char *dest, const char *src, size_t n )
return 1;
}
-/* Append src to dest, but only allow dest to contain n characters (including
- any null, which is always added to the end of the line */
-/*@ ADIOI_Strnapp - Append to a string with a maximum length
-
-Input Parameters:
-+ instr - String to copy
-- maxlen - Maximum total length of 'outstr'
-
-Output Parameters:
-. outstr - String to copy into
-
- Notes:
- This routine is similar to 'strncat' except that the 'maxlen' argument
- is the maximum total length of 'outstr', rather than the maximum
- number of characters to move from 'instr'. Thus, this routine is
- easier to use when the declared size of 'instr' is known.
-
- Module:
- Utility
- @*/
-int ADIOI_Strnapp( char *dest, const char *src, size_t n )
-{
- char * restrict d_ptr = dest;
- const char * restrict s_ptr = src;
- register int i;
-
- /* Get to the end of dest */
- i = (int)n;
- while (i-- > 0 && *d_ptr) d_ptr++;
- if (i <= 0) return 1;
-
- /* Append. d_ptr points at first null and i is remaining space. */
- while (*s_ptr && i-- > 0) {
- *d_ptr++ = *s_ptr++;
- }
-
- /* We allow i >= (not just >) here because the first while decrements
- i by one more than there are characters, leaving room for the null */
- if (i >= 0) {
- *d_ptr = 0;
- return 0;
- }
- else {
- /* Force the null at the end */
- *--d_ptr = 0;
-
- /* We may want to force an error message here, at least in the
- debugging version */
- return 1;
- }
-}
-
/*@
ADIOI_Strdup - Duplicate a string
@@ -157,159 +103,3 @@ char *ADIOI_Strdup( const char *str )
}
return save_p;
}
-
-
-/*
- * We need an snprintf replacement for systems without one
- */
-#ifndef HAVE_SNPRINTF
-#include <ctype.h>
-/* FIXME: Really need a check for varargs.h vs stdarg.h */
-#include <stdarg.h>
-/*
- * This is an approximate form which is suitable for most uses within
- * the MPICH code
- */
-int ADIOI_Snprintf( char *str, size_t size, const char *format, ... )
-{
- int n;
- const char *p;
- char *out_str = str;
- va_list list;
-
- va_start(list, format);
-
- p = format;
- while (*p && size > 0) {
- char *nf;
-
- nf = strchr(p, '%');
- if (!nf) {
- /* No more format characters */
- while (size-- > 0 && *p) {
- *out_str++ = *p++;
- }
- }
- else {
- int nc;
- int width = -1;
-
- /* Copy until nf */
- while (p < nf && size-- > 0) {
- *out_str++ = *p++;
- }
- /* p now points at nf */
- /* Handle the format character */
- nc = nf[1];
- if (isdigit(nc)) {
- /* Get the field width */
- /* FIXME : Assumes ASCII */
- width = nc - '0';
- p = nf + 2;
- while (*p && isdigit(*p)) {
- width = 10 * width + (*p++ - '0');
- }
- /* When there is no longer a digit, get the format
- character */
- nc = *p++;
- }
- else {
- /* Skip over the format string */
- p += 2;
- }
-
- switch (nc) {
- case '%':
- *out_str++ = '%';
- size--;
- break;
-
- case 'd':
- {
- int val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of integer type */
- val = va_arg( list, int );
- sprintf( tmp, "%d", val );
- if (width > 0) {
- int tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 'x':
- {
- int val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of integer type */
- val = va_arg( list, int );
- sprintf( tmp, "%x", val );
- if (width > 0) {
- int tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 'p':
- {
- void *val;
- char tmp[20];
- char *t = tmp;
- val = va_arg( list, void * );
- sprintf( tmp, "%p", val );
- if (width > 0) {
- int tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 's':
- {
- char *s_arg;
- /* Get the argument, of pointer to char type */
- s_arg = va_arg( list, char * );
- while (size-- > 0 && s_arg && *s_arg) {
- *out_str++ = *s_arg++;
- }
- }
- break;
-
- default:
- /* Error, unknown case */
- return -1;
- break;
- }
- }
- }
-
- va_end(list);
-
- if (size-- > 0) *out_str++ = '\0';
-
- n = (int)(out_str - str);
- return n;
-}
-#endif
diff --git a/src/mpi/romio/adio/common/utils.c b/src/mpi/romio/adio/common/utils.c
index 533ff07..bdaf196 100644
--- a/src/mpi/romio/adio/common/utils.c
+++ b/src/mpi/romio/adio/common/utils.c
@@ -94,7 +94,7 @@ int ADIOI_Type_create_hindexed_x(int count,
ret = MPI_Type_create_struct(count, blocklens, array_of_displacements,
types, newtype);
} else {
- ret = MPI_Type_hindexed(count, blocklens,
+ ret = MPI_Type_create_hindexed(count, blocklens,
array_of_displacements, oldtype, newtype);
}
for (i=0; i< count; i++)
diff --git a/src/mpi/romio/adio/include/.state-cache b/src/mpi/romio/adio/include/.state-cache
index f4a7217..927442b 100644
--- a/src/mpi/romio/adio/include/.state-cache
+++ b/src/mpi/romio/adio/include/.state-cache
@@ -1,46 +1,49 @@
<dir>
-<file name="adio_cb_config_list.h" info="1447123141"/>
-<file name="adioi_error.h" info="1447123141"/>
-<file name="adioi_fs_proto.h" info="1447123141"/>
-<file name="heap-sort.h" info="1447123141"/>
-<file name="mpipr.h" info="1447123141"/>
-<file name="adioi_errmsg.h" info="1447123141"/>
-<file name="mpio_error.h" info="1447123141"/>
-<file name="mpiu_external32.h" info="1447123141"/>
-<file name="nopackage.h" info="1447123141"/>
-<file name="adio_extern.h" info="1447123141"/>
-<file name="adio.h" info="1447123141"/>
-<file name="adioi.h" info="1447123141"/>
-<file name="hint_fns.h" info="1447123141"/>
-<file name="mpiu_greq.h" info="1447123141"/>
+<file name="heap-sort.h" info="1478973152"/>
+<file name="adio_extern.h" info="1478973152"/>
+<file name="mpiu_greq.h" info="1478973152"/>
+<file name="adio_cb_config_list.h" info="1478973152"/>
+<file name="adioi_errmsg.h" info="1478973152"/>
+<file name="adioi_fs_proto.h" info="1478973152"/>
+<file name="mpio_error.h" info="1478973152"/>
+<file name="adioi_error.h" info="1478973152"/>
+<file name="adio.h" info="1478973152"/>
+<file name="mpipr.h" info="1478973152"/>
+<file name="adioi.h" info="1478973152"/>
+<file name="hint_fns.h" info="1478973152"/>
+<file name="mpiu_external32.h" info="1478973152"/>
+<file name="ad_tuning.h" info="1478973152"/>
+<file name="nopackage.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="adio_cb_config_list.h">
-</fileinfo>
-<fileinfo name="adioi_error.h">
+<fileinfo name="heap-sort.h">
</fileinfo>
-<fileinfo name="adioi_fs_proto.h">
+<fileinfo name="adio_extern.h">
</fileinfo>
-<fileinfo name="heap-sort.h">
+<fileinfo name="mpiu_greq.h">
</fileinfo>
-<fileinfo name="mpipr.h">
+<fileinfo name="adio_cb_config_list.h">
</fileinfo>
<fileinfo name="adioi_errmsg.h">
</fileinfo>
-<fileinfo name="mpio_error.h">
-</fileinfo>
-<fileinfo name="mpiu_external32.h">
+<fileinfo name="adioi_fs_proto.h">
</fileinfo>
-<fileinfo name="nopackage.h">
+<fileinfo name="mpio_error.h">
</fileinfo>
-<fileinfo name="adio_extern.h">
+<fileinfo name="adioi_error.h">
</fileinfo>
<fileinfo name="adio.h">
</fileinfo>
+<fileinfo name="mpipr.h">
+</fileinfo>
<fileinfo name="adioi.h">
</fileinfo>
<fileinfo name="hint_fns.h">
</fileinfo>
-<fileinfo name="mpiu_greq.h">
+<fileinfo name="mpiu_external32.h">
+</fileinfo>
+<fileinfo name="ad_tuning.h">
+</fileinfo>
+<fileinfo name="nopackage.h">
</fileinfo>
</data>
diff --git a/src/mpi/romio/adio/include/BaseIOErrMsgs.msg b/src/mpi/romio/adio/include/BaseIOErrMsgs.msg
deleted file mode 100644
index 0ca0526..0000000
--- a/src/mpi/romio/adio/include/BaseIOErrMsgs.msg
+++ /dev/null
@@ -1,51 +0,0 @@
-$set 12 MPI_ERR_ARG
-12 65 "Invalid offset argument"
-12 67 "Null datarep argument"
-12 69 "Invalid count argument"
-12 71 "Invalid size argument"
-12 73 "Invalid whence argument"
-12 75 "flag argument must be the same on all processes"
-12 77 "Invalid displacement argument"
-12 79 "Invalid etype argument"
-12 81 "Invalid filetype argument"
-12 83 "size argument must be the same on all processes"
-12 85 "offset points to a negative location in the file"
-12 87 "whence argument must be the same on all processes"
-12 89 "offset argument must be the same on all processes"
-$set 21 MPI_ERR_AMODE
-21 1 "Invalid amode"
-21 3 "Exactly one of MPI_MODE_RDONLY, MPI_MODE_WRONLY, or MPI_MODE_RDWR must be specified"
-21 5 "Cannot use MPI_MODE_CREATE or MPI_MODE_EXCL with MPI_MODE_RDONLY"
-21 7 "Cannot specify MPI_MODE_SEQUENTIAL with MPI_MODE_RDWR"
-$set 27 MPI_ERR_FILE
-27 1 "Invalid file handle"
-27 3 "Null file handle"
-27 5 "Corrupted file handle"
-$set 32 MPI_ERR_IO
-32 1 "I/O Error"
-32 2 "%s" 1
-32 3 "Only an integral number of etypes can be accessed"
-32 5 "Can't determine the file-system type. Check the filename/path you provided and try again. Otherwise, prefix the filename with a string to indicate the type of file system (piofs:, pfs:, nfs:, ufs:, hfs:, xfs:, sfs:, pvfs:, pvfs2:, ftp:, gsiftp:)"
-32 7 "ROMIO has not been configured to use the PFS file system"
-32 9 "ROMIO has not been configured to use the PIOFS file system"
-32 11 "ROMIO has not been configured to use the UFS file system"
-32 13 "ROMIO has not been configured to use the NFS file system"
-32 15 "ROMIO has not been configured to use the HFS file system"
-32 17 "ROMIO has not been configured to use the XFS file system"
-32 19 "ROMIO has not been configured to use the SFS file system"
-32 21 "ROMIO has not been configured to use the PVFS file system"
-32 23 "Only one active split collective I/O operation allowed per file handle"
-32 25 "No previous split collective begin"
-32 27 "There are outstanding nonblocking I/O operations on this file"
-32 29 "ROMIO tries to optimize this access by doing a read-modify-write, but is unable to read the file. Please give the file read permission and open it with MPI_MODE_RDWR."
-32 31 "To preallocate disk space, ROMIO needs to read the file and write it back, but is unable to read the file. Please give the file read permission and open it with MPI_MODE_RDWR."
-32 33 "Filetype must be constructed out of one or more etypes"
-$set 43 MPI_ERR_UNSUPPORTED_DATAREP
-43 1 "Unsupported data representation"
-43 3 "Only native data representation currently supported"
-$set 44 MPI_ERR_UNSUPPORTED_OPERATION
-44 1 "Unsupported operation"
-44 3 "Shared file pointer not supported on PIOFS and PVFS"
-44 5 "Cannot use this function when file is opened with amode MPI_MODE_SEQUENTIAL"
-44 7 "Cannot read from a file opened with amode MPI_MODE_WRONLY"
-44 9 "MPI_MODE_SEQUENTIAL not supported on PIOFS and PVFS"
diff --git a/src/mpi/romio/adio/include/ad_tuning.h b/src/mpi/romio/adio/include/ad_tuning.h
new file mode 100644
index 0000000..f481ccc
--- /dev/null
+++ b/src/mpi/romio/adio/include/ad_tuning.h
@@ -0,0 +1,36 @@
+/* ---------------------------------------------------------------- */
+/* (C)Copyright IBM Corp. 2007, 2008 */
+/* ---------------------------------------------------------------- */
+/**
+ * \file ad_tuning.h
+ * \brief Defines common performance tuning env var options
+ */
+
+/*---------------------------------------------------------------------
+ * ad_tuning.h
+ *
+ * declares common global variables and functions for performance tuning
+ *---------------------------------------------------------------------*/
+
+#ifndef AD_TUNING_H_
+#define AD_TUNING_H_
+
+#include "adio.h"
+
+
+/*-----------------------------------------
+ * Global variables for the control of performance tuning.
+ *-----------------------------------------*/
+
+/* corresponds to environment variables to select optimizations */
+extern int romio_write_aggmethod;
+extern int romio_read_aggmethod;
+extern int romio_onesided_no_rmw;
+extern int romio_onesided_always_rmw;
+extern int romio_onesided_inform_rmw;
+extern int romio_tunegather;
+
+/* set internal variables for tuning environment variables */
+void ad_get_env_vars(void);
+
+#endif /* AD_TUNING_H_ */
diff --git a/src/mpi/romio/adio/include/adio.h b/src/mpi/romio/adio/include/adio.h
index da77015..d29a01f 100644
--- a/src/mpi/romio/adio/include/adio.h
+++ b/src/mpi/romio/adio/include/adio.h
@@ -55,13 +55,6 @@
# define FORTRAN_API
#endif
-/* Use this macro for each parameter to a function that is not referenced in the body of the function */
-#ifdef HAVE_WINDOWS_H
-#define ADIOI_UNREFERENCED_ARG(a) a
-#else
-#define ADIOI_UNREFERENCED_ARG(a)
-#endif
-
/* Include romioconf.h if we haven't already (some include files may
need to include romioconf before some system includes) */
#ifndef ROMIOCONF_H_INCLUDED
@@ -237,7 +230,7 @@ typedef struct ADIOI_FileD {
int my_cb_nodes_index; /* my index into cb_config_list. -1 if N/A */
char *io_buf; /* two-phase buffer allocated out of i/o path */
MPI_Win io_buf_window; /* Window over the io_buf to support one-sided aggregation */
- int *io_buf_put_amounts; /* array tracking the amount of data mpi_put into the io_buf
+ int io_buf_put_amounts; /* the amount of data mpi_put into the io_buf
during the same round of one-sided write aggregation */
MPI_Win io_buf_put_amounts_window; /* Window over the io_buf_put_amounts */
/* External32 */
@@ -282,25 +275,16 @@ typedef struct {
#define ADIO_REQUEST_NULL ((ADIO_Request) 0)
#define ADIO_FILE_NULL ((ADIO_File) 0)
-/* file systems */
+/* file systems:
+ * the numbering is slightly strange because we have deleted file
+ * systems over time */
#define ADIO_NFS 150
-#define ADIO_PIOFS 151 /* IBM */
#define ADIO_UFS 152 /* Unix file system */
-#define ADIO_PFS 153 /* Intel */
#define ADIO_XFS 154 /* SGI */
-#define ADIO_HFS 155 /* HP/Convex */
-#define ADIO_SFS 156 /* NEC */
-#define ADIO_PVFS 157 /* PVFS for Linux Clusters from Clemson Univ. */
-#define ADIO_NTFS 158 /* NTFS for Windows NT */
#define ADIO_TESTFS 159 /* fake file system for testing */
#define ADIO_PVFS2 160 /* PVFS2: 2nd generation PVFS */
#define ADIO_PANFS 161 /* Panasas FS */
-#define ADIO_GRIDFTP 162 /* Globus GridFTP */
#define ADIO_LUSTRE 163 /* Lustre */
-/* #define ADIO_BGL 164 */ /* IBM BGL */
-/* #define ADIO_BGLOCKLESS 165 */ /* IBM BGL (lock-free) */
-#define ADIO_ZOIDFS 167 /* ZoidFS: the I/O forwarding fs */
-/* #define ADIO_BG 168 */
#define ADIO_GPFS 168
#define ADIO_SEEK_SET SEEK_SET
diff --git a/src/mpi/romio/adio/include/adio_extern.h b/src/mpi/romio/adio/include/adio_extern.h
index 9a7f2e5..e315f41 100644
--- a/src/mpi/romio/adio/include/adio_extern.h
+++ b/src/mpi/romio/adio/include/adio_extern.h
@@ -5,8 +5,6 @@
* See COPYRIGHT notice in top-level directory.
*/
-extern ADIOI_Flatlist_node *ADIOI_Flatlist;
-
extern ADIOI_Datarep *ADIOI_Datarep_head;
/* for f2c and c2f conversion */
@@ -29,3 +27,4 @@ extern MPI_Info ADIOI_syshints;
extern MPI_Op ADIO_same_amode;
extern int ADIOI_cb_config_list_keyval;
+extern int ADIOI_Flattened_type_keyval;
diff --git a/src/mpi/romio/adio/include/adioi.h b/src/mpi/romio/adio/include/adioi.h
index 0cc219e..bea225d 100644
--- a/src/mpi/romio/adio/include/adioi.h
+++ b/src/mpi/romio/adio/include/adioi.h
@@ -47,6 +47,7 @@ struct ADIOI_Hints_struct {
int ind_rd_buffer_size;
int ind_wr_buffer_size;
int deferred_open;
+ int start_iodevice;
int min_fdomain_size;
char *cb_config_list;
int *ranklist;
@@ -65,7 +66,6 @@ struct ADIOI_Hints_struct {
int dtype_write;
} pvfs2;
struct {
- int start_iodevice;
int co_ratio;
int coll_threshold;
int ds_in_coll;
@@ -124,7 +124,9 @@ typedef struct ADIOI_Fl_node {
* (-1 indicates "not explicitly set") */
ADIO_Offset lb_idx;
ADIO_Offset ub_idx;
- struct ADIOI_Fl_node *next; /* pointer to next node */
+ int refct; /* when storing flattened representation on a
+ type, attribute copy and delete routines
+ will manage refct */
} ADIOI_Flatlist_node;
#ifdef ROMIO_PVFS2
@@ -145,12 +147,6 @@ typedef struct ADIOI_AIO_req_str {
PVFS_Request file_req;
PVFS_Request mem_req;
#endif
-#ifdef ROMIO_NTFS
- /* Ptr to Overlapped struct */
- LPOVERLAPPED lpOvl;
- /* Ptr to file handle */
- HANDLE fd;
-#endif
} ADIOI_AIO_Request;
struct ADIOI_Fns_struct {
@@ -219,12 +215,6 @@ struct ADIOI_Fns_struct {
#define ADIOI_READ 26
#define ADIOI_WRITE 27
-#define ADIOI_MIN(a, b) ((a) < (b) ? (a) : (b))
-#define ADIOI_MAX(a, b) ((a) > (b) ? (a) : (b))
-/* thanks stackoverflow:
- * http://stackoverflow.com/questions/3982348/implement-generic-swap-macro-in-c */
-#define ADIOI_SWAP(x, y, T) do { T temp##x##y = x; x = y; y = temp##x##y; } while (0);
-
#define ADIOI_PREALLOC_BUFSZ 16777216 /* buffer size used to
preallocate disk space */
@@ -347,10 +337,15 @@ typedef struct {
/* prototypes for ADIO internal functions */
void ADIOI_SetFunctions(ADIO_File fd);
-void ADIOI_Flatten_datatype(MPI_Datatype type);
+ADIOI_Flatlist_node * ADIOI_Flatten_datatype(MPI_Datatype type);
void ADIOI_Flatten(MPI_Datatype type, ADIOI_Flatlist_node *flat,
ADIO_Offset st_offset, MPI_Count *curr_index);
-void ADIOI_Delete_flattened(MPI_Datatype datatype);
+/* callbakcs for attribute-style flattened tracking */
+int ADIOI_Flattened_type_copy(MPI_Datatype oldtype,
+ int type_keyval, void *extra_state, void *attribute_val_in,
+ void *attribute_val_out, int *flag);
+int ADIOI_Flattened_type_delete(MPI_Datatype datatype,
+ int type_keyval, void *attribute_val, void *extra_state);
ADIOI_Flatlist_node * ADIOI_Flatten_and_find(MPI_Datatype);
MPI_Count ADIOI_Count_contiguous_blocks(MPI_Datatype type, MPI_Count *curr_index);
void ADIOI_Complete_async(int *error_code);
@@ -697,6 +692,28 @@ void ADIOI_P2PContigReadAggregation(ADIO_File fd,
ADIO_Offset *fd_start,
ADIO_Offset *fd_end);
+/* This data structure holds parameters releated to file */
+/* striping needed by the one-sided aggregation algorithm. */
+/* A stripeSize of 0 indicates there is no striping. */
+typedef struct ADIOI_OneSidedStripeParms {
+ int stripeSize; /* size in bytes of the striping unit - a size of 0 indicates to the */
+ /* onesided algorithm that we are a non-striping file system */
+ ADIO_Offset segmentLen; /* size in bytes of the segment (stripeSize*number of aggs) */
+ /* up to the size of the file) */
+ int stripesPerAgg; /* the number of stripes to be packed into an agg cb for this segment */
+ int segmentIter; /* segment number for the group of stripes currently being packed into */
+ /* the agg cb - resets to 0 for each cb flush to the file system */
+ int flushCB; /* once we have fully packed the cb on an agg this flags */
+ /* tells us to now write to the file */
+ ADIO_Offset stripedLastFileOffset; /* since we are now just calling the onesided algorithm */
+ /* with the offset range of segment, we still need to */
+ /* know the actual last offset of the file. */
+ int firstStripedWriteCall; /* whether this is the first call in the first segement of the */
+ /* onesided algorithm. */
+ int lastStripedWriteCall; /* whether this is the last call in the last segement of the */
+ /* onesided algorithm. */
+} ADIOI_OneSidedStripeParms;
+
int ADIOI_OneSidedCleanup(ADIO_File fd);
void ADIOI_OneSidedWriteAggregation(ADIO_File fd,
ADIO_Offset *offset_list,
@@ -705,12 +722,13 @@ void ADIOI_OneSidedWriteAggregation(ADIO_File fd,
const void *buf,
MPI_Datatype datatype,
int *error_code,
- ADIO_Offset *st_offsets,
- ADIO_Offset *end_offsets,
+ ADIO_Offset firstFileOffset,
+ ADIO_Offset lastFileOffset,
int numNonZeroDataOffsets,
ADIO_Offset *fd_start,
ADIO_Offset* fd_end,
- int *hole_found);
+ int *hole_found,
+ ADIOI_OneSidedStripeParms stripe_parms);
void ADIOI_OneSidedReadAggregation(ADIO_File fd,
ADIO_Offset *offset_list,
ADIO_Offset *len_list,
@@ -730,7 +748,6 @@ void ADIOI_GEN_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
void ADIOI_GEN_Close(ADIO_File fd, int *error_code);
void ADIOI_Shfp_fname(ADIO_File fd, int rank, int *error_code);
void ADIOI_GEN_Prealloc(ADIO_File fd, ADIO_Offset size, int *error_code);
-int ADIOI_Error(ADIO_File fd, int error_code, char *string);
int MPIR_Err_setmsg( int, int, const char *, const char *, const char *, ... );
int ADIOI_End_call(MPI_Comm comm, int keyval, void *attribute_val, void *extra_state);
int MPIR_Status_set_bytes(MPI_Status *status, MPI_Datatype datatype, MPI_Count nbytes);
@@ -858,7 +875,7 @@ int MPIOI_File_iread_all(MPI_File fh,
/* Unix-style file locking */
-#if (defined(ROMIO_HFS) || defined(ROMIO_XFS))
+#if defined(ROMIO_XFS)
# define ADIOI_WRITE_LOCK(fd, offset, whence, len) \
do {if (((fd)->file_system == ADIO_XFS) || ((fd)->file_system == ADIO_HFS)) \
@@ -875,18 +892,6 @@ int MPIOI_File_iread_all(MPI_File fh,
ADIOI_Set_lock64((fd)->fd_sys, F_SETLK64, F_UNLCK, offset, whence, len); \
else ADIOI_Set_lock((fd)->fd_sys, F_SETLK, F_UNLCK, offset, whence, len); }while (0)
-#elif (defined(ROMIO_NTFS))
-
-#define ADIOI_LOCK_CMD 0
-#define ADIOI_UNLOCK_CMD 1
-
-# define ADIOI_WRITE_LOCK(fd, offset, whence, len) \
- ADIOI_Set_lock((fd)->fd_sys, ADIOI_LOCK_CMD, LOCKFILE_EXCLUSIVE_LOCK, offset, whence, len)
-# define ADIOI_READ_LOCK(fd, offset, whence, len) \
- ADIOI_Set_lock((fd)->fd_sys, ADIOI_LOCK_CMD, 0, offset, whence, len)
-# define ADIOI_UNLOCK(fd, offset, whence, len) \
- ADIOI_Set_lock((fd)->fd_sys, ADIOI_UNLOCK_CMD, LOCKFILE_FAIL_IMMEDIATELY, offset, whence, len)
-
#else
#ifdef ADIOI_MPE_LOGGING
@@ -922,7 +927,6 @@ int ADIOI_Set_lock64(FDTYPE fd_sys, int cmd, int type, ADIO_Offset offset, int w
#define ADIOI_Free(a) ADIOI_Free_fn(a,__LINE__,__FILE__)
int ADIOI_Strncpy( char *outstr, const char *instr, size_t maxlen );
-int ADIOI_Strnapp( char *, const char *, size_t );
char *ADIOI_Strdup( const char * );
/* the current MPI standard is not const-correct, and modern compilers warn
@@ -941,8 +945,10 @@ char *ADIOI_Strdup( const char * );
#define ADIOI_Info_delete(info_,key_str_) \
MPI_Info_delete((info_),((char*)key_str_))
+/* the I/O related support for MPI_Comm_split_type */
+int MPIR_Comm_split_filesystem(MPI_Comm comm, int key,
+ const char *dirname, MPI_Comm * newcomm);
-/* Provide a fallback snprintf for systems that do not have one */
/* Define attribute as empty if it has no definition */
#ifndef ATTRIBUTE
#ifdef HAVE_GCC_ATTRIBUTE
@@ -952,19 +958,6 @@ char *ADIOI_Strdup( const char * );
#endif
#endif
-/* style: allow:snprintf:1 sig:0 */
-
-#ifdef HAVE_SNPRINTF
-#define ADIOI_Snprintf snprintf
-/* Sometimes systems don't provide prototypes for snprintf */
-#ifdef NEEDS_SNPRINTF_DECL
-extern int snprintf( char *, size_t, const char *, ... ) ATTRIBUTE((format(printf,3,4)));
-#endif
-#else
-int ADIOI_Snprintf( char *str, size_t size, const char *format, ... )
- ATTRIBUTE((format(printf,3,4)));
-#endif /* HAVE_SNPRINTF */
-
#define FPRINTF fprintf
#ifndef HAVE_STRERROR
@@ -1017,11 +1010,11 @@ int ADIOI_MPE_iwrite_b;
(no loss of (meaningful) high order bytes in 8 byte MPI_Aint
to (possible) 4 byte ptr cast) */
/* Should work even on 64bit or old 32bit configs */
- /* Use MPIU_Ensure_Aint_fits_in_pointer from mpiutil.h and
- MPIU_AINT_CAST_TO_VOID_PTR from configure (mpi.h) */
- #include "glue_romio.h"
+ /* Use MPIR_Ensure_Aint_fits_in_pointer and
+ MPIR_AINT_CAST_TO_VOID_PTR from configure (mpi.h) */
+ #include "mpir_ext.h"
- #define ADIOI_AINT_CAST_TO_VOID_PTR (void*)(MPIU_Pint)
+ #define ADIOI_AINT_CAST_TO_VOID_PTR (void*)(intptr_t)
/* The next two casts are only used when you don't want sign extension
when casting a (possible 4 byte) aint to a (8 byte) long long or offset */
#define ADIOI_AINT_CAST_TO_LONG_LONG (long long)
@@ -1036,11 +1029,9 @@ int ADIOI_MPE_iwrite_b;
#define ADIOI_AINT_CAST_TO_OFFSET ADIOI_AINT_CAST_TO_LONG_LONG
#define ADIOI_ENSURE_AINT_FITS_IN_PTR(aint_value)
#define ADIOI_Assert assert
- #define MPIU_Upint unsigned long
- #define MPID_THREADPRIV_DECL
#endif
-#ifdef USE_DBG_LOGGING /*todo fix dependency on mpich?*/
+#ifdef MPL_USE_DBG_LOGGING /*todo fix dependency on mpich?*/
/* DBGT_FPRINTF terse level printing */
#define DBGT_FPRINTF if (MPIR_Ext_dbg_romio_verbose_enabled) fprintf(stderr,"%s:%d:",__FILE__,__LINE__); \
if (MPIR_Ext_dbg_romio_terse_enabled) fprintf
@@ -1064,7 +1055,7 @@ typedef struct wcThreadFuncData {
char *buf;
int size;
ADIO_Offset offset;
- ADIO_Status status;
+ ADIO_Status *status;
int error_code;
} ADIOI_IO_ThreadFuncData;
@@ -1087,4 +1078,6 @@ ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
#endif
+#include "mpl.h"
+
#endif /* ADIOI_INCLUDE */
diff --git a/src/mpi/romio/adio/include/adioi_errmsg.h b/src/mpi/romio/adio/include/adioi_errmsg.h
index b1cdb45..51a85b8 100644
--- a/src/mpi/romio/adio/include/adioi_errmsg.h
+++ b/src/mpi/romio/adio/include/adioi_errmsg.h
@@ -32,10 +32,10 @@ MPI_ERR_TYPE
MPIR_ERR_TYPE_NULL (null datatype. from MPICH)
MPI_ERR_UNSUPPORTED_OPERATION
- MPIR_ERR_NO_SHARED_FP "Shared file pointer not supported on PIOFS and PVFS"
+ MPIR_ERR_NO_SHARED_FP "Shared file pointer not supported on this fs"
MPIR_ERR_AMODE_SEQ "Cannot use this function when file is opened with amode MPI_MODE_SEQUENTIAL"
MPIR_ERR_MODE_WRONLY "Cannot read from a file opened with amode MPI_MODE_WRONLY"
- MPIR_ERR_NO_MODE_SEQ "MPI_MODE_SEQUENTIAL not supported on PIOFS and PVFS"
+ MPIR_ERR_NO_MODE_SEQ "MPI_MODE_SEQUENTIAL not supported on this fs"
MPI_ERR_REQUEST
MPIR_ERR_REQUEST_NULL (null request. from MPICH)
@@ -43,14 +43,10 @@ MPI_ERR_REQUEST
MPI_ERR_IO
MPIR_ERR_ETYPE_FRACTIONAL "Only an integral number of etypes can be accessed"
MPIR_ERR_NO_FSTYPE "Can't determine the file-system type. Check the filename/path you provided and try again. Otherwise, prefix the filename with a string to indicate the type of file sytem (piofs:, pfs:, nfs:, ufs:, hfs:, xfs:, sfs:, pvfs:, panfs: ftp: gsiftp:)"
- MPIR_ERR_NO_PFS "ROMIO has not been configured to use the PFS file system"
- MPIR_ERR_NO_PIOFS "ROMIO has not been configured to use the PIOFS file system"
MPIR_ERR_NO_UFS "ROMIO has not been configured to use the UFS file system"
MPIR_ERR_NO_NFS "ROMIO has not been configured to use the NFS file system"
- MPIR_ERR_NO_HFS "ROMIO has not been configured to use the HFS file system"
MPIR_ERR_NO_XFS "ROMIO has not been configured to use the XFS file system"
- MPIR_ERR_NO_SFS "ROMIO has not been configured to use the SFS file system"
- MPIR_ERR_NO_PVFS "ROMIO has not been configured to use the PVFS file system"
+ MPIR_ERR_NO_PVFS2 "ROMIO has not been configured to use the PVFS2 file system"
MPIR_ERR_NO_PANFS "ROMIO has not been configured to use the PANFS file system"
MPIR_ERR_MULTIPLE_SPLIT_COLL "Only one active split collective I/O operation allowed per file handle"
MPIR_ERR_NO_SPLIT_COLL "No previous split collective begin"
@@ -61,7 +57,7 @@ MPI_ERR_IO
MPIR_ERR_FILETYPE "Filetype must be constructed out of one or more etypes"
MPIR_ERR_NO_TESTFS "ROMIO has not been configured to use the TESTFS file system"
MPIR_ERR_DEFERRED "independent IO attempted even though no_indep_rw hint given"
- MPIR_ERR_NO_BGL "ROMIO has not been configured to use the BGL file system"
+ MPIR_ERR_NO_GPFS "ROMIO has not been configured to use the GPFS file system"
MPI_ERR_COMM
MPIR_ERR_COMM_NULL (null communicator. from MPICH)
diff --git a/src/mpi/romio/adio/include/adioi_fs_proto.h b/src/mpi/romio/adio/include/adioi_fs_proto.h
index e3af917..d1d50bf 100644
--- a/src/mpi/romio/adio/include/adioi_fs_proto.h
+++ b/src/mpi/romio/adio/include/adioi_fs_proto.h
@@ -19,51 +19,21 @@ extern struct ADIOI_Fns_struct ADIO_PANFS_operations;
/* prototypes are in adio/ad_panfs/ad_panfs.h */
#endif
-#ifdef ROMIO_PFS
-extern struct ADIOI_Fns_struct ADIO_PFS_operations;
-/* prototypes are in adio/ad_pfs/ad_pfs.h */
-#endif
-
-#ifdef ROMIO_PIOFS
-extern struct ADIOI_Fns_struct ADIO_PIOFS_operations;
-/* prototypes are in adio/ad_piofs/ad_piofs.h */
-#endif
-
#ifdef ROMIO_UFS
extern struct ADIOI_Fns_struct ADIO_UFS_operations;
/* prototypes are in adio/ad_ufs/ad_ufs.h */
#endif
-#ifdef ROMIO_HFS
-extern struct ADIOI_Fns_struct ADIO_HFS_operations;
-/* prototypes are in adio/ad_hfs/ad_hfs.h */
-#endif
-
#ifdef ROMIO_XFS
extern struct ADIOI_Fns_struct ADIO_XFS_operations;
/* prototypes are in adio/ad_xfs/ad_xfs.h */
#endif
-#ifdef ROMIO_SFS
-extern struct ADIOI_Fns_struct ADIO_SFS_operations;
-/* prototypes are in adio/ad_sfs/ad_sfs.h */
-#endif
-
#ifdef ROMIO_LUSTRE
extern struct ADIOI_Fns_struct ADIO_LUSTRE_operations;
/* prototypes are in adio/ad_lustre/ad_lustre.h */
#endif
-#ifdef ROMIO_NTFS
-extern struct ADIOI_Fns_struct ADIO_NTFS_operations;
-/* prototypes are in adio/ad_ntfs/ad_ntfs.h */
-#endif
-
-#ifdef ROMIO_PVFS
-extern struct ADIOI_Fns_struct ADIO_PVFS_operations;
-/* prototypes are in adio/ad_pvfs/ad_pvfs.h */
-#endif
-
#ifdef ROMIO_PVFS2
extern struct ADIOI_Fns_struct ADIO_PVFS2_operations;
/* prototypes are in adio/ad_pvfs2/ad_pvfs2.h */
@@ -79,14 +49,4 @@ extern struct ADIOI_Fns_struct ADIO_GPFS_operations;
/* prototypes are in adio/ad_gpfs/ad_gpfs.h */
#endif
-#ifdef ROMIO_GRIDFTP
-/* prototypes are in adio/ad_gridftp/ad_gridftp.h */
-extern struct ADIOI_Fns_struct ADIO_GRIDFTP_operations;
-#endif
-
-#ifdef ROMIO_ZOIDFS
-/* prototypes are in adio/ad_zoidfs/ad_zoidfs.h */
-extern struct ADIOI_Fns_struct ADIO_ZOIDFS_operations;
-#endif
-
#endif
diff --git a/src/mpi/romio/adio/include/mpio_error.h b/src/mpi/romio/adio/include/mpio_error.h
index f9d22b1..15c5774 100644
--- a/src/mpi/romio/adio/include/mpio_error.h
+++ b/src/mpi/romio/adio/include/mpio_error.h
@@ -45,14 +45,10 @@
#define MPIR_ADIO_ERROR 1 /* used for strerror(errno) */
#define MPIR_ERR_ETYPE_FRACTIONAL 3
#define MPIR_ERR_NO_FSTYPE 5
-#define MPIR_ERR_NO_PFS 7
-#define MPIR_ERR_NO_PIOFS 9
#define MPIR_ERR_NO_UFS 11
#define MPIR_ERR_NO_NFS 13
-#define MPIR_ERR_NO_HFS 15
#define MPIR_ERR_NO_XFS 17
-#define MPIR_ERR_NO_SFS 19
-#define MPIR_ERR_NO_PVFS 21
+#define MPIR_ERR_NO_PVFS2 21
#define MPIR_ERR_NO_PANFS 22
#define MPIR_ERR_MULTIPLE_SPLIT_COLL 23
#define MPIR_ERR_NO_SPLIT_COLL 25
@@ -60,10 +56,9 @@
#define MPIR_READ_PERM 29
#define MPIR_PREALLOC_PERM 31
#define MPIR_ERR_FILETYPE 33
-#define MPIR_ERR_NO_NTFS 35
#define MPIR_ERR_NO_TESTFS 36
#define MPIR_ERR_NO_LUSTRE 37
-#define MPIR_ERR_NO_BGL 38
+#define MPIR_ERR_NO_GPFS 38
/* MPI_ERR_COMM */
#ifndef MPIR_ERR_COMM_NULL
diff --git a/src/mpi/romio/adio/include/romioconf.h.in b/src/mpi/romio/adio/include/romioconf.h.in
index 9b173f0..01f5a68 100644
--- a/src/mpi/romio/adio/include/romioconf.h.in
+++ b/src/mpi/romio/adio/include/romioconf.h.in
@@ -1,7 +1,7 @@
/* adio/include/romioconf.h.in. Generated from configure.ac by autoheader. */
/*
- * (C) 2011 by Argonne National Laboratory.
+ * (C) 2008 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#ifndef ROMIOCONF_H_INCLUDED
@@ -82,9 +82,6 @@
/* Define if MPI-IO routines need a const qualifier */
#undef HAVE_MPIIO_CONST
-/* Define if MPICH memory tracing macros defined */
-#undef HAVE_MPIU_FUNCS
-
/* Define to 1 if you have the <mpix.h> header file. */
#undef HAVE_MPIX_H
@@ -133,21 +130,12 @@
/* Define if PVFS2_SUPER_MAGIC defined. */
#undef HAVE_PVFS2_SUPER_MAGIC
-/* Define to 1 if you have the <pvfs.h> header file. */
-#undef HAVE_PVFS_H
-
-/* Define if PVFS_SUPER_MAGIC defined. */
-#undef HAVE_PVFS_SUPER_MAGIC
-
/* Define to 1 if you have the `readlink' function. */
#undef HAVE_READLINK
/* Define to 1 if you have the <signal.h> header file. */
#undef HAVE_SIGNAL_H
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
/* Define to 1 if you have the `stat' function. */
#undef HAVE_STAT
@@ -232,15 +220,15 @@
/* Define to 1 if you have the `usleep' function. */
#undef HAVE_USLEEP
+/* Whether C compiler supports symbol visibility or not */
+#undef HAVE_VISIBILITY
+
/* Attribute style weak pragma */
#undef HAVE_WEAK_ATTRIBUTE
/* Define if weak symbols available */
#undef HAVE_WEAK_SYMBOLS
-/* Define to 1 if you have the <zoidfs.h> header file. */
-#undef HAVE_ZOIDFS_H
-
/* Define if int smaller than pointer */
#undef INT_LT_POINTER
@@ -253,9 +241,6 @@
/* Define if using HP MPI */
#undef MPIHP
-/* Define if compiling within LAM/MPI */
-#undef MPILAM
-
/* hack to make ROMIO build without profiling */
#undef MPIO_BUILD_PROFILING
@@ -289,9 +274,6 @@
/* Define if readlink needs a declaration */
#undef NEEDS_READLINK_DECL
-/* Define if snprintf needs a declaration */
-#undef NEEDS_SNPRINTF_DECL
-
/* Define if strdup needs a declaration */
#undef NEEDS_STRDUP_DECL
@@ -331,9 +313,6 @@
/* Define for ROMIO with GPFS */
#undef ROMIO_GPFS
-/* Define for ROMIO with gridftp */
-#undef ROMIO_GRIDFTP
-
/* Define if AIO calls need file descriptor */
#undef ROMIO_HAVE_AIO_CALLS_NEED_FILEDES
@@ -343,6 +322,9 @@
/* Define if statfs has f_fstypename */
#undef ROMIO_HAVE_STRUCT_STATFS_WITH_F_FSTYPENAME
+/* Define if statfs has f_type */
+#undef ROMIO_HAVE_STRUCT_STATFS_WITH_F_TYPE
+
/* defined if struct statvfs has a f_basetype member */
#undef ROMIO_HAVE_STRUCT_STATVFS_WITH_F_BASETYPE
@@ -352,9 +334,6 @@
/* Define if AIO calls seem to work */
#undef ROMIO_HAVE_WORKING_AIO
-/* Define for ROMIO with HFS */
-#undef ROMIO_HFS
-
/* Define if compiling within MPICH */
#undef ROMIO_INSIDE_MPICH
@@ -367,24 +346,12 @@
/* Define for ROMIO with PANFS */
#undef ROMIO_PANFS
-/* Define for ROMIO with PFS */
-#undef ROMIO_PFS
-
-/* Define for ROMIO with PVFS */
-#undef ROMIO_PVFS
-
/* Define for ROMIO with PVFS2 */
#undef ROMIO_PVFS2
-/* Define if int64_t must be defined for PVFS */
-#undef ROMIO_PVFS_NEEDS_INT64_DEFINITION
-
/* Define if run on Linux */
#undef ROMIO_RUN_ON_LINUX
-/* Define for ROMIO with SFS */
-#undef ROMIO_SFS
-
/* Define for ROMIO with TESTFS */
#undef ROMIO_TESTFS
@@ -394,9 +361,6 @@
/* Define for ROMIO with XFS */
#undef ROMIO_XFS
-/* Define for ROMIO with ZoidFD */
-#undef ROMIO_ZOIDFS
-
/* The size of `int', as computed by sizeof. */
#undef SIZEOF_INT
@@ -418,6 +382,17 @@
/* Version number of package */
#undef VERSION
+/* Enable large inode numbers on Mac OS X 10.5. */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
/* Provide blksize_t if not available */
#undef blksize_t
diff --git a/src/mpi/romio/autogen.sh b/src/mpi/romio/autogen.sh
index dcc84c7..9d01f53 100755
--- a/src/mpi/romio/autogen.sh
+++ b/src/mpi/romio/autogen.sh
@@ -1,3 +1,6 @@
#!/bin/sh
${AUTORECONF:-autoreconf} ${autoreconf_args:-"-vif"} -I confdb
+
+echo "=== running autoreconf in 'mpl' ==="
+(cd mpl && ${AUTORECONF:-autoreconf} ${autoreconf_args:-"-vif"}) || exit 1
diff --git a/src/mpi/romio/confdb/aclocal_cc.m4 b/src/mpi/romio/confdb/aclocal_cc.m4
index 92e7ee1..23d7365 100644
--- a/src/mpi/romio/confdb/aclocal_cc.m4
+++ b/src/mpi/romio/confdb/aclocal_cc.m4
@@ -521,7 +521,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -626,13 +626,6 @@ if test "$enable_strict_done" != "yes" ; then
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
- 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
- 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
- *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -645,6 +638,16 @@ if test "$enable_strict_done" != "yes" ; then
PAC_APPEND_FLAG([-std=c89],[pac_cc_strict_flags])
PAC_APPEND_FLAG([-Wdeclaration-after-statement],[pac_cc_strict_flags])
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
+ 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
+ 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
+ *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
+ esac
fi
# See if the above options work with the compiler
diff --git a/src/mpi/romio/confdb/aclocal_check_visibility.m4 b/src/mpi/romio/confdb/aclocal_check_visibility.m4
new file mode 100644
index 0000000..1ea85ba
--- /dev/null
+++ b/src/mpi/romio/confdb/aclocal_check_visibility.m4
@@ -0,0 +1,123 @@
+# This macro set originally copied from hwloc.
+# MPICH modifications:
+# - renamed macro to PAC_CHECK_VISIBILITY
+# - removed C compiler vendor check
+# - sed -e 's/HWLOC/MPICH/gI'
+#
+# Copyright © 2004-2005 The Trustees of Indiana University and Indiana
+# University Research and Technology
+# Corporation. All rights reserved.
+# Copyright © 2004-2005 The University of Tennessee and The University
+# of Tennessee Research Foundation. All rights
+# reserved.
+# Copyright © 2004-2007 High Performance Computing Center Stuttgart,
+# University of Stuttgart. All rights reserved.
+# Copyright © 2004-2005 The Regents of the University of California.
+# All rights reserved.
+# Copyright © 2006-2007 Cisco Systems, Inc. All rights reserved.
+# and renamed/modified for hwloc:
+# Copyright © 2009 Inria. All rights reserved.
+# Copyright © 2009-2010 Université Bordeaux
+# Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer listed
+# in this license in the documentation and/or other materials
+# provided with the distribution.
+#
+# - Neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties. The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# PAC_CHECK_VISIBILITY
+# --------------------------------------------------------
+AC_DEFUN([PAC_CHECK_VISIBILITY],[
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
+ m4_ifdef([AC_PROG_GREP],
+ [AC_REQUIRE([AC_PROG_GREP])],
+ [GREP=grep])
+
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ AC_ARG_ENABLE(visibility,
+ AC_HELP_STRING([--enable-visibility],
+ [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
+
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (disabled)])
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+
+ AC_MSG_CHECKING([if $CC supports $mpich_add])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+ ]],[[fprintf(stderr, "Hello, world\n");]])],
+ [AS_IF([test -s conftest.err],
+ [$GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ AS_IF([test "$?" = "0"], [mpich_add=])])
+ ], [mpich_add=])
+ AS_IF([test "$mpich_add" = ""],
+ [AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes])])
+
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([yes (via $mpich_add)])
+ elif test "$enable_visibility" = "yes"; then
+ AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting])
+ else
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (unsupported)])
+ fi
+ unset mpich_add
+ fi
+
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$mpich_visibility_define],
+ [Whether C compiler supports symbol visibility or not])
+])
diff --git a/src/mpi/romio/confdb/aclocal_fc.m4 b/src/mpi/romio/confdb/aclocal_fc.m4
index b844009..4318e38 100644
--- a/src/mpi/romio/confdb/aclocal_fc.m4
+++ b/src/mpi/romio/confdb/aclocal_fc.m4
@@ -439,7 +439,7 @@ AC_COMPILE_IFELSE([],[
# module tests do not always use the module output flag. See
# FC_MODULE_EXT , where this is determined.
# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
# f90 -moddir=${dir} ## the Sun f90 compiler
# g95 -fmod=${dir}
#
@@ -448,7 +448,7 @@ AC_COMPILE_IFELSE([],[
# users to use. Alternatively they can use an older version of MPICH.
pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
rm -f conftestdir/NONEXISTENT conftestdir/*
PAC_PUSH_FLAG([FCFLAGS])
FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
diff --git a/src/mpi/romio/confdb/aclocal_libs.m4 b/src/mpi/romio/confdb/aclocal_libs.m4
index 09e9c4c..8868e99 100644
--- a/src/mpi/romio/confdb/aclocal_libs.m4
+++ b/src/mpi/romio/confdb/aclocal_libs.m4
@@ -48,7 +48,7 @@ AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
dnl is adding lib64 by default really the right thing to do? What if
dnl we are on a 32-bit host that happens to have both lib dirs available?
[PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
- AS_IF([test -d "${with_$1}/lib64}"],
+ AS_IF([test -d "${with_$1}/lib64"],
[PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
])
])
diff --git a/src/mpi/romio/confdb/aclocal_romio.m4 b/src/mpi/romio/confdb/aclocal_romio.m4
index af80d3c..94f4e2e 100644
--- a/src/mpi/romio/confdb/aclocal_romio.m4
+++ b/src/mpi/romio/confdb/aclocal_romio.m4
@@ -786,28 +786,6 @@ EOF
fi
rm -f conftest$EXEEXT mpitest.c
])dnl
-define(PAC_TEST_MPIU_FUNCS,[
- AC_MSG_CHECKING(support for MPICH memory macros)
- rm -f mpitest.c
- cat > mpitest.c <<EOF
-#include "mpi.h"
-#include "stdio.h"
- main(Int argc, char **argv)
- {
- MPIU_Free(NULL);
- }
-EOF
- rm -f conftest$EXEEXT
- $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
- if test -x conftest$EXEEXT ; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
- else
- AC_MSG_RESULT(no)
- fi
- rm -f conftest$EXEEXT mpitest.c
-])dnl
-dnl
define(PAC_TEST_MPI_GREQUEST,[
AC_MSG_CHECKING(support for generalized requests)
rm -f mpitest.c
diff --git a/src/mpi/romio/confdb/ax_tls.m4 b/src/mpi/romio/confdb/ax_tls.m4
index 3f6a0ac..60657fa 100644
--- a/src/mpi/romio/confdb/ax_tls.m4
+++ b/src/mpi/romio/confdb/ax_tls.m4
@@ -46,7 +46,7 @@
AC_DEFUN([AX_TLS], [
AC_MSG_CHECKING(for thread local storage specifier)
AC_CACHE_VAL(ac_cv_tls, [
- ax_tls_keywords="__thread __declspec(thread) none"
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
for ax_tls_keyword in $ax_tls_keywords; do
case $ax_tls_keyword in
none) ac_cv_tls=none ; break ;;
@@ -69,7 +69,11 @@ AC_DEFUN([AX_TLS], [
PAC_APPEND_FLAG([-shared],[LIBS])
if test "$ac_cv_tls" != "none" ; then
AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([extern $ax_tls_keyword int bar;],[++bar;])],
+ [AC_LANG_PROGRAM(
+ [
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+ ],[++bar;])],
[ac_cv_tls=$ax_tls_keyword],
[ac_cv_tls=none])
fi
@@ -81,10 +85,7 @@ AC_DEFUN([AX_TLS], [
])
if test "$ac_cv_tls" != "none"; then
- # MPICH modification: this was "TLS" before instead of
- # "MPICH_TLS_SPECIFIER", but TLS had a reasonably high chance of conflicting
- # with a system library.
- AC_DEFINE_UNQUOTED([MPICH_TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+ AC_DEFINE_UNQUOTED([TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
fi
AC_MSG_RESULT($ac_cv_tls)
])
diff --git a/src/mpi/romio/confdb/config.guess b/src/mpi/romio/confdb/config.guess
index 6c32c86..1659250 100755
--- a/src/mpi/romio/confdb/config.guess
+++ b/src/mpi/romio/confdb/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/src/mpi/romio/confdb/config.sub b/src/mpi/romio/confdb/config.sub
index 7ffe373..1acc966 100755
--- a/src/mpi/romio/confdb/config.sub
+++ b/src/mpi/romio/confdb/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/src/mpi/romio/confdb/install-sh b/src/mpi/romio/confdb/install-sh
index 0b0fdcb..59990a1 100755
--- a/src/mpi/romio/confdb/install-sh
+++ b/src/mpi/romio/confdb/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/src/mpi/romio/confdb/libtool.m4 b/src/mpi/romio/confdb/libtool.m4
index a3bc337..10ab284 100644
--- a/src/mpi/romio/confdb/libtool.m4
+++ b/src/mpi/romio/confdb/libtool.m4
@@ -2887,6 +2887,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3546,7 +3558,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
@@ -4424,7 +4436,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4936,6 +4948,9 @@ m4_if([$1], [CXX], [
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -4998,6 +5013,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5252,7 +5270,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -5773,6 +5791,7 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5794,7 +5813,7 @@ _LT_EOF
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
diff --git a/src/mpi/romio/confdb/ltmain.sh b/src/mpi/romio/confdb/ltmain.sh
index 0f0a2da..147d758 100644
--- a/src/mpi/romio/confdb/ltmain.sh
+++ b/src/mpi/romio/confdb/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,10 +7272,13 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
continue
fi # $pass = conv
@@ -8823,6 +8829,9 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
esac
;;
no)
diff --git a/src/mpi/romio/confdb/random_r.m4 b/src/mpi/romio/confdb/random_r.m4
new file mode 100644
index 0000000..8d04a27
--- /dev/null
+++ b/src/mpi/romio/confdb/random_r.m4
@@ -0,0 +1,43 @@
+# serial 5
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RANDOM_R],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
+ if test $ac_cv_header_random_h = no; then
+ HAVE_RANDOM_H=0
+ fi
+
+ AC_CHECK_TYPES([struct random_data],
+ [], [HAVE_STRUCT_RANDOM_DATA=0],
+ [[#include <stdlib.h>
+ #if HAVE_RANDOM_H
+ # include <random.h>
+ #endif
+ ]])
+
+ dnl On AIX and OSF/1, these functions exist, but with different declarations.
+ dnl Override them all.
+ case "$host_os" in
+ aix* | osf*)
+ REPLACE_RANDOM_R=1
+ ;;
+ *)
+ AC_CHECK_FUNCS([random_r])
+ if test $ac_cv_func_random_r = no; then
+ HAVE_RANDOM_R=0
+ fi
+ ;;
+ esac
+])
+
+# Prerequisites of lib/random_r.c.
+AC_DEFUN([gl_PREREQ_RANDOM_R], [
+ :
+])
diff --git a/src/mpi/romio/confdb/stdlib_h.m4 b/src/mpi/romio/confdb/stdlib_h.m4
new file mode 100644
index 0000000..19107c4
--- /dev/null
+++ b/src/mpi/romio/confdb/stdlib_h.m4
@@ -0,0 +1,119 @@
+# stdlib_h.m4 serial 42
+dnl Copyright (C) 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_NEXT_HEADERS([stdlib.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+ ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
+ initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
+ posix_openpt ptsname ptsname_r random random_r realpath rpmatch
+ secure_getenv setenv setstate setstate_r srandom srandom_r
+ strtod strtoll strtoull unlockpt unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT])
+ GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
+ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
+ GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+ GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
+ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
+ GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT])
+ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
+ GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC])
+ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
+ GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP])
+ GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS])
+ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
+ GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS])
+ GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT])
+ GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME])
+ GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R])
+ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
+ GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
+ GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
+ GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
+ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+ GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
+ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
+ GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
+ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
+ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
+ GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
+ GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
+ GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX])
+ GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT])
+ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
+ GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
+ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
+ HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP])
+ HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS])
+ HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP])
+ HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS])
+ HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT])
+ HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME])
+ HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R])
+ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
+ HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
+ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
+ HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
+ HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
+ HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
+ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
+ REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC])
+ REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+ REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
+ REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
+ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
+ REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
+ REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC])
+ REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
+ REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
+ REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/src/mpi/romio/configure b/src/mpi/romio/configure
index af4b28b..e6248f3 100755
--- a/src/mpi/romio/configure
+++ b/src/mpi/romio/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ROMIO 3.2.
+# Generated by GNU Autoconf 2.69 for ROMIO 3.3a2.
#
# Report bugs to <discuss at mpich.org>.
#
@@ -198,6 +198,7 @@ test -x / || exit 1"
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
@@ -205,8 +206,7 @@ test -x / || exit 1"
ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
PATH=/empty FPATH=/empty; export PATH FPATH
test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
- || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
if (eval "$as_required") 2>/dev/null; then :
as_have_required=yes
else
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ROMIO'
PACKAGE_TARNAME='romio'
-PACKAGE_VERSION='3.2'
-PACKAGE_STRING='ROMIO 3.2'
+PACKAGE_VERSION='3.3a2'
+PACKAGE_STRING='ROMIO 3.3a2'
PACKAGE_BUGREPORT='discuss at mpich.org'
PACKAGE_URL='http://www.mpich.org/'
@@ -716,20 +716,10 @@ BUILD_AD_BG_FALSE
BUILD_AD_BG_TRUE
BUILD_PANFS_OPEN6_FALSE
BUILD_PANFS_OPEN6_TRUE
-BUILD_AD_SFS_FALSE
-BUILD_AD_SFS_TRUE
-BUILD_AD_PIOFS_FALSE
-BUILD_AD_PIOFS_TRUE
-BUILD_AD_HFS_FALSE
-BUILD_AD_HFS_TRUE
-BUILD_AD_ZOIDFS_FALSE
-BUILD_AD_ZOIDFS_TRUE
BUILD_AD_GPFS_FALSE
BUILD_AD_GPFS_TRUE
BUILD_AD_LUSTRE_FALSE
BUILD_AD_LUSTRE_TRUE
-BUILD_AD_GRIDFTP_FALSE
-BUILD_AD_GRIDFTP_TRUE
BUILD_AD_PANFS_FALSE
BUILD_AD_PANFS_TRUE
BUILD_AD_XFS_FALSE
@@ -738,10 +728,6 @@ BUILD_AD_TESTFS_FALSE
BUILD_AD_TESTFS_TRUE
BUILD_AD_PVFS2_FALSE
BUILD_AD_PVFS2_TRUE
-BUILD_AD_PVFS_FALSE
-BUILD_AD_PVFS_TRUE
-BUILD_AD_PFS_FALSE
-BUILD_AD_PFS_TRUE
BUILD_AD_UFS_FALSE
BUILD_AD_UFS_TRUE
BUILD_AD_NFS_FALSE
@@ -770,6 +756,12 @@ top_build_dir
SET_CFLAGS
VPATH
MAKE
+mpl_lib
+mpl_libdir
+mpl_includedir
+mpl_dist_srcdir
+mpl_srcdir
+MPLLIBNAME
FROM_OMPI
FROM_LAM
FROM_MPICH
@@ -792,7 +784,6 @@ DUMPBIN
LD
FGREP
EGREP
-GREP
SED
host_os
host_vendor
@@ -805,6 +796,8 @@ build
LIBTOOL
ac_ct_AR
AR
+VISIBILITY_CFLAGS
+GREP
am__fastdepCC_FALSE
am__fastdepCC_TRUE
CCDEPMODE
@@ -871,6 +864,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -896,6 +890,7 @@ enable_option_checking
enable_silent_rules
enable_maintainer_mode
enable_dependency_tracking
+enable_visibility
enable_shared
enable_static
with_pic
@@ -904,6 +899,7 @@ with_aix_soname
with_gnu_ld
with_sysroot
enable_libtool_lock
+with_mpl_prefix
enable_aio
enable_echo
enable_f77
@@ -915,6 +911,7 @@ with_pvfs2
with_mpi_impl
with_mpi
with_aio_lite
+enable_largefile
enable_coverage
'
ac_precious_vars='build_alias
@@ -930,6 +927,7 @@ CPP
FROM_MPICH
FROM_LAM
FROM_OMPI
+MPLLIBNAME
F77
FFLAGS
FC
@@ -975,6 +973,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1227,6 +1226,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1364,7 +1372,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1477,7 +1485,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures ROMIO 3.2 to adapt to many kinds of systems.
+\`configure' configures ROMIO 3.3a2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1517,6 +1525,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1547,7 +1556,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ROMIO 3.2:";;
+ short | recursive ) echo "Configuration of ROMIO 3.3a2:";;
esac
cat <<\_ACEOF
@@ -1564,6 +1573,9 @@ Optional Features:
do not reject slow dependency extractors
--disable-dependency-tracking
speeds up one-time build
+ --enable-visibility enable visibility feature of certain
+ compilers/linkers (default: enabled on platforms
+ that support it)
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS]
@@ -1576,6 +1588,7 @@ Optional Features:
--enable-f90 - Turn on support for Fortran 90 (default)
--enable-weak-symbols - Turn on support for weak symbols
--enable-debug - Build a debugging version
+ --disable-largefile omit support for large files
--enable-coverage Turn on coverage analysis using gcc and gcov
Optional Packages:
@@ -1589,6 +1602,9 @@ Optional Packages:
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-sysroot[=DIR] Search for dependent libraries within DIR (or the
compiler's sysroot if not specified).
+ --with-mpl-prefix[=DIR] use the MPL library installed in DIR. Pass
+ "embedded" to force usage of the MPL source
+ distributed with Hydra.
--with-file-system=name - Build with support for the named file systems
@@ -1613,6 +1629,8 @@ Some influential environment variables:
FROM_MPICH set to "yes" if building ROMIO inside of MPICH
FROM_LAM set to "yes" if building ROMIO inside of LAM
FROM_OMPI set to "yes" if building ROMIO inside of Open MPI
+ MPLLIBNAME can be used to override the name of the MPL library (default:
+ "mpl")
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
FC Fortran compiler command
@@ -1690,7 +1708,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ROMIO configure 3.2
+ROMIO configure 3.3a2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2567,7 +2585,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by ROMIO $as_me 3.2, which was
+It was created by ROMIO $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3433,7 +3451,7 @@ fi
# Define the identity of the package.
PACKAGE='romio'
- VERSION='3.2'
+ VERSION='3.3a2'
cat >>confdefs.h <<_ACEOF
@@ -4413,6 +4431,165 @@ fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+
+
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
+
+
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ # Check whether --enable-visibility was given.
+if test "${enable_visibility+set}" = set; then :
+ enableval=$enable_visibility;
+fi
+
+
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $mpich_msg" >&5
+$as_echo_n "checking $mpich_msg... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (disabled)" >&5
+$as_echo "no (disabled)" >&6; }
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports $mpich_add" >&5
+$as_echo_n "checking if $CC supports $mpich_add... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+
+int
+main ()
+{
+fprintf(stderr, "Hello, world\n");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if test -s conftest.err; then :
+ $GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ if test "$?" = "0"; then :
+ mpich_add=
+fi
+fi
+
+else
+ mpich_add=
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$mpich_add" = ""; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $mpich_msg" >&5
+$as_echo_n "checking $mpich_msg... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (via $mpich_add)" >&5
+$as_echo "yes (via $mpich_add)" >&6; }
+ elif test "$enable_visibility" = "yes"; then
+ as_fn_error $? "Symbol visibility support requested but compiler does not seem to support it. Aborting" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $mpich_msg" >&5
+$as_echo_n "checking $mpich_msg... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (unsupported)" >&5
+$as_echo "no (unsupported)" >&6; }
+ fi
+ unset mpich_add
+ fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_VISIBILITY $mpich_visibility_define
+_ACEOF
+
+
if test -n "$ac_tool_prefix"; then
@@ -4834,69 +5011,6 @@ Xsed="$SED -e 1s/^X//"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
$as_echo_n "checking for egrep... " >&6; }
if ${ac_cv_path_EGREP+:} false; then :
@@ -5896,7 +6010,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
@@ -9588,6 +9702,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
esac
ld_shlibs=yes
@@ -9842,7 +9959,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -10512,6 +10629,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -10533,7 +10651,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -11648,6 +11766,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -12744,6 +12874,254 @@ if test "$FROM_LAM" = 1 ; then FROM_LAM=yes ; fi
FROM_OMPI=${FROM_OMPI:-no}
if test "$FROM_OMPI" = 1 ; then FROM_OMPI=yes ; fi
+# MPL
+
+MPLLIBNAME=${MPLLIBNAME:-"mpl"}
+export MPLLIBNAME
+
+
+# Check whether --with-mpl-prefix was given.
+if test "${with_mpl_prefix+set}" = set; then :
+ withval=$with_mpl_prefix;
+else
+ with_mpl_prefix=embedded
+fi
+ mpl_srcdir=""
+
+# Controls whether we recurse into the MPL dir when running "dist" rules like
+# "make distclean". Technically we are cheating whenever DIST_SUBDIRS is not a
+# superset of SUBDIRS, but we don't want to double-distclean and similar.
+mpl_dist_srcdir=""
+
+mpl_includedir=""
+
+mpl_libdir=""
+
+mpl_lib=""
+
+if test "$FROM_MPICH" = "no" ; then
+if test "$with_mpl_prefix" = "embedded" ; then
+ mpl_srcdir="mpl"
+ mpl_dist_srcdir="mpl"
+ mpl_subdir_args="--disable-versioning --enable-embedded"
+
+ pac_dir="mpl"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== configuring mpl =====" >&5
+$as_echo "$as_me: ===== configuring mpl =====" >&6;}
+
+ pac_abs_srcdir=`(cd $srcdir && pwd)`
+
+ if test -f $pac_abs_srcdir/mpl/setup ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/mpl/setup" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/mpl/setup" >&6;}
+ . $pac_abs_srcdir/mpl/setup
+ fi
+
+ # Adapted for MPICH from the autoconf-2.67 implementation of
+ # AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
+ # local modifications.
+
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up. Otherwise relative paths (like --srcdir=.. from
+ # make distcheck) will be incorrect.
+ pac_sub_configure_args="$mpl_subdir_args"
+ pac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for pac_arg
+ do
+ if test -n "$pac_prev"; then
+ pac_prev=
+ continue
+ fi
+ case $pac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ pac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ pac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ pac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ # MPICH note: this is a more robust version of the "precious
+ # variable" propagation code that was present in the previous
+ # incarnation of this macro
+ for pac_pvar in $ac_precious_vars ; do
+ # check if configure argument token contains the
+ # precious variable, i.e. "name_of_prec_var=".
+ if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
+ # check if current precious variable is set in env
+ eval pvar_set=\${$pac_pvar+set}
+ if test "$pvar_set" = "set" ; then
+ # Append 'name_of_prec_var=value_of_prec_var'
+ # to the subconfigure arguments list, where
+ # value_of_prec_var is fetched from the env.
+ # this also overrides any value set on the command line
+ eval pac_pval=\${$pac_pvar}
+ pac_arg="$pac_pvar=$pac_pval"
+ break
+ fi
+ fi
+ done
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append pac_sub_configure_args " '$pac_arg'" ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ # MPICH note: see tt#983 for an example of why this is necessary
+ pac_arg="--prefix=$prefix"
+ case $pac_arg in
+ *\'*) pac_arg=`$as_echo "$pac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
+
+ # Pass --silent
+ if test "$silent" = yes; then
+ pac_sub_configure_args="--silent $pac_sub_configure_args"
+ fi
+
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
+
+ pac_popdir=`pwd`
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$pac_dir" || continue
+
+ # MPICH note: modified to remove the internal "_AS_*" macro usage, also
+ # msg is already printed at top
+ as_dir="$pac_dir"; as_fn_mkdir_p
+ # MPICH note: we leave this internal macro reference for now. We can clone
+ # the macro locally if this turns out to be non-portable across several autoconf
+ # versions. It sets the following variables: ac_builddir,
+ # ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
+ # ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
+ ac_builddir=.
+
+case "$pac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$pac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ cd "$pac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ pac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ pac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.ac"; then
+ # This should be Cygnus configure.
+ pac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $pac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $pac_dir" >&2;}
+ pac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$pac_sub_configure"; then
+ # MPICH note: overriding the cache file on purpose to prevent strange
+ # issues resulting from inter-dir caching
+ pac_sub_cache_file="/dev/null"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ # MPICH note: we want to execute the provided actions, not be silent
+ # or error out if the subconfigure succeeded/failed
+ if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
+ --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
+ then
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+
+ else
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+ as_fn_error $? "MPL configure failed" "$LINENO" 5
+ fi
+ fi
+
+ cd "$pac_popdir"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: ===== done with mpl configure =====" >&5
+$as_echo "$as_me: ===== done with mpl configure =====" >&6;}
+
+ # Check for any localdefs files. These may be created, so we
+ # look in the local directory first.
+ if test -f mpl/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing mpl/localdefs" >&5
+$as_echo "$as_me: sourcing mpl/localdefs" >&6;}
+ . mpl/localdefs
+ elif test -f $pac_abs_srcdir/mpl/localdefs ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: sourcing $pac_abs_srcdir/mpl/localdefs" >&5
+$as_echo "$as_me: sourcing $pac_abs_srcdir/mpl/localdefs" >&6;}
+ . $pac_abs_srcdir/mpl/localdefs
+ fi
+
+ mpl_includedir='-I$(top_builddir)/mpl/include -I$(top_srcdir)/mpl/include'
+ mpl_lib="mpl/lib${MPLLIBNAME}.la"
+else
+ # The user specified an already-installed MPL; just sanity check, don't
+ # subconfigure it
+ if test -s "${with_mpl_prefix}/include/mplconfig.h"; then :
+ :
+else
+ as_fn_error $? "the MPL installation in \"${with_mpl_prefix}\" appears broken" "$LINENO" 5
+fi
+ mpl_includedir="-I${with_mpl_prefix}/include"
+ mpl_libdir="-L${with_mpl_prefix}/lib"
+ mpl_lib="-l${MPLLIBNAME}"
+fi
+fi
+
CFLAGS=${CFLAGS:-""}
LL="lld"
AR_LOCAL=""
@@ -12785,7 +13163,7 @@ TEST_F77=""
known_mpi_impls="mpich_mpi mpich_mpi sgi_mpi hp_mpi cray_mpi lam_mpi open_mpi_mpi"
# a shell var for checking arguments given via --with-file-system=...
-known_filesystems="nfs ufs pfs pvfs pvfs2 testfs xfs panfs gridftp lustre gpfs zoidfs hfs piofs sfs"
+known_filesystems="nfs ufs pvfs2 testfs xfs panfs lustre gpfs"
#####################################################################
@@ -14328,6 +14706,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs_F77=no
+ ;;
esac
ld_shlibs_F77=yes
@@ -14582,7 +14963,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -15202,6 +15583,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs_F77=no
else
archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -15223,7 +15605,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -16160,6 +16542,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -17661,6 +18055,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs_FC=no
+ ;;
esac
ld_shlibs_FC=yes
@@ -17915,7 +18312,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -18535,6 +18932,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs_FC=no
else
archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -18556,7 +18954,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -19493,6 +19891,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -21627,6 +22037,11 @@ else
BUILD_PROFILING_LIB_FALSE=
fi
+# disable visibility if building profiling library
+if test "x$HAVE_WEAK_SYMBOLS" = "x0" ; then
+ VISIBILITY_CFLAGS=""
+fi
+
# weird: we have conflated "buid ROMIO's versions of the fortran bindings" and
# "build ROMIO"s fortran I/O tests". Of course the common situaiton is that we
@@ -21853,24 +22268,6 @@ else
fi
- if test x$file_system_pfs = x1; then
- BUILD_AD_PFS_TRUE=
- BUILD_AD_PFS_FALSE='#'
-else
- BUILD_AD_PFS_TRUE='#'
- BUILD_AD_PFS_FALSE=
-fi
-
-
- if test x$file_system_pvfs = x1; then
- BUILD_AD_PVFS_TRUE=
- BUILD_AD_PVFS_FALSE='#'
-else
- BUILD_AD_PVFS_TRUE='#'
- BUILD_AD_PVFS_FALSE=
-fi
-
-
if test x$file_system_pvfs2 = x1; then
BUILD_AD_PVFS2_TRUE=
BUILD_AD_PVFS2_FALSE='#'
@@ -21907,15 +22304,6 @@ else
fi
- if test x$file_system_gridftp = x1; then
- BUILD_AD_GRIDFTP_TRUE=
- BUILD_AD_GRIDFTP_FALSE='#'
-else
- BUILD_AD_GRIDFTP_TRUE='#'
- BUILD_AD_GRIDFTP_FALSE=
-fi
-
-
if test x$file_system_lustre = x1; then
BUILD_AD_LUSTRE_TRUE=
BUILD_AD_LUSTRE_FALSE='#'
@@ -21934,42 +22322,6 @@ else
fi
- if test x$file_system_zoidfs = x1; then
- BUILD_AD_ZOIDFS_TRUE=
- BUILD_AD_ZOIDFS_FALSE='#'
-else
- BUILD_AD_ZOIDFS_TRUE='#'
- BUILD_AD_ZOIDFS_FALSE=
-fi
-
-
- if test x$file_system_hfs = x1; then
- BUILD_AD_HFS_TRUE=
- BUILD_AD_HFS_FALSE='#'
-else
- BUILD_AD_HFS_TRUE='#'
- BUILD_AD_HFS_FALSE=
-fi
-
-
- if test x$file_system_piofs = x1; then
- BUILD_AD_PIOFS_TRUE=
- BUILD_AD_PIOFS_FALSE='#'
-else
- BUILD_AD_PIOFS_TRUE='#'
- BUILD_AD_PIOFS_FALSE=
-fi
-
-
- if test x$file_system_sfs = x1; then
- BUILD_AD_SFS_TRUE=
- BUILD_AD_SFS_FALSE='#'
-else
- BUILD_AD_SFS_TRUE='#'
- BUILD_AD_SFS_FALSE=
-fi
-
-
#
@@ -22090,22 +22442,6 @@ fi
# echo "with_file_system is :"$with_file_system": file_system_args is :"$file_system_args": FILE_SYSTEM is :"$FILE_SYSTEM":"
-if test -n "$file_system_hfs"; then
-
-$as_echo "#define ROMIO_HFS 1" >>confdefs.h
-
-fi
-if test -n "$file_system_sfs"; then
-
-$as_echo "#define ROMIO_SFS 1" >>confdefs.h
-
-fi
-
-if test -n "$file_system_pfs"; then
-
-$as_echo "#define ROMIO_PFS 1" >>confdefs.h
-
-fi
if test -n "$file_system_testfs"; then
@@ -22197,122 +22533,6 @@ $as_echo "assuming 128 for memory alignment" >&6; }
fi
#
-# Verify presence of pvfs.h, issue with int64
-#
-if test -n "$file_system_pvfs"; then
- CPPFLAGS="$CPPFLAGS $CFLAGS"
- for ac_header in pvfs.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "pvfs.h" "ac_cv_header_pvfs_h" "$ac_includes_default"
-if test "x$ac_cv_header_pvfs_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_PVFS_H 1
-_ACEOF
-
-$as_echo "#define ROMIO_PVFS 1" >>confdefs.h
-
-else
- as_fn_error $? "PVFS support requested but cannot find pvfs.h header file" "$LINENO" 5
-
-fi
-
-done
-
- # Check for missing int64_t (intel version 8 compiler and -no-gcc
- # selected)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking that pvfs.h can be compiled" >&5
-$as_echo_n "checking that pvfs.h can be compiled... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <pvfs.h>
-
-int
-main ()
-{
-
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pvfs_header_ok=yes
-else
- pvfs_header_ok=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pvfs_header_ok" >&5
-$as_echo "$pvfs_header_ok" >&6; }
- if test "$pvfs_header_ok" = no -a "$ac_cv_sizeof_long_long" = 8 ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if pvfs.h can be compiled if we define int64_t" >&5
-$as_echo_n "checking if pvfs.h can be compiled if we define int64_t... " >&6; }
- # Try again, but with int64_t
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- typedef long long int int64_t;
-#include <pvfs.h>
-
-int
-main ()
-{
-
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pvfs_header_ok="yes with int64 definition"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pvfs_header_ok" >&5
-$as_echo "$pvfs_header_ok" >&6; }
- fi
- if test "$pvfs_header_ok" = "yes with int64 definition" ; then
-
-$as_echo "#define ROMIO_PVFS_NEEDS_INT64_DEFINITION 1" >>confdefs.h
-
- fi
- if test "$pvfs_header_ok" != "no" ; then
-
-$as_echo "#define ROMIO_PVFS 1" >>confdefs.h
-
-
-$as_echo "#define HAVE_PVFS_SUPER_MAGIC 1" >>confdefs.h
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: missing or broken pvfs.h header file; disabling ROMIO PVFS support" >&5
-$as_echo "$as_me: WARNING: missing or broken pvfs.h header file; disabling ROMIO PVFS support" >&2;}
- fi
-fi
-
-
-
-if test -n "$file_system_zoidfs"; then
- for ac_header in zoidfs.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "zoidfs.h" "ac_cv_header_zoidfs_h" "$ac_includes_default"
-if test "x$ac_cv_header_zoidfs_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ZOIDFS_H 1
-_ACEOF
-
-$as_echo "#define ROMIO_ZOIDFS 1" >>confdefs.h
-
-else
- as_fn_error $? "ZoidFS support requested but cannot find zoidfs.h header file" "$LINENO" 5
-
-fi
-
-done
-
-fi
-
-#
# Verify presence of pvfs2.h
#
if test -n "$file_system_pvfs2"; then
@@ -22366,12 +22586,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-if test -n "$file_system_gridftp"; then
-
-$as_echo "#define ROMIO_GRIDFTP 1" >>confdefs.h
-
-fi
-
if test -n "$file_system_gpfs"; then :
SYSDEP_INC=-I${prefix}/include
else
@@ -23082,15 +23296,75 @@ if test "$pac_cv_have_statfs" = yes ; then
$as_echo "#define HAVE_STRUCT_STATFS 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for f_type member of statfs structure" >&5
+$as_echo_n "checking for f_type member of statfs structure... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+int
+main ()
+{
+
+ struct statfs f;
+ memset(&f, 0, sizeof(f));
+ f.f_type = 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have_statfs_f_type=yes
+else
+ pac_cv_have_statfs_f_type=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_statfs_f_type" >&5
+$as_echo "$pac_cv_have_statfs_f_type" >&6; }
+if test $pac_cv_have_statfs_f_type = yes ; then
+
+$as_echo "#define ROMIO_HAVE_STRUCT_STATFS_WITH_F_TYPE 1" >>confdefs.h
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for f_fstypename member of statfs structure" >&5
$as_echo_n "checking for f_fstypename member of statfs structure... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
+#endif
+#ifdef HAVE_STRING_H
#include <string.h>
+#endif
int
main ()
@@ -23282,95 +23556,211 @@ fi
#
-# Check for large file support. Make sure that we can use the off64_t
-# type (in some cases, it is an array, and the ROMIO code isn't prepared for
-# that).
+# in 2004, solairs defined off_t as a union. Today (2016) that is not the case
+# and we can simplify this check
#
-for ac_header in unistd.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_UNISTD_H 1
-_ACEOF
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+ enableval=$enable_largefile;
fi
-done
+if test "$enable_largefile" != no; then
-if test "$ac_cv_header_unistd_h" = "yes" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for large file defines" >&5
-$as_echo_n "checking for large file defines... " >&6; }
-if ${ac_cv_has_large_file_defines+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
-#include <unistd.h>
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
int
main ()
{
-#ifndef _LFS64_LARGEFILE
-#error no largefile defines
-#endif
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_has_large_file_defines=yes
-else
- ac_cv_has_large_file_defines=no
+ ac_cv_sys_file_offset_bits=64; break
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_has_large_file_defines" >&5
-$as_echo "$ac_cv_has_large_file_defines" >&6; }
- if test "$ac_cv_has_large_file_defines" = "yes" ; then
- # See if we can use them
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether off64_t is an scalar type" >&5
-$as_echo_n "checking whether off64_t is an scalar type... " >&6; }
-if ${ac_cv_off64_t_scalar+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
$as_echo_n "(cached) " >&6
else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
-#define _LARGEFILE64_SOURCE
-#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
-#include <unistd.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
int
main ()
{
-off64_t a = 3;
+
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_off64_t_scalar=yes
-else
- ac_cv_off64_t_scalar=no
+ ac_cv_sys_large_files=1; break
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_off64_t_scalar" >&5
-$as_echo "$ac_cv_off64_t_scalar" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ fi
+
- if test "$ac_cv_off64_t_scalar" = "yes" ; then
- CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
- fi
- fi
fi
+
# pread and pwrite are useful to ROMIO: if implemented well, they help us avoid
# an extra system call. But --enable-strict or CFLAGS="--std=c99" does not
# expose this feature. If we define XOPEN_SOURCE in ROMIO, we cause headaches
@@ -23415,12 +23805,6 @@ $as_echo "#define MPISGI 1" >>confdefs.h
fi
-if test -n "$mpi_lam"; then
-
-$as_echo "#define MPILAM 1" >>confdefs.h
-
-fi
-
if test -n "$mpi_hp"; then
$as_echo "#define MPIHP 1" >>confdefs.h
@@ -23500,10 +23884,6 @@ if test "$FROM_MPICH" = yes ; then
$as_echo "#define ROMIO_INSIDE_MPICH 1" >>confdefs.h
-elif test "$FROM_MPILAM" = yes ; then
-
-$as_echo "#define MPILAM 1" >>confdefs.h
-
fi
if test "$FROM_MPICH" = no ; then
@@ -23663,6 +24043,9 @@ if test $FROM_OMPI = yes ; then
$as_echo "#define HAVE_STATUS_SET_BYTES 1" >>confdefs.h
+$as_echo "#define HAVE_MPI_STATUS_SET_ELEMENTS_X 1" >>confdefs.h
+
+
# Used in the tests/ subdirectory for after ROMIO is built
TEST_CC=mpicc
@@ -23686,22 +24069,6 @@ $as_echo "#define MPIO_BUILD_PROFILING 1" >>confdefs.h
$as_echo "#define HAVE_DECL_MPI_COMBINER_HINDEXED_BLOCK 1" >>confdefs.h
-elif test $FROM_LAM = yes ; then
- # LAM does have the status set bytes functionality
-
-$as_echo "#define HAVE_STATUS_SET_BYTES 1" >>confdefs.h
-
-
- # Used in the tests/ subdirectory for after ROMIO is built
- TEST_CC=mpicc
- TEST_F77=mpifort
- MPIRUN=mpirun
- MPI_LIB=
- ROMIO_INCLUDE=
- USER_CFLAGS=
- USER_FFLAGS=
- TEST_LIBNAME=
- EXTRA_DIRS="mpi-io/fortran mpi2-other/info mpi2-other/info/fortran mpi2-other/array mpi2-other/array/fortran"
elif test $FROM_MPICH = yes ; then
# For now, separate the mpich from mpich cases
MPICH_HOME=`dirname $ROMIO_HOME`
@@ -23736,9 +24103,6 @@ $as_echo "#define HAVE_STATUS_SET_BYTES 1" >>confdefs.h
DEFINE_HAVE_MPI_GREQUEST="#define HAVE_MPI_GREQUEST 1"
DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS="#define HAVE_MPI_GREQUEST_EXTENSIONS 1"
-
-$as_echo "#define HAVE_MPIU_FUNCS 1" >>confdefs.h
-
$as_echo "#define HAVE_MPIX_H 1" >>confdefs.h
@@ -23822,32 +24186,6 @@ $as_echo "no" >&6; }
rm -f conftest$EXEEXT mpitest.c
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for MPICH memory macros" >&5
-$as_echo_n "checking support for MPICH memory macros... " >&6; }
- rm -f mpitest.c
- cat > mpitest.c <<EOF
-#include "mpi.h"
-#include "stdio.h"
- main(Int argc, char **argv)
- {
- MPIU_Free(NULL);
- }
-EOF
- rm -f conftest$EXEEXT
- $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
- if test -x conftest$EXEEXT ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_MPIU_FUNCS 1" >>confdefs.h
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- rm -f conftest$EXEEXT mpitest.c
-
-
$as_echo "#define PRINT_ERR_MSG 1" >>confdefs.h
ac_fn_c_check_type "$LINENO" "MPI_Count" "ac_cv_type_MPI_Count" "#include <mpi.h>
@@ -23971,57 +24309,6 @@ _ACEOF
fi
fi
-for ac_func in snprintf
-do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
-_ACEOF
-
-fi
-done
-
-if test "$ac_cv_func_snprintf" = "yes" ; then
- # Do we need to declare snprintf?
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
-else
- pac_cv_func_decl_snprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
-_ACEOF
-
-
-fi
-
-fi
for ac_func in lstat
do :
ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat"
@@ -24401,47 +24688,6 @@ else
F77MPIOINC="include 'mpiof.h'"
fi
-for ac_header in unistd.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_UNISTD_H 1
-_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for large file defines" >&5
-$as_echo_n "checking for large file defines... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #include <unistd.h>
-
-int
-main ()
-{
-
- #ifndef _LFS64_LARGEFILE
- #error no largefile defines
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-done
-
-
echo "setting SYSDEP_INC to $SYSDEP_INC"
@@ -24969,14 +25215,6 @@ if test -z "${BUILD_AD_UFS_TRUE}" && test -z "${BUILD_AD_UFS_FALSE}"; then
as_fn_error $? "conditional \"BUILD_AD_UFS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_AD_PFS_TRUE}" && test -z "${BUILD_AD_PFS_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_AD_PFS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${BUILD_AD_PVFS_TRUE}" && test -z "${BUILD_AD_PVFS_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_AD_PVFS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${BUILD_AD_PVFS2_TRUE}" && test -z "${BUILD_AD_PVFS2_FALSE}"; then
as_fn_error $? "conditional \"BUILD_AD_PVFS2\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -24993,10 +25231,6 @@ if test -z "${BUILD_AD_PANFS_TRUE}" && test -z "${BUILD_AD_PANFS_FALSE}"; then
as_fn_error $? "conditional \"BUILD_AD_PANFS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_AD_GRIDFTP_TRUE}" && test -z "${BUILD_AD_GRIDFTP_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_AD_GRIDFTP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${BUILD_AD_LUSTRE_TRUE}" && test -z "${BUILD_AD_LUSTRE_FALSE}"; then
as_fn_error $? "conditional \"BUILD_AD_LUSTRE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -25005,22 +25239,6 @@ if test -z "${BUILD_AD_GPFS_TRUE}" && test -z "${BUILD_AD_GPFS_FALSE}"; then
as_fn_error $? "conditional \"BUILD_AD_GPFS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${BUILD_AD_ZOIDFS_TRUE}" && test -z "${BUILD_AD_ZOIDFS_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_AD_ZOIDFS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${BUILD_AD_HFS_TRUE}" && test -z "${BUILD_AD_HFS_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_AD_HFS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${BUILD_AD_PIOFS_TRUE}" && test -z "${BUILD_AD_PIOFS_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_AD_PIOFS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${BUILD_AD_SFS_TRUE}" && test -z "${BUILD_AD_SFS_FALSE}"; then
- as_fn_error $? "conditional \"BUILD_AD_SFS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${BUILD_PANFS_OPEN6_TRUE}" && test -z "${BUILD_PANFS_OPEN6_FALSE}"; then
as_fn_error $? "conditional \"BUILD_PANFS_OPEN6\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -25454,7 +25672,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by ROMIO $as_me 3.2, which was
+This file was extended by ROMIO $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25521,7 +25739,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-ROMIO config.status 3.2
+ROMIO config.status 3.3a2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/src/mpi/romio/configure.ac b/src/mpi/romio/configure.ac
index bb9c25a..dd78f68 100644
--- a/src/mpi/romio/configure.ac
+++ b/src/mpi/romio/configure.ac
@@ -28,6 +28,8 @@ AM_MAINTAINER_MODE([enable])
dnl must come before LT_INIT, which AC_REQUIREs AC_PROG_CC
PAC_PROG_CC
AM_PROG_CC_C_O
+PAC_CHECK_VISIBILITY
+AC_SUBST(VISIBILITY_CFLAGS)
AM_PROG_AR
@@ -44,7 +46,7 @@ fi
AC_CONFIG_HEADER(adio/include/romioconf.h)
AH_TOP([/*
- * (C) 2011 by Argonne National Laboratory.
+ * (C) 2008 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#ifndef ROMIOCONF_H_INCLUDED
@@ -95,6 +97,50 @@ AC_ARG_VAR([FROM_OMPI],[set to "yes" if building ROMIO inside of Open MPI])
FROM_OMPI=${FROM_OMPI:-no}
if test "$FROM_OMPI" = 1 ; then FROM_OMPI=yes ; fi
+# MPL
+AC_ARG_VAR([MPLLIBNAME],[can be used to override the name of the MPL library (default: "mpl")])
+MPLLIBNAME=${MPLLIBNAME:-"mpl"}
+export MPLLIBNAME
+AC_SUBST(MPLLIBNAME)
+AC_ARG_WITH([mpl-prefix],
+ [AS_HELP_STRING([[--with-mpl-prefix[=DIR]]],
+ [use the MPL library installed in DIR. Pass
+ "embedded" to force usage of the MPL source
+ distributed with Hydra.])],
+ [],dnl action-if-given
+ [with_mpl_prefix=embedded]) dnl action-if-not-given
+mpl_srcdir=""
+AC_SUBST([mpl_srcdir])
+# Controls whether we recurse into the MPL dir when running "dist" rules like
+# "make distclean". Technically we are cheating whenever DIST_SUBDIRS is not a
+# superset of SUBDIRS, but we don't want to double-distclean and similar.
+mpl_dist_srcdir=""
+AC_SUBST(mpl_dist_srcdir)
+mpl_includedir=""
+AC_SUBST([mpl_includedir])
+mpl_libdir=""
+AC_SUBST([mpl_libdir])
+mpl_lib=""
+AC_SUBST([mpl_lib])
+if test "$FROM_MPICH" = "no" ; then
+if test "$with_mpl_prefix" = "embedded" ; then
+ mpl_srcdir="mpl"
+ mpl_dist_srcdir="mpl"
+ mpl_subdir_args="--disable-versioning --enable-embedded"
+ PAC_CONFIG_SUBDIR_ARGS([mpl],[$mpl_subdir_args],[],[AC_MSG_ERROR(MPL configure failed)])
+ mpl_includedir='-I$(top_builddir)/mpl/include -I$(top_srcdir)/mpl/include'
+ mpl_lib="mpl/lib${MPLLIBNAME}.la"
+else
+ # The user specified an already-installed MPL; just sanity check, don't
+ # subconfigure it
+ AS_IF([test -s "${with_mpl_prefix}/include/mplconfig.h"],
+ [:],[AC_MSG_ERROR([the MPL installation in "${with_mpl_prefix}" appears broken])])
+ mpl_includedir="-I${with_mpl_prefix}/include"
+ mpl_libdir="-L${with_mpl_prefix}/lib"
+ mpl_lib="-l${MPLLIBNAME}"
+fi
+fi
+
CFLAGS=${CFLAGS:-""}
LL="lld"
AR_LOCAL=""
@@ -139,7 +185,7 @@ dnl An m4 macro for use with m4_foreach_w and friends. You should modify this
dnl list if you want to add a known file system. The list is just whitespace
dnl separated, so you can use newlines and tabs as well.
m4_define([known_filesystems_m4_w],
- [nfs ufs pfs pvfs pvfs2 testfs xfs panfs gridftp lustre gpfs zoidfs hfs piofs sfs])dnl
+ [nfs ufs pvfs2 testfs xfs panfs lustre gpfs])dnl
dnl
dnl An m4 macro for use with m4_foreach and friends. Expands to a quoted list of
dnl quoted elements. A bit easier to use without unintended expansion than the
@@ -650,6 +696,11 @@ AM_CONDITIONAL([BUILD_MPIO_ERRHAN],[false])
# if we don't have weak symbol support, we must build a separate convenience
# library in order to provide the "PMPI_" symbols
AM_CONDITIONAL([BUILD_PROFILING_LIB],[test "x$HAVE_WEAK_SYMBOLS" = "x0"])
+# disable visibility if building profiling library
+if test "x$HAVE_WEAK_SYMBOLS" = "x0" ; then
+ VISIBILITY_CFLAGS=""
+fi
+
# weird: we have conflated "buid ROMIO's versions of the fortran bindings" and
# "build ROMIO"s fortran I/O tests". Of course the common situaiton is that we
@@ -824,16 +875,6 @@ fi
# echo "with_file_system is :"$with_file_system": file_system_args is :"$file_system_args": FILE_SYSTEM is :"$FILE_SYSTEM":"
-if test -n "$file_system_hfs"; then
- AC_DEFINE(ROMIO_HFS,1,[Define for ROMIO with HFS])
-fi
-if test -n "$file_system_sfs"; then
- AC_DEFINE(ROMIO_SFS,1,[Define for ROMIO with SFS])
-fi
-
-if test -n "$file_system_pfs"; then
- AC_DEFINE(ROMIO_PFS,1,[Define for ROMIO with PFS])
-fi
if test -n "$file_system_testfs"; then
AC_DEFINE(ROMIO_TESTFS,1,[Define for ROMIO with TESTFS])
@@ -888,56 +929,6 @@ int main(int argc, char **argv) {
fi
#
-# Verify presence of pvfs.h, issue with int64
-#
-if test -n "$file_system_pvfs"; then
- CPPFLAGS="$CPPFLAGS $CFLAGS"
- AC_CHECK_HEADERS(pvfs.h,
- AC_DEFINE(ROMIO_PVFS,1,[Define for ROMIO with PVFS]),
- AC_MSG_ERROR([PVFS support requested but cannot find pvfs.h header file])
- )
- # Check for missing int64_t (intel version 8 compiler and -no-gcc
- # selected)
- AC_MSG_CHECKING([that pvfs.h can be compiled])
- AC_TRY_COMPILE([
-#include <pvfs.h>
- ],[
- ],pvfs_header_ok=yes,pvfs_header_ok=no
- )
- AC_MSG_RESULT($pvfs_header_ok)
- if test "$pvfs_header_ok" = no -a "$ac_cv_sizeof_long_long" = 8 ; then
- AC_MSG_CHECKING([if pvfs.h can be compiled if we define int64_t])
- # Try again, but with int64_t
- AC_TRY_COMPILE([
- typedef long long int int64_t;
-#include <pvfs.h>
- ],[
- ],
- pvfs_header_ok="yes with int64 definition"
- )
- AC_MSG_RESULT($pvfs_header_ok)
- fi
- if test "$pvfs_header_ok" = "yes with int64 definition" ; then
- AC_DEFINE(ROMIO_PVFS_NEEDS_INT64_DEFINITION,1,[Define if int64_t must be defined for PVFS])
- fi
- if test "$pvfs_header_ok" != "no" ; then
- AC_DEFINE(ROMIO_PVFS,1,[Define for ROMIO with PVFS])
- AC_DEFINE(HAVE_PVFS_SUPER_MAGIC, 1, [Define if PVFS_SUPER_MAGIC defined.])
- else
- AC_MSG_WARN(missing or broken pvfs.h header file; disabling ROMIO PVFS support)
- fi
-fi
-
-
-
-if test -n "$file_system_zoidfs"; then
- AC_CHECK_HEADERS(zoidfs.h,
- AC_DEFINE(ROMIO_ZOIDFS,1,[Define for ROMIO with ZoidFD]),
- AC_MSG_ERROR([ZoidFS support requested but cannot find zoidfs.h header file])
- )
-fi
-
-#
# Verify presence of pvfs2.h
#
if test -n "$file_system_pvfs2"; then
@@ -967,10 +958,6 @@ if test -n "$file_system_pvfs2"; then
fi
-if test -n "$file_system_gridftp"; then
- AC_DEFINE(ROMIO_GRIDFTP, 1, [Define for ROMIO with gridftp])
-fi
-
AS_IF([test -n "$file_system_gpfs"],
[SYSDEP_INC=-I${prefix}/include], [SYSDEP_INC=])
@@ -1203,12 +1190,54 @@ AC_MSG_RESULT($pac_cv_have_statfs)
if test "$pac_cv_have_statfs" = yes ; then
AC_DEFINE(HAVE_STRUCT_STATFS,1,[Define if struct statfs can be compiled])
fi
-
+AC_MSG_CHECKING([for f_type member of statfs structure])
+AC_TRY_COMPILE([
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+ ],[
+ struct statfs f;
+ memset(&f, 0, sizeof(f));
+ f.f_type = 0;
+ ],
+ pac_cv_have_statfs_f_type=yes,
+ pac_cv_have_statfs_f_type=no
+)
+AC_MSG_RESULT($pac_cv_have_statfs_f_type)
+if test $pac_cv_have_statfs_f_type = yes ; then
+ AC_DEFINE(ROMIO_HAVE_STRUCT_STATFS_WITH_F_TYPE, 1,[Define if statfs has f_type])
+fi
+
+
AC_MSG_CHECKING([for f_fstypename member of statfs structure])
AC_TRY_COMPILE([
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
+#endif
+#ifdef HAVE_STRING_H
#include <string.h>
+#endif
],[
struct statfs f;
memset(&f, 0, sizeof(f));
@@ -1290,35 +1319,11 @@ AC_CHECK_TYPE([blksize_t],[],[AC_DEFINE_UNQUOTED([blksize_t],[__blksize_t],[Prov
#endif]] )
#
-# Check for large file support. Make sure that we can use the off64_t
-# type (in some cases, it is an array, and the ROMIO code isn't prepared for
-# that).
+# in 2004, solairs defined off_t as a union. Today (2016) that is not the case
+# and we can simplify this check
#
-AC_CHECK_HEADERS(unistd.h)
-if test "$ac_cv_header_unistd_h" = "yes" ; then
- AC_CACHE_CHECK([for large file defines],ac_cv_has_large_file_defines,[
- AC_TRY_COMPILE([
-#include <unistd.h>
- ], [
-#ifndef _LFS64_LARGEFILE
-#error no largefile defines
-#endif
- ],ac_cv_has_large_file_defines=yes,ac_cv_has_large_file_defines=no)])
- if test "$ac_cv_has_large_file_defines" = "yes" ; then
- # See if we can use them
- AC_CACHE_CHECK([whether off64_t is an scalar type],ac_cv_off64_t_scalar,[
- AC_TRY_COMPILE([
-#define _LARGEFILE64_SOURCE
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
-#include <unistd.h>
-],[off64_t a = 3;],ac_cv_off64_t_scalar=yes,ac_cv_off64_t_scalar=no)])
- if test "$ac_cv_off64_t_scalar" = "yes" ; then
- CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
- fi
- fi
-fi
+AC_SYS_LARGEFILE()
# pread and pwrite are useful to ROMIO: if implemented well, they help us avoid
# an extra system call. But --enable-strict or CFLAGS="--std=c99" does not
@@ -1348,10 +1353,6 @@ if test -n "$mpi_sgi"; then
AC_DEFINE(MPISGI,1,[Define if SGI MPI])
fi
-if test -n "$mpi_lam"; then
- AC_DEFINE(MPILAM,1,[Define if using LAM/MPI])
-fi
-
if test -n "$mpi_hp"; then
AC_DEFINE(MPIHP,1,[Define if using HP MPI])
if test "$NOF77" = 0; then
@@ -1392,8 +1393,6 @@ AC_SUBST(master_topbuild_dir)
# The following definitions are needed within adio/common/status_setb.c
if test "$FROM_MPICH" = yes ; then
AC_DEFINE(ROMIO_INSIDE_MPICH,1,[Define if compiling within MPICH])
-elif test "$FROM_MPILAM" = yes ; then
- AC_DEFINE(MPILAM,1,[Define if compiling within LAM/MPI])
fi
if test "$FROM_MPICH" = no ; then
@@ -1455,6 +1454,7 @@ if test $FROM_OMPI = yes ; then
# Open MPI does have the status set bytes functionality
AC_DEFINE(HAVE_STATUS_SET_BYTES,1,[Define if have MPIR_Status_set_bytes])
+ AC_DEFINE(HAVE_MPI_STATUS_SET_ELEMENTS_X, 1, [Define if MPI library provides MPI_STATUS_SET_ELEMENTS_X])
# Used in the tests/ subdirectory for after ROMIO is built
@@ -1473,20 +1473,6 @@ if test $FROM_OMPI = yes ; then
AC_DEFINE(MPIO_BUILD_PROFILING, 1, [hack to make ROMIO build without profiling])
DEFINE_HAVE_MPI_GREQUEST="#define HAVE_MPI_GREQUEST"
AC_DEFINE(HAVE_DECL_MPI_COMBINER_HINDEXED_BLOCK, 1, [Define if MPI library provides HINDEXED_BLOCK datatype])
-elif test $FROM_LAM = yes ; then
- # LAM does have the status set bytes functionality
- AC_DEFINE(HAVE_STATUS_SET_BYTES,1,[Define if have MPIR_Status_set_bytes])
-
- # Used in the tests/ subdirectory for after ROMIO is built
- TEST_CC=mpicc
- TEST_F77=mpifort
- MPIRUN=mpirun
- MPI_LIB=
- ROMIO_INCLUDE=
- USER_CFLAGS=
- USER_FFLAGS=
- TEST_LIBNAME=
- EXTRA_DIRS="mpi-io/fortran mpi2-other/info mpi2-other/info/fortran mpi2-other/array mpi2-other/array/fortran"
elif test $FROM_MPICH = yes ; then
# For now, separate the mpich from mpich cases
MPICH_HOME=`dirname $ROMIO_HOME`
@@ -1519,7 +1505,6 @@ elif test $FROM_MPICH = yes ; then
AC_DEFINE(HAVE_STATUS_SET_BYTES,1,[Define if status_set_bytes available])
DEFINE_HAVE_MPI_GREQUEST="#define HAVE_MPI_GREQUEST 1"
DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS="#define HAVE_MPI_GREQUEST_EXTENSIONS 1"
- AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
AC_DEFINE(HAVE_MPIX_H, 1, [])
AC_DEFINE(HAVE_MPIIO_CONST, const, Set if MPI-IO prototypes use const qualifier)
AC_DEFINE(HAVE_MPI_TYPE_SIZE_X, 1, [Define if MPI library provides MPI_TYPE_SIZE_X])
@@ -1534,7 +1519,6 @@ fi
if test $WITHIN_KNOWN_MPI_IMPL = no ; then
PAC_TEST_MPIR_STATUS_SET_BYTES
PAC_TEST_MPI_GREQUEST
- PAC_TEST_MPIU_FUNCS
AC_DEFINE(PRINT_ERR_MSG,1,[Define for printing error messages])
AC_CHECK_TYPE([MPI_Count],[],[AC_DEFINE_UNQUOTED([MPI_Count],[MPI_Aint],[Define to "MPI_Aint" if MPI does not provide MPI_Count]) ], [[#include <mpi.h>]])
PAC_TEST_NEEDS_CONST
@@ -1554,11 +1538,6 @@ if test "$ac_cv_func_strdup" = "yes" ; then
# Do we need to declare strdup?
PAC_FUNC_NEEDS_DECL([#include <string.h>],strdup)
fi
-AC_CHECK_FUNCS(snprintf)
-if test "$ac_cv_func_snprintf" = "yes" ; then
- # Do we need to declare snprintf?
- PAC_FUNC_NEEDS_DECL([#include <stdio.h>],snprintf)
-fi
AC_CHECK_FUNCS(lstat)
if test "$ac_cv_func_lstat" = "yes" ; then
# Do we need to declare lstat?
@@ -1641,20 +1620,6 @@ else
F77MPIOINC="include 'mpiof.h'"
fi
-AC_CHECK_HEADERS(unistd.h,
- AC_MSG_CHECKING([for large file defines])
- AC_TRY_COMPILE([
- #include <unistd.h>
- ], [
- #ifndef _LFS64_LARGEFILE
- #error no largefile defines
- #endif
- ],
- CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(none) )
- )
-
echo "setting SYSDEP_INC to $SYSDEP_INC"
AC_SUBST(SYSDEP_INC)
diff --git a/src/mpi/romio/doc/Makefile b/src/mpi/romio/doc/Makefile
index 26b7bcf..f041d5c 100644
--- a/src/mpi/romio/doc/Makefile
+++ b/src/mpi/romio/doc/Makefile
@@ -4,6 +4,7 @@ all:
latex users-guide.tex
latex users-guide.tex
dvipdfm users-guide
+ dvips users-guide
clean:
-rm -f users-guide.toc users-guide.log users-guide.dvi \
diff --git a/src/mpi/romio/doc/users-guide.pdf b/src/mpi/romio/doc/users-guide.pdf
index 03f47c7..dbabbcc 100644
Binary files a/src/mpi/romio/doc/users-guide.pdf and b/src/mpi/romio/doc/users-guide.pdf differ
diff --git a/src/mpi/romio/doc/users-guide.ps b/src/mpi/romio/doc/users-guide.ps
new file mode 100644
index 0000000..84e5352
--- /dev/null
+++ b/src/mpi/romio/doc/users-guide.ps
@@ -0,0 +1,7035 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.995 Copyright 2015 Radical Eye Software
+%%Title: users-guide.dvi
+%%CreationDate: Sun Nov 13 09:14:39 2016
+%%Pages: 19
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: CMR10 CMBX12 CMTI12 CMBX10 CMTT10 CMTI10 CMR8 CMSY10
+%%+ CMR6 CMTT9 CMR9 CMTT12
+%%DocumentPaperSizes: Letter
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips users-guide
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2016.11.13:0914
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3
+def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
+rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0
+N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop
+false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A
+length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
+forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{
+BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat
+{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch
+round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0
+rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B
+/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}
+B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p
+-3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{
+0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginFont: CMTT12
+%!PS-AdobeFont-1.0: CMTT12 003.002
+%%Title: CMTT12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup
+/UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT12 def
+/FontBBox {-1 -234 524 695 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT12.) readonly def
+/FullName (CMTT12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 67 /C put
+dup 69 /E put
+dup 70 /F put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 80 /P put
+dup 83 /S put
+dup 84 /T put
+dup 89 /Y put
+dup 90 /Z put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0
+7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3
+A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3
+4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C
+A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251
+75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0
+9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507
+098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02
+ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581
+DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B
+5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2
+F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914
+2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4
+E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21
+C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23
+42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D
+4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068
+95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9
+830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FE62
+C7DBA30E569DD3565AC9C80B112E221E3878624A015F6224597D02C9A07B368C
+F9FDC817988D12CB00ABFAB288C20A59AE40E7A75C235938C47F77261BED14BB
+6574F633BC4DE9E8AEABC46E0965AD69748C315B6DB5F264D5E7635BE37E23FB
+873E2488086BA27275142C774A4A241F92E8ACFF0F25E81E2565642D88F77DE7
+03B9B3572DB260AA7C2BD4C26A77BD8CF2C8E64411908BBD7BBD2C5C59E4B99D
+27A83093730BC19E891A7CB77BF0E547D548758561D33361D5D6CB27BD6B92EE
+94964C244364EF29209FD310DB102768AE57CFDF4B7DBBFD3B9D1DA5DF412D49
+A1BFBF792D454260EA78E4DF0C645CAD717312D782C634131B685F40B0017AA6
+CD442B7C50944D5C87DF53A069309CFCE3166F9324FA4B83C32B9CAED85DF1B9
+BA71485B7F7ADC8320DBF902E3CCACA6EDA582582ED6521276D7301078B9F352
+93D6B3EA2B335AA79CA0404BDB0D5BAB5DBE7D1F503A26A53B5F20FE2247ABFE
+5D08DC7A6D842B4AC35B5DE1ABD51FD2CF3D3ACDBD832662BED82A3FBE442BD3
+91006D9A1DEEFDB9DDEC9A9CFE058AAA811740542D2EA49EB2629B7C901A5702
+292D4D213385FAFEF8CED7042F25DFA8502ADFB352A7C10CF3CFE9B741E80F1A
+48EA98FAC5E7B3EAD3E164010E769A068B92A45C002AF525C72B586435F59DA0
+A7C3D78680986879D6314EC56DCB8330675F1F0FE9E62A8E7F2EBCCF61AA6F71
+9033D1FA3F14D6A39AF03232C722629AACF1466EBF7A6B730F258C711915C78B
+1155E139FEA50F37F93F645F6DCFF6B7DE45B211497E7BF92063C9F5234E2870
+F8887D8708B7B82F2C8ACC0242B2FF1DA88750A28AF92CEBEF4F07A5DBE85575
+5341054ACBCD29331EFF64EF4695DB26171F769D8B275A8154EBF42AB7EF205B
+8767859F78996CFA21C5DB429B618D3CAB415693C9BBA42B60921DEF6B4160C3
+FFBE2B592360EC6AEFA80E34FCF6D878A36D74EACBFF3395DF35EE331523A9A8
+02A0E73BA7F2CD28158CE2E3D6C7873DC521CD6B9EB4D05AB9F38F17E3877053
+1A83A8D11C5504A5A10AE72EE0799AC5256672B0FCC99044889B57E6CAFEFA47
+2C5F3332318B57D4FB93226E97E0902B8E606ACF5FF6E6818B0A743A1F561F11
+74E1A974D8201C99FCC5A71A7839A7FEDFAA661103BB922A76A4AFBFBFA315B8
+0901A1E3C42C3D557ED2F6F284CB581D9975A2ED1261A8B7756DAEA34E451246
+00C5140FA69B34AC2C264E7D7F75CD204E0FCB6A54401880615CF442A370416F
+DE8C6618D22AF7CAF9F1E47CD0A38938957222017AC9780C04A38FB93A26F885
+BA129553C94D3A9A3413479E626F343A515B548637FEA3025098A57803F84F64
+630E3D4561D1B71C127D10EAAE7458305007CE9768518BE97823D35223A16604
+222F903AC201529D38448C1C66D7BB0153DA81FFB425F9988D5F10F49DF39EFB
+84C57E9BE74B301CD6249F76C1AC1581FC56B4600AAD4B0D0E00DA0F654ADB14
+4DCBB5432D06AD7EC1C9B5BFBD533DF63E77C8840EE88C9C93994E5036C8EF78
+6C480C87F1065CBE0615D034B6A926D237A92F4474AA5710A4BD16256DC4D636
+3BFEDAB0B550184F9D3568BA238A10A975F7D533D57DE547F1E8BB3A662970A8
+4506863DBEABE03D29F63907C3C73C1A034F8EA94EE286837786CD4E5FF74D4A
+3088ADB8FCCB57932BA4C9DB0F1556705CB1822711AB6ADFF93FDFF51839323D
+58C7ED4FC10F6CCEDF38DBD6CA7403138B70C5803F5D78CD1CA62D78752F1354
+7FB47DAD534E4660A43C4E2EE6090F140AC8A9DED202FB15E5DCBFFFF0116ABF
+68E7AF18DBD23BC6DBC52781D637C79A7A2C1ABCB73066A7F569D964836B4485
+44FB003F179D5CF38CE3AD2431D3AD119D79C0371B813E282FEC9B2F5A2B7845
+CD6CB4D6B0E9147198F6EC815E8DE63E18D280960EB57A8F1D0B3C5673129864
+B27DB690A1F8A9F2EAD6B5A81E6815E68B0870027CC283D0C60232F9E287E3CF
+2285382D76B7659F1508078FEA8267434E42408522D87654BC04FFB6BC6CF733
+6B3B8AFC6A7FF6F0C1504A6C2E8685A16B4B833713FD10F1F33CC6C3A1B3E322
+B3202739D95C90BAACFB623148EA3D18FB1E5B8F332F4A481A3794466FF81297
+E3AC49E6A5B8BBCE93FECC772B77EA42792F6A424492C7C69075A13EB094CD36
+DA8FEA50F4AB93A0D576A5F38BC9376C471326FFE4CD0FAF1E399700465AAD73
+F4AA92CA17661DFDF174020E8A8916B55EB0F53C434DF5B34FE417482524D940
+800A2AB996E44338B161FE9CC9898E719F74F024F323B3DF2F636891F9CC0A17
+0B44787F2179968F75DC250C39548050D6F972E560F9749A624FEFA6C2E69407
+9ABE51F42B619B4C9FDD560A79362AD89A0868F2035D80A0E56B2F981E664CE5
+1CC928338DFE37DCF2B8926234964BECB3D55BB24828F4F91E747990204D8F45
+DDD436C2DEF55A8883850930E906E6B08845B4EE0A9D00B5012112CD07CAC829
+C358B47258F9535705236EB04643753553A4DC81B42DD6C6C9DE039497621EE9
+0C94432E81557F0B19592FEE805A1AD1876AEC8EDC9F67DCB16758950A4139E8
+F2074C9CD228041C806A247CB06783892B8EEAD2801F9F7000B03C9241F571F0
+702F42F5ACE69DE337A0A19344406A69F2D1332FBD1EF135A98A8F83C24D500A
+05D947E047AD0DAA2A2B18D92E10487C7523B4B704C10914D7529A215434C256
+E54BAC41625B4459C7B78C3EE2582DAA7C264E3513D715E08771840D35F8C189
+7CE38BED286AAE60FD92D2829FB5DAC556BB8A4B86F5D24A075C0A0EE4BD1C01
+52840707
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR9
+%!PS-AdobeFont-1.0: CMR9 003.002
+%%Title: CMR9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup
+/UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR9 def
+/FontBBox {-39 -250 1036 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR9.) readonly def
+/FullName (CMR9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 46 /period put
+dup 59 /semicolon put
+dup 67 /C put
+dup 72 /H put
+dup 73 /I put
+dup 77 /M put
+dup 80 /P put
+dup 84 /T put
+dup 97 /a put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 119 /w put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340
+15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E
+ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4
+B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029
+85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C
+DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955
+F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D
+2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5
+B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7
+78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7
+E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3
+41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277
+B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072
+55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA
+700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9
+8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A
+F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4
+FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4
+3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15
+B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2
+AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013
+461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC
+CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85
+CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C
+4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F
+291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223
+D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181
+C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115
+D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9
+9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405
+2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380
+A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB
+2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E
+2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6
+AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577
+9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB
+B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67
+0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D
+9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B
+42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0
+C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35
+623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6
+B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4
+E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97
+CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D
+07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7
+53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350
+EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9
+52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88
+F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC
+D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3
+81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D
+B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6
+B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A
+31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF
+E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293
+846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733
+46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E
+44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08
+A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A
+BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5
+1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4
+D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344
+6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A
+E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E
+24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E
+75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D
+EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51
+C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0
+5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034
+099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281
+7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE
+53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84
+7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F
+7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C
+D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933
+CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD
+866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B
+B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826
+ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B
+B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64
+FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B
+40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643
+D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8
+2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787
+39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2
+1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4
+F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9
+253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B
+14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085
+6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E
+E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B
+9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E
+EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339
+FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F
+289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3
+A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5
+5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46
+5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652
+152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE
+67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3
+BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59
+3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88
+713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF
+2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5
+D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143
+6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB
+A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9
+F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95
+26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A
+C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970
+350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700
+70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5
+F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95
+F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8
+9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2
+DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473
+F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D
+064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF
+1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325
+A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E
+E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF
+01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C
+40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C
+72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645
+24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1
+EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775
+D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311
+83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483
+5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448
+1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69
+AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC
+4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3
+7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9
+65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063
+B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6
+FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6
+4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490
+8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6
+1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3
+10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B
+C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4
+8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A
+C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0
+7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F
+852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C
+3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997
+648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD
+855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE
+1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C
+1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0
+B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7
+D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99
+24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C
+552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733
+6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0
+800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8
+6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659
+E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4
+5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2
+00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F
+E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4
+82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7
+6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3
+128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D
+744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507
+84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF
+AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86
+5D239CDECAAD9AE5D95377E0D3F61C2AB7EC99ED28D2B4A7B6004A566B43CECF
+7E35419EBC2A47CC76393F4778DA801EA75B4C1FC38062AA77CC4EF0E6CB0C81
+9A797C01F89BB58A957D3DAE33E4256B1F5A7D66C8989C512DA066D6DC771548
+F2DA3B490834E7B4CECD9293A5DD581A3171DB1C41F348377A602A2DDB80C0CD
+7B960942967BF3983FCE91203F8C465362CA8E91B3C759943797C24CC83176CE
+2D044CC07FCD6CF9DD7FCE413A0B2CF777529685866C7855509CD57489F07108
+D995887AEA9D20B3CDA77BCA95B6F655020E2964AD82AD77382DFF4903C68680
+2E49EDA9528B7D8F8724EADAB1EA2DE9F4DFDF29B22F885988C306058ED73421
+F9D738DBD7B92C3D31DE5E0367B7006F757508FCB5D653DAD14A8108292723E9
+740CEBBBBE4A72103663FE29397D8ADC9634CDB5E5E32533B70D1E617E255A4A
+7A43966ED1B4286A4364A8CE71574F2DEA72E061762B22C960240AB5E7A530B8
+D23B99D098F7160C4C3C275A1F76EFF27D853689A023B80251004C69E46C9C22
+0B8A6645E492931996E6DEFAD9D535B58A149AA49FE620EF6A1B044111D83197
+1C4BA33E9FD206A7B97E69443C94B33B7844AA6061EF7555A6B9B15BFD37418C
+A33E352E0FBA35589BACDEAAFEC6E0F31862296F17D9EB26257FCB0D067F0588
+09C206D19C54BC03C10FA55CD7B401C131720FEE80C43A6B22A55ECD147F2055
+02DC5F70D8D7A6DF940E23FDF870E2858CDBC2A330398275848E8C0FB114A5EF
+5F29051B43DAA627DC0F82C0B510FEBFB2CAFF3EEE454AB8DB86BA2DBBE3551F
+D75890D82B97F4E301E708AAC708CD1A121ADA6EF5A42E25D30D7D156363DCEF
+D2F3B2510B57E77BFBCBF2B25ADF3D65CB26FB9078866AC4AC771A7D3C768886
+3BBEFC23C72C059694F342BADE4B4D44AF5DA32408DBA3FDE5447C987605106C
+C743110373DC44C01A0943857B65649F842B3DF760298E06FF8C3B2BE9BF5AE0
+710FE262EDA172A99BDB52A72D6B97F77AEB83A29274A3A95A5267C76571E558
+45D6A333202E477F8C9D8D83343C2A4ED6F129B57E1C863719C78E93AEE0C3E3
+FD02867BCEBA37EBCDD9ED0E51410D1A7C631E41645ABB00DB7D8E1A7DB1E8EB
+70DFFC60A122E75A3ECDAB8C35D3D7335B7BB6173763C2E6DABE6BFE61D89472
+54747CF9848901DD600662AA12441AB54292612529D4FE44D231A37C2B30EDB1
+5F6F26B07F49FE808092CCC3FEE0F077B54F9F4D4E3C74F6EA7D31A9607237EC
+501BA49A25E227C13948A2CF353E06F07403A54AAA87272F02BA93AB25210B29
+969DCA901D341F32979E264B6DE0CEF2F4B3460DE636BF55E7669038BC928E7D
+5BD178F38A7E12BF24C72F0459B715DD5462BA30DC94FF8DDE5F8D2B1B99B73F
+FE4CC390E43D5D6EECF37CBF3618289C127530F18DF16ACA8A9FB59247A09592
+61F9098B705A620A1BC5F1D7555ED659E4BCCC5C9FC2850256D81DD966CAA090
+0CA009674D3973F49EF25B8AAB6BB4B94A8DB36BDFD9D4819A99C277EC2FAB34
+A27419BD71FA85AE08E368090C564C137154925E0997A8B1939437FC30A98B88
+135FEFC62A909B17BAB7EF4498694C0884FB66E05A789C7D02D6A7BFE3A1BAB6
+40B6E975BF8F27A17CC6DD0810A5BDEE22D46F9CEC8C9C314B9385B38796A11E
+75988FF39EE14747AA1F2F0E516C5383632142E04AD651074A7F3802ECF1F83B
+08390B1EAA4A855810E092ABAAA607148A575AD8D2AF4ED82E1BF056123ED813
+1724F0C8DF5E83AF8960B17260850FB1E3077451FD4A24570EA79346E291099E
+F8CEB0036F32181F4A5475392B4B1F92B24D6DCFABE8DF63BF39D4B882FFE5D7
+E305A01C62012C74D05E250335E05CDD95E3BEFC41E38347AED4C28361B71099
+8E5EAE433D8A82CFB15547B339AF3763F80FFF9D966F224AA72C22207BCA2267
+52B21D219F4CA4073C22A09282A6548E39F81A1B9CE7B0C9B5084AD602C6D09F
+64366DCD82EB357200FE6F7730D33F2434D3723E9062B80F9C42F94BE912BEE7
+DB29536FF3D44AD8BE18F768339FFF0B30D8837A7EC784289AAC88802D8A6676
+18E8EAF7A478B619BEC01F0F02BA88B641A70783EBF783503D10DF7E0496D555
+85857F83C7DCDD5063A973A1FD2E01CB1197193FF0BAB0ACAD5878D9BCBABDE5
+06E7C34B973ABEE28BFA1EE08169463B0ACC89FE1CE7674A16C12EC507852186
+21D6ACC2A5F5AF93BD71CFCDBB3E4C181949483D3BE38D9FB4119A2D85470B23
+530A3C8909EA116C408A6259DD5AAF149E7BCE785226D22E602C26A92D461E02
+44E94C1715FBB5E7858D751D678CDB0E126B29FE43F4E386F59741C8AA6C8514
+657257F3B2E6E1D93E3D0F425574B950C39FC891A11ADF59C4919F63087C8565
+540A13B1B222B7470C226ED0EA21719FD7F2FCCEBDB45452017B062F1A13123B
+5F93555AE17909F1E6D0F354F69BCDDCAE66B94C4E8784313816CB845D60C41A
+F2BAAA6328B638940AEFB136BDD45A63D826C9A7AF4B7CD42FB977B9C5AC5DCD
+7B55814F388D53DEE781748911384F00CCF257E1D9C8D96EB1F0D7D130F97B84
+B724673F9F987F7F265666D7579B74A89BF7E10DFE0D83C2EF51C1591D52FEB2
+03B9D8B8CF17D4D4FE32588DD6081DD2A9A070AC2C4804FD5CF684091C9FB6AF
+D08BF4AB51E0BA80940F032586E914D99974C0F253EFD5EDFADE0DE5C3A9CF9E
+31A5957E58E0548FDA6BFE1884D3912E31F29268F3D39AC1DF97045842B3A766
+97E971167EEEBF6FA5FC5EB71BFB3BD711DDFFB86985E39FF37A4825EF86A360
+E4B226B8B7A6A8C33F0098E463C13CA7DC51343CED3D97E217175E4B090CCFEC
+66B8FB90A3F08132EABB301087D3827FE4BE3E8DF9BF36A13C849871818F22E9
+EA2B4A7F9E36FAA769DA6F8208B93E281262B1B3007BE02098C2C1B4D6BB9659
+65340D601B5216F8376A3D4B66C6F3486086528F1797A71D958105794D5C02DF
+D699C022576F3BEE0274AF096E6AA5FA0CB9D0F9531AD4DBFA09DF6028BC9E59
+75F9EDA5436145BF8491764D648400317F24EF161726D7B795E5A38ADF6BE64D
+DCF4F21DDDADD10338F312598589458562225B821D495A7D142E84D845E20919
+BC4B213B9B1EC049A456713B75167152A1224398D9367A5A1C887049176A9927
+6C063552BCC124EE59E13BEE4C32CBD4459D6DACA1D9B7F40A300CA5EE262910
+AEF9BFBC35641653126DDB2383B335EE7C2D831CC0A06AFABA0531912151C159
+8E60B0F5488864A3665B80CF23FABAC0975AC9DD362F942D83D88D14073B6A68
+E2E7CC9833CEB8ED770066CEFC186D394878528C6309C02093E17D8FB4087A26
+559CB15DD770FB96259B8DB3162E8B212218CFF86E824640728C30BAA8F2CD14
+65858399B3196B7015B3DE566B2371332DBEE99F96A9357402A8F6E364E7DEB4
+78D0AF55B39FEF4FA60E24333DFDFC944CA814EF22886EE6CC549287BC2B7984
+AD28E3548D78CCC7CDC3B9FC053CC7EB1E20FDB037A49B6BB074FFD88A35A9F4
+EFAE6DF9FC51EA6842E90776546B4951045D2DA32B7D45D697B885947D5B483C
+B71C442D6AB9AC4DC30C704DB5F73DF9C52D5B5B81D5A79129393BB96D0850FA
+9A24B8AC04EDAE551CBE6850256432D76637366CE840F40C74BFF8EDEDE55A0E
+07B4FA95DC5A5EAE303BCE03ADD82AE07D002658A0DA8CFA1F70D868D8512E28
+6650F9D324A1A1A64FA7712713793A30052F6E6DBBCB7F3008A7F1758ABAD3F5
+2A7374D8A30C44F79074D8415951A2CA2233C2DD6AA52AB5712244574C686E40
+9A276006A940369EA05DC567BCA5A85041460716AC5639564B52C3643143688A
+EB2406164B8D3786C4A99BF55D0E2BE2041FCA042FA7629C60C3FE3395C95AB3
+FFB73CA52C105A9D1FBE3C6479895957EA1A3DBD9E4A3116AB050AAE9227D246
+B6104C8ED7C8A693E0A7E32F497C174DF9BE91E27568EDAAFE2C4E04BD3A7D2C
+66DFF0C5C949E3727067B75412BBA5F4C43069CA82FE1C548CA122C68495658F
+70B6AA82FC277B8C8778C3489674F4FC34F26EAE910639382A3C7935961348E0
+019098514081ECF5801F707118399A97B13E80AFA37DF1E1B1466434BA54C12E
+C4376F52102C5D168DCAB4D2BA85C15D3DF633124911B7268A43A4998DB26AC3
+FB63CEE9BCA15C3E79BA0BAD29C80A5217DB264B507ADCA8EA3A46DD4B8C279E
+79683CAD33AE57AE01AE6F6B88827E10091717EADDF63837F9B78EC6AE9D27D0
+CDA044635271DB42BA1DED5819737680932235381285E9D5704C4974326D938C
+8083AC3CBED2CD94B6D773D43B188B1B0463891284605ECC3F69C5B70EADC1AD
+2BD1C98E1984D0A36C21A544EA21794C5C8B91DF35E8B139335A5EA1C2762CE5
+67BC30C8F7B8367C83E40DAE20AFCCC814693B2B1610B7BA611473A61AFE20C3
+082BF0AB3CFF49CC1894D1E720912B5141CD5ADC34F389195A6998F4A695C857
+DA917E5ADDEDFE17B3E56C7D546C08C1F13D63956A3EED9FCC7110CCAF707F5F
+96413EFABC517A28B5A405444331283F4709A3715D133CD0A304CF4B01D1C90B
+BA5E1E790C0C2F79F7B82914EFED54AA099902C44C0B3AA11CC95854D43C06D3
+A8ADA3253E9BE7B79FB0353AE4F4350D66D8186845E4D8BA3842A470E51CD408
+3DCF8DA296BFF0B68467A8A91B21E7481D1F9A4FFF39D7069756AC018A4EFB3C
+EA645D6F27E36112A112711C80E7A4D2D6FBF547350199017B180CBA993AE8A4
+1334EA4974D644065DCCC984DCDF0762B8FA187880ADF6A3E270A056AB127383
+6EF745C224DE155F5DE2BABDEF4E266D08EAC680062C7BE3F0429433B952FF4A
+473F1A3C89DD490C26B20D4655756207C014E19F829AB6C3EBCEBC503589A5C3
+B296EA02555D0E7BF81FE43DF1DE0B326023E499DC7B3C9C3193A9DEA9AADC76
+78A9EBA6F80969CFB88BFBAB5BBC075935FDA2426132691E10A22AAE4650EA96
+5E6E945DC97213D5D2326E1BF40E7FE71B749132C52616AFBEBFFDD14AFB562B
+B02870F0402F90D77A5059F8CA111F3EA231BDA487A058C2195BDEF139B66AB1
+CDE981109406006F997B0A3AC8D078ECEA4D776ED6BA1FCDD8C65413C632BBEF
+E91FE13EE07474424233B18BFCCA1E1B96DBA6654C52D162A245325E8CE7463C
+28B666F7D0CAE7210991641792C02A29DB2EE7491152BC4168EE75D17348E145
+54411F254F476B24B4854B724673088F46A76E30FACC61BB9C4E087808A33658
+56F29A7F3AEA8B4E0F4B64048723163C213CF1FE485A22A62A90DF3FEBFA5ACD
+691B257E14EDC09A40CDBC61AFE611F79687C96F11EB86ABFF1D0ED0E66C97ED
+CDF2EAAFB6D21B88A490F9D9D8B2A1515E59B2D84556E012C4A0C48494DA3208
+21B11E6D0EF557E8A4694693C3B88E6D1B6236F494FC8E3EB0D1FA5F17CD5BD4
+C1DD33E3E620B3DD54EBDCB938BFEEF29972BA261D51EB7B12E77728CFB4CE6C
+DDB4BAA9EB667C68CF7CDBBC762DCFABB138F65ACB9C78A0BD8BA5982693EF7F
+3B00C5DAE781B9E6989154C2A3E4BF4771DCF0336B7D3C5B31FE67E04AFD7BAC
+8EFD4E0B2F9BCC296985DB5A815E65C4988F5E22BB066C0072EBE3165AF0F1ED
+AD9E696ADA95C71AB98E3F7D68F2894DBA4765258F3B4A661783319388D25677
+A734F2E4721E7B00F61A28A899EEADBB42EE23F66FE4BC7A1A1EDA66036063A5
+165F6E83566500EAA816CEFA552576A0BE65B8B54FEAC2DA08351FA299880DEB
+5CF8A4293092289A35FEC9461EB1C085225269F0F0983FF7C88CC36C062EE403
+2688680A2F2F67FB912232CB0CB9E4FA1E8FE0EE6A8E814323BF5CF06EE7EA2E
+8EAE238B2A4F9FE5E3DEF0C00204CE6DAF2DE57007DED66EDB4AE1CA0B70351A
+C276CE621787C5E44512E113D964FB902226843B491217D19A8FFE1A0A7948B3
+CFC484E2E55BB05E47963998036D6ABD689242ECB6A69A2949E1CE38FD313603
+0B04803D9E40357D4C34DAC66B3C3288E26D4F4D2219975326D1C6BF7946E6AD
+9E5FDAC496056D688E88B0244300F8AD3BB16CB35FF8913C1D6B43811F4F02F4
+0BAF0C374299531EF6CE83521DC86F4EEB2E7AE33B656660A352D2845AA24744
+59629DC694593114B3BCB523FB664A0E733A415521D5A2900515B0F9D6772103
+72C31867B2719043CEE0164DCCF5535482E7D69906BFCCB14A925283002F57FB
+67B057C576FD2A1652ED9130D35000EA53EA390CC69E4676E07FC27032E69A65
+5829149B046EB420DECFA5D79A9AE142FE597536844D9168931A4B7D54FBE12A
+9F31BA3B06039E2D401129E1BBA99ECD2EA450B7682B16D22A6A81C6B9B19498
+03066A38B226FB7E3285CB1DB3B382D446D213258D7AC3AF013F57D635E7A194
+D83F7B1C70495F5F7578DF11C20F1824889CEFC4299DBCD3D2746F38406BDEC3
+B3E861CE4585B0C253437E34772CF87526FC7E9D337D50795BD5A39D5CD9D9B2
+35EF1988D542D6AE8A0FE71CC525F5E1ED60C55496F786D3AF3099C627D55368
+5EA60B47A111CF65FA91B0A9B27B9B609B77BDD8D1959D8FD7543DF5A28827ED
+04213C80A8246075F9CFE10CD91CA87014A2C697A1A3579DA76B21E91BE892DE
+12D8238DD55255382B2FED9EF9FAD03E43B5E7B0406F524F09D1B64A14FF68B2
+F49182BD10A02FDD74AC118E967B6A5734B87D3C5A9EBCE230EAC963AA4CA566
+54109F0C0497B4A122CA635632D4CF9CB9086D116D56B7AB4C1BF073B3B11B6B
+4FB0E908516986FA19159165321637D3D6E51DB8411B6A2A6DC77510855EFFEE
+AAE53EB8D900556CB83DCE11544D92C06A9CFEE6A2BFF28388C1334CBA61F17A
+69C287854820A3F18E57DE29D88BF3A789E26C805D8D133D3ACD3D3698C937AF
+D36FC3C23A20D51FFD18EF4EBBC494D33DC06CEB87F51D44567F7B7F726F6F57
+28FA0CD9DE455E90CAFDA054B493159863BE13D374CDFD058C72947CDAA0169B
+6A38F6E8D6FB118B470FF17570EA12CB82AEAA3E0561B361C7156BC8DB734B80
+ADFCA2F515FE63A9389264C96B446261DDACDE915C807C3F10F87511F489EED3
+29B251D4D1D94E3F0A9F2FF875E67D33CF5CC7AC65781CA521AC90F70A9AE8AB
+23197123FA543894A4C8D9CFFC0891C6B9190E9AFDC3C325E69FB384BB8145D7
+F6538C6D8BD58873935B7A1F86DB97ED76C452DA5D102DAA7AC196F9BF08B7AF
+CFEE6443F3483165FF58DAEA7D6118685B1D4AF52095EBD880D22E22C9808DAA
+7132563E8E0C98F575C713233ECE9400B0FEC4762939200ACE9E062E09C4B4D7
+9A8A1F73A7F34A49D193D0D7AC6F8DED574F41D031477886218C7AAE33035DE1
+F245B484E33B60C6526571E4C00C6DD4594523FC00C4678B4DE0C4C404C42643
+3090ED4D957DFE9D16C0F62812E2649742A781C6FC0394041B1F969BA7028EE7
+63A566B0A918B970F0D7557BD333B9C2160119B11DEECB6822BBFEE2AF6865E7
+1C7F68571DD961B1FF5CD6090C8A6B017DA5F28CF6190B82EA274A40CA5049BF
+DFB31E343D66A654FD6C303D5AB0DF27BD69136935A796B7B9E0DB920F98F863
+4AFC87C91A92657B954A2EB32E48F42E25735D06E7BD18B2A6179D0AEC51D744
+F5716E7F511B4D1211FA5A4835191B90284CB266AEA535BC08C7407A971BF4CC
+118FF03E155057C7F103F98661FD24A8DF4CFE3D7FD2EE742000CD208ABF3CD0
+6C338692BE626F15DEC6EF47B3EE5B5FD0A9E3CC204282C1418C66C90D4A7E76
+DAEF4C18B94B97FBAB2CED03C9515EC59DBAF996001D98ABA2A883C359070DF8
+4F14DD7B14EA8ED93D2A4AA3A08D5316C27C5142C3D5AFDEC78C19D34FB4E575
+E03FC2E2598A025A9CA12CDC3AC8E10A04702D59BEFA03252A86CC98001B381F
+F0A187EBB5B689CD28CBB3EDA69247EA11212BEEF8EFC4D9F3DCFA7F8360119F
+C472020CE0CE88850780FC6282B165419A50AAC89A7B1BF752501E3577BB1532
+B540D086B93B8485E9D91A084E57E01E517A1A3B293D83980EC627B658183E68
+D1889C33E30708C97FDE3CDBCD9ED005AE8549CD2F27921A304239E2E3F2C855
+DD1A2E400C260D73397185AF27E4233D096E02B42CDE4BEB9898C3BDEC370CCA
+A5601C79207D4504AFAD95333EEF160A4F7911B03C1A7DA24331DDB505AF9239
+1ABA7A58350D40245D1480E434995228E472B61FAC1FE4B15C21EB95E6338FF5
+D417EA42F2B792F38BB8298218EC385A6B07D07F27A5FC146EFF01132012DE2E
+4B351C890B51202FBEBF9B4A1074B23DAA01EE03C0883A1C619EA11C9983C031
+C8ED533D5628FEC4DED67CABF6622FEBF78C0D8A381197200314854CCE5B53A1
+53D32423EE5E608F4D8158AD4BF859FBA5A1019E60C80D6C092B61C0CB0B56F6
+B49934846760A994CA10F12ED6C21A4B818167561241E219423DD4E9EC93299F
+DC85F0469B6C51EBDACDCFC7AA3C15EECF68C06A4C4E53CDE9F8D9BE365604E5
+C58BF736E17B8C982B8395B16C92DAF3341F2925BBCDA738724682212186BA3E
+48C9A72A403F06A88FFF84C46C1142BA6AB012FD04EE1A337184F879B54BDE11
+9372344A8883EBEB6651C93F530534947F3E7DBEE7D02B86B8C44D9F748D1063
+C9BB49F5AB56C549D596DA6374B7F67C32B98AA1418B4D7B3913F4DE025D45CC
+18F1C2B3088B7EBC6E057334EEA2210BA967E3251132304B839F038663996DC8
+7E92D86A865060622A95772B779F6B2251FB9D565866B13F2B9D345D8BA78E14
+872FEBCBC52CDFDEFEE2F9A6E7C391DD5E213BD9FB28E49050542E5104B241A8
+04524F3FDDBBDE4084878008775BE9A7FABAA974053E13E3851DE2BB293A0A6D
+6386E062E4567DAD1E9672C1791085D15A0A6B5A0B03594DB0C82BC7893B3F38
+E5826B36D9FF014331D743D5DE872C09059EAC084DDE601432ACDFC88B8624A4
+8C1E9A7FBCAF1D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMBX12
+%!PS-AdobeFont-1.0: CMBX12 003.002
+%%Title: CMBX12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup
+/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX12 def
+/FontBBox {-53 -251 1139 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX12.) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 120 /x put
+dup 122 /z put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE
+0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D
+2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608
+1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C
+42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557
+FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE
+78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18
+22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE
+A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811
+4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065
+4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7
+95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D
+9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC
+5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF
+9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3
+CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511
+BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65
+9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68
+EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A
+D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE
+2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE
+947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B
+0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6
+4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C
+BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2
+F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4
+6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514
+D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415
+F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8
+481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24
+FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D
+419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6
+7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B
+70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988
+2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE
+0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC
+9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A
+C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D
+1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2
+A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969
+21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530
+7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198
+17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60
+30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F
+3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257
+96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3
+B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950
+1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B
+57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE
+B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC
+8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91
+8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59
+B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E
+BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC
+21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91
+D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4
+FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F
+A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4
+A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082
+A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA
+DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38
+7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F
+07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9
+BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E
+8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89
+E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C
+B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5
+45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67
+2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5
+5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF
+A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28
+5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975
+E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01
+5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94
+6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30
+8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB
+BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6
+9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB
+B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B
+B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E
+8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD
+595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E
+FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15
+13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A
+FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3
+DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB
+313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248
+C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89
+F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD
+DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844
+8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753
+E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197
+A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3
+C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20
+417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43
+19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4
+9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85
+12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83
+3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1
+A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68
+90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94
+3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5
+B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B
+82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550
+1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94
+AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D
+9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985
+2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5
+99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A
+31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414
+3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86
+F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5
+70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E
+5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891
+84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978
+BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047
+8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7
+5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7
+9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B
+F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E
+94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE
+0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC
+E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4
+7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581
+596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442
+F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E
+7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1
+1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785
+AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE
+4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F
+744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D
+67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA
+054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA
+6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B
+8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE
+CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39
+EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4
+C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76
+57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5
+5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F
+C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1
+CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2
+848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C
+B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB
+77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28
+87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58
+3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8
+409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7
+A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B
+72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D
+99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD
+8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB
+E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C
+82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3
+C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0
+EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634
+23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A
+59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F
+C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0
+1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C
+403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90
+1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893
+75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E
+0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35
+82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25
+C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8
+A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC
+9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06
+0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C
+5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060
+62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D
+6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E
+1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5
+648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1
+FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6
+754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A
+E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3
+C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055
+531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F
+AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB
+BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13A9
+C528A198B8EC8654AD69CCB5C209964A2B25D6DA9BA0FFB366D19D8C69701D7E
+8ECBEA88569601C80ACCC2D5487DDBDC27DC463A53A8E59F9EC17D0ECB7D2188
+B6CEC6BBCEE631DBB9959A9855B997481B5D88B8BA29995053CF42C5518A3E8C
+AD21553A0F6BC3483624B013D3537F7C85D7C558A9C772554CFC1C3FE7A70633
+318A9B36CD66A852C97D66F868404CF523DFD349415173DECE3244FB63960982
+1BD121F361A03B2A4D85B0A185FA04CDA4E763616A23B151E8D4F7D855C44821
+464268156055F9D5A2E5C1D7FC0D3F6AC5B356C8DFFE5D44D471C85030239E37
+A678AA0B9A0E3FF2A13531E702385903FAE6884F4308C43A24A010184ED5EE00
+D2A0DBC05FF886D1E8006E879386F5C2D6FDA1F5E92697AB96555A9BE7A8B7E5
+5E7B3AAE6BD5AC783A9F6D07900AF3A0D9B105742B570AAD09626B489E9A72AC
+E3E657C95BD54BFD7A3256E816CC6E918927C0C87D7D15AC4F1C8520C6D74262
+F2A4A6EE6999CBDD0013A68ADD14379CD52B0FE9445DE53E2C712E30D1B3629C
+B2BCD776E3D66A28E07559DC5E24998CD56A8BADA036685FBCD665C6CAE8CD12
+01A0F543FD9B42A8D53BC3972D2A2A52B08F7B619F156B51349300B0101FD048
+099DF8E4DE595E48252861996D61AEDC2CD422F930A8122E254785853B410BD3
+C4A204BFE283956455C903763298A225F848E8EF8646B9B94A8121B59EB5BF7E
+5CF1C6CDFE4C694558B289FFC958E1D077DED5AD4F4E3D70EE1CDB067C4D66D2
+92B1DEED1D01D27AFD8A600F088414D899FA732104CDFAD164DE6128C23983A5
+B5A067D9A005A5A9FBE73D93A6B569505AFD9F86253ADB37FA3BA20ECE3BDA42
+8BDB9E93586D4C686DAA6AD4A25A957B96E433393B2DFB40C45362941189028D
+84F7231AB0A771C92A2176123030B2834DB77313301589AAAF9E5C901FF3481F
+BFAC467D153A669474368D9814A4B2C3F1AE55395E32F026EDA822393AB76AC8
+93C3FEC444D884979ABE626D9B3B8256CA6B87EECF7B98941154422AE3366CD1
+6105E69C0D3665F7A393C0C84D36A37318EAF70042D327E7D6756E1C5F35BA25
+9AE3815211D78B1FD6AF63CA9A06E4BD6EB20BA56FB1DDCAA3C53BF7C182B741
+26ECEA5D812E9F2A8BCB737367D8E2170AD12741E5355A4AFF29745AE13CDC01
+3D738B15E7A4587A15AA367C3423AFF9AD93A863D72BD9F80C977023293D7A77
+168E8977CDA91902B86C72169517A055322EAB08C1C73EE63F92F0301C136C64
+A762E8DA284DB0BC3AF5010FE623B63C0BE3820C4948CEA9B49E6BC18A51A6B6
+D26B3B059C81E6C315727AB5C678F2B4A150C75BA472C5F29A744C457B1162C1
+80FC098B9648EB1C83FD02EB2F7CEE4043CD41D1D55424E93767B2B601F94872
+EA15694B1A9267724DA64C9D4F6682CB82E25DCEADE2A042E079D8D11FB10DC1
+68A7B5C968431C68D58E3C32620FF1CD06B2D4709F911C64AE938E3ED20EBC0B
+F317CC54ACC87A30F86DB296145BCD6719F4D0A8AEF6671A20FBE4BF8BB8BF01
+AD93F28484A79BC1B3CC41CA2939ECFB39C9B540B43A28BFD3B625C2C061B698
+9B645B2BAFCC16B5F31089BBFBE10420F2264318200255447B4A5FBD2DC38322
+24FF292769FE69E418854619A6F146E0F85CB4AD18D3185234A08D56B5EE6A49
+511D4725810BD741418E8219B1D43DD5A6AC9FCEA82E8C45C751790B4DDD8B14
+F9A7BBE4D9438994B719795E8C1BB916492B823F051FA56D61D49611BCD55DB1
+4EE2F2BC06FD029D68048FA8DB9414B6CB48D13F0DC480D6F805AA973CD34F13
+26C45D8C5B6C04F23D2E85264BD8F7473B7DBF9F73E94CF958D023E313806285
+ED8C7F456D5DA5659BA312E3C2A899BCCF75CBD945AC177D9C223BE296B726BD
+6C3BBDD9E032E9EF7F2748F1308343EFDFCD3484CAC59FE7782CE4216718A51C
+FA5334D97CC5DDC1DD2BF42D88F0CCB82C27716E1782B0178DF05329BF507BF9
+B367B3D0B5F225C2B3EE11FE6323D21C79E2A3D694C398354F39216DAD62F2D7
+CA4B798DF4812F5F58AF07F19392D1C6C61194F6E3163459260EE9841A5B1991
+91E6536D4F9F0A1DC3719FB52EB8AC377EF6CFDB54D106CB08332FC411E78DC8
+4CB5E68DA0AF2B551E829F8AF3230FA3512BA719375E16648CEA7B9EC7C6505F
+4AC0F46B4E731338EA855251827EAA41AB17316EF7DA418F14192D8ACA80286C
+639DB843731F02DCA072E22D26861DDF64BDCCA0DDD4C40F233ACF1AA3EE593F
+C09D29A15B25EDD35A75F94F7BE6626EB47B95DA24D9EE9233981DF0CB263DE4
+0B724F44E9A9ECEB28595B7B4405B6EC45BD3E55EAB33ABDD4E12C6DD843157B
+B4463AE6E74929B970959A2BFEEF3683B385576FBCE90A874135025DD1EE9AC3
+8B2CD71B126C6C7256DF0A57C5EB05D21C67883BADBA373C59F86370DEBB8502
+608132B336DF48D2A0C5489848C5FCEEA7A8D041D2A4051505336D12040B347C
+9B93C3B7F64F6CA4D10120972C49BC27472BBAA8D278D03086B78D2E219517EC
+9492E32A490A5550EF57382A1AD0D9EEDBF4FD287A49964119009A904C9FFCF2
+FDE79C8DC9B8C6C47150634EDECB814A1A569AF0D6DE0DBCB6DA9F3661D6455C
+4A94491668467234B2CF345A86ED00336483177C8D67EC8416D9689C94CA612B
+AFF2245373E6567D006ACC30F292DDC7ED39033FF8F9B1AA9CB55685F9A89D57
+05AA9C8918D10F925C9B1BF90A446D4B8E74F3915D6DFEBDE3089021EE953C01
+3CE7352572DA757AADCEC11962E287D2BFBA221B274EE3418D3C794200F54C5F
+58EB478A2EE068C72E7FE115E401DE94970BE15CC98F6C61F11839B1D42914BA
+100DA1E55D5087DF1A06BF8F9DBA76186DF305BBC67ABD0709023BEE9C40FC65
+DB61D8DBF5E8138AF1E8DFB8AD46427CA3DB47A876CE8B5D1691B9FBDE42DA65
+75C837968712FFF4D5E4145A10040E6104792C69BC4FDC51DF1A48E36565AA63
+3B2D778D784ECFDF1C24ED4D013052F2C3CC1D5834BB827CBF95A4D326F57F19
+D70098BE4BA80C620D6D4B9B8ED17F9DC612FF4127E5779E19CD1E1A5145A5B7
+2F88DB1F4A32601A70BB9F8234A5F27DD02FB973D551F1FEF582642EB7E3C899
+C06E05F9BEF1443C04B911D65A9EA890942790A3D97AE9780478F668B39CD709
+95A8AABF4923D001EC7D7E718453AF7E8CDD807B3CE00CC0E6EB1F6B3B7E13BE
+3F1C87FE1A0EE488C6F9DEE6D3B198A0EC1E285D1AC46687EDA7CE86FFFA3A4B
+84051F74A29AFCD1A7156FC3CC7B00096309145FA835649173CF9534CA68C0BF
+BA9FE59CC8922F0889A8E301AB1042F05394129F6CEEF20AA4B58B92EFDE084B
+11036D5E07BDD97A6B23DA487298A46C9788D3A30DDD8C86602C78C03D47E883
+911F442B032C208BBA748E1D70C055CC24594D07724A696441F68BC40F4775C1
+EDF4C298C1C7F8D3BF14B0CF09B397554ADC939B129DE95751AA26305917D8EF
+3B073343A1A402F9F25F7E804248841688ADDE37E62298B25EF5FE29543DBEC6
+97653D6902F29EE43B27997C4FE949FDA5EC88069DF8CB3142F89D89CAD4844B
+6844B24E22B6BDBBC2351E5D322D9E22D553021677DCA9B9CCB851106B13CAD3
+D4036FB896B2CA1C95C2795421E0ECD7491993DB964F9FA151F58E796F9FB985
+D770E367E3DD5CE003DF1E6B33854AD1FF2C33B1C5EC90FE2172C6FEAC6FCB05
+2129C58B233494F14B59215014E82281AFB3A29F4406CB16442ACAA2E95EE5EE
+8E700BCB9E7B30121FDE5756B5B3AC98C3504DDDAEDC1AA01124532392D2DC9A
+E4C4A8FBD12D1FE59A53B8A969FD8809EDE306A946812ED6C360D1891CB3FA16
+060B9FD4E76ADC5A9049CFE21C0798F28BAC57D1B8105AD95BB2008B4CA6FD3E
+53546BEBCEF14EECF19C2FA2F1445681B3B83A15AEE7ABEA5FC37D43B5EE0027
+4A4B9CBB1C13A001FB2DA3D239E3370F258FA4C0FD4D72A674278B11AADDBBF3
+0EA166C490F544F917A2DDC132B7727DAB1790E099EBE239DD356D276D8C0742
+41726105BFC8B669D54555F94074F2AAB10247629FF8A27E30B0353D04562D7F
+8BB23E97A6F7BFBA2F75FBE63D3F3288724A9EF2D3F14916F4462913FDCDED3F
+245EDC07EF1553396BBB577404EB6277A1F2676225A22959623AF06B8A780F93
+C378613DE55B0854AF0F61C1B2124A4FD10ED7620532E859D7BC1C1DFE043630
+A906921034D93488E9CBC5DD0BF15A921D0B55A87B774855173417FB329F2EF1
+E5ACCB2C15D3A19A4ABB63AF18BF6E1203E71ED980D4B91620DB4479E5E84E59
+1010C3356ACC86FAE8EAC77D66F7CABF47098552970D9110405DB17DF99EE31A
+99000D1873AAEAE99403D3E28A049EE58F37F2F39E46FAEDF47FC3A6C75E9748
+6B54AD8681D1FECE691B6CA63967BAC34D86C7D1D13E90126921140F97C45679
+5771F2299A72114481E44273A069BA7B348532C91F1B3121FBC903B190A89982
+A8EB144420DA17EB7A9B6E9E81F6B847D0D0342D8F81D01F7B7E050E5A1B6CE5
+D948FA9C2DCB38AAC0772E3520A8282B4537C877565C5D5030ACD675C8BE9E56
+9376AE2346C284E8F5652189E53BC412DA878C30F54714C2CBFA6EE3A060A8D1
+2159FAFB01633234399292EDF139A6701DC9FC51AD9C0F33D7F87E0FD4976461
+CFB5ECD53A1B5503DEE42D927D3DA58DE6A76E077454CE5F6A6FC82D2C59CB6A
+51CC55536D19E4912EF4BC0C44BC98DC7CBEBB8030B9575F38E69A17A3CCC6F8
+C37CC3D699E0BAAB179E014D48AA712A27996C27462E34851F9325D1AB98DD14
+C67C5D5DE0696523FFAE5BEF5671C850FB97708A6A32C747B9E89AB48C306E7D
+12C33B7889994F8A0ECB222165A2DBA497832252A94441ACCF4C8F8E14B7D885
+B391F8183222FBE18B68C5FA82048A015DA9B5049CD5E5A5ABA4ACCEC3BE6DC5
+4750D8E7D028D955DE0B19869E539029BF7E89E6759FFD1D02F7DCC440EC91AF
+66A572CCA63CDF885303329DC0E1B36847C89A2B27B45C5E1DF0DA787A2FA53C
+E2D74B341617CFAB4E2F75DEE97A6DE2E85842A41A931F05F9552998DCCC5AC7
+3FABD447B58186D7F391CD91B698687F338C43DA4894BEC48E6832345A1CB209
+EA4F5C0421D2544504BBF5B82336B6865D9015FEF30402A1A2D2FF5B2403FABF
+D063B81E55DE9F97183801FD2B624B68DFAE149DECBCA59606736FB287ABD6BE
+106A60DEA136CA64C80E67A8948E917F9F5E06A4F9D3A33FB044D79F8A010905
+E062516F27093BCE8DD31501EBE303AD1F353085F936D44B468AEDA22E06F3E4
+37970BD11D6D26EBA90AA52A3B3FEB176DD38222F1AFC3CD60FCC0045D64C089
+04985EE9AED27FE1B45B8C8A7E680A082F1A7700B1D02621FC94DE7EEE8EC3AA
+CD0570576A8209FE8210FF958A32B3D1DA924DE10DA230AF3E80C13F27E8DE00
+FFF0A008260A732F7D9E28B1A3901855A374A5F82A2DD013724E61025740C4AA
+E65ABF2526579409A6BB6A681F839E92B5C0778F0EF7DDF35B625BC69084EBCD
+AB0046E2B301CAC644911CA34D304780A2EEC6EADD73121AA39A6BE87F198CC9
+39108255433A32D5082AD89DB4500C681A46CCB2604DE369262794DA9ECC4A83
+AF764A5A91108A885C2F6D6DDEA0EEC37662393A67EAF22380A8CE746D595313
+DE52A032409038C8BD11CCD37BB760C8AD5AEA6FD7ED296CB3C094E22F562B09
+F2E0FC9EBDE6C62E69CFDA0A22D3EF43423C62FF9829441B41402FFD1374BA0A
+D8E6B22DB1AEEF54CF93C7620514F41C8F2AB2D3B72EFA99B47C901C48622194
+99842474F7A60F8E4A0455FFA600D9DD47A4F4D71791FECFC95C6B871947FC2D
+5C9340CE34B817F65412086BE12B7DFF89AEAC19221EF9BB03A79DB05E9C3063
+4E786D24B5016C362CDBBA3C7B7D0F632F2B222475EFC2213B7DF57120BA24C1
+3AE8925709EB5B2E92CC896A11E05F0E12EF9AAA10A7D1590F67AE33199B45C2
+FE997A65F254751FC1153719D17DF8EAB2020880A3B2C2339DA0F3B1C728E122
+FD4E7DAB00F95B7A5A5ADAB661B4314A63059EFE6FE9F7B93657E87405AE0DC3
+325D45326D2BBC1EB3CD2997DFC0EFD3E20AC009AFD42FE6E166E025766F21EC
+7665048336E9FF811C37537409DB98FCC015AE6DF01EE44661676D0EBDB73BAF
+A6D5D3A50623BEE6174C92FDB9F0F078D6D7CB139A0D7625BC3A3B4CE4BBB456
+2A669D2624D80BCA277AA11314BC6024BA53C19338EA5458123E6FDDFD4B45D3
+5AA9A49F20B56AEB925200AF1555CA76B206A61977499AD1C07BB4D24C9258E1
+652AFF715077FCCC03E5564010597B41CC754A4F8CC2F49695C383EF92C4A696
+E434235D3E7C1D84B790DC9F6B43A1777C8ED527A2D98F0FB702CEA5C02F8565
+349F6502EE454DE460071309194CF6EAF5F93AC514E293450A45DFD6925D7830
+C14CA31CA0C7E918777F841BDFFC3C7F0DC0C15C6620D4384731E6443D00A677
+4ACC33954D9A55E648D566404C88251CC885A85064CA299E12EA59CA7B59BC4B
+C4958E212F8001156332BAA49AD0B9088A8E995641B8E0E6F1A8247D7648BBA6
+CA1F2474E5615D3BB94EF67D6E3F0F3013F274A666198225FA09DD088C8BAF06
+5BA8043E1E5A430F7076F24E2B755F15AFD072613636B7231105CAEAF2DEE78A
+F7651938D12CE3377603EF3CE60FB97E9B4C0A2D92102DB554C77F8685A3CA5F
+BAA3A5EA2A2E0160240F93315E3D6E60BFA7A1D83DC1AE9D5E41C6428B9AAAED
+96079A0F8621D68B2F501D00B87D42703D877D25B6B488C7040DED9E28C4FCD1
+43A3C386C52E0C325EC61636C5A4A6E3520FD381476B365A0E972E58E3385CB1
+C756DBE8DAEAEFE8A3DA19F21D38E02A33D1E6DF8678EA0BD25508F6712CEF17
+2BDEB70CC4BAACBA0EC8E93001C9F2205AB41437DF79632C67E5F45FA7454E3C
+437BDF9FA5C523DF73BCA3A10770FD14585997DFBC51174560DF6C072EF47015
+14A6C5427173F1CD89BC9CB7C497907413DE4C346647680818C2F553439B3ADD
+D9C39DCEE46332A01FF7B6CB1190F435123B7141553F49FE10A53ED11AC12ED2
+F36DCF68B7FFC3ADAA399C1197099BB3BE66201C32BB829C49511356A97C6C99
+8D8DA019308B1816294F2A3224C08BE6F5559F48845E7C309E5C9A73E2C4C2A6
+821BFDF2DA7DF4316420415ADA5C34097B22A734A7DE4571B86B3109E4225025
+B958E724BDF1FCD9B6FEDAF850B3C989A13A7824A3BA4533CEBFC27C8913CCD1
+4A51371CB9E0837DA8C81F480550E1A0046DE33D6B69B678883D170149C70545
+4A6882061BF687D00736C322FC99922127C1F75D5565C8D94BFDA0F956A68423
+78F8A0E724DC198EF67C48C5D68CF8FB4511BB21D2C6C689E91EEF9DEDB15FCA
+6E07CDBD0520F01222E353834C7345849555A35E8885126CC0CD13D17A8529A0
+E13E66B66DA1F2448B05C47E1EC401C1FA836B4FFB252E497591EB281588AEF7
+7F09668E6D627766D120C64DE808A9CC7A8F6684E85A77030FC23F6765FB5DD7
+C86CFCC11803E954FB7BE7C9396AF0FB13BD15934159DD3F6002424E3F4622FE
+DD42BAAEEFF43E2F92434B136F7F3B7505A5BED33B73B8A742C844AC7EFAA3C5
+79FF21DC3FF0C6411A456501163CF4F5BB8AFDFB0820F9F53A4F37B8C4E386FB
+5D000EC484B50C244ED90F642C49059A3A965A88B525496DB7E7671B41D7BD62
+0C147E0B49E418F84058B3CA94B2EF718CD76EA0468D5C98B4E9C9394047390D
+7E6AD8F8F5211F31472B81C4C84B1DFA565CA4E70B1E48D5257A24340CFF6255
+4BCB0EB3B4131F0B18582B3F8B51244BCBB17389F9746183EB39D5AB99CFFB6D
+70CDF84EB127B509BDA70C0335A6AC60B286E8A758CA956395950F0CB55B854D
+80D70361047A0E3934BE3776255D50E3E85DD714CFE29C7FA472E44BCF0A75BA
+6F40B567314DDF6570CF202E509007B2D4176C6F2B1CB3462FCE346B1059B73D
+132DA259885ACC2F9948D9B8C77D494651609CD557A35B221BC22D76DEC6FB10
+B9BB140E0D08E6CA85DCBEECCFC6213EA309B02DD87608D3E9DDFACDDCB5C563
+C36D9AA81F2D17C20A5D830D37F304FEDE68F8807827E0D7BE98F8A8B3BB75F0
+2F0929E4F4306C907DE20B861C8D4B8F6AB785D8771343CD1CFBDF5CFCD3D3E9
+172BDB5009D671C9347462D1F8A5FE042EAE7E5415A0536110148247E800073E
+CD6D6DA88E1EA35A2E22E1449D434B91F59D17B635352D7D0908E366FD60C16B
+6C236158F772F2780B6FF8DD5BC883E67B07EB3A167F80111879D054968458CF
+C32DCBACC14101AB20A61DD6F059C5316AA65032DC2820CD743FBE201236BB39
+EA1F26FFF286E04ABE3DAFC87C003867AAF141C9FD9959F903A46055B73BEA50
+384EEF14029670A5DDA34664DE73D91EEBBA0739C39B0F86B9DF426CC0EA629A
+949534E818D790CA485F92A1AAB47A4ADA5C51861AC7664C377FE1E62FDBEA3B
+813155D19DEBD10DFAC75CFDD1926E893C47BFBFB48A32F85959B79D7CC48A39
+F1E77268E2E1A5DA6C0CE95A14F16E722BD3A8342FC66C6F7741A5424877321F
+7FE498CDEF036448B99902060271E11BA17F2FACC88DE3C3CDAF9FF5404F2113
+96E043E83D7DCACFD40EEBB35085765B1670451872E7FC194284DB35E2C5EB35
+2918DE265EBDE5899C26EB3687EBEC74764C893D93767BA3EE76EEAF63742775
+5094CF7350B6102C3F96F2F643B9780AC1BCA3B5CFA996F149B55082D8F31F38
+4F90F1B47DB49E8CE7E3586E8A82E9346C63C852F4A28D2066F1BDB7734906A5
+4F3150F9B5D0F210E98B0BB0D70D2BA1F7EDB377260DF0177D2EF0608EFB46D8
+42A0B1FE05B8111CD534E3828D623E5C2579C965BD488FD2302CD6F695FD2B15
+5D272DA3B1922A1B144361757EB1011AFFF49EADEF37D9B3720DF1AA88AD8668
+8333BDE54D98527577EC1CCDEBD9FAC3B1332BC95704F67373E6C3FC48F8E51A
+F17E801AF5F3061346C35B40ED7E5BE4DE34A935D9048FBB9604AF3E72BD5663
+E690A6C447E405D8EF1ACDF16F0497432A5F1DBF8C83B2E4115DE18712411930
+1ECE571DB47EA6AF4D4ED50927E6308846A8701D8889EA8E738AB437977CFF51
+2045BC0FE6FC033F58C7F5E9E8C66F6192B70DC375D1DD9E9AB17624620F927A
+B026862266BA675B32C6D8878DB9A5F2FCC84A10A9E83741B531A1E57EAAE7FF
+51330C77A14EDE1A17CCE0A39C48A7BB7D55F653BEA42258076B0EF81E9BFB85
+AF1F83659FAE1FC5014C4AB9334EA1BE4F6935F6F642FD72251E76B0995DE35D
+7AC4BB4E1DA10E0F24B6D6FDB97A9ABE0CED4A90953FC9689DB0E859752FB576
+1518DBB698E61A737FBFE443E9CCBDFF5A53C8EB474010D6B1146EDECDA71DB9
+BBCE0C20BA6B9D8D8F72084E71F316CD32DE115821CEB3BB4D54DFC796ED06BD
+42203E550B0C3D126621C13DCEBA97533044F49830B9B58EF83CA630403D3C30
+9A2909BF2B12A74D9FFDB7D6B35600C0E7571291DB9AC2523D4B862B8BEDAA55
+43B0A66881EC680C3184C10C0D4DBB90B53749AC41D4CF951208F5F2D763A0CF
+D641EEE72C35460991CF2CF81EF77C35C3679DE514BF26850F80A448063E84A1
+A0A3B43E1574FC22CEDBDF32E3452F36C74A7A140CA1F72A995AE58CD9693841
+FF3300134408D5D7ED154298C2FE8A8536D8E9044A436365B5F09392D264B83D
+87AC1EE6D9D2E4B68863F2E162D7F2F874368F704BF199C9037F5EAE2D2D3A98
+B1D307AC7C139CA5387E97F1537D3D87E598E6EA3127DBD1D2FB25AB574D256E
+230B96C79E4C533FC16B0648184969E1B81E0B5D270AD4077BF609C5451D2F70
+CB79CF3DEB975CB982E5A9D082B5CBD8F5FCBA410A4A1A36DEF63DFB16044D89
+BA0C58FF00F7ACAA23C940E9639529829EF9F1DCA59A96723A3AC57FB542A72F
+C81B4A274F95E006FA3B4114891D5AF736E039FAC645D4DAD7865C81D90F1BC9
+C5BF9A02FCA48B660A4480F7CCA68370F207792BD6645140EB7680D8DA1EE3FB
+6D4D72058AE7179878D88A44EB00EC544A2B742165F30BCCD561ECC77AD26E33
+A0946A74EEFCD64EDE1F40D5316414405A5DE34E6D258DD16242D94704CB8DCE
+85EE060E1A93F7453C1BAC0FD044DC2F550D3A272DDBA2F9BAD22BED0ED50198
+384D1861CABC4FA07A7AB43BF7AE6B81D96DA6D9E1AF2B9BF6AC8043CAEECAFC
+554B550EA807ECA77F2F3E288357F87990644DB4DB95942BDA07CAA50CDA1A88
+D84B30ECDEC12B14CDFB66D30D89096DAE0F11ADC73AD2E91F3E7BE0E1F555F7
+8110A518C7590538C967B81D6F975C9AD66FAFC3B5FDDA2E8CD7BE62E7D29341
+3D29D975A024F64853C239F3825F4FFA77FF70D70BE36CEF4F7CB8048D3CD03B
+B3094D54B6A9144592C5492C32753C1D1B776E8DF4A23E29416325AAF8A3C19F
+1E029C8ACA6E167963E624BC2288BD15566A93C5FB3176946739E7DB93C1642F
+8715220AA79A82EDBA192F6EC417D3B8117CEDAE5FBF190CBF7B51E1465F337B
+DB5B9FDE49E4E985C0E5DAB5C82A99CB6A20E818B4B3319FBF1E88495B666C24
+348C235E87378048A620948FCF113068B6E52CB35C5705AC01E336FC1673FB13
+042559EE81E3A66C754D6C5956120059D83023FA16A8BA28C931E230A529B4B6
+972579CE596E056CA90DC41C0FFF6D53B04F2669C3C1E5F7057761214C6FCD9B
+0AFECBA0D2AF4CE2BE874A9C2D51195075D535AB33E72B5C750332F0612FC2B4
+5B4CE1F29029A6682C88D4557623551E8D7943E23FC88AFF970DCF0C2CF4565A
+355067A3BE89008F6DEF9A6B9E0F8EAA3F3F8815AB27EE149A32D90BD5E3AA93
+5EEE528542D9711E752F143FC4C9040A2A5C4AF4C024CF3ACDCC534EC5D456BD
+458D9A47BDAD0F61B4921D3608C16D64CFFBB3360B35232DAC7E61166092B7C7
+AFDD82BEA475CAE542EB41CB2CC8F620F9F23FB67F3D6EBB0E1E66686B7AB06B
+F706E580C30F37E48CFA0577242D6EB7A6358E9A7DA86BF7236ADBBB156DD391
+82C227C197323364DCEA3C4C8C2B6044E20E99D8F9378CDFA40FCDFB3BE333F3
+35174DFCE381A649B1711831307C79C96A3FFC62F497DCF6235C9F2E208830E0
+79653DA4F44A2AFA06B7416032C3200AAD046719EEC246ACCBFB7D0C4B6DCB63
+FE351DD61CFE60B5D7B7DB8E7C3EAF0E07F9D853D1C270971492CBA4BC99D24E
+2B3DB839824D5BF4F6B82625FB175DAC5641864EDFF35CB91E0501100612DA59
+F16D5AFC18A02B00D431DFBCAB4B981C1DC017D7FC3A60E2BFB16ADC9256BA98
+3E54241311AFE0A60A9597AA29559D97A85853B7611FC97AD41D2D5D84BA7EEB
+7F5107A4339F245CF74F7DEF223A178C06EBBB793A0B71577B6EB4388ECAE3E8
+9B27AA54B84D6DB31DFA203CC007C9A1D49948F89F0B86BC5B337611D5B7FFF5
+17E605D0FE4D0D9BD1B2BA6D48876982692F245FDBBB535746A77F1AAA665CDC
+B8DDF341ACB0A6A1349C23FE9245B5A49F8438B722BD7A30A877449421C37667
+4EAEC2CAF049C53DCC68E1C92EFEA1E24E51BEF3803C1A47DA9A425D6EE8F6F8
+0DFDEDF589961349D721CCB4680EF221110104953B6598B8FF3EE2F52B1992BB
+EFDB13CA26443951CC667129E0943BBF527560C0F89FB4EEC7FEEFA841B22745
+DB01A838E46D6DDFB7E9986D4D8E87019A539FC3A6BBB0FBA0993591759F849A
+B48CDEC6FF2294E20413D8D615C816003D1AC56288B29DDBF09E391623D9C6B6
+8791EE2038817BDC9166F6A3445887E0028B1038CCF8B771D665DBF3B383D33D
+3F49A3703159E588B959FCA0BECA665509776B051145EB00C6C9963CDD6C196D
+E73BAE3228DFAFB8AB29C6D7136666A0A83A0B453A0E064DEF26A5EF3798DBD8
+59EF458BF89372D13BFB6FBDF957EF9252123BE5ED5391D20C82361B89B43F3E
+9E23EF956C6171AA14CBA1D27167F4136DE68EB8460F0A9D65045A0502291C59
+A991DFF3B334747F2B966F279C74F2C77CC6E91E1B0DD41DA1856FFA51158A71
+EBA79F3C022427860CE4FD1EC80F55D6F922321A2D11DAFFA119D1CEF2E4A78F
+D54F801C7514941674DFE550488F1BF6781E0BDE582A71D83C13BA8C317E2685
+771E7D5A46A262EEEA7277813EC856F116EF6E548AE24B9F92EA1F4FF330B946
+056FD5028004D771C0AD5DBB528B69C8ECFFF26FFE924FFE0D18BC0F48FF2BBB
+3C155A869038CCCDC8A77458758E175ACDE279919B8DAE69E9160FD2424F564B
+BC399EBD4C311A6E1D31A89D529B8B3C529B36E3265DF51B2D1BE1F45218BECA
+B4C8EFBAC1A7C04BFED2F11A8E8768D8BA77570C379550FD4535247C19CF82DD
+CB0B4746B2BA4248BA4E0C0AE004DAE0BDAF9D1FBF8224545CD4960F31C043A5
+8FCD323E8C744D9015CA1AB8B900C3B2BD25239E286AC3076F6BF54188B9C81C
+D4A10CF1730DA566AA5A20C23AFE65678A3A177D7756F87DEB3BC6BAF795A351
+8C413821F4030F6E2488EC0A122C054C52BB6C27B08CEE212C60918AFA2B69D1
+E5EFD146E8445E7EB0EB89E6B6463703DE0226B512D9F6C630AB770CA884FF0E
+1B6CB77D85C97D90743DCE97C374607B7521CE76C003C1BAE1087CDACBDD7A73
+014302BCC0C790EE695A39C2D3BED03D8E5FF496E51991008C0351EA09CAE607
+8386B90DE0D065C75A5C66005FA8E4A613D6DFC725598CA053B3ADFB095B511D
+F824BDA8C65D4867BC4F3A6484A71FDC9A1D9D206022DF728007CFE3731132F8
+9CC65D3FE8FE4BAFAD6D288477601F537E78C3605948D3D5E2E482D359C548D9
+CB63A8812A035E39EDB8B5206FD043CA7C5B20A9ABDC12A7E5C41929B79D161A
+B5F57D11FA32CDA1D38EF50E65B3214F6F4B338508F5C3DA215DCC95576B38F0
+7F967F94070C840E586BBFC21528BDF35A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT9
+%!PS-AdobeFont-1.0: CMTT9 003.002
+%%Title: CMTT9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup
+/UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT9 def
+/FontBBox {-6 -233 542 698 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT9.) readonly def
+/FullName (CMTT9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 46 /period put
+dup 47 /slash put
+dup 58 /colon put
+dup 97 /a put
+dup 99 /c put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 118 /v put
+dup 119 /w put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0
+42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259
+4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457
+689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521
+0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA
+610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8
+3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735
+C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933
+995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE
+EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723
+2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0
+4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC
+B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014
+D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE
+510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5
+BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF
+93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC
+F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385
+45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757
+4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47
+088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8
+9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A
+09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988
+E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C
+0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A
+FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C
+94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741
+03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF
+409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71
+45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95
+39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971
+58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85
+84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A
+0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F
+F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD
+B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD
+D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B
+3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B
+7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D
+8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737
+712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E
+C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3
+E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA
+A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC
+2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467
+757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C
+54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981
+DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9
+08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD
+6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2
+A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5
+336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D
+E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB
+3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A
+E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627
+1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903
+FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72
+A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6
+465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0
+3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32
+CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF
+573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA
+9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D
+15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D
+D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5
+15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1
+64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789
+D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C
+D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8
+576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540
+ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135
+EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC
+9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099
+3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A
+1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD
+FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598
+C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA
+4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0
+CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7
+3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D
+D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9
+BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6
+1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D
+4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442
+C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D
+80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C
+AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6
+59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647
+3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6
+14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59
+B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34
+F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8
+54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588
+34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191
+825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439
+BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54
+4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F
+66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E
+2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF
+F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A
+1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416
+37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6
+741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1
+39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC
+887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49
+B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD
+15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526
+5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1
+80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839
+A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404
+BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048
+2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B
+B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598
+F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B
+9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483
+CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91
+DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62
+6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B
+7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7
+D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B
+9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9
+EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12
+0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2
+1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10
+85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0
+EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F
+D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518
+E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0
+88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842
+E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8
+01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68
+54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A
+97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78
+B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2
+D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9
+18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE
+A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13
+1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62
+31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5
+408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF
+1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E
+29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33
+BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B
+AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8
+0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D
+99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE
+480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC
+D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481
+FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB
+587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51
+A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C
+C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C
+AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D
+AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4
+48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367
+385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56
+8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38
+4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C
+839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C
+320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63
+7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E
+DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D
+DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F
+461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A
+BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449
+1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A
+3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500
+0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77
+EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA
+AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8
+F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4
+097C4995B60BF4D8B3AFD0A002B3A6E4FA114131410D5658999B86DFDD3005F3
+AED1FA8F077AD1F27EA249221585703F20FB70E37A26C6C3F2E101693C94612B
+65BF89F37AA3C10A40EE8E49915F1A1B95D2193D8003DECEF9D76FDAA33B1AA9
+CEDCB21C2A3B05747FB3ABDBD904B66EEC60CED2867442F5FE445587EB8C6D14
+87A6B1B4871A8371A7ECA6A159EAB295B167CC35ADEB8512FD0C237421773BE8
+A081FB687F9C5D676F2944DE6E6B639C37E8E49BD4A6F0903E0C31EAFC4B58E6
+CD01B59C73A14DBFB287B7017F6AE0F6F4F85551429A85CD87315FB812FDA28C
+BAC26B5E7CCC3A650565F8239A2A5EFA3D9FF922465298B05A57E2F26C9730BE
+F421A0AE453EC19BB507F0979674BA75B9B20D4C0ED4CC348A59DEAA0FE68374
+F5A64B15334595D97D9B2559361341E6AFBEF03BEBA20B5E04E274301ED43549
+1366A802424556D638158B09A6B06724E0E67DF7FD61DDEC1020214029D42D84
+1A67E6F12EDE52536722514763C2074F60080A4C7FC4641A34EA4024B78A9494
+AADD41D7DC6E238AD0C4B521074FE208F5277DBB982060AE2D89D2681FCADC8E
+04D507AA3F99FCCD61B4875763CF82979E0413F88DF6F3ABC7CA6048F9166630
+699CC536BB14A988113B1B40DCABE442A115DEBA4D83EE648E7E25DF052E0A4A
+E27B57834B13D47CD9ECA2D522EF5054A24CC597B395DF735E5850BDA604606F
+FF7A16F0A33A1B1A8C65569BFA0213FD959CF02E2BA6BCB6D4ED19283A48CE2C
+C86360DF3B3C743492899F5D7D46FD7841BD1BC0F11B27D85356976CFE374863
+752742D7CB56DA6DDD4B216783B027CEDE18E649C0452424335850D6B5F27929
+783567FCCF58722A08A938ADA90C50E8365855E8E7F6D47A9BA543AE9F781B21
+D486C4E8913C8435972133F893712866F65A5F8F274FBEE4A9F53497C16DD3B0
+2BC8B60461D7FC9526CAE9AD5BA56FDA317F340FC17CAED342A562DE3A57B664
+9F18C0E59D96CF699AFC55E2A802D89A3CE5ECCC1F588725CD761B4B645B77FC
+9125C2CC19D6E4ACC8D507F3220D9D5845EEE18C292508847B5B7EF94C79DFEC
+2038FD5CFA88A2F0D3BBBFDAE2D8793070CACAADA181B1202288EAFDBA47A386
+037B0E7C7573FEB8C568F5B33A26E8CA7A69F89D2C77057D065CB219C926D451
+C001421CD883D1FB1F09BE6CC496C9BAFE896C9BBF507B13032EB0984198934C
+3065ABDF9E1229DB36922F5CD3850698955E30F6CE2ADF67FA1EB097CB3D1F9F
+2BA9321AB1998CBFC4E3F21309726F07D1A628C26256B99AF3F81FD0B0AD8A18
+C81E42AC60281516D8493A22010928D6FD01540EB560D3A5C1D8059FCA0E4BCA
+940BDA5795AE9DD28DBB1CDD9C1B1073D37DADCC555937705252464061EAD6F0
+B38805DB145C25B8A1F49642FD61DF5CD2C0448A450B6E8736CA03AC7742B3DE
+DA75A1B0B72145D469741108C9F909BCD85918B028516D457AC6768268D4AC9B
+918DAF5D278183620052A07AD74B5E4EF480988A3B7C7B60749CEFF369AD834D
+17CF7BE46C07A056D392B47C51E60819990F7866053D4669AF779B284EAE88AC
+ADDD53071E56AF67D5E8FE94D40DF80642CECA4574BFB784B4A71783764860B2
+3FE0B9715EE5E8EEACAD25D7467018EE9A24050154F8A884605F91D855C709A4
+6DD003F4F8A8338C831E6A63C9910057CF64AA41B657599CC542DD43FA067828
+B38FE844140161A5BA285A63475A5E7D4613342979AE294B22DE48C44F5D2522
+10A2401201E6CC1E37F6C2EBA64DF3609EA4A6AD9BD70A17974BD62A44B43E34
+161807AB996AB4F7269DF4EE32CC5A960ECF1D96E86C06B0FC6289E786386B04
+E792F6383791D95C619D748C8C23E5A620F4FD80B10418819B177AF63CFB8551
+4EF99B4983226660AF71545CC038BEB4E28C4E89EEC9D060FDA005024BA552C1
+7CE25388D4D90A30EE903FFC0BFEA882C7E36BE2F459C58FC61E6E1563119EB6
+02D95B79ABF0F11DFDE0AE74936FB0B13B183F38A6701CF607EB6C9CBD2DF181
+0977F83D304387E885BE958DCE76B9DA5622CE7947A6513DC4C1709316062542
+203DDFD4A6CC4F30D5D7BC8F5094E5DA6A536AF6B48CEDA846B9C9752169874F
+EC0D67A4E42700DB4EC2AC1DA24AF775264F410B66B73943FC3A2DDF6C3FD88F
+6DB3E8B84BE775FE986139881FBB725197362B0CFAFE7F225553333E6CCDBF48
+97155511FB0A6F22A4F2DA2BFBBF668E647236867D1E6679FDBBD7180362FFB0
+3A1E10DAB77D38ED6D3EDE9EDF028C0019740B1C5A208F7122CE215C1C44BA8F
+9E13AD91987DFD98AC9DA9D6EA226391FEE415D5691A31822195892760691ADD
+06E7A2797A827055C8EBEA9D4BBFF4D450BC713AD6B2755150690304EEDAC372
+9D7CAD88C7FDE00887A85299CD76743FCC2AE3E399EB00F3EEB281E87CC8D0F8
+F14D1F8D8D09E7675E275BCFF9234ED5FE5842A03305CC2FD421B8CCE84F57DE
+B5F09DD1523876124BAF09BF1A421C297C25028D181B87DA8C136176E4D6000F
+1C39BD9A89AA1E39878B55A2389C26E0396CFEC84CC8E9A697E2320D3C3929C3
+ABB055A68713308FF7CB41B3C57DD37CABB7E29D7FF5DD776253FBA5A81AD20E
+8FCD663217883F75266AD578B34F9E9E6E2E4B205258A71391BE51F7D8D105B6
+6B044B318CD713D120001CB51A57EB48D789F6F54CBBE0F23ADE7558E2CFE105
+7D8E0D380BCCABD895AE1B6E8555AC50A2776251D185022DE3F4BB08DD23289E
+8A3151B39524D9DA4AC4396579E8B23D0390D488D8DAD4731B340FA4B2D0F95F
+7F5D8BA3FA244CCC37BE5CDA727337C19B02CD59C4D289B7AEC80F3A9A7D359B
+E9EA0DF3260A7E50585CD92191FDB83DAA5E5F44DF9643D738F38582E1D1D4AC
+76CB9A05BD184EE1B0B3EA680FF1128A511CFA75A3278600F0044DE75DFA3A00
+2A1AFAF42E8447505CFC74795F1E4AC721FF15FF41C68A1B93FA5D0614953268
+40671FF68C47583065753B19D131827E50451BCE71B7EE2677B25643249DADBB
+1C3457DE084B18539B3ACEDABAA9F0410CDB6089FB77D32927AA8707295CFD52
+9AA5E2AE7F355D00C6CA35317028EBB80856A518DB81029FB6F5590FD3BD3481
+F404DDECF6B64AB940E3609FBB0245A4F615BCBE016B19F052D2F627243AE772
+6CD93D7D485FF96DC10F741021A06EB06F283820B5C0E62DE4671F72985444AE
+2C17AC2232E6E49B9BA13E2DFAB0EB4B2B24EFF70A777E892F5B7B7C44153BA6
+C7AA19FC1315A857F1E56493990DDDC452691ACC8A681EB658AC0B7C823B7D3A
+8CB995B30CA3C44C352D0DC4E253B3B694EBB74568E08479B87FDFC05F239297
+733C494FF8C3BB84558666316BB7B1969B523A58AB2FF029F806A05B72F6CE07
+083F9555D982058E10DA3DED21DA3E431CD6D6E38D9CD69BDDB4707FD3164F6F
+7BA22497CDF56CD36422AF0B666D52B2D8217CC9AD8B7DFE5157758CE9F9DD3E
+4B697B46CA1528B22CC2C1FF8DD176A9E09BAFFE5ADA3E05F2B4E059F7E3349F
+5668ACE29E19EC8AACFA92401EADDA412E8CBAD5A8EC5093555DFC25F4CEA494
+9D8C2535CF986F5C61EB1EA5C2D66ACBE5096E4F245AFA721EA81DD82087AACC
+B3424153B77FF42C3E6CB150B29025F505DD2F8EA6B609BA9EB833D4E0976ADA
+0216AB5F84C374767739EEBF95099FF8786390AAD7475202B3167B0A6087FFF1
+23CA1BF971119F80352C9B4C0F88376E9EAE7C5A27734F23DDC81D72FF181469
+79B707D5E74021A6D5A6EC8E327CEA46B6C94A7F81F974B342668AD0ECC85D53
+0ECE11A504FF73991F40FB42B3E8F002A1C9CA4C9B366B617AC0A790EB4937EA
+D55524AC3ACB6FF019FFD5424E4593C3723A1B51C0C41935F5E4154A62ACEC54
+C5330D0B9235F6B63A814F6BE8AD1F4CC272A479C23CE2E55D641CC7E8E5BD04
+B28C3FAEE26F4BBCB04BBBAB9E414E68666F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR6
+%!PS-AdobeFont-1.0: CMR6 003.002
+%%Title: CMR6
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR6.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup
+/UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR6 def
+/FontBBox {-20 -250 1193 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR6.) readonly def
+/FullName (CMR6) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 49 /one put
+dup 50 /two put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656
+1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D
+2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9
+EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD
+EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703
+CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8
+9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1
+1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D
+2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A
+E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A
+32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584
+5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A
+3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF
+6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68
+2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268
+464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB
+EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB
+87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32
+F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA
+4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C
+D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E
+7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65
+39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03
+77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96
+8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415
+A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4
+4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109
+3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89
+A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098
+AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F
+269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E
+2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6
+C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8
+AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC
+17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E
+2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E
+117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80
+DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B
+9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC
+CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7
+2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC
+26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F
+4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D
+C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D
+60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2
+01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B
+E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E
+235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0
+9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB
+DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D
+28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E
+E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4
+85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1
+BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A
+237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28
+7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E
+9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845
+B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442
+FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600
+7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F
+FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120
+10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C
+6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77
+B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4
+9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC
+E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3
+8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73
+5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA
+B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9
+3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF
+6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD
+5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E
+A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A
+3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8
+97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9
+9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955
+EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51
+8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369
+1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6
+4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76
+68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB
+8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A
+33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3
+548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E
+A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3
+133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5
+B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076
+F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2
+3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5
+C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE
+0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5
+45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8
+0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6
+EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64
+FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5
+8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415
+02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B
+7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8
+AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA
+57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706
+5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28
+AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21
+CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134
+BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB
+5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85
+69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85
+34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971
+24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196
+4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E
+7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A
+B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB
+080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD
+71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154
+3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A
+A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A
+A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA
+281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52
+A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D
+451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481
+48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83
+F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949
+B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391
+126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01
+1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C
+770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4
+283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45
+06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532
+8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524
+8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3
+984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A
+5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190
+1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E
+026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6
+DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E
+C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB
+1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D
+2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251
+427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6
+26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72
+6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445
+F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD
+054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A
+60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341
+F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74
+9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5
+F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD
+436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35
+323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B
+2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C
+6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91
+069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02
+CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D
+2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12
+A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00
+1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6
+9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392
+360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3
+911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71
+8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD
+FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB
+0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636
+44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5
+0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A
+5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097
+41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE
+4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE
+3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506
+85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884
+9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02
+8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7
+422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1
+AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709
+6E70C6C7CBC54F807956DE75D7C0E689B2684E95F1E619B02E026111A02A8BE2
+7C22515F25EEDEB353948E35E582F8DCA2C44BED3F3B18642ECDFE919299665A
+FDFEA129D42686CA54D497D94C696B040884D24220D76E44941BF1A18B33CA5D
+EA6D560CBE38CE01088DC057E29FEF0AEA4B4168A952D0B5A7FF2C1B3B478090
+24C36CD8DC2487F21901056FC8BEBCA67AA96790F83C446733340E98F9E80E02
+F055F4B45F2470F4C21972CADA01A47250C143BFEFAFABF8D46632A48F594986
+C30DCAB51168B2D9682C427F67D420B63A7D252B5DFB45D0627C6CCABD8D5F09
+040C3EC3C3752A781CB248F39924F3B445B3C12DF049C08849B6EEC7FDFD368A
+EE32F0FE6EA767B16D88697F182E52F05CB1CA210CB696069E73E6135847EA89
+8C07EF5AF449BF57CF1FE36AF62EF5ABA4A973266955A1C43A8619EC79C02391
+776AC8EE11E2EEC3443FCAF16A8FE034D25B8DE1155C6E93634D0D83D7EE1374
+9F95AD2C92C390BE93CF536DA43D742FE6777D1D60D0677C1DA704ADD82B4F76
+2EF0039A3813773C4B6848ABB9E96055F432C32AFEBAF21EF58E1DD3DD6378A2
+08D816F3BE7E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.0: CMSY10 003.002
+%%Title: CMSY10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup
+/UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSY10 def
+/FontBBox {-29 -960 1116 775 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY10.) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 15 /bullet put
+dup 120 /section put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0
+7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81
+DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91
+511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6
+1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD
+028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86
+1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4
+3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021
+91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2
+E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A
+11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97
+C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857
+D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20
+B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3
+93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F
+10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D
+7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF
+B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B
+491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB
+F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6
+019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6
+915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36
+356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0
+5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D
+9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64
+3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1
+FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252
+720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5
+D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726
+BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5
+7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377
+DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56
+AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7
+A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E
+0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743
+AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18
+CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023
+0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD
+5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B
+5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F
+E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB
+54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809
+E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F
+A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906
+4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378
+4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4
+038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4
+B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308
+5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC
+B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837
+A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD
+2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D
+CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246
+455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE
+FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03
+16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C
+16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F
+483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352
+67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2
+3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472
+1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770
+93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA
+051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B
+8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4
+8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436
+6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0
+06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7
+84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0
+D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6
+DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB
+0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD
+8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC
+C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34
+754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406
+1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05
+CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523
+1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F
+153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02
+905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718
+617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2
+8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A
+98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278
+53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B
+888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D
+052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A
+CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501
+A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F
+07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56
+B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672
+10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2
+CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D
+3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12
+D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F
+849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16
+648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE
+84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA
+2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD
+2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204
+9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0
+B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B
+D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7
+135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE
+EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939
+C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782
+7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0
+4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2
+9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171
+050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486
+3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271
+C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8
+843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342
+CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B
+B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50
+3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175
+19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946
+FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0
+17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6
+8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B
+CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003
+F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194
+1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E
+4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194
+2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929
+9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593
+E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB
+8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB
+BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027
+04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5
+C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404
+ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C
+4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909
+84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6
+C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6
+09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777
+D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503
+56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF
+035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB
+FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333
+CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663
+B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A
+F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD
+CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B
+0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C
+B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9
+33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6
+4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D
+F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E
+2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A
+CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5
+88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37
+17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0
+55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A
+A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50
+2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3
+406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8
+AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B
+60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388
+C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6
+5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50
+822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E
+94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02
+D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA
+343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE
+894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5
+DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327
+DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F
+8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324
+A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA
+DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270
+E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947
+DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC
+4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653
+5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1
+02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8
+88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B15A0
+657F5ED27D204449A841ED19E01432CFFE928E921321113780D036D34F2797DE
+D4459CFD15BB117B5C9745EF3CD2B296D91FAD48C80B136D94476967E255F808
+AD2B5D522ADEC64176833756510391815A1D4A8DA1D0AEE7CAD36A1D161889F2
+3347D5B6BC503300FDDD48F594F391D5FB42C42113C538E707C16EE24A3F375E
+7C506E8F49CE50FF9DEF3B4A4C1BEB3848EAA3477349833BA22D2A9012287D8B
+A8C4CB4307A1188ACC0E6E9338E1559BE5FAFF381BD82A6C71C267409468B3C0
+2C1A29F4281D565836EAE57F680490FEA4A952FF64C8CD11C377C294DCD1EC25
+CEFB2B6DCE959D0208F85B6E32E9B44FD455F9B134A5306D95EA29F37BB8B86D
+9E592159338E1293F449380E13C21AE42E6861DBBF4AE99A7469F871A3940835
+FFBE7F316FA9BB834EAB18625F0960352C75105A92F175850289B1AE177E0C19
+69E527D3838D245FA634F5428046581A5672558C2AE610E9506694EA56E78393
+DEA0173975DF161F6D0BAC40030CB033BF83B3E5BC60D6F8D2701298CC9F01AE
+2D1D54FA71CE08A21E95CD921AB30FC4F115AACF1C16F289E3E5BDEC74A706F6
+F7AAB1BF83C060BEBC4E4467010F4EE96849518A8E331ABD98B13B90C021E431
+A154C006AFB4330E89C8B93B4412A1098CE9F6E3163DCC3793C40D9C3CEC9EC9
+C946D0580A1CB7FDBE6983A303F744018913DDDB0B8B735A147ABE242B084DC6
+090BAC1FD413E5BB13530D38DD71822E24E62A057E07DA4AAFD538CDAEE84F4B
+875DD67C2BF8C231DF400F35D67AEE54B4BE3D9155D7A01F9A3EF3BE2D23DFFD
+A5C94E4B92A8CE5DEE847BABA3937D8C06F99372346015634EAA8459180F9F56
+98B22F2481678453FD2F184948E009B85C132A6EF3ADFD2BDF6E0FF6C72BA58A
+F7F972F0DBCE967F5691F4E4339B
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR8
+%!PS-AdobeFont-1.0: CMR8 003.002
+%%Title: CMR8
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR8.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup
+/UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR8 def
+/FontBBox {-36 -250 1070 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR8.) readonly def
+/FullName (CMR8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 49 /one put
+dup 50 /two put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B
+8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF
+27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF
+18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB
+7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A
+DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242
+6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8
+B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517
+2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374
+3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850
+9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45
+7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D
+25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502
+CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD
+A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2
+DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE
+EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB
+16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413
+07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E
+B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B
+B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C
+F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752
+762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978
+D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826
+CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C
+74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541
+1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9
+E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44
+3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE
+37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89
+7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762
+C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36
+A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D
+7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447
+CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD
+3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC
+FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61
+59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89
+6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069
+79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070
+F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B
+49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38
+2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B
+29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F
+2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87
+5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237
+EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5
+5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E
+293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF
+F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806
+568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405
+64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C
+DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109
+A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075
+267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D
+136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0
+A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7
+80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7
+D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB
+46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A
+E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9
+66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8
+2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71
+CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF
+2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0
+DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C
+DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B
+C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5
+CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B
+0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F
+CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E
+F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47
+CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479
+7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF
+6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893
+6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C
+72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256
+13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE
+6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7
+1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197
+86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72
+D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B
+70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10
+0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20
+FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180
+52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5
+7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B
+F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA
+09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7
+401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335
+74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127
+3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6
+ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0
+93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197
+301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847
+F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61
+1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E
+36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291
+34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C
+CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011
+ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B
+9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634
+E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A
+893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8
+E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE
+0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2
+B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB
+A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5
+B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F
+3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7
+AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5
+98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF
+4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B
+F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1
+AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E
+015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A
+167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F
+9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522
+CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831
+130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202
+2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D
+A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154
+C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0
+ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A
+CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3
+3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612
+E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20
+3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7
+3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D
+947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972
+26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479
+0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697
+984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E
+FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247
+44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49
+603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B
+6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C
+D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE
+276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF
+809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22
+08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7
+3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF
+76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5
+A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602
+3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41
+966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18
+CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531
+2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF
+94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641
+DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35
+9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1
+FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E
+1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77
+24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C
+06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC
+6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530
+F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6
+26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6
+D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2
+49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17
+064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A
+E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A
+D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692
+8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445
+2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359
+52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1
+17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF
+145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F
+2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717
+5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4
+B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26
+9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9
+0826E1DEB8CF0BE87C59313978F28295C0E3A01D2B5682DA86A38F390982A8FE
+C3E81B8D3532C92C4A4A4BCB421D248F634447613101BA5B301431F192BC6962
+E6F9E2542F1B0D3AE7560888A9344A7EB7ACED0D46351ABA0DC93EEB47CDF0AF
+28B602579EE7E3CEFE0C6F5332EB843348D80B020E7A127C634BF2A3A55B6C94
+1896769C33D5BEFA8F144D6DD702380447904C92197B8C7CB55679A6AB8FB7D6
+2E3087D2CC3CB9BC10C0CC485AE395D036339862CF98337FEEE3394157B9862A
+120162EE40ADD32C55B39E4BED180B4E4F51C28377589B982F13DC6D44E758B3
+022813BABDF45231A712C97D06658FC2AAB9F59BEEF9FDBE186B7CF64ABDB9E9
+CAAB0BC223880A2DD496BC166B6C88552D2B1B23965FAB5BC51D2EE90B8E1322
+5688DEB8C76E0E9C2FC7EF7AEB6E7DAE821F73A43A5CA6814FC018337C234636
+4D61A7EE4CAD90722EF68E825686812D5A20AC3874A33E3202C32E60B44FFAFC
+8D517C3A5B86ED309A0DFBC06EFA9BA510DD6C8E6292544F0EB765371C64CAC1
+F04F96546838C6E7423116B4FB72F7C81C47C55138A3819E121884A0A5E87BE8
+DE4D02
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMBX10
+%!PS-AdobeFont-1.0: CMBX10 003.002
+%%Title: CMBX10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup
+/UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX10 def
+/FontBBox {-56 -250 1164 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX10.) readonly def
+/FullName (CMBX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 121 /y put
+dup 122 /z put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB
+B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A
+6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6
+39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8
+407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4
+F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF
+285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33
+DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185
+53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108
+74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D
+ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2
+2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89
+8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D
+718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61
+C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B
+03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2
+767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09
+FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377
+547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A
+3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62
+57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10
+9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84
+1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4
+822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB
+1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B
+28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A
+B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893
+9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B
+80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7
+D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356
+582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89
+4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB
+323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D
+CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC
+2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717
+0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C
+E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1
+9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F
+9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237
+E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814
+9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF
+A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45
+8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96
+BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921
+5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928
+6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711
+86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990
+0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713
+6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05
+64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377
+879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B
+63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE
+2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667
+9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317
+47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F
+F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387
+9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F
+C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB
+6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2
+BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238
+4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751
+125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E
+37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6
+EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E
+7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD
+A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986
+410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E
+8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0
+064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9
+28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B
+3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759
+8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5
+E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08
+EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4
+A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0
+0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9
+24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373
+73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7
+213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501
+3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6
+B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82
+FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E
+E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9
+42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE
+4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B
+8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10
+CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D
+13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D
+52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493
+FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3
+760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5
+5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D
+C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58
+0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6
+E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974
+A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED
+16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C
+25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8
+B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B
+45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E
+C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE
+4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06
+05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A
+D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00
+63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B
+35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC
+DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75
+BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40
+70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F
+BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71
+169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A
+BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3
+EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441
+FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC
+6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9
+05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C
+EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30
+69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D
+813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70
+EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552
+19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340
+1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024
+D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D
+8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6
+17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24
+96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8
+14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668
+4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635
+5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE
+027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215
+A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96
+BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551
+66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD
+92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F
+93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613
+83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963
+093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6
+30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C
+1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9
+DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E
+D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE
+6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F
+9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183
+BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8
+5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB
+6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133
+BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548
+DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A
+5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2
+913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E
+243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609
+51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A
+A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4
+C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239
+E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945
+942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589
+3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348
+A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D
+BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060
+6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB
+926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9
+E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D
+08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26
+8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E
+42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88
+C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0
+BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3
+6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D
+DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1
+E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9
+CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B
+22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665
+C2A63A837E4CAB38F8DF37DBAB5DC80C0C3FA72C8A70DC76B5B36B2EEADDCE74
+23CF794B66E4DD3B35BF99893789063BF7B01D5F186B2FDE518B2CF2EDE51F81
+38244BC64548AC3433A80B86D6A0CA26D77F403C06D65B7394BF1FC7D06D37A5
+E70ACD844E3367DE4DB71312CBB85ADD21D5A1F99BB8427F252D90ABB66D7154
+EA5AF4A165DF6415A0880AE784071E6B3E2101F0B663DE14DB1ABF8B7CE0E6D9
+D24F9CDD9F80028D37C9CB4067A28D41E879AEFECDA71F649EB3C250BFF809D8
+1E427E3BF24E85C75F080D93E0314883988B3A4A2B72A1B4A3D2189AB6ECFFBB
+C58151AF05AE335200711ED945E18B4BBCE24A8A162BD9BB26137253BA8B5819
+41E759A7CA7CBA129BAAD438E87189F2F6AE7C86F4EA099DEB23705A500332A7
+4F141D8778EAF3910486B2EA25AAD16B60DD804D0E5BAB0FEBB77BC95EDED08D
+B8941E040D99E8F44E70FF842306ACCF65C0AC9673859DB9C3A724238CB8CE62
+255BAF0145692EE3B52643A0DE3E667AD03EEF6C753F57E34AECAB0CFEC7B07A
+150D7151E57BB47A4AB8B9C17DCEF9C78F5AE432612D291A0679A422A9DFC0DC
+E7108A7B305B6D177A3E42525D2A3297BEBC9AEAF42BD39A752407F12E54DE8D
+6E043CD726074410F7B2FF557552B5507E6530F1AE598339D02ADED4DAECA436
+BD4D0F30DB14546CECB44BF33E0A52855673E33C43AEAE3BFFBF278BD50C2852
+5036F1696259F10FEAFA56A3B7A1A0C0985244A42B8C4DA6E52753EE917C1B89
+170B7F90AE6F1298DD7C6EFBE6B769B1FCB0D5946A460833D4B59F8C8A49FB43
+5D400A4C278E7F6B8C3381BF49032CDA8DD2A2C66E1D36D6891DB8457F00B3B4
+BBA6EB85CBCA21ECE806B2B0538F96B28F83A89FDD526D9F2407B7A0D1C090DC
+DF808694BFD18907C98F97F3F3CB27BE51DB34DB9B17671D5328D6D205F19A65
+B7E16D569DA22A5A9F0AF66BCF145202A872186AB23654B84393454FE4DB6B74
+D5BF9BA5B1DD1C1218921FD978D545C3F79CAEB47E4C81BA6C9E6F517D1EAD02
+3C3E03B163D4C2C29BB8A1CDA5E14FEDA66F6004FBB666710C206B78D6B9EBE1
+E55EA6ED39B1D73F213DDF7C16C479DF658AC6B29DFE3E22E33A74F1B38562E9
+68F1625DF4C9AD9AA2FD50D40902264E6EB14259E3F1124D5A914D19647E93E5
+B3AFBDD4AE2BAB4381CC9C4498EAD3B5AD20BF141E4C2CB590D3F42B57A69CB3
+BCE709A3FA802F854089E406B507D64CFF454C5CC59F58953261D63A41A2D6CE
+300AAF6E6B603C0CD57FDB790547FF23C860C2CFDCABB5E6428AD036B3CC5CAD
+227A5EEAD3076353157A3B3947CF3FCB3A7032ECDA85428419DC74E5342FB54C
+048336BD21D97F81F30696D7EA238A39BCAB3E4F74E31F649B3D50182C8823FC
+BE7C4750D7693E51E88F1AE53B00A20CE3CE312FFAE07D32B62AEA32B58B8D12
+7C00F3B953C039B0DF61363543F04DE5B6F691226BE7751A293E66D54C19045B
+4EA80D0FCDEC99692BA6EBCCFBC26B35BA3CD8F78C0A186733A85239924BE35E
+316BE3C6928DA02DE9650F622F6D5E20C917563FD11EFC363DB28AE0E0BBC569
+73B67E1EDE40002A250FE51CF2FB72435A98FC6E5B94906E83B6E9FDA505C745
+4B82F991CDAE01AA690CC33064E82B283AA4E608185137E670FA74DB3FAC4FAD
+17B79A752B6C4487EB05297392A1360A1C7447849B0C4B472AF45E4A389F224A
+0FABD49D502CA92F7E446330605DDEEE9A11BDF8C04C66986C2EE9A510A4C433
+944734B7ACFF3C578C63E87BA86D8D8B2C3C66D8D31455A1DB4BD808302086D6
+1062165D617923B5F4DD67DD7D05E876DCA0C5489848C5FCEEEE9300AE5ACCE3
+C887215C65998830B28980AA04D5FE473798CCF49D9B881181642CB1F648708F
+48E281FFD462F6499411D1B997E4EB52EC153DCD5C880D0846736F0649DCA8FC
+CCB124E1FADDFAF3D595E7938A70378C087FAE52480AD00934680A5C213BBA3B
+87AE81EC898FD5AA059294EEB69E3F9B0858B7C69E70116387CAFD2C8DCC2A7A
+A4C235EDB1DCC2D867FBCAC35E1346BBE8940C2F9B6A01E83915D114F69C0FAD
+EF6B1D2641109E020B398430A4D99EA8B47F00CD956978F1B38562E968F16256
+B4C3DC8DEAD3F745BB8F688339163D20025C5AF724C30B17AB03262A01887722
+1C641D45DA8F0F3F69D5FCA194A07E92F455BAA407676E20253BBF9244200C5C
+77B675F10EF342153F08E075C6005B59B995C31D2EBF8C30418D0428DB6B5F36
+DC9B0689C376C949B1C5B1B6CDE7CEF52F5DE8340A19A1BBE5F56FC10A920E67
+E3B69CFF0F6CA6AA405833298F0E93E1534621CAAD682B251DF566D6F24F58C2
+5A96919B0623C444EA6AFAB4FB1FC05A04943E0F3A9AAF7545FA0FAE88FC9E4E
+97EA29F5AE662D19514D98A464AD9819CA7072FC73478017173BB66B5411937E
+18DEAFD38C531C59147ACF558D80431E5184AAD4E80B65440CE4C15BB47E0D6E
+591ABD90B651C7DD63C786D8A8A719646479432BF3213DCFDAD036FA15EAEA60
+A4106D826C9576EF9D067115741913CD743FCE0E7ECACA91AD16B95366E26B70
+59BBB61BC9469BF5CB4347685181CDCAF3CD7B8A36F8E120CCFF712E6CAF2643
+C9DA349D05EF2DE5A51A814A040839172D0CB3AE68E4BC3EF4F26630E0481866
+D1F3BF49E98F717567CDE3B1E70ADAC9F5AE4C1E037041529F9D80FF5AE7BA60
+B9974A0A2CF42A16EF883A16D58665CA2AC80DBBC93BE1409E1D619082247D5E
+B409ECF0E391F7E13FF8928C4AA20FE1648B68AD4F623373D7FC05CE89BDB7C9
+1F2459A4155637A9CDA2CC2784599D929D79BE24A6A444D0F701668A15B28DCF
+7A59FB8A2764B570AEDE5B94C59304876FAEF63632D533D2752C9A5F0C21F1EE
+91AA39BF627127F624C5A432442B0E22B6B51822E9C6092E9274326019595A46
+DA8FDDB208E93DD044ED2DD6F49996B3020C35D4B7C4EE90BF3C9361C2B4BAAC
+060048FD39B4D1E26CC3DCBCC1BC5D5181DF696B026998F900976190A0D6E5D0
+4268DC55111B25F62DC4A7E06A2D1A985F7377BEAA49275B5E62BC871BCFAE9A
+B64178289510D008B8DF64C3DA9E1191B06F159BBBE9A50DD42F3B0B29ABD81E
+289B5840D60A08D3586A2C716E6FB0C49614EDC8F966C5A5312C2FC5CAD58A08
+6828FF39B59D88927C7D660E78AE5516EA613544AC6897E34984A612A5D63166
+ADDB5CB4E32A9A498A5C88DA8147804BDE52DDF44159D139DDC4382698198BCC
+2EC680C49B5AFA3A1221A11E003A12AD74A67914E33E8529002B83C4CE55A7BE
+7755449272387869490FF5994EBCD9C754769FDEB9633D330ECB99E44491ABE4
+B8129C3BC44797D052CDABD9D54EA413DE4A24E668BA626B87CF0AF02110BBDD
+2D94011C6456C7B6B3E8389A6E3EB4CEED02EBA65E3D0C361AEEBE8A4703D4D8
+4D1B7B4499E585B500D54F9D08BACAE365F6E262500B0209CCA5CAD7328D8654
+B76786D56BC23A51C484380208166601DAE25016B9256825407711823E9C7374
+1D76FF615356F5D141376D0446860141BD88B45473C03AE056557BB62AC3885A
+FE63DD1BC2135A426FE53E7CC40E6DDBC51086EC4D7E02795AFFDC52AA59B994
+26E5EE16B5B00E8C40D951CB8F683E9F7375F08D75DD6621AC17302A7BC7194A
+B6C631FE1537E43F22804BF0BCC35BDCD7CEC3D4955769205CCD5F6016F63EEE
+86F902D22174D2D4D9CDCED3562417CA384D95810DA0A805C3D7EC826CC0D616
+F6D9A0E37705C506C8DE89D0F22DFF102419B95B629C1C199691D0FDB50517AF
+6EF45A0D8269E97BAC3B8BB13E56252CCA5DA18A0F9447DEAC39141E4A8C8584
+A38E57490263A53996AFE9580C5338EC127B9D910ED59D59A31D6AA17324BB0D
+AA770498537CEBB4C4E4E52E9108F01F591763F16FE1D894B8A6B47C1782CEFF
+81A78A8A42BD1C36397A2A2401907214AF894B558561839D83EBB4BE82125CED
+177A01DF26D99C3D0A4EDD0044237CCAC9E3E4B6F40EC0F1828BEB842DA02593
+0DEAA21EFC8DD35816E5D5B7E1788F2D2F107A23E5CB996F3669A4708189A7BD
+EAB2531C8E1177814D8AD968897C6F33ADF5A3BC9A39D887657C98548A8EC0CC
+147E2216C91E057C1BD8347415B29151AE70B853616775F72B8548B331CCC7C2
+3DD43AB356AFFCA423AAEE6676349998820CC974BFB04B3BBDF8F405B8D4F0B9
+D66E740029E25A72C258A50E86F91570ECA749B192D3753EAE27C97D88D0F7C6
+14FE1C128B076B91CE200E5A52875399DCC94177DE3E11E0CB72B595DDE2C439
+CAD5B2E83C049D67C99B5CE8E651EA3750B7A3844259FAD79310BB46FACA943A
+DB0062E6B67284AECCAF2A15D4C8FB2DBF46C419A83D28F568761B4B2EC5A433
+F02A5017986E0F5674AA56BA1DAEB1AD85FB21DF79AB7A12F44E2778B8424376
+D5FBBF340741046021D1C46B0B8DFA888A1CC65731ECC8F6D59DB6EC98CAAFB7
+993BA71BB1EFE4371CC60C233873DC932295E97BBBD932AE53BD12AAE64F0E88
+052AA689BFA0CE7121476FDE64FE9EA2C51D49549DF38ED4971B328EACE3156B
+814407476A4E1617F17C167B505370A2E632D36C86B9EEA672A7FF7B0F9CE40F
+ACE634BB6EF381332569FB5784EC039D9B8E9AF1095D0393D78FD99C5784B2B7
+1014717E22D7ADBB0B2302248C2469CDF613E8FC4E36BD2FBA792BBC4AF1A0B7
+E7A25F06EE17DFDD400629A2BD39D8695ADEC8A80CCF77239E44E36D5F9DF53C
+4F4D59819265C5CEB03287E521DA534CD5F1306B44AF2C77D35C64D9DFD1D6E9
+02AB991EFC7381E51A777175D8CDB8AFE0F6FED56C101319FD462225E1A5D8BA
+EA9A45F3D5E93CA8F8ABAA81431D2538CFF1285905A67C305B12E2EF5AD0BD6F
+19946EB96E5C9757683C0AD8EA8B2A01CFDD79CBA2C85C15D372F268D42829B5
+66607EF439969E8F8CEB99CA6A88903F9496DE210F92A6067FA3D2F65B2F4719
+F2441FDBFF21F240B4A128B569128B3E2603D51CF49CB70D0661EC7B158DB2C2
+9BB0E993678325F666FB05734561813BA4986F0C80C312864156662CC43AC6FA
+7BB3200C30E4BAE6FCD04AEBD93ABC09D7E74606BD96D7A485AFDE50CC4304FB
+729A7DF84E780C25ECE4AEF782A3A58180728A1EAA3140C11F2E717390826DCB
+A89EB917AEA0B10AEEA57635F8DB6709DBFD50CE6BE7AD10CAFE7D4B0853D8A9
+0CF4E383CBFBF93397187B5A9D52E97058E07ED3B5126AC22099683E910F4DC6
+3C1E53DFBE5DD02A67F9B766583048BE27CD73C5BC7FFA12876B2FABC58E3A91
+D3C72E5B5CDA0B9D6415FB070BEF532EACB157DAAC1CFA0391333ECE47186B3F
+23CF1B57F1C9643091AB18FE4F31E393D74AF0D3264999314D81ED7469D0B375
+0EBA1C19FB2D8B8C6E2AE8CC46CA2864FB67A1414635A10EF4BD15D1366C6486
+0A54C3B71956C4F263D3FCD73177D2E13ED73AC8B304CB399DC2A4A2616269DB
+0E2B63CCB95243C1263B0B8113D23DC8145CFE0FA051980F9E71CF32A65D056B
+BB178396947D983157CE922D44926FFFF951C01C93ED0305CD5B1D40A984E6E7
+5ABA8F494918ED918D5F2DE29DAFEB65CD7CAD43BA092307EA699D4A571C348A
+DE6C78AD0EE3FAA733D2402F78355E59680E33CEBA8E5AE66494177A7C4FE456
+660C6716E17A0253C535D01AA3965D238C963F3B30A1FAC5D22D70C4F976279E
+6C74AC9693C3ACBDF823770F53AAA41795969A7C28E5359206AA9A4972A2AA1C
+55E2211704E805DE8243D4FF4D937B9798D5EE9A7DB22D5880B8C1763C03B205
+4E828FBA0E6A0815542F755A71387DF0DAF54C315921627B07A5042AA1E57A88
+82CC45C2043769FD2B8E2B82216404E1B263C0824ADE21E7BA310286483B513E
+49CBC3B9329E7012FD339C6B368F17EBAAB3BB3BFA27847A5A95F5C861627320
+CF968DA1353E4B0BA8C555D92FF3E87C8CBB116B3984777AB45CE4B2087A8D70
+672864CD45346707FA2E3B736DB739950772EAE96F5D5A0F86D5AE4EE46EF58A
+F7C59AE97C252D233534F4C507F59484B781D7E6BED5968019FD163456F6E4F0
+DE16E27EB4EC4C2DD30A1C5F7D23984998418A31E8BAE024797E27F17D4530E3
+28C2D3B77B878F6A02E6C39FB6A388A13F736D79317B65C7EFD0BD71EDA084B0
+215D02335441FDE7C0E8FB01CE11396BCD7C68D0999D8770CA8B05AEF8EDC4BA
+47770DBAC2A8E5F6F1ABA1A8A250629BF491DFB28EA75C8946A444BDC9B2B89E
+2215E0B962EBB3FBCB34EEA424D6A82F29DE32FA01F3FA27ABD8EFD23ED5386E
+D3FA39F06CE3819B211EFA9B7A0242BFD7175476E5FA68B5C7D27821755CB24E
+E72201AA0C37F23C77FDF1F430F439FBFB8FC00768507C13388DB8B818794CF1
+C06692491B244BCC885AF852F0734B962A8AE2C5BC52FB47BA24A97F6F0F1913
+B9FC7AA61AD9A975A30118BB640265A9BD39702EB7A807172475F1EFD3E56467
+D3598FDF2B66A76E8D7A72C8BF71D6E5DEC50ECC89ED5437AB6900A39986231C
+B235320BA538B040D6172B70627962A899DF0BB26177ABFF9CFBB85E290A69B2
+915D5E30E7B3BB0539F2443C54BD0B9EBFD25BD763E8B62278E5ECFAC3DD094F
+4315D5E0F40C47B8B5AF0F698D295C7DA68E557ACFD2FAFD192F5572B308FE71
+485C4D463A5B774AAD4FB4B8598672402AD435DBE68071D0568B06905DF915CE
+34C19CCFB1687BF3EF96E1A41CEF637C31CEA1ED08EB61440B39FF11EAFB324C
+5172827C3AE3005065047E5C6CF03967E1F2910D0AB03310450D093E9740DE36
+5FCA55DEFD89D72C36053E5FA0B994DF1694F2EF6BA4469EA1835A1C8EA667DF
+80ABE839299C54CF92F27842CC4122B853A12CEB1D63AFAD03AA6F4CA7AB3A25
+84EA53EA390CCBA93655C7C3EC1E3D309AC650FEAF3B0A20FA931BAA2DDB8D8E
+4B70AB633CDD0D5B373FCC1CD8476A7725CE791E42C422EE411A5F3F31129717
+4C8AE0AB347995C67F5CC4617CE2CE868C85B546B1100A7129FB2735526375CE
+286F21BF70A602A7B859DC8B8BC65CD7402638B9A3F1E6A691C05FC8E2D11C01
+1FDDFC7A6FD1E6898489901126F925DCC0B7865266F9340624ADBF1CA170B527
+DD50D265704A82E73913AC0882505B6A868999E25702698EA1D3FCBE9556DB00
+E20B3265BD08C1D26C757AE35F3C1EC93B2D0C1085B7372047F8255008239E4B
+80CAABA78C05780FA447B188D9845EEC08B699204F59B2D475F7849A4915B6A0
+F9CE222360ECAFF4026E07C24DABC397D8A4A106E081B8C875082316388504AB
+B2BB1E5FD06B6143BACCE23949C7B3150CCBEC97BEA0A2DD14536BC1AFBCD3E9
+7A02A53DBF9397EE8F0679E51861455B8668754C891F3C1E940E880D3C7C2702
+53AE30C72DEF5BD85FF78CC044B41396162869A0A7BB223B4C64748A128EDDEC
+80E55F23554C565F2B2BFA483EA7976D7CD61FE32F9391BCC5796E53006801C0
+1DB694A5096E9D3F6757C5B936CA9ED8101A8FC96C7FC76C5187371FC63D2E20
+09EF408CFC9B2A1CC3980F2663A942359E36D0413D24FD9F307965B51EDF8DDF
+FF2B356C11B592385CD7F6387A476AA126353472665055672B2309CD7B18AB9C
+B1C2D84B75B5399DE374344F21918E9585AAEC2C4D0E58E24ECDC39A58885F7F
+FAFBE06E56F2DDEBC08DCEAFC9C24E7F5DD8304C5B4301CBFA66C1E5AF7EB28C
+E97C9CAFAC45504F7670C6951B7FA59AF685186D00E8D2FB06457B377F330FAB
+1D659EFBC6F8C3C2660A0976492FF5008321FD2E64971C5DE8DA4B0C1B709929
+10F175E46E2279B2B422A5F3AD57D7B0E69F19DD0AE219DDF229E12AB085830E
+0DC1810A1FE6D0BB0081340382BA947EBD299D54F348E8ED1E0CD60F7486CE8D
+F609A7C0BD812B7993A145B40FCB5D512A250EABC464D6165CCE1AC29E754EDD
+3F3DC1599A2B89336CBE9615B988D45D0EB5662F9AFA4A05283EA00B5EE50BCD
+A6134E379D47753DA5F7155541EC86E22AAD22D923B0D9415BD06FE827CC3BC0
+360C81F25CEA3E8047610F31EE4984F69AE8E1626BE171143D5A3F7146E0120B
+B77342C41C01B1C6EDB62434BFCAD9EF8C1F1E4C5B08AAD7EAA5E4AABF11B02C
+D6B16DC013D69194BA86326DF0B206C4CCC6876B8E1142854A5654167F1FECAF
+72EE9E29CDD13BFA1057070CBAF8BBE9090E1056F049018285D1F6D0CC22827E
+DDD2312A8016ADAEB68D5DB2828E3927F6EC3A31E7096CFCF8DE748CA5385466
+AC97F5F8F48FC11AA2194AFA33844273D3D766E56A949BA5358166D69664208A
+C6A9FC30EDC2C709217777F4C11E93CD1B7BB5D0CE9A059C0435EB8FC781E295
+44D17F8FD4D68EB0ED96836DC1124A62350BBFB3FBECF7E8F708DCAB7125B714
+B6E7DD68228CD026B2E5D4407A39CF511165925FA4483CC44558D30834F893BB
+9DA4162E7F2F7D804D46242439B7B07B3E2C6F6C65466C11A6BCB5DB9516D167
+25DFD919BE3537500E6C780091EA65740EA5C9C61D31EE1785C87592574B7B7B
+0CFCD6C84D99B1C0AE23C63ADF233943A245F4B680F126753D7DF65D5827992A
+1DDEECAA0411DDF252939D2139A16D95A87E5C383584EFEE8F33EE36CD222CBE
+D923D9151671392F366F613981D439750264215083D251808336FF0C73EDFDD2
+A3D209E48A0FB439E9DC5A4018705EBBEA9EA30B90794CD4F6358435AFD2999C
+A0ADB60E74F4894B0D87D1B4B911353BBB73F02F0ED467C531BA80A53D64D89E
+AAD366ACC39562CFA1598278EAC9DA3BB35E04914EB9C97CAF578F520EFDAE5C
+74C7DA31AA8F694CB2E5B10FB2E19448FD48C3A6B1C1DA8424863229E015B9A0
+F087B134326B88506DB9BE5FDBBF8E6DE290D3C0C76EFBCD06C329A1ED57CB36
+EC875380C87C4813A832FED590719E29D00610B219E1FD1B556BC16193C3BF86
+227D4C9A28ECC19F5E28277CCE9E81B0575719544151D75D28FFB5565A331DE7
+602DADEDF6AE4A4BBF6A36D564302ACB4441C5F7E12224DDA25D2D85467BE8EF
+514544C4C31CB41C92CD446252BCE0BDC11937BFAAEDFF10EE9DD161C67D2DDF
+B54514E9915C0D59F6BB16FD5C4CE8EB8F3051DB3C3C4BC92C686E8F64838947
+9A91A4097C0EC7F9F71A5CF1850A742D4356C9F5D1176208C8617021A2FE1960
+7C484C5B7CA3169E5C7B1BF74DA6FBC4A5B5AA6A8531814B0DD97B5921D2D411
+F6CD385E5A987E925B3B27B0C72188046C0E95535637CB322C4294E19C2741AD
+C4F15D989BA91641E72060D994DDDAB6D5CF0822FF504F77D143EB4E1FE083BD
+E18930B8E7E2D3BC4C9EC7DF9DB61352AFBD007BC5E77E313304C462EE8EDEC6
+8634FD75FE4291A681F9B76B69D0FB019DB31CCB1F01A30D895FCB3A6D8AE6E4
+8DAEAB855E17012F1F731259BC3A80835FF0777661064B65F5BBE6D10EF49349
+387E1B1D180BAE3D14F0AD1949DAB8DFAF94AE53E0C33F77DEB4D312C1B4C0F5
+58090A6A4F65F3C71610DF514A85B29FE08A1A97D4F0BCA820F443FEA78BD55B
+DB22F1D7F0A968A8B5A3CC53675BE726BBC3CD5C7FA1B38EAD62D1D1354894A6
+9C78CBC776C5AC17FCC4950EC1A7FEC82820308E2D861F9D2A14CE01248C2B5D
+B281039C18DDB1240777E20706F8A240EB4C6CAFB05F631CA9DCDCB8190CB2EC
+2EFF9951E7BFD68A08533FEA526A08AA50CD9A05F07DDD63387E9F93D284E3A9
+3C01B835862B0676033F4F9C820AC596B39BFB9B7BCF5A2E5B2F86A65B2FA10A
+066FFFA9345D5799B0FF169EFB17BC58D0820DD5D8423A4B836B015677856975
+AF966D5D8BBB2C0BD32FB17779455490289E478715190D70738F08D338E6060F
+65301F71535D496B70EFF476887F12E58A1A66486E9E4CCA9D802D59EB39149C
+AF35CC6A44FF0337C5662685965BBF263C08AE41773BD38E28DFC4645C07E4D7
+1FC708C6C5CA6FA4B033E85166F9EB5B0C0152AC4C30BC4C46F4A7AFBF62C022
+A3E2442D2E487C9425C52758CDEF635FFDC96AC26B6DA05F1492D5106A9B87A8
+91E5EAB7A7CFACEDEF241360B9F27CBDE1F4A7CE9436CC8F1D89F2DF4AF9929E
+F9A75352B7BCD4F13123548FA3EE7467F67710997FAC3C3E417FC0A859FE52CA
+BA96D36FDE61FE9B9849B7B18C5B6584DF58BC2AE0311A29970216C1D2C0D42B
+43E4482DA7609919F32E7F307E52F3CBA91C70F9057E296FC8E3BF891ACC1265
+46C00D10E0F50AFA773ED0FF8DE11F69018012D3FC645492F93B968FE599393F
+018BBFEFCADAA79FB4874E49CCBCA145C05EA9B3B676B0214B08CE4AF2752C7B
+E542CCC19678F8C88442BBBBD2175F741D6E93C77726A00B8F30ED84074D9D4B
+6C6F425EDF8E1DDF72EDA17EC42F6729155B6817DC0D2FCD44BF66597F689C24
+C6CF3997A19E31DA30BE8F2527DB88ECC5B854D19D6EE6907ECBF3B437A76C16
+E0C89F75DD18701ECE2EC2B8560F1E829D701C16826460902E54D008C82E755B
+754664FCDE92F3BA58C7846EBC41E546E5E2EC6DE4A860A99F929A95E8C2831B
+D005C7294B421F3CE33A4AFDE78BF2B69889197F366CD386883701F04A6FB896
+2EEC55DE2001BFD7CAD0280E3758FA6278CD669B3E3BFBDC458E1AB7E9DD405F
+B2D9D4BED0F8B9E5CC7324DC99E15BAABF70CBEF605FADEBCCE149431F0D3883
+C9E0ED1AC36898B35F54495AB9375878155C8A80C95AE74845562AF8DFB93678
+0AD04D072B4DDDA0CF2ED9A0A31E071C36EB8DD3C3378D6E01F74B8D09FBABCE
+BED5E2BEC1F53BF30D2077695A77B83D0672E452F3E2DC91170F1BC8EDE006F2
+9E9E1C815616EA9E34A9EA03A677774990BE3E47A6D147C0D53A85137A269AED
+FE762E217B9395C12C33745C482F8E3638A2BA001B335C14B090AC445481B188
+099F847346B681A3B1312561D1F8B6EE555B3DC46373BE1AFF57E53B026D2B4F
+31ED29DB88BBE8FAC6E32DCD5E6D1AFDF717C7E258ED76F8AB412E7561F3F5F0
+82E902D52C7BE657E4B85D86FD9E6E763227DC82FE6340D8417D27A83DB9405D
+B24E288552414B9FC4A6DAFC9EDBCC59377511B0DE80632CA8BE2D1347B07B0C
+EA93D860DB522C5BEFA740CA9B3E9F3742C3A0172E08CE07DB0D2D5A00F1899D
+EEE9D922CDF82B0061E7A4E857F4F8D97C4E0FBDE482954900305418DDE03EA6
+B9DE82242A78A9E57B0E5A5F5476237FDBD82BC3AF22AC9B94E59AE7C92BAE51
+CA12436BF62A541B9EC45A1EE879A03F2C493A16DF32201E9A0AB90F12E02441
+64921D3E7814DF5391430FD772509988D014DE1944FB504961051AC136F4877F
+14ECCEF5DA4243D361BBE99164174D2BA36FBFEA11E76136A8BEE3413EC20F46
+DEA984949B03C52FA638F0B36C5905B75E4ADF11883CA7430B33ABC8E1931EB2
+D1EA980E2CBBAE938CA61F43F67A6D85AE2D4B47624FF22063EB5F719D4B4848
+464B33A1570F648C23F16EEBCC765C1FECDFC0DAB1A09CF1D0264D651F2C20B4
+A751BD36E6EC8313B57429A14426DC55CD0BC9EF7D5B163ABC6E3865D845A7FC
+F078E193FB5F887A322D2E86FEC032EB14D500DC46F8A416EADC75F75B02D7A5
+138ABA1E87557A3F5CB9FB3E6EC613DBE70DA7CECD476631501211D1A4B1E4EA
+D35968F08DEA99A33474394831BC2B502AC1C61A24709A18C5C2C4AE82EE1E7C
+7E91AE8DC4879FE5246F813E87E5B5ABFE5B34337CBFF5B5C09B2D17378C5561
+40E9C08AA53E18AD72A9CE1D3F194AA91B350F9CB4EAF2D93C3E3A7E79CD7F13
+4D3627FBD2415596CB6742CE8F194DAF26C073A210B9DCC4E066085A52D84CEB
+F8C1A6490754C46A2D4499EF31A9B4801F76639F40ADD99DF2F71F38DCDCA8B5
+6B4C80F8AAC637D75B66E4311DB7B474F13DA7704E86BF55FD9E8DF3C11FD7B3
+D5F23A897669B8683CBB699C04155CEF0E42B422C9344823C00B357555F1EA12
+72057259DE05A179BA553EF193CFF850BEEBE3E68C9C2ED1ED2393B6155CA65E
+70E922A31AA5A0CF798F48E48D085BE896E6D44CD1DBF236625D080427B901CD
+13251B8F7AB5611A8B6EC365BF2F70612BB06CC59F86F561077F62D02FEBB205
+236B544F608F7C1E91033937FC5B5A302248E5A1B79088F99B3FEF01813A5575
+88232011D5E551755A937D5BEC0888670E52218F2B827EF818BDF16F176B99E3
+B01099CFC5A8D693A01C9ED8028F5BF98240853538D288E74011D4720080BA73
+FE71FD52925C74DFD8D6A80F8EAD196F5F5C99A5E34C8F62EA771F401E2E7E79
+220AD3172ADD57764EDAF9AFE0C3203DD216D82F132C20A532FFFB0159F95462
+E412CA2AE3686F7D41129979263850B5466455DFAA6A2940FD2873484F9C921C
+6942CFB9D087CE18C3C428ECF1BDF73D06D675F19F684FF21127F2B0594D20E6
+D55B5841DEC08C233946C29F6B2D62E2393C055BCA5163B781A1832FFB37C447
+27D30ACC10DCA3E56D34C238493DF89790CF274ABC676D792E6A50F3CF2217DD
+8DAEC29AD4C97685981E242917503BB64F0D8D8819E3C21B58D6060B1BBE4A8A
+A16EBC58F0C784A5483022B5E9B4BF4A7E7871595B22B064B05BC54257122609
+A4104E4A104046CFB7F154DBC07F0D3F4C2A92515B65C20095EA662AB3F089D3
+D1076D94367D1F1286F98579EAF82D8A0BD84CD6F66A261E9D44E05893B98EB1
+37CE020441849EACF6F6F9C003CA161B77A56A00810D5F0A75449DF6D91D8F52
+ECB7BC248CB225F11660027786AE92ED0173D9CD5C65331C4DC55175CA58B897
+0EFCC275C4C31AA968354229BBDD2524A49F97CED00E6D9D763E4AA091549AD4
+B06D4C5288D81774BFBE43E4DC97890BD2A5DD0A86134FF260686F391D67AC94
+065FF121803C2F2C451BB50EC7D925DFAAC92B25E543C012E20AF100E7CB71ED
+5E1F6FC45B6CBF42448AD15858F4AC2E3218FE64DCF4465A1250B7F4700ECE87
+227DBCDE252FE10F466223B1379237F42108AC9DF6EF07B44380993ABC03B2EB
+D897C1F40B6EEB0818AC7F7322C7A5B581D082F0CDB2913288BC39529AB5F7F0
+9DF2CC8C8D66522EB002ECA0C0A5C96D443A2E5717C40D8F20409C3FA734449C
+3B8A7A8EBD967EB8771C288228F68BEE67BBAF5DF2A691676303981CE1704FDE
+6C33BBB32D7A8C6947C551D8427F87E32EDCDDDEB733F0C87B17C888D9D1A3BF
+4A068CB9650B70F17B26E2B826D91C5074722A6BEB3B573449D0AB390B49B6A9
+472AD395CAD80AAAE32CBE26E0B9BBA8F6D7CFE23A61AD3BDE598B0AB238B904
+689FE134160E4762EAA3DA043DAF30645BFE36299F1D2992C05B5B815EDA4D95
+BF116C42EE70AFCA1B86627D7A59A61B1CC26C3BB74E2179F2E8B622C18AE276
+754A15195DE4D9BDCB54CC6C1FE771705EBE4C2A0B8AFA878BB02904FDCFC87C
+5C8809D827DD8517A0EE8DA430E66AA839F9815601649B65B1EAD977FF897E21
+E36BE2E852446A7DAA27AFEA76FC60DB5B87BDFA640BB8A718069277D699CB8D
+330B262E08AD43D3B9DE7BC320A30E8FFA144E043A94D85AF92A36BBA4996F05
+904EA64F4A345AF8AC45F0DAF2B3E058D42D79CCD18AA13AF447BF64786AEDD7
+EA95E097DEC7395DC8B10AC0FF7C67632A910ADABD312E838ED3DB07BE72CA4D
+71A021512A4A1BE98A8EFCC84F58309DD6EDA450B750A9C8AECA82BBEB33B80C
+719D6B81DDCBB42E4BBD760BAD1CBA7284094883A7F29A4AB69A315E90108540
+C257BF452F47BB5D2CD18C1B7358FF0986ED6CE270DC57C80A14D9FAC1C924E2
+2CD870DB1BEED778D9AAA2F45D82669799E7A12308D07BB704B3A896BFF6A017
+C2E06000F9ED22954A405F605A10FC9A700B545AE51F6E53DC508E3153809700
+0292A1EF44B17984F3D2F81574AB6D6259C047EB994A0B30E155FBDD8A81DEFE
+867977038F3525EA96FDCAB19E90FD6AD32DFBD459C33E9E624FDF28D35CC5D7
+AE6D44BEDBE4CEEEF37BA5B27A818AA918DF2CEEA4F70B9533E76452BA15E84C
+21EB1F2CC4A830201266D552DC691C78BA5B1FCB6061CB604613588B3C198E13
+158A67D8373188B37DB5823A08AA5C993C6AD56E09E971CC0ACDE25BEFBDFB24
+8A434D43FACBBA53A4747C56A70BC3425B550263DD563F0A82AE8D3A83AE8B74
+E90C569ADF8A4A4FBC348EF19524AC3337142EA5EA2C464EB783832F046F0BAF
+EFC3FF08FB2622BA064B9D4A78B2AB5551828A814856217DEC34F716A3E6AAB2
+179F15B87C7240A755557407E17655D7D45975C83CBCA89DFF79C6D1B3A6ECA2
+06D89DE0244A70E4EB3F7A4CD82EA5F9A8D34E9838CE3D1692CF1093B316AC0C
+1CFC04BD36B68BDF621DFF3F0681F27703E74FF637E10E5AF480145DF030A4E8
+8353C7F51902472CDF79814631211742EF7CB8661396078F1D293F701624EDD2
+044C1EA141F4A20EA10E127A600A93BF3E7C0F50F5F34ACFBC39251B95FE357B
+F672715FA5090241506EDEB3642CF6B489794E8CC6BF373077EE810190CA7D6A
+5023086F967894DD4DEFDC6F8078A3AF18F9AADB49E71647258BFF517D5026E2
+8C9E1EB91AFC994D755864E7900DAE76A093DAB86F6D5399FC5C7FBA2624A568
+FE552C273CF0599B1E4A6AD4E071FA1FA251296A4CDEA75294BC51C7E5013D75
+B6E881BB8184D209AE4E5D5C80024290798BCD9E0D96CD7C2676F6FA8E938C31
+46AD165C4CBD85A3BE1AEF4BC3D689BA3F3681DF87B4CF66D65856C63E8D7889
+BBE602861A81186109AA9C9D5CE559915E4573E43266165989D14A3B83A8223D
+7D4DAC9502EC03C2977DDA46882D99A0AE5F4065850B9DAA7578C89ED1BB1980
+C050A3F1B0B04EB0D8D884E2F5C579F4F8B8464BF15C004C5A922CDDBF733EFE
+275FC453211C30F9B3A93C6C52B4EF97D5F04FB320F8CC6BF404A4D1A52D449C
+E2F37C7A3FB87C9A84F141AE18D5592DB4D788C27A3CA24220AED1821A442A68
+7D67A62607DD07FB58DC2309503C5ADD3301F4C4EB5F7AF5BD43A52CDF04E1D2
+0EF5DF0EAAB71926389957F296D98533D14BFFF59FEA8EDF396A6663FF407D79
+4B59685E335B2397C231E62F0031FED23C232A1597467BE08DDEC5618F36EA3B
+3228B828CA4ABBF0A01DD9D07F33A0CF79D9194B549717336D222E165B0465A0
+B81D37724BDEB1EE1A7BF5564B997F6A8F2D54EDB1ADA0D423442451CC2E87FA
+8DF2264AD95613AA2F9CB5549A2063BE7342693816E987713C84DD7BEC9E8A7C
+B442CFD863B64F83A07764C5B701DA8C422E5294310737EC85A6BAEE014B1740
+085C16FC231B33940A1C6393391DEF42A6F27EF1E984948728EC007FCDEBF841
+14D081461EAAEE6B3482D4E5FEFAF07D5CE284824F570D65E39A418F062984CA
+690F4F473EE3D5B8F410A7112E1ACE459EEF900F3825F83CD49B5EF8B7D4A3D4
+B249CEDAC4F91313A1B0D4A10820080E3665F3242F14E65BAD52C29273F53D46
+AF41E8FE1863B3D88D20C0369339CBA8EE02063A25CD3816AC6AE691BA57A796
+9F1A47DD8D833D41BD1DFBACB8C54FA0AFA3CBD7895D95CF08EAE6E9D2B74177
+E81CCD21ADB705B4674279F7753117B02DC977B735C3807EF11EFFD51AEA5F36
+3797AB2E48975FFB4EADF68BEB1B72444BDF8B21D73C0C20624DD255439556B0
+D5C4D042F37E017C3A788DBE446216FE3023CDF8F2E39B87AEF0B34D96BF7A5E
+C5DC36A2DC887C94E83A89CC17DD80C449A6E86AB5E3EE76FD432E1DB2D2C807
+C08965F64B56205493C5A440F6888019C82A9143EA568B701DFBA89A385A5B5E
+64BF4C29B952CDC3DEA53D7EC80B4A882F7DA158EE4C38F48DCB818E8C34DCF1
+F876401BCC922D293551CE98B8A6FDFA38B483970628ED1F4D27A1B01CA8D0EA
+E09A8D3DFE74FB173CDFDA5084F25B2C55F69E8AB0F8BEE36FE44D7F87C379B5
+C216CBC58FB073136C136DAC9237B1F79F89DEB87CEB95913F72941911B72F83
+71D363EE2C219AA79219D13A5F16C7ED1245AABEE6C5EB49556C8A42C0B4DD9E
+F387B4255E153B59346EAB875EA76BB732FE8BC7A6A4E15EDF894782200E19A7
+629DA6119B92C74F6458706CF91A2BCDDB971F87079F7F9F3F3D8C61DBD830A8
+142C2C797488B9D935BB13476B17F9E814BDC4F2663B727C76D2FF064464A3E5
+DF65F790B7D68CFD9AC59ED1925B36740E7B67017BBB2199BC427C461A214D87
+910F46F65C0FAD64D73AE0C75EAE7C6CBC657E8AFD3F235817870A8FC407675B
+4B031DC45E357BE20D58346ECFA7538A1E6F36AAC6906D1CD8D3E2864545977D
+50E215398CF620966AE78EE1254B836DFF2383028AA902946CF473841971DCDB
+7DA78363EAB4486075D74B33365F380EB1B162ABAB3C121324A2F84D50FD05A8
+560D8B7CFF5FAC4096C0E79F6B0E39683FF814BC96B1EDD4714F1F9210211665
+64B3FC50AE28FA35764DC4610BC1C8B82B6C0109D3550F7E990FEE449FDBF9C6
+DEBBF84CB90D42A497074BDB3F4AE27EAC754586E4D3983E3529EDD22D7A4EBF
+A602B1256C1983123E1B9BC95111DC6FA390111B3830E94C435B4E4E75A3DAD1
+9E3143831CA344A791C211752ADA005720C683EA446D5727F0851DFF216257BD
+9145C35DD9F14928D32147C7FFBD308598F917550FB3A83A2B8799AEB0C1CE8B
+2EBC3287D9ED45860B1C7FAF531C2B766C1FC2BA48FDBA4A4474C85269A265BE
+CEF32EDD0F21E8325773C2FB5EF2E2C080BDDCFC13DDEAE5CF11BDAEF7D4DFD9
+35632BB6CD954F457CB7B60382FEF81E9DDD15D463B860B26733B801789DE162
+2275EF2F3A30D7661AD1FB4FA1595244B14F1CE68BC56F16156C71FD2E679FEA
+7FBAC2565B8DF4502EF695EA2696442093D21B0E5DAA0B889CC42829BD36911C
+0DD363C99EEE0FC44033A4649AD08C7F01E908CD19DC217FC4F4DB54825C3E0A
+411E2AF84CB08210458DE0E9011668157B9A4F33E86B638C467A95876F3FE089
+356641C9A928C5034CC6900684137A037AFDD22D954A79F21224B2B83EE5031B
+ED8A134C8CA5037264F5E6E67CDE2CC0CB05D793DB5A615D30E49677447EDB7C
+907231BA4EAFFCC83CC3D3D54515694BB72B329E8954F0A900C2C2C605FA14C5
+A28AB8A2B9000EE484675DDAC0EC2AACD3D12BC9660A1C8D66BC509EF2769A9D
+C16688862216EAE937F17524CC1DE7F4B0681BB7156BC913A6927C355E1B83A2
+A635C86ED921CBDF35A45C6D0411D4409FEEFF33371FB54A5BB475253DF50A0C
+DAC3BF53D70C578A0B73AC978A2A3BF663BA6A50C8925AEF7573107E927EAD7E
+9A0DFA52307B648F35B8336F9845EF4C23095CA7BA7F768F1CBB0D48A6E84E3B
+11441B8F21AFC233A15B5E29D5869E5CC53669BD30C790FC71A725CE20B1A597
+D204D4911F451C2A6123D392D52C672B88C0DCABAD57327197470E928A342956
+E0B20F41B614C43FFA6B8AFC9D9EB675914940579D798644CF52508C18B84A40
+E4904CB33B19063C37851CF5B737CA884E2D29B048E79AC9DC276CFB3648FCB7
+0DFBDE987B1C1D14E61658773580BF614BE32047EF256C1F374DE47051E3A04B
+519BFBDC5B445641FB242EE92DA8BD61FCD4440DD4ACC0271BA52ACD226E83D3
+26824D28AD2CE6841C4E6F23BE7D057C80246FAA0E9AD29819F21E2FB1429CCC
+C836D87CC198BAF10720C6321CF07977797187982CFDD890066B2AA59C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTI10
+%!PS-AdobeFont-1.0: CMTI10 003.002
+%%Title: CMTI10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup
+/UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTI10 def
+/FontBBox {-35 -250 1124 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI10.) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 39 /quoteright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 47 /slash put
+dup 50 /two put
+dup 51 /three put
+dup 54 /six put
+dup 57 /nine put
+dup 58 /colon put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 87 /W put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E
+2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A
+EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD
+8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF
+CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2
+7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC
+32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09
+482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF
+118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381
+1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC
+C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA
+8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4
+61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20
+C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504
+3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70
+9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A
+D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0
+125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8
+34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A
+30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9
+39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49
+9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184
+2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF
+0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348
+3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D
+9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757
+802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28
+FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0
+98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9
+5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF
+AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD
+A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93
+5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815
+DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37
+4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC
+8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B
+A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362
+E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F
+42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96
+3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59
+A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F
+7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4
+49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428
+D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C
+0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955
+CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485
+1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB
+8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388
+6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468
+83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29
+60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284
+42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2
+1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A
+21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA
+206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9
+D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7
+7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B
+55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4
+6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762
+4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392
+871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E
+9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645
+DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5
+41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8
+2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F
+220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001
+A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D
+981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F
+337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8
+139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B
+1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC
+100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A
+1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905
+F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB
+72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7
+A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D
+310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928
+7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989
+1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2
+8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33
+80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610
+3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C
+C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996
+4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB
+865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B
+301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48
+3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9
+1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B
+E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29
+0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0
+30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E
+2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0
+C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89
+14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A
+44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC
+CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654
+DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34
+9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87
+4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3
+2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676
+21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26
+47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4
+F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9
+D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F
+03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5
+886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8
+352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD
+9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0
+9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3
+92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F
+821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93
+3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0
+47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0
+F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B
+9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1
+AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71
+C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978
+B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED
+D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD
+F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E
+81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038
+970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C
+6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7
+97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668
+A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE
+AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594
+971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96
+514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7
+8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C
+392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170
+3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F
+464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE
+C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E
+F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053
+911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6
+261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED
+D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA
+147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D
+C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516
+C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB
+61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD
+FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3
+F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C
+2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C
+7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193
+11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C
+9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66
+C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3
+1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692
+5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5
+6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0
+EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E
+F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23
+AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D
+8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94
+376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6
+B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B
+02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56
+4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF
+9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD
+751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198
+3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A
+40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962
+2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360
+D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A
+0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E
+8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946
+AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510
+6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B
+CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E
+DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D
+098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337
+900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B
+41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149
+7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA
+2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC
+A91885E7410F56F1126D6062165B9EE0BAFF28C2B54AB563630AFE4B69FF032E
+7EAFC808A831EB41785EE4E3C12C9811617774408CD94DB0AA8DD8DA1FAEBC92
+63DBB3C52FCF345D7BC202236296A90523F67CDB5A61E1ACED53BD1516DCEF3B
+551577E7F11E3827F465279870CA80EA5D9FBF65DBA894F62D4F97FDD32FA210
+7822C03144E0A07554DD1E3A2908129D592215A0832A9406021F0B0AD971DDAA
+B6F2BA7A29B3CD95F342FCE1032955669B0469E3561D038C6FC92E4D81CB7723
+A14C83E11A4E961F1FC986C55B7155B85EDE07CFAC982102B9CC9B91EFE137C2
+AF41206F504F14DD921D63C229C8B7CE8F110BC23ADB5DFCE07CD6B383450430
+CF867408666C11C1BF88C463998811CE2124971A52A5FF779385EB4DA75B2372
+84C99F5B28FF8772D7252FAFA6739687225705994813636710D9ED94A70C0FB7
+BE007E12DBE00E91A5AAB4B2CFD7E622EC22111C2438849F220A096D9891279F
+0DDCC564D440B4FF85F92448D42014DF2B231BD755943368A9554B60AA09E892
+F91A4B3291F21C9266C9CE3D5F6EB1C5D7524C125C86A63F7AF293C9195D2CD0
+AB55040AE154F6CA8B234FE0178E51D2EC007B9D4E483227880E1DA76448326A
+47FCD6200A498E1163F1DC4A62013C0F6DD8A3E8E1A6CC6E553741DCC6D89F86
+419D4CE4AA05D132DE2C8C89D0EE918A4F36FD3E700E84B5F4E57BFFFE30007D
+304874BCD800EEF2627BAF6BF458D18E9FCA04999F179ADB56240CBBB59EE098
+1B0F6A9FAE71AEC1AF60D163801D299874BD7F4CDF7B8B417748F8EC9D91CCC1
+A24CDB65E06C257CDE0DBF034538E97511324A8C312CBD69A44CBBCB3FD208C9
+568DF8617F833C28404031BB7CD198E97C75921C58DD7848E70EB7A5CED3C960
+C9D5E6F1BF20701D53C5A6D3E3A3FFF48FA93E7D9402419FC877204286302C8E
+5767D6881C64BEFAFD6E23B65360A152F6C645821D85867A01278F81AED807AF
+9D543ECCB76C61582F341E57FDA0D280CB5074F858EC7167B5F19B09B0DEA98A
+49BAFA7F61659DE55298253B0C166F2400C5BA6C35FB669F3F3293A4C1CBE5C4
+1C701D93908190462489388466FB25A891951F2E8C36C1F380E16C50DAA186DD
+0C099E0A67D2DE97BFB61CA8C83EBD5C41A74908FF880D15E38554B37C972849
+40D0BE165A186F44475375C49819FC946697116EA80C0010DB3420DA829B7403
+5BDF9F27A94708F9CFA0F45AADAFE0D99E2B47F3381EF256C0017F2C0ABA4C22
+4AC694919EBD2CD065FC9D3E0F543E3E58AF4444718A3573EFED6B76BF9E9393
+DA2CAFE45B322AA75C72E938E5693ABEFC2EA2EEE014BBB815A682DDE180594C
+BC581869A7A999C52C6C3C354877EC108D71AB1ADD2A11A465EEA5F424F413E1
+923BF4CD9BC288595D080F661A7C791C7AE61633F366F7930FEC736567F936E0
+FB881D65F8CB127FF9AD3E611CEC0345DC6D1DD83642C0424CEFE2A267CD14EA
+F435149C67E3AE4AD961FD1B27530993A8B4B17E79CA3469D45D7ED4423084A9
+7931FA1D7A9A011A3B67D4C5C5E11FB350E60803C760B297A29A6162F1B3323C
+04D27278A5113EE841DF0FE9DAC5BBF737446AB41B9FC3C1D48AB9E0C7A590D6
+C817424F940B9E3222121B24B97DB7866E8CE52B81CF44DA5536818506220706
+DC806409EFF5ABAD9A61D7F07232A8A9E4D90475E6847F464DCF86B75BF0D899
+935D8C5DB4435D7F930DA8A4F12CFE575608A1E5D5FE87CB61CD6B1DE194DB09
+E6DE511216E18CFBA395D9F53FFEEAE09915C54FDF8B6BA45B019E3B2DAA37CA
+F9C3FA5496418AFA0F1E7278DD79561255AAD3348D4AF4D106DC582AEBFCD0C9
+105BF3425F613B9E6CA03E2FABAFDFDAABE33BE9A9E7474087954BB3F59F73C8
+C88CF9C47DE886A1E1F78EE686ED9064C776E7AACAC393875CA651C334D8AB6C
+B8B971A3DC90B224C8E624648ADB38F9BD5A6CA0873B2E3682F2F6B0E45E4BE3
+E27CECE324917C5A99F4A3205E49B1860F032E844EAC0E22D4B4002ACD8A06F2
+989CA23A7FE4C1FF02C1A7A700B3FB132C03AC16812586FD71A1A6FAF1980AF5
+AACE08CDC26944791C3FEEE5FEC5F2A7F355A641FAACAD58EC9A01013EB00EC1
+8EB94828E45F272239AAA80437DE0B2558B5DDB8C7CB3933EDB522BCD162CF82
+1B77B61AAF7BD620B5E0FB47C26C7CBF509EC79A07EAE7ED0BAB636582D10302
+2C7845957B0FE4A9472D1AC01D136CC4935823A387D70DAF7877F9B2740C2AAE
+7B18500BB506FFFE2BA75DF7FAA12283D0C7C6794DD14A9A2387BA2538098BD3
+0B3B2B35D5414E7CB1404A7B01225953A9194C4E0FE2CEDC05FC0F953AC0ACD7
+E8280FBE68A69CDCE9EC4545DD5B1B96C648796838764BA7ABDEA03CE63E9BB5
+5286DBD1D64044A723E0D314187ADE197CA4A114D09F0F8CC82E83787F3AD11C
+0188A620C4DD043FA9082FB83EFB09D1E24115177BA09D8BCF3EF7B3069EF25E
+591E592A446FEFBA01640AAA52658BC12F15DEB9FC2DD452EAF34B2B73FEF9BF
+AF54150AC75349BC027EE15D935886B5E400B01E26F1489153E8BEDA0C1DF620
+A12EB4B46AABC23AE85666D33928290BE84B679A4B2D3B0E911C7B19CBBA3F2E
+723D93597939AD09337DA5EC35F0E501220127EC1FCD29D7DDEEDF786B24028B
+E24AF85A37AFA6D4D6396A643D1FBA7772AF3ACE65FADF5907990CBB548BB86F
+AC56EFDBED8E8EBF86C9E48698A1C47A0AC665C5C5111EC0812F9585E65F2BFF
+A08891DE06902647FCD200984F3156FE88B059140397B7764A5A8F7523618875
+D33E1929961CD8DEF4179E33F06BC1DBD89D44407373B0221F598FB43AC352E1
+9DABE44E5543138293B174C4771CA7A53253C4D8BC373BACDA4C816564F3409F
+12F9C4C6EF19D3BE61E1CD19720627FA96D1830D088C143E7AB462590591EA22
+96FC1153C8459067224717FBA49A14BD980E03AC9DFFE9EF6110D1751425CD77
+5DA34C8CFEB368B99F0E79E00B2F9E3D55521F3BCED22FBDDF4BC9E345A9DA00
+7C380C837C6E99B6CF5F6C3A4DA7DED53D69E6A7808CE6B1821625FC44289875
+5112A8AC49088F2D9870AD878E4D1CB58E6D9C6FE05982C0E021A21651C6F0BD
+C01D598E3C867EAB3DD5CB2A900ABF961D011FB83FF16F3431A29FD48E27F2EF
+2CAA0AEB273058F9A0074F2E8051B6C5B146D8E3F413DDC07A2C8C2C5FD32926
+69CF0213A5B82FFF26CBD46DB57B136388DCB09E20485FCBA93DB63546F138B6
+7E43E583D180C5437A8AEA607874227F8DC8ECEF9EEBA08D32D291FA8559890F
+9957E6688A39DF0429D2E8003A4AFF649ED7BD2111268433A0FD3F108FD759E3
+86C80BE35E5E23793B0AFD0352708ED2E4FC568325760BCF1ACF0CD3640C2536
+95807104927D103DF216BB93FF56CAA4AEEE5B890AA28446D6F2279BE427609E
+62FC24DFD04A174DBD14F10E19AD16C92AAF73B6D66DB2DB787EDF80C67CF9B4
+22D094ED770E8F6FB8838C2EEAD115FA4B688F500109FF4169176ECBD5D3DC32
+A37C5BD00D282AA10824EBBA3EC98C5F5888173BB9B1DFFB3B3B9033040BCCB6
+8C3937073B60824F28C27F4D882AE682CDDD5850F3635D07A3D43ADCA16F3AA9
+A00C8884F6BDBF9922F37AE696B6FF970DF89671A5296611DD6C4BD2A9935DEF
+56D9A18B74B1D58F743E17AB5E12A401A4C155028F12E5828A1C4F73010E8A3D
+AE0FC4ABBFF2DC95510091A412A679E64188860E4B0375703485916D630CC665
+2D8B83784BF451232570DF576331EC2FF1B646DBB6334233C58E0E9480F5A54A
+7103169C2DCB9A03B6A0361D5D745DA48DE0916BDAFCC450309B2A4768DA40C6
+17C92580679ECE6D273DCA6C7B8D3467C626D0D11344F1479506F4E24DE8260C
+D21115686625FDB6EAAF338CBE2AA4938BF9E471E30E9DA7ADC25F2534E68054
+633C3FF1B083F71F13FFFC469BD33E2BD05724B86F589DF0609C19AE5E1C99B8
+62830289921084EF1BFC5B5FB8FC04C5FCC9059E7A807A4A89793FB857179EBE
+1082879DCAD72479272E7B158DFBCBBE21E6540E03EA08CFC062FEB38849AA0C
+6CB95389029137CA526E2E7544BFEB7C2848423F5CA380BCD5F20413CD917CB2
+246183C0B5806ADAF632FD1119BE352315E00363FC90422E5F5820B66152A998
+363767903F16B6769FDB410604D1BAEF96E0364C3158BD0E75F70B0F06F5BDD4
+4E1AFB95E18A23742A9A79603E03ABC184D8D276A4CD2EEE5E0C68D3F1EFB50A
+3FC4B0F81AD43793DB22C6472A9624704DA97F60CC08071C0E3504D1148F3AC9
+FBBB9BEE7FC5DC309B7D72D7B5ACFEFB29C5942C5B1BA95231151E39E930F34B
+11F5D295F65BFF94480B4E2C69266DD829DB341953D8AA74327D77F478D95CF0
+14FD565BF730E2436B24B827901A77A4E42862B246987560C3711FCAAEA9A5EF
+C2D923E2B4DFA32490F5634EE65D968ECDE3BD0E6C5212B1A0F2DA6F8681C3AD
+1E9BB703D3C19D8C6E67A364ECCE48718B10B594FD1C256871115B0943FFAEB1
+D3324915C9FFD3C4751A5D7BC7C380F6C0C7F5E71D6C1E8CC51CBE41FA00BD85
+C6A9A0A545AE2DA42FAFAB8FC0ADBBAB544392DB9FCEB7A604468EB696C19054
+97FCE14090C18E5D14B0A4833AB0EF27D01B920635CF224D62D706A4C2E9A859
+3130023B4108FD46157DDAEAA63F7BDDC3688FAE2F6B7911033BFD1BA1069B05
+8FFDFB8A342E7D3EBC91D9B5EE0DC9EC71FFDD9F991F285329E320E6A9DDBE80
+E092D35626C9404AFAD73413C0A16219F3C4175587074B7CE8918596FAF5BCAA
+4A012743457C05BBE26E6FC028F5A49CECFAB8B2B5E5CB0DFC9F03783369A92E
+2975F4F12585E17461BCB8155C0203ADC2B39F966C57E0E64F29E92BB8FA3B08
+68BF9368B80F46E4DC14BECC04EA96654A6F47AF7F30EEA007F9E689B167E83E
+2A5B6DC4363887539684102CCA0415965F8A9416F05E13436DAAF07A9B9342E5
+B97571905C9FF51D6E0CD16880ED55EB5A622E9D90C12CC9C838003D020713EA
+5FD23A79BCB8A6BB31E60DE296F6074F81208263A911359FE7B76CFB3662D98D
+02A96470120B63B667F5E7A58C6834C558C19783D417CE3F7F18D9E8E7F7D3CD
+3C94585CC7AA3B5BA430DDC99337223266C476EB10154E62B9FA65483E1D8555
+9CB32FF29F185D7408688BB887CD3F85518917F32F233D6008BF2122188411C5
+8F9EC4332DDCFAF1F51FAF393AA820655AF7618F1009E4000FB2002B01C14D25
+224BCE4D02DE31D8C8D4FEC7E2BA9ED800F6D592CC5C483E3F9979D155912744
+2217AE46D7A6C052A8109B5993D8A71144F8D9E9173CD6CB252871A5C9FE8967
+3B111C7AB44A7DC96759D493BE9167CA054313E81F264FB3BCC58911117A7ABE
+ADF0D490A3927769E7636AC0754BAD59DF45582E356D3770B04C494C536C5456
+6413267168C01F06383A3641BA3125DFB713FDA27E1D58687C4FBB01865D9A92
+12803FC0DCE2C60859CA2CD7760849A4CDAC2A2871077F243A5FD38465F6067D
+86C6599B60C357A8D1B3C860F1CBFF3E6C1984FB63BBD74B2F17D8EE5A0BD9C8
+281E1BC31D271C3DBEDE84A4ED1E8C8E7BAE535BD05B44ACE8D5D3B7DB24419A
+AADAF3AF9A1250B754BE1516A9F444FF5AEBE21075307EDC57990C4AE0CB3397
+986DFD2DA9F4F7C1E5724E7793C61E853D5AB93FC092A3B444B125D49C36BCEF
+F1304592873A6C6F1E7FAFD0B7475F37690CD7EC2FA5ECE2C201425EFF16BA81
+FC5B3262859C4E8C129E8158BAE10DF85AD8DFC3B4EFEA7D5F90056AE238AEA7
+3280698696E8C366AC3F42F56E4F18492F377EC2456E147AC9E7FBFDB01C47D4
+7C29548D71F78C3D070AE09F655D27AF10E67C706B05DD12F5B517A654FDF51E
+651BE49125F23D5EED637B4DB31C8518BEE058C0C3FD67E0E2D869EBA81C5326
+361CEC0AE4B44E9C99B468E1E76C9C1D72F86A00261D23A9E71AED920212FD8A
+F24B6CE006823D03E3EB723ABDB9786FBECE726F9730B3A971C903BE9F670FF3
+624D9DCDC2F5841825AE16987A24B17CB234BAC1AF391A8560AAB5E3A3A84FF4
+489EB9202660B3E5D40D321BEE01DA1A65D57ECFCA6F2853D22999EC3BE63FA7
+423648863D8EBF8D7CAC9E4301183CB4B6DDA1C44411CB54592B1EE3C88FEE4A
+D8D4CA79FF534D4A03FDE2A215EE3D7494ED6702EF45527A6398D6EE4D5B0356
+90FF408D07C6D37AD9E2BD7BF22D7BE4351E2DA853B546B1554D71FE9885B61A
+B31FAB7ECB990BCF5BE2187AA62ABF69F06455C8EB2549188B2B0B7C3797F51C
+AAD14906029FDAB42A6DBB64C3BBE7B5C9C122E00A475E6DFC893F3BD57CF95A
+1258FDC5EB10270FF9DBB394D4FE4DCD3D047B99E5E1FD10C7BE1D5563DD4762
+F98E65594DD590C77630EDF0E2F96C4439D95A46576589E3E139E29D908E11B2
+D531C25C1B902B06F5A34A060E9702EE3FA9D76F816D83CD139314563BDD6E67
+A49FB713C96941453089639484B2B45EE91757B99975A2E477F9BC46A7718CE2
+8D01C65ED0F7BED3E935517777FFEA07606FAB87911070A1278E3A1B8B6F588A
+08BD54E8B4377270D9BDAA8DAE98CC0EBF03FB876EFD2B67F25B752B96A45036
+6F949966805FBD7A5606955B92B535B9E695BB4B91750EE582899C4104ABF2CF
+76D9CA6D42BF7C4917E1198BF674EE617966477760E769F84B465FA88DBFB3FE
+E2B15E115034CA77E9867E3DFE62F0840965C5626160D8CFD67D7FC09DC2A992
+B47FFA452BB38FDB0A0714715789BE7B177EAE8CF33CEA1F4ECE89BA16BAD2E4
+8CDE5A5AC82B4DAFAA51CA85CA84814AD540B427A1E5D547A55BE014645949DB
+4EA63B1121D7326288E80DC4000BFD8FA401E1495C4B335620BC3F18E1C82B5C
+C51FD12D7722A19B36E82D1F8B3F6B6509B49F9FD9410CA70FAA0E50060366AF
+4BA05A8CBB95E35D9DD48C3C52C2F4ACFC781A381FF672442A66676AFBC7EC5D
+21DD918EC032AC60834E543675CE87D7F8440C9DEAC3720376F39B613E2FA577
+EA6AF49C659CA6E097294A0E70EE8E1743074FFAD3D23E3FCB653A4575399BCE
+15ECFFEA22C54958606B1A3E0E7F8A127608A8ECE720B09E7F5962CC781CFD22
+FAAF6ADBE33D77901E51383072729BCF04125FB8495F00166F10DB01EEF96178
+6214844DAB08E8694C1CB1C4C20169143535948368C55ACB00F0ACFE63A9EE06
+6A9C36C482B2AE69711902D62DAF43588F21B58ABF74B24FD1A2C7903C82D020
+9B37CDC5D074804808C980CFC16C6E038144E011856162E62700D85C818187AE
+175E71F07034F86CA8719BE87089A854834BB4E713E555E0197BB91C3DB16D72
+2C8A6CD1B88B10145C3EFB10C0CEE108312588D34A304C97C2DC2A96A18637B6
+DE321DFAE776C5A44D9E223DC2925B63C532EAF8DFFC4503B28C7BE811607D86
+C1A9E4E27B00046CABEABB0129262E2005D1C08E8039A6AB99DA707A5BB5CC56
+8EC0BD933CCA055632D8DAA826788F0317C81E5F56EA7777599F93C8F1F0ED5A
+86D5EB220E6F4EA3838C84BA8CE3BACF94B9C9DD6447092E7AACBC9AFB234B9E
+F0340F528D16DEE03920445D64330A8E5BC77E5A58CBDC8B652AA150767352C6
+9D528E7C9A94B225F14306C73CC190F750E241A019C1D237D45353EEF3A616E5
+AD896FBF7DE2857A0A8AF8921A85B7B22509F06B678EE10A09C5F4DC8AC2B03E
+F73F00C9FA009D00C74A01C45D3EEC15D97B892884A80EE3FFFE2E434C270E88
+D7093EA3FBAD000D96922C5E9EBCF4A12CB6CF034A322495AD34DD008A25E1A1
+6FA20C01405E566957F56A52DFE0AE16785E005C57FF70B9305FEE8699A40D73
+F2C2A9C54EF891698040E5A6390390965925755E6B429A328C3675DD14EE8F4E
+E1C56486707F976A94F33E360DACB204AB2406DCF2B5BBBA854C5B1378F50913
+40B9240429F1217E0E27DB95D1F791BA30B5ABF517DAB074CFE3C9996FD2B8AF
+1252A0FA3AD6380231B9046D7DA8A0F5088CC91084C4906BE8D3033386902E21
+752E4B768C85D9B964F31D59BB305AE4CA1C359295C7D2968DACEA45CFDE9E0F
+EE5F41E4866DAB02C876F7E2BE49FFE663D66A30913FA67F441DC8FCF8616137
+27D10E8F77D2D75D613AB9C6953229AC3A811B6603EB0BA812102990C6ED73AA
+5D4C0DB3DC3E64921061AE77FC26324C544AD239D0CAF61B67A6542AB3924752
+5EEFB382942EE6D5A3B165E9DF6CABFF118876AA20E01FDC1F5621AE4D2EF83A
+3AF67224CD53FDC82554C5657CA6AA4EFC3482FB338B75B7445D7D371D7D3DF3
+B0BF3BE4593BEC2EBF4D02C69F7543B4E3039E1710411291AE873EC3D42EECB1
+B2B84B8AA5C64CA557C876DDBC9F38C0DFEF45CA3C26E22E71BAB1849E0E3AAD
+7520E1387A23536129338F5573EEE0FEBD2B7695693E0AB39599BD4BE29E699D
+9E444B89EAE61C21464F769342B40381E5B5E3FCD8A7F2099C2DCAC6D884B4FD
+198E1D2E6AB0EA7F0C2ED0766ABBFA0A59256C1123316FC80C285D0A006E5D90
+D8012912E2B1DDFA385694C182DD0461A5BC31083A17345EBA2BC20972858C85
+9C07A3926FBCDC715D4BC0A2393C170FC94A1242E40131B83718D607CDE9B8F9
+D8B592A9F3A6FC357BFD8FBB960BD326EADB37D4C1973BB41EBDE0A3930513AD
+8C205F8846AB4DF2FDEDC3C0515FA534EC966782F336B5CFA23457DF08AC0FF0
+3461D778AD329B152D84C52FEACFAE98508CB9935D8C5F3C8DE00B43A6B9FD97
+BE34B1ED4483254E51007FED0B09014F3AEA4CFE57E8CBF3DAA21422D9051D0B
+D4094C9887FD76E6303E40B3299823EBF76E2DADEDF507E38F2CEE00E03B4498
+4255E92459F255D0CCD91EF2FECAB45A6FC6D65CD45E3BD5193B99396317BE5B
+E62300B829DB8574F8ACDB704FD86709E732920A1E4CA01904A15234BABD6405
+B16C11B25A21B886F56B1E46183DC6A0BAA6768F00528F69F07B87E2F6C095FB
+773BE94ACCEFDCDAE7013085370057456612A8583D10563A14420C6DB012CF38
+1AB7F526B5F9499684A6251DFAB52255293131C2515223310347ADD292C5E794
+D8F32B80F90B9689F1356AFBE5A88F5DBE707E6282A2F2DB432F2ED4B626C7DC
+01458E9F22353AEB9A0AD6B1BDA91154DB5E2F69CF83091F2BDE02E1231FF4B7
+8F430AAAC8D3FB6C025CA6DD6C795EAE32225E5D484C03DFC52B1FCD977B9BAC
+789B5BC12F060E2924450763EA924F40090A673D4BB98849CCE88F3E4C28AB17
+6767FEE84456A17846750CBC892E38904BC5C61D03BBDF549A8269EF4209F9A3
+1455DC7C13A6EF6FA9B2DF335E6CE199FE43E5DC858AAB70CCD3EC029FA4B291
+A0064B5C6C823FF3D7A17F490BBB6FB077F4C58FD524385FE4E185130BED1230
+875E67864F1689B8F51741703BB9512F2D4DB8EAF70A6B580F83120CC0095020
+6504470A4BDEC85457C481114BB4CC73E2A400CF04C836D11AF37A8688C96EC5
+C2E9881FD5A0D07714F516C4C7532F356A7B5048A6DE610D30E4892458786CD6
+903EBC006616A8E06A43D96456B2A312D7CBA2B830E962B61FDC81532C3C1648
+51DE21C00607664FD1288738CE81E193CD5E42769D1F7A8CDEF61BAD040EDF8A
+D2FCC5AEA57F259BF88D2168172D3F3C7677B82FDBDFA9EF27DC56758FAC7681
+F9F243A117787B1D10041840A938F73125426D4CBC63FB0C9DD6154CF5B627E6
+1CA70C223AF7D98E6B2680AC4D3786912AC494297F9D649108F8DA36C2A8FD68
+60A9EC0955D7D004D55B9084FB04FDC6523E6DA81DD9D2DE54CE1A480DE29C44
+37C7F890BA5294910969F175DD6C39FB96508C8AA4A9ADD62EC61724F9D19B32
+3743BA90D625C2850EA487E5611A1E096A70C1F1D6B589DB174602D7EA07E14D
+AD051F2353C3479A84827442FC3ED64DDB5C5EF5B1453A8F0F51205766FBE67C
+FAEA0E449AAA51175953C5300DA01FBE138240A52E83DDFE973325538B9EC466
+A722824BC0F7B969AF787F896312951AF936245BD0D8A5567F8ED07583A6738E
+A6C08FC5DC9BE2D543CC69D08BF3605D078CD036B267FF1968BF7AB684093E3B
+4C5F6EAE740DF953B2EDD5F8D80A016B14610C1C5136E8FF2DFDD35639424789
+688B3CE7BB00C6F916D98DFD642BB8BD1DD3B0786F3C41AE0F082B575FC96404
+A161FCCCA4648D25EA502AA71B2AFF48935B4903C470437499059E39ADF0E38A
+3A34F979B489BED4BE3D32AC4FA43B30DF83ED3B0D101C01562FE5F29183DB23
+408DB64174841D2B3DF019A74E14DAFE00AAE2EEDA2CC7FCC21878EF04F9D2E1
+3EC034F2618EBCA323CC1B8FF72C5713E513BC601BEB2E7126F2E71226CB492A
+103878C580807B87E5720AE9660DAD15CD90E03B0D2690FD1590612D8F20B041
+BFC35DDBDB938BBF0ED67CAA72D921E339E52776428C7E6B00B9A6DD07B75ED9
+D6056FF44F2BB926B91EA1F16B38B67A02E74D49EFF7D115B6F4D4964C9574B3
+27B07EC511585A0CEDB459A564EC4E7B47ECE15B86533F76C8D12F06EE202BEF
+3481875EEA2B97069A5CDADA106B3104A51FB8647E2C51715106C1F7A6A50429
+42A04E1F4CCF1F6CDF0C4CF0C63938363D9DBFEC38DAB92E8E471F61320D6C8C
+951BAE8FE1CC0BD94F5A971B17CB8E64F484B3B544BE05F4EE897062DD64FE61
+C39A61F6C2B88E2F4239771A61AFD767921BA791C6F0A001F169303770F605B4
+72B3B4598EE48A9519E21F3A75A58C709C58785F19F421295A297BB4198F1B61
+103B072CA3CA6CD75853E83886C9B9BE9B70C0831ADB61A9E7DF2C75AEDDA73C
+7313C57C30BFA13F4637E4CA1C8549E32FF3331C0D244622887A19BBE2C1F612
+7F277BF46050B22E01543A69413A4CC4098A1BFDC6682479549EC575F167CAEC
+AA88ABADA7B85152CB44D854EA27269FE0AB384F1D558A61D845C499D4451512
+BC743A0ED9C683330C4B1CF539B39AE0DB9D3EB939277BDF576C88C83109D2C6
+4023A2A08E111EBFF60CBBD686BE96C96F41A0D50C43671DC056BBF1008465A9
+A64B66541E071A09F81D9F6E461509FDAA67515AA6AD8C42D3C518624B27E0F7
+8FC919A7539E560905CB206B8F8DFB6B4D4A3E2ED09D2D8F7821BCBCAFEFD1D4
+B68FB376524546FDC0A97E87129DE4FFDD6F819FBB461740F89CF7F345FFC677
+31D2B94D6877CF0221367CDAE9CC894F48229741299DA6C97CFB18C072C1E8C3
+74CF8553798D6D76BD7FF94CA9AABD099E5C36DE9F5551AB228945E2DADB6B16
+89CC1940D107CFA8D851B263A3CA8A21C0462297C11CB64BB01B698A2281A7FF
+D60EF261B899D5607D8CBAF641A4E628FBC72D60C04A4F576C7D738E835FCEF2
+4892D4C814CFC0DBAA027C9DB8862B0D490928F8F4E5837D30ADDF62776268D3
+3E9B8F4EB5B2FB36EF0DF7A70CEBF5CFB697F3142269C39B1BF2241E66D610BB
+A7694BCDA251CBF4B78F3EE8713C62E4EC410F7E4C6668C8B2DB766A5635D746
+4008C8F1ABB2EFA999FBB6B525B932D171D056C2E2C3A50CA27F00976F249CD0
+9734997A9E5607F397D541E527240B0D7F10ECF8B914EA6E68741BE50B8EFD23
+AE3DD074A1F9B954DC54C7261075BFA17732A6609912CF1B1D772093B57F9F2A
+A40CFA1D5E5FED062D3117578047F391FD5BBCC4706354BCF8A71B74374672AE
+C55DAE676FA162AE5CFF0CDDA4AB89054EE4574A7D92EAE47CAE88BDE8023568
+1999A8BDF4D39A85F5B80181997C12B7CB694FD4A88C9EB5F53DAFA3A9A9C809
+2B231FCC16FAB85EADEC318B425968A7C54F7EBA066547AD3231F03032123FC6
+507D007E68E9D40DA39F3491F629871568CF7121EA9708B3191E9FCF490A1DD0
+49294E271C5233C620085B0E17B299FA74391C925267FAA3C843484C6D128391
+C61EDBB041B68E12046AD3FC84893BB7986FD11A8724013DE8804A991236DE8F
+05D5F5AABE8969053439DB617EDA10039A4ACE392B74AABC30BBC88C964A515F
+E45EA4514C6596BA652D2AC24C344FAB9AB60AF06DD67D206A9EC6D2086D448B
+F2912632A0683737FA9C3D8EE41F481EC45E38A69A62BD3406653A9865DD5BBF
+092CA273B00FCEAF637EF91F2EAC8FC3F918374BF37D6DA7D9B672079CDB14B1
+FDF5FD2A1A9D2CEEA05352CC9BA0E15C36FE276FCA8B3321398B52ED481218F8
+2D4C0970839958ECCFD5272CC24FB89F7C6939BAD890479B968F31304A9A9CFF
+397575FB17E659CF96D97518893E8A8BB4A0C5FFEBA868E934BDBD950D220EC6
+D544ED894C46DBC94ECC23868D9032C34BE24C001941D3C0F7D9A45EBC484461
+33EBF1169000A216CF681C3D063F059C3B96BDF40AB2DCB05E8E00E60AF48005
+4A67F68B12B05008DF91B0DD20179F7B952442829C61C26BE83F5EB197BC2E12
+7D709B1846892F62228FC95BB4C1E74A2DBF46F5236CF366BE4B33FB3523277B
+C54C4DD8802B76E91CDEA43337528BD330404ED7EBD7621FBAFD98914C594685
+582CB00E723C7A11C46BC40B12F60A3E87AA1C446D12B30E96E3534B01689402
+826390C77F8EAC409EC862729229176669DF5F0CA76211D488D8F4BB640DC688
+4CDDBF5F70343EC761C3BBEE6D2118FC70BAE47CF96BC3EC2B8696BFDB623DB0
+3C70A0871D154E66D442691CFABC82A7F7FF60FB4F59034B0A7C861BD1D1AFE8
+2AEAE299629EF9E8F49187600398A754A438A90766C59FBE6783A7FE49E91159
+74B0A13D39A33749E6DAB8BA984625EDC2EFD706FD11E045734060A12F3CB062
+3CE9E75E27DFB86DD0F079AC466B30A7E341FEFFC1063FAAD0BFF7E0282469DF
+510E91A3D10F302BE1BC528A61978DE2302991984062B0425ACB57E4E58D630A
+4323EDC9EF3638CC2ABCE45AF8ECBC345F4B42597A195AE44CE4C8EB5783742A
+A85420DC9D705D9448C06462999ACCBEDB14A38ADD830EA114D3BDED2A330168
+8990C5B3C9927AD20421C73EBE625C3A0878356C1932EAAFB5E3C33C552EF85E
+E7183B6A4A10F4723BC8EA575E06997A5EBD9118C1F7FC09358FD5F67320F41F
+5E59B643702C9CE225B1DFC1560D43AFE97EE05473F01F1712BC4F231D5F9411
+D8DB9DCF8F7FFF162EDCB0B527B95E65CEC8E543A58E630B42066C50350B6478
+B2B3690939FAC219C728DC74AC225C0362BEE0BFC363B4533A8E49EEFF039A0F
+4A7DCAA66E713815565D09E56307D4F90DAB6A4A1D2F1A4E2D2E0EE972B2CB2A
+D4521464C92D5D4233217D7E88E29DB58DB14D2A0A0B3A6ED4F12580B99BA448
+D5C334EF3DD9F967F557EC4C563EF5E62E3335BE12BE6E2DB25FD4B6C987E7AE
+D90F1225181BC85175678B460A6874DA2339E18560895EA3767C735556FABC78
+FD23C5880852BF73E4F3255CC39570A5E78B5868520351A190FBC665F5DA52A8
+683EF95DE112BE589C83D4F1F110E95CAC89237CE1C60E85784B47A5A1DB8AB6
+DA499278F84F30886F02C3CF96ECC2972E324FAB8142D8B125DECCC5FE60EDE2
+9932CB5312A7AA1784A95F823201C019BDFCCDA89C9E371B4ED90D47090328AD
+2AF77C8D0ECA90EDCA3C0660DF163D505039D8EE93F94929797E718C5EA0EA4D
+0029B3523EAD5E265B57D7FD6890DC5FFCFC778891FB5CE7EEF81D92F65AD922
+C3C7C104E7B70B2248751A41B011A02D14FA3071A1867253F740F64D30CF8AA2
+59F36C0D9A13760769457C4CD3280C69AC3C1C8F91FDE59155CA414B1D361A5B
+AF5974D3D9BF7C0A4DFC9B26DA570D6DC320A0903F68C235D8B48D2657634F39
+C61D1AA61F8B440282A595D92CAECA93514C95C4766FA0F9438EA4CC74DFF726
+A469C4CD12C7E0C4839273F07CC40E68BECA3E9A1F7BADC2EC2715E245381FF8
+2059BDE75E2B24D75078F02F5EB3B3715976377F93EFA2926F0221E40ACCC9A7
+E6F02D7F941BA60530D288CF90C08824A4A9F2615DC2FCA83EBA1A053BC791EE
+79CD8D190D8049C7008FD0344E71593F8E4FF5EC18C06F9E4E5AB0CE37BC2106
+21851001B64989C0F3025B8F54FD552CB0C8A0734E017CF5E7A386EE49FCF784
+9069EBC5C0F2E194C128C8C68DC61404B6DE8C00AEDB5B73B63DCDE4D3CA3C91
+07A0A70A989513A69987FAF3081F685B531D1CE696F30BA358C930DDD1F1A9CA
+CA644B4049E8D48681A28BF94AEC4C614D491198D546491B5CF98878FFCA6EB4
+5CDA4587E4F4A29EA4ED218877205047E02CE56308F30998D4C5AABC407D870B
+CCD82CA6213C0C8C33F05188FC889B5E2D9177DA2786FCA47814EB8972F327AD
+10A6BD705A5FD2410ADB1141AB915D983375D98855158BFB30B12268B369C713
+995B6171C57787B77DF3B68403BBB01238982AB96F5A234DC03A28A583150141
+E350B88BE1AB3F6FD527F77A81902EAD8CA16036E58E71AE0D4B6807FFF82138
+514797E0660DB085FB7B5D2800D810E02C52E1EED3BDAA68FD762DECBA97621D
+48DD3695FA30F43A522C8454D11C10A14C6BC087BB89CF01AA90E488B15D6CAB
+BE0F03D392773B6989CBA54B96C650A19480CD258796133D391DDEBA5154FA29
+9076A0CCC2DB735D76AC16ECF5342066E0888FF0CB331E8A7163E61BB7614695
+D7A158E75B4C615CB479B8891CE74FB85020971398CE090592D77BFF366E2061
+43016BD3AA25C430E82CAE51805E7104E763F3384E5E5524EAAB713A716F2864
+F75850940D5B0DD0FF762A67B9FD01F764E37373FC8B93F9F8F3113CCA8192E4
+E7784594C332A45E59D1D51E5A94F4D30F8C98AF1809ED80BE3E41E43763CA4E
+EF29D958DF81A23242C0EE2D2D33728EC9607D3B1FD9AC2F6C4765842F096C96
+0DE02BB223C1E08B1B59B89F910C733DA201EE25278042932AF5A84213C65D96
+DB688642E372DBBEECADC2B35ECD1D100532F75FD289AB03C69C2861593647D8
+211F8003F6D8CF68B93AF8DCE22DC41A0B713975E5A3C7EB3F5BCC192D049EC3
+3F567ED47F4BFF21FEB47210E8208802CD3821DF88DE91A039986BA01BBAB2F1
+8B130543481B5D80885906DF90554446993C971F8F4C4C915A09A34D4308196D
+C4130E2410E08036439D90FA09B68AD5C1534138516AF20E5BECA10644AE194F
+A8606A596ED64778F1495267916A934943B1FAA889AD41F607DC3F913C8D7478
+24FEE870818C89494C12D643CD0789E0E15A5363BB51DD3F707FA16638890471
+3BB8A5D5B977812A2274B509EB420B65FF65EEBA0032B44DE47EE14F4E2211A0
+263355B4838471848AF71F2C3105CC45B7923F2957F3BD0379E807A641ECBBA7
+16096E63F2F19706CBF2C524E37A3D160AA480C65F88EC87EB223C6F9CB2F2FD
+963641AA9E7A4C386273770E0EA24EE199BDF9E18B1EAEF9F78894CB3F111355
+004F40DD08242774CE4F8D9C33391D7E40DD0BBF8FCE9BF9750D9F575D5F2793
+98BE9EAA359FA73C5F21512D49E61831EF07219DBB670AC6F1CC8CC238713F5E
+17CBFB8D03B475A7FCA0554DDAC44827F7EF8370CA
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.0: CMTT10 003.002
+%%Title: CMTT10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup
+/UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT10 def
+/FontBBox {-4 -233 537 696 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT10.) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 34 /quotedbl put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 37 /percent put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 60 /less put
+dup 61 /equal put
+dup 62 /greater put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 95 /underscore put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 124 /bar put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3
+7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260
+6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89
+14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0
+0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397
+3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4
+BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F
+D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0
+FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB
+556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F
+8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E
+F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB
+B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673
+125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787
+A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77
+4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC
+56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178
+E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F
+15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385
+2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9
+05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390
+6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD
+04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728
+C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4
+70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA
+4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A
+A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473
+62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364
+240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D
+69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2
+ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84
+121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4
+0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB
+D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A
+0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157
+D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C
+550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844
+CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A
+9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4
+FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F
+7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06
+E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6
+50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A
+2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05
+9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2
+44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE
+49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9
+385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091
+8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011
+6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C
+EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0
+E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB
+C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE
+484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29
+4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0
+0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C
+6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F
+5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C
+1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3
+909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8
+BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506
+CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0
+2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0
+CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08
+EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811
+0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6
+9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A
+D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4
+21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0
+7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F
+52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A
+FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD
+AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7
+F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429
+067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E
+E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431
+C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937
+5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B
+0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD
+CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC
+2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD
+E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714
+56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957
+F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F
+E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F
+0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D
+67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046
+EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7
+CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8
+9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5
+9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0
+C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861
+327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203
+F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC
+60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD
+A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4
+B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5
+0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F
+1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1
+DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D
+55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C
+7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E
+75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5
+E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149
+8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E
+F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB
+8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F
+D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914
+54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0
+49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9
+CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0
+34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276
+1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA
+6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A
+DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4
+E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD
+4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD
+2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC
+ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934
+3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE
+97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C
+FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570
+A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF
+639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4
+D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615
+E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2
+1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E
+A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3
+F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780
+5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5
+4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50
+664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844
+4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8
+35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04
+1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6
+01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A
+5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82
+2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0
+DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C
+BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507
+39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1
+C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665
+99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481
+7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE
+D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8
+6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184
+5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38
+6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B
+F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81
+E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9
+39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81
+7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5
+ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77
+6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882
+2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230
+1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41
+06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE
+5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A
+288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E
+7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F
+759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF
+E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E
+03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A
+6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859
+314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266
+74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D
+906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36
+673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E
+A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901
+931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B
+CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390
+E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1
+4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136
+2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE
+F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B
+E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE
+E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE
+251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71
+7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6
+46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C
+E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33
+DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813
+F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46
+507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025
+46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49
+2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C
+C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23
+CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176
+57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6
+788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B
+A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C
+C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505
+27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA
+1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7
+4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46
+F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F
+2FD466826D4E666E3A835B98A1D4AE5D17053A6A648E26E77BD08F9A3E02956A
+AE82C4929E9666F539079846527D0E326FE7CBBF86E3722BA3E53F8A5121080B
+ACF8D3C67A2A1DF624B9DB92105D3C833F5A6ECEC108E799E71AEE8C115164BD
+9BF92B1A79C9C70903BFF007CC14BCD053321843A4D058E2997B621F6D78BE4E
+2682767FE6AD453E8ECC7BB9128F40DFF158579F19F59A963E9F90F4A8468537
+7B43F208A3F331903E4BDBDB55B109F616080F5B72839133DD440ED164014190
+3EA0A2D9E4025F3673F451FC750AAE00426378A087703DE8A0E2FBE65E92CE53
+46A620A86D567625828869A313F460F2E492F43AC008D10AF2F16800C9F1CBB3
+722F9B09D7ACB46721B595A0300114C181668B6A52D6B793134CFDF4212FB8E2
+A9BA73827B455306723580D78094F93E5F296D142117EEE0C10678108F4F201D
+73950AE7712630C5BB9BA339A01EE6FE3D10904389F167F40EED0DF7959BF59B
+948CFCF59A38CE6C5A7E6D491CE524EA4DD55089935E739FF03071940B30F2DB
+B3874138C7E049944756032C37929FA9FFCB6006ED7AF9A8C96E60D29CD6DAFD
+9B6F938D17831150AF6D6D3A40713EC3DDD0DC4557F8CFE64D26745BCAFBD0C0
+F9B3F1DC61A8CC3FBCBA67499ABF7E95F1001371EEB6651E9F45968877E634A6
+9E2B4C05B2CA456F20DD647958F52B9B406E2567A1D3A0AF7BCC25BF3D33FC3F
+C7BEC229B2E699C20376B5296C96C5E194DBB1E00F77A0253298FDEA99D4352D
+E559933C8B4ED15B273993890FF3DB8C80AA5F6007F183998A578C4859B55B03
+65B017BB3E6B594FEA136F2ED0C8DD4EB6E2597094ED95BA1308E9DE0647F24B
+0F0A87E0F22F9EEC3DEACB74E93BF7EAF14ED4DE5B88CF2EFA478EA7CA1847CF
+497E30DFCE442FA25A3A674D43404E33F99839FFECEC5B7AD60F1A573995A4CF
+218F57FF4AC6601ABBDAF4707BF49397EF9C301A8ED2DB8CAE6D0DBB24CC5D31
+2E8E0B4078AC0085957A5F57F992A6073460C5355C998F53F2A4D4593C535621
+4C59D7E977F91D61A3392B13C2BA2A28A23141A31141F5E1FE73400DF0CAFE3A
+EB04A693DE5A28210BA19F0DEDF5E8957945A8BE6A436751B69886F139FC1828
+D74E086DE213D49CFA852B7D0B0AAD7AAC498D74594AE3ACB0EC78FCCFC4357B
+CA2054BA1990BB8A95AAACC7B0179AB6FCF66FF8F4B560485BCC17D48545747C
+63BB45E069C587FA522B7405C50031799FD9C1D86BA33951E3AD80EDDA7B0A93
+01DCF2CA8CEC95864961669C3B1CC47CA8EDB586F8C5DD092FA0584834FF5913
+302D8ED2AD60CB6E88D97422650FBDC39FE0CA0772310DB9B2DD514EEDC7E235
+C3DD55C62FA36A90BF4015CCEA5FE4C0CF761E921D7D2992EB24625547D23BCC
+A0DA11EA6E1A14EBB1BB30F36D56D948E3FB6C1D1FF75D3E3CF3595D95F0A44A
+A3747B7A4C965C165EB05C81BE2AD99D3E58E89EE14AC26D52841057DFD6FB1A
+35F283AAB29CCA2414C2B1A6AFD6F7301B381FA9B54CC419DC57912E4D27C343
+7A0DDFF3B037CC8796FB9DBBA8CDF199084C895B984EBB5645D17550DAE95FE4
+5E549750B3C821BABDB24AAD669BB39A194929273A670EC44A26C32A540E5722
+FAEF86223FAFEB151DCD5254465FD8F4D8AD1B2FEB5648089AEAB6571FB372D5
+5A5B940DE41773D7D4EBEBAD23AC30CF20D85873906EE60DD2BA25DC16C3377A
+4DAE8348ADA3E2B926D585A021718C7C723CF5B9CFABBCB2EEF5936C97F8E385
+04F42864A28D9360412D0CDC28C619649FAF3BC7D37097EE1C0FC0EF8E45BE65
+9B4A4A6CCD7D87EFC1E935772C95266A07DF0CB05C0AAC0D6FD8C6BEE3D78020
+3136B379786FDA4E0AFFE56A55E18E0B8D3BA0A6F277009F6952BC47860BE798
+E821B0F5C040FACBFAB084E61F6157B02EFE0D82006C0F178E5840C74F31670E
+47568AE1071CCA58660CE3DC79F49A0726D78C6E2E6F172BF654FC41B14FA90C
+34D2B74537CA958FCEDFA4310F73E63E16CE1A8D75C3A85CAB5CBB66B4656EB9
+A0770C242394CD61F371B3FAE0E757B49F463D16AE2FAAB168FF8DD6EC74958A
+5A0B4916B28308AD5AFA651359E253BA9D986A996D52A1564D831DC3162DFBA7
+395913C4322A80D31B46471F2E852AAAAC41F4942C3D571ED736544886B06FED
+227A1E2FE3B898C4D33378ACB8ED7DE1B2B4E9424B9B9B156B1E15A51DA98B08
+113218FE22F8F800496E3CF64DB58F1224A3AFF3B32337BEBE551683600FB812
+6CD9C5BEDB81E06F077F1F30A2A335C957B22C17EACCECA256F6E83B7C624BB8
+B2DEADDD475CAF795663765031E331E89418AA83B56B99949ECB190D3C1747A6
+19CC51EE8DF03A30F6717B655E63B314A7E978ED7D3E2B4768034D147202B233
+E3C4634AEA50366D6F6B5F29F9CFEA2C3E3EC8D8BABAD5A79DC1726F848A5091
+038C16D5686027466C2FCC910A77101C59F62AEB10B1B6ECF924FC6E077DC85C
+01A554C85D523D3A9FB1ACA0EC3F0D0EC12FAACB45CD55B46A180EF473DF109C
+6F558AD2B4F9BD9B819D846330B9FD93FBBDDF215D648EA6757D9A16E8818625
+8E820518C7A93A33292AA8EB7A2D20E3F2D3EF075DF53BFBEEB2EEB9B0839753
+E41BDD52A8C7379CAFC3650BFA2C6B470701C381E3C1DCD553857E99E01913AE
+B2F604100E661710575854E6ADBA1EBAF6F43CE0296684D085AF413679D11F87
+61EE702F6EA2412A40F4BA7CDB3C5A87390B74A53925639BEF4B041A72D72034
+630C6EF706F76654D15514149DDED52A5739F2FD1D391E43EEBDB9165741F37D
+0086ED284F5BA9A35A956C42A91B892540BA5E7D1EBB5DAE8D637E9AFD84A6D0
+B02562D31213A88DAF27A226845DA6DCF3C2CEB5DAD4E1C070A02F9A0BD9CC4C
+3BCBB95035F359764DD3F3EE7AD19B7596A6052549DEEB43FDD45B126F63D7D9
+01425C1B2F29BCBE8C4C38735473D24A9130DC72F01D2E0D1B6FE557B366BC9D
+27036A0AA9AE19D788FDC3B881E8D9E394B77D8A78E53CE3578549E543259A7E
+6179D3B01FB628A989A9AA2D81145A363678005D70532852C47336ED4BF55DFB
+5A8F1095C41EBC7312B22701D077EE871EEBEF6887C6010A80A0FF26206E3C53
+9A605C5D477581D55988A024A26839AD10549B3BB7D7D4D90EA386F3742EEBD3
+B833095C9C2C4D08ADB06703E2A55D2FD5283C16AF4B707450A0E972B78EC852
+CA2C81A83134380D705BAB53E1B1820C8C910EADC5B34B979A71F4B8305FB448
+5EA4C7E597B28CB25BA410DCA82B204C1FD2638ADBDEE8383720541869CEA61D
+0AD84E3911594ED6E13A3B77DA3644870E8D74FECB21C136671E774C0C8666ED
+59B782AA6617711050112F851F21B7A3BE83F6D86151E99FD388D8CF9C6990BC
+F913FF8056EEAD9712D215416383B76F99028669D0A3CA6520A470DC659CAF13
+59A9543EBB50DB5AB42994B1D99EF3BCC745BF8D5EA32B9FEE02E756C36E99EB
+9A5ECF07113B4D00253CDF8113F7CECC3933D1AF4B012E93FB8232F205B8EC44
+B1EE76C430774F4C534348537A608057A25BE6D308F1A56EBEDCFFEE2475187D
+84B8CC318643F21230EBC751A5FDE624D108B8416523C3483A623D0C5B7FAE90
+7F4BE4E7725BA4FAD400A7B6CCCDA64AA8FB2537E30EA714B955D2135D1D7158
+25702E47BC189EDBE013B9EC8443B623F1E99326087886F0F0EC2E96D9F3DF2C
+51E4CBC28B09D6A16503152E86CB74E816741754BF05DB7FD0843D0A55359E23
+D74624057AC393F09AA028AAA6FCBB7B997C4288AA1C8CDAA21757FAB963EFF9
+BD9CA73F2AC784AC05485D96CA5B9B2CD91ADCBCE70776ABAFDE2E6773C2C3A9
+53264DD8B2B9D7432A1C49E40374611FF00AD15A6354090326C7292316AB21EB
+54B877201BC8B6AE43C6E6422C5C5EB2B6750954489A2CDF287AA906280C9096
+C595FFF3DA9644FF0DC15D8B8BD6BA71B85DDAE5B2DF9B334B608D765F60C86B
+69B8FC144965C93735FAD3715F50DB7509D29BBA904F3AE26AB537FDCCA69BFD
+FD08CB7DD033A8730EBA7B4BC4AC71A93E3CE16A885D07B25B7B1EBF67C040CF
+5179E2D01D6984F8B2F380539DC364476FF93844078AEB61E01063025253C2DF
+FDD72E3DFCC5B9A5557B1E023D55BBF238E22090A51F67B58CC1266A98B0FC14
+414F61D414F0980CA049B7BC10FADCC452B42E0FCD00EB85F17349842DD0635B
+4A35B69D8CB6B6B0327822A17BC97169B030F1FF79CE6FC78F990C05D55B3903
+A613D57399B3A3D21FC2798E520BF7CA4DE6104A1A4D3E36A252CBC1146259C3
+B0F72198CB0F71D358DDC84DEEAA841BA66BA90FDB08AE0F50749E629C8254A3
+56B61A40D07906F44A36225FA99B2832F8EB8F7503A26DDE3719727AF026C26C
+E95756FD4B39F7C76AFC12B809DCB19B855A974257F07649A7F0258639480609
+A902A44FB03B76DFC52CE483D29021B78486ED6CB67C5F377AB3746CF83168EC
+80AFBD375553A4C961DBB3C5EE2364926C0B1D80A0D48BE5C3635E2D6F86DEC6
+B1FFFA6F31F9C709F414A2A651F0B4C33E5F7D5966143418D938AFAEA39E0396
+556C7B98C7186D5E72670D87247C399F46C737710EC2246C2678DF15A9DCACAE
+EA4A9B3677A140F61BAF86BE97F8129ADE24645C7392AEFB2982FFC2D42D01A8
+951254831ADD179B406407C8BD4BEA9F3ABAAE3472D6E8D941141E4DFDC94508
+B5A2F9717A06C6E31638FED467387BDFAC6DB468CE69ED6DB61D25C9DB2FDCA3
+BDED1F3141718A830213395A2C137DE4C0BA4D7BB4F09384D29B5F195D8D53D7
+88B37D3DB950349036DC16C14DC9F17C43828C916B983712D0A580D4E32A2B74
+56D4AF6EAF36EA21829391AE330631885DB8D0B72A0251430D9C120EA1D0FAFF
+6200ED8CBAC416EB1E2CBE8B1B3A293F5E162A723EF096EECC961C22E4632784
+9FD4883EAB53385BC485149AA5D86F1F4C3E92FC9E9F56DEA46961654B17CB78
+C4360DB743A47BDB14BBE347AF46085405C754AD49BB1147C4D12BD0DDDFB684
+C574A7DC07BFB9D2BEEE2B18CA243CC3E8AB71DA492C7BECC2678ABB972C108F
+892C852E61A724883A97D00E46454F171F7EFC4E6A4EB8DB3097C3BF1E4A1DEB
+D7A5C006FEA293E055991451EB9EBFBFC143EC7F77DD064411D8F3A0B71AF39A
+60F4742610B6403982BE2A553D70B02DA2F4982778591E6DFA1DA550B8E6EA58
+9D03784FCEAC3B7C5B2341FC09676827909B4907866CD40FA5E8EC7AC4C7EA03
+6A64D1311105112AE10C41671EC160DF27F2800EBDCDC76729DB05763FE422AF
+3C60CF401EAEA1EAB523542F923DB744DC30DD989030E92BD7D4D057077C9093
+0CB2005ABA938882F64CC87332CF5E29C24E89CF720E6852C77C5B76B03E578A
+BE923B6537DC733CCC157B8E9AEF575A185C54A9C5F3233F9AE277233CEE6674
+E9CC65A71A1AE5A9243D731D09097479B1DB0F76CDA9EBA4F8FA41E8270E6D19
+5BEA94BE0872408E6DD461AAE62BB630EB329F9CFC05D77C0D1D0F013678CA1D
+4A3B6343F07E5DA453EECE7208EE6F20865276D545D21ED3795248A3E7763959
+15E96AF19750B6E46F335AD1AA0C8A25EEFE4227FA0D6A862708169A66BF8B60
+093707E572276AAE0A4B270E83269638D85011BEDB42E1C84AB5A059B17414BD
+91A7C9991DEED9F2B966293AD345B2EEE43D2BAC0DE6C506BB16D033915C8409
+D1FBFCB24563807639FCBB98FEA16B1389393A028F793888DD5E328E92BF06E9
+D19632115FE0378EE2A5A6051DA47081C16F14BCFD4C156CBE2845A2D7F970EB
+6F09DF06CA8160A280C7D4618CE46A7B74A0C7B974CF03CB78D61BCDFB43D293
+4C9A130C5D019A871EF1BC1FCFE8BF74C1AD74B35DD901096C21298A1B8035A9
+9FEECE727BE4DAAFB1ED148E1B489FBCD7ADB3F09A54ED7B1B5648017503DD1D
+5F85ACF9AD6DABD53F72995FAFBC16AF1CA1AA4C755C1DC64082088BDC35E975
+EDB86D7B380B42B37327E6A0F13A87D5797B553238AB82D2FB78898062F8D9FA
+24AFA6516894E0C358037742830D43D777E6E70657D9C4AF09D4670D22B67ED1
+77A5402F41D41F504B738AF2410E7FFF42942B72D283AD1C73132AE54F941DF0
+053BCB8A0BE0F154266517AF88A3B27F1250D1A89A9CCDE7A0A9226756A46A42
+C903A0B6CD6AD54065B7832AD9405C3F63E073C21AE702D0836EB448C5CB2B8E
+5FF61573EFD0AB44A98A1BB774C94DCCD28125B486A0615038D738F165E4A0EC
+FE68CA300A4E0A60ACDAF9CEC258194C3E4EF1AE84EEBB5189C7EFC93E6CD52D
+89FD9DF13B12D63A9F4B7199E845B809F2ED78ADED66B0901FC0FE41DE7B121F
+FFE81CF02E2D6C9427F60E6610A9254C4273997C4E03B4C8C79BABDAA037C321
+45260C6E302F5E07A926D93ACA5765853C80063553C04F026BCC0C2693B6C397
+EDEF3E44B316BED779E87564FF0B1C08CE709196CD532611245E4BB1DBBBADED
+7F7CDB800DA1C4306AC7FC6A272B2A68C52F9CE903F9FF94998ACE0E17E49621
+5AAA85BBCD7CAB507AFEEEE714BBDB8DCE627A708D521BCDEEB51086A7FAB01A
+346233863166B41180D9A1A2EA6060E8C43740126B84565B99832D8FA2A7C8FF
+8472E555268D36641DEE11D56C7E28B76E66458CA9E1477C76A3C1D7678399C8
+FD3BC9A57413423E4A120DE5EDEF7F6A91A1028E461C70E5FE2AB582D2877CA4
+33141945D12E9A56C83639EC8095F0C4C3DE5B092FC3C1DC14D7DCB4265D6332
+477F40B046E0497B16FF63EAD1CB182A65630FE68494A978DD7D035EAF1EBACA
+790EBA434E902B5F750783065D838F0DDFDD675E9313FC3C1D01F325DE96EA65
+BB340E621CCF997DED0F9AFBF55F79301756262BD67525640E89F2B2114E3082
+B03BBD94AF9D3DB8F8A11884BE81B0001D0DE5936E270E3B2D4EF17B46BD9614
+6B4A31FE6AF9B86C83E52F719EE21251D9A23C91B9255F66642F310CA9C7875D
+1991573AF6CED04F3A8C0B3B60445C90307605B455FDBEF0AA8ACBE47AFFB02B
+B5FC3049E13997D4EE486941D98BAF27E0C6FAD0D653970EAF1BCFD1682BA70B
+E4BFB30E441DDA779F22FD158EB4232F2E26B1A3EC4E2DEBFE6D0B70D54700AF
+ECCDBC7606AC3F74194517A4C703AAE078B385A2222275102ECADE52C0FFEA46
+5487913FF91971B4073C3E889692661CC17B9B45B01E9BD8429B46349A0F819E
+781FC4D43F165395E86DF551586DCFD5546A189443B3D7A4C81FDC62863DEACB
+4F663EA1DAEDD9B20790FC279435C60875F064D5A0C5FB4820157814A292A244
+6986F05998F6C21E840533C618EF9DFD9B6E5EDAF4CE7CE892423CA613428894
+6133BA0A2FA1A5478E5F79C05A4B27A718B1950493CE7AED578414EFF1231169
+73F145A5393FD5E1102C0948BEAE6481922DB71C2C359CA1B52327752118988F
+7B2FFB41C4992C8C1F0697BD304689C76E75C0ED0022FAD9C2D01A1E76F9D93C
+858926BEF9EE3BAE42815C74C9D499651E11601E531586717ABF4B0B78C594B7
+BFA90E23C7B02DE297C6E93BFBED86507DA3B4EC53B9C8A5168FEEC4829B8465
+23CD69D11E298BEAFC061A8E8F57B97971F162FC98E01E7F16DD99CFC7D15567
+78C6AB502D86FA309CAB9C0CA44BA29D993A43E3987FBA1720DBEA68DA047363
+7D6371BF6EE2AD36E969876533ECE6C9A7CEA474FA91FC7FFD555C02F7113320
+A1614D6348E1DCAD3D9A75E0D21CDA9754F6DE9216D82A9918AE05BD0625A40E
+2358DE45673287BA6C0E24A3B5B89FDAB961ABE89A50D852AEEB0623A9EDB32E
+0D19BE36A3A90FF90113CCFAF3C972C320891B10EBAFDC7448FBCDDBCF2E230C
+2F8E2426EDCB07E7D218E9E5A4A854816614F11AF346B2A8DAB6AD8C5A7A849F
+7A940271A976F0AF6125EF8305A3EEE2D6F2739D4551945C0860F5FDE94A1E46
+26A6F6AA6FB05C816BF605ECB0FEDDA636EBA95E5F344757182C8D5ACFF4204B
+2F7D7D0CE8635F739C85C410942D50CDD3C9CD1030396C912636B70E3BA39062
+14F6C9E5FEFDBBA73DE2A21C85DB82EE90E122184F22D1F3A81774ED2EFCB0E1
+72F9EC922DB5902D461372987CEEB3875928C3250C5F104FE13C0832CF67B259
+F0896D97FEE2111C16ADA1F622B8D1A8755EC290DE5DB5F1BE55636D25FF8523
+29B4DA88FFB239A3BB92BFB3ABA7ADFF01B96295968877CBCEE6BEE6B355BB8F
+5299F58D8B8195B14C83049EA20F2159D440F76FF16243899FB69211F134479F
+57857F7A37BBADA63B05B538099B169EFCA1C24A2D28804069F1EB43ECEFA53F
+6F3A646754C41B4A44D7FB9269E56DCA46AB8D833D8BB304A0ABAFE243A2E0D3
+27FD8F7D11A6CB2FA606E64A97619FFB70FBBCCE49F6FCE1345D92D4FBE21407
+23898445CFABF0BA9C17CB2D5923B8B108CD85C5CC1B01E08E860D336D536F7C
+3A6DE5B8266A775A675FBF7987E0A0903489ABB6B2EB9F39ADA946E608CD716D
+A35A4DB4280E12381F096DB8084E67C219A1F41261A3D8F55893CA71464B0C5E
+11352E6DE02B664DC30C9D1D61B9DD1F18CB18E61B5D6D3C68654E73C1BB498C
+F92780F1BAEFBADF83CD2A91087CA9FBF6F0E44F31F591104710D97FC73B7267
+8A9F985568BC21FDF2D4F2D57A0B7C5B853E433ABE825A8E00C67CB0F0D7F17F
+9CB1AECA96FCDDE3E2F0B97AE0FA250977603BF38AF592EF8B16BB8290837DB6
+946B54DEC349770E002E3ED37C44788FAEE6CA39BD9F92705D877839D9D439F7
+D562A46B6E4734169C54176EF3739905134B5D9750B282B761FC078D88F15F44
+3C53032FF57F7E138D9BFE259EF385B3316230D5B5633DD6C86E6499B1D8407A
+E515624186DE334BD2CEC1C59427F532D40EB0EB6973E8BAE1F9EF281D560EBB
+ED94C2299915C9D44CB4B96345FD76FB5949D92C523EB661EF864A69A75B901C
+C181BF63DB5D9FAAC0DE34D591940B910F30ED16765C615BA38C0541FF14BDBC
+4F45802A546622763F907B14C6D4DA15FD57260A31644FA09C3F5F7472F81BFB
+2E28C3AE2B2376E121B628450765F5BC503ABC13FE9AE7D51AE2E4DF3FA9BC65
+A820E9C157B4DD3CD03B442E26EF760E90885214BE5B82B85F3F15F919B6826A
+1A62243D2B80908C219E8B909B242B0D13AAC8CAB165AF71D08053D3F21F90A4
+6E1E4B205481D7855F5D795FC92585BE40B8ACA0413F8E8C3023D538159D717A
+93D5578AFACD5DF58CF3B774C01FE2B34F54A5859E21623CCA18D148503D9CBF
+43CE0C6BF2755E00D2CCC9C0A26CFA90D062AF370A4B38D15F41504511EE85E3
+05BB5CD0D625A9516A315F3C9EC7305A64F6FEE415C3924006B6C8DC51E8360F
+C050E99639B55E0BCCE07CCF4C82B3C93AEBA793E3425035BBA5FDBEBAA0D1D3
+BEB37D764A36F0CC0FFC1D95971178DCDA291D51E38B8D9BD6B4CE07CCBFC89B
+6F01AA5705A0DB8C8DFB090E72A4AD1D6809E5E5A3A3D5D1025569B067BCD9BF
+E771635D08C7ADB9F79F7A2D6678C5048808436AC71FFB7B56A53B744EB51334
+C629C17CC49B84791CA976E4A341F528D9E1F1873429B6FF068648297ABD7D61
+0515D504868C582D465FE606B3E23E1D7E3B5D7612A8D62B62B1BDBB2FA2C97E
+49DA1918E4D3ABCABB3A7AF1A146BF75C6E15B170948F1120040D7BF42ED7F66
+F46B01D2E2234C6E94FDA904428AAE9DF2BCD90EDEF271DCC2013F85383E8F6F
+F0710EE9F041FD75125971EC7A9B2CAD4ADCFBC2D6E3FBE028D514C87AC809AE
+CC2AF28C17D6663F8A3D1987B969652CADE245368F45480F3874304CA6BBD1CE
+D270C7769C6045AF9670547C6C50B42DAC773686C516CBDB7590C36C8D9120B8
+4A746BDD11207D785A37E89C2664F508397A55D569D53207715A3B5B4F61C561
+2E02CBE86A393BB350CADC225BE8AEB878DB615E1C952A464D476FA980B0930A
+0FE713042CE23D51BE26B59038BDB9DA316C575D1EBAF114225B935327325FFC
+3E2400439EBDC816D70DFEBC114C6E3E301169279247344E9C9A9F25146A2B1B
+97A3C77BD42C1FE4A3354E60B07DF71AFCC4176D784FBFD0080FF3B72BFAC219
+49877ABB2A42AEAAE3E800048C011B3EAA52A40A03FDA3D2B733CD1D856DDBFC
+3A75ED563230D78F1AEAEF4BA28B6FAB15D23BFA3952B57E332E01B4CA5EFF1F
+69CE8B1D9976F05F00F52B3921E48CBD1046054600250558D2F0E29554FBCAE0
+AA4C7D111A4D0C91562F9FA9C2BEDC81B19921A51A58D9C0B2E396592E6DF41B
+AE8878552AE5291DDF655F68F83FED79169C7AB8493FE37E65F4AC20B70E02E4
+9C1517A1BE6D18ED2FD4D89464E8905CA668E4A46AEFABCA9D740D9FDD40EA0E
+42F61057E4BED660DF567335DE89AFF1EA8E26B579FA047D48011125339D30BB
+E3E8D221925BEFBA4B6A3CBE711647B9E782B41AC39AB898893777C7661BA269
+A28DF5AE4014CE550625FFCBC7F0E5F41B096AC4208DCB288E6214E381EA7173
+45EC0408CE52B9464274415774DBA549B59C472E7E9F853973CC3274F35AC5C6
+048D5F517C60C66E628A9B0EA9AF81B6619CAF9FAD608BC13733A48F8F61153F
+56311459144F43F753CD7FD97F97AC4F6D0C07CC4EA11B5AF1973A5909FA59B0
+2EFE434751222D9ADED186301FEECBE8CB768E36042D595897341A646DE2FE7A
+F3814D7F57E7CD02C34D1C701C038598BA3E6C298A67CFEA5851DC4D9D8717B0
+E6CE64D025A0FA9505D9A09C8F7C1BBCA0C2D41C6C27B99C062B4C0F956468AE
+3399054FC1D16317082D8FD4F81AAE0A67AD1E83F82820A8B472981AE085E8DF
+1654030EDEC3BEAE56BA4893E251D1930A065815517491A13773A6052C167FFA
+A56EA98B18A8B34B56142E12D22C529BE7C05FD40366FCF664FD1EE63274E890
+1BB5CE671C5814D4EC6AB5482019ED0F1FD2569ABD0EA7A3BA04C000A3C2844D
+F8543EBD799152EC375EF37B5D9A724B0FC9CC8BBFF30B57CBEBE1DE7419A73E
+19A4A7E61F818A1B4F4878959F410721EDE075BB8E3EDA4556247FC148F27863
+E9B5543A12BAD1A8738A5B86AC7881E7EFC880E5D3D82D471AC114E29FD97B1A
+9AC82C5DAE2DDB65BDA6A6F3CEB87DC0E9F1BF7FE486D695A677B5F6BB90F606
+73EA674487F466AE16823DCC9336373D4A938839F86ADD5F3F78622D2BE5B788
+F79D20F4161738A8B9CE1BFD592DF857BDBB049DC089B220F5F8769158692246
+F16E2F21262402D4F902FDBDA70A62031FB20546889B88254B5504022E002316
+1824C9F3D6882E3E909D2E9F261F542B164CCF16C556C958757E6D963C1765F3
+31B9E020634B1037730BDDA7D1B9860D4A942FD4891917514FD5C7D0C8E1545B
+837B3A806A8EF1243D479C737A771CD92532B6A65C944EACE25E2512E3661752
+77F3C3E41ADC8F37A62785F5706EFA4E969E536CB04A04D82D12673BDD42F2E6
+6AAA8E40FBCB25AB6905244DC429F6AD8989B7DA61440728177BFEA7FCBB0FA1
+5CB2398A937CB5E7E6FED132AC239FA42447BB7F3CE9C717452155E13EF1EB8E
+537AF27EB811F82BB4B2C9108EA26F89DEAC0F814F3DB10C7142327154FEC4E8
+D2F24B2BC7915E911CD64D902FFC96C399392E895E41820E380236D21649EEE1
+10229CF719F73CB88EF92E285D892CBA16EF9A1A719B84D6487C5B8DD79B8ED4
+13212DC011A52BF68363E0A18687395D608078A1D93D9B7A924A5D4F69C7A82D
+8230A924B995567080F8B071CB4CAD1CDE1C5BACF0F601D0D8EEEB0D9A3CBDDC
+AFD2C3133387B85C3FD66C88017F98364286E40DA0031703C831F950FAC419C0
+05014CE85272F4451B1C12BF914497F7A6CC627339D20459BFDCBA424A818DE3
+F208B830B3E3845FA1B853F697FCD35367B0565108857250067EB5FB1F2CDA20
+32031754760C01A3F0B7FA898E26BD89BB93B5B6616AD42826C183E05717F824
+D2F440717E2DE1382C22247CD9372793956D39C5C8A97749E9CBC7828C9A0BBD
+D387B2D16984D9E7BE93D8C583B17C4CE76A2014573EC04E11AC15EE2F194A5E
+7D9F9F42C7FCCD904608060AFB3F05AFB9F8980A40241C7ACCD0FDE7F6163C56
+0BE674B8F745D14E92DF5E62DA378F435FBD15038056C844598B612A6110057F
+12D5F0BE180C52D99D9BE85644027B50DF95864E944D85DFCD736AF24D9F4744
+A891548A49360BA969DB175021C248FB3B75B39B93FC2A2367FE341F1229C74F
+8A5D3465DA49468E7995D4E7A38159376F49E993589C07CEB3B26A0F1A55E639
+6838AFDB8A1CF5486E7529064BE8F019909909560FB97B7A3299433FEBBB7D35
+3F2941562100A7B138992F5FB5A2CDEA494074D3846A38BCB61B03E6DE12D302
+FEA8ED57D4E6C961C364C293BF6E817DC4327CAC9AFC8E393686DFCB5E7967A2
+B87ABC86F0DD252F519B7C2B191D7A676224BE8A8EBAA99F25A957F934FAC796
+D9354EE47E5538BAC06097C15A6A43B03FE2ADDBFB1825866461601C2379DF18
+8923571E3A2B4ABD12189B5F10A6B717273F87752F2DA384D04CF32E3CA37C0A
+3C690750CE8569647E59129EA370520530F635C971411B9007AB97E5203B88EF
+4F5CCF8361B8F29AF81D3A2A21E3881E71B74E6222C1993CF13B38F9316CA8A0
+D550B0DDA76139B11C7C5B0CD821803B7C4EC8AA215F6871762CB58143266F22
+00428E93DB8C793644192CFA033CCA010841DD1B4A60F59147A94822528B780E
+7B9BB9D81249DE03171F1156DD6ED1D5A9083F24BC566D722290789EEE14B3B3
+65111CA594B0F9A5924926D2AF8D3447CDE13EC349DFF3ADFDE37CC5A877ADE1
+36D98F98CCDABDC3A2ADD0DE6746CA36B00A4C6DDF72BFAE666F3F5F6B50FC69
+4F3C9CE40724AE4FBB5151AD0997672044859F898AAE72824728E600F573FE8D
+2A70E7D7EDA97415B118083DA4C5AE214F11152F6AE7D125F3E49C0FA81D831D
+F522B3E87528033757875663CF7824B4A733A331F1AE191ADFF9F5DB0F3E916F
+70D98B17B1CC5F69CA515D5BBA0BBE2CCB628A8F291C36998C660E6E0A127F02
+09A33F46A492CFCCED2A16E36D08416F7C921311F5B5858EFC70C9BEF9888741
+1949681DB75300B52F1ED0FBA8A7389A7DBC45F05762B1611B2588F6CB1CDFDD
+332BDF82576C2B79C968BD7EE623DD7CA10F29A92CA3FE477B8AC29A45D36D14
+705CC055373423037B5F09EFF22A9267275A2310D8567B58BFF4AABBE7F7A936
+EA4053D3102B3DBA08C9D40AA0F343A0988102F5F0D63817962AE461547E453C
+C7C27C6601C7456F5DC36F50A590631265EF717F5CF208EF8AE295BE7FD4647F
+AB248F379B5AC116581F2F2E403CA4BEEC375EFCF55E4F163ACF767221157F3D
+05EE9FD48B62896345FDF6F73B7272D8CF5D838F519739BE3029B53074DB52E1
+EDF2AB8DBDC57E8BFDAD5BE05D71BC9A549E9F6B709C0B600DC067A46B4E4B9F
+2B469F7F02B076543ABB62B3C3FFA17C2B9BAC3DDDB6518CC09573ABB44F75C1
+C47E1B2CEF147BB6C53E1BFB0D81E640D7B273A6F7EEB94A7F9D1A7C4F6B4230
+CC4F32EEFA01158B38EC9F0B780C2988ADD958DD4A09FA464B504E6D695014E5
+40AA0B229CA181CF85F5D359E975D9F70532435E78249A53DEEF3162452E365E
+A67F28CD8CF43773ED565C602D4BFE68781CB64F259C1F050ED4782FF177CECF
+2E468687FB5D24BA20B45EE0A039E7ADC6C817A9817231B7B07566E7E8BF7590
+9EE7CFF8A01B79E20278D3784E88A532F591C5B695C2CBA7B984A90F6899DF9E
+F156BAF11801078E8D0AB507B4377A6FBF17F39FD799C28D248FD501E1A752C6
+343B6C5ECB196639E04EF7874BE87F7683CF5334D8450BA6AB29A951624D341B
+39B3560749C162669320AF38FD7BBA155BB3CD25F371737405DC3A41440AFF96
+CD47351BA7055FCAADB5A7A66796AC5B92E5C04A85557D739481458ED41FB117
+8FDC878097AA53AF9930B2808A3D781F7D73CF319A964E93B01B74AD845B71E6
+99453B8776C52AFC1A4150D05C9D3AFE6E1691D205E6353E87834F87069CC0AB
+777B6A4B998214197E705BBB7528B75F47AC21F1FD2B957B43AE6DE375B54122
+1E92F5641B9CC1A1324A3F4202E9DD47C2151196E3422408601C31DDE39C9F89
+525C88BFAC73B04010D1EB1E23F59BB3714ACEE442DF02375C2A353BE8EC0538
+94185D1D265828C77AA7C65B0A6FAFCD18EB18BBB1C148C249268D23DAEDCC33
+1933ECB0F94F73008C977E808AA90028996DE250FF90674D710F4784BC4940C2
+FA8F749089D19332E42FF972CCF94AAA534DF2A727D42B20A0D7263990A36257
+420EBA7E5390268DAC93662BFB3ED7C797C43AC3520356247148B7975072E0C7
+EF801E8E0062BF4E2CF3B18E1D1601EA0F7B0ADADDDA7E4E44067B5631D41CAD
+1FFF6C6C2354DB21B67102860F86047B42C02D9804982772AD73FA003B262F31
+D6B0CF47D36E0DA51E21579534344CFF9807BD0B1651C750D0316C81344AD18B
+F28343F25945686A82C437FB48769708E90F8119E07453A267CAC1F7430A5877
+6D235C99C5B11A7A2041826EEA0D4067626A01EDE2D3BE4CCF0DD4DA8F571116
+975A729C4682C0408E98389C6F03E856DDE6B1024C124A41989FBC0EA7C041BD
+C4152E1E1254A792B005F48B9033A6CBB421D470955C2747327518142136A127
+7E2596B2C761B90ADDC8512A64973F36438731CB50AA5962693CB40F1A59C3D1
+12F06462C90F206C9482B875BCDD5F8B9DE765275304A93C6F0B1B8D23BCCA78
+F3A177D9216FCDBE9F813EED8F487736378B97CB14AB007AAB5467166B757B0C
+E8C35210D232815F7C78D24034AA48AB28CCBC7E3B6336BB6A2C002215A4FF6D
+948188757F10567DE5BD219E89929B36D068D4DE6B08A26DD3E1C0C67F989850
+1DC3665A2F8BBCAED83FB7CD598F06167D69A2B2E42E566E8BE9783088F16CD7
+66FE9BCF51BFA00C1F22233A15FCB9CB7FBA2AEC899DAEA48F40FD9C7B913263
+9D438B03BECA7AA98B654489C4C38F6C8E36B43570D2B3329F812F56D5C73936
+D9006851428C2CC2AB48E1F1AD1EEC76CA8765597A4DCD996CAB5C32BA85F72A
+6717717F9AD0EF314A42BEB6D94861DEFD497BC5DA36C6A9267EACF1F8590749
+78C9C9520DD446780775BBAE06FF26BBF2502ADD52A04831A54339F3FCEA0387
+0D69751B741DB97A032D0A06D25B154A34111B0BD8CB4075BC469EE2240B8D4F
+7FC06A0920F331A4EC12848E969B6F495DD92262349B9E46F92A99C99F13881B
+FB59B1D448057F943CDCAFE112A7CE39C256876910D56FC7EC456DA6DA7ACB43
+51D5B7BFDB2EB359A7DAF58048ABB438658BB41C43420E5C5B53715067EB80EB
+4CDF8131566DCA04123C130B0F09A759A9561801F6BDC36A90B0BDFF0AE38530
+9B03A8D5B7EA24C6061D844718863ED4B9EE0F522BAA3DFFA039CF5663716F52
+02EDFAD86A85394A1CE8E4014066000A009B75D51660BE7AF73725CCAE8CA02A
+5395AD2FD201E2C08325E78F07757A375126BE1B3E5659B873FAC3AEEE7911D4
+314B0F6A656A1DC11AD92CED1CFE2F14CB7CDE5184C463B9F904405E68BDB55C
+9BEF2A9683A8F31DFC62D4BEE64A1885350EFE2961AD4565D85D9DA6B53F5915
+4B0EE63ACE78B6E293E498CD80E571009C0F6108BA9EBECB8FD874D53D9C6CCD
+D34EC4C2C3C122CFAC87D8B9651FAFB2497B835CE41B65FC873FA6B05EA026DA
+938B88C59A1BF6556FE7441195CA9607D6AE92C95B43FA34EA9434E9043CFADA
+CDEF9C289941572FBBFEA9D145650375D70D2A60FB86A16C8FEAF5A787E0761C
+8B78594C5C126C506FEAFC6025F6D5507CD98A0502215DE6C8982A2D58702D4F
+E42522842BD598AC4525871350937C074CABF5F6F82C371BE878F2FEF8041C83
+57BFC5D07F71E11C9F5BD33B22135F312989D8C7398C475C8249A618DA13F1EB
+0D8C9BB2B3A787290E420C624D370718DDE64B043019B9213178554A75CA0491
+158BBAD5A5CD88F5D310576B1446448E9E597510044C229B374FF6C9C2A17115
+99617135B761FC2D3C2CBD7B2CB9ED91670628C47A4BA501EC9C126B382D4BA3
+0C2DA10F18F2BA688F21AE393E78719C9C894B659B3FF7637F2FB685D95A88B5
+6F278BDD2396C63B9C2045FB5DFAF84B606C6A8C504DCCAE574DD1ACDB6001E9
+A4304AF37483B24BEB0DC35946D5A7FAAC2DF2AAF7E0DF3F171A5E5D46B298CC
+40931EBA79C3B51BF555B66C3051F35C2F1991CB2901894B2EFBDA49E0A94C7C
+573F0711EF5FE981D1555B5EB193EFD8C5EF3CE76786EB7E9D1E487F2A00822F
+6F9B41C946B26600718FF9A3EB90AFC762B4A7DE432DFFEF8B7A193974FA6D9F
+D9BBFA4487E095F1D11265422E1B63E48382401C38F028A47BF68D9378289D94
+7DA82679A38F816AD66C0EE44E60497084B524B11DD5D1D9499FAF6B3A7E8528
+C5580D6BE206E1C6B4D6FB1B49F140908979F18A188B0F33953F1BEC51848369
+89C20CF64415BD65C86A45E0A21110E24E78A18E28FEA836648AE1017301079E
+77487D63231BF7F545DD95BF0C3962D20BA4F04D6E433252812A06922C679C28
+D7DD5BF4655D94487247DAB695F157F351BC481BAE77E5458013ECD73CCF349F
+D138D42B092077A1120C60CDAD16FB292122CF10EE8C5C5BC2DBC11DF57323CE
+906C900F2099261C3C85EE8300B909A434F417B41CFF1DE13599CCB110AE5196
+21F90D6B83BA9E5860E3C3FFCB29147DA58C31D81A2546B946A55B11343747AD
+F3CEDB49320A754F20A1113D7F7640D686163667F7839216FC274F6CD6713254
+E3E9B2B9606820BE4627C325FB1871D7F5221F5B023CC821013FFEFF8880EC21
+39FBBEA3FACB235A1C39A8EFE5D3B1034D0314F44164CE204DD9E89F459CD08D
+164ABA064EB842BB7A24D856B3D2A6DE1CF73A037D36FA32FCBC979F92A996F2
+50DC53F13BD9A77950F38A46C7CCF18462E61BEBF129D90F5748624D489F80BD
+DF9F165FAF7E902A07C903DDDE15B96D84A886E9E24D90FE68B225BAC4AEF101
+7C1D997137B200BBCB79E7AA6D35E67B78BD0F5EF98734F51CA266F77358406F
+CE4C9B7997D746F5FD56667877E3AD16D92199D940E81AF57B944832FBD72E17
+809FB2B9F94F9CFF9C6F7B00215193A6BFA82B3975784A67DAC3DFF74667B027
+A98DCD19200E2A3D98AD8E8B2A27705427087A6CAF8F72BD76A663E954A4614A
+931820874125BFAE3BACDE9E4320DCE431273768C652721B4E9D88B09A054D2B
+2A91F97414E9B71009437CA877438E39593D0C62A57848BC34BA758961308908
+DEFB3CE2A36D9ED09C29BEF311BC3AD62D71571E1B6E8D60E20CFFC7CC76CBD2
+DD81994677DCE7909BDBA3B3933F771034076AF4EC6354C291B45E1F3D8690C4
+AC7B92F10F869F5DBB0A70D5B397B0A75DB1FC425F66B91622C24911B8FFB0D8
+E73CF5B5E8AB7AD7ACF2F420A78E2B36EA117CE149464B0C5710A0A5A8D27BF4
+E317C4B4508B4A0160643B5CCAA1CB18DEA5532D3B2EAD054AED3303E740EB56
+F9E7CAD30E9075DCD7B225ECC6514500A9437EC0F15CF22B9E7D53939B83D05F
+8D927D47A4E5DE88B1783C4BE6684C57ABC180F33B7B56C87EB9CE97FD451854
+FF43D12328F33DED3349BD3ECB23C5B9136D4997934767C714AC5B8741970653
+4EB318E40325EF3139E8EBDB63C7B9C1399009C630C37DD4D10DC935C2C0B366
+6F1B3723053B911C5A17B553DBB87FCE40FE9A10B0AA8785CCE75CEE76744C3D
+F429BDD2A97F203DE61E747981ACB0FEF3F2D796DCFA0E85C15451EBF292BDEA
+2B7CBB3AAF90E51E80087BDEA50B45F663A03B048AFB7B1C69A84E23F26A0BF4
+A5BC61142703D56EBF3E9F0CC43FD2BA28DA807367409E1C7A7B96143D1EC4B3
+783961AF7219BBA4FF301286C27444E8DC5318E7812BA7D3D2A3C7DDDA7DC0C7
+1E90E6E8923ECD7A126CDA17F490B9AE44EBF8335E4EFDDE0F7BBB3FAE44E45D
+6CA887B58AB6C18B5436C8989096B14E8CB7D5300D000A55C89C1F3BF280CFAA
+428E543B622ADB3C679DD0549F67744637A46C524C4B96B25F5E8C60531A74C8
+5A46A2098E8B29BA9DA4F19A7594C0B73A8D7C2EC7A18533EFEB97CFB2DA5F57
+7C2B8B5F6ECCC82F76941B38414093A80B35D3FAA66A467011396B000395BDBB
+BEECBB332C0E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.0: CMR10 003.002
+%%Title: CMR10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup
+/UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR10 def
+/FontBBox {-40 -250 1009 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /ff put
+dup 12 /fi put
+dup 13 /fl put
+dup 14 /ffi put
+dup 34 /quotedblright put
+dup 35 /numbersign put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 91 /bracketleft put
+dup 92 /quotedblleft put
+dup 93 /bracketright put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /endash put
+dup 124 /emdash put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8
+569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079
+24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A
+2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944
+8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E
+3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26
+D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24
+D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B
+03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685
+767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A
+8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B
+DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E
+94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004
+22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7
+72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C
+8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491
+344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A
+64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B
+07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC
+1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8
+78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51
+CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120
+7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782
+BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462
+4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A
+5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D
+EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE
+EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622
+4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE
+0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5
+C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904
+314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E
+DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029
+EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13
+DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E
+DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084
+7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91
+1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155
+69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE
+EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5
+7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67
+CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D
+38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3
+22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C
+0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1
+BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D
+4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F
+3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD
+B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE
+15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9
+849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3
+FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84
+4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76
+1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798
+84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF
+7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122
+CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA
+4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B
+3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394
+F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D
+F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140
+DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7
+D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886
+56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4
+8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53
+59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED
+49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86
+87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B
+8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60
+C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342
+D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64
+D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1
+F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178
+0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B
+5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448
+229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC
+17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4
+01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616
+F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662
+3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0
+689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20
+4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F
+A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03
+DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D
+364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F
+7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F
+26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1
+43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD
+8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7
+C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08
+94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5
+C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1
+B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56
+4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5
+7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01
+204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE
+B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56
+7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6
+279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB
+E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346
+CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A
+65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78
+BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285
+6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7
+B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3
+63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89
+4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A
+A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6
+67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C
+DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A
+5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9
+C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C
+9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D
+B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51
+963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0
+D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB
+B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B
+72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE
+B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358
+8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB
+3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0
+668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152
+ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5
+69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118
+C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754
+3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13
+407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01
+11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF
+2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87
+4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40
+2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF
+9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889
+CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8
+DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973
+0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362
+5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7
+9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A
+EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2
+09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A
+2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2
+AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420
+324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786
+486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A
+EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660
+52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5
+9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3
+4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D
+B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7
+BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14
+6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0
+B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359
+16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED
+E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6
+546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED
+6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507
+559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B
+C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A
+ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354
+04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B
+7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A
+8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B
+A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02
+94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB
+C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC
+41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654
+7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5
+18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76
+9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD
+E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947
+5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F
+4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F
+E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF
+9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9
+89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87
+7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3
+AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3
+3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E
+61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B
+F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F
+D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6
+652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA
+07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11
+6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB
+EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2
+BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77
+2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84
+246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F
+525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE
+EF6868298CD26E5B9EF345BFA3EC2911E2B96A0B40AEAB95BDCCEE38F5EC170D
+3BFB792D2DDA7E57BD2FB7669484EF9322A1BEE009594901095DE2BA9A15A0EE
+4DD77404CEF16EA6C31FC04A8FBDEF27B9FC1AD3264388B650C641D6051E47EB
+E7EE41B946B5A54D2990748AAA64237BD4ADA31C10843E1C235AFB36BF1DBB47
+A3FC8AC6F98C72AB9F84F3C354A44EE0530145D80BA7810314D977917A4DC4BA
+2CC4AB63CD3E87DD7D040E8FBE63D94C9BCB476AD94BA7E4C0AF953BF4821182
+D723D9BCC92F2B14A8769B9EFCA8FED9DBF2A836BDC23E27AE1BC097FB3D2297
+DD32DFDD7E7BA91C05B33583D92EF193248C70B9B0A260A7959045DE6AB129F9
+05F7F25D087EA8024C9F63852A12B46114C581719B4723810DCCC8183D7E6F10
+450511BFDF8CD29A57EE9653F2651D54A62141A8142C8B857B0D3E2B9FC5DA3C
+38D79A7AFE0B565A57A7C4F52DE6933437EE03D0DC1D286880896392B5C513BD
+D76497FD980320FB10E6CE08C3953F99A3618675B04C8EFA2E2DEF4511B4300F
+2E5C733D69737C7428840FEA2A1D89133341DE4BD065034F7316B5922CDA4D83
+D8804D8DED8CD4409859CB18F45C838D6F18CE8DF82B78C79AD664A57F705D8D
+9CF82E48176AB5869BC634B2BC053A299600E1F9CBC66EE5715E9C70D86E6909
+ACC25A0858B10DC043CE7A5AEFE9E3F8C28EC36BA0E34F850CAF6C0AF664A142
+AC30D3EF7D61C7E85AF9963BC58143F92B5D64DA3F8C8F131B190E8333769BF9
+0186F3840565E7C3CDF85409DF3E0134C97837AC17E7F988B62D82E068EFB478
+5D8BDEA6D3A49A83886DCCEA341E9B4012EEA7944F69564B5F0EBB5360C067FC
+70DE0B05B117732530099ABEC6F1FF955C9F269CB29422AD7A3F2BADFD97CCD6
+3624B8E757ABCCEBE5B1F2620B814FA2A3DE2698BF0B06CE3AF4C560DF372AB1
+A79B06195FEC5EC862560D6767FD20EC17481FF64AEE679B05EBAB7AC520F240
+E2EF71614A3A93D4697747A6BAC42DF8DD4F2AE3CF46F1DA8F0A1A0372C6F83E
+5857A31F725B28DE3AD77F1DDF563C4B3E8AA4CF5A1BE4B4D0C672D68ADA4FAB
+5DD7F618B1222BE7727547825EFBCA21408C5F84E3E7781B5ECEB19CDA8EC4D2
+120A75F8FBE6B0D64D79096233696BFA2AC17072EA6C9F52E42816C85AF34C21
+215E72CB2993DD2C3848D655AAE8601E71562993AA3BB06D0D6E6C20648F9677
+A2701944FEE0E51FD5BEB50156B58F72DFD40638251FE20A5C0E3DFF19D7B499
+8CAB7917CDCE0770F1AA19B2C5F82408AE2CFDC4758409B2B67142BFA35136D3
+B2A1D91C2B38BD4E110708B21F7939A250840A099A7DF39912C78154401CDFEB
+7C0ED881E74EA9E1D08324FF687EE87EE03B91E2ABB6C33E43FC047E17BBA4F8
+F1D8BF6C717B029B872A79EBF74D7A16D0ED3CFBB55E95EBAF4FDE106C6A4753
+73979424F01F43190921BA6B908524F6641BED93D36321CDB3736B9BE9A242A8
+FA584BE4C3919962B0139409A522A20207D87997A1B6DE54F47BA654BBD9ED3E
+8E8FB95D271F8D5D8876A2AF48EFD0EB462DA12B4CE919E076E25C4799D60C2C
+C73610B087F668AEBDEF6C73D69A2B62BF68EF83C6986E442D5150434EF294DD
+41060C3A4FCE7A438E91298A59C993BEC013BAAC07F02A332620ADEA74272E46
+8B2A4194A89B0BE1A6F07F8B45EA1EF8F55C6F152328E995B30BB0B5352E4812
+0673C3C2BB9B99785CBBA8A8311AE18D06226B49D7050D44AF0679CEB58CCF22
+E61904C92A4FB381BDE9DB7217C2ED14D35E765FA4DEC618A6BD6E4674AE97BA
+FAE968C7465E6DCD933A822C6422BDEE5B990FD9B85F207E6480D7B112A801A3
+6957858D2A519288ECDB56336D012BCABE3BB8B52CC89936031867BA1190FEEB
+A80AD1FC9B93CB69B107A7DAE5609F7B98B8D14FB260E31023265EB13FC896A9
+73CF94B15A4395E0AD3EB2A91973821152E127D01368807BC9C2A57259E74AD4
+F09061B443C53CACE953538D07F7FFC3F28F4C3FF421E2A62EF5268513AC9665
+14FE9FE7121D9D4B4F105C8F95567B73A03A011AE1826675A5F7CCDE515066EB
+A27FFAD11AEF93BE1F99C8A5E74D6E45E2F3DE6DCB0F5E259053C58C8DE2A516
+8AC6AC36D35161B3EB6C40B568746E24177DD0F3242C04BF79BFB529A9C44F84
+AB4DF31358F02595B3598AEC8A205638E2727D8F92230C0219EAD992870AB126
+356945064662080400E25D70A165C352B8E83A84AEDE652572DEE17155B7F883
+1E55F19514C03C4F839ACAB60057E41BF7BDA5157CBAACE7A2F055E23197600C
+24AD4B233DD5A755910B3FDF14824CEBB7ECE481695A34E951165BE6CB131F51
+E0D22A548AAB3DB4B6D11404373FDBE4AE06F05C31D1FE0A1E274F9815A30E9D
+59FF37C4F4E6E04527ABB62C980C4A2C304804B400E2ACF05CA5ED1143B30073
+ED3C91DAC5C0A7CFF6F63E1B427EAC21C2A3696C8571B6512A8DF29CDC77F366
+550591BB71944DAE17935C50554EFBD1B46D08D75394C5DA17CEA8284B31CCA1
+93CCEFB8D5D9A3520051380C49AE5987459094F6785064B39CB56007BF7CC276
+DD3BEBD291A0DBA52EDFD35236E3279F95509B41E2A583475B74DCB3078040B4
+EAB31DC4B1F294F342BADE4B4D44AA6D46B88179CAB93ABE0574746140C46C25
+0FE3AECAB5E16780E2EA7B64793A51F59431923E2AD093B00AF011F20B230807
+71F86CE98994E19311BFFDE2CCBCC597CE57E285B8E5EA49974DB240B67A3878
+F10143B6F90585C75CD51E5B563A820ECEB9268A00AB80FA02DD97BA1FDCA43D
+FE85D9EB7088FAA2359122F3E9F7096E9E97E2EC101785EC60E129386A992747
+8032D4A715E29D6BBED6E020CA50ECC0500EBC86FDB44E9C724CE6883C0E18E0
+D500B67CB72B9C1E13F1C3E2ED16AE038C0D021B9AFFDB32CBB2D3665ABBA645
+6FE76D34AD5DCDD286735B0220D6F6B14366772479996D22BA049DAFE3EFBDA7
+DDE1632D2C6ECD37DDAC21C503FECBDAFE2CEB46EE6D98C78249880C1C749855
+A66D646D83D4055FEBDDBDB1FC3AA8DF0F3D58864BEE80D9C2E96B79040CA626
+12FB54F26DEDB1C48ABA276B73C02A36D3BFED9D1DB31CB98669977AFEE7C746
+817827F565DB22463CFDF7470E0CCFC8A9C9FB29C9CF4D1A5F32B6E600C3748D
+3A963528CA73854AFA9304D1E4EB27BFC9A596472C721DCBBD0929693FA5F7EB
+D0A7DEDA6330050150531FA9C17C0DCCD08A5DFC42DDC20A1C3058ABF1106797
+C46C851657846B76616532B76C48053DAFE0313AE89E4F275286ECF869738E18
+294062582DFB8EBBB7F192360AFD3858A5D2AB8162DBFCDF7ABD8A4694B8CA17
+2F4BDBDAC4CF08CD3760AAE7D688541A224922521BDED74C9BEF3D0120F66CB0
+C17E99AD23E052019F17A9B2739D42973FA53DA50EF33DAF193B3E6C9DA14348
+37D7807E39C757A4C4B7C183FCC8ACAA8338AC2D98DE543176EFCC40EDD5F062
+8C95961A8A2F4F85BEFF215EEDCD6512194EB26588CD0FDD9D151FA1050AF365
+2A62358DBE53EC4D861D2BBAC5A25D3E69616E40C42CA3624CDFDDF1175E327F
+77F66DB069C4A71F63B6B2C63D7506EF0146AB47C5876B1B04BCA05273476B11
+F3538E8BA42214CB17050A9B73E2CE4464E0B334190510370A272E0138DEDA70
+519FC2E69ED8A26749B2A5C1CDE2B37C804F50577B6D1308DD9C414C5049B08D
+AF0AC3CB19AB4DFFF36612F0D85CB659618B195F27A3A1E1CB60B53AE345671C
+F9595F18839DCD3C2FAD5D2C4A7089FC963C0478D72B6211EA55B69E974F2D0A
+93D2E65250DD325C630D509EF6018008FB3A745FB9EB6522B3CA4E563D95167D
+597653F6781965B64BBEB2771D9E828B42B8B09E9393DA2CAFE45B326B6B0971
+4E6EA93430D281C1FA4EEA731260F562DA258ACAD023BEF34C3C5A0CF816FECB
+1F268A739A5FCA67B46E0FFB4A023282140B4AE37672DC85563DC02D21E2C823
+9F8010C7B95751649009B86F080BDA7BEA3F542D813C360E9E1A513F63AE7855
+0D36BD48E5AF8DCA65226517458AD7ADAA5F28DDC3A7B618E7EC1B74999072CC
+7A008E104CB354A9C51FC33F37F849E62D3E32719381936CB07FF904852B9606
+E8E074B6742A1847C136340CD545EF290E46D0A1E0810B01C554FD187DF50D87
+5CDB5AFF8D1B4288424E11D66CDEBDF32FAF44B95165076E6C225C7F42887E4C
+92240A17C421389EB382BA0A0741D26F1BFAEA6E9E517B2C52813DCE99A08311
+4F16B589ED8E79588045EC3DED5F301F805E688B87D03ADE1CCE60DE4D2D2E23
+54A1111FFCBE6538892DCEE6C815FF99555E34634B52F0B8B83EEF5CCA51B264
+0953E222ECA9292428B936828423F48F8096D06CC66CA1B36B4B2F2784D244E7
+96F68495C350138EECD08CC965172586E3DCC71630066221ECCBAEC472C301BC
+59D933D495F46D82EE04A8F6014016853BF583702BDF1A5ED5AE25E624A4350A
+72F0503F0C1AD4C182A8F0D6A9A658BC15646A8C0A71AAEADB1F46A72EA7397E
+C4C72BFC63F5B90A929BE427B7C4DDE2802407189926D25201332BC06AB5A699
+973D9C471522C92A709F8B37ECC98C3DCDB4D6216EFA80F1F1D372EA69AE5C2B
+AB8FDA81FA9C141FDC9ABD1F862BD5DA5D7E709EC529928BB4BE24DEFEE5CE14
+DEE1FB0EA689372CA8760E49F082016A9CC7F948FAC4502866B0558EC294FD71
+5BE7FF20844B8FFE0A508B768111D17611F14969F8ACF8359F8A4FEA3E7571E0
+70720A1EA8B6BC55A25413D6E03EA500744EB12BEAAEC69E44AE4FA8A4CD6526
+5668B3BEAE9A0F421FAE0DF6978CA37DAEF0CA5F0D371DD4B326634C72639840
+49205FF4EC345FEA5435803C1B2C30141A0D8DCDD2F8D50EF1BA59EAD0642614
+F6563630B736E6496B36D8EDC9C63E68109D5B904230F732C0DA7475523840C3
+EC4C8FBE7908D77453CFA51F0E22B2C25E2D2347A583E792978289FA57FB04BC
+7BB1917591A601715BD120853AFC9354B9800E7F8239458D99AF06A8E35C8077
+3482130273C29C8839DDEA51573B13F636C08909737C74489E6FBEF0B9972E22
+6E1E5A92F8DD2A39CF2CC73F89825E8D2E8BB2AE1F88C7E27122287464BD52B2
+45423516A60A7175677AA315B1D8746D2BD5DE7009184D96A3B59614FBA2BE1A
+BD927FEA3F2B8A00A48816E1B2B2C7EFC5E7B427D1A8C1A5DA2DB92244D716A8
+FBE8FB4D7800B84A8EB0357A8408779357713CCE40AE8756576FC36646959D38
+33C313142BB38EC37E98C03780647CF869EDBCE284ED54F4C874F720287377B7
+97C3E683B95F15DE4EAF89EA6629D20FC8FC213330C78ECB9292A0D1D25A38B5
+40BA661A3809C357981B8754A7FB466B99363EB7988E2204605A2B05AF88D21B
+A000184B8EAEF91F951F36B67BDE2A3A22C6A16E6486FB5E66996FBD5F0709FE
+DD26D0E9B5C5AD46A1BBC3CD07D15A793660A22D5A2CE6D409BE4E85650F40B2
+002EDE4DC4781D0C92E2715839E7F73967C7F47E43B57624E041A5990F5F71E4
+3A0FBD7E4AB6522C66DE0E33EC7EBAD08626485E7A891DE668DFFD246E16E207
+780503270F30E40883D9C86FD37BA890F63B63B7B792AD8390A8DA38B4F9EF69
+99F208E079AF94FF22B9306647C60E25C1201958CB64E98AC0AD1C336A9825DB
+46FDD1A3D405ABFB4BE25AEF754F50194F115EED9D9CEF87155CE003DF1E4ED7
+1D8E4973576EE90D0ADD34551970056045EB62ED5AE58A469F1A6C2D06725687
+06644F6AE2F64E1D824A71C9486592776B819EA72C2A12838F02931493E2E9BF
+7DD983F38366AD899B45675EE8E9D2CD5F906EF0B5DFE0350C05D09CEA4D7FDB
+63EA24BE89B610F6A30B4D979BF5F6EAB1D9C380F9C549E202532CCA4C27EF7D
+7AA364B32C57810067C26AE82B2387E7E230D87383545028DE35508E5FC1BD84
+5650A2841A9BA91FDFD8A7DB82C1745A10F72F3615F121AE293C4A93E4E76521
+8E203338F7D886725B9FF5C15D53BB5D811FE74D02EFF1815B02F48185D52317
+5964EA8A110AF975F0B8D9598AB947D24951EE4AA522454040FD5753AFAC0489
+4D45A6EDA2C2C6C73F35847976C959B0FF303CCC6545F19364B23D3C63395DBB
+3362516BBF0B92517B5D085627A18C9826AEA8469EC3C4256AD1292F18D81C0F
+1E59F5A8F86026FDAF2491B3BBD03636B3D6E19C288789D26F8D00F20141E050
+873E5654CA843DCDA132416F00BC919B7030E52C4778ABD230CF148457FAB14F
+0EB4F664F087FF8B2F5B01468C7672BB96C9AC3548B8264E3C5D41D1A7A5550B
+C51EAA1A1A5FA83270898C3709E513BCA535F98430BD4637D9D08826C60B4EB9
+1EE0C57D211FC4CD57A530CB78111BB1870C8D5977387247863325AB9781BA74
+AF03EB0707BA0CB0D9E9D9AA669A9FD02909C6FFFF408CF0FF81F225102260CB
+737838A7C83E47618BDE15BEDCA3A751463283717D14A6165E6777937AE49068
+7717E884DF7D2D3F9427221BCBE05F1D2AE62812E39D1A646FBB6A3432026C3C
+657297E5BFAC79E9D8DA97FBEB5A2C9E0858D3E3F67B97AA566855198BB648D9
+E854AACB032137918B8F4D4FC5C99B525BB5A88C4BDEF3D4ECFCBC75E40F6123
+E7BEA95F0B97677CBF7FE85D7339CC9E1B7DA2B933228DFA0294727C3AE42DAB
+53854AF9B1FD7110CCEBF6F466DD59B2A2E8330D83FC6631DCE67635D7808C24
+D87EAE685E7A55D7543B92588F907ABD6DF29DB5F627AFA84953924C66439028
+B17AC24A34BB4E34AD301688CF12C5A10CCFEB99799D343A6CB52A9874A0D210
+AD5AA8DC0A035B47EE9DF00AE307AAD64754B150B91D06D445200C97F5CC6601
+E8E47E12757F57EF61AC2361F8CD10C188E0947264324F68E72A8A2D97B9F015
+118444D9E858B1D4DB8E130BCA95586D2F3AB90D90E072724FFC84F895C87FD0
+C3DB5A9E4D7F858ECA95EB94892E9F400420CEBA0ED8C6F4946A95EC1A1EAF52
+1CB7BF03A584C83C65C3B4BE90C818F9ECAD77FFB030C0C2C76EC73855F08648
+698A8874682F925876622BB57B3C519A59F3E24711226AA219F3734D41204289
+40A62EA0C78773B70B0940121E20F202321AE86980CEDACDD3584E641BA6E3CB
+8BA3ECE430B32A1B7A602497377107A93764675346050BF63E41824B16C73D58
+6FBCBC35F05EB9AA91217E2DAEEDB616DC6A8B62E41F12202E5A3CBDE9C76658
+6159BB9D3DC206304AD8300B4E40D6CF4FB681D1FD98977804B9C917193B9DC7
+6FDF9585E296EBE58551E6016DDED6EAA109B8F386E961CE6E3C0D4B0E8217E1
+B5F324C0A61C540ECFA0772F26FA26CBC2D0019D024B1D4E67DF3C21F1D09E74
+2776AD2D06E5F5024E55E100EB613C796EC52558D244001D57E5220CB4349A4B
+A4B5FAFC00EC3323D084834CEAE3730A077256E8D7BFD5DCBEBA6EFFB1B50F10
+25681A6856194B5E42693C29763DD6CE71E995FD78794690036A05F429439505
+FF27E0EDB070D54AFD8F99003FEE7754C5A51FB0253C4D08382BD6D99E2BC5EB
+AF09200D98BC3C0D5795BEF6DBCBA2BC31AFB675E67502E80BDA76BF7C520559
+FF774FFB9802746D8B7F932CF22952D0DBAF52AAB80DD228D5AECDF01EB4AA81
+8D35C4C87DE01766AAC0B94FF017D1FB98B5E8B92DD39A4F0D8C179B8A570FF1
+26D5B82AB73018CBFC741582CC8640ED5620F44A7F92330A4B0EAFD26E266D78
+0BE06D39CAE86D0F6F5957050C1C9F3CFA3F6DFB0FAB83C4919911D13A06DE67
+2037231FCE95979E0D6135CE0BD22F0A312E367F97E242808D1B540CDB0957E0
+C9E9EC8BF977E5F9EF0D780491F4CF6D918154C0198A993A337F7C705C7202C8
+14E9C6400023B1B9E5DE711E62A2EA33745410F909433680317A9527F7A49558
+BF2EC13D41A6B62507738CF5D96ED0D019BCE8CC8C1B915003C885E577E9E322
+8FC33C243D3E2E53B2723D824056A0A3D391842EE02F4183EB13D9DB0AF30477
+A7149997C3703B54DB3BC461B8757FCE6E6DDA0A3095BC480C533240F2195BCE
+A11A391D658208DDB43DD2150B23B308B14BBF10E66264FD8376A676A2131F68
+47C23E71BBBD94F40D2E9C02B97DA9539B2899E12EA8D31475D5FBEDCC438932
+91BD246BA8A04B6EF2DE0B9D1EEC70EE56F6A1523D1338916127737F3A823F43
+73691772A120BE2F2B50F03A630F294A5D2F901CE9E606CF60D25013733FEF97
+9E07105704A43A6BB57C5310991867CAA153CE5DAE7F5BE5F4060048C84D0F08
+0FF06F8E2A836E6271A47FDCC5CB28C134C31C226CCDEB7984D2AC4CCF96CF28
+75C056754DE2C31024680011CD417F8C4BCEBBDD476F799EC075D8A0B79BC94A
+23B818735BB27D6F9A5703894DDDBDA028B640CCF8440FDF77FBE9C40C7340BE
+9C87E5DB5D4197AB50E27B5D51318A7FB005A4A5CAC18070582B11B6BB5D3A71
+6CEF1ECEC42460592AD42F0A23BABD48285751F8B8D0B6389520891CC3FF07E1
+D7C56540A2DED026F61FB8DC04913278BC9FD625E213A4E49691D02FB419CDEA
+A892A2274BD5D5BD4804384D11FF795296250EB51520C394C676FB6258F2A39C
+15A9395EBCCC915E3CB41BA1F966C40E0F52AD07CC1D16E1CDBDBF85E25AC2C6
+1C0905EA4CE5B6B0A78243B93CA132BA6AEFF9337A6036E7D0B3CC0020B9F8AA
+F6FF770FDCEC7CA593FAC52F0EE1D5CA7013913D675F38FAEA6788CC1C20F5F8
+3B4EB5D4796E424DA8F84466CBEF9BE944622769432DAEABA8EBC965EC0839B6
+B25EEFC3DDAF61412EB3D19B0A49AF323D76F6F346B0A88E0408A23C6FCD367B
+DB6C0C765FD3880FAB128A8E493D422769F270D5B1E6A98EA7FE6ED772AD1D46
+A31AB1AD3665170FF472A33DB0206118B933E50BA4D5B18AF821CB107F973A5F
+4A3ED72B4551D7439AF92E3A81C8BE23BE5A76DF85E3DCD10BE963E0FFCC68A7
+3C1EBD8440D7CF559F43A0AA17FC4BB5446DEE3B620D55226E0D354A720FFEEF
+A7D8E95E9ABDAC0E7989774506459831D69D1458F5AFB8BD4A125DB319019186
+1B4FF221CCC6A11E3FEB6638F76DC070B273841A6D5973087CAD6ECF957952EA
+6B9763C126D3B7BA6CB9BA9F842142F09B184722D88B40C1E6898987BB89A207
+2A996043AA7D0F32F9C4B75CB11111FD24921F7499B682FE52EE1275B05D194A
+E3D2FB6E1E4E7F3EAB47035D9FDD8642DED15EB1AE1F4875017372684E2821D8
+5BFFE7AD35A168ADB5F328F6F6031B95095A24497383A44CAF6C489D155F19ED
+81A660DBA08D80CF8A5920308342E1574C22155C278093F9DEEFBBA182539C8A
+506C5D559C8E20AF3E2707B71D9FCDC072B979E862A309819098085B3ABEA821
+28019488060529D826B0B4C872C67D2860351FE0B61DE54384E7504D9DA73F89
+C9740ACCAED87AE6CEBA4389F45BAD24B21B64E375E2FBF4585025744A9CE1D1
+22E9D86D64FB50668E10F63C9251DC00D1FD242CAF20572F2491E574616020B5
+0D21246E5F6547ED37FE82017B4F3F8DDE9EF3D7F005B82255B29F63874FF60F
+A5CA6151C5923FFF6D836FED2A5ABE6913CE66B016DC33945FDC810193E8F7C6
+2CAD3F30AF61B6A0CA11F7D32DF64ABAD54FF27B868591F73CF6605CE42EDDF1
+3E5E5418512C93EA7DB4EECD7C8AD635C15843569CCAC9CC379FE10A0E27F605
+C0BE8DDBFFE366F2FB39670D3F85B07BAF32B5FFD11D23425993ED1473B5D222
+4A30C6B3EB38168003E1B19EF245F42EF700F46549EDA4097D769FCBDF6D9E26
+6E40DDF98F68C59880C25D002CE1D348CE9D467B768352A47019F0533A7E5B83
+0F124F85A83E425DAD998A2A40FB7B0FEB2F5DC48190EFAB58F094017B117690
+339306949AAB33A22A1712EB774DDA2E29E8AD67A3674CA69689A497B1CA0BB9
+2B0F5D9DC9D0A91B5B7C21673610EBD552414C6D8F2726F6CF76C0A188A6CC98
+1DD34A7D9B6AE0992270664DE0F6269BE49050A8935DCBBFB33751AA7A77D812
+FB472EB9762CC08E41E786CF69D7ED7FA8DA05E6422D62B31E4EE7E2C1C91C0B
+7BB9B59BC678BDEE58EF5A8EE923A71E277FD0C5DBFA6BB746DDDFD809CC1D77
+A2CA7F71FE651429F67FF5F1FD452546DA90B9CA2DD1374561BCAC90AE94CD62
+A3F5C216DD6B0B3DA9B8B256E584460173745124D80E721DB0DC6F3E153E5165
+C58B246BFDD5452DE898113A5EC1D4784DF900D6F33354A533E8AAEDEEBE5924
+F62FC0D2833F99646EEB0F065338D9D0AF4FC72D0889ED33A24D2BE0869E766E
+CB72B92CA8F7AF62BBBD0F6E70570EDEEA2C516869B4511AC5C8886FB9F3E715
+E3C7D2864AEA4DECE4EA88FDA367B4BCECA600D7FECA82D5EE4A9D51C3989000
+1EDA7F0792C788E007E8FEE3E84AB24F00DDB0FFB6F7B7D944FE7350177D2B44
+019E02706A9D04C7E50AC798A2DF352A20F32C698B40378F8F8CF83F48034883
+ED2C0296001B8663B18C1F388B7B7268CECE311915BD825BD87979B56FDD395F
+4B4FC13E392A7770826C77C9AADE1A4BCB5C0590A97026FA407BEF5B8C7F2EF7
+C311D322E7FC130479EA0A4132CE5935A7E85199C717C8C05CC4601EB72D8D8F
+9B0E92C904F225810AFB5299732BF30416E598021574B175D680CD3C619547F0
+AA5E3A854E5AB8E1B0DC311FD7976F9A7318CF52C838BDC485B4F12A2B40D349
+0F23D242B500DDA1DABCA5E4E3D066F9B80286D766A5BB1FC3CA0057CDEEB7CA
+0ABE3CBB4E7AC15FAFB0DBEB235DBEAEB87AFAE6FE20AFDFEA6FC41E29923FA1
+1A4B8427235CC16C7ADA4B3A93265AC1016701D6B24DBC00D328F103E089BBAF
+0928BA9809B8A698ADB893CBA78F9D50E34BA954775C78C37EE771FC62CCE1EA
+F9AAFECB685B0C2FAEE4733732B0B720EEBDF221C8607A95D664A86BBBF3CB15
+62A700CFB53BF7212E29337D275753A1BC2AF6DA563CACD3259036EED578ACC4
+6110C110B9E9BAB541931098CB4D17F836A0C8FD2401E8EEDBBE4EF07777CB16
+88B0BE46DEB2F1FCE5600880E1A3231CA680F2F4C8FDFB4A51EC09DBD50068BF
+BEBB664FBE3D6E132260E1B37A2B2BB7627FB64D82FED23686FF5657DE2ED1B1
+6AC52563F42C7E517C8FE63375C8E5B44CE55EC528F43066AA8BEABC4B098600
+6CD2E169C82F1ADDE63A0BB8F691D58D4B55817F8DE9009B6C7327E12DC93295
+614AAF78F75313029F7F2F9AFF5D9CC7E1FDED9AFDDBC0DF135E20A91C8FF43F
+2C32A8F08C5EDE73C5486C9EA6C3C32AE32AA6D767DC1B75190F4F11BA9A8507
+F361002225242E831BDDB323DACB1DDFAA5A0ABD64FFEC911B046D284610538C
+160F833C51BBA95893F2FB6E98E92B7CC1EA1CF6F3A0DEA5E415A08B60B8C202
+D7ACEA0F435C7EB59BF60D06FAC6877BD5311E59B4B3428641FA08D498DC9852
+735BDE1115C9D819890C73EB0F3B82BAB0325343C6AAB7520FD896069DA96899
+90A3B69CA905B437EC2FAAECFF8FFE87DFFF47FA6BE7B12048FAB3134654E0C5
+E86C8C799D05DED178CE4D4283A6F33F9D07FBAFA4FCAA0600281C5737A1EE8D
+D3833AB3C59241AA0F160B75124992C2A50753AD334D01A640C02C78D62567B4
+31E6BAA6AE0AA193BD9BD698B4F36C5EB10C140F52BFB532F8FFA93EC9345866
+C0F730F298EFCF03915C147AA635574C9431B209F882FE6710671F30722DC521
+B57507D10B3FCB4A7235B3245F41603B06FBA3201206ED492F733EA3DD37A819
+6D451EDB89449D5C2C7D2B38EF224B96A74DE35B2E7752032054AB5E01B14E2C
+C5FFBDE3D95161ABDCF4372D560A88365923020D6BEB26F46672FBC2382DA394
+79691205600AD10D18649F1C1EB753F02BD22279998C0D2FB9F583AAACFD693D
+D84E05298E0E84242B6818EA43680FEAF2BC209EBA676B0891A2547EE2DAAD08
+ECD637C8F30BC8393CDA8D2370D67CF80E3E4F0CAF268E47A7257622F8549EE4
+A2304D4426F968DAD9BB365A9CC334B103025686B1973A4A9BF039CE8AC0D376
+4CCE0D862E947BCACDC915EA5FF846F57A5C3B18E101977B182F888BD7607A91
+673A3DF6292FA9EFAB5AE009AF63B5370FDA54C0C1F7DCC209DB467580B725BD
+4FE8E9F825D651022FE1463D5DFCC14E401CBDCCC6EF244924BA0D36E3E11C7C
+F4D104E4703B396BC27235CF06F551232E3A6C698B67F270B851925BA4B540AB
+DAD8D0F1558D2DB090A4B1585F97BAD7276A500AE71727EDA361CDB811EC940F
+539D11D1E727A7B8EA60C8051551BAE9A1CC57E745DAE602F5309A4710213517
+BD9B9F54AE2F4DA818F201E769320688672BCCCDB670BCC2D4728D563CA6C2FD
+2DFDF9B137CDF93757256E9A2A0B7BCD3F70BB5C776C70EEAEE80E416E7C618D
+9A9B8BA1099CAFC274FDA35CC012D5AAD3C01809BE0AFD825BAD4DC2F734F115
+4C1F2FCB69AEF702B1FF75A73C0719A52B3330ADA43EBAE15392CF818CC5810D
+9DAF7E4D56FCF3B82185AEEA3C5CBD01583B21B99DDCE0B63914325D8CF20ACB
+1A4041E18506C22124CF2581D58558BEC745190BC8529B1225D16887104CE75F
+724879DA4B6D1CF5835700EAC21A90B068387AB3E705C35FC2385A4C993290AE
+8C063922187BFA95BE99BB81E9A9DA21106186D4B78EBE6FF7A56759AB3D2400
+BDA921AE38B7F0F22FB58F53E4200B901A6C926C2945BBAC541E9D7855A2B825
+59D4BDF8AD1E12CF1A5146805CFB1A71E0F1DC295F84F62462C332942DB6AD92
+F4F0FB373305B69A3737FBF8B62086B10B76E3C9CBD6B7E0EFAAF1348A128014
+9A38B149AC4125DA88EDBF955879B2764AE0452003E8029E39064966EFAD8497
+904AB7C1A4EC2AA8CB71C2741083C4B08A76EA6F19AAA58DA71BFEA9F1251488
+EEF12D35975DBFFF8DEA39B5049BC6093E0BA8211ABF9369E2AB76DE50E3C9B7
+82C8916CF599769F9F290D831ECFB86D88AB5FF6FB34099C82C6143DFB34BF77
+63C38ABA7107095B81B4A66E58B63DC10872C29F6B6C37385C2BA7F880006B91
+9AF6E1E6559AA076485AB2BE27211C3C3B534BFD625645B6EF04EBF823F0CB12
+B9B8883809BC1067E5B53289EC035D6B16BEBBDDE57C819173507330E9C60EE8
+CD0A5E38667CA5C60AF5451CB00AFDB7676A18EBEFB1DE9290B1F240C4DA7164
+869A440CBBE09F7CA08A1230175FEA1A7756E5D7CB636D19D6A0389BD0A1B129
+574C392F25A529347D5D99E33373882B874D6434AE6816D1F54127922E47CA43
+213E1773595E6B41D90946809A6CDAFC2322D19DBD36A42A357D79B86C7B9024
+66C1C00596D5E85EA99AA922457ABC99D6089A29FC675C61AEBEB8D1E2A3FEA0
+0BBA860D9217B53DEF98DA9421E8581BDBB8E7DE81B84CE43D4F1BDCF93CD9AA
+C422EE69856B83136A9E851066565566B1876D89DE99F15FC934CB73A7AFA304
+9088ADE91D33B1558E81F5B77686ABE49A5F8968512B4DE8314F4FF00ED8CD0B
+0BA1872AD7D8CD9FED4B52F3C9879B6CA358B7C9C14FC618A709030E0716E4DD
+F9D7A156E3EF0EEA375EC183466FB8FB1732BE7F73D372B57A0CCB18705D1291
+BC36A788F44600314956400CC685587CD93CEFCF516315DCDC67BAC56E0E4879
+48E246682DA609FC7E19FF8674769438C05443A9E109DF9B563721AD8F8B6A47
+FCD8E35C26F212B1D7C14179C5D19CB5F25EEEB9F25E5E2C596CEB4CB6004ED9
+28E3650BD7E5B58A2DC9DE664472FFBBF6545E727BC547B98E5F92B61974D86E
+3B34DC2538188EFA10CE7D84C5B2986A877FB3947A5A0C7964131BCB9CDE7768
+9C85C1F7EB4E70A4FD85511F97B98D57A1C10C49C0ACF1BB698BFDABB77EA7F1
+12EF2517CDEBA6AF4579E91C4C6266026A00B95463C453BF26ACB1A642EBE747
+C8C49C384435DBD76D7E76AEE899AE225801D774302AA9F2D070522095CD19D5
+B03A5224BD26605C5C47810B7B8EA8021DF68C34D995196969F4CED6B2270FEA
+D3BCB93379249412B8A85AEF07EC532870FD72E532C093FE3459DCA4D718DC49
+C78BBDA3E4E04EE20CCD0EEB7A2C46CF404CEDA25C7E102BC31B1DD07FC2743F
+4A926AECE153DB7B0B5076C60227FE0FDD149D669625D69AA168DDBEF5124AAA
+FE4AB137BFB7192B0EB7685691E64E5495273892D7A5611095445A061BFA6C8E
+8D54AE2E5CD612B0170D70561D858405F1D83F3D2AC2A64EB623055ED454C770
+216FCDA30F57234C5DBAC85A00EAD3544420D816A22B36E70751262D2E5846A3
+5280D68B9D18E032AF621EC32AC3F5569B595D99B8B92D42BB7EA067FDB4CE59
+229C7B62FC08F19E826A149CD092395B076DBEE5A8701B07EF7622AD4242CB7A
+AEE2BAED03378CE11EF4912DDEBA09F12F688CB0E3ABC8FB65DE907B1CDAAD62
+DAF864052FC34D275099ECCF40C6B49FA35BFD75328971066BCDC80F62A15C05
+B2C74800A609614B2DCCB81E0CED76B9F12DEC69E0A0047782BA94C288878077
+6AF4D11C182B24A31BF0976CC6F5F7D193E4EC51662901ED14ADD7DA6112D7D4
+BB1159A36FB16B69AF531757FD8C342122F7EBA54E37B48C6DAFB92FC155328B
+F476F91C574406FF84FD033D9E8592AEA0559A41DA2C80C310954CA99709EF05
+4E6D19C0D271C2C8FF33B3AD8EC86C08C5E3327C898062DDDCFC5ECAA8B99192
+63916FB3130967C5336051C9EAA12965E00EEC5E06948CFC76EA7569F62E917F
+6961306D4C7E11FA25CDDDA77311C76198F23FFDB0D896D7CD87B1E7EF62605F
+7DA05406EA15B76A6CCD2B44482320942EF0AFE71008CD0FB00A20EA93FFDB30
+CE7C083F7ECC120620901392911F0260AC22C4B5CB0F99AE3899ABA5ABFA731B
+1ACC72D6AB20FA0854E26B3A2B1EB430FD26DC0529E12CD2E9B0ACF363CD62E6
+ABD71A25F90C63221F610DCB345953A3D7298D8349A3CA3B4C68190C4D7D0FC7
+E1DF632F358987036E507CECF9B6288F99C7C9DDB26D04F76173FD7EBD4EA2BC
+EB7F45300282249B72ECCE0F0FAAFF243A83340253BA0CE6018C529C9B5C342F
+D92E96705281952147F134E0835A5CF8B332F3DDC103EBAA2511F566630C3DA0
+94C8056F38AC21F54492D6422849D220FF7737E7017FDD41BDE1D0BBE8430C8E
+225EA7DE27D3A07344822F8322CA2E85D95252517314B14B69EB6AD8A63ED9B0
+19D4E4E8424163870FFA1B43C76F8A78CA692A0D6D27D8CA302CA546383F3A07
+916B1E5CFD82055B90BED150098C5B7DED63749A5F225F72EC1B49398683A011
+850319F9A1207BFA7AABD4ECEBC4F2BBEA02CBC4B395418458FD1DF1C1571012
+71226693569C263137A05FF844202E698FC51C3EA44D4A1F2FFDB41633DAD991
+E00CF949E43CADCE75EEEB90185D58A8F5B952CB2DF3BEAA13E30AFC4A6E07F7
+21CEC8AE855B9FFAA554FCE973AD12331B94A3DF7E7E20218D3DAFDAA64045E5
+C7F1A5D5966FE289EB3772B5CA678BDBF64F529C275AF22F51B01C6F9B79C733
+88A6837331D8C3481C5DD52666A072465F9D2BCAB7ADC8653A8FB0258A251F53
+F4F29E0AD8201F5E201AB63DCAB93AFE5AD73166A3FE1CAF8473EE2767CB5474
+0A87820AB767D84DD5F64AA00AD42B565354B5A6C07E23CE618C085A1654C606
+2AA5CFFA99BB1ADB845C5F1796F107F4F78F15B750163A64A792FEAB051F00A3
+EC652C43F9F4290A2B58B234E559F7E564339D9F6958BC6A1229D4ECB29B5BC4
+4F657670039936DC92FFC160415A9A96BF01A2975103C001DE902E56B437A360
+5DAF980BAE42B1CF0E68EFFF2899CC6F566AEEDB7F0FA2F7C44A9614B15C96E4
+E8E26A3C090F9176864F74243424BD9FE758FE08F4B34D3D0DFD875EAB3FACC5
+B6A9C69A80FBA2C62553EC5A57445D0D3BC2DDDB6BBA637B95C25A63BC763C43
+C28F1EACDA48212A299D4F86FBF34DDE0CF5EF657F7F142A5AAAFB7EBAA3CAFE
+CEBC71557E545DEBB80488909079CCAEB67C776A2FB6BA55D451E959DE67269A
+09DCB5EC644EE877ACBEDE4312101CD36E4B80C93101D2372A6D05D0CAC960F5
+17869C88C1A487035866CBA895848BA2162E9B50CE6BAE31D11DDB0C7FBE4043
+5C57469404054EACA6EFB3B24A55199809998A3127DC8550FB9B3B0285C7FA7C
+FD422E3AA4E578D6210B7423194A676C002706A7D3BC4D995900AB6556C492DA
+14E8B4BE322AE2E3C9B744DE9C045D9B6A45473ACB4695BCE76BD2A05A5B7765
+840AF067AB2E3E74E58C40358C0070B87CC97A8C1C03E3E2AAABE323B97327EE
+D99FE8509C51BAD987EE53498C1BF2307868898E217143812EE2A68E80719F47
+62E99A2FCCC56273CC4BBAE95BA15B96F8DC21AE33D695F7528390350F4C7AC0
+F2188948C926203A18F1C6533ED3F156C3E6873E74BD369D1CD222C545D8310E
+163BBB9D6C8AC4F4DB68DFC969DDB7DABB4F1355F699EDB5693BDB69CC364436
+D54754FA1EDA7DAAEFD936C5AEEB004D73E428DC58D5C88314093BC194CB99CA
+6CD303D23C907CC9C7337EA972917E4A824916FA4E243430251B9EB5E40FBD2F
+D0913BDD933520D8222A2EC00E65743EBFCB25D83AA818FACB1EC130E5EE98E3
+C21F638F8BEA10CBADA5CADAF628ADBC6867B932811C460A9CDB090A55BFD546
+447E45E523439E55F3BEFBFBF3F6DFDB99CDF136C4C14B959B96ED152EAFD0EB
+5B3A258860DF03901FF004F808385D352756AD70C2D967C47027D8A3C0A06A48
+2AE98B9A2D831BD3A750E693F69827D78B0B3EC8BC272D00B7DF5F69979F96B2
+1FCD30D809084EC17A11DF54644AD2388FB29E287B403C4E3ED73D14E8DF9BDB
+0613B7A93BB9D24D30082DCAE0D18FBA22CBCC0CBC739516B591F0A276F26CF8
+9F98B45293806C63024EB4D9A21B1692A882E04150BE8D77FA5CA263DFB40A92
+DA23A9D968223BBE74931F20E9EB59F44C18808178C70B0FDFD88218E8B37C40
+A9CD39DE29E876EDA4D4DF0779273E90E05748F34054D891C676999DB0FCC23E
+74E1E45CA2B4DA72AD6FE718739A173A7F2FD9DF7E530216CF2706A876AB9644
+BAA1A247E8BC77588337697F06FFE83B44C8C12B0A47EED53B8F53B7EA4924A8
+5B2AF250D1187A387C8CD33AEE21C585054E5E4F39BBA2A26BCF6006D3D9C856
+44873EE53F1ABB3F8713AF0E6A118C28BD3BDCACE2D58B7EBF3398EF48626B27
+86C840B2DAF6CE25378A894D8B5274C56F45AB77FEE98AA2FD5F697870C3BA62
+9C52FF6002722C36329CDDDAEA65E2D150863E237AD7B7071208B28A4DFD6DF0
+A62DC84C9C40276BF2CDA8BA7718971EC4DC11D6FBD5FC1FB19F497A4BB7C796
+66C4B622A1704D47392B82EA5335E04598C2BFFBD1ABFE2B1EC0F937A206A8BA
+34DA088D35760B72F93828CAB41E43FF83BD7F49DC1A07552EF7DA4312C57D49
+883710255AEB417978092B416F90644F7BF5FCFEDAB36B28CD9C0DA1EC4A06F6
+3E34AE0754322FEC01B4FB4A81670ABB5CEE1A7C8A6745F9098DC4A4DA2DECAD
+EFE2BE8BF49118A6C9964820829B0B1EC8CA6E0928BD7931139710E47398A4C9
+29978CBDEDE23EF300A179E1099B357903979EE55EF779F58AA19150E1A40C8E
+42086D26EAF6BA06B8D789CBA3DD1A2C2A6FCF650E2532F7F3163DC19F1AADA9
+F985871397B41881A15312D1E3F6761054D843CF748D1F24E11B78182B473B7A
+0C6B62EE52A2E317C15D715121DB08BB7C87583004B390ECBC575753C299BBAF
+00EE6556444AC369E6BD2F92F8A280EF975A1DBE4B6875551A7A816DAD922BD1
+DFDE2583ACB47B0B53D2AACAAA1A8E5B063301E5A6EC6E71A1645B3929F036FB
+2DBB1B53CE8EBB57846A989FDE37E61413D34178A49CFC4384D128DD959DAA36
+D066E70EAA80587EB49F9BEDC5BD3FBF7CA8B5BCA0812CBB1F02E122E578FA99
+512BDCB987B747B18A6653464FA664A1474B189DE8D4A0B4AD6F9163AFCB8797
+E27773DE6C2F5576A92C4E4602F2BF09F0A1563DF0FC25D75031D4BC03F19B4A
+36D3C06E8F194CFB347E6A1A6B88D65D48D0863D296E2C78AAB35954BAFB50C6
+9D74AD0820BB68EDCC21BF6265E205483C5FE975AF38A41B333DD1B47FB60F98
+9AADCFD1E6EFE4C828A907EABE50D83688DB15D31F938C26CD42D3FC0058ACB0
+49D51BD3223C2185590F9F2224C1AE45152FF3B4CAABB1D95765C6A2689F4858
+E843B03DF8C5A2F43C998CEC23E3AF2185DCC31DE6E4701AEDE8AA97262EC0BD
+94E4E0723358430E46A47DB940A686AF71E2F6411A45D19DE889B9100F4172CE
+2C79359820A018CAF9DD87A809C7765AD22C414A1CA599CE18217C3458729099
+DE1A5D4BEB7479BBB87E9C2DCC57CB187FDC9A9ED5F8398522639BD02BF782F7
+22BF58053BCCD4790E98D8BDA345DD3B9D69922F057DE5C54B93932C1994C2AD
+48C395A52FE6CD5AD7673FB3C9FC0017976A08F304A8E7D4A22BFE4852669923
+AAF550E330ED9C4878855079F947A865EF4D78E963836158F3CA9F2179BE7B38
+782D60984F44002A37424AECD0071E206B6BF255F8F7AF86AC139364E86CE5F2
+2367E58FA6816C49E10BDA1EF5E22BE8E6AA07C8DB0ADF64E91B87427B69FA3D
+816C190439A0CD836E53D32304081AE55DECD4FE2F62A404ABCC03EDD35F0A96
+E93B35F08EC20162E6E76F61A23DDCD69D28C2795CB9024C580166C4D42521FF
+9B75045439DECAD65913CB73C11FDED54D1827BC9410195255B9657218665291
+7E28C4B9E49424FF954A0377F66DE8EC925A951A615CEEAF18E5652706A71EDC
+167CBD53EFD21D2BD6DA3CCAC6D1A7DBBA961F1D9698D11BC389323373BC8E4A
+791EB85460DBCF21B697E84AE685454021E9B25B977DC7F15269B15877BA10B2
+DC2EC65BA009DDB335242ECD48B7E0807750CC611A5C864C0B918DBB1E74C748
+A721FC2D5AD4548C321BCC73B01005B5EE3C4455CBBEA258AA35AB211B29402D
+9DB5E7C4E80A09503491549F30BCBA30C96A1E736E510616412B7B6342A18E17
+777B32973B62296B60B05EC092172F6F9DAF46E38F2A7D1230DDDBB7FADCF955
+66DB050F2AC4409CF6CD9274F586E96B8D5EDD9FAD1D0145BCBA5397BA7ADEA0
+D15663BE3D10513F8600FE55BD85F0ECC05AA746B75BF95D59584DF153EF00A4
+226B95CC841F5B2EA24F345D87BA59C2E50930044135F3CC6784F551E6B92A5D
+E84B174EAA46B1CF816CD51298D3AC5AEA723D3A1C1883546956BB1C18CAEB77
+C40B76A47114CAFE0ED066BD91633F0F90A4D07127F8C9E412FC9A9C2041AA67
+8F78ECF3955D97FD9072661B17E135C89467AD2E8CF470474154FF66CB481B5F
+FF43E69BBBDD74D0A248C636953E48B8F2C34A082094C39DC9495FEB570B0603
+78DB4C622F31347C29B7F4F96019FB2822AE4DD803745E3C391BBEE32DC23CFF
+8AA10A64A1FE942F35D6FA3767B48196FFFD75953FB2832E1F65864BA31E745A
+9E4EE99646C234ED9E20BFC1EB52C595D02C6C42ECAF9BF7DB20762980FD733C
+7E1D3B52CFB232D750AF6E1BA7C0830C2FF62FA0E148F95DABE38BC2E01D3018
+A2BC04891485E74C646662C144016680D0984B2E852407994A897CC2D64C14E4
+3B50DB3EC7FAE5826A5F376BE48A732B8FC2FD629565A5463F525372BDE229F1
+1084C2C11C56DBD580E43731402ECFE28BC143AEA240D5E80510AA6C2F405FF0
+7CF5E4E08C89AE19498714E160C191EE872130E01AA7F6A9AE909ED32499539B
+71E21626BF15D9A084FC4442AFDA60D8880076579765FBB57326A62B0C4CE72E
+A246EFDDCBAFD84BF3A7219D9A34F2188DBFBF3D4702550E82DC3208B6721972
+8C5ADA0E27010F3C260FDE91818E174ECE94050457EE9F9CB567E823B37BA473
+789C9C4891AF5024286EE44CAE8927C817AC0FE97C0807BEBE9A9038C8CD6CA9
+D4D8119315684D47CD3AB5866D51CB184F41DC3B37E0DF288E8B0A640C82EC99
+8A82FB80EA38286422D913AEFC979EF739319C14F7358D67D6927DAF090BF54F
+D4E710B5836B7C434F53CE33811078F5DEE653537B6BA77EE2A3B21C46C4EDC4
+637B703271E2D99C4779AF43A6726023A1E12761D201AC8310F78A2A2C72B733
+FE8282B4237A5D179565D91C1D4AAFC2EB4134CFA0D7D53312E5FD3E32FCA7D5
+21641FB3089FE5D2022B7B28C21D45ADCA15FD36825DB45209259CBA6D685A3F
+A7E81682D8991EC7CCD548D7F919B5FF2B967974D3B51589B22BB3D18B35C343
+B8EE8D12DDBF1264A691B3F7E2CA7F9505CAB382B9FF7FAD33716417434D35DC
+292DF580DE8643986E6F28B901D2A995D9D15A5B940DE41773D783B55D0B8803
+172CC3C11E1AF7F1EA37A060272494D947F561F48F9187AC00D21D6F631CD66E
+EE1442530D83617349B6B94B1BDEC87145B9C3C3C5CE678AE80C747F33C9C17F
+4618F74BA7ED5654BAF80E58C4EAB8E13129419B82F9EF28D7319ABCDFA4A2B7
+99B4EA63D7578DCE142D36A2046212CDD125B827B006CA4021D1DB95229EED8E
+86F019AC46C8446B9081E1AA9E8D93BF6EDDCE85491BCAC7008CDBFF78D22445
+C1EE36DD63CEE245E8399B9B29E28E070B913A777D52163270A0F8F1B25698AE
+3285B374F5F6626ACEBEF23D3036F7E0436B83C2D3BFF396787C97D207B43276
+98D24B1756CDCFCEADB776655BF3B168D1196F85ADE7E5BB9D476EEDAC887521
+E0ED4FCAE086B8079607DEB9F48C72D3800C898F853725971BB8C55D885DAB3D
+AF1F61AE2B78AEB40B57AB05DB85CD83A9B2B06E8383AF39FB99EC4EF5E92016
+5AC282E09EF816134645CD61E2ACD2D28B74CBB216312411EB8803A4ADAC4B24
+B9923455CF09BE1B82143E8F4619BE05CF8B9128FA7606D47425353A65156E28
+F973441A0C0A1193C90D9F21125783D7B4BF5E081C8F1A1B20B95FE8AB15F5B8
+C4C65D36434DBAC53BCCB8DCCC36EE954E74F2EBA8589B5A7389ECDC9268FD3E
+4E2F73EB27E7D02917CC9D4DEC989DFC487C42616268476B6E173B05DFE13EB7
+E3AF75A0A5F96ED845053DD6841BBADDA5BDEC78B633F0EA0B356670B4ACF8E1
+CCB807FC61B10E357E84DB435C29178EAB5C89DA28C552145DBD31184B7D45CF
+99A5928914089EC6EEC83D3541D665B10EDA33F52B2780B866A5014EAF6BC778
+6B745F622247BEA874A5493B53B0F9C8D732D64FB6112ED79C9E0B9E930B3572
+B95AC29D8DA0C2E14FFB0EE6381C0AF772054CB416E6ED333AC6DA1223BE4366
+E36AEC27458F290ED609B2F26302B6540BD0C84DE4F53786972C8FAF3AC3EDF0
+51E1197F1B7739CA4C8A76FF280DE76D290034C2AD5DF4F7FAEEE81B3F3AC162
+7DCB0118133ACFEC07929E44DD805DC7254746DB504300ED0884A0FE10CED5E0
+6153F68489B5B9C4FF3574560FCA81CF98DF0213C8B88A1577565FF110B3D3FB
+4721707ACC1E45E4755CE64094514C8267BE9E8EC6E0E875416040323469EF82
+2D8EE7660596A3A90F1F357AFAF5C5C0EA57AB5AAFE15CBB12C2135F1A43559F
+24EED8F24B9397C19F366043391604ECD8FD90EF651596B234307338E01469BF
+F4CFDEFF1FCB6BDA4197981957E69B5BD7F5B34539A97ACA5FAABD428D3D0CE9
+F57C12DC210BC7894E86272850DCBF42224D98A53D268FFA73B7A2794D19F838
+74A177070420C50FC71C61B2760023B71BF317178D018695BD74278F722F2326
+DC988323290A1CECC34458C3A3BD5C2B6D5B95D16A0801D0D8E24E09B7ED7483
+DC079B05CC9F0D74CD2AE7C16E1D24689A53EB0FF380CD72B1A8EA2CFCADFECC
+6E160A074A4B9CF77F1155091AD7D4CD040BAFC296169E62EBF22A31C8799270
+52A896FF7B570DB0B3BD00AC1D544B83A5566C24B1AA378BF830139EA95ABC1B
+5CC3AB7BA70C25D13E14012C2BA4C6A5EB6CBF6580C629A7592A3C2F8232CE28
+71FCD9B12A3059571ECD75DA09B14F30D85496DF78B40305469134302C1E03B9
+26B10CE5FB201F7156C5655B94930DE277BA98D3EDDA925FC2A4D4A667C4B7ED
+4CE368F5D922272B1DF626693A0EDAF8F0B7F9DC2B495460922D9B0C26F91C7E
+D0E3670A684D1138098278B1A73E2B2884BE990B3C9378FCD18CE6ACC373E732
+2CEDE329B9B331FE485FEF959C10B1C174FC916E4FD9ED1E456328B313082DC0
+15AAD3216ABA02BA6AB181A8158015B8187CA6C46B8FBF54860734A638AA833E
+D71C61A408101EDD4290FB662A5B3442037567F6251712E9D143EE768635D05B
+9D5880EF5F9F22E4F12811338B2AACEE06571BC38521BD8CF00579285F5B7F11
+24A10CA0F291B9E9505DE45DEAEB631BBC382AC35F6301E6B61141746B83AF3E
+96779CA75EE681FC34E21C45D9BB2C2844CDE5785C2FC15BFC8ACEF5DB6F5F76
+34DD5821DABC85F976C83E07C4013B8151593B29EDFFCCD3E98444CCE1EB5FC3
+CB8014317EFBB9EA7F107E909AABE10650924BA73185EFEEBC97998FCA0E2B34
+1DBB2935DD1F23173D9DF75D2F2169348B35F0E716DD4E48E2AC8CDF3F6E79DE
+8322F9A14792FD62A5C19255E2B5EFB9E35835339E3D60E1D7511D39099A8819
+94267197986F4D8B240312988ED8689E0529A1802520BC0BFF609D92EC95A923
+1D85ACE06503D1A6ED2D8DF8E5AE31966FEA136FB13C54D71E7DB6C82D7263DE
+921EE8F33117236CB935B769A854AF74C73805CE05CFB989F2E8279A52149E06
+3B380C5ED496F852F10893FA1A52CBED190C4B939C557219DF94B27A23DFD996
+FEC06573BCC6E8647BDBB4A2F9C08951A5CA2A21958C9918703B053922E1BECE
+F194E062490477C2D779916C3C8E673191E772F99F44BA018CE279D8EDE3A287
+92BEBC3087D83F94681BE89387C846C64E58E8E249346BE5A6257529AC898B09
+6E9766C46CB3829F1EE51AC766648270A8AC4502D4979837665CE04AE6825791
+EF6C45BE6D1FB3606A8E87C9F313F5E6AA8E79EFB3685ACF49689EB83AB9AAEF
+F72D52F4FF005FE2ACD7BF11F3C2330F18F99ED227321617666A72A9829F929C
+EBDF212A2153631E5E267C2A17E4D7462A9F54D6D93C0264D53963B3429C6007
+6E6536228C0467ED73B8A5D56C84E11CC77E5278063BF01CBCE4B4BC2D7FC2B3
+F03A5469B868A1298AA9CF4FE60D0FF3C9AB77855B56BC32614B61571B6E1267
+C4029FC045A3A0D6639A8E85E76509AE3CD7ED65356E64F77C418E339727F6C3
+346B934B5512E2CD8F47FAC3BFEEE49BB1A3EDDC541AED28ADFBA62705A060E5
+2209DEB801BB6686BF201095D983CF7D2071977677B86BBAF28490A1B34447DC
+05DD594FC1951ABA54385BDD5C6C5014AE671B124A21F41702587CFE3888641F
+3DB7FB7C6D49CE0E7A30131A39F32CF4D5290EAB977A53795C8A9C329415A804
+47935A081381ED1BA419CB9F3775A0FAEFA5AD8FD19F9B03EDE298597EE492F1
+2BCF58C559FCBA11B3E1C02A922180E63F677E16A4B21F498BED3D5F1214101E
+63CFB32AB0214194BACF63680CA9E531A171879354A1A8DE7B69ACBB00D0FC7B
+8B746C4B214ADEAAF7B10CD0FC4237E25147C62BF807BA541FBF20A743256F10
+753536BE3D63266E6E169D94CAD416CF33E2D8DFD72F543BDD4199C4CC6E6DBC
+2F4331761492FFE0BA24C672ED1CD740949E8867EA0361B39CD10B929FF46D11
+B1D344A9F606B01272945283B438B1E2CBD1B4994D0144E018EA9C0C85199DA3
+E47647EE1EC28158C8E4E8BABEAC3A0BCD0EB8BF796045FFF51DB3ACEF7E6A67
+C2AC0D1F706060F729791470F5E8F2A16102247A5149E090F91A8F109234AA44
+4690F51357B91A989298E8E57481F30C5540171F238160402AA3945E564C4964
+DA9295C84E6D91462A9E6230D379A9AA22EACFE7B1BF3BFA9F5042F211E9A7AE
+7BF5CBADD7064DF23655A43849BD036F4412A20D773A10DC344C6DE979B11213
+5BD222B9132AD8C446F4D96D4A9DD1D5965E5E2A1303E1863DD5CA72F0FCE3B0
+C55EAD9479C3B76F059D10CBE3F5A2D0681E4E0FE1F32F8F679AE539BC493776
+CB92FFAD8FB5B434CE801A068C090FB0DEB681A478A5323EAC3E572A436DDB59
+6FB812BD36F4CDA86356A4E70D701A220A377E60B686BB83DD1379B5C51DC2EE
+371709A481A73484AD764DC0323BDE83C01153905F271C5CE8E40B511C38B41A
+ACD8C463A4FACD56DC47CF4E39E984D976AB4692109535863C134C022D354233
+81426B0303BC3EF562B298A35C08180A934050565D5EDBC4FD218EC5CA258123
+2D889A632859102DF00C38AD1132B7CE2935F7C6D7714172275313A3F61D57F7
+0A03277EE2EE195D07F7A6BC62B31B6A44E058B71B176C99324FAEA818389940
+1E371849C0E4AECFB4839DCFBB55908CAEA7B708DA103B5769310D93189CCB2B
+156349F522A08D2CF18B6E89A4D32D69CC4870026110D4BDFC835AF8E29759E7
+A1A50DBACF09E533CF65B3563DFEE71F6B4FCEAC2DD7FB9E19E23E0D52559349
+03BACBCFB2A399399CAA19B4361B325FF759B58A008E001B89E531C6FC7C6F13
+671FEE6A5A606E8B477F377DB2BF46C4FCC75ADB06D2FD4575840DAEFBB62305
+99D188FAFE4592C8DE6991B57B703932C112C88DACED3D035C728C8F4823567F
+55D09A3B98D8FAE8771D6D1A7BA159CF4B2556FA4ED8C6CE9F72C1ABAF2F7384
+609E55CBDA027F4E92818449B7E3EB9D9C00C45331ACBF75A52143FDA65CF7A5
+E096784CFFE90141E4F399466C2B05EC9B3258F2F520E19DD3DF4EC01A749A0C
+822ED605BDD874D981DD5035861410370A7A274F1CDE60A17D515B26497148DE
+452E94FDB10C6A4EBD9B8C3350BFC35AAD342FBADFA9EF5F45AB94E123B36F66
+982EA714574E9B5444E886A088E1AD8B7D63D83130A3FFE59BE180BEA4EEFA7F
+BE8FE639163BD3821EA17CC112CACB5E00C84971D45A8C3693906BB7919FB462
+3020C4BD5466B92BA6FE65976D58DA18EBDD98116FC1134525236C6408977728
+0DB9743689B8F79AF73D67B9BF839D8657924323877017E0CCB0291B9C4A0505
+5899D6AB45FFD198F58F3BAB9BB971CEC189256DC896EA4813E99894493CEB7A
+A43AA8A45E491370822FC3C645D3C89C4536031D01C4E743D4D8E175E01B963F
+FA5D564840F6C4B668DE88DF1F4825A236864A034D01A2229A3C196C41E2CB8F
+2214EAEF962F6F411791A9062325E1C31A4E162188816ECDB607BB
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTI12
+%!PS-AdobeFont-1.0: CMTI12 003.002
+%%Title: CMTI12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTI12 known{/CMTI12 findfont dup/UniqueID known{dup
+/UniqueID get 5000829 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTI12 def
+/FontBBox {-36 -251 1103 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI12.) readonly def
+/FullName (CMTI12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 44 /comma put
+dup 69 /E put
+dup 71 /G put
+dup 76 /L put
+dup 82 /R put
+dup 84 /T put
+dup 87 /W put
+dup 97 /a put
+dup 98 /b put
+dup 101 /e put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5E0311AE44B83C3E
+4FBCDB0B74ABB18FDD877252FD3501E05E597A77D142BED9940318B98D508672
+4ECF79C43A857674E4DCF2556325CA8CC1C432E54543F706987376A084BF512F
+0E4C517917FB1D607C83E479DD094240C3F309A57561CDF8496722F1D3EBF6FA
+45CD3D7D810E2C07D39BFE08C0A25FD568DD37C2D182E5D30A7B2855BAD24559
+D455B29B1F723BE1C4F827D72B1156DC2C1EEA76C9B27733FBB23ED36F61919B
+4A6E8253C8C05F3D4BDC64B99B8494F7C37E9C19DB6A9CA8E9B0F9E7E3346EE0
+EF416016CEE932E53A26599DD8CD09D77DF591A9D532AAD3E321CDCB28636809
+E61D9EC969F2E27190A475407B90211902429778103D18665A681B0DD51F6E92
+58D1288E2AB3FAEF05854938FEFFD3B4F376AAD303ECD28B23649E5D4C3CB85A
+5C9CDCD1853BBF3282BCB5CF57720C6CF7AE468048D7AE5BCD2F15DEC1B33B5F
+9917BF69BB64261CF101BB47A09E47D6508250374D00ACEC3E3FE8C5330AD9DB
+9D9F60CC170F2FD6DEA12DA24CEA846E25ED6683A213E4FFD0BA239894C920B0
+EFF562ED994A7A46F8EE2AF98F88317E513A06AB82A629979AAD3ACE316E7074
+01EAD920A9E1D54E8FBD623773429C58A2964B498990E8420E5F7A45B3D4342C
+1AC109FA67D4BF33C9D1E0E2973BB8B2495DDF5A7F8E306A0C712BD7A7FC98C7
+44B26D102D3CD44A320FE89CBA6B3AB39627DA4679A5BB7C27276B34ED66260F
+DEB659189A797BC41D05323454CA4600A6D840CA3C1DC31BB7FEE8DE367B8177
+3F1546C9EA98FA9F7CD61F177CEC2950526D54A6E7A0038F2B20609E7BE31EFB
+51FDB6829852937071FEAAA3A0E51E625D7FBF2F7C224467C7DB77F7AFE006A5
+418CF691841AB7A9923506845BFE066769A01A51EA48840E898FC6FF0ED9C2A6
+1DB61E8840029ED92A129D38CAFAD4084B17679A84A262D2F9376363D4B5E46B
+1C94302E5CD24CBE93A27319A8F79138414B2E94CE6F78C6F06B544D5862C2C6
+297EFE524BBEF0CC2C32F63CDCE433E19B52BF0C2C7064E3ACD429E2466BB85A
+ED82C6EDC8AF5D75855B43A61504128F75C2DAF7F5C4405BE36C136CB809DF31
+A40E0DEE80C10F6E6442CDCEDEF8DD0C01FB2C035A1D136693D366552862A421
+81A290080EB8A3C5160FC2CD760A69F8254E8B0EC8E7280EC33802EC2668C149
+73CADCFBD4E56A1E7A9CDA3F6A50E00AA536B02B4BBF4CE60B7A791098C3E434
+B5A7F17D6E461FEE23C6C8C148C54D14345DECB7A619E56268131F65F86C51B0
+E45860D46A1A798134AB3283BC8B73D9B39EC5D0C1241A85AA46B02E51DE6433
+60BEAC76351AB35D8DBFD60C6F12F8B32E08C671E0269174E1E142E687B1C558
+5668FDA480255261DC29288FF5ED56B50DD8512BD4948F31F14C71CB4F8FEFEC
+DD8E4F4EBE9C28312640334BE454634EF26B5FD02A93210D487AA4F3AF284479
+303995AD31F4A6DD2C2DCDED3380D50EA1D8743A3C6561CBF4DE91634374DE87
+FED0CF17C73B49060648AC6AF2921D19FFE1B7C7E76AA84600078A0160160D5B
+BFAA2007AE70640698BBBFEBFA5C11F351610023F563840413AF6934156D93B6
+551069D681492EE73D480D648503801A921E37868B4ABBB013B628772DAC3683
+3E44C318352E7700094ED0FF624AE560D2A783343B266FB925AE0D990B65F8E4
+7A9725F23F0A08EFA08F81616A5D51E5EC31CD1BA229A89AB63ED782A6D716C7
+1F00BA66A3158CDEAE3399653D7A29193760AD92F65C066A4DF35F91BDE771B1
+74E17E4879428B5692343AA963A349064693B52F14B09C5F4B329C4AF4078998
+D3F6C1046538F989C8AE84AE032A112C3E657907EE7A844B14C6A0FA8C9A1CD9
+797E195186C478057525CBCCAA0FFB09F67F97E69BC402F6199B6900D9F285E6
+47D359B1728728770C95B1A85E22D2132FDE7075F8FA1123F62504E53AB106D7
+99B33689D55D0BC0C552745C5129CEF9F874850240FA6BF5F4779E35BF15A8F9
+F425ED40480C60FE3ED85173E620320A462092834C0BCF6EFF9F1D5912CEB941
+9C18D8EED5CA36CF2C7D3965BB0929EDBF7FC997A9CFE79A9FA9C54A11E1F421
+7F3FA4ABB80A3C60E9165DBFB0EA765BD21846FD1260F1AA4644CBE05CEC736E
+638311023F9F51F4C0166733A32BC1F615C8D9256E44BE8C2FFEC45B7B612FCB
+21C52DB57E87EC8E166498AA8A4528B7C612E3BB8117D6BAF5CA8F9D038C1430
+B7EA8699F31ACDC03774AEDDF6B73233944A1A89ECBAED2EFBD30DDF42821846
+AF828EC54BEA6E7312B3255A7F55783C5D4AF1D9780A9670C9C7E02A50535A13
+6D957F895D53E4E18A4B4263695DF2BD9626E717D5C3B80E908E59EF5D093798
+7215550A5613AB86D67C1F89C95FBB0E6ACCAAB397479D483AEE4607E111EF34
+2FD92DC7F991B6AE84BC7CB982D819A17022ECFEFFB981A6F678655A6278825F
+0EFB5733C5F46529EF1FBB01C6BA7413BA9211251C0A70A470F735A96F6E0D45
+DB1342D6B97ABC234790D346C74927F5C910F71918D615CA907984F0229E3F54
+4F5F75AFF784C7A470DDCFFC308ADF6EF43979DD3B54C6A8DF3B53DB783B81E3
+9C57413C3A317419C190F207720743084DC20288C1AD08B8B0FD4ED805FBA8B5
+BB874DCE4AE93AE3B8A117612787DA6C8C7512191BC36F6D8AA38F39099474AE
+CD570CB5570BBA932C9C7A63DD386CABF1956FF87C266BF145ED5D27547234BD
+943841047FE9A41C24B82FD3D3EA49A56C56840B1B359FB2A3F28E10AB09AECA
+2FE2520DEE9B5542591E72ACE610DA4BF31C6E204574DC78033008F019519B2F
+E45C99F1B938D212602E824CA1CA020211420C77FF545DF586702451B0923EDA
+CA15BFF98CF2F0A56404591E57F7C89CAC6D22E0FEF9094770CF003801E5CC08
+110B272A50805F89C0BB5C2966B9385C26F4A5008AAD97A29408A5116BE613CD
+5ED9F85D2BCDE96FCF3121D5EE1D455A4CB03BF2AC33493FEEBEB955EF737F7A
+EABF96C137DD84B3EA39C61CE95B5967405CEF17D9CF1BDD1199346F95E77CB8
+5FA2D38D858DAEF10D0DD660211C8C4C69EF58B60DEDE48DF76300EAB8F0A547
+6DBC87BEE8DD4EDFE3020BA56F362503AFA62D8C13BB270C3884560E227AFABB
+5D810B2B092531A679485FCFFB88BA8313646B644A35C413053DECCD4B371450
+18F54701F610E52E727AE8D25A8093B60093FAF775B6414F66F43F517488B4A4
+00AA4F672A34A73531218601904A7F50A045E80CD804D028EAFF506EDA1ED998
+ECF16435C6CA8E203F2A813506F4B8CDAC0A3D69F4B704AB80F170EC87B7C732
+AEFCBA3BF4050A9CFADB87F7AD4B53BECE197C10A2E84571A640328B90E9A294
+73F6CDDE4F4AF9F1F3A257BD130454CF95D390ECA95FC4221D5041E71D65FC21
+8323BA5A3335E2E905E33D5BA56BBBC9CC30D25764A066D013B116E693C56762
+4F683F112A572C2C04ED041CF7BB4FAB0D899B3F2679B431E8993A650184CB4B
+1B391B39929AF803F868245A69C964B560A274B07DFCB88A6508082DD6092E38
+80D9187A146B60B225CA22F593AA6B4B7EE1EE41A0D375C4FA69EC6C8E02B54F
+B855D385C973A7223DE22465D039D213315C35F0D079E8CD030F62993495B2EB
+A0F9BA98565F89D2E09BB60D90B0CFFFF1F0845810ED27CC8F1088F74D48A30D
+7FA0728498E78A381B0169B7678520EB5769522BB5838212D32C8C1ED5635753
+EAA3C14E6640BC34D43EC162711996E0CABBBDE0932FCB6B2838C22C0E42DCE7
+1BC85E372F24C1145655D59CCD50EA6E1A673CB0342BB744A43EA1B9104CF736
+324E367D82ED67E01B0608294A91386045C1564E4E417E1A62EFBC148C0B4A56
+73A98AE2F2433164740B839F851F9C38124B3C01CD976128DF6A06FEFE14B960
+4573E748370D70F9FBFDBF875584852E70264766FA5CE893F74D0D5884889178
+078CB149821A743D797E9577A7D27E7ED607349CB2CC6968A7CE402DF9A55069
+4A985B517B714C603F993944CC64083DE3D5F969F9C5913C297E8493D310CA42
+795C94740A5E5D3415CE7B4A5AA11A940D93992329D8B00213244405BBE73958
+37CD65B6AEBCCB2263B937F671FFF3C6314D400983E5AEB6A34709D854FDD0AA
+3D27A62BB23E253E6E2CA994294009B857B5F1FFB66E772A0BF9D83F4F72B89F
+51B125AC9E495343C9D84A4BB4759DA4D2ADA38A195C7905CE288FD8634ED996
+9068F0DC8DD08F3D3A1288A271E7F7EC4AF76EF6A78C47BAD95FA14A3AB690E1
+19A13639774593D77FC1610D7F1E25A31AF94C5354B35500B8E57B0F65AC82C2
+2A519581B587F5E3C941734A4269842D38F74E89C2AADB8ADB3D16542B0485BF
+BD4F1EDB4064E96A330D735F73789614C8D606DC553A0A2409CF4C595AE51505
+CF203817971BD7F9B3346C036A18FECA44CE1C2042BA4E7FFA3FFEB6371A06F9
+30082F47FE87B207E13A68BCA122968AD74CF6A12EF6767988F0EB0CB64981C9
+30D9717F6C7D07F4B37CFDD68EE4480C0CA305AFA4BD21DFE131D6715E839973
+E1271BF576F70C2F8C6827B3EF02CCA123EA46A02B2722E06078C3D9B3743CDE
+45B43B561743264277D0D1FCACDDA80E5C6185E90F82D1DA4DC076B6BE49D2BE
+F03EF513F1861CF66D2B7F8D52C7A5C21DF1276B72CC1CDAAB5A16D20722A95F
+8B1EB6E6B605D3878831204A0EFC95CB3C5B588D4F0A540D466D13B8468ECDC1
+DB08D36E7FA19709A67A0FA08421053EEC9068ED464D29BB1BEDD0BA88882707
+9F41334C3BD3F995321711B6ABDE3C12A8907F930F7AF490D774A05398ED03D6
+789D91B4DACEA3D8EE11C2CD850A6EF4128B60EDE9BD37710F43836EF6D53FD2
+D8123F81EC6F01A93A8B36FAE49692E7276F7CDCCB09F332ECE359E3E7DB2364
+A60B192438FD158B18CB3EB40FD28F74A740367F02D5CB6B53959A0D11BDF388
+9AAEE02F0E96AE2F802FF08BF778F26DBBAC8F5AA04CF3AEB180235BFDE493DA
+4D0B13E0B61696A8ACE4FF7A09956A1896B2875E5B2BDBA09DA08B9589957E85
+51084D76A00FB728E286CCFD2F53088158005599835B18F6F5AAAA6051270AF2
+59F7BF641B0AF4E79F4491725189B89E57CD10B442B8EF89345D04EE3E18EC98
+217D81FFB1B473B9562605F7B0AC3FA8CFB798A988E5FF20F068A6B2399C71B8
+2E3C19E58601B0AD3872170B0AE8FA33F3A50EC5E67EC22C00D3DDDCD7B592E1
+0D1CF31DAA48D10F7C6A56CA052A5AE914EE08CEE011FFF20D00B46A7738C434
+D70F1040C611168D2C1851DBA89DA526428E6D5DDA244AA267AE3559B0C7DC8F
+AAE1687F823CE628AAD59999E74DFFACCF7D3412B466F6C3A315D8AA3350FB18
+9EBE417717C42F3201D19E1870A2A3424E96F1A9734F32E85DF220E08C4DDF8A
+AE6F3491A3C805578924F36C146CBAF1D38C8C18D18E5A9B38236BD3E6B9E5BA
+595F66A2A8DE9F52C9DFE00ABA5B99806A87D2EA39EF2C3A8D94FBFCB0CB5345
+9AC36328B89AA13E4BBFAD70314009B0A2588847B7092C9EB938DD069CFA3679
+73D9CF01F9756B931B34E70F4A5F1C41FC577515A5CDC49FE2C9A13D62E7E612
+2AA5969248241BEAEEA5CAD34154EF5F9153D85ACD6FBD6B7F2834BC65C77E27
+5ED803220949B14126BFAAC7728CAE16EF205F408232C5D7B83AFDB9C2191997
+38005204EF424640DE1163B577274FB455EC0383BC6CC17F35112AB638743DEF
+9954A5B2DF6A50DAA8662967E8E2208A9D1E3506309A9EC4C001CF91896E79A1
+F3F6FE998DDF7C7971707CF7DF7415F6D42EE28620C0A225A1B9E389F397F972
+552E566F748613EA1FD417CAA7B90A2BEC1AB07F44BB8AB6ED829F2D7F4DD597
+989617E6BEF5E701498823382DEFC2D5FD078DF888DDCA99E62890AC0E5BE8BE
+0CB662B561A49D2221847151D203457C797A904BCB5A1D68A51EEA20A167047C
+36FF0FDD999E46C857864D1CE7568CE9518230418124EE5E51FD96C0FD8EB7BC
+2A49F49AD72BB71F849B112147271000A77F41CF476AD687E6BC3DFDDE0CDE1D
+ABE816BF31348D25FE0A11FE7F5559BEDFC24A14F91BB73BE7F5FA95DA24D705
+3DA96E8D05B84A1E5BFB0F15D7D4638CE4C63B74404128CF56A016180EAA054B
+85FEE6937681557D0B5BC3C560947D456F48D7F4CB7A5EED52B103281B152E3F
+ADCE8B98497B74B05096AABA261D2A2EF56572904ACE2866C6A081C926BAC3E0
+DE02EBB63FA29197B3812809F08A9E3D5ECFFF751E60F7082749F57352040E06
+CAF9290336395684E85FA2446FBF1D0223F74B0D3464B06975010B83D0975181
+3DB6C0E2967CFBDAFBD555018305184953487AFAE112D36E696DB8A18F3E3A74
+C8B123F16D077DBBC85A226A26D406F622858EB7F1646BC0093A7C9711A1DCD2
+6302B0611AC20A3870195D8BBA4E8E4F2CC73030B2354308CF8C06D68DD7FA14
+87CE9D6FC7A8A356AA2DC356231B4993655A0FF55AF67090E2947C2B7FB9E96C
+EAAF52A01ABA6D69B738D6E3D4B2CF1E037D991EB5943BB0E6AB3868138CBF20
+A112805F4CC00C65A4BE86D7492C23E34CC0BEEFAA0403E2AC21FD33D7A7FD09
+9DCAC0BE550881647B322FE5806735FD993F5ED7C62173AB29095F67A626B9F3
+20829E4788786C978B4BC9BAB9B3A750F130F9D4AFDA6EA3A7DF09D7615951D1
+0C783A653F0BBFC23902019BA276A6D7944F1A34C1EC7E2710091C0B94CC3938
+01C50C5E4A9C19F47D69074023F574D7A7302565EF9920A8E2A5076E6E3DDD2F
+409CF1AB8BCE348FE63A136E03A520DDACA32571675AEB94D761B7B625AF1626
+8BA9ED761E12A52C511890DAF1F790857C3C9FD3FD033A8330CD8E19266FE888
+76AB1F3B3C8BA1FFCF3A6CA570290FC1640B6C4231D8346BD346E647D138B2B7
+F7861E2C7C7C4431E3E91E318BA1DF8338AD4EB4AC104EBE7AAD8F5A09E6AB3A
+48B9EB51A85277B221E3A22AAF38219B681918DBBB2F77FA8AA27F310159C763
+A6E66D93879B592289B919B425FD7A367B7820FF430100E1EAE0877F84326FCF
+5F1DD99964BC6BEB63528D2B218CCE41024EA2CE703959071A65EDE99127EFB8
+0CC01566E5E52DB32D01512383A7711C7770AE17A71E5D95629642AA79CD5F01
+D37FC89696F25C2EE4DD70DBDECEFA4FA2CD5D2F8ACE75937D2B1FEC7A31A893
+16D314D800AFD3EA28068983A2ED3A7C75A5570F30A2824A47D6A789AC554C3C
+A78C2DE9771B86F73C66EF8E1D0FD046DD4F19A31EEAEE04D5F38B73C623F326
+F146C7164C9B18B5EED2113363092ADE0ABF0D7BD4C10BE9766F81C34878B236
+1A0FD6D8AB4BC7E3C01F1C880C3A9186E4006210D22EB64CD7690FDA750EAE7E
+C87A9D29128D49082578ECC0BC977D91E9CBB1ECC0D3527DC0ACAB39402015F1
+B067FC5E7705586D97E81F8911FC2BC8E7C077384AAD4DDDEDBEF65CA4B75F6E
+39E41528CF53CADA928537D557B518BB740593A6E4D0100ACBF126FF20888342
+A0D3D7C201C4CDE8CBF59A1BA4F924E4EBC3E02883D5FDF2C8249AD8117332E1
+BB52D2F621115C0F9803741E49217603F45AF366220D299DE85A0508D0717C6B
+F11163BD8F0621055AF19529FA17706C1C0CE6A08C84FF50D42FE47F91FBB7C0
+75B515E12AB563DF30F06E69DE564553A2A0EBCC7E875A649656DE0C986ACDB8
+60B1B84DB9BCEECCD83F382E45211576133DBBDA5CC4582CC3218E63D9A9F8C8
+1F1A4ECF1D881CD77FFAF275CFB0D96F60F6ED768BD87C1806BB162028CF9D79
+ED3F21E23B4554E19407D4A864472E90A42B6F41EAFB6A2DD46609E9A78487CB
+C560C89F0C83AF7745D914324C6B643803A47CDBA682D9039A73301D8EBE7FAC
+67B4BD470C85AE4C6C9A353EBE7FAE21C318987F8E7B756F708B61A940FBFCD2
+6D87F92730C0E4302EAABF4EC427633D901C38728C7192AA9B07FE46FA963C9E
+FD94B5719D301A3F0A68D25342DE4962DE6D2C0CDFC0FE93F2F482B39C51D812
+8E7832D473B7AE6E9218358D021FC2D6DDD200705B97E525E33F68FB4C5970B1
+83E9C4FEE96C8D4DF87F70F6C69E37786128691713CCB019E9DBB88562C949A4
+A723CB173ECC7E16781F23094C65BA164E54F8B8EC1FFFD774CC160C502F5CFB
+D1D4B715C1461B8657CE4C79F9F53E8CA0DCA70743BC271FB324D1696AA1E540
+3059DB1791A5E154447FAAAE6E9B41E72B0C542380B3C65806969D1829191E5A
+5E8CB3380F00DBF31EAE885FF0BB2A4250709BE834400F915E0A9289ABB8C252
+BF7C5FA2DF0B17736F20881ACDA4185AB1483E8AAB2B18014401565C32A5DED8
+883A9527CB9EDDAC301A0014FA03934944F1116FD14C8836E5363248994DD193
+3157A53F7207628DCEC444C12DF92CAA1F72612F76E73E3647172B65BFBF4188
+7CD9247F0AD8AFEF08685833D95CF0147D00594EEACDBA0DD45F3035980BCD3B
+5E73186AE453DEA1B84D009E23D658705CF6DFF36DD38F435B495AA5D9F88CD7
+4FB0E612A25E1D4037F2E0F20FF29830E66ABC6C4C95483249AB0877CA164412
+73A0337D1B3CFF7DDD20C24444EAA44FEB555C34F37F7F6037422EB23F19C868
+AEDD2E507101D208334A72FB1B4098228F4A6F88424D655E7EA26D6F456C391A
+B2E5A2E7759483FAF10D23147FD33963FC1AF53610FB251FB77F8063302577BB
+8A8C85B118EA44F5FCC6A9967002F92896ECD5262A984C1C78E044ABA1149958
+B33BC03E47B570132951A70085E9370AE3F11995EB3BF45A24FA8E4B6CB2FD3E
+490E570CE9DC758E427375F34B60952ABCB4796891B62D72C1D113417DFA4806
+53C9E65ECE8D49466E6ED1B54390CB3735C63A7B77346165209789CABBE8FAE1
+108B32B17C1E8AFE493BFFDCD2AE843FCA98BBDAD683618DA8DB5EEF72E5C62B
+071774675DB85385832831766040E012B07C7CD7F49BEAD25A1014A0E7E7A91B
+AEE8FC944FA5973A579CC1D94AD59B6463A6CA753DCB7F3450CC4091B014BD08
+C7FBB7265F5C91BF7A88ACED9139E8D66CBDFCB749D19DC3DAFA7BC9D9DE1C0E
+4FC00F04A96A3F5C26DF13E27F2134128191D541893C4EB55A34C0B9A616FCDE
+BFD87E55B05C78012899FDD28497BA26D4A7E3A59790D4C6B0ACA23BB473C8EF
+8047D4D2251F9BA150F386445666E1DBBDE805322372D460C6756B57766A686B
+2AED804E5DD4F0BF08BA3C78D31D693AD1DE0928DB79CBD4E7BD028A844AF922
+B48517FC2FE2F9CADDF4D5CB88DF25561C1BDE7D5E9A26CC48414DE5620C92C8
+C6D6D07DA742A94280A8101A66ED8C6F685C5CAAFFD9BF3498876632B26D408D
+78DF5EBEF4EAEC0BC9FA77B4658DA17681365915815E56353F2F0A22E405AA16
+AFCD2D2DD479C8867066A82C932D85352A8F2AC09974E73E6F14EA9738FCBE75
+E92AFFD69F70E308A4E4551703F7C8781984771AF28D4D0FA0953639865399AB
+E6DF95BB930CA2F11EA12F98E83C2DB2717370DD8458344B948529971A949CA5
+02ABEC52708BC62D8BAF876AA9BF8B97D8566D86D22B6B1B3DE8E7C569410537
+57A89AFF02149DA7F5DF077F07718BABAFE82099E510F8F0099414943CFC1D03
+2B1D33AC209D9178C9319A67F9507DEDAB232E62ED04B15B5D0205E23506FEDA
+C76F7702A75F394409000FE8D9CC0BCF6CDB096D86A278962BDAC9A62C73B1AA
+7BE98849FEDA65AAEF9F5339BF5CEDE547CE789A92DE842C5D70F7AF920F3112
+812AFB221D5C0F34551A9F8A6E8DC3784CB834EEB649951F905F345A2E3D2888
+A9C4D04CA205037E16AF23392067E24F630DC33BED95F60D4BF3B61D9AC94540
+577250E0A0C83CA927FCA845381671C6FAFC88F4EE32783D3406D701EA549E10
+94A2730E9ACAB68BF30F487E48F2951D8F2C7FA831D5DB14B0C754D8C582B3F6
+1791074A04BD93B6D1ADC0926F5416E1308C61911F430070E20E02CB0A7A921F
+948C7C3E20D1C27FA5ADB06FBFF6B21EF1993DA470A7C32DF0446DC10C07E280
+47FE18895EACA37CCE6D188ED26E439C58255AC3CE51E83585F2DE7C89DF6531
+3D520CEB57B6688F5DE7894219A0F37F7FE82CA9B43941DFE63A7F54A63860BE
+19384A7BAC0A1937F5A998970906311B5BCF32C99EBFC1F02C1DB553995D95BB
+5292665CA639D6FBDC349F322C6CE639A4F83D5286B6CB759DA80D595C946297
+A23347C7B1FB127FEF07E9B88A793227F7CB0A59CED8E2F73622154D2C1E73B3
+49E5BD733EFB07A205F97083CE0553210865C912168F6C168C4B381C20502E34
+634B71915E0EA91C9BEE54F8E24931263F5858F52546BB13911F0652BF400DE2
+427AF0883D7A361451A560104306CDA2C3419285733BFE25B62EA405D8CECFA3
+710AE911C81D27A30F4464BF66F5C4047637E44343F2B78FA1A79763DA0418E5
+2F414C4D7C49090E6DFDB371615FA885B19FFB2861FD68161F30FD0277DB43E1
+14676B120E31554AB5FE3D1C6DE69428D1D33CF59A85654CF6A5CD3393EBF39E
+ABB501CAD9992D532A0CFF51C082FE514448982540AA5A754D1E54027BEC4336
+7EB4443D5F9DADBD9AC62EEE0660A614E4CC432FA45958AB11CD728DE6414029
+EC1EA0BF418FC30C84E9A13AAD7DAB42F6F11426AE7E74158C7A9B93B218B60B
+3CE1F810B36AC6434E008333CF9514D7305E9D724E22B4551B5AF54F8D53B483
+5B21107281E7259B0E6C40E4BC04FF6344B005BFDA68A233BD8100C0A43337C4
+160D45F78BEC989ABE8529765868AAF16E533CC83DFA4577E0810830EA4B211F
+175ED1DF345E72F57D64E68CD0F58CE1D6F2F03022B3E6D121BE34152E170EE3
+439BF58F97634225738CB5783A36479D8B5C3816BBF9AC5BEE738493EB7EAC99
+BFB0F00C2FC607E452241D88250251C194AA43B8902550D0EBBCF40ADE481F03
+69B45314E22311CEC56E3CA807EADB2BB11AC1B41AC561A17B1D284EC4F3E900
+66BCAC12198EBBC01971D0D2EDD67F0CC6AEA6111BE36F6AD17DF810C503AF70
+E13DEAD228901961A09AB79146D26F1FB6AD51695BF30C2B99F015EFBB2589A3
+E222C5AF06742F69B995F0EEA89C7701EF1877C5627FBC2AB7E9BC8C1B24AD6F
+4DE755D6874C697E1858E86D944A474796EB7C36E469179361F244110F40C021
+6D698CF0EACA95F0E582D1088E3617B19E888D7894D0796D33FEA4CE92EE4C52
+5D90173FD157771F0F76677B70039A27D3D57C4AA260215F76D9D56C3B4DE102
+F5299CF5F46533676179BA83168F864829A2F0779B0FD91D0B353B49D3B8CA28
+7CEA5CCE62C2ACB573439B3B4B6367DFEA87A4096DBE0A35136B20BD4AE18CBD
+69D91C8061D6DD4702A97F013B915FF3512A4F05B1FD62333E456B6475B731FE
+A28AF6AD338078ED222354A8B8D0EE52148F9FD5EDC1C461D5EF8303369642F5
+D49278EFF4EF127D0F56161ACDFB018BC268E1F7259FC2DEA318FC33E6CBD06E
+4D71E9F80F2F5760A7961C2B1F8ED9C92DF3634D229AFA14F2CA6C20352FDFD4
+50B1FC6C8AD4F084DDDE32837DFAB8A86BF56C7FBAFEBE8B261D031DB259E3CC
+CA543340B82A44F44226B19ACFFB81BD82E3097B97951D6729CA02D38A0D97A2
+F9CD0B84E171F808ABB57A1B379E536ED215B2D8D567168ED98730231466C015
+679EF6ECCA41163C445D5FBA068BCE2D548A149E82215FFCAD419A366286464C
+19A6B65E0F322E52E14A85E87045770A64FC8F2C4D6A97198C1D1E0F029D0F9F
+4611B2E8AC0F3B96A85FA1FDA56A2713F5A801C0020B54E10026CC0CD6916749
+A2106DC1693EDD05BE74CC57E678198AF41A2961EE607C9F82440DA3F014229C
+2440B459BA288CB052A009B12343DE4EDC1BE72AC167006896E59DD44DC4D757
+ABDFC7AF5B55CC6B9BD17E38B16A97691CD1E265DB2F5257D7F0E5AA8E72B189
+F3E517F4D0840FE3948D2D1C083523E0EE08A2C2F9433E3219B0E67627ABE609
+C96B9B5A64D0DB63BD215C7D1A24A75F0FA5D48953F7A7D83A6F29F87F33EF9F
+C24BA3C795E6A5FC28AE6A64410A842560D4B04718ABB3A9147D22D065C098D2
+8C109C44D94FE00C162F0E5A5BFD9E782CFA3E82058BB79FA43E972A81F65D43
+E1814FAB123E5F1C71786E0074E42FE8ACD45737CF9F7A10B456635F1D97174C
+8AE0AB3479F4237F9778F7ADA02EBF26F4FD5BF91522527A39E038EEF983F6A8
+BDC5DF91751488D32F6DBA73FF60AC1B500010F00B45A984D155C5566AE1337A
+8C0FF12869843EF7C84C5DA228EE2070100295C56294C6DB7854D4F5FEFA970E
+8036489E5CE99B546C30CE03C4E3C2851D1A62E986D7178B008FBF2683326AA9
+F64BB4881D8A9868F71D48C300533D7F187E3DBF3382CF4340482CFD3F638F71
+539697BDE7585EE35C4CB891D407B23F22DE0CFDCB96330AB4C1090104CACEF2
+ADC13CB9D99E6D331F52B0D419A1154EB115C143E317612593CCCBA733F6F73B
+AFD670CEBF488F7D4D052D402419FB451206866F614D48352E481D917A8366B1
+3C1F19EB0AAFCF9F9D25AB743781542514DE020B9767733D7207B11179D6DA1F
+E58D0186F1075D90FE2748D4D3DFC57A81DDB9A4F4F11A8170F67B5F3B11B775
+353BF6E6285748E4BDB13E0CE82FB0BFEB5CA7C2202DDA3D3B6F8A28B9522F20
+8C083B4D6B8B5CED025AAF4F93E07A1935C68D5B3BEB5B00B5928E55AB9B5D09
+B2D230413E81CDCA6E0DE1E0B47236FF5140C2BE75AB8D3CBE139F7D3911F48E
+1B30E55423D1D8C1A309E14927AAA4A8E06BBE0F340FF9471C62A1E81241A5A6
+F79268485FF7A5DD108B96B73733AE13539297A63A05F7F46E5F33A568DC6CC1
+ACD046FA5CF421DFEA4CCBA441AC9D4981E4F282DE1D487C7AB95B64D10B7B5B
+26B722031FF92C2741273761514AC71CBF1F5ACB7C4C3E466F51E99804C98F9B
+4421B02396B401AF9C715C21EC45CCD8DF377353B3C1E139C6EEE5485C05CD5E
+7C61A781D17B5F5A12F0D4E2DE180239E58D967F8C488C9F883A2F3AFFB51EB1
+D029C31045DE8489B4451D24422EAC226A5AFE7110F4637E641B0C25C7E4435B
+53787D714C0214E6296EBF57A88A8D607DD009532328585CBFAC6392C2006666
+5BE46F9AFB87F3EB2DBD186DCEC4AAA5FC1710119FDDB6C709542A86633433E3
+2EE884039C807C23A66D046182B59F0154CE40B7E103D743257FE23062DECAB2
+6423B6E3FAD59D53368D9D99D6EF9D1588CE89B91EC80044A1D849E87BC402D2
+D2E560AF47D6CE854959BDA7625E91F17A03B5903563DF307BB4181D1A51EF61
+5F489CEC76A58DB27BDEE73C0C23CBDD1EF4810F41C540FF422E2DA3F55E355E
+1CDACFED8F285AC9970BB7AE6E39F55CAE10D08A7F5BDB5BF10FE693C27198CC
+1A97F8246FBBA400744D014086B53E8CBC24DEE9197F890B075B3B8CE9530D0D
+FF4721707ACC1E45E429DB249BF2CB897DA68ED9D6B919ECC89200251CC09E7C
+85B37C98BF73409AE02313BA268C135E5A6EFCB22FB7A9D4A2C0218DB50592C1
+35959E2C754329D5AD3E6F1443FFD0DAAF7911D0BD75C701A0AADD9278C09ACB
+8D1F08DEEED2A0BF4C5706802C442CB41DDE0DC844F4594D919ACD596A9D502B
+BD7230EB03FF7DD8CD8EC458219DEC8910D6E561F9A03E57DFBBD841EB35EA8C
+452160FEFDDB9E6B44557077B47BB1C7FE42F037177577E36185942E96E39E3B
+E9D75DF6ECB5E7595F6B4F081BF680E96F50DBB99B2B3405BA1C13ED2647F8EA
+96293D1B1061D06D81AA409FD2AA463B06C3B87308706C6B3AC16F26FD0ABB69
+8D0D2A55CF09450AFC18012881577B08DAD5F01DF2D33595D52083AD37EEC354
+F55356176B92745650482109056586258A6358A0D2EBBFA74E6D7042A53F3459
+028A4FD3E8595B9FCC829B6D2B37114E7AAABAE153FA34F51A691E36DD3023AA
+B3658B4626B30821BA2FAFA2D82A24C33A453803D47C96A2745555C020CC9C05
+A21D81EBECB08F96CA57D01ADF3F4DC689B526B217292CF6D2BF0CA6FB0984E0
+8C26EFF220899F5FAAACB31CE4E6DBFFC590FB414E6259F73521BAEF9D04D3C5
+7C3E6CF2B239A8925E34A9E1C8A92BFBBF5B953D0B8AA2594D687B2E252B13ED
+7B8A0E4E9C8B27D39752DECD86960757D26278FD919AB6943C668B38CC7F7F69
+436AEC24EB32FF3FE54186474B1FBD86D1282534BB3A6176FCE2E406CFED53D9
+EC74A838AFAFBF48B3BB4C82033144D2D719F55CEF11FCE3181FD3B15E15B3E1
+B530D9AF8410A9C9809DD806A2F639F040EFEC1E10E07F8325254DF468D3A1D8
+160FA55BFC7115A0F80C533474D1BE92BB2998793DB7749245EF32E4FBF6D61F
+1E60E9D96C538CE4519A3DD4303CC9279F2ED8CA0EAA49DFC49223A2A40A079A
+6C51E429B1F1063EC7E55CD9343B46E642B8C0D914D82B7BAD786C5BC255392A
+89742025D9900418079B92F323F235B22E1E546EFB2C8F19E432F0BA090F584E
+53AE93959D6A0CF44753EB9AD1FB49F3B3EDF251BE748E8F58BDDB5D4B1F761B
+E1502E0CE6755DB11AED6F21A00EE59362C254C572E9C52788661977B78A6E67
+506B61173B93DDA6D3ABE9A13EF11A5DD244061FB161D0348582F975CC8BB3D3
+FB3B3036260EB6D45C7B132C7195261F0E08027806D9C84867CCA923D4D5BFC1
+1B8B955969742D5DEA0EA562DCE8409F29C6C0735BD977DDED9DA5330BBAF3FA
+972CACF53DC150203DAE2AB4145B0B621546B4B7487C2495B53F3D461FECD570
+8FA0D2A785AE36C42C8424FB03BC2491F9FD0D68B7A4FB0C8D341F36B88C9DE2
+41D8393A39D5B4D461983AA508842E2C52D26C33F0886B9B047CCF6EFF3BFED0
+E06680ECBC38256FDDC73F54FB7649D3EB2221D48E0BE38DF0354764BB7BE1AA
+9C7E30DE9681C5EC9444D8941B68C4A7939125708B27DC184F3DE914848D4B33
+12D21C2B9958A50F5E1CE54AE464C446317341E82473FED5E2EF1B510FE3094C
+6F3F7A48D3A18ADF6327498061E24290862EB303DAF10B98E962AFBE06216662
+C400E44D45857EBF38C69F7116F7506B1647860656FDAF72EC6962A32C0BD2E4
+A500ECE63180ADE80C7C61BD4971BAB4E726C2E576447BA3DB7B2C51C3BAC516
+1F2E4CEA45A6D7526418A0149781D6D6972CFCA57D7D4DFBBD050FCF477E3370
+D5B56C95634CFA8616E5BB1DD3BA63A8855528BB1468C7ECFA8F806F00ABB1E2
+1B420D7F64477295FD676F37D0542075C64B7A1C1E506343276C789E9ED9B684
+94000B88843766073C596F8E86E5AAF1479ECCD62D18FB82DF93F4D0BBAEAB7D
+319E45C3E1FD6DA52EA2A71BDC6E6D0421B4CCBBF5320DD9DD74EBCE9B2F0F96
+02837911D1756FE5DDFCBFD662B77067D02C46DCE1EC38EB7CCBA89599F52F2E
+88B1FA31AD3E155164C796D14C2CA83B23E760E83EDC2401FA7FE913E7770D42
+48AA1A9020D90B539EEB7E368AC9AED254EDE3B8640F61320F932B36262C1AD2
+671856919DACEB02B5567FBC98F57495AC7D395307B76B93220A6E6A35EB0F7F
+C239AA91984BF3AABBE551F1429A3420A229EC65195FE0AD7BFEE0F7839AD3E7
+D6B5342FFEEBDC8381EC6B595EF8A2BBF97E9EEDD30CBAEA2CACA72D813E3AE8
+CB3E9D41D65F890B0CAD
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+TeXDict begin 40258431 52099146 1000 600 600 (users-guide.dvi)
+ at start /Fa 165[51 51 4[51 51 2[51 1[51 51 51 2[51 2[51
+51 1[51 67[{}12 99.6264 /CMTT12 rf /Fb 134[41 1[55 1[43
+30 30 30 41 43 38 43 64 21 2[21 43 1[23 34 43 34 1[38
+12[55 3[52 2[70 3[28 58 4[55 7[21 12[21 46[{}27 74.7198
+/CMR9 rf /Fc 133[50 1[59 2[62 44 44 46 1[62 56 62 93
+31 1[34 31 62 56 34 51 62 2[54 10[85 86 1[62 84 2[84
+88 106 67 2[42 88 1[70 2[81 12[56 56 56 56 56 56 56 1[31
+33[62 12[{}40 99.6264 /CMBX12 rf /Fd 136[39 39 1[39 39
+39 1[39 39 39 39 39 2[39 39 39 3[39 1[39 38[39 10[39
+39 46[{}18 74.7198 /CMTT9 rf /Fe 205[30 30 49[{}2 49.8132
+/CMR6 rf /Ff 135[40 104[45 15[{}2 90.9091 /CMSY10 rf
+/Fg 205[35 35 49[{}2 66.4176 /CMR8 rf /Fh 139[37 38 39
+14[42 53 46 31[72 65[{}7 83.022 /CMBX10 rf /Fi 134[44
+1[60 42 49 30 37 38 1[46 46 51 74 23 42 28 28 46 42 28
+42 46 42 42 46 9[91 1[68 65 51 66 1[62 70 1[82 57 2[35
+1[70 59 62 69 65 1[68 6[28 46 2[46 2[46 46 2[46 1[33
+28 4[28 39[{}48 90.9091 /CMTI10 rf /Fj 131[48 1[48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48
+48 48 48 48 48 48 48 48 1[48 1[48 48 48 48 48 1[48 48
+48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48
+48 1[48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 1[48 48 48 48 34[{}81 90.9091 /CMTT10
+rf /Fk 133[46 55 1[76 55 58 41 41 43 1[58 52 58 87 29
+55 32 29 58 52 32 48 58 46 58 51 8[79 1[79 80 73 58 78
+1[71 79 82 99 63 2[40 82 82 66 2[76 74 79 6[29 52 52
+52 52 52 52 52 52 52 52 1[29 35 29 2[41 41 40[{}58 90.9091
+/CMBX10 rf /Fl 134[44 1[60 44 46 32 33 33 1[46 42 46
+69 23 44 25 23 46 42 25 37 46 37 46 42 9[85 1[62 60 46
+61 1[57 65 62 76 3[30 2[54 57 63 60 59 62 5[23 1[42 42
+1[42 1[42 42 42 42 42 42 23 28 23 2[32 32 25[69 1[46
+12[{}56 83.022 /CMR10 rf /Fm 136[65 45 52 32 40 41 1[50
+50 55 80 25 45 30 30 50 45 1[45 2[45 50 9[97 2[70 1[71
+5[61 4[75 1[66 24[30 44[{}26 99.6264 /CMTI12 rf /Fn 137[71
+75 52 53 55 1[75 67 75 112 37 1[41 37 75 67 41 61 75
+60 75 65 10[102 103 94 1[100 1[92 101 1[128 81 2[50 105
+106 3[97 96 102 6[37 67 67 67 67 67 67 67 67 67 67 2[45
+37 44[{}47 119.552 /CMBX12 rf /Fo 131[91 45 40 48 48
+66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28
+40 51 40 51 45 25 2[25 45 25 1[68 68 93 68 68 66 51 67
+1[62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 3[71
+1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 71
+45 35 35 25 71 2[76 45 19[76 51 51 53 11[{}85 90.9091
+/CMR10 rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%BeginPaperSize: Letter
+/setpagedevice where
+{ pop << /PageSize [612 792] >> setpagedevice }
+{ /letter where { pop letter } if }
+ifelse
+%%EndPaperSize
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 1140 -125 a Fo(AR)m(GONNE)31 b(NA)-8
+b(TIONAL)31 b(LABORA)-8 b(TOR)g(Y)1488 -12 y(9700)32
+b(South)e(Cass)g(Av)m(en)m(ue)1609 101 y(Argonne,)h(IL)e(60439)p
+1453 614 1050 6 v 1586 786 a(ANL/MCS-TM-234)p 1453 899
+V 583 1829 a Fn(Users)46 b(Guide)f(for)g(R)l(OMIO:)g(A)g(High-P)l
+(erformance,)985 1995 y(P)l(ortable)i(MPI-IO)d(Implemen)l(tation)1930
+2264 y Fo(b)m(y)394 2456 y Fm(R)-5 b(aje)g(ev)34 b(Thakur,)g(R)-5
+b(ob)g(ert)35 b(R)-5 b(oss,)35 b(Ewing)f(Lusk,)h(Wil)5
+b(liam)34 b(Gr)-5 b(opp,)35 b(R)-5 b(ob)g(ert)35 b(L)-5
+b(atham)1082 3168 y Fo(Mathematics)32 b(and)e(Computer)g(Science)h
+(Division)1332 3381 y(T)-8 b(ec)m(hnical)32 b(Memorandum)d(No.)j(234)
+1047 4334 y(Revised)e(Ma)m(y)i(2004,)g(No)m(v)m(em)m(b)s(er)g(2007,)g
+(April)e(2010)28 4804 y Fl(This)f(w)n(ork)e(w)n(as)h(supp)r(orted)h(b)n
+(y)f(the)h(Mathematical,)g(Information,)f(and)g(Computational)g
+(Sciences)h(Division)g(subpro-)28 4916 y(gram)c(of)h(the)h(O\016ce)f
+(of)g(Adv)-5 b(anced)27 b(Scien)n(ti\014c)f(Computing)g(Researc)n(h,)f
+(U.S.)i(Departmen)n(t)f(of)g(Energy)-7 b(,)25 b(under)i(Con)n(tract)28
+5029 y(W-31-109-Eng-38;)37 b(and)g(b)n(y)f(the)i(Scalable)e(I/O)g
+(Initiativ)n(e,)j(a)e(m)n(ultiagency)f(pro)5 b(ject)36
+b(funded)i(b)n(y)f(the)g(Defense)g(Ad-)28 5142 y(v)-5
+b(anced)29 b(Researc)n(h)f(Pro)5 b(jects)27 b(Agency)i(\(Con)n(tract)f
+(D)n(ABT63-94-C-0049\),)d(the)k(Departmen)n(t)h(of)f(Energy)-7
+b(,)28 b(the)h(National)28 5255 y(Aeronautics)e(and)g(Space)h
+(Administration,)f(and)h(the)g(National)f(Science)g(F)-7
+b(oundation.)p eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop 28 263 a Fn(Con)l(ten)l(ts)28 466
+y Fk(Abstract)3448 b(1)28 670 y(1)85 b(In)m(tro)s(duction)3135
+b(1)28 874 y(2)85 b(Ma)6 b(jor)35 b(Changes)f(in)h(This)g(V)-9
+b(ersion)2276 b(1)28 1078 y(3)85 b(General)35 b(Information)2774
+b(1)165 1191 y Fo(3.1)94 b(R)m(OMIO)30 b(Optimizations)38
+b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
+g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
+(.)130 b(2)165 1304 y(3.2)94 b(Hin)m(ts)31 b(.)45 b(.)h(.)g(.)g(.)f(.)h
+(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
+g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
+(.)f(.)h(.)g(.)130 b(3)374 1417 y(3.2.1)106 b(Hin)m(ts)31
+b(for)f(XFS)e(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
+h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
+(.)g(.)f(.)h(.)g(.)130 b(5)374 1530 y(3.2.2)106 b(Hin)m(ts)31
+b(for)f(PVFS2)g(\(a.k.a)i(OrangeFS\))52 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)
+f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)130
+b(5)374 1642 y(3.2.3)106 b(Hin)m(ts)31 b(for)f(Lustre)92
+b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
+f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)130
+b(5)374 1755 y(3.2.4)106 b(Hin)m(ts)31 b(for)f(P)-8 b(ANFS)31
+b(\(P)m(anasas\))54 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)130
+b(6)374 1868 y(3.2.5)106 b(System)m(wide)30 b(Hin)m(ts)93
+b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
+h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)130
+b(7)165 1981 y(3.3)94 b(Using)30 b(R)m(OMIO)h(on)f(NFS)38
+b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
+g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
+(.)130 b(8)374 2094 y(3.3.1)106 b(R)m(OMIO,)30 b(NFS,)h(and)f(Sync)m
+(hronization)83 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
+f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)130 b(9)165 2207
+y(3.4)94 b(Using)30 b(testfs)61 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)
+g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g
+(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)130
+b(9)165 2320 y(3.5)94 b(R)m(OMIO)30 b(and)g Fj(MPI)p
+1053 2320 29 4 v 33 w(FILE)p 1278 2320 V 34 w(SYNC)38
+b Fo(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
+(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)130
+b(9)165 2433 y(3.6)94 b(R)m(OMIO)30 b(and)g Fj(MPI)p
+1053 2433 V 33 w(FILE)p 1278 2433 V 34 w(SET)p 1456 2433
+V 33 w(SIZE)73 b Fo(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
+(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)84
+b(10)28 2637 y Fk(4)h(Installation)34 b(Instructions)2557
+b(10)165 2750 y Fo(4.1)94 b(Con\014guring)29 b(for)h(Lin)m(ux)g(and)g
+(Large)h(Files)77 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
+(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)84
+b(11)28 2953 y Fk(5)h(T)-9 b(esting)35 b(R)m(OMIO)2919
+b(11)28 3157 y(6)85 b(Compiling)35 b(and)g(Running)h(MPI-IO)e(Programs)
+1687 b(12)28 3361 y(7)85 b(Limitations)34 b(of)h(This)g(V)-9
+b(ersion)36 b(of)f(R)m(OMIO)1881 b(12)28 3565 y(8)85
+b(Usage)35 b(Tips)3151 b(13)28 3769 y(9)85 b(Rep)s(orting)35
+b(Bugs)2937 b(13)28 3973 y(10)33 b(R)m(OMIO)h(In)m(ternals)2847
+b(13)28 4176 y(11)33 b(Learning)i(MPI-IO)2858 b(14)28
+4380 y(12)33 b(Ma)6 b(jor)35 b(Changes)f(in)h(Previous)h(Releases)1984
+b(14)165 4493 y Fo(12.1)49 b(Ma)5 b(jor)31 b(Changes)f(in)g(V)-8
+b(ersion)31 b(1.2.3)51 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
+(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
+g(.)84 b(14)165 4606 y(12.2)49 b(Ma)5 b(jor)31 b(Changes)f(in)g(V)-8
+b(ersion)31 b(1.0.3)51 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
+(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
+g(.)84 b(14)165 4719 y(12.3)49 b(Ma)5 b(jor)31 b(Changes)f(in)g(V)-8
+b(ersion)31 b(1.0.2)51 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
+(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
+g(.)84 b(14)165 4832 y(12.4)49 b(Ma)5 b(jor)31 b(Changes)f(in)g(V)-8
+b(ersion)31 b(1.0.1)51 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
+(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
+g(.)84 b(16)28 5036 y Fk(References)3306 b(17)p eop end
+%%Page: 1 3
+TeXDict begin 1 2 bop 892 263 a Fk(Users)36 b(Guide)f(for)g(R)m(OMIO:)f
+(A)h(High-P)m(erformance,)1205 416 y(P)m(ortable)g(MPI-IO)f(Implemen)m
+(tation)1930 607 y Fo(b)m(y)749 798 y Fi(R)-5 b(aje)g(ev)33
+b(Thakur,)g(R)-5 b(ob)g(ert)35 b(R)-5 b(oss,)33 b(Ewing)g(Lusk,)f(and)i
+(Wil)5 b(liam)33 b(Gr)-5 b(opp)1796 1097 y Fh(Abstract)256
+1249 y Fl(R)n(OMIO)35 b(is)i(a)f(high-p)r(erformance,)h(p)r(ortable)f
+(implemen)n(tation)h(of)f(MPI-IO)f(\(the)j(I/O)d(c)n(hapter)h(in)h(the)
+256 1348 y(MPI)27 b(Standard)o(\).)77 b(This)41 b(do)r(cumen)n(t)g
+(describ)r(es)f(ho)n(w)h(to)f(install)h(and)g(use)g(R)n(OMIO)f(v)n
+(ersion)f(1.2.4)g(on)256 1448 y(v)-5 b(arious)26 b(mac)n(hines.)28
+1734 y Fn(1)135 b(In)l(tro)t(duction)28 1937 y Fo(R)m(OMIO)350
+1904 y Fg(1)418 1937 y Fo(is)28 b(a)g(high-p)s(erformance,)g(p)s
+(ortable)g(implemen)m(tation)h(of)g(MPI-IO)e(\(the)i(I/O)f(c)m(hapter)g
+(in)g(MPI)g([4]\).)28 2050 y(This)i(do)s(cumen)m(t)g(describ)s(es)g(ho)
+m(w)g(to)h(install)g(and)f(use)g(R)m(OMIO)h(v)m(ersion)f(1.2.4)j(on)d
+(v)-5 b(arious)30 b(mac)m(hines.)28 2337 y Fn(2)135 b(Ma)7
+b(jor)46 b(Changes)f(in)g(This)f(V)-11 b(ersion)165 2540
+y Ff(\017)46 b Fo(Added)40 b(section)j(describing)e(R)m(OMIO)g
+Fj(MPI)p 1826 2540 29 4 v 34 w(FILE)p 2052 2540 V 33
+w(SYNC)g Fo(and)f Fj(MPI)p 2649 2540 V 34 w(FILE)p 2875
+2540 V 33 w(CLOSE)g Fo(b)s(eha)m(vior)i(to)g(User's)256
+2653 y(Guide)165 2840 y Ff(\017)k Fo(Bug)30 b(remo)m(v)m(ed)i(from)e
+(PVFS)g(ADIO)g(implemen)m(tation)i(regarding)f(resize)g(op)s(erations)
+165 3028 y Ff(\017)46 b Fo(Added)29 b(supp)s(ort)g(for)h(PVFS)g(listio)
+i(op)s(erations)e(\(see)i(Section)f(3.2\))165 3215 y
+Ff(\017)46 b Fo(Added)29 b(the)i(follo)m(wing)g(w)m(orking)g(hin)m(ts:)
+41 b Fj(romio)p 1937 3215 V 33 w(pvfs)p 2162 3215 V 33
+w(listio)p 2483 3215 V 33 w(read)p Fo(,)29 b Fj(romio)p
+3002 3215 V 33 w(pvfs)p 3227 3215 V 33 w(listio)p 3548
+3215 V 33 w(write)28 3502 y Fn(3)135 b(General)46 b(Information)28
+3705 y Fo(This)28 b(v)m(ersion)g(of)g(R)m(OMIO)g(includes)g(ev)m
+(erything)h(de\014ned)e(in)g(the)h(MPI)g(I/O)g(c)m(hapter)h(except)g
+(supp)s(ort)d(for)i(\014le)28 3818 y(in)m(terop)s(erabilit)m(y)36
+b(and)e(user-de\014ned)e(error)i(handlers)f(for)h(\014les)h(\()p
+Ff(x)f Fo(4.13.3\).)55 b(The)34 b(subarra)m(y)g(and)f(distributed)28
+3931 y(arra)m(y)c(datat)m(yp)s(e)g(constructor)g(functions)e(from)h
+(Chapter)f(4)i(\()p Ff(x)g Fo(4.14.4)h(&)e Ff(x)g Fo(4.14.5\))j(ha)m(v)
+m(e)e(b)s(een)e(implemen)m(ted.)28 4044 y(They)h(are)h(useful)e(for)i
+(accessing)g(arra)m(ys)g(stored)g(in)f(\014les.)40 b(The)27
+b(functions)h Fj(MPI)p 2783 4044 V 34 w(File)p 3009 4044
+V 33 w(f2c)g Fo(and)f Fj(MPI)p 3532 4044 V 34 w(File)p
+3758 4044 V 33 w(c2f)28 4156 y Fo(\()p Ff(x)33 b Fo(4.12.4\))h(are)e
+(also)g(implemen)m(ted.)45 b(C,)31 b(F)-8 b(ortran,)33
+b(and)e(pro\014ling)g(in)m(terfaces)i(are)f(pro)m(vided)f(for)g(all)i
+(functions)28 4269 y(that)e(ha)m(v)m(e)h(b)s(een)e(implemen)m(ted.)169
+4382 y(R)m(OMIO)c(has)f(run)f(on)i(at)g(least)h(the)e(follo)m(wing)i
+(mac)m(hines:)39 b(IBM)26 b(SP;)f(In)m(tel)h(P)m(aragon;)j(HP)d
+(Exemplar;)h(SGI)28 4495 y(Origin2000;)j(Cra)m(y)c(T3E;)g(NEC)g(SX-4;)j
+(other)d(symmetric)h(m)m(ultipro)s(cessors)f(from)g(HP)-8
+b(,)27 b(SGI,)f(DEC,)g(Sun,)g(and)28 4608 y(IBM;)34 b(and)e(net)m(w)m
+(orks)i(of)f(w)m(orkstations)h(\(Sun,)f(SGI,)g(HP)-8
+b(,)33 b(IBM,)h(DEC,)f(Lin)m(ux,)g(and)f(F)-8 b(reeBSD\).)35
+b(Supp)s(orted)28 4721 y(\014le)e(systems)f(ha)m(v)m(e)i(at)f(one)g
+(time)g(included)e(IBM)i(PIOFS,)f(In)m(tel)h(PFS,)g(HP/Con)m(v)m(ex)g
+(HFS,)g(SGI)f(XFS,)h(NEC)28 4834 y(SFS,)j(PVFS,)h(NFS,)g(NTFS,)f(and)g
+(an)m(y)h(Unix)f(\014le)h(system)f(\(UFS\).)i(Y)-8 b(ou)37
+b(ma)m(y)g(ha)m(v)m(e)h(to)f(do)m(wnload)g(an)f(older)28
+4947 y(R)m(OMIO)31 b(or)f(MPICH)g(release)i(for)e(out-of-date)i
+(systems.)p 28 5026 1560 4 v 132 5080 a Fe(1)167 5111
+y Fd(http://www.mcs.anl.gov/romio)1956 5520 y Fo(1)p
+eop end
+%%Page: 2 4
+TeXDict begin 2 3 bop 169 263 a Fo(This)38 b(v)m(ersion)i(of)e(R)m
+(OMIO)h(is)g(included)f(in)g(MPICH;)h(an)g(earlier)g(v)m(ersion)g(is)g
+(included)f(in)h(at)g(least)h(the)28 376 y(follo)m(wing)f(MPI)d
+(implemen)m(tations:)55 b(LAM,)38 b(HP)f(MPI,)g(SGI)f(MPI,)h(and)f(NEC)
+h(MPI.)g(Man)m(y)g(HPC)g(v)m(endors)28 488 y(base)31
+b(their)f(MPI-IO)g(implemen)m(tation)i(on)f(R)m(OMIO.)169
+601 y(Note)h(that)e(prop)s(er)e(I/O)i(error)f(co)s(des)h(and)f(classes)
+i(are)f(returned)f(and)g(the)h(status)g(v)-5 b(ariable)31
+b(is)f(\014lled)f(only)28 714 y(when)h(used)f(with)h(MPICH)h(revision)f
+(1.2.1)i(or)f(later.)169 827 y(Y)-8 b(ou)35 b(can)f(op)s(en)g(\014les)g
+(on)g(m)m(ultiple)h(\014le)f(systems)g(in)g(the)g(same)h(program.)52
+b(The)33 b(only)h(restriction)h(is)g(that)28 940 y(the)g(directory)g
+(where)f(the)g(\014le)g(is)h(to)g(b)s(e)f(op)s(ened)f(m)m(ust)h(b)s(e)g
+(accessible)i(from)e(the)h(pro)s(cess)e(op)s(ening)h(the)h(\014le.)28
+1053 y(F)-8 b(or)35 b(example,)h(a)f(pro)s(cess)f(running)e(on)i(one)h
+(w)m(orkstation)g(ma)m(y)g(not)g(b)s(e)e(able)i(to)g(access)h(a)e
+(directory)h(on)f(the)28 1166 y(lo)s(cal)i(disk)d(of)i(another)f(w)m
+(orkstation,)i(and)e(therefore)h(R)m(OMIO)f(will)g(not)g(b)s(e)g(able)g
+(to)h(op)s(en)f(a)g(\014le)g(in)g(suc)m(h)g(a)28 1279
+y(directory)-8 b(.)42 b(NFS-moun)m(ted)31 b(\014les)f(can)h(b)s(e)e
+(accessed.)169 1392 y(An)f(MPI-IO)f(\014le)g(created)i(b)m(y)e(R)m
+(OMIO)h(is)f(no)h(di\013eren)m(t)g(from)f(an)m(y)g(other)h(\014le)g
+(created)g(b)m(y)g(the)f(underlying)28 1505 y(\014le)h(system.)40
+b(Therefore,)29 b(y)m(ou)f(ma)m(y)h(use)e(an)m(y)i(of)f(the)g(commands)
+f(pro)m(vided)h(b)m(y)g(the)g(\014le)g(system)g(to)h(access)g(the)28
+1618 y(\014le,)i(for)f(example,)h Fj(ls)p Fo(,)g Fj(mv)p
+Fo(,)f Fj(cp)p Fo(,)g Fj(rm)p Fo(,)g Fj(ftp)p Fo(.)169
+1730 y(Please)24 b(read)e(the)g(limitations)i(of)e(this)g(v)m(ersion)g
+(of)h(R)m(OMIO)e(that)i(are)g(listed)f(in)g(Section)h(7)f(of)g(this)g
+(do)s(cumen)m(t)28 1843 y(\(e.g.,)33 b(restriction)e(to)g(homogeneous)g
+(en)m(vironmen)m(ts\).)28 2087 y Fc(3.1)113 b(R)m(OMIO)37
+b(Optimizations)28 2258 y Fo(R)m(OMIO)i(implemen)m(ts)g(t)m(w)m(o)h
+(I/O)e(optimization)j(tec)m(hniques)e(that)g(in)f(general)i(result)e
+(in)g(impro)m(v)m(ed)h(p)s(erfor-)28 2371 y(mance)44
+b(for)f(applications.)79 b(The)43 b(\014rst)f(of)h(these)h(is)f
+Fi(data)i(sieving)51 b Fo([2].)79 b(Data)45 b(sieving)e(is)g(a)h(tec)m
+(hnique)f(for)28 2484 y(e\016cien)m(tly)g(accessing)g(noncon)m(tiguous)
+f(regions)f(of)h(data)g(in)f(\014les)g(when)f(noncon)m(tiguous)i
+(accesses)g(are)g(not)28 2597 y(pro)m(vided)35 b(as)g(a)g(\014le)f
+(system)h(primitiv)m(e.)55 b(The)34 b(naiv)m(e)i(approac)m(h)f(to)g
+(accessing)h(noncon)m(tiguous)g(regions)f(is)g(to)28
+2710 y(use)j(a)f(separate)i(I/O)e(call)i(for)e(eac)m(h)i(con)m(tiguous)
+g(region)f(in)f(the)h(\014le.)62 b(This)37 b(results)g(in)g(a)h(large)h
+(n)m(um)m(b)s(er)d(of)28 2823 y(I/O)29 b(op)s(erations,)h(eac)m(h)g(of)
+f(whic)m(h)f(is)h(often)g(for)g(a)g(v)m(ery)g(small)g(amoun)m(t)g(of)g
+(data.)41 b(The)29 b(added)f(net)m(w)m(ork)h(cost)h(of)28
+2936 y(p)s(erforming)g(an)h(I/O)h(op)s(eration)f(across)h(the)f(net)m
+(w)m(ork,)i(as)e(in)g(parallel)i(I/O)e(systems,)g(is)h(often)f(high)g
+(b)s(ecause)28 3049 y(of)37 b(latency)-8 b(.)62 b(Th)m(us,)37
+b(this)g(naiv)m(e)h(approac)m(h)f(t)m(ypically)h(p)s(erforms)d(v)m(ery)
+j(p)s(o)s(orly)e(b)s(ecause)g(of)h(the)g(o)m(v)m(erhead)h(of)28
+3162 y(m)m(ultiple)28 b(op)s(erations.)39 b(In)26 b(the)h(data)g
+(sieving)g(tec)m(hnique,)i(a)e(n)m(um)m(b)s(er)e(of)i(noncon)m(tiguous)
+g(regions)g(are)g(accessed)28 3275 y(b)m(y)g(reading)f(a)h(blo)s(c)m(k)
+g(of)g(data)g(con)m(taining)h(all)g(of)f(the)f(regions,)i(including)e
+(the)h(un)m(w)m(an)m(ted)g(data)g(b)s(et)m(w)m(een)g(them)28
+3388 y(\(called)h(\\holes"\).)41 b(The)25 b(regions)i(of)f(in)m(terest)
+h(are)g(then)e(extracted)j(from)d(this)h(large)h(blo)s(c)m(k)g(b)m(y)f
+(the)g(clien)m(t.)41 b(This)28 3500 y(tec)m(hnique)e(has)f(the)h(adv)-5
+b(an)m(tage)40 b(of)e(a)h(single)f(I/O)h(call,)i(but)d(additional)h
+(data)g(is)f(read)g(from)g(the)g(disk)g(and)28 3613 y(passed)30
+b(across)h(the)g(net)m(w)m(ork.)169 3726 y(There)38 b(are)h(four)e(hin)
+m(ts)i(that)f(can)h(b)s(e)f(used)f(to)i(con)m(trol)h(the)e(application)
+i(of)e(data)h(sieving)g(in)f(R)m(OMIO:)28 3839 y Fj(ind)p
+178 3839 29 4 v 34 w(rd)p 308 3839 V 34 w(buffer)p 630
+3839 V 32 w(size)p Fo(,)g Fj(ind)p 1061 3839 V 33 w(wr)p
+1190 3839 V 34 w(buffer)p 1512 3839 V 33 w(size)p Fo(,)f
+Fj(romio)p 2039 3839 V 33 w(ds)p 2168 3839 V 34 w(read)p
+Fo(,)g(and)f Fj(romio)p 2879 3839 V 33 w(ds)p 3008 3839
+V 34 w(write)p Fo(.)58 b(These)36 b(are)h(dis-)28 3952
+y(cussed)30 b(in)g(Section)h(3.2.)169 4065 y(The)g(second)h
+(optimization)h(is)e Fi(two-phase)k(I/O)40 b Fo([1)q(].)j(Tw)m(o-phase)
+32 b(I/O,)f(also)i(called)f(collectiv)m(e)j(bu\013ering,)28
+4178 y(is)d(an)f(optimization)i(that)f(only)g(applies)f(to)i(collectiv)
+m(e)i(I/O)c(op)s(erations.)44 b(In)31 b(t)m(w)m(o-phase)h(I/O,)g(the)g
+(collection)28 4291 y(of)39 b(indep)s(enden)m(t)e(I/O)h(op)s(erations)h
+(that)g(mak)m(e)g(up)e(the)i(collectiv)m(e)i(op)s(eration)e(are)g
+(analyzed)g(to)g(determine)28 4404 y(what)31 b(data)h(regions)f(m)m
+(ust)g(b)s(e)f(transferred)g(\(read)h(or)g(written\).)42
+b(These)31 b(regions)g(are)g(then)g(split)g(up)e(amongst)28
+4517 y(a)i(set)g(of)f(aggregator)j(pro)s(cesses)d(that)h(will)g
+(actually)h(in)m(teract)g(with)e(the)g(\014le)h(system.)41
+b(In)29 b(the)i(case)g(of)f(a)h(read,)28 4630 y(these)f(aggregators)i
+(\014rst)c(read)h(their)h(regions)f(from)g(disk)g(and)f(redistribute)h
+(the)g(data)h(to)g(the)g(\014nal)f(lo)s(cations,)28 4742
+y(while)k(in)f(the)h(case)g(of)g(a)g(write,)g(data)h(is)e(\014rst)g
+(collected)j(from)d(the)g(pro)s(cesses)h(b)s(efore)f(b)s(eing)g
+(written)g(to)i(disk)28 4855 y(b)m(y)d(the)f(aggregators.)169
+4968 y(There)20 b(are)h(\014v)m(e)f(hin)m(ts)h(that)f(can)h(b)s(e)f
+(used)f(to)i(con)m(trol)h(the)e(application)i(of)e(t)m(w)m(o-phase)i
+(I/O:)e Fj(cb)p 3397 4968 V 34 w(config)p 3719 4968 V
+33 w(list)p Fo(,)28 5081 y Fj(cb)p 130 5081 V 34 w(nodes)p
+Fo(,)33 b Fj(cb)p 558 5081 V 33 w(buffer)p 879 5081 V
+33 w(size)p Fo(,)g Fj(romio)p 1402 5081 V 33 w(cb)p 1531
+5081 V 34 w(read)p Fo(,)f(and)h Fj(romio)p 2234 5081
+V 33 w(cb)p 2363 5081 V 34 w(write)p Fo(.)47 b(These)33
+b(are)g(discussed)f(in)h(Subsec-)28 5194 y(tion)e(3.2.)1956
+5520 y(2)p eop end
+%%Page: 3 5
+TeXDict begin 3 4 bop 28 263 a Fc(3.2)113 b(Hin)m(ts)28
+434 y Fo(If)27 b(R)m(OMIO)h(do)s(esn't)f(understand)f(a)i(hin)m(t,)g
+(or)f(if)h(the)g(v)-5 b(alue)28 b(is)f(in)m(v)-5 b(alid,)29
+b(the)f(hin)m(t)f(will)h(b)s(e)f(ignored.)40 b(The)27
+b(v)-5 b(alues)28 547 y(of)31 b(hin)m(ts)f(b)s(eing)g(used)g(b)m(y)g(R)
+m(OMIO)g(for)g(a)h(\014le)g(can)f(b)s(e)g(obtained)h(at)g(an)m(y)g
+(time)g(via)g Fj(MPI)p 3103 547 29 4 v 33 w(File)p 3328
+547 V 33 w(get)p 3505 547 V 34 w(info)p Fo(.)169 660
+y(The)j(follo)m(wing)h(hin)m(ts)f(con)m(trol)h(the)f(data)h(sieving)g
+(optimization)g(and)f(are)g(applicable)h(to)f(all)h(\014le)f(system)28
+773 y(t)m(yp)s(es:)165 986 y Ff(\017)46 b Fj(ind)p 406
+986 V 33 w(rd)p 535 986 V 34 w(buffer)p 857 986 V 33
+w(size)24 b Fo({)h(Con)m(trols)h(the)g(size)g(\(in)f(b)m(ytes\))h(of)f
+(the)h(in)m(termediate)h(bu\013er)d(used)g(b)m(y)h(R)m(OMIO)256
+1098 y(when)k(p)s(erforming)g(data)i(sieving)g(during)e(read)i(op)s
+(erations.)41 b(Default)31 b(is)g Fj(4194304)d Fo(\(4)j(Mb)m(ytes\).)
+165 1286 y Ff(\017)46 b Fj(ind)p 406 1286 V 33 w(wr)p
+535 1286 V 34 w(buffer)p 857 1286 V 33 w(size)24 b Fo({)h(Con)m(trols)h
+(the)g(size)g(\(in)f(b)m(ytes\))h(of)f(the)h(in)m(termediate)h
+(bu\013er)d(used)g(b)m(y)h(R)m(OMIO)256 1399 y(when)k(p)s(erforming)g
+(data)i(sieving)g(during)e(write)i(op)s(erations.)41
+b(Default)31 b(is)g Fj(524288)e Fo(\(512)j(Kb)m(ytes\).)165
+1587 y Ff(\017)46 b Fj(romio)p 502 1587 V 33 w(ds)p 631
+1587 V 33 w(read)27 b Fo({)h(Determines)g(when)f(R)m(OMIO)g(will)h(c)m
+(ho)s(ose)g(to)h(p)s(erform)d(data)i(sieving.)40 b(V)-8
+b(alid)29 b(v)-5 b(alues)256 1700 y(are)20 b Fj(enable)p
+Fo(,)h Fj(disable)p Fo(,)g(or)f Fj(automatic)p Fo(.)35
+b(Default)21 b(v)-5 b(alue)21 b(is)f Fj(automatic)p Fo(.)35
+b(In)20 b Fj(automatic)d Fo(mo)s(de)j(R)m(OMIO)256 1812
+y(ma)m(y)31 b(c)m(ho)s(ose)g(to)g(enable)g(or)f(disable)h(data)g
+(sieving)g(based)f(on)g(heuristics.)165 2000 y Ff(\017)46
+b Fj(romio)p 502 2000 V 33 w(ds)p 631 2000 V 33 w(write)29
+b Fo({)i(Same)g(as)f(ab)s(o)m(v)m(e,)i(only)e(for)h(writes.)169
+2213 y(The)d(follo)m(wing)h(hin)m(ts)f(con)m(trol)h(the)f(t)m(w)m
+(o-phase)h(\(collectiv)m(e)j(bu\013ering\))27 b(optimization)j(and)d
+(are)h(applicable)28 2326 y(to)j(all)h(\014le)e(system)h(t)m(yp)s(es:)
+165 2513 y Ff(\017)46 b Fj(cb)p 358 2513 V 33 w(buffer)p
+679 2513 V 33 w(size)34 b Fo({)h(Con)m(trols)g(the)h(size)f(\(in)g(b)m
+(ytes\))h(of)f(the)g(in)m(termediate)h(bu\013er)e(used)g(in)h(t)m(w)m
+(o-phase)256 2626 y(collectiv)m(e)29 b(I/O.)e(If)f(the)g(amoun)m(t)h
+(of)f(data)h(that)g(an)g(aggregator)h(will)f(transfer)f(is)g(larger)h
+(than)f(this)h(v)-5 b(alue,)256 2739 y(then)30 b(m)m(ultiple)h(op)s
+(erations)f(are)h(used.)40 b(The)30 b(default)h(is)f
+Fj(4194304)e Fo(\(4)j(Mb)m(ytes\).)165 2927 y Ff(\017)46
+b Fj(cb)p 358 2927 V 33 w(nodes)31 b Fo({)h(Con)m(trols)g(the)g(maxim)m
+(um)g(n)m(um)m(b)s(er)e(of)i(aggregators)i(to)f(b)s(e)e(used.)44
+b(By)32 b(default)g(this)g(is)g(set)256 3040 y(to)f(the)f(n)m(um)m(b)s
+(er)f(of)i(unique)e(hosts)i(in)f(the)g(comm)m(unicator)i(used)e(when)f
+(op)s(ening)h(the)g(\014le.)165 3227 y Ff(\017)46 b Fj(romio)p
+502 3227 V 33 w(cb)p 631 3227 V 33 w(read)33 b Fo({)h(Con)m(trols)h
+(when)e(collectiv)m(e)k(bu\013ering)c(is)h(applied)g(to)g(collectiv)m
+(e)k(read)c(op)s(erations.)256 3340 y(V)-8 b(alid)38
+b(v)-5 b(alues)37 b(are)h Fj(enable)p Fo(,)f Fj(disable)p
+Fo(,)g(and)g Fj(automatic)p Fo(.)58 b(Default)38 b(is)g
+Fj(automatic)p Fo(.)58 b(When)37 b(enabled,)256 3453
+y(all)h(collectiv)m(e)j(reads)c(will)h(use)f(collectiv)m(e)k
+(bu\013ering.)61 b(When)37 b(disabled,)i(all)f(collectiv)m(e)j(reads)c
+(will)h(b)s(e)256 3566 y(serviced)d(with)g(individual)g(op)s(erations)g
+(b)m(y)g(eac)m(h)i(pro)s(cess.)55 b(When)35 b(set)h(to)g
+Fj(automatic)p Fo(,)e(R)m(OMIO)h(will)256 3679 y(use)30
+b(heuristics)g(to)h(determine)g(when)e(to)i(enable)g(the)f
+(optimization.)165 3866 y Ff(\017)46 b Fj(romio)p 502
+3866 V 33 w(cb)p 631 3866 V 33 w(write)26 b Fo({)h(Con)m(trols)g(when)f
+(collectiv)m(e)k(bu\013ering)c(is)h(applied)g(to)g(collectiv)m(e)k
+(write)c(op)s(erations.)256 3979 y(V)-8 b(alid)26 b(v)-5
+b(alues)25 b(are)g Fj(enable)p Fo(,)g Fj(disable)p Fo(,)f(and)h
+Fj(automatic)p Fo(.)36 b(Default)26 b(is)f Fj(automatic)p
+Fo(.)37 b(See)25 b(the)g(description)256 4092 y(of)37
+b Fj(romio)p 612 4092 V 33 w(cb)p 741 4092 V 34 w(read)29
+b Fo(for)h(an)h(explanation)g(of)g(the)f(v)-5 b(alues.)165
+4280 y Ff(\017)46 b Fj(romio)p 502 4280 V 33 w(no)p 631
+4280 V 33 w(indep)p 904 4280 V 33 w(rw)36 b Fo({)h(This)e(hin)m(t)i
+(con)m(trols)g(when)e(\\deferred)h(op)s(en")g(is)h(used.)57
+b(When)36 b(set)h(to)g Fj(true)p Fo(,)256 4393 y(R)m(OMIO)30
+b(will)h(mak)m(e)g(an)f(e\013ort)h(to)h(a)m(v)m(oid)g(p)s(erforming)d
+(an)m(y)h(\014le)h(op)s(eration)g(on)f(non-aggregator)j(no)s(des.)256
+4506 y(The)38 b(application)i(is)g(exp)s(ected)f(to)h(use)f(only)g
+(collectiv)m(e)j(op)s(erations.)67 b(This)39 b(is)g(discussed)f(in)h
+(further)256 4619 y(detail)31 b(b)s(elo)m(w.)165 4806
+y Ff(\017)46 b Fj(cb)p 358 4806 V 33 w(config)p 679 4806
+V 33 w(list)40 b Fo({)h(Pro)m(vides)g(explicit)h(con)m(trol)h(o)m(v)m
+(er)f(aggregators.)74 b(This)40 b(is)h(discussed)f(in)h(further)256
+4919 y(detail)31 b(b)s(elo)m(w.)169 5107 y(F)-8 b(or)37
+b(some)e(systems)h(con\014gurations,)h(more)f(con)m(trol)g(is)g(needed)
+f(to)h(sp)s(ecify)f(whic)m(h)g(hardw)m(are)g(resources)28
+5220 y(\(pro)s(cessors)i(or)f(no)s(des)g(in)g(an)h(SMP\))f(are)h
+(preferred)f(for)g(collectiv)m(e)k(I/O,)d(either)g(for)f(p)s
+(erformance)g(reasons)1956 5520 y(3)p eop end
+%%Page: 4 6
+TeXDict begin 4 5 bop 28 263 a Fo(or)46 b(b)s(ecause)g(only)g(certain)g
+(resources)g(ha)m(v)m(e)h(access)g(to)g(storage.)88 b(The)45
+b(additional)i(MPI)p 3307 263 28 4 v 32 w(Info)f(k)m(ey)g(name)28
+376 y Fj(cb)p 130 376 29 4 v 34 w(config)p 452 376 V
+33 w(list)d Fo(sp)s(eci\014es)g(a)h(comma-separated)i(list)f(of)f
+(strings,)j(eac)m(h)e(string)f(sp)s(ecifying)g(a)g(particular)28
+488 y(no)s(de)34 b(and)g(an)g(optional)h(limit)g(on)f(the)h(n)m(um)m(b)
+s(er)e(of)h(pro)s(cesses)g(to)h(b)s(e)f(used)f(for)h(collectiv)m(e)k
+(bu\013ering)33 b(on)h(this)28 601 y(no)s(de.)169 714
+y(This)26 b(refers)f(to)i(the)g(same)f(pro)s(cesses)g(that)h
+Fj(cb)p 1781 714 V 34 w(nodes)d Fo(refers)i(to,)i(but)d(sp)s(eci\014es)
+h(the)g(a)m(v)-5 b(ailable)29 b(no)s(des)c(more)28 827
+y(precisely)-8 b(.)169 940 y(The)30 b(format)h(of)g(the)f(v)-5
+b(alue)31 b(of)38 b Fj(cb)p 1360 940 V 33 w(config)p
+1681 940 V 33 w(list)29 b Fo(is)i(giv)m(en)g(b)m(y)f(the)h(follo)m
+(wing)h(BNF:)28 1128 y Fj(cb_config_list)44 b(=>)j(hostspec)f([)h(',')g
+(cb_config_list)d(])28 1241 y(hostspec)i(=>)h(hostname)f([)h(':')g
+(maxprocesses)d(])28 1354 y(hostname)i(=>)h(<alphanumeric)d(string>)458
+1466 y(|)95 b('*')28 1579 y(maxprocesses)45 b(=>)i(<digits>)458
+1692 y(|)95 b('*')169 1880 y Fo(The)45 b(v)-5 b(alue)45
+b Fj(hostname)e Fo(iden)m(ti\014es)j(a)f(pro)s(cessor.)84
+b(This)44 b(name)i(m)m(ust)e(matc)m(h)i(the)f(name)h(returned)d(b)m(y)
+28 1993 y Fj(MPI)p 178 1993 V 34 w(Get)p 356 1993 V 33
+w(processor)p 821 1993 V 32 w(name)1079 1960 y Fg(2)1158
+1993 y Fo(for)e(the)f(sp)s(eci\014ed)g(hardw)m(are.)71
+b(The)40 b(v)-5 b(alue)40 b Fj(*)h Fo(as)f(a)h(hostname)g(matc)m(hes)g
+(all)28 2106 y(pro)s(cessors.)g(The)29 b(v)-5 b(alue)31
+b(of)g(maxpro)s(cesses)f(ma)m(y)h(b)s(e)f(an)m(y)h(nonnegativ)m(e)h(in)
+m(teger)f(\(zero)h(is)e(allo)m(w)m(ed\).)169 2219 y(The)41
+b(v)-5 b(alue)42 b Fj(maxprocesses)37 b Fo(sp)s(eci\014es)k(the)g
+(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(pro)s(cesses)g(that)h(ma)m(y)g(b)s
+(e)e(used)g(for)28 2332 y(collectiv)m(e)g(bu\013ering)34
+b(on)i(the)g(sp)s(eci\014ed)f(host.)56 b(If)35 b(no)h(v)-5
+b(alue)36 b(is)g(sp)s(eci\014ed,)g(the)g(v)-5 b(alue)36
+b(one)g(is)g(assumed.)55 b(If)43 b Fj(*)28 2444 y Fo(is)35
+b(sp)s(eci\014ed)f(for)h(the)g(n)m(um)m(b)s(er)e(of)i(pro)s(cesses,)h
+(then)e(all)i(MPI)f(pro)s(cesses)f(with)h(this)g(same)g(hostname)g
+(will)g(b)s(e)28 2557 y(used..)169 2670 y(Leftmost)d(comp)s(onen)m(ts)e
+(of)h(the)f(info)g(v)-5 b(alue)31 b(tak)m(e)h(precedence.)169
+2783 y(Note:)38 b(Matc)m(hing)22 b(of)f(pro)s(cessor)f(names)h(to)g
+Fj(cb)p 1768 2783 V 34 w(config)p 2090 2783 V 32 w(list)f
+Fo(en)m(tries)h(is)g(p)s(erformed)e(with)i(string)f(matc)m(hing)28
+2896 y(functions)30 b(and)g(is)g(indep)s(enden)m(t)g(of)g(the)h
+(listing)g(of)f(mac)m(hines)h(that)g(the)g(user)e(pro)m(vides)i(to)g
+(mpirun/mpiexec.)28 3009 y(In)24 b(other)g(w)m(ords,)h(listing)f(the)h
+(same)f(mac)m(hine)h(m)m(ultiple)f(times)h(in)e(the)h(list)h(of)f
+(hosts)g(to)h(run)d(on)i(will)g(not)g(cause)h(a)28 3122
+y Fj(*:1)g Fo(to)h(assign)g(the)g(same)g(host)g(four)f(aggregators,)k
+(b)s(ecause)d(the)g(matc)m(hing)g(co)s(de)g(will)g(see)h(that)f(the)g
+(pro)s(cessor)28 3235 y(name)31 b(is)f(the)h(same)g(for)f(all)h(four)f
+(and)f(will)i(assign)g(exactly)h(one)f(aggregator)i(to)e(the)f(pro)s
+(cessor.)169 3348 y(The)39 b(v)-5 b(alue)40 b(of)f(this)g(info)g(k)m
+(ey)h(m)m(ust)f(b)s(e)f(the)h(same)h(for)f(all)h(pro)s(cesses)e
+(\(i.e.,)43 b(the)d(call)g(is)f(collectiv)m(e)k(and)28
+3461 y(eac)m(h)33 b(pro)s(cess)e(m)m(ust)g(receiv)m(e)i(the)e(same)h
+(hin)m(t)f(v)-5 b(alue)32 b(for)f(these)h(collectiv)m(e)j(bu\013ering)
+30 b(hin)m(ts\).)44 b(F)-8 b(urther,)31 b(in)g(the)28
+3574 y(R)m(OMIO)g(implemen)m(tation)h(the)e(hin)m(t)h(is)f(only)g
+(recognized)i(at)f Fj(MPI)p 2372 3574 V 34 w(File)p 2598
+3574 V 33 w(open)e Fo(time.)169 3686 y(The)j(set)h(of)f(hin)m(ts)g
+(used)g(with)f(a)i(\014le)f(is)h(a)m(v)-5 b(ailable)34
+b(through)e(the)g(routine)g Fj(MPI)p 2916 3686 V 34 w(File)p
+3142 3686 V 33 w(get)p 3319 3686 V 33 w(info)p Fo(,)g(as)h(do)s(cu-)28
+3799 y(men)m(ted)g(in)g(the)f(MPI)h(standard.)47 b(As)32
+b(an)h(additional)g(feature)g(in)f(the)h(R)m(OMIO)g(implemen)m(tation,)
+i(wildcards)28 3912 y(will)28 b(b)s(e)f(expanded)f(to)j(indicate)f(the)
+g(precise)f(con\014guration)h(used)f(with)g(the)g(\014le,)i(with)e(the)
+g(hostnames)h(in)f(the)28 4025 y(rank)j(order)g(used)g(for)g(the)g
+(collectiv)m(e)k(bu\013ering)c(algorithm)h(\()p Fi(this)j(is)e(not)i
+(implemente)-5 b(d)34 b(at)f(this)h(time)7 b Fo(\).)169
+4138 y(Here)31 b(are)g(some)g(examples)g(of)f(ho)m(w)h(this)f(hin)m(t)g
+(migh)m(t)i(b)s(e)d(used:)165 4326 y Ff(\017)46 b Fj(*:1)29
+b Fo(One)h(pro)s(cess)g(p)s(er)f(hostname)i(\(i.e.,)h(one)f(pro)s(cess)
+f(p)s(er)f(no)s(de\))165 4513 y Ff(\017)46 b Fj(box12:30,*:0)27
+b Fo(Thirt)m(y)j(pro)s(cesses)g(on)g(one)h(mac)m(hine,)g(namely)h
+Fj(box12)p Fo(,)d(and)h(none)g(an)m(ywhere)h(else.)165
+4701 y Ff(\017)46 b Fj(n01,n11,n21,n31,n41)25 b Fo(One)30
+b(pro)s(cess)g(on)g(eac)m(h)h(of)g(these)g(sp)s(eci\014c)f(no)s(des)f
+(only)-8 b(.)169 4889 y(When)40 b(the)g(v)-5 b(alues)40
+b(sp)s(eci\014ed)f(b)m(y)i Fj(cb)p 1505 4889 V 34 w(config)p
+1827 4889 V 32 w(list)e Fo(con\015ict)i(with)e(other)h(hin)m(ts)g
+(\(e.g.,)k(the)c(n)m(um)m(b)s(er)e(of)28 5002 y(collectiv)m(e)43
+b(bu\013ering)c(no)s(des)f(sp)s(eci\014ed)h(b)m(y)h Fj(cb)p
+1700 5002 V 34 w(nodes)p Fo(\),)h(the)e(implemen)m(tation)i(is)e
+(encouraged)h(to)g(tak)m(e)h(the)p 28 5086 1560 4 v 132
+5139 a Fe(2)167 5171 y Fb(The)25 b(MPI)h(standard)f(requires)h(that)f
+(the)g(output)f(from)i(this)g(routine)f(iden)n(tify)h(a)f(particular)h
+(piece)g(of)g(hardw)n(are;)h(some)f(MPI)28 5263 y(implemen)n(tations)h
+(ma)n(y)e(not)h(conform)g(to)g(this)g(requiremen)n(t.)34
+b(MPICH)26 b(do)r(es)g(conform)h(to)f(the)f(MPI)h(standard.)1956
+5520 y Fo(4)p eop end
+%%Page: 5 7
+TeXDict begin 5 6 bop 28 263 a Fo(minim)m(um)33 b(of)i(the)f(t)m(w)m(o)
+h(v)-5 b(alues.)52 b(In)33 b(other)h(w)m(ords,)g(if)41
+b Fj(cb)p 2042 263 29 4 v 34 w(config)p 2364 263 V 33
+w(list)33 b Fo(sp)s(eci\014es)g(ten)h(pro)s(cessors)g(on)g(whic)m(h)28
+376 y(I/O)41 b(should)f(b)s(e)g(p)s(erformed,)i(but)f
+Fj(cb)p 1404 376 V 33 w(nodes)f Fo(sp)s(eci\014es)g(a)i(smaller)f(n)m
+(um)m(b)s(er,)h(then)f(an)g(implemen)m(tation)h(is)28
+488 y(encouraged)d(to)f(use)g(only)h Fj(cb)p 1104 488
+V 34 w(nodes)d Fo(total)k(aggregators.)65 b(If)45 b Fj(cb)p
+2384 488 V 34 w(config)p 2706 488 V 32 w(list)37 b Fo(sp)s(eci\014es)g
+(few)m(er)h(pro)s(cesses)28 601 y(than)30 b Fj(cb)p 342
+601 V 34 w(nodes)p Fo(,)f(no)i(more)f(than)g(the)h(n)m(um)m(b)s(er)e
+(in)h Fj(cb)p 1926 601 V 34 w(config)p 2248 601 V 33
+w(list)f Fo(should)g(b)s(e)h(used.)169 714 y(The)i(implemen)m(tation)i
+(is)e(also)i(encouraged)f(to)g(assign)f(pro)s(cesses)g(in)g(the)h
+(order)f(that)h(they)f(are)h(listed)g(in)28 827 y Fj(cb)p
+130 827 V 34 w(config)p 452 827 V 33 w(list)p Fo(.)169
+940 y(The)28 b(follo)m(wing)i(hin)m(t)f(con)m(trols)g(the)g(deferred)e
+(op)s(en)h(feature)h(of)g(romio)f(and)g(are)h(also)g(applicable)h(to)f
+(all)g(\014le)28 1053 y(system)i(t)m(yp)s(es:)165 1241
+y Ff(\017)46 b Fj(romio)p 502 1241 V 33 w(no)p 631 1241
+V 33 w(indep)p 904 1241 V 33 w(rw)36 b Fo({)h(If)f(the)h(application)g
+(plans)f(on)g(p)s(erforming)g(only)g(collecitv)m(e)k(op)s(erations)d
+(and)256 1354 y(this)44 b(hin)m(t)h(is)g(set)g(to)g(\\true",)50
+b(then)44 b(R)m(OMIO)h(can)g(ha)m(v)m(e)h(just)e(the)h(aggregators)i
+(op)s(en)d(a)h(\014le.)84 b(The)256 1466 y Fj(cb)p 358
+1466 V 33 w(config)p 679 1466 V 33 w(list)32 b Fo(and)h
+Fj(cb)p 1212 1466 V 34 w(nodes)f Fo(hin)m(ts)h(can)h(b)s(e)f(giv)m(en)h
+(to)g(further)e(con)m(trol)j(whic)m(h)e(no)s(des)g(are)h(aggre-)256
+1579 y(gators.)169 1767 y(F)-8 b(or)32 b(PVFS2:)165 1955
+y Ff(\017)46 b Fj(striping)p 646 1955 V 32 w(factor)31
+b Fo({)j(Con)m(trols)f(the)h(n)m(um)m(b)s(er)e(of)h(I/O)g(devices)h(to)
+g(strip)s(e)e(across.)50 b(The)33 b(default)g(is)g(\014le)256
+2068 y(system)c(dep)s(enden)m(t,)h(but)f(for)g(PVFS)h(it)g(is)g
+Fj(-1)p Fo(,)f(indicating)i(that)f(the)g(\014le)g(should)e(b)s(e)h
+(strip)s(ed)g(across)h(all)256 2180 y(I/O)g(devices.)165
+2368 y Ff(\017)46 b Fj(striping)p 646 2368 V 32 w(unit)38
+b Fo({)i(Con)m(trols)f(the)h(striping)f(unit)g(\(in)g(b)m(ytes\).)69
+b(F)-8 b(or)40 b(PVFS)f(the)g(default)h(will)f(b)s(e)g(the)256
+2481 y(PVFS)30 b(\014le)g(system)h(default)f(strip)g(size.)165
+2669 y Ff(\017)46 b Fj(start)p 502 2669 V 33 w(iodevice)22
+b Fo({)j(Determines)h(what)f(I/O)f(device)i(data)g(will)f(\014rst)f(b)s
+(e)g(written)h(to.)40 b(This)24 b(is)g(a)i(n)m(um)m(b)s(er)256
+2782 y(in)k(the)g(range)h(of)f(0)h(...)41 b(striping)p
+1370 2782 28 4 v 33 w(factor)31 b(-)g(1.)28 3022 y Fk(3.2.1)106
+b(Hin)m(ts)35 b(for)g(XFS)28 3193 y Fo(F)-8 b(or)31 b(XFS)g(con)m(trol)
+h(is)e(pro)m(vided)g(for)g(the)h(direct)g(I/O)f(optimization:)165
+3381 y Ff(\017)46 b Fj(direct)p 550 3381 29 4 v 32 w(read)35
+b Fo({)g(Con)m(trols)h(direct)g(I/O)g(for)f(reads.)55
+b(V)-8 b(alid)37 b(v)-5 b(alues)35 b(are)h Fj(true)e
+Fo(and)h Fj(false)p Fo(.)55 b(Default)36 b(is)256 3494
+y Fj(false)p Fo(.)165 3681 y Ff(\017)46 b Fj(direct)p
+550 3681 V 32 w(write)30 b Fo({)h(Con)m(trols)h(direct)g(I/O)f(for)f
+(writes.)43 b(V)-8 b(alid)32 b(v)-5 b(alues)32 b(are)f
+Fj(true)f Fo(and)h Fj(false)p Fo(.)41 b(Default)32 b(is)256
+3794 y Fj(false)p Fo(.)28 4034 y Fk(3.2.2)106 b(Hin)m(ts)35
+b(for)g(PVFS2)g(\(a.k.a)g(OrangeFS\))28 4206 y Fo(The)30
+b(PVFS)g(v2)h(\014le)g(system)f(has)g(man)m(y)h(tuning)f(parameters.)
+165 4394 y Ff(\017)46 b Fo(dt)m(yp)s(e)30 b(i/o)28 4634
+y Fk(3.2.3)106 b(Hin)m(ts)35 b(for)g(Lustre)165 4805
+y Ff(\017)46 b Fo(romio)p 488 4805 28 4 v 33 w(lustre)p
+744 4805 V 33 w(co)p 862 4805 V 33 w(ratio)256 4956 y(In)37
+b(strip)s(e-con)m(tiguous)j(IO)e(pattern,)j(eac)m(h)f(OST)d(will)i(b)s
+(e)f(accessed)i(b)m(y)e(a)h(group)f(of)h(IO)f(clien)m(ts.)67
+b(CO)256 5069 y(means)39 b(*C*lien)m(t/*O*ST)j(ratio,)h(or)d(the)f
+(max.)69 b(n)m(um)m(b)s(er)38 b(of)i(IO)f(clien)m(ts)i(for)f(eac)m(h)h
+(OST.)d(CO=1)h(b)m(y)256 5182 y(default.)1956 5520 y(5)p
+eop end
+%%Page: 6 8
+TeXDict begin 6 7 bop 165 263 a Ff(\017)46 b Fj(romio)p
+502 263 29 4 v 33 w(lustre)p 823 263 V 32 w(coll)p 1047
+263 V 34 w(threshold)256 412 y Fo(W)-8 b(e)28 b(w)m(on't)g(do)g
+(collectiv)m(e)j(I/O)c(if)g(this)h(hin)m(t)f(is)h(set)f(and)g(the)h(IO)
+f(request)g(size)i(is)e(bigger)h(than)f(this)h(v)-5 b(alue.)256
+525 y(That's)28 b(b)s(ecause)h(when)f(the)h(request)g(size)h(is)e(big,)
+i(the)f(collectiv)m(e)j(comm)m(unication)f(o)m(v)m(erhead)f(increases)
+256 638 y(and)37 b(the)g(b)s(ene\014ts)g(from)g(collectiv)m(e)k(I/O)c
+(b)s(ecomes)h(limited.)63 b(A)38 b(v)-5 b(alue)38 b(of)f(0)h(means)g
+(alw)m(a)m(ys)h(p)s(erform)256 751 y(collectiv)m(e)34
+b(I/O)165 936 y Ff(\017)46 b Fj(romio)p 502 936 V 33
+w(lustre)p 823 936 V 32 w(cb)p 951 936 V 34 w(ds)p 1081
+936 V 34 w(threshold)256 1086 y Fo(R)m(OMIO)20 b(can)i(optimize)g
+(collectiv)m(e)i(I/O)d(with)g(a)g(v)m(ersion)g(of)h(data)f(sieving.)38
+b(If)21 b(the)g(I/O)g(request)g(is)g(smaller)256 1199
+y(than)30 b(this)g(hin)m(t's)g(v)-5 b(alue,)32 b(though,)e(R)m(OMIO)g
+(will)h(not)g(try)f(to)h(apply)f(the)g(data)i(sieving)f(optimization.)
+165 1384 y Ff(\017)46 b Fj(romio)p 502 1384 V 33 w(lustre)p
+823 1384 V 32 w(ds)p 951 1384 V 34 w(in)p 1081 1384 V
+34 w(coll)256 1534 y Fo(Collectiv)m(e)27 b(IO)d(will)i(apply)e(read-mo)
+s(dify-write)h(to)g(deal)h(with)e(non-con)m(tiguous)i(data)g(b)m(y)e
+(default.)39 b(Ho)m(w-)256 1647 y(ev)m(er,)30 b(it)f(will)g(in)m(tro)s
+(duce)g(some)g(o)m(v)m(erhead\(IO)h(op)s(eration)f(and)f(lo)s(c)m
+(king\).)42 b(The)28 b(Lustre)g(dev)m(elop)s(ers)h(ha)m(v)m(e)256
+1760 y(run)c(tests)j(where)e(data)i(sieving)f(sho)m(w)m(ed)g(bad)f
+(collectiv)m(e)31 b(write)c(p)s(erformance)f(for)h(some)g(kinds)f(of)h
+(w)m(ork-)256 1872 y(loads.)62 b(So,)39 b(to)f(a)m(v)m(oid)h(this,)h(w)
+m(e)d(de\014ne)g(the)h Fj(romio)p 2102 1872 V 33 w(lustre)p
+2423 1872 V 32 w(ds)p 2551 1872 V 34 w(in)p 2681 1872
+V 34 w(coll)e Fo(hin)m(t)i(to)g(disable)f(the)h(read-)256
+1985 y(mo)s(dify-write)26 b(step)h(in)f(collectiv)m(e)k(I/O.)d(This)e
+(optimization)k(is)e(distinct)g(from)f(the)g(one)h(in)f(indep)s(enden)m
+(t)256 2098 y(I/O)k(\(con)m(trolled)i(b)m(y)g Fj(romio)p
+1266 2098 V 33 w(ds)p 1395 2098 V 34 w(read)d Fo(and)h
+Fj(romio)p 2067 2098 V 33 w(ds)p 2196 2098 V 33 w(write)p
+Fo(\).)28 2337 y Fk(3.2.4)106 b(Hin)m(ts)35 b(for)g(P)-9
+b(ANFS)35 b(\(P)m(anasas\))28 2509 y Fo(P)m(anFS)29 b(allo)m(ws)g
+(users)e(to)i(sp)s(ecify)f(the)h(la)m(y)m(out)h(of)e(a)h(\014le)f(at)h
+(\014le-creation)h(time.)41 b(La)m(y)m(out)29 b(information)g(includes)
+28 2622 y(the)f(n)m(um)m(b)s(er)d(of)j(StorageBlades)h(\(SB\))f(across)
+f(whic)m(h)g(the)g(data)h(is)f(stored,)i(the)e(n)m(um)m(b)s(er)f(of)h
+(SBs)g(across)h(whic)m(h)28 2735 y(a)h(parit)m(y)g(strip)s(e)f(is)h
+(written,)g(and)f(the)h(n)m(um)m(b)s(er)e(of)i(consecutiv)m(e)i(strip)s
+(es)d(that)h(are)g(placed)g(on)f(the)h(same)g(set)g(of)28
+2848 y(SBs.)41 b(The)30 b Fj(panfs)p 678 2848 V 33 w(layout)p
+999 2848 V 32 w(*)g Fo(hin)m(ts)h(are)f(only)h(used)e(if)i(supplied)e
+(at)i(\014le-creation)h(time.)165 3031 y Ff(\017)46 b
+Fj(panfs)p 502 3031 V 33 w(layout)p 823 3031 V 32 w(type)30
+b Fo(Sp)s(eci\014es)f(the)i(la)m(y)m(out)h(of)f(a)f(\014le:)41
+b(2)31 b(=)f(RAID0)h(3)g(=)f(RAID5)h(P)m(arit)m(y)h(Strip)s(es)165
+3216 y Ff(\017)46 b Fj(panfs)p 502 3216 V 33 w(layout)p
+823 3216 V 32 w(stripe)p 1143 3216 V 33 w(unit)29 b Fo(The)h(size)h(of)
+g(the)f(strip)s(e)g(unit)g(in)g(b)m(ytes)165 3402 y Ff(\017)46
+b Fj(panfs)p 502 3402 V 33 w(layout)p 823 3402 V 32 w(total)p
+1095 3402 V 33 w(num)p 1272 3402 V 34 w(comps)29 b Fo(The)h(total)i(n)m
+(um)m(b)s(er)d(of)h(StorageBlades)j(a)e(\014le)f(is)g(strip)s(ed)g
+(across.)165 3588 y Ff(\017)93 b Fj(panfs)p 549 3588
+V 33 w(layout)p 870 3588 V 33 w(parity)p 1191 3588 V
+33 w(stripe)p 1512 3588 V 32 w(width)34 b Fo(If)g(the)h(la)m(y)m(out)h
+(t)m(yp)s(e)f(is)g(RAID5)h(P)m(arit)m(y)g(Strip)s(es,)f(this)f(hin)m(t)
+256 3701 y(sp)s(eci\014es)c(the)g(n)m(um)m(b)s(er)f(of)i(StorageBlades)
+h(in)e(a)h(parit)m(y)g(strip)s(e.)165 3887 y Ff(\017)46
+b Fj(panfs)p 502 3887 V 33 w(layout)p 823 3887 V 32 w(parity)p
+1143 3887 V 33 w(stripe)p 1464 3887 V 33 w(depth)38 b
+Fo(If)h(the)g(la)m(y)m(out)i(t)m(yp)s(e)f(is)f(RAID5)h(P)m(arit)m(y)h
+(Strip)s(es,)g(this)e(hin)m(t)256 3999 y(sp)s(eci\014es)30
+b(the)g(n)m(um)m(b)s(er)f(of)i(con)m(tiguous)g(parit)m(y)g(strip)s(es)f
+(written)g(across)h(the)g(same)g(set)g(of)f(SBs.)165
+4185 y Ff(\017)46 b Fj(panfs)p 502 4185 V 33 w(layout)p
+823 4185 V 32 w(visit)p 1095 4185 V 33 w(policy)32 b
+Fo(If)h(the)g(la)m(y)m(out)j(t)m(yp)s(e)d(is)h(RAID5)g(P)m(arit)m(y)g
+(Strip)s(es,)g(the)f(p)s(olicy)h(used)f(to)256 4298 y(determine)d(the)h
+(parit)m(y)g(strip)s(e)e(a)i(giv)m(en)h(\014le)e(o\013set)h(is)g
+(written)f(to:)42 b(1)30 b(=)g(Round)g(Robin)169 4481
+y(P)m(anFS)35 b(supp)s(orts)e(the)j(\\concurren)m(t)f(write")h(\(CW\))f
+(mo)s(de,)h(where)f(groups)f(of)h(co)s(op)s(erating)h(clien)m(ts)g(can)
+28 4594 y(disable)27 b(the)g(P)m(anFS)g(consistency)g(mec)m(hanisms)g
+(and)f(use)g(their)h(o)m(wn)g(consistency)g(proto)s(col.)41
+b(Clien)m(ts)27 b(partici-)28 4707 y(pating)h(in)f(concurren)m(t)g
+(write)g(mo)s(de)g(use)g(application)h(sp)s(eci\014c)f(information)g
+(to)h(impro)m(v)m(e)g(p)s(erformance)e(while)28 4820
+y(main)m(taining)38 b(\014le)e(consistency)-8 b(.)60
+b(All)37 b(clien)m(ts)g(accessing)h(the)f(\014le\(s\))g(m)m(ust)f
+(enable)h(concurren)m(t)f(write)g(mo)s(de.)28 4933 y(If)c(an)m(y)h
+(clien)m(t)h(do)s(es)d(not)i(enable)g(concurren)m(t)f(write)h(mo)s(de,)
+f(then)g(the)h(P)m(anFS)f(consistency)h(proto)s(col)g(will)g(b)s(e)28
+5046 y(in)m(v)m(ok)m(ed.)41 b(Once)27 b(a)f(\014le)h(is)g(op)s(ened)e
+(in)h(CW)h(mo)s(de)f(on)g(a)h(mac)m(hine,)h(attempts)g(to)f(op)s(en)f
+(a)h(\014le)f(in)g(non-CW)h(mo)s(de)28 5158 y(will)35
+b(fail)g(with)e(EA)m(CCES.)h(If)f(a)i(\014le)f(is)g(already)h(op)s
+(ened)e(in)h(non-CW)g(mo)s(de,)h(attempts)g(to)g(op)s(en)e(the)h
+(\014le)h(in)28 5271 y(CW)c(mo)s(de)f(will)g(fail)h(with)f(EA)m(CCES.)g
+(The)g(follo)m(wing)i(hin)m(t)e(is)h(used)e(to)i(enable)g(concurren)m
+(t)g(write)f(mo)s(de.)1956 5520 y(6)p eop end
+%%Page: 7 9
+TeXDict begin 7 8 bop 165 263 a Ff(\017)46 b Fj(panfs)p
+502 263 29 4 v 33 w(concurrent)p 1015 263 V 31 w(write)37
+b Fo(If)h(set)i(to)f(1)g(at)g(\014le)g(op)s(en)f(time,)j(the)e(\014le)g
+(is)f(op)s(ened)g(using)g(the)h(P)m(anFS)256 376 y(concurren)m(t)30
+b(write)h(mo)s(de)f(\015ag.)41 b(Concurren)m(t)29 b(write)i(mo)s(de)f
+(is)g(not)h(a)g(p)s(ersisten)m(t)f(attribute)h(of)g(the)f(\014le.)169
+588 y(Belo)m(w)i(is)f(an)f(example)h(P)m(anFS)g(la)m(y)m(out)h(using)e
+(the)g(follo)m(wing)i(parameters:)124 889 y Fj(-)47 b
+(panfs_layout_type)759 b(=)48 b(3)124 1002 y(-)f
+(panfs_layout_total_num_co)o(mps)232 b(=)48 b(100)124
+1114 y(-)f(panfs_layout_parity_strip)o(e_wi)o(dth)41
+b(=)48 b(10)124 1227 y(-)f(panfs_layout_parity_strip)o(e_de)o(pth)41
+b(=)48 b(8)124 1340 y(-)f(panfs_layout_visit_policy)375
+b(=)48 b(1)172 1566 y(Parity)e(Stripe)g(Group)g(1)238
+b(Parity)46 b(Stripe)h(Group)f(2)95 b(.)48 b(.)f(.)g(Parity)g(Stripe)f
+(Group)g(10)124 1679 y(----------------------)185 b
+(----------------------)375 b(--------------------)172
+1792 y(SB1)190 b(SB2)94 b(...)47 b(SB10)238 b(SB11)189
+b(SB12)47 b(...)95 b(SB20)f(...)142 b(SB91)h(SB92)46
+b(...)h(SB100)124 1905 y(-----------------------)137
+b(-----------------------)327 b(---------------------)172
+2018 y(D1)238 b(D2)142 b(...)95 b(D10)285 b(D91)190 b(D92)95
+b(...)g(D100)380 b(D181)143 b(D182)94 b(...)47 b(D190)172
+2131 y(D11)190 b(D12)333 b(D20)285 b(D101)142 b(D102)286
+b(D110)380 b(D191)143 b(D192)285 b(D193)172 2244 y(D21)190
+b(D22)333 b(D30)285 b(.)48 b(.)f(.)1145 b(.)48 b(.)f(.)172
+2356 y(D31)190 b(D32)333 b(D40)172 2469 y(D41)190 b(D42)333
+b(D50)172 2582 y(D51)190 b(D52)333 b(D60)172 2695 y(D61)190
+b(D62)333 b(D70)172 2808 y(D71)190 b(D72)333 b(D80)172
+2921 y(D81)190 b(D82)333 b(D90)285 b(D171)142 b(D172)286
+b(D180)380 b(D261)143 b(D262)f(D270)172 3034 y(D271)g(D272)285
+b(D273)237 b(.)48 b(.)f(.)1145 b(.)48 b(.)f(.)172 3147
+y(...)28 3387 y Fk(3.2.5)106 b(System)m(wide)34 b(Hin)m(ts)28
+3559 y Fo(A)28 b(site)g(administrator)g(with)f(kno)m(wledge)h(of)g(the)
+f(storage)i(and)e(net)m(w)m(orking)h(capabilities)h(of)f(a)f(mac)m
+(hine)i(migh)m(t)28 3671 y(b)s(e)k(able)g(to)h(come)g(up)d(with)i(a)g
+(set)h(of)f(hin)m(t)g(v)-5 b(alues)33 b(that)h(w)m(ork)f(b)s(etter)g
+(for)f(that)i(mac)m(hine)g(than)e(the)h(R)m(OMIO)28 3784
+y(default)42 b(v)-5 b(alues.)76 b(As)42 b(an)f(exten)m(tion)j(to)f(the)
+f(standard,)i(R)m(OMIO)e(will)g(consult)g(a)g(\\hin)m(ts)g(\014le".)76
+b(This)41 b(\014le)28 3897 y(pro)m(vides)35 b(an)g(additional)i(mec)m
+(hanism)e(for)g(setting)h(MPI-IO)f(hin)m(ts,)h(alb)s(eit)g(in)f(a)h(R)m
+(OMIO-sp)s(eci\014c)f(manner.)28 4010 y(The)d(hin)m(ts)g(\014le)g(con)m
+(tains)h(a)g(list)g(of)f(hin)m(ts)g(and)f(their)i(v)-5
+b(alues.)46 b(R)m(OMIO)32 b(will)g(use)g(these)h(initial)g(hin)m(t)f
+(settings,)28 4123 y(though)e(programs)g(are)h(free)g(to)g(o)m(v)m
+(erride)g(an)m(y)g(of)f(them.)169 4236 y(The)35 b(format)g(of)g(the)f
+(hin)m(ts)h(\014le)g(is)f(a)i(list)f(of)g(hin)m(ts)f(and)g(their)h(v)-5
+b(alues,)36 b(one)f(p)s(er)f(line.)54 b(A)35 b(#)f(c)m(haracter)j(in)28
+4349 y(the)31 b(\014rst)f(column)g(indicates)h(a)g(commen)m(t,)g(and)f
+(R)m(OMIO)g(will)h(ignore)g(the)g(en)m(tire)g(line.)41
+b(Here's)31 b(an)f(example:)28 4561 y Fj(#)48 b(this)e(is)i(a)f
+(comment)f(describing)f(the)i(following)e(setting)28
+4674 y(cb_nodes)h(32)28 4787 y(#)i(these)e(nodes)g(happen)h(to)g(have)f
+(the)h(best)g(connection)e(to)i(storage)28 4900 y(cb_config_list)d
+(n01,n11,n21,n31,n41)169 5113 y Fo(R)m(OMIO)27 b(will)h(lo)s(ok)g(for)f
+(these)g(hin)m(ts)g(in)g(the)g(\014le)g Fj(/etc/romio-hints)p
+Fo(.)36 b(A)27 b(user)f(can)i(set)f(the)h(en)m(vironmen)m(t)28
+5226 y(v)-5 b(ariable)31 b Fj(ROMIO)p 615 5226 V 33 w(HINTS)e
+Fo(to)j(the)e(name)h(of)f(a)h(\014le)f(whic)m(h)g(R)m(OMIO)h(will)f
+(use)g(instead.)1956 5520 y(7)p eop end
+%%Page: 8 10
+TeXDict begin 8 9 bop 28 263 a Fc(3.3)113 b(Using)38
+b(R)m(OMIO)f(on)h(NFS)28 434 y Fo(It)33 b(is)g(w)m(orth)g(\014rst)f
+(men)m(tioning)i(that)f(in)f(no)h(w)m(a)m(y)h(do)f(w)m(e)g(encourage)h
+(the)f(use)f(of)h(R)m(OMIO)g(on)g(NFS)f(v)m(olumes.)28
+547 y(NFS)h(is)f(not)h(a)g(high-p)s(erformance)f(proto)s(col,)i(nor)e
+(are)h(NFS)g(serv)m(ers)f(t)m(ypically)j(v)m(ery)e(go)s(o)s(d)f(at)h
+(handling)f(the)28 660 y(t)m(yp)s(es)38 b(of)g(concurren)m(t)f(access)i
+(seen)f(from)f(MPI-IO)g(applications.)63 b(Nev)m(ertheless,)42
+b(NFS)37 b(is)h(a)g(v)m(ery)g(p)s(opular)28 773 y(mec)m(hanism)43
+b(for)g(pro)m(viding)f(access)i(to)f(a)g(shared)f(space,)47
+b(and)42 b(R)m(OMIO)g(do)s(es)h(supp)s(ort)e(MPI-IO)h(to)h(NFS)28
+886 y(v)m(olumes,)32 b(pro)m(vided)e(that)h(they)f(are)h(con\014gured)e
+(prop)s(erly)-8 b(.)169 999 y(T)g(o)23 b(use)f(R)m(OMIO)g(on)g(NFS,)h
+(\014le)f(lo)s(c)m(king)i(with)e Fj(fcntl)e Fo(m)m(ust)i(w)m(ork)h
+(correctly)g(on)g(the)f(NFS)g(installation.)40 b(On)28
+1112 y(some)30 b(installations,)h(fcn)m(tl)e(lo)s(c)m(ks)h(don't)f(w)m
+(ork.)40 b(T)-8 b(o)29 b(get)h(them)f(to)g(w)m(ork,)h(y)m(ou)f(need)f
+(to)i(use)e(V)-8 b(ersion)30 b(3)f(of)g(NFS,)28 1225
+y(ensure)k(that)g(the)h(lo)s(c)m(kd)f(daemon)h(is)f(running)e(on)i(all)
+h(the)g(mac)m(hines,)g(and)f(ha)m(v)m(e)h(the)g(system)f(administrator)
+28 1338 y(moun)m(t)i(the)g(NFS)g(\014le)g(system)g(with)g(the)g(\\)p
+Fj(noac)p Fo(")f(option)i(\(no)f(attribute)g(cac)m(hing\).)57
+b(T)-8 b(urning)33 b(o\013)j(attribute)28 1450 y(cac)m(hing)c(ma)m(y)f
+(reduce)f(p)s(erformance,)g(but)g(it)h(is)f(necessary)h(for)f(correct)i
+(b)s(eha)m(vior.)169 1563 y(The)41 b(follo)m(wing)i(are)f(some)f
+(instructions)h(w)m(e)f(receiv)m(ed)i(from)e(Ian)g(W)-8
+b(ells)43 b(of)e(HP)g(for)h(setting)g(the)f Fj(noac)28
+1676 y Fo(option)34 b(on)f(NFS.)h(W)-8 b(e)34 b(ha)m(v)m(e)h(not)e
+(tried)h(them)f(ourselv)m(es.)50 b(W)-8 b(e)35 b(are)e(including)g
+(them)h(here)f(b)s(ecause)g(y)m(ou)h(ma)m(y)28 1789 y(\014nd)e(them)h
+(useful.)49 b(Note)35 b(that)e(some)h(of)g(the)f(steps)g(ma)m(y)h(b)s
+(e)f(sp)s(eci\014c)g(to)h(HP)f(systems,)h(and)f(y)m(ou)h(ma)m(y)g(need)
+28 1902 y(ro)s(ot)d(p)s(ermission)e(to)i(execute)h(some)f(of)f(the)h
+(commands.)172 2110 y Fj(>1.)46 b(first)h(confirm)f(you)g(are)h
+(running)f(nfs)h(version)f(3)172 2223 y(>)172 2336 y(>rpcnfo)f(-p)i
+(`hostname`)e(|)j(grep)f(nfs)172 2449 y(>)172 2561 y(>ie)172
+2674 y(>)190 b(goedel)46 b(>rpcinfo)g(-p)h(goedel)f(|)h(grep)g(nfs)172
+2787 y(>)190 b(100003)f(2)143 b(udp)g(2049)94 b(nfs)172
+2900 y(>)190 b(100003)f(3)143 b(udp)g(2049)94 b(nfs)172
+3013 y(>)172 3126 y(>)172 3239 y(>2.)46 b(then)h(edit)g(/etc/fstab)e
+(for)i(each)f(nfs)h(directory)e(read/written)g(by)i(MPIO)172
+3352 y(>)142 b(on)48 b(each)94 b(machine)46 b(used)g(for)h(multihost)f
+(MPIO.)172 3465 y(>)172 3578 y(>)190 b(Here)47 b(is)g(an)g(example)f
+(of)h(a)h(correct)d(fstab)i(entry)f(for)h(/epm1:)172
+3691 y(>)172 3804 y(>)142 b(ie)48 b(grep)e(epm1)h(/etc/fstab)172
+3916 y(>)172 4029 y(>)286 b(ROOOOT)46 b(11>grep)f(epm1)i(/etc/fstab)172
+4142 y(>)286 b(gershwin:/epm1)43 b(/rmt/gershwin/epm1)g(nfs)k
+(bg,intr,noac)e(0)i(0)172 4255 y(>)172 4368 y(>)142 b(if)48
+b(the)e(noac)h(option)f(is)h(not)g(present,)f(add)h(it)172
+4481 y(>)142 b(and)47 b(then)g(remount)f(this)g(directory)172
+4594 y(>)142 b(on)48 b(each)e(of)h(the)g(machines)f(that)g(will)h(be)g
+(used)g(to)g(share)f(MPIO)h(files)172 4707 y(>)172 4820
+y(>ie)172 4933 y(>)172 5046 y(>ROOOOT)e(>umount)h(/rmt/gershwin/epm1)
+172 5158 y(>ROOOOT)f(>mount)94 b(/rmt/gershwin/epm1)172
+5271 y(>)1956 5520 y Fo(8)p eop end
+%%Page: 9 11
+TeXDict begin 9 10 bop 172 263 a Fj(>3.)46 b(Confirm)g(that)h(the)g
+(directory)e(is)i(mounted)f(noac:)172 376 y(>)172 488
+y(>ROOOOT)f(>grep)i(gershwin)e(/etc/mnttab)172 601 y(>gershwin:/epm1)e
+(/rmt/gershwin/epm1)g(nfs)172 714 y(>noac,acregmin=0,acreg)o(max=)o
+(0,ac)o(dir)o(min=)o(0,ac)o(dir)o(max=)o(0)f(0)47 b(0)h(899911504)28
+954 y Fk(3.3.1)106 b(R)m(OMIO,)34 b(NFS,)h(and)g(Sync)m(hronization)28
+1126 y Fo(NFS)29 b(has)g(a)h(\\sync")g(option)f(that)h(sp)s(eci\014es)f
+(that)h(the)f(serv)m(er)h(should)e(put)g(data)i(on)f(the)h(disk)f(b)s
+(efore)f(replying)28 1239 y(that)34 b(an)g(op)s(eration)g(is)f
+(complete.)52 b(This)33 b(means)g(that)i(the)e(actual)i(I/O)f(cost)g
+(on)g(the)f(serv)m(er)h(side)g(cannot)g(b)s(e)28 1352
+y(hidden)29 b(with)h(cac)m(hing,)i(etc.)42 b(when)30
+b(this)g(option)h(is)f(selected.)169 1465 y(In)g(the)h(\\async")h(mo)s
+(de)e(the)h(serv)m(er)f(can)h(get)h(the)f(data)g(in)m(to)g(a)g
+(bu\013er)f(\(and)g(p)s(erhaps)f(put)h(it)h(in)f(the)h(write)28
+1578 y(queue;)h(this)f(dep)s(ends)f(on)h(the)g(implemen)m(tation\))i
+(and)e(reply)g(righ)m(t)h(a)m(w)m(a)m(y)-8 b(.)45 b(Ob)m(viously)32
+b(if)f(the)g(serv)m(er)h(w)m(ere)g(to)28 1691 y(go)c(do)m(wn)e(after)i
+(the)f(reply)f(w)m(as)h(sen)m(t)h(but)e(b)s(efore)g(the)h(data)h(w)m
+(as)f(written,)h(the)f(system)g(w)m(ould)g(b)s(e)f(in)g(a)i(strange)28
+1804 y(state,)k(whic)m(h)e(is)h(wh)m(y)f(so)g(man)m(y)h(articles)h
+(suggest)f(the)f("sync")h(option.)169 1916 y(Some)36
+b(systems)f(default)h(to)g(\\sync",)h(while)e(others)h(default)f(to)h
+(\\async",)i(and)d(the)g(default)h(can)f(c)m(hange)28
+2029 y(from)h(v)m(ersion)h(to)g(v)m(ersion)g(of)f(the)h(NFS)f(soft)m(w)
+m(are.)60 b(If)36 b(y)m(ou)h(\014nd)e(that)i(access)g(to)g(an)g(NFS)f
+(v)m(olume)h(through)28 2142 y(MPI-IO)30 b(is)h(particularly)g(slo)m
+(w,)g(this)f(is)h(one)f(thing)h(to)g(c)m(hec)m(k)h(out.)28
+2386 y Fc(3.4)113 b(Using)38 b(testfs)28 2557 y Fo(The)31
+b(testfs)h(ADIO)g(implemen)m(tation)h(pro)m(vides)e(a)h(harness)e(for)i
+(testing)g(comp)s(onen)m(ts)g(of)f(R)m(OMIO)h(or)f(disco)m(v-)28
+2670 y(ering)41 b(the)g(underlying)e(I/O)i(access)h(patterns)e(of)h(an)
+f(application.)73 b(When)40 b(testfs)h(is)g(sp)s(eci\014ed)f(as)g(the)h
+(\014le)28 2783 y(system)d(t)m(yp)s(e,)h(no)e(actual)h(\014les)f(will)h
+(b)s(e)e(op)s(ened.)60 b(Instead)37 b(debugging)g(information)h(will)f
+(b)s(e)g(displa)m(y)m(ed)g(on)28 2896 y(the)30 b(pro)s(cesses)f(op)s
+(ening)f(the)i(\014le.)40 b(Subsequen)m(t)28 b(I/O)h(op)s(erations)h
+(on)f(this)g(testfs)g(\014le)h(will)f(pro)m(vide)g(additional)28
+3009 y(debugging)i(information.)169 3122 y(The)38 b(in)m(ten)m(tion)h
+(of)e(the)h(testfs)g(implemen)m(tation)i(is)d(that)h(it)h(serv)m(e)f
+(as)g(a)g(starting)g(p)s(oin)m(t)g(for)f(further)f(in-)28
+3235 y(strumen)m(tation)31 b(when)d(debugging)i(new)f(features)h(or)g
+(applications.)42 b(As)29 b(suc)m(h)h(it)g(is)g(exp)s(ected)g(that)g
+(users)f(will)28 3348 y(w)m(an)m(t)j(to)f(mo)s(dify)e(the)i(ADIO)f
+(implemen)m(tation)i(in)e(order)g(to)h(get)h(the)e(sp)s(eci\014c)h
+(output)f(they)g(desire.)28 3591 y Fc(3.5)113 b(R)m(OMIO)37
+b(and)h Fa(MPI)p 1093 3591 31 4 v 38 w(FILE)p 1335 3591
+V 38 w(SYNC)28 3763 y Fo(The)30 b(MPI)h(sp)s(eci\014cation)g(notes)h
+(that)f(a)g(call)h(to)f Fj(MPI)p 1882 3763 29 4 v 34
+w(FILE)p 2108 3763 V 33 w(SYNC)e Fo(\\causes)j(all)f(previous)f(writes)
+h(to)h Fj(fh)e Fo(b)m(y)g(the)28 3876 y(calling)39 b(pro)s(cess)e(to)h
+(b)s(e)e(transferred)g(to)i(the)g(storage)g(device.")63
+b(Lik)m(ewise,)40 b(calls)f(to)e Fj(MPI)p 3220 3876 V
+34 w(FILE)p 3446 3876 V 33 w(CLOSE)f Fo(ha)m(v)m(e)28
+3989 y(this)g(same)h(seman)m(tic.)59 b(F)-8 b(urther,)38
+b(\\if)e(all)h(pro)s(cesses)f(ha)m(v)m(e)i(made)e(up)s(dates)f(to)i
+(the)f(storage)i(device,)h(then)c(all)28 4101 y(suc)m(h)30
+b(up)s(dates)g(b)s(ecome)h(visible)f(to)h(subsequen)m(t)f(reads)g(of)h
+Fj(fh)f Fo(b)m(y)g(the)g(calling)i(pro)s(cess.")169 4214
+y(The)e(in)m(tended)g(use)g(of)g Fj(MPI)p 1137 4214 V
+33 w(FILE)p 1362 4214 V 34 w(SYNC)e Fo(is)j(to)f(allo)m(w)i(all)f(pro)s
+(cesses)f(in)f(the)i(comm)m(unicator)g(used)e(to)i(op)s(en)28
+4327 y(the)k(\014le)g(to)h(see)f(c)m(hanges)h(made)f(to)h(the)f(\014le)
+g(b)m(y)f(eac)m(h)i(other)f(\(the)h(second)f(part)f(of)h(the)g(sp)s
+(eci\014cation\).)56 b(The)28 4440 y(de\014nition)38
+b(of)h(\\storage)h(device")g(in)e(the)g(sp)s(eci\014cation)h(is)f(v)-5
+b(ague,)42 b(and)37 b(it)i(isn't)g(necessarily)g(the)f(case)i(that)28
+4553 y(calling)32 b Fj(MPI)p 466 4553 V 34 w(FILE)p 692
+4553 V 33 w(SYNC)d Fo(will)i(force)g(data)g(out)g(to)g(p)s(ermanen)m(t)
+e(storage.)169 4666 y(Since)37 b(users)f(often)i(use)e
+Fj(MPI)p 1198 4666 V 34 w(FILE)p 1424 4666 V 33 w(SYNC)g
+Fo(to)i(attempt)g(to)f(force)h(data)f(out)g(to)h(p)s(ermanen)m(t)e
+(storage)j(\(i.e.)28 4779 y(disk\),)31 b(the)f(R)m(OMIO)h(implemen)m
+(tation)h(of)e(this)g(call)i(enforces)f(stronger)f(seman)m(tics)i(for)e
+(most)h(underlying)e(\014le)28 4892 y(systems)j(b)m(y)g(calling)h(the)f
+(appropriate)g(\014le)g(sync)f(op)s(eration)i(when)d
+Fj(MPI)p 2585 4892 V 34 w(FILE)p 2811 4892 V 33 w(SYNC)h
+Fo(is)h(called)h(\(e.g.)46 b Fj(fsync)p Fo(\).)28 5005
+y(Ho)m(w)m(ev)m(er,)30 b(it)d(is)f(still)i(un)m(wise)e(to)h(assume)f
+(that)h(the)g(data)g(has)f(all)i(made)e(it)h(to)g(disk)f(b)s(ecause)h
+(some)g(\014le)f(systems)28 5118 y(\(e.g.)42 b(NFS\))31
+b(ma)m(y)g(not)g(force)g(data)g(to)g(disk)f(when)f(a)i(clien)m(t)h
+(system)e(mak)m(es)i(a)e(sync)g(call.)1956 5520 y(9)p
+eop end
+%%Page: 10 12
+TeXDict begin 10 11 bop 169 263 a Fo(F)-8 b(or)28 b(p)s(erformance)e
+(reasons)g(w)m(e)h(do)g Fi(not)36 b Fo(mak)m(e)27 b(this)g(same)g
+(\014le)f(system)h(call)h(at)f Fj(MPI)p 3068 263 29 4
+v 34 w(FILE)p 3294 263 V 33 w(CLOSE)e Fo(time.)40 b(A)m(t)28
+376 y(close)33 b(time)g(R)m(OMIO)e(ensures)g(an)m(y)h(data)g(has)g(b)s
+(een)e(written)i(out)g(to)g(the)g(\\storage)i(device")f(\(\014le)f
+(system\))g(as)28 488 y(de\014ned)f(in)h(the)h(standard,)f(but)f(do)s
+(es)h(not)h(try)f(to)h(push)e(the)h(data)h(b)s(ey)m(ond)f(this)g(and)f
+(in)m(to)j(ph)m(ysical)e(storage.)28 601 y(Users)43 b(should)e(call)j
+Fj(MPI)p 916 601 V 34 w(FILE)p 1142 601 V 33 w(SYNC)e
+Fo(b)s(efore)g(the)h(close)h(if)e(they)h(wish)f(to)h(encourage)h(the)f
+(underlying)e(\014le)28 714 y(system)31 b(to)g(push)e(data)i(to)g(p)s
+(ermanen)m(t)f(storage.)28 958 y Fc(3.6)113 b(R)m(OMIO)37
+b(and)h Fa(MPI)p 1093 958 31 4 v 38 w(FILE)p 1335 958
+V 38 w(SET)p 1526 958 V 38 w(SIZE)28 1129 y Fj(MPI)p
+178 1129 29 4 v 34 w(FILE)p 404 1129 V 33 w(SET)p 581
+1129 V 34 w(SIZE)29 b Fo(is)h(a)h(collectiv)m(e)j(routine)d(used)f(to)h
+(resize)g(a)g(\014le.)41 b(It)31 b(is)f(imp)s(ortan)m(t)h(to)g(remem)m
+(b)s(er)f(that)h(a)28 1242 y(MPI-IO)e(routine)g(b)s(eing)g(collectiv)m
+(e)k(do)s(es)28 b(not)i(imply)e(that)i(the)f(routine)g(sync)m(hronizes)
+h(the)f(calling)h(pro)s(cesses)28 1355 y(in)g(an)m(y)h(w)m(a)m(y)g
+(\(unless)f(this)h(is)f(sp)s(eci\014ed)g(explicitly\).)169
+1468 y(As)k(of)g(1.2.4,)j(R)m(OMIO)d(implemen)m(ts)g
+Fj(MPI)p 1653 1468 V 33 w(FILE)p 1878 1468 V 34 w(SET)p
+2056 1468 V 33 w(SIZE)f Fo(b)m(y)h(calling)h Fj(ftruncate)c
+Fo(from)i(all)i(pro)s(cesses.)28 1581 y(Since)41 b(di\013eren)m(t)f
+(pro)s(cesses)g(ma)m(y)h(call)h(the)e(function)g(at)h(di\013eren)m(t)g
+(times,)i(it)e(means)f(that)h(unless)e(external)28 1694
+y(sync)m(hronization)f(is)f(used,)g(a)g(resize)h(op)s(eration)f(mixed)g
+(in)f(with)g(writes)h(or)g(reads)f(could)h(ha)m(v)m(e)h(unexp)s(ected)
+28 1807 y(results.)169 1920 y(In)33 b(short,)i(if)f(sync)m(hronization)
+g(after)g(a)g(set)h(size)f(is)g(needed,)g(the)g(user)f(should)g(add)g
+(a)h(barrier)f(or)h(similar)28 2032 y(op)s(eration)d(to)g(ensure)f(the)
+g(set)h(size)h(has)e(completed.)28 2319 y Fn(4)135 b(Installation)47
+b(Instructions)28 2522 y Fo(Since)36 b(R)m(OMIO)f(is)g(included)g(in)g
+(MPICH,)g(LAM,)h(HP)f(MPI,)g(SGI)g(MPI,)h(and)e(NEC)h(MPI,)h(y)m(ou)f
+(don't)h(need)28 2635 y(to)f(install)f(it)g(separately)h(if)f(y)m(ou)f
+(are)h(using)g(an)m(y)g(of)f(these)h(MPI)g(implemen)m(tations.)52
+b(If)33 b(y)m(ou)h(are)g(using)f(some)28 2747 y(other)e(MPI,)g(y)m(ou)f
+(can)h(con\014gure)f(and)g(build)f(R)m(OMIO)h(as)h(follo)m(ws:)169
+2860 y(Un)m(tar)g(the)g(tar)g(\014le)f(as)219 3047 y
+Fj(gunzip)46 b(-c)h(romio.tar.gz)e(|)i(tar)g(xvf)g(-)28
+3234 y Fo(or)219 3420 y Fj(zcat)g(romio.tar.Z)e(|)i(tar)g(xvf)g(-)28
+3607 y Fo(then)219 3818 y Fj(cd)g(romio)219 3931 y(./configure)219
+4044 y(make)169 4255 y Fo(Some)38 b(example)h(programs)e(and)g(a)i(Mak)
+m(e\014le)g(are)f(pro)m(vided)g(in)f(the)h Fj(romio/test)d
+Fo(directory)-8 b(.)64 b(Run)37 b(the)28 4368 y(examples)27
+b(as)e(y)m(ou)h(w)m(ould)g(run)e(an)m(y)i(MPI)g(program.)38
+b(Eac)m(h)27 b(program)e(tak)m(es)i(the)f(\014lename)g(as)g(a)g
+(command-line)28 4481 y(argumen)m(t)31 b(\\)p Fj(-fname)47
+b(filename)p Fo(".)169 4594 y(The)e Fj(configure)d Fo(script)j(b)m(y)g
+(default)g(con\014gures)f(R)m(OMIO)h(for)g(the)g(\014le)g(systems)g
+(most)g(lik)m(ely)h(to)g(b)s(e)28 4707 y(used)36 b(on)h(the)g(giv)m(en)
+g(mac)m(hine.)61 b(If)36 b(y)m(ou)h(wish,)h(y)m(ou)f(can)f(explicitly)j
+(sp)s(ecify)d(the)h(\014le)g(systems)f(b)m(y)h(using)f(the)28
+4820 y(\\)p Fj(-file)p 319 4820 V 34 w(system)p Fo(")43
+b(option)h(to)h(con\014gure.)82 b(Multiple)45 b(\014le)g(systems)f(can)
+g(b)s(e)g(sp)s(eci\014ed)f(b)m(y)h(using)g(`+')g(as)h(a)28
+4933 y(separator,)32 b(e.g.,)299 5046 y Fj(./configure)44
+b(-file)p 1117 5046 V 33 w(system=xfs+nfs)28 5158 y Fo(F)-8
+b(or)31 b(the)g(en)m(tire)g(list)g(of)g(options)g(to)g(con\014gure,)f
+(do)299 5271 y Fj(./configure)44 b(-h)k(|)f(more)1933
+5520 y Fo(10)p eop end
+%%Page: 11 13
+TeXDict begin 11 12 bop 28 263 a Fo(After)31 b(building)e(a)i(sp)s
+(eci\014c)f(v)m(ersion,)h(y)m(ou)g(can)g(install)g(it)g(in)f(a)h
+(particular)g(directory)f(with)299 376 y Fj(make)46 b(install)g
+(PREFIX=/usr/local/romio)c(\(or)k(whatever)g(directory)f(you)i(like\))
+28 488 y Fo(or)31 b(just)299 601 y Fj(make)46 b(install)g(\(if)h(you)g
+(used)g(-prefix)e(at)j(configure)d(time\))169 714 y Fo(If)36
+b(y)m(ou)g(in)m(tend)f(to)i(lea)m(v)m(e)h(R)m(OMIO)d(where)g(y)m(ou)h
+(built)g(it,)h(y)m(ou)f(should)f Fi(not)h Fo(install)h(it;)i
+Fj(make)47 b(install)33 b Fo(is)28 827 y(used)g(only)g(to)g(mo)m(v)m(e)
+i(the)e(necessary)g(parts)g(of)g(a)h(built)e(R)m(OMIO)h(to)h(another)f
+(lo)s(cation.)50 b(The)33 b(installed)h(cop)m(y)28 940
+y(will)d(ha)m(v)m(e)h(the)e(include)g(\014les,)h(libraries,)g(man)f
+(pages,)h(and)f(a)h(few)f(other)g(o)s(dds)g(and)f(ends,)h(but)g(not)g
+(the)h(whole)28 1053 y(source)36 b(tree.)58 b(It)36 b(will)g(ha)m(v)m
+(e)h(a)g Fj(test)d Fo(directory)j(for)e(testing)i(the)f(installation)i
+(and)d(a)i(lo)s(cation-indep)s(enden)m(t)28 1166 y(Mak)m(e\014le)29
+b(built)d(during)f(installation,)30 b(whic)m(h)c(users)g(can)g(cop)m(y)
+i(and)d(mo)s(dify)h(to)h(compile)h(and)e(link)g(against)i(the)28
+1279 y(installed)j(cop)m(y)-8 b(.)169 1392 y(T)g(o)31
+b(rebuild)f(R)m(OMIO)g(with)g(a)h(di\013eren)m(t)g(set)f(of)h
+(con\014gure)f(options,)h(do)299 1505 y Fj(make)46 b(distclean)28
+1618 y Fo(to)40 b(clean)g(ev)m(erything,)i(including)c(the)h(Mak)m
+(e\014les)i(created)e(b)m(y)g Fj(configure)p Fo(.)64
+b(Then)38 b(run)f Fj(configure)f Fo(again)28 1730 y(with)30
+b(the)h(new)f(options,)h(follo)m(w)m(ed)h(b)m(y)e Fj(make)p
+Fo(.)28 1974 y Fc(4.1)113 b(Con\014guring)38 b(for)f(Lin)m(ux)i(and)f
+(Large)g(Files)28 2146 y Fo(32-bit)j(systems)f(running)e(lin)m(ux)h(k)m
+(ernel)h(v)m(ersion)g(2.4.0)i(or)d(new)m(er)h(and)f(glib)s(c)g(v)m
+(ersion)h(2.2.0)i(or)d(new)m(er)h(can)28 2258 y(supp)s(ort)c(\014les)h
+(greater)h(than)f(2)g(GBytes)i(in)e(size.)61 b(This)37
+b(supp)s(ort)e(is)i(curren)m(tly)g(automaticly)i(detected)g(and)28
+2371 y(enabled.)h(W)-8 b(e)28 b(do)s(cumen)m(t)e(the)h(man)m(ual)h
+(steps)e(should)g(the)h(automatic)i(detection)f(not)f(w)m(ork)g(for)g
+(some)g(reason.)169 2484 y(The)j(t)m(w)m(o)i(macros)p
+843 2484 29 4 v 65 w Fj(FILE)p 1069 2484 V 34 w(OFFSET)p
+1391 2484 V 32 w(BITS=64)d Fo(and)p 1964 2484 V 64 w
+Fj(LARGEFILE64)p 2527 2484 V 31 w(SOURCE)g Fo(tell)j(gn)m(u)e(lib)s(c)g
+(it's)h(ok)g(to)g(sup-)28 2597 y(p)s(ort)41 b(large)h(\014les)g(on)f
+(32)h(bit)f(platforms.)73 b(The)41 b(former)g(c)m(hanges)h(the)g(size)g
+(of)f Fj(off)p 3024 2597 V 34 w(t)g Fo(\(no)g(need)g(to)h(c)m(hange)28
+2710 y(source.)59 b(migh)m(t)36 b(a\013ect)i(in)m(terop)s(erabilit)m(y)
+g(with)e(libraries)g(compiled)h(with)f(a)g(di\013eren)m(t)h(size)g(of)f
+Fj(off)p 3578 2710 V 34 w(t)p Fo(\).)58 b(The)28 2823
+y(latter)28 b(exp)s(oses)e(the)g(gn)m(u)g(lib)s(c)g(functions)g(op)s
+(en64\(\),)i(write64\(\),)h(read64\(\),)g(etc.)40 b(R)m(OMIO)26
+b(do)s(es)g(not)g(mak)m(e)i(use)28 2936 y(of)j(the)f(64)i(bit)e(system)
+h(calls)g(directly)g(at)g(this)g(time,)g(but)f(w)m(e)g(add)g(this)g
+(\015ag)h(for)f(go)s(o)s(d)g(measure.)169 3049 y(If)i(y)m(our)g(lin)m
+(ux)f(system)h(is)g(relativ)m(ely)i(new,)e(there)g(is)g(an)g(excellen)m
+(t)i(c)m(hance)f(it)f(is)g(running)e(k)m(ernel)j(2.4.0)g(or)28
+3162 y(new)m(er)e(and)e(glib)s(c-2.2.0)k(or)e(new)m(er.)40
+b(Add)30 b(the)g(string)28 3349 y Fj("-D_FILE_OFFSET_BITS=64)42
+b(-D_LARGEFILE64_SOURCE")28 3537 y Fo(to)31 b(y)m(our)g(CFLA)m(GS)f(en)
+m(vironmen)m(t)h(v)-5 b(ariable)32 b(b)s(efore)d(runnin)m(t)h
+Fj(./configure)28 3823 y Fn(5)135 b(T)-11 b(esting)45
+b(R)l(OMIO)28 4026 y Fo(T)-8 b(o)31 b(test)g(if)g(the)f(installation)j
+(w)m(orks,)d(do)299 4139 y Fj(make)46 b(testing)28 4252
+y Fo(in)39 b(the)f Fj(romio/test)e Fo(directory)-8 b(.)66
+b(This)38 b(calls)i(a)f(script)f(that)i(runs)d(the)h(test)i(programs)e
+(and)g(compares)h(the)28 4365 y(results)d(with)f(what)h(they)g(should)e
+(b)s(e.)56 b(By)36 b(default,)i Fj(make)47 b(testing)33
+b Fo(causes)j(the)g(test)h(programs)e(to)i(create)28
+4478 y(\014les)31 b(in)g(the)g(curren)m(t)g(directory)h(and)e(use)h
+(whatev)m(er)h(\014le)f(system)h(that)f(corresp)s(onds)f(to.)44
+b(T)-8 b(o)31 b(test)h(with)f(other)28 4591 y(\014le)41
+b(systems,)j(y)m(ou)d(need)g(to)g(sp)s(ecify)g(a)g(\014lename)g(in)g(a)
+g(directory)g(corresp)s(onding)f(to)i(that)f(\014le)g(system)g(as)28
+4704 y(follo)m(ws:)299 4817 y Fj(make)46 b(testing)g
+(TESTARGS="-fname=/foo/pio)o(fs/)o(test)o(")1933 5520
+y Fo(11)p eop end
+%%Page: 12 14
+TeXDict begin 12 13 bop 28 263 a Fn(6)135 b(Compiling)46
+b(and)f(Running)f(MPI-IO)h(Programs)28 466 y Fo(If)29
+b(R)m(OMIO)g(is)f(not)i(already)f(included)f(in)h(the)g(MPI)g(implemen)
+m(tation,)i(y)m(ou)e(need)g(to)g(include)g(the)g(\014le)g
+Fj(mpio.h)28 579 y Fo(for)h(C)g(or)h Fj(mpiof.h)d Fo(for)i(F)-8
+b(ortran)31 b(in)f(y)m(our)h(MPI-IO)f(program.)169 691
+y(Note)40 b(that)f(on)f(HP)h(mac)m(hines)f(running)f(HPUX)i(and)e(on)i
+(NEC)f(SX-4,)i(y)m(ou)f(need)f(to)h(compile)h(F)-8 b(ortran)28
+804 y(programs)30 b(with)g Fj(mpifort)p Fo(.)169 917
+y(With)h(MPICH,)g(HP)f(MPI,)h(or)f(NEC)g(MPI,)h(y)m(ou)f(can)h(compile)
+g(MPI-IO)g(programs)f(as)299 1030 y Fj(mpicc)46 b(foo.c)28
+1143 y Fo(or)299 1256 y Fj(mpifort)f(foo.f)169 1482 y
+Fo(With)31 b(SGI)f(MPI,)h(y)m(ou)g(can)f(compile)i(MPI-IO)e(programs)g
+(as)299 1595 y Fj(cc)47 b(foo.c)f(-lmpi)28 1708 y Fo(or)299
+1821 y Fj(f77)h(foo.f)f(-lmpi)28 1933 y Fo(or)299 2046
+y Fj(f90)h(foo.f)f(-lmpi)169 2272 y Fo(With)31 b(LAM,)g(y)m(ou)g(can)g
+(compile)g(MPI-IO)f(programs)g(as)299 2385 y Fj(hcc)47
+b(foo.c)f(-lmpi)28 2498 y Fo(or)299 2611 y Fj(hf77)g(foo.f)h(-lmpi)169
+2837 y Fo(If)d(y)m(ou)g(ha)m(v)m(e)h(built)f(R)m(OMIO)g(with)f(some)h
+(other)g(MPI)g(implemen)m(tation,)49 b(y)m(ou)44 b(can)h(compile)f
+(MPI-IO)28 2950 y(programs)24 b(b)m(y)g(explicitly)i(giving)f(the)f
+(path)g(to)h(the)f(include)g(\014le)g(mpio.h)g(or)g(mpiof.h)f(and)h
+(explicitly)h(sp)s(ecifying)28 3063 y(the)31 b(path)f(to)h(the)g
+(library)f(libmpio.a,)h(whic)m(h)f(is)g(lo)s(cated)i(in)e
+Fj($\(ROMIO)p 2500 3063 29 4 v 33 w(HOME\)/lib/$\(ARCH\)/libmp)o(io.)o
+(a)p Fo(.)169 3175 y(Run)c(the)g(program)h(as)f(y)m(ou)h(w)m(ould)g
+(run)e(an)m(y)h(MPI)h(program)f(on)h(the)f(mac)m(hine.)40
+b(If)26 b(y)m(ou)h(use)f Fj(mpirun)p Fo(,)g(mak)m(e)28
+3288 y(sure)g(y)m(ou)g(use)g(the)g(correct)i Fj(mpirun)c
+Fo(for)i(the)g(MPI)g(implemen)m(tation)i(y)m(ou)e(are)h(using.)39
+b(F)-8 b(or)26 b(example,)i(if)e(y)m(ou)h(are)28 3401
+y(using)f(MPICH)f(on)h(an)g(SGI)f(mac)m(hine,)j(mak)m(e)f(sure)e(that)i
+(y)m(ou)f(use)g(MPICH's)f Fj(mpirun)g Fo(and)g(not)h(SGI's)g
+Fj(mpirun)p Fo(.)28 3688 y Fn(7)135 b(Limitations)47
+b(of)e(This)g(V)-11 b(ersion)44 b(of)i(R)l(OMIO)165 3891
+y Ff(\017)g Fo(When)41 b(used)f(with)h(an)m(y)g(MPI)g(implemen)m
+(tation)i(other)f(than)e(MPICH)h(revision)h(1.2.1)h(or)e(later,)k(the)
+256 4004 y Fj(status)37 b Fo(argumen)m(t)i(is)g(not)g(\014lled)f(in)h
+(an)m(y)g(MPI-IO)f(function.)66 b(Consequen)m(tly)-8
+b(,)41 b Fj(MPI)p 3299 4004 V 34 w(Get)p 3477 4004 V
+34 w(count)c Fo(and)256 4116 y Fj(MPI)p 406 4116 V 33
+w(Get)p 583 4116 V 34 w(elements)27 b Fo(will)j(not)g(w)m(ork)f(when)g
+(passed)g(the)h Fj(status)d Fo(ob)5 b(ject)31 b(from)e(an)g(MPI-IO)h
+(op)s(eration.)165 4304 y Ff(\017)46 b Fo(Additionally)-8
+b(,)34 b(when)d(used)g(with)h(an)m(y)h(MPI)f(implemen)m(tation)i(other)
+e(than)g(MPICH)g(revision)g(1.2.1)i(or)256 4417 y(later,)26
+b(all)g(MPI-IO)e(functions)g(return)f(only)i(t)m(w)m(o)h(p)s(ossible)e
+(error)g(co)s(des|)p Fj(MPI)p 2972 4417 V 33 w(SUCCESS)f
+Fo(on)h(success)h(and)256 4530 y Fj(MPI)p 406 4530 V
+33 w(ERR)p 583 4530 V 34 w(UNKNOWN)j Fo(on)i(failure.)165
+4718 y Ff(\017)46 b Fo(This)37 b(v)m(ersion)i(w)m(orks)f(only)h(on)f(a)
+h(homogeneous)g(cluster)f(of)h(mac)m(hines,)i(and)d(only)g(the)h
+(\\nativ)m(e")h(\014le)256 4830 y(data)31 b(represen)m(tation)g(is)g
+(supp)s(orted.)165 5018 y Ff(\017)46 b Fo(Shared)28 b(\014le)h(p)s(oin)
+m(ters)h(are)g(not)f(supp)s(orted)f(on)h(the)h(PVFS2)g(\014le)f(system)
+h(b)s(ecause)f(it)h(do)s(es)f(not)h(supp)s(ort)256 5131
+y Fj(fcntl)f Fo(\014le)h(lo)s(c)m(ks,)i(and)d(R)m(OMIO)i(uses)e(that)i
+(feature)g(to)g(implemen)m(t)g(shared)f(\014le)g(p)s(oin)m(ters.)1933
+5520 y(12)p eop end
+%%Page: 13 15
+TeXDict begin 13 14 bop 165 263 a Ff(\017)46 b Fo(On)31
+b(HP)h(mac)m(hines)h(running)d(HPUX)j(and)f(on)g(NEC)g(SX-4,)h(y)m(ou)g
+(need)f(to)h(compile)g(F)-8 b(ortran)33 b(programs)256
+376 y(with)d Fj(mpifort)p Fo(.)28 662 y Fn(8)135 b(Usage)46
+b(Tips)165 865 y Ff(\017)g Fo(When)41 b(using)h(R)m(OMIO)g(with)f(SGI)h
+(MPI,)g(y)m(ou)h(ma)m(y)f(sometimes)h(get)g(an)f(error)g(message)h
+(from)f(SGI)256 978 y(MPI:)d(\\MPI)h(has)f(run)f(out)i(of)f(in)m
+(ternal)h(datat)m(yp)s(e)h(en)m(tries.)68 b(Please)41
+b(set)f(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)256
+1091 y Fj(MPI)p 406 1091 29 4 v 33 w(TYPE)p 631 1091
+V 33 w(MAX)33 b Fo(for)g(additional)h(space.")50 b(If)33
+b(y)m(ou)g(get)h(this)f(error)g(message,)i(add)e(the)g(follo)m(wing)i
+(line)f(to)256 1204 y(y)m(our)c Fj(.cshrc)f Fo(\014le:)526
+1317 y Fj(setenv)46 b(MPI)p 1010 1317 V 34 w(TYPE)p 1236
+1317 V 33 w(MAX)h(65536)256 1429 y Fo(Use)30 b(a)h(larger)g(n)m(um)m(b)
+s(er)e(if)i(y)m(ou)f(still)i(get)f(the)g(error)f(message.)165
+1617 y Ff(\017)46 b Fo(If)26 b(a)i(F)-8 b(ortran)27 b(program)g(uses)g
+(a)g(\014le)g(handle)g(created)h(using)f(R)m(OMIO's)g(C)g(in)m
+(terface,)i(or)e(vice)h(v)m(ersa,)h(y)m(ou)256 1730 y(m)m(ust)i(use)g
+(the)g(functions)g Fj(MPI)p 1340 1730 V 34 w(File)p 1566
+1730 V 33 w(c2f)f Fo(or)i Fj(MPI)p 2030 1730 V 33 w(File)p
+2255 1730 V 33 w(f2c)f Fo(\(see)h Ff(x)g Fo(4.12.4)h(in)e([4)q(]\).)44
+b(Suc)m(h)31 b(a)g(situation)256 1843 y(o)s(ccurs,)26
+b(for)g(example,)i(if)e(a)g(F)-8 b(ortran)27 b(program)e(uses)h(an)g
+(I/O)g(library)f(written)h(in)g(C)f(with)h(MPI-IO)g(calls.)256
+1956 y(Similar)k(functions)g Fj(MPIO)p 1159 1956 V 33
+w(Request)p 1528 1956 V 33 w(f2c)f Fo(and)h Fj(MPIO)p
+2103 1956 V 33 w(Request)p 2472 1956 V 33 w(c2f)f Fo(are)i(also)g(pro)m
+(vided.)165 2143 y Ff(\017)46 b Fo(F)-8 b(or)34 b(F)-8
+b(ortran)35 b(programs)e(on)h(the)g(In)m(tel)h(P)m(aragon,)h(y)m(ou)e
+(ma)m(y)g(need)g(to)h(pro)m(vide)f(the)g(complete)h(path)f(to)256
+2256 y Fj(mpif.h)28 b Fo(in)i(the)h Fj(include)d Fo(statemen)m(t,)33
+b(e.g.,)526 2369 y Fj(include)46 b('/usr/local/mpich/inclu)o(de/m)o
+(pif.)o(h')256 2482 y Fo(instead)30 b(of)526 2595 y Fj(include)46
+b('mpif.h')256 2708 y Fo(This)31 b(is)h(b)s(ecause)g(the)g
+Fj(-I)g Fo(option)g(to)h(the)f(P)m(aragon)i(F)-8 b(ortran)33
+b(compiler)f Fj(if77)f Fo(do)s(esn't)h(w)m(ork)g(correctly)-8
+b(.)256 2821 y(It)33 b(alw)m(a)m(ys)i(lo)s(oks)e(in)g(the)g(default)h
+(directories)g(\014rst)e(and,)i(therefore,)g(pic)m(ks)g(up)e(In)m
+(tel's)i Fj(mpif.h)p Fo(,)f(whic)m(h)256 2934 y(is)d(actually)i(the)f
+Fj(mpif.h)d Fo(of)j(an)f(older)h(v)m(ersion)f(of)h(MPICH.)28
+3220 y Fn(9)135 b(Rep)t(orting)46 b(Bugs)28 3423 y Fo(If)36
+b(y)m(ou)h(ha)m(v)m(e)g(trouble,)h(\014rst)e(c)m(hec)m(k)i(the)e(users)
+g(guide.)58 b(Then)36 b(c)m(hec)m(k)h(if)g(there)f(is)g(a)h(list)g(of)g
+(kno)m(wn)e(bugs)h(and)28 3536 y(patc)m(hes)i(on)f(the)f(R)m(OMIO)h(w)m
+(eb)g(page)g(at)h Fj(http://www.mcs.anl.gov/)o(romi)o(o)p
+Fo(.)54 b(Finally)-8 b(,)40 b(if)c(y)m(ou)h(still)h(ha)m(v)m(e)28
+3649 y(problems,)30 b(send)g(a)h(detailed)g(message)g(con)m(taining:)
+148 3762 y Ff(\017)g Fo(the)g(t)m(yp)s(e)f(of)h(system)f(\(often)h
+Fj(uname)47 b(-a)p Fo(\),)148 3875 y Ff(\017)31 b Fo(the)g(output)f(of)
+g Fj(configure)p Fo(,)148 3988 y Ff(\017)h Fo(the)g(output)f(of)g
+Fj(make)p Fo(,)g(and)148 4101 y Ff(\017)h Fo(an)m(y)g(programs)f(or)g
+(tests)28 4214 y(to)h Fj(romio-maint at mcs.anl.gov)p Fo(.)28
+4500 y Fn(10)135 b(R)l(OMIO)45 b(In)l(ternals)28 4703
+y Fo(A)34 b(k)m(ey)g(comp)s(onen)m(t)g(of)g(R)m(OMIO)f(that)h(enables)g
+(suc)m(h)g(a)f(p)s(ortable)h(MPI-IO)f(implemen)m(tation)i(is)f(an)g(in)
+m(ternal)28 4816 y(abstract)i(I/O)f(device)g(la)m(y)m(er)i(called)f
+(ADIO)f([5].)55 b(Most)35 b(users)f(of)h(R)m(OMIO)g(will)g(not)g(need)g
+(to)g(deal)h(with)e(the)28 4929 y(ADIO)d(la)m(y)m(er)h(at)f(all.)42
+b(Ho)m(w)m(ev)m(er,)33 b(ADIO)d(is)h(useful)f(to)h(those)g(who)f(w)m
+(an)m(t)h(to)g(p)s(ort)f(R)m(OMIO)g(to)i(some)e(other)h(\014le)28
+5042 y(system.)41 b(The)30 b(R)m(OMIO)g(source)h(co)s(de)f(and)g(the)h
+(ADIO)f(pap)s(er)g([5])h(will)g(help)f(y)m(ou)g(get)i(started.)169
+5155 y(MPI-IO)39 b(implemen)m(tation)h(issues)f(are)g(discussed)e(in)i
+([6].)66 b(All)40 b(R)m(OMIO-related)f(pap)s(ers)f(are)h(a)m(v)-5
+b(ailable)28 5268 y(online)31 b(at)g Fj(http://www.mcs.anl.gov/ro)o
+(mio)o Fo(.)1933 5520 y(13)p eop end
+%%Page: 14 16
+TeXDict begin 14 15 bop 28 263 a Fn(11)135 b(Learning)46
+b(MPI-IO)28 466 y Fo(The)25 b(b)s(o)s(ok)f Fi(Using)k(MPI-2:)38
+b(A)-5 b(dvanc)g(e)g(d)29 b(F)-7 b(e)i(atur)g(es)30 b(of)e(the)g
+(Message-Passing)f(Interfac)-5 b(e)26 b Fo([3)q(],)g(published)e(b)m(y)
+h(MIT)28 579 y(Press,)j(pro)m(vides)g(a)g(tutorial)g(in)m(tro)s
+(duction)g(to)g(all)h(asp)s(ects)f(of)f(MPI-2,)i(including)e(parallel)i
+(I/O.)f(It)f(has)h(lots)g(of)28 691 y(example)35 b(programs.)50
+b(See)34 b Fj(http://www.mcs.anl.gov/mpi)o(/usi)o(ngm)o(pi2)27
+b Fo(for)34 b(further)e(information)j(ab)s(out)28 804
+y(the)c(b)s(o)s(ok.)28 1091 y Fn(12)135 b(Ma)7 b(jor)46
+b(Changes)f(in)g(Previous)h(Releases)28 1297 y Fc(12.1)113
+b(Ma)6 b(jor)38 b(Changes)h(in)f(V)-9 b(ersion)37 b(1.2.3)165
+1469 y Ff(\017)46 b Fo(Added)19 b(explicit)j(con)m(trol)f(o)m(v)m(er)h
+(aggregators)h(for)d(collectiv)m(e)j(op)s(erations)e(\(see)g
+(description)g(of)27 b Fj(cb)p 3578 1469 29 4 v 34 w(config)p
+3900 1469 V 33 w(list)p Fo(\).)165 1656 y Ff(\017)46
+b Fo(Added)29 b(the)i(follo)m(wing)g(w)m(orking)g(hin)m(ts:)41
+b Fj(cb)p 1793 1656 V 34 w(config)p 2115 1656 V 32 w(list)p
+Fo(,)30 b Fj(romio)p 2634 1656 V 33 w(cb)p 2763 1656
+V 34 w(read)p Fo(,)f Fj(romio)p 3283 1656 V 33 w(cb)p
+3412 1656 V 34 w(write)p Fo(,)256 1769 y Fj(romio)p 502
+1769 V 33 w(ds)p 631 1769 V 33 w(read)p Fo(.)66 b(These)38
+b(additional)i(hin)m(ts)f(ha)m(v)m(e)h(b)s(een)e(added)h(but)f(are)h
+(curren)m(tly)g(ignored)g(b)m(y)g(the)256 1882 y(implemen)m(tation:)j
+Fj(romio)p 1186 1882 V 33 w(ds)p 1315 1882 V 34 w(write)p
+Fo(,)29 b Fj(romio)p 1883 1882 V 33 w(no)p 2012 1882
+V 34 w(indep)p 2286 1882 V 33 w(rw)p Fo(.)165 2070 y
+Ff(\017)46 b Fo(Added)29 b(NTFS)h(ADIO)g(implemen)m(tation.)165
+2257 y Ff(\017)46 b Fo(Added)29 b(testfs)i(ADIO)f(implemen)m(tation)i
+(for)f(use)f(in)g(debugging.)165 2445 y Ff(\017)46 b
+Fo(Added)23 b(delete)j(function)e(to)h(ADIO)f(in)m(terface)i(so)e(that)
+h(\014le)g(systems)f(that)h(need)f(to)h(use)f(their)h(o)m(wn)f(delete)
+256 2558 y(function)30 b(ma)m(y)h(do)f(so)h(\(e.g.)42
+b(PVFS\).)165 2746 y Ff(\017)k Fo(Changed)29 b(v)m(ersion)i(n)m(um)m(b)
+s(ering)e(to)j(matc)m(h)f(v)m(ersion)g(n)m(um)m(b)s(er)e(of)h(MPICH)g
+(release.)28 2989 y Fc(12.2)113 b(Ma)6 b(jor)38 b(Changes)h(in)f(V)-9
+b(ersion)37 b(1.0.3)165 3161 y Ff(\017)46 b Fo(When)31
+b(used)g(with)h(MPICH)f(1.2.1,)j(the)e(MPI-IO)g(functions)f(return)g
+(prop)s(er)f(error)i(co)s(des)g(and)f(classes,)256 3273
+y(and)e(the)i(status)g(ob)5 b(ject)31 b(is)f(\014lled)h(in.)165
+3461 y Ff(\017)46 b Fo(On)37 b(SGI's)h(XFS)g(\014le)g(system,)j(R)m
+(OMIO)d(can)g(use)g(direct)h(I/O)f(ev)m(en)h(if)f(the)g(user's)g
+(request)g(do)s(es)g(not)256 3574 y(meet)27 b(the)g(v)-5
+b(arious)27 b(restrictions)h(needed)e(to)i(use)e(direct)h(I/O.)g(R)m
+(OMIO)g(do)s(es)f(this)h(b)m(y)g(doing)f(part)h(of)g(the)256
+3687 y(request)34 b(with)f(bu\013ered)g(I/O)h(\(un)m(til)g(all)h(the)f
+(restrictions)h(are)f(met\))h(and)e(doing)h(the)g(rest)g(with)g(direct)
+256 3800 y(I/O.)c(\(This)g(feature)h(hasn't)f(b)s(een)g(tested)h
+(rigorously)-8 b(.)41 b(Please)32 b(c)m(hec)m(k)g(for)e(errors.\))256
+3950 y(By)i(default,)i(R)m(OMIO)e(will)h(use)f(only)g(bu\013ered)g
+(I/O.)g(Direct)i(I/O)e(can)h(b)s(e)f(enabled)g(either)h(b)m(y)f
+(setting)256 4063 y(the)39 b(en)m(vironmen)m(t)h(v)-5
+b(ariables)40 b Fj(MPIO)p 1537 4063 V 33 w(DIRECT)p 1858
+4063 V 33 w(READ)e Fo(and/or)i Fj(MPIO)p 2626 4063 V
+33 w(DIRECT)p 2947 4063 V 33 w(WRITE)e Fo(to)i Fj(TRUE)p
+Fo(,)e(or)i(on)f(a)256 4176 y(p)s(er-\014le)29 b(basis)i(b)m(y)f(using)
+g(the)g(info)h(k)m(eys)g Fj(direct)p 1979 4176 V 32 w(read)f
+Fo(and)f Fj(direct)p 2697 4176 V 33 w(write)p Fo(.)256
+4326 y(Direct)i(I/O)f(will)h(result)f(in)g(higher)g(p)s(erformance)g
+(only)g(if)g(y)m(ou)h(are)g(accessing)h(a)e(high-bandwidth)f(disk)256
+4439 y(system.)40 b(Otherwise,)31 b(bu\013ered)e(I/O)h(is)h(b)s(etter)f
+(and)g(is)g(therefore)h(used)f(as)g(the)h(default.)165
+4627 y Ff(\017)46 b Fo(Miscellaneous)32 b(bug)e(\014xes.)28
+4870 y Fc(12.3)113 b(Ma)6 b(jor)38 b(Changes)h(in)f(V)-9
+b(ersion)37 b(1.0.2)165 5042 y Ff(\017)46 b Fo(Implemen)m(ted)33
+b(the)h(shared)f(\014le)h(p)s(oin)m(ter)g(functions)f(and)g(split)h
+(collectiv)m(e)j(I/O)d(functions.)50 b(Therefore,)256
+5155 y(the)34 b(main)h(comp)s(onen)m(ts)f(of)h(the)g(MPI)f(I/O)h(c)m
+(hapter)g(not)g(y)m(et)g(implemen)m(ted)g(are)g(\014le)g(in)m(terop)s
+(erabilit)m(y)256 5268 y(and)29 b(error)h(handling.)1933
+5520 y(14)p eop end
+%%Page: 15 17
+TeXDict begin 15 16 bop 165 263 a Ff(\017)46 b Fo(Added)23
+b(supp)s(ort)f(for)i(using)g(\\direct)h(I/O")g(on)f(SGI's)g(XFS)g
+(\014le)g(system.)39 b(Direct)26 b(I/O)e(is)g(an)g(optional)h(fea-)256
+376 y(ture)f(of)h(XFS)g(in)g(whic)m(h)f(data)i(is)f(mo)m(v)m(ed)h
+(directly)g(b)s(et)m(w)m(een)f(the)g(user's)g(bu\013er)e(and)i(the)g
+(storage)h(devices,)256 488 y(b)m(ypassing)i(the)i(\014le-system)f(cac)
+m(he.)42 b(This)28 b(can)h(impro)m(v)m(e)h(p)s(erformance)f
+(signi\014can)m(tly)h(on)f(systems)g(with)256 601 y(high)34
+b(disk)h(bandwidth.)52 b(Without)36 b(high)f(disk)f(bandwidth,)h
+(regular)g(I/O)g(\(that)h(uses)e(the)i(\014le-system)256
+714 y(cac)m(he\))d(p)s(erfoms)d(b)s(etter.)43 b(R)m(OMIO,)31
+b(therefore,)h(do)s(es)f(not)g(use)g(direct)h(I/O)f(b)m(y)g(default.)43
+b(The)31 b(user)f(can)256 827 y(turn)c(on)h(direct)h(I/O)f
+(\(separately)i(for)e(reading)g(and)g(writing\))g(either)h(b)m(y)f
+(using)g(en)m(vironmen)m(t)h(v)-5 b(ariables)256 940
+y(or)30 b(b)m(y)g(using)g(MPI's)h(hin)m(ts)f(mec)m(hanism)g(\(info\).)
+42 b(T)-8 b(o)31 b(use)f(the)g(en)m(vironmen)m(t-v)-5
+b(ariables)32 b(metho)s(d,)e(do)590 1152 y Fj(setenv)46
+b(MPIO_DIRECT_READ)d(TRUE)590 1265 y(setenv)j(MPIO_DIRECT_WRITE)d(TRUE)
+256 1476 y Fo(T)-8 b(o)29 b(use)g(the)h(hin)m(ts)f(metho)s(d,)g(the)g
+(t)m(w)m(o)i(k)m(eys)f(are)f Fj(direct)p 2248 1476 29
+4 v 33 w(read)f Fo(and)h Fj(direct)p 2965 1476 V 32 w(write)p
+Fo(.)39 b(By)30 b(default)f(their)256 1589 y(v)-5 b(alues)32
+b(are)g Fj(false)p Fo(.)44 b(T)-8 b(o)32 b(turn)f(on)g(direct)i(I/O,)f
+(set)g(the)g(v)-5 b(alues)32 b(to)h Fj(true)p Fo(.)44
+b(The)31 b(en)m(vironmen)m(t)i(v)-5 b(ariables)256 1702
+y(ha)m(v)m(e)29 b(priorit)m(y)g(o)m(v)m(er)h(the)e(info)h(k)m(eys.)40
+b(In)28 b(other)h(w)m(ords,)f(if)h(the)f(en)m(vironmen)m(t)h(v)-5
+b(ariables)29 b(are)g(set)g(to)g Fj(TRUE)p Fo(,)256 1815
+y(direct)i(I/O)f(will)h(b)s(e)f(used)f(ev)m(en)i(if)g(the)g(info)f(k)m
+(eys)h(sa)m(y)g Fj(false)p Fo(,)e(and)h(vice)i(v)m(ersa.)42
+b(Note)31 b(that)g(direct)g(I/O)256 1928 y(m)m(ust)37
+b(b)s(e)g(turned)g(on)h(separately)h(for)e(reading)h(and)f(writing.)63
+b(The)37 b(en)m(vironmen)m(t-v)-5 b(ariables)40 b(metho)s(d)256
+2041 y(assumes)30 b(that)h(the)f(en)m(vironmen)m(t)h(v)-5
+b(ariables)31 b(can)g(b)s(e)e(read)i(b)m(y)f(eac)m(h)h(pro)s(cess)f(in)
+g(the)h(MPI)f(job.)41 b(This)29 b(is)256 2154 y(not)g(guaran)m(teed)h
+(b)m(y)f(the)g(MPI)g(Standard,)f(but)g(it)i(w)m(orks)e(with)h(SGI's)g
+(MPI)g(and)f(the)h Fj(ch)p 3388 2154 V 34 w(shmem)e Fo(device)256
+2266 y(of)j(MPICH.)165 2450 y Ff(\017)46 b Fo(Added)25
+b(supp)s(ort)g(\(new)h(ADIO)h(device,)i Fj(ad)p 1761
+2450 V 33 w(pvfs)p Fo(\))d(for)g(the)h(PVFS)g(parallel)g(\014le)g
+(system)g(for)f(Lin)m(ux)g(clus-)256 2563 y(ters,)f(dev)m(elop)s(ed)e
+(at)i(Clemson)e(Univ)m(ersit)m(y)h(\(see)h Fj(http://www.parl.clemson)o
+(.edu)o(/pv)o(fs)p Fo(\).)33 b(T)-8 b(o)23 b(use)g(it,)256
+2675 y(y)m(ou)28 b(m)m(ust)g(\014rst)g(install)h(PVFS)f(and)g(then)g
+(when)f(con\014guring)h(R)m(OMIO,)g(sp)s(ecify)g Fj(-file)p
+3376 2675 V 33 w(system=pvfs)256 2788 y Fo(in)h(addition)h(to)g(an)m(y)
+g(other)g(options)h(to)f Fj(configure)p Fo(.)38 b(\(As)30
+b(usual,)g(y)m(ou)g(can)g(con\014gure)f(for)h(m)m(ultiple)g(\014le)256
+2901 y(systems)i(b)m(y)g(using)f(\\)p Fj(+)p Fo(";)j(for)e(example,)h
+Fj(-file)p 1929 2901 V 33 w(system=pvfs+ufs+nfs)p Fo(.\))41
+b(Y)-8 b(ou)33 b(will)f(need)g(to)h(sp)s(ecify)256 3014
+y(the)d(path)g(to)h(the)g(PVFS)f(include)g(\014les)h(via)g(the)f
+Fj(-cflags)f Fo(option)h(to)i Fj(configure)p Fo(,)c(for)i(example,)256
+3127 y Fj(configure)45 b(-cflags=-I/usr/pvfs/incl)o(ude)o
+Fo(.)33 b(Y)-8 b(ou)24 b(will)g(also)g(need)g(to)g(sp)s(ecify)f(the)h
+(full)f(path)g(name)256 3240 y(of)30 b(the)g(PVFS)g(library)-8
+b(.)40 b(The)30 b(b)s(est)f(w)m(a)m(y)i(to)g(do)f(this)f(is)h(via)h
+(the)f Fj(-lib)f Fo(option)h(to)h(MPICH's)f Fj(configure)256
+3353 y Fo(script)g(\(assuming)g(y)m(ou)h(are)g(using)f(R)m(OMIO)g(from)
+g(within)g(MPICH\).)165 3536 y Ff(\017)46 b Fo(Uses)22
+b(w)m(eak)h(sym)m(b)s(ols)f(\(where)g(a)m(v)-5 b(ailable\))24
+b(for)e(building)g(the)g(pro\014ling)f(v)m(ersion,)k(i.e.,)g(the)d
+(PMPI)g(routines.)256 3649 y(As)30 b(a)h(result,)f(the)h(size)g(of)g
+(the)f(library)g(is)g(reduced)g(considerably)-8 b(.)165
+3832 y Ff(\017)46 b Fo(The)40 b(Mak)m(e\014les)i(use)e
+Fi(virtual)i(p)-5 b(aths)43 b Fo(if)d(supp)s(orted)f(b)m(y)h(the)h(mak)
+m(e)h(utilit)m(y)-8 b(.)72 b(GNU)42 b Fj(make)d Fo(supp)s(orts)f(it,)
+256 3945 y(for)32 b(example.)48 b(This)31 b(feature)i(allo)m(ws)h(y)m
+(ou)f(to)g(un)m(tar)g(the)f(distribution)g(in)g(some)h(directory)-8
+b(,)35 b(sa)m(y)e(a)g(slo)m(w)256 4058 y(NFS)39 b(directory)-8
+b(,)44 b(and)39 b(compile)i(the)e(library)h(\(create)i(the)d(.o)i
+(\014les\))f(in)f(another)h(directory)-8 b(,)44 b(sa)m(y)c(on)g(a)256
+4171 y(faster)c(lo)s(cal)h(disk.)57 b(F)-8 b(or)37 b(example,)h(if)e
+(the)g(tar)g(\014le)g(has)g(b)s(een)f(un)m(tarred)g(in)h(an)g(NFS)g
+(directory)g(called)256 4284 y Fj(/home/thakur/romio)p
+Fo(,)19 b(one)k(can)g(compile)h(it)f(in)f(a)i(di\013eren)m(t)f
+(directory)-8 b(,)25 b(sa)m(y)f Fj(/tmp/thakur)p Fo(,)d(as)i(follo)m
+(ws:)637 4495 y Fj(cd)48 b(/tmp/thakur)637 4608 y
+(/home/thakur/romio/configu)o(re)637 4721 y(make)256
+4933 y Fo(The)29 b(.o)i(\014les)g(will)g(b)s(e)e(created)j(in)e
+Fj(/tmp/thakur)p Fo(;)d(the)k(library)f(will)h(b)s(e)e(created)j(in)256
+5046 y Fj(/home/thakur/romio/lib/)o($AR)o(CH/l)o(ibmp)o(io.)o(a)p
+Fo(.)63 b(This)39 b(metho)s(d)g(w)m(orks)h(only)g(if)f(the)h
+Fj(make)f Fo(utilit)m(y)256 5158 y(supp)s(orts)28 b Fi(virtual)34
+b(p)-5 b(aths)p Fo(.)43 b(If)30 b(the)h(default)g Fj(make)e
+Fo(utilit)m(y)j(do)s(es)e(not,)i(y)m(ou)f(can)f(install)i(GNU)f
+Fj(make)f Fo(whic)m(h)256 5271 y(do)s(es,)g(and)g(sp)s(ecify)g(it)h(to)
+g Fj(configure)d Fo(as)1933 5520 y(15)p eop end
+%%Page: 16 18
+TeXDict begin 16 17 bop 590 263 a Fj(/home/thakur/romio/conf)o(igur)o
+(e)42 b(-make=/usr/gnu/bin/gmak)o(e)g(\(or)47 b(whatever\))165
+488 y Ff(\017)f Fo(Lots)30 b(of)h(miscellaneous)h(bug)d(\014xes)h(and)g
+(other)h(enhancemen)m(ts.)165 675 y Ff(\017)46 b Fo(This)33
+b(v)m(ersion)h(is)g(included)f(in)g(MPICH)h(1.2.0.)53
+b(If)33 b(y)m(ou)i(are)f(using)f(MPICH,)h(y)m(ou)g(need)g(not)g(do)m
+(wnload)256 788 y(R)m(OMIO)45 b(separately;)53 b(it)46
+b(gets)g(built)f(as)g(part)g(of)g(MPICH.)g(The)g(previous)g(v)m(ersion)
+g(of)g(R)m(OMIO)g(is)256 901 y(included)30 b(in)i(LAM,)g(HP)f(MPI,)h
+(SGI)f(MPI,)h(and)f(NEC)g(MPI.)g(NEC)h(has)f(also)h(implemen)m(ted)g
+(the)g(MPI-)256 1014 y(IO)e(functions)g(missing)g(in)g(R)m(OMIO,)h(and)
+f(therefore)h(NEC)f(MPI)h(has)f(a)h(complete)h(implemen)m(tation)g(of)
+256 1127 y(MPI-IO.)28 1370 y Fc(12.4)113 b(Ma)6 b(jor)38
+b(Changes)h(in)f(V)-9 b(ersion)37 b(1.0.1)165 1542 y
+Ff(\017)46 b Fo(This)29 b(v)m(ersion)i(is)f(included)g(in)g(MPICH)g
+(1.1.1)i(and)e(HP)h(MPI)f(1.4.)165 1730 y Ff(\017)46
+b Fo(Added)29 b(supp)s(ort)g(for)h(NEC)g(SX-4)h(and)e(created)j(a)e
+(new)g(device)i Fj(ad)p 2608 1730 29 4 v 33 w(sfs)e Fo(for)g(NEC)g(SFS)
+g(\014le)g(system.)165 1917 y Ff(\017)46 b Fo(New)30
+b(devices)h Fj(ad)p 873 1917 V 34 w(hfs)f Fo(for)g(HP)g(HFS)g(\014le)h
+(system)f(and)g Fj(ad)p 2309 1917 V 34 w(xfs)f Fo(for)i(SGI)f(XFS)g
+(\014le)g(system.)165 2105 y Ff(\017)46 b Fo(Users)30
+b(no)h(longer)g(need)g(to)g(pre\014x)f(the)h(\014lename)g(with)f(the)h
+(t)m(yp)s(e)g(of)g(\014le)g(system;)h(R)m(OMIO)e(determines)256
+2218 y(the)g(\014le-system)h(t)m(yp)s(e)g(on)f(its)h(o)m(wn.)165
+2405 y Ff(\017)46 b Fo(Added)35 b(supp)s(ort)g(for)h(64-bit)i(\014le)f
+(sizes)g(on)g(IBM)g(PIOFS,)f(SGI)g(XFS,)h(HP)f(HFS,)h(and)f(NEC)g(SFS)g
+(\014le)256 2518 y(systems.)165 2706 y Ff(\017)46 b Fj(MPI)p
+406 2706 V 33 w(Offset)c Fo(is)i(an)f(8-b)m(yte)j(in)m(teger)f(on)e
+(mac)m(hines)h(that)h(supp)s(ort)d(8-b)m(yte)j(in)m(tegers.)82
+b(It)43 b(is)h(of)g(t)m(yp)s(e)256 2819 y Fj(long)i(long)31
+b Fo(in)g(C)h(and)f Fj(integer*8)e Fo(in)i(F)-8 b(ortran.)46
+b(With)32 b(a)g(F)-8 b(ortran)33 b(90)f(compiler,)h(y)m(ou)f(can)g(use)
+g(either)256 2932 y Fj(integer*8)24 b Fo(or)i Fj(integer\(kind=MPI)p
+1593 2932 V 30 w(OFFSET)p 1911 2932 V 33 w(KIND\))p Fo(.)g(If)g(y)m(ou)
+h Fj(printf)e Fo(an)i Fj(MPI)p 3070 2932 V 33 w(Offset)e
+Fo(in)i(C,)f(remem-)256 3045 y(b)s(er)31 b(to)i(use)f
+Fj(\045lld)f Fo(or)h Fj(\045ld)f Fo(as)h(required)g(b)m(y)g(y)m(our)g
+(compiler.)47 b(\(See)32 b(what)h(is)f(used)f(in)h(the)g(test)h
+(program)256 3158 y Fj(romio/test/misc.c)p Fo(\).)i(On)26
+b(some)h(mac)m(hines,)i(R)m(OMIO)e(detects)h(at)g(con\014gure)e(time)i
+(that)g Fj(long)46 b(long)256 3271 y Fo(is)25 b(either)h(not)f(supp)s
+(orted)f(b)m(y)h(the)g(C)g(compiler)h(or)f(it)h(do)s(esn't)f(w)m(ork)g
+(prop)s(erly)-8 b(.)39 b(In)24 b(suc)m(h)h(cases,)i(con\014gure)256
+3383 y(sets)g Fj(MPI)p 580 3383 V 33 w(Offset)e Fo(to)i
+Fj(long)f Fo(in)g(C)g(and)g Fj(integer)f Fo(in)h(F)-8
+b(ortran.)40 b(This)26 b(happ)s(ens)f(on)h(In)m(tel)h(P)m(aragon,)i
+(Sun4,)256 3496 y(and)g(F)-8 b(reeBSD.)165 3684 y Ff(\017)46
+b Fo(Added)24 b(supp)s(ort)h(for)g(passing)h(hin)m(ts)g(to)g(the)g
+(implemen)m(tation)i(via)e(the)g Fj(MPI)p 2893 3684 V
+34 w(Info)f Fo(parameter.)39 b(R)m(OMIO)256 3797 y(understands)28
+b(the)j(follo)m(wing)g(hin)m(ts)g(\(k)m(eys)g(in)f Fj(MPI)p
+2024 3797 V 34 w(Info)f Fo(ob)5 b(ject\):)42 b Fj(cb)p
+2721 3797 V 34 w(buffer)p 3043 3797 V 32 w(size)p Fo(,)30
+b Fj(cb)p 3418 3797 V 34 w(nodes)p Fo(,)256 3910 y Fj(ind)p
+406 3910 V 33 w(rd)p 535 3910 V 34 w(buffer)p 857 3910
+V 33 w(size)p Fo(,)37 b Fj(ind)p 1288 3910 V 34 w(wr)p
+1418 3910 V 34 w(buffer)p 1740 3910 V 32 w(size)f Fo(\(on)h(all)h(but)e
+(IBM)h(PIOFS\),)g Fj(striping)p 3448 3910 V 32 w(factor)e
+Fo(\(on)256 4023 y(PFS)d(and)h(PIOFS\),)g Fj(striping)p
+1399 4023 V 32 w(unit)f Fo(\(on)h(PFS)g(and)g(PIOFS\),)g
+Fj(start)p 2813 4023 V 33 w(iodevice)e Fo(\(on)i(PFS)g(and)f(PI-)256
+4136 y(OFS\),)e(and)g Fj(pfs)p 854 4136 V 33 w(svr)p
+1031 4136 V 34 w(buf)f Fo(\(on)i(PFS)f(only\).)1933 5520
+y(16)p eop end
+%%Page: 17 19
+TeXDict begin 17 18 bop 28 263 a Fn(References)28 466
+y Fo([1])47 b(Ra)5 b(jesh)32 b(Borda)m(w)m(ek)-5 b(ar,)35
+b(Juan)c(Miguel)j(del)e(Rosario,)j(and)c(Alok)j(Choudhary)-8
+b(.)45 b(Design)33 b(and)f(ev)-5 b(aluation)34 b(of)170
+579 y(primitiv)m(es)25 b(for)f(parallel)i(I/O.)31 b(In)24
+b Fi(Pr)-5 b(o)g(c)g(e)g(e)g(dings)30 b(of)d(Sup)-5 b(er)g(c)g
+(omputing)30 b('93)p Fo(,)d(pages)e(452{461,)k(P)m(ortland,)d(OR,)170
+691 y(1993.)32 b(IEEE)e(Computer)f(So)s(ciet)m(y)j(Press.)28
+879 y([2])47 b(Alok)40 b(Choudhary)-8 b(,)40 b(Ra)5 b(jesh)39
+b(Borda)m(w)m(ek)-5 b(ar,)44 b(Mic)m(hael)d(Harry)-8
+b(,)42 b(Rak)m(esh)e(Krishnaiy)m(er,)h(Ra)m(vi)f(P)m(onn)m(usam)m(y)-8
+b(,)170 992 y(T)g(arvinder)44 b(Singh,)k(and)c(Ra)5 b(jeev)45
+b(Thakur.)83 b(P)-8 b(ASSION:)44 b(parallel)i(and)e(scalable)i(soft)m
+(w)m(are)g(for)f(input-)170 1105 y(output.)26 b(T)-8
+b(ec)m(hnical)23 b(Rep)s(ort)e(SCCS-636,)j(ECE)d(Dept.,)j(NP)-8
+b(A)m(C)22 b(and)f(CASE)g(Cen)m(ter,)j(Syracuse)d(Univ)m(ersit)m(y)-8
+b(,)170 1218 y(Septem)m(b)s(er)29 b(1994.)28 1405 y([3])47
+b(William)c(Gropp,)g(Ewing)e(Lusk,)i(and)e(Ra)5 b(jeev)42
+b(Thakur.)72 b Fi(Using)42 b(MPI-2:)61 b(A)-5 b(dvanc)g(e)g(d)44
+b(F)-7 b(e)i(atur)g(es)44 b(of)f(the)170 1518 y(Message-Passing)32
+b(Interfac)-5 b(e)p Fo(.)41 b(MIT)30 b(Press,)h(Cam)m(bridge,)f(MA,)h
+(1999.)28 1706 y([4])47 b(Message)37 b(P)m(assing)f(In)m(terface)h(F)-8
+b(orum.)56 b(MPI-2:)c(Extensions)35 b(to)i(the)e(Message-P)m(assing)k
+(In)m(terface,)f(July)170 1819 y(1997.)k Fj(http://www.mpi-forum.org/)o
+(doc)o(s/do)o(cs.h)o(tml)o Fo(.)28 2006 y([5])47 b(Ra)5
+b(jeev)31 b(Thakur,)f(William)i(Gropp,)e(and)g(Ewing)g(Lusk.)40
+b(An)30 b(abstract-device)j(in)m(terface)f(for)e(implemen)m(t-)170
+2119 y(ing)35 b(p)s(ortable)g(parallel-I/O)h(in)m(terfaces.)55
+b(In)34 b Fi(Pr)-5 b(o)g(c)g(e)g(e)g(dings)39 b(of)e(the)g(6th)h(Symp)
+-5 b(osium)39 b(on)e(the)g(F)-7 b(r)i(ontiers)39 b(of)170
+2232 y(Massively)32 b(Par)-5 b(al)5 b(lel)34 b(Computation)p
+Fo(,)f(pages)e(180{187.)j(IEEE)c(Computer)f(So)s(ciet)m(y)j(Press,)e
+(Octob)s(er)g(1996.)28 2420 y([6])47 b(Ra)5 b(jeev)43
+b(Thakur,)h(William)f(Gropp,)i(and)d(Ewing)f(Lusk.)75
+b(On)41 b(implemen)m(ting)i(MPI-IO)f(p)s(ortably)g(and)170
+2533 y(with)28 b(high)h(p)s(erformance.)38 b(In)28 b
+Fi(Pr)-5 b(o)g(c)g(e)g(e)g(dings)33 b(of)f(the)g(6th)g(Workshop)h(on)f
+(I/O)g(in)f(Par)-5 b(al)5 b(lel)32 b(and)h(Distribute)-5
+b(d)170 2646 y(Systems)p Fo(,)31 b(pages)g(23{32.)i(A)m(CM)e(Press,)f
+(Ma)m(y)i(1999.)1933 5520 y(17)p eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/src/mpi/romio/doc/users-guide.tex b/src/mpi/romio/doc/users-guide.tex
index b33d483..925d6fe 100644
--- a/src/mpi/romio/doc/users-guide.tex
+++ b/src/mpi/romio/doc/users-guide.tex
@@ -134,16 +134,19 @@ and {\tt MPI\_File\_c2f} (\S~4.12.4) are also implemented. C,
Fortran, and profiling interfaces are provided for all functions that
have been implemented.
-This version of ROMIO runs on at least the following machines: IBM SP; Intel
+ROMIO has run on at least the following machines: IBM SP; Intel
Paragon; HP Exemplar; SGI Origin2000; Cray T3E; NEC SX-4; other
symmetric multiprocessors from HP, SGI, DEC, Sun, and IBM; and networks of
-workstations (Sun, SGI, HP, IBM, DEC, Linux, and FreeBSD).
-Supported file systems are IBM PIOFS, Intel PFS, HP/Convex
-HFS, SGI XFS, NEC SFS, PVFS, NFS, NTFS, and any Unix file system (UFS).
+workstations (Sun, SGI, HP, IBM, DEC, Linux, and FreeBSD). Supported file
+systems have at one time included IBM PIOFS, Intel PFS, HP/Convex HFS, SGI XFS,
+NEC SFS, PVFS, NFS, NTFS, and any Unix file system (UFS). You may have to
+download an older ROMIO or MPICH release for out-of-date systems.
-This version of ROMIO is included in MPICH 1.2.4; an earlier version
-is included in at least the following MPI implementations: LAM, HP
-MPI, SGI MPI, and NEC MPI.
+
+This version of ROMIO is included in MPICH; an earlier version
+is included in at least the following MPI implementations: LAM, HP MPI, SGI
+MPI, and NEC MPI. Many HPC vendors base their MPI-IO implementation on
+ROMIO.
Note that proper I/O error codes and classes are returned and the status
variable is filled only when used with MPICH revision 1.2.1 or later.
@@ -362,7 +365,7 @@ applicable to all file system types:
aggregators.
\end{itemize}
-For PVFS, PIOFS, and PFS:
+For PVFS2:
\begin{itemize}
\item \texttt{striping\_factor} -- Controls the number of I/O devices to
stripe across. The default is file system dependent, but for PVFS it is
@@ -375,13 +378,6 @@ first be written to. This is a number in the range of 0 ...
striping\_factor - 1.
\end{itemize}
-\subsubsection{Hints for PFS}
-\label{sec:hints_pfs}
-\begin{itemize}
-\item \texttt{pfs\_svr\_buf} -- Turns on PFS server buffering. Valid
-values are \texttt{true} and \texttt{false}. Default is \texttt{false}.
-\end{itemize}
-
\subsubsection{Hints for XFS}
\label{sec:hints_xfs}
For XFS control is provided for the direct I/O optimization:
@@ -392,26 +388,7 @@ values are \texttt{true} and \texttt{false}. Default is \texttt{false}.
values are \texttt{true} and \texttt{false}. Default is \texttt{false}.
\end{itemize}
-\subsubsection{Hints for PVFS (v1)}
-\label{sec:hints_oldpvfs}
-
-For PVFS control is provided for the use of the listio interface. This
-interface to PVFS allows for a collection of noncontiguous regions to be
-requested (for reading or writing) with a single operation. This can result
-in substantially higher performance when accessing noncontiguous regions.
-Support for these operations in PVFS exists after version 1.5.4, but has not
-been heavily tested, so use of the interface is disabled in ROMIO by default
-at this time. The hints to control listio use are:
-\begin{itemize}
-\item \texttt{romio\_pvfs\_listio\_read} -- Controls use of listio for reads.
-Valid values are \texttt{enable}, \texttt{disable}, and \texttt{automatic}.
-Default is \texttt{disable}.
-\item \texttt{romio\_pvfs\_listio\_write} -- Controls use of listio for writes.
-Valid values are \texttt{enable}, \texttt{disable}, and \texttt{automatic}.
-Default is \texttt{disable}.
-\end{itemize}
-
-\subsubsection{Hints for PVFS (v2)}
+\subsubsection{Hints for PVFS2 (a.k.a OrangeFS)}
\label{sec:hints_pvfs}
The PVFS v2 file system has many tuning parameters.
@@ -858,16 +835,13 @@ on failure.
\item This version works only on a homogeneous cluster of machines,
and only the ``native'' file data representation is supported.
-\item Shared file pointers are not supported on PVFS and IBM PIOFS
-file systems because they don't support {\tt fcntl} file locks,
+\item Shared file pointers are not supported on the PVFS2
+file system because it does not support {\tt fcntl} file locks,
and ROMIO uses that feature to implement shared file pointers.
\item On HP machines running HPUX and on NEC SX-4, you need to compile
Fortran programs with {\tt mpifort}.
-\item The file-open mode {\tt MPI\_MODE\_EXCL} does not work on Intel
-PFS file system, due to a bug in PFS.
-
\end{itemize}
diff --git a/src/mpi/romio/include/mpio.h.in b/src/mpi/romio/include/mpio.h.in
index 1f3f382..9fb95a4 100644
--- a/src/mpi/romio/include/mpio.h.in
+++ b/src/mpi/romio/include/mpio.h.in
@@ -12,6 +12,12 @@
#include "mpi.h"
+#if defined(HAVE_VISIBILITY)
+#define ROMIO_API_PUBLIC __attribute__((visibility ("default")))
+#else
+#define ROMIO_API_PUBLIC
+#endif
+
#if defined(__cplusplus)
extern "C" {
#endif
@@ -120,150 +126,150 @@ typedef int MPI_Fint;
/* Section 9.2 */
/* Begin Prototypes */
-int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh);
-int MPI_File_close(MPI_File *fh);
-int MPI_File_delete(const char *filename, MPI_Info info);
-int MPI_File_set_size(MPI_File fh, MPI_Offset size);
-int MPI_File_preallocate(MPI_File fh, MPI_Offset size);
-int MPI_File_get_size(MPI_File fh, MPI_Offset *size);
-int MPI_File_get_group(MPI_File fh, MPI_Group *group);
-int MPI_File_get_amode(MPI_File fh, int *amode);
-int MPI_File_set_info(MPI_File fh, MPI_Info info);
-int MPI_File_get_info(MPI_File fh, MPI_Info *info_used);
+int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh) ROMIO_API_PUBLIC;
+int MPI_File_close(MPI_File *fh) ROMIO_API_PUBLIC;
+int MPI_File_delete(const char *filename, MPI_Info info) ROMIO_API_PUBLIC;
+int MPI_File_set_size(MPI_File fh, MPI_Offset size) ROMIO_API_PUBLIC;
+int MPI_File_preallocate(MPI_File fh, MPI_Offset size) ROMIO_API_PUBLIC;
+int MPI_File_get_size(MPI_File fh, MPI_Offset *size) ROMIO_API_PUBLIC;
+int MPI_File_get_group(MPI_File fh, MPI_Group *group) ROMIO_API_PUBLIC;
+int MPI_File_get_amode(MPI_File fh, int *amode) ROMIO_API_PUBLIC;
+int MPI_File_set_info(MPI_File fh, MPI_Info info) ROMIO_API_PUBLIC;
+int MPI_File_get_info(MPI_File fh, MPI_Info *info_used) ROMIO_API_PUBLIC;
/* Section 9.3 */
int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype,
- const char *datarep, MPI_Info info);
+ const char *datarep, MPI_Info info) ROMIO_API_PUBLIC;
int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype,
- char *datarep);
+ char *datarep) ROMIO_API_PUBLIC;
/* Section 9.4.2 */
int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int MPI_File_write_at(MPI_File fh, MPI_Offset offset, const void * buf, int count,
MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
/* nonblocking calls currently use MPIO_Request, because generalized
requests not yet implemented. For the same reason, MPIO_Test and
MPIO_Wait are used to test and wait on nonblocking I/O requests */
int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPIO_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
/* Section 9.4.3 */
int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_write(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_write_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
/* nonblocking calls currently use MPIO_Request, because generalized
requests not yet implemented. For the same reason, MPIO_Test and
MPIO_Wait are used to test and wait on nonblocking I/O requests */
int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_iwrite(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
-int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence);
-int MPI_File_get_position(MPI_File fh, MPI_Offset *offset);
-int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp);
+int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence) ROMIO_API_PUBLIC;
+int MPI_File_get_position(MPI_File fh, MPI_Offset *offset) ROMIO_API_PUBLIC;
+int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp) ROMIO_API_PUBLIC;
/* Section 9.4.4 */
int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_iwrite_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_write_ordered(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence);
-int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset);
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence) ROMIO_API_PUBLIC;
+int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset) ROMIO_API_PUBLIC;
/* Section 9.4.5 */
int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count,
- MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
+ MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
+int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status) ROMIO_API_PUBLIC;
int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf, int count,
- MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status);
+ MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
+int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status) ROMIO_API_PUBLIC;
int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status) ROMIO_API_PUBLIC;
int MPI_File_write_all_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status) ROMIO_API_PUBLIC;
int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status) ROMIO_API_PUBLIC;
int MPI_File_write_ordered_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status) ROMIO_API_PUBLIC;
/* Section 9.5.1 */
-int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent);
+int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent) ROMIO_API_PUBLIC;
/* Section 9.5.3 */
int MPI_Register_datarep(const char *datarep, MPI_Datarep_conversion_function *read_conversion_fn,
MPI_Datarep_conversion_function *write_conversion_fn,
- MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state);
+ MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) ROMIO_API_PUBLIC;
/* Section 9.6.1 */
-int MPI_File_set_atomicity(MPI_File fh, int flag);
-int MPI_File_get_atomicity(MPI_File fh, int *flag);
-int MPI_File_sync(MPI_File fh);
+int MPI_File_set_atomicity(MPI_File fh, int flag) ROMIO_API_PUBLIC;
+int MPI_File_get_atomicity(MPI_File fh, int *flag) ROMIO_API_PUBLIC;
+int MPI_File_sync(MPI_File fh) ROMIO_API_PUBLIC;
/* Section 4.13.3 */
#ifndef MPICH
/* MPICH provides these definitions */
-int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler);
-int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) ROMIO_API_PUBLIC;
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) ROMIO_API_PUBLIC;
#endif
/* For MPI 3.1 */
int MPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int MPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int MPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int MPI_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
/* End Prototypes */
#ifndef HAVE_MPI_DARRAY_SUBARRAY
/* Section 4.14.4 */
int MPI_Type_create_subarray(int ndims, const int array_of_sizes[], const int array_of_subsizes[],
const int array_of_starts[], int order, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) ROMIO_API_PUBLIC;
/* Section 4.14.5 */
int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[],
const int array_of_distribs[], const int array_of_dargs[],
const int array_of_psizes, int order, MPI_Datatype oldtype,
- MPI_Datatype *newtype);
+ MPI_Datatype *newtype) ROMIO_API_PUBLIC;
#endif
/* The globus2 device has to rename MPI_ symbols in order to use the vendor
@@ -279,43 +285,43 @@ int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsi
#endif
#endif
/* above needed for some versions of mpi.h in MPICH!! */
-MPI_File MPI_File_f2c(MPI_Fint file);
-MPI_Fint MPI_File_c2f(MPI_File file);
+MPI_File MPI_File_f2c(MPI_Fint file) ROMIO_API_PUBLIC;
+MPI_Fint MPI_File_c2f(MPI_File file) ROMIO_API_PUBLIC;
#ifndef HAVE_MPI_GREQUEST
/* The following functions are required if generalized requests are not
available, because in that case, an MPIO_Request object
is currently used for nonblocking I/O. */
-int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status);
-int MPIO_Wait(MPIO_Request *request, MPI_Status *status);
+int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status) ROMIO_API_PUBLIC;
+int MPIO_Wait(MPIO_Request *request, MPI_Status *status) ROMIO_API_PUBLIC;
int MPIO_Testall(int count, MPIO_Request array_of_requests[], int *flag,
- MPI_Status array_of_statuses[]);
-int MPIO_Waitall(int count, MPIO_Request array_of_requests[], MPI_Status array_of_statuses[]);
+ MPI_Status array_of_statuses[]) ROMIO_API_PUBLIC;
+int MPIO_Waitall(int count, MPIO_Request array_of_requests[], MPI_Status array_of_statuses[]) ROMIO_API_PUBLIC;
int MPIO_Testany(int count, MPIO_Request array_of_requests[], int *indx, int *flag,
- MPI_Status *status);
-int MPIO_Waitany(int count, MPIO_Request array_of_requests[], int *indx, MPI_Status *status);
+ MPI_Status *status) ROMIO_API_PUBLIC;
+int MPIO_Waitany(int count, MPIO_Request array_of_requests[], int *indx, MPI_Status *status) ROMIO_API_PUBLIC;
int MPIO_Waitsome(int incount, MPIO_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]);
+ int array_of_indices[], MPI_Status array_of_statuses[]) ROMIO_API_PUBLIC;
int MPIO_Testsome(int incount, MPIO_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]);
+ int array_of_indices[], MPI_Status array_of_statuses[]) ROMIO_API_PUBLIC;
-MPI_Fint MPIO_Request_c2f(MPIO_Request request);
-MPIO_Request MPIO_Request_f2c(MPI_Fint request);
+MPI_Fint MPIO_Request_c2f(MPIO_Request request) ROMIO_API_PUBLIC;
+MPIO_Request MPIO_Request_f2c(MPI_Fint request) ROMIO_API_PUBLIC;
#endif /* HAVE_MPI_GREQUEST */
/* info functions if not defined in the MPI implementation */
#ifndef HAVE_MPI_INFO
-int MPI_Info_create(MPI_Info *info);
-int MPI_Info_set(MPI_Info info, const char *key, const char *value);
-int MPI_Info_delete(MPI_Info info, const char *key);
-int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag);
-int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag);
-int MPI_Info_get_nkeys(MPI_Info info, int *nkeys);
-int MPI_Info_get_nthkey(MPI_Info info, int n, char *key);
-int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo);
-int MPI_Info_free(MPI_Info *info);
+int MPI_Info_create(MPI_Info *info) ROMIO_API_PUBLIC;
+int MPI_Info_set(MPI_Info info, const char *key, const char *value) ROMIO_API_PUBLIC;
+int MPI_Info_delete(MPI_Info info, const char *key) ROMIO_API_PUBLIC;
+int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag) ROMIO_API_PUBLIC;
+int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag) ROMIO_API_PUBLIC;
+int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) ROMIO_API_PUBLIC;
+int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) ROMIO_API_PUBLIC;
+int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) ROMIO_API_PUBLIC;
+int MPI_Info_free(MPI_Info *info) ROMIO_API_PUBLIC;
/* The globus2 device has to rename MPI_ symbols in order to use the vendor
MPI as one of its transport mechanisms. Therefore, the following undefines
@@ -329,8 +335,8 @@ int MPI_Info_free(MPI_Info *info);
#endif
#endif
/* above needed for some versions of mpi.h in MPICH!! */
-MPI_Fint MPI_Info_c2f(MPI_Info info);
-MPI_Info MPI_Info_f2c(MPI_Fint info);
+MPI_Fint MPI_Info_c2f(MPI_Info info) ROMIO_API_PUBLIC;
+MPI_Info MPI_Info_f2c(MPI_Fint info) ROMIO_API_PUBLIC;
#endif
#endif /* HAVE_PRAGMA_HP_SEC_DEF */
@@ -340,36 +346,36 @@ MPI_Info MPI_Info_f2c(MPI_Fint info);
/* Section 9.2 */
-int PMPI_File_open(MPI_Comm, const char *, int, MPI_Info, MPI_File *);
-int PMPI_File_close(MPI_File *);
-int PMPI_File_delete(const char *, MPI_Info);
-int PMPI_File_set_size(MPI_File, MPI_Offset);
-int PMPI_File_preallocate(MPI_File, MPI_Offset);
-int PMPI_File_get_size(MPI_File, MPI_Offset *);
-int PMPI_File_get_group(MPI_File, MPI_Group *);
-int PMPI_File_get_amode(MPI_File, int *);
-int PMPI_File_set_info(MPI_File, MPI_Info);
-int PMPI_File_get_info(MPI_File, MPI_Info *);
+int PMPI_File_open(MPI_Comm, const char *, int, MPI_Info, MPI_File *) ROMIO_API_PUBLIC;
+int PMPI_File_close(MPI_File *) ROMIO_API_PUBLIC;
+int PMPI_File_delete(const char *, MPI_Info) ROMIO_API_PUBLIC;
+int PMPI_File_set_size(MPI_File, MPI_Offset) ROMIO_API_PUBLIC;
+int PMPI_File_preallocate(MPI_File, MPI_Offset) ROMIO_API_PUBLIC;
+int PMPI_File_get_size(MPI_File, MPI_Offset *) ROMIO_API_PUBLIC;
+int PMPI_File_get_group(MPI_File, MPI_Group *) ROMIO_API_PUBLIC;
+int PMPI_File_get_amode(MPI_File, int *) ROMIO_API_PUBLIC;
+int PMPI_File_set_info(MPI_File, MPI_Info) ROMIO_API_PUBLIC;
+int PMPI_File_get_info(MPI_File, MPI_Info *) ROMIO_API_PUBLIC;
/* Section 9.3 */
int PMPI_File_set_view(MPI_File, MPI_Offset,
- MPI_Datatype, MPI_Datatype, const char *, MPI_Info);
+ MPI_Datatype, MPI_Datatype, const char *, MPI_Info) ROMIO_API_PUBLIC;
int PMPI_File_get_view(MPI_File, MPI_Offset *,
- MPI_Datatype *, MPI_Datatype *, char *);
+ MPI_Datatype *, MPI_Datatype *, char *) ROMIO_API_PUBLIC;
/* Section 9.4.2 */
int PMPI_File_read_at(MPI_File, MPI_Offset, void *,
int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int PMPI_File_read_at_all(MPI_File, MPI_Offset, void *,
int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int PMPI_File_write_at(MPI_File, MPI_Offset, const void *,
int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int PMPI_File_write_at_all(MPI_File, MPI_Offset, const void *,
int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
/* nonblocking calls currently use MPIO_Request, because generalized
requests not yet implemented. For the same reason, MPIO_Test and
@@ -377,155 +383,155 @@ int PMPI_File_write_at_all(MPI_File, MPI_Offset, const void *,
int PMPI_File_iread_at(MPI_File, MPI_Offset, void *,
int, MPI_Datatype, MPIO_Request *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int PMPI_File_iwrite_at(MPI_File, MPI_Offset, const void *,
int, MPI_Datatype, MPIO_Request *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
/* Section 9.4.3 */
int PMPI_File_read(MPI_File, void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_read_all(MPI_File, void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_write(MPI_File, const void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_write_all(MPI_File, const void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
/* nonblocking calls currently use MPIO_Request, because generalized
requests not yet implemented. For the same reason, MPIO_Test and
MPIO_Wait are used to test and wait on nonblocking I/O requests */
int PMPI_File_iread(MPI_File, void *, int, MPI_Datatype, MPIO_Request *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_iwrite(MPI_File, const void *, int, MPI_Datatype, MPIO_Request *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
-int PMPI_File_seek(MPI_File, MPI_Offset, int);
-int PMPI_File_get_position(MPI_File, MPI_Offset *);
-int PMPI_File_get_byte_offset(MPI_File, MPI_Offset, MPI_Offset *);
+int PMPI_File_seek(MPI_File, MPI_Offset, int) ROMIO_API_PUBLIC;
+int PMPI_File_get_position(MPI_File, MPI_Offset *) ROMIO_API_PUBLIC;
+int PMPI_File_get_byte_offset(MPI_File, MPI_Offset, MPI_Offset *) ROMIO_API_PUBLIC;
/* Section 9.4.4 */
int PMPI_File_read_shared(MPI_File, void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_write_shared(MPI_File, const void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_iread_shared(MPI_File, void *, int,
MPI_Datatype, MPIO_Request *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_iwrite_shared(MPI_File, const void *, int,
MPI_Datatype, MPIO_Request *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_read_ordered(MPI_File, void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_write_ordered(MPI_File, const void *, int, MPI_Datatype, MPI_Status *)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_File_seek_shared(MPI_File, MPI_Offset, int);
-int PMPI_File_get_position_shared(MPI_File, MPI_Offset *);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int PMPI_File_seek_shared(MPI_File, MPI_Offset, int) ROMIO_API_PUBLIC;
+int PMPI_File_get_position_shared(MPI_File, MPI_Offset *) ROMIO_API_PUBLIC;
/* Section 9.4.5 */
int PMPI_File_read_at_all_begin(MPI_File, MPI_Offset, void *,
int, MPI_Datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int PMPI_File_read_at_all_end(MPI_File, void *, MPI_Status *);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
+int PMPI_File_read_at_all_end(MPI_File, void *, MPI_Status *) ROMIO_API_PUBLIC;
int PMPI_File_write_at_all_begin(MPI_File, MPI_Offset, const void *,
int, MPI_Datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int PMPI_File_write_at_all_end(MPI_File, const void *, MPI_Status *);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
+int PMPI_File_write_at_all_end(MPI_File, const void *, MPI_Status *) ROMIO_API_PUBLIC;
int PMPI_File_read_all_begin(MPI_File, void *, int, MPI_Datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_File_read_all_end(MPI_File, void *, MPI_Status *);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int PMPI_File_read_all_end(MPI_File, void *, MPI_Status *) ROMIO_API_PUBLIC;
int PMPI_File_write_all_begin(MPI_File, const void *, int, MPI_Datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_File_write_all_end(MPI_File, const void *, MPI_Status *);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int PMPI_File_write_all_end(MPI_File, const void *, MPI_Status *) ROMIO_API_PUBLIC;
int PMPI_File_read_ordered_begin(MPI_File, void *, int, MPI_Datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_File_read_ordered_end(MPI_File, void *, MPI_Status *);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int PMPI_File_read_ordered_end(MPI_File, void *, MPI_Status *) ROMIO_API_PUBLIC;
int PMPI_File_write_ordered_begin(MPI_File, const void *, int, MPI_Datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPI_File_write_ordered_end(MPI_File, const void *, MPI_Status *);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
+int PMPI_File_write_ordered_end(MPI_File, const void *, MPI_Status *) ROMIO_API_PUBLIC;
/* Section 9.5.1 */
-int PMPI_File_get_type_extent(MPI_File, MPI_Datatype, MPI_Aint *);
+int PMPI_File_get_type_extent(MPI_File, MPI_Datatype, MPI_Aint *) ROMIO_API_PUBLIC;
/* Section 9.5.3 */
int PMPI_Register_datarep(const char *,
MPI_Datarep_conversion_function *,
MPI_Datarep_conversion_function *,
MPI_Datarep_extent_function *,
- void *);
+ void *) ROMIO_API_PUBLIC;
/* Section 9.6.1 */
-int PMPI_File_set_atomicity(MPI_File, int);
-int PMPI_File_get_atomicity(MPI_File, int *);
-int PMPI_File_sync(MPI_File);
+int PMPI_File_set_atomicity(MPI_File, int) ROMIO_API_PUBLIC;
+int PMPI_File_get_atomicity(MPI_File, int *) ROMIO_API_PUBLIC;
+int PMPI_File_sync(MPI_File) ROMIO_API_PUBLIC;
/* Section 4.13.3 */
#ifndef MPICH
/* MPICH provides these definitions */
-int PMPI_File_set_errhandler( MPI_File, MPI_Errhandler );
-int PMPI_File_get_errhandler( MPI_File, MPI_Errhandler * );
+int PMPI_File_set_errhandler( MPI_File, MPI_Errhandler ) ROMIO_API_PUBLIC;
+int PMPI_File_get_errhandler( MPI_File, MPI_Errhandler * ) ROMIO_API_PUBLIC;
#endif
/* For MPI 3.1 */
int PMPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int PMPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) ROMIO_API_PUBLIC;
int PMPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
int PMPI_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) ROMIO_API_PUBLIC;
#ifndef HAVE_MPI_DARRAY_SUBARRAY
/* Section 4.14.4 */
int PMPI_Type_create_subarray(int, int *, int *, int *, int,
- MPI_Datatype, MPI_Datatype *);
+ MPI_Datatype, MPI_Datatype *) ROMIO_API_PUBLIC;
/* Section 4.14.5 */
int PMPI_Type_create_darray(int, int, int, int *, int *,
- int *, int *, int, MPI_Datatype, MPI_Datatype *);
+ int *, int *, int, MPI_Datatype, MPI_Datatype *) ROMIO_API_PUBLIC;
#endif
/* Section 4.12.4 */
-MPI_File PMPI_File_f2c(MPI_Fint);
-MPI_Fint PMPI_File_c2f(MPI_File);
+MPI_File PMPI_File_f2c(MPI_Fint) ROMIO_API_PUBLIC;
+MPI_Fint PMPI_File_c2f(MPI_File) ROMIO_API_PUBLIC;
#ifndef HAVE_MPI_GREQUEST
/* The following functions are required if generalized requests are not
available, because in that case, an MPIO_Request object
is currently used for nonblocking I/O. */
-int PMPIO_Test(MPIO_Request *, int *, MPI_Status *);
-int PMPIO_Wait(MPIO_Request *, MPI_Status *);
-int PMPIO_Testall(int, MPIO_Request *, int *, MPI_Status *);
-int PMPIO_Waitall(int, MPIO_Request *, MPI_Status *);
-int PMPIO_Testany(int, MPIO_Request *, int *, int *, MPI_Status *);
-int PMPIO_Waitany(int, MPIO_Request *, int *, MPI_Status *);
-int PMPIO_Waitsome(int, MPIO_Request *, int *, int *, MPI_Status *);
-int PMPIO_Testsome(int, MPIO_Request *, int *, int *, MPI_Status *);
-MPI_Fint PMPIO_Request_c2f(MPIO_Request);
-MPIO_Request PMPIO_Request_f2c(MPI_Fint);
+int PMPIO_Test(MPIO_Request *, int *, MPI_Status *) ROMIO_API_PUBLIC;
+int PMPIO_Wait(MPIO_Request *, MPI_Status *) ROMIO_API_PUBLIC;
+int PMPIO_Testall(int, MPIO_Request *, int *, MPI_Status *) ROMIO_API_PUBLIC;
+int PMPIO_Waitall(int, MPIO_Request *, MPI_Status *) ROMIO_API_PUBLIC;
+int PMPIO_Testany(int, MPIO_Request *, int *, int *, MPI_Status *) ROMIO_API_PUBLIC;
+int PMPIO_Waitany(int, MPIO_Request *, int *, MPI_Status *) ROMIO_API_PUBLIC;
+int PMPIO_Waitsome(int, MPIO_Request *, int *, int *, MPI_Status *) ROMIO_API_PUBLIC;
+int PMPIO_Testsome(int, MPIO_Request *, int *, int *, MPI_Status *) ROMIO_API_PUBLIC;
+MPI_Fint PMPIO_Request_c2f(MPIO_Request) ROMIO_API_PUBLIC;
+MPIO_Request PMPIO_Request_f2c(MPI_Fint) ROMIO_API_PUBLIC;
#endif /* HAVE_MPI_GREQUEST */
/* info functions if not defined in the MPI implementation */
#ifndef HAVE_MPI_INFO
-int PMPI_Info_create(MPI_Info *);
-int PMPI_Info_set(MPI_Info, char *, char *);
-int PMPI_Info_delete(MPI_Info, char *);
-int PMPI_Info_get(MPI_Info, char *, int, char *, int *);
-int PMPI_Info_get_valuelen(MPI_Info, char *, int *, int *);
-int PMPI_Info_get_nkeys(MPI_Info, int *);
-int PMPI_Info_get_nthkey(MPI_Info, int, char *);
-int PMPI_Info_dup(MPI_Info, MPI_Info *);
-int PMPI_Info_free(MPI_Info *);
-
-MPI_Fint PMPI_Info_c2f(MPI_Info);
-MPI_Info PMPI_Info_f2c(MPI_Fint);
+int PMPI_Info_create(MPI_Info *) ROMIO_API_PUBLIC;
+int PMPI_Info_set(MPI_Info, char *, char *) ROMIO_API_PUBLIC;
+int PMPI_Info_delete(MPI_Info, char *) ROMIO_API_PUBLIC;
+int PMPI_Info_get(MPI_Info, char *, int, char *, int *) ROMIO_API_PUBLIC;
+int PMPI_Info_get_valuelen(MPI_Info, char *, int *, int *) ROMIO_API_PUBLIC;
+int PMPI_Info_get_nkeys(MPI_Info, int *) ROMIO_API_PUBLIC;
+int PMPI_Info_get_nthkey(MPI_Info, int, char *) ROMIO_API_PUBLIC;
+int PMPI_Info_dup(MPI_Info, MPI_Info *) ROMIO_API_PUBLIC;
+int PMPI_Info_free(MPI_Info *) ROMIO_API_PUBLIC;
+
+MPI_Fint PMPI_Info_c2f(MPI_Info) ROMIO_API_PUBLIC;
+MPI_Info PMPI_Info_f2c(MPI_Fint) ROMIO_API_PUBLIC;
#endif
#if defined(__cplusplus)
diff --git a/src/mpi/romio/mpi-io/.state-cache b/src/mpi/romio/mpi-io/.state-cache
index 5bd7fb2..bdd2c43 100644
--- a/src/mpi/romio/mpi-io/.state-cache
+++ b/src/mpi/romio/mpi-io/.state-cache
@@ -1,232 +1,235 @@
<dir>
-<file name="mpioimpl.h" info="1447123141"/>
-<file name="iotestall.c" info="1447123141"/>
-<file name="iwrite_atall.c" info="1447123141"/>
-<file name="write_atall.c" info="1447123141"/>
-<file name="read_ord.c" info="1447123141"/>
-<file name="read_orde.c" info="1447123141"/>
-<file name="get_bytoff.c" info="1447123141"/>
-<file name="delete.c" info="1447123141"/>
-<file name="read_at.c" info="1447123141"/>
-<file name="open.c" info="1447123141"/>
-<file name="mpir-mpioinit.c" info="1447123141"/>
-<file name="write_ord.c" info="1447123141"/>
-<file name="mpiu_external32.c" info="1447123141"/>
-<file name="iotestsome.c" info="1447123141"/>
-<file name="read.c" info="1447123141"/>
-<file name="iread_all.c" info="1447123141"/>
-<file name="file_c2f.c" info="1447123141"/>
-<file name="wr_atallb.c" info="1447123141"/>
-<file name="get_amode.c" info="1447123141"/>
-<file name="iwrite.c" info="1447123141"/>
-<file name="iread.c" info="1447123141"/>
-<file name="iread_sh.c" info="1447123141"/>
-<file name="write_allb.c" info="1447123141"/>
-<file name="iwrite_sh.c" info="1447123141"/>
-<file name="read_ordb.c" info="1447123141"/>
-<file name="iowait.c" info="1447123141"/>
-<file name="get_extent.c" info="1447123141"/>
-<file name="register_datarep.c" info="1447123141"/>
-<file name="set_info.c" info="1447123141"/>
-<file name="read_all.c" info="1447123141"/>
-<file name="write_sh.c" info="1447123141"/>
-<file name="read_sh.c" info="1447123141"/>
-<file name="set_errh.c" info="1447123141"/>
-<file name="get_posn_sh.c" info="1447123141"/>
-<file name="wr_atalle.c" info="1447123141"/>
-<file name="write_at.c" info="1447123141"/>
-<file name="iowaitsome.c" info="1447123141"/>
-<file name="get_info.c" info="1447123141"/>
-<file name="read_atall.c" info="1447123141"/>
-<file name="write.c" info="1447123141"/>
-<file name="write_orde.c" info="1447123141"/>
-<file name="seek_sh.c" info="1447123141"/>
-<file name="fsync.c" info="1447123141"/>
-<file name="read_allb.c" info="1447123141"/>
-<file name="iwrite_at.c" info="1447123141"/>
-<file name="iread_at.c" info="1447123141"/>
-<file name="get_posn.c" info="1447123141"/>
-<file name="get_view.c" info="1447123141"/>
-<file name="iowaitall.c" info="1447123141"/>
-<file name="write_ordb.c" info="1447123141"/>
-<file name="prealloc.c" info="1447123141"/>
-<file name="file_f2c.c" info="1447123141"/>
-<file name="get_size.c" info="1447123141"/>
-<file name="iowaitany.c" info="1447123141"/>
-<file name="iotestany.c" info="1447123141"/>
-<file name="mpioprof.h" info="1447123141"/>
-<file name="iotest.c" info="1447123141"/>
-<file name="write_all.c" info="1447123141"/>
-<file name="ioreq_f2c.c" info="1447123141"/>
-<file name="get_atom.c" info="1447123141"/>
-<file name="set_size.c" info="1447123141"/>
-<file name="write_alle.c" info="1447123141"/>
-<file name="mpiu_greq.c" info="1447123141"/>
-<file name="get_errh.c" info="1447123141"/>
-<file name="rd_atalle.c" info="1447123141"/>
-<file name="mpich_fileutil.c" info="1447123141"/>
-<file name="read_alle.c" info="1447123141"/>
-<file name="iread_atall.c" info="1447123141"/>
-<file name="close.c" info="1447123141"/>
-<file name="get_group.c" info="1447123141"/>
-<file name="set_view.c" info="1447123141"/>
-<file name="set_atom.c" info="1447123141"/>
-<file name="ioreq_c2f.c" info="1447123141"/>
-<file name="rd_atallb.c" info="1447123141"/>
-<file name="iwrite_all.c" info="1447123141"/>
-<file name="seek.c" info="1447123141"/>
+<file name="delete.c" info="1478973152"/>
+<file name="get_size.c" info="1478973152"/>
+<file name="set_errh.c" info="1478973152"/>
+<file name="write_orde.c" info="1478973152"/>
+<file name="wr_atallb.c" info="1478973152"/>
+<file name="open.c" info="1478973152"/>
+<file name="rd_atallb.c" info="1478973152"/>
+<file name="iwrite_atall.c" info="1478973152"/>
+<file name="iread_all.c" info="1478973152"/>
+<file name="iotestany.c" info="1478973152"/>
+<file name="set_view.c" info="1478973152"/>
+<file name="write_all.c" info="1478973152"/>
+<file name="mpir-mpioinit.c" info="1478973152"/>
+<file name="iread_sh.c" info="1478973152"/>
+<file name="get_posn_sh.c" info="1478973152"/>
+<file name="read_atall.c" info="1478973152"/>
+<file name="iotest.c" info="1478973152"/>
+<file name="get_amode.c" info="1478973152"/>
+<file name="write_ordb.c" info="1478973152"/>
+<file name="write_ord.c" info="1478973152"/>
+<file name="mpich_fileutil.c" info="1478973152"/>
+<file name="read_ord.c" info="1478973152"/>
+<file name="iread.c" info="1478973152"/>
+<file name="get_view.c" info="1478973152"/>
+<file name="read_allb.c" info="1478973152"/>
+<file name="file_c2f.c" info="1478973152"/>
+<file name="ioreq_c2f.c" info="1478973152"/>
+<file name="get_errh.c" info="1478973152"/>
+<file name="iwrite_at.c" info="1478973152"/>
+<file name="iotestsome.c" info="1478973152"/>
+<file name="seek_sh.c" info="1478973152"/>
+<file name="read_at.c" info="1478973152"/>
+<file name="iowait.c" info="1478973152"/>
+<file name="mpiu_greq.c" info="1478973152"/>
+<file name="get_group.c" info="1478973152"/>
+<file name="read_alle.c" info="1478973152"/>
+<file name="get_bytoff.c" info="1478973152"/>
+<file name="close.c" info="1478973152"/>
+<file name="mpir_cst_filesys.c" info="1478973152"/>
+<file name="rd_atalle.c" info="1478973152"/>
+<file name="write.c" info="1478973152"/>
+<file name="read.c" info="1478973152"/>
+<file name="mpiu_external32.c" info="1478973152"/>
+<file name="write_atall.c" info="1478973152"/>
+<file name="iowaitsome.c" info="1478973152"/>
+<file name="read_all.c" info="1478973152"/>
+<file name="file_f2c.c" info="1478973152"/>
+<file name="fsync.c" info="1478973152"/>
+<file name="iread_atall.c" info="1478973152"/>
+<file name="iread_at.c" info="1478973152"/>
+<file name="get_info.c" info="1478973152"/>
+<file name="write_at.c" info="1478973152"/>
+<file name="get_posn.c" info="1478973152"/>
+<file name="write_allb.c" info="1478973152"/>
+<file name="read_sh.c" info="1478973152"/>
+<file name="set_info.c" info="1478973152"/>
+<file name="mpioprof.h" info="1478973152"/>
+<file name="iwrite.c" info="1478973152"/>
+<file name="ioreq_f2c.c" info="1478973152"/>
+<file name="iwrite_all.c" info="1478973152"/>
+<file name="write_sh.c" info="1478973152"/>
+<file name="set_atom.c" info="1478973152"/>
+<file name="seek.c" info="1478973152"/>
+<file name="read_ordb.c" info="1478973152"/>
+<file name="iowaitany.c" info="1478973152"/>
+<file name="wr_atalle.c" info="1478973152"/>
+<file name="prealloc.c" info="1478973152"/>
+<file name="write_alle.c" info="1478973152"/>
+<file name="get_extent.c" info="1478973152"/>
+<file name="mpioimpl.h" info="1478973152"/>
+<file name="get_atom.c" info="1478973152"/>
+<file name="register_datarep.c" info="1478973152"/>
+<file name="read_orde.c" info="1478973152"/>
+<file name="iowaitall.c" info="1478973152"/>
+<file name="iotestall.c" info="1478973152"/>
+<file name="set_size.c" info="1478973152"/>
+<file name="iwrite_sh.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpioimpl.h">
+<fileinfo name="delete.c">
</fileinfo>
-<fileinfo name="iotestall.c">
+<fileinfo name="get_size.c">
</fileinfo>
-<fileinfo name="iwrite_atall.c">
+<fileinfo name="set_errh.c">
</fileinfo>
-<fileinfo name="write_atall.c">
+<fileinfo name="write_orde.c">
</fileinfo>
-<fileinfo name="read_ord.c">
+<fileinfo name="wr_atallb.c">
</fileinfo>
-<fileinfo name="read_orde.c">
+<fileinfo name="open.c">
</fileinfo>
-<fileinfo name="get_bytoff.c">
+<fileinfo name="rd_atallb.c">
</fileinfo>
-<fileinfo name="delete.c">
+<fileinfo name="iwrite_atall.c">
</fileinfo>
-<fileinfo name="read_at.c">
+<fileinfo name="iread_all.c">
</fileinfo>
-<fileinfo name="open.c">
+<fileinfo name="iotestany.c">
+</fileinfo>
+<fileinfo name="set_view.c">
+</fileinfo>
+<fileinfo name="write_all.c">
</fileinfo>
<fileinfo name="mpir-mpioinit.c">
</fileinfo>
-<fileinfo name="write_ord.c">
+<fileinfo name="iread_sh.c">
</fileinfo>
-<fileinfo name="mpiu_external32.c">
+<fileinfo name="get_posn_sh.c">
</fileinfo>
-<fileinfo name="iotestsome.c">
+<fileinfo name="read_atall.c">
</fileinfo>
-<fileinfo name="read.c">
+<fileinfo name="iotest.c">
</fileinfo>
-<fileinfo name="iread_all.c">
+<fileinfo name="get_amode.c">
</fileinfo>
-<fileinfo name="file_c2f.c">
+<fileinfo name="write_ordb.c">
</fileinfo>
-<fileinfo name="wr_atallb.c">
+<fileinfo name="write_ord.c">
</fileinfo>
-<fileinfo name="get_amode.c">
+<fileinfo name="mpich_fileutil.c">
</fileinfo>
-<fileinfo name="iwrite.c">
+<fileinfo name="read_ord.c">
</fileinfo>
<fileinfo name="iread.c">
</fileinfo>
-<fileinfo name="iread_sh.c">
+<fileinfo name="get_view.c">
</fileinfo>
-<fileinfo name="write_allb.c">
+<fileinfo name="read_allb.c">
</fileinfo>
-<fileinfo name="iwrite_sh.c">
+<fileinfo name="file_c2f.c">
</fileinfo>
-<fileinfo name="read_ordb.c">
+<fileinfo name="ioreq_c2f.c">
</fileinfo>
-<fileinfo name="iowait.c">
+<fileinfo name="get_errh.c">
</fileinfo>
-<fileinfo name="get_extent.c">
+<fileinfo name="iwrite_at.c">
</fileinfo>
-<fileinfo name="register_datarep.c">
+<fileinfo name="iotestsome.c">
</fileinfo>
-<fileinfo name="set_info.c">
+<fileinfo name="seek_sh.c">
</fileinfo>
-<fileinfo name="read_all.c">
+<fileinfo name="read_at.c">
</fileinfo>
-<fileinfo name="write_sh.c">
+<fileinfo name="iowait.c">
</fileinfo>
-<fileinfo name="read_sh.c">
+<fileinfo name="mpiu_greq.c">
</fileinfo>
-<fileinfo name="set_errh.c">
+<fileinfo name="get_group.c">
</fileinfo>
-<fileinfo name="get_posn_sh.c">
+<fileinfo name="read_alle.c">
</fileinfo>
-<fileinfo name="wr_atalle.c">
+<fileinfo name="get_bytoff.c">
</fileinfo>
-<fileinfo name="write_at.c">
+<fileinfo name="close.c">
</fileinfo>
-<fileinfo name="iowaitsome.c">
+<fileinfo name="mpir_cst_filesys.c">
</fileinfo>
-<fileinfo name="get_info.c">
-</fileinfo>
-<fileinfo name="read_atall.c">
+<fileinfo name="rd_atalle.c">
</fileinfo>
<fileinfo name="write.c">
</fileinfo>
-<fileinfo name="write_orde.c">
+<fileinfo name="read.c">
</fileinfo>
-<fileinfo name="seek_sh.c">
+<fileinfo name="mpiu_external32.c">
</fileinfo>
-<fileinfo name="fsync.c">
+<fileinfo name="write_atall.c">
</fileinfo>
-<fileinfo name="read_allb.c">
+<fileinfo name="iowaitsome.c">
</fileinfo>
-<fileinfo name="iwrite_at.c">
+<fileinfo name="read_all.c">
</fileinfo>
-<fileinfo name="iread_at.c">
+<fileinfo name="file_f2c.c">
</fileinfo>
-<fileinfo name="get_posn.c">
+<fileinfo name="fsync.c">
</fileinfo>
-<fileinfo name="get_view.c">
+<fileinfo name="iread_atall.c">
</fileinfo>
-<fileinfo name="iowaitall.c">
+<fileinfo name="iread_at.c">
</fileinfo>
-<fileinfo name="write_ordb.c">
+<fileinfo name="get_info.c">
</fileinfo>
-<fileinfo name="prealloc.c">
+<fileinfo name="write_at.c">
</fileinfo>
-<fileinfo name="file_f2c.c">
+<fileinfo name="get_posn.c">
</fileinfo>
-<fileinfo name="get_size.c">
+<fileinfo name="write_allb.c">
</fileinfo>
-<fileinfo name="iowaitany.c">
+<fileinfo name="read_sh.c">
</fileinfo>
-<fileinfo name="iotestany.c">
+<fileinfo name="set_info.c">
</fileinfo>
<fileinfo name="mpioprof.h">
</fileinfo>
-<fileinfo name="iotest.c">
-</fileinfo>
-<fileinfo name="write_all.c">
+<fileinfo name="iwrite.c">
</fileinfo>
<fileinfo name="ioreq_f2c.c">
</fileinfo>
-<fileinfo name="get_atom.c">
+<fileinfo name="iwrite_all.c">
</fileinfo>
-<fileinfo name="set_size.c">
+<fileinfo name="write_sh.c">
</fileinfo>
-<fileinfo name="write_alle.c">
+<fileinfo name="set_atom.c">
</fileinfo>
-<fileinfo name="mpiu_greq.c">
+<fileinfo name="seek.c">
</fileinfo>
-<fileinfo name="get_errh.c">
+<fileinfo name="read_ordb.c">
</fileinfo>
-<fileinfo name="rd_atalle.c">
+<fileinfo name="iowaitany.c">
</fileinfo>
-<fileinfo name="mpich_fileutil.c">
+<fileinfo name="wr_atalle.c">
</fileinfo>
-<fileinfo name="read_alle.c">
+<fileinfo name="prealloc.c">
</fileinfo>
-<fileinfo name="iread_atall.c">
+<fileinfo name="write_alle.c">
</fileinfo>
-<fileinfo name="close.c">
+<fileinfo name="get_extent.c">
</fileinfo>
-<fileinfo name="get_group.c">
+<fileinfo name="mpioimpl.h">
</fileinfo>
-<fileinfo name="set_view.c">
+<fileinfo name="get_atom.c">
</fileinfo>
-<fileinfo name="set_atom.c">
+<fileinfo name="register_datarep.c">
</fileinfo>
-<fileinfo name="ioreq_c2f.c">
+<fileinfo name="read_orde.c">
</fileinfo>
-<fileinfo name="rd_atallb.c">
+<fileinfo name="iowaitall.c">
</fileinfo>
-<fileinfo name="iwrite_all.c">
+<fileinfo name="iotestall.c">
</fileinfo>
-<fileinfo name="seek.c">
+<fileinfo name="set_size.c">
+</fileinfo>
+<fileinfo name="iwrite_sh.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/mpi-io/Makefile.mk b/src/mpi/romio/mpi-io/Makefile.mk
index d4d5a29..275cb98 100644
--- a/src/mpi/romio/mpi-io/Makefile.mk
+++ b/src/mpi/romio/mpi-io/Makefile.mk
@@ -77,7 +77,8 @@ romio_other_sources += \
mpi-io/mpich_fileutil.c \
mpi-io/mpir-mpioinit.c \
mpi-io/mpiu_greq.c \
- mpi-io/mpiu_external32.c
+ mpi-io/mpiu_external32.c \
+ mpi-io/mpir_cst_filesys.c
# helper variables for conditionally compiled sources
mpio_request_sources= \
diff --git a/src/mpi/romio/mpi-io/delete.c b/src/mpi/romio/mpi-io/delete.c
index 47b52a0..3272edc 100644
--- a/src/mpi/romio/mpi-io/delete.c
+++ b/src/mpi/romio/mpi-io/delete.c
@@ -46,7 +46,7 @@ int MPI_File_delete(ROMIO_CONST char *filename, MPI_Info info)
MPI_FILE_NULL, MPI_DATATYPE_NULL, -1);
#endif /* MPI_hpux */
- MPIU_UNREFERENCED_ARG(info);
+ MPL_UNREFERENCED_ARG(info);
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/fortran/.state-cache b/src/mpi/romio/mpi-io/fortran/.state-cache
index 89aef8f..5bf5a13 100644
--- a/src/mpi/romio/mpi-io/fortran/.state-cache
+++ b/src/mpi/romio/mpi-io/fortran/.state-cache
@@ -1,169 +1,169 @@
<dir>
-<file name="readf.c" info="1447123141"/>
-<file name="wr_atallef.c" info="1447123141"/>
-<file name="read_ordbf.c" info="1447123141"/>
-<file name="write_ordef.c" info="1447123141"/>
-<file name="set_viewf.c" info="1447123141"/>
-<file name="iwrite_shf.c" info="1447123141"/>
-<file name="set_sizef.c" info="1447123141"/>
-<file name="read_atf.c" info="1447123141"/>
-<file name="read_allef.c" info="1447123141"/>
-<file name="read_shf.c" info="1447123141"/>
-<file name="write_ordf.c" info="1447123141"/>
-<file name="get_errhf.c" info="1447123141"/>
-<file name="read_ordef.c" info="1447123141"/>
-<file name="get_atomf.c" info="1447123141"/>
-<file name="get_posn_shf.c" info="1447123141"/>
-<file name="read_allbf.c" info="1447123141"/>
-<file name="set_errhf.c" info="1447123141"/>
-<file name="closef.c" info="1447123141"/>
-<file name="set_infof.c" info="1447123141"/>
-<file name="read_ordf.c" info="1447123141"/>
-<file name="read_atallf.c" info="1447123141"/>
-<file name="iread_shf.c" info="1447123141"/>
-<file name="write_ordbf.c" info="1447123141"/>
-<file name="wr_atallbf.c" info="1447123141"/>
-<file name="write_allef.c" info="1447123141"/>
-<file name="get_viewf.c" info="1447123141"/>
-<file name="preallocf.c" info="1447123141"/>
-<file name="ireadf.c" info="1447123141"/>
-<file name="write_allbf.c" info="1447123141"/>
-<file name="get_amodef.c" info="1447123141"/>
-<file name="seekf.c" info="1447123141"/>
-<file name="write_atallf.c" info="1447123141"/>
-<file name="get_bytofff.c" info="1447123141"/>
-<file name="read_allf.c" info="1447123141"/>
-<file name="rd_atallef.c" info="1447123141"/>
-<file name="get_posnf.c" info="1447123141"/>
-<file name="get_sizef.c" info="1447123141"/>
-<file name="iotestf.c" info="1447123141"/>
-<file name="iwritef.c" info="1447123141"/>
-<file name="iwrite_atf.c" info="1447123141"/>
-<file name="set_atomf.c" info="1447123141"/>
-<file name="openf.c" info="1447123141"/>
-<file name="fsyncf.c" info="1447123141"/>
-<file name="rd_atallbf.c" info="1447123141"/>
-<file name="deletef.c" info="1447123141"/>
-<file name="iread_atf.c" info="1447123141"/>
-<file name="write_shf.c" info="1447123141"/>
-<file name="write_allf.c" info="1447123141"/>
-<file name="writef.c" info="1447123141"/>
-<file name="iowaitf.c" info="1447123141"/>
-<file name="get_infof.c" info="1447123141"/>
-<file name="get_extentf.c" info="1447123141"/>
-<file name="seek_shf.c" info="1447123141"/>
-<file name="write_atf.c" info="1447123141"/>
-<file name="get_groupf.c" info="1447123141"/>
+<file name="preallocf.c" info="1478973152"/>
+<file name="seek_shf.c" info="1478973152"/>
+<file name="get_infof.c" info="1478973152"/>
+<file name="read_allf.c" info="1478973152"/>
+<file name="iwrite_shf.c" info="1478973152"/>
+<file name="iread_atf.c" info="1478973152"/>
+<file name="write_atf.c" info="1478973152"/>
+<file name="deletef.c" info="1478973152"/>
+<file name="get_posn_shf.c" info="1478973152"/>
+<file name="get_posnf.c" info="1478973152"/>
+<file name="write_allf.c" info="1478973152"/>
+<file name="write_allbf.c" info="1478973152"/>
+<file name="write_allef.c" info="1478973152"/>
+<file name="seekf.c" info="1478973152"/>
+<file name="read_ordf.c" info="1478973152"/>
+<file name="openf.c" info="1478973152"/>
+<file name="read_allef.c" info="1478973152"/>
+<file name="iowaitf.c" info="1478973152"/>
+<file name="get_sizef.c" info="1478973152"/>
+<file name="get_bytofff.c" info="1478973152"/>
+<file name="write_atallf.c" info="1478973152"/>
+<file name="set_infof.c" info="1478973152"/>
+<file name="wr_atallbf.c" info="1478973152"/>
+<file name="readf.c" info="1478973152"/>
+<file name="rd_atallef.c" info="1478973152"/>
+<file name="rd_atallbf.c" info="1478973152"/>
+<file name="fsyncf.c" info="1478973152"/>
+<file name="read_shf.c" info="1478973152"/>
+<file name="ireadf.c" info="1478973152"/>
+<file name="closef.c" info="1478973152"/>
+<file name="write_ordef.c" info="1478973152"/>
+<file name="get_extentf.c" info="1478973152"/>
+<file name="write_ordf.c" info="1478973152"/>
+<file name="set_sizef.c" info="1478973152"/>
+<file name="get_groupf.c" info="1478973152"/>
+<file name="read_ordbf.c" info="1478973152"/>
+<file name="set_viewf.c" info="1478973152"/>
+<file name="get_errhf.c" info="1478973152"/>
+<file name="wr_atallef.c" info="1478973152"/>
+<file name="read_atallf.c" info="1478973152"/>
+<file name="get_viewf.c" info="1478973152"/>
+<file name="get_amodef.c" info="1478973152"/>
+<file name="set_atomf.c" info="1478973152"/>
+<file name="iotestf.c" info="1478973152"/>
+<file name="write_shf.c" info="1478973152"/>
+<file name="read_atf.c" info="1478973152"/>
+<file name="iwrite_atf.c" info="1478973152"/>
+<file name="iwritef.c" info="1478973152"/>
+<file name="writef.c" info="1478973152"/>
+<file name="read_ordef.c" info="1478973152"/>
+<file name="set_errhf.c" info="1478973152"/>
+<file name="iread_shf.c" info="1478973152"/>
+<file name="write_ordbf.c" info="1478973152"/>
+<file name="get_atomf.c" info="1478973152"/>
+<file name="read_allbf.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="readf.c">
-</fileinfo>
-<fileinfo name="wr_atallef.c">
+<fileinfo name="preallocf.c">
</fileinfo>
-<fileinfo name="read_ordbf.c">
+<fileinfo name="seek_shf.c">
</fileinfo>
-<fileinfo name="write_ordef.c">
+<fileinfo name="get_infof.c">
</fileinfo>
-<fileinfo name="set_viewf.c">
+<fileinfo name="read_allf.c">
</fileinfo>
<fileinfo name="iwrite_shf.c">
</fileinfo>
-<fileinfo name="set_sizef.c">
+<fileinfo name="iread_atf.c">
</fileinfo>
-<fileinfo name="read_atf.c">
+<fileinfo name="write_atf.c">
</fileinfo>
-<fileinfo name="read_allef.c">
+<fileinfo name="deletef.c">
</fileinfo>
-<fileinfo name="read_shf.c">
+<fileinfo name="get_posn_shf.c">
</fileinfo>
-<fileinfo name="write_ordf.c">
+<fileinfo name="get_posnf.c">
</fileinfo>
-<fileinfo name="get_errhf.c">
+<fileinfo name="write_allf.c">
</fileinfo>
-<fileinfo name="read_ordef.c">
+<fileinfo name="write_allbf.c">
</fileinfo>
-<fileinfo name="get_atomf.c">
+<fileinfo name="write_allef.c">
</fileinfo>
-<fileinfo name="get_posn_shf.c">
+<fileinfo name="seekf.c">
</fileinfo>
-<fileinfo name="read_allbf.c">
+<fileinfo name="read_ordf.c">
</fileinfo>
-<fileinfo name="set_errhf.c">
+<fileinfo name="openf.c">
</fileinfo>
-<fileinfo name="closef.c">
+<fileinfo name="read_allef.c">
</fileinfo>
-<fileinfo name="set_infof.c">
+<fileinfo name="iowaitf.c">
</fileinfo>
-<fileinfo name="read_ordf.c">
+<fileinfo name="get_sizef.c">
</fileinfo>
-<fileinfo name="read_atallf.c">
+<fileinfo name="get_bytofff.c">
</fileinfo>
-<fileinfo name="iread_shf.c">
+<fileinfo name="write_atallf.c">
</fileinfo>
-<fileinfo name="write_ordbf.c">
+<fileinfo name="set_infof.c">
</fileinfo>
<fileinfo name="wr_atallbf.c">
</fileinfo>
-<fileinfo name="write_allef.c">
-</fileinfo>
-<fileinfo name="get_viewf.c">
+<fileinfo name="readf.c">
</fileinfo>
-<fileinfo name="preallocf.c">
+<fileinfo name="rd_atallef.c">
</fileinfo>
-<fileinfo name="ireadf.c">
+<fileinfo name="rd_atallbf.c">
</fileinfo>
-<fileinfo name="write_allbf.c">
+<fileinfo name="fsyncf.c">
</fileinfo>
-<fileinfo name="get_amodef.c">
+<fileinfo name="read_shf.c">
</fileinfo>
-<fileinfo name="seekf.c">
+<fileinfo name="ireadf.c">
</fileinfo>
-<fileinfo name="write_atallf.c">
+<fileinfo name="closef.c">
</fileinfo>
-<fileinfo name="get_bytofff.c">
+<fileinfo name="write_ordef.c">
</fileinfo>
-<fileinfo name="read_allf.c">
+<fileinfo name="get_extentf.c">
</fileinfo>
-<fileinfo name="rd_atallef.c">
+<fileinfo name="write_ordf.c">
</fileinfo>
-<fileinfo name="get_posnf.c">
+<fileinfo name="set_sizef.c">
</fileinfo>
-<fileinfo name="get_sizef.c">
+<fileinfo name="get_groupf.c">
</fileinfo>
-<fileinfo name="iotestf.c">
+<fileinfo name="read_ordbf.c">
</fileinfo>
-<fileinfo name="iwritef.c">
+<fileinfo name="set_viewf.c">
</fileinfo>
-<fileinfo name="iwrite_atf.c">
+<fileinfo name="get_errhf.c">
</fileinfo>
-<fileinfo name="set_atomf.c">
+<fileinfo name="wr_atallef.c">
</fileinfo>
-<fileinfo name="openf.c">
+<fileinfo name="read_atallf.c">
</fileinfo>
-<fileinfo name="fsyncf.c">
+<fileinfo name="get_viewf.c">
</fileinfo>
-<fileinfo name="rd_atallbf.c">
+<fileinfo name="get_amodef.c">
</fileinfo>
-<fileinfo name="deletef.c">
+<fileinfo name="set_atomf.c">
</fileinfo>
-<fileinfo name="iread_atf.c">
+<fileinfo name="iotestf.c">
</fileinfo>
<fileinfo name="write_shf.c">
</fileinfo>
-<fileinfo name="write_allf.c">
+<fileinfo name="read_atf.c">
+</fileinfo>
+<fileinfo name="iwrite_atf.c">
+</fileinfo>
+<fileinfo name="iwritef.c">
</fileinfo>
<fileinfo name="writef.c">
</fileinfo>
-<fileinfo name="iowaitf.c">
+<fileinfo name="read_ordef.c">
</fileinfo>
-<fileinfo name="get_infof.c">
+<fileinfo name="set_errhf.c">
</fileinfo>
-<fileinfo name="get_extentf.c">
+<fileinfo name="iread_shf.c">
</fileinfo>
-<fileinfo name="seek_shf.c">
+<fileinfo name="write_ordbf.c">
</fileinfo>
-<fileinfo name="write_atf.c">
+<fileinfo name="get_atomf.c">
</fileinfo>
-<fileinfo name="get_groupf.c">
+<fileinfo name="read_allbf.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/mpi-io/fortran/get_extentf.c b/src/mpi/romio/mpi-io/fortran/get_extentf.c
index 9a11d3c..c39845d 100644
--- a/src/mpi/romio/mpi-io/fortran/get_extentf.c
+++ b/src/mpi/romio/mpi-io/fortran/get_extentf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_get_type_extent_( MPI_Fint *, MPI_Fin
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_get_type_extent_(MPI_Fint *fh,MPI_Fint *datatype,
MPI_Fint *extent, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/get_groupf.c b/src/mpi/romio/mpi-io/fortran/get_groupf.c
index bb8c9a9..4e8b8ba 100644
--- a/src/mpi/romio/mpi-io/fortran/get_groupf.c
+++ b/src/mpi/romio/mpi-io/fortran/get_groupf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_get_group_( MPI_Fint *, MPI_Group*, M
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_get_group_(MPI_Fint *fh, MPI_Fint *group, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/get_viewf.c b/src/mpi/romio/mpi-io/fortran/get_viewf.c
index 8a4bc3d..465cd9a 100644
--- a/src/mpi/romio/mpi-io/fortran/get_viewf.c
+++ b/src/mpi/romio/mpi-io/fortran/get_viewf.c
@@ -92,7 +92,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_get_view_( MPI_Fint *, MPI_Offset*, M
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_get_view_(MPI_Fint *fh,MPI_Offset *disp,MPI_Fint *etype,
MPI_Fint *filetype,char *datarep, MPI_Fint *ierr, int str_len );
diff --git a/src/mpi/romio/mpi-io/fortran/iread_atf.c b/src/mpi/romio/mpi-io/fortran/iread_atf.c
index c6a687d..00729cf 100644
--- a/src/mpi/romio/mpi-io/fortran/iread_atf.c
+++ b/src/mpi/romio/mpi-io/fortran/iread_atf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_iread_at_( MPI_Fint *, MPI_Offset *,
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_iread_at_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype,
diff --git a/src/mpi/romio/mpi-io/fortran/iread_shf.c b/src/mpi/romio/mpi-io/fortran/iread_shf.c
index 84dc375..382bb29 100644
--- a/src/mpi/romio/mpi-io/fortran/iread_shf.c
+++ b/src/mpi/romio/mpi-io/fortran/iread_shf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_iread_shared_( MPI_Fint *, void*, MPI
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_iread_shared_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Fint *request, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/ireadf.c b/src/mpi/romio/mpi-io/fortran/ireadf.c
index ae9fbaf..09c9f56 100644
--- a/src/mpi/romio/mpi-io/fortran/ireadf.c
+++ b/src/mpi/romio/mpi-io/fortran/ireadf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_iread_( MPI_Fint *, void*, MPI_Fint *
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_iread_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Fint *request, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/iwrite_atf.c b/src/mpi/romio/mpi-io/fortran/iwrite_atf.c
index b326fc3..affdaef 100644
--- a/src/mpi/romio/mpi-io/fortran/iwrite_atf.c
+++ b/src/mpi/romio/mpi-io/fortran/iwrite_atf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_iwrite_at_( MPI_Fint *, MPI_Offset *,
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_iwrite_at_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype,
diff --git a/src/mpi/romio/mpi-io/fortran/iwrite_shf.c b/src/mpi/romio/mpi-io/fortran/iwrite_shf.c
index 90ea687..a10f700 100644
--- a/src/mpi/romio/mpi-io/fortran/iwrite_shf.c
+++ b/src/mpi/romio/mpi-io/fortran/iwrite_shf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_iwrite_shared_( MPI_Fint *, void*, MP
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_iwrite_shared_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Fint *request, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/iwritef.c b/src/mpi/romio/mpi-io/fortran/iwritef.c
index 4410c01..4200fd9 100644
--- a/src/mpi/romio/mpi-io/fortran/iwritef.c
+++ b/src/mpi/romio/mpi-io/fortran/iwritef.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_iwrite_( MPI_Fint *, void*, MPI_Fint
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_iwrite_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Fint *request, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/openf.c b/src/mpi/romio/mpi-io/fortran/openf.c
index ea1a5d1..5d02ca0 100644
--- a/src/mpi/romio/mpi-io/fortran/openf.c
+++ b/src/mpi/romio/mpi-io/fortran/openf.c
@@ -92,7 +92,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_open_( MPI_Fint *, char * FORT_MIXED_
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_open_(MPI_Fint *comm,char *filename,MPI_Fint *amode,
MPI_Fint *info, MPI_Fint *fh, MPI_Fint *ierr, int str_len );
diff --git a/src/mpi/romio/mpi-io/fortran/rd_atallbf.c b/src/mpi/romio/mpi-io/fortran/rd_atallbf.c
index 5fff4e9..e548cfc 100644
--- a/src/mpi/romio/mpi-io/fortran/rd_atallbf.c
+++ b/src/mpi/romio/mpi-io/fortran/rd_atallbf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_at_all_begin_( MPI_Fint *, MPI_O
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_at_all_begin_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/read_allbf.c b/src/mpi/romio/mpi-io/fortran/read_allbf.c
index 5708a03..665d47f 100644
--- a/src/mpi/romio/mpi-io/fortran/read_allbf.c
+++ b/src/mpi/romio/mpi-io/fortran/read_allbf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_all_begin_( MPI_Fint *, void*, M
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_all_begin_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/read_allf.c b/src/mpi/romio/mpi-io/fortran/read_allf.c
index 99e1229..725f58a 100644
--- a/src/mpi/romio/mpi-io/fortran/read_allf.c
+++ b/src/mpi/romio/mpi-io/fortran/read_allf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_all_( MPI_Fint *, void*, MPI_Fin
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_all_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/read_atallf.c b/src/mpi/romio/mpi-io/fortran/read_atallf.c
index b9f30a0..8ef2764 100644
--- a/src/mpi/romio/mpi-io/fortran/read_atallf.c
+++ b/src/mpi/romio/mpi-io/fortran/read_atallf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_at_all_( MPI_Fint *, MPI_Offset
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_at_all_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype,
diff --git a/src/mpi/romio/mpi-io/fortran/read_atf.c b/src/mpi/romio/mpi-io/fortran/read_atf.c
index 2602e39..646ec5c 100644
--- a/src/mpi/romio/mpi-io/fortran/read_atf.c
+++ b/src/mpi/romio/mpi-io/fortran/read_atf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_at_( MPI_Fint *, MPI_Offset *, v
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_at_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/read_ordbf.c b/src/mpi/romio/mpi-io/fortran/read_ordbf.c
index 7438917..9dcff02 100644
--- a/src/mpi/romio/mpi-io/fortran/read_ordbf.c
+++ b/src/mpi/romio/mpi-io/fortran/read_ordbf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_ordered_begin_( MPI_Fint *, void
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_ordered_begin_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/read_ordf.c b/src/mpi/romio/mpi-io/fortran/read_ordf.c
index a45ae12..428ce03 100644
--- a/src/mpi/romio/mpi-io/fortran/read_ordf.c
+++ b/src/mpi/romio/mpi-io/fortran/read_ordf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_ordered_( MPI_Fint *, void*, MPI
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_ordered_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/read_shf.c b/src/mpi/romio/mpi-io/fortran/read_shf.c
index 937e54f..7132ef2 100644
--- a/src/mpi/romio/mpi-io/fortran/read_shf.c
+++ b/src/mpi/romio/mpi-io/fortran/read_shf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_shared_( MPI_Fint *, void*, MPI_
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_shared_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/readf.c b/src/mpi/romio/mpi-io/fortran/readf.c
index c802739..45664a9 100644
--- a/src/mpi/romio/mpi-io/fortran/readf.c
+++ b/src/mpi/romio/mpi-io/fortran/readf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_read_( MPI_Fint *, void*, MPI_Fint *,
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_read_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/set_viewf.c b/src/mpi/romio/mpi-io/fortran/set_viewf.c
index 97151d9..9d75ab1 100644
--- a/src/mpi/romio/mpi-io/fortran/set_viewf.c
+++ b/src/mpi/romio/mpi-io/fortran/set_viewf.c
@@ -92,7 +92,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_set_view_( MPI_Fint *, MPI_Offset *,
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_set_view_(MPI_Fint *fh,MPI_Offset *disp,MPI_Fint *etype,
MPI_Fint *filetype,char *datarep,MPI_Fint *info, MPI_Fint *ierr,
diff --git a/src/mpi/romio/mpi-io/fortran/wr_atallbf.c b/src/mpi/romio/mpi-io/fortran/wr_atallbf.c
index 836dd37..af880f0 100644
--- a/src/mpi/romio/mpi-io/fortran/wr_atallbf.c
+++ b/src/mpi/romio/mpi-io/fortran/wr_atallbf.c
@@ -90,7 +90,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_at_all_begin_( MPI_Fint *, MPI_
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_at_all_begin_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/write_allbf.c b/src/mpi/romio/mpi-io/fortran/write_allbf.c
index e47d3cd..e873787 100644
--- a/src/mpi/romio/mpi-io/fortran/write_allbf.c
+++ b/src/mpi/romio/mpi-io/fortran/write_allbf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_all_begin_( MPI_Fint *, void*,
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_all_begin_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/write_allf.c b/src/mpi/romio/mpi-io/fortran/write_allf.c
index bddcac1..e6e9646 100644
--- a/src/mpi/romio/mpi-io/fortran/write_allf.c
+++ b/src/mpi/romio/mpi-io/fortran/write_allf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_all_( MPI_Fint *, void*, MPI_Fi
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_all_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/write_atallf.c b/src/mpi/romio/mpi-io/fortran/write_atallf.c
index 030e7ae..cf68edf 100644
--- a/src/mpi/romio/mpi-io/fortran/write_atallf.c
+++ b/src/mpi/romio/mpi-io/fortran/write_atallf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_at_all_( MPI_Fint *, MPI_Offset
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_at_all_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype,
diff --git a/src/mpi/romio/mpi-io/fortran/write_atf.c b/src/mpi/romio/mpi-io/fortran/write_atf.c
index 8ba429d..984b4c6 100644
--- a/src/mpi/romio/mpi-io/fortran/write_atf.c
+++ b/src/mpi/romio/mpi-io/fortran/write_atf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_at_( MPI_Fint *, MPI_Offset *,
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_at_(MPI_Fint *fh,MPI_Offset *offset,void *buf,
MPI_Fint *count,MPI_Fint *datatype,
diff --git a/src/mpi/romio/mpi-io/fortran/write_ordbf.c b/src/mpi/romio/mpi-io/fortran/write_ordbf.c
index 41b9acc..99959c8 100644
--- a/src/mpi/romio/mpi-io/fortran/write_ordbf.c
+++ b/src/mpi/romio/mpi-io/fortran/write_ordbf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_ordered_begin_( MPI_Fint *, voi
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_ordered_begin_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/write_ordf.c b/src/mpi/romio/mpi-io/fortran/write_ordf.c
index fe96406..0665605 100644
--- a/src/mpi/romio/mpi-io/fortran/write_ordf.c
+++ b/src/mpi/romio/mpi-io/fortran/write_ordf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_ordered_( MPI_Fint *, void*, MP
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_ordered_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/write_shf.c b/src/mpi/romio/mpi-io/fortran/write_shf.c
index 30d80e0..2452361 100644
--- a/src/mpi/romio/mpi-io/fortran/write_shf.c
+++ b/src/mpi/romio/mpi-io/fortran/write_shf.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_shared_( MPI_Fint *, void*, MPI
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_shared_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fortran/writef.c b/src/mpi/romio/mpi-io/fortran/writef.c
index 9b07ba0..63158fb 100644
--- a/src/mpi/romio/mpi-io/fortran/writef.c
+++ b/src/mpi/romio/mpi-io/fortran/writef.c
@@ -89,7 +89,7 @@ extern FORTRAN_API void FORT_CALL mpi_file_write_( MPI_Fint *, void*, MPI_Fint *
#endif
#endif
-#if defined(MPIHP) || defined(MPILAM)
+#if defined(MPIHP)
/* Prototype to keep compiler happy */
void mpi_file_write_(MPI_Fint *fh,void *buf,MPI_Fint *count,
MPI_Fint *datatype,MPI_Status *status, MPI_Fint *ierr );
diff --git a/src/mpi/romio/mpi-io/fsync.c b/src/mpi/romio/mpi-io/fsync.c
index 7b2ef12..00c9499 100644
--- a/src/mpi/romio/mpi-io/fsync.c
+++ b/src/mpi/romio/mpi-io/fsync.c
@@ -49,7 +49,7 @@ int MPI_File_sync(MPI_File fh)
adio_fh = MPIO_File_resolve(fh);
/* --BEGIN ERROR HANDLING-- */
- if ((adio_fh <= (MPI_File) 0) || ((adio_fh)->cookie != ADIOI_FILE_COOKIE))
+ if ((adio_fh == NULL) || ((adio_fh)->cookie != ADIOI_FILE_COOKIE))
{
error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
myname, __LINE__, MPI_ERR_ARG,
diff --git a/src/mpi/romio/mpi-io/get_errh.c b/src/mpi/romio/mpi-io/get_errh.c
index 7962e33..d369c83 100644
--- a/src/mpi/romio/mpi-io/get_errh.c
+++ b/src/mpi/romio/mpi-io/get_errh.c
@@ -42,7 +42,6 @@ int MPI_File_get_errhandler(MPI_File mpi_fh, MPI_Errhandler *errhandler)
int error_code = MPI_SUCCESS;
ADIO_File fh;
static char myname[] = "MPI_FILE_GET_ERRHANDLER";
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/get_view.c b/src/mpi/romio/mpi-io/get_view.c
index 46b0926..946905b 100644
--- a/src/mpi/romio/mpi-io/get_view.c
+++ b/src/mpi/romio/mpi-io/get_view.c
@@ -25,9 +25,6 @@ int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Da
#define MPIO_BUILD_PROFILING
#include "mpioprof.h"
#endif
-#ifdef MPISGI
-#include "mpisgi2.h"
-#endif
/*@
MPI_File_get_view - Returns the file view
@@ -59,7 +56,7 @@ int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype,
/* --BEGIN ERROR HANDLING-- */
MPIO_CHECK_FILE_HANDLE(adio_fh, myname, error_code);
- if (datarep <= (char *) 0)
+ if (datarep == NULL)
{
error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
myname, __LINE__, MPI_ERR_ARG,
@@ -78,7 +75,7 @@ int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype,
else {
/* FIXME: It is wrong to use MPI_Type_contiguous; the user could choose to
re-implement MPI_Type_contiguous in an unexpected way. Either use
- MPIR_Barrier_impl as in MPICH or PMPI_Type_contiguous */
+ MPID_Barrier as in MPICH or PMPI_Type_contiguous */
MPI_Type_contiguous(1, adio_fh->etype, ©_etype);
/* FIXME: Ditto for MPI_Type_commit - use NMPI or PMPI */
diff --git a/src/mpi/romio/mpi-io/glue/.state-cache b/src/mpi/romio/mpi-io/glue/.state-cache
index 286d4a0..6f53d12 100644
--- a/src/mpi/romio/mpi-io/glue/.state-cache
+++ b/src/mpi/romio/mpi-io/glue/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="large_count.c" info="1447123141"/>
+<file name="large_count.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="large_count.c">
diff --git a/src/mpi/romio/mpi-io/glue/default/.state-cache b/src/mpi/romio/mpi-io/glue/default/.state-cache
index 28ae6c3..b39bc6a 100644
--- a/src/mpi/romio/mpi-io/glue/default/.state-cache
+++ b/src/mpi/romio/mpi-io/glue/default/.state-cache
@@ -1,10 +1,10 @@
<dir>
-<file name="mpio_file.c" info="1447123141"/>
-<file name="mpio_err.c" info="1447123141"/>
+<file name="mpio_err.c" info="1478973152"/>
+<file name="mpio_file.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpio_file.c">
-</fileinfo>
<fileinfo name="mpio_err.c">
</fileinfo>
+<fileinfo name="mpio_file.c">
+</fileinfo>
</data>
diff --git a/src/mpi/romio/mpi-io/glue/default/mpio_err.c b/src/mpi/romio/mpi-io/glue/default/mpio_err.c
index fbfc8a2..648b0e0 100644
--- a/src/mpi/romio/mpi-io/glue/default/mpio_err.c
+++ b/src/mpi/romio/mpi-io/glue/default/mpio_err.c
@@ -26,9 +26,9 @@ int MPIO_Err_create_code(int lastcode, int fatal, const char fcname[],
buf = (char *) ADIOI_Malloc(1024);
if (buf != NULL) {
- idx += ADIOI_Snprintf(buf, 1023, "%s (line %d): ", fcname, line);
+ idx += MPL_snprintf(buf, 1023, "%s (line %d): ", fcname, line);
if (specific_msg == NULL) {
- ADIOI_Snprintf(&buf[idx], 1023 - idx, "%s\n", generic_msg);
+ MPL_snprintf(&buf[idx], 1023 - idx, "%s\n", generic_msg);
}
else {
va_start(Argp, specific_msg);
diff --git a/src/mpi/romio/mpi-io/glue/default/mpio_file.c b/src/mpi/romio/mpi-io/glue/default/mpio_file.c
index 7a43b01..38222f7 100644
--- a/src/mpi/romio/mpi-io/glue/default/mpio_file.c
+++ b/src/mpi/romio/mpi-io/glue/default/mpio_file.c
@@ -66,7 +66,7 @@ MPI_Fint MPIO_File_c2f(MPI_File fh)
#else
int i;
- if ((fh <= (MPI_File) 0) || (fh->cookie != ADIOI_FILE_COOKIE))
+ if ((fh == NULL) || (fh->cookie != ADIOI_FILE_COOKIE))
return (MPI_Fint) 0;
if (!ADIOI_Ftable) {
ADIOI_Ftable_max = 1024;
diff --git a/src/mpi/romio/mpi-io/glue/mpich/.state-cache b/src/mpi/romio/mpi-io/glue/mpich/.state-cache
index 28ae6c3..49c15c9 100644
--- a/src/mpi/romio/mpi-io/glue/mpich/.state-cache
+++ b/src/mpi/romio/mpi-io/glue/mpich/.state-cache
@@ -1,6 +1,6 @@
<dir>
-<file name="mpio_file.c" info="1447123141"/>
-<file name="mpio_err.c" info="1447123141"/>
+<file name="mpio_file.c" info="1478973152"/>
+<file name="mpio_err.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="mpio_file.c">
diff --git a/src/mpi/romio/mpi-io/glue/mpich/mpio_err.c b/src/mpi/romio/mpi-io/glue/mpich/mpio_err.c
index 520ba1a..83046bf 100644
--- a/src/mpi/romio/mpi-io/glue/mpich/mpio_err.c
+++ b/src/mpi/romio/mpi-io/glue/mpich/mpio_err.c
@@ -9,25 +9,7 @@
#include "mpioimpl.h"
#include "adio_extern.h"
-
-/* MPICH error handling implementation */
-/* FIXME: These external prototypes should be included from
- mpich/src/include/mpiext.h */
-int MPIR_Err_create_code_valist(int, int, const char [], int, int,
- const char [], const char [], va_list );
-int MPIR_Err_is_fatal(int);
-
-void MPIR_Get_file_error_routine( MPI_Errhandler,
- void (**)(MPI_File *, int *, ...),
- int * );
-int MPIR_File_call_cxx_errhandler( MPI_File *, int *,
- void (*)(MPI_File *, int *, ... ) );
-
-typedef int (* MPIR_Err_get_class_string_func_t)(int error, char *str, int length);
-void MPIR_Err_get_string( int, char *, int, MPIR_Err_get_class_string_func_t );
-
-struct MPID_Comm;
-int MPID_Abort(struct MPID_Comm *comm, int mpi_errno, int exit_code, const char *error_msg);
+#include "mpir_ext.h"
int MPIO_Err_create_code(int lastcode, int fatal, const char fcname[],
int line, int error_class, const char generic_msg[],
@@ -92,7 +74,7 @@ int MPIO_Err_return_file(MPI_File mpi_fh, int error_code)
/* --BEGIN ERROR HANDLING-- */
if (MPIR_Err_is_fatal(error_code) || kind == 0)
{
- ADIOI_Snprintf(error_msg, 4096, "I/O error: ");
+ MPL_snprintf(error_msg, 4096, "I/O error: ");
len = (int)strlen(error_msg);
MPIR_Err_get_string(error_code, &error_msg[len], 4096-len, NULL);
MPID_Abort(NULL, MPI_SUCCESS, error_code, error_msg);
diff --git a/src/mpi/romio/mpi-io/glue/mpich/mpio_file.c b/src/mpi/romio/mpi-io/glue/mpich/mpio_file.c
index 6f6c902..a5e54a7 100644
--- a/src/mpi/romio/mpi-io/glue/mpich/mpio_file.c
+++ b/src/mpi/romio/mpi-io/glue/mpich/mpio_file.c
@@ -63,7 +63,7 @@ MPI_Fint MPIO_File_c2f(MPI_File fh)
#else
int i;
- if ((fh <= (MPI_File) 0) || (fh->cookie != ADIOI_FILE_COOKIE))
+ if ((fh == NULL) || (fh->cookie != ADIOI_FILE_COOKIE))
return (MPI_Fint) 0;
if (fh->fortran_handle != -1)
diff --git a/src/mpi/romio/mpi-io/glue/openmpi/.state-cache b/src/mpi/romio/mpi-io/glue/openmpi/.state-cache
index d33d606..b39bc6a 100644
--- a/src/mpi/romio/mpi-io/glue/openmpi/.state-cache
+++ b/src/mpi/romio/mpi-io/glue/openmpi/.state-cache
@@ -1,6 +1,6 @@
<dir>
-<file name="mpio_err.c" info="1447123141"/>
-<file name="mpio_file.c" info="1447123141"/>
+<file name="mpio_err.c" info="1478973152"/>
+<file name="mpio_file.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="mpio_err.c">
diff --git a/src/mpi/romio/mpi-io/glue/openmpi/mpio_err.c b/src/mpi/romio/mpi-io/glue/openmpi/mpio_err.c
index 2dddaee..dd5f023 100644
--- a/src/mpi/romio/mpi-io/glue/openmpi/mpio_err.c
+++ b/src/mpi/romio/mpi-io/glue/openmpi/mpio_err.c
@@ -26,9 +26,9 @@ int MPIO_Err_create_code(int lastcode, int fatal, const char fcname[],
buf = (char *) ADIOI_Malloc(1024);
if (buf != NULL) {
- idx += ADIOI_Snprintf(buf, 1023, "%s (line %d): ", fcname, line);
+ idx += MPL_snprintf(buf, 1023, "%s (line %d): ", fcname, line);
if (specific_msg == NULL) {
- ADIOI_Snprintf(&buf[idx], 1023 - idx, "%s\n", generic_msg);
+ MPL_snprintf(&buf[idx], 1023 - idx, "%s\n", generic_msg);
}
else {
va_start(Argp, specific_msg);
diff --git a/src/mpi/romio/mpi-io/glue/openmpi/mpio_file.c b/src/mpi/romio/mpi-io/glue/openmpi/mpio_file.c
index e3ac2e7..f0b6d51 100644
--- a/src/mpi/romio/mpi-io/glue/openmpi/mpio_file.c
+++ b/src/mpi/romio/mpi-io/glue/openmpi/mpio_file.c
@@ -68,7 +68,7 @@ MPI_Fint MPIO_File_c2f(MPI_File fh)
#else
int i;
- if ((fh <= (MPI_File) 0) || (fh->cookie != ADIOI_FILE_COOKIE))
+ if ((fh == NULL) || (fh->cookie != ADIOI_FILE_COOKIE))
return (MPI_Fint) 0;
if (!ADIOI_Ftable) {
ADIOI_Ftable_max = 1024;
diff --git a/src/mpi/romio/mpi-io/ioreq_c2f.c b/src/mpi/romio/mpi-io/ioreq_c2f.c
index d49ebcd..3e335f4 100644
--- a/src/mpi/romio/mpi-io/ioreq_c2f.c
+++ b/src/mpi/romio/mpi-io/ioreq_c2f.c
@@ -47,7 +47,6 @@ MPI_Fint MPIO_Request_c2f(MPIO_Request request)
return (MPI_Fint) request;
#else
int i;
- MPID_THREADPRIV_DECL;
/* We can make this test outside of the GLOBAL mutex because it does
not access any shared data */
diff --git a/src/mpi/romio/mpi-io/ioreq_f2c.c b/src/mpi/romio/mpi-io/ioreq_f2c.c
index a58e4a2..8e33b4e 100644
--- a/src/mpi/romio/mpi-io/ioreq_f2c.c
+++ b/src/mpi/romio/mpi-io/ioreq_f2c.c
@@ -43,7 +43,6 @@ MPIO_Request MPIO_Request_f2c(MPI_Fint request)
{
int error_code;
static char myname[] = "MPIO_REQUEST_F2C";
- MPID_THREADPRIV_DECL;
#ifndef INT_LT_POINTER
return (MPIO_Request) request;
diff --git a/src/mpi/romio/mpi-io/iotest.c b/src/mpi/romio/mpi-io/iotest.c
index 42bc8a3..8fed7ee 100644
--- a/src/mpi/romio/mpi-io/iotest.c
+++ b/src/mpi/romio/mpi-io/iotest.c
@@ -47,7 +47,6 @@ int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status)
{
int error_code;
static char myname[] = "MPIO_TEST";
- MPID_THREADPRIV_DECL;
#ifdef MPI_hpux
int fl_xmpi;
diff --git a/src/mpi/romio/mpi-io/iotestall.c b/src/mpi/romio/mpi-io/iotestall.c
index 24dd8b2..d267336 100644
--- a/src/mpi/romio/mpi-io/iotestall.c
+++ b/src/mpi/romio/mpi-io/iotestall.c
@@ -32,7 +32,6 @@ int MPIO_Testall(int count, MPIO_Request requests[], int *flag,
MPI_Status statuses[])
{
int done, i, err;
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
if (count == 1) {
diff --git a/src/mpi/romio/mpi-io/iotestany.c b/src/mpi/romio/mpi-io/iotestany.c
index eac6197..5cd1e41 100644
--- a/src/mpi/romio/mpi-io/iotestany.c
+++ b/src/mpi/romio/mpi-io/iotestany.c
@@ -32,7 +32,6 @@ int MPIO_Testany(int count, MPIO_Request requests[], int *index,
int *flag, MPI_Status *status)
{
int i, err;
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/iotestsome.c b/src/mpi/romio/mpi-io/iotestsome.c
index a7d7d4c..a09de64 100644
--- a/src/mpi/romio/mpi-io/iotestsome.c
+++ b/src/mpi/romio/mpi-io/iotestsome.c
@@ -33,7 +33,6 @@ int MPIO_Testsome(int count, MPIO_Request requests[], int *outcount,
{
int i, err;
int flag;
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/iowait.c b/src/mpi/romio/mpi-io/iowait.c
index 4d383c8..e5c961e 100644
--- a/src/mpi/romio/mpi-io/iowait.c
+++ b/src/mpi/romio/mpi-io/iowait.c
@@ -46,7 +46,6 @@ int MPIO_Wait(MPIO_Request *request, MPI_Status *status)
{
int error_code;
static char myname[] = "MPIO_WAIT";
- MPID_THREADPRIV_DECL;
#ifdef MPI_hpux
int fl_xmpi;
diff --git a/src/mpi/romio/mpi-io/iowaitall.c b/src/mpi/romio/mpi-io/iowaitall.c
index 3e5e5b8..455736a 100644
--- a/src/mpi/romio/mpi-io/iowaitall.c
+++ b/src/mpi/romio/mpi-io/iowaitall.c
@@ -31,7 +31,6 @@
int MPIO_Waitall( int count, MPIO_Request requests[], MPI_Status statuses[] )
{
int notdone, i, flag, err;
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/iowaitany.c b/src/mpi/romio/mpi-io/iowaitany.c
index 747aa5b..c54d459 100644
--- a/src/mpi/romio/mpi-io/iowaitany.c
+++ b/src/mpi/romio/mpi-io/iowaitany.c
@@ -32,7 +32,6 @@ int MPIO_Waitany(int count, MPIO_Request requests[], int *index,
MPI_Status *status)
{
int i, flag, err;
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/iowaitsome.c b/src/mpi/romio/mpi-io/iowaitsome.c
index 1bca9c6..f3808f3 100644
--- a/src/mpi/romio/mpi-io/iowaitsome.c
+++ b/src/mpi/romio/mpi-io/iowaitsome.c
@@ -32,7 +32,6 @@ int MPIO_Waitsome(int count, MPIO_Request requests[], int *outcount,
int indices[], MPI_Status *statuses)
{
int i, flag, err;
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/iread_all.c b/src/mpi/romio/mpi-io/iread_all.c
index afe44f6..5c4aaba 100644
--- a/src/mpi/romio/mpi-io/iread_all.c
+++ b/src/mpi/romio/mpi-io/iread_all.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2008 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -136,7 +136,7 @@ int MPIOI_File_iread_all(MPI_File fh,
/* --END ERROR HANDLING-- */
if (e32_buf != NULL) {
- error_code = MPIU_read_external32_conversion_fn(xbuf, datatype,
+ error_code = MPIU_read_external32_conversion_fn(buf, datatype,
count, e32_buf);
ADIOI_Free(e32_buf);
}
diff --git a/src/mpi/romio/mpi-io/iread_atall.c b/src/mpi/romio/mpi-io/iread_atall.c
index da9326a..2ddd9fc 100644
--- a/src/mpi/romio/mpi-io/iread_atall.c
+++ b/src/mpi/romio/mpi-io/iread_atall.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2012 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
diff --git a/src/mpi/romio/mpi-io/iwrite_all.c b/src/mpi/romio/mpi-io/iwrite_all.c
index 9f486e7..fa6a1b9 100644
--- a/src/mpi/romio/mpi-io/iwrite_all.c
+++ b/src/mpi/romio/mpi-io/iwrite_all.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2008 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
diff --git a/src/mpi/romio/mpi-io/mpioimpl.h b/src/mpi/romio/mpi-io/mpioimpl.h
index 074ad42..6fcc83f 100644
--- a/src/mpi/romio/mpi-io/mpioimpl.h
+++ b/src/mpi/romio/mpi-io/mpioimpl.h
@@ -16,7 +16,7 @@
#include "mpio.h"
#ifdef ROMIO_INSIDE_MPICH
-#include "glue_romio.h"
+#include "mpir_ext.h"
#define ROMIO_THREAD_CS_ENTER() MPIR_Ext_cs_enter()
#define ROMIO_THREAD_CS_EXIT() MPIR_Ext_cs_exit()
@@ -37,11 +37,6 @@
#define ROMIO_THREAD_CS_EXIT()
#define ROMIO_THREAD_CS_YIELD()
#define MPIO_DATATYPE_ISCOMMITTED(dtype_, err_) do {} while (0)
-#ifdef HAVE_WINDOWS_H
-#define MPIU_UNREFERENCED_ARG(a) a
-#else
-#define MPIU_UNREFERENCED_ARG(a)
-#endif
#endif /* ROMIO_INSIDE_MPICH */
/* info is a linked list of these structures */
diff --git a/src/mpi/romio/mpi-io/mpir_cst_filesys.c b/src/mpi/romio/mpi-io/mpir_cst_filesys.c
new file mode 100644
index 0000000..0361bcf
--- /dev/null
+++ b/src/mpi/romio/mpi-io/mpir_cst_filesys.c
@@ -0,0 +1,183 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 UChicago/Argonne LLC
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpioimpl.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+/* not to be called directly (note the MPIR_ prefix), but instead from
+ * MPI-level MPI_Comm_split_type implementation (e.g.
+ * MPIR_Comm_split_type_impl). */
+#undef FUNCNAME
+#define FUNCNAME MPIR_Comm_split_filesystem
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+
+/* split communicator based on access to directory 'dirname'. */
+int MPIR_Comm_split_filesystem(MPI_Comm comm, int key, const char *dirname, MPI_Comm * newcomm)
+{
+
+ int i, mpi_errno = MPI_SUCCESS;
+ int rank, nprocs;
+ int id;
+ int32_t *all_ids;
+ char *filename = NULL;
+ int challenge_rank, globally_visible = 0;
+ MPI_Request check_req;
+
+ MPI_Comm_rank(comm, &rank);
+ MPI_Comm_size(comm, &nprocs);
+ MPIR_Get_node_id(comm, rank, &id);
+
+ /* We could detect the common file systems by parsing 'df'-style
+ * output, but that's fidgety, fragile, and error prone. Instead,
+ * determine who shares a file system through testing.
+ *
+ * We shouldn't create a lot of files, though -- we want something
+ * that could work at hundreds of thousands of nodes, and creating a
+ * hundred thousand files in a directory is a recipe for sadness
+ *
+ * In CH3 and in wider practice "shared memory" is the same as "on
+ * the same node, so let's start there.
+ *
+ * - Create file on one processor
+ * - pick a processor outside the "on this node" group
+ * - if that processor can see the file, then assume the file is
+ * visible to all groups.
+ *
+ * note that this scheme works really well for traditional linux clusters:
+ * think nodes with a local scratch drive. this scheme works less well for
+ * a deeper heirarchy. what if the directory in question was hosted by an
+ * i/o forwarding agent?
+ */
+
+ /* learn a bit about what groups were created: as a scalable
+ * optimization we want to check a file's presence from a group
+ * other than which created it */
+ all_ids = MPL_malloc(nprocs * sizeof(*all_ids));
+
+ mpi_errno = MPI_Gather(&id, 1, MPI_INT32_T, all_ids, 1, MPI_INT32_T, 0, comm);
+
+ if (rank == 0) {
+ for (i = 0; i < nprocs; i++) {
+ if (all_ids[i] != id)
+ break;
+ }
+ if (i >= nprocs)
+ /* everyone is in the same group; pick a process that's not rank 0
+ * just in case the file system is really weird */
+ challenge_rank = nprocs - 1;
+ else
+ challenge_rank = i;
+ }
+ mpi_errno = MPI_Bcast(&challenge_rank, 1, MPI_INT, 0, comm);
+
+ /* now that we've informally lumped everyone into groups based on node
+ * (like shared memory does) it's time to poke the file system and see
+ * which group can see what files */
+
+ /* here come a bunch of assumptions:
+ * - file system layouts are homogenous: if one system has /scratch,
+ * all have /scratch
+ * - a globally visible parallel file system will have the same name
+ * everywhere: e.g /gpfs/users/something
+ * - a file created on one node will be deterministically visible on
+ * another. NFS has problems with this
+ * - if a process from one group creates a file, and a process from
+ * another group finds that file, then a process from all groups
+ * can find that file
+ */
+
+ /* is the file globally visible to all? create on rank 0, test on a
+ * different off-group rank.
+ * Use a single short message to force check after create: ordering
+ * is a little odd in case we are creating and checking on the same
+ * rank */
+
+ filename = MPL_calloc(PATH_MAX, sizeof(char));
+
+ if (rank == 0) {
+ int r, pid;
+
+ /* same algorithim as shared file pointer name */
+ srand(time(NULL) & 0xffffffff);
+ r = rand();
+ pid = (int) getpid();
+
+ MPL_snprintf(filename, PATH_MAX, "%s/.commonfstest.%d.%d.%d",
+ dirname == NULL ? "." : dirname, rank, r, pid);
+ }
+
+ MPI_Bcast(filename, PATH_MAX, MPI_BYTE, 0, comm);
+
+ if (rank == challenge_rank) {
+ MPI_Irecv(NULL, 0, MPI_BYTE, 0, 0, comm, &check_req);
+ }
+
+ if (rank == 0) {
+ MPI_File fh;
+ mpi_errno = MPI_File_open(MPI_COMM_SELF, filename,
+ MPI_MODE_CREATE | MPI_MODE_EXCL | MPI_MODE_WRONLY,
+ MPI_INFO_NULL, &fh);
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_exit;
+ MPI_File_close(&fh);
+ /* the check for file has to happen after file created. only need one
+ * process, though, not a full barrier */
+ MPI_Send(NULL, 0, MPI_BYTE, challenge_rank, 0, comm);
+ }
+
+ if (rank == challenge_rank) {
+ MPI_File fh;
+
+ MPI_Wait(&check_req, MPI_STATUS_IGNORE);
+
+ /* too bad there's no ADIO equivalent of access: we'll have to
+ * open/close the file instead */
+
+ mpi_errno = MPI_File_open(MPI_COMM_SELF, filename, MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
+ if (mpi_errno == MPI_SUCCESS) {
+ globally_visible = 1;
+ MPI_File_close(&fh);
+ } else {
+ /* do not report error up to caller. we are merely testing the
+ * presence of the file */
+ mpi_errno = MPI_SUCCESS;
+ globally_visible = 0;
+ }
+ }
+ MPI_Bcast(&globally_visible, 1, MPI_INT, challenge_rank, comm);
+
+ /* with the above assumptions, we have two cases for a flie
+ * created on one process:
+ * -- either a process not in the group can access it (node-local
+ * storage of some sort)
+ * -- or a process not in the group cannot access it (globally
+ * accessable parallel file system) */
+
+ if (globally_visible) {
+ MPI_Comm_dup(comm, newcomm);
+ }
+ else {
+ MPI_Comm_split(comm, id, key, newcomm);
+ }
+ if (rank == 0)
+ MPI_File_delete(filename, MPI_INFO_NULL);
+
+ fn_exit:
+ MPL_free(all_ids);
+ MPL_free(filename);
+ return mpi_errno;
+}
+
+/*
+ * vim: ts=8 sts=4 sw=4 noexpandtab
+ */
diff --git a/src/mpi/romio/mpi-io/mpiu_external32.c b/src/mpi/romio/mpi-io/mpiu_external32.c
index ce2253b..8a8254c 100644
--- a/src/mpi/romio/mpi-io/mpiu_external32.c
+++ b/src/mpi/romio/mpi-io/mpiu_external32.c
@@ -160,7 +160,7 @@ int MPIU_external32_buffer_setup(const void * buf, int count, MPI_Datatype type,
error_code = MPIU_write_external32_conversion_fn(buf, type, count, *newbuf);
if (error_code != MPI_SUCCESS) {
- ADIOI_Free(newbuf);
+ ADIOI_Free(*newbuf);
return error_code;
}
return MPI_SUCCESS;
diff --git a/src/mpi/romio/mpi-io/mpiu_greq.c b/src/mpi/romio/mpi-io/mpiu_greq.c
index cb6e9d2..82cd7c7 100644
--- a/src/mpi/romio/mpi-io/mpiu_greq.c
+++ b/src/mpi/romio/mpi-io/mpiu_greq.c
@@ -41,8 +41,8 @@ int MPIU_Greq_free_fn(void *extra_state)
}
int MPIU_Greq_cancel_fn(void *extra_state, int complete)
{
- MPIU_UNREFERENCED_ARG(extra_state);
- MPIU_UNREFERENCED_ARG(complete);
+ MPL_UNREFERENCED_ARG(extra_state);
+ MPL_UNREFERENCED_ARG(complete);
/* can't cancel */
return MPI_SUCCESS;
diff --git a/src/mpi/romio/mpi-io/read_all.c b/src/mpi/romio/mpi-io/read_all.c
index e0b605d..efce783 100644
--- a/src/mpi/romio/mpi-io/read_all.c
+++ b/src/mpi/romio/mpi-io/read_all.c
@@ -129,7 +129,7 @@ int MPIOI_File_read_all(MPI_File fh,
/* --END ERROR HANDLING-- */
if (e32_buf != NULL) {
- error_code = MPIU_read_external32_conversion_fn(xbuf, datatype,
+ error_code = MPIU_read_external32_conversion_fn(buf, datatype,
count, e32_buf);
ADIOI_Free(e32_buf);
}
diff --git a/src/mpi/romio/mpi-io/read_allb.c b/src/mpi/romio/mpi-io/read_allb.c
index 2110f71..ae1053b 100644
--- a/src/mpi/romio/mpi-io/read_allb.c
+++ b/src/mpi/romio/mpi-io/read_allb.c
@@ -126,7 +126,7 @@ int MPIOI_File_read_all_begin(MPI_File fh,
/* --END ERROR HANDLING-- */
if (e32_buf != NULL) {
- error_code = MPIU_read_external32_conversion_fn(xbuf, datatype,
+ error_code = MPIU_read_external32_conversion_fn(buf, datatype,
count, e32_buf);
ADIOI_Free(e32_buf);
}
diff --git a/src/mpi/romio/mpi-io/read_alle.c b/src/mpi/romio/mpi-io/read_alle.c
index e2853c1..f6f92c6 100644
--- a/src/mpi/romio/mpi-io/read_alle.c
+++ b/src/mpi/romio/mpi-io/read_alle.c
@@ -58,7 +58,7 @@ int MPIOI_File_read_all_end(MPI_File fh,
int error_code = MPI_SUCCESS;
ADIO_File adio_fh;
- MPIU_UNREFERENCED_ARG(buf);
+ MPL_UNREFERENCED_ARG(buf);
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/read_ordb.c b/src/mpi/romio/mpi-io/read_ordb.c
index 5548bde..050934b 100644
--- a/src/mpi/romio/mpi-io/read_ordb.c
+++ b/src/mpi/romio/mpi-io/read_ordb.c
@@ -125,7 +125,7 @@ int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count,
/* --END ERROR HANDLING-- */
if (e32_buf != NULL) {
- error_code = MPIU_read_external32_conversion_fn(xbuf, datatype,
+ error_code = MPIU_read_external32_conversion_fn(buf, datatype,
count, e32_buf);
ADIOI_Free(e32_buf);
}
diff --git a/src/mpi/romio/mpi-io/read_orde.c b/src/mpi/romio/mpi-io/read_orde.c
index 542f687..a69d51c 100644
--- a/src/mpi/romio/mpi-io/read_orde.c
+++ b/src/mpi/romio/mpi-io/read_orde.c
@@ -43,7 +43,7 @@ int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status)
ADIO_File adio_fh;
static char myname[] = "MPI_FILE_READ_ORDERED_END";
- MPIU_UNREFERENCED_ARG(buf);
+ MPL_UNREFERENCED_ARG(buf);
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/read_sh.c b/src/mpi/romio/mpi-io/read_sh.c
index 8ebbf87..83c29da 100644
--- a/src/mpi/romio/mpi-io/read_sh.c
+++ b/src/mpi/romio/mpi-io/read_sh.c
@@ -144,7 +144,7 @@ int MPI_File_read_shared(MPI_File fh, void *buf, int count,
/* --END ERROR HANDLING-- */
if (e32_buf != NULL) {
- error_code = MPIU_read_external32_conversion_fn(xbuf, datatype,
+ error_code = MPIU_read_external32_conversion_fn(buf, datatype,
count, e32_buf);
ADIOI_Free(e32_buf);
}
diff --git a/src/mpi/romio/mpi-io/set_errh.c b/src/mpi/romio/mpi-io/set_errh.c
index d943787..2b14913 100644
--- a/src/mpi/romio/mpi-io/set_errh.c
+++ b/src/mpi/romio/mpi-io/set_errh.c
@@ -40,7 +40,6 @@ int MPI_File_set_errhandler(MPI_File mpi_fh, MPI_Errhandler errhandler)
int error_code = MPI_SUCCESS;
static char myname[] = "MPI_FILE_SET_ERRHANDLER";
ADIO_File fh;
- MPID_THREADPRIV_DECL;
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/write.c b/src/mpi/romio/mpi-io/write.c
index eb9a77f..e307b45 100644
--- a/src/mpi/romio/mpi-io/write.c
+++ b/src/mpi/romio/mpi-io/write.c
@@ -147,7 +147,7 @@ int MPIOI_File_write(MPI_File fh,
/* if atomic mode requested, lock (exclusive) the region, because
there could be a concurrent noncontiguous request. Locking doesn't
- work on PIOFS and PVFS, and on NFS it is done in the
+ work on some parallel file systems, and on NFS it is done in the
ADIO_WriteContig.
*/
diff --git a/src/mpi/romio/mpi-io/write_alle.c b/src/mpi/romio/mpi-io/write_alle.c
index 6dc7f6d..e43d9f2 100644
--- a/src/mpi/romio/mpi-io/write_alle.c
+++ b/src/mpi/romio/mpi-io/write_alle.c
@@ -57,7 +57,7 @@ int MPIOI_File_write_all_end(MPI_File fh,
int error_code;
ADIO_File adio_fh;
- MPIU_UNREFERENCED_ARG(buf);
+ MPL_UNREFERENCED_ARG(buf);
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi-io/write_orde.c b/src/mpi/romio/mpi-io/write_orde.c
index 8cfdba2..7190ffd 100644
--- a/src/mpi/romio/mpi-io/write_orde.c
+++ b/src/mpi/romio/mpi-io/write_orde.c
@@ -43,7 +43,7 @@ int MPI_File_write_ordered_end(MPI_File fh, ROMIO_CONST void *buf, MPI_Status *s
static char myname[] = "MPI_FILE_WRITE_ORDERED_END";
ADIO_File adio_fh;
- MPIU_UNREFERENCED_ARG(buf);
+ MPL_UNREFERENCED_ARG(buf);
ROMIO_THREAD_CS_ENTER();
diff --git a/src/mpi/romio/mpi2-other/array/.state-cache b/src/mpi/romio/mpi2-other/array/.state-cache
index 8890b41..606a584 100644
--- a/src/mpi/romio/mpi2-other/array/.state-cache
+++ b/src/mpi/romio/mpi2-other/array/.state-cache
@@ -1,6 +1,6 @@
<dir>
-<file name="darray.c" info="1447123141"/>
-<file name="subarray.c" info="1447123141"/>
+<file name="darray.c" info="1478973152"/>
+<file name="subarray.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="darray.c">
diff --git a/src/mpi/romio/mpi2-other/array/fortran/.state-cache b/src/mpi/romio/mpi2-other/array/fortran/.state-cache
index fbf2b75..7202edf 100644
--- a/src/mpi/romio/mpi2-other/array/fortran/.state-cache
+++ b/src/mpi/romio/mpi2-other/array/fortran/.state-cache
@@ -1,6 +1,6 @@
<dir>
-<file name="darrayf.c" info="1447123141"/>
-<file name="subarrayf.c" info="1447123141"/>
+<file name="darrayf.c" info="1478973152"/>
+<file name="subarrayf.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="darrayf.c">
diff --git a/src/mpi/romio/mpi2-other/info/.state-cache b/src/mpi/romio/mpi2-other/info/.state-cache
index 6c39c74..ac59235 100644
--- a/src/mpi/romio/mpi2-other/info/.state-cache
+++ b/src/mpi/romio/mpi2-other/info/.state-cache
@@ -1,37 +1,37 @@
<dir>
-<file name="info_c2f.c" info="1447123141"/>
-<file name="info_delete.c" info="1447123141"/>
-<file name="info_set.c" info="1447123141"/>
-<file name="info_getnth.c" info="1447123141"/>
-<file name="info_dup.c" info="1447123141"/>
-<file name="info_f2c.c" info="1447123141"/>
-<file name="info_free.c" info="1447123141"/>
-<file name="info_create.c" info="1447123141"/>
-<file name="info_getvln.c" info="1447123141"/>
-<file name="info_get.c" info="1447123141"/>
-<file name="info_getnks.c" info="1447123141"/>
+<file name="info_delete.c" info="1478973152"/>
+<file name="info_dup.c" info="1478973152"/>
+<file name="info_c2f.c" info="1478973152"/>
+<file name="info_create.c" info="1478973152"/>
+<file name="info_getnks.c" info="1478973152"/>
+<file name="info_set.c" info="1478973152"/>
+<file name="info_f2c.c" info="1478973152"/>
+<file name="info_get.c" info="1478973152"/>
+<file name="info_getnth.c" info="1478973152"/>
+<file name="info_getvln.c" info="1478973152"/>
+<file name="info_free.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="info_c2f.c">
-</fileinfo>
<fileinfo name="info_delete.c">
</fileinfo>
-<fileinfo name="info_set.c">
+<fileinfo name="info_dup.c">
</fileinfo>
-<fileinfo name="info_getnth.c">
+<fileinfo name="info_c2f.c">
</fileinfo>
-<fileinfo name="info_dup.c">
+<fileinfo name="info_create.c">
+</fileinfo>
+<fileinfo name="info_getnks.c">
+</fileinfo>
+<fileinfo name="info_set.c">
</fileinfo>
<fileinfo name="info_f2c.c">
</fileinfo>
-<fileinfo name="info_free.c">
+<fileinfo name="info_get.c">
</fileinfo>
-<fileinfo name="info_create.c">
+<fileinfo name="info_getnth.c">
</fileinfo>
<fileinfo name="info_getvln.c">
</fileinfo>
-<fileinfo name="info_get.c">
-</fileinfo>
-<fileinfo name="info_getnks.c">
+<fileinfo name="info_free.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/mpi2-other/info/fortran/.state-cache b/src/mpi/romio/mpi2-other/info/fortran/.state-cache
index 5245d70..087526f 100644
--- a/src/mpi/romio/mpi2-other/info/fortran/.state-cache
+++ b/src/mpi/romio/mpi2-other/info/fortran/.state-cache
@@ -1,31 +1,31 @@
<dir>
-<file name="info_freef.c" info="1447123141"/>
-<file name="info_setf.c" info="1447123141"/>
-<file name="info_getf.c" info="1447123141"/>
-<file name="info_createf.c" info="1447123141"/>
-<file name="info_getnthf.c" info="1447123141"/>
-<file name="info_getvlnf.c" info="1447123141"/>
-<file name="info_getnksf.c" info="1447123141"/>
-<file name="info_dupf.c" info="1447123141"/>
-<file name="info_deletef.c" info="1447123141"/>
+<file name="info_getnthf.c" info="1478973152"/>
+<file name="info_deletef.c" info="1478973152"/>
+<file name="info_setf.c" info="1478973152"/>
+<file name="info_getnksf.c" info="1478973152"/>
+<file name="info_createf.c" info="1478973152"/>
+<file name="info_freef.c" info="1478973152"/>
+<file name="info_dupf.c" info="1478973152"/>
+<file name="info_getvlnf.c" info="1478973152"/>
+<file name="info_getf.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="info_freef.c">
+<fileinfo name="info_getnthf.c">
+</fileinfo>
+<fileinfo name="info_deletef.c">
</fileinfo>
<fileinfo name="info_setf.c">
</fileinfo>
-<fileinfo name="info_getf.c">
+<fileinfo name="info_getnksf.c">
</fileinfo>
<fileinfo name="info_createf.c">
</fileinfo>
-<fileinfo name="info_getnthf.c">
-</fileinfo>
-<fileinfo name="info_getvlnf.c">
-</fileinfo>
-<fileinfo name="info_getnksf.c">
+<fileinfo name="info_freef.c">
</fileinfo>
<fileinfo name="info_dupf.c">
</fileinfo>
-<fileinfo name="info_deletef.c">
+<fileinfo name="info_getvlnf.c">
+</fileinfo>
+<fileinfo name="info_getf.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/mpl/Makefile.am b/src/mpi/romio/mpl/Makefile.am
new file mode 100644
index 0000000..eb73cca
--- /dev/null
+++ b/src/mpi/romio/mpl/Makefile.am
@@ -0,0 +1,68 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2008 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+ACLOCAL_AMFLAGS = -I confdb
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
+
+lib at MPLLIBNAME@_la_SOURCES =
+lib at MPLLIBNAME@_la_LDFLAGS = ${lib at MPLLIBNAME@_so_versionflags}
+
+include src/Makefile.mk
+
+MPL_TESTS = strsep
+TESTS = $(MPL_TESTS)
+check_PROGRAMS = $(MPL_TESTS)
+strsep_SOURCES = test/strsep.c
+strsep_LDADD = lib at MPLLIBNAME@.la
+
+mpl_headers = \
+ include/mpl.h \
+ include/mpl_base.h \
+ include/mplconfig.h \
+ include/mpl_utlist.h \
+ include/mpl_valgrind.h \
+ include/mpl_env.h \
+ include/mpl_str.h \
+ include/mpl_trmem.h \
+ include/mpl_msg.h \
+ include/mpl_sock.h \
+ include/mpl_iov.h \
+ include/mpl_bt.h \
+ include/mpl_shm.h
+
+if MPL_EMBEDDED_MODE
+noinst_HEADERS = $(mpl_headers)
+noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
+else !MPL_EMBEDDED_MODE
+include_HEADERS = $(mpl_headers)
+lib_LTLIBRARIES = lib at MPLLIBNAME@.la
+endif !MPL_EMBEDDED_MODE
+
+# --------------------------------------------------------------------------
+.PHONY: coverage
+gcov_sources = $(libmpl_la_SOURCES)
+# assumes that these sources were compiled appropriately ("-fprofile-arcs"
+# and "-ftest-coverage")
+coverage:
+ @for file in $(gcov_sources) ; do \
+ dir=`dirname $$file` ; \
+ bname=`basename $$file` ; \
+ aux=`echo $$bname | sed -e 's,\.*$$,,'` ; \
+ echo "( $(GCOV) -b -f -o $$file $$file && mv $${bname}.gcov $$dir )" ; \
+ ( $(GCOV) -b -f -o $$file $$file && mv $${bname}.gcov $$dir ) ; \
+ rm -f *.gcov ; \
+ done
+ for subdir in $(SUBDIRS) - ; do \
+ if test $$subdir = "-" ; then break ; fi ; \
+ ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) coverage ) ; \
+ done
+# --------------------------------------------------------------------------
+
+# files that automake doesn't know about by default that should be included in
+# the distribution
+EXTRA_DIST = VERSION
+
+DISTCLEANFILES = _configs.sed include/mplconfig.h
diff --git a/src/mpi/romio/mpl/Makefile.in b/src/mpi/romio/mpl/Makefile.in
new file mode 100644
index 0000000..b9a1275
--- /dev/null
+++ b/src/mpi/romio/mpl/Makefile.in
@@ -0,0 +1,1610 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2008 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS = $(am__EXEEXT_1)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_coverage.m4 \
+ $(top_srcdir)/confdb/aclocal_shm.m4 \
+ $(top_srcdir)/confdb/aclocal_util.m4 \
+ $(top_srcdir)/confdb/ax_prefix_config_h.m4 \
+ $(top_srcdir)/confdb/ax_tls.m4 $(top_srcdir)/confdb/libtool.m4 \
+ $(top_srcdir)/confdb/ltoptions.m4 \
+ $(top_srcdir)/confdb/ltsugar.m4 \
+ $(top_srcdir)/confdb/ltversion.m4 \
+ $(top_srcdir)/confdb/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(am__include_HEADERS_DIST) \
+ $(am__noinst_HEADERS_DIST) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES = localdefs include/mpl_timer.h
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+lib at MPLLIBNAME@_la_LIBADD =
+am__dirstamp = $(am__leading_dot)dirstamp
+am_lib at MPLLIBNAME@_la_OBJECTS = src/bt/mpl_bt.lo src/dbg/mpl_dbg.lo \
+ src/env/mpl_env.lo src/mem/mpl_trmem.lo src/msg/mpl_msg.lo \
+ src/sock/mpl_sock.lo src/str/mpl_str.lo src/str/mpl_argstr.lo \
+ src/thread/mpl_thread.lo src/thread/mpl_thread_win.lo \
+ src/thread/mpl_thread_solaris.lo \
+ src/thread/mpl_thread_posix.lo \
+ src/timer/mpl_timer_clock_gettime.lo \
+ src/timer/mpl_timer_gcc_ia64_cycle.lo \
+ src/timer/mpl_timer_gethrtime.lo \
+ src/timer/mpl_timer_gettimeofday.lo \
+ src/timer/mpl_timer_linux86_cycle.lo \
+ src/timer/mpl_timer_ppc64_cycle.lo \
+ src/timer/mpl_timer_mach_absolute_time.lo \
+ src/timer/mpl_timer_query_performance_counter.lo \
+ src/timer/mpl_timer_win86_cycle.lo \
+ src/timer/mpl_timer_device.lo src/shm/mpl_shm.lo \
+ src/shm/mpl_shm_sysv.lo src/shm/mpl_shm_mmap.lo \
+ src/shm/mpl_shm_win.lo
+lib at MPLLIBNAME@_la_OBJECTS = $(am_lib at MPLLIBNAME@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+lib at MPLLIBNAME@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(lib at MPLLIBNAME@_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
+ at MPL_EMBEDDED_MODE_FALSE@am_lib at MPLLIBNAME@_la_rpath = -rpath \
+ at MPL_EMBEDDED_MODE_FALSE@ $(libdir)
+ at MPL_EMBEDDED_MODE_TRUE@am_lib at MPLLIBNAME@_la_rpath =
+am__EXEEXT_1 = strsep$(EXEEXT)
+am_strsep_OBJECTS = test/strsep.$(OBJEXT)
+strsep_OBJECTS = $(am_strsep_OBJECTS)
+strsep_DEPENDENCIES = lib at MPLLIBNAME@.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/confdb/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(lib at MPLLIBNAME@_la_SOURCES) $(strsep_SOURCES)
+DIST_SOURCES = $(lib at MPLLIBNAME@_la_SOURCES) $(strsep_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__include_HEADERS_DIST = include/mpl.h include/mpl_base.h \
+ include/mplconfig.h include/mpl_utlist.h \
+ include/mpl_valgrind.h include/mpl_env.h include/mpl_str.h \
+ include/mpl_trmem.h include/mpl_msg.h include/mpl_sock.h \
+ include/mpl_iov.h include/mpl_bt.h include/mpl_shm.h
+am__noinst_HEADERS_DIST = include/mpl.h include/mpl_base.h \
+ include/mplconfig.h include/mpl_utlist.h \
+ include/mpl_valgrind.h include/mpl_env.h include/mpl_str.h \
+ include/mpl_trmem.h include/mpl_msg.h include/mpl_sock.h \
+ include/mpl_iov.h include/mpl_bt.h include/mpl_shm.h
+HEADERS = $(include_HEADERS) $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+AM_RECURSIVE_TARGETS = cscope check recheck
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red='[0;31m'; \
+ grn='[0;32m'; \
+ lgn='[1;32m'; \
+ blu='[1;34m'; \
+ mgn='[0;35m'; \
+ brg='[1m'; \
+ std='[m'; \
+ fi; \
+}
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/confdb/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/confdb/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/localdefs.in \
+ $(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk \
+ $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk \
+ $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk \
+ $(srcdir)/src/shm/Makefile.mk $(srcdir)/src/sock/Makefile.mk \
+ $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk \
+ $(srcdir)/src/timer/Makefile.mk $(top_srcdir)/confdb/ar-lib \
+ $(top_srcdir)/confdb/compile $(top_srcdir)/confdb/config.guess \
+ $(top_srcdir)/confdb/config.sub $(top_srcdir)/confdb/depcomp \
+ $(top_srcdir)/confdb/install-sh $(top_srcdir)/confdb/ltmain.sh \
+ $(top_srcdir)/confdb/missing $(top_srcdir)/confdb/test-driver \
+ $(top_srcdir)/include/config.h.in \
+ $(top_srcdir)/include/mpl_timer.h.in confdb/ar-lib \
+ confdb/compile confdb/config.guess confdb/config.rpath \
+ confdb/config.sub confdb/depcomp confdb/install-sh \
+ confdb/ltmain.sh confdb/missing
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPLLIBNAME = @MPLLIBNAME@
+MPL_TIMER_KIND = @MPL_TIMER_KIND@
+MPL_TIMER_TYPE = @MPL_TIMER_TYPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libmpl_so_version = @libmpl_so_version@
+libmpl_so_versionflags = @libmpl_so_versionflags@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I confdb
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
+lib at MPLLIBNAME@_la_SOURCES = src/bt/mpl_bt.c src/dbg/mpl_dbg.c \
+ src/env/mpl_env.c src/mem/mpl_trmem.c src/msg/mpl_msg.c \
+ src/sock/mpl_sock.c src/str/mpl_str.c src/str/mpl_argstr.c \
+ src/thread/mpl_thread.c src/thread/mpl_thread_win.c \
+ src/thread/mpl_thread_solaris.c src/thread/mpl_thread_posix.c \
+ src/timer/mpl_timer_clock_gettime.c \
+ src/timer/mpl_timer_gcc_ia64_cycle.c \
+ src/timer/mpl_timer_gethrtime.c \
+ src/timer/mpl_timer_gettimeofday.c \
+ src/timer/mpl_timer_linux86_cycle.c \
+ src/timer/mpl_timer_ppc64_cycle.c \
+ src/timer/mpl_timer_mach_absolute_time.c \
+ src/timer/mpl_timer_query_performance_counter.c \
+ src/timer/mpl_timer_win86_cycle.c src/timer/mpl_timer_device.c \
+ src/shm/mpl_shm.c src/shm/mpl_shm_sysv.c \
+ src/shm/mpl_shm_mmap.c src/shm/mpl_shm_win.c
+lib at MPLLIBNAME@_la_LDFLAGS = ${lib at MPLLIBNAME@_so_versionflags}
+MPL_TESTS = strsep
+strsep_SOURCES = test/strsep.c
+strsep_LDADD = lib at MPLLIBNAME@.la
+mpl_headers = \
+ include/mpl.h \
+ include/mpl_base.h \
+ include/mplconfig.h \
+ include/mpl_utlist.h \
+ include/mpl_valgrind.h \
+ include/mpl_env.h \
+ include/mpl_str.h \
+ include/mpl_trmem.h \
+ include/mpl_msg.h \
+ include/mpl_sock.h \
+ include/mpl_iov.h \
+ include/mpl_bt.h \
+ include/mpl_shm.h
+
+ at MPL_EMBEDDED_MODE_TRUE@noinst_HEADERS = $(mpl_headers)
+ at MPL_EMBEDDED_MODE_TRUE@noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
+ at MPL_EMBEDDED_MODE_FALSE@include_HEADERS = $(mpl_headers)
+ at MPL_EMBEDDED_MODE_FALSE@lib_LTLIBRARIES = lib at MPLLIBNAME@.la
+gcov_sources = $(libmpl_la_SOURCES)
+# --------------------------------------------------------------------------
+
+# files that automake doesn't know about by default that should be included in
+# the distribution
+EXTRA_DIST = VERSION
+DISTCLEANFILES = _configs.sed include/mplconfig.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk $(srcdir)/src/sock/Makefile.mk $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk $(srcdir)/src/timer/Makefile.mk $(srcdir)/src/shm/Makefile.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+$(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk $(srcdir)/src/sock/Makefile.mk $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk $(srcdir)/src/timer/Makefile.mk $(srcdir)/src/shm/Makefile.mk $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+include/config.h: include/stamp-h1
+ @test -f $@ || rm -f include/stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) include/stamp-h1
+
+include/stamp-h1: $(top_srcdir)/include/config.h.in $(top_builddir)/config.status
+ @rm -f include/stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status include/config.h
+$(top_srcdir)/include/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f include/stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f include/config.h include/stamp-h1
+localdefs: $(top_builddir)/config.status $(srcdir)/localdefs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+include/mpl_timer.h: $(top_builddir)/config.status $(top_srcdir)/include/mpl_timer.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+src/bt/$(am__dirstamp):
+ @$(MKDIR_P) src/bt
+ @: > src/bt/$(am__dirstamp)
+src/bt/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/bt/$(DEPDIR)
+ @: > src/bt/$(DEPDIR)/$(am__dirstamp)
+src/bt/mpl_bt.lo: src/bt/$(am__dirstamp) \
+ src/bt/$(DEPDIR)/$(am__dirstamp)
+src/dbg/$(am__dirstamp):
+ @$(MKDIR_P) src/dbg
+ @: > src/dbg/$(am__dirstamp)
+src/dbg/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/dbg/$(DEPDIR)
+ @: > src/dbg/$(DEPDIR)/$(am__dirstamp)
+src/dbg/mpl_dbg.lo: src/dbg/$(am__dirstamp) \
+ src/dbg/$(DEPDIR)/$(am__dirstamp)
+src/env/$(am__dirstamp):
+ @$(MKDIR_P) src/env
+ @: > src/env/$(am__dirstamp)
+src/env/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/env/$(DEPDIR)
+ @: > src/env/$(DEPDIR)/$(am__dirstamp)
+src/env/mpl_env.lo: src/env/$(am__dirstamp) \
+ src/env/$(DEPDIR)/$(am__dirstamp)
+src/mem/$(am__dirstamp):
+ @$(MKDIR_P) src/mem
+ @: > src/mem/$(am__dirstamp)
+src/mem/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mem/$(DEPDIR)
+ @: > src/mem/$(DEPDIR)/$(am__dirstamp)
+src/mem/mpl_trmem.lo: src/mem/$(am__dirstamp) \
+ src/mem/$(DEPDIR)/$(am__dirstamp)
+src/msg/$(am__dirstamp):
+ @$(MKDIR_P) src/msg
+ @: > src/msg/$(am__dirstamp)
+src/msg/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/msg/$(DEPDIR)
+ @: > src/msg/$(DEPDIR)/$(am__dirstamp)
+src/msg/mpl_msg.lo: src/msg/$(am__dirstamp) \
+ src/msg/$(DEPDIR)/$(am__dirstamp)
+src/sock/$(am__dirstamp):
+ @$(MKDIR_P) src/sock
+ @: > src/sock/$(am__dirstamp)
+src/sock/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/sock/$(DEPDIR)
+ @: > src/sock/$(DEPDIR)/$(am__dirstamp)
+src/sock/mpl_sock.lo: src/sock/$(am__dirstamp) \
+ src/sock/$(DEPDIR)/$(am__dirstamp)
+src/str/$(am__dirstamp):
+ @$(MKDIR_P) src/str
+ @: > src/str/$(am__dirstamp)
+src/str/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/str/$(DEPDIR)
+ @: > src/str/$(DEPDIR)/$(am__dirstamp)
+src/str/mpl_str.lo: src/str/$(am__dirstamp) \
+ src/str/$(DEPDIR)/$(am__dirstamp)
+src/str/mpl_argstr.lo: src/str/$(am__dirstamp) \
+ src/str/$(DEPDIR)/$(am__dirstamp)
+src/thread/$(am__dirstamp):
+ @$(MKDIR_P) src/thread
+ @: > src/thread/$(am__dirstamp)
+src/thread/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/thread/$(DEPDIR)
+ @: > src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_win.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_solaris.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_posix.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/timer/$(am__dirstamp):
+ @$(MKDIR_P) src/timer
+ @: > src/timer/$(am__dirstamp)
+src/timer/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/timer/$(DEPDIR)
+ @: > src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_clock_gettime.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gcc_ia64_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gethrtime.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gettimeofday.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_linux86_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_ppc64_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_mach_absolute_time.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_query_performance_counter.lo: \
+ src/timer/$(am__dirstamp) src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_win86_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_device.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/shm/$(am__dirstamp):
+ @$(MKDIR_P) src/shm
+ @: > src/shm/$(am__dirstamp)
+src/shm/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/shm/$(DEPDIR)
+ @: > src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_sysv.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_mmap.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_win.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+
+lib at MPLLIBNAME@.la: $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_DEPENDENCIES) $(EXTRA_lib at MPLLIBNAME@_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(lib at MPLLIBNAME@_la_LINK) $(am_lib at MPLLIBNAME@_la_rpath) $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+test/$(am__dirstamp):
+ @$(MKDIR_P) test
+ @: > test/$(am__dirstamp)
+test/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) test/$(DEPDIR)
+ @: > test/$(DEPDIR)/$(am__dirstamp)
+test/strsep.$(OBJEXT): test/$(am__dirstamp) \
+ test/$(DEPDIR)/$(am__dirstamp)
+
+strsep$(EXEEXT): $(strsep_OBJECTS) $(strsep_DEPENDENCIES) $(EXTRA_strsep_DEPENDENCIES)
+ @rm -f strsep$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(strsep_OBJECTS) $(strsep_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f src/bt/*.$(OBJEXT)
+ -rm -f src/bt/*.lo
+ -rm -f src/dbg/*.$(OBJEXT)
+ -rm -f src/dbg/*.lo
+ -rm -f src/env/*.$(OBJEXT)
+ -rm -f src/env/*.lo
+ -rm -f src/mem/*.$(OBJEXT)
+ -rm -f src/mem/*.lo
+ -rm -f src/msg/*.$(OBJEXT)
+ -rm -f src/msg/*.lo
+ -rm -f src/shm/*.$(OBJEXT)
+ -rm -f src/shm/*.lo
+ -rm -f src/sock/*.$(OBJEXT)
+ -rm -f src/sock/*.lo
+ -rm -f src/str/*.$(OBJEXT)
+ -rm -f src/str/*.lo
+ -rm -f src/thread/*.$(OBJEXT)
+ -rm -f src/thread/*.lo
+ -rm -f src/timer/*.$(OBJEXT)
+ -rm -f src/timer/*.lo
+ -rm -f test/*.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at src/bt/$(DEPDIR)/mpl_bt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/dbg/$(DEPDIR)/mpl_dbg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/env/$(DEPDIR)/mpl_env.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mem/$(DEPDIR)/mpl_trmem.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/msg/$(DEPDIR)/mpl_msg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_mmap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_sysv.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_win.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/sock/$(DEPDIR)/mpl_sock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/str/$(DEPDIR)/mpl_argstr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/str/$(DEPDIR)/mpl_str.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_posix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_solaris.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_win.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_clock_gettime.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_device.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gcc_ia64_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gethrtime.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gettimeofday.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_linux86_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_mach_absolute_time.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_ppc64_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_query_performance_counter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_win86_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at test/$(DEPDIR)/strsep.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+ -rm -rf src/bt/.libs src/bt/_libs
+ -rm -rf src/dbg/.libs src/dbg/_libs
+ -rm -rf src/env/.libs src/env/_libs
+ -rm -rf src/mem/.libs src/mem/_libs
+ -rm -rf src/msg/.libs src/msg/_libs
+ -rm -rf src/shm/.libs src/shm/_libs
+ -rm -rf src/sock/.libs src/sock/_libs
+ -rm -rf src/str/.libs src/str/_libs
+ -rm -rf src/thread/.libs src/thread/_libs
+ -rm -rf src/timer/.libs src/timer/_libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+install-includeHEADERS: $(include_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+ done
+
+uninstall-includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS:
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+strsep.log: strsep$(EXEEXT)
+ @p='strsep$(EXEEXT)'; \
+ b='strsep'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@ @p='$<'; \
+ at am__EXEEXT_TRUE@ $(am__set_b); \
+ at am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f src/bt/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/bt/$(am__dirstamp)
+ -rm -f src/dbg/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/dbg/$(am__dirstamp)
+ -rm -f src/env/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/env/$(am__dirstamp)
+ -rm -f src/mem/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mem/$(am__dirstamp)
+ -rm -f src/msg/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/msg/$(am__dirstamp)
+ -rm -f src/shm/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/shm/$(am__dirstamp)
+ -rm -f src/sock/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/sock/$(am__dirstamp)
+ -rm -f src/str/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/str/$(am__dirstamp)
+ -rm -f src/thread/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/thread/$(am__dirstamp)
+ -rm -f src/timer/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/timer/$(am__dirstamp)
+ -rm -f test/$(DEPDIR)/$(am__dirstamp)
+ -rm -f test/$(am__dirstamp)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf src/bt/$(DEPDIR) src/dbg/$(DEPDIR) src/env/$(DEPDIR) src/mem/$(DEPDIR) src/msg/$(DEPDIR) src/shm/$(DEPDIR) src/sock/$(DEPDIR) src/str/$(DEPDIR) src/thread/$(DEPDIR) src/timer/$(DEPDIR) test/$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf src/bt/$(DEPDIR) src/dbg/$(DEPDIR) src/env/$(DEPDIR) src/mem/$(DEPDIR) src/msg/$(DEPDIR) src/shm/$(DEPDIR) src/sock/$(DEPDIR) src/str/$(DEPDIR) src/thread/$(DEPDIR) src/timer/$(DEPDIR) test/$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-cscope clean-generic \
+ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
+ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-includeHEADERS \
+ install-info install-info-am install-libLTLIBRARIES \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
+ uninstall uninstall-am uninstall-includeHEADERS \
+ uninstall-libLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+# --------------------------------------------------------------------------
+.PHONY: coverage
+# assumes that these sources were compiled appropriately ("-fprofile-arcs"
+# and "-ftest-coverage")
+coverage:
+ @for file in $(gcov_sources) ; do \
+ dir=`dirname $$file` ; \
+ bname=`basename $$file` ; \
+ aux=`echo $$bname | sed -e 's,\.*$$,,'` ; \
+ echo "( $(GCOV) -b -f -o $$file $$file && mv $${bname}.gcov $$dir )" ; \
+ ( $(GCOV) -b -f -o $$file $$file && mv $${bname}.gcov $$dir ) ; \
+ rm -f *.gcov ; \
+ done
+ for subdir in $(SUBDIRS) - ; do \
+ if test $$subdir = "-" ; then break ; fi ; \
+ ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) coverage ) ; \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/mpi/romio/mpl/VERSION b/src/mpi/romio/mpl/VERSION
new file mode 100644
index 0000000..e275339
--- /dev/null
+++ b/src/mpi/romio/mpl/VERSION
@@ -0,0 +1,21 @@
+# -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
+#
+# (C) 2010 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# For libtool ABI versioning rules see:
+# http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
+
+# 1. If the library source code has changed at all since the last
+# update, then increment revision (`c:r:a' becomes `c:r+1:a').
+#
+# 2. If any interfaces have been added, removed, or changed since
+# the last update, increment current, and set revision to 0.
+#
+# 3. If any interfaces have been added since the last public
+# release, then increment age.
+#
+# 4. If any interfaces have been removed since the last public
+# release, then set age to 0.
+libmpl_so_version=1:0
diff --git a/src/mpi/romio/mpl/aclocal.m4 b/src/mpi/romio/mpl/aclocal.m4
new file mode 100644
index 0000000..abd5f4b
--- /dev/null
+++ b/src/mpi/romio/mpl/aclocal.m4
@@ -0,0 +1,1223 @@
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.15'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.15], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.15])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the archiver interface, and trigger the ar-lib wrapper
+# if it is needed. If the detection of archiver interface fails, run
+# ACT-IF-FAIL (default is to abort configure with a proper error message).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+ [AC_LANG_PUSH([C])
+ am_cv_ar_interface=ar
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+ [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=ar
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ am_cv_ar_interface=unknown
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+ ])
+ AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+ # similar.
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+unknown)
+ m4_default([$1],
+ [AC_MSG_ERROR([could not determine $AR interface])])
+ ;;
+esac
+AC_SUBST([AR])dnl
+])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([confdb/aclocal_cc.m4])
+m4_include([confdb/aclocal_coverage.m4])
+m4_include([confdb/aclocal_shm.m4])
+m4_include([confdb/aclocal_util.m4])
+m4_include([confdb/ax_prefix_config_h.m4])
+m4_include([confdb/ax_tls.m4])
+m4_include([confdb/libtool.m4])
+m4_include([confdb/ltoptions.m4])
+m4_include([confdb/ltsugar.m4])
+m4_include([confdb/ltversion.m4])
+m4_include([confdb/lt~obsolete.m4])
diff --git a/src/mpi/romio/mpl/confdb/aclocal.m4 b/src/mpi/romio/mpl/confdb/aclocal.m4
new file mode 100644
index 0000000..488feaa
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal.m4
@@ -0,0 +1,38 @@
+dnl This version of aclocal.m4 simply includes all of the individual
+dnl components
+builtin(include,aclocal_am.m4)
+builtin(include,aclocal_bugfix.m4)
+builtin(include,aclocal_cache.m4)
+builtin(include,aclocal_cc.m4)
+builtin(include,aclocal_atomic.m4)
+dnl aclocal_cross.m4 uses autoconf features dated back to 2.13.
+dnl too old to be useful, 07/14/2010.
+dnl builtin(include,aclocal_cross.m4)
+builtin(include,aclocal_cxx.m4)
+builtin(include,aclocal_f77.m4)
+dnl aclocal_f77old.m4 contains PAC_PROG_F77_CMDARGS which is NOT used in MPICH
+dnl but it is still used by other packages, so leave it in confdb.
+dnl builtin(include,aclocal_f77old.m4)
+builtin(include,aclocal_util.m4)
+builtin(include,aclocal_subcfg.m4)
+builtin(include,aclocal_make.m4)
+builtin(include,aclocal_mpi.m4)
+builtin(include,aclocal_shl.m4)
+dnl fortran90.m4 defines [Fortran 90] as an AC_LANG
+dnl which works for autoconf 2.63 and older, 07/14/2010.
+dnl builtin(include,fortran90.m4)
+builtin(include,aclocal_runlog.m4)
+builtin(include,aclocal_fc.m4)
+builtin(include,aclocal_libs.m4)
+builtin(include,aclocal_attr_alias.m4)
+builtin(include,ax_tls.m4)
+builtin(include,aclocal_romio.m4)
+dnl Add the libtool files that libtoolize wants
+dnl Comment these out until libtool support is enabled.
+dnl May need to change this anyway, since libtoolize
+dnl does not seem to understand builtin
+dnl builtin(include,libtool.m4)
+dnl builtin(include,ltoptions.m4)
+dnl builtin(include,ltversion.m4)
+dnl builtin(include,ltsugar.m4)
+dnl builtin(include,lt~obsolete.m4)
diff --git a/src/mpi/romio/mpl/confdb/aclocal_am.m4 b/src/mpi/romio/mpl/confdb/aclocal_am.m4
new file mode 100644
index 0000000..4d3b0de
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_am.m4
@@ -0,0 +1,6 @@
+dnl AM_IGNORE is an extension that tells (a patched) automake not to
+dnl include the specified AC_SUBST variable in the Makefile.in that
+dnl automake generates. We don't use AC_DEFUN, since aclocal will
+dnl then complain that AM_IGNORE is a duplicate (if you are using the
+dnl patched automake/aclocal).
+m4_ifdef([AM_IGNORE],[],[m4_define([AM_IGNORE],[])])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_atomic.m4 b/src/mpi/romio/mpl/confdb/aclocal_atomic.m4
new file mode 100644
index 0000000..4e96cfb
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_atomic.m4
@@ -0,0 +1,227 @@
+dnl /*D PAC_C_MEMATOMIC - Try and determine how to implement memory-atomic
+dnl operations with the selected C compiler
+dnl
+dnl Synopsis:
+dnl PAC_C_MEMATOMIC
+dnl
+dnl Notes:
+dnl Defines names of the following form
+dnl + HAVE_GCC_ASM_AND_X86_{MFENCE,LFENCE,SFENCE} - gcc __asm__ will issue
+dnl mfence, lfence, or sfence
+dnl . HAVE___ASM_AND_X86_{MFENCE,LFENCE,SFENCE} - __asm _emit will issue
+dnl mfence, lfence, or sfence
+dnl . HAVE_ASM_AND_X86_{MFENCE,LFENCE,SFENCE} - asm("...") will issue
+dnl mfence, lfence, or sfence
+dnl . HAVE__INTERLOCKEDEXCHANGE - _InterlockedExchange intrinsic is available
+dnl (IA64)
+dnl . HAVE_GCC_ASM_SPARC_MEMBAR - gcc __asm__ will issue SPARC architecture
+dnl memory barrier instruction
+dnl . HAVE_SOLARIS_ASM_SPARC_MEMBAR - Solaris asm() will issue SPARC
+dnl architecture memory barrier instruction
+dnl . HAVE_GCC_ASM_SPARC_STBAR - gcc __asm__ will issue stbar
+dnl - HAVE_SOLARIS_ASM_SPARC_STBAR - Solaris __asm() will issue stbar
+dnl
+dnl D*/
+AC_DEFUN([PAC_C_MEMATOMIC],[
+AC_CACHE_CHECK([for x86 mfence instruction using __asm__],
+ pac_cv_have_gcc_asm_and_x86_mfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ __asm__ __volatile__ ( ".byte 0x0f, 0xae, 0xf0" ::: "memory" );
+ exit(0);
+}
+],
+pac_cv_have_gcc_asm_and_x86_mfence=yes,pac_cv_have_gcc_asm_and_x86_mfence=no)])
+
+if test "$pac_cv_have_gcc_asm_and_x86_mfence" = "yes" ; then
+ AC_DEFINE(HAVE_GCC_ASM_AND_X86_MFENCE, 1, [Define if using gcc on a x86 system with the mfence instruction])
+fi
+
+AC_CACHE_CHECK([for x86 sfence instruction using __asm__],
+ pac_cv_have_gcc_asm_and_x86_sfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ __asm__ __volatile__ ( ".byte 0x0f, 0xae, 0xf8" ::: "memory" );
+ exit(0);
+}
+],
+pac_cv_have_gcc_asm_and_x86_sfence=yes,pac_cv_have_gcc_asm_and_x86_sfence=no)])
+
+if test "$pac_cv_have_gcc_asm_and_x86_sfence" = "yes" ; then
+ AC_DEFINE(HAVE_GCC_ASM_AND_X86_SFENCE, 1, [Define if using gcc on a x86 system with the sfence instruction])
+fi
+
+AC_CACHE_CHECK([for x86 lfence instruction using __asm__],
+ pac_cv_have_gcc_asm_and_x86_lfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ __asm__ __volatile__ ( ".byte 0x0f, 0xae, 0xe8" ::: "memory" );
+ exit(0);
+}
+],
+pac_cv_have_gcc_asm_and_x86_lfence=yes,pac_cv_have_gcc_asm_and_x86_lfence=no)])
+
+if test "$pac_cv_have_gcc_asm_and_x86_lfence" = "yes" ; then
+ AC_DEFINE(HAVE_GCC_ASM_AND_X86_LFENCE, 1, [Define if using gcc on a x86 system with the lfence instruction])
+fi
+
+dnl Some compilers, like icc, may want __asm _emit
+AC_CACHE_CHECK([for x86 mfence instruction using __asm],
+ pac_cv_have___asm_and_x86_mfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ __asm _emit 0x0f __asm _emit 0xae __asm _emit 0xf0 ;
+ exit(0);
+}
+],
+pac_cv_have___asm_and_x86_mfence=yes,pac_cv_have___asm_and_x86_mfence=no)])
+
+if test "$pac_cv_have___asm_and_x86_mfence" = "yes" ; then
+ AC_DEFINE(HAVE___ASM_AND_X86_MFENCE, 1, [Define if using __asm on a x86 system with the mfence instruction])
+fi
+
+AC_CACHE_CHECK([for x86 sfence instruction using __asm],
+ pac_cv_have___asm_and_x86_sfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ __asm sfence ;
+ exit(0);
+}
+],
+pac_cv_have___asm_and_x86_sfence=yes,pac_cv_have___asm_and_x86_sfence=no)])
+
+if test "$pac_cv_have___asm_and_x86_sfence" = "yes" ; then
+ AC_DEFINE(HAVE___ASM_AND_X86_SFENCE, 1, [Define if using __asm on a x86 system with the sfence instruction])
+fi
+
+AC_CACHE_CHECK([for x86 lfence instruction using __asm],
+ pac_cv_have___asm_and_x86_lfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ __asm _emit 0x0f __asm _emit 0xae __asm _emit 0xe8 ;
+ exit(0);
+}
+],
+pac_cv_have___asm_and_x86_lfence=yes,pac_cv_have___asm_and_x86_lfence=no)])
+
+if test "$lac_cv_have___asm_and_x86_lfence" = "yes" ; then
+ AC_DEFINE(HAVE___ASM_AND_X86_LFENCE, 1, [Define if using __asm on a x86 system with the lfence instruction])
+fi
+
+dnl
+dnl Some compilers, such as pgcc, may require additional arguments.
+dnl pgcc may need -Masmkeyword flag. We may want to try this with and
+dnl without adding -Masmkeyword to CFLAGS
+
+AC_CACHE_CHECK([for x86 mfence instruction using asm()],
+ pac_cv_have_asm_and_x86_mfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ asm("_emit 0x0f __asm _emit 0xae __asm _emit 0xf0");
+ exit(0);
+}
+],
+pac_cv_have_asm_and_x86_mfence=yes,pac_cv_have_asm_and_x86_mfence=no)])
+
+if test "$pac_cv_have_asm_and_x86_mfence" = "yes" ; then
+ AC_DEFINE(HAVE_ASM_AND_X86_MFENCE, 1, [Define if using asm() on a x86 system with the mfence instruction])
+fi
+
+AC_CACHE_CHECK([for x86 sfence instruction using asm()],
+ pac_cv_have_asm_and_x86_sfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ asm("sfence");
+ exit(0);
+}
+],
+pac_cv_have_asm_and_x86_sfence=yes,pac_cv_have_asm_and_x86_sfence=no)])
+
+if test "$pac_cv_have_asm_and_x86_sfence" = "yes" ; then
+ AC_DEFINE(HAVE_ASM_AND_X86_SFENCE, 1, [Define if using asm() on a x86 system with the sfence instruction])
+fi
+
+AC_CACHE_CHECK([for x86 lfence instruction using asm()],
+ pac_cv_have_asm_and_x86_lfence,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ asm("_emit 0x0f __asm _emit 0xae __asm _emit 0xe8");
+ exit(0);
+}
+],
+pac_cv_have_asm_and_x86_lfence=yes,pac_cv_have_asm_and_x86_lfence=no)])
+
+if test "$pac_cv_have_asm_and_x86_lfence" = "yes" ; then
+ AC_DEFINE(HAVE_ASM_AND_X86_LFENCE, 1, [Define if using asm() on a x86 system with the lfence instruction])
+fi
+
+AC_CACHE_CHECK([for _InterlockedExchange intrinsic],
+ pac_cv_have__InterlockedExchange,[
+AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+ unsigned long lock, *lock_ptr;
+ lock_ptr = &lock;
+ _InterlockedExchange(lock_ptr, 1);
+ exit(0);
+}
+],
+pac_cv_have__InterlockedExchange=yes,pac_cv_have__InterlockedExchange=no)])
+
+if test "$pac_cv_have__InterlockedExchange" = "yes" ; then
+ AC_DEFINE(HAVE__INTERLOCKEDEXCHANGE, 1, [Define if _InterlockedExchange intrinsic is available])
+fi
+
+AC_CACHE_CHECK([for SPARC membar instruction with gcc],
+ pac_cv_gcc_sparc_membar,[
+AC_TRY_RUN([
+int main(int argc, char **argv){
+ __asm__ __volatile__ ( "membar #StoreLoad | #StoreStore" : : : "memory" );
+ exit(0);
+}],pac_cv_gcc_sparc_membar=yes,pac_cv_gcc_sparc_membar=no)])
+if test "$pac_cv_gcc_sparc_membar" = yes ; then
+ AC_DEFINE(HAVE_GCC_ASM_SPARC_MEMBAR,1,[Define if gcc asm membar supported])
+fi
+
+AC_CACHE_CHECK([for SPARC membar instruction with Solaris C],
+ pac_cv_solaris_sparc_membar,[
+AC_TRY_RUN([
+int main(int argc, char **argv){
+ __asm ( "membar #StoreLoad | #StoreStore");
+ exit(0);
+}],pac_cv_solaris_sparc_membar=yes,pac_cv_solaris_sparc_membar=no)])
+if test "$pac_cv_solaris_sparc_membar" = yes ; then
+ AC_DEFINE(HAVE_SOLARIS_ASM_SPARC_MEMBAR,1,[Define if solaris asm membar supported])
+fi
+
+AC_CACHE_CHECK([for SPARC stbar instruction with gcc],
+ pac_cv_gcc_sparc_stbar,[
+AC_TRY_RUN([
+int main(int argc, char **argv){
+ __asm__ __volatile__ ( "stbar" : : : "memory" );
+ exit(0);
+}],pac_cv_gcc_sparc_stbar=yes,pac_cv_gcc_sparc_stbar=no)])
+if test "$pac_cv_gcc_sparc_stbar" = yes ; then
+ AC_DEFINE(HAVE_GCC_ASM_SPARC_STBAR,1,[Define if gcc asm stbar supported])
+fi
+
+AC_CACHE_CHECK([for SPARC stbar instruction with Solaris C],
+ pac_cv_solaris_sparc_stbar,[
+AC_TRY_RUN([
+int main(int argc, char **argv){
+ __asm ( "stbar" );
+ exit(0);
+}],pac_cv_solaris_sparc_stbar=yes,pac_cv_solaris_sparc_stbar=no)])
+if test "$pac_cv_solaris_sparc_stbar" = yes ; then
+ AC_DEFINE(HAVE_SOLARIS_ASM_SPARC_STBAR,1,[Define if solaris asm stbar supported])
+fi
+])
\ No newline at end of file
diff --git a/src/mpi/romio/mpl/confdb/aclocal_attr_alias.m4 b/src/mpi/romio/mpl/confdb/aclocal_attr_alias.m4
new file mode 100644
index 0000000..32f0165
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_attr_alias.m4
@@ -0,0 +1,504 @@
+dnl
+dnl Check for BSD or POSIZ style global symbol lister, nm.
+dnl If found, pac_path_NM_G contains the absolute athname of nm + options
+dnl pac_path_NM_G_type will be either POSIX or BSD. NM_G will be
+dnl pac_path_NM_G without the absolute path. Preference is BSD style.
+dnl
+dnl The test checks if nm accepts the known options and also if nm produces
+dnl the expected BSD or POSIX output format.
+dnl
+AC_DEFUN([PAC_PATH_NM_G],[
+AC_MSG_CHECKING([for BSD/POSIX style global symbol lister])
+AC_LANG_PUSH(C)
+AC_PATH_PROGS_FEATURE_CHECK(NM_G, nm, [
+ # Check if nm accepts -g and BSD or POSIX compatible flag.
+ # Use the `sed 1q' to avoid HP-UX's unknown option message:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ #
+ # AIX's sed does not accept \+, 1) instead of doing 's|a\+||', do 's|aa*||'
+ # or 2) instead of 's|A \+B|AB|g', do 's|A *B|AB|g'
+
+ # Check if nm accepts -g
+ case `${ac_path_NM_G} -g /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ ac_path_NM_G="${ac_path_NM_G} -g"
+ # Check if nm accepts -B
+ case `${ac_path_NM_G} -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([int iglobal;])
+ ],[
+ changequote(,)
+ case `${ac_path_NM_G} -B conftest.$OBJEXT | sed -e 's|[0-9][0-9]* *[A-Z] *iglobal|XXXX|g'` in
+ *XXXX*)
+ pac_path_NM_G="${ac_path_NM_G} -B"
+ pac_path_NM_G_type="BSD"
+ ;;
+ esac
+ changequote([,])
+ ])
+ ;;
+ *)
+ # Check if nm accepts -P
+ case `${ac_path_NM_G} -P /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([int iglobal;])
+ ],[
+ changequote(,)
+ case `${ac_path_NM_G} -P conftest.$OBJEXT | sed -e 's|iglobal *[A-Z] *[0-9][0-9]*|XXXX|g'` in
+ *XXXX*)
+ pac_path_NM_G="${ac_path_NM_G} -P"
+ pac_path_NM_G_type="POSIX"
+ ;;
+ esac
+ changequote([,])
+ ])
+ ;;
+ esac # Endof case `${ac_path_NM_G} -P
+ ;;
+ esac # Endof case `${ac_path_NM_G} -B
+ ;;
+ esac # Endof case `${ac_path_NM_G} -g
+ if test "X$pac_path_NM_G" != "X" ; then
+ AC_MSG_RESULT([$pac_path_NM_G_type style,$pac_path_NM_G])
+ NM_G="`echo $pac_path_NM_G | sed -e 's|^.*nm |nm |g'`"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ ac_cv_path_NM_G=${ac_path_NM_G}
+ ac_path_NM_G_found=:
+], [AC_MSG_RESULT(no)],
+[$PATH$PATH_SEPARATOR/usr/ccs/bin/elf$PATH_SEPARATOR/usr/ccs/bin$PATH_SEPARATOR/usr/ucb$PATH_SEPARATOR/bin])
+AC_LANG_POP(C)
+]) dnl Endof AC_DEFUN([PAC_PATH_NM_G]
+dnl
+dnl PAC_C_MULTI_ATTR_ALIAS()
+dnl
+dnl The checks if multiple __attribute__((alias)) is available
+dnl If the multiple __attribute((alias)) support is found,
+dnl pac_c_multi_attr_alias=yes is set.
+dnl
+dnl The default is to do a runtime test. When cross_compiling=yes,
+dnl pac_path_NM_G will be used to determine the test result.
+dnl If CFLAGS(or CPPFLAGS) contains ATTR_ALIAS_DEBUG, the runtime will print
+dnl out addresses of struct(s) for debugging purpose.
+dnl
+dnl
+AC_DEFUN([PAC_C_MULTI_ATTR_ALIAS],[
+AC_REQUIRE([PAC_PATH_NM_G])
+AC_LANG_PUSH(C)
+AC_CHECK_HEADERS([stdio.h])
+AC_MSG_CHECKING([for multiple __attribute__((alias)) support])
+
+#Compile the "other" __attribute__ object file.
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+
+struct mpif_cmblk_t_ { int imember; };
+typedef struct mpif_cmblk_t_ mpif_cmblk_t;
+
+/* NOT initialize these structure so it appears in BSS or as COMMON symbols */
+mpif_cmblk_t mpifcmb;
+mpif_cmblk_t MPIFCMB;
+
+/*
+ Do the test in this file instead in the file
+ where __attribute__((alias)) is used.
+ This is needed for pgcc since pgcc seems to
+ define aliased symbols if they are in the same file.
+*/
+/*
+ We can't do the following comparision in one test:
+
+ ilogical = (( &mpifcmb == ptr && &MPIFCMB == ptr ) ? TRUE : FALSE) ;
+
+ because some compiler, like gcc 4.4.2's -O* optimizes the code
+ such that the ilogical expression is FALSE. The likely reason is that
+ mpifcmb and MPIFCMB are defined in the same scope in which C optimizer
+ may have treated them as different objects (with different addresses),
+ &mpifcmb != &MPIFCMB, before actually running the test and hence the
+ illogical expression is assumed to be always FALSE. The solution taken
+ here is to prevent the optimizer the opportunity to equate &mpifcmb and
+ &MPIFCMB (in same scope), e.g. using 2 separate tests and combine the
+ test results in a different scope.
+*/
+int same_addrs1( void *ptr );
+int same_addrs1( void *ptr )
+{
+#if defined(ATTR_ALIAS_DEBUG)
+ printf( "others: addr(mpifcmb)=%p, addr(input ptr)=%p\n", &mpifcmb, ptr );
+#endif
+ return ( &mpifcmb == ptr ? 1 : 0 );
+}
+
+int same_addrs2( void *ptr );
+int same_addrs2( void *ptr )
+{
+#if defined(ATTR_ALIAS_DEBUG)
+ printf( "others: addr(MPIFCMB)=%p, addr(input ptr)=%p\n", &MPIFCMB, ptr );
+#endif
+ return ( &MPIFCMB == ptr ? 1 : 0 );
+}
+
+ ])
+],[
+ rm -f pac_conftest_other.$OBJEXT
+ PAC_RUNLOG([cp conftest.$OBJEXT pac_conftest_other.$OBJEXT])
+ test -s pac_conftest_other.$OBJEXT && pac_c_attr_alias_other=yes
+dnl cp conftest.$ac_ext pac_conftest_other.$ac_ext
+dnl echo
+dnl echo "pac_conftest_other.$OBJEXT"
+dnl nm -P -g pac_conftest_other.$OBJEXT | grep -i "mpifcmb"
+],[
+ pac_c_attr_alias_other=no
+]) dnl Endof AC_COMPILE_IFELSE
+
+pac_c_attr_alias_main=no
+if test "$pac_c_attr_alias_other" = "yes" ; then
+
+# Push LIBS for later restoration.
+ PAC_PUSH_FLAG([LIBS])
+ LIBS="pac_conftest_other.$OBJEXT $LIBS"
+
+# Link the "other" __attribute__ object file.
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+
+struct mpif_cmblk_t_ { int imember; };
+typedef struct mpif_cmblk_t_ mpif_cmblk_t;
+
+mpif_cmblk_t mpifcmbr = {0};
+extern mpif_cmblk_t MPIFCMB __attribute__ ((alias("mpifcmbr")));
+extern mpif_cmblk_t mpifcmb __attribute__ ((alias("mpifcmbr")));
+
+extern int same_addrs1( void *ptr );
+extern int same_addrs2( void *ptr );
+
+ ],[
+ int iaddr = 0;
+#if defined(ATTR_ALIAS_DEBUG)
+ printf( "main: addr(mpifcmbr) = %p\n", &mpifcmbr );
+ printf( "main: addr(mpifcmb) = %p\n", &mpifcmb );
+ printf( "main: addr(MPIFCMB) = %p\n", &MPIFCMB );
+#endif
+ iaddr = same_addrs1( &mpifcmbr ) && same_addrs2( &mpifcmbr );
+ FILE *file = fopen( "pac_conftestval", "w" );
+ if (!file) return 1;
+ fprintf( file, "%d\n", iaddr );
+ ])
+ ],[
+ rm -f pac_conftest_main$EXEEXT
+ PAC_RUNLOG([cp conftest$EXEEXT pac_conftest_main$EXEEXT])
+ test -x pac_conftest_main$EXEEXT && pac_c_attr_alias_main=yes
+dnl cp conftest.$ac_ext pac_conftest_main.$ac_ext
+dnl echo
+dnl echo "pac_conftest_main$EXEEXT"
+dnl nm -P -g pac_conftest_main$EXEEXT | grep -i "mpifcmb"
+ ],[
+ pac_c_attr_alias_main=no
+dnl cp conftest.$ac_ext pac_conftest_main.$ac_ext
+ ]) dnl Endof AC_LINK_IFELSE
+
+# Restore the previously pushed LIBS
+ PAC_POP_FLAG([LIBS])
+ rm -f pac_conftest_other.$OBJEXT
+fi dnl Endof if test "$pac_c_attr_alias_other" = "yes"
+
+if test "$pac_c_attr_alias_main" = "yes" ; then
+ if test "$cross_compiling" = "yes" ; then
+ changequote(,)
+ # echo "PAC CROSS-COMPILING" dnl
+ # POSIX NM = nm -P format dnl
+ if test "$pac_path_NM_G_type" = "POSIX" ; then
+ addrs=`${pac_path_NM_G} ./pac_conftest_main$EXEEXT | grep -i mpifcmb | sed -e 's% *[a-zA-Z][a-zA-Z]* *[a-zA-Z] *\([0-9abcdef][0-9abcdef]*\).*%\1%g'`
+ fi
+
+ # BSD NM = nm -B format dnl
+ if test "$pac_path_NM_G_type" = "BSD" ; then
+ addrs=`${pac_path_NM_G} -g ./pac_conftest_main$EXEEXT | grep -i mpifcmb | sed -e "s% *\([0-9abcdef][0-9abcdef]*\) *[a-zA-Z] *[a-zA-Z][a-zA-A]*.*%\1%g"`
+ fi
+ changequote([,])
+
+ cmp_addr=""
+ diff_addrs=no
+ for addr in ${addrs} ; do
+ if test "X${cmp_addr}" != "X" ; then
+ if test "${cmp_addr}" != "${addr}" ; then
+ diff_addrs=yes
+ break
+ fi
+ else
+ cmp_addr=${addr}
+ fi
+ done
+
+ if test "$diff_addrs" != "yes" ; then
+ dnl echo "Same addresses. Multiple aliases support"
+ AC_MSG_RESULT([${NM_G} says yes])
+ pac_c_multi_attr_alias=yes
+ else
+ dnl echo "Different addresses. No multiple aliases support."
+ AC_MSG_RESULT([${NM_G} says no])
+ pac_c_multi_attr_alias=no
+ fi
+
+ else # if test "$cross_compiling" != "yes"
+ rm -f pac_conftestval
+ ac_try="./pac_conftest_main$EXEEXT"
+ if AC_TRY_EVAL(ac_try) ; then
+ pac_c_attr_alias_val=0
+ if test -s pac_conftestval ; then
+ eval pac_c_attr_alias_val=`cat pac_conftestval`
+ fi
+ if test "$pac_c_attr_alias_val" -eq 1 ; then
+ AC_MSG_RESULT(yes)
+ pac_c_multi_attr_alias=yes
+ else
+ AC_MSG_RESULT(no)
+ pac_c_multi_attr_alias=no
+ fi
+ rm -f pac_conftestval
+ fi
+ fi
+ dnl Endof if test "$cross_compiling" = "yes"
+ rm -f pac_conftest_main$EXEEXT
+else
+ AC_MSG_RESULT(no! link failure)
+ pac_c_multi_attr_alias=no
+fi dnl Endof if test "$pac_c_attr_alias_main" = "yes"
+
+AC_LANG_POP(C)
+
+]) dnl Endof AC_DEFUN([PAC_C_MULTI_ATTR_ALIAS]
+dnl
+dnl PAC_C_ATTR_ALIGNED()
+dnl
+dnl Check if __attribute__((aligned)) support is there.
+dnl If so, set pac_c_attr_aligned=yes.
+dnl
+dnl Do a link test instead of compile test to check if the linker
+dnl would emit an error.
+dnl
+AC_DEFUN([PAC_C_ATTR_ALIGNED],[
+AC_LANG_PUSH(C)
+AC_MSG_CHECKING([for __attribute__((aligned)) support])
+#Link the __attribute__ object file.
+AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+struct mpif_cmblk_t_ { int imembers[5]; };
+typedef struct mpif_cmblk_t_ mpif_cmblk_t;
+mpif_cmblk_t mpifcmbr __attribute__((aligned)) = {0};
+ ],[])
+],[pac_c_attr_aligned=yes], [pac_c_attr_aligned=no])
+AC_MSG_RESULT([$pac_c_attr_aligned])
+AC_LANG_POP(C)
+])
+dnl
+dnl PAC_F2C_ATTR_ALIGNED_SIZE(ARRAY_SIZE, [OUTPUT_VAR], [MIN_ALIGNMENT])
+dnl
+dnl ARRAY_SIZE : Size of the integer array within the fortran commmon block.
+dnl OUTPUT_VAR : Optional variable to be set.
+dnl if test succeeds, set OUTPUT_VAR=$pac_f2c_attr_aligned_str.
+dnl if test fails, set OUTPUT_VAR="unknown".
+dnl MIN_ALIGNMENT : Optional value.
+dnl Minimum alignment size to be used in OUTPUT_VAR.
+dnl pac_f2c_attr_aligned_str won't be modified.
+dnl
+dnl "pac_f2c_attr_aligned_str" will be set with
+dnl 1) __attribute__((aligned(ALIGNMENT_SIZE))),
+dnl 2) __attribute__((aligned)).
+dnl 3) "", i.e. empty string.
+dnl
+dnl 2) means the test can't find a good alignment value, but both the Fortran
+dnl and C compilers are OK with "aligned" which in principle means the C
+dnl compiler will pick the maximum useful alignment supported by the
+dnl architecture.
+dnl 3) means that the test has failed to find the alignment.
+dnl
+AC_DEFUN([PAC_F2C_ATTR_ALIGNED_SIZE],[
+cmblksize=$1
+AC_MSG_CHECKING([the minimum alignment of Fortran common block of $cmblksize integers])
+dnl To find the minmium alignment of Fortran common block (of integer array)
+dnl as seen by C object file, C object files of various (typical) alignments
+dnl are linked to the Fortran code using the common block of integer array.
+#
+dnl Since the incorrect alignment results only a warning messages from the
+dnl fortran compiler(or linker), so we use "diff" to compare the fortran
+dnl compiler/linker output. We cannot use AC_LANG_WERROR,
+dnl i.e. ac_fc_werror_flag=yes, because compiler like pgf77 at version 10.x)
+dnl has non-zero stderr output if a fortran program is used in the linking.
+dnl The stderr contains the name of fortran program even if the linking is
+dnl successful. We could avoid the non-zero stderr output in pgf77 by
+dnl compiling everthing into object files and linking all the object files
+dnl with pgf77. Doing that would need us to use AC_TRY_EVAL instead of
+dnl AC_LINK_IFELSE, so "diff" approach is used instead.
+#
+dnl Using diff of compiler(linker) output requires a reference output file
+dnl as the base of diff. The process of creating this reference output file
+dnl has to be exactly the same as the testing process, because pgf77 has
+dnl the following weird behavour
+dnl pgf77 -o ftest ftest.f => when $?=0 with zero stderr output
+dnl pgf77 -o ftest ftest.f dummy.o => when $?=0 with non-zero stderr output.
+dnl stderr has "ftest.f:".
+dnl
+# First create a fortran CONFTEST which will be used repeatedly.
+AC_LANG_PUSH([Fortran]) dnl AC_LANG_PUSH([Fortran 77])
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program fconftest
+ integer isize
+ parameter (isize=$cmblksize)
+ integer status_array(isize)
+ common /mpifcmb/ status_array
+ save /mpifcmb/
+ end
+ ])
+])
+AC_LANG_POP([Fortran]) dnl AC_LANG_POP([Fortran 77])
+dnl
+dnl
+dnl
+# Compile a C dummy.$OBJEXT and link with Fortran test program to create
+# a reference linker output file, pac_align0.log, as the base of "diff".
+AC_LANG_PUSH([C])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],[
+ cp conftest.$ac_ext pac_conftest.c
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ PAC_PUSH_FLAG([LIBS])
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ AC_LANG_PUSH([Fortran]) dnl AC_LANG_PUSH([Fortran 77])
+ PAC_PUSH_FLAG([ac_link])
+ ac_link="`echo $ac_link | sed -e 's|>.*$|> $pac_logfile 2>\&1|g'`"
+ pac_logfile="pac_align0.log"
+ rm -f $pac_logfile
+ AC_LINK_IFELSE([],[
+ pac_f2c_alignedn_diffbase=yes
+ ],[
+ pac_f2c_alignedn_diffbase=no
+ ])
+ # Be sure NOT to remove the conftest.f which is still needed for later use.
+ # rm -f conftest.$ac_ext
+ # Restore everything in autoconf that has been overwritten
+ PAC_POP_FLAG([ac_link])
+ # restore previously pushed LIBS
+ PAC_POP_FLAG([LIBS])
+ AC_LANG_POP([Fortran]) dnl AC_LANG_POP([Fortran 77])
+],[
+ pac_f2c_alignedn_diffbase=no
+])
+AC_LANG_POP([C])
+dnl
+dnl
+if test "$pac_f2c_alignedn_diffbase" = "yes" ; then
+ # Initialize pac_result_str to empty string since part of the test
+ # depends on pac_result_str is empty or non-empty string.
+ pac_result_str=""
+ # Initialize pac_f2c_attr_aligned_str to empty string and
+ # it will remain as empty string if the following test fails.
+ pac_f2c_attr_aligned_str=""
+ for asize in 4 8 16 32 64 128 max ; do
+ if test "$asize" != "max" ; then
+ pac_attr_aligned_str="__attribute__((aligned($asize)))"
+ else
+ pac_attr_aligned_str="__attribute__((aligned))"
+ fi
+ AC_LANG_PUSH([C])
+ #Compile the __attribute__ object file.
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+changequote(,)
+struct mpif_cmblk_t_ { $MPI_FINT imembers[$cmblksize]; };
+changequote([,])
+typedef struct mpif_cmblk_t_ mpif_cmblk_t;
+mpif_cmblk_t mpifcmbr $pac_attr_aligned_str = {0};
+
+extern mpif_cmblk_t _CMPIFCMB __attribute__ ((alias("mpifcmbr")));
+extern mpif_cmblk_t MPIFCMB __attribute__ ((alias("mpifcmbr")));
+extern mpif_cmblk_t MPIFCMB_ __attribute__ ((alias("mpifcmbr")));
+extern mpif_cmblk_t _Cmpifcmb __attribute__ ((alias("mpifcmbr")));
+extern mpif_cmblk_t mpifcmb __attribute__ ((alias("mpifcmbr")));
+extern mpif_cmblk_t mpifcmb_ __attribute__ ((alias("mpifcmbr")));
+ ])
+ ],[
+ cp conftest.$ac_ext pac_conftest.c
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ PAC_PUSH_FLAG([LIBS])
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ AC_LANG_PUSH([Fortran]) dnl AC_LANG_PUSH([Fortran 77])
+ PAC_PUSH_FLAG([ac_link])
+ ac_link="`echo $ac_link | sed -e 's|>.*$|> $pac_logfile 2>\&1|g'`"
+ pac_logfile="pac_align1.log"
+ rm -f $pac_logfile
+ # Use conftest.f created in CONFTEST.
+ AC_LINK_IFELSE([],[
+ PAC_RUNLOG_IFELSE([diff -b pac_align0.log pac_align1.log],[
+ pac_attr_alignedn=yes
+ ],[
+ pac_attr_alignedn=no
+ cat $pac_logfile >&AS_MESSAGE_LOG_FD
+ echo "failed C program was:" >&AS_MESSAGE_LOG_FD
+ cat pac_conftest.c >&AS_MESSAGE_LOG_FD
+ echo "failed Fortran program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+ ])
+ ],[
+ pac_attr_alignedn=no
+ ])
+ # Restore everything in autoconf that has been overwritten
+ PAC_POP_FLAG([ac_link])
+ # restore previously pushed LIBS
+ PAC_POP_FLAG([LIBS])
+ AC_LANG_POP([Fortran]) dnl AC_LANG_POP([Fortran 77])
+ # remove previously generated object file and C file.
+ rm -f pac_conftest.$OBJEXT pac_conftest.c
+ rm -f $pac_logfile
+ if test "$pac_attr_alignedn" = yes ; then
+ ifelse([$3],[],[
+ pac_result_str="$asize"
+ pac_f2c_attr_aligned_str="$pac_attr_aligned_str"
+ break
+ ],[
+ if test "$asize" != "max" -a "$asize" -lt "$3" ; then
+ if test "X$pac_result_str" = "X" ; then
+ pac_result_str="$asize"
+ pac_f2c_attr_aligned_str="$pac_attr_aligned_str"
+ fi
+ continue
+ else
+ pac_f2c_attr_aligned_str="$pac_attr_aligned_str"
+ if test "X$pac_result_str" != "X" ; then
+ pac_result_str="$pac_result_str, too small! reset to $asize"
+ else
+ pac_result_str="$asize"
+ fi
+ break
+ fi
+ ])
+ fi
+ ], [
+ pac_attr_alignedn=no
+ ])
+ AC_LANG_POP([C])
+ done
+ ifelse([$2],[],[],[$2="$pac_f2c_attr_aligned_str"])
+else
+ pac_result_str=""
+ # Since the test fails, set pac_f2c_attr_aligned_str to empty string.
+ pac_f2c_attr_aligned_str=""
+fi
+if test "X$pac_result_str" != "X" ; then
+ AC_MSG_RESULT([$pac_result_str])
+else
+ AC_MSG_RESULT([unknown])
+fi
+rm -f pac_align0.log
+])
+dnl
diff --git a/src/mpi/romio/mpl/confdb/aclocal_bugfix.m4 b/src/mpi/romio/mpl/confdb/aclocal_bugfix.m4
new file mode 100644
index 0000000..f580d39
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_bugfix.m4
@@ -0,0 +1,75 @@
+dnl This internal macro fails to work properly with OTHER internal macros.
+dnl Basically, if the prologue is [], then no message should be generated.
+dnl This macro is in autoconf 2.52
+m4_define([AC_LANG_PROGRAM(Fortran 77)],
+[m4_if([$1],[[[]]],,[m4_ifval([$1],
+ [m4_warn([syntax], [$0: ignoring PROLOGUE: $1])])])dnl
+ program main
+$2
+ end])
+
+
+dnl/*D
+dnl PAC_PROG_CHECK_INSTALL_WORKS - Check whether the install program in INSTALL
+dnl works.
+dnl
+dnl Synopsis:
+dnl PAC_PROG_CHECK_INSTALL_WORKS
+dnl
+dnl Output Effect:
+dnl Sets the variable 'INSTALL' to the value of 'ac_sh_install' if
+dnl a file cannot be installed into a local directory with the 'INSTALL'
+dnl program
+dnl
+dnl Notes:
+dnl The 'AC_PROG_INSTALL' scripts tries to avoid broken versions of
+dnl install by avoiding directories such as '/usr/sbin' where some
+dnl systems are known to have bad versions of 'install'. Unfortunately,
+dnl this is exactly the sort of test-on-name instead of test-on-capability
+dnl that 'autoconf' is meant to eliminate. The test in this script
+dnl is very simple but has been adequate for working around problems
+dnl on Solaris, where the '/usr/sbin/install' program (known by
+dnl autoconf to be bad because it is in /usr/sbin) is also reached by a
+dnl soft link through /bin, which autoconf believes is good.
+dnl
+dnl No variables are cached to ensure that we do not make a mistake in
+dnl our choice of install program.
+dnl
+dnl The Solaris configure requires the directory name to immediately
+dnl follow the '-c' argument, rather than the more common
+dnl.vb
+dnl args sourcefiles destination-dir
+dnl.ve
+dnl D*/
+AC_DEFUN([PAC_PROG_CHECK_INSTALL_WORKS],[
+if test -z "$INSTALL" ; then
+ AC_MSG_RESULT([No install program available])
+else
+ # first make any "confdb/install-sh -c" into an absolute path
+ # this is a hack, but it's still much cleaner than anything else I could
+ # come up with (see tt#1007) [goodell@]
+ AS_CASE(["$INSTALL"],
+ [/*],[:],
+ [*install-sh*],[INSTALL="$master_top_srcdir/$INSTALL"])
+
+ # Check that this install really works
+ rm -f conftest
+ echo "Test file" > conftest
+ if test ! -d .conftest ; then mkdir .conftest ; fi
+ AC_MSG_CHECKING([whether install works])
+ if $INSTALL conftest .conftest >/dev/null 2>&1 ; then
+ installOk=yes
+ else
+ installOk=no
+ fi
+ rm -rf .conftest conftest
+ AC_MSG_RESULT($installOk)
+ if test "$installOk" = no ; then
+ if test -n "$ac_install_sh" ; then
+ INSTALL=$ac_install_sh
+ else
+ AC_MSG_ERROR([Unable to find working install])
+ fi
+ fi
+fi
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_cache.m4 b/src/mpi/romio/mpl/confdb/aclocal_cache.m4
new file mode 100644
index 0000000..9d02c41
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_cache.m4
@@ -0,0 +1,372 @@
+dnl
+dnl/*D
+dnl AC_CACHE_LOAD - Replacement for autoconf cache load
+dnl
+dnl Notes:
+dnl Caching in autoconf is broken (at least through version 2.13).
+dnl The problem is that the cache is read
+dnl without any check for whether it makes any sense to read it.
+dnl A common problem is a build on a shared file system; connecting to
+dnl a different computer and then building within the same directory will
+dnl lead to at best error messages from configure and at worse a build that
+dnl is wrong but fails only at run time (e.g., wrong datatype sizes used).
+dnl Later versions of autoconf do include some checks for changes in the
+dnl environment that impact the choices, but still misses problems with
+dnl multiple different systems.
+dnl
+dnl This fixes that by requiring the user to explicitly enable caching
+dnl before the cache file will be loaded.
+dnl
+dnl To use this version of 'AC_CACHE_LOAD', you need to include
+dnl 'aclocal_cache.m4' in your 'aclocal.m4' file. The sowing 'aclocal.m4'
+dnl file includes this file.
+dnl
+dnl If no --enable-cache or --disable-cache option is selected, the
+dnl command causes configure to keep track of the system being configured
+dnl in a config.system file; if the current system matches the value stored
+dnl in that file (or there is neither a config.cache nor config.system file),
+dnl configure will enable caching. In order to ensure that the configure
+dnl tests make sense, the values of CC, F77, F90, and CXX are also included
+dnl in the config.system file. In addition, the value of PATH is included
+dnl to ensure that changes in the PATH that might select a different version
+dnl of a program with the same name (such as a native make versus gnumake)
+dnl are detected.
+dnl
+dnl Bugs:
+dnl This does not work with the Cygnus configure because the enable arguments
+dnl are processed *after* AC_CACHE_LOAD (!). To address this, we avoid
+dnl changing the value of enable_cache, and use real_enable_cache, duplicating
+dnl the "notgiven" value.
+dnl
+dnl The environment variable CONFIGURE_DEBUG_CACHE, if set to yes,
+dnl will cause additional data to be written out during the configure process.
+dnl This can be helpful in debugging the cache file process.
+dnl
+dnl See Also:
+dnl PAC_ARG_CACHING
+dnl D*/
+define([AC_CACHE_LOAD],
+[if test "$CONFIGURE_DEBUG_CACHE" = yes ; then
+ oldopts="$-"
+ clearMinusX=no
+ set -x
+ if test "$oldopts" != "$-" ; then
+ clearMinusX=yes
+ fi
+fi
+if test "X$cache_system" = "X" ; then
+ # A default file name, just in case
+ cache_system="config.system"
+ if test "$cache_file" != "/dev/null" ; then
+ # Get the directory for the cache file, if any
+ changequote(,)
+ dnl Be careful to ensure that there is no doubled slash
+ cache_system=`echo $cache_file | sed -e 's%^\(.*/\)[^/]*%\1config.system%'`
+ changequote([,])
+ test "x$cache_system" = "x$cache_file" && cache_system="config.system"
+# else
+# We must *not* set enable_cache to no because we need to know if
+# enable_cache was not set.
+# enable_cache=no
+ fi
+fi
+dnl
+dnl The "action-if-not-given" part of AC_ARG_ENABLE is not executed until
+dnl after the AC_CACHE_LOAD is executed (!). Thus, the value of
+dnl enable_cache if neither --enable-cache or --disable-cache is selected
+dnl is null. Just in case autoconf ever fixes this, we test both cases.
+dnl
+dnl Include PATH in the cache.system file since changing the path can
+dnl change which versions of programs are found (such as vendor make
+dnl or GNU make).
+dnl
+#
+# Get a test value and flag whether we should remove/replace the
+# cache_system file (do so unless cache_system_ok is yes)
+# FC and F77 should be synonyms. Save both in case
+# We include the xxxFLAGS in case the user is using the flags to change
+# the language (either input or output) of the compiler. E.g.,
+# using -xarch=v9 on Solaris to select 64 bit output or using -D_BSD_SOURCE
+# with gcc to get different header files on input.
+cleanargs=`echo "$CC $F77 $FC $CXX $F90 $CFLAGS $FFLAGS $CXXFLAGS $F90FLAGS $PATH" | tr '"' ' '`
+if uname -srm >/dev/null 2>&1 ; then
+ cache_system_text="`uname -srm` $cleanargs"
+else
+ cache_system_text="-no-uname- $cleanargs"
+fi
+cache_system_ok=no
+#
+if test -z "$real_enable_cache" ; then
+ real_enable_cache=$enable_cache
+ if test -z "$real_enable_cache" ; then real_enable_cache="notgiven" ; fi
+fi
+if test "X$real_enable_cache" = "Xnotgiven" ; then
+ # check for valid cache file
+ if test -z "$cache_system" ; then cache_system="config.system" ; fi
+ if uname -srm >/dev/null 2>&1 ; then
+ if test -f "$cache_system" -a -n "$cache_system_text" ; then
+ if test "$cache_system_text" = "`cat $cache_system`" ; then
+ real_enable_cache="yes"
+ cache_system_ok=yes
+ fi
+ elif test ! -f "$cache_system" -a -n "$cache_system_text" ; then
+ # remove the cache file because it may not correspond to our
+ # system
+ if test "$cache_file" != "/dev/null" ; then
+ rm -f $cache_file
+ fi
+ real_enable_cache="yes"
+ fi
+ fi
+fi
+if test "X$real_enable_cache" = "Xyes" -a "$cache_file" = "/dev/null" ; then
+ real_enable_cache=no
+fi
+if test "X$real_enable_cache" = "Xyes" ; then
+ if test -r "$cache_file" ; then
+ echo "loading cache $cache_file"
+ if test -w "$cache_file" ; then
+ # Clean the cache file (ergh)
+ PAC_CACHE_CLEAN
+ fi
+ . $cache_file
+ else
+ echo "Configure in `pwd` creating cache $cache_file"
+ > $cache_file
+ rm -f $cache_system
+ fi
+else
+ cache_file="/dev/null"
+fi
+# Remember our location and the name of the cachefile
+pac_cv_my_conf_dir=`pwd`
+dnl do not include the cachefile name, since this may contain the process
+dnl number and cause comparisons looking for changes to the cache file
+dnl to detect a change that isn't real.
+dnl pac_cv_my_cachefile=$cachefile
+#
+# Update the cache_system file if necessary
+if test "$cache_system_ok" != yes ; then
+ if test -n "$cache_system" ; then
+ rm -f $cache_system
+ echo $cache_system_text > $cache_system
+ fi
+fi
+if test "$clearMinusX" = yes ; then
+ set +x
+fi
+])
+dnl
+dnl/*D
+dnl PAC_ARG_CACHING - Enable caching of results from a configure execution
+dnl
+dnl Synopsis:
+dnl PAC_ARG_CACHING
+dnl
+dnl Output Effects:
+dnl Adds '--enable-cache' and '--disable-cache' to the command line arguments
+dnl accepted by 'configure'.
+dnl
+dnl See Also:
+dnl AC_CACHE_LOAD
+dnl D*/
+dnl Add this call to the other ARG_ENABLE calls. Note that the values
+dnl set here are redundant; the LOAD_CACHE call relies on the way autoconf
+dnl initially processes ARG_ENABLE commands.
+AC_DEFUN([PAC_ARG_CACHING],[
+AC_ARG_ENABLE(cache,
+ AC_HELP_STRING([--enable-cache], [Turn on configure caching]),,
+ [enable_cache="notgiven"])
+])
+
+dnl Clean the cache of extraneous quotes that AC_CACHE_SAVE may add
+dnl
+AC_DEFUN([PAC_CACHE_CLEAN],[
+ rm -f confcache
+ sed -e "s/'\\\\''//g" -e "s/'\\\\/'/" -e "s/\\\\'/'/" \
+ -e "s/'\\\\''//g" $cache_file > confcache
+ if cmp -s $cache_file confcache ; then
+ :
+ else
+ if test -w $cache_file ; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+ fi
+ rm -f confcache
+ if test "$DEBUG_AUTOCONF_CACHE" = "yes" ; then
+ echo "Results of cleaned cache file:"
+ echo "--------------------------------------------------------"
+ cat $cache_file
+ echo "--------------------------------------------------------"
+ fi
+])
+
+dnl/*D
+dnl PAC_SUBDIR_CACHE - Create a cache file before ac_output for subdirectory
+dnl configures.
+dnl
+dnl Synopsis:
+dnl PAC_SUBDIR_CACHE(when)
+dnl
+dnl Input Parameter:
+dnl . when - Indicates when the cache should be created (optional)
+dnl If 'always', create a new cache file. This option
+dnl should be used if any of the cache parameters (such as
+dnl CFLAGS or LDFLAGS) may have changed.
+dnl
+dnl Output Effects:
+dnl
+dnl Create a cache file before ac_output so that subdir configures don't
+dnl make mistakes.
+dnl We can't use OUTPUT_COMMANDS to remove the cache file, because those
+dnl commands are executed *before* the subdir configures.
+dnl
+dnl D*/
+AC_DEFUN([PAC_SUBDIR_CACHE],[])
+AC_DEFUN([PAC_SUBDIR_CACHE_OLD],[
+if test "x$1" = "xalways" -o \( "$cache_file" = "/dev/null" -a "X$real_enable_cache" = "Xnotgiven" \) ; then
+ # Use an absolute directory to help keep the subdir configures from getting
+ # lost
+ cache_file=`pwd`/$$conf.cache
+ touch $cache_file
+ dnl
+ dnl For Autoconf 2.52+, we should ensure that the environment is set
+ dnl for the cache. Make sure that we get the values and set the
+ dnl xxx_set variables properly
+ ac_cv_env_CC_set=set
+ ac_cv_env_CC_value=$CC
+ ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ ac_cv_env_CFLAGS_value=$CFLAGS
+ ac_cv_env_CPP_set=set
+ ac_cv_env_CPP_value=$CPP
+ ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ ac_cv_env_LDFLAGS_value=$LDFLAGS
+ ac_cv_env_LIBS_set=${LIBS+set}
+ ac_cv_env_LIBS_value=$LIBS
+ ac_cv_env_FC_set=${FC+set}
+ ac_cv_env_FC_value=$FC
+ ac_cv_env_F77_set=${F77+set}
+ ac_cv_env_F77_value=$F77
+ ac_cv_env_F90_set=${F90+set}
+ ac_cv_env_F90_value=$F90
+ ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ ac_cv_env_FFLAGS_value=$FFLAGS
+ ac_cv_env_CXX_set=${CXX+set}
+ ac_cv_env_CXX_value=$CXX
+
+ ac_env_CC_set=set
+ ac_env_CC_value=$CC
+ ac_env_CFLAGS_set=${CFLAGS+set}
+ ac_env_CFLAGS_value=$CFLAGS
+ ac_env_CPP_set=set
+ ac_env_CPP_value=$CPP
+ ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ ac_env_CPPFLAGS_value=$CPPFLAGS
+ ac_env_LDFLAGS_set=${LDFLAGS+set}
+ ac_env_LDFLAGS_value=$LDFLAGS
+ ac_env_LIBS_set=${LIBS+set}
+ ac_env_LIBS_value=$LIBS
+ ac_env_FC_set=${FC+set}
+ ac_env_FC_value=$FC
+ ac_env_F77_set=${F77+set}
+ ac_env_F77_value=$F77
+ ac_env_F90_set=${F90+set}
+ ac_env_F90_value=$F90
+ ac_env_FFLAGS_set=${FFLAGS+set}
+ ac_env_FFLAGS_value=$FFLAGS
+ ac_env_CXX_set=${CXX+set}
+ ac_env_CXX_value=$CXX
+
+ dnl other parameters are
+ dnl build_alias, host_alias, target_alias
+
+ # It turns out that A C CACHE_SAVE can't be invoked more than once
+ # with data that contains blanks. What happens is that the quotes
+ # that it adds get quoted and then added again. To avoid this,
+ # we strip off the outer quotes for all cached variables
+ dnl We add pac_cv_my_conf_dir to give the source of this cachefile,
+ dnl and pac_cv_my_cachefile to indicate how it chose the cachefile.
+ pac_cv_my_conf_dir=`pwd`
+ pac_cv_my_cachefile=$cachefile
+ AC_CACHE_SAVE
+ PAC_CACHE_CLEAN
+ ac_configure_args="$ac_configure_args -enable-cache"
+fi
+dnl Unconditionally export these values. Subdir configures break otherwise
+export CC
+export CFLAGS
+export LDFLAGS
+export LIBS
+export CPPFLAGS
+export CPP
+export FC
+export F77
+export F90
+export CXX
+export FFLAGS
+export CCFLAGS
+])
+AC_DEFUN([PAC_SUBDIR_CACHE_CLEANUP],[])
+AC_DEFUN([PAC_SUBDIR_CACHE_CLEANUP_OLD],[
+if test "$cache_file" != "/dev/null" -a "X$real_enable_cache" = "Xnotgiven" ; then
+ rm -f $cache_file
+ cache_file=/dev/null
+fi
+])
+dnl
+dnl The following three macros support the sharing of configure results
+dnl by configure scripts, including ones that are not run with
+dnl AC_CONFIG_SUBDIRS (the cachefiles managed by --enable-cache can
+dnl only be used with AC_CONFIG_SUBDIRS; creating a autoconf-style
+dnl cachefile before the the end of the autoconf process will often
+dnl cause problems.
+dnl
+AC_DEFUN([PAC_CREATE_BASE_CACHE],[
+AC_ARG_ENABLE(base-cache,
+ AC_HELP_STRING([--enable-base-cache],
+ [Enable the use of a simple cache for the subsidiary
+ configure scripts]),,enable_base_cache=default)
+# The default case is controlled by the environment variable CONF_USE_CACHEFILE
+if test "$enable_base_cache" = "default" ; then
+ if test "$CONF_USE_CACHEFILE" = yes ; then
+ enable_base_cache=yes
+ else
+ enable_base_cache=no
+ fi
+fi
+if test "$enable_base_cache" != no ; then
+ if test "$enable_base_cache" = yes ; then
+ basecachefile=`pwd`/cache.base
+ else
+ basecachefile=`pwd`/$enable_base_cache
+ fi
+ set | grep ac_cv > $basecachefile
+ # Tell other configures to load this file
+ echo "Creating and exporting the base cache file $basecachefile"
+ CONF_BASE_CACHEFILE=$basecachefile
+ export CONF_BASE_CACHEFILE
+fi
+])
+AC_DEFUN([PAC_LOAD_BASE_CACHE],[
+if test -n "$CONF_BASE_CACHEFILE" -a -s "$CONF_BASE_CACHEFILE" ; then
+ echo "Loading base cachefile $CONF_BASE_CACHEFILE"
+ . $CONF_BASE_CACHEFILE
+ export CONF_BASE_CACHEFILE
+fi
+])
+AC_DEFUN([PAC_UPDATE_BASE_CACHE],[
+if test -n "$CONF_BASE_CACHEFILE" -a -s "$CONF_BASE_CACHEFILE" ; then
+ set | grep ac_cv > $CONF_BASE_CACHEFILE.new
+ if cmp -s $CONF_BASE_CACHEFILE.new $CONF_BASE_CACHEFILE ; then
+ :
+ else
+ echo "Replacing $CONF_BASE_CACHEFILE"
+ mv $CONF_BASE_CACHEFILE.new $CONF_BASE_CACHEFILE
+ fi
+fi
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_cc.m4 b/src/mpi/romio/mpl/confdb/aclocal_cc.m4
new file mode 100644
index 0000000..23d7365
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_cc.m4
@@ -0,0 +1,1695 @@
+dnl AC_PROG_CC_GNU
+ifdef([AC_PROG_CC_GNU],,[AC_DEFUN([AC_PROG_CC_GNU],)])
+
+dnl PAC_PROG_CC - reprioritize the C compiler search order
+AC_DEFUN([PAC_PROG_CC],[
+ dnl Many standard autoconf/automake/libtool macros, such as LT_INIT,
+ dnl perform an AC_REQUIRE([AC_PROG_CC]). If this macro (PAC_PROG_CC)
+ dnl comes after LT_INIT (or similar) then the default compiler search
+ dnl path will be used instead. This AC_BEFORE macro ensures that a
+ dnl warning will be emitted at autoconf-time (autogen.sh-time) to help
+ dnl developers notice this case.
+ AC_BEFORE([$0],[AC_PROG_CC])
+ PAC_PUSH_FLAG([CFLAGS])
+ AC_PROG_CC([icc pgcc xlc xlC pathcc gcc clang cc])
+ PAC_POP_FLAG([CFLAGS])
+])
+dnl
+dnl/*D
+dnl PAC_C_CHECK_COMPILER_OPTION - Check that a compiler option is accepted
+dnl without warning messages
+dnl
+dnl Synopsis:
+dnl PAC_C_CHECK_COMPILER_OPTION(optionname,action-if-ok,action-if-fail)
+dnl
+dnl Output Effects:
+dnl
+dnl If no actions are specified, a working value is added to 'COPTIONS'
+dnl
+dnl Notes:
+dnl This is now careful to check that the output is different, since
+dnl some compilers are noisy.
+dnl
+dnl We are extra careful to prototype the functions in case compiler options
+dnl that complain about poor code are in effect.
+dnl
+dnl Because this is a long script, we have ensured that you can pass a
+dnl variable containing the option name as the first argument.
+dnl
+dnl D*/
+AC_DEFUN([PAC_C_CHECK_COMPILER_OPTION],[
+AC_MSG_CHECKING([whether C compiler accepts option $1])
+pac_opt="$1"
+AC_LANG_PUSH([C])
+CFLAGS_orig="$CFLAGS"
+CFLAGS_opt="$pac_opt $CFLAGS"
+pac_result="unknown"
+
+AC_LANG_CONFTEST([
+ AC_LANG_PROGRAM([[#include <stdio.h>
+ const char hw[] = "Hello, World\n";]],
+ [[fputs (hw, stdout);]])
+])
+CFLAGS="$CFLAGS_orig"
+rm -f pac_test1.log
+PAC_LINK_IFELSE_LOG([pac_test1.log], [], [
+ CFLAGS="$CFLAGS_opt"
+ rm -f pac_test2.log
+ PAC_LINK_IFELSE_LOG([pac_test2.log], [], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test1.log pac_test2.log],
+ [pac_result=yes],[pac_result=no])
+ ],[
+ pac_result=no
+ ])
+], [
+ pac_result=no
+])
+AC_MSG_RESULT([$pac_result])
+dnl Delete the conftest created by AC_LANG_CONFTEST.
+rm -f conftest.$ac_ext
+
+# gcc 4.2.4 on 32-bit does not complain about the -Wno-type-limits option
+# even though it doesn't support it. However, when another warning is
+# triggered, it gives an error that the option is not recognized. So we
+# need to test with a conftest file that will generate warnings.
+#
+# add an extra switch, pac_c_check_compiler_option_prototest, to
+# disable this test just in case some new compiler does not like it.
+#
+# Linking with a program with an invalid prototype to ensure a compiler warning.
+
+if test "$pac_result" = "yes" \
+ -a "$pac_c_check_compiler_option_prototest" != "no" ; then
+ AC_MSG_CHECKING([whether C compiler option $1 works with an invalid prototype program])
+ AC_LINK_IFELSE([
+ dnl We want a warning, but we don't want to inadvertently disable
+ dnl special warnings like -Werror-implicit-function-declaration (e.g.,
+ dnl in PAC_CC_STRICT) by compiling something that might actually be
+ dnl treated as an error by the compiler. So we try to elicit an
+ dnl "unused variable" warning and/or an "uninitialized" warning with the
+ dnl test program below.
+ dnl
+ dnl The old sanity program was:
+ dnl void main() {return 0;}
+ dnl which clang (but not GCC) would treat as an *error*, invalidating
+ dnl the test for any given parameter.
+ AC_LANG_SOURCE([int main(int argc, char **argv){ int foo, bar = 0; foo += 1; return foo; }])
+ ],[pac_result=yes],[pac_result=no])
+ AC_MSG_RESULT([$pac_result])
+fi
+#
+if test "$pac_result" = "yes" ; then
+ AC_MSG_CHECKING([whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt])
+ pac_result=unknown
+ CFLAGS="$CFLAGS_orig"
+ rm -f pac_test3.log
+ PAC_COMPILE_IFELSE_LOG([pac_test3.log], [
+ AC_LANG_SOURCE([
+ int foo(void);
+ int foo(void){return 0;}
+ ])
+ ],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+
+ rm -f pac_test4.log
+ PAC_LINK_IFELSE_LOG([pac_test4.log], [AC_LANG_PROGRAM()], [
+ CFLAGS="$CFLAGS_opt"
+ rm -f pac_test5.log
+ PAC_LINK_IFELSE_LOG([pac_test5.log], [AC_LANG_PROGRAM()], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test4.log pac_test5.log],
+ [pac_result=yes], [pac_result=no])
+ ],[
+ pac_result=no
+ ])
+ ],[
+ pac_result=no
+ ])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+ ],[
+ pac_result=no
+ ])
+ AC_MSG_RESULT([$pac_result])
+ rm -f pac_test3.log pac_test4.log pac_test5.log
+fi
+rm -f pac_test1.log pac_test2.log
+
+dnl Restore CFLAGS before 2nd/3rd argument commands are executed,
+dnl as 2nd/3rd argument command could be modifying CFLAGS.
+CFLAGS="$CFLAGS_orig"
+if test "$pac_result" = "yes" ; then
+ ifelse([$2],[],[COPTIONS="$COPTIONS $1"],[$2])
+else
+ ifelse([$3],[],[:],[$3])
+fi
+AC_LANG_POP([C])
+])
+dnl
+dnl/*D
+dnl PAC_C_OPTIMIZATION - Determine C options for producing optimized code
+dnl
+dnl Synopsis
+dnl PAC_C_OPTIMIZATION([action if found])
+dnl
+dnl Output Effect:
+dnl Adds options to 'COPTIONS' if no other action is specified
+dnl
+dnl Notes:
+dnl This is a temporary standin for compiler optimization.
+dnl It should try to match known systems to known compilers (checking, of
+dnl course), and then falling back to some common defaults.
+dnl Note that many compilers will complain about -g and aggressive
+dnl optimization.
+dnl D*/
+AC_DEFUN([PAC_C_OPTIMIZATION],[
+ for copt in "-O4 -Ofast" "-Ofast" "-fast" "-O3" "-xO3" "-O" ; do
+ PAC_C_CHECK_COMPILER_OPTION($copt,found_opt=yes,found_opt=no)
+ if test "$found_opt" = "yes" ; then
+ ifelse($1,,COPTIONS="$COPTIONS $copt",$1)
+ break
+ fi
+ done
+ if test "$ac_cv_prog_gcc" = "yes" ; then
+ for copt in "-fomit-frame-pointer" "-finline-functions" \
+ "-funroll-loops" ; do
+ PAC_C_CHECK_COMPILER_OPTION($copt,found_opt=yes,found_opt=no)
+ if test "$found_opt" = "yes" ; then
+ ifelse($1,,COPTIONS="$COPTIONS $copt",$1)
+ # no break because we're trying to add them all
+ fi
+ done
+ # We could also look for architecture-specific gcc options
+ fi
+
+])
+
+dnl/*D
+dnl PAC_PROG_C_UNALIGNED_DOUBLES - Check that the C compiler allows unaligned
+dnl doubles
+dnl
+dnl Synopsis:
+dnl PAC_PROG_C_UNALIGNED_DOUBLES(action-if-true,action-if-false,
+dnl action-if-unknown)
+dnl
+dnl Notes:
+dnl 'action-if-unknown' is used in the case of cross-compilation.
+dnl D*/
+AC_DEFUN([PAC_PROG_C_UNALIGNED_DOUBLES],[
+AC_CACHE_CHECK([whether C compiler allows unaligned doubles],
+pac_cv_prog_c_unaligned_doubles,[
+AC_TRY_RUN([
+void fetch_double( v )
+double *v;
+{
+*v = 1.0;
+}
+int main( argc, argv )
+int argc;
+char **argv;
+{
+int p[4];
+double *p_val;
+fetch_double( (double *)&(p[0]) );
+p_val = (double *)&(p[0]);
+if (*p_val != 1.0) return 1;
+fetch_double( (double *)&(p[1]) );
+p_val = (double *)&(p[1]);
+if (*p_val != 1.0) return 1;
+return 0;
+}
+],pac_cv_prog_c_unaligned_doubles="yes",pac_cv_prog_c_unaligned_doubles="no",
+pac_cv_prog_c_unaligned_doubles="unknown")])
+ifelse($1,,,if test "X$pac_cv_prog_c_unaligned_doubles" = "yes" ; then
+$1
+fi)
+ifelse($2,,,if test "X$pac_cv_prog_c_unaligned_doubles" = "no" ; then
+$2
+fi)
+ifelse($3,,,if test "X$pac_cv_prog_c_unaligned_doubles" = "unknown" ; then
+$3
+fi)
+])
+
+dnl/*D
+dnl PAC_PROG_C_WEAK_SYMBOLS - Test whether C supports weak alias symbols.
+dnl
+dnl Synopsis
+dnl PAC_PROG_C_WEAK_SYMBOLS(action-if-true,action-if-false)
+dnl
+dnl Output Effect:
+dnl Defines one of the following if a weak symbol pragma is found:
+dnl.vb
+dnl HAVE_PRAGMA_WEAK - #pragma weak
+dnl HAVE_PRAGMA_HP_SEC_DEF - #pragma _HP_SECONDARY_DEF
+dnl HAVE_PRAGMA_CRI_DUP - #pragma _CRI duplicate x as y
+dnl.ve
+dnl May also define
+dnl.vb
+dnl HAVE_WEAK_ATTRIBUTE
+dnl.ve
+dnl if functions can be declared as 'int foo(...) __attribute__ ((weak));'
+dnl sets the shell variable pac_cv_attr_weak to yes.
+dnl Also checks for __attribute__((weak_import)) which is supported by
+dnl Apple in Mac OSX (at least in Darwin). Note that this provides only
+dnl weak symbols, not weak aliases
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_C_WEAK_SYMBOLS],[
+pragma_extra_message=""
+AC_CACHE_CHECK([for type of weak symbol alias support],
+pac_cv_prog_c_weak_symbols,[
+# Test for weak symbol support...
+# We can't put # in the message because it causes autoconf to generate
+# incorrect code
+AC_TRY_LINK([
+extern int PFoo(int);
+#pragma weak PFoo = Foo
+int Foo(int a) { return a; }
+],[return PFoo(1);],has_pragma_weak=yes)
+#
+# Some systems (Linux ia64 and ecc, for example), support weak symbols
+# only within a single object file! This tests that case.
+# Note that there is an extern int PFoo declaration before the
+# pragma. Some compilers require this in order to make the weak symbol
+# externally visible.
+if test "$has_pragma_weak" = yes ; then
+ PAC_COMPLINK_IFELSE([
+ AC_LANG_SOURCE([
+extern int PFoo(int);
+#pragma weak PFoo = Foo
+int Foo(int);
+int Foo(int a) { return a; }
+ ])
+ ],[
+ AC_LANG_SOURCE([
+extern int PFoo(int);
+int main(int argc, char **argv) {
+return PFoo(0);}
+ ])
+ ],[
+ PAC_COMPLINK_IFELSE([
+ AC_LANG_SOURCE([
+extern int PFoo(int);
+#pragma weak PFoo = Foo
+int Foo(int);
+int Foo(int a) { return a; }
+ ])
+ ],[
+ AC_LANG_SOURCE([
+extern int Foo(int);
+int PFoo(int a) { return a+1;}
+int main(int argc, char **argv) {
+return Foo(0);}
+ ])
+ ],[
+ pac_cv_prog_c_weak_symbols="pragma weak"
+ ],[
+ has_pragma_weak=0
+ pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
+ ])
+ ],[
+ has_pragma_weak=0
+ pragma_extra_message="pragma weak accepted but does not work (probably creates two non-weak entries)"
+ ])
+fi
+dnl
+if test -z "$pac_cv_prog_c_weak_symbols" ; then
+ AC_TRY_LINK([
+extern int PFoo(int);
+#pragma _HP_SECONDARY_DEF Foo PFoo
+int Foo(int a) { return a; }
+],[return PFoo(1);],pac_cv_prog_c_weak_symbols="pragma _HP_SECONDARY_DEF")
+fi
+dnl
+if test -z "$pac_cv_prog_c_weak_symbols" ; then
+ AC_TRY_LINK([
+extern int PFoo(int);
+#pragma _CRI duplicate PFoo as Foo
+int Foo(int a) { return a; }
+],[return PFoo(1);],pac_cv_prog_c_weak_symbols="pragma _CRI duplicate x as y")
+fi
+dnl
+if test -z "$pac_cv_prog_c_weak_symbols" ; then
+ pac_cv_prog_c_weak_symbols="no"
+fi
+dnl
+dnl If there is an extra explanatory message, echo it now so that it
+dnl doesn't interfere with the cache result value
+if test -n "$pragma_extra_message" ; then
+ echo $pragma_extra_message
+fi
+dnl
+])
+if test "$pac_cv_prog_c_weak_symbols" != "no" ; then
+ case "$pac_cv_prog_c_weak_symbols" in
+ "pragma weak") AC_DEFINE(HAVE_PRAGMA_WEAK,1,[Supports weak pragma])
+ ;;
+ "pragma _HP") AC_DEFINE(HAVE_PRAGMA_HP_SEC_DEF,1,[HP style weak pragma])
+ ;;
+ "pragma _CRI") AC_DEFINE(HAVE_PRAGMA_CRI_DUP,1,[Cray style weak pragma])
+ ;;
+ esac
+fi
+AC_CACHE_CHECK([whether __attribute__ ((weak)) allowed],
+pac_cv_attr_weak,[
+AC_TRY_COMPILE([int foo(int) __attribute__ ((weak));],[int a;],
+pac_cv_attr_weak=yes,pac_cv_attr_weak=no)])
+# Note that being able to compile with weak_import doesn't mean that
+# it works.
+AC_CACHE_CHECK([whether __attribute__ ((weak_import)) allowed],
+pac_cv_attr_weak_import,[
+AC_TRY_COMPILE([int foo(int) __attribute__ ((weak_import));],[int a;],
+pac_cv_attr_weak_import=yes,pac_cv_attr_weak_import=no)])
+# Check if the alias option for weak attributes is allowed
+AC_CACHE_CHECK([whether __attribute__((weak,alias(...))) allowed],
+pac_cv_attr_weak_alias,[
+PAC_PUSH_FLAG([CFLAGS])
+# force an error exit if the weak attribute isn't understood
+CFLAGS=-Werror
+AC_TRY_COMPILE([int __foo(int a){return 0;} int foo(int) __attribute__((weak,alias("__foo")));],[int a;],
+pac_cv_attr_weak_alias=yes,pac_cv_attr_weak_alias=no)
+# Restore original CFLAGS
+PAC_POP_FLAG([CFLAGS])])
+if test "$pac_cv_attr_weak_alias" = "yes" ; then
+ AC_DEFINE(HAVE_WEAK_ATTRIBUTE,1,[Attribute style weak pragma])
+fi
+if test "$pac_cv_prog_c_weak_symbols" = "no" -a "$pac_cv_attr_weak_alias" = "no" ; then
+ ifelse([$2],,:,[$2])
+else
+ ifelse([$1],,:,[$1])
+fi
+])
+
+#
+# This is a replacement that checks that FAILURES are signaled as well
+# (later configure macros look for the .o file, not just success from the
+# compiler, but they should not HAVE to
+#
+dnl --- insert 2.52 compatibility here ---
+dnl 2.52 does not have AC_PROG_CC_WORKS
+ifdef([AC_PROG_CC_WORKS],,[AC_DEFUN([AC_PROG_CC_WORKS],)])
+dnl
+AC_DEFUN([PAC_PROG_CC_WORKS],
+[AC_PROG_CC_WORKS
+AC_MSG_CHECKING([whether the C compiler sets its return status correctly])
+AC_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILE(,[int a = bzzzt;],notbroken=no,notbroken=yes)
+AC_MSG_RESULT($notbroken)
+if test "$notbroken" = "no" ; then
+ AC_MSG_ERROR([installation or configuration problem: C compiler does not
+correctly set error code when a fatal error occurs])
+fi
+])
+
+dnl/*D
+dnl PAC_PROG_C_MULTIPLE_WEAK_SYMBOLS - Test whether C and the
+dnl linker allow multiple weak symbols.
+dnl
+dnl Synopsis
+dnl PAC_PROG_C_MULTIPLE_WEAK_SYMBOLS(action-if-true,action-if-false)
+dnl
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_C_MULTIPLE_WEAK_SYMBOLS],[
+AC_CACHE_CHECK([for multiple weak symbol support],
+pac_cv_prog_c_multiple_weak_symbols,[
+# Test for multiple weak symbol support...
+PAC_COMPLINK_IFELSE([
+ AC_LANG_SOURCE([
+extern int PFoo(int);
+extern int PFoo_(int);
+extern int pfoo_(int);
+#pragma weak PFoo = Foo
+#pragma weak PFoo_ = Foo
+#pragma weak pfoo_ = Foo
+int Foo(int);
+int Foo(a) { return a; }
+ ])
+],[
+ AC_LANG_SOURCE([
+extern int PFoo(int), PFoo_(int), pfoo_(int);
+int main() {
+return PFoo(0) + PFoo_(1) + pfoo_(2);}
+ ])
+],[
+ pac_cv_prog_c_multiple_weak_symbols="yes"
+])
+dnl
+])
+if test "$pac_cv_prog_c_multiple_weak_symbols" = "yes" ; then
+ ifelse([$1],,:,[$1])
+else
+ ifelse([$2],,:,[$2])
+fi
+])
+
+dnl Use the value of enable-strict to update CFLAGS
+dnl pac_cc_strict_flags contains the strict flags.
+dnl
+dnl -std=c89 is used to select the C89 version of the ANSI/ISO C standard.
+dnl As of this writing, many C compilers still accepted only this version,
+dnl not the later C99 version. When all compilers accept C99, this
+dnl should be changed to the appropriate standard level. Note that we've
+dnl had trouble with gcc 2.95.3 accepting -std=c89 but then trying to
+dnl compile program with a invalid set of options
+dnl (-D __STRICT_ANSI__-trigraphs)
+AC_DEFUN([PAC_CC_STRICT],[
+export enable_strict_done
+if test "$enable_strict_done" != "yes" ; then
+
+ # Some comments on strict warning options.
+ # These were added to improve portability
+ # -Wstack-usage=262144 -- 32 bit FreeBSD did not like the mprobe test
+ # allocating a big variable on the stack. (See tt#2160). The "right"
+ # value requires further investigation; 1 MiB would have at least
+ # caught #2160 at compile-time, and only two other tests show a
+ # warning at 256k.
+ #
+ # These were added to reduce warnings:
+ # -Wno-missing-field-initializers -- We want to allow a struct to be
+ # initialized to zero using "struct x y = {0};" and not require
+ # each field to be initialized individually.
+ # -Wno-unused-parameter -- For portability, some parameters go unused
+ # when we have different implementations of functions for
+ # different platforms
+ # -Wno-unused-label -- We add fn_exit: and fn_fail: on all functions,
+ # but fn_fail may not be used if the function doesn't return an
+ # error.
+ # -Wno-sign-compare -- read() and write() return bytes read/written
+ # as a signed value, but we often compare this to size_t (or
+ # msg_sz_t) variables.
+ # -Wno-format-zero-length -- this warning is irritating and useless, since
+ # a zero-length format string is very well defined
+ # These were removed to reduce warnings:
+ # -Wcast-qual -- Sometimes we need to cast "volatile char*" to
+ # "char*", e.g., for memcpy.
+ # -Wpadded -- We catch struct padding with asserts when we need to
+ # -Wredundant-decls -- Having redundant declarations is benign and the
+ # code already has some.
+ # -Waggregate-return -- This seems to be a performance-related warning
+ # aggregate return values are legal in ANSI C, but they may be returned
+ # in memory rather than through a register. We do use aggregate return
+ # values, but they are structs of a single basic type (used to enforce
+ # type checking for relative vs. absolute ptrs), and with optimization
+ # the aggregate value is converted to a scalar.
+ # -Wdeclaration-after-statement -- This is a C89
+ # requirement. When compiling with C99, this should be
+ # disabled.
+ # -Wfloat-equal -- There are places in hwloc that set a float var to 0, then
+ # compare it to 0 later to see if it was updated. Also when using strtod()
+ # one needs to compare the return value with 0 to see whether a conversion
+ # was performed.
+ # -Werror-implicit-function-declaration -- implicit function declarations
+ # should never be tolerated. This also ensures that we get quick
+ # compilation failures rather than later link failures that usually
+ # come from a function name typo.
+ # -Wcast-align -- Casting alignment warnings. This is an
+ # important check, but is temporarily disabled, since it is
+ # throwing too many (correct) warnings currently, causing us
+ # to miss other warnings.
+ # -Wshorten-64-to-32 -- Bad type-casting warnings. This is an
+ # important check, but is temporarily disabled, since it is
+ # throwing too many (correct) warnings currently, causing us
+ # to miss other warnings.
+ #
+ # This was removed because it masks important failures (see ticket #2094).
+ # However, since Intel compiler currently does not include -Wtype-limits
+ # in -Wextra, -Wtype-limits was added to handle warnings with the Intel
+ # compiler.
+ # -Wno-type-limits -- There are places where we compare an unsigned to
+ # a constant that happens to be zero e.g., if x is unsigned and
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
+ # Note this option is not supported by gcc 4.2. This needs to be added
+ # after most other warning flags, so that we catch a gcc bug on 32-bit
+ # that doesn't give a warning that this is unsupported, unless another
+ # warning is triggered, and then if gives an error.
+ # the embedded newlines in this string are safe because we evaluate each
+ # argument in the for-loop below and append them to the CFLAGS with a space
+ # as the separator instead
+ pac_common_strict_flags="
+ -Wall
+ -Wextra
+ -Wno-missing-field-initializers
+ -Wstrict-prototypes
+ -Wmissing-prototypes
+ -DGCC_WALL
+ -Wno-unused-parameter
+ -Wno-unused-label
+ -Wshadow
+ -Wmissing-declarations
+ -Wno-long-long
+ -Wundef
+ -Wno-endif-labels
+ -Wpointer-arith
+ -Wbad-function-cast
+ -Wwrite-strings
+ -Wno-sign-compare
+ -Wold-style-definition
+ -Wno-multichar
+ -Wno-deprecated-declarations
+ -Wpacked
+ -Wnested-externs
+ -Winvalid-pch
+ -Wno-pointer-sign
+ -Wvariadic-macros
+ -Wno-format-zero-length
+ -Wtype-limits
+ -Werror-implicit-function-declaration
+ -Wstack-usage=262144
+ "
+
+ enable_c89=no
+ enable_c99=yes
+ enable_posix=2001
+ enable_opt=yes
+ flags="`echo $1 | sed -e 's/:/ /g' -e 's/,/ /g'`"
+ for flag in ${flags}; do
+ case "$flag" in
+ c89)
+ enable_strict_done="yes"
+ enable_c89=yes
+ enable_c99=no
+ ;;
+ c99)
+ enable_strict_done="yes"
+ enable_c89=no
+ enable_c99=yes
+ ;;
+ posix1995)
+ enable_strict_done="yes"
+ enable_posix=1995
+ ;;
+ posix|posix2001)
+ enable_strict_done="yes"
+ enable_posix=2001
+ ;;
+ posix2008)
+ enable_strict_done="yes"
+ enable_posix=2008
+ ;;
+ noposix)
+ enable_strict_done="yes"
+ enable_posix=no
+ ;;
+ opt)
+ enable_strict_done="yes"
+ enable_opt=yes
+ ;;
+ noopt)
+ enable_strict_done="yes"
+ enable_opt=no
+ ;;
+ all|yes)
+ enable_strict_done="yes"
+ enable_c99=yes
+ enable_posix=2001
+ enable_opt=yes
+ ;;
+ no)
+ # Accept and ignore this value
+ :
+ ;;
+ *)
+ if test -n "$flag" ; then
+ AC_MSG_WARN([Unrecognized value for enable-strict:$flag])
+ fi
+ ;;
+ esac
+ done
+
+ pac_cc_strict_flags=""
+ if test "${enable_strict_done}" = "yes" ; then
+ if test "${enable_opt}" = "yes" ; then
+ pac_cc_strict_flags="-O2"
+ fi
+ pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
+ # We only allow one of strict-C99 or strict-C89 to be
+ # enabled. If C99 is enabled, we automatically disable C89.
+ if test "${enable_c99}" = "yes" ; then
+ PAC_APPEND_FLAG([-std=c99],[pac_cc_strict_flags])
+ # Use -D_STDC_C99= for Solaris compilers. See
+ # http://lists.gnu.org/archive/html/autoconf/2010-12/msg00059.html
+ # for discussion on why not to use -xc99
+ PAC_APPEND_FLAG([-D_STDC_C99=],[pac_cc_strict_flags])
+ elif test "${enable_c89}" = "yes" ; then
+ PAC_APPEND_FLAG([-std=c89],[pac_cc_strict_flags])
+ PAC_APPEND_FLAG([-Wdeclaration-after-statement],[pac_cc_strict_flags])
+ fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
+ 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
+ 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
+ *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
+ esac
+ fi
+
+ # See if the above options work with the compiler
+ accepted_flags=""
+ for flag in $pac_cc_strict_flags ; do
+ PAC_PUSH_FLAG([CFLAGS])
+ CFLAGS="$CFLAGS $accepted_flags"
+ PAC_C_CHECK_COMPILER_OPTION([$flag],[accepted_flags="$accepted_flags $flag"],)
+ PAC_POP_FLAG([CFLAGS])
+ done
+ pac_cc_strict_flags=$accepted_flags
+fi
+])
+
+dnl/*D
+dnl PAC_ARG_STRICT - Add --enable-strict to configure.
+dnl
+dnl Synopsis:
+dnl PAC_ARG_STRICT
+dnl
+dnl Output effects:
+dnl Adds '--enable-strict' to the command line.
+dnl
+dnl D*/
+AC_DEFUN([PAC_ARG_STRICT],[
+AC_ARG_ENABLE(strict,
+ AC_HELP_STRING([--enable-strict], [Turn on strict compilation testing]))
+PAC_CC_STRICT($enable_strict)
+CFLAGS="$CFLAGS $pac_cc_strict_flags"
+export CFLAGS
+])
+
+dnl Return the integer structure alignment in pac_cv_c_max_integer_align
+dnl Possible values include
+dnl packed
+dnl two
+dnl four
+dnl eight
+dnl
+dnl In addition, a "Could not determine alignment" and a "error!"
+dnl return is possible.
+AC_DEFUN([PAC_C_MAX_INTEGER_ALIGN],[
+AC_CACHE_CHECK([for max C struct integer alignment],
+pac_cv_c_max_integer_align,[
+AC_TRY_RUN([
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ struct { char a; int b; } char_int;
+ struct { char a; short b; } char_short;
+ struct { char a; long b; } char_long;
+ struct { char a; int b; char c; } char_int_char;
+ struct { char a; short b; char c; } char_short_char;
+#ifdef HAVE_LONG_LONG_INT
+ struct { long long int a; char b; } lli_c;
+ struct { char a; long long int b; } c_lli;
+#endif
+ int size, extent, extent2;
+
+ /* assume max integer alignment isn't 8 if we don't have
+ * an eight-byte value :)
+ */
+#ifdef HAVE_LONG_LONG_INT
+ if (sizeof(int) < 8 && sizeof(long) < 8 && sizeof(long long int) < 8)
+ is_eight = 0;
+#else
+ if (sizeof(int) < 8 && sizeof(long) < 8) is_eight = 0;
+#endif
+
+ size = sizeof(char) + sizeof(int);
+ extent = sizeof(char_int);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0) is_four = 0;
+ if (sizeof(int) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_int",size,extent);
+
+ size = sizeof(char) + sizeof(short);
+ extent = sizeof(char_short);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if (sizeof(short) == 4 && (extent % 4) != 0) is_four = 0;
+ if (sizeof(short) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_short",size,extent);
+
+ size = sizeof(char) + sizeof(long);
+ extent = sizeof(char_long);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0) is_four = 0;
+ if (sizeof(long) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_long",size,extent);
+
+#ifdef HAVE_LONG_LONG_INT
+ size = sizeof(char) + sizeof(long long int);
+ extent = sizeof(lli_c);
+ extent2 = sizeof(c_lli);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(long long int) >= 8 && (extent % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+#endif
+
+ size = sizeof(char) + sizeof(int) + sizeof(char);
+ extent = sizeof(char_int_char);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if ( (extent % 4) != 0) is_four = 0;
+ if (sizeof(int) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_int_char",size,extent);
+
+ size = sizeof(char) + sizeof(short) + sizeof(char);
+ extent = sizeof(char_short_char);
+ if (size != extent) is_packed = 0;
+ if ( (extent % 2) != 0) is_two = 0;
+ if (sizeof(short) == 4 && (extent % 4) != 0) is_four = 0;
+ if (sizeof(short) == 8 && (extent % 8) != 0) is_eight = 0;
+ DBG("char_short_char",size,extent);
+
+ /* If aligned mod 8, it will be aligned mod 4 */
+ if (is_eight) { is_four = 0; is_two = 0; }
+
+ if (is_four) is_two = 0;
+
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}],
+pac_cv_c_max_integer_align=`cat ctest.out`,
+pac_cv_c_max_integer_align="unknown",
+pac_cv_c_max_integer_align="$CROSS_ALIGN_STRUCT_INT")
+rm -f ctest.out
+])
+if test -z "$pac_cv_c_max_integer_align" ; then
+ pac_cv_c_max_integer_align="unknown"
+fi
+])
+
+dnl Return the floating point structure alignment in
+dnl pac_cv_c_max_fp_align.
+dnl
+dnl Possible values include:
+dnl packed
+dnl two
+dnl four
+dnl eight
+dnl sixteen
+dnl
+dnl In addition, a "Could not determine alignment" and a "error!"
+dnl return is possible.
+AC_DEFUN([PAC_C_MAX_FP_ALIGN],[
+AC_CACHE_CHECK([for max C struct floating point alignment],
+pac_cv_c_max_fp_align,[
+AC_TRY_RUN([
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ int is_sixteen = 1;
+ struct { char a; float b; } char_float;
+ struct { float b; char a; } float_char;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+#ifdef HAVE_LONG_DOUBLE
+ struct { char a; long double b; } char_long_double;
+ struct { long double b; char a; } long_double_char;
+ struct { long double a; int b; char c; } long_double_int_char;
+#endif
+ int size, extent1, extent2;
+
+ size = sizeof(char) + sizeof(float);
+ extent1 = sizeof(char_float);
+ extent2 = sizeof(float_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_float",size,extent1);
+
+ size = sizeof(char) + sizeof(double);
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_double",size,extent1);
+
+#ifdef HAVE_LONG_DOUBLE
+ size = sizeof(char) + sizeof(long double);
+ extent1 = sizeof(char_long_double);
+ extent2 = sizeof(long_double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0
+ && (extent2 % 16) != 0) is_sixteen = 0;
+ DBG("char_long-double",size,extent1);
+
+ extent1 = sizeof(long_double_int_char);
+ if ( (extent1 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0) is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0) is_sixteen = 0;
+#else
+ is_sixteen = 0;
+#endif
+
+ if (is_sixteen) { is_eight = 0; is_four = 0; is_two = 0; }
+
+ if (is_eight) { is_four = 0; is_two = 0; }
+
+ if (is_four) is_two = 0;
+
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ if (is_sixteen) fprintf( cf, "sixteen\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}],
+pac_cv_c_max_fp_align=`cat ctest.out`,
+pac_cv_c_max_fp_align="unknown",
+pac_cv_c_max_fp_align="$CROSS_ALIGN_STRUCT_FP")
+rm -f ctest.out
+])
+if test -z "$pac_cv_c_max_fp_align" ; then
+ pac_cv_c_max_fp_align="unknown"
+fi
+])
+
+dnl Return the floating point structure alignment in
+dnl pac_cv_c_max_double_fp_align.
+dnl
+dnl Possible values include:
+dnl packed
+dnl two
+dnl four
+dnl eight
+dnl
+dnl In addition, a "Could not determine alignment" and a "error!"
+dnl return is possible.
+AC_DEFUN([PAC_C_MAX_DOUBLE_FP_ALIGN],[
+AC_CACHE_CHECK([for max C struct alignment of structs with doubles],
+pac_cv_c_max_double_fp_align,[
+AC_TRY_RUN([
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ struct { char a; float b; } char_float;
+ struct { float b; char a; } float_char;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+ int size, extent1, extent2;
+
+ size = sizeof(char) + sizeof(float);
+ extent1 = sizeof(char_float);
+ extent2 = sizeof(float_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_float",size,extent1);
+
+ size = sizeof(char) + sizeof(double);
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ DBG("char_double",size,extent1);
+
+ if (is_eight) { is_four = 0; is_two = 0; }
+
+ if (is_four) is_two = 0;
+
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}],
+pac_cv_c_max_double_fp_align=`cat ctest.out`,
+pac_cv_c_max_double_fp_align="unknown",
+pac_cv_c_max_double_fp_align="$CROSS_ALIGN_STRUCT_DOUBLE_FP")
+rm -f ctest.out
+])
+if test -z "$pac_cv_c_max_double_fp_align" ; then
+ pac_cv_c_max_double_fp_align="unknown"
+fi
+])
+AC_DEFUN([PAC_C_MAX_LONGDOUBLE_FP_ALIGN],[
+AC_CACHE_CHECK([for max C struct floating point alignment with long doubles],
+pac_cv_c_max_longdouble_fp_align,[
+AC_TRY_RUN([
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int is_packed = 1;
+ int is_two = 1;
+ int is_four = 1;
+ int is_eight = 1;
+ int is_sixteen = 1;
+ struct { char a; long double b; } char_long_double;
+ struct { long double b; char a; } long_double_char;
+ struct { long double a; int b; char c; } long_double_int_char;
+ int size, extent1, extent2;
+
+ size = sizeof(char) + sizeof(long double);
+ extent1 = sizeof(char_long_double);
+ extent2 = sizeof(long_double_char);
+ if (size != extent1) is_packed = 0;
+ if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
+ is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0
+ && (extent2 % 16) != 0) is_sixteen = 0;
+ DBG("char_long-double",size,extent1);
+
+ extent1 = sizeof(long_double_int_char);
+ if ( (extent1 % 2) != 0) is_two = 0;
+ if ( (extent1 % 4) != 0) is_four = 0;
+ if (sizeof(long double) >= 8 && (extent1 % 8) != 0) is_eight = 0;
+ if (sizeof(long double) > 8 && (extent1 % 16) != 0) is_sixteen = 0;
+
+ if (is_sixteen) { is_eight = 0; is_four = 0; is_two = 0; }
+
+ if (is_eight) { is_four = 0; is_two = 0; }
+
+ if (is_four) is_two = 0;
+
+ /* Tabulate the results */
+ cf = fopen( "ctest.out", "w" );
+ if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) {
+ fprintf( cf, "Could not determine alignment\n" );
+ }
+ else {
+ if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) {
+ fprintf( cf, "error!\n" );
+ }
+ else {
+ if (is_packed) fprintf( cf, "packed\n" );
+ if (is_two) fprintf( cf, "two\n" );
+ if (is_four) fprintf( cf, "four\n" );
+ if (is_eight) fprintf( cf, "eight\n" );
+ if (is_sixteen) fprintf( cf, "sixteen\n" );
+ }
+ }
+ fclose( cf );
+ return 0;
+}],
+pac_cv_c_max_longdouble_fp_align=`cat ctest.out`,
+pac_cv_c_max_longdouble_fp_align="unknown",
+pac_cv_c_max_longdouble_fp_align="$CROSS_ALIGN_STRUCT_LONGDOUBLE_FP")
+rm -f ctest.out
+])
+if test -z "$pac_cv_c_max_longdouble_fp_align" ; then
+ pac_cv_c_max_longdouble_fp_align="unknown"
+fi
+])
+
+dnl Other tests assume that there is potentially a maximum alignment
+dnl and that if there is no maximum alignment, or a type is smaller than
+dnl that value, then we align on the size of the value, with the exception
+dnl of the "position-based alignment" rules we test for separately.
+dnl
+dnl It turns out that these assumptions have fallen short in at least one
+dnl case, on MacBook Pros, where doubles are aligned on 4-byte boundaries
+dnl even when long doubles are aligned on 16-byte boundaries. So this test
+dnl is here specifically to handle this case.
+dnl
+dnl Puts result in pac_cv_c_double_alignment_exception.
+dnl
+dnl Possible values currently include no and four.
+dnl
+AC_DEFUN([PAC_C_DOUBLE_ALIGNMENT_EXCEPTION],[
+AC_CACHE_CHECK([if double alignment breaks rules, find actual alignment],
+pac_cv_c_double_alignment_exception,[
+AC_TRY_RUN([
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+ int extent1, extent2, align_4 = 0;
+
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
+
+ /* we're interested in the largest value, will let separate test
+ * deal with position-based issues.
+ */
+ if (extent1 < extent2) extent1 = extent2;
+ if ((sizeof(double) == 8) && (extent1 % 8) != 0) {
+ if (extent1 % 4 == 0) {
+#ifdef HAVE_MAX_FP_ALIGNMENT
+ if (HAVE_MAX_FP_ALIGNMENT >= 8) align_4 = 1;
+#else
+ align_4 = 1;
+#endif
+ }
+ }
+
+ cf = fopen( "ctest.out", "w" );
+
+ if (align_4) fprintf( cf, "four\n" );
+ else fprintf( cf, "no\n" );
+
+ fclose( cf );
+ return 0;
+}],
+pac_cv_c_double_alignment_exception=`cat ctest.out`,
+pac_cv_c_double_alignment_exception="unknown",
+pac_cv_c_double_alignment_exception="$CROSS_ALIGN_DOUBLE_EXCEPTION")
+rm -f ctest.out
+])
+if test -z "$pac_cv_c_double_alignment_exception" ; then
+ pac_cv_c_double_alignment_exception="unknown"
+fi
+])
+
+dnl Test for odd struct alignment rule that only applies max.
+dnl padding when double value is at front of type.
+dnl Puts result in pac_cv_c_double_pos_align.
+dnl
+dnl Search for "Power alignment mode" for more details.
+dnl
+dnl Possible values include yes, no, and unknown.
+dnl
+AC_DEFUN([PAC_C_DOUBLE_POS_ALIGN],[
+AC_CACHE_CHECK([if alignment of structs with doubles is based on position],
+pac_cv_c_double_pos_align,[
+AC_TRY_RUN([
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int padding_varies_by_pos = 0;
+ struct { char a; double b; } char_double;
+ struct { double b; char a; } double_char;
+ int extent1, extent2;
+
+ extent1 = sizeof(char_double);
+ extent2 = sizeof(double_char);
+ if (extent1 != extent2) padding_varies_by_pos = 1;
+
+ cf = fopen( "ctest.out", "w" );
+ if (padding_varies_by_pos) fprintf( cf, "yes\n" );
+ else fprintf( cf, "no\n" );
+
+ fclose( cf );
+ return 0;
+}],
+pac_cv_c_double_pos_align=`cat ctest.out`,
+pac_cv_c_double_pos_align="unknown",
+pac_cv_c_double_pos_align="$CROSS_ALIGN_DOUBLE_POS")
+rm -f ctest.out
+])
+if test -z "$pac_cv_c_double_pos_align" ; then
+ pac_cv_c_double_pos_align="unknown"
+fi
+])
+
+dnl Test for odd struct alignment rule that only applies max.
+dnl padding when long long int value is at front of type.
+dnl Puts result in pac_cv_c_llint_pos_align.
+dnl
+dnl Search for "Power alignment mode" for more details.
+dnl
+dnl Possible values include yes, no, and unknown.
+dnl
+AC_DEFUN([PAC_C_LLINT_POS_ALIGN],[
+AC_CACHE_CHECK([if alignment of structs with long long ints is based on position],
+pac_cv_c_llint_pos_align,[
+AC_TRY_RUN([
+#include <stdio.h>
+#define DBG(a,b,c)
+int main( int argc, char *argv[] )
+{
+ FILE *cf;
+ int padding_varies_by_pos = 0;
+#ifdef HAVE_LONG_LONG_INT
+ struct { char a; long long int b; } char_llint;
+ struct { long long int b; char a; } llint_char;
+ int extent1, extent2;
+
+ extent1 = sizeof(char_llint);
+ extent2 = sizeof(llint_char);
+ if (extent1 != extent2) padding_varies_by_pos = 1;
+#endif
+
+ cf = fopen( "ctest.out", "w" );
+ if (padding_varies_by_pos) fprintf( cf, "yes\n" );
+ else fprintf( cf, "no\n" );
+
+ fclose( cf );
+ return 0;
+}],
+pac_cv_c_llint_pos_align=`cat ctest.out`,
+pac_cv_c_llint_pos_align="unknown",
+pac_cv_c_llint_pos_align="$CROSS_ALIGN_LLINT_POS")
+rm -f ctest.out
+])
+if test -z "$pac_cv_c_llint_pos_align" ; then
+ pac_cv_c_llint_pos_align="unknown"
+fi
+])
+
+dnl/*D
+dnl PAC_FUNC_NEEDS_DECL - Set NEEDS_<funcname>_DECL if a declaration is needed
+dnl
+dnl Synopsis:
+dnl PAC_FUNC_NEEDS_DECL(headerfiles,funcname)
+dnl
+dnl Output Effect:
+dnl Sets 'NEEDS_<funcname>_DECL' if 'funcname' is not declared by the
+dnl headerfiles.
+dnl
+dnl Approach:
+dnl Attempt to assign library function to function pointer. If the function
+dnl is not declared in a header, this will fail. Use a non-static global so
+dnl the compiler does not warn about an unused variable.
+dnl
+dnl Simply calling the function is not enough because C89 compilers allow
+dnl calls to implicitly-defined functions. Re-declaring a library function
+dnl with an incompatible prototype is also not sufficient because some
+dnl compilers (notably clang-3.2) only produce a warning in this case.
+dnl
+dnl D*/
+AC_DEFUN([PAC_FUNC_NEEDS_DECL],[
+AC_CACHE_CHECK([whether $2 needs a declaration],
+pac_cv_func_decl_$2,[
+AC_TRY_COMPILE([$1
+void (*fptr)(void) = (void(*)(void))$2;],[],
+pac_cv_func_decl_$2=no,pac_cv_func_decl_$2=yes)])
+if test "$pac_cv_func_decl_$2" = "yes" ; then
+changequote(<<,>>)dnl
+define(<<PAC_FUNC_NAME>>, translit(NEEDS_$2_DECL, [a-z *], [A-Z__]))dnl
+changequote([, ])dnl
+ AC_DEFINE_UNQUOTED(PAC_FUNC_NAME,1,[Define if $2 needs a declaration])
+undefine([PAC_FUNC_NAME])
+fi
+])
+
+dnl PAC_C_GNU_ATTRIBUTE - See if the GCC __attribute__ specifier is allow.
+dnl Use the following
+dnl #ifndef HAVE_GCC_ATTRIBUTE
+dnl #define __attribute__(a)
+dnl #endif
+dnl If *not*, define __attribute__(a) as null
+dnl
+dnl We start by requiring Gcc. Some other compilers accept __attribute__
+dnl but generate warning messages, or have different interpretations
+dnl (which seems to make __attribute__ just as bad as #pragma)
+dnl For example, the Intel icc compiler accepts __attribute__ and
+dnl __attribute__((pure)) but generates warnings for __attribute__((format...))
+dnl
+AC_DEFUN([PAC_C_GNU_ATTRIBUTE],[
+AC_REQUIRE([AC_PROG_CC_GNU])
+if test "$ac_cv_prog_gcc" = "yes" ; then
+ AC_CACHE_CHECK([whether __attribute__ allowed],
+pac_cv_gnu_attr_pure,[
+AC_TRY_COMPILE([int foo(int) __attribute__ ((pure));],[int a;],
+pac_cv_gnu_attr_pure=yes,pac_cv_gnu_attr_pure=no)])
+AC_CACHE_CHECK([whether __attribute__((format)) allowed],
+pac_cv_gnu_attr_format,[
+AC_TRY_COMPILE([int foo(char *,...) __attribute__ ((format(printf,1,2)));],[int a;],
+pac_cv_gnu_attr_format=yes,pac_cv_gnu_attr_format=no)])
+ if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+ AC_DEFINE(HAVE_GCC_ATTRIBUTE,1,[Define if GNU __attribute__ is supported])
+ fi
+fi
+])
+dnl
+dnl Check for a broken install (fails to preserve file modification times,
+dnl thus breaking libraries.
+dnl
+dnl Create a library, install it, and then try to link against it.
+AC_DEFUN([PAC_PROG_INSTALL_BREAKS_LIBS],[
+AC_CACHE_CHECK([whether install breaks libraries],
+ac_cv_prog_install_breaks_libs,[
+AC_REQUIRE([AC_PROG_RANLIB])
+AC_REQUIRE([AC_PROG_INSTALL])
+AC_REQUIRE([AC_PROG_CC])
+ac_cv_prog_install_breaks_libs=yes
+
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([ int foo(int); int foo(int a){return a;} ])
+],[
+ if ${AR-ar} ${AR_FLAGS-cr} libconftest.a conftest.$OBJEXT >/dev/null 2>&1 ; then
+ if ${RANLIB-:} libconftest.a >/dev/null 2>&1 ; then
+ # Anything less than sleep 10, and Mac OS/X (Darwin)
+ # will claim that install works because ranlib won't complain
+ sleep 10
+ libinstall="$INSTALL_DATA"
+ eval "libinstall=\"$libinstall\""
+ if ${libinstall} libconftest.a libconftest1.a >/dev/null 2>&1 ; then
+ saved_LIBS="$LIBS"
+ LIBS="libconftest1.a"
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+extern int foo(int);
+int main(int argc, char **argv){ return foo(0); }
+ ])
+ ],[
+ # Success! Install works
+ ac_cv_prog_install_breaks_libs=no
+ ],[
+ # Failure! Does install -p work?
+ rm -f libconftest1.a
+ if ${libinstall} -p libconftest.a libconftest1.a >/dev/null 2>&1 ; then
+ AC_LINK_IFELSE([],[
+ # Success! Install works
+ ac_cv_prog_install_breaks_libs="no, with -p"
+ ])
+ fi
+ ])
+ LIBS="$saved_LIBS"
+ fi
+ fi
+ fi
+])
+rm -f libconftest*.a
+]) dnl Endof ac_cache_check
+
+if test -z "$RANLIB_AFTER_INSTALL" ; then
+ RANLIB_AFTER_INSTALL=no
+fi
+case "$ac_cv_prog_install_breaks_libs" in
+ yes)
+ RANLIB_AFTER_INSTALL=yes
+ ;;
+ "no, with -p")
+ INSTALL_DATA="$INSTALL_DATA -p"
+ ;;
+ *)
+ # Do nothing
+ :
+ ;;
+esac
+AC_SUBST(RANLIB_AFTER_INSTALL)
+])
+
+#
+# determine if the compiler defines a symbol containing the function name
+#
+# These tests check not only that the compiler defines some symbol, such
+# as __FUNCTION__, but that the symbol correctly names the function.
+#
+# Defines
+# HAVE__FUNC__ (if __func__ defined)
+# HAVE_CAP__FUNC__ (if __FUNC__ defined)
+# HAVE__FUNCTION__ (if __FUNCTION__ defined)
+#
+AC_DEFUN([PAC_CC_FUNCTION_NAME_SYMBOL],[
+AC_CACHE_CHECK([whether the compiler defines __func__],
+pac_cv_have__func__,[
+tmp_am_cross=no
+AC_RUN_IFELSE([
+AC_LANG_SOURCE([
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__func__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+])
+], pac_cv_have__func__=yes, pac_cv_have__func__=no,tmp_am_cross=yes)
+if test "$tmp_am_cross" = yes ; then
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__func__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+ ])
+], pac_cv_have__func__=yes, pac_cv_have__func__=no)
+fi
+])
+
+if test "$pac_cv_have__func__" = "yes" ; then
+ AC_DEFINE(HAVE__FUNC__,,[define if the compiler defines __func__])
+fi
+
+AC_CACHE_CHECK([whether the compiler defines __FUNC__],
+pac_cv_have_cap__func__,[
+tmp_am_cross=no
+AC_RUN_IFELSE([
+AC_LANG_SOURCE([
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNC__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+])
+], pac_cv_have_cap__func__=yes, pac_cv_have_cap__func__=no,tmp_am_cross=yes)
+if test "$tmp_am_cross" = yes ; then
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNC__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+ ])
+], pac_cv_have__func__=yes, pac_cv_have__func__=no)
+fi
+])
+
+if test "$pac_cv_have_cap__func__" = "yes" ; then
+ AC_DEFINE(HAVE_CAP__FUNC__,,[define if the compiler defines __FUNC__])
+fi
+
+AC_CACHE_CHECK([whether the compiler sets __FUNCTION__],
+pac_cv_have__function__,[
+tmp_am_cross=no
+AC_RUN_IFELSE([
+AC_LANG_SOURCE([
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNCTION__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+])
+], pac_cv_have__function__=yes, pac_cv_have__function__=no,tmp_am_cross=yes)
+if test "$tmp_am_cross" = yes ; then
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+#include <string.h>
+int foo(void);
+int foo(void)
+{
+ return (strcmp(__FUNCTION__, "foo") == 0);
+}
+int main(int argc, char ** argv)
+{
+ return (foo() ? 0 : 1);
+}
+ ])
+], pac_cv_have__func__=yes, pac_cv_have__func__=no)
+fi
+])
+
+if test "$pac_cv_have__function__" = "yes" ; then
+ AC_DEFINE(HAVE__FUNCTION__,,[define if the compiler defines __FUNCTION__])
+fi
+
+])
+
+
+dnl Check structure alignment
+AC_DEFUN([PAC_STRUCT_ALIGNMENT],[
+ # Initialize alignment checks
+ is_packed=1
+ is_two=1
+ is_four=1
+ is_eight=1
+ is_largest=1
+
+ # See if long double exists
+ AC_TRY_COMPILE(,[long double a;],have_long_double=yes,have_long_double=no)
+
+ # Get sizes of regular types
+ AC_CHECK_SIZEOF(char)
+ AC_CHECK_SIZEOF(int)
+ AC_CHECK_SIZEOF(short)
+ AC_CHECK_SIZEOF(long)
+ AC_CHECK_SIZEOF(float)
+ AC_CHECK_SIZEOF(double)
+ AC_CHECK_SIZEOF(long double)
+
+ # char_int comparison
+ AC_CHECK_SIZEOF(char_int, 0, [typedef struct { char a; int b; } char_int; ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_int`
+ extent=$ac_cv_sizeof_char_int
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_int`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "`expr $extent % 4`" != "0" ; then is_four=0 ; fi
+ if test "$ac_cv_sizeof_int" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+
+ # char_short comparison
+ AC_CHECK_SIZEOF(char_short, 0, [typedef struct { char a; short b; } char_short; ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_short`
+ extent=$ac_cv_sizeof_char_short
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_short`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "$ac_cv_sizeof_short" = "4" -a "`expr $extent % 4`" != "0" ; then
+ is_four=0
+ fi
+ if test "$ac_cv_sizeof_short" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+
+ # char_long comparison
+ AC_CHECK_SIZEOF(char_long, 0, [typedef struct { char a; long b; } char_long; ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_long`
+ extent=$ac_cv_sizeof_char_long
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_long`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "`expr $extent % 4`" != "0" ; then is_four=0 ; fi
+ if test "$ac_cv_sizeof_long" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+
+ # char_float comparison
+ AC_CHECK_SIZEOF(char_float, 0, [typedef struct { char a; float b; } char_float; ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_float`
+ extent=$ac_cv_sizeof_char_float
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_float`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "`expr $extent % 4`" != "0" ; then is_four=0 ; fi
+ if test "$ac_cv_sizeof_float" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+
+ # char_double comparison
+ AC_CHECK_SIZEOF(char_double, 0, [typedef struct { char a; double b; } char_double; ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_double`
+ extent=$ac_cv_sizeof_char_double
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_double`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "`expr $extent % 4`" != "0" ; then is_four=0 ; fi
+ if test "$ac_cv_sizeof_double" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+
+ # char_long_double comparison
+ if test "$have_long_double" = "yes"; then
+ AC_CHECK_SIZEOF(char_long_double, 0, [
+ typedef struct {
+ char a;
+ long double b;
+ } char_long_double;
+ ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_long_double`
+ extent=$ac_cv_sizeof_char_long_double
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_long_double`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "`expr $extent % 4`" != "0" ; then is_four=0 ; fi
+ if test "$ac_cv_sizeof_long_double" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+ fi
+
+ # char_int_char comparison
+ AC_CHECK_SIZEOF(char_int_char, 0, [
+ typedef struct {
+ char a;
+ int b;
+ char c;
+ } char_int_char;
+ ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_int + $ac_cv_sizeof_char`
+ extent=$ac_cv_sizeof_char_int_char
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_int`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "`expr $extent % 4`" != "0" ; then is_four=0 ; fi
+ if test "$ac_cv_sizeof_int" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+
+ # char_short_char comparison
+ AC_CHECK_SIZEOF(char_short_char, 0, [
+ typedef struct {
+ char a;
+ short b;
+ char c;
+ } char_short_char;
+ ])
+ size=`expr $ac_cv_sizeof_char + $ac_cv_sizeof_short + $ac_cv_sizeof_char`
+ extent=$ac_cv_sizeof_char_short_char
+ if test "$size" != "$extent" ; then is_packed=0 ; fi
+ if test "`expr $extent % $ac_cv_sizeof_short`" != "0" ; then is_largest=0 ; fi
+ if test "`expr $extent % 2`" != "0" ; then is_two=0 ; fi
+ if test "$ac_cv_sizeof_short" = "4" -a "`expr $extent % 4`" != "0" ; then
+ is_four=0
+ fi
+ if test "$ac_cv_sizeof_short" = "8" -a "`expr $extent % 8`" != "0" ; then
+ is_eight=0
+ fi
+
+ # If aligned mod 8, it will be aligned mod 4
+ if test $is_eight = 1 ; then is_four=0 ; is_two=0 ; fi
+ if test $is_four = 1 ; then is_two=0 ; fi
+
+ # Largest supersedes 8
+ if test $is_largest = 1 ; then is_eight=0 ; fi
+
+ # Find the alignment
+ if test "`expr $is_packed + $is_largest + $is_two + $is_four + $is_eight`" = "0" ; then
+ pac_cv_struct_alignment="unknown"
+ elif test "`expr $is_packed + $is_largest + $is_two + $is_four + $is_eight`" != "1" ; then
+ pac_cv_struct_alignment="unknown"
+ elif test $is_packed = 1 ; then
+ pac_cv_struct_alignment="packed"
+ elif test $is_largest = 1 ; then
+ pac_cv_struct_alignment="largest"
+ elif test $is_two = 1 ; then
+ pac_cv_struct_alignment="two"
+ elif test $is_four = 1 ; then
+ pac_cv_struct_alignment="four"
+ elif test $is_eight = 1 ; then
+ pac_cv_struct_alignment="eight"
+ fi
+])
+dnl
+dnl PAC_C_MACRO_VA_ARGS
+dnl
+dnl will AC_DEFINE([HAVE_MACRO_VA_ARGS]) if the compiler supports C99 variable
+dnl length argument lists in macros (#define foo(...) bar(__VA_ARGS__))
+AC_DEFUN([PAC_C_MACRO_VA_ARGS],[
+ AC_MSG_CHECKING([for variable argument list macro functionality])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([
+ #include <stdio.h>
+ #define conftest_va_arg_macro(...) printf(__VA_ARGS__)
+ ],
+ [conftest_va_arg_macro("a test %d", 3);])],
+ [AC_DEFINE([HAVE_MACRO_VA_ARGS],[1],[Define if C99-style variable argument list macro functionality])
+ AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])])
+])dnl
+
+# Will AC_DEFINE([HAVE_BUILTIN_EXPECT]) if the compiler supports __builtin_expect.
+AC_DEFUN([PAC_C_BUILTIN_EXPECT],[
+AC_MSG_CHECKING([if C compiler supports __builtin_expect])
+
+AC_TRY_LINK(, [
+ return __builtin_expect(1, 1) ? 1 : 0
+], [
+ have_builtin_expect=yes
+ AC_MSG_RESULT([yes])
+], [
+ have_builtin_expect=no
+ AC_MSG_RESULT([no])
+])
+if test x$have_builtin_expect = xyes ; then
+ AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], [Define to 1 if the compiler supports __builtin_expect.])
+fi
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_check_visibility.m4 b/src/mpi/romio/mpl/confdb/aclocal_check_visibility.m4
new file mode 100644
index 0000000..1ea85ba
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_check_visibility.m4
@@ -0,0 +1,123 @@
+# This macro set originally copied from hwloc.
+# MPICH modifications:
+# - renamed macro to PAC_CHECK_VISIBILITY
+# - removed C compiler vendor check
+# - sed -e 's/HWLOC/MPICH/gI'
+#
+# Copyright © 2004-2005 The Trustees of Indiana University and Indiana
+# University Research and Technology
+# Corporation. All rights reserved.
+# Copyright © 2004-2005 The University of Tennessee and The University
+# of Tennessee Research Foundation. All rights
+# reserved.
+# Copyright © 2004-2007 High Performance Computing Center Stuttgart,
+# University of Stuttgart. All rights reserved.
+# Copyright © 2004-2005 The Regents of the University of California.
+# All rights reserved.
+# Copyright © 2006-2007 Cisco Systems, Inc. All rights reserved.
+# and renamed/modified for hwloc:
+# Copyright © 2009 Inria. All rights reserved.
+# Copyright © 2009-2010 Université Bordeaux
+# Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer listed
+# in this license in the documentation and/or other materials
+# provided with the distribution.
+#
+# - Neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties. The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# PAC_CHECK_VISIBILITY
+# --------------------------------------------------------
+AC_DEFUN([PAC_CHECK_VISIBILITY],[
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
+ m4_ifdef([AC_PROG_GREP],
+ [AC_REQUIRE([AC_PROG_GREP])],
+ [GREP=grep])
+
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ AC_ARG_ENABLE(visibility,
+ AC_HELP_STRING([--enable-visibility],
+ [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
+
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (disabled)])
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+
+ AC_MSG_CHECKING([if $CC supports $mpich_add])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+ ]],[[fprintf(stderr, "Hello, world\n");]])],
+ [AS_IF([test -s conftest.err],
+ [$GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ AS_IF([test "$?" = "0"], [mpich_add=])])
+ ], [mpich_add=])
+ AS_IF([test "$mpich_add" = ""],
+ [AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes])])
+
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([yes (via $mpich_add)])
+ elif test "$enable_visibility" = "yes"; then
+ AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting])
+ else
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (unsupported)])
+ fi
+ unset mpich_add
+ fi
+
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$mpich_visibility_define],
+ [Whether C compiler supports symbol visibility or not])
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_coverage.m4 b/src/mpi/romio/mpl/confdb/aclocal_coverage.m4
new file mode 100644
index 0000000..ce949d4
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_coverage.m4
@@ -0,0 +1,90 @@
+
+dnl Macro to add --enable-coverage option (disabled by default) and add
+dnl appropriate compiler flags to permit usage of gcov if that option is
+dnl enabled. If WRAPPER_xFLAGS variables are set then the flags will also be
+dnl added to those variables.
+dnl
+dnl Sets "pac_cv_use_coverage=yes" and AC_DEFINEs USE_COVERAGE if coverage was
+dnl successfully enabled. Also creates an AM_CONDITIONAL with the name
+dnl "BUILD_COVERAGE" that is true iff pac_cv_use_coverage=yes.
+dnl
+dnl Usage: PAC_CONFIG_SUBDIR_ARGS
+dnl
+dnl Assumes that all of the compiler macros have already been invoked
+dnl (AC_PROG_CC and friends).
+AC_DEFUN([PAC_ENABLE_COVERAGE],[
+
+AC_ARG_VAR([GCOV],[name/path for the gcov utility])
+AC_CHECK_PROGS([GCOV],[gcov])
+
+AC_ARG_ENABLE([coverage],
+ [AC_HELP_STRING([--enable-coverage],
+ [Turn on coverage analysis using gcc and gcov])],
+ [],[enable_coverage=no])
+
+if test "$enable_coverage" = "yes" ; then
+ if test "$ac_cv_prog_gcc" = "yes" ; then
+ CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_CFLAGS+set} = set ; then
+ WRAPPER_CFLAGS="$WRAPPER_CFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ AC_MSG_WARN([--enable-coverage only supported for GCC])
+ fi
+ if test "$enable_cxx" = "yes" ; then
+ if test "$ac_cv_cxx_compiler_gnu" = "yes" ; then
+ CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_CXXFLAGS+set} = set ; then
+ WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ AC_MSG_WARN([--enable-coverage only supported for GCC])
+ fi
+ fi
+ # Add similar options for g77 so that the Fortran tests will also
+ #
+ if test "$enable_f77" = yes ; then
+ if test "$ac_cv_f77_compiler_gnu" = "yes" ; then
+ FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_FFLAGS+set} = set ; then
+ WRAPPER_FFLAGS="$WRAPPER_FFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ AC_MSG_WARN([--enable-coverage only supported for G77/GFORTRAN])
+ fi
+ fi
+ if test "$enable_fc" = yes ; then
+ if test "$ac_cv_fc_compiler_gnu" = "yes" ; then
+ FCFLAGS="$FCFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_FCFLAGS+set} = set ; then
+ WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ AC_MSG_WARN([--enable-coverage only supported for GFORTRAN])
+ fi
+ fi
+ # On some platforms (e.g., Mac Darwin), we must also *link*
+ # with the -fprofile-args -ftest-coverage option.
+ AC_MSG_CHECKING([whether compilation with coverage analysis enabled works])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([int main(int argc, char **argv){return 1;}])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_ERROR([Unable to link programs when coverage analysis enabled])])
+
+ # Test for the routines that we need to use to ensure that the
+ # data files are (usually) written out
+ # FIXME: Some versions of Linux provide usleep, but it rounds times
+ # up to the next second (!)
+ AC_CHECK_FUNCS([usleep])
+
+ # NOTE: using a "pac_cv_" prefix but not caching because of xFLAGS "side effects"
+ pac_cv_use_coverage=yes
+ AC_DEFINE([USE_COVERAGE],[1],[Define if performing coverage tests])
+fi
+AM_CONDITIONAL([BUILD_COVERAGE],[test "X$pac_cv_use_coverage" = "Xyes"])
+])
+
diff --git a/src/mpi/romio/mpl/confdb/aclocal_cxx.m4 b/src/mpi/romio/mpl/confdb/aclocal_cxx.m4
new file mode 100644
index 0000000..72febd8
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_cxx.m4
@@ -0,0 +1,187 @@
+dnl PAC_CXX_SEARCH_LIST - expands to a whitespace separated list of C++
+dnl compilers for use with AC_PROG_CXX that is more suitable for HPC software
+dnl packages
+AC_DEFUN([PAC_CXX_SEARCH_LIST],[$CCC icpc pgCC xlC pathCC g++ clang++ c++ cc++ cxx CC cl])
+dnl PAC_PROG_CXX - reprioritize the C++ compiler search order
+dnl NOTE: this macro suffers from a basically intractable "expanded before it
+dnl was required" problem when libtool is also used
+AC_DEFUN([PAC_PROG_CXX],[
+ PAC_PUSH_FLAG([CXXFLAGS])
+ # This test uses the list from a recent PROG_CXX, but with the
+ # addition of the Portland group, IBM, and Intel C++ compilers
+ # (While the Intel icc compiler will compile C++ programs, it will
+ # not *link* C++ object files unless there is at least one C++ source
+ # file present on the command that performs the linking. icpc is the
+ # Intel C++ compiler that both compiles and links C++ programs)
+ AC_PROG_CXX([PAC_CXX_SEARCH_LIST])
+ PAC_POP_FLAG([CXXFLAGS])
+])
+
+dnl This is from crypt.to/autoconf-archive, slightly modified.
+dnl It defines bool as int if it is not availalbe
+dnl
+AC_DEFUN([AX_CXX_BOOL],
+[AC_CACHE_CHECK(whether the compiler recognizes bool as a built-in type,
+ac_cv_cxx_bool,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+int f(int x){return 1;}
+int f(char x){return 1;}
+int f(bool x){return 1;}
+],[bool b = true; return f(b);],
+ ac_cv_cxx_bool=yes, ac_cv_cxx_bool=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_bool" != yes; then
+ AC_DEFINE(bool,int,[define if bool is a built-in type])
+fi
+])
+
+dnl This is from crypt.to/autoconf-archive, slightly modified (name defined)
+dnl
+AC_DEFUN([AX_CXX_EXCEPTIONS],
+[AC_CACHE_CHECK(whether the compiler supports exceptions,
+ac_cv_cxx_exceptions,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE(,[try { throw 1; } catch (int i) { return i; }],
+ ac_cv_cxx_exceptions=yes, ac_cv_cxx_exceptions=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_exceptions" = yes; then
+ AC_DEFINE(HAVE_CXX_EXCEPTIONS,,[define if the compiler supports exceptions])
+fi
+])
+
+dnl This is from crypt.to/autoconf-archive
+dnl
+AC_DEFUN([AX_CXX_NAMESPACES],
+[AC_CACHE_CHECK(whether the compiler implements namespaces,
+ac_cv_cxx_namespaces,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([namespace Outer { namespace Inner { int i = 0; }}],
+ [using namespace Outer::Inner; return i;],
+ ac_cv_cxx_namespaces=yes, ac_cv_cxx_namespaces=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_namespaces" = yes; then
+ AC_DEFINE(HAVE_NAMESPACES,,[define if the compiler implements namespaces])
+fi
+])
+
+dnl Some compilers support namespaces but don't know about std
+dnl
+AC_DEFUN([AX_CXX_NAMESPACE_STD],
+[AC_REQUIRE([AX_CXX_NAMESPACES])
+AC_CACHE_CHECK(whether the compiler implements the namespace std,
+ac_cv_cxx_namespace_std,
+[ac_cv_cxx_namespace_std=no
+if test "$ac_cv_cxx_namespaces" = yes ; then
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+#include <iostream>
+using namespace std;],
+ [cout << "message\n";],
+ ac_cv_cxx_namespace_std=yes, ac_cv_cxx_namespace_std=no)
+ AC_LANG_RESTORE
+fi
+])
+if test "$ac_cv_cxx_namespace_std" = yes; then
+ AC_DEFINE(HAVE_NAMESPACE_STD,,[define if the compiler implements namespace std])
+fi
+])
+
+dnl/*D
+dnl PAC_CXX_CHECK_COMPILER_OPTION - Check that a C++ compiler option is
+dnl accepted without warning messages
+dnl
+dnl Synopsis:
+dnl PAC_CXX_CHECK_COMPILER_OPTION(optionname,action-if-ok,action-if-fail)
+dnl
+dnl Output Effects:
+dnl
+dnl If no actions are specified, a working value is added to 'CXXOPTIONS'
+dnl
+dnl Notes:
+dnl This is now careful to check that the output is different, since
+dnl some compilers are noisy.
+dnl
+dnl We are extra careful to prototype the functions in case compiler options
+dnl that complain about poor code are in effect.
+dnl
+dnl Because this is a long script, we have ensured that you can pass a
+dnl variable containing the option name as the first argument.
+dnl D*/
+AC_DEFUN([PAC_CXX_CHECK_COMPILER_OPTION],[
+AC_MSG_CHECKING([whether C++ compiler accepts option $1])
+pac_opt="$1"
+AC_LANG_PUSH([C++])
+CXXFLAGS_orig="$CXXFLAGS"
+CXXFLAGS_opt="$pac_opt $CXXFLAGS"
+pac_result="unknown"
+
+AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+CXXFLAGS="$CXXFLAGS_orig"
+rm -f pac_test1.log
+PAC_LINK_IFELSE_LOG([pac_test1.log], [], [
+ CXXFLAGS="$CXXFLAGS_opt"
+ rm -f pac_test2.log
+ PAC_LINK_IFELSE_LOG([pac_test2.log], [], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test1.log pac_test2.log],
+ [pac_result=yes],[pac_result=no])
+ ],[
+ pac_result=no
+ ])
+], [
+ pac_result=no
+])
+AC_MSG_RESULT([$pac_result])
+dnl Delete the conftest created by AC_LANG_CONFTEST.
+rm -f conftest.$ac_ext
+
+if test "$pac_result" = "yes" ; then
+ AC_MSG_CHECKING([whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt])
+ pac_result=unknown
+ CXXFLAGS="$CXXFLAGS_orig"
+ rm -f pac_test3.log
+ PAC_COMPILE_IFELSE_LOG([pac_test3.log], [
+ AC_LANG_SOURCE([
+ int foo(void);
+ int foo(void){return 0;}
+ ])
+ ],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+
+ CXXFLAGS="$CXXFLAGS_opt"
+ rm -f pac_test4.log
+ PAC_LINK_IFELSE_LOG([pac_test4.log], [AC_LANG_PROGRAM()], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test2.log pac_test4.log],
+ [pac_result=yes], [pac_result=no])
+ ],[
+ pac_result=no
+ ])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+ ],[
+ pac_result=no
+ ])
+ AC_MSG_RESULT([$pac_result])
+ rm -f pac_test3.log pac_test4.log
+fi
+rm -f pac_test1.log pac_test2.log
+
+dnl Restore CXXFLAGS before 2nd/3rd argument commands are executed,
+dnl as 2nd/3rd argument command could be modifying CXXFLAGS.
+CXXFLAGS="$CXXFLAGS_orig"
+if test "$pac_result" = "yes" ; then
+ ifelse([$2],[],[CXXOPTIONS="$CXXOPTIONS $1"],[$2])
+else
+ ifelse([$3],[],[:],[$3])
+fi
+AC_LANG_POP([C++])
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_f77.m4 b/src/mpi/romio/mpl/confdb/aclocal_f77.m4
new file mode 100644
index 0000000..92d310b
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_f77.m4
@@ -0,0 +1,1487 @@
+dnl PAC_F77_SEARCH_LIST - expands to a whitespace separated list of fortran 77
+dnl compilers for use with AC_PROG_F77 that is more suitable for HPC software
+dnl packages
+AC_DEFUN([PAC_F77_SEARCH_LIST],[ifort pgf77 af77 xlf frt cf77 fort77 fl32 fort ifc efc ftn gfortran f77 g77])
+dnl PAC_PROG_F77 - reprioritize the F77 compiler search order
+dnl NOTE: this macro suffers from a basically intractable "expanded before it
+dnl was required" problem when libtool is also used
+AC_DEFUN([PAC_PROG_F77],[
+PAC_PUSH_FLAG([FFLAGS])
+AC_PROG_F77([PAC_F77_SEARCH_LIST])
+PAC_POP_FLAG([FFLAGS])
+])
+dnl
+dnl/*D
+dnl PAC_PROG_F77_NAME_MANGLE - Determine how the Fortran compiler mangles
+dnl names
+dnl
+dnl Synopsis:
+dnl PAC_PROG_F77_NAME_MANGLE([action])
+dnl
+dnl Output Effect:
+dnl If no action is specified, one of the following names is defined:
+dnl.vb
+dnl If fortran names are mapped:
+dnl lower -> lower F77_NAME_LOWER
+dnl lower -> lower_ F77_NAME_LOWER_USCORE
+dnl lower -> UPPER F77_NAME_UPPER
+dnl lower_lower -> lower__ F77_NAME_LOWER_2USCORE
+dnl mixed -> mixed F77_NAME_MIXED
+dnl mixed -> mixed_ F77_NAME_MIXED_USCORE
+dnl mixed -> UPPER at STACK_SIZE F77_NAME_UPPER_STDCALL
+dnl.ve
+dnl If an action is specified, it is executed instead.
+dnl
+dnl Notes:
+dnl We assume that if lower -> lower (any underscore), upper -> upper with the
+dnl same underscore behavior. Previous versions did this by
+dnl compiling a Fortran program and running strings -a over it. Depending on
+dnl strings is a bad idea, so instead we try compiling and linking with a
+dnl C program, since that is why we are doing this anyway. A similar approach
+dnl is used by FFTW, though without some of the cases we check (specifically,
+dnl mixed name mangling). STD_CALL not only specifies a particular name
+dnl mangling convention (adding the size of the calling stack into the function
+dnl name, but also the stack management convention (callee cleans the stack,
+dnl and arguments are pushed onto the stack from right to left)
+dnl
+dnl One additional problem is that some Fortran implementations include
+dnl references to the runtime (like pgf90_compiled for the pgf90 compiler
+dnl used as the "Fortran 77" compiler). This is not yet solved.
+dnl
+dnl D*/
+dnl
+AC_DEFUN([PAC_PROG_F77_NAME_MANGLE],[
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+AC_CACHE_CHECK([for Fortran 77 name mangling],
+pac_cv_prog_f77_name_mangle,[
+# Initialize pac_found to indicate if name mangling scheme has been found
+pac_found=no
+AC_LANG_PUSH([Fortran 77])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ subroutine MY_name( ii )
+ return
+ end
+ ])
+],[
+ PAC_RUNLOG([mv conftest.$OBJEXT f77conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ dnl FLIBS is set by AC_F77_LIBRARY_LDFLAGS
+ LIBS="f77conftest.$OBJEXT $FLIBS $LIBS"
+ AC_LANG_PUSH([C])
+ for call in "" __stdcall ; do
+ for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([extern void ${call} ${sym}(int);],[${sym}(0);])
+ ],[
+ pac_found=yes
+ break
+ ])
+ done
+ test "$pac_found" = "yes" && break
+ done
+ AC_LANG_POP([C])
+ LIBS="$saved_LIBS"
+ rm -f f77conftest.$OBJEXT
+])
+AC_LANG_POP([Fortran 77])
+dnl
+# If we got to here and pac_cv_prog_f77_name_mangle is still NOT definable,
+# it may be that the programs have to be linked with the Fortran compiler,
+# not the C compiler. Try reversing the language used for the test
+if test "$pac_found" != "yes" ; then
+ AC_LANG_PUSH([C])
+ for call in "" __stdcall ; do
+ for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([void ${call} ${sym}(int a) {}])
+ ],[
+ PAC_RUNLOG([mv conftest.$OBJEXT cconftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="cconftest.$OBJEXT $LIBS"
+ AC_LANG_PUSH([Fortran 77])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([],[ call my_name(0)])
+ ],[
+ pac_found=yes
+ ])
+ AC_LANG_POP([Fortran 77])
+ LIBS="$saved_LIBS"
+ rm -f cconftest.$OBJEXT
+ test "$pac_found" = "yes" && break
+ ])
+ done
+ test "$pac_found" = "yes" && break
+ done
+ AC_LANG_POP([C])
+fi
+if test "$pac_found" = "yes" ; then
+ case ${sym} in
+ my_name_)
+ pac_cv_prog_f77_name_mangle="lower uscore" ;;
+ my_name__)
+ pac_cv_prog_f77_name_mangle="lower 2uscore" ;;
+ my_name)
+ pac_cv_prog_f77_name_mangle="lower" ;;
+ MY_NAME)
+ pac_cv_prog_f77_name_mangle="upper" ;;
+ MY_name)
+ pac_cv_prog_f77_name_mangle="mixed" ;;
+ MY_name_)
+ pac_cv_prog_f77_name_mangle="mixed uscore" ;;
+ *)
+ pac_cv_prog_f77_name_mangle=""
+ pac_found=no;
+ ;;
+ esac
+ if test "X$pac_cv_prog_f77_name_mangle" != "X" ; then
+ if test "$call" = "__stdcall" ; then
+ pac_cv_prog_f77_name_mangle="$pac_cv_prog_f77_name_mangle stdcall"
+ fi
+ fi
+fi
+])
+dnl Endof ac_cache_check
+case $pac_cv_prog_f77_name_mangle in
+ *stdcall)
+ F77_STDCALL="__stdcall" ;;
+ *)
+ F77_STDCALL="" ;;
+esac
+# Get the standard call definition
+# FIXME: This should use F77_STDCALL, not STDCALL (non-conforming name)
+F77_STDCALL="$call"
+AC_DEFINE_UNQUOTED(STDCALL,[$F77_STDCALL],[Define calling convention])
+
+# new_name="`echo $name | tr ' ' '_' | tr [a-z] [A-Z]`"
+# We could have done the character conversion with 'tr'
+# which may not be portable, e.g. solaris's /usr/ucb/bin/tr.
+# So use a conservative approach.
+
+# Replace blank with underscore
+name_scheme="`echo $pac_cv_prog_f77_name_mangle | sed 's% %_%g'`"
+# Turn lowercase into uppercase.
+name_scheme="`echo $name_scheme | sed -e 'y%abcdefghijklmnopqrstuvwxyz%ABCDEFGHIJKLMNOPQRSTUVWXYZ%'`"
+F77_NAME_MANGLE="F77_NAME_${name_scheme}"
+AC_DEFINE_UNQUOTED([$F77_NAME_MANGLE])
+AC_SUBST(F77_NAME_MANGLE)
+if test "X$pac_cv_prog_f77_name_mangle" = "X" ; then
+ AC_MSG_WARN([Unknown Fortran naming scheme])
+fi
+dnl
+dnl Define the macros that is needed by AC_DEFINE_UNQUOTED([$F77_NAME_MANGLE])
+AH_TEMPLATE([F77_NAME_LOWER],
+ [Fortran names are lowercase with no trailing underscore])
+AH_TEMPLATE([F77_NAME_LOWER_USCORE],
+ [Fortran names are lowercase with one trailing underscore])
+AH_TEMPLATE([F77_NAME_LOWER_2USCORE],
+ [Fortran names are lowercase with two trailing underscores])
+AH_TEMPLATE([F77_NAME_MIXED],
+ [Fortran names preserve the original case])
+AH_TEMPLATE([F77_NAME_MIXED_USCORE],
+ [Fortran names preserve the original case with one trailing underscore])
+AH_TEMPLATE([F77_NAME_UPPER],
+ [Fortran names are uppercase])
+AH_TEMPLATE([F77_NAME_LOWER_STDCALL],
+ [Fortran names are lowercase with no trailing underscore in stdcall])
+AH_TEMPLATE([F77_NAME_LOWER_USCORE_STDCALL],
+ [Fortran names are lowercase with one trailing underscore in stdcall])
+AH_TEMPLATE([F77_NAME_LOWER_2USCORE_STDCALL],
+ [Fortran names are lowercase with two trailing underscores in stdcall])
+AH_TEMPLATE([F77_NAME_MIXED_STDCALL],
+ [Fortran names preserve the original case in stdcall])
+AH_TEMPLATE([F77_NAME_MIXED_USCORE_STDCALL],
+ [Fortran names preserve the original case with one trailing underscore in stdcall])
+AH_TEMPLATE([F77_NAME_UPPER_STDCALL],
+ [Fortran names are uppercase in stdcall])
+])
+dnl
+dnl/*D
+dnl PAC_PROG_F77_CHECK_SIZEOF - Determine the size in bytes of a Fortran
+dnl type
+dnl
+dnl Synopsis:
+dnl PAC_PROG_F77_CHECK_SIZEOF(type,[cross-size])
+dnl
+dnl Output Effect:
+dnl Sets SIZEOF_F77_uctype to the size if bytes of type.
+dnl If type is unknown, the size is set to 0.
+dnl If cross-compiling, the value cross-size is used (it may be a variable)
+dnl For example 'PAC_PROG_F77_CHECK_SIZEOF(real)' defines
+dnl 'SIZEOF_F77_REAL' to 4 on most systems. The variable
+dnl 'pac_cv_sizeof_f77_<type>' (e.g., 'pac_cv_sizeof_f77_real') is also set to
+dnl the size of the type.
+dnl If the corresponding variable is already set, that value is used.
+dnl If the name has an '*' in it (e.g., 'integer*4'), the defined name
+dnl replaces that with an underscore (e.g., 'SIZEOF_F77_INTEGER_4').
+dnl
+dnl Notes:
+dnl If the 'cross-size' argument is not given, 'autoconf' will issue an error
+dnl message. You can use '0' to specify undetermined.
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_F77_CHECK_SIZEOF],[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+changequote(<<, >>)dnl
+dnl The name to #define.
+dnl dnl If the arg value contains a variable, we need to update that
+define(<<PAC_TYPE_NAME>>, translit(sizeof_f77_$1, [a-z *], [A-Z__]))dnl
+dnl The cache variable name.
+define(<<PAC_CV_NAME>>, translit(pac_cv_f77_sizeof_$1, [ *], [__]))dnl
+changequote([, ])dnl
+AC_CACHE_CHECK([for size of Fortran type $1],PAC_CV_NAME,[
+AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
+AC_LANG_PUSH([Fortran 77])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ subroutine isize()
+ $1 i(2)
+ call cisize( i(1), i(2) )
+ end
+ ])
+],[
+ # pac_f77compile_ok=yes
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ # Save original LIBS, prepend previously generated object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $FLIBS $LIBS"
+ AC_LANG_PUSH([C])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define cisize_ CISIZE
+#define isize_ ISIZE
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define cisize_ cisize
+#define isize_ isize
+#endif
+static int isize_val=0;
+void cisize_(char *,char*);
+void isize_(void);
+void cisize_(char *i1p, char *i2p)
+{
+ isize_val = (int)(i2p - i1p);
+}
+ ],[
+ FILE *f = fopen("conftestval", "w");
+ if (!f) return 1;
+ isize_();
+ fprintf(f,"%d\n", isize_val);
+ ])
+ dnl Endof ac_lang_program
+ ],[
+ eval PAC_CV_NAME=`cat conftestval`
+ ],[
+ eval PAC_CV_NAME=0
+ ],[
+ # Use -9999 as value to emit a warning message after the cache_check.
+ ifelse([$2],[],[eval PAC_CV_NAME=-9999],[eval PAC_CV_NAME=$2])
+ ])
+ dnl Endof ac_run_ifelse
+ AC_LANG_POP([C])
+ LIBS="$saved_LIBS"
+ # remove previously generated object file.
+ rm -f pac_f77conftest.$OBJEXT
+],[
+ # pac_f77compile_ok=no
+ ifelse([$2],,eval PAC_CV_NAME=0,eval PAC_CV_NAME=$2)
+]) Endof ac_compile_ifelse
+AC_LANG_POP([Fortran 77])
+])
+dnl Endof ac_cache_check
+if test "$PAC_CV_NAME" = "-9999" ; then
+ AC_MSG_WARN([No value provided for size of $1 when cross-compiling])
+fi
+AC_DEFINE_UNQUOTED(PAC_TYPE_NAME,$PAC_CV_NAME,[Define size of PAC_TYPE_NAME])
+undefine([PAC_TYPE_NAME])
+undefine([PAC_CV_NAME])
+])
+dnl
+dnl This version uses a Fortran program to link programs.
+dnl This is necessary because some compilers provide shared libraries
+dnl that are not within the default linker paths (e.g., our installation
+dnl of the Portland Group compilers)
+dnl
+AC_DEFUN([PAC_PROG_F77_CHECK_SIZEOF_EXT],[
+changequote(<<,>>)dnl
+dnl The name to #define.
+dnl If the arg value contains a variable, we need to update that
+define(<<PAC_TYPE_NAME>>, translit(sizeof_f77_$1, [a-z *], [A-Z__]))dnl
+dnl The cache variable name.
+define(<<PAC_CV_NAME>>, translit(pac_cv_f77_sizeof_$1, [ *], [__]))dnl
+changequote([,])dnl
+AC_CACHE_CHECK([for size of Fortran type $1],PAC_CV_NAME,[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
+dnl if test "$cross_compiling" = yes ; then
+dnl ifelse([$2],[],
+dnl [AC_MSG_WARN([No value provided for size of $1 when cross-compiling])],
+dnl [eval PAC_CV_NAME=$2])
+dnl fi
+AC_LANG_PUSH([C])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define cisize_ CISIZE
+#define isize_ ISIZE
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define cisize_ cisize
+#define isize_ isize
+#endif
+int cisize_(char *,char*);
+int cisize_(char *i1p, char *i2p) {
+ int isize_val=0;
+ FILE *f = fopen("conftestval", "w");
+ if (!f) return 1;
+ isize_val = (int)(i2p - i1p);
+ fprintf(f,"%d\n", isize_val);
+ fclose(f);
+ return 0;
+}
+ ])
+ dnl Endof ac_lang_source
+],[
+ # pac_compile_ok=yes
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ # Save LIBS and prepend object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ AC_LANG_PUSH([Fortran 77])
+ AC_RUN_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ $1 a(2)
+ integer irc, cisize
+ irc = cisize(a(1),a(2))
+ end
+ ])
+ ],[
+ eval PAC_CV_NAME=`cat conftestval`
+ ],[
+ eval PAC_CV_NAME=0
+ ],[
+ # Use -9999 as value to emit a warning message after the cache_check.
+ ifelse([$2],[],[eval PAC_CV_NAME=-9999],[eval PAC_CV_NAME=$2])
+ ])
+ AC_LANG_POP([Fortran 77])
+ LIBS="$saved_LIBS"
+ # remove previously generated object file.
+ rm -f pac_conftest.$OBJEXT
+],[
+ AC_MSG_WARN([Unable to compile the C routine for finding the size of a $1])
+])
+AC_LANG_POP([C])
+])
+dnl Endof ac_cache_check
+if test "$PAC_CV_NAME" = "-9999" ; then
+ AC_MSG_WARN([No value provided for size of $1 when cross-compiling])
+fi
+AC_DEFINE_UNQUOTED(PAC_TYPE_NAME,$PAC_CV_NAME,[Define size of PAC_TYPE_NAME])
+undefine([PAC_TYPE_NAME])
+undefine([PAC_CV_NAME])
+])
+dnl
+dnl/*D
+dnl PAC_PROG_F77_EXCLAIM_COMMENTS
+dnl
+dnl Synopsis:
+dnl PAC_PROG_F77_EXCLAIM_COMMENTS([action-if-true],[action-if-false])
+dnl
+dnl Notes:
+dnl Check whether '!' may be used to begin comments in Fortran.
+dnl
+dnl This macro requires a version of autoconf `after` 2.13; the 'acgeneral.m4'
+dnl file contains an error in the handling of Fortran programs in
+dnl 'AC_TRY_COMPILE' (fixed in our local version).
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_F77_EXCLAIM_COMMENTS],[
+AC_CACHE_CHECK([whether Fortran 77 accepts ! for comments],
+pac_cv_prog_f77_exclaim_comments,[
+AC_LANG_PUSH([Fortran 77])
+AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([],[! This is a comment])
+],[
+ pac_cv_prog_f77_exclaim_comments="yes"
+],[
+ pac_cv_prog_f77_exclaim_comments="no"
+])
+AC_LANG_POP([Fortran 77])
+])
+if test "$pac_cv_prog_f77_exclaim_comments" = "yes" ; then
+ ifelse([$1],[],[:],[$1])
+else
+ ifelse([$2],[],[:],[$2])
+fi
+])dnl
+dnl
+dnl/*D
+dnl PAC_F77_CHECK_COMPILER_OPTION - Check that a F77 compiler option is
+dnl accepted without warning messages
+dnl
+dnl Synopsis:
+dnl PAC_F77_CHECK_COMPILER_OPTION(optionname,action-if-ok,action-if-fail)
+dnl
+dnl Output Effects:
+dnl
+dnl If no actions are specified, a working value is added to 'FOPTIONS'
+dnl
+dnl Notes:
+dnl This is now careful to check that the output is different, since
+dnl some compilers are noisy.
+dnl
+dnl We are extra careful to prototype the functions in case compiler options
+dnl that complain about poor code are in effect.
+dnl
+dnl Because this is a long script, we have ensured that you can pass a
+dnl variable containing the option name as the first argument.
+dnl D*/
+AC_DEFUN([PAC_F77_CHECK_COMPILER_OPTION],[
+AC_MSG_CHECKING([whether Fortran 77 compiler accepts option $1])
+pac_opt="$1"
+AC_LANG_PUSH([Fortran 77])
+FFLAGS_orig="$FFLAGS"
+FFLAGS_opt="$pac_opt $FFLAGS"
+pac_result="unknown"
+
+AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+FFLAGS="$FFLAGS_orig"
+rm -f pac_test1.log
+PAC_LINK_IFELSE_LOG([pac_test1.log], [], [
+ FFLAGS="$FFLAGS_opt"
+ rm -f pac_test2.log
+ PAC_LINK_IFELSE_LOG([pac_test2.log], [], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test1.log pac_test2.log],
+ [pac_result=yes], [pac_result=no])
+ ],[
+ pac_result=no
+ ])
+], [
+ pac_result=no
+])
+AC_MSG_RESULT([$pac_result])
+dnl Delete the conftest created by AC_LANG_CONFTEST.
+rm -f conftest.$ac_ext
+#
+if test "$pac_result" = "yes" ; then
+ AC_MSG_CHECKING([whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt])
+ pac_result=unknown
+ FFLAGS="$FFLAGS_orig"
+ rm -f pac_test3.log
+ PAC_COMPILE_IFELSE_LOG([pac_test3.log], [
+ AC_LANG_SOURCE([
+ subroutine try()
+ end
+ ])
+ ],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+
+ FFLAGS="$FFLAGS_opt"
+ rm -f pac_test4.log
+ PAC_LINK_IFELSE_LOG([pac_test4.log], [AC_LANG_PROGRAM()], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test2.log pac_test4.log],
+ [pac_result=yes], [pac_result=no])
+ ],[
+ pac_result=no
+ ])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+ ],[
+ pac_result=no
+ ])
+ AC_MSG_RESULT([$pac_result])
+ rm -f pac_test3.log pac_test4.log
+fi
+rm -f pac_test1.log pac_test2.log
+
+dnl Restore FFLAGS before 2nd/3rd argument commands are executed,
+dnl as 2nd/3rd argument command could be modifying FFLAGS.
+FFLAGS="$FFLAGS_orig"
+if test "$pac_result" = "yes" ; then
+ ifelse([$2],[],[FOPTIONS="$FOPTIONS $1"],[$2])
+else
+ ifelse([$3],[],[:],[$3])
+fi
+AC_LANG_POP([Fortran 77])
+])
+dnl
+dnl/*D
+dnl PAC_PROG_F77_LIBRARY_DIR_FLAG - Determine the flag used to indicate
+dnl the directories to find libraries in
+dnl
+dnl Notes:
+dnl Many compilers accept '-Ldir' just like most C compilers.
+dnl Unfortunately, some (such as some HPUX Fortran compilers) do not,
+dnl and require instead either '-Wl,-L,dir' or something else. This
+dnl command attempts to determine what is accepted. The flag is
+dnl placed into 'F77_LIBDIR_LEADER'.
+dnl
+dnl D*/
+dnl
+dnl An earlier version of this only tried the arguments without using
+dnl a library. This failed when the HP compiler complained about the
+dnl arguments, but produced an executable anyway.
+AC_DEFUN([PAC_PROG_F77_LIBRARY_DIR_FLAG],[
+AC_CACHE_CHECK([for Fortran 77 flag for library directories],
+pac_cv_prog_f77_library_dir_flag,[
+AC_LANG_PUSH([Fortran 77])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ subroutine f1conf
+ end
+ ])
+],[
+ # pac_f77compile_ok=yes
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ PAC_RUNLOG([test -d conftestdir || mkdir conftestdir])
+ PAC_RUNLOG([${AR-ar} ${AR_FLAGS-cr} conftestdir/libf77conftest.a pac_f77conftest.$OBJEXT])
+ PAC_RUNLOG([${RANLIB-ranlib} conftestdir/libf77conftest.a])
+ # Save original LIBS, prepend previously generated object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="-lf77conftest $LIBS"
+ saved_LDFLAGS="$LDFLAGS"
+ pac_cv_prog_f77_library_dir_flag="none"
+ for ldir in "-L" "-Wl,-L," ; do
+ LDFLAGS="${ldir}conftestdir $saved_LDFLAGS"
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ call f1conf
+ end
+ ])
+ ],[pac_cv_prog_f77_library_dir_flag="$ldir";break])
+ done
+ LDFLAGS="$saved_LDFLAGS"
+ LIBS="$saved_LIBS"
+ rm -rf conftestdir
+ rm -f pac_f77conftest.$OBJEXT
+],[])
+AC_LANG_POP([Fortran 77])
+])
+dnl Endof ac_cache_check
+if test "X$pac_cv_prog_f77_library_dir_flag" != "Xnone" ; then
+ F77_LIBDIR_LEADER="$pac_cv_prog_f77_library_dir_flag"
+ AC_SUBST(F77_LIBDIR_LEADER)
+fi
+])
+dnl
+dnl/*D
+dnl PAC_PROG_F77_HAS_INCDIR - Check whether Fortran accepts -Idir flag
+dnl
+dnl Syntax:
+dnl PAC_PROG_F77_HAS_INCDIR(directory,action-if-true,action-if-false)
+dnl
+dnl Output Effect:
+dnl Sets 'F77_INCDIR' to the flag used to choose the directory.
+dnl
+dnl Notes:
+dnl This refers to the handling of the common Fortran include extension,
+dnl not to the use of '#include' with the C preprocessor.
+dnl If directory does not exist, it will be created. In that case, the
+dnl directory should be a direct descendant of the current directory.
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_F77_HAS_INCDIR],[
+ifelse([$1],[],[checkdir=f77tmpdir],[checkdir=$1;checkdir_is_given=yes])
+AC_CACHE_CHECK([for include directory flag for Fortran],
+pac_cv_prog_f77_has_incdir,[
+test -d $checkdir || mkdir $checkdir
+dnl PAC_RUNLOG([echo ' call sub()' > $checkdir/conftestf.h])
+echo ' call sub()' > $checkdir/conftestf.h
+AC_LANG_PUSH([Fortran 77])
+saved_FFLAGS="$FFLAGS"
+pac_cv_prog_f77_has_incdir="none"
+# SGI wants -Wf,-I
+for idir in "-I" "-Wf,-I" ; do
+ FFLAGS="${idir} $checkdir $saved_FFLAGS"
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ include 'conftestf.h'
+ end
+ ])
+ ],[pac_cv_prog_f77_has_incdir="$idir"; break])
+done
+FFLAGS="$saved_FFLAGS"
+AC_LANG_POP([Fortran 77])
+if test "$checkdir_is_given" = "yes" ; then
+ rm -f $checkdir/conftestf.h
+else
+ rm -rf $checkdir
+fi
+])
+dnl Endof ac_cache_check
+if test "X$pac_cv_prog_f77_has_incdir" != "Xnone" ; then
+ F77_INCDIR="$pac_cv_prog_f77_has_incdir"
+ AC_SUBST(F77_INCDIR)
+fi
+])
+dnl
+dnl/*D
+dnl PAC_PROG_F77_ALLOWS_UNUSED_EXTERNALS - Check whether the Fortran compiler
+dnl allows unused and undefined functions to be listed in an external
+dnl statement
+dnl
+dnl Syntax:
+dnl PAC_PROG_F77_ALLOWS_UNUSED_EXTERNALS(action-if-true,action-if-false)
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_F77_ALLOWS_UNUSED_EXTERNALS],[
+AC_CACHE_CHECK([whether Fortran allows unused externals],
+pac_cv_prog_f77_allows_unused_externals,[
+AC_LANG_PUSH([Fortran 77])
+AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ external bar
+ end
+ ])
+],[
+ pac_cv_prog_f77_allows_unused_externals="yes"
+],[
+ pac_cv_prog_f77_allows_unused_externals="no"
+])
+AC_LANG_POP([Fortran 77])
+])
+dnl Endof ac_cache_check
+if test "X$pac_cv_prog_f77_allows_unused_externals" = "Xyes" ; then
+ ifelse([$1],[],[:],[$1])
+else
+ ifelse([$2],[],[:],[$2])
+fi
+])
+dnl PAC_PROG_F77_RUN_PROC_FROM_C( c main program, fortran routine,
+dnl [action-if-works], [action-if-fails],
+dnl [cross-action] )
+dnl Fortran routine MUST be named ftest unless you include code
+dnl to select the appropriate Fortran name.
+dnl
+AC_DEFUN([PAC_PROG_F77_RUN_PROC_FROM_C],[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+AC_LANG_PUSH([Fortran 77])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([$2])
+],[
+ # pac_f77compile_ok=yes
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ # Save original LIBS, prepend previously generated object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $FLIBS $LIBS"
+ AC_LANG_PUSH([C])
+ AC_RUN_IFELSE([
+ AC_LANG_SOURCE([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define ftest_ FTEST
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define ftest_ ftest
+#endif
+$1
+ ])
+ ],[
+ ifelse([$3],[],[:],[$3])
+ ],[
+ ifelse([$4],[],[:],[$4])
+ ],[
+ ifelse([$5],[],[:],[$5])
+ ])
+ AC_LANG_POP([C])
+ LIBS="$saved_LIBS"
+ rm -f pac_f77conftest.$OBJEXT
+],[
+])
+AC_LANG_POP([Fortran 77])
+])
+dnl PAC_PROG_F77_IN_C_LIBS
+dnl
+dnl Find the essential libraries that are needed to use the C linker to
+dnl create a program that includes a trival Fortran code.
+dnl
+dnl For example, all pgf90 compiled objects include a reference to the
+dnl symbol pgf90_compiled, found in libpgf90 .
+dnl
+dnl There is an additional problem. To *run* programs, we may need
+dnl additional arguments; e.g., if shared libraries are used. Even
+dnl with autoconf 2.52, the autoconf macro to find the library arguments
+dnl doesn't handle this, either by detecting the use of -rpath or
+dnl by trying to *run* a trivial program. It only checks for *linking*.
+dnl
+dnl
+AC_DEFUN([PAC_PROG_F77_IN_C_LIBS],[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+AC_MSG_CHECKING([for which Fortran libraries are needed to link C with Fortran])
+F77_IN_C_LIBS="invalid"
+AC_LANG_PUSH([Fortran 77])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ subroutine ftest
+ end
+ ])
+],[
+ # pac_f77compile_ok=yes
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ # Save original LIBS, prepend previously generated object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
+ AC_LANG_PUSH([C])
+
+ # Create conftest for all link tests.
+ AC_LANG_CONFTEST([
+ AC_LANG_PROGRAM([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+ ],[
+#ifdef F77_NAME_UPPER
+#define ftest_ FTEST
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define ftest_ ftest
+#endif
+extern void ftest_(void);
+ftest_();
+ ])
+ ])
+
+ F77_IN_C_LIBS=""
+ AC_LINK_IFELSE([],[:],[
+ flibdirs=`echo $FLIBS | tr ' ' '\012' | grep '\-L' | tr '\012' ' '`
+ fliblibs=`echo $FLIBS | tr ' ' '\012' | grep -v '\-L' | tr '\012' ' '`
+ for flibs in $fliblibs ; do
+ LIBS="pac_f77conftest.$OBJEXT $flibdirs $flibs $saved_LIBS"
+ AC_LINK_IFELSE([],[F77_IN_C_LIBS="$flibdirs $flibs"; break])
+ done
+ if test "X$F77_IN_C_LIBS" = "X" ; then
+ flibscat=""
+ for flibs in $fliblibs ; do
+ flibscat="$flibscat $flibs"
+ LIBS="pac_f77conftest.$OBJEXT $flibdirs $flibscat $saved_LIBS"
+ AC_LINK_IFELSE([],[F77_IN_C_LIBS="$flibdirs $flibscat";break])
+ done
+ fi
+ ])
+
+ # remove conftest created by ac_lang_conftest
+ rm -f conftest.$ac_ext
+ AC_LANG_POP([C])
+ LIBS="$saved_LIBS"
+ rm -f pac_f77conftest.$OBJEXT
+])
+AC_LANG_POP([Fortran 77])
+if test "X$F77_IN_C_LIBS" = "X" ; then
+ AC_MSG_RESULT(none)
+else
+ AC_MSG_RESULT($F77_IN_C_LIBS)
+fi
+])
+dnl
+dnl Test to see if we should use C or Fortran to link programs whose
+dnl main program is in Fortran. We may find that neither work because
+dnl we need special libraries in each case.
+dnl
+AC_DEFUN([PAC_PROG_F77_LINKER_WITH_C],[
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+AC_MSG_CHECKING([for linker for Fortran main program])
+dnl Create a C program that uses multiplication and division
+dnl in case that requires special libraries
+AC_LANG_PUSH([C])
+AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([],[long long a;])
+],[
+ AC_DEFINE(HAVE_LONG_LONG,1,[Define if long long allowed])
+])
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+#ifdef HAVE_LONG_LONG
+int f(int a, long long b) { int c; c = a * ( b / 3 ) / (b-1); return c ; }
+#else
+int f(int a, long b) { int c; c = a * b / (b-1); return c ; }
+#endif
+ ])
+])
+AC_LANG_POP([C])
+
+dnl Create a Fortran program for test
+AC_LANG_PUSH([Fortran 77])
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program main
+ double precision d
+ print *, "hi"
+ end
+ ])
+])
+AC_LANG_POP([Fortran 77])
+
+dnl Initialize flags
+pac_linkwithf77=no
+pac_linkwithC=no
+
+dnl Use F77 as a linker to compile a Fortran main and C subprogram.
+if test "$pac_linkwithC" != "yes" ; then
+ AC_LANG_PUSH([C])
+ AC_COMPILE_IFELSE([],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS"
+ AC_LANG_PUSH([Fortran 77])
+ AC_LINK_IFELSE([],[
+ AC_MSG_RESULT([Use Fortran to link programs])
+ pac_linkwithf77=yes
+ ])
+ AC_LANG_POP([Fortran 77])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+ ])
+ AC_LANG_POP([C])
+fi
+
+dnl Use C as a linker and FLIBS to compile a Fortran main and C subprogram.
+if test "$pac_linkwithf77" != "yes" ; then
+ AC_LANG_PUSH([Fortran 77])
+ AC_COMPILE_IFELSE([],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
+ AC_LANG_PUSH([C])
+ AC_LINK_IFELSE([],[
+ pac_linkwithC=yes
+ AC_MSG_RESULT([Use C with FLIBS to link programs])
+ F77LINKER="$CC"
+ F77_LDFLAGS="$F77_LDFLAGS $FLIBS"
+ ])
+ AC_LANG_POP([C])
+ LIBS="$saved_LIBS"
+ rm -f pac_f77conftest.$OBJEXT
+ ])
+ AC_LANG_POP([Fortran 77])
+fi
+
+AC_LANG_PUSH([Fortran 77])
+rm -f conftest.$ac_ext
+AC_LANG_POP([Fortran 77])
+
+AC_LANG_PUSH([C])
+rm -f conftest.$ac_ext
+AC_LANG_POP([C])
+
+if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
+ AC_MSG_ERROR([Could not determine a way to link a Fortran test program!])
+fi
+])
+dnl
+dnl Check to see if a C program can be linked when using the libraries
+dnl needed by C programs
+dnl
+AC_DEFUN([PAC_PROG_F77_CHECK_FLIBS],[
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+AC_MSG_CHECKING([whether $CC links with FLIBS found by autoconf])
+AC_LANG_PUSH([C])
+# Create a simple C program for the tests.
+AC_LANG_CONFTEST([
+ AC_LANG_PROGRAM([],[int a;])
+])
+# Try to link a C program with all of these libraries
+saved_LIBS="$LIBS"
+LIBS="$FLIBS $saved_LIBS"
+AC_LINK_IFELSE([],[
+ AC_MSG_RESULT([yes])
+],[
+ AC_MSG_RESULT([no])
+ AC_MSG_CHECKING([for which libraries can be used])
+ pac_ldirs=""
+ pac_libs=""
+ pac_other=""
+ for name in $FLIBS ; do
+ case $name in
+ -l*) pac_libs="$pac_libs $name" ;;
+ -L*) pac_ldirs="$pac_ldirs $name" ;;
+ *) pac_other="$pac_other $name" ;;
+ esac
+ done
+ keep_libs=""
+ for name in $pac_libs ; do
+ LIBS="$saved_LIBS $pac_ldirs $pac_other $name"
+ AC_LINK_IFELSE([],[
+ keep_libs="$keep_libs $name"
+ ])
+ done
+ AC_MSG_RESULT($keep_libs)
+ FLIBS="$pac_ldirs $pac_other $keep_libs"
+])
+LIBS="$saved_LIBS"
+rm -f conftest.$ac_ext
+AC_LANG_PUSH([C])
+])
+dnl
+dnl Test for extra libraries needed when linking C routines that use
+dnl stdio with Fortran. This test was created for OSX, which
+dnl sometimes requires -lSystemStubs. If another library is needed,
+dnl add it to F77_OTHER_LIBS
+dnl
+AC_DEFUN([PAC_PROG_F77_AND_C_STDIO_LIBS],[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
+# To simply the code in the cache_check macro, chose the routine name
+# first, in case we need it
+confname=conf1_
+case "$pac_cv_prog_f77_name_mangle" in
+ "lower underscore") confname=conf1_ ;;
+ "upper stdcall") confname=CONF1 ;;
+ "upper") confname=CONF1 ;;
+ "lower doubleunderscore") confname=conf1_ ;;
+ "lower") confname=conf1 ;;
+ "mixed underscore") confname=conf1_ ;;
+ "mixed") confname=conf1 ;;
+esac
+
+AC_CACHE_CHECK([for libraries to link Fortran main with C stdio routines],
+pac_cv_prog_f77_and_c_stdio_libs,[
+pac_cv_prog_f77_and_c_stdio_libs=unknown
+AC_LANG_PUSH([C])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+int $confname(int a) {
+ printf( "The answer is %d\n", a ); fflush(stdout); return 0;
+}
+ ])
+],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ AC_LANG_PUSH([Fortran 77])
+ AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program main
+ call conf1(0)
+ end
+ ])
+ ])
+ for extralib in "" "-lSystemStubs" ; do
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS $extralib"
+ AC_LINK_IFELSE([],[
+ pac_cv_prog_f77_and_c_stdio_libs="$extralib"; break
+ ])
+ done
+ if test "X$pac_cv_prog_f77_and_c_stdio_libs" = "X" ; then
+ pac_cv_prog_f77_and_c_stdio_libs=none
+ fi
+ rm -f conftest.$ac_ext
+ AC_LANG_POP([Fortran 77])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+])
+AC_LANG_POP([C])
+])
+dnl Endof ac_cache_check
+if test "$pac_cv_prog_f77_and_c_stdio_libs" != "none" \
+ -a "$pac_cv_prog_f77_and_c_stdio_libs" != "unknown" ; then
+ F77_OTHER_LIBS="$F77_OTHER_LIBS $pac_cv_prog_f77_and_c_stdio_libs"
+fi
+])
+dnl
+dnl Check that the FLIBS determined by AC_F77_LIBRARY_LDFLAGS is valid.
+dnl That macro (at least as of autoconf 2.59) attempted to parse the output
+dnl of the compiler when asked to be verbose; in the case of the Fujitsu
+dnl frt Fortran compiler, it included files that frt looked for and then
+dnl discarded because they did not exist.
+dnl
+AC_DEFUN([PAC_PROG_F77_FLIBS_VALID],[
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+AC_MSG_CHECKING([whether $F77 accepts the FLIBS found by autoconf])
+pac_cv_f77_flibs_valid=unknown
+AC_LANG_PUSH([Fortran 77])
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program main
+ end
+ ])
+])
+AC_LINK_IFELSE([],[
+ AC_MSG_RESULT([yes])
+],[
+ AC_MSG_RESULT([no])
+ AC_MSG_CHECKING([for valid entries in FLIBS])
+ goodFLIBS=""
+ saveFLIBS=$FLIBS
+ FLIBS=""
+ for arg in $saveFLIBS ; do
+ FLIBS="$goodFLIBS $arg"
+ AC_LINK_IFELSE([],[goodFLIBS=$FLIBS])
+ done
+ FLIBS=$goodFLIBS
+ AC_MSG_RESULT($FLIBS)
+])
+rm -f conftest.$ac_ext
+AC_LANG_POP([Fortran 77])
+])
+dnl
+dnl Check if the Fortran 77 and C objects are compatible in linking.
+dnl e.g. On some intel x86_64 Mac, Fortran compiler's default binary format
+dnl is different from C, so either -m64 or -m32 is needed in either CFLAGS
+dnl or FFLAGS.
+dnl
+AC_DEFUN([PAC_PROG_F77_OBJ_LINKS_WITH_C],[
+AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
+AC_MSG_CHECKING([whether Fortran 77 and C objects are compatible])
+AC_LANG_PUSH([C])
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+/* lower */
+void c_subpgm( int *rc );
+void c_subpgm( int *rc ) { *rc = 1; }
+
+/* lower underscore */
+void c_subpgm_( int *rc );
+void c_subpgm_( int *rc ) { *rc = 2; }
+
+/* upper */
+void C_SUBPGM( int *rc );
+void C_SUBPGM( int *rc ) { *rc = 3; }
+
+/* lower doubleunderscore */
+void c_subpgm__( int *rc );
+void c_subpgm__( int *rc ) { *rc = 4; }
+
+/* mixed */
+void C_subpgm( int *rc );
+void C_subpgm( int *rc ) { *rc = 5; }
+
+/* mixed underscore */
+void C_subpgm_( int *rc );
+void C_subpgm_( int *rc ) { *rc = 6; }
+ ])
+])
+AC_LANG_POP([C])
+
+AC_LANG_PUSH([Fortran 77])
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program test
+ integer rc
+ rc = -1
+ call c_subpgm( rc )
+ write(6,*) "rc=", rc
+ end
+ ])
+])
+AC_LANG_POP([Fortran 77])
+
+dnl Initialize flags
+pac_linkwithf77=no
+pac_linkwithC=no
+
+dnl Use F77 as a linker to compile a Fortran main and C subprogram.
+if test "$pac_linkwithC" != "yes" ; then
+ AC_LANG_PUSH([C])
+ AC_COMPILE_IFELSE([],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS"
+ AC_LANG_PUSH([Fortran 77])
+ AC_LINK_IFELSE([],[
+ pac_linkwithf77=yes
+ AC_MSG_RESULT([yes])
+ ])
+ AC_LANG_POP([Fortran 77])
+ LIBS="$saved_LIBS"
+ if test "$pac_linkwithf77" = "yes" ; then
+ rm -f pac_conftest.$OBJEXT
+ fi
+ ])
+ AC_LANG_POP([C])
+fi
+
+dnl Use C as a linker and FLIBS to compile a Fortran main and C subprogram.
+if test "$pac_linkwithf77" != "yes" ; then
+ AC_LANG_PUSH([Fortran 77])
+ AC_COMPILE_IFELSE([],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
+ AC_LANG_PUSH([C])
+ AC_LINK_IFELSE([],[
+ pac_linkwithC=yes
+ AC_MSG_RESULT([yes])
+ ])
+ AC_LANG_POP([C])
+ LIBS="$saved_LIBS"
+ if test "$pac_linkwithC" = "yes" ; then
+ rm -f pac_f77conftest.$OBJEXT
+ fi
+ ])
+ AC_LANG_POP([Fortran 77])
+fi
+
+AC_LANG_PUSH([Fortran 77])
+rm -f conftest.$ac_ext
+AC_LANG_POP([Fortran 77])
+
+AC_LANG_PUSH([C])
+rm -f conftest.$ac_ext
+AC_LANG_POP([C])
+
+if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
+ AC_MSG_RESULT(no)
+ AC_CHECK_PROG(FILE, file, file, [])
+ if test "X$FILE" != "X" ; then
+ fobjtype="`${FILE} pac_f77conftest.$OBJEXT | sed -e \"s|pac_f77conftest\.$OBJEXT||g\"`"
+ cobjtype="`${FILE} pac_conftest.$OBJEXT | sed -e \"s|pac_conftest\.$OBJEXT||g\"`"
+ if test "$fobjtype" != "$cobjtype" ; then
+ AC_MSG_ERROR([**** Incompatible Fortran and C Object File Types! ****
+F77 Object File Type produced by \"${F77} ${FFLAGS}\" is : ${fobjtype}.
+ C Object File Type produced by \"${CC} ${CFLAGS}\" is : ${cobjtype}.])
+ fi
+ fi
+fi
+])
+dnl
+dnl /*D
+dnl PAC_F77_WORKS_WITH_CPP
+dnl
+dnl Checks if Fortran 77 compiler works with C preprocessor
+dnl
+dnl Most systems allow the Fortran compiler to process .F and .F90 files
+dnl using the C preprocessor. However, some systems either do not
+dnl allow this or have serious bugs (OSF Fortran compilers have a bug
+dnl that generates an error message from cpp). The following test
+dnl checks to see if .F works, and if not, whether "cpp -P -C" can be used
+dnl D*/
+AC_DEFUN([PAC_F77_WORKS_WITH_CPP],[
+AC_REQUIRE([AC_PROG_CPP])
+AC_MSG_CHECKING([whether Fortran 77 compiler processes .F files with C preprocessor])
+AC_LANG_PUSH([Fortran 77])
+saved_f77_ext=${ac_ext}
+ac_ext="F"
+saved_FFLAGS="$FFLAGS"
+FFLAGS="$FFLAGS $CPPFLAGS"
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program main
+#define ASIZE 10
+ integer a(ASIZE)
+ end
+ ])
+])
+AC_COMPILE_IFELSE([],[
+ pac_cv_f77_accepts_F=yes
+ ifelse([$1],[],[],[$1=""])
+],[
+ pac_cv_f77_accepts_F=no
+ ifelse([$1],[],[:],[$1="false"])
+])
+# Restore Fortran 77's ac_ext but not FFLAGS
+ac_ext="$saved_f77_ext"
+
+if test "$pac_cv_f77_accepts_F" != "yes" ; then
+ pac_cpp_f77="$ac_cpp -C -P conftest.F > conftest.$ac_ext"
+ PAC_RUNLOG_IFELSE([$pac_cpp_f77],[
+ if test -s conftest.${ac_ext} ; then
+ AC_COMPILE_IFELSE([],[
+ pac_cv_f77_accepts_F="no, use cpp"
+ ifelse([$1],[],[],[$1="$CPP -C -P"])
+ ],[])
+ rm -f conftest.${ac_ext}
+ fi
+ ],[])
+fi
+FFLAGS="$saved_FFLAGS"
+rm -f conftest.F
+AC_LANG_POP([Fortran 77])
+AC_MSG_RESULT([$pac_cv_f77_accepts_F])
+])
+dnl
+dnl /*D
+dnl PAC_PROG_F77_CRAY_POINTER - Check if Fortran 77 supports Cray-style pointer.
+dnl If so, set pac_cv_prog_f77_has_pointer to yes
+dnl and find out if any extra compiler flag is
+dnl needed and set it as CRAYPTR_FFLAGS.
+dnl i.e. CRAYPTR_FFLAGS is meaningful only if
+dnl pac_cv_prog_f77_has_pointer = yes.
+dnl
+dnl Synopsis:
+dnl PAC_PROG_F77_CRAY_POINTER([action-if-true],[action-if-false])
+dnl D*/
+AC_DEFUN([PAC_PROG_F77_CRAY_POINTER],[
+AC_CACHE_CHECK([whether Fortran 77 supports Cray-style pointer],
+pac_cv_prog_f77_has_pointer,[
+AC_LANG_PUSH([Fortran 77])
+AC_LANG_CONFTEST([
+ AC_LANG_PROGRAM([],[
+ integer M
+ pointer (MPTR,M)
+ data MPTR/0/
+ ])
+])
+saved_FFLAGS="$FFLAGS"
+pac_cv_prog_f77_has_pointer=no
+CRAYPTR_FFLAGS=""
+for ptrflag in '' '-fcray-pointer' ; do
+ FFLAGS="$saved_FFLAGS $ptrflag"
+ AC_COMPILE_IFELSE([], [
+ pac_cv_prog_f77_has_pointer=yes
+ CRAYPTR_FFLAGS="$ptrflag"
+ break
+ ])
+done
+dnl Restore FFLAGS first, since user may not want to modify FFLAGS
+FFLAGS="$saved_FFLAGS"
+dnl remove conftest after ac_lang_conftest
+rm -f conftest.$ac_ext
+AC_LANG_POP([Fortran 77])
+])
+if test "$pac_cv_prog_f77_has_pointer" = "yes" ; then
+ AC_MSG_CHECKING([for Fortran 77 compiler flag for Cray-style pointer])
+ if test "X$CRAYPTR_FFLAGS" != "X" ; then
+ AC_MSG_RESULT([$CRAYPTR_FFLAGS])
+ else
+ AC_MSG_RESULT([none])
+ fi
+ ifelse([$1],[],[:],[$1])
+else
+ ifelse([$2],[],[:],[$2])
+fi
+])
+dnl
+dnl
+dnl PAC_F77_INIT_WORKS_WITH_C
+dnl
+AC_DEFUN([PAC_F77_INIT_WORKS_WITH_C],[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_MSG_CHECKING([whether Fortran init will work with C])
+pac_f_init_works_with_c=unknown
+AC_LANG_PUSH([Fortran 77])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ subroutine minit()
+ common /m1/ vc, vc2
+ character*1 vc(1,1), vc2(1)
+ common /m2/ vd
+ integer vd
+ save /m1/, /m2/
+ call minitc( vc, vc2, vd )
+ end
+ ])
+],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ # This test checks if Fortran init can be done in pure C environment,
+ # i.e. no FLIBS in linking, so don't put FLIBS in LIBS below
+ dnl LIBS="pac_f77conftest.$OBJEXT $FLIBS $LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $LIBS"
+ AC_LANG_PUSH([C])
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define minit_ MINIT
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define minit_ minit
+#endif
+extern void minit_(void);
+int main( int argc, char **argv )
+{
+ minit_();
+ return 0;
+}
+char *v1 = 0;
+char *vc2 = 0;
+int v2 = 0;
+void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 );
+void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 )
+{
+v1 = dv1;
+v2 = dv3;
+vc2 = dv2;
+*vc2 = ' ';
+}
+ ])
+ ],[pac_f_init_works_with_c=yes],[pac_f_init_works_with_c=no])
+ AC_LANG_POP([C])
+ LIBS="$saved_LIBS"
+ rm -f pac_f77conftest.$OBJEXT
+])
+AC_LANG_POP([Fortran 77])
+AC_MSG_RESULT([$pac_f_init_works_with_c])
+])
+dnl
+dnl PAC_F77_LOGICALS_IN_C(MPI_FINT)
+dnl
+dnl where MPI_FINT is the C type for Fortran integer.
+dnl
+dnl Use a Fortran main program. This simplifies some steps,
+dnl since getting all of the Fortran libraries (including shared
+dnl libraries that are not in the default library search path) can
+dnl be tricky. Specifically, The PROG_F77_RUN_PROC_FROM_C failed with
+dnl some installations of the Portland group compiler.
+dnl
+dnl We'd also like to check other values for .TRUE. and .FALSE. to see
+dnl if the compiler allows (or uses) more than one value (some DEC compilers,
+dnl for example, used the high (sign) bit to indicate true and false; the
+dnl rest of the bits were ignored. For now, we'll assume that there are
+dnl unique true and false values.
+dnl
+AC_DEFUN([PAC_F77_LOGICALS_IN_C],[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
+pac_mpi_fint="$1"
+AC_MSG_CHECKING([for values of Fortran logicals])
+AC_CACHE_VAL(pac_cv_prog_f77_true_false_value,[
+pac_cv_prog_f77_true_false_value=""
+AC_LANG_PUSH([C])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+#if defined(HAVE_STDLIB_H) || defined(STDC_HEADERS)
+#include <stdlib.h>
+#endif
+#ifdef F77_NAME_UPPER
+#define ftest_ FTEST
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define ftest_ ftest
+#endif
+void ftest_( $pac_mpi_fint *, $pac_mpi_fint *);
+void ftest_( $pac_mpi_fint *itrue, $pac_mpi_fint *ifalse )
+{
+ FILE *f = fopen("conftestval","w");
+ if (!f) exit(1);
+ fprintf( f, "%d %d\n", *itrue, *ifalse );
+ fclose(f);
+}
+ ])
+],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $saved_LIBS"
+ AC_LANG_PUSH([Fortran 77])
+ AC_RUN_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ logical itrue, ifalse
+ itrue = .TRUE.
+ ifalse = .FALSE.
+ call ftest( itrue, ifalse )
+ end
+ ])
+ ],[
+ pac_cv_prog_f77_true_false_value="`cat conftestval`"
+ ],[
+ AC_MSG_WARN([Failed to build/run program to determine Fortran logical values.])
+ ],[
+ # Cross-Compiling. Allow the user to set the values
+ if test -n "$CROSS_F77_TRUE_VALUE" -a -n "$CROSS_F77_FALSE_VALUE" ; then
+ pac_cv_prog_f77_true_false_value="$CROSS_F77_TRUE_VALUE $CROSS_F77_FALSE_VALUE"
+ else
+ AC_MSG_WARN([Either CROSS_F77_TRUE_VALUE="$CROSS_F77_TRUE_VALUE" or CROSS_F77_FALSE_VALUE="$CROSS_F77_FALSE_VALUE" is not set.])
+ fi
+ ])
+ AC_LANG_POP([Fortran 77])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+])
+AC_LANG_POP([C])
+])
+dnl Endof ac_cache_val
+if test "X$pac_cv_prog_f77_true_false_value" != "X" ; then
+ true_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/ .*//g'`"
+ false_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/.* *//g'`"
+ if test -n "$true_val" -a -n "$false_val" ; then
+ AC_MSG_RESULT([True is $true_val and False is $false_val])
+ else
+ AC_MSG_RESULT([could not determine])
+ fi
+fi
+if test -n "$true_val" -a -n "$false_val" ; then
+ AC_DEFINE(F77_TRUE_VALUE_SET,1,[Define if we know the value of Fortran true and false])
+ AC_DEFINE_UNQUOTED(F77_TRUE_VALUE,$true_val,[The value of true in Fortran])
+ AC_DEFINE_UNQUOTED(F77_FALSE_VALUE,$false_val,[The value of false in Fortran])
+fi
+])
+dnl/*D
+dnl PAC_PROG_F77_MISMATCHED_ARGS([option],[AllOnly]) - Determine whether the
+dnl Fortran compiler allows routines to be called with different
+dnl argument types. If not, attempts to determine a command-line argument
+dnl that permits such use
+dnl (The Fortran standard prohibits this usage)
+dnl
+dnl option is set to the compiler option to use.
+dnl if AllOnly is yes (literal, not variable with value), then only consider
+dnl options that turn off checking
+dnl for all routines
+dnl
+dnl The NAG Fortran compiler, nagfor, is known to enforce this part of the
+dnl Fortran standard.
+dnl D*/
+AC_DEFUN([PAC_PROG_F77_MISMATCHED_ARGS],[
+AC_MSG_CHECKING([whether $F77 allows mismatched arguments])
+if test "X$pac_cv_prog_f77_mismatched_args" = X ; then
+ pac_cv_prog_f77_mismatched_args_parm=""
+ pac_cv_prog_f77_mismatched_args=no
+ AC_LANG_PUSH([Fortran 77])
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ integer a
+ real b
+ character c
+ call foo1(a)
+ call foo1(b)
+ call foo1(c)
+ end
+])],[pac_cv_prog_f77_mismatched_args=yes])
+ if test "$pac_cv_prog_f77_mismatched_args" != "yes" ; then
+ # try again with -wmismatch=foo1
+ save_FFLAGS="$FFLAGS"
+ # The best solution is to turn off errors on particular routines
+ # if that isn't possible (e.g., too many of them), then
+ # just try arguments that turn off all checking
+ for flags in ifelse($2,yes,,"-wmismatch=foo1") "-mismatch" ; do
+ testok=no
+ FFLAGS="$FFLAGS $flags"
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ integer a
+ real b
+ character c
+ call foo1(a)
+ call foo1(b)
+ call foo1(c)
+ end
+])],[testok=yes])
+ FFLAGS="$save_FFLAGS"
+ if test "$testok" = yes ; then break ; fi
+ done
+ if test "$testok" = yes ; then
+ pac_cv_prog_f77_mismatched_args_parm="$flags"
+ pac_cv_prog_f77_mismatched_args="yes, with $pac_cv_prog_f77_mismatched_args_parm"
+ fi
+ fi
+ AC_LANG_POP([Fortran 77])
+fi
+AC_MSG_RESULT($pac_cv_prog_f77_mismatched_args)
+if test "$pac_cv_prog_f77_mismatched_args" = no ; then
+ AC_MSG_ERROR([The Fortran compiler $F77 will not compile files that call
+the same routine with arguments of different types.])
+fi
+
+ifelse($1,,,[$1=$pac_cv_prog_f77_mismatched_args_parm])
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_f77old.m4 b/src/mpi/romio/mpl/confdb/aclocal_f77old.m4
new file mode 100644
index 0000000..5d6e2d9
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_f77old.m4
@@ -0,0 +1,389 @@
+dnl/*D
+dnl PAC_PROG_F77_CMDARGS - Determine how to access the command line from
+dnl Fortran 77
+dnl
+dnl Output Effects:
+dnl The following variables are set:
+dnl.vb
+dnl F77_GETARG - Statement to get an argument i into string s
+dnl F77_IARGC - Routine to return the number of arguments
+dnl FXX_MODULE - Module command when using Fortran 90 compiler
+dnl F77_GETARGDECL - Declaration of routine used for F77_GETARG
+dnl F77_GETARG_FFLAGS - Flags needed when compiling/linking
+dnl F77_GETARG_LDFLAGS - Flags needed when linking
+dnl.ve
+dnl If 'F77_GETARG' has a value, then that value and the values for these
+dnl other symbols will be used instead. If no approach is found, all of these
+dnl variables will have empty values.
+dnl If no other approach works and a file 'f77argdef' is in the directory,
+dnl that file will be sourced for the values of the above four variables.
+dnl
+dnl In most cases, you should add F77_GETARG_FFLAGS to the FFLAGS variable
+dnl and F77_GETARG_LDFLAGS to the LDFLAGS variable, to ensure that tests are
+dnl performed on the compiler version that will be used.
+dnl
+dnl 'AC_SUBST' is called for all six variables.
+dnl
+dnl One complication is that on systems with multiple Fortran compilers,
+dnl some libraries used by one Fortran compiler may have been (mis)placed
+dnl in a common location. We have had trouble with libg2c in particular.
+dnl To work around this, we test whether iargc etc. work first. This
+dnl will catch most systems and will speed up the tests.
+dnl
+dnl Next, the libraries are only added if they are needed to complete a
+dnl link; they aren''t added just because they exist.
+dnl
+dnl f77argdef
+dnl D*/
+dnl
+dnl Random notes
+dnl You can export the command line arguments from C to the g77 compiler
+dnl using
+dnl extern char **__libc_argv;
+dnl extern int __libc_argc;
+dnl f_setarg( __libc_argc, __libc_argv );
+dnl
+AC_DEFUN([PAC_PROG_F77_CMDARGS],[
+found_cached="yes"
+AC_MSG_CHECKING([for routines to access the command line from Fortran 77])
+AC_CACHE_VAL(pac_cv_prog_f77_cmdarg,
+[
+ AC_MSG_RESULT([searching...])
+ found_cached="no"
+ # First, we perform a quick check. Does iargc and getarg work?
+ fxx_module="${FXX_MODULE:-}"
+ f77_getargdecl="${F77_GETARGDECL:-external getarg}"
+ f77_getarg="${F77_GETARG:-call GETARG(i,s)}"
+ f77_iargc="${F77_IARGC:-IARGC()}"
+ #
+ # Grumble. The Absoft Fortran compiler computes i - i as 0 and then
+ # 1.0 / 0 at compile time, even though the code may never be executed.
+ # What we need is a way to generate an error, so the second usage of i
+ # was replaced with f77_iargc.
+ cat > conftest.f <<EOF
+ program main
+$fxx_module
+ integer i, j
+ character*20 s
+ $f77_getargdecl
+ i = 0
+ $f77_getarg
+ i=$f77_iargc
+ if (i .gt. 1) then
+ j = i - $f77_iargc
+ j = 1.0 / j
+ endif
+ end
+EOF
+ found_answer="no"
+ if test -z "$ac_fcompilelink" ; then
+ ac_fcompilelink="${F77-f77} -o conftest $FFLAGS $flags conftest.f $LDFLAGS $LIBS 1>&AC_FD_CC"
+ fi
+ AC_MSG_CHECKING([whether ${F77-f77} $flags $libs works with GETARG and IARGC])
+ if AC_TRY_EVAL(ac_fcompilelink) && test -x conftest ; then
+ # Check that cross != yes so that this works with autoconf 2.52
+ # Check that cross_compiling != yes so that this works with
+ # autoconf 2.6x for some (but almost certainly not all)x
+ # Question: why do we test that this runs? It looks like we
+ # needed this for some old Fortran compilers that produced
+ # executable code that then did not run.
+ if test "$ac_cv_prog_f77_cross" != "yes" -a \
+ "$cross_compiling" != "yes" ; then
+ if ./conftest >/dev/null 2>&1 ; then
+ found_answer="yes"
+ FXX_MODULE="$fxx_module"
+ F77_GETARGDECL="$f77_getargdecl"
+ F77_GETARG="$f77_getarg"
+ F77_IARGC="$f77_iargc"
+ AC_MSG_RESULT(yes)
+ fi
+ fi
+ fi
+ if test $found_answer = "no" ; then
+ AC_MSG_RESULT(no)
+ # Grumph. Here are a bunch of different approaches
+ # We have several axes the check:
+ # Library to link with (none, -lU77 (HPUX), -lg2c (LINUX f77))
+ # PEPCF90 (Intel ifc)
+ # The first line is a dummy
+ # (we experimented with using a <space>, but this caused other
+ # problems because we need <space> in the IFS)
+ trial_LIBS="0 -lU77 -lPEPCF90"
+ if test "$NOG2C" != "1" ; then
+ trial_LIBS="$trial_LIBS -lg2c"
+ fi
+ # Discard libs that are not availble:
+ save_IFS="$IFS"
+ # Make sure that IFS includes a space, or the tests that run programs
+ # may fail
+ IFS=" ""
+"
+ save_trial_LIBS="$trial_LIBS"
+ trial_LIBS=""
+ cat > conftest.f <<EOF
+ program main
+ end
+EOF
+ ac_fcompilelink_test='${F77-f77} -o conftest $FFLAGS conftest.f $LDFLAGS $libs $LIBS 1>&AC_FD_CC'
+ for libs in $save_trial_LIBS ; do
+ if test "$libs" = "0" ; then
+ lib_ok="yes"
+ else
+ AC_MSG_CHECKING([whether Fortran 77 links with $libs])
+ if AC_TRY_EVAL(ac_fcompilelink_test) && test -x conftest ; then
+ AC_MSG_RESULT([yes])
+ lib_ok="yes"
+ else
+ AC_MSG_RESULT([no])
+ lib_ok="no"
+ fi
+ fi
+ if test "$lib_ok" = "yes" ; then
+ trial_LIBS="$trial_LIBS
+$libs"
+ fi
+ done
+
+ # Options to use when compiling and linking
+ # +U77 is needed by HP Fortran to access getarg etc.
+ # The -N109 was used for getarg before we realized that GETARG
+ # was necessary with the (non standard conforming) Absoft compiler
+ # (Fortran is monocase; Absoft uses mixedcase by default)
+ # The -f is used by Absoft and is the compiler switch that folds
+ # symbolic names to lower case. Without this option, the compiler
+ # considers upper- and lower-case letters to be unique.
+ # The -YEXT_NAMES=LCS will cause external names to be output as lower
+ # case letter for Absoft F90 compilers (default is upper case)
+ # The first line is "<space><newline>, the space is important
+ # To make the Absoft f77 and f90 work together, we need to prefer the
+ # upper case versions of the arguments. They also require libU77.
+ # -YCFRL=1 causes Absoft f90 to work with g77 and similar (f2c-based)
+ # Fortran compilers
+ #
+ # Problem: The Intel efc compiler hangs when presented with -N109 .
+ # The only real fix for this is to detect this compiler and exclude
+ # the test. We may want to reorganize these tests so that if we
+ # can compile code without special options, we never look for them.
+ #
+ using_intel_efc="no"
+ pac_test_msg=`$F77 -V 2>&1 | grep 'Intel(R) Fortran Itanium'`
+ if test "$pac_test_msg" != "" ; then
+ using_intel_efc="yes"
+ fi
+ if test "$using_intel_efc" = "yes" ; then
+ trial_FLAGS="000"
+ else
+ trial_FLAGS="000
+-N109
+-f
+-YEXT_NAMES=UCS
+-YEXT_NAMES=LCS
+-YCFRL=1
++U77"
+ fi
+ # Discard options that are not available:
+ # (IFS already saved above)
+ IFS=" ""
+"
+ save_trial_FLAGS="$trial_FLAGS"
+ trial_FLAGS=""
+ for flag in $save_trial_FLAGS ; do
+ if test "$flag" = " " -o "$flag" = "000" ; then
+ opt_ok="yes"
+ else
+ PAC_F77_CHECK_COMPILER_OPTION($flag,opt_ok=yes,opt_ok=no)
+ fi
+ if test "$opt_ok" = "yes" ; then
+ if test "$flag" = " " -o "$flag" = "000" ; then
+ fflag=""
+ else
+ fflag="$flag"
+ fi
+ # discard options that don't allow mixed-case name matching
+ cat > conftest.f <<EOF
+ program main
+ call aB()
+ end
+ subroutine Ab()
+ end
+EOF
+ if test -n "$fflag" ; then flagval="with $fflag" ; else flagval="" ; fi
+ AC_MSG_CHECKING([whether Fortran 77 routine names are case-insensitive $flagval])
+ dnl we can use double quotes here because all is already
+ dnl evaluated
+ ac_fcompilelink_test="${F77-f77} -o conftest $fflag $FFLAGS conftest.f $LDFLAGS $LIBS 1>&AC_FD_CC"
+ if AC_TRY_EVAL(ac_fcompilelink_test) && test -x conftest ; then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ opt_ok="no"
+ fi
+ fi
+ if test "$opt_ok" = "yes" ; then
+ trial_FLAGS="$trial_FLAGS
+$flag"
+ fi
+ done
+ IFS="$save_IFS"
+ # Name of routines. Since these are in groups, we use a case statement
+ # and loop until the end (accomplished by reaching the end of the
+ # case statement
+ # For one version of Nag F90, the names are
+ # call f90_unix_MP_getarg(i,s) and f90_unix_MP_iargc().
+ trial=0
+ while test -z "$pac_cv_prog_f77_cmdarg" ; do
+ case $trial in
+ 0) # User-specified values, if any
+ if test -z "$F77_GETARG" -o -z "$F77_IARGC" ; then
+ trial=`expr $trial + 1`
+ continue
+ fi
+ MSG="Using environment values of F77_GETARG etc."
+ ;;
+ 1) # Standard practice, uppercase (some compilers are case-sensitive)
+ FXX_MODULE=""
+ F77_GETARGDECL="external GETARG"
+ F77_GETARG="call GETARG(i,s)"
+ F77_IARGC="IARGC()"
+ MSG="GETARG and IARGC"
+ ;;
+ 2) # Standard practice, lowercase
+ FXX_MODULE=""
+ F77_GETARGDECL="external getarg"
+ F77_GETARG="call getarg(i,s)"
+ F77_IARGC="iargc()"
+ MSG="getarg and iargc"
+ ;;
+ 3) # Posix alternative
+ FXX_MODULE=""
+ F77_GETARGDECL="external pxfgetarg"
+ F77_GETARG="call pxfgetarg(i,s,l,ier)"
+ F77_IARGC="ipxfargc()"
+ MSG="pxfgetarg and ipxfargc"
+ ;;
+ 4) # Nag f90_unix_env module
+ FXX_MODULE=" use f90_unix_env"
+ F77_GETARGDECL=""
+ F77_GETARG="call getarg(i,s)"
+ F77_IARGC="iargc()"
+ MSG="f90_unix_env module"
+ ;;
+ 5) # Nag f90_unix module
+ FXX_MODULE=" use f90_unix"
+ F77_GETARGDECL=""
+ F77_GETARG="call getarg(i,s)"
+ F77_IARGC="iargc()"
+ MSG="f90_unix module"
+ ;;
+ 6) # user spec in a file
+ if test -s f77argdef ; then
+ . ./f77argdef
+ MSG="Using definitions in the file f77argdef"
+ else
+ trial=`expr $trial + 1`
+ continue
+ fi
+ ;;
+ 7) # gfortran won't find getarg if it is marked as external
+ FXX_MODULE=""
+ F77_GETARGDECL="intrinsic GETARG"
+ F77_GETARG="call GETARG(i,s)"
+ F77_IARGC="IARGC()"
+ MSG="intrinsic GETARG and IARGC"
+ ;;
+ *) # exit from while loop
+ FXX_MODULE=""
+ F77_GETARGDECL=""
+ F77_GETARG=""
+ F77_IARGC=""
+ break
+ ;;
+ esac
+ # Create the program. Make sure that we can run it.
+ # Force a divide-by-zero if there is a problem (but only at runtime!
+ # (the Absoft compiler does divide-by-zero at compile time)
+ cat > conftest.f <<EOF
+ program main
+$FXX_MODULE
+ integer i, j
+ character*20 s
+ $F77_GETARGDECL
+ i = 0
+ $F77_GETARG
+ i=$F77_IARGC
+ if (i .gt. 1) then
+ j = i - $F77_IARGC
+ j = 1.0 / j
+ endif
+ end
+EOF
+ #
+ # Now, try to find some way to compile and link that program, looping
+ # over the possibilities of options and libraries
+ save_IFS="$IFS"
+ IFS=" ""
+"
+ for libs in $trial_LIBS ; do
+ if test -n "$pac_cv_prog_f77_cmdarg" ; then break ; fi
+ if test "$libs" = " " -o "$libs" = "0" ; then libs="" ; fi
+ for flags in $trial_FLAGS ; do
+ if test "$flags" = " " -o "$flags" = "000"; then flags="" ; fi
+ AC_MSG_CHECKING([whether ${F77-f77} $flags $libs works with $MSG])
+ IFS="$save_IFS"
+ dnl We need this here because we've fiddled with IFS
+ ac_fcompilelink_test="${F77-f77} -o conftest $FFLAGS $flags conftest.f $LDFLAGS $libs $LIBS 1>&AC_FD_CC"
+ found_answer="no"
+ if AC_TRY_EVAL(ac_fcompilelink_test) && test -x conftest ; then
+ if test "$ac_cv_prog_f77_cross" != "yes" -a \
+ "$cross_compiling" != "yes" ; then
+ if ./conftest >/dev/null 2>&1 ; then
+ found_answer="yes"
+ fi
+ else
+ found_answer="yes"
+ fi
+ fi
+ IFS=" ""
+"
+ if test "$found_answer" = "yes" ; then
+ AC_MSG_RESULT([yes])
+ pac_cv_prog_f77_cmdarg="$MSG"
+ pac_cv_prog_f77_cmdarg_fflags="$flags"
+ pac_cv_prog_f77_cmdarg_ldflags="$libs"
+ break
+ else
+ AC_MSG_RESULT([no])
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.f >&AC_FD_CC
+ fi
+ done
+ done
+ IFS="$save_IFS"
+ rm -f conftest.*
+ trial=`expr $trial + 1`
+ done
+fi
+pac_cv_F77_GETARGDECL="$F77_GETARGDECL"
+pac_cv_F77_IARGC="$F77_IARGC"
+pac_cv_F77_GETARG="$F77_GETARG"
+pac_cv_FXX_MODULE="$FXX_MODULE"
+])
+if test "$found_cached" = "yes" ; then
+ AC_MSG_RESULT([$pac_cv_prog_f77_cmdarg])
+elif test -z "$pac_cv_F77_IARGC" ; then
+ AC_MSG_WARN([Could not find a way to access the command line from Fortran 77])
+fi
+# Set the variable values based on pac_cv_prog_xxx
+F77_GETARGDECL="$pac_cv_F77_GETARGDECL"
+F77_IARGC="$pac_cv_F77_IARGC"
+F77_GETARG="$pac_cv_F77_GETARG"
+FXX_MODULE="$pac_cv_FXX_MODULE"
+F77_GETARG_FFLAGS="$pac_cv_prog_f77_cmdarg_fflags"
+F77_GETARG_LDFLAGS="$pac_cv_prog_f77_cmdarg_ldflags"
+AC_SUBST(F77_GETARGDECL)
+AC_SUBST(F77_IARGC)
+AC_SUBST(F77_GETARG)
+AC_SUBST(FXX_MODULE)
+AC_SUBST(F77_GETARG_FFLAGS)
+AC_SUBST(F77_GETARG_LDFLAGS)
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_fc.m4 b/src/mpi/romio/mpl/confdb/aclocal_fc.m4
new file mode 100644
index 0000000..4318e38
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_fc.m4
@@ -0,0 +1,1225 @@
+dnl PAC_FC_SEARCH_LIST - expands to a whitespace separated list of modern
+dnl fortran compilers for use with AC_PROG_FC that is more suitable for HPC
+dnl software packages
+AC_DEFUN([PAC_FC_SEARCH_LIST],
+ [ifort pgf90 pathf90 pathf95 xlf90 xlf95 xlf2003 gfortran f90 epcf90 f95 fort lf95 g95 ifc efc gfc])
+dnl /*D
+dnl PAC_PROG_FC([COMPILERS])
+dnl
+dnl COMPILERS is a space separated list of Fortran 77 compilers to search
+dnl for. Fortran 95 isn't strictly backwards-compatible with Fortran 77,
+dnl but `f95' is worth trying.
+dnl
+dnl Compilers are ordered by
+dnl 1. F77, F90, F95
+dnl 2. Good/tested native compilers, bad/untested native compilers
+dnl 3. Wrappers around f2c go last.
+dnl
+dnl `fort77' is a wrapper around `f2c'.
+dnl It is believed that under HP-UX `fort77' is the name of the native
+dnl compiler. On some Cray systems, fort77 is a native compiler.
+dnl frt is the Fujitsu F77 compiler.
+dnl pgf77 and pgf90 are the Portland Group F77 and F90 compilers.
+dnl xlf/xlf90/xlf95/xlf2003 are IBM (AIX) F77/F90/F95/F2003 compilers.
+dnl lf95 is the Lahey-Fujitsu compiler.
+dnl fl32 is the Microsoft Fortran "PowerStation" compiler.
+dnl af77 is the Apogee F77 compiler for Intergraph hardware running CLIX.
+dnl epcf90 is the "Edinburgh Portable Compiler" F90.
+dnl fort is the Compaq Fortran 90 (now 95) compiler for Tru64 and Linux/Alpha.
+dnl pathf90 is the Pathscale Fortran 90 compiler
+dnl ifort is another name for the Intel f90 compiler
+dnl efc - An older Intel compiler (?)
+dnl ifc - An older Intel compiler
+dnl fc - A compiler on some unknown system. This has been removed because
+dnl it may also be the name of a command for something other than
+dnl the Fortran compiler (e.g., fc=file system check!)
+dnl gfortran - The GNU Fortran compiler (not the same as g95)
+dnl gfc - An alias for gfortran recommended in cygwin installations
+dnl NOTE: this macro suffers from a basically intractable "expanded before it
+dnl was required" problem when libtool is also used
+dnl D*/
+AC_DEFUN([PAC_PROG_FC],[
+PAC_PUSH_FLAG([FCFLAGS])
+AC_PROG_FC([m4_default([$1],[PAC_FC_SEARCH_LIST])])
+PAC_POP_FLAG([FCFLAGS])
+])
+dnl
+dnl PAC_FC_EXT checks for the default Fortran 90 program extension, f90 then f.
+dnl This could be replaced by AC_FC_SRCEXT but since AC_FC_SRCEXT
+dnl adds FCFLAGS_ext, which is used to modify FCFLAGS or Makefile.in.
+dnl So will do this later.
+dnl
+AC_DEFUN([PAC_FC_EXT],[
+AC_MSG_CHECKING([for extension for Fortran 90 programs])
+ac_fc_srcext="f90"
+AC_LANG_PUSH(Fortran)
+AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM()
+],[
+ AC_MSG_RESULT([f90])
+],[
+ ac_fc_srcext="f"
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM()
+ ],[
+ AC_MSG_RESULT([f])
+ ],[
+ AC_MSG_RESULT([unknown!])
+ ])
+])
+AC_LANG_POP(Fortran)
+])
+dnl
+dnl Internal routine for testing F90
+dnl PAC_PROG_FC_WORKS()
+dnl
+AC_DEFUN([PAC_PROG_FC_WORKS],[
+AC_REQUIRE([PAC_FC_EXT])
+AC_LANG_PUSH(Fortran)
+AC_MSG_CHECKING([whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) works])
+AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+ program conftest
+ integer, dimension(10) :: n
+ end
+ ])
+],[
+ pac_cv_prog_fc_works="yes"
+ AC_MSG_RESULT([$pac_cv_prog_fc_works])
+ AC_MSG_CHECKING([whether the Fortran 90 compiler ($FC $FCFLAGS $LDFLAGS) is a cross-compiler])
+ AC_RUN_IFELSE([],
+ [pac_cv_prog_fc_cross="no"],
+ [pac_cv_prog_fc_cross="yes"],
+ [pac_cv_prog_fc_cross="$cross_compiling"]
+ )
+ AC_MSG_RESULT($pac_cv_prog_fc_cross)
+],[
+ pac_cv_prog_fc_works="no"
+ AC_MSG_WARN([installation or configuration problem: Fortran 90 compiler cannot create executables.])
+])
+# The intel compiler sometimes generates these work.pc and .pcl files
+rm -f work.pc work.pcl
+AC_LANG_POP(Fortran)
+dnl cross_compiling no longer maintained by autoconf as part of the
+dnl AC_LANG changes. If we set it here, a later AC_LANG may not
+dnl restore it (in the case where one compiler claims to be a cross compiler
+dnl and another does not)
+dnl cross_compiling=$pac_cv_prog_f90_cross
+])
+dnl/*D
+dnl PAC_PROG_FC_INT_KIND - Determine kind parameter for an integer with
+dnl the specified number of bytes.
+dnl
+dnl Synopsis:
+dnl PAC_PROG_FC_INT_KIND(variable-to-set,number-of-bytes,[cross-size])
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_FC_INT_KIND],[
+# Set the default
+$1=-1
+if test "$pac_cv_prog_fc_cross" = "yes" ; then
+ AS_IF([test -z "$3"],[AC_MSG_ERROR(['$3' is empty])])
+ $1="$3"
+else
+ AC_LANG_PUSH(Fortran)
+ AC_MSG_CHECKING([for Fortran 90 integer kind for $2-byte integers])
+ # Convert bytes to digits
+ case $2 in
+ 1) sellen=2 ;;
+ 2) sellen=4 ;;
+ 4) sellen=8 ;;
+ 8) sellen=16 ;;
+ 16) sellen=30 ;;
+ *) sellen=8 ;;
+ esac
+ # Check for cached value
+ eval testval=\$"pac_cv_prog_fc_int_kind_$sellen"
+ if test -n "$testval" ; then
+ AC_MSG_RESULT([$testval (cached)])
+ $1=$testval
+ else
+ KINDVAL="unavailable"
+ eval "pac_cv_prog_fc_int_kind_$sellen"=-1
+ AC_RUN_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ integer ii
+ ii = selected_int_kind($sellen)
+ open(8, file="conftest1.out", form="formatted")
+ write (8,*) ii
+ close(8)
+ stop
+ end
+ ])
+ ],[pac_run_ok=yes],[pac_run_ok=no])
+ if test "$pac_run_ok" = "yes" ; then
+ if test -s conftest1.out ; then
+ # Because of write, there may be a leading blank.
+ KINDVAL=`cat conftest1.out | sed 's/ //g'`
+ eval "pac_cv_prog_fc_int_kind_$sellen"=$KINDVAL
+ $1=$KINDVAL
+ fi
+ fi
+ AC_MSG_RESULT([$KINDVAL])
+ fi # not cached
+ AC_LANG_POP(Fortran)
+fi # is not cross compiling
+])dnl
+dnl
+dnl ------------------------------------------------------------------------
+dnl Special characteristics that have no autoconf counterpart but that
+dnl we need as part of the Fortran 90 support. To distinquish these, they
+dnl have a [PAC] prefix.
+dnl
+dnl At least one version of the Cray compiler needs the option -em to
+dnl generate a separate module file, rather than including the module
+dnl information in the object (.o) file.
+dnl
+dnl
+dnl PAC_FC_MODULE_EXT(action if found,action if not found)
+dnl
+AC_DEFUN([PAC_FC_MODULE_EXT],
+[AC_CACHE_CHECK([for Fortran 90 module extension],
+pac_cv_fc_module_ext,[
+pac_cv_fc_module_case="unknown"
+AC_LANG_PUSH(Fortran)
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ module conftest
+ integer n
+ parameter (n=1)
+ end module conftest
+ ])
+],[
+ # Look for module name
+ # First, try to find known names. This avoids confusion caused by
+ # additional files (like <name>.stb created by some versions of pgf90)
+ # Early versions of the Intel compiler used d as the module extension;
+ # we include that just to finish the test as early as possible.
+ for name in conftest CONFTEST ; do
+ for ext in mod MOD d ; do
+ if test -s $name.$ext ; then
+ if test $name = conftest ; then
+ pac_cv_fc_module_case=lower
+ else
+ pac_cv_fc_module_case=upper
+ fi
+ pac_cv_fc_module_ext=$ext
+ pac_MOD=$ext
+ break
+ fi
+ done
+ if test -n "$pac_cv_fc_module_ext" ; then break ; fi
+ done
+ if test -z "$pac_MOD" ; then
+ # The test on .err is needed for Cray Fortran.
+ pac_MOD=`ls conftest.* 2>&1 | grep -v conftest.${ac_fc_srcext} | grep -v conftest.o | grep -v conftest.err`
+ pac_MOD=`echo $pac_MOD | sed -e 's/conftest\.//g'`
+ pac_cv_fc_module_case="lower"
+ if test "X$pac_MOD" = "X" ; then
+ pac_MOD=`ls CONFTEST* 2>&1 | grep -v CONFTEST.${ac_fc_srcext} | grep -v CONFTEST.o | grep -v CONFTEST.err`
+ pac_MOD=`echo $pac_MOD | sed -e 's/CONFTEST\.//g'`
+ if test -n "$pac_MOD" -a -s "CONFTEST.$pac_MOD" ; then
+ pac_cv_fc_module_case="upper"
+ else
+ # Clear because we must have gotten an error message
+ pac_MOD=""
+ fi
+ fi
+ if test -z "$pac_MOD" ; then
+ pac_cv_fc_module_ext="unknown"
+ else
+ pac_cv_fc_module_ext=$pac_MOD
+ fi
+ fi
+],[
+ pac_cv_fc_module_ext="unknown"
+])
+
+if test "$pac_cv_fc_module_ext" = "unknown" ; then
+ # Try again, but with an -em option. Abbreviated, because we're
+ # just looking for the Cray option
+ saveFCFLAGS=$FCFLAGS
+ FCFLAGS="$FCFLAGS -em"
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ module conftest
+ integer n
+ parameter (n=1)
+ end module conftest
+ ])
+],[
+ if test -s conftest.mod ; then
+ pac_cv_fc_module_ext="mod"
+ pac_cv_fc_module_case="lower"
+ elif test -s CONFTEST.mod ; then
+ pac_cv_fc_module_ext="mod"
+ pac_cv_fc_module_case="upper"
+ fi
+],[
+ :
+ # do nothing - already have the unknown default value
+])
+ if test "$pac_cv_fc_module_ext" = "unknown" ; then
+ # The additional command line option did not help - restore
+ # the original flags.
+ FCFLAGS=$saveFCFLAGS
+ fi
+fi
+AC_LANG_POP(Fortran)
+])
+#
+AC_SUBST(FCMODEXT)
+if test "$pac_cv_fc_module_ext" = "unknown" ; then
+ ifelse($2,,:,[$2])
+else
+ ifelse($1,,FCMODEXT=$pac_MOD,[$1])
+fi
+])
+dnl
+dnl
+dnl PAC_FC_MODULE_INCFLAG
+AC_DEFUN([PAC_FC_MODULE_INCFLAG],[
+AC_REQUIRE([PAC_FC_MODULE_EXT])
+AC_CACHE_CHECK([for Fortran 90 module include flag],
+pac_cv_fc_module_incflag,[
+AC_LANG_PUSH(Fortran)
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ module conf
+ integer n
+ parameter (n=1)
+ end module conf
+ ])
+])
+pac_madedir="no"
+if test ! -d conf ; then mkdir conftestdir ; pac_madedir="yes"; fi
+if test "$pac_cv_fc_module_case" = "upper" ; then
+ pac_module="CONF.$pac_cv_fc_module_ext"
+else
+ pac_module="conf.$pac_cv_fc_module_ext"
+fi
+AC_COMPILE_IFELSE([],[
+ if test -s "$pac_module" ; then
+ mv $pac_module conftestdir
+ # Remove any temporary files, and hide the work.pc file
+ # (if the compiler generates them)
+ if test -f work.pc ; then
+ mv -f work.pc conftest.pc
+ fi
+ rm -f work.pcl
+ else
+ AC_MSG_WARN([Unable to build a simple Fortran 90 module])
+ # echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+ # cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+ _AC_MSG_LOG_CONFTEST
+ fi
+],[])
+# Remove the conftest* after AC_LANG_CONFTEST
+rm -rf conftest.dSYM
+rm -f conftest.$ac_ext
+
+dnl Create the conftest here so the test isn't created everytime inside loop.
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([],[use conf])])
+
+# Save the original FCFLAGS
+saved_FCFLAGS="$FCFLAGS"
+pac_cv_fc_module_incflag=""
+for inchdr in '-I' '-M' '-p' ; do
+ FCFLAGS="$saved_FCFLAGS ${inchdr}conftestdir"
+ AC_COMPILE_IFELSE([],[pac_cv_fc_module_incflag="$inchdr" ; break])
+done
+if test "X$pac_cv_fc_module_incflag" = "X" ; then
+ if test -s conftest.pc ; then
+ mv conftest.pc conftestdir/mpimod.pc
+ echo "mpimod.pc" > conftestdir/mpimod.pcl
+ echo "`pwd`/conftestdir/mpimod.pc" >> conftestdir/mpimod.pcl
+ inchdr='-cl,'
+ FCFLAGS="$save_FCFLAGS ${inchdr}conftestdir"
+ AC_COMPILE_IFELSE([], [pac_fcompile_ok=yes], [pac_fcompile_ok=no])
+ if test "$pac_fcompile_ok" = "yes" ; then
+ pac_cv_fc_module_incflag="$inchdr"
+ # Not quite right; see the comments that follow
+ AC_MSG_RESULT([-cl,filename where filename contains a list of files and directories])
+ FC_WORK_FILES_ARG="-cl,mpimod.pcl"
+ FCMODINCSPEC="-cl,<dir>/<file>mod.pcl"
+ else
+ # The version of the Intel compiler that I have refuses to let
+ # you put the "work catalog" list anywhere but the current directory.
+ pac_cv_fc_module_incflag="Unavailable!"
+ fi
+ else
+ # Early versions of the Intel ifc compiler required a *file*
+ # containing the names of files that contained the names of the
+ #
+ # -cl,filename.pcl
+ # filename.pcl contains
+ # fullpathname.pc
+ # The "fullpathname.pc" is generated, I believe, when a module is
+ # compiled.
+ # Intel compilers use a wierd system: -cl,filename.pcl . If no file is
+ # specified, work.pcl and work.pc are created. However, if you specify
+ # a file, it must contain the name of a file ending in .pc . Ugh!
+ pac_cv_fc_module_incflag="unknown"
+ fi
+fi
+# Restore the original FCFLAGS
+FCFLAGS="$saved_FCFLAGS"
+if test "$pac_madedir" = "yes" ; then rm -rf conftestdir ; fi
+# Remove the conftest* after AC_LANG_CONFTEST
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+AC_LANG_POP(Fortran)
+])
+AC_SUBST(FC_WORK_FILES_ARG)
+AC_SUBST(FCMODINCFLAG)
+FCMODINCFLAG=$pac_cv_fc_module_incflag
+])
+dnl
+dnl
+dnl
+AC_DEFUN([PAC_FC_MODULE],[
+PAC_FC_MODULE_EXT
+PAC_FC_MODULE_INCFLAG
+PAC_FC_MODULE_OUTFLAG
+])
+dnl
+dnl PAC_FC_MODULE_OUTFLAG
+AC_DEFUN([PAC_FC_MODULE_OUTFLAG],[
+AC_REQUIRE([PAC_FC_MODULE_EXT])
+AC_CACHE_CHECK([for Fortran 90 module output directory flag],
+ [pac_cv_fc_module_outflag],
+[
+AC_LANG_PUSH([Fortran])
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ module conf
+ integer n
+ parameter (n=1)
+ end module conf
+ ])
+])
+pac_madedir="no"
+if test ! -d conf ; then mkdir conftestdir ; pac_madedir="yes"; fi
+if test "$pac_cv_fc_module_case" = "upper" ; then
+ pac_module="CONF.$pac_cv_fc_module_ext"
+else
+ pac_module="conf.$pac_cv_fc_module_ext"
+fi
+
+# check base case that the compiler can create modules and that they endup in
+# the current directory
+AC_COMPILE_IFELSE([],[
+ if test -s "$pac_module" ; then
+ rm -f "$pac_module"
+ # Remove any temporary files, and hide the work.pc file
+ # (if the compiler generates them)
+ if test -f work.pc ; then
+ mv -f work.pc conftest.pc
+ fi
+ rm -f work.pcl
+ else
+ AC_MSG_WARN([Unable to build a simple Fortran 90 module])
+ # echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+ # cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+ _AC_MSG_LOG_CONFTEST
+ fi
+],[])
+
+# known flags for reasonably recent versions of various f90 compilers:
+# gfortran -J${dir}
+# xlf -qmoddir=${dir}
+# pgf90 -module ${dir}
+# ifort -module ${dir}
+# nagfor -mdir ${dir}
+# ftn -J ${dir} ## the Cray fortran compiler
+# ftn -em -J${dir} ## the Cray fortran compiler (crayftn, in 2013)
+# For this above case, we must have added -em to FCFLAGS, since other
+# module tests do not always use the module output flag. See
+# FC_MODULE_EXT , where this is determined.
+# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
+# f90 -moddir=${dir} ## the Sun f90 compiler
+# g95 -fmod=${dir}
+#
+# If there are any compilers still out there that are totally brain-dead and
+# don't support an output directory flag, we can write a wrapper script to tell
+# users to use. Alternatively they can use an older version of MPICH.
+
+pac_cv_fc_module_outflag=
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
+ rm -f conftestdir/NONEXISTENT conftestdir/*
+ PAC_PUSH_FLAG([FCFLAGS])
+ FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
+ AC_COMPILE_IFELSE([],[pac_build_success=yes],[pac_build_success=no])
+ AS_IF([test "X$pac_build_success" = Xyes],
+ [AS_IF([test -s "conftestdir/${pac_module}"],
+ [pac_cv_fc_module_outflag="$mod_flag"])])
+ PAC_POP_FLAG([FCFLAGS])
+ AS_IF([test "X$pac_cv_fc_module_outflag" = X],[:],[break])
+done
+
+# Remove the conftest* after AC_LANG_CONFTEST
+rm -rf conftest.dSYM
+rm -f conftest.$ac_ext
+
+if test "$pac_madedir" = "yes" ; then rm -rf conftestdir ; fi
+AS_UNSET([pac_madedir])
+# Remove the conftest* after AC_LANG_CONFTEST
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+AC_LANG_POP(Fortran)
+])dnl end AC_CACHE_CHECK
+
+AC_SUBST([FCMODOUTFLAG],[$pac_cv_fc_module_outflag])
+])dnl end AC_DEFUN([PAC_FC_MODULE_OUTFLAG])
+dnl
+dnl PAC_FC_AND_F77_COMPATIBLE([action-if-true],[action-if-false])
+dnl
+dnl Determine whether object files compiled with Fortran 77 can be
+dnl linked to Fortran 90 main programs.
+dnl
+dnl The test uses a name that includes an underscore unless the 3rd
+dnl argument provides another routine name.
+dnl
+AC_DEFUN([PAC_FC_AND_F77_COMPATIBLE],[
+AC_REQUIRE([PAC_PROG_FC_WORKS])
+AC_CACHE_CHECK([whether Fortran 90 compiler works with Fortran 77 compiler],
+pac_cv_fc_and_f77,[
+pacTestRoutine=foo_abc
+ifelse([$3],,,[eval pacTestRoutine=$3])
+pac_cv_fc_and_f77="unknown"
+# compile the f77 program and link with the f90 program
+# The reverse may not work because the Fortran 90 environment may
+# expect to be in control (and to provide library files unknown to any other
+# environment, even Fortran 77!)
+AC_LANG_PUSH(Fortran 77)
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ subroutine ${pacTestRoutine}(b)
+ integer b
+ b = b + 1
+ end
+ ])
+],[
+ # pac_f77compile_ok=yes
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
+ # Save original LIBS, prepend previously generated object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_f77conftest.$OBJEXT $LIBS"
+ AC_LANG_PUSH(Fortran)
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ integer a
+ a = 1
+ call ${pacTestRoutine}(a)
+ end
+ ])
+ ],[pac_cv_fc_and_f77=yes],[pac_cv_fc_and_f77=no])
+ # Some versions of the Intel compiler produce these two files
+ rm -f work.pc work.pcl
+ # Restore LIBS
+ LIBS="$saved_LIBS"
+ AC_LANG_POP(Fortran)
+ # remove previously generated object file.
+ rm -f pac_f77conftest.$OBJEXT
+], [
+ # pac_f77compile_ok=no
+ pac_cv_fc_and_f77=no
+])
+AC_LANG_POP(Fortran 77)
+# Perform the requested action based on whether the test succeeded
+if test "$pac_cv_fc_and_f77" = yes ; then
+ ifelse($1,,:,[$1])
+else
+ ifelse($2,,:,[$2])
+ AC_MSG_WARN([See config.log for the failed test program and its output.])
+fi
+])
+dnl
+])
+dnl
+dnl
+dnl /*D
+dnl PAC_PROG_FC_CRAY_POINTER - Check if Fortran supports Cray-style pointer.
+dnl If so, set pac_cv_prog_fc_has_pointer to yes
+dnl and find out if any extra compiler flag is
+dnl needed and set it as CRAYPTR_FCFLAGS.
+dnl i.e. CRAYPTR_FCFLAGS is meaningful only if
+dnl pac_cv_prog_fc_has_pointer = yes.
+dnl
+dnl Synopsis:
+dnl PAC_PROG_FC_CRAY_POINTER([action-if-true],[action-if-false])
+dnl D*/
+AC_DEFUN([PAC_PROG_FC_CRAY_POINTER],[
+AC_CACHE_CHECK([whether Fortran 90 supports Cray-style pointer],
+pac_cv_prog_fc_has_pointer,[
+AC_LANG_PUSH([Fortran])
+AC_LANG_CONFTEST([
+ AC_LANG_PROGRAM([],[
+ integer M
+ pointer (MPTR,M)
+ data MPTR/0/
+ ])
+])
+saved_FCFLAGS="$FCFLAGS"
+pac_cv_prog_fc_has_pointer=no
+CRAYPTR_FCFLAGS=""
+for ptrflag in '' '-fcray-pointer' ; do
+ FCFLAGS="$saved_FCFLAGS $ptrflag"
+ AC_COMPILE_IFELSE([],[
+ pac_cv_prog_fc_has_pointer=yes
+ CRAYPTR_FCFLAGS="$ptrflag"
+ break
+ ])
+done
+dnl Restore FCFLAGS first, since user may not want to modify FCFLAGS
+FCFLAGS="$saved_FCFLAGS"
+dnl remove conftest after ac_lang_conftest
+rm -f conftest.$ac_ext
+AC_LANG_POP([Fortran])
+])
+if test "$pac_cv_prog_fc_has_pointer" = "yes" ; then
+ AC_MSG_CHECKING([for Fortran 90 compiler flag for Cray-style pointer])
+ if test "X$CRAYPTR_FCFLAGS" != "X" ; then
+ AC_MSG_RESULT([$CRAYPTR_FCFLAGS])
+ else
+ AC_MSG_RESULT([none])
+ fi
+ ifelse([$1],[],[:],[$1])
+else
+ ifelse([$2],[],[:],[$2])
+fi
+])
+dnl
+dnl
+dnl
+AC_DEFUN([PAC_PROG_FC_AND_C_STDIO_LIBS],[
+AC_REQUIRE([AC_HEADER_STDC])
+# To simply the code in the cache_check macro, chose the routine name
+# first, in case we need it
+confname=conf1_
+case "$pac_cv_prog_f77_name_mangle" in
+ "lower underscore") confname=conf1_ ;;
+ "upper stdcall") confname=CONF1 ;;
+ upper) confname=CONF1 ;;
+ "lower doubleunderscore") confname=conf1_ ;;
+ lower) confname=conf1 ;;
+ "mixed underscore") confname=conf1_ ;;
+ mixed) confname=conf1 ;;
+esac
+
+AC_CACHE_CHECK([what libraries are needed to link Fortran90 programs with C routines that use stdio],pac_cv_prog_fc_and_c_stdio_libs,[
+pac_cv_prog_fc_and_c_stdio_libs=unknown
+
+AC_LANG_PUSH(C)
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
+#include <stdio.h>
+#endif
+int $confname( int a )
+{ printf( "The answer is %d\n", a ); fflush(stdout); return 0; }
+ ])
+],[
+ pac_compile_ok=yes
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ # Save LIBS and prepend object file to LIBS
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ AC_LANG_PUSH(Fortran)
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([],[call conf1(0)])
+ ],[
+ pac_cv_prog_fc_and_c_stdio_libs=none
+ ],[
+ # Try again with -lSystemStubs
+ LIBS="$LIBS -lSystemStubs"
+ AC_LINK_IFELSE([],[
+ pac_cv_prog_fc_and_c_stdio_libs="-lSystemStubs"
+ ],[])
+ ])
+ LIBS="$saved_LIBS"
+ AC_LANG_POP(Fortran)
+ rm -f pac_conftest.$OBJEXT
+])
+AC_LANG_POP(C)
+dnl
+if test "$pac_cv_prog_fc_and_c_stdio_libs" != none -a \
+ "$pac_cv_prog_fc_and_c_stdio_libs" != unknown ; then
+ FC_OTHER_LIBS="$FC_OTHER_LIBS $pac_cv_prog_fc_and_c_stdio_libs"
+fi
+])
+dnl
+])
+dnl
+dnl/*D
+dnl PAC_FC_CHECK_COMPILER_OPTION - Check that a FC compiler option is
+dnl accepted without warning messages
+dnl
+dnl Synopsis:
+dnl PAC_FC_CHECK_COMPILER_OPTION(optionname,action-if-ok,action-if-fail)
+dnl
+dnl Output Effects:
+dnl
+dnl If no actions are specified, a working value is added to 'FCOPTIONS'
+dnl
+dnl Notes:
+dnl This is now careful to check that the output is different, since
+dnl some compilers are noisy.
+dnl
+dnl We are extra careful to prototype the functions in case compiler options
+dnl that complain about poor code are in effect.
+dnl
+dnl Because this is a long script, we have ensured that you can pass a
+dnl variable containing the option name as the first argument.
+dnl D*/
+AC_DEFUN([PAC_FC_CHECK_COMPILER_OPTION],[
+AC_MSG_CHECKING([whether Fortran 90 compiler accepts option $1])
+pac_opt="$1"
+AC_LANG_PUSH(Fortran)
+FCFLAGS_orig="$FCFLAGS"
+FCFLAGS_opt="$pac_opt $FCFLAGS"
+pac_result="unknown"
+
+AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+FCFLAGS="$FCFLAGS_orig"
+rm -f pac_test1.log
+PAC_LINK_IFELSE_LOG([pac_test1.log], [], [
+ FCFLAGS="$FCFLAGS_opt"
+ rm -f pac_test2.log
+ PAC_LINK_IFELSE_LOG([pac_test2.log], [], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test1.log pac_test2.log],
+ [pac_result=yes], [pac_result=no])
+ ],[
+ pac_result=no
+ ])
+], [
+ pac_result=no
+])
+AC_MSG_RESULT([$pac_result])
+dnl Delete the conftest created by AC_LANG_CONFTEST.
+rm -f conftest.$ac_ext
+#
+if test "$pac_result" = "yes" ; then
+ AC_MSG_CHECKING([whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt])
+ pac_result=unknown
+ FCFLAGS="$FCFLAGS_orig"
+ rm -f pac_test3.log
+ PAC_COMPILE_IFELSE_LOG([pac_test3.log], [
+ AC_LANG_SOURCE([
+ subroutine try()
+ end
+ ])
+ ],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+
+ FCFLAGS="$FCFLAGS_opt"
+ rm -f pac_test4.log
+ PAC_LINK_IFELSE_LOG([pac_test4.log], [AC_LANG_PROGRAM()], [
+ PAC_RUNLOG_IFELSE([diff -b pac_test2.log pac_test4.log],
+ [pac_result=yes], [pac_result=no])
+ ],[
+ pac_result=no
+ ])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+ ],[
+ pac_result=no
+ ])
+ AC_MSG_RESULT([$pac_result])
+ rm -f pac_test3.log pac_test4.log
+fi
+rm -f pac_test1.log pac_test2.log
+
+dnl Restore FCFLAGS before 2nd/3rd argument commands are executed,
+dnl as 2nd/3rd argument command could be modifying FCFLAGS.
+FCFLAGS="$FCFLAGS_orig"
+if test "$pac_result" = "yes" ; then
+ ifelse([$2],[],[FCOPTIONS="$FCOPTIONS $1"],[$2])
+else
+ ifelse([$3],[],[:],[$3])
+fi
+AC_LANG_POP(Fortran)
+])
+dnl /*D
+dnl PAC_FC_WORKS_WITH_CPP
+dnl
+dnl Checks if Fortran 90 compiler works with C preprocessor
+dnl
+dnl Most systems allow the Fortran compiler to process .F and .F90 files
+dnl using the C preprocessor. However, some systems either do not
+dnl allow this or have serious bugs (OSF Fortran compilers have a bug
+dnl that generates an error message from cpp). The following test
+dnl checks to see if .F works, and if not, whether "cpp -P -C" can be used
+dnl D*/
+AC_DEFUN([PAC_FC_WORKS_WITH_CPP],[
+AC_REQUIRE([AC_PROG_CPP])
+AC_MSG_CHECKING([whether Fortran 90 compiler processes .F90 files with C preprocessor])
+AC_LANG_PUSH([Fortran])
+saved_fc_ext=${ac_ext}
+ac_ext="F90"
+saved_FCFLAGS="$FCFLAGS"
+FCFLAGS="$FCFLAGS $CPPFLAGS"
+AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program main
+#define ASIZE 10
+ integer a(ASIZE)
+ end
+ ])
+])
+AC_COMPILE_IFELSE([],[
+ pac_cv_fc_accepts_F90=yes
+ ifelse([$1],[],[],[$1=""])
+],[
+ pac_cv_fc_accepts_F90=no
+ ifelse([$1],[],[:],[$1="false"])
+])
+# Restore Fortran's ac_ext but not FCFLAGS
+ac_ext="$saved_fc_ext"
+
+if test "$pac_cv_fc_accepts_F90" != "yes" ; then
+ pac_cpp_fc="$ac_cpp -C -P conftest.F90 > conftest.$ac_ext"
+ PAC_RUNLOG_IFELSE([$pac_cpp_fc],[
+ if test -s conftest.${ac_ext} ; then
+ AC_COMPILE_IFELSE([],[
+ pac_cv_fc_accepts_F90="no, use cpp"
+ ifelse([$1],[],[],[$1="$CPP -C -P"])
+ ],[])
+ rm -f conftest.${ac_ext}
+ fi
+ ],[])
+fi
+FCFLAGS="$saved_FCFLAGS"
+rm -f conftest.F90
+AC_LANG_POP([Fortran])
+AC_MSG_RESULT([$pac_cv_fc_accepts_F90])
+])
+dnl
+dnl PAC_FC_VENDOR:
+dnl Try to get a version string for the F90 compiler. We may
+dnl need this to find likely command-line arguments for accessing
+dnl shared libraries
+dnl
+AC_DEFUN([PAC_FC_VENDOR],[
+AC_MSG_CHECKING([for Fortran 90 compiler vendor])
+# This is complicated by some compilers (such as the Intel 8.1 ifort)
+# that return a non-zero status even when they accept the -V option
+# (a zero status is returned only if there is a file).
+pac_cv_fc_vendor="unknown"
+for arg in --version -V -v ; do
+ rm -f conftest.txt
+ PAC_RUNLOG([$FC $arg </dev/null >conftest.txt 2>&1])
+ # Ignore the return code, because some compilers set the
+ # return code to zero on invalid arguments and some to
+ # non-zero on success (with no files to compile)
+ if test -f conftest.txt ; then
+ if grep 'Portland Group' conftest.txt >/dev/null 2>&1 ; then
+ pac_cv_fc_vendor=pgi
+ elif grep 'Sun Workshop' conftest.txt >/dev/null 2>&1 ; then
+ pac_cv_fc_vendor=sun
+ elif grep 'Sun Fortran 9' conftest.txt >/dev/null 2>&1 ; then
+ pac_cv_fc_vendor=sun
+ elif grep 'Absoft' conftest.txt >/dev/null 2>&1 ; then
+ pac_cv_fc_vendor=absoft
+ elif grep 'G95' conftest.txt >/dev/null 2>&1 ; then
+ pac_cv_fc_vendor=gnu
+ elif grep 'GNU Fortran' conftest.txt >/dev/null 2>&1 ; then
+ # This is gfortran
+ pac_cv_fc_vendor=gnu
+ elif grep Intel conftest.txt >/dev/null 2>&1 ; then
+ pac_cv_fc_vendor=intel
+ fi
+ fi
+ if test "$pac_cv_fc_vendor" != "unknown" ; then break ; fi
+done
+if test "$pac_cv_fc_vendor" = "unknown" ; then
+ # Try to use the compiler name
+ if test "$FC" = "ifort" -o "$FC" = "ifc" ; then
+ pac_cv_fc_vendor=intel
+ elif test "$FC" = "pgf90" ; then
+ pac_cv_fc_vendor=pgi
+ elif test "$FC" = "xlf90" -o "$FC" = "xlf90_r" ; then
+ pac_cv_fc_vendor=ibm
+ elif test "$FC" = "xlf95" -o "$FC" = "xlf95_r" ; then
+ pac_cv_fc_vendor=ibm
+ fi
+fi
+AC_MSG_RESULT([$pac_cv_fc_vendor])
+rm -f conftest.txt
+# End of checking for F90 compiler vendor
+])
+dnl
+dnl PAC_F77_IS_FC([ACTION_IF_TRUE],[ACTION_IF_FALSE])
+dnl Check if F77 is a Fortran 90 compiler.
+dnl
+AC_DEFUN([PAC_F77_IS_FC],[
+AC_MSG_CHECKING([whether $F77 is a Fortran 90 compiler])
+AC_LANG_PUSH([Fortran 77])
+saved_ac_ext=$ac_ext
+ac_ext="f90"
+AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ integer, dimension(10) :: n
+ integer k
+ print *, range(k)
+ end
+ ])
+],[
+ pac_cv_prog_f77_is_fc=yes
+ ifelse([$1],[],[],[$1])
+],[
+ pac_cv_prog_f77_is_fc=no
+ ifelse([$2],[],[],[$2])
+])
+AC_MSG_RESULT([$pac_cv_prog_f77_is_fc])
+AC_LANG_POP([Fortran 77])
+])
+dnl
+dnl PAC_FC_FLOAT_MODEL(float_type, [variable-set-if-successful-test])
+dnl variable-set-if-successful-test is optional variable.
+dnl
+dnl This is a runtime test.
+dnl
+AC_DEFUN([PAC_FC_FLOAT_MODEL],[
+type="$1"
+AC_MSG_CHECKING([for precision and range of $type])
+AC_LANG_PUSH([Fortran])
+rm -f pac_fconftest.out
+AC_RUN_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ $type aa
+ open(8, file="pac_fconftest.out", form="formatted")
+ write(8,*) precision(aa), ",", range(aa)
+ close(8)
+ end
+ ])
+],[
+ if test -s pac_fconftest.out ; then
+ pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
+ AC_MSG_RESULT([$pac_fc_num_model])
+ ifelse([$2],[],[],[$2=$pac_fc_num_model])
+ else
+ AC_MSG_RESULT([Error])
+ AC_MSG_WARN([No output from test program!])
+ fi
+ rm -f pac_fconftest.out
+],[
+ AC_MSG_RESULT([Error])
+ AC_MSG_WARN([Failed to run program to determine the precision and range of $type])
+])
+AC_LANG_POP([Fortran])
+])
+dnl
+dnl PAC_FC_SIMPLE_NUMBER_MODEL(message, Fortran-type, Fortran-write,
+dnl [variable-set-if-successful-test],
+dnl [cross-value])
+dnl
+dnl message : message of what test-fc-code is checking
+dnl Fortran-type : Fortran90 type's data model to be examined.
+dnl Fortran-write : Fortran90 type's write statement used with write(N,*).
+dnl variable-set-if-successful-test :
+dnl The optional variable to be set if the codelet:
+dnl "Fortran-type" + "write(N,*) Fortran-write"
+dnl is successful in returning the simple data model.
+dnl cross-value : value to be used for above variable when
+dnl cross_compiling=yes
+dnl
+dnl This is a runtime test.
+dnl
+AC_DEFUN([PAC_FC_SIMPLE_NUMBER_MODEL],[
+pac_msg="$1"
+AC_MSG_CHECKING([for $pac_msg])
+AC_LANG_PUSH([Fortran])
+rm -f pac_fconftest.out
+AC_RUN_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ $2
+ open(8, file="pac_fconftest.out", form="formatted")
+ write(8,*) $3
+ close(8)
+ end
+ ])
+],[
+ if test -s pac_fconftest.out ; then
+ pac_fc_num_model="`sed -e 's/ */ /g' pac_fconftest.out`"
+ AC_MSG_RESULT([$pac_fc_num_model])
+ ifelse([$4],[],[],[$4=$pac_fc_num_model])
+ else
+ AC_MSG_RESULT([Error])
+ AC_MSG_WARN([No output from test program!])
+ fi
+ rm -f pac_fconftest.out
+],[
+ AC_MSG_RESULT([Error])
+ AC_MSG_WARN([Failed to run program to determine $pac_msg])
+],[
+ AC_MSG_RESULT([$5])
+ ifelse([$4],[],[],[$4=$5])
+])
+AC_LANG_POP([Fortran])
+])
+dnl
+dnl PAC_FC_AVAIL_INTEGER_MODELS([INTEGER-MODELS-FLAG],[CROSS-VARIABLE])
+dnl
+dnl INTEGER-MODELS-FLAG : an optional variable to be set if provided.
+dnl If it isn't provided, PAC_FC_ALL_INTEGER_MODELS
+dnl will be set.
+dnl CROSS-VALUE : value will be used to set INTEGER-MODELS-FLAG
+dnl or PAC_FC_ALL_INTEGER_MODELS if cross_compiling=yes.
+dnl
+dnl This is a runtime test.
+dnl
+AC_DEFUN([PAC_FC_AVAIL_INTEGER_MODELS],[
+AC_MSG_CHECKING([for available integer kinds])
+AC_LANG_PUSH([Fortran])
+rm -f pac_fconftest.out
+AC_RUN_IFELSE([
+ AC_LANG_SOURCE([
+ program main
+ integer r, lastkind
+ lastkind=selected_int_kind(1)
+ open(8, file="pac_fconftest.out", form="formatted")
+ do r=2,30
+ k = selected_int_kind(r)
+ if (k .ne. lastkind) then
+ write(8,*) r-1, ",", lastkind
+ lastkind = k
+ endif
+ if (k .le. 0) then
+ exit
+ endif
+ enddo
+ if (k.ne.lastkind) then
+ write(8,*) 31, ",", k
+ endif
+ close(8)
+ end
+ ])
+],[
+ if test -s pac_fconftest.out ; then
+ pac_flag="`sed -e 's/ */ /g' pac_fconftest.out | tr '\012' ','`"
+ AC_MSG_RESULT([$pac_flag])
+ pac_validKinds="`sed -e 's/ */ /g' pac_fconftest.out | tr '\012' ':'`"
+ ifelse([$1],[],[PAC_FC_ALL_INTEGER_MODELS=$pac_flag],[$1=$pac_flag])
+ else
+ AC_MSG_RESULT([Error])
+ AC_MSG_WARN([No output from test program!])
+ fi
+ rm -f pac_fconftest.out
+],[
+ AC_MSG_RESULT([Error])
+ AC_MSG_WARN([Failed to run program to determine available integer models])
+],[
+ dnl Even when cross_compiling=yes,
+ dnl pac_validKinds needs to be set for PAC_FC_INTEGER_MODEL_MAP()
+ pac_validKinds="`echo \"$2\" | tr ',' ':'`"
+ AC_MSG_RESULT([$2])
+ ifelse([$1],[],[PAC_FC_ALL_INTEGER_MODELS=$2],[$1=$2])
+])
+AC_LANG_POP([Fortran])
+])
+dnl
+dnl PAC_FC_INTEGER_MODEL_MAP([INTEGER-MODEL-MAP-FLAG],[CROSS-VALUE]))
+dnl
+dnl INTEGER-MODEL-MAP-FLAG : an optional variable to be set if provided.
+dnl If it isn't provided, PAC_FC_INTEGER_MODEL_MAP
+dnl will be set.
+dnl CROSS-VALUE : value will be used to set INTEGER-MODEL-MAP-FLAG
+dnl or PAC_FC_INTEGER_MODEL_MAP if cross_compiling=yes.
+dnl
+dnl This test requires $pac_validKinds set by PAC_FC_ALL_INTEGER_MODELS().
+dnl
+dnl This is a runtime test.
+dnl
+dnl Compile the C subroutine as pac_conftest.o and Link it with a Fortran main.
+AC_DEFUN([PAC_FC_INTEGER_MODEL_MAP],[
+AC_REQUIRE([PAC_FC_AVAIL_INTEGER_MODELS])
+AC_MSG_CHECKING([for available integer ranges])
+AC_LANG_PUSH([C])
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+#ifdef F77_NAME_UPPER
+#define cisize_ CISIZE
+#define isize_ ISIZE
+#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
+#define cisize_ cisize
+#define isize_ isize
+#endif
+int cisize_(char *,char*);
+int cisize_(char *i1p, char *i2p)
+{
+ int isize_val=0;
+ isize_val = (int)(i2p - i1p);
+ return isize_val;
+}
+ ])
+],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ pac_ccompile_ok=yes
+],[
+ pac_ccompile_ok=no
+])
+AC_LANG_POP([C])
+dnl
+if test "$pac_ccompile_ok" = "yes" ; then
+ saved_LIBS="$LIBS"
+ LIBS="pac_conftest.$OBJEXT $LIBS"
+ saved_IFS=$IFS
+ IFS=:
+ AC_LANG_PUSH([Fortran])
+ pac_flag=""
+ for rangekind in $pac_validKinds ; do
+ kind="`echo $rangekind | sed -e 's/.*,//'`"
+ range="`echo $rangekind | sed -e 's/,.*//'`"
+ AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([
+ program main
+ integer (kind=$kind) a(2)
+ integer cisize
+ open(8, file="pac_fconftest.out", form="formatted")
+ write(8,*) $range, ",", $kind, ",", cisize( a(1), a(2) )
+ close(8)
+ end
+ ])
+ ])
+ IFS=$saved_IFS
+ rm -f pac_fconftest.out
+ AC_RUN_IFELSE([],[
+ if test -s pac_fconftest.out ; then
+ sizes="`sed -e 's/ */ /g' pac_fconftest.out`"
+ pac_flag="$pac_flag { $sizes },"
+ else
+ AC_MSG_WARN([No output from test program!])
+ fi
+ rm -f pac_fconftest.out
+ ],[
+ AC_MSG_WARN([Fortran program fails to build or run!])
+ ],[
+ pac_flag="$2"
+ ])
+ IFS=:
+ done
+ IFS=$saved_IFS
+ AC_MSG_RESULT([$pac_flag])
+ ifelse([$1],[],[PAC_FC_INTEGER_MODEL_MAP=$pac_flag],[$1=$pac_flag])
+ AC_LANG_POP([Fortran])
+ LIBS="$saved_LIBS"
+ rm -f pac_conftest.$OBJEXT
+fi
+])
+
+
+AC_DEFUN([PAC_FC_2008_SUPPORT],[
+AC_MSG_CHECKING([for Fortran 2008 support])
+
+AC_LANG_PUSH([C])
+f08_works=yes
+AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE(
+[[
+#include <ISO_Fortran_binding.h>
+
+int foo_c(CFI_cdesc_t * a_desc, CFI_cdesc_t * b_desc)
+{
+ char * a_row = (char*) a_desc->base_addr;
+ if (a_desc->type != CFI_type_int) { return 1; }
+ if (a_desc->rank != 2) { return 2; }
+ if (a_desc->dim[1].extent != b_desc->dim[0].extent) { return 3; }
+ return 0;
+}
+]])],[mv conftest.$OBJEXT conftest1.$OBJEXT],[f08_works=no])
+AC_LANG_POP([C])
+
+AC_LANG_PUSH([Fortran])
+PAC_PUSH_FLAG([LIBS])
+LIBS="conftest1.$OBJEXT $LIBS"
+AC_LINK_IFELSE([
+ AC_LANG_SOURCE([
+MODULE F08TS_MODULE
+IMPLICIT NONE
+
+! Test public, private, protected
+REAL, PUBLIC :: x
+REAL, PRIVATE :: y
+LOGICAL, PROTECTED :: z
+
+! Test abstract
+ABSTRACT INTERFACE
+ SUBROUTINE user_func(x, y)
+ INTEGER :: x(*)
+ REAL :: y
+ END SUBROUTINE
+END INTERFACE
+
+! Test TS 29113 assumed type , assumed rank and bind(C)
+INTERFACE
+ FUNCTION FOO(A, B, C) &
+ BIND(C,name="foo_c") RESULT(err)
+ USE, intrinsic :: iso_c_binding, ONLY : c_int
+ TYPE(*), DIMENSION(..) :: A, B, C
+ INTEGER(c_int) :: err
+ END FUNCTION FOO
+END INTERFACE
+
+CONTAINS
+
+! Test TS 29113 asychronous attribute and optional
+SUBROUTINE test1(buf, count, ierr)
+ INTEGER, ASYNCHRONOUS :: buf(*)
+ INTEGER :: count
+ INTEGER, OPTIONAL :: ierr
+END SUBROUTINE
+
+! Test procedure type and non-bind(c) x in C_FUNCLOC(x)
+SUBROUTINE test2(func)
+ USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_FUNLOC, C_FUNPTR
+ PROCEDURE(user_func) :: func
+ TYPE(C_FUNPTR) :: errhandler_fn
+ errhandler_fn = C_FUNLOC(func)
+END SUBROUTINE
+
+! Test intrinsic storage_size
+SUBROUTINE test3(x, size)
+ CHARACTER, DIMENSION(..) :: x
+ INTEGER, INTENT(OUT) :: size
+ size = storage_size(x)/8
+END SUBROUTINE test3
+
+END MODULE
+
+!==============================================
+PROGRAM MAIN
+USE :: F08TS_MODULE, ONLY : FOO
+IMPLICIT NONE
+
+INTEGER, DIMENSION(4,4) :: A, B
+INTEGER, DIMENSION(2,2) :: C
+INTEGER :: ERRCODE
+
+! Test contiguous and non-contiguous array section passing
+! and linkage with C code
+ERRCODE = FOO(A(1:4:2, :), B(:, 2:4:2), C)
+
+END PROGRAM
+ ])],[],[f08_works=no])
+PAC_POP_FLAG([LIBS])
+AC_LANG_POP([Fortran])
+
+if test "$f08_works" = "yes" ; then
+ $1
+else
+ $2
+fi
+rm -f conftest1.$OBJEXT F08TS_MODULE.* f08ts_module.*
+AC_MSG_RESULT([$f08_works])
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_libs.m4 b/src/mpi/romio/mpl/confdb/aclocal_libs.m4
new file mode 100644
index 0000000..8868e99
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_libs.m4
@@ -0,0 +1,107 @@
+
+dnl PAC_SET_HEADER_LIB_PATH(with_option,[default_path])
+dnl This macro looks for the --with-xxx=, --with-xxx-include and --with-xxx-lib=
+dnl options and sets the library and include paths.
+dnl
+dnl TODO as written, this macro cannot handle a "with_option" arg that has "-"
+dnl characters in it. Use AS_TR_SH (and possibly AS_VAR_* macros) to handle
+dnl this case if it ever arises.
+AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
+ AC_ARG_WITH([$1],
+ [AC_HELP_STRING([--with-$1=PATH],
+ [specify path where $1 include directory and lib directory can be found])],
+
+ [AS_CASE(["$withval"],
+ [yes|no|''],
+ [AC_MSG_WARN([--with[out]-$1=PATH expects a valid PATH])
+ with_$1=""])],
+ [with_$1=$2])
+ AC_ARG_WITH([$1-include],
+ [AC_HELP_STRING([--with-$1-include=PATH],
+ [specify path where $1 include directory can be found])],
+ [AS_CASE(["$withval"],
+ [yes|no|''],
+ [AC_MSG_WARN([--with[out]-$1-include=PATH expects a valid PATH])
+ with_$1_include=""])],
+ [])
+ AC_ARG_WITH([$1-lib],
+ [AC_HELP_STRING([--with-$1-lib=PATH],
+ [specify path where $1 lib directory can be found])],
+ [AS_CASE(["$withval"],
+ [yes|no|''],
+ [AC_MSG_WARN([--with[out]-$1-lib=PATH expects a valid PATH])
+ with_$1_lib=""])],
+ [])
+
+ # The args have been sanitized into empty/non-empty values above.
+ # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
+ # taking priority
+
+ AS_IF([test -n "${with_$1_include}"],
+ [PAC_APPEND_FLAG([-I${with_$1_include}],[CPPFLAGS])],
+ [AS_IF([test -n "${with_$1}"],
+ [PAC_APPEND_FLAG([-I${with_$1}/include],[CPPFLAGS])])])
+
+ AS_IF([test -n "${with_$1_lib}"],
+ [PAC_APPEND_FLAG([-L${with_$1_lib}],[LDFLAGS])],
+ [AS_IF([test -n "${with_$1}"],
+ dnl is adding lib64 by default really the right thing to do? What if
+ dnl we are on a 32-bit host that happens to have both lib dirs available?
+ [PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
+ AS_IF([test -d "${with_$1}/lib64"],
+ [PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
+ ])
+ ])
+])
+
+
+dnl PAC_CHECK_HEADER_LIB(header.h, libname, function, action-if-yes, action-if-no)
+dnl This macro checks for a header and lib. It is assumed that the
+dnl user can specify a path to the includes and libs using --with-xxx=.
+dnl The xxx is specified in the "with_option" parameter.
+dnl
+dnl NOTE: This macro expects a corresponding PAC_SET_HEADER_LIB_PATH
+dnl macro (or equivalent logic) to be used before this macro is used.
+AC_DEFUN([PAC_CHECK_HEADER_LIB],[
+ failure=no
+ AC_CHECK_HEADER([$1],,failure=yes)
+ AC_CHECK_LIB($2,$3,,failure=yes)
+ if test "$failure" = "no" ; then
+ $4
+ else
+ $5
+ fi
+])
+
+dnl PAC_CHECK_HEADER_LIB_FATAL(with_option, header.h, libname, function)
+dnl Similar to PAC_CHECK_HEADER_LIB, but errors out on failure
+AC_DEFUN([PAC_CHECK_HEADER_LIB_FATAL],[
+ PAC_CHECK_HEADER_LIB($2,$3,$4,success=yes,success=no)
+ if test "$success" = "no" ; then
+ AC_MSG_ERROR(['$2 or lib$3 library not found. Did you specify --with-$1= or --with-$1-include= or --with-$1-lib=?'])
+ fi
+])
+
+dnl PAC_CHECK_PREFIX(with_option,prefixvar)
+AC_DEFUN([PAC_CHECK_PREFIX],[
+ AC_ARG_WITH([$1-prefix],
+ [AS_HELP_STRING([[--with-$1-prefix[=DIR]]], [use the $1
+ library installed in DIR, rather than the
+ one included in the distribution. Pass
+ "embedded" to force usage of the included
+ $1 source.])],
+ [if test "$withval" = "system" ; then
+ :
+ elif test "$withval" = "embedded" ; then
+ :
+ else
+ PAC_APPEND_FLAG([-I${with_$1_prefix}/include],[CPPFLAGS])
+ if test -d "${with_$1_prefix}/lib64" ; then
+ PAC_APPEND_FLAG([-L${with_$1_prefix}/lib64],[LDFLAGS])
+ fi
+ PAC_APPEND_FLAG([-L${with_$1_prefix}/lib],[LDFLAGS])
+ fi
+ ],
+ [with_$1_prefix="embedded"])
+ ]
+)
diff --git a/src/mpi/romio/mpl/confdb/aclocal_make.m4 b/src/mpi/romio/mpl/confdb/aclocal_make.m4
new file mode 100644
index 0000000..147e92e
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_make.m4
@@ -0,0 +1,315 @@
+dnl
+dnl We need routines to check that make works. Possible problems with
+dnl make include
+dnl
+dnl It is really gnumake, and contrary to the documentation on gnumake,
+dnl it insists on screaming everytime a directory is changed. The fix
+dnl is to add the argument --no-print-directory to the make
+dnl
+dnl It is really BSD 4.4 make, and can't handle 'include'. For some
+dnl systems, this can be fatal; there is no fix (other than removing this
+dnl alleged make).
+dnl
+dnl It is the OSF V3 make, and can't handle a comment in a block of target
+dnl code. There is no acceptable fix.
+dnl
+dnl
+dnl
+dnl
+dnl Find a make program if none is defined.
+AC_DEFUN([PAC_PROG_MAKE_PROGRAM],[true
+if test "X$MAKE" = "X" ; then
+ AC_CHECK_PROGS(MAKE,make gnumake nmake pmake smake)
+fi
+])dnl
+
+dnl/*D
+dnl PAC_PROG_MAKE_INCLUDE - Check whether make supports include
+dnl
+dnl Synopsis:
+dnl PAC_PROG_MAKE_INCLUDE([action if true],[action if false])
+dnl
+dnl Output Effect:
+dnl None
+dnl
+dnl Notes:
+dnl This checks for makes that do not support 'include filename'. Some
+dnl versions of BSD 4.4 make required '#include' instead; some versions of
+dnl 'pmake' have the same syntax.
+dnl
+dnl See Also:
+dnl PAC_PROG_MAKE
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_MAKE_INCLUDE],[
+AC_CACHE_CHECK([whether make supports include],pac_cv_prog_make_include,[
+AC_REQUIRE([PAC_PROG_MAKE_PROGRAM])
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+cat > conftest <<.
+ALL:
+ @echo "success"
+.
+cat > conftest1 <<.
+include conftest
+.
+pac_str=`$MAKE -f conftest1 2>&1`
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest conftest1
+if test "$pac_str" != "success" ; then
+ pac_cv_prog_make_include="no"
+else
+ pac_cv_prog_make_include="yes"
+fi
+])
+if test "$pac_cv_prog_make_include" = "no" ; then
+ ifelse([$2],,:,[$2])
+else
+ ifelse([$1],,:,[$1])
+fi
+])dnl
+
+dnl/*D
+dnl PAC_PROG_MAKE_ALLOWS_COMMENTS - Check whether comments are allowed in
+dnl shell commands in a makefile
+dnl
+dnl Synopsis:
+dnl PAC_PROG_MAKE_ALLOWS_COMMENTS([false text])
+dnl
+dnl Output Effect:
+dnl Issues a warning message if comments are not allowed in a makefile.
+dnl Executes the argument if one is given.
+dnl
+dnl Notes:
+dnl Some versions of OSF V3 make do not all comments in action commands.
+dnl
+dnl See Also:
+dnl PAC_PROG_MAKE
+dnl D*/
+dnl
+AC_DEFUN([PAC_PROG_MAKE_ALLOWS_COMMENTS],[
+AC_CACHE_CHECK([whether make allows comments in actions],
+pac_cv_prog_make_allows_comments,[
+AC_REQUIRE([PAC_PROG_MAKE_PROGRAM])
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+cat > conftest <<.
+SHELL=/bin/sh
+ALL:
+ @# This is a valid comment!
+ @echo "success"
+.
+pac_str=`$MAKE -f conftest 2>&1`
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+if test "$pac_str" != "success" ; then
+ pac_cv_prog_make_allows_comments="no"
+else
+ pac_cv_prog_make_allows_comments="yes"
+fi
+])
+if test "$pac_cv_prog_make_allows_comments" = "no" ; then
+ AC_MSG_WARN([Your make does not allow comments in target code.
+Using this make may cause problems when building programs.
+You should consider using gnumake instead.])
+ ifelse([$1],,[$1])
+fi
+])dnl
+
+dnl/*D
+dnl PAC_PROG_MAKE_VPATH - Check whether make supports source-code paths.
+dnl
+dnl Synopsis:
+dnl PAC_PROG_MAKE_VPATH
+dnl
+dnl Output Effect:
+dnl Sets the variable 'VPATH' to either
+dnl.vb
+dnl VPATH = .:${srcdir}
+dnl.ve
+dnl or
+dnl.vb
+dnl .PATH: . ${srcdir}
+dnl.ve
+dnl
+dnl Notes:
+dnl The test checks that the path works with implicit targets (some makes
+dnl support only explicit targets with 'VPATH' or 'PATH').
+dnl
+dnl NEED TO DO: Check that $< works on explicit targets.
+dnl
+dnl See Also:
+dnl PAC_PROG_MAKE
+dnl
+dnl D*/
+AC_DEFUN([PAC_PROG_MAKE_VPATH],[
+AC_SUBST(VPATH)
+dnl AM_IGNORE(VPATH)
+AC_CACHE_CHECK([for virtual path format],
+pac_cv_prog_make_vpath,[
+AC_REQUIRE([PAC_PROG_MAKE_PROGRAM])
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -rf conftest*
+mkdir conftestdir
+cat >conftestdir/a.c <<EOF
+A sample file
+EOF
+cat > conftest <<EOF
+all: a.o
+VPATH=.:conftestdir
+.c.o:
+ @echo \$<
+EOF
+ac_out=`$MAKE -f conftest 2>&1 | grep 'conftestdir/a.c'`
+if test -n "$ac_out" ; then
+ pac_cv_prog_make_vpath="VPATH"
+else
+ rm -f conftest
+ cat > conftest <<EOF
+all: a.o
+.PATH: . conftestdir
+.c.o:
+ @echo \$<
+EOF
+ ac_out=`$MAKE -f conftest 2>&1 | grep 'conftestdir/a.c'`
+ if test -n "$ac_out" ; then
+ pac_cv_prog_make_vpath=".PATH"
+ else
+ pac_cv_prog_make_vpath="neither VPATH nor .PATH works"
+ fi
+fi
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -rf conftest*
+])
+if test "$pac_cv_prog_make_vpath" = "VPATH" ; then
+ VPATH='VPATH=.:${srcdir}'
+elif test "$pac_cv_prog_make_vpath" = ".PATH" ; then
+ VPATH='.PATH: . ${srcdir}'
+fi
+])dnl
+
+dnl/*D
+dnl PAC_PROG_MAKE_SET_CFLAGS - Check whether make sets CFLAGS
+dnl
+dnl Synopsis:
+dnl PAC_PROG_MAKE_SET_CFLAGS([action if true],[action if false])
+dnl
+dnl Output Effects:
+dnl Executes the first argument if 'CFLAGS' is set by 'make'; executes
+dnl the second argument if 'CFLAGS' is not set by 'make'.
+dnl
+dnl Notes:
+dnl If 'CFLAGS' is set by make, you may wish to override that choice in your
+dnl makefile.
+dnl
+dnl See Also:
+dnl PAC_PROG_MAKE
+dnl D*/
+AC_DEFUN([PAC_PROG_MAKE_SET_CFLAGS],[
+AC_CACHE_CHECK([whether make sets CFLAGS],
+pac_cv_prog_make_set_cflags,[
+AC_REQUIRE([PAC_PROG_MAKE_PROGRAM])
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+cat > conftest <<EOF
+SHELL=/bin/sh
+ALL:
+ @echo X[\$]{CFLAGS}X
+EOF
+pac_str=`$MAKE -f conftest 2>&1`
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest
+if test "$pac_str" = "XX" ; then
+ pac_cv_prog_make_set_cflags="no"
+else
+ pac_cv_prog_make_set_cflags="yes"
+fi
+])
+if test "$pac_cv_prog_make_set_cflags" = "no" ; then
+ ifelse([$2],,:,[$2])
+else
+ ifelse([$1],,:,[$1])
+fi
+])dnl
+
+dnl/*D
+dnl PAC_PROG_MAKE_CLOCK_SKEW - Check whether there is a problem with
+dnl clock skew in suing make.
+dnl
+dnl Effect:
+dnl Sets the cache variable 'pac_cv_prog_make_found_clock_skew' to yes or no
+dnl D*/
+AC_DEFUN([PAC_PROG_MAKE_CLOCK_SKEW],[
+AC_CACHE_CHECK([whether clock skew breaks make],
+pac_cv_prog_make_found_clock_skew,[
+AC_REQUIRE([PAC_PROG_MAKE_PROGRAM])
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+cat > conftest <<EOF
+ALL:
+ @-echo "success"
+EOF
+$MAKE -f conftest > conftest.out 2>&1
+if grep -i skew conftest >/dev/null 2>&1 ; then
+ pac_cv_prog_make_found_clock_skew=yes
+else
+ pac_cv_prog_make_found_clock_skew=no
+fi
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+])
+dnl We should really do something if we detect clock skew. The question is,
+dnl what?
+if test "$pac_cv_prog_make_found_clock_skew" = "yes" ; then
+ AC_MSG_WARN([Clock skew found by make. The configure and build may fail.
+Consider building in a local instead of NFS filesystem.])
+fi
+])
+
+dnl/*D
+dnl PAC_PROG_MAKE - Checks for the varieties of MAKE, including support for
+dnl VPATH
+dnl
+dnl Synopsis:
+dnl PAC_PROG_MAKE
+dnl
+dnl Output Effect:
+dnl Sets 'MAKE' to the make program to use if 'MAKE' is not already set.
+dnl Sets the variable 'SET_CFLAGS' to 'CFLAGS =' if make sets 'CFLAGS'.
+dnl
+dnl Notes:
+dnl This macro uses 'PAC_PROG_MAKE_INCLUDE',
+dnl 'PAC_PROG_MAKE_ALLOWS_COMMENTS', 'PAC_PROG_MAKE_VPATH', and
+dnl 'PAC_PROG_MAKE_SET_CFLAGS'. See those commands for details about their
+dnl actions.
+dnl
+dnl It may call 'AC_PROG_MAKE_SET', which sets 'SET_MAKE' to 'MAKE = @MAKE@'
+dnl if the make program does not set the value of make, otherwise 'SET_MAKE'
+dnl is set to empty; if the make program echos the directory name, then
+dnl 'SET_MAKE' is set to 'MAKE = $MAKE'.
+dnl D*/
+AC_DEFUN([PAC_PROG_MAKE],[
+PAC_PROG_MAKE_PROGRAM
+PAC_PROG_MAKE_CLOCK_SKEW
+PAC_PROG_MAKE_INCLUDE
+PAC_PROG_MAKE_ALLOWS_COMMENTS
+PAC_PROG_MAKE_VPATH
+AC_SUBST(SET_CFLAGS)
+dnl AM_IGNORE(SET_CFLAGS)
+PAC_PROG_MAKE_SET_CFLAGS([SET_CFLAGS='CFLAGS='])
+if test "$pac_cv_prog_make_echos_dir" = "no" ; then
+ AC_PROG_MAKE_SET
+else
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_mpi.m4 b/src/mpi/romio/mpl/confdb/aclocal_mpi.m4
new file mode 100644
index 0000000..f0013a9
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_mpi.m4
@@ -0,0 +1,519 @@
+dnl
+dnl/*D
+dnl PAC_LIB_MPI - Check for MPI library
+dnl
+dnl Synopsis:
+dnl PAC_LIB_MPI([action if found],[action if not found])
+dnl
+dnl Output Effect:
+dnl
+dnl Notes:
+dnl Currently, only checks for lib mpi and mpi.h. Later, we will add
+dnl MPI_Pcontrol prototype (const int or not?).
+dnl
+dnl Prerequisites:
+dnl autoconf version 2.13 (for AC_SEARCH_LIBS)
+dnl D*/
+dnl Other tests to add:
+dnl Version of MPI
+dnl MPI-2 I/O?
+dnl MPI-2 Spawn?
+dnl MPI-2 RMA?
+dnl PAC_LIB_MPI([found text],[not found text])
+AC_DEFUN([PAC_LIB_MPI],[
+dnl Set the prereq to 2.50 to avoid having
+AC_PREREQ(2.50)
+if test "X$pac_lib_mpi_is_building" != "Xyes" ; then
+ # Use CC if TESTCC is defined
+ if test "X$pac_save_level" != "X" ; then
+ pac_save_TESTCC="${TESTCC}"
+ pac_save_TESTCPP="${TESTCPP}"
+ CC="$pac_save_CC"
+ if test "X$pac_save_CPP" != "X" ; then
+ CPP="$pac_save_CPP"
+ fi
+ fi
+ # Look for MPILIB first if it is defined
+ AC_SEARCH_LIBS(MPI_Init,$MPILIB mpi mpich)
+ if test "$ac_cv_search_MPI_Init" = "no" ; then
+ ifelse($2,,
+ AC_MSG_ERROR([Could not find MPI library]),[$2])
+ fi
+ AC_CHECK_HEADER(mpi.h,pac_have_mpi_h="yes",pac_have_mpi_h="no")
+ if test $pac_have_mpi_h = "no" ; then
+ ifelse($2,,
+ AC_MSG_ERROR([Could not find mpi.h include file]),[$2])
+ fi
+ if test "X$pac_save_level" != "X" ; then
+ CC="$pac_save_TESTCC"
+ CPP="$pac_save_TESTCPP"
+ fi
+fi
+ifelse($1,,,[$1])
+])
+
+dnl This should also set MPIRUN.
+dnl
+dnl/*D
+dnl PAC_ARG_MPI_TYPES - Add command-line switches for different MPI
+dnl environments
+dnl
+dnl Synopsis:
+dnl PAC_ARG_MPI_TYPES([default])
+dnl
+dnl Output Effects:
+dnl Adds the following command line options to configure
+dnl+ \-\-with\-mpich[=path] - MPICH. 'path' is the location of MPICH commands
+dnl. \-\-with\-ibmmpi - IBM MPI
+dnl. \-\-with\-lammpi[=path] - LAM/MPI
+dnl. \-\-with\-mpichnt - MPICH NT
+dnl- \-\-with\-sgimpi - SGI MPI
+dnl If no type is selected, and a default ("mpich", "ibmmpi", or "sgimpi")
+dnl is given, that type is used as if '--with-<default>' was given.
+dnl
+dnl Sets 'CC', 'F77', 'TESTCC', 'TESTF77', and 'MPILIBNAME'. Does `not`
+dnl perform an AC_SUBST for these values.
+dnl Also sets 'MPIBOOT' and 'MPIUNBOOT'. These are used to specify
+dnl programs that may need to be run before and after running MPI programs.
+dnl For example, 'MPIBOOT' may start demons necessary to run MPI programs and
+dnl 'MPIUNBOOT' will stop those demons.
+dnl
+dnl The two forms of the compilers are to allow for tests of the compiler
+dnl when the MPI version of the compiler creates executables that cannot
+dnl be run on the local system (for example, the IBM SP, where executables
+dnl created with mpcc will not run locally, but executables created
+dnl with xlc may be used to discover properties of the compiler, such as
+dnl the size of data types).
+dnl
+dnl Historical note:
+dnl Some common autoconf tests, such as AC_CHECK_SIZEOF, used to require
+dnl running a program. But some MPI compilers (often really compilation
+dnl scripts) produced programs that could only be run with special commands,
+dnl such as a batch submission system. To allow these test programs to be
+dnl run, a separate set of compiler variables, TESTCC, TESTF77, etc.,
+dnl were defined. However, in later versions of autoconf, it both became
+dnl unnecessary to run programs for tests such as AC_CHECK_SIZEOF and
+dnl it became necessary to define CC etc. before invoking AC_PROG_CC (and
+dnl the othe language compilers), because those commands now do much, much
+dnl more than just determining the compiler.
+dnl
+dnl To address the change, we still define the TESTCC etc. compilers where
+dnl possible to allow the use of AC_TRY_RUN when required, but we define
+dnl the CC etc variables and do not define ac_cv_prog_CC etc., as these
+dnl cause autoconf to skip all of the other initialization code that
+dnl AC_PROG_CC etc. runs. Note also that this command must occur before
+dnl AC_PROG_CC (or anything that might cause AC_PROG_CC to be invoked).
+dnl
+dnl See also:
+dnl PAC_LANG_PUSH_COMPILERS, PAC_LIB_MPI
+dnl D*/
+AC_DEFUN([PAC_ARG_MPI_TYPES],[
+# known types
+PAC_ARG_MPI_KNOWN_TYPES
+# find compilers
+PAC_MPI_FIND_COMPILER_SCRIPTS
+PAC_MPI_FIND_COMPILERS
+# check for MPI library
+PAC_MPI_CHECK_MPI_LIB
+])
+dnl
+dnl To keep autoconf from prematurely invoking the compiler check scripts,
+dnl we need a command that first sets the compilers and a separate one
+dnl that makes any necessary checks for libraries
+dnl
+AC_DEFUN([PAC_ARG_MPI_KNOWN_TYPES],[
+AC_ARG_WITH(mpich,
+[--with-mpich=path - Assume that we are building with MPICH],
+ac_mpi_type=mpich)
+# Allow MPICH as well as MPICH
+AC_ARG_WITH(mpich,
+[--with-mpich=path - Assume that we are building with MPICH],
+ac_mpi_type=mpich)
+AC_ARG_WITH(lammpi,
+[--with-lammpi=path - Assume that we are building with LAM/MPI],
+ac_mpi_type=lammpi)
+AC_ARG_WITH(ibmmpi,
+[--with-ibmmpi - Use the IBM SP implementation of MPI],
+ac_mpi_type=ibmmpi)
+AC_ARG_WITH(sgimpi,
+[--with-sgimpi - Use the SGI implementation of MPI],
+ac_mpi_type=sgimpi)
+AC_ARG_WITH(mpichnt,
+[--with-mpichnt - Use MPICH for Windows NT ],
+ac_mpi_type=mpichnt)
+AC_ARG_WITH(mpi,
+[--with-mpi=path - Use an MPI implementation with compile scripts mpicc
+ and mpif77 in path/bin],ac_mpi_type=generic)
+
+if test "X$ac_mpi_type" = "X" ; then
+ if test "X$1" != "X" ; then
+ ac_mpi_type=$1
+ else
+ ac_mpi_type=unknown
+ fi
+fi
+if test "$ac_mpi_type" = "unknown" -a "$pac_lib_mpi_is_building" = "yes" ; then
+ ac_mpi_type="mpich"
+fi
+])
+dnl
+dnl Because autoconf insists on moving code to the beginning of
+dnl certain definitions, it is *not possible* to define a single command
+dnl that selects compilation scripts and also check for other options.
+dnl Thus, this needs to be divided into
+dnl MPI_FIND_COMPILER_SCRIPTS
+dnl which can fail (i.e., not find a script), and
+dnl MPI_FIND_COMPILERS
+dnl which runs the various PROC_xx for the compilers.
+dnl WARNING: this function ignores --program-suffix and --program-prefix.
+dnl However, this function is not currently used at all.
+AC_DEFUN([PAC_MPI_FIND_COMPILER_SCRIPTS],[
+# Set defaults
+MPIRUN_NP="-np "
+MPIEXEC_N="-n "
+AC_SUBST(MPIRUN_NP)
+AC_SUBST(MPIEXEC_N)
+dnl
+AC_ARG_VAR([MPIEXEC],[Name and path of mpiexec program])
+AC_ARG_VAR([MPIRUN],[Name and path of mpirun program])
+AC_ARG_VAR([MPIBOOT],[Name and path of program to run before mpirun])
+AC_ARG_VAR([MPIUNBOOT],[Name and path of program to run after all mpirun])
+AC_ARG_VAR([MPICC],[Name and absolute path of program used to compile MPI programs in C])
+AC_ARG_VAR([MPIF77],[Name and absolute path of program used to compile MPI programs in F77])
+AC_ARG_VAR([MPICXX],[Name and absolute path of program used to compile MPI programs in C++])
+AC_ARG_VAR([MPIF90],[Name and absolute path of program used to compile MPI programs in F90])
+#
+# Check for things that will cause trouble. For example,
+# if MPICC is defined but does not contain a / or \, then PATH_PROG will
+# ignore the value
+if test -n "$MPICC" ; then
+ case $MPICC in
+changequote(<<,>>)
+ [\\/]* | ?:[\\/]*)
+changequote([,])
+ # Ok, PATH_PROG will figure it out
+ ;;
+ *)
+ AC_MSG_ERROR([MPICC must be set to an absolute path if it is set])
+ esac
+fi
+if test -n "$MPICXX" ; then
+ case $MPICXX in
+changequote(<<,>>)
+ [\\/]* | ?:[\\/]*)
+changequote([,])
+ # Ok, PATH_PROG will figure it out
+ ;;
+ *)
+ AC_MSG_ERROR([MPICXX must be set to an absolute path if it is set])
+ esac
+fi
+if test -n "$MPIF77" ; then
+ case $MPIF77 in
+changequote(<<,>>)
+ [\\/]* | ?:[\\/]*)
+changequote([,])
+ # Ok, PATH_PROG will figure it out
+ ;;
+ *)
+ AC_MSG_ERROR([MPIF77 must be set to an absolute path if it is set])
+ esac
+fi
+if test -n "$MPIF90" ; then
+ case $MPIF90 in
+changequote(<<,>>)
+ [\\/]* | ?:[\\/]*)
+changequote([,])
+ # Ok, PATH_PROG will figure it out
+ ;;
+ *)
+ AC_MSG_ERROR([MPIF90 must be set to an absolute path if it is set])
+ esac
+fi
+
+case $ac_mpi_type in
+ mpich)
+ dnl
+ dnl This isn't correct. It should try to get the underlying compiler
+ dnl from the mpicc and mpif77 scripts or mpireconfig
+ if test "X$pac_lib_mpi_is_building" != "Xyes" ; then
+ PAC_PUSH_FLAG([PATH])
+ if test "$with_mpich" != "yes" -a "$with_mpich" != "no" ; then
+ # Look for commands; if not found, try adding bin to the
+ # path
+ if test ! -x $with_mpich/mpicc -a -x $with_mpich/bin/mpicc ; then
+ with_mpich="$with_mpich/bin"
+ fi
+ PATH=$with_mpich:${PATH}
+ fi
+ AC_PATH_PROG(MPICC,mpicc)
+ if test -z "$TESTCC" ; then TESTCC=${CC-cc} ; fi
+ CC="$MPICC"
+ # Note that autoconf may unconditionally change the value of
+ # CC (!) in some other command. Thus, we define CCMASTER
+ CCMASTER=$CC
+ # Force autoconf to respect this choice
+ ac_ct_CC=$CC
+ # to permit configure codes to recover the correct CC. This
+ # is an ugly not-quite-correct workaround for the fact that
+ # does not want you to change the C compiler once you have set it
+ # (But since it does so unconditionally, it silently creates
+ # bogus output files.)
+ AC_PATH_PROG(MPIF77,mpif77)
+ if test -z "$TESTF77" ; then TESTF77=${F77-f77} ; fi
+ F77="$MPIF77"
+ AC_PATH_PROG(MPIFC,mpif90)
+ if test -z "$TESTFC" ; then TESTFC=${FC-f90} ; fi
+ FC="$MPIFC"
+ AC_PATH_PROG(MPICXX,mpiCC)
+ if test -z "$TESTCXX" ; then TESTCXX=${CXX-CC} ; fi
+ CXX="$MPICXX"
+ # We may want to restrict this to the path containing mpirun
+ AC_PATH_PROG(MPIEXEC,mpiexec)
+ AC_PATH_PROG(MPIRUN,mpirun)
+ AC_PATH_PROG(MPIBOOT,mpichboot)
+ AC_PATH_PROG(MPIUNBOOT,mpichstop)
+ PAC_POP_FLAG([PATH])
+ MPILIBNAME="mpich"
+ else
+ # All of the above should have been passed in the environment!
+ :
+ fi
+ ;;
+
+ mpichnt)
+ ;;
+
+ lammpi)
+ dnl
+ dnl This isn't correct. It should try to get the underlying compiler
+ dnl from the mpicc and mpif77 scripts or mpireconfig
+ PAC_PUSH_FLAG([PATH])
+ if test "$with_mpich" != "yes" -a "$with_mpich" != "no" ; then
+ # Look for commands; if not found, try adding bin to the path
+ if test ! -x $with_lammpi/mpicc -a -x $with_lammpi/bin/mpicc ; then
+ with_lammpi="$with_lammpi/bin"
+ fi
+ PATH=$with_lammpi:${PATH}
+ fi
+ AC_PATH_PROG(MPICC,mpicc)
+ if test -z "$TESTCC" ; then TESTCC=${CC-cc} ; fi
+ CC="$MPICC"
+ AC_PATH_PROG(MPIF77,mpif77)
+ if test -z "$TESTCC" ; then TESTF77=${F77-f77} ; fi
+ F77="$MPIF77"
+ AC_PATH_PROG(MPIFC,mpif90)
+ TESTFC=${FC-f90}
+ if test -z "$TESTFC" ; then TESTFC=${FC-f90} ; fi
+ FC="$MPIFC"
+ AC_PATH_PROG(MPICXX,mpiCC)
+ if test -z "$TESTCXX" ; then TESTCXX=${CXX-CC} ; fi
+ CXX="$MPICXX"
+ PAC_POP_FLAG([PATH])
+ MPILIBNAME="lammpi"
+ MPIBOOT="lamboot"
+ MPIUNBOOT="wipe"
+ MPIRUN="mpirun"
+ ;;
+
+ ibmmpi)
+ AC_CHECK_PROGS(MPCC,mpcc)
+ AC_CHECK_PROGS(MPXLF,mpxlf mpfort)
+ if test -z "$MPCC" -o -z "$MPXLF" ; then
+ AC_MSG_ERROR([Could not find IBM MPI compilation scripts. Either mpcc or mpxlf/mpfort is missing])
+ fi
+ if test -z "$TESTCC" ; then TESTCC=${CC-xlC} ; fi
+ if test -z "$TESTF77" ; then TESTF77=${F77-xlf}; fi
+ CC=mpcc; F77=$MPXLF
+ # There is no mpxlf90, but the options langlvl and free can
+ # select the Fortran 90 version of xlf
+ if test "$enable_f90" != no ; then
+ AC_CHECK_PROGS(MPIXLF90,mpxlf90 mpfort)
+ if test -z "$TESTFC" ; then TESTFC=${FC-xlf90}; fi
+ if test "X$MPIXLF90" != "X" ; then
+ FC="$MPIXLF90"
+ else
+ FC="$MPXLF -qlanglvl=90ext -qfree=f90"
+ fi
+ fi
+ MPILIBNAME=""
+ cross_compiling=yes
+ # Turn off the autoconf version 3 warning message
+ ac_tool_warned=yes
+ ;;
+
+ sgimpi)
+ if test -z "$TESTCC" ; then TESTCC=${CC:=cc} ; fi
+ if test -z "$TESTF77" ; then TESTF77=${F77:=f77} ; fi
+ if test -z "$TESTCXX" ; then TESTCXX=${CXX:=CC} ; fi
+ if test -z "$TESTFC" ; then TESTFC=${FC:=f90} ; fi
+ # Must check for the MPI library in a separate macro - adding
+ # a test here will cause autoconf to prematurely define the
+ # C compiler
+ MPIRUN=mpirun
+ MPIBOOT=""
+ MPIUNBOOT=""
+ ;;
+
+ generic)
+ # in $with_mpi/bin or $with_mpi
+ if test "X$MPICC" = "X" ; then
+ if test -x "$with_mpi/bin/mpicc" ; then
+ MPICC=$with_mpi/bin/mpicc
+ elif test -x "$with_mpi/mpicc" ; then
+ MPICC=$with_mpi/mpicc
+ fi
+ fi
+ if test "X$MPICXX" = "X" ; then
+ if test -x "$with_mpi/bin/mpicxx" ; then
+ MPICXX=$with_mpi/bin/mpicxx
+ elif test -x "$with_mpi/mpicxx" ; then
+ MPICXX=$with_mpi/mpicxx
+ fi
+ fi
+ if test "X$MPIF77" = "X" ; then
+ if test -x "$with_mpi/bin/mpif77" ; then
+ MPIF77=$with_mpi/bin/mpif77
+ elif test -x "$with_mpi/mpif77" ; then
+ MPIF77=$with_mpi/mpif77
+ fi
+ fi
+ if test "X$MPIF90" = "X" ; then
+ if test -x "$with_mpi/bin/mpif90" ; then
+ MPIF90=$with_mpi/bin/mpif90
+ elif test -x "$with_mpi/mpif90" ; then
+ MPIF90=$with_mpi/mpif90
+ fi
+ fi
+ if test "X$MPIEXEC" = "X" ; then
+ if test -x "$with_mpi/bin/mpiexec" ; then
+ MPIEXEC=$with_mpi/bin/mpiexec
+ elif test -x "$with_mpi/mpiexec" ; then
+ MPIEXEC=$with_mpi/mpiexec
+ fi
+ fi
+ CC=$MPICC
+ F77=$MPIF77
+ if test "X$MPICXX" != "X" ; then CXX=$MPICXX ; fi
+ if test "X$MPIF90" != "X" ; then F90=$MPIF90 ; fi
+ ;;
+
+ *)
+ # Use the default choices for the compilers
+ ;;
+esac
+])
+
+AC_DEFUN([PAC_MPI_FIND_COMPILERS],[
+# Tell autoconf to determine properties of the compilers (these are the
+# compilers for MPI programs)
+PAC_PROG_CC
+if test "$enable_f77" != no -a "$enable_fortran" != no ; then
+ AC_PROG_F77
+fi
+if test "$enable_cxx" != no ; then
+ AC_PROG_CXX
+fi
+if test "$enable_f90" != no ; then
+ PAC_PROG_FC
+fi
+])
+
+dnl
+dnl This uses the selected CC etc to check for include paths and libraries
+AC_DEFUN([PAC_MPI_CHECK_MPI_LIB],[
+AC_REQUIRE([AC_PROG_CC])
+case $ac_mpi_type in
+ mpich)
+ ;;
+
+ mpichnt)
+ dnl
+ dnl This isn't adequate, but it helps with using MPICH-NT/SDK.gcc
+ PAC_PUSH_FLAG([CFLAGS])
+ CFLAGS="$CFLAGS -I$with_mpichnt/include"
+ PAC_PUSH_FLAG([CPPFLAGS])
+ CPPFLAGS="$CPPFLAGS -I$with_mpichnt/include"
+ PAC_PUSH_FLAG([LDFLAGS])
+ LDFLAGS="$LDFLAGS -L$with_mpichnt/lib"
+ AC_CHECK_LIB(mpich,MPI_Init,found="yes",found="no")
+ if test "$found" = "no" ; then
+ AC_CHECK_LIB(mpich,MPI_Init,found="yes",found="no")
+ fi
+ if test "$enable_cxx" != no ; then
+ AC_PROG_CXX
+ fi
+ if test "$enable_f90" != no ; then
+ PAC_PROG_FC
+ fi
+ # Set defaults for the TEST versions if not already set
+ if test -z "$TESTCC" ; then TESTCC=${CC:=cc} ; fi
+ if test -z "$TESTF77" ; then TESTF77=${F77:=f77} ; fi
+ if test -z "$TESTCXX" ; then TESTCXX=${CXX:=CC} ; fi
+ if test -z "$TESTFC" ; then TESTFC=${FC:=f90} ; fi
+ if test "$found" = "no" ; then
+ PAC_POP_FLAG([CFLAGS])
+ PAC_POP_FLAG([CPPFLAGS])
+ PAC_POP_FLAG([LDFLAGS])
+ fi
+ ;;
+
+ lammpi)
+ ;;
+
+ ibmmpi)
+ ;;
+
+ sgimpi)
+ AC_CHECK_LIB(mpi,MPI_Init)
+ if test "$ac_cv_lib_mpi_MPI_Init" = "yes" ; then
+ MPILIBNAME="mpi"
+ fi
+ ;;
+
+ generic)
+ AC_SEARCH_LIBS(MPI_Init,mpi mpich mpich)
+ if test "$ac_cv_lib_mpi_MPI_Init" = "yes" ; then
+ MPILIBNAME="mpi"
+ fi
+ ;;
+
+ *)
+ ;;
+esac
+])
+
+dnl
+dnl/*D
+dnl PAC_MPI_F2C - Determine if MPI has the MPI-2 functions MPI_xxx_f2c and
+dnl MPI_xxx_c2f
+dnl
+dnl Output Effect:
+dnl Define 'HAVE_MPI_F2C' if the routines are found.
+dnl
+dnl Notes:
+dnl Looks only for 'MPI_Request_c2f'.
+dnl D*/
+AC_DEFUN([PAC_MPI_F2C],[
+AC_CACHE_CHECK([for MPI F2C and C2F routines],
+pac_cv_mpi_f2c,
+[
+AC_TRY_LINK([#include "mpi.h"],
+[MPI_Request request;MPI_Fint a;a = MPI_Request_c2f(request);],
+pac_cv_mpi_f2c="yes",pac_cv_mpi_f2c="no")
+])
+if test "$pac_cv_mpi_f2c" = "yes" ; then
+ AC_DEFINE(HAVE_MPI_F2C,1,[Define if MPI has F2C])
+fi
+])
+dnl
+dnl/*D
+dnl PAC_HAVE_ROMIO - make mpi.h include mpio.h if romio enabled
+dnl
+dnl Output Effect:
+dnl expands @HAVE_ROMIO@ in mpi.h into #include "mpio.h"
+dnl D*/
+AC_DEFUN([PAC_HAVE_ROMIO],[
+if test "$enable_romio" = "yes" ; then HAVE_ROMIO='#include "mpio.h"'; fi
+AC_SUBST(HAVE_ROMIO)
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_romio.m4 b/src/mpi/romio/mpl/confdb/aclocal_romio.m4
new file mode 100644
index 0000000..94f4e2e
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_romio.m4
@@ -0,0 +1,850 @@
+dnl
+dnl This files contains additional macros for using autoconf to
+dnl build configure scripts.
+dnl
+dnl Almost all of this file is taken from the aclocal.m4 of MPICH
+dnl
+dnl Get the format of Fortran names. Uses F77, FFLAGS, and sets WDEF.
+dnl If the test fails, sets NOF77 to 1, HAVE_FORTRAN to 0.
+dnl
+dnl
+AC_DEFUN([PAC_GET_FORTNAMES],[
+ rm -f confftest.f confftest.$OBJEXT
+ cat > confftest.f <<EOF
+ subroutine mpir_init_fop( a )
+ integer a
+ a = 1
+ return
+ end
+EOF
+ $F77 $FFLAGS -c confftest.f > /dev/null 2>&1
+ if test ! -s confftest.$OBJEXT ; then
+ AC_MSG_WARN([Unable to test Fortran compiler. Compiling a test
+program failed to produce an object file])
+ NOF77=1
+ elif test -z "$FORTRANNAMES" ; then
+ # MAC OS X (and probably FreeBSD need strings - (not strings -a)
+ # Cray doesn't accept -a ...
+ allstrings="-a"
+ if test $arch_CRAY ; then
+ allstrings=""
+ elif strings - confftest.$OBJEXT < /dev/null >/dev/null 2>&1 ; then
+ allstrings="-"
+ elif strings -a confftest.$OBJEXT < /dev/null >/dev/null 2>&1 ; then
+ allstrings="-a"
+ fi
+
+ nameform1=`strings $allstrings confftest.$OBJEXT | grep mpir_init_fop_ | head -1`
+ nameform2=`strings $allstrings confftest.$OBJEXT | grep MPIR_INIT_FOP | head -1`
+ nameform3=`strings $allstrings confftest.$OBJEXT | grep mpir_init_fop | head -1`
+ nameform4=`strings $allstrings confftest.$OBJEXT | grep mpir_init_fop__ | head -1`
+ rm -f confftest.f confftest.$OBJEXT
+ if test -n "$nameform4" ; then
+ echo "Fortran externals are lower case and have two trailing underscores"
+ FORTRANNAMES="FORTRANDOUBLEUNDERSCORE"
+ elif test -n "$nameform1" ; then
+ # We don't set this in CFLAGS; it is a default case
+ echo "Fortran externals have a trailing underscore and are lowercase"
+ FORTRANNAMES="FORTRANUNDERSCORE"
+ elif test -n "$nameform2" ; then
+ echo "Fortran externals are uppercase"
+ FORTRANNAMES="FORTRANCAPS"
+ elif test -n "$nameform3" ; then
+ echo "Fortran externals are lower case"
+ FORTRANNAMES="FORTRANNOUNDERSCORE"
+ else
+ AC_MSG_WARN([Unable to determine the form of Fortran external names.
+Make sure that the compiler $F77 can be run on this system.
+Turning off Fortran (-nof77 being assumed)])
+ NOF77=1
+ fi
+ fi
+ if test -n "$FORTRANNAMES" ; then
+ WDEF="-D$FORTRANNAMES"
+ fi
+ # Delete confftest files with any extension. This catches the case
+ # where auxillary files, such as coverage files, are removed.
+ rm -f confftest.*
+ ])dnl
+dnl
+define(PAC_GET_SPECIAL_SYSTEM_INFO,[
+#
+if test -n "$arch_IRIX"; then
+ AC_MSG_CHECKING(for IRIX OS version)
+ dnl This block of code replaces a generic "IRIX" arch value with
+ dnl IRIX_<version>_<chip>
+ dnl For example
+ dnl IRIX_5_4400 (IRIX 5.x, using MIPS 4400)
+ osversion=`uname -r | sed 's/\..*//'`
+ dnl Note that we need to allow brackets here, so we briefly turn off
+ dnl the macro quotes
+ changequote(,)dnl
+ dnl Get the second field (looking for 6.1)
+ osvminor=`uname -r | sed 's/[0-9]\.\([0-9]*\)\..*/\1/'`
+ changequote([,])dnl
+ AC_MSG_RESULT($osversion)
+ dnl Get SGI processor count by quick hack
+ AC_MSG_CHECKING(for IRIX cpucount)
+ changequote(,)dnl
+ cpucount=`hinv | grep '[0-9]* [0-9]* MHZ IP[0-9]* Proc' | cut -f 1 -d' '`
+ if test "$cpucount" = "" ; then
+ cpucount=`hinv | grep 'Processor [0-9]*:' | wc -l | sed -e 's/ //g'`
+ fi
+ changequote([,])dnl
+ if test "$cpucount" = "" ; then
+ AC_MSG_RESULT([Could not determine cpucount. Please send])
+ hinv
+ AC_MSG_ERROR([to romio-maint at mcs.anl.gov])
+ fi
+ AC_MSG_RESULT($cpucount)
+ dnl
+ AC_MSG_CHECKING(for IRIX cpumodel)
+ dnl The tail -1 is necessary for multiple processor SGI boxes
+ dnl We might use this to detect SGI multiprocessors and recommend
+ dnl -comm=shared
+ cputype=`hinv -t cpu | tail -1 | cut -f 3 -d' '`
+ if test -z "$cputype" ; then
+ AC_MSG_RESULT([Could not get cputype from hinv -t cpu command. Please send])
+ hinv -t cpu 2>&1
+ hinv -t cpu | cut -f 3 -d' ' 2>&1
+ AC_MSG_ERROR([to romio-maint at mcs.anl.gov])
+ fi
+ AC_MSG_RESULT($cputype)
+ dnl echo "checking for osversion and cputype"
+ dnl cputype may contain R4400, R2000A/R3000, or something else.
+ dnl We may eventually need to look at it.
+ if test -z "$osversion" ; then
+ AC_MSG_RESULT([Could not determine OS version. Please send])
+ uname -a
+ AC_MSG_ERROR([to romio-maint at mcs.anl.gov])
+ elif test $osversion = 4 ; then
+ true
+ elif test $osversion = 5 ; then
+ true
+ elif test $osversion = 6 ; then
+ true
+ else
+ AC_MSG_RESULT([Could not recognize the version of IRIX (got $osversion).
+ROMIO knows about versions 4, 5 and 6; the version being returned from
+uname -r is $osversion. Please send])
+ uname -a 2>&1
+ hinv 2>&1
+ AC_MSG_ERROR([to romio-maint at mcs.anl.gov])
+ fi
+ AC_MSG_CHECKING(for cputype)
+ OLD_ARCH=IRIX
+ IRIXARCH="$ARCH_$osversion"
+ dnl Now, handle the chip set
+ changequote(,)dnl
+ cputype=`echo $cputype | sed -e 's%.*/%%' -e 's/R//' | tr -d "[A-Z]"`
+ changequote([,])dnl
+ case $cputype in
+ 3000) ;;
+ 4000) ;;
+ 4400) ;;
+ 4600) ;;
+ 5000) ;;
+ 8000) ;;
+ 10000);;
+ 12000);;
+ *)
+ AC_MSG_WARN([Unexpected IRIX/MIPS chipset $cputype. Please send the output])
+ uname -a 2>&1
+ hinv 2>&1
+ AC_MSG_WARN([to romio-maint at mcs.anl.gov
+ROMIO will continue and assume that the cputype is
+compatible with a MIPS 4400 processor.])
+ cputype=4400
+ ;;
+ esac
+ AC_MSG_RESULT($cputype)
+ IRIXARCH="$IRIXARCH_$cputype"
+ echo "IRIX-specific architecture is $IRIXARCH"
+fi
+])dnl
+dnl
+dnl
+define(PAC_TEST_MPI,[
+ AC_MSG_CHECKING(if a simple MPI program compiles and links)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ MPI_Init(&argc,&argv);
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ cmd="$CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB"
+ echo "$as_me:$LINENO: $cmd" >&5
+ $cmd >&5 2>&5
+ if test ! -x conftest$EXEEXT ; then
+ echo "$as_me:$LINENO: failed program was:" >&5
+ sed 's/^/| /' mpitest.c >&5
+ rm -f conftest$EXEEXT mpitest.c
+ AC_MSG_ERROR([Unable to compile a simple MPI program.
+Use environment variables to provide the location of MPI libraries and
+include directories])
+ else
+ rm -f conftest$EXEEXT mpitest.c
+ fi
+AC_MSG_RESULT(yes)
+])dnl
+dnl
+dnl
+dnl
+define(PAC_NEEDS_FINT,[
+ AC_MSG_CHECKING(if MPI_Fint is defined in the MPI implementation)
+ cat > mpitest1.c <<EOF
+#include "mpi.h"
+ main()
+ {
+ MPI_Fint i;
+ i = 0;
+ }
+EOF
+ rm -f mpitest1.$OBJEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -c mpitest1.c > /dev/null 2>&1
+ if test ! -s mpitest1.$OBJEXT ; then
+ NEEDS_MPI_FINT="#define NEEDS_MPI_FINT"
+ CFLAGS="$CFLAGS -DNEEDS_MPI_FINT"
+ AC_MSG_RESULT(no)
+ rm -f mpitest1.$OBJEXT mpitest1.c
+ else
+ NEEDS_MPI_FINT=""
+ AC_MSG_RESULT(yes)
+ rm -f mpitest1.$OBJEXT mpitest1.c
+ fi
+])dnl
+dnl
+define(PAC_MPI_LONG_LONG_INT,[
+ AC_MSG_CHECKING(if MPI_LONG_LONG_INT is defined in mpi.h)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ long long i;
+ MPI_Init(&argc,&argv);
+ MPI_Send(&i, 1, MPI_LONG_LONG_INT, 0, 0, MPI_COMM_WORLD);
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MPI_LONG_LONG_INT,,[Define if mpi has long long it])
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+dnl
+dnl PAC_LONG_LONG_64: check if there is a 64-bit long long
+dnl
+define(PAC_LONG_LONG_64,[
+if test -n "$longlongsize" ; then
+ if test "$longlongsize" = 8 ; then
+ echo "defining MPI_Offset as long long in C and integer*8 in Fortran"
+ AC_DEFINE(HAVE_LONG_LONG_64,,[Define if long long is 64 bits])
+ DEFINE_MPI_OFFSET="typedef long long MPI_Offset;"
+ FORTRAN_MPI_OFFSET="integer*8"
+ LL="\%lld"
+ elif test "$longlongsize" = "int" ; then # a hack to set MPI_Offset as int
+ echo "defining MPI_Offset as int in C and integer in Fortran"
+ DEFINE_MPI_OFFSET="typedef int MPI_Offset;"
+ FORTRAN_MPI_OFFSET="integer"
+ AC_DEFINE(MPI_OFFSET_IS_INT,,[Define if MPI_Offset is int])
+ LL="\%d"
+ MPI_OFFSET_KIND1="!"
+ MPI_OFFSET_KIND2="!"
+ else
+ echo "defining MPI_Offset as long in C and integer in Fortran"
+ DEFINE_MPI_OFFSET="typedef long MPI_Offset;"
+ FORTRAN_MPI_OFFSET="integer"
+ LL="\%ld"
+ MPI_OFFSET_KIND1="!"
+ MPI_OFFSET_KIND2="!"
+ fi
+else
+ PAC_GET_TYPE_SIZE(long long, longlongsize)
+ if test -n "$longlongsize" ; then
+ if test "$longlongsize" = 8 ; then
+ PAC_TEST_LONG_LONG()
+ else
+ echo "defining MPI_Offset as long in C and integer in Fortran"
+ DEFINE_MPI_OFFSET="typedef long MPI_Offset;"
+ FORTRAN_MPI_OFFSET="integer"
+ LL="\%ld"
+ MPI_OFFSET_KIND1="!"
+ MPI_OFFSET_KIND2="!"
+ fi
+ else
+dnl check if longlong is not supported or only its size cannot be determined
+dnl because the program cannot be run.
+ rm -f ltest.c
+ cat > ltest.c <<EOF
+ main()
+ {
+ long long i=8;
+ return 0;
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -o conftest$EXEEXT ltest.c > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ echo "assuming size of long long is 8bytes; use '-longlongsize' to indicate otherwise"
+ rm -f conftest$EXEEXT ltest.c
+ echo "defining MPI_Offset as long long in C and integer*8 in Fortran"
+ AC_DEFINE(HAVE_LONG_LONG_64,,[Define if long long is 64 bits])
+ DEFINE_MPI_OFFSET="typedef long long MPI_Offset;"
+ FORTRAN_MPI_OFFSET="integer*8"
+ LL="\%lld"
+ else
+ echo "assuming long long is not available; use '-longlongsize' to indicate otherwise"
+ echo "defining MPI_Offset as long in C and integer in Fortran"
+ DEFINE_MPI_OFFSET="typedef long MPI_Offset;"
+ FORTRAN_MPI_OFFSET="integer"
+ LL="\%ld"
+ MPI_OFFSET_KIND1="!"
+ MPI_OFFSET_KIND2="!"
+ fi
+ fi
+fi
+])dnl
+dnl
+dnl
+define(PAC_MPI_INFO,[
+ AC_MSG_CHECKING(if MPI_Info functions are defined in the MPI implementation)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ MPI_Info info;
+ MPI_Init(&argc,&argv);
+ MPI_Info_create(&info);
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MPI_INFO,1,[Define if MPI_Info available])
+ HAVE_MPI_INFO="#define HAVE_MPI_INFO"
+ MPI_FINFO1="!"
+ MPI_FINFO2="!"
+ MPI_FINFO3="!"
+ MPI_FINFO4="!"
+ else
+ AC_MSG_RESULT(no)
+ BUILD_MPI_INFO=1
+ MPI_FINFO1=" INTEGER MPI_MAX_INFO_KEY, MPI_MAX_INFO_VAL"
+ MPI_FINFO2=" PARAMETER (MPI_MAX_INFO_KEY=255, MPI_MAX_INFO_VAL=1024)"
+ MPI_FINFO3=" INTEGER MPI_INFO_NULL"
+ MPI_FINFO4=" PARAMETER (MPI_INFO_NULL=0)"
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+dnl
+dnl
+define(PAC_MPI_DARRAY_SUBARRAY,[
+ AC_MSG_CHECKING(if darray and subarray constructors are defined in the MPI implementation)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ int i=MPI_DISTRIBUTE_CYCLIC;
+ MPI_Datatype t;
+ MPI_Init(&argc,&argv);
+ MPI_Type_create_darray(i, i, i, &i, &i, &i, &i, i, MPI_INT, &t);
+ MPI_Type_create_subarray(i, &i, &i, &i, i, MPI_INT, &t);
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MPI_DARRAY_SUBARRAY,,[Define if MPI Darray available])
+ HAVE_MPI_DARRAY_SUBARRAY="#define HAVE_MPI_DARRAY_SUBARRAY"
+ MPI_FARRAY1="!"
+ MPI_FARRAY2="!"
+ MPI_FARRAY3="!"
+ MPI_FARRAY4="!"
+ MPI_FARRAY5="!"
+ MPI_FARRAY6="!"
+ MPI_FARRAY7="!"
+ else
+ AC_MSG_RESULT(no)
+ BUILD_MPI_ARRAY=1
+ MPI_FARRAY1=" INTEGER MPI_ORDER_C, MPI_ORDER_FORTRAN"
+ MPI_FARRAY2=" PARAMETER (MPI_ORDER_C=56, MPI_ORDER_FORTRAN=57)"
+ MPI_FARRAY3=" INTEGER MPI_DISTRIBUTE_BLOCK, MPI_DISTRIBUTE_CYCLIC"
+ MPI_FARRAY4=" INTEGER MPI_DISTRIBUTE_NONE, MPI_DISTRIBUTE_DFLT_DARG"
+ MPI_FARRAY5=" PARAMETER (MPI_DISTRIBUTE_BLOCK=121, MPI_DISTRIBUTE_CYCLIC=122)"
+ MPI_FARRAY6=" PARAMETER (MPI_DISTRIBUTE_NONE=123)"
+ MPI_FARRAY7=" PARAMETER (MPI_DISTRIBUTE_DFLT_DARG=-49767)"
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+dnl
+dnl
+define(PAC_CHECK_MPI_SGI_INFO_NULL,[
+ AC_MSG_CHECKING([if MPI_INFO_NULL is defined in mpi.h])
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ int i;
+ i = MPI_INFO_NULL;
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ cp adio/sgi/mpi3.1/*.h include
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+dnl
+dnl
+dnl
+define(PAC_CHECK_MPIOF_H,[
+ AC_MSG_CHECKING(if mpiof.h is included in mpif.h)
+ rm -f mpitest.f
+ cat > mpitest.f <<EOF
+ program main
+ implicit none
+ include 'mpif.h'
+ integer i
+ i = MPI_MODE_RDWR
+ stop
+ end
+EOF
+ rm -f conftest$EXEEXT
+ $F77 $FFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.f $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ MPIOF_H_INCLUDED=1
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.f
+])dnl
+dnl
+dnl
+dnl check if pread64 is defined in IRIX. needed on IRIX 6.5
+dnl
+define(PAC_HAVE_PREAD64,[
+ AC_MSG_CHECKING(if pread64 is defined)
+ rm -f conftest.c
+ cat > conftest.c <<EOF
+#include <unistd.h>
+ main()
+ {
+ int fd=0, buf=0, i=0;
+ off64_t off=0;
+ pread64(fd, &buf, i, off);
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -o conftest$EXEEXT conftest.c > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PREAD64,,[Define if pread64 available])
+ else
+ AC_MSG_RESULT(no)
+ fi
+rm -f conftest$EXEEXT conftest.c
+])dnl
+dnl
+dnl
+define(PAC_TEST_MPI_SGI_type_is_contig,[
+ AC_MSG_CHECKING(if MPI_SGI_type_is_contig is defined)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ MPI_Datatype type;
+ int i;
+
+ MPI_Init(&argc,&argv);
+ i = MPI_SGI_type_is_contig(type);
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ AC_DEFINE(NO_MPI_SGI_type_is_contig,,[Define if no MPI type is contig])
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+dnl
+dnl
+dnl
+define(PAC_TEST_MPI_COMBINERS,[
+ AC_MSG_CHECKING(if MPI-2 combiners are defined in mpi.h)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ int i;
+
+ MPI_Init(&argc,&argv);
+ i = MPI_COMBINER_STRUCT;
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MPI_COMBINERS,,[Define if MPI combiners available])
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+dnl
+dnl
+dnl PAC_MPI_OFFSET_KIND()
+dnl
+dnl tries to determine the Fortran 90 kind parameter for 8-byte integers
+dnl
+define(PAC_MPI_OFFSET_KIND,
+[
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+# Determine the extension for Fortran 90 files (not all compilers accept
+# .f and not all accept .f90)
+if test -z "$ac_f90ext" ; then
+ if test -z "$FC" ; then
+ # This list should correspond to the list in aclocal_fc.m4
+ AC_CHECK_PROGS(FC,ifort pgf90 pathf90 pathf95 xlf90 xlf95 f90 epcf90 \
+ f95 fort lf95 gfortran g95 ifc efc)
+ fi
+ AC_MSG_CHECKING([for extension for Fortran 90 programs])
+ ac_f90ext="f90"
+ ac_f90compile='${FC-f90} -c $FCFLAGS conftest.$ac_f90ext 1>&AC_FD_CC'
+ cat > conftest.$ac_f90ext <<EOF
+ program conftest
+ end
+EOF
+ if AC_TRY_EVAL(ac_f90compile) ; then
+ AC_MSG_RESULT([f90])
+ else
+ # This is needed for Mac OSX 10.5
+ rm -rf conftest.dSYM
+ rm -f conftest*
+ ac_f90ext="f"
+ cat > conftest.$ac_f90ext <<EOF
+ program conftest
+ end
+EOF
+ if AC_TRY_EVAL(ac_f90compile) ; then
+ AC_MSG_RESULT([f])
+ else
+ AC_MSG_RESULT([unknown!])
+ fi
+ fi
+fi
+AC_MSG_CHECKING([for Fortran 90 KIND parameter for 8-byte integers])
+cat <<EOF > conftest.$ac_f90ext
+ program main
+ integer i
+ i = selected_int_kind(16)
+ open(8, file="conftest.out", form="formatted")
+ write (8,*) i
+ close(8)
+ stop
+ end
+EOF
+if test -z "$FC" ; then
+ FC=f90
+fi
+KINDVAL=""
+if $FC -o conftest$EXEEXT conftest.$ac_f90ext >/dev/null 2>&1 ; then
+ ./conftest$EXEEXT >/dev/null 2>&1
+ if test -s conftest.out ; then
+ KINDVAL=`cat conftest.out`
+ fi
+fi
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+if test -n "$KINDVAL" -a "$KINDVAL" != "-1" ; then
+ AC_MSG_RESULT($KINDVAL)
+ MPI_OFFSET_KIND1=" INTEGER MPI_OFFSET_KIND"
+ MPI_OFFSET_KIND2=" PARAMETER (MPI_OFFSET_KIND=$KINDVAL)"
+else
+ AC_MSG_RESULT(unavailable)
+fi
+])dnl
+dnl
+dnl
+define(PAC_TEST_MPI_HAVE_OFFSET_KIND,[
+ AC_MSG_CHECKING(if MPI_OFFSET_KIND is defined in mpif.h)
+ rm -f mpitest.f
+ cat > mpitest.f <<EOF
+ program main
+ implicit none
+ include 'mpif.h'
+ integer i
+ i = MPI_OFFSET_KIND
+ stop
+ end
+EOF
+ rm -f conftest$EXEEXT
+ $F77 $FFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.f $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ MPI_OFFSET_KIND1="!"
+ MPI_OFFSET_KIND2="!"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.f
+])dnl
+dnl
+dnl
+dnl PAC_GET_XFS_MEMALIGN
+dnl
+dnl
+define(PAC_GET_XFS_MEMALIGN,
+[AC_MSG_CHECKING([for memory alignment needed for direct I/O])
+rm -f memalignval
+rm -f /tmp/romio_tmp.bin
+AC_TEST_PROGRAM([#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+main() {
+ struct dioattr st;
+ int fd = open("/tmp/romio_tmp.bin", O_RDWR | O_CREAT, 0644);
+ FILE *f=fopen("memalignval","w");
+ if (fd == -1) exit(1);
+ if (!f) exit(1);
+ fcntl(fd, F_DIOINFO, &st);
+ fprintf( f, "%u\n", st.d_mem);
+ exit(0);
+}],Pac_CV_NAME=`cat memalignval`,Pac_CV_NAME="")
+rm -f memalignval
+rm -f /tmp/romio_tmp.bin
+if test -n "$Pac_CV_NAME" -a "$Pac_CV_NAME" != 0 ; then
+ AC_MSG_RESULT($Pac_CV_NAME)
+ CFLAGS="$CFLAGS -DXFS_MEMALIGN=$Pac_CV_NAME"
+else
+ AC_MSG_RESULT(unavailable, assuming 128)
+ CFLAGS="$CFLAGS -DXFS_MEMALIGN=128"
+fi
+])dnl
+dnl
+
+define(PAC_HAVE_MOUNT_NFS,[
+ AC_MSG_CHECKING([if MOUNT_NFS is defined in the include files])
+ rm -f conftest.c
+ cat > conftest.c <<EOF
+#include <sys/param.h>
+#include <sys/mount.h>
+ main()
+ {
+ int i=MOUNT_NFS;
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -o conftest$EXEEXT conftest.c > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ ROMIO_HAVE_MOUNT_NFS=1
+ AC_DEFINE(HAVE_MOUNT_NFS,,[Define if MOUNT_NFS defined])
+ else
+ ROMIO_HAVE_MOUNT_NFS=0
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT conftest.c
+])dnl
+dnl
+dnl
+dnl PAC_MPI_OFFSET_KIND_4BYTE()
+dnl
+dnl tries to determine the Fortran 90 kind parameter for 4-byte integers
+dnl
+define(PAC_MPI_OFFSET_KIND_4BYTE,
+[AC_MSG_CHECKING([for Fortran 90 KIND parameter for 4-byte integers])
+rm -f kind.f kind.$OBJEXT kind$EXEEXT
+cat <<EOF > kind.f
+ program main
+ integer i
+ i = selected_int_kind(8)
+ open(8, file="k.out", form="formatted")
+ write (8,*) i
+ close(8)
+ stop
+ end
+EOF
+if test -z "$FC" ; then
+ FC=f90
+fi
+KINDVAL=""
+if $FC -o kind$EXEEXT kind.f >/dev/null 2>&1 ; then
+ ./kind >/dev/null 2>&1
+ if test -s k.out ; then
+ KINDVAL=`cat k.out`
+ fi
+fi
+rm -f kind$EXEEXT k.out kind.f kind.$OBJEXT
+if test -n "$KINDVAL" -a "$KINDVAL" != "-1" ; then
+ AC_MSG_RESULT($KINDVAL)
+ MPI_OFFSET_KIND1=" INTEGER MPI_OFFSET_KIND"
+ MPI_OFFSET_KIND2=" PARAMETER (MPI_OFFSET_KIND=$KINDVAL)"
+else
+ AC_MSG_RESULT(unavailable)
+fi
+])dnl
+dnl
+dnl
+define(PAC_FUNC_STRERROR,[
+ AC_MSG_CHECKING([for strerror()])
+ rm -f conftest.c
+ cat > conftest.c <<EOF
+#include <string.h>
+ main()
+ {
+ char *s = strerror(5);
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -o conftest$EXEXT conftest.c >> config.log 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STRERROR,,[Define if strerror available])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING([for sys_errlist])
+ rm -f conftest.c
+changequote(,)
+ cat > conftest.c <<EOF
+#include <stdio.h>
+ main()
+ {
+ extern char *sys_errlist[];
+ printf("%s\n", sys_errlist[34]);
+ }
+EOF
+changequote([,])
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -o conftest$EXEEXT conftest.c > config.log 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SYSERRLIST,,[Define if syserrlist available])
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ rm -f conftest$EXEEXT conftest.c
+])dnl
+dnl
+define(PAC_TEST_MPIR_STATUS_SET_BYTES,[
+ AC_MSG_CHECKING(if MPIR_Status_set_bytes is defined)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+ main(int argc, char **argv)
+ {
+ MPI_Status status;
+ MPI_Datatype type;
+ int err;
+
+ MPI_Init(&argc,&argv);
+ MPIR_Status_set_bytes(status,type,err);
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STATUS_SET_BYTES,,[Define if status set bytes available])
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+define(PAC_TEST_MPI_GREQUEST,[
+ AC_MSG_CHECKING(support for generalized requests)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+#include "stdio.h"
+ main(int argc, char **argv)
+ {
+ MPI_Request request;
+ MPI_Init(&argc, &argv);
+ MPI_Grequest_start(NULL, NULL, NULL, NULL, &request);
+ MPI_Finalize();
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MPI_GREQUEST,1,[Define if generalized requests avaliable])
+ DEFINE_HAVE_MPI_GREQUEST="#define HAVE_MPI_GREQUEST 1"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+
+define(PAC_TEST_MPI_GREQUEST_EXTENSIONS,[
+ AC_MSG_CHECKING(support for non-standard extended generalized requests)
+ rm -f mpitest.c
+ cat > mpitest.c <<EOF
+#include "mpi.h"
+#include "stdio.h"
+ main(int argc, char **argv)
+ {
+ MPIX_Grequest_class classtest
+ }
+EOF
+ rm -f conftest$EXEEXT
+ $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
+ if test -x conftest$EXEEXT ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MPI_GREQUEST_EXTENTIONS,1,[Define if non-standard generalized requests extensions avaliable])
+ DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS="#define HAVE_MPI_GREQUEST_EXTENSIONS 1"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest$EXEEXT mpitest.c
+])dnl
+
+define(PAC_TEST_NEEDS_CONST,[
+ AC_MSG_CHECKING([const declarations needed in MPI routines])
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+ [ #include <mpi.h>
+ int MPI_File_delete(char *filename, MPI_Info info) { return (0); }
+ ] )],
+ [
+ AC_MSG_RESULT(no)
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MPIIO_CONST, const, [Define if MPI-IO routines need a const qualifier])
+ ])
+ ])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_runlog.m4 b/src/mpi/romio/mpl/confdb/aclocal_runlog.m4
new file mode 100644
index 0000000..f22e6dd
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_runlog.m4
@@ -0,0 +1,218 @@
+dnl
+dnl PAC_RUN_LOG mimics _AC_RUN_LOG which is autoconf internal routine.
+dnl We also make sure PAC_RUN_LOG can be used in AS_IF, so the last
+dnl test command should have terminating ]), i.e. without newline before ]).
+dnl
+AC_DEFUN([PAC_RUNLOG],[
+{ AS_ECHO(["$as_me:$LINENO: $1"]) >&AS_MESSAGE_LOG_FD
+ (eval $1) 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ AS_ECHO(["$as_me:$LINENO: \$? = $ac_status"]) >&AS_MESSAGE_LOG_FD
+ test $ac_status = 0; }])
+
+dnl
+dnl PAC_COMMAND_IFELSE is written to replace AC_TRY_EVAL with added logging
+dnl to config.log, i.e. AC_TRY_EVAL does not log anything to config.log.
+dnl If autoconf provides AC_COMMAND_IFELSE or AC_EVAL_IFELSE,
+dnl AC_COMMAND_IFELSE dnl should be replaced by the official autoconf macros.
+dnl
+dnl PAC_COMMAND_IFELSE(COMMMAND,[ACTION-IF-RUN-OK],[ACTION-IF-RUN-FAIL])
+dnl
+AC_DEFUN([PAC_COMMAND_IFELSE],[
+AS_IF([PAC_RUNLOG([$1])],[
+ $2
+],[
+ AS_ECHO(["$as_me: program exited with status $ac_status"]) >&AS_MESSAGE_LOG_FD
+ m4_ifvaln([$3],[
+ (exit $ac_status)
+ $3
+ ])
+])
+])
+
+AC_DEFUN([PAC_RUNLOG_IFELSE],[
+dnl pac_TESTLOG is the internal temporary logfile for this macro.
+pac_TESTLOG="pac_test.log"
+rm -f $pac_TESTLOG
+PAC_COMMAND_IFELSE([$1 > $pac_TESTLOG],[
+ ifelse([$2],[],[],[$2])
+],[
+ AS_ECHO(["*** $1 :"]) >&AS_MESSAGE_LOG_FD
+ cat $pac_TESTLOG >&AS_MESSAGE_LOG_FD
+ ifelse([$3],[],[],[$3])
+])
+rm -f $pac_TESTLOG
+])
+
+
+dnl PAC_VAR_PUSHVAL(VARNAME, [LastSavedValue]))
+dnl
+dnl Save the content of the shell variable, VARNAME, onto a stack.
+dnl The saved value of VARNAME is restorable with respect to the nesting
+dnl of the macro.
+dnl
+dnl The Last saved value of VARNAME on the stack is stored in shell variable
+dnl pac_LastSavedValueOf_$VARNAME if the 2nd argument is NOT supplied.
+dnl If the 2nd argument is present, the last saved value will be stored
+dnl in the 2nd argument instead.
+dnl
+dnl The First saved value of VARNAME on the stack is stored in shell variable
+dnl dnl pac_FirstSavedValueOf_$VARNAME.
+dnl
+AC_DEFUN([PAC_VAR_PUSHVAL],[
+# START of PUSHVAL
+dnl define local m4-name pac_stk_level.
+AS_VAR_PUSHDEF([pac_stk_level], [pac_stk_$1_level])
+AS_VAR_SET_IF([pac_stk_level],[
+ AS_VAR_ARITH([pac_stk_level], [$pac_stk_level + 1])
+],[
+ AS_VAR_SET([pac_stk_level], [0])
+])
+dnl AS_ECHO_N(["PUSHVAL: pac_stk_level = $pac_stk_level, "])
+dnl Save the content of VARNAME, i.e. $VARNAME, onto the stack.
+AS_VAR_SET([pac_stk_$1_$pac_stk_level],[$$1])
+AS_VAR_IF([pac_stk_level], [0], [
+ dnl Save the 1st pushed value of VARNAME as pac_FirstSavedValueOf_$VARNAME
+ AS_VAR_COPY([pac_FirstSavedValueOf_$1],[pac_stk_$1_$pac_stk_level])
+])
+ifelse([$2],[],[
+ dnl Save the last pushed value of VARNAME as pac_LastSavedValueOf_$VARNAME
+ AS_VAR_COPY([pac_LastSavedValueOf_$1],[pac_stk_$1_$pac_stk_level])
+ dnl AS_ECHO(["pac_LastSavedValueOf_$1 = $pac_LastSavedValueOf_$1"])
+],[
+ dnl Save the last pushed value of VARNAME as $2
+ AS_VAR_COPY([$2],[pac_stk_$1_$pac_stk_level])
+ dnl AS_ECHO(["$2 = $$2"])
+])
+AS_VAR_POPDEF([pac_stk_level])
+# END of PUSHVAL
+])
+dnl
+dnl
+dnl
+dnl PAC_VAR_POPVAL(VARNAME)
+dnl
+dnl Restore variable, VARNAME, from the stack.
+dnl This macro is safe with respect to the nesting.
+dnl Some minimal checking of nesting balance of PAC_VAR_PUSH[POP]VAL()
+dnl is done here.
+dnl
+AC_DEFUN([PAC_VAR_POPVAL],[
+# START of POPVAL
+dnl define local m4-name pac_stk_level.
+AS_VAR_PUSHDEF([pac_stk_level], [pac_stk_$1_level])
+AS_VAR_SET_IF([pac_stk_level],[
+ AS_VAR_IF([pac_stk_level],[-1],[
+ AC_MSG_WARN(["Imbalance of PUSHVAL/POPVAL of $1"])
+ ],[
+ dnl AS_ECHO_N(["POPVAL: pac_stk_level = $pac_stk_level, "])
+ AS_VAR_COPY([$1],[pac_stk_$1_$pac_stk_level])
+ dnl AS_ECHO(["popped_val = $$1"])
+ AS_VAR_ARITH([pac_stk_level], [ $pac_stk_level - 1 ])
+ ])
+],[
+ AC_MSG_WARN(["Uninitialized PUSHVAL/POPVAL of $1"])
+])
+AS_VAR_POPDEF([pac_stk_level])
+# END of POPVAL
+])
+dnl
+dnl
+dnl
+dnl PAC_COMPILE_IFELSE_LOG is a wrapper around AC_COMPILE_IFELSE with the
+dnl output of ac_compile to a specified logfile instead of AS_MESSAGE_LOG_FD
+dnl
+dnl PAC_COMPILE_IFELSE_LOG(logfilename, input,
+dnl [action-if-true], [action-if-false])
+dnl
+dnl where input, [action-if-true] and [action-if-false] are used
+dnl in AC_COMPILE_IFELSE(input, [action-if-true], [action-if-false]).
+dnl This macro is nesting safe.
+dnl
+AC_DEFUN([PAC_COMPILE_IFELSE_LOG],[
+dnl
+dnl Instead of defining our own ac_compile and do AC_TRY_EVAL
+dnl on these variables. We modify ac_compile used by AC_*_IFELSE
+dnl by piping the output of the command to a logfile. The reason is that
+dnl 1) AC_TRY_EVAL is discouraged by Autoconf. 2) defining our ac_compile
+dnl could mess up the usage and order of *CFLAGS, LDFLAGS and LIBS in
+dnl these commands, i.e. deviate from how GNU standard uses these variables.
+dnl
+dnl Replace ">&AS_MESSAGE_LOG_FD" by "> FILE 2>&1" in ac_compile.
+dnl Save a copy of ac_compile on a stack
+dnl which is safe through nested invocations of this macro.
+PAC_VAR_PUSHVAL([ac_compile])
+dnl Modify ac_compile based on the unmodified ac_compile.
+ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> $1 2>\&1|g'`"
+AC_COMPILE_IFELSE([$2],[
+ ifelse([$3],[],[:],[$3])
+],[
+ ifelse([$4],[],[:],[$4])
+])
+dnl Restore the original ac_compile from the stack.
+PAC_VAR_POPVAL([ac_compile])
+])
+dnl
+dnl
+dnl
+dnl PAC_LINK_IFELSE_LOG is a wrapper around AC_LINK_IFELSE with the
+dnl output of ac_link to a specified logfile instead of AS_MESSAGE_LOG_FD
+dnl
+dnl PAC_LINK_IFELSE_LOG(logfilename, input,
+dnl [action-if-true], [action-if-false])
+dnl
+dnl where input, [action-if-true] and [action-if-false] are used
+dnl in AC_LINK_IFELSE(input, [action-if-true], [action-if-false]).
+dnl This macro is nesting safe.
+dnl
+AC_DEFUN([PAC_LINK_IFELSE_LOG],[
+dnl
+dnl Instead of defining our own ac_link and do AC_TRY_EVAL
+dnl on these variables. We modify ac_link used by AC_*_IFELSE
+dnl by piping the output of the command to a logfile. The reason is that
+dnl 1) AC_TRY_EVAL is discouraged by Autoconf. 2) defining our ac_link
+dnl could mess up the usage and order of *CFLAGS, LDFLAGS and LIBS in
+dnl these commands, i.e. deviate from how GNU standard uses these variables.
+dnl
+dnl Replace ">&AS_MESSAGE_LOG_FD" by "> FILE 2>&1" in ac_link.
+dnl Save a copy of ac_link on a stack
+dnl which is safe through nested invocations of this macro.
+PAC_VAR_PUSHVAL([ac_link])
+dnl Modify ac_link based on the unmodified ac_link.
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> $1 2>\&1|g'`"
+dnl
+AC_LINK_IFELSE([$2],[
+ ifelse([$3],[],[:],[$3])
+],[
+ ifelse([$4],[],[:],[$4])
+])
+dnl Restore the original ac_link from the stack.
+PAC_VAR_POPVAL([ac_link])
+])
+dnl
+dnl
+dnl
+dnl PAC_COMPLINK_IFELSE (input1, input2, [action-if-true], [action-if-false])
+dnl
+dnl where input1 and input2 are either AC_LANG_SOURCE or AC_LANG_PROGRAM
+dnl enclosed input programs.
+dnl
+dnl The macro first compiles input1 and uses the object file created
+dnl as part of LIBS during linking. This macro is nesting safe.
+dnl
+AC_DEFUN([PAC_COMPLINK_IFELSE],[
+AC_COMPILE_IFELSE([$1],[
+ PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
+ PAC_VAR_PUSHVAL([LIBS])
+ LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
+ AC_LINK_IFELSE([$2],[
+ ifelse([$3],[],[:],[$3])
+ ],[
+ ifelse([$4],[],[:],[$4])
+ ])
+ PAC_VAR_POPVAL([LIBS])
+ rm -f pac_conftest.$OBJEXT
+],[
+ ifelse([$4],[],[:],[$4])
+])
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_shl.m4 b/src/mpi/romio/mpl/confdb/aclocal_shl.m4
new file mode 100644
index 0000000..f974bfa
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_shl.m4
@@ -0,0 +1,500 @@
+dnl
+dnl Definitions for creating shared libraries
+dnl
+dnl The purpose of these definitions is to provide common support for
+dnl shared libraries, with *or without* the use of the GNU Libtool package.
+dnl For many of our important platforms, the Libtool approach is overkill,
+dnl and can be particularly painful for developers.
+dnl
+dnl To use libtool, you need macros that are defined by libtool for libtool
+dnl Don't even think about the consequences of this for updating and for
+dnl using user-versions of libtool :(
+dnl
+dnl !!!!!!!!!!!!!!!!!!!!!
+dnl libtool requires ac 2.50 !!!!!!!!!!!!!!!!!
+dnl
+dnl builtin(include,libtool.m4)
+dnl
+dnl/*D
+dnl PAC_ARG_SHAREDLIBS - Add --enable-sharedlibs=kind to configure.
+dnl
+dnl Synopsis:
+dnl PAC_ARG_SHAREDLIBS
+dnl
+dnl Output effects:
+dnl Adds '--enable-sharedlibs=kind' to the command line. If this is enabled,
+dnl then based on the value of 'kind', programs are selected for the
+dnl names 'CC_SHL' and 'CC_LINK_SHL' that configure will substitute for in
+dnl 'Makefile.in's. These symbols are generated by 'simplemake' when
+dnl shared library support is selected.
+dnl The variable 'C_LINKPATH_SHL' is set to the option to specify the
+dnl path to search at runtime for libraries (-rpath in gcc/GNU ld).
+dnl This can be turned off with --disable-rpath , which is appropriate
+dnl for libraries and for executables that may be installed in different
+dnl locations.
+dnl The variable 'SHLIB_EXT' is set to the extension used by shared
+dnl libraries; under most forms of Unix, this is 'so'; under Mac OS/X, this
+dnl is 'dylib', and under Windows (including cygwin), this is 'dll'.
+dnl
+dnl Supported values of 'kind' include \:
+dnl+ gcc - Use gcc to create both shared objects and libraries
+dnl. osx-gcc - Use gcc on Mac OS/X to create both shared objects and
+dnl libraries
+dnl. solaris-cc - Use native Solaris cc to create shared objects and
+dnl libraries
+dnl. cygwin-gcc - Use gcc on Cygwin to create shared objects and libraries
+dnl- none - The same as '--disable-sharedlibs'
+dnl
+dnl Others will be added as experience dictates. Likely names are
+dnl + libtool - For general GNU libtool
+dnl - linux-pgcc - For Portland group under Linux
+dnl
+dnl Notes:
+dnl Shared libraries are only partially implemented. Additional symbols
+dnl will probably be defined, including symbols to specify how shared library
+dnl search paths are specified and how shared library names are set.
+dnl D*/
+AC_DEFUN([PAC_ARG_SHAREDLIBS],[
+
+AC_ARG_ENABLE(shared,
+ AC_HELP_STRING([--enable-shared], [Enable shared library builds]),,
+ enable_shared=no)
+
+AC_ARG_ENABLE(rpath,
+ AC_HELP_STRING([--enable-rpath],
+ [Determine whether the rpath is set when programs are
+ compiled and linked when shared libraries are built.
+ The default is yes; use --disable-rpath to turn this
+ feature off; in that case, shared libraries will be
+ found according to the rules for your system (e.g., in
+ LD_LIBRARY_PATH)]),,enable_rpath=yes)
+
+AC_ARG_ENABLE(sharedlibs,
+[ --enable-sharedlibs=kind - Enable shared libraries. kind may be
+ gcc - Standard gcc and GNU ld options for creating shared libraries
+ osx-gcc - Special options for gcc needed only on OS/X
+ solaris-cc - Solaris native (SPARC) compilers for 32 bit systems
+ cygwin-gcc - Special options for gcc needed only for cygwin
+ none - same as --disable-sharedlibs
+ Only gcc, osx-gcc, and solaris-cc are currently supported
+],,enable_sharedlibs=default)
+
+if test "$enable_sharedlibs" = "default" ; then
+ if test "$enable_shared" = "yes" ; then
+ AS_CASE([$host],
+ [*-*-darwin*], [enable_sharedlibs=gcc-osx],
+ [*-*-cygwin*|*-*-mingw*|*-*-pw32*|*-*-cegcc*], [enable_sharedlibs=cygwin-gcc],
+ [*-*-sunos*], [enable_sharedlibs=solaris-gcc],
+ [enable_sharedlibs=gcc])
+ else
+ enable_sharedlibs=none
+ fi
+fi
+
+# If --enable-sharedlibs is given, but --enable-shared is not, throw
+# an error
+if test "$enable_sharedlibs" != "no" -a "$enable_sharedlibs" != "none" ; then
+ if test "$enable_shared" = "no" ; then
+ AC_MSG_ERROR([--enable-sharedlibs cannot be used without --enable-shared])
+ fi
+fi
+
+CC_SHL=true
+C_LINK_SHL=true
+C_LINKPATH_SHL=""
+SHLIB_EXT=unknown
+SHLIB_FROM_LO=no
+SHLIB_INSTALL='$(INSTALL_PROGRAM)'
+case "$enable_sharedlibs" in
+ no|none)
+ ;;
+ gcc-osx|osx-gcc)
+ AC_MSG_RESULT([Creating shared libraries using GNU for Mac OSX])
+ C_LINK_SHL='${CC} -dynamiclib -undefined suppress -single_module -flat_namespace'
+ CC_SHL='${CC} -fPIC'
+ # No way in osx to specify the location of the shared libraries at link
+ # time (see the code in createshlib in mpich/src/util)
+ # As of 10.5, -Wl,-rpath,dirname should work . The dirname
+ # must be a single directory, not a colon-separated list (use multiple
+ # -Wl,-rpath,path for each of the paths in the list). However, os x
+ # apparently records the library full path, so rpath isn't as useful
+ # as it is on other systems
+ C_LINKPATH_SHL=""
+ SHLIB_EXT="dylib"
+ enable_sharedlibs="osx-gcc"
+ ;;
+ gcc)
+ AC_MSG_RESULT([Creating shared libraries using GNU])
+ # Not quite right yet. See mpich/util/makesharedlib
+ # Use syntax that works in both Make and the shell
+ #C_LINK_SHL='${CC} -shared -Wl,-r'
+ C_LINK_SHL='${CC} -shared'
+ # For example, include the libname as ${LIBNAME_SHL}
+ #C_LINK_SHL='${CC} -shared -Wl,-h,<finallibname>'
+ # May need -fPIC . Test to see which one works.
+ for sh_arg in "-fPIC" "-fpic" "-KPIC" ; do
+ PAC_C_CHECK_COMPILER_OPTION($sh_arg,works=yes,works=no)
+ if test "$works" = "yes" ; then
+ CC_SHL="${CC} ${sh_arg}"
+ break
+ fi
+ done
+ if test "$works" != "yes"; then
+ AC_MSG_ERROR([Cannot build shared libraries with this compiler])
+ fi
+ # This used to have -Wl,-rpath earlier, but that causes problems
+ # on many systems.
+ if test $enable_rpath = "yes" ; then
+ C_LINKPATH_SHL="-Wl,-rpath,"
+ fi
+ SHLIB_EXT=so
+ # We need to test that this isn't osx. The following is a
+ # simple hack
+ osname=`uname -s`
+ case $osname in
+ *Darwin*|*darwin*)
+ AC_MSG_ERROR([You must specify --enable-sharedlibs=osx-gcc for Mac OS/X])
+ ;;
+ *CYGWIN*|*cygwin*)
+ AC_MSG_ERROR([You must specify --enable-sharedlibs=cygwin-gcc for Cygwin])
+ ;;
+ *SunOS*)
+ AC_MSG_ERROR([You must specify --enable-sharedlibs=solaris-gcc for Solaris with gcc])
+ ;;
+ esac
+ ;;
+
+ cygwin|cygwin-gcc|gcc-cygwin)
+ AC_MSG_RESULT([Creating shared libraries using GNU under CYGWIN])
+ C_LINK_SHL='${CC} -shared'
+ CC_SHL='${CC}'
+ # DLL Libraries need to be in the user's path (!)
+ C_LINKPATH_SHL=""
+ SHLIB_EXT="dll"
+ enable_sharedlibs="cygwin-gcc"
+ ;;
+
+ libtool)
+ # set TRY_LIBTOOL to yes to experiment with libtool. You are on your
+ # own - only send fixes, not bug reports.
+ if test "$TRY_LIBTOOL" != yes ; then
+ AC_MSG_ERROR([Creating shared libraries using libtool not yet supported])
+ else
+ # Using libtool requires a heavy-weight process to test for
+ # various stuff that libtool needs. Without this, you'll get a
+ # bizarre error message about libtool being unable to find
+ # configure.in or configure.ac (!)
+ # Libtool expects to see at least enable-shared.
+ if test "X$enable_shared" = "X" ; then enable_shared=yes ; fi
+ # Initialize libtool
+ # This works, but libtool version 2 places the object files
+ # in a different place, making it harder to integrate with
+ # our base approach. Disabling for now
+ dnl LT_PREREQ([2.2.6])
+ dnl LT_INIT([disable-shared])
+ AC_MSG_ERROR([To use this test verison, edit aclocal_shl.m4])
+ # Likely to be
+ # either CC or CC_SHL is libtool $cc
+ CC_SHL='${LIBTOOL} --mode=compile ${CC}'
+ # CC_LINK_SHL includes the final installation path
+ # For many systems, the link may need to include *all* libraries
+ # (since many systems don't allow any unsatisfied dependencies)
+ # We need to give libtool the .lo file, not the .o files
+ SHLIB_FROM_LO=yes
+ # We also need to add -no-undefined when the compiler is gcc and
+ # we are building under cygwin
+ sysname=`uname -s | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+ isCygwin=no
+ case "$sysname" in
+ *CYGWIN*) isCygwin=yes ;;
+ esac
+ if test "$isCygwin" = yes ; then
+ C_LINK_SHL='${LIBTOOL} --mode=link ${CC} -no-undefined -rpath ${libdir}'
+ else
+ C_LINK_SHL='${LIBTOOL} --mode=link ${CC} -rpath ${libdir}'
+ fi
+ if test $enable_rpath = "yes" ; then
+ C_LINKPATH_SHL="-rpath "
+ fi
+ # We also need a special install process with libtool. Note that this
+ # will also install the static libraries
+ SHLIB_INSTALL='$(LIBTOOL) --mode=install $(INSTALL_PROGRAM)'
+ # Note we may still need to add
+ #'$(LIBTOOL) --mode=finish $(libdir)'
+ fi
+ ;;
+dnl
+dnl Other, such as solaris-cc
+ solaris|solaris-cc)
+ AC_MSG_RESULT([Creating shared libraries using Solaris])
+ # pic32 is appropriate for both 32 and 64 bit Solaris
+ C_LINK_SHL='${CC} -G -xcode=pic32'
+ CC_SHL='${CC} -xcode=pic32'
+ if test $enable_rpath = "yes" ; then
+ C_LINKPATH_SHL="-R"
+ fi
+ SHLIB_EXT=so
+ enable_sharedlibs="solaris-cc"
+ ;;
+
+ solaris-gcc)
+ # This is the same as gcc, except for the C_LINKPATH_SHL
+ AC_MSG_RESULT([Creating shared libraries using Solaris with gcc])
+ C_LINK_SHL='${CC} -shared'
+ CC_SHL='${CC} -fPIC'
+ if test $enable_rpath = "yes" ; then
+ C_LINKPATH_SHL="-R"
+ fi
+ SHLIB_EXT=so
+ enable_sharedlibs="solaris-gcc"
+ ;;
+
+ linuxppc-xlc)
+ # This is only the beginning of xlc support, thanks to andy at vpac.org
+ CC_SHL='${CC} -qmkshrobj'
+ # More recent versions allow multiple args, separated by commas
+ if test $enable_rpath = "yes" ; then
+ C_LINKPATH_SHL="-Wl,-rpath,"
+ fi
+ #C_LINKPATH_SHL="-Wl,-rpath -Wl,"
+ C_LINK_SHL='${CC} -shared -qmkshrobj'
+ SHLIB_EXT=so
+ # Note that the full line should be more like
+ # $CLINKER -shared -qmkshrobj -Wl,-h,$libbase.$slsuffix -o ../shared/$libbase.$slsuffix *.o $OtherLibs
+ # for the appropriate values of $libbase and $slsuffix
+ # The -h name sets the name of the object; this is necessary to
+ # ensure that the dynamic linker can find the proper shared library.
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unknown value $enable_sharedlibs for enable-sharedlibs. Values should be gcc or osx-gcc])
+ enable_sharedlibs=no
+ ;;
+esac
+# Check for the shared-library extension
+PAC_CC_SHLIB_EXT
+dnl
+AC_SUBST(CC_SHL)
+AC_SUBST(C_LINK_SHL)
+AC_SUBST(C_LINKPATH_SHL)
+AC_SUBST(SHLIB_EXT)
+AC_SUBST(SHLIB_FROM_LO)
+AC_SUBST(SHLIB_INSTALL)
+])
+
+dnl /*D
+dnl PAC_xx_SHAREDLIBS - Get compiler and linker for shared libraries
+dnl These routines may be used to determine the compiler and the
+dnl linker to be used in creating shared libraries
+dnl Rather than set predefined variable names, they set an argument
+dnl (if provided)
+dnl
+dnl Synopsis
+dnl PAC_CC_SHAREDLIBS(type,CCvar,CLINKvar)
+dnl D*/
+AC_DEFUN([PAC_CC_SHAREDLIBS],
+[
+pac_kinds=$1
+ifelse($1,,[
+ pac_prog=""
+ AC_CHECK_PROG(pac_prog,gcc,yes,no)
+ # If we are gcc but OS X, set the special type
+ # We need a similar setting for cygwin
+ if test "$pac_prog" = yes ; then
+ osname=`uname -s`
+ case $osname in
+ *Darwin*|*darwin*) pac_kinds=gcc-osx
+ ;;
+ *) pac_kinds=gcc
+ ;;
+ esac
+ fi
+ pac_prog=""
+ AC_CHECK_PROG(pac_prog,libtool,yes,no)
+ if test "$pac_prog" = yes ; then pac_kinds="$pac_kinds libtool" ; fi
+])
+for pac_arg in $pac_kinds ; do
+ case $pac_arg in
+ gcc)
+ # For example, include the libname as ${LIBNAME_SHL}
+ #C_LINK_SHL='${CC} -shared -Wl,-h,<finallibname>'
+ pac_cc_sharedlibs='gcc -shared'
+ # Make sure we select the correct fpic option
+ PAC_C_CHECK_COMPILER_OPTION(-fPIC,fPIC_OK=yes,fPIC_OK=no)
+ if test "$fPIC_OK" != yes ; then
+ PAC_C_CHECK_COMPILER_OPTION(-fpic,fpic_ok=yes,fpic_ok=no)
+ if test "$fpic_ok" != yes ; then
+ AC_MSG_ERROR([Neither -fpic nor -fPIC accepted by $CC])
+ else
+ pac_cc_sharedlibs="$pac_cc_sharedlibs -fpic"
+ fi
+ else
+ pac_cc_sharedlibs="$pac_cc_sharedlibs -fPIC"
+ fi
+ pac_clink_sharedlibs='gcc -shared'
+ pac_type_sharedlibs=gcc
+ ;;
+ gcc-osx|osx-gcc)
+ pac_clink_sharedlibs='${CC} -dynamiclib -undefined suppress -single_module -flat_namespace'
+ pac_cc_sharedlibs='${CC} -fPIC'
+ pac_type_sharedlibs=gcc-osx
+ ;;
+ libtool)
+ AC_CHECK_PROGS(LIBTOOL,libtool,false)
+ if test "$LIBTOOL" = "false" ; then
+ AC_MSG_WARN([Could not find libtool])
+ else
+ # Likely to be
+ # either CC or CC_SHL is libtool $cc
+ pac_cc_sharedlibs'${LIBTOOL} -mode=compile ${CC}'
+ pac_clink_sharedlibs='${LIBTOOL} -mode=link ${CC} -rpath ${libdir}'
+ pac_type_sharedlibs=libtool
+ fi
+ ;;
+ *)
+ ;;
+ esac
+ if test -n "$pac_cc_sharedlibs" ; then break ; fi
+done
+if test -z "$pac_cc_sharedlibs" ; then pac_cc_sharedlibs=true ; fi
+if test -z "$pac_clink_sharedlibs" ; then pac_clink_sharedlibs=true ; fi
+ifelse($2,,CC_SHL=$pac_cc_sharedlibs,$2=$pac_cc_sharedlibs)
+ifelse($3,,C_LINK_SHL=$pac_clink_sharedlibs,$3=$pac_clink_sharedlibs)
+ifelse($4,,SHAREDLIB_TYPE=$pac_type_sharedlibs,$4=$pac_type_sharedlibs)
+])
+
+dnl This macro ensures that all of the necessary substitutions are
+dnl made by any subdirectory configure (which may simply SUBST the
+dnl necessary values rather than trying to determine them from scratch)
+dnl This is a more robust (and, in the case of libtool, only
+dnl managable) method.
+AC_DEFUN([PAC_CC_SUBDIR_SHLIBS],[
+ AC_SUBST(CC_SHL)
+ AC_SUBST(C_LINK_SHL)
+ AC_SUBST(LIBTOOL)
+ AC_SUBST(ENABLE_SHLIB)
+ AC_SUBST(SHLIB_EXT)
+ if test "$ENABLE_SHLIB" = "libtool" ; then
+ if test -z "$LIBTOOL" ; then
+ AC_MSG_WARN([libtool selected for shared library support but LIBTOOL is not defined])
+ fi
+ # Libtool needs master_top_builddir
+ if test "X$master_top_builddir" = "X" ; then
+ AC_MSG_ERROR([Libtool requires master_top_builddir - check configure.ac sources])
+ fi
+ AC_SUBST(master_top_builddir)
+ fi
+])
+
+dnl PAC_CC_SHLIB_EXT - get the extension for shared libraries
+dnl Set the variable SHLIB_EXT if it is other than unknown.
+AC_DEFUN([PAC_CC_SHLIB_EXT],[
+# Not all systems use .so as the extension for shared libraries (cygwin
+# and OSX are two important examples). If we did not set the SHLIB_EXT,
+# then try and determine it. We need this to properly implement
+# clean steps that look for libfoo.$SHLIB_EXT .
+if test "$SHLIB_EXT" = "unknown" ; then
+ osname=`uname -s`
+ case $osname in
+ *Darwin*|*darwin*) SHLIB_EXT=dylib
+ ;;
+ *CYGWIN*|*cygwin*) SHLIB_EXT=dll
+ ;;
+ *Linux*|*LINUX*|*SunOS*) SHLIB_EXT=so
+ ;;
+ esac
+fi
+])
+
+dnl PAC_COMPILER_SHLIB_FLAGS(compiler-var,output-file)
+dnl
+dnl Uses confdb/config.rpath to determine important linking flags and
+dnl information. This is mainly intended to support the compiler wrapper
+dnl scripts in MPICH ("mpicc" and friends) which cannot directly use libtool to
+dnl handle linking. MPICH's compiler wrappers attempt to link executables with
+dnl an rpath by default. The resulting variable assignment statements will be
+dnl placed into "output-file", which is then suitable for AC_SUBST_FILE or
+dnl sourcing in a shell script (including configure itself).
+dnl
+dnl This macro assumes that the basic tests associated with "compiler-var" have
+dnl been run already, but does not AC_REQUIRE them in order to prevent problems
+dnl with "expanded before required" when requiring the AC_PROG_{CC,F77,FC,CXX}
+dnl macros.
+dnl
+dnl Example usage:
+dnl
+dnl ----8<----
+dnl # compute flags for linking executables against shared libraries when using
+dnl # the modern Fortran compiler ($FC).
+dnl PAC_COMPILER_SHLIB_FLAGS([FC],[src/env/fc_shlib.conf])
+dnl ----8<----
+AC_DEFUN([PAC_COMPILER_SHLIB_FLAGS],[
+AC_REQUIRE_AUX_FILE([config.rpath])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+# It appears that the libtool dynamic linking strategy on Darwin is this:
+# 1. Link all shared libs with "-install_name /full/path/to/libfoo.dylib"
+# 2. Don't do anything special when linking programs, since it seems that the
+# darwin dynamic linker will always use the "install_name" field from the lib
+# that was found at program link-time. (CONFIRMED) This is in opposition to
+# the way that Linux does it, where specifying a "-rpath" argument at program
+# link-time is important.
+#
+# There is an alternative darwin strategy for versions
+# >= 10.5, see this: http://www.cmake.org/pipermail/cmake/2010-August/038970.html
+# (goodell@ 2011-06-17)
+
+AC_MSG_CHECKING([for shared library (esp. rpath) characteristics of $1])
+
+# unfortunately, config.rpath expects the compiler in question is always CC and
+# uses several other environment variables as input
+PAC_PUSH_FLAG([CC])
+PAC_PUSH_FLAG([GCC])
+PAC_PUSH_FLAG([LD])
+# these two don't currently get overridden, but we push/pop them for safety in
+# case they do in the future
+PAC_PUSH_FLAG([LDFLAGS])
+PAC_PUSH_FLAG([with_gnu_ld])
+
+# set the temporary override values (if any)
+m4_case([$1],
+[CC],
+ [:], dnl do nothing special for CC, values are already correct
+[F77],
+ [CC="$$1"
+ GCC="$G77"
+ LD="$LD_F77"],
+[FC],
+ [CC="$$1"
+ GCC="$GCC_FC"
+ LD="$LD_FC"],
+[CXX],
+ [CC="$$1"
+ GCC="$GXX"
+ LD="$LD_CXX"],
+[m4_fatal([unknown compiler argument "$1"])])
+
+# ensure the values are available to the script
+export CC
+export GCC
+export LDFLAGS
+export LD
+export with_gnu_ld
+
+AS_IF([$ac_aux_dir/config.rpath "$host" > $2],[:],[AC_MSG_ERROR([unable to execute $ac_aux_dir/config.rpath])])
+
+C_LINKPATH_SHL=""
+AC_SUBST([C_LINKPATH_SHL])
+
+rm -f conftest.out
+
+# restore the old values
+PAC_POP_FLAG([with_gnu_ld])
+PAC_POP_FLAG([LD])
+PAC_POP_FLAG([LDFLAGS])
+PAC_POP_FLAG([GCC])
+PAC_POP_FLAG([CC])
+
+AC_MSG_RESULT([done (results in $2)])
+])
+
diff --git a/src/mpi/romio/mpl/confdb/aclocal_shm.m4 b/src/mpi/romio/mpl/confdb/aclocal_shm.m4
new file mode 100644
index 0000000..d2cbaad
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_shm.m4
@@ -0,0 +1,49 @@
+dnl
+dnl Definitions for using shared memory
+dnl
+
+dnl/*D
+dnl PAC_ARG_SHARED_MEMORY - add --with-shared-memory=kind to configure
+dnl
+dnl Synopsis:
+dnl PAC_ARG_SHARED_MEMORY
+dnl
+dnl Output effects:
+dnl Adds '--with-shared-memory' to the command line. Checks for available
+dnl shared memory functionality.
+dnl
+dnl Supported values of 'kind' include \:
+dnl+ auto - default
+dnl. mmap - use mmap and munmap
+dnl- sysv - use sysv shared memory functions
+dnl D*/
+AC_DEFUN([PAC_ARG_SHARED_MEMORY],[
+
+# check how to allocate shared memory
+AC_ARG_WITH(shared-memory,
+ AC_HELP_STRING([--with-shared-memory[=auto|sysv|mmap]], [create shared memory using sysv or mmap (default is auto)]),,
+ with_shared_memory=auto)
+
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
+ found_mmap_funcs=yes
+ AC_CHECK_FUNCS(mmap munmap, , found_mmap_funcs=no)
+ if test "$found_mmap_funcs" = yes ; then
+ with_shared_memory=mmap
+ AC_DEFINE(USE_MMAP_SHM,1,[Define if we have sysv shared memory])
+ AC_MSG_NOTICE([Using a memory-mapped file for shared memory])
+ elif test "$with_shared_memory" = mmap ; then
+ AC_MSG_ERROR([cannot support shared memory: mmap() or munmap() not found])
+ fi
+fi
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
+ found_sysv_shm_funcs=yes
+ AC_CHECK_FUNCS(shmget shmat shmctl shmdt, , found_sysv_shm_funcs=no)
+ if test "$found_sysv_shm_funcs" = yes ; then
+ with_shared_memory=sysv
+ AC_DEFINE(USE_SYSV_SHM,1,[Define if we have sysv shared memory])
+ AC_MSG_NOTICE([Using SYSV shared memory])
+ elif test "$with_shared_memory" = sysv ; then
+ AC_MSG_ERROR([cannot support shared memory: sysv shared memory functions functions not found])
+ fi
+fi
+])
diff --git a/src/mpi/romio/mpl/confdb/aclocal_subcfg.m4 b/src/mpi/romio/mpl/confdb/aclocal_subcfg.m4
new file mode 100644
index 0000000..53fb78e
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_subcfg.m4
@@ -0,0 +1,261 @@
+dnl PAC_RESET_ALL_FLAGS - Reset precious flags to those set by the user
+AC_DEFUN([PAC_RESET_ALL_FLAGS],[
+ if test "$FROM_MPICH" = "yes" ; then
+ CFLAGS="$USER_CFLAGS"
+ CPPFLAGS="$USER_CPPFLAGS"
+ CXXFLAGS="$USER_CXXFLAGS"
+ FFLAGS="$USER_FFLAGS"
+ FCFLAGS="$USER_FCFLAGS"
+ LDFLAGS="$USER_LDFLAGS"
+ LIBS="$USER_LIBS"
+ fi
+])
+
+dnl PAC_RESET_LINK_FLAGS - Reset precious link flags to those set by the user
+AC_DEFUN([PAC_RESET_LINK_FLAGS],[
+ if test "$FROM_MPICH" = "yes" ; then
+ LDFLAGS="$USER_LDFLAGS"
+ LIBS="$USER_LIBS"
+ fi
+])
+
+dnl Sandbox configure with additional arguments
+dnl Usage: PAC_CONFIG_SUBDIR_ARGS(subdir,configure-args,action-if-success,action-if-failure)
+dnl
+dnl The subconfigure argument list is created based on "ac_precious_vars"
+dnl instead of explicitly use of well-known Makefile variables, like
+dnl CC/CFLAGS/CPPFLAGS..., this generalization is effective as long as
+dnl calling configure.ac declares the needed variables to be passed down
+dnl to subconfigure as "precious" appropriately. The precious variable
+dnl can be created in the following ways:
+dnl 1) implicit declaration through use of autoconf macros, like
+dnl AC_PROG_CC (declares CC/CFLAGS/CPPFLAGS/LIBS/LDFLAGS), or
+dnl AC_PROG_F77 (declares F77/FFLAGS/FLIBS) ...
+dnl which are in turns invoked by other subconfigure.
+dnl When in doubt, check "ac_precious_var" in the calling configure.
+dnl 2) explicit "precious" declaration through AC_ARG_VAR.
+dnl Without correct "precious" declaration in the calling configure.ac,
+dnl there would be variables not being included in the subconfigure
+dnl argument list.
+dnl
+dnl Note: I suspect this DEFUN body is underquoted in places, but it does not
+dnl seem to cause problems in practice yet. [goodell@ 2010-05-18]
+AC_DEFUN([PAC_CONFIG_SUBDIR_ARGS],[
+ pac_dir="$1"
+ AC_MSG_NOTICE([===== configuring $1 =====])
+
+ pac_abs_srcdir=`(cd $srcdir && pwd)`
+
+ if test -f $pac_abs_srcdir/$1/setup ; then
+ AC_MSG_NOTICE([sourcing $pac_abs_srcdir/$1/setup])
+ . $pac_abs_srcdir/$1/setup
+ fi
+
+ # Adapted for MPICH from the autoconf-2.67 implementation of
+ # AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
+ # local modifications.
+
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up. Otherwise relative paths (like --srcdir=.. from
+ # make distcheck) will be incorrect.
+ pac_sub_configure_args="$2"
+ pac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for pac_arg
+ do
+ if test -n "$pac_prev"; then
+ pac_prev=
+ continue
+ fi
+ case $pac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ pac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ pac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ pac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ # MPICH note: this is a more robust version of the "precious
+ # variable" propagation code that was present in the previous
+ # incarnation of this macro
+ for pac_pvar in $ac_precious_vars ; do
+ # check if configure argument token contains the
+ # precious variable, i.e. "name_of_prec_var=".
+ if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
+ # check if current precious variable is set in env
+ eval pvar_set=\${$pac_pvar+set}
+ if test "$pvar_set" = "set" ; then
+ # Append 'name_of_prec_var=value_of_prec_var'
+ # to the subconfigure arguments list, where
+ # value_of_prec_var is fetched from the env.
+ # this also overrides any value set on the command line
+ eval pac_pval=\${$pac_pvar}
+ pac_arg="$pac_pvar=$pac_pval"
+ break
+ fi
+ fi
+ done
+ case $pac_arg in
+ *\'*) pac_arg=`AS_ECHO(["$pac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ AS_VAR_APPEND([pac_sub_configure_args], [" '$pac_arg'"]) ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ # MPICH note: see tt#983 for an example of why this is necessary
+ pac_arg="--prefix=$prefix"
+ case $pac_arg in
+ *\'*) pac_arg=`AS_ECHO(["$pac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
+
+ # Pass --silent
+ if test "$silent" = yes; then
+ pac_sub_configure_args="--silent $pac_sub_configure_args"
+ fi
+
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
+
+ pac_popdir=`pwd`
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$pac_dir" || continue
+
+ # MPICH note: modified to remove the internal "_AS_*" macro usage, also
+ # msg is already printed at top
+dnl _AS_ECHO_LOG([$pac_msg])
+dnl _AS_ECHO([$pac_msg])
+ AS_MKDIR_P(["$pac_dir"])
+ # MPICH note: we leave this internal macro reference for now. We can clone
+ # the macro locally if this turns out to be non-portable across several autoconf
+ # versions. It sets the following variables: ac_builddir,
+ # ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
+ # ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
+ _AC_SRCDIRS(["$pac_dir"])
+
+ cd "$pac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ pac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ pac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.ac"; then
+ # This should be Cygnus configure.
+ pac_sub_configure=$ac_aux_dir/configure
+ else
+ AC_MSG_WARN([no configuration information is in $pac_dir])
+ pac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$pac_sub_configure"; then
+ # MPICH note: overriding the cache file on purpose to prevent strange
+ # issues resulting from inter-dir caching
+dnl # Make the cache file name correct relative to the subdirectory.
+dnl case $cache_file in
+dnl [[\\/]]* | ?:[[\\/]]* ) pac_sub_cache_file=$cache_file ;;
+dnl *) # Relative name.
+dnl pac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+dnl esac
+ pac_sub_cache_file="/dev/null"
+
+ AC_MSG_NOTICE([running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir])
+ # The eval makes quoting arguments work.
+ # MPICH note: we want to execute the provided actions, not be silent
+ # or error out if the subconfigure succeeded/failed
+dnl eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
+dnl --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+dnl AC_MSG_ERROR([$pac_sub_configure failed for $pac_dir])
+ if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
+ --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
+ then
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+ $3
+ else
+ # restore the current dir for the provided actions
+ cd "$pac_popdir"
+ $4
+ fi
+ fi
+
+ cd "$pac_popdir"
+
+ AC_MSG_NOTICE([===== done with $1 configure =====])
+
+ # Check for any localdefs files. These may be created, so we
+ # look in the local directory first.
+ if test -f $1/localdefs ; then
+ AC_MSG_NOTICE([sourcing $1/localdefs])
+ . $1/localdefs
+ elif test -f $pac_abs_srcdir/$1/localdefs ; then
+ AC_MSG_NOTICE([sourcing $pac_abs_srcdir/$1/localdefs])
+ . $pac_abs_srcdir/$1/localdefs
+ fi
+])
+
+dnl Sandbox configure
+dnl Usage: PAC_CONFIG_SUBDIR(subdir,action-if-success,action-if-failure)
+AC_DEFUN([PAC_CONFIG_SUBDIR],[PAC_CONFIG_SUBDIR_ARGS([$1],[],[$2],[$3])])
+
+dnl PAC_SUBCFG_EXPAND_SUFFIX_MACRO(MACRO_PREFIX,MACRO_PATH_SUFFIX)
+dnl converts the path given by MACRO_PATH_SUFFIX (with '/' chars in it) to one
+dnl with '_' chars in it and then appends that to MACRO_PREFIX with '_' in
+dnl between. The resulting macro name is then expanded, but with informative
+dnl "##" comments before and after the expansion.
+dnl
+dnl This is intended to be an internal helper macro for the PAC_SUBCFG
+dnl implementation.
+dnl
+dnl XXX DJG FIXME: need to be able to deal with PREREQ macros that potentially
+dnl aren't present while having safety for BODY macros when there are
+dnl misspellings
+AC_DEFUN([PAC_SUBCFG_EXPAND_PATH_SUFFIX_MACRO],[
+dnl convert path separators into '_', the m4_translit is intentionally unquoted
+m4_pushdef([subsys_uscore_name],[$1_]m4_translit([$2],[\/],[__]))dnl
+m4_ifdef(m4_defn([subsys_uscore_name]),[],[m4_fatal([macro ]m4_defn([subsys_uscore_name])[ is undefined])])dnl
+[##] begin expansion of m4_defn([subsys_uscore_name])
+dnl call the computed routine name with the remaining args
+m4_indir(m4_defn([subsys_uscore_name]),m4_shift($@))
+dnl there is intentionally no "dnl" on the previous line to reduce the chance of
+dnl a "fi## end expansion" bug when the BODY macro doesn't end in a newline
+[##] end expansion of m4_defn([subsys_uscore_name])
+])
+
+dnl invokes the PAC_SUBCFG_BODY_foo macro for the "foo" subsys, when "foo" is
+dnl passed as the only argument to this macro. The first arg may be the '/'
+dnl path version instead of having underscores.
+AC_DEFUN([PAC_SUBCFG_CONFIGURE_SUBSYS],[PAC_SUBCFG_EXPAND_PATH_SUFFIX_MACRO([PAC_SUBCFG_BODY],[$1])])
+
+dnl invokes the PAC_SUBCFG_PREREQ_foo macro for the "foo" subsys, when "foo" is
+dnl passed as the only argument to this macro. The first arg may be the '/'
+dnl path version instead of having underscores.
+AC_DEFUN([PAC_SUBCFG_DO_PREREQ],[PAC_SUBCFG_EXPAND_PATH_SUFFIX_MACRO([PAC_SUBCFG_PREREQ],[$1])])
+
+dnl takes no arguments, expands to "foo_bar_baz" when invoked in a file named
+dnl "foo/bar/baz/subconfigure.m4"
+dnl
+dnl This is useful for reducing copy-paste errors when defining PREREQ and BODY
+dnl macros. If you tinker with this macro, watch the quoting carefully.
+AC_DEFUN([PAC_SUBCFG_AUTO_SUFFIX],[m4_translit(m4_bpatsubst(m4_dquote(__file__),[/[^/]+.m4],[]),[/],[_])])
+
diff --git a/src/mpi/romio/mpl/confdb/aclocal_util.m4 b/src/mpi/romio/mpl/confdb/aclocal_util.m4
new file mode 100644
index 0000000..2648be5
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/aclocal_util.m4
@@ -0,0 +1,216 @@
+dnl Nesting safe macros for saving variables
+dnl Usage: PAC_PUSH_FLAG(CFLAGS)
+AC_DEFUN([PAC_PUSH_FLAG],[
+ if test -z "${pac_save_$1_nesting}" ; then
+ pac_save_$1_nesting=0
+ fi
+ eval pac_save_$1_${pac_save_$1_nesting}='"$$1"'
+ pac_save_$1_nesting=`expr ${pac_save_$1_nesting} + 1`
+])
+
+dnl Usage: PAC_POP_FLAG(CFLAGS)
+AC_DEFUN([PAC_POP_FLAG],[
+ pac_save_$1_nesting=`expr ${pac_save_$1_nesting} - 1`
+ eval $1="\$pac_save_$1_${pac_save_$1_nesting}"
+ eval pac_save_$1_${pac_save_$1_nesting}=""
+])
+
+dnl Usage: PAC_PUSH_ALL_FLAGS
+AC_DEFUN([PAC_PUSH_ALL_FLAGS],[
+ PAC_PUSH_FLAG(CFLAGS)
+ PAC_PUSH_FLAG(CPPFLAGS)
+ PAC_PUSH_FLAG(CXXFLAGS)
+ PAC_PUSH_FLAG(FFLAGS)
+ PAC_PUSH_FLAG(FCFLAGS)
+ PAC_PUSH_FLAG(LDFLAGS)
+ PAC_PUSH_FLAG(LIBS)
+])
+
+dnl Usage: PAC_POP_ALL_FLAGS
+AC_DEFUN([PAC_POP_ALL_FLAGS],[
+ PAC_POP_FLAG(CFLAGS)
+ PAC_POP_FLAG(CPPFLAGS)
+ PAC_POP_FLAG(CXXFLAGS)
+ PAC_POP_FLAG(FFLAGS)
+ PAC_POP_FLAG(FCFLAGS)
+ PAC_POP_FLAG(LDFLAGS)
+ PAC_POP_FLAG(LIBS)
+])
+
+dnl PAC_PREFIX_FLAG - Save flag with a prefix
+dnl Usage: PAC_PREFIX_FLAG(PREFIX, FLAG)
+AC_DEFUN([PAC_PREFIX_FLAG],[
+ $1_$2=$$2
+ export $1_$2
+ AC_SUBST($1_$2)
+])
+
+dnl PAC_PREFIX_ALL_FLAGS - Save flags with a prefix
+dnl Usage: PAC_PREFIX_ALL_FLAGS(PREFIX)
+AC_DEFUN([PAC_PREFIX_ALL_FLAGS],[
+ PAC_PREFIX_FLAG($1, CFLAGS)
+ PAC_PREFIX_FLAG($1, CPPFLAGS)
+ PAC_PREFIX_FLAG($1, CXXFLAGS)
+ PAC_PREFIX_FLAG($1, FFLAGS)
+ PAC_PREFIX_FLAG($1, FCFLAGS)
+ PAC_PREFIX_FLAG($1, LDFLAGS)
+ PAC_PREFIX_FLAG($1, LIBS)
+ PAC_PREFIX_FLAG($1, EXTRA_LIBS)
+])
+
+dnl Usage: PAC_APPEND_FLAG([-02], [CFLAGS])
+dnl appends the given argument to the specified shell variable unless the
+dnl argument is already present in the variable
+AC_DEFUN([PAC_APPEND_FLAG],[
+ AC_REQUIRE([AC_PROG_FGREP])
+ AS_IF(
+ [echo "$$2" | $FGREP -e "\<$1\>" >/dev/null 2>&1],
+ [echo "$2(='$$2') contains '$1', not appending" >&AS_MESSAGE_LOG_FD],
+ [echo "$2(='$$2') does not contain '$1', appending" >&AS_MESSAGE_LOG_FD
+ $2="$$2 $1"]
+ )
+])
+
+dnl Usage: PAC_PREPEND_FLAG([-lpthread], [LIBS])
+dnl Prepends the given argument to the specified shell variable unless the
+dnl argument is already present in the variable.
+dnl
+dnl This is typically used for LIBS and similar variables because libraries
+dnl should be added in reverse order.
+AC_DEFUN([PAC_PREPEND_FLAG],[
+ AC_REQUIRE([AC_PROG_FGREP])
+ AS_IF(
+ [echo "$$2" | $FGREP -e "\<$1\>" >/dev/null 2>&1],
+ [echo "$2(='$$2') contains '$1', not prepending" >&AS_MESSAGE_LOG_FD],
+ [echo "$2(='$$2') does not contain '$1', prepending" >&AS_MESSAGE_LOG_FD
+ $2="$1 $$2"]
+ )
+])
+
+
+dnl PAC_MKDIRS(path)
+dnl Create any missing directories in the path
+AC_DEFUN([PAC_MKDIRS],[
+# Build any intermediate directories
+for dir in $1 ; do
+ PAC_PUSH_FLAG([IFS])
+ IFS="/"
+ tmp_curdir=""
+ for tmp_subdir in $dir ; do
+ tmp_curdir="${tmp_curdir}$tmp_subdir"
+ if test ! -d "$tmp_curdir" ; then mkdir "$tmp_curdir" ; fi
+ tmp_curdir="${tmp_curdir}/"
+ done
+ PAC_POP_FLAG([IFS])
+done
+])
+
+# Find something to use for mkdir -p. Eventually, this will have a
+# script for backup. As of autoconf-2.63, AC_PROG_MKDIR_P was broken;
+# it was checking to see if it recognized the "version" of mkdir and
+# was deciding based on that. This should always be a feature test.
+AC_DEFUN([PAC_PROG_MKDIR_P],[
+AC_CACHE_CHECK([whether mkdir -p works],
+pac_cv_mkdir_p,[
+pac_cv_mkdir_p=no
+rm -rf .tmp
+if mkdir -p .tmp/.foo 1>/dev/null 2>&1 ; then
+ if test -d .tmp/.foo ; then
+ pac_cv_mkdir_p=yes
+ fi
+fi
+rm -rf .tmp
+])
+if test "$pac_cv_mkdir_p" = "yes" ; then
+ MKDIR_P="mkdir -p"
+ export MKDIR_P
+else
+ AC_MSG_WARN([mkdir -p does not work; the install step may fail])
+fi
+AC_SUBST(MKDIR_P)
+])
+
+dnl Test for a clean VPATH directory. Provide this command with the names
+dnl of all of the generated files that might cause problems
+dnl (Makefiles won't cause problems because there's no VPATH usage for them)
+dnl
+dnl Synopsis
+dnl PAC_VPATH_CHECK([file-names],[directory-names])
+dnl file-names should be files other than config.status and any header (e.g.,
+dnl fooconf.h) file that should be removed. It is optional
+AC_DEFUN([PAC_VPATH_CHECK],[
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+date >conftest$$
+# If creating a file in the current directory does not show up in the srcdir
+# then we're doing a VPATH build (or something is very wrong)
+if test ! -s $srcdir/conftest$$ ; then
+ pac_dirtyfiles=""
+ pac_dirtydirs=""
+ pac_header=""
+ ifdef([AC_LIST_HEADER],[pac_header=AC_LIST_HEADER])
+ for file in config.status $pac_header $1 ; do
+ if test -f $srcdir/$file ; then
+ pac_dirtyfiles="$pac_dirtyfiles $file"
+ fi
+ done
+ ifelse($2,,,[
+ for dir in $2 ; do
+ if test -d $srcdir/$dir ; then
+ pac_dirtydirs="$pac_dirtydirs $dir"
+ fi
+ done
+ ])
+
+ if test -n "$pac_dirtyfiles" -o -n "$pac_dirtydirs" ; then
+ # Create a nice message about what to remove
+ rmmsg=""
+ if test -n "$pac_dirtyfiles" ; then
+ rmmsg="files $pac_dirtyfiles"
+ fi
+ if test -n "$pac_dirtydirs" ; then
+ if test -n "$rmmsg" ; then
+ rmmsg="$rmmsg and directories $pac_dirtydirs"
+ else
+ rmmsg="directories $pac_dirtydirs"
+ fi
+ fi
+ if test -f $srcdir/Makefile ; then
+ AC_MSG_ERROR([You cannot do a VPATH build if the source directory has been
+ configured. Run "make distclean" in $srcdir first and make sure that the
+ $rmmsg have been removed.])
+ else
+ AC_MSG_ERROR([You cannot do a VPATH build if the source directory has been
+ configured. Remove the $rmmsg in $srcdir.])
+ fi
+ fi
+fi
+# This is needed for Mac OSX 10.5
+rm -rf conftest.dSYM
+rm -f conftest*
+])
+
+dnl PAC_CONF_HEX_TO_DEC(value,out_var)
+dnl
+dnl Converts the given hexadecimal integer constant to an integer constant and
+dnl stores the result in the shell variable given by 'out_var'.
+dnl
+dnl I think that printf like this will be sufficiently portable, but I don't
+dnl have any guarantee of it. If not, we can fall back to AS_VAR_ARITH
+dnl and/or AC_COMPUTE_INT (the latter will probably be slow)
+AC_DEFUN([PAC_CONV_HEX_TO_DEC],[AS_VAR_SET([$2],[`printf "%d" $1`])])
+
+dnl PAC_GET_EXENAME(exe_name, out_exe_name)
+dnl
+dnl Prepends and appends program prefix and suffix as supplied by --program_prefix
+dnl and --program-sufix
+AC_DEFUN([PAC_GET_EXENAME],[
+$2=$1
+if test "$program_prefix" != "NONE" ; then
+ $2="${program_prefix}$$2"
+fi
+if test "$program_suffix" != "NONE" ; then
+ $2="$$2$program_suffix"
+fi
+])
diff --git a/src/mpi/romio/mpl/confdb/ar-lib b/src/mpi/romio/mpl/confdb/ar-lib
new file mode 100755
index 0000000..463b9ec
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/ar-lib
@@ -0,0 +1,270 @@
+#! /bin/sh
+# Wrapper for Microsoft lib.exe
+
+me=ar-lib
+scriptversion=2012-03-01.08; # UTC
+
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+# Written by Peter Rosin <peda at lysator.liu.se>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+
+# func_error message
+func_error ()
+{
+ echo "$me: $1" 1>&2
+ exit 1
+}
+
+file_conv=
+
+# func_file_conv build_file
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv in
+ mingw)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_at_file at_file operation archive
+# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE
+# for each of them.
+# When interpreting the content of the @FILE, do NOT use func_file_conv,
+# since the user would need to supply preconverted file names to
+# binutils ar, at least for MinGW.
+func_at_file ()
+{
+ operation=$2
+ archive=$3
+ at_file_contents=`cat "$1"`
+ eval set x "$at_file_contents"
+ shift
+
+ for member
+ do
+ $AR -NOLOGO $operation:"$member" "$archive" || exit $?
+ done
+}
+
+case $1 in
+ '')
+ func_error "no command. Try '$0 --help' for more information."
+ ;;
+ -h | --h*)
+ cat <<EOF
+Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...]
+
+Members may be specified in a file named with @FILE.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "$me, version $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test $# -lt 3; then
+ func_error "you must specify a program, an action and an archive"
+fi
+
+AR=$1
+shift
+while :
+do
+ if test $# -lt 2; then
+ func_error "you must specify a program, an action and an archive"
+ fi
+ case $1 in
+ -lib | -LIB \
+ | -ltcg | -LTCG \
+ | -machine* | -MACHINE* \
+ | -subsystem* | -SUBSYSTEM* \
+ | -verbose | -VERBOSE \
+ | -wx* | -WX* )
+ AR="$AR $1"
+ shift
+ ;;
+ *)
+ action=$1
+ shift
+ break
+ ;;
+ esac
+done
+orig_archive=$1
+shift
+func_file_conv "$orig_archive"
+archive=$file
+
+# strip leading dash in $action
+action=${action#-}
+
+delete=
+extract=
+list=
+quick=
+replace=
+index=
+create=
+
+while test -n "$action"
+do
+ case $action in
+ d*) delete=yes ;;
+ x*) extract=yes ;;
+ t*) list=yes ;;
+ q*) quick=yes ;;
+ r*) replace=yes ;;
+ s*) index=yes ;;
+ S*) ;; # the index is always updated implicitly
+ c*) create=yes ;;
+ u*) ;; # TODO: don't ignore the update modifier
+ v*) ;; # TODO: don't ignore the verbose modifier
+ *)
+ func_error "unknown action specified"
+ ;;
+ esac
+ action=${action#?}
+done
+
+case $delete$extract$list$quick$replace,$index in
+ yes,* | ,yes)
+ ;;
+ yesyes*)
+ func_error "more than one action specified"
+ ;;
+ *)
+ func_error "no action specified"
+ ;;
+esac
+
+if test -n "$delete"; then
+ if test ! -f "$orig_archive"; then
+ func_error "archive not found"
+ fi
+ for member
+ do
+ case $1 in
+ @*)
+ func_at_file "${1#@}" -REMOVE "$archive"
+ ;;
+ *)
+ func_file_conv "$1"
+ $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $?
+ ;;
+ esac
+ done
+
+elif test -n "$extract"; then
+ if test ! -f "$orig_archive"; then
+ func_error "archive not found"
+ fi
+ if test $# -gt 0; then
+ for member
+ do
+ case $1 in
+ @*)
+ func_at_file "${1#@}" -EXTRACT "$archive"
+ ;;
+ *)
+ func_file_conv "$1"
+ $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $?
+ ;;
+ esac
+ done
+ else
+ $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member
+ do
+ $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
+ done
+ fi
+
+elif test -n "$quick$replace"; then
+ if test ! -f "$orig_archive"; then
+ if test -z "$create"; then
+ echo "$me: creating $orig_archive"
+ fi
+ orig_archive=
+ else
+ orig_archive=$archive
+ fi
+
+ for member
+ do
+ case $1 in
+ @*)
+ func_file_conv "${1#@}"
+ set x "$@" "@$file"
+ ;;
+ *)
+ func_file_conv "$1"
+ set x "$@" "$file"
+ ;;
+ esac
+ shift
+ shift
+ done
+
+ if test -n "$orig_archive"; then
+ $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $?
+ else
+ $AR -NOLOGO -OUT:"$archive" "$@" || exit $?
+ fi
+
+elif test -n "$list"; then
+ if test ! -f "$orig_archive"; then
+ func_error "archive not found"
+ fi
+ $AR -NOLOGO -LIST "$archive" || exit $?
+fi
diff --git a/src/mpi/romio/mpl/confdb/ax_prefix_config_h.m4 b/src/mpi/romio/mpl/confdb/ax_prefix_config_h.m4
new file mode 100644
index 0000000..83f8df6
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/ax_prefix_config_h.m4
@@ -0,0 +1,219 @@
+# ===========================================================================
+# http://autoconf-archive.cryp.to/ax_prefix_config_h.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PREFIX_CONFIG_H [(OUTPUT-HEADER [,PREFIX [,ORIG-HEADER]])]
+#
+# DESCRIPTION
+#
+# This is a new variant from ac_prefix_config_ this one will use a
+# lowercase-prefix if the config-define was starting with a
+# lowercase-char, e.g. "#define const", "#define restrict", or "#define
+# off_t", (and this one can live in another directory, e.g.
+# testpkg/config.h therefore I decided to move the output-header to be the
+# first arg)
+#
+# takes the usual config.h generated header file; looks for each of the
+# generated "#define SOMEDEF" lines, and prefixes the defined name (ie.
+# makes it "#define PREFIX_SOMEDEF". The result is written to the output
+# config.header file. The PREFIX is converted to uppercase for the
+# conversions.
+#
+# Defaults:
+#
+# OUTPUT-HEADER = $PACKAGE-config.h
+# PREFIX = $PACKAGE
+# ORIG-HEADER, from AM_CONFIG_HEADER(config.h)
+#
+# Your configure.ac script should contain both macros in this order, and
+# unlike the earlier variations of this prefix-macro it is okay to place
+# the AX_PREFIX_CONFIG_H call before the AC_OUTPUT invokation.
+#
+# Example:
+#
+# AC_INIT(config.h.in) # config.h.in as created by "autoheader"
+# AM_INIT_AUTOMAKE(testpkg, 0.1.1) # makes #undef VERSION and PACKAGE
+# AM_CONFIG_HEADER(config.h) # prep config.h from config.h.in
+# AX_PREFIX_CONFIG_H(mylib/_config.h) # prep mylib/_config.h from it..
+# AC_MEMORY_H # makes "#undef NEED_MEMORY_H"
+# AC_C_CONST_H # makes "#undef const"
+# AC_OUTPUT(Makefile) # creates the "config.h" now
+# # and also mylib/_config.h
+#
+# if the argument to AX_PREFIX_CONFIG_H would have been omitted then the
+# default outputfile would have been called simply "testpkg-config.h", but
+# even under the name "mylib/_config.h" it contains prefix-defines like
+#
+# #ifndef TESTPKG_VERSION
+# #define TESTPKG_VERSION "0.1.1"
+# #endif
+# #ifndef TESTPKG_NEED_MEMORY_H
+# #define TESTPKG_NEED_MEMORY_H 1
+# #endif
+# #ifndef _testpkg_const
+# #define _testpkg_const _const
+# #endif
+#
+# and this "mylib/_config.h" can be installed along with other
+# header-files, which is most convenient when creating a shared library
+# (that has some headers) where some functionality is dependent on the
+# OS-features detected at compile-time. No need to invent some
+# "mylib-confdefs.h.in" manually. :-)
+#
+# Note that some AC_DEFINEs that end up in the config.h file are actually
+# self-referential - e.g. AC_C_INLINE, AC_C_CONST, and the AC_TYPE_OFF_T
+# say that they "will define inline|const|off_t if the system does not do
+# it by itself". You might want to clean up about these - consider an
+# extra mylib/conf.h that reads something like:
+#
+# #include <mylib/_config.h>
+# #ifndef _testpkg_const
+# #define _testpkg_const const
+# #endif
+#
+# and then start using _testpkg_const in the header files. That is also a
+# good thing to differentiate whether some library-user has starting to
+# take up with a different compiler, so perhaps it could read something
+# like this:
+#
+# #ifdef _MSC_VER
+# #include <mylib/_msvc.h>
+# #else
+# #include <mylib/_config.h>
+# #endif
+# #ifndef _testpkg_const
+# #define _testpkg_const const
+# #endif
+#
+# LAST MODIFICATION
+#
+# 2008-04-12
+#
+# COPYLEFT
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod at gmx.de>
+# Copyright (c) 2008 Marten Svantesson
+# Copyright (c) 2008 Gerald Point <Gerald.Point at labri.fr>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Macro Archive. When you make and
+# distribute a modified version of the Autoconf Macro, you may extend this
+# special exception to the GPL to apply to your modified version as well.
+
+AC_DEFUN([AX_PREFIX_CONFIG_H],[dnl
+AC_BEFORE([AC_CONFIG_HEADERS],[$0])dnl
+AC_CONFIG_COMMANDS([ifelse($1,,$PACKAGE-config.h,$1)],[dnl
+AS_VAR_PUSHDEF([_OUT],[ac_prefix_conf_OUT])dnl
+AS_VAR_PUSHDEF([_DEF],[ac_prefix_conf_DEF])dnl
+AS_VAR_PUSHDEF([_PKG],[ac_prefix_conf_PKG])dnl
+AS_VAR_PUSHDEF([_LOW],[ac_prefix_conf_LOW])dnl
+AS_VAR_PUSHDEF([_UPP],[ac_prefix_conf_UPP])dnl
+AS_VAR_PUSHDEF([_INP],[ac_prefix_conf_INP])dnl
+m4_pushdef([_script],[conftest.prefix])dnl
+m4_pushdef([_symbol],[m4_cr_Letters[]m4_cr_digits[]_])dnl
+_OUT=`echo ifelse($1, , $PACKAGE-config.h, $1)`
+_DEF=`echo _$_OUT | sed -e "y:m4_cr_letters:m4_cr_LETTERS[]:" -e "s/@<:@^m4_cr_Letters@:>@/_/g"`
+_PKG=`echo ifelse($2, , $PACKAGE, $2)`
+_LOW=`echo _$_PKG | sed -e "y:m4_cr_LETTERS-:m4_cr_letters[]_:"`
+_UPP=`echo $_PKG | sed -e "y:m4_cr_letters-:m4_cr_LETTERS[]_:" -e "/^@<:@m4_cr_digits@:>@/s/^/_/"`
+_INP=`echo "ifelse($3,,,$3)" | sed -e 's/ *//'`
+if test ".$_INP" = "."; then
+ for ac_file in : $CONFIG_HEADERS; do test "_$ac_file" = _: && continue
+ case "$ac_file" in
+ *.h) _INP=$ac_file ;;
+ *)
+ esac
+ test ".$_INP" != "." && break
+ done
+fi
+if test ".$_INP" = "."; then
+ case "$_OUT" in
+ */*) _INP=`basename "$_OUT"`
+ ;;
+ *-*) _INP=`echo "$_OUT" | sed -e "s/@<:@_symbol@:>@*-//"`
+ ;;
+ *) _INP=config.h
+ ;;
+ esac
+fi
+if test -z "$_PKG" ; then
+ AC_MSG_ERROR([no prefix for _PREFIX_PKG_CONFIG_H])
+else
+ if test ! -f "$_INP" ; then if test -f "$srcdir/$_INP" ; then
+ _INP="$srcdir/$_INP"
+ fi fi
+ AC_MSG_NOTICE(creating $_OUT - prefix $_UPP for $_INP defines)
+ if test -f $_INP ; then
+ echo "s/^@%:@undef *\\(@<:@m4_cr_LETTERS[]_@:>@\\)/@%:@undef $_UPP""_\\1/" > _script
+ echo "s/^@%:@undef *\\(@<:@m4_cr_letters@:>@\\)/@%:@undef $_LOW""_\\1/" >> _script
+ echo "s/^@%:@def[]ine *\\(@<:@m4_cr_LETTERS[]_@:>@@<:@_symbol@:>@*\\)\\(.*\\)/@%:@ifndef $_UPP""_\\1 \\" >> _script
+ echo "@%:@def[]ine $_UPP""_\\1 \\2 \\" >> _script
+ echo "@%:@endif/" >>_script
+ echo "s/^@%:@def[]ine *\\(@<:@m4_cr_letters@:>@@<:@_symbol@:>@*\\)\\(.*\\)/@%:@ifndef $_LOW""_\\1 \\" >> _script
+ echo "@%:@define $_LOW""_\\1 \\2 \\" >> _script
+ echo "@%:@endif/" >> _script
+ # now executing _script on _DEF input to create _OUT output file
+ echo "@%:@ifndef $_DEF" >$tmp/pconfig.h
+ echo "@%:@def[]ine $_DEF 1" >>$tmp/pconfig.h
+ echo ' ' >>$tmp/pconfig.h
+ echo /'*' $_OUT. Generated automatically at end of configure. '*'/ >>$tmp/pconfig.h
+
+ sed -f _script $_INP >>$tmp/pconfig.h
+ echo ' ' >>$tmp/pconfig.h
+ echo '/* once:' $_DEF '*/' >>$tmp/pconfig.h
+ echo "@%:@endif" >>$tmp/pconfig.h
+ if cmp -s $_OUT $tmp/pconfig.h 2>/dev/null; then
+ AC_MSG_NOTICE([$_OUT is unchanged])
+ else
+ ac_dir=`AS_DIRNAME(["$_OUT"])`
+ AS_MKDIR_P(["$ac_dir"])
+ rm -f "$_OUT"
+ mv $tmp/pconfig.h "$_OUT"
+ fi
+ cp _script _configs.sed
+ else
+ AC_MSG_ERROR([input file $_INP does not exist - skip generating $_OUT])
+ fi
+ rm -f conftest.*
+fi
+m4_popdef([_symbol])dnl
+m4_popdef([_script])dnl
+AS_VAR_POPDEF([_INP])dnl
+AS_VAR_POPDEF([_UPP])dnl
+AS_VAR_POPDEF([_LOW])dnl
+AS_VAR_POPDEF([_PKG])dnl
+AS_VAR_POPDEF([_DEF])dnl
+AS_VAR_POPDEF([_OUT])dnl
+],[PACKAGE="$PACKAGE"])])
+
+dnl implementation note: a bug report (31.5.2005) from Marten Svantesson points
+dnl out a problem where `echo "\1"` results in a Control-A. The unix standard
+dnl http://www.opengroup.org/onlinepubs/000095399/utilities/echo.html
+dnl defines all backslash-sequences to be inherently non-portable asking
+dnl for replacement mit printf. Some old systems had problems with that
+dnl one either. However, the latest libtool (!) release does export an $ECHO
+dnl (and $echo) that does the right thing - just one question is left: what
+dnl was the first version to have it? Is it greater 2.58 ?
diff --git a/src/mpi/romio/mpl/confdb/ax_tls.m4 b/src/mpi/romio/mpl/confdb/ax_tls.m4
new file mode 100644
index 0000000..60657fa
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/ax_tls.m4
@@ -0,0 +1,91 @@
+# ===========================================================================
+# http://www.nongnu.org/autoconf-archive/ax_tls.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_TLS
+#
+# DESCRIPTION
+#
+# Provides a test for the compiler support of thread local storage (TLS)
+# extensions. Defines TLS if it is found. Currently only knows about GCC
+# and MSVC. I think SunPro uses the same as GCC, and Borland apparently
+# supports either.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Alan Woodland <ajw05 at aber.ac.uk>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+AC_DEFUN([AX_TLS], [
+ AC_MSG_CHECKING(for thread local storage specifier)
+ AC_CACHE_VAL(ac_cv_tls, [
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
+ for ax_tls_keyword in $ax_tls_keywords; do
+ case $ax_tls_keyword in
+ none) ac_cv_tls=none ; break ;;
+ *)
+ # MPICH modification: This was an AC_TRY_COMPILE before, but
+ # Darwin with non-standard compilers will accept __thread at
+ # compile time but fail to link due to an undefined
+ # "__emutls_get_address" symbol unless -lgcc_eh is added to the
+ # link line.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([$ax_tls_keyword int bar = 5;],[++bar;])],
+ [ac_cv_tls=$ax_tls_keyword],
+ [ac_cv_tls=none])
+
+ # MPICH modification: Also test with the extern keyword.
+ # The intel compiler on Darwin (at least as of 15.0.1)
+ # seems to break with the above error when the extern
+ # keyword is specified in shared library builds.
+ PAC_PUSH_FLAG([LIBS])
+ PAC_APPEND_FLAG([-shared],[LIBS])
+ if test "$ac_cv_tls" != "none" ; then
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+ ],[++bar;])],
+ [ac_cv_tls=$ax_tls_keyword],
+ [ac_cv_tls=none])
+ fi
+ PAC_POP_FLAG([LIBS])
+
+ if test "$ac_cv_tls" != "none" ; then break ; fi
+ esac
+ done
+])
+
+ if test "$ac_cv_tls" != "none"; then
+ AC_DEFINE_UNQUOTED([TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+ fi
+ AC_MSG_RESULT($ac_cv_tls)
+])
diff --git a/src/mpi/romio/mpl/confdb/compile b/src/mpi/romio/mpl/confdb/compile
new file mode 100755
index 0000000..a85b723
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/compile
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/mpi/romio/mpl/confdb/config.guess b/src/mpi/romio/mpl/confdb/config.guess
new file mode 100755
index 0000000..1659250
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/config.guess
@@ -0,0 +1,1441 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2015 Free Software Foundation, Inc.
+
+timestamp='2015-08-20'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches to <config-patches at gnu.org>.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2015 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}${abi}"
+ exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/lslpp ] ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ *:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel at ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes at openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf at swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green at stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green at stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+esac
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/src/mpi/romio/mpl/confdb/config.rpath b/src/mpi/romio/mpl/confdb/config.rpath
new file mode 100755
index 0000000..039c11e
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/config.rpath
@@ -0,0 +1,706 @@
+#! /bin/sh
+#
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2011 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ nagfor*)
+ wl='-Wl,-Wl,,'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ xl* | bgxl* | bgf* | mpixl* | *bgq-linux-xl* )
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-4]]*)
+ wl=
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ wl='-Wl,'
+ ;;
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ newsos6)
+ ;;
+ *nto* | *qnx*)
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ wl='-Qoption ld '
+ ;;
+ *)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ haiku*)
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ # use --enable-new-dtags for RUNPATH support, which is required for
+ # switching between ABI compatible libraries at runtime.
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec="${hardcode_libdir_flag_spec} ${wl}--enable-new-dtags"
+ else
+ case $cc_basename in ifort*)
+ hardcode_libdir_flag_spec="${hardcode_libdir_flag_spec} ${wl}--enable-new-dtags"
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ *nto* | *qnx*)
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc*)
+ library_names_spec='$libname$shrext' ;;
+ m68k)
+ library_names_spec='$libname.a' ;;
+ esac
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ haiku*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ *nto* | *qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ tpf*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+# MPICH modification: we don't prefix with acl_cv_ by default. This
+# is causing problems in the stock version of config.rpath as well.
+# LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/src/mpi/romio/mpl/confdb/config.sub b/src/mpi/romio/mpl/confdb/config.sub
new file mode 100755
index 0000000..1acc966
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/config.sub
@@ -0,0 +1,1813 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2015 Free Software Foundation, Inc.
+
+timestamp='2015-08-20'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches at gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2015 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | ba \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 | or1k | or1knd | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | riscv32 | riscv64 \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | ba-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | e2k-* | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | or1k*-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | riscv32-* | riscv64-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | visium-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/src/mpi/romio/mpl/confdb/depcomp b/src/mpi/romio/mpl/confdb/depcomp
new file mode 100755
index 0000000..fc98710
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2013-05-30.07; # UTC
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/mpi/romio/mpl/confdb/install-sh b/src/mpi/romio/mpl/confdb/install-sh
new file mode 100755
index 0000000..59990a1
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/install-sh
@@ -0,0 +1,508 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2014-09-12.12; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/mpi/romio/mpl/confdb/libtool.m4 b/src/mpi/romio/mpl/confdb/libtool.m4
new file mode 100644
index 0000000..10ab284
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/libtool.m4
@@ -0,0 +1,8388 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+])
+
+# serial 58 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in @S|@*""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
+m4_defun([_LT_CC_BASENAME],
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from 'configure', and 'config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain=$ac_aux_dir/ltmain.sh
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the 'libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags='_LT_TAGS'dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# '#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS=$save_LDFLAGS
+ ])
+
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]][[,.]]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ m4_if([$1], [CXX],
+[ if test yes != "$lt_cv_apple_cc_single_mod"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case $ECHO in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+ [Search for dependent libraries within DIR (or the compiler's sysroot
+ if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([$with_sysroot])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ emul=elf
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `/usr/bin/file conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes = "$cross_compiling"; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen=shl_load],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen=dlopen],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test no = "$hard_links"; then
+ AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+ [Define to the sub-directory where libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+ test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+ test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP"; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x at S|@2 in
+ x)
+ ;;
+ *:)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+ ;;
+ x:*)
+ eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+ ;;
+ *)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a[(]lib.so.V[)]'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+ [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+ [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program that can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$1"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program that can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test no = "$withval" || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+ [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+ test DEF = "`$SED -n dnl
+ -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace
+ -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments
+ -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl
+ -e q dnl Only consider the first "real" line
+ $1`" dnl
+])# _LT_DLL_DEF_P
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM=-lm)
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t at _DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t at _DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+ [Transform the output of nm into a list of symbols to manually relocate])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+ [The name lister interface])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64, which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 3 [...]
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS=$save_LDFLAGS])
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting $shlibpath_var if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC=$CC
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report what library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC=$lt_save_CC
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test no != "$CXX" &&
+ ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+ (test g++ != "$CXX"))); then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test yes = "$GXX"; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test yes = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='$wl'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GXX"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag=$shared_flag' $wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ # The "-G" linker flag allows undefined symbols.
+ _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared
+ # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# [...]
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl*)
+ # Native MSVC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require '-G' NOT '-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)=$GXX
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case @S|@2 in
+ .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+ *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $prev$p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test x-L = "$p" ||
+ test x-R = "$p"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test no = "$pre_test_object_deps_done"; then
+ case $prev in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)=$prev$p
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test no = "$pre_test_object_deps_done"; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)=$p
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)=$p
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test no = "$F77"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_F77"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$G77
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test no = "$FC"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_FC"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_FC"
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=$lt_simple_compile_test_code
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f "$lt_ac_sed" && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test 10 -lt "$lt_ac_count" && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test "$lt_ac_count" -gt "$lt_ac_max"; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine what file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/src/mpi/romio/mpl/confdb/ltmain.sh b/src/mpi/romio/mpl/confdb/ltmain.sh
new file mode 100644
index 0000000..147d758
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/ltmain.sh
@@ -0,0 +1,11156 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+## by inline-source v2014-01-03.01
+
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION="2.4.6 Debian-2.4.6-0.1"
+package_revision=2.4.6
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary at gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
+fi
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test set = \"\${$_G_var+set}\"; then
+ save_$_G_var=\$$_G_var
+ $_G_var=C
+ export $_G_var
+ _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+ _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+ fi"
+done
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+ _G_progs_list=$1
+ _G_check_func=$2
+ _G_PATH=${3-"$PATH"}
+
+ _G_path_prog_max=0
+ _G_path_prog_found=false
+ _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+ for _G_dir in $_G_PATH; do
+ IFS=$_G_save_IFS
+ test -z "$_G_dir" && _G_dir=.
+ for _G_prog_name in $_G_progs_list; do
+ for _exeext in '' .EXE; do
+ _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+ func_executable_p "$_G_path_prog" || continue
+ case `"$_G_path_prog" --version 2>&1` in
+ *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+ *) $_G_check_func $_G_path_prog
+ func_path_progs_result=$func_check_prog_result
+ ;;
+ esac
+ $_G_path_prog_found && break 3
+ done
+ done
+ done
+ IFS=$_G_save_IFS
+ test -z "$func_path_progs_result" && {
+ echo "no acceptable sed could be found in \$PATH" >&2
+ exit 1
+ }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+ _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for _G_i in 1 2 3 4 5 6 7; do
+ _G_sed_script=$_G_sed_script$nl$_G_sed_script
+ done
+ echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+ _G_sed_script=
+
+ func_check_prog_sed ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo '' >> conftest.nl
+ "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+ rm -f conftest.sed
+ SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+ func_check_prog_grep ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ _G_path_prog_max=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo 'GREP' >> conftest.nl
+ "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+ GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables. These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes. A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same. If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion. Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+ s/$_G_bs4/&\\
+/g
+ s/^$_G_bs2$_G_dollar/$_G_bs&/
+ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+ s/\n//g"
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+# exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+ progdir=`cd "$progdir" && pwd`
+ progpath=$progdir/$progname
+ ;;
+ *)
+ _G_IFS=$IFS
+ IFS=${PATH_SEPARATOR-:}
+ for progdir in $PATH; do
+ IFS=$_G_IFS
+ test -x "$progdir/$progname" && break
+ done
+ IFS=$_G_IFS
+ test -n "$progdir" || progdir=`pwd`
+ progpath=$progdir/$progname
+ ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available. Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'. Set
+# 'warning_func' to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+ $debug_cmd
+
+ test -t 1 && {
+ # COLORTERM and USE_ANSI_COLORS environment variables take
+ # precedence, because most terminfo databases neglect to describe
+ # whether color sequences are supported.
+ test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+ if test 1 = "$USE_ANSI_COLORS"; then
+ # Standard ANSI escape sequences
+ tc_reset='[0m'
+ tc_bold='[1m'; tc_standout='[7m'
+ tc_red='[31m'; tc_green='[32m'
+ tc_blue='[34m'; tc_cyan='[36m'
+ else
+ # Otherwise trust the terminfo database after all.
+ test -n "`tput sgr0 2>/dev/null`" && {
+ tc_reset=`tput sgr0`
+ test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+ tc_standout=$tc_bold
+ test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+ test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+ test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+ test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+ test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+ }
+ fi
+ }
+
+ require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+ # We should try to minimise forks, especially on Windows where they are
+ # unreasonably slow, so skip the feature probes when bash or zsh are
+ # being used:
+ if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+ : ${_G_HAVE_ARITH_OP="yes"}
+ : ${_G_HAVE_XSI_OPS="yes"}
+ # The += operator was introduced in bash 3.1
+ case $BASH_VERSION in
+ [12].* | 3.0 | 3.0*) ;;
+ *)
+ : ${_G_HAVE_PLUSEQ_OP="yes"}
+ ;;
+ esac
+ fi
+
+ # _G_HAVE_PLUSEQ_OP
+ # Can be empty, in which case the shell is probed, "yes" if += is
+ # useable or anything else if it does not work.
+ test -z "$_G_HAVE_PLUSEQ_OP" \
+ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+ && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_append ()
+ {
+ $debug_cmd
+
+ eval "$1+=\$2"
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_append ()
+ {
+ $debug_cmd
+
+ eval "$1=\$$1\$2"
+ }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+ eval 'func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_for_eval "$2"
+ eval "$1+=\\ \$func_quote_for_eval_result"
+ }'
+else
+ func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_for_eval "$2"
+ eval "$1=\$$1\\ \$func_quote_for_eval_result"
+ }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE. For example:
+#
+# func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+ $debug_cmd
+
+ eval _G_current_value='`$ECHO $'$1'`'
+ _G_delim=`expr "$2" : '\(.\)'`
+
+ case $_G_delim$_G_current_value$_G_delim in
+ *"$2$_G_delim"*) ;;
+ *) func_append "$@" ;;
+ esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+ test -z "$_G_HAVE_ARITH_OP" \
+ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+ && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+ eval 'func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=$(( $* ))
+ }'
+else
+ func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=`expr "$@"`
+ }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ # If this shell supports suffix pattern removal, then use it to avoid
+ # forking. Hide the definitions single quotes in case the shell chokes
+ # on unsupported syntax...
+ _b='func_basename_result=${1##*/}'
+ _d='case $1 in
+ */*) func_dirname_result=${1%/*}$2 ;;
+ * ) func_dirname_result=$3 ;;
+ esac'
+
+else
+ # ...otherwise fall back to using sed.
+ _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+ _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
+ if test "X$func_dirname_result" = "X$1"; then
+ func_dirname_result=$3
+ else
+ func_append func_dirname_result "$2"
+ fi'
+fi
+
+eval 'func_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+ $debug_cmd
+
+ '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+ '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ _G_infix=$1; shift
+ _G_indent=$_G_infix
+ _G_prefix="$progname: $_G_infix: "
+ _G_message=$*
+
+ # Strip color escape sequences before counting printable length
+ for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+ do
+ test -n "$_G_tc" && {
+ _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+ _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+ }
+ done
+ _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
+
+ func_echo_infix_1_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_infix_1_IFS
+ $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+ _G_prefix=$_G_indent
+ done
+ IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ $debug_cmd
+
+ func_error "$*"
+ exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $debug_cmd
+
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+ test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=${#1}
+ }'
+else
+ func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+ }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ $debug_cmd
+
+ _G_directory_path=$1
+ _G_dir_list=
+
+ if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+ # Protect directory names starting with '-'
+ case $_G_directory_path in
+ -*) _G_directory_path=./$_G_directory_path ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$_G_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ _G_dir_list=$_G_directory_path:$_G_dir_list
+
+ # If the last portion added has no slash in it, the list is done
+ case $_G_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+ done
+ _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+ func_mkdir_p_IFS=$IFS; IFS=:
+ for _G_dir in $_G_dir_list; do
+ IFS=$func_mkdir_p_IFS
+ # mkdir can fail with a 'File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$_G_dir" 2>/dev/null || :
+ done
+ IFS=$func_mkdir_p_IFS
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$_G_directory_path" || \
+ func_fatal_error "Failed to create '$1'"
+ fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+ $debug_cmd
+
+ _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+ if test : = "$opt_dry_run"; then
+ # Return a directory name, but don't create it in dry-run mode
+ _G_tmpdir=$_G_template-$$
+ else
+
+ # If mktemp works, use that first and foremost
+ _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$_G_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+ func_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$_G_tmpdir"
+ umask $func_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$_G_tmpdir" || \
+ func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+ fi
+
+ $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+ $debug_cmd
+
+ # These SED scripts presuppose an absolute path with a trailing slash.
+ _G_pathcar='s|^/\([^/]*\).*$|\1|'
+ _G_pathcdr='s|^/[^/]*||'
+ _G_removedotparts=':dotsl
+ s|/\./|/|g
+ t dotsl
+ s|/\.$|/|'
+ _G_collapseslashes='s|/\{1,\}|/|g'
+ _G_finalslash='s|/*$|/|'
+
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test / = "$func_normal_abspath_tpath"; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result"; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+ $debug_cmd
+
+ $opt_quiet || func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+ $debug_cmd
+
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=$func_dirname_result
+ if test -z "$func_relative_path_tlibdir"; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test -n "$func_stripname_result"; then
+ func_append func_relative_path_result "/$func_stripname_result"
+ fi
+
+ # Normalisation. If bindir is libdir, return '.' else relative path.
+ if test -n "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ fi
+
+ test -n "$func_relative_path_result" || func_relative_path_result=.
+
+ :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+# i) func_quote_for_eval_result
+# double-quoted, suitable for a subsequent eval
+# ii) func_quote_for_eval_unquoted_result
+# has all characters that are still active within double
+# quotes backslashified.
+func_quote_for_eval ()
+{
+ $debug_cmd
+
+ func_quote_for_eval_unquoted_result=
+ func_quote_for_eval_result=
+ while test 0 -lt $#; do
+ case $1 in
+ *[\\\`\"\$]*)
+ _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+ *)
+ _G_unquoted_arg=$1 ;;
+ esac
+ if test -n "$func_quote_for_eval_unquoted_result"; then
+ func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+ else
+ func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+ fi
+
+ case $_G_unquoted_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and variable expansion
+ # for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ _G_quoted_arg=\"$_G_unquoted_arg\"
+ ;;
+ *)
+ _G_quoted_arg=$_G_unquoted_arg
+ ;;
+ esac
+
+ if test -n "$func_quote_for_eval_result"; then
+ func_append func_quote_for_eval_result " $_G_quoted_arg"
+ else
+ func_append func_quote_for_eval_result "$_G_quoted_arg"
+ fi
+ shift
+ done
+}
+
+
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ $debug_cmd
+
+ case $1 in
+ *[\\\`\"]*)
+ _G_arg=`$ECHO "$1" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ _G_arg=$1 ;;
+ esac
+
+ case $_G_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ _G_arg=\"$_G_arg\"
+ ;;
+ esac
+
+ func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_stripname ()
+ {
+ $debug_cmd
+
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary variable first.
+ func_stripname_result=$3
+ func_stripname_result=${func_stripname_result#"$1"}
+ func_stripname_result=${func_stripname_result%"$2"}
+ }'
+else
+ func_stripname ()
+ {
+ $debug_cmd
+
+ case $2 in
+ .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+ *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+ esac
+ }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ func_quote_for_expand "$_G_cmd"
+ eval "func_notquiet $func_quote_for_expand_result"
+
+ $opt_dry_run || {
+ eval "$_G_cmd"
+ _G_status=$?
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ $opt_quiet || {
+ func_quote_for_expand "$_G_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ $opt_dry_run || {
+ eval "$_G_user_locale
+ $_G_cmd"
+ _G_status=$?
+ eval "$_G_safe_locale"
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result. All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+ $debug_cmd
+
+ case $1 in
+ [0-9]* | *[!a-zA-Z0-9_]*)
+ func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+ ;;
+ * )
+ func_tr_sh_result=$1
+ ;;
+ esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $debug_cmd
+
+ $opt_verbose && func_echo "$*"
+
+ :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+ $debug_cmd
+
+ # CATEGORY must be in the warning_categories list!
+ case " $warning_categories " in
+ *" $1 "*) ;;
+ *) func_internal_error "invalid warning category '$1'" ;;
+ esac
+
+ _G_category=$1
+ shift
+
+ case " $opt_warning_types " in
+ *" $_G_category "*) $warning_func ${1+"$@"} ;;
+ esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+ $debug_cmd
+
+ printf '%s\n%s\n' "$1" "$2" \
+ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false. Use it like this:
+#
+# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+ $debug_cmd
+
+ test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2014-01-07.03; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary at gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+# #!/bin/sh
+# . relative/path/to/funclib.sh
+# . relative/path/to/options-parser
+# scriptversion=1.0
+# func_options ${1+"$@"}
+# eval set dummy "$func_options_result"; shift
+# ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'. Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+ --debug enable verbose shell tracing
+ -W, --warnings=CATEGORY
+ report the warnings falling in CATEGORY [all]
+ -v, --verbose verbosely report processing
+ --version print version information and exit
+ -h, --help print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+ 'all' show all warnings
+ 'none' turn off all the warnings
+ 'error' warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code. A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+ $debug_cmd
+
+ func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not accept hook functions." ;;
+ esac
+
+ eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+ $debug_cmd
+
+ eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+ esac
+
+ eval _G_hook_fns=\$$1_hooks; shift
+
+ for _G_hook in $_G_hook_fns; do
+ eval $_G_hook '"$@"'
+
+ # store returned options list back into positional
+ # parameters for next 'cmd' execution.
+ eval _G_hook_result=\$${_G_hook}_result
+ eval set dummy "$_G_hook_result"; shift
+ done
+
+ func_quote_for_eval ${1+"$@"}
+ func_run_hooks_result=$func_quote_for_eval_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'. Like this:
+#
+# my_options_prep ()
+# {
+# $debug_cmd
+#
+# # Extend the existing usage message.
+# usage_message=$usage_message'
+# -s, --silent don'\''t print informational messages
+# '
+#
+# func_quote_for_eval ${1+"$@"}
+# my_options_prep_result=$func_quote_for_eval_result
+# }
+# func_add_hook func_options_prep my_options_prep
+#
+#
+# my_silent_option ()
+# {
+# $debug_cmd
+#
+# # Note that for efficiency, we parse as many options as we can
+# # recognise in a loop before passing the remainder back to the
+# # caller on the first unrecognised argument we encounter.
+# while test $# -gt 0; do
+# opt=$1; shift
+# case $opt in
+# --silent|-s) opt_silent=: ;;
+# # Separate non-argument short options:
+# -s*) func_split_short_opt "$_G_opt"
+# set dummy "$func_split_short_opt_name" \
+# "-$func_split_short_opt_arg" ${1+"$@"}
+# shift
+# ;;
+# *) set dummy "$_G_opt" "$*"; shift; break ;;
+# esac
+# done
+#
+# func_quote_for_eval ${1+"$@"}
+# my_silent_option_result=$func_quote_for_eval_result
+# }
+# func_add_hook func_parse_options my_silent_option
+#
+#
+# my_option_validation ()
+# {
+# $debug_cmd
+#
+# $opt_silent && $opt_verbose && func_fatal_help "\
+# '--silent' and '--verbose' options are mutually exclusive."
+#
+# func_quote_for_eval ${1+"$@"}
+# my_option_validation_result=$func_quote_for_eval_result
+# }
+# func_add_hook func_validate_options my_option_validation
+#
+# You'll alse need to manually amend $usage_message to reflect the extra
+# options you parse. It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+ $debug_cmd
+
+ func_options_prep ${1+"$@"}
+ eval func_parse_options \
+ ${func_options_prep_result+"$func_options_prep_result"}
+ eval func_validate_options \
+ ${func_parse_options_result+"$func_parse_options_result"}
+
+ eval func_run_hooks func_options \
+ ${func_validate_options_result+"$func_validate_options_result"}
+
+ # save modified positional parameters for caller
+ func_options_result=$func_run_hooks_result
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters. If a hook function modifies that list, and
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
+func_hookable func_options_prep
+func_options_prep ()
+{
+ $debug_cmd
+
+ # Option defaults:
+ opt_verbose=false
+ opt_warning_types=
+
+ func_run_hooks func_options_prep ${1+"$@"}
+
+ # save modified positional parameters for caller
+ func_options_prep_result=$func_run_hooks_result
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+ $debug_cmd
+
+ func_parse_options_result=
+
+ # this just eases exit handling
+ while test $# -gt 0; do
+ # Defer to hook functions for initial option parsing, so they
+ # get priority in the event of reusing an option name.
+ func_run_hooks func_parse_options ${1+"$@"}
+
+ # Adjust func_parse_options positional parameters to match
+ eval set dummy "$func_run_hooks_result"; shift
+
+ # Break out of the loop if we already parsed every option.
+ test $# -gt 0 || break
+
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --debug|-x) debug_cmd='set -x'
+ func_echo "enabling shell trace mode"
+ $debug_cmd
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ set dummy --warnings none ${1+"$@"}
+ shift
+ ;;
+
+ --warnings|--warning|-W)
+ test $# = 0 && func_missing_arg $_G_opt && break
+ case " $warning_categories $1" in
+ *" $1 "*)
+ # trailing space prevents matching last $1 above
+ func_append_uniq opt_warning_types " $1"
+ ;;
+ *all)
+ opt_warning_types=$warning_categories
+ ;;
+ *none)
+ opt_warning_types=none
+ warning_func=:
+ ;;
+ *error)
+ opt_warning_types=$warning_categories
+ warning_func=func_fatal_error
+ ;;
+ *)
+ func_fatal_error \
+ "unsupported warning category: '$1'"
+ ;;
+ esac
+ shift
+ ;;
+
+ --verbose|-v) opt_verbose=: ;;
+ --version) func_version ;;
+ -\?|-h) func_usage ;;
+ --help) func_help ;;
+
+ # Separate optargs to long options (plugins may need this):
+ --*=*) func_split_equals "$_G_opt"
+ set dummy "$func_split_equals_lhs" \
+ "$func_split_equals_rhs" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate optargs to short options:
+ -W*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate non-argument short options:
+ -\?*|-h*|-v*|-x*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "-$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ --) break ;;
+ -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
+ *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+ esac
+ done
+
+ # save modified positional parameters for caller
+ func_quote_for_eval ${1+"$@"}
+ func_parse_options_result=$func_quote_for_eval_result
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+ $debug_cmd
+
+ # Display all warnings if -W was not given.
+ test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+ func_run_hooks func_validate_options ${1+"$@"}
+
+ # Bail if the options were screwed!
+ $exit_cmd $EXIT_FAILURE
+
+ # save modified positional parameters for caller
+ func_validate_options_result=$func_run_hooks_result
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ eval \$ECHO \""$fatal_help"\"
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message"
+ exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ $debug_cmd
+
+ func_error "Missing argument for '$1'."
+ exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=${1%%=*}
+ func_split_equals_rhs=${1#*=}
+ test "x$func_split_equals_lhs" = "x$1" \
+ && func_split_equals_rhs=
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+ func_split_equals_rhs=
+ test "x$func_split_equals_lhs" = "x$1" \
+ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+ }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+ func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+ }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+ exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ echo
+ $SED -n 's|^# ||
+ /^Written by/{
+ x;p;x
+ }
+ h
+ /^Written by/q' < "$progpath"
+ echo
+ eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $debug_cmd
+
+ printf '%s\n' "$progname $scriptversion"
+ $SED -n '
+ /(C)/!b go
+ :more
+ /\./!{
+ N
+ s|\n# | |
+ b more
+ }
+ :go
+ /^# Written by /,/# warranty; / {
+ s|^# ||
+ s|^# *$||
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ p
+ }
+ /^# Written by / {
+ s|^# ||
+ p
+ }
+ /^warranty; /q' < "$progpath"
+
+ exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+ $debug_cmd
+
+ $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+ -n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --mode=MODE use operation mode MODE
+ --no-warnings equivalent to '-Wnone'
+ --preserve-dup-deps don't remove duplicate dependency libraries
+ --quiet, --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ -v, --verbose print more informational messages than default
+ --version print version information
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
+ -h, --help, --help-all print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+ host-triplet: $host
+ shell: $SHELL
+ compiler: $LTCC
+ compiler flags: $LTCFLAGS
+ linker: $LD (gnu? $with_gnu_ld)
+ version: $progname (GNU libtool) 2.4.6
+ automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+ autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool at gnu.org>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+ exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_lo2o ()
+ {
+ case $1 in
+ *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+ * ) func_lo2o_result=$1 ;;
+ esac
+ }'
+
+ # func_xform LIBOBJ-OR-SOURCE
+ # ---------------------------
+ # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+ # suffix to a '.lo' libtool-object suffix.
+ eval 'func_xform ()
+ {
+ func_xform_result=${1%.*}.lo
+ }'
+else
+ # ...otherwise fall back to using sed.
+ func_lo2o ()
+ {
+ func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+ }
+
+ func_xform ()
+ {
+ func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+ }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func__fatal_error ${1+"$@"} \
+ "See the $PACKAGE documentation for more information." \
+ "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+ echo "host: $host"
+ if test yes = "$build_libtool_libs"; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test yes = "$build_old_libs"; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+
+ exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname=$1
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+ $debug_mode
+
+ # Option defaults:
+ opt_config=false
+ opt_dlopen=
+ opt_dry_run=false
+ opt_help=false
+ opt_mode=
+ opt_preserve_dup_deps=false
+ opt_quiet=false
+
+ nonopt=
+ preserve_args=
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ esac
+
+ # Pass back the list of options.
+ func_quote_for_eval ${1+"$@"}
+ libtool_options_prep_result=$func_quote_for_eval_result
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+ $debug_cmd
+
+ # Perform our own loop to consume as many options as possible in
+ # each iteration.
+ while test $# -gt 0; do
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
+ ;;
+
+ --config) func_config ;;
+
+ --dlopen|-dlopen)
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_preserve_dup_deps=: ;;
+
+ --features) func_features ;;
+
+ --finish) set dummy --mode finish ${1+"$@"}; shift ;;
+
+ --help) opt_help=: ;;
+
+ --help-all) opt_help=': help-all' ;;
+
+ --mode) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_mode=$1
+ case $1 in
+ # Valid mode arguments:
+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $_G_opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+ shift
+ ;;
+
+ --no-silent|--no-quiet)
+ opt_quiet=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ opt_warning=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-verbose)
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --silent|--quiet)
+ opt_quiet=:
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --tag) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_tag=$1
+ func_append preserve_args " $_G_opt $1"
+ func_enable_tag "$1"
+ shift
+ ;;
+
+ --verbose|-v) opt_quiet=false
+ opt_verbose=:
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ # An option not handled by this hook function:
+ *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+ esac
+ done
+
+
+ # save modified positional parameters for caller
+ func_quote_for_eval ${1+"$@"}
+ libtool_parse_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+ # save first non-option argument
+ if test 0 -lt $#; then
+ nonopt=$1
+ shift
+ fi
+
+ # preserve --debug
+ test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+ case $host in
+ # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+ # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+ *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+ ;;
+ esac
+
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ test yes != "$build_libtool_libs" \
+ && test yes != "$build_old_libs" \
+ && func_fatal_configuration "not configured to build any kind of library"
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+ func_error "unrecognized option '-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help=$help
+ help="Try '$progname --help --mode=$opt_mode' for more information."
+ }
+
+ # Pass back the unparsed argument list
+ func_quote_for_eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+ $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case $lalib_p_line in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ test -f "$1" &&
+ $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $debug_cmd
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $debug_cmd
+
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot. Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+ func_resolve_sysroot_result=$1
+ case $func_resolve_sysroot_result in
+ =*)
+ func_stripname '=' '' "$func_resolve_sysroot_result"
+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+ ;;
+ esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+ case $lt_sysroot:$1 in
+ ?*:"$lt_sysroot"*)
+ func_stripname "$lt_sysroot" '' "$1"
+ func_replace_sysroot_result='='$func_stripname_result
+ ;;
+ *)
+ # Including no sysroot.
+ func_replace_sysroot_result=$1
+ ;;
+ esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $debug_cmd
+
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case "$@ " in
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with '--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=$1
+ if test yes = "$build_libtool_libs"; then
+ write_lobj=\'$2\'
+ else
+ write_lobj=none
+ fi
+
+ if test yes = "$build_old_libs"; then
+ write_oldobj=\'$3\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "$write_libobj"
+ }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $debug_cmd
+
+ func_convert_core_file_wine_to_w32_result=$1
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+ $SED -e "$sed_naive_backslashify"`
+ else
+ func_convert_core_file_wine_to_w32_result=
+ fi
+ fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+ $debug_cmd
+
+ # unfortunately, winepath doesn't convert paths, only file names
+ func_convert_core_path_wine_to_w32_result=
+ if test -n "$1"; then
+ oldIFS=$IFS
+ IFS=:
+ for func_convert_core_path_wine_to_w32_f in $1; do
+ IFS=$oldIFS
+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+ if test -n "$func_convert_core_file_wine_to_w32_result"; then
+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
+ func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+ else
+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+ fi
+ fi
+ done
+ IFS=$oldIFS
+ fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+ $debug_cmd
+
+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+ if test "$?" -ne 0; then
+ # on failure, ensure result is empty
+ func_cygpath_result=
+ fi
+ else
+ func_cygpath_result=
+ func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+ fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format. Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+ $debug_cmd
+
+ # awkward: cmd appends spaces to result
+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+ $debug_cmd
+
+ if test -z "$2" && test -n "$1"; then
+ func_error "Could not determine host file name corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_file_result=$1
+ fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+ $debug_cmd
+
+ if test -z "$4" && test -n "$3"; then
+ func_error "Could not determine the host path corresponding to"
+ func_error " '$3'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This is a deliberately simplistic "conversion" and
+ # should not be "improved". See libtool.info.
+ if test "x$1" != "x$2"; then
+ lt_replace_pathsep_chars="s|$1|$2|g"
+ func_to_host_path_result=`echo "$3" |
+ $SED -e "$lt_replace_pathsep_chars"`
+ else
+ func_to_host_path_result=$3
+ fi
+ fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+ $debug_cmd
+
+ case $4 in
+ $1 ) func_to_host_path_result=$3$func_to_host_path_result
+ ;;
+ esac
+ case $4 in
+ $2 ) func_append func_to_host_path_result "$3"
+ ;;
+ esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+ $debug_cmd
+
+ $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result. If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+ $debug_cmd
+
+ case ,$2, in
+ *,"$to_tool_file_cmd",*)
+ func_to_tool_file_result=$1
+ ;;
+ *)
+ $to_tool_file_cmd "$1"
+ func_to_tool_file_result=$func_to_host_file_result
+ ;;
+ esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+ func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_msys_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+ # LT_CYGPATH in this case.
+ func_to_host_file_result=`cygpath -m "$1"`
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format. Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_file_wine_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+ func_convert_core_file_wine_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format. If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+# file name conversion function : func_convert_file_X_to_Y ()
+# path conversion function : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same. If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+ $debug_cmd
+
+ if test -z "$to_host_path_cmd"; then
+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+ to_host_path_cmd=func_convert_path_$func_stripname_result
+ fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+ $debug_cmd
+
+ func_init_to_host_path_cmd
+ $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+ func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from ARG. MSYS
+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+ # and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_msys_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format. Requires a wine environment and
+# a working winepath. Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+ $debug_cmd
+
+ func_dll_def_p_tmp=`$SED -n \
+ -e 's/^[ ]*//' \
+ -e '/^\(;.*\)*$/d' \
+ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
+ -e q \
+ "$1"`
+ test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $debug_cmd
+
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile=$nonopt # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg=$arg
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj=$arg
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify '-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ func_append later " $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs=$IFS; IFS=,
+ for arg in $args; do
+ IFS=$save_ifs
+ func_append_quoted lastarg "$arg"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ func_append base_compile " $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg=$srcfile
+ srcfile=$arg
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_append_quoted base_compile "$lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with '-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj=$func_basename_result
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from '$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test yes = "$build_libtool_libs" \
+ || func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name '$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname=$func_basename_result
+ xdir=$func_dirname_result
+ lobj=$xdir$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test yes = "$build_old_libs"; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test no = "$compiler_c_o"; then
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+ lockfile=$output_obj.lock
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test yes = "$need_locks"; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test warn = "$need_locks"; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+ srcfile=$func_to_tool_file_result
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test yes = "$build_libtool_libs"; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test no != "$pic_mode"; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ func_append command " -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test yes = "$suppress_opt"; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test yes = "$build_old_libs"; then
+ if test yes != "$pic_mode"; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test yes = "$compiler_c_o"; then
+ func_append command " -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test no != "$need_locks"; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a '.o' file suitable for static linking
+ -static only build a '.o' file suitable for static linking
+ -Wc,FLAG pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the '--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE use a list of object files found in FILE to specify objects
+ -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename. Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode '$opt_mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test : = "$opt_help"; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ $SED '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $debug_cmd
+
+ # The first argument is the command name.
+ cmd=$nonopt
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "'$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "'$file' was not linked with '-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+
+ if test -f "$dir/$objdir/$dlname"; then
+ func_append dir "/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ ;;
+
+ *)
+ func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir=$absdir
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic=$magic
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_append_quoted args "$file"
+ done
+
+ if $opt_dry_run; then
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ echo "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ else
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd=\$cmd$args
+ fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $debug_cmd
+
+ libs=
+ libdirs=
+ admincmds=
+
+ for opt in "$nonopt" ${1+"$@"}
+ do
+ if test -d "$opt"; then
+ func_append libdirs " $opt"
+
+ elif test -f "$opt"; then
+ if func_lalib_unsafe_p "$opt"; then
+ func_append libs " $opt"
+ else
+ func_warning "'$opt' is not a valid libtool archive"
+ fi
+
+ else
+ func_fatal_error "invalid argument '$opt'"
+ fi
+ done
+
+ if test -n "$libs"; then
+ if test -n "$lt_sysroot"; then
+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+ else
+ sysroot_cmd=
+ fi
+
+ # Remove sysroot references
+ if $opt_dry_run; then
+ for lib in $libs; do
+ echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+ done
+ else
+ tmpdir=`func_mktempdir`
+ for lib in $libs; do
+ $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+ > $tmpdir/tmp-la
+ mv -f $tmpdir/tmp-la $lib
+ done
+ ${RM}r "$tmpdir"
+ fi
+ fi
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_quiet && exit $EXIT_SUCCESS
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the '$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the '$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the '$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ fi
+ exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $debug_cmd
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+ # Allow the use of GNU shtool's install command.
+ case $nonopt in *shtool*) :;; *) false;; esac
+ then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ func_append install_prog "$func_quote_for_eval_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=false
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=: ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test X-m = "X$prev" && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ func_append install_prog " $func_quote_for_eval_result"
+ if test -n "$arg2"; then
+ func_quote_for_eval "$arg2"
+ fi
+ func_append install_shared_prog " $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_for_eval "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_for_eval_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=:
+ if $isdir; then
+ destdir=$dest
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir=$func_dirname_result
+ destname=$func_basename_result
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "'$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "'$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ func_append staticlibs " $file"
+ ;;
+
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir=$func_dirname_result
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking '$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname=$1
+ shift
+
+ srcname=$realname
+ test -n "$relink_command" && srcname=${realname}T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme=$stripme
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ os2*)
+ case $realname in
+ *_dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try 'ln -sf' first, because the 'ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib=$destdir/$realname
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name=$func_basename_result
+ instname=$dir/${name}i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest=$destfile
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to '$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test yes = "$build_old_libs"; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=.exe
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+ finalize=:
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "'$lib' has not been installed in '$libdir'"
+ finalize=false
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test no = "$fast_install" && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if $finalize; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file=$func_basename_result
+ outputname=$tmpdir/$file
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_quiet || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink '$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file=$outputname
+ else
+ func_warning "cannot relink '$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name=$func_basename_result
+
+ # Set up the ranlib parameters.
+ oldlib=$destdir/$name
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run '$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $debug_cmd
+
+ my_outputname=$1
+ my_originator=$2
+ my_pic_p=${3-false}
+ my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms=${my_outputname}S.c
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist=$output_objdir/$my_outputname.nm
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test yes = "$dlself"; then
+ func_verbose "generating symbol list for '$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+ func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols=$output_objdir/$outputname.exp
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from '$dlprefile'"
+ func_basename "$dlprefile"
+ name=$func_basename_result
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ # if an import library, we need to obtain dlname
+ if func_win32_import_lib_p "$dlprefile"; then
+ func_tr_sh "$dlprefile"
+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ dlprefile_dlbasename=
+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+ # Use subshell, to avoid clobbering current variable values
+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+ if test -n "$dlprefile_dlname"; then
+ func_basename "$dlprefile_dlname"
+ dlprefile_dlbasename=$func_basename_result
+ else
+ # no lafile. user explicitly requested -dlpreopen <import library>.
+ $sharedlib_from_linklib_cmd "$dlprefile"
+ dlprefile_dlbasename=$sharedlib_from_linklib_result
+ fi
+ fi
+ $opt_dry_run || {
+ if test -n "$dlprefile_dlbasename"; then
+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+ else
+ func_warning "Could not compute DLL name from $name"
+ eval '$ECHO ": $name " >> "$nlist"'
+ fi
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+ }
+ else # not an import lib
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ fi
+ ;;
+ *)
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ ;;
+ esac
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ func_show_eval '$RM "${nlist}I"'
+ if test -n "$global_symbol_to_import"; then
+ eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+ LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+ for (; symbol->name; ++symbol)
+ {"
+ $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+ echo >> "$output_objdir/$my_dlsyms" "\
+ }
+}"
+ fi
+ echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {\"@INIT@\", (void *) <_syminit},"
+ fi
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj=$output_objdir/${my_outputname}S.$objext
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for '$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+ test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+ test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $debug_cmd
+
+ win32_libid_type=unknown
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+ case $nm_interface in
+ "MS dumpbin")
+ if func_cygming_ms_implib_p "$1" ||
+ func_cygming_gnu_implib_p "$1"
+ then
+ win32_nmres=import
+ else
+ win32_nmres=
+ fi
+ ;;
+ *)
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s|.*|import|
+ p
+ q
+ }
+ }'`
+ ;;
+ esac
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+ $debug_cmd
+
+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+ $debug_cmd
+
+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+ $SED '/^Contents of section '"$match_literal"':/{
+ # Place marker at beginning of archive member dllname section
+ s/.*/====MARK====/
+ p
+ d
+ }
+ # These lines can sometimes be longer than 43 characters, but
+ # are always uninteresting
+ /:[ ]*file format pe[i]\{,1\}-/d
+ /^In archive [^:]*:/d
+ # Ensure marker is printed
+ /^====MARK====/p
+ # Remove all lines with less than 43 characters
+ /^.\{43\}/!d
+ # From remaining lines, remove first 43 characters
+ s/^.\{43\}//' |
+ $SED -n '
+ # Join marker and all lines until next marker into a single line
+ /^====MARK====/ b para
+ H
+ $ b para
+ b
+ :para
+ x
+ s/\n//g
+ # Remove the marker
+ s/^====MARK====//
+ # Remove trailing dots and whitespace
+ s/[\. \t]*$//
+ # Print
+ /./p' |
+ # we now have a list, one entry per line, of the stringified
+ # contents of the appropriate section of all members of the
+ # archive that possess that section. Heuristic: eliminate
+ # all those that have a first or second character that is
+ # a '.' (that is, objdump's representation of an unprintable
+ # character.) This should work for all archives with less than
+ # 0x302f exports -- but will fail for DLLs whose name actually
+ # begins with a literal '.' or a single character followed by
+ # a '.'.
+ #
+ # Of those that remain, print the first one.
+ $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+ $debug_cmd
+
+ if func_cygming_gnu_implib_p "$1"; then
+ # binutils import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+ elif func_cygming_ms_implib_p "$1"; then
+ # ms-generated import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+ else
+ # unknown
+ sharedlib_from_linklib_result=
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $debug_cmd
+
+ f_ex_an_ar_dir=$1; shift
+ f_ex_an_ar_oldlib=$1
+ if test yes = "$lock_old_archive_extraction"; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test yes = "$lock_old_archive_extraction"; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $debug_cmd
+
+ my_gentop=$1; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=
+ my_xlib=
+ my_xabs=
+ my_xdir=
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib=$func_basename_result
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir=$my_gentop/$my_xlib_u
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ func_basename "$darwin_archive"
+ darwin_base_archive=$func_basename_result
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches; do
+ func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+ $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+ cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+ func_extract_an_archive "`pwd`" "$darwin_base_archive"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ file=\"\$0\""
+
+ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=\"$qECHO\"
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test yes = "$fast_install"; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ \$ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # fixup the dll searchpath if we need to.
+ #
+ # Fix the DLL searchpath if we need to. Do this before prepending
+ # to shlibpath, because on Windows, both are PATH and uninstalled
+ # libraries must come first.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ # Export our shlibpath_var if we have one.
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+ defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test yes = "$fast_install"; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ int rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, (size_t) argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (STREQ (argv[i], dumpscript_opt))
+ {
+EOF
+ case $host in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (STREQ (argv[i], debug_opt))
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (STREQ (argv[i], ltwrapper_option_prefix))
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ size_t tmp_len;
+ char *concat_name;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = (size_t) (q - p);
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (STREQ (str, pat))
+ *str = '\0';
+ }
+ return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ size_t len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ size_t orig_value_len = strlen (orig_value);
+ size_t add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ size_t len = strlen (new_value);
+ while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[--len] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $debug_cmd
+
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+ $debug_cmd
+
+ case " $compile_command " in
+ *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+ suncc_use_cstd_abi=no
+ ;;
+ *)
+ suncc_use_cstd_abi=yes
+ ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $debug_cmd
+
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # what system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll that has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ bindir=
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ os2dllname=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=false
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module=$wl-single_module
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test yes != "$build_libtool_libs" \
+ && func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg=$1
+ shift
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ bindir)
+ bindir=$arg
+ prev=
+ continue
+ ;;
+ dlfiles|dlprefiles)
+ $preload || {
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=:
+ }
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test no = "$dlself"; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test dlprefiles = "$prev"; then
+ dlself=yes
+ elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test dlfiles = "$prev"; then
+ func_append dlfiles " $arg"
+ else
+ func_append dlprefiles " $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols=$arg
+ test -f "$arg" \
+ || func_fatal_error "symbol file '$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex=$arg
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir=$arg
+ prev=
+ continue
+ ;;
+ mllvm)
+ # Clang does not use LLVM to link, so we can simply discard any
+ # '-mllvm $arg' options when doing the link step.
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# func_append moreargs " $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ if test none != "$pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ fi
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file '$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ os2dllname)
+ os2dllname=$arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex=$arg
+ prev=
+ continue
+ ;;
+ release)
+ release=-$arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test rpath = "$prev"; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) func_append rpath " $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) func_append xrpath " $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds=$arg
+ prev=
+ continue
+ ;;
+ weak)
+ func_append weak_libs " $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg=$arg
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "'-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test X-export-symbols = "X$arg"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname "-L" '' "$arg"
+ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between '-L' and '$1'"
+ else
+ func_fatal_error "need path for '-L' option"
+ fi
+ fi
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of '$dir'"
+ dir=$absdir
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
+ *)
+ # Preserve sysroot, but never include relative directories
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+ *) func_append deplibs " -L$dir" ;;
+ esac
+ func_append lib_search_path " $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) func_append dllsearchpath ":$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ # Do not include libc due to us having libc/libc_r.
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ func_append deplibs " System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test X-lc = "X$arg" && continue
+ ;;
+ esac
+ elif test X-lc_r = "X$arg"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ func_append deplibs " $arg"
+ continue
+ ;;
+
+ -mllvm)
+ prev=mllvm
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot|--sysroot)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module=$wl-multi_module
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "'-no-install' is ignored for $host"
+ func_warning "assuming '-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -os2dllname)
+ prev=os2dllname
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ =*)
+ func_stripname '=' '' "$dir"
+ dir=$lt_sysroot$func_stripname_result
+ ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_for_eval "$flag"
+ func_append arg " $func_quote_for_eval_result"
+ func_append compiler_flags " $func_quote_for_eval_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_for_eval "$flag"
+ func_append arg " $wl$func_quote_for_eval_result"
+ func_append compiler_flags " $wl$func_quote_for_eval_result"
+ func_append linker_flags " $func_quote_for_eval_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # -fstack-protector* stack protector flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ # --sysroot=* for sysroot support
+ # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
+ # -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ func_append compiler_flags " $arg"
+ continue
+ ;;
+
+ -Z*)
+ if test os2 = "`expr $host : '.*\(os2\)'`"; then
+ # OS/2 uses -Zxxx to specify OS/2-specific options
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case $arg in
+ -Zlinker | -Zstack)
+ prev=xcompiler
+ ;;
+ esac
+ continue
+ else
+ # Otherwise treat like 'Some other compiler flag' below
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ fi
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+
+ *.$objext)
+ # A standard object.
+ func_append objs " $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ test none = "$pic_object" || {
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ }
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ func_append deplibs " $arg"
+ func_append old_deplibs " $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ func_resolve_sysroot "$arg"
+ if test dlfiles = "$prev"; then
+ # This library was specified with -dlopen.
+ func_append dlfiles " $func_resolve_sysroot_result"
+ prev=
+ elif test dlprefiles = "$prev"; then
+ # The library was specified with -dlpreopen.
+ func_append dlprefiles " $func_resolve_sysroot_result"
+ prev=
+ else
+ func_append deplibs " $func_resolve_sysroot_result"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prevarg' option requires an argument"
+
+ if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname=$func_basename_result
+ libobjs_save=$libobjs
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ # Definition is injected by LT_CONFIG during libtool generation.
+ func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+ func_dirname "$output" "/" ""
+ output_objdir=$func_dirname_result$objdir
+ func_to_tool_file "$output_objdir/"
+ tool_output_objdir=$func_to_tool_file_result
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_preserve_dup_deps; then
+ case "$libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append libs " $deplib"
+ done
+
+ if test lib = "$linkmode"; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ esac
+ func_append pre_post_deps " $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=false
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test lib,link = "$linkmode,$pass"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs=$tmp_deplibs
+ fi
+
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass"; then
+ libs=$deplibs
+ deplibs=
+ fi
+ if test prog = "$linkmode"; then
+ case $pass in
+ dlopen) libs=$dlfiles ;;
+ dlpreopen) libs=$dlprefiles ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
+ esac
+ fi
+ if test lib,dlpreopen = "$linkmode,$pass"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ func_resolve_sysroot "$lib"
+ case $lib in
+ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+ libs=$dlprefiles
+ fi
+ if test dlopen = "$pass"; then
+ # Collect dlpreopened libraries
+ save_deplibs=$deplibs
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=false
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append compiler_flags " $deplib"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test lib != "$linkmode" && test prog != "$linkmode"; then
+ func_warning "'-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test lib = "$linkmode"; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib=$searchdir/lib$name$search_ext
+ if test -f "$lib"; then
+ if test .la = "$search_ext"; then
+ found=:
+ else
+ found=false
+ fi
+ break 2
+ fi
+ done
+ done
+ if $found; then
+ # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll=$l
+ done
+ if test "X$ll" = "X$old_library"; then # only static version available
+ found=false
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+ lib=$ladir/$old_library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ else
+ # deplib doesn't seem to be a libtool library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ ;; # -l
+ *.ltframework)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test conv = "$pass" && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ prog)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test scan = "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ *)
+ func_warning "'-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test link = "$pass"; then
+ func_stripname '-R' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
+ *.$libext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=false
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=:
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=:
+ ;;
+ esac
+ if $valid_a_lib; then
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ else
+ echo
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because the file extensions .$libext of this argument makes me believe"
+ echo "*** that it is just a static archive that I should not use here."
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test link != "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ elif test prog = "$linkmode"; then
+ if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ func_append newdlprefiles " $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append newdlfiles " $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=:
+ continue
+ ;;
+ esac # case $deplib
+
+ $found || test -f "$lib" \
+ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "'$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass" ||
+ { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ fi
+
+ if test conv = "$pass"; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ func_append convenience " $ladir/$objdir/$old_library"
+ func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
+ elif test prog != "$linkmode" && test lib != "$linkmode"; then
+ func_fatal_error "'$lib' is not a convenience library"
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ if test -n "$old_library" &&
+ { test yes = "$prefer_static_libs" ||
+ test built,no = "$prefer_static_libs,$installed"; }; then
+ linklib=$old_library
+ else
+ for l in $old_library $library_names; do
+ linklib=$l
+ done
+ fi
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test dlopen = "$pass"; then
+ test -z "$libdir" \
+ && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+ if test -z "$dlname" ||
+ test yes != "$dlopen_support" ||
+ test no = "$build_libtool_libs"
+ then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ func_append dlprefiles " $lib $dependency_libs"
+ else
+ func_append newdlfiles " $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of '$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir=$ladir
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname=$func_basename_result
+
+ # Find the relevant object directory and library name.
+ if test yes = "$installed"; then
+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library '$lib' was moved."
+ dir=$ladir
+ absdir=$abs_ladir
+ libdir=$abs_ladir
+ else
+ dir=$lt_sysroot$libdir
+ absdir=$lt_sysroot$libdir
+ fi
+ test yes = "$hardcode_automatic" && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir=$ladir
+ absdir=$abs_ladir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ else
+ dir=$ladir/$objdir
+ absdir=$abs_ladir/$objdir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test dlpreopen = "$pass"; then
+ if test -z "$libdir" && test prog = "$linkmode"; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+ fi
+ case $host in
+ # special handling for platforms with PE-DLLs.
+ *cygwin* | *mingw* | *cegcc* )
+ # Linker will automatically link against shared library if both
+ # static and shared are present. Therefore, ensure we extract
+ # symbols from the import library if a shared library is present
+ # (otherwise, the dlopen module name will be incorrect). We do
+ # this by putting the import library name into $newdlprefiles.
+ # We recover the dlopen module name by 'saving' the la file
+ # name in a special purpose variable, and (later) extracting the
+ # dlname from the la file.
+ if test -n "$dlname"; then
+ func_tr_sh "$dir/$linklib"
+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+ func_append newdlprefiles " $dir/$linklib"
+ else
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ fi
+ ;;
+ * )
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ func_append newdlprefiles " $dir/$dlname"
+ else
+ func_append newdlprefiles " $dir/$linklib"
+ fi
+ ;;
+ esac
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test lib = "$linkmode"; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test prog = "$linkmode" && test link != "$pass"; then
+ func_append newlib_search_path " $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=false
+ if test no != "$link_all_deplibs" || test -z "$library_names" ||
+ test no = "$build_libtool_libs"; then
+ linkalldeplibs=:
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if $linkalldeplibs; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test prog,link = "$linkmode,$pass"; then
+ if test -n "$library_names" &&
+ { { test no = "$prefer_static_libs" ||
+ test built,yes = "$prefer_static_libs,$installed"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+ # Make sure the rpath contains only unique directories.
+ case $temp_rpath: in
+ *"$absdir:"*) ;;
+ *) func_append temp_rpath "$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if $alldeplibs &&
+ { test pass_all = "$deplibs_check_method" ||
+ { test yes = "$build_libtool_libs" &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test built = "$use_static_libs" && test yes = "$installed"; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc* | *os2*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test no = "$installed"; then
+ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule=$dlpremoduletest
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+ echo
+ if test prog = "$linkmode"; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test lib = "$linkmode" &&
+ test yes = "$hardcode_into_libs"; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname=$dlname
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc* | *os2*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot=$soname
+ func_basename "$soroot"
+ soname=$func_basename_result
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from '$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for '$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test prog = "$linkmode" || test relink != "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test no = "$hardcode_direct"; then
+ add=$dir/$linklib
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+ *-*-sysv4*uw2*) add_dir=-L$dir ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir=-L$dir ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we cannot
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library"; then
+ echo
+ echo "*** And there doesn't seem to be a static archive available"
+ echo "*** The link will probably fail, sorry"
+ else
+ add=$dir/$old_library
+ fi
+ elif test -n "$old_library"; then
+ add=$dir/$old_library
+ fi
+ fi
+ esac
+ elif test no = "$hardcode_minus_L"; then
+ case $host in
+ *-*-sunos*) add_shlibpath=$dir ;;
+ esac
+ add_dir=-L$dir
+ add=-l$name
+ elif test no = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$dir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$absdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test yes != "$lib_linked"; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ esac
+ fi
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test yes != "$hardcode_direct" &&
+ test yes != "$hardcode_minus_L" &&
+ test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test prog = "$linkmode" || test relink = "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$libdir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$libdir
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ add=-l$name
+ elif test yes = "$hardcode_automatic"; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib"; then
+ add=$inst_prefix_dir$libdir/$linklib
+ else
+ add=$libdir/$linklib
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir=-L$libdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ fi
+
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test prog = "$linkmode"; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test unsupported != "$hardcode_direct"; then
+ test -n "$old_library" && linklib=$old_library
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test yes = "$build_libtool_libs"; then
+ # Not a shared library
+ if test pass_all != "$deplibs_check_method"; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ echo
+ $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ if test yes = "$module"; then
+ echo "*** But as you try to build a module library, libtool will still create "
+ echo "*** a static module, that should work as long as the dlopening application"
+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test lib = "$linkmode"; then
+ if test -n "$dependency_libs" &&
+ { test yes != "$hardcode_into_libs" ||
+ test yes = "$build_old_libs" ||
+ test yes = "$link_static"; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) func_append xrpath " $temp_xrpath";;
+ esac;;
+ *) func_append temp_deplibs " $libdir";;
+ esac
+ done
+ dependency_libs=$temp_deplibs
+ fi
+
+ func_append newlib_search_path " $absdir"
+ # Link against this library
+ test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result";;
+ *) func_resolve_sysroot "$deplib" ;;
+ esac
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ esac
+ fi
+ func_append tmp_libs " $func_resolve_sysroot_result"
+ done
+
+ if test no != "$link_all_deplibs"; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ path=
+ case $deplib in
+ -L*) path=$deplib ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+ dir=$func_dirname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of '$dir'"
+ absdir=$dir
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names"; then
+ for tmp in $deplibrary_names; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl"; then
+ depdepl=$absdir/$objdir/$depdepl
+ darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+ func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path=-L$absdir/$objdir
+ ;;
+ esac
+ else
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "'$deplib' seems to be moved"
+
+ path=-L$absdir
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test link = "$pass"; then
+ if test prog = "$linkmode"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs=$newdependency_libs
+ if test dlpreopen = "$pass"; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test dlopen != "$pass"; then
+ test conv = "$pass" || {
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) func_append lib_search_path " $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ }
+
+ if test prog,link = "$linkmode,$pass"; then
+ vars="compile_deplibs finalize_deplibs"
+ else
+ vars=deplibs
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+
+ # Add Sun CC postdeps if required:
+ test CXX = "$tagname" && {
+ case $host_os in
+ linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C++ 5.9
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ func_cc_basename "$CC"
+ case $func_cc_basename_result in
+ CC* | sunCC*)
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ }
+
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=
+ ;;
+ esac
+ if test -n "$i"; then
+ func_append tmp_libs " $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test prog = "$linkmode"; then
+ dlfiles=$newdlfiles
+ fi
+ if test prog = "$linkmode" || test lib = "$linkmode"; then
+ dlprefiles=$newdlprefiles
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "'-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs=$output
+ func_append objs "$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form 'libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test no = "$module" \
+ && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+ if test no != "$need_lib_prefix"; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test pass_all != "$deplibs_check_method"; then
+ func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ func_append libobjs " $objs"
+ fi
+ fi
+
+ test no = "$dlself" \
+ || func_warning "'-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test 1 -lt "$#" \
+ && func_warning "ignoring multiple '-rpath's for a libtool library"
+
+ install_libdir=$1
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test yes = "$build_libtool_libs"; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a '.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs=$IFS; IFS=:
+ set dummy $vinfo 0 0 0
+ shift
+ IFS=$save_ifs
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to '-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major=$1
+ number_minor=$2
+ number_revision=$3
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # that has an extra 1 added just for fun
+ #
+ case $version_type in
+ # correct linux to gnu/linux during the next big refactor
+ darwin|freebsd-elf|linux|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_revision
+ ;;
+ freebsd-aout|qnx|sunos)
+ current=$number_major
+ revision=$number_minor
+ age=0
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_minor
+ lt_irix_increment=no
+ ;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
+ esac
+ ;;
+ no)
+ current=$1
+ revision=$2
+ age=$3
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT '$current' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION '$revision' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE '$age' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE '$age' is greater than the current interface number '$current'"
+ func_fatal_error "'$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+ case $CC in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+ *)
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+ esac
+ ;;
+
+ freebsd-aout)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ freebsd-elf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ irix | nonstopux)
+ if test no = "$lt_irix_increment"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring=$verstring_prefix$major.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test 0 -ne "$loop"; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring_prefix$major.$iface:$verstring
+ done
+
+ # Before this point, $major must not contain '.'.
+ major=.$major
+ versuffix=$major.$revision
+ ;;
+
+ linux) # correct to gnu/linux during the next big refactor
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=.$current.$age.$revision
+ verstring=$current.$age.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test 0 -ne "$loop"; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring:$iface.0
+ done
+
+ # Make executables depend on our current version.
+ func_append verstring ":$current.0"
+ ;;
+
+ qnx)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sco)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sunos)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 file systems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type '$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring=0.0
+ ;;
+ esac
+ if test no = "$need_version"; then
+ versuffix=
+ else
+ versuffix=.0.0
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test yes,no = "$avoid_version,$need_version"; then
+ major=
+ versuffix=
+ verstring=
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test yes = "$allow_undefined"; then
+ if test unsupported = "$allow_undefined_flag"; then
+ if test yes = "$build_old_libs"; then
+ func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+ build_libtool_libs=no
+ else
+ func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+ fi
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag=$no_undefined_flag
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" :
+ func_append libobjs " $symfileobj"
+ test " " = "$libobjs" && libobjs=
+
+ if test relink != "$opt_mode"; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+ if test -n "$precious_files_regex"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ func_append removelist " $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+ func_append oldlibs " $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles=$dlfiles
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) func_append dlfiles " $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles=$dlprefiles
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) func_append dlprefiles " $lib" ;;
+ esac
+ done
+
+ if test yes = "$build_libtool_libs"; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ func_append deplibs " System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test yes = "$build_libtool_need_lc"; then
+ func_append deplibs " -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=
+ versuffix=
+ major=
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ if test yes = "$want_nocaseglob"; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ $nocaseglob
+ else
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ fi
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib=$potent_lib
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+ *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib=$potent_lib # see symlink-check above in file_magic test
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ for i in $predeps $postdeps; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+ done
+ fi
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
+ if test none = "$deplibs_check_method"; then
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ ;;
+ esac
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test yes = "$droppeddeps"; then
+ if test yes = "$module"; then
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ echo "*** The inter-library dependencies that have been dropped here will be"
+ echo "*** automatically added whenever a program is linked with this library"
+ echo "*** or is declared to -dlopen it."
+
+ if test no = "$allow_undefined"; then
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ deplibs=$new_libs
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test yes = "$build_libtool_libs"; then
+ # Remove $wl instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
+ if test yes = "$hardcode_into_libs"; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath=$finalize_rpath
+ test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ func_replace_sysroot "$libdir"
+ libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append dep_rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath=$finalize_shlibpath
+ test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib=$output_objdir/$realname
+ linknames=
+ for link
+ do
+ func_append linknames " $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols=$output_objdir/$libname.uexp
+ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ func_dll_def_p "$export_symbols" || {
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols=$export_symbols
+ export_symbols=
+ always_export_symbols=yes
+ }
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs=$IFS; IFS='~'
+ for cmd1 in $cmds; do
+ IFS=$save_ifs
+ # Take the normal branch if the nm_file_list_spec branch
+ # doesn't work or if tool conversion is not needed.
+ case $nm_file_list_spec~$to_tool_file_cmd in
+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+ try_normal_branch=yes
+ eval cmd=\"$cmd1\"
+ func_len " $cmd"
+ len=$func_len_result
+ ;;
+ *)
+ try_normal_branch=no
+ ;;
+ esac
+ if test yes = "$try_normal_branch" \
+ && { test "$len" -lt "$max_cmd_len" \
+ || test "$max_cmd_len" -le -1; }
+ then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ elif test -n "$nm_file_list_spec"; then
+ func_basename "$output"
+ output_la=$func_basename_result
+ save_libobjs=$libobjs
+ save_output=$output
+ output=$output_objdir/$output_la.nm
+ func_to_tool_file "$output"
+ libobjs=$nm_file_list_spec$func_to_tool_file_result
+ func_append delfiles " $output"
+ func_verbose "creating $NM input file list: $output"
+ for obj in $save_libobjs; do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > "$output"
+ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
+ output=$save_output
+ libobjs=$save_libobjs
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS=$save_ifs
+ if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
+ done
+ deplibs=$tmp_deplibs
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test yes = "$compiler_needs_object" &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ func_append linker_flags " $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test : != "$skipped_export" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ func_basename "$output"
+ output_la=$func_basename_result
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+ output=$output_objdir/$output_la.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+ output=$output_objdir/$output_la.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test yes = "$compiler_needs_object"; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-$k.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test -z "$objlist" ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test 1 -eq "$k"; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-$k.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-$k.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ func_append delfiles " $output"
+
+ else
+ output=
+ fi
+
+ ${skipped_export-false} && {
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ }
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs=$IFS; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ ${skipped_export-false} && {
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ }
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $cmds; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test yes = "$module" || test yes = "$export_dynamic"; then
+ # On all known operating systems, these are identical.
+ dlname=$soname
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj=$output
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # if reload_cmds runs $LD directly, get rid of -Wl from
+ # whole_archive_flag_spec and hope we can get by with turning comma
+ # into space.
+ case $reload_cmds in
+ *\$LD[\ \$]*) wl= ;;
+ esac
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+ else
+ gentop=$output_objdir/${obj}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # If we're not building shared, we need to use non_pic_objs
+ test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+ # Create the old-style object.
+ reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+ output=$obj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ test yes = "$build_libtool_libs" || {
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ }
+
+ if test -n "$pic_flag" || test default != "$pic_mode"; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output=$libobj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for programs"
+
+ $preload \
+ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test CXX = "$tagname"; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ func_append compile_command " $wl-bind_at_load"
+ func_append finalize_command " $wl-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ compile_deplibs=$new_libs
+
+
+ func_append compile_command " $compile_deplibs"
+ func_append finalize_command " $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) func_append dllsearchpath ":$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath=$rpath
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath=$rpath
+
+ if test -n "$libobjs" && test yes = "$build_old_libs"; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=:
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=false
+ ;;
+ *cygwin* | *mingw* )
+ test yes = "$build_libtool_libs" || wrappers_required=false
+ ;;
+ *)
+ if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+ wrappers_required=false
+ fi
+ ;;
+ esac
+ $wrappers_required || {
+ # Replace the output file specification.
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ link_command=$compile_command$compile_rpath
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.$objext"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+ fi
+
+ exit $exit_status
+ }
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test yes = "$no_install"; then
+ # We don't need to create a wrapper script.
+ link_command=$compile_var$compile_command$compile_rpath
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ case $hardcode_action,$fast_install in
+ relink,*)
+ # Fast installation is not supported
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "'$output' will be relinked during installation"
+ ;;
+ *,yes)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ ;;
+ *,no)
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+ ;;
+ *,needless)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=
+ ;;
+ esac
+
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output_objdir/$outputname"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource=$output_path/$objdir/lt-$output_name.c
+ cwrapper=$output_path/$output_name.exe
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host"; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ case $build_libtool_libs in
+ convenience)
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs=$convenience
+ build_libtool_libs=no
+ ;;
+ module)
+ oldobjs=$libobjs_save
+ addlibs=$old_convenience
+ build_libtool_libs=no
+ ;;
+ *)
+ oldobjs="$old_deplibs $non_pic_objects"
+ $preload && test -f "$symfileobj" \
+ && func_append oldobjs " $symfileobj"
+ addlibs=$old_convenience
+ ;;
+ esac
+
+ if test -n "$addlibs"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $addlibs
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase=$func_basename_result
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
+ ;;
+ *) func_append oldobjs " $obj" ;;
+ esac
+ done
+ fi
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ elif test -n "$archiver_list_spec"; then
+ func_verbose "using command file archive linking..."
+ for obj in $oldobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > $output_objdir/$libname.libcmd
+ func_to_tool_file "$output_objdir/$libname.libcmd"
+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj"; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test -z "$oldobjs"; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test yes = "$build_old_libs" && old_library=$libname.$libext
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ if test yes = "$hardcode_automatic"; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test yes = "$installed"; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output=$output_objdir/${outputname}i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name=$func_basename_result
+ func_resolve_sysroot "$deplib"
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ -L*)
+ func_stripname -L '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -L$func_replace_sysroot_result"
+ ;;
+ -R*)
+ func_stripname -R '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -R$func_replace_sysroot_result"
+ ;;
+ *) func_append newdependency_libs " $deplib" ;;
+ esac
+ done
+ dependency_libs=$newdependency_libs
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ *) func_append newdlfiles " $lib" ;;
+ esac
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles=$newdlprefiles
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlfiles " $abs"
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlprefiles " $abs"
+ done
+ dlprefiles=$newdlprefiles
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test -n "$bindir"; then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result/$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test no,yes = "$installed,$need_relink"; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+ func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $debug_cmd
+
+ RM=$nonopt
+ files=
+ rmforce=false
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ for arg
+ do
+ case $arg in
+ -f) func_append RM " $arg"; rmforce=: ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ if test . = "$dir"; then
+ odir=$objdir
+ else
+ odir=$dir/$objdir
+ fi
+ func_basename "$file"
+ name=$func_basename_result
+ test uninstall = "$opt_mode" && odir=$dir
+
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test clean = "$opt_mode"; then
+ case " $rmdirs " in
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif $rmforce; then
+ continue
+ fi
+
+ rmfiles=$file
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ func_append rmfiles " $odir/$n"
+ done
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+ case $opt_mode in
+ clean)
+ case " $library_names " in
+ *" $dlname "*) ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ esac
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" && test none != "$pic_object"; then
+ func_append rmfiles " $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+ func_append rmfiles " $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test clean = "$opt_mode"; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ func_append rmfiles " $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+ if test yes = "$fast_install" && test -n "$relink_command"; then
+ func_append rmfiles " $odir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name"; then
+ func_append rmfiles " $odir/lt-$noexename.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+
+ # Try to remove the $objdir's in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+ func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+ help=$generic_help
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/src/mpi/romio/mpl/confdb/ltoptions.m4 b/src/mpi/romio/mpl/confdb/ltoptions.m4
new file mode 100644
index 0000000..94b0829
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/ltoptions.m4
@@ -0,0 +1,437 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 8 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option '$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+ [_LT_WITH_AIX_SONAME([aix])])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+ AC_MSG_CHECKING([which variant of shared library versioning to provide])
+ AC_ARG_WITH([aix-soname],
+ [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+ [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+ [case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname],
+ [AC_CACHE_VAL([lt_cv_with_aix_soname],
+ [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+ with_aix_soname=$lt_cv_with_aix_soname])
+ AC_MSG_RESULT([$with_aix_soname])
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+ [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
+# LT_INIT options.
+# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [pic_mode=m4_default([$1], [default])])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/src/mpi/romio/mpl/confdb/ltsugar.m4 b/src/mpi/romio/mpl/confdb/ltsugar.m4
new file mode 100644
index 0000000..48bc934
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/ltsugar.m4
@@ -0,0 +1,124 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59, which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/src/mpi/romio/mpl/confdb/ltversion.m4 b/src/mpi/romio/mpl/confdb/ltversion.m4
new file mode 100644
index 0000000..fa04b52
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 4179 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.6'
+macro_revision='2.4.6'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/src/mpi/romio/mpl/confdb/lt~obsolete.m4 b/src/mpi/romio/mpl/confdb/lt~obsolete.m4
new file mode 100644
index 0000000..c6b26f8
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/lt~obsolete.m4
@@ -0,0 +1,99 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/src/mpi/romio/mpl/confdb/missing b/src/mpi/romio/mpl/confdb/missing
new file mode 100755
index 0000000..f62bbae
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake at gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/mpi/romio/mpl/confdb/random_r.m4 b/src/mpi/romio/mpl/confdb/random_r.m4
new file mode 100644
index 0000000..8d04a27
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/random_r.m4
@@ -0,0 +1,43 @@
+# serial 5
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RANDOM_R],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
+ if test $ac_cv_header_random_h = no; then
+ HAVE_RANDOM_H=0
+ fi
+
+ AC_CHECK_TYPES([struct random_data],
+ [], [HAVE_STRUCT_RANDOM_DATA=0],
+ [[#include <stdlib.h>
+ #if HAVE_RANDOM_H
+ # include <random.h>
+ #endif
+ ]])
+
+ dnl On AIX and OSF/1, these functions exist, but with different declarations.
+ dnl Override them all.
+ case "$host_os" in
+ aix* | osf*)
+ REPLACE_RANDOM_R=1
+ ;;
+ *)
+ AC_CHECK_FUNCS([random_r])
+ if test $ac_cv_func_random_r = no; then
+ HAVE_RANDOM_R=0
+ fi
+ ;;
+ esac
+])
+
+# Prerequisites of lib/random_r.c.
+AC_DEFUN([gl_PREREQ_RANDOM_R], [
+ :
+])
diff --git a/src/mpi/romio/mpl/confdb/stdlib_h.m4 b/src/mpi/romio/mpl/confdb/stdlib_h.m4
new file mode 100644
index 0000000..19107c4
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/stdlib_h.m4
@@ -0,0 +1,119 @@
+# stdlib_h.m4 serial 42
+dnl Copyright (C) 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_NEXT_HEADERS([stdlib.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+ ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
+ initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
+ posix_openpt ptsname ptsname_r random random_r realpath rpmatch
+ secure_getenv setenv setstate setstate_r srandom srandom_r
+ strtod strtoll strtoull unlockpt unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT])
+ GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
+ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
+ GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+ GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
+ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
+ GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT])
+ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
+ GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC])
+ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
+ GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP])
+ GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS])
+ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
+ GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS])
+ GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT])
+ GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME])
+ GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R])
+ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
+ GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
+ GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
+ GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
+ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+ GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
+ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
+ GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
+ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
+ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
+ GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
+ GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
+ GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX])
+ GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT])
+ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
+ GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
+ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
+ HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP])
+ HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS])
+ HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP])
+ HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS])
+ HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT])
+ HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME])
+ HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R])
+ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
+ HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
+ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
+ HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
+ HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
+ HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
+ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
+ REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC])
+ REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+ REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
+ REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
+ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
+ REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
+ REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC])
+ REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
+ REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
+ REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/src/mpi/romio/mpl/confdb/test-driver b/src/mpi/romio/mpl/confdb/test-driver
new file mode 100755
index 0000000..8e575b0
--- /dev/null
+++ b/src/mpi/romio/mpl/confdb/test-driver
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+# Make unconditional expansion of undefined variables an error. This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+ echo "$0: $*" >&2
+ print_usage >&2
+ exit 2
+}
+
+print_usage ()
+{
+ cat <<END
+Usage:
+ test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+ [--expect-failure={yes|no}] [--color-tests={yes|no}]
+ [--enable-hard-errors={yes|no}] [--]
+ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file= # Where to save the output of the test script.
+trs_file= # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+ case $1 in
+ --help) print_usage; exit $?;;
+ --version) echo "test-driver $scriptversion"; exit $?;;
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --color-tests) color_tests=$2; shift;;
+ --expect-failure) expect_failure=$2; shift;;
+ --enable-hard-errors) enable_hard_errors=$2; shift;;
+ --) shift; break;;
+ -*) usage_error "invalid option: '$1'";;
+ *) break;;
+ esac
+ shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file" = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+ usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+ usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+ red='[0;31m' # Red.
+ grn='[0;32m' # Green.
+ lgn='[1;32m' # Light green.
+ blu='[1;34m' # Blue.
+ mgn='[0;35m' # Magenta.
+ std='[m' # No color.
+else
+ red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+ tweaked_estatus=1
+else
+ tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
+ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
+ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
+ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
+ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/mpi/romio/mpl/configure b/src/mpi/romio/mpl/configure
new file mode 100755
index 0000000..7619b5f
--- /dev/null
+++ b/src/mpi/romio/mpl/configure
@@ -0,0 +1,17385 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for MPL 0.1.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf at gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='MPL'
+PACKAGE_TARNAME='mpl'
+PACKAGE_VERSION='0.1'
+PACKAGE_STRING='MPL 0.1'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="src/str/mpl_str.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+libmpl_so_versionflags
+MPL_TIMER_TYPE
+MPL_TIMER_KIND
+BUILD_COVERAGE_FALSE
+BUILD_COVERAGE_TRUE
+GCOV
+MPL_EMBEDDED_MODE_FALSE
+MPL_EMBEDDED_MODE_TRUE
+libmpl_so_version
+MPLLIBNAME
+CPP
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+DLLTOOL
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+ac_ct_AR
+AR
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+runstatedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_embedded
+enable_g
+enable_coverage
+with_valgrind
+enable_timer_type
+enable_yield
+with_thread_package
+with_shared_memory
+enable_versioning
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+LT_SYS_LIBRARY_PATH
+CPP
+MPLLIBNAME
+GCOV'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir runstatedir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures MPL 0.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/mpl]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of MPL 0.1:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-embedded Build MPL in embedded mode (default is no)
+ --enable-g=option Control the level of debugging support in MPL.
+ "option" is a list of comma separated names. Default
+ is "all". none|no - No debugging log - Enable debug
+ event logging mem - Enable memory tracing yes|all -
+ All of the above choices (except "none", obviously)
+ --enable-coverage Turn on coverage analysis using gcc and gcov
+ --enable-timer-type=name - Select the timer to use for MPI_Wtime and
+ internal timestamps.
+ ppc64_cycle - Powerpc-64bit; returns cycle counts using timebase register
+ gethrtime - Solaris timer (Solaris systems only)
+ clock_gettime - Posix timer (where available)
+ gettimeofday - Most Unix systems
+ linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
+ gcc_ia64_cycle - IPF ar.itc timer*
+ mach_absolute_time - Mach absolute time (alternative to clock_gettime
+ for OSX)
+ device - The timer is provided by the device
+
+ *Note that the cycle timers are intended to be used by
+ developers for internal low-level timing. Normal users should
+ not use these as they are not guaranteed to be accurate in
+ certain situations.
+
+ --enable-yield choose a method to yield the processor in busy
+ loops. Available methods are: sched_yield, yield,
+ select, usleep, sleep, nothing
+ --enable-versioning Enable library versioning
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-aix-soname=aix|svr4|both
+ shared library versioning (aka "SONAME") variant to
+ provide on AIX, [default=aix].
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the
+ compiler's sysroot if not specified).
+ --without-valgrind to disable valgrind support (such as because of
+ version issues)
+ --with-valgrind=PATH use valgrind headers installed in PATH (default is
+ "yes", use no special path)
+ --with-thread-package=package Thread package to use. Supported thread packages include:
+ posix or pthreads - POSIX threads (default, if required)
+ solaris - Solaris threads (Solaris OS only)
+ win - windows threads
+ none - no threads
+
+ --with-shared-memory=auto|sysv|mmap
+ create shared memory using sysv or mmap (default is
+ auto)
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ LT_SYS_LIBRARY_PATH
+ User-defined run-time library search path.
+ CPP C preprocessor
+ MPLLIBNAME can be used to override the name of the MPL library (default:
+ "mpl")
+ GCOV name/path for the gcov utility
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+MPL configure 0.1
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by MPL $as_me 0.1, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# sanity check that --srcdir was specified correctly
+
+
+ac_aux_dir=
+for ac_dir in confdb "$srcdir"/confdb; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in confdb \"$srcdir\"/confdb" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
+am__api_version='1.15'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='mpl'
+ VERSION='0.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+
+
+ if test -z "${pac_save_CFLAGS_nesting}" ; then
+ pac_save_CFLAGS_nesting=0
+ fi
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}='"$CFLAGS"'
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} + 1`
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in icc pgcc xlc xlC pathcc gcc clang cc
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in icc pgcc xlc xlC pathcc gcc clang cc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} - 1`
+ eval CFLAGS="\$pac_save_CFLAGS_${pac_save_CFLAGS_nesting}"
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}=""
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar lib "link -lib"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar lib "link -lib"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ am_cv_ar_interface=ar
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+ (eval $am_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=ar
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+ (eval $am_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ am_cv_ar_interface=unknown
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+ # similar.
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+unknown)
+ as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+ ;;
+esac
+
+
+
+
+# Bug in libtool adds -O2 and -g by default
+
+ if test -z "${pac_save_CFLAGS_nesting}" ; then
+ pac_save_CFLAGS_nesting=0
+ fi
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}='"$CFLAGS"'
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} + 1`
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.6'
+macro_revision='2.4.6'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case $ECHO in
+ printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+ print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ar_at_file=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+ withval=$with_sysroot;
+else
+ with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+ ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+ ac_path_lt_DD_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in dd; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+ $ac_path_lt_DD_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_lt_DD"; then
+ :
+ fi
+else
+ ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ emul=elf
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `/usr/bin/file conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$MANIFEST_TOOL"; then
+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+ # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_MANIFEST_TOOL"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
+ MANIFEST_TOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+ fi
+else
+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&5
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&5
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
+ echo "$RANLIB libconftest.a" >&5
+ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&5
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ 10.[012][,.]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+ # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ pic_mode=default
+fi
+
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+ shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+ withval=$with_aix_soname; case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname
+else
+ if ${lt_cv_with_aix_soname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_with_aix_soname=aix
+fi
+
+ with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/${ac_tool_prefix}file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+ if test yes = "$GCC"; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ if test -n "$lt_prog_compiler_pic"; then
+ lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Intel*\ [CF]*Compiler*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ *Portland\ Group*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test no = "$hard_links"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ export_dynamic_flag_spec='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='$wl--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ export_dynamic_flag_spec='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test no = "$ld_shlibs"; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ export_dynamic_flag_spec='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' $wl-bernotok'
+ allow_undefined_flag=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > [...]
+ else
+ # used by -dlpreopen to get the symbols
+ archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ file_list_spec='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+ enable_shared_with_static_runtimes=yes
+ exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ old_postinstall_cmds='chmod 644 $oldlib'
+ postlink_cmds='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ enable_shared_with_static_runtimes=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_irix_exported_symbol=yes
+else
+ lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ link_all_deplibs=no
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ ld_shlibs=yes
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ else
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='$wl-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='$wl-z,text'
+ allow_undefined_flag='$wl-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a(lib.so.V)'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test yes = "$hardcode_automatic"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$hardcode_direct" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+ test no != "$hardcode_minus_L"; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+ test yes = "$inherit_rpath"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+ lt_cv_dlopen=shl_load
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+ lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+ lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP"; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report what library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+ pac_save_CFLAGS_nesting=`expr ${pac_save_CFLAGS_nesting} - 1`
+ eval CFLAGS="\$pac_save_CFLAGS_${pac_save_CFLAGS_nesting}"
+ eval pac_save_CFLAGS_${pac_save_CFLAGS_nesting}=""
+
+
+# ----------------------------------------------------------------------------
+# Set default library names if names haven't already been provided
+
+MPLLIBNAME=${MPLLIBNAME:-"mpl"}
+
+export MPLLIBNAME
+
+if test -s "$srcdir/VERSION" ; then
+ . $srcdir/VERSION
+
+else
+ as_fn_error $? "Version information not found. Configuration aborted." "$LINENO" 5
+fi
+
+ac_config_headers="$ac_config_headers include/config.h"
+
+ac_config_commands="$ac_config_commands include/mplconfig.h"
+
+
+# Non-verbose make
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_const=yes
+else
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if ${ac_cv_c_restrict+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_restrict=no
+ # The order here caters to the fact that C++ does not require restrict.
+ for ac_kw in __restrict __restrict__ _Restrict restrict; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef int * int_ptr;
+ int foo (int_ptr $ac_kw ip) {
+ return ip[0];
+ }
+int
+main ()
+{
+int s[1];
+ int * $ac_kw t = s;
+ t[0] = 0;
+ return foo(t)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_restrict" != no && break
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+ *) cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for variable argument list macro functionality" >&5
+$as_echo_n "checking for variable argument list macro functionality... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdio.h>
+ #define conftest_va_arg_macro(...) printf(__VA_ARGS__)
+
+int
+main ()
+{
+conftest_va_arg_macro("a test %d", 3);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+$as_echo "#define HAVE_MACRO_VA_ARGS 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports __builtin_expect" >&5
+$as_echo_n "checking if C compiler supports __builtin_expect... " >&6; }
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ return __builtin_expect(1, 1) ? 1 : 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ have_builtin_expect=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ have_builtin_expect=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test x$have_builtin_expect = xyes ; then
+
+$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
+
+fi
+
+
+# Check whether --enable-embedded was given.
+if test "${enable_embedded+set}" = set; then :
+ enableval=$enable_embedded; embedded=yes
+else
+ embedded=no
+fi
+
+ if test "x${embedded}" = "xyes"; then
+ MPL_EMBEDDED_MODE_TRUE=
+ MPL_EMBEDDED_MODE_FALSE='#'
+else
+ MPL_EMBEDDED_MODE_TRUE='#'
+ MPL_EMBEDDED_MODE_FALSE=
+fi
+
+
+# Check whether --enable-g was given.
+if test "${enable_g+set}" = set; then :
+ enableval=$enable_g;
+else
+ enable_g=none
+fi
+
+
+# enable-g
+# strip off multiple options, separated by commas
+
+ if test -z "${pac_save_IFS_nesting}" ; then
+ pac_save_IFS_nesting=0
+ fi
+ eval pac_save_IFS_${pac_save_IFS_nesting}='"$IFS"'
+ pac_save_IFS_nesting=`expr ${pac_save_IFS_nesting} + 1`
+
+IFS=","
+for option in $enable_g ; do
+ case "$option" in
+ log)
+ enable_g_log=yes
+ ;;
+
+ mem)
+ enable_g_mem=yes
+ ;;
+
+ all|yes)
+ enable_g_log=yes
+ enable_g_mem=yes
+ ;;
+
+ no|none)
+ ;;
+
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $option for enable-g" >&5
+$as_echo "$as_me: WARNING: Unknown value $option for enable-g" >&2;}
+ ;;
+ esac
+done
+
+ pac_save_IFS_nesting=`expr ${pac_save_IFS_nesting} - 1`
+ eval IFS="\$pac_save_IFS_${pac_save_IFS_nesting}"
+ eval pac_save_IFS_${pac_save_IFS_nesting}=""
+
+
+if test "$enable_g_log" = "yes" ; then
+
+$as_echo "#define USE_DBG_LOGGING 1" >>confdefs.h
+
+fi
+
+if test "$enable_g_mem" = "yes" ; then
+
+$as_echo "#define USE_MEMORY_TRACING 1" >>confdefs.h
+
+fi
+
+
+# support gcov test coverage information
+
+
+
+for ac_prog in gcov
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GCOV+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$GCOV"; then
+ ac_cv_prog_GCOV="$GCOV" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_GCOV="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+GCOV=$ac_cv_prog_GCOV
+if test -n "$GCOV"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5
+$as_echo "$GCOV" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$GCOV" && break
+done
+
+
+# Check whether --enable-coverage was given.
+if test "${enable_coverage+set}" = set; then :
+ enableval=$enable_coverage;
+else
+ enable_coverage=no
+fi
+
+
+if test "$enable_coverage" = "yes" ; then
+ if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_CFLAGS+set} = set ; then
+ WRAPPER_CFLAGS="$WRAPPER_CFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
+ fi
+ if test "$enable_cxx" = "yes" ; then
+ if test "$ac_cv_cxx_compiler_gnu" = "yes" ; then
+ CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_CXXFLAGS+set} = set ; then
+ WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
+ fi
+ fi
+ # Add similar options for g77 so that the Fortran tests will also
+ #
+ if test "$enable_f77" = yes ; then
+ if test "$ac_cv_f77_compiler_gnu" = "yes" ; then
+ FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_FFLAGS+set} = set ; then
+ WRAPPER_FFLAGS="$WRAPPER_FFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&2;}
+ fi
+ fi
+ if test "$enable_fc" = yes ; then
+ if test "$ac_cv_fc_compiler_gnu" = "yes" ; then
+ FCFLAGS="$FCFLAGS -fprofile-arcs -ftest-coverage"
+ LIBS="$LIBS -lgcov"
+ if test ${WRAPPER_FCFLAGS+set} = set ; then
+ WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -fprofile-arcs -ftest-coverage"
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GFORTRAN" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GFORTRAN" >&2;}
+ fi
+ fi
+ # On some platforms (e.g., Mac Darwin), we must also *link*
+ # with the -fprofile-args -ftest-coverage option.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compilation with coverage analysis enabled works" >&5
+$as_echo_n "checking whether compilation with coverage analysis enabled works... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(int argc, char **argv){return 1;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Unable to link programs when coverage analysis enabled" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ # Test for the routines that we need to use to ensure that the
+ # data files are (usually) written out
+ # FIXME: Some versions of Linux provide usleep, but it rounds times
+ # up to the next second (!)
+ for ac_func in usleep
+do :
+ ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
+if test "x$ac_cv_func_usleep" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_USLEEP 1
+_ACEOF
+
+fi
+done
+
+
+ # NOTE: using a "pac_cv_" prefix but not caching because of xFLAGS "side effects"
+ pac_cv_use_coverage=yes
+
+$as_echo "#define USE_COVERAGE 1" >>confdefs.h
+
+fi
+ if test "X$pac_cv_use_coverage" = "Xyes"; then
+ BUILD_COVERAGE_TRUE=
+ BUILD_COVERAGE_FALSE='#'
+else
+ BUILD_COVERAGE_TRUE='#'
+ BUILD_COVERAGE_FALSE=
+fi
+
+
+
+# check for compiler support for the __typeof() extension
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports __typeof(variable)" >&5
+$as_echo_n "checking whether the compiler supports __typeof(variable)... " >&6; }
+if ${pac_cv_have___typeof+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+double foo = 0.0; __typeof(foo) bar = 1.0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_have___typeof=yes
+else
+ pac_cv_have___typeof=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have___typeof" >&5
+$as_echo "$pac_cv_have___typeof" >&6; }
+if test "$pac_cv_have___typeof" = "yes" ; then
+
+$as_echo "#define HAVE___TYPEOF 1" >>confdefs.h
+
+fi
+
+for ac_header in stdio.h stdlib.h string.h stdarg.h ctype.h sys/types.h sys/uio.h execinfo.h backtrace.h libunwind.h unistd.h errno.h windows.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# A C99 compliant compiler should have inttypes.h for fixed-size int types
+for ac_header in inttypes.h stdint.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+#######################################################################
+# valgrind support
+
+# Check whether --with-valgrind was given.
+if test "${with_valgrind+set}" = set; then :
+ withval=$with_valgrind;
+else
+ with_valgrind=yes
+fi
+
+if test "$with_valgrind" != "no" ; then
+ savedCPPFLAGS="$CPPFLAGS"
+ if test "$with_valgrind" != "yes" ; then
+ # Clients of MPL will either need to respect the localdefs file (as in
+ # MPICH) or add this entry to their own CPPFLAGS-equivalent.
+ # (TODO: a pkg-config file would help with this)
+
+
+ if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_valgrind}\>" >/dev/null 2>&1; then :
+ echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_valgrind}', not appending" >&5
+else
+ echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_valgrind}', appending" >&5
+ CPPFLAGS="$CPPFLAGS -I${with_valgrind}"
+
+fi
+
+ fi
+ # headers for valgrind client requests
+ for ac_header in valgrind.h memcheck.h valgrind/valgrind.h valgrind/memcheck.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ # headers for valgrind-based thread checking tools
+ # TODO: incorporate ThreadSanitizer as well (include dynamic_annotations.h,
+ # link with dynamic_annotations.c)
+ for ac_header in helgrind.h valgrind/helgrind.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ for ac_header in drd.h valgrind/drd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ # ensure that we have a new enough valgrind with all the client macros
+ # a preproc test would probably be sufficient, but the LINK_IFELSE helps us
+ # double-check that we aren't accidentally grabbing the headers for some
+ # other platform
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the valgrind headers are broken or too old" >&5
+$as_echo_n "checking whether the valgrind headers are broken or too old... " >&6; }
+if ${pac_cv_have_broken_valgrind+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if defined(HAVE_VALGRIND_H) && defined(HAVE_MEMCHECK_H)
+# include <valgrind.h>
+# include <memcheck.h>
+#elif defined(HAVE_VALGRIND_VALGRIND_H) && defined(HAVE_VALGRIND_MEMCHECK_H)
+# include <valgrind/valgrind.h>
+# include <valgrind/memcheck.h>
+#else
+# error unexpected valgrind header error
+#endif
+int foo = 10;
+char mempool_obj;
+
+int
+main ()
+{
+
+#if defined(VALGRIND_MAKE_MEM_DEFINED)
+ VALGRIND_MAKE_MEM_NOACCESS(&foo,sizeof(foo));
+ VALGRIND_MAKE_MEM_UNDEFINED(&foo,sizeof(foo));
+ VALGRIND_MAKE_MEM_DEFINED(&foo,sizeof(foo));
+ VALGRIND_CHECK_MEM_IS_DEFINED(&foo,sizeof(foo));
+ VALGRIND_CHECK_MEM_IS_ADDRESSABLE(&foo,sizeof(foo));
+#elif defined(VALGRIND_MAKE_READABLE)
+/* older (pre-3.2.0), but still supported style */
+ VALGRIND_MAKE_READABLE(&foo,sizeof(foo));
+ VALGRIND_MAKE_NOACCESS(&foo,sizeof(foo));
+ VALGRIND_MAKE_UNDEFINED(&foo,sizeof(foo));
+ VALGRIND_CHECK_READABLE(&foo,sizeof(foo));
+ VALGRIND_CHECK_WRITEABLE(&foo,sizeof(foo));
+#else
+#error missing essential valgrind client macros
+#endif
+ VALGRIND_CREATE_BLOCK(&foo,sizeof(foo),"description");
+ if (RUNNING_ON_VALGRIND) ++foo;
+ VALGRIND_PRINTF_BACKTRACE("testing: %s","valgrind support");
+ VALGRIND_CREATE_MEMPOOL(&mempool_obj,0,0);
+ VALGRIND_MEMPOOL_ALLOC(&mempool_obj,&foo,sizeof(foo));
+ VALGRIND_MEMPOOL_FREE(&mempool_obj,&foo);
+ VALGRIND_DESTROY_MEMPOOL(&mempool_obj);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_have_broken_valgrind=no
+else
+ pac_cv_have_broken_valgrind=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_have_broken_valgrind" >&5
+$as_echo "$pac_cv_have_broken_valgrind" >&6; }
+ if test "$pac_cv_have_broken_valgrind" = "yes" ; then
+
+$as_echo "#define HAVE_BROKEN_VALGRIND 1" >>confdefs.h
+
+ CPPFLAGS="$savedCPPFLAGS"
+ fi
+fi
+
+
+#######################################################################
+## TIMER CODE
+#######################################################################
+
+# ----------------------------------------------------------------------------
+# Support for timers. The following code processes the
+# --enable-timer-type=name argument and selects the timer based on
+# both that field and what configure is able to determine is available.
+# The file src/include/mpl_timer.h is also created.
+# ----------------------------------------------------------------------------
+
+# clock_gettime is the POSIX gettimeofday
+# gethrtime is the Solaris high-resolution timer
+# Check whether --enable-timer-type was given.
+if test "${enable_timer_type+set}" = set; then :
+ enableval=$enable_timer_type; timer_type=$enable_timer_type
+fi
+
+
+## The user did not specify a timer type. Try to find a sane option
+## that is supported by the platform.
+if test -z "$timer_type" ; then
+ # Try to pick a timer based on what is available
+ for ac_func in clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ if test "$ac_cv_func_gethrtime" = "yes" ; then
+ # Sigh. The Solaris include files do not define hrtime_t
+ # Before we accept this choice, make sure that we can
+ # do arithmetic with hrtime_t .
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that hrtime_t is properly defined for gethrtime" >&5
+$as_echo_n "checking that hrtime_t is properly defined for gethrtime... " >&6; }
+if ${pac_cv_hrtime_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/time.h>
+
+int
+main ()
+{
+hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_hrtime_works=yes
+else
+ pac_cv_hrtime_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_hrtime_works" >&5
+$as_echo "$pac_cv_hrtime_works" >&6; }
+ # A more ambitious test would look to see if casting an
+ # hrtime_t to int64_t works, and even more ambitious
+ # would check whether long or long long was 64 bits (or even
+ # better, the sizeof hrtime_t).
+
+ # AC_CHECK_FUNCS has false positive when checking whether gethrtime is
+ # available on Solaris with strict configuration. We must use
+ # AC_CHECK_DECL to confirm it.
+ ac_fn_c_check_decl "$LINENO" "gethrtime" "ac_cv_have_decl_gethrtime" "$ac_includes_default"
+if test "x$ac_cv_have_decl_gethrtime" = xyes; then :
+
+fi
+
+ fi
+ if test "$ac_cv_func_gethrtime" = "yes" -a \
+ "$ac_cv_has_decl_gethrtime" = "yes" -a \
+ "$pac_cv_hrtime_works" = "yes" ; then
+ timer_type=gethrtime
+ elif test "$ac_cv_func_clock_gettime" = "yes" -a \
+ "$ac_cv_func_clock_getres" = "yes" ; then
+ # Test on both because some systems (e.g., cygwin) provide
+ # clock_gettime but not clock_getres
+ timer_type=clock_gettime
+ elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
+ timer_type=mach_absolute_time
+ elif test "$ac_cv_func_gettimeofday" = "yes" ; then
+ timer_type=gettimeofday
+ fi
+fi
+if test -z "$timer_type" ; then
+ as_fn_error $? "No timer found" "$LINENO" 5
+fi
+
+# Check for valid timer and select datatypes for the time stamp
+case "$timer_type" in
+
+ gethrtime)
+ MPL_TIMER_TYPE=hrtime_t
+ ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes; then :
+
+else
+
+ as_fn_error $? "Requested timer gethrtime is not available" "$LINENO" 5
+
+fi
+
+ ;;
+
+ clock_gettime)
+ missing_function=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime ();
+int
+main ()
+{
+return clock_gettime ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_clock_gettime=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_clock_gettime+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+
+else
+ ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+ as_fn_error $? "clock_gettime is not available" "$LINENO" 5
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_getres" >&5
+$as_echo_n "checking for library containing clock_getres... " >&6; }
+if ${ac_cv_search_clock_getres+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_getres ();
+int
+main ()
+{
+return clock_getres ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_clock_getres=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_clock_getres+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_clock_getres+:} false; then :
+
+else
+ ac_cv_search_clock_getres=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_getres" >&5
+$as_echo "$ac_cv_search_clock_getres" >&6; }
+ac_res=$ac_cv_search_clock_getres
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+ as_fn_error $? "clock_getres is not available" "$LINENO" 5
+fi
+
+ MPL_TIMER_TYPE="struct timespec"
+ # AIX does not always define struct timespec (!)
+ # Make sure that we can use struct timespec
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h" >&5
+$as_echo_n "checking whether struct timespec is defined in time.h... " >&6; }
+if ${pac_cv_struct_timespec_defined+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <time.h>
+int
+main ()
+{
+
+ struct timespec t;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_struct_timespec_defined=yes
+else
+ pac_cv_struct_timespec_defined=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined" >&5
+$as_echo "$pac_cv_struct_timespec_defined" >&6; }
+ if test "$pac_cv_struct_timespec_defined" != "yes" ; then
+ # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500" >&5
+$as_echo_n "checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500... " >&6; }
+if ${pac_cv_struct_timespec_defined_with_xopen500+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _XOPEN_SOURCE 500
+#include <time.h>
+int
+main ()
+{
+
+ struct timespec t;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_struct_timespec_defined_with_xopen500=yes
+else
+ pac_cv_struct_timespec_defined_with_xopen500=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined_with_xopen500" >&5
+$as_echo "$pac_cv_struct_timespec_defined_with_xopen500" >&6; }
+ if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
+ # We need to define _XOPEN_SOURCE=500, but we need to ensure that
+ # this is done before any include files are loaded. At
+ # this point it is really too late to add this definition,
+ # since it may make other tests incompatible.
+ as_fn_error $? "The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure" "$LINENO" 5
+ fi
+ fi
+ #
+ # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
+ # time.h is required (see pages 45 and 46 in the POSIX standard).
+ # See if we can compile
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLOCK_REALTIME defined in time.h" >&5
+$as_echo_n "checking for CLOCK_REALTIME defined in time.h... " >&6; }
+if ${pac_cv_posix_clock_realtime+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <time.h>
+int
+main ()
+{
+
+ clockid_t cid = CLOCK_REALTIME;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_posix_clock_realtime=yes
+else
+ pac_cv_posix_clock_realtime=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_posix_clock_realtime" >&5
+$as_echo "$pac_cv_posix_clock_realtime" >&6; }
+ if test "$pac_cv_posix_clock_realtime" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: POSIX timer requires definitions in time.h" >&5
+$as_echo "$as_me: WARNING: POSIX timer requires definitions in time.h" >&2;}
+ # Check for the definition in sys/time.h, which is where
+ # OpenBSD and FreeBSD have put it by mistake
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <time.h>
+#include <sys/time.h>
+int
+main ()
+{
+
+ clockid_t cid = CLOCK_REALTIME;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_posix_clock_realtime=yes
+else
+ pac_cv_posix_clock_realtime=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$pac_cv_posix_clock_realtime" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sys/time.h required for POSIX timer" >&5
+$as_echo "$as_me: WARNING: sys/time.h required for POSIX timer" >&2;}
+
+$as_echo "#define NEEDS_SYS_TIME_H 1" >>confdefs.h
+
+ else
+ as_fn_error $? "Cannot find the definition of CLOCK_REALTIME for the POSIX timer" "$LINENO" 5
+ fi
+ fi
+ ;;
+
+ gettimeofday)
+ MPL_TIMER_TYPE="struct timeval"
+ # We may have already tested for gettimeofday. If we got a "yes",
+ # we're good to go
+ if test "$ac_cv_func_gettimeofday" != "yes" ; then
+ ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes; then :
+
+else
+
+ as_fn_error $? "Requested timer gettimeofday is not available" "$LINENO" 5
+
+fi
+
+ fi
+ ;;
+
+ linux86_cycle|linux86_cycle_2)
+
+# The following AC_TRY_RUN statements are needed because x86_64 compilers
+# usually know about rdtscp but the cpu may or may not actually implement the
+# feature. This is not cross-compile safe, unfortunately. In the long run we
+# should allow the user to override this with a configure flag.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that linux86 cycle counter is available" >&5
+$as_echo_n "checking that linux86 cycle counter is available... " >&6; }
+if ${pac_cv_linux86_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtscp
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc64
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc32
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtsc
+else
+ pac_cv_linux86_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* rdtscp */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtscp
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* cpuid 64 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc64
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* cpuid 32 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc32
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* simple */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtsc
+else
+ pac_cv_linux86_cycle=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_linux86_cycle" >&5
+$as_echo "$pac_cv_linux86_cycle" >&6; }
+
+ case "$pac_cv_linux86_cycle" in
+ "rdtscp")
+
+$as_echo "#define LINUX86_CYCLE_RDTSCP 1" >>confdefs.h
+
+ ;;
+ "cpuid_rdtsc64")
+
+$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC64 1" >>confdefs.h
+
+ ;;
+ "cpuid_rdtsc32")
+
+$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC32 1" >>confdefs.h
+
+ ;;
+ "rdtsc")
+
+$as_echo "#define LINUX86_CYCLE_RDTSC 1" >>confdefs.h
+
+ ;;
+ *)
+ cpu_gcc_x86_cycle=no
+ ;;
+ esac
+
+ if test "$cpu_gcc_x86_cycle" = "no" ; then
+ as_fn_error $? "Linux86 cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="long long"
+ ;;
+
+ gcc_ia64_cycle)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that IPF timer is available" >&5
+$as_echo_n "checking that IPF timer is available... " >&6; }
+if ${pac_cv_ia64_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long var, *var_ptr=&var;
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ var=__getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gcc_ia64_cycle=yes
+else
+ pac_cv_gcc_ia64_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_ia64_cycle" >&5
+$as_echo "$pac_cv_ia64_cycle" >&6; }
+ if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
+ as_fn_error $? "IPF cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="long"
+ ;;
+
+ mach_absolute_time)
+ ac_fn_c_check_func "$LINENO" "mach_absolute_time" "ac_cv_func_mach_absolute_time"
+if test "x$ac_cv_func_mach_absolute_time" = xyes; then :
+
+else
+ as_fn_error $? "mach_absolute_time is not available" "$LINENO" 5
+fi
+
+ ac_fn_c_check_func "$LINENO" "mach_timebase_info" "ac_cv_func_mach_timebase_info"
+if test "x$ac_cv_func_mach_timebase_info" = xyes; then :
+
+else
+ as_fn_error $? "mach_timebase_info is not available" "$LINENO" 5
+fi
+
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+
+ device)
+ # The device selected should export the datatype for the timer
+ MPL_TIMER_TYPE="void *"
+ ;;
+
+ ppc64_cycle)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that ppc64 timebase cycle counter is available" >&5
+$as_echo_n "checking that ppc64 timebase cycle counter is available... " >&6; }
+if ${pac_cv_ppc64_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+
+ unsigned temp;
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (0x10D));
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_ppc64_cycle=yes
+else
+ pac_cv_ppc64_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_ppc64_cycle" >&5
+$as_echo "$pac_cv_ppc64_cycle" >&6; }
+ if test "pac_cv_ppc64_cycle" != "yes" ; then
+ as_fn_error $? "The PPC64 cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+ *)
+ as_fn_error $? "Invalid timer type $timer_type" "$LINENO" 5
+ ;;
+esac
+# Convert timer type to upper case
+timer_type=`echo $timer_type | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+MPL_TIMER_KIND=MPL_TIMER_KIND__$timer_type
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Timer type selected is $timer_type" >&5
+$as_echo "$as_me: Timer type selected is $timer_type" >&6;}
+
+#######################################################################
+## END OF TIMER CODE
+#######################################################################
+
+
+#######################################################################
+## START OF PROCESSOR YIELD CODE
+#######################################################################
+# If the user specified a method to use, we check if it's available.
+# If a method was not specified, we make a guess based on the OS. The
+# default is to use sched_yield() or yield() if one is available,
+# otherwise, default to nothing. After that we define the appropriate
+# macro.
+
+for ac_header in sched.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
+if test "x$ac_cv_header_sched_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHED_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in unistd.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_UNISTD_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in sys/select.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SELECT_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in sched_yield yield usleep sleep select
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep needs a declaration" >&5
+$as_echo_n "checking whether usleep needs a declaration... " >&6; }
+if ${pac_cv_func_decl_usleep+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))usleep;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_usleep=no
+else
+ pac_cv_func_decl_usleep=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_usleep" >&5
+$as_echo "$pac_cv_func_decl_usleep" >&6; }
+if test "$pac_cv_func_decl_usleep" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_USLEEP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check whether --enable-yield was given.
+if test "${enable_yield+set}" = set; then :
+ enableval=$enable_yield; case $enableval in #(
+ sched_yield) :
+ if test "x$ac_cv_func_sched_yield" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ yield) :
+ if test "x$ac_cv_func_yield" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ select) :
+ if test "x$ac_cv_func_select" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ usleep) :
+ if test "x$ac_cv_func_usleep" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ sleep) :
+ if test "x$ac_cv_func_sleep" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ nothing|no|none) :
+ ;; #(
+ *) :
+ as_fn_error $? "Invalid option $enableval for --enable-yield" "$LINENO" 5 ;;
+esac
+
+ if test "x$enable_yield" = "xunavail"; then :
+ as_fn_error $? "Yield method $enableval is not available on this platform." "$LINENO" 5
+fi
+
+else
+ # none specified by user; make a guess based on os
+ case $host in #(
+ *-*-darwin*) :
+ # In Lion, sched_yield worked but none of the other options had any effect
+ if test "x$ac_cv_func_sched_yield" = "xyes"; then :
+ enable_yield=sched_yield
+else
+ enable_yield=nothing
+fi ;; #(
+ *-*-linux*) :
+ # sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
+ enable_yield=nothing ;; #(
+ *) :
+ # default: just use sched_yield() or yield()
+ if test "x$ac_cv_func_sched_yield" = "xyes"; then :
+ enable_yield=sched_yield
+elif test "x$ac_cv_func_yield" = "xyes"; then :
+ enable_yield=yield
+else
+ enable_yield=nothing
+fi ;;
+esac
+
+
+fi
+
+
+# set the appropriate macro
+case $enable_yield in #(
+ sched_yield) :
+
+$as_echo "#define USE_SCHED_YIELD_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ yield) :
+
+$as_echo "#define USE_YIELD_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ select) :
+
+$as_echo "#define USE_SELECT_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ usleep) :
+
+$as_echo "#define USE_USLEEP_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ sleep) :
+
+$as_echo "#define USE_SLEEP_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ nothing|no|none) :
+
+$as_echo "#define USE_NOTHING_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ *) :
+ as_fn_error $? "Invalid value $enable_yield for enable_yield." "$LINENO" 5
+ ;;
+esac
+
+#######################################################################
+## END OF PROCESSOR YIELD CODE
+#######################################################################
+
+
+#######################################################################
+## START OF THREADS CODE
+#######################################################################
+
+# Check whether --with-thread-package was given.
+if test "${with_thread_package+set}" = set; then :
+ withval=$with_thread_package;
+else
+ with_thread_package=posix
+fi
+
+
+if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
+ with_thread_package=none
+fi
+
+if test "${with_thread_package}" = "yes" ; then
+ with_thread_package=posix
+fi
+
+if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
+ as_fn_error $? "if no thread package is available, use --enable-threads=single or funneled" "$LINENO" 5
+fi
+
+THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_INVALID
+case $with_thread_package in
+ posix|pthreads)
+ with_thread_package=posix
+ for ac_header in pthread.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_H 1
+_ACEOF
+
+fi
+
+done
+
+
+ # If pthreads library is found, just include it on the link line. We don't try
+ # to test if the C compiler needs it or not, since the C++ or Fortran
+ # compilers might need it even if the C compiler doesn't
+ # (nvcc with gfortran, for example).
+ #
+ # OSF1 has __pthread_create but not pthread_create (because of
+ # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_key_create in -lpthread" >&5
+$as_echo_n "checking for pthread_key_create in -lpthread... " >&6; }
+if ${ac_cv_lib_pthread_pthread_key_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_key_create ();
+int
+main ()
+{
+return pthread_key_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthread_pthread_key_create=yes
+else
+ ac_cv_lib_pthread_pthread_key_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_key_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_key_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_key_create" = xyes; then :
+ have_pthreads=yes
+fi
+
+ if test "$have_pthreads" = "yes" ; then
+
+
+ if echo "$LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-lpthread', not prepending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-lpthread', prepending" >&5
+ LIBS="-lpthread $LIBS"
+
+fi
+
+ fi
+
+ for ac_func in pthread_yield
+do :
+ ac_fn_c_check_func "$LINENO" "pthread_yield" "ac_cv_func_pthread_yield"
+if test "x$ac_cv_func_pthread_yield" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_YIELD 1
+_ACEOF
+
+fi
+done
+
+
+ # this check should come after the AC_CHECK_LIB for -lpthread
+ ac_fn_c_check_func "$LINENO" "pthread_key_create" "ac_cv_func_pthread_key_create"
+if test "x$ac_cv_func_pthread_key_create" = xyes; then :
+
+else
+ as_fn_error $? "unable to find pthreads library" "$LINENO" 5
+fi
+
+
+ # Check for a routine that specify a routine to call on
+ # thread exit. We can use this to release memory that may
+ # be allocated by the MPL library in the thread.
+ # A complication: pthread_cleanup_push may be a macro; in that
+ # case, check_funcs will fail to find it.
+ # Under OSX, pthread_cleanup_push and pop are macros that must
+ # appear together in the same lexical scope, and hence are
+ # really useless in libraries that may allocate data within
+ # a user-managed thread.
+ for ac_func in pthread_cleanup_push
+do :
+ ac_fn_c_check_func "$LINENO" "pthread_cleanup_push" "ac_cv_func_pthread_cleanup_push"
+if test "x$ac_cv_func_pthread_cleanup_push" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_CLEANUP_PUSH 1
+_ACEOF
+
+fi
+done
+
+ if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_cleanup_push is available (may be a macro in pthread.h)" >&5
+$as_echo_n "checking whether pthread_cleanup_push is available (may be a macro in pthread.h)... " >&6; }
+if ${pac_cv_func_pthread_cleanup_push+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <pthread.h>
+void f1(void *a) { return; }
+int
+main ()
+{
+pthread_cleanup_push( f1, (void *)0 );
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_func_pthread_cleanup_push=yes
+else
+ pac_cv_func_pthread_cleanup_push=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_pthread_cleanup_push" >&5
+$as_echo "$pac_cv_func_pthread_cleanup_push" >&6; }
+ if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
+
+$as_echo "#define HAVE_PTHREAD_CLEANUP_PUSH_MACRO 1" >>confdefs.h
+
+ fi
+
+ fi
+
+ # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP" >&5
+$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP... " >&6; }
+if ${pac_cv_has_pthread_mutex_errorcheck_np+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int a=PTHREAD_MUTEX_ERRORCHECK_NP;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_has_pthread_mutex_errorcheck_np=yes
+else
+ pac_cv_has_pthread_mutex_errorcheck_np=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck_np" >&5
+$as_echo "$pac_cv_has_pthread_mutex_errorcheck_np" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK" >&5
+$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK... " >&6; }
+if ${pac_cv_has_pthread_mutex_errorcheck+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int a=PTHREAD_MUTEX_ERRORCHECK;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_has_pthread_mutex_errorcheck=yes
+else
+ pac_cv_has_pthread_mutex_errorcheck=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck" >&5
+$as_echo "$pac_cv_has_pthread_mutex_errorcheck" >&6; }
+
+ if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
+
+$as_echo "#define PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK" >>confdefs.h
+
+ elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
+
+$as_echo "#define PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK_NP" >>confdefs.h
+
+ fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_mutexattr_settype needs a declaration" >&5
+$as_echo_n "checking whether pthread_mutexattr_settype needs a declaration... " >&6; }
+if ${pac_cv_func_decl_pthread_mutexattr_settype+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+void (*fptr)(void) = (void(*)(void))pthread_mutexattr_settype;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_pthread_mutexattr_settype=no
+else
+ pac_cv_func_decl_pthread_mutexattr_settype=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_pthread_mutexattr_settype" >&5
+$as_echo "$pac_cv_func_decl_pthread_mutexattr_settype" >&6; }
+if test "$pac_cv_func_decl_pthread_mutexattr_settype" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL 1
+_ACEOF
+
+
+fi
+
+
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_POSIX
+ ;;
+ solaris)
+ for ac_header in thread.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "thread.h" "ac_cv_header_thread_h" "$ac_includes_default"
+if test "x$ac_cv_header_thread_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_THREAD_H 1
+_ACEOF
+
+fi
+
+done
+
+ for ac_func in thr_yield
+do :
+ ac_fn_c_check_func "$LINENO" "thr_yield" "ac_cv_func_thr_yield"
+if test "x$ac_cv_func_thr_yield" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_THR_YIELD 1
+_ACEOF
+
+fi
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing thr_create" >&5
+$as_echo_n "checking for library containing thr_create... " >&6; }
+if ${ac_cv_search_thr_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char thr_create ();
+int
+main ()
+{
+return thr_create ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' thread; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_thr_create=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_thr_create+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_thr_create+:} false; then :
+
+else
+ ac_cv_search_thr_create=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_thr_create" >&5
+$as_echo "$ac_cv_search_thr_create" >&6; }
+ac_res=$ac_cv_search_thr_create
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ found=yes
+else
+ found=no
+fi
+
+ if test "$found" != "yes" ; then
+ as_fn_error $? "unable to find Solaris threads library" "$LINENO" 5
+ fi
+ # FIXME: need to add -mt if using solaris compilers
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_SOLARIS
+ ;;
+ win|windows)
+ with_thread_package=win
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_WIN
+ as_fn_error $? "The 'win' thread package is not supported via autoconf builds at this time." "$LINENO" 5
+ ;;
+ no|none)
+ with_thread_package=none
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_NONE
+ ;;
+ *)
+ as_fn_error $? "The specified thread package, $with_thread_package, is not supported." "$LINENO" 5
+ ;;
+esac
+
+# Define and export the selected thread library so that other packages
+# know what's used in MPL
+
+cat >>confdefs.h <<_ACEOF
+#define THREAD_PACKAGE_NAME $THREAD_PACKAGE_NAME
+_ACEOF
+
+
+# check for compiler-support for thread-local storage (MPL_TLS_SPECIFIER)
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage specifier" >&5
+$as_echo_n "checking for thread local storage specifier... " >&6; }
+ if ${ac_cv_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
+ for ax_tls_keyword in $ax_tls_keywords; do
+ case $ax_tls_keyword in
+ none) ac_cv_tls=none ; break ;;
+ *)
+ # MPICH modification: This was an AC_TRY_COMPILE before, but
+ # Darwin with non-standard compilers will accept __thread at
+ # compile time but fail to link due to an undefined
+ # "__emutls_get_address" symbol unless -lgcc_eh is added to the
+ # link line.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ax_tls_keyword int bar = 5;
+int
+main ()
+{
+++bar;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_tls=$ax_tls_keyword
+else
+ ac_cv_tls=none
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ # MPICH modification: Also test with the extern keyword.
+ # The intel compiler on Darwin (at least as of 15.0.1)
+ # seems to break with the above error when the extern
+ # keyword is specified in shared library builds.
+
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+
+
+
+ if echo "$LIBS" | $FGREP -e "\<-shared\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-shared', not appending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-shared', appending" >&5
+ LIBS="$LIBS -shared"
+
+fi
+
+ if test "$ac_cv_tls" != "none" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+
+int
+main ()
+{
+++bar;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_tls=$ax_tls_keyword
+else
+ ac_cv_tls=none
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+
+
+ if test "$ac_cv_tls" != "none" ; then break ; fi
+ esac
+ done
+
+fi
+
+
+ if test "$ac_cv_tls" != "none"; then
+
+cat >>confdefs.h <<_ACEOF
+#define TLS_SPECIFIER $ac_cv_tls
+_ACEOF
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
+$as_echo "$ac_cv_tls" >&6; }
+
+
+#######################################################################
+## END OF THREADS CODE
+#######################################################################
+
+
+#######################################################################
+## START OF DBG CODE
+#######################################################################
+
+# mkstemp() is a better replacement for mktemp()
+for ac_func in mkstemp
+do :
+ ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_MKSTEMP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_mkstemp" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkstemp needs a declaration" >&5
+$as_echo_n "checking whether mkstemp needs a declaration... " >&6; }
+if ${pac_cv_func_decl_mkstemp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))mkstemp;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_mkstemp=no
+else
+ pac_cv_func_decl_mkstemp=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_mkstemp" >&5
+$as_echo "$pac_cv_func_decl_mkstemp" >&6; }
+if test "$pac_cv_func_decl_mkstemp" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_MKSTEMP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+# fdopen() converts from an fd to a FILE*
+for ac_func in fdopen
+do :
+ ac_fn_c_check_func "$LINENO" "fdopen" "ac_cv_func_fdopen"
+if test "x$ac_cv_func_fdopen" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_FDOPEN 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_fdopen" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fdopen needs a declaration" >&5
+$as_echo_n "checking whether fdopen needs a declaration... " >&6; }
+if ${pac_cv_func_decl_fdopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))fdopen;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_fdopen=no
+else
+ pac_cv_func_decl_fdopen=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_fdopen" >&5
+$as_echo "$pac_cv_func_decl_fdopen" >&6; }
+if test "$pac_cv_func_decl_fdopen" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_FDOPEN_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+for ac_func in getpid
+do :
+ ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid"
+if test "x$ac_cv_func_getpid" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GETPID 1
+_ACEOF
+
+fi
+done
+
+
+#######################################################################
+## END OF DBG CODE
+#######################################################################
+
+#######################################################################
+## START OF SHM CODE
+#######################################################################
+
+
+
+# check how to allocate shared memory
+
+# Check whether --with-shared-memory was given.
+if test "${with_shared_memory+set}" = set; then :
+ withval=$with_shared_memory;
+else
+ with_shared_memory=auto
+fi
+
+
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
+ found_mmap_funcs=yes
+ for ac_func in mmap munmap
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ found_mmap_funcs=no
+fi
+done
+
+ if test "$found_mmap_funcs" = yes ; then
+ with_shared_memory=mmap
+
+$as_echo "#define USE_MMAP_SHM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using a memory-mapped file for shared memory" >&5
+$as_echo "$as_me: Using a memory-mapped file for shared memory" >&6;}
+ elif test "$with_shared_memory" = mmap ; then
+ as_fn_error $? "cannot support shared memory: mmap() or munmap() not found" "$LINENO" 5
+ fi
+fi
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
+ found_sysv_shm_funcs=yes
+ for ac_func in shmget shmat shmctl shmdt
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ found_sysv_shm_funcs=no
+fi
+done
+
+ if test "$found_sysv_shm_funcs" = yes ; then
+ with_shared_memory=sysv
+
+$as_echo "#define USE_SYSV_SHM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using SYSV shared memory" >&5
+$as_echo "$as_me: Using SYSV shared memory" >&6;}
+ elif test "$with_shared_memory" = sysv ; then
+ as_fn_error $? "cannot support shared memory: sysv shared memory functions functions not found" "$LINENO" 5
+ fi
+fi
+
+
+case $with_shared_memory in
+ sysv)
+
+$as_echo "#define MPL_USE_SYSV_SHM 1" >>confdefs.h
+
+ ;;
+ mmap)
+
+$as_echo "#define MPL_USE_MMAP_SHM 1" >>confdefs.h
+
+ ;;
+ nt)
+
+$as_echo "#define MPL_USE_NT_SHM 1" >>confdefs.h
+
+ ;;
+ *)
+ as_fn_error $? "cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory" "$LINENO" 5
+esac
+
+
+#######################################################################
+## END OF SHM CODE
+#######################################################################
+
+## Enable creation of libtool-style versioning or no versioning
+# Check whether --enable-versioning was given.
+if test "${enable_versioning+set}" = set; then :
+ enableval=$enable_versioning;
+else
+ enable_versioning=yes
+fi
+
+
+if test "$enable_versioning" = "yes" ; then
+ libmpl_so_versionflags="-version-info \$(libmpl_so_version)"
+else
+ libmpl_so_versionflags="-avoid-version"
+fi
+export libmpl_so_versionflags
+
+
+#######################################################################
+
+
+# Check for strdup
+for ac_func in strdup
+do :
+ ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRDUP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strdup" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
+$as_echo_n "checking whether strdup needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strdup+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strdup;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strdup=no
+else
+ pac_cv_func_decl_strdup=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
+$as_echo "$pac_cv_func_decl_strdup" >&6; }
+if test "$pac_cv_func_decl_strdup" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRDUP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for snprintf
+for ac_func in snprintf
+do :
+ ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_snprintf" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
+$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_snprintf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+void (*fptr)(void) = (void(*)(void))snprintf;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_snprintf=no
+else
+ pac_cv_func_decl_snprintf=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
+$as_echo "$pac_cv_func_decl_snprintf" >&6; }
+if test "$pac_cv_func_decl_snprintf" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_SNPRINTF_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for strncmp
+for ac_func in strncmp
+do :
+ ac_fn_c_check_func "$LINENO" "strncmp" "ac_cv_func_strncmp"
+if test "x$ac_cv_func_strncmp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCMP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strncmp" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strncmp needs a declaration" >&5
+$as_echo_n "checking whether strncmp needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strncmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strncmp;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strncmp=no
+else
+ pac_cv_func_decl_strncmp=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strncmp" >&5
+$as_echo "$pac_cv_func_decl_strncmp" >&6; }
+if test "$pac_cv_func_decl_strncmp" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRNCMP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for putenv
+for ac_func in putenv
+do :
+ ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
+if test "x$ac_cv_func_putenv" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PUTENV 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_putenv" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether putenv needs a declaration" >&5
+$as_echo_n "checking whether putenv needs a declaration... " >&6; }
+if ${pac_cv_func_decl_putenv+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))putenv;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_putenv=no
+else
+ pac_cv_func_decl_putenv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_putenv" >&5
+$as_echo "$pac_cv_func_decl_putenv" >&6; }
+if test "$pac_cv_func_decl_putenv" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_PUTENV_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for strerror
+for ac_func in strerror
+do :
+ ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRERROR 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strerror" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror needs a declaration" >&5
+$as_echo_n "checking whether strerror needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strerror+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strerror;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strerror=no
+else
+ pac_cv_func_decl_strerror=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strerror" >&5
+$as_echo "$pac_cv_func_decl_strerror" >&6; }
+if test "$pac_cv_func_decl_strerror" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRERROR_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for usleep
+for ac_func in usleep
+do :
+ ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
+if test "x$ac_cv_func_usleep" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_USLEEP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep needs a declaration" >&5
+$as_echo_n "checking whether usleep needs a declaration... " >&6; }
+if ${pac_cv_func_decl_usleep+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))usleep;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_usleep=no
+else
+ pac_cv_func_decl_usleep=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_usleep" >&5
+$as_echo "$pac_cv_func_decl_usleep" >&6; }
+if test "$pac_cv_func_decl_usleep" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_USLEEP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+for ac_func in backtrace_symbols
+do :
+ ac_fn_c_check_func "$LINENO" "backtrace_symbols" "ac_cv_func_backtrace_symbols"
+if test "x$ac_cv_func_backtrace_symbols" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_BACKTRACE_SYMBOLS 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for backtrace_create_state in -lbacktrace" >&5
+$as_echo_n "checking for backtrace_create_state in -lbacktrace... " >&6; }
+if ${ac_cv_lib_backtrace_backtrace_create_state+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbacktrace $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char backtrace_create_state ();
+int
+main ()
+{
+return backtrace_create_state ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_backtrace_backtrace_create_state=yes
+else
+ ac_cv_lib_backtrace_backtrace_create_state=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_backtrace_backtrace_create_state" >&5
+$as_echo "$ac_cv_lib_backtrace_backtrace_create_state" >&6; }
+if test "x$ac_cv_lib_backtrace_backtrace_create_state" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBBACKTRACE 1
+_ACEOF
+
+ LIBS="-lbacktrace $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unw_backtrace in -lunwind" >&5
+$as_echo_n "checking for unw_backtrace in -lunwind... " >&6; }
+if ${ac_cv_lib_unwind_unw_backtrace+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lunwind $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char unw_backtrace ();
+int
+main ()
+{
+return unw_backtrace ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_unwind_unw_backtrace=yes
+else
+ ac_cv_lib_unwind_unw_backtrace=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_unwind_unw_backtrace" >&5
+$as_echo "$ac_cv_lib_unwind_unw_backtrace" >&6; }
+if test "x$ac_cv_lib_unwind_unw_backtrace" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUNWIND 1
+_ACEOF
+
+ LIBS="-lunwind $LIBS"
+
+fi
+
+
+ac_fn_c_check_decl "$LINENO" "backtrace_create_state" "ac_cv_have_decl_backtrace_create_state" "$ac_includes_default"
+if test "x$ac_cv_have_decl_backtrace_create_state" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BACKTRACE_CREATE_STATE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "backtrace_print" "ac_cv_have_decl_backtrace_print" "$ac_includes_default"
+if test "x$ac_cv_have_decl_backtrace_print" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BACKTRACE_PRINT $ac_have_decl
+_ACEOF
+
+
+
+
+
+if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__ allowed" >&5
+$as_echo_n "checking whether __attribute__ allowed... " >&6; }
+if ${pac_cv_gnu_attr_pure+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(int) __attribute__ ((pure));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gnu_attr_pure=yes
+else
+ pac_cv_gnu_attr_pure=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_pure" >&5
+$as_echo "$pac_cv_gnu_attr_pure" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __attribute__((format)) allowed" >&5
+$as_echo_n "checking whether __attribute__((format)) allowed... " >&6; }
+if ${pac_cv_gnu_attr_format+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(char *,...) __attribute__ ((format(printf,1,2)));
+int
+main ()
+{
+int a;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gnu_attr_format=yes
+else
+ pac_cv_gnu_attr_format=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_gnu_attr_format" >&5
+$as_echo "$pac_cv_gnu_attr_format" >&6; }
+ if test "$pac_cv_gnu_attr_pure" = "yes" -a "$pac_cv_gnu_attr_format" = "yes" ; then
+
+$as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
+
+ fi
+fi
+
+
+ac_config_files="$ac_config_files Makefile localdefs include/mpl_timer.h"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPL_EMBEDDED_MODE_TRUE}" && test -z "${MPL_EMBEDDED_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MPL_EMBEDDED_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_COVERAGE_TRUE}" && test -z "${BUILD_COVERAGE_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_COVERAGE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by MPL $as_me 0.1, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+MPL config.status 0.1
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+PACKAGE="$PACKAGE"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+ "include/mplconfig.h") CONFIG_COMMANDS="$CONFIG_COMMANDS include/mplconfig.h" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "localdefs") CONFIG_FILES="$CONFIG_FILES localdefs" ;;
+ "include/mpl_timer.h") CONFIG_FILES="$CONFIG_FILES include/mpl_timer.h" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=''
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ "include/mplconfig.h":C) ac_prefix_conf_OUT=`echo include/mplconfig.h`
+ac_prefix_conf_DEF=`echo _$ac_prefix_conf_OUT | sed -e "y:abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:" -e "s/[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g"`
+ac_prefix_conf_PKG=`echo MPL`
+ac_prefix_conf_LOW=`echo _$ac_prefix_conf_PKG | sed -e "y:ABCDEFGHIJKLMNOPQRSTUVWXYZ-:abcdefghijklmnopqrstuvwxyz_:"`
+ac_prefix_conf_UPP=`echo $ac_prefix_conf_PKG | sed -e "y:abcdefghijklmnopqrstuvwxyz-:ABCDEFGHIJKLMNOPQRSTUVWXYZ_:" -e "/^[0123456789]/s/^/_/"`
+ac_prefix_conf_INP=`echo "" | sed -e 's/ *//'`
+if test ".$ac_prefix_conf_INP" = "."; then
+ for ac_file in : $CONFIG_HEADERS; do test "_$ac_file" = _: && continue
+ case "$ac_file" in
+ *.h) ac_prefix_conf_INP=$ac_file ;;
+ *)
+ esac
+ test ".$ac_prefix_conf_INP" != "." && break
+ done
+fi
+if test ".$ac_prefix_conf_INP" = "."; then
+ case "$ac_prefix_conf_OUT" in
+ */*) ac_prefix_conf_INP=`basename "$ac_prefix_conf_OUT"`
+ ;;
+ *-*) ac_prefix_conf_INP=`echo "$ac_prefix_conf_OUT" | sed -e "s/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*-//"`
+ ;;
+ *) ac_prefix_conf_INP=config.h
+ ;;
+ esac
+fi
+if test -z "$ac_prefix_conf_PKG" ; then
+ as_fn_error $? "no prefix for _PREFIX_PKG_CONFIG_H" "$LINENO" 5
+else
+ if test ! -f "$ac_prefix_conf_INP" ; then if test -f "$srcdir/$ac_prefix_conf_INP" ; then
+ ac_prefix_conf_INP="$srcdir/$ac_prefix_conf_INP"
+ fi fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines" >&5
+$as_echo "$as_me: creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines" >&6;}
+ if test -f $ac_prefix_conf_INP ; then
+ echo "s/^#undef *\\([ABCDEFGHIJKLMNOPQRSTUVWXYZ_]\\)/#undef $ac_prefix_conf_UPP""_\\1/" > conftest.prefix
+ echo "s/^#undef *\\([abcdefghijklmnopqrstuvwxyz]\\)/#undef $ac_prefix_conf_LOW""_\\1/" >> conftest.prefix
+ echo "s/^#define *\\([ABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*\\)\\(.*\\)/#ifndef $ac_prefix_conf_UPP""_\\1 \\" >> conftest.prefix
+ echo "#define $ac_prefix_conf_UPP""_\\1 \\2 \\" >> conftest.prefix
+ echo "#endif/" >>conftest.prefix
+ echo "s/^#define *\\([abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*\\)\\(.*\\)/#ifndef $ac_prefix_conf_LOW""_\\1 \\" >> conftest.prefix
+ echo "#define $ac_prefix_conf_LOW""_\\1 \\2 \\" >> conftest.prefix
+ echo "#endif/" >> conftest.prefix
+ # now executing _script on _DEF input to create _OUT output file
+ echo "#ifndef $ac_prefix_conf_DEF" >$tmp/pconfig.h
+ echo "#define $ac_prefix_conf_DEF 1" >>$tmp/pconfig.h
+ echo ' ' >>$tmp/pconfig.h
+ echo /'*' $ac_prefix_conf_OUT. Generated automatically at end of configure. '*'/ >>$tmp/pconfig.h
+
+ sed -f conftest.prefix $ac_prefix_conf_INP >>$tmp/pconfig.h
+ echo ' ' >>$tmp/pconfig.h
+ echo '/* once:' $ac_prefix_conf_DEF '*/' >>$tmp/pconfig.h
+ echo "#endif" >>$tmp/pconfig.h
+ if cmp -s $ac_prefix_conf_OUT $tmp/pconfig.h 2>/dev/null; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_prefix_conf_OUT is unchanged" >&5
+$as_echo "$as_me: $ac_prefix_conf_OUT is unchanged" >&6;}
+ else
+ ac_dir=`$as_dirname -- "$ac_prefix_conf_OUT" ||
+$as_expr X"$ac_prefix_conf_OUT" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_prefix_conf_OUT" : 'X\(//\)[^/]' \| \
+ X"$ac_prefix_conf_OUT" : 'X\(//\)$' \| \
+ X"$ac_prefix_conf_OUT" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_prefix_conf_OUT" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ rm -f "$ac_prefix_conf_OUT"
+ mv $tmp/pconfig.h "$ac_prefix_conf_OUT"
+ fi
+ cp conftest.prefix _configs.sed
+ else
+ as_fn_error $? "input file $ac_prefix_conf_INP does not exist - skip generating $ac_prefix_conf_OUT" "$LINENO" 5
+ fi
+ rm -f conftest.*
+fi
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/src/mpi/romio/mpl/configure.ac b/src/mpi/romio/mpl/configure.ac
new file mode 100644
index 0000000..efff75b
--- /dev/null
+++ b/src/mpi/romio/mpl/configure.ac
@@ -0,0 +1,853 @@
+AC_PREREQ(2.63)
+#
+# (C) 2006 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+AC_INIT([MPL], [0.1])
+
+# sanity check that --srcdir was specified correctly
+AC_CONFIG_SRCDIR([src/str/mpl_str.c])
+
+AC_CONFIG_AUX_DIR(confdb)
+AC_CONFIG_MACRO_DIR(confdb)
+AM_INIT_AUTOMAKE([subdir-objects] [-Wall -Werror foreign 1.12.3])
+
+dnl must come before LT_INIT, which AC_REQUIREs AC_PROG_CC
+PAC_PROG_CC
+AM_PROG_CC_C_O
+
+AM_PROG_AR
+
+LT_PREREQ([2.2.6])
+
+# Bug in libtool adds -O2 and -g by default
+PAC_PUSH_FLAG([CFLAGS])
+LT_INIT()
+PAC_POP_FLAG([CFLAGS])
+
+# ----------------------------------------------------------------------------
+# Set default library names if names haven't already been provided
+AC_ARG_VAR([MPLLIBNAME],[can be used to override the name of the MPL library (default: "mpl")])
+MPLLIBNAME=${MPLLIBNAME:-"mpl"}
+AC_SUBST(MPLLIBNAME)
+export MPLLIBNAME
+
+if test -s "$srcdir/VERSION" ; then
+ . $srcdir/VERSION
+ AC_SUBST(libmpl_so_version)
+else
+ AC_MSG_ERROR([Version information not found. Configuration aborted.])
+fi
+
+AC_CONFIG_HEADER([include/config.h])
+AX_PREFIX_CONFIG_H([include/mplconfig.h],[MPL])
+
+# Non-verbose make
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_C_CONST
+AC_C_RESTRICT
+AC_C_INLINE
+
+PAC_C_MACRO_VA_ARGS
+PAC_C_BUILTIN_EXPECT
+
+AC_ARG_ENABLE(embedded,
+ AC_HELP_STRING([--enable-embedded], [Build MPL in embedded mode (default is no)]),
+ [embedded=yes],
+ [embedded=no])
+AM_CONDITIONAL([MPL_EMBEDDED_MODE],[test "x${embedded}" = "xyes"])
+
+AC_ARG_ENABLE(g,
+ AC_HELP_STRING([--enable-g=option],
+ [
+ Control the level of debugging support in MPL.
+ "option" is a list of comma separated names. Default
+ is "all".
+
+ none|no - No debugging
+ log - Enable debug event logging
+ mem - Enable memory tracing
+ yes|all - All of the above choices (except "none", obviously)
+ ]),,[enable_g=none])
+
+# enable-g
+# strip off multiple options, separated by commas
+PAC_PUSH_FLAG(IFS)
+IFS=","
+for option in $enable_g ; do
+ case "$option" in
+ log)
+ enable_g_log=yes
+ ;;
+
+ mem)
+ enable_g_mem=yes
+ ;;
+
+ all|yes)
+ enable_g_log=yes
+ enable_g_mem=yes
+ ;;
+
+ no|none)
+ ;;
+
+ *)
+ AC_MSG_WARN([Unknown value $option for enable-g])
+ ;;
+ esac
+done
+PAC_POP_FLAG(IFS)
+
+if test "$enable_g_log" = "yes" ; then
+ AC_DEFINE([USE_DBG_LOGGING],[1],[Define to enable logging macros])
+fi
+
+if test "$enable_g_mem" = "yes" ; then
+ AC_DEFINE([USE_MEMORY_TRACING],[1],[Define to enable memory tracing])
+fi
+
+
+# support gcov test coverage information
+PAC_ENABLE_COVERAGE
+
+# check for compiler support for the __typeof() extension
+AC_CACHE_CHECK([whether the compiler supports __typeof(variable)],
+ [pac_cv_have___typeof],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[double foo = 0.0; __typeof(foo) bar = 1.0;]])],
+ [pac_cv_have___typeof=yes],
+ [pac_cv_have___typeof=no])]
+)
+if test "$pac_cv_have___typeof" = "yes" ; then
+ AC_DEFINE([HAVE___TYPEOF],[1],[defined if the C compiler supports __typeof(variable)])
+fi
+
+dnl Check if the necessary headers are available
+AC_CHECK_HEADERS(stdio.h stdlib.h string.h stdarg.h ctype.h sys/types.h sys/uio.h execinfo.h backtrace.h libunwind.h unistd.h errno.h windows.h)
+
+# A C99 compliant compiler should have inttypes.h for fixed-size int types
+AC_CHECK_HEADERS(inttypes.h stdint.h)
+
+#######################################################################
+# valgrind support
+AC_ARG_WITH([valgrind],
+[AS_HELP_STRING([--without-valgrind],[to disable valgrind support (such as because of version issues)])]
+[AS_HELP_STRING([--with-valgrind=PATH],[use valgrind headers installed in PATH (default is "yes", use no special path)])],
+[],[with_valgrind=yes])
+if test "$with_valgrind" != "no" ; then
+ savedCPPFLAGS="$CPPFLAGS"
+ if test "$with_valgrind" != "yes" ; then
+ # Clients of MPL will either need to respect the localdefs file (as in
+ # MPICH) or add this entry to their own CPPFLAGS-equivalent.
+ # (TODO: a pkg-config file would help with this)
+ PAC_APPEND_FLAG([-I${with_valgrind}], [CPPFLAGS])
+ fi
+ # headers for valgrind client requests
+ AC_CHECK_HEADERS([valgrind.h memcheck.h valgrind/valgrind.h valgrind/memcheck.h])
+ # headers for valgrind-based thread checking tools
+ # TODO: incorporate ThreadSanitizer as well (include dynamic_annotations.h,
+ # link with dynamic_annotations.c)
+ AC_CHECK_HEADERS([helgrind.h valgrind/helgrind.h])
+ AC_CHECK_HEADERS([drd.h valgrind/drd.h])
+
+ # ensure that we have a new enough valgrind with all the client macros
+ # a preproc test would probably be sufficient, but the LINK_IFELSE helps us
+ # double-check that we aren't accidentally grabbing the headers for some
+ # other platform
+ AC_CACHE_CHECK([whether the valgrind headers are broken or too old],
+ [pac_cv_have_broken_valgrind],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([
+#if defined(HAVE_VALGRIND_H) && defined(HAVE_MEMCHECK_H)
+# include <valgrind.h>
+# include <memcheck.h>
+#elif defined(HAVE_VALGRIND_VALGRIND_H) && defined(HAVE_VALGRIND_MEMCHECK_H)
+# include <valgrind/valgrind.h>
+# include <valgrind/memcheck.h>
+#else
+# error unexpected valgrind header error
+#endif
+int foo = 10;
+char mempool_obj;
+],[
+#if defined(VALGRIND_MAKE_MEM_DEFINED)
+ VALGRIND_MAKE_MEM_NOACCESS(&foo,sizeof(foo));
+ VALGRIND_MAKE_MEM_UNDEFINED(&foo,sizeof(foo));
+ VALGRIND_MAKE_MEM_DEFINED(&foo,sizeof(foo));
+ VALGRIND_CHECK_MEM_IS_DEFINED(&foo,sizeof(foo));
+ VALGRIND_CHECK_MEM_IS_ADDRESSABLE(&foo,sizeof(foo));
+#elif defined(VALGRIND_MAKE_READABLE)
+/* older (pre-3.2.0), but still supported style */
+ VALGRIND_MAKE_READABLE(&foo,sizeof(foo));
+ VALGRIND_MAKE_NOACCESS(&foo,sizeof(foo));
+ VALGRIND_MAKE_UNDEFINED(&foo,sizeof(foo));
+ VALGRIND_CHECK_READABLE(&foo,sizeof(foo));
+ VALGRIND_CHECK_WRITEABLE(&foo,sizeof(foo));
+#else
+#error missing essential valgrind client macros
+#endif
+ VALGRIND_CREATE_BLOCK(&foo,sizeof(foo),"description");
+ if (RUNNING_ON_VALGRIND) ++foo;
+ VALGRIND_PRINTF_BACKTRACE("testing: %s","valgrind support");
+ VALGRIND_CREATE_MEMPOOL(&mempool_obj,0,0);
+ VALGRIND_MEMPOOL_ALLOC(&mempool_obj,&foo,sizeof(foo));
+ VALGRIND_MEMPOOL_FREE(&mempool_obj,&foo);
+ VALGRIND_DESTROY_MEMPOOL(&mempool_obj);
+]) dnl end PROGRAM
+ ],
+ [pac_cv_have_broken_valgrind=no], dnl end if-true
+ [pac_cv_have_broken_valgrind=yes] dnl end if-false
+ )] dnl end IFELSE
+ ) dnl end CACHE_CHECK
+
+ if test "$pac_cv_have_broken_valgrind" = "yes" ; then
+ AC_DEFINE([HAVE_BROKEN_VALGRIND],[1],[define if valgrind is old and/or broken compared to what we are expecting])
+ CPPFLAGS="$savedCPPFLAGS"
+ fi
+fi
+
+
+#######################################################################
+## TIMER CODE
+#######################################################################
+
+# ----------------------------------------------------------------------------
+# Support for timers. The following code processes the
+# --enable-timer-type=name argument and selects the timer based on
+# both that field and what configure is able to determine is available.
+# The file src/include/mpl_timer.h is also created.
+# ----------------------------------------------------------------------------
+
+# clock_gettime is the POSIX gettimeofday
+# gethrtime is the Solaris high-resolution timer
+dnl
+dnl Specific checks that a function works correctly
+dnl
+dnl Now that we know what the options are, choose the timer to use
+dnl
+dnl The default preference is
+dnl Solaris gethrtime
+dnl Posix clock_gettime
+dnl Unix gettimeofday (one of two versions)
+dnl
+dnl Also available are various hardware time stamps
+dnl Linux-x86 cycle counter
+dnl Powerpc-64bit timebase cycle counter
+dnl
+dnl We also allow --enable-timer-type=name to select a timer type
+AC_ARG_ENABLE(timer-type,
+[ --enable-timer-type=name - Select the timer to use for MPI_Wtime and
+ internal timestamps.
+ ppc64_cycle - Powerpc-64bit; returns cycle counts using timebase register
+ gethrtime - Solaris timer (Solaris systems only)
+ clock_gettime - Posix timer (where available)
+ gettimeofday - Most Unix systems
+ linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
+ gcc_ia64_cycle - IPF ar.itc timer*
+ mach_absolute_time - Mach absolute time (alternative to clock_gettime
+ for OSX)
+ device - The timer is provided by the device
+
+ *Note that the cycle timers are intended to be used by
+ developers for internal low-level timing. Normal users should
+ not use these as they are not guaranteed to be accurate in
+ certain situations.
+],timer_type=$enable_timer_type)
+
+## The user did not specify a timer type. Try to find a sane option
+## that is supported by the platform.
+if test -z "$timer_type" ; then
+ # Try to pick a timer based on what is available
+ AC_CHECK_FUNCS(clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday)
+ if test "$ac_cv_func_gethrtime" = "yes" ; then
+ # Sigh. The Solaris include files do not define hrtime_t
+ # Before we accept this choice, make sure that we can
+ # do arithmetic with hrtime_t .
+ AC_CACHE_CHECK([that hrtime_t is properly defined for gethrtime],
+ pac_cv_hrtime_works,[
+ AC_TRY_COMPILE([
+#include <sys/time.h>
+],[hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;],
+pac_cv_hrtime_works=yes,pac_cv_hrtime_works=no)])
+ # A more ambitious test would look to see if casting an
+ # hrtime_t to int64_t works, and even more ambitious
+ # would check whether long or long long was 64 bits (or even
+ # better, the sizeof hrtime_t).
+
+ # AC_CHECK_FUNCS has false positive when checking whether gethrtime is
+ # available on Solaris with strict configuration. We must use
+ # AC_CHECK_DECL to confirm it.
+ AC_CHECK_DECL(gethrtime)
+ fi
+ if test "$ac_cv_func_gethrtime" = "yes" -a \
+ "$ac_cv_has_decl_gethrtime" = "yes" -a \
+ "$pac_cv_hrtime_works" = "yes" ; then
+ timer_type=gethrtime
+ elif test "$ac_cv_func_clock_gettime" = "yes" -a \
+ "$ac_cv_func_clock_getres" = "yes" ; then
+ # Test on both because some systems (e.g., cygwin) provide
+ # clock_gettime but not clock_getres
+ timer_type=clock_gettime
+ elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
+ timer_type=mach_absolute_time
+ elif test "$ac_cv_func_gettimeofday" = "yes" ; then
+ timer_type=gettimeofday
+ fi
+fi
+if test -z "$timer_type" ; then
+ AC_MSG_ERROR([No timer found])
+fi
+
+# Check for valid timer and select datatypes for the time stamp
+case "$timer_type" in
+
+ gethrtime)
+ MPL_TIMER_TYPE=hrtime_t
+ AC_CHECK_FUNC(gethrtime,,[
+ AC_MSG_ERROR([Requested timer gethrtime is not available])
+])
+ ;;
+
+ clock_gettime)
+ missing_function=no
+ AC_SEARCH_LIBS([clock_gettime],[rt],,AC_MSG_ERROR([clock_gettime is not available]))
+ AC_SEARCH_LIBS([clock_getres],[rt],,AC_MSG_ERROR([clock_getres is not available]))
+ MPL_TIMER_TYPE="struct timespec"
+ # AIX does not always define struct timespec (!)
+ # Make sure that we can use struct timespec
+ AC_CACHE_CHECK([whether struct timespec is defined in time.h],
+ pac_cv_struct_timespec_defined,[
+ AC_TRY_COMPILE([
+#include <time.h>],[
+ struct timespec t;],pac_cv_struct_timespec_defined=yes,
+ pac_cv_struct_timespec_defined=no)
+])
+ if test "$pac_cv_struct_timespec_defined" != "yes" ; then
+ # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
+ AC_CACHE_CHECK([whether struct timespec is defined in time.h with _XOPEN_SOURCE=500],
+ pac_cv_struct_timespec_defined_with_xopen500,[
+ AC_TRY_COMPILE([
+#define _XOPEN_SOURCE 500
+#include <time.h>],[
+ struct timespec t;],pac_cv_struct_timespec_defined_with_xopen500=yes,
+ pac_cv_struct_timespec_defined_with_xopen500=no)
+])
+ if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
+ # We need to define _XOPEN_SOURCE=500, but we need to ensure that
+ # this is done before any include files are loaded. At
+ # this point it is really too late to add this definition,
+ # since it may make other tests incompatible.
+ AC_MSG_ERROR([The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure])
+ fi
+ fi
+ #
+ # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
+ # time.h is required (see pages 45 and 46 in the POSIX standard).
+ # See if we can compile
+ AC_CACHE_CHECK([for CLOCK_REALTIME defined in time.h],pac_cv_posix_clock_realtime,[
+ AC_TRY_COMPILE([
+#include <time.h>],[
+ clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
+pac_cv_posix_clock_realtime=no)])
+ if test "$pac_cv_posix_clock_realtime" = "no" ; then
+ AC_MSG_WARN([POSIX timer requires definitions in time.h])
+ # Check for the definition in sys/time.h, which is where
+ # OpenBSD and FreeBSD have put it by mistake
+ AC_TRY_COMPILE([
+#include <time.h>
+#include <sys/time.h>],[
+ clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
+pac_cv_posix_clock_realtime=no)
+ if test "$pac_cv_posix_clock_realtime" = yes ; then
+ AC_MSG_WARN([sys/time.h required for POSIX timer])
+ AC_DEFINE(NEEDS_SYS_TIME_H,1,[Define if sys/time.h is required to get timer definitions])
+ else
+ AC_MSG_ERROR([Cannot find the definition of CLOCK_REALTIME for the POSIX timer])
+ fi
+ fi
+ ;;
+
+ gettimeofday)
+ MPL_TIMER_TYPE="struct timeval"
+ # We may have already tested for gettimeofday. If we got a "yes",
+ # we're good to go
+ if test "$ac_cv_func_gettimeofday" != "yes" ; then
+ AC_CHECK_FUNC(gettimeofday,,[
+ AC_MSG_ERROR([Requested timer gettimeofday is not available])
+])
+ fi
+ ;;
+
+ linux86_cycle|linux86_cycle_2)
+
+# The following AC_TRY_RUN statements are needed because x86_64 compilers
+# usually know about rdtscp but the cpu may or may not actually implement the
+# feature. This is not cross-compile safe, unfortunately. In the long run we
+# should allow the user to override this with a configure flag.
+ AC_CACHE_CHECK([that linux86 cycle counter is available],
+ pac_cv_linux86_cycle,
+ AC_TRY_RUN([
+int main()
+{
+ /* rdtscp */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+ ],pac_cv_linux86_cycle=rdtscp,
+ AC_TRY_RUN([[
+int main()
+{
+ /* cpuid 64 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+ ]],pac_cv_linux86_cycle=cpuid_rdtsc64,
+ AC_TRY_RUN([[[
+int main()
+{
+ /* cpuid 32 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ return 0;
+}
+ ]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
+ AC_TRY_RUN([[[[
+int main()
+{
+ /* simple */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ return 0;
+}
+ ]]]],pac_cv_linux86_cycle=rdtsc,
+ pac_cv_linux86_cycle=no)
+ )
+ ),
+dnl The if-cross-compiling clause from the first AC_TRY_RUN. Hope that if the
+dnl compiler knows about the instruction then it's supported by the target
+dnl platform.
+ AC_TRY_COMPILE(,[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ ]],pac_cv_linux86_cycle=rdtscp,
+ AC_TRY_COMPILE(,[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ ]]],pac_cv_linux86_cycle=cpuid_rdtsc64,
+ AC_TRY_COMPILE(,[[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ ]]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
+ AC_TRY_COMPILE(,[[[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ ]]]]],pac_cv_linux86_cycle=rdtsc,
+ pac_cv_linux86_cycle=no)
+ )
+ )
+ )
+ )
+ )
+
+ case "$pac_cv_linux86_cycle" in
+ "rdtscp")
+ AC_DEFINE(LINUX86_CYCLE_RDTSCP,1,[Define which x86 cycle counter to use])
+ ;;
+ "cpuid_rdtsc64")
+ AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC64,1,[Define which x86 cycle counter to use])
+ ;;
+ "cpuid_rdtsc32")
+ AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC32,1,[Define which x86 cycle counter to use])
+ ;;
+ "rdtsc")
+ AC_DEFINE(LINUX86_CYCLE_RDTSC,1,[Define which x86 cycle counter to use])
+ ;;
+ *)
+ cpu_gcc_x86_cycle=no
+ ;;
+ esac
+
+ if test "$cpu_gcc_x86_cycle" = "no" ; then
+ AC_MSG_ERROR([Linux86 cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="long long"
+ ;;
+
+ gcc_ia64_cycle)
+ AC_CACHE_CHECK([that IPF timer is available],
+pac_cv_ia64_cycle,[
+ AC_TRY_COMPILE(,[
+ long var, *var_ptr=&var;
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ var=__getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
+#endif
+],pac_cv_gcc_ia64_cycle=yes,pac_cv_gcc_ia64_cycle=no)])
+ if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
+ AC_MSG_ERROR([IPF cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="long"
+ ;;
+
+ mach_absolute_time)
+ AC_CHECK_FUNC(mach_absolute_time,,[AC_MSG_ERROR([mach_absolute_time is not available])])
+ AC_CHECK_FUNC(mach_timebase_info,,[AC_MSG_ERROR([mach_timebase_info is not available])])
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+
+ device)
+ # The device selected should export the datatype for the timer
+ MPL_TIMER_TYPE="void *"
+ ;;
+
+ ppc64_cycle)
+ AC_CACHE_CHECK([that ppc64 timebase cycle counter is available],
+ pac_cv_ppc64_cycle,[
+ AC_TRY_COMPILE([
+ ],[
+ unsigned temp;
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (0x10D));
+ ],pac_cv_ppc64_cycle=yes,
+ pac_cv_ppc64_cycle=no)
+ ])
+ if test "pac_cv_ppc64_cycle" != "yes" ; then
+ AC_MSG_ERROR([The PPC64 cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+ *)
+ AC_MSG_ERROR([Invalid timer type $timer_type])
+ ;;
+esac
+# Convert timer type to upper case
+timer_type=`echo $timer_type | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+MPL_TIMER_KIND=MPL_TIMER_KIND__$timer_type
+AC_SUBST(MPL_TIMER_KIND)
+AC_SUBST(MPL_TIMER_TYPE)
+AC_MSG_NOTICE([Timer type selected is $timer_type])
+
+#######################################################################
+## END OF TIMER CODE
+#######################################################################
+
+
+#######################################################################
+## START OF PROCESSOR YIELD CODE
+#######################################################################
+# If the user specified a method to use, we check if it's available.
+# If a method was not specified, we make a guess based on the OS. The
+# default is to use sched_yield() or yield() if one is available,
+# otherwise, default to nothing. After that we define the appropriate
+# macro.
+
+AC_CHECK_HEADERS(sched.h)
+AC_CHECK_HEADERS(unistd.h)
+AC_CHECK_HEADERS(sys/select.h)
+AC_CHECK_FUNCS(sched_yield yield usleep sleep select)
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <unistd.h>],usleep)
+fi
+
+AC_ARG_ENABLE([yield],
+ [AS_HELP_STRING([--enable-yield], [choose a method to yield the processor in busy loops. Available methods are: sched_yield, yield, select, usleep, sleep, nothing])],
+ [AS_CASE([$enableval],
+ [sched_yield], [AS_IF([test "x$ac_cv_func_sched_yield" != "xyes"], [enable_yield=unavail])],
+ [yield], [AS_IF([test "x$ac_cv_func_yield" != "xyes"], [enable_yield=unavail])],
+ [select], [AS_IF([test "x$ac_cv_func_select" != "xyes"], [enable_yield=unavail])],
+ [usleep], [AS_IF([test "x$ac_cv_func_usleep" != "xyes"], [enable_yield=unavail])],
+ [sleep], [AS_IF([test "x$ac_cv_func_sleep" != "xyes"], [enable_yield=unavail])],
+ [nothing|no|none], [],
+ [AC_MSG_ERROR([Invalid option $enableval for --enable-yield])])
+
+ AS_IF([test "x$enable_yield" = "xunavail"],
+ [AC_MSG_ERROR([Yield method $enableval is not available on this platform.])])
+ ],
+ [# none specified by user; make a guess based on os
+ AS_CASE([$host],
+ [*-*-darwin*],
+ [# In Lion, sched_yield worked but none of the other options had any effect
+ AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
+ [enable_yield=nothing])],
+ [*-*-linux*],
+ [# sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
+ enable_yield=nothing],
+ [# default: just use sched_yield() or yield()
+ AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
+ [test "x$ac_cv_func_yield" = "xyes"], [enable_yield=yield],
+ [enable_yield=nothing])])
+ ]
+)
+
+# set the appropriate macro
+AS_CASE([$enable_yield],
+ [sched_yield],
+ [AC_DEFINE(USE_SCHED_YIELD_FOR_YIELD,1,[Define to use sched_yield to yield processor])],
+ [yield],
+ [AC_DEFINE(USE_YIELD_FOR_YIELD,1,[Define to use yield to yield processor])],
+ [select],
+ [AC_DEFINE(USE_SELECT_FOR_YIELD,1,[Define to use select to yield processor])],
+ [usleep],
+ [AC_DEFINE(USE_USLEEP_FOR_YIELD,1,[Define to use usleep to yield processor])],
+ [sleep],
+ [AC_DEFINE(USE_SLEEP_FOR_YIELD,1,[Define to use sleep to yield processor])],
+ [nothing|no|none],
+ [AC_DEFINE(USE_NOTHING_FOR_YIELD,1,[Define to use nothing to yield processor])],
+ [AC_MSG_ERROR([Invalid value $enable_yield for enable_yield.])]
+)
+
+#######################################################################
+## END OF PROCESSOR YIELD CODE
+#######################################################################
+
+
+#######################################################################
+## START OF THREADS CODE
+#######################################################################
+AC_ARG_WITH([thread-package],
+[ --with-thread-package=package Thread package to use. Supported thread packages include:
+ posix or pthreads - POSIX threads (default, if required)
+ solaris - Solaris threads (Solaris OS only)
+ win - windows threads
+ none - no threads
+],,with_thread_package=posix)
+
+if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
+ with_thread_package=none
+fi
+
+if test "${with_thread_package}" = "yes" ; then
+ with_thread_package=posix
+fi
+
+if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
+ AC_ERROR([if no thread package is available, use --enable-threads=single or funneled])
+fi
+
+THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_INVALID
+case $with_thread_package in
+ posix|pthreads)
+ with_thread_package=posix
+ AC_CHECK_HEADERS(pthread.h)
+
+ # If pthreads library is found, just include it on the link line. We don't try
+ # to test if the C compiler needs it or not, since the C++ or Fortran
+ # compilers might need it even if the C compiler doesn't
+ # (nvcc with gfortran, for example).
+ #
+ # OSF1 has __pthread_create but not pthread_create (because of
+ # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
+ AC_CHECK_LIB([pthread],[pthread_key_create],have_pthreads=yes)
+ if test "$have_pthreads" = "yes" ; then
+ PAC_PREPEND_FLAG([-lpthread],[LIBS])
+ fi
+
+ AC_CHECK_FUNCS(pthread_yield)
+
+ # this check should come after the AC_CHECK_LIB for -lpthread
+ AC_CHECK_FUNC([pthread_key_create],[],[AC_MSG_ERROR([unable to find pthreads library])])
+
+ # Check for a routine that specify a routine to call on
+ # thread exit. We can use this to release memory that may
+ # be allocated by the MPL library in the thread.
+ # A complication: pthread_cleanup_push may be a macro; in that
+ # case, check_funcs will fail to find it.
+ # Under OSX, pthread_cleanup_push and pop are macros that must
+ # appear together in the same lexical scope, and hence are
+ # really useless in libraries that may allocate data within
+ # a user-managed thread.
+ AC_CHECK_FUNCS(pthread_cleanup_push)
+ if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
+ AC_CACHE_CHECK([whether pthread_cleanup_push is available (may be a macro in pthread.h)],pac_cv_func_pthread_cleanup_push,[
+ AC_TRY_LINK([
+#include <pthread.h>
+void f1(void *a) { return; }],
+[pthread_cleanup_push( f1, (void *)0 );],
+ pac_cv_func_pthread_cleanup_push=yes,
+ pac_cv_func_pthread_cleanup_push=no)])
+ if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
+ AC_DEFINE(HAVE_PTHREAD_CLEANUP_PUSH_MACRO,1,[Define if pthread_cleanup_push is available, even as a macro])
+ fi
+
+ fi
+
+ # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
+ AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP],
+ pac_cv_has_pthread_mutex_errorcheck_np,[
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [int a=PTHREAD_MUTEX_ERRORCHECK_NP;],
+ pac_cv_has_pthread_mutex_errorcheck_np=yes,
+ pac_cv_has_pthread_mutex_errorcheck_np=no)])
+ AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK],
+ pac_cv_has_pthread_mutex_errorcheck,[
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [int a=PTHREAD_MUTEX_ERRORCHECK;],
+ pac_cv_has_pthread_mutex_errorcheck=yes,
+ pac_cv_has_pthread_mutex_errorcheck=no)])
+
+ if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
+ AC_DEFINE(PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK,
+ [Define to an expression that will result in an error checking mutex type.])
+ elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
+ AC_DEFINE(PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK_NP,
+ [Define to an expression that will result in an error checking mutex type.])
+ fi
+
+ PAC_FUNC_NEEDS_DECL([#include <pthread.h>],pthread_mutexattr_settype)
+
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_POSIX
+ ;;
+ solaris)
+ AC_CHECK_HEADERS(thread.h)
+ AC_CHECK_FUNCS(thr_yield)
+ AC_SEARCH_LIBS(thr_create,thread,found=yes,found=no)
+ if test "$found" != "yes" ; then
+ AC_MSG_ERROR([unable to find Solaris threads library])
+ fi
+ # FIXME: need to add -mt if using solaris compilers
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_SOLARIS
+ ;;
+ win|windows)
+ with_thread_package=win
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_WIN
+ AC_MSG_ERROR([The 'win' thread package is not supported via autoconf builds at this time.])
+ ;;
+ no|none)
+ with_thread_package=none
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_NONE
+ ;;
+ *)
+ AC_MSG_ERROR([The specified thread package, $with_thread_package, is not supported.])
+ ;;
+esac
+
+# Define and export the selected thread library so that other packages
+# know what's used in MPL
+AC_DEFINE_UNQUOTED([THREAD_PACKAGE_NAME],[$THREAD_PACKAGE_NAME],[set to the name of the thread package])
+
+# check for compiler-support for thread-local storage (MPL_TLS_SPECIFIER)
+AX_TLS
+
+#######################################################################
+## END OF THREADS CODE
+#######################################################################
+
+
+#######################################################################
+## START OF DBG CODE
+#######################################################################
+
+# mkstemp() is a better replacement for mktemp()
+AC_HAVE_FUNCS(mkstemp)
+if test "$ac_cv_func_mkstemp" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],mkstemp)
+fi
+# fdopen() converts from an fd to a FILE*
+AC_HAVE_FUNCS(fdopen)
+if test "$ac_cv_func_fdopen" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],fdopen)
+fi
+
+AC_CHECK_FUNCS(getpid)
+
+#######################################################################
+## END OF DBG CODE
+#######################################################################
+
+#######################################################################
+## START OF SHM CODE
+#######################################################################
+
+dnl Check for shm
+PAC_ARG_SHARED_MEMORY
+
+case $with_shared_memory in
+ sysv)
+ AC_DEFINE(MPL_USE_SYSV_SHM,1,[Define if use SYSV shared memory])
+ ;;
+ mmap)
+ AC_DEFINE(MPL_USE_MMAP_SHM,1,[Define if use MMAP shared memory])
+ ;;
+ nt)
+ AC_DEFINE(MPL_USE_NT_SHM,1,[Define if use Windows shared memory])
+ ;;
+ *)
+ AC_MSG_ERROR([cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory])
+esac
+
+
+#######################################################################
+## END OF SHM CODE
+#######################################################################
+
+## Enable creation of libtool-style versioning or no versioning
+AC_ARG_ENABLE(versioning,
+ [AC_HELP_STRING([--enable-versioning],[Enable library versioning])],,
+ [enable_versioning=yes])
+
+if test "$enable_versioning" = "yes" ; then
+ libmpl_so_versionflags="-version-info \$(libmpl_so_version)"
+else
+ libmpl_so_versionflags="-avoid-version"
+fi
+export libmpl_so_versionflags
+AC_SUBST(libmpl_so_versionflags)
+
+#######################################################################
+
+
+# Check for strdup
+AC_CHECK_FUNCS(strdup)
+if test "$ac_cv_func_strdup" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <string.h>],strdup)
+fi
+
+# Check for snprintf
+AC_CHECK_FUNCS(snprintf)
+if test "$ac_cv_func_snprintf" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdio.h>],snprintf)
+fi
+
+# Check for strncmp
+AC_CHECK_FUNCS(strncmp)
+if test "$ac_cv_func_strncmp" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <string.h>],strncmp)
+fi
+
+# Check for putenv
+AC_CHECK_FUNCS(putenv)
+if test "$ac_cv_func_putenv" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],putenv)
+fi
+
+# Check for strerror
+AC_CHECK_FUNCS(strerror)
+if test "$ac_cv_func_strerror" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <string.h>],strerror)
+fi
+
+# Check for usleep
+AC_CHECK_FUNCS(usleep)
+if test "$ac_cv_func_usleep" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <unistd.h>],usleep)
+fi
+
+AC_CHECK_FUNCS(backtrace_symbols)
+AC_CHECK_LIB(backtrace, backtrace_create_state)
+AC_CHECK_LIB(unwind, unw_backtrace)
+
+AC_CHECK_DECLS([backtrace_create_state, backtrace_print])
+
+dnl Check for ATTRIBUTE
+PAC_C_GNU_ATTRIBUTE
+
+dnl Final output
+AC_CONFIG_FILES([Makefile localdefs include/mpl_timer.h])
+AC_OUTPUT
diff --git a/src/mpi/romio/mpl/include/.state-cache b/src/mpi/romio/mpl/include/.state-cache
new file mode 100644
index 0000000..2979ca7
--- /dev/null
+++ b/src/mpi/romio/mpl/include/.state-cache
@@ -0,0 +1,106 @@
+<dir>
+<file name="mpl_thread_priv.h" info="1478973152"/>
+<file name="mpl_env.h" info="1478973152"/>
+<file name="mpl_timer_device.h" info="1478973152"/>
+<file name="mpl_timer_mach_absolute_time.h" info="1478973152"/>
+<file name="mpl_uthash.h" info="1478973152"/>
+<file name="mpl_thread.h" info="1478973152"/>
+<file name="mpl_shm_sysv.h" info="1478973152"/>
+<file name="mpl_timer_query_performance_counter.h" info="1478973152"/>
+<file name="mpl_timer_win86_cycle.h" info="1478973152"/>
+<file name="mpl_sock.h" info="1478973152"/>
+<file name="mpl_thread_win.h" info="1478973152"/>
+<file name="mpl_timer_clock_gettime.h" info="1478973152"/>
+<file name="mpl_thread_solaris.h" info="1478973152"/>
+<file name="mpl_timer_gcc_ia64_cycle.h" info="1478973152"/>
+<file name="mpl_base.h" info="1478973152"/>
+<file name="mpl_bt.h" info="1478973152"/>
+<file name="mpl_argstr.h" info="1478973152"/>
+<file name="mpl_dbg.h" info="1478973152"/>
+<file name="mpl_timer_linux86_cycle.h" info="1478973152"/>
+<file name="mpl_str.h" info="1478973152"/>
+<file name="mpl_shm_mmap.h" info="1478973152"/>
+<file name="mpl_iov.h" info="1478973152"/>
+<file name="mpl_timer_ppc64_cycle.h" info="1478973152"/>
+<file name="mpl_thread_posix.h" info="1478973152"/>
+<file name="mpl_yield.h" info="1478973152"/>
+<file name="mpl_shm_win.h" info="1478973152"/>
+<file name="mpl.h" info="1478973152"/>
+<file name="mpl_utlist.h" info="1478973152"/>
+<file name="mpl_timer_gethrtime.h" info="1478973152"/>
+<file name="mpl_timer_gettimeofday.h" info="1478973152"/>
+<file name="mpl_valgrind.h" info="1478973152"/>
+<file name="mpl_msg.h" info="1478973152"/>
+<file name="mpl_trmem.h" info="1478973152"/>
+<file name="mpl_shm.h" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_thread_priv.h">
+</fileinfo>
+<fileinfo name="mpl_env.h">
+</fileinfo>
+<fileinfo name="mpl_timer_device.h">
+</fileinfo>
+<fileinfo name="mpl_timer_mach_absolute_time.h">
+</fileinfo>
+<fileinfo name="mpl_uthash.h">
+</fileinfo>
+<fileinfo name="mpl_thread.h">
+</fileinfo>
+<fileinfo name="mpl_shm_sysv.h">
+</fileinfo>
+<fileinfo name="mpl_timer_query_performance_counter.h">
+</fileinfo>
+<fileinfo name="mpl_timer_win86_cycle.h">
+</fileinfo>
+<fileinfo name="mpl_sock.h">
+</fileinfo>
+<fileinfo name="mpl_thread_win.h">
+</fileinfo>
+<fileinfo name="mpl_timer_clock_gettime.h">
+</fileinfo>
+<fileinfo name="mpl_thread_solaris.h">
+</fileinfo>
+<fileinfo name="mpl_timer_gcc_ia64_cycle.h">
+</fileinfo>
+<fileinfo name="mpl_base.h">
+</fileinfo>
+<fileinfo name="mpl_bt.h">
+</fileinfo>
+<fileinfo name="mpl_argstr.h">
+</fileinfo>
+<fileinfo name="mpl_dbg.h">
+</fileinfo>
+<fileinfo name="mpl_timer_linux86_cycle.h">
+</fileinfo>
+<fileinfo name="mpl_str.h">
+</fileinfo>
+<fileinfo name="mpl_shm_mmap.h">
+</fileinfo>
+<fileinfo name="mpl_iov.h">
+</fileinfo>
+<fileinfo name="mpl_timer_ppc64_cycle.h">
+</fileinfo>
+<fileinfo name="mpl_thread_posix.h">
+</fileinfo>
+<fileinfo name="mpl_yield.h">
+</fileinfo>
+<fileinfo name="mpl_shm_win.h">
+</fileinfo>
+<fileinfo name="mpl.h">
+</fileinfo>
+<fileinfo name="mpl_utlist.h">
+</fileinfo>
+<fileinfo name="mpl_timer_gethrtime.h">
+</fileinfo>
+<fileinfo name="mpl_timer_gettimeofday.h">
+</fileinfo>
+<fileinfo name="mpl_valgrind.h">
+</fileinfo>
+<fileinfo name="mpl_msg.h">
+</fileinfo>
+<fileinfo name="mpl_trmem.h">
+</fileinfo>
+<fileinfo name="mpl_shm.h">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/include/config.h.in b/src/mpi/romio/mpl/include/config.h.in
new file mode 100644
index 0000000..3571be6
--- /dev/null
+++ b/src/mpi/romio/mpl/include/config.h.in
@@ -0,0 +1,358 @@
+/* include/config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if you have the <backtrace.h> header file. */
+#undef HAVE_BACKTRACE_H
+
+/* Define to 1 if you have the `backtrace_symbols' function. */
+#undef HAVE_BACKTRACE_SYMBOLS
+
+/* define if valgrind is old and/or broken compared to what we are expecting
+ */
+#undef HAVE_BROKEN_VALGRIND
+
+/* Define to 1 if the compiler supports __builtin_expect. */
+#undef HAVE_BUILTIN_EXPECT
+
+/* Define to 1 if you have the `clock_getres' function. */
+#undef HAVE_CLOCK_GETRES
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the <ctype.h> header file. */
+#undef HAVE_CTYPE_H
+
+/* Define to 1 if you have the declaration of `backtrace_create_state', and to
+ 0 if you don't. */
+#undef HAVE_DECL_BACKTRACE_CREATE_STATE
+
+/* Define to 1 if you have the declaration of `backtrace_print', and to 0 if
+ you don't. */
+#undef HAVE_DECL_BACKTRACE_PRINT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <drd.h> header file. */
+#undef HAVE_DRD_H
+
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
+/* Define to 1 if you have the `fdopen' function. */
+#undef HAVE_FDOPEN
+
+/* Define if GNU __attribute__ is supported */
+#undef HAVE_GCC_ATTRIBUTE
+
+/* Define to 1 if you have the `gethrtime' function. */
+#undef HAVE_GETHRTIME
+
+/* Define to 1 if you have the `getpid' function. */
+#undef HAVE_GETPID
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the <helgrind.h> header file. */
+#undef HAVE_HELGRIND_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `backtrace' library (-lbacktrace). */
+#undef HAVE_LIBBACKTRACE
+
+/* Define to 1 if you have the `unwind' library (-lunwind). */
+#undef HAVE_LIBUNWIND
+
+/* Define to 1 if you have the <libunwind.h> header file. */
+#undef HAVE_LIBUNWIND_H
+
+/* Define to 1 if you have the `mach_absolute_time' function. */
+#undef HAVE_MACH_ABSOLUTE_TIME
+
+/* Define if C99-style variable argument list macro functionality */
+#undef HAVE_MACRO_VA_ARGS
+
+/* Define to 1 if you have the <memcheck.h> header file. */
+#undef HAVE_MEMCHECK_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mkstemp' function. */
+#undef HAVE_MKSTEMP
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define to 1 if you have the `pthread_cleanup_push' function. */
+#undef HAVE_PTHREAD_CLEANUP_PUSH
+
+/* Define if pthread_cleanup_push is available, even as a macro */
+#undef HAVE_PTHREAD_CLEANUP_PUSH_MACRO
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the `pthread_yield' function. */
+#undef HAVE_PTHREAD_YIELD
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the `sched_yield' function. */
+#undef HAVE_SCHED_YIELD
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if you have the `shmat' function. */
+#undef HAVE_SHMAT
+
+/* Define to 1 if you have the `shmctl' function. */
+#undef HAVE_SHMCTL
+
+/* Define to 1 if you have the `shmdt' function. */
+#undef HAVE_SHMDT
+
+/* Define to 1 if you have the `shmget' function. */
+#undef HAVE_SHMGET
+
+/* Define to 1 if you have the `sleep' function. */
+#undef HAVE_SLEEP
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncmp' function. */
+#undef HAVE_STRNCMP
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <thread.h> header file. */
+#undef HAVE_THREAD_H
+
+/* Define to 1 if you have the `thr_yield' function. */
+#undef HAVE_THR_YIELD
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
+/* Define to 1 if you have the <valgrind/drd.h> header file. */
+#undef HAVE_VALGRIND_DRD_H
+
+/* Define to 1 if you have the <valgrind.h> header file. */
+#undef HAVE_VALGRIND_H
+
+/* Define to 1 if you have the <valgrind/helgrind.h> header file. */
+#undef HAVE_VALGRIND_HELGRIND_H
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+#undef HAVE_VALGRIND_MEMCHECK_H
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+#undef HAVE_VALGRIND_VALGRIND_H
+
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
+/* Define to 1 if you have the `yield' function. */
+#undef HAVE_YIELD
+
+/* defined if the C compiler supports __typeof(variable) */
+#undef HAVE___TYPEOF
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_CPUID_RDTSC32
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_CPUID_RDTSC64
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_RDTSC
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_RDTSCP
+
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#undef LT_OBJDIR
+
+/* Define if use MMAP shared memory */
+#undef MPL_USE_MMAP_SHM
+
+/* Define if use Windows shared memory */
+#undef MPL_USE_NT_SHM
+
+/* Define if use SYSV shared memory */
+#undef MPL_USE_SYSV_SHM
+
+/* Define if fdopen needs a declaration */
+#undef NEEDS_FDOPEN_DECL
+
+/* Define if mkstemp needs a declaration */
+#undef NEEDS_MKSTEMP_DECL
+
+/* Define if pthread_mutexattr_settype needs a declaration */
+#undef NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL
+
+/* Define if putenv needs a declaration */
+#undef NEEDS_PUTENV_DECL
+
+/* Define if snprintf needs a declaration */
+#undef NEEDS_SNPRINTF_DECL
+
+/* Define if strdup needs a declaration */
+#undef NEEDS_STRDUP_DECL
+
+/* Define if strerror needs a declaration */
+#undef NEEDS_STRERROR_DECL
+
+/* Define if strncmp needs a declaration */
+#undef NEEDS_STRNCMP_DECL
+
+/* Define if sys/time.h is required to get timer definitions */
+#undef NEEDS_SYS_TIME_H
+
+/* Define if usleep needs a declaration */
+#undef NEEDS_USLEEP_DECL
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to an expression that will result in an error checking mutex type.
+ */
+#undef PTHREAD_MUTEX_ERRORCHECK_VALUE
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* set to the name of the thread package */
+#undef THREAD_PACKAGE_NAME
+
+/* If the compiler supports a TLS storage class define it to that here */
+#undef TLS_SPECIFIER
+
+/* Define if performing coverage tests */
+#undef USE_COVERAGE
+
+/* Define to enable logging macros */
+#undef USE_DBG_LOGGING
+
+/* Define to enable memory tracing */
+#undef USE_MEMORY_TRACING
+
+/* Define if we have sysv shared memory */
+#undef USE_MMAP_SHM
+
+/* Define to use nothing to yield processor */
+#undef USE_NOTHING_FOR_YIELD
+
+/* Define to use sched_yield to yield processor */
+#undef USE_SCHED_YIELD_FOR_YIELD
+
+/* Define to use select to yield processor */
+#undef USE_SELECT_FOR_YIELD
+
+/* Define to use sleep to yield processor */
+#undef USE_SLEEP_FOR_YIELD
+
+/* Define if we have sysv shared memory */
+#undef USE_SYSV_SHM
+
+/* Define to use usleep to yield processor */
+#undef USE_USLEEP_FOR_YIELD
+
+/* Define to use yield to yield processor */
+#undef USE_YIELD_FOR_YIELD
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+ nothing if this is not supported. Do not define if restrict is
+ supported directly. */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+ __restrict__, even though the corresponding Sun C compiler ends up with
+ "#define restrict _Restrict" or "#define restrict __restrict__" in the
+ previous line. Perhaps some future version of Sun C++ will work with
+ restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl.h b/src/mpi/romio/mpl/include/mpl.h
new file mode 100644
index 0000000..d9d6dd1
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl.h
@@ -0,0 +1,27 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_H_INCLUDED)
+#define MPL_H_INCLUDED
+
+#include "mpl_base.h"
+/* must come before mpltrmem.h */
+#include "mpl_valgrind.h"
+#include "mpl_argstr.h"
+#include "mpl_str.h"
+#include "mpl_trmem.h"
+#include "mpl_env.h"
+#include "mpl_sock.h"
+#include "mpl_msg.h"
+#include "mpl_iov.h"
+#include "mpl_bt.h"
+#include "mpl_thread.h"
+#include "mpl_timer.h"
+#include "mpl_yield.h"
+#include "mpl_dbg.h"
+#include "mpl_shm.h"
+
+#endif /* !defined(MPL_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_argstr.h b/src/mpi/romio/mpl/include/mpl_argstr.h
new file mode 100644
index 0000000..3943043
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_argstr.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_ARGSTR_H_INCLUDED
+#define MPL_ARGSTR_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* Make sure that we have the definitions for the malloc routines and size_t */
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpl_dbg.h"
+
+#if defined (MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIR_DBG_STRING;
+#endif /* MPL_USE_DBG_LOGGING */
+
+#define MPL_STR_SUCCESS 0
+#define MPL_STR_FAIL 1
+#define MPL_STR_NOMEM 2
+#define MPL_STR_TRUNCATED 3
+
+#define MPL_STR_QUOTE_CHAR '\"'
+#define MPL_STR_QUOTE_STR "\""
+#define MPL_STR_DELIM_CHAR '#'
+#define MPL_STR_DELIM_STR "#"
+#define MPL_STR_ESCAPE_CHAR '\\'
+#define MPL_STR_HIDE_CHAR '*'
+#define MPL_STR_SEPAR_CHAR '$'
+#define MPL_STR_SEPAR_STR "$"
+
+int MPL_str_get_string_arg(const char *str, const char *key, char *val,
+ int maxlen);
+int MPL_str_get_binary_arg(const char *str, const char *key, char *buffer,
+ int maxlen, int *out_length);
+int MPL_str_get_int_arg(const char *str, const char *key, int *val_ptr);
+int MPL_str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ const char *val);
+int MPL_str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ const char *buffer, int length);
+int MPL_str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ int val);
+int MPL_str_add_string(char **str_ptr, int *maxlen_ptr, const char *val);
+int MPL_str_get_string(char **str_ptr, char *val, int maxlen);
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_base.h b/src/mpi/romio/mpl/include/mpl_base.h
new file mode 100644
index 0000000..9194a10
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_base.h
@@ -0,0 +1,119 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_BASE_H_INCLUDED)
+#define MPL_BASE_H_INCLUDED
+
+/* this file splits off the base functionality in MPL, which does not
+ * depend on any of the exposed features. */
+
+#include "mplconfig.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+#if defined _mpl_restrict
+#define mpl_restrict _mpl_restrict
+#else
+#define mpl_restrict restrict
+#endif /* _mpl_restrict */
+
+#if defined _mpl_const
+#define mpl_const _mpl_const
+#else
+#define mpl_const const
+#endif /* _mpl_const */
+
+#if defined _mpl_inline
+#define mpl_inline _mpl_inline
+#else
+#define mpl_inline inline
+#endif /* _mpl_inline */
+
+#if defined MPL_HAVE_CTYPE_H
+#include <ctype.h>
+#endif /* MPL_HAVE_CTYPE_H */
+
+#if defined(MPL_HAVE_INTTYPES_H)
+#include <inttypes.h>
+#endif /* MPL_HAVE_INTTYPES_H */
+
+#if !defined ATTRIBUTE
+# if defined MPL_HAVE_GCC_ATTRIBUTE
+# define ATTRIBUTE(a_) __attribute__(a_)
+# else /* MPL_HAVE_GCC_ATTRIBUTE */
+# define ATTRIBUTE(a_)
+# endif /* MPL_HAVE_GCC_ATTRIBUTE */
+#endif /* ATTRIBUTE */
+
+#define MPL_STATIC_INLINE_PREFIX ATTRIBUTE((always_inline)) static inline
+#define MPL_STATIC_INLINE_SUFFIX ATTRIBUTE((always_inline))
+
+/* These likely/unlikely macros provide static branch prediction hints to the
+ * compiler, if such hints are available. Simply wrap the relevant expression in
+ * the macro, like this:
+ *
+ * if (unlikely(ptr == NULL)) {
+ * // ... some unlikely code path ...
+ * }
+ *
+ * They should be used sparingly, especially in upper-level code. It's easy to
+ * incorrectly estimate branching likelihood, while the compiler can often do a
+ * decent job if left to its own devices.
+ *
+ * These macros are not namespaced because the namespacing is cumbersome.
+ */
+#ifdef MPL_HAVE_BUILTIN_EXPECT
+# define unlikely(x_) __builtin_expect(!!(x_),0)
+# define likely(x_) __builtin_expect(!!(x_),1)
+#else
+# define unlikely(x_) (x_)
+# define likely(x_) (x_)
+#endif
+
+#define MPL_QUOTE(A) MPL_QUOTE2(A)
+#define MPL_QUOTE2(A) #A
+
+#define MPL_MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define MPL_MIN(a,b) (((a) < (b)) ? (a) : (b))
+
+/* Use this macro for each parameter to a function that is not referenced in
+ the body of the function */
+#ifdef MPL_HAVE_WINDOWS_H
+#define MPL_UNREFERENCED_ARG(a) a
+#else
+#define MPL_UNREFERENCED_ARG(a)
+#endif
+
+/* macro for finding the enclosing structure of an element */
+#define MPL_container_of(ptr, type, member) (type *)((char *)(ptr) - offsetof(type,member))
+
+/* This macro is used to silence warnings from the Mac OS X linker when
+ * an object file "has no symbols". The unused attribute prevents a
+ * warning about the unused dummy variable while the used attribute
+ * prevents the compiler from discarding the symbol altogether. This
+ * macro should be used at the top of any file that might not define any
+ * other variables or functions (perhaps due to conditional compilation
+ * via the preprocessor). A semicolon is expected after each invocation
+ * of this macro. */
+#define MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING \
+ static int MPL_UNIQUE_SYMBOL_NAME(dummy) ATTRIBUTE((unused,used)) = 0
+
+/* we jump through a couple of extra macro hoops to append the line
+ * number to the variable name in order to reduce the chance of a name
+ * collision with headers that might be included in the translation
+ * unit */
+#define MPL_UNIQUE_SYMBOL_NAME(prefix_) MPL_UNIQUE_IMPL1_(prefix_##_unique_L,__LINE__)
+#define MPL_UNIQUE_IMPL1_(prefix_,line_) MPL_UNIQUE_IMPL2_(prefix_,line_)
+#define MPL_UNIQUE_IMPL2_(prefix_,line_) MPL_UNIQUE_IMPL3_(prefix_,line_)
+#define MPL_UNIQUE_IMPL3_(prefix_,line_) prefix_##line_
+
+typedef int MPL_bool;
+
+#endif /* !defined(MPL_BASE_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_bt.h b/src/mpi/romio/mpl/include/mpl_bt.h
new file mode 100644
index 0000000..7021067
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_bt.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+
+#if !defined(MPL_BT_H_INCLUDED)
+#define MPL_BT_H_INCLUDED
+
+#include "mplconfig.h"
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#if !MPL_HAVE_DECL_BACKTRACE_CREATE_STATE
+struct backtrace_state;
+typedef void (*backtrace_error_callback)(void *data, const char *msg,
+ int errnum);
+
+extern struct backtrace_state *backtrace_create_state(
+ const char *filename, int threaded,
+ backtrace_error_callback error_callback, void *data);
+#endif
+#if !MPL_HAVE_DECL_BACKTRACE_PRINT
+extern void backtrace_print(struct backtrace_state *state, int skip, FILE *);
+#endif
+
+#define MPL_BACKTRACE_BUFFER_LEN 1024
+#define MPL_MAX_TRACE_DEPTH 32
+void MPL_backtrace_show(FILE *output);
+
+#if defined(__cplusplus)
+
+}
+#endif
+
+#endif /* !defined(MPL_BT_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_dbg.h b/src/mpi/romio/mpl/include/mpl_dbg.h
new file mode 100644
index 0000000..f8881d1
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_dbg.h
@@ -0,0 +1,148 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2005 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_DBG_H_INCLUDED
+#define MPL_DBG_H_INCLUDED
+
+#include "mplconfig.h"
+
+/*
+ * Multilevel debugging and tracing macros.
+ * The design is discussed at
+ * http://wiki.mpich.org/mpich/index.php/Debug_Event_Logging
+ *
+ * Basically, this provide a way to place debugging messages into
+ * groups (called *classes*), with levels of detail, and arbitrary
+ * messages. The messages can be turned on and off using environment
+ * variables and/or command-line options.
+ */
+
+#ifdef MPL_USE_DBG_LOGGING
+
+#define MPL_DBG_SELECTED(_class, _level) \
+ ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level)
+
+#define MPL_DBG_MSG(_class, _level, _string) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _string); \
+ } \
+ }
+
+#define MPL_DBG_MSG_S(_class, _level, _fmat, _string) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 1, _fmat, _string); \
+ } \
+ }
+
+#define MPL_DBG_MSG_D(_class, _level, _fmat, _int) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 2, _fmat, _int); \
+ } \
+ }
+
+#define MPL_DBG_MSG_P(_class, _level, _fmat, _pointer) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 3, _fmat, _pointer); \
+ } \
+ }
+
+#define MPL_DBG_MAXLINE 256
+#define MPL_DBG_FDEST _s,(size_t)MPL_DBG_MAXLINE
+/*M
+ MPL_DBG_MSG_FMT - General debugging output macro
+
+ Notes:
+ To use this macro, the third argument should be an "sprintf" - style
+ argument, using MPL_DBG_FDEST as the buffer argument. For example,
+.vb
+ MPL_DBG_MSG_FMT(CMM,VERBOSE,(MPL_DBG_FDEST,"fmat",args...));
+.ve
+ M*/
+
+#define MPL_DBG_MSG_FMT(_class, _level, _fmatargs) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ char _s[MPL_DBG_MAXLINE]; \
+ MPL_snprintf _fmatargs ; \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _s); \
+ } \
+ }
+
+#define MPL_DBG_STMT(_class, _level, _stmt) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ _stmt; \
+ } \
+ }
+
+#define MPL_DBG_OUT(_class, _msg) \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _msg)
+
+#define MPL_DBG_OUT_FMT(_class,_fmatargs) \
+ { \
+ char _s[MPL_DBG_MAXLINE]; \
+ MPL_snprintf _fmatargs ; \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _s); \
+ }
+
+#else
+#define MPL_DBG_SELECTED(_class,_level) 0
+#define MPL_DBG_MSG(_class,_level,_string)
+#define MPL_DBG_MSG_S(_class,_level,_fmat,_string)
+#define MPL_DBG_MSG_D(_class,_level,_fmat,_int)
+#define MPL_DBG_MSG_P(_class,_level,_fmat,_int)
+#define MPL_DBG_MSG_FMT(_class,_level,_fmatargs)
+#define MPL_DBG_STMT(_class,_level,_stmt)
+#define MPL_DBG_OUT(_class,_msg)
+#define MPL_DBG_OUT_FMT(_class,_fmtargs)
+#endif
+
+#define MPL_DBG_SUCCESS 0
+#define MPL_DBG_ERR_INTERN 1
+#define MPL_DBG_ERR_OTHER 2
+
+typedef unsigned int MPL_dbg_class;
+
+/* Special constants */
+enum MPL_DBG_LEVEL {
+ MPL_DBG_TERSE = 0,
+ MPL_DBG_TYPICAL = 50,
+ MPL_DBG_VERBOSE = 99
+};
+
+extern int MPL_dbg_active_classes;
+extern int MPL_dbg_max_level;
+
+extern MPL_dbg_class MPL_DBG_ROUTINE_ENTER;
+extern MPL_dbg_class MPL_DBG_ROUTINE_EXIT;
+extern MPL_dbg_class MPL_DBG_ROUTINE;
+extern MPL_dbg_class MPL_DBG_ALL;
+
+MPL_dbg_class MPL_dbg_class_alloc(const char *ucname, const char *lcname);
+void MPL_dbg_class_register(MPL_dbg_class cls, const char *ucname, const char *lcname);
+
+#define MPL_DBG_CLASS_CLR(cls) \
+ do { \
+ (cls) = 0; \
+ } while (0)
+
+#define MPL_DBG_CLASS_APPEND(out_class, in_class) \
+ do { \
+ (out_class) |= (in_class); \
+ } while (0)
+
+/* *INDENT-OFF* */
+int MPL_dbg_outevent(const char *, int, int, int, const char *, ...) ATTRIBUTE((format(printf, 5, 6)));
+/* *INDENT-ON* */
+
+int MPL_dbg_init(int *, char ***, int, int, int, int, int);
+int MPL_dbg_pre_init(int *, char ***, int);
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_env.h b/src/mpi/romio/mpl/include/mpl_env.h
new file mode 100644
index 0000000..1fce2bd
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_env.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_ENV_H_INCLUDED)
+#define MPL_ENV_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+#if defined(MPL_HAVE_PUTENV) && defined(MPL_NEEDS_PUTENV_DECL)
+extern int putenv(char *string);
+#endif
+
+/* Prototypes for the functions to provide uniform access to the environment */
+int MPL_env2int(const char *envName, int *val);
+int MPL_env2range(const char *envName, int *lowPtr, int *highPtr);
+int MPL_env2bool(const char *envName, int *val);
+int MPL_env2str(const char *envName, const char **val);
+int MPL_env2double(const char *envName, double *val);
+int MPL_putenv(char *name_val);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_ENV_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_iov.h b/src/mpi/romio/mpl/include/mpl_iov.h
new file mode 100644
index 0000000..ae25f6f
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_iov.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_IOV_H_INCLUDED)
+#define MPL_IOV_H_INCLUDED
+
+#include <stdio.h>
+
+/* IOVs */
+/* The basic channel interface uses IOVs */
+#ifdef MPL_HAVE_WINDOWS_H
+ #define MPL_IOV_BUF_CAST char *
+#else
+ #define MPL_IOV_BUF_CAST void *
+#endif
+#ifdef MPL_HAVE_WINDOWS_H
+#include <winsock2.h>
+#define MPL_IOV WSABUF
+#define MPL_IOV_LEN len
+#define MPL_IOV_BUF buf
+#else
+#ifdef MPL_HAVE_SYS_TYPES_H
+#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
+#endif
+#ifdef MPL_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+#define MPL_IOV struct iovec
+#define MPL_IOV_LEN iov_len
+#define MPL_IOV_BUF iov_base
+#endif
+/* FIXME: How is IOV_LIMIT chosen? */
+#define MPL_IOV_LIMIT 16
+
+#endif /* !defined(MPL_IOV_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_msg.h b/src/mpi/romio/mpl/include/mpl_msg.h
new file mode 100644
index 0000000..598e153
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_msg.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2005 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_MSG_H_INCLUDED)
+#define MPL_MSG_H_INCLUDED
+
+#include "mpl.h"
+
+#if defined(MPL_HAVE_MACRO_VA_ARGS)
+#define MPL_error_printf(...) fprintf(stderr,__VA_ARGS__)
+#else
+#define MPL_error_printf printf
+#endif
+
+/* These routines are used to ensure that messages are sent to the
+ * appropriate output and (eventually) are properly
+ * internationalized */
+int MPL_usage_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_msg_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_internal_error_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_internal_sys_error_printf(mpl_const char *, int, mpl_const char *str,
+ ...) ATTRIBUTE((format(printf, 3, 4)));
+void MPL_exit(int);
+
+#endif /* !defined(MPL_MSG_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_shm.h b/src/mpi/romio/mpl/include/mpl_shm.h
new file mode 100644
index 0000000..df078b7
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_shm.h
@@ -0,0 +1,160 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* This file contains "pre" definitions and declarations for the OS wrappers.
+ * That is, things that shouldn't depend on much more than the mpichconf.h
+ * values. */
+
+#ifndef MPL_SHM_H_INCLUDED
+#define MPL_SHM_H_INCLUDED
+
+#include "mplconfig.h"
+
+#ifdef MPL_USE_SYSV_SHM
+#include "mpl_shm_sysv.h"
+#elif defined MPL_USE_MMAP_SHM
+#include "mpl_shm_mmap.h"
+#elif defined MPL_USE_NT_SHM
+#include "mpl_shm_win.h"
+#endif
+
+#define MPLI_SHM_FLAG_CLR 0x0
+#define MPLI_SHM_FLAG_SHM_CREATE 0x1
+#define MPLI_SHM_FLAG_SHM_ATTACH 0x10
+#define MPLI_SHM_FLAG_GHND_STATIC 0x100
+
+#define MPL_SHM_HND_INVALID NULL
+#define MPLI_SHM_GHND_INVALID NULL
+#define MPLI_SHM_GHND_INIT_VAL '\0'
+#define MPL_SHM_HND_SZ (sizeof(MPLI_shm_lghnd_t))
+#define MPL_SHM_GHND_SZ MPLI_SHM_GHND_SZ
+
+/* A Handle is valid if it is initialized/init and has a value
+ * different from the default/invalid value assigned during init
+ */
+#define MPLI_shm_hnd_is_valid(hnd) ( \
+ ((hnd) && \
+ MPLI_shm_lhnd_is_valid(hnd) && \
+ MPLI_shm_ghnd_is_valid(hnd)) \
+)
+
+/* With MMAP_SHM, NT_SHM & SYSV_SHM local handle is always init'ed */
+#define MPLI_shm_hnd_is_init(hnd) ( \
+ ((hnd) && /* MPL_shm_lhnd_is_init(hnd) && */ \
+ MPLI_shm_ghnd_is_init(hnd)) \
+)
+
+/* These macros are the setters/getters for the shm handle */
+#define MPLI_shm_lhnd_get(hnd) ((hnd)->lhnd)
+#define MPLI_shm_lhnd_set(hnd, val) ((hnd)->lhnd=val)
+#define MPLI_shm_lhnd_is_valid(hnd) (((hnd)->lhnd != MPLI_SHM_LHND_INVALID))
+#define MPLI_shm_lhnd_is_init(hnd) 1
+
+/* Allocate mem for references within the handle */
+/* Returns 0 on success, -1 on error */
+#define MPL_shm_hnd_ref_alloc(hnd)( \
+ ((hnd)->ghnd = (MPLI_shm_ghnd_t) \
+ MPL_malloc(MPLI_SHM_GHND_SZ)) ? 0 : -1 \
+)
+
+
+/* These macros are the setters/getters for the shm handle */
+#define MPLI_shm_ghnd_get_by_ref(hnd) ((hnd)->ghnd)
+
+/* Returns -1 on error, 0 on success */
+#define MPLI_shm_ghnd_get_by_val(hnd, str, strlen) ( \
+ (MPL_snprintf(str, strlen, "%s", \
+ MPLI_shm_ghnd_get_by_ref(hnd))) ? 0 : -1 \
+)
+#define MPLI_shm_ghnd_set_by_ref(hnd, val) ((hnd)->ghnd = val)
+/* Returns -1 on error, 0 on success */
+/* FIXME: What if val is a non-null terminated string ? */
+#define MPLI_shm_ghnd_set_by_val(hnd, fmt, val) ( \
+ (MPL_snprintf(MPLI_shm_ghnd_get_by_ref(hnd), \
+ MPLI_SHM_GHND_SZ, fmt, val)) ? 0 : -1 \
+)
+
+#define MPLI_shm_ghnd_is_valid(hnd) ( \
+ (((hnd)->ghnd == MPLI_SHM_GHND_INVALID) || \
+ (strlen((hnd)->ghnd) == 0)) ? 0 : 1 \
+)
+#define MPLI_shm_ghnd_is_init(hnd) ( \
+ ((hnd)->flag & MPLI_SHM_FLAG_GHND_STATIC) ? \
+ 1 : \
+ (((hnd)->ghnd != MPLI_SHM_GHND_INVALID) ? 1 : 0) \
+)
+
+/* Allocate mem for global handle.
+ * Returns 0 on success, -1 on failure
+ */
+static inline int MPLI_shm_ghnd_alloc(MPL_shm_hnd_t hnd)
+{
+ if(!(hnd->ghnd)){
+ hnd->ghnd = (MPLI_shm_ghnd_t)MPL_malloc(MPLI_SHM_GHND_SZ);
+ if(!(hnd->ghnd)){ return -1; }
+ }
+ /* Global handle is no longer static */
+ hnd->flag &= ~MPLI_SHM_FLAG_GHND_STATIC;
+ return 0;
+}
+
+
+/* Allocate mem for handle. Lazy allocation for global handle */
+/* Returns 0 on success, -1 on error */
+static inline int MPLI_shm_hnd_alloc(MPL_shm_hnd_t *hnd_ptr)
+{
+ *hnd_ptr = (MPL_shm_hnd_t) MPL_malloc(MPL_SHM_HND_SZ);
+ if(*hnd_ptr){
+ (*hnd_ptr)->flag = MPLI_SHM_FLAG_GHND_STATIC;
+ }
+ else{
+ return -1;
+ }
+ return 0;
+}
+
+/* Close Handle */
+#define MPLI_shm_hnd_close(hnd) MPLI_shm_lhnd_close(hnd)
+
+static inline void MPLI_shm_hnd_reset_val(MPL_shm_hnd_t hnd)
+{
+ MPLI_shm_lhnd_set(hnd, MPLI_SHM_LHND_INIT_VAL);
+ if(hnd->flag & MPLI_SHM_FLAG_GHND_STATIC){
+ hnd->ghnd = MPLI_SHM_GHND_INVALID;
+ }
+ else{
+ (hnd->ghnd)[0] = MPLI_SHM_GHND_INIT_VAL;
+ }
+}
+
+static inline void MPLI_shm_hnd_free(MPL_shm_hnd_t hnd)
+{
+ if(MPLI_shm_hnd_is_init(hnd)){
+ if(!(hnd->flag & MPLI_SHM_FLAG_GHND_STATIC)){
+ MPL_free(hnd->ghnd);
+ }
+ MPL_free(hnd);
+ }
+}
+
+/* interfaces */
+int MPL_shm_hnd_serialize(char *str, MPL_shm_hnd_t hnd, int str_len);
+int MPL_shm_hnd_deserialize(MPL_shm_hnd_t hnd, const char *str_hnd, size_t str_hnd_len);
+int MPL_shm_hnd_get_serialized_by_ref(MPL_shm_hnd_t hnd, char **str_ptr);
+int MPL_shm_hnd_deserialize_by_ref(MPL_shm_hnd_t hnd, char **ser_hnd_ptr);
+int MPL_shm_hnd_init(MPL_shm_hnd_t *hnd_ptr);
+int MPL_shm_hnd_finalize(MPL_shm_hnd_t *hnd_ptr);
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz);
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz);
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset);
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset);
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz);
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd);
+
+#endif /* MPL_SHM_H_INCLUDED */
diff --git a/src/mpi/romio/mpl/include/mpl_shm_mmap.h b/src/mpi/romio/mpl/include/mpl_shm_mmap.h
new file mode 100644
index 0000000..a2a91c9
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_shm_mmap.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_MMAP_H_INCLUDED
+#define MPL_SHM_MMAP_H_INCLUDED
+
+typedef intptr_t MPLI_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_FNAME_LEN 50
+#define MPLI_SHM_GHND_SZ MPL_SHM_FNAME_LEN
+#define MPLI_SHM_LHND_INVALID (-1)
+#define MPLI_SHM_LHND_INIT_VAL (-1)
+
+#define MPLI_SHM_SEG_ALREADY_EXISTS EEXIST
+
+/* Returns 0 on success, -1 on error */
+int MPLI_shm_lhnd_close(MPL_shm_hnd_t hnd);
+
+#endif /* ifndef MPL_SHM_MMAP_H_INCLUDED */
diff --git a/src/mpi/romio/mpl/include/mpl_shm_sysv.h b/src/mpi/romio/mpl/include/mpl_shm_sysv.h
new file mode 100644
index 0000000..babae48
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_shm_sysv.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_SYSV_H_INCLUDED
+#define MPL_SHM_SYSV_H_INCLUDED
+
+typedef int MPLI_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_MAX_INT_STR_LEN 20
+#define MPL_SHM_SEG_KEY_LEN MPL_SHM_MAX_INT_STR_LEN
+#define MPLI_SHM_GHND_SZ MPL_SHM_SEG_KEY_LEN
+#define MPLI_SHM_LHND_INVALID (-1)
+#define MPLI_SHM_LHND_INIT_VAL (-1)
+#define MPL_SHM_SER_HND_SZ MPLI_SHM_GHND_SZ
+
+#define MPL_SHM_SEG_ALREADY_EXISTS EEXIST
+
+/* Nothing to be done at close */
+#define MPLI_shm_lhnd_close(hnd) 0
+
+#endif /* ifndef MPL_SHM_SYSV_H_INCLUDED */
diff --git a/src/mpi/romio/mpl/include/mpl_shm_win.h b/src/mpi/romio/mpl/include/mpl_shm_win.h
new file mode 100644
index 0000000..02bfaf6
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_shm_win.h
@@ -0,0 +1,70 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_WIN_INCLUDED
+#define MPL_SHM_WIN_INCLUDED
+
+typedef HANDLE MPL_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_SEG_NAME_LEN 70
+#define MPLI_SHM_GHND_SZ MPL_SHM_SEG_NAME_LEN
+#define MPLI_SHM_LHND_INVALID INVALID_HANDLE_VALUE
+#define MPLI_SHM_LHND_INIT_VAL INVALID_HANDLE_VALUE
+
+#define MPL_shm_SEG_ALREADY_EXISTS ERROR_ALREADY_EXISTS
+
+/* Returns 0 on success, -1 on error */
+#define MPLI_shm_lhnd_close(hnd)( \
+ (CloseHandle(MPLI_shm_lhnd_get(hnd)) != 0) ? 0 : -1 \
+)
+
+#if defined (HAVE_QUERYPERFORMANCECOUNTER)
+/*
+ * Returns size of uniqStr, 0 on error
+ */
+static inline int MPL_shm_get_uniq_str(char *str, int strlen)
+{
+ LARGE_INTEGER perfCnt;
+ QueryPerformanceCounter(&perfCnt);
+ return(MPL_snprintf(str, strlen, "MPICH_NEM_%d_%I64d",
+ GetCurrentThreadId(), (perfCnt.QuadPart)));
+}
+#endif
+
+/* Returns 0 on success, -1 on error */
+static inline int MPLI_shm_ghnd_set_uniq(MPL_shm_hnd_t hnd)
+{
+ if (MPL_shm_hnd_ref_alloc(hnd) == 0) {
+ if (MPLI_shm_get_uniq_str(hnd->ghnd, MPLI_SHM_GHND_SZ) != 0) {
+ return -1;
+ }
+ } else {
+ return -1;
+ }
+ return 0;
+}
+
+/* Nothing to be done when removing an SHM segment */
+static inline int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ return MPI_SUCCESS;
+}
+
+#endif /* ifndef MPL_SHM_WIN_INCLUDED */
diff --git a/src/mpi/romio/mpl/include/mpl_sock.h b/src/mpi/romio/mpl/include/mpl_sock.h
new file mode 100644
index 0000000..470b2bd
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_sock.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_SOCK_H_INCLUDED)
+#define MPL_SOCK_H_INCLUDED
+
+#include "mplconfig.h"
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <errno.h>
+#include <netinet/tcp.h>
+#include <netdb.h>
+#include <limits.h>
+
+#ifdef MPL_HAVE_SYS_TYPES_H
+#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
+#endif
+#ifdef MPL_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
+#if !defined(MPL_HAVE_SYS_UIO_H)
+struct iovec;
+#endif
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+ssize_t MPL_large_writev(int fd, const struct iovec *iov, int iovcnt);
+ssize_t MPL_large_readv(int fd, const struct iovec *iov, int iovcnt);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_SOCK_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_str.h b/src/mpi/romio/mpl/include/mpl_str.h
new file mode 100644
index 0000000..57861f2
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_str.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_STR_H_INCLUDED)
+#define MPL_STR_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+#if defined MPL_NEEDS_SNPRINTF_DECL
+extern int snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
+#endif
+
+#if defined MPL_HAVE_SNPRINTF
+#define MPL_snprintf snprintf
+#else
+int MPL_snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
+#endif /* MPL_HAVE_SNPRINTF */
+
+int MPL_strncpy(char *dest, const char *src, size_t n);
+char *MPL_strsep(char **stringp, const char *delim);
+
+#if defined MPL_NEEDS_STRNCMP_DECL
+extern int strncmp(const char *s1, const char *s2, size_t n);
+#endif
+
+#if defined MPL_HAVE_STRNCMP
+#define MPL_strncmp strncmp
+#else
+#error "strncmp is required"
+#endif /* MPL_HAVE_STRNCMP */
+
+#if defined MPL_NEEDS_STRERROR_DECL
+extern char *strerror(int errnum);
+#endif
+#if defined MPL_HAVE_STRERROR
+#define MPL_strerror strerror
+#else
+char *MPL_strerror(int errnum);
+#endif /* MPL_HAVE_STRERROR */
+
+int MPL_strnapp(char *dest, const char *src, size_t n);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_STR_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_thread.h b/src/mpi/romio/mpl/include/mpl_thread.h
new file mode 100644
index 0000000..8b0aad9
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_thread.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_THREAD_H_INCLUDED)
+#define MPL_THREAD_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* _INVALID exists to avoid accidental macro evaluations to 0 */
+#define MPL_THREAD_PACKAGE_INVALID 0
+#define MPL_THREAD_PACKAGE_NONE 1
+#define MPL_THREAD_PACKAGE_POSIX 2
+#define MPL_THREAD_PACKAGE_SOLARIS 3
+#define MPL_THREAD_PACKAGE_WIN 4
+
+#if defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_POSIX)
+# include "mpl_thread_posix.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_SOLARIS)
+# include "mpl_thread_solaris.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_WIN)
+# include "mpl_thread_win.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE)
+typedef int MPL_thread_mutex_t;
+typedef int MPL_thread_cond_t;
+typedef int MPL_thread_id_t;
+typedef int MPL_thread_tls_t;
+typedef void (*MPL_thread_func_t) (void *data);
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
+#else
+# error "thread package not defined or unknown"
+#endif
+
+/* Error values */
+#define MPL_THREAD_SUCCESS 0
+#define MPL_THREAD_ERROR 1
+/* FIXME: Define other error codes. For now, any non-zero value is an error. */
+
+#include "mpl_thread_priv.h"
+
+#endif /* !defined(MPL_THREAD_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_thread_posix.h b/src/mpi/romio/mpl/include/mpl_thread_posix.h
new file mode 100644
index 0000000..a073521
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_thread_posix.h
@@ -0,0 +1,246 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/*
+ * Threads
+ */
+#ifndef MPL_THREAD_POSIX_H_INCLUDED
+#define MPL_THREAD_POSIX_H_INCLUDED
+
+#include "mpl.h" /* for MPL_sched_yield */
+
+#include <errno.h>
+#include <pthread.h>
+
+typedef pthread_mutex_t MPL_thread_mutex_t;
+typedef pthread_cond_t MPL_thread_cond_t;
+typedef pthread_t MPL_thread_id_t;
+typedef pthread_key_t MPL_thread_tls_t;
+
+#if defined(MPL_NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL)
+int pthread_mutexattr_settype(pthread_mutexattr_t * attr, int kind);
+#endif /* MPL_NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL */
+
+typedef void (*MPL_thread_func_t) (void *data);
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+
+#define MPL_thread_exit() \
+ do { \
+ pthread_exit(NULL); \
+ } while (0)
+
+#define MPL_thread_self(id_) \
+ do { \
+ *(id_) = pthread_self(); \
+ } while (0)
+
+#define MPL_thread_same(id1_, id2_, same_) \
+ do { \
+ *(same_) = pthread_equal(*(id1_), *(id2_)) ? TRUE : FALSE; \
+ } while (0)
+
+#define MPL_thread_yield MPL_sched_yield
+
+
+/*
+ * Mutexes
+ */
+
+/* FIXME: mutex creation and destruction should be implemented as routines
+ because there is no reason to use macros (these are not on the performance
+ critical path). Making these macros requires that any code that might use
+ these must load all of the pthread.h (or other thread library) support.
+ */
+
+/* FIXME: using constant initializer if available */
+
+/* FIXME: convert errors to an MPL_THREAD_ERR value */
+
+#if !defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE)
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_init(mutex_ptr_, NULL); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#else /* defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ pthread_mutexattr_t attr__; \
+ \
+ pthread_mutexattr_init(&attr__); \
+ pthread_mutexattr_settype(&attr__, MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE); \
+ err__ = pthread_mutex_init(mutex_ptr_, &attr__); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#endif /* defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
+
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_destroy(mutex_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_destroy", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+#define MPL_thread_mutex_lock(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ err__ = pthread_mutex_lock(mutex_ptr_); \
+ if (unlikely(err__)) { \
+ MPL_internal_sys_error_printf("pthread_mutex_lock", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ } \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+#define MPL_thread_mutex_unlock(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_unlock(mutex_ptr_); \
+ if (unlikely(err__)) { \
+ MPL_internal_sys_error_printf("pthread_mutex_unlock", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ } \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+/*
+ * Condition Variables
+ */
+
+#define MPL_thread_cond_create(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_init((cond_ptr_), NULL); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_destroy(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_destroy(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_destroy", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ /* The latest pthread specification says that cond_wait \
+ * routines aren't allowed to return EINTR, but some of the \
+ * older implementations still do. */ \
+ do { \
+ err__ = pthread_cond_wait((cond_ptr_), mutex_ptr_); \
+ } while (err__ == EINTR); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_wait", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_broadcast(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_broadcast(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_broadcast", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_signal(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_signal(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_signal", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+/*
+ * Thread Local Storage
+ */
+
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_key_create((tls_ptr_), (exit_func_ptr_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_key_create", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_key_delete(*(tls_ptr_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_key_delete", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr_, value_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_setspecific(*(tls_ptr_), (value_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_setspecific", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
+ do { \
+ *(value_ptr_) = pthread_getspecific(*(tls_ptr_)); \
+ \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } while (0)
+
+#endif /* MPL_THREAD_POSIX_H_INCLUDED */
diff --git a/src/mpi/romio/mpl/include/mpl_thread_priv.h b/src/mpi/romio/mpl/include/mpl_thread_priv.h
new file mode 100644
index 0000000..034cff9
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_thread_priv.h
@@ -0,0 +1,98 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_THREAD_PRIV_H_INCLUDED)
+#define MPL_THREAD_PRIV_H_INCLUDED
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE && !defined(MPL_TLS_SPECIFIER)
+/* We need to provide a function that will cleanup the storage attached
+ * to the key. */
+void MPLI_cleanup_tls(void *a);
+
+/* In the case where the thread level is set in MPI_Init_thread, we
+ need a blended version of the non-threaded and the thread-multiple
+ definitions.
+
+ The approach is to have TWO MPLI_per_thread_t pointers. One is local
+ (The MPL_THREADPRIV_DECL is used in the routines local definitions),
+ as in the threaded version of these macros. This is set by using a routine
+ to get thread-private storage. The second is a preallocated, extern
+ MPLI_per_thread_t struct, as in the single threaded case. Based on
+ whether MPL is initialized with thread safety, one or the other is used.
+ */
+
+#define MPL_THREADPRIV_KEY_CREATE(key, var, err_ptr_) \
+ do { \
+ void *thread_ptr; \
+ \
+ MPL_thread_tls_create(MPLI_cleanup_tls, &(key) , err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ thread_ptr = MPL_calloc(1, sizeof(var)); \
+ if (unlikely(!thread_ptr)) { \
+ *((int *) err_ptr_) = MPL_THREAD_ERROR; \
+ break; \
+ } \
+ MPL_thread_tls_set(&(key), thread_ptr, err_ptr_); \
+ } while (0)
+
+#define MPL_THREADPRIV_KEY_GET_ADDR(is_threaded, key, var, addr, err_ptr_) \
+ do { \
+ if (is_threaded) { \
+ void *thread_ptr; \
+ MPL_thread_tls_get(&(key), &thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ if (!thread_ptr) { \
+ thread_ptr = MPL_calloc(1, sizeof(var)); \
+ if (unlikely(!thread_ptr)) { \
+ *((int *) err_ptr_) = MPL_THREAD_ERROR; \
+ break; \
+ } \
+ MPL_thread_tls_set(&(key), thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ } \
+ addr = thread_ptr; \
+ } \
+ else { \
+ addr = &(var); \
+ } \
+ } while (0)
+
+#define MPL_THREADPRIV_KEY_DESTROY(key, err_ptr_) \
+ do { \
+ void *thread_ptr; \
+ \
+ MPL_thread_tls_get(&(key), &thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ \
+ if (thread_ptr) \
+ MPL_free(thread_ptr); \
+ \
+ MPL_thread_tls_set(&(key), NULL, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ \
+ MPL_thread_tls_destroy(&(key), err_ptr_); \
+ } while (0)
+
+#else /* MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE || defined(MPL_TLS_SPECIFIER) */
+
+/* We have proper thread-local storage (TLS) support from the compiler, which
+ * should yield the best performance and simplest code, so we'll use that. */
+#define MPL_THREADPRIV_KEY_CREATE(...)
+#define MPL_THREADPRIV_KEY_GET_ADDR(is_threaded, key, var, addr, err_ptr_) \
+ do { \
+ addr = &(var); \
+ *((int *) err_ptr_) = MPL_THREAD_SUCCESS; \
+ } while (0)
+#define MPL_THREADPRIV_KEY_DESTROY(...)
+
+#endif
+
+#endif /* !defined(MPL_THREAD_PRIV_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_thread_solaris.h b/src/mpi/romio/mpl/include/mpl_thread_solaris.h
new file mode 100644
index 0000000..83fe099
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_thread_solaris.h
@@ -0,0 +1,195 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_THREAD_SOLARIS_H_INCLUDED
+#define MPL_THREAD_SOLARIS_H_INCLUDED
+
+#include <thread.h>
+#include <synch.h>
+
+typedef mutex_t MPL_thread_mutex_t;
+typedef cond_t MPL_thread_cond_t;
+typedef thread_t MPL_thread_id_t;
+
+typedef void (*MPL_thread_func_t) (void *data);
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+
+/*
+ * Threads
+ */
+
+#define MPL_thread_exit() \
+ do { \
+ thr_exit(NULL); \
+ } while (0)
+
+#define MPL_thread_self(id_ptr_) \
+ do { \
+ *(id_ptr_) = thr_self(); \
+ } while (0)
+
+#define MPL_thread_same(id1_ptr_, id2_ptr_, same_ptr_) \
+ do { \
+ *(same_ptr_) = (*(id1_ptr_) == *(id2_ptr_)) ? TRUE : FALSE; \
+ } while (0)
+
+#define MPL_thread_yield thr_yield
+
+
+/*
+ * Mutexes
+ */
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ *(mutex_ptr_) = DEFAULTMUTEX; \
+ if ((err_ptr_) == NULL) { \
+ *(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_destroy(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_destroy(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_lock(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_lock(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_lock(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_unlock(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_unlock(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_unlock(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+
+/*
+ * Condition Variables
+ */
+
+#define MPL_thread_cond_create(cond_ptr_, err_ptr_) \
+ do { \
+ *(cond_ptr_) = DEFAULTCV; \
+ if ((err_ptr_) == NULL) { \
+ *(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_destroy(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_destroy(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_destroy(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_wait((cond_ptr_), (mutex_ptr_)); \
+ } \
+ else { \
+ *(err_ptr_) = cond_wait((cond_ptr_), (mutex_ptr_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_broadcast(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_broadcast(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_broadcast(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_signal(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_signal(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_signal(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+
+/*
+ * Thread Local Storage
+ */
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_keycreate((tls_ptr), (exit_func_ptr)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_keycreate((tls_ptr), (exit_func_ptr)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ /* \
+ * FIXME: Solaris threads does not have a key destroy. We \
+ * need to create equivalent functionality to prevent a \
+ * callback from occuring when a thread exits after the TLS is \
+ * destroyed. This is the only way to prevent subsystems that \
+ * have shutdown from continuing to receive callbacks. \
+ */ \
+ if ((err_ptr_) != NULL) { \
+ *(err_ptr) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr, value_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_setspecific(*(tls_ptr), (value_)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr, value_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_setspecific(*(tls_ptr), (value_ptr_)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_ptr_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#endif /* MPL_THREAD_SOLARIS_H_INCLUDED */
diff --git a/src/mpi/romio/mpl/include/mpl_thread_win.h b/src/mpi/romio/mpl/include/mpl_thread_win.h
new file mode 100644
index 0000000..3c6f9f9
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_thread_win.h
@@ -0,0 +1,106 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_THREAD_WIN_H_INCLUDED
+#define MPL_THREAD_WIN_H_INCLUDED
+
+#define WIN32_LEAN_AND_MEAN
+
+#include <windows.h>
+
+typedef HANDLE MPL_thread_mutex_t;
+typedef HANDLE MPL_thread_id_t;
+typedef DWORD MPL_thread_tls_t;
+
+typedef struct MPLI_win_thread_cond_fifo_t {
+ HANDLE event;
+ struct MPLI_win_thread_cond_fifo_t *next;
+} MPLI_win_thread_cond_fifo_t;
+typedef struct MPL_thread_cond_t {
+ MPL_thread_tls_t tls;
+ MPL_thread_mutex_t fifo_mutex;
+ MPLI_win_thread_cond_fifo_t *fifo_head, *fifo_tail;
+} MPL_thread_cond_t;
+
+typedef void (*MPL_thread_func_t) (void *data);
+
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+void MPL_thread_exit(void);
+void MPL_thread_self(MPL_thread_id_t * id);
+void MPL_thread_same(MPL_thread_id_t * id1, MPL_thread_id_t * id2, int *same);
+void MPL_thread_yield();
+
+void MPL_thread_mutex_create(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_destroy(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_lock(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_unlock(MPL_thread_mutex_t * mutex, int *err);
+
+void MPL_thread_cond_create(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_destroy(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_wait(MPL_thread_cond_t * cond, MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_cond_broadcast(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_signal(MPL_thread_cond_t * cond, int *err);
+
+/*
+ * Thread Local Storage
+ */
+
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ *(tls_ptr_) = TlsAlloc(); \
+ if ((err_ptr_) != NULL) { \
+ if (*(tls_ptr_) == TLS_OUT_OF_INDEXES) { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ else { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ BOOL result__; \
+ result__ = TlsFree(*(tls_ptr_)); \
+ if ((err_ptr_) != NULL) { \
+ if (result__) { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ else { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr_, value_, err_ptr_) \
+ do { \
+ BOOL result__; \
+ result__ = TlsSetValue(*(tls_ptr_), (value_)); \
+ if ((err_ptr_) != NULL) { \
+ if (result__) { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ else { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
+ do { \
+ *((void **)value_ptr_) = TlsGetValue(*(tls_ptr_)); \
+ if ((err_ptr_) != NULL) { \
+ if (*(value_ptr_) == 0 && GetLastError() != NO_ERROR) { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ else { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } \
+ } while (0)
+
+#endif /* MPL_THREAD_WIN_H_INCLUDED */
diff --git a/src/mpi/romio/mpl/include/mpl_timer.h.in b/src/mpi/romio/mpl/include/mpl_timer.h.in
new file mode 100644
index 0000000..dcc24c3
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer.h.in
@@ -0,0 +1,247 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_TIMER_H_INCLUDED)
+#define MPL_TIMER_H_INCLUDED
+
+#include "mplconfig.h"
+
+#if defined (MPL_HAVE_UNISTD_H)
+#include <unistd.h>
+#if defined (MPL_NEEDS_USLEEP_DECL)
+int usleep(useconds_t usec);
+#endif
+#endif
+
+/*
+ * This include file provide the definitions that are necessary to use the
+ * timer calls, including the definition of the time stamp type and
+ * any inlined timer calls.
+ *
+ * The include file timerconf.h (created by autoheader from configure.ac)
+ * is needed only to build the function versions of the timers.
+ */
+/* Include the appropriate files */
+#define MPL_TIMER_KIND__GETHRTIME 1
+#define MPL_TIMER_KIND__CLOCK_GETTIME 2
+#define MPL_TIMER_KIND__GETTIMEOFDAY 3
+#define MPL_TIMER_KIND__LINUX86_CYCLE 4
+#define MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER 6
+#define MPL_TIMER_KIND__WIN86_CYCLE 7
+#define MPL_TIMER_KIND__GCC_IA64_CYCLE 8
+/* The value "MPL_TIMER_KIND__DEVICE" means that the ADI device provides the timer */
+#define MPL_TIMER_KIND__DEVICE 9
+#define MPL_TIMER_KIND__WIN64_CYCLE 10
+#define MPL_TIMER_KIND__MACH_ABSOLUTE_TIME 11
+#define MPL_TIMER_KIND__PPC64_CYCLE 12
+#define MPL_TIMER_KIND @MPL_TIMER_KIND@
+
+/* Define a time stamp */
+typedef @MPL_TIMER_TYPE@ MPL_time_t;
+
+/* The timer code is allowed to return "NOT_INITIALIZED" before the
+ * device is initialized. Once the device is initialized, it must
+ * always return SUCCESS, so the upper layers do not need to check for
+ * the return code. */
+#define MPL_TIMER_SUCCESS 0
+#define MPL_TIMER_ERR_NOT_INITIALIZED 1
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETHRTIME
+#include "mpl_timer_gethrtime.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__CLOCK_GETTIME
+#include "mpl_timer_clock_gettime.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__GETTIMEOFDAY
+#include "mpl_timer_gettimeofday.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__LINUX86_CYCLE
+#include "mpl_timer_linux86_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER
+#include "mpl_timer_query_performance_counter.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__WIN86_CYCLE || MPL_TIMER_KIND == MPL_TIMER_KIND__WIN64_CYCLE
+#include "mpl_timer_win86_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__GCC_IA64_CYCLE
+#include "mpl_timer_gcc_ia64_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__DEVICE
+#include "mpl_timer_device.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__MACH_ABSOLUTE_TIME
+#include "mpl_timer_mach_absolute_time.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__PPC64_CYCLE
+#include "mpl_timer_ppc64_cycle.h"
+#endif
+
+/*
+ * Prototypes. These are defined here so that inlined timer calls can
+ * use them, as well as any profiling and timing code that is built into
+ * MPL
+ */
+
+#if defined MPLI_WTIME_IS_A_FUNCTION
+
+/*@
+ MPL_wtime - Return a time stamp
+
+ Output Parameter:
+. timeval - A pointer to an 'MPL_wtime_t' variable.
+
+ Notes:
+ This routine returns an `opaque` time value. This difference between two
+ time values returned by 'MPL_wtime' can be converted into an elapsed time
+ in seconds with the routine 'MPL_wtime_diff'.
+
+ This routine is defined this way to simplify its implementation as a macro.
+ For example, the for Intel x86 and gcc,
+.vb
+#define MPL_wtime(timeval) \
+ __asm__ __volatile__("rdtsc" : "=A" (*timeval))
+.ve
+
+ For some purposes, it is important
+ that the timer calls change the timing of the code as little as possible.
+ This form of a timer routine provides for a very fast timer that has
+ minimal impact on the rest of the code.
+
+ From a semantic standpoint, this format emphasizes that any particular
+ timer value has no meaning; only the difference between two values is
+ meaningful.
+
+ Module:
+ Timer
+
+ Question:
+ MPI-2 allows 'MPI_Wtime' to be a macro. We should make that easy; this
+ version does not accomplish that.
+ @*/
+int MPL_wtime(MPL_time_t * timeval);
+#endif /* MPLI_WTIME_IS_A_FUNCTION */
+
+/*@
+ MPL_wtime_diff - Compute the difference between two time stamps
+
+ Input Parameters:
+. t1, t2 - Two time values set by 'MPL_wtime' on this process.
+
+
+ Output Parameter:
+. diff - The different in time between t2 and t1, measured in seconds.
+
+ Note:
+ If 't1' is null, then 't2' is assumed to be differences accumulated with
+ 'MPL_wtime_acc', and the output value gives the number of seconds that
+ were accumulated.
+
+ Question:
+ Instead of handling a null value of 't1', should we have a separate
+ routine 'MPL_wtime_todouble' that converts a single timestamp to a
+ double value?
+
+ Module:
+ Timer
+ @*/
+int MPL_wtime_diff( MPL_time_t *t1, MPL_time_t *t2, double *diff );
+
+/*@
+ MPL_wtime_acc - Accumulate time values
+
+ Input Parameters:
+. t1,t2,t3 - Three time values. 't3' is updated with the difference between
+ 't2' and 't1': '*t3 += (t2 - t1)'.
+
+ Notes:
+ This routine is used to accumulate the time spent with a block of code
+ without first converting the time stamps into a particular arithmetic
+ type such as a 'double'. For example, if the 'MPL_wtime' routine accesses
+ a cycle counter, this routine (or macro) can perform the accumulation using
+ integer arithmetic.
+
+ To convert a time value accumulated with this routine, use 'MPL_wtime_diff'
+ with a 't1' of zero.
+
+ Module:
+ Timer
+ @*/
+int MPL_wtime_acc( MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3 );
+
+/*@
+ MPL_wtime_todouble - Converts a timestamp to a double
+
+ Input Parameter:
+. timeval - 'MPL_time_t' time stamp
+
+ Output Parameter:
+. seconds - Time in seconds from an arbitrary (but fixed) time in the past
+
+ Notes:
+ This routine may be used to change a timestamp into a number of seconds,
+ suitable for 'MPI_Wtime'.
+
+ @*/
+int MPL_wtime_todouble( MPL_time_t *timeval, double *seconds );
+
+/*@
+ MPL_wtick - Provide the resolution of the 'MPL_wtime' timer
+
+ Return value:
+ Resolution of the timer in seconds. In many cases, this is the
+ time between ticks of the clock that 'MPL_wtime' returns. In other
+ words, the minimum significant difference that can be computed by
+ 'MPL_wtime_diff'.
+
+ Note that in some cases, the resolution may be estimated. No application
+ should expect either the same estimate in different runs or the same
+ value on different processes.
+
+ Module:
+ Timer
+ @*/
+int MPL_wtick(double *);
+
+/*@
+ MPL_wtime_init - Initialize the timer
+
+ Note:
+ This routine should perform any steps needed to initialize the timer.
+ In addition, it should set the value of the attribute 'MPI_WTIME_IS_GLOBAL'
+ if the timer is known to be the same for all processes in 'MPI_COMM_WORLD'
+ (the value is zero by default).
+
+ Module:
+ Timer
+
+ @*/
+int MPL_wtime_init(void);
+
+/*
+ * For timers that do not have defined resolutions, compute the resolution
+ * by sampling the clock itself.
+ *
+ */
+static double tickval = -1.0;
+
+static void init_wtick(void) ATTRIBUTE((unused));
+static void init_wtick(void)
+{
+ double timediff;
+ MPL_time_t t1, t2;
+ int cnt;
+ int icnt;
+
+ tickval = 1.0e6;
+ for (icnt = 0; icnt < 10; icnt++) {
+ cnt = 1000;
+ MPL_wtime(&t1);
+ do {
+ MPL_wtime(&t2);
+ MPL_wtime_diff(&t1, &t2, &timediff);
+ if (timediff > 0)
+ break;
+ }
+ while (cnt--);
+ if (cnt && timediff > 0.0 && timediff < tickval) {
+ MPL_wtime_diff(&t1, &t2, &tickval);
+ }
+ }
+}
+
+#endif /* !defined(MPL_TIMER_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_timer_clock_gettime.h b/src/mpi/romio/mpl/include/mpl_timer_clock_gettime.h
new file mode 100644
index 0000000..6e0aa79
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_clock_gettime.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_CLOCK_GETTIME_H_INCLUDED
+#define MPL_TIMER_CLOCK_GETTIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <time.h>
+#ifdef MPL_NEEDS_SYS_TIME_H
+/* Some OS'es mistakenly require sys/time.h to get the definition of
+ CLOCK_REALTIME (POSIX requires the definition to be in time.h) */
+#include <sys/time.h>
+#endif
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_device.h b/src/mpi/romio/mpl/include/mpl_timer_device.h
new file mode 100644
index 0000000..5b6f599
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_device.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_DEVICE_H_INCLUDED
+#define MPL_TIMER_DEVICE_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+/*
+ * If the timer capability is provided by the device, it would need to
+ * expose it in two ways:
+ *
+ * 1. It would expose it through the MPID_ functionality. This
+ * model would be used by the MPICH internal code, and would
+ * give fast access to the timers.
+ *
+ * 2. It would expose it through the MPL_timer_ function pointers.
+ * This model would be used by "external" code segments (such as
+ * MPL) which do not have direct access to the MPICH devices.
+ * This model might be slightly slower, but would give the same
+ * functionality.
+ */
+extern int (*MPL_wtime_fn)(MPL_time_t *timeval);
+extern int (*MPL_wtime_diff_fn)(MPL_time_t *t1, MPL_time_t *t2, double *diff);
+extern int (*MPL_wtime_acc_fn)(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3);
+extern int (*MPL_wtime_todouble_fn)(MPL_time_t *timeval, double *seconds);
+extern int (*MPL_wtick_fn)(double *tick);
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_gcc_ia64_cycle.h b/src/mpi/romio/mpl/include/mpl_timer_gcc_ia64_cycle.h
new file mode 100644
index 0000000..32ac6c4
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_gcc_ia64_cycle.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GCC_IA64_CYCLE_H_INCLUDED
+#define MPL_TIMER_GCC_IA64_CYCLE_H_INCLUDED
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ MPL_time_t t_val;
+
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ t_val = __getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (t_val));
+#endif
+
+ *timeval = t_val;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_gethrtime.h b/src/mpi/romio/mpl/include/mpl_timer_gethrtime.h
new file mode 100644
index 0000000..3662795
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_gethrtime.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GETHRTIME_H_INCLUDED
+#define MPL_TIMER_GETHRTIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <sys/time.h>
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_gettimeofday.h b/src/mpi/romio/mpl/include/mpl_timer_gettimeofday.h
new file mode 100644
index 0000000..5afdb57
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_gettimeofday.h
@@ -0,0 +1,15 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GETTIMEOFDAY_H_INCLUDED
+#define MPL_TIMER_GETTIMEOFDAY_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_linux86_cycle.h b/src/mpi/romio/mpl/include/mpl_timer_linux86_cycle.h
new file mode 100644
index 0000000..f43f5f2
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_linux86_cycle.h
@@ -0,0 +1,42 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_LINUX86_CYCLE_H_INCLUDED
+#define MPL_TIMER_LINUX86_CYCLE_H_INCLUDED
+
+static inline int MPL_wtime(MPL_time_t *timeval)
+{
+/* The rdtsc instruction is not a "serializing" instruction, so the
+ processor is free to reorder it. In order to get more accurate
+ timing numbers with rdtsc, we need to put a serializing
+ instruction, like cpuid, before rdtsc. X86_64 architectures have
+ the rdtscp instruction which is synchronizing, we use this when we
+ can. */
+#ifdef MPL_LINUX86_CYCLE_RDTSCP
+ unsigned long long lower,upper,extra;
+ __asm__ __volatile__ ("rdtscp\n" : "=a" (lower), "=d" (upper), "=c" (extra));
+ *timeval = (upper << 32) + lower;
+
+#elif defined(MPL_LINUX86_CYCLE_CPUID_RDTSC64)
+ unsigned long long lower, upper;
+ __asm__ __volatile__("cpuid ; rdtsc" : "=a" (lower), "=d" (upper) : : "ebx", "ecx");
+ *timeval = (upper << 32) + lower;
+
+#elif defined(MPL_LINUX86_CYCLE_CPUID_RDTSC32)
+ __asm__ __volatile__("cpuid ; rdtsc" : "=A" (*timeval) : : "ebx", "ecx");
+
+#elif defined(MPL_LINUX86_CYCLE_RDTSC)
+/* The configure test using cpuid must have failed, try just rdtsc by itself */
+ __asm__ __volatile__("rdtsc" : "=A" (*timeval));
+
+#else
+#error Dont know which Linux timer to use
+#endif
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_mach_absolute_time.h b/src/mpi/romio/mpl/include/mpl_timer_mach_absolute_time.h
new file mode 100644
index 0000000..e520f4f
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_mach_absolute_time.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_MACH_ABSOLUTE_TIME_H_INCLUDED
+#define MPL_TIMER_MACH_ABSOLUTE_TIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <mach/mach_time.h>
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_ppc64_cycle.h b/src/mpi/romio/mpl/include/mpl_timer_ppc64_cycle.h
new file mode 100644
index 0000000..8b63933
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_ppc64_cycle.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_PPC64_CYCLE_H_INCLUDED
+#define MPL_TIMER_PPC64_CYCLE_H_INCLUDED
+
+#define SPRN_TBRU 0x10D
+#define SPRN_TBRL 0x10C
+
+static inline uint64_t tb()
+{
+ unsigned temp;
+ union
+ {
+ struct { unsigned hi, lo; } w;
+ uint64_t d;
+ } result;
+
+ do
+ {
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (SPRN_TBRU));
+ asm volatile ("mfspr %0,%1" : "=r" (result.w.lo) : "i" (SPRN_TBRL));
+ asm volatile ("mfspr %0,%1" : "=r" (result.w.hi) : "i" (SPRN_TBRU));
+ }
+ while (temp != result.w.hi);
+
+ return result.d;
+}
+
+static inline int MPL_wtime(MPL_time_t *timeval)
+{
+ *timeval = tb();
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_query_performance_counter.h b/src/mpi/romio/mpl/include/mpl_timer_query_performance_counter.h
new file mode 100644
index 0000000..0638c13
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_query_performance_counter.h
@@ -0,0 +1,20 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_QUERY_PERFORMANCE_COUNTER_H_INCLUDED
+#define MPL_TIMER_QUERY_PERFORMANCE_COUNTER_H_INCLUDED
+
+#include <winsock2.h>
+#include <windows.h>
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ QueryPerformanceCounter(timeval);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_timer_win86_cycle.h b/src/mpi/romio/mpl/include/mpl_timer_win86_cycle.h
new file mode 100644
index 0000000..ad670ed
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_timer_win86_cycle.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_WIN86_CYCLE_H_INCLUDED
+#define MPL_TIMER_WIN86_CYCLE_H_INCLUDED
+
+#include <winsock2.h>
+#include <windows.h>
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ register int *f1 = (int*)var_ptr;
+ __asm cpuid;
+ __asm rdtsc;
+ __asm mov ecx, f1;
+ __asm mov [ecx], eax;
+ __asm mov [ecx + TYPE int], edx;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/include/mpl_trmem.h b/src/mpi/romio/mpl/include/mpl_trmem.h
new file mode 100644
index 0000000..7b32df5
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_trmem.h
@@ -0,0 +1,199 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_TRMEM_H_INCLUDED)
+#define MPL_TRMEM_H_INCLUDED
+
+#if defined MPL_NEEDS_STRDUP_DECL && !defined strdup
+extern char *strdup(const char *);
+#endif /* MPL_NEEDS_STRDUP_DECL */
+
+#if defined(MPL_USE_MEMORY_TRACING)
+#define MPL_strdup(a) MPL_trstrdup(a,__LINE__,__FILE__)
+#elif defined(MPL_HAVE_STRDUP)
+#define MPL_strdup strdup
+#else
+char *MPL_strdup(const char *str);
+#endif /* defined(MPL_USE_MEMORY_TRACING) || defined(MPL_HAVE_STRDUP) */
+
+#ifdef MPL_USE_MEMORY_TRACING
+/*M
+ MPL_malloc - Allocate memory
+
+ Synopsis:
+.vb
+ void *MPL_malloc( size_t len )
+.ve
+
+ Input Parameter:
+. len - Length of memory to allocate in bytes
+
+ Return Value:
+ Pointer to allocated memory, or null if memory could not be allocated.
+
+ Notes:
+ This routine will often be implemented as the simple macro
+.vb
+ #define MPL_malloc(n) malloc(n)
+.ve
+ However, it can also be defined as
+.vb
+ #define MPL_malloc(n) MPL_trmalloc(n,__LINE__,__FILE__)
+.ve
+ where 'MPL_trmalloc' is a tracing version of 'malloc' that is included with
+ MPICH.
+
+ Module:
+ Utility
+ M*/
+#define MPL_malloc(a) MPL_trmalloc((a),__LINE__,__FILE__)
+
+/*M
+ MPL_calloc - Allocate memory that is initialized to zero.
+
+ Synopsis:
+.vb
+ void *MPL_calloc( size_t nelm, size_t elsize )
+.ve
+
+ Input Parameters:
++ nelm - Number of elements to allocate
+- elsize - Size of each element.
+
+ Notes:
+ Like 'MPL_malloc' and 'MPL_free', this will often be implemented as a
+ macro but may use 'MPL_trcalloc' to provide a tracing version.
+
+ Module:
+ Utility
+ M*/
+#define MPL_calloc(a,b) MPL_trcalloc((a),(b),__LINE__,__FILE__)
+
+/*M
+ MPL_free - Free memory
+
+ Synopsis:
+.vb
+ void MPL_free( void *ptr )
+.ve
+
+ Input Parameter:
+. ptr - Pointer to memory to be freed. This memory must have been allocated
+ with 'MPL_malloc'.
+
+ Notes:
+ This routine will often be implemented as the simple macro
+.vb
+ #define MPL_free(n) free(n)
+.ve
+ However, it can also be defined as
+.vb
+ #define MPL_free(n) MPL_trfree(n,__LINE__,__FILE__)
+.ve
+ where 'MPL_trfree' is a tracing version of 'free' that is included with
+ MPICH.
+
+ Module:
+ Utility
+ M*/
+#define MPL_free(a) MPL_trfree(a,__LINE__,__FILE__)
+
+#define MPL_realloc(a,b) MPL_trrealloc((a),(b),__LINE__,__FILE__)
+
+#else /* MPL_USE_MEMORY_TRACING */
+/* No memory tracing; just use native functions */
+#define MPL_malloc(a) malloc((size_t)(a))
+#define MPL_calloc(a,b) calloc((size_t)(a),(size_t)(b))
+#define MPL_free(a) free((void *)(a))
+#define MPL_realloc(a,b) realloc((void *)(a),(size_t)(b))
+
+#endif /* MPL_USE_MEMORY_TRACING */
+
+
+/* --------------------------------------------------------------------
+ * MPL memory alignment union
+ * The MPL_mem_alignment_t union is used to help internal structures or buffers
+ * follow the alignment rules for all predefined datatypes. */
+
+#if 0 /* sample usage : wrap up sample_t structure. */
+typedef union {
+ sample_t var;
+ MPL_mem_alignment_t alignment;
+} aligned_sample_t;
+#endif
+
+/* Union including all C types that possibly require the largest alignment bytes.
+ * Note that we do not need other Fortran/CXX predefined types because all of them
+ * are internally translated to appropriate C types. */
+typedef union {
+ /* Integer types.
+ * We only list signed types here, because an unsigned type always require
+ * the same alignment as its signed version. Fix me if this theory is wrong.*/
+ long long_align;
+#ifdef HAVE_LONG_LONG
+ long long ll_align;
+#endif
+#ifdef HAVE_INT32_T
+ int32_t int32_t_align;
+#endif
+#ifdef HAVE_INT64_T
+ int64_t int64_t_align;
+#endif
+
+ /* Logical type */
+#ifdef HAVE__BOOL
+ _Bool bool_align;
+#endif
+
+ /* Floating-point types */
+ double double_align;
+#ifdef HAVE_LONG_DOUBLE
+ long double ld_align;
+#endif
+
+ /* Complex types */
+#ifdef HAVE_DOUBLE__COMPLEX
+ double _Complex d_complex_align;
+#endif
+#ifdef HAVE_LONG_DOUBLE__COMPLEX
+ long double _Complex ld_complex_align;
+#endif
+ /* MPICH handles Fortran/CXX complex types as structure (see src/include/oputil.h).
+ * Because some platform may have special alignment rule for structures,
+ * we include them as well. */
+ struct {
+ double re;
+ double im;
+ } mpl_d_complex_align;
+#ifdef HAVE_LONG_DOUBLE
+ struct {
+ long double re;
+ long double im;
+ } mpl_ld_complex_align;
+#endif
+} MPL_mem_alignment_t;
+
+/* END of MPL memory alignment union
+ * -------------------------------------------------------------------- */
+
+/* FIXME: Consider an option of specifying __attribute__((malloc)) for
+ gcc - this lets gcc-style compilers know that the returned pointer
+ does not alias any pointer prior to the call.
+ */
+void MPL_trinit(int, int);
+void *MPL_trmalloc(size_t, int, const char[]);
+void MPL_trfree(void *, int, const char[]);
+int MPL_trvalid(const char[]);
+int MPL_trvalid2(const char[],int,const char[]);
+void *MPL_trcalloc(size_t, size_t, int, const char[]);
+void *MPL_trrealloc(void *, size_t, int, const char[]);
+void *MPL_trstrdup(const char *, int, const char[]);
+
+/* Make sure that FILE is defined */
+#include <stdio.h>
+void MPL_trdump(FILE *, int);
+
+#endif /* !defined(MPL_TRMEM_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_uthash.h b/src/mpi/romio/mpl/include/mpl_uthash.h
new file mode 100755
index 0000000..ba46af1
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_uthash.h
@@ -0,0 +1,980 @@
+/* MPICH changes:
+ *
+ * - The file name has been changed to avoid conflicts with any system-installed
+ * "uthash.h" header files.
+ * - some configure-time checking for __typeof() support was added
+ * - intentionally omitted from "mpl.h" in order to require using code to opt-in
+ * - override malloc/free/realloc to call MPL routines
+ */
+/*
+Copyright (c) 2003-2014, Troy D. Hanson http://troydhanson.github.com/uthash/
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef MPL_UTHASH_H
+#define MPL_UTHASH_H
+
+#include <string.h> /* memcmp,strlen */
+#include <stddef.h> /* ptrdiff_t */
+#include <stdlib.h> /* exit() */
+
+#ifdef MPL_HAVE___TYPEOF /* MPICH modification */
+/* These macros use decltype or the earlier __typeof GNU extension.
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+ when compiling c++ source) this code uses whatever method is needed
+ or, for VS2008 where neither is available, uses casting workarounds. */
+#if defined(_MSC_VER) /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+#define MPL_DECLTYPE(x) (decltype(x))
+#else /* VS2008 or older (or VS2010 in C mode) */
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#endif
+#elif defined(__BORLANDC__) || defined(__LCC__) || defined(__WATCOMC__)
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#else /* GNU, Sun and other compilers */
+#define MPL_DECLTYPE(x) (__typeof(x))
+#endif
+#else /* !MPL_HAVE___TYPEOF */
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#endif /* !MPL_HAVE__TYPEOF */
+
+
+#ifdef MPL_NO_DECLTYPE
+#define MPL_DECLTYPE_ASSIGN(dst,src) \
+do { \
+ char **_da_dst = (char**)(&(dst)); \
+ *_da_dst = (char*)(src); \
+} while(0)
+#else
+#define MPL_DECLTYPE_ASSIGN(dst,src) \
+do { \
+ (dst) = MPL_DECLTYPE(dst)(src); \
+} while(0)
+#endif
+
+/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */
+#if defined(_WIN32)
+#if defined(_MSC_VER) && _MSC_VER >= 1600
+#include <stdint.h>
+#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+#elif defined(__GNUC__) && !defined(__VXWORKS__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+
+#define MPL_UTHASH_VERSION 1.9.9
+
+#ifndef MPL_uthash_fatal
+#define MPL_uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */
+#endif
+#ifndef MPL_uthash_malloc
+#define MPL_uthash_malloc(sz) MPL_malloc(sz) /* malloc fcn */
+#endif
+#ifndef MPL_uthash_free
+#define MPL_uthash_free(ptr,sz) MPL_free(ptr) /* free fcn */
+#endif
+
+#ifndef MPL_uthash_noexpand_fyi
+#define MPL_uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
+#endif
+#ifndef MPL_uthash_expand_fyi
+#define MPL_uthash_expand_fyi(tbl) /* can be defined to log expands */
+#endif
+
+/* initial number of buckets */
+#define MPL_HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */
+#define MPL_HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */
+#define MPL_HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */
+
+/* calculate the element whose hash handle address is hhe */
+#define MPL_ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+
+#define MPL_HASH_FIND(hh,head,keyptr,keylen,out) \
+do { \
+ out=NULL; \
+ if (head != NULL) { \
+ unsigned _hf_bkt,_hf_hashv; \
+ MPL_HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \
+ if (MPL_HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv) != 0) { \
+ MPL_HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \
+ keyptr,keylen,out); \
+ } \
+ } \
+} while (0)
+
+#ifdef MPL_HASH_BLOOM
+#define MPL_HASH_BLOOM_BITLEN (1UL << MPL_HASH_BLOOM)
+#define MPL_HASH_BLOOM_BYTELEN (MPL_HASH_BLOOM_BITLEN/8UL) + (((MPL_HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL)
+#define MPL_HASH_BLOOM_MAKE(tbl) \
+do { \
+ (tbl)->bloom_nbits = MPL_HASH_BLOOM; \
+ (tbl)->bloom_bv = (uint8_t*)MPL_uthash_malloc(MPL_HASH_BLOOM_BYTELEN); \
+ if (!((tbl)->bloom_bv)) { MPL_uthash_fatal( "out of memory"); } \
+ memset((tbl)->bloom_bv, 0, MPL_HASH_BLOOM_BYTELEN); \
+ (tbl)->bloom_sig = MPL_HASH_BLOOM_SIGNATURE; \
+} while (0)
+
+#define MPL_HASH_BLOOM_FREE(tbl) \
+do { \
+ MPL_uthash_free((tbl)->bloom_bv, MPL_HASH_BLOOM_BYTELEN); \
+} while (0)
+
+#define MPL_HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U)))
+#define MPL_HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U)))
+
+#define MPL_HASH_BLOOM_ADD(tbl,hashv) \
+ MPL_HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U)))
+
+#define MPL_HASH_BLOOM_TEST(tbl,hashv) \
+ MPL_HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U)))
+
+#else
+#define MPL_HASH_BLOOM_MAKE(tbl)
+#define MPL_HASH_BLOOM_FREE(tbl)
+#define MPL_HASH_BLOOM_ADD(tbl,hashv)
+#define MPL_HASH_BLOOM_TEST(tbl,hashv) (1)
+#define MPL_HASH_BLOOM_BYTELEN 0U
+#endif
+
+#define MPL_HASH_MAKE_TABLE(hh,head) \
+do { \
+ (head)->hh.tbl = (MPL_UT_hash_table*)MPL_uthash_malloc( \
+ sizeof(MPL_UT_hash_table)); \
+ if (!((head)->hh.tbl)) { MPL_uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl, 0, sizeof(MPL_UT_hash_table)); \
+ (head)->hh.tbl->tail = &((head)->hh); \
+ (head)->hh.tbl->num_buckets = MPL_HASH_INITIAL_NUM_BUCKETS; \
+ (head)->hh.tbl->log2_num_buckets = MPL_HASH_INITIAL_NUM_BUCKETS_LOG2; \
+ (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
+ (head)->hh.tbl->buckets = (MPL_UT_hash_bucket*)MPL_uthash_malloc( \
+ MPL_HASH_INITIAL_NUM_BUCKETS*sizeof(struct MPL_UT_hash_bucket)); \
+ if (! (head)->hh.tbl->buckets) { MPL_uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl->buckets, 0, \
+ MPL_HASH_INITIAL_NUM_BUCKETS*sizeof(struct MPL_UT_hash_bucket)); \
+ MPL_HASH_BLOOM_MAKE((head)->hh.tbl); \
+ (head)->hh.tbl->signature = MPL_HASH_SIGNATURE; \
+} while(0)
+
+#define MPL_HASH_ADD(hh,head,fieldname,keylen_in,add) \
+ MPL_HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add)
+
+#define MPL_HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \
+do { \
+ replaced=NULL; \
+ MPL_HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \
+ if (replaced!=NULL) { \
+ MPL_HASH_DELETE(hh,head,replaced); \
+ } \
+ MPL_HASH_ADD(hh,head,fieldname,keylen_in,add); \
+} while(0)
+
+#define MPL_HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
+do { \
+ unsigned _ha_bkt; \
+ (add)->hh.next = NULL; \
+ (add)->hh.key = (char*)(keyptr); \
+ (add)->hh.keylen = (unsigned)(keylen_in); \
+ if (!(head)) { \
+ head = (add); \
+ (head)->hh.prev = NULL; \
+ MPL_HASH_MAKE_TABLE(hh,head); \
+ } else { \
+ (head)->hh.tbl->tail->next = (add); \
+ (add)->hh.prev = MPL_ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
+ (head)->hh.tbl->tail = &((add)->hh); \
+ } \
+ (head)->hh.tbl->num_items++; \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ MPL_HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \
+ (add)->hh.hashv, _ha_bkt); \
+ MPL_HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \
+ MPL_HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \
+ MPL_HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \
+ MPL_HASH_FSCK(hh,head); \
+} while(0)
+
+#define MPL_HASH_TO_BKT( hashv, num_bkts, bkt ) \
+do { \
+ bkt = ((hashv) & ((num_bkts) - 1U)); \
+} while(0)
+
+/* delete "delptr" from the hash table.
+ * "the usual" patch-up process for the app-order doubly-linked-list.
+ * The use of _hd_hh_del below deserves special explanation.
+ * These used to be expressed using (delptr) but that led to a bug
+ * if someone used the same symbol for the head and deletee, like
+ * HASH_DELETE(hh,users,users);
+ * We want that to work, but by changing the head (users) below
+ * we were forfeiting our ability to further refer to the deletee (users)
+ * in the patch-up process. Solution: use scratch space to
+ * copy the deletee pointer, then the latter references are via that
+ * scratch pointer rather than through the repointed (users) symbol.
+ */
+#define MPL_HASH_DELETE(hh,head,delptr) \
+do { \
+ struct MPL_UT_hash_handle *_hd_hh_del; \
+ if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \
+ MPL_uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket) ); \
+ MPL_HASH_BLOOM_FREE((head)->hh.tbl); \
+ MPL_uthash_free((head)->hh.tbl, sizeof(MPL_UT_hash_table)); \
+ head = NULL; \
+ } else { \
+ unsigned _hd_bkt; \
+ _hd_hh_del = (MPL_UT_hash_handle*)&((delptr)->hh); \
+ if ((delptr) == MPL_ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \
+ (head)->hh.tbl->tail = \
+ (MPL_UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho); \
+ } \
+ if ((delptr)->hh.prev != NULL) { \
+ ((MPL_UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho))->next = (delptr)->hh.next; \
+ } else { \
+ MPL_DECLTYPE_ASSIGN(head,(delptr)->hh.next); \
+ } \
+ if (_hd_hh_del->next != NULL) { \
+ ((MPL_UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \
+ (head)->hh.tbl->hho))->prev = \
+ _hd_hh_del->prev; \
+ } \
+ MPL_HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ MPL_HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
+ (head)->hh.tbl->num_items--; \
+ } \
+ MPL_HASH_FSCK(hh,head); \
+} while (0)
+
+
+/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+#define MPL_HASH_FIND_STR(head,findstr,out) \
+ MPL_HASH_FIND(hh,head,findstr,(unsigned)strlen(findstr),out)
+#define MPL_HASH_ADD_STR(head,strfield,add) \
+ MPL_HASH_ADD(hh,head,strfield[0],(unsigned int)strlen(add->strfield),add)
+#define MPL_HASH_REPLACE_STR(head,strfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,strfield[0],(unsigned)strlen(add->strfield),add,replaced)
+#define MPL_HASH_FIND_INT(head,findint,out) \
+ MPL_HASH_FIND(hh,head,findint,sizeof(int),out)
+#define MPL_HASH_ADD_INT(head,intfield,add) \
+ MPL_HASH_ADD(hh,head,intfield,sizeof(int),add)
+#define MPL_HASH_REPLACE_INT(head,intfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
+#define MPL_HASH_FIND_PTR(head,findptr,out) \
+ MPL_HASH_FIND(hh,head,findptr,sizeof(void *),out)
+#define MPL_HASH_ADD_PTR(head,ptrfield,add) \
+ MPL_HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+#define MPL_HASH_REPLACE_PTR(head,ptrfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
+#define MPL_HASH_DEL(head,delptr) \
+ MPL_HASH_DELETE(hh,head,delptr)
+
+/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+ * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+ */
+#ifdef MPL_HASH_DEBUG
+#define MPL_HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+#define MPL_HASH_FSCK(hh,head) \
+do { \
+ struct MPL_UT_hash_handle *_thh; \
+ if (head) { \
+ unsigned _bkt_i; \
+ unsigned _count; \
+ char *_prev; \
+ _count = 0; \
+ for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \
+ unsigned _bkt_count = 0; \
+ _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
+ _prev = NULL; \
+ while (_thh) { \
+ if (_prev != (char*)(_thh->hh_prev)) { \
+ MPL_HASH_OOPS("invalid hh_prev %p, actual %p\n", \
+ _thh->hh_prev, _prev ); \
+ } \
+ _bkt_count++; \
+ _prev = (char*)(_thh); \
+ _thh = _thh->hh_next; \
+ } \
+ _count += _bkt_count; \
+ if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
+ MPL_HASH_OOPS("invalid bucket count %u, actual %u\n", \
+ (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
+ } \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ MPL_HASH_OOPS("invalid hh item count %u, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ /* traverse hh in app order; check next/prev integrity, count */ \
+ _count = 0; \
+ _prev = NULL; \
+ _thh = &(head)->hh; \
+ while (_thh) { \
+ _count++; \
+ if (_prev !=(char*)(_thh->prev)) { \
+ MPL_HASH_OOPS("invalid prev %p, actual %p\n", \
+ _thh->prev, _prev ); \
+ } \
+ _prev = (char*)MPL_ELMT_FROM_HH((head)->hh.tbl, _thh); \
+ _thh = ( _thh->next ? (MPL_UT_hash_handle*)((char*)(_thh->next) + \
+ (head)->hh.tbl->hho) : NULL ); \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ MPL_HASH_OOPS("invalid app item count %u, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ } \
+} while (0)
+#else
+#define MPL_HASH_FSCK(hh,head)
+#endif
+
+/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+ * the descriptor to which this macro is defined for tuning the hash function.
+ * The app can #include <unistd.h> to get the prototype for write(2). */
+#ifdef MPL_HASH_EMIT_KEYS
+#define MPL_HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
+do { \
+ unsigned _klen = fieldlen; \
+ write(MPL_HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
+ write(MPL_HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \
+} while (0)
+#else
+#define MPL_HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+#endif
+
+/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+#ifdef MPL_HASH_FUNCTION
+#define MPL_HASH_FCN MPL_HASH_FUNCTION
+#else
+#define MPL_HASH_FCN MPL_HASH_JEN
+#endif
+
+/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
+#define MPL_HASH_BER(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hb_keylen=(unsigned)keylen; \
+ const unsigned char *_hb_key=(const unsigned char*)(key); \
+ (hashv) = 0; \
+ while (_hb_keylen-- != 0U) { \
+ (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \
+ } \
+ bkt = (hashv) & (num_bkts-1U); \
+} while (0)
+
+
+/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+ * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+#define MPL_HASH_SAX(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _sx_i; \
+ const unsigned char *_hs_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_sx_i=0; _sx_i < keylen; _sx_i++) { \
+ hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
+ } \
+ bkt = hashv & (num_bkts-1U); \
+} while (0)
+/* FNV-1a variation */
+#define MPL_HASH_FNV(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _fn_i; \
+ const unsigned char *_hf_key=(const unsigned char*)(key); \
+ hashv = 2166136261U; \
+ for(_fn_i=0; _fn_i < keylen; _fn_i++) { \
+ hashv = hashv ^ _hf_key[_fn_i]; \
+ hashv = hashv * 16777619U; \
+ } \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#define MPL_HASH_OAT(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _ho_i; \
+ const unsigned char *_ho_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
+ hashv += _ho_key[_ho_i]; \
+ hashv += (hashv << 10); \
+ hashv ^= (hashv >> 6); \
+ } \
+ hashv += (hashv << 3); \
+ hashv ^= (hashv >> 11); \
+ hashv += (hashv << 15); \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#define MPL_HASH_JEN_MIX(a,b,c) \
+do { \
+ a -= b; a -= c; a ^= ( c >> 13 ); \
+ b -= c; b -= a; b ^= ( a << 8 ); \
+ c -= a; c -= b; c ^= ( b >> 13 ); \
+ a -= b; a -= c; a ^= ( c >> 12 ); \
+ b -= c; b -= a; b ^= ( a << 16 ); \
+ c -= a; c -= b; c ^= ( b >> 5 ); \
+ a -= b; a -= c; a ^= ( c >> 3 ); \
+ b -= c; b -= a; b ^= ( a << 10 ); \
+ c -= a; c -= b; c ^= ( b >> 15 ); \
+} while (0)
+
+#define MPL_HASH_JEN(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hj_i,_hj_j,_hj_k; \
+ unsigned const char *_hj_key=(unsigned const char*)(key); \
+ hashv = 0xfeedbeefu; \
+ _hj_i = _hj_j = 0x9e3779b9u; \
+ _hj_k = (unsigned)(keylen); \
+ while (_hj_k >= 12U) { \
+ _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
+ + ( (unsigned)_hj_key[2] << 16 ) \
+ + ( (unsigned)_hj_key[3] << 24 ) ); \
+ _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
+ + ( (unsigned)_hj_key[6] << 16 ) \
+ + ( (unsigned)_hj_key[7] << 24 ) ); \
+ hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
+ + ( (unsigned)_hj_key[10] << 16 ) \
+ + ( (unsigned)_hj_key[11] << 24 ) ); \
+ \
+ MPL_HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ \
+ _hj_key += 12; \
+ _hj_k -= 12U; \
+ } \
+ hashv += (unsigned)(keylen); \
+ switch ( _hj_k ) { \
+ case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \
+ case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \
+ case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \
+ case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \
+ case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \
+ case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \
+ case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \
+ case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \
+ case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \
+ case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \
+ case 1: _hj_i += _hj_key[0]; \
+ } \
+ MPL_HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+/* The Paul Hsieh hash function */
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+ || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
+ +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+#define MPL_HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned const char *_sfh_key=(unsigned const char*)(key); \
+ uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \
+ \
+ unsigned _sfh_rem = _sfh_len & 3U; \
+ _sfh_len >>= 2; \
+ hashv = 0xcafebabeu; \
+ \
+ /* Main loop */ \
+ for (;_sfh_len > 0U; _sfh_len--) { \
+ hashv += get16bits (_sfh_key); \
+ _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \
+ hashv = (hashv << 16) ^ _sfh_tmp; \
+ _sfh_key += 2U*sizeof (uint16_t); \
+ hashv += hashv >> 11; \
+ } \
+ \
+ /* Handle end cases */ \
+ switch (_sfh_rem) { \
+ case 3: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 16; \
+ hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \
+ hashv += hashv >> 11; \
+ break; \
+ case 2: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 11; \
+ hashv += hashv >> 17; \
+ break; \
+ case 1: hashv += *_sfh_key; \
+ hashv ^= hashv << 10; \
+ hashv += hashv >> 1; \
+ } \
+ \
+ /* Force "avalanching" of final 127 bits */ \
+ hashv ^= hashv << 3; \
+ hashv += hashv >> 5; \
+ hashv ^= hashv << 4; \
+ hashv += hashv >> 17; \
+ hashv ^= hashv << 25; \
+ hashv += hashv >> 6; \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#ifdef MPL_HASH_USING_NO_STRICT_ALIASING
+/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
+ * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+ * MurmurHash uses the faster approach only on CPU's where we know it's safe.
+ *
+ * Note the preprocessor built-in defines can be emitted using:
+ *
+ * gcc -m64 -dM -E - < /dev/null (on gcc)
+ * cc -## a.c (where a.c is a simple test file) (Sun Studio)
+ */
+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))
+#define MPL_MUR_GETBLOCK(p,i) p[i]
+#else /* non intel */
+#define MPL_MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL)
+#define MPL_MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL)
+#define MPL_MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL)
+#define MPL_MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL)
+#define MPL_WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
+#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
+#define MPL_MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
+#define MPL_MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
+#define MPL_MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8))
+#else /* assume little endian non-intel */
+#define MPL_MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
+#define MPL_MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
+#define MPL_MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8))
+#endif
+#define MPL_MUR_GETBLOCK(p,i) (MPL_MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \
+ (MPL_MUR_PLUS1_ALIGNED(p) ? MPL_MUR_THREE_ONE(p) : \
+ (MPL_MUR_PLUS2_ALIGNED(p) ? MPL_MUR_TWO_TWO(p) : \
+ MPL_MUR_ONE_THREE(p))))
+#endif
+#define MPL_MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+#define MPL_MUR_FMIX(_h) \
+do { \
+ _h ^= _h >> 16; \
+ _h *= 0x85ebca6bu; \
+ _h ^= _h >> 13; \
+ _h *= 0xc2b2ae35u; \
+ _h ^= _h >> 16; \
+} while(0)
+
+#define MPL_HASH_MUR(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ const uint8_t *_mur_data = (const uint8_t*)(key); \
+ const int _mur_nblocks = (int)(keylen) / 4; \
+ uint32_t _mur_h1 = 0xf88D5353u; \
+ uint32_t _mur_c1 = 0xcc9e2d51u; \
+ uint32_t _mur_c2 = 0x1b873593u; \
+ uint32_t _mur_k1 = 0; \
+ const uint8_t *_mur_tail; \
+ const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \
+ int _mur_i; \
+ for(_mur_i = -_mur_nblocks; _mur_i!=0; _mur_i++) { \
+ _mur_k1 = MPL_MUR_GETBLOCK(_mur_blocks,_mur_i); \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MPL_MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ \
+ _mur_h1 ^= _mur_k1; \
+ _mur_h1 = MPL_MUR_ROTL32(_mur_h1,13); \
+ _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \
+ } \
+ _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \
+ _mur_k1=0; \
+ switch((keylen) & 3U) { \
+ case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \
+ case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \
+ case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MPL_MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ _mur_h1 ^= _mur_k1; \
+ } \
+ _mur_h1 ^= (uint32_t)(keylen); \
+ MPL_MUR_FMIX(_mur_h1); \
+ hashv = _mur_h1; \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+#endif /* HASH_USING_NO_STRICT_ALIASING */
+
+/* key comparison function; return 0 if keys equal */
+#define MPL_HASH_KEYCMP(a,b,len) memcmp(a,b,(unsigned long)(len))
+
+/* iterate over items in a known bucket to find desired item */
+#define MPL_HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \
+do { \
+ if (head.hh_head != NULL) { MPL_DECLTYPE_ASSIGN(out,MPL_ELMT_FROM_HH(tbl,head.hh_head)); } \
+ else { out=NULL; } \
+ while (out != NULL) { \
+ if ((out)->hh.keylen == (keylen_in)) { \
+ if ((MPL_HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) { break; } \
+ } \
+ if ((out)->hh.hh_next != NULL) { MPL_DECLTYPE_ASSIGN(out,MPL_ELMT_FROM_HH(tbl,(out)->hh.hh_next)); } \
+ else { out = NULL; } \
+ } \
+} while(0)
+
+/* add an item to a bucket */
+#define MPL_HASH_ADD_TO_BKT(head,addhh) \
+do { \
+ head.count++; \
+ (addhh)->hh_next = head.hh_head; \
+ (addhh)->hh_prev = NULL; \
+ if (head.hh_head != NULL) { (head).hh_head->hh_prev = (addhh); } \
+ (head).hh_head=addhh; \
+ if ((head.count >= ((head.expand_mult+1U) * MPL_HASH_BKT_CAPACITY_THRESH)) \
+ && ((addhh)->tbl->noexpand != 1U)) { \
+ MPL_HASH_EXPAND_BUCKETS((addhh)->tbl); \
+ } \
+} while(0)
+
+/* remove an item from a given bucket */
+#define MPL_HASH_DEL_IN_BKT(hh,head,hh_del) \
+ (head).count--; \
+ if ((head).hh_head == (MPL_UT_hash_handle*)hh_del) { \
+ (head).hh_head = (MPL_UT_hash_handle*)hh_del->hh_next; \
+ } \
+ if (hh_del->hh_prev) { \
+ hh_del->hh_prev->hh_next = hh_del->hh_next; \
+ } \
+ if (hh_del->hh_next) { \
+ hh_del->hh_next->hh_prev = hh_del->hh_prev; \
+ }
+
+/* Bucket expansion has the effect of doubling the number of buckets
+ * and redistributing the items into the new buckets. Ideally the
+ * items will distribute more or less evenly into the new buckets
+ * (the extent to which this is true is a measure of the quality of
+ * the hash function as it applies to the key domain).
+ *
+ * With the items distributed into more buckets, the chain length
+ * (item count) in each bucket is reduced. Thus by expanding buckets
+ * the hash keeps a bound on the chain length. This bounded chain
+ * length is the essence of how a hash provides constant time lookup.
+ *
+ * The calculation of tbl->ideal_chain_maxlen below deserves some
+ * explanation. First, keep in mind that we're calculating the ideal
+ * maximum chain length based on the *new* (doubled) bucket count.
+ * In fractions this is just n/b (n=number of items,b=new num buckets).
+ * Since the ideal chain length is an integer, we want to calculate
+ * ceil(n/b). We don't depend on floating point arithmetic in this
+ * hash, so to calculate ceil(n/b) with integers we could write
+ *
+ * ceil(n/b) = (n/b) + ((n%b)?1:0)
+ *
+ * and in fact a previous version of this hash did just that.
+ * But now we have improved things a bit by recognizing that b is
+ * always a power of two. We keep its base 2 log handy (call it lb),
+ * so now we can write this with a bit shift and logical AND:
+ *
+ * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+ *
+ */
+#define MPL_HASH_EXPAND_BUCKETS(tbl) \
+do { \
+ unsigned _he_bkt; \
+ unsigned _he_bkt_i; \
+ struct MPL_UT_hash_handle *_he_thh, *_he_hh_nxt; \
+ MPL_UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
+ _he_new_buckets = (MPL_UT_hash_bucket*)MPL_uthash_malloc( \
+ 2UL * tbl->num_buckets * sizeof(struct MPL_UT_hash_bucket)); \
+ if (!_he_new_buckets) { MPL_uthash_fatal( "out of memory"); } \
+ memset(_he_new_buckets, 0, \
+ 2UL * tbl->num_buckets * sizeof(struct MPL_UT_hash_bucket)); \
+ tbl->ideal_chain_maxlen = \
+ (tbl->num_items >> (tbl->log2_num_buckets+1U)) + \
+ (((tbl->num_items & ((tbl->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
+ tbl->nonideal_items = 0; \
+ for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \
+ { \
+ _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \
+ while (_he_thh != NULL) { \
+ _he_hh_nxt = _he_thh->hh_next; \
+ MPL_HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2U, _he_bkt); \
+ _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \
+ if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \
+ tbl->nonideal_items++; \
+ _he_newbkt->expand_mult = _he_newbkt->count / \
+ tbl->ideal_chain_maxlen; \
+ } \
+ _he_thh->hh_prev = NULL; \
+ _he_thh->hh_next = _he_newbkt->hh_head; \
+ if (_he_newbkt->hh_head != NULL) { _he_newbkt->hh_head->hh_prev = \
+ _he_thh; } \
+ _he_newbkt->hh_head = _he_thh; \
+ _he_thh = _he_hh_nxt; \
+ } \
+ } \
+ MPL_uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket) ); \
+ tbl->num_buckets *= 2U; \
+ tbl->log2_num_buckets++; \
+ tbl->buckets = _he_new_buckets; \
+ tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \
+ (tbl->ineff_expands+1U) : 0U; \
+ if (tbl->ineff_expands > 1U) { \
+ tbl->noexpand=1; \
+ MPL_uthash_noexpand_fyi(tbl); \
+ } \
+ MPL_uthash_expand_fyi(tbl); \
+} while(0)
+
+
+/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+/* Note that HASH_SORT assumes the hash handle name to be hh.
+ * HASH_SRT was added to allow the hash handle name to be passed in. */
+#define MPL_HASH_SORT(head,cmpfcn) MPL_HASH_SRT(hh,head,cmpfcn)
+#define MPL_HASH_SRT(hh,head,cmpfcn) \
+do { \
+ unsigned _hs_i; \
+ unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
+ struct MPL_UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
+ if (head != NULL) { \
+ _hs_insize = 1; \
+ _hs_looping = 1; \
+ _hs_list = &((head)->hh); \
+ while (_hs_looping != 0U) { \
+ _hs_p = _hs_list; \
+ _hs_list = NULL; \
+ _hs_tail = NULL; \
+ _hs_nmerges = 0; \
+ while (_hs_p != NULL) { \
+ _hs_nmerges++; \
+ _hs_q = _hs_p; \
+ _hs_psize = 0; \
+ for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \
+ _hs_psize++; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ if (! (_hs_q) ) { break; } \
+ } \
+ _hs_qsize = _hs_insize; \
+ while ((_hs_psize > 0U) || ((_hs_qsize > 0U) && (_hs_q != NULL))) {\
+ if (_hs_psize == 0U) { \
+ _hs_e = _hs_q; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } else if ( (_hs_qsize == 0U) || (_hs_q == NULL) ) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL){ \
+ _hs_p = (MPL_UT_hash_handle*)((_hs_p->next != NULL) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ } \
+ _hs_psize--; \
+ } else if (( \
+ cmpfcn(MPL_DECLTYPE(head)(MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \
+ MPL_DECLTYPE(head)(MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \
+ ) <= 0) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL){ \
+ _hs_p = (MPL_UT_hash_handle*)((_hs_p->next != NULL) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ } \
+ _hs_psize--; \
+ } else { \
+ _hs_e = _hs_q; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } \
+ if ( _hs_tail != NULL ) { \
+ _hs_tail->next = ((_hs_e != NULL) ? \
+ MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \
+ } else { \
+ _hs_list = _hs_e; \
+ } \
+ if (_hs_e != NULL) { \
+ _hs_e->prev = ((_hs_tail != NULL) ? \
+ MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \
+ } \
+ _hs_tail = _hs_e; \
+ } \
+ _hs_p = _hs_q; \
+ } \
+ if (_hs_tail != NULL){ \
+ _hs_tail->next = NULL; \
+ } \
+ if ( _hs_nmerges <= 1U ) { \
+ _hs_looping=0; \
+ (head)->hh.tbl->tail = _hs_tail; \
+ MPL_DECLTYPE_ASSIGN(head,MPL_ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
+ } \
+ _hs_insize *= 2U; \
+ } \
+ MPL_HASH_FSCK(hh,head); \
+ } \
+} while (0)
+
+/* This function selects items from one hash into another hash.
+ * The end result is that the selected items have dual presence
+ * in both hashes. There is no copy of the items made; rather
+ * they are added into the new hash through a secondary hash
+ * hash handle that must be present in the structure. */
+#define MPL_HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
+do { \
+ unsigned _src_bkt, _dst_bkt; \
+ void *_last_elt=NULL, *_elt; \
+ MPL_UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
+ ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
+ if (src != NULL) { \
+ for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
+ for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
+ _src_hh != NULL; \
+ _src_hh = _src_hh->hh_next) { \
+ _elt = MPL_ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
+ if (cond(_elt)) { \
+ _dst_hh = (MPL_UT_hash_handle*)(((char*)_elt) + _dst_hho); \
+ _dst_hh->key = _src_hh->key; \
+ _dst_hh->keylen = _src_hh->keylen; \
+ _dst_hh->hashv = _src_hh->hashv; \
+ _dst_hh->prev = _last_elt; \
+ _dst_hh->next = NULL; \
+ if (_last_elt_hh != NULL) { _last_elt_hh->next = _elt; } \
+ if (dst == NULL) { \
+ MPL_DECLTYPE_ASSIGN(dst,_elt); \
+ MPL_HASH_MAKE_TABLE(hh_dst,dst); \
+ } else { \
+ _dst_hh->tbl = (dst)->hh_dst.tbl; \
+ } \
+ MPL_HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
+ MPL_HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \
+ (dst)->hh_dst.tbl->num_items++; \
+ _last_elt = _elt; \
+ _last_elt_hh = _dst_hh; \
+ } \
+ } \
+ } \
+ } \
+ MPL_HASH_FSCK(hh_dst,dst); \
+} while (0)
+
+#define MPL_HASH_CLEAR(hh,head) \
+do { \
+ if (head != NULL) { \
+ MPL_uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket)); \
+ MPL_HASH_BLOOM_FREE((head)->hh.tbl); \
+ MPL_uthash_free((head)->hh.tbl, sizeof(MPL_UT_hash_table)); \
+ (head)=NULL; \
+ } \
+} while(0)
+
+#define MPL_HASH_OVERHEAD(hh,head) \
+ ((head != NULL) ? ( \
+ (size_t)(((head)->hh.tbl->num_items * sizeof(MPL_UT_hash_handle)) + \
+ ((head)->hh.tbl->num_buckets * sizeof(MPL_UT_hash_bucket)) + \
+ sizeof(MPL_UT_hash_table) + \
+ (MPL_HASH_BLOOM_BYTELEN))) : 0U)
+
+#ifdef MPL_NO_DECLTYPE
+#define MPL_HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#else
+#define MPL_HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((tmp)=MPL_DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((tmp)=MPL_DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#endif
+
+/* obtain a count of items in the hash */
+#define MPL_HASH_COUNT(head) MPL_HASH_CNT(hh,head)
+#define MPL_HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U)
+
+typedef struct MPL_UT_hash_bucket {
+ struct MPL_UT_hash_handle *hh_head;
+ unsigned count;
+
+ /* expand_mult is normally set to 0. In this situation, the max chain length
+ * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+ * the bucket's chain exceeds this length, bucket expansion is triggered).
+ * However, setting expand_mult to a non-zero value delays bucket expansion
+ * (that would be triggered by additions to this particular bucket)
+ * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+ * (The multiplier is simply expand_mult+1). The whole idea of this
+ * multiplier is to reduce bucket expansions, since they are expensive, in
+ * situations where we know that a particular bucket tends to be overused.
+ * It is better to let its chain length grow to a longer yet-still-bounded
+ * value, than to do an O(n) bucket expansion too often.
+ */
+ unsigned expand_mult;
+
+} MPL_UT_hash_bucket;
+
+/* random signature used only to find hash tables in external analysis */
+#define MPL_HASH_SIGNATURE 0xa0111fe1u
+#define MPL_HASH_BLOOM_SIGNATURE 0xb12220f2u
+
+typedef struct MPL_UT_hash_table {
+ MPL_UT_hash_bucket *buckets;
+ unsigned num_buckets, log2_num_buckets;
+ unsigned num_items;
+ struct MPL_UT_hash_handle *tail; /* tail hh in app order, for fast append */
+ ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+
+ /* in an ideal situation (all buckets used equally), no bucket would have
+ * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+ unsigned ideal_chain_maxlen;
+
+ /* nonideal_items is the number of items in the hash whose chain position
+ * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+ * hash distribution; reaching them in a chain traversal takes >ideal steps */
+ unsigned nonideal_items;
+
+ /* ineffective expands occur when a bucket doubling was performed, but
+ * afterward, more than half the items in the hash had nonideal chain
+ * positions. If this happens on two consecutive expansions we inhibit any
+ * further expansion, as it's not helping; this happens when the hash
+ * function isn't a good fit for the key domain. When expansion is inhibited
+ * the hash will still work, albeit no longer in constant time. */
+ unsigned ineff_expands, noexpand;
+
+ uint32_t signature; /* used only to find hash tables in external analysis */
+#ifdef MPL_HASH_BLOOM
+ uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+ uint8_t *bloom_bv;
+ uint8_t bloom_nbits;
+#endif
+
+} MPL_UT_hash_table;
+
+typedef struct MPL_UT_hash_handle {
+ struct MPL_UT_hash_table *tbl;
+ void *prev; /* prev element in app order */
+ void *next; /* next element in app order */
+ struct MPL_UT_hash_handle *hh_prev; /* previous hh in bucket order */
+ struct MPL_UT_hash_handle *hh_next; /* next hh in bucket order */
+ void *key; /* ptr to enclosing struct's key */
+ unsigned keylen; /* enclosing struct's key len */
+ unsigned hashv; /* result of hash-fcn(key) */
+} MPL_UT_hash_handle;
+
+#endif /* MPL_UTHASH_H */
diff --git a/src/mpi/romio/mpl/include/mpl_utlist.h b/src/mpi/romio/mpl/include/mpl_utlist.h
new file mode 100644
index 0000000..7035fd5
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_utlist.h
@@ -0,0 +1,577 @@
+/* Argonne changes:
+
+ - The file name has been changed to avoid conflicts with any system-installed
+ "utlist.h" header files.
+ - some configure-time checking for __typeof() support was added
+ - intentionally omitted from "mpl.h" in order to require using code to opt-in
+ [goodell@ 2010-12-20]
+
+ - Added _N (for MPL_LL_ macros) and _NP (for MPL_DL_ and MPL_CDL_ macros)
+ variants to each macro. Thease take additional parameters to specify the
+ next or next and prev fields, respectively. The field name should be used in
+ those parameters. E.g., say the struct looks like this:
+
+ struct my_struct {
+ struct my_struct *my_next;
+ struct my_struct *my_prev;
+ int some_data;
+ };
+
+ Then, to append an element "my_element" of type my_struct:
+
+ MPL_DL_APPEND_NP(my_head, my_element, my_next, my_prev);
+
+ For convenience one can define a macro to eliminate the need to specify the
+ field names every time:
+
+ #define MY_STRUCT_MPL_DL_APPEND(head, add) \
+ MPL_DL_APPEND_NP(head, add, my_next, my_prev)
+
+ [buntinas 12/2/2011]
+*/
+
+/*
+Copyright (c) 2007-2011, Troy D. Hanson http://uthash.sourceforge.net
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#if !defined(MPL_UTLIST_H_INCLUDED)
+#define MPL_UTLIST_H_INCLUDED
+
+#define MPL_UTLIST_VERSION 1.9.5
+
+#include "mplconfig.h"
+
+/*
+ * This file contains macros to manipulate singly and doubly-linked lists.
+ *
+ * 1. LL_ macros: singly-linked lists.
+ * 2. DL_ macros: doubly-linked lists.
+ * 3. CDL_ macros: circular doubly-linked lists.
+ *
+ * To use singly-linked lists, your structure must have a "next" pointer.
+ * To use doubly-linked lists, your structure must "prev" and "next" pointers.
+ * Either way, the pointer to the head of the list must be initialized to NULL.
+ *
+ * ----------------.EXAMPLE -------------------------
+ * struct item {
+ * int id;
+ * struct item *prev, *next;
+ * }
+ *
+ * struct item *list = NULL:
+ *
+ * int main() {
+ * struct item *item;
+ * ... allocate and populate item ...
+ * DL_APPEND(list, item);
+ * }
+ * --------------------------------------------------
+ *
+ * For doubly-linked lists, the append and delete macros are O(1)
+ * For singly-linked lists, append and delete are O(n) but prepend is O(1)
+ * The sort macro is O(n log(n)) for all types of single/double/circular lists.
+ */
+
+#ifdef MPL_HAVE___TYPEOF /* MPICH modification */
+/* These macros use decltype or the earlier __typeof GNU extension.
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+ when compiling c++ code), this code uses whatever method is needed
+ or, for VS2008 where neither is available, uses casting workarounds. */
+#ifdef _MSC_VER /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+#define MPL_LDECLTYPE(x) decltype(x)
+#else /* VS2008 or older (or VS2010 in C mode) */
+#define MPL_NO_DECLTYPE
+#define MPL_LDECLTYPE(x) char*
+#endif
+#else /* GNU, Sun and other compilers */
+#define MPL_LDECLTYPE(x) __typeof(x)
+#endif
+#else /* !MPL_HAVE___TYPEOF */
+#define MPL_NO_DECLTYPE
+#define MPL_LDECLTYPE(x) char*
+#endif /* !MPL_HAVE___TYPEOF */
+
+/* for VS2008 we use some workarounds to get around the lack of decltype,
+ * namely, we always reassign our tmp variable to the list head if we need
+ * to dereference its prev/next pointers, and save/restore the real head.*/
+#ifdef MPL_NO_DECLTYPE
+#define MPL__SV(elt,list) _tmp = (char*)(list); {char **_alias = (char**)&(list); *_alias = (elt); }
+#define MPL__NEXT(elt,list,_next) ((char*)((list)->_next))
+#define MPL__NEXTASGN(elt,list,to,_next) { char **_alias = (char**)&((list)->_next); *_alias=(char*)(to); }
+#define MPL__PREV(elt,list,_prev) ((char*)((list)->_prev))
+#define MPL__PREVASGN(elt,list,to,_prev) { char **_alias = (char**)&((list)->_prev); *_alias=(char*)(to); }
+#define MPL__RS(list) { char **_alias = (char**)&(list); *_alias=_tmp; }
+#define MPL__CASTASGN(a,b) { char **_alias = (char**)&(a); *_alias=(char*)(b); }
+#else
+#define MPL__SV(elt,list)
+#define MPL__NEXT(elt,list,_next) ((elt)->_next)
+#define MPL__NEXTASGN(elt,list,to,_next) ((elt)->_next)=(to)
+#define MPL__PREV(elt,list,_prev) ((elt)->_prev)
+#define MPL__PREVASGN(elt,list,to,_prev) ((elt)->_prev)=(to)
+#define MPL__RS(list)
+#define MPL__CASTASGN(a,b) (a)=(b)
+#endif
+
+/******************************************************************************
+ * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort *
+ * Unwieldy variable names used here to avoid shadowing passed-in variables. *
+ *****************************************************************************/
+#define MPL_LL_SORT(list, cmp) MPL_LL_SORT_N(list, cmp, next)
+#define MPL_LL_SORT_N(list, cmp, _next) \
+do { \
+ MPL_LDECLTYPE(list) _ls_p; \
+ MPL_LDECLTYPE(list) _ls_q; \
+ MPL_LDECLTYPE(list) _ls_e; \
+ MPL_LDECLTYPE(list) _ls_tail; \
+ MPL_LDECLTYPE(list) _ls_oldhead; \
+ MPL_LDECLTYPE(list) _tmp; \
+ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+ if (list) { \
+ _ls_insize = 1; \
+ _ls_looping = 1; \
+ while (_ls_looping) { \
+ MPL__CASTASGN(_ls_p,list); \
+ MPL__CASTASGN(_ls_oldhead,list); \
+ list = NULL; \
+ _ls_tail = NULL; \
+ _ls_nmerges = 0; \
+ while (_ls_p) { \
+ _ls_nmerges++; \
+ _ls_q = _ls_p; \
+ _ls_psize = 0; \
+ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+ _ls_psize++; \
+ MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); \
+ if (!_ls_q) break; \
+ } \
+ _ls_qsize = _ls_insize; \
+ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+ if (_ls_psize == 0) { \
+ _ls_e = _ls_q; MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); _ls_qsize--; \
+ } else if (_ls_qsize == 0 || !_ls_q) { \
+ _ls_e = _ls_p; MPL__SV(_ls_p,list); _ls_p = MPL__NEXT(_ls_p,list,_next); MPL__RS(list); _ls_psize--; \
+ } else if (cmp(_ls_p,_ls_q) <= 0) { \
+ _ls_e = _ls_p; MPL__SV(_ls_p,list); _ls_p = MPL__NEXT(_ls_p,list,_next); MPL__RS(list); _ls_psize--; \
+ } else { \
+ _ls_e = _ls_q; MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); _ls_qsize--; \
+ } \
+ if (_ls_tail) { \
+ MPL__SV(_ls_tail,list); MPL__NEXTASGN(_ls_tail,list,_ls_e,_next); MPL__RS(list); \
+ } else { \
+ MPL__CASTASGN(list,_ls_e); \
+ } \
+ _ls_tail = _ls_e; \
+ } \
+ _ls_p = _ls_q; \
+ } \
+ MPL__SV(_ls_tail,list); MPL__NEXTASGN(_ls_tail,list,NULL,_next); MPL__RS(list); \
+ if (_ls_nmerges <= 1) { \
+ _ls_looping=0; \
+ } \
+ _ls_insize *= 2; \
+ } \
+ } else _tmp=NULL; /* quiet gcc unused variable warning */ \
+} while (0)
+
+#define MPL_DL_SORT(list, cmp) MPL_DL_SORT_NP(list, cmp, next, prev)
+#define MPL_DL_SORT_NP(list, cmp, _next, _prev) \
+do { \
+ MPL_LDECLTYPE(list) _ls_p; \
+ MPL_LDECLTYPE(list) _ls_q; \
+ MPL_LDECLTYPE(list) _ls_e; \
+ MPL_LDECLTYPE(list) _ls_tail; \
+ MPL_LDECLTYPE(list) _ls_oldhead; \
+ MPL_LDECLTYPE(list) _tmp; \
+ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+ if (list) { \
+ _ls_insize = 1; \
+ _ls_looping = 1; \
+ while (_ls_looping) { \
+ MPL__CASTASGN(_ls_p,list); \
+ MPL__CASTASGN(_ls_oldhead,list); \
+ list = NULL; \
+ _ls_tail = NULL; \
+ _ls_nmerges = 0; \
+ while (_ls_p) { \
+ _ls_nmerges++; \
+ _ls_q = _ls_p; \
+ _ls_psize = 0; \
+ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+ _ls_psize++; \
+ MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); \
+ if (!_ls_q) break; \
+ } \
+ _ls_qsize = _ls_insize; \
+ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+ if (_ls_psize == 0) { \
+ _ls_e = _ls_q; MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); _ls_qsize--; \
+ } else if (_ls_qsize == 0 || !_ls_q) { \
+ _ls_e = _ls_p; MPL__SV(_ls_p,list); _ls_p = MPL__NEXT(_ls_p,list,_next); MPL__RS(list); _ls_psize--; \
+ } else if (cmp(_ls_p,_ls_q) <= 0) { \
+ _ls_e = _ls_p; MPL__SV(_ls_p,list); _ls_p = MPL__NEXT(_ls_p,list,_next); MPL__RS(list); _ls_psize--; \
+ } else { \
+ _ls_e = _ls_q; MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); _ls_qsize--; \
+ } \
+ if (_ls_tail) { \
+ MPL__SV(_ls_tail,list); MPL__NEXTASGN(_ls_tail,list,_ls_e,_next); MPL__RS(list); \
+ } else { \
+ MPL__CASTASGN(list,_ls_e); \
+ } \
+ MPL__SV(_ls_e,list); MPL__PREVASGN(_ls_e,list,_ls_tail,_prev); MPL__RS(list); \
+ _ls_tail = _ls_e; \
+ } \
+ _ls_p = _ls_q; \
+ } \
+ MPL__CASTASGN(list->_prev, _ls_tail); \
+ MPL__SV(_ls_tail,list); MPL__NEXTASGN(_ls_tail,list,NULL,_next); MPL__RS(list); \
+ if (_ls_nmerges <= 1) { \
+ _ls_looping=0; \
+ } \
+ _ls_insize *= 2; \
+ } \
+ } else _tmp=NULL; /* quiet gcc unused variable warning */ \
+} while (0)
+
+#define MPL_CDL_SORT(list, cmp) MPL_CDL_SORT_NP(list, cmp, next, prev)
+#define MPL_CDL_SORT_NP(list, cmp, _next, _prev) \
+do { \
+ MPL_LDECLTYPE(list) _ls_p; \
+ MPL_LDECLTYPE(list) _ls_q; \
+ MPL_LDECLTYPE(list) _ls_e; \
+ MPL_LDECLTYPE(list) _ls_tail; \
+ MPL_LDECLTYPE(list) _ls_oldhead; \
+ MPL_LDECLTYPE(list) _tmp; \
+ MPL_LDECLTYPE(list) _tmp2; \
+ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+ if (list) { \
+ _ls_insize = 1; \
+ _ls_looping = 1; \
+ while (_ls_looping) { \
+ MPL__CASTASGN(_ls_p,list); \
+ MPL__CASTASGN(_ls_oldhead,list); \
+ list = NULL; \
+ _ls_tail = NULL; \
+ _ls_nmerges = 0; \
+ while (_ls_p) { \
+ _ls_nmerges++; \
+ _ls_q = _ls_p; \
+ _ls_psize = 0; \
+ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+ _ls_psize++; \
+ MPL__SV(_ls_q,list); \
+ if (MPL__NEXT(_ls_q,list,_next) == _ls_oldhead) { \
+ _ls_q = NULL; \
+ } else { \
+ _ls_q = MPL__NEXT(_ls_q,list,_next); \
+ } \
+ MPL__RS(list); \
+ if (!_ls_q) break; \
+ } \
+ _ls_qsize = _ls_insize; \
+ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+ if (_ls_psize == 0) { \
+ _ls_e = _ls_q; MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); _ls_qsize--; \
+ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
+ } else if (_ls_qsize == 0 || !_ls_q) { \
+ _ls_e = _ls_p; MPL__SV(_ls_p,list); _ls_p = MPL__NEXT(_ls_p,list,_next); MPL__RS(list); _ls_psize--; \
+ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
+ } else if (cmp(_ls_p,_ls_q) <= 0) { \
+ _ls_e = _ls_p; MPL__SV(_ls_p,list); _ls_p = MPL__NEXT(_ls_p,list,_next); MPL__RS(list); _ls_psize--; \
+ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
+ } else { \
+ _ls_e = _ls_q; MPL__SV(_ls_q,list); _ls_q = MPL__NEXT(_ls_q,list,_next); MPL__RS(list); _ls_qsize--; \
+ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
+ } \
+ if (_ls_tail) { \
+ MPL__SV(_ls_tail,list); MPL__NEXTASGN(_ls_tail,list,_ls_e,_next); MPL__RS(list); \
+ } else { \
+ MPL__CASTASGN(list,_ls_e); \
+ } \
+ MPL__SV(_ls_e,list); MPL__PREVASGN(_ls_e,list,_ls_tail,_prev); MPL__RS(list); \
+ _ls_tail = _ls_e; \
+ } \
+ _ls_p = _ls_q; \
+ } \
+ MPL__CASTASGN(list->_prev,_ls_tail); \
+ MPL__CASTASGN(_tmp2,list); \
+ MPL__SV(_ls_tail,list); MPL__NEXTASGN(_ls_tail,list,_tmp2,_next); MPL__RS(list); \
+ if (_ls_nmerges <= 1) { \
+ _ls_looping=0; \
+ } \
+ _ls_insize *= 2; \
+ } \
+ } else _tmp=NULL; /* quiet gcc unused variable warning */ \
+} while (0)
+
+/******************************************************************************
+ * singly linked list macros (non-circular) *
+ *****************************************************************************/
+#define MPL_LL_PREPEND(head,tail,add) MPL_LL_PREPEND_N(head,tail,add,next)
+#define MPL_LL_PREPEND_N(head,tail,add,_next) \
+do { \
+ (add)->_next = head; \
+ head = add; \
+ if ((add)->_next == NULL) \
+ (tail) = (add); \
+} while (0)
+
+#define MPL_LL_CONCAT(head1,head2,tail1,tail2) MPL_LL_CONCAT_N(head1,head2,tail1,tail2,next)
+#define MPL_LL_CONCAT_N(head1,head2,tail1,tail2,_next) \
+do { \
+ if (tail1) { \
+ (tail1)->_next=(head2); \
+ } else { \
+ (head1)=(head2); \
+ } \
+ if (tail2) { \
+ (tail1)=(tail2); \
+ } \
+} while (0)
+
+#define MPL_LL_APPEND(head,tail,add) MPL_LL_APPEND_N(head,tail,add,next)
+#define MPL_LL_APPEND_N(head,tail,add,_next) \
+do { \
+ (add)->_next=NULL; \
+ if (tail) { \
+ (tail)->_next=(add); \
+ } else { \
+ (head)=(add); \
+ } \
+ (tail)=(add); \
+} while (0)
+
+#define MPL_LL_DELETE(head,tail,del) MPL_LL_DELETE_N(head,tail,del,next)
+#define MPL_LL_DELETE_N(head,tail,del,_next) \
+do { \
+ MPL_LDECLTYPE(head) _tmp; \
+ if ((head) == (del)) { \
+ (head)=(head)->_next; \
+ if ((tail) == (del)) \
+ (tail)=(head); \
+ } else { \
+ _tmp = head; \
+ while (_tmp->_next && (_tmp->_next != (del))) { \
+ _tmp = _tmp->_next; \
+ } \
+ if (_tmp->_next) { \
+ _tmp->_next = ((del)->_next); \
+ if ((tail) == (del)) \
+ (tail)=_tmp; \
+ } \
+ } \
+} while (0)
+
+/* Here are VS2008 replacements for MPL_LL_DELETE */
+#define MPL_LL_DELETE_VS2008(head,tail,del) MPL_LL_DELETE_N_VS2008(head,tail,del,next)
+#define MPL_LL_DELETE_N_VS2008(head,tail,del,_next) \
+do { \
+ if ((head) == (del)) { \
+ (head)=(head)->_next; \
+ if ((tail) == (del)) \
+ (tail)=(head); \
+ } else { \
+ char *_tmp = (char*)(head); \
+ while ((head)->_next && ((head)->_next != (del))) { \
+ (head) = (head)->_next; \
+ } \
+ if ((head)->_next) { \
+ (head)->_next = ((del)->_next); \
+ if ((tail) == (del)) \
+ (tail)=(head); \
+ } \
+ { \
+ char **_head_alias = (char**)&(head); \
+ *_head_alias = _tmp; \
+ } \
+ } \
+} while (0)
+#ifdef MPL_NO_DECLTYPE
+#undef MPL_LL_DELETE
+#define MPL_LL_DELETE MPL_LL_DELETE_VS2008
+#undef MPL_DL_CONCAT /* no MPL_DL_CONCAT_VS2008 */
+#endif
+/* end VS2008 replacements */
+
+#define MPL_LL_FOREACH(head,el) MPL_LL_FOREACH_N(head,el,next)
+#define MPL_LL_FOREACH_N(head,el,_next) \
+ for(el=head;el;el=el->_next)
+
+#define MPL_LL_FOREACH_SAFE(head,el,tmp) MPL_LL_FOREACH_SAFE_N(head,el,tmp,next)
+#define MPL_LL_FOREACH_SAFE_N(head,el,tmp,_next) \
+ for((el)=(head);(el) && (tmp = (el)->_next, 1); (el) = tmp)
+
+#define MPL_LL_SEARCH_SCALAR(head,out,field,val) MPL_LL_SEARCH_SCALAR_N(head,out,field,val,next)
+#define MPL_LL_SEARCH_SCALAR_N(head,out,field,val,_next) \
+do { \
+ MPL_LL_FOREACH_N(head,out,_next) { \
+ if ((out)->field == (val)) break; \
+ } \
+} while(0)
+
+#define MPL_LL_SEARCH(head,out,elt,cmp) MPL_LL_SEARCH_N(head,out,elt,cmp,next)
+#define MPL_LL_SEARCH_N(head,out,elt,cmp,_next) \
+do { \
+ MPL_LL_FOREACH_N(head,out,_next) { \
+ if ((cmp(out,elt))==0) break; \
+ } \
+} while(0)
+
+/******************************************************************************
+ * doubly linked list macros (non-circular) *
+ *****************************************************************************/
+#define MPL_DL_PREPEND(head,add) MPL_DL_PREPEND_NP(head,add,next,prev)
+#define MPL_DL_PREPEND_NP(head,add,_next,_prev) \
+do { \
+ (add)->_next = head; \
+ if (head) { \
+ (add)->_prev = (head)->_prev; \
+ (head)->_prev = (add); \
+ } else { \
+ (add)->_prev = (add); \
+ } \
+ (head) = (add); \
+} while (0)
+
+#define MPL_DL_APPEND(head,add) MPL_DL_APPEND_NP(head,add,next,prev)
+#define MPL_DL_APPEND_NP(head,add,_next,_prev) \
+do { \
+ if (head) { \
+ (add)->_prev = (head)->_prev; \
+ (head)->_prev->_next = (add); \
+ (head)->_prev = (add); \
+ (add)->_next = NULL; \
+ } else { \
+ (head)=(add); \
+ (head)->_prev = (head); \
+ (head)->_next = NULL; \
+ } \
+} while (0)
+
+#define MPL_DL_CONCAT(head1,head2) MPL_DL_CONCAT_NP(head1,head2,next,prev)
+#define MPL_DL_CONCAT_NP(head1,head2,_next,_prev) \
+do { \
+ MPL_LDECLTYPE(head1) _tmp; \
+ if (head2) { \
+ if (head1) { \
+ _tmp = (head2)->_prev; \
+ (head2)->_prev = (head1)->_prev; \
+ (head1)->_prev->_next = (head2); \
+ (head1)->_prev = _tmp; \
+ } else { \
+ (head1)=(head2); \
+ } \
+ } \
+} while (0)
+
+#define MPL_DL_DELETE(head,del) MPL_DL_DELETE_NP(head,del,next,prev)
+#define MPL_DL_DELETE_NP(head,del,_next,_prev) \
+do { \
+ if ((del)->_prev == (del)) { \
+ (head)=NULL; \
+ } else if ((del)==(head)) { \
+ (del)->_next->_prev = (del)->_prev; \
+ (head) = (del)->_next; \
+ } else { \
+ (del)->_prev->_next = (del)->_next; \
+ if ((del)->_next) { \
+ (del)->_next->_prev = (del)->_prev; \
+ } else { \
+ (head)->_prev = (del)->_prev; \
+ } \
+ } \
+} while (0)
+
+
+#define MPL_DL_FOREACH(head,el) MPL_DL_FOREACH_NP(head,el,next,prev)
+#define MPL_DL_FOREACH_NP(head,el,_next,_prev) \
+ for(el=head;el;el=el->_next)
+
+/* this version is safe for deleting the elements during iteration */
+#define MPL_DL_FOREACH_SAFE(head,el,tmp) MPL_DL_FOREACH_SAFE_NP(head,el,tmp,next,prev)
+#define MPL_DL_FOREACH_SAFE_NP(head,el,tmp,_next,_prev) \
+ for((el)=(head);(el) && (tmp = (el)->_next, 1); (el) = tmp)
+
+/* these are identical to their singly-linked list counterparts */
+#define MPL_DL_SEARCH_SCALAR MPL_LL_SEARCH_SCALAR
+#define MPL_DL_SEARCH_SCALAR_NP(head,out,field,val,_next,_prev) MPL_LL_SEARCH_SCALAR_N(head,out,field,val,_next)
+#define MPL_DL_SEARCH MPL_LL_SEARCH
+#define MPL_DL_SEARCH_NP(head,out,elt,cmp,_next,_prev) MPL_LL_SEARCH_N(head,out,elt,cmp,_next)
+
+/******************************************************************************
+ * circular doubly linked list macros *
+ *****************************************************************************/
+#define MPL_CDL_PREPEND(head,add) MPL_CDL_PREPEND_NP(head,add,next,prev)
+#define MPL_CDL_PREPEND_NP(head,add,_next,_prev) \
+do { \
+ if (head) { \
+ (add)->_prev = (head)->_prev; \
+ (add)->_next = (head); \
+ (head)->_prev = (add); \
+ (add)->_prev->_next = (add); \
+ } else { \
+ (add)->_prev = (add); \
+ (add)->_next = (add); \
+ } \
+(head)=(add); \
+} while (0)
+
+#define MPL_CDL_DELETE(head,del) MPL_CDL_DELETE_NP(head,del,next,prev)
+#define MPL_CDL_DELETE_NP(head,del,_next,_prev) \
+do { \
+ if ( ((head)==(del)) && ((head)->_next == (head))) { \
+ (head) = 0L; \
+ } else { \
+ (del)->_next->_prev = (del)->_prev; \
+ (del)->_prev->_next = (del)->_next; \
+ if ((del) == (head)) (head)=(del)->_next; \
+ } \
+} while (0)
+
+#define MPL_CDL_FOREACH(head,el) MPL_CDL_FOREACH_NP(head,el,next,prev)
+#define MPL_CDL_FOREACH_NP(head,el,_next,_prev) \
+ for(el=head;el;el=(el->_next==head ? 0L : el->_next))
+
+#define MPL_CDL_FOREACH_SAFE(head,el,tmp1,tmp2) MPL_CDL_FOREACH_SAFE_NP(head,el,tmp1,tmp2,next,prev)
+#define MPL_CDL_FOREACH_SAFE_NP(head,el,tmp1,tmp2,_next,_prev) \
+ for((el)=(head), ((tmp1)=(head)?((head)->_prev):NULL); \
+ (el) && ((tmp2)=(el)->_next, 1); \
+ ((el) = (((el)==(tmp1)) ? 0L : (tmp2))))
+
+#define MPL_CDL_SEARCH_SCALAR(head,out,field,val) MPL_CDL_SEARCH_SCALAR_NP(head,out,field,val,next,prev)
+#define MPL_CDL_SEARCH_SCALAR_NP(head,out,field,val,_next,_prev) \
+do { \
+ MPL_CDL_FOREACH_NP(head,out,_next,_prev) { \
+ if ((out)->field == (val)) break; \
+ } \
+} while(0)
+
+#define MPL_CDL_SEARCH(head,out,elt,cmp) MPL_CDL_SEARCH_NP(head,out,elt,cmp,next,prev)
+#define MPL_CDL_SEARCH_NP(head,out,elt,cmp,_next,_prev) \
+do { \
+ MPL_CDL_FOREACH_NP(head,out,_next,_prev) { \
+ if ((cmp(out,elt))==0) break; \
+ } \
+} while(0)
+
+#endif /* !defined(MPL_UTLIST_H_INCLUDED) */
+
diff --git a/src/mpi/romio/mpl/include/mpl_valgrind.h b/src/mpi/romio/mpl/include/mpl_valgrind.h
new file mode 100644
index 0000000..b902b5c
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_valgrind.h
@@ -0,0 +1,199 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2010 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* IMPORTANT!!!: you must define MPL_VG_ENABLED before including mpl.h if you
+ want the the actual valgrind macros to be expanded when an MPL_VG_ macro is
+ used */
+
+/* this file should not be included directly, it expects to be included from
+ * mpl.h with the results of various configure tests and several system
+ * libraries already included */
+#if !defined(MPL_H_INCLUDED)
+#error do not include mpl_valgrind.h directly, use mpl.h instead
+#endif
+
+/* valgrind interaction macros and header include logic
+
+ These macros are intended to simplify client request interactions with
+ valgrind. A client source file that needs valgrind client requests if they
+ are available can include this file instead and use MPL_VG_ macros without
+ worrying about whether or not valgrind is actually present, which headers to
+ include, and how to include them.
+
+ For more complicated logic this header will also define/undefine the
+ preprocessor token "MPL_VG_AVAILABLE".
+
+ */
+#if !defined(MPL_VALGRIND_H_INCLUDED)
+#define MPL_VALGRIND_H_INCLUDED
+
+#undef MPL_VG_AVAILABLE
+
+#if !defined(HAVE_BROKEN_VALGRIND) && defined(MPL_VG_ENABLED)
+# if !defined(NVALGRIND)
+# if defined(MPL_HAVE_VALGRIND_H) && defined(MPL_HAVE_MEMCHECK_H)
+# include <valgrind.h>
+# include <memcheck.h>
+# define MPL_VG_AVAILABLE 1
+# elif defined(MPL_HAVE_VALGRIND_VALGRIND_H) && defined(MPL_HAVE_VALGRIND_MEMCHECK_H)
+# include <valgrind/valgrind.h>
+# include <valgrind/memcheck.h>
+# define MPL_VG_AVAILABLE 1
+# endif
+# endif
+#endif
+
+
+/* Valgrind-based thread checking tools:
+ *
+ * There are three main tools right now, Helgrind and DRD come in the standard
+ * Valgrind distribution, while ThreadSanitizer (tsan) requires a separate
+ * download. All three tools are fairly similar, with a few variations. They
+ * primarily check for data races by tracing the happens-before relation between
+ * memory accesses and synchronization primitives. Helgrind also offers good
+ * pthread API usage checking and lock-order checking, which usually makes it
+ * the most useful tool of the group. Unfortunately, Helgrind has the most
+ * limited support for client requests.
+ *
+ * All three tools are source-level compatible with the ANNOTATE_* set of macros
+ * defined by tsan. However, they are not totally binary compatible, so a
+ * particular tool must usually be selected at compile time. One exception to
+ * this is that modern-ish DRDs will usually understand Helgrind requests (but
+ * Helgrind won't understand DRD requests).
+ *
+ * To further complicate matters, Helgrind will issue warnings when a client
+ * request is encountered that it does not implement. In particular, Helgrind
+ * does not support ANNOTATE_BENIGN_RACE or
+ * ANNOTATE_IGNORE_{READS,WRITES}_{BEGIN,END}, which makes it difficult to avoid
+ * emitting warning/error messages w.r.t. some kinds of lockfree
+ * synchronization.
+ *
+ * So for the moment, we only provide a minimal set of annotations that seems to
+ * be both common between the tools and useful in MPICH.
+ */
+
+#define MPL_VG_THREAD_INVALID 0
+#define MPL_VG_THREAD_HELGRIND 1
+#define MPL_VG_THREAD_DRD 2
+#define MPL_VG_THREAD_TSAN 3
+
+/* TODO make this selectable by configure */
+/* default to helgrind for now, since DRD understands helgrind annotations, but
+ * not the other way around */
+#define MPL_VG_THREAD_TOOL MPL_VG_THREAD_HELGRIND
+
+
+#if defined(MPL_VG_AVAILABLE)
+# if (MPL_VG_THREAD_TOOL == MPL_VG_THREAD_HELGRIND)
+# if defined(MPL_HAVE_HELGRIND_H)
+# include <helgrind.h>
+# define MPL_VG_THREAD_TOOL_SUPPORTED_ 1
+# elif defined(MPL_HAVE_VALGRIND_HELGRIND_H)
+# include <valgrind/helgrind.h>
+# define MPL_VG_THREAD_TOOL_SUPPORTED_ 1
+# endif
+# elif (MPL_VG_THREAD_TOOL == MPL_VG_THREAD_DRD)
+# if defined(MPL_HAVE_DRD_H)
+# include <drd.h>
+# define MPL_VG_THREAD_TOOL_SUPPORTED_ 1
+# elif defined(MPL_HAVE_VALGRIND_DRD_H)
+# include <valgrind/drd.h>
+# define MPL_VG_THREAD_TOOL_SUPPORTED_ 1
+# endif
+# elif (MPL_VG_THREAD_TOOL == MPL_VG_THREAD_TSAN)
+ /* support wouldn't be hard to add, but it does require additional build
+ * system work */
+# error 'ThreadSanitizer not currently supported'
+# else
+# error 'unknown or unsupported tool'
+# endif
+#else
+# undef MPL_VG_THREAD_TOOL_SUPPORTED_ /*defensive*/
+#endif
+
+/* This is only a modest subset of all of the available client requests defined
+ in the valgrind headers. As MPICH is modified to use more of them, this
+ list should be expanded appropriately. */
+#if defined(MPL_VG_AVAILABLE)
+# if defined(VALGRIND_MAKE_MEM_DEFINED)
+/* this valgrind is version 3.2.0 or later */
+/* tt#1784: do not add extra parens around the VALGRIND_... macros, since
+ * valgrind-3.6.0 incorrectly includes a ";" at the end of the macro */
+# define MPL_VG_MAKE_MEM_DEFINED(addr_,len_) do { (void) VALGRIND_MAKE_MEM_DEFINED((addr_),(len_)); } while (0)
+# define MPL_VG_MAKE_MEM_NOACCESS(addr_,len_) do { (void) VALGRIND_MAKE_MEM_NOACCESS((addr_),(len_)); } while (0)
+# define MPL_VG_MAKE_MEM_UNDEFINED(addr_,len_) do { (void) VALGRIND_MAKE_MEM_UNDEFINED((addr_),(len_)); } while (0)
+# define MPL_VG_CHECK_MEM_IS_DEFINED(addr_,len_) do { (void) VALGRIND_CHECK_MEM_IS_DEFINED((addr_),(len_)); } while (0)
+# define MPL_VG_CHECK_MEM_IS_ADDRESSABLE(addr_,len_) do { (void) VALGRIND_CHECK_MEM_IS_ADDRESSABLE((addr_),(len_)); } while (0)
+# else
+/* this is an older version of valgrind. Use the older (subtly misleading) names */
+# define MPL_VG_MAKE_MEM_DEFINED(addr_,len_) VALGRIND_MAKE_READABLE((addr_),(len_))
+# define MPL_VG_MAKE_MEM_NOACCESS(addr_,len_) VALGRIND_MAKE_NOACCESS((addr_),(len_))
+# define MPL_VG_MAKE_MEM_UNDEFINED(addr_,len_) VALGRIND_MAKE_WRITABLE((addr_),(len_))
+# define MPL_VG_CHECK_MEM_IS_DEFINED(addr_,len_) VALGRIND_CHECK_READABLE((addr_),(len_))
+# define MPL_VG_CHECK_MEM_IS_ADDRESSABLE(addr_,len_) VALGRIND_CHECK_WRITABLE((addr_),(len_))
+# endif
+# define MPL_VG_CREATE_BLOCK(addr_,len_,desc_) do { (void) VALGRIND_CREATE_BLOCK((addr_),(len_),(desc_)); } while (0)
+# define MPL_VG_RUNNING_ON_VALGRIND() RUNNING_ON_VALGRIND
+# define MPL_VG_PRINTF_BACKTRACE VALGRIND_PRINTF_BACKTRACE
+/* Valgrind has a bug
+ * (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=524488) that
+ * causes it to report a warning when the compiler adds padding to
+ * structures. Even when we initialize all the fields in the
+ * structure, the padding bytes are not initialized. The idea here is
+ * to detect when we are in "valgrind mode" and in such cases
+ * initialize all bytes of the structure. */
+# define MPL_VG_MEM_INIT(addr_,len_) do { memset(addr_, 0, len_); } while (0)
+
+/* custom allocator client requests, you probably shouldn't use these unless you
+ * really know what you are doing */
+# define MPL_VG_CREATE_MEMPOOL(pool, rzB, is_zeroed) VALGRIND_CREATE_MEMPOOL((pool), (rzB), (is_zeroed))
+# define MPL_VG_DESTROY_MEMPOOL(pool) VALGRIND_DESTROY_MEMPOOL((pool))
+# define MPL_VG_MEMPOOL_ALLOC(pool, addr, size) VALGRIND_MEMPOOL_ALLOC((pool), (addr), (size))
+# define MPL_VG_MEMPOOL_FREE(pool, addr) VALGRIND_MEMPOOL_FREE((pool), (addr))
+
+#else /* !defined(MPL_VG_AVAILABLE) */
+# define MPL_VG_MAKE_MEM_DEFINED(addr_,len_) do {} while (0)
+# define MPL_VG_MAKE_MEM_NOACCESS(addr_,len_) do {} while (0)
+# define MPL_VG_MAKE_MEM_UNDEFINED(addr_,len_) do {} while (0)
+# define MPL_VG_CHECK_MEM_IS_DEFINED(addr_,len_) do {} while (0)
+# define MPL_VG_CHECK_MEM_IS_ADDRESSABLE(addr_,len_) do {} while (0)
+# define MPL_VG_CREATE_BLOCK(addr_,len_,desc_) do {} while (0)
+# define MPL_VG_RUNNING_ON_VALGRIND() (0) /*always false */
+# define MPL_VG_MEM_INIT(addr_,len_) do {} while (0)
+# if defined(MPL_HAVE_MACRO_VA_ARGS)
+# define MPL_VG_PRINTF_BACKTRACE(...) do {} while (0)
+# else
+# define MPL_VG_PRINTF_BACKTRACE MPL_VG_printf_do_nothing_func
+static mpl_inline void MPL_VG_printf_do_nothing_func(char *fmt, ...)
+{
+ /* do nothing */
+}
+# endif /* defined(MPL_HAVE_MACRO_VA_ARGS) */
+# define MPL_VG_CREATE_MEMPOOL(pool, rzB, is_zeroed) do {} while (0)
+# define MPL_VG_DESTROY_MEMPOOL(pool) do {} while (0)
+# define MPL_VG_MEMPOOL_ALLOC(pool, addr, size) do {} while (0)
+# define MPL_VG_MEMPOOL_FREE(pool, addr) do {} while (0)
+
+#endif /* defined(MPL_VG_AVAILABLE) */
+
+#if defined(MPL_VG_THREAD_TOOL_SUPPORTED_)
+ /* could switch on tool type, but all three tools know about these annotations */
+# define MPL_VG_ANNOTATE_HAPPENS_BEFORE(obj_) ANNOTATE_HAPPENS_BEFORE(obj_)
+# define MPL_VG_ANNOTATE_HAPPENS_AFTER(obj_) ANNOTATE_HAPPENS_AFTER(obj_)
+ /* older versions of some of Helgrind & DRD don't support this annotation */
+# if defined(ANNOTATE_NEW_MEMORY)
+# define MPL_VG_ANNOTATE_NEW_MEMORY(obj_,size_) ANNOTATE_NEW_MEMORY(obj_,size_)
+# else
+# define MPL_VG_ANNOTATE_NEW_MEMORY(obj_,size_) do {} while (0)
+# endif
+#else
+# define MPL_VG_ANNOTATE_HAPPENS_BEFORE(obj_) do {} while (0)
+# define MPL_VG_ANNOTATE_HAPPENS_AFTER(obj_) do {} while (0)
+# define MPL_VG_ANNOTATE_NEW_MEMORY(obj_,size_) do {} while (0)
+#endif
+
+
+#endif /* !defined(MPL_VALGRIND_H_INCLUDED) */
diff --git a/src/mpi/romio/mpl/include/mpl_yield.h b/src/mpi/romio/mpl/include/mpl_yield.h
new file mode 100644
index 0000000..925be66
--- /dev/null
+++ b/src/mpi/romio/mpl/include/mpl_yield.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_PROCESS_WRAPPERS_H_INCLUDED
+#define MPL_PROCESS_WRAPPERS_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* MPL_SCHED_YIELD() - Yield the processor to OS scheduler */
+/* On a typical Linux system (verified with kernels 3.2 and 3.5),
+ * usleep has a resolution of more than 1000 cycles. This makes
+ * it impractical if the desired sleeping period is shorter. On
+ * the other hand, sleep(0) returns immediately without going to
+ * the kernel. This means that there is no actual yielding, which
+ * is equivalent to doing nothing. Thus, usleep and sleep are not
+ * recommended as ways to yield the CPU, and sched_yield would be
+ * preferred if available.
+ * Note that nanosleep has the same shortcomings as usleep.*/
+
+#if defined(MPL_USE_SWITCHTOTHREAD_FOR_YIELD)
+ #include <winsock2.h>
+ #include <windows.h>
+ #define MPL_sched_yield() SwitchToThread()
+#elif defined(MPL_USE_WIN32_SLEEP_FOR_YIELD)
+ #include <winsock2.h>
+ #include <windows.h>
+ #define MPL_sched_yield() Sleep(0)
+#elif defined(MPL_USE_SCHED_YIELD_FOR_YIELD)
+ #ifdef MPL_HAVE_SCHED_H
+ #include <sched.h>
+ #endif
+ #define MPL_sched_yield() sched_yield()
+#elif defined(MPL_USE_YIELD_FOR_YIELD)
+ #ifdef MPL_HAVE_SCHED_H
+ #include <sched.h>
+ #endif
+ #define MPL_sched_yield() yield()
+#elif defined (MPL_USE_SELECT_FOR_YIELD)
+ #ifdef MPL_HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+ #define MPL_sched_yield() do { struct timeval t; t.tv_sec = 0; t.tv_usec = 0; select(0,0,0,0,&t); } while (0)
+#elif defined (MPL_USE_USLEEP_FOR_YIELD)
+ #ifdef MPL_HAVE_UNISTD_H
+ #include <unistd.h>
+ #if defined (MPL_NEEDS_USLEEP_DECL)
+ int usleep(useconds_t usec);
+ #endif
+ #endif
+ #define MPL_sched_yield() usleep(0)
+#elif defined (MPL_USE_SLEEP_FOR_YIELD)
+ #ifdef MPL_HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+ #define MPL_sched_yield() sleep(0)
+#elif defined (MPL_USE_NOTHING_FOR_YIELD)
+ #define MPL_sched_yield() do {} while (0)
+#else
+ #error "No mechanism available to yield"
+#endif
+
+#endif /* MPL_PROCESS_WRAPPERS_H_INCLUDED */
diff --git a/src/mpi/romio/mpl/localdefs.in b/src/mpi/romio/mpl/localdefs.in
new file mode 100644
index 0000000..cdc1ff2
--- /dev/null
+++ b/src/mpi/romio/mpl/localdefs.in
@@ -0,0 +1,7 @@
+#!/bin/sh
+# When configured within MPICH via PAC_CONFIG_SUBDIR, this file will be sourced
+# by the top-level configure. This lets us propagate shell variable changes
+# back upstream.
+
+CPPFLAGS="@CPPFLAGS@"
+WRAPPER_LIBS="$WRAPPER_LIBS @LIBS@"
diff --git a/src/mpi/romio/mpl/src/Makefile.mk b/src/mpi/romio/mpl/src/Makefile.mk
new file mode 100644
index 0000000..acd613e
--- /dev/null
+++ b/src/mpi/romio/mpl/src/Makefile.mk
@@ -0,0 +1,16 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+include src/bt/Makefile.mk
+include src/dbg/Makefile.mk
+include src/env/Makefile.mk
+include src/mem/Makefile.mk
+include src/msg/Makefile.mk
+include src/sock/Makefile.mk
+include src/str/Makefile.mk
+include src/thread/Makefile.mk
+include src/timer/Makefile.mk
+include src/shm/Makefile.mk
diff --git a/src/mpi/romio/mpl/src/bt/.state-cache b/src/mpi/romio/mpl/src/bt/.state-cache
new file mode 100644
index 0000000..46c2f72
--- /dev/null
+++ b/src/mpi/romio/mpl/src/bt/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="mpl_bt.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_bt.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/bt/Makefile.mk b/src/mpi/romio/mpl/src/bt/Makefile.mk
new file mode 100644
index 0000000..5d11de7
--- /dev/null
+++ b/src/mpi/romio/mpl/src/bt/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/bt/mpl_bt.c
diff --git a/src/mpi/romio/mpl/src/bt/mpl_bt.c b/src/mpi/romio/mpl/src/bt/mpl_bt.c
new file mode 100644
index 0000000..ef10a59
--- /dev/null
+++ b/src/mpi/romio/mpl/src/bt/mpl_bt.c
@@ -0,0 +1,134 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+#ifdef MPL_HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif
+
+#ifdef MPL_HAVE_BACKTRACE_H
+#include <backtrace.h>
+#endif
+
+#ifdef MPL_HAVE_LIBUNWIND_H
+#define UNW_LOCAL_ONLY
+#include <libunwind.h>
+#endif
+
+
+/* freebsd and linux have slightly different backtrace routines.
+ * solaris uses something totally different: a 'walkcontext' routine
+ * which takes a function pointer. solaris 'walkcontext' is simliar to
+ * libbacktrace, shipped with gcc-4.8 and newer. both share features
+ * with libunwind.
+ *
+ * For the case of "display the call stack to this point" the various
+ * approaches share a common pattern:
+ * - initialize the library
+ * - get the stack
+ * - decode the stack
+ *
+ * but for now we'll simply dispatch to one of several appraoches
+ * depending on what configure found
+ *
+ */
+
+#ifdef MPL_HAVE_LIBBACKTRACE
+
+static inline void backtrace_libback(FILE *output)
+{
+ struct backtrace_state *btstate;
+ btstate = backtrace_create_state(NULL, 1, NULL, NULL);
+ backtrace_print(btstate, 0, output);
+}
+/* we need not only the symbols but the header file too (for the cursor and
+ * context), so tighten up when we take the libunwind path. Thanks
+ * Siegmar.Gross at informatik.hs-fulda.de for the bug report about systems with
+ * libunwind libraries but no libunwind development headers */
+#elif defined MPL_HAVE_LIBUNWIND && defined(MPL_HAVE_LIBUNWIND_H)
+static inline void backtrace_libunwind(FILE *output)
+{
+ unw_cursor_t cursor;
+ unw_context_t uc;
+ unw_word_t ip, offset;
+ int ret, chars = 0;
+ char buffer[MPL_BACKTRACE_BUFFER_LEN];
+ char backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN];
+
+ unw_getcontext(&uc);
+ unw_init_local(&cursor, &uc);
+ while (unw_step(&cursor) > 0) {
+ unw_get_reg(&cursor, UNW_REG_IP, &ip);
+ unw_get_proc_name(&cursor, buffer,
+ MPL_BACKTRACE_BUFFER_LEN, &offset);
+ ret = MPL_snprintf(backtrace_buffer + chars,
+ MPL_BACKTRACE_BUFFER_LEN - chars,
+ "0x%lx %s() + 0x%lx\n",
+ (long)ip, buffer, (long)offset);
+ if (ret + chars >= MPL_BACKTRACE_BUFFER_LEN) {
+ /* the extra new line will be more readable than a merely
+ * truncated string */
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 2] = '\n';
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 1] = '\0';
+ break;
+ }
+ chars += ret;
+ }
+ fprintf(output, "%s", backtrace_buffer);
+}
+
+#elif defined MPL_HAVE_BACKTRACE_SYMBOLS
+static inline void backtrace_libc(FILE *output)
+{
+#ifndef MPL_MAX_TRACE_DEPTH
+#define MPL_MAX_TRACE_DEPTH 32
+#endif
+ void *trace[MPL_MAX_TRACE_DEPTH];
+ char **stack_strs;
+ char backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN];
+ int frames, i, ret, chars = 0;
+
+ frames = backtrace(trace, MPL_MAX_TRACE_DEPTH);
+ stack_strs = backtrace_symbols(trace, frames);
+
+ for (i = 0; i < frames; i++) {
+ ret = MPL_snprintf(backtrace_buffer + chars,
+ MPL_BACKTRACE_BUFFER_LEN - chars,
+ "%s\n", stack_strs[i]);
+ if (ret + chars >= MPL_BACKTRACE_BUFFER_LEN) {
+ /* the extra new line will be more readable than a merely
+ * truncated string */
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 2] = '\n';
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 1] = '\0';
+ break;
+ }
+ chars += ret;
+ }
+ fprintf(output, "%s", backtrace_buffer);
+ free(stack_strs);
+}
+#else
+static inline void backtrace_unsupported(FILE *output)
+{
+ fprintf(output, "No backtrace info available\n");
+}
+#endif
+
+/* Pick one of the many ways one could dump out a call stack*/
+void MPL_backtrace_show(FILE *output)
+{
+#ifdef MPL_HAVE_LIBBACKTRACE
+ backtrace_libback(output);
+#elif defined MPL_HAVE_LIBUNWIND && defined(MPL_HAVE_LIBUNWIND_H)
+ /* libunwind is not able to get line numbers without forking off to
+ * addr2line (?)*/
+ backtrace_libunwind(output);
+#elif defined MPL_HAVE_BACKTRACE_SYMBOLS
+ backtrace_libc(output);
+#else
+ backtrace_unsupported(output);
+#endif
+}
diff --git a/src/mpi/romio/mpl/src/dbg/.state-cache b/src/mpi/romio/mpl/src/dbg/.state-cache
new file mode 100644
index 0000000..9c4011e
--- /dev/null
+++ b/src/mpi/romio/mpl/src/dbg/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="mpl_dbg.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_dbg.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/dbg/Makefile.mk b/src/mpi/romio/mpl/src/dbg/Makefile.mk
new file mode 100644
index 0000000..427ac75
--- /dev/null
+++ b/src/mpi/romio/mpl/src/dbg/Makefile.mk
@@ -0,0 +1,8 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2011 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += src/dbg/mpl_dbg.c
diff --git a/src/mpi/romio/mpl/src/dbg/mpl_dbg.c b/src/mpi/romio/mpl/src/dbg/mpl_dbg.c
new file mode 100644
index 0000000..b5cf17d
--- /dev/null
+++ b/src/mpi/romio/mpl/src/dbg/mpl_dbg.c
@@ -0,0 +1,964 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/*
+ * This file provides a set of routines that can be used to record debug
+ * messages in a ring so that the may be dumped at a later time. For example,
+ * this can be used to record debug messages without printing them.
+ */
+
+#include "mpl.h"
+
+#ifdef MPL_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef MPL_HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#if defined(MPL_HAVE_MKSTEMP) && defined(MPL_NEEDS_MKSTEMP_DECL)
+extern int mkstemp(char *t);
+#endif
+
+#if defined(MPL_HAVE_FDOPEN) && defined(MPL_NEEDS_FDOPEN_DECL)
+extern FILE *fdopen(int fd, const char *mode);
+#endif
+
+#ifdef MPL_USE_DBG_LOGGING
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+int MPL_dbg_active_classes = 0;
+int MPL_dbg_max_level = MPL_DBG_TYPICAL;
+
+static enum {
+ DBG_UNINIT,
+ DBG_PREINIT,
+ DBG_INITIALIZED,
+ DBG_ERROR
+} dbg_initialized = DBG_UNINIT;
+
+static char file_pattern_buf[MAXPATHLEN] = "";
+static const char *file_pattern = "-stdout-"; /* "log%d.log"; */
+static const char *default_file_pattern = "dbg at W%w-@%d at T-%t at .log";
+static char temp_filename[MAXPATHLEN] = "";
+static int world_num = 0;
+static int world_rank = -1;
+static int which_rank = -1; /* all ranks */
+static int reset_time_origin = 1;
+static double time_origin = 0.0;
+
+/* This variable is initialized to the appropriate threading level in
+ * the DBG_Init call. Before the debug init, the application cannot
+ * be threaded, anyway. So it is safe to statically set it to "0"
+ * here. */
+static int is_threaded = 0;
+
+static int dbg_usage(const char *, const char *);
+static int dbg_openfile(FILE ** dbg_fp);
+static int dbg_set_class(const char *);
+static int dbg_set_level(const char *, const char *(names[]));
+static int dbg_get_filename(char *filename, int len);
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+static MPL_thread_tls_t dbg_tls_key;
+#endif
+
+static FILE *dbg_static_fp = 0;
+
+/*
+ * This function finds the basename in a path (ala "man 1 basename").
+ * *basename will point to an element in path.
+ * More formally: This function sets basename to the character just
+ * after the last '/' in path.
+*/
+static void find_basename(char *path, char **basename) ATTRIBUTE((unused));
+static void find_basename(char *path, char **basename)
+{
+ char *c;
+
+ c = *basename = path;
+ while (*c) {
+ if (*c == '/')
+ *basename = c + 1;
+ ++c;
+ }
+}
+
+static int dbg_init_tls(void)
+{
+ int err = 0;
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ MPL_thread_tls_create(NULL, &dbg_tls_key, &err);
+#endif
+
+ return err;
+}
+
+static FILE *get_fp(void)
+{
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ int err;
+ /* if we're not initialized, use the static fp, since there should
+ * only be one thread in here until then */
+ if (is_threaded) {
+ if (dbg_initialized == DBG_INITIALIZED) {
+ FILE *fp;
+ MPL_thread_tls_get(&dbg_tls_key, (void **) &fp, &err);
+ return fp;
+ }
+ }
+#endif
+
+ return dbg_static_fp;
+}
+
+static void set_fp(FILE * fp)
+{
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ int err;
+ /* if we're not initialized, use the static fp, since there should
+ * only be one thread in here until then */
+ if (is_threaded) {
+ if (dbg_initialized == DBG_INITIALIZED) {
+ MPL_thread_tls_set(&dbg_tls_key, (void *) fp, &err);
+ return;
+ }
+ }
+#endif
+
+ dbg_static_fp = fp;
+}
+
+int MPL_dbg_outevent(const char *file, int line, int class, int kind, const char *fmat, ...)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ va_list list;
+ char *str, stmp[MPL_DBG_MAXLINE];
+ int i;
+ void *p;
+ MPL_time_t t;
+ double curtime;
+ unsigned long long int threadID = 0;
+ int pid = -1;
+ FILE *dbg_fp = NULL;
+
+ if (dbg_initialized == DBG_UNINIT || dbg_initialized == DBG_ERROR)
+ goto fn_exit;
+
+ dbg_fp = get_fp();
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ {
+ /* the thread ID is not necessarily unique between processes, so a
+ * (pid,tid) pair should be used to uniquely identify output from
+ * particular threads on a system */
+ MPL_thread_id_t tid;
+ MPL_thread_self(&tid);
+ threadID = (unsigned long long int) tid;
+ }
+#endif
+#if defined(MPL_HAVE_GETPID)
+ pid = (int) getpid();
+#endif /* MPL_HAVE_GETPID */
+
+ if (!dbg_fp) {
+ mpl_errno = dbg_openfile(&dbg_fp);
+ if (mpl_errno)
+ goto fn_fail;
+ set_fp(dbg_fp);
+ }
+
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &curtime);
+ curtime = curtime - time_origin;
+
+ /* The kind values are used with the macros to simplify these cases */
+ switch (kind) {
+ case 0:
+ va_start(list, fmat);
+ str = va_arg(list, char *);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, str);
+ va_end(list);
+ break;
+ case 1:
+ va_start(list, fmat);
+ str = va_arg(list, char *);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, str);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ case 2:
+ va_start(list, fmat);
+ i = va_arg(list, int);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, i);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ case 3:
+ va_start(list, fmat);
+ p = va_arg(list, void *);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, p);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ default:
+ break;
+ }
+ fflush(dbg_fp);
+
+ fn_exit:
+ fn_fail:
+ return 0;
+}
+
+/* These are used to simplify the handling of options.
+ To add a new name, add an dbg_classname element to the array
+ classnames. The "classbits" values are defined by MPL_DBG_CLASS
+ in mpl_dbg.h
+ */
+
+typedef struct dbg_classname {
+ int classbits;
+ const char *ucname, *lcname;
+} dbg_classname;
+
+#define MAX_DBG_CLASSNAMES (sizeof(unsigned int) * 8)
+
+static dbg_classname classnames[MAX_DBG_CLASSNAMES];
+static int num_classnames = 0;
+
+static const char *unregistered_classes[MAX_DBG_CLASSNAMES];
+static int num_unregistered_classes = 0;
+
+/* Because the level values are simpler and are rarely changed, these
+ * use a simple set of parallel arrays */
+static const int level_values[] = {
+ MPL_DBG_TERSE,
+ MPL_DBG_TYPICAL,
+ MPL_DBG_VERBOSE,
+ 100
+};
+static const char *level_name[] = { "TERSE", "TYPICAL", "VERBOSE", 0 };
+static const char *lc_level_name[] = { "terse", "typical", "verbose", 0 };
+
+void MPL_dbg_class_register(MPL_dbg_class class, const char *ucname, const char *lcname)
+{
+ int i, j;
+
+ classnames[num_classnames].classbits = class;
+ classnames[num_classnames].ucname = ucname;
+ classnames[num_classnames].lcname = lcname;
+ num_classnames++;
+
+ if (num_unregistered_classes) {
+ /* there are some unregistered classes. look through to see
+ * if any of them match this class. */
+ size_t len = strlen(lcname);
+
+ for (i = 0; i < num_unregistered_classes; i++) {
+ size_t slen = strlen(unregistered_classes[i]);
+ if (len == slen && (strncmp(unregistered_classes[i], lcname, len) ||
+ strncmp(unregistered_classes[i], ucname, len))) {
+ /* got a match */
+ MPL_dbg_active_classes |= class;
+ for (j = i; j < num_unregistered_classes - 1; j++)
+ unregistered_classes[j] = unregistered_classes[j + 1];
+ num_unregistered_classes--;
+ break;
+ }
+ }
+ }
+}
+
+MPL_dbg_class MPL_dbg_class_alloc(const char *ucname, const char *lcname)
+{
+ static unsigned int class = 1;
+
+ /* create a user handle for this class */
+ MPL_dbg_class_register(class, ucname, lcname);
+
+ class <<= 1;
+
+ return (class >> 1);
+}
+
+/*
+ * Initialize the DBG_MSG system. This is called during the job
+ * initialization to process command-line arguments as well as
+ * checking either the MPICH_DBG or MPL_DBG environment variables.
+ * The initialization
+ * is split into two steps: a preinit and an init. This makes it
+ * possible to enable most of the features before the full
+ * initialization, where a significant amount of the initialization
+ * takes place.
+ */
+
+static int dbg_process_args(int *argc_p, char ***argv_p)
+{
+ int i, rc;
+
+ /* Here's where we do the same thing with the command-line options */
+ if (argc_p) {
+ for (i = 1; i < *argc_p; i++) {
+ if (strncmp((*argv_p)[i], "-mpich-dbg", 10) == 0) {
+ char *s = (*argv_p)[i] + 10;
+ /* Found a command */
+ if (*s == 0) {
+ /* Just -mpich-dbg */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ }
+ else if (*s == '=') {
+ /* look for file */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ s++;
+ if (strncmp(s, "file", 4) == 0) {
+ file_pattern = default_file_pattern;
+ }
+ }
+ else if (strncmp(s, "-level", 6) == 0) {
+ char *p = s + 6;
+ if (*p == '=') {
+ p++;
+ rc = dbg_set_level(p, lc_level_name);
+ if (rc)
+ dbg_usage("-mpich-dbg-level", "terse, typical, verbose");
+ }
+ }
+ else if (strncmp(s, "-class", 6) == 0) {
+ char *p = s + 6;
+ if (*p == '=') {
+ p++;
+ rc = dbg_set_class(p);
+ if (rc)
+ dbg_usage("-mpich-dbg-class", 0);
+ }
+ }
+ else if (strncmp(s, "-filename", 9) == 0) {
+ char *p = s + 9;
+ if (*p == '=') {
+ p++;
+ /* A special case for a filepattern of "-default",
+ * use the predefined default pattern */
+ if (strcmp(p, "-default") == 0) {
+ file_pattern = default_file_pattern;
+ }
+ else {
+ strncpy(file_pattern_buf, p, sizeof(file_pattern_buf));
+ file_pattern = file_pattern_buf;
+ }
+ }
+ }
+ else if (strncmp(s, "-rank", 5) == 0) {
+ char *p = s + 5;
+ if (*p == '=' && p[1] != 0) {
+ char *sOut;
+ p++;
+ which_rank = (int) strtol(p, &sOut, 10);
+ if (p == sOut) {
+ dbg_usage("-mpich-dbg-rank", 0);
+ which_rank = -1;
+ }
+ }
+ }
+ else {
+ dbg_usage((*argv_p)[i], 0);
+ }
+
+ /* Eventually, should null it out and reduce argc value */
+ }
+ }
+ }
+ return MPL_DBG_SUCCESS;
+}
+
+/* could two different environment variables control the same thing? sure they
+ * could! consider MPICH: we moved all our logging code into MPL, so it should
+ * have an MPL_ prefix, but all the documentation assumes an "MPICH_" prefix.
+ * So we'll look for both. */
+static char *getenv_either(const char *env_a, const char *env_b)
+{
+ char *s;
+ if ( (s = getenv(env_a)) == NULL)
+ s = getenv(env_b);
+
+ return s;
+}
+
+
+static int dbg_process_env(void)
+{
+ char *s;
+ int rc;
+
+ s = getenv_either("MPICH_DBG", "MPL_DBG");
+ if (s) {
+ /* Set the defaults */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ if (strncmp(s, "FILE", 4) == 0) {
+ file_pattern = default_file_pattern;
+ }
+ }
+ s = getenv_either("MPICH_DBG_LEVEL", "MPL_DBG_LEVEL");
+ if (s) {
+ rc = dbg_set_level(s, level_name);
+ if (rc)
+ dbg_usage("MPL_DBG_LEVEL", "TERSE, TYPICAL, VERBOSE");
+ }
+
+ s = getenv_either("MPICH_DBG_CLASS", "MPL_DBG_CLASS");
+ if (s) {
+ rc = dbg_set_class(s);
+ if (rc)
+ dbg_usage("MPL_DBG_CLASS", 0);
+ }
+
+ s = getenv_either("MPICH_DBG_FILENAME", "MPL_DBG_FILENAME");
+ if (s) {
+ strncpy(file_pattern_buf, s, sizeof(file_pattern_buf));
+ file_pattern = file_pattern_buf;
+ }
+
+ s = getenv_either("MPICH_DBG_RANK", "MPL_DBG_RANK");
+ if (s) {
+ char *sOut;
+ which_rank = (int) strtol(s, &sOut, 10);
+ if (s == sOut) {
+ dbg_usage("MPL_DBG_RANK", 0);
+ which_rank = -1;
+ }
+ }
+ return MPL_DBG_SUCCESS;
+}
+
+MPL_dbg_class MPL_DBG_ROUTINE_ENTER;
+MPL_dbg_class MPL_DBG_ROUTINE_EXIT;
+MPL_dbg_class MPL_DBG_ROUTINE;
+MPL_dbg_class MPL_DBG_ALL = ~(0); /* pre-initialize the ALL class */
+
+/*
+ * Attempt to initialize the logging system. This works only if the
+ * full initialization is not required for updating the environment
+ * and/or command-line arguments.
+ */
+int MPL_dbg_pre_init(int *argc_p, char ***argv_p, int wtimeNotReady)
+{
+ MPL_time_t t;
+
+ /* if the DBG_MSG system was already initialized, say by the
+ * device, then return immediately */
+ if (dbg_initialized != DBG_UNINIT)
+ return MPL_DBG_SUCCESS;
+
+ if (dbg_init_tls())
+ return MPL_DBG_ERR_OTHER;
+
+ /* Check to see if any debugging was selected. The order of these
+ * tests is important, as they allow general defaults to be set,
+ * followed by more specific modifications */
+ /* First, the environment variables */
+ dbg_process_env();
+
+ dbg_process_args(argc_p, argv_p);
+
+ if (wtimeNotReady == 0) {
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &time_origin);
+ reset_time_origin = 0;
+ }
+
+ /* Allocate the predefined classes */
+ MPL_DBG_ROUTINE_ENTER = MPL_dbg_class_alloc("ROUTINE_ENTER", "routine_enter");
+ MPL_DBG_ROUTINE_EXIT = MPL_dbg_class_alloc("ROUTINE_EXIT", "routine_exit");
+
+ MPL_DBG_CLASS_CLR(MPL_DBG_ROUTINE);
+ MPL_DBG_CLASS_APPEND(MPL_DBG_ROUTINE, MPL_DBG_ROUTINE_ENTER);
+ MPL_DBG_CLASS_APPEND(MPL_DBG_ROUTINE, MPL_DBG_ROUTINE_EXIT);
+ MPL_dbg_class_register(MPL_DBG_ROUTINE, "ROUTINE", "routine");
+
+ MPL_dbg_class_register(MPL_DBG_ALL, "ALL", "all");
+
+ dbg_initialized = DBG_PREINIT;
+
+ return MPL_DBG_SUCCESS;
+}
+
+int MPL_dbg_init(int *argc_p, char ***argv_p, int has_args, int has_env,
+ int wnum, int wrank, int threaded)
+{
+ int ret;
+ FILE *dbg_fp = NULL;
+
+ /* if the DBG_MSG system was already initialized, say by the
+ * device, then return immediately. Note that the device is then
+ * responsible for handling the file mode (e.g., reopen when the
+ * rank become available) */
+ if (dbg_initialized == DBG_INITIALIZED || dbg_initialized == DBG_ERROR)
+ return MPL_DBG_SUCCESS;
+
+ if (dbg_initialized != DBG_PREINIT) {
+ if (dbg_init_tls())
+ return MPL_DBG_ERR_OTHER;
+ }
+
+ dbg_fp = get_fp();
+
+ /* We may need to wait until the device is set up to initialize
+ * the timer */
+ if (reset_time_origin) {
+ MPL_time_t t;
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &time_origin);
+ reset_time_origin = 0;
+ }
+ /* Check to see if any debugging was selected. The order of these
+ * tests is important, as they allow general defaults to be set,
+ * followed by more specific modifications. */
+ /* Both of these may have already been set in the PreInit call; if
+ * the command line and/or environment variables are set before
+ * the full initialization, then don't call the routines to check
+ * those values (as they were already handled in DBG_PreInit) */
+ /* First, the environment variables */
+ if (!has_env)
+ dbg_process_env();
+ /* Now the command-line arguments */
+ if (!has_args)
+ dbg_process_args(argc_p, argv_p);
+
+ world_num = wnum;
+ world_rank = wrank;
+ is_threaded = threaded;
+
+ if (which_rank >= 0 && which_rank != wrank) {
+ /* Turn off logging on this process */
+ MPL_dbg_active_classes = 0;
+ }
+
+ /* If the file has already been opened with a temp filename,
+ * rename it. */
+ if (dbg_fp && dbg_fp != stdout && dbg_fp != stderr) {
+ char filename[MAXPATHLEN] = "";
+
+ dbg_get_filename(filename, MAXPATHLEN);
+ ret = rename(temp_filename, filename);
+ if (ret) {
+ /* Retry renaming file after closing it */
+ fclose(dbg_fp);
+ ret = rename(temp_filename, filename);
+ if (ret) {
+ MPL_error_printf("Could not rename temp log file to %s\n", filename);
+ goto fn_fail;
+ }
+ else {
+ dbg_fp = fopen(filename, "a+");
+ set_fp(dbg_fp);
+ if (dbg_fp == NULL) {
+ MPL_error_printf("Error re-opening log file, %s\n", filename);
+ goto fn_fail;
+ }
+ }
+ }
+ }
+
+ dbg_initialized = DBG_INITIALIZED;
+
+ fn_exit:
+ return MPL_DBG_SUCCESS;
+ fn_fail:
+ dbg_initialized = DBG_ERROR;
+ goto fn_exit;
+}
+
+/* Print the usage statement to stderr */
+static int dbg_usage(const char *cmd, const char *vals)
+{
+ if (vals) {
+ fprintf(stderr, "Incorrect value for %s, should be one of %s\n", cmd, vals);
+ }
+ else {
+ fprintf(stderr, "Incorrect value for %s\n", cmd);
+ }
+ fprintf(stderr, "Command line for debug switches\n\
+ -mpich-dbg-class=name[,name,...]\n\
+ -mpich-dbg-level=name (one of terse, typical, verbose)\n\
+ -mpich-dbg-filename=pattern (includes %%d for world rank, %%t for thread id\n\
+ -mpich-dbg-rank=val (only this rank in COMM_WORLD will be logged)\n\
+ -mpich-dbg (shorthand for -mpich-dbg-class=all -mpich-dbg-level=typical)\n\
+ -mpich-dbg=file (shorthand for -mpich-dbg -mpich-dbg-filename=%s)\n\
+Environment variables\n\
+ MPICH_DBG_CLASS=NAME[,NAME...]\n\
+ MPICH_DBG_LEVEL=NAME\n\
+ MPICH_DBG_FILENAME=pattern\n\
+ MPICH_DBG_RANK=val\n\
+ MPICH_DBG=YES or FILE\n", default_file_pattern);
+
+ fflush(stderr);
+
+ return 0;
+}
+
+#if defined (MPL_HAVE_MKSTEMP) && defined (MPL_HAVE_FDOPEN)
+
+/* creates a temporary file in the same directory the user specified
+ * for the log file */
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ const char temp_pattern[] = "templogXXXXXX";
+ int fd;
+ char *basename;
+ int ret;
+
+ ret = MPL_strncpy(temp_filename, file_pattern, MAXPATHLEN);
+ if (ret)
+ goto fn_fail;
+
+ find_basename(temp_filename, &basename);
+
+ /* make sure there's enough room in temp_filename to store temp_pattern */
+ if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern))
+ goto fn_fail;
+
+ MPL_strncpy(basename, temp_pattern, sizeof(temp_pattern));
+
+ fd = mkstemp(temp_filename);
+ if (fd == -1)
+ goto fn_fail;
+
+ *dbg_fp = fdopen(fd, "a+");
+ if (*dbg_fp == NULL)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#elif defined(MPL_HAVE__MKTEMP_S) && defined(MPL_HAVE_FOPEN_S)
+
+/* creates a temporary file in the same directory the user specified
+ * for the log file */
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ const char temp_pattern[] = "templogXXXXXX";
+ int fd;
+ char *basename;
+ int ret;
+ errno_t ret_errno;
+
+ ret = MPL_strncpy(temp_filename, file_pattern, MAXPATHLEN);
+ if (ret)
+ goto fn_fail;
+
+ find_basename(temp_filename, &basename);
+
+ /* make sure there's enough room in temp_filename to store temp_pattern */
+ if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern))
+ goto fn_fail;
+
+ MPL_strncpy(basename, temp_pattern, sizeof(temp_pattern));
+
+ ret_errno = _mktemp_s(temp_filename, MAXPATHLEN);
+ if (ret_errno != 0)
+ goto fn_fail;
+
+ ret_errno = fopen_s(dbg_fp, temp_filename, "a+");
+ if (ret_errno != 0)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#else
+
+/* creates a temporary file in some directory, which may not be where
+ * the user wants the log file. When the file is renamed later, it
+ * may require a copy.
+ *
+ * Note that this is not safe: By the time we call fopen(), another
+ * file with the same name may exist. That file would get clobbered.
+*/
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ char *cret;
+
+ cret = tmpnam(temp_filename);
+ if (cret == NULL)
+ goto fn_fail;
+
+ *dbg_fp = fopen(temp_filename, "w");
+ if (*dbg_fp == NULL)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#endif
+
+/* This routine can make no MPI calls, since it may be logging those
+ * calls. */
+static int dbg_get_filename(char *filename, int len)
+{
+ int withinMworld = 0, /* True if within an @W...@ */
+ withinMthread = 0; /* True if within an @T...@ */
+ /* FIXME: Need to know how many process groups are known */
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ unsigned long long int threadID = 0;
+ int nThread = 2;
+#else
+ int nThread = 1;
+#endif
+ static char world_numAsChar[10] = "0";
+ char *pDest;
+ const char *p;
+
+ if (world_num == 1) {
+ world_numAsChar[0] = '1';
+ world_numAsChar[1] = '\0';
+ }
+
+ p = file_pattern;
+ pDest = filename;
+ *filename = 0;
+ while (*p && (pDest - filename) < len - 1) {
+ /* There are two special cases that allow text to
+ * be optionally included. Those patterns are
+ * @T...@ (only if multi-threaded) and
+ * @W...@ (only if more than one process group)
+ * UNIMPLEMENTED/UNTESTED */
+ if (*p == '@') {
+ /* Escaped @? */
+ if (p[1] == '@') {
+ *pDest++ = *++p;
+ continue;
+ }
+ /* If within an @...@, terminate it */
+ if (withinMworld) {
+ withinMworld = 0;
+ p++;
+ }
+ else if (withinMthread) {
+ withinMthread = 0;
+ p++;
+ }
+ else {
+ /* Look for command */
+ p++;
+ if (*p == 'W') {
+ p++;
+ withinMworld = 1;
+ }
+ else if (*p == 'T') {
+ p++;
+ withinMthread = 1;
+ }
+ else {
+ /* Unrecognized char */
+ *pDest++ = *p++;
+ }
+ }
+ }
+ else if ((withinMworld && world_num == 0) || (withinMthread && nThread == 1)) {
+ /* Simply skip this character since we're not showing
+ * this string */
+ p++;
+ }
+ else if (*p == '%') {
+ p++;
+ if (*p == 'd') {
+ char rankAsChar[20];
+ MPL_snprintf(rankAsChar, sizeof(rankAsChar), "%d", world_rank);
+ *pDest = 0;
+ MPL_strnapp(filename, rankAsChar, len);
+ pDest += strlen(rankAsChar);
+ }
+ else if (*p == 't') {
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ char threadIDAsChar[30];
+ MPL_thread_id_t tid;
+ MPL_thread_self(&tid);
+ threadID = (unsigned long long int) tid;
+
+ MPL_snprintf(threadIDAsChar, sizeof(threadIDAsChar), "%llx", threadID);
+ *pDest = 0;
+ MPL_strnapp(filename, threadIDAsChar, len);
+ pDest += strlen(threadIDAsChar);
+#else
+ *pDest++ = '0';
+#endif /* MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE */
+ }
+ else if (*p == 'w') {
+ /* *pDest++ = '0'; */
+ *pDest = 0;
+ MPL_strnapp(filename, world_numAsChar, len);
+ pDest += strlen(world_numAsChar);
+ }
+ else if (*p == 'p') {
+ /* Appends the pid of the proceess to the file name. */
+ char pidAsChar[20];
+#if defined(MPL_HAVE_GETPID)
+ pid_t pid = getpid();
+#else
+ int pid = -1;
+#endif /* MPL_HAVE_GETPID */
+ MPL_snprintf(pidAsChar, sizeof(pidAsChar), "%d", (int) pid);
+ *pDest = 0;
+ MPL_strnapp(filename, pidAsChar, len);
+ pDest += strlen(pidAsChar);
+ }
+ else {
+ *pDest++ = '%';
+ *pDest++ = *p;
+ }
+ p++;
+ }
+ else {
+ *pDest++ = *p++;
+ }
+ }
+ *pDest = 0;
+
+ return 0;
+}
+
+/* This routine can make no MPI calls, since it may be logging those
+ * calls. */
+static int dbg_openfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ if (!file_pattern || *file_pattern == 0 || strcmp(file_pattern, "-stdout-") == 0) {
+ *dbg_fp = stdout;
+ }
+ else if (strcmp(file_pattern, "-stderr-") == 0) {
+ *dbg_fp = stderr;
+ }
+ else {
+ char filename[MAXPATHLEN];
+
+ /* if we're not at DBG_INITIALIZED, we don't know our
+ * rank yet, so we create a temp file, to be renamed later */
+ if (dbg_initialized != DBG_INITIALIZED) {
+ mpl_errno = dbg_open_tmpfile(dbg_fp);
+ if (mpl_errno)
+ goto fn_fail;
+ }
+ else {
+ mpl_errno = dbg_get_filename(filename, MAXPATHLEN);
+ if (mpl_errno)
+ goto fn_fail;
+
+ *dbg_fp = fopen(filename, "w");
+ if (!*dbg_fp) {
+ MPL_error_printf("Could not open log file %s\n", filename);
+ if (mpl_errno)
+ goto fn_fail;
+ }
+ }
+ }
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+/* Support routines for processing mpich-dbg values */
+/* Update the GLOBAL variable MPL_dbg_active_classes with the bits
+ * corresponding to this name */
+static int dbg_set_class(const char *s)
+{
+ int i, found_match;
+ size_t slen = 0;
+ char *str;
+
+ if (s && *s)
+ slen = strlen(s);
+
+ str = strtok((char *) s, ",");
+ while (str) {
+ found_match = 0;
+ for (i = 0; i < num_classnames; i++) {
+ size_t len = strlen(classnames[i].lcname);
+
+ if (slen == len && (strncmp(str, classnames[i].lcname, len) ||
+ strncmp(str, classnames[i].ucname, len))) {
+ /* we have a match */
+ MPL_dbg_active_classes |= classnames[i].classbits;
+ found_match = 1;
+ break;
+ }
+ }
+
+ if (!found_match) {
+ /* no match was found. the component might not have
+ * registered yet. store the user string for later
+ * access. */
+ unregistered_classes[num_unregistered_classes] = str;
+ num_unregistered_classes++;
+ }
+
+ str = strtok(NULL, ",");
+ }
+
+ return 0;
+}
+
+/* Set the global MPL_dbg_max_level if there is a match with the known
+ * level names */
+static int dbg_set_level(const char *s, const char *(names[]))
+{
+ int i;
+
+ for (i = 0; names[i]; i++) {
+ if (strcmp(names[i], s) == 0) {
+ MPL_dbg_max_level = level_values[i];
+ return 0;
+ }
+ }
+ return 1;
+}
+#endif /* MPL_USE_DBG_LOGGING */
diff --git a/src/mpi/romio/mpl/src/env/.state-cache b/src/mpi/romio/mpl/src/env/.state-cache
new file mode 100644
index 0000000..47c3212
--- /dev/null
+++ b/src/mpi/romio/mpl/src/env/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="mpl_env.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_env.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/env/Makefile.mk b/src/mpi/romio/mpl/src/env/Makefile.mk
new file mode 100644
index 0000000..3a11aaa
--- /dev/null
+++ b/src/mpi/romio/mpl/src/env/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/env/mpl_env.c
diff --git a/src/mpl/src/mplenv.c b/src/mpi/romio/mpl/src/env/mpl_env.c
similarity index 100%
copy from src/mpl/src/mplenv.c
copy to src/mpi/romio/mpl/src/env/mpl_env.c
diff --git a/src/mpi/romio/mpl/src/mem/.state-cache b/src/mpi/romio/mpl/src/mem/.state-cache
new file mode 100644
index 0000000..c3d37ec
--- /dev/null
+++ b/src/mpi/romio/mpl/src/mem/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="mpl_trmem.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_trmem.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/mem/Makefile.mk b/src/mpi/romio/mpl/src/mem/Makefile.mk
new file mode 100644
index 0000000..912d096
--- /dev/null
+++ b/src/mpi/romio/mpl/src/mem/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/mem/mpl_trmem.c
diff --git a/src/mpi/romio/mpl/src/mem/mpl_trmem.c b/src/mpi/romio/mpl/src/mem/mpl_trmem.c
new file mode 100644
index 0000000..16c37bf
--- /dev/null
+++ b/src/mpi/romio/mpl/src/mem/mpl_trmem.c
@@ -0,0 +1,825 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* Always enable valgrind macros (if possible) in this file. If these functions
+ * are used, the caller is concerned about correctness, not performance. */
+#define MPL_VG_ENABLED 1
+
+/* style: allow:calloc:1 sig:0 */
+/* style: allow:free:2 sig:0 */
+/* style: allow:malloc:2 sig:0 */
+/* style: allow:strdup:1 sig:0 */
+
+#include "mpl.h"
+
+#ifdef malloc
+/* Undefine these in case they were set to 'error' */
+#undef malloc
+#undef calloc
+#undef free
+#undef strdup
+/* Some GNU implementations use __strdup for strdup */
+#if defined(__strdup)
+#define strdup(s) __strdup(s)
+#endif
+#endif
+
+#define TR_ALIGN_BYTES 8
+#define TR_ALIGN_MASK 0x7
+#define TR_FNAME_LEN 48
+
+#define COOKIE_VALUE 0xf0e0d0c9
+#define ALREADY_FREED 0x0f0e0d9c
+
+typedef struct TRSPACE {
+ size_t size;
+ int id;
+ int lineno;
+ int freed_lineno;
+ char freed_fname[TR_FNAME_LEN];
+ char fname[TR_FNAME_LEN];
+ struct TRSPACE *volatile next, *prev;
+ unsigned long cookie; /* Cookie is always the last element
+ * inorder to catch the off-by-one
+ * errors */
+} TRSPACE;
+/* This union is used to ensure that the block passed to the user is
+ aligned on a double boundary */
+typedef union TrSPACE {
+ TRSPACE sp;
+ /* Ensure trSPACE header follows the alignment rules for all predefined types.
+ * Because any internal buffer is allocated as (TrSPACE)header + (void*)buffer.*/
+ MPL_mem_alignment_t alignment;
+} TrSPACE;
+
+/*
+ * This package maintains some state about itself. These globals hold
+ * this information.
+ */
+#define TRHEAD_PRESENTINAL ((TRSPACE *)0xbacdef01)
+#define TRHEAD_POSTSENTINAL ((TRSPACE *)0x10fedcba)
+static int world_rank = -1;
+static volatile size_t allocated = 0;
+static volatile long frags = 0;
+static TRSPACE *volatile TRhead[3] =
+ { TRHEAD_PRESENTINAL, 0, TRHEAD_POSTSENTINAL };
+static volatile int TRid = 0;
+static volatile int TRidSet = 0;
+static volatile int TRlevel = 0;
+static unsigned char TRDefaultByte = 0xda;
+static unsigned char TRFreedByte = 0xfc;
+static int TRdebugLevel = 0;
+static int TRSetBytes = 0;
+#define TR_MALLOC 0x1
+#define TR_FREE 0x2
+
+/* Used to keep track of allocations */
+static volatile size_t TRMaxMem = 0;
+static volatile int TRMaxMemId = 0;
+static volatile size_t TRCurOverhead = 0;
+static volatile size_t TRMaxOverhead = 314572800;
+/* Used to limit allocation */
+static volatile size_t TRMaxMemAllow = 0;
+
+static int TR_is_threaded = 0;
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE
+
+static MPL_thread_mutex_t memalloc_mutex;
+
+#define TR_THREAD_CS_ENTER \
+ do { \
+ if (TR_is_threaded) { \
+ int err; \
+ MPL_thread_mutex_lock(&memalloc_mutex, &err); \
+ if (err) \
+ MPL_error_printf("Error acquiring memalloc mutex lock\n"); \
+ } \
+ } while (0)
+
+#define TR_THREAD_CS_EXIT \
+ do { \
+ if (TR_is_threaded) { \
+ int err; \
+ MPL_thread_mutex_unlock(&memalloc_mutex, &err); \
+ if (err) \
+ MPL_error_printf("Error releasing memalloc mutex lock\n"); \
+ } \
+ } while (0)
+
+#else /* MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE */
+
+#define TR_THREAD_CS_ENTER
+#define TR_THREAD_CS_EXIT
+
+#endif /* MPL_THREAD_PACKAGE_NAME */
+
+/*
+ * Printing of addresses.
+ *
+ * This is particularly difficult because there isn't a C integer type that is
+ * known in advance to be the same size as an address, so we need some
+ * way to convert a pointer into the characters the represent the address in
+ * hex. We can't simply use %x or %lx since the size of an address might not
+ * be an int or a long (e.g., it might be a long long).
+ *
+ * In order to handle this, we have our own routine to convert
+ * an address to hex digits. For thread safety, the character
+ * string is allocated within the calling routine (rather than returning
+ * a static string from the conversion routine).
+ */
+
+/* 8 bytes = 16 hex chars + 0x (2 chars) + the null is 19 */
+#define MAX_ADDRESS_CHARS 19
+
+static void addrToHex(void *addr, char string[MAX_ADDRESS_CHARS])
+{
+ int i;
+ static char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+ };
+ /* The following construction is used to keep compilers from issuing
+ * a warning message about casting a pointer to an integer type */
+ intptr_t iaddr = (intptr_t) ((char *) addr - (char *) 0);
+
+ /* Initial location */
+ i = sizeof(void *) * 2;
+ string[i + 2] = 0;
+ while (i) {
+ string[i + 1] = hex[iaddr & 0xF];
+ iaddr >>= 4;
+ i--;
+ }
+ string[0] = '0';
+ string[1] = 'x';
+}
+
+/*+C
+ MPL_trinit - Setup the space package. Only needed for
+ error messages and flags.
++*/
+void MPL_trinit(int rank, int need_thread_safety)
+{
+ char *s;
+
+ world_rank = rank;
+
+ /* FIXME: We should use generalized parameter handling here
+ * to allow use of the command line as well as environment
+ * variables */
+ s = getenv("MPL_TRMEM_INIT");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRSetBytes = 1;
+ }
+ s = getenv("MPL_TRMEM_VALIDATE");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRdebugLevel = 1;
+ }
+ s = getenv("MPL_TRMEM_INITZERO");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRDefaultByte = 0;
+ TRFreedByte = 0;
+ }
+ s = getenv("MPL_TRMEM_TRACELEVEL");
+ if (s && *s) {
+ int l = atoi(s);
+ TRlevel = l;
+ }
+ s = getenv("MPL_TRMEM_MAX_OVERHEAD");
+ if (s && *s) {
+ long l = atol(s);
+ TRMaxOverhead = (size_t)l;
+ }
+
+ /* If the upper layer asked for thread safety and there's no
+ * threading package available, we need to return an error. */
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE
+ if (need_thread_safety)
+ MPL_error_printf("No thread package to provide thread-safe memory allocation\n");
+#endif
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE
+ if (need_thread_safety) {
+ int err;
+
+ MPL_thread_mutex_create(&memalloc_mutex, &err);
+ if (err) {
+ MPL_error_printf("Error creating memalloc mutex\n");
+ }
+
+ TR_is_threaded = 1;
+ }
+#endif
+}
+
+/*+C
+ MPL_trmalloc - Malloc with tracing
+
+Input Parameters:
++ a - number of bytes to allocate
+. lineno - line number where used. Use __LINE__ for this
+- fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ double aligned pointer to requested storage, or null if not
+ available.
+ +*/
+static void *trmalloc(size_t a, int lineno, const char fname[])
+{
+ TRSPACE *head;
+ char *new = NULL;
+ unsigned long *nend;
+ size_t nsize;
+ int l;
+
+ if (TRdebugLevel > 0) {
+ if (MPL_trvalid2( "Invalid MALLOC arena detected at line %d in %s\n",
+ lineno, fname))
+ goto fn_exit;
+ }
+
+ nsize = a;
+ if (nsize & TR_ALIGN_MASK)
+ nsize += (TR_ALIGN_BYTES - (nsize & TR_ALIGN_MASK));
+ if ((allocated + nsize > TRMaxMemAllow) && TRMaxMemAllow) {
+ /* Return a null when memory would be exhausted */
+ /* This is only called when additional debugging is enabled,
+ * so the fact that this does not go through the regular error
+ * message system is not a problem. */
+ MPL_error_printf("Exceeded allowed memory!\n");
+ goto fn_exit;
+ }
+
+ new = (char *)malloc(nsize + sizeof(TrSPACE) + sizeof(unsigned long));
+ if (!new)
+ goto fn_exit;
+
+ if(TRSetBytes)
+ memset(new, TRDefaultByte, nsize + sizeof(TrSPACE) + sizeof(unsigned long));
+
+ /* Cast to (void*) to avoid false warnings about alignment issues */
+ head = (TRSPACE *) (void *)new;
+ new += sizeof(TrSPACE);
+
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ goto fn_exit;
+ }
+ if (TRhead[1]) {
+ MPL_VG_MAKE_MEM_DEFINED(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
+ TRhead[1]->prev = head;
+ MPL_VG_MAKE_MEM_NOACCESS(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
+ }
+ head->next = TRhead[1];
+ TRhead[1] = head;
+ head->prev = 0;
+ head->size = nsize;
+ head->id = TRid;
+ head->lineno = lineno;
+ if ((l = (int) strlen(fname)) > TR_FNAME_LEN - 1)
+ fname += (l - (TR_FNAME_LEN - 1));
+ MPL_strncpy(head->fname, fname, TR_FNAME_LEN);
+ head->fname[TR_FNAME_LEN - 1] = 0;
+ head->cookie = COOKIE_VALUE;
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *) (new + nsize);
+ nend[0] = COOKIE_VALUE;
+
+ allocated += nsize;
+ if (allocated > TRMaxMem) {
+ TRMaxMem = allocated;
+ TRMaxMemId = TRid;
+ }
+ frags++;
+
+ if (TRlevel & TR_MALLOC) {
+ /* Note that %08p (what we'd like to use) isn't accepted by
+ * all compilers */
+ MPL_error_printf("[%d] Allocating %ld(%ld) bytes at %8p in %s[%d]\n",
+ world_rank, (long)a, (long)nsize, new, fname, lineno);
+ }
+
+ /* Warn the user about tracing overhead if the total memory overhead for
+ * tracing is larger than the threshold, TRMaxOverhead. */
+ TRCurOverhead += sizeof(TrSPACE);
+ if ((TRCurOverhead > TRMaxOverhead) && TRMaxOverhead) {
+ MPL_error_printf("[%d] %.1lf MB was used for memory usage tracing!\n",
+ world_rank, (double)TRCurOverhead / 1024 / 1024);
+ TRMaxOverhead = TRMaxOverhead * 2;
+ }
+
+ /* Without these macros valgrind actually catches far fewer errors when
+ * using --enable-g=mem. Note that it would be nice to use
+ * MPL_VG_MALLOCLIKE_BLOCK and friends, but they don't work when the
+ * underlying source of the memory is malloc/free. */
+ MPL_VG_MAKE_MEM_UNDEFINED(new, nsize);
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(TrSPACE));
+ MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(unsigned long));
+ fn_exit:
+ return (void *) new;
+}
+
+void *MPL_trmalloc(size_t a, int lineno, const char fname[])
+{
+ void *retval;
+
+ TR_THREAD_CS_ENTER;
+ retval = trmalloc(a, lineno, fname);
+ TR_THREAD_CS_EXIT;
+
+ return retval;
+}
+
+/*+C
+ MPL_trfree - Free with tracing
+
+Input Parameters:
++ a - pointer to a block allocated with trmalloc
+. line - line in file where called
+- file - Name of file where called
+ +*/
+static void trfree(void *a_ptr, int line, const char file[])
+{
+ TRSPACE *head;
+ unsigned long *nend;
+ size_t nset;
+ int l;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+/* Don't try to handle empty blocks */
+ if (!a_ptr)
+ return;
+
+ if (TRdebugLevel > 0) {
+ if (MPL_trvalid2("Invalid MALLOC arena detected by FREE at line %d in %s\n", line, file ))
+ return;
+ }
+
+ /* Alignment guaranteed by the way a_ptr was allocated. Use
+ (void *) cast to suppress false warning about alignment issues */
+ head = (TRSPACE *) (void *) ( ((char *)a_ptr) - sizeof(TrSPACE) );
+
+ /* We need to mark the memory as defined before performing our own error
+ * checks or valgrind will flag the trfree function as erroneous. The real
+ * free() at the end of this function will mark the whole block as NOACCESS
+ * again. See the corresponding block in the trmalloc function for more
+ * info. */
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(TrSPACE));
+
+ if (head->cookie != COOKIE_VALUE) {
+ /* Damaged header */
+ /* Note that %08p (what we'd like to use) isn't accepted by
+ * all compilers */
+ addrToHex( a_ptr, hexstring );
+ MPL_error_printf("[%d] Block at address %s is corrupted; cannot free;\n"
+ "may be block not allocated with MPL_trmalloc or MALLOC\n"
+ "called in %s at line %d\n", world_rank, hexstring, file, line);
+ return;
+ }
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *) ((char *)a_ptr + head->size);
+/* Check that nend is properly aligned */
+ if ((sizeof(long) == 4 && ((long) nend & 0x3) != 0) ||
+ (sizeof(long) == 8 && ((long) nend & 0x7) != 0)) {
+ addrToHex( a_ptr, hexstring );
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (invalid address or header)\n"
+ "called in %s at line %d\n", world_rank, hexstring, file, line);
+ return;
+ }
+
+ MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
+ if (*nend != COOKIE_VALUE) {
+ if (*nend == ALREADY_FREED) {
+ addrToHex(a_ptr, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s was already freed\n", world_rank,
+ head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf("[%d] Block at address %s was already freed\n",
+ world_rank, hexstring);
+ }
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ head->freed_fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ MPL_error_printf("[%d] Block freed in %s[%d]\n",
+ world_rank, head->freed_fname, head->freed_lineno);
+ MPL_error_printf("[%d] Block allocated at %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ return;
+ }
+ else {
+ /* Damaged tail */
+ addrToHex(a_ptr, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
+ world_rank, head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (probably write past end)\n",
+ world_rank, hexstring);
+ }
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ MPL_error_printf("[%d] Block being freed allocated in %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
+ world_rank, (long)COOKIE_VALUE, *nend );
+ }
+ }
+/* Mark the location freed */
+ *nend = ALREADY_FREED;
+ head->freed_lineno = line;
+ if ((l = (int) strlen(file)) > TR_FNAME_LEN - 1)
+ file += (l - (TR_FNAME_LEN - 1));
+ MPL_strncpy(head->freed_fname, file, TR_FNAME_LEN);
+
+ allocated -= head->size;
+ frags--;
+ if (head->prev) {
+ MPL_VG_MAKE_MEM_DEFINED(&head->prev->next, sizeof(head->prev->next));
+ head->prev->next = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(&head->prev->next, sizeof(head->prev->next));
+ }
+ else {
+ TRhead[1] = head->next;
+ }
+
+ if (head->next) {
+ MPL_VG_MAKE_MEM_DEFINED(&head->next->prev, sizeof(head->next->prev));
+ head->next->prev = head->prev;
+ MPL_VG_MAKE_MEM_NOACCESS(&head->next->prev, sizeof(head->next->prev));
+ }
+
+ if (TRlevel & TR_FREE) {
+ addrToHex(a_ptr, hexstring);
+ MPL_error_printf("[%d] Freeing %lu bytes at %s in %s[%d]\n",
+ world_rank, (unsigned long)head->size, hexstring,
+ file, line);
+ }
+
+ TRCurOverhead -= sizeof(TrSPACE);
+
+ /*
+ * Now, scrub the data (except possibly the first few ints) to
+ * help catch access to already freed data
+ */
+ /* FIXME why do we skip the first few ints? [goodell@] */
+ /* Answer lost in time. Probably because in some case, the
+ first few bytes provided useful information in tracking down
+ a problem. */
+ if (head->size > 2*sizeof(int)) {
+ /* Now that nset is size_t, it might be defined as unsigned,
+ so we can't compare nset - 2*sizeof(int) against zero */
+ nset = head->size - 2 * sizeof(int);
+ /* If an upper layer (like the handle allocation code) ever used the
+ * MPL_VG_MAKE_MEM_NOACCESS macro on part/all of the data we gave
+ * them then our memset will elicit "invalid write" errors from
+ * valgrind. Mark it as accessible but undefined here to prevent this. */
+ MPL_VG_MAKE_MEM_UNDEFINED((char *)a_ptr + 2 * sizeof(int), nset);
+ if(TRSetBytes)
+ memset((char *)a_ptr + 2 * sizeof(int), TRFreedByte, nset);
+ }
+ free(head);
+}
+
+void MPL_trfree(void *a_ptr, int line, const char fname[])
+{
+ TR_THREAD_CS_ENTER;
+ trfree(a_ptr, line, fname);
+ TR_THREAD_CS_EXIT;
+}
+
+/*+C
+ MPL_trvalid - test the allocated blocks for validity. This can be used to
+ check for memory overwrites.
+
+Input Parameters:
+. str - string to write out only if an error is detected.
+
+ Return value:
+ The number of errors detected.
+
+ Output Effect:
+ Error messages are written to stdout. These have the form of either
+
+$ Block [id=%d(%d)] at address %lx is corrupted (probably write past end)
+$ Block allocated in <filename>[<linenumber>]
+
+ if the sentinal at the end of the block has been corrupted, and
+
+$ Block at address %lx is corrupted
+
+ if the sentinal at the begining of the block has been corrupted.
+
+ The address is the actual address of the block. The id is the
+ value of TRID.
+
+ No output is generated if there are no problems detected.
++*/
+static int trvalid( const char str[] )
+{
+ return MPL_trvalid2( str, -1, (const char *)0 );
+}
+
+int MPL_trvalid2(const char str[], int line, const char file[] )
+{
+ TRSPACE *head;
+ TRSPACE *next;
+ char *a;
+ unsigned long *nend;
+ int errs = 0;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ errs++;
+ goto fn_exit;
+ }
+ head = TRhead[1];
+ while (head) {
+ /* mark defined before accessing head contents */
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
+ if (head->cookie != COOKIE_VALUE) {
+ if (!errs) {
+ if (line > 0)
+ MPL_error_printf(str, line, file);
+ else
+ MPL_error_printf( "%s\n", str );
+ }
+ errs++;
+ addrToHex(head+1, hexstring);
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (invalid cookie in head)\n",
+ world_rank, hexstring);
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ /* Must stop because if head is invalid, then the data in the
+ * head is probably also invalid, and using could lead to
+ * SEGV or BUS */
+ goto fn_exit;
+ }
+ /* Get the address of the first byte of the memory, which begins
+ just after the end of the header. We must use the full header
+ (TrSPACE) rather than the struct with the data (TRSPACE) because
+ the full header is padded to ensure correct byte alignment with
+ the data */
+ a = (char *)( (TrSPACE *)head + 1 );
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *)(a + head->size);
+
+ /* mark defined before accessing nend contents */
+ MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
+
+ if (nend[0] != COOKIE_VALUE) {
+ if (!errs) {
+ if (line > 0)
+ MPL_error_printf(str, line, file);
+ else
+ MPL_error_printf( "%s\n", str );
+ }
+ errs++;
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ addrToHex(a, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
+ world_rank, head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (probably write past end)\n",
+ world_rank, hexstring);
+ }
+ MPL_error_printf("[%d] Block allocated in %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
+ world_rank, (long)COOKIE_VALUE, *nend );
+ }
+
+ /* set both regions back to NOACCESS */
+ next = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(*nend));
+ head = next;
+ }
+ fn_exit:
+ return errs;
+}
+
+int MPL_trvalid(const char str[])
+{
+ int retval;
+ TR_THREAD_CS_ENTER;
+ retval = trvalid(str);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trdump - Dump the allocated memory blocks to a file
+
+Input Parameters:
++ fp - file pointer. If fp is NULL, stderr is assumed.
+- minid - Only print allocated memory blocks whose id is at least 'minid'
+
+ +*/
+static void trdump(FILE * fp, int minid)
+{
+ TRSPACE *head;
+#ifdef VALGRIND_MAKE_MEM_NOACCESS
+ TRSPACE *old_head;
+#endif
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ if (fp == 0)
+ fp = stderr;
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ return;
+ }
+ head = TRhead[1];
+ while (head) {
+ /* these "rank and size" strings are supposed to be small: enough to
+ * hold an mpi rank, a size, and a hexadecimal address. */
+#define ADDRESS_STR_BUFLEN 256
+
+ char address_str[ADDRESS_STR_BUFLEN];
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
+ if (head->id >= minid) {
+ addrToHex((char *) head + sizeof(TrSPACE), hexstring);
+ address_str[ADDRESS_STR_BUFLEN-1] = 0;
+ snprintf(address_str, ADDRESS_STR_BUFLEN-1, "[%d] %lu at [%s],", world_rank,
+ (unsigned long)head->size, hexstring);
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Be extra careful */
+ if (TRidSet) {
+ /* For head->id >= 0, we can add code to map the id to
+ * the name of a package, rather than using a raw number */
+ fprintf(fp, "%s id = %d %s[%d]\n", address_str, head->id, head->fname, head->lineno);
+ }
+ else {
+ fprintf(fp, "%s %s[%d]\n", address_str, head->fname, head->lineno);
+ }
+ }
+#ifdef VALGRIND_MAKE_MEM_NOACCESS
+ old_head = head;
+#endif
+ head = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(old_head, sizeof(*old_head));
+ }
+/*
+ msg_fprintf(fp, "# [%d] The maximum space allocated was %ld bytes [%ld]\n",
+ world_rank, TRMaxMem, TRMaxMemId);
+ */
+}
+
+void MPL_trdump(FILE *fp, int minid)
+{
+ TR_THREAD_CS_ENTER;
+ trdump(fp, minid);
+ TR_THREAD_CS_EXIT;
+}
+
+/*+C
+ MPL_trcalloc - Calloc with tracing
+
+Input Parameters:
+. nelem - number of elements to allocate
+. elsize - size of each element
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Double aligned pointer to requested storage, or null if not
+ available.
+ +*/
+static void *trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
+{
+ void *p;
+
+ p = trmalloc(nelem * elsize, lineno, fname);
+ if (p) {
+ memset(p, 0, nelem * elsize);
+ }
+ return p;
+}
+
+void *MPL_trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trcalloc(nelem, elsize, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trrealloc - Realloc with tracing
+
+Input Parameters:
+. p - pointer to old storage
+. size - number of bytes to allocate
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Double aligned pointer to requested storage, or null if not
+ available. This implementation ALWAYS allocates new space and copies
+ the contents into the new space.
+ +*/
+static void *trrealloc(void *p, size_t size, int lineno, const char fname[])
+{
+ void *pnew;
+ size_t nsize;
+ TRSPACE *head = 0;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ /* We should really use the size of the old block... */
+ if (p) {
+ head = (TRSPACE *) (void*) ((char *)p - sizeof(TrSPACE));
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head)); /* mark defined before accessing contents */
+ if (head->cookie != COOKIE_VALUE) {
+ /* Damaged header */
+ addrToHex(p, hexstring);
+ MPL_error_printf("[%d] Block at address %s is corrupted; cannot realloc;\n"
+ "may be block not allocated with MPL_trmalloc or MALLOC\n",
+ world_rank, hexstring);
+ return 0;
+ }
+ }
+
+ /* Per the POSIX Standard, realloc() with zero size has two possible
+ * results. In both cases the given pointer (p) is freed, and the function
+ * will either return NULL or a unique value that can safely be passed to
+ * free(). We return NULL here because that is more likely to catch
+ * programming errors at higher levels. */
+ if (!size) {
+ trfree(p, lineno, fname);
+ return NULL;
+ }
+
+ pnew = trmalloc(size, lineno, fname);
+
+ if (p && pnew) {
+ nsize = size;
+ if (head->size < nsize)
+ nsize = head->size;
+ memcpy(pnew, p, nsize);
+ trfree(p, lineno, fname);
+ }
+
+ /* Re-mark the head as NOACCESS before returning. */
+ /* FIXME: Note head is no longer valid after MPL_trfree above */
+ if (head) {
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ }
+
+ /* If the MPL_trmalloc failed above pnew will be NULL, just like a
+ * regular realloc failure. */
+ return pnew;
+}
+
+void *MPL_trrealloc(void *p, size_t size, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trrealloc(p, size, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trstrdup - Strdup with tracing
+
+Input Parameters:
+. str - string to duplicate
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Pointer to copy of the input string.
+ +*/
+static void *trstrdup(const char *str, int lineno, const char fname[])
+{
+ void *p;
+ size_t len = strlen(str) + 1;
+
+ p = trmalloc(len, lineno, fname);
+ if (p) {
+ memcpy(p, str, len);
+ }
+ return p;
+}
+
+void *MPL_trstrdup(const char *str, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trstrdup(str, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
diff --git a/src/mpi/romio/mpl/src/msg/.state-cache b/src/mpi/romio/mpl/src/msg/.state-cache
new file mode 100644
index 0000000..4299dd0
--- /dev/null
+++ b/src/mpi/romio/mpl/src/msg/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="mpl_msg.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_msg.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/msg/Makefile.mk b/src/mpi/romio/mpl/src/msg/Makefile.mk
new file mode 100644
index 0000000..129fb7a
--- /dev/null
+++ b/src/mpi/romio/mpl/src/msg/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/msg/mpl_msg.c
diff --git a/src/mpl/src/mplmsg.c b/src/mpi/romio/mpl/src/msg/mpl_msg.c
similarity index 100%
copy from src/mpl/src/mplmsg.c
copy to src/mpi/romio/mpl/src/msg/mpl_msg.c
diff --git a/src/mpi/romio/mpl/src/shm/.state-cache b/src/mpi/romio/mpl/src/shm/.state-cache
new file mode 100644
index 0000000..57a44f6
--- /dev/null
+++ b/src/mpi/romio/mpl/src/shm/.state-cache
@@ -0,0 +1,16 @@
+<dir>
+<file name="mpl_shm_mmap.c" info="1478973152"/>
+<file name="mpl_shm_sysv.c" info="1478973152"/>
+<file name="mpl_shm.c" info="1478973152"/>
+<file name="mpl_shm_win.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_shm_mmap.c">
+</fileinfo>
+<fileinfo name="mpl_shm_sysv.c">
+</fileinfo>
+<fileinfo name="mpl_shm.c">
+</fileinfo>
+<fileinfo name="mpl_shm_win.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/shm/Makefile.mk b/src/mpi/romio/mpl/src/shm/Makefile.mk
new file mode 100644
index 0000000..a0c1bf0
--- /dev/null
+++ b/src/mpi/romio/mpl/src/shm/Makefile.mk
@@ -0,0 +1,12 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/shm/mpl_shm.c \
+ src/shm/mpl_shm_sysv.c \
+ src/shm/mpl_shm_mmap.c \
+ src/shm/mpl_shm_win.c
diff --git a/src/mpi/romio/mpl/src/shm/mpl_shm.c b/src/mpi/romio/mpl/src/shm/mpl_shm.c
new file mode 100644
index 0000000..0b18921
--- /dev/null
+++ b/src/mpi/romio/mpl/src/shm/mpl_shm.c
@@ -0,0 +1,112 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+/* Serialize a handle. A serialized handle is a string of
+ * characters that can be persisted by the caller. The serialized
+ * handle can be used to create another ref to the shared mem seg
+ * by deserializing it.
+ * str : A string of chars of len, str_len.
+ * If the function succeeds the serialized handle is copied
+ * into this user buffer
+ * hnd : Handle to shared memory
+ */
+int MPL_shm_hnd_serialize(char *str, MPL_shm_hnd_t hnd, int str_len)
+{
+ int rc = -1;
+ rc = MPLI_shm_ghnd_get_by_val(hnd, str, str_len);
+ return rc;
+}
+
+/* Deserialize a handle.
+ * str_hnd : A null-terminated string of len str_hnd_len that
+ * contains the serialized handle.
+ * hnd : If the call succeeds the user gets back a handle,hnd, to
+ * shared mem - deserialized from strhnd. This handle
+ * will refer to the shm seg referred by the serialized
+ * handle.
+ */
+int MPL_shm_hnd_deserialize(MPL_shm_hnd_t hnd, const char *str_hnd, size_t str_hnd_len)
+{
+ int rc = -1;
+ MPLI_shm_hnd_reset_val(hnd);
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%s", str_hnd);
+ rc = MPL_shm_seg_open(hnd, 0);
+ return rc;
+}
+
+/* Get a serialized handle by reference.
+ * Rationale: The user might only want to read the serialized view
+ * of the handle & hence not want to allocate a buffer for the ser view
+ * of the handle.
+ * str_ptr : Pointer to a string of chars to hold the serialized handle
+ * If the function succeeds, the pointer points to a
+ * serialized view of the handle.
+ * hnd : Handle to shm seg which has to be serialized
+ */
+
+int MPL_shm_hnd_get_serialized_by_ref(MPL_shm_hnd_t hnd, char **str_ptr)
+{
+ int mpi_errno = 0;
+ *str_ptr = (char *)MPLI_shm_ghnd_get_by_ref(hnd);
+ return mpi_errno;
+}
+
+/* Deserialize a handle by reference.
+ * Rationale : The user already has a serialized view of the handle.
+ * The user does not want to manage the view buffer any more
+ * & also needs to deserialize from the buffer.
+ * ser_hnd_ptr : Pointer to a serialized view of the handle. The user
+ * no longer needs to take care of this buffer.
+ * hnd : If the function succeeds this points to the deserialized
+ * handle.
+ */
+int MPL_shm_hnd_deserialize_by_ref(MPL_shm_hnd_t hnd, char **ser_hnd_ptr)
+{
+ int mpi_errno = 0;
+
+ MPLI_shm_hnd_reset_val(hnd);
+ MPLI_shm_ghnd_set_by_ref(hnd, *ser_hnd_ptr);
+
+ mpi_errno = MPL_shm_seg_open(hnd, 0);
+
+ return mpi_errno;
+}
+
+/* Initialize a shared memory handle
+ * hnd_ptr : A pointer to the shared memory handle
+ */
+
+int MPL_shm_hnd_init(MPL_shm_hnd_t *hnd_ptr)
+{
+ int rc = -1;
+ rc = MPLI_shm_hnd_alloc(hnd_ptr);
+ MPLI_shm_hnd_reset_val(*hnd_ptr);
+ return rc;
+}
+
+/* Finalize a shared memory handle.
+ * hnd_ptr : A pointer to the shm handle to be finalized.
+ * Any handle that is init has to be finalized.
+ */
+int MPL_shm_hnd_finalize(MPL_shm_hnd_t *hnd_ptr)
+{
+ int mpi_errno = 0;
+
+ /* A finalize can/should be called on an invalid handle
+ * Don't assert if we fail here ...
+ */
+ MPLI_shm_hnd_close(*hnd_ptr);
+ MPLI_shm_hnd_free(*hnd_ptr);
+
+ *hnd_ptr = MPL_SHM_HND_INVALID;
+
+ return mpi_errno;
+}
+
diff --git a/src/mpi/romio/mpl/src/shm/mpl_shm_mmap.c b/src/mpi/romio/mpl/src/shm/mpl_shm_mmap.c
new file mode 100644
index 0000000..84b787f
--- /dev/null
+++ b/src/mpi/romio/mpl/src/shm/mpl_shm_mmap.c
@@ -0,0 +1,181 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_MMAP_SHM
+
+#include <fcntl.h>
+#include <sys/mman.h>
+#if defined (MPL_HAVE_MKSTEMP) && defined (MPL_NEEDS_MKSTEMP_DECL)
+extern int mkstemp(char *template);
+#endif
+
+inline int MPLI_shm_lhnd_close(MPL_shm_hnd_t hnd)
+{
+ MPLI_shm_lhnd_t lhnd = MPLI_SHM_LHND_INVALID;
+ lhnd = MPLI_shm_lhnd_get(hnd);
+ if (lhnd != MPLI_SHM_LHND_INVALID) {
+ if (close(lhnd) == 0) {
+ MPLI_shm_lhnd_set(hnd, MPLI_SHM_LHND_INIT_VAL);
+ } else {
+ /* close() failed */
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+/* FIXME: Pass (void **)shm_addr_ptr instead of (char **) shm_addr_ptr
+ * since a util func should be generic
+ * Currently not passing (void **) to reduce warning in nemesis
+ * code which passes (char **) ptrs to be attached to a seg
+ */
+
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ MPLI_shm_lhnd_t lhnd = -1, rc = -1;
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ char dev_shm_fname[] = "/dev/shm/mpich_shar_tmpXXXXXX";
+ char tmp_fname[] = "/tmp/mpich_shar_tmpXXXXXX";
+ char *chosen_fname = NULL;
+
+ chosen_fname = dev_shm_fname;
+ lhnd = mkstemp(chosen_fname);
+ if(lhnd == -1){
+ chosen_fname = tmp_fname;
+ lhnd = mkstemp(chosen_fname);
+ }
+
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ rc = (MPLI_shm_lhnd_t)lseek(lhnd, seg_sz - 1, SEEK_SET);
+ do{
+ rc = (int) write(lhnd, "", 1);
+ }while((rc == -1) && (errno == EINTR));
+
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%s", chosen_fname);
+ }
+ else{
+ /* Open an existing shared memory seg */
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ lhnd = open(MPLI_shm_ghnd_get_by_ref(hnd), O_RDWR);
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ void *buf_ptr = NULL;
+ buf_ptr = mmap(NULL, seg_sz, PROT_READ | PROT_WRITE,
+ MAP_SHARED, MPLI_shm_lhnd_get(hnd), 0);
+ *shm_addr_ptr = (char*)buf_ptr;
+ }
+
+ /* FIXME: Close local handle only when closing the shm handle */
+ if(MPLI_shm_lhnd_is_valid(hnd)){
+ rc = MPLI_shm_lhnd_close(hnd);
+ }
+ return rc;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = munmap(*shm_addr_ptr, seg_sz);
+ *shm_addr_ptr = NULL;
+
+ return rc;
+}
+
+/* Remove an existing SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_remove
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ int rc = -1;
+
+ rc = unlink(MPLI_shm_ghnd_get_by_ref(hnd));
+
+ return rc;
+}
+
+#endif /* MPL_USE_MMAP_SHM */
diff --git a/src/mpi/romio/mpl/src/shm/mpl_shm_sysv.c b/src/mpi/romio/mpl/src/shm/mpl_shm_sysv.c
new file mode 100644
index 0000000..2213416
--- /dev/null
+++ b/src/mpi/romio/mpl/src/shm/mpl_shm_sysv.c
@@ -0,0 +1,154 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_SYSV_SHM
+
+#include <sys/stat.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ int rc = -1;
+ int lhnd = -1;
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ lhnd = shmget(IPC_PRIVATE, seg_sz, IPC_CREAT | S_IRWXU);
+ MPL_shm_lhnd_set(hnd, lhnd);
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%d", lhnd);
+ }
+ else{
+ /* Open an existing shared memory seg */
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ lhnd = atoi(MPLI_shm_ghnd_get_by_ref(hnd));
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ /* Attach to shared mem seg */
+ *shm_addr_ptr = shmat(MPLI_shm_lhnd_get(hnd), NULL, 0x0);
+ }
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment
+ * hnd : Handle to the shm segment
+ * shm_addr_ptr : Pointer to the shm address to detach
+ * seg_sz : Size of shm segment
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = shmdt(*shm_addr_ptr);
+ *shm_addr_ptr = NULL;
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Remove a shared memory segment
+ * hnd : Handle to the shared memory segment to be removed
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_remove
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ struct shmid_ds ds;
+ int rc = -1;
+
+ rc = shmctl(MPL_shm_lhnd_get(hnd), IPC_RMID, &ds);
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+#endif /* MPL_USE_SYSV_SHM */
diff --git a/src/mpi/romio/mpl/src/shm/mpl_shm_win.c b/src/mpi/romio/mpl/src/shm/mpl_shm_win.c
new file mode 100644
index 0000000..e41556e
--- /dev/null
+++ b/src/mpi/romio/mpl/src/shm/mpl_shm_win.c
@@ -0,0 +1,139 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_NT_SHM
+
+#include<winsock2.h>
+#include<windows.h>
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ HANDLE lhnd = INVALID_HANDLE_VALUE;
+ int rc = -1;
+ ULARGE_INTEGER seg_sz_large;
+ seg_sz_large.QuadPart = seg_sz;
+
+ if(!MPLI_shm_ghnd_is_valid(hnd)){
+ rc = MPLI_shm_ghnd_set_uniq(hnd);
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ lhnd = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
+ PAGE_READWRITE, seg_sz_large.HighPart, seg_sz_large.LowPart,
+ MPLI_shm_ghnd_get_by_ref(hnd));
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ else{
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ /* Strangely OpenFileMapping() returns NULL on error! */
+ lhnd = OpenFileMapping(FILE_MAP_WRITE, FALSE,
+ MPLI_shm_ghnd_get_by_ref(hnd));
+
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ *shm_addr_ptr = (char *)MapViewOfFile(MPLI_shm_lhnd_get(hnd),
+ FILE_MAP_WRITE, 0, offset, 0);
+ }
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_detach(
+ MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = UnmapViewOfFile(*shm_addr_ptr);
+ *shm_addr_ptr = NULL;
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#endif /* MPL_USE_NT_SHM */
diff --git a/src/mpi/romio/mpl/src/sock/.state-cache b/src/mpi/romio/mpl/src/sock/.state-cache
new file mode 100644
index 0000000..d8d0db6
--- /dev/null
+++ b/src/mpi/romio/mpl/src/sock/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="mpl_sock.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_sock.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/sock/Makefile.mk b/src/mpi/romio/mpl/src/sock/Makefile.mk
new file mode 100644
index 0000000..3e5d340
--- /dev/null
+++ b/src/mpi/romio/mpl/src/sock/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/sock/mpl_sock.c
diff --git a/src/mpl/src/mplsock.c b/src/mpi/romio/mpl/src/sock/mpl_sock.c
similarity index 100%
copy from src/mpl/src/mplsock.c
copy to src/mpi/romio/mpl/src/sock/mpl_sock.c
diff --git a/src/mpi/romio/mpl/src/str/.state-cache b/src/mpi/romio/mpl/src/str/.state-cache
new file mode 100644
index 0000000..773582d
--- /dev/null
+++ b/src/mpi/romio/mpl/src/str/.state-cache
@@ -0,0 +1,10 @@
+<dir>
+<file name="mpl_str.c" info="1478973152"/>
+<file name="mpl_argstr.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_str.c">
+</fileinfo>
+<fileinfo name="mpl_argstr.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/str/Makefile.mk b/src/mpi/romio/mpl/src/str/Makefile.mk
new file mode 100644
index 0000000..48492b1
--- /dev/null
+++ b/src/mpi/romio/mpl/src/str/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/str/mpl_str.c src/str/mpl_argstr.c
diff --git a/src/mpi/romio/mpl/src/str/mpl_argstr.c b/src/mpi/romio/mpl/src/str/mpl_argstr.c
new file mode 100644
index 0000000..96366fa
--- /dev/null
+++ b/src/mpi/romio/mpl/src/str/mpl_argstr.c
@@ -0,0 +1,880 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
+ *
+ * Copyright (C) 1997 University of Chicago.
+ * See COPYRIGHT notice in top-level directory.
+ */
+
+#include "mpl.h"
+
+#ifdef MPL_HAVE_MATH_H
+#include <math.h>
+#endif
+/* ctype is needed for isspace and isascii (isspace is only defined for
+ values on which isascii returns true). */
+#include <ctype.h>
+
+static int encode_buffer(char *dest, int dest_length, const char *src,
+ int src_length, int *num_encoded)
+{
+ int num_used;
+ int n = 0;
+ if (src_length == 0)
+ {
+ if (dest_length > 2)
+ {
+ *dest = MPL_STR_QUOTE_CHAR;
+ dest++;
+ *dest = MPL_STR_QUOTE_CHAR;
+ dest++;
+ *dest = '\0';
+ *num_encoded = 0;
+ return MPL_STR_SUCCESS;
+ }
+ else
+ {
+ return MPL_STR_TRUNCATED;
+ }
+ }
+ while (src_length && dest_length)
+ {
+ num_used = MPL_snprintf(dest, dest_length, "%02X",
+ (unsigned char)*src);
+ if (num_used < 0)
+ {
+ *num_encoded = n;
+ return MPL_STR_TRUNCATED;
+ }
+ /*MPL_DBG_MSG_FMT(STRING,VERBOSE,(MPL_DBG_FDEST," %c = %c%c",
+ ch, dest[0], dest[1]));*/
+ dest += num_used;
+ dest_length -= num_used;
+ src++;
+ n++;
+ src_length--;
+ }
+ *num_encoded = n;
+ return src_length ? MPL_STR_TRUNCATED : MPL_STR_SUCCESS;
+}
+
+static int decode_buffer(const char *str, char *dest, int length,
+ int *num_decoded)
+{
+ char hex[3];
+ int value;
+ int n = 0;
+
+ if (str == NULL || dest == NULL || num_decoded == NULL)
+ return MPL_STR_FAIL;
+ if (length < 1)
+ {
+ *num_decoded = 0;
+ if (*str == '\0')
+ return MPL_STR_SUCCESS;
+ return MPL_STR_TRUNCATED;
+ }
+ if (*str == MPL_STR_QUOTE_CHAR)
+ str++;
+ hex[2] = '\0';
+ while (*str != '\0' &&
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_QUOTE_CHAR &&
+ length)
+ {
+ hex[0] = *str;
+ str++;
+ hex[1] = *str;
+ str++;
+ sscanf(hex, "%X", &value);
+ *dest = (char)value;
+ /*MPL_DBG_MSG_FMT(STRING,VERBOSE,(MPL_DBG_FDEST," %s = %c",
+ hex, *dest));*/
+ dest++;
+ n++;
+ length--;
+ }
+ *num_decoded = n;
+ if (length == 0)
+ {
+ if (*str != '\0' &&
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_QUOTE_CHAR)
+ return MPL_STR_TRUNCATED;
+ }
+ return MPL_STR_SUCCESS;
+}
+
+static const char * first_token(const char *str)
+{
+ if (str == NULL)
+ return NULL;
+ /* isspace is defined only if isascii is true */
+ while (/*isascii(*str) && isspace(*str)*/ *str == MPL_STR_SEPAR_CHAR)
+ str++;
+ if (*str == '\0')
+ return NULL;
+ return str;
+}
+
+static const char * next_token(const char *str)
+{
+ if (str == NULL)
+ return NULL;
+ str = first_token(str);
+ if (str == NULL)
+ return NULL;
+ if (*str == MPL_STR_QUOTE_CHAR)
+ {
+ /* move over string */
+ str++; /* move over the first quote */
+ if (*str == '\0')
+ return NULL;
+ while (*str != MPL_STR_QUOTE_CHAR)
+ {
+ /* move until the last quote, ignoring escaped quotes */
+ if (*str == MPL_STR_ESCAPE_CHAR)
+ {
+ str++;
+ if (*str == MPL_STR_QUOTE_CHAR)
+ str++;
+ }
+ else
+ {
+ str++;
+ }
+ if (*str == '\0')
+ return NULL;
+ }
+ str++; /* move over the last quote */
+ }
+ else
+ {
+ if (*str == MPL_STR_DELIM_CHAR)
+ {
+ /* move over the DELIM token */
+ str++;
+ }
+ else
+ {
+ /* move over literal */
+ while (/*(isascii(*str) &&
+ !isspace(*str)) &&*/
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_DELIM_CHAR &&
+ *str != '\0')
+ str++;
+ }
+ }
+ return first_token(str);
+}
+
+static int compare_token(const char *token, const char *str)
+{
+ if (token == NULL || str == NULL)
+ return -1;
+
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ /* compare quoted strings */
+ token++; /* move over the first quote */
+ /* compare characters until reaching the end of the string or the
+ end quote character */
+ for(;;)
+ {
+ if (*token == MPL_STR_ESCAPE_CHAR)
+ {
+ if (*(token+1) == MPL_STR_QUOTE_CHAR)
+ {
+ /* move over the escape character if the next character
+ is a quote character */
+ token++;
+ }
+ if (*token != *str)
+ break;
+ }
+ else
+ {
+ if (*token != *str || *token == MPL_STR_QUOTE_CHAR)
+ break;
+ }
+ if (*str == '\0')
+ break;
+ token++;
+ str++;
+ }
+ if (*str == '\0' && *token == MPL_STR_QUOTE_CHAR)
+ return 0;
+ if (*token == MPL_STR_QUOTE_CHAR)
+ return 1;
+ if (*str < *token)
+ return -1;
+ return 1;
+ }
+
+ /* compare DELIM token */
+ if (*token == MPL_STR_DELIM_CHAR)
+ {
+ if (*str == MPL_STR_DELIM_CHAR)
+ {
+ str++;
+ if (*str == '\0')
+ return 0;
+ return 1;
+ }
+ if (*token < *str)
+ return -1;
+ return 1;
+ }
+
+ /* compare literals */
+ while (*token == *str &&
+ *str != '\0' &&
+ *token != MPL_STR_DELIM_CHAR &&
+ (*token != MPL_STR_SEPAR_CHAR) )
+ {
+ token++;
+ str++;
+ }
+ if ( (*str == '\0') &&
+ (*token == MPL_STR_DELIM_CHAR ||
+ (*token == MPL_STR_SEPAR_CHAR) || *token == '\0') )
+ return 0;
+ if (*token == MPL_STR_DELIM_CHAR ||
+ (*token == MPL_STR_SEPAR_CHAR) || *token < *str)
+ return -1;
+ return 1;
+}
+
+
+static int token_copy(const char *token, char *str, int maxlen)
+{
+ /* check parameters */
+ if (token == NULL || str == NULL)
+ return MPL_STR_FAIL;
+
+ /* check special buffer lengths */
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+ if (maxlen == 1)
+ {
+ *str = '\0';
+ return (str[0] == '\0') ? MPL_STR_SUCCESS : MPL_STR_TRUNCATED;
+ }
+
+ /* cosy up to the token */
+ token = first_token(token);
+ if (token == NULL)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+
+ if (*token == MPL_STR_DELIM_CHAR)
+ {
+ /* copy the special deliminator token */
+ str[0] = MPL_STR_DELIM_CHAR;
+ str[1] = '\0';
+ return MPL_STR_SUCCESS;
+ }
+
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ /* quoted copy */
+ token++; /* move over the first quote */
+ do
+ {
+ if (*token == MPL_STR_ESCAPE_CHAR)
+ {
+ if (*(token+1) == MPL_STR_QUOTE_CHAR)
+ token++;
+ *str = *token;
+ }
+ else
+ {
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+ *str = *token;
+ }
+ str++;
+ token++;
+ maxlen--;
+ } while (maxlen);
+ /* we've run out of destination characters so back up and null
+ terminate the string */
+ str--;
+ *str = '\0';
+ return MPL_STR_TRUNCATED;
+ }
+
+ /* literal copy */
+ while (*token != MPL_STR_DELIM_CHAR &&
+ (*token != MPL_STR_SEPAR_CHAR) && *token != '\0' && maxlen)
+ {
+ *str = *token;
+ str++;
+ token++;
+ maxlen--;
+ }
+ if (maxlen)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+ str--;
+ *str = '\0';
+ return MPL_STR_TRUNCATED;
+}
+
+/*@ MPL_str_get_string_arg - Extract an option from a string with a
+ maximum length
+
+Input Parameters:
++ str - Source string
+. key - key
+- maxlen - Maximum total length of 'val'
+
+Output Parameters:
+. val - output string
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_string_arg(const char *str, const char *flag, char *val,
+ int maxlen)
+{
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+
+ /* line up with the first token */
+ str = first_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+
+ /* This loop will match the first instance of "flag = value" in the string. */
+ do
+ {
+ if (compare_token(str, flag) == 0)
+ {
+ str = next_token(str);
+ if (compare_token(str, MPL_STR_DELIM_STR) == 0)
+ {
+ str = next_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+ return token_copy(str, val, maxlen);
+ }
+ }
+ else
+ {
+ str = next_token(str);
+ }
+ } while (str);
+ return MPL_STR_FAIL;
+}
+
+/*@ MPL_str_get_binary_arg - Extract an option from a string with a maximum
+ length
+
+Input Parameters:
++ str - Source string
+. key - key
+- maxlen - Maximum total length of 'buffer'
+
+Output Parameters:
++ buffer - output buffer
+- out_length - output length
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string and decodes
+ the value
+ back to binary data. The data must have been encoded with
+ MPL_str_add_binary_arg.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_binary_arg(const char *str, const char *flag, char *buffer,
+ int maxlen, int *out_length)
+{
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+
+ /* line up with the first token */
+ str = first_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+
+ /* This loop will match the first instance of "flag = value" in the string. */
+ do
+ {
+ if (compare_token(str, flag) == 0)
+ {
+ str = next_token(str);
+ if (compare_token(str, MPL_STR_DELIM_STR) == 0)
+ {
+ str = next_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+ return decode_buffer(str, buffer, maxlen, out_length);
+ }
+ }
+ else
+ {
+ str = next_token(str);
+ }
+ } while (str);
+ return MPL_STR_FAIL;
+}
+
+/*@ MPL_str_get_int_arg - Extract an option from a string
+
+Input Parameters:
++ str - Source string
+- key - key
+
+Output Parameters:
+. val_ptr - pointer to the output integer
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string and decodes the value
+ back to an int.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_int_arg(const char *str, const char *flag, int *val_ptr)
+{
+ int result;
+ char int_str[12];
+
+ result = MPL_str_get_string_arg(str, flag, int_str, 12);
+ if (result == MPL_STR_SUCCESS)
+ {
+ *val_ptr = atoi(int_str);
+ return MPL_STR_SUCCESS;
+ }
+ return result;
+}
+
+/* quoted_printf does not NULL terminate the string if maxlen is reached */
+static int quoted_printf(char *str, int maxlen, const char *val)
+{
+ int count = 0;
+ if (maxlen < 1)
+ return 0;
+ *str = MPL_STR_QUOTE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ while (maxlen)
+ {
+ if (*val == '\0')
+ break;
+ if (*val == MPL_STR_QUOTE_CHAR)
+ {
+ *str = MPL_STR_ESCAPE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ if (maxlen == 0)
+ return count;
+ }
+ *str = *val;
+ str++;
+ maxlen--;
+ count++;
+ val++;
+ }
+ if (maxlen)
+ {
+ *str = MPL_STR_QUOTE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ if (maxlen == 0)
+ return count;
+ *str = '\0';
+ }
+ return count;
+}
+
+/*@ MPL_str_add_string - Add a string to a string
+
+Input Parameters:
++ str_ptr - pointer to the destination string
+. maxlen_ptr - pointer to the maximum length of '*str_ptr'
+- val - string to add
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is decremented by the amount str_ptr is incremented
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds a string to a string in such a way that
+ MPL_str_get_string can
+ retreive the same string back. It takes into account spaces and quote
+ characters.
+ The string pointer is updated to the start of the next string in the
+ string and maxlen is updated accordingly.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_string(char **str_ptr, int *maxlen_ptr, const char *val)
+{
+ int num_chars;
+ char *str;
+ int maxlen;
+
+ str = *str_ptr;
+ maxlen = *maxlen_ptr;
+
+ if (strchr(val, MPL_STR_SEPAR_CHAR) ||
+ strchr(val, MPL_STR_QUOTE_CHAR) ||
+ strchr(val, MPL_STR_DELIM_CHAR))
+ {
+ num_chars = quoted_printf(str, maxlen, val);
+ if (num_chars == maxlen)
+ {
+ /* truncation, cleanup string */
+ *str = '\0';
+ return -1;
+ }
+ if (num_chars < maxlen - 1)
+ {
+ str[num_chars] = MPL_STR_SEPAR_CHAR;
+ str[num_chars+1] = '\0';
+ num_chars++;
+ }
+ else
+ {
+ str[num_chars] = '\0';
+ }
+ }
+ else
+ {
+ if (*val == '\0')
+ {
+ num_chars = MPL_snprintf(str, maxlen,
+ MPL_STR_QUOTE_STR MPL_STR_QUOTE_STR/*"\"\""*/);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(str, maxlen, "%s%c", val,
+ MPL_STR_SEPAR_CHAR);
+ }
+ if (num_chars == maxlen)
+ {
+ *str = '\0';
+ return -1;
+ }
+ }
+ *str_ptr += num_chars;
+ *maxlen_ptr -= num_chars;
+ return 0;
+}
+
+/*@ MPL_str_get_string - Get the next string from a string
+
+Input Parameters:
++ str_ptr - pointer to the destination string
+- maxlen_ptr - pointer to the maximum length of '*str_ptr'
+
+Output Parameters:
++ str_ptr - location of the next string
+- val - location to store the string
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Return Value:
+ The return value is 0 for success, -1 for insufficient buffer space, and
+ 1 for failure.
+
+ Notes:
+ This routine gets a string that was previously added by
+ MPL_str_add_string.
+ It takes into account spaces and quote characters. The string pointer is
+ updated to the start of the next string in the string.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_string(char **str_ptr, char *val, int maxlen)
+{
+ int result;
+ char *str;
+
+ if (str_ptr == NULL)
+ {
+ return -2;
+ }
+
+ str = *str_ptr;
+
+ if (maxlen < 1)
+ {
+ return 0;
+ }
+
+ /* line up with the first token */
+ str = (char*)first_token(str);
+ if (str == NULL)
+ {
+ return 0;
+ }
+
+ /* copy the token */
+ result = token_copy(str, val, maxlen);
+ if (result == MPL_STR_SUCCESS)
+ {
+ str = (char*)next_token(str);
+ *str_ptr = str;
+ return 0;
+ }
+ else if (result == MPL_STR_TRUNCATED)
+ {
+ return -1;
+ }
+
+ /* failure */
+ return -2;
+}
+
+/*@ MPL_str_add_string_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+- val - input string
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds a string option to a string in the form "key = value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ const char *val)
+{
+ int num_chars;
+ char **orig_str_ptr;
+
+ if (maxlen_ptr == NULL)
+ return MPL_STR_FAIL;
+
+ orig_str_ptr = str_ptr;
+
+ if (*maxlen_ptr < 1)
+ return MPL_STR_FAIL;
+
+ /* add the flag */
+ if (strstr(flag, MPL_STR_SEPAR_STR) || strstr(flag, MPL_STR_DELIM_STR) ||
+ flag[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
+ }
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 1)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+ *str_ptr = *str_ptr + num_chars;
+
+ /* add the deliminator character */
+ **str_ptr = MPL_STR_DELIM_CHAR;
+ *str_ptr = *str_ptr + 1;
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ /* add the value string */
+ if (strstr(val, MPL_STR_SEPAR_STR) || strstr(val, MPL_STR_DELIM_STR) ||
+ val[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, val);
+ }
+ else
+ {
+ if (*val == '\0')
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr,
+ MPL_STR_QUOTE_STR MPL_STR_QUOTE_STR/*"\"\""*/);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", val);
+ }
+ }
+ *str_ptr = *str_ptr + num_chars;
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 2)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **orig_str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+
+ /* add the trailing space */
+ **str_ptr = MPL_STR_SEPAR_CHAR;
+ *str_ptr = *str_ptr + 1;
+ **str_ptr = '\0';
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ return MPL_STR_SUCCESS;
+}
+
+/*@ MPL_str_add_int_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+- val - input integer
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds an integer option to a string in the form "key = value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ int val)
+{
+ char val_str[12];
+ MPL_snprintf(val_str, 12, "%d", val);
+ return MPL_str_add_string_arg(str_ptr, maxlen_ptr, flag, val_str);
+}
+
+/*@ MPL_str_add_binary_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+. val - input data
+- length - length of the input data
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine encodes binary data into a string option in the form
+ "key = encoded_value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ const char *buffer, int length)
+{
+ int result;
+ int num_chars;
+ char **orig_str_ptr;
+
+ if (maxlen_ptr == NULL)
+ return MPL_STR_FAIL;
+
+ orig_str_ptr = str_ptr;
+
+ if (*maxlen_ptr < 1)
+ return MPL_STR_FAIL;
+
+ /* add the flag */
+ if (strstr(flag, MPL_STR_SEPAR_STR) || strstr(flag, MPL_STR_DELIM_STR) ||
+ flag[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
+ }
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 1)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+ *str_ptr = *str_ptr + num_chars;
+
+ /* add the deliminator character */
+ **str_ptr = MPL_STR_DELIM_CHAR;
+ *str_ptr = *str_ptr + 1;
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ /* add the value string */
+ result = encode_buffer(*str_ptr, *maxlen_ptr, buffer, length, &num_chars);
+ if (result != MPL_STR_SUCCESS)
+ {
+ **orig_str_ptr = '\0';
+ return result;
+ }
+ num_chars = num_chars * 2; /* the encoding function turns one source
+ character into two destination characters */
+ *str_ptr = *str_ptr + num_chars;
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 2)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **orig_str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+
+ /* add the trailing space */
+ **str_ptr = MPL_STR_SEPAR_CHAR;
+ *str_ptr = *str_ptr + 1;
+ **str_ptr = '\0';
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ return MPL_STR_SUCCESS;
+}
diff --git a/src/mpi/romio/mpl/src/str/mpl_str.c b/src/mpi/romio/mpl/src/str/mpl_str.c
new file mode 100644
index 0000000..0595b95
--- /dev/null
+++ b/src/mpi/romio/mpl/src/str/mpl_str.c
@@ -0,0 +1,366 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+#if !defined MPL_HAVE_SNPRINTF
+int MPL_snprintf(char *str, size_t size, mpl_const char *format, ...)
+{
+ int n;
+ mpl_const char *p;
+ char *out_str = str;
+ va_list list;
+
+ va_start(list, format);
+
+ p = format;
+ while (*p && size > 0) {
+ char *nf;
+
+ nf = strchr(p, '%');
+ if (!nf) {
+ /* No more format characters */
+ while (size-- > 0 && *p) {
+ *out_str++ = *p++;
+ }
+ }
+ else {
+ int nc;
+ int width = -1;
+
+ /* Copy until nf */
+ while (p < nf && size-- > 0) {
+ *out_str++ = *p++;
+ }
+ /* p now points at nf */
+ /* Handle the format character */
+ nc = nf[1];
+ if (isdigit(nc)) {
+ /* Get the field width */
+ /* FIXME : Assumes ASCII */
+ width = nc - '0';
+ p = nf + 2;
+ while (*p && isdigit(*p)) {
+ width = 10 * width + (*p++ - '0');
+ }
+ /* When there is no longer a digit, get the format
+ * character */
+ nc = *p++;
+ }
+ else {
+ /* Skip over the format string */
+ p += 2;
+ }
+
+ switch (nc) {
+ case '%':
+ *out_str++ = '%';
+ size--;
+ break;
+
+ case 'd':
+ {
+ int val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of integer type */
+ val = va_arg(list, int);
+ sprintf(tmp, "%d", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 'x':
+ {
+ int val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of integer type */
+ val = va_arg(list, int);
+ sprintf(tmp, "%x", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 'p':
+ {
+ void *val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of pointer type */
+ val = va_arg(list, void *);
+ sprintf(tmp, "%p", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 's':
+ {
+ char *s_arg;
+ /* Get the argument, of pointer to char type */
+ s_arg = va_arg(list, char *);
+ while (size-- > 0 && s_arg && *s_arg) {
+ *out_str++ = *s_arg++;
+ }
+ }
+ break;
+
+ default:
+ /* Error, unknown case */
+ return -1;
+ break;
+ }
+ }
+ }
+
+ va_end(list);
+
+ if (size-- > 0)
+ *out_str++ = '\0';
+
+ n = (int) (out_str - str);
+ return n;
+}
+#endif /* MPL_HAVE_SNPRINTF */
+
+/*@
+ MPL_strdup - Duplicate a string
+
+ Synopsis:
+.vb
+ char *MPL_strdup(mpl_const char *str)
+.ve
+
+Input Parameters:
+. str - null-terminated string to duplicate
+
+ Return value:
+ A pointer to a copy of the string, including the terminating null. A
+ null pointer is returned on error, such as out-of-memory.
+
+ Module:
+ Utility
+ @*/
+#if !defined MPL_HAVE_STRDUP
+char *MPL_strdup(mpl_const char *str)
+{
+ char *mpl_restrict p = (char *) malloc(strlen(str) + 1);
+ mpl_const char *mpl_restrict in_p = str;
+ char *save_p;
+
+ save_p = p;
+ if (p) {
+ while (*in_p) {
+ *p++ = *in_p++;
+ }
+ *p = 0;
+ }
+ return save_p;
+}
+#endif /* MPL_HAVE_STRDUP */
+
+/*
+ * MPL_strncpy - Copy at most n characters. Stop once a null is reached.
+ *
+ * This is different from strncpy, which null pads so that exactly
+ * n characters are copied. The strncpy behavior is correct for many
+ * applications because it guarantees that the string has no uninitialized
+ * data.
+ *
+ * If n characters are copied without reaching a null, return an error.
+ * Otherwise, return 0.
+ *
+ * Question: should we provide a way to request the length of the string,
+ * since we know it?
+ */
+/*@ MPL_strncpy - Copy a string with a maximum length
+
+Input Parameters:
++ instr - String to copy
+- maxlen - Maximum total length of 'outstr'
+
+Output Parameters:
+. outstr - String to copy into
+
+ Notes:
+ This routine is the routine that you wish 'strncpy' was. In copying
+ 'instr' to 'outstr', it stops when either the end of 'outstr' (the
+ null character) is seen or the maximum length 'maxlen' is reached.
+ Unlike 'strncpy', it does not add enough nulls to 'outstr' after
+ copying 'instr' in order to move precisely 'maxlen' characters.
+ Thus, this routine may be used anywhere 'strcpy' is used, without any
+ performance cost related to large values of 'maxlen'.
+
+ If there is insufficient space in the destination, the destination is
+ still null-terminated, to avoid potential failures in routines that neglect
+ to check the error code return from this routine.
+
+ Module:
+ Utility
+ @*/
+int MPL_strncpy(char *dest, const char *src, size_t n)
+{
+ char *mpl_restrict d_ptr = dest;
+ const char *mpl_restrict s_ptr = src;
+ register int i;
+
+ if (n == 0)
+ return 0;
+
+ i = (int) n;
+ while (*s_ptr && i-- > 0) {
+ *d_ptr++ = *s_ptr++;
+ }
+
+ if (i > 0) {
+ *d_ptr = 0;
+ return 0;
+ }
+ else {
+ /* Force a null at the end of the string (gives better safety
+ * in case the user fails to check the error code) */
+ dest[n - 1] = 0;
+ /* We may want to force an error message here, at least in the
+ * debugging version */
+ /*printf("failure in copying %s with length %d\n", src, n); */
+ return 1;
+ }
+}
+
+/* replacement for strsep. Conforms to the following description (from the OS X
+ * 10.6 man page):
+ *
+ * The strsep() function locates, in the string referenced by *stringp, the first occur-
+ * rence of any character in the string delim (or the terminating `\0' character) and
+ * replaces it with a `\0'. The location of the next character after the delimiter
+ * character (or NULL, if the end of the string was reached) is stored in *stringp. The
+ * original value of *stringp is returned.
+ *
+ * An ``empty'' field (i.e., a character in the string delim occurs as the first charac-
+ * ter of *stringp) can be detected by comparing the location referenced by the returned
+ * pointer to `\0'.
+ *
+ * If *stringp is initially NULL, strsep() returns NULL.
+ */
+char *MPL_strsep(char **stringp, const char *delim)
+{
+ int i, j;
+ char *ret;
+
+ if (!*stringp)
+ return NULL;
+
+ ret = *stringp;
+ i = 0;
+ while (1) {
+ if (!ret[i]) {
+ *stringp = NULL;
+ return ret;
+ }
+ for (j = 0; delim[j] != '\0'; ++j) {
+ if (ret[i] == delim[j]) {
+ ret[i] = '\0';
+ *stringp = &ret[i+1];
+ return ret;
+ }
+ }
+ ++i;
+ }
+}
+
+
+/* there's no standard portable way to convert error codes to human readable
+ * strings. The standard way to do that is via strerror() but if for some
+ * resason we don't have it, then we'll merely output the error code seen */
+#if !defined MPL_HAVE_STRERROR
+char *MPL_strerror(int errnum)
+{
+#define STRERROR_SIZE 256
+ static char msgbuf[STRERROR_SIZE];
+ snprintf(msgbuf, STRERROR_SIZE, "errno = %d", errnum);
+#undef STRERROR_SIZE
+ return msgbuf;
+}
+#endif /* MPL_HAVE_STRERROR */
+
+/*@ MPL_strnapp - Append to a string with a maximum length
+
+Input Parameters:
++ instr - String to copy
+- maxlen - Maximum total length of 'outstr'
+
+Output Parameters:
+. outstr - String to copy into
+
+ Notes:
+ This routine is similar to 'strncat' except that the 'maxlen' argument
+ is the maximum total length of 'outstr', rather than the maximum
+ number of characters to move from 'instr'. Thus, this routine is
+ easier to use when the declared size of 'instr' is known.
+
+ Module:
+ Utility
+ @*/
+int MPL_strnapp(char *dest, const char *src, size_t n)
+{
+ char *mpl_restrict d_ptr = dest;
+ const char *mpl_restrict s_ptr = src;
+ register int i;
+
+ /* Get to the end of dest */
+ i = (int) n;
+ while (i-- > 0 && *d_ptr)
+ d_ptr++;
+ if (i <= 0)
+ return 1;
+
+ /* Append. d_ptr points at first null and i is remaining space. */
+ while (*s_ptr && i-- > 0) {
+ *d_ptr++ = *s_ptr++;
+ }
+
+ /* We allow i >= (not just >) here because the first while decrements
+ * i by one more than there are characters, leaving room for the null */
+ if (i >= 0) {
+ *d_ptr = 0;
+ return 0;
+ }
+ else {
+ /* Force the null at the end */
+ *--d_ptr = 0;
+
+ /* We may want to force an error message here, at least in the
+ * debugging version */
+ return 1;
+ }
+}
diff --git a/src/mpi/romio/mpl/src/thread/.state-cache b/src/mpi/romio/mpl/src/thread/.state-cache
new file mode 100644
index 0000000..dad471f
--- /dev/null
+++ b/src/mpi/romio/mpl/src/thread/.state-cache
@@ -0,0 +1,16 @@
+<dir>
+<file name="mpl_thread.c" info="1478973152"/>
+<file name="mpl_thread_posix.c" info="1478973152"/>
+<file name="mpl_thread_solaris.c" info="1478973152"/>
+<file name="mpl_thread_win.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_thread.c">
+</fileinfo>
+<fileinfo name="mpl_thread_posix.c">
+</fileinfo>
+<fileinfo name="mpl_thread_solaris.c">
+</fileinfo>
+<fileinfo name="mpl_thread_win.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/thread/Makefile.mk b/src/mpi/romio/mpl/src/thread/Makefile.mk
new file mode 100644
index 0000000..1861200
--- /dev/null
+++ b/src/mpi/romio/mpl/src/thread/Makefile.mk
@@ -0,0 +1,12 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/thread/mpl_thread.c \
+ src/thread/mpl_thread_win.c \
+ src/thread/mpl_thread_solaris.c \
+ src/thread/mpl_thread_posix.c
diff --git a/src/mpi/romio/mpl/src/thread/mpl_thread.c b/src/mpi/romio/mpl/src/thread/mpl_thread.c
new file mode 100644
index 0000000..f1e95b5
--- /dev/null
+++ b/src/mpi/romio/mpl/src/thread/mpl_thread.c
@@ -0,0 +1,22 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2002 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE) && !defined(MPL_TLS_SPECIFIER)
+
+/* This routine is called when a thread exits; it is passed the value
+ * associated with the key. In our case, this is simply storage
+ * allocated with MPL_calloc */
+void MPLI_cleanup_tls(void *a)
+{
+ if (a)
+ MPL_free(a);
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/thread/mpl_thread_posix.c b/src/mpi/romio/mpl/src/thread/mpl_thread_posix.c
new file mode 100644
index 0000000..89efc25
--- /dev/null
+++ b/src/mpi/romio/mpl/src/thread/mpl_thread_posix.c
@@ -0,0 +1,92 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_POSIX
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate
+ * function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+void *MPLI_thread_start(void *arg);
+
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ /* FIXME: faster allocation, or avoid it all together? */
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ pthread_attr_t attr;
+
+ thread_info->func = func;
+ thread_info->data = data;
+
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+ err = pthread_create(idp, &attr, MPLI_thread_start, thread_info);
+ /* FIXME: convert error to an MPL_THREAD_ERR value */
+
+ pthread_attr_destroy(&attr);
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in pthreads are expected to return a void pointer. Since
+ * our start functions do not return a value we must
+ * use an intermediate function to perform call to the user's start function
+ * and then return a value of NULL.
+ */
+void *MPLI_thread_start(void *arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return NULL;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/thread/mpl_thread_solaris.c b/src/mpi/romio/mpl/src/thread/mpl_thread_solaris.c
new file mode 100644
index 0000000..15aaec0
--- /dev/null
+++ b/src/mpi/romio/mpl/src/thread/mpl_thread_solaris.c
@@ -0,0 +1,83 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_SOLARIS
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+void *MPLI_thread_start(void *arg);
+
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ /* FIXME: faster allocation, or avoid it all together? */
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ thread_info->func = func;
+ thread_info->data = data;
+
+ err = thr_create(NULL, 0, MPLI_thread_start, thread_info, THR_DETACHED, idp);
+ /* FIXME: convert error to an MPL_THREAD_ERR value */
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in Solaris threads are expected to return a void pointer. Since our start functions do not return a value we
+ * must use an intermediate function to perform call to the user's start function and then return a value of NULL.
+ */
+void *MPLI_thread_start(void *arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return NULL;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/thread/mpl_thread_win.c b/src/mpi/romio/mpl/src/thread/mpl_thread_win.c
new file mode 100644
index 0000000..d501654
--- /dev/null
+++ b/src/mpi/romio/mpl/src/thread/mpl_thread_win.c
@@ -0,0 +1,352 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_WIN
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+DWORD WINAPI MPLI_thread_start(LPVOID arg);
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ thread_info->func = func;
+ thread_info->data = data;
+ *idp = CreateThread(NULL, 0, MPLI_thread_start, thread_info, 0, NULL);
+ if (*idp == NULL) {
+ err = GetLastError();
+ }
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in Windows are expected to return a DWORD. Since our start functions do not return a value we must
+ * use an intermediate function to perform the call to the user's start function and then return a value of 0.
+ */
+DWORD WINAPI MPLI_thread_start(LPVOID arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return 0;
+}
+
+void MPL_thread_exit()
+{
+ ExitThread(0);
+}
+
+void MPL_thread_self(MPL_thread_id_t * id)
+{
+ *id = GetCurrentThread();
+}
+
+void MPL_thread_same(MPL_thread_id_t * id1, MPL_thread_id_t * id2, int *same)
+{
+ *same = (*id1 == *id2) ? TRUE : FALSE;
+}
+
+void MPL_thread_yield(void)
+{
+ Sleep(0);
+}
+
+/*
+ * Mutexes
+ */
+
+void MPL_thread_mutex_create(MPL_thread_mutex_t * mutex, int *err)
+{
+ *mutex = CreateMutex(NULL, FALSE, NULL);
+ if (err != NULL) {
+ if (*mutex == NULL) {
+ *err = GetLastError();
+ }
+ else {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ }
+}
+
+void MPL_thread_mutex_destroy(MPL_thread_mutex_t * mutex, int *err)
+{
+ BOOL result;
+
+ result = CloseHandle(*mutex);
+ if (err != NULL) {
+ if (result) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ *err = GetLastError();
+ }
+ }
+}
+
+void MPL_thread_mutex_lock(MPL_thread_mutex_t * mutex, int *err)
+{
+ DWORD result;
+
+ result = WaitForSingleObject(*mutex, INFINITE);
+ if (err != NULL) {
+ if (result == WAIT_OBJECT_0) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ if (result == WAIT_FAILED) {
+ *err = GetLastError();
+ }
+ else {
+ *err = result;
+ }
+ }
+ }
+}
+
+void MPL_thread_mutex_unlock(MPL_thread_mutex_t * mutex, int *err)
+{
+ BOOL result;
+
+ result = ReleaseMutex(*mutex);
+ if (err != NULL) {
+ if (result) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ *err = GetLastError();
+ }
+ }
+}
+
+
+/*
+ * Condition Variables
+ */
+
+void MPL_thread_cond_create(MPL_thread_cond_t * cond, int *err)
+{
+ /* Create a tls slot to store the events used to wakeup each thread in cond_bcast or cond_signal */
+ MPL_thread_tls_create(NULL, &cond->tls, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* Create a mutex to protect the fifo queue. This is required because the mutex passed in to the
+ * cond functions need not be the same in each thread. */
+ MPL_thread_mutex_create(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ cond->fifo_head = NULL;
+ cond->fifo_tail = NULL;
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+void MPL_thread_cond_destroy(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *iter;
+
+ while (cond->fifo_head) {
+ iter = cond->fifo_head;
+ cond->fifo_head = cond->fifo_head->next;
+ MPL_free(iter);
+ }
+ MPL_thread_mutex_destroy(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ MPL_thread_tls_destroy(&cond->tls, err);
+ /*
+ * if (err != NULL)
+ * {
+ * *err = MPL_THREAD_SUCCESS;
+ * }
+ */
+}
+
+void MPL_thread_cond_wait(MPL_thread_cond_t * cond, MPL_thread_mutex_t * mutex, int *err)
+{
+ HANDLE event;
+ DWORD result;
+ MPL_thread_tls_get(&cond->tls, &event, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (event == NULL) {
+ event = CreateEvent(NULL, TRUE, FALSE, NULL);
+ if (event == NULL) {
+ if (err != NULL) {
+ *err = GetLastError();
+ }
+ return;
+ }
+ MPL_thread_tls_set(&cond->tls, event, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ }
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (cond->fifo_tail == NULL) {
+ cond->fifo_tail = (MPLI_win_thread_cond_fifo_t *) MPL_malloc(sizeof(MPLI_win_thread_cond_fifo_t));
+ cond->fifo_head = cond->fifo_tail;
+ }
+ else {
+ cond->fifo_tail->next =
+ (MPLI_win_thread_cond_fifo_t *) MPL_malloc(sizeof(MPLI_win_thread_cond_fifo_t));
+ cond->fifo_tail = cond->fifo_tail->next;
+ }
+ if (cond->fifo_tail == NULL) {
+ if (err != NULL) {
+ *err = -1;
+ }
+ return;
+ }
+ cond->fifo_tail->event = event;
+ cond->fifo_tail->next = NULL;
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ MPL_thread_mutex_unlock(mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ result = WaitForSingleObject(event, INFINITE);
+ if (err != NULL) {
+ if (result != WAIT_OBJECT_0) {
+ if (result == WAIT_FAILED) {
+ *err = GetLastError();
+ }
+ else {
+ *err = result;
+ }
+ return;
+ }
+ }
+ result = ResetEvent(event);
+ if (!result && err != NULL) {
+ *err = GetLastError();
+ return;
+ }
+ MPL_thread_mutex_lock(mutex, err);
+ /*
+ * if (err != NULL)
+ * {
+ * *err = MPL_THREAD_SUCCESS;
+ * }
+ */
+}
+
+void MPL_thread_cond_broadcast(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *fifo, *temp;
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* remove the fifo queue from the cond variable */
+ fifo = cond->fifo_head;
+ cond->fifo_head = cond->fifo_tail = NULL;
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* signal each event in the fifo queue */
+ while (fifo) {
+ if (!SetEvent(fifo->event) && err != NULL) {
+ *err = GetLastError();
+ /* lost memory */
+ return;
+ }
+ temp = fifo;
+ fifo = fifo->next;
+ MPL_free(temp);
+ }
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+void MPL_thread_cond_signal(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *fifo;
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ fifo = cond->fifo_head;
+ if (fifo) {
+ cond->fifo_head = cond->fifo_head->next;
+ if (cond->fifo_head == NULL)
+ cond->fifo_tail = NULL;
+ }
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (fifo) {
+ if (!SetEvent(fifo->event) && err != NULL) {
+ *err = GetLastError();
+ MPL_free(fifo);
+ return;
+ }
+ MPL_free(fifo);
+ }
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/.state-cache b/src/mpi/romio/mpl/src/timer/.state-cache
new file mode 100644
index 0000000..b07c9e4
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/.state-cache
@@ -0,0 +1,34 @@
+<dir>
+<file name="mpl_timer_mach_absolute_time.c" info="1478973152"/>
+<file name="mpl_timer_linux86_cycle.c" info="1478973152"/>
+<file name="mpl_timer_gcc_ia64_cycle.c" info="1478973152"/>
+<file name="mpl_timer_device.c" info="1478973152"/>
+<file name="mpl_timer_ppc64_cycle.c" info="1478973152"/>
+<file name="mpl_timer_clock_gettime.c" info="1478973152"/>
+<file name="mpl_timer_gettimeofday.c" info="1478973152"/>
+<file name="mpl_timer_win86_cycle.c" info="1478973152"/>
+<file name="mpl_timer_query_performance_counter.c" info="1478973152"/>
+<file name="mpl_timer_gethrtime.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpl_timer_mach_absolute_time.c">
+</fileinfo>
+<fileinfo name="mpl_timer_linux86_cycle.c">
+</fileinfo>
+<fileinfo name="mpl_timer_gcc_ia64_cycle.c">
+</fileinfo>
+<fileinfo name="mpl_timer_device.c">
+</fileinfo>
+<fileinfo name="mpl_timer_ppc64_cycle.c">
+</fileinfo>
+<fileinfo name="mpl_timer_clock_gettime.c">
+</fileinfo>
+<fileinfo name="mpl_timer_gettimeofday.c">
+</fileinfo>
+<fileinfo name="mpl_timer_win86_cycle.c">
+</fileinfo>
+<fileinfo name="mpl_timer_query_performance_counter.c">
+</fileinfo>
+<fileinfo name="mpl_timer_gethrtime.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/src/timer/Makefile.mk b/src/mpi/romio/mpl/src/timer/Makefile.mk
new file mode 100644
index 0000000..b2495fb
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/Makefile.mk
@@ -0,0 +1,18 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/timer/mpl_timer_clock_gettime.c \
+ src/timer/mpl_timer_gcc_ia64_cycle.c \
+ src/timer/mpl_timer_gethrtime.c \
+ src/timer/mpl_timer_gettimeofday.c \
+ src/timer/mpl_timer_linux86_cycle.c \
+ src/timer/mpl_timer_ppc64_cycle.c \
+ src/timer/mpl_timer_mach_absolute_time.c \
+ src/timer/mpl_timer_query_performance_counter.c \
+ src/timer/mpl_timer_win86_cycle.c \
+ src/timer/mpl_timer_device.c
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_clock_gettime.c b/src/mpi/romio/mpl/src/timer/mpl_timer_clock_gettime.c
new file mode 100644
index 0000000..6c081fa
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_clock_gettime.c
@@ -0,0 +1,76 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__CLOCK_GETTIME
+
+int MPL_wtime(MPL_time_t * timeval)
+{
+ /* POSIX timer (14.2.1, page 311) */
+ clock_gettime(CLOCK_REALTIME, timeval);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = ((double) (t2->tv_sec - t1->tv_sec) + 1.0e-9 * (double) (t2->tv_nsec - t1->tv_nsec));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = ((double) t->tv_sec + 1.0e-9 * (double) t->tv_nsec);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ long nsec, sec;
+
+ nsec = t2->tv_nsec - t1->tv_nsec;
+ sec = t2->tv_sec - t1->tv_sec;
+
+ t3->tv_sec += sec;
+ t3->tv_nsec += nsec;
+ while (t3->tv_nsec > 1000000000) {
+ t3->tv_nsec -= 1000000000;
+ t3->tv_sec++;
+ }
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ struct timespec res;
+ int rc;
+
+ rc = clock_getres(CLOCK_REALTIME, &res);
+ if (!rc)
+ /* May return -1 for unimplemented ! */
+ *wtick = res.tv_sec + 1.0e-9 * res.tv_nsec;
+
+ /* Sigh. If not implemented (POSIX allows that),
+ * then we need to return the generic tick value */
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_device.c b/src/mpi/romio/mpl/src/timer/mpl_timer_device.c
new file mode 100644
index 0000000..1f2e6f1
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_device.c
@@ -0,0 +1,54 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__DEVICE
+
+int (*MPL_wtime_fn)(MPL_time_t *timeval) = NULL;
+int (*MPL_wtime_diff_fn)(MPL_time_t *t1, MPL_time_t *t2, double *diff) = NULL;
+int (*MPL_wtime_acc_fn)(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3) = NULL;
+int (*MPL_wtime_todouble_fn)(MPL_time_t *timeval, double *seconds) = NULL;
+int (*MPL_wtick_fn)(double *tick) = NULL;
+
+int MPL_wtime(MPL_time_t *timeval)
+{
+ if (MPL_wtime_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_fn(timeval);
+}
+
+int MPL_wtime_diff(MPL_time_t *t1, MPL_time_t *t2, double *diff)
+{
+ if (MPL_wtime_diff_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_diff_fn(t1, t2, diff);
+}
+
+int MPL_wtime_todouble(MPL_time_t *t, double *val)
+{
+ if (MPL_wtime_todouble_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_todouble_fn(t, val);
+}
+
+int MPL_wtime_acc(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3)
+{
+ if (MPL_wtime_acc_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_acc_fn(t1, t2, t3);
+}
+
+int MPL_wtick(double *wtick)
+{
+ if (MPL_wtick_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtick_fn(wtick);
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c b/src/mpi/romio/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c
new file mode 100644
index 0000000..99c5643
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GCC_IA64_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ unsigned long long t1, t2;
+ struct timeval tv1, tv2;
+ double td1, td2;
+
+ gettimeofday(&tv1, NULL);
+ MPL_wtime(&t1);
+ usleep(250000);
+ gettimeofday(&tv2, NULL);
+ MPL_wtime(&t2);
+
+ td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
+ td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
+
+ seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+/* Time stamps created by a macro */
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ /* This returns the number of cycles as the "time". This isn't correct
+ * for implementing MPI_Wtime, but it does allow us to insert cycle
+ * counters into test programs */
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_gethrtime.c b/src/mpi/romio/mpl/src/timer/mpl_timer_gethrtime.c
new file mode 100644
index 0000000..ad69fe4
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_gethrtime.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETHRTIME
+
+/*
+ * MPL_time_t is hrtime_t, which under Solaris is defined as a 64bit
+ * longlong_t . However, the Solaris header files will define
+ * longlong_t as a structure in some circumstances, making arithmetic
+ * with hrtime_t invalid. FIXME.
+ * To fix this, we'll need to test hrtime_t arithmetic in the configure
+ * program, and if it fails, check for the Solaris defintions (
+ * union { double _d; int32_t _l[2]; }. Alternately, we may decide that
+ * if hrtime_t is not supported, then neither is gethrtime.
+ *
+ * Note that the Solaris sys/types.h file *assumes* that no other compiler
+ * supports an 8 byte long long. We can also cast hrtime_t to long long
+ * if long long is available and 8 bytes.
+ */
+int MPL_wtime(MPL_time_t * timeval)
+{
+ *timeval = gethrtime();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = 1.0e-9 * (double) (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = 1.0e-9 * (*t);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += ((*t2) - (*t1));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ /* According to the documentation, ticks should be in nanoseconds. This
+ * is untested */
+ *wtick = 1.0e-9;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_gettimeofday.c b/src/mpi/romio/mpl/src/timer/mpl_timer_gettimeofday.c
new file mode 100644
index 0000000..a211fe7
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_gettimeofday.c
@@ -0,0 +1,72 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETTIMEOFDAY
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int MPL_wtime(MPL_time_t * tval)
+{
+ gettimeofday(tval, NULL);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = ((double) (t2->tv_sec - t1->tv_sec) + .000001 * (double) (t2->tv_usec - t1->tv_usec));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) t->tv_sec + .000001 * (double) t->tv_usec;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ int usec, sec;
+
+ usec = t2->tv_usec - t1->tv_usec;
+ sec = t2->tv_sec - t1->tv_sec;
+ t3->tv_usec += usec;
+ t3->tv_sec += sec;
+ /* Handle carry to the integer seconds field */
+ while (t3->tv_usec > 1000000) {
+ t3->tv_usec -= 1000000;
+ t3->tv_sec++;
+ }
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_linux86_cycle.c b/src/mpi/romio/mpl/src/timer/mpl_timer_linux86_cycle.c
new file mode 100644
index 0000000..5b14a57
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_linux86_cycle.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__LINUX86_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ MPL_time_t t1, t2;
+ struct timeval tv1, tv2;
+ double td1, td2;
+
+ gettimeofday(&tv1, NULL);
+ MPL_wtime(&t1);
+ usleep(250000);
+ gettimeofday(&tv2, NULL);
+ MPL_wtime(&t2);
+
+ td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
+ td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
+
+ seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+/* Time stamps created by a macro */
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ /* This returns the number of cycles as the "time". This isn't correct
+ * for implementing MPI_Wtime, but it does allow us to insert cycle
+ * counters into test programs */
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_mach_absolute_time.c b/src/mpi/romio/mpl/src/timer/mpl_timer_mach_absolute_time.c
new file mode 100644
index 0000000..31afaef
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_mach_absolute_time.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__MACH_ABSOLUTE_TIME
+
+static double MPIR_Wtime_mult;
+
+int MPL_wtime_init(void)
+{
+ mach_timebase_info_data_t info;
+ mach_timebase_info(&info);
+ MPIR_Wtime_mult = 1.0e-9 * ((double) info.numer / (double) info.denom);
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime(MPL_time_t * timeval)
+{
+ *timeval = mach_absolute_time();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (*t2 - *t1) * MPIR_Wtime_mult;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = *t * MPIR_Wtime_mult;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += *t2 - *t1;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_ppc64_cycle.c b/src/mpi/romio/mpl/src/timer/mpl_timer_ppc64_cycle.c
new file mode 100644
index 0000000..439aafc
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_ppc64_cycle.c
@@ -0,0 +1,128 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__PPC64_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+static uint64_t clockMHz = 0;
+
+static uint64_t timeGetTime( void )
+{
+ struct timeval tv;
+ gettimeofday( &tv, 0 );
+ return tv.tv_sec * 1000000ULL + tv.tv_usec;
+}
+
+static inline uint64_t getClockMHz()
+{
+ if (clockMHz == 0)
+ {
+ uint64_t sampleTime = 100ULL; //sample time in usec
+ uint64_t timeStart = 0ULL, timeStop = 0ULL;
+ uint64_t startBase = 0ULL, endBase = 0ULL;
+ uint64_t overhead = 0ULL, tbf = 0ULL, tbi = 0ULL;
+ uint64_t ticks = 0ULL;
+ int iter = 0ULL;
+
+ do
+ {
+ tbi = tb();
+ tbf = tb();
+ tbi = tb();
+ tbf = tb();
+
+ overhead = tbf - tbi;
+ timeStart = timeGetTime();
+
+ while (timeGetTime() == timeStart)
+ timeStart = timeGetTime();
+
+ while (1)
+ {
+ timeStop = timeGetTime();
+
+ if ((timeStop - timeStart) > 1)
+ {
+ startBase = tb();
+ break;
+ }
+ }
+
+ timeStart = timeStop;
+
+ while (1)
+ {
+ timeStop = timeGetTime();
+
+ if ((timeStop - timeStart) > sampleTime)
+ {
+ endBase = tb();
+ break;
+ }
+ }
+
+ ticks = ((endBase - startBase) + (overhead));
+ iter++;
+
+ if (iter == 10ULL)
+ {
+ fprintf(stderr, "Warning: unable to initialize high resolution timer.\n");
+ return -1;
+ }
+ }
+ while (endBase <= startBase);
+
+ return (uint64_t) (ticks / sampleTime);
+ }
+ else
+ return clockMHz;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ clockMHz = getClockMHz();
+ seconds_per_tick = 1.0 / ((double)clockMHz * 1000000.0);
+ if (clockMHz == -1ULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ else
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_query_performance_counter.c b/src/mpi/romio/mpl/src/timer/mpl_timer_query_performance_counter.c
new file mode 100644
index 0000000..67dec5f
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_query_performance_counter.c
@@ -0,0 +1,45 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER
+
+static double seconds_per_tick = 0.0; /* High performance counter frequency */
+
+int MPL_wtime_init(void)
+{
+ LARGE_INTEGER n;
+ QueryPerformanceFrequency(&n);
+ seconds_per_tick = 1.0 / (double) n.QuadPart;
+ return 0;
+}
+
+double MPL_wtick(void)
+{
+ return seconds_per_tick;
+}
+
+void MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) t->QuadPart * seconds_per_tick;
+}
+
+void MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ LARGE_INTEGER n;
+ n.QuadPart = t2->QuadPart - t1->QuadPart;
+ *diff = (double) n.QuadPart * seconds_per_tick;
+}
+
+void MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ t3->QuadPart += ((t2->QuadPart) - (t1->QuadPart));
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/src/timer/mpl_timer_win86_cycle.c b/src/mpi/romio/mpl/src/timer/mpl_timer_win86_cycle.c
new file mode 100644
index 0000000..4943f12
--- /dev/null
+++ b/src/mpi/romio/mpl/src/timer/mpl_timer_win86_cycle.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if (MPL_TIMER_KIND == MPL_TIMER_KIND__WIN86_CYCLE) || (MPL_TIMER_KIND == MPL_TIMER_KIND__WIN64_CYCLE)
+
+static double seconds_per_tick = 0.0;
+
+double MPL_wtick(void)
+{
+ return seconds_per_tick;
+}
+
+void MPL_wtime_todouble(MPL_time_t * t, double *d)
+{
+ *d = (double) (__int64) * t * seconds_per_tick;
+}
+
+void MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) ((__int64) (*t2 - *t1)) * seconds_per_tick;
+}
+
+int MPL_wtime_init(void)
+{
+ MPL_time_t t1, t2;
+ DWORD s1, s2;
+ double d;
+ int i;
+
+ MPL_wtime(&t1);
+ MPL_wtime(&t1);
+
+ /* time an interval using both timers */
+ s1 = GetTickCount();
+ MPL_wtime(&t1);
+ /*Sleep(250); *//* Sleep causes power saving cpu's to stop which stops the counter */
+ while (GetTickCount() - s1 < 200) {
+ for (i = 2; i < 1000; i++)
+ d = (double) i / (double) (i - 1);
+ }
+ s2 = GetTickCount();
+ MPL_wtime(&t2);
+
+ /* calculate the frequency of the assembly cycle counter */
+ seconds_per_tick = ((double) (s2 - s1) / 1000.0) / (double) ((__int64) (t2 - t1));
+ /*
+ * printf("t2-t1 %10d\nsystime diff %d\nfrequency %g\n CPU MHz %g\n",
+ * (int)(t2-t1), (int)(s2 - s1), seconds_per_tick, seconds_per_tick * 1.0e6);
+ */
+ return 0;
+}
+
+#endif
diff --git a/src/mpi/romio/mpl/test/.state-cache b/src/mpi/romio/mpl/test/.state-cache
new file mode 100644
index 0000000..e246ca4
--- /dev/null
+++ b/src/mpi/romio/mpl/test/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="strsep.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="strsep.c">
+</fileinfo>
+</data>
diff --git a/src/mpi/romio/mpl/test/strsep.c b/src/mpi/romio/mpl/test/strsep.c
new file mode 100644
index 0000000..6127a1b
--- /dev/null
+++ b/src/mpi/romio/mpl/test/strsep.c
@@ -0,0 +1,77 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2011 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "mpl.h"
+
+int main(void)
+{
+ char *orig;
+ char *str;
+ char *next;
+
+ str = NULL;
+ next = MPL_strsep(&str, "|");
+ assert(next == NULL);
+ assert(str == NULL);
+
+ orig = strdup("");
+ str = orig;
+ next = MPL_strsep(&str, "|");
+ assert(str == NULL);
+ assert(next == orig);
+ free(orig);
+
+ orig = strdup("a|b|c");
+ str = orig;
+ next = MPL_strsep(&str, "|");
+ assert(next == orig);
+ assert(0 == strcmp(next, "a"));
+ next = MPL_strsep(&str, "|");
+ assert(0 == strcmp(next, "b"));
+ next = MPL_strsep(&str, "|");
+ assert(0 == strcmp(next, "c"));
+ next = MPL_strsep(&str, "|");
+ assert(next == NULL);
+ assert(str == NULL);
+ free(orig);
+
+ orig = strdup("a|b:c");
+ str = orig;
+ next = MPL_strsep(&str, ":|");
+ assert(next == orig);
+ assert(0 == strcmp(next, "a"));
+ next = MPL_strsep(&str, ":|");
+ assert(0 == strcmp(next, "b"));
+ next = MPL_strsep(&str, ":|");
+ assert(0 == strcmp(next, "c"));
+ next = MPL_strsep(&str, ":|");
+ assert(next == NULL);
+ assert(str == NULL);
+ free(orig);
+
+ orig = strdup("a|:b:c");
+ str = orig;
+ next = MPL_strsep(&str, ":|");
+ assert(next == orig);
+ assert(0 == strcmp(next, "a"));
+ next = MPL_strsep(&str, ":|");
+ assert(0 == strcmp(next, ""));
+ next = MPL_strsep(&str, ":|");
+ assert(0 == strcmp(next, "b"));
+ next = MPL_strsep(&str, ":|");
+ assert(0 == strcmp(next, "c"));
+ next = MPL_strsep(&str, ":|");
+ assert(next == NULL);
+ assert(str == NULL);
+ free(orig);
+
+ return 0;
+}
+
diff --git a/src/mpi/romio/test-internal/.state-cache b/src/mpi/romio/test-internal/.state-cache
index dc15f27..60ff01d 100644
--- a/src/mpi/romio/test-internal/.state-cache
+++ b/src/mpi/romio/test-internal/.state-cache
@@ -1,13 +1,13 @@
<dir>
-<file name="io_bounds_test.c" info="1447123141"/>
-<file name="heap_test.c" info="1447123141"/>
-<file name="file_realms_test.c" info="1447123141"/>
+<file name="file_realms_test.c" info="1478973152"/>
+<file name="io_bounds_test.c" info="1478973152"/>
+<file name="heap_test.c" info="1478973152"/>
</dir>
<data>
+<fileinfo name="file_realms_test.c">
+</fileinfo>
<fileinfo name="io_bounds_test.c">
</fileinfo>
<fileinfo name="heap_test.c">
</fileinfo>
-<fileinfo name="file_realms_test.c">
-</fileinfo>
</data>
diff --git a/src/mpi/romio/test-internal/Makefile.in b/src/mpi/romio/test-internal/Makefile.in
index 536204d..dc00dc5 100644
--- a/src/mpi/romio/test-internal/Makefile.in
+++ b/src/mpi/romio/test-internal/Makefile.in
@@ -101,12 +101,14 @@ noinst_PROGRAMS = $(am__EXEEXT_1)
subdir = test-internal
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_check_visibility.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
$(top_srcdir)/confdb/aclocal_f77.m4 \
$(top_srcdir)/confdb/aclocal_fc.m4 \
$(top_srcdir)/confdb/aclocal_make.m4 \
$(top_srcdir)/confdb/aclocal_romio.m4 \
$(top_srcdir)/confdb/aclocal_runlog.m4 \
+ $(top_srcdir)/confdb/aclocal_subcfg.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
$(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
@@ -306,6 +308,7 @@ MPI_LIB = @MPI_LIB@
MPI_OFFSET_KIND1 = @MPI_OFFSET_KIND1@
MPI_OFFSET_KIND2 = @MPI_OFFSET_KIND2@
MPI_OFFSET_TYPE = @MPI_OFFSET_TYPE@
+MPLLIBNAME = @MPLLIBNAME@
NEEDS_MPI_FINT = @NEEDS_MPI_FINT@
NM = @NM@
NMEDIT = @NMEDIT@
@@ -344,6 +347,7 @@ TEST_LIBNAME = @TEST_LIBNAME@
USER_CFLAGS = @USER_CFLAGS@
USER_FFLAGS = @USER_FFLAGS@
VERSION = @VERSION@
+VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
WITHIN_KNOWN_MPI_IMPL = @WITHIN_KNOWN_MPI_IMPL@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
@@ -390,11 +394,17 @@ master_top_builddir = @master_top_builddir@
master_top_srcdir = @master_top_srcdir@
master_topbuild_dir = @master_topbuild_dir@
mkdir_p = @mkdir_p@
+mpl_dist_srcdir = @mpl_dist_srcdir@
+mpl_includedir = @mpl_includedir@
+mpl_lib = @mpl_lib@
+mpl_libdir = @mpl_libdir@
+mpl_srcdir = @mpl_srcdir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/mpi/romio/test/.state-cache b/src/mpi/romio/test/.state-cache
index 5fa61e7..48eca66 100644
--- a/src/mpi/romio/test/.state-cache
+++ b/src/mpi/romio/test/.state-cache
@@ -1,91 +1,91 @@
<dir>
-<file name="psimple.c" info="1447123141"/>
-<file name="coll_test.c" info="1447123141"/>
-<file name="perf.c" info="1447123141"/>
-<file name="types_with_zeros.c" info="1447123141"/>
-<file name="split_coll.c" info="1447123141"/>
-<file name="noncontig_coll.c" info="1447123141"/>
-<file name="noncontig_coll2.c" info="1447123141"/>
-<file name="excl.c" info="1447123141"/>
-<file name="syshints.c" info="1447123141"/>
-<file name="darray_read.c" info="1447123141"/>
-<file name="large_array.c" info="1447123141"/>
-<file name="coll_perf.c" info="1447123141"/>
-<file name="async-multiple.c" info="1447123141"/>
-<file name="big_extents.c" info="1447123141"/>
-<file name="noncontig.c" info="1447123141"/>
-<file name="simple.c" info="1447123141"/>
-<file name="error.c" info="1447123141"/>
-<file name="external32.c" info="1447123141"/>
-<file name="status.c" info="1447123141"/>
-<file name="hindexed.c" info="1447123141"/>
-<file name="aggregation2.c" info="1447123141"/>
-<file name="creat_excl.c" info="1447123141"/>
-<file name="file_info.c" info="1447123141"/>
-<file name="async.c" info="1447123141"/>
-<file name="aggregation1.c" info="1447123141"/>
-<file name="ordered_fp.c" info="1447123141"/>
-<file name="atomicity.c" info="1447123141"/>
-<file name="i_noncontig.c" info="1447123141"/>
-<file name="shared_fp.c" info="1447123141"/>
+<file name="atomicity.c" info="1478973152"/>
+<file name="aggregation1.c" info="1478973152"/>
+<file name="async.c" info="1478973152"/>
+<file name="shared_fp.c" info="1478973152"/>
+<file name="creat_excl.c" info="1478973152"/>
+<file name="noncontig_coll2.c" info="1478973152"/>
+<file name="types_with_zeros.c" info="1478973152"/>
+<file name="large_array.c" info="1478973152"/>
+<file name="i_noncontig.c" info="1478973152"/>
+<file name="noncontig_coll.c" info="1478973152"/>
+<file name="ordered_fp.c" info="1478973152"/>
+<file name="coll_perf.c" info="1478973152"/>
+<file name="big_extents.c" info="1478973152"/>
+<file name="coll_test.c" info="1478973152"/>
+<file name="error.c" info="1478973152"/>
+<file name="hindexed.c" info="1478973152"/>
+<file name="psimple.c" info="1478973152"/>
+<file name="file_info.c" info="1478973152"/>
+<file name="excl.c" info="1478973152"/>
+<file name="status.c" info="1478973152"/>
+<file name="perf.c" info="1478973152"/>
+<file name="external32.c" info="1478973152"/>
+<file name="noncontig.c" info="1478973152"/>
+<file name="syshints.c" info="1478973152"/>
+<file name="simple.c" info="1478973152"/>
+<file name="async-multiple.c" info="1478973152"/>
+<file name="split_coll.c" info="1478973152"/>
+<file name="darray_read.c" info="1478973152"/>
+<file name="aggregation2.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="psimple.c">
-</fileinfo>
-<fileinfo name="coll_test.c">
+<fileinfo name="atomicity.c">
</fileinfo>
-<fileinfo name="perf.c">
+<fileinfo name="aggregation1.c">
</fileinfo>
-<fileinfo name="types_with_zeros.c">
+<fileinfo name="async.c">
</fileinfo>
-<fileinfo name="split_coll.c">
+<fileinfo name="shared_fp.c">
</fileinfo>
-<fileinfo name="noncontig_coll.c">
+<fileinfo name="creat_excl.c">
</fileinfo>
<fileinfo name="noncontig_coll2.c">
</fileinfo>
-<fileinfo name="excl.c">
+<fileinfo name="types_with_zeros.c">
</fileinfo>
-<fileinfo name="syshints.c">
+<fileinfo name="large_array.c">
</fileinfo>
-<fileinfo name="darray_read.c">
+<fileinfo name="i_noncontig.c">
</fileinfo>
-<fileinfo name="large_array.c">
+<fileinfo name="noncontig_coll.c">
</fileinfo>
-<fileinfo name="coll_perf.c">
+<fileinfo name="ordered_fp.c">
</fileinfo>
-<fileinfo name="async-multiple.c">
+<fileinfo name="coll_perf.c">
</fileinfo>
<fileinfo name="big_extents.c">
</fileinfo>
-<fileinfo name="noncontig.c">
-</fileinfo>
-<fileinfo name="simple.c">
+<fileinfo name="coll_test.c">
</fileinfo>
<fileinfo name="error.c">
</fileinfo>
-<fileinfo name="external32.c">
+<fileinfo name="hindexed.c">
</fileinfo>
-<fileinfo name="status.c">
+<fileinfo name="psimple.c">
</fileinfo>
-<fileinfo name="hindexed.c">
+<fileinfo name="file_info.c">
</fileinfo>
-<fileinfo name="aggregation2.c">
+<fileinfo name="excl.c">
</fileinfo>
-<fileinfo name="creat_excl.c">
+<fileinfo name="status.c">
</fileinfo>
-<fileinfo name="file_info.c">
+<fileinfo name="perf.c">
</fileinfo>
-<fileinfo name="async.c">
+<fileinfo name="external32.c">
</fileinfo>
-<fileinfo name="aggregation1.c">
+<fileinfo name="noncontig.c">
</fileinfo>
-<fileinfo name="ordered_fp.c">
+<fileinfo name="syshints.c">
</fileinfo>
-<fileinfo name="atomicity.c">
+<fileinfo name="simple.c">
</fileinfo>
-<fileinfo name="i_noncontig.c">
+<fileinfo name="async-multiple.c">
</fileinfo>
-<fileinfo name="shared_fp.c">
+<fileinfo name="split_coll.c">
+</fileinfo>
+<fileinfo name="darray_read.c">
+</fileinfo>
+<fileinfo name="aggregation2.c">
</fileinfo>
</data>
diff --git a/src/mpi/romio/test/Makefile.in b/src/mpi/romio/test/Makefile.in
index d7fb22d..4fcfcaf 100644
--- a/src/mpi/romio/test/Makefile.in
+++ b/src/mpi/romio/test/Makefile.in
@@ -102,12 +102,14 @@ noinst_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_3)
subdir = test
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_check_visibility.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
$(top_srcdir)/confdb/aclocal_f77.m4 \
$(top_srcdir)/confdb/aclocal_fc.m4 \
$(top_srcdir)/confdb/aclocal_make.m4 \
$(top_srcdir)/confdb/aclocal_romio.m4 \
$(top_srcdir)/confdb/aclocal_runlog.m4 \
+ $(top_srcdir)/confdb/aclocal_subcfg.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
$(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
@@ -477,6 +479,7 @@ MPI_LIB = @MPI_LIB@
MPI_OFFSET_KIND1 = @MPI_OFFSET_KIND1@
MPI_OFFSET_KIND2 = @MPI_OFFSET_KIND2@
MPI_OFFSET_TYPE = @MPI_OFFSET_TYPE@
+MPLLIBNAME = @MPLLIBNAME@
NEEDS_MPI_FINT = @NEEDS_MPI_FINT@
NM = @NM@
NMEDIT = @NMEDIT@
@@ -515,6 +518,7 @@ TEST_LIBNAME = @TEST_LIBNAME@
USER_CFLAGS = @USER_CFLAGS@
USER_FFLAGS = @USER_FFLAGS@
VERSION = @VERSION@
+VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
WITHIN_KNOWN_MPI_IMPL = @WITHIN_KNOWN_MPI_IMPL@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
@@ -561,11 +565,17 @@ master_top_builddir = @master_top_builddir@
master_top_srcdir = @master_top_srcdir@
master_topbuild_dir = @master_topbuild_dir@
mkdir_p = @mkdir_p@
+mpl_dist_srcdir = @mpl_dist_srcdir@
+mpl_includedir = @mpl_includedir@
+mpl_lib = @mpl_lib@
+mpl_libdir = @mpl_libdir@
+mpl_srcdir = @mpl_srcdir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/mpi/romio/test/atomicity.c b/src/mpi/romio/test/atomicity.c
index 7797075..e2cd0c6 100644
--- a/src/mpi/romio/test/atomicity.c
+++ b/src/mpi/romio/test/atomicity.c
@@ -84,7 +84,8 @@ int main(int argc, char **argv)
err = MPI_File_set_atomicity(fh, 1);
if (err != MPI_SUCCESS) {
fprintf(stderr, "Atomic mode not supported on this file system.\n");fflush(stderr);
- MPI_Abort(MPI_COMM_WORLD, 1);
+ errs++;
+ goto fn_exit;
}
MPI_Barrier(MPI_COMM_WORLD);
@@ -102,7 +103,7 @@ int main(int argc, char **argv)
if (readbuf[i] != 0) {
errs++;
fprintf(stderr, "Process %d: readbuf[%d] is %d, should be 0\n", mynod, i, readbuf[i]);
- MPI_Abort(MPI_COMM_WORLD, 1);
+ goto fn_exit;
}
}
else if (readbuf[0] == 10) { /* the rest must also be 10 */
@@ -110,7 +111,7 @@ int main(int argc, char **argv)
if (readbuf[i] != 10) {
errs++;
fprintf(stderr, "Process %d: readbuf[%d] is %d, should be 10\n", mynod, i, readbuf[i]);
- MPI_Abort(MPI_COMM_WORLD, 1);
+ goto fn_exit;
}
}
else {
@@ -168,7 +169,7 @@ int main(int argc, char **argv)
if (readbuf[i] != 0) {
errs++;
fprintf(stderr, "Process %d: readbuf[%d] is %d, should be 0\n", mynod, i, readbuf[i]);
- MPI_Abort(MPI_COMM_WORLD, 1);
+ goto fn_exit;
}
}
else if (readbuf[0] == 10) {
@@ -176,7 +177,7 @@ int main(int argc, char **argv)
if (readbuf[i] != 10) {
errs++;
fprintf(stderr, "Process %d: readbuf[%d] is %d, should be 10\n", mynod, i, readbuf[i]);
- MPI_Abort(MPI_COMM_WORLD, 1);
+ goto fn_exit;
}
}
else {
@@ -186,6 +187,9 @@ int main(int argc, char **argv)
}
}
+ MPI_Type_free(&newtype);
+ MPI_Info_free(&info);
+fn_exit:
MPI_File_close(&fh);
MPI_Barrier(MPI_COMM_WORLD);
@@ -199,8 +203,6 @@ int main(int argc, char **argv)
fprintf( stdout, " No Errors\n" );
}
}
- MPI_Type_free(&newtype);
- MPI_Info_free(&info);
free(writebuf);
free(readbuf);
free(filename);
diff --git a/src/mpi/romio/test/darray_read.c b/src/mpi/romio/test/darray_read.c
index e4eb709..7b8e4c5 100644
--- a/src/mpi/romio/test/darray_read.c
+++ b/src/mpi/romio/test/darray_read.c
@@ -1,3 +1,8 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
#include <stdio.h>
#include <stdlib.h>
diff --git a/src/mpi/romio/test/excl.c b/src/mpi/romio/test/excl.c
index e48bb3d..b531acc 100644
--- a/src/mpi/romio/test/excl.c
+++ b/src/mpi/romio/test/excl.c
@@ -10,6 +10,13 @@
/* tests MPI_MODE_EXCL */
+static void handle_error(int errcode, const char *str)
+{
+ char msg[MPI_MAX_ERROR_STRING];
+ int resultlen;
+ MPI_Error_string(errcode, msg, &resultlen);
+ fprintf(stderr, "%s: %s\n", str, msg);
+}
int main(int argc, char **argv)
{
MPI_File fh;
@@ -53,6 +60,7 @@ int main(int argc, char **argv)
err = MPI_File_open(MPI_COMM_WORLD, filename,
MPI_MODE_CREATE | MPI_MODE_EXCL | MPI_MODE_RDWR, MPI_INFO_NULL , &fh);
if (err != MPI_SUCCESS) {
+ handle_error(err, "MPI_File_open");
errs++;
fprintf(stderr, "Process %d: open failed when it should have succeeded\n", rank);
}
@@ -66,6 +74,7 @@ int main(int argc, char **argv)
if (err == MPI_SUCCESS) {
errs++;
fprintf(stderr, "Process %d: open succeeded when it should have failed\n", rank);
+ MPI_File_close(&fh);
}
MPI_Allreduce( &errs, &toterrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD );
diff --git a/src/mpi/romio/test/file_info.c b/src/mpi/romio/test/file_info.c
index fba6189..8ddfe74 100644
--- a/src/mpi/romio/test/file_info.c
+++ b/src/mpi/romio/test/file_info.c
@@ -250,7 +250,7 @@ int main(int argc, char **argv)
/* The following three hints related to file striping are accepted only
- on Intel PFS and IBM PIOFS file systems and are ignored elsewhere.
+ on some parallel file systems and are ignored elsewhere.
They can be specified only at file-creation time; if specified later
they will be ignored. */
diff --git a/src/mpi/romio/test/hindexed.c b/src/mpi/romio/test/hindexed.c
index ebc0ae8..9fff194 100644
--- a/src/mpi/romio/test/hindexed.c
+++ b/src/mpi/romio/test/hindexed.c
@@ -109,29 +109,29 @@ int main(int argc, char **argv) {
P0's 's layout P1's layout
[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9] | [ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9]
-[ 0] 0 1 2 3 4 5 | D E F G H I
-[ 1] |
-[ 2] 6 7 8 9 : ; | J K L M N O
-[ 3] |
-[ 4] |
-[ 5] |
-[ 6] |
-[ 7] |
-[ 8] |
-[ 9] |
+[ 0] 0 1 2 3 4 5 | D E F G H I
+[ 1] |
+[ 2] 6 7 8 9 : ; | J K L M N O
+[ 3] |
+[ 4] |
+[ 5] |
+[ 6] |
+[ 7] |
+[ 8] |
+[ 9] |
P2's 's layout P3's layout
[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9] | [ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9]
-[ 0] |
-[ 1] |
-[ 2] |
-[ 3] |
-[ 4] |
-[ 5] X Y Z [ \ ] | l m n o p q
-[ 6] |
-[ 7] ^ _ ` a b c | r s t u v w
-[ 8] |
-[ 9] |
+[ 0] |
+[ 1] |
+[ 2] |
+[ 3] |
+[ 4] |
+[ 5] X Y Z [ \ ] | l m n o p q
+[ 6] |
+[ 7] ^ _ ` a b c | r s t u v w
+[ 8] |
+[ 9] |
*/
/* initialize the write buffer */
@@ -205,7 +205,7 @@ int main(int argc, char **argv) {
for(i=0; i<2*YLEN*num_io; i++) {
for(j=0; j<2*XLEN; j++) {
if( *ptr != compare_buf[i][j]) {
- fprintf(stderr, "expected %d got %d at [%d][%d]\n",
+ fprintf(stderr, "expected %c got %c at [%d][%d]\n",
*ptr, compare_buf[i][j], i, j);
nr_errors++;
}
@@ -235,26 +235,26 @@ int main(int argc, char **argv) {
[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ]
[ 0] 0 1 2 3 4 5 D E F G H I
-[ 1]
+[ 1]
[ 2] 6 7 8 9 : ; J K L M N O
-[ 3]
-[ 4]
+[ 3]
+[ 4]
[ 5] X Y Z [ \ ] l m n o p q
-[ 6]
+[ 6]
[ 7] ^ _ ` a b c r s t u v w
-[ 8]
-[ 9]
+[ 8]
+[ 9]
[10] 0 1 2 3 4 5 D E F G H I
-[11]
+[11]
[12] 6 7 8 9 : ; J K L M N O
-[13]
-[14]
+[13]
+[14]
[15] X Y Z [ \ ] l m n o p q
-[16]
+[16]
[17] ^ _ ` a b c r s t u v w
-[18]
-[19]
+[18]
+[19]
*/
diff --git a/src/mpi/romio/test/large_array.c b/src/mpi/romio/test/large_array.c
index 617c895..96fcd70 100644
--- a/src/mpi/romio/test/large_array.c
+++ b/src/mpi/romio/test/large_array.c
@@ -12,7 +12,8 @@
file. Uses collective I/O. */
/* The file name is taken as a command-line argument. */
/* Run it only on a machine with sufficient memory and a file system
- on which ROMIO supports large files, i.e., PIOFS, XFS, SFS, and HFS */
+ on which ROMIO supports large files, i.e., any file system created after
+ 1999 */
/* This program will work only if the MPI implementation defines MPI_Aint
as a 64-bit integer. */
diff --git a/src/mpi/romio/test/large_file.c.in b/src/mpi/romio/test/large_file.c.in
index 3189e83..d4a2560 100644
--- a/src/mpi/romio/test/large_file.c.in
+++ b/src/mpi/romio/test/large_file.c.in
@@ -12,7 +12,7 @@
should be run on one process only*/
/* The file name is taken as a command-line argument. */
/* Can be used only on file systems on which ROMIO supports large files,
- i.e., PIOFS, XFS, SFS, and HFS. */
+ i.e., any file system created after 1999 */
#define SIZE 1048576*4 /* no. of long longs in each write/read */
#define NTIMES 128 /* no. of writes/reads */
diff --git a/src/mpi/romio/test/ordered_fp.c b/src/mpi/romio/test/ordered_fp.c
index 8090e1f..36eea93 100644
--- a/src/mpi/romio/test/ordered_fp.c
+++ b/src/mpi/romio/test/ordered_fp.c
@@ -19,7 +19,6 @@ void handle_error(int errcode, const char *str)
int resultlen;
MPI_Error_string(errcode, msg, &resultlen);
fprintf(stderr, "%s: %s\n", str, msg);
- MPI_Abort(MPI_COMM_WORLD, 1);
}
/* tests shared file pointer functions */
diff --git a/src/mpi/romio/test/shared_fp.c b/src/mpi/romio/test/shared_fp.c
index df41bdd..62174b3 100644
--- a/src/mpi/romio/test/shared_fp.c
+++ b/src/mpi/romio/test/shared_fp.c
@@ -18,7 +18,6 @@ void handle_error(int errcode, const char *str)
int resultlen;
MPI_Error_string(errcode, msg, &resultlen);
fprintf(stderr, "%s: %s\n", str, msg);
- MPI_Abort(MPI_COMM_WORLD, 1);
}
/* tests shared file pointer functions */
@@ -70,11 +69,13 @@ int main(int argc, char **argv)
MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL, &fh);
if (errcode != MPI_SUCCESS) {
handle_error(errcode, "MPI_File_open");
+ errs++;
}
errcode = MPI_File_write_shared(fh, buf, COUNT, MPI_INT, &status);
if (errcode != MPI_SUCCESS) {
handle_error(errcode, "MPI_File_write_shared");
+ errs++;
}
for (i=0; i<COUNT; i++) buf[i] = 0;
@@ -84,11 +85,13 @@ int main(int argc, char **argv)
errcode = MPI_File_seek_shared(fh, 0, MPI_SEEK_SET);
if (errcode != MPI_SUCCESS) {
handle_error(errcode, "MPI_File_seek_shared");
+ errs++;
}
errcode = MPI_File_read_shared(fh, buf, COUNT, MPI_INT, &status);
if (errcode != MPI_SUCCESS) {
handle_error(errcode, "MPI_File_read_shared");
+ errs++;
}
MPI_File_close(&fh);
diff --git a/src/mpi/romio/test/syshints.c b/src/mpi/romio/test/syshints.c
index 52d503d..1d09dc4 100755
--- a/src/mpi/romio/test/syshints.c
+++ b/src/mpi/romio/test/syshints.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include <mpi.h>
#include <stdlib.h>
#include <stdio.h>
diff --git a/src/mpi/romio/test/types_with_zeros.c b/src/mpi/romio/test/types_with_zeros.c
index 9506a06..e2f7799 100644
--- a/src/mpi/romio/test/types_with_zeros.c
+++ b/src/mpi/romio/test/types_with_zeros.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/src/mpi/romio/util/.state-cache b/src/mpi/romio/util/.state-cache
index 8b73961..5ed197c 100644
--- a/src/mpi/romio/util/.state-cache
+++ b/src/mpi/romio/util/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="nfslock.c" info="1447123141"/>
+<file name="nfslock.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="nfslock.c">
diff --git a/src/mpi/romio/version.m4 b/src/mpi/romio/version.m4
index 4e1ad59..69e7adc 100644
--- a/src/mpi/romio/version.m4
+++ b/src/mpi/romio/version.m4
@@ -14,8 +14,8 @@
# changing this by playing with diversions, but then we would probably be
# playing with autotools-fire.
-m4_define([MPICH_VERSION_m4],[3.2])dnl
-m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
+m4_define([MPICH_VERSION_m4],[3.3a2])dnl
+m4_define([MPICH_RELEASE_DATE_m4],[Sun Nov 13 09:12:11 MST 2016])dnl
# For libtool ABI versioning rules see:
# http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
@@ -35,6 +35,6 @@ m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
# libmpi so version only includes functionality defined in the MPI
# standard, and does not include MPIX_ functions and C++ bindings.
-m4_define([libmpi_so_version_m4],[13:0:1])dnl
+m4_define([libmpi_so_version_m4],[0:0:0])dnl
[#] end of __file__
diff --git a/src/mpi/spawn/.state-cache b/src/mpi/spawn/.state-cache
index 74e192e..570a8b1 100644
--- a/src/mpi/spawn/.state-cache
+++ b/src/mpi/spawn/.state-cache
@@ -1,55 +1,55 @@
<dir>
-<file name="comm_disconnect.c" info="1447123141"/>
-<file name="open_port.c" info="1447123141"/>
-<file name="unpublish_name.c" info="1447123141"/>
-<file name="lookup_name.c" info="1447123141"/>
-<file name="publish_name.c" info="1447123141"/>
-<file name="comm_accept.c" info="1447123141"/>
-<file name="namepub.h" info="1447123141"/>
-<file name="comm_connect.c" info="1447123141"/>
-<file name="close_port.c" info="1447123141"/>
-<file name="comm_join.c" info="1447123141"/>
-<file name="comm_get_parent.c" info="1447123141"/>
-<file name="comm_spawn.c" info="1447123141"/>
-<file name="comm_spawn_multiple.c" info="1447123141"/>
+<file name="comm_spawn_multiple.c" info="1478973152"/>
+<file name="close_port.c" info="1478973152"/>
+<file name="lookup_name.c" info="1478973152"/>
+<file name="open_port.c" info="1478973152"/>
+<file name="namepub.h" info="1478973152"/>
+<file name="comm_get_parent.c" info="1478973152"/>
+<file name="comm_accept.c" info="1478973152"/>
+<file name="comm_join.c" info="1478973152"/>
+<file name="comm_disconnect.c" info="1478973152"/>
+<file name="publish_name.c" info="1478973152"/>
+<file name="unpublish_name.c" info="1478973152"/>
+<file name="comm_spawn.c" info="1478973152"/>
+<file name="comm_connect.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="comm_disconnect.c">
-MPID_STATE_MPI_COMM_DISCONNECT MPI_Comm_disconnect
-</fileinfo>
-<fileinfo name="open_port.c">
-MPID_STATE_MPI_OPEN_PORT MPI_Open_port
+<fileinfo name="comm_spawn_multiple.c">
+MPID_STATE_MPI_COMM_SPAWN_MULTIPLE MPI_Comm_spawn_multiple
</fileinfo>
-<fileinfo name="unpublish_name.c">
-MPID_STATE_MPI_UNPUBLISH_NAME MPI_Unpublish_name
+<fileinfo name="close_port.c">
+MPID_STATE_MPI_CLOSE_PORT MPI_Close_port
</fileinfo>
<fileinfo name="lookup_name.c">
MPID_STATE_MPI_LOOKUP_NAME MPI_Lookup_name
</fileinfo>
-<fileinfo name="publish_name.c">
-MPID_STATE_MPI_PUBLISH_NAME MPI_Publish_name
-</fileinfo>
-<fileinfo name="comm_accept.c">
-MPID_STATE_MPI_COMM_ACCEPT MPI_Comm_accept
+<fileinfo name="open_port.c">
+MPID_STATE_MPI_OPEN_PORT MPI_Open_port
</fileinfo>
<fileinfo name="namepub.h">
</fileinfo>
-<fileinfo name="comm_connect.c">
-MPID_STATE_MPI_COMM_CONNECT MPI_Comm_connect
+<fileinfo name="comm_get_parent.c">
+MPID_STATE_MPI_COMM_GET_PARENT MPI_Comm_get_parent
</fileinfo>
-<fileinfo name="close_port.c">
-MPID_STATE_MPI_CLOSE_PORT MPI_Close_port
+<fileinfo name="comm_accept.c">
+MPID_STATE_MPI_COMM_ACCEPT MPI_Comm_accept
</fileinfo>
<fileinfo name="comm_join.c">
MPID_STATE_MPI_COMM_JOIN MPI_Comm_join
</fileinfo>
-<fileinfo name="comm_get_parent.c">
-MPID_STATE_MPI_COMM_GET_PARENT MPI_Comm_get_parent
+<fileinfo name="comm_disconnect.c">
+MPID_STATE_MPI_COMM_DISCONNECT MPI_Comm_disconnect
+</fileinfo>
+<fileinfo name="publish_name.c">
+MPID_STATE_MPI_PUBLISH_NAME MPI_Publish_name
+</fileinfo>
+<fileinfo name="unpublish_name.c">
+MPID_STATE_MPI_UNPUBLISH_NAME MPI_Unpublish_name
</fileinfo>
<fileinfo name="comm_spawn.c">
MPID_STATE_MPI_COMM_SPAWN MPI_Comm_spawn
</fileinfo>
-<fileinfo name="comm_spawn_multiple.c">
-MPID_STATE_MPI_COMM_SPAWN_MULTIPLE MPI_Comm_spawn_multiple
+<fileinfo name="comm_connect.c">
+MPID_STATE_MPI_COMM_CONNECT MPI_Comm_connect
</fileinfo>
</data>
diff --git a/src/mpi/spawn/close_port.c b/src/mpi/spawn/close_port.c
index f7f27fe..35af9f1 100644
--- a/src/mpi/spawn/close_port.c
+++ b/src/mpi/spawn/close_port.c
@@ -53,12 +53,12 @@ Input Parameters:
int MPI_Close_port(const char *port_name)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CLOSE_PORT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CLOSE_PORT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CLOSE_PORT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CLOSE_PORT);
/* ... body of routine ... */
@@ -68,7 +68,7 @@ int MPI_Close_port(const char *port_name)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CLOSE_PORT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CLOSE_PORT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/comm_accept.c b/src/mpi/spawn/comm_accept.c
index 4063784..b3606b1 100644
--- a/src/mpi/spawn/comm_accept.c
+++ b/src/mpi/spawn/comm_accept.c
@@ -30,8 +30,8 @@ int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm com
#define FUNCNAME MPIR_Comm_accept_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_accept_impl(const char * port_name, MPID_Info * info_ptr, int root,
- MPID_Comm * comm_ptr, MPID_Comm ** newcomm_ptr)
+int MPIR_Comm_accept_impl(const char * port_name, MPIR_Info * info_ptr, int root,
+ MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm_ptr)
{
return MPID_Comm_accept(port_name, info_ptr, root, comm_ptr, newcomm_ptr);
}
@@ -68,15 +68,15 @@ int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm com
MPI_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_ACCEPT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_ACCEPT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_ACCEPT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_ACCEPT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -91,8 +91,8 @@ int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm com
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -100,7 +100,7 @@ int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm com
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
@@ -112,12 +112,12 @@ int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm com
mpi_errno = MPIR_Comm_accept_impl(port_name, info_ptr, root, comm_ptr, &newcomm_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_ACCEPT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_ACCEPT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/comm_connect.c b/src/mpi/spawn/comm_connect.c
index 332b25e..394c1ea 100644
--- a/src/mpi/spawn/comm_connect.c
+++ b/src/mpi/spawn/comm_connect.c
@@ -29,8 +29,8 @@ int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm co
#define FUNCNAME MPIR_Comm_connect_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Comm_connect_impl(const char * port_name, MPID_Info * info_ptr, int root,
- MPID_Comm * comm_ptr, MPID_Comm ** newcomm_ptr)
+int MPIR_Comm_connect_impl(const char * port_name, MPIR_Info * info_ptr, int root,
+ MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm_ptr)
{
return MPID_Comm_connect(port_name, info_ptr, root, comm_ptr, newcomm_ptr);
}
@@ -67,15 +67,15 @@ int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm co
MPI_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm *newcomm_ptr = NULL;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_CONNECT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_CONNECT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_CONNECT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_CONNECT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -90,8 +90,8 @@ int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm co
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -99,7 +99,7 @@ int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm co
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -112,12 +112,12 @@ int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm co
mpi_errno = MPIR_Comm_connect_impl(port_name, info_ptr, root, comm_ptr, &newcomm_ptr);
if (mpi_errno) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*newcomm, newcomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_CONNECT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_CONNECT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/comm_disconnect.c b/src/mpi/spawn/comm_disconnect.c
index 3c6b7f4..6f627b8 100644
--- a/src/mpi/spawn/comm_disconnect.c
+++ b/src/mpi/spawn/comm_disconnect.c
@@ -54,13 +54,13 @@ int MPI_Comm_disconnect(MPI_Comm * comm)
{
static const char FCNAME[] = "MPI_Comm_disconnect";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_DISCONNECT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_DISCONNECT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_DISCONNECT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_DISCONNECT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -74,7 +74,7 @@ int MPI_Comm_disconnect(MPI_Comm * comm)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( *comm, comm_ptr );
+ MPIR_Comm_get_ptr( *comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -82,7 +82,7 @@ int MPI_Comm_disconnect(MPI_Comm * comm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno)
{
@@ -104,12 +104,12 @@ int MPI_Comm_disconnect(MPI_Comm * comm)
* those complete).
*/
/* FIXME-MT should we be checking this? */
- if (MPIU_Object_get_ref(comm_ptr) > 1)
+ if (MPIR_Object_get_ref(comm_ptr) > 1)
{
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (MPIU_Object_get_ref(comm_ptr) > 1)
+ while (MPIR_Object_get_ref(comm_ptr) > 1)
{
mpi_errno = MPID_Progress_wait(&progress_state);
/* --BEGIN ERROR HANDLING-- */
@@ -131,7 +131,7 @@ int MPI_Comm_disconnect(MPI_Comm * comm)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_DISCONNECT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_DISCONNECT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/comm_get_parent.c b/src/mpi/spawn/comm_get_parent.c
index b851a96..8b4cba2 100644
--- a/src/mpi/spawn/comm_get_parent.c
+++ b/src/mpi/spawn/comm_get_parent.c
@@ -64,11 +64,11 @@ int MPI_Comm_get_parent(MPI_Comm *parent)
static const char FCNAME[] = "MPI_Comm_get_parent";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_GET_PARENT);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_GET_PARENT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_GET_PARENT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_GET_PARENT);
# ifdef HAVE_ERROR_CHECKING
{
@@ -82,8 +82,6 @@ int MPI_Comm_get_parent(MPI_Comm *parent)
/* ... body of routine ... */
- /* Note that MPIU_DBG_OpenFile also uses this code (so as to avoid
- calling an MPI routine while logging it */
*parent = (MPIR_Process.comm_parent == NULL) ? MPI_COMM_NULL :
(MPIR_Process.comm_parent)->handle;
@@ -92,7 +90,7 @@ int MPI_Comm_get_parent(MPI_Comm *parent)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_GET_PARENT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_GET_PARENT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/spawn/comm_join.c b/src/mpi/spawn/comm_join.c
index 6684bf9..12ca669 100644
--- a/src/mpi/spawn/comm_join.c
+++ b/src/mpi/spawn/comm_join.c
@@ -137,20 +137,22 @@ int MPI_Comm_join(int fd, MPI_Comm *intercomm)
{
static const char FCNAME[] = "MPI_Comm_join";
int mpi_errno = MPI_SUCCESS, err;
- MPID_Comm *intercomm_ptr;
+ MPIR_Comm *intercomm_ptr;
char *local_port, *remote_port;
- MPIU_CHKLMEM_DECL(2);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_JOIN);
+ MPIR_CHKLMEM_DECL(2);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_JOIN);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_JOIN);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_JOIN);
/* ... body of routine ... */
- MPIU_CHKLMEM_MALLOC(local_port, char *, MPI_MAX_PORT_NAME, mpi_errno, "local port name");
- MPIU_CHKLMEM_MALLOC(remote_port, char *, MPI_MAX_PORT_NAME, mpi_errno, "remote port name");
+ MPIR_CHKLMEM_MALLOC(local_port, char *, MPI_MAX_PORT_NAME, mpi_errno, "local port name");
+ MPIR_CHKLMEM_MALLOC(remote_port, char *, MPI_MAX_PORT_NAME, mpi_errno, "remote port name");
+
+ MPL_VG_MEM_INIT(local_port, MPI_MAX_PORT_NAME * sizeof(char));
mpi_errno = MPIR_Open_port_impl(NULL, local_port);
MPIR_ERR_CHKANDJUMP((mpi_errno != MPI_SUCCESS), mpi_errno, MPI_ERR_OTHER, "**openportfailed");
@@ -165,13 +167,13 @@ int MPI_Comm_join(int fd, MPI_Comm *intercomm)
"**join_portname %s %s", local_port, remote_port);
if (strcmp(local_port, remote_port) < 0) {
- MPID_Comm *comm_self_ptr;
- MPID_Comm_get_ptr( MPI_COMM_SELF, comm_self_ptr );
+ MPIR_Comm *comm_self_ptr;
+ MPIR_Comm_get_ptr( MPI_COMM_SELF, comm_self_ptr );
mpi_errno = MPIR_Comm_accept_impl(local_port, NULL, 0, comm_self_ptr, &intercomm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
} else {
- MPID_Comm *comm_self_ptr;
- MPID_Comm_get_ptr( MPI_COMM_SELF, comm_self_ptr );
+ MPIR_Comm *comm_self_ptr;
+ MPIR_Comm_get_ptr( MPI_COMM_SELF, comm_self_ptr );
mpi_errno = MPIR_Comm_connect_impl(remote_port, NULL, 0, comm_self_ptr, &intercomm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -179,13 +181,13 @@ int MPI_Comm_join(int fd, MPI_Comm *intercomm)
mpi_errno = MPIR_Close_port_impl(local_port);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*intercomm, intercomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*intercomm, intercomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_JOIN);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_JOIN);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/comm_spawn.c b/src/mpi/spawn/comm_spawn.c
index 6f540da..deff61f 100644
--- a/src/mpi/spawn/comm_spawn.c
+++ b/src/mpi/spawn/comm_spawn.c
@@ -66,14 +66,14 @@ int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info inf
{
static const char FCNAME[] = "MPI_Comm_spawn";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL, *intercomm_ptr;
- MPID_Info *info_ptr=NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SPAWN);
+ MPIR_Comm *comm_ptr = NULL, *intercomm_ptr;
+ MPIR_Info *info_ptr=NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SPAWN);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SPAWN);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SPAWN);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -87,7 +87,7 @@ int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info inf
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -95,7 +95,7 @@ int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info inf
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
@@ -113,26 +113,23 @@ int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info inf
# endif /* HAVE_ERROR_CHECKING */
if (comm_ptr->rank == root) {
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
}
/* ... body of routine ... */
- /* check if multiple threads are calling this collective function */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-
mpi_errno = MPID_Comm_spawn_multiple(1, (char **) &command, &argv,
&maxprocs, &info_ptr, root,
comm_ptr, &intercomm_ptr,
array_of_errcodes);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*intercomm, intercomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*intercomm, intercomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SPAWN);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SPAWN);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/comm_spawn_multiple.c b/src/mpi/spawn/comm_spawn_multiple.c
index a94ca7f..2dadbf8 100644
--- a/src/mpi/spawn/comm_spawn_multiple.c
+++ b/src/mpi/spawn/comm_spawn_multiple.c
@@ -70,16 +70,16 @@ int MPI_Comm_spawn_multiple(int count, char *array_of_commands[],
{
static const char FCNAME[] = "MPI_Comm_spawn_multiple";
int mpi_errno = MPI_SUCCESS, i;
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm *intercomm_ptr = NULL;
- MPID_Info **array_of_info_ptrs = NULL;
- MPIU_CHKLMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_SPAWN_MULTIPLE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Comm *intercomm_ptr = NULL;
+ MPIR_Info **array_of_info_ptrs = NULL;
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_COMM_SPAWN_MULTIPLE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_COMM_SPAWN_MULTIPLE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -93,7 +93,7 @@ int MPI_Comm_spawn_multiple(int count, char *array_of_commands[],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -101,7 +101,7 @@ int MPI_Comm_spawn_multiple(int count, char *array_of_commands[],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
@@ -127,10 +127,10 @@ int MPI_Comm_spawn_multiple(int count, char *array_of_commands[],
/* ... body of routine ... */
if (comm_ptr->rank == root) {
- MPIU_CHKLMEM_MALLOC(array_of_info_ptrs, MPID_Info **, count * sizeof(MPID_Info*), mpi_errno, "array of info pointers");
+ MPIR_CHKLMEM_MALLOC(array_of_info_ptrs, MPIR_Info **, count * sizeof(MPIR_Info*), mpi_errno, "array of info pointers");
for (i=0; i<count; i++)
{
- MPID_Info_get_ptr(array_of_info[i], array_of_info_ptrs[i]);
+ MPIR_Info_get_ptr(array_of_info[i], array_of_info_ptrs[i]);
}
}
@@ -144,13 +144,13 @@ int MPI_Comm_spawn_multiple(int count, char *array_of_commands[],
array_of_errcodes);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*intercomm, intercomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*intercomm, intercomm_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_SPAWN_MULTIPLE);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_COMM_SPAWN_MULTIPLE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/lookup_name.c b/src/mpi/spawn/lookup_name.c
index 24a449f..df8e98c 100644
--- a/src/mpi/spawn/lookup_name.c
+++ b/src/mpi/spawn/lookup_name.c
@@ -67,12 +67,12 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
{
static const char FCNAME[] = "MPI_Lookup_name";
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_LOOKUP_NAME);
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_LOOKUP_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_LOOKUP_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_LOOKUP_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -86,7 +86,7 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -95,7 +95,7 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
{
/* Validate info_ptr (only if not null) */
if (info_ptr)
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
/* Validate character pointers */
MPIR_ERRTEST_ARGNULL( service_name, "service_name", mpi_errno );
MPIR_ERRTEST_ARGNULL( port_name, "port_name", mpi_errno );
@@ -138,7 +138,7 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_LOOKUP_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_LOOKUP_NAME);
return mpi_errno;
fn_fail:
@@ -147,7 +147,7 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
{
mpi_errno = MPIR_Err_create_code(
mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**mpi_lookup_name",
- "**mpi_lookup_name %s %I %p", service_name, info, port_name);
+ "**mpi_lookup_name %s %I %s", service_name, info, port_name);
}
# endif
mpi_errno = MPIR_Err_return_comm( NULL, FCNAME, mpi_errno );
diff --git a/src/mpi/spawn/namepub.h b/src/mpi/spawn/namepub.h
index 0afbbfe..b97f9e8 100644
--- a/src/mpi/spawn/namepub.h
+++ b/src/mpi/spawn/namepub.h
@@ -9,12 +9,12 @@
typedef struct MPID_NS_Handle *MPID_NS_Handle;
-int MPID_NS_Create( const MPID_Info *, MPID_NS_Handle * );
-int MPID_NS_Publish( MPID_NS_Handle, const MPID_Info *,
+int MPID_NS_Create( const MPIR_Info *, MPID_NS_Handle * );
+int MPID_NS_Publish( MPID_NS_Handle, const MPIR_Info *,
const char service_name[], const char port[] );
-int MPID_NS_Lookup( MPID_NS_Handle, const MPID_Info *,
+int MPID_NS_Lookup( MPID_NS_Handle, const MPIR_Info *,
const char service_name[], char port[] );
-int MPID_NS_Unpublish( MPID_NS_Handle, const MPID_Info *,
+int MPID_NS_Unpublish( MPID_NS_Handle, const MPIR_Info *,
const char service_name[] );
int MPID_NS_Free( MPID_NS_Handle * );
diff --git a/src/mpi/spawn/open_port.c b/src/mpi/spawn/open_port.c
index 3897624..b47554e 100644
--- a/src/mpi/spawn/open_port.c
+++ b/src/mpi/spawn/open_port.c
@@ -24,7 +24,7 @@ int MPI_Open_port(MPI_Info info, char *port_name) __attribute__((weak,alias("PMP
#undef MPI_Open_port
#define MPI_Open_port PMPI_Open_port
-int MPIR_Open_port_impl(MPID_Info *info_ptr, char *port_name)
+int MPIR_Open_port_impl(MPIR_Info *info_ptr, char *port_name)
{
return MPID_Open_port(info_ptr, port_name);
}
@@ -68,13 +68,13 @@ The maximum size string that may be supplied by the system is
int MPI_Open_port(MPI_Info info, char *port_name)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_OPEN_PORT);
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_OPEN_PORT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_OPEN_PORT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_OPEN_PORT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -89,7 +89,7 @@ int MPI_Open_port(MPI_Info info, char *port_name)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -111,7 +111,7 @@ int MPI_Open_port(MPI_Info info, char *port_name)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_OPEN_PORT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_OPEN_PORT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/publish_name.c b/src/mpi/spawn/publish_name.c
index 5009137..db646f3 100644
--- a/src/mpi/spawn/publish_name.c
+++ b/src/mpi/spawn/publish_name.c
@@ -57,13 +57,13 @@ int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_n
{
static const char FCNAME[] = "MPI_Publish_name";
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_PUBLISH_NAME);
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_PUBLISH_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_PUBLISH_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_PUBLISH_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +77,7 @@ int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_n
# endif
/* Get handles to MPI objects. */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
# ifdef HAVE_ERROR_CHECKING
{
@@ -85,7 +85,7 @@ int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_n
{
/* Validate info_ptr (only if not null) */
if (info_ptr)
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
/* Validate character pointers */
MPIR_ERRTEST_ARGNULL( service_name, "service_name", mpi_errno );
MPIR_ERRTEST_ARGNULL( port_name, "port_name", mpi_errno );
@@ -121,7 +121,7 @@ int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_n
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_PUBLISH_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_PUBLISH_NAME);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/spawn/unpublish_name.c b/src/mpi/spawn/unpublish_name.c
index 9da24a1..5094f56 100644
--- a/src/mpi/spawn/unpublish_name.c
+++ b/src/mpi/spawn/unpublish_name.c
@@ -54,13 +54,13 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port
{
static const char FCNAME[] = "MPI_Unpublish_name";
int mpi_errno = MPI_SUCCESS;
- MPID_Info *info_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_UNPUBLISH_NAME);
+ MPIR_Info *info_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_UNPUBLISH_NAME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_UNPUBLISH_NAME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_UNPUBLISH_NAME);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -74,7 +74,7 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port
# endif
/* Convert MPI object handles to object pointers */
- MPID_Info_get_ptr( info, info_ptr );
+ MPIR_Info_get_ptr( info, info_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +83,7 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port
{
/* Validate info_ptr (only if not null) */
if (info_ptr)
- MPID_Info_valid_ptr( info_ptr, mpi_errno );
+ MPIR_Info_valid_ptr( info_ptr, mpi_errno );
MPIR_ERRTEST_ARGNULL( service_name, "service_name", mpi_errno );
MPIR_ERRTEST_ARGNULL( port_name, "port_name", mpi_errno );
}
@@ -121,7 +121,7 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_UNPUBLISH_NAME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_UNPUBLISH_NAME);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/timer/.state-cache b/src/mpi/timer/.state-cache
index ecf6ae2..95b1320 100644
--- a/src/mpi/timer/.state-cache
+++ b/src/mpi/timer/.state-cache
@@ -1,15 +1,15 @@
<dir>
-<file name="wtick.c" info="1447123141"/>
-<file name="wtime.c" info="1447123141"/>
-<file name="wintimerconf.h" info="1447123141"/>
+<file name="wintimerconf.h" info="1478973152"/>
+<file name="wtime.c" info="1478973152"/>
+<file name="wtick.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="wtick.c">
-MPID_STATE_MPI_WTICK MPI_Wtick
+<fileinfo name="wintimerconf.h">
</fileinfo>
<fileinfo name="wtime.c">
MPID_STATE_MPI_WTIME MPI_Wtime
</fileinfo>
-<fileinfo name="wintimerconf.h">
+<fileinfo name="wtick.c">
+MPID_STATE_MPI_WTICK MPI_Wtick
</fileinfo>
</data>
diff --git a/src/mpi/timer/wtick.c b/src/mpi/timer/wtick.c
index 1aff3c2..de2a497 100644
--- a/src/mpi/timer/wtick.c
+++ b/src/mpi/timer/wtick.c
@@ -44,13 +44,13 @@ double MPI_Wtick(void) __attribute__((weak,alias("PMPI_Wtick")));
double MPI_Wtick( void )
{
double tick;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WTICK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WTICK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WTICK);
- tick = MPID_Wtick();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WTICK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WTICK);
+ MPID_Wtick(&tick);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WTICK);
return tick;
}
diff --git a/src/mpi/timer/wtime.c b/src/mpi/timer/wtime.c
index a0338f0..f8dc7d1 100644
--- a/src/mpi/timer/wtime.c
+++ b/src/mpi/timer/wtime.c
@@ -48,14 +48,14 @@ double MPI_Wtime( void )
{
double d;
MPID_Time_t t;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_WTIME);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_WTIME);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_WTIME);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_WTIME);
MPID_Wtime( &t );
MPID_Wtime_todouble( &t, &d );
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_WTIME);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_WTIME);
return d;
}
diff --git a/src/mpi/topo/.state-cache b/src/mpi/topo/.state-cache
index 0ebbabd..76e432a 100644
--- a/src/mpi/topo/.state-cache
+++ b/src/mpi/topo/.state-cache
@@ -1,134 +1,131 @@
<dir>
-<file name="graphdimsget.c" info="1447123141"/>
-<file name="graph_map.c" info="1447123141"/>
-<file name="inhb_alltoallv.c" info="1447123141"/>
-<file name="cartdim_get.c" info="1447123141"/>
-<file name="nhb_alltoallv.c" info="1447123141"/>
-<file name="dist_gr_create.c" info="1447123141"/>
-<file name="inhb_allgather.c" info="1447123141"/>
-<file name="topo_test.c" info="1447123141"/>
-<file name="dist_gr_neighb.c" info="1447123141"/>
-<file name="graph_nbr.c" info="1447123141"/>
-<file name="inhb_alltoall.c" info="1447123141"/>
-<file name="nhb_allgatherv.c" info="1447123141"/>
-<file name="inhb_alltoallw.c" info="1447123141"/>
-<file name="topoutil.c" info="1447123141"/>
-<file name="nhb_allgather.c" info="1447123141"/>
-<file name="cart_sub.c" info="1447123141"/>
-<file name="cart_create.c" info="1447123141"/>
-<file name="inhb_allgatherv.c" info="1447123141"/>
-<file name="cart_coords.c" info="1447123141"/>
-<file name="graph_get.c" info="1447123141"/>
-<file name="cart_map.c" info="1447123141"/>
-<file name="topo.h" info="1447123141"/>
-<file name="graphnbrcnt.c" info="1447123141"/>
-<file name="dist_gr_neighb_count.c" info="1447123141"/>
-<file name="graphcreate.c" info="1447123141"/>
-<file name="nhb_alltoall.c" info="1447123141"/>
-<file name="nhb_alltoallw.c" info="1447123141"/>
-<file name="cart_get.c" info="1447123141"/>
-<file name="cart_shift.c" info="1447123141"/>
-<file name="dist_gr_create_adj.c" info="1447123141"/>
-<file name="dims_create.c" info="1447123141"/>
-<file name="cart_rank.c" info="1447123141"/>
-<file name="primes.h" info="1447123141"/>
+<file name="dist_gr_neighb_count.c" info="1478973152"/>
+<file name="cart_sub.c" info="1478973152"/>
+<file name="dims_create.c" info="1478973152"/>
+<file name="graphcreate.c" info="1478973152"/>
+<file name="topo_test.c" info="1478973152"/>
+<file name="cart_map.c" info="1478973152"/>
+<file name="cart_coords.c" info="1478973152"/>
+<file name="primes.h" info="1478973152"/>
+<file name="graph_nbr.c" info="1478973152"/>
+<file name="inhb_allgatherv.c" info="1478973152"/>
+<file name="inhb_alltoallw.c" info="1478973152"/>
+<file name="nhb_allgather.c" info="1478973152"/>
+<file name="nhb_alltoallv.c" info="1478973152"/>
+<file name="cartdim_get.c" info="1478973152"/>
+<file name="cart_get.c" info="1478973152"/>
+<file name="graphnbrcnt.c" info="1478973152"/>
+<file name="cart_shift.c" info="1478973152"/>
+<file name="inhb_alltoallv.c" info="1478973152"/>
+<file name="nhb_alltoall.c" info="1478973152"/>
+<file name="dist_gr_create.c" info="1478973152"/>
+<file name="graph_map.c" info="1478973152"/>
+<file name="cart_create.c" info="1478973152"/>
+<file name="cart_rank.c" info="1478973152"/>
+<file name="inhb_allgather.c" info="1478973152"/>
+<file name="graphdimsget.c" info="1478973152"/>
+<file name="nhb_allgatherv.c" info="1478973152"/>
+<file name="topoutil.c" info="1478973152"/>
+<file name="inhb_alltoall.c" info="1478973152"/>
+<file name="nhb_alltoallw.c" info="1478973152"/>
+<file name="graph_get.c" info="1478973152"/>
+<file name="dist_gr_neighb.c" info="1478973152"/>
+<file name="dist_gr_create_adj.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="graphdimsget.c">
-MPID_STATE_MPI_GRAPHDIMS_GET MPI_Graphdims_get
-</fileinfo>
-<fileinfo name="graph_map.c">
-MPID_STATE_MPI_GRAPH_MAP MPI_Graph_map
-</fileinfo>
-<fileinfo name="inhb_alltoallv.c">
-MPID_STATE_MPI_INEIGHBOR_ALLTOALLV MPI_Ineighbor_alltoallv
-</fileinfo>
-<fileinfo name="cartdim_get.c">
-MPID_STATE_MPI_CARTDIM_GET MPI_Cartdim_get
+<fileinfo name="dist_gr_neighb_count.c">
+MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT MPI_Dist_graph_neighbors_count
</fileinfo>
-<fileinfo name="nhb_alltoallv.c">
-MPID_STATE_MPI_NEIGHBOR_ALLTOALLV MPI_Neighbor_alltoallv
+<fileinfo name="cart_sub.c">
+MPID_STATE_MPI_CART_SUB MPI_Cart_sub
</fileinfo>
-<fileinfo name="dist_gr_create.c">
-MPID_STATE_MPI_DIST_GRAPH_CREATE MPI_Dist_graph_create
+<fileinfo name="dims_create.c">
+MPID_STATE_MPI_DIMS_CREATE MPI_Dims_create
</fileinfo>
-<fileinfo name="inhb_allgather.c">
-MPID_STATE_MPI_INEIGHBOR_ALLGATHER MPI_Ineighbor_allgather
+<fileinfo name="graphcreate.c">
+MPID_STATE_MPI_GRAPH_CREATE MPI_Graph_create
</fileinfo>
<fileinfo name="topo_test.c">
MPID_STATE_MPI_TOPO_TEST MPI_Topo_test
</fileinfo>
-<fileinfo name="dist_gr_neighb.c">
-MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS MPI_Dist_graph_neighbors
+<fileinfo name="cart_map.c">
+MPID_STATE_MPI_CART_MAP MPI_Cart_map
+</fileinfo>
+<fileinfo name="cart_coords.c">
+MPID_STATE_MPI_CART_COORDS MPI_Cart_coords
+</fileinfo>
+<fileinfo name="primes.h">
</fileinfo>
<fileinfo name="graph_nbr.c">
MPID_STATE_MPI_GRAPH_NEIGHBORS MPI_Graph_neighbors
</fileinfo>
-<fileinfo name="inhb_alltoall.c">
-MPID_STATE_MPI_INEIGHBOR_ALLTOALL MPI_Ineighbor_alltoall
-</fileinfo>
-<fileinfo name="nhb_allgatherv.c">
-MPID_STATE_MPI_NEIGHBOR_ALLGATHERV MPI_Neighbor_allgatherv
+<fileinfo name="inhb_allgatherv.c">
+MPID_STATE_MPI_INEIGHBOR_ALLGATHERV MPI_Ineighbor_allgatherv
</fileinfo>
<fileinfo name="inhb_alltoallw.c">
MPID_STATE_MPI_INEIGHBOR_ALLTOALLW MPI_Ineighbor_alltoallw
</fileinfo>
-<fileinfo name="topoutil.c">
-MPID_STATE_MPIR_TOPO_CANON_NHB MPIR_Topo_canon_nhb
-</fileinfo>
<fileinfo name="nhb_allgather.c">
MPID_STATE_MPI_NEIGHBOR_ALLGATHER MPI_Neighbor_allgather
</fileinfo>
-<fileinfo name="cart_sub.c">
-MPID_STATE_MPI_CART_SUB MPI_Cart_sub
-</fileinfo>
-<fileinfo name="cart_create.c">
-MPID_STATE_MPI_CART_CREATE MPI_Cart_create
-</fileinfo>
-<fileinfo name="inhb_allgatherv.c">
-MPID_STATE_MPI_INEIGHBOR_ALLGATHERV MPI_Ineighbor_allgatherv
-</fileinfo>
-<fileinfo name="cart_coords.c">
-MPID_STATE_MPI_CART_COORDS MPI_Cart_coords
-</fileinfo>
-<fileinfo name="graph_get.c">
-MPID_STATE_MPI_GRAPH_GET MPI_Graph_get
+<fileinfo name="nhb_alltoallv.c">
+MPID_STATE_MPI_NEIGHBOR_ALLTOALLV MPI_Neighbor_alltoallv
</fileinfo>
-<fileinfo name="cart_map.c">
-MPID_STATE_MPI_CART_MAP MPI_Cart_map
+<fileinfo name="cartdim_get.c">
+MPID_STATE_MPI_CARTDIM_GET MPI_Cartdim_get
</fileinfo>
-<fileinfo name="topo.h">
+<fileinfo name="cart_get.c">
+MPID_STATE_MPI_CART_GET MPI_Cart_get
</fileinfo>
<fileinfo name="graphnbrcnt.c">
MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT MPI_Graph_neighbors_count
</fileinfo>
-<fileinfo name="dist_gr_neighb_count.c">
-MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT MPI_Dist_graph_neighbors_count
+<fileinfo name="cart_shift.c">
+MPID_STATE_MPI_CART_SHIFT MPI_Cart_shift
</fileinfo>
-<fileinfo name="graphcreate.c">
-MPID_STATE_MPI_GRAPH_CREATE MPI_Graph_create
+<fileinfo name="inhb_alltoallv.c">
+MPID_STATE_MPI_INEIGHBOR_ALLTOALLV MPI_Ineighbor_alltoallv
</fileinfo>
<fileinfo name="nhb_alltoall.c">
MPID_STATE_MPI_NEIGHBOR_ALLTOALL MPI_Neighbor_alltoall
</fileinfo>
+<fileinfo name="dist_gr_create.c">
+MPID_STATE_MPI_DIST_GRAPH_CREATE MPI_Dist_graph_create
+</fileinfo>
+<fileinfo name="graph_map.c">
+MPID_STATE_MPI_GRAPH_MAP MPI_Graph_map
+</fileinfo>
+<fileinfo name="cart_create.c">
+MPID_STATE_MPI_CART_CREATE MPI_Cart_create
+</fileinfo>
+<fileinfo name="cart_rank.c">
+MPID_STATE_MPI_CART_RANK MPI_Cart_rank
+</fileinfo>
+<fileinfo name="inhb_allgather.c">
+MPID_STATE_MPI_INEIGHBOR_ALLGATHER MPI_Ineighbor_allgather
+</fileinfo>
+<fileinfo name="graphdimsget.c">
+MPID_STATE_MPI_GRAPHDIMS_GET MPI_Graphdims_get
+</fileinfo>
+<fileinfo name="nhb_allgatherv.c">
+MPID_STATE_MPI_NEIGHBOR_ALLGATHERV MPI_Neighbor_allgatherv
+</fileinfo>
+<fileinfo name="topoutil.c">
+MPID_STATE_MPIR_TOPO_CANON_NHB MPIR_Topo_canon_nhb
+</fileinfo>
+<fileinfo name="inhb_alltoall.c">
+MPID_STATE_MPI_INEIGHBOR_ALLTOALL MPI_Ineighbor_alltoall
+</fileinfo>
<fileinfo name="nhb_alltoallw.c">
MPID_STATE_MPI_NEIGHBOR_ALLTOALLW MPI_Neighbor_alltoallw
</fileinfo>
-<fileinfo name="cart_get.c">
-MPID_STATE_MPI_CART_GET MPI_Cart_get
+<fileinfo name="graph_get.c">
+MPID_STATE_MPI_GRAPH_GET MPI_Graph_get
</fileinfo>
-<fileinfo name="cart_shift.c">
-MPID_STATE_MPI_CART_SHIFT MPI_Cart_shift
+<fileinfo name="dist_gr_neighb.c">
+MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS MPI_Dist_graph_neighbors
</fileinfo>
<fileinfo name="dist_gr_create_adj.c">
MPID_STATE_MPI_DIST_GRAPH_CREATE_ADJACENT MPI_Dist_graph_create_adjacent
</fileinfo>
-<fileinfo name="dims_create.c">
-MPID_STATE_MPI_DIMS_CREATE MPI_Dims_create
-</fileinfo>
-<fileinfo name="cart_rank.c">
-MPID_STATE_MPI_CART_RANK MPI_Cart_rank
-</fileinfo>
-<fileinfo name="primes.h">
-</fileinfo>
</data>
diff --git a/src/mpi/topo/Makefile.mk b/src/mpi/topo/Makefile.mk
index 2400d9d..54caa33 100644
--- a/src/mpi/topo/Makefile.mk
+++ b/src/mpi/topo/Makefile.mk
@@ -38,5 +38,3 @@ mpi_sources += \
mpi_core_sources += \
src/mpi/topo/topoutil.c
-
-noinst_HEADERS += src/mpi/topo/topo.h
diff --git a/src/mpi/topo/cart_coords.c b/src/mpi/topo/cart_coords.c
index 5ffbf3c..32c1176 100644
--- a/src/mpi/topo/cart_coords.c
+++ b/src/mpi/topo/cart_coords.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cart_coords */
#if defined(HAVE_PRAGMA_WEAK)
@@ -59,14 +58,14 @@ int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[])
{
static const char FCNAME[] = "MPI_Cart_coords";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Topology *cart_ptr;
int i, nnodes;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CART_COORDS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CART_COORDS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CART_COORDS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CART_COORDS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -80,7 +79,7 @@ int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[])
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -88,7 +87,7 @@ int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[])
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -128,7 +127,7 @@ int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[])
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CART_COORDS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CART_COORDS);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/cart_create.c b/src/mpi/topo/cart_create.c
index f31181e..ab59b95 100644
--- a/src/mpi/topo/cart_create.c
+++ b/src/mpi/topo/cart_create.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cart_create */
#if defined(HAVE_PRAGMA_WEAK)
@@ -36,13 +35,13 @@ int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int pe
#define FUNCNAME MPIR_Cart_create
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Cart_create( MPID_Comm *comm_ptr, int ndims, const int dims[],
+int MPIR_Cart_create( MPIR_Comm *comm_ptr, int ndims, const int dims[],
const int periods[], int reorder, MPI_Comm *comm_cart )
{
int i, newsize, rank, nranks, mpi_errno = MPI_SUCCESS;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_Topology *cart_ptr = NULL;
- MPIU_CHKPMEM_DECL(4);
+ MPIR_CHKPMEM_DECL(4);
/* Set this as null incase we exit with an error */
*comm_cart = MPI_COMM_NULL;
@@ -65,13 +64,13 @@ int MPIR_Cart_create( MPID_Comm *comm_ptr, int ndims, const int dims[],
rank = comm_ptr->rank;
if (rank == 0) {
- MPID_Comm *comm_self_ptr;
- MPID_Comm_get_ptr(MPI_COMM_SELF, comm_self_ptr);
+ MPIR_Comm *comm_self_ptr;
+ MPIR_Comm_get_ptr(MPI_COMM_SELF, comm_self_ptr);
mpi_errno = MPIR_Comm_dup_impl(comm_self_ptr, &newcomm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Create the topology structure */
- MPIU_CHKPMEM_MALLOC(cart_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
+ MPIR_CHKPMEM_MALLOC(cart_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
mpi_errno, "cart_ptr" );
cart_ptr->kind = MPI_CART;
@@ -81,11 +80,11 @@ int MPIR_Cart_create( MPID_Comm *comm_ptr, int ndims, const int dims[],
/* make mallocs of size 1 int so that they get freed as part of the
normal free mechanism */
- MPIU_CHKPMEM_MALLOC(cart_ptr->topo.cart.dims,int*,sizeof(int),
+ MPIR_CHKPMEM_MALLOC(cart_ptr->topo.cart.dims,int*,sizeof(int),
mpi_errno, "cart.dims");
- MPIU_CHKPMEM_MALLOC(cart_ptr->topo.cart.periodic,int*,sizeof(int),
+ MPIR_CHKPMEM_MALLOC(cart_ptr->topo.cart.periodic,int*,sizeof(int),
mpi_errno, "cart.periodic");
- MPIU_CHKPMEM_MALLOC(cart_ptr->topo.cart.position,int*,sizeof(int),
+ MPIR_CHKPMEM_MALLOC(cart_ptr->topo.cart.position,int*,sizeof(int),
mpi_errno, "cart.position");
}
else {
@@ -113,7 +112,7 @@ int MPIR_Cart_create( MPID_Comm *comm_ptr, int ndims, const int dims[],
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
} else {
- mpi_errno = MPIR_Comm_copy( (MPID_Comm *)comm_ptr, newsize,
+ mpi_errno = MPII_Comm_copy( (MPIR_Comm *)comm_ptr, newsize,
&newcomm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
rank = comm_ptr->rank;
@@ -127,17 +126,17 @@ int MPIR_Cart_create( MPID_Comm *comm_ptr, int ndims, const int dims[],
}
/* Create the topololgy structure */
- MPIU_CHKPMEM_MALLOC(cart_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
+ MPIR_CHKPMEM_MALLOC(cart_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
mpi_errno, "cart_ptr" );
cart_ptr->kind = MPI_CART;
cart_ptr->topo.cart.nnodes = newsize;
cart_ptr->topo.cart.ndims = ndims;
- MPIU_CHKPMEM_MALLOC(cart_ptr->topo.cart.dims,int*,ndims*sizeof(int),
+ MPIR_CHKPMEM_MALLOC(cart_ptr->topo.cart.dims,int*,ndims*sizeof(int),
mpi_errno, "cart.dims");
- MPIU_CHKPMEM_MALLOC(cart_ptr->topo.cart.periodic,int*,ndims*sizeof(int),
+ MPIR_CHKPMEM_MALLOC(cart_ptr->topo.cart.periodic,int*,ndims*sizeof(int),
mpi_errno, "cart.periodic");
- MPIU_CHKPMEM_MALLOC(cart_ptr->topo.cart.position,int*,ndims*sizeof(int),
+ MPIR_CHKPMEM_MALLOC(cart_ptr->topo.cart.position,int*,ndims*sizeof(int),
mpi_errno, "cart.position");
nranks = newsize;
for (i=0; i<ndims; i++)
@@ -156,14 +155,14 @@ int MPIR_Cart_create( MPID_Comm *comm_ptr, int ndims, const int dims[],
mpi_errno = MPIR_Topology_put( newcomm_ptr, cart_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*comm_cart, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*comm_cart, newcomm_ptr->handle);
fn_exit:
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
/* --END ERROR HANDLING-- */
goto fn_exit;
}
@@ -172,7 +171,7 @@ int MPIR_Cart_create( MPID_Comm *comm_ptr, int ndims, const int dims[],
#define FUNCNAME MPIR_Cart_create_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Cart_create_impl(MPID_Comm *comm_ptr, int ndims, const int dims[],
+int MPIR_Cart_create_impl(MPIR_Comm *comm_ptr, int ndims, const int dims[],
const int periods[], int reorder, MPI_Comm *comm_cart)
{
int mpi_errno = MPI_SUCCESS;
@@ -240,13 +239,13 @@ int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[],
const int periods[], int reorder, MPI_Comm *comm_cart)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CART_CREATE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CART_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CART_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CART_CREATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -260,7 +259,7 @@ int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm_old, comm_ptr );
+ MPIR_Comm_get_ptr( comm_old, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -268,7 +267,7 @@ int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
if (comm_ptr) {
@@ -306,7 +305,7 @@ int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[],
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CART_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CART_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/cart_get.c b/src/mpi/topo/cart_get.c
index bc2c8e4..c92d5f7 100644
--- a/src/mpi/topo/cart_get.c
+++ b/src/mpi/topo/cart_get.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cart_get */
#if defined(HAVE_PRAGMA_WEAK)
@@ -63,14 +62,14 @@ int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[],
{
static const char FCNAME[] = "MPI_Cart_get";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Topology *cart_ptr;
int i, n, *vals;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CART_GET);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CART_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CART_GET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CART_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -84,7 +83,7 @@ int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -92,7 +91,7 @@ int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -141,7 +140,7 @@ int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[],
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CART_GET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CART_GET);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/cart_map.c b/src/mpi/topo/cart_map.c
index ccdd8d4..3689ed9 100644
--- a/src/mpi/topo/cart_map.c
+++ b/src/mpi/topo/cart_map.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cart_map */
#if defined(HAVE_PRAGMA_WEAK)
@@ -30,12 +29,12 @@ int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[]
#define FUNCNAME MPIR_Cart_map
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Cart_map( const MPID_Comm *comm_ptr, int ndims, const int dims[],
+int MPIR_Cart_map( const MPIR_Comm *comm_ptr, int ndims, const int dims[],
const int periodic[], int *newrank )
{
int rank, nranks, i, size, mpi_errno = MPI_SUCCESS;
- MPIU_UNREFERENCED_ARG(periodic);
+ MPL_UNREFERENCED_ARG(periodic);
/* Determine number of processes needed for topology */
if (ndims == 0) {
@@ -70,7 +69,7 @@ int MPIR_Cart_map( const MPID_Comm *comm_ptr, int ndims, const int dims[],
#define FUNCNAME MPIR_Cart_map_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Cart_map_impl(const MPID_Comm *comm_ptr, int ndims, const int dims[],
+int MPIR_Cart_map_impl(const MPIR_Comm *comm_ptr, int ndims, const int dims[],
const int periods[], int *newrank)
{
int mpi_errno = MPI_SUCCESS;
@@ -131,12 +130,12 @@ int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[]
int *newrank)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CART_MAP);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CART_MAP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CART_MAP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CART_MAP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -150,7 +149,7 @@ int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[]
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -158,7 +157,7 @@ int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[]
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(newrank,"newrank",mpi_errno);
@@ -184,7 +183,7 @@ int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[]
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CART_MAP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CART_MAP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/topo/cart_rank.c b/src/mpi/topo/cart_rank.c
index bf67ba4..56c97fd 100644
--- a/src/mpi/topo/cart_rank.c
+++ b/src/mpi/topo/cart_rank.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cart_rank */
#if defined(HAVE_PRAGMA_WEAK)
@@ -91,13 +90,13 @@ Notes:
int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Topology *cart_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CART_RANK);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CART_RANK);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CART_RANK);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CART_RANK);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -111,13 +110,13 @@ int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(rank,"rank",mpi_errno);
@@ -157,7 +156,7 @@ int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CART_RANK);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CART_RANK);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/cart_shift.c b/src/mpi/topo/cart_shift.c
index c58eeb3..6ea8a1e 100644
--- a/src/mpi/topo/cart_shift.c
+++ b/src/mpi/topo/cart_shift.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cart_shift */
#if defined(HAVE_PRAGMA_WEAK)
@@ -30,7 +29,7 @@ int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int
#define FUNCNAME MPIR_Cart_shift_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Cart_shift_impl(MPID_Comm *comm_ptr, int direction, int disp, int *rank_source, int *rank_dest)
+int MPIR_Cart_shift_impl(MPIR_Comm *comm_ptr, int direction, int disp, int *rank_source, int *rank_dest)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Topology *cart_ptr;
@@ -123,12 +122,12 @@ int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source,
int *rank_dest)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CART_SHIFT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CART_SHIFT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CART_SHIFT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CART_SHIFT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -142,7 +141,7 @@ int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -150,7 +149,7 @@ int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
@@ -172,7 +171,7 @@ int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CART_SHIFT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CART_SHIFT);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/cart_sub.c b/src/mpi/topo/cart_sub.c
index e6a4040..318b510 100644
--- a/src/mpi/topo/cart_sub.c
+++ b/src/mpi/topo/cart_sub.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cart_sub */
#if defined(HAVE_PRAGMA_WEAK)
@@ -61,15 +60,15 @@ int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm)
{
int mpi_errno = MPI_SUCCESS, all_false;
int ndims, key, color, ndims_in_subcomm, nnodes_in_subcomm, i, j, rank;
- MPID_Comm *comm_ptr = NULL, *newcomm_ptr;
+ MPIR_Comm *comm_ptr = NULL, *newcomm_ptr;
MPIR_Topology *topo_ptr, *toponew_ptr;
- MPIU_CHKPMEM_DECL(4);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CART_SUB);
+ MPIR_CHKPMEM_DECL(4);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CART_SUB);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CART_SUB);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CART_SUB);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -83,7 +82,7 @@ int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -91,7 +90,7 @@ int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -155,18 +154,18 @@ int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm)
*newcomm = newcomm_ptr->handle;
/* Save the topology of this new communicator */
- MPIU_CHKPMEM_MALLOC(toponew_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
+ MPIR_CHKPMEM_MALLOC(toponew_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
mpi_errno,"toponew_ptr");
toponew_ptr->kind = MPI_CART;
toponew_ptr->topo.cart.ndims = ndims_in_subcomm;
toponew_ptr->topo.cart.nnodes = nnodes_in_subcomm;
if (ndims_in_subcomm) {
- MPIU_CHKPMEM_MALLOC(toponew_ptr->topo.cart.dims,int*,
+ MPIR_CHKPMEM_MALLOC(toponew_ptr->topo.cart.dims,int*,
ndims_in_subcomm*sizeof(int),mpi_errno,"cart.dims");
- MPIU_CHKPMEM_MALLOC(toponew_ptr->topo.cart.periodic,int*,
+ MPIR_CHKPMEM_MALLOC(toponew_ptr->topo.cart.periodic,int*,
ndims_in_subcomm*sizeof(int),mpi_errno,"cart.periodic");
- MPIU_CHKPMEM_MALLOC(toponew_ptr->topo.cart.position,int*,
+ MPIR_CHKPMEM_MALLOC(toponew_ptr->topo.cart.position,int*,
ndims_in_subcomm*sizeof(int),mpi_errno,"cart.position");
}
else {
@@ -198,13 +197,13 @@ int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CART_SUB);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CART_SUB);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
# ifdef HAVE_ERROR_CHECKING
{
mpi_errno = MPIR_Err_create_code(
diff --git a/src/mpi/topo/cartdim_get.c b/src/mpi/topo/cartdim_get.c
index 201e6eb..489cf8b 100644
--- a/src/mpi/topo/cartdim_get.c
+++ b/src/mpi/topo/cartdim_get.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Cartdim_get */
#if defined(HAVE_PRAGMA_WEAK)
@@ -55,13 +54,13 @@ int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
{
static const char FCNAME[] = "MPI_Cartdim_get";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Topology *cart_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_CARTDIM_GET);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_CARTDIM_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_CARTDIM_GET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_CARTDIM_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -75,7 +74,7 @@ int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -84,7 +83,7 @@ int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
{
MPIR_ERRTEST_ARGNULL(ndims,"ndims",mpi_errno);
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
/* If comm_ptr is not valid, it will be reset to null */
if (mpi_errno) goto fn_fail;
}
@@ -103,7 +102,7 @@ int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_CARTDIM_GET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_CARTDIM_GET);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/dims_create.c b/src/mpi/topo/dims_create.c
index 72d34c2..52a2c6e 100644
--- a/src/mpi/topo/dims_create.c
+++ b/src/mpi/topo/dims_create.c
@@ -5,7 +5,35 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
+
+/*
+ * This CVAR is used for debugging support. An alternative would be
+ * to use the MPIU_DBG interface, which predates the CVAR interface,
+ * and also provides different levels of debugging support. In the
+ * long run, the MPIU_DBG interface should be updated to make use of
+ * CVARs.
+ */
+/*
+=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
+
+categories:
+ - name : DIMS
+ description : Dims_create cvars
+
+cvars:
+ - name : MPIR_CVAR_DIMS_VERBOSE
+ category : DIMS
+ type : boolean
+ default : false
+ class : none
+ verbosity : MPI_T_VERBOSITY_MPIDEV_DETAIL
+ scope : MPI_T_SCOPE_ALL_EQ
+ description : >-
+ If true, enable verbose output about the actions of the
+ implementation of MPI_Dims_create.
+
+=== END_MPI_T_CVAR_INFO_BLOCK ===
+*/
/* -- Begin Profiling Symbol Block for routine MPI_Dims_create */
#if defined(HAVE_PRAGMA_WEAK)
@@ -15,314 +43,797 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Dims_create as PMPI_Dims_create
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPI_Dims_create(int nnodes, int ndims, int dims[]) __attribute__((weak,alias("PMPI_Dims_create")));
+int MPI_Dims_create(int nnodes, int ndims, int dims[])
+ __attribute__ ((weak, alias("PMPI_Dims_create")));
#endif
/* -- End Profiling Symbol Block */
+
+
/* Because we store factors with their multiplicities, a small array can
- store all of the factors for a large number (grows *faster* than n
+ store all of the factors for a large number (grows *faster* than n
factorial). */
#define MAX_FACTORS 10
/* 2^20 is a millon */
#define MAX_DIMS 20
+typedef struct Factors {
+ int val, cnt;
+} Factors;
+
+/* These routines may be global if we are not using weak symbols */
+PMPI_LOCAL int MPIR_Dims_create_init(void);
+PMPI_LOCAL int MPIR_Dims_create_impl(int nnodes, int ndims, int dims[]);
+
+PMPI_LOCAL MPIR_T_pvar_timer_t PVAR_TIMER_dims_getdivs;
+PMPI_LOCAL MPIR_T_pvar_timer_t PVAR_TIMER_dims_sort;
+PMPI_LOCAL MPIR_T_pvar_timer_t PVAR_TIMER_dims_fact;
+PMPI_LOCAL MPIR_T_pvar_timer_t PVAR_TIMER_dims_basefact;
+PMPI_LOCAL MPIR_T_pvar_timer_t PVAR_TIMER_dims_getdivs;
+PMPI_LOCAL MPIR_T_pvar_timer_t PVAR_TIMER_dims_div;
+PMPI_LOCAL MPIR_T_pvar_timer_t PVAR_TIMER_dims_bal;
+
+PMPI_LOCAL unsigned long long PVAR_COUNTER_dims_npruned;
+PMPI_LOCAL unsigned long long PVAR_COUNTER_dims_ndivmade;
+PMPI_LOCAL unsigned long long PVAR_COUNTER_dims_optbalcalls;
+
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines. You can use USE_WEAK_SYMBOLS to see if MPICH is
using weak symbols to implement the MPI routines. */
-typedef struct Factors { int val, cnt; } Factors;
-/* This routine may be global if we are not using weak symbols */
-PMPI_LOCAL int MPIR_Factor( int, Factors [], int * );
-PMPI_LOCAL int MPIR_ChooseFactors( int, Factors [], int, int, int [] );
#ifndef MPICH_MPI_FROM_PMPI
#undef MPI_Dims_create
#define MPI_Dims_create PMPI_Dims_create
+/* MPI_Dims_create and PMPI_Dims_create must see the same variable for this
+ one-time initialization flag. If this file must be compiled twice,
+ this variable is defined here and as external for the other build. */
+volatile int MPIR_DIMS_initPCVars = 1;
+
+/* This routine is called once to define any PVARS and CVARS */
+PMPI_LOCAL int MPIR_Dims_create_init(void)
+{
+
+ MPIR_T_PVAR_TIMER_REGISTER_STATIC(DIMS,
+ MPI_DOUBLE,
+ dims_getdivs,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ MPIR_T_PVAR_FLAG_READONLY,
+ "DIMS", "Time to find divisors (seconds)");
+ MPIR_T_PVAR_TIMER_REGISTER_STATIC(DIMS,
+ MPI_DOUBLE,
+ dims_sort,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ MPIR_T_PVAR_FLAG_READONLY,
+ "DIMS", "Time to sort divisors (seconds)");
+ MPIR_T_PVAR_TIMER_REGISTER_STATIC(DIMS,
+ MPI_DOUBLE,
+ dims_fact,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ MPIR_T_PVAR_FLAG_READONLY,
+ "DIMS", "Time to find factors (seconds)");
+ MPIR_T_PVAR_TIMER_REGISTER_STATIC(DIMS,
+ MPI_DOUBLE,
+ dims_basefact,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ MPIR_T_PVAR_FLAG_READONLY,
+ "DIMS", "Time to ? (seconds)");
+ MPIR_T_PVAR_TIMER_REGISTER_STATIC(DIMS,
+ MPI_DOUBLE,
+ dims_div,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ MPIR_T_PVAR_FLAG_READONLY,
+ "DIMS", "Time spent in integer division (seconds)");
+ MPIR_T_PVAR_TIMER_REGISTER_STATIC(DIMS,
+ MPI_DOUBLE,
+ dims_bal,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ MPIR_T_PVAR_FLAG_READONLY,
+ "DIMS", "Time finding balanced decomposition (seconds)");
+
+ MPIR_T_PVAR_COUNTER_REGISTER_STATIC(
+ DIMS,
+ MPI_UNSIGNED_LONG_LONG,
+ dims_npruned,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ (MPIR_T_PVAR_FLAG_READONLY | MPIR_T_PVAR_FLAG_CONTINUOUS),
+ "DIMS", /* category name */
+ "Number of divisors pruned from the search for a balanced decomposition");
+ MPIR_T_PVAR_COUNTER_REGISTER_STATIC(
+ DIMS,
+ MPI_UNSIGNED_LONG_LONG,
+ dims_ndivmade,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ (MPIR_T_PVAR_FLAG_READONLY | MPIR_T_PVAR_FLAG_CONTINUOUS),
+ "DIMS", /* category name */
+ "Number of integer divisions performed");
+ MPIR_T_PVAR_COUNTER_REGISTER_STATIC(
+ DIMS,
+ MPI_UNSIGNED_LONG_LONG,
+ dims_optbalcalls,
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_BIND_NO_OBJECT,
+ (MPIR_T_PVAR_FLAG_READONLY | MPIR_T_PVAR_FLAG_CONTINUOUS),
+ "DIMS", /* category name */
+ "Number of call to optbalance");
+
+ return 0;
+}
+
+/* This includes all primes up to 46337 (sufficient for 2 billion ranks).
+ If storage is a concern (MPICH was originally organized so that only
+ code and data needed by applications would be loaded in order to keep
+ both the size of the executable and any shared library loads small),
+ this include could be organized include only primes up to 1000 (for
+ a maximum of a million ranks) or 3400 (for a maximum of 10 million ranks),
+ which will significantly reduce the number of elements included here.
+*/
#include "primes.h"
-PMPI_LOCAL int MPIR_Factor( int n, Factors factors[], int *ndivisors )
+/* Local only routines. These should *not* have standard prefix */
+static int factor_num(int, Factors [], int *);
+static int ndivisors_from_factor(int nf, const Factors *factors);
+static int factor_to_divisors(int nf, Factors *factors, int ndivs,
+ int divs[]);
+static void factor_to_dims_by_rr(int nf, Factors f[], int nd, int dims[]);
+static int optbalance(int n, int idx, int nd, int ndivs,
+ const int divs[], int trydims[], int *curbal_p,
+ int optdims[]);
+
+/*
+ * Factor "n", returning the prime factors and their counts in factors, in
+ * increasing order. Return the sum of the number of primes, including their
+ * powers (e.g., 2^3 * 7^5 * 19 gives 9 divisors, the maximum that can be created
+ * from this factorization)
+ */
+static int factor_num(int nn, Factors factors[], int *nprimes)
{
- int n_tmp, n_root;
+ int n=nn, val;
int i, nfactors=0, nall=0;
int cnt;
- int NUM_PRIMES = sizeof(primes) / sizeof(int);
-
- /* Start from an approximate of the square root of n, by first finding
- the power of 2 at least as large as n. The approximate root is then
- 2 to the 1/2 this power */
- n_tmp = n;
- n_root = 0;
- while (n_tmp) {
- n_root ++;
- n_tmp >>= 1;
- }
- n_root = 1 << (n_root / 2);
/* Find the prime number that less than that value and try dividing
- out the primes. */
- for (i=0; i<NUM_PRIMES; i++) {
- if (primes[i] > n_root) break;
+ * out the primes. */
+
+ /* First, get factors of 2 without division */
+ if ((n & 0x1) == 0) {
+ cnt = 1;
+ n >>= 1;
+ while ((n & 0x1) == 0) {
+ cnt++;
+ n >>= 1;
+ }
+ factors[0].cnt = cnt;
+ factors[0].val = 2;
+ nfactors = 1;
+ nall = cnt;
}
- /* For each prime, divide out as many as possible */
- for (;i>=0;i--) {
- cnt = 0;
- while ( (n % primes[i]) == 0) {
- cnt ++;
- n = n / primes[i];
- }
- if (cnt > 0) {
- /* --BEGIN ERROR HANDLING-- */
- if (nfactors + 1 == MAX_FACTORS) {
- /* Time to panic. This should not happen, since the
- smallest number that could exceed this would
- be the product of the first 10 primes that are
- greater than one, which is 6469693230 */
- return nfactors;
- }
- /* --END ERROR HANDLING-- */
- factors[nfactors].val = primes[i];
- factors[nfactors++].cnt = cnt;
- nall += cnt;
- }
+ /* An earlier version computed an approximation to the sqrt(n) to serve
+ * as a stopping criteria. However, tests showed that checking that the
+ * square of the current prime is less than the remaining value (after
+ * dividing out the primes found so far) is faster.
+ */
+ i = 1;
+ do {
+ int n2;
+ val = primes[i];
+ /* Note that we keep removing factors from n, so this test becomes
+ * easier and easier to satisfy as we remove factors from n
+ */
+ if (val * val > n) break;
+ n2 = n / val;
+ if (n2 * val == n) {
+ cnt = 1;
+ n = n2;
+ n2 = n / val;
+ while (n2 * val == n) {
+ cnt++;
+ n = n2;
+ n2 = n / val;
+ }
+ /* Test on nfactors >= MAX_FACTORS? */
+ /* --BEGIN ERROR HANDLING-- */
+ if (nfactors + 1 == MAX_FACTORS) {
+ /* Time to panic. This should not happen, since the
+ * smallest number that could exceed this would
+ * be the product of the first 10 primes that are
+ * greater than one, which is 6,469,693,230 */
+ return nfactors;
+ }
+ /* --END ERROR HANDLING-- */
+ factors[nfactors].val = val;
+ factors[nfactors++].cnt = cnt;
+ nall += cnt;
+ if (n == 1) break;
+ }
+ i++;
+ } while (1);
+ if (n != 1) {
+ /* There was one factor > sqrt(n). This factor must be prime.
+ * Note if nfactors was 0, n was prime */
+ factors[nfactors].val = n;
+ factors[nfactors++].cnt = 1;
+ nall++;
}
- /* If nfactors == 0, n was a prime, so return that */
- if (nfactors == 0) {
- nfactors = 1;
- nall = 1;
- factors[0].val = n;
- factors[0].cnt = 1;
+ *nprimes = nall;
+ return nfactors;
+}
+
+static int ndivisors_from_factor(int nf, const Factors *factors)
+{
+ int i, ndiv;
+ ndiv = 1;
+ for (i=0; i<nf; i++) {
+ ndiv *= (factors[i].cnt + 1);
}
- else if (n > 1) {
- /* We need one more factor (a single prime > n_root) */
- factors[nfactors].val = n;
- factors[nfactors++].cnt = 1;
- nall++;
+ ndiv -= 2;
+
+ return ndiv;
+}
+
+#undef FCNAME
+#define FCNAME "factor_to_divisors"
+static int factor_to_divisors(int nf, Factors *factors, int ndiv, int divs[])
+{
+ int i, powers[MAX_FACTORS], curbase[MAX_FACTORS], nd, idx, val, mpi_errno;
+
+ MPIR_T_PVAR_TIMER_START(DIMS, dims_getdivs);
+ for (i=0; i<nf; i++) {
+ powers[i] = 0;
+ curbase[i] = 1;
}
- *ndivisors = nall;
- return nfactors;
+
+ for (nd = 0; nd < ndiv; nd++) {
+ /* Get the next power */
+ for (idx=0; idx<nf; idx++) {
+ powers[idx]++;
+ if (powers[idx] > factors[idx].cnt) {
+ powers[idx] = 0;
+ curbase[idx] = 1;
+ }
+ else {
+ curbase[idx] *= factors[idx].val;
+ break;
+ }
+ }
+ /* Compute the divisor. Note that we could keep the scan of values
+ * from k to nf-1, then curscan[0] would always be the next value */
+ val = 1;
+ for (idx=0; idx<nf; idx++) val *= curbase[idx];
+ divs[nd] = val;
+ }
+ MPIR_T_PVAR_TIMER_END(DIMS, dims_getdivs);
+
+ /* Values are not sorted - for example, 2(2),3 will give 2,4,3 as the
+ * divisors */
+ /* This code is used because it is significantly faster than using
+ * the qsort routine. In tests of several million dims_create
+ * calls, this code took 1.02 seconds (with -O3) and 1.79 seconds
+ * (without optimization) while qsort took 2.5 seconds.
+ */
+ if (nf > 1) {
+ int gap, j, j1, j2, k, j1max, j2max;
+ MPIR_CHKLMEM_DECL(1);
+ int *divs2;
+ int *restrict d1, *restrict d2;
+
+ MPIR_CHKLMEM_MALLOC(divs2, int *, nd*sizeof(int), mpi_errno, "divs2");
+
+ MPIR_T_PVAR_TIMER_START(DIMS, dims_sort);
+ /* handling the first set of pairs separately saved about 20%;
+ * done inplace */
+ for (j=0; j<nd-1; j+=2) {
+ if (divs[j] > divs[j+1]) {
+ int tmp = divs[j]; divs[j] = divs[j+1]; divs[j+1]=tmp;
+ }
+ }
+ /* Using pointers d1 and d2 about 2x copying divs2 back into divs
+ * at the end of each phase */
+ d1 = divs;
+ d2 = divs2;
+ for (gap=2; gap < nd; gap *= 2) {
+ k = 0;
+ for (j=0; j+gap<nd; j+= gap*2) {
+ j1 = j;
+ j2 = j + gap;
+ j1max = j2;
+ j2max = j2 + gap;
+ if (j2max > nd) j2max = nd;
+ while (j1 < j1max && j2 < j2max) {
+ if (d1[j1] < d1[j2]) {
+ d2[k++] = d1[j1++];
+ }
+ else {
+ d2[k++] = d1[j2++];
+ }
+ }
+ /* Copy remainder */
+ while (j1 < j1max) d2[k++] = d1[j1++];
+ while (j2 < j2max) d2[k++] = d1[j2++];
+ }
+ /* May be some left over */
+ while (j < nd) d2[k++] = d1[j++];
+ /* swap pointers and start again */
+ { int *dt = d1; d1 = d2; d2 = dt; }
+ }
+ MPIR_T_PVAR_TIMER_END(DIMS, dims_sort);
+ /* Result must end up in divs */
+ if (d1 != divs) {
+ for (j1=0; j1<nd; j1++) divs[j1] = d1[j1];
+ }
+ MPIR_CHKLMEM_FREEALL();
+ }
+ return nd;
+fn_fail:
+ return mpi_errno;
}
-/*
- Given a collection of factors from the factors routine and a number of
- required values, combine the elements in factors into "needed" elements
- of the array chosen. These are non-increasing and so can be used directly
- in setting values in the dims array in MPIR_Dims_create.
-
- Algorithm (very simple)
-
- target_size = nnodes / ndims needed.
- Accumulate factors, starting from the bottom,
- until the target size is met or exceeded.
- Put all of the remaining factors into the last dimension
- (recompute target_size with each step, since we may
- miss the target by a wide margin.
-
- A much more sophisticated code would try to balance
- the number of nodes assigned to each dimension, possibly
- in concert with guidelines from the device about "good"
- sizes
+/*
+ * This is a modified round robin assignment. The goal is to
+ * get a good first guess at a good distribution.
+ *
+ * First, distribute factors to dims[0..nd-1]. The purpose is to get the
+ * initial factors set and to ensure that the smallest dimension is > 1.
+ * Second, distibute the remaining factors, starting with the largest, to
+ * the elements of dims with the smallest index i such that
+ * dims[i-1] > dims[i]*val
+ * or to dims[0] if no i satisfies.
+ * For example, this will successfully distribute the factors of 100 in 3-d
+ * as 5,5,4. A pure round robin would give 10,5,2.
*/
-/* FIXME: This routine does not work well with non-powers of two (and
- probably with collections of different factors. For example,
- factoring squares like 6*6 or 7*7 in to 2 dimensions doesn't yield the
- expected results (18,2) and (49,1) in current tests */
-
-/*
- To give more reasonable values of the chosen factors (in the chosen array)
- from the factors, we first distribute the factors among the dimensions
- equally.
-
- Note that since this is only used in the case where factors are the
- factors of nnnodes, we don't need to use the value of nnodes.
- */
-PMPI_LOCAL int MPIR_ChooseFactors( int nfactors, Factors factors[],
- int nnodes, int needed, int chosen[] )
+static void factor_to_dims_by_rr(int nf, Factors f[], int nd, int dims[])
{
- int i, j;
+ int i, j, k, cnt, val;
+
+ /* Initialize dims */
+ for (i=0; i<nd; i++) dims[i] = 1;
+
+ k = 0;
+ /* Start with the largest factors, move back to the smallest factor */
+ for (i=nf-1; i>=0; i--) {
+ val = f[i].val;
+ cnt = f[i].cnt;
+ for (j=0; j<cnt; j++) {
+ if (k < nd) {
+ dims[k++] = val;
+ }
+ else {
+ int kk;
+ /* find first location where apply val is valid.
+ * Can always apply at dims[0] */
+ for (kk=nd-1; kk>0; kk--) {
+ if (dims[kk]*val <= dims[kk-1]) break;
+ }
+ dims[kk] *= val;
+ }
+ }
+ }
+}
+
+
+/* need to set a minidx where it stops because the remaining
+ values are known. Then pass in the entire array. This is needed
+ to get the correct values for "ties" between the first and last values.
+ */
+#undef FC_NAME
+#define FC_NAME "optbalance"
- /* Initialize the chosen factors to all 1 */
- for (i=0; i<needed; i++) {
- chosen[i] = 1;
+static int optbalance(int n, int idx, int nd, int ndivs, const int divs[],
+ int trydims[], int *curbal_p, int optdims[])
+{
+ int min = trydims[nd-1], curbal = *curbal_p, testbal;
+ int k, f, q, ff, i, ii, kk, nndivs, sf, mpi_errno=MPI_SUCCESS;
+
+ MPIR_T_PVAR_COUNTER_INC(DIMS, dims_optbalcalls, 1);
+ if (MPIR_CVAR_DIMS_VERBOSE){
+ MPL_msg_printf("Noptb: idx=%d, nd=%d, ndivs=%d, balance=%d\n",
+ idx, nd, ndivs, curbal);
+ MPL_msg_printf("Noptb:optdims: ");
+ for (i=0; i<nd; i++)
+ MPL_msg_printf("%d%c", optdims[i], (i+1<nd) ? 'x' : '\n');
+ MPL_msg_printf("Noptb:trydims: ");
+ for (i=idx+1; i<nd; i++)
+ MPL_msg_printf("%d%c", trydims[i], (i+1<nd) ? 'x' : '\n');
}
- /* For each of the available factors, there are factors[].cnt
- copies of each of the unique factors. These are assigned in
- modified round robin fashion to each of the "chosen" entries.
- The modification is to combine with the smallest current term
- Note that the factors are in decreasing order. */
-
- i = 0; /* We don't reset the count so that the factors are
- distributed among the dimensions */
- for (j=0; j<nfactors; j++) {
- int cnt = factors[j].cnt;
- int val = factors[j].val;
- /* For each of the factors that we add, try to keep the
- entries balanced. */
- while (cnt--) {
- /* Find the smallest current entry */
- int ii, cMin, iMin;
- iMin = 0;
- cMin = chosen[0];
- for (ii=1; ii<needed; ii++) {
- if (chosen[ii] < cMin) {
- cMin = chosen[ii];
- iMin = ii;
- }
- }
- if (chosen[i] > iMin) i = iMin;
-
- chosen[i] *= val;
- i++;
- if (i >= needed) i = 0;
- }
+ if (idx > 1) {
+ MPIR_CHKLMEM_DECL(1);
+ int *newdivs;
+ MPIR_CHKLMEM_MALLOC(newdivs,int*,ndivs*sizeof(int),mpi_errno,"divs");
+ if (mpi_errno) return mpi_errno;
+
+ /* At least 3 divisors to set (0...idx). We try all choices
+ * recursively, but stop looking when we can easily tell that
+ * no additional cases can improve the current solution. */
+ for (k=0; k<ndivs; k++) {
+ f = divs[k];
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("Noptb: try f=%d at dims[%d]\n", f, idx);
+ }
+ if (idx < nd-1 && f-min > curbal) {
+ if (MPIR_CVAR_DIMS_VERBOSE){
+ MPL_msg_printf("f-min = %d, curbal = %d, skipping other divisors\n",
+ f - min, curbal);
+ }
+ MPIR_T_PVAR_COUNTER_INC(DIMS, dims_npruned, 1);
+ break; /* best case is all divisors at least
+ * f, so the best balance is at least
+ * f - min */
+ }
+ q = n / f;
+ /* check whether f is a divisor of what's left. If so,
+ * remember it as the smallest new divisor */
+ /* sf is the smallest remaining factor; we use this in an
+ * optimization for possible divisors */
+ nndivs = 0;
+ if (q % f == 0) {
+ newdivs[nndivs++] = f;
+ sf = f;
+ }
+ else {
+ sf = divs[k + 1];
+ }
+ if (idx < nd-1 && sf - min > curbal) {
+ MPIR_T_PVAR_COUNTER_INC(DIMS, dims_npruned, 1);
+ break;
+ }
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("Noptb: sf = %d\n", sf);
+ }
+ ff = sf*sf; /* At least 2 more divisors */
+ for (ii=idx-1; ii>0 && ff <= q; ii--) ff *= sf;
+ if (ii > 0) {
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("break for ii = %d, ff = %d and q = %d\n",
+ ii, ff, q);
+ }
+ MPIR_T_PVAR_COUNTER_INC(DIMS, dims_npruned, 1);
+ break; /* remaining divisors >= sf, and
+ * product must be <= q */
+ }
+
+ /* Try f as the divisor at the idx location */
+ trydims[idx] = f;
+ MPIR_T_PVAR_TIMER_START(DIMS, dims_div);
+ /* find the subset of divisors of n that are divisors of q
+ * and larger than f but such that f*f <= q */
+ for (kk=k+1; kk<ndivs; kk++) {
+ f = divs[kk];
+ ff = f*f;
+ if (ff > q) {
+ MPIR_T_PVAR_COUNTER_INC(DIMS, dims_npruned, 1);
+ break;
+ }
+ MPIR_T_PVAR_COUNTER_INC(DIMS, dims_ndivmade, 1);
+ if ((q % f) == 0) {
+ newdivs[nndivs++] = f;
+ }
+ /* sf * f <= q, break otherwise */
+ }
+ MPIR_T_PVAR_TIMER_END(DIMS, dims_div);
+ /* recursively try to find the best subset */
+ if (nndivs > 0)
+ optbalance(q, idx - 1, nd, nndivs, newdivs, trydims,
+ curbal_p, optdims);
+ }
+ MPIR_CHKLMEM_FREEALL();
}
+ else if (idx == 1) {
+ /* Only two. Find the pair such that q,f has min value for q-min, i.e.,
+ * the smallest q such that q > f. Note that f*f < n if q > f and
+ * q*f = n */
+ /* Valid choices for f, q >= divs[0] */
+ int qprev = -1;
+ for (k=1; k<ndivs; k++) {
+ f = divs[k];
+ q = n / f;
+ if (q < f) break;
+ qprev = q;
+ }
+ f = divs[k-1];
+ if (qprev > 0) q = qprev;
+ else q = n / f;
- /* Second, sort the chosen array in non-increasing order. Use
- a simple bubble sort because the number of elements is always small */
- for (i=0; i<needed-1; i++) {
- for (j=i+1; j<needed; j++) {
- if (chosen[j] > chosen[i]) {
- int tmp = chosen[i];
- chosen[i] = chosen[j];
- chosen[j] = tmp;
- }
- }
+ if (q < f) {
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("Skipping because %d < %d\n", q, f);
+ }
+ /* No valid solution. Exit without changing current optdims */
+ MPIR_T_PVAR_COUNTER_INC(DIMS, dims_npruned, 1);
+ return 0;
+ }
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("Found best factors %d,%d, from divs[%d]\n",
+ q, f, k-1);
+ }
+ /* If nd is 2 (and not greater), we will be replacing all values
+ * in dims. In that case, testbal is q-f;
+ */
+ if (nd == 2) testbal = q - f;
+ else testbal = q - min;
+
+ /* Take the new value if it is at least as good as the
+ * current choice. This is what Jesper Traeff's version does
+ * (see the code he provided for his EuroMPI'15 paper) */
+ if (testbal <= curbal) {
+ for (i=2; i<nd; i++) optdims[i] = trydims[i];
+ optdims[0] = q;
+ optdims[1] = f;
+ /* Use the balance for the range of dims, not the total
+ * balance */
+ *curbal_p = q - min;
+ }
+ }
+ else {
+ /* idx == 0. Only one choice for divisor */
+ if (n-min <= curbal) {
+ for (i=1; i<nd; i++) optdims[i] = trydims[i];
+ optdims[0] = n;
+ *curbal_p = n - min;
+ }
}
return 0;
+fn_fail:
+ return mpi_errno;
}
-int MPIR_Dims_create( int nnodes, int ndims, int dims[] )
+
+/* FIXME: The error checking should really be part of MPI_Dims_create,
+ not part of MPIR_Dims_create_impl. That slightly changes the
+ semantics of Dims_create provided by the device, but only by
+ removing the need to check for errors */
+
+
+PMPI_LOCAL int MPIR_Dims_create_impl(int nnodes, int ndims, int dims[])
{
- Factors factors[MAX_FACTORS];
- int chosen[MAX_DIMS];
- int i, j, mpi_errno;
- int dims_needed, dims_product, nfactors, ndivisors=0;
-
+ Factors f[MAX_FACTORS];
+ int nf, nprimes, i, j, k, val, nextidx;
+ int ndivs, curbal;
+ int trydims[MAX_DIMS];
+ int dims_needed, dims_product, mpi_errno;
+ int chosen[MAX_DIMS], foundDecomp;
+ int *divs;
+ MPIR_CHKLMEM_DECL(1);
+
/* Find the number of unspecified dimensions in dims and the product
- of the positive values in dims */
+ * of the positive values in dims */
dims_needed = 0;
dims_product = 1;
for (i=0; i<ndims; i++) {
- if (dims[i] < 0) {
- mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "MPIR_Dims_create", __LINE__,
- MPI_ERR_DIMS,
- "**argarrayneg",
- "**argarrayneg %s %d %d", "dims", i, dims[i]);
- return mpi_errno;
- }
- if (dims[i] == 0) dims_needed ++;
- else dims_product *= dims[i];
+ if (dims[i] < 0) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ "MPIR_Dims_create", __LINE__,
+ MPI_ERR_DIMS,
+ "**argarrayneg",
+ "**argarrayneg %s %d %d",
+ "dims", i, dims[i]);
+ return mpi_errno;
+ }
+ if (dims[i] == 0) dims_needed ++;
+ else dims_product *= dims[i];
}
/* Can we factor nnodes by dims_product? */
- if ((nnodes / dims_product ) * dims_product != nnodes ) {
- mpi_errno = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPIR_Dims_create", __LINE__,
- MPI_ERR_DIMS, "**dimspartition", 0);
- return mpi_errno;
+ if ((nnodes / dims_product) * dims_product != nnodes) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIR_Dims_create", __LINE__,
+ MPI_ERR_DIMS, "**dimspartition", 0);
+ return mpi_errno;
}
if (!dims_needed) {
- /* Special case - all dimensions provided */
- return MPI_SUCCESS;
+ /* Special case - all dimensions provided */
+ return MPI_SUCCESS;
}
-
+
if (dims_needed > MAX_DIMS) {
- /* --BEGIN ERROR HANDLING-- */
- mpi_errno = MPIR_Err_create_code( MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "MPIR_Dims_create", __LINE__, MPI_ERR_DIMS,
- "**dimsmany", "**dimsmany %d %d", dims_needed, MAX_DIMS );
- return mpi_errno;
- /* --END ERROR HANDLING-- */
+/* --BEGIN ERROR HANDLING-- */
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ "MPIR_Dims_create", __LINE__, MPI_ERR_DIMS,
+ "**dimsmany", "**dimsmany %d %d",
+ dims_needed, MAX_DIMS);
+ return mpi_errno;
+/* --END ERROR HANDLING-- */
}
nnodes /= dims_product;
- /* Now, factor nnodes into dims_needed components. We'd like these
- to match the underlying machine topology as much as possible. In the
- absence of information about the machine topology, we can try to
- make the factors a close to each other as possible.
+ /* Factor the remaining nodes into dims_needed components. The
+ * MPI standard says that these should be as balanced as possible;
+ * in particular, unfortunately, not necessarily arranged in a way
+ * that makes sense for the underlying machine topology. The approach
+ * used here was inspired by "Specification Guideline Violations
+ * by MPI_Dims_create," by Jesper Traeff and Felix Luebbe, EuroMPI'15.
+ * Among the changes are the use of a table of primes to speed up the
+ * process of finding factors, and some effort to reduce the number
+ * of integer division operations.
+ *
+ * Values are put into chosen[0..dims_needed]. These values are then
+ * copied back into dims into the "empty" slots (values == 0).
+ */
+
+ if (dims_needed == 1) {
+ /* Simply put the correct value in place */
+ for (j=0; j<ndims; j++) {
+ if (dims[j] == 0) {
+ dims[j] = nnodes;
+ break;
+ }
+ }
+ return 0;
+ }
- The MPICH 1 version used donated code that was quite sophisticated
- and complex. However, since it didn't take the system topology
- into account, it was more sophisticated that was perhaps warranted.
- In addition, useful values of nnodes for most MPI programs will be
- of the order 10-10000, and powers of two will be common.
- */
+ /* Factor nnodes */
+ MPIR_T_PVAR_TIMER_START(DIMS, dims_fact);
+ nf = factor_num(nnodes, f, &nprimes);
+ MPIR_T_PVAR_TIMER_END(DIMS, dims_fact);
- /* Get the factors */
- nfactors = MPIR_Factor( nnodes, factors, &ndivisors );
+ if (MPIR_CVAR_DIMS_VERBOSE) { MPL_msg_printf("found %d factors\n", nf); }
- /* Divide into 3 major cases:
- 1. Fewer divisors than needed dimensions. Just use all of the
- factors up, setting the remaining dimensions to 1
- 2. Only one distinct factor (typically 2) but with greater
- multiplicity. Give each dimension a nearly equal size
- 3. Other. There are enough factors to divide among the dimensions.
- This is done in an ad hoc fashion
- */
+ /* Remove primes > sqrt(n) */
+ nextidx = 0;
+ for (j=nf-1; j>0 && nextidx < dims_needed - 1; j--) {
+ val = f[j].val;
+ if (f[j].cnt == 1 && val*val > nnodes) {
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("prime %d required in idx %d\n", val, nextidx);
+ }
+ chosen[nextidx++] = val;
+ nf--;
+ nnodes /= val;
+ nprimes--;
+ }
+ else break;
+ }
-/* DEBUG
- printf( "factors are (%d of them) with %d divisors\n", nfactors, ndivisors );
- for (j=0; j<nfactors; j++) {
- printf( "val = %d repeated %d\n", factors[j].val, factors[j].cnt );
+ /* Now, handle some special cases. If we find *any* of these,
+ * we're done and can use the values in chosen to return values in dims */
+ foundDecomp = 0;
+ if (nprimes + nextidx <= dims_needed) {
+ /* Fill with the primes */
+ int m, cnt;
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("Nprimes = %d, number dims left = %d\n", nprimes,
+ dims_needed - nextidx);
+ }
+ i = nextidx + nprimes;
+ for (k=0; k<nf; k++) {
+ cnt = f[k].cnt;
+ val = f[k].val;
+ for (m=0; m<cnt; m++) chosen[--i] = val;
+ }
+ i = nextidx + nprimes;
+ while (i<ndims) chosen[i++] = 1;
+ foundDecomp = 1;
}
-*/
- /* The MPI spec requires that the values that are set be in nonincreasing
- order (MPI-1, section 6.5). */
-
- /* Distribute the factors among the dimensions */
- if (ndivisors <= dims_needed) {
- /* Just use the factors as needed. */
- MPIR_ChooseFactors( nfactors, factors, nnodes, dims_needed, chosen );
- j = 0;
- for (i=0; i<ndims; i++) {
- if (dims[i] == 0) {
- dims[i] = chosen[j++];
- }
- }
+ else if (dims_needed - nextidx == 1) {
+ chosen[nextidx] = nnodes;
+ foundDecomp = 1;
}
- else {
- /* We must combine some of the factors */
- if (nfactors == 1) {
- /* Special case for k**n, such as powers of 2 */
- int factor = factors[0].val;
- int cnt = factors[0].cnt; /* Number of factors left */
-
- for (i=0;i<ndims;i++)
- if(dims[i]==0)dims[i]=-1;
-
- i=0;
- while (cnt > 0) {
- if (dims[i] < 0) {
- dims[i] = dims[i] * factor;
- --cnt;
- }
- if (++i >= ndims) i=0;
+ else if (nf == 1) {
+ /* What's left is a product of a single prime, so there is only one
+ * possible factorization */
+ int cnt = f[0].cnt;
+ val = f[0].val;
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("only 1 prime = %d left\n", val);
+ }
+ for (k=nextidx; k<dims_needed; k++) chosen[k] = 1;
+ k = nextidx;
+ while (cnt-- > 0) {
+ if (k >= dims_needed) k = nextidx;
+ chosen[k++] *= val;
+ }
+ foundDecomp = 1;
+ }
+ /* There's another case we consider, particularly since we've
+ * factored out the "large" primes. If (cnt % (ndims-nextidx)) == 0
+ * for every remaining factor, then
+ * f = product of (val^ (cnt/(ndims-nextidx)))
+ */
+ if (!foundDecomp) {
+ int ndleft = dims_needed - nextidx;
+ for (j=0; j<nf; j++) if (f[j].cnt % ndleft != 0) break;
+ if (j == nf) {
+ int fval;
+ val = 1;
+ for (j=0; j<nf; j++) {
+ int pow = f[j].cnt / ndleft;
+ fval = f[j].val;
+ while (pow--) val *= fval;
+ }
+ for (j=nextidx; j<dims_needed; j++) chosen[j] = val;
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("Used power of factors for dims\n");
+ }
+ foundDecomp = 1;
+ }
+ }
+
+ if (foundDecomp) {
+ j = 0;
+ for (i=0; i<ndims; i++) {
+ if (dims[i] == 0) {
+ dims[i] = chosen[j++];
}
- for (i=0; i<ndims; i++)
- if (dims[i] < 0) dims[i] = -dims[i];
}
- else {
- /* Here is the general case. */
- MPIR_ChooseFactors( nfactors, factors, nnodes, dims_needed,
- chosen );
- j = 0;
- for (i=0; i<ndims; i++) {
- if (dims[i] == 0) {
- dims[i] = chosen[j++];
- }
- }
- }
+ return 0;
}
+
+ /* ndims >= 2 */
+
+ /* No trivial solution. Balance the remaining values (note that we may
+ * have already trimmed off some large factors */
+ /* First, find all of the divisors given by the remaining factors */
+ ndivs = ndivisors_from_factor(nf, (const Factors *)f);
+ MPIR_CHKLMEM_MALLOC(divs, int*, (ndivs)*sizeof(int), mpi_errno, "divs");
+ ndivs = factor_to_divisors(nf, f, ndivs, divs);
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ for (i=0; i<ndivs; i++) {
+ if (divs[i] <= 0) {
+ MPL_msg_printf("divs[%d]=%d!\n", i, divs[i]);
+ }
+ }
+ }
+
+ /* Create a simple first guess. We do this by using a round robin
+ * distribution of the primes in the remaining values (from nextidx
+ * to ndims) */
+ MPIR_T_PVAR_TIMER_START(DIMS, dims_basefact);
+ factor_to_dims_by_rr(nf, f, dims_needed - nextidx, chosen + nextidx);
+ MPIR_T_PVAR_TIMER_END(DIMS, dims_basefact);
+
+ /* This isn't quite right, as the balance may depend on the other (larger)
+ * divisors already chosen */
+ /* Need to add nextidx */
+ curbal = chosen[0] - chosen[dims_needed - 1];
+ trydims[dims_needed - nextidx - 1] = divs[0];
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("N: initial decomp is: ");
+ for (i=0; i<dims_needed; i++)
+ MPL_msg_printf("%d%c", chosen[i], (i+1 < dims_needed) ? 'x' : '\n');
+ }
+ MPIR_T_PVAR_TIMER_START(DIMS, dims_bal);
+ optbalance(nnodes, dims_needed - nextidx - 1, dims_needed - nextidx,
+ ndivs, divs, trydims, &curbal, chosen+nextidx);
+ MPIR_T_PVAR_TIMER_END(DIMS, dims_bal);
+ MPIR_CHKLMEM_FREEALL();
+
+ if (MPIR_CVAR_DIMS_VERBOSE) {
+ MPL_msg_printf("N: final decomp is: ");
+ for (i=0; i<dims_needed; i++)
+ MPL_msg_printf("%d%c", chosen[i], (i+1 < dims_needed) ? 'x' : '\n');
+ }
+
+ j = 0;
+ for (i=0; i<ndims; i++) {
+ if (dims[i] == 0) {
+ dims[i] = chosen[j++];
+ }
+ }
+
return MPI_SUCCESS;
+fn_fail:
+ return mpi_errno;
}
-#endif
+#else
+/* MPI_Dims_create and PMPI_Dims_create must see the same variable for this
+ one-time initialization flag */
+extern volatile int MPIR_DIMS_initPCVars;
+
+#endif /* PMPI Local */
#undef FUNCNAME
#define FUNCNAME MPI_Dims_create
@@ -333,11 +844,11 @@ int MPIR_Dims_create( int nnodes, int ndims, int dims[] )
MPI_Dims_create - Creates a division of processors in a cartesian grid
Input Parameters:
-+ nnodes - number of nodes in a grid (integer)
-- ndims - number of cartesian dimensions (integer)
++ nnodes - number of nodes in a grid (integer)
+- ndims - number of cartesian dimensions (integer)
Input/Output Parameters:
-. dims - integer array of size 'ndims' specifying the number of nodes in each
+. dims - integer array of size 'ndims' specifying the number of nodes in each
dimension. A value of 0 indicates that 'MPI_Dims_create' should fill in a
suitable value.
@@ -351,52 +862,57 @@ Input/Output Parameters:
int MPI_Dims_create(int nnodes, int ndims, int dims[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_DIMS_CREATE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_DIMS_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
-
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_DIMS_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_DIMS_CREATE);
if (ndims == 0) goto fn_exit;
-
+
/* Validate parameters and objects (post conversion) */
-# ifdef HAVE_ERROR_CHECKING
+#ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPIR_ERRTEST_ARGNEG(nnodes,"nnodes",mpi_errno);
- MPIR_ERRTEST_ARGNEG(ndims,"ndims",mpi_errno);
- MPIR_ERRTEST_ARGNULL(dims,"dims",mpi_errno);
+ MPIR_ERRTEST_ARGNEG(nnodes, "nnodes", mpi_errno);
+ MPIR_ERRTEST_ARGNEG(ndims, "ndims", mpi_errno);
+ MPIR_ERRTEST_ARGNULL(dims, "dims", mpi_errno);
}
MPID_END_ERROR_CHECKS;
}
-# endif /* HAVE_ERROR_CHECKING */
+#endif /* HAVE_ERROR_CHECKING */
+
+ /* Initialize pvars and cvars if this is the first call */
+ if (MPIR_DIMS_initPCVars) {
+ MPIR_Dims_create_init();
+ MPIR_DIMS_initPCVars = 0;
+ }
/* ... body of routine ... */
if (MPIR_Process.dimsCreate != NULL) {
- mpi_errno = MPIR_Process.dimsCreate( nnodes, ndims, dims );
+ mpi_errno = MPIR_Process.dimsCreate(nnodes, ndims, dims);
}
else {
- mpi_errno = MPIR_Dims_create( nnodes, ndims, dims );
+ mpi_errno = MPIR_Dims_create_impl(nnodes, ndims, dims);
}
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_DIMS_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_DIMS_CREATE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
-# ifdef HAVE_ERROR_CHECKING
+#ifdef HAVE_ERROR_CHECKING
{
- mpi_errno = MPIR_Err_create_code(
- mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
- "**mpi_dims_create",
- "**mpi_dims_create %d %d %p", nnodes, ndims, dims);
+ mpi_errno = MPIR_Err_create_code(
+ mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
+ "**mpi_dims_create",
+ "**mpi_dims_create %d %d %p", nnodes, ndims, dims);
}
-# endif
- mpi_errno = MPIR_Err_return_comm( NULL, FCNAME, mpi_errno );
+#endif
+ mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno);
goto fn_exit;
/* --END ERROR HANDLING-- */
}
diff --git a/src/mpi/topo/dist_gr_create.c b/src/mpi/topo/dist_gr_create.c
index b11d8bc..1d60956 100644
--- a/src/mpi/topo/dist_gr_create.c
+++ b/src/mpi/topo/dist_gr_create.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Dist_graph_create */
#if defined(HAVE_PRAGMA_WEAK)
@@ -73,11 +72,11 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
MPI_Info info, int reorder, MPI_Comm *comm_dist_graph)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm *comm_dist_graph_ptr = NULL;
- MPID_Request **reqs = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_dist_graph_ptr = NULL;
+ MPIR_Request **reqs = NULL;
MPIR_Topology *topo_ptr = NULL;
- MPIR_Dist_graph_topology *dist_graph_ptr = NULL;
+ MPII_Dist_graph_topology *dist_graph_ptr = NULL;
int i;
int j;
int idx;
@@ -93,14 +92,14 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
int *rs;
int in_out_peers[2] = {-1, -1};
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKLMEM_DECL(9);
- MPIU_CHKPMEM_DECL(1);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_CREATE);
+ MPIR_CHKLMEM_DECL(9);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_DIST_GRAPH_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_DIST_GRAPH_CREATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -116,7 +115,7 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm_old, comm_ptr);
+ MPIR_Comm_get_ptr(comm_old, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -124,7 +123,7 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* If comm_ptr is not valid, it will be reset to null */
if (comm_ptr) {
MPIR_ERRTEST_COMM_INTRA(comm_ptr, mpi_errno);
@@ -164,9 +163,9 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
/* following the spirit of the old topo interface, attributes do not
* propagate to the new communicator (see MPI-2.1 pp. 243 line 11) */
- mpi_errno = MPIR_Comm_copy(comm_ptr, comm_size, &comm_dist_graph_ptr);
+ mpi_errno = MPII_Comm_copy(comm_ptr, comm_size, &comm_dist_graph_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_dist_graph_ptr != NULL);
+ MPIR_Assert(comm_dist_graph_ptr != NULL);
/* rin is an array of size comm_size containing pointers to arrays of
* rin_sizes[x]. rin[x] is locally known number of edges into this process
@@ -175,12 +174,12 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
* rout is an array of comm_size containing pointers to arrays of
* rout_sizes[x]. rout[x] is the locally known number of edges out of this
* process to rank x. */
- MPIU_CHKLMEM_MALLOC(rout, int **, comm_size*sizeof(int*), mpi_errno, "rout");
- MPIU_CHKLMEM_MALLOC(rin, int **, comm_size*sizeof(int*), mpi_errno, "rin");
- MPIU_CHKLMEM_MALLOC(rin_sizes, int *, comm_size*sizeof(int), mpi_errno, "rin_sizes");
- MPIU_CHKLMEM_MALLOC(rout_sizes, int *, comm_size*sizeof(int), mpi_errno, "rout_sizes");
- MPIU_CHKLMEM_MALLOC(rin_idx, int *, comm_size*sizeof(int), mpi_errno, "rin_idx");
- MPIU_CHKLMEM_MALLOC(rout_idx, int *, comm_size*sizeof(int), mpi_errno, "rout_idx");
+ MPIR_CHKLMEM_MALLOC(rout, int **, comm_size*sizeof(int*), mpi_errno, "rout");
+ MPIR_CHKLMEM_MALLOC(rin, int **, comm_size*sizeof(int*), mpi_errno, "rin");
+ MPIR_CHKLMEM_MALLOC(rin_sizes, int *, comm_size*sizeof(int), mpi_errno, "rin_sizes");
+ MPIR_CHKLMEM_MALLOC(rout_sizes, int *, comm_size*sizeof(int), mpi_errno, "rout_sizes");
+ MPIR_CHKLMEM_MALLOC(rin_idx, int *, comm_size*sizeof(int), mpi_errno, "rin_idx");
+ MPIR_CHKLMEM_MALLOC(rout_idx, int *, comm_size*sizeof(int), mpi_errno, "rout_idx");
memset(rout, 0, comm_size*sizeof(int*));
memset(rin, 0, comm_size*sizeof(int*));
@@ -192,9 +191,9 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
/* compute array sizes */
idx = 0;
for (i = 0; i < n; ++i) {
- MPIU_Assert(sources[i] < comm_size);
+ MPIR_Assert(sources[i] < comm_size);
for (j = 0; j < degrees[i]; ++j) {
- MPIU_Assert(destinations[idx] < comm_size);
+ MPIR_Assert(destinations[idx] < comm_size);
/* rout_sizes[i] is twice as long as the number of edges to be
* sent to rank i by this process */
rout_sizes[sources[i]] += 2;
@@ -207,10 +206,10 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
for (i = 0; i < comm_size; ++i) {
/* can't use CHKLMEM macros b/c we are in a loop */
if (rin_sizes[i]) {
- rin[i] = MPIU_Malloc(rin_sizes[i] * sizeof(int));
+ rin[i] = MPL_malloc(rin_sizes[i] * sizeof(int));
}
if (rout_sizes[i]) {
- rout[i] = MPIU_Malloc(rout_sizes[i] * sizeof(int));
+ rout[i] = MPL_malloc(rout_sizes[i] * sizeof(int));
}
}
@@ -219,15 +218,15 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
for (i = 0; i < n; ++i) {
/* TODO add this assert as proper error checking above */
int s_rank = sources[i];
- MPIU_Assert(s_rank < comm_size);
- MPIU_Assert(s_rank >= 0);
+ MPIR_Assert(s_rank < comm_size);
+ MPIR_Assert(s_rank >= 0);
for (j = 0; j < degrees[i]; ++j) {
int d_rank = destinations[idx];
int weight = (weights == MPI_UNWEIGHTED ? 0 : weights[idx]);
/* TODO add this assert as proper error checking above */
- MPIU_Assert(d_rank < comm_size);
- MPIU_Assert(d_rank >= 0);
+ MPIR_Assert(d_rank < comm_size);
+ MPIR_Assert(d_rank >= 0);
/* XXX DJG what about self-edges? do we need to drop one of these
* cases when there is a self-edge to avoid double-counting? */
@@ -250,28 +249,28 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
for (i = 0; i < comm_size; ++i) {
/* sanity check that all arrays are fully populated*/
- MPIU_Assert(rin_idx[i] == rin_sizes[i]);
- MPIU_Assert(rout_idx[i] == rout_sizes[i]);
+ MPIR_Assert(rin_idx[i] == rin_sizes[i]);
+ MPIR_Assert(rout_idx[i] == rout_sizes[i]);
}
- MPIU_CHKLMEM_MALLOC(rs, int *, 2*comm_size*sizeof(int), mpi_errno, "red-scat source buffer");
+ MPIR_CHKLMEM_MALLOC(rs, int *, 2*comm_size*sizeof(int), mpi_errno, "red-scat source buffer");
for (i = 0; i < comm_size; ++i) {
rs[2*i] = (rin_sizes[i] ? 1 : 0);
rs[2*i+1] = (rout_sizes[i] ? 1 : 0);
}
/* compute the number of peers I will recv from */
- mpi_errno = MPIR_Reduce_scatter_block_impl(rs, in_out_peers, 2, MPI_INT, MPI_SUM, comm_ptr, &errflag);
+ mpi_errno = MPID_Reduce_scatter_block(rs, in_out_peers, 2, MPI_INT, MPI_SUM, comm_ptr, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
- MPIU_Assert(in_out_peers[0] <= comm_size && in_out_peers[0] >= 0);
- MPIU_Assert(in_out_peers[1] <= comm_size && in_out_peers[1] >= 0);
+ MPIR_Assert(in_out_peers[0] <= comm_size && in_out_peers[0] >= 0);
+ MPIR_Assert(in_out_peers[1] <= comm_size && in_out_peers[1] >= 0);
idx = 0;
/* must be 2*comm_size requests because we will possibly send inbound and
* outbound edges to everyone in our communicator */
- MPIU_CHKLMEM_MALLOC(reqs, MPID_Request **, 2*comm_size*sizeof(MPID_Request *), mpi_errno, "temp request array");
+ MPIR_CHKLMEM_MALLOC(reqs, MPIR_Request **, 2*comm_size*sizeof(MPIR_Request *), mpi_errno, "temp request array");
for (i = 0; i < comm_size; ++i) {
if (rin_sizes[i]) {
/* send edges where i is a destination to process i */
@@ -284,10 +283,10 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
- MPIU_Assert(idx <= (2 * comm_size));
+ MPIR_Assert(idx <= (2 * comm_size));
/* Create the topology structure */
- MPIU_CHKPMEM_MALLOC(topo_ptr, MPIR_Topology *, sizeof(MPIR_Topology), mpi_errno, "topo_ptr");
+ MPIR_CHKPMEM_MALLOC(topo_ptr, MPIR_Topology *, sizeof(MPIR_Topology), mpi_errno, "topo_ptr");
topo_ptr->kind = MPI_DIST_GRAPH;
dist_graph_ptr = &topo_ptr->topo.dist_graph;
dist_graph_ptr->indegree = 0;
@@ -300,13 +299,13 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
/* can't use CHKPMEM macros for this b/c we need to realloc */
in_capacity = 10; /* arbitrary */
- dist_graph_ptr->in = MPIU_Malloc(in_capacity*sizeof(int));
+ dist_graph_ptr->in = MPL_malloc(in_capacity*sizeof(int));
if (dist_graph_ptr->is_weighted)
- dist_graph_ptr->in_weights = MPIU_Malloc(in_capacity*sizeof(int));
+ dist_graph_ptr->in_weights = MPL_malloc(in_capacity*sizeof(int));
out_capacity = 10; /* arbitrary */
- dist_graph_ptr->out = MPIU_Malloc(out_capacity*sizeof(int));
+ dist_graph_ptr->out = MPL_malloc(out_capacity*sizeof(int));
if (dist_graph_ptr->is_weighted)
- dist_graph_ptr->out_weights = MPIU_Malloc(out_capacity*sizeof(int));
+ dist_graph_ptr->out_weights = MPL_malloc(out_capacity*sizeof(int));
for (i = 0; i < in_out_peers[0]; ++i) {
MPI_Status status;
@@ -319,7 +318,7 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
/* can't use CHKLMEM macros b/c we are in a loop */
/* FIXME: Why not - there is only one allocated at a time. Is it only
that there is no defined macro to pop and free an item? */
- buf = MPIU_Malloc(count*sizeof(int));
+ buf = MPL_malloc(count*sizeof(int));
MPIR_ERR_CHKANDJUMP(!buf, mpi_errno, MPI_ERR_OTHER, "**nomem");
mpi_errno = MPIC_Recv(buf, count, MPI_INT, MPI_ANY_SOURCE, MPIR_TOPO_A_TAG, comm_ptr, MPI_STATUS_IGNORE, &errflag);
@@ -331,16 +330,16 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
if (deg >= in_capacity) {
in_capacity *= 2;
/* FIXME: buf is never freed on error! */
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->in, in_capacity*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->in, in_capacity*sizeof(int), mpi_errno);
if (dist_graph_ptr->is_weighted)
/* FIXME: buf is never freed on error! */
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->in_weights, in_capacity*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->in_weights, in_capacity*sizeof(int), mpi_errno);
}
dist_graph_ptr->in[deg] = buf[2*j];
if (dist_graph_ptr->is_weighted)
dist_graph_ptr->in_weights[deg] = buf[2*j+1];
}
- MPIU_Free(buf);
+ MPL_free(buf);
}
for (i = 0; i < in_out_peers[1]; ++i) {
@@ -353,7 +352,7 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
MPIR_Get_count_impl(&status, MPI_INT, &count);
/* can't use CHKLMEM macros b/c we are in a loop */
/* Why not? */
- buf = MPIU_Malloc(count*sizeof(int));
+ buf = MPL_malloc(count*sizeof(int));
MPIR_ERR_CHKANDJUMP(!buf, mpi_errno, MPI_ERR_OTHER, "**nomem");
mpi_errno = MPIC_Recv(buf, count, MPI_INT, MPI_ANY_SOURCE, MPIR_TOPO_B_TAG, comm_ptr, MPI_STATUS_IGNORE, &errflag);
@@ -365,63 +364,63 @@ int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[],
if (deg >= out_capacity) {
out_capacity *= 2;
/* FIXME: buf is never freed on error! */
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->out, out_capacity*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->out, out_capacity*sizeof(int), mpi_errno);
if (dist_graph_ptr->is_weighted)
/* FIXME: buf is never freed on error! */
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->out_weights, out_capacity*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->out_weights, out_capacity*sizeof(int), mpi_errno);
}
dist_graph_ptr->out[deg] = buf[2*j];
if (dist_graph_ptr->is_weighted)
dist_graph_ptr->out_weights[deg] = buf[2*j+1];
}
- MPIU_Free(buf);
+ MPL_free(buf);
}
mpi_errno = MPIC_Waitall(idx, reqs, MPI_STATUSES_IGNORE, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* remove any excess memory allocation */
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->in, dist_graph_ptr->indegree*sizeof(int), mpi_errno);
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->out, dist_graph_ptr->outdegree*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->in, dist_graph_ptr->indegree*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->out, dist_graph_ptr->outdegree*sizeof(int), mpi_errno);
if (dist_graph_ptr->is_weighted) {
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->in_weights, dist_graph_ptr->indegree*sizeof(int), mpi_errno);
- MPIU_REALLOC_ORJUMP(dist_graph_ptr->out_weights, dist_graph_ptr->outdegree*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->in_weights, dist_graph_ptr->indegree*sizeof(int), mpi_errno);
+ MPIR_REALLOC_ORJUMP(dist_graph_ptr->out_weights, dist_graph_ptr->outdegree*sizeof(int), mpi_errno);
}
mpi_errno = MPIR_Topology_put(comm_dist_graph_ptr, topo_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
- MPID_OBJ_PUBLISH_HANDLE(*comm_dist_graph, comm_dist_graph_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*comm_dist_graph, comm_dist_graph_ptr->handle);
/* ... end of body of routine ... */
fn_exit:
for (i = 0; i < comm_size; ++i) {
if (rin[i])
- MPIU_Free(rin[i]);
+ MPL_free(rin[i]);
if (rout[i])
- MPIU_Free(rout[i]);
+ MPL_free(rout[i]);
}
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_DIST_GRAPH_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_DIST_GRAPH_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
if (dist_graph_ptr && dist_graph_ptr->in)
- MPIU_Free(dist_graph_ptr->in);
+ MPL_free(dist_graph_ptr->in);
if (dist_graph_ptr && dist_graph_ptr->in_weights)
- MPIU_Free(dist_graph_ptr->in_weights);
+ MPL_free(dist_graph_ptr->in_weights);
if (dist_graph_ptr && dist_graph_ptr->out)
- MPIU_Free(dist_graph_ptr->out);
+ MPL_free(dist_graph_ptr->out);
if (dist_graph_ptr && dist_graph_ptr->out_weights)
- MPIU_Free(dist_graph_ptr->out_weights);
- MPIU_CHKPMEM_REAP();
+ MPL_free(dist_graph_ptr->out_weights);
+ MPIR_CHKPMEM_REAP();
#ifdef HAVE_ERROR_CHECKING
mpi_errno = MPIR_Err_create_code(
mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
diff --git a/src/mpi/topo/dist_gr_create_adj.c b/src/mpi/topo/dist_gr_create_adj.c
index bdf066b..1c5b4e1 100644
--- a/src/mpi/topo/dist_gr_create_adj.c
+++ b/src/mpi/topo/dist_gr_create_adj.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Dist_graph_create_adjacent */
#if defined(HAVE_PRAGMA_WEAK)
@@ -75,17 +74,17 @@ int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old,
MPI_Info info, int reorder, MPI_Comm *comm_dist_graph)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm *comm_dist_graph_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_dist_graph_ptr = NULL;
MPIR_Topology *topo_ptr = NULL;
- MPIR_Dist_graph_topology *dist_graph_ptr = NULL;
- MPIU_CHKPMEM_DECL(5);
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_CREATE_ADJACENT);
+ MPII_Dist_graph_topology *dist_graph_ptr = NULL;
+ MPIR_CHKPMEM_DECL(5);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_CREATE_ADJACENT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_DIST_GRAPH_CREATE_ADJACENT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_DIST_GRAPH_CREATE_ADJACENT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -100,7 +99,7 @@ int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm_old, comm_ptr);
+ MPIR_Comm_get_ptr(comm_old, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -108,7 +107,7 @@ int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
if (comm_ptr) {
@@ -147,11 +146,11 @@ int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old,
/* following the spirit of the old topo interface, attributes do not
* propagate to the new communicator (see MPI-2.1 pp. 243 line 11) */
- mpi_errno = MPIR_Comm_copy(comm_ptr, comm_ptr->local_size, &comm_dist_graph_ptr);
+ mpi_errno = MPII_Comm_copy(comm_ptr, comm_ptr->local_size, &comm_dist_graph_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Create the topology structure */
- MPIU_CHKPMEM_MALLOC(topo_ptr, MPIR_Topology *, sizeof(MPIR_Topology), mpi_errno, "topo_ptr");
+ MPIR_CHKPMEM_MALLOC(topo_ptr, MPIR_Topology *, sizeof(MPIR_Topology), mpi_errno, "topo_ptr");
topo_ptr->kind = MPI_DIST_GRAPH;
dist_graph_ptr = &topo_ptr->topo.dist_graph;
dist_graph_ptr->indegree = indegree;
@@ -162,32 +161,32 @@ int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old,
dist_graph_ptr->out_weights = NULL;
dist_graph_ptr->is_weighted = (sourceweights != MPI_UNWEIGHTED);
- MPIU_CHKPMEM_MALLOC(dist_graph_ptr->in, int *, indegree*sizeof(int), mpi_errno, "dist_graph_ptr->in");
- MPIU_CHKPMEM_MALLOC(dist_graph_ptr->out, int *, outdegree*sizeof(int), mpi_errno, "dist_graph_ptr->out");
- MPIU_Memcpy(dist_graph_ptr->in, sources, indegree*sizeof(int));
- MPIU_Memcpy(dist_graph_ptr->out, destinations, outdegree*sizeof(int));
+ MPIR_CHKPMEM_MALLOC(dist_graph_ptr->in, int *, indegree*sizeof(int), mpi_errno, "dist_graph_ptr->in");
+ MPIR_CHKPMEM_MALLOC(dist_graph_ptr->out, int *, outdegree*sizeof(int), mpi_errno, "dist_graph_ptr->out");
+ MPIR_Memcpy(dist_graph_ptr->in, sources, indegree*sizeof(int));
+ MPIR_Memcpy(dist_graph_ptr->out, destinations, outdegree*sizeof(int));
if (dist_graph_ptr->is_weighted) {
- MPIU_CHKPMEM_MALLOC(dist_graph_ptr->in_weights, int *, indegree*sizeof(int), mpi_errno, "dist_graph_ptr->in_weights");
- MPIU_CHKPMEM_MALLOC(dist_graph_ptr->out_weights, int *, outdegree*sizeof(int), mpi_errno, "dist_graph_ptr->out_weights");
- MPIU_Memcpy(dist_graph_ptr->in_weights, sourceweights, indegree*sizeof(int));
- MPIU_Memcpy(dist_graph_ptr->out_weights, destweights, outdegree*sizeof(int));
+ MPIR_CHKPMEM_MALLOC(dist_graph_ptr->in_weights, int *, indegree*sizeof(int), mpi_errno, "dist_graph_ptr->in_weights");
+ MPIR_CHKPMEM_MALLOC(dist_graph_ptr->out_weights, int *, outdegree*sizeof(int), mpi_errno, "dist_graph_ptr->out_weights");
+ MPIR_Memcpy(dist_graph_ptr->in_weights, sourceweights, indegree*sizeof(int));
+ MPIR_Memcpy(dist_graph_ptr->out_weights, destweights, outdegree*sizeof(int));
}
mpi_errno = MPIR_Topology_put(comm_dist_graph_ptr, topo_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPID_OBJ_PUBLISH_HANDLE(*comm_dist_graph, comm_dist_graph_ptr->handle);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_OBJ_PUBLISH_HANDLE(*comm_dist_graph, comm_dist_graph_ptr->handle);
+ MPIR_CHKPMEM_COMMIT();
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_DIST_GRAPH_CREATE_ADJACENT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_DIST_GRAPH_CREATE_ADJACENT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
#ifdef HAVE_ERROR_CHECKING
mpi_errno = MPIR_Err_create_code(
mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
diff --git a/src/mpi/topo/dist_gr_neighb.c b/src/mpi/topo/dist_gr_neighb.c
index 01304ec..fa7811e 100644
--- a/src/mpi/topo/dist_gr_neighb.c
+++ b/src/mpi/topo/dist_gr_neighb.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Dist_graph_neighbors */
#if defined(HAVE_PRAGMA_WEAK)
@@ -33,7 +32,7 @@ int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int sources[], int
#define FUNCNAME MPIR_Dist_graph_neighbors_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Dist_graph_neighbors_impl(MPID_Comm *comm_ptr,
+int MPIR_Dist_graph_neighbors_impl(MPIR_Comm *comm_ptr,
int maxindegree, int sources[], int sourceweights[],
int maxoutdegree, int destinations[], int destweights[])
{
@@ -43,14 +42,14 @@ int MPIR_Dist_graph_neighbors_impl(MPID_Comm *comm_ptr,
topo_ptr = MPIR_Topology_get(comm_ptr);
MPIR_ERR_CHKANDJUMP(!topo_ptr || topo_ptr->kind != MPI_DIST_GRAPH, mpi_errno, MPI_ERR_TOPOLOGY, "**notdistgraphtopo");
- MPIU_Memcpy(sources, topo_ptr->topo.dist_graph.in, maxindegree*sizeof(int));
- MPIU_Memcpy(destinations, topo_ptr->topo.dist_graph.out, maxoutdegree*sizeof(int));
+ MPIR_Memcpy(sources, topo_ptr->topo.dist_graph.in, maxindegree*sizeof(int));
+ MPIR_Memcpy(destinations, topo_ptr->topo.dist_graph.out, maxoutdegree*sizeof(int));
if (sourceweights != MPI_UNWEIGHTED && topo_ptr->topo.dist_graph.is_weighted) {
- MPIU_Memcpy(sourceweights, topo_ptr->topo.dist_graph.in_weights, maxindegree*sizeof(int));
+ MPIR_Memcpy(sourceweights, topo_ptr->topo.dist_graph.in_weights, maxindegree*sizeof(int));
}
if (destweights != MPI_UNWEIGHTED && topo_ptr->topo.dist_graph.is_weighted) {
- MPIU_Memcpy(destweights, topo_ptr->topo.dist_graph.out_weights, maxoutdegree*sizeof(int));
+ MPIR_Memcpy(destweights, topo_ptr->topo.dist_graph.out_weights, maxoutdegree*sizeof(int));
}
fn_exit:
@@ -91,14 +90,14 @@ int MPI_Dist_graph_neighbors(MPI_Comm comm,
int maxoutdegree, int destinations[], int destweights[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* FIXME: Why does this routine need a CS */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -112,7 +111,7 @@ int MPI_Dist_graph_neighbors(MPI_Comm comm,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -143,7 +142,7 @@ int MPI_Dist_graph_neighbors(MPI_Comm comm,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/dist_gr_neighb_count.c b/src/mpi/topo/dist_gr_neighb_count.c
index 239d59f..247b33a 100644
--- a/src/mpi/topo/dist_gr_neighb_count.c
+++ b/src/mpi/topo/dist_gr_neighb_count.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Dist_graph_neighbors_count */
#if defined(HAVE_PRAGMA_WEAK)
@@ -32,7 +31,7 @@ int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree,
#define FUNCNAME MPIR_Dist_graph_neighbors_count_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Dist_graph_neighbors_count_impl(MPID_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted)
+int MPIR_Dist_graph_neighbors_count_impl(MPIR_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Topology *topo_ptr = NULL;
@@ -76,14 +75,14 @@ Output Parameters:
int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* FIXME: Why does this routine require a CS? */
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -97,14 +96,14 @@ int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS;
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(indegree, "indegree", mpi_errno);
@@ -123,7 +122,7 @@ int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_DIST_GRAPH_NEIGHBORS_COUNT);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/graph_get.c b/src/mpi/topo/graph_get.c
index a61e6bb..f0b8646 100644
--- a/src/mpi/topo/graph_get.c
+++ b/src/mpi/topo/graph_get.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Graph_get */
#if defined(HAVE_PRAGMA_WEAK)
@@ -60,14 +59,14 @@ int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges,
{
static const char FCNAME[] = "MPI_Graph_get";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Topology *topo_ptr;
int i, n, *vals;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GRAPH_GET);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GRAPH_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GRAPH_GET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GRAPH_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +80,7 @@ int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -89,7 +88,7 @@ int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
@@ -125,7 +124,7 @@ int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GRAPH_GET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GRAPH_GET);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/graph_map.c b/src/mpi/topo/graph_map.c
index 9e9cd05..863490b 100644
--- a/src/mpi/topo/graph_map.c
+++ b/src/mpi/topo/graph_map.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Graph_map */
#if defined(HAVE_PRAGMA_WEAK)
@@ -25,12 +24,12 @@ int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[]
#ifndef MPICH_MPI_FROM_PMPI
#undef MPI_Graph_map
#define MPI_Graph_map PMPI_Graph_map
-int MPIR_Graph_map( const MPID_Comm *comm_ptr, int nnodes,
+int MPIR_Graph_map( const MPIR_Comm *comm_ptr, int nnodes,
const int indx[] ATTRIBUTE((unused)),
const int edges[] ATTRIBUTE((unused)), int *newrank )
{
- MPIU_UNREFERENCED_ARG(indx);
- MPIU_UNREFERENCED_ARG(edges);
+ MPL_UNREFERENCED_ARG(indx);
+ MPL_UNREFERENCED_ARG(edges);
/* This is the trivial version that does not remap any processes. */
if (comm_ptr->rank < nnodes) {
@@ -46,7 +45,7 @@ int MPIR_Graph_map( const MPID_Comm *comm_ptr, int nnodes,
#define FUNCNAME MPIR_Graph_map_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Graph_map_impl(const MPID_Comm *comm_ptr, int nnodes,
+int MPIR_Graph_map_impl(const MPIR_Comm *comm_ptr, int nnodes,
const int indx[], const int edges[], int *newrank)
{
int mpi_errno = MPI_SUCCESS;
@@ -105,12 +104,12 @@ int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[]
int *newrank)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GRAPH_MAP);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GRAPH_MAP);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GRAPH_MAP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GRAPH_MAP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -124,7 +123,7 @@ int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[]
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -132,7 +131,7 @@ int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[]
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(newrank,"newrank",mpi_errno);
@@ -155,7 +154,7 @@ int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[]
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GRAPH_MAP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GRAPH_MAP);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/graph_nbr.c b/src/mpi/topo/graph_nbr.c
index 83229cb..4fc5a99 100644
--- a/src/mpi/topo/graph_nbr.c
+++ b/src/mpi/topo/graph_nbr.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Graph_neighbors */
#if defined(HAVE_PRAGMA_WEAK)
@@ -32,7 +31,7 @@ int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors
#define FUNCNAME MPIR_Graph_neighbors_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Graph_neighbors_impl(MPID_Comm *comm_ptr, int rank, int maxneighbors, int neighbors[])
+int MPIR_Graph_neighbors_impl(MPIR_Comm *comm_ptr, int rank, int maxneighbors, int neighbors[])
{
int mpi_errno = MPI_SUCCESS;
MPIR_Topology *graph_ptr;
@@ -93,12 +92,12 @@ int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors,
int neighbors[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GRAPH_NEIGHBORS);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GRAPH_NEIGHBORS);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GRAPH_NEIGHBORS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GRAPH_NEIGHBORS);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -112,7 +111,7 @@ int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors,
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -120,7 +119,7 @@ int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors,
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(neighbors,"neighbors",mpi_errno);
@@ -138,7 +137,7 @@ int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GRAPH_NEIGHBORS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GRAPH_NEIGHBORS);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/graphcreate.c b/src/mpi/topo/graphcreate.c
index cbc943d..9f830e6 100644
--- a/src/mpi/topo/graphcreate.c
+++ b/src/mpi/topo/graphcreate.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Graph_create */
#if defined(HAVE_PRAGMA_WEAK)
@@ -42,15 +41,15 @@ int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[], const int
#define FUNCNAME MPIR_Graph_create
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Graph_create( MPID_Comm *comm_ptr, int nnodes,
+int MPIR_Graph_create( MPIR_Comm *comm_ptr, int nnodes,
const int indx[], const int edges[], int reorder,
MPI_Comm *comm_graph)
{
int mpi_errno = MPI_SUCCESS;
int i, nedges;
- MPID_Comm *newcomm_ptr = NULL;
+ MPIR_Comm *newcomm_ptr = NULL;
MPIR_Topology *graph_ptr = NULL;
- MPIU_CHKPMEM_DECL(3);
+ MPIR_CHKPMEM_DECL(3);
/* Set this to null in case there is an error */
*comm_graph = MPI_COMM_NULL;
@@ -72,7 +71,7 @@ int MPIR_Graph_create( MPID_Comm *comm_ptr, int nnodes,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
} else {
/* Just use the first nnodes processes in the communicator */
- mpi_errno = MPIR_Comm_copy( (MPID_Comm *)comm_ptr, nnodes,
+ mpi_errno = MPII_Comm_copy( (MPIR_Comm *)comm_ptr, nnodes,
&newcomm_ptr );
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -86,15 +85,15 @@ int MPIR_Graph_create( MPID_Comm *comm_ptr, int nnodes,
}
nedges = indx[nnodes-1];
- MPIU_CHKPMEM_MALLOC(graph_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
+ MPIR_CHKPMEM_MALLOC(graph_ptr,MPIR_Topology*,sizeof(MPIR_Topology),
mpi_errno,"graph_ptr");
graph_ptr->kind = MPI_GRAPH;
graph_ptr->topo.graph.nnodes = nnodes;
graph_ptr->topo.graph.nedges = nedges;
- MPIU_CHKPMEM_MALLOC(graph_ptr->topo.graph.index,int*,
+ MPIR_CHKPMEM_MALLOC(graph_ptr->topo.graph.index,int*,
nnodes*sizeof(int),mpi_errno,"graph.index");
- MPIU_CHKPMEM_MALLOC(graph_ptr->topo.graph.edges,int*,
+ MPIR_CHKPMEM_MALLOC(graph_ptr->topo.graph.edges,int*,
nedges*sizeof(int),mpi_errno,"graph.edges");
for (i=0; i<nnodes; i++)
graph_ptr->topo.graph.index[i] = indx[i];
@@ -106,7 +105,7 @@ int MPIR_Graph_create( MPID_Comm *comm_ptr, int nnodes,
mpi_errno = MPIR_Topology_put( newcomm_ptr, graph_ptr );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_OBJ_PUBLISH_HANDLE(*comm_graph, newcomm_ptr->handle);
+ MPIR_OBJ_PUBLISH_HANDLE(*comm_graph, newcomm_ptr->handle);
/* ... end of body of routine ... */
@@ -115,7 +114,7 @@ int MPIR_Graph_create( MPID_Comm *comm_ptr, int nnodes,
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
# ifdef HAVE_ERROR_CHECKING
{
mpi_errno = MPIR_Err_create_code(
@@ -126,7 +125,7 @@ int MPIR_Graph_create( MPID_Comm *comm_ptr, int nnodes,
edges, reorder, comm_graph);
}
# endif
- mpi_errno = MPIR_Err_return_comm( (MPID_Comm*)comm_ptr, FCNAME, mpi_errno );
+ mpi_errno = MPIR_Err_return_comm( (MPIR_Comm*)comm_ptr, FCNAME, mpi_errno );
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -172,13 +171,13 @@ int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[],
const int edges[], int reorder, MPI_Comm *comm_graph)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GRAPH_CREATE);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GRAPH_CREATE);
MPIR_ERRTEST_INITIALIZED_ORDIE();
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GRAPH_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GRAPH_CREATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -192,7 +191,7 @@ int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[],
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm_old, comm_ptr );
+ MPIR_Comm_get_ptr( comm_old, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -200,7 +199,7 @@ int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[],
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
if (comm_ptr) {
@@ -309,7 +308,7 @@ int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[],
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GRAPH_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GRAPH_CREATE);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/graphdimsget.c b/src/mpi/topo/graphdimsget.c
index 2a84b86..b04e53b 100644
--- a/src/mpi/topo/graphdimsget.c
+++ b/src/mpi/topo/graphdimsget.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Graphdims_get */
#if defined(HAVE_PRAGMA_WEAK)
@@ -57,13 +56,13 @@ int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
{
static const char FCNAME[] = "MPI_Graphdims_get";
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Topology *topo_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GRAPHDIMS_GET);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GRAPHDIMS_GET);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GRAPHDIMS_GET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GRAPHDIMS_GET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -77,7 +76,7 @@ int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -85,7 +84,7 @@ int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(nnodes, "nnodes", mpi_errno );
@@ -110,7 +109,7 @@ int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GRAPHDIMS_GET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GRAPHDIMS_GET);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/graphnbrcnt.c b/src/mpi/topo/graphnbrcnt.c
index 8d1014d..7e844f0 100644
--- a/src/mpi/topo/graphnbrcnt.c
+++ b/src/mpi/topo/graphnbrcnt.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Graph_neighbors_count */
#if defined(HAVE_PRAGMA_WEAK)
@@ -30,7 +29,7 @@ int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) __attrib
#define FUNCNAME MPIR_Graph_neighbors_count_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Graph_neighbors_count_impl(MPID_Comm *comm_ptr, int rank, int *nneighbors)
+int MPIR_Graph_neighbors_count_impl(MPIR_Comm *comm_ptr, int rank, int *nneighbors)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Topology *graph_ptr;
@@ -85,12 +84,12 @@ Output Parameters:
int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT);
MPIR_ERRTEST_INITIALIZED_ORDIE();
/* Note that this routine does not require a CS_ENTER/EXIT */
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -104,7 +103,7 @@ int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -112,7 +111,7 @@ int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
MPIR_ERRTEST_ARGNULL(nneighbors, "nneighbors", mpi_errno);
/* If comm_ptr is not value, it will be reset to null */
@@ -129,7 +128,7 @@ int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_GRAPH_NEIGHBORS_COUNT);
return mpi_errno;
fn_fail:
diff --git a/src/mpi/topo/inhb_allgather.c b/src/mpi/topo/inhb_allgather.c
index fa4e83d..53de7bc 100644
--- a/src/mpi/topo/inhb_allgather.c
+++ b/src/mpi/topo/inhb_allgather.c
@@ -5,7 +5,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Ineighbor_allgather */
#if defined(HAVE_PRAGMA_WEAK)
@@ -34,45 +33,45 @@ int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sen
#define FUNCNAME MPIR_Ineighbor_allgather_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ineighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int indegree, outdegree, weighted;
int k,l;
int *srcs, *dsts;
MPI_Aint recvtype_extent;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
/* This is the largest offset we add to recvbuf */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(comm_ptr->local_size * recvcount * recvtype_extent));
mpi_errno = MPIR_Topo_canon_nhb_count(comm_ptr, &indegree, &outdegree, &weighted);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
- MPIU_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
+ MPIR_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
+ MPIR_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
mpi_errno = MPIR_Topo_canon_nhb(comm_ptr,
indegree, srcs, MPI_UNWEIGHTED,
outdegree, dsts, MPI_UNWEIGHTED);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
for (k = 0; k < outdegree; ++k) {
- mpi_errno = MPID_Sched_send(sendbuf, sendcount, sendtype, dsts[k], comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendbuf, sendcount, sendtype, dsts[k], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
for (l = 0; l < indegree; ++l) {
char *rb = ((char *)recvbuf) + l * recvcount * recvtype_extent;
- mpi_errno = MPID_Sched_recv(rb, recvcount, recvtype, srcs[l], comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(rb, recvcount, recvtype, srcs[l], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -82,27 +81,27 @@ fn_fail:
#define FUNCNAME MPIR_Ineighbor_allgather_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ineighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
int tag = -1;
- MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Request *reqp = NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ineighbor_allgather != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ineighbor_allgather != NULL);
mpi_errno = comm_ptr->coll_fns->Ineighbor_allgather(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -143,11 +142,11 @@ Output Parameters:
int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLGATHER);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLGATHER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -165,7 +164,7 @@ int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sen
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -173,24 +172,24 @@ int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sen
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request, "request", mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -201,13 +200,13 @@ int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sen
/* ... body of routine ... */
- mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Ineighbor_allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLGATHER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/inhb_allgatherv.c b/src/mpi/topo/inhb_allgatherv.c
index ba73a37..865f1c1 100644
--- a/src/mpi/topo/inhb_allgatherv.c
+++ b/src/mpi/topo/inhb_allgatherv.c
@@ -5,7 +5,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Ineighbor_allgatherv */
#if defined(HAVE_PRAGMA_WEAK)
@@ -34,7 +33,7 @@ int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype se
#define FUNCNAME MPIR_Ineighbor_allgatherv_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ineighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int indegree, outdegree, weighted;
@@ -42,41 +41,41 @@ int MPIR_Ineighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Da
int *srcs, *dsts;
int comm_size;
MPI_Aint recvtype_extent;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
comm_size = comm_ptr->local_size;
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
for (i = 0; i < comm_size; ++i) {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(displs[i] * recvtype_extent));
}
mpi_errno = MPIR_Topo_canon_nhb_count(comm_ptr, &indegree, &outdegree, &weighted);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
- MPIU_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
+ MPIR_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
+ MPIR_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
mpi_errno = MPIR_Topo_canon_nhb(comm_ptr,
indegree, srcs, MPI_UNWEIGHTED,
outdegree, dsts, MPI_UNWEIGHTED);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
for (k = 0; k < outdegree; ++k) {
- mpi_errno = MPID_Sched_send(sendbuf, sendcount, sendtype, dsts[k], comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sendbuf, sendcount, sendtype, dsts[k], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
for (l = 0; l < indegree; ++l) {
char *rb = ((char *)recvbuf) + displs[l] * recvtype_extent;
- mpi_errno = MPID_Sched_recv(rb, recvcounts[l], recvtype, srcs[l], comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(rb, recvcounts[l], recvtype, srcs[l], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -86,27 +85,27 @@ fn_fail:
#define FUNCNAME MPIR_Ineighbor_allgatherv_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ineighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
int tag = -1;
- MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Request *reqp = NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ineighbor_allgatherv != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ineighbor_allgatherv != NULL);
mpi_errno = comm_ptr->coll_fns->Ineighbor_allgatherv(sendbuf, sendcount, sendtype,
recvbuf, recvcounts, displs, recvtype,
comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -148,11 +147,11 @@ Output Parameters:
int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLGATHERV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLGATHERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -170,7 +169,7 @@ int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype se
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -178,24 +177,24 @@ int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype se
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request, "request", mpi_errno);
@@ -207,13 +206,13 @@ int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype se
/* ... body of routine ... */
- mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Ineighbor_allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLGATHERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/inhb_alltoall.c b/src/mpi/topo/inhb_alltoall.c
index 3a0590e..f06a392 100644
--- a/src/mpi/topo/inhb_alltoall.c
+++ b/src/mpi/topo/inhb_alltoall.c
@@ -5,7 +5,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Ineighbor_alltoall */
#if defined(HAVE_PRAGMA_WEAK)
@@ -34,29 +33,29 @@ int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype send
#define FUNCNAME MPIR_Ineighbor_alltoall_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ineighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int indegree, outdegree, weighted;
int k,l;
int *srcs, *dsts;
MPI_Aint sendtype_extent, recvtype_extent;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
MPID_Datatype_get_extent_macro(sendtype, sendtype_extent);
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
/* This is the largest offset we add to sendbuf */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
(comm_ptr->local_size * sendcount * sendtype_extent));
/* This is the largest offset we add to recvbuf */
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(comm_ptr->local_size * recvcount * recvtype_extent));
mpi_errno = MPIR_Topo_canon_nhb_count(comm_ptr, &indegree, &outdegree, &weighted);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
- MPIU_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
+ MPIR_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
+ MPIR_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
mpi_errno = MPIR_Topo_canon_nhb(comm_ptr,
indegree, srcs, MPI_UNWEIGHTED,
outdegree, dsts, MPI_UNWEIGHTED);
@@ -64,20 +63,20 @@ int MPIR_Ineighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Data
for (k = 0; k < outdegree; ++k) {
char *sb = ((char *)sendbuf) + k * sendcount * sendtype_extent;
- mpi_errno = MPID_Sched_send(sb, sendcount, sendtype, dsts[k], comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sb, sendcount, sendtype, dsts[k], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
for (l = 0; l < indegree; ++l) {
char *rb = ((char *)recvbuf) + l * recvcount * recvtype_extent;
- mpi_errno = MPID_Sched_recv(rb, recvcount, recvtype, srcs[l], comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(rb, recvcount, recvtype, srcs[l], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -87,27 +86,27 @@ fn_fail:
#define FUNCNAME MPIR_Ineighbor_alltoall_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ineighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
int tag = -1;
- MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Request *reqp = NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ineighbor_alltoall != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ineighbor_alltoall != NULL);
mpi_errno = comm_ptr->coll_fns->Ineighbor_alltoall(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -149,11 +148,11 @@ Output Parameters:
int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLTOALL);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLTOALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -171,7 +170,7 @@ int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype send
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -179,24 +178,24 @@ int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype send
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request, "request", mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
@@ -207,13 +206,13 @@ int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype send
/* ... body of routine ... */
- mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Ineighbor_alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLTOALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/inhb_alltoallv.c b/src/mpi/topo/inhb_alltoallv.c
index 8e0f91a..255499b 100644
--- a/src/mpi/topo/inhb_alltoallv.c
+++ b/src/mpi/topo/inhb_alltoallv.c
@@ -5,7 +5,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Ineighbor_alltoallv */
#if defined(HAVE_PRAGMA_WEAK)
@@ -35,7 +34,7 @@ int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const i
#define FUNCNAME MPIR_Ineighbor_alltoallv_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ineighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int indegree, outdegree, weighted;
@@ -43,7 +42,7 @@ int MPIR_Ineighbor_alltoallv_default(const void *sendbuf, const int sendcounts[]
int *srcs, *dsts;
int comm_size;
MPI_Aint sendtype_extent, recvtype_extent;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
comm_size = comm_ptr->local_size;
@@ -51,16 +50,16 @@ int MPIR_Ineighbor_alltoallv_default(const void *sendbuf, const int sendcounts[]
MPID_Datatype_get_extent_macro(recvtype, recvtype_extent);
for (i = 0; i < comm_size; ++i) {
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf +
(sdispls[i] * sendtype_extent));
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
(rdispls[i] * recvtype_extent));
}
mpi_errno = MPIR_Topo_canon_nhb_count(comm_ptr, &indegree, &outdegree, &weighted);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
- MPIU_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
+ MPIR_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
+ MPIR_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
mpi_errno = MPIR_Topo_canon_nhb(comm_ptr,
indegree, srcs, MPI_UNWEIGHTED,
outdegree, dsts, MPI_UNWEIGHTED);
@@ -68,20 +67,20 @@ int MPIR_Ineighbor_alltoallv_default(const void *sendbuf, const int sendcounts[]
for (k = 0; k < outdegree; ++k) {
char *sb = ((char *)sendbuf) + sdispls[k] * sendtype_extent;
- mpi_errno = MPID_Sched_send(sb, sendcounts[k], sendtype, dsts[k], comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sb, sendcounts[k], sendtype, dsts[k], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
for (l = 0; l < indegree; ++l) {
char *rb = ((char *)recvbuf) + rdispls[l] * recvtype_extent;
- mpi_errno = MPID_Sched_recv(rb, recvcounts[l], recvtype, srcs[l], comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(rb, recvcounts[l], recvtype, srcs[l], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -91,27 +90,27 @@ fn_fail:
#define FUNCNAME MPIR_Ineighbor_alltoallv_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ineighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
int tag = -1;
- MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Request *reqp = NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ineighbor_alltoallv != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ineighbor_alltoallv != NULL);
mpi_errno = comm_ptr->coll_fns->Ineighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype,
recvbuf, recvcounts, rdispls, recvtype,
comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -154,11 +153,11 @@ Output Parameters:
int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLTOALLV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLTOALLV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -176,7 +175,7 @@ int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const i
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -184,24 +183,24 @@ int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const i
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
MPIR_ERRTEST_ARGNULL(request, "request", mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
}
@@ -211,13 +210,13 @@ int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const i
/* ... body of routine ... */
- mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, request);
+ mpi_errno = MPID_Ineighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLTOALLV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/inhb_alltoallw.c b/src/mpi/topo/inhb_alltoallw.c
index 8ad41c5..e9b2d1d 100644
--- a/src/mpi/topo/inhb_alltoallw.c
+++ b/src/mpi/topo/inhb_alltoallw.c
@@ -5,7 +5,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Ineighbor_alltoallw */
#if defined(HAVE_PRAGMA_WEAK)
@@ -34,18 +33,18 @@ int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
#define FUNCNAME MPIR_Ineighbor_alltoallw_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr, MPID_Sched_t s)
+int MPIR_Ineighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr, MPIR_Sched_t s)
{
int mpi_errno = MPI_SUCCESS;
int indegree, outdegree, weighted;
int k,l;
int *srcs, *dsts;
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
mpi_errno = MPIR_Topo_canon_nhb_count(comm_ptr, &indegree, &outdegree, &weighted);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
- MPIU_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
+ MPIR_CHKLMEM_MALLOC(srcs, int *, indegree*sizeof(int), mpi_errno, "srcs");
+ MPIR_CHKLMEM_MALLOC(dsts, int *, outdegree*sizeof(int), mpi_errno, "dsts");
mpi_errno = MPIR_Topo_canon_nhb(comm_ptr,
indegree, srcs, MPI_UNWEIGHTED,
outdegree, dsts, MPI_UNWEIGHTED);
@@ -53,26 +52,26 @@ int MPIR_Ineighbor_alltoallw_default(const void *sendbuf, const int sendcounts[]
for (k = 0; k < outdegree; ++k) {
char *sb;
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT sendbuf + sdispls[k]);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT sendbuf + sdispls[k]);
sb = ((char *)sendbuf) + sdispls[k];
- mpi_errno = MPID_Sched_send(sb, sendcounts[k], sendtypes[k], dsts[k], comm_ptr, s);
+ mpi_errno = MPIR_Sched_send(sb, sendcounts[k], sendtypes[k], dsts[k], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
for (l = 0; l < indegree; ++l) {
char *rb;
- MPIU_Ensure_Aint_fits_in_pointer(MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf + rdispls[l]);
+ MPIR_Ensure_Aint_fits_in_pointer(MPIR_VOID_PTR_CAST_TO_MPI_AINT recvbuf + rdispls[l]);
rb = ((char *)recvbuf) + rdispls[l];
- mpi_errno = MPID_Sched_recv(rb, recvcounts[l], recvtypes[l], srcs[l], comm_ptr, s);
+ mpi_errno = MPIR_Sched_recv(rb, recvcounts[l], recvtypes[l], srcs[l], comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPID_SCHED_BARRIER(s);
+ MPIR_SCHED_BARRIER(s);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -82,27 +81,27 @@ fn_fail:
#define FUNCNAME MPIR_Ineighbor_alltoallw_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Ineighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr, MPI_Request *request)
+int MPIR_Ineighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
int tag = -1;
- MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
+ MPIR_Request *reqp = NULL;
+ MPIR_Sched_t s = MPIR_SCHED_NULL;
*request = MPI_REQUEST_NULL;
- mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
+ mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_create(&s);
+ mpi_errno = MPIR_Sched_create(&s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ineighbor_alltoallw != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Ineighbor_alltoallw != NULL);
mpi_errno = comm_ptr->coll_fns->Ineighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes,
recvbuf, recvcounts, rdispls, recvtypes,
comm_ptr, s);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
+ mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, &reqp);
if (reqp)
*request = reqp->handle;
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -145,11 +144,11 @@ Output Parameters:
int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_INEIGHBOR_ALLTOALLW);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_INEIGHBOR_ALLTOALLW);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -166,14 +165,14 @@ int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[], const M
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
MPIR_ERRTEST_ARGNULL(request, "request", mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
@@ -184,13 +183,13 @@ int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[], const M
/* ... body of routine ... */
- mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, request);
+ mpi_errno = MPID_Ineighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, request);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_INEIGHBOR_ALLTOALLW);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/nhb_allgather.c b/src/mpi/topo/nhb_allgather.c
index d5d76e8..d5a1d39 100644
--- a/src/mpi/topo/nhb_allgather.c
+++ b/src/mpi/topo/nhb_allgather.c
@@ -32,13 +32,13 @@ int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype send
#define FUNCNAME MPIR_Neighbor_allgather_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_allgather_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPI_Request req;
/* just call the nonblocking version and wait on it */
- mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &req);
+ mpi_errno = MPID_Ineighbor_allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &req);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = MPIR_Wait_impl(&req, MPI_STATUS_IGNORE);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -53,12 +53,12 @@ fn_fail:
#define FUNCNAME MPIR_Neighbor_allgather_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_allgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Neighbor_allgather != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Neighbor_allgather != NULL);
mpi_errno = comm_ptr->coll_fns->Neighbor_allgather(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
comm_ptr);
@@ -103,11 +103,11 @@ Output Parameters:
int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLGATHER);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLGATHER);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -125,7 +125,7 @@ int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype send
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -133,20 +133,20 @@ int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype send
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -156,13 +156,13 @@ int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype send
/* ... body of routine ... */
- mpi_errno = MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr);
+ mpi_errno = MPID_Neighbor_allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLGATHER);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/nhb_allgatherv.c b/src/mpi/topo/nhb_allgatherv.c
index 5b6d803..fbe762d 100644
--- a/src/mpi/topo/nhb_allgatherv.c
+++ b/src/mpi/topo/nhb_allgatherv.c
@@ -33,14 +33,14 @@ int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sen
#define FUNCNAME MPIR_Neighbor_allgatherv_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_allgatherv_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPI_Request req;
/* just call the nonblocking version and wait on it */
- mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ mpi_errno = MPID_Ineighbor_allgatherv(sendbuf, sendcount, sendtype,
recvbuf, recvcounts, displs, recvtype,
comm_ptr, &req);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -57,12 +57,12 @@ fn_fail:
#define FUNCNAME MPIR_Neighbor_allgatherv_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_allgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Neighbor_allgatherv != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Neighbor_allgatherv != NULL);
mpi_errno = comm_ptr->coll_fns->Neighbor_allgatherv(sendbuf, sendcount, sendtype,
recvbuf, recvcounts, displs, recvtype,
comm_ptr);
@@ -104,11 +104,11 @@ Output Parameters:
int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLGATHERV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLGATHERV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -126,7 +126,7 @@ int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sen
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -134,20 +134,20 @@ int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sen
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -157,13 +157,13 @@ int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sen
/* ... body of routine ... */
- mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr);
+ mpi_errno = MPID_Neighbor_allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLGATHERV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/nhb_alltoall.c b/src/mpi/topo/nhb_alltoall.c
index 38507da..ffb6dba 100644
--- a/src/mpi/topo/nhb_alltoall.c
+++ b/src/mpi/topo/nhb_alltoall.c
@@ -32,13 +32,13 @@ int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendt
#define FUNCNAME MPIR_Neighbor_alltoall_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_alltoall_default(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPI_Request req;
/* just call the nonblocking version and wait on it */
- mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ mpi_errno = MPID_Ineighbor_alltoall(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
comm_ptr, &req);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -55,12 +55,12 @@ fn_fail:
#define FUNCNAME MPIR_Neighbor_alltoall_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_alltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Neighbor_alltoall != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Neighbor_alltoall != NULL);
mpi_errno = comm_ptr->coll_fns->Neighbor_alltoall(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
comm_ptr);
@@ -107,11 +107,11 @@ Output Parameters:
int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLTOALL);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLTOALL);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -129,7 +129,7 @@ int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendt
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -137,20 +137,20 @@ int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendt
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -160,13 +160,13 @@ int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* ... body of routine ... */
- mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr);
+ mpi_errno = MPID_Neighbor_alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLTOALL);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/nhb_alltoallv.c b/src/mpi/topo/nhb_alltoallv.c
index 797abe8..d0a1b9f 100644
--- a/src/mpi/topo/nhb_alltoallv.c
+++ b/src/mpi/topo/nhb_alltoallv.c
@@ -33,13 +33,13 @@ int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const in
#define FUNCNAME MPIR_Neighbor_alltoallv_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_alltoallv_default(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPI_Request req;
/* just call the nonblocking version and wait on it */
- mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, &req);
+ mpi_errno = MPID_Ineighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, &req);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = MPIR_Wait_impl(&req, MPI_STATUS_IGNORE);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -54,12 +54,12 @@ fn_fail:
#define FUNCNAME MPIR_Neighbor_alltoallv_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPID_Comm *comm_ptr)
+int MPIR_Neighbor_alltoallv_impl(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Neighbor_alltoallv != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Neighbor_alltoallv != NULL);
mpi_errno = comm_ptr->coll_fns->Neighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype,
recvbuf, recvcounts, rdispls, recvtype,
comm_ptr);
@@ -102,11 +102,11 @@ Output Parameters:
int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLTOALLV);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLTOALLV);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -124,7 +124,7 @@ int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const in
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -132,20 +132,20 @@ int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const in
MPID_BEGIN_ERROR_CHECKS
{
if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
+ MPIR_Datatype *sendtype_ptr = NULL;
MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
}
if (HANDLE_GET_KIND(recvtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *recvtype_ptr = NULL;
+ MPIR_Datatype *recvtype_ptr = NULL;
MPID_Datatype_get_ptr(recvtype, recvtype_ptr);
- MPID_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
+ MPIR_Datatype_valid_ptr(recvtype_ptr, mpi_errno);
MPID_Datatype_committed_ptr(recvtype_ptr, mpi_errno);
}
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -155,13 +155,13 @@ int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const in
/* ... body of routine ... */
- mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr);
+ mpi_errno = MPID_Neighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLTOALLV);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/nhb_alltoallw.c b/src/mpi/topo/nhb_alltoallw.c
index 53a8987..0e1f2d3 100644
--- a/src/mpi/topo/nhb_alltoallw.c
+++ b/src/mpi/topo/nhb_alltoallw.c
@@ -32,13 +32,13 @@ int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MP
#define FUNCNAME MPIR_Neighbor_alltoallw_default
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr)
+int MPIR_Neighbor_alltoallw_default(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPI_Request req;
/* just call the nonblocking version and wait on it */
- mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, &req);
+ mpi_errno = MPID_Ineighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, &req);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = MPIR_Wait_impl(&req, MPI_STATUS_IGNORE);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -53,12 +53,12 @@ fn_fail:
#define FUNCNAME MPIR_Neighbor_alltoallw_impl
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Neighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPID_Comm *comm_ptr)
+int MPIR_Neighbor_alltoallw_impl(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Neighbor_alltoallw != NULL);
+ MPIR_Assert(comm_ptr->coll_fns != NULL);
+ MPIR_Assert(comm_ptr->coll_fns->Neighbor_alltoallw != NULL);
mpi_errno = comm_ptr->coll_fns->Neighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes,
recvbuf, recvcounts, rdispls, recvtypes,
comm_ptr);
@@ -102,11 +102,11 @@ Output Parameters:
int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_Comm *comm_ptr = NULL;
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_NEIGHBOR_ALLTOALLW);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_NEIGHBOR_ALLTOALLW);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -123,14 +123,14 @@ int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MP
# endif /* HAVE_ERROR_CHECKING */
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr(comm, comm_ptr);
+ MPIR_Comm_get_ptr(comm, comm_ptr);
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
{
MPID_BEGIN_ERROR_CHECKS
{
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, FALSE );
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
@@ -140,13 +140,13 @@ int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MP
/* ... body of routine ... */
- mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr);
+ mpi_errno = MPID_Neighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_NEIGHBOR_ALLTOALLW);
MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
return mpi_errno;
diff --git a/src/mpi/topo/topo.h b/src/mpi/topo/topo.h
deleted file mode 100644
index 12cc607..0000000
--- a/src/mpi/topo/topo.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-typedef struct MPIR_Graph_topology {
- int nnodes;
- int nedges;
- int *index;
- int *edges;
-} MPIR_Graph_topology;
-
-typedef struct MPIR_Cart_topology {
- int nnodes; /* Product of dims[*], gives the size of the topology */
- int ndims;
- int *dims;
- int *periodic;
- int *position;
-} MPIR_Cart_topology;
-
-typedef struct MPIR_Dist_graph_topology {
- int indegree;
- int *in;
- int *in_weights;
- int outdegree;
- int *out;
- int *out_weights;
- int is_weighted;
-} MPIR_Dist_graph_topology;
-
-typedef struct MPIR_Topology {
- MPIR_Topo_type kind;
- union topo {
- MPIR_Graph_topology graph;
- MPIR_Cart_topology cart;
- MPIR_Dist_graph_topology dist_graph;
- } topo;
-} MPIR_Topology;
-
-MPIR_Topology *MPIR_Topology_get( MPID_Comm * );
-int MPIR_Topology_put( MPID_Comm *, MPIR_Topology * );
-int MPIR_Cart_create( MPID_Comm *, int, const int [],
- const int [], int, MPI_Comm * );
-int MPIR_Graph_create( MPID_Comm *, int,
- const int[], const int[], int,
- MPI_Comm *);
-int MPIR_Dims_create( int, int, int * );
-int MPIR_Graph_map( const MPID_Comm *, int, const int[], const int[], int* );
-int MPIR_Cart_map( const MPID_Comm *, int, const int[], const int[], int* );
-
-/* Returns the canonicalized count of neighbors for the given topology as though
- * MPI_Dist_graph_neighbors_count were called with a distributed graph topology,
- * even if the given topology is actually Cartesian or Graph. Useful for
- * implementing neighborhood collective operations. */
-int MPIR_Topo_canon_nhb_count(MPID_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted);
-
-/* Returns the canonicalized list of neighbors for a given topology, separated
- * into inbound and outbound edges. Equivalent to MPI_Dist_graph_neighbors but
- * works for any topology type by canonicalizing according to the rules in
- * Section 7.6 of the MPI-3.0 standard. */
-int MPIR_Topo_canon_nhb(MPID_Comm *comm_ptr,
- int indegree, int sources[], int inweights[],
- int outdegree, int dests[], int outweights[]);
-
-#define MAX_CART_DIM 16
diff --git a/src/mpi/topo/topo_test.c b/src/mpi/topo/topo_test.c
index 62dbb5d..0775ba3 100644
--- a/src/mpi/topo/topo_test.c
+++ b/src/mpi/topo/topo_test.c
@@ -6,7 +6,6 @@
*/
#include "mpiimpl.h"
-#include "topo.h"
/* -- Begin Profiling Symbol Block for routine MPI_Topo_test */
#if defined(HAVE_PRAGMA_WEAK)
@@ -60,13 +59,13 @@ int MPI_Topo_test(MPI_Comm comm, int *status)
static const char FCNAME[] = "MPI_Topo_test";
#endif
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
MPIR_Topology *topo_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_TOPO_TEST);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_TOPO_TEST);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_TOPO_TEST);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_TOPO_TEST);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -80,7 +79,7 @@ int MPI_Topo_test(MPI_Comm comm, int *status)
# endif
/* Convert MPI object handles to object pointers */
- MPID_Comm_get_ptr( comm, comm_ptr );
+ MPIR_Comm_get_ptr( comm, comm_ptr );
/* Validate parameters and objects (post conversion) */
# ifdef HAVE_ERROR_CHECKING
@@ -88,7 +87,7 @@ int MPI_Topo_test(MPI_Comm comm, int *status)
MPID_BEGIN_ERROR_CHECKS;
{
/* Validate comm_ptr */
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
if (mpi_errno) goto fn_fail;
/* If comm_ptr is not valid, it will be reset to null */
MPIR_ERRTEST_ARGNULL(status, "status", mpi_errno);
@@ -114,7 +113,7 @@ int MPI_Topo_test(MPI_Comm comm, int *status)
#ifdef HAVE_ERROR_CHECKING
fn_exit:
#endif
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TOPO_TEST);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TOPO_TEST);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpi/topo/topoutil.c b/src/mpi/topo/topoutil.c
index 5055673..c5fa116 100644
--- a/src/mpi/topo/topoutil.c
+++ b/src/mpi/topo/topoutil.c
@@ -5,7 +5,6 @@
* See COPYRIGHT in top-level directory.
*/
#include "mpiimpl.h"
-#include "topo.h"
static int unweighted_dummy = 0x46618;
static int weights_empty_dummy = 0x022284;
@@ -26,7 +25,7 @@ static int MPIR_Topology_finalize ( void * );
Return a poiner to the topology structure on a communicator.
Returns null if no topology structure is defined
*/
-MPIR_Topology *MPIR_Topology_get( MPID_Comm *comm_ptr )
+MPIR_Topology *MPIR_Topology_get( MPIR_Comm *comm_ptr )
{
int mpi_errno = MPI_SUCCESS;
MPIR_Topology *topo_ptr;
@@ -36,7 +35,7 @@ MPIR_Topology *MPIR_Topology_get( MPID_Comm *comm_ptr )
return 0;
}
- mpi_errno = MPIR_CommGetAttr(comm_ptr->handle, MPIR_Topology_keyval,
+ mpi_errno = MPII_Comm_get_attr(comm_ptr->handle, MPIR_Topology_keyval,
&topo_ptr, &flag, MPIR_ATTR_PTR );
if (mpi_errno) return NULL;
@@ -49,11 +48,11 @@ MPIR_Topology *MPIR_Topology_get( MPID_Comm *comm_ptr )
#define FUNCNAME MPIR_Topology_put
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Topology_put( MPID_Comm *comm_ptr, MPIR_Topology *topo_ptr )
+int MPIR_Topology_put( MPIR_Comm *comm_ptr, MPIR_Topology *topo_ptr )
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(comm_ptr != NULL);
+ MPIR_Assert(comm_ptr != NULL);
if (MPIR_Topology_keyval == MPI_KEYVAL_INVALID) {
/* Create a new keyval */
@@ -81,7 +80,7 @@ int MPIR_Topology_put( MPID_Comm *comm_ptr, MPIR_Topology *topo_ptr )
static int MPIR_Topology_finalize( void *p ATTRIBUTE((unused)) )
{
- MPIU_UNREFERENCED_ARG(p);
+ MPL_UNREFERENCED_ARG(p);
if (MPIR_Topology_keyval != MPI_KEYVAL_INVALID) {
/* Just in case */
@@ -98,11 +97,11 @@ static int *MPIR_Copy_array( int n, const int a[], int *err )
/* the copy of NULL is NULL */
if (a == NULL) {
- MPIU_Assert(n == 0);
+ MPIR_Assert(n == 0);
return NULL;
}
- new_p = (int *)MPIU_Malloc( n * sizeof(int) );
+ new_p = (int *)MPL_malloc( n * sizeof(int) );
/* --BEGIN ERROR HANDLING-- */
if (!new_p) {
@@ -110,7 +109,7 @@ static int *MPIR_Copy_array( int n, const int a[], int *err )
return 0;
}
/* --END ERROR HANDLING-- */
- MPIU_Memcpy(new_p, a, n * sizeof(int));
+ MPIR_Memcpy(new_p, a, n * sizeof(int));
return new_p;
}
@@ -133,17 +132,19 @@ static int MPIR_Topology_copy_fn ( MPI_Comm comm ATTRIBUTE((unused)),
{
MPIR_Topology *old_topology = (MPIR_Topology *)attr_in;
MPIR_Topology *copy_topology = NULL;
- MPIU_CHKPMEM_DECL(5);
+ MPIR_CHKPMEM_DECL(5);
int mpi_errno = 0;
- MPIU_UNREFERENCED_ARG(comm);
- MPIU_UNREFERENCED_ARG(keyval);
- MPIU_UNREFERENCED_ARG(extra_data);
+ MPL_UNREFERENCED_ARG(comm);
+ MPL_UNREFERENCED_ARG(keyval);
+ MPL_UNREFERENCED_ARG(extra_data);
*flag = 0;
*(void **)attr_out = NULL;
- MPIU_CHKPMEM_MALLOC(copy_topology, MPIR_Topology *, sizeof(MPIR_Topology), mpi_errno, "copy_topology");
+ MPIR_CHKPMEM_MALLOC(copy_topology, MPIR_Topology *, sizeof(MPIR_Topology), mpi_errno, "copy_topology");
+
+ MPL_VG_MEM_INIT(copy_topology, sizeof(MPIR_Topology));
/* simplify copying and error handling */
#define MPIR_ARRAY_COPY_HELPER(kind_,array_field_,count_field_) \
@@ -153,7 +154,7 @@ static int MPIR_Topology_copy_fn ( MPI_Comm comm ATTRIBUTE((unused)),
old_topology->topo.kind_.array_field_, \
&mpi_errno); \
if (mpi_errno) MPIR_ERR_POP(mpi_errno); \
- MPIU_CHKPMEM_REGISTER(copy_topology->topo.kind_.array_field_); \
+ MPIR_CHKPMEM_REGISTER(copy_topology->topo.kind_.array_field_); \
} while (0)
copy_topology->kind = old_topology->kind;
@@ -188,13 +189,13 @@ static int MPIR_Topology_copy_fn ( MPI_Comm comm ATTRIBUTE((unused)),
*(void **)attr_out = (void *)copy_topology;
*flag = 1;
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
/* Return mpi_errno in case one of the copy array functions failed */
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -210,31 +211,31 @@ static int MPIR_Topology_delete_fn ( MPI_Comm comm ATTRIBUTE((unused)),
{
MPIR_Topology *topology = (MPIR_Topology *)attr_val;
- MPIU_UNREFERENCED_ARG(comm);
- MPIU_UNREFERENCED_ARG(keyval);
- MPIU_UNREFERENCED_ARG(extra_data);
+ MPL_UNREFERENCED_ARG(comm);
+ MPL_UNREFERENCED_ARG(keyval);
+ MPL_UNREFERENCED_ARG(extra_data);
/* FIXME - free the attribute data structure */
if (topology->kind == MPI_CART) {
- MPIU_Free( topology->topo.cart.dims );
- MPIU_Free( topology->topo.cart.periodic );
- MPIU_Free( topology->topo.cart.position );
- MPIU_Free( topology );
+ MPL_free( topology->topo.cart.dims );
+ MPL_free( topology->topo.cart.periodic );
+ MPL_free( topology->topo.cart.position );
+ MPL_free( topology );
}
else if (topology->kind == MPI_GRAPH) {
- MPIU_Free( topology->topo.graph.index );
- MPIU_Free( topology->topo.graph.edges );
- MPIU_Free( topology );
+ MPL_free( topology->topo.graph.index );
+ MPL_free( topology->topo.graph.edges );
+ MPL_free( topology );
}
else if (topology->kind == MPI_DIST_GRAPH) {
- MPIU_Free(topology->topo.dist_graph.in);
- MPIU_Free(topology->topo.dist_graph.out);
+ MPL_free(topology->topo.dist_graph.in);
+ MPL_free(topology->topo.dist_graph.out);
if (topology->topo.dist_graph.in_weights)
- MPIU_Free(topology->topo.dist_graph.in_weights);
+ MPL_free(topology->topo.dist_graph.in_weights);
if (topology->topo.dist_graph.out_weights)
- MPIU_Free(topology->topo.dist_graph.out_weights);
- MPIU_Free(topology );
+ MPL_free(topology->topo.dist_graph.out_weights);
+ MPL_free(topology );
}
/* --BEGIN ERROR HANDLING-- */
else {
@@ -272,7 +273,7 @@ static int MPIR_Topology_delete_fn ( MPI_Comm comm ATTRIBUTE((unused)),
#define FUNCNAME MPIR_Topo_canon_nhb_count
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Topo_canon_nhb_count(MPID_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted)
+int MPIR_Topo_canon_nhb_count(MPIR_Comm *comm_ptr, int *indegree, int *outdegree, int *weighted)
{
int mpi_errno = MPI_SUCCESS;
MPIR_Topology *topo_ptr;
@@ -297,7 +298,7 @@ int MPIR_Topo_canon_nhb_count(MPID_Comm *comm_ptr, int *indegree, int *outdegree
*weighted = FALSE;
}
else {
- MPIU_Assert(FALSE);
+ MPIR_Assert(FALSE);
}
fn_exit:
@@ -310,15 +311,15 @@ fn_fail:
#define FUNCNAME MPIR_Topo_canon_nhb
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_Topo_canon_nhb(MPID_Comm *comm_ptr,
+int MPIR_Topo_canon_nhb(MPIR_Comm *comm_ptr,
int indegree, int sources[], int inweights[],
int outdegree, int dests[], int outweights[])
{
int mpi_errno = MPI_SUCCESS;
MPIR_Topology *topo_ptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIR_TOPO_CANON_NHB);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIR_TOPO_CANON_NHB);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_TOPO_CANON_NHB);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIR_TOPO_CANON_NHB);
topo_ptr = MPIR_Topology_get(comm_ptr);
@@ -330,17 +331,17 @@ int MPIR_Topo_canon_nhb(MPID_Comm *comm_ptr,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
else if (topo_ptr->kind == MPI_GRAPH) {
- MPIU_Assert(indegree == outdegree);
+ MPIR_Assert(indegree == outdegree);
mpi_errno = MPIR_Graph_neighbors_impl(comm_ptr, comm_ptr->rank, indegree, sources);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Memcpy(dests, sources, outdegree*sizeof(*dests));
+ MPIR_Memcpy(dests, sources, outdegree*sizeof(*dests));
/* ignore inweights/outweights */
}
else if (topo_ptr->kind == MPI_CART) {
int d;
- MPIU_Assert(indegree == outdegree);
- MPIU_Assert(indegree == 2*topo_ptr->topo.cart.ndims);
+ MPIR_Assert(indegree == outdegree);
+ MPIR_Assert(indegree == 2*topo_ptr->topo.cart.ndims);
for (d = 0; d < topo_ptr->topo.cart.ndims; ++d) {
mpi_errno = MPIR_Cart_shift_impl(comm_ptr, d, 1, &sources[2*d], &sources[2*d+1]);
@@ -352,24 +353,24 @@ int MPIR_Topo_canon_nhb(MPID_Comm *comm_ptr,
/* ignore inweights/outweights */
}
else {
- MPIU_Assert(FALSE);
+ MPIR_Assert(FALSE);
}
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
{
int i;
- MPIU_DBG_MSG_FMT(PT2PT, VERBOSE, (MPIU_DBG_FDEST, "canonical neighbors for comm=0x%x comm_ptr=%p", comm_ptr->handle, comm_ptr));
+ MPL_DBG_MSG_FMT(MPIR_DBG_PT2PT, VERBOSE, (MPL_DBG_FDEST, "canonical neighbors for comm=0x%x comm_ptr=%p", comm_ptr->handle, comm_ptr));
for (i = 0; i < outdegree; ++i) {
- MPIU_DBG_MSG_FMT(PT2PT, VERBOSE, (MPIU_DBG_FDEST, "%d/%d: to %d", i, outdegree, dests[i]));
+ MPL_DBG_MSG_FMT(MPIR_DBG_PT2PT, VERBOSE, (MPL_DBG_FDEST, "%d/%d: to %d", i, outdegree, dests[i]));
}
for (i = 0; i < indegree; ++i) {
- MPIU_DBG_MSG_FMT(PT2PT, VERBOSE, (MPIU_DBG_FDEST, "%d/%d: from %d", i, indegree, sources[i]));
+ MPL_DBG_MSG_FMT(MPIR_DBG_PT2PT, VERBOSE, (MPL_DBG_FDEST, "%d/%d: from %d", i, indegree, sources[i]));
}
}
#endif
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIR_TOPO_CANON_NHB);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIR_TOPO_CANON_NHB);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpi_t/cat_changed.c b/src/mpi_t/cat_changed.c
index a77ac52..da60f02 100644
--- a/src/mpi_t/cat_changed.c
+++ b/src/mpi_t/cat_changed.c
@@ -50,10 +50,10 @@ int MPI_T_category_changed(int *stamp)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_CHANGED);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_CHANGED);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_CHANGED);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_CHANGED);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -73,7 +73,7 @@ int MPI_T_category_changed(int *stamp)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_CHANGED);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_CHANGED);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cat_get_categories.c b/src/mpi_t/cat_get_categories.c
index 3f992b7..c3ccc0c 100644
--- a/src/mpi_t/cat_get_categories.c
+++ b/src/mpi_t/cat_get_categories.c
@@ -44,10 +44,7 @@ int MPIR_T_category_get_categories_impl(int cat_index, int len, int indices[])
indices[i] = *(int *)utarray_eltptr(cat->subcat_indices, i);
}
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -77,10 +74,10 @@ int MPI_T_category_get_categories(int cat_index, int len, int indices[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_CATEGORIES);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_CATEGORIES);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_CATEGORIES);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_CATEGORIES);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -105,7 +102,7 @@ int MPI_T_category_get_categories(int cat_index, int len, int indices[])
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_CATEGORIES);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_CATEGORIES);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cat_get_cvars.c b/src/mpi_t/cat_get_cvars.c
index a49fccb..e23071f 100644
--- a/src/mpi_t/cat_get_cvars.c
+++ b/src/mpi_t/cat_get_cvars.c
@@ -44,10 +44,7 @@ int MPIR_T_category_get_cvars_impl(int cat_index, int len, int indices[])
indices[i] = *(int *)utarray_eltptr(cat->cvar_indices, i);
}
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -77,10 +74,10 @@ int MPI_T_category_get_cvars(int cat_index, int len, int indices[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_CVARS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_CVARS);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_CVARS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_CVARS);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -105,7 +102,7 @@ int MPI_T_category_get_cvars(int cat_index, int len, int indices[])
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_CVARS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_CVARS);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cat_get_index.c b/src/mpi_t/cat_get_index.c
index e66349f..7856dc7 100644
--- a/src/mpi_t/cat_get_index.c
+++ b/src/mpi_t/cat_get_index.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2011 by Argonne National Laboratory.
+ * (C) 2015 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -49,10 +49,10 @@ int MPI_T_category_get_index(const char *name, int *cat_index)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -71,7 +71,7 @@ int MPI_T_category_get_index(const char *name, int *cat_index)
name2index_hash_t *hash_entry;
/* Do hash lookup by the name */
- HASH_FIND_STR(cat_hash, name, hash_entry);
+ MPL_HASH_FIND_STR(cat_hash, name, hash_entry);
if (hash_entry != NULL) {
*cat_index = hash_entry->idx;
} else {
@@ -82,7 +82,7 @@ int MPI_T_category_get_index(const char *name, int *cat_index)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cat_get_info.c b/src/mpi_t/cat_get_info.c
index fa76a54..85f9d80 100644
--- a/src/mpi_t/cat_get_info.c
+++ b/src/mpi_t/cat_get_info.c
@@ -60,10 +60,10 @@ int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc
int mpi_errno = MPI_SUCCESS;
cat_table_entry_t *cat;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_INFO);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_INFO);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_INFO);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_INFO);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -96,7 +96,7 @@ int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_INFO);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_INFO);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cat_get_num.c b/src/mpi_t/cat_get_num.c
index b3a83df..db01146 100644
--- a/src/mpi_t/cat_get_num.c
+++ b/src/mpi_t/cat_get_num.c
@@ -45,10 +45,10 @@ int MPI_T_category_get_num(int *num_cat)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_NUM);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_NUM);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_NUM);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_NUM);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -68,7 +68,7 @@ int MPI_T_category_get_num(int *num_cat)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_NUM);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_NUM);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cat_get_pvars.c b/src/mpi_t/cat_get_pvars.c
index 788b3dd..984f024 100644
--- a/src/mpi_t/cat_get_pvars.c
+++ b/src/mpi_t/cat_get_pvars.c
@@ -44,10 +44,7 @@ int MPIR_T_category_get_pvars_impl(int cat_index, int len, int indices[])
indices[i] = *(int *)utarray_eltptr(cat->pvar_indices, i);
}
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -77,10 +74,10 @@ int MPI_T_category_get_pvars(int cat_index, int len, int indices[])
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_PVARS);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_PVARS);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_PVARS);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_PVARS);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -105,7 +102,7 @@ int MPI_T_category_get_pvars(int cat_index, int len, int indices[])
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_PVARS);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_PVARS);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_get_index.c b/src/mpi_t/cvar_get_index.c
index f1a5d76..bb63983 100644
--- a/src/mpi_t/cvar_get_index.c
+++ b/src/mpi_t/cvar_get_index.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2011 by Argonne National Laboratory.
+ * (C) 2015 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -49,10 +49,10 @@ int MPI_T_cvar_get_index(const char *name, int *cvar_index)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_INDEX);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_INDEX);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_GET_INDEX);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_GET_INDEX);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -71,7 +71,7 @@ int MPI_T_cvar_get_index(const char *name, int *cvar_index)
name2index_hash_t *hash_entry;
/* Do hash lookup by the name */
- HASH_FIND_STR(cvar_hash, name, hash_entry);
+ MPL_HASH_FIND_STR(cvar_hash, name, hash_entry);
if (hash_entry != NULL) {
*cvar_index = hash_entry->idx;
} else {
@@ -82,7 +82,7 @@ int MPI_T_cvar_get_index(const char *name, int *cvar_index)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_GET_INDEX);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_GET_INDEX);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_get_info.c b/src/mpi_t/cvar_get_info.c
index 354b6b1..d97f0a0 100644
--- a/src/mpi_t/cvar_get_info.c
+++ b/src/mpi_t/cvar_get_info.c
@@ -64,10 +64,10 @@ int MPI_T_cvar_get_info(int cvar_index, char *name, int *name_len,
int mpi_errno = MPI_SUCCESS;
const cvar_table_entry_t *cvar;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_INFO);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_INFO);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_GET_INFO);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_GET_INFO);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -107,7 +107,7 @@ int MPI_T_cvar_get_info(int cvar_index, char *name, int *name_len,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_GET_INFO);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_GET_INFO);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_get_num.c b/src/mpi_t/cvar_get_num.c
index eece0d1..13f19be 100644
--- a/src/mpi_t/cvar_get_num.c
+++ b/src/mpi_t/cvar_get_num.c
@@ -45,10 +45,10 @@ int MPI_T_cvar_get_num(int *num_cvar)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_NUM);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_NUM);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_GET_NUM);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_GET_NUM);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -69,7 +69,7 @@ int MPI_T_cvar_get_num(int *num_cvar)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_GET_NUM);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_GET_NUM);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_handle_alloc.c b/src/mpi_t/cvar_handle_alloc.c
index 3b502a8..8e615c9 100644
--- a/src/mpi_t/cvar_handle_alloc.c
+++ b/src/mpi_t/cvar_handle_alloc.c
@@ -36,12 +36,12 @@ int MPIR_T_cvar_handle_alloc_impl(int cvar_index, void *obj_handle, MPI_T_cvar_h
int mpi_errno = MPI_SUCCESS;
MPIR_T_cvar_handle_t *hnd;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
cvar_table_entry_t *cvar = (cvar_table_entry_t *) utarray_eltptr(cvar_table, cvar_index);
/* Allocate handle memory */
- MPIU_CHKPMEM_MALLOC(hnd, MPIR_T_cvar_handle_t*, sizeof(*hnd), mpi_errno, "control variable handle");
+ MPIR_CHKPMEM_MALLOC(hnd, MPIR_T_cvar_handle_t*, sizeof(*hnd), mpi_errno, "control variable handle");
#ifdef HAVE_ERROR_CHECKING
hnd->kind = MPIR_T_CVAR_HANDLE;
#endif
@@ -65,11 +65,11 @@ int MPIR_T_cvar_handle_alloc_impl(int cvar_index, void *obj_handle, MPI_T_cvar_h
*handle = hnd;
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -103,10 +103,10 @@ int MPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_HANDLE_ALLOC);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_HANDLE_ALLOC);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_HANDLE_ALLOC);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_HANDLE_ALLOC);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -131,7 +131,7 @@ int MPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_HANDLE_ALLOC);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_HANDLE_ALLOC);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_handle_free.c b/src/mpi_t/cvar_handle_free.c
index da2544f..8a50f0e 100644
--- a/src/mpi_t/cvar_handle_free.c
+++ b/src/mpi_t/cvar_handle_free.c
@@ -47,10 +47,10 @@ int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle)
int mpi_errno = MPI_SUCCESS;
MPIR_T_cvar_handle_t *hnd;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_HANDLE_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_HANDLE_FREE);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_HANDLE_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_HANDLE_FREE);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -66,13 +66,13 @@ int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle)
/* ... body of routine ... */
hnd = *handle;
- MPIU_Free(hnd);
+ MPL_free(hnd);
*handle = MPI_T_CVAR_HANDLE_NULL;
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_HANDLE_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_HANDLE_FREE);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_read.c b/src/mpi_t/cvar_read.c
index 789bc36..d30a6c4 100644
--- a/src/mpi_t/cvar_read.c
+++ b/src/mpi_t/cvar_read.c
@@ -39,7 +39,7 @@ int MPIR_T_cvar_read_impl(MPI_T_cvar_handle handle, void *buf)
count = hnd->count;
addr = hnd->addr;
- MPIU_Assert(addr != NULL);
+ MPIR_Assert(addr != NULL);
switch (hnd->datatype) {
case MPI_INT:
@@ -63,7 +63,7 @@ int MPIR_T_cvar_read_impl(MPI_T_cvar_handle handle, void *buf)
((double *)buf)[i] = ((double *)addr)[i];
break;
case MPI_CHAR:
- MPIU_Strncpy(buf, addr, count);
+ MPL_strncpy(buf, addr, count);
break;
default:
/* FIXME the error handling code may not have been setup yet */
@@ -103,10 +103,10 @@ int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_READ);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_READ);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_READ);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_READ);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -128,7 +128,7 @@ int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_READ);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_READ);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_write.c b/src/mpi_t/cvar_write.c
index 3fdc908..291672a 100644
--- a/src/mpi_t/cvar_write.c
+++ b/src/mpi_t/cvar_write.c
@@ -47,7 +47,7 @@ int MPIR_T_cvar_write_impl(MPI_T_cvar_handle handle, const void *buf)
count = hnd->count;
addr = hnd->addr;
- MPIU_Assert(addr != NULL);
+ MPIR_Assert(addr != NULL);
switch (hnd->datatype) {
case MPI_INT:
@@ -71,8 +71,8 @@ int MPIR_T_cvar_write_impl(MPI_T_cvar_handle handle, const void *buf)
((double *)addr)[i] = ((double *)buf)[i];
break;
case MPI_CHAR:
- MPIU_Assert(count > strlen(buf)); /* Make sure buf will not overflow this cvar */
- MPIU_Strncpy(addr, buf, count);
+ MPIR_Assert(count > strlen(buf)); /* Make sure buf will not overflow this cvar */
+ MPL_strncpy(addr, buf, count);
break;
default:
/* FIXME the error handling code may not have been setup yet */
@@ -112,10 +112,10 @@ int MPI_T_cvar_write(MPI_T_cvar_handle handle, const void *buf)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_WRITE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_CVAR_WRITE);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_WRITE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_CVAR_WRITE);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -137,7 +137,7 @@ int MPI_T_cvar_write(MPI_T_cvar_handle handle, const void *buf)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_WRITE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_CVAR_WRITE);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/enum_get_info.c b/src/mpi_t/enum_get_info.c
index ff4a8b7..068a107 100644
--- a/src/mpi_t/enum_get_info.c
+++ b/src/mpi_t/enum_get_info.c
@@ -53,10 +53,10 @@ int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_ENUM_GET_INFO);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_ENUM_GET_INFO);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_ENUM_GET_INFO);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_ENUM_GET_INFO);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -81,7 +81,7 @@ int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_ENUM_GET_INFO);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_ENUM_GET_INFO);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/enum_get_item.c b/src/mpi_t/enum_get_item.c
index 49574cc..7d9a31b 100644
--- a/src/mpi_t/enum_get_item.c
+++ b/src/mpi_t/enum_get_item.c
@@ -56,10 +56,10 @@ int MPI_T_enum_get_item(MPI_T_enum enumtype, int index, int *value, char *name,
int mpi_errno = MPI_SUCCESS;
enum_item_t *item;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_ENUM_GET_ITEM);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_ENUM_GET_ITEM);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_ENUM_GET_ITEM);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_ENUM_GET_ITEM);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -86,7 +86,7 @@ int MPI_T_enum_get_item(MPI_T_enum enumtype, int index, int *value, char *name,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_ENUM_GET_ITEM);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_ENUM_GET_ITEM);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/mpit.c b/src/mpi_t/mpit.c
index d25ec93..588d5be 100644
--- a/src/mpi_t/mpit.c
+++ b/src/mpi_t/mpit.c
@@ -9,7 +9,7 @@
int MPIR_T_init_balance = 0;
#ifdef MPICH_IS_THREADED
-MPIU_Thread_mutex_t mpi_t_mutex;
+MPID_Thread_mutex_t mpi_t_mutex;
int MPIR_T_is_threaded;
#endif
@@ -34,13 +34,13 @@ void MPIR_T_enum_create(const char *enum_name, MPI_T_enum *handle)
MPIR_T_enum_t *e;
static const UT_icd enum_item_icd = {sizeof(enum_item_t), NULL, NULL, NULL};
- MPIU_Assert(enum_name);
- MPIU_Assert(handle);
+ MPIR_Assert(enum_name);
+ MPIR_Assert(handle);
utarray_extend_back(enum_table);
e = (MPIR_T_enum_t *)utarray_back(enum_table);
- e->name = MPIU_Strdup(enum_name);
- MPIU_Assert(e->name);
+ e->name = MPL_strdup(enum_name);
+ MPIR_Assert(e->name);
#ifdef HAVE_ERROR_CHECKING
e->kind = MPIR_T_ENUM_HANDLE;
#endif
@@ -57,13 +57,13 @@ void MPIR_T_enum_add_item(MPI_T_enum handle, const char *item_name, int item_val
{
enum_item_t *item;
- MPIU_Assert(handle);
- MPIU_Assert(item_name);
+ MPIR_Assert(handle);
+ MPIR_Assert(item_name);
utarray_extend_back(handle->items);
item = (enum_item_t *)utarray_back(handle->items);
- item->name = MPIU_Strdup(item_name);
- MPIU_Assert(item->name);
+ item->name = MPL_strdup(item_name);
+ MPIR_Assert(item->name);
item->value = item_value;
}
@@ -81,7 +81,7 @@ static cat_table_entry_t *MPIR_T_cat_create(const char *cat_name)
/* New a category */
utarray_extend_back(cat_table);
cat =(cat_table_entry_t *)utarray_back(cat_table);
- cat->name = MPIU_Strdup(cat_name);
+ cat->name = MPL_strdup(cat_name);
cat->desc = NULL;
utarray_new(cat->cvar_indices, &ut_int_icd);
utarray_new(cat->pvar_indices, &ut_int_icd);
@@ -89,12 +89,12 @@ static cat_table_entry_t *MPIR_T_cat_create(const char *cat_name)
/* Record <cat_name, cat_idx> in cat_hash */
cat_idx = utarray_len(cat_table) - 1;
- hash_entry = MPIU_Malloc(sizeof(name2index_hash_t));
- MPIU_Assert(hash_entry);
+ hash_entry = MPL_malloc(sizeof(name2index_hash_t));
+ MPIR_Assert(hash_entry);
/* Need not to Strdup cat_name, since cat_table and cat_hash co-exist */
hash_entry->name = cat_name;
hash_entry->idx = cat_idx;
- HASH_ADD_KEYPTR(hh, cat_hash, hash_entry->name,
+ MPL_HASH_ADD_KEYPTR(hh, cat_hash, hash_entry->name,
strlen(hash_entry->name), hash_entry);
return cat;
@@ -115,7 +115,7 @@ int MPIR_T_cat_add_pvar(const char *cat_name, int pvar_index)
if (cat_name == NULL || *cat_name == '\0')
goto fn_exit;
- HASH_FIND_STR(cat_hash, cat_name, hash_entry);
+ MPL_HASH_FIND_STR(cat_hash, cat_name, hash_entry);
if (hash_entry != NULL) {
/* Found it, i.e., category already exists */
@@ -130,12 +130,8 @@ int MPIR_T_cat_add_pvar(const char *cat_name, int pvar_index)
/* Notify categories have been changed */
cat_stamp++;
}
-
fn_exit:
return mpi_errno;
-
-fn_fail:
- goto fn_exit;
}
/* Add a cvar to an existing or new category
@@ -153,7 +149,7 @@ int MPIR_T_cat_add_cvar(const char *cat_name, int cvar_index)
if (cat_name == NULL || *cat_name == '\0')
goto fn_exit;
- HASH_FIND_STR(cat_hash, cat_name, hash_entry);
+ MPL_HASH_FIND_STR(cat_hash, cat_name, hash_entry);
if (hash_entry != NULL) {
/* Found it, i.e., category already exists */
@@ -171,9 +167,6 @@ int MPIR_T_cat_add_cvar(const char *cat_name, int cvar_index)
fn_exit:
return mpi_errno;
-
-fn_fail:
- goto fn_exit;
}
/* Add a sub-category to an existing or new category
@@ -195,7 +188,7 @@ int MPIR_T_cat_add_subcat(const char *parent_name, const char *child_name)
}
/* Find or create parent */
- HASH_FIND_STR(cat_hash, parent_name, hash_entry);
+ MPL_HASH_FIND_STR(cat_hash, parent_name, hash_entry);
if (hash_entry != NULL) {
/* Found parent in cat_table */
parent_index = hash_entry->idx;
@@ -206,7 +199,7 @@ int MPIR_T_cat_add_subcat(const char *parent_name, const char *child_name)
}
/* Find or create child */
- HASH_FIND_STR(cat_hash, child_name, hash_entry);
+ MPL_HASH_FIND_STR(cat_hash, child_name, hash_entry);
if (hash_entry != NULL) {
/* Found child in cat_table */
child_index = hash_entry->idx;
@@ -226,8 +219,6 @@ int MPIR_T_cat_add_subcat(const char *parent_name, const char *child_name)
fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
/* Add description to an existing or new category
@@ -241,32 +232,28 @@ int MPIR_T_cat_add_desc(const char *cat_name, const char *cat_desc)
cat_table_entry_t *cat;
/* NULL args are not allowed */
- MPIU_Assert(cat_name);
- MPIU_Assert(cat_desc);
+ MPIR_Assert(cat_name);
+ MPIR_Assert(cat_desc);
- HASH_FIND_STR(cat_hash, cat_name, hash_entry);
+ MPL_HASH_FIND_STR(cat_hash, cat_name, hash_entry);
if (hash_entry != NULL) {
/* Found it, i.e., category already exists */
cat_idx = hash_entry->idx;
cat = (cat_table_entry_t *)utarray_eltptr(cat_table, cat_idx);
- MPIU_Assert(cat->desc == NULL);
- cat->desc = MPIU_Strdup(cat_desc);
- MPIU_Assert(cat->desc);
+ MPIR_Assert(cat->desc == NULL);
+ cat->desc = MPL_strdup(cat_desc);
+ MPIR_Assert(cat->desc);
} else {
/* Not found, so create a new category */
cat = MPIR_T_cat_create(cat_name);
- cat->desc = MPIU_Strdup(cat_desc);
- MPIU_Assert(cat->desc);
+ cat->desc = MPL_strdup(cat_desc);
+ MPIR_Assert(cat->desc);
/* Notify categories have been changed */
cat_stamp++;
}
-fn_exit:
return mpi_errno;
-
-fn_fail:
- goto fn_exit;
}
/* A low level, generic and internally used interface to register
@@ -297,14 +284,14 @@ void MPIR_T_CVAR_REGISTER_impl(
int cvar_idx;
/* Check whether this is a replicated cvar, whose name is unique. */
- HASH_FIND_STR(cvar_hash, name, hash_entry);
+ MPL_HASH_FIND_STR(cvar_hash, name, hash_entry);
if (hash_entry != NULL) {
/* Found it, the cvar already exists */
cvar_idx = hash_entry->idx;
cvar = (cvar_table_entry_t *)utarray_eltptr(cvar_table, cvar_idx);
/* Should never override an existing & active var */
- MPIU_Assert(cvar->active != TRUE);
+ MPIR_Assert(cvar->active != TRUE);
cvar->active = TRUE;
/* FIXME: Do we need to check consistency between the old and new? */
} else {
@@ -313,18 +300,18 @@ void MPIR_T_CVAR_REGISTER_impl(
cvar = (cvar_table_entry_t *)utarray_back(cvar_table);
cvar->active = TRUE;
cvar->datatype = dtype;
- cvar->name = MPIU_Strdup(name);
- MPIU_Assert(cvar->name);
+ cvar->name = MPL_strdup(name);
+ MPIR_Assert(cvar->name);
if (dtype != MPI_CHAR) {
cvar->addr = (void *)addr;
} else {
- cvar->addr = MPIU_Malloc(count);
- MPIU_Assert(cvar->addr);
+ cvar->addr = MPL_malloc(count);
+ MPIR_Assert(cvar->addr);
if (defaultval.str == NULL) {
((char *)(cvar->addr))[0] = '\0';
} else {
/* Use greater (>), since count includes the terminating '\0', but strlen does not */
- MPIU_Assert(count > strlen(defaultval.str));
+ MPIR_Assert(count > strlen(defaultval.str));
strcpy(cvar->addr, defaultval.str);
}
}
@@ -335,17 +322,17 @@ void MPIR_T_CVAR_REGISTER_impl(
cvar->get_addr = get_addr;
cvar->get_count = get_count;
cvar->defaultval = defaultval;
- cvar->desc = MPIU_Strdup(desc);
- MPIU_Assert(cvar->desc);
+ cvar->desc = MPL_strdup(desc);
+ MPIR_Assert(cvar->desc);
/* Record <name, index> in hash table */
cvar_idx = utarray_len(cvar_table) - 1;
- hash_entry = MPIU_Malloc(sizeof(name2index_hash_t));
- MPIU_Assert(hash_entry);
+ hash_entry = MPL_malloc(sizeof(name2index_hash_t));
+ MPIR_Assert(hash_entry);
/* Need not to Strdup name, since cvar_table and cvar_hash co-exist */
hash_entry->name =name;
hash_entry->idx = cvar_idx;
- HASH_ADD_KEYPTR(hh, cvar_hash, hash_entry->name,
+ MPL_HASH_ADD_KEYPTR(hh, cvar_hash, hash_entry->name,
strlen(hash_entry->name), hash_entry);
/* Add the cvar to a category */
@@ -383,14 +370,14 @@ void MPIR_T_PVAR_REGISTER_impl(
int seq = varclass - MPIR_T_PVAR_CLASS_FIRST;
/* Check whether this is a replicated pvar, whose name is unique per class */
- HASH_FIND_STR(pvar_hashs[seq], name, hash_entry);
+ MPL_HASH_FIND_STR(pvar_hashs[seq], name, hash_entry);
if (hash_entry != NULL) {
/* Found it, the pvar already exists */
pvar_idx = hash_entry->idx;
pvar = (pvar_table_entry_t *)utarray_eltptr(pvar_table, pvar_idx);
/* Should never override an existing & active var */
- MPIU_Assert(pvar->active != TRUE);
+ MPIR_Assert(pvar->active != TRUE);
pvar->active = TRUE;
/* FIXME: Do we need to check consistency between the old and new? */
} else {
@@ -400,8 +387,8 @@ void MPIR_T_PVAR_REGISTER_impl(
pvar->active = TRUE;
pvar->varclass = varclass;
pvar->datatype = dtype;
- pvar->name = MPIU_Strdup(name);
- MPIU_Assert(pvar->name);
+ pvar->name = MPL_strdup(name);
+ MPIR_Assert(pvar->name);
pvar->addr = addr;
pvar->count = count;
pvar->enumtype = etype;
@@ -410,17 +397,17 @@ void MPIR_T_PVAR_REGISTER_impl(
pvar->flags = flags;
pvar->get_value = get_value;
pvar->get_count = get_count;
- pvar->desc = MPIU_Strdup(desc);
- MPIU_Assert(pvar->desc);
+ pvar->desc = MPL_strdup(desc);
+ MPIR_Assert(pvar->desc);
/* Record <name, index> in hash table */
pvar_idx = utarray_len(pvar_table) - 1;
- hash_entry = MPIU_Malloc(sizeof(name2index_hash_t));
- MPIU_Assert(hash_entry);
+ hash_entry = MPL_malloc(sizeof(name2index_hash_t));
+ MPIR_Assert(hash_entry);
/* Need not to Strdup name, since pvar_table and pvar_hashs co-exist */
hash_entry->name = name;
hash_entry->idx = pvar_idx;
- HASH_ADD_KEYPTR(hh, pvar_hashs[seq], hash_entry->name,
+ MPL_HASH_ADD_KEYPTR(hh, pvar_hashs[seq], hash_entry->name,
strlen(hash_entry->name), hash_entry);
/* Add the pvar to a category */
@@ -464,7 +451,7 @@ void MPIR_T_strncpy(char *dst, const char *src, int *len)
}
else {
/* MPL_strncpy will always terminate the string */
- MPIU_Assert(*len > 0);
+ MPIR_Assert(*len > 0);
if (src != NULL) {
MPL_strncpy(dst, src, *len);
*len = (int)strlen(dst) + 1;
diff --git a/src/mpi_t/mpit_finalize.c b/src/mpi_t/mpit_finalize.c
index 13923e2..fb19042 100644
--- a/src/mpi_t/mpit_finalize.c
+++ b/src/mpi_t/mpit_finalize.c
@@ -36,12 +36,12 @@ static void MPIR_T_enum_env_finalize(void)
/* Free all entries */
for (i = 0; i < utarray_len(enum_table); i++) {
e = (MPIR_T_enum_t *)utarray_eltptr(enum_table, i);
- MPIU_Free((void *)e->name);
+ MPL_free((void *)e->name);
/* Free items in this enum */
for (j = 0; j < utarray_len(e->items); j++) {
item = (enum_item_t *)utarray_eltptr(e->items, j);
- MPIU_Free((void *)item->name);
+ MPL_free((void *)item->name);
}
utarray_free(e->items);
@@ -62,8 +62,8 @@ static void MPIR_T_cat_env_finalize(void)
/* Free all entries */
for (i = 0; i < utarray_len(cat_table); i++) {
cat = (cat_table_entry_t *)utarray_eltptr(cat_table, i);
- MPIU_Free((void *)cat->name);
- MPIU_Free((void *)cat->desc);
+ MPL_free((void *)cat->name);
+ MPL_free((void *)cat->desc);
utarray_free(cat->cvar_indices);
utarray_free(cat->pvar_indices);
utarray_free(cat->subcat_indices);
@@ -77,13 +77,13 @@ static void MPIR_T_cat_env_finalize(void)
if (cat_hash) {
name2index_hash_t *current, *tmp;
/* Free all entries */
- HASH_ITER(hh, cat_hash, current, tmp) {
- HASH_DEL(cat_hash, current);
- MPIU_Free(current);
+ MPL_HASH_ITER(hh, cat_hash, current, tmp) {
+ MPL_HASH_DEL(cat_hash, current);
+ MPL_free(current);
}
/* Free cat_hash itself */
- HASH_CLEAR(hh, cat_hash);
+ MPL_HASH_CLEAR(hh, cat_hash);
cat_hash = NULL;
}
}
@@ -100,9 +100,9 @@ static void MPIR_T_cvar_env_finalize(void)
/* Free all entries */
for (i = 0; i < utarray_len(cvar_table); i++) {
cvar = (cvar_table_entry_t *)utarray_eltptr(cvar_table, i);
- MPIU_Free((void *)cvar->name);
- MPIU_Free((void *)cvar->desc);
- if (cvar->datatype == MPI_CHAR) MPIU_Free(cvar->addr);
+ MPL_free((void *)cvar->name);
+ MPL_free((void *)cvar->desc);
+ if (cvar->datatype == MPI_CHAR) MPL_free(cvar->addr);
}
/* Free pvar_table itself */
@@ -113,13 +113,13 @@ static void MPIR_T_cvar_env_finalize(void)
if (cvar_hash) {
name2index_hash_t *current, *tmp;
/* Free all entries */
- HASH_ITER(hh, cvar_hash, current, tmp) {
- HASH_DEL(cvar_hash, current);
- MPIU_Free(current);
+ MPL_HASH_ITER(hh, cvar_hash, current, tmp) {
+ MPL_HASH_DEL(cvar_hash, current);
+ MPL_free(current);
}
/* Free cvar_hash itself */
- HASH_CLEAR(hh, cvar_hash);
+ MPL_HASH_CLEAR(hh, cvar_hash);
cvar_hash = NULL;
}
}
@@ -133,8 +133,8 @@ static void MPIR_T_pvar_env_finalize(void)
/* Free all entries */
for (i = 0; i < utarray_len(pvar_table); i++) {
pvar = (pvar_table_entry_t *)utarray_eltptr(pvar_table, i);
- MPIU_Free((void *)pvar->name);
- MPIU_Free((void *)pvar->desc);
+ MPL_free((void *)pvar->name);
+ MPL_free((void *)pvar->desc);
}
/* Free pvar_table itself */
@@ -146,13 +146,13 @@ static void MPIR_T_pvar_env_finalize(void)
if (pvar_hashs[i]) {
name2index_hash_t *current, *tmp;
/* Free all entries */
- HASH_ITER(hh, pvar_hashs[i], current, tmp) {
- HASH_DEL(pvar_hashs[i], current);
- MPIU_Free(current);
+ MPL_HASH_ITER(hh, pvar_hashs[i], current, tmp) {
+ MPL_HASH_DEL(pvar_hashs[i], current);
+ MPL_free(current);
}
/* Free pvar_hashs[i] itself */
- HASH_CLEAR(hh, pvar_hashs[i]);
+ MPL_HASH_CLEAR(hh, pvar_hashs[i]);
pvar_hashs[i] = NULL;
}
}
@@ -202,8 +202,8 @@ int MPI_T_finalize(void)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_FINALIZE);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_FINALIZE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_FINALIZE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_FINALIZE);
/* ... body of routine ... */
@@ -221,7 +221,7 @@ int MPI_T_finalize(void)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_FINALIZE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_FINALIZE);
return mpi_errno;
fn_fail:
diff --git a/src/mpi_t/mpit_initthread.c b/src/mpi_t/mpit_initthread.c
index af1469a..0c92342 100644
--- a/src/mpi_t/mpit_initthread.c
+++ b/src/mpi_t/mpit_initthread.c
@@ -115,8 +115,8 @@ int MPI_T_init_thread(int required, int *provided)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_INIT_THREAD);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_INIT_THREAD);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_INIT_THREAD);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_INIT_THREAD);
/* ... body of routine ... */
@@ -139,20 +139,6 @@ int MPI_T_init_thread(int required, int *provided)
/* ... end of body of routine ... */
-fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_INIT_THREAD);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_INIT_THREAD);
return mpi_errno;
-
-fn_fail:
- /* --BEGIN ERROR HANDLING-- */
-# ifdef HAVE_ERROR_CHECKING
- {
- mpi_errno = MPIR_Err_create_code(
- mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
- "**mpi_t_init_thread", "**mpi_t_init_thread %d %p", required, provided);
- }
-# endif
- mpi_errno = MPIR_Err_return_comm(NULL, FCNAME, mpi_errno);
- goto fn_exit;
- /* --END ERROR HANDLING-- */
}
diff --git a/src/mpi_t/pvar_get_index.c b/src/mpi_t/pvar_get_index.c
index af5fce4..46e385d 100644
--- a/src/mpi_t/pvar_get_index.c
+++ b/src/mpi_t/pvar_get_index.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2011 by Argonne National Laboratory.
+ * (C) 2015 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -50,10 +50,10 @@ int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_INDEX);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_INDEX);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_GET_INDEX);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_GET_INDEX);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -79,7 +79,7 @@ int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index)
name2index_hash_t *hash_entry;
/* Do hash lookup by the name */
- HASH_FIND_STR(pvar_hashs[seq], name, hash_entry);
+ MPL_HASH_FIND_STR(pvar_hashs[seq], name, hash_entry);
if (hash_entry != NULL) {
*pvar_index = hash_entry->idx;
} else {
@@ -90,7 +90,7 @@ int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_GET_INDEX);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_GET_INDEX);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_get_info.c b/src/mpi_t/pvar_get_info.c
index 06dddda..22ea6b5 100644
--- a/src/mpi_t/pvar_get_info.c
+++ b/src/mpi_t/pvar_get_info.c
@@ -68,10 +68,10 @@ int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosit
const pvar_table_entry_t *entry;
const pvar_table_entry_t *info;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_INFO);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_INFO);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_GET_INFO);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_GET_INFO);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -127,7 +127,7 @@ int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosit
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_GET_INFO);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_GET_INFO);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_get_num.c b/src/mpi_t/pvar_get_num.c
index 462d70c..a74ca56 100644
--- a/src/mpi_t/pvar_get_num.c
+++ b/src/mpi_t/pvar_get_num.c
@@ -45,10 +45,10 @@ int MPI_T_pvar_get_num(int *num_pvar)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_NUM);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_NUM);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_GET_NUM);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_GET_NUM);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -68,7 +68,7 @@ int MPI_T_pvar_get_num(int *num_pvar)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_GET_NUM);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_GET_NUM);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_handle_alloc.c b/src/mpi_t/pvar_handle_alloc.c
index 846ed1e..c66e11e 100644
--- a/src/mpi_t/pvar_handle_alloc.c
+++ b/src/mpi_t/pvar_handle_alloc.c
@@ -51,7 +51,7 @@ int MPIR_T_pvar_handle_alloc_impl(MPI_T_pvar_session session, int pvar_index,
const pvar_table_entry_t *info;
MPIR_T_pvar_handle_t *hnd;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
info = (pvar_table_entry_t *) utarray_eltptr(pvar_table, pvar_index);
@@ -80,7 +80,7 @@ int MPIR_T_pvar_handle_alloc_impl(MPI_T_pvar_session session, int pvar_index,
}
/* Allocate memory and bzero it */
- MPIU_CHKPMEM_CALLOC(hnd, MPIR_T_pvar_handle_t*, sizeof(*hnd) + extra,
+ MPIR_CHKPMEM_CALLOC(hnd, MPIR_T_pvar_handle_t*, sizeof(*hnd) + extra,
mpi_errno, "performance variable handle");
#ifdef HAVE_ERROR_CHECKING
hnd->kind = MPIR_T_PVAR_HANDLE;
@@ -120,7 +120,7 @@ int MPIR_T_pvar_handle_alloc_impl(MPI_T_pvar_session session, int pvar_index,
* accum is zero since we called CALLOC before.
*/
if (hnd->get_value == NULL)
- MPIU_Memcpy(hnd->offset, hnd->addr, bytes*cnt);
+ MPIR_Memcpy(hnd->offset, hnd->addr, bytes*cnt);
else
hnd->get_value(hnd->addr, hnd->obj_handle, hnd->count, hnd->offset);
}
@@ -163,11 +163,11 @@ int MPIR_T_pvar_handle_alloc_impl(MPI_T_pvar_session session, int pvar_index,
*handle = hnd;
*count = cnt;
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -204,10 +204,10 @@ int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index,
int mpi_errno = MPI_SUCCESS;
pvar_table_entry_t *entry;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -238,7 +238,7 @@ int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index,
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_HANDLE_ALLOC);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_handle_free.c b/src/mpi_t/pvar_handle_free.c
index e75d470..7570961 100644
--- a/src/mpi_t/pvar_handle_free.c
+++ b/src/mpi_t/pvar_handle_free.c
@@ -45,7 +45,7 @@ int MPIR_T_pvar_handle_free_impl(MPI_T_pvar_session session, MPI_T_pvar_handle *
mark->first_used = 0;
mark->first_started = 0;
} else {
- MPIU_Assert(mark->hlist);
+ MPIR_Assert(mark->hlist);
if (mark->hlist == hnd) {
/* hnd happens to be the head */
mark->hlist = hnd->next2;
@@ -59,13 +59,10 @@ int MPIR_T_pvar_handle_free_impl(MPI_T_pvar_session session, MPI_T_pvar_handle *
}
}
- MPIU_Free(hnd);
+ MPL_free(hnd);
*handle = MPI_T_PVAR_HANDLE_NULL;
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -93,10 +90,10 @@ int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_HANDLE_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_HANDLE_FREE);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_HANDLE_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_HANDLE_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -126,7 +123,7 @@ int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_HANDLE_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_HANDLE_FREE);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_read.c b/src/mpi_t/pvar_read.c
index 62f3d58..d6ddd7f 100644
--- a/src/mpi_t/pvar_read.c
+++ b/src/mpi_t/pvar_read.c
@@ -134,13 +134,13 @@ int MPIR_T_pvar_read_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle,
}
else if (MPIR_T_pvar_is_sum(handle) && !MPIR_T_pvar_is_started(handle)) {
/* A SUM is stopped. Return accum directly */
- MPIU_Memcpy(buf, handle->accum, handle->bytes * handle->count);
+ MPIR_Memcpy(buf, handle->accum, handle->bytes * handle->count);
}
else if (MPIR_T_pvar_is_watermark(handle)) {
/* Callback and array are not allowed for watermarks, since they
* can not gurantee correct semantics of watermarks.
*/
- MPIU_Assert(handle->get_value == NULL && handle->count == 1);
+ MPIR_Assert(handle->get_value == NULL && handle->count == 1);
if (MPIR_T_pvar_is_first(handle)) {
/* Current value of the first handle of a watermark is stored at
@@ -192,7 +192,7 @@ int MPIR_T_pvar_read_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle,
} else {
/* For STATE, LEVEL, SIZE, PERCENTAGE, no caching is needed */
if (handle->get_value == NULL)
- MPIU_Memcpy(buf, handle->addr, handle->bytes * handle->count);
+ MPIR_Memcpy(buf, handle->addr, handle->bytes * handle->count);
else
handle->get_value(handle->addr, handle->obj_handle,
handle->count, buf);
@@ -243,10 +243,10 @@ int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_READ);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_READ);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_READ);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_READ);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -275,7 +275,7 @@ int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_READ);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_READ);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_readreset.c b/src/mpi_t/pvar_readreset.c
index 0c3c514..e668986 100644
--- a/src/mpi_t/pvar_readreset.c
+++ b/src/mpi_t/pvar_readreset.c
@@ -76,10 +76,10 @@ int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, v
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_READRESET);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_READRESET);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_READRESET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_READRESET);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -114,7 +114,7 @@ int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, v
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_READRESET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_READRESET);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_reset.c b/src/mpi_t/pvar_reset.c
index f50e43f..c5d8c49 100644
--- a/src/mpi_t/pvar_reset.c
+++ b/src/mpi_t/pvar_reset.c
@@ -43,7 +43,7 @@ int MPIR_T_pvar_reset_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
/* Record current value as offset when pvar is running (i.e., started) */
if (MPIR_T_pvar_is_started(handle)) {
if (handle->get_value == NULL) {
- MPIU_Memcpy(handle->offset, handle->addr, handle->bytes * handle->count);
+ MPIR_Memcpy(handle->offset, handle->addr, handle->bytes * handle->count);
} else {
handle->get_value(handle->addr, handle->obj_handle,
handle->count, handle->offset);
@@ -54,7 +54,7 @@ int MPIR_T_pvar_reset_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
/* Use the current value as starting value when pvar is running */
mark = (MPIR_T_pvar_watermark_t *)handle->addr;
if (MPIR_T_pvar_is_first(handle)) {
- MPIU_Assert(mark->first_used);
+ MPIR_Assert(mark->first_used);
mark->watermark = mark->current;
} else {
handle->watermark = mark->current;
@@ -67,10 +67,7 @@ int MPIR_T_pvar_reset_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
}
}
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -110,10 +107,10 @@ int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
int mpi_errno = MPI_SUCCESS;
MPIR_T_pvar_handle_t *hnd;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_RESET);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_RESET);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_RESET);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_RESET);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -157,7 +154,7 @@ int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_RESET);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_RESET);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_session_create.c b/src/mpi_t/pvar_session_create.c
index 8fde7f2..813e0f1 100644
--- a/src/mpi_t/pvar_session_create.c
+++ b/src/mpi_t/pvar_session_create.c
@@ -33,11 +33,11 @@ int MPI_T_pvar_session_create(MPI_T_pvar_session *session) __attribute__((weak,a
int MPIR_T_pvar_session_create_impl(MPI_T_pvar_session *session)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
*session = MPI_T_PVAR_SESSION_NULL;
- MPIU_CHKPMEM_MALLOC(*session, MPI_T_pvar_session, sizeof(**session), mpi_errno, "performance var session");
+ MPIR_CHKPMEM_MALLOC(*session, MPI_T_pvar_session, sizeof(**session), mpi_errno, "performance var session");
/* essential for utlist to work */
(*session)->hlist = NULL;
@@ -46,11 +46,11 @@ int MPIR_T_pvar_session_create_impl(MPI_T_pvar_session *session)
(*session)->kind = MPIR_T_PVAR_SESSION;
#endif
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -77,10 +77,10 @@ int MPI_T_pvar_session_create(MPI_T_pvar_session *session)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_SESSION_CREATE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_SESSION_CREATE);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_SESSION_CREATE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_SESSION_CREATE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -101,7 +101,7 @@ int MPI_T_pvar_session_create(MPI_T_pvar_session *session)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_SESSION_CREATE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_SESSION_CREATE);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_session_free.c b/src/mpi_t/pvar_session_free.c
index 4f68b9f..6988792 100644
--- a/src/mpi_t/pvar_session_free.c
+++ b/src/mpi_t/pvar_session_free.c
@@ -44,15 +44,12 @@ int MPIR_T_pvar_session_free_impl(MPI_T_pvar_session *session)
* view.*/
MPL_DL_FOREACH_SAFE((*session)->hlist, hnd, tmp) {
MPL_DL_DELETE((*session)->hlist, hnd);
- MPIU_Free(hnd);
+ MPL_free(hnd);
}
- MPIU_Free(*session);
+ MPL_free(*session);
*session = MPI_T_PVAR_SESSION_NULL;
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -83,10 +80,10 @@ int MPI_T_pvar_session_free(MPI_T_pvar_session *session)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_SESSION_FREE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_SESSION_FREE);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_SESSION_FREE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_SESSION_FREE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -107,7 +104,7 @@ int MPI_T_pvar_session_free(MPI_T_pvar_session *session)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_SESSION_FREE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_SESSION_FREE);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_start.c b/src/mpi_t/pvar_start.c
index 1853fef..25139e9 100644
--- a/src/mpi_t/pvar_start.c
+++ b/src/mpi_t/pvar_start.c
@@ -42,7 +42,7 @@ int MPIR_T_pvar_start_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
* accum is zero since handle allocation.
*/
if (handle->get_value == NULL) {
- MPIU_Memcpy(handle->offset, handle->addr, handle->bytes * handle->count);
+ MPIR_Memcpy(handle->offset, handle->addr, handle->bytes * handle->count);
} else {
handle->get_value(handle->addr, handle->obj_handle,
handle->count, handle->offset);
@@ -54,7 +54,7 @@ int MPIR_T_pvar_start_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
mark = (MPIR_T_pvar_watermark_t *)handle->addr;
if (MPIR_T_pvar_is_first(handle)) {
- MPIU_Assert(mark->first_used);
+ MPIR_Assert(mark->first_used);
mark->first_started = TRUE;
if (!MPIR_T_pvar_is_oncestarted(handle))
mark->watermark = mark->current;
@@ -67,10 +67,7 @@ int MPIR_T_pvar_start_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
/* OK, let's get started */
MPIR_T_pvar_set_started(handle);
-fn_exit:
return mpi_errno;
-fn_fail:
- goto fn_exit;
}
#endif /* MPICH_MPI_FROM_PMPI */
@@ -107,10 +104,10 @@ int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_START);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_START);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_START);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_START);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -151,7 +148,7 @@ int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_START);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_START);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_stop.c b/src/mpi_t/pvar_stop.c
index aa6b451..5719f0f 100644
--- a/src/mpi_t/pvar_stop.c
+++ b/src/mpi_t/pvar_stop.c
@@ -42,7 +42,7 @@ int MPIR_T_pvar_stop_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
if (MPIR_T_pvar_is_sum(handle)) {
/* Read the current value first */
if (handle->get_value == NULL) {
- MPIU_Memcpy(handle->current, handle->addr, handle->bytes * handle->count);
+ MPIR_Memcpy(handle->current, handle->addr, handle->bytes * handle->count);
} else {
handle->get_value(handle->addr, handle->obj_handle,
handle->count, handle->current);
@@ -88,7 +88,7 @@ int MPIR_T_pvar_stop_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
/* When handle is first, clear the flag in pvar too */
if (MPIR_T_pvar_is_first(handle)) {
mark = (MPIR_T_pvar_watermark_t *)handle->addr;
- MPIU_Assert(mark->first_used);
+ MPIR_Assert(mark->first_used);
mark->first_started = FALSE;
}
}
@@ -136,10 +136,10 @@ int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_STOP);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_STOP);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_STOP);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_STOP);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -185,7 +185,7 @@ int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle)
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_STOP);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_STOP);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_write.c b/src/mpi_t/pvar_write.c
index 888d018..6662c2d 100644
--- a/src/mpi_t/pvar_write.c
+++ b/src/mpi_t/pvar_write.c
@@ -74,10 +74,10 @@ int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_WRITE);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPI_T_PVAR_WRITE);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_WRITE);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPI_T_PVAR_WRITE);
/* Validate parameters, especially handles needing to be converted */
# ifdef HAVE_ERROR_CHECKING
@@ -113,7 +113,7 @@ int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_WRITE);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_T_PVAR_WRITE);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpid/Makefile.mk b/src/mpid/Makefile.mk
index fda4667..247a485 100644
--- a/src/mpid/Makefile.mk
+++ b/src/mpid/Makefile.mk
@@ -5,6 +5,12 @@
## See COPYRIGHT in top-level directory.
##
+AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/include
+
+noinst_HEADERS += \
+ src/mpid/include/mpidu_pre.h
+
+
include $(top_srcdir)/src/mpid/ch3/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/Makefile.mk
include $(top_srcdir)/src/mpid/common/Makefile.mk
diff --git a/src/mpid/ch3/Makefile.mk b/src/mpid/ch3/Makefile.mk
index e04f49d..b5503fb 100644
--- a/src/mpid/ch3/Makefile.mk
+++ b/src/mpid/ch3/Makefile.mk
@@ -21,7 +21,9 @@ noinst_HEADERS += \
src/mpid/ch3/include/mpidpost.h \
src/mpid/ch3/include/mpidpre.h \
src/mpid/ch3/include/mpid_thread.h \
- src/mpid/ch3/include/mpidrma.h
+ src/mpid/ch3/include/mpidrma.h \
+ src/mpid/ch3/include/mpid_sched.h \
+ src/mpid/ch3/include/mpid_coll.h
include $(top_srcdir)/src/mpid/ch3/src/Makefile.mk
include $(top_srcdir)/src/mpid/ch3/util/Makefile.mk
diff --git a/src/mpid/ch3/channels/nemesis/Makefile.mk b/src/mpid/ch3/channels/nemesis/Makefile.mk
index 8078ba5..597d86e 100644
--- a/src/mpid/ch3/channels/nemesis/Makefile.mk
+++ b/src/mpid/ch3/channels/nemesis/Makefile.mk
@@ -20,7 +20,6 @@ noinst_HEADERS += \
src/mpid/ch3/channels/nemesis/include/mpid_nem_debug.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_defs.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_fbox.h \
- src/mpid/ch3/channels/nemesis/include/mpid_nem_generic_queue.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h \
src/mpid/ch3/channels/nemesis/include/mpid_nem_nets.h \
diff --git a/src/mpid/ch3/channels/nemesis/include/.state-cache b/src/mpid/ch3/channels/nemesis/include/.state-cache
index a9e5be4..81d0d90 100644
--- a/src/mpid/ch3/channels/nemesis/include/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/include/.state-cache
@@ -1,56 +1,53 @@
<dir>
-<file name="mpidi_ch3_post.h" info="1447123141"/>
-<file name="mpid_nem_impl.h" info="1447123141"/>
-<file name="mpidi_ch3_impl.h" info="1447123141"/>
-<file name="mpidi_ch3_pre.h" info="1447123141"/>
-<file name="mpid_nem_post.h" info="1447123141"/>
-<file name="mpid_nem_datatypes.h" info="1447123141"/>
-<file name="mpid_nem_queue.h" info="1447123141"/>
-<file name="mpid_nem_atomics.h" info="1447123141"/>
-<file name="mpid_nem_generic_queue.h" info="1447123141"/>
-<file name="mpid_nem_fbox.h" info="1447123141"/>
-<file name="mpid_nem_debug.h" info="1447123141"/>
-<file name="mpid_nem_pre.h" info="1447123141"/>
-<file name="mpid_nem_defs.h" info="1447123141"/>
-<file name="mpidi_nem_statistics.h" info="1447123141"/>
-<file name="mpid_nem_nets.h" info="1447123141"/>
-<file name="mpidi_ch3_nemesis.h" info="1447123141"/>
-<file name="mpid_nem_inline.h" info="1447123141"/>
+<file name="mpid_nem_post.h" info="1478973152"/>
+<file name="mpid_nem_datatypes.h" info="1478973152"/>
+<file name="mpidi_ch3_pre.h" info="1478973152"/>
+<file name="mpid_nem_nets.h" info="1478973152"/>
+<file name="mpid_nem_fbox.h" info="1478973152"/>
+<file name="mpid_nem_defs.h" info="1478973152"/>
+<file name="mpidi_nem_statistics.h" info="1478973152"/>
+<file name="mpidi_ch3_nemesis.h" info="1478973152"/>
+<file name="mpid_nem_debug.h" info="1478973152"/>
+<file name="mpid_nem_pre.h" info="1478973152"/>
+<file name="mpidi_ch3_post.h" info="1478973152"/>
+<file name="mpid_nem_impl.h" info="1478973152"/>
+<file name="mpidi_ch3_impl.h" info="1478973152"/>
+<file name="mpid_nem_atomics.h" info="1478973152"/>
+<file name="mpid_nem_queue.h" info="1478973152"/>
+<file name="mpid_nem_inline.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpidi_ch3_post.h">
-</fileinfo>
-<fileinfo name="mpid_nem_impl.h">
+<fileinfo name="mpid_nem_post.h">
</fileinfo>
-<fileinfo name="mpidi_ch3_impl.h">
+<fileinfo name="mpid_nem_datatypes.h">
</fileinfo>
<fileinfo name="mpidi_ch3_pre.h">
</fileinfo>
-<fileinfo name="mpid_nem_post.h">
-</fileinfo>
-<fileinfo name="mpid_nem_datatypes.h">
+<fileinfo name="mpid_nem_nets.h">
</fileinfo>
-<fileinfo name="mpid_nem_queue.h">
-MPID_STATE_MPID_NEM_CELL_INIT MPID_nem_cell_init
-MPID_STATE_MPID_NEM_QUEUE_INIT MPID_nem_queue_init
+<fileinfo name="mpid_nem_fbox.h">
</fileinfo>
-<fileinfo name="mpid_nem_atomics.h">
+<fileinfo name="mpid_nem_defs.h">
</fileinfo>
-<fileinfo name="mpid_nem_generic_queue.h">
+<fileinfo name="mpidi_nem_statistics.h">
</fileinfo>
-<fileinfo name="mpid_nem_fbox.h">
+<fileinfo name="mpidi_ch3_nemesis.h">
</fileinfo>
<fileinfo name="mpid_nem_debug.h">
</fileinfo>
<fileinfo name="mpid_nem_pre.h">
</fileinfo>
-<fileinfo name="mpid_nem_defs.h">
+<fileinfo name="mpidi_ch3_post.h">
</fileinfo>
-<fileinfo name="mpidi_nem_statistics.h">
+<fileinfo name="mpid_nem_impl.h">
</fileinfo>
-<fileinfo name="mpid_nem_nets.h">
+<fileinfo name="mpidi_ch3_impl.h">
</fileinfo>
-<fileinfo name="mpidi_ch3_nemesis.h">
+<fileinfo name="mpid_nem_atomics.h">
+</fileinfo>
+<fileinfo name="mpid_nem_queue.h">
+MPID_STATE_MPID_NEM_CELL_INIT MPID_nem_cell_init
+MPID_STATE_MPID_NEM_QUEUE_INIT MPID_nem_queue_init
</fileinfo>
<fileinfo name="mpid_nem_inline.h">
MPID_STATE_MPID_NEM_MPICH_SENDV MPID_nem_mpich_sendv
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_datatypes.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_datatypes.h
index 3d3be04..acb9840 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_datatypes.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_datatypes.h
@@ -135,40 +135,33 @@
#define MPID_NEM_PKT_MPICH 1
#define MPID_NEM_PKT_MPICH_HEAD 2
-#define MPID_NEM_FBOX_SOURCE(cell) (MPID_nem_mem_region.local_procs[(cell)->pkt.mpich.source])
-#define MPID_NEM_CELL_SOURCE(cell) ((cell)->pkt.mpich.source)
-#define MPID_NEM_CELL_DEST(cell) ((cell)->pkt.mpich.dest)
-#define MPID_NEM_CELL_DLEN(cell) ((cell)->pkt.mpich.datalen)
-#define MPID_NEM_CELL_SEQN(cell) ((cell)->pkt.mpich.seqno)
+#define MPID_NEM_FBOX_SOURCE(cell) (MPID_nem_mem_region.local_procs[(cell)->pkt.header.source])
+#define MPID_NEM_CELL_SOURCE(cell) ((cell)->pkt.header.source)
+#define MPID_NEM_CELL_DEST(cell) ((cell)->pkt.header.dest)
+#define MPID_NEM_CELL_DLEN(cell) ((cell)->pkt.header.datalen)
+#define MPID_NEM_CELL_SEQN(cell) ((cell)->pkt.header.seqno)
#define MPID_NEM_MPICH_HEAD_LEN sizeof(MPID_nem_pkt_header_t)
#define MPID_NEM_MPICH_DATA_LEN (MPID_NEM_CELL_PAYLOAD_LEN - MPID_NEM_MPICH_HEAD_LEN)
#define MPID_NEM_PKT_HEADER_FIELDS \
- int source; \
- int dest; \
- MPIU_Pint datalen; \
- unsigned short seqno; \
- unsigned short type; /* currently used only with checkpointing */
typedef struct MPID_nem_pkt_header
{
- MPID_NEM_PKT_HEADER_FIELDS;
+ int source;
+ int dest;
+ intptr_t datalen;
+ unsigned short seqno;
+ unsigned short type; /* currently used only with checkpointing */
} MPID_nem_pkt_header_t;
-typedef struct MPID_nem_pkt_mpich
+typedef struct MPID_nem_pkt
{
- MPID_NEM_PKT_HEADER_FIELDS;
+ MPID_nem_pkt_header_t header;
union {
char payload[MPID_NEM_MPICH_DATA_LEN];
double dummy; /* align paylod to double */
} p;
-} MPID_nem_pkt_mpich_t;
-
-typedef union
-{
- MPID_nem_pkt_header_t header;
- MPID_nem_pkt_mpich_t mpich;
} MPID_nem_pkt_t;
/* Nemesis cells which are to be used in shared memory need to use
@@ -217,16 +210,16 @@ typedef MPID_nem_abs_cell_t *MPID_nem_abs_cell_ptr_t;
((MPID_nem_cell_ptr_t) ((char*)(packetp) - (char *)MPID_NEM_CELL_TO_PACKET((MPID_nem_cell_ptr_t)0)))
#define MPID_NEM_MIN_PACKET_LEN (sizeof (MPID_nem_pkt_header_t))
#define MPID_NEM_MAX_PACKET_LEN (sizeof (MPID_nem_pkt_t))
-#define MPID_NEM_PACKET_LEN(pkt) ((pkt)->mpich.datalen + MPID_NEM_MPICH_HEAD_LEN)
+#define MPID_NEM_PACKET_LEN(pkt) ((pkt)->header.datalen + MPID_NEM_MPICH_HEAD_LEN)
#define MPID_NEM_OPT_LOAD 16
#define MPID_NEM_OPT_SIZE ((sizeof(MPIDI_CH3_Pkt_t)) + (MPID_NEM_OPT_LOAD))
#define MPID_NEM_OPT_HEAD_LEN ((MPID_NEM_MPICH_HEAD_LEN) + (MPID_NEM_OPT_SIZE))
#define MPID_NEM_PACKET_OPT_LEN(pkt) \
- (((pkt)->mpich.datalen < MPID_NEM_OPT_SIZE) ? (MPID_NEM_OPT_HEAD_LEN) : (MPID_NEM_PACKET_LEN(pkt)))
+ (((pkt)->header.datalen < MPID_NEM_OPT_SIZE) ? (MPID_NEM_OPT_HEAD_LEN) : (MPID_NEM_PACKET_LEN(pkt)))
-#define MPID_NEM_PACKET_PAYLOAD(pkt) ((pkt)->mpich.payload)
+#define MPID_NEM_PACKET_PAYLOAD(pkt) ((pkt)->header.payload)
typedef struct MPID_nem_queue
{
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_debug.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_debug.h
index 0b19d11..9a4b783 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_debug.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_debug.h
@@ -9,7 +9,7 @@
/*#define YIELD_IN_SKIP*/
#ifdef YIELD_IN_SKIP
-#define SKIP MPIU_PW_Sched_yield()
+#define SKIP MPL_sched_yield()
#warning "SKIP is yield"
#else /* YIELD_IN_SKIP */
#define SKIP do{}while(0)
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_defs.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_defs.h
index 3a352b7..51d7676 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_defs.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_defs.h
@@ -9,10 +9,8 @@
#include "mpid_nem_datatypes.h"
#include "mpi.h"
-#include "mpiutil.h"
-#include "mpiu_os_wrappers_pre.h"
-
-#define MPID_NEM_MAX_FNAME_LEN 256
+#include "mpiimpl.h"
+#include "mpidu_shm.h"
/* FIXME: This definition should be gotten from mpidi_ch3_impl.h */
#ifndef MAX_HOSTNAME_LEN
@@ -60,32 +58,6 @@ static inline MPID_nem_cell_rel_ptr_t MPID_NEM_ABS_TO_REL (MPID_nem_cell_ptr_t a
#define MPID_NEM_ABS_TO_REL(ptr) (ptr)
#endif /*MPID_NEM_SYMMETRIC_QUEUES */
-typedef struct MPID_nem_barrier
-{
- OPA_int_t val;
- OPA_int_t wait;
-}
-MPID_nem_barrier_t;
-
-typedef struct MPID_nem_seg
-{
- MPIU_Size_t segment_len;
- /* Handle to shm seg */
- MPIU_SHMW_Hnd_t hnd;
- /* Pointers */
- char *base_addr;
- /* Misc */
- char file_name[MPID_NEM_MAX_FNAME_LEN];
- int base_descs;
- int symmetrical;
-} MPID_nem_seg_t, *MPID_nem_seg_ptr_t;
-
-typedef struct MPID_nem_seg_info
-{
- size_t size;
- char *addr;
-} MPID_nem_seg_info_t, *MPID_nem_seg_info_ptr_t;
-
/* NOTE: MPID_NEM_IS_LOCAL should only be used when the process is known to be
in your comm_world (such as at init time). This will generally not work for
dynamic processes. Check vc_ch->is_local instead. If that is true, then
@@ -111,8 +83,8 @@ MPID_nem_barrier_vars_t;
typedef struct MPID_nem_mem_region
{
- MPID_nem_seg_t memory;
- MPID_nem_seg_info_t *seg;
+ MPIDU_shm_seg_t memory;
+ MPIDU_shm_seg_info_t *seg;
int num_seg;
int map_lock;
int num_local;
@@ -126,7 +98,7 @@ typedef struct MPID_nem_mem_region
MPID_nem_cell_ptr_t Elements;
MPID_nem_queue_ptr_t *FreeQ;
MPID_nem_queue_ptr_t *RecvQ;
- MPID_nem_barrier_t *barrier;
+ MPIDU_shm_barrier_t *barrier;
MPID_nem_queue_ptr_t my_freeQ;
MPID_nem_queue_ptr_t my_recvQ;
MPID_nem_barrier_vars_t *barrier_vars;
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_fbox.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_fbox.h
index 613275e..562efa0 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_fbox.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_fbox.h
@@ -39,9 +39,9 @@ static inline int poll_active_fboxes(MPID_nem_cell_ptr_t *cell)
MPID_nem_fbox_mpich_t *fbox;
fbox = MPID_nem_curr_fboxq_elem->fbox;
- MPIU_Assert(fbox != NULL);
+ MPIR_Assert(fbox != NULL);
if (OPA_load_acquire_int(&fbox->flag.value) &&
- fbox->cell.pkt.mpich.seqno == MPID_nem_recv_seqno[MPID_nem_curr_fboxq_elem->grank])
+ fbox->cell.pkt.header.seqno == MPID_nem_recv_seqno[MPID_nem_curr_fboxq_elem->grank])
{
++MPID_nem_recv_seqno[MPID_nem_curr_fboxq_elem->grank];
*cell = &fbox->cell;
@@ -69,7 +69,7 @@ static inline int poll_every_fbox(MPID_nem_cell_ptr_t *cell)
do {
fbox = MPID_nem_curr_fbox_all_poll->fbox;
if (fbox && OPA_load_acquire_int(&fbox->flag.value) &&
- fbox->cell.pkt.mpich.seqno == MPID_nem_recv_seqno[MPID_nem_curr_fbox_all_poll->grank]) {
+ fbox->cell.pkt.header.seqno == MPID_nem_recv_seqno[MPID_nem_curr_fbox_all_poll->grank]) {
++MPID_nem_recv_seqno[MPID_nem_curr_fbox_all_poll->grank];
*cell = &fbox->cell;
found = TRUE;
@@ -90,7 +90,7 @@ static inline int poll_every_fbox(MPID_nem_cell_ptr_t *cell)
\
fbox = MPID_nem_curr_fbox_all_poll->fbox; \
if (fbox && OPA_load_acquire_int(&fbox->flag.value) && \
- fbox->cell.pkt.mpich.seqno == MPID_nem_recv_seqno[MPID_nem_curr_fbox_all_poll->grank]) \
+ fbox->cell.pkt.header.seqno == MPID_nem_recv_seqno[MPID_nem_curr_fbox_all_poll->grank]) \
{ \
++MPID_nem_recv_seqno[MPID_nem_curr_fbox_all_poll->grank]; \
*(_cell) = &fbox->cell; \
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_generic_queue.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_generic_queue.h
deleted file mode 100644
index 5068d4d..0000000
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_generic_queue.h
+++ /dev/null
@@ -1,339 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2006 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPID_NEM_GENERIC_QUEUE_H
-#define MPID_NEM_GENERIC_QUEUE_H
-
-/* Generic queue macros -- "next_field" should be set to the name of
- the next pointer field in the element (e.g., "ch.tcp_sendq_next") */
-
-#define PRINT_QUEUE(qp, next_field) do { \
- } while(0)
-#define PRINTM_QUEUE(qp, next_field_macro, next_field) do { \
- } while(0)
-
-#define GENERIC_Q_DECL(type) struct { type *head, *tail; }
-
-#define GENERIC_Q_EMPTY(q) ((q).head == NULL)
-
-#define GENERIC_Q_HEAD(q) ((q).head)
-
-#define GENERIC_Q_ENQUEUE_EMPTY(qp, ep, next_field) do { \
- MPIU_Assert (GENERIC_Q_EMPTY (*(qp))); \
- (qp)->head = (qp)->tail = ep; \
- (ep)->next_field = NULL; \
- PRINT_QUEUE (qp, next_field); \
- } while (0)
-
-#define GENERIC_Q_ENQUEUE(qp, ep, next_field) do { \
- if (GENERIC_Q_EMPTY (*(qp))) \
- GENERIC_Q_ENQUEUE_EMPTY (qp, ep, next_field); \
- else \
- { \
- (qp)->tail->next_field = ep; \
- (qp)->tail = ep; \
- (ep)->next_field = NULL; \
- } \
- PRINT_QUEUE (qp, next_field); \
- } while (0)
-
-#define GENERIC_Q_ENQUEUE_AT_HEAD(qp, ep, next_field) do { \
- if (GENERIC_Q_EMPTY (*(qp))) \
- GENERIC_Q_ENQUEUE_EMPTY (qp, ep, next_field); \
- else \
- { \
- (ep)->next_field = (qp)->head; \
- (qp)->head = ep; \
- } \
- PRINT_QUEUE (qp, next_field); \
- } while (0)
-
-/* the _MULTIPLE routines assume that ep0 is the head and ep1 is the
- tail of a linked list of elements. The list is inserted on the end
- of the queue. */
-#define GENERIC_Q_ENQUEUE_EMPTY_MULTIPLE(qp, ep0, ep1, next_field) do { \
- MPIU_Assert (GENERIC_Q_EMPTY (*(qp))); \
- (qp)->head = ep0; \
- (qp)->tail = ep1; \
- (ep1)->next_field = NULL; \
- } while (0)
-
-#define GENERIC_Q_ENQUEUE_MULTIPLE(qp, ep0, ep1, next_field) do { \
- if (GENERIC_Q_EMPTY (*(qp))) \
- GENERIC_Q_ENQUEUE_EMPTY_MULTIPLE (qp, ep0, ep1, next_field); \
- else \
- { \
- (qp)->tail->next_field = ep0; \
- (qp)->tail = ep1; \
- (ep1)->next_field = NULL; \
- } \
- } while (0)
-
-
-#define GENERIC_Q_DEQUEUE(qp, epp, next_field) do { \
- MPIU_Assert (!GENERIC_Q_EMPTY (*(qp))); \
- *(epp) = (qp)->head; \
- (qp)->head = (*(epp))->next_field; \
- if ((qp)->head == NULL) \
- (qp)->tail = NULL; \
- PRINT_QUEUE (qp, next_field); \
- } while (0)
-
-/* remove the elements from the top of the queue starting with ep0 through ep1 */
-#define GENERIC_Q_REMOVE_ELEMENTS(qp, ep0, ep1, next_field) do { \
- MPIU_Assert (GENERIC_Q_HEAD (*(qp)) == (ep0)); \
- (qp)->head = (ep1)->next_field; \
- if ((qp)->head == NULL) \
- (qp)->tail = NULL; \
- } while (0)
-
-/* search for element satisfying a predicate */
-/* the predicate "pred" is any legal c conditional */
-/* the current element can be accessed in the predicate with the _e
- variable e.g.: "_e->foo == NULL" */
-#define GENERIC_Q_SEARCH(qp, pred, epp, el_type, next_field) do { \
- el_type *_e; \
- *(epp) = NULL; \
- _e = GENERIC_Q_HEAD(*(qp)); \
- while (_e) \
- { \
- if (pred) \
- { \
- *(epp) = _e; \
- break; \
- } \
- _e = _e->next_field; \
- } \
-} while (0)
-
-/* search for element satisfying a predicate and remove it from the queue */
-#define GENERIC_Q_SEARCH_REMOVE(qp, pred, epp, el_type, next_field) do { \
- el_type *_e; \
- el_type *_prev; \
- if (GENERIC_Q_EMPTY(*(qp))) { \
- *(epp) = NULL; \
- break; \
- } \
- _e = GENERIC_Q_HEAD(*(qp)); \
- if (pred) \
- { \
- GENERIC_Q_DEQUEUE(qp, epp, next_field); \
- } \
- else \
- { \
- while (1) \
- { \
- _prev = _e; \
- _e = _e->next_field; \
- \
- if (_e == NULL) \
- { \
- *(epp) = NULL; \
- break; \
- } \
- \
- if (pred) \
- { \
- *(epp) = _e; \
- _prev->next_field = _e->next_field; \
- if ((qp)->tail == _e) \
- (qp)->tail = _prev; \
- break; \
- } \
- } \
- } \
-} while (0)
-
-
-/* queue macros that use another macro to find the 'next' field, e.g.,
- when the next field is in the channel private area of a request.
- The macro is of the form "macro_name(element_ptr, next_field)"*/
-#define GENERICM_Q_DECL(type, q_name) typedef struct { type *head, *tail; } q_name;
-
-#define GENERICM_Q_EMPTY(q) ((q).head == NULL)
-
-#define GENERICM_Q_HEAD(q) ((q).head)
-
-#define GENERICM_Q_ENQUEUE_EMPTY(qp, ep, next_field_macro, next_field) do { \
- MPIU_Assert (GENERICM_Q_EMPTY (*(qp))); \
- (qp)->head = (qp)->tail = ep; \
- next_field_macro(ep, next_field) = NULL; \
- PRINTM_QUEUE (qp, next_field_macro, next_field); \
- } while (0)
-
-#define GENERICM_Q_ENQUEUE(qp, ep, next_field_macro, next_field) do { \
- if (GENERICM_Q_EMPTY (*(qp))) \
- GENERICM_Q_ENQUEUE_EMPTY (qp, ep, next_field_macro, next_field); \
- else \
- { \
- next_field_macro((qp)->tail, next_field) = ep; \
- (qp)->tail = ep; \
- next_field_macro(ep, next_field) = NULL; \
- } \
- PRINTM_QUEUE (qp, next_field_macro, next_field); \
- } while (0)
-
-#define GENERICM_Q_ENQUEUE_AT_HEAD(qp, ep, next_field_macro, next_field) do { \
- if (GENERICM_Q_EMPTY (*(qp))) \
- GENERICM_Q_ENQUEUE_EMPTY (qp, ep, next_field_macro, next_field); \
- else \
- { \
- next_field_macro(ep, next_field) = (qp)->head; \
- (qp)->head = ep; \
- } \
- PRINTM_QUEUE (qp, next_field_macro, next_field); \
- } while (0)
-
-/* the _MULTIPLE routines assume that ep0 is the head and ep1 is the
- tail of a linked list of elements. The list is inserted on the end
- of the queue. */
-#define GENERICM_Q_ENQUEUE_EMPTY_MULTIPLE(qp, ep0, ep1, next_field_macro, next_field) do { \
- MPIU_Assert (GENERICM_Q_EMPTY (*(qp))); \
- (qp)->head = ep0; \
- (qp)->tail = ep1; \
- next_field_macro(ep1, next_field) = NULL; \
- } while (0)
-
-#define GENERICM_Q_ENQUEUE_MULTIPLE(qp, ep0, ep1, next_field_macro, next_field) do { \
- if (GENERICM_Q_EMPTY (*(qp))) \
- GENERICM_Q_ENQUEUE_EMPTY_MULTIPLE (qp, ep0, ep1, next_field_macro, next_field); \
- else \
- { \
- next_field_macro((qp)->tail, next_field) = ep0; \
- (qp)->tail = ep1; \
- next_field_macro(ep1, next_field) = NULL; \
- } \
- } while (0)
-
-
-#define GENERICM_Q_DEQUEUE(qp, epp, next_field_macro, next_field) do { \
- MPIU_Assert (!GENERICM_Q_EMPTY (*(qp))); \
- *(epp) = (qp)->head; \
- (qp)->head = next_field_macro(*(epp), next_field); \
- if ((qp)->head == NULL) \
- (qp)->tail = NULL; \
- } while (0)
-
-/* remove the elements from the top of the queue starting with ep0 through ep1 */
-#define GENERICM_Q_REMOVE_ELEMENTS(qp, ep0, ep1, next_field_macro, next_field) do { \
- MPIU_Assert (GENERICM_Q_HEAD (*(qp)) == (ep0)); \
- (qp)->head = next_field_macro(ep1, next_field); \
- if ((qp)->head == NULL) \
- (qp)->tail = NULL; \
- } while (0)
-
-/* search for element satisfying a predicate */
-/* the predicate "pred" is any legal c conditional */
-/* the current element can be accessed in the predicate with the _e
- variable e.g.: "_e->foo == NULL" */
-#define GENERICM_Q_SEARCH(qp, pred, epp, el_type, next_field_macro, next_field) do { \
- el_type *_e; \
- *(epp) = NULL; \
- _e = GENERICM_Q_HEAD(*(qp)); \
- while (_e) \
- { \
- if (pred) \
- { \
- *(epp) = _e; \
- break; \
- } \
- _e = next_field_macro(_e, next_field); \
- } \
- } while (0)
-
-/* search for element satisfying a predicate and remove it from the queue */
-#define GENERICM_Q_SEARCH_REMOVE(qp, pred, epp, el_type, next_field_macro, next_field) do { \
- el_type *_e; \
- el_type *_prev; \
- if (GENERICM_Q_EMPTY(*(qp))) \
- *(epp) = NULL; \
- _e = GENERICM_Q_HEAD(*(qp)); \
- if (pred) \
- { \
- GENERICM_Q_DEQUEUE(qp, epp, next_field_macro, next_field); \
- } \
- else \
- { \
- while (1) \
- { \
- _prev = _e; \
- _e = next_field_macro(_e, next_field); \
- \
- if (_e == NULL) \
- { \
- *(epp) = NULL; \
- break; \
- } \
- \
- if (pred) \
- { \
- *(epp) = _e; \
- _prev->next = _e->next; \
- if ((qp)->tail == _e) \
- (qp)->tail = _prev; \
- break; \
- } \
- } \
- } \
- } while (0)
-
-
-/* Generic list macros */
-#define GENERIC_L_EMPTY(q) ((q).head == NULL)
-
-#define GENERIC_L_HEAD(q) ((q).head)
-
-#define GENERIC_L_ADD_EMPTY(qp, ep, next_field, prev_field) do { \
- MPIU_Assert (GENERIC_L_EMPTY (*(qp))); \
- (qp)->head = ep; \
- (ep)->next_field = (ep)->prev_field = NULL; \
- } while (0)
-
-#define GENERIC_L_ADD(qp, ep, next_field, prev_field) do { \
- if (GENERIC_L_EMPTY (*(qp))) \
- GENERIC_L_ADD_EMPTY (qp, ep, next_field, prev_field); \
- else \
- { \
- (ep)->prev_field = NULL; \
- (ep)->next_field = (qp)->head; \
- (qp)->head->prev_field = ep; \
- (qp)->head = ep; \
- } \
- } while (0)
-
-#define GENERIC_L_REMOVE(qp, ep, next_field, prev_field) do { \
- MPIU_Assert (!GENERIC_L_EMPTY (*(qp))); \
- if ((ep)->prev_field) \
- ((ep)->prev_field)->next_field = (ep)->next_field; \
- else \
- (qp)->head = (ep)->next_field; \
- if ((ep)->next_field) \
- ((ep)->next_field)->prev_field = (ep)->prev_field; \
- } while (0)
-
-
-/* Generic stack macros */
-#define GENERIC_S_EMPTY(s) ((s).top == NULL)
-
-#define GENERIC_S_TOP(s) ((s).top)
-
-#define GENERIC_S_PUSH(sp, ep, next_field) do { \
- (ep)->next_field = (sp)->top; \
- (sp)->top = ep; \
- } while (0)
-
-/* PUSH_MULTIPLE pushes a linked list of elements onto the stack. It
- assumes that ep0 is the head of the linked list and ep1 is at the tail */
-#define GENERIC_S_PUSH_MULTIPLE(sp, ep0, ep1, next_field) do { \
- (ep1)->next_field = (sp)->top; \
- (sp)->top = ep0; \
- } while (0)
-
-#define GENERIC_S_POP(sp, epp, next_field) do { \
- *(epp) = (sp)->top; \
- (sp)->top = (*(epp))->next_field; \
- } while (0)
-#endif /* MPID_NEM_GENERIC_QUEUE_H */
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h
index c9065f3..f16eabb 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_impl.h
@@ -9,7 +9,7 @@
#include "my_papi_defs.h"
#include "mpidi_ch3_impl.h"
-#include "mpimem.h"
+#include "mpir_mem.h"
#include "mpid_nem_net_module_defs.h"
#include "mpid_nem_atomics.h"
#include "mpid_nem_defs.h"
@@ -19,27 +19,24 @@
#define MPID_NEM__BYPASS_Q_MAX_VAL ((MPID_NEM_MPICH_DATA_LEN) - (sizeof(MPIDI_CH3_Pkt_t)))
-int MPIDI_CH3I_Seg_alloc(size_t len, void **ptr_p);
-int MPIDI_CH3I_Seg_commit(MPID_nem_seg_ptr_t memory, int num_local, int local_rank);
-int MPIDI_CH3I_Seg_destroy(void);
-int MPID_nem_check_alloc(int);
int MPID_nem_mpich_init(void);
int MPID_nem_coll_init (void);
-int MPID_nem_send_iov(MPIDI_VC_t *vc, MPID_Request **sreq_ptr, MPL_IOV *iov, int n_iov);
+int MPID_nem_send_iov(MPIDI_VC_t *vc, MPIR_Request **sreq_ptr, MPL_IOV *iov, int n_iov);
int MPID_nem_lmt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int arraySize);
int MPID_nem_register_initcomp_cb(int (* callback)(void));
int MPID_nem_choose_netmod(void);
-int MPIDI_CH3I_comm_create(MPID_Comm *comm, void *param);
-int MPIDI_CH3I_comm_destroy(MPID_Comm *comm, void *param);
+int MPIDI_CH3I_comm_create(MPIR_Comm *comm, void *param);
+int MPIDI_CH3I_comm_destroy(MPIR_Comm *comm, void *param);
/* rendezvous hooks */
-int MPID_nem_lmt_RndvSend(MPID_Request **sreq_p, const void * buf, MPI_Aint count, MPI_Datatype datatype, int dt_contig,
- MPIDI_msg_sz_t data_sz, MPI_Aint dt_true_lb, int rank, int tag, MPID_Comm * comm, int context_offset);
-int MPID_nem_lmt_RndvRecv(struct MPIDI_VC *vc, MPID_Request *rreq);
+int MPID_nem_lmt_RndvSend(MPIR_Request **sreq_p, const void * buf, MPI_Aint count, MPI_Datatype datatype, int dt_contig,
+ intptr_t data_sz, MPI_Aint dt_true_lb, int rank, int tag, MPIR_Comm * comm, int context_offset);
+int MPID_nem_lmt_RndvRecv(struct MPIDI_VC *vc, MPIR_Request *rreq);
-#define MPID_nem_mpich_release_fbox(cell) \
- (OPA_store_release_int(&MPID_nem_mem_region.mailboxes.in[(cell)->pkt.mpich.source]->mpich.flag.value, 0), \
- MPI_SUCCESS)
+#define MPID_nem_mpich_release_fbox(cell) \
+ do { \
+ OPA_store_release_int(&MPID_nem_mem_region.mailboxes.in[(cell)->pkt.header.source]->mpich.flag.value, 0); \
+ } while (0)
/* initialize shared-memory MPI_Barrier variables */
int MPID_nem_barrier_vars_init (MPID_nem_barrier_vars_t *barrier_region);
@@ -54,8 +51,8 @@ typedef struct MPID_nem_pkt_lmt_rts
MPIDI_CH3_Pkt_type_t type;
MPIDI_Message_match match;
MPI_Request sender_req_id;
- MPIDI_msg_sz_t data_sz;
- MPIDI_msg_sz_t cookie_len;
+ intptr_t data_sz;
+ intptr_t cookie_len;
}
MPID_nem_pkt_lmt_rts_t;
@@ -64,8 +61,8 @@ typedef struct MPID_nem_pkt_lmt_cts
MPIDI_CH3_Pkt_type_t type;
MPI_Request sender_req_id;
MPI_Request receiver_req_id;
- MPIDI_msg_sz_t data_sz;
- MPIDI_msg_sz_t cookie_len;
+ intptr_t data_sz;
+ intptr_t cookie_len;
}
MPID_nem_pkt_lmt_cts_t;
@@ -82,7 +79,7 @@ typedef struct MPID_nem_pkt_lmt_cookie
int from_sender;
MPI_Request sender_req_id;
MPI_Request receiver_req_id;
- MPIDI_msg_sz_t cookie_len;
+ intptr_t cookie_len;
}
MPID_nem_pkt_lmt_cookie_t;
@@ -137,10 +134,10 @@ typedef union MPIDI_CH3_nem_pkt
*/
#define MPID_nem_lmt_send_RTS(vc, rts_pkt, s_cookie_buf, s_cookie_len) do { \
- MPID_Request *_rts_req; \
+ MPIR_Request *_rts_req; \
MPL_IOV _iov[2]; \
\
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending rndv RTS packet"); \
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending rndv RTS packet"); \
(rts_pkt)->cookie_len = (s_cookie_len); \
\
_iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)(rts_pkt); \
@@ -148,7 +145,7 @@ typedef union MPIDI_CH3_nem_pkt
_iov[1].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)(s_cookie_buf); \
_iov[1].MPL_IOV_LEN = (s_cookie_len); \
\
- MPIU_DBG_MSGPKT((vc), (rts_pkt)->match.parts.tag, (rts_pkt)->match.parts.context_id, (rts_pkt)->match.parts.rank, \
+ MPL_DBG_MSGPKT((vc), (rts_pkt)->match.parts.tag, (rts_pkt)->match.parts.context_id, (rts_pkt)->match.parts.rank, \
(rts_pkt)->data_sz, "Rndv"); \
\
mpi_errno = MPIDI_CH3_iStartMsgv((vc), _iov, ((s_cookie_len)) ? 2 : 1, &_rts_req); \
@@ -158,8 +155,8 @@ typedef union MPIDI_CH3_nem_pkt
if (NULL != _rts_req) { \
/* error case: drop both the ch3 and nemesis \
* references, so the request can be cleanly freed */ \
- MPID_Request_release(_rts_req); \
- MPID_Request_release(_rts_req); \
+ MPIR_Request_free(_rts_req); \
+ MPIR_Request_free(_rts_req); \
} \
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**rtspkt"); \
} \
@@ -171,20 +168,20 @@ typedef union MPIDI_CH3_nem_pkt
mpi_errno = _rts_req->status.MPI_ERROR; \
/* error case: drop both the ch3 and nemesis \
* references, so the request can be cleanly freed */ \
- MPID_Request_release(_rts_req); \
- MPID_Request_release(_rts_req); \
+ MPIR_Request_free(_rts_req); \
+ MPIR_Request_free(_rts_req); \
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**rtspkt"); \
} \
- MPID_Request_release(_rts_req); \
+ MPIR_Request_free(_rts_req); \
} \
} while (0)
#define MPID_nem_lmt_send_CTS(vc, rreq, r_cookie_buf, r_cookie_len) do { \
MPID_PKT_DECL_CAST(_upkt, MPID_nem_pkt_lmt_cts_t, _cts_pkt); \
- MPID_Request *_cts_req; \
+ MPIR_Request *_cts_req; \
MPL_IOV _iov[2]; \
\
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending rndv CTS packet"); \
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending rndv CTS packet"); \
MPIDI_Pkt_init(_cts_pkt, MPIDI_NEM_PKT_LMT_CTS); \
_cts_pkt->sender_req_id = (rreq)->ch.lmt_req_id; \
_cts_pkt->receiver_req_id = (rreq)->handle; \
@@ -201,7 +198,7 @@ typedef union MPIDI_CH3_nem_pkt
if (_cts_req != NULL) \
{ \
MPIR_ERR_CHKANDJUMP(_cts_req->status.MPI_ERROR, mpi_errno, MPI_ERR_OTHER, "**ctspkt"); \
- MPID_Request_release(_cts_req); \
+ MPIR_Request_free(_cts_req); \
} \
} while (0)
@@ -209,15 +206,15 @@ typedef union MPIDI_CH3_nem_pkt
#define FUNCNAME MPID_nem_lmt_send_COOKIE
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPID_nem_lmt_send_COOKIE(MPIDI_VC_t *vc, MPID_Request *req,
+static inline int MPID_nem_lmt_send_COOKIE(MPIDI_VC_t *vc, MPIR_Request *req,
void *cookie_buf, MPI_Aint cookie_len)
{
int mpi_errno = MPI_SUCCESS;
MPID_PKT_DECL_CAST(_upkt, MPID_nem_pkt_lmt_cookie_t, cookie_pkt);
- MPID_Request *cookie_req;
+ MPIR_Request *cookie_req;
MPL_IOV iov[2];
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending rndv COOKIE packet");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending rndv COOKIE packet");
MPIDI_Pkt_init(cookie_pkt, MPIDI_NEM_PKT_LMT_COOKIE);
cookie_pkt->cookie_len = (cookie_len);
@@ -252,7 +249,7 @@ static inline int MPID_nem_lmt_send_COOKIE(MPIDI_VC_t *vc, MPID_Request *req,
if (cookie_req != NULL)
{
MPIR_ERR_CHKANDJUMP(cookie_req->status.MPI_ERROR, mpi_errno, MPI_ERR_OTHER, "**cookiepkt");
- MPID_Request_release(cookie_req);
+ MPIR_Request_free(cookie_req);
}
fn_fail:
@@ -261,9 +258,9 @@ fn_fail:
#define MPID_nem_lmt_send_DONE(vc, rreq) do { \
MPID_PKT_DECL_CAST(_upkt, MPID_nem_pkt_lmt_done_t, _done_pkt); \
- MPID_Request *_done_req; \
+ MPIR_Request *_done_req; \
\
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending rndv DONE packet"); \
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending rndv DONE packet"); \
MPIDI_Pkt_init(_done_pkt, MPIDI_NEM_PKT_LMT_DONE); \
_done_pkt->req_id = (rreq)->ch.lmt_req_id; \
\
@@ -272,7 +269,7 @@ fn_fail:
if (_done_req != NULL) \
{ \
MPIR_ERR_CHKANDJUMP(_done_req->status.MPI_ERROR, mpi_errno, MPI_ERR_OTHER, "**donepkt"); \
- MPID_Request_release(_done_req); \
+ MPIR_Request_free(_done_req); \
} \
} while (0)
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
index deb3bf8..0beaa7e 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
@@ -20,17 +20,17 @@ static inline int MPID_nem_mpich_sendv (MPL_IOV **iov, int *n_iov, MPIDI_VC_t *v
static inline void MPID_nem_mpich_dequeue_fastbox (int local_rank);
static inline void MPID_nem_mpich_enqueue_fastbox (int local_rank);
static inline int MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
- void *ext_header, MPIDI_msg_sz_t ext_header_sz,
+ void *ext_header, intptr_t ext_header_sz,
MPIDI_VC_t *vc, int *again);
static inline int MPID_nem_recv_seqno_matches (MPID_nem_queue_ptr_t qhead);
static inline int MPID_nem_mpich_test_recv (MPID_nem_cell_ptr_t *cell, int *in_fbox, int in_blocking_progress);
static inline int MPID_nem_mpich_blocking_recv (MPID_nem_cell_ptr_t *cell, int *in_fbox, int completions);
static inline int MPID_nem_mpich_test_recv_wait (MPID_nem_cell_ptr_t *cell, int *in_fbox, int timeout);
static inline int MPID_nem_mpich_release_cell (MPID_nem_cell_ptr_t cell, MPIDI_VC_t *vc);
-static inline void MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first,
- MPIDI_msg_sz_t segment_size, void *header, MPIDI_msg_sz_t header_sz,
- void *ext_header, MPIDI_msg_sz_t ext_header_sz, MPIDI_VC_t *vc, int *again);
-static inline void MPID_nem_mpich_send_seg (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_size,
+static inline void MPID_nem_mpich_send_seg_header (MPIDU_Segment *segment, intptr_t *segment_first,
+ intptr_t segment_size, void *header, intptr_t header_sz,
+ void *ext_header, intptr_t ext_header_sz, MPIDI_VC_t *vc, int *again);
+static inline void MPID_nem_mpich_send_seg (MPIDU_Segment *segment, intptr_t *segment_first, intptr_t segment_size,
MPIDI_VC_t *vc, int *again);
@@ -75,7 +75,7 @@ cvars:
static int poll_count_ = 0; \
if (poll_count_ >= MPIR_CVAR_POLLS_BEFORE_YIELD) { \
poll_count_ = 0; \
- MPIU_PW_Sched_yield(); \
+ MPL_sched_yield(); \
} else { \
++poll_count_; \
} \
@@ -106,8 +106,8 @@ MPID_nem_mpich_send_header (void* buf, int size, MPIDI_VC_t *vc, int *again)
/*DO_PAPI (PAPI_reset (PAPI_EventSet)); */
- MPIU_Assert (size == sizeof(MPIDI_CH3_Pkt_t));
- MPIU_Assert (vc_ch->is_local);
+ MPIR_Assert (size == sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert (vc_ch->is_local);
my_rank = MPID_nem_mem_region.rank;
@@ -119,18 +119,18 @@ MPID_nem_mpich_send_header (void* buf, int size, MPIDI_VC_t *vc, int *again)
if (MPID_nem_fbox_is_full((MPID_nem_fbox_common_ptr_t)pbox))
goto usequeue_l;
- pbox->cell.pkt.mpich.source = MPID_nem_mem_region.local_rank;
- pbox->cell.pkt.mpich.datalen = size;
- pbox->cell.pkt.mpich.seqno = vc_ch->send_seqno++;
+ pbox->cell.pkt.header.source = MPID_nem_mem_region.local_rank;
+ pbox->cell.pkt.header.datalen = size;
+ pbox->cell.pkt.header.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, pbox->cell.pkt.mpich.type = MPID_NEM_PKT_MPICH_HEAD);
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, pbox->cell.pkt.header.type = MPID_NEM_PKT_MPICH_HEAD);
- MPIU_Memcpy((void *)pbox->cell.pkt.mpich.p.payload, buf, size);
+ MPIR_Memcpy((void *)pbox->cell.pkt.p.payload, buf, size);
OPA_store_release_int(&pbox->flag.value, 1);
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "--> Sent fbox ");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (&pbox->cell));
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent fbox ");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (&pbox->cell));
goto return_success;
}
@@ -165,17 +165,17 @@ MPID_nem_mpich_send_header (void* buf, int size, MPIDI_VC_t *vc, int *again)
#endif /* PREFETCH_CELL */
DO_PAPI (PAPI_reset (PAPI_EventSet));
- el->pkt.mpich.source = my_rank;
- el->pkt.mpich.dest = vc->lpid;
- el->pkt.mpich.datalen = size;
- el->pkt.mpich.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, el->pkt.mpich.type = MPID_NEM_PKT_MPICH_HEAD);
+ el->pkt.header.source = my_rank;
+ el->pkt.header.dest = vc->lpid;
+ el->pkt.header.datalen = size;
+ el->pkt.header.seqno = vc_ch->send_seqno++;
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, el->pkt.header.type = MPID_NEM_PKT_MPICH_HEAD);
- MPIU_Memcpy((void *)el->pkt.mpich.p.payload, buf, size);
+ MPIR_Memcpy((void *)el->pkt.p.payload, buf, size);
DO_PAPI (PAPI_accum_var (PAPI_EventSet, PAPI_vvalues11));
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "--> Sent queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
DO_PAPI (PAPI_reset (PAPI_EventSet));
MPID_nem_queue_enqueue (vc_ch->recv_queue, el);
@@ -226,15 +226,15 @@ MPID_nem_mpich_sendv (MPL_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again)
int mpi_errno = MPI_SUCCESS;
MPID_nem_cell_ptr_t el;
char *cell_buf;
- MPIDI_msg_sz_t payload_len;
+ intptr_t payload_len;
int my_rank;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_SENDV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_SENDV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_SENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_SENDV);
- MPIU_Assert (*n_iov > 0 && (*iov)->MPL_IOV_LEN > 0);
- MPIU_Assert(vc_ch->is_local);
+ MPIR_Assert (*n_iov > 0 && (*iov)->MPL_IOV_LEN > 0);
+ MPIR_Assert(vc_ch->is_local);
DO_PAPI (PAPI_reset (PAPI_EventSet));
@@ -264,12 +264,12 @@ MPID_nem_mpich_sendv (MPL_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again)
#endif /*PREFETCH_CELL */
payload_len = MPID_NEM_MPICH_DATA_LEN;
- cell_buf = (char *) el->pkt.mpich.p.payload; /* cast away volatile */
+ cell_buf = (char *) el->pkt.p.payload; /* cast away volatile */
while (*n_iov && payload_len >= (*iov)->MPL_IOV_LEN)
{
size_t _iov_len = (*iov)->MPL_IOV_LEN;
- MPIU_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, _iov_len);
+ MPIR_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, _iov_len);
payload_len -= _iov_len;
cell_buf += _iov_len;
--(*n_iov);
@@ -278,20 +278,20 @@ MPID_nem_mpich_sendv (MPL_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again)
if (*n_iov && payload_len > 0)
{
- MPIU_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, payload_len);
+ MPIR_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, payload_len);
(*iov)->MPL_IOV_BUF = (char *)(*iov)->MPL_IOV_BUF + payload_len;
(*iov)->MPL_IOV_LEN -= payload_len;
payload_len = 0;
}
- el->pkt.mpich.source = my_rank;
- el->pkt.mpich.dest = vc->lpid;
- el->pkt.mpich.datalen = MPID_NEM_MPICH_DATA_LEN - payload_len;
- el->pkt.mpich.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, el->pkt.mpich.type = MPID_NEM_PKT_MPICH);
+ el->pkt.header.source = my_rank;
+ el->pkt.header.dest = vc->lpid;
+ el->pkt.header.datalen = MPID_NEM_MPICH_DATA_LEN - payload_len;
+ el->pkt.header.seqno = vc_ch->send_seqno++;
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, el->pkt.header.type = MPID_NEM_PKT_MPICH);
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "--> Sent queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
MPID_nem_queue_enqueue (vc_ch->recv_queue, el);
/*MPID_nem_rel_dump_queue( vc_ch->recv_queue ); */
@@ -310,7 +310,7 @@ MPID_nem_mpich_sendv (MPL_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again)
*again = 1;
goto fn_exit;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_SENDV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_SENDV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -324,24 +324,24 @@ MPID_nem_mpich_sendv (MPL_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again)
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline int
MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
- void *ext_hdr_ptr, MPIDI_msg_sz_t ext_hdr_sz,
+ void *ext_hdr_ptr, intptr_t ext_hdr_sz,
MPIDI_VC_t *vc, int *again)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_cell_ptr_t el;
char *cell_buf;
- MPIDI_msg_sz_t payload_len;
+ intptr_t payload_len;
int my_rank;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPI_Aint buf_offset = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
- MPIU_Assert(vc_ch->is_local);
+ MPIR_Assert(vc_ch->is_local);
DO_PAPI (PAPI_reset (PAPI_EventSet));
- MPIU_Assert (*n_iov > 0 && (*iov)->MPL_IOV_LEN == sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert (*n_iov > 0 && (*iov)->MPL_IOV_LEN == sizeof(MPIDI_CH3_Pkt_t));
my_rank = MPID_nem_mem_region.rank;
@@ -354,19 +354,19 @@ MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
if (MPID_nem_fbox_is_full((MPID_nem_fbox_common_ptr_t)pbox))
goto usequeue_l;
- pbox->cell.pkt.mpich.source = MPID_nem_mem_region.local_rank;
- pbox->cell.pkt.mpich.datalen = (*iov)[1].MPL_IOV_LEN + sizeof(MPIDI_CH3_Pkt_t);
- pbox->cell.pkt.mpich.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, pbox->cell.pkt.mpich.type = MPID_NEM_PKT_MPICH_HEAD);
+ pbox->cell.pkt.header.source = MPID_nem_mem_region.local_rank;
+ pbox->cell.pkt.header.datalen = (*iov)[1].MPL_IOV_LEN + sizeof(MPIDI_CH3_Pkt_t);
+ pbox->cell.pkt.header.seqno = vc_ch->send_seqno++;
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, pbox->cell.pkt.header.type = MPID_NEM_PKT_MPICH_HEAD);
- MPIU_Memcpy((void *)pbox->cell.pkt.mpich.p.payload, (*iov)[0].MPL_IOV_BUF, (*iov)[0].MPL_IOV_LEN);
- MPIU_Memcpy ((char *)pbox->cell.pkt.mpich.p.payload + (*iov)[0].MPL_IOV_LEN, (*iov)[1].MPL_IOV_BUF, (*iov)[1].MPL_IOV_LEN);
+ MPIR_Memcpy((void *)pbox->cell.pkt.p.payload, (*iov)[0].MPL_IOV_BUF, (*iov)[0].MPL_IOV_LEN);
+ MPIR_Memcpy ((char *)pbox->cell.pkt.p.payload + (*iov)[0].MPL_IOV_LEN, (*iov)[1].MPL_IOV_BUF, (*iov)[1].MPL_IOV_LEN);
OPA_store_release_int(&pbox->flag.value, 1);
*n_iov = 0;
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "--> Sent fbox ");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (&pbox->cell));
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent fbox ");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (&pbox->cell));
goto return_success;
}
@@ -398,19 +398,19 @@ MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
MPID_nem_queue_dequeue (MPID_nem_mem_region.my_freeQ, &el);
#endif /*PREFETCH_CELL */
- MPIU_Memcpy((void *)el->pkt.mpich.p.payload, (*iov)->MPL_IOV_BUF, sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Memcpy((void *)el->pkt.p.payload, (*iov)->MPL_IOV_BUF, sizeof(MPIDI_CH3_Pkt_t));
buf_offset += sizeof(MPIDI_CH3_Pkt_t);
if (ext_hdr_sz > 0) {
/* ensure extended header fits in this cell. */
- MPIU_Assert(MPID_NEM_MPICH_DATA_LEN - buf_offset >= ext_hdr_sz);
+ MPIR_Assert(MPID_NEM_MPICH_DATA_LEN - buf_offset >= ext_hdr_sz);
/* when extended packet header exists, copy it */
- MPIU_Memcpy((void *)((char *)(el->pkt.mpich.p.payload) + buf_offset), ext_hdr_ptr, ext_hdr_sz);
+ MPIR_Memcpy((void *)((char *)(el->pkt.p.payload) + buf_offset), ext_hdr_ptr, ext_hdr_sz);
buf_offset += ext_hdr_sz;
}
- cell_buf = (char *)(el->pkt.mpich.p.payload) + buf_offset;
+ cell_buf = (char *)(el->pkt.p.payload) + buf_offset;
++(*iov);
--(*n_iov);
@@ -418,7 +418,7 @@ MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
while (*n_iov && payload_len >= (*iov)->MPL_IOV_LEN)
{
size_t _iov_len = (*iov)->MPL_IOV_LEN;
- MPIU_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, _iov_len);
+ MPIR_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, _iov_len);
payload_len -= _iov_len;
cell_buf += _iov_len;
--(*n_iov);
@@ -427,20 +427,20 @@ MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
if (*n_iov && payload_len > 0)
{
- MPIU_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, payload_len);
+ MPIR_Memcpy (cell_buf, (*iov)->MPL_IOV_BUF, payload_len);
(*iov)->MPL_IOV_BUF = (char *)(*iov)->MPL_IOV_BUF + payload_len;
(*iov)->MPL_IOV_LEN -= payload_len;
payload_len = 0;
}
- el->pkt.mpich.source = my_rank;
- el->pkt.mpich.dest = vc->lpid;
- el->pkt.mpich.datalen = MPID_NEM_MPICH_DATA_LEN - payload_len;
- el->pkt.mpich.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, el->pkt.mpich.type = MPID_NEM_PKT_MPICH_HEAD);
+ el->pkt.header.source = my_rank;
+ el->pkt.header.dest = vc->lpid;
+ el->pkt.header.datalen = MPID_NEM_MPICH_DATA_LEN - payload_len;
+ el->pkt.header.seqno = vc_ch->send_seqno++;
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, el->pkt.header.type = MPID_NEM_PKT_MPICH_HEAD);
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "--> Sent queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
MPID_nem_queue_enqueue (vc_ch->recv_queue, el);
/*MPID_nem_rel_dump_queue( vc_ch->recv_queue ); */
@@ -460,7 +460,7 @@ MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
*again = 1;
goto fn_exit;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -484,19 +484,19 @@ MPID_nem_mpich_sendv_header (MPL_IOV **iov, int *n_iov,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline void
-MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_size,
- void *header, MPIDI_msg_sz_t header_sz, void *ext_header, MPIDI_msg_sz_t ext_header_sz,
+MPID_nem_mpich_send_seg_header (MPIDU_Segment *segment, intptr_t *segment_first, intptr_t segment_size,
+ void *header, intptr_t header_sz, void *ext_header, intptr_t ext_header_sz,
MPIDI_VC_t *vc, int *again)
{
MPID_nem_cell_ptr_t el;
- MPIDI_msg_sz_t datalen;
+ intptr_t datalen;
int my_rank;
- MPIDI_msg_sz_t last;
+ intptr_t last;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPI_Aint buf_offset = 0;
- MPIU_Assert(vc_ch->is_local); /* netmods will have their own implementation */
- MPIU_Assert(header_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(vc_ch->is_local); /* netmods will have their own implementation */
+ MPIR_Assert(header_sz <= sizeof(MPIDI_CH3_Pkt_t));
DO_PAPI (PAPI_reset (PAPI_EventSet));
@@ -509,38 +509,38 @@ MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_f
MPID_nem_fbox_mpich_t *pbox = vc_ch->fbox_out;
/* Add a compiler time check on streaming unit size and FASTBOX size */
- MPIU_Static_assert((MPIDI_CH3U_Acc_stream_size > MPID_NEM_FBOX_DATALEN),
+ MPIR_Static_assert((MPIDI_CH3U_Acc_stream_size > MPID_NEM_FBOX_DATALEN),
"RMA ACC Streaming unit size <= FASTBOX size in Nemesis.");
/* NOTE: when FASTBOX is being used, streaming optimization is never triggered,
* because streaming unit size is larger than FASTBOX size. In such case,
* first offset (*segment_first) is zero, and last offset (segment_size)
* is the data size */
- MPIU_Assert(*segment_first == 0);
+ MPIR_Assert(*segment_first == 0);
if (MPID_nem_fbox_is_full((MPID_nem_fbox_common_ptr_t)pbox))
goto usequeue_l;
{
- pbox->cell.pkt.mpich.source = MPID_nem_mem_region.local_rank;
- pbox->cell.pkt.mpich.datalen = sizeof(MPIDI_CH3_Pkt_t) + segment_size;
- pbox->cell.pkt.mpich.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, pbox->cell.pkt.mpich.type = MPID_NEM_PKT_MPICH_HEAD);
+ pbox->cell.pkt.header.source = MPID_nem_mem_region.local_rank;
+ pbox->cell.pkt.header.datalen = sizeof(MPIDI_CH3_Pkt_t) + segment_size;
+ pbox->cell.pkt.header.seqno = vc_ch->send_seqno++;
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, pbox->cell.pkt.header.type = MPID_NEM_PKT_MPICH_HEAD);
/* copy header */
- MPIU_Memcpy((void *)pbox->cell.pkt.mpich.p.payload, header, header_sz);
+ MPIR_Memcpy((void *)pbox->cell.pkt.p.payload, header, header_sz);
/* copy data */
last = segment_size;
- MPID_Segment_pack(segment, *segment_first, &last, (char *)pbox->cell.pkt.mpich.p.payload + sizeof(MPIDI_CH3_Pkt_t));
- MPIU_Assert(last == segment_size);
+ MPIDU_Segment_pack(segment, *segment_first, &last, (char *)pbox->cell.pkt.p.payload + sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(last == segment_size);
OPA_store_release_int(&pbox->flag.value, 1);
*segment_first = last;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "--> Sent fbox ");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (&pbox->cell));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent fbox ");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (&pbox->cell));
goto return_success;
}
@@ -574,13 +574,13 @@ MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_f
#endif /*PREFETCH_CELL */
/* copy header */
- MPIU_Memcpy((void *)el->pkt.mpich.p.payload, header, header_sz);
+ MPIR_Memcpy((void *)el->pkt.p.payload, header, header_sz);
buf_offset += sizeof(MPIDI_CH3_Pkt_t);
if (ext_header_sz > 0) {
/* when extended packet header exists, copy it */
- MPIU_Memcpy((void *)((char *)(el->pkt.mpich.p.payload) + buf_offset), ext_header, ext_header_sz);
+ MPIR_Memcpy((void *)((char *)(el->pkt.p.payload) + buf_offset), ext_header, ext_header_sz);
buf_offset += ext_header_sz;
}
@@ -590,18 +590,18 @@ MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_f
else
last = *segment_first + MPID_NEM_MPICH_DATA_LEN - buf_offset;
- MPID_Segment_pack(segment, *segment_first, &last, (char *)el->pkt.mpich.p.payload + buf_offset);
+ MPIDU_Segment_pack(segment, *segment_first, &last, (char *)el->pkt.p.payload + buf_offset);
datalen = buf_offset + last - *segment_first;
*segment_first = last;
- el->pkt.mpich.source = my_rank;
- el->pkt.mpich.dest = vc->lpid;
- el->pkt.mpich.datalen = datalen;
- el->pkt.mpich.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, el->pkt.mpich.type = MPID_NEM_PKT_MPICH_HEAD);
+ el->pkt.header.source = my_rank;
+ el->pkt.header.dest = vc->lpid;
+ el->pkt.header.datalen = datalen;
+ el->pkt.header.seqno = vc_ch->send_seqno++;
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, el->pkt.header.type = MPID_NEM_PKT_MPICH_HEAD);
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "--> Sent queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
MPID_nem_queue_enqueue (vc_ch->recv_queue, el);
@@ -630,15 +630,15 @@ MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_f
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline void
-MPID_nem_mpich_send_seg (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_size, MPIDI_VC_t *vc, int *again)
+MPID_nem_mpich_send_seg (MPIDU_Segment *segment, intptr_t *segment_first, intptr_t segment_size, MPIDI_VC_t *vc, int *again)
{
MPID_nem_cell_ptr_t el;
- MPIDI_msg_sz_t datalen;
+ intptr_t datalen;
int my_rank;
- MPIDI_msg_sz_t last;
+ intptr_t last;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIU_Assert(vc_ch->is_local); /* netmods will have their own implementation */
+ MPIR_Assert(vc_ch->is_local); /* netmods will have their own implementation */
DO_PAPI (PAPI_reset (PAPI_EventSet));
@@ -673,18 +673,18 @@ MPID_nem_mpich_send_seg (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first, M
else
last = *segment_first + MPID_NEM_MPICH_DATA_LEN;
- MPID_Segment_pack(segment, *segment_first, &last, (char *)el->pkt.mpich.p.payload);
+ MPIDU_Segment_pack(segment, *segment_first, &last, (char *)el->pkt.p.payload);
datalen = last - *segment_first;
*segment_first = last;
- el->pkt.mpich.source = my_rank;
- el->pkt.mpich.dest = vc->lpid;
- el->pkt.mpich.datalen = datalen;
- el->pkt.mpich.seqno = vc_ch->send_seqno++;
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, el->pkt.mpich.type = MPID_NEM_PKT_MPICH_HEAD);
+ el->pkt.header.source = my_rank;
+ el->pkt.header.dest = vc->lpid;
+ el->pkt.header.datalen = datalen;
+ el->pkt.header.seqno = vc_ch->send_seqno++;
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, el->pkt.header.type = MPID_NEM_PKT_MPICH_HEAD);
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "--> Sent queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "--> Sent queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (el));
MPID_nem_queue_enqueue (vc_ch->recv_queue, el);
@@ -720,12 +720,12 @@ static inline void MPID_nem_mpich_dequeue_fastbox(int local_rank)
{
MPID_nem_fboxq_elem_t *el;
- MPIU_Assert(local_rank < MPID_nem_mem_region.num_local);
+ MPIR_Assert(local_rank < MPID_nem_mem_region.num_local);
el = &MPID_nem_fboxq_elem_list[local_rank];
- MPIU_Assert(el->fbox != NULL);
+ MPIR_Assert(el->fbox != NULL);
- MPIU_Assert(el->usage);
+ MPIR_Assert(el->usage);
--el->usage;
if (el->usage == 0)
@@ -764,10 +764,10 @@ static inline void MPID_nem_mpich_enqueue_fastbox(int local_rank)
{
MPID_nem_fboxq_elem_t *el;
- MPIU_Assert(local_rank < MPID_nem_mem_region.num_local);
+ MPIR_Assert(local_rank < MPID_nem_mem_region.num_local);
el = &MPID_nem_fboxq_elem_list[local_rank];
- MPIU_Assert(el->fbox != NULL);
+ MPIR_Assert(el->fbox != NULL);
if (el->usage)
{
@@ -806,9 +806,9 @@ MPID_nem_recv_seqno_matches (MPID_nem_queue_ptr_t qhead)
{
int source;
MPID_nem_cell_ptr_t cell = MPID_nem_queue_head(qhead);
- source = cell->pkt.mpich.source;
+ source = cell->pkt.header.source;
- return (cell->pkt.mpich.seqno == MPID_nem_recv_seqno[source]);
+ return (cell->pkt.header.seqno == MPID_nem_recv_seqno[source]);
}
/*
@@ -861,17 +861,17 @@ MPID_nem_mpich_test_recv(MPID_nem_cell_ptr_t *cell, int *in_fbox, int in_blockin
MPID_nem_queue_dequeue (MPID_nem_mem_region.my_recvQ, cell);
- ++MPID_nem_recv_seqno[(*cell)->pkt.mpich.source];
+ ++MPID_nem_recv_seqno[(*cell)->pkt.header.source];
*in_fbox = 0;
fn_exit:
DO_PAPI (PAPI_accum_var (PAPI_EventSet, PAPI_vvalues6));
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, {
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, {
if (*cell)
{
- MPIU_DBG_MSG_S (CH3_CHANNEL, VERBOSE, "<-- Recv %s", (*in_fbox) ? "fbox " : "queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (*cell));
+ MPL_DBG_MSG_S (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "<-- Recv %s", (*in_fbox) ? "fbox " : "queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (*cell));
}
});
@@ -922,15 +922,15 @@ MPID_nem_mpich_test_recv_wait (MPID_nem_cell_ptr_t *cell, int *in_fbox, int time
MPID_nem_queue_dequeue (MPID_nem_mem_region.my_recvQ, cell);
- ++MPID_nem_recv_seqno[(*cell)->pkt.mpich.source];
+ ++MPID_nem_recv_seqno[(*cell)->pkt.header.source];
*in_fbox = 0;
exit_l:
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, {
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, {
if (*cell)
{
- MPIU_DBG_MSG_S (CH3_CHANNEL, VERBOSE, "<-- Recv %s", (*in_fbox) ? "fbox " : "queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (*cell));
+ MPL_DBG_MSG_S (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "<-- Recv %s", (*in_fbox) ? "fbox " : "queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell (*cell));
}
});
@@ -962,7 +962,7 @@ MPID_nem_mpich_blocking_recv(MPID_nem_cell_ptr_t *cell, int *in_fbox, int comple
#ifdef MPICH_IS_THREADED
/* We should never enter this function in a multithreaded app */
- MPIU_Assert(!MPIR_ThreadInfo.isThreaded);
+ MPIR_Assert(!MPIR_ThreadInfo.isThreaded);
#endif
#ifdef USE_FASTBOX
@@ -1007,18 +1007,18 @@ MPID_nem_mpich_blocking_recv(MPID_nem_cell_ptr_t *cell, int *in_fbox, int comple
MPID_nem_queue_dequeue (MPID_nem_mem_region.my_recvQ, cell);
- ++MPID_nem_recv_seqno[(*cell)->pkt.mpich.source];
+ ++MPID_nem_recv_seqno[(*cell)->pkt.header.source];
*in_fbox = 0;
exit_l:
DO_PAPI (PAPI_accum_var (PAPI_EventSet,PAPI_vvalues8));
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, {
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, {
if (*cell)
{
- MPIU_DBG_MSG_S (CH3_CHANNEL, VERBOSE, "<-- Recv %s", (*in_fbox) ? "fbox " : "queue");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell(*cell));
+ MPL_DBG_MSG_S (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "<-- Recv %s", (*in_fbox) ? "fbox " : "queue");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, MPID_nem_dbg_dump_cell(*cell));
}
});
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_nets.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_nets.h
index 91975fd..4729e15 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_nets.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_nets.h
@@ -21,10 +21,10 @@ typedef int (* MPID_nem_net_module_connect_to_root_t)(const char *business_card,
typedef int (* MPID_nem_net_module_vc_init_t)(MPIDI_VC_t *vc);
typedef int (* MPID_nem_net_module_vc_destroy_t)(MPIDI_VC_t *vc);
typedef int (* MPID_nem_net_module_vc_terminate_t)(MPIDI_VC_t *vc);
-typedef int (* MPID_nem_net_module_anysource_iprobe_t)(int tag, MPID_Comm *comm, int context_offset, int *flag,
+typedef int (* MPID_nem_net_module_anysource_iprobe_t)(int tag, MPIR_Comm *comm, int context_offset, int *flag,
MPI_Status *status);
-typedef int (* MPID_nem_net_module_anysource_improbe_t)(int tag, MPID_Comm *comm, int context_offset, int *flag,
- MPID_Request **message, MPI_Status *status);
+typedef int (* MPID_nem_net_module_anysource_improbe_t)(int tag, MPIR_Comm *comm, int context_offset, int *flag,
+ MPIR_Request **message, MPI_Status *status);
typedef void (* MPID_nem_net_module_vc_dbg_print_sendq_t)(FILE *stream, MPIDI_VC_t *vc);
typedef int (* MPID_nem_net_module_get_ordering_t)(int *ordering);
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h
index 7e2fea0..4cdf05b 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h
@@ -7,6 +7,8 @@
#ifndef MPID_NEM_POST_H
#define MPID_NEM_POST_H
+#include "mpidu_shm.h"
+
struct MPIDI_PG;
union MPIDI_CH3_Pkt;
@@ -19,8 +21,6 @@ extern int (*MPID_nem_local_lmt_progress)(void);
will happen if this is included in mpidpost.h or mpidpre.h) */
int MPID_nem_init(int rank, struct MPIDI_PG *pg_p, int has_parent);
int MPID_nem_finalize(void);
-int MPID_nem_barrier_init(MPID_nem_barrier_t *barrier_region, int init_values);
-int MPID_nem_barrier(void);
int MPID_nem_vc_init(struct MPIDI_VC *vc);
int MPID_nem_vc_destroy(struct MPIDI_VC *vc);
int MPID_nem_get_business_card(int myRank, char *value, int length);
@@ -36,8 +36,7 @@ int MPIDI_nem_ckpt_init(void);
int MPIDI_nem_ckpt_finalize(void);
int MPIDI_nem_ckpt_start(void);
int MPIDI_nem_ckpt_finish(void);
-int MPIDI_nem_ckpt_pkthandler_init(int (*pktArray[])(struct MPIDI_VC *vc, union MPIDI_CH3_Pkt *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **req ), int arraySize);
+int MPIDI_nem_ckpt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int arraySize);
#endif
/* one-sided */
@@ -96,11 +95,11 @@ int MPID_nem_mpich_getv (MPL_IOV **s_iov, int *s_niov, MPL_IOV **d_iov, int *d_n
int MPID_nem_mpich_send_header(void* buf, int size, struct MPIDI_VC *vc, int *again);
int MPID_nem_mpich_sendv(MPL_IOV **iov, int *n_iov, struct MPIDI_VC *vc, int *again);
int MPID_nem_mpich_sendv_header(MPL_IOV **iov, int *n_iov, void *ext_header,
- MPIDI_msg_sz_t ext_header_sz, struct MPIDI_VC *vc, int *again);
-void MPID_nem_mpich_send_seg(MPID_Segment segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_sz, struct MPIDI_VC *vc, int *again);
-void MPID_nem_mpich_send_seg_header(MPID_Segment segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_size,
- void *header, MPIDI_msg_sz_t header_sz, void *ext_header,
- MPIDI_msg_sz_t ext_header_sz, struct MPIDI_VC *vc, int *again);
+ intptr_t ext_header_sz, struct MPIDI_VC *vc, int *again);
+void MPID_nem_mpich_send_seg(MPIDU_Segment segment, intptr_t *segment_first, intptr_t segment_sz, struct MPIDI_VC *vc, int *again);
+void MPID_nem_mpich_send_seg_header(MPIDU_Segment segment, intptr_t *segment_first, intptr_t segment_size,
+ void *header, intptr_t header_sz, void *ext_header,
+ intptr_t ext_header_sz, struct MPIDI_VC *vc, int *again);
int MPID_nem_mpich_test_recv(MPID_nem_cell_ptr_t *cell, int *in_fbox, int in_blocking_progress);
int MPID_nem_mpich_test_recv_wait(MPID_nem_cell_ptr_t *cell, int *in_fbox, int timeout);
int MPID_nem_recv_seqno_matches(MPID_nem_queue_ptr_t qhead) ;
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_pre.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_pre.h
index 1aaa4ce..908a1a2 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_pre.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_pre.h
@@ -19,14 +19,14 @@ typedef pthread_mutex_t MPIDI_CH3I_SHM_MUTEX;
#define MPIDI_CH3_WIN_DECL \
void *shm_base_addr; /* base address of shared memory region */ \
MPI_Aint shm_segment_len; /* size of shared memory region */ \
- MPIU_SHMW_Hnd_t shm_segment_handle; /* handle to shared memory region */ \
+ MPL_shm_hnd_t shm_segment_handle; /* handle to shared memory region */ \
MPIDI_CH3I_SHM_MUTEX *shm_mutex; /* shared memory windows -- lock for \
accumulate/atomic operations */ \
- MPIU_SHMW_Hnd_t shm_mutex_segment_handle; /* handle to interprocess mutex memory \
+ MPL_shm_hnd_t shm_mutex_segment_handle; /* handle to interprocess mutex memory \
region */ \
\
void *info_shm_base_addr; /* base address of shared memory region for window info */ \
MPI_Aint info_shm_segment_len; /* size of shared memory region for window info */ \
- MPIU_SHMW_Hnd_t info_shm_segment_handle; /* handle to shared memory region for window info */ \
+ MPL_shm_hnd_t info_shm_segment_handle; /* handle to shared memory region for window info */ \
#endif /* MPID_NEM_PRE_H */
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_queue.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_queue.h
index cead514..b8d536b 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_queue.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_queue.h
@@ -39,14 +39,14 @@ int MPID_nem_network_poll(int in_blocking_progress);
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline void MPID_nem_cell_init(MPID_nem_cell_ptr_t cell)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_CELL_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_CELL_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_CELL_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_CELL_INIT);
MPID_NEM_SET_REL_NULL(cell->next);
memset((void *)&cell->pkt, 0, sizeof(MPID_nem_pkt_header_t));
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_CELL_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_CELL_INIT);
}
#if defined(MPID_NEM_USE_LOCK_FREE_QUEUES)
@@ -57,15 +57,15 @@ static inline void MPID_nem_cell_init(MPID_nem_cell_ptr_t cell)
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline void MPID_nem_queue_init(MPID_nem_queue_ptr_t qhead)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_QUEUE_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_QUEUE_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_QUEUE_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_QUEUE_INIT);
MPID_NEM_SET_REL_NULL(qhead->head);
MPID_NEM_SET_REL_NULL(qhead->my_head);
MPID_NEM_SET_REL_NULL(qhead->tail);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_QUEUE_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_QUEUE_INIT);
}
#define MPID_NEM_USE_SHADOW_HEAD
@@ -245,16 +245,16 @@ MPID_nem_queue_dequeue (MPID_nem_queue_ptr_t qhead, MPID_nem_cell_ptr_t *e)
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline void MPID_nem_queue_init(MPID_nem_queue_ptr_t qhead)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_QUEUE_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_QUEUE_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_QUEUE_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_QUEUE_INIT);
MPID_NEM_SET_REL_NULL(qhead->head);
MPID_NEM_SET_REL_NULL(qhead->my_head);
MPID_NEM_SET_REL_NULL(qhead->tail);
MPID_nem_queue_mutex_create(&qhead->lock, NULL);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_QUEUE_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_QUEUE_INIT);
}
static inline void
diff --git a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_impl.h b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_impl.h
index 7f1989f..7719563 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_impl.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_impl.h
@@ -8,8 +8,7 @@
#define MPICH_MPIDI_CH3_IMPL_H_INCLUDED
#include "mpidimpl.h"
-#include "mpiu_os_wrappers.h"
-#include "mpid_nem_generic_queue.h"
+#include "mpidu_generic_queue.h"
#include "mpl_utlist.h"
#if defined(HAVE_ASSERT_H)
@@ -19,9 +18,9 @@
extern void *MPIDI_CH3_packet_buffer;
extern int MPIDI_CH3I_my_rank;
-typedef GENERIC_Q_DECL(struct MPID_Request) MPIDI_CH3I_shm_sendq_t;
+typedef GENERIC_Q_DECL(struct MPIR_Request) MPIDI_CH3I_shm_sendq_t;
extern MPIDI_CH3I_shm_sendq_t MPIDI_CH3I_shm_sendq;
-extern struct MPID_Request *MPIDI_CH3I_shm_active_send;
+extern struct MPIR_Request *MPIDI_CH3I_shm_active_send;
/* Send queue macros */
/* MT - not thread safe! */
@@ -30,17 +29,17 @@ extern struct MPID_Request *MPIDI_CH3I_shm_active_send;
#define MPIDI_CH3I_Sendq_enqueue(qp, ep) do { \
/* add refcount so req doesn't get freed before it's dequeued */ \
MPIR_Request_add_ref(ep); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, \
"MPIDI_CH3I_Sendq_enqueue req=%p (handle=%#x), queue=%p", \
ep, (ep)->handle, qp)); \
GENERIC_Q_ENQUEUE (qp, ep, dev.next); \
} while (0)
#define MPIDI_CH3I_Sendq_dequeue(qp, ep) do { \
GENERIC_Q_DEQUEUE (qp, ep, dev.next); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, \
"MPIDI_CH3I_Sendq_dequeuereq=%p (handle=%#x), queue=%p", \
*(ep), *(ep) ? (*(ep))->handle : -1, qp)); \
- MPID_Request_release(*(ep)); \
+ MPIR_Request_free(*(ep)); \
} while (0)
#define MPIDI_CH3I_Sendq_enqueue_multiple_no_refcount(qp, ep0, ep1) \
/* used to move reqs from one queue to another, so we don't update */ \
@@ -57,37 +56,37 @@ int MPIDI_CH3I_Progress_deactivate_hook(int id);
int MPIDI_CH3I_Shm_send_progress(void);
int MPIDI_CH3I_Complete_sendq_with_error(MPIDI_VC_t * vc);
-int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header, MPIDI_msg_sz_t hdr_sz );
+int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPIR_Request *sreq, void *header, intptr_t hdr_sz );
-int MPID_nem_lmt_shm_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPID_Request *req);
-int MPID_nem_lmt_shm_start_recv(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_cookie);
-int MPID_nem_lmt_shm_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_cookie);
-int MPID_nem_lmt_shm_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV cookie);
-int MPID_nem_lmt_shm_done_send(MPIDI_VC_t *vc, MPID_Request *req);
-int MPID_nem_lmt_shm_done_recv(MPIDI_VC_t *vc, MPID_Request *req);
+int MPID_nem_lmt_shm_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPIR_Request *req);
+int MPID_nem_lmt_shm_start_recv(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV s_cookie);
+int MPID_nem_lmt_shm_start_send(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV r_cookie);
+int MPID_nem_lmt_shm_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV cookie);
+int MPID_nem_lmt_shm_done_send(MPIDI_VC_t *vc, MPIR_Request *req);
+int MPID_nem_lmt_shm_done_recv(MPIDI_VC_t *vc, MPIR_Request *req);
int MPID_nem_lmt_shm_vc_terminated(MPIDI_VC_t *vc);
-int MPID_nem_lmt_dma_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPID_Request *req);
-int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_cookie);
-int MPID_nem_lmt_dma_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_cookie);
-int MPID_nem_lmt_dma_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV cookie);
-int MPID_nem_lmt_dma_done_send(MPIDI_VC_t *vc, MPID_Request *req);
-int MPID_nem_lmt_dma_done_recv(MPIDI_VC_t *vc, MPID_Request *req);
+int MPID_nem_lmt_dma_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPIR_Request *req);
+int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV s_cookie);
+int MPID_nem_lmt_dma_start_send(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV r_cookie);
+int MPID_nem_lmt_dma_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV cookie);
+int MPID_nem_lmt_dma_done_send(MPIDI_VC_t *vc, MPIR_Request *req);
+int MPID_nem_lmt_dma_done_recv(MPIDI_VC_t *vc, MPIR_Request *req);
int MPID_nem_lmt_dma_vc_terminated(MPIDI_VC_t *vc);
-int MPID_nem_lmt_vmsplice_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPID_Request *req);
-int MPID_nem_lmt_vmsplice_start_recv(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_cookie);
-int MPID_nem_lmt_vmsplice_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_cookie);
-int MPID_nem_lmt_vmsplice_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV cookie);
-int MPID_nem_lmt_vmsplice_done_send(MPIDI_VC_t *vc, MPID_Request *req);
-int MPID_nem_lmt_vmsplice_done_recv(MPIDI_VC_t *vc, MPID_Request *req);
+int MPID_nem_lmt_vmsplice_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPIR_Request *req);
+int MPID_nem_lmt_vmsplice_start_recv(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV s_cookie);
+int MPID_nem_lmt_vmsplice_start_send(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV r_cookie);
+int MPID_nem_lmt_vmsplice_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV cookie);
+int MPID_nem_lmt_vmsplice_done_send(MPIDI_VC_t *vc, MPIR_Request *req);
+int MPID_nem_lmt_vmsplice_done_recv(MPIDI_VC_t *vc, MPIR_Request *req);
int MPID_nem_lmt_vmsplice_vc_terminated(MPIDI_VC_t *vc);
-int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen);
+int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, intptr_t buflen);
/* Nemesis-provided RMA implementation */
-int MPIDI_CH3_SHM_Win_shared_query(MPID_Win *win_ptr, int target_rank, MPI_Aint *size, int *disp_unit, void *baseptr);
-int MPIDI_CH3_SHM_Win_free(MPID_Win **win_ptr);
+int MPIDI_CH3_SHM_Win_shared_query(MPIR_Win *win_ptr, int target_rank, MPI_Aint *size, int *disp_unit, void *baseptr);
+int MPIDI_CH3_SHM_Win_free(MPIR_Win **win_ptr);
/* Shared memory window atomic/accumulate mutex implementation */
@@ -135,7 +134,7 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win **win_ptr);
#define HANDLE_WIN_MUTEX_ERROR() \
do { \
HLOCAL str; \
- char error_msg[MPIU_STRERROR_BUF_SIZE]; \
+ char error_msg[MPIR_STRERROR_BUF_SIZE]; \
DWORD error = GetLastError(); \
int num_bytes = FormatMessage( \
FORMAT_MESSAGE_FROM_SYSTEM | \
@@ -149,7 +148,7 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win **win_ptr);
if (num_bytes != 0) { \
int pt_err = 1; \
int mpi_errno = MPI_ERR_OTHER; \
- MPIU_Strncpy(error_msg, str, MPIU_STRERROR_BUF_SIZE); \
+ MPL_strncpy(error_msg, str, MPIR_STRERROR_BUF_SIZE); \
LocalFree(str); \
strtok(error_msg, "\r\n"); \
MPIR_ERR_CHKANDJUMP1(pt_err, mpi_errno, MPI_ERR_OTHER, "**windows_mutex", \
@@ -196,7 +195,7 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win **win_ptr);
typedef struct MPIDI_SHM_Win {
struct MPIDI_SHM_Win *prev;
struct MPIDI_SHM_Win *next;
- MPID_Win *win;
+ MPIR_Win *win;
} MPIDI_SHM_Win_t;
typedef MPIDI_SHM_Win_t *MPIDI_SHM_Wins_list_t;
@@ -209,14 +208,14 @@ extern MPIDI_SHM_Wins_list_t shm_wins_list;
#define FUNCNAME MPIDI_CH3I_SHM_Wins_append
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_SHM_Wins_append(MPIDI_SHM_Wins_list_t * list, MPID_Win * win)
+static inline int MPIDI_CH3I_SHM_Wins_append(MPIDI_SHM_Wins_list_t * list, MPIR_Win * win)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_SHM_Win_t *tmp_ptr;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
/* FIXME: We should use a pool allocator here */
- MPIU_CHKPMEM_MALLOC(tmp_ptr, MPIDI_SHM_Win_t *, sizeof(MPIDI_SHM_Win_t),
+ MPIR_CHKPMEM_MALLOC(tmp_ptr, MPIDI_SHM_Win_t *, sizeof(MPIDI_SHM_Win_t),
mpi_errno, "SHM window entry");
tmp_ptr->next = NULL;
@@ -225,10 +224,10 @@ static inline int MPIDI_CH3I_SHM_Wins_append(MPIDI_SHM_Wins_list_t * list, MPID_
MPL_DL_APPEND(*list, tmp_ptr);
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -241,7 +240,7 @@ static inline int MPIDI_CH3I_SHM_Wins_append(MPIDI_SHM_Wins_list_t * list, MPID_
#define FUNCNAME MPIDI_CH3I_SHM_Wins_unlink
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline void MPIDI_CH3I_SHM_Wins_unlink(MPIDI_SHM_Wins_list_t * list, MPID_Win * shm_win)
+static inline void MPIDI_CH3I_SHM_Wins_unlink(MPIDI_SHM_Wins_list_t * list, MPIR_Win * shm_win)
{
MPIDI_SHM_Win_t *elem = NULL;
MPIDI_SHM_Win_t *tmp_elem = NULL;
@@ -250,7 +249,7 @@ static inline void MPIDI_CH3I_SHM_Wins_unlink(MPIDI_SHM_Wins_list_t * list, MPID
if (elem != NULL) {
tmp_elem = elem;
MPL_DL_DELETE(*list, elem);
- MPIU_Free(tmp_elem);
+ MPL_free(tmp_elem);
}
}
diff --git a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h
index 2bf6009..d5cde76 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h
@@ -25,9 +25,9 @@ int MPIDI_CH3I_Progress(MPID_Progress_state *progress_state, int blocking);
#define MPIDI_CH3_Progress_wait(progress_state) MPIDI_CH3I_Progress(progress_state, TRUE)
#define MPIDI_CH3_Progress_poke() MPIDI_CH3I_Progress(NULL, FALSE)
-void MPIDI_CH3I_Posted_recv_enqueued(MPID_Request *rreq);
+void MPIDI_CH3I_Posted_recv_enqueued(MPIR_Request *rreq);
/* returns non-zero when req has been matched by channel */
-int MPIDI_CH3I_Posted_recv_dequeued(MPID_Request *rreq);
+int MPIDI_CH3I_Posted_recv_dequeued(MPIR_Request *rreq);
/*
* Enable optional functionality
@@ -36,6 +36,6 @@ int MPIDI_CH3I_Posted_recv_dequeued(MPID_Request *rreq);
#include "mpid_nem_post.h"
-int MPIDI_CH3I_Register_anysource_notification(void (*enqueue_fn)(MPID_Request *rreq), int (*dequeue_fn)(MPID_Request *rreq));
+int MPIDI_CH3I_Register_anysource_notification(void (*enqueue_fn)(MPIR_Request *rreq), int (*dequeue_fn)(MPIR_Request *rreq));
#endif /* !defined(MPICH_MPIDI_CH3_POST_H_INCLUDED) */
diff --git a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h
index dbce2dd..a9f05be 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_pre.h
@@ -7,7 +7,7 @@
#if !defined(MPICH_MPIDI_CH3_PRE_H_INCLUDED)
#define MPICH_MPIDI_CH3_PRE_H_INCLUDED
#include "mpid_nem_pre.h"
-#include "mpid_nem_generic_queue.h"
+#include "mpidu_generic_queue.h"
#if defined(HAVE_NETINET_IN_H)
#include <netinet/in.h>
@@ -49,25 +49,25 @@ MPIDI_CH3I_VC_state_t;
#define MPIDI_NEM_REQ_NETMOD_AREA_LEN 192
/* define functions for access MPID_nem_lmt_rts_queue_t */
-typedef GENERIC_Q_DECL(struct MPID_Request) MPID_nem_lmt_rts_queue_t;
+typedef GENERIC_Q_DECL(struct MPIR_Request) MPID_nem_lmt_rts_queue_t;
#define MPID_nem_lmt_rtsq_empty(q) GENERIC_Q_EMPTY (q)
#define MPID_nem_lmt_rtsq_head(q) GENERIC_Q_HEAD (q)
#define MPID_nem_lmt_rtsq_enqueue(qp, ep) do { \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, \
"MPID_nem_lmt_rtsq_enqueue req=%p (handle=%#x), queue=%p", \
ep, (ep)->handle, qp)); \
GENERIC_Q_ENQUEUE (qp, ep, dev.next); \
} while (0)
#define MPID_nem_lmt_rtsq_dequeue(qp, epp) do { \
GENERIC_Q_DEQUEUE (qp, epp, dev.next); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, \
"MPID_nem_lmt_rtsq_dequeue req=%p (handle=%#x), queue=%p", \
*(epp), *(epp) ? (*(epp))->handle : -1, qp)); \
} while (0)
#define MPID_nem_lmt_rtsq_search_remove(qp, req_id, epp) do { \
GENERIC_Q_SEARCH_REMOVE(qp, _e->handle == (req_id), epp, \
- struct MPID_Request, dev.next); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, \
+ struct MPIR_Request, dev.next); \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, \
"MPID_nem_lmt_rtsq_search_remove req=%p (handle=%#x), queue=%p", \
*(epp), req_id, qp)); \
} while (0)
@@ -75,7 +75,7 @@ typedef GENERIC_Q_DECL(struct MPID_Request) MPID_nem_lmt_rts_queue_t;
typedef struct MPIDI_CH3I_VC
{
int pg_rank;
- struct MPID_Request *recv_active;
+ struct MPIR_Request *recv_active;
int is_local;
unsigned short send_seqno;
@@ -85,12 +85,12 @@ typedef struct MPIDI_CH3I_VC
MPID_nem_queue_ptr_t free_queue;
#ifdef ENABLE_CHECKPOINTING
- MPIDI_msg_sz_t ckpt_msg_len;
+ intptr_t ckpt_msg_len;
void *ckpt_msg_buf;
#endif
/* temp buffer to store partially received header */
- MPIDI_msg_sz_t pending_pkt_len;
+ intptr_t pending_pkt_len;
union MPIDI_CH3_Pkt *pending_pkt;
/* can be used by netmods to put this vc on a send queue or list */
@@ -101,12 +101,12 @@ typedef struct MPIDI_CH3I_VC
/* iStartContigMsg -- sends a message consisting of a header (hdr) and contiguous data (data), possibly of 0 size. If the
message cannot be sent immediately, the function should create a request and return a pointer in sreq_ptr. The network
module should complete the request once the message has been completely sent. */
- int (* iStartContigMsg)(struct MPIDI_VC *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz,
- struct MPID_Request **sreq_ptr);
+ int (* iStartContigMsg)(struct MPIDI_VC *vc, void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz,
+ struct MPIR_Request **sreq_ptr);
/* iSentContig -- sends a message consisting of a header (hdr) and contiguous data (data), possibly of 0 size. The
network module should complete the request once the message has been completely sent. */
- int (* iSendContig)(struct MPIDI_VC *vc, struct MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz);
+ int (* iSendContig)(struct MPIDI_VC *vc, struct MPIR_Request *sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz);
#ifdef ENABLE_CHECKPOINTING
/* ckpt_pause_send -- netmod should stop sending on this vc and queue messages to be sent after ckpt_continue()*/
@@ -118,20 +118,20 @@ typedef struct MPIDI_CH3I_VC
#endif
/* LMT function pointers */
- int (* lmt_initiate_lmt)(struct MPIDI_VC *vc, union MPIDI_CH3_Pkt *rts_pkt, struct MPID_Request *req);
- int (* lmt_start_recv)(struct MPIDI_VC *vc, struct MPID_Request *req, MPL_IOV s_cookie);
- int (* lmt_start_send)(struct MPIDI_VC *vc, struct MPID_Request *sreq, MPL_IOV r_cookie);
- int (* lmt_handle_cookie)(struct MPIDI_VC *vc, struct MPID_Request *req, MPL_IOV cookie);
- int (* lmt_done_send)(struct MPIDI_VC *vc, struct MPID_Request *req);
- int (* lmt_done_recv)(struct MPIDI_VC *vc, struct MPID_Request *req);
+ int (* lmt_initiate_lmt)(struct MPIDI_VC *vc, union MPIDI_CH3_Pkt *rts_pkt, struct MPIR_Request *req);
+ int (* lmt_start_recv)(struct MPIDI_VC *vc, struct MPIR_Request *req, MPL_IOV s_cookie);
+ int (* lmt_start_send)(struct MPIDI_VC *vc, struct MPIR_Request *sreq, MPL_IOV r_cookie);
+ int (* lmt_handle_cookie)(struct MPIDI_VC *vc, struct MPIR_Request *req, MPL_IOV cookie);
+ int (* lmt_done_send)(struct MPIDI_VC *vc, struct MPIR_Request *req);
+ int (* lmt_done_recv)(struct MPIDI_VC *vc, struct MPIR_Request *req);
int (* lmt_vc_terminated)(struct MPIDI_VC *vc);
/* LMT shared memory copy-buffer ptr */
struct MPID_nem_copy_buf *lmt_copy_buf;
- MPIU_SHMW_Hnd_t lmt_copy_buf_handle;
- MPIU_SHMW_Hnd_t lmt_recv_copy_buf_handle;
+ MPL_shm_hnd_t lmt_copy_buf_handle;
+ MPL_shm_hnd_t lmt_recv_copy_buf_handle;
int lmt_buf_num;
- MPIDI_msg_sz_t lmt_surfeit;
+ intptr_t lmt_surfeit;
struct {struct MPID_nem_lmt_shm_wait_element *head, *tail;} lmt_queue;
struct MPID_nem_lmt_shm_wait_element *lmt_active_lmt;
int lmt_enqueued; /* FIXME: used for debugging */
@@ -164,11 +164,11 @@ struct MPIDI_CH3I_Request
{
struct MPIDI_VC *vc;
int noncontig;
- MPIDI_msg_sz_t header_sz;
+ intptr_t header_sz;
MPI_Request lmt_req_id; /* request id of remote side */
- struct MPID_Request *lmt_req; /* pointer to original send/recv request */
- MPIDI_msg_sz_t lmt_data_sz; /* data size to be transferred, after checking for truncation */
+ struct MPIR_Request *lmt_req; /* pointer to original send/recv request */
+ intptr_t lmt_data_sz; /* data size to be transferred, after checking for truncation */
MPL_IOV lmt_tmp_cookie; /* temporary storage for received cookie */
void *s_cookie; /* temporary storage for the cookie data in case the packet can't be sent immediately */
@@ -184,27 +184,27 @@ struct MPIDI_CH3I_Request
};
/*
- * MPIDI_CH3_REQUEST_DECL (additions to MPID_Request)
+ * MPIDI_CH3_REQUEST_DECL (additions to MPIR_Request)
*/
#define MPIDI_CH3_REQUEST_DECL struct MPIDI_CH3I_Request ch;
#if 0
-#define DUMP_REQUEST(req) do { \
- int i; \
- MPIDI_DBG_PRINTF((55, FCNAME, "request %p\n", (req))); \
- MPIDI_DBG_PRINTF((55, FCNAME, " handle = %d\n", (req)->handle)); \
- MPIDI_DBG_PRINTF((55, FCNAME, " ref_count = %d\n", (req)->ref_count)); \
- MPIDI_DBG_PRINTF((55, FCNAME, " cc = %d\n", (req)->cc)); \
- for (i = 0; i < (req)->iov_count; ++i) \
- MPIDI_DBG_PRINTF((55, FCNAME, " dev.iov[%d] = (%p, %d)\n", i, \
- (req)->dev.iov[i+(req)->dev.iov_offset].MPL_IOV_BUF, \
- (req)->dev.iov[i+(req)->dev.iov_offset].MPL_IOV_LEN)); \
- MPIDI_DBG_PRINTF((55, FCNAME, " dev.iov_count = %d\n", \
- (req)->dev.iov_count)); \
- MPIDI_DBG_PRINTF((55, FCNAME, " dev.state = 0x%x\n", (req)->dev.state)); \
- MPIDI_DBG_PRINTF((55, FCNAME, " type = %d\n", \
- MPIDI_Request_get_type(req))); \
+#define DUMP_REQUEST(req) do { \
+ int i; \
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER, TERSE, "request %p\n", (req)); \
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, TERSE, " handle = %d\n", (req)->handle); \
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, TERSE, " ref_count = %d\n", (req)->ref_count); \
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, TERSE, " cc = %d\n", (req)->cc); \
+ for (i = 0; i < (req)->iov_count; ++i) \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, TERSE, (MPL_DBG_FDEST, " dev.iov[%d] = (%p, %d)\n", i, \
+ (req)->dev.iov[i+(req)->dev.iov_offset].MPL_IOV_BUF, \
+ (req)->dev.iov[i+(req)->dev.iov_offset].MPL_IOV_LEN)); \
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, TERSE, " dev.iov_count = %d\n", \
+ (req)->dev.iov_count); \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, TERSE, (MPL_DBG_FDEST, " dev.state = 0x%x\n", (req)->dev.state)); \
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, TERSE, " type = %d\n", \
+ MPIDI_Request_get_type(req)); \
} while (0)
#else
#define DUMP_REQUEST(req) do { } while (0)
@@ -215,7 +215,7 @@ struct MPIDI_CH3I_Request
#define MPIDI_POSTED_RECV_DEQUEUE_HOOK(req) MPIDI_CH3I_Posted_recv_dequeued(req)
/*
- * MPID_Progress_state - device/channel dependent state to be passed between
+ * MPID_Progress_state - device/channel dependent state to be passed between
* MPID_Progress_{start,wait,end}
*
*/
@@ -232,7 +232,7 @@ extern OPA_int_t MPIDI_CH3I_progress_completion_count;
#define MPIDI_CH3I_INCR_PROGRESS_COMPLETION_COUNT do { \
OPA_write_barrier(); \
OPA_incr_int(&MPIDI_CH3I_progress_completion_count); \
- MPIU_DBG_MSG_D(CH3_PROGRESS,VERBOSE, \
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_PROGRESS,VERBOSE, \
"just incremented MPIDI_CH3I_progress_completion_count=%d", \
OPA_load_int(&MPIDI_CH3I_progress_completion_count)); \
} while(0)
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/.state-cache b/src/mpid/ch3/channels/nemesis/netmod/llc/.state-cache
index 40184a4..66eec80 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/.state-cache
@@ -1,33 +1,21 @@
<dir>
-<file name="llc_poll.c" info="1447123141"/>
-<file name="llc_send.c" info="1447123141"/>
-<file name="llc_fini.c" info="1447123141"/>
-<file name="llc_impl.h" info="1447123141"/>
-<file name="llc_init.c" info="1447123141"/>
-<file name="llc_probe.c" info="1447123141"/>
-<file name="llc_vc.c" info="1447123141"/>
-<file name="llc_cancel.c" info="1447123141"/>
+<file name="llc_cancel.c" info="1478973152"/>
+<file name="llc_probe.c" info="1478973152"/>
+<file name="llc_init.c" info="1478973152"/>
+<file name="llc_impl.h" info="1478973152"/>
+<file name="llc_poll.c" info="1478973152"/>
+<file name="llc_fini.c" info="1478973152"/>
+<file name="llc_vc.c" info="1478973152"/>
+<file name="llc_send.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="llc_poll.c">
-MPID_STATE_MPID_NEM_LLC_POLL MPID_nem_llc_poll
-MPID_STATE_MPID_NEM_LLC_RECV_POSTED MPID_nem_llc_recv_posted
-MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED MPID_nem_llc_anysource_posted
-MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED MPID_nem_llc_anysource_matched
-</fileinfo>
-<fileinfo name="llc_send.c">
-MPID_STATE_MPID_NEM_LLC_ISEND MPID_nem_llc_isend
-MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG MPID_nem_llc_iStartContigMsg
-MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG MPID_nem_llc_iSendContig
-MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG MPID_nem_llc_SendNoncontig
-MPID_STATE_MPID_NEM_LLC_SEND_QUEUED MPID_nem_llc_send_queued
-MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE MPIDI_nem_llc_Rqst_iov_update
-MPID_STATE_MPID_NEM_LLC_ISSEND MPID_nem_llc_issend
-</fileinfo>
-<fileinfo name="llc_fini.c">
-MPID_STATE_MPID_NEM_LLC_FINALIZE MPID_nem_llc_finalize
+<fileinfo name="llc_cancel.c">
+MPID_STATE_MPID_NEM_LLC_CANCEL_RECV MPID_nem_llc_cancel_recv
</fileinfo>
-<fileinfo name="llc_impl.h">
+<fileinfo name="llc_probe.c">
+MPID_STATE_MPID_NEM_LLC_PROBE MPID_nem_llc_probe
+MPID_STATE_MPID_NEM_LLC_IPROBE MPID_nem_llc_iprobe
+MPID_STATE_MPID_NEM_LLC_IMPROBE MPID_nem_llc_improbe
</fileinfo>
<fileinfo name="llc_init.c">
MPID_STATE_MPID_NEM_LLC_KVS_PUT_BINARY MPID_nem_llc_kvs_put_binary
@@ -36,17 +24,29 @@ MPID_STATE_MPID_NEM_LLC_INIT MPID_nem_llc_init
MPID_STATE_MPID_NEM_LLC_GET_BUSINESS_CARD MPID_nem_llc_get_business_card
MPID_STATE_MPID_NEM_LLC_CONNECT_TO_ROOT MPID_nem_llc_connect_to_root
</fileinfo>
-<fileinfo name="llc_probe.c">
-MPID_STATE_MPID_NEM_LLC_PROBE MPID_nem_llc_probe
-MPID_STATE_MPID_NEM_LLC_IPROBE MPID_nem_llc_iprobe
-MPID_STATE_MPID_NEM_LLC_IMPROBE MPID_nem_llc_improbe
+<fileinfo name="llc_impl.h">
+</fileinfo>
+<fileinfo name="llc_poll.c">
+MPID_STATE_MPID_NEM_LLC_POLL MPID_nem_llc_poll
+MPID_STATE_MPID_NEM_LLC_RECV_POSTED MPID_nem_llc_recv_posted
+MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED MPID_nem_llc_anysource_posted
+MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED MPID_nem_llc_anysource_matched
+</fileinfo>
+<fileinfo name="llc_fini.c">
+MPID_STATE_MPID_NEM_LLC_FINALIZE MPID_nem_llc_finalize
</fileinfo>
<fileinfo name="llc_vc.c">
MPID_STATE_MPID_NEM_LLC_VC_INIT MPID_nem_llc_vc_init
MPID_STATE_MPID_NEM_LLC_VC_DESTROY MPID_nem_llc_vc_destroy
MPID_STATE_MPID_NEM_LLC_VC_TERMINATE MPID_nem_llc_vc_terminate
</fileinfo>
-<fileinfo name="llc_cancel.c">
-MPID_STATE_MPID_NEM_LLC_CANCEL_RECV MPID_nem_llc_cancel_recv
+<fileinfo name="llc_send.c">
+MPID_STATE_MPID_NEM_LLC_ISEND MPID_nem_llc_isend
+MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG MPID_nem_llc_iStartContigMsg
+MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG MPID_nem_llc_iSendContig
+MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG MPID_nem_llc_SendNoncontig
+MPID_STATE_MPID_NEM_LLC_SEND_QUEUED MPID_nem_llc_send_queued
+MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE MPIDI_nem_llc_Rqst_iov_update
+MPID_STATE_MPID_NEM_LLC_ISSEND MPID_nem_llc_issend
</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/Makefile.mk b/src/mpid/ch3/channels/nemesis/netmod/llc/Makefile.mk
index dce467c..2adb709 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/Makefile.mk
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/Makefile.mk
@@ -1,7 +1,7 @@
## -*- Mode: Makefile; -*-
## vim: set ft=automake :
##
-## (C) 2011 by Argonne National Laboratory.
+## (C) 2015 by Argonne National Laboratory.
## See COPYRIGHT in top-level directory.
##
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/errnames.txt b/src/mpid/ch3/channels/nemesis/netmod/llc/errnames.txt
index 312e843..54fd986 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/errnames.txt
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/errnames.txt
@@ -12,6 +12,5 @@
**PMI_Barrier:PMI_Barrier failed
**PMI_KVS_Put:PMI_KVS_Put failed
**PMS_KVS_Get:PMS_KVS_Get failed
-**fail:fail failed
**llc_poll:llc_poll failed
**outofmemory:outofmemory failed
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_cancel.c b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_cancel.c
index 797ea63..293e7cf 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_cancel.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_cancel.c
@@ -21,18 +21,18 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/* returns zero in case request is canceled */
-int MPID_nem_llc_cancel_recv(struct MPIDI_VC *vc, struct MPID_Request *req)
+int MPID_nem_llc_cancel_recv(struct MPIDI_VC *vc, struct MPIR_Request *req)
{
int canceled;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_CANCEL_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_CANCEL_RECV);
/* returns zero in case request is canceled */
canceled = LLC_req_approve_recv((LLC_cmd_t *) REQ_FIELD(req, cmds));
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_CANCEL_RECV);
return canceled;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_fini.c b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_fini.c
index c937260..33feb54 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_fini.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_fini.c
@@ -18,15 +18,15 @@ int MPID_nem_llc_finalize(void)
{
int mpi_errno = MPI_SUCCESS;
int rc;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_FINALIZE);
rc = LLC_finalize();
MPIR_ERR_CHKANDJUMP(rc != 0, mpi_errno, MPI_ERR_OTHER, "**fail");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_impl.h b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_impl.h
index 9eb64be..667e0a4 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_impl.h
@@ -22,15 +22,15 @@ extern int MPID_nem_llc_my_llc_rank;
* GENERIC_Q_*:
* src/mpid/ch3/channels/nemesis/include/mpid_nem_generic_queue.h
*/
-typedef GENERIC_Q_DECL(struct MPID_Request) rque_t;
+typedef GENERIC_Q_DECL(struct MPIR_Request) rque_t;
/*
-typedef GENERIC_Q_DECL(struct MPID_Request) MPIDI_nem_llc_request_queue_t;
+typedef GENERIC_Q_DECL(struct MPIR_Request) MPIDI_nem_llc_request_queue_t;
*/
typedef struct {
uint64_t remote_endpoint_addr;
void *endpoint;
- rque_t send_queue; /* MPID_Request Queue */
+ rque_t send_queue; /* MPIR_Request Queue */
unsigned int unsolicited_count;
} MPID_nem_llc_vc_area;
@@ -40,13 +40,13 @@ typedef struct {
#define UNSOLICITED_NUM_INC(req) \
{ \
- MPID_Request *sreq = req; \
+ MPIR_Request *sreq = req; \
MPIDI_VC_t *vc = sreq->ch.vc; \
VC_FIELD(vc, unsolicited_count)++; \
}
#define UNSOLICITED_NUM_DEC(req) \
{ \
- MPID_Request *sreq = req; \
+ MPIR_Request *sreq = req; \
MPIDI_VC_t *vc = sreq->ch.vc; \
VC_FIELD(vc, unsolicited_count)--; \
}
@@ -77,40 +77,40 @@ int MPID_nem_llc_vc_init(MPIDI_VC_t * vc);
int MPID_nem_llc_vc_destroy(MPIDI_VC_t * vc);
int MPID_nem_llc_vc_terminate(MPIDI_VC_t * vc);
-int MPID_nem_llc_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+int MPID_nem_llc_anysource_iprobe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
MPI_Status * status);
-int MPID_nem_llc_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag,
- MPID_Request ** message, MPI_Status * status);
+int MPID_nem_llc_anysource_improbe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
+ MPIR_Request ** message, MPI_Status * status);
int MPID_nem_llc_get_ordering(int *ordering);
-int MPID_nem_llc_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz);
-int MPID_nem_llc_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
- MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr);
-int MPID_nem_llc_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
- MPIDI_msg_sz_t hdr_sz);
+int MPID_nem_llc_iSendContig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz);
+int MPID_nem_llc_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, intptr_t hdr_sz, void *data,
+ intptr_t data_sz, MPIR_Request ** sreq_ptr);
+int MPID_nem_llc_SendNoncontig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr,
+ intptr_t hdr_sz);
-int MPIDI_nem_llc_Rqst_iov_update(MPID_Request * mreq, MPIDI_msg_sz_t consume);
+int MPIDI_nem_llc_Rqst_iov_update(MPIR_Request * mreq, intptr_t consume);
int MPID_nem_llc_send_queued(MPIDI_VC_t * vc, rque_t * send_queue);
int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm * comm, int context_offset,
- struct MPID_Request **request);
+ int dest, int tag, MPIR_Comm * comm, int context_offset,
+ struct MPIR_Request **request);
int MPID_nem_llc_issend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm * comm, int context_offset,
- struct MPID_Request **request);
-int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPID_Request *req);
+ int dest, int tag, MPIR_Comm * comm, int context_offset,
+ struct MPIR_Request **request);
+int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPIR_Request *req);
int MPID_nem_llc_kvs_put_binary(int from, const char *postfix, const uint8_t * buf, int length);
int MPID_nem_llc_kvs_get_binary(int from, const char *postfix, char *buf, int length);
-void MPID_nem_llc_anysource_posted(MPID_Request * req);
-int MPID_nem_llc_anysource_matched(MPID_Request * req);
-int MPID_nem_llc_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+void MPID_nem_llc_anysource_posted(MPIR_Request * req);
+int MPID_nem_llc_anysource_matched(MPIR_Request * req);
+int MPID_nem_llc_probe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
MPI_Status * status);
-int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
int *flag, MPI_Status * status);
-int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
- int *flag, MPID_Request ** message, MPI_Status * status);
-int MPID_nem_llc_cancel_recv(struct MPIDI_VC *vc, struct MPID_Request *req);
+int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status);
+int MPID_nem_llc_cancel_recv(struct MPIDI_VC *vc, struct MPIR_Request *req);
/*
* temporary llc api
@@ -126,7 +126,7 @@ extern int llc_unbind(void *endpt);
extern int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc);
-extern int convert_rank_llc2mpi(MPID_Comm * comm, int llc_rank, int *mpi_rank);
+extern int convert_rank_llc2mpi(MPIR_Comm * comm, int llc_rank, int *mpi_rank);
typedef struct MPID_nem_llc_netmod_hdr {
int initiator_pg_rank;
#ifndef notdef_hsiz_hack
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_init.c b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_init.c
index 9bd2a53..b49a31a 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_init.c
@@ -53,8 +53,8 @@ int MPID_nem_llc_kvs_put_binary(int from, const char *postfix, const uint8_t * b
char key[256], val[256], str[256];
int j;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_KVS_PUT_BINARY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_KVS_PUT_BINARY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_KVS_PUT_BINARY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_KVS_PUT_BINARY);
mpi_errno = MPIDI_PG_GetConnKVSname(&kvs_name);
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**MPIDI_PG_GetConnKVSname");
@@ -71,7 +71,7 @@ int MPID_nem_llc_kvs_put_binary(int from, const char *postfix, const uint8_t * b
pmi_errno = PMI_KVS_Put(kvs_name, key, val);
MPIR_ERR_CHKANDJUMP(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**PMI_KVS_Put");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_KVS_PUT_BINARY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_KVS_PUT_BINARY);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -89,8 +89,8 @@ int MPID_nem_llc_kvs_get_binary(int from, const char *postfix, char *buf, int le
char key[256], val[256], str[256];
int j;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_KVS_GET_BINARY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_KVS_GET_BINARY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_KVS_GET_BINARY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_KVS_GET_BINARY);
mpi_errno = MPIDI_PG_GetConnKVSname(&kvs_name);
dprintf("kvs_get_binary,kvs_name=%s\n", kvs_name);
@@ -112,7 +112,7 @@ int MPID_nem_llc_kvs_get_binary(int from, const char *postfix, char *buf, int le
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_KVS_GET_BINARY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_KVS_GET_BINARY);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -126,9 +126,9 @@ int MPID_nem_llc_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
{
int mpi_errno = MPI_SUCCESS, pmi_errno, llc_errno;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_INIT);
llc_errno = LLC_init(TYPE_MPI);
MPIR_ERR_CHKANDJUMP(llc_errno, mpi_errno, MPI_ERR_OTHER, "**LLC_init");
@@ -155,7 +155,7 @@ int MPID_nem_llc_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
MPIDI_Anysource_improbe_fn = MPID_nem_llc_anysource_improbe;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -168,12 +168,12 @@ int MPID_nem_llc_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
int MPID_nem_llc_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_GET_BUSINESS_CARD);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_GET_BUSINESS_CARD);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_GET_BUSINESS_CARD);
return mpi_errno;
//fn_fail:
goto fn_exit;
@@ -186,12 +186,12 @@ int MPID_nem_llc_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz
int MPID_nem_llc_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_CONNECT_TO_ROOT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_CONNECT_TO_ROOT);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_CONNECT_TO_ROOT);
return mpi_errno;
//fn_fail:
goto fn_exit;
@@ -205,7 +205,7 @@ int MPID_nem_llc_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc)
#define FUNCNAME MPID_nem_llc_anysource_iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+int MPID_nem_llc_anysource_iprobe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
MPI_Status * status)
{
return MPID_nem_llc_iprobe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, status);
@@ -216,8 +216,8 @@ int MPID_nem_llc_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset,
#define FUNCNAME MPID_nem_llc_anysource_improbe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag,
- MPID_Request ** message, MPI_Status * status)
+int MPID_nem_llc_anysource_improbe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
+ MPIR_Request ** message, MPI_Status * status)
{
return MPID_nem_llc_improbe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, message,
status);
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_poll.c b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_poll.c
index 4b1be26..6cd6b32 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_poll.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_poll.c
@@ -28,9 +28,9 @@ static void MPID_nem_llc_recv_handler(void *vp_vc, uint64_t raddr, void *buf, si
int MPID_nem_llc_poll(int in_blocking_progress)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_POLL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_POLL);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_POLL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_POLL);
{
int rc;
@@ -42,7 +42,7 @@ int MPID_nem_llc_poll(int in_blocking_progress)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_POLL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_POLL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -55,29 +55,29 @@ int MPID_nem_llc_poll(int in_blocking_progress)
static void MPID_nem_llc_send_handler(void *cba, uint64_t * p_reqid)
{
/* int mpi_errno = 0; */
- MPID_Request *sreq = cba; /* from llc_writev(,,,,cbarg,) */
- MPID_Request_kind_t kind;
- /* MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_SEND_HANDLER); */
+ MPIR_Request *sreq = cba; /* from llc_writev(,,,,cbarg,) */
+ MPIR_Request_kind_t kind;
+ /* MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_SEND_HANDLER); */
- /* MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_SEND_HANDLER); */
+ /* MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_SEND_HANDLER); */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "llc_send_handler");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_send_handler");
- MPIU_Assert(sreq != NULL);
+ MPIR_Assert(sreq != NULL);
if (sreq == (void *) 0xdeadbeefUL) {
MPIDI_VC_t *vc = (void *) p_reqid[0];
MPID_nem_llc_vc_area *vc_llc;
- MPIU_Assert(vc != NULL);
+ MPIR_Assert(vc != NULL);
/* printf("from credit %p (pg_rank %d)\n", vc, vc->pg_rank); */
vc_llc = VC_LLC(vc);
MPID_nem_llc_send_queued(vc, &vc_llc->send_queue);
p_reqid[0] = !MPIDI_CH3I_Sendq_empty(vc_llc->send_queue);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "llc_send_handler");
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "send queue %d", (unsigned int) p_reqid[0]);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_send_handler");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "send queue %d", (unsigned int) p_reqid[0]);
goto fn_exit;
}
@@ -85,8 +85,8 @@ static void MPID_nem_llc_send_handler(void *cba, uint64_t * p_reqid)
kind = sreq->kind;
switch (kind) {
unsigned int reqtype;
- case MPID_REQUEST_SEND:
- case MPID_PREQUEST_SEND:{
+ case MPIR_REQUEST_KIND__SEND:
+ case MPIR_REQUEST_KIND__PREQUEST_SEND:{
reqtype = MPIDI_Request_get_type(sreq);
/* Free temporal buffer for non-contiguous data.
@@ -96,7 +96,7 @@ static void MPID_nem_llc_send_handler(void *cba, uint64_t * p_reqid)
* control message send follows
* MPIDI_CH3_iStartMsg/v-->MPID_nem_llc_iStartContigMsg-->MPID_nem_llc_iSendContig
* and MPID_nem_llc_iSendContig set req->dev.state to zero
- * because MPID_Request_create (in src/mpid/ch3/src/ch3u_request.c)
+ * because MPIR_Request_create
* sets it to zero. In addition, eager-short message has req->comm of zero. */
#ifndef notdef_leak_0001_hack
/* See also MPIDI_CH3_Request_create and _destory() */
@@ -107,23 +107,23 @@ static void MPID_nem_llc_send_handler(void *cba, uint64_t * p_reqid)
* Note that RMA messages should be included.
* Exclude eager-short by requiring req->comm != 0. */
int is_contig;
- MPID_Datatype_is_contig(sreq->dev.datatype, &is_contig);
+ MPIDU_Datatype_is_contig(sreq->dev.datatype, &is_contig);
if (!is_contig && REQ_FIELD(sreq, pack_buf)) {
dprintf("llc_send_handler,non-contiguous,free pack_buf\n");
- MPIU_Free(REQ_FIELD(sreq, pack_buf));
+ MPL_free(REQ_FIELD(sreq, pack_buf));
}
}
if ((REQ_FIELD(sreq, rma_buf) != NULL && sreq->dev.datatype_ptr &&
sreq->dev.segment_size > 0)) {
- MPIU_Free(REQ_FIELD(sreq, rma_buf)); // allocated in MPID_nem_llc_SendNoncontig
+ MPL_free(REQ_FIELD(sreq, rma_buf)); // allocated in MPID_nem_llc_SendNoncontig
REQ_FIELD(sreq, rma_buf) = NULL;
}
/* sreq: src/mpid/ch3/include/mpidpre.h */
{
MPIDI_VC_t *vc;
- int (*reqFn) (MPIDI_VC_t * vc, MPID_Request * sreq, int *complete);
+ int (*reqFn) (MPIDI_VC_t * vc, MPIR_Request * sreq, int *complete);
int complete;
int r_mpi_errno;
@@ -132,13 +132,13 @@ static void MPID_nem_llc_send_handler(void *cba, uint64_t * p_reqid)
vc = sreq->ch.vc; /* before callback */
reqFn = sreq->dev.OnDataAvail;
if (reqFn == 0) {
- MPIU_Assert(reqtype != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(reqtype != MPIDI_REQUEST_TYPE_GET_RESP);
r_mpi_errno = MPID_Request_complete(sreq);
if (r_mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(r_mpi_errno);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
else {
complete = 0;
@@ -146,9 +146,9 @@ static void MPID_nem_llc_send_handler(void *cba, uint64_t * p_reqid)
if (r_mpi_errno)
MPIR_ERR_POP(r_mpi_errno);
if (complete == 0) {
- MPIU_Assert(complete == TRUE);
+ MPIR_Assert(complete == TRUE);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete2");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete2");
}
/* push queued messages */
@@ -167,7 +167,7 @@ static void MPID_nem_llc_send_handler(void *cba, uint64_t * p_reqid)
}
fn_exit:
- /* MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_SEND_HANDLER); */
+ /* MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_SEND_HANDLER); */
return /* mpi_errno */ ;
fn_fail:
goto fn_exit;
@@ -181,11 +181,11 @@ static void MPID_nem_llc_recv_handler(void *vp_vc, uint64_t raddr, void *buf, si
{
int mpi_errno = 0;
MPIDI_VC_t *vc = vp_vc;
- /* MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_RECV_HANDLER); */
+ /* MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_RECV_HANDLER); */
- /* MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_RECV_HANDLER); */
+ /* MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_RECV_HANDLER); */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "llc_recv_handler");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_recv_handler");
{
int pg_rank = (int) raddr;
@@ -201,13 +201,13 @@ static void MPID_nem_llc_recv_handler(void *vp_vc, uint64_t raddr, void *buf, si
MPIDI_PG_Get_vc_set_active(pg, pg_rank, &vc_from_pg);
}
else {
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "bad vc %p or", pg);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "bad pg_rank %d", pg_rank);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "bad pg_rank < %d", MPIDI_PG_Get_size(pg));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "bad vc %p or", pg);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "bad pg_rank %d", pg_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "bad pg_rank < %d", MPIDI_PG_Get_size(pg));
vc_from_pg = vc; /* XXX */
}
if (vc != vc_from_pg) {
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "bad vc for pg_rank %d", pg_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "bad vc for pg_rank %d", pg_rank);
}
if (vc == 0) {
vc = vc_from_pg;
@@ -216,12 +216,12 @@ static void MPID_nem_llc_recv_handler(void *vp_vc, uint64_t raddr, void *buf, si
if (vc != 0) {
mpi_errno = MPID_nem_handle_pkt(vc, buf, bsz);
if (mpi_errno != 0) {
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "MPID_nem_handle_pkt() = %d", mpi_errno);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "MPID_nem_handle_pkt() = %d", mpi_errno);
}
}
fn_exit:
- /* MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_RECV_HANDLER); */
+ /* MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_RECV_HANDLER); */
return;
//fn_fail:
goto fn_exit;
@@ -231,17 +231,17 @@ static void MPID_nem_llc_recv_handler(void *vp_vc, uint64_t raddr, void *buf, si
#define FUNCNAME MPID_nem_llc_recv_posted
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPID_Request *req)
+int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPIR_Request *req)
{
int mpi_errno = MPI_SUCCESS, llc_errno;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype*dt_ptr;
MPI_Aint dt_true_lb;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_RECV_POSTED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_RECV_POSTED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_RECV_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_RECV_POSTED);
/* req->dev.datatype is set in MPID_irecv --> MPIDI_CH3U_Recvq_FDU_or_AEP */
MPIDI_Datatype_get_info(req->dev.user_count, req->dev.datatype, dt_contig, data_sz, dt_ptr,
@@ -264,7 +264,7 @@ int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPID_Request *req)
write_to_buf = (void *) ((char *) req->dev.user_buf + dt_true_lb);
}
else {
- REQ_FIELD(req, pack_buf) = MPIU_Malloc(data_sz);
+ REQ_FIELD(req, pack_buf) = MPL_malloc(data_sz);
MPIR_ERR_CHKANDJUMP(!REQ_FIELD(req, pack_buf), mpi_errno, MPI_ERR_OTHER, "**outofmemory");
write_to_buf = REQ_FIELD(req, pack_buf);
}
@@ -300,11 +300,11 @@ int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPID_Request *req)
*(int32_t *) ((uint8_t *) & cmd[0].tag) = req->dev.match.parts.tag;
}
- *(MPIU_Context_id_t *) ((uint8_t *) & cmd[0].tag + sizeof(int32_t)) =
+ *(MPIR_Context_id_t *) ((uint8_t *) & cmd[0].tag + sizeof(int32_t)) =
req->dev.match.parts.context_id;
- MPIU_Assert(sizeof(LLC_tag_t) >= sizeof(int32_t) + sizeof(MPIU_Context_id_t));
- memset((uint8_t *) & cmd[0].tag + sizeof(int32_t) + sizeof(MPIU_Context_id_t),
- 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIU_Context_id_t));
+ MPIR_Assert(sizeof(LLC_tag_t) >= sizeof(int32_t) + sizeof(MPIR_Context_id_t));
+ memset((uint8_t *) & cmd[0].tag + sizeof(int32_t) + sizeof(MPIR_Context_id_t),
+ 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIR_Context_id_t));
dprintf("llc_recv_posted,tag=");
@@ -336,7 +336,7 @@ int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPID_Request *req)
MPIR_ERR_CHKANDJUMP(llc_errno != LLC_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**LLC_post");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_RECV_POSTED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_RECV_POSTED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -346,35 +346,35 @@ int MPID_nem_llc_recv_posted(struct MPIDI_VC *vc, struct MPID_Request *req)
#define FUNCNAME MPID_nem_llc_anysource_posted
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPID_nem_llc_anysource_posted(MPID_Request * req)
+void MPID_nem_llc_anysource_posted(MPIR_Request * req)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED);
mpi_errno = MPID_nem_llc_recv_posted(NULL, req);
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_AYSOURCE_POSTED);
}
#undef FUNCNAME
#define FUNCNAME MPID_nem_llc_anysource_matched
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_anysource_matched(MPID_Request * req)
+int MPID_nem_llc_anysource_matched(MPIR_Request * req)
{
int matched = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED);
/* FIXME : How to call a cancel_recv function */
/* If LLC_postedq is still having this request, delete it.
* Ohterwise, return TURE */
matched = LLC_req_approve_recv((LLC_cmd_t *) REQ_FIELD(req, cmds));
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_ANYSOURCE_MATCHED);
return matched;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_probe.c b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_probe.c
index d9c11ba..96d2b09 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_probe.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_probe.c
@@ -21,18 +21,18 @@
#define FUNCNAME MPID_nem_llc_probe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+int MPID_nem_llc_probe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_PROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_PROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_PROBE);
dprintf("llc_probe,source=%d,tag=%d\n", source, tag);
/* NOTE : This function is not used. Because 'vc->comm_ops->probe()' is not used */
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_PROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_PROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -42,7 +42,7 @@ int MPID_nem_llc_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, i
#define FUNCNAME MPID_nem_llc_iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
int *flag, MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS, llc_errno;
@@ -51,8 +51,8 @@ int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
LLC_probe_t probe;
LLC_match_mask_t mask;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_IPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_IPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_IPROBE);
dprintf("llc_iprobe,source=%d,tag=%d\n", source, tag);
mask.rank = ~0;
@@ -66,17 +66,17 @@ int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
*(int32_t *) ((uint8_t *) & _tag) = tag;
}
- *(MPIU_Context_id_t *) ((uint8_t *) & _tag + sizeof(int32_t)) =
+ *(MPIR_Context_id_t *) ((uint8_t *) & _tag + sizeof(int32_t)) =
comm->recvcontext_id + context_offset;
- memset((uint8_t *) & _tag + sizeof(int32_t) + sizeof(MPIU_Context_id_t),
- 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIU_Context_id_t));
+ memset((uint8_t *) & _tag + sizeof(int32_t) + sizeof(MPIR_Context_id_t),
+ 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIR_Context_id_t));
if (source == MPI_ANY_SOURCE) {
rank = LLC_ANY_SOURCE;
mask.rank = 0;
}
else {
- MPIU_Assert(vc);
+ MPIR_Assert(vc);
rank = VC_FIELD(vc, remote_endpoint_addr);
}
@@ -90,7 +90,7 @@ int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
else {
int found = 0;
found = convert_rank_llc2mpi(comm, probe.rank, &status->MPI_SOURCE);
- MPIU_Assert(found);
+ MPIR_Assert(found);
}
status->MPI_TAG = probe.tag & 0xffffffff;
MPIR_STATUS_SET_COUNT(*status, probe.len);
@@ -102,7 +102,7 @@ int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_IPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_IPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -112,8 +112,8 @@ int MPID_nem_llc_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
#define FUNCNAME MPID_nem_llc_improbe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
- int *flag, MPID_Request ** message, MPI_Status * status)
+int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
int rank;
@@ -122,8 +122,8 @@ int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
LLC_match_mask_t mask;
LLC_cmd_t *msg = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_IMPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_IMPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_IMPROBE);
dprintf("llc_improbe,source=%d,tag=%d\n", source, tag);
mask.rank = ~0;
@@ -137,29 +137,29 @@ int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
*(int32_t *) ((uint8_t *) & _tag) = tag;
}
- *(MPIU_Context_id_t *) ((uint8_t *) & _tag + sizeof(int32_t)) =
+ *(MPIR_Context_id_t *) ((uint8_t *) & _tag + sizeof(int32_t)) =
comm->recvcontext_id + context_offset;
- memset((uint8_t *) & _tag + sizeof(int32_t) + sizeof(MPIU_Context_id_t),
- 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIU_Context_id_t));
+ memset((uint8_t *) & _tag + sizeof(int32_t) + sizeof(MPIR_Context_id_t),
+ 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIR_Context_id_t));
if (source == MPI_ANY_SOURCE) {
rank = LLC_ANY_SOURCE;
mask.rank = 0;
}
else {
- MPIU_Assert(vc);
+ MPIR_Assert(vc);
rank = VC_FIELD(vc, remote_endpoint_addr);
}
msg = LLC_mprobe(LLC_COMM_MPICH, rank, _tag, &mask, &probe);
if (msg) {
- MPID_Request *req;
+ MPIR_Request *req;
*flag = 1;
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 2);
- req->kind = MPID_REQUEST_MPROBE;
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Object_set_ref(req, 2);
+ req->kind = MPIR_REQUEST_KIND__MPROBE;
req->comm = comm;
MPIR_Comm_add_ref(comm);
req->ch.vc = vc;
@@ -173,13 +173,13 @@ int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
else {
int found = 0;
found = convert_rank_llc2mpi(comm, probe.rank, &req->status.MPI_SOURCE);
- MPIU_Assert(found);
+ MPIR_Assert(found);
}
req->status.MPI_TAG = probe.tag & 0xffffffff;
req->dev.recv_data_sz = probe.len;
MPIR_STATUS_SET_COUNT(req->status, req->dev.recv_data_sz);
- req->dev.tmpbuf = MPIU_Malloc(req->dev.recv_data_sz);
- MPIU_Assert(req->dev.tmpbuf);
+ req->dev.tmpbuf = MPL_malloc(req->dev.recv_data_sz);
+ MPIR_Assert(req->dev.tmpbuf);
/* receive message in req->dev.tmpbuf */
LLC_cmd_t *cmd = LLC_cmd_alloc2(1, 1, 1);
@@ -211,7 +211,7 @@ int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
/* Wait until the reception of data is completed */
do {
mpi_errno = MPID_nem_llc_poll(0);
- } while (!MPID_Request_is_complete(req));
+ } while (!MPIR_Request_is_complete(req));
// MPID_Request_complete(req); // This operation is done in llc_poll.
@@ -231,7 +231,7 @@ int MPID_nem_llc_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_IMPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_IMPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_send.c b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_send.c
index 5e3f1a2..773d352 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_send.c
@@ -21,18 +21,18 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm * comm, int context_offset,
- struct MPID_Request **req_out)
+ int dest, int tag, MPIR_Comm * comm, int context_offset,
+ struct MPIR_Request **req_out)
{
int mpi_errno = MPI_SUCCESS, llc_errno;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype*dt_ptr;
MPI_Aint dt_true_lb;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_ISEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_ISEND);
dprintf
("llc_isend,%d->%d,buf=%p,count=%d,datatype=%08x,dest=%d,tag=%08x,comm=%p,context_offset=%d\n",
@@ -43,10 +43,10 @@ int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Data
LLC_comm_rank(LLC_COMM_MPICH, &LLC_my_rank);
dprintf("llc_isend,LLC_my_rank=%d\n", LLC_my_rank);
- struct MPID_Request *sreq = MPID_Request_create();
- MPIU_Assert(sreq != NULL);
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ struct MPIR_Request *sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(sreq != NULL);
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
/* Used in llc_poll --> MPID_nem_llc_send_handler */
sreq->ch.vc = vc;
@@ -90,11 +90,11 @@ int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Data
/* Prepare bit-vector to perform tag-match. We use the same bit-vector as in CH3 layer. */
/* See src/mpid/ch3/src/mpid_isend.c */
*(int32_t *) ((uint8_t *) & cmd[0].tag) = tag;
- *(MPIU_Context_id_t *) ((uint8_t *) & cmd[0].tag + sizeof(int32_t)) =
+ *(MPIR_Context_id_t *) ((uint8_t *) & cmd[0].tag + sizeof(int32_t)) =
comm->context_id + context_offset;
- MPIU_Assert(sizeof(LLC_tag_t) >= sizeof(int32_t) + sizeof(MPIU_Context_id_t));
- memset((uint8_t *) & cmd[0].tag + sizeof(int32_t) + sizeof(MPIU_Context_id_t),
- 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIU_Context_id_t));
+ MPIR_Assert(sizeof(LLC_tag_t) >= sizeof(int32_t) + sizeof(MPIR_Context_id_t));
+ memset((uint8_t *) & cmd[0].tag + sizeof(int32_t) + sizeof(MPIR_Context_id_t),
+ 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIR_Context_id_t));
dprintf("llc_isend,tag=");
for (i = 0; i < sizeof(LLC_tag_t); i++) {
@@ -116,7 +116,7 @@ int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Data
}
else {
/* See MPIDI_CH3_EagerNoncontigSend (in ch3u_eager.c) */
- struct MPID_Segment *segment_ptr = MPID_Segment_alloc();
+ struct MPIDU_Segment *segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP(!segment_ptr, mpi_errno, MPI_ERR_OTHER, "**outofmemory");
#ifndef notdef_leak_0001_hack
/* See also MPIDI_CH3_Request_create and _destory() */
@@ -124,15 +124,15 @@ int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Data
sreq->dev.segment_ptr = segment_ptr;
#endif /* notdef_leak_0001_hack */
- MPID_Segment_init(buf, count, datatype, segment_ptr, 0);
- MPIDI_msg_sz_t segment_first = 0;
- MPIDI_msg_sz_t segment_size = data_sz;
- MPIDI_msg_sz_t last = segment_size;
- MPIU_Assert(last > 0);
- REQ_FIELD(sreq, pack_buf) = MPIU_Malloc((size_t) data_sz);
+ MPIDU_Segment_init(buf, count, datatype, segment_ptr, 0);
+ intptr_t segment_first = 0;
+ intptr_t segment_size = data_sz;
+ intptr_t last = segment_size;
+ MPIR_Assert(last > 0);
+ REQ_FIELD(sreq, pack_buf) = MPL_malloc((size_t) data_sz);
MPIR_ERR_CHKANDJUMP(!REQ_FIELD(sreq, pack_buf), mpi_errno, MPI_ERR_OTHER, "**outofmemory");
- MPID_Segment_pack(segment_ptr, segment_first, &last, (char *) (REQ_FIELD(sreq, pack_buf)));
- MPIU_Assert(last == data_sz);
+ MPIDU_Segment_pack(segment_ptr, segment_first, &last, (char *) (REQ_FIELD(sreq, pack_buf)));
+ MPIR_Assert(last == data_sz);
write_from_buf = REQ_FIELD(sreq, pack_buf);
}
@@ -152,7 +152,7 @@ int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Data
fn_exit:
*req_out = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_ISEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_ISEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -162,34 +162,34 @@ int MPID_nem_llc_isend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Data
#define FUNCNAME MPID_nem_llc_iStartContigMsg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
- MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr)
+int MPID_nem_llc_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, intptr_t hdr_sz, void *data,
+ intptr_t data_sz, MPIR_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = NULL;
+ MPIR_Request *sreq = NULL;
MPID_nem_llc_vc_area *vc_llc = 0;
int need_to_queue = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG);
dprintf("llc_iStartContigMsg,%d->%d,hdr=%p,hdr_sz=%ld,data=%p,data_sz=%ld\n",
MPIDI_Process.my_pg_rank, vc->pg_rank, hdr, hdr_sz, data, data_sz);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "llc_iStartContigMsg");
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_iStartContigMsg");
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *) hdr);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "vc.pg_rank = %d", vc->pg_rank);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "my_pg_rank = %d", MPIDI_Process.my_pg_rank);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "hdr_sz = %d", (int) hdr_sz);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "data_sz = %d", (int) data_sz);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "hdr type = %d", ((MPIDI_CH3_Pkt_t *) hdr)->type);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "vc.pg_rank = %d", vc->pg_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "my_pg_rank = %d", MPIDI_Process.my_pg_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "hdr_sz = %d", (int) hdr_sz);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "data_sz = %d", (int) data_sz);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "hdr type = %d", ((MPIDI_CH3_Pkt_t *) hdr)->type);
/* create a request */
- sreq = MPID_Request_create();
- MPIU_Assert(sreq != NULL);
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(sreq != NULL);
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->ch.vc = vc;
sreq->dev.OnDataAvail = 0;
@@ -202,12 +202,12 @@ int MPID_nem_llc_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_
sreq->dev.iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) & sreq->dev.pending_pkt;
sreq->dev.iov[0].MPL_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
sreq->dev.iov_count = 1;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
if (data_sz > 0) {
sreq->dev.iov[1].MPL_IOV_BUF = data;
sreq->dev.iov[1].MPL_IOV_LEN = data_sz;
sreq->dev.iov_count = 2;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
}
@@ -227,24 +227,24 @@ int MPID_nem_llc_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_
mpi_errno = MPI_ERR_OTHER;
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
if (!MPIDI_nem_llc_Rqst_iov_update(sreq, ret)) {
need_to_queue = 2; /* YYY */
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
}
queue_it:
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "need_to_que %d", need_to_queue);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "need_to_que %d", need_to_queue);
if (need_to_queue > 0) {
MPIDI_CH3I_Sendq_enqueue(&vc_llc->send_queue, sreq);
}
fn_exit:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_ISTARTCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -254,34 +254,34 @@ int MPID_nem_llc_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_
#define FUNCNAME MPID_nem_llc_iSendContig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz)
+int MPID_nem_llc_iSendContig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_llc_vc_area *vc_llc = 0;
int need_to_queue = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG);
- if (sreq->kind == MPID_REQUEST_UNDEFINED) {
- sreq->kind = MPID_REQUEST_SEND;
+ if (sreq->kind == MPIR_REQUEST_KIND__UNDEFINED) {
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
}
dprintf("llc_iSendConitig,sreq=%p,hdr=%p,hdr_sz=%ld,data=%p,data_sz=%ld\n",
sreq, hdr, hdr_sz, data, data_sz);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "llc_iSendContig");
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_iSendContig");
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *) hdr);
- MPIU_DBG_PKT(vc, hdr, "isendcontig");
+ MPL_DBG_PKT(vc, hdr, "isendcontig");
{
MPIDI_CH3_Pkt_t *pkt = (MPIDI_CH3_Pkt_t *) hdr;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "pkt->type = %d", pkt->type);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "pkt->type = %d", pkt->type);
}
- MPIU_Assert(sreq != NULL);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "OnDataAvail= %p", sreq->dev.OnDataAvail);
+ MPIR_Assert(sreq != NULL);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "OnDataAvail= %p", sreq->dev.OnDataAvail);
sreq->ch.vc = vc;
sreq->dev.iov_offset = 0;
@@ -290,12 +290,12 @@ int MPID_nem_llc_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MP
sreq->dev.iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) & sreq->dev.pending_pkt;
sreq->dev.iov[0].MPL_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
sreq->dev.iov_count = 1;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
if (data_sz > 0) {
sreq->dev.iov[1].MPL_IOV_BUF = data;
sreq->dev.iov[1].MPL_IOV_LEN = data_sz;
sreq->dev.iov_count = 2;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"IOV_LEN = %d", (int) sreq->dev.iov[1].MPL_IOV_LEN);
}
@@ -315,20 +315,20 @@ int MPID_nem_llc_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MP
mpi_errno = MPI_ERR_OTHER;
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "WRITEV() = %d", ret);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "WRITEV() = %d", ret);
if (!MPIDI_nem_llc_Rqst_iov_update(sreq, ret)) {
need_to_queue = 2; /* YYY */
}
}
queue_it:
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "need_to_que %d", need_to_queue);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "need_to_que %d", need_to_queue);
if (need_to_queue > 0) {
MPIDI_CH3I_Sendq_enqueue(&vc_llc->send_queue, sreq);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_ISENDCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -338,40 +338,40 @@ int MPID_nem_llc_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MP
#define FUNCNAME MPID_nem_llc_SendNoncontig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_llc_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
- MPIDI_msg_sz_t hdr_sz)
+int MPID_nem_llc_SendNoncontig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr,
+ intptr_t hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "llc_SendNoncontig");
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_SendNoncontig");
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPID_nem_llc_vc_area *vc_llc = 0;
int need_to_queue = 0;
- MPIU_Assert(sreq->dev.segment_first == 0);
+ MPIR_Assert(sreq->dev.segment_first == 0);
REQ_FIELD(sreq, rma_buf) = NULL;
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) hdr;
sreq->dev.iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) & sreq->dev.pending_pkt;
sreq->dev.iov[0].MPL_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
sreq->dev.iov_count = 1;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[0].MPL_IOV_LEN);
data_sz = sreq->dev.segment_size;
if (data_sz > 0) {
- REQ_FIELD(sreq, rma_buf) = MPIU_Malloc((size_t) sreq->dev.segment_size);
+ REQ_FIELD(sreq, rma_buf) = MPL_malloc((size_t) sreq->dev.segment_size);
MPIR_ERR_CHKANDJUMP(!REQ_FIELD(sreq, rma_buf), mpi_errno, MPI_ERR_OTHER, "**outofmemory");
- MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &data_sz,
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &data_sz,
(char *) REQ_FIELD(sreq, rma_buf));
sreq->dev.iov[1].MPL_IOV_BUF = REQ_FIELD(sreq, rma_buf);
sreq->dev.iov[1].MPL_IOV_LEN = data_sz;
sreq->dev.iov_count = 2;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[1].MPL_IOV_LEN);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "IOV_LEN = %d", (int) sreq->dev.iov[1].MPL_IOV_LEN);
}
sreq->ch.vc = vc;
@@ -398,13 +398,13 @@ int MPID_nem_llc_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
}
queue_it:
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "need_to_que %d", need_to_queue);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "need_to_que %d", need_to_queue);
if (need_to_queue > 0) {
MPIDI_CH3I_Sendq_enqueue(&vc_llc->send_queue, sreq);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_SENDNONCONTIG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -418,23 +418,23 @@ int MPID_nem_llc_send_queued(MPIDI_VC_t * vc, rque_t * send_queue)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_llc_vc_area *vc_llc;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_SEND_QUEUED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_SEND_QUEUED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_SEND_QUEUED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_SEND_QUEUED);
- MPIU_Assert(vc != NULL);
+ MPIR_Assert(vc != NULL);
vc_llc = VC_LLC(vc);
- MPIU_Assert(vc_llc != NULL);
+ MPIR_Assert(vc_llc != NULL);
while (!MPIDI_CH3I_Sendq_empty(*send_queue)) {
ssize_t ret = 0;
- MPID_Request *sreq;
+ MPIR_Request *sreq;
void *endpt = vc_llc->endpoint;
MPL_IOV *iovs;
int niov;
sreq = MPIDI_CH3I_Sendq_head(*send_queue);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "sreq %p", sreq);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "sreq %p", sreq);
if (mpi_errno == MPI_SUCCESS) {
iovs = &sreq->dev.iov[sreq->dev.iov_offset];
@@ -450,19 +450,19 @@ int MPID_nem_llc_send_queued(MPIDI_VC_t * vc, rque_t * send_queue)
MPIDI_CH3I_Sendq_dequeue(send_queue, &sreq);
sreq->status.MPI_ERROR = mpi_errno;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "OnDataAvail = %p", sreq->dev.OnDataAvail);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "OnDataAvail = %p", sreq->dev.OnDataAvail);
MPID_Request_complete(sreq);
continue;
}
if (!MPIDI_nem_llc_Rqst_iov_update(sreq, ret)) {
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "skip %p", sreq);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "skip %p", sreq);
break;
}
MPIDI_CH3I_Sendq_dequeue(send_queue, &sreq);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_SEND_QUEUED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_SEND_QUEUED);
return mpi_errno;
//fn_fail:
goto fn_exit;
@@ -472,27 +472,27 @@ int MPID_nem_llc_send_queued(MPIDI_VC_t * vc, rque_t * send_queue)
#define FUNCNAME MPIDI_nem_llc_Rqst_iov_update
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_nem_llc_Rqst_iov_update(MPID_Request * mreq, MPIDI_msg_sz_t consume)
+int MPIDI_nem_llc_Rqst_iov_update(MPIR_Request * mreq, intptr_t consume)
{
int ret = TRUE;
- /* MPIDI_msg_sz_t oconsume = consume; */
+ /* intptr_t oconsume = consume; */
int iv, nv;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE);
- MPIU_Assert(consume >= 0);
+ MPIR_Assert(consume >= 0);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_update() : consume %d", (int) consume);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_update() : iov_count %d", mreq->dev.iov_count);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_update() : consume %d", (int) consume);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_update() : iov_count %d", mreq->dev.iov_count);
nv = mreq->dev.iov_count;
for (iv = mreq->dev.iov_offset; iv < nv; iv++) {
MPL_IOV *iov = &mreq->dev.iov[iv];
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_update() : iov[iv] %d", iv);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_update() : consume b %d", (int) consume);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_update() : iov[iv] %d", iv);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_update() : consume b %d", (int) consume);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"iov_update() : iov_len b %d", (int) iov->MPL_IOV_LEN);
if (iov->MPL_IOV_LEN > consume) {
iov->MPL_IOV_BUF = ((char *) iov->MPL_IOV_BUF) + consume;
@@ -504,15 +504,15 @@ int MPIDI_nem_llc_Rqst_iov_update(MPID_Request * mreq, MPIDI_msg_sz_t consume)
consume -= iov->MPL_IOV_LEN;
iov->MPL_IOV_LEN = 0;
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_update() : consume %d", (int) consume);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_update() : consume %d", (int) consume);
mreq->dev.iov_count = nv - iv;
mreq->dev.iov_offset = iv;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_update() : iov_offset %ld", mreq->dev.iov_offset);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_update() = %d", ret);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_update() : iov_offset %ld", mreq->dev.iov_offset);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_update() = %d", ret);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEM_LLC_RQST_IOV_UPDATE);
return ret;
}
@@ -527,7 +527,7 @@ ssize_t llc_writev(void *endpt, uint64_t raddr,
dprintf("writev,raddr=%ld,niov=%d,sreq=%p", raddr, niov, cbarg);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "llc_writev(%d)", (int) raddr);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_writev(%d)", (int) raddr);
{
uint8_t *buff = 0;
#ifdef notdef_hsiz_hack
@@ -547,14 +547,14 @@ ssize_t llc_writev(void *endpt, uint64_t raddr,
}
#ifdef notdef_hsiz_hack
if (bsiz > 0) {
- buff = MPIU_Malloc(bsiz + sizeof(MPID_nem_llc_netmod_hdr_t));
+ buff = MPL_malloc(bsiz + sizeof(MPID_nem_llc_netmod_hdr_t));
if (buff == 0) {
nw = -1; /* ENOMEM */
goto bad;
}
}
#else /* notdef_hsiz_hack */
- buff = MPIU_Malloc(bsiz + sizeof(MPID_nem_llc_netmod_hdr_t));
+ buff = MPL_malloc(bsiz + sizeof(MPID_nem_llc_netmod_hdr_t));
if (buff == 0) {
nw = -1; /* ENOMEM */
goto bad;
@@ -565,7 +565,7 @@ ssize_t llc_writev(void *endpt, uint64_t raddr,
lcmd = LLC_cmd_alloc2(1, 1, 1);
if (lcmd == 0) {
if (buff != 0) {
- MPIU_Free(buff);
+ MPL_free(buff);
buff = 0;
}
nw = -1; /* ENOMEM */
@@ -599,7 +599,7 @@ ssize_t llc_writev(void *endpt, uint64_t raddr,
char *bp;
size_t bz;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "llc_writev() : nv %d", nv);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_writev() : nv %d", nv);
bp = (void *) lcmd->iov_local[0].addr;
bz = lcmd->iov_local[0].length;
@@ -627,13 +627,13 @@ ssize_t llc_writev(void *endpt, uint64_t raddr,
}
bp += len;
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "llc_writev() : iv %d", iv);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_writev() : iv %d", iv);
{
void *bb = (void *) lcmd->iov_local[0].addr;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "wptr = %d", (int) (bp - (char *) bb));
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "wptr = %d", (int) (bp - (char *) bb));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"blocklengt = %d", (int) lcmd->iov_local[0].length);
- MPIU_DBG_PKT(endpt, bb, "writev");
+ MPL_DBG_PKT(endpt, bb, "writev");
}
}
{
@@ -645,7 +645,7 @@ ssize_t llc_writev(void *endpt, uint64_t raddr,
}
else {
if (lcmd->iov_local[0].addr != 0) {
- MPIU_Free((void *) lcmd->iov_local[0].addr);
+ MPL_free((void *) lcmd->iov_local[0].addr);
lcmd->iov_local[0].addr = 0;
}
(void) LLC_cmd_free(lcmd, 1);
@@ -666,11 +666,11 @@ ssize_t llc_writev(void *endpt, uint64_t raddr,
}
bad:
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "llc_writev() : nw %d", (int) nw);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "llc_writev() : nw %d", (int) nw);
return nw;
}
-int convert_rank_llc2mpi(MPID_Comm * comm, int llc_rank, int *mpi_rank)
+int convert_rank_llc2mpi(MPIR_Comm * comm, int llc_rank, int *mpi_rank)
{
int size, rank;
int found = 0;
@@ -724,21 +724,21 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
if (nevents == 0) {
break;
}
- MPIU_Assert(nevents == 1);
+ MPIR_Assert(nevents == 1);
switch (events[0].type) {
case LLC_EVENT_SEND_LEFT:{
dprintf("llc_poll,EVENT_SEND_LEFT\n");
lcmd = (LLC_cmd_t *) events[0].side.initiator.req_id;
- MPIU_Assert(lcmd != 0);
- MPIU_Assert(lcmd->opcode == LLC_OPCODE_SEND || lcmd->opcode == LLC_OPCODE_SSEND);
+ MPIR_Assert(lcmd != 0);
+ MPIR_Assert(lcmd->opcode == LLC_OPCODE_SEND || lcmd->opcode == LLC_OPCODE_SSEND);
if (events[0].side.initiator.error_code != LLC_ERROR_SUCCESS) {
printf("llc_poll,error_code=%d\n", events[0].side.initiator.error_code);
MPID_nem_llc_segv;
}
- /* Call send_handler. First arg is a pointer to MPID_Request */
+ /* Call send_handler. First arg is a pointer to MPIR_Request */
(*sfnc) (((struct llc_cmd_area *) lcmd->usr_area)->cbarg, &reqid);
/* Don't free iov_local[0].addr */
@@ -751,8 +751,8 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
case LLC_EVENT_UNSOLICITED_LEFT:{
dprintf("llc_poll,EVENT_UNSOLICITED_LEFT\n");
lcmd = (LLC_cmd_t *) events[0].side.initiator.req_id;
- MPIU_Assert(lcmd != 0);
- MPIU_Assert(lcmd->opcode == LLC_OPCODE_UNSOLICITED);
+ MPIR_Assert(lcmd != 0);
+ MPIR_Assert(lcmd->opcode == LLC_OPCODE_UNSOLICITED);
struct llc_cmd_area *usr;
usr = (void *) lcmd->usr_area;
@@ -767,7 +767,7 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
(*sfnc) (vp_sreq, &reqid);
if (lcmd->iov_local[0].addr != 0) {
- MPIU_Free((void *) lcmd->iov_local[0].addr);
+ MPL_free((void *) lcmd->iov_local[0].addr);
lcmd->iov_local[0].addr = 0;
}
llc_errno = LLC_cmd_free(lcmd, 1);
@@ -784,12 +784,12 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
bsiz = events[0].side.responder.length;
#ifndef notdef_hsiz_hack
#if defined(__sparc__)
- MPIU_Assert(((uintptr_t) buff % 8) == 0);
+ MPIR_Assert(((uintptr_t) buff % 8) == 0);
#endif
#endif /* notdef_hsiz_hack */
{
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "LLC_leng = %d", (int) bsiz);
- MPIU_DBG_PKT(vp_vc, buff, "poll");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "LLC_leng = %d", (int) bsiz);
+ MPL_DBG_PKT(vp_vc, buff, "poll");
}
dprintf("llc_poll,EVENT_UNSOLICITED_ARRIVED,%d<-%d\n",
MPIDI_Process.my_pg_rank,
@@ -812,12 +812,12 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
case LLC_EVENT_RECV_MATCHED:{
dprintf("llc_poll,EVENT_RECV_MATCHED\n");
lcmd = (LLC_cmd_t *) events[0].side.initiator.req_id;
- MPID_Request *req = ((struct llc_cmd_area *) lcmd->usr_area)->cbarg;
+ MPIR_Request *req = ((struct llc_cmd_area *) lcmd->usr_area)->cbarg;
- if (req->kind != MPID_REQUEST_MPROBE) {
+ if (req->kind != MPIR_REQUEST_KIND__MPROBE) {
/* Unpack non-contiguous dt */
int is_contig;
- MPID_Datatype_is_contig(req->dev.datatype, &is_contig);
+ MPIDU_Datatype_is_contig(req->dev.datatype, &is_contig);
if (!is_contig) {
dprintf("llc_poll,unpack noncontiguous data to user buffer\n");
@@ -827,15 +827,15 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
/* set_request_info() sets req->dev.recv_data_sz to pkt->data_sz.
* pkt->data_sz is sender's request size.
*/
- MPIDI_msg_sz_t unpack_sz = events[0].side.initiator.length;
- MPID_Segment seg;
+ intptr_t unpack_sz = events[0].side.initiator.length;
+ MPIDU_Segment seg;
MPI_Aint last;
/* user_buf etc. are set in MPID_irecv --> MPIDI_CH3U_Recvq_FDU_or_AEP */
- MPID_Segment_init(req->dev.user_buf, req->dev.user_count, req->dev.datatype,
+ MPIDU_Segment_init(req->dev.user_buf, req->dev.user_count, req->dev.datatype,
&seg, 0);
last = unpack_sz;
- MPID_Segment_unpack(&seg, 0, &last, REQ_FIELD(req, pack_buf));
+ MPIDU_Segment_unpack(&seg, 0, &last, REQ_FIELD(req, pack_buf));
if (last != unpack_sz) {
/* --BEGIN ERROR HANDLING-- */
/* received data was not entirely consumed by unpack()
@@ -849,7 +849,7 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
}
dprintf("llc_poll,ref_count=%d,pack_buf=%p\n", req->ref_count,
REQ_FIELD(req, pack_buf));
- MPIU_Free(REQ_FIELD(req, pack_buf));
+ MPL_free(REQ_FIELD(req, pack_buf));
}
req->status.MPI_TAG = events[0].side.initiator.tag & 0xffffffff;;
@@ -863,7 +863,7 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
found =
convert_rank_llc2mpi(req->comm, events[0].side.initiator.rank,
&req->status.MPI_SOURCE);
- MPIU_Assert(found);
+ MPIR_Assert(found);
}
if (unlikely(events[0].side.initiator.error_code == LLC_ERROR_TRUNCATE)) {
@@ -877,7 +877,7 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
/* Dequeue request from posted queue.
* It's posted in MPID_Irecv --> MPIDI_CH3U_Recvq_FDU_or_AEP */
int found = MPIDI_CH3U_Recvq_DP(req);
- MPIU_Assert(found);
+ MPIR_Assert(found);
}
/* Mark completion on rreq */
@@ -888,10 +888,10 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
break;
}
case LLC_EVENT_TARGET_PROC_FAIL:{
- MPID_Request *req;
+ MPIR_Request *req;
lcmd = (LLC_cmd_t *) events[0].side.initiator.req_id;
- MPIU_Assert(lcmd != 0);
+ MPIR_Assert(lcmd != 0);
req = ((struct llc_cmd_area *) lcmd->usr_area)->cbarg;
@@ -908,7 +908,7 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
MPID_Request_complete(req);
if (lcmd->iov_local[0].addr != 0) {
- MPIU_Free((void *) lcmd->iov_local[0].addr);
+ MPL_free((void *) lcmd->iov_local[0].addr);
lcmd->iov_local[0].addr = 0;
}
}
@@ -954,18 +954,18 @@ int llc_poll(int in_blocking_poll, llc_send_f sfnc, llc_recv_f rfnc)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_llc_issend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm * comm, int context_offset,
- struct MPID_Request **request)
+ int dest, int tag, MPIR_Comm * comm, int context_offset,
+ struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS, llc_errno;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype*dt_ptr;
MPI_Aint dt_true_lb;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_ISSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_ISSEND);
dprintf
("llc_isend,%d->%d,buf=%p,count=%d,datatype=%08x,dest=%d,tag=%08x,comm=%p,context_offset=%d\n",
@@ -976,10 +976,10 @@ int MPID_nem_llc_issend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Dat
LLC_comm_rank(LLC_COMM_MPICH, &LLC_my_rank);
dprintf("llc_isend,LLC_my_rank=%d\n", LLC_my_rank);
- struct MPID_Request *sreq = MPID_Request_create();
- MPIU_Assert(sreq != NULL);
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ struct MPIR_Request *sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(sreq != NULL);
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
/* Used in llc_poll --> MPID_nem_llc_send_handler */
sreq->ch.vc = vc;
@@ -1015,11 +1015,11 @@ int MPID_nem_llc_issend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Dat
/* Prepare bit-vector to perform tag-match. We use the same bit-vector as in CH3 layer. */
/* See src/mpid/ch3/src/mpid_isend.c */
*(int32_t *) ((uint8_t *) & cmd[0].tag) = tag;
- *(MPIU_Context_id_t *) ((uint8_t *) & cmd[0].tag + sizeof(int32_t)) =
+ *(MPIR_Context_id_t *) ((uint8_t *) & cmd[0].tag + sizeof(int32_t)) =
comm->context_id + context_offset;
- MPIU_Assert(sizeof(LLC_tag_t) >= sizeof(int32_t) + sizeof(MPIU_Context_id_t));
- memset((uint8_t *) & cmd[0].tag + sizeof(int32_t) + sizeof(MPIU_Context_id_t),
- 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIU_Context_id_t));
+ MPIR_Assert(sizeof(LLC_tag_t) >= sizeof(int32_t) + sizeof(MPIR_Context_id_t));
+ memset((uint8_t *) & cmd[0].tag + sizeof(int32_t) + sizeof(MPIR_Context_id_t),
+ 0, sizeof(LLC_tag_t) - sizeof(int32_t) - sizeof(MPIR_Context_id_t));
dprintf("llc_isend,tag=");
for (i = 0; i < sizeof(LLC_tag_t); i++) {
@@ -1039,21 +1039,21 @@ int MPID_nem_llc_issend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Dat
}
else {
/* See MPIDI_CH3_EagerNoncontigSend (in ch3u_eager.c) */
- struct MPID_Segment *segment_ptr = MPID_Segment_alloc();
+ struct MPIDU_Segment *segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP(!segment_ptr, mpi_errno, MPI_ERR_OTHER, "**outofmemory");
/* See also MPIDI_CH3_Request_create and _destory() */
/* in src/mpid/ch3/src/ch3u_request.c */
sreq->dev.segment_ptr = segment_ptr;
- MPID_Segment_init(buf, count, datatype, segment_ptr, 0);
- MPIDI_msg_sz_t segment_first = 0;
- MPIDI_msg_sz_t segment_size = data_sz;
- MPIDI_msg_sz_t last = segment_size;
- MPIU_Assert(last > 0);
- REQ_FIELD(sreq, pack_buf) = MPIU_Malloc((size_t) data_sz);
+ MPIDU_Segment_init(buf, count, datatype, segment_ptr, 0);
+ intptr_t segment_first = 0;
+ intptr_t segment_size = data_sz;
+ intptr_t last = segment_size;
+ MPIR_Assert(last > 0);
+ REQ_FIELD(sreq, pack_buf) = MPL_malloc((size_t) data_sz);
MPIR_ERR_CHKANDJUMP(!REQ_FIELD(sreq, pack_buf), mpi_errno, MPI_ERR_OTHER, "**outofmemory");
- MPID_Segment_pack(segment_ptr, segment_first, &last, (char *) (REQ_FIELD(sreq, pack_buf)));
- MPIU_Assert(last == data_sz);
+ MPIDU_Segment_pack(segment_ptr, segment_first, &last, (char *) (REQ_FIELD(sreq, pack_buf)));
+ MPIR_Assert(last == data_sz);
write_from_buf = REQ_FIELD(sreq, pack_buf);
}
@@ -1073,7 +1073,7 @@ int MPID_nem_llc_issend(struct MPIDI_VC *vc, const void *buf, int count, MPI_Dat
fn_exit:
*request = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_ISSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_ISSEND);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_vc.c b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_vc.c
index eb00c01..0b1fcb7 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/llc/llc_vc.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/llc/llc_vc.c
@@ -40,7 +40,8 @@ static MPIDI_Comm_ops_t comm_ops = {
.probe = MPID_nem_llc_probe,
.iprobe = MPID_nem_llc_iprobe,
- .improbe = MPID_nem_llc_improbe
+ .improbe = MPID_nem_llc_improbe,
+ .imrecv = NULL
};
#undef FUNCNAME
@@ -50,16 +51,16 @@ static MPIDI_Comm_ops_t comm_ops = {
int MPID_nem_llc_vc_init(MPIDI_VC_t * vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_VC_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_VC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_VC_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_VC_INIT);
mpi_errno = llc_vc_init(vc);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_VC_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_VC_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -72,9 +73,9 @@ int MPID_nem_llc_vc_init(MPIDI_VC_t * vc)
int MPID_nem_llc_vc_destroy(MPIDI_VC_t * vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_VC_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_VC_DESTROY);
/* free any resources associated with this VC here */
{
@@ -89,7 +90,7 @@ int MPID_nem_llc_vc_destroy(MPIDI_VC_t * vc)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_VC_DESTROY);
return mpi_errno;
//fn_fail:
goto fn_exit;
@@ -102,16 +103,16 @@ int MPID_nem_llc_vc_destroy(MPIDI_VC_t * vc)
int MPID_nem_llc_vc_terminate(MPIDI_VC_t * vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LLC_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LLC_VC_TERMINATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LLC_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LLC_VC_TERMINATE);
dprintf("llc_vc_terminate,enter,%d->%d\n", MPIDI_Process.my_pg_rank, vc->pg_rank);
mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LLC_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LLC_VC_TERMINATE);
return mpi_errno;
//fn_fail:
goto fn_exit;
@@ -130,11 +131,11 @@ static int llc_vc_init(MPIDI_VC_t * vc)
{
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"MPIDI_NEM_VC_NETMOD_AREA_LEN = %d\n", MPIDI_NEM_VC_NETMOD_AREA_LEN);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"MPIDI_NEM_REQ_NETMOD_AREA_LEN = %d", MPIDI_NEM_REQ_NETMOD_AREA_LEN);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
"MPID_nem_llc_vc_area = %d\n", (int) sizeof(MPID_nem_llc_vc_area));
}
@@ -192,10 +193,9 @@ static int MPID_nem_llc_vc_prnt(MPIDI_VC_t * vc)
{
int mpi_errno = MPI_SUCCESS;
- /* MPIU_OBJECT_HEADER; */
- /* src/include/mpihandlemem.h */
+ /* MPIR_OBJECT_HEADER; */
+ /* src/include/mpir_objects.h */
/* int handle; */
- /* MPIU_Handle_ref_count ref_count; */
/* MPIDI_VC_State_t state; */
/* struct MPIDI_PG *pg; */
/* int pg_rank; */
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/.state-cache b/src/mpid/ch3/channels/nemesis/netmod/mxm/.state-cache
index 6e14f58..b953799 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/.state-cache
@@ -1,14 +1,16 @@
<dir>
-<file name="mxm_finalize.c" info="1447123141"/>
-<file name="mxm_init.c" info="1447123141"/>
-<file name="mxm_poll.c" info="1447123141"/>
-<file name="mxm_impl.h" info="1447123141"/>
-<file name="mxm_probe.c" info="1447123141"/>
-<file name="mxm_cancel.c" info="1447123141"/>
-<file name="mxm_send.c" info="1447123141"/>
+<file name="mxm_impl.h" info="1478973152"/>
+<file name="mxm_cancel.c" info="1478973152"/>
+<file name="mxm_init.c" info="1478973152"/>
+<file name="mxm_send.c" info="1478973152"/>
+<file name="mxm_poll.c" info="1478973152"/>
+<file name="mxm_probe.c" info="1478973152"/>
+<file name="mxm_finalize.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mxm_finalize.c">
+<fileinfo name="mxm_impl.h">
+</fileinfo>
+<fileinfo name="mxm_cancel.c">
</fileinfo>
<fileinfo name="mxm_init.c">
MPID_STATE_MXM_INIT MPID_nem_mxm_init
@@ -19,28 +21,26 @@ MPID_STATE_MXM_VC_INIT MPID_nem_mxm_vc_init
MPID_STATE_MXM_VC_DESTROY MPID_nem_mxm_vc_destroy
MPID_STATE_MXM_VC_TERMINATE MPID_nem_mxm_vc_terminate
</fileinfo>
+<fileinfo name="mxm_send.c">
+MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG MPID_nem_mxm_iSendContig
+MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG MPID_nem_mxm_iStartContigMsg
+MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG MPID_nem_mxm_SendNoncontig
+MPID_STATE_MPID_NEM_MXM_SEND MPID_nem_mxm_send
+MPID_STATE_MPID_NEM_MXM_SSEND MPID_nem_mxm_ssend
+MPID_STATE_MPID_NEM_MXM_ISEND MPID_nem_mxm_isend
+MPID_STATE_MPID_NEM_MXM_ISSEND MPID_nem_mxm_issend
+</fileinfo>
<fileinfo name="mxm_poll.c">
MPID_STATE_MXM_POLL MPID_nem_mxm_poll
MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED MPID_nem_mxm_anysource_posted
MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED MPID_nem_mxm_anysource_matched
MPID_STATE_MPID_NEM_MXM_RECV MPID_nem_mxm_recv
</fileinfo>
-<fileinfo name="mxm_impl.h">
-</fileinfo>
<fileinfo name="mxm_probe.c">
MPID_STATE_MXM_PROBE MPID_nem_mxm_probe
MPID_STATE_MXM_IPROBE MPID_nem_mxm_iprobe
MPID_STATE_MXM_IMPROBE MPID_nem_mxm_improbe
</fileinfo>
-<fileinfo name="mxm_cancel.c">
-</fileinfo>
-<fileinfo name="mxm_send.c">
-MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG MPID_nem_mxm_iSendContig
-MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG MPID_nem_mxm_iStartContigMsg
-MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG MPID_nem_mxm_SendNoncontig
-MPID_STATE_MPID_NEM_MXM_SEND MPID_nem_mxm_send
-MPID_STATE_MPID_NEM_MXM_SSEND MPID_nem_mxm_ssend
-MPID_STATE_MPID_NEM_MXM_ISEND MPID_nem_mxm_isend
-MPID_STATE_MPID_NEM_MXM_ISSEND MPID_nem_mxm_issend
+<fileinfo name="mxm_finalize.c">
</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
index c6b1e97..74b7a9a 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_cancel.c
@@ -1,5 +1,9 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portion of this code were written by Mellanox Technologies, Inc.
* (C) 2014 Mellanox Technologies, Inc.
*
*/
@@ -13,7 +17,7 @@
#define FUNCNAME MPID_nem_mxm_cancel_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_cancel_send(MPIDI_VC_t * vc, MPID_Request * req)
+int MPID_nem_mxm_cancel_send(MPIDI_VC_t * vc, MPIR_Request * req)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
@@ -48,7 +52,7 @@ int MPID_nem_mxm_cancel_send(MPIDI_VC_t * vc, MPID_Request * req)
#define FUNCNAME MPID_nem_mxm_cancel_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_cancel_recv(MPIDI_VC_t * vc, MPID_Request * req)
+int MPID_nem_mxm_cancel_recv(MPIDI_VC_t * vc, MPIR_Request * req)
{
int mpi_errno ATTRIBUTE((unused)) = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
index e2c3f02..2d0a059 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_finalize.c
@@ -1,5 +1,9 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portion of this code were written by Mellanox Technologies, Inc.
* (C) 2014 Mellanox Technologies, Inc.
*
*/
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
index b717382..f941a8c 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
@@ -1,5 +1,9 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portion of this code were written by Mellanox Technologies, Inc.
* (C) 2014 Mellanox Technologies, Inc.
*
*/
@@ -29,40 +33,40 @@ int MPID_nem_mxm_vc_terminate(MPIDI_VC_t * vc);
int MPID_nem_mxm_get_ordering(int *ordering);
/* alternate interface */
-int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz);
-int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
- MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr);
-int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *header,
- MPIDI_msg_sz_t hdr_sz);
+int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz);
+int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, intptr_t hdr_sz, void *data,
+ intptr_t data_sz, MPIR_Request ** sreq_ptr);
+int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *header,
+ intptr_t hdr_sz);
/* direct interface */
-int MPID_nem_mxm_recv(MPIDI_VC_t * vc, MPID_Request * rreq);
+int MPID_nem_mxm_recv(MPIDI_VC_t * vc, MPIR_Request * rreq);
int MPID_nem_mxm_send(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_p);
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_p);
int MPID_nem_mxm_ssend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_p);
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_p);
int MPID_nem_mxm_isend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_p);
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_p);
int MPID_nem_mxm_issend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_p);
-int MPID_nem_mxm_cancel_send(MPIDI_VC_t * vc, MPID_Request * sreq);
-int MPID_nem_mxm_cancel_recv(MPIDI_VC_t * vc, MPID_Request * rreq);
-int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_p);
+int MPID_nem_mxm_cancel_send(MPIDI_VC_t * vc, MPIR_Request * sreq);
+int MPID_nem_mxm_cancel_recv(MPIDI_VC_t * vc, MPIR_Request * rreq);
+int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
MPI_Status * status);
-int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
int *flag, MPI_Status * status);
-int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
- int *flag, MPID_Request ** message, MPI_Status * status);
+int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status);
-int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+int MPID_nem_mxm_anysource_iprobe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
MPI_Status * status);
-int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag,
- MPID_Request ** message, MPI_Status * status);
+int MPID_nem_mxm_anysource_improbe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
+ MPIR_Request ** message, MPI_Status * status);
/* active message callback */
#define MXM_MPICH_HID_ADI_MSG 1
@@ -70,10 +74,10 @@ void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
size_t length, size_t offset, int last);
/* any source management */
-void MPID_nem_mxm_anysource_posted(MPID_Request * req);
-int MPID_nem_mxm_anysource_matched(MPID_Request * req);
+void MPID_nem_mxm_anysource_posted(MPIR_Request * req);
+int MPID_nem_mxm_anysource_matched(MPIR_Request * req);
-int _mxm_handle_sreq(MPID_Request * req);
+int _mxm_handle_sreq(MPIR_Request * req);
/* List type as queue
* Operations, initialization etc
@@ -170,7 +174,7 @@ typedef struct {
} MPID_nem_mxm_req_t;
typedef struct {
- MPID_Request *ctx;
+ MPIR_Request *ctx;
MPID_nem_mxm_req_t *mxm_req;
mxm_req_buffer_t *iov_buf;
int iov_count;
@@ -180,23 +184,23 @@ typedef struct {
/* macro for mxm private in REQ */
#define REQ_BASE(reqp) ((reqp) ? (MPID_nem_mxm_req_area *)((reqp)->ch.netmod_area.padding) : NULL)
-typedef GENERIC_Q_DECL(struct MPID_Request) MPID_nem_mxm_reqq_t;
+typedef GENERIC_Q_DECL(struct MPIR_Request) MPID_nem_mxm_reqq_t;
#define MPID_nem_mxm_queue_empty(q) GENERIC_Q_EMPTY (q)
#define MPID_nem_mxm_queue_head(q) GENERIC_Q_HEAD (q)
#define MPID_nem_mxm_queue_enqueue(qp, ep) do { \
/* add refcount so req doesn't get freed before it's dequeued */ \
MPIR_Request_add_ref(ep); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, \
"MPID_nem_mxm_queue_enqueue req=%p (handle=%#x), queue=%p", \
ep, (ep)->handle, qp)); \
GENERIC_Q_ENQUEUE (qp, ep, dev.next); \
} while (0)
#define MPID_nem_mxm_queue_dequeue(qp, ep) do { \
GENERIC_Q_DEQUEUE (qp, ep, dev.next); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, \
"MPID_nem_mxm_queue_dequeuereq=%p (handle=%#x), queue=%p", \
*(ep), *(ep) ? (*(ep))->handle : -1, qp)); \
- MPID_Request_release(*(ep)); \
+ MPIR_Request_free(*(ep)); \
} while (0)
typedef struct MPID_nem_mxm_module_t {
@@ -222,16 +226,15 @@ typedef struct MPID_nem_mxm_module_t {
extern MPID_nem_mxm_module_t *mxm_obj;
-#define container_of(ptr, type, member) (type *)((char *)(ptr) - offsetof(type,member))
#define list_dequeue_mxm_req(head) \
- container_of(list_dequeue(head), MPID_nem_mxm_req_t, queue)
+ MPL_container_of(list_dequeue(head), MPID_nem_mxm_req_t, queue)
static inline void list_grow_mxm_req(list_head_t * list_head)
{
MPID_nem_mxm_req_t *mxm_req = NULL;
int count = MXM_MPICH_MAX_REQ;
while (count--) {
- mxm_req = (MPID_nem_mxm_req_t *) MPIU_Malloc(sizeof(MPID_nem_mxm_req_t));
+ mxm_req = (MPID_nem_mxm_req_t *) MPL_malloc(sizeof(MPID_nem_mxm_req_t));
list_enqueue(list_head, &mxm_req->queue);
}
}
@@ -276,7 +279,7 @@ static inline void _mxm_progress_cb(void *user_data)
int mpi_errno = MPI_SUCCESS;
mpi_errno = MPIDI_CH3_Progress_poke();
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
}
static inline void _mxm_req_wait(mxm_req_base_t * req)
@@ -299,7 +302,7 @@ static inline int _mxm_eager_threshold(void)
/*
* Tag management section
*/
-static inline mxm_tag_t _mxm_tag_mpi2mxm(int mpi_tag, MPIU_Context_id_t context_id)
+static inline mxm_tag_t _mxm_tag_mpi2mxm(int mpi_tag, MPIR_Context_id_t context_id)
{
mxm_tag_t mxm_tag;
@@ -372,7 +375,7 @@ static inline void _dbg_mxm_hexdump(void *ptr, int buflen)
return;
len = 80 * (buflen / 16 + 1);
- str = (char *) MPIU_Malloc(len);
+ str = (char *) MPL_malloc(len);
for (i = 0; i < buflen; i += 16) {
cur_len += MPL_snprintf(str + cur_len, len - cur_len, "%06x: ", i);
for (j = 0; j < 16; j++)
@@ -389,13 +392,13 @@ static inline void _dbg_mxm_hexdump(void *ptr, int buflen)
cur_len += MPL_snprintf(str + cur_len, len - cur_len, "\n");
}
_dbg_mxm_out(8, NULL, 1, NULL, NULL, -1, "%s", str);
- MPIU_Free(str);
+ MPL_free(str);
}
static inline char *_tag_val_to_str(int tag, char *out, int max)
{
if (tag == MPI_ANY_TAG) {
- MPIU_Strncpy(out, "MPI_ANY_TAG", max);
+ MPL_strncpy(out, "MPI_ANY_TAG", max);
}
else {
MPL_snprintf(out, max, "%d", tag);
@@ -406,7 +409,7 @@ static inline char *_tag_val_to_str(int tag, char *out, int max)
static inline char *_rank_val_to_str(int rank, char *out, int max)
{
if (rank == MPI_ANY_SOURCE) {
- MPIU_Strncpy(out, "MPI_ANY_SOURCE", max);
+ MPL_strncpy(out, "MPI_ANY_SOURCE", max);
}
else {
MPL_snprintf(out, max, "%d", rank);
@@ -414,7 +417,7 @@ static inline char *_rank_val_to_str(int rank, char *out, int max)
return out;
}
-static inline void _dbg_mxm_req(MPID_Request * req)
+static inline void _dbg_mxm_req(MPIR_Request * req)
{
char tag_buf[128];
char rank_buf[128];
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
index 1e98488..ba382ed 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_init.c
@@ -1,5 +1,9 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portion of this code were written by Mellanox Technologies, Inc.
* (C) 2014 Mellanox Technologies, Inc.
*
*/
@@ -96,7 +100,8 @@ static MPIDI_Comm_ops_t comm_ops = {
MPID_nem_mxm_probe, /* probe */
MPID_nem_mxm_iprobe, /* iprobe */
- MPID_nem_mxm_improbe /* improbe */
+ MPID_nem_mxm_improbe, /* improbe */
+ NULL /* imrecv */
};
@@ -109,8 +114,8 @@ static int _mxm_post_init(void);
static int _mxm_connect(MPID_nem_mxm_ep_t * ep, const char *business_card,
MPID_nem_mxm_vc_area * vc_area);
static int _mxm_disconnect(MPID_nem_mxm_ep_t * ep);
-static int _mxm_add_comm(MPID_Comm * comm, void *param);
-static int _mxm_del_comm(MPID_Comm * comm, void *param);
+static int _mxm_add_comm(MPIR_Comm * comm, void *param);
+static int _mxm_del_comm(MPIR_Comm * comm, void *param);
static int _mxm_conf(void);
@@ -123,12 +128,12 @@ int MPID_nem_mxm_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
int r;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_INIT);
/* first make sure that our private fields in the vc and req fit into the area provided */
- MPIU_Assert(sizeof(MPID_nem_mxm_vc_area) <= MPIDI_NEM_VC_NETMOD_AREA_LEN);
- MPIU_Assert(sizeof(MPID_nem_mxm_req_area) <= MPIDI_NEM_REQ_NETMOD_AREA_LEN);
+ MPIR_Assert(sizeof(MPID_nem_mxm_vc_area) <= MPIDI_NEM_VC_NETMOD_AREA_LEN);
+ MPIR_Assert(sizeof(MPID_nem_mxm_req_area) <= MPIDI_NEM_REQ_NETMOD_AREA_LEN);
/* mpich-specific initialization of mxm */
@@ -182,7 +187,7 @@ int MPID_nem_mxm_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
MPIDI_Anysource_improbe_fn = MPID_nem_mxm_anysource_improbe;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -196,8 +201,8 @@ int MPID_nem_mxm_finalize(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_FINALIZE);
_mxm_barrier();
@@ -206,7 +211,7 @@ int MPID_nem_mxm_finalize(void)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -219,20 +224,20 @@ int MPID_nem_mxm_finalize(void)
int MPID_nem_mxm_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p)
{
int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
+ int str_errno = MPL_STR_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_GET_BUSINESS_CARD);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_GET_BUSINESS_CARD);
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, MXM_MPICH_ENDPOINT_KEY,
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, MXM_MPICH_ENDPOINT_KEY,
_mxm_obj.mxm_ep_addr, _mxm_obj.mxm_ep_addr_size);
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_GET_BUSINESS_CARD);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -246,13 +251,13 @@ int MPID_nem_mxm_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_CONNECT_TO_ROOT);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_CONNECT_TO_ROOT);
MPIR_ERR_SETFATAL(mpi_errno, MPI_ERR_OTHER, "**notimpl");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_CONNECT_TO_ROOT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -268,13 +273,13 @@ int MPID_nem_mxm_vc_init(MPIDI_VC_t * vc)
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPID_nem_mxm_vc_area *vc_area = VC_BASE(vc);
- MPIDI_STATE_DECL(MPID_STATE_MXM_VC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_VC_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_VC_INIT);
/* local connection is used for any source communication */
- MPIU_Assert(MPID_nem_mem_region.rank != vc->lpid);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
- (MPIU_DBG_FDEST,
+ MPIR_Assert(MPID_nem_mem_region.rank != vc->lpid);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
+ (MPL_DBG_FDEST,
"[%i]=== connecting to %i \n", MPID_nem_mem_region.rank, vc->lpid));
{
char *business_card;
@@ -287,7 +292,7 @@ int MPID_nem_mxm_vc_init(MPIDI_VC_t * vc)
MPIR_ERR_POP(mpi_errno);
#endif
- business_card = (char *) MPIU_Malloc(val_max_sz);
+ business_card = (char *) MPL_malloc(val_max_sz);
mpi_errno = vc->pg->getConnInfo(vc->pg_rank, business_card, val_max_sz, vc->pg);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -298,7 +303,7 @@ int MPID_nem_mxm_vc_init(MPIDI_VC_t * vc)
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPIU_Free(business_card);
+ MPL_free(business_card);
}
MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
@@ -318,7 +323,7 @@ int MPID_nem_mxm_vc_init(MPIDI_VC_t * vc)
vc_ch->iSendContig = MPID_nem_mxm_iSendContig;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_VC_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -332,8 +337,8 @@ int MPID_nem_mxm_vc_destroy(MPIDI_VC_t * vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MXM_VC_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_VC_DESTROY);
/* Do nothing because
* finalize is called before vc destroy as result it is not possible
@@ -349,7 +354,7 @@ int MPID_nem_mxm_vc_destroy(MPIDI_VC_t * vc)
#endif
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_VC_DESTROY);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -364,8 +369,8 @@ int MPID_nem_mxm_vc_terminate(MPIDI_VC_t * vc)
int mpi_errno = MPI_SUCCESS;
MPID_nem_mxm_vc_area *vc_area = VC_BASE(vc);
- MPIDI_STATE_DECL(MPID_STATE_MXM_VC_TERMINATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_VC_TERMINATE);
if (vc->state != MPIDI_VC_STATE_CLOSED) {
/* VC is terminated as a result of a fault. Complete
@@ -383,7 +388,7 @@ int MPID_nem_mxm_vc_terminate(MPIDI_VC_t * vc)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_VC_TERMINATE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -406,8 +411,8 @@ static int _mxm_conf(void)
cur_ver = mxm_get_version();
if (cur_ver != MXM_API) {
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
- (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
+ (MPL_DBG_FDEST,
"WARNING: MPICH was compiled with MXM version %d.%d but version %ld.%ld detected.",
MXM_VERNO_MAJOR,
MXM_VERNO_MINOR,
@@ -416,9 +421,9 @@ static int _mxm_conf(void)
_mxm_obj.compiletime_version = MXM_VERNO_STRING;
#if MXM_API >= MXM_VERSION(3,0)
- _mxm_obj.runtime_version = MPIU_Strdup(mxm_get_version_string());
+ _mxm_obj.runtime_version = MPL_strdup(mxm_get_version_string());
#else
- _mxm_obj.runtime_version = MPIU_Malloc(sizeof(MXM_VERNO_STRING) + 10);
+ _mxm_obj.runtime_version = MPL_malloc(sizeof(MXM_VERNO_STRING) + 10);
snprintf(_mxm_obj.runtime_version, (sizeof(MXM_VERNO_STRING) + 9),
"%ld.%ld", (cur_ver >> MXM_MAJOR_BIT) & 0xff, (cur_ver >> MXM_MINOR_BIT) & 0xff);
#endif
@@ -432,8 +437,8 @@ static int _mxm_conf(void)
(_mxm_obj.conf.bulk_connect || _mxm_obj.conf.bulk_disconnect)) {
_mxm_obj.conf.bulk_connect = 0;
_mxm_obj.conf.bulk_disconnect = 0;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE,
- (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE,
+ (MPL_DBG_FDEST,
"WARNING: MPICH runs with %s version of MXM that is less than 3.2, "
"so bulk connect/disconnect cannot work properly and will be turn off.",
_mxm_obj.runtime_version));
@@ -488,12 +493,12 @@ static int _mxm_init(int rank, int size)
_mxm_obj.mxm_rank = rank;
_mxm_obj.mxm_np = size;
_mxm_obj.endpoint =
- (MPID_nem_mxm_ep_t *) MPIU_Malloc(_mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
+ (MPID_nem_mxm_ep_t *) MPL_malloc(_mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
memset(_mxm_obj.endpoint, 0, _mxm_obj.mxm_np * sizeof(MPID_nem_mxm_ep_t));
list_init(&_mxm_obj.free_queue);
list_grow_mxm_req(&_mxm_obj.free_queue);
- MPIU_Assert(list_length(&_mxm_obj.free_queue) == MXM_MPICH_MAX_REQ);
+ MPIR_Assert(list_length(&_mxm_obj.free_queue) == MXM_MPICH_MAX_REQ);
_mxm_obj.sreq_queue.head = _mxm_obj.sreq_queue.tail = NULL;
@@ -512,7 +517,7 @@ static int _mxm_fini(void)
if (_mxm_obj.mxm_context) {
while (!list_is_empty(&_mxm_obj.free_queue)) {
- MPIU_Free(list_dequeue(&_mxm_obj.free_queue));
+ MPL_free(list_dequeue(&_mxm_obj.free_queue));
}
#if MXM_API >= MXM_VERSION(3,1)
@@ -526,7 +531,7 @@ static int _mxm_fini(void)
}
if (_mxm_obj.endpoint)
- MPIU_Free(_mxm_obj.endpoint);
+ MPL_free(_mxm_obj.endpoint);
_mxm_barrier();
@@ -542,7 +547,7 @@ static int _mxm_fini(void)
mxm_config_free_ep_opts(_mxm_obj.mxm_ep_opts);
mxm_config_free_context_opts(_mxm_obj.mxm_ctx_opts);
- MPIU_Free(_mxm_obj.runtime_version);
+ MPL_free(_mxm_obj.runtime_version);
}
fn_exit:
@@ -574,13 +579,13 @@ static int _mxm_connect(MPID_nem_mxm_ep_t * ep, const char *business_card,
MPID_nem_mxm_vc_area * vc_area)
{
int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
+ int str_errno = MPL_STR_SUCCESS;
mxm_error_t ret = MXM_OK;
char mxm_ep_addr[MXM_MPICH_MAX_ADDR_SIZE];
int len = 0;
str_errno =
- MPIU_Str_get_binary_arg(business_card, MXM_MPICH_ENDPOINT_KEY, mxm_ep_addr,
+ MPL_str_get_binary_arg(business_card, MXM_MPICH_ENDPOINT_KEY, mxm_ep_addr,
sizeof(mxm_ep_addr), &len);
MPIR_ERR_CHKANDJUMP(str_errno, mpi_errno, MPI_ERR_OTHER, "**buscard");
@@ -593,7 +598,7 @@ static int _mxm_connect(MPID_nem_mxm_ep_t * ep, const char *business_card,
list_init(&ep->free_queue);
list_grow_mxm_req(&ep->free_queue);
- MPIU_Assert(list_length(&ep->free_queue) == MXM_MPICH_MAX_REQ);
+ MPIR_Assert(list_length(&ep->free_queue) == MXM_MPICH_MAX_REQ);
fn_exit:
return mpi_errno;
@@ -606,7 +611,7 @@ static int _mxm_disconnect(MPID_nem_mxm_ep_t * ep)
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
- MPIU_Assert(ep);
+ MPIR_Assert(ep);
if (ep->mxm_conn) {
ret = mxm_ep_disconnect(ep->mxm_conn);
@@ -616,7 +621,7 @@ static int _mxm_disconnect(MPID_nem_mxm_ep_t * ep)
"**mxm_ep_disconnect %s", mxm_error_string(ret));
while (!list_is_empty(&ep->free_queue)) {
- MPIU_Free(list_dequeue(&ep->free_queue));
+ MPL_free(list_dequeue(&ep->free_queue));
}
}
@@ -626,14 +631,14 @@ static int _mxm_disconnect(MPID_nem_mxm_ep_t * ep)
goto fn_exit;
}
-static int _mxm_add_comm(MPID_Comm * comm, void *param)
+static int _mxm_add_comm(MPIR_Comm * comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t ret = MXM_OK;
mxm_mq_h *mq_h_v;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
- MPIU_CHKPMEM_MALLOC(mq_h_v, mxm_mq_h *, sizeof(mxm_mq_h) * 2, mpi_errno,
+ MPIR_CHKPMEM_MALLOC(mq_h_v, mxm_mq_h *, sizeof(mxm_mq_h) * 2, mpi_errno,
"mxm_mq_h_context_ptr");
_dbg_mxm_output(6, "Add COMM comm %p (rank %d type %d context %d | %d size %d | %d) \n",
@@ -657,14 +662,14 @@ static int _mxm_add_comm(MPID_Comm * comm, void *param)
comm->dev.ch.netmod_priv = (void *) mq_h_v;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
-static int _mxm_del_comm(MPID_Comm * comm, void *param)
+static int _mxm_del_comm(MPIR_Comm * comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
mxm_mq_h *mxm_mq = (mxm_mq_h *) comm->dev.ch.netmod_priv;
@@ -676,7 +681,7 @@ static int _mxm_del_comm(MPID_Comm * comm, void *param)
if (mxm_mq[0])
mxm_mq_destroy(mxm_mq[0]);
- MPIU_Free(mxm_mq);
+ MPL_free(mxm_mq);
comm->dev.ch.netmod_priv = NULL;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
index 2c896e7..60bddea 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_poll.c
@@ -1,5 +1,9 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portion of this code were written by Mellanox Technologies, Inc.
* (C) 2014 Mellanox Technologies, Inc.
*
*/
@@ -9,12 +13,12 @@
#include "mxm_impl.h"
static int _mxm_poll(void);
-static int _mxm_handle_rreq(MPID_Request * req);
+static int _mxm_handle_rreq(MPIR_Request * req);
static void _mxm_recv_completion_cb(void *context);
static int _mxm_irecv(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req, int id, mxm_mq_h mxm_mq,
mxm_tag_t mxm_tag);
-static int _mxm_process_rdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
- MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+static int _mxm_process_rdtype(MPIR_Request ** rreq_p, MPI_Datatype datatype,
+ MPIDU_Datatype* dt_ptr, intptr_t data_sz, const void *buf,
int count, mxm_req_buffer_t ** iov_buf, int *iov_count);
#undef FUNCNAME
@@ -24,10 +28,10 @@ static int _mxm_process_rdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
int MPID_nem_mxm_poll(int in_blocking_progress)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MXM_POLL);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_POLL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_POLL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_POLL);
while (!MPID_nem_mxm_queue_empty(mxm_obj->sreq_queue)) {
MPID_nem_mxm_queue_dequeue(&mxm_obj->sreq_queue, &req);
@@ -39,7 +43,7 @@ int MPID_nem_mxm_poll(int in_blocking_progress)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_POLL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_POLL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -73,14 +77,14 @@ void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
{
MPIDI_VC_t *vc = NULL;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "MPID_nem_mxm_get_adi_msg");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "MPID_nem_mxm_get_adi_msg");
vc = mxm_conn_ctx_get(conn);
_dbg_mxm_output(5, "========> Getting ADI msg (from=%d data_size %d) \n", vc->pg_rank, length);
_dbg_mxm_out_buf(data, (length > 16 ? 16 : length));
- MPID_nem_handle_pkt(vc, data, (MPIDI_msg_sz_t) (length));
+ MPID_nem_handle_pkt(vc, data, (intptr_t) (length));
}
@@ -88,21 +92,21 @@ void MPID_nem_mxm_get_adi_msg(mxm_conn_h conn, mxm_imm_t imm, void *data,
#define FUNCNAME MPID_nem_mxm_anysource_posted
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPID_nem_mxm_anysource_posted(MPID_Request * req)
+void MPID_nem_mxm_anysource_posted(MPIR_Request * req)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
_dbg_mxm_output(5, "Any Source ========> Posting req %p \n", req);
mpi_errno = MPID_nem_mxm_recv(NULL, req);
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
_dbg_mxm_out_req(req);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_POSTED);
}
@@ -110,7 +114,7 @@ void MPID_nem_mxm_anysource_posted(MPID_Request * req)
#define FUNCNAME MPID_nem_mxm_anysource_matched
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_anysource_matched(MPID_Request * req)
+int MPID_nem_mxm_anysource_matched(MPIR_Request * req)
{
mxm_error_t ret = MXM_OK;
MPID_nem_mxm_req_area *req_area = NULL;
@@ -125,8 +129,8 @@ int MPID_nem_mxm_anysource_matched(MPID_Request * req)
* with a network capable of matching, and the same request is matched
* by the network and, e.g., shared-memory.
*/
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
_dbg_mxm_output(5, "Any Source ========> Matching req %p \n", req);
@@ -139,7 +143,7 @@ int MPID_nem_mxm_anysource_matched(MPID_Request * req)
_dbg_mxm_out_req(req);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_ANYSOURCE_MATCHED);
return matched;
}
@@ -148,26 +152,26 @@ int MPID_nem_mxm_anysource_matched(MPID_Request * req)
#define FUNCNAME MPID_nem_mxm_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_recv(MPIDI_VC_t * vc, MPID_Request * rreq)
+int MPID_nem_mxm_recv(MPIDI_VC_t * vc, MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype *dt_ptr;
+ MPIDU_Datatype*dt_ptr;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_RECV);
- MPIU_Assert(rreq);
- MPIU_Assert(((rreq->dev.match.parts.rank == MPI_ANY_SOURCE) && (vc == NULL)) ||
+ MPIR_Assert(rreq);
+ MPIR_Assert(((rreq->dev.match.parts.rank == MPI_ANY_SOURCE) && (vc == NULL)) ||
(vc && !vc->ch.is_local));
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz,
dt_ptr, dt_true_lb);
{
- MPIU_Context_id_t context_id = rreq->dev.match.parts.context_id;
+ MPIR_Context_id_t context_id = rreq->dev.match.parts.context_id;
int tag = rreq->dev.match.parts.tag;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
@@ -217,21 +221,21 @@ int MPID_nem_mxm_recv(MPIDI_VC_t * vc, MPID_Request * rreq)
_dbg_mxm_out_req(rreq);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_RECV);
return mpi_errno;
fn_fail:ATTRIBUTE((unused))
goto fn_exit;
}
-static int _mxm_handle_rreq(MPID_Request * req)
+static int _mxm_handle_rreq(MPIR_Request * req)
{
int complete = FALSE, found = FALSE;
int dt_contig;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPIDI_msg_sz_t userbuf_sz;
- MPID_Datatype *dt_ptr;
- MPIDI_msg_sz_t data_sz;
+ intptr_t userbuf_sz;
+ MPIDU_Datatype*dt_ptr;
+ intptr_t data_sz;
MPID_nem_mxm_vc_area *vc_area ATTRIBUTE((unused)) = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
void *tmp_buf = NULL;
@@ -242,7 +246,7 @@ static int _mxm_handle_rreq(MPID_Request * req)
/* an MPI_ANY_SOURCE request may have been previously removed from the
* CH3 queue by an FDP (find and dequeue posted) operation */
if (req->dev.match.parts.rank != MPI_ANY_SOURCE) {
- MPIU_Assert(found);
+ MPIR_Assert(found);
}
MPIDI_Datatype_get_info(req->dev.user_count, req->dev.datatype, dt_contig, userbuf_sz, dt_ptr,
@@ -269,10 +273,10 @@ static int _mxm_handle_rreq(MPID_Request * req)
else {
data_sz = userbuf_sz;
MPIR_STATUS_SET_COUNT(req->status, userbuf_sz);
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE, (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE, (MPL_DBG_FDEST,
"receive buffer too small; message truncated, msg_sz="
- MPIDI_MSG_SZ_FMT ", userbuf_sz="
- MPIDI_MSG_SZ_FMT, req->dev.recv_data_sz, userbuf_sz));
+ PRIdPTR ", userbuf_sz="
+ PRIdPTR, req->dev.recv_data_sz, userbuf_sz));
req->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
MPI_ERR_TRUNCATE, "**truncate",
@@ -282,11 +286,11 @@ static int _mxm_handle_rreq(MPID_Request * req)
}
if (!dt_contig) {
- MPIDI_msg_sz_t last = 0;
+ intptr_t last = 0;
if (req->dev.tmpbuf != NULL) {
last = req->dev.recv_data_sz;
- MPID_Segment_unpack(req->dev.segment_ptr, 0, &last, req->dev.tmpbuf);
+ MPIDU_Segment_unpack(req->dev.segment_ptr, 0, &last, req->dev.tmpbuf);
tmp_buf = req->dev.tmpbuf;
}
else {
@@ -299,17 +303,17 @@ static int _mxm_handle_rreq(MPID_Request * req)
n_iov = req_area->iov_count;
iov_buf = req_area->iov_buf;
if (last && n_iov > 0) {
- iov = MPIU_Malloc(n_iov * sizeof(*iov));
- MPIU_Assert(iov);
+ iov = MPL_malloc(n_iov * sizeof(*iov));
+ MPIR_Assert(iov);
for (index = 0; index < n_iov; index++) {
iov[index].MPL_IOV_BUF = iov_buf[index].ptr;
iov[index].MPL_IOV_LEN = iov_buf[index].length;
}
- MPID_Segment_unpack_vector(req->dev.segment_ptr, req->dev.segment_first, &last, iov,
+ MPIDU_Segment_unpack_vector(req->dev.segment_ptr, req->dev.segment_first, &last, iov,
&n_iov);
- MPIU_Free(iov);
+ MPL_free(iov);
}
if (req_area->iov_count > MXM_MPICH_MAX_IOV) {
tmp_buf = req_area->iov_buf;
@@ -330,10 +334,10 @@ static int _mxm_handle_rreq(MPID_Request * req)
}
MPIDI_CH3U_Handle_recv_req(req->ch.vc, req, &complete);
- MPIU_Assert(complete == TRUE);
+ MPIR_Assert(complete == TRUE);
if (tmp_buf)
- MPIU_Free(tmp_buf);
+ MPL_free(tmp_buf);
return complete;
}
@@ -341,11 +345,11 @@ static int _mxm_handle_rreq(MPID_Request * req)
static void _mxm_recv_completion_cb(void *context)
{
- MPID_Request *req = (MPID_Request *) context;
+ MPIR_Request *req = (MPIR_Request *) context;
mxm_recv_req_t *mxm_rreq;
MPID_nem_mxm_req_area *req_area = NULL;
- MPIU_Assert(req);
+ MPIR_Assert(req);
_dbg_mxm_out_req(req);
req_area = REQ_BASE(req);
@@ -383,7 +387,7 @@ static int _mxm_irecv(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req, int i
mxm_recv_req_t *mxm_rreq;
list_head_t *free_queue = NULL;
- MPIU_Assert(req);
+ MPIR_Assert(req);
free_queue = (ep ? &ep->free_queue : &mxm_obj->free_queue);
req->mxm_req = list_dequeue_mxm_req(free_queue);
@@ -391,7 +395,7 @@ static int _mxm_irecv(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req, int i
list_grow_mxm_req(free_queue);
req->mxm_req = list_dequeue_mxm_req(free_queue);
if (!req->mxm_req) {
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "empty free queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "empty free queue");
mpi_errno = MPI_ERR_OTHER;
goto fn_fail;
}
@@ -432,36 +436,36 @@ static int _mxm_irecv(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req, int i
}
-static int _mxm_process_rdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
- MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+static int _mxm_process_rdtype(MPIR_Request ** rreq_p, MPI_Datatype datatype,
+ MPIDU_Datatype* dt_ptr, intptr_t data_sz, const void *buf,
int count, mxm_req_buffer_t ** iov_buf, int *iov_count)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *rreq = *rreq_p;
- MPIDI_msg_sz_t last;
+ MPIR_Request *rreq = *rreq_p;
+ intptr_t last;
MPL_IOV *iov;
int n_iov = 0;
int index;
if (rreq->dev.segment_ptr == NULL) {
- rreq->dev.segment_ptr = MPID_Segment_alloc();
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
+ "**nomem %s", "MPIDU_Segment_alloc");
}
- MPID_Segment_init(buf, count, datatype, rreq->dev.segment_ptr, 0);
+ MPIDU_Segment_init(buf, count, datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
last = rreq->dev.segment_size;
- MPID_Segment_count_contig_blocks(rreq->dev.segment_ptr, rreq->dev.segment_first, &last,
+ MPIDU_Segment_count_contig_blocks(rreq->dev.segment_ptr, rreq->dev.segment_first, &last,
(MPI_Aint *) & n_iov);
- MPIU_Assert(n_iov > 0);
- iov = MPIU_Malloc(n_iov * sizeof(*iov));
- MPIU_Assert(iov);
+ MPIR_Assert(n_iov > 0);
+ iov = MPL_malloc(n_iov * sizeof(*iov));
+ MPIR_Assert(iov);
last = rreq->dev.segment_size;
- MPID_Segment_unpack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, iov, &n_iov);
- MPIU_Assert(last == rreq->dev.segment_size);
+ MPIDU_Segment_unpack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, iov, &n_iov);
+ MPIR_Assert(last == rreq->dev.segment_size);
#if defined(MXM_DEBUG) && (MXM_DEBUG > 0)
_dbg_mxm_output(7, "Recv Noncontiguous data vector %i entries (free slots : %i)\n", n_iov,
@@ -474,8 +478,8 @@ static int _mxm_process_rdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
if (n_iov <= MXM_REQ_DATA_MAX_IOV) {
if (n_iov > MXM_MPICH_MAX_IOV) {
- *iov_buf = (mxm_req_buffer_t *) MPIU_Malloc(n_iov * sizeof(**iov_buf));
- MPIU_Assert(*iov_buf);
+ *iov_buf = (mxm_req_buffer_t *) MPL_malloc(n_iov * sizeof(**iov_buf));
+ MPIR_Assert(*iov_buf);
}
for (index = 0; index < n_iov; index++) {
@@ -489,14 +493,14 @@ static int _mxm_process_rdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
else {
MPI_Aint packsize = 0;
MPIR_Pack_size_impl(rreq->dev.user_count, rreq->dev.datatype, &packsize);
- rreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
- MPIU_Assert(rreq->dev.tmpbuf);
+ rreq->dev.tmpbuf = MPL_malloc((size_t) packsize);
+ MPIR_Assert(rreq->dev.tmpbuf);
rreq->dev.tmpbuf_sz = packsize;
(*iov_buf)[0].ptr = rreq->dev.tmpbuf;
(*iov_buf)[0].length = (size_t) packsize;
*iov_count = 1;
}
- MPIU_Free(iov);
+ MPL_free(iov);
fn_exit:
return mpi_errno;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
index 0151b9c..27d2a2f 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_probe.c
@@ -1,5 +1,9 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portion of this code were written by Mellanox Technologies, Inc.
* (C) 2014 Mellanox Technologies, Inc.
*
*/
@@ -13,7 +17,7 @@
#define FUNCNAME MPID_nem_mxm_probe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
@@ -22,8 +26,8 @@ int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, i
mxm_mq_h *mq_h_v = (mxm_mq_h *) comm->dev.ch.netmod_priv;
MPID_nem_mxm_vc_area *vc_area = (vc ? VC_BASE(vc) : NULL);
- MPIDI_STATE_DECL(MPID_STATE_MXM_PROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_PROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_PROBE);
mxm_req.base.state = MXM_REQ_NEW;
mxm_req.base.mq = mq_h_v[0];
@@ -48,7 +52,7 @@ int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, i
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_PROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_PROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -59,7 +63,7 @@ int MPID_nem_mxm_probe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, i
#define FUNCNAME MPID_nem_mxm_iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
+int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
int *flag, MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
@@ -68,8 +72,8 @@ int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
mxm_mq_h *mq_h_v = (mxm_mq_h *) comm->dev.ch.netmod_priv;
MPID_nem_mxm_vc_area *vc_area = (vc ? VC_BASE(vc) : NULL);
- MPIDI_STATE_DECL(MPID_STATE_MXM_IPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_IPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_IPROBE);
mxm_req.base.state = MXM_REQ_NEW;
mxm_req.base.mq = mq_h_v[0];
@@ -94,7 +98,7 @@ int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_IPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_IPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -105,8 +109,8 @@ int MPID_nem_mxm_iprobe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
#define FUNCNAME MPID_nem_mxm_improbe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm, int context_offset,
- int *flag, MPID_Request ** message, MPI_Status * status)
+int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
mxm_error_t err;
@@ -115,8 +119,8 @@ int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
mxm_mq_h *mq_h_v = (mxm_mq_h *) comm->dev.ch.netmod_priv;
MPID_nem_mxm_vc_area *vc_area = (vc ? VC_BASE(vc) : NULL);
- MPIDI_STATE_DECL(MPID_STATE_MXM_IMPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MXM_IMPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_IMPROBE);
mxm_req.base.state = MXM_REQ_NEW;
mxm_req.base.mq = mq_h_v[0];
@@ -127,13 +131,13 @@ int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
err = mxm_req_mprobe(&mxm_req, &mxm_msg);
if (MXM_OK == err) {
- MPID_Request *req;
+ MPIR_Request *req;
*flag = 1;
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 2);
- req->kind = MPID_REQUEST_MPROBE;
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Object_set_ref(req, 2);
+ req->kind = MPIR_REQUEST_KIND__MPROBE;
req->comm = comm;
MPIR_Comm_add_ref(comm);
req->ch.vc = vc;
@@ -146,8 +150,8 @@ int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
req->status.MPI_SOURCE = mxm_req.completion.sender_imm;
req->dev.recv_data_sz = mxm_req.completion.sender_len;
MPIR_STATUS_SET_COUNT(req->status, req->dev.recv_data_sz);
- req->dev.tmpbuf = MPIU_Malloc(req->dev.recv_data_sz);
- MPIU_Assert(req->dev.tmpbuf);
+ req->dev.tmpbuf = MPL_malloc(req->dev.recv_data_sz);
+ MPIR_Assert(req->dev.tmpbuf);
mxm_req.base.completed_cb = NULL;
mxm_req.base.context = req;
@@ -186,7 +190,7 @@ int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MXM_IMPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_IMPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -197,7 +201,7 @@ int MPID_nem_mxm_improbe(MPIDI_VC_t * vc, int source, int tag, MPID_Comm * comm,
#define FUNCNAME MPID_nem_mxm_anysource_iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag,
+int MPID_nem_mxm_anysource_iprobe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
MPI_Status * status)
{
return MPID_nem_mxm_iprobe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, status);
@@ -208,8 +212,8 @@ int MPID_nem_mxm_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset,
#define FUNCNAME MPID_nem_mxm_anysource_iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag,
- MPID_Request ** message, MPI_Status * status)
+int MPID_nem_mxm_anysource_improbe(int tag, MPIR_Comm * comm, int context_offset, int *flag,
+ MPIR_Request ** message, MPI_Status * status)
{
return MPID_nem_mxm_improbe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, message,
status);
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
index 280eed8..a2573dc 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
@@ -1,5 +1,9 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portion of this code were written by Mellanox Technologies, Inc.
* (C) 2014 Mellanox Technologies, Inc.
*
*/
@@ -19,8 +23,8 @@ static void _mxm_send_completion_cb(void *context);
static int _mxm_isend(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req,
int type, mxm_mq_h mxm_mq, int mxm_rank, int id, mxm_tag_t tag, int block);
#if 0 /* Consider using this function in case non contiguous data */
-static int _mxm_process_sdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
- MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+static int _mxm_process_sdtype(MPIR_Request ** rreq_p, MPI_Datatype datatype,
+ MPIDU_Datatype* dt_ptr, intptr_t data_sz, const void *buf,
int count, mxm_req_buffer_t ** iov_buf, int *iov_count);
#endif
@@ -28,21 +32,21 @@ static int _mxm_process_sdtype(MPID_Request ** rreq_p, MPI_Datatype datatype,
#define FUNCNAME MPID_nem_mxm_iSendContig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz)
+int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "mxm_iSendContig");
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "mxm_iSendContig");
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *) hdr);
- MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
_dbg_mxm_output(5,
"iSendContig ========> Sending ADI msg (to=%d type=%d) for req %p (data_size %d, %d) \n",
@@ -82,7 +86,7 @@ int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MP
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_ISENDCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -93,27 +97,27 @@ int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MP
#define FUNCNAME MPID_nem_mxm_iStartContigMsg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
- MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr)
+int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, intptr_t hdr_sz, void *data,
+ intptr_t data_sz, MPIR_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = NULL;
+ MPIR_Request *sreq = NULL;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "mxm_iStartContigMsg");
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "mxm_iStartContigMsg");
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *) hdr);
/* create a request */
- sreq = MPID_Request_create();
- MPIU_Assert(sreq != NULL);
- MPIU_Object_set_ref(sreq, 2);
- MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(sreq != NULL);
+ MPIR_Object_set_ref(sreq, 2);
+ MPIR_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = NULL;
sreq->dev.tmpbuf = NULL;
@@ -147,7 +151,7 @@ int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_
fn_exit:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_ISTARTCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -158,21 +162,21 @@ int MPID_nem_mxm_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_
#define FUNCNAME MPID_nem_mxm_SendNoncontig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
- MPIDI_msg_sz_t hdr_sz)
+int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr,
+ intptr_t hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t last;
+ intptr_t last;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "MPID_nem_mxm_iSendNoncontig");
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "MPID_nem_mxm_iSendNoncontig");
- MPIU_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Memcpy(&(sreq->dev.pending_pkt), (char *) hdr, sizeof(MPIDI_CH3_Pkt_t));
_dbg_mxm_output(5,
"SendNoncontig ========> Sending ADI msg (to=%d type=%d) for req %p (data_size %d, %d) \n",
@@ -202,13 +206,13 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
* either "last <= 0" or "last-sreq->dev.segment_first <=0" to this
* layer. In future, if upper layer passes such kind of packet, the
* judgement of the following IF branch needs to be modified. */
- MPIU_Assert(last > 0 && last - sreq->dev.segment_first > 0);
+ MPIR_Assert(last > 0 && last - sreq->dev.segment_first > 0);
if (last > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t) (sreq->dev.segment_size - sreq->dev.segment_first));
- MPIU_Assert(sreq->dev.tmpbuf);
- MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.tmpbuf);
- MPIU_Assert(last == sreq->dev.segment_size);
+ sreq->dev.tmpbuf = MPL_malloc((size_t) (sreq->dev.segment_size - sreq->dev.segment_first));
+ MPIR_Assert(sreq->dev.tmpbuf);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.tmpbuf);
+ MPIR_Assert(last == sreq->dev.segment_size);
req_area->iov_buf[req_area->iov_count].ptr = sreq->dev.tmpbuf;
req_area->iov_buf[req_area->iov_count].length = last - sreq->dev.segment_first;
@@ -225,7 +229,7 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_SENDNONCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -237,36 +241,36 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_mxm_send(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_ptr)
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = NULL;
- MPID_Datatype *dt_ptr;
+ MPIR_Request *sreq = NULL;
+ MPIDU_Datatype*dt_ptr;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPI_Aint dt_true_lb;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
mxm_mq_h *mq_h_v = (mxm_mq_h *) comm->dev.ch.netmod_priv;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_SEND);
MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert(sreq != NULL);
+ MPIR_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
- sreq->partner_request = NULL;
+ sreq->dev.partner_request = NULL;
sreq->dev.OnDataAvail = NULL;
sreq->dev.tmpbuf = NULL;
sreq->ch.vc = vc;
@@ -292,20 +296,20 @@ int MPID_nem_mxm_send(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Data
req_area->iov_buf[0].length = data_sz;
}
else {
- MPIDI_msg_sz_t last;
+ intptr_t last;
MPI_Aint packsize = 0;
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
- MPIU_Assert(sreq->dev.tmpbuf);
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
- MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+ sreq->dev.tmpbuf = MPL_malloc((size_t) packsize);
+ MPIR_Assert(sreq->dev.tmpbuf);
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
req_area->iov_count = 1;
req_area->iov_buf[0].ptr = sreq->dev.tmpbuf;
@@ -328,7 +332,7 @@ int MPID_nem_mxm_send(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Data
fn_exit:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_SEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -340,36 +344,36 @@ int MPID_nem_mxm_send(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Data
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_mxm_ssend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_ptr)
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = NULL;
- MPID_Datatype *dt_ptr;
+ MPIR_Request *sreq = NULL;
+ MPIDU_Datatype*dt_ptr;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPI_Aint dt_true_lb;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
mxm_mq_h *mq_h_v = (mxm_mq_h *) comm->dev.ch.netmod_priv;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_SSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_SSEND);
MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert(sreq != NULL);
+ MPIR_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SSEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
- sreq->partner_request = NULL;
+ sreq->dev.partner_request = NULL;
sreq->dev.OnDataAvail = NULL;
sreq->dev.tmpbuf = NULL;
sreq->ch.vc = vc;
@@ -395,20 +399,20 @@ int MPID_nem_mxm_ssend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Dat
req_area->iov_buf[0].length = data_sz;
}
else {
- MPIDI_msg_sz_t last;
+ intptr_t last;
MPI_Aint packsize = 0;
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
- MPIU_Assert(sreq->dev.tmpbuf);
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
- MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+ sreq->dev.tmpbuf = MPL_malloc((size_t) packsize);
+ MPIR_Assert(sreq->dev.tmpbuf);
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
req_area->iov_count = 1;
req_area->iov_buf[0].ptr = sreq->dev.tmpbuf;
@@ -431,7 +435,7 @@ int MPID_nem_mxm_ssend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Dat
fn_exit:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_SSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_SSEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -443,36 +447,36 @@ int MPID_nem_mxm_ssend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Dat
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_mxm_isend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_ptr)
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = NULL;
- MPID_Datatype *dt_ptr;
+ MPIR_Request *sreq = NULL;
+ MPIDU_Datatype*dt_ptr;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPI_Aint dt_true_lb;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
mxm_mq_h *mq_h_v = (mxm_mq_h *) comm->dev.ch.netmod_priv;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_ISEND);
MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert(sreq != NULL);
+ MPIR_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
- sreq->partner_request = NULL;
+ sreq->dev.partner_request = NULL;
sreq->dev.OnDataAvail = NULL;
sreq->dev.tmpbuf = NULL;
sreq->ch.vc = vc;
@@ -498,20 +502,20 @@ int MPID_nem_mxm_isend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Dat
req_area->iov_buf[0].length = data_sz;
}
else {
- MPIDI_msg_sz_t last;
+ intptr_t last;
MPI_Aint packsize = 0;
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
- MPIU_Assert(sreq->dev.tmpbuf);
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
- MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+ sreq->dev.tmpbuf = MPL_malloc((size_t) packsize);
+ MPIR_Assert(sreq->dev.tmpbuf);
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
req_area->iov_count = 1;
req_area->iov_buf[0].ptr = sreq->dev.tmpbuf;
@@ -534,7 +538,7 @@ int MPID_nem_mxm_isend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Dat
fn_exit:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_ISEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -546,36 +550,36 @@ int MPID_nem_mxm_isend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Dat
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_mxm_issend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** sreq_ptr)
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = NULL;
- MPID_Datatype *dt_ptr;
+ MPIR_Request *sreq = NULL;
+ MPIDU_Datatype*dt_ptr;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPI_Aint dt_true_lb;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
mxm_mq_h *mq_h_v = (mxm_mq_h *) comm->dev.ch.netmod_priv;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MXM_ISSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MXM_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MXM_ISSEND);
MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
/* create a request */
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
- MPIU_Assert(sreq != NULL);
+ MPIR_Assert(sreq != NULL);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SSEND);
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
- sreq->partner_request = NULL;
+ sreq->dev.partner_request = NULL;
sreq->dev.OnDataAvail = NULL;
sreq->dev.tmpbuf = NULL;
sreq->ch.vc = vc;
@@ -601,21 +605,21 @@ int MPID_nem_mxm_issend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Da
req_area->iov_buf[0].length = data_sz;
}
else {
- MPIDI_msg_sz_t last;
+ intptr_t last;
MPI_Aint packsize = 0;
sreq->ch.noncontig = TRUE;
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
MPIR_Pack_size_impl(count, datatype, &packsize);
last = data_sz;
if (packsize > 0) {
- sreq->dev.tmpbuf = MPIU_Malloc((size_t) packsize);
- MPIU_Assert(sreq->dev.tmpbuf);
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
- MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
+ sreq->dev.tmpbuf = MPL_malloc((size_t) packsize);
+ MPIR_Assert(sreq->dev.tmpbuf);
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, 0, &last, sreq->dev.tmpbuf);
req_area->iov_count = 1;
req_area->iov_buf[0].ptr = sreq->dev.tmpbuf;
@@ -637,14 +641,14 @@ int MPID_nem_mxm_issend(MPIDI_VC_t * vc, const void *buf, MPI_Aint count, MPI_Da
fn_exit:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MXM_ISSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MXM_ISSEND);
return mpi_errno;
fn_fail:
goto fn_exit;
}
-int _mxm_handle_sreq(MPID_Request * req)
+int _mxm_handle_sreq(MPIR_Request * req)
{
int complete = FALSE;
MPID_nem_mxm_vc_area *vc_area = NULL;
@@ -659,18 +663,18 @@ int _mxm_handle_sreq(MPID_Request * req)
vc_area->pending_sends -= 1;
if (req->dev.tmpbuf) {
if (req->dev.datatype_ptr || req->ch.noncontig) {
- MPIU_Free(req->dev.tmpbuf);
+ MPL_free(req->dev.tmpbuf);
}
}
if (req_area->iov_count > MXM_MPICH_MAX_IOV) {
- MPIU_Free(req_area->iov_buf);
+ MPL_free(req_area->iov_buf);
req_area->iov_buf = req_area->tmp_buf;
req_area->iov_count = 0;
}
MPIDI_CH3U_Handle_send_req(req->ch.vc, req, &complete);
- MPIU_Assert(complete == TRUE);
+ MPIR_Assert(complete == TRUE);
return complete;
}
@@ -678,11 +682,11 @@ int _mxm_handle_sreq(MPID_Request * req)
static void _mxm_send_completion_cb(void *context)
{
- MPID_Request *req = (MPID_Request *) context;
+ MPIR_Request *req = (MPIR_Request *) context;
MPID_nem_mxm_vc_area *vc_area = NULL;
MPID_nem_mxm_req_area *req_area = NULL;
- MPIU_Assert(req);
+ MPIR_Assert(req);
_dbg_mxm_out_req(req);
vc_area = VC_BASE(req->ch.vc);
@@ -710,8 +714,8 @@ static int _mxm_isend(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req,
mxm_send_req_t *mxm_sreq;
list_head_t *free_queue = NULL;
- MPIU_Assert(ep);
- MPIU_Assert(req);
+ MPIR_Assert(ep);
+ MPIR_Assert(req);
free_queue = &ep->free_queue;
req->mxm_req = list_dequeue_mxm_req(free_queue);
@@ -719,7 +723,7 @@ static int _mxm_isend(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req,
list_grow_mxm_req(free_queue);
req->mxm_req = list_dequeue_mxm_req(free_queue);
if (!req->mxm_req) {
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "empty free queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "empty free queue");
mpi_errno = MPI_ERR_OTHER;
goto fn_fail;
}
@@ -782,36 +786,36 @@ static int _mxm_isend(MPID_nem_mxm_ep_t * ep, MPID_nem_mxm_req_area * req,
}
#if 0 /* Consider using this function in case non contiguous data */
-static int _mxm_process_sdtype(MPID_Request ** sreq_p, MPI_Datatype datatype,
- MPID_Datatype * dt_ptr, MPIDI_msg_sz_t data_sz, const void *buf,
+static int _mxm_process_sdtype(MPIR_Request ** sreq_p, MPI_Datatype datatype,
+ MPIDU_Datatype* dt_ptr, intptr_t data_sz, const void *buf,
int count, mxm_req_buffer_t ** iov_buf, int *iov_count)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq = *sreq_p;
- MPIDI_msg_sz_t last;
+ MPIR_Request *sreq = *sreq_p;
+ intptr_t last;
MPL_IOV *iov;
int n_iov = 0;
int index;
int size_to_copy = 0;
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
+ "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
last = sreq->dev.segment_size;
- MPID_Segment_count_contig_blocks(sreq->dev.segment_ptr, sreq->dev.segment_first, &last,
+ MPIDU_Segment_count_contig_blocks(sreq->dev.segment_ptr, sreq->dev.segment_first, &last,
(MPI_Aint *) & n_iov);
- MPIU_Assert(n_iov > 0);
- iov = MPIU_Malloc(n_iov * sizeof(*iov));
- MPIU_Assert(iov);
+ MPIR_Assert(n_iov > 0);
+ iov = MPL_malloc(n_iov * sizeof(*iov));
+ MPIR_Assert(iov);
last = sreq->dev.segment_size;
- MPID_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, iov, &n_iov);
- MPIU_Assert(last == sreq->dev.segment_size);
+ MPIDU_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, iov, &n_iov);
+ MPIR_Assert(last == sreq->dev.segment_size);
#if defined(MXM_DEBUG) && (MXM_DEBUG > 0)
_dbg_mxm_output(7, "Send Noncontiguous data vector %i entries (free slots : %i)\n", n_iov,
@@ -823,8 +827,8 @@ static int _mxm_process_sdtype(MPID_Request ** sreq_p, MPI_Datatype datatype,
#endif
if (n_iov > MXM_MPICH_MAX_IOV) {
- *iov_buf = (mxm_req_buffer_t *) MPIU_Malloc(n_iov * sizeof(**iov_buf));
- MPIU_Assert(*iov_buf);
+ *iov_buf = (mxm_req_buffer_t *) MPL_malloc(n_iov * sizeof(**iov_buf));
+ MPIR_Assert(*iov_buf);
}
for (index = 0; index < n_iov; index++) {
@@ -844,11 +848,11 @@ static int _mxm_process_sdtype(MPID_Request ** sreq_p, MPI_Datatype datatype,
}
else {
int offset = 0;
- sreq->dev.tmpbuf = MPIU_Malloc(size_to_copy);
+ sreq->dev.tmpbuf = MPL_malloc(size_to_copy);
sreq->dev.tmpbuf_sz = size_to_copy;
- MPIU_Assert(sreq->dev.tmpbuf);
+ MPIR_Assert(sreq->dev.tmpbuf);
for (index = (MXM_REQ_DATA_MAX_IOV - 1); index < n_iov; index++) {
- MPIU_Memcpy((char *) (sreq->dev.tmpbuf) + offset, iov[index].MPL_IOV_BUF,
+ MPIR_Memcpy((char *) (sreq->dev.tmpbuf) + offset, iov[index].MPL_IOV_BUF,
iov[index].MPL_IOV_LEN);
offset += iov[index].MPL_IOV_LEN;
}
@@ -856,7 +860,7 @@ static int _mxm_process_sdtype(MPID_Request ** sreq_p, MPI_Datatype datatype,
(*iov_buf)[MXM_REQ_DATA_MAX_IOV - 1].length = size_to_copy;
*iov_count = MXM_REQ_DATA_MAX_IOV;
}
- MPIU_Free(iov);
+ MPL_free(iov);
fn_exit:
return mpi_errno;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/none/.state-cache b/src/mpid/ch3/channels/nemesis/netmod/none/.state-cache
index d1fe652..c50bc06 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/none/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/netmod/none/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="none.c" info="1447123141"/>
+<file name="none.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="none.c">
diff --git a/src/mpid/ch3/channels/nemesis/netmod/none/none.c b/src/mpid/ch3/channels/nemesis/netmod/none/none.c
index f35f3b9..6c55181 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/none/none.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/none/none.c
@@ -15,13 +15,13 @@ static int nm_init(MPIDI_PG_t *pg_p, int pg_rank,
static int nm_get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p)
{
- MPIU_Assertp(0);
+ MPIR_Assertp(0);
return MPI_SUCCESS;
}
static int nm_connect_to_root(const char *business_card, MPIDI_VC_t *new_vc)
{
- MPIU_Assertp(0);
+ MPIR_Assertp(0);
return MPI_SUCCESS;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/.state-cache b/src/mpid/ch3/channels/nemesis/netmod/ofi/.state-cache
index 0e9883f..fe5f926 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/.state-cache
@@ -1,34 +1,34 @@
<dir>
-<file name="ofi_cm.c" info="1447123141"/>
-<file name="ofi_tag_layout.h" info="1447123141"/>
-<file name="ofi_msg.c" info="1447123141"/>
-<file name="ofi_probe_template.c" info="1447123141"/>
-<file name="ofi_impl.h" info="1447123141"/>
-<file name="ofi_init.c" info="1447123141"/>
-<file name="ofi_progress.c" info="1447123141"/>
-<file name="ofi_tagged.c" info="1447123141"/>
-<file name="ofi_data.c" info="1447123141"/>
-<file name="ofi_tagged_template.c" info="1447123141"/>
+<file name="ofi_tagged.c" info="1478973152"/>
+<file name="ofi_cm.c" info="1478973152"/>
+<file name="ofi_data.c" info="1478973152"/>
+<file name="ofi_probe_template.c" info="1478973152"/>
+<file name="ofi_progress.c" info="1478973152"/>
+<file name="ofi_tag_layout.h" info="1478973152"/>
+<file name="ofi_init.c" info="1478973152"/>
+<file name="ofi_impl.h" info="1478973152"/>
+<file name="ofi_msg.c" info="1478973152"/>
+<file name="ofi_tagged_template.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ofi_cm.c">
+<fileinfo name="ofi_tagged.c">
</fileinfo>
-<fileinfo name="ofi_tag_layout.h">
+<fileinfo name="ofi_cm.c">
</fileinfo>
-<fileinfo name="ofi_msg.c">
+<fileinfo name="ofi_data.c">
</fileinfo>
<fileinfo name="ofi_probe_template.c">
</fileinfo>
-<fileinfo name="ofi_impl.h">
-FUNCNAME nothing
+<fileinfo name="ofi_progress.c">
</fileinfo>
-<fileinfo name="ofi_init.c">
+<fileinfo name="ofi_tag_layout.h">
</fileinfo>
-<fileinfo name="ofi_progress.c">
+<fileinfo name="ofi_init.c">
</fileinfo>
-<fileinfo name="ofi_tagged.c">
+<fileinfo name="ofi_impl.h">
+FUNCNAME nothing
</fileinfo>
-<fileinfo name="ofi_data.c">
+<fileinfo name="ofi_msg.c">
</fileinfo>
<fileinfo name="ofi_tagged_template.c">
</fileinfo>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/Makefile.mk b/src/mpid/ch3/channels/nemesis/netmod/ofi/Makefile.mk
index 70487e3..667ea37 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/Makefile.mk
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/Makefile.mk
@@ -1,7 +1,7 @@
## -*- Mode: Makefile; -*-
## vim: set ft=automake :
##
-## (C) 2011 by Argonne National Laboratory.
+## (C) 2014 by Argonne National Laboratory.
## See COPYRIGHT in top-level directory.
##
if BUILD_NEMESIS_NETMOD_OFI
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_cm.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_cm.c
index 04974e7..29965e7 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_cm.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_cm.c
@@ -48,7 +48,7 @@ static inline MPIDI_VC_t *ofi_wc_to_vc(cq_tagged_entry_t * wc)
vc = VC_OFI(vc)->next;
}
if (NULL == vc) {
- MPIU_Assertp(0);
+ MPIR_Assertp(0);
}
}
else {
@@ -69,7 +69,7 @@ static inline MPIDI_VC_t *ofi_wc_to_vc(cq_tagged_entry_t * wc)
MPIDI_PG_Get_vc(pg, get_psource(match_bits), &vc);
}
else {
- MPIU_Assert(0);
+ MPIR_Assert(0);
}
}
END_FUNC(FCNAME);
@@ -94,7 +94,7 @@ static inline MPIDI_VC_t *ofi_wc_to_vc(cq_tagged_entry_t * wc)
/* ------------------------------------------------------------------------ */
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_conn_req_callback)
-static inline int MPID_nem_ofi_conn_req_callback(cq_tagged_entry_t * wc, MPID_Request * rreq)
+static inline int MPID_nem_ofi_conn_req_callback(cq_tagged_entry_t * wc, MPIR_Request * rreq)
{
int ret, len, mpi_errno = MPI_SUCCESS;
char bc[OFI_KVSAPPSTRLEN];
@@ -105,9 +105,9 @@ static inline int MPID_nem_ofi_conn_req_callback(cq_tagged_entry_t * wc, MPID_Re
BEGIN_FUNC(FCNAME);
- MPIU_Memcpy(bc, rreq->dev.user_buf, wc->len);
+ MPIR_Memcpy(bc, rreq->dev.user_buf, wc->len);
bc[wc->len] = '\0';
- MPIU_Assert(gl_data.conn_req == rreq);
+ MPIR_Assert(gl_data.conn_req == rreq);
FI_RC_RETRY(fi_trecv(gl_data.endpoint,
gl_data.conn_req->dev.user_buf,
OFI_KVSAPPSTRLEN,
@@ -117,16 +117,16 @@ static inline int MPID_nem_ofi_conn_req_callback(cq_tagged_entry_t * wc, MPID_Re
GET_RCD_IGNORE_MASK(),
(void *) &(REQ_OFI(gl_data.conn_req)->ofi_context)), trecv);
- addr = MPIU_Malloc(gl_data.bound_addrlen);
- MPIU_Assertp(addr);
+ addr = MPL_malloc(gl_data.bound_addrlen);
+ MPIR_Assertp(addr);
- vc = MPIU_Malloc(sizeof(MPIDI_VC_t));
- MPIU_Assertp(vc);
+ vc = MPL_malloc(sizeof(MPIDI_VC_t));
+ MPIR_Assertp(vc);
MPIDI_VC_Init(vc, NULL, 0);
MPIDI_CH3I_NM_OFI_RC(MPIDI_GetTagFromPort(bc, &vc->port_name_tag));
- ret = MPIU_Str_get_binary_arg(bc, "OFI", addr, gl_data.bound_addrlen, &len);
- MPIR_ERR_CHKANDJUMP((ret != MPIU_STR_SUCCESS && ret != MPIU_STR_NOMEM) ||
+ ret = MPL_str_get_binary_arg(bc, "OFI", addr, gl_data.bound_addrlen, &len);
+ MPIR_ERR_CHKANDJUMP((ret != MPL_STR_SUCCESS && ret != MPL_STR_NOMEM) ||
(size_t) len != gl_data.bound_addrlen,
mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
@@ -140,12 +140,12 @@ static inline int MPID_nem_ofi_conn_req_callback(cq_tagged_entry_t * wc, MPID_Re
MPIDI_CH3I_Acceptq_enqueue(vc, vc->port_name_tag);
MPIDI_CH3I_INCR_PROGRESS_COMPLETION_COUNT;
fn_exit:
- MPIU_Free(addr);
+ MPL_free(addr);
END_FUNC(FCNAME);
return mpi_errno;
fn_fail:
if (vc)
- MPIU_Free(vc);
+ MPL_free(vc);
goto fn_exit;
}
@@ -159,17 +159,17 @@ static inline int MPID_nem_ofi_conn_req_callback(cq_tagged_entry_t * wc, MPID_Re
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_handle_packet)
static inline int MPID_nem_ofi_handle_packet(cq_tagged_entry_t * wc ATTRIBUTE((unused)),
- MPID_Request * rreq)
+ MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_VC_t *vc;
BEGIN_FUNC(FCNAME);
- if (MPID_cc_get(rreq->cc) == 1) {
+ if (MPIR_cc_get(rreq->cc) == 1) {
vc = REQ_OFI(rreq)->vc;
- MPIU_Assert(vc);
+ MPIR_Assert(vc);
MPIDI_CH3I_NM_OFI_RC(MPID_nem_handle_pkt(vc, REQ_OFI(rreq)->pack_buffer, REQ_OFI(rreq)->pack_buffer_size));
- MPIU_Free(REQ_OFI(rreq)->pack_buffer);
+ MPL_free(REQ_OFI(rreq)->pack_buffer);
}
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(rreq));
END_FUNC_RC(FCNAME);
@@ -182,7 +182,7 @@ static inline int MPID_nem_ofi_handle_packet(cq_tagged_entry_t * wc ATTRIBUTE((u
/* ------------------------------------------------------------------------ */
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_cts_send_callback)
-static inline int MPID_nem_ofi_cts_send_callback(cq_tagged_entry_t * wc, MPID_Request * sreq)
+static inline int MPID_nem_ofi_cts_send_callback(cq_tagged_entry_t * wc, MPIR_Request * sreq)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
@@ -202,21 +202,21 @@ static inline int MPID_nem_ofi_cts_send_callback(cq_tagged_entry_t * wc, MPID_Re
/* ------------------------------------------------------------------------ */
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_preposted_callback)
-static inline int MPID_nem_ofi_preposted_callback(cq_tagged_entry_t * wc, MPID_Request * rreq)
+static inline int MPID_nem_ofi_preposted_callback(cq_tagged_entry_t * wc, MPIR_Request * rreq)
{
int c, mpi_errno = MPI_SUCCESS;
size_t pkt_len;
char *pack_buffer = NULL;
MPIDI_VC_t *vc;
- MPID_Request *new_rreq, *sreq;
+ MPIR_Request *new_rreq, *sreq;
BEGIN_FUNC(FCNAME);
vc = ofi_wc_to_vc(wc);
- MPIU_Assert(vc);
+ MPIR_Assert(vc);
VC_READY_CHECK(vc);
pkt_len = REQ_OFI(rreq)->msg_bytes;
- pack_buffer = (char *) MPIU_Malloc(pkt_len);
+ pack_buffer = (char *) MPL_malloc(pkt_len);
/* If the pack buffer is NULL, let OFI handle the truncation
* in the progress loop
*/
@@ -224,7 +224,7 @@ static inline int MPID_nem_ofi_preposted_callback(cq_tagged_entry_t * wc, MPID_R
pkt_len = 0;
c = 1;
MPID_nem_ofi_create_req(&new_rreq, 1);
- MPID_cc_incr(new_rreq->cc_ptr, &c);
+ MPIR_cc_incr(new_rreq->cc_ptr, &c);
new_rreq->dev.OnDataAvail = NULL;
new_rreq->dev.next = NULL;
REQ_OFI(new_rreq)->event_callback = MPID_nem_ofi_handle_packet;
@@ -249,7 +249,7 @@ static inline int MPID_nem_ofi_preposted_callback(cq_tagged_entry_t * wc, MPID_R
gl_data.mr,
VC_OFI(vc)->direct_addr,
wc->tag | MPID_MSG_CTS, &(REQ_OFI(sreq)->ofi_context)), tsend);
- MPIU_Assert(gl_data.persistent_req == rreq);
+ MPIR_Assert(gl_data.persistent_req == rreq);
FI_RC_RETRY(fi_trecv(gl_data.endpoint,
&REQ_OFI(rreq)->msg_bytes,
@@ -272,13 +272,13 @@ static inline int MPID_nem_ofi_preposted_callback(cq_tagged_entry_t * wc, MPID_R
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_connect_to_root_callback)
int MPID_nem_ofi_connect_to_root_callback(cq_tagged_entry_t * wc ATTRIBUTE((unused)),
- MPID_Request * sreq)
+ MPIR_Request * sreq)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
if (REQ_OFI(sreq)->pack_buffer)
- MPIU_Free(REQ_OFI(sreq)->pack_buffer);
+ MPL_free(REQ_OFI(sreq)->pack_buffer);
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(sreq));
@@ -296,7 +296,7 @@ int MPID_nem_ofi_connect_to_root_callback(cq_tagged_entry_t * wc ATTRIBUTE((unus
int MPID_nem_ofi_cm_init(MPIDI_PG_t * pg_p, int pg_rank ATTRIBUTE((unused)))
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *persistent_req, *conn_req;
+ MPIR_Request *persistent_req, *conn_req;
BEGIN_FUNC(FCNAME);
/* ------------------------------------- */
@@ -337,7 +337,7 @@ int MPID_nem_ofi_cm_init(MPIDI_PG_t * pg_p, int pg_rank ATTRIBUTE((unused)))
/* Post recv for connection requests */
/* --------------------------------- */
MPID_nem_ofi_create_req(&conn_req, 1);
- conn_req->dev.user_buf = MPIU_Malloc(OFI_KVSAPPSTRLEN * sizeof(char));
+ conn_req->dev.user_buf = MPL_malloc(OFI_KVSAPPSTRLEN * sizeof(char));
conn_req->dev.OnDataAvail = NULL;
conn_req->dev.next = NULL;
REQ_OFI(conn_req)->vc = NULL; /* We don't know the source yet */
@@ -378,7 +378,7 @@ int MPID_nem_ofi_cm_finalize()
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(gl_data.persistent_req));
FI_RC(fi_cancel((fid_t) gl_data.endpoint, &(REQ_OFI(gl_data.conn_req)->ofi_context)), cancel);
- MPIU_Free(gl_data.conn_req->dev.user_buf);
+ MPL_free(gl_data.conn_req->dev.user_buf);
MPIR_STATUS_SET_CANCEL_BIT(gl_data.conn_req->status, TRUE);
MPIR_STATUS_SET_COUNT(gl_data.conn_req->status, 0);
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(gl_data.conn_req));
@@ -400,17 +400,17 @@ int MPID_nem_ofi_vc_connect(MPIDI_VC_t * vc)
char bc[OFI_KVSAPPSTRLEN], *addr = NULL;
BEGIN_FUNC(FCNAME);
- addr = MPIU_Malloc(gl_data.bound_addrlen);
- MPIU_Assert(addr);
- MPIU_Assert(1 != VC_OFI(vc)->ready);
+ addr = MPL_malloc(gl_data.bound_addrlen);
+ MPIR_Assert(addr);
+ MPIR_Assert(1 != VC_OFI(vc)->ready);
if (!vc->pg || !vc->pg->getConnInfo) {
goto fn_exit;
}
MPIDI_CH3I_NM_OFI_RC(vc->pg->getConnInfo(vc->pg_rank, bc, OFI_KVSAPPSTRLEN, vc->pg));
- ret = MPIU_Str_get_binary_arg(bc, "OFI", addr, gl_data.bound_addrlen, &len);
- MPIR_ERR_CHKANDJUMP((ret != MPIU_STR_SUCCESS && ret != MPIU_STR_NOMEM) ||
+ ret = MPL_str_get_binary_arg(bc, "OFI", addr, gl_data.bound_addrlen, &len);
+ MPIR_ERR_CHKANDJUMP((ret != MPL_STR_SUCCESS && ret != MPL_STR_NOMEM) ||
(size_t) len != gl_data.bound_addrlen,
mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
FI_RC(fi_av_insert(gl_data.av, addr, 1, &(VC_OFI(vc)->direct_addr), 0ULL, NULL), avmap);
@@ -418,7 +418,7 @@ int MPID_nem_ofi_vc_connect(MPIDI_VC_t * vc)
fn_exit:
if (addr)
- MPIU_Free(addr);
+ MPL_free(addr);
END_FUNC(FCNAME);
return mpi_errno;
@@ -473,7 +473,7 @@ int MPID_nem_ofi_vc_destroy(MPIDI_VC_t * vc)
prev = VC_OFI(prev)->next;
}
- MPIU_Assert(prev != NULL);
+ MPIR_Assert(prev != NULL);
if (VC_OFI(prev)->next == vc) {
VC_OFI(prev)->next = VC_OFI(vc)->next;
@@ -482,7 +482,7 @@ int MPID_nem_ofi_vc_destroy(MPIDI_VC_t * vc)
gl_data.cm_vcs = VC_OFI(vc)->next;
}
else {
- MPIU_Assert(0);
+ MPIR_Assert(0);
}
}
VC_OFI(vc)->ready = 0;
@@ -524,34 +524,34 @@ int MPID_nem_ofi_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc)
int len, ret, mpi_errno = MPI_SUCCESS, str_errno = MPI_SUCCESS;
int my_bc_len = OFI_KVSAPPSTRLEN;
char *addr = NULL, *bc = NULL, *my_bc = NULL;
- MPID_Request *sreq;
+ MPIR_Request *sreq;
uint64_t conn_req_send_bits;
BEGIN_FUNC(FCNAME);
- addr = MPIU_Malloc(gl_data.bound_addrlen);
- bc = MPIU_Malloc(OFI_KVSAPPSTRLEN);
- MPIU_Assertp(addr);
- MPIU_Assertp(bc);
+ addr = MPL_malloc(gl_data.bound_addrlen);
+ bc = MPL_malloc(OFI_KVSAPPSTRLEN);
+ MPIR_Assertp(addr);
+ MPIR_Assertp(bc);
my_bc = bc;
if (!business_card || business_card[0] != 't') {
mpi_errno = MPI_ERR_OTHER;
goto fn_fail;
}
MPIDI_CH3I_NM_OFI_RC(MPIDI_GetTagFromPort(business_card, &new_vc->port_name_tag));
- ret = MPIU_Str_get_binary_arg(business_card, "OFI", addr, gl_data.bound_addrlen, &len);
- MPIR_ERR_CHKANDJUMP((ret != MPIU_STR_SUCCESS && ret != MPIU_STR_NOMEM) ||
+ ret = MPL_str_get_binary_arg(business_card, "OFI", addr, gl_data.bound_addrlen, &len);
+ MPIR_ERR_CHKANDJUMP((ret != MPL_STR_SUCCESS && ret != MPL_STR_NOMEM) ||
(size_t) len != gl_data.bound_addrlen,
mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
FI_RC(fi_av_insert(gl_data.av, addr, 1, &(VC_OFI(new_vc)->direct_addr), 0ULL, NULL), avmap);
VC_OFI(new_vc)->ready = 1;
- str_errno = MPIU_Str_add_int_arg(&bc, &my_bc_len, "tag", new_vc->port_name_tag);
+ str_errno = MPL_str_add_int_arg(&bc, &my_bc_len, "tag", new_vc->port_name_tag);
MPIR_ERR_CHKANDJUMP(str_errno, mpi_errno, MPI_ERR_OTHER, "**argstr_port_name_tag");
MPIDI_CH3I_NM_OFI_RC(MPID_nem_ofi_get_business_card(MPIR_Process.comm_world->rank, &bc, &my_bc_len));
my_bc_len = OFI_KVSAPPSTRLEN - my_bc_len;
MPID_nem_ofi_create_req(&sreq, 1);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = NULL;
sreq->dev.next = NULL;
REQ_OFI(sreq)->event_callback = MPID_nem_ofi_connect_to_root_callback;
@@ -580,12 +580,12 @@ int MPID_nem_ofi_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc)
gl_data.cm_vcs = new_vc;
fn_exit:
if (addr)
- MPIU_Free(addr);
+ MPL_free(addr);
END_FUNC(FCNAME);
return mpi_errno;
fn_fail:
if (my_bc)
- MPIU_Free(my_bc);
+ MPL_free(my_bc);
goto fn_exit;
}
@@ -594,14 +594,14 @@ int MPID_nem_ofi_connect_to_root(const char *business_card, MPIDI_VC_t * new_vc)
int MPID_nem_ofi_get_business_card(int my_rank ATTRIBUTE((unused)),
char **bc_val_p, int *val_max_sz_p)
{
- int mpi_errno = MPI_SUCCESS, str_errno = MPIU_STR_SUCCESS;
+ int mpi_errno = MPI_SUCCESS, str_errno = MPL_STR_SUCCESS;
BEGIN_FUNC(FCNAME);
- str_errno = MPIU_Str_add_binary_arg(bc_val_p,
+ str_errno = MPL_str_add_binary_arg(bc_val_p,
val_max_sz_p,
"OFI",
(char *) &gl_data.bound_addr, gl_data.bound_addrlen);
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
END_FUNC_RC(FCNAME);
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_data.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_data.c
index 9bdc325..2505cac 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_data.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_data.c
@@ -36,7 +36,8 @@ MPIDI_Comm_ops_t _g_comm_ops = {
NULL, /* probe */
MPID_nem_ofi_iprobe, /* iprobe */
- MPID_nem_ofi_improbe /* improbe */
+ MPID_nem_ofi_improbe, /* improbe */
+ MPID_nem_ofi_recv_posted /* imrecv */
};
MPID_nem_netmod_funcs_t MPIDI_nem_ofi_funcs = {
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h
index 390f2ec..e3be01b 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h
@@ -11,7 +11,7 @@
#define OFI_IMPL_H
#include "mpid_nem_impl.h"
-#include "mpihandlemem.h"
+#include "mpir_objects.h"
#include "pmi.h"
#include <rdma/fabric.h>
#include <rdma/fi_errno.h>
@@ -63,31 +63,32 @@ typedef struct fi_cq_tagged_entry cq_tagged_entry_t;
typedef struct fi_cq_err_entry cq_err_entry_t;
typedef struct fi_context context_t;
typedef struct fi_msg_tagged msg_tagged_t;
-typedef int (*event_callback_fn) (cq_tagged_entry_t * wc, MPID_Request *);
-typedef int (*req_fn) (MPIDI_VC_t *, MPID_Request *, int *);
+typedef int (*event_callback_fn) (cq_tagged_entry_t * wc, MPIR_Request *);
+typedef int (*req_fn) (MPIDI_VC_t *, MPIR_Request *, int *);
/* ******************************** */
/* Global Object for state tracking */
/* ******************************** */
typedef struct {
- char bound_addr[OFI_MAX_ADDR_LEN]; /* This ranks bound address */
- fi_addr_t any_addr; /* Specifies any source */
- size_t bound_addrlen; /* length of the bound address */
- struct fid_fabric *fabric; /* fabric object */
- struct fid_domain *domain; /* domain object */
- struct fid_ep *endpoint; /* endpoint object */
- struct fid_cq *cq; /* completion queue */
- struct fid_av *av; /* address vector */
- struct fid_mr *mr; /* memory region */
- MPIDI_PG_t *pg_p; /* MPI Process group */
- MPIDI_VC_t *cm_vcs; /* temporary VC's */
- MPID_Request *persistent_req; /* Unexpected request queue */
- MPID_Request *conn_req; /* Connection request */
- MPIDI_Comm_ops_t comm_ops;
- size_t iov_limit; /* Max send iovec limit */
- int rts_cts_in_flight;
- int api_set;
-} MPID_nem_ofi_global_t;
+ char bound_addr[OFI_MAX_ADDR_LEN]; /* This ranks bound address */
+ size_t bound_addrlen; /* length of the bound address */
+ struct fid_fabric *fabric; /* fabric object */
+ struct fid_domain *domain; /* domain object */
+ struct fid_ep *endpoint; /* endpoint object */
+ struct fid_cq *cq; /* completion queue */
+ struct fid_av *av; /* address vector */
+ struct fid_mr *mr; /* memory region */
+ size_t iov_limit; /* Max send iovec limit */
+ size_t max_buffered_send; /* Buffered send threshold */
+ int rts_cts_in_flight; /* Count of incompleted */
+ /* RTS-CTS-DATA exchanges */
+ int api_set; /* Used OFI API for send */
+ /* operations */
+ MPIR_Request *persistent_req; /* Unexpected request queue */
+ MPIR_Request *conn_req; /* Connection request */
+ MPIDI_PG_t *pg_p; /* MPI Process group */
+ MPIDI_VC_t *cm_vcs; /* temporary VC's */
+} MPID_nem_ofi_global_t __attribute__ ((aligned (MPID_NEM_CACHE_LINE_LEN)));
/* ******************************** */
/* Device channel specific data */
@@ -119,7 +120,7 @@ typedef struct {
MPIDI_VC_t *vc; /* VC paired with this request */
uint64_t tag; /* 64 bit tag request */
struct iovec iov[3]; /* scatter gather list */
- MPID_Request *parent; /* Parent request */
+ MPIR_Request *parent; /* Parent request */
} MPID_nem_ofi_req_t;
#define REQ_OFI(req) ((MPID_nem_ofi_req_t *)((req)->ch.netmod_area.padding))
@@ -129,13 +130,13 @@ typedef struct {
#undef FUNCNAME
#define FUNCNAME nothing
#define BEGIN_FUNC(FUNCNAME) \
- MPIDI_STATE_DECL(FUNCNAME); \
- MPIDI_FUNC_ENTER(FUNCNAME);
+ MPIR_FUNC_VERBOSE_STATE_DECL(FUNCNAME); \
+ MPIR_FUNC_VERBOSE_ENTER(FUNCNAME);
#define END_FUNC(FUNCNAME) \
- MPIDI_FUNC_EXIT(FUNCNAME);
+ MPIR_FUNC_VERBOSE_EXIT(FUNCNAME);
#define END_FUNC_RC(FUNCNAME) \
fn_exit: \
- MPIDI_FUNC_EXIT(FUNCNAME); \
+ MPIR_FUNC_VERBOSE_EXIT(FUNCNAME); \
return mpi_errno; \
fn_fail: \
goto fn_exit;
@@ -218,12 +219,12 @@ fn_fail: \
#define OFI_ADDR_INIT(src, vc, remote_proc) \
({ \
if (MPI_ANY_SOURCE != src) { \
- MPIU_Assert(vc != NULL); \
+ MPIR_Assert(vc != NULL); \
VC_READY_CHECK(vc); \
remote_proc = VC_OFI(vc)->direct_addr; \
} else { \
- MPIU_Assert(vc == NULL); \
- remote_proc = gl_data.any_addr; \
+ MPIR_Assert(vc == NULL); \
+ remote_proc = FI_ADDR_UNSPEC; \
} \
})
@@ -233,28 +234,45 @@ fn_fail: \
#define PEEK_INIT 0
#define PEEK_FOUND 1
+#define PEEK_NOT_FOUND 2
#define MEM_TAG_FORMAT (0xFFFF00000000LLU)
/* ******************************** */
/* Request manipulation inlines */
/* ******************************** */
-static inline void MPID_nem_ofi_init_req(MPID_Request * req)
+static inline void MPID_nem_ofi_init_req(MPIR_Request * req)
{
memset(REQ_OFI(req), 0, sizeof(MPID_nem_ofi_req_t));
}
-static inline int MPID_nem_ofi_create_req(MPID_Request ** request, int refcnt)
+static inline int MPID_nem_ofi_create_req(MPIR_Request ** request, int refcnt)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *req;
- req = MPID_Request_create();
- MPIU_Assert(req);
- MPIU_Object_set_ref(req, refcnt);
+ MPIR_Request *req;
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(req);
+ MPIR_Object_set_ref(req, refcnt);
MPID_nem_ofi_init_req(req);
*request = req;
return mpi_errno;
}
+static inline int MPID_nem_ofi_create_req_lw(MPIR_Request ** request, int refcnt)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req;
+
+ MPID_nem_ofi_create_req(&req, refcnt);
+
+ /* resetting the kind and cc here should not add additional
+ * instructions since a good compiler will discard the kind and cc
+ * setting in the above request create anyway */
+ req->kind = MPIR_REQUEST_KIND__SEND;
+ MPIR_cc_set(&req->cc, 0); // request is already completed
+
+ *request = req;
+ return mpi_errno;
+}
/* ************************************************************************** */
/* MPICH Comm Override and Netmod functions */
@@ -263,42 +281,42 @@ static inline int MPID_nem_ofi_create_req(MPID_Request ** request, int refcnt)
_ret _fc_name(__VA_ARGS__); \
_ret _fc_name##_2(__VA_ARGS__);
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_recv_posted, struct MPIDI_VC *vc, struct MPID_Request *req);
-
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_send, struct MPIDI_VC *vc, const void *buf, int count,\
- MPI_Datatype datatype, int dest, int tag, MPID_Comm * comm,\
- int context_offset, struct MPID_Request **request);
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_isend, struct MPIDI_VC *vc, const void *buf, int count,\
- MPI_Datatype datatype, int dest, int tag, MPID_Comm * comm,\
- int context_offset, struct MPID_Request **request);
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_ssend, struct MPIDI_VC *vc, const void *buf, int count,\
- MPI_Datatype datatype, int dest, int tag, MPID_Comm * comm,
- int context_offset, struct MPID_Request **request);
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_issend, struct MPIDI_VC *vc, const void *buf, int count,\
- MPI_Datatype datatype, int dest, int tag, MPID_Comm * comm,\
- int context_offset, struct MPID_Request **request);
-int MPID_nem_ofi_cancel_send(struct MPIDI_VC *vc, struct MPID_Request *sreq);
-int MPID_nem_ofi_cancel_recv(struct MPIDI_VC *vc, struct MPID_Request *rreq);
-
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_iprobe, struct MPIDI_VC *vc, int source, int tag, MPID_Comm * comm,
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_recv_posted, struct MPIDI_VC *vc, struct MPIR_Request *req);
+
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_send, struct MPIDI_VC *vc, const void *buf, MPI_Aint count,\
+ MPI_Datatype datatype, int dest, int tag, MPIR_Comm * comm,\
+ int context_offset, struct MPIR_Request **request);
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_isend, struct MPIDI_VC *vc, const void *buf, MPI_Aint count,\
+ MPI_Datatype datatype, int dest, int tag, MPIR_Comm * comm,\
+ int context_offset, struct MPIR_Request **request);
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_ssend, struct MPIDI_VC *vc, const void *buf, MPI_Aint count,\
+ MPI_Datatype datatype, int dest, int tag, MPIR_Comm * comm,
+ int context_offset, struct MPIR_Request **request);
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_issend, struct MPIDI_VC *vc, const void *buf, MPI_Aint count,\
+ MPI_Datatype datatype, int dest, int tag, MPIR_Comm * comm,\
+ int context_offset, struct MPIR_Request **request);
+int MPID_nem_ofi_cancel_send(struct MPIDI_VC *vc, struct MPIR_Request *sreq);
+int MPID_nem_ofi_cancel_recv(struct MPIDI_VC *vc, struct MPIR_Request *rreq);
+
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_iprobe, struct MPIDI_VC *vc, int source, int tag, MPIR_Comm * comm,
int context_offset, int *flag, MPI_Status * status);
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_improbe,struct MPIDI_VC *vc, int source, int tag, MPID_Comm * comm,
- int context_offset, int *flag, MPID_Request ** message,
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_improbe,struct MPIDI_VC *vc, int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag, MPIR_Request ** message,
MPI_Status * status);
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_anysource_iprobe,int tag, MPID_Comm * comm, int context_offset,
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_anysource_iprobe,int tag, MPIR_Comm * comm, int context_offset,
int *flag, MPI_Status * status);
-DECLARE_TWO_API_SETS(int, MPID_nem_ofi_anysource_improbe,int tag, MPID_Comm * comm, int context_offset,
- int *flag, MPID_Request ** message, MPI_Status * status);
-DECLARE_TWO_API_SETS(void, MPID_nem_ofi_anysource_posted, MPID_Request * rreq);
-
-int MPID_nem_ofi_anysource_matched(MPID_Request * rreq);
-int MPID_nem_ofi_send_data(cq_tagged_entry_t * wc, MPID_Request * sreq);
-int MPID_nem_ofi_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq,
- void *hdr, MPIDI_msg_sz_t hdr_sz);
-int MPID_nem_ofi_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr);
-int MPID_nem_ofi_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
- MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz);
+DECLARE_TWO_API_SETS(int, MPID_nem_ofi_anysource_improbe,int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status);
+DECLARE_TWO_API_SETS(void, MPID_nem_ofi_anysource_posted, MPIR_Request * rreq);
+
+int MPID_nem_ofi_anysource_matched(MPIR_Request * rreq);
+int MPID_nem_ofi_send_data(cq_tagged_entry_t * wc, MPIR_Request * sreq);
+int MPID_nem_ofi_SendNoncontig(MPIDI_VC_t * vc, MPIR_Request * sreq,
+ void *hdr, intptr_t hdr_sz);
+int MPID_nem_ofi_iStartContigMsg(MPIDI_VC_t * vc, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz, MPIR_Request ** sreq_ptr);
+int MPID_nem_ofi_iSendContig(MPIDI_VC_t * vc, MPIR_Request * sreq, void *hdr,
+ intptr_t hdr_sz, void *data, intptr_t data_sz);
/* ************************************************************************** */
/* OFI utility functions : not exposed as a netmod public API */
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c
index 7c445ac..cbfceb0 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c
@@ -53,7 +53,7 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
MPIDI_VC_t *vc;
BEGIN_FUNC(FCNAME);
- MPIU_CHKLMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(2);
compile_time_checking();
/* ------------------------------------------------------------------------ */
@@ -85,7 +85,7 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
hints->rx_attr->msg_order = FI_ORDER_SAS;
hints->ep_attr->mem_tag_format = MEM_TAG_FORMAT;
- MPIU_Assert(pg_p->size < ((1 << MPID_RANK_BITS) - 1));
+ MPIR_Assert(pg_p->size < ((1 << MPID_RANK_BITS) - 1));
/* ------------------------------------------------------------------------ */
/* FI_VERSION provides binary backward and forward compatibility support */
@@ -104,7 +104,7 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
hints->domain_attr->data_progress = FI_PROGRESS_AUTO;
char *provname;
provname = MPIR_CVAR_OFI_USE_PROVIDER?
- MPIU_Strdup(MPIR_CVAR_OFI_USE_PROVIDER):NULL;
+ MPL_strdup(MPIR_CVAR_OFI_USE_PROVIDER):NULL;
hints->fabric_attr->prov_name = provname;
FI_RC(fi_getinfo(fi_version, /* Interface version requested */
NULL, /* Optional name or fabric to resolve */
@@ -124,11 +124,12 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
/* returns a list. see man fi_fabric for details */
/* ------------------------------------------------------------------------ */
dump_and_choose_providers(prov_tagged, &prov_use);
- FI_RC(fi_fabric(prov_use->fabric_attr, /* In: Fabric attributes */
- &gl_data.fabric, /* Out: Fabric descriptor */
- NULL), openfabric); /* Context: fabric events */
+ FI_RC(fi_fabric(prov_use->fabric_attr, /* In: Fabric attributes */
+ &gl_data.fabric, /* Out: Fabric descriptor */
+ NULL), openfabric); /* Context: fabric events */
gl_data.iov_limit = prov_use->tx_attr->iov_limit;
+ gl_data.max_buffered_send = prov_use->tx_attr->inject_size;
gl_data.api_set = API_SET_1;
/* ------------------------------------------------------------------------ */
/* Create the access domain, which is the physical or virtual network or */
@@ -141,7 +142,7 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
/* In this case, we want remote completion to be set by default */
/* ------------------------------------------------------------------------ */
FI_RC(fi_domain(gl_data.fabric, /* In: Fabric object */
- prov_use, /* In: default domain attributes */
+ prov_use, /* In: default domain attributes */
&gl_data.domain, /* Out: domain object */
NULL), opendomain); /* Context: Domain events */
@@ -152,10 +153,10 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
/* completion queues, etc. */
/* see man fi_endpoint for more details */
/* ------------------------------------------------------------------------ */
- FI_RC(fi_endpoint(gl_data.domain, /* In: Domain Object */
- prov_use, /* In: Configuration object */
- &gl_data.endpoint, /* Out: Endpoint Object */
- NULL), openep); /* Context: endpoint events */
+ FI_RC(fi_endpoint(gl_data.domain, /* In: Domain Object */
+ prov_use, /* In: Configuration object */
+ &gl_data.endpoint, /* Out: Endpoint Object */
+ NULL), openep); /* Context: endpoint events */
/* ------------------------------------------------------------------------ */
/* Create the objects that will be bound to the endpoint. */
@@ -170,14 +171,14 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
memset(&cq_attr, 0, sizeof(cq_attr));
cq_attr.format = FI_CQ_FORMAT_TAGGED;
FI_RC(fi_cq_open(gl_data.domain, /* In: Domain Object */
- &cq_attr, /* In: Configuration object */
+ &cq_attr, /* In: Configuration object */
&gl_data.cq, /* Out: CQ Object */
NULL), opencq); /* Context: CQ events */
memset(&av_attr, 0, sizeof(av_attr));
- av_attr.type = FI_AV_MAP; /* Mapped addressing mode */
+ av_attr.type = FI_AV_MAP; /* Mapped addressing mode */
FI_RC(fi_av_open(gl_data.domain, /* In: Domain Object */
- &av_attr, /* In: Configuration object */
+ &av_attr, /* In: Configuration object */
&gl_data.av, /* Out: AV Object */
NULL), avopen); /* Context: AV events */
@@ -197,7 +198,7 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
/* Free providers info */
/* --------------------------- */
if(provname) {
- MPIU_Free(provname);
+ MPL_free(provname);
hints->fabric_attr->prov_name = NULL;
}
@@ -245,16 +246,16 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
/* from KVS and store them in local */
/* table */
/* --------------------------------- */
- MPIU_CHKLMEM_MALLOC(addrs, char *, pg_p->size * gl_data.bound_addrlen, mpi_errno, "addrs");
+ MPIR_CHKLMEM_MALLOC(addrs, char *, pg_p->size * gl_data.bound_addrlen, mpi_errno, "addrs");
for (i = 0; i < pg_p->size; ++i) {
sprintf(key, "OFI-%d", i);
PMI_RC(PMI_KVS_Get(kvsname, key, bc, OFI_KVSAPPSTRLEN), pmi);
- ret = MPIU_Str_get_binary_arg(bc, "OFI",
+ ret = MPL_str_get_binary_arg(bc, "OFI",
(char *) &addrs[i * gl_data.bound_addrlen],
gl_data.bound_addrlen, &len);
- MPIR_ERR_CHKANDJUMP((ret != MPIU_STR_SUCCESS && ret != MPIU_STR_NOMEM) ||
+ MPIR_ERR_CHKANDJUMP((ret != MPL_STR_SUCCESS && ret != MPL_STR_NOMEM) ||
(size_t) len != gl_data.bound_addrlen,
mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
}
@@ -264,15 +265,9 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
/* The addressing mode is "map", so we must provide */
/* storage to store the per destination addresses */
/* ---------------------------------------------------- */
- fi_addrs = MPIU_Malloc(pg_p->size * sizeof(fi_addr_t));
+ fi_addrs = MPL_malloc(pg_p->size * sizeof(fi_addr_t));
FI_RC(fi_av_insert(gl_data.av, addrs, pg_p->size, fi_addrs, 0ULL, NULL), avmap);
- /* ---------------------------------------------------- */
- /* Insert the ANY_SRC address */
- /* ---------------------------------------------------- */
-
- gl_data.any_addr = FI_ADDR_UNSPEC;
-
/* --------------------------------- */
/* Store the direct addresses in */
/* the ranks' respective VCs */
@@ -294,8 +289,8 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
MPIDI_CH3I_NM_OFI_RC(MPID_nem_ofi_cm_init(pg_p, pg_rank));
fn_exit:
if (fi_addrs)
- MPIU_Free(fi_addrs);
- MPIU_CHKLMEM_FREEALL();
+ MPL_free(fi_addrs);
+ MPIR_CHKLMEM_FREEALL();
END_FUNC(FCNAME);
return mpi_errno;
fn_fail:
@@ -341,11 +336,11 @@ static inline int compile_time_checking()
OFI_COMPILE_TIME_ASSERT(sizeof(MPID_nem_ofi_vc_t) <= MPIDI_NEM_VC_NETMOD_AREA_LEN);
OFI_COMPILE_TIME_ASSERT(sizeof(MPID_nem_ofi_req_t) <= MPIDI_NEM_REQ_NETMOD_AREA_LEN);
OFI_COMPILE_TIME_ASSERT(sizeof(iovec_t) == sizeof(MPL_IOV));
- MPIU_Assert(((void *) &(((iovec_t *) 0)->iov_base)) ==
+ MPIR_Assert(((void *) &(((iovec_t *) 0)->iov_base)) ==
((void *) &(((MPL_IOV *) 0)->MPL_IOV_BUF)));
- MPIU_Assert(((void *) &(((iovec_t *) 0)->iov_len)) ==
+ MPIR_Assert(((void *) &(((iovec_t *) 0)->iov_len)) ==
((void *) &(((MPL_IOV *) 0)->MPL_IOV_LEN)));
- MPIU_Assert(sizeof(((iovec_t *) 0)->iov_len) == sizeof(((MPL_IOV *) 0)->MPL_IOV_LEN));
+ MPIR_Assert(sizeof(((iovec_t *) 0)->iov_len) == sizeof(((MPL_IOV *) 0)->MPL_IOV_LEN));
/* ------------------------------------------------------------------------ */
/* Generate the MPICH catalog files */
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_msg.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_msg.c
index 58491ce..47da3c1 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_msg.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_msg.c
@@ -65,8 +65,8 @@
GET_PGID_AND_SET_MATCH(); \
VC_READY_CHECK(vc); \
c = 1; \
- MPID_cc_incr(sreq->cc_ptr, &c); \
- MPID_cc_incr(sreq->cc_ptr, &c); \
+ MPIR_cc_incr(sreq->cc_ptr, &c); \
+ MPIR_cc_incr(sreq->cc_ptr, &c); \
REQ_OFI(sreq)->event_callback = MPID_nem_ofi_data_callback; \
REQ_OFI(sreq)->pack_buffer = pack_buffer; \
REQ_OFI(sreq)->pack_buffer_size = pkt_len; \
@@ -79,7 +79,7 @@
REQ_OFI(cts_req)->event_callback = MPID_nem_ofi_cts_recv_callback; \
REQ_OFI(cts_req)->parent = sreq; \
\
- FI_RC_RETRY(fi_trecv(gl_data.endpoint, \
+ FI_RC_RETRY(fi_trecv(gl_data.endpoint, \
NULL, \
0, \
gl_data.mr, \
@@ -88,7 +88,7 @@
0, /* Exact tag match, no ignore bits */ \
&(REQ_OFI(cts_req)->ofi_context)),trecv); \
if (gl_data.api_set == API_SET_1){ \
- FI_RC_RETRY(fi_tsend(gl_data.endpoint, \
+ FI_RC_RETRY(fi_tsend(gl_data.endpoint, \
&REQ_OFI(sreq)->pack_buffer_size, \
sizeof(REQ_OFI(sreq)->pack_buffer_size), \
gl_data.mr, \
@@ -96,7 +96,7 @@
match_bits, \
&(REQ_OFI(sreq)->ofi_context)),tsend); \
}else{ \
- FI_RC_RETRY(fi_tsenddata(gl_data.endpoint, \
+ FI_RC_RETRY(fi_tsenddata(gl_data.endpoint, \
&REQ_OFI(sreq)->pack_buffer_size, \
sizeof(REQ_OFI(sreq)->pack_buffer_size), \
gl_data.mr, \
@@ -112,59 +112,44 @@
/* General handler for RTS-CTS-Data protocol. Waits for the cc counter */
/* to hit two (send RTS and receive CTS decrementers) before kicking off the*/
/* bulk data transfer. On data send completion, the request can be freed */
+/* Handles SEND-side events only. We cannot rely on wc->tag field being */
+/* set for these events, so we must use the TAG stored in the sreq. */
/* ------------------------------------------------------------------------ */
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_data_callback)
-static int MPID_nem_ofi_data_callback(cq_tagged_entry_t * wc, MPID_Request * sreq)
+static int MPID_nem_ofi_data_callback(cq_tagged_entry_t * wc, MPIR_Request * sreq)
{
int complete = 0, mpi_errno = MPI_SUCCESS;
MPIDI_VC_t *vc;
req_fn reqFn;
uint64_t tag = 0;
BEGIN_FUNC(FCNAME);
- switch (wc->tag & MPID_PROTOCOL_MASK) {
- case MPID_MSG_CTS | MPID_MSG_RTS:
- vc = REQ_OFI(sreq)->vc;
- if(REQ_OFI(sreq)->pack_buffer) {
- FI_RC_RETRY(fi_tsend(gl_data.endpoint,
- REQ_OFI(sreq)->pack_buffer,
- REQ_OFI(sreq)->pack_buffer_size,
- gl_data.mr,
- VC_OFI(vc)->direct_addr,
- wc->tag | MPID_MSG_DATA,
- (void *) &(REQ_OFI(sreq)->ofi_context)), tsend);
- } else {
- struct fi_msg_tagged msg;
- void *desc = NULL;
- msg.msg_iov = REQ_OFI(sreq)->iov;
- msg.desc = &desc;
- msg.iov_count = REQ_OFI(sreq)->iov_count;
- msg.addr = VC_OFI(vc)->direct_addr;
- msg.tag = wc->tag | MPID_MSG_DATA,
- msg.ignore = 0ULL;
- msg.context = &(REQ_OFI(sreq)->ofi_context);
- msg.data = 0ULL;
- FI_RC_RETRY(fi_tsendmsg(gl_data.endpoint,&msg,0ULL),tsend);
- }
- MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(sreq));
-
- break;
+ switch (REQ_OFI(sreq)->tag & MPID_PROTOCOL_MASK) {
case MPID_MSG_CTS | MPID_MSG_RTS | MPID_MSG_DATA:
- if (REQ_OFI(sreq)->pack_buffer)
- MPIU_Free(REQ_OFI(sreq)->pack_buffer);
+ /* Verify request is complete prior to freeing buffers.
+ * Multiple DATA events may arrive because we need
+ * to store updated TAG values in the sreq.
+ */
+ if (MPIR_cc_get(sreq->cc) == 1) {
+ if (REQ_OFI(sreq)->pack_buffer)
+ MPL_free(REQ_OFI(sreq)->pack_buffer);
- if (REQ_OFI(sreq)->real_hdr)
- MPIU_Free(REQ_OFI(sreq)->real_hdr);
+ if (REQ_OFI(sreq)->real_hdr)
+ MPL_free(REQ_OFI(sreq)->real_hdr);
- reqFn = sreq->dev.OnDataAvail;
- if (!reqFn) {
+ reqFn = sreq->dev.OnDataAvail;
+ if (!reqFn) {
+ MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(sreq));
+ }
+ else {
+ vc = REQ_OFI(sreq)->vc;
+ MPIDI_CH3I_NM_OFI_RC(reqFn(vc, sreq, &complete));
+ }
+ gl_data.rts_cts_in_flight--;
+
+ } else {
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(sreq));
}
- else {
- vc = REQ_OFI(sreq)->vc;
- MPIDI_CH3I_NM_OFI_RC(reqFn(vc, sreq, &complete));
- }
- gl_data.rts_cts_in_flight--;
break;
case MPID_MSG_RTS:
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(sreq));
@@ -176,14 +161,47 @@ static int MPID_nem_ofi_data_callback(cq_tagged_entry_t * wc, MPID_Request * sre
/* ------------------------------------------------------------------------ */
/* Signals the CTS has been received. Call MPID_nem_ofi_data_callback on */
/* the parent send request to kick off the bulk data transfer */
+/* Handles RECV-side events only. We rely on wc->tag field being set for */
+/* these events. */
/* ------------------------------------------------------------------------ */
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_cts_recv_callback)
-static int MPID_nem_ofi_cts_recv_callback(cq_tagged_entry_t * wc, MPID_Request * rreq)
+static int MPID_nem_ofi_cts_recv_callback(cq_tagged_entry_t * wc, MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *preq;
+ MPIDI_VC_t *vc;
BEGIN_FUNC(FCNAME);
- MPIDI_CH3I_NM_OFI_RC(MPID_nem_ofi_data_callback(wc, REQ_OFI(rreq)->parent));
+ preq = REQ_OFI(rreq)->parent;
+ switch (wc->tag & MPID_PROTOCOL_MASK) {
+ case MPID_MSG_CTS | MPID_MSG_RTS:
+ vc = REQ_OFI(preq)->vc;
+ /* store tag in the request for SEND-side event processing */
+ REQ_OFI(preq)->tag = wc->tag | MPID_MSG_DATA;
+ if(REQ_OFI(preq)->pack_buffer) {
+ FI_RC_RETRY(fi_tsend(gl_data.endpoint,
+ REQ_OFI(preq)->pack_buffer,
+ REQ_OFI(preq)->pack_buffer_size,
+ gl_data.mr,
+ VC_OFI(vc)->direct_addr,
+ REQ_OFI(preq)->tag,
+ (void *) &(REQ_OFI(preq)->ofi_context)), tsend);
+ } else {
+ struct fi_msg_tagged msg;
+ void *desc = NULL;
+ msg.msg_iov = REQ_OFI(preq)->iov;
+ msg.desc = &desc;
+ msg.iov_count = REQ_OFI(preq)->iov_count;
+ msg.addr = VC_OFI(vc)->direct_addr;
+ msg.tag = REQ_OFI(preq)->tag,
+ msg.ignore = 0ULL;
+ msg.context = &(REQ_OFI(preq)->ofi_context);
+ msg.data = 0ULL;
+ FI_RC_RETRY(fi_tsendmsg(gl_data.endpoint,&msg,0ULL),tsend);
+ }
+ MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(preq));
+ break;
+ }
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(rreq));
END_FUNC_RC(FCNAME);
@@ -196,21 +214,21 @@ static int MPID_nem_ofi_cts_recv_callback(cq_tagged_entry_t * wc, MPID_Request *
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_iSendContig)
int MPID_nem_ofi_iSendContig(MPIDI_VC_t * vc,
- MPID_Request * sreq,
- void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz)
+ MPIR_Request * sreq,
+ void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz)
{
int pgid, c, mpi_errno = MPI_SUCCESS;
char *pack_buffer = NULL;
uint64_t match_bits;
- MPID_Request *cts_req;
- MPIDI_msg_sz_t buf_offset = 0;
+ MPIR_Request *cts_req;
+ intptr_t buf_offset = 0;
size_t pkt_len;
BEGIN_FUNC(FCNAME);
- MPIU_Assert(hdr_sz <= (MPIDI_msg_sz_t) sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= (intptr_t) sizeof(MPIDI_CH3_Pkt_t));
MPID_nem_ofi_init_req(sreq);
pkt_len = sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz + data_sz;
if (sreq->dev.ext_hdr_sz > 0 && gl_data.iov_limit > 2) {
- REQ_OFI(sreq)->real_hdr = MPIU_Malloc(sizeof(MPIDI_CH3_Pkt_t)+sreq->dev.ext_hdr_sz);
+ REQ_OFI(sreq)->real_hdr = MPL_malloc(sizeof(MPIDI_CH3_Pkt_t)+sreq->dev.ext_hdr_sz);
MPIR_ERR_CHKANDJUMP1(REQ_OFI(sreq)->real_hdr == NULL, mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "iSendContig extended header allocation");
REQ_OFI(sreq)->iov[0].iov_base = REQ_OFI(sreq)->real_hdr;
@@ -220,15 +238,15 @@ int MPID_nem_ofi_iSendContig(MPIDI_VC_t * vc,
REQ_OFI(sreq)->iov[2].iov_base = data;
REQ_OFI(sreq)->iov[2].iov_len = data_sz;
REQ_OFI(sreq)->iov_count = 3;
- MPIU_Memcpy(REQ_OFI(sreq)->real_hdr, hdr, hdr_sz);
- MPIU_Memcpy(REQ_OFI(sreq)->real_hdr + sizeof(MPIDI_CH3_Pkt_t),
+ MPIR_Memcpy(REQ_OFI(sreq)->real_hdr, hdr, hdr_sz);
+ MPIR_Memcpy(REQ_OFI(sreq)->real_hdr + sizeof(MPIDI_CH3_Pkt_t),
sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
}
else if(sreq->dev.ext_hdr_sz == 0 && gl_data.iov_limit > 1) {
- REQ_OFI(sreq)->real_hdr = MPIU_Malloc(sizeof(MPIDI_CH3_Pkt_t));
+ REQ_OFI(sreq)->real_hdr = MPL_malloc(sizeof(MPIDI_CH3_Pkt_t));
MPIR_ERR_CHKANDJUMP1(REQ_OFI(sreq)->real_hdr == NULL, mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "iSendContig header allocation");
- MPIU_Memcpy(REQ_OFI(sreq)->real_hdr, hdr, hdr_sz);
+ MPIR_Memcpy(REQ_OFI(sreq)->real_hdr, hdr, hdr_sz);
REQ_OFI(sreq)->iov[0].iov_base = REQ_OFI(sreq)->real_hdr;
REQ_OFI(sreq)->iov[0].iov_len = sizeof(MPIDI_CH3_Pkt_t);
REQ_OFI(sreq)->iov[1].iov_base = data;
@@ -236,16 +254,16 @@ int MPID_nem_ofi_iSendContig(MPIDI_VC_t * vc,
REQ_OFI(sreq)->iov_count = 2;
}
else {
- pack_buffer = MPIU_Malloc(pkt_len);
+ pack_buffer = MPL_malloc(pkt_len);
MPIR_ERR_CHKANDJUMP1(pack_buffer == NULL, mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "iSendContig pack buffer allocation");
- MPIU_Memcpy(pack_buffer, hdr, hdr_sz);
+ MPIR_Memcpy(pack_buffer, hdr, hdr_sz);
buf_offset += sizeof(MPIDI_CH3_Pkt_t);
if (sreq->dev.ext_hdr_sz > 0) {
- MPIU_Memcpy(pack_buffer + buf_offset, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
+ MPIR_Memcpy(pack_buffer + buf_offset, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
buf_offset += sreq->dev.ext_hdr_sz;
}
- MPIU_Memcpy(pack_buffer + buf_offset, data, data_sz);
+ MPIR_Memcpy(pack_buffer + buf_offset, data, data_sz);
}
START_COMM();
END_FUNC_RC(FCNAME);
@@ -254,34 +272,34 @@ int MPID_nem_ofi_iSendContig(MPIDI_VC_t * vc,
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_SendNoncontig)
int MPID_nem_ofi_SendNoncontig(MPIDI_VC_t * vc,
- MPID_Request * sreq, void *hdr, MPIDI_msg_sz_t hdr_sz)
+ MPIR_Request * sreq, void *hdr, intptr_t hdr_sz)
{
int c, pgid, mpi_errno = MPI_SUCCESS;
char *pack_buffer;
MPI_Aint data_sz;
uint64_t match_bits;
- MPID_Request *cts_req;
- MPIDI_msg_sz_t first, last;
- MPIDI_msg_sz_t buf_offset = 0;
+ MPIR_Request *cts_req;
+ intptr_t first, last;
+ intptr_t buf_offset = 0;
void *data = NULL;
size_t pkt_len;
BEGIN_FUNC(FCNAME);
- MPIU_Assert(hdr_sz <= (MPIDI_msg_sz_t) sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= (intptr_t) sizeof(MPIDI_CH3_Pkt_t));
MPID_nem_ofi_init_req(sreq);
first = sreq->dev.segment_first;
last = sreq->dev.segment_size;
data_sz = sreq->dev.segment_size - sreq->dev.segment_first;
pkt_len = sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz + data_sz;
- pack_buffer = MPIU_Malloc(pkt_len);
+ pack_buffer = MPL_malloc(pkt_len);
MPIR_ERR_CHKANDJUMP1(pack_buffer == NULL, mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "SendNonContig pack buffer allocation");
- MPIU_Memcpy(pack_buffer, hdr, hdr_sz);
+ MPIR_Memcpy(pack_buffer, hdr, hdr_sz);
buf_offset += sizeof(MPIDI_CH3_Pkt_t);
if (sreq->dev.ext_hdr_sz > 0) {
- MPIU_Memcpy(pack_buffer + buf_offset, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
+ MPIR_Memcpy(pack_buffer + buf_offset, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
buf_offset += sreq->dev.ext_hdr_sz;
}
- MPID_Segment_pack(sreq->dev.segment_ptr, first, &last, pack_buffer + buf_offset);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, first, &last, pack_buffer + buf_offset);
START_COMM();
MPID_nem_ofi_poll(MPID_NONBLOCKING_POLL);
END_FUNC_RC(FCNAME);
@@ -291,26 +309,26 @@ int MPID_nem_ofi_SendNoncontig(MPIDI_VC_t * vc,
#define FCNAME DECL_FUNC(MPID_nem_ofi_iStartContigMsg)
int MPID_nem_ofi_iStartContigMsg(MPIDI_VC_t * vc,
void *hdr,
- MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz, MPID_Request ** sreq_ptr)
+ intptr_t hdr_sz,
+ void *data, intptr_t data_sz, MPIR_Request ** sreq_ptr)
{
int c, pgid, mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq;
- MPID_Request *cts_req;
+ MPIR_Request *sreq;
+ MPIR_Request *cts_req;
char *pack_buffer = NULL;
uint64_t match_bits;
size_t pkt_len;
BEGIN_FUNC(FCNAME);
- MPIU_Assert(hdr_sz <= (MPIDI_msg_sz_t) sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= (intptr_t) sizeof(MPIDI_CH3_Pkt_t));
MPID_nem_ofi_create_req(&sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = NULL;
sreq->dev.next = NULL;
pkt_len = sizeof(MPIDI_CH3_Pkt_t) + data_sz;
if(gl_data.iov_limit > 1) {
- REQ_OFI(sreq)->real_hdr = MPIU_Malloc(sizeof(MPIDI_CH3_Pkt_t));
- MPIU_Memcpy(REQ_OFI(sreq)->real_hdr, hdr, hdr_sz);
+ REQ_OFI(sreq)->real_hdr = MPL_malloc(sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Memcpy(REQ_OFI(sreq)->real_hdr, hdr, hdr_sz);
REQ_OFI(sreq)->iov[0].iov_base = REQ_OFI(sreq)->real_hdr;
REQ_OFI(sreq)->iov[0].iov_len = sizeof(MPIDI_CH3_Pkt_t);
REQ_OFI(sreq)->iov[1].iov_base = data;
@@ -318,12 +336,12 @@ int MPID_nem_ofi_iStartContigMsg(MPIDI_VC_t * vc,
REQ_OFI(sreq)->iov_count = 2;
}
else {
- pack_buffer = MPIU_Malloc(pkt_len);
+ pack_buffer = MPL_malloc(pkt_len);
MPIR_ERR_CHKANDJUMP1(pack_buffer == NULL, mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "iStartContig pack buffer allocation");
- MPIU_Memcpy((void *) pack_buffer, hdr, hdr_sz);
+ MPIR_Memcpy((void *) pack_buffer, hdr, hdr_sz);
if (data_sz)
- MPIU_Memcpy((void *) (pack_buffer + sizeof(MPIDI_CH3_Pkt_t)), data, data_sz);
+ MPIR_Memcpy((void *) (pack_buffer + sizeof(MPIDI_CH3_Pkt_t)), data, data_sz);
}
START_COMM();
*sreq_ptr = sreq;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_probe_template.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_probe_template.c
index bda3e45..4ee0746 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_probe_template.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_probe_template.c
@@ -1,3 +1,12 @@
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
#if (API_SET != API_SET_1) && (API_SET != API_SET_2)
#error Undefined API SET
#endif
@@ -8,7 +17,7 @@
#undef FCNAME
#define FCNAME DECL_FUNC(peek_callback)
static int
-ADD_SUFFIX(peek_callback)(cq_tagged_entry_t * wc, MPID_Request * rreq)
+ADD_SUFFIX(peek_callback)(cq_tagged_entry_t * wc, MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
@@ -30,19 +39,21 @@ ADD_SUFFIX(peek_callback)(cq_tagged_entry_t * wc, MPID_Request * rreq)
int ADD_SUFFIX(MPID_nem_ofi_iprobe_impl)(struct MPIDI_VC *vc,
int source,
int tag,
- MPID_Comm * comm,
+ MPIR_Comm * comm,
int context_offset,
- int *flag, MPI_Status * status, MPID_Request ** rreq_ptr)
+ int *flag, MPI_Status * status, MPIR_Request ** rreq_ptr)
{
int ret, mpi_errno = MPI_SUCCESS;
fi_addr_t remote_proc = 0;
uint64_t match_bits, mask_bits;
size_t len;
- MPID_Request rreq_s, *rreq;
+ MPIR_Request rreq_s, *rreq;
BEGIN_FUNC(FCNAME);
if (rreq_ptr) {
- MPIDI_Request_create_rreq(rreq, mpi_errno, goto fn_exit);
+ MPIDI_CH3I_NM_OFI_RC(MPID_nem_ofi_create_req(&rreq, 1));
+ rreq->kind = MPIR_REQUEST_KIND__RECV;
+
*rreq_ptr = rreq;
rreq->comm = comm;
rreq->dev.match.parts.rank = source;
@@ -54,6 +65,8 @@ int ADD_SUFFIX(MPID_nem_ofi_iprobe_impl)(struct MPIDI_VC *vc,
rreq = &rreq_s;
rreq->dev.OnDataAvail = NULL;
}
+
+ REQ_OFI(rreq)->pack_buffer = NULL;
REQ_OFI(rreq)->event_callback = ADD_SUFFIX(peek_callback);
REQ_OFI(rreq)->match_state = PEEK_INIT;
OFI_ADDR_INIT(source, vc, remote_proc);
@@ -86,7 +99,7 @@ int ADD_SUFFIX(MPID_nem_ofi_iprobe_impl)(struct MPIDI_VC *vc,
ret = fi_trecvmsg(gl_data.endpoint,&msg,msgflags);
if(ret == -ENOMSG) {
if (rreq_ptr) {
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
*rreq_ptr = NULL;
*flag = 0;
}
@@ -99,7 +112,21 @@ int ADD_SUFFIX(MPID_nem_ofi_iprobe_impl)(struct MPIDI_VC *vc,
while (PEEK_INIT == REQ_OFI(rreq)->match_state)
MPID_nem_ofi_poll(MPID_BLOCKING_POLL);
- *status = rreq->status;
+
+ if (PEEK_NOT_FOUND == REQ_OFI(rreq)->match_state) {
+ if (rreq_ptr) {
+ MPIR_Request_free(rreq);
+ *rreq_ptr = NULL;
+ *flag = 0;
+ }
+ MPID_nem_ofi_poll(MPID_NONBLOCKING_POLL);
+ goto fn_exit;
+ }
+
+ if (status != MPI_STATUS_IGNORE)
+ *status = rreq->status;
+
+ MPIR_Request_add_ref(rreq);
*flag = 1;
END_FUNC_RC(FCNAME);
}
@@ -110,7 +137,7 @@ int ADD_SUFFIX(MPID_nem_ofi_iprobe_impl)(struct MPIDI_VC *vc,
int ADD_SUFFIX(MPID_nem_ofi_iprobe)(struct MPIDI_VC *vc,
int source,
int tag,
- MPID_Comm * comm, int context_offset, int *flag, MPI_Status * status)
+ MPIR_Comm * comm, int context_offset, int *flag, MPI_Status * status)
{
int rc;
BEGIN_FUNC(FCNAME);
@@ -126,19 +153,19 @@ int ADD_SUFFIX(MPID_nem_ofi_iprobe)(struct MPIDI_VC *vc,
int ADD_SUFFIX(MPID_nem_ofi_improbe)(struct MPIDI_VC *vc,
int source,
int tag,
- MPID_Comm * comm,
+ MPIR_Comm * comm,
int context_offset,
- int *flag, MPID_Request ** message, MPI_Status * status)
+ int *flag, MPIR_Request ** message, MPI_Status * status)
{
int old_error = status->MPI_ERROR;
int s;
BEGIN_FUNC(FCNAME);
- *flag = NORMAL_PEEK;
+ *flag = CLAIM_PEEK;
s = ADD_SUFFIX(MPID_nem_ofi_iprobe_impl)(vc, source,
tag, comm, context_offset, flag, status, message);
if (*flag) {
status->MPI_ERROR = old_error;
- (*message)->kind = MPID_REQUEST_MPROBE;
+ (*message)->kind = MPIR_REQUEST_KIND__MPROBE;
}
END_FUNC(FCNAME);
return s;
@@ -147,7 +174,7 @@ int ADD_SUFFIX(MPID_nem_ofi_improbe)(struct MPIDI_VC *vc,
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_anysource_iprobe)
int ADD_SUFFIX(MPID_nem_ofi_anysource_iprobe)(int tag,
- MPID_Comm * comm,
+ MPIR_Comm * comm,
int context_offset, int *flag, MPI_Status * status)
{
int rc;
@@ -162,9 +189,9 @@ int ADD_SUFFIX(MPID_nem_ofi_anysource_iprobe)(int tag,
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_anysource_improbe)
int ADD_SUFFIX(MPID_nem_ofi_anysource_improbe)(int tag,
- MPID_Comm * comm,
+ MPIR_Comm * comm,
int context_offset,
- int *flag, MPID_Request ** message, MPI_Status * status)
+ int *flag, MPIR_Request ** message, MPI_Status * status)
{
int rc;
BEGIN_FUNC(FCNAME);
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_progress.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_progress.c
index 2fe8a69..e35d050 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_progress.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_progress.c
@@ -15,9 +15,9 @@
/* ------------------------------------------------------------------------ */
/* This routine looks up the request that contains a context object */
/* ------------------------------------------------------------------------ */
-static inline MPID_Request *context_to_req(void *ofi_context)
+static inline MPIR_Request *context_to_req(void *ofi_context)
{
- return (MPID_Request *) container_of(ofi_context, MPID_Request, ch.netmod_area.padding);
+ return (MPIR_Request *) MPL_container_of(ofi_context, MPIR_Request, ch.netmod_area.padding);
}
#define ADD_SUFFIX(name) name
@@ -40,7 +40,7 @@ int MPID_nem_ofi_poll(int in_blocking_poll)
cq_tagged_entry_t wc;
cq_err_entry_t error;
MPIDI_VC_t *vc;
- MPID_Request *req;
+ MPIR_Request *req;
req_fn reqFn;
BEGIN_FUNC(FCNAME);
do {
@@ -65,7 +65,7 @@ int MPID_nem_ofi_poll(int in_blocking_poll)
reqFn = req->dev.OnDataAvail;
if (reqFn) {
if (REQ_OFI(req)->pack_buffer) {
- MPIU_Free(REQ_OFI(req)->pack_buffer);
+ MPL_free(REQ_OFI(req)->pack_buffer);
}
vc = REQ_OFI(req)->vc;
@@ -74,11 +74,11 @@ int MPID_nem_ofi_poll(int in_blocking_poll)
continue;
}
else {
- MPIU_Assert(0);
+ MPIR_Assert(0);
}
}
else {
- MPIU_Assert(0);
+ MPIR_Assert(0);
}
}
else if (ret == -FI_EAGAIN)
@@ -94,10 +94,10 @@ int MPID_nem_ofi_poll(int in_blocking_poll)
/* Other kinds of requests, this is fatal. */
/* ----------------------------------------------------- */
req = context_to_req(error.op_context);
- if (req->kind == MPID_REQUEST_SEND) {
+ if (req->kind == MPIR_REQUEST_KIND__SEND) {
mpi_errno = REQ_OFI(req)->event_callback(NULL, req);
}
- else if (req->kind == MPID_REQUEST_RECV) {
+ else if (req->kind == MPIR_REQUEST_KIND__RECV) {
mpi_errno = REQ_OFI(req)->event_callback(&wc, req);
req->status.MPI_ERROR = MPI_ERR_TRUNCATE;
req->status.MPI_TAG = error.tag;
@@ -110,6 +110,10 @@ int MPID_nem_ofi_poll(int in_blocking_poll)
req = context_to_req(error.op_context);
MPIR_STATUS_SET_CANCEL_BIT(req->status, TRUE);
}
+ else if (error.err == FI_ENOMSG) {
+ req = context_to_req(error.op_context);
+ REQ_OFI(req)->match_state = PEEK_NOT_FOUND;
+ }
else {
mpi_errno = MPI_ERR_OTHER;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tag_layout.h b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tag_layout.h
index d925d74..e3f0320 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tag_layout.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tag_layout.h
@@ -13,7 +13,7 @@
*
*********************************************************************************/
#define MPID_PROTOCOL_MASK (0x00000000F0000000ULL)
-#define MPID_CONTEXT_MASK (0x0000FFFF00000000ULL)
+#define MPIR_CONTEXT_MASK (0x0000FFFF00000000ULL)
#define MPID_SOURCE_MASK (0xFFFF000000000000ULL)
#define MPID_TAG_MASK (0x000000000FFFFFFFULL)
#define MPID_PGID_MASK (0xFFFFFFFF00000000ULL)
@@ -39,7 +39,7 @@
/* ******************************** */
/* Tag Manipulation inlines */
/* ******************************** */
-static inline uint64_t init_sendtag(MPIU_Context_id_t contextid, int source, int tag, uint64_t type)
+static inline uint64_t init_sendtag(MPIR_Context_id_t contextid, int source, int tag, uint64_t type)
{
uint64_t match_bits = 0;
match_bits |= ((uint64_t)source) << MPID_SOURCE_SHIFT;
@@ -50,7 +50,7 @@ static inline uint64_t init_sendtag(MPIU_Context_id_t contextid, int source, int
/* receive posting */
static inline uint64_t init_recvtag(uint64_t * mask_bits,
- MPIU_Context_id_t contextid, int source, int tag)
+ MPIR_Context_id_t contextid, int source, int tag)
{
uint64_t match_bits = 0;
*mask_bits = MPID_SYNC_SEND;
@@ -112,7 +112,7 @@ static inline int get_port(uint64_t match_bits)
/* ******************************** */
/* Tag Manipulation inlines */
/* ******************************** */
-static inline uint64_t init_sendtag_2(MPIU_Context_id_t contextid, int tag, uint64_t type)
+static inline uint64_t init_sendtag_2(MPIR_Context_id_t contextid, int tag, uint64_t type)
{
uint64_t match_bits = 0;
match_bits |= ((uint64_t)contextid) << MPID_CTXID_SHIFT;
@@ -122,7 +122,7 @@ static inline uint64_t init_sendtag_2(MPIU_Context_id_t contextid, int tag, uint
/* receive posting */
static inline uint64_t init_recvtag_2(uint64_t * mask_bits,
- MPIU_Context_id_t contextid, int tag)
+ MPIR_Context_id_t contextid, int tag)
{
uint64_t match_bits = 0;
*mask_bits = MPID_SYNC_SEND;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged.c
index fe62b02..3d0d99d 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged.c
@@ -10,13 +10,17 @@
#include "ofi_impl.h"
#define MPID_NORMAL_SEND 0
+
+#define MPID_CREATE_REQ 0
+#define MPID_DONT_CREATE_REQ 1
+
static inline int
MPID_nem_ofi_sync_recv_callback(cq_tagged_entry_t * wc ATTRIBUTE((unused)),
- MPID_Request * rreq);
+ MPIR_Request * rreq);
static inline int
MPID_nem_ofi_send_callback(cq_tagged_entry_t * wc ATTRIBUTE((unused)),
- MPID_Request * sreq);
+ MPIR_Request * sreq);
#define ADD_SUFFIX(name) name
#undef API_SET
@@ -34,7 +38,7 @@ MPID_nem_ofi_send_callback(cq_tagged_entry_t * wc ATTRIBUTE((unused)),
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_sync_recv_callback)
static inline int MPID_nem_ofi_sync_recv_callback(cq_tagged_entry_t * wc ATTRIBUTE((unused)),
- MPID_Request * rreq)
+ MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
@@ -54,12 +58,12 @@ static inline int MPID_nem_ofi_sync_recv_callback(cq_tagged_entry_t * wc ATTRIBU
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_send_callback)
static inline int MPID_nem_ofi_send_callback(cq_tagged_entry_t * wc ATTRIBUTE((unused)),
- MPID_Request * sreq)
+ MPIR_Request * sreq)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
if (REQ_OFI(sreq)->pack_buffer)
- MPIU_Free(REQ_OFI(sreq)->pack_buffer);
+ MPL_free(REQ_OFI(sreq)->pack_buffer);
MPIDI_CH3I_NM_OFI_RC(MPID_Request_complete(sreq));
END_FUNC_RC(FCNAME);
}
@@ -90,14 +94,14 @@ static inline int MPID_nem_ofi_send_callback(cq_tagged_entry_t * wc ATTRIBUTE((u
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_cancel_send)
-int MPID_nem_ofi_cancel_send(struct MPIDI_VC *vc ATTRIBUTE((unused)), struct MPID_Request *sreq)
+int MPID_nem_ofi_cancel_send(struct MPIDI_VC *vc ATTRIBUTE((unused)), struct MPIR_Request *sreq)
{
DO_CANCEL(sreq);
}
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_cancel_recv)
-int MPID_nem_ofi_cancel_recv(struct MPIDI_VC *vc ATTRIBUTE((unused)), struct MPID_Request *rreq)
+int MPID_nem_ofi_cancel_recv(struct MPIDI_VC *vc ATTRIBUTE((unused)), struct MPIR_Request *rreq)
{
DO_CANCEL(rreq);
}
@@ -105,7 +109,7 @@ int MPID_nem_ofi_cancel_recv(struct MPIDI_VC *vc ATTRIBUTE((unused)), struct MPI
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_anysource_matched)
-int MPID_nem_ofi_anysource_matched(MPID_Request * rreq)
+int MPID_nem_ofi_anysource_matched(MPIR_Request * rreq)
{
int matched = FALSE;
int ret;
@@ -125,7 +129,7 @@ int MPID_nem_ofi_anysource_matched(MPID_Request * rreq)
* to clean up tmp space.
*/
if (REQ_OFI(rreq)->pack_buffer) {
- MPIU_Free(REQ_OFI(rreq)->pack_buffer);
+ MPL_free(REQ_OFI(rreq)->pack_buffer);
}
matched = FALSE;
}else{
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged_template.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged_template.c
index 20db939..c02c5f2 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged_template.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_tagged_template.c
@@ -1,3 +1,12 @@
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
#if (API_SET != API_SET_1) && (API_SET != API_SET_2)
#error Undefined API SET
#endif
@@ -10,13 +19,13 @@
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_recv_callback)
static inline
-int ADD_SUFFIX(MPID_nem_ofi_recv_callback)(cq_tagged_entry_t * wc, MPID_Request * rreq)
+int ADD_SUFFIX(MPID_nem_ofi_recv_callback)(cq_tagged_entry_t * wc, MPIR_Request * rreq)
{
int err0, err1, src, mpi_errno = MPI_SUCCESS;
uint64_t ssend_bits;
- MPIDI_msg_sz_t sz;
+ intptr_t sz;
MPIDI_VC_t *vc;
- MPID_Request *sync_req;
+ MPIR_Request *sync_req;
BEGIN_FUNC(FCNAME);
/* ---------------------------------------------------- */
/* Populate the MPI Status and unpack noncontig buffer */
@@ -39,7 +48,7 @@ int ADD_SUFFIX(MPID_nem_ofi_recv_callback)(cq_tagged_entry_t * wc, MPID_Request
MPI_BYTE, &err0, rreq->dev.user_buf,
rreq->dev.user_count, rreq->dev.datatype, &sz, &err1);
MPIR_STATUS_SET_COUNT(rreq->status, sz);
- MPIU_Free(REQ_OFI(rreq)->pack_buffer);
+ MPL_free(REQ_OFI(rreq)->pack_buffer);
if (err0 || err1) {
rreq->status.MPI_ERROR = MPI_ERR_TYPE;
}
@@ -55,7 +64,7 @@ int ADD_SUFFIX(MPID_nem_ofi_recv_callback)(cq_tagged_entry_t * wc, MPID_Request
vc = REQ_OFI(rreq)->vc;
if (!vc) { /* MPI_ANY_SOURCE -- Post message from status, complete the VC */
vc = rreq->comm->dev.vcrt->vcr_table[src];
- MPIU_Assert(vc);
+ MPIR_Assert(vc);
}
#if API_SET == API_SET_1
ssend_bits = init_sendtag(rreq->dev.match.parts.context_id,
@@ -95,34 +104,27 @@ int ADD_SUFFIX(MPID_nem_ofi_recv_callback)(cq_tagged_entry_t * wc, MPID_Request
END_FUNC_RC(FCNAME);
}
-
#undef FCNAME
-#define FCNAME DECL_FUNC(do_isend)
-static inline int
-ADD_SUFFIX(do_isend)(struct MPIDI_VC *vc,
- const void *buf,
- int count,
- MPI_Datatype datatype,
- int dest,
- int tag,
- MPID_Comm * comm,
- int context_offset, struct MPID_Request **request, uint64_t type)
+#define FCNAME DECL_FUNC(send_normal)
+static inline int ADD_SUFFIX(send_normal)(struct MPIDI_VC *vc,
+ const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm,
+ int context_offset, MPIR_Request **request,
+ int dt_contig,
+ intptr_t data_sz,
+ MPIR_Datatype *dt_ptr,
+ MPI_Aint dt_true_lb,
+ uint64_t send_type)
{
- int err0, err1, dt_contig, mpi_errno = MPI_SUCCESS;
+ int err0, err1, mpi_errno = MPI_SUCCESS;
char *send_buffer;
uint64_t match_bits, ssend_match, ssend_mask;
- MPI_Aint dt_true_lb;
- MPID_Request *sreq = NULL, *sync_req = NULL;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr;
- BEGIN_FUNC(FCNAME);
- VC_READY_CHECK(vc);
-
+ MPIR_Request *sreq = NULL, *sync_req = NULL;
/* ---------------------------------------------------- */
/* Create the MPI request */
/* ---------------------------------------------------- */
MPID_nem_ofi_create_req(&sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = NULL;
REQ_OFI(sreq)->event_callback = MPID_nem_ofi_send_callback;
REQ_OFI(sreq)->vc = vc;
@@ -132,16 +134,15 @@ ADD_SUFFIX(do_isend)(struct MPIDI_VC *vc,
/* a send request */
/* ---------------------------------------------------- */
#if API_SET == API_SET_1
- match_bits = init_sendtag(comm->context_id + context_offset, comm->rank, tag, type);
+ match_bits = init_sendtag(comm->context_id + context_offset, comm->rank, tag, send_type);
#elif API_SET == API_SET_2
- match_bits = init_sendtag_2(comm->context_id + context_offset, tag, type);
+ match_bits = init_sendtag_2(comm->context_id + context_offset, tag, send_type);
#endif
sreq->dev.match.parts.tag = match_bits;
- MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
send_buffer = (char *) buf + dt_true_lb;
if (!dt_contig) {
- send_buffer = (char *) MPIU_Malloc(data_sz);
+ send_buffer = (char *) MPL_malloc(data_sz);
MPIR_ERR_CHKANDJUMP1(send_buffer == NULL, mpi_errno,
MPI_ERR_OTHER, "**nomem", "**nomem %s", "Send buffer alloc");
MPIDI_CH3U_Buffer_copy(buf, count, datatype, &err0,
@@ -149,14 +150,14 @@ ADD_SUFFIX(do_isend)(struct MPIDI_VC *vc,
REQ_OFI(sreq)->pack_buffer = send_buffer;
}
- if (type == MPID_SYNC_SEND) {
+ if (send_type == MPID_SYNC_SEND) {
/* ---------------------------------------------------- */
/* For syncronous send, we post a receive to catch the */
/* match ack, but use the tag protocol bits to avoid */
/* matching with MPI level messages. */
/* ---------------------------------------------------- */
int c = 1;
- MPID_cc_incr(sreq->cc_ptr, &c);
+ MPIR_cc_incr(sreq->cc_ptr, &c);
MPID_nem_ofi_create_req(&sync_req, 1);
sync_req->dev.OnDataAvail = NULL;
sync_req->dev.next = NULL;
@@ -168,47 +169,153 @@ ADD_SUFFIX(do_isend)(struct MPIDI_VC *vc,
ssend_match = init_recvtag_2(&ssend_mask, comm->context_id + context_offset, tag);
#endif
ssend_match |= MPID_SYNC_SEND_ACK;
- FI_RC_RETRY(fi_trecv(gl_data.endpoint, /* endpoint */
- NULL, /* recvbuf */
- 0, /* data sz */
- gl_data.mr, /* dynamic mr */
- VC_OFI(vc)->direct_addr, /* remote proc */
- ssend_match, /* match bits */
- 0ULL, /* mask bits */
+ FI_RC_RETRY(fi_trecv(gl_data.endpoint, /* endpoint */
+ NULL, /* recvbuf */
+ 0, /* data sz */
+ gl_data.mr, /* dynamic mr */
+ VC_OFI(vc)->direct_addr, /* remote proc */
+ ssend_match, /* match bits */
+ 0ULL, /* mask bits */
&(REQ_OFI(sync_req)->ofi_context)), trecv);
}
+
+ if (data_sz <= gl_data.max_buffered_send) {
#if API_SET == API_SET_1
- FI_RC_RETRY(fi_tsend(gl_data.endpoint, /* Endpoint */
+ FI_RC_RETRY(fi_tinject(gl_data.endpoint,
#elif API_SET == API_SET_2
- FI_RC_RETRY(fi_tsenddata(gl_data.endpoint, /* Endpoint */
+ FI_RC_RETRY(fi_tinjectdata(gl_data.endpoint,
#endif
- send_buffer, /* Send buffer(packed or user) */
- data_sz, /* Size of the send */
- gl_data.mr, /* Dynamic memory region */
+ send_buffer,
+ data_sz,
#if API_SET == API_SET_2
- comm->rank,
+ comm->rank,
#endif
- VC_OFI(vc)->direct_addr, /* Use the address of this VC */
- match_bits, /* Match bits */
- &(REQ_OFI(sreq)->ofi_context)), tsend);
+ VC_OFI(vc)->direct_addr,
+ match_bits), tinject);
+ MPID_nem_ofi_send_callback(NULL, sreq);
+ }
+ else
+#if API_SET == API_SET_1
+ FI_RC_RETRY(fi_tsend(gl_data.endpoint, /* Endpoint */
+#elif API_SET == API_SET_2
+ FI_RC_RETRY(fi_tsenddata(gl_data.endpoint, /* Endpoint */
+#endif
+ send_buffer, /* Send buffer(packed or user) */
+ data_sz, /* Size of the send */
+ gl_data.mr, /* Dynamic memory region */
+#if API_SET == API_SET_2
+ comm->rank,
+#endif
+ VC_OFI(vc)->direct_addr, /* Use the address of this VC */
+ match_bits, /* Match bits */
+ &(REQ_OFI(sreq)->ofi_context)), tsend);
+
*request = sreq;
- END_FUNC_RC(FCNAME);
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(send_lightweight)
+static inline int
+ADD_SUFFIX(send_lightweight)(struct MPIDI_VC *vc,
+ const void *buf,
+ intptr_t data_sz,
+ int rank,
+ int tag,
+ MPIR_Comm *comm,
+ int context_offset)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+#if API_SET == API_SET_1
+ uint64_t match_bits = init_sendtag(comm->context_id + context_offset, comm->rank, tag, MPID_NORMAL_SEND);
+#elif API_SET == API_SET_2
+ uint64_t match_bits = init_sendtag_2(comm->context_id + context_offset, tag, MPID_NORMAL_SEND);
+#endif
+
+ MPIR_Assert(data_sz <= gl_data.max_buffered_send);
+
+#if API_SET == API_SET_1
+ FI_RC_RETRY(fi_tinject(gl_data.endpoint,
+#elif API_SET == API_SET_2
+ FI_RC_RETRY(fi_tinjectdata(gl_data.endpoint,
+#endif
+ buf,
+ data_sz,
+#if API_SET == API_SET_2
+ comm->rank,
+#endif
+ VC_OFI(vc)->direct_addr,
+ match_bits), tinject);
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(do_isend)
+static inline int
+ADD_SUFFIX(do_isend)(struct MPIDI_VC *vc,
+ const void *buf,
+ MPI_Aint count,
+ MPI_Datatype datatype,
+ int dest,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ struct MPIR_Request **request,
+ int should_create_req,
+ uint64_t send_type)
+{
+ int dt_contig, mpi_errno = MPI_SUCCESS;
+ MPI_Aint dt_true_lb;
+ intptr_t data_sz;
+ MPIR_Datatype *dt_ptr;
+ BEGIN_FUNC(FCNAME);
+
+ VC_READY_CHECK(vc);
+ *request = NULL;
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ if (likely((send_type != MPID_SYNC_SEND) &&
+ dt_contig &&
+ (data_sz <= gl_data.max_buffered_send)))
+ {
+ if (should_create_req == MPID_CREATE_REQ)
+ MPID_nem_ofi_create_req_lw(request, 1);
+
+ mpi_errno = ADD_SUFFIX(send_lightweight)(vc, (char *) buf + dt_true_lb, data_sz,
+ dest, tag, comm, context_offset);
+ }
+ else
+ mpi_errno = ADD_SUFFIX(send_normal)(vc, buf, count, datatype, dest, tag, comm,
+ context_offset, request, dt_contig,
+ data_sz, dt_ptr, dt_true_lb, send_type);
+
+ END_FUNC_RC(MPID_STATE_DO_ISEND);
}
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_send)
int ADD_SUFFIX(MPID_nem_ofi_send)(struct MPIDI_VC *vc,
const void *buf,
- int count,
+ MPI_Aint count,
MPI_Datatype datatype,
int dest,
- int tag, MPID_Comm * comm, int context_offset, struct MPID_Request **request)
+ int tag, MPIR_Comm * comm, int context_offset, struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
mpi_errno = ADD_SUFFIX(do_isend)(vc, buf, count, datatype, dest, tag,
- comm, context_offset, request, MPID_NORMAL_SEND);
+ comm, context_offset, request, MPID_DONT_CREATE_REQ, MPID_NORMAL_SEND);
END_FUNC(FCNAME);
return mpi_errno;
}
@@ -217,15 +324,15 @@ int ADD_SUFFIX(MPID_nem_ofi_send)(struct MPIDI_VC *vc,
#define FCNAME DECL_FUNC(MPID_nem_ofi_isend)
int ADD_SUFFIX(MPID_nem_ofi_isend)(struct MPIDI_VC *vc,
const void *buf,
- int count,
+ MPI_Aint count,
MPI_Datatype datatype,
int dest,
- int tag, MPID_Comm * comm, int context_offset, struct MPID_Request **request)
+ int tag, MPIR_Comm * comm, int context_offset, struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
mpi_errno = ADD_SUFFIX(do_isend)(vc, buf, count, datatype, dest,
- tag, comm, context_offset, request, MPID_NORMAL_SEND);
+ tag, comm, context_offset, request, MPID_CREATE_REQ, MPID_NORMAL_SEND);
END_FUNC(FCNAME);
return mpi_errno;
}
@@ -234,15 +341,15 @@ int ADD_SUFFIX(MPID_nem_ofi_isend)(struct MPIDI_VC *vc,
#define FCNAME DECL_FUNC(MPID_nem_ofi_ssend)
int ADD_SUFFIX(MPID_nem_ofi_ssend)(struct MPIDI_VC *vc,
const void *buf,
- int count,
+ MPI_Aint count,
MPI_Datatype datatype,
int dest,
- int tag, MPID_Comm * comm, int context_offset, struct MPID_Request **request)
+ int tag, MPIR_Comm * comm, int context_offset, struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
mpi_errno = ADD_SUFFIX(do_isend)(vc, buf, count, datatype, dest,
- tag, comm, context_offset, request, MPID_SYNC_SEND);
+ tag, comm, context_offset, request, MPID_CREATE_REQ, MPID_SYNC_SEND);
END_FUNC(FCNAME);
return mpi_errno;
}
@@ -251,16 +358,16 @@ int ADD_SUFFIX(MPID_nem_ofi_ssend)(struct MPIDI_VC *vc,
#define FCNAME DECL_FUNC(MPID_nem_ofi_issend)
int ADD_SUFFIX(MPID_nem_ofi_issend)(struct MPIDI_VC *vc,
const void *buf,
- int count,
+ MPI_Aint count,
MPI_Datatype datatype,
int dest,
int tag,
- MPID_Comm * comm, int context_offset, struct MPID_Request **request)
+ MPIR_Comm * comm, int context_offset, struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
- mpi_errno = do_isend(vc, buf, count, datatype, dest,
- tag, comm, context_offset, request, MPID_SYNC_SEND);
+ mpi_errno = ADD_SUFFIX(do_isend)(vc, buf, count, datatype, dest,
+ tag, comm, context_offset, request, MPID_CREATE_REQ, MPID_SYNC_SEND);
END_FUNC(FCNAME);
return mpi_errno;
}
@@ -268,22 +375,24 @@ int ADD_SUFFIX(MPID_nem_ofi_issend)(struct MPIDI_VC *vc,
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_recv_posted)
-int ADD_SUFFIX(MPID_nem_ofi_recv_posted)(struct MPIDI_VC *vc, struct MPID_Request *rreq)
+int ADD_SUFFIX(MPID_nem_ofi_recv_posted)(struct MPIDI_VC *vc, struct MPIR_Request *rreq)
{
int mpi_errno = MPI_SUCCESS, dt_contig, src, tag;
uint64_t match_bits = 0, mask_bits = 0;
fi_addr_t remote_proc = 0;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPI_Aint dt_true_lb;
- MPID_Datatype *dt_ptr;
- MPIU_Context_id_t context_id;
+ MPIDU_Datatype*dt_ptr;
+ MPIR_Context_id_t context_id;
char *recv_buffer;
BEGIN_FUNC(FCNAME);
/* ------------------------ */
/* Initialize the request */
/* ------------------------ */
- MPID_nem_ofi_init_req(rreq);
+ if (REQ_OFI(rreq)->match_state != PEEK_FOUND)
+ MPID_nem_ofi_init_req(rreq);
+
REQ_OFI(rreq)->event_callback = ADD_SUFFIX(MPID_nem_ofi_recv_callback);
REQ_OFI(rreq)->vc = vc;
@@ -306,7 +415,7 @@ int ADD_SUFFIX(MPID_nem_ofi_recv_posted)(struct MPIDI_VC *vc, struct MPID_Reques
recv_buffer = (char *) rreq->dev.user_buf + dt_true_lb;
}
else {
- recv_buffer = (char *) MPIU_Malloc(data_sz);
+ recv_buffer = (char *) MPL_malloc(data_sz);
MPIR_ERR_CHKANDJUMP1(recv_buffer == NULL, mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "Recv Pack Buffer alloc");
REQ_OFI(rreq)->pack_buffer = recv_buffer;
@@ -320,10 +429,12 @@ int ADD_SUFFIX(MPID_nem_ofi_recv_posted)(struct MPIDI_VC *vc, struct MPID_Reques
msg_tagged_t msg;
iov.iov_base = recv_buffer;
iov.iov_len = data_sz;
- if(REQ_OFI(rreq)->match_state == PEEK_FOUND)
- msgflags = FI_CLAIM;
+ if (REQ_OFI(rreq)->match_state == PEEK_FOUND) {
+ msgflags = FI_CLAIM;
+ REQ_OFI(rreq)->match_state = PEEK_INIT;
+ }
else
- msgflags = 0ULL;
+ msgflags = 0ULL;
msg.msg_iov = &iov;
msg.desc = NULL;
@@ -340,11 +451,11 @@ int ADD_SUFFIX(MPID_nem_ofi_recv_posted)(struct MPIDI_VC *vc, struct MPID_Reques
#undef FCNAME
#define FCNAME DECL_FUNC(MPID_nem_ofi_anysource_posted)
-void ADD_SUFFIX(MPID_nem_ofi_anysource_posted)(MPID_Request * rreq)
+void ADD_SUFFIX(MPID_nem_ofi_anysource_posted)(MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
BEGIN_FUNC(FCNAME);
mpi_errno = ADD_SUFFIX(MPID_nem_ofi_recv_posted)(NULL, rreq);
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
END_FUNC(FCNAME);
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/.state-cache b/src/mpid/ch3/channels/nemesis/netmod/portals4/.state-cache
index aaaf677..c2459e5 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/.state-cache
@@ -1,18 +1,22 @@
<dir>
-<file name="ptl_init.c" info="1447123141"/>
-<file name="ptl_lmt.c" info="1447123141"/>
-<file name="ptl_send.c" info="1447123141"/>
-<file name="ptl_nm.c" info="1447123141"/>
-<file name="ptl_recv.c" info="1447123141"/>
-<file name="rptl_op.c" info="1447123141"/>
-<file name="ptl_impl.h" info="1447123141"/>
-<file name="rptl.c" info="1447123141"/>
-<file name="rptl.h" info="1447123141"/>
-<file name="ptl_probe.c" info="1447123141"/>
-<file name="rptl_init.c" info="1447123141"/>
-<file name="ptl_poll.c" info="1447123141"/>
+<file name="rptl_op.c" info="1478973152"/>
+<file name="ptl_init.c" info="1478973152"/>
+<file name="ptl_impl.h" info="1478973152"/>
+<file name="ptl_recv.c" info="1478973152"/>
+<file name="ptl_send.c" info="1478973152"/>
+<file name="ptl_nm.c" info="1478973152"/>
+<file name="rptl.h" info="1478973152"/>
+<file name="rptl.c" info="1478973152"/>
+<file name="rptl_init.c" info="1478973152"/>
+<file name="ptl_probe.c" info="1478973152"/>
+<file name="ptl_poll.c" info="1478973152"/>
+<file name="ptl_lmt.c" info="1478973152"/>
</dir>
<data>
+<fileinfo name="rptl_op.c">
+MPID_STATE_RPTLI_OP_ALLOC rptli_op_alloc
+MPID_STATE_RPTLI_OP_FREE rptli_op_free
+</fileinfo>
<fileinfo name="ptl_init.c">
MPID_STATE_MPID_NEM_GET_TARGET_INFO get_target_info
MPID_STATE_PTL_INIT ptl_init
@@ -25,7 +29,22 @@ MPID_STATE_VC_TERMINATE vc_terminate
MPID_NEM_PTL_VC_TERMINATED MPID_nem_ptl_vc_terminated
MPID_STATE_MPID_NEM_PTL_INIT_ID MPID_nem_ptl_init_id
</fileinfo>
-<fileinfo name="ptl_lmt.c">
+<fileinfo name="ptl_impl.h">
+</fileinfo>
+<fileinfo name="ptl_recv.c">
+MPID_STATE_HANDLER_RECV_COMPLETE handler_recv_complete
+MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE handler_recv_dequeue_complete
+MPID_STATE_HANDLER_RECV_UNPACK handler_recv_big_get
+MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE handler_recv_unpack_complete
+MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE handler_recv_dequeue_unpack_complete
+MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE handler_recv_dequeue_large
+MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE handler_recv_dequeue_unpack_large
+MPID_STATE_MPID_NEM_PTL_RECV_POSTED MPID_nem_ptl_recv_posted
+MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED MPID_nem_ptl_anysource_posted
+MPID_STATE_CANCEL_RECV cancel_recv
+MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED MPID_nem_ptl_anysource_matched
+MPID_STATE_MPID_NEM_PTL_CANCEL_RECV MPID_nem_ptl_cancel_recv
+MPID_STATE_MPID_NEM_PTL_LMT_START_RECV MPID_nem_ptl_lmt_start_recv
</fileinfo>
<fileinfo name="ptl_send.c">
MPID_STATE_HANDLER_SEND handler_send
@@ -45,26 +64,7 @@ MPID_STATE_MPID_NEM_PTL_ISENDCONTIG MPID_nem_ptl_iSendContig
MPID_STATE_ON_DATA_AVAIL on_data_avail
MPID_STATE_MPID_NEM_PTL_NM_CTL_EVENT_HANDLER MPID_nem_ptl_nm_ctl_event_handler
</fileinfo>
-<fileinfo name="ptl_recv.c">
-MPID_STATE_HANDLER_RECV_COMPLETE handler_recv_complete
-MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE handler_recv_dequeue_complete
-MPID_STATE_HANDLER_RECV_UNPACK handler_recv_big_get
-MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE handler_recv_unpack_complete
-MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE handler_recv_dequeue_unpack_complete
-MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE handler_recv_dequeue_large
-MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE handler_recv_dequeue_unpack_large
-MPID_STATE_MPID_NEM_PTL_RECV_POSTED MPID_nem_ptl_recv_posted
-MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED MPID_nem_ptl_anysource_posted
-MPID_STATE_CANCEL_RECV cancel_recv
-MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED MPID_nem_ptl_anysource_matched
-MPID_STATE_MPID_NEM_PTL_CANCEL_RECV MPID_nem_ptl_cancel_recv
-MPID_STATE_MPID_NEM_PTL_LMT_START_RECV MPID_nem_ptl_lmt_start_recv
-</fileinfo>
-<fileinfo name="rptl_op.c">
-MPID_STATE_RPTLI_OP_ALLOC rptli_op_alloc
-MPID_STATE_RPTLI_OP_FREE rptli_op_free
-</fileinfo>
-<fileinfo name="ptl_impl.h">
+<fileinfo name="rptl.h">
</fileinfo>
<fileinfo name="rptl.c">
MPID_STATE_FIND_TARGET find_target
@@ -77,7 +77,12 @@ MPID_STATE_GET_EVENT_INFO get_event_info
MPID_STATE_STASH_EVENT stash_event
MPID_STATE_MPID_NEM_PTL_RPTL_EQGET MPID_nem_ptl_rptl_eqget
</fileinfo>
-<fileinfo name="rptl.h">
+<fileinfo name="rptl_init.c">
+MPID_STATE_RPTLI_POST_CONTROL_BUFFER rptli_post_control_buffer
+MPID_STATE_MPID_NEM_PTL_RPTL_INIT MPID_nem_ptl_rptl_init
+MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE MPID_nem_ptl_rptl_drain_eq
+MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT MPID_nem_ptl_rptl_ptinit
+MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI MPID_nem_ptl_rptl_ptfini
</fileinfo>
<fileinfo name="ptl_probe.c">
MPID_STATE_HANDLE_PROBE handle_probe
@@ -86,17 +91,12 @@ MPID_STATE_MPID_NEM_PTL_IMPROBE MPID_nem_ptl_improbe
MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IPROBE MPID_nem_ptl_anysource_iprobe
MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IMPROBE MPID_nem_ptl_anysource_improbe
</fileinfo>
-<fileinfo name="rptl_init.c">
-MPID_STATE_RPTLI_POST_CONTROL_BUFFER rptli_post_control_buffer
-MPID_STATE_MPID_NEM_PTL_RPTL_INIT MPID_nem_ptl_rptl_init
-MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE MPID_nem_ptl_rptl_drain_eq
-MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT MPID_nem_ptl_rptl_ptinit
-MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI MPID_nem_ptl_rptl_ptfini
-</fileinfo>
<fileinfo name="ptl_poll.c">
MPID_STATE_MPID_NEM_PTL_POLL_INIT MPID_nem_ptl_poll_init
MPID_STATE_MPID_NEM_PTL_POLL_FINALIZE MPID_nem_ptl_poll_finalize
MPID_STATE_APPEND_OVERFLOW append_overflow
MPID_STATE_MPID_NEM_PTL_POLL MPID_nem_ptl_poll
</fileinfo>
+<fileinfo name="ptl_lmt.c">
+</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
index 43f6020..15f6638 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
@@ -44,13 +44,13 @@ typedef struct {
int put_done;
void *recv_ptr; /* used for reordering in ptl_nm */
void *chunk_buffer[MPID_NEM_PTL_NUM_CHUNK_BUFFERS];
- MPIDI_msg_sz_t bytes_put;
+ intptr_t bytes_put;
int found; /* used in probes with PtlMESearch() */
event_handler_fn event_handler;
} MPID_nem_ptl_req_area;
/* macro for ptl private in req */
-static inline MPID_nem_ptl_req_area * REQ_PTL(MPID_Request *req) {
+static inline MPID_nem_ptl_req_area * REQ_PTL(MPIR_Request *req) {
return (MPID_nem_ptl_req_area *)req->ch.netmod_area.padding;
}
@@ -68,9 +68,9 @@ static inline MPID_nem_ptl_req_area * REQ_PTL(MPID_Request *req) {
} while (0)
#define MPID_nem_ptl_request_create_sreq(sreq_, errno_, comm_) do { \
- (sreq_) = MPID_Request_create(); \
- MPIU_Object_set_ref((sreq_), 2); \
- (sreq_)->kind = MPID_REQUEST_SEND; \
+ (sreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED); \
+ MPIR_Object_set_ref((sreq_), 2); \
+ (sreq_)->kind = MPIR_REQUEST_KIND__SEND; \
MPIR_Comm_add_ref(comm_); \
(sreq_)->comm = comm_; \
(sreq_)->status.MPI_ERROR = MPI_SUCCESS; \
@@ -86,7 +86,7 @@ typedef struct {
ptl_pt_index_t ptrg;
ptl_pt_index_t ptrc;
int id_initialized; /* TRUE iff id and pt have been initialized */
- MPIDI_msg_sz_t num_queued_sends; /* number of reqs for this vc in sendq */
+ intptr_t num_queued_sends; /* number of reqs for this vc in sendq */
} MPID_nem_ptl_vc_area;
/* macro for ptl private in VC */
@@ -141,11 +141,11 @@ int MPID_nem_ptl_nm_init(void);
int MPID_nem_ptl_nm_finalize(void);
int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e);
int MPID_nem_ptl_sendq_complete_with_error(MPIDI_VC_t *vc, int req_errno);
-int MPID_nem_ptl_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz);
-int MPID_nem_ptl_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz,
- MPID_Request **sreq_ptr);
-int MPID_nem_ptl_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz);
+int MPID_nem_ptl_SendNoncontig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *hdr, intptr_t hdr_sz);
+int MPID_nem_ptl_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz,
+ MPIR_Request **sreq_ptr);
+int MPID_nem_ptl_iSendContig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz);
int MPID_nem_ptl_poll_init(void);
int MPID_nem_ptl_poll_finalize(void);
int MPID_nem_ptl_poll(int is_blocking_poll);
@@ -154,41 +154,43 @@ int MPID_nem_ptl_get_id_from_bc(const char *business_card, ptl_process_t *id, pt
ptl_pt_index_t *ptc, ptl_pt_index_t *ptr, ptl_pt_index_t *ptrg, ptl_pt_index_t *ptrc);
/* comm override functions */
-int MPID_nem_ptl_recv_posted(struct MPIDI_VC *vc, struct MPID_Request *req);
+int MPID_nem_ptl_recv_posted(struct MPIDI_VC *vc, struct MPIR_Request *req);
/* isend is also used to implement send, rsend and irsend */
int MPID_nem_ptl_isend(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm, int context_offset, struct MPID_Request **request);
+ MPIR_Comm *comm, int context_offset, struct MPIR_Request **request);
/* issend is also used to implement ssend */
int MPID_nem_ptl_issend(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm, int context_offset, struct MPID_Request **request);
-int MPID_nem_ptl_cancel_send(struct MPIDI_VC *vc, struct MPID_Request *sreq);
-int MPID_nem_ptl_cancel_recv(struct MPIDI_VC *vc, struct MPID_Request *rreq);
-int MPID_nem_ptl_probe(struct MPIDI_VC *vc, int source, int tag, MPID_Comm *comm, int context_offset, MPI_Status *status);
-int MPID_nem_ptl_iprobe(struct MPIDI_VC *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag,
+ MPIR_Comm *comm, int context_offset, struct MPIR_Request **request);
+int MPID_nem_ptl_cancel_send(struct MPIDI_VC *vc, struct MPIR_Request *sreq);
+int MPID_nem_ptl_cancel_recv(struct MPIDI_VC *vc, struct MPIR_Request *rreq);
+int MPID_nem_ptl_probe(struct MPIDI_VC *vc, int source, int tag, MPIR_Comm *comm, int context_offset, MPI_Status *status);
+int MPID_nem_ptl_iprobe(struct MPIDI_VC *vc, int source, int tag, MPIR_Comm *comm, int context_offset, int *flag,
MPI_Status *status);
-int MPID_nem_ptl_improbe(struct MPIDI_VC *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag,
- MPID_Request **message, MPI_Status *status);
-int MPID_nem_ptl_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag, MPI_Status * status);
-int MPID_nem_ptl_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag, MPID_Request **message,
+int MPID_nem_ptl_improbe(struct MPIDI_VC *vc, int source, int tag, MPIR_Comm *comm, int context_offset, int *flag,
+ MPIR_Request **message, MPI_Status *status);
+int MPID_nem_ptl_anysource_iprobe(int tag, MPIR_Comm * comm, int context_offset, int *flag, MPI_Status * status);
+int MPID_nem_ptl_anysource_improbe(int tag, MPIR_Comm * comm, int context_offset, int *flag, MPIR_Request **message,
MPI_Status * status);
-void MPID_nem_ptl_anysource_posted(MPID_Request *rreq);
-int MPID_nem_ptl_anysource_matched(MPID_Request *rreq);
+void MPID_nem_ptl_anysource_posted(MPIR_Request *rreq);
+int MPID_nem_ptl_anysource_matched(MPIR_Request *rreq);
int MPID_nem_ptl_init_id(MPIDI_VC_t *vc);
int MPID_nem_ptl_get_ordering(int *ordering);
-int MPID_nem_ptl_lmt_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPID_Request *req);
-int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_cookie);
-int MPID_nem_ptl_lmt_start_send(MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV r_cookie);
-int MPID_nem_ptl_lmt_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_cookie);
-int MPID_nem_ptl_lmt_done_send(MPIDI_VC_t *vc, MPID_Request *req);
-int MPID_nem_ptl_lmt_done_recv(MPIDI_VC_t *vc, MPID_Request *req);
+int MPID_nem_ptl_lmt_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPIR_Request *req);
+int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPIR_Request *rreq, MPL_IOV s_cookie);
+int MPID_nem_ptl_lmt_start_send(MPIDI_VC_t *vc, MPIR_Request *sreq, MPL_IOV r_cookie);
+int MPID_nem_ptl_lmt_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV s_cookie);
+int MPID_nem_ptl_lmt_done_send(MPIDI_VC_t *vc, MPIR_Request *req);
+int MPID_nem_ptl_lmt_done_recv(MPIDI_VC_t *vc, MPIR_Request *req);
/* packet handlers */
int MPID_nem_ptl_pkt_cancel_send_req_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp);
int MPID_nem_ptl_pkt_cancel_send_resp_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp);
/* local packet types */
@@ -221,10 +223,10 @@ const char *MPID_nem_ptl_strnifail(ptl_ni_fail_t ni_fail);
const char *MPID_nem_ptl_strlist(ptl_list_t list);
#define DBG_MSG_PUT(md_, data_sz_, pg_rank_, match_, header_) do { \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "MPID_nem_ptl_rptl_put: md=%s data_sz=%lu pg_rank=%d", md_, data_sz_, pg_rank_)); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx", \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "MPID_nem_ptl_rptl_put: md=%s data_sz=%lu pg_rank=%d", md_, data_sz_, pg_rank_)); \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx", \
NPTL_MATCH_GET_TAG(match_), NPTL_MATCH_GET_CTX(match_), NPTL_MATCH_GET_RANK(match_), match_)); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, " flags=%c%c%c data_sz=%ld header=%#lx", \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, " flags=%c%c%c data_sz=%ld header=%#lx", \
header_ & NPTL_SSEND ? 'S':' ', \
header_ & NPTL_LARGE ? 'L':' ', \
header_ & NPTL_MULTIPLE ? 'M':' ', \
@@ -232,22 +234,22 @@ const char *MPID_nem_ptl_strlist(ptl_list_t list);
} while(0)
#define DBG_MSG_GET(md_, data_sz_, pg_rank_, match_) do { \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlGet: md=%s data_sz=%lu pg_rank=%d", md_, data_sz_, pg_rank_)); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx", \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "PtlGet: md=%s data_sz=%lu pg_rank=%d", md_, data_sz_, pg_rank_)); \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx", \
NPTL_MATCH_GET_TAG(match_), NPTL_MATCH_GET_CTX(match_), NPTL_MATCH_GET_RANK(match_), match_)); \
} while(0)
#define DBG_MSG_MEAPPEND(pt_, pg_rank_, me_, usr_ptr_) do { \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlMEAppend: pt=%s pg_rank=%d me.start=%p me.length=%lu is_IOV=%d usr_ptr=%p", \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "PtlMEAppend: pt=%s pg_rank=%d me.start=%p me.length=%lu is_IOV=%d usr_ptr=%p", \
pt_, pg_rank_, me_.start, me_.length, me_.options & PTL_IOVEC, usr_ptr_)); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx ignore=%#lx", \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx ignore=%#lx", \
NPTL_MATCH_GET_TAG(me_.match_bits), NPTL_MATCH_GET_CTX(me_.match_bits), \
NPTL_MATCH_GET_RANK(me_.match_bits), me_.match_bits, me_.ignore_bits)); \
} while(0)
#define DBG_MSG_MESearch(pt_, pg_rank_, me_, usr_ptr_) do { \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlMESearch: pt=%s pg_rank=%d usr_ptr=%p", pt_, pg_rank_, usr_ptr_)); \
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx ignore=%#lx", \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "PtlMESearch: pt=%s pg_rank=%d usr_ptr=%p", pt_, pg_rank_, usr_ptr_)); \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, " tag=%#lx ctx=%#lx rank=%ld match=%#lx ignore=%#lx", \
NPTL_MATCH_GET_TAG(me_.match_bits), NPTL_MATCH_GET_CTX(me_.match_bits), \
NPTL_MATCH_GET_RANK(me_.match_bits), me_.match_bits, me_.ignore_bits)); \
} while(0)
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c
index 52fe111..49b1311 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c
@@ -88,7 +88,8 @@ static MPIDI_Comm_ops_t comm_ops = {
MPID_nem_ptl_probe, /* probe */
MPID_nem_ptl_iprobe, /* iprobe */
- MPID_nem_ptl_improbe /* improbe */
+ MPID_nem_ptl_improbe, /* improbe */
+ NULL /* imrecv */
};
static MPIDI_CH3_PktHandler_Fcn *MPID_nem_ptl_pkt_handlers[2]; /* for CANCEL_SEND_REQ and CANCEL_SEND_RESP */
@@ -103,9 +104,9 @@ static int get_target_info(int rank, ptl_process_t *id, ptl_pt_index_t local_dat
int mpi_errno = MPI_SUCCESS;
struct MPIDI_VC *vc;
MPID_nem_ptl_vc_area *vc_ptl;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_GET_TARGET_INFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_GET_TARGET_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_GET_TARGET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_GET_TARGET_INFO);
MPIDI_PG_Get_vc(MPIDI_Process.my_pg, rank, &vc);
vc_ptl = VC_PTL(vc);
@@ -116,7 +117,7 @@ static int get_target_info(int rank, ptl_process_t *id, ptl_pt_index_t local_dat
*id = vc_ptl->id;
- MPIU_Assert(local_data_pt == MPIDI_nem_ptl_pt || local_data_pt == MPIDI_nem_ptl_get_pt ||
+ MPIR_Assert(local_data_pt == MPIDI_nem_ptl_pt || local_data_pt == MPIDI_nem_ptl_get_pt ||
local_data_pt == MPIDI_nem_ptl_control_pt);
if (local_data_pt == MPIDI_nem_ptl_pt) {
@@ -133,7 +134,7 @@ static int get_target_info(int rank, ptl_process_t *id, ptl_pt_index_t local_dat
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_GET_TARGET_INFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_GET_TARGET_INFO);
return mpi_errno;
fn_fail:
@@ -151,19 +152,19 @@ static int ptl_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max
int ret;
ptl_md_t md;
ptl_ni_limits_t desired;
- MPIDI_STATE_DECL(MPID_STATE_PTL_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PTL_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_PTL_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PTL_INIT);
/* first make sure that our private fields in the vc and req fit into the area provided */
- MPIU_Assert(sizeof(MPID_nem_ptl_vc_area) <= MPIDI_NEM_VC_NETMOD_AREA_LEN);
- MPIU_Assert(sizeof(MPID_nem_ptl_req_area) <= MPIDI_NEM_REQ_NETMOD_AREA_LEN);
+ MPIR_Assert(sizeof(MPID_nem_ptl_vc_area) <= MPIDI_NEM_VC_NETMOD_AREA_LEN);
+ MPIR_Assert(sizeof(MPID_nem_ptl_req_area) <= MPIDI_NEM_REQ_NETMOD_AREA_LEN);
/* Make sure our IOV is the same as portals4's IOV */
- MPIU_Assert(sizeof(ptl_iovec_t) == sizeof(MPL_IOV));
- MPIU_Assert(((void*)&(((ptl_iovec_t*)0)->iov_base)) == ((void*)&(((MPL_IOV*)0)->MPL_IOV_BUF)));
- MPIU_Assert(((void*)&(((ptl_iovec_t*)0)->iov_len)) == ((void*)&(((MPL_IOV*)0)->MPL_IOV_LEN)));
- MPIU_Assert(sizeof(((ptl_iovec_t*)0)->iov_len) == sizeof(((MPL_IOV*)0)->MPL_IOV_LEN));
+ MPIR_Assert(sizeof(ptl_iovec_t) == sizeof(MPL_IOV));
+ MPIR_Assert(((void*)&(((ptl_iovec_t*)0)->iov_base)) == ((void*)&(((MPL_IOV*)0)->MPL_IOV_BUF)));
+ MPIR_Assert(((void*)&(((ptl_iovec_t*)0)->iov_len)) == ((void*)&(((MPL_IOV*)0)->MPL_IOV_LEN)));
+ MPIR_Assert(sizeof(((ptl_iovec_t*)0)->iov_len) == sizeof(((MPL_IOV*)0)->MPL_IOV_LEN));
mpi_errno = MPIDI_CH3I_Register_anysource_notification(MPID_nem_ptl_anysource_posted, MPID_nem_ptl_anysource_matched);
@@ -285,7 +286,7 @@ static int ptl_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_PTL_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PTL_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -300,8 +301,8 @@ static int ptl_finalize(void)
int mpi_errno = MPI_SUCCESS;
int ret;
ptl_handle_eq_t eqs[5];
- MPIDI_STATE_DECL(MPID_STATE_PTL_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_PTL_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PTL_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PTL_FINALIZE);
/* shut down other modules */
mpi_errno = MPID_nem_ptl_nm_finalize();
@@ -352,7 +353,7 @@ static int ptl_finalize(void)
PtlFini();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_PTL_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PTL_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -368,66 +369,66 @@ static int ptl_finalize(void)
static int get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p)
{
int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
+ int str_errno = MPL_STR_SUCCESS;
int ret;
ptl_process_t my_ptl_id;
- MPIDI_STATE_DECL(MPID_STATE_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_GET_BUSINESS_CARD);
- MPIDI_FUNC_ENTER(MPID_STATE_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_GET_BUSINESS_CARD);
ret = PtlGetId(MPIDI_nem_ptl_ni, &my_ptl_id);
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlgetid", "**ptlgetid %s", MPID_nem_ptl_strerror(ret));
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "Allocated NI and PT id=(%#x,%#x) pt=%#x",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "Allocated NI and PT id=(%#x,%#x) pt=%#x",
my_ptl_id.phys.nid, my_ptl_id.phys.pid, MPIDI_nem_ptl_pt));
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, NID_KEY, (char *)&my_ptl_id.phys.nid, sizeof(my_ptl_id.phys.nid));
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, NID_KEY, (char *)&my_ptl_id.phys.nid, sizeof(my_ptl_id.phys.nid));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, PID_KEY, (char *)&my_ptl_id.phys.pid, sizeof(my_ptl_id.phys.pid));
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, PID_KEY, (char *)&my_ptl_id.phys.pid, sizeof(my_ptl_id.phys.pid));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, PTI_KEY, (char *)&MPIDI_nem_ptl_pt, sizeof(MPIDI_nem_ptl_pt));
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, PTI_KEY, (char *)&MPIDI_nem_ptl_pt, sizeof(MPIDI_nem_ptl_pt));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, PTIG_KEY, (char *)&MPIDI_nem_ptl_get_pt,
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, PTIG_KEY, (char *)&MPIDI_nem_ptl_get_pt,
sizeof(MPIDI_nem_ptl_get_pt));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, PTIC_KEY, (char *)&MPIDI_nem_ptl_control_pt,
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, PTIC_KEY, (char *)&MPIDI_nem_ptl_control_pt,
sizeof(MPIDI_nem_ptl_control_pt));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, PTIR_KEY, (char *)&MPIDI_nem_ptl_rpt_pt,
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, PTIR_KEY, (char *)&MPIDI_nem_ptl_rpt_pt,
sizeof(MPIDI_nem_ptl_rpt_pt));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, PTIRG_KEY, (char *)&MPIDI_nem_ptl_get_rpt_pt,
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, PTIRG_KEY, (char *)&MPIDI_nem_ptl_get_rpt_pt,
sizeof(MPIDI_nem_ptl_get_rpt_pt));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_binary_arg(bc_val_p, val_max_sz_p, PTIRC_KEY, (char *)&MPIDI_nem_ptl_control_rpt_pt,
+ str_errno = MPL_str_add_binary_arg(bc_val_p, val_max_sz_p, PTIRC_KEY, (char *)&MPIDI_nem_ptl_control_rpt_pt,
sizeof(MPIDI_nem_ptl_control_rpt_pt));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_GET_BUSINESS_CARD);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -440,14 +441,14 @@ static int get_business_card(int my_rank, char **bc_val_p, int *val_max_sz_p)
static int connect_to_root(const char *business_card, MPIDI_VC_t *new_vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECT_TO_ROOT);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECT_TO_ROOT);
MPIR_ERR_SETFATAL(mpi_errno, MPI_ERR_OTHER, "**notimpl");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECT_TO_ROOT);
return mpi_errno;
fn_fail:
@@ -463,9 +464,9 @@ static int vc_init(MPIDI_VC_t *vc)
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *const vc_ch = &vc->ch;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
- MPIDI_STATE_DECL(MPID_STATE_VC_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_VC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_VC_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_VC_INIT);
vc->sendNoncontig_fn = MPID_nem_ptl_SendNoncontig;
vc_ch->iStartContigMsg = MPID_nem_ptl_iStartContigMsg;
@@ -495,7 +496,7 @@ static int vc_init(MPIDI_VC_t *vc)
mpi_errno = MPID_nem_ptl_init_id(vc);
- MPIDI_FUNC_EXIT(MPID_STATE_VC_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_VC_INIT);
return mpi_errno;
}
@@ -522,36 +523,36 @@ int MPID_nem_ptl_get_id_from_bc(const char *business_card, ptl_process_t *id, pt
int mpi_errno = MPI_SUCCESS;
int ret;
int len;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_GET_ID_FROM_BC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_GET_ID_FROM_BC);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_GET_ID_FROM_BC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_GET_ID_FROM_BC);
- ret = MPIU_Str_get_binary_arg(business_card, NID_KEY, (char *)&id->phys.nid, sizeof(id->phys.nid), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(id->phys.nid), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, NID_KEY, (char *)&id->phys.nid, sizeof(id->phys.nid), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(id->phys.nid), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
- ret = MPIU_Str_get_binary_arg(business_card, PID_KEY, (char *)&id->phys.pid, sizeof(id->phys.pid), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(id->phys.pid), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, PID_KEY, (char *)&id->phys.pid, sizeof(id->phys.pid), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(id->phys.pid), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
- ret = MPIU_Str_get_binary_arg(business_card, PTI_KEY, (char *)pt, sizeof(*pt), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(*pt), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, PTI_KEY, (char *)pt, sizeof(*pt), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(*pt), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
- ret = MPIU_Str_get_binary_arg(business_card, PTIG_KEY, (char *)ptg, sizeof(*ptg), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(*ptg), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, PTIG_KEY, (char *)ptg, sizeof(*ptg), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(*ptg), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
- ret = MPIU_Str_get_binary_arg(business_card, PTIC_KEY, (char *)ptc, sizeof(*ptc), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(*ptc), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, PTIC_KEY, (char *)ptc, sizeof(*ptc), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(*ptc), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
- ret = MPIU_Str_get_binary_arg(business_card, PTIR_KEY, (char *)ptr, sizeof(*ptr), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(*ptr), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, PTIR_KEY, (char *)ptr, sizeof(*ptr), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(*ptr), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
- ret = MPIU_Str_get_binary_arg(business_card, PTIRG_KEY, (char *)ptrg, sizeof(*ptrg), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(*ptrg), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, PTIRG_KEY, (char *)ptrg, sizeof(*ptrg), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(*ptrg), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
- ret = MPIU_Str_get_binary_arg(business_card, PTIRC_KEY, (char *)ptrc, sizeof(*ptrc), &len);
- MPIR_ERR_CHKANDJUMP(ret != MPIU_STR_SUCCESS || len != sizeof(*ptrc), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
+ ret = MPL_str_get_binary_arg(business_card, PTIRC_KEY, (char *)ptrc, sizeof(*ptrc), &len);
+ MPIR_ERR_CHKANDJUMP(ret != MPL_STR_SUCCESS || len != sizeof(*ptrc), mpi_errno, MPI_ERR_OTHER, "**badbusinesscard");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_GET_ID_FROM_BC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_GET_ID_FROM_BC);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -566,9 +567,9 @@ int vc_terminate(MPIDI_VC_t *vc)
int mpi_errno = MPI_SUCCESS;
int req_errno = MPI_SUCCESS;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
- MPIDI_STATE_DECL(MPID_STATE_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_VC_TERMINATE);
- MPIDI_FUNC_ENTER(MPID_STATE_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_VC_TERMINATE);
if (vc->state != MPIDI_VC_STATE_CLOSED) {
/* VC is terminated as a result of a fault. Complete
@@ -586,7 +587,7 @@ int vc_terminate(MPIDI_VC_t *vc)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_VC_TERMINATE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -602,18 +603,18 @@ int MPID_nem_ptl_vc_terminated(MPIDI_VC_t *vc)
/* This is called when the VC is to be terminated once all queued
sends have been sent. */
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_NEM_PTL_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_NEM_PTL_VC_TERMINATED);
- MPIDI_FUNC_ENTER(MPID_NEM_PTL_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_NEM_PTL_VC_TERMINATED);
mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED);
if(mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_NEM_PTL_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_NEM_PTL_VC_TERMINATED);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -628,14 +629,14 @@ int MPID_nem_ptl_init_id(MPIDI_VC_t *vc)
char *bc;
int pmi_errno;
int val_max_sz;
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_INIT_ID);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_INIT_ID);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_INIT_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_INIT_ID);
pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
- MPIU_CHKLMEM_MALLOC(bc, char *, val_max_sz, mpi_errno, "bc");
+ MPIR_CHKLMEM_MALLOC(bc, char *, val_max_sz, mpi_errno, "bc");
mpi_errno = vc->pg->getConnInfo(vc->pg_rank, bc, val_max_sz, vc->pg);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -648,8 +649,8 @@ int MPID_nem_ptl_init_id(MPIDI_VC_t *vc)
MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_INIT_ID);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_INIT_ID);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_lmt.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_lmt.c
index a6f08ed..c9ed406 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_lmt.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_lmt.c
@@ -12,7 +12,7 @@
#define FUNCNAME MPID_nem_ptl_lmt_initiate_lmt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_lmt_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPID_Request *req)
+int MPID_nem_ptl_lmt_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPIR_Request *req)
{
/* Nothing to do here, but has to be defined for CH3 to follow the right path to
MPID_nem_ptl_lmt_start_recv */
@@ -22,7 +22,7 @@ int MPID_nem_ptl_lmt_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPID
/* The following function is implemented in ptl_recv.c to make use of the handlers defined there */
-/* int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_cookie) */
+/* int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPIR_Request *rreq, MPL_IOV s_cookie) */
@@ -30,9 +30,9 @@ int MPID_nem_ptl_lmt_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *rts_pkt, MPID
#define FUNCNAME MPID_nem_ptl_lmt_start_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_lmt_start_send(MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV r_cookie)
+int MPID_nem_ptl_lmt_start_send(MPIDI_VC_t *vc, MPIR_Request *sreq, MPL_IOV r_cookie)
{
- MPIU_Assertp(0 && "This function shouldn't be called.");
+ MPIR_Assertp(0 && "This function shouldn't be called.");
return MPI_ERR_INTERN;
}
@@ -41,9 +41,9 @@ int MPID_nem_ptl_lmt_start_send(MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV r_co
#define FUNCNAME MPID_nem_ptl_lmt_handle_cookie
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_lmt_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_cookie)
+int MPID_nem_ptl_lmt_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV s_cookie)
{
- MPIU_Assertp(0 && "This function shouldn't be called.");
+ MPIR_Assertp(0 && "This function shouldn't be called.");
return MPI_ERR_INTERN;
}
@@ -52,9 +52,9 @@ int MPID_nem_ptl_lmt_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_
#define FUNCNAME MPID_nem_ptl_lmt_done_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_lmt_done_send(MPIDI_VC_t *vc, MPID_Request *req)
+int MPID_nem_ptl_lmt_done_send(MPIDI_VC_t *vc, MPIR_Request *req)
{
- MPIU_Assertp(0 && "This function shouldn't be called.");
+ MPIR_Assertp(0 && "This function shouldn't be called.");
return MPI_ERR_INTERN;
}
@@ -63,8 +63,8 @@ int MPID_nem_ptl_lmt_done_send(MPIDI_VC_t *vc, MPID_Request *req)
#define FUNCNAME MPID_nem_ptl_lmt_done_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_lmt_done_recv(MPIDI_VC_t *vc, MPID_Request *req)
+int MPID_nem_ptl_lmt_done_recv(MPIDI_VC_t *vc, MPIR_Request *req)
{
- MPIU_Assertp(0 && "This function shouldn't be called.");
+ MPIR_Assertp(0 && "This function shouldn't be called.");
return MPI_ERR_INTERN;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c
index b5a8d38..825cfea 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2012 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -25,7 +25,7 @@ static ptl_handle_me_t get_me_handle;
/* AUX STUFF FOR REORDERING LOGIC */
-static GENERIC_Q_DECL(struct MPID_Request) reorder_queue;
+static GENERIC_Q_DECL(struct MPIR_Request) reorder_queue;
static char *expected_recv_ptr, *max_recv_ptr[NUM_RECV_BUFS];
static int expected_recv_idx;
@@ -48,13 +48,13 @@ static inline void incr_expected_recv_ptr(size_t size)
#define FUNCNAME handle_request
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int handle_request(MPID_Request *req)
+static inline int handle_request(MPIR_Request *req)
{
int mpi_errno = MPID_nem_handle_pkt(req->ch.vc, TMPBUF(req), REQ_PTL(req)->bytes_put);
incr_expected_recv_ptr(REQ_PTL(req)->bytes_put);
/* Free resources */
- MPIU_Free(TMPBUF(req));
- MPID_Request_release(req);
+ MPL_free(TMPBUF(req));
+ MPIR_Request_free(req);
return mpi_errno;
}
@@ -64,19 +64,19 @@ static inline int handle_request(MPID_Request *req)
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline int progress_reorder(void)
{
- MPID_Request *req;
+ MPIR_Request *req;
int mpi_errno = MPI_SUCCESS;
GENERIC_Q_SEARCH_REMOVE(&reorder_queue,
REQ_PTL(_e)->recv_ptr == expected_recv_ptr,
- &req, MPID_Request, dev.next);
+ &req, MPIR_Request, dev.next);
while (req) {
mpi_errno = handle_request(req);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
GENERIC_Q_SEARCH_REMOVE(&reorder_queue,
REQ_PTL(_e)->recv_ptr == expected_recv_ptr,
- &req, MPID_Request, dev.next);
+ &req, MPIR_Request, dev.next);
}
fn_exit:
return mpi_errno;
@@ -96,9 +96,9 @@ int MPID_nem_ptl_nm_init(void)
int i;
int ret;
char *tmp_ptr;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_NM_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_NM_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_NM_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_NM_INIT);
/* init recv */
overflow_me.length = BUFSIZE;
@@ -113,7 +113,7 @@ int MPID_nem_ptl_nm_init(void)
overflow_me.min_free = PTL_MAX_EAGER;
/* allocate all overflow space at once */
- tmp_ptr = MPIU_Malloc(NUM_RECV_BUFS * BUFSIZE);
+ tmp_ptr = MPL_malloc(NUM_RECV_BUFS * BUFSIZE);
expected_recv_ptr = tmp_ptr;
expected_recv_idx = 0;
@@ -148,7 +148,7 @@ int MPID_nem_ptl_nm_init(void)
reorder_queue.head = reorder_queue.tail = NULL;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_NM_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_NM_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -163,9 +163,9 @@ int MPID_nem_ptl_nm_finalize(void)
int mpi_errno = MPI_SUCCESS;
int ret;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_NM_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_NM_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_NM_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_NM_FINALIZE);
for (i = 0; i < NUM_RECV_BUFS; ++i) {
ret = PtlMEUnlink(me_handles[i]);
@@ -178,10 +178,10 @@ int MPID_nem_ptl_nm_finalize(void)
MPID_nem_ptl_strerror(ret));
/* Freeing first element because the allocation was a single contiguous buffer */
- MPIU_Free(recvbufs[0]);
+ MPL_free(recvbufs[0]);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_NM_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_NM_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -191,8 +191,8 @@ int MPID_nem_ptl_nm_finalize(void)
#define FUNCNAME send_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_sz_t data_sz,
- MPID_Request *sreq)
+static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, intptr_t data_sz,
+ MPIR_Request *sreq)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
@@ -202,18 +202,18 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_
const size_t remaining = data_sz - sent_sz;
const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz+sreq->dev.ext_hdr_sz+(remaining?sizeof(ptl_size_t):0));
ptl_match_bits_t match_bits = NPTL_MATCH(sreq->handle, CTL_TAG, MPIDI_Process.my_pg_rank);
- MPIDI_STATE_DECL(MPID_STATE_SEND_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_SEND_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_PKT);
- sendbuf = MPIU_Malloc(sendbuf_sz);
- MPIU_Assert(sendbuf != NULL);
- MPIU_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t));
+ sendbuf = MPL_malloc(sendbuf_sz);
+ MPIR_Assert(sendbuf != NULL);
+ MPIR_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t));
sendbuf_ptr = sendbuf + sizeof(MPIDI_CH3_Pkt_t);
if (sreq->dev.ext_hdr_sz > 0) {
/* copy extended packet header to send buf */
- MPIU_Memcpy(sendbuf_ptr, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
+ MPIR_Memcpy(sendbuf_ptr, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
sendbuf_ptr += sreq->dev.ext_hdr_sz;
}
@@ -222,7 +222,7 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_
REQ_PTL(sreq)->put_done = 0;
if (data_sz) {
- MPIU_Memcpy(sendbuf_ptr, data_p, sent_sz);
+ MPIR_Memcpy(sendbuf_ptr, data_p, sent_sz);
sendbuf_ptr += sent_sz;
if (remaining) {
/* The address/offset for the remote side to do the get is last in the buffer */
@@ -241,14 +241,14 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_
vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, NPTL_HEADER(0, remaining));
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s",
MPID_nem_ptl_strerror(ret));
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)",
sendbuf_sz, vc_ptl->id.phys.nid,
vc_ptl->id.phys.pid, vc_ptl->ptc));
vc_ptl->num_queued_sends++;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SEND_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_PKT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -258,7 +258,7 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_
#define FUNCNAME send_noncontig_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
+static int send_noncontig_pkt(MPIDI_VC_t *vc, MPIR_Request *sreq, void *hdr_p)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
@@ -269,17 +269,17 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
const size_t remaining = data_sz - sent_sz;
const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz+sreq->dev.ext_hdr_sz+(remaining?sizeof(ptl_size_t):0));
ptl_match_bits_t match_bits = NPTL_MATCH(sreq->handle, CTL_TAG, MPIDI_Process.my_pg_rank);
- MPIDI_STATE_DECL(MPID_STATE_SEND_NONCONTIG_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_SEND_NONCONTIG_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_NONCONTIG_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_NONCONTIG_PKT);
- sendbuf = MPIU_Malloc(sendbuf_sz);
- MPIU_Assert(sendbuf != NULL);
- MPIU_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t));
+ sendbuf = MPL_malloc(sendbuf_sz);
+ MPIR_Assert(sendbuf != NULL);
+ MPIR_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t));
sendbuf_ptr = sendbuf + sizeof(MPIDI_CH3_Pkt_t);
if (sreq->dev.ext_hdr_sz > 0) {
/* copy extended packet header to send buf */
- MPIU_Memcpy(sendbuf_ptr, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
+ MPIR_Memcpy(sendbuf_ptr, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
sendbuf_ptr += sreq->dev.ext_hdr_sz;
}
@@ -288,19 +288,19 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
REQ_PTL(sreq)->put_done = 0;
if (data_sz) {
- MPIDI_msg_sz_t first = sreq->dev.segment_first;
- MPIDI_msg_sz_t last = sreq->dev.segment_first + sent_sz;
- MPID_Segment_pack(sreq->dev.segment_ptr, first, &last, sendbuf_ptr);
+ intptr_t first = sreq->dev.segment_first;
+ intptr_t last = sreq->dev.segment_first + sent_sz;
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, first, &last, sendbuf_ptr);
sendbuf_ptr += sent_sz;
if (remaining) { /* Post MEs for the remote gets */
ptl_size_t *offset = (ptl_size_t *)sendbuf_ptr;
- TMPBUF(sreq) = MPIU_Malloc(remaining);
+ TMPBUF(sreq) = MPL_malloc(remaining);
*offset = (ptl_size_t)TMPBUF(sreq);
first = last;
last = sreq->dev.segment_size;
- MPID_Segment_pack(sreq->dev.segment_ptr, first, &last, TMPBUF(sreq));
- MPIU_Assert(last == sreq->dev.segment_size);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, first, &last, TMPBUF(sreq));
+ MPIR_Assert(last == sreq->dev.segment_size);
REQ_PTL(sreq)->num_gets = remaining / MPIDI_nem_ptl_ni_limits.max_msg_size;
if (remaining % MPIDI_nem_ptl_ni_limits.max_msg_size) REQ_PTL(sreq)->num_gets++;
@@ -315,14 +315,14 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
vc_ptl->id, vc_ptl->ptc, match_bits, 0, sreq, NPTL_HEADER(0, remaining));
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s",
MPID_nem_ptl_strerror(ret));
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "PtlPut(size=%lu id=(%#x,%#x) pt=%#x)",
sendbuf_sz, vc_ptl->id.phys.nid,
vc_ptl->id.phys.pid, vc_ptl->ptc));
vc_ptl->num_queued_sends++;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SEND_NONCONTIG_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_NONCONTIG_PKT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -333,19 +333,19 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
#define FUNCNAME MPID_nem_ptl_SendNoncontig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz)
+int MPID_nem_ptl_SendNoncontig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *hdr, intptr_t hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_SENDNONCONTIG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_SENDNONCONTIG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
mpi_errno = send_noncontig_pkt(vc, sreq, hdr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_SENDNONCONTIG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -355,20 +355,20 @@ int MPID_nem_ptl_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MP
#define FUNCNAME MPID_nem_ptl_iStartContigMsg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data,
- MPIDI_msg_sz_t data_sz, MPID_Request **sreq_ptr)
+int MPID_nem_ptl_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, intptr_t hdr_sz, void *data,
+ intptr_t data_sz, MPIR_Request **sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISTARTCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ISTARTCONTIGMSG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ISTARTCONTIGMSG);
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
/* create a request */
- *sreq_ptr = MPID_Request_create();
- MPIU_Assert(*sreq_ptr != NULL);
- MPIU_Object_set_ref(*sreq_ptr, 2);
- (*sreq_ptr)->kind = MPID_REQUEST_SEND;
+ *sreq_ptr = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(*sreq_ptr != NULL);
+ MPIR_Object_set_ref(*sreq_ptr, 2);
+ (*sreq_ptr)->kind = MPIR_REQUEST_KIND__SEND;
(*sreq_ptr)->dev.OnDataAvail = NULL;
(*sreq_ptr)->dev.user_buf = NULL;
@@ -376,7 +376,7 @@ int MPID_nem_ptl_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ISTARTCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -386,20 +386,20 @@ int MPID_nem_ptl_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
#define FUNCNAME MPID_nem_ptl_iSendContig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz)
+int MPID_nem_ptl_iSendContig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISENDCONTIG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISENDCONTIG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ISENDCONTIG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ISENDCONTIG);
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
mpi_errno = send_pkt(vc, hdr, data, data_sz, sreq);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ISENDCONTIG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ISENDCONTIG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -409,16 +409,16 @@ int MPID_nem_ptl_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
#define FUNCNAME on_data_avail
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int on_data_avail(MPID_Request * req)
+static inline int on_data_avail(MPIR_Request * req)
{
- int (*reqFn) (MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn) (MPIDI_VC_t *, MPIR_Request *, int *);
MPIDI_VC_t *vc = req->ch.vc;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ON_DATA_AVAIL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ON_DATA_AVAIL);
- MPIDI_FUNC_ENTER(MPID_STATE_ON_DATA_AVAIL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_ON_DATA_AVAIL);
reqFn = req->dev.OnDataAvail;
if (!reqFn) {
@@ -427,12 +427,12 @@ static inline int on_data_avail(MPID_Request * req)
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
else {
int complete;
reqFn(vc, req, &complete);
- MPIU_Assert(complete == TRUE);
+ MPIR_Assert(complete == TRUE);
}
vc_ptl->num_queued_sends--;
@@ -441,7 +441,7 @@ static inline int on_data_avail(MPID_Request * req)
MPID_nem_ptl_vc_terminated(vc);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_ON_DATA_AVAIL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_ON_DATA_AVAIL);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -454,9 +454,9 @@ static inline int on_data_avail(MPID_Request * req)
int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_NM_CTL_EVENT_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_NM_CTL_EVENT_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_NM_CTL_EVENT_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_NM_CTL_EVENT_HANDLER);
switch(e->type) {
@@ -484,11 +484,11 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e)
MPIR_ERR_POP(mpi_errno);
}
else {
- MPID_Request *req = MPID_Request_create();
+ MPIR_Request *req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
/* This request is actually complete; just needs to wait to enforce ordering */
- TMPBUF(req) = MPIU_Malloc(packet_sz);
- MPIU_Assert(TMPBUF(req));
- MPIU_Memcpy(TMPBUF(req), e->start, packet_sz);
+ TMPBUF(req) = MPL_malloc(packet_sz);
+ MPIR_Assert(TMPBUF(req));
+ MPIR_Memcpy(TMPBUF(req), e->start, packet_sz);
REQ_PTL(req)->bytes_put = packet_sz;
req->ch.vc = vc;
REQ_PTL(req)->recv_ptr = e->start;
@@ -501,35 +501,33 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e)
char *buf_ptr;
ptl_size_t target_offset;
- MPID_Request *req = MPID_Request_create();
- MPIU_Assert(req != NULL);
+ MPIR_Request *req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(req != NULL);
MPIDI_CH3U_Request_decrement_cc(req, &incomplete); /* We'll increment it below */
REQ_PTL(req)->event_handler = MPID_nem_ptl_nm_ctl_event_handler;
REQ_PTL(req)->bytes_put = packet_sz + remaining - sizeof(ptl_size_t);
- TMPBUF(req) = MPIU_Malloc(REQ_PTL(req)->bytes_put);
- MPIU_Assert(TMPBUF(req) != NULL);
- MPIU_Memcpy(TMPBUF(req), e->start, packet_sz);
+ TMPBUF(req) = MPL_malloc(REQ_PTL(req)->bytes_put);
+ MPIR_Assert(TMPBUF(req) != NULL);
+ MPIR_Memcpy(TMPBUF(req), e->start, packet_sz);
REQ_PTL(req)->recv_ptr = e->start;
req->ch.vc = vc;
- size = remaining < MPIDI_nem_ptl_ni_limits.max_msg_size ? remaining : MPIDI_nem_ptl_ni_limits.max_msg_size;
buf_ptr = (char *)TMPBUF(req) + packet_sz - sizeof(ptl_size_t);
target_offset = *((ptl_size_t *)buf_ptr);
do {
+ size = MPL_MIN(remaining, MPIDI_nem_ptl_ni_limits.max_msg_size);
MPIDI_CH3U_Request_increment_cc(req, &incomplete); /* Will be decremented - and eventually freed in REPLY */
ret = MPID_nem_ptl_rptl_get(MPIDI_nem_ptl_global_md, (ptl_size_t)buf_ptr,
size, vc_ptl->id, vc_ptl->ptc, NPTL_MATCH(sender_req_id, GET_TAG, MPIDI_Process.my_pg_rank), target_offset, req);
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlget", "**ptlget %s",
MPID_nem_ptl_strerror(ret));
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST,
"PtlGet(size=%lu id=(%#x,%#x) pt=%#x tag=%d)", size,
vc_ptl->id.phys.nid,
vc_ptl->id.phys.pid, vc_ptl->ptc, sender_req_id));
buf_ptr += size;
remaining -= size;
target_offset += size;
- if (remaining < MPIDI_nem_ptl_ni_limits.max_msg_size)
- size = remaining;
} while (remaining);
}
@@ -546,11 +544,11 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e)
case PTL_EVENT_GET:
{
MPI_Request handle = NPTL_MATCH_GET_TAG(e->match_bits);
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
- MPID_Request_get_ptr(handle, req);
+ MPIR_Request_get_ptr(handle, req);
if (--REQ_PTL(req)->num_gets == 0) {
- MPIU_Free(TMPBUF(req));
+ MPL_free(TMPBUF(req));
if (REQ_PTL(req)->put_done) {
mpi_errno = on_data_avail(req); /* Otherwise we'll do it on the SEND */
if (mpi_errno != MPI_SUCCESS) {
@@ -563,9 +561,9 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e)
case PTL_EVENT_SEND:
{
- MPID_Request *const req = e->user_ptr;
+ MPIR_Request *const req = e->user_ptr;
- MPIU_Free(SENDBUF(req));
+ MPL_free(SENDBUF(req));
REQ_PTL(req)->put_done = 1;
if (REQ_PTL(req)->num_gets == 0) { /* Otherwise GET will do it */
mpi_errno = on_data_avail(req);
@@ -579,7 +577,7 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e)
case PTL_EVENT_REPLY:
{
int incomplete;
- MPID_Request *const req = e->user_ptr;
+ MPIR_Request *const req = e->user_ptr;
MPIDI_CH3U_Request_decrement_cc(req, &incomplete);
if (!incomplete) {
@@ -621,7 +619,7 @@ int MPID_nem_ptl_nm_ctl_event_handler(const ptl_event_t *e)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_NM_CTL_EVENT_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_NM_CTL_EVENT_HANDLER);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_poll.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_poll.c
index 0e06e1a..b3ad4b3 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_poll.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_poll.c
@@ -23,25 +23,25 @@ int MPID_nem_ptl_poll_init(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIU_CHKPMEM_DECL(NUM_OVERFLOW_ME);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_POLL_INIT);
+ MPIR_CHKPMEM_DECL(NUM_OVERFLOW_ME);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_POLL_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_POLL_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_POLL_INIT);
/* create overflow buffers */
for (i = 0; i < NUM_OVERFLOW_ME; ++i) {
- MPIU_CHKPMEM_MALLOC(overflow_buf[i], void *, OVERFLOW_LENGTH, mpi_errno, "overflow buffer");
+ MPIR_CHKPMEM_MALLOC(overflow_buf[i], void *, OVERFLOW_LENGTH, mpi_errno, "overflow buffer");
mpi_errno = append_overflow(i);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit2:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_POLL_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_POLL_INIT);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit2;
}
@@ -56,20 +56,20 @@ int MPID_nem_ptl_poll_finalize(void)
int mpi_errno = MPI_SUCCESS;
int i;
int ret;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_POLL_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_POLL_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_POLL_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_POLL_FINALIZE);
for (i = 0; i < NUM_OVERFLOW_ME; ++i) {
if (overflow_me_handle[i] != PTL_INVALID_HANDLE) {
ret = PtlMEUnlink(overflow_me_handle[i]);
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlmeunlink", "**ptlmeunlink %s", MPID_nem_ptl_strerror(ret));
}
- MPIU_Free(overflow_buf[i]);
+ MPL_free(overflow_buf[i]);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_POLL_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_POLL_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -85,11 +85,11 @@ static int append_overflow(int i)
int ret;
ptl_me_t me;
ptl_process_t id_any;
- MPIDI_STATE_DECL(MPID_STATE_APPEND_OVERFLOW);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_APPEND_OVERFLOW);
- MPIDI_FUNC_ENTER(MPID_STATE_APPEND_OVERFLOW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_APPEND_OVERFLOW);
- MPIU_Assert(i >= 0 && i < NUM_OVERFLOW_ME);
+ MPIR_Assert(i >= 0 && i < NUM_OVERFLOW_ME);
id_any.phys.pid = PTL_PID_ANY;
id_any.phys.nid = PTL_NID_ANY;
@@ -111,7 +111,7 @@ static int append_overflow(int i)
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlmeappend", "**ptlmeappend %s", MPID_nem_ptl_strerror(ret));
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_APPEND_OVERFLOW);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_APPEND_OVERFLOW);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -127,16 +127,16 @@ int MPID_nem_ptl_poll(int is_blocking_poll)
int mpi_errno = MPI_SUCCESS;
ptl_event_t event;
int ret;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_POLL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_POLL);
- /* MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_POLL); */
+ /* MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_POLL); */
while (1) {
int ctl_event = FALSE;
/* Check the rptls EQ first. It should never return an event. */
ret = MPID_nem_ptl_rptl_eqget(MPIDI_nem_ptl_rpt_eq, &event);
- MPIU_Assert(ret == PTL_EQ_EMPTY);
+ MPIR_Assert(ret == PTL_EQ_EMPTY);
/* check EQs for events */
ret = MPID_nem_ptl_rptl_eqget(MPIDI_nem_ptl_eq, &event);
@@ -162,7 +162,7 @@ int MPID_nem_ptl_poll(int is_blocking_poll)
}
}
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptleqget", "**ptleqget %s", MPID_nem_ptl_strerror(ret));
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "Received event %s pt_idx=%d ni_fail=%s list=%s user_ptr=%p hdr_data=%#lx mlength=%lu rlength=%lu",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "Received event %s pt_idx=%d ni_fail=%s list=%s user_ptr=%p hdr_data=%#lx mlength=%lu rlength=%lu",
MPID_nem_ptl_strevent(&event), event.pt_index, MPID_nem_ptl_strnifail(event.ni_fail_type),
MPID_nem_ptl_strlist(event.ptl_list), event.user_ptr, event.hdr_data, event.mlength, event.rlength));
MPIR_ERR_CHKANDJUMP2(event.ni_fail_type != PTL_NI_OK && event.ni_fail_type != PTL_NI_NO_MATCH, mpi_errno, MPI_ERR_OTHER, "**ptlni_fail", "**ptlni_fail %s %s", MPID_nem_ptl_strevent(&event), MPID_nem_ptl_strnifail(event.ni_fail_type));
@@ -183,9 +183,9 @@ int MPID_nem_ptl_poll(int is_blocking_poll)
case PTL_EVENT_SEND:
case PTL_EVENT_REPLY:
case PTL_EVENT_SEARCH: {
- MPID_Request * const req = event.user_ptr;
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "req = %p", req);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "REQ_PTL(req)->event_handler = %p", REQ_PTL(req)->event_handler);
+ MPIR_Request * const req = event.user_ptr;
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "req = %p", req);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "REQ_PTL(req)->event_handler = %p", REQ_PTL(req)->event_handler);
if (REQ_PTL(req)->event_handler) {
mpi_errno = REQ_PTL(req)->event_handler(&event);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -210,7 +210,7 @@ int MPID_nem_ptl_poll(int is_blocking_poll)
}
fn_exit:
- /* MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_POLL); */
+ /* MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_POLL); */
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_probe.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_probe.c
index 9268ea5..c5025fc 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_probe.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_probe.c
@@ -13,10 +13,10 @@
static int handle_probe(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const req = e->user_ptr;
- MPIDI_STATE_DECL(MPID_STATE_HANDLE_PROBE);
+ MPIR_Request *const req = e->user_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLE_PROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLE_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLE_PROBE);
if (e->ni_fail_type == PTL_NI_NO_MATCH) {
REQ_PTL(req)->found = FALSE;
@@ -35,7 +35,7 @@ static int handle_probe(const ptl_event_t *e)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLE_PROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLE_PROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -44,11 +44,11 @@ static int handle_probe(const ptl_event_t *e)
static int handle_mprobe(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const req = e->user_ptr;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_HANDLE_PROBE);
+ MPIR_Request *const req = e->user_ptr;
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLE_PROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLE_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLE_PROBE);
if (e->ni_fail_type == PTL_NI_NO_MATCH) {
REQ_PTL(req)->found = FALSE;
@@ -61,15 +61,15 @@ static int handle_mprobe(const ptl_event_t *e)
MPIR_STATUS_SET_COUNT(req->status, NPTL_HEADER_GET_LENGTH(e->hdr_data));
MPIDI_Request_set_sync_send_flag(req, e->hdr_data & NPTL_SSEND);
- MPIU_CHKPMEM_MALLOC(req->dev.tmpbuf, void *, e->mlength, mpi_errno, "tmpbuf");
- MPIU_Memcpy((char *)req->dev.tmpbuf, e->start, e->mlength);
+ MPIR_CHKPMEM_MALLOC(req->dev.tmpbuf, void *, e->mlength, mpi_errno, "tmpbuf");
+ MPIR_Memcpy((char *)req->dev.tmpbuf, e->start, e->mlength);
req->dev.recv_data_sz = e->mlength;
if (!(e->hdr_data & NPTL_LARGE)) {
MPIDI_Request_set_msg_type(req, MPIDI_REQUEST_EAGER_MSG);
}
else {
- MPIU_Assert (e->mlength == PTL_LARGE_THRESHOLD);
+ MPIR_Assert (e->mlength == PTL_LARGE_THRESHOLD);
req->dev.match.parts.tag = req->status.MPI_TAG;
req->dev.match.parts.context_id = NPTL_MATCH_GET_CTX(e->match_bits);
req->dev.match.parts.rank = req->status.MPI_SOURCE;
@@ -88,11 +88,11 @@ static int handle_mprobe(const ptl_event_t *e)
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLE_PROBE);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLE_PROBE);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -101,9 +101,9 @@ static int handle_mprobe(const ptl_event_t *e)
#define FUNCNAME MPID_nem_ptl_probe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, MPI_Status *status)
+int MPID_nem_ptl_probe(MPIDI_VC_t *vc, int source, int tag, MPIR_Comm *comm, int context_offset, MPI_Status *status)
{
- MPIU_Assertp(0 && "This function shouldn't be called.");
+ MPIR_Assertp(0 && "This function shouldn't be called.");
return MPI_SUCCESS;
}
@@ -111,25 +111,25 @@ int MPID_nem_ptl_probe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int
#define FUNCNAME MPID_nem_ptl_iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag, MPI_Status *status)
+int MPID_nem_ptl_iprobe(MPIDI_VC_t *vc, int source, int tag, MPIR_Comm *comm, int context_offset, int *flag, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
int ret;
ptl_process_t id_any;
ptl_me_t me;
- MPID_Request *req;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_IPROBE);
+ MPIR_Request *req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_IPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_IPROBE);
id_any.phys.nid = PTL_NID_ANY;
id_any.phys.pid = PTL_PID_ANY;
/* create a request */
- req = MPID_Request_create();
- MPIR_ERR_CHKANDJUMP1(!req, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Request_create");
- MPIU_Object_set_ref(req, 2); /* 1 ref for progress engine and 1 ref for us */
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_ERR_CHKANDJUMP1(!req, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIR_Request_create");
+ MPIR_Object_set_ref(req, 2); /* 1 ref for progress engine and 1 ref for us */
REQ_PTL(req)->event_handler = handle_probe;
/* create a dummy ME to use for searching the list */
@@ -165,16 +165,16 @@ int MPID_nem_ptl_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, in
do {
mpi_errno = MPID_nem_ptl_poll(FALSE);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- } while (!MPID_Request_is_complete(req));
+ } while (!MPIR_Request_is_complete(req));
*flag = REQ_PTL(req)->found;
if (status != MPI_STATUS_IGNORE)
*status = req->status;
- MPID_Request_release(req);
+ MPIR_Request_free(req);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_IPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_IPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -184,30 +184,30 @@ int MPID_nem_ptl_iprobe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, in
#define FUNCNAME MPID_nem_ptl_improbe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, int context_offset, int *flag,
- MPID_Request **message, MPI_Status *status)
+int MPID_nem_ptl_improbe(MPIDI_VC_t *vc, int source, int tag, MPIR_Comm *comm, int context_offset, int *flag,
+ MPIR_Request **message, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
int ret;
ptl_process_t id_any;
ptl_me_t me;
- MPID_Request *req;
+ MPIR_Request *req;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_IMPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_IMPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_IMPROBE);
id_any.phys.nid = PTL_NID_ANY;
id_any.phys.pid = PTL_PID_ANY;
/* create a request */
- req = MPID_Request_create();
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPID_nem_ptl_init_req(req);
- MPIR_ERR_CHKANDJUMP1(!req, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Request_create");
- MPIU_Object_set_ref(req, 2); /* 1 ref for progress engine and 1 ref for us */
+ MPIR_ERR_CHKANDJUMP1(!req, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIR_Request_create");
+ MPIR_Object_set_ref(req, 2); /* 1 ref for progress engine and 1 ref for us */
REQ_PTL(req)->event_handler = handle_mprobe;
- req->kind = MPID_REQUEST_MPROBE;
+ req->kind = MPIR_REQUEST_KIND__MPROBE;
/* create a dummy ME to use for searching the list */
me.start = NULL;
@@ -241,7 +241,7 @@ int MPID_nem_ptl_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, i
do {
mpi_errno = MPID_nem_ptl_poll(FALSE);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- } while (!MPID_Request_is_complete(req));
+ } while (!MPIR_Request_is_complete(req));
*flag = REQ_PTL(req)->found;
if (*flag) {
@@ -251,11 +251,11 @@ int MPID_nem_ptl_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, i
*message = req;
}
else {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_IMPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_IMPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -265,17 +265,17 @@ int MPID_nem_ptl_improbe(MPIDI_VC_t *vc, int source, int tag, MPID_Comm *comm, i
#define FUNCNAME MPID_nem_ptl_anysource_iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset, int *flag, MPI_Status * status)
+int MPID_nem_ptl_anysource_iprobe(int tag, MPIR_Comm * comm, int context_offset, int *flag, MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IPROBE);
return MPID_nem_ptl_iprobe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, status);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -285,18 +285,18 @@ int MPID_nem_ptl_anysource_iprobe(int tag, MPID_Comm * comm, int context_offset,
#define FUNCNAME MPID_nem_ptl_anysource_improbe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_anysource_improbe(int tag, MPID_Comm * comm, int context_offset, int *flag, MPID_Request **message,
+int MPID_nem_ptl_anysource_improbe(int tag, MPIR_Comm * comm, int context_offset, int *flag, MPIR_Request **message,
MPI_Status * status)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IMPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IMPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IMPROBE);
return MPID_nem_ptl_improbe(NULL, MPI_ANY_SOURCE, tag, comm, context_offset, flag, message, status);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IMPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_IMPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -307,27 +307,28 @@ int MPID_nem_ptl_anysource_improbe(int tag, MPID_Comm * comm, int context_offset
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_ptl_pkt_cancel_send_req_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp)
{
int ret, mpi_errno = MPI_SUCCESS;
MPIDI_nem_ptl_pkt_cancel_send_req_t *req_pkt = (MPIDI_nem_ptl_pkt_cancel_send_req_t *)pkt;
MPID_PKT_DECL_CAST(upkt, MPIDI_nem_ptl_pkt_cancel_send_resp_t, resp_pkt);
- MPID_Request *search_req, *resp_req;
+ MPIR_Request *search_req, *resp_req;
ptl_me_t me;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"received cancel send req pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d",
req_pkt->sender_req_id, req_pkt->match.parts.rank,
req_pkt->match.parts.tag, req_pkt->match.parts.context_id));
/* create a dummy request and search for the message */
/* create a request */
- search_req = MPID_Request_create();
+ search_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPID_nem_ptl_init_req(search_req);
- MPIR_ERR_CHKANDJUMP1(!search_req, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Request_create");
- MPIU_Object_set_ref(search_req, 2); /* 1 ref for progress engine and 1 ref for us */
- search_req->kind = MPID_REQUEST_MPROBE;
+ MPIR_ERR_CHKANDJUMP1(!search_req, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIR_Request_create");
+ MPIR_Object_set_ref(search_req, 2); /* 1 ref for progress engine and 1 ref for us */
+ search_req->kind = MPIR_REQUEST_KIND__MPROBE;
/* create a dummy ME to use for searching the list */
me.start = NULL;
@@ -353,7 +354,7 @@ int MPID_nem_ptl_pkt_cancel_send_req_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pk
do {
mpi_errno = MPID_nem_ptl_poll(FALSE);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- } while (!MPID_Request_is_complete(search_req));
+ } while (!MPIR_Request_is_complete(search_req));
/* send response */
resp_pkt->type = MPIDI_NEM_PKT_NETMOD;
@@ -366,11 +367,11 @@ int MPID_nem_ptl_pkt_cancel_send_req_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pk
/* if the message was found, free the temporary buffer used to copy the data */
if (REQ_PTL(search_req)->found)
- MPIU_Free(search_req->dev.tmpbuf);
+ MPL_free(search_req->dev.tmpbuf);
- MPID_Request_release(search_req);
+ MPIR_Request_free(search_req);
if (resp_req != NULL)
- MPID_Request_release(resp_req);
+ MPIR_Request_free(resp_req);
fn_exit:
return mpi_errno;
@@ -383,14 +384,15 @@ int MPID_nem_ptl_pkt_cancel_send_req_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pk
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_ptl_pkt_cancel_send_resp_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq;
+ MPIR_Request *sreq;
MPIDI_nem_ptl_pkt_cancel_send_resp_t *resp_pkt = (MPIDI_nem_ptl_pkt_cancel_send_resp_t *)pkt;
int i, ret;
- MPID_Request_get_ptr(resp_pkt->sender_req_id, sreq);
+ MPIR_Request_get_ptr(resp_pkt->sender_req_id, sreq);
if (resp_pkt->ack) {
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, TRUE);
@@ -405,12 +407,12 @@ int MPID_nem_ptl_pkt_cancel_send_resp_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *p
}
}
if (REQ_PTL(sreq)->get_me_p)
- MPIU_Free(REQ_PTL(sreq)->get_me_p);
+ MPL_free(REQ_PTL(sreq)->get_me_p);
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"message cancelled");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"message cancelled");
} else {
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, FALSE);
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"unable to cancel message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"unable to cancel message");
}
mpi_errno = MPID_Request_complete(sreq);
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
index 08272e9..5eb460e 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
@@ -14,7 +14,7 @@
static void dequeue_req(const ptl_event_t *e)
{
int found;
- MPID_Request *const rreq = e->user_ptr;
+ MPIR_Request *const rreq = e->user_ptr;
MPI_Aint s_len, r_len;
/* At this point we know the ME is unlinked. Invalidate the handle to
@@ -25,13 +25,13 @@ static void dequeue_req(const ptl_event_t *e)
/* an MPI_ANY_SOURCE request may have been previously removed from the
CH3 queue by an FDP (find and dequeue posted) operation */
if (rreq->dev.match.parts.rank != MPI_ANY_SOURCE)
- MPIU_Assert(found);
+ MPIR_Assert(found);
rreq->status.MPI_ERROR = MPI_SUCCESS;
rreq->status.MPI_SOURCE = NPTL_MATCH_GET_RANK(e->match_bits);
rreq->status.MPI_TAG = NPTL_MATCH_GET_TAG(e->match_bits);
- MPID_Datatype_get_size_macro(rreq->dev.datatype, r_len);
+ MPIDU_Datatype_get_size_macro(rreq->dev.datatype, r_len);
r_len *= rreq->dev.user_count;
s_len = NPTL_HEADER_GET_LENGTH(e->hdr_data);
@@ -52,14 +52,14 @@ static void dequeue_req(const ptl_event_t *e)
static int handler_recv_complete(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const rreq = e->user_ptr;
+ MPIR_Request *const rreq = e->user_ptr;
int ret;
int i;
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_RECV_COMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_RECV_COMPLETE);
- MPIU_Assert(e->type == PTL_EVENT_REPLY || e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
+ MPIR_Assert(e->type == PTL_EVENT_REPLY || e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
if (REQ_PTL(rreq)->md != PTL_INVALID_HANDLE) {
ret = PtlMDRelease(REQ_PTL(rreq)->md);
@@ -68,7 +68,7 @@ static int handler_recv_complete(const ptl_event_t *e)
for (i = 0; i < MPID_NEM_PTL_NUM_CHUNK_BUFFERS; ++i)
if (REQ_PTL(rreq)->chunk_buffer[i])
- MPIU_Free(REQ_PTL(rreq)->chunk_buffer[i]);
+ MPL_free(REQ_PTL(rreq)->chunk_buffer[i]);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno) {
@@ -76,7 +76,7 @@ static int handler_recv_complete(const ptl_event_t *e)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_RECV_COMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_RECV_COMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -89,18 +89,18 @@ static int handler_recv_complete(const ptl_event_t *e)
static int handler_recv_dequeue_complete(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const rreq = e->user_ptr;
+ MPIR_Request *const rreq = e->user_ptr;
int is_contig;
MPI_Aint last;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr ATTRIBUTE((unused));
+ intptr_t data_sz;
+ MPIDU_Datatype*dt_ptr ATTRIBUTE((unused));
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
- MPIU_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
+ MPIR_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, is_contig, data_sz, dt_ptr, dt_true_lb);
@@ -108,13 +108,13 @@ static int handler_recv_dequeue_complete(const ptl_event_t *e)
if (e->type == PTL_EVENT_PUT_OVERFLOW) {
/* unpack the data from unexpected buffer */
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "is_contig = %d", is_contig);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "is_contig = %d", is_contig);
if (is_contig) {
- MPIU_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, e->start, e->mlength);
+ MPIR_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, e->start, e->mlength);
} else {
last = e->mlength;
- MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, e->start);
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, e->start);
if (last != e->mlength)
MPIR_ERR_SET(rreq->status.MPI_ERROR, MPI_ERR_TYPE, "**dtypemismatch");
}
@@ -124,15 +124,15 @@ static int handler_recv_dequeue_complete(const ptl_event_t *e)
are a multiple of a single basic element. Currently, we do not detect
mismatches with datatypes constructed of more than one basic type */
MPI_Datatype dt_basic_type;
- MPID_Datatype_get_basic_type(rreq->dev.datatype, dt_basic_type);
- if (dt_basic_type != MPI_DATATYPE_NULL && (e->mlength % MPID_Datatype_get_basic_size(dt_basic_type)) != 0)
+ MPIDU_Datatype_get_basic_type(rreq->dev.datatype, dt_basic_type);
+ if (dt_basic_type != MPI_DATATYPE_NULL && (e->mlength % MPIDU_Datatype_get_basic_size(dt_basic_type)) != 0)
MPIR_ERR_SET(rreq->status.MPI_ERROR, MPI_ERR_TYPE, "**dtypemismatch");
}
mpi_errno = handler_recv_complete(e);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -145,14 +145,14 @@ static int handler_recv_dequeue_complete(const ptl_event_t *e)
static int handler_recv_big_get(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const rreq = e->user_ptr;
+ MPIR_Request *const rreq = e->user_ptr;
MPI_Aint last;
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_UNPACK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_RECV_UNPACK);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_UNPACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_RECV_UNPACK);
- MPIU_Assert(e->type == PTL_EVENT_REPLY);
+ MPIR_Assert(e->type == PTL_EVENT_REPLY);
/* decrement the number of remaining gets */
REQ_PTL(rreq)->num_gets--;
@@ -160,8 +160,8 @@ static int handler_recv_big_get(const ptl_event_t *e)
/* if we used a temporary buffer, unpack the data */
if (REQ_PTL(rreq)->chunk_buffer[0]) {
last = rreq->dev.segment_size;
- MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, REQ_PTL(rreq)->chunk_buffer[0]);
- MPIU_Assert(last == rreq->dev.segment_size);
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, REQ_PTL(rreq)->chunk_buffer[0]);
+ MPIR_Assert(last == rreq->dev.segment_size);
}
mpi_errno = handler_recv_complete(e);
}
@@ -169,7 +169,7 @@ static int handler_recv_big_get(const ptl_event_t *e)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_RECV_UNPACK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_RECV_UNPACK);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -179,7 +179,7 @@ static int handler_recv_big_get(const ptl_event_t *e)
#define FUNCNAME big_get
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static void big_get(void *buf, ptl_size_t left_to_get, MPIDI_VC_t *vc, ptl_match_bits_t match_bits, MPID_Request *rreq)
+static void big_get(void *buf, ptl_size_t left_to_get, MPIDI_VC_t *vc, ptl_match_bits_t match_bits, MPIR_Request *rreq)
{
int ret;
MPID_nem_ptl_vc_area *vc_ptl;
@@ -193,15 +193,12 @@ static void big_get(void *buf, ptl_size_t left_to_get, MPIDI_VC_t *vc, ptl_match
while (left_to_get > 0) {
/* get up to the maximum allowed by the portals interface */
- if (left_to_get > MPIDI_nem_ptl_ni_limits.max_msg_size)
- get_sz = MPIDI_nem_ptl_ni_limits.max_msg_size;
- else
- get_sz = left_to_get;
+ get_sz = MPL_MIN(MPIDI_nem_ptl_ni_limits.max_msg_size, left_to_get);
ret = MPID_nem_ptl_rptl_get(MPIDI_nem_ptl_global_md, start, get_sz, vc_ptl->id, vc_ptl->ptg, match_bits, 0, rreq);
DBG_MSG_GET("global", get_sz, vc->pg_rank, match_bits);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, " buf=%p", (char *)start);
- MPIU_Assert(ret == 0);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " buf=%p", (char *)start);
+ MPIR_Assert(ret == 0);
/* account for what has been sent */
start += get_sz;
@@ -217,15 +214,15 @@ static void big_get(void *buf, ptl_size_t left_to_get, MPIDI_VC_t *vc, ptl_match
static int handler_recv_unpack_complete(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const rreq = e->user_ptr;
+ MPIR_Request *const rreq = e->user_ptr;
void *buf;
MPI_Aint last;
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE);
- MPIU_Assert(e->type == PTL_EVENT_REPLY || e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
+ MPIR_Assert(e->type == PTL_EVENT_REPLY || e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
if (e->type == PTL_EVENT_PUT_OVERFLOW)
buf = e->start;
@@ -233,14 +230,14 @@ static int handler_recv_unpack_complete(const ptl_event_t *e)
buf = REQ_PTL(rreq)->chunk_buffer[0];
last = rreq->dev.segment_first + e->mlength;
- MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, buf);
- MPIU_Assert(last == rreq->dev.segment_first + e->mlength);
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, buf);
+ MPIR_Assert(last == rreq->dev.segment_first + e->mlength);
mpi_errno = handler_recv_complete(e);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_RECV_UNPACK_COMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -253,17 +250,17 @@ static int handler_recv_unpack_complete(const ptl_event_t *e)
static int handler_recv_dequeue_unpack_complete(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE);
- MPIU_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
+ MPIR_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
dequeue_req(e);
mpi_errno = handler_recv_unpack_complete(e);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_COMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -276,21 +273,21 @@ static int handler_recv_dequeue_unpack_complete(const ptl_event_t *e)
static int handler_recv_dequeue_large(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const rreq = e->user_ptr;
+ MPIR_Request *const rreq = e->user_ptr;
MPIDI_VC_t *vc;
MPID_nem_ptl_vc_area *vc_ptl;
int ret;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype*dt_ptr;
MPI_Aint dt_true_lb;
MPI_Aint last;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE);
- MPIU_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
+ MPIR_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
MPIDI_Comm_get_vc(rreq->comm, NPTL_MATCH_GET_RANK(e->match_bits), &vc);
vc_ptl = VC_PTL(vc);
@@ -302,11 +299,11 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
/* unpack data from unexpected buffer first */
if (e->type == PTL_EVENT_PUT_OVERFLOW) {
if (dt_contig) {
- MPIU_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, e->start, e->mlength);
+ MPIR_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, e->start, e->mlength);
} else {
last = e->mlength;
- MPID_Segment_unpack(rreq->dev.segment_ptr, 0, &last, e->start);
- MPIU_Assert(last == e->mlength);
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, 0, &last, e->start);
+ MPIR_Assert(last == e->mlength);
rreq->dev.segment_first = e->mlength;
}
}
@@ -318,7 +315,7 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
goto fn_exit;
}
- MPIU_Assert (e->mlength == PTL_LARGE_THRESHOLD);
+ MPIR_Assert (e->mlength == PTL_LARGE_THRESHOLD);
/* we need to GET the rest of the data from the sender's buffer */
if (dt_contig) {
@@ -331,7 +328,7 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
last = rreq->dev.segment_size;
rreq->dev.iov_count = MPL_IOV_LIMIT;
- MPID_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov, &rreq->dev.iov_count);
+ MPIDU_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov, &rreq->dev.iov_count);
if (last == rreq->dev.segment_size && rreq->dev.segment_size <= MPIDI_nem_ptl_ni_limits.max_msg_size + PTL_LARGE_THRESHOLD) {
/* Rest of message fits in one IOV */
@@ -354,17 +351,17 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
/* message won't fit in a single IOV, allocate buffer and unpack when received */
/* FIXME: For now, allocate a single large buffer to hold entire message */
- MPIU_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, data_sz - PTL_LARGE_THRESHOLD,
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, data_sz - PTL_LARGE_THRESHOLD,
mpi_errno, "chunk_buffer");
big_get(REQ_PTL(rreq)->chunk_buffer[0], data_sz - PTL_LARGE_THRESHOLD, vc, e->match_bits, rreq);
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit2:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_LARGE);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit2;
}
@@ -376,15 +373,15 @@ static int handler_recv_dequeue_large(const ptl_event_t *e)
static int handler_recv_dequeue_unpack_large(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const rreq = e->user_ptr;
+ MPIR_Request *const rreq = e->user_ptr;
MPIDI_VC_t *vc;
MPI_Aint last;
void *buf;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE);
- MPIU_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE);
+ MPIR_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
MPIDI_Comm_get_vc(rreq->comm, NPTL_MATCH_GET_RANK(e->match_bits), &vc);
@@ -402,24 +399,24 @@ static int handler_recv_dequeue_unpack_large(const ptl_event_t *e)
else
buf = REQ_PTL(rreq)->chunk_buffer[0];
- MPIU_Assert(e->mlength == PTL_LARGE_THRESHOLD);
+ MPIR_Assert(e->mlength == PTL_LARGE_THRESHOLD);
last = PTL_LARGE_THRESHOLD;
- MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, buf);
- MPIU_Assert(last == PTL_LARGE_THRESHOLD);
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, buf);
+ MPIR_Assert(last == PTL_LARGE_THRESHOLD);
rreq->dev.segment_first += PTL_LARGE_THRESHOLD;
- MPIU_Free(REQ_PTL(rreq)->chunk_buffer[0]);
+ MPL_free(REQ_PTL(rreq)->chunk_buffer[0]);
- MPIU_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, rreq->dev.segment_size - rreq->dev.segment_first,
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, rreq->dev.segment_size - rreq->dev.segment_first,
mpi_errno, "chunk_buffer");
big_get(REQ_PTL(rreq)->chunk_buffer[0], rreq->dev.segment_size - rreq->dev.segment_first, vc, e->match_bits, rreq);
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit2:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_RECV_DEQUEUE_UNPACK_LARGE);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit2;
}
@@ -427,22 +424,22 @@ static int handler_recv_dequeue_unpack_large(const ptl_event_t *e)
#define FUNCNAME MPID_nem_ptl_recv_posted
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
+int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPIR_Request *rreq)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
ptl_me_t me;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype*dt_ptr;
MPI_Aint dt_true_lb;
MPI_Aint last;
ptl_process_t id_any;
int ret;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RECV_POSTED);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RECV_POSTED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_RECV_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_RECV_POSTED);
id_any.phys.nid = PTL_NID_ANY;
id_any.phys.pid = PTL_PID_ANY;
@@ -464,7 +461,7 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
me.match_id = vc_ptl->id;
}
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "tag=%#x ctx=%#x rank=%#x", rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id, rreq->dev.match.parts.rank));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "tag=%#x ctx=%#x rank=%#x", rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id, rreq->dev.match.parts.rank));
me.match_bits = NPTL_MATCH(rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id,
rreq->dev.match.parts.rank);
if (rreq->dev.match.parts.tag == MPI_ANY_TAG)
@@ -475,13 +472,13 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
me.min_free = 0;
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "count="MPI_AINT_FMT_DEC_SPEC" datatype=%#x contig=%d data_sz=%lu", rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "count="MPI_AINT_FMT_DEC_SPEC" datatype=%#x contig=%d data_sz=%lu", rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz));
if (data_sz <= PTL_LARGE_THRESHOLD) {
if (dt_contig) {
/* small contig message */
void *start = (char *)rreq->dev.user_buf + dt_true_lb;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Small contig message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Small contig message");
if (start == NULL)
me.start = &dummy;
else
@@ -490,20 +487,20 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
REQ_PTL(rreq)->event_handler = handler_recv_dequeue_complete;
} else {
/* small noncontig */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Small noncontig message");
- rreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIR_ERR_CHKANDJUMP1(rreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count, rreq->dev.datatype, rreq->dev.segment_ptr, 0);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Small noncontig message");
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(rreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count, rreq->dev.datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
last = rreq->dev.segment_size;
rreq->dev.iov_count = MPL_IOV_LIMIT;
- MPID_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov, &rreq->dev.iov_count);
+ MPIDU_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov, &rreq->dev.iov_count);
if (last == rreq->dev.segment_size) {
/* entire message fits in IOV */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " entire message fits in IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " entire message fits in IOV");
me.start = rreq->dev.iov;
me.length = rreq->dev.iov_count;
me.options |= PTL_IOVEC;
@@ -511,8 +508,8 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
} else {
/* IOV is not long enough to describe entire message: recv into
buffer and unpack later */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " IOV too long: using bounce buffer");
- MPIU_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, data_sz, mpi_errno, "chunk_buffer");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " IOV too long: using bounce buffer");
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, data_sz, mpi_errno, "chunk_buffer");
me.start = REQ_PTL(rreq)->chunk_buffer[0];
me.length = data_sz;
REQ_PTL(rreq)->event_handler = handler_recv_dequeue_unpack_complete;
@@ -522,26 +519,26 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
/* Large message: Create an ME for the first chunk of data, then do a GET for the rest */
if (dt_contig) {
/* large contig message */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Large contig message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Large contig message");
me.start = (char *)rreq->dev.user_buf + dt_true_lb;
me.length = PTL_LARGE_THRESHOLD;
REQ_PTL(rreq)->event_handler = handler_recv_dequeue_large;
} else {
/* large noncontig */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Large noncontig message");
- rreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIR_ERR_CHKANDJUMP1(rreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count, rreq->dev.datatype, rreq->dev.segment_ptr, 0);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Large noncontig message");
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(rreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count, rreq->dev.datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
last = PTL_LARGE_THRESHOLD;
rreq->dev.iov_count = MPL_IOV_LIMIT;
- MPID_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov, &rreq->dev.iov_count);
+ MPIDU_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov, &rreq->dev.iov_count);
if (last == PTL_LARGE_THRESHOLD) {
/* first chunk fits in IOV */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " first chunk fits in IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " first chunk fits in IOV");
rreq->dev.segment_first = last;
me.start = rreq->dev.iov;
me.length = rreq->dev.iov_count;
@@ -550,8 +547,8 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
} else {
/* IOV is not long enough to describe the first chunk: recv into
buffer and unpack later */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " IOV too long: using bounce buffer for first chunk");
- MPIU_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, PTL_LARGE_THRESHOLD, mpi_errno, "chunk_buffer");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " IOV too long: using bounce buffer for first chunk");
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, PTL_LARGE_THRESHOLD, mpi_errno, "chunk_buffer");
me.start = REQ_PTL(rreq)->chunk_buffer[0];
me.length = PTL_LARGE_THRESHOLD;
REQ_PTL(rreq)->event_handler = handler_recv_dequeue_unpack_large;
@@ -563,16 +560,16 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
ret = PtlMEAppend(MPIDI_nem_ptl_ni, MPIDI_nem_ptl_pt, &me, PTL_PRIORITY_LIST, rreq, &REQ_PTL(rreq)->put_me);
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlmeappend", "**ptlmeappend %s", MPID_nem_ptl_strerror(ret));
DBG_MSG_MEAPPEND("REG", vc ? vc->pg_rank : MPI_ANY_SOURCE, me, rreq);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, " buf=%p", me.start);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "MPIDI_nem_ptl_pt = %d", MPIDI_nem_ptl_pt);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " buf=%p", me.start);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "MPIDI_nem_ptl_pt = %d", MPIDI_nem_ptl_pt);
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit2:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_RECV_POSTED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_RECV_POSTED);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit2;
}
@@ -580,34 +577,34 @@ int MPID_nem_ptl_recv_posted(MPIDI_VC_t *vc, MPID_Request *rreq)
#define FUNCNAME MPID_nem_ptl_anysource_posted
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPID_nem_ptl_anysource_posted(MPID_Request *rreq)
+void MPID_nem_ptl_anysource_posted(MPIR_Request *rreq)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED);
mpi_errno = MPID_nem_ptl_recv_posted(NULL, rreq);
/* FIXME: This function is void, so we can't return an error. This function
cannot return an error because the queue functions (where the posted_recv
hooks are called) return no error code. */
- MPIU_Assertp(mpi_errno == MPI_SUCCESS);
+ MPIR_Assertp(mpi_errno == MPI_SUCCESS);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_POSTED);
}
#undef FUNCNAME
#define FUNCNAME cancel_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int cancel_recv(MPID_Request *rreq, int *cancelled)
+static int cancel_recv(MPIR_Request *rreq, int *cancelled)
{
int mpi_errno = MPI_SUCCESS;
int ptl_err = PTL_OK;
- MPIDI_STATE_DECL(MPID_STATE_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CANCEL_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CANCEL_RECV);
*cancelled = FALSE;
@@ -622,7 +619,7 @@ static int cancel_recv(MPID_Request *rreq, int *cancelled)
*cancelled = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CANCEL_RECV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -633,22 +630,22 @@ static int cancel_recv(MPID_Request *rreq, int *cancelled)
#define FUNCNAME MPID_nem_ptl_anysource_matched
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_anysource_matched(MPID_Request *rreq)
+int MPID_nem_ptl_anysource_matched(MPIR_Request *rreq)
{
int mpi_errno, cancelled;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED);
mpi_errno = cancel_recv(rreq, &cancelled);
/* FIXME: This function is does not return an error because the queue
functions (where the posted_recv hooks are called) return no error
code. See also comment on cancel_recv. */
- MPIU_Assertp(mpi_errno == MPI_SUCCESS);
+ MPIR_Assertp(mpi_errno == MPI_SUCCESS);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ANYSOURCE_MATCHED);
return !cancelled;
fn_fail:
goto fn_exit;
@@ -660,22 +657,22 @@ int MPID_nem_ptl_anysource_matched(MPID_Request *rreq)
#define FUNCNAME MPID_nem_ptl_cancel_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_cancel_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
+int MPID_nem_ptl_cancel_recv(MPIDI_VC_t *vc, MPIR_Request *rreq)
{
int mpi_errno, cancelled;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_CANCEL_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_CANCEL_RECV);
mpi_errno = cancel_recv(rreq, &cancelled);
/* FIXME: This function is does not return an error because the queue
functions (where the posted_recv hooks are called) return no error
code. */
- MPIU_Assertp(mpi_errno == MPI_SUCCESS);
+ MPIR_Assertp(mpi_errno == MPI_SUCCESS);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_CANCEL_RECV);
return !cancelled;
fn_fail:
goto fn_exit;
@@ -687,7 +684,7 @@ int MPID_nem_ptl_cancel_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
#define FUNCNAME MPID_nem_ptl_lmt_start_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_cookie)
+int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPIR_Request *rreq, MPL_IOV s_cookie)
{
/* This function should only be called as a result of an Mrecv because of the CH3 protocol for
Rendezvous Mrecvs. The regular CH3 protocol is not optimal for portals, since we don't need
@@ -696,18 +693,18 @@ int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_c
regular large transfers because we handle them directly on the netmod. */
int mpi_errno = MPI_SUCCESS;
int dt_contig;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype *dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype*dt_ptr;
MPI_Aint dt_true_lb;
ptl_match_bits_t match_bits;
int was_incomplete;
int ret;
MPID_nem_ptl_vc_area *vc_ptl = VC_PTL(vc);
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_LMT_START_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_LMT_START_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_LMT_START_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_LMT_START_RECV);
/* This Rendezvous protocol does not do RTS-CTS. Since we have all the data, we limit to get it */
/* The following code is inspired on handler_recv_dqueue_large */
@@ -715,7 +712,7 @@ int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_c
match_bits = NPTL_MATCH(rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id,
rreq->dev.match.parts.rank);
MPIDI_CH3U_Request_increment_cc(rreq, &was_incomplete);
- MPIU_Assert(was_incomplete == 0);
+ MPIR_Assert(was_incomplete == 0);
MPIR_Request_add_ref(rreq);
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz, dt_ptr,
@@ -726,25 +723,25 @@ int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_c
big_get((char *)real_user_buf + PTL_LARGE_THRESHOLD, data_sz - PTL_LARGE_THRESHOLD, vc, match_bits, rreq);
/* The memcpy is done after the get purposely for overlapping */
- MPIU_Memcpy(real_user_buf, rreq->dev.tmpbuf, PTL_LARGE_THRESHOLD);
+ MPIR_Memcpy(real_user_buf, rreq->dev.tmpbuf, PTL_LARGE_THRESHOLD);
}
else {
MPI_Aint last;
- rreq->dev.segment_ptr = MPID_Segment_alloc();
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1(rreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count, rreq->dev.datatype,
+ "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count, rreq->dev.datatype,
rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
last = PTL_LARGE_THRESHOLD;
- MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.tmpbuf);
- MPIU_Assert(last == PTL_LARGE_THRESHOLD);
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.tmpbuf);
+ MPIR_Assert(last == PTL_LARGE_THRESHOLD);
rreq->dev.segment_first = PTL_LARGE_THRESHOLD;
last = rreq->dev.segment_size;
rreq->dev.iov_count = MPL_IOV_LIMIT;
- MPID_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov,
+ MPIDU_Segment_pack_vector(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, rreq->dev.iov,
&rreq->dev.iov_count);
if (last == rreq->dev.segment_size && last <= MPIDI_nem_ptl_ni_limits.max_msg_size + PTL_LARGE_THRESHOLD) {
/* Rest of message fits in one IOV */
@@ -768,19 +765,19 @@ int MPID_nem_ptl_lmt_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_c
else {
/* message won't fit in a single IOV, allocate buffer and unpack when received */
/* FIXME: For now, allocate a single large buffer to hold entire message */
- MPIU_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, rreq->dev.segment_size - rreq->dev.segment_first,
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(rreq)->chunk_buffer[0], void *, rreq->dev.segment_size - rreq->dev.segment_first,
mpi_errno, "chunk_buffer");
big_get(REQ_PTL(rreq)->chunk_buffer[0], rreq->dev.segment_size - rreq->dev.segment_first, vc, match_bits, rreq);
}
}
- MPIU_Free(rreq->dev.tmpbuf);
+ MPL_free(rreq->dev.tmpbuf);
rreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = 0; /* Required for do_cts in mpid_nem_lmt.c */
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_LMT_START_RECV);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_LMT_START_RECV);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
index f07ee0a..d9757e1 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_send.c
@@ -11,7 +11,7 @@
#define FUNCNAME big_meappend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static void big_meappend(void *buf, ptl_size_t left_to_send, MPIDI_VC_t *vc, ptl_match_bits_t match_bits, MPID_Request *sreq)
+static void big_meappend(void *buf, ptl_size_t left_to_send, MPIDI_VC_t *vc, ptl_match_bits_t match_bits, MPIR_Request *sreq)
{
int i, ret, was_incomplete;
MPID_nem_ptl_vc_area *vc_ptl;
@@ -30,24 +30,21 @@ static void big_meappend(void *buf, ptl_size_t left_to_send, MPIDI_VC_t *vc, ptl
me.min_free = 0;
/* allocate enough handles to cover all get operations */
- REQ_PTL(sreq)->get_me_p = MPIU_Malloc(sizeof(ptl_handle_me_t) *
+ REQ_PTL(sreq)->get_me_p = MPL_malloc(sizeof(ptl_handle_me_t) *
((left_to_send / MPIDI_nem_ptl_ni_limits.max_msg_size) + 1));
/* queue up as many entries as necessary to describe the entire message */
for (i = 0; left_to_send > 0; i++) {
/* send up to the maximum allowed by the portals interface */
- if (left_to_send > MPIDI_nem_ptl_ni_limits.max_msg_size)
- me.length = MPIDI_nem_ptl_ni_limits.max_msg_size;
- else
- me.length = left_to_send;
+ me.length = MPL_MIN(MPIDI_nem_ptl_ni_limits.max_msg_size, left_to_send);
ret = PtlMEAppend(MPIDI_nem_ptl_ni, MPIDI_nem_ptl_get_pt, &me, PTL_PRIORITY_LIST, sreq,
&REQ_PTL(sreq)->get_me_p[i]);
DBG_MSG_MEAPPEND("CTL", vc->pg_rank, me, sreq);
- MPIU_Assert(ret == 0);
+ MPIR_Assert(ret == 0);
/* increment the cc for each get operation */
MPIDI_CH3U_Request_increment_cc(sreq, &was_incomplete);
- MPIU_Assert(was_incomplete);
+ MPIR_Assert(was_incomplete);
/* account for what has been sent */
me.start = (char *)me.start + me.length;
@@ -62,18 +59,18 @@ static void big_meappend(void *buf, ptl_size_t left_to_send, MPIDI_VC_t *vc, ptl
static int handler_send(const ptl_event_t *e)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *const sreq = e->user_ptr;
+ MPIR_Request *const sreq = e->user_ptr;
int i, ret;
- MPIDI_STATE_DECL(MPID_STATE_HANDLER_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_HANDLER_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_HANDLER_SEND);
- MPIU_Assert(e->type == PTL_EVENT_SEND || e->type == PTL_EVENT_GET);
+ MPIR_Assert(e->type == PTL_EVENT_SEND || e->type == PTL_EVENT_GET);
/* if we are done, release all netmod resources */
- if (MPID_cc_get(sreq->cc) == 1) {
+ if (MPIR_cc_get(sreq->cc) == 1) {
if (REQ_PTL(sreq)->md != PTL_INVALID_HANDLE) {
ret = PtlMDRelease(REQ_PTL(sreq)->md);
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlmdrelease", "**ptlmdrelease %s", MPID_nem_ptl_strerror(ret));
@@ -81,10 +78,10 @@ static int handler_send(const ptl_event_t *e)
for (i = 0; i < MPID_NEM_PTL_NUM_CHUNK_BUFFERS; ++i)
if (REQ_PTL(sreq)->chunk_buffer[i])
- MPIU_Free(REQ_PTL(sreq)->chunk_buffer[i]);
+ MPL_free(REQ_PTL(sreq)->chunk_buffer[i]);
if (REQ_PTL(sreq)->get_me_p)
- MPIU_Free(REQ_PTL(sreq)->get_me_p);
+ MPL_free(REQ_PTL(sreq)->get_me_p);
}
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
@@ -92,7 +89,7 @@ static int handler_send(const ptl_event_t *e)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_HANDLER_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_HANDLER_SEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -104,24 +101,24 @@ static int handler_send(const ptl_event_t *e)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
- int tag, MPID_Comm *comm, int context_offset, struct MPID_Request **request)
+ int tag, MPIR_Comm *comm, int context_offset, struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
int ret;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype *dt_ptr;
- MPID_Request *sreq = NULL;
+ MPIDU_Datatype*dt_ptr;
+ MPIR_Request *sreq = NULL;
ptl_me_t me;
int initial_iov_count, remaining_iov_count;
ptl_md_t md;
MPI_Aint last;
- MPIU_CHKPMEM_DECL(2);
- MPIDI_STATE_DECL(MPID_STATE_SEND_MSG);
+ MPIR_CHKPMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_MSG);
- MPIDI_FUNC_ENTER(MPID_STATE_SEND_MSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_MSG);
MPID_nem_ptl_request_create_sreq(sreq, mpi_errno, comm);
sreq->dev.match.parts.rank = dest;
@@ -135,15 +132,15 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
}
MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "count="MPI_AINT_FMT_DEC_SPEC" datatype=%#x contig=%d data_sz=%lu", count, datatype, dt_contig, data_sz));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "count="MPI_AINT_FMT_DEC_SPEC" datatype=%#x contig=%d data_sz=%lu", count, datatype, dt_contig, data_sz));
if (data_sz <= PTL_LARGE_THRESHOLD) {
/* Small message. Send all data eagerly */
if (dt_contig) {
void *start = (char *)buf + dt_true_lb;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Small contig message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Small contig message");
REQ_PTL(sreq)->event_handler = handler_send;
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "&REQ_PTL(sreq)->event_handler = %p", &(REQ_PTL(sreq)->event_handler));
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "&REQ_PTL(sreq)->event_handler = %p", &(REQ_PTL(sreq)->event_handler));
if (start == NULL)
ret = MPID_nem_ptl_rptl_put(MPIDI_nem_ptl_global_md, (ptl_size_t)&dummy, data_sz, PTL_NO_ACK_REQ, vc_ptl->id, vc_ptl->pt,
NPTL_MATCH(tag, comm->context_id + context_offset, comm->rank), 0, sreq,
@@ -154,29 +151,29 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
NPTL_HEADER(ssend_flag, data_sz));
MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**ptlput", "**ptlput %s", MPID_nem_ptl_strerror(ret));
DBG_MSG_PUT("global", data_sz, vc->pg_rank, NPTL_MATCH(tag, comm->context_id + context_offset, comm->rank), NPTL_HEADER(ssend_flag, data_sz));
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "id.nid = %#x", vc_ptl->id.phys.nid);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "id.pid = %#x", vc_ptl->id.phys.pid);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "sreq = %p", sreq);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "vc_ptl->pt = %d", vc_ptl->pt);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "REQ_PTL(sreq)->event_handler = %p", REQ_PTL(sreq)->event_handler);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "id.nid = %#x", vc_ptl->id.phys.nid);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "id.pid = %#x", vc_ptl->id.phys.pid);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "sreq = %p", sreq);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "vc_ptl->pt = %d", vc_ptl->pt);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "REQ_PTL(sreq)->event_handler = %p", REQ_PTL(sreq)->event_handler);
goto fn_exit;
}
/* noncontig data */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Small noncontig message");
- sreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIR_ERR_CHKANDJUMP1(sreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Small noncontig message");
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(sreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
last = sreq->dev.segment_size;
sreq->dev.iov_count = MPL_IOV_LIMIT;
- MPID_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.iov, &sreq->dev.iov_count);
+ MPIDU_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.iov, &sreq->dev.iov_count);
if (last == sreq->dev.segment_size) {
/* IOV is able to describe entire message */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " entire message fits in IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " entire message fits in IOV");
md.start = sreq->dev.iov;
md.length = sreq->dev.iov_count;
md.options = PTL_IOVEC;
@@ -195,13 +192,13 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
}
/* IOV is not long enough to describe entire message */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " IOV too long: using bounce buffer");
- MPIU_CHKPMEM_MALLOC(REQ_PTL(sreq)->chunk_buffer[0], void *, data_sz, mpi_errno, "chunk_buffer");
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " IOV too long: using bounce buffer");
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(sreq)->chunk_buffer[0], void *, data_sz, mpi_errno, "chunk_buffer");
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
last = data_sz;
- MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, REQ_PTL(sreq)->chunk_buffer[0]);
- MPIU_Assert(last == sreq->dev.segment_size);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, REQ_PTL(sreq)->chunk_buffer[0]);
+ MPIR_Assert(last == sreq->dev.segment_size);
REQ_PTL(sreq)->event_handler = handler_send;
ret = MPID_nem_ptl_rptl_put(MPIDI_nem_ptl_global_md, (ptl_size_t)REQ_PTL(sreq)->chunk_buffer[0], data_sz, PTL_NO_ACK_REQ,
vc_ptl->id, vc_ptl->pt, NPTL_MATCH(tag, comm->context_id + context_offset, comm->rank), 0, sreq,
@@ -214,7 +211,7 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
/* Large message. Send first chunk of data and let receiver get the rest */
if (dt_contig) {
/* create ME for buffer so receiver can issue a GET for the data */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Large contig message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Large contig message");
big_meappend((char *)buf + dt_true_lb + PTL_LARGE_THRESHOLD, data_sz - PTL_LARGE_THRESHOLD, vc,
NPTL_MATCH(tag, comm->context_id + context_offset, comm->rank), sreq);
@@ -228,29 +225,29 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
}
/* Large noncontig data */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Large noncontig message");
- sreq->dev.segment_ptr = MPID_Segment_alloc();
- MPIR_ERR_CHKANDJUMP1(sreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Large noncontig message");
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(sreq->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
last = PTL_LARGE_THRESHOLD;
sreq->dev.iov_count = MPL_IOV_LIMIT;
- MPID_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.iov, &sreq->dev.iov_count);
+ MPIDU_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.iov, &sreq->dev.iov_count);
initial_iov_count = sreq->dev.iov_count;
sreq->dev.segment_first = last;
if (last == PTL_LARGE_THRESHOLD) {
/* first chunk of message fits into IOV */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " first chunk fits in IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " first chunk fits in IOV");
if (initial_iov_count < MPL_IOV_LIMIT) {
/* There may be space for the rest of the message in this IOV */
sreq->dev.iov_count = MPL_IOV_LIMIT - sreq->dev.iov_count;
last = sreq->dev.segment_size;
- MPID_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last,
+ MPIDU_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first, &last,
&sreq->dev.iov[initial_iov_count], &sreq->dev.iov_count);
remaining_iov_count = sreq->dev.iov_count;
@@ -258,7 +255,7 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
/* Entire message fit in one IOV */
int was_incomplete;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " rest of message fits in one IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " rest of message fits in one IOV");
/* Create ME for remaining data */
me.start = &sreq->dev.iov[initial_iov_count];
me.length = remaining_iov_count;
@@ -271,7 +268,7 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
me.ignore_bits = 0;
me.min_free = 0;
- MPIU_CHKPMEM_MALLOC(REQ_PTL(sreq)->get_me_p, ptl_handle_me_t *, sizeof(ptl_handle_me_t), mpi_errno, "get_me_p");
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(sreq)->get_me_p, ptl_handle_me_t *, sizeof(ptl_handle_me_t), mpi_errno, "get_me_p");
ret = PtlMEAppend(MPIDI_nem_ptl_ni, MPIDI_nem_ptl_get_pt, &me, PTL_PRIORITY_LIST, sreq,
&REQ_PTL(sreq)->get_me_p[0]);
@@ -279,7 +276,7 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
DBG_MSG_MEAPPEND("CTL", vc->pg_rank, me, sreq);
/* increment the cc for the get operation */
MPIDI_CH3U_Request_increment_cc(sreq, &was_incomplete);
- MPIU_Assert(was_incomplete);
+ MPIR_Assert(was_incomplete);
/* Create MD for first chunk */
md.start = sreq->dev.iov;
@@ -304,11 +301,11 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
}
/* allocate a temporary buffer and copy all the data to send */
- MPIU_CHKPMEM_MALLOC(REQ_PTL(sreq)->chunk_buffer[0], void *, data_sz, mpi_errno, "tmpbuf");
+ MPIR_CHKPMEM_MALLOC(REQ_PTL(sreq)->chunk_buffer[0], void *, data_sz, mpi_errno, "tmpbuf");
last = data_sz;
- MPID_Segment_pack(sreq->dev.segment_ptr, 0, &last, REQ_PTL(sreq)->chunk_buffer[0]);
- MPIU_Assert(last == data_sz);
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, 0, &last, REQ_PTL(sreq)->chunk_buffer[0]);
+ MPIR_Assert(last == data_sz);
big_meappend((char *)REQ_PTL(sreq)->chunk_buffer[0] + PTL_LARGE_THRESHOLD, data_sz - PTL_LARGE_THRESHOLD, vc,
NPTL_MATCH(tag, comm->context_id + context_offset, comm->rank), sreq);
@@ -322,15 +319,15 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
fn_exit:
*request = sreq;
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_SEND_MSG);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_MSG);
return mpi_errno;
fn_fail:
if (sreq) {
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
sreq = NULL;
}
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -339,16 +336,16 @@ static int send_msg(ptl_hdr_data_t ssend_flag, struct MPIDI_VC *vc, const void *
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_ptl_isend(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm, int context_offset, struct MPID_Request **request)
+ MPIR_Comm *comm, int context_offset, struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ISEND);
mpi_errno = send_msg(0, vc, buf, count, datatype, dest, tag, comm, context_offset, request);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ISEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ISEND);
return mpi_errno;
}
@@ -358,16 +355,16 @@ int MPID_nem_ptl_isend(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_nem_ptl_issend(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest, int tag,
- MPID_Comm *comm, int context_offset, struct MPID_Request **request)
+ MPIR_Comm *comm, int context_offset, struct MPIR_Request **request)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_ISSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_ISSEND);
mpi_errno = send_msg(NPTL_SSEND, vc, buf, count, datatype, dest, tag, comm, context_offset, request);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_ISSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_ISSEND);
return mpi_errno;
}
@@ -375,16 +372,16 @@ int MPID_nem_ptl_issend(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MP
#define FUNCNAME MPID_nem_ptl_cancel_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_ptl_cancel_send(struct MPIDI_VC *vc, struct MPID_Request *sreq)
+int MPID_nem_ptl_cancel_send(struct MPIDI_VC *vc, struct MPIR_Request *sreq)
{
int mpi_errno = MPI_SUCCESS;
MPID_PKT_DECL_CAST(upkt, MPIDI_nem_ptl_pkt_cancel_send_req_t, csr_pkt);
- MPID_Request *csr_sreq;
+ MPIR_Request *csr_sreq;
int was_incomplete;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_CANCEL_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_CANCEL_SEND);
/* The completion counter and reference count are incremented to keep
the request around long enough to receive a
@@ -408,10 +405,10 @@ int MPID_nem_ptl_cancel_send(struct MPIDI_VC *vc, struct MPID_Request *sreq)
0, &csr_sreq);
if (csr_sreq != NULL)
- MPID_Request_release(csr_sreq);
+ MPIR_Request_free(csr_sreq);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_CANCEL_SEND);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c
index 4541275..6cb5e48 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c
@@ -76,10 +76,10 @@ static int find_target(ptl_process_t id, struct rptl_target **target)
int mpi_errno = MPI_SUCCESS;
int ret = PTL_OK;
struct rptl_target *t;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_FIND_TARGET);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_FIND_TARGET);
- MPIDI_FUNC_ENTER(MPID_STATE_FIND_TARGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_FIND_TARGET);
for (t = rptl_info.target_list; t; t = t->next)
if (IDS_ARE_EQUAL(t->id, id))
@@ -87,7 +87,7 @@ static int find_target(ptl_process_t id, struct rptl_target **target)
/* if the target does not already exist, create one */
if (t == NULL) {
- MPIU_CHKPMEM_MALLOC(t, struct rptl_target *, sizeof(struct rptl_target), mpi_errno, "rptl target");
+ MPIR_CHKPMEM_MALLOC(t, struct rptl_target *, sizeof(struct rptl_target), mpi_errno, "rptl target");
MPL_DL_APPEND(rptl_info.target_list, t);
t->id = id;
@@ -103,14 +103,14 @@ static int find_target(ptl_process_t id, struct rptl_target **target)
*target = t;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_FIND_TARGET);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_FIND_TARGET);
return ret;
fn_fail:
if (mpi_errno)
ret = PTL_FAIL;
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -134,9 +134,9 @@ static int poke_progress(void)
int mpi_errno = MPI_SUCCESS;
ptl_process_t id;
ptl_pt_index_t data_pt, control_pt;
- MPIDI_STATE_DECL(MPID_STATE_POKE_PROGRESS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_POKE_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_POKE_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_POKE_PROGRESS);
/* make progress on local RPTLs */
for (rptl = rptl_info.rptl_list; rptl; rptl = rptl->next) {
@@ -311,7 +311,7 @@ static int poke_progress(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_POKE_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_POKE_PROGRESS);
return ret;
fn_fail:
@@ -331,9 +331,9 @@ static int rptl_put(ptl_handle_md_t md_handle, ptl_size_t local_offset, ptl_size
struct rptl_op *op;
int ret = PTL_OK;
struct rptl_target *target;
- MPIDI_STATE_DECL(MPID_STATE_RPTL_PUT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RPTL_PUT);
- MPIDI_FUNC_ENTER(MPID_STATE_RPTL_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RPTL_PUT);
ret = find_target(target_id, &target);
RPTLU_ERR_POP(ret, "error finding target structure\n");
@@ -372,7 +372,7 @@ static int rptl_put(ptl_handle_md_t md_handle, ptl_size_t local_offset, ptl_size
RPTLU_ERR_POP(ret, "Error from poke_progress\n");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_RPTL_PUT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RPTL_PUT);
return ret;
fn_fail:
@@ -405,9 +405,9 @@ int MPID_nem_ptl_rptl_get(ptl_handle_md_t md_handle, ptl_size_t local_offset, pt
struct rptl_op *op;
int ret = PTL_OK;
struct rptl_target *target;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_GET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_GET);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_GET);
ret = find_target(target_id, &target);
RPTLU_ERR_POP(ret, "error finding target structure\n");
@@ -437,7 +437,7 @@ int MPID_nem_ptl_rptl_get(ptl_handle_md_t md_handle, ptl_size_t local_offset, pt
RPTLU_ERR_POP(ret, "Error from poke_progress\n");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_GET);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_GET);
return ret;
fn_fail:
@@ -455,9 +455,9 @@ static int send_pause_messages(struct rptl *rptl)
ptl_process_t id;
ptl_pt_index_t data_pt, control_pt;
int ret = PTL_OK;
- MPIDI_STATE_DECL(MPID_STATE_SEND_PAUSE_MESSAGES);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_PAUSE_MESSAGES);
- MPIDI_FUNC_ENTER(MPID_STATE_SEND_PAUSE_MESSAGES);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_PAUSE_MESSAGES);
/* if no control portal is setup for this rptl, we are doomed */
assert(rptl->control.pt != PTL_PT_ANY);
@@ -484,7 +484,7 @@ static int send_pause_messages(struct rptl *rptl)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SEND_PAUSE_MESSAGES);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_PAUSE_MESSAGES);
return ret;
fn_fail:
@@ -501,9 +501,9 @@ static int clear_nacks(ptl_process_t target_id)
struct rptl_target *target;
struct rptl_op *op;
int ret = PTL_OK;
- MPIDI_STATE_DECL(MPID_STATE_CLEAR_NACKS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CLEAR_NACKS);
- MPIDI_FUNC_ENTER(MPID_STATE_CLEAR_NACKS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CLEAR_NACKS);
ret = find_target(target_id, &target);
RPTLU_ERR_POP(ret, "error finding target\n");
@@ -521,7 +521,7 @@ static int clear_nacks(ptl_process_t target_id)
RPTLU_ERR_POP(ret, "error in poke_progress\n");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CLEAR_NACKS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CLEAR_NACKS);
return ret;
fn_fail:
@@ -538,9 +538,9 @@ static int get_event_info(ptl_event_t * event, struct rptl **ret_rptl, struct rp
struct rptl *rptl;
struct rptl_op *op;
int ret = PTL_OK;
- MPIDI_STATE_DECL(MPID_STATE_GET_EVENT_INFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_GET_EVENT_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_GET_EVENT_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_GET_EVENT_INFO);
if (event->type == PTL_EVENT_SEND || event->type == PTL_EVENT_REPLY ||
event->type == PTL_EVENT_ACK) {
@@ -572,7 +572,7 @@ static int get_event_info(ptl_event_t * event, struct rptl **ret_rptl, struct rp
*ret_op = op;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_GET_EVENT_INFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_GET_EVENT_INFO);
return ret;
fn_fail:
@@ -588,10 +588,10 @@ static int stash_event(struct rptl_op *op, ptl_event_t event)
{
int mpi_errno = MPI_SUCCESS;
int ret = PTL_OK;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_STASH_EVENT);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STASH_EVENT);
- MPIDI_FUNC_ENTER(MPID_STATE_STASH_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STASH_EVENT);
/* make sure this is of the event type we know of */
assert(event.type == PTL_EVENT_SEND || event.type == PTL_EVENT_ACK);
@@ -607,25 +607,25 @@ static int stash_event(struct rptl_op *op, ptl_event_t event)
assert(op->u.put.send == NULL && op->u.put.ack == NULL);
if (event.type == PTL_EVENT_SEND) {
- MPIU_CHKPMEM_MALLOC(op->u.put.send, ptl_event_t *, sizeof(ptl_event_t), mpi_errno,
+ MPIR_CHKPMEM_MALLOC(op->u.put.send, ptl_event_t *, sizeof(ptl_event_t), mpi_errno,
"ptl event");
memcpy(op->u.put.send, &event, sizeof(ptl_event_t));
}
else {
- MPIU_CHKPMEM_MALLOC(op->u.put.ack, ptl_event_t *, sizeof(ptl_event_t), mpi_errno,
+ MPIR_CHKPMEM_MALLOC(op->u.put.ack, ptl_event_t *, sizeof(ptl_event_t), mpi_errno,
"ptl event");
memcpy(op->u.put.ack, &event, sizeof(ptl_event_t));
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_STASH_EVENT);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STASH_EVENT);
return ret;
fn_fail:
if (mpi_errno)
ret = PTL_FAIL;
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -644,9 +644,9 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
int ret = PTL_OK, tmp_ret = PTL_OK;
int mpi_errno = MPI_SUCCESS;
struct rptl_target *target;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_EQGET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_EQGET);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_EQGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_EQGET);
ret = poke_progress();
RPTLU_ERR_POP(ret, "error poking progress\n");
@@ -781,11 +781,11 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
/* discard pending events, since we will retransmit
* this op anyway */
if (op->u.put.ack) {
- MPIU_Free(op->u.put.ack);
+ MPL_free(op->u.put.ack);
op->u.put.ack = NULL;
}
if (op->u.put.send) {
- MPIU_Free(op->u.put.send);
+ MPL_free(op->u.put.send);
op->u.put.send = NULL;
}
}
@@ -829,7 +829,7 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
* events */
if (op->u.put.pt_type == RPTL_PT_CONTROL) {
/* drop the ack event */
- MPIU_Free(op->u.put.ack);
+ MPL_free(op->u.put.ack);
MPL_DL_DELETE(op->target->control_op_list, op);
rptli_op_free(op);
@@ -847,7 +847,7 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
memcpy(&pending_event, op->u.put.ack, sizeof(ptl_event_t));
pending_event_valid = 1;
}
- MPIU_Free(op->u.put.ack);
+ MPL_free(op->u.put.ack);
MPL_DL_DELETE(op->target->data_op_list, op);
rptli_op_free(op);
}
@@ -866,7 +866,7 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
* events */
if (op->u.put.pt_type == RPTL_PT_CONTROL) {
/* drop the send event */
- MPIU_Free(op->u.put.send);
+ MPL_free(op->u.put.send);
MPL_DL_DELETE(op->target->control_op_list, op);
rptli_op_free(op);
@@ -882,7 +882,7 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
/* user asked for an ACK, so return it to the user
* and queue up the SEND event for next time */
memcpy(&pending_event, op->u.put.send, sizeof(ptl_event_t));
- MPIU_Free(op->u.put.send);
+ MPL_free(op->u.put.send);
assert(pending_event_valid == 0);
pending_event_valid = 1;
}
@@ -890,7 +890,7 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
/* user didn't ask for an ACK, overwrite the ACK
* event with the pending send event */
memcpy(event, op->u.put.send, sizeof(ptl_event_t));
- MPIU_Free(op->u.put.send);
+ MPL_free(op->u.put.send);
/* set the event user pointer again, since we
* copied over the original event */
@@ -915,7 +915,7 @@ int MPID_nem_ptl_rptl_eqget(ptl_handle_eq_t eq_handle, ptl_event_t * event)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_EQGET);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_EQGET);
return ret;
fn_fail:
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_init.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_init.c
index 8b875fe..9e86d77 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_init.c
@@ -17,9 +17,9 @@ int rptli_post_control_buffer(ptl_handle_ni_t ni_handle, ptl_pt_index_t pt,
int ret;
ptl_me_t me;
ptl_process_t id;
- MPIDI_STATE_DECL(MPID_STATE_RPTLI_POST_CONTROL_BUFFER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RPTLI_POST_CONTROL_BUFFER);
- MPIDI_FUNC_ENTER(MPID_STATE_RPTLI_POST_CONTROL_BUFFER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RPTLI_POST_CONTROL_BUFFER);
id.phys.nid = PTL_NID_ANY;
id.phys.pid = PTL_PID_ANY;
@@ -43,7 +43,7 @@ int rptli_post_control_buffer(ptl_handle_ni_t ni_handle, ptl_pt_index_t pt,
RPTLU_ERR_POP(ret, "Error appending empty buffer to priority list\n");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_RPTLI_POST_CONTROL_BUFFER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RPTLI_POST_CONTROL_BUFFER);
return ret;
fn_fail:
@@ -62,9 +62,9 @@ int MPID_nem_ptl_rptl_init(int world_size, uint64_t max_origin_events,
ptl_pt_index_t * target_control_pt))
{
int ret = PTL_OK;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_INIT);
rptl_info.rptl_list = NULL;
rptl_info.target_list = NULL;
@@ -74,7 +74,7 @@ int MPID_nem_ptl_rptl_init(int world_size, uint64_t max_origin_events,
rptl_info.get_target_info = get_target_info;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_INIT);
return ret;
fn_fail:
@@ -93,9 +93,9 @@ int MPID_nem_ptl_rptl_drain_eq(int eq_count, ptl_handle_eq_t *eq)
struct rptl_op_pool_segment *op_segment;
int i;
struct rptl_target *target, *t;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE);
for (target = rptl_info.target_list; target; target = target->next) {
while (target->control_op_list || target->data_op_list) {
@@ -116,16 +116,16 @@ int MPID_nem_ptl_rptl_drain_eq(int eq_count, ptl_handle_eq_t *eq)
while (target->op_segment_list) {
op_segment = target->op_segment_list;
MPL_DL_DELETE(target->op_segment_list, op_segment);
- MPIU_Free(op_segment);
+ MPL_free(op_segment);
}
t = target->next;
- MPIU_Free(target);
+ MPL_free(target);
target = t;
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_FINALIZE);
return ret;
fn_fail:
@@ -145,15 +145,15 @@ int MPID_nem_ptl_rptl_ptinit(ptl_handle_ni_t ni_handle, ptl_handle_eq_t eq_handl
int mpi_errno = MPI_SUCCESS;
int i;
ptl_md_t md;
- MPIU_CHKPMEM_DECL(2);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT);
+ MPIR_CHKPMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT);
/* setup the parts of rptls that can be done before world size or
* target information */
- MPIU_CHKPMEM_MALLOC(rptl, struct rptl *, sizeof(struct rptl), mpi_errno, "rptl");
+ MPIR_CHKPMEM_MALLOC(rptl, struct rptl *, sizeof(struct rptl), mpi_errno, "rptl");
MPL_DL_APPEND(rptl_info.rptl_list, rptl);
rptl->local_state = RPTL_LOCAL_STATE_ACTIVE;
@@ -178,7 +178,7 @@ int MPID_nem_ptl_rptl_ptinit(ptl_handle_ni_t ni_handle, ptl_handle_eq_t eq_handl
/* post world_size number of empty buffers on the control portal */
if (rptl->control.pt != PTL_PT_ANY) {
- MPIU_CHKPMEM_MALLOC(rptl->control.me, ptl_handle_me_t *,
+ MPIR_CHKPMEM_MALLOC(rptl->control.me, ptl_handle_me_t *,
2 * rptl_info.world_size * sizeof(ptl_handle_me_t), mpi_errno,
"rptl target info");
for (i = 0; i < 2 * rptl_info.world_size; i++) {
@@ -189,14 +189,14 @@ int MPID_nem_ptl_rptl_ptinit(ptl_handle_ni_t ni_handle, ptl_handle_eq_t eq_handl
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_PTINIT);
return ret;
fn_fail:
if (mpi_errno)
ret = PTL_FAIL;
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -210,9 +210,9 @@ int MPID_nem_ptl_rptl_ptfini(ptl_pt_index_t pt_index)
int i;
int ret = PTL_OK;
struct rptl *rptl;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI);
/* find the right rptl */
for (rptl = rptl_info.rptl_list; rptl && rptl->data.pt != pt_index; rptl = rptl->next);
@@ -224,14 +224,14 @@ int MPID_nem_ptl_rptl_ptfini(ptl_pt_index_t pt_index)
ret = PtlMEUnlink(rptl->control.me[i]);
RPTLU_ERR_POP(ret, "Error unlinking control buffers\n");
}
- MPIU_Free(rptl->control.me);
+ MPL_free(rptl->control.me);
}
MPL_DL_DELETE(rptl_info.rptl_list, rptl);
- MPIU_Free(rptl);
+ MPL_free(rptl);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_PTL_RPTL_PTFINI);
return ret;
fn_fail:
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_op.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_op.c
index 7997883..e0b3005 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_op.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl_op.c
@@ -17,15 +17,15 @@ int rptli_op_alloc(struct rptl_op **op, struct rptl_target *target)
struct rptl_op_pool_segment *op_segment;
int mpi_errno = MPI_SUCCESS;
int i;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_RPTLI_OP_ALLOC);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RPTLI_OP_ALLOC);
- MPIDI_FUNC_ENTER(MPID_STATE_RPTLI_OP_ALLOC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RPTLI_OP_ALLOC);
assert(target);
if (target->op_pool == NULL) {
- MPIU_CHKPMEM_MALLOC(op_segment, struct rptl_op_pool_segment *, sizeof(struct rptl_op_pool_segment),
+ MPIR_CHKPMEM_MALLOC(op_segment, struct rptl_op_pool_segment *, sizeof(struct rptl_op_pool_segment),
mpi_errno, "op pool segment");
MPL_DL_APPEND(target->op_segment_list, op_segment);
@@ -37,14 +37,14 @@ int rptli_op_alloc(struct rptl_op **op, struct rptl_target *target)
MPL_DL_DELETE(target->op_pool, *op);
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_RPTLI_OP_ALLOC);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RPTLI_OP_ALLOC);
return ret;
fn_fail:
if (mpi_errno)
ret = PTL_FAIL;
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -55,11 +55,11 @@ int rptli_op_alloc(struct rptl_op **op, struct rptl_target *target)
#define FCNAME MPL_QUOTE(FUNCNAME)
void rptli_op_free(struct rptl_op *op)
{
- MPIDI_STATE_DECL(MPID_STATE_RPTLI_OP_FREE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RPTLI_OP_FREE);
- MPIDI_FUNC_ENTER(MPID_STATE_RPTLI_OP_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RPTLI_OP_FREE);
MPL_DL_APPEND(op->target->op_pool, op);
- MPIDI_FUNC_EXIT(MPID_STATE_RPTLI_OP_FREE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RPTLI_OP_FREE);
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/.state-cache b/src/mpid/ch3/channels/nemesis/netmod/tcp/.state-cache
index 18ddd02..42bfced 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/.state-cache
@@ -1,16 +1,37 @@
<dir>
-<file name="socksm.c" info="1447123141"/>
-<file name="tcp_send.c" info="1447123141"/>
-<file name="tcp_finalize.c" info="1447123141"/>
-<file name="tcp_init.c" info="1447123141"/>
-<file name="tcp_impl.h" info="1447123141"/>
-<file name="tcp_ckpt.c" info="1447123141"/>
-<file name="socksm.h" info="1447123141"/>
-<file name="tcp_queue.h" info="1447123141"/>
-<file name="tcp_getip.c" info="1447123141"/>
-<file name="tcp_utility.c" info="1447123141"/>
+<file name="tcp_init.c" info="1478973152"/>
+<file name="tcp_finalize.c" info="1478973152"/>
+<file name="tcp_ckpt.c" info="1478973152"/>
+<file name="socksm.c" info="1478973152"/>
+<file name="socksm.h" info="1478973152"/>
+<file name="tcp_utility.c" info="1478973152"/>
+<file name="tcp_send.c" info="1478973152"/>
+<file name="tcp_impl.h" info="1478973152"/>
+<file name="tcp_queue.h" info="1478973152"/>
+<file name="tcp_getip.c" info="1478973152"/>
</dir>
<data>
+<fileinfo name="tcp_init.c">
+MPID_STATE_SET_UP_LISTENER set_up_listener
+MPID_STATE_MPID_NEM_TCP_INIT MPID_nem_tcp_init
+MPID_STATE_CKPT_RESTART ckpt_restart
+MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD MPID_nem_tcp_get_business_card
+MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT MPID_nem_tcp_connect_to_root
+MPID_STATE_MPID_NEM_TCP_VC_INIT MPID_nem_tcp_vc_init
+MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC MPID_nem_tcp_get_addr_port_from_bc
+MPID_STATE_MPID_NEM_TCP_BIND MPID_nem_tcp_bind
+MPID_STATE_MPID_NEM_TCP_VC_TERMINATE MPID_nem_tcp_vc_terminate
+MPID_NEM_TCP_VC_TERMINATED MPID_nem_tcp_vc_terminated
+</fileinfo>
+<fileinfo name="tcp_finalize.c">
+MPID_STATE_MPID_NEM_TCP_FINALIZE MPID_nem_tcp_finalize
+</fileinfo>
+<fileinfo name="tcp_ckpt.c">
+MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC MPID_nem_tcp_ckpt_pause_send_vc
+MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER MPID_nem_tcp_ckpt_unpause_handler
+MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC MPID_nem_tcp_ckpt_continue_vc
+MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC MPID_nem_tcp_ckpt_restart_vc
+</fileinfo>
<fileinfo name="socksm.c">
MPID_STATE_FOUND_BETTER_SC found_better_sc
MPID_STATE_SEND_ID_INFO send_id_info
@@ -36,6 +57,11 @@ MPID_STATE_MPID_NEM_TCP_STATE_LISTENING_HANDLER state_listening_handler
MPID_STATE_ERROR_CLOSED error_closed
MPID_STATE_MPID_NEM_TCP_CLEANUP_ON_ERROR MPID_nem_tcp_cleanup_on_error
</fileinfo>
+<fileinfo name="socksm.h">
+</fileinfo>
+<fileinfo name="tcp_utility.c">
+MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO MPID_nem_tcp_get_vc_from_conninfo
+</fileinfo>
<fileinfo name="tcp_send.c">
MPID_STATE_MPID_NEM_TCP_SEND_QUEUED MPID_nem_tcp_send_queued
MPID_STATE_MPID_NEM_TCP_CONN_EST MPID_nem_tcp_conn_est
@@ -45,37 +71,11 @@ MPID_STATE_MPID_NEM_TCP_ISENDCONTIGMSG MPID_nem_tcp_iSendContig
MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG MPID_nem_tcp_SendNoncontig
MPID_STATE_MPID_NEM_TCP_ERROR_OUT_SEND_QUEUE MPID_nem_tcp_error_out_send_queue
</fileinfo>
-<fileinfo name="tcp_finalize.c">
-MPID_STATE_MPID_NEM_TCP_FINALIZE MPID_nem_tcp_finalize
-</fileinfo>
-<fileinfo name="tcp_init.c">
-MPID_STATE_SET_UP_LISTENER set_up_listener
-MPID_STATE_MPID_NEM_TCP_INIT MPID_nem_tcp_init
-MPID_STATE_CKPT_RESTART ckpt_restart
-MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD MPID_nem_tcp_get_business_card
-MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT MPID_nem_tcp_connect_to_root
-MPID_STATE_MPID_NEM_TCP_VC_INIT MPID_nem_tcp_vc_init
-MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC MPID_nem_tcp_get_addr_port_from_bc
-MPID_STATE_MPID_NEM_TCP_BIND MPID_nem_tcp_bind
-MPID_STATE_MPID_NEM_TCP_VC_TERMINATE MPID_nem_tcp_vc_terminate
-MPID_NEM_TCP_VC_TERMINATED MPID_nem_tcp_vc_terminated
-</fileinfo>
<fileinfo name="tcp_impl.h">
</fileinfo>
-<fileinfo name="tcp_ckpt.c">
-MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC MPID_nem_tcp_ckpt_pause_send_vc
-MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER MPID_nem_tcp_ckpt_unpause_handler
-MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC MPID_nem_tcp_ckpt_continue_vc
-MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC MPID_nem_tcp_ckpt_restart_vc
-</fileinfo>
-<fileinfo name="socksm.h">
-</fileinfo>
<fileinfo name="tcp_queue.h">
</fileinfo>
<fileinfo name="tcp_getip.c">
MPID_STATE_MPIDI_GETIPINTERFACE MPIDI_GetIPInterface
</fileinfo>
-<fileinfo name="tcp_utility.c">
-MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO MPID_nem_tcp_get_vc_from_conninfo
-</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.c
index 4af735f..c44b213 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.c
@@ -130,12 +130,12 @@ static inline int is_same_connection(sockconn_t *sc1, sockconn_t *sc2)
/* Returns TRUE iff sc1 and sc2 connect the same processes */
/* if pg_is_set is TRUE, then either it's the same pg, or pg_id is not NULL */
- MPIU_Assert(!sc1->pg_is_set || sc1->is_same_pg || sc1->pg_id != NULL);
- MPIU_Assert(!sc2->pg_is_set || sc2->is_same_pg || sc2->pg_id != NULL);
+ MPIR_Assert(!sc1->pg_is_set || sc1->is_same_pg || sc1->pg_id != NULL);
+ MPIR_Assert(!sc2->pg_is_set || sc2->is_same_pg || sc2->pg_id != NULL);
/* if it's a tmpvc, the pg should not be set */
- MPIU_Assert(!sc1->is_tmpvc || !sc1->pg_is_set);
- MPIU_Assert(!sc1->is_tmpvc || !sc1->pg_is_set);
+ MPIR_Assert(!sc1->is_tmpvc || !sc1->pg_is_set);
+ MPIR_Assert(!sc1->is_tmpvc || !sc1->pg_is_set);
return !sc1->is_tmpvc && !sc2->is_tmpvc &&
sc1->pg_is_set && sc2->pg_is_set &&
@@ -153,14 +153,14 @@ static inline int is_same_connection(sockconn_t *sc1, sockconn_t *sc2)
static int alloc_sc_plfd_tbls (void)
{
int i, mpi_errno = MPI_SUCCESS, idx = -1;
- MPIU_CHKPMEM_DECL (2);
+ MPIR_CHKPMEM_DECL (2);
- MPIU_Assert(g_sc_tbl == NULL);
- MPIU_Assert(MPID_nem_tcp_plfd_tbl == NULL);
+ MPIR_Assert(g_sc_tbl == NULL);
+ MPIR_Assert(MPID_nem_tcp_plfd_tbl == NULL);
- MPIU_CHKPMEM_MALLOC (g_sc_tbl, sockconn_t *, g_tbl_capacity * sizeof(sockconn_t),
+ MPIR_CHKPMEM_MALLOC (g_sc_tbl, sockconn_t *, g_tbl_capacity * sizeof(sockconn_t),
mpi_errno, "connection table");
- MPIU_CHKPMEM_MALLOC (MPID_nem_tcp_plfd_tbl, struct pollfd *, g_tbl_capacity * sizeof(struct pollfd),
+ MPIR_CHKPMEM_MALLOC (MPID_nem_tcp_plfd_tbl, struct pollfd *, g_tbl_capacity * sizeof(struct pollfd),
mpi_errno, "pollfd table");
#if defined(MPICH_DEBUG_MEMINIT)
/* We initialize the arrays in order to eliminate spurious valgrind errors
@@ -174,22 +174,22 @@ static int alloc_sc_plfd_tbls (void)
INIT_SC_ENTRY(((sockconn_t *)&g_sc_tbl[i]), i);
INIT_POLLFD_ENTRY(((struct pollfd *)&MPID_nem_tcp_plfd_tbl[i]));
}
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
mpi_errno = find_free_entry(&idx);
if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
- MPIU_Assert(0 == idx); /* assumed in other parts of this file */
- MPIU_Memcpy (&g_sc_tbl[idx], &MPID_nem_tcp_g_lstn_sc, sizeof(MPID_nem_tcp_g_lstn_sc));
- MPIU_Memcpy (&MPID_nem_tcp_plfd_tbl[idx], &MPID_nem_tcp_g_lstn_plfd, sizeof(MPID_nem_tcp_g_lstn_plfd));
- MPIU_Assert(MPID_nem_tcp_plfd_tbl[idx].fd == g_sc_tbl[idx].fd);
- MPIU_Assert(MPID_nem_tcp_plfd_tbl[idx].events == POLLIN);
+ MPIR_Assert(0 == idx); /* assumed in other parts of this file */
+ MPIR_Memcpy (&g_sc_tbl[idx], &MPID_nem_tcp_g_lstn_sc, sizeof(MPID_nem_tcp_g_lstn_sc));
+ MPIR_Memcpy (&MPID_nem_tcp_plfd_tbl[idx], &MPID_nem_tcp_g_lstn_plfd, sizeof(MPID_nem_tcp_g_lstn_plfd));
+ MPIR_Assert(MPID_nem_tcp_plfd_tbl[idx].fd == g_sc_tbl[idx].fd);
+ MPIR_Assert(MPID_nem_tcp_plfd_tbl[idx].events == POLLIN);
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPIR_CHKPMEM_REAP();
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -201,8 +201,8 @@ static int free_sc_plfd_tbls (void)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Free(g_sc_tbl);
- MPIU_Free(MPID_nem_tcp_plfd_tbl);
+ MPL_free(g_sc_tbl);
+ MPL_free(MPID_nem_tcp_plfd_tbl);
return mpi_errno;
}
@@ -223,17 +223,17 @@ static int expand_sc_plfd_tbls (void)
sockconn_t *new_sc_tbl = NULL;
struct pollfd *new_plfd_tbl = NULL;
int new_capacity = g_tbl_capacity + CONN_PLFD_TBL_GROW_SIZE, i;
- MPIU_CHKPMEM_DECL (2);
+ MPIR_CHKPMEM_DECL (2);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "expand_sc_plfd_tbls Entry"));
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "expand_sc_plfd_tbls b4 g_sc_tbl[0].fd=%d", g_sc_tbl[0].fd));
- MPIU_CHKPMEM_MALLOC (new_sc_tbl, sockconn_t *, new_capacity * sizeof(sockconn_t),
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "expand_sc_plfd_tbls Entry"));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "expand_sc_plfd_tbls b4 g_sc_tbl[0].fd=%d", g_sc_tbl[0].fd));
+ MPIR_CHKPMEM_MALLOC (new_sc_tbl, sockconn_t *, new_capacity * sizeof(sockconn_t),
mpi_errno, "expanded connection table");
- MPIU_CHKPMEM_MALLOC (new_plfd_tbl, struct pollfd *, new_capacity * sizeof(struct pollfd),
+ MPIR_CHKPMEM_MALLOC (new_plfd_tbl, struct pollfd *, new_capacity * sizeof(struct pollfd),
mpi_errno, "expanded pollfd table");
- MPIU_Memcpy (new_sc_tbl, g_sc_tbl, g_tbl_capacity * sizeof(sockconn_t));
- MPIU_Memcpy (new_plfd_tbl, MPID_nem_tcp_plfd_tbl, g_tbl_capacity * sizeof(struct pollfd));
+ MPIR_Memcpy (new_sc_tbl, g_sc_tbl, g_tbl_capacity * sizeof(sockconn_t));
+ MPIR_Memcpy (new_plfd_tbl, MPID_nem_tcp_plfd_tbl, g_tbl_capacity * sizeof(struct pollfd));
/* VCs have pointers to entries in the sc table. These
are updated here after the expand. */
@@ -253,8 +253,8 @@ static int expand_sc_plfd_tbls (void)
}
}
- MPIU_Free(g_sc_tbl);
- MPIU_Free(MPID_nem_tcp_plfd_tbl);
+ MPL_free(g_sc_tbl);
+ MPL_free(MPID_nem_tcp_plfd_tbl);
g_sc_tbl = new_sc_tbl;
MPID_nem_tcp_plfd_tbl = new_plfd_tbl;
for (i = g_tbl_capacity; i < new_capacity; i++) {
@@ -263,29 +263,29 @@ static int expand_sc_plfd_tbls (void)
}
g_tbl_capacity = new_capacity;
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "expand_sc_plfd_tbls af g_sc_tbl[0].fd=%d", g_sc_tbl[0].fd));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "expand_sc_plfd_tbls af g_sc_tbl[0].fd=%d", g_sc_tbl[0].fd));
for (i = 0; i < g_tbl_capacity; ++i)
{
sockconn_t *sc = &g_sc_tbl[i];
MPIDI_VC_t *vc = sc->vc;
- MPIU_AssertDeclValue(MPID_nem_tcp_vc_area *vc_tcp, VC_TCP(vc));
+ MPIR_AssertDeclValue(MPID_nem_tcp_vc_area *vc_tcp, VC_TCP(vc));
/* sockconn_t *dbg_sc = g_sc_tbl[i].vc ? VC_FIELD(g_sc_tbl[i].vc, sc) : (sockconn_t*)(-1); */
/* The state is only valid if the FD is valid. The VC field is only
valid if the state is valid and COMMRDY. */
- MPIU_Assert(MPID_nem_tcp_plfd_tbl[i].fd == CONN_INVALID_FD ||
+ MPIR_Assert(MPID_nem_tcp_plfd_tbl[i].fd == CONN_INVALID_FD ||
sc->state.cstate != CONN_STATE_TS_COMMRDY ||
vc_tcp->sc == sc);
}
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "expand_sc_plfd_tbls Exit"));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "expand_sc_plfd_tbls Exit"));
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPIR_CHKPMEM_REAP();
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -312,7 +312,7 @@ static int find_free_entry(int *idx)
if (!Q_EMPTY(freeq)) {
Q_DEQUEUE(&freeq, ((freenode_t **)&node));
*idx = node->index;
- MPIU_Free(node);
+ MPL_free(node);
goto fn_exit;
}
@@ -322,7 +322,7 @@ static int find_free_entry(int *idx)
goto fn_fail;
}
- MPIU_Assert(g_tbl_capacity > g_tbl_size);
+ MPIR_Assert(g_tbl_capacity > g_tbl_size);
*idx = g_tbl_size;
++g_tbl_size;
@@ -334,7 +334,7 @@ static int find_free_entry(int *idx)
INIT_POLLFD_ENTRY(&MPID_nem_tcp_plfd_tbl[*idx]);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -349,9 +349,9 @@ static int find_free_entry(int *idx)
static int found_better_sc(sockconn_t *sc, sockconn_t **fnd_sc)
{
int i, found = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_FOUND_BETTER_SC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_FOUND_BETTER_SC);
- MPIDI_FUNC_ENTER(MPID_STATE_FOUND_BETTER_SC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_FOUND_BETTER_SC);
/* tmpvc's can never match a better sc */
if (sc->is_tmpvc) {
@@ -360,7 +360,7 @@ static int found_better_sc(sockconn_t *sc, sockconn_t **fnd_sc)
}
/* if we don't know our own pg info, how can we look for a better SC? */
- MPIU_Assert(sc->pg_is_set);
+ MPIR_Assert(sc->pg_is_set);
for(i = 0; i < g_tbl_size && !found; i++)
{
@@ -373,21 +373,21 @@ static int found_better_sc(sockconn_t *sc, sockconn_t **fnd_sc)
switch (sc->state.cstate)
{
case CONN_STATE_TC_C_CNTD:
- MPIU_Assert(fnd_sc == NULL);
+ MPIR_Assert(fnd_sc == NULL);
if (istate == CONN_STATE_TS_COMMRDY ||
istate == CONN_STATE_TA_C_RANKRCVD ||
istate == CONN_STATE_TC_C_TMPVCSENT)
found = TRUE;
break;
case CONN_STATE_TA_C_RANKRCVD:
- MPIU_Assert(fnd_sc != NULL);
+ MPIR_Assert(fnd_sc != NULL);
if (istate == CONN_STATE_TS_COMMRDY || istate == CONN_STATE_TC_C_RANKSENT) {
found = TRUE;
*fnd_sc = iter_sc;
}
break;
case CONN_STATE_TA_C_TMPVCRCVD:
- MPIU_Assert(fnd_sc != NULL);
+ MPIR_Assert(fnd_sc != NULL);
if (istate == CONN_STATE_TS_COMMRDY || istate == CONN_STATE_TC_C_TMPVCSENT) {
found = TRUE;
*fnd_sc = iter_sc;
@@ -396,7 +396,7 @@ static int found_better_sc(sockconn_t *sc, sockconn_t **fnd_sc)
/* Add code for other states here, if need be. */
default:
/* FIXME: need to handle error condition better */
- MPIU_Assert (0);
+ MPIR_Assert (0);
break;
}
}
@@ -405,23 +405,23 @@ static int found_better_sc(sockconn_t *sc, sockconn_t **fnd_sc)
fn_exit:
if (found) {
if (fnd_sc) {
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE,
- (MPIU_DBG_FDEST, "found_better_sc(sc=%p (%s), *fnd_sc=%p (%s)) found=TRUE",
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE,
+ (MPL_DBG_FDEST, "found_better_sc(sc=%p (%s), *fnd_sc=%p (%s)) found=TRUE",
sc, CONN_STATE_STR[sc->state.cstate],
*fnd_sc, (*fnd_sc ? CONN_STATE_STR[(*fnd_sc)->state.cstate] : "N/A")));
}
else {
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE,
- (MPIU_DBG_FDEST, "found_better_sc(sc=%p (%s), fnd_sc=(nil)) found=TRUE",
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE,
+ (MPL_DBG_FDEST, "found_better_sc(sc=%p (%s), fnd_sc=(nil)) found=TRUE",
sc, CONN_STATE_STR[sc->state.cstate]));
}
}
else {
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE,
- (MPIU_DBG_FDEST, "found_better_sc(sc=%p (%s), *fnd_sc=N/A) found=FALSE",
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE,
+ (MPL_DBG_FDEST, "found_better_sc(sc=%p (%s), *fnd_sc=N/A) found=FALSE",
sc, CONN_STATE_STR[sc->state.cstate]));
}
- MPIDI_FUNC_EXIT(MPID_STATE_FOUND_BETTER_SC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_FOUND_BETTER_SC);
return found;
}
@@ -433,7 +433,7 @@ fn_exit:
static int vc_is_in_shutdown(MPIDI_VC_t *vc)
{
int retval = FALSE;
- MPIU_Assert(vc != NULL);
+ MPIR_Assert(vc != NULL);
if (vc->state == MPIDI_VC_STATE_REMOTE_CLOSE ||
vc->state == MPIDI_VC_STATE_CLOSE_ACKED ||
vc->state == MPIDI_VC_STATE_CLOSED ||
@@ -445,7 +445,7 @@ static int vc_is_in_shutdown(MPIDI_VC_t *vc)
retval = TRUE;
}
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "vc_is_in_shutdown(%p)=%s", vc, (retval ? "TRUE" : "FALSE")));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "vc_is_in_shutdown(%p)=%s", vc, (retval ? "TRUE" : "FALSE")));
return retval;
}
@@ -462,11 +462,11 @@ static int send_id_info(const sockconn_t *const sc)
int buf_size, iov_cnt = 2;
ssize_t offset;
size_t pg_id_len = 0;
- MPIDI_STATE_DECL(MPID_STATE_SEND_ID_INFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_ID_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_SEND_ID_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_ID_INFO);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "my_pg->id=%s my_pg->rank=%d, sc->pg_rank=%d sc->is_same_pg=%s",
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "my_pg->id=%s my_pg->rank=%d, sc->pg_rank=%d sc->is_same_pg=%s",
(char *)MPIDI_Process.my_pg->id, MPIDI_Process.my_pg_rank, sc->pg_rank,
(sc->is_same_pg ? "TRUE" : "FALSE")));
if (!sc->is_same_pg)
@@ -475,6 +475,8 @@ static int send_id_info(const sockconn_t *const sc)
/* store ending NULL also */
/* FIXME better keep pg_id_len itself as part of MPIDI_Process.my_pg structure to */
/* avoid computing the length of string everytime this function is called. */
+
+ MPL_VG_MEM_INIT(&hdr, sizeof(hdr));
hdr.pkt_type = MPIDI_NEM_TCP_SOCKSM_PKT_ID_INFO;
hdr.datalen = sizeof(MPIDI_nem_tcp_idinfo_t) + pg_id_len;
@@ -494,18 +496,18 @@ static int send_id_info(const sockconn_t *const sc)
}
offset = MPL_large_writev(sc->fd, iov, iov_cnt);
- MPIR_ERR_CHKANDJUMP1(offset == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIU_Strerror(errno));
- MPIR_ERR_CHKANDJUMP1(offset != buf_size, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(offset == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIR_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(offset != buf_size, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIR_Strerror(errno));
/* FIXME log appropriate error */
/* FIXME-Z1 socket is just connected and we are sending a few bytes. So, there should not */
/* be a problem of partial data only being written to. If partial data written, */
/* handle this. */
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SEND_ID_INFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_ID_INFO);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d, offset=%lld, errno=%d %s", mpi_errno, (long long)offset, errno, MPIU_Strerror(errno)));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d, offset=%lld, errno=%d %s", mpi_errno, (long long)offset, errno, MPIR_Strerror(errno)));
goto fn_exit;
}
@@ -522,16 +524,18 @@ static int send_tmpvc_info(const sockconn_t *const sc)
struct iovec iov[3];
int buf_size, iov_cnt = 2;
ssize_t offset;
- MPIDI_STATE_DECL(MPID_STATE_SEND_TMPVC_INFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_TMPVC_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_SEND_TMPVC_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_TMPVC_INFO);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "my->pg_rank=%d, sc->pg_rank=%d"
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "my->pg_rank=%d, sc->pg_rank=%d"
, MPIDI_Process.my_pg_rank, sc->pg_rank));
/* store ending NULL also */
/* FIXME better keep pg_id_len itself as part of MPIDI_Process.my_pg structure to */
/* avoid computing the length of string everytime this function is called. */
+
+ MPL_VG_MEM_INIT(&hdr, sizeof(hdr));
hdr.pkt_type = MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_INFO;
hdr.datalen = sizeof(MPIDI_nem_tcp_portinfo_t);
@@ -544,18 +548,18 @@ static int send_tmpvc_info(const sockconn_t *const sc)
buf_size = sizeof(hdr) + sizeof(port_info);
offset = MPL_large_writev(sc->fd, iov, iov_cnt);
- MPIR_ERR_CHKANDJUMP1(offset == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIU_Strerror(errno));
- MPIR_ERR_CHKANDJUMP1(offset != buf_size, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(offset == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIR_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(offset != buf_size, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIR_Strerror(errno));
/* FIXME log appropriate error */
/* FIXME-Z1 socket is just connected and we are sending a few bytes. So, there should not */
/* be a problem of partial data only being written to. If partial data written, */
/* handle this. */
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SEND_TMPVC_INFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_TMPVC_INFO);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d, offset=%lld, errno=%d %s", mpi_errno, (long long)offset, errno, MPIU_Strerror(errno)));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d, offset=%lld, errno=%d %s", mpi_errno, (long long)offset, errno, MPIR_Strerror(errno)));
goto fn_exit;
}
@@ -574,11 +578,11 @@ static int recv_id_or_tmpvc_info(sockconn_t *const sc, int *got_sc_eof)
struct iovec iov[2];
char *pg_id = NULL;
- MPIU_CHKPMEM_DECL (1);
- MPIU_CHKLMEM_DECL (1);
- MPIDI_STATE_DECL(MPID_STATE_RECV_ID_OR_TMPVC_INFO);
+ MPIR_CHKPMEM_DECL (1);
+ MPIR_CHKLMEM_DECL (1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RECV_ID_OR_TMPVC_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_RECV_ID_OR_TMPVC_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RECV_ID_OR_TMPVC_INFO);
*got_sc_eof = 0;
@@ -590,24 +594,24 @@ static int recv_id_or_tmpvc_info(sockconn_t *const sc, int *got_sc_eof)
*got_sc_eof = 1;
goto fn_exit;
}
- MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIR_Strerror(errno));
MPIR_ERR_CHKANDJUMP(nread != hdr_len, mpi_errno, MPI_ERR_OTHER, "**read"); /* FIXME-Z1 */
- MPIU_Assert(hdr.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_INFO ||
+ MPIR_Assert(hdr.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_INFO ||
hdr.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_INFO);
- MPIU_Assert(hdr.datalen != 0);
+ MPIR_Assert(hdr.datalen != 0);
if (hdr.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_INFO) {
iov[0].iov_base = (void *) &(sc->pg_rank);
iov[0].iov_len = sizeof(sc->pg_rank);
pg_id_len = hdr.datalen - sizeof(MPIDI_nem_tcp_idinfo_t);
if (pg_id_len != 0) {
- MPIU_CHKLMEM_MALLOC (pg_id, char *, pg_id_len, mpi_errno, "sockconn pg_id");
+ MPIR_CHKLMEM_MALLOC (pg_id, char *, pg_id_len, mpi_errno, "sockconn pg_id");
iov[1].iov_base = (void *)pg_id;
iov[1].iov_len = pg_id_len;
++iov_cnt;
}
nread = MPL_large_readv(sc->fd, iov, iov_cnt);
- MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIR_Strerror(errno));
MPIR_ERR_CHKANDJUMP(nread != hdr.datalen, mpi_errno, MPI_ERR_OTHER, "**read"); /* FIXME-Z1 */
if (pg_id_len == 0) {
sc->is_same_pg = TRUE;
@@ -627,24 +631,24 @@ static int recv_id_or_tmpvc_info(sockconn_t *const sc, int *got_sc_eof)
MPIDI_VC_t *sc_vc = sc->vc;
MPID_nem_tcp_vc_area *sc_vc_tcp = VC_TCP(sc_vc);
- MPIU_Assert(sc_vc != NULL);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "about to incr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc_vc, sc_vc_tcp->sc_ref_count));
+ MPIR_Assert(sc_vc != NULL);
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "about to incr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc_vc, sc_vc_tcp->sc_ref_count));
++sc_vc_tcp->sc_ref_count;
}
/* very important, without this is_same_connection() will always fail */
sc->pg_is_set = TRUE;
- MPIU_Assert(!sc->is_tmpvc);
+ MPIR_Assert(!sc->is_tmpvc);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "PKT_ID_INFO: sc->pg_rank=%d sc->is_same_pg=%d sc->fd=%d, sc->vc=%p, sc=%p", sc->pg_rank, sc->is_same_pg, sc->fd, sc->vc, sc));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "PKT_ID_INFO: sc->pg_rank=%d sc->is_same_pg=%d sc->fd=%d, sc->vc=%p, sc=%p", sc->pg_rank, sc->is_same_pg, sc->fd, sc->vc, sc));
}
else if (hdr.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_INFO) {
MPIDI_VC_t *vc;
MPID_nem_tcp_vc_area *vc_tcp;
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "PKT_TMPVC_INFO: sc->fd=%d", sc->fd));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "PKT_TMPVC_INFO: sc->fd=%d", sc->fd));
/* create a new VC */
- MPIU_CHKPMEM_MALLOC (vc, MPIDI_VC_t *, sizeof(MPIDI_VC_t), mpi_errno, "real vc from tmp vc");
+ MPIR_CHKPMEM_MALLOC (vc, MPIDI_VC_t *, sizeof(MPIDI_VC_t), mpi_errno, "real vc from tmp vc");
/* --BEGIN ERROR HANDLING-- */
if (vc == NULL) {
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", NULL);
@@ -657,7 +661,7 @@ static int recv_id_or_tmpvc_info(sockconn_t *const sc, int *got_sc_eof)
MPIDI_VC_Init(vc, NULL, 0);
vc_tcp->state = MPID_NEM_TCP_VC_STATE_CONNECTED; /* FIXME: is it needed ? */
sc->vc = vc;
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "about to incr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc->vc, vc_tcp->sc_ref_count));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "about to incr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc->vc, vc_tcp->sc_ref_count));
++vc_tcp->sc_ref_count;
ASSIGN_SC_TO_VC(vc_tcp, sc);
@@ -667,26 +671,26 @@ static int recv_id_or_tmpvc_info(sockconn_t *const sc, int *got_sc_eof)
iov[0].iov_len = sizeof(sc->vc->port_name_tag);
nread = MPL_large_readv(sc->fd, iov, iov_cnt);
- MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIR_Strerror(errno));
MPIR_ERR_CHKANDJUMP(nread != hdr.datalen, mpi_errno, MPI_ERR_OTHER, "**read"); /* FIXME-Z1 */
sc->is_same_pg = FALSE;
sc->pg_id = NULL;
sc->is_tmpvc = TRUE;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "enqueuing on acceptq vc=%p, sc->fd=%d, tag=%d", vc, sc->fd, sc->vc->port_name_tag));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "enqueuing on acceptq vc=%p, sc->fd=%d, tag=%d", vc, sc->fd, sc->vc->port_name_tag));
MPIDI_CH3I_Acceptq_enqueue(vc, sc->vc->port_name_tag);
- MPIU_Assert(!sc->pg_is_set);
+ MPIR_Assert(!sc->pg_is_set);
}
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_FUNC_EXIT(MPID_STATE_RECV_ID_OR_TMPVC_INFO);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RECV_ID_OR_TMPVC_INFO);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPIR_CHKPMEM_REAP();
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -705,22 +709,24 @@ static int send_cmd_pkt(int fd, MPIDI_nem_tcp_socksm_pkt_type_t pkt_type)
MPIDI_nem_tcp_header_t pkt;
int pkt_len = sizeof(MPIDI_nem_tcp_header_t);
- MPIU_Assert(pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_ACK ||
+ MPIR_Assert(pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_ACK ||
pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_NAK ||
pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_ACK ||
pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_NAK ||
pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_CLOSED);
+ MPL_VG_MEM_INIT(&pkt, sizeof(pkt));
+
pkt.pkt_type = pkt_type;
pkt.datalen = 0;
CHECK_EINTR (offset, write(fd, &pkt, pkt_len));
- MPIR_ERR_CHKANDJUMP1(offset == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIU_Strerror(errno));
- MPIR_ERR_CHKANDJUMP1(offset != pkt_len, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIU_Strerror(errno)); /* FIXME-Z1 */
+ MPIR_ERR_CHKANDJUMP1(offset == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIR_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(offset != pkt_len, mpi_errno, MPI_ERR_OTHER, "**write", "**write %s", MPIR_Strerror(errno)); /* FIXME-Z1 */
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -739,15 +745,15 @@ static int recv_cmd_pkt(int fd, MPIDI_nem_tcp_socksm_pkt_type_t *pkt_type)
ssize_t nread;
MPIDI_nem_tcp_header_t pkt;
int pkt_len = sizeof(MPIDI_nem_tcp_header_t);
- MPIDI_STATE_DECL(MPID_STATE_RECV_CMD_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RECV_CMD_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_RECV_CMD_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RECV_CMD_PKT);
CHECK_EINTR (nread, read(fd, &pkt, pkt_len));
- MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIU_Strerror(errno));
- MPIR_ERR_CHKANDJUMP2(nread != pkt_len, mpi_errno, MPI_ERR_OTHER, "**read", "**read %d %s", nread, MPIU_Strerror(errno)); /* FIXME-Z1 */
- MPIU_Assert(pkt.datalen == 0);
- MPIU_Assert(pkt.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_ACK ||
+ MPIR_ERR_CHKANDJUMP1(nread == -1 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIR_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP2(nread != pkt_len, mpi_errno, MPI_ERR_OTHER, "**read", "**read %d %s", nread, MPIR_Strerror(errno)); /* FIXME-Z1 */
+ MPIR_Assert(pkt.datalen == 0);
+ MPIR_Assert(pkt.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_ACK ||
pkt.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_NAK ||
pkt.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_ACK ||
pkt.pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_NAK ||
@@ -755,10 +761,10 @@ static int recv_cmd_pkt(int fd, MPIDI_nem_tcp_socksm_pkt_type_t *pkt_type)
*pkt_type = pkt.pkt_type;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_RECV_CMD_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RECV_CMD_PKT);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -778,12 +784,12 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
int idx = -1;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CONNECT);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CONNECT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CONNECT);
- MPIU_Assert(vc != NULL);
+ MPIR_Assert(vc != NULL);
/* Handle error case */
if (vc_tcp->state == MPID_NEM_TCP_VC_STATE_ERROR ||
@@ -794,7 +800,11 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
/* We have an active connection, start polling more often */
MPID_nem_tcp_skip_polls = MAX_SKIP_POLLS_ACTIVE;
- MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
+ /* only update VC state when it is not being closed.
+ * Note that we still need change state here if the VC is passively
+ * connected (i.e., server in dynamic process connection) */
+ if (vc->state == MPIDI_VC_STATE_INACTIVE)
+ MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
if (vc_tcp->state == MPID_NEM_TCP_VC_STATE_DISCONNECTED) {
struct sockaddr_in *sock_addr;
@@ -802,7 +812,7 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
int rc = 0;
if (vc_tcp->connect_retry_count > MPIDI_NEM_TCP_MAX_CONNECT_RETRIES) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "exceeded retries, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "exceeded retries, closing sc");
MPIR_ERR_SET1(mpi_errno, MPI_ERR_OTHER, "**exceeded_connect_tries", "**exceeded_connect_tries %d", vc->pg_rank);
mpi_errno = error_closed(vc, mpi_errno);
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**tcp_cleanup_fail");
@@ -811,7 +821,7 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
++vc_tcp->connect_retry_count;
- MPIU_Assert(vc_tcp->sc == NULL);
+ MPIR_Assert(vc_tcp->sc == NULL);
mpi_errno = find_free_entry(&idx);
if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
@@ -835,7 +845,7 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
#endif
- MPIU_CHKLMEM_MALLOC(bc, char *, val_max_sz, mpi_errno, "bc");
+ MPIR_CHKLMEM_MALLOC(bc, char *, val_max_sz, mpi_errno, "bc");
sc->is_tmpvc = FALSE;
@@ -848,23 +858,23 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
}
else {
sc->is_tmpvc = TRUE;
- MPIU_Assert(!sc->pg_is_set);
+ MPIR_Assert(!sc->pg_is_set);
}
sock_addr = &(vc_tcp->sock_id);
CHECK_EINTR(sc->fd, socket(AF_INET, SOCK_STREAM, 0));
- MPIR_ERR_CHKANDJUMP2(sc->fd == -1, mpi_errno, MPI_ERR_OTHER, "**sock_create", "**sock_create %s %d", MPIU_Strerror(errno), errno);
+ MPIR_ERR_CHKANDJUMP2(sc->fd == -1, mpi_errno, MPI_ERR_OTHER, "**sock_create", "**sock_create %s %d", MPIR_Strerror(errno), errno);
plfd->fd = sc->fd;
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "sc->fd=%d, plfd->events=%d, plfd->revents=%d, vc=%p, sc=%p", sc->fd, plfd->events, plfd->revents, vc, sc));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "sc->fd=%d, plfd->events=%d, plfd->revents=%d, vc=%p, sc=%p", sc->fd, plfd->events, plfd->revents, vc, sc));
mpi_errno = MPID_nem_tcp_set_sockopts(sc->fd);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "connecting to 0x%08X:%d", sock_addr->sin_addr.s_addr, sock_addr->sin_port));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "connecting to 0x%08X:%d", sock_addr->sin_addr.s_addr, sock_addr->sin_port));
rc = connect(sc->fd, (SA*)sock_addr, sizeof(*sock_addr));
/* connect should not be called with CHECK_EINTR macro */
- MPIR_ERR_CHKANDJUMP2(rc < 0 && errno != EINPROGRESS, mpi_errno, MPI_ERR_OTHER, "**sock_connect", "**sock_connect %d %s", errno, MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP2(rc < 0 && errno != EINPROGRESS, mpi_errno, MPI_ERR_OTHER, "**sock_connect", "**sock_connect %d %s", errno, MPIR_Strerror(errno));
if (rc == 0) {
CHANGE_STATE(sc, CONN_STATE_TC_C_CNTD);
@@ -887,20 +897,20 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
}
/* very important, without this is_same_connection() will always fail */
sc->pg_is_set = TRUE;
- MPIU_Assert(!sc->is_tmpvc);
+ MPIR_Assert(!sc->is_tmpvc);
}
else { /* (vc->pg == NULL), dynamic proc connection - temp vc */
- MPIU_Assert(sc->is_tmpvc);
+ MPIR_Assert(sc->is_tmpvc);
}
ASSIGN_SC_TO_VC(vc_tcp, sc);
sc->vc = vc;
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "about to incr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc->vc, vc_tcp->sc_ref_count));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "about to incr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc->vc, vc_tcp->sc_ref_count));
++vc_tcp->sc_ref_count;
}
else if (vc_tcp->state == MPID_NEM_TCP_VC_STATE_CONNECTED) {
sc = vc_tcp->sc;
- MPIU_Assert(sc != NULL);
+ MPIR_Assert(sc != NULL);
/* Do nothing here, the caller just needs to wait for the connection
state machine to work its way through the states. Doing something at
this point will almost always just mess up any head-to-head
@@ -908,18 +918,18 @@ int MPID_nem_tcp_connect(struct MPIDI_VC *const vc)
}
else {
/* We already handled the error case at the top of the routine. */
- MPIU_Assertp(0);
+ MPIR_Assertp(0);
}
fn_exit:
/* MPID_nem_tcp_connpoll(); FIXME-Imp should be called? */
- MPIU_CHKLMEM_FREEALL();
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CONNECT);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CONNECT);
return mpi_errno;
fn_fail:
if (idx != -1)
close_cleanup_and_free_sc_plfd(&g_sc_tbl[idx]); /* ignore error return */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -935,17 +945,17 @@ static int cleanup_and_free_sc_plfd(sockconn_t *const sc)
const int idx = sc->index;
struct pollfd *const plfd = &MPID_nem_tcp_plfd_tbl[sc->index];
freenode_t *node;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_CLEANUP_AND_FREE_SC_PLFD);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CLEANUP_AND_FREE_SC_PLFD);
- MPIDI_FUNC_ENTER(MPID_STATE_CLEANUP_AND_FREE_SC_PLFD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CLEANUP_AND_FREE_SC_PLFD);
if (sc == NULL)
goto fn_exit;
if (sc_vc) {
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "about to decr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc_vc, sc_vc_tcp->sc_ref_count));
- MPIU_Assert(sc_vc_tcp->sc_ref_count > 0);
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "about to decr sc_ref_count sc=%p sc->vc=%p sc_ref_count=%d", sc, sc_vc, sc_vc_tcp->sc_ref_count));
+ MPIR_Assert(sc_vc_tcp->sc_ref_count > 0);
--sc_vc_tcp->sc_ref_count;
}
@@ -960,17 +970,17 @@ static int cleanup_and_free_sc_plfd(sockconn_t *const sc)
INIT_SC_ENTRY(sc, idx);
INIT_POLLFD_ENTRY(plfd);
- MPIU_CHKPMEM_MALLOC(node, freenode_t *, sizeof(freenode_t), mpi_errno, "free node");
+ MPIR_CHKPMEM_MALLOC(node, freenode_t *, sizeof(freenode_t), mpi_errno, "free node");
node->index = idx;
Q_ENQUEUE(&freeq, node);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CLEANUP_AND_FREE_SC_PLFD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CLEANUP_AND_FREE_SC_PLFD);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPIR_CHKPMEM_REAP();
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -987,24 +997,24 @@ int close_cleanup_and_free_sc_plfd(sockconn_t *const sc)
int mpi_errno = MPI_SUCCESS;
int mpi_errno2 = MPI_SUCCESS;
int rc;
- MPIDI_STATE_DECL(MPID_STATE_CLOSE_CLEANUP_AND_FREE_SC_PLFD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CLOSE_CLEANUP_AND_FREE_SC_PLFD);
- MPIDI_FUNC_ENTER(MPID_STATE_CLOSE_CLEANUP_AND_FREE_SC_PLFD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CLOSE_CLEANUP_AND_FREE_SC_PLFD);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "vc=%p, sc=%p, closing fd=%d", sc->vc, sc, sc->fd));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "vc=%p, sc=%p, closing fd=%d", sc->vc, sc, sc->fd));
if (sc == NULL)
goto fn_exit;
CHECK_EINTR(rc, close(sc->fd));
if (rc == -1 && errno != EAGAIN && errno != EBADF)
- MPIR_ERR_SET1(mpi_errno, MPI_ERR_OTHER, "**close", "**close %s", MPIU_Strerror(errno));
+ MPIR_ERR_SET1(mpi_errno, MPI_ERR_OTHER, "**close", "**close %s", MPIR_Strerror(errno));
mpi_errno2 = cleanup_and_free_sc_plfd(sc);
if (mpi_errno2) MPIR_ERR_ADD(mpi_errno, mpi_errno2);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CLOSE_CLEANUP_AND_FREE_SC_PLFD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CLOSE_CLEANUP_AND_FREE_SC_PLFD);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1024,9 +1034,9 @@ int MPID_nem_tcp_cleanup (struct MPIDI_VC *const vc)
{
int mpi_errno = MPI_SUCCESS, i;
MPID_nem_tcp_vc_area *const vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CLEANUP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CLEANUP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CLEANUP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CLEANUP);
if (vc_tcp->sc != NULL) {
mpi_errno = close_cleanup_and_free_sc_plfd(vc_tcp->sc);
@@ -1041,7 +1051,7 @@ int MPID_nem_tcp_cleanup (struct MPIDI_VC *const vc)
clean him up he'll end up accessing the about-to-be-freed vc. */
mpi_errno = close_cleanup_and_free_sc_plfd(&g_sc_tbl[i]);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(g_sc_tbl[i].vc == NULL);
+ MPIR_Assert(g_sc_tbl[i].vc == NULL);
}
++i;
}
@@ -1049,13 +1059,13 @@ int MPID_nem_tcp_cleanup (struct MPIDI_VC *const vc)
/* close_cleanup_and_free_sc_plfd can technically cause a reconnect on a per-sc basis, but I
don't think that it can happen when cleanup is called. Let's
assert this for now and remove it if we prove that it can happen. */
- MPIU_Assert(vc_tcp->sc_ref_count == 0);
+ MPIR_Assert(vc_tcp->sc_ref_count == 0);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CLEANUP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CLEANUP);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -1071,9 +1081,9 @@ int MPID_nem_tcp_ckpt_cleanup(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_CLEANUP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_CLEANUP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_CLEANUP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_CLEANUP);
for (i = 0; i < MPIDI_Process.my_pg->size; ++i) {
MPIDI_VC_t *vc;
@@ -1093,7 +1103,7 @@ int MPID_nem_tcp_ckpt_cleanup(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_CLEANUP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_CLEANUP);
return mpi_errno;
fn_fail:
@@ -1109,9 +1119,9 @@ static int state_tc_c_cnting_handler(struct pollfd *const plfd, sockconn_t *cons
{
int mpi_errno = MPI_SUCCESS;
MPID_NEM_TCP_SOCK_STATUS_t status;
- MPIDI_STATE_DECL(MPID_STATE_STATE_TC_C_CNTING_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_TC_C_CNTING_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_TC_C_CNTING_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_TC_C_CNTING_HANDLER);
status = MPID_nem_tcp_check_sock_status(plfd);
@@ -1119,7 +1129,7 @@ static int state_tc_c_cnting_handler(struct pollfd *const plfd, sockconn_t *cons
CHANGE_STATE(sc, CONN_STATE_TC_C_CNTD);
}
else if (status == MPID_NEM_TCP_SOCK_ERROR_EOF) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "state_tc_c_cnting_handler(): closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "state_tc_c_cnting_handler(): closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
}
else { /* status == MPID_NEM_TCP_SOCK_NOEVENT */
@@ -1135,7 +1145,7 @@ static int state_tc_c_cnting_handler(struct pollfd *const plfd, sockconn_t *cons
*/
}
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_TC_C_CNTING_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_TC_C_CNTING_HANDLER);
return mpi_errno;
}
@@ -1146,22 +1156,22 @@ static int state_tc_c_cnting_handler(struct pollfd *const plfd, sockconn_t *cons
static int state_tc_c_cntd_handler(struct pollfd *const plfd, sockconn_t *const sc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_STATE_TC_C_CNTD_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_TC_C_CNTD_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_TC_C_CNTD_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_TC_C_CNTD_HANDLER);
if (found_better_sc(sc, NULL)) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "state_tc_c_cntd_handler(): closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "state_tc_c_cntd_handler(): closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
goto fn_exit;
}
if (IS_WRITEABLE(plfd)) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "inside if (IS_WRITEABLE(plfd))");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "inside if (IS_WRITEABLE(plfd))");
if (!sc->is_tmpvc) { /* normal connection */
mpi_errno = send_id_info(sc);
if (mpi_errno) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "state_tc_c_cntd_handler(): closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "state_tc_c_cntd_handler(): closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
mpi_errno = MPI_SUCCESS; /* don't return an error if we fail in the connect protocol, just retry. */
goto fn_exit;
@@ -1180,10 +1190,10 @@ static int state_tc_c_cntd_handler(struct pollfd *const plfd, sockconn_t *const
/* Remain in the same state */
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_TC_C_CNTD_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_TC_C_CNTD_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
goto fn_exit;
}
@@ -1198,15 +1208,15 @@ static int state_c_ranksent_handler(struct pollfd *const plfd, sockconn_t *const
MPID_nem_tcp_vc_area *const sc_vc_tcp = VC_TCP(sc_vc);
int mpi_errno = MPI_SUCCESS;
MPIDI_nem_tcp_socksm_pkt_type_t pkt_type;
- MPIDI_STATE_DECL(MPID_STATE_STATE_C_RANKSENT_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_C_RANKSENT_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_C_RANKSENT_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_C_RANKSENT_HANDLER);
if (IS_READABLE(plfd)) {
mpi_errno = recv_cmd_pkt(sc->fd, &pkt_type);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_ACK ||
+ MPIR_Assert(pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_ACK ||
pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_ID_NAK ||
pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_CLOSED);
@@ -1217,28 +1227,28 @@ static int state_c_ranksent_handler(struct pollfd *const plfd, sockconn_t *const
MPID_nem_tcp_conn_est (sc_vc);
sc_vc_tcp->connect_retry_count = 0; /* successfully connected, reset connection retry count */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "c_ranksent_handler(): connection established (sc=%p, sc->vc=%p, fd=%d)", sc, sc->vc, sc->fd));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "c_ranksent_handler(): connection established (sc=%p, sc->vc=%p, fd=%d)", sc, sc->vc, sc->fd));
break;
case MPIDI_NEM_TCP_SOCKSM_PKT_ID_NAK:
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "received NAK, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "received NAK, closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
break;
case MPIDI_NEM_TCP_SOCKSM_PKT_CLOSED:
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "received CLOSED, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "received CLOSED, closing sc");
mpi_errno = MPIDI_CH3U_Handle_connection(sc_vc, MPIDI_VC_EVENT_TERMINATED);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
break;
default:
- MPIU_Assert(0);
+ MPIR_Assert(0);
}
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_C_RANKSENT_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_C_RANKSENT_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
mpi_errno = MPI_SUCCESS; /* don't return an error if we fail in the connect protocol, just retry. */
goto fn_exit;
@@ -1254,15 +1264,15 @@ static int state_c_tmpvcsent_handler(struct pollfd *const plfd, sockconn_t *cons
MPID_nem_tcp_vc_area *const sc_vc_tcp = VC_TCP(sc_vc);
int mpi_errno = MPI_SUCCESS;
MPIDI_nem_tcp_socksm_pkt_type_t pkt_type;
- MPIDI_STATE_DECL(MPID_STATE_STATE_C_TMPVCSENT_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_C_TMPVCSENT_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_C_TMPVCSENT_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_C_TMPVCSENT_HANDLER);
if (IS_READABLE(plfd)) {
mpi_errno = recv_cmd_pkt(sc->fd, &pkt_type);
if (mpi_errno) {
int mpi_errno2 = MPI_SUCCESS;
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "error sending cmd pkt, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "error sending cmd pkt, closing sc");
mpi_errno2 = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
if (mpi_errno2) {
MPIR_ERR_SET(mpi_errno2, MPI_ERR_OTHER, "**tcp_cleanup_fail");
@@ -1273,7 +1283,7 @@ static int state_c_tmpvcsent_handler(struct pollfd *const plfd, sockconn_t *cons
packet then there really was a problem */
}
else {
- MPIU_Assert(pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_ACK ||
+ MPIR_Assert(pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_ACK ||
pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_NAK);
if (pkt_type == MPIDI_NEM_TCP_SOCKSM_PKT_TMPVC_ACK) {
@@ -1281,17 +1291,17 @@ static int state_c_tmpvcsent_handler(struct pollfd *const plfd, sockconn_t *cons
ASSIGN_SC_TO_VC(sc_vc_tcp, sc);
MPID_nem_tcp_conn_est (sc_vc);
sc_vc_tcp->connect_retry_count = 0; /* successfully connected, reset connection retry count */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "c_tmpvcsent_handler(): connection established (fd=%d, sc=%p, sc->vc=%p)", sc->fd, sc, sc_vc));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "c_tmpvcsent_handler(): connection established (fd=%d, sc=%p, sc->vc=%p)", sc->fd, sc, sc_vc));
}
else { /* pkt_type must be MPIDI_NEM_TCP_SOCKSM_PKT_ID_NAK */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "state_c_tmpvcsent_handler() 2: closing sc"));
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "received NAK, closing sc");
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "state_c_tmpvcsent_handler() 2: closing sc"));
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "received NAK, closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
}
}
}
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_C_TMPVCSENT_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_C_TMPVCSENT_HANDLER);
return mpi_errno;
}
@@ -1304,13 +1314,13 @@ static int state_l_cntd_handler(struct pollfd *const plfd, sockconn_t *const sc)
int mpi_errno = MPI_SUCCESS;
MPID_NEM_TCP_SOCK_STATUS_t status;
int got_sc_eof = 0;
- MPIDI_STATE_DECL(MPID_STATE_STATE_L_CNTD_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_L_CNTD_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_L_CNTD_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_L_CNTD_HANDLER);
status = MPID_nem_tcp_check_sock_status(plfd);
if (status == MPID_NEM_TCP_SOCK_ERROR_EOF) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "Received EOF, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "Received EOF, closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
goto fn_exit;
}
@@ -1323,7 +1333,7 @@ static int state_l_cntd_handler(struct pollfd *const plfd, sockconn_t *const sc)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (got_sc_eof) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "got eof, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "got eof, closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
goto fn_exit;
}
@@ -1337,14 +1347,14 @@ static int state_l_cntd_handler(struct pollfd *const plfd, sockconn_t *const sc)
}
else {
/* remain in same state */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "!IS_READABLE(plfd) fd=%d events=%#x revents=%#x", plfd->fd, plfd->events, plfd->revents));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "!IS_READABLE(plfd) fd=%d events=%#x revents=%#x", plfd->fd, plfd->events, plfd->revents));
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_L_CNTD_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_L_CNTD_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
mpi_errno = MPI_SUCCESS; /* don't return an error if we fail in the connect protocol, just retry. */
goto fn_exit;
@@ -1361,11 +1371,11 @@ static int state_l_cntd_handler(struct pollfd *const plfd, sockconn_t *const sc)
static int do_i_win(sockconn_t *rmt_sc)
{
int win = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_DO_I_WIN);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_DO_I_WIN);
- MPIDI_FUNC_ENTER(MPID_STATE_DO_I_WIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_DO_I_WIN);
- MPIU_Assert(rmt_sc->pg_is_set);
+ MPIR_Assert(rmt_sc->pg_is_set);
if (rmt_sc->is_same_pg) {
if (MPIDI_Process.my_pg_rank > rmt_sc->pg_rank)
@@ -1376,12 +1386,12 @@ static int do_i_win(sockconn_t *rmt_sc)
win = TRUE;
}
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE,
- (MPIU_DBG_FDEST, "do_i_win(rmt_sc=%p (%s)) win=%s is_same_pg=%s my_pg_rank=%d rmt_pg_rank=%d",
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE,
+ (MPL_DBG_FDEST, "do_i_win(rmt_sc=%p (%s)) win=%s is_same_pg=%s my_pg_rank=%d rmt_pg_rank=%d",
rmt_sc, CONN_STATE_STR[rmt_sc->state.cstate],
(win ? "TRUE" : "FALSE"),(rmt_sc->is_same_pg ? "TRUE" : "FALSE"), MPIDI_Process.my_pg_rank,
rmt_sc->pg_rank));
- MPIDI_FUNC_EXIT(MPID_STATE_DO_I_WIN);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_DO_I_WIN);
return win;
}
@@ -1397,9 +1407,9 @@ static int state_l_rankrcvd_handler(struct pollfd *const plfd, sockconn_t *const
MPID_NEM_TCP_SOCK_STATUS_t status;
sockconn_t *fnd_sc = NULL;
int snd_nak = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_STATE_L_RANKRCVD_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_L_RANKRCVD_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_L_RANKRCVD_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_L_RANKRCVD_HANDLER);
status = MPID_nem_tcp_check_sock_status(plfd);
if (status == MPID_NEM_TCP_SOCK_ERROR_EOF)
@@ -1423,7 +1433,7 @@ static int state_l_rankrcvd_handler(struct pollfd *const plfd, sockconn_t *const
if (snd_nak) {
mpi_errno = send_cmd_pkt(sc->fd, MPIDI_NEM_TCP_SOCKSM_PKT_ID_NAK);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "lost head-to-head, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "lost head-to-head, closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
} else {
/* The following line is _crucial_ to correct operation. We need to
@@ -1440,17 +1450,17 @@ static int state_l_rankrcvd_handler(struct pollfd *const plfd, sockconn_t *const
CHANGE_STATE(sc, CONN_STATE_TS_COMMRDY);
ASSIGN_SC_TO_VC(sc_vc_tcp, sc);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "connection established: sc=%p, sc->vc=%p, sc->fd=%d, is_same_pg=%s, pg_rank=%d", sc, sc_vc, sc->fd, (sc->is_same_pg ? "TRUE" : "FALSE"), sc->pg_rank));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "connection established: sc=%p, sc->vc=%p, sc->fd=%d, is_same_pg=%s, pg_rank=%d", sc, sc_vc, sc->fd, (sc->is_same_pg ? "TRUE" : "FALSE"), sc->pg_rank));
MPID_nem_tcp_conn_est (sc_vc);
sc_vc_tcp->connect_retry_count = 0; /* successfully connected, reset connection retry count */
}
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_L_RANKRCVD_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_L_RANKRCVD_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
mpi_errno = MPI_SUCCESS; /* don't return an error if we fail in the connect protocol, just retry. */
goto fn_exit;
@@ -1466,13 +1476,13 @@ static int state_l_tmpvcrcvd_handler(struct pollfd *const plfd, sockconn_t *cons
MPID_nem_tcp_vc_area *const sc_vc_tcp = VC_TCP(sc_vc);
int mpi_errno = MPI_SUCCESS;
MPID_NEM_TCP_SOCK_STATUS_t status;
- MPIDI_STATE_DECL(MPID_STATE_STATE_L_TMPVCRCVD_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_L_TMPVCRCVD_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_L_TMPVCRCVD_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_L_TMPVCRCVD_HANDLER);
status = MPID_nem_tcp_check_sock_status(plfd);
if (status == MPID_NEM_TCP_SOCK_ERROR_EOF) {
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "Received EOF, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "Received EOF, closing sc");
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
goto fn_exit;
}
@@ -1485,16 +1495,16 @@ static int state_l_tmpvcrcvd_handler(struct pollfd *const plfd, sockconn_t *cons
ASSIGN_SC_TO_VC(sc_vc_tcp, sc);
MPID_nem_tcp_conn_est(sc_vc);
sc_vc_tcp->connect_retry_count = 0; /* successfully connected, reset connection retry count */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "fd=%d: TMPVC_ACK sent, connection established!", sc->fd));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "fd=%d: TMPVC_ACK sent, connection established!", sc->fd));
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_L_TMPVCRCVD_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_L_TMPVCRCVD_HANDLER);
return mpi_errno;
fn_fail:
{
int cleanup_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
mpi_errno = close_cleanup_and_free_sc_plfd(sc); /* QUIESCENT */
if (cleanup_errno) {
MPIR_ERR_SET(cleanup_errno, MPI_ERR_OTHER, "**tcp_cleanup_fail");
@@ -1516,12 +1526,12 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
that. */
const int sc_fd = sc->fd;
MPIDI_VC_t *const sc_vc = sc->vc;
- MPIU_AssertDeclValue(MPID_nem_tcp_vc_area *const sc_vc_tcp, VC_TCP(sc_vc));
+ MPIR_AssertDeclValue(MPID_nem_tcp_vc_area *const sc_vc_tcp, VC_TCP(sc_vc));
int mpi_errno = MPI_SUCCESS;
ssize_t bytes_recvd;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_RECV_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_RECV_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_RECV_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_RECV_HANDLER);
if (sc_vc->ch.recv_active == NULL)
{
@@ -1534,10 +1544,10 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
if (bytes_recvd == 0)
{
- MPIU_Assert(sc != NULL);
- MPIU_Assert(sc_vc != NULL);
+ MPIR_Assert(sc != NULL);
+ MPIR_Assert(sc_vc != NULL);
/* sc->vc->sc will be NULL if sc->vc->state == _INACTIVE */
- MPIU_Assert(sc_vc_tcp->sc == NULL || sc_vc_tcp->sc == sc);
+ MPIR_Assert(sc_vc_tcp->sc == NULL || sc_vc_tcp->sc == sc);
if (vc_is_in_shutdown(sc_vc))
{
@@ -1547,7 +1557,7 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
disconnecting, then we end up with a potential race where
the other side performs a tcp close() before we do and we
blow up here. */
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "other side closed, but we're shutting down, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "other side closed, but we're shutting down, closing sc");
/* it's really not an error, but we're calling
cleanup_on_error because it does what we want it to */
mpi_errno = MPID_nem_tcp_cleanup_on_error(sc_vc, MPI_SUCCESS);
@@ -1555,17 +1565,17 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
}
else
{
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "ERROR: sock (fd=%d) is closed: bytes_recvd == 0", sc->fd );
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "ERROR: sock (fd=%d) is closed: bytes_recvd == 0", sc->fd );
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**sock_closed");
}
}
else
{
- MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIU_Strerror(errno));
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIR_Strerror(errno));
}
}
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "New recv " MPIDI_MSG_SZ_FMT " (fd=%d, vc=%p, sc=%p)", bytes_recvd, sc_fd, sc_vc, sc));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "New recv %" PRIdPTR " (fd=%d, vc=%p, sc=%p)", bytes_recvd, sc_fd, sc_vc, sc));
mpi_errno = MPID_nem_handle_pkt(sc_vc, recv_buf, bytes_recvd);
if (mpi_errno) MPIR_ERR_POP_LABEL(mpi_errno, fn_noncomm_fail);
@@ -1574,12 +1584,12 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
{
/* there is a pending receive, receive it directly into the user buffer */
MPIDI_CH3I_VC *const sc_vc_ch = &sc_vc->ch;
- MPID_Request *const rreq = sc_vc_ch->recv_active;
+ MPIR_Request *const rreq = sc_vc_ch->recv_active;
MPL_IOV *iov = &rreq->dev.iov[rreq->dev.iov_offset];
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
- MPIU_Assert(rreq->dev.iov_count > 0);
- MPIU_Assert(rreq->dev.iov_count + rreq->dev.iov_offset <= MPL_IOV_LIMIT);
+ MPIR_Assert(rreq->dev.iov_count > 0);
+ MPIR_Assert(rreq->dev.iov_count + rreq->dev.iov_offset <= MPL_IOV_LIMIT);
bytes_recvd = MPL_large_readv(sc_fd, iov, rreq->dev.iov_count);
if (bytes_recvd <= 0)
@@ -1590,11 +1600,11 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
if (bytes_recvd == 0) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**sock_closed");
} else {
- MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIU_Strerror(errno));
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**read", "**read %s", MPIR_Strerror(errno));
}
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "Cont recv %ld", (long int)bytes_recvd);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Cont recv %ld", (long int)bytes_recvd);
/* update the iov */
for (iov = &rreq->dev.iov[rreq->dev.iov_offset]; iov < &rreq->dev.iov[rreq->dev.iov_offset + rreq->dev.iov_count]; ++iov)
@@ -1605,9 +1615,9 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
iov->MPL_IOV_LEN -= bytes_recvd;
rreq->dev.iov_count = (int)(&rreq->dev.iov[rreq->dev.iov_offset + rreq->dev.iov_count] - iov);
rreq->dev.iov_offset = iov - rreq->dev.iov;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "bytes_recvd = %ld", (long int)bytes_recvd);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov len = %ld", (long int)iov->MPL_IOV_LEN);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "iov_offset = %lld", (long long)rreq->dev.iov_offset);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "bytes_recvd = %ld", (long int)bytes_recvd);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov len = %ld", (long int)iov->MPL_IOV_LEN);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iov_offset = %lld", (long long)rreq->dev.iov_offset);
goto fn_exit;
}
bytes_recvd -= iov->MPL_IOV_LEN;
@@ -1618,12 +1628,12 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
reqFn = rreq->dev.OnDataAvail;
if (!reqFn)
{
- MPIU_Assert(MPIDI_Request_get_type(rreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) != MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "...complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "...complete");
sc_vc_ch->recv_active = NULL;
}
else
@@ -1635,18 +1645,18 @@ static int MPID_nem_tcp_recv_handler(sockconn_t *const sc)
if (complete)
{
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "...complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "...complete");
sc_vc_ch->recv_active = NULL;
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "...not complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "...not complete");
}
}
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_RECV_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_RECV_HANDLER);
return mpi_errno;
fn_fail: /* comm related failures jump here */
{
@@ -1674,11 +1684,11 @@ static int state_commrdy_handler(struct pollfd *const plfd, sockconn_t *const sc
invalid. */
MPIDI_VC_t *sc_vc = sc->vc;
MPID_nem_tcp_vc_area *sc_vc_tcp = VC_TCP(sc_vc);
- MPIDI_STATE_DECL(MPID_STATE_STATE_COMMRDY_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_STATE_COMMRDY_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_STATE_COMMRDY_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_STATE_COMMRDY_HANDLER);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "vc = %p", sc->vc);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "vc = %p", sc->vc);
if (IS_READABLE(plfd))
{
mpi_errno = MPID_nem_tcp_recv_handler(sc);
@@ -1696,7 +1706,7 @@ static int state_commrdy_handler(struct pollfd *const plfd, sockconn_t *const sc
}
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_STATE_COMMRDY_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_STATE_COMMRDY_HANDLER);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1710,7 +1720,7 @@ static int state_commrdy_handler(struct pollfd *const plfd, sockconn_t *const sc
int MPID_nem_tcp_sm_init(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
/* Set the appropriate handlers */
sc_state_info[CONN_STATE_TS_CLOSED].sc_state_handler = NULL;
sc_state_info[CONN_STATE_TC_C_CNTING].sc_state_handler = state_tc_c_cnting_handler;
@@ -1740,13 +1750,13 @@ int MPID_nem_tcp_sm_init(void)
MPID_nem_tcp_plfd_tbl = NULL;
alloc_sc_plfd_tbls();
- MPIU_CHKPMEM_MALLOC(recv_buf, char*, MPID_NEM_TCP_RECV_MAX_PKT_LEN, mpi_errno, "TCP temporary buffer");
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_MALLOC(recv_buf, char*, MPID_NEM_TCP_RECV_MAX_PKT_LEN, mpi_errno, "TCP temporary buffer");
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -1761,12 +1771,12 @@ int MPID_nem_tcp_sm_finalize(void)
/* walk the freeq and free all the elements */
while (!Q_EMPTY(freeq)) {
Q_DEQUEUE(&freeq, ((freenode_t **)&node));
- MPIU_Free(node);
+ MPL_free(node);
}
free_sc_plfd_tbls();
- MPIU_Free(recv_buf);
+ MPL_free(recv_buf);
return MPI_SUCCESS;
}
@@ -1792,8 +1802,8 @@ int MPID_nem_tcp_connpoll(int in_blocking_poll)
int num_polled = g_tbl_size;
if (num_polled) {
- MPIU_Assert(MPID_nem_tcp_plfd_tbl != NULL);
- MPIU_Assert(g_sc_tbl != NULL);
+ MPIR_Assert(MPID_nem_tcp_plfd_tbl != NULL);
+ MPIR_Assert(g_sc_tbl != NULL);
}
/* To improve shared memory performance, we don't call the poll()
@@ -1807,8 +1817,8 @@ int MPID_nem_tcp_connpoll(int in_blocking_poll)
num_skipped_polls = 0;
CHECK_EINTR(n, poll(MPID_nem_tcp_plfd_tbl, num_polled, 0));
- MPIR_ERR_CHKANDJUMP1(n == -1, mpi_errno, MPI_ERR_OTHER, "**poll", "**poll %s", MPIU_Strerror(errno));
- /* MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "some sc fd poll event")); */
+ MPIR_ERR_CHKANDJUMP1(n == -1, mpi_errno, MPI_ERR_OTHER, "**poll", "**poll %s", MPIR_Strerror(errno));
+ /* MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "some sc fd poll event")); */
for(i = 0; i < num_polled; i++)
{
struct pollfd *it_plfd = &MPID_nem_tcp_plfd_tbl[i];
@@ -1828,9 +1838,9 @@ int MPID_nem_tcp_connpoll(int in_blocking_poll)
(Stevens Network Programming Vol 1, pg 184) */
rc = read(it_plfd->fd, &dummy, 1);
if (rc < 0)
- err_str = MPIU_Strerror(errno);
+ err_str = MPIR_Strerror(errno);
- MPIU_DBG_MSG(NEM_SOCK_DET, VERBOSE, "error polling fd, closing sc");
+ MPL_DBG_MSG(MPIDI_NEM_TCP_DBG_DET, VERBOSE, "error polling fd, closing sc");
if (it_sc->vc) {
MPIR_ERR_SET2(req_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d %s", it_sc->vc->pg_rank, err_str);
mpi_errno = MPID_nem_tcp_cleanup_on_error(it_sc->vc, req_errno);
@@ -1854,7 +1864,7 @@ int MPID_nem_tcp_connpoll(int in_blocking_poll)
fn_exit:
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -1896,22 +1906,22 @@ int MPID_nem_tcp_state_listening_handler(struct pollfd *const unused_1, sockconn
socklen_t len;
SA_IN rmt_addr;
sockconn_t *l_sc;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_STATE_LISTENING_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_STATE_LISTENING_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_STATE_LISTENING_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_STATE_LISTENING_HANDLER);
while (1) {
l_sc = &g_sc_tbl[0]; /* N3 Important */
len = sizeof(SA_IN);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "before accept"));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "before accept"));
if ((connfd = accept(l_sc->fd, (SA *) &rmt_addr, &len)) < 0) {
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "after accept, l_sc=%p lstnfd=%d connfd=%d, errno=%d:%s ", l_sc, l_sc->fd, connfd, errno, MPIU_Strerror(errno)));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "after accept, l_sc=%p lstnfd=%d connfd=%d, errno=%d:%s ", l_sc, l_sc->fd, connfd, errno, MPIR_Strerror(errno)));
if (errno == EINTR)
continue;
else if (errno == EWOULDBLOCK || errno == EAGAIN)
break; /* no connection in the listen queue. get out of here.(N1) */
- MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**sock_accept", "**sock_accept %s", MPIU_Strerror(errno));
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**sock_accept", "**sock_accept %s", MPIR_Strerror(errno));
}
else {
int idx = -1;
@@ -1931,15 +1941,15 @@ int MPID_nem_tcp_state_listening_handler(struct pollfd *const unused_1, sockconn
CHANGE_STATE(sc, CONN_STATE_TA_C_CNTD);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "accept success, added to table, connfd=%d, sc->vc=%p, sc=%p plfd->events=%#x", connfd, sc->vc, sc, plfd->events)); /* sc->vc should be NULL at this point */
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "accept success, added to table, connfd=%d, sc->vc=%p, sc=%p plfd->events=%#x", connfd, sc->vc, sc, plfd->events)); /* sc->vc should be NULL at this point */
}
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_STATE_LISTENING_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_STATE_LISTENING_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -1954,9 +1964,9 @@ static int error_closed(struct MPIDI_VC *const vc, int req_errno)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_tcp_vc_area * const vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_ERROR_CLOSED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ERROR_CLOSED);
- MPIDI_FUNC_ENTER(MPID_STATE_ERROR_CLOSED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_ERROR_CLOSED);
vc_tcp->state = MPID_NEM_TCP_VC_STATE_ERROR;
@@ -1967,7 +1977,7 @@ static int error_closed(struct MPIDI_VC *const vc, int req_errno)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_ERROR_CLOSED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_ERROR_CLOSED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1984,9 +1994,9 @@ int MPID_nem_tcp_cleanup_on_error(MPIDI_VC_t *const vc, int req_errno)
{
int mpi_errno = MPI_SUCCESS;
int mpi_errno2 = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CLEANUP_ON_ERROR);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CLEANUP_ON_ERROR);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CLEANUP_ON_ERROR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CLEANUP_ON_ERROR);
mpi_errno = MPID_nem_tcp_cleanup(vc);
/* not jumping on error, keep going */
@@ -1995,7 +2005,7 @@ int MPID_nem_tcp_cleanup_on_error(MPIDI_VC_t *const vc, int req_errno)
if (mpi_errno2) MPIR_ERR_ADD(mpi_errno, mpi_errno2);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CLEANUP_ON_ERROR);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CLEANUP_ON_ERROR);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.h b/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.h
index 270de1a..281ec14 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.h
@@ -96,19 +96,19 @@ extern const char *const CONN_STATE_STR[];
#endif
#undef M_
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#define CONN_STATE_TO_STRING(_cstate) \
(( (_cstate) >= CONN_STATE_TS_CLOSED && (_cstate) < CONN_STATE_SIZE ) ? CONN_STATE_STR[_cstate] : "out_of_range")
#define DBG_CHANGE_STATE(_sc, _cstate) do { \
const char *state_str = NULL; \
const char *old_state_str = NULL; \
- if (MPIU_DBG_SELECTED(NEM_SOCK_DET,VERBOSE)) { \
+ if (MPL_DBG_SELECTED(MPIDI_NEM_TCP_DBG_DET,VERBOSE)) { \
if ((_sc)) { \
old_state_str = CONN_STATE_TO_STRING((_sc)->state.cstate); \
state_str = CONN_STATE_TO_STRING(_cstate); \
} \
- MPIU_DBG_OUT_FMT(NEM_SOCK_DET, (MPIU_DBG_FDEST, "CHANGE_STATE(_sc=%p, _cstate=%d (%s)) - old_state=%s sc->vc=%p", _sc, _cstate, state_str, old_state_str, (_sc)->vc)); \
+ MPL_DBG_OUT_FMT(MPIDI_NEM_TCP_DBG_DET, (MPL_DBG_FDEST, "CHANGE_STATE(_sc=%p, _cstate=%d (%s)) - old_state=%s sc->vc=%p", _sc, _cstate, state_str, old_state_str, (_sc)->vc)); \
} \
} while (0)
#else
@@ -162,7 +162,7 @@ typedef enum MPIDI_nem_tcp_socksm_pkt_type {
typedef struct MPIDI_nem_tcp_header {
MPIDI_nem_tcp_socksm_pkt_type_t pkt_type;
- MPIDI_msg_sz_t datalen;
+ intptr_t datalen;
} MPIDI_nem_tcp_header_t;
typedef struct MPIDI_nem_tcp_idinfo {
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_ckpt.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_ckpt.c
index d398bd2..158c164 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_ckpt.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_ckpt.c
@@ -19,14 +19,14 @@ int MPID_nem_tcp_ckpt_pause_send_vc(MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC);
vc_tcp->send_paused = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_PAUSE_SEND_VC);
return mpi_errno;
fn_fail:
@@ -37,13 +37,15 @@ fn_fail:
#define FUNCNAME MPID_nem_tcp_ckpt_unpause_handler
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_tcp_pkt_unpause_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+int MPID_nem_tcp_pkt_unpause_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER);
vc_tcp->send_paused = FALSE;
@@ -59,9 +61,9 @@ int MPID_nem_tcp_pkt_unpause_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI
}
fn_exit:
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_UNPAUSE_HANDLER);
return mpi_errno;
fn_fail:
@@ -76,10 +78,10 @@ int MPID_nem_tcp_ckpt_continue_vc(MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
MPID_PKT_DECL_CAST(upkt, MPIDI_nem_tcp_pkt_unpause_t, unpause_pkt);
- MPID_Request *unpause_req;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC);
+ MPIR_Request *unpause_req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC);
unpause_pkt->type = MPIDI_NEM_PKT_NETMOD;
unpause_pkt->subtype = MPIDI_NEM_TCP_PKT_UNPAUSE;
@@ -88,12 +90,12 @@ int MPID_nem_tcp_ckpt_continue_vc(MPIDI_VC_t *vc)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (unpause_req) {
if (unpause_req->status.MPI_ERROR) MPIR_ERR_SET(mpi_errno, MPI_ERR_OTHER, "**fail");
- MPID_Request_release(unpause_req);
+ MPIR_Request_free(unpause_req);
if (mpi_errno) goto fn_fail;
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_CONTINUE_VC);
return mpi_errno;
fn_fail:
@@ -111,10 +113,10 @@ int MPID_nem_tcp_ckpt_restart_vc(MPIDI_VC_t *vc)
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_nem_tcp_pkt_unpause_t * const pkt = (MPIDI_nem_tcp_pkt_unpause_t *)&upkt;
- MPID_Request *sreq;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC);
+ MPIR_Request *sreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC);
pkt->type = MPIDI_NEM_PKT_NETMOD;
pkt->subtype = MPIDI_NEM_TCP_PKT_UNPAUSE;
@@ -125,14 +127,14 @@ int MPID_nem_tcp_ckpt_restart_vc(MPIDI_VC_t *vc)
if (sreq != NULL) {
if (sreq->status.MPI_ERROR != MPI_SUCCESS) {
mpi_errno = sreq->status.MPI_ERROR;
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
MPIR_ERR_INTERNALANDJUMP(mpi_errno, "Failed to send checkpoint unpause pkt.");
}
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CKPT_RESTART_VC);
return mpi_errno;
fn_fail:
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_finalize.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_finalize.c
index a612c48..9569434 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_finalize.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_finalize.c
@@ -14,9 +14,9 @@ int MPID_nem_tcp_finalize(void)
{
int mpi_errno = MPI_SUCCESS;
int ret;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_FINALIZE);
mpi_errno = MPID_nem_tcp_send_finalize();
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -26,11 +26,11 @@ int MPID_nem_tcp_finalize(void)
if (MPID_nem_tcp_g_lstn_sc.fd)
{
CHECK_EINTR (ret, close(MPID_nem_tcp_g_lstn_sc.fd));
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**closesocket", "**closesocket %s %d", errno, MPIU_Strerror (errno));
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**closesocket", "**closesocket %s %d", errno, MPIR_Strerror (errno));
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_getip.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_getip.c
index 71b2b49..22c7fa7 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_getip.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_getip.c
@@ -58,22 +58,22 @@ static int dbg_ifname = 0;
#define FUNCNAME MPIDI_GetIPInterface
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
+int MPIDI_GetIPInterface( MPIDI_CH3I_nem_tcp_ifaddr_t *ifaddr, int *found )
{
int mpi_errno = MPI_SUCCESS;
char *buf_ptr = NULL, *ptr;
int buf_len, buf_len_prev;
int fd;
- MPIDU_Sock_ifaddr_t myifaddr;
+ MPIDI_CH3I_nem_tcp_ifaddr_t myifaddr;
int nfound = 0, foundLocalhost = 0;
/* We predefine the LSB and MSB localhost addresses */
unsigned int localhost = 0x0100007f;
#ifdef WORDS_BIGENDIAN
unsigned int MSBlocalhost = 0x7f000001;
#endif
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_GETIPINTERFACE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GETIPINTERFACE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_GETIPINTERFACE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GETIPINTERFACE);
*found = 0;
fd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -102,7 +102,7 @@ int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
struct ifconf ifconf;
int rc;
- buf_ptr = (char *) MPIU_Malloc(buf_len);
+ buf_ptr = (char *) MPL_malloc(buf_len);
if (buf_ptr == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d", buf_len);
}
@@ -113,7 +113,7 @@ int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
rc = ioctl(fd, SIOCGIFCONF, &ifconf);
if (rc < 0) {
if (errno != EINVAL || buf_len_prev != 0) {
- MPIR_ERR_SETANDJUMP2(mpi_errno, MPI_ERR_OTHER, "**ioctl", "**ioctl %d %s", errno, MPIU_Strerror(errno));
+ MPIR_ERR_SETANDJUMP2(mpi_errno, MPI_ERR_OTHER, "**ioctl", "**ioctl %d %s", errno, MPIR_Strerror(errno));
}
}
else {
@@ -125,7 +125,7 @@ int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
buf_len_prev = ifconf.ifc_len;
}
- MPIU_Free(buf_ptr);
+ MPL_free(buf_ptr);
buf_len += NUM_IFREQS * sizeof(struct ifreq);
}
@@ -167,14 +167,14 @@ int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
if (nfound == 0) {
myifaddr.type = AF_INET;
myifaddr.len = 4;
- MPIU_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
+ MPIR_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
}
}
else {
nfound++;
myifaddr.type = AF_INET;
myifaddr.len = 4;
- MPIU_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
+ MPIR_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
}
}
else {
@@ -212,11 +212,11 @@ int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
fn_exit:
if (NULL != buf_ptr)
- MPIU_Free(buf_ptr);
+ MPL_free(buf_ptr);
if (fd >= 0)
close(fd);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_GETIPINTERFACE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GETIPINTERFACE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -225,7 +225,7 @@ fn_fail:
#else /* things needed to find the interfaces */
/* In this case, just return false for interfaces found */
-int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
+int MPIDI_GetIPInterface( MPIDI_CH3I_nem_tcp_ifaddr_t *ifaddr, int *found )
{
*found = 0;
return MPI_SUCCESS;
@@ -244,7 +244,7 @@ int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
#define FUNCNAME MPIDI_Get_IP_for_iface
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_Get_IP_for_iface(const char *ifname, MPIDU_Sock_ifaddr_t *ifaddr, int *found)
+int MPIDI_Get_IP_for_iface(const char *ifname, MPIDI_CH3I_nem_tcp_ifaddr_t *ifaddr, int *found)
{
int mpi_errno = MPI_SUCCESS;
int fd, ret;
@@ -254,14 +254,14 @@ int MPIDI_Get_IP_for_iface(const char *ifname, MPIDU_Sock_ifaddr_t *ifaddr, int
*found = FALSE;
fd = socket(AF_INET, SOCK_DGRAM, 0);
- MPIR_ERR_CHKANDJUMP2(fd < 0, mpi_errno, MPI_ERR_OTHER, "**sock_create", "**sock_create %s %d", MPIU_Strerror(errno), errno);
+ MPIR_ERR_CHKANDJUMP2(fd < 0, mpi_errno, MPI_ERR_OTHER, "**sock_create", "**sock_create %s %d", MPIR_Strerror(errno), errno);
ifr.ifr_addr.sa_family = AF_INET; /* just IPv4 for now */
- MPIU_Strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);
+ MPL_strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);
ret = ioctl(fd, SIOCGIFADDR, &ifr);
- MPIR_ERR_CHKANDJUMP2(ret < 0, mpi_errno, MPI_ERR_OTHER, "**ioctl", "**ioctl %d %s", errno, MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP2(ret < 0, mpi_errno, MPI_ERR_OTHER, "**ioctl", "**ioctl %d %s", errno, MPIR_Strerror(errno));
*found = TRUE;
- MPIU_Memcpy(ifaddr->ifaddr, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr, 4);
+ MPIR_Memcpy(ifaddr->ifaddr, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr, 4);
ifaddr->len = 4;
ifaddr->type = AF_INET;
@@ -269,7 +269,7 @@ fn_exit:
if (fd != -1) {
ret = close(fd);
if (ret < 0) {
- MPIR_ERR_SET2(mpi_errno, MPI_ERR_OTHER, "**sock_close", "**sock_close %s %d", MPIU_Strerror(errno), errno);
+ MPIR_ERR_SET2(mpi_errno, MPI_ERR_OTHER, "**sock_close", "**sock_close %s %d", MPIR_Strerror(errno), errno);
}
}
return mpi_errno;
@@ -283,7 +283,7 @@ fn_fail:
#define FUNCNAME MPIDI_Get_IP_for_iface
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_Get_IP_for_iface(const char *ifname, MPIDU_Sock_ifaddr_t *ifaddr, int *found)
+int MPIDI_Get_IP_for_iface(const char *ifname, MPIDI_CH3I_nem_tcp_ifaddr_t *ifaddr, int *found)
{
if (found != NULL)
*found = FALSE;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_impl.h b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_impl.h
index 8c8b6b9..cdc1cf8 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_impl.h
@@ -21,6 +21,8 @@ extern struct pollfd *MPID_nem_tcp_plfd_tbl;
extern sockconn_t MPID_nem_tcp_g_lstn_sc;
extern struct pollfd MPID_nem_tcp_g_lstn_plfd;
+extern MPL_dbg_class MPIDI_NEM_TCP_DBG_DET;
+
typedef enum{MPID_NEM_TCP_VC_STATE_DISCONNECTED,
MPID_NEM_TCP_VC_STATE_CONNECTED,
MPID_NEM_TCP_VC_STATE_ERROR
@@ -28,7 +30,7 @@ typedef enum{MPID_NEM_TCP_VC_STATE_DISCONNECTED,
#define MPIDI_NEM_TCP_MAX_CONNECT_RETRIES 100
-typedef GENERIC_Q_DECL(struct MPID_Request) MPIDI_nem_tcp_request_queue_t;
+typedef GENERIC_Q_DECL(struct MPIR_Request) MPIDI_nem_tcp_request_queue_t;
/* The vc provides a generic buffer in which network modules can store
private fields This removes all dependencies from the VC struction
@@ -95,12 +97,12 @@ int MPID_nem_tcp_ckpt_cleanup(void);
int MPID_nem_tcp_state_listening_handler(struct pollfd *const l_plfd, sockconn_t *const l_sc);
int MPID_nem_tcp_send_queued(MPIDI_VC_t *vc, MPIDI_nem_tcp_request_queue_t *send_queue);
-int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz);
-int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz,
- MPID_Request **sreq_ptr);
-int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz,
- MPID_Request **sreq_ptr);
-int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header, MPIDI_msg_sz_t hdr_sz);
+int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz);
+int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz,
+ MPIR_Request **sreq_ptr);
+int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz,
+ MPIR_Request **sreq_ptr);
+int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *header, intptr_t hdr_sz);
int MPID_nem_tcp_get_addr_port_from_bc(const char *business_card, struct in_addr *addr, in_port_t *port);
void MPID_nem_tcp_vc_dbg_print_sendq(FILE *stream, MPIDI_VC_t *vc);
@@ -111,7 +113,9 @@ int MPID_nem_tcp_vc_terminated(MPIDI_VC_t *vc);
int MPID_nem_tcp_get_ordering(int *ordering);
-int MPID_nem_tcp_pkt_unpause_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
+int MPID_nem_tcp_pkt_unpause_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp);
/* Macros */
@@ -161,19 +165,19 @@ int MPID_nem_tcp_pkt_unpause_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI
/* interface utilities */
/*S
- MPIDU_Sock_ifaddr_t - Structure to hold an Internet address.
+ MPIDI_CH3I_nem_tcp_ifaddr_t - Structure to hold an Internet address.
+ len - Length of the address. 4 for IPv4, 16 for IPv6.
- ifaddr - Address bytes (as bytes, not characters)
S*/
-typedef struct MPIDU_Sock_ifaddr_t {
+typedef struct MPIDI_CH3I_nem_tcp_ifaddr_t {
unsigned int len;
int type;
unsigned char ifaddr[16];
-} MPIDU_Sock_ifaddr_t;
-int MPIDI_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found );
-int MPIDI_Get_IP_for_iface(const char *ifname, MPIDU_Sock_ifaddr_t *ifaddr, int *found);
+} MPIDI_CH3I_nem_tcp_ifaddr_t;
+int MPIDI_GetIPInterface( MPIDI_CH3I_nem_tcp_ifaddr_t *ifaddr, int *found );
+int MPIDI_Get_IP_for_iface(const char *ifname, MPIDI_CH3I_nem_tcp_ifaddr_t *ifaddr, int *found);
/* Keys for business cards */
#define MPIDI_CH3I_PORT_KEY "port"
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c
index 73805fb..867a835 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c
@@ -111,7 +111,8 @@ MPID_nem_netmod_funcs_t MPIDI_nem_tcp_funcs = {
/* in case there are no packet types defined (e.g., they're ifdef'ed out) make sure the array is not zero length */
static MPIDI_CH3_PktHandler_Fcn *pkt_handlers[MPIDI_NEM_TCP_PKT_NUM_TYPES ? MPIDI_NEM_TCP_PKT_NUM_TYPES : 1];
-
+
+MPL_dbg_class MPIDI_NEM_TCP_DBG_DET;
#undef FUNCNAME
#define FUNCNAME set_up_listener
@@ -121,12 +122,12 @@ static int set_up_listener(void)
{
int mpi_errno = MPI_SUCCESS;
int ret;
- MPIDI_STATE_DECL(MPID_STATE_SET_UP_LISTENER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SET_UP_LISTENER);
- MPIDI_FUNC_ENTER(MPID_STATE_SET_UP_LISTENER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SET_UP_LISTENER);
MPID_nem_tcp_g_lstn_plfd.fd = MPID_nem_tcp_g_lstn_sc.fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- MPIR_ERR_CHKANDJUMP2(MPID_nem_tcp_g_lstn_sc.fd == -1, mpi_errno, MPI_ERR_OTHER, "**sock_create", "**sock_create %s %d", MPIU_Strerror(errno), errno);
+ MPIR_ERR_CHKANDJUMP2(MPID_nem_tcp_g_lstn_sc.fd == -1, mpi_errno, MPI_ERR_OTHER, "**sock_create", "**sock_create %s %d", MPIR_Strerror(errno), errno);
mpi_errno = MPID_nem_tcp_set_sockopts(MPID_nem_tcp_g_lstn_sc.fd);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -136,12 +137,12 @@ static int set_up_listener(void)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
ret = listen(MPID_nem_tcp_g_lstn_sc.fd, SOMAXCONN);
- MPIR_ERR_CHKANDJUMP2(ret == -1, mpi_errno, MPI_ERR_OTHER, "**listen", "**listen %s %d", MPIU_Strerror(errno), errno);
+ MPIR_ERR_CHKANDJUMP2(ret == -1, mpi_errno, MPI_ERR_OTHER, "**listen", "**listen %s %d", MPIR_Strerror(errno), errno);
MPID_nem_tcp_g_lstn_sc.state.lstate = LISTEN_STATE_LISTENING;
MPID_nem_tcp_g_lstn_sc.handler = MPID_nem_tcp_state_listening_handler;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SET_UP_LISTENER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SET_UP_LISTENER);
return mpi_errno;
fn_fail:
@@ -155,14 +156,18 @@ fn_fail:
int MPID_nem_tcp_init (MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max_sz_p)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_INIT);
MPID_nem_net_module_vc_dbg_print_sendq = MPID_nem_tcp_vc_dbg_print_sendq;
/* first make sure that our private fields in the vc fit into the area provided */
- MPIU_Assert(sizeof(MPID_nem_tcp_vc_area) <= MPIDI_NEM_VC_NETMOD_AREA_LEN);
+ MPIR_Assert(sizeof(MPID_nem_tcp_vc_area) <= MPIDI_NEM_VC_NETMOD_AREA_LEN);
+
+#if defined (MPL_USE_DBG_LOGGING)
+ MPIDI_NEM_TCP_DBG_DET = MPL_dbg_class_alloc("MPIDI_NEM_TCP_DBG_DET", "nem_sock_det");
+#endif /* MPL_USE_DBG_LOGGING */
/* set up listener socket */
mpi_errno = set_up_listener();
@@ -187,17 +192,17 @@ int MPID_nem_tcp_init (MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_
void *ret;
ret = signal(SIGPIPE, SIG_IGN);
- MPIR_ERR_CHKANDJUMP1(ret == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIR_Strerror(errno));
if (ret != SIG_DFL && ret != SIG_IGN) {
/* The app has set its own signal handler. Replace the previous handler. */
ret = signal(SIGPIPE, ret);
- MPIR_ERR_CHKANDJUMP1(ret == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIR_Strerror(errno));
}
}
#endif
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_INIT);
/* fprintf(stdout, FCNAME " Exit\n"); fflush(stdout); */
return mpi_errno;
fn_fail:
@@ -218,9 +223,9 @@ static int ckpt_restart(void)
char *bc_val = NULL;
int val_max_sz;
int i;
- MPIDI_STATE_DECL(MPID_STATE_CKPT_RESTART);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CKPT_RESTART);
- MPIDI_FUNC_ENTER(MPID_STATE_CKPT_RESTART);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CKPT_RESTART);
/* First, clean up. We didn't shut anything down before the
checkpoint, so we need to go close and free any resources */
@@ -243,7 +248,7 @@ static int ckpt_restart(void)
/* publish business card */
mpi_errno = MPIDI_PG_SetConnInfo(MPIDI_Process.my_pg_rank, (const char *)publish_bc_orig);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Free(publish_bc_orig);
+ MPL_free(publish_bc_orig);
for (i = 0; i < MPIDI_Process.my_pg->size; ++i) {
MPIDI_VC_t *vc;
@@ -260,7 +265,7 @@ static int ckpt_restart(void)
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CKPT_RESTART);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CKPT_RESTART);
return mpi_errno;
fn_fail:
@@ -290,13 +295,13 @@ fn_fail:
*/
static int GetSockInterfaceAddr(int myRank, char *ifname, int maxIfname,
- MPIDU_Sock_ifaddr_t *ifaddr)
+ MPIDI_CH3I_nem_tcp_ifaddr_t *ifaddr)
{
const char *ifname_string;
int mpi_errno = MPI_SUCCESS;
int ifaddrFound = 0;
- MPIU_Assert(maxIfname);
+ MPIR_Assert(maxIfname);
ifname[0] = '\0';
MPIR_ERR_CHKANDJUMP(MPIR_CVAR_CH3_INTERFACE_HOSTNAME && MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, mpi_errno, MPI_ERR_OTHER, "**ifname_and_hostname");
@@ -310,7 +315,7 @@ static int GetSockInterfaceAddr(int myRank, char *ifname, int maxIfname,
mpi_errno = MPIDI_Get_IP_for_iface(MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, ifaddr, &ifaddrFound);
MPIR_ERR_CHKANDJUMP1(mpi_errno || !ifaddrFound, mpi_errno, MPI_ERR_OTHER, "**iface_notfound", "**iface_notfound %s", MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE);
- MPIU_DBG_MSG_FMT(CH3_CONNECT, VERBOSE, (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE, (MPL_DBG_FDEST,
"ifaddrFound=TRUE ifaddr->type=%d ifaddr->len=%d ifaddr->ifaddr[0-3]=%d.%d.%d.%d",
ifaddr->type, ifaddr->len, ifaddr->ifaddr[0], ifaddr->ifaddr[1], ifaddr->ifaddr[2],
ifaddr->ifaddr[3]));
@@ -364,7 +369,7 @@ static int GetSockInterfaceAddr(int myRank, char *ifname, int maxIfname,
}
else {
/* Copy this name into the output name */
- MPIU_Strncpy( ifname, ifname_string, maxIfname );
+ MPL_strncpy( ifname, ifname_string, maxIfname );
}
/* If we don't have an IP address, try to get it from the name */
@@ -388,7 +393,7 @@ static int GetSockInterfaceAddr(int myRank, char *ifname, int maxIfname,
ifaddr->type = -1;
MPIR_ERR_INTERNAL(mpi_errno, "Address too long to fit in field");
} else {
- MPIU_Memcpy( ifaddr->ifaddr, info->h_addr_list[0], ifaddr->len );
+ MPIR_Memcpy( ifaddr->ifaddr, info->h_addr_list[0], ifaddr->len );
}
}
@@ -406,33 +411,33 @@ fn_fail:
int MPID_nem_tcp_get_business_card (int my_rank, char **bc_val_p, int *val_max_sz_p)
{
int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
- MPIDU_Sock_ifaddr_t ifaddr;
+ int str_errno = MPL_STR_SUCCESS;
+ MPIDI_CH3I_nem_tcp_ifaddr_t ifaddr;
char ifname[MAX_HOST_DESCRIPTION_LEN];
int ret;
struct sockaddr_in sock_id;
socklen_t len;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD);
mpi_errno = GetSockInterfaceAddr(my_rank, ifname, sizeof(ifname), &ifaddr);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- str_errno = MPIU_Str_add_string_arg(bc_val_p, val_max_sz_p, MPIDI_CH3I_HOST_DESCRIPTION_KEY, ifname);
+ str_errno = MPL_str_add_string_arg(bc_val_p, val_max_sz_p, MPIDI_CH3I_HOST_DESCRIPTION_KEY, ifname);
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
len = sizeof(sock_id);
ret = getsockname (MPID_nem_tcp_g_lstn_sc.fd, (struct sockaddr *)&sock_id, &len);
- MPIR_ERR_CHKANDJUMP1 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**getsockname", "**getsockname %s", MPIU_Strerror (errno));
+ MPIR_ERR_CHKANDJUMP1 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**getsockname", "**getsockname %s", MPIR_Strerror (errno));
- str_errno = MPIU_Str_add_int_arg (bc_val_p, val_max_sz_p, MPIDI_CH3I_PORT_KEY, ntohs(sock_id.sin_port));
+ str_errno = MPL_str_add_int_arg (bc_val_p, val_max_sz_p, MPIDI_CH3I_PORT_KEY, ntohs(sock_id.sin_port));
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
@@ -441,10 +446,10 @@ int MPID_nem_tcp_get_business_card (int my_rank, char **bc_val_p, int *val_max_s
unsigned char *p;
p = (unsigned char *)(ifaddr.ifaddr);
MPL_snprintf( ifname, sizeof(ifname), "%u.%u.%u.%u", p[0], p[1], p[2], p[3] );
- MPIU_DBG_MSG_S(CH3_CONNECT,VERBOSE,"ifname = %s",ifname );
- str_errno = MPIU_Str_add_string_arg(bc_val_p, val_max_sz_p, MPIDI_CH3I_IFNAME_KEY, ifname);
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_CONNECT,VERBOSE,"ifname = %s",ifname );
+ str_errno = MPL_str_add_string_arg(bc_val_p, val_max_sz_p, MPIDI_CH3I_IFNAME_KEY, ifname);
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
}
@@ -454,7 +459,7 @@ int MPID_nem_tcp_get_business_card (int my_rank, char **bc_val_p, int *val_max_s
fn_exit:
/* fprintf(stdout, "MPID_nem_tcp_get_business_card Exit, mpi_errno=%d\n", mpi_errno); fflush(stdout); */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_GET_BUSINESS_CARD);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -469,9 +474,9 @@ int MPID_nem_tcp_connect_to_root (const char *business_card, MPIDI_VC_t *new_vc)
int mpi_errno = MPI_SUCCESS;
struct in_addr addr;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(new_vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT);
/* vc is already allocated before reaching this point */
@@ -485,7 +490,7 @@ int MPID_nem_tcp_connect_to_root (const char *business_card, MPIDI_VC_t *new_vc)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CONNECT_TO_ROOT);
return mpi_errno;
fn_fail:
@@ -501,9 +506,9 @@ int MPID_nem_tcp_vc_init (MPIDI_VC_t *vc)
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_VC_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_VC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_VC_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_VC_INIT);
vc_tcp->state = MPID_NEM_TCP_VC_STATE_DISCONNECTED;
@@ -537,7 +542,7 @@ int MPID_nem_tcp_vc_init (MPIDI_VC_t *vc)
vc_tcp->connect_retry_count = 0;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_VC_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_VC_INIT);
return mpi_errno;
}
@@ -571,27 +576,27 @@ int MPID_nem_tcp_get_addr_port_from_bc(const char *business_card, struct in_addr
int port_int;
/*char desc_str[256];*/
char ifname[256];
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC);
/* fprintf(stdout, FCNAME " Enter\n"); fflush(stdout); */
/* desc_str is only used for debugging
- ret = MPIU_Str_get_string_arg (business_card, MPIDI_CH3I_HOST_DESCRIPTION_KEY, desc_str, sizeof(desc_str));
- MPIR_ERR_CHKANDJUMP (ret != MPIU_STR_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**argstr_missinghost");
+ ret = MPL_str_get_string_arg (business_card, MPIDI_CH3I_HOST_DESCRIPTION_KEY, desc_str, sizeof(desc_str));
+ MPIR_ERR_CHKANDJUMP (ret != MPL_STR_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**argstr_missinghost");
*/
/* sizeof(in_port_t) != sizeof(int) on most platforms, so we need to use
- * port_int as the arg to MPIU_Str_get_int_arg. */
- ret = MPIU_Str_get_int_arg (business_card, MPIDI_CH3I_PORT_KEY, &port_int);
- /* MPIU_STR_FAIL is not a valid MPI error code so we store the result in ret
+ * port_int as the arg to MPL_str_get_int_arg. */
+ ret = MPL_str_get_int_arg (business_card, MPIDI_CH3I_PORT_KEY, &port_int);
+ /* MPL_STR_FAIL is not a valid MPI error code so we store the result in ret
* instead of mpi_errno. */
- MPIR_ERR_CHKANDJUMP (ret != MPIU_STR_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**argstr_missingport");
- MPIU_Assert((port_int >> (8*sizeof(*port))) == 0); /* ensure port_int isn't too large for *port */
+ MPIR_ERR_CHKANDJUMP (ret != MPL_STR_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**argstr_missingport");
+ MPIR_Assert((port_int >> (8*sizeof(*port))) == 0); /* ensure port_int isn't too large for *port */
*port = htons((in_port_t)port_int);
- ret = MPIU_Str_get_string_arg(business_card, MPIDI_CH3I_IFNAME_KEY, ifname, sizeof(ifname));
- MPIR_ERR_CHKANDJUMP (ret != MPIU_STR_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**argstr_missingifname");
+ ret = MPL_str_get_string_arg(business_card, MPIDI_CH3I_IFNAME_KEY, ifname, sizeof(ifname));
+ MPIR_ERR_CHKANDJUMP (ret != MPL_STR_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**argstr_missingifname");
ret = inet_pton (AF_INET, (const char *)ifname, addr);
MPIR_ERR_CHKANDJUMP(ret == 0, mpi_errno,MPI_ERR_OTHER,"**ifnameinvalid");
@@ -599,11 +604,11 @@ int MPID_nem_tcp_get_addr_port_from_bc(const char *business_card, struct in_addr
fn_exit:
/* fprintf(stdout, FCNAME " Exit\n"); fflush(stdout); */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_GET_ADDR_PORT_FROM_BC);
return mpi_errno;
fn_fail:
/* fprintf(stdout, "failure. mpi_errno = %d\n", mpi_errno); */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -620,9 +625,9 @@ int MPID_nem_tcp_bind (int sockfd)
int ret;
struct sockaddr_in sin;
int port;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_BIND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_BIND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_BIND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_BIND);
MPIR_ERR_CHKANDJUMP(MPIR_CVAR_CH3_PORT_RANGE.low < 0 || MPIR_CVAR_CH3_PORT_RANGE.low > MPIR_CVAR_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
@@ -640,20 +645,20 @@ int MPID_nem_tcp_bind (int sockfd)
break;
/* check for real error */
- MPIR_ERR_CHKANDJUMP3 (errno != EADDRINUSE && errno != EADDRNOTAVAIL, mpi_errno, MPI_ERR_OTHER, "**sock|poll|bind", "**sock|poll|bind %d %d %s", port, errno, MPIU_Strerror (errno));
+ MPIR_ERR_CHKANDJUMP3 (errno != EADDRINUSE && errno != EADDRNOTAVAIL, mpi_errno, MPI_ERR_OTHER, "**sock|poll|bind", "**sock|poll|bind %d %d %s", port, errno, MPIR_Strerror (errno));
}
/* check if an available port was found */
- MPIR_ERR_CHKANDJUMP3 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**sock|poll|bind", "**sock|poll|bind %d %d %s", port-1, errno, MPIU_Strerror (errno));
+ MPIR_ERR_CHKANDJUMP3 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**sock|poll|bind", "**sock|poll|bind %d %d %s", port-1, errno, MPIR_Strerror (errno));
fn_exit:
/* if (ret == 0) */
/* fprintf(stdout, "sockfd=%d port=%d bound\n", sockfd, port); */
/* fprintf(stdout, FCNAME " Exit\n"); fflush(stdout); */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_BIND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_BIND);
return mpi_errno;
fn_fail:
/* fprintf(stdout, "failure. mpi_errno = %d\n", mpi_errno); */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
@@ -665,9 +670,9 @@ int MPID_nem_tcp_vc_terminate(MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
int req_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_VC_TERMINATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_VC_TERMINATE);
if (vc->state != MPIDI_VC_STATE_CLOSED) {
/* VC is terminated as a result of a fault. Complete
@@ -694,7 +699,7 @@ int MPID_nem_tcp_vc_terminate(MPIDI_VC_t *vc)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_VC_TERMINATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_VC_TERMINATE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -710,9 +715,9 @@ int MPID_nem_tcp_vc_terminated(MPIDI_VC_t *vc)
/* This is called when the VC is to be terminated once all queued
sends have been sent. */
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_NEM_TCP_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_NEM_TCP_VC_TERMINATED);
- MPIDI_FUNC_ENTER(MPID_NEM_TCP_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_NEM_TCP_VC_TERMINATED);
mpi_errno = MPID_nem_tcp_cleanup(vc);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -721,10 +726,10 @@ int MPID_nem_tcp_vc_terminated(MPIDI_VC_t *vc)
if(mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_NEM_TCP_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_NEM_TCP_VC_TERMINATED);
return mpi_errno;
fn_fail:
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno));
goto fn_exit;
}
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_queue.h b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_queue.h
index f20f4a9..6b13e5e 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_queue.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_queue.h
@@ -19,7 +19,7 @@
#define GENERIC_Q_HEAD(q) ((q).head)
#define GENERIC_Q_ENQUEUE_EMPTY(qp, ep, next_field) do { \
- MPIU_Assert (GENERIC_Q_EMPTY (*(qp))); \
+ MPIR_Assert (GENERIC_Q_EMPTY (*(qp))); \
(qp)->head = (qp)->tail = ep; \
(ep)->next_field = NULL; \
PRINT_QUEUE (qp, next_field); \
@@ -40,7 +40,7 @@
tail of a linked list of elements. The list is inserted on the end
of the queue. */
#define GENERIC_Q_ENQUEUE_EMPTY_MULTIPLE(qp, ep0, ep1, next_field) do { \
- MPIU_Assert (GENERIC_Q_EMPTY (*(qp))); \
+ MPIR_Assert (GENERIC_Q_EMPTY (*(qp))); \
(qp)->head = ep0; \
(qp)->tail = ep1; \
(ep1)->next_field = NULL; \
@@ -59,7 +59,7 @@
#define GENERIC_Q_DEQUEUE(qp, epp, next_field) do { \
- MPIU_Assert (!GENERIC_Q_EMPTY (*(qp))); \
+ MPIR_Assert (!GENERIC_Q_EMPTY (*(qp))); \
*(epp) = (qp)->head; \
(qp)->head = (*(epp))->next_field; \
if ((qp)->head == NULL) \
@@ -68,7 +68,7 @@
/* remove the elements from the top of the queue starting with ep0 through ep1 */
#define GENERIC_Q_REMOVE_ELEMENTS(qp, ep0, ep1, next_field) do { \
- MPIU_Assert (GENERIC_Q_HEAD (*(qp)) == (ep0)); \
+ MPIR_Assert (GENERIC_Q_HEAD (*(qp)) == (ep0)); \
(qp)->head = (ep1)->next_field; \
if ((qp)->head == NULL) \
(qp)->tail = NULL; \
@@ -82,7 +82,7 @@
#define GENERIC_L_HEAD(q) ((q).head)
#define GENERIC_L_ADD_EMPTY(qp, ep, next_field, prev_field) do { \
- MPIU_Assert (GENERIC_L_EMPTY (*(qp))); \
+ MPIR_Assert (GENERIC_L_EMPTY (*(qp))); \
(qp)->head = ep; \
(ep)->next_field = (ep)->prev_field = NULL; \
} while (0)
@@ -100,7 +100,7 @@
} while (0)
#define GENERIC_L_REMOVE(qp, ep, next_field, prev_field) do { \
- MPIU_Assert (!GENERIC_L_EMPTY (*(qp))); \
+ MPIR_Assert (!GENERIC_L_EMPTY (*(qp))); \
if ((ep)->prev_field) \
((ep)->prev_field)->next_field = (ep)->next_field; \
else \
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c
index 2a0e9cc..fc73e8d 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c
@@ -23,7 +23,7 @@ static struct {MPID_nem_tcp_send_q_element_t *top;} free_buffers = {0};
#define ALLOC_Q_ELEMENT(e) do { \
if (S_EMPTY (free_buffers)) \
{ \
- MPIU_CHKPMEM_MALLOC (*(e), MPID_nem_tcp_send_q_element_t *, sizeof(MPID_nem_tcp_send_q_element_t), \
+ MPIR_CHKPMEM_MALLOC (*(e), MPID_nem_tcp_send_q_element_t *, sizeof(MPID_nem_tcp_send_q_element_t), \
mpi_errno, "send queue element"); \
} \
else \
@@ -44,22 +44,22 @@ int MPID_nem_tcp_send_init(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIU_CHKPMEM_DECL (NUM_PREALLOC_SENDQ);
+ MPIR_CHKPMEM_DECL (NUM_PREALLOC_SENDQ);
/* preallocate sendq elements */
for (i = 0; i < NUM_PREALLOC_SENDQ; ++i)
{
MPID_nem_tcp_send_q_element_t *e;
- MPIU_CHKPMEM_MALLOC (e, MPID_nem_tcp_send_q_element_t *,
+ MPIR_CHKPMEM_MALLOC (e, MPID_nem_tcp_send_q_element_t *,
sizeof(MPID_nem_tcp_send_q_element_t), mpi_errno, "send queue element");
S_PUSH (&free_buffers, e);
}
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
return mpi_errno;
}
@@ -70,17 +70,17 @@ int MPID_nem_tcp_send_init(void)
int MPID_nem_tcp_send_queued(MPIDI_VC_t *vc, MPIDI_nem_tcp_request_queue_t *send_queue)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *sreq;
- MPIDI_msg_sz_t offset;
+ MPIR_Request *sreq;
+ intptr_t offset;
MPL_IOV *iov;
int complete;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_SEND_QUEUED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_SEND_QUEUED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_SEND_QUEUED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_SEND_QUEUED);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "vc = %p", vc);
- MPIU_Assert(vc != NULL);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "vc = %p", vc);
+ MPIR_Assert(vc != NULL);
if (MPIDI_CH3I_Sendq_empty(*send_queue))
goto fn_exit;
@@ -88,7 +88,7 @@ int MPID_nem_tcp_send_queued(MPIDI_VC_t *vc, MPIDI_nem_tcp_request_queue_t *send
while (!MPIDI_CH3I_Sendq_empty(*send_queue))
{
sreq = MPIDI_CH3I_Sendq_head(*send_queue);
- MPIU_DBG_MSG_P(CH3_CHANNEL, VERBOSE, "Sending %p", sreq);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Sending %p", sreq);
iov = &sreq->dev.iov[sreq->dev.iov_offset];
@@ -107,18 +107,18 @@ int MPID_nem_tcp_send_queued(MPIDI_VC_t *vc, MPIDI_nem_tcp_request_queue_t *send
if (errno == EAGAIN)
{
offset = 0;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "EAGAIN");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "EAGAIN");
break;
} else {
int req_errno = MPI_SUCCESS;
- MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIU_Strerror(errno));
+ MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIR_Strerror(errno));
MPIR_ERR_SET1(req_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
mpi_errno = MPID_nem_tcp_cleanup_on_error(vc, req_errno);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
goto fn_exit; /* this vc is closed now, just bail out */
}
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "write " MPIDI_MSG_SZ_FMT, offset);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "write %" PRIdPTR, offset);
complete = 1;
for (iov = &sreq->dev.iov[sreq->dev.iov_offset]; iov < &sreq->dev.iov[sreq->dev.iov_offset + sreq->dev.iov_count]; ++iov)
@@ -143,17 +143,17 @@ int MPID_nem_tcp_send_queued(MPIDI_VC_t *vc, MPIDI_nem_tcp_request_queue_t *send
else
{
/* sent whole message */
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = sreq->dev.OnDataAvail;
if (!reqFn)
{
- MPIU_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
MPIDI_CH3I_Sendq_dequeue(send_queue, &sreq);
continue;
}
@@ -164,7 +164,7 @@ int MPID_nem_tcp_send_queued(MPIDI_VC_t *vc, MPIDI_nem_tcp_request_queue_t *send
if (complete)
{
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
MPIDI_CH3I_Sendq_dequeue(send_queue, &sreq);
continue;
}
@@ -176,7 +176,7 @@ int MPID_nem_tcp_send_queued(MPIDI_VC_t *vc, MPIDI_nem_tcp_request_queue_t *send
UNSET_PLFD(vc_tcp);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_SEND_QUEUED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_SEND_QUEUED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -194,7 +194,7 @@ int MPID_nem_tcp_send_finalize(void)
{
MPID_nem_tcp_send_q_element_t *e;
S_POP (&free_buffers, &e);
- MPIU_Free (e);
+ MPL_free (e);
}
return mpi_errno;
}
@@ -209,11 +209,15 @@ int MPID_nem_tcp_conn_est (MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CONN_EST);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_CONN_EST);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_CONN_EST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_CONN_EST);
- MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
+ /* only update VC state when it is not being closed.
+ * Note that we still need change state here if the VC is passively
+ * connected (i.e., server in dynamic process connection) */
+ if (vc->state == MPIDI_VC_STATE_INACTIVE)
+ MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
if (!MPIDI_CH3I_Sendq_empty(vc_tcp->send_queue))
{
@@ -223,7 +227,7 @@ int MPID_nem_tcp_conn_est (MPIDI_VC_t *vc)
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_CONN_EST);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_CONN_EST);
return mpi_errno;
}
@@ -231,21 +235,21 @@ int MPID_nem_tcp_conn_est (MPIDI_VC_t *vc)
#define FUNCNAME MPID_nem_tcp_iStartContigMsg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz,
- MPID_Request **sreq_ptr)
+int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz,
+ MPIR_Request **sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request * sreq = NULL;
- MPIDI_msg_sz_t offset = 0;
+ MPIR_Request * sreq = NULL;
+ intptr_t offset = 0;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
sockconn_t *sc = vc_tcp->sc;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "tcp_iStartContigMsg");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "tcp_iStartContigMsg");
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)hdr);
if (!MPID_nem_tcp_vc_send_paused(vc_tcp)) {
@@ -276,14 +280,14 @@ int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
offset = 0;
else {
int req_errno = MPI_SUCCESS;
- MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIU_Strerror(errno));
+ MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIR_Strerror(errno));
MPIR_ERR_SET1(req_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
mpi_errno = MPID_nem_tcp_cleanup_on_error(vc, req_errno);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
goto fn_fail;
}
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "write " MPIDI_MSG_SZ_FMT, offset);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "write %" PRIdPTR, offset);
if (offset == sizeof(MPIDI_CH3_Pkt_t) + data_sz)
{
@@ -303,13 +307,13 @@ int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
}
/* create and enqueue request */
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "enqueuing");
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "enqueuing");
/* create a request */
- sreq = MPID_Request_create();
- MPIU_Assert (sreq != NULL);
- MPIU_Object_set_ref (sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert (sreq != NULL);
+ MPIR_Object_set_ref (sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = 0;
sreq->ch.vc = vc;
@@ -336,7 +340,7 @@ int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
sreq->dev.iov_count = 1;
}
- MPIU_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
+ MPIR_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
if (MPID_nem_tcp_vc_send_paused(vc_tcp)) {
MPIDI_CH3I_Sendq_enqueue(&vc_tcp->paused_send_queue, sreq);
@@ -360,7 +364,7 @@ int MPID_nem_tcp_iStartContigMsg(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_s
*sreq_ptr = sreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -371,21 +375,21 @@ fn_fail:
#define FUNCNAME MPID_nem_tcp_iStartContigMsg_paused
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, void *data, MPIDI_msg_sz_t data_sz,
- MPID_Request **sreq_ptr)
+int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, intptr_t hdr_sz, void *data, intptr_t data_sz,
+ MPIR_Request **sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request * sreq = NULL;
- MPIDI_msg_sz_t offset = 0;
+ MPIR_Request * sreq = NULL;
+ intptr_t offset = 0;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
sockconn_t *sc = vc_tcp->sc;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG_PAUSED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG_PAUSED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG_PAUSED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG_PAUSED);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "tcp_iStartContigMsg");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "tcp_iStartContigMsg");
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)hdr);
if (MPID_nem_tcp_vc_is_connected(vc_tcp))
@@ -415,7 +419,7 @@ int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_
offset = 0;
else {
int req_errno = MPI_SUCCESS;
- MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIU_Strerror(errno));
+ MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIR_Strerror(errno));
MPIR_ERR_SET1(req_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
mpi_errno = MPID_nem_tcp_cleanup_on_error(vc, req_errno);
@@ -423,7 +427,7 @@ int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_
goto fn_fail;
}
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "write " MPIDI_MSG_SZ_FMT, offset);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "write %" PRIdPTR, offset);
if (offset == sizeof(MPIDI_CH3_Pkt_t) + data_sz)
{
@@ -442,13 +446,13 @@ int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_
}
/* create and enqueue request */
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "enqueuing");
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "enqueuing");
/* create a request */
- sreq = MPID_Request_create();
- MPIU_Assert (sreq != NULL);
- MPIU_Object_set_ref (sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert (sreq != NULL);
+ MPIR_Object_set_ref (sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = 0;
sreq->ch.vc = vc;
@@ -475,7 +479,7 @@ int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_
sreq->dev.iov_count = 1;
}
- MPIU_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
+ MPIR_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
if (MPID_nem_tcp_vc_is_connected(vc_tcp)) {
if (MPIDI_CH3I_Sendq_empty(vc_tcp->send_queue)) {
@@ -495,7 +499,7 @@ int MPID_nem_tcp_iStartContigMsg_paused(MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_
*sreq_ptr = sreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG_PAUSED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_ISTARTCONTIGMSG_PAUSED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -505,20 +509,20 @@ fn_fail:
#define FUNCNAME MPID_nem_tcp_iSendContig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPIDI_msg_sz_t hdr_sz,
- void *data, MPIDI_msg_sz_t data_sz)
+int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *hdr, intptr_t hdr_sz,
+ void *data, intptr_t data_sz)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t offset = 0;
+ intptr_t offset = 0;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
sockconn_t *sc = vc_tcp->sc;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ISENDCONTIGMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_ISENDCONTIGMSG);
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "tcp_iSendContig");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "tcp_iSendContig");
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)hdr);
@@ -560,29 +564,29 @@ int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
offset = 0;
else {
int req_errno = MPI_SUCCESS;
- MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIU_Strerror(errno));
+ MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIR_Strerror(errno));
MPIR_ERR_SET1(req_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
mpi_errno = MPID_nem_tcp_cleanup_on_error(vc, req_errno);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
goto fn_fail;
}
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "write " MPIDI_MSG_SZ_FMT, offset);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "write %" PRIdPTR, offset);
if (offset == sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz + data_sz)
{
/* sent whole message */
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = sreq->dev.OnDataAvail;
if (!reqFn)
{
- MPIU_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
goto fn_exit;
}
else
@@ -594,7 +598,7 @@ int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
if (complete)
{
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
goto fn_exit;
}
@@ -638,7 +642,7 @@ int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
}
}
else if (offset < sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz) {
- MPIU_Assert(sreq->dev.ext_hdr_sz > 0);
+ MPIR_Assert(sreq->dev.ext_hdr_sz > 0);
sreq->dev.iov[sreq->dev.iov_count].MPL_IOV_BUF = sreq->dev.ext_hdr_ptr;
sreq->dev.iov[sreq->dev.iov_count].MPL_IOV_LEN = sreq->dev.ext_hdr_sz;
sreq->dev.iov_count++;
@@ -658,8 +662,8 @@ int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
enqueue_request:
/* enqueue request */
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "enqueuing");
- MPIU_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "enqueuing");
+ MPIR_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
sreq->ch.vc = vc;
sreq->dev.iov_offset = 0;
@@ -684,7 +688,7 @@ enqueue_request:
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_ISENDCONTIGMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_ISENDCONTIGMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -695,21 +699,21 @@ fn_fail:
#define FUNCNAME MPID_nem_tcp_SendNoncontig
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header, MPIDI_msg_sz_t hdr_sz)
+int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPIR_Request *sreq, void *header, intptr_t hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
int iov_n;
MPL_IOV iov[MPL_IOV_LIMIT];
MPL_IOV *iov_p;
- MPIDI_msg_sz_t offset;
+ intptr_t offset;
int complete;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
int iov_offset;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "tcp_SendNoncontig");
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "tcp_SendNoncontig");
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
iov_n = 0;
@@ -752,7 +756,7 @@ int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
offset = 0;
else {
int req_errno = MPI_SUCCESS;
- MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIU_Strerror(errno));
+ MPIR_ERR_SET1(req_errno, MPI_ERR_OTHER, "**writev", "**writev %s", MPIR_Strerror(errno));
MPIR_ERR_SET1(req_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
mpi_errno = MPID_nem_tcp_cleanup_on_error(vc, req_errno);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -760,7 +764,7 @@ int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
}
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "write noncontig " MPIDI_MSG_SZ_FMT, offset);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "write noncontig %" PRIdPTR, offset);
}
}
else
@@ -800,7 +804,7 @@ int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
if (complete)
{
/* sent whole iov */
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = sreq->dev.OnDataAvail;
if (!reqFn)
@@ -809,7 +813,7 @@ int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
goto fn_exit;
}
@@ -819,14 +823,14 @@ int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
if (complete)
{
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
goto fn_exit;
}
}
/* enqueue request */
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "enqueuing");
- MPIU_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "enqueuing");
+ MPIR_Assert(sreq->dev.iov_count >= 1 && sreq->dev.iov[0].MPL_IOV_LEN > 0);
sreq->ch.vc = vc;
sreq->dev.iov_offset = 0;
@@ -851,10 +855,10 @@ int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
return mpi_errno;
fn_fail:
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
goto fn_exit;
}
@@ -865,11 +869,11 @@ fn_fail:
int MPID_nem_tcp_error_out_send_queue(struct MPIDI_VC *const vc, int req_errno)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *req;
+ MPIR_Request *req;
MPID_nem_tcp_vc_area *const vc_tcp = VC_TCP(vc);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ERROR_OUT_SEND_QUEUE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_ERROR_OUT_SEND_QUEUE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_ERROR_OUT_SEND_QUEUE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_ERROR_OUT_SEND_QUEUE);
/* we don't call onDataAvail or onFinal handlers because this is
an error condition and we just want to mark them as complete */
@@ -897,7 +901,7 @@ int MPID_nem_tcp_error_out_send_queue(struct MPIDI_VC *const vc, int req_errno)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_ERROR_OUT_SEND_QUEUE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_ERROR_OUT_SEND_QUEUE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_utility.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_utility.c
index 947d998..861d291 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_utility.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_utility.c
@@ -37,11 +37,11 @@ int MPID_nem_tcp_get_vc_from_conninfo (char *pg_id, int pg_rank, struct MPIDI_VC
{
int mpi_errno = MPI_SUCCESS;
MPIDI_PG_t *pg;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO);
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "pg_id=%s pg_rank=%d", pg_id, pg_rank));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "pg_id=%s pg_rank=%d", pg_id, pg_rank));
mpi_errno = MPIDI_PG_Find (pg_id, &pg);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
@@ -52,7 +52,7 @@ int MPID_nem_tcp_get_vc_from_conninfo (char *pg_id, int pg_rank, struct MPIDI_VC
MPIDI_PG_Get_vc_set_active (pg, pg_rank, vc);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -75,30 +75,30 @@ int MPID_nem_tcp_set_sockopts (int fd)
option = 1;
len = sizeof(int);
ret = setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &option, len);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
ret = getsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &option, &len);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
option = 128*1024;
len = sizeof(int);
ret = setsockopt (fd, SOL_SOCKET, SO_RCVBUF, &option, len);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
ret = getsockopt (fd, SOL_SOCKET, SO_RCVBUF, &option, &len);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
ret = setsockopt (fd, SOL_SOCKET, SO_SNDBUF, &option, len);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
ret = getsockopt (fd, SOL_SOCKET, SO_SNDBUF, &option, &len);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
flags = fcntl(fd, F_GETFL, 0);
- MPIR_ERR_CHKANDJUMP2 (flags == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (flags == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
ret = fcntl(fd, F_SETFL, flags | SO_REUSEADDR);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
flags = fcntl(fd, F_GETFL, 0);
- MPIR_ERR_CHKANDJUMP2 (flags == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (flags == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
ret = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s %d", MPIR_Strerror (errno), errno);
fn_exit:
/* fprintf(stdout, FCNAME " Exit\n"); fflush(stdout); */
@@ -148,7 +148,7 @@ MPID_nem_tcp_check_sock_status(const struct pollfd *const plfd)
if (plfd->revents & POLLERR)
{
rc = MPID_NEM_TCP_SOCK_ERROR_EOF;
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "POLLERR on socket"));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "POLLERR on socket"));
goto fn_exit;
}
if (plfd->revents & POLLIN || plfd->revents & POLLOUT)
@@ -160,7 +160,7 @@ MPID_nem_tcp_check_sock_status(const struct pollfd *const plfd)
if (getsockopt(plfd->fd, SOL_SOCKET, SO_ERROR, &error, &n) < 0 || error != 0)
{
rc = MPID_NEM_TCP_SOCK_ERROR_EOF; /* (N1) */
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "getsockopt failure. error=%d:%s", error, MPIU_Strerror(error)));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "getsockopt failure. error=%d:%s", error, MPIR_Strerror(error)));
goto fn_exit;
}
rc = MPID_NEM_TCP_SOCK_CONNECTED;
@@ -186,7 +186,7 @@ int MPID_nem_tcp_is_sock_connected(int fd)
n = sizeof(error);
if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &n) < 0 || error != 0)
{
- MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "getsockopt failure. error=%d:%s", error, MPIU_Strerror(error)));
+ MPL_DBG_MSG_FMT(MPIDI_NEM_TCP_DBG_DET, VERBOSE, (MPL_DBG_FDEST, "getsockopt failure. error=%d:%s", error, MPIR_Strerror(error)));
rc = FALSE; /* error */
goto fn_exit;
}
@@ -209,7 +209,7 @@ int MPID_nem_tcp_is_sock_connected(int fd)
void MPID_nem_tcp_vc_dbg_print_sendq(FILE *stream, MPIDI_VC_t *vc)
{
int i;
- MPID_Request *sreq;
+ MPIR_Request *sreq;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
fprintf(stream, ".. sc=%p fd=%d vc_tcp->state=%d\n", vc_tcp->sc, (vc_tcp->sc ? vc_tcp->sc->fd : -1), vc_tcp->state);
diff --git a/src/mpid/ch3/channels/nemesis/src/.state-cache b/src/mpid/ch3/channels/nemesis/src/.state-cache
index f360efb..602eb65 100644
--- a/src/mpid/ch3/channels/nemesis/src/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/src/.state-cache
@@ -1,38 +1,31 @@
<dir>
-<file name="mpid_nem_init.c" info="1447123141"/>
-<file name="mpid_nem_barrier.c" info="1447123141"/>
-<file name="mpid_nem_lmt.c" info="1447123141"/>
-<file name="mpid_nem_mpich.c" info="1447123141"/>
-<file name="mpid_nem_finalize.c" info="1447123141"/>
-<file name="ch3_init.c" info="1447123141"/>
-<file name="mpid_nem_lmt_shm.c" info="1447123141"/>
-<file name="ch3_isend.c" info="1447123141"/>
-<file name="ch3_istartmsgv.c" info="1447123141"/>
-<file name="mpid_nem_network_poll.c" info="1447123141"/>
-<file name="mpid_nem_mpich_rma.c" info="1447123141"/>
-<file name="ch3_rma_shm.c" info="1447123141"/>
-<file name="mpid_nem_network.c" info="1447123141"/>
-<file name="ch3_win_fns.c" info="1447123141"/>
-<file name="mpid_nem_lmt_dma.c" info="1447123141"/>
-<file name="mpid_nem_debug.c" info="1447123141"/>
-<file name="ch3_isendv.c" info="1447123141"/>
-<file name="ch3i_eagernoncontig.c" info="1447123141"/>
-<file name="ch3_istartmsg.c" info="1447123141"/>
-<file name="mpid_nem_lmt_vmsplice.c" info="1447123141"/>
-<file name="ch3_finalize.c" info="1447123141"/>
-<file name="mpid_nem_alloc.c" info="1447123141"/>
-<file name="ch3i_comm.c" info="1447123141"/>
-<file name="ch3_progress.c" info="1447123141"/>
-<file name="mpid_nem_ckpt.c" info="1447123141"/>
+<file name="ch3_isendv.c" info="1478973152"/>
+<file name="mpid_nem_lmt.c" info="1478973152"/>
+<file name="mpid_nem_debug.c" info="1478973152"/>
+<file name="mpid_nem_network.c" info="1478973152"/>
+<file name="mpid_nem_finalize.c" info="1478973152"/>
+<file name="ch3i_eagernoncontig.c" info="1478973152"/>
+<file name="mpid_nem_lmt_shm.c" info="1478973152"/>
+<file name="mpid_nem_network_poll.c" info="1478973152"/>
+<file name="mpid_nem_mpich_rma.c" info="1478973152"/>
+<file name="ch3i_comm.c" info="1478973152"/>
+<file name="mpid_nem_lmt_dma.c" info="1478973152"/>
+<file name="ch3_isend.c" info="1478973152"/>
+<file name="ch3_progress.c" info="1478973152"/>
+<file name="mpid_nem_lmt_vmsplice.c" info="1478973152"/>
+<file name="ch3_win_fns.c" info="1478973152"/>
+<file name="mpid_nem_ckpt.c" info="1478973152"/>
+<file name="ch3_istartmsg.c" info="1478973152"/>
+<file name="ch3_init.c" info="1478973152"/>
+<file name="mpid_nem_mpich.c" info="1478973152"/>
+<file name="ch3_rma_shm.c" info="1478973152"/>
+<file name="mpid_nem_init.c" info="1478973152"/>
+<file name="ch3_finalize.c" info="1478973152"/>
+<file name="ch3_istartmsgv.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpid_nem_init.c">
-MPID_STATE_MPID_NEM_VC_INIT MPID_nem_vc_init
-MPID_STATE_MPID_NEM_VC_DESTROY MPID_nem_vc_destroy
-</fileinfo>
-<fileinfo name="mpid_nem_barrier.c">
-MPID_STATE_MPID_NEM_BARRIER_INIT MPID_nem_barrier_init
-MPID_STATE_MPID_NEM_BARRIER MPID_nem_barrier
+<fileinfo name="ch3_isendv.c">
+MPID_STATE_MPIDI_CH3_ISENDV MPIDI_CH3_iSendv
</fileinfo>
<fileinfo name="mpid_nem_lmt.c">
MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT MPID_nem_lmt_pkthandler_init
@@ -46,24 +39,17 @@ MPID_STATE_DO_CTS do_cts
MPID_STATE_DO_SEND do_send
MPID_STATE_DO_COOKIE do_cookie
</fileinfo>
-<fileinfo name="mpid_nem_mpich.c">
-MPID_STATE_MPID_NEM_MPICH_INIT MPID_nem_mpich_init
-MPID_STATE_MPID_NEM_SEND_IOV MPID_nem_send_iov
+<fileinfo name="mpid_nem_debug.c">
+MPID_STATE_MPID_NEM_DBG_DUMP_CELL MPID_nem_dbg_dump_cell
+</fileinfo>
+<fileinfo name="mpid_nem_network.c">
+MPID_STATE_MPID_NEM_CHOOSE_NETMOD MPID_nem_choose_netmod
</fileinfo>
<fileinfo name="mpid_nem_finalize.c">
MPID_STATE_MPID_NEM_FINALIZE MPID_nem_finalize
</fileinfo>
-<fileinfo name="ch3_init.c">
-MPID_STATE_MPIDI_CH3_INIT MPIDI_CH3_Init
-MPID_STATE_MPIDI_CH3_PORTFNSINIT MPIDI_CH3_Init
-MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD MPIDI_CH3_Get_business_card
-MPID_STATE_MPIDI_CH3_VC_INIT MPIDI_CH3_VC_Init
-MPID_STATE_MPIDI_CH3_VC_DESTROY MPIDI_CH3_VC_Destroy
-MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT MPIDI_CH3_Connect_to_root
-MPID_STATE_MPIDI_CH3_PG_INIT MPIDI_CH3_Connect_to_root
-MPID_STATE_MPIDI_CH3_PG_DESTROY MPIDI_CH3_Connect_to_root
-MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB MPID_nem_register_initcomp_cb
-MPID_STATE_MPIDI_CH3_INITCOMPLETED MPIDI_CH3_InitCompleted
+<fileinfo name="ch3i_eagernoncontig.c">
+MPID_STATE_MPIDI_CH3I_SENDNONCONTIG MPIDI_CH3I_SendNoncontig
</fileinfo>
<fileinfo name="mpid_nem_lmt_shm.c">
MPID_STATE_MPID_NEM_LMT_SHM_INITIATE_LMT MPID_nem_lmt_shm_initiate_lmt
@@ -83,12 +69,6 @@ MPID_STATE_MPID_NEM_ATTACH_SHM_REGION MPID_nem_attach_shm_region
MPID_STATE_MPID_NEM_DETACH_SHM_REGION MPID_nem_detach_shm_region
MPID_STATE_MPID_NEM_DELETE_SHM_REGION MPID_nem_delete_shm_region
</fileinfo>
-<fileinfo name="ch3_isend.c">
-MPID_STATE_MPIDI_CH3_ISEND MPIDI_CH3_iSend
-</fileinfo>
-<fileinfo name="ch3_istartmsgv.c">
-MPID_STATE_MPIDI_CH3_ISTARTMSGV MPIDI_CH3_iStartMsgv
-</fileinfo>
<fileinfo name="mpid_nem_network_poll.c">
</fileinfo>
<fileinfo name="mpid_nem_mpich_rma.c">
@@ -109,22 +89,12 @@ MPID_STATE_MPID_NEM_MPICH_PUTV MPID_nem_mpich_putv
MPID_STATE_MPID_NEM_MPICH_GET MPID_nem_mpich_get
MPID_STATE_MPID_NEM_MPICH_GETV MPID_nem_mpich_getv
</fileinfo>
-<fileinfo name="ch3_rma_shm.c">
-MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY MPIDI_CH3_Win_shared_query
-MPID_STATE_MPIDI_CH3_SHM_WIN_FREE MPIDI_CH3_SHM_Win_free
-</fileinfo>
-<fileinfo name="mpid_nem_network.c">
-MPID_STATE_MPID_NEM_CHOOSE_NETMOD MPID_nem_choose_netmod
-</fileinfo>
-<fileinfo name="ch3_win_fns.c">
-MPID_STATE_MPIDI_CH3_WIN_FNS_INIT MPIDI_CH3_Win_fns_init
-MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT MPIDI_CH3_Win_hooks_init
-MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT MPIDI_CH3_Win_pkt_orderings_init
-MPID_STATE_MPIDI_CH3I_WIN_INIT MPIDI_CH3_Win_init
-MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH MPIDI_CH3I_SHM_Wins_match
-MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM MPIDI_CH3I_Win_detect_shm
-MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO MPIDI_CH3I_Win_gather_info
-MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM MPIDI_CH3I_Win_allocate_shm
+<fileinfo name="ch3i_comm.c">
+MPID_STATE_MPIDI_CH3I_COMM_CREATE MPIDI_CH3I_comm_create
+MPID_STATE_MPIDI_CH3I_COMM_DESTROY MPIDI_CH3I_comm_destroy
+MPID_STATE_MPID_NEM_BARRIER_VARS_INIT MPID_nem_barrier_vars_init
+MPID_STATE_NEM_COLL_FINALIZE nem_coll_finalize
+MPID_STATE_MPID_NEM_COLL_INIT MPID_nem_coll_init
</fileinfo>
<fileinfo name="mpid_nem_lmt_dma.c">
MPID_STATE_MPID_NEM_LMT_DMA_INITIATE_LMT MPID_nem_lmt_dma_initiate_lmt
@@ -136,43 +106,8 @@ MPID_STATE_MPID_NEM_LMT_DMA_VC_TERMINATED MPID_nem_lmt_dma_vc_terminated
MPID_STATE_MPID_NEM_LMT_DMA_START_SEND MPID_nem_lmt_dma_start_send
MPID_STATE_MPID_NEM_LMT_DMA_DONE_RECV MPID_nem_lmt_dma_done_recv
</fileinfo>
-<fileinfo name="mpid_nem_debug.c">
-MPID_STATE_MPID_NEM_DBG_DUMP_CELL MPID_nem_dbg_dump_cell
-</fileinfo>
-<fileinfo name="ch3_isendv.c">
-MPID_STATE_MPIDI_CH3_ISENDV MPIDI_CH3_iSendv
-</fileinfo>
-<fileinfo name="ch3i_eagernoncontig.c">
-MPID_STATE_MPIDI_CH3I_SENDNONCONTIG MPIDI_CH3I_SendNoncontig
-</fileinfo>
-<fileinfo name="ch3_istartmsg.c">
-MPID_STATE_MPIDI_CH3_ISTARTMSG MPIDI_CH3_iStartMsg
-</fileinfo>
-<fileinfo name="mpid_nem_lmt_vmsplice.c">
-MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT MPID_nem_lmt_vmsplice_initiate_lmt
-MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV MPID_nem_lmt_vmsplice_start_recv
-MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS MPID_nem_lmt_vmsplice_start_recv
-MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND MPID_nem_lmt_vmsplice_start_send
-MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED MPIDI_CH3_MPID_nem_lmt_vmsplice_vc_terminated
-MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV MPID_nem_lmt_vmsplice_done_recv
-MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND MPID_nem_lmt_vmsplice_done_send
-MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE MPID_nem_lmt_vmsplice_handle_cookie
-</fileinfo>
-<fileinfo name="ch3_finalize.c">
-MPID_STATE_MPIDI_CH3_FINALIZE MPIDI_CH3_Finalize
-</fileinfo>
-<fileinfo name="mpid_nem_alloc.c">
-MPID_STATE_MPIDI_CH3I_SEG_ALLOC MPIDI_CH3I_Seg_alloc
-MPID_STATE_MPIDI_CH3I_SEG_COMMIT MPIDI_CH3I_Seg_commit
-MPID_STATE_MPIDI_CH3I_SEG_DESTROY MPIDI_CH3I_Seg_destroy
-MPID_STATE_CHECK_ALLOC check_alloc
-</fileinfo>
-<fileinfo name="ch3i_comm.c">
-MPID_STATE_MPIDI_CH3I_COMM_CREATE MPIDI_CH3I_comm_create
-MPID_STATE_MPIDI_CH3I_COMM_DESTROY MPIDI_CH3I_comm_destroy
-MPID_STATE_MPID_NEM_BARRIER_VARS_INIT MPID_nem_barrier_vars_init
-MPID_STATE_NEM_COLL_FINALIZE nem_coll_finalize
-MPID_STATE_MPID_NEM_COLL_INIT MPID_nem_coll_init
+<fileinfo name="ch3_isend.c">
+MPID_STATE_MPIDI_CH3_ISEND MPIDI_CH3_iSend
</fileinfo>
<fileinfo name="ch3_progress.c">
MPID_STATE_CHECK_TERMINATING_VCS check_terminating_vcs
@@ -195,6 +130,26 @@ MPID_STATE_PKT_NETMOD_HANDLER pkt_NETMOD_handler
MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED MPIDI_CH3I_Posted_recv_enqueued
MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED MPIDI_CH3I_Posted_recv_dequeued
</fileinfo>
+<fileinfo name="mpid_nem_lmt_vmsplice.c">
+MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT MPID_nem_lmt_vmsplice_initiate_lmt
+MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV MPID_nem_lmt_vmsplice_start_recv
+MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS MPID_nem_lmt_vmsplice_start_recv
+MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND MPID_nem_lmt_vmsplice_start_send
+MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED MPIDI_CH3_MPID_nem_lmt_vmsplice_vc_terminated
+MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV MPID_nem_lmt_vmsplice_done_recv
+MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND MPID_nem_lmt_vmsplice_done_send
+MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE MPID_nem_lmt_vmsplice_handle_cookie
+</fileinfo>
+<fileinfo name="ch3_win_fns.c">
+MPID_STATE_MPIDI_CH3_WIN_FNS_INIT MPIDI_CH3_Win_fns_init
+MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT MPIDI_CH3_Win_hooks_init
+MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT MPIDI_CH3_Win_pkt_orderings_init
+MPID_STATE_MPIDI_CH3I_WIN_INIT MPIDI_CH3_Win_init
+MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH MPIDI_CH3I_SHM_Wins_match
+MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM MPIDI_CH3I_Win_detect_shm
+MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO MPIDI_CH3I_Win_gather_info
+MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM MPIDI_CH3I_Win_allocate_shm
+</fileinfo>
<fileinfo name="mpid_nem_ckpt.c">
MPID_STATE_MPIDI_NEM_CKPT_INIT MPIDI_nem_ckpt_init
MPID_STATE_MPIDI_NEM_CKPT_FINALIZE MPIDI_nem_ckpt_finalize
@@ -206,4 +161,37 @@ MPID_STATE_MPIDI_NEM_CKPT_FINISH MPIDI_nem_ckpt_finish
MPID_STATE_PKT_CKPT_MARKER_HANDLER pkt_ckpt_marker_handler
MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT MPID_nem_ckpt_pkthandler_init
</fileinfo>
+<fileinfo name="ch3_istartmsg.c">
+MPID_STATE_MPIDI_CH3_ISTARTMSG MPIDI_CH3_iStartMsg
+</fileinfo>
+<fileinfo name="ch3_init.c">
+MPID_STATE_MPIDI_CH3_INIT MPIDI_CH3_Init
+MPID_STATE_MPIDI_CH3_PORTFNSINIT MPIDI_CH3_Init
+MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD MPIDI_CH3_Get_business_card
+MPID_STATE_MPIDI_CH3_VC_INIT MPIDI_CH3_VC_Init
+MPID_STATE_MPIDI_CH3_VC_DESTROY MPIDI_CH3_VC_Destroy
+MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT MPIDI_CH3_Connect_to_root
+MPID_STATE_MPIDI_CH3_PG_INIT MPIDI_CH3_Connect_to_root
+MPID_STATE_MPIDI_CH3_PG_DESTROY MPIDI_CH3_Connect_to_root
+MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB MPID_nem_register_initcomp_cb
+MPID_STATE_MPIDI_CH3_INITCOMPLETED MPIDI_CH3_InitCompleted
+</fileinfo>
+<fileinfo name="mpid_nem_mpich.c">
+MPID_STATE_MPID_NEM_MPICH_INIT MPID_nem_mpich_init
+MPID_STATE_MPID_NEM_SEND_IOV MPID_nem_send_iov
+</fileinfo>
+<fileinfo name="ch3_rma_shm.c">
+MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY MPIDI_CH3_Win_shared_query
+MPID_STATE_MPIDI_CH3_SHM_WIN_FREE MPIDI_CH3_SHM_Win_free
+</fileinfo>
+<fileinfo name="mpid_nem_init.c">
+MPID_STATE_MPID_NEM_VC_INIT MPID_nem_vc_init
+MPID_STATE_MPID_NEM_VC_DESTROY MPID_nem_vc_destroy
+</fileinfo>
+<fileinfo name="ch3_finalize.c">
+MPID_STATE_MPIDI_CH3_FINALIZE MPIDI_CH3_Finalize
+</fileinfo>
+<fileinfo name="ch3_istartmsgv.c">
+MPID_STATE_MPIDI_CH3_ISTARTMSGV MPIDI_CH3_iStartMsgv
+</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/nemesis/src/Makefile.mk b/src/mpid/ch3/channels/nemesis/src/Makefile.mk
index d55697c..58ade27 100644
--- a/src/mpid/ch3/channels/nemesis/src/Makefile.mk
+++ b/src/mpid/ch3/channels/nemesis/src/Makefile.mk
@@ -17,9 +17,7 @@ mpi_core_sources += \
src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c \
src/mpid/ch3/channels/nemesis/src/ch3i_comm.c \
src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c \
- src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c \
- src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c \
src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c \
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_finalize.c b/src/mpid/ch3/channels/nemesis/src/ch3_finalize.c
index 641d951..6931611 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_finalize.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_finalize.c
@@ -13,9 +13,9 @@
int MPIDI_CH3_Finalize(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_FINALIZE);
mpi_errno = MPIDI_CH3I_Progress_finalize();
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -24,6 +24,6 @@ int MPIDI_CH3_Finalize(void)
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_FINALIZE);
return mpi_errno;
}
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_init.c b/src/mpid/ch3/channels/nemesis/src/ch3_init.c
index 4a0540e..5c986b4 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_init.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_init.c
@@ -23,8 +23,8 @@ static int nemesis_initialized = 0;
#define FUNCNAME split_type
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int split_type(MPID_Comm * comm_ptr, int stype, int key,
- MPID_Info *info_ptr, MPID_Comm ** newcomm_ptr)
+static int split_type(MPIR_Comm * comm_ptr, int stype, int key,
+ MPIR_Info *info_ptr, MPIR_Comm ** newcomm_ptr)
{
MPID_Node_id_t id;
MPIDI_Rank_t nid;
@@ -65,7 +65,7 @@ int MPIDI_CH3I_Shm_supported(void)
return !mutex_err;
}
-static MPID_CommOps comm_fns = {
+static MPIR_Commops comm_fns = {
split_type
};
@@ -78,12 +78,12 @@ int MPIDI_CH3_Init(int has_parent, MPIDI_PG_t *pg_p, int pg_rank)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_INIT);
/* Override split_type */
- MPID_Comm_fns = &comm_fns;
+ MPIR_Comm_fns = &comm_fns;
mpi_errno = MPID_nem_init (pg_rank, pg_p, has_parent);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
@@ -106,7 +106,7 @@ int MPIDI_CH3_Init(int has_parent, MPIDI_PG_t *pg_p, int pg_rank)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -116,13 +116,13 @@ int MPIDI_CH3_Init(int has_parent, MPIDI_PG_t *pg_p, int pg_rank)
MPI Port functions */
int MPIDI_CH3_PortFnsInit( MPIDI_PortFns *portFns )
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PORTFNSINIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PORTFNSINIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PORTFNSINIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PORTFNSINIT);
- MPIU_UNREFERENCED_ARG(portFns);
+ MPL_UNREFERENCED_ARG(portFns);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PORTFNSINIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PORTFNSINIT);
return 0;
}
@@ -133,15 +133,15 @@ int MPIDI_CH3_PortFnsInit( MPIDI_PortFns *portFns )
int MPIDI_CH3_Get_business_card(int myRank, char *value, int length)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD);
- MPIDI_FUNC_ENTER(MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_ENTER(MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD);
mpi_errno = MPID_nem_get_business_card(myRank, value, length);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD);
+ MPIR_FUNC_VERBOSE_EXIT(MPIDI_STATE_MPIDI_CH3_GET_BUSINESS_CARD);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -155,9 +155,9 @@ fn_fail:
int MPIDI_CH3_VC_Init( MPIDI_VC_t *vc )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_VC_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_VC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_VC_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_VC_INIT);
/* FIXME: Circular dependency. Before calling MPIDI_CH3_Init,
MPID_Init calls InitPG which calls MPIDI_PG_Create which calls
@@ -190,7 +190,7 @@ int MPIDI_CH3_VC_Init( MPIDI_VC_t *vc )
fn_exit:
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_VC_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_VC_INIT);
return mpi_errno;
}
@@ -201,21 +201,21 @@ int MPIDI_CH3_VC_Init( MPIDI_VC_t *vc )
int MPIDI_CH3_VC_Destroy(MPIDI_VC_t *vc )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_VC_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_VC_DESTROY);
/* no need to destroy vc to self, this corresponds to the optimization above
* in MPIDI_CH3_VC_Init */
if (vc->pg == MPIDI_CH3I_my_pg && vc->pg_rank == MPIDI_CH3I_my_rank) {
- MPIU_DBG_MSG_P(NEM_SOCK_DET, VERBOSE, "skipping self vc=%p", vc);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_VC, VERBOSE, "skipping self vc=%p", vc);
goto fn_exit;
}
mpi_errno = MPID_nem_vc_destroy(vc);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_VC_DESTROY);
return mpi_errno;
}
@@ -228,14 +228,14 @@ int MPIDI_CH3_Connect_to_root (const char *port_name, MPIDI_VC_t **new_vc)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_VC_t * vc;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT);
*new_vc = NULL; /* so that the err handling knows to cleanup */
- MPIU_CHKPMEM_MALLOC (vc, MPIDI_VC_t *, sizeof(MPIDI_VC_t), mpi_errno, "vc");
+ MPIR_CHKPMEM_MALLOC (vc, MPIDI_VC_t *, sizeof(MPIDI_VC_t), mpi_errno, "vc");
/* FIXME - where does this vc get freed?
ANSWER (goodell@) - ch3u_port.c FreeNewVC
(but the VC_Destroy is in this file) */
@@ -253,21 +253,21 @@ int MPIDI_CH3_Connect_to_root (const char *port_name, MPIDI_VC_t **new_vc)
mpi_errno = MPID_nem_connect_to_root (port_name, vc);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_CONNECT_TO_ROOT);
return mpi_errno;
fn_fail:
/* freeing without giving the lower layer a chance to cleanup can lead to
leaks on error */
if (*new_vc)
MPIDI_CH3_VC_Destroy(*new_vc);
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
const char * MPIDI_CH3_VC_GetStateString( struct MPIDI_VC *vc )
{
/* Nemesis doesn't have connection state associated with the VC */
@@ -279,23 +279,23 @@ const char * MPIDI_CH3_VC_GetStateString( struct MPIDI_VC *vc )
/* We don't initialize before calling MPIDI_CH3_VC_Init */
int MPIDI_CH3_PG_Init(MPIDI_PG_t *pg_p)
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PG_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PG_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PG_INIT);
- MPIU_UNREFERENCED_ARG(pg_p);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PG_INIT);
+ MPL_UNREFERENCED_ARG(pg_p);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PG_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PG_INIT);
return MPI_SUCCESS;
}
int MPIDI_CH3_PG_Destroy(MPIDI_PG_t *pg_p)
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PG_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PG_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PG_DESTROY);
- MPIU_UNREFERENCED_ARG(pg_p);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PG_DESTROY);
+ MPL_UNREFERENCED_ARG(pg_p);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PG_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PG_DESTROY);
return MPI_SUCCESS;
}
@@ -320,21 +320,21 @@ int MPID_nem_register_initcomp_cb(int (* callback)(void))
{
int mpi_errno = MPI_SUCCESS;
initcomp_cb_t *ep;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB);
- MPIU_CHKPMEM_MALLOC(ep, initcomp_cb_t *, sizeof(*ep), mpi_errno, "initcomp callback element");
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB);
+ MPIR_CHKPMEM_MALLOC(ep, initcomp_cb_t *, sizeof(*ep), mpi_errno, "initcomp callback element");
ep->callback = callback;
INITCOMP_S_PUSH(ep);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_REGISTER_INITCOMP_CB);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -347,9 +347,9 @@ int MPIDI_CH3_InitCompleted(void)
int mpi_errno = MPI_SUCCESS;
initcomp_cb_t *ep;
initcomp_cb_t *ep_tmp;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_INITCOMPLETED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_INITCOMPLETED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_INITCOMPLETED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_INITCOMPLETED);
ep = INITCOMP_S_TOP();
while (ep)
{
@@ -357,11 +357,11 @@ int MPIDI_CH3_InitCompleted(void)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
ep_tmp = ep;
ep = ep->next;
- MPIU_Free(ep_tmp);
+ MPL_free(ep_tmp);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_INITCOMPLETED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_INITCOMPLETED);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_isend.c b/src/mpid/ch3/channels/nemesis/src/ch3_isend.c
index 168f96f..0e40fd5 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_isend.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_isend.c
@@ -15,14 +15,14 @@
#define FUNCNAME MPIDI_CH3_iSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_iSend (MPIDI_VC_t *vc, MPID_Request *sreq, void * hdr, MPIDI_msg_sz_t hdr_sz)
+int MPIDI_CH3_iSend (MPIDI_VC_t *vc, MPIR_Request *sreq, void * hdr, intptr_t hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
int again = 0;
int in_cs = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISEND);
if (vc->state == MPIDI_VC_STATE_MORIBUND) {
sreq->status.MPI_ERROR = MPI_SUCCESS;
@@ -38,8 +38,8 @@ int MPIDI_CH3_iSend (MPIDI_VC_t *vc, MPID_Request *sreq, void * hdr, MPIDI_msg_s
goto fn_exit;
}
- /* MPIU_Assert(vc->ch.is_local); */
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ /* MPIR_Assert(vc->ch.is_local); */
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
/* This channel uses a fixed length header, the size of which
* is the maximum of all possible packet headers */
@@ -51,8 +51,8 @@ int MPIDI_CH3_iSend (MPIDI_VC_t *vc, MPID_Request *sreq, void * hdr, MPIDI_msg_s
if (MPIDI_CH3I_Sendq_empty(MPIDI_CH3I_shm_sendq))
{
- MPIU_Assert(hdr_sz <= INT_MAX);
- MPIU_DBG_MSG_D (CH3_CHANNEL, VERBOSE, "iSend %d", (int) hdr_sz);
+ MPIR_Assert(hdr_sz <= INT_MAX);
+ MPL_DBG_MSG_D (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iSend %d", (int) hdr_sz);
mpi_errno = MPID_nem_mpich_send_header (hdr, (int)hdr_sz, vc, &again);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
if (again)
@@ -61,12 +61,12 @@ int MPIDI_CH3_iSend (MPIDI_VC_t *vc, MPID_Request *sreq, void * hdr, MPIDI_msg_s
}
else
{
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = sreq->dev.OnDataAvail;
if (!reqFn)
{
- MPIU_Assert (MPIDI_Request_get_type (sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert (MPIDI_Request_get_type (sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -91,13 +91,13 @@ int MPIDI_CH3_iSend (MPIDI_VC_t *vc, MPID_Request *sreq, void * hdr, MPIDI_msg_s
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISEND);
return mpi_errno;
fn_fail:
goto fn_exit;
enqueue_it:
- MPIDI_DBG_PRINTF((55, FCNAME, "enqueuing"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, TERSE, "enqueuing");
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) hdr;
sreq->dev.iov[0].MPL_IOV_BUF = (char *) &sreq->dev.pending_pkt;
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c b/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c
index 71bf343..d87365f 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c
@@ -17,16 +17,16 @@ extern void *MPIDI_CH3_packet_buffer;
#define FUNCNAME MPIDI_CH3_iSendv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_iov)
+int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPIR_Request *sreq, MPL_IOV *iov, int n_iov)
{
int mpi_errno = MPI_SUCCESS;
int again = 0;
int j;
int in_cs = FALSE;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISENDV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISENDV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISENDV);
if (vc->state == MPIDI_VC_STATE_MORIBUND) {
sreq->status.MPI_ERROR = MPI_SUCCESS;
@@ -38,7 +38,7 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_io
if (vc_ch->iSendContig)
{
- MPIU_Assert(n_iov > 0);
+ MPIR_Assert(n_iov > 0);
switch (n_iov)
{
case 1:
@@ -54,9 +54,9 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_io
goto fn_exit;
}
- /*MPIU_Assert(vc_ch->is_local); */
- MPIU_Assert(n_iov <= MPL_IOV_LIMIT);
- MPIU_Assert(iov[0].MPL_IOV_LEN <= sizeof(MPIDI_CH3_Pkt_t));
+ /*MPIR_Assert(vc_ch->is_local); */
+ MPIR_Assert(n_iov <= MPL_IOV_LIMIT);
+ MPIR_Assert(iov[0].MPL_IOV_LEN <= sizeof(MPIDI_CH3_Pkt_t));
/* The channel uses a fixed length header, the size of which is
* the maximum of all possible packet headers */
@@ -71,7 +71,7 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_io
MPL_IOV *remaining_iov = iov;
int remaining_n_iov = n_iov;
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "iSendv");
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iSendv");
mpi_errno = MPID_nem_mpich_sendv_header (&remaining_iov, &remaining_n_iov,
sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz,
vc, &again);
@@ -96,41 +96,41 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_io
{
sreq->dev.iov[0] = remaining_iov[0];
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " out of cells. remaining iov:");
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, " %ld", (long int)sreq->dev.iov[0].MPL_IOV_LEN);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " out of cells. remaining iov:");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " %ld", (long int)sreq->dev.iov[0].MPL_IOV_LEN);
for (j = 1; j < remaining_n_iov; ++j)
{
sreq->dev.iov[j] = remaining_iov[j];
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, " %ld", (long int)remaining_iov[j].MPL_IOV_LEN);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " %ld", (long int)remaining_iov[j].MPL_IOV_LEN);
}
sreq->dev.iov_offset = 0;
sreq->dev.iov_count = remaining_n_iov;
sreq->ch.noncontig = FALSE;
sreq->ch.vc = vc;
MPIDI_CH3I_Sendq_enqueue(&MPIDI_CH3I_shm_sendq, sreq);
- MPIU_Assert (MPIDI_CH3I_shm_active_send == NULL);
+ MPIR_Assert (MPIDI_CH3I_shm_active_send == NULL);
if (remaining_iov != iov) {
/* headers are sent, mark current sreq as active_send req */
MPIDI_CH3I_shm_active_send = sreq;
}
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, " enqueued");
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, " enqueued");
}
else
{
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = sreq->dev.OnDataAvail;
if (!reqFn)
{
- MPIU_Assert (MPIDI_Request_get_type (sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert (MPIDI_Request_get_type (sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete (sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
else
{
@@ -145,13 +145,13 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_io
sreq->ch.noncontig = FALSE;
sreq->ch.vc = vc;
MPIDI_CH3I_Sendq_enqueue(&MPIDI_CH3I_shm_sendq, sreq);
- MPIU_Assert (MPIDI_CH3I_shm_active_send == NULL);
+ MPIR_Assert (MPIDI_CH3I_shm_active_send == NULL);
MPIDI_CH3I_shm_active_send = sreq;
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, ".... reloaded and enqueued");
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... reloaded and enqueued");
}
else
{
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
}
}
@@ -160,7 +160,7 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_io
{
int i;
- MPIDI_DBG_PRINTF((55, FCNAME, "enqueuing"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, TERSE, "enqueuing");
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) iov[0].MPL_IOV_BUF;
sreq->dev.iov[0].MPL_IOV_BUF = (char *) &sreq->dev.pending_pkt;
@@ -188,7 +188,7 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV *iov, int n_io
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISENDV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISENDV);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_istartmsg.c b/src/mpid/ch3/channels/nemesis/src/ch3_istartmsg.c
index 65d94af..40350cd 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_istartmsg.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_istartmsg.c
@@ -24,14 +24,14 @@
#define FUNCNAME MPIDI_CH3_iStartMsg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_iStartMsg (MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, MPID_Request **sreq_ptr)
+int MPIDI_CH3_iStartMsg (MPIDI_VC_t *vc, void *hdr, intptr_t hdr_sz, MPIR_Request **sreq_ptr)
{
int mpi_errno = MPI_SUCCESS;
int again = 0;
int in_cs = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSG);
MPIR_ERR_CHKANDJUMP1(vc->state == MPIDI_VC_STATE_MORIBUND, mpi_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
@@ -41,8 +41,8 @@ int MPIDI_CH3_iStartMsg (MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, MPID_
goto fn_exit;
}
- /*MPIU_Assert(vc->ch.is_local);*/
- MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ /*MPIR_Assert(vc->ch.is_local);*/
+ MPIR_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
/* This channel uses a fixed length header, the size of which is
* the maximum of all possible packet headers */
@@ -55,8 +55,8 @@ int MPIDI_CH3_iStartMsg (MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, MPID_
if (MPIDI_CH3I_Sendq_empty(MPIDI_CH3I_shm_sendq))
/* MT */
{
- MPIU_Assert(hdr_sz <= INT_MAX);
- MPIU_DBG_MSG_D (CH3_CHANNEL, VERBOSE, "iStartMsg %d", (int) hdr_sz);
+ MPIR_Assert(hdr_sz <= INT_MAX);
+ MPL_DBG_MSG_D (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iStartMsg %d", (int) hdr_sz);
mpi_errno = MPID_nem_mpich_send_header (hdr, (int)hdr_sz, vc, &again);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
if (again)
@@ -77,22 +77,22 @@ int MPIDI_CH3_iStartMsg (MPIDI_VC_t *vc, void *hdr, MPIDI_msg_sz_t hdr_sz, MPID_
if (in_cs) {
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSG);
return mpi_errno;
fn_fail:
goto fn_exit;
enqueue_it:
{
- MPID_Request * sreq = NULL;
+ MPIR_Request * sreq = NULL;
- MPIDI_DBG_PRINTF((55, FCNAME, "enqueuing"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, TERSE, "enqueuing");
/* create a request */
- sreq = MPID_Request_create();
- MPIU_Assert (sreq != NULL);
- MPIU_Object_set_ref (sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert (sreq != NULL);
+ MPIR_Object_set_ref (sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) hdr;
sreq->dev.iov[0].MPL_IOV_BUF = (char *) &sreq->dev.pending_pkt;
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c b/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c
index 71168ae..a21edd2 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c
@@ -30,22 +30,22 @@
#define FUNCNAME MPIDI_CH3_iStartMsgv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPL_IOV *iov, int n_iov, MPID_Request **sreq_ptr)
+int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPL_IOV *iov, int n_iov, MPIR_Request **sreq_ptr)
{
- MPID_Request * sreq = *sreq_ptr = NULL;
+ MPIR_Request * sreq = *sreq_ptr = NULL;
int mpi_errno = MPI_SUCCESS;
int in_cs = FALSE;
int again = 0;
int j;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
MPIR_ERR_CHKANDJUMP1(vc->state == MPIDI_VC_STATE_MORIBUND, mpi_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
if (vc->ch.iStartContigMsg)
{
- MPIU_Assert (n_iov > 0);
+ MPIR_Assert (n_iov > 0);
switch (n_iov)
{
case 1:
@@ -63,8 +63,8 @@ int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPL_IOV *iov, int n_iov, MPID_Request
goto fn_exit;
}
- MPIU_Assert (n_iov <= MPL_IOV_LIMIT);
- MPIU_Assert (iov[0].MPL_IOV_LEN <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert (n_iov <= MPL_IOV_LIMIT);
+ MPIR_Assert (iov[0].MPL_IOV_LEN <= sizeof(MPIDI_CH3_Pkt_t));
/* The channel uses a fixed length header, the size of which is
* the maximum of all possible packet headers */
@@ -80,47 +80,47 @@ int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPL_IOV *iov, int n_iov, MPID_Request
MPL_IOV *remaining_iov = iov;
int remaining_n_iov = n_iov;
- MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "iStartMsgv");
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, {
+ MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "iStartMsgv");
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, {
int total = 0;
int i;
for (i = 0; i < n_iov; ++i)
total += iov[i].MPL_IOV_LEN;
- MPIU_DBG_MSG_D (CH3_CHANNEL, VERBOSE, " + len=%d ", total);
+ MPL_DBG_MSG_D (MPIDI_CH3_DBG_CHANNEL, VERBOSE, " + len=%d ", total);
});
mpi_errno = MPID_nem_mpich_sendv_header (&remaining_iov, &remaining_n_iov,
NULL, 0, vc, &again);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
while (!again && (remaining_n_iov > 0))
{
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, {
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, {
int total = 0;
int i;
for (i = 0; i < remaining_n_iov; ++i)
total += remaining_iov[i].MPL_IOV_LEN;
- MPIU_DBG_MSG_D (CH3_CHANNEL, VERBOSE, " + len=%d ", total);
+ MPL_DBG_MSG_D (MPIDI_CH3_DBG_CHANNEL, VERBOSE, " + len=%d ", total);
});
mpi_errno = MPID_nem_mpich_sendv (&remaining_iov, &remaining_n_iov, vc, &again);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
}
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, {
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, {
int total = 0;
int i;
for (i = 0; i < remaining_n_iov; ++i)
total += remaining_iov[i].MPL_IOV_LEN;
- MPIU_DBG_MSG_D (CH3_CHANNEL, VERBOSE, " - len=%d ", total);
+ MPL_DBG_MSG_D (MPIDI_CH3_DBG_CHANNEL, VERBOSE, " - len=%d ", total);
});
if (again)
{
/* Create a new request and save remaining portions of the
* iov in it. */
- sreq = MPID_Request_create();
- MPIU_Assert(sreq != NULL);
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(sreq != NULL);
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
for (j = 0; j < remaining_n_iov; ++j)
{
sreq->dev.iov[j] = remaining_iov[j];
@@ -138,7 +138,7 @@ int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPL_IOV *iov, int n_iov, MPID_Request
sreq->dev.iov[0].MPL_IOV_LEN = iov[0].MPL_IOV_LEN;
}
MPIDI_CH3I_Sendq_enqueue(&MPIDI_CH3I_shm_sendq, sreq);
- MPIU_Assert (MPIDI_CH3I_shm_active_send == NULL);
+ MPIR_Assert (MPIDI_CH3I_shm_active_send == NULL);
MPIDI_CH3I_shm_active_send = sreq;
}
}
@@ -146,12 +146,12 @@ int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPL_IOV *iov, int n_iov, MPID_Request
{
int i;
- MPIDI_DBG_PRINTF((55, FCNAME, "request enqueued"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, TERSE, "request enqueued");
/* create a request */
- sreq = MPID_Request_create();
- MPIU_Assert(sreq != NULL);
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(sreq != NULL);
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) iov[0].MPL_IOV_BUF;
sreq->dev.iov[0].MPL_IOV_BUF = (char *) &sreq->dev.pending_pkt;
@@ -186,7 +186,7 @@ int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPL_IOV *iov, int n_iov, MPID_Request
if (in_cs) {
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_progress.c b/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
index 245fe61..927fc70 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
@@ -19,7 +19,7 @@ typedef struct vc_term_element
{
struct vc_term_element *next;
MPIDI_VC_t *vc;
- MPID_Request *req;
+ MPIR_Request *req;
} vc_term_element_t;
static struct { vc_term_element_t *head, *tail; } vc_term_queue;
@@ -39,10 +39,10 @@ static MPIDI_CH3_PktHandler_Fcn *pktArray[PKTARRAY_SIZE];
#endif
#ifdef BY_PASS_PROGRESS
-extern MPID_Request ** const MPID_Recvq_posted_head_ptr;
-extern MPID_Request ** const MPID_Recvq_unexpected_head_ptr;
-extern MPID_Request ** const MPID_Recvq_posted_tail_ptr;
-extern MPID_Request ** const MPID_Recvq_unexpected_tail_ptr;
+extern MPIR_Request ** const MPID_Recvq_posted_head_ptr;
+extern MPIR_Request ** const MPID_Recvq_unexpected_head_ptr;
+extern MPIR_Request ** const MPID_Recvq_posted_tail_ptr;
+extern MPIR_Request ** const MPID_Recvq_unexpected_tail_ptr;
#endif
OPA_int_t MPIDI_CH3I_progress_completion_count = OPA_INT_T_INITIALIZER(0);
@@ -64,9 +64,9 @@ static volatile int sigusr1_count = 0;
static int my_sigusr1_count = 0;
MPIDI_CH3I_shm_sendq_t MPIDI_CH3I_shm_sendq = {NULL, NULL};
-struct MPID_Request *MPIDI_CH3I_shm_active_send = NULL;
+struct MPIR_Request *MPIDI_CH3I_shm_active_send = NULL;
-static int pkt_NETMOD_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
+static int pkt_NETMOD_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp);
static int shm_connection_terminated(MPIDI_VC_t * vc);
static int check_terminating_vcs(void);
@@ -78,8 +78,8 @@ int MPID_nem_local_lmt_pending = FALSE;
typedef struct qn_ent
{
struct qn_ent *next;
- void (*enqueue_fn)(MPID_Request *rreq);
- int (*dequeue_fn)(MPID_Request *rreq);
+ void (*enqueue_fn)(MPIR_Request *rreq);
+ int (*dequeue_fn)(MPIR_Request *rreq);
} qn_ent_t;
static qn_ent_t *qn_head = NULL;
@@ -112,21 +112,21 @@ static void sigusr1_handler(int sig)
static int check_terminating_vcs(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_CHECK_TERMINATING_VCS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CHECK_TERMINATING_VCS);
- MPIDI_FUNC_ENTER(MPID_STATE_CHECK_TERMINATING_VCS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CHECK_TERMINATING_VCS);
- while (!TERMQ_EMPTY() && MPID_Request_is_complete(TERMQ_HEAD()->req)) {
+ while (!TERMQ_EMPTY() && MPIR_Request_is_complete(TERMQ_HEAD()->req)) {
vc_term_element_t *ep;
TERMQ_DEQUEUE(&ep);
- MPID_Request_release(ep->req);
+ MPIR_Request_free(ep->req);
mpi_errno = shm_connection_terminated(ep->vc);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Free(ep);
+ MPL_free(ep);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CHECK_TERMINATING_VCS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CHECK_TERMINATING_VCS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -145,20 +145,20 @@ int MPIDI_CH3I_Shm_send_progress(void)
int mpi_errno = MPI_SUCCESS;
MPL_IOV *iov;
int n_iov;
- MPID_Request *sreq;
+ MPIR_Request *sreq;
int again = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS);
sreq = MPIDI_CH3I_shm_active_send;
- MPIU_DBG_STMT(CH3_CHANNEL, VERBOSE, {if (sreq) MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "Send: cont sreq");});
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, {if (sreq) MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Send: cont sreq");});
if (sreq)
{
if (!sreq->ch.noncontig)
{
- MPIU_Assert(sreq->dev.iov_count > 0 && sreq->dev.iov[sreq->dev.iov_offset].MPL_IOV_LEN > 0);
+ MPIR_Assert(sreq->dev.iov_count > 0 && sreq->dev.iov[sreq->dev.iov_offset].MPL_IOV_LEN > 0);
iov = &sreq->dev.iov[sreq->dev.iov_offset];
n_iov = sreq->dev.iov_count;
@@ -195,11 +195,11 @@ int MPIDI_CH3I_Shm_send_progress(void)
else
{
sreq = MPIDI_CH3I_Sendq_head(MPIDI_CH3I_shm_sendq);
- MPIU_DBG_STMT (CH3_CHANNEL, VERBOSE, {if (sreq) MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "Send: new sreq ");});
+ MPL_DBG_STMT (MPIDI_CH3_DBG_CHANNEL, VERBOSE, {if (sreq) MPL_DBG_MSG (MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Send: new sreq ");});
if (!sreq->ch.noncontig)
{
- MPIU_Assert(sreq->dev.iov_count > 0 && sreq->dev.iov[sreq->dev.iov_offset].MPL_IOV_LEN > 0);
+ MPIR_Assert(sreq->dev.iov_count > 0 && sreq->dev.iov[sreq->dev.iov_offset].MPL_IOV_LEN > 0);
iov = &sreq->dev.iov[sreq->dev.iov_offset];
n_iov = sreq->dev.iov_count;
@@ -247,14 +247,14 @@ int MPIDI_CH3I_Shm_send_progress(void)
}
/* finished sending sreq */
- MPIU_Assert(!again);
+ MPIR_Assert(!again);
if (!sreq->dev.OnDataAvail)
{
/* MT FIXME-N1 race under per-object, harmless to disable here but
* its a symptom of a bigger problem... */
-#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT))
- MPIU_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ))
+ MPIR_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
#endif
mpi_errno = MPID_Request_complete(sreq);
@@ -265,7 +265,7 @@ int MPIDI_CH3I_Shm_send_progress(void)
/* MT - clear the current active send before dequeuing/destroying the current request */
MPIDI_CH3I_shm_active_send = NULL;
MPIDI_CH3I_Sendq_dequeue(&MPIDI_CH3I_shm_sendq, &sreq);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
mpi_errno = check_terminating_vcs();
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -279,14 +279,14 @@ int MPIDI_CH3I_Shm_send_progress(void)
{
MPIDI_CH3I_shm_active_send = NULL;
MPIDI_CH3I_Sendq_dequeue(&MPIDI_CH3I_shm_sendq, &sreq);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
mpi_errno = check_terminating_vcs();
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -300,9 +300,9 @@ int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
@@ -323,7 +323,7 @@ int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id)
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
return mpi_errno;
fn_fail:
@@ -337,19 +337,19 @@ int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id)
int MPIDI_CH3I_Progress_deregister_hook(int id)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS && progress_hooks[id].func_ptr != NULL);
+ MPIR_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS && progress_hooks[id].func_ptr != NULL);
progress_hooks[id].func_ptr = NULL;
progress_hooks[id].active = FALSE;
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
return mpi_errno;
fn_fail:
@@ -364,18 +364,18 @@ int MPIDI_CH3I_Progress_deregister_hook(int id)
int MPIDI_CH3I_Progress_activate_hook(int id)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
+ MPIR_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
progress_hooks[id].active == FALSE && progress_hooks[id].func_ptr != NULL);
progress_hooks[id].active = TRUE;
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
return mpi_errno;
fn_fail:
@@ -390,18 +390,18 @@ int MPIDI_CH3I_Progress_activate_hook(int id)
int MPIDI_CH3I_Progress_deactivate_hook(int id)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
+ MPIR_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
progress_hooks[id].active == TRUE && progress_hooks[id].func_ptr != NULL);
progress_hooks[id].active = FALSE;
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
return mpi_errno;
fn_fail:
@@ -419,15 +419,15 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
{
int mpi_errno = MPI_SUCCESS;
int made_progress = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
/* sanity: if this doesn't hold, we can't track our local view of completion safely */
if (is_blocking) {
- MPIU_Assert(progress_state != NULL);
+ MPIR_Assert(progress_state != NULL);
}
if (sigusr1_count > my_sigusr1_count) {
@@ -454,7 +454,7 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
/* For threaded mode, if another thread is in the progress engine, we
* don't enter the progress engine */
#ifdef MPICH_IS_THREADED
- MPID_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
while (MPIDI_CH3I_progress_blocked == TRUE)
{
@@ -482,12 +482,12 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
}
}
}
- MPID_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
do
{
- MPID_Request *rreq;
+ MPIR_Request *rreq;
MPID_nem_cell_ptr_t cell;
int in_fbox = 0;
MPIDI_VC_t *vc;
@@ -513,32 +513,37 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
if (cell)
{
- char *cell_buf = (char *)cell->pkt.mpich.p.payload;
- MPIDI_msg_sz_t payload_len = cell->pkt.mpich.datalen;
+ char *cell_buf = (char *)cell->pkt.p.payload;
+ intptr_t payload_len = cell->pkt.header.datalen;
MPIDI_CH3_Pkt_t *pkt = (MPIDI_CH3_Pkt_t *)cell_buf;
/* Empty packets are not allowed */
- MPIU_Assert(payload_len >= 0);
+ MPIR_Assert(payload_len >= 0);
if (in_fbox)
{
MPIDI_CH3I_VC *vc_ch;
- MPIDI_msg_sz_t buflen = payload_len;
+ intptr_t buflen;
/* This packet must be the first packet of a new message */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Recv pkt from fbox");
- MPIU_Assert(payload_len >= sizeof (MPIDI_CH3_Pkt_t));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Recv pkt from fbox");
+ MPIR_Assert(payload_len >= sizeof (MPIDI_CH3_Pkt_t));
+
+ /* deduct packet header */
+ payload_len -= sizeof(MPIDI_CH3_Pkt_t);
+ cell_buf += sizeof(MPIDI_CH3_Pkt_t);
+ buflen = payload_len;
MPIDI_PG_Get_vc_set_active(MPIDI_Process.my_pg, MPID_NEM_FBOX_SOURCE(cell), &vc);
- MPIU_Assert(vc->ch.recv_active == NULL &&
+ MPIR_Assert(vc->ch.recv_active == NULL &&
vc->ch.pending_pkt_len == 0);
vc_ch = &vc->ch;
/* invalid pkt data will result in unpredictable behavior */
- MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
+ MPIR_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
- mpi_errno = pktArray[pkt->type](vc, pkt, &buflen, &rreq);
+ mpi_errno = pktArray[pkt->type](vc, pkt, cell_buf, &buflen, &rreq);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (!rreq)
@@ -557,13 +562,13 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
MPID_nem_mpich_release_fbox(cell);
/* the whole message should have been handled */
- MPIU_Assert(!vc_ch->recv_active);
+ MPIR_Assert(!vc_ch->recv_active);
break; /* break out of recv progress block */
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Recv pkt from queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Recv pkt from queue");
MPIDI_PG_Get_vc_set_active(MPIDI_Process.my_pg, MPID_NEM_CELL_SOURCE(cell), &vc);
@@ -593,7 +598,7 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
if (progress_hooks[i].active == TRUE) {
- MPIU_Assert(progress_hooks[i].func_ptr != NULL);
+ MPIR_Assert(progress_hooks[i].func_ptr != NULL);
mpi_errno = progress_hooks[i].func_ptr(&made_progress);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (made_progress)
@@ -615,7 +620,7 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
}
#ifdef MPICH_IS_THREADED
- MPID_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
if (is_blocking) {
MPIDI_CH3I_progress_blocked = TRUE;
@@ -635,7 +640,7 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
MPIDI_CH3I_progress_wakeup_signalled = FALSE;
}
}
- MPID_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#else
MPIU_Busy_wait();
#endif
@@ -644,19 +649,19 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
#ifdef MPICH_IS_THREADED
- MPID_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
if (is_blocking)
{
MPIDI_CH3I_Progress_continue(0/*unused*/);
}
}
- MPID_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -672,17 +677,17 @@ int MPIDI_CH3I_Progress (MPID_Progress_state *progress_state, int is_blocking)
static int MPIDI_CH3I_Progress_delay(unsigned int completion_count)
{
int mpi_errno = MPI_SUCCESS, err;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DELAY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DELAY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DELAY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DELAY);
/* FIXME should be appropriately abstracted somehow */
-# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
+# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
{
MPID_Thread_cond_wait(&MPIDI_CH3I_progress_completion_cond, &MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX/*MPIDCOMM*/, &err);
}
# endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DELAY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DELAY);
return mpi_errno;
}
/* end MPIDI_CH3I_Progress_delay() */
@@ -695,18 +700,18 @@ static int MPIDI_CH3I_Progress_delay(unsigned int completion_count)
static int MPIDI_CH3I_Progress_continue(unsigned int completion_count/*unused*/)
{
int mpi_errno = MPI_SUCCESS,err;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_CONTINUE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_CONTINUE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_CONTINUE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_CONTINUE);
/* FIXME should be appropriately abstracted somehow */
-# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
+# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
{
/* we currently hold the MPIDCOMM CS */
MPID_Thread_cond_broadcast(&MPIDI_CH3I_progress_completion_cond, &err);
}
# endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_CONTINUE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_CONTINUE);
return mpi_errno;
}
/* end MPIDI_CH3I_Progress_continue() */
@@ -718,12 +723,12 @@ static int MPIDI_CH3I_Progress_continue(unsigned int completion_count/*unused*/)
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIDI_CH3I_Progress_wakeup(void)
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP);
/* no processes sleep in nemesis progress */
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP);
return;
}
#endif /* MPICH_IS_THREADED */
@@ -732,15 +737,15 @@ void MPIDI_CH3I_Progress_wakeup(void)
#define FUNCNAME MPID_nem_handle_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
+int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, intptr_t buflen)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *rreq = NULL;
+ MPIR_Request *rreq = NULL;
int complete;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_HANDLE_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_HANDLE_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_HANDLE_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_HANDLE_PKT);
do
{
@@ -749,19 +754,36 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
/* handle fast-path first: received a new whole message */
do
{
- MPIDI_msg_sz_t len = buflen;
+ intptr_t len;
MPIDI_CH3_Pkt_t *pkt = (MPIDI_CH3_Pkt_t *)buf;
+#ifdef NEEDS_STRICT_ALIGNMENT
+ MPIDI_CH3_Pkt_t aligned_buf;
+#endif
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "received new message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "received new message");
+
+#ifdef NEEDS_STRICT_ALIGNMENT
+ /* Copy packet header to temporary buffer to ensure aligned access.
+ * Note that we intentionally perform the extra copy on all platforms
+ * that require strict alignment without checking whether the original
+ * buffer is aligned. This is because we cannot find a good way to
+ * get correct alignment for general structure on all platforms. */
+ MPIR_Memcpy(&aligned_buf, buf, sizeof(MPIDI_CH3_Pkt_t));
+ pkt = &aligned_buf;
+#endif
+ /* deduct packet header */
+ buflen -= sizeof(MPIDI_CH3_Pkt_t);
+ buf += sizeof(MPIDI_CH3_Pkt_t);
+ len = buflen;
/* invalid pkt data will result in unpredictable behavior */
- MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
+ MPIR_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
- mpi_errno = pktArray[pkt->type](vc, pkt, &len, &rreq);
+ mpi_errno = pktArray[pkt->type](vc, pkt, buf, &len, &rreq);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
buflen -= len;
buf += len;
- MPIU_DBG_STMT(CH3_CHANNEL, VERBOSE, if (!rreq) MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "...completed immediately"));
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, if (!rreq) MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "...completed immediately"));
}
while (!rreq && buflen >= sizeof(MPIDI_CH3_Pkt_t));
@@ -774,47 +796,49 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
}
else if (vc_ch->recv_active)
{
- MPIU_Assert(vc_ch->pending_pkt_len == 0);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "continuing recv");
+ MPIR_Assert(vc_ch->pending_pkt_len == 0);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "continuing recv");
rreq = vc_ch->recv_active;
}
else
{
/* collect header fragments in vc's pending_pkt */
- MPIDI_msg_sz_t copylen;
- MPIDI_msg_sz_t pktlen;
+ intptr_t copylen;
+ intptr_t datalen = 0;
MPIDI_CH3_Pkt_t *pkt = (MPIDI_CH3_Pkt_t *)vc_ch->pending_pkt;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "received header fragment");
+ /* pending_pkt is allocated by malloc which guarantees the allocated
+ * space is suitably aligned for storage of any type of object. */
+
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "received header fragment");
copylen = ((vc_ch->pending_pkt_len + buflen <= sizeof(MPIDI_CH3_Pkt_t))
? buflen
: sizeof(MPIDI_CH3_Pkt_t) - vc_ch->pending_pkt_len);
- MPIU_Memcpy((char *)vc_ch->pending_pkt + vc_ch->pending_pkt_len, buf, copylen);
+ MPIR_Memcpy((char *)vc_ch->pending_pkt + vc_ch->pending_pkt_len, buf, copylen);
vc_ch->pending_pkt_len += copylen;
if (vc_ch->pending_pkt_len < sizeof(MPIDI_CH3_Pkt_t))
goto fn_exit;
/* we have a whole header */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " completed header");
- MPIU_Assert(vc_ch->pending_pkt_len == sizeof(MPIDI_CH3_Pkt_t));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " completed header");
+ MPIR_Assert(vc_ch->pending_pkt_len == sizeof(MPIDI_CH3_Pkt_t));
buflen -= copylen;
buf += copylen;
/* invalid pkt data will result in unpredictable behavior */
- MPIU_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
+ MPIR_Assert(pkt->type >= 0 && pkt->type < MPIDI_CH3_PKT_END_ALL);
- pktlen = sizeof(MPIDI_CH3_Pkt_t);
- mpi_errno = pktArray[pkt->type](vc, pkt, &pktlen, &rreq);
+ mpi_errno = pktArray[pkt->type](vc, pkt, NULL, &datalen, &rreq);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(pktlen == sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(datalen == 0);
vc_ch->pending_pkt_len = 0;
if (!rreq)
{
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "...completed immediately");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "...completed immediately");
continue;
}
/* Channel fields don't get initialized on request creation, init them here */
@@ -822,10 +846,10 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
}
/* copy data into user buffer described by iov in rreq */
- MPIU_Assert(rreq);
- MPIU_Assert(rreq->dev.iov_count > 0 && rreq->dev.iov[rreq->dev.iov_offset].MPL_IOV_LEN > 0);
+ MPIR_Assert(rreq);
+ MPIR_Assert(rreq->dev.iov_count > 0 && rreq->dev.iov[rreq->dev.iov_offset].MPL_IOV_LEN > 0);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, " copying into user buffer from IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " copying into user buffer from IOV");
if (buflen == 0)
{
@@ -846,9 +870,9 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
while (n_iov && buflen >= iov->MPL_IOV_LEN)
{
size_t iov_len = iov->MPL_IOV_LEN;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, " %d", (int)iov_len);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " %d", (int)iov_len);
if (rreq->dev.drop_data == FALSE) {
- MPIU_Memcpy (iov->MPL_IOV_BUF, buf, iov_len);
+ MPIR_Memcpy (iov->MPL_IOV_BUF, buf, iov_len);
}
buflen -= iov_len;
@@ -861,9 +885,9 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
{
if (buflen > 0)
{
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, " " MPIDI_MSG_SZ_FMT, buflen);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, " %" PRIdPTR, buflen);
if (rreq->dev.drop_data == FALSE) {
- MPIU_Memcpy (iov->MPL_IOV_BUF, buf, buflen);
+ MPIR_Memcpy (iov->MPL_IOV_BUF, buf, buflen);
}
iov->MPL_IOV_BUF = (void *)((char *)iov->MPL_IOV_BUF + buflen);
iov->MPL_IOV_LEN -= buflen;
@@ -873,18 +897,18 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
rreq->dev.iov_offset = iov - rreq->dev.iov;
rreq->dev.iov_count = n_iov;
vc_ch->recv_active = rreq;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, " remaining: " MPIDI_MSG_SZ_FMT " bytes + %d iov entries", iov->MPL_IOV_LEN, n_iov));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, " remaining: %" PRIdPTR " bytes + %d iov entries", iov->MPL_IOV_LEN, n_iov));
}
else
{
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = rreq->dev.OnDataAvail;
if (!reqFn)
{
/* MT FIXME-N1 */
-#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT))
- MPIU_Assert(MPIDI_Request_get_type(rreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ))
+ MPIR_Assert(MPIDI_Request_get_type(rreq) != MPIDI_REQUEST_TYPE_GET_RESP);
#endif
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
@@ -902,13 +926,13 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
if (!complete)
{
rreq->dev.iov_offset = 0;
- MPIU_Assert(rreq->dev.iov_count > 0 && rreq->dev.iov[rreq->dev.iov_offset].MPL_IOV_LEN > 0);
+ MPIR_Assert(rreq->dev.iov_count > 0 && rreq->dev.iov[rreq->dev.iov_offset].MPL_IOV_LEN > 0);
vc_ch->recv_active = rreq;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "...not complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "...not complete");
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "...complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "...complete");
vc_ch->recv_active = NULL;
}
}
@@ -917,7 +941,7 @@ int MPID_nem_handle_pkt(MPIDI_VC_t *vc, char *buf, MPIDI_msg_sz_t buflen)
while (buflen);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_HANDLE_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_HANDLE_PKT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -943,20 +967,20 @@ int MPIDI_CH3I_Progress_init(void)
{
int i;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
- MPID_THREAD_CHECK_BEGIN
+ MPIR_THREAD_CHECK_BEGIN;
/* FIXME should be appropriately abstracted somehow */
-# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
+# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
{
int err;
MPID_Thread_cond_create(&MPIDI_CH3I_progress_completion_cond, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
}
# endif
- MPID_THREAD_CHECK_END
+ MPIR_THREAD_CHECK_END;
MPIDI_CH3I_shm_sendq.head = NULL;
MPIDI_CH3I_shm_sendq.tail = NULL;
@@ -985,7 +1009,7 @@ int MPIDI_CH3I_Progress_init(void)
#ifdef HAVE_SIGNAL
/* install signal handler for process failure notifications from hydra */
prev_sighandler = signal(SIGUSR1, sigusr1_handler);
- MPIR_ERR_CHKANDJUMP1(prev_sighandler == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(prev_sighandler == SIG_ERR, mpi_errno, MPI_ERR_OTHER, "**signal", "**signal %s", MPIR_Strerror(errno));
if (prev_sighandler == SIG_IGN || prev_sighandler == SIG_DFL)
prev_sighandler = NULL;
#endif
@@ -997,7 +1021,7 @@ int MPIDI_CH3I_Progress_init(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1011,18 +1035,18 @@ int MPIDI_CH3I_Progress_finalize(void)
{
int mpi_errno = MPI_SUCCESS;
qn_ent_t *ent;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
while(qn_head) {
ent = qn_head->next;
- MPIU_Free(qn_head);
+ MPL_free(qn_head);
qn_head = ent;
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1036,26 +1060,26 @@ static int shm_connection_terminated(MPIDI_VC_t * vc)
{
/* This function is called after all sends have completed */
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_SHM_CONNECTION_TERMINATED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SHM_CONNECTION_TERMINATED);
- MPIDI_FUNC_ENTER(MPID_STATE_SHM_CONNECTION_TERMINATED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SHM_CONNECTION_TERMINATED);
if (vc->ch.lmt_vc_terminated) {
mpi_errno = vc->ch.lmt_vc_terminated(vc);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- mpi_errno = MPIU_SHMW_Hnd_finalize(&(vc->ch.lmt_copy_buf_handle));
+ mpi_errno = MPL_shm_hnd_finalize(&(vc->ch.lmt_copy_buf_handle));
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
- mpi_errno = MPIU_SHMW_Hnd_finalize(&(vc->ch.lmt_recv_copy_buf_handle));
+ mpi_errno = MPL_shm_hnd_finalize(&(vc->ch.lmt_recv_copy_buf_handle));
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED);
if(mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_DBG_MSG_D(CH3_DISCONNECT, TYPICAL, "Terminated VC %d", vc->pg_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, "Terminated VC %d", vc->pg_rank);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SHM_CONNECTION_TERMINATED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SHM_CONNECTION_TERMINATED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1069,12 +1093,12 @@ static int shm_connection_terminated(MPIDI_VC_t * vc)
int MPIDI_CH3_Connection_terminate(MPIDI_VC_t * vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_CONNECTION_TERMINATE);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_CONNECTION_TERMINATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_CONNECTION_TERMINATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_CONNECTION_TERMINATE);
- MPIU_DBG_MSG_D(CH3_DISCONNECT, TYPICAL, "Terminating VC %d", vc->pg_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, "Terminating VC %d", vc->pg_rank);
/* if this is already closed, exit */
if (vc->state == MPIDI_VC_STATE_MORIBUND ||
@@ -1082,13 +1106,13 @@ int MPIDI_CH3_Connection_terminate(MPIDI_VC_t * vc)
goto fn_exit;
if (vc->ch.is_local) {
- MPIU_DBG_MSG(CH3_DISCONNECT, TYPICAL, "VC is local");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, "VC is local");
if (vc->state != MPIDI_VC_STATE_CLOSED) {
/* VC is terminated as a result of a fault. Complete
outstanding sends with an error and terminate
connection immediately. */
- MPIU_DBG_MSG(CH3_DISCONNECT, TYPICAL, "VC terminated due to fault");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, "VC terminated due to fault");
mpi_errno = MPIDI_CH3I_Complete_sendq_with_error(vc);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -1101,7 +1125,7 @@ int MPIDI_CH3_Connection_terminate(MPIDI_VC_t * vc)
if (MPIDI_CH3I_Sendq_empty(MPIDI_CH3I_shm_sendq)) {
/* The sendq is empty, so we can immediately terminate
the connection. */
- MPIU_DBG_MSG(CH3_DISCONNECT, TYPICAL, "Shm send queue empty, terminating immediately");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, "Shm send queue empty, terminating immediately");
mpi_errno = shm_connection_terminated(vc);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
} else {
@@ -1114,8 +1138,8 @@ int MPIDI_CH3_Connection_terminate(MPIDI_VC_t * vc)
VC anymore) we know that all sends on this VC must
have completed. */
vc_term_element_t *ep;
- MPIU_DBG_MSG(CH3_DISCONNECT, TYPICAL, "Shm send queue not empty, waiting to terminate");
- MPIU_CHKPMEM_MALLOC(ep, vc_term_element_t *, sizeof(vc_term_element_t), mpi_errno, "vc_term_element");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, "Shm send queue not empty, waiting to terminate");
+ MPIR_CHKPMEM_MALLOC(ep, vc_term_element_t *, sizeof(vc_term_element_t), mpi_errno, "vc_term_element");
ep->vc = vc;
ep->req = MPIDI_CH3I_shm_sendq.tail;
MPIR_Request_add_ref(ep->req); /* make sure this doesn't get released before we can check it */
@@ -1124,17 +1148,17 @@ int MPIDI_CH3_Connection_terminate(MPIDI_VC_t * vc)
}
} else {
- MPIU_DBG_MSG(CH3_DISCONNECT, TYPICAL, "VC is remote");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, "VC is remote");
mpi_errno = MPID_nem_netmod_func->vc_terminate(vc);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_CONNECTION_TERMINATE);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_CONNECTION_TERMINATE);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
/* end MPIDI_CH3_Connection_terminate() */
@@ -1146,16 +1170,16 @@ int MPIDI_CH3_Connection_terminate(MPIDI_VC_t * vc)
int MPIDI_CH3I_Complete_sendq_with_error(MPIDI_VC_t * vc)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *req, *prev;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMPLETE_SENDQ_WITH_ERROR);
+ MPIR_Request *req, *prev;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMPLETE_SENDQ_WITH_ERROR);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_COMPLETE_SENDQ_WITH_ERROR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_COMPLETE_SENDQ_WITH_ERROR);
req = MPIDI_CH3I_shm_sendq.head;
prev = NULL;
while (req) {
if (req->ch.vc == vc) {
- MPID_Request *next = req->dev.next;
+ MPIR_Request *next = req->dev.next;
if (prev)
prev->dev.next = next;
else
@@ -1166,7 +1190,7 @@ int MPIDI_CH3I_Complete_sendq_with_error(MPIDI_VC_t * vc)
req->status.MPI_ERROR = MPI_SUCCESS;
MPIR_ERR_SET1(req->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
- MPID_Request_release(req); /* ref count was incremented when added to queue */
+ MPIR_Request_free(req); /* ref count was incremented when added to queue */
mpi_errno = MPID_Request_complete(req);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -1179,7 +1203,7 @@ int MPIDI_CH3I_Complete_sendq_with_error(MPIDI_VC_t * vc)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMPLETE_SENDQ_WITH_ERROR);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_COMPLETE_SENDQ_WITH_ERROR);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1191,21 +1215,21 @@ int MPIDI_CH3I_Complete_sendq_with_error(MPIDI_VC_t * vc)
#define FUNCNAME pkt_NETMOD_handler
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int pkt_NETMOD_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+static int pkt_NETMOD_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_pkt_netmod_t * const netmod_pkt = (MPID_nem_pkt_netmod_t *)pkt;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_PKT_NETMOD_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PKT_NETMOD_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_PKT_NETMOD_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PKT_NETMOD_HANDLER);
- MPIU_Assert_fmt_msg(vc_ch->pkt_handler && netmod_pkt->subtype < vc_ch->num_pkt_handlers, ("no handler defined for netmod-local packet"));
+ MPIR_Assert_fmt_msg(vc_ch->pkt_handler && netmod_pkt->subtype < vc_ch->num_pkt_handlers, ("no handler defined for netmod-local packet"));
- mpi_errno = vc_ch->pkt_handler[netmod_pkt->subtype](vc, pkt, buflen, rreqp);
+ mpi_errno = vc_ch->pkt_handler[netmod_pkt->subtype](vc, pkt, data, buflen, rreqp);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_PKT_NETMOD_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PKT_NETMOD_HANDLER);
return mpi_errno;
}
@@ -1214,13 +1238,13 @@ fn_exit:
#define FUNCNAME MPIDI_CH3I_Register_anysource_notification
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Register_anysource_notification(void (*enqueue_fn)(MPID_Request *rreq), int (*dequeue_fn)(MPID_Request *rreq))
+int MPIDI_CH3I_Register_anysource_notification(void (*enqueue_fn)(MPIR_Request *rreq), int (*dequeue_fn)(MPIR_Request *rreq))
{
int mpi_errno = MPI_SUCCESS;
qn_ent_t *ent;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
- MPIU_CHKPMEM_MALLOC(ent, qn_ent_t *, sizeof(qn_ent_t), mpi_errno, "queue entry");
+ MPIR_CHKPMEM_MALLOC(ent, qn_ent_t *, sizeof(qn_ent_t), mpi_errno, "queue entry");
ent->enqueue_fn = enqueue_fn;
ent->dequeue_fn = dequeue_fn;
@@ -1228,10 +1252,10 @@ int MPIDI_CH3I_Register_anysource_notification(void (*enqueue_fn)(MPID_Request *
qn_head = ent;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -1239,7 +1263,7 @@ int MPIDI_CH3I_Register_anysource_notification(void (*enqueue_fn)(MPID_Request *
#define FUNCNAME MPIDI_CH3I_Anysource_posted
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static void anysource_posted(MPID_Request *rreq)
+static void anysource_posted(MPIR_Request *rreq)
{
qn_ent_t *ent = qn_head;
@@ -1258,7 +1282,7 @@ static void anysource_posted(MPID_Request *rreq)
#define FUNCNAME MPIDI_CH3I_Anysource_matched
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int anysource_matched(MPID_Request *rreq)
+static int anysource_matched(MPIR_Request *rreq)
{
int matched = FALSE;
qn_ent_t *ent = qn_head;
@@ -1272,10 +1296,10 @@ static int anysource_matched(MPID_Request *rreq)
m = ent->dequeue_fn(rreq);
/* this is a crude check to check if the req has been
- matched by more than one netmod. When MPIU_Assert() is
+ matched by more than one netmod. When MPIR_Assert() is
defined to empty, the extra matched=m is optimized
away. */
- MPIU_Assert(!m || !matched);
+ MPIR_Assert(!m || !matched);
matched = m;
}
ent = ent->next;
@@ -1288,11 +1312,11 @@ static int anysource_matched(MPID_Request *rreq)
#define FUNCNAME MPIDI_CH3I_Posted_recv_enqueued
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIDI_CH3I_Posted_recv_enqueued(MPID_Request *rreq)
+void MPIDI_CH3I_Posted_recv_enqueued(MPIR_Request *rreq)
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED);
/* MT FIXME acquiring MPIDCOMM here violates lock ordering rules,
* easily causes deadlock */
@@ -1324,11 +1348,11 @@ void MPIDI_CH3I_Posted_recv_enqueued(MPID_Request *rreq)
* ways to do this that don't require a hook on every request post, but
* instead do some sort of caching or something analogous to branch
* prediction. */
-#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT))
+#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ))
/* enqueue fastbox */
/* don't enqueue a fastbox for yourself */
- MPIU_Assert(rreq->comm != NULL);
+ MPIR_Assert(rreq->comm != NULL);
if (rreq->dev.match.parts.rank == rreq->comm->rank)
goto fn_exit;
@@ -1346,7 +1370,7 @@ void MPIDI_CH3I_Posted_recv_enqueued(MPID_Request *rreq)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED);
}
/* returns non-zero when req has been matched by channel */
@@ -1354,14 +1378,14 @@ void MPIDI_CH3I_Posted_recv_enqueued(MPID_Request *rreq)
#define FUNCNAME MPIDI_CH3I_Posted_recv_dequeued
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Posted_recv_dequeued(MPID_Request *rreq)
+int MPIDI_CH3I_Posted_recv_dequeued(MPIR_Request *rreq)
{
int local_rank = -1;
MPIDI_VC_t *vc;
int matched = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED);
if (rreq->dev.match.parts.rank == MPI_ANY_SOURCE)
{
@@ -1370,7 +1394,7 @@ int MPIDI_CH3I_Posted_recv_dequeued(MPID_Request *rreq)
/* MT FIXME we unfortunately must disable this optimization for now in
* per_object mode. There are possibly other ways to synchronize the
* fboxes that won't cause lock-ordering deadlocks */
-#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT))
+#if !(defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ))
else
{
if (rreq->dev.match.parts.rank == rreq->comm->rank)
@@ -1378,7 +1402,7 @@ int MPIDI_CH3I_Posted_recv_dequeued(MPID_Request *rreq)
/* don't use MPID_NEM_IS_LOCAL, it doesn't handle dynamic processes */
MPIDI_Comm_get_vc(rreq->comm, rreq->dev.match.parts.rank, &vc);
- MPIU_Assert(vc != NULL);
+ MPIR_Assert(vc != NULL);
if (!vc->ch.is_local)
goto fn_exit;
@@ -1392,7 +1416,7 @@ int MPIDI_CH3I_Posted_recv_dequeued(MPID_Request *rreq)
#endif
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED);
return matched;
}
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c b/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c
index 8d03bd2..28086e1 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c
@@ -12,14 +12,14 @@
#define FUNCNAME MPIDI_CH3_Win_shared_query
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_SHM_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint * size,
+int MPIDI_CH3_SHM_Win_shared_query(MPIR_Win * win_ptr, int target_rank, MPI_Aint * size,
int *disp_unit, void *baseptr)
{
int comm_size;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY);
if (win_ptr->comm_ptr->node_comm == NULL) {
mpi_errno = MPIDI_CH3U_Win_shared_query(win_ptr, target_rank, size, disp_unit, baseptr);
@@ -44,7 +44,7 @@ int MPIDI_CH3_SHM_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint
for (i = 0; i < comm_size; i++) {
if (win_ptr->basic_info_table[i].size > 0) {
int local_i = win_ptr->comm_ptr->intranode_table[i];
- MPIU_Assert(local_i >= 0 && local_i < win_ptr->comm_ptr->node_comm->local_size);
+ MPIR_Assert(local_i >= 0 && local_i < win_ptr->comm_ptr->node_comm->local_size);
*size = win_ptr->basic_info_table[i].size;
*disp_unit = win_ptr->basic_info_table[i].disp_unit;
*((void **) baseptr) = win_ptr->shm_base_addrs[local_i];
@@ -55,7 +55,7 @@ int MPIDI_CH3_SHM_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint
}
else {
int local_target_rank = win_ptr->comm_ptr->intranode_table[target_rank];
- MPIU_Assert(local_target_rank >= 0 &&
+ MPIR_Assert(local_target_rank >= 0 &&
local_target_rank < win_ptr->comm_ptr->node_comm->local_size);
*size = win_ptr->basic_info_table[target_rank].size;
*disp_unit = win_ptr->basic_info_table[target_rank].disp_unit;
@@ -63,7 +63,7 @@ int MPIDI_CH3_SHM_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_WIN_SHARED_QUERY);
return mpi_errno;
fn_fail:
@@ -75,12 +75,12 @@ int MPIDI_CH3_SHM_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint
#define FUNCNAME MPIDI_CH3_SHM_Win_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_SHM_Win_free(MPID_Win ** win_ptr)
+int MPIDI_CH3_SHM_Win_free(MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SHM_WIN_FREE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SHM_WIN_FREE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SHM_WIN_FREE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_SHM_WIN_FREE);
if ((*win_ptr)->comm_ptr->node_comm == NULL) {
goto fn_exit;
@@ -89,7 +89,7 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win ** win_ptr)
/* Free shared memory region */
if ((*win_ptr)->shm_allocated) {
/* free shm_base_addrs that's only used for shared memory windows */
- MPIU_Free((*win_ptr)->shm_base_addrs);
+ MPL_free((*win_ptr)->shm_base_addrs);
/* Only allocate and allocate_shared allocate new shared segments */
if (((*win_ptr)->create_flavor == MPI_WIN_FLAVOR_SHARED ||
@@ -97,13 +97,13 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win ** win_ptr)
(*win_ptr)->shm_segment_len > 0) {
/* detach from shared memory segment */
mpi_errno =
- MPIU_SHMW_Seg_detach((*win_ptr)->shm_segment_handle,
+ MPL_shm_seg_detach((*win_ptr)->shm_segment_handle,
(char **) &(*win_ptr)->shm_base_addr,
(*win_ptr)->shm_segment_len);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPIU_SHMW_Hnd_finalize(&(*win_ptr)->shm_segment_handle);
+ MPL_shm_hnd_finalize(&(*win_ptr)->shm_segment_handle);
}
}
@@ -113,14 +113,14 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win ** win_ptr)
if (((*win_ptr)->create_flavor == MPI_WIN_FLAVOR_SHARED ||
(*win_ptr)->create_flavor == MPI_WIN_FLAVOR_ALLOCATE) &&
(*win_ptr)->shm_mutex && (*win_ptr)->shm_segment_len > 0) {
- MPID_Comm *node_comm_ptr = NULL;
+ MPIR_Comm *node_comm_ptr = NULL;
/* When allocating shared memory region segment, we need comm of processes
* that are on the same node as this process (node_comm).
* If node_comm == NULL, this process is the only one on this node, therefore
* we use comm_self as node comm. */
node_comm_ptr = (*win_ptr)->comm_ptr->node_comm;
- MPIU_Assert(node_comm_ptr != NULL);
+ MPIR_Assert(node_comm_ptr != NULL);
if (node_comm_ptr->rank == 0) {
MPIDI_CH3I_SHM_MUTEX_DESTROY(*win_ptr);
@@ -128,23 +128,23 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win ** win_ptr)
/* detach from shared memory segment */
mpi_errno =
- MPIU_SHMW_Seg_detach((*win_ptr)->shm_mutex_segment_handle,
+ MPL_shm_seg_detach((*win_ptr)->shm_mutex_segment_handle,
(char **) &(*win_ptr)->shm_mutex, sizeof(MPIDI_CH3I_SHM_MUTEX));
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPIU_SHMW_Hnd_finalize(&(*win_ptr)->shm_mutex_segment_handle);
+ MPL_shm_hnd_finalize(&(*win_ptr)->shm_mutex_segment_handle);
}
/* Free shared memory region for window info */
if ((*win_ptr)->info_shm_base_addr != NULL) {
- mpi_errno = MPIU_SHMW_Seg_detach((*win_ptr)->info_shm_segment_handle,
+ mpi_errno = MPL_shm_seg_detach((*win_ptr)->info_shm_segment_handle,
(char **) &(*win_ptr)->info_shm_base_addr,
(*win_ptr)->info_shm_segment_len);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_SHMW_Hnd_finalize(&(*win_ptr)->info_shm_segment_handle);
+ MPL_shm_hnd_finalize(&(*win_ptr)->info_shm_segment_handle);
(*win_ptr)->basic_info_table = NULL;
}
@@ -156,7 +156,7 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win ** win_ptr)
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SHM_WIN_FREE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_SHM_WIN_FREE);
return mpi_errno;
fn_fail:
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c b/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c
index 38700ed..eec9c7c 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c
@@ -6,7 +6,7 @@
#include "mpid_nem_impl.h"
#include "mpidimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
#include "mpidrma.h"
/* FIXME: get this from OS */
@@ -14,20 +14,20 @@
#define MPIDI_CH3_PAGESIZE_MASK (~(MPIDI_CH3_PAGESIZE-1))
#define MPIDI_CH3_ROUND_UP_PAGESIZE(x) ((((MPI_Aint)x)+(~MPIDI_CH3_PAGESIZE_MASK)) & MPIDI_CH3_PAGESIZE_MASK)
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_wincreate_allgather);
+extern MPIR_T_pvar_timer_t PVAR_TIMER_rma_wincreate_allgather ATTRIBUTE((unused));
MPIDI_SHM_Wins_list_t shm_wins_list;
static int MPIDI_CH3I_Win_init(MPI_Aint size, int disp_unit, int create_flavor, int model,
- MPID_Info * info, MPID_Comm * comm_ptr, MPID_Win ** win_ptr);
+ MPIR_Info * info, MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr);
-static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, void *base_ptr, MPID_Win ** win_ptr);
+static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, void *base_ptr, MPIR_Win ** win_ptr);
-static int MPIDI_CH3I_Win_detect_shm(MPID_Win ** win_ptr);
+static int MPIDI_CH3I_Win_detect_shm(MPIR_Win ** win_ptr);
-static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, MPID_Win ** win_ptr);
+static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr);
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3_Win_fns_init
@@ -36,9 +36,9 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
int MPIDI_CH3_Win_fns_init(MPIDI_CH3U_Win_fns_t * win_fns)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
if (MPIDI_CH3I_Shm_supported()) {
win_fns->allocate_shm = MPIDI_CH3I_Win_allocate_shm;
@@ -47,7 +47,7 @@ int MPIDI_CH3_Win_fns_init(MPIDI_CH3U_Win_fns_t * win_fns)
win_fns->shared_query = MPIDI_CH3_SHM_Win_shared_query;
}
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
return mpi_errno;
}
@@ -59,16 +59,16 @@ int MPIDI_CH3_Win_fns_init(MPIDI_CH3U_Win_fns_t * win_fns)
int MPIDI_CH3_Win_hooks_init(MPIDI_CH3U_Win_hooks_t * win_hooks)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
if (MPIDI_CH3I_Shm_supported()) {
win_hooks->win_init = MPIDI_CH3I_Win_init;
win_hooks->win_free = MPIDI_CH3_SHM_Win_free;
}
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
return mpi_errno;
}
@@ -83,8 +83,8 @@ int MPIDI_CH3_Win_pkt_orderings_init(MPIDI_CH3U_Win_pkt_ordering_t * win_pkt_ord
int mpi_errno = MPI_SUCCESS;
int netmod_ordering = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
win_pkt_orderings->am_flush_ordered = 0;
@@ -103,7 +103,7 @@ int MPIDI_CH3_Win_pkt_orderings_init(MPIDI_CH3U_Win_pkt_ordering_t * win_pkt_ord
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -114,12 +114,12 @@ int MPIDI_CH3_Win_pkt_orderings_init(MPIDI_CH3U_Win_pkt_ordering_t * win_pkt_ord
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int MPIDI_CH3I_Win_init(MPI_Aint size, int disp_unit, int create_flavor, int model,
- MPID_Info * info, MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+ MPIR_Info * info, MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_WIN_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_WIN_INIT);
(*win_ptr)->shm_base_addr = NULL;
(*win_ptr)->shm_segment_len = 0;
@@ -132,7 +132,7 @@ static int MPIDI_CH3I_Win_init(MPI_Aint size, int disp_unit, int create_flavor,
(*win_ptr)->info_shm_segment_handle = 0;
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_WIN_INIT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_WIN_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -144,7 +144,7 @@ static int MPIDI_CH3I_Win_init(MPI_Aint size, int disp_unit, int create_flavor,
#define FUNCNAME MPIDI_CH3I_SHM_Wins_match
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDI_CH3I_SHM_Wins_match(MPID_Win ** win_ptr, MPID_Win ** matched_win,
+static int MPIDI_CH3I_SHM_Wins_match(MPIR_Win ** win_ptr, MPIR_Win ** matched_win,
MPI_Aint ** base_shm_offs_ptr)
{
int mpi_errno = MPI_SUCCESS;
@@ -153,29 +153,29 @@ static int MPIDI_CH3I_SHM_Wins_match(MPID_Win ** win_ptr, MPID_Win ** matched_wi
int group_diff;
int base_diff;
- MPID_Comm *node_comm_ptr = NULL, *shm_node_comm_ptr = NULL;
+ MPIR_Comm *node_comm_ptr = NULL, *shm_node_comm_ptr = NULL;
int *node_ranks = NULL, *node_ranks_in_shm_node = NULL;
- MPID_Group *node_group_ptr = NULL, *shm_node_group_ptr = NULL;
+ MPIR_Group *node_group_ptr = NULL, *shm_node_group_ptr = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
MPI_Aint *base_shm_offs;
MPIDI_SHM_Win_t *elem = shm_wins_list;
- MPIU_CHKLMEM_DECL(2);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH);
+ MPIR_CHKLMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH);
*matched_win = NULL;
base_shm_offs = *base_shm_offs_ptr;
node_comm_ptr = (*win_ptr)->comm_ptr->node_comm;
- MPIU_Assert(node_comm_ptr != NULL);
+ MPIR_Assert(node_comm_ptr != NULL);
node_size = node_comm_ptr->local_size;
node_rank = node_comm_ptr->rank;
comm_size = (*win_ptr)->comm_ptr->local_size;
- MPIU_CHKLMEM_MALLOC(node_ranks, int *, node_size * sizeof(int), mpi_errno, "node_ranks");
- MPIU_CHKLMEM_MALLOC(node_ranks_in_shm_node, int *, node_size * sizeof(int),
+ MPIR_CHKLMEM_MALLOC(node_ranks, int *, node_size * sizeof(int), mpi_errno, "node_ranks");
+ MPIR_CHKLMEM_MALLOC(node_ranks_in_shm_node, int *, node_size * sizeof(int),
mpi_errno, "node_ranks_in_shm_comm");
for (i = 0; i < node_size; i++) {
@@ -187,7 +187,7 @@ static int MPIDI_CH3I_SHM_Wins_match(MPID_Win ** win_ptr, MPID_Win ** matched_wi
MPIR_ERR_POP(mpi_errno);
while (elem != NULL) {
- MPID_Win *shm_win = elem->win;
+ MPIR_Win *shm_win = elem->win;
if (!shm_win)
MPIDI_SHM_Wins_next_and_continue(elem);
@@ -247,7 +247,7 @@ static int MPIDI_CH3I_SHM_Wins_match(MPID_Win ** win_ptr, MPID_Win ** matched_wi
for (i = 0; i < comm_size; ++i) {
int i_node_rank = (*win_ptr)->comm_ptr->intranode_table[i];
if (i_node_rank >= 0) {
- MPIU_Assert(i_node_rank < node_size);
+ MPIR_Assert(i_node_rank < node_size);
if (base_shm_offs[i_node_rank] < 0 ||
base_shm_offs[i_node_rank] + (*win_ptr)->basic_info_table[i].size >
@@ -273,8 +273,8 @@ static int MPIDI_CH3I_SHM_Wins_match(MPID_Win ** win_ptr, MPID_Win ** matched_wi
if (shm_node_group_ptr != NULL)
mpi_errno = MPIR_Group_free_impl(shm_node_group_ptr);
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -286,17 +286,17 @@ static int MPIDI_CH3I_SHM_Wins_match(MPID_Win ** win_ptr, MPID_Win ** matched_wi
#define FUNCNAME MPIDI_CH3I_Win_detect_shm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDI_CH3I_Win_detect_shm(MPID_Win ** win_ptr)
+static int MPIDI_CH3I_Win_detect_shm(MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *shm_win_ptr = NULL;
+ MPIR_Win *shm_win_ptr = NULL;
int i, node_size;
MPI_Aint *base_shm_offs;
- MPIU_CHKPMEM_DECL(1);
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM);
if ((*win_ptr)->comm_ptr->node_comm == NULL) {
goto fn_exit;
@@ -304,7 +304,7 @@ static int MPIDI_CH3I_Win_detect_shm(MPID_Win ** win_ptr)
node_size = (*win_ptr)->comm_ptr->node_comm->local_size;
- MPIU_CHKLMEM_MALLOC(base_shm_offs, MPI_Aint *, node_size * sizeof(MPI_Aint),
+ MPIR_CHKLMEM_MALLOC(base_shm_offs, MPI_Aint *, node_size * sizeof(MPI_Aint),
mpi_errno, "base_shm_offs");
/* Return the first matched shared window.
@@ -318,7 +318,7 @@ static int MPIDI_CH3I_Win_detect_shm(MPID_Win ** win_ptr)
goto fn_exit;
(*win_ptr)->shm_allocated = TRUE;
- MPIU_CHKPMEM_MALLOC((*win_ptr)->shm_base_addrs, void **,
+ MPIR_CHKPMEM_MALLOC((*win_ptr)->shm_base_addrs, void **,
node_size * sizeof(void *), mpi_errno, "(*win_ptr)->shm_base_addrs");
/* Compute the base address of shm buffer on each process.
@@ -333,12 +333,12 @@ static int MPIDI_CH3I_Win_detect_shm(MPID_Win ** win_ptr)
(*win_ptr)->shm_mutex = shm_win_ptr->shm_mutex;
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_WIN_DETECT_SHM);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -347,20 +347,20 @@ static int MPIDI_CH3I_Win_detect_shm(MPID_Win ** win_ptr)
#define FUNCNAME MPIDI_CH3I_Win_gather_info
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
- MPID_Comm *node_comm_ptr = NULL;
+ MPIR_Comm *node_comm_ptr = NULL;
int node_rank;
int comm_rank, comm_size;
MPI_Aint *tmp_buf = NULL;
int i, k;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO);
if ((*win_ptr)->comm_ptr->node_comm == NULL) {
mpi_errno = MPIDI_CH3U_Win_gather_info(base, size, disp_unit, info, comm_ptr, win_ptr);
@@ -371,12 +371,12 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
comm_rank = (*win_ptr)->comm_ptr->rank;
node_comm_ptr = (*win_ptr)->comm_ptr->node_comm;
- MPIU_Assert(node_comm_ptr != NULL);
+ MPIR_Assert(node_comm_ptr != NULL);
node_rank = node_comm_ptr->rank;
(*win_ptr)->info_shm_segment_len = comm_size * sizeof(MPIDI_Win_basic_info_t);
- mpi_errno = MPIU_SHMW_Hnd_init(&(*win_ptr)->info_shm_segment_handle);
+ mpi_errno = MPL_shm_hnd_init(&(*win_ptr)->info_shm_segment_handle);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -384,7 +384,7 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
char *serialized_hnd_ptr = NULL;
/* create shared memory region for all processes in win and map. */
- mpi_errno = MPIU_SHMW_Seg_create_and_attach((*win_ptr)->info_shm_segment_handle,
+ mpi_errno = MPL_shm_seg_create_and_attach((*win_ptr)->info_shm_segment_handle,
(*win_ptr)->info_shm_segment_len,
(char **) &(*win_ptr)->info_shm_base_addr, 0);
if (mpi_errno)
@@ -392,13 +392,13 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
/* serialize handle and broadcast it to the other processes in win */
mpi_errno =
- MPIU_SHMW_Hnd_get_serialized_by_ref((*win_ptr)->info_shm_segment_handle,
+ MPL_shm_hnd_get_serialized_by_ref((*win_ptr)->info_shm_segment_handle,
&serialized_hnd_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
mpi_errno =
- MPIR_Bcast_impl(serialized_hnd_ptr, MPIU_SHMW_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
+ MPIR_Bcast_impl(serialized_hnd_ptr, MPL_SHM_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
&errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -411,29 +411,29 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
/* unlink shared memory region so it gets deleted when all processes exit */
- mpi_errno = MPIU_SHMW_Seg_remove((*win_ptr)->info_shm_segment_handle);
+ mpi_errno = MPL_shm_seg_remove((*win_ptr)->info_shm_segment_handle);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
}
else {
- char serialized_hnd[MPIU_SHMW_GHND_SZ] = { 0 };
+ char serialized_hnd[MPL_SHM_GHND_SZ] = { 0 };
/* get serialized handle from rank 0 and deserialize it */
mpi_errno =
- MPIR_Bcast_impl(serialized_hnd, MPIU_SHMW_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
+ MPIR_Bcast_impl(serialized_hnd, MPL_SHM_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
&errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
- mpi_errno = MPIU_SHMW_Hnd_deserialize((*win_ptr)->info_shm_segment_handle, serialized_hnd,
+ mpi_errno = MPL_shm_hnd_deserialize((*win_ptr)->info_shm_segment_handle, serialized_hnd,
strlen(serialized_hnd));
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* attach to shared memory region created by rank 0 */
mpi_errno =
- MPIU_SHMW_Seg_attach((*win_ptr)->info_shm_segment_handle,
+ MPL_shm_seg_attach((*win_ptr)->info_shm_segment_handle,
(*win_ptr)->info_shm_segment_len,
(char **) &(*win_ptr)->info_shm_base_addr, 0);
if (mpi_errno)
@@ -447,10 +447,10 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
(*win_ptr)->basic_info_table = (MPIDI_Win_basic_info_t *) ((*win_ptr)->info_shm_base_addr);
- MPIU_CHKLMEM_MALLOC(tmp_buf, MPI_Aint *, 4 * comm_size * sizeof(MPI_Aint),
+ MPIR_CHKLMEM_MALLOC(tmp_buf, MPI_Aint *, 4 * comm_size * sizeof(MPI_Aint),
mpi_errno, "tmp_buf");
- tmp_buf[4 * comm_rank] = MPIU_PtrToAint(base);
+ tmp_buf[4 * comm_rank] = MPIR_Ptr_to_aint(base);
tmp_buf[4 * comm_rank + 1] = size;
tmp_buf[4 * comm_rank + 2] = (MPI_Aint) disp_unit;
tmp_buf[4 * comm_rank + 3] = (MPI_Aint) (*win_ptr)->handle;
@@ -464,7 +464,7 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
/* only node_rank == 0 writes results to basic_info_table on shared memory region. */
k = 0;
for (i = 0; i < comm_size; i++) {
- (*win_ptr)->basic_info_table[i].base_addr = MPIU_AintToPtr(tmp_buf[k++]);
+ (*win_ptr)->basic_info_table[i].base_addr = MPIR_Aint_to_ptr(tmp_buf[k++]);
(*win_ptr)->basic_info_table[i].size = tmp_buf[k++];
(*win_ptr)->basic_info_table[i].disp_unit = (int) tmp_buf[k++];
(*win_ptr)->basic_info_table[i].win_handle = (MPI_Win) tmp_buf[k++];
@@ -477,8 +477,8 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_WIN_GATHER_INFO);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -490,21 +490,21 @@ static int MPIDI_CH3I_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
#define FUNCNAME MPIDI_CH3I_Win_allocate_shm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, void *base_ptr, MPID_Win ** win_ptr)
+static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, void *base_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
void **base_pp = (void **) base_ptr;
int i, node_size, node_rank;
- MPID_Comm *node_comm_ptr;
+ MPIR_Comm *node_comm_ptr;
MPI_Aint *node_sizes;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
int noncontig = FALSE;
- MPIU_CHKPMEM_DECL(1);
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM);
if ((*win_ptr)->comm_ptr->node_comm == NULL) {
mpi_errno =
@@ -522,19 +522,19 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
* If node_comm == NULL, this process is the only one on this node, therefore
* we use comm_self as node comm. */
node_comm_ptr = (*win_ptr)->comm_ptr->node_comm;
- MPIU_Assert(node_comm_ptr != NULL);
+ MPIR_Assert(node_comm_ptr != NULL);
node_size = node_comm_ptr->local_size;
node_rank = node_comm_ptr->rank;
MPIR_T_PVAR_TIMER_START(RMA, rma_wincreate_allgather);
/* allocate memory for the base addresses, disp_units, and
* completion counters of all processes */
- MPIU_CHKPMEM_MALLOC((*win_ptr)->shm_base_addrs, void **,
+ MPIR_CHKPMEM_MALLOC((*win_ptr)->shm_base_addrs, void **,
node_size * sizeof(void *), mpi_errno, "(*win_ptr)->shm_base_addrs");
/* get the sizes of the windows and window objectsof
* all processes. allocate temp. buffer for communication */
- MPIU_CHKLMEM_MALLOC(node_sizes, MPI_Aint *, node_size * sizeof(MPI_Aint), mpi_errno,
+ MPIR_CHKLMEM_MALLOC(node_sizes, MPI_Aint *, node_size * sizeof(MPI_Aint), mpi_errno,
"node_sizes");
/* FIXME: This needs to be fixed for heterogeneous systems */
@@ -563,7 +563,7 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
}
else {
- mpi_errno = MPIU_SHMW_Hnd_init(&(*win_ptr)->shm_segment_handle);
+ mpi_errno = MPL_shm_hnd_init(&(*win_ptr)->shm_segment_handle);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -572,7 +572,7 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
/* create shared memory region for all processes in win and map */
mpi_errno =
- MPIU_SHMW_Seg_create_and_attach((*win_ptr)->shm_segment_handle,
+ MPL_shm_seg_create_and_attach((*win_ptr)->shm_segment_handle,
(*win_ptr)->shm_segment_len,
(char **) &(*win_ptr)->shm_base_addr, 0);
if (mpi_errno)
@@ -580,13 +580,13 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
/* serialize handle and broadcast it to the other processes in win */
mpi_errno =
- MPIU_SHMW_Hnd_get_serialized_by_ref((*win_ptr)->shm_segment_handle,
+ MPL_shm_hnd_get_serialized_by_ref((*win_ptr)->shm_segment_handle,
&serialized_hnd_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
mpi_errno =
- MPIR_Bcast_impl(serialized_hnd_ptr, MPIU_SHMW_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
+ MPIR_Bcast_impl(serialized_hnd_ptr, MPL_SHM_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
&errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -599,31 +599,31 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
/* unlink shared memory region so it gets deleted when all processes exit */
- mpi_errno = MPIU_SHMW_Seg_remove((*win_ptr)->shm_segment_handle);
+ mpi_errno = MPL_shm_seg_remove((*win_ptr)->shm_segment_handle);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
}
else {
- char serialized_hnd[MPIU_SHMW_GHND_SZ] = { 0 };
+ char serialized_hnd[MPL_SHM_GHND_SZ] = { 0 };
/* get serialized handle from rank 0 and deserialize it */
mpi_errno =
- MPIR_Bcast_impl(serialized_hnd, MPIU_SHMW_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
+ MPIR_Bcast_impl(serialized_hnd, MPL_SHM_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
&errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
mpi_errno =
- MPIU_SHMW_Hnd_deserialize((*win_ptr)->shm_segment_handle, serialized_hnd,
+ MPL_shm_hnd_deserialize((*win_ptr)->shm_segment_handle, serialized_hnd,
strlen(serialized_hnd));
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* attach to shared memory region created by rank 0 */
mpi_errno =
- MPIU_SHMW_Seg_attach((*win_ptr)->shm_segment_handle, (*win_ptr)->shm_segment_len,
+ MPL_shm_seg_attach((*win_ptr)->shm_segment_handle, (*win_ptr)->shm_segment_len,
(char **) &(*win_ptr)->shm_base_addr, 0);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -635,7 +635,7 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
}
/* Allocated the interprocess mutex segment. */
- mpi_errno = MPIU_SHMW_Hnd_init(&(*win_ptr)->shm_mutex_segment_handle);
+ mpi_errno = MPL_shm_hnd_init(&(*win_ptr)->shm_mutex_segment_handle);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -644,7 +644,7 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
/* create shared memory region for all processes in win and map */
mpi_errno =
- MPIU_SHMW_Seg_create_and_attach((*win_ptr)->shm_mutex_segment_handle,
+ MPL_shm_seg_create_and_attach((*win_ptr)->shm_mutex_segment_handle,
sizeof(MPIDI_CH3I_SHM_MUTEX),
(char **) &(*win_ptr)->shm_mutex, 0);
if (mpi_errno)
@@ -654,13 +654,13 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
/* serialize handle and broadcast it to the other processes in win */
mpi_errno =
- MPIU_SHMW_Hnd_get_serialized_by_ref((*win_ptr)->shm_mutex_segment_handle,
+ MPL_shm_hnd_get_serialized_by_ref((*win_ptr)->shm_mutex_segment_handle,
&serialized_hnd_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
mpi_errno =
- MPIR_Bcast_impl(serialized_hnd_ptr, MPIU_SHMW_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
+ MPIR_Bcast_impl(serialized_hnd_ptr, MPL_SHM_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
&errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
@@ -673,30 +673,30 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
/* unlink shared memory region so it gets deleted when all processes exit */
- mpi_errno = MPIU_SHMW_Seg_remove((*win_ptr)->shm_mutex_segment_handle);
+ mpi_errno = MPL_shm_seg_remove((*win_ptr)->shm_mutex_segment_handle);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
}
else {
- char serialized_hnd[MPIU_SHMW_GHND_SZ] = { 0 };
+ char serialized_hnd[MPL_SHM_GHND_SZ] = { 0 };
/* get serialized handle from rank 0 and deserialize it */
mpi_errno =
- MPIR_Bcast_impl(serialized_hnd, MPIU_SHMW_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
+ MPIR_Bcast_impl(serialized_hnd, MPL_SHM_GHND_SZ, MPI_CHAR, 0, node_comm_ptr,
&errflag);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
mpi_errno =
- MPIU_SHMW_Hnd_deserialize((*win_ptr)->shm_mutex_segment_handle, serialized_hnd,
+ MPL_shm_hnd_deserialize((*win_ptr)->shm_mutex_segment_handle, serialized_hnd,
strlen(serialized_hnd));
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
/* attach to shared memory region created by rank 0 */
mpi_errno =
- MPIU_SHMW_Seg_attach((*win_ptr)->shm_mutex_segment_handle,
+ MPL_shm_seg_attach((*win_ptr)->shm_mutex_segment_handle,
sizeof(MPIDI_CH3I_SHM_MUTEX), (char **) &(*win_ptr)->shm_mutex,
0);
if (mpi_errno)
@@ -753,12 +753,12 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
MPIDI_CH3I_SHM_Wins_append(&shm_wins_list, (*win_ptr));
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3i_comm.c b/src/mpid/ch3/channels/nemesis/src/ch3i_comm.c
index b95844a..87b1d35 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3i_comm.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3i_comm.c
@@ -7,12 +7,12 @@
#include "mpid_nem_impl.h"
#undef utarray_oom
#define utarray_oom() do { goto fn_oom; } while (0)
-#include "mpiu_utarray.h"
+#include "mpir_utarray.h"
#define NULL_CONTEXT_ID -1
-static int barrier (MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag);
-static int alloc_barrier_vars (MPID_Comm *comm, MPID_nem_barrier_vars_t **vars);
+static int barrier (MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag);
+static int alloc_barrier_vars (MPIR_Comm *comm, MPID_nem_barrier_vars_t **vars);
UT_array *coll_fns_array = NULL;
@@ -20,21 +20,21 @@ UT_array *coll_fns_array = NULL;
#define FUNCNAME MPIDI_CH3I_comm_create
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_comm_create(MPID_Comm *comm, void *param)
+int MPIDI_CH3I_comm_create(MPIR_Comm *comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMM_CREATE);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMM_CREATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_COMM_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_COMM_CREATE);
#ifndef ENABLED_SHM_COLLECTIVES
goto fn_exit;
#endif
/* set up intranode barrier iff this is an intranode communicator */
- if (comm->hierarchy_kind == MPID_HIERARCHY_NODE) {
- MPID_Collops *cf, **cf_p;
+ if (comm->hierarchy_kind == MPIR_COMM_HIERARCHY_KIND__NODE) {
+ MPIR_Collops *cf, **cf_p;
comm->dev.ch.barrier_vars = NULL;
/* We can't use a static coll_fns override table for our collectives
@@ -49,7 +49,7 @@ int MPIDI_CH3I_comm_create(MPID_Comm *comm, void *param)
currently have a use case for it.
*/
cf_p = NULL;
- while ( (cf_p = (MPID_Collops **)utarray_next(coll_fns_array, cf_p)) ) {
+ while ( (cf_p = (MPIR_Collops **)utarray_next(coll_fns_array, cf_p)) ) {
/* we can reuse a coll_fns table if the prev_coll_fns pointer is
the same as the coll_fns of this communicator */
if ((*cf_p)->prev_coll_fns == comm->coll_fns) {
@@ -60,7 +60,7 @@ int MPIDI_CH3I_comm_create(MPID_Comm *comm, void *param)
}
/* allocate and init new coll_fns table */
- MPIU_CHKPMEM_MALLOC(cf, MPID_Collops *, sizeof(*cf), mpi_errno, "cf");
+ MPIR_CHKPMEM_MALLOC(cf, MPIR_Collops *, sizeof(*cf), mpi_errno, "cf");
*cf = *comm->coll_fns;
cf->ref_count = 1;
cf->Barrier = barrier;
@@ -72,13 +72,13 @@ int MPIDI_CH3I_comm_create(MPID_Comm *comm, void *param)
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMM_CREATE);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_COMM_CREATE);
return mpi_errno;
fn_oom: /* out-of-memory handler for utarray operations */
MPIR_ERR_SET1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "utarray");
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -86,18 +86,18 @@ int MPIDI_CH3I_comm_create(MPID_Comm *comm, void *param)
#define FUNCNAME MPIDI_CH3I_comm_destroy
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_comm_destroy(MPID_Comm *comm, void *param)
+int MPIDI_CH3I_comm_destroy(MPIR_Comm *comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMM_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMM_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_COMM_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_COMM_DESTROY);
#ifndef ENABLED_SHM_COLLECTIVES
goto fn_exit;
#endif
- if (comm->hierarchy_kind == MPID_HIERARCHY_NODE) {
- MPID_Collops *cf = comm->coll_fns;
+ if (comm->hierarchy_kind == MPIR_COMM_HIERARCHY_KIND__NODE) {
+ MPIR_Collops *cf = comm->coll_fns;
/* replace previous coll_fns table */
comm->coll_fns = cf->prev_coll_fns;
@@ -106,7 +106,7 @@ int MPIDI_CH3I_comm_destroy(MPID_Comm *comm, void *param)
--cf->ref_count;
if (cf->ref_count == 0) {
utarray_erase(coll_fns_array, utarray_eltidx(coll_fns_array, cf), 1);
- MPIU_Free(cf);
+ MPL_free(cf);
}
if (comm->dev.ch.barrier_vars && OPA_fetch_and_decr_int(&comm->dev.ch.barrier_vars->usage_cnt) == 1) {
@@ -116,7 +116,7 @@ int MPIDI_CH3I_comm_destroy(MPID_Comm *comm, void *param)
}
fn_exit: ATTRIBUTE((unused))
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMM_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_COMM_DESTROY);
return mpi_errno;
}
@@ -124,7 +124,7 @@ int MPIDI_CH3I_comm_destroy(MPID_Comm *comm, void *param)
#define FUNCNAME alloc_barrier_vars
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int alloc_barrier_vars (MPID_Comm *comm, MPID_nem_barrier_vars_t **vars)
+static int alloc_barrier_vars (MPIR_Comm *comm, MPID_nem_barrier_vars_t **vars)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -136,7 +136,7 @@ static int alloc_barrier_vars (MPID_Comm *comm, MPID_nem_barrier_vars_t **vars)
This may result in two different communicators using the same
barier_vars. This code is being left in for now as an example of how to
override collective operations. */
- MPIU_Assert(0);
+ MPIR_Assert(0);
for (i = 0; i < MPID_NEM_NUM_BARRIER_VARS; ++i)
{
@@ -161,23 +161,19 @@ static int alloc_barrier_vars (MPID_Comm *comm, MPID_nem_barrier_vars_t **vars)
#define FUNCNAME barrier
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int barrier(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+static int barrier(MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_barrier_vars_t *barrier_vars;
int prev;
int sense;
- MPIU_Assert(comm_ptr->hierarchy_kind == MPID_HIERARCHY_NODE);
+ MPIR_Assert(comm_ptr->hierarchy_kind == MPIR_COMM_HIERARCHY_KIND__NODE);
/* Trivial barriers return immediately */
if (comm_ptr->local_size == 1)
return MPI_SUCCESS;
- /* Only one collective operation per communicator can be active at any
- time */
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER (comm_ptr);
-
if (comm_ptr->dev.ch.barrier_vars == NULL) {
mpi_errno = alloc_barrier_vars (comm_ptr, &comm_ptr->dev.ch.barrier_vars);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
@@ -216,11 +212,10 @@ static int barrier(MPID_Comm *comm_ptr, MPIR_Errflag_t *errflag)
else
{
while (OPA_load_int(&barrier_vars->sig) == sense)
- MPIU_PW_Sched_yield();
+ MPL_sched_yield();
}
fn_exit:
- MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -235,9 +230,9 @@ int MPID_nem_barrier_vars_init (MPID_nem_barrier_vars_t *barrier_region)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_BARRIER_VARS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_BARRIER_VARS_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_BARRIER_VARS_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_BARRIER_VARS_INIT);
if (MPID_nem_mem_region.local_rank == 0)
for (i = 0; i < MPID_NEM_NUM_BARRIER_VARS; ++i)
{
@@ -248,7 +243,7 @@ int MPID_nem_barrier_vars_init (MPID_nem_barrier_vars_t *barrier_region)
OPA_store_int(&barrier_region[i].sig, 0);
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_BARRIER_VARS_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_BARRIER_VARS_INIT);
return mpi_errno;
}
@@ -259,14 +254,14 @@ int MPID_nem_barrier_vars_init (MPID_nem_barrier_vars_t *barrier_region)
static int nem_coll_finalize(void *param ATTRIBUTE((unused)))
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_NEM_COLL_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NEM_COLL_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_NEM_COLL_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NEM_COLL_FINALIZE);
utarray_free(coll_fns_array);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_NEM_COLL_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NEM_COLL_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -280,15 +275,15 @@ static int nem_coll_finalize(void *param ATTRIBUTE((unused)))
int MPID_nem_coll_init(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_COLL_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_COLL_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_COLL_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_COLL_INIT);
utarray_new(coll_fns_array, &ut_ptr_icd);
MPIR_Add_finalize(nem_coll_finalize, NULL, MPIR_FINALIZE_CALLBACK_PRIO-1);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_COLL_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_COLL_INIT);
return mpi_errno;
fn_oom: /* out-of-memory handler for utarray operations */
MPIR_ERR_SET1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "utarray");
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c b/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
index e1de8a0..bca1df2 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
@@ -18,14 +18,14 @@
/* MPIDI_CH3I_SendNoncontig - Sends a message by packing
directly into cells. The caller must initialize sreq->dev.segment
as well as segment_first and segment_size. */
-int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header, MPIDI_msg_sz_t hdr_sz )
+int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPIR_Request *sreq, void *header, intptr_t hdr_sz )
{
int mpi_errno = MPI_SUCCESS;
int again = 0;
- MPIDI_msg_sz_t orig_segment_first = sreq->dev.segment_first;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
+ intptr_t orig_segment_first = sreq->dev.segment_first;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)header);
@@ -36,7 +36,7 @@ int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
/* send queue is not empty, enqueue the request then check to
see if we can send any now */
- MPIDI_DBG_PRINTF((55, FCNAME, "enqueuing"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, TERSE, "enqueuing");
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *)header;
sreq->ch.noncontig = TRUE;
@@ -68,7 +68,7 @@ int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
else
{
/* part of message was sent, make this req an active send */
- MPIU_Assert(MPIDI_CH3I_shm_active_send == NULL);
+ MPIR_Assert(MPIDI_CH3I_shm_active_send == NULL);
MPIDI_CH3I_shm_active_send = sreq;
}
MPIDI_CH3I_Sendq_enqueue(&MPIDI_CH3I_shm_sendq, sreq);
@@ -78,26 +78,26 @@ int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
/* finished sending all data, complete the request */
if (!sreq->dev.OnDataAvail)
{
- MPIU_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, ".... complete %d bytes", (int) (sreq->dev.segment_size));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete %d bytes", (int) (sreq->dev.segment_size));
}
else
{
int complete = 0;
mpi_errno = sreq->dev.OnDataAvail(vc, sreq, &complete);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(complete); /* all data has been sent, we should always complete */
+ MPIR_Assert(complete); /* all data has been sent, we should always complete */
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, ".... complete %d bytes", (int) (sreq->dev.segment_size));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete %d bytes", (int) (sreq->dev.segment_size));
}
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c
deleted file mode 100644
index ae85cb1..0000000
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_alloc.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2006 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpid_nem_impl.h"
-#ifdef USE_PMI2_API
-#include "pmi2.h"
-#else
-#include "pmi.h"
-#endif
-
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
- #include <unistd.h>
-#endif
-#include <errno.h>
-
-#if defined (HAVE_SYSV_SHARED_MEM)
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#endif
-
-#if defined( HAVE_MKSTEMP ) && defined( NEEDS_MKSTEMP_DECL )
-extern int mkstemp(char *t);
-#endif
-
-static int check_alloc(int num_local, int local_rank);
-
-typedef struct alloc_elem
-{
- struct alloc_elem *next;
- void **ptr_p;
- size_t len;
-} alloc_elem_t;
-
-static struct { alloc_elem_t *head, *tail; } allocq = {0};
-
-#define ALLOCQ_HEAD() GENERIC_Q_HEAD(allocq)
-#define ALLOCQ_EMPTY() GENERIC_Q_EMPTY(allocq)
-#define ALLOCQ_ENQUEUE(ep) GENERIC_Q_ENQUEUE(&allocq, ep, next)
-#define ALLOCQ_DEQUEUE(epp) GENERIC_Q_DEQUEUE(&allocq, epp, next)
-
-#define ROUND_UP_8(x) (((x) + (size_t)7) & ~(size_t)7) /* rounds up to multiple of 8 */
-
-static size_t segment_len = 0;
-
-typedef struct asym_check_region
-{
- void *base_ptr;
- OPA_int_t is_asym;
-} asym_check_region;
-
-static asym_check_region* asym_check_region_p = NULL;
-
-/* MPIDI_CH3I_Seg_alloc(len, ptr_p)
-
- This function is used to allow the caller to reserve a len sized
- region in the shared memory segment. Once the shared memory
- segment is actually allocated, when MPIDI_CH3I_Seg_commit() is
- called, the pointer *ptr_p will be set to point to the reserved
- region in the shared memory segment.
-
- Note that no shared memory is actually allocated by this function,
- and the *ptr_p pointer will be valid only after
- MPIDI_CH3I_Seg_commit() is called.
-*/
-#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3I_Seg_alloc
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Seg_alloc(size_t len, void **ptr_p)
-{
- int mpi_errno = MPI_SUCCESS;
- alloc_elem_t *ep;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEG_ALLOC);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SEG_ALLOC);
-
- /* round up to multiple of 8 to ensure the start of the next
- region is 64-bit aligned. */
- len = ROUND_UP_8(len);
-
- MPIU_Assert(len);
- MPIU_Assert(ptr_p);
-
- MPIU_CHKPMEM_MALLOC(ep, alloc_elem_t *, sizeof(alloc_elem_t), mpi_errno, "el");
-
- ep->ptr_p = ptr_p;
- ep->len = len;
-
- ALLOCQ_ENQUEUE(ep);
-
- segment_len += len;
-
- fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SEG_ALLOC);
- return mpi_errno;
- fn_fail:
- MPIU_CHKPMEM_REAP();
- goto fn_exit;
-}
-
-/* MPIDI_CH3I_Seg_commit(memory, num_local, local_rank)
-
- This function allocates a shared memory segment large enough to
- hold all of the regions previously requested by calls to
- MPIDI_CH3I_Seg_alloc(). For each request, this function sets the
- associated pointer to point to the reserved region in the allocated
- shared memory segment.
-
- If there is only one process local to this node, then a shared
- memory region is not allocated. Instead, memory is allocated from
- the heap.
-
- At least one call to MPIDI_CH3I_Seg_alloc() must be made before
- calling MPIDI_CH3I_Seg_commit().
- */
-#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3I_Seg_commit
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Seg_commit(MPID_nem_seg_ptr_t memory, int num_local, int local_rank)
-{
- int mpi_errno = MPI_SUCCESS;
- int pmi_errno;
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- int ret;
- int ipc_lock_offset;
- OPA_emulation_ipl_t *ipc_lock;
-#endif
- int key_max_sz;
- int val_max_sz;
- char *key;
- char *val;
- char *kvs_name;
- char *serialized_hnd = NULL;
- void *current_addr;
- void *start_addr ATTRIBUTE((unused));
- size_t size_left;
- MPIU_CHKPMEM_DECL (1);
- MPIU_CHKLMEM_DECL (2);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEG_COMMIT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SEG_COMMIT);
-
- /* MPIDI_CH3I_Seg_alloc() needs to have been called before this function */
- MPIU_Assert(!ALLOCQ_EMPTY());
- MPIU_Assert(segment_len > 0);
-
- /* allocate an area to check if the segment was allocated symmetrically */
- mpi_errno = MPIDI_CH3I_Seg_alloc(sizeof(asym_check_region), (void **)&asym_check_region_p);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- mpi_errno = MPIU_SHMW_Hnd_init(&(memory->hnd));
- if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
-
- /* Shared memory barrier variables are in the front of the shared
- memory region. We do this here explicitly, rather than use the
- Seg_alloc() function because we need to use the barrier inside
- this function, before we've assigned the variables to their
- regions. To do this, we add extra space to the segment_len,
- initialize the variables as soon as the shared memory region is
- allocated/attached, then before we do the assignments of the
- pointers provided in Seg_alloc(), we make sure to skip the
- region containing the barrier vars. */
-
- /* add space for local barrier region. Use a whole cacheline. */
- MPIU_Assert(MPID_NEM_CACHE_LINE_LEN >= sizeof(MPID_nem_barrier_t));
- segment_len += MPID_NEM_CACHE_LINE_LEN;
-
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- /* We have a similar bootstrapping problem when using OpenPA in
- * lock-based emulation mode. We use OPA_* functions during the
- * check_alloc function but we were previously initializing OpenPA
- * after return from this function. So we put the emulation lock
- * right after the barrier var space. */
-
- /* offset from memory->base_addr to the start of ipc_lock */
- ipc_lock_offset = MPID_NEM_CACHE_LINE_LEN;
-
- MPIU_Assert(ipc_lock_offset >= sizeof(OPA_emulation_ipl_t));
- segment_len += MPID_NEM_CACHE_LINE_LEN;
-#endif
-
- memory->segment_len = segment_len;
-
-#ifdef USE_PMI2_API
- /* if there is only one process on this processor, don't use shared memory */
- if (num_local == 1)
- {
- char *addr;
-
- MPIU_CHKPMEM_MALLOC (addr, char *, segment_len + MPID_NEM_CACHE_LINE_LEN, mpi_errno, "segment");
-
- memory->base_addr = addr;
- current_addr = (char *)(((MPIU_Upint)addr + (MPIU_Upint)MPID_NEM_CACHE_LINE_LEN-1) & (~((MPIU_Upint)MPID_NEM_CACHE_LINE_LEN-1)));
- memory->symmetrical = 0;
-
- /* must come before barrier_init since we use OPA in that function */
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
- ret = OPA_Interprocess_lock_init(ipc_lock, TRUE/*isLeader*/);
- MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
-#endif
-
- mpi_errno = MPID_nem_barrier_init((MPID_nem_barrier_t *)memory->base_addr, TRUE);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
- else {
-
- if (local_rank == 0) {
- mpi_errno = MPIU_SHMW_Seg_create_and_attach(memory->hnd, memory->segment_len, &(memory->base_addr), 0);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* post name of shared file */
- MPIU_Assert (MPID_nem_mem_region.local_procs[0] == MPID_nem_mem_region.rank);
-
- mpi_errno = MPIU_SHMW_Hnd_get_serialized_by_ref(memory->hnd, &serialized_hnd);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* must come before barrier_init since we use OPA in that function */
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
- ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
- MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
-#endif
-
- mpi_errno = MPID_nem_barrier_init((MPID_nem_barrier_t *)memory->base_addr, TRUE);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* The opa and nem barrier initializations must come before we (the
- * leader) put the sharedFilename attribute. Since this is a
- * serializing operation with our peers on the local node this
- * ensures that these initializations have occurred before any peer
- * attempts to use the resources. */
- mpi_errno = PMI2_Info_PutNodeAttr("sharedFilename", serialized_hnd);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- } else {
- int found = FALSE;
-
- /* Allocate space for pmi key and val */
- MPIU_CHKLMEM_MALLOC(val, char *, PMI2_MAX_VALLEN, mpi_errno, "val");
-
- /* get name of shared file */
- mpi_errno = PMI2_Info_GetNodeAttr("sharedFilename", val, PMI2_MAX_VALLEN, &found, TRUE);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKINTERNAL(!found, mpi_errno, "nodeattr not found");
-
- mpi_errno = MPIU_SHMW_Hnd_deserialize(memory->hnd, val, strlen(val));
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- mpi_errno = MPIU_SHMW_Seg_attach(memory->hnd, memory->segment_len, (char **)&memory->base_addr, 0);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* must come before barrier_init since we use OPA in that function */
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
- ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
- MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
-
- /* Right now we rely on the assumption that OPA_Interprocess_lock_init only
- * needs to be called by the leader and the current process before use by the
- * current process. That is, we don't assume that this collective call is
- * synchronizing and we don't assume that it requires total external
- * synchronization. In PMIv2 we don't have a PMI_Barrier operation so we need
- * this behavior. */
-#endif
-
- mpi_errno = MPID_nem_barrier_init((MPID_nem_barrier_t *)memory->base_addr, FALSE);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
-
- mpi_errno = MPID_nem_barrier();
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- if (local_rank == 0) {
- mpi_errno = MPIU_SHMW_Seg_remove(memory->hnd);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
- current_addr = memory->base_addr;
- memory->symmetrical = 0 ;
- }
-#else /* we are using PMIv1 */
- /* if there is only one process on this processor, don't use shared memory */
- if (num_local == 1)
- {
- char *addr;
-
- MPIU_CHKPMEM_MALLOC (addr, char *, segment_len + MPID_NEM_CACHE_LINE_LEN, mpi_errno, "segment");
-
- memory->base_addr = addr;
- current_addr = (char *)(((MPIU_Upint)addr + (MPIU_Upint)MPID_NEM_CACHE_LINE_LEN-1) & (~((MPIU_Upint)MPID_NEM_CACHE_LINE_LEN-1)));
- memory->symmetrical = 0 ;
-
- /* we still need to call barrier */
- pmi_errno = PMI_Barrier();
- MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
-
- /* must come before barrier_init since we use OPA in that function */
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
- ret = OPA_Interprocess_lock_init(ipc_lock, TRUE/*isLeader*/);
- MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
-#endif
- mpi_errno = MPID_nem_barrier_init((MPID_nem_barrier_t *)memory->base_addr, TRUE);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
- else{
- /* Allocate space for pmi key and val */
- pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
- MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
- MPIU_CHKLMEM_MALLOC(key, char *, key_max_sz, mpi_errno, "key");
-
- pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
- MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
- MPIU_CHKLMEM_MALLOC(val, char *, val_max_sz, mpi_errno, "val");
-
- mpi_errno = MPIDI_PG_GetConnKVSname (&kvs_name);
- if (mpi_errno) MPIR_ERR_POP (mpi_errno);
-
- if (local_rank == 0){
- mpi_errno = MPIU_SHMW_Seg_create_and_attach(memory->hnd, memory->segment_len, &(memory->base_addr), 0);
- if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
-
- /* post name of shared file */
- MPIU_Assert (MPID_nem_mem_region.local_procs[0] == MPID_nem_mem_region.rank);
- MPL_snprintf (key, key_max_sz, "sharedFilename[%i]", MPID_nem_mem_region.rank);
-
- mpi_errno = MPIU_SHMW_Hnd_get_serialized_by_ref(memory->hnd, &serialized_hnd);
- if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
-
- pmi_errno = PMI_KVS_Put (kvs_name, key, serialized_hnd);
- MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_put", "**pmi_kvs_put %d", pmi_errno);
-
- pmi_errno = PMI_KVS_Commit (kvs_name);
- MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_commit", "**pmi_kvs_commit %d", pmi_errno);
-
- /* must come before barrier_init since we use OPA in that function */
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
- ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
- MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
-#endif
-
- mpi_errno = MPID_nem_barrier_init((MPID_nem_barrier_t *)memory->base_addr, TRUE);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- pmi_errno = PMI_Barrier();
- MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
- }
- else
- {
- pmi_errno = PMI_Barrier();
- MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
-
- /* get name of shared file */
- MPL_snprintf (key, key_max_sz, "sharedFilename[%i]", MPID_nem_mem_region.local_procs[0]);
- pmi_errno = PMI_KVS_Get (kvs_name, key, val, val_max_sz);
- MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_get", "**pmi_kvs_get %d", pmi_errno);
-
- mpi_errno = MPIU_SHMW_Hnd_deserialize(memory->hnd, val, strlen(val));
- if(mpi_errno != MPI_SUCCESS) MPIR_ERR_POP(mpi_errno);
-
- mpi_errno = MPIU_SHMW_Seg_attach(memory->hnd, memory->segment_len, (char **)&memory->base_addr, 0);
- if (mpi_errno) MPIR_ERR_POP (mpi_errno);
-
- /* must come before barrier_init since we use OPA in that function */
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
- ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
- MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
-#endif
-
- mpi_errno = MPID_nem_barrier_init((MPID_nem_barrier_t *)memory->base_addr, FALSE);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
-
- mpi_errno = MPID_nem_barrier();
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- if (local_rank == 0)
- {
- mpi_errno = MPIU_SHMW_Seg_remove(memory->hnd);
- if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
- }
- current_addr = memory->base_addr;
- memory->symmetrical = 0 ;
- }
-#endif
- /* assign sections of the shared memory segment to their pointers */
-
- start_addr = current_addr;
- size_left = segment_len;
-
- /* reserve room for shared mem barrier (We used a whole cacheline) */
- current_addr = (char *)current_addr + MPID_NEM_CACHE_LINE_LEN;
- MPIU_Assert(size_left >= MPID_NEM_CACHE_LINE_LEN);
- size_left -= MPID_NEM_CACHE_LINE_LEN;
-
-#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
- /* reserve room for the opa emulation lock */
- current_addr = (char *)current_addr + MPID_NEM_CACHE_LINE_LEN;
- MPIU_Assert(size_left >= MPID_NEM_CACHE_LINE_LEN);
- size_left -= MPID_NEM_CACHE_LINE_LEN;
-#endif
-
- do
- {
- alloc_elem_t *ep;
-
- ALLOCQ_DEQUEUE(&ep);
-
- *(ep->ptr_p) = current_addr;
- MPIU_Assert(size_left >= ep->len);
- size_left -= ep->len;
- current_addr = (char *)current_addr + ep->len;
-
- MPIU_Free(ep);
-
- MPIU_Assert((char *)current_addr <= (char *)start_addr + segment_len);
- }
- while (!ALLOCQ_EMPTY());
-
- mpi_errno = check_alloc(num_local, local_rank);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- MPIU_CHKPMEM_COMMIT();
- fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SEG_COMMIT);
- return mpi_errno;
- fn_fail:
- /* --BEGIN ERROR HANDLING-- */
- MPIU_SHMW_Seg_remove(memory->hnd);
- MPIU_SHMW_Hnd_finalize(&(memory->hnd));
- MPIU_CHKPMEM_REAP();
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-/* MPIDI_CH3I_Seg_destroy() free the shared memory segment */
-#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3I_Seg_destroy
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Seg_destroy(void)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEG_DESTROY);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SEG_DESTROY);
-
- if (MPID_nem_mem_region.num_local == 1)
- MPIU_Free(MPID_nem_mem_region.memory.base_addr);
- else
- {
- mpi_errno = MPIU_SHMW_Seg_detach(MPID_nem_mem_region.memory.hnd,
- &(MPID_nem_mem_region.memory.base_addr), MPID_nem_mem_region.memory.segment_len);
- if (mpi_errno) MPIR_ERR_POP (mpi_errno);
- }
-
- fn_exit:
- MPIU_SHMW_Hnd_finalize(&(MPID_nem_mem_region.memory.hnd));
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SEG_DESTROY);
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-/* check_alloc() checks to see whether the shared memory segment is
- allocated at the same virtual memory address at each process.
-*/
-#undef FUNCNAME
-#define FUNCNAME check_alloc
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int check_alloc(int num_local, int local_rank)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_CHECK_ALLOC);
-
- MPIDI_FUNC_ENTER(MPID_STATE_CHECK_ALLOC);
-
- if (local_rank == 0) {
- asym_check_region_p->base_ptr = MPID_nem_mem_region.memory.base_addr;
- OPA_store_int(&asym_check_region_p->is_asym, 0);
- }
-
- mpi_errno = MPID_nem_barrier();
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- if (asym_check_region_p->base_ptr != MPID_nem_mem_region.memory.base_addr)
- OPA_store_int(&asym_check_region_p->is_asym, 1);
-
- OPA_read_write_barrier();
-
- mpi_errno = MPID_nem_barrier();
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- if (OPA_load_int(&asym_check_region_p->is_asym))
- {
- MPID_nem_mem_region.memory.symmetrical = 0;
- MPID_nem_asymm_base_addr = MPID_nem_mem_region.memory.base_addr;
-#ifdef MPID_NEM_SYMMETRIC_QUEUES
- MPIR_ERR_INTERNALANDJUMP(mpi_errno, "queues are not symmetrically allocated as expected");
-#endif
- }
- else
- {
- MPID_nem_mem_region.memory.symmetrical = 1;
- MPID_nem_asymm_base_addr = NULL;
- }
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CHECK_ALLOC);
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c
deleted file mode 100644
index 5b2e09b..0000000
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_barrier.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2006 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpid_nem_impl.h"
-#include "mpiu_os_wrappers.h"
-
-static int sense;
-static int barrier_init = 0;
-
-#undef FUNCNAME
-#define FUNCNAME MPID_nem_barrier_init
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_barrier_init(MPID_nem_barrier_t *barrier_region, int init_values)
-{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_BARRIER_INIT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_BARRIER_INIT);
-
- MPID_nem_mem_region.barrier = barrier_region;
- if (init_values) {
- OPA_store_int(&MPID_nem_mem_region.barrier->val, 0);
- OPA_store_int(&MPID_nem_mem_region.barrier->wait, 0);
- OPA_write_barrier();
- }
- sense = 0;
- barrier_init = 1;
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_BARRIER_INIT);
-
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_nem_barrier
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* FIXME: this is not a scalable algorithm because everyone is polling on the same cacheline */
-int MPID_nem_barrier(void)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_BARRIER);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_BARRIER);
-
- if (MPID_nem_mem_region.num_local == 1)
- goto fn_exit;
-
- MPIR_ERR_CHKINTERNAL(!barrier_init, mpi_errno, "barrier not initialized");
-
- if (OPA_fetch_and_incr_int(&MPID_nem_mem_region.barrier->val) == MPID_nem_mem_region.num_local - 1)
- {
- OPA_store_int(&MPID_nem_mem_region.barrier->val, 0);
- OPA_store_int(&MPID_nem_mem_region.barrier->wait, 1 - sense);
- OPA_write_barrier();
- }
- else
- {
- /* wait */
- while (OPA_load_int(&MPID_nem_mem_region.barrier->wait) == sense)
- MPIU_PW_Sched_yield(); /* skip */
- }
- sense = 1 - sense;
-
- fn_fail:
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_BARRIER);
- return mpi_errno;
-}
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c
index 94332d1..4e264f4 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c
@@ -159,9 +159,9 @@ int MPIDI_nem_ckpt_init(void)
cr_callback_id_t cb_id;
cr_client_id_t client_id;
int ret;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_NEM_CKPT_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEM_CKPT_INIT);
if (!MPIR_CVAR_NEMESIS_ENABLE_CKPOINT)
goto fn_exit;
@@ -170,18 +170,18 @@ int MPIDI_nem_ckpt_init(void)
MPIR_ERR_CHKANDJUMP(client_id < 0 && errno == ENOSYS, mpi_errno, MPI_ERR_OTHER, "**blcr_mod");
cb_id = cr_register_callback(ckpt_cb, NULL, CR_THREAD_CONTEXT);
- MPIR_ERR_CHKANDJUMP1(cb_id == -1, mpi_errno, MPI_ERR_OTHER, "**intern", "**intern %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(cb_id == -1, mpi_errno, MPI_ERR_OTHER, "**intern", "**intern %s", MPIR_Strerror(errno));
checkpointing = FALSE;
current_wave = 0;
ret = sem_init(&ckpt_sem, 0, 0);
- MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_init", "**sem_init %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_init", "**sem_init %s", MPIR_Strerror(errno));
ret = sem_init(&cont_sem, 0, 0);
- MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_init", "**sem_init %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_init", "**sem_init %s", MPIR_Strerror(errno));
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_NEM_CKPT_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEM_CKPT_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -195,17 +195,17 @@ int MPIDI_nem_ckpt_finalize(void)
{
int mpi_errno = MPI_SUCCESS;
int ret;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_NEM_CKPT_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEM_CKPT_FINALIZE);
ret = sem_destroy(&ckpt_sem);
- MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_destroy", "**sem_destroy %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_destroy", "**sem_destroy %s", MPIR_Strerror(errno));
ret = sem_destroy(&cont_sem);
- MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_destroy", "**sem_destroy %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_destroy", "**sem_destroy %s", MPIR_Strerror(errno));
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_NEM_CKPT_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEM_CKPT_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -222,9 +222,9 @@ static int reinit_pmi(void)
int pg_rank, pg_size;
int kvs_name_sz, pg_id_sz;
- MPIDI_STATE_DECL(MPID_STATE_REINIT_PMI);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_REINIT_PMI);
- MPIDI_FUNC_ENTER(MPID_STATE_REINIT_PMI);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_REINIT_PMI);
/* Init pmi and do some sanity checks */
ret = PMI_Init(&has_parent);
@@ -243,9 +243,9 @@ static int reinit_pmi(void)
ret = PMI_KVS_Get_name_length_max(&pg_id_sz);
CHECK_ERR(ret, "pmi_get_id_length_max");
- MPIU_Free(MPIDI_Process.my_pg->id);
+ MPL_free(MPIDI_Process.my_pg->id);
- MPIDI_Process.my_pg->id = MPIU_Malloc(pg_id_sz + 1);
+ MPIDI_Process.my_pg->id = MPL_malloc(pg_id_sz + 1);
CHECK_ERR(MPIDI_Process.my_pg->id == NULL, "malloc failed");
ret = PMI_KVS_Get_my_name(MPIDI_Process.my_pg->id, pg_id_sz);
@@ -255,16 +255,16 @@ static int reinit_pmi(void)
ret = PMI_KVS_Get_name_length_max(&kvs_name_sz);
CHECK_ERR(ret, "PMI_KVS_Get_name_length_max");
- MPIU_Free(MPIDI_Process.my_pg->connData);
+ MPL_free(MPIDI_Process.my_pg->connData);
- MPIDI_Process.my_pg->connData = MPIU_Malloc(kvs_name_sz + 1);
+ MPIDI_Process.my_pg->connData = MPL_malloc(kvs_name_sz + 1);
CHECK_ERR(MPIDI_Process.my_pg->connData == NULL, "malloc failed");
ret = PMI_KVS_Get_my_name(MPIDI_Process.my_pg->connData, kvs_name_sz);
CHECK_ERR(ret, "PMI_Get_my_name");
- MPIDI_FUNC_EXIT(MPID_STATE_REINIT_PMI);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_REINIT_PMI);
return 0;
}
@@ -284,22 +284,22 @@ static int restore_env(pid_t parent_pid, int rank)
MPL_snprintf(env_filename, MAX_STR_LEN, "/tmp/hydra-env-file-%d:%d", parent_pid, rank);
f = fopen(env_filename, "r");
- CHECK_ERR(!f, MPIU_Strerror (errno));
+ CHECK_ERR(!f, MPIR_Strerror (errno));
ret = unlink(env_filename);
- CHECK_ERR(ret, MPIU_Strerror (errno));
+ CHECK_ERR(ret, MPIR_Strerror (errno));
while (fgets(var_val, MAX_STR_LEN, f)) {
size_t len = strlen(var_val);
/* remove newline */
if (var_val[len-1] == '\n')
var_val[len-1] = '\0';
- ret = MPL_putenv(MPIU_Strdup(var_val));
- CHECK_ERR(ret != 0, MPIU_Strerror (errno));
+ ret = MPL_putenv(MPL_strdup(var_val));
+ CHECK_ERR(ret != 0, MPIR_Strerror (errno));
}
ret = fclose(f);
- CHECK_ERR(ret, MPIU_Strerror (errno));
+ CHECK_ERR(ret, MPIR_Strerror (errno));
return 0;
}
@@ -327,9 +327,9 @@ static int open_io_socket(socktype_t socktype, int rank, int dupfd)
int port;
int len;
char *id_p;
- MPIDI_STATE_DECL(MPID_STATE_OPEN_IO_SOCKET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_OPEN_IO_SOCKET);
- MPIDI_FUNC_ENTER(MPID_STATE_OPEN_IO_SOCKET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_OPEN_IO_SOCKET);
memset(&sock_addr, 0, sizeof(sock_addr));
memset(&addr, 0, sizeof(addr));
@@ -371,7 +371,7 @@ static int open_io_socket(socktype_t socktype, int rank, int dupfd)
ret = close(fd);
CHECK_ERR_ERRNO(ret, "close socket");
- MPIDI_FUNC_EXIT(MPID_STATE_OPEN_IO_SOCKET);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_OPEN_IO_SOCKET);
fn_exit:
return 0;
}
@@ -383,9 +383,9 @@ fn_exit:
static int restore_stdinouterr(int rank)
{
int ret;
- MPIDI_STATE_DECL(MPID_STATE_RESTORE_STDINOUTERR);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RESTORE_STDINOUTERR);
- MPIDI_FUNC_ENTER(MPID_STATE_RESTORE_STDINOUTERR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RESTORE_STDINOUTERR);
if (rank == 0) {
ret = open_io_socket(IN_SOCK, rank, 0);
@@ -396,7 +396,7 @@ static int restore_stdinouterr(int rank)
ret = open_io_socket(ERR_SOCK, rank, 2);
CHECK_ERR(ret, "open stdin socket");
- MPIDI_FUNC_EXIT(MPID_STATE_RESTORE_STDINOUTERR);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RESTORE_STDINOUTERR);
return 0;
}
@@ -409,9 +409,9 @@ int MPIDI_nem_ckpt_start(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_START);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_START);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_NEM_CKPT_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEM_CKPT_START);
if (checkpointing)
goto fn_exit;
@@ -425,7 +425,7 @@ int MPIDI_nem_ckpt_start(void)
/* send markers to all other processes */
/* FIXME: we're only handling processes in our pg, so no dynamic connections */
for (i = 0; i < MPIDI_Process.my_pg->size; ++i) {
- MPID_Request *req;
+ MPIR_Request *req;
MPIDI_VC_t *vc;
MPIDI_CH3I_VC *vc_ch;
MPID_PKT_DECL_CAST(upkt, MPID_nem_pkt_ckpt_marker_t, ckpt_pkt);
@@ -445,7 +445,7 @@ int MPIDI_nem_ckpt_start(void)
if (req != NULL)
{
MPIR_ERR_CHKANDJUMP(req->status.MPI_ERROR, mpi_errno, MPI_ERR_OTHER, "**ckptpkt");
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
if (!vc_ch->is_local) {
@@ -456,7 +456,7 @@ int MPIDI_nem_ckpt_start(void)
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_NEM_CKPT_START);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEM_CKPT_START);
return mpi_errno;
fn_fail:
@@ -472,28 +472,28 @@ int MPIDI_nem_ckpt_finish(void)
int mpi_errno = MPI_SUCCESS;
int i;
int ret;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_FINISH);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEM_CKPT_FINISH);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_NEM_CKPT_FINISH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEM_CKPT_FINISH);
/* Since we're checkpointing the shared memory region (i.e., the
channels between local procs), we don't have to flush those
channels, just make sure no one is sending or receiving during
the checkpoint */
- mpi_errno = MPID_nem_barrier();
+ mpi_errno = MPIDU_shm_barrier(MPID_nem_mem_region.barrier, MPID_nem_mem_region.num_local);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
do {
ret = sem_post(&ckpt_sem);
} while (ret == -1 && errno == EINTR);
- MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_post", "**sem_post %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_post", "**sem_post %s", MPIR_Strerror(errno));
do {
ret = sem_wait(&cont_sem);
} while (ret == -1 && errno == EINTR);
- MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_wait", "**sem_wait %s", MPIU_Strerror(errno));
+ MPIR_ERR_CHKANDJUMP1(ret, mpi_errno, MPI_ERR_OTHER, "**sem_wait", "**sem_wait %s", MPIR_Strerror(errno));
- mpi_errno = MPID_nem_barrier();
+ mpi_errno = MPIDU_shm_barrier(MPID_nem_mem_region.barrier, MPID_nem_mem_region.num_local);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (ckpt_result == CKPT_CONTINUE) {
@@ -516,7 +516,7 @@ int MPIDI_nem_ckpt_finish(void)
checkpointing = FALSE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_NEM_CKPT_FINISH);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEM_CKPT_FINISH);
return mpi_errno;
fn_fail:
@@ -528,20 +528,21 @@ fn_fail:
#define FUNCNAME pkt_ckpt_marker_handler
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int pkt_ckpt_marker_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **req)
+static int pkt_ckpt_marker_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **req)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_pkt_ckpt_marker_t * const ckpt_pkt = (MPID_nem_pkt_ckpt_marker_t *)pkt;
- MPIDI_STATE_DECL(MPID_STATE_PKT_CKPT_MARKER_HANDLER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PKT_CKPT_MARKER_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_PKT_CKPT_MARKER_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PKT_CKPT_MARKER_HANDLER);
if (!checkpointing) {
mpi_errno = MPIDI_nem_ckpt_start();
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
- MPIU_Assert(current_wave == ckpt_pkt->wave);
+ MPIR_Assert(current_wave == ckpt_pkt->wave);
--marker_count;
@@ -555,11 +556,11 @@ static int pkt_ckpt_marker_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_m
MPIDI_CH3_Progress_signal_completion();
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*req = NULL;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_PKT_CKPT_MARKER_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PKT_CKPT_MARKER_HANDLER);
return mpi_errno;
fn_fail:
@@ -574,9 +575,9 @@ fn_fail:
int MPIDI_nem_ckpt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int arraySize)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT);
/* Check that the array is large enough */
if (arraySize <= MPIDI_CH3_PKT_END_ALL) {
@@ -586,7 +587,7 @@ int MPIDI_nem_ckpt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int arr
pktArray[MPIDI_NEM_PKT_CKPT_MARKER] = pkt_ckpt_marker_handler;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_CKPT_PKTHANDLER_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_debug.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_debug.c
index 735a47a..342b175 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_debug.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_debug.c
@@ -14,17 +14,17 @@
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPID_nem_dbg_dump_cell (volatile struct MPID_nem_cell *cell)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_DBG_DUMP_CELL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_DBG_DUMP_CELL);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_DBG_DUMP_CELL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_DBG_DUMP_CELL);
- MPIU_DBG_MSG_D (ALL, TERSE, " src = %6d", cell->pkt.mpich.source);
- MPIU_DBG_MSG_D (ALL, TERSE, " dst = %6d", cell->pkt.mpich.dest);
- MPIU_DBG_MSG_D (ALL, TERSE, " len = %6d", (int)cell->pkt.mpich.datalen);
- MPIU_DBG_MSG_D (ALL, TERSE, " sqn = %6d", cell->pkt.mpich.seqno);
- MPIU_DBG_MSG_D (ALL, TERSE, " typ = %6d", cell->pkt.mpich.type);
+ MPL_DBG_MSG_D (MPIR_DBG_OTHER, TERSE, " src = %6d", cell->pkt.header.source);
+ MPL_DBG_MSG_D (MPIR_DBG_OTHER, TERSE, " dst = %6d", cell->pkt.header.dest);
+ MPL_DBG_MSG_D (MPIR_DBG_OTHER, TERSE, " len = %6d", (int)cell->pkt.header.datalen);
+ MPL_DBG_MSG_D (MPIR_DBG_OTHER, TERSE, " sqn = %6d", cell->pkt.header.seqno);
+ MPL_DBG_MSG_D (MPIR_DBG_OTHER, TERSE, " typ = %6d", cell->pkt.header.type);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_DBG_DUMP_CELL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_DBG_DUMP_CELL);
}
#define state_case(suffix) \
@@ -59,7 +59,7 @@ void MPID_nem_dbg_print_vc_sendq(FILE *stream, MPIDI_VC_t *vc);
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPID_nem_dbg_print_vc_sendq(FILE *stream, MPIDI_VC_t *vc)
{
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int i;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
@@ -127,7 +127,7 @@ void MPID_nem_dbg_print_all_sendq(FILE *stream)
MPIDI_PG_Get_iterator(&iter);
while (MPIDI_PG_Has_next(&iter)) {
MPIDI_PG_Get_next(&iter, &pg);
- fprintf(stream, "PG ptr=%p size=%d id=%s refcount=%d\n", pg, pg->size, (const char*)pg->id, MPIU_Object_get_ref(pg));
+ fprintf(stream, "PG ptr=%p size=%d id=%s refcount=%d\n", pg, pg->size, (const char*)pg->id, MPIR_Object_get_ref(pg));
for (i = 0; i < MPIDI_PG_Get_size(pg); ++i) {
MPIDI_PG_Get_vc(pg, i, &vc);
MPID_nem_dbg_print_vc_sendq(stream, vc);
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c
index 24575ff..0de5b2b 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_finalize.c
@@ -19,38 +19,38 @@
int MPID_nem_finalize(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_FINALIZE);
/* this test is not the right one */
-/* MPIU_Assert(MPID_nem_queue_empty( MPID_nem_mem_region.RecvQ[MPID_nem_mem_region.rank])); */
+/* MPIR_Assert(MPID_nem_queue_empty( MPID_nem_mem_region.RecvQ[MPID_nem_mem_region.rank])); */
/* these are allocated in MPID_nem_mpich_init, not MPID_nem_init */
- MPIU_Free(MPID_nem_recv_seqno);
- MPIU_Free(MPID_nem_fboxq_elem_list);
+ MPL_free(MPID_nem_recv_seqno);
+ MPL_free(MPID_nem_fboxq_elem_list);
/* from MPID_nem_init */
- MPIU_Free(MPID_nem_mem_region.FreeQ);
- MPIU_Free(MPID_nem_mem_region.RecvQ);
- MPIU_Free(MPID_nem_mem_region.local_ranks);
+ MPL_free(MPID_nem_mem_region.FreeQ);
+ MPL_free(MPID_nem_mem_region.RecvQ);
+ MPL_free(MPID_nem_mem_region.local_ranks);
if (MPID_nem_mem_region.ext_procs > 0)
- MPIU_Free(MPID_nem_mem_region.ext_ranks);
- MPIU_Free(MPID_nem_mem_region.seg);
- MPIU_Free(MPID_nem_mem_region.mailboxes.out);
- MPIU_Free(MPID_nem_mem_region.mailboxes.in);
+ MPL_free(MPID_nem_mem_region.ext_ranks);
+ MPL_free(MPID_nem_mem_region.seg);
+ MPL_free(MPID_nem_mem_region.mailboxes.out);
+ MPL_free(MPID_nem_mem_region.mailboxes.in);
- MPIU_Free(MPID_nem_mem_region.local_procs);
+ MPL_free(MPID_nem_mem_region.local_procs);
#ifdef MEM_REGION_IN_HEAP
- MPIU_Free(MPID_nem_mem_region_ptr);
+ MPL_free(MPID_nem_mem_region_ptr);
#endif /* MEM_REGION_IN_HEAP */
mpi_errno = MPID_nem_netmod_func->finalize();
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
/* free the shared memory segment */
- mpi_errno = MPIDI_CH3I_Seg_destroy();
+ mpi_errno = MPIDU_shm_seg_destroy(&MPID_nem_mem_region.memory, MPID_nem_mem_region.num_local);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
#ifdef PAPI_MONITOR
@@ -58,11 +58,11 @@ int MPID_nem_finalize(void)
#endif /*PAPI_MONITOR */
if (ENABLE_PVAR_NEM) {
- MPIU_Free(MPID_nem_fbox_fall_back_to_queue_count);
+ MPL_free(MPID_nem_fbox_fall_back_to_queue_count);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
index 08100fc..5f445bb 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
@@ -66,14 +66,6 @@ char MPID_nem_hostname[MAX_HOSTNAME_LEN] = "UNKNOWN";
static int get_local_procs(MPIDI_PG_t *pg, int our_pg_rank, int *num_local_p,
int **local_procs_p, int *local_rank_p);
-#ifndef MIN
-#define MIN( a , b ) ((a) > (b)) ? (b) : (a)
-#endif /* MIN */
-
-#ifndef MAX
-#define MAX( a , b ) ((a) >= (b)) ? (a) : (b)
-#endif /* MAX */
-
char *MPID_nem_asymm_base_addr = 0;
/* used by mpid_nem_inline.h and mpid_nem_finalize.c */
@@ -88,7 +80,7 @@ static int MPID_nem_init_stats(int n_local_ranks)
int mpi_errno = MPI_SUCCESS;
if (ENABLE_PVAR_NEM) {
- MPID_nem_fbox_fall_back_to_queue_count = MPIU_Calloc(n_local_ranks, sizeof(unsigned long long));
+ MPID_nem_fbox_fall_back_to_queue_count = MPL_calloc(n_local_ranks, sizeof(unsigned long long));
}
MPIR_T_PVAR_COUNTER_REGISTER_DYNAMIC(
@@ -135,7 +127,7 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
MPID_nem_queue_t *recv_queues_p = NULL;
MPID_nem_queue_t *free_queues_p = NULL;
- MPIU_CHKPMEM_DECL(9);
+ MPIR_CHKPMEM_DECL(9);
/* TODO add compile-time asserts (rather than run-time) and convert most of these */
@@ -143,19 +135,19 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
packet. This is needed because we no longer include channel
packet types in the CH3 packet types to allow dynamic channel
loading. */
- MPIU_Assert(sizeof(MPIDI_CH3_nem_pkt_t) <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(sizeof(MPIDI_CH3_nem_pkt_t) <= sizeof(MPIDI_CH3_Pkt_t));
/* The MPID_nem_cell_rel_ptr_t defined in mpid_nem_datatypes.h
should only contain a OPA_ptr_t. This is to check that
absolute pointers are exactly the same size as relative
pointers. */
- MPIU_Assert(sizeof(MPID_nem_cell_rel_ptr_t) == sizeof(OPA_ptr_t));
+ MPIR_Assert(sizeof(MPID_nem_cell_rel_ptr_t) == sizeof(OPA_ptr_t));
/* Make sure the cell structure looks like it should */
- MPIU_Assert(MPID_NEM_CELL_PAYLOAD_LEN + MPID_NEM_CELL_HEAD_LEN == sizeof(MPID_nem_cell_t));
- MPIU_Assert(sizeof(MPID_nem_cell_t) == sizeof(MPID_nem_abs_cell_t));
+ MPIR_Assert(MPID_NEM_CELL_PAYLOAD_LEN + MPID_NEM_CELL_HEAD_LEN == sizeof(MPID_nem_cell_t));
+ MPIR_Assert(sizeof(MPID_nem_cell_t) == sizeof(MPID_nem_abs_cell_t));
/* Make sure payload is aligned on a double */
- MPIU_Assert(MPID_NEM_ALIGNED(&((MPID_nem_cell_t*)0)->pkt.mpich.p.payload[0], sizeof(double)));
+ MPIR_Assert(MPID_NEM_ALIGNED(&((MPID_nem_cell_t*)0)->pkt.p.payload[0], sizeof(double)));
/* Initialize the business card */
mpi_errno = MPIDI_CH3I_BCInit( &bc_val, &val_max_remaining );
@@ -163,7 +155,7 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
publish_bc_orig = bc_val;
ret = gethostname (MPID_nem_hostname, MAX_HOSTNAME_LEN);
- MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**sock_gethost", "**sock_gethost %s %d", MPIU_Strerror (errno), errno);
+ MPIR_ERR_CHKANDJUMP2 (ret == -1, mpi_errno, MPI_ERR_OTHER, "**sock_gethost", "**sock_gethost %s %d", MPIR_Strerror (errno), errno);
MPID_nem_hostname[MAX_HOSTNAME_LEN-1] = '\0';
@@ -171,20 +163,20 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
#ifdef MEM_REGION_IN_HEAP
- MPIU_CHKPMEM_MALLOC (MPID_nem_mem_region_ptr, MPID_nem_mem_region_t *, sizeof(MPID_nem_mem_region_t), mpi_errno, "mem_region");
+ MPIR_CHKPMEM_MALLOC (MPID_nem_mem_region_ptr, MPID_nem_mem_region_t *, sizeof(MPID_nem_mem_region_t), mpi_errno, "mem_region");
#endif /* MEM_REGION_IN_HEAP */
MPID_nem_mem_region.num_seg = 7;
- MPIU_CHKPMEM_MALLOC (MPID_nem_mem_region.seg, MPID_nem_seg_info_ptr_t, MPID_nem_mem_region.num_seg * sizeof(MPID_nem_seg_info_t), mpi_errno, "mem_region segments");
+ MPIR_CHKPMEM_MALLOC (MPID_nem_mem_region.seg, MPIDU_shm_seg_info_ptr_t, MPID_nem_mem_region.num_seg * sizeof(MPIDU_shm_seg_info_t), mpi_errno, "mem_region segments");
MPID_nem_mem_region.rank = pg_rank;
MPID_nem_mem_region.num_local = num_local;
MPID_nem_mem_region.num_procs = num_procs;
MPID_nem_mem_region.local_procs = local_procs;
MPID_nem_mem_region.local_rank = local_rank;
- MPIU_CHKPMEM_MALLOC (MPID_nem_mem_region.local_ranks, int *, num_procs * sizeof(int), mpi_errno, "mem_region local ranks");
+ MPIR_CHKPMEM_MALLOC (MPID_nem_mem_region.local_ranks, int *, num_procs * sizeof(int), mpi_errno, "mem_region local ranks");
MPID_nem_mem_region.ext_procs = num_procs - num_local ;
if (MPID_nem_mem_region.ext_procs > 0)
- MPIU_CHKPMEM_MALLOC (MPID_nem_mem_region.ext_ranks, int *, MPID_nem_mem_region.ext_procs * sizeof(int), mpi_errno, "mem_region ext ranks");
+ MPIR_CHKPMEM_MALLOC (MPID_nem_mem_region.ext_ranks, int *, MPID_nem_mem_region.ext_procs * sizeof(int), mpi_errno, "mem_region ext ranks");
MPID_nem_mem_region.next = NULL;
for (idx = 0 ; idx < num_procs; idx++)
@@ -214,61 +206,73 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
communication is allocated it will probably be mapped at a
different location for each process
*/
- MPIU_SHMW_Hnd_t handle;
+ MPL_shm_hnd_t handle;
int size = (local_rank * 65536) + 65536;
char *base_addr;
- mpi_errno = MPIU_SHMW_Hnd_init(&handle);
+ mpi_errno = MPL_shm_hnd_init(&handle);
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
- mpi_errno = MPIU_SHMW_Seg_create_and_attach(handle, size, &base_addr, 0);
+ mpi_errno = MPL_shm_seg_create_and_attach(handle, size, &base_addr, 0);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno)
{
- MPIU_SHMW_Seg_remove(handle);
- MPIU_SHMW_Hnd_finalize(&handle);
+ MPL_shm_seg_remove(handle);
+ MPL_shm_hnd_finalize(&handle);
MPIR_ERR_POP (mpi_errno);
}
/* --END ERROR HANDLING-- */
- mpi_errno = MPIU_SHMW_Seg_remove(handle);
+ mpi_errno = MPL_shm_seg_remove(handle);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno)
{
- MPIU_SHMW_Hnd_finalize(&handle);
+ MPL_shm_hnd_finalize(&handle);
MPIR_ERR_POP (mpi_errno);
}
/* --END ERROR HANDLING-- */
- MPIU_SHMW_Hnd_finalize(&handle);
+ MPL_shm_hnd_finalize(&handle);
}
/*fprintf(stderr,"[%i] -- address shift ok \n",pg_rank); */
#endif /*FORCE_ASYM */
/* Request fastboxes region */
- mpi_errno = MPIDI_CH3I_Seg_alloc(MAX((num_local*((num_local-1)*sizeof(MPID_nem_fastbox_t))), MPID_NEM_ASYMM_NULL_VAL),
+ mpi_errno = MPIDU_shm_seg_alloc(MPL_MAX((num_local*((num_local-1)*sizeof(MPID_nem_fastbox_t))), MPID_NEM_ASYMM_NULL_VAL),
(void **)&fastboxes_p);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Request data cells region */
- mpi_errno = MPIDI_CH3I_Seg_alloc(num_local * MPID_NEM_NUM_CELLS * sizeof(MPID_nem_cell_t), (void **)&cells_p);
+ mpi_errno = MPIDU_shm_seg_alloc(num_local * MPID_NEM_NUM_CELLS * sizeof(MPID_nem_cell_t), (void **)&cells_p);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Request free q region */
- mpi_errno = MPIDI_CH3I_Seg_alloc(num_local * sizeof(MPID_nem_queue_t), (void **)&free_queues_p);
+ mpi_errno = MPIDU_shm_seg_alloc(num_local * sizeof(MPID_nem_queue_t), (void **)&free_queues_p);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Request recv q region */
- mpi_errno = MPIDI_CH3I_Seg_alloc(num_local * sizeof(MPID_nem_queue_t), (void **)&recv_queues_p);
+ mpi_errno = MPIDU_shm_seg_alloc(num_local * sizeof(MPID_nem_queue_t), (void **)&recv_queues_p);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Request shared collectives barrier vars region */
- mpi_errno = MPIDI_CH3I_Seg_alloc(MPID_NEM_NUM_BARRIER_VARS * sizeof(MPID_nem_barrier_vars_t),
+ mpi_errno = MPIDU_shm_seg_alloc(MPID_NEM_NUM_BARRIER_VARS * sizeof(MPID_nem_barrier_vars_t),
(void **)&MPID_nem_mem_region.barrier_vars);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Actually allocate the segment and assign regions to the pointers */
- mpi_errno = MPIDI_CH3I_Seg_commit(&MPID_nem_mem_region.memory, num_local, local_rank);
+ mpi_errno = MPIDU_shm_seg_commit(&MPID_nem_mem_region.memory, &MPID_nem_mem_region.barrier,
+ num_local, local_rank, MPID_nem_mem_region.local_procs[0],
+ MPID_nem_mem_region.rank);
+ /* check_alloc steps */
+ if (MPID_nem_mem_region.memory.symmetrical == 1) {
+ MPID_nem_asymm_base_addr = NULL;
+ } else {
+ MPID_nem_asymm_base_addr = MPID_nem_mem_region.memory.base_addr;
+#ifdef MPID_NEM_SYMMETRIC_QUEUES
+ MPIR_ERR_INTERNALANDJUMP(mpi_errno, "queues are not symmetrically allocated as expected");
+#endif
+ }
+
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
/* init shared collectives barrier region */
@@ -276,15 +280,15 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
/* local procs barrier */
- mpi_errno = MPID_nem_barrier();
+ mpi_errno = MPIDU_shm_barrier(MPID_nem_mem_region.barrier, num_local);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
/* find our cell region */
MPID_nem_mem_region.Elements = cells_p[local_rank];
/* Tables of pointers to shared memory Qs */
- MPIU_CHKPMEM_MALLOC(MPID_nem_mem_region.FreeQ, MPID_nem_queue_ptr_t *, num_procs * sizeof(MPID_nem_queue_ptr_t), mpi_errno, "FreeQ");
- MPIU_CHKPMEM_MALLOC(MPID_nem_mem_region.RecvQ, MPID_nem_queue_ptr_t *, num_procs * sizeof(MPID_nem_queue_ptr_t), mpi_errno, "RecvQ");
+ MPIR_CHKPMEM_MALLOC(MPID_nem_mem_region.FreeQ, MPID_nem_queue_ptr_t *, num_procs * sizeof(MPID_nem_queue_ptr_t), mpi_errno, "FreeQ");
+ MPIR_CHKPMEM_MALLOC(MPID_nem_mem_region.RecvQ, MPID_nem_queue_ptr_t *, num_procs * sizeof(MPID_nem_queue_ptr_t), mpi_errno, "RecvQ");
/* Init table entry for our Qs */
MPID_nem_mem_region.FreeQ[pg_rank] = &free_queues_p[local_rank];
@@ -341,8 +345,8 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
MPID_nem_mem_region.FreeQ[grank] = &free_queues_p[idx];
MPID_nem_mem_region.RecvQ[grank] = &recv_queues_p[idx];
- MPIU_Assert(MPID_NEM_ALIGNED(MPID_nem_mem_region.FreeQ[grank], MPID_NEM_CACHE_LINE_LEN));
- MPIU_Assert(MPID_NEM_ALIGNED(MPID_nem_mem_region.RecvQ[grank], MPID_NEM_CACHE_LINE_LEN));
+ MPIR_Assert(MPID_NEM_ALIGNED(MPID_nem_mem_region.FreeQ[grank], MPID_NEM_CACHE_LINE_LEN));
+ MPIR_Assert(MPID_NEM_ALIGNED(MPID_nem_mem_region.RecvQ[grank], MPID_NEM_CACHE_LINE_LEN));
}
/* make pointers to our queues global so we don't have to dereference the array */
@@ -351,15 +355,15 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
/* local barrier */
- mpi_errno = MPID_nem_barrier();
+ mpi_errno = MPIDU_shm_barrier(MPID_nem_mem_region.barrier, num_local);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Allocate table of pointers to fastboxes */
- MPIU_CHKPMEM_MALLOC(MPID_nem_mem_region.mailboxes.in, MPID_nem_fastbox_t **, num_local * sizeof(MPID_nem_fastbox_t *), mpi_errno, "fastboxes");
- MPIU_CHKPMEM_MALLOC(MPID_nem_mem_region.mailboxes.out, MPID_nem_fastbox_t **, num_local * sizeof(MPID_nem_fastbox_t *), mpi_errno, "fastboxes");
+ MPIR_CHKPMEM_MALLOC(MPID_nem_mem_region.mailboxes.in, MPID_nem_fastbox_t **, num_local * sizeof(MPID_nem_fastbox_t *), mpi_errno, "fastboxes");
+ MPIR_CHKPMEM_MALLOC(MPID_nem_mem_region.mailboxes.out, MPID_nem_fastbox_t **, num_local * sizeof(MPID_nem_fastbox_t *), mpi_errno, "fastboxes");
- MPIU_Assert(num_local > 0);
+ MPIR_Assert(num_local > 0);
#define MAILBOX_INDEX(sender, receiver) ( ((sender) > (receiver)) ? ((num_local-1) * (sender) + (receiver)) : \
(((sender) < (receiver)) ? ((num_local-1) * (sender) + ((receiver)-1)) : 0) )
@@ -399,14 +403,14 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
/* publish business card */
mpi_errno = MPIDI_PG_SetConnInfo(pg_rank, (const char *)publish_bc_orig);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Free(publish_bc_orig);
+ MPL_free(publish_bc_orig);
- mpi_errno = MPID_nem_barrier();
+ mpi_errno = MPIDU_shm_barrier(MPID_nem_mem_region.barrier, num_local);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = MPID_nem_mpich_init();
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPID_nem_barrier();
+ mpi_errno = MPIDU_shm_barrier(MPID_nem_mem_region.barrier, num_local);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
#ifdef ENABLE_CHECKPOINTING
mpi_errno = MPIDI_nem_ckpt_init();
@@ -419,12 +423,12 @@ MPID_nem_init(int pg_rank, MPIDI_PG_t *pg_p, int has_parent ATTRIBUTE((unused)))
MPID_nem_init_stats(num_local);
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
@@ -440,10 +444,10 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_VC_INIT);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_VC_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_VC_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_VC_INIT);
vc_ch->pkt_handler = NULL;
vc_ch->num_pkt_handlers = 0;
@@ -457,7 +461,7 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
vc_ch->ckpt_restart_vc = NULL;
#endif
vc_ch->pending_pkt_len = 0;
- MPIU_CHKPMEM_MALLOC (vc_ch->pending_pkt, MPIDI_CH3_Pkt_t *, sizeof (MPIDI_CH3_Pkt_t), mpi_errno, "pending_pkt");
+ MPIR_CHKPMEM_MALLOC (vc_ch->pending_pkt, MPIDI_CH3_Pkt_t *, sizeof (MPIDI_CH3_Pkt_t), mpi_errno, "pending_pkt");
/* We do different things for vcs in the COMM_WORLD pg vs other pgs
COMM_WORLD vcs may use shared memory, and already have queues allocated
@@ -536,9 +540,9 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
#endif
vc_ch->lmt_copy_buf = NULL;
- mpi_errno = MPIU_SHMW_Hnd_init(&(vc_ch->lmt_copy_buf_handle));
+ mpi_errno = MPL_shm_hnd_init(&(vc_ch->lmt_copy_buf_handle));
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
- mpi_errno = MPIU_SHMW_Hnd_init(&(vc_ch->lmt_recv_copy_buf_handle));
+ mpi_errno = MPL_shm_hnd_init(&(vc_ch->lmt_recv_copy_buf_handle));
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
vc_ch->lmt_queue.head = NULL;
vc_ch->lmt_queue.tail = NULL;
@@ -557,7 +561,7 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
else
vc->ready_eager_max_msg_sz = MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ;
- MPIU_DBG_MSG(VC, VERBOSE, "vc using shared memory");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_VC, VERBOSE, "vc using shared memory");
}
else
{
@@ -577,7 +581,7 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
vc_ch->iStartContigMsg = NULL;
vc_ch->iSendContig = NULL;
- MPIU_DBG_MSG_FMT(VC, VERBOSE, (MPIU_DBG_FDEST, "vc using %s netmod for rank %d pg %s",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_VC, VERBOSE, (MPL_DBG_FDEST, "vc using %s netmod for rank %d pg %s",
MPID_nem_netmod_strings[MPID_nem_netmod_id], vc->pg_rank,
((vc->pg == MPIDI_Process.my_pg)
? "my_pg"
@@ -595,7 +599,7 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
/* /\* iStartContigMsg iSendContig and sendNoncontig_fn must */
/* be set for nonlocal processes. Default functions only */
/* support shared-memory communication. *\/ */
-/* MPIU_Assert(vc_ch->iStartContigMsg && vc_ch->iSendContig && vc->sendNoncontig_fn); */
+/* MPIR_Assert(vc_ch->iStartContigMsg && vc_ch->iSendContig && vc->sendNoncontig_fn); */
}
@@ -606,12 +610,12 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
to NULL */
vc_ch->sendq_head = NULL;
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_VC_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_VC_INIT);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -624,17 +628,17 @@ MPID_nem_vc_destroy(MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_VC_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_VC_DESTROY);
- MPIU_Free(vc_ch->pending_pkt);
+ MPL_free(vc_ch->pending_pkt);
mpi_errno = MPID_nem_netmod_func->vc_destroy(vc);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_VC_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_VC_DESTROY);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -674,12 +678,12 @@ static int get_local_procs(MPIDI_PG_t *pg, int our_pg_rank, int *num_local_p,
int i;
int num_local = 0;
MPID_Node_id_t our_node_id;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
- MPIU_Assert(our_pg_rank < pg->size);
+ MPIR_Assert(our_pg_rank < pg->size);
our_node_id = pg->vct[our_pg_rank].node_id;
- MPIU_CHKPMEM_MALLOC(procs, int *, pg->size * sizeof(int), mpi_errno, "local process index array");
+ MPIR_CHKPMEM_MALLOC(procs, int *, pg->size * sizeof(int), mpi_errno, "local process index array");
for (i = 0; i < pg->size; ++i) {
if (our_node_id == pg->vct[i].node_id) {
@@ -691,7 +695,7 @@ static int get_local_procs(MPIDI_PG_t *pg, int our_pg_rank, int *num_local_p,
}
}
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
if (num_local_p != NULL)
*num_local_p = num_local;
@@ -701,7 +705,7 @@ fn_exit:
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c
index ac077cf..e8d6758 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c
@@ -39,15 +39,15 @@ cvars:
}
/* request completion actions */
-static int do_cts(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete);
-static int do_send(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete);
-static int do_cookie(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete);
+static int do_cts(MPIDI_VC_t *vc, MPIR_Request *rreq, int *complete);
+static int do_send(MPIDI_VC_t *vc, MPIR_Request *rreq, int *complete);
+static int do_cookie(MPIDI_VC_t *vc, MPIR_Request *rreq, int *complete);
/* packet handlers */
-static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
-static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
-static int pkt_DONE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
-static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
+static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp);
+static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp);
+static int pkt_DONE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp);
+static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp);
#undef FUNCNAME
#define FUNCNAME MPID_nem_lmt_pkthandler_init
@@ -56,9 +56,9 @@ static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz
int MPID_nem_lmt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int arraySize)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT);
/* Check that the array is large enough */
if (arraySize <= MPIDI_CH3_PKT_END_ALL) {
@@ -71,7 +71,7 @@ int MPID_nem_lmt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int array
pktArray[MPIDI_NEM_PKT_LMT_COOKIE] = pkt_COOKIE_handler;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_PKTHANDLER_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -82,18 +82,18 @@ int MPID_nem_lmt_pkthandler_init(MPIDI_CH3_PktHandler_Fcn *pktArray[], int array
#define FUNCNAME MPID_nem_lmt_RndvSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_RndvSend(MPID_Request **sreq_p, const void * buf, MPI_Aint count,
+int MPID_nem_lmt_RndvSend(MPIR_Request **sreq_p, const void * buf, MPI_Aint count,
MPI_Datatype datatype, int dt_contig ATTRIBUTE((unused)),
- MPIDI_msg_sz_t data_sz, MPI_Aint dt_true_lb ATTRIBUTE((unused)),
- int rank, int tag, MPID_Comm * comm, int context_offset)
+ intptr_t data_sz, MPI_Aint dt_true_lb ATTRIBUTE((unused)),
+ int rank, int tag, MPIR_Comm * comm, int context_offset)
{
int mpi_errno = MPI_SUCCESS;
MPID_PKT_DECL_CAST(upkt, MPID_nem_pkt_lmt_rts_t, rts_pkt);
MPIDI_VC_t *vc;
- MPID_Request *sreq =*sreq_p;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_RNDVSEND);
+ MPIR_Request *sreq =*sreq_p;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_RNDVSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_RNDVSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_RNDVSEND);
MPIDI_Comm_get_vc_set_active(comm, rank, &vc);
@@ -105,9 +105,9 @@ int MPID_nem_lmt_RndvSend(MPID_Request **sreq_p, const void * buf, MPI_Aint coun
goto fn_exit;
}
- MPIU_DBG_MSG_D(CH3_OTHER,VERBOSE,
- "sending lmt RTS, data_sz=" MPIDI_MSG_SZ_FMT, data_sz);
- sreq->partner_request = NULL;
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,
+ "sending lmt RTS, data_sz=%" PRIdPTR, data_sz);
+ sreq->dev.partner_request = NULL;
sreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = 0;
MPIDI_Pkt_init(rts_pkt, MPIDI_NEM_PKT_LMT_RTS);
@@ -132,7 +132,7 @@ int MPID_nem_lmt_RndvSend(MPID_Request **sreq_p, const void * buf, MPI_Aint coun
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_RNDVSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_RNDVSEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -146,13 +146,13 @@ int MPID_nem_lmt_RndvSend(MPID_Request **sreq_p, const void * buf, MPI_Aint coun
#define FUNCNAME MPID_nem_lmt_RndvRecv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_RndvRecv(MPIDI_VC_t *vc, MPID_Request *rreq)
+int MPID_nem_lmt_RndvRecv(MPIDI_VC_t *vc, MPIR_Request *rreq)
{
int mpi_errno = MPI_SUCCESS;
int complete = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_RNDVRECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_RNDVRECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_RNDVRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_RNDVRECV);
/* if the lmt functions are not set, fall back to the default rendezvous code */
if (vc->ch.lmt_initiate_lmt == NULL)
@@ -162,15 +162,15 @@ int MPID_nem_lmt_RndvRecv(MPIDI_VC_t *vc, MPID_Request *rreq)
goto fn_exit;
}
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE, "lmt RTS in the request");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE, "lmt RTS in the request");
mpi_errno = do_cts(vc, rreq, &complete);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(complete);
+ MPIR_Assert(complete);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_RNDVRECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_RNDVRECV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -180,22 +180,21 @@ int MPID_nem_lmt_RndvRecv(MPIDI_VC_t *vc, MPID_Request *rreq)
#define FUNCNAME pkt_RTS_handler
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
MPID_nem_pkt_lmt_rts_t * const rts_pkt = (MPID_nem_pkt_lmt_rts_t *)pkt;
- char *data_buf;
- MPIDI_msg_sz_t data_len;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_PKT_RTS_HANDLER);
+ intptr_t data_len;
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PKT_RTS_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_PKT_RTS_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PKT_RTS_HANDLER);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST, "received LMT RTS pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST, "received LMT RTS pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d, data_sz=%" PRIdPTR,
rts_pkt->sender_req_id, rts_pkt->match.parts.rank, rts_pkt->match.parts.tag, rts_pkt->match.parts.context_id,
rts_pkt->data_sz));
@@ -205,7 +204,7 @@ static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
/* If the completion counter is 0, that means that the communicator to
* which this message is being sent has been revoked and we shouldn't
* bother finishing this. */
- if (!found && MPID_cc_get(rreq->cc) == 0) {
+ if (!found && MPIR_cc_get(rreq->cc) == 0) {
*rreqp = NULL;
goto fn_exit;
}
@@ -215,33 +214,32 @@ static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
rreq->ch.lmt_req_id = rts_pkt->sender_req_id;
rreq->ch.lmt_data_sz = rts_pkt->data_sz;
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *)pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
if (data_len < rts_pkt->cookie_len)
{
/* set for the cookie to be received into the tmp_cookie in the request */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"haven't received entire cookie");
- MPIU_CHKPMEM_MALLOC(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, rts_pkt->cookie_len, mpi_errno, "tmp cookie buf");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"haven't received entire cookie");
+ MPIR_CHKPMEM_MALLOC(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, rts_pkt->cookie_len, mpi_errno, "tmp cookie buf");
rreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = rts_pkt->cookie_len;
rreq->dev.iov[0] = rreq->ch.lmt_tmp_cookie;
rreq->dev.iov_count = 1;
*rreqp = rreq;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
if (found)
{
/* set do_cts() to be called once we've received the entire cookie */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"posted request found");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"posted request found");
rreq->dev.OnDataAvail = do_cts;
}
else
{
/* receive the rest of the cookie and wait for a match */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"unexpected request allocated");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"unexpected request allocated");
rreq->dev.OnDataAvail = 0;
MPIDI_CH3_Progress_signal_completion();
}
@@ -253,18 +251,18 @@ static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
/* there's no cookie to receive */
rreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = 0;
rreq->dev.iov_count = 0;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
}
else
{
/* receive cookie into tmp_cookie in the request */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"received entire cookie");
- MPIU_CHKPMEM_MALLOC(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, rts_pkt->cookie_len, mpi_errno, "tmp cookie buf");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"received entire cookie");
+ MPIR_CHKPMEM_MALLOC(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, rts_pkt->cookie_len, mpi_errno, "tmp cookie buf");
rreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = rts_pkt->cookie_len;
- MPIU_Memcpy(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, data_buf, rts_pkt->cookie_len);
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + rts_pkt->cookie_len;
+ MPIR_Memcpy(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, data, rts_pkt->cookie_len);
+ *buflen = rts_pkt->cookie_len;
*rreqp = NULL;
}
@@ -272,14 +270,14 @@ static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
{
/* have a matching request and the entire cookie (if any), call do_cts() */
int complete;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"posted request found");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"posted request found");
mpi_errno = do_cts(vc, rreq, &complete);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(complete);
+ MPIR_Assert(complete);
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"unexpected request allocated");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"unexpected request allocated");
rreq->dev.OnDataAvail = 0;
MPIDI_CH3_Progress_signal_completion();
}
@@ -287,13 +285,13 @@ static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
}
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_PKT_RTS_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PKT_RTS_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -301,25 +299,23 @@ static int pkt_RTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
#define FUNCNAME pkt_CTS_handler
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp)
{
MPID_nem_pkt_lmt_cts_t * const cts_pkt = (MPID_nem_pkt_lmt_cts_t *)pkt;
- MPID_Request *sreq;
- MPID_Request *rts_sreq;
- char *data_buf;
- MPIDI_msg_sz_t data_len;
+ MPIR_Request *sreq;
+ MPIR_Request *rts_sreq;
+ intptr_t data_len;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_PKT_CTS_HANDLER);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PKT_CTS_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_PKT_CTS_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PKT_CTS_HANDLER);
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"received rndv CTS pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"received rndv CTS pkt");
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *)pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
- MPID_Request_get_ptr(cts_pkt->sender_req_id, sreq);
+ MPIR_Request_get_ptr(cts_pkt->sender_req_id, sreq);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
if (MPIR_CVAR_ENABLE_FT) {
@@ -332,36 +328,36 @@ static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
sreq->ch.lmt_data_sz = cts_pkt->data_sz;
/* Release the RTS request if one exists.
- MPID_Request_fetch_and_clear_rts_sreq() needs to be atomic to
+ MPIR_Request_fetch_and_clear_rts_sreq() needs to be atomic to
prevent cancel send from cancelling the wrong (future) request.
- If MPID_Request_fetch_and_clear_rts_sreq() returns a NULL
+ If MPIR_Request_fetch_and_clear_rts_sreq() returns a NULL
rts_sreq, then MPID_Cancel_send() is responsible for releasing
the RTS request object. */
MPIDI_Request_fetch_and_clear_rts_sreq(sreq, &rts_sreq);
if (rts_sreq != NULL)
- MPID_Request_release(rts_sreq);
+ MPIR_Request_free(rts_sreq);
if (cts_pkt->cookie_len != 0)
{
if (data_len >= cts_pkt->cookie_len)
{
/* if whole cookie has been received, start the send */
- sreq->ch.lmt_tmp_cookie.MPL_IOV_BUF = data_buf;
+ sreq->ch.lmt_tmp_cookie.MPL_IOV_BUF = data;
sreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = cts_pkt->cookie_len;
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
mpi_errno = vc->ch.lmt_start_send(vc, sreq, sreq->ch.lmt_tmp_cookie);
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
sreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = 0;
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + cts_pkt->cookie_len;
+ *buflen = cts_pkt->cookie_len;
*rreqp = NULL;
}
else
{
/* create a recv req and set up to receive the cookie into the sreq's tmp_cookie */
- MPID_Request *rreq;
+ MPIR_Request *rreq;
- MPIU_CHKPMEM_MALLOC(sreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, cts_pkt->cookie_len, mpi_errno, "tmp cookie buf");
+ MPIR_CHKPMEM_MALLOC(sreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, cts_pkt->cookie_len, mpi_errno, "tmp cookie buf");
sreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = cts_pkt->cookie_len;
MPIDI_Request_create_rreq(rreq, mpi_errno, goto fn_fail);
@@ -371,7 +367,7 @@ static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
rreq->dev.iov_count = 1;
rreq->ch.lmt_req = sreq;
rreq->dev.OnDataAvail = do_send;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = rreq;
}
}
@@ -382,16 +378,16 @@ static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
mpi_errno = vc->ch.lmt_start_send(vc, sreq, cookie);
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_PKT_CTS_HANDLER);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PKT_CTS_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -399,17 +395,18 @@ static int pkt_CTS_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
#define FUNCNAME pkt_DONE_handler
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int pkt_DONE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+static int pkt_DONE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_pkt_lmt_done_t * const done_pkt = (MPID_nem_pkt_lmt_done_t *)pkt;
- MPID_Request *req;
- MPIDI_STATE_DECL(MPID_STATE_PKT_DONE_HANDLER);
+ MPIR_Request *req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PKT_DONE_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_PKT_DONE_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PKT_DONE_HANDLER);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
- MPID_Request_get_ptr(done_pkt->req_id, req);
+ *buflen = 0;
+ MPIR_Request_get_ptr(done_pkt->req_id, req);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
@@ -435,7 +432,7 @@ static int pkt_DONE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_PKT_DONE_HANDLER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PKT_DONE_HANDLER);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -445,29 +442,27 @@ static int pkt_DONE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t
#define FUNCNAME pkt_COOKIE_handler
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data, intptr_t *buflen, MPIR_Request **rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_pkt_lmt_cookie_t * const cookie_pkt = (MPID_nem_pkt_lmt_cookie_t *)pkt;
- MPID_Request *req;
- char *data_buf;
- MPIDI_msg_sz_t data_len;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_PKT_COOKIE_HANDLER);
+ MPIR_Request *req;
+ intptr_t data_len;
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_PKT_COOKIE_HANDLER);
- MPIDI_FUNC_ENTER(MPID_STATE_PKT_COOKIE_HANDLER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_PKT_COOKIE_HANDLER);
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *)pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
if (cookie_pkt->from_sender) {
- MPID_Request_get_ptr(cookie_pkt->receiver_req_id, req);
- MPIU_Assert(req != NULL);
+ MPIR_Request_get_ptr(cookie_pkt->receiver_req_id, req);
+ MPIR_Assert(req != NULL);
req->ch.lmt_req_id = cookie_pkt->sender_req_id;
}
else {
- MPID_Request_get_ptr(cookie_pkt->sender_req_id, req);
- MPIU_Assert(req != NULL);
+ MPIR_Request_get_ptr(cookie_pkt->sender_req_id, req);
+ MPIR_Assert(req != NULL);
req->ch.lmt_req_id = cookie_pkt->receiver_req_id;
}
@@ -478,7 +473,7 @@ static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz
/* call handle cookie with cookie data in receive buffer */
MPL_IOV cookie;
- cookie.MPL_IOV_BUF = data_buf;
+ cookie.MPL_IOV_BUF = data;
cookie.MPL_IOV_LEN = cookie_pkt->cookie_len;
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
mpi_errno = vc->ch.lmt_handle_cookie(vc, req, cookie);
@@ -486,15 +481,15 @@ static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
*rreqp = NULL;
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + cookie_pkt->cookie_len;
+ *buflen = cookie_pkt->cookie_len;
}
else
{
/* create a recv req and set up to receive the cookie into the rreq's tmp_cookie */
- MPID_Request *rreq;
+ MPIR_Request *rreq;
MPIDI_Request_create_rreq(rreq, mpi_errno, goto fn_fail);
- MPIU_CHKPMEM_MALLOC(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, cookie_pkt->cookie_len, mpi_errno, "tmp cookie buf");
+ MPIR_CHKPMEM_MALLOC(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF, char *, cookie_pkt->cookie_len, mpi_errno, "tmp cookie buf");
/* FIXME: where does this request get freed? */
rreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = cookie_pkt->cookie_len;
@@ -503,7 +498,7 @@ static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz
rreq->ch.lmt_req = req;
rreq->dev.OnDataAvail = do_cookie;
*rreqp = rreq;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
}
}
else
@@ -519,11 +514,11 @@ static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz
}
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_PKT_COOKIE_HANDLER);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_PKT_COOKIE_HANDLER);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -532,19 +527,19 @@ static int pkt_COOKIE_handler(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIDI_msg_sz
#define FUNCNAME do_cts
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int do_cts(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
+static int do_cts(MPIDI_VC_t *vc, MPIR_Request *rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig ATTRIBUTE((unused));
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPID_Datatype * dt_ptr;
+ MPIDU_Datatype* dt_ptr;
MPL_IOV s_cookie;
- MPIDI_STATE_DECL(MPID_STATE_DO_CTS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_DO_CTS);
- MPIDI_FUNC_ENTER(MPID_STATE_DO_CTS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_DO_CTS);
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"posted request found");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"posted request found");
/* determine amount of data to be transfered and check for truncation */
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
@@ -564,14 +559,14 @@ static int do_cts(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
/* free cookie buffer allocated in RTS handler */
if (rreq->ch.lmt_tmp_cookie.MPL_IOV_LEN)
{
- MPIU_Free(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF);
+ MPL_free(rreq->ch.lmt_tmp_cookie.MPL_IOV_BUF);
rreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = 0;
}
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_DO_CTS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_DO_CTS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -581,14 +576,14 @@ static int do_cts(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
#define FUNCNAME do_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int do_send(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
+static int do_send(MPIDI_VC_t *vc, MPIR_Request *rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
MPL_IOV r_cookie;
- MPID_Request * const sreq = rreq->ch.lmt_req;
- MPIDI_STATE_DECL(MPID_STATE_DO_SEND);
+ MPIR_Request * const sreq = rreq->ch.lmt_req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_DO_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_DO_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_DO_SEND);
r_cookie = sreq->ch.lmt_tmp_cookie;
@@ -598,13 +593,13 @@ static int do_send(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* free cookie buffer allocated in CTS handler */
- MPIU_Free(sreq->ch.lmt_tmp_cookie.MPL_IOV_BUF);
+ MPL_free(sreq->ch.lmt_tmp_cookie.MPL_IOV_BUF);
sreq->ch.lmt_tmp_cookie.MPL_IOV_LEN = 0;
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_DO_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_DO_SEND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -614,14 +609,14 @@ static int do_send(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
#define FUNCNAME do_cookie
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int do_cookie(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
+static int do_cookie(MPIDI_VC_t *vc, MPIR_Request *rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
MPL_IOV cookie;
- MPID_Request *req = rreq->ch.lmt_req;
- MPIDI_STATE_DECL(MPID_STATE_DO_COOKIE);
+ MPIR_Request *req = rreq->ch.lmt_req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_DO_COOKIE);
- MPIDI_FUNC_ENTER(MPID_STATE_DO_COOKIE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_DO_COOKIE);
cookie = req->ch.lmt_tmp_cookie;
@@ -631,13 +626,13 @@ static int do_cookie(MPIDI_VC_t *vc, MPID_Request *rreq, int *complete)
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
/* free cookie buffer allocated in COOKIE handler */
- MPIU_Free(req->ch.lmt_tmp_cookie.MPL_IOV_BUF);
+ MPL_free(req->ch.lmt_tmp_cookie.MPL_IOV_BUF);
req->ch.lmt_tmp_cookie.MPL_IOV_LEN = 0;
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_DO_COOKIE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_DO_COOKIE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_dma.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_dma.c
index 217f78c..12b63cb 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_dma.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_dma.c
@@ -48,7 +48,7 @@ static volatile knem_status_t *knem_status = MAP_FAILED;
struct lmt_dma_node {
struct lmt_dma_node *next;
MPIDI_VC_t *vc; /* seems like this should be in the request somewhere, but it's not */
- MPID_Request *req; /* do we need to store type too? */
+ MPIR_Request *req; /* do we need to store type too? */
volatile knem_status_t *status_p;
};
@@ -90,7 +90,7 @@ static int open_knem_dev(void)
"**shm_open %s %d", KNEM_DEVICE_FILENAME, errno);
err = ioctl(knem_fd, KNEM_CMD_GET_INFO, &info);
MPIR_ERR_CHKANDJUMP2(err < 0, mpi_errno, MPI_ERR_OTHER, "**ioctl",
- "**ioctl %d %s", errno, MPIU_Strerror(errno));
+ "**ioctl %d %s", errno, MPIR_Strerror(errno));
MPIR_ERR_CHKANDJUMP2(info.abi != KNEM_ABI_VERSION, mpi_errno, MPI_ERR_OTHER,
"**abi_version_mismatch", "**abi_version_mismatch %D %D",
(unsigned long)KNEM_ABI_VERSION, (unsigned long)info.abi);
@@ -113,7 +113,7 @@ fn_fail:
#define FUNCNAME do_dma_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int do_dma_send(MPIDI_VC_t *vc, MPID_Request *sreq, int send_iov_n,
+static int do_dma_send(MPIDI_VC_t *vc, MPIR_Request *sreq, int send_iov_n,
MPL_IOV send_iov[], knem_cookie_t *s_cookiep)
{
int mpi_errno = MPI_SUCCESS;
@@ -147,7 +147,7 @@ static int do_dma_send(MPIDI_VC_t *vc, MPID_Request *sreq, int send_iov_n,
err = ioctl(knem_fd, KNEM_CMD_CREATE_REGION, &cr);
#endif
MPIR_ERR_CHKANDJUMP2(err < 0, mpi_errno, MPI_ERR_OTHER, "**ioctl",
- "**ioctl %d %s", errno, MPIU_Strerror(errno));
+ "**ioctl %d %s", errno, MPIR_Strerror(errno));
#if KNEM_ABI_VERSION < MPICH_NEW_KNEM_ABI_VERSION
*s_cookiep = sendcmd.send_cookie;
#else
@@ -203,7 +203,7 @@ static int do_dma_recv(int iov_n, MPL_IOV iov[], knem_cookie_t s_cookie, int nod
err = ioctl(knem_fd, KNEM_CMD_INLINE_COPY, &icopy);
#endif
MPIR_ERR_CHKANDJUMP2(err < 0, mpi_errno, MPI_ERR_OTHER, "**ioctl",
- "**ioctl %d %s", errno, MPIU_Strerror(errno));
+ "**ioctl %d %s", errno, MPIR_Strerror(errno));
#if KNEM_ABI_VERSION < MPICH_NEW_KNEM_ABI_VERSION
*status_p_p = &knem_status[recvcmd.status_index];
@@ -228,13 +228,13 @@ fn_fail:
#define FUNCNAME send_sreq_data
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int send_sreq_data(MPIDI_VC_t *vc, MPID_Request *sreq, knem_cookie_t *s_cookiep)
+static int send_sreq_data(MPIDI_VC_t *vc, MPIR_Request *sreq, knem_cookie_t *s_cookiep)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype * dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype* dt_ptr;
/* MT: this code assumes only one thread can be at this point at a time */
if (knem_fd < 0) {
@@ -261,11 +261,11 @@ static int send_sreq_data(MPIDI_VC_t *vc, MPID_Request *sreq, knem_cookie_t *s_c
/* segment_ptr may be non-null when this is a continuation of a
many-part message that we couldn't fit in one single flight of
iovs. */
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno,
MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(sreq->dev.user_buf, sreq->dev.user_count,
+ "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(sreq->dev.user_buf, sreq->dev.user_count,
sreq->dev.datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
@@ -293,10 +293,10 @@ fn_fail:
#define FUNCNAME check_req_complete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int check_req_complete(MPIDI_VC_t *vc, MPID_Request *req, int *complete)
+static inline int check_req_complete(MPIDI_VC_t *vc, MPIR_Request *req, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = req->dev.OnDataAvail;
if (reqFn) {
*complete = 0;
@@ -320,27 +320,27 @@ fn_fail:
#define FUNCNAME MPID_nem_lmt_dma_initiate_lmt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_dma_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPID_Request *sreq)
+int MPID_nem_lmt_dma_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIR_Request *sreq)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_pkt_lmt_rts_t * const rts_pkt = (MPID_nem_pkt_lmt_rts_t *)pkt;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_INITIATE_LMT);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_INITIATE_LMT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_INITIATE_LMT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_INITIATE_LMT);
- MPIU_CHKPMEM_MALLOC(sreq->ch.s_cookie, knem_cookie_t *, sizeof(knem_cookie_t), mpi_errno, "s_cookie");
+ MPIR_CHKPMEM_MALLOC(sreq->ch.s_cookie, knem_cookie_t *, sizeof(knem_cookie_t), mpi_errno, "s_cookie");
mpi_errno = send_sreq_data(vc, sreq, sreq->ch.s_cookie);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPID_nem_lmt_send_RTS(vc, rts_pkt, sreq->ch.s_cookie, sizeof(knem_cookie_t));
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_INITIATE_LMT);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_INITIATE_LMT);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -351,20 +351,20 @@ fn_fail:
#define FUNCNAME MPID_nem_lmt_dma_start_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_cookie)
+int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPIR_Request *rreq, MPL_IOV s_cookie)
{
int mpi_errno = MPI_SUCCESS;
int nodma;
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype * dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype* dt_ptr;
volatile knem_status_t *status;
knem_status_t current_status;
struct lmt_dma_node *node = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_START_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_START_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_START_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_START_RECV);
/* MT: this code assumes only one thread can be at this point at a time */
if (knem_fd < 0) {
@@ -389,12 +389,12 @@ int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_co
/* segment_ptr may be non-null when this is a continuation of a
many-part message that we couldn't fit in one single flight of
iovs. */
- MPIU_Assert(rreq->dev.segment_ptr == NULL);
- rreq->dev.segment_ptr = MPID_Segment_alloc();
+ MPIR_Assert(rreq->dev.segment_ptr == NULL);
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno,
MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
+ "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
rreq->dev.datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
@@ -405,8 +405,8 @@ int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_co
}
}
- MPIU_Assert(s_cookie.MPL_IOV_LEN == sizeof(knem_cookie_t));
- MPIU_Assert(s_cookie.MPL_IOV_BUF != NULL);
+ MPIR_Assert(s_cookie.MPL_IOV_LEN == sizeof(knem_cookie_t));
+ MPIR_Assert(s_cookie.MPL_IOV_BUF != NULL);
mpi_errno = do_dma_recv(rreq->dev.iov_count, rreq->dev.iov,
*((knem_cookie_t *)s_cookie.MPL_IOV_BUF), nodma,
&status, ¤t_status);
@@ -430,7 +430,7 @@ int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_co
if (complete) {
/* request was completed by the OnDataAvail fn */
MPID_nem_lmt_send_DONE(vc, rreq); /* tell the other side to complete its request */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
else {
@@ -443,7 +443,7 @@ int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_co
/* XXX DJG FIXME this looks like it always pushes! */
/* push request if not complete for progress checks later */
- node = MPIU_Malloc(sizeof(struct lmt_dma_node));
+ node = MPL_malloc(sizeof(struct lmt_dma_node));
node->vc = vc;
node->req = rreq;
node->status_p = status;
@@ -452,7 +452,7 @@ int MPID_nem_lmt_dma_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_co
++MPID_nem_local_lmt_pending;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_START_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_START_RECV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -462,17 +462,17 @@ fn_fail:
#define FUNCNAME MPID_nem_lmt_dma_done_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_dma_done_send(MPIDI_VC_t *vc, MPID_Request *sreq)
+int MPID_nem_lmt_dma_done_send(MPIDI_VC_t *vc, MPIR_Request *sreq)
{
int mpi_errno = MPI_SUCCESS;
int complete = 0;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_DONE_SEND);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_DONE_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_DONE_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_DONE_SEND);
/* free cookie from RTS packet */
- MPIU_Free(sreq->ch.s_cookie);
+ MPL_free(sreq->ch.s_cookie);
/* We shouldn't ever need to handle the more IOVs case here. The DONE
message should only be sent when all of the data is truly transferred.
@@ -485,7 +485,7 @@ int MPID_nem_lmt_dma_done_send(MPIDI_VC_t *vc, MPID_Request *sreq)
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
goto fn_exit;
}
@@ -495,15 +495,15 @@ int MPID_nem_lmt_dma_done_send(MPIDI_VC_t *vc, MPID_Request *sreq)
if (complete) {
/* request was completed by the OnDataAvail fn */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
goto fn_exit;
}
else {
/* There is more data to send. */
- MPIU_Assert(("should never be incomplete!", 0));
+ MPIR_Assert(("should never be incomplete!", 0));
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_DONE_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_DONE_SEND);
fn_exit:
return MPI_SUCCESS;
fn_fail:
@@ -515,12 +515,12 @@ fn_fail:
#define FUNCNAME MPID_nem_lmt_dma_handle_cookie
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_dma_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV cookie)
+int MPID_nem_lmt_dma_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV cookie)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_HANDLE_COOKIE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_HANDLE_COOKIE);
if (cookie.MPL_IOV_LEN == 0 && cookie.MPL_IOV_BUF == NULL) {
/* req is a send request, we need to initiate another knem request and
@@ -535,7 +535,7 @@ int MPID_nem_lmt_dma_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV co
/* If we were complete we should have received a DONE message instead
of a COOKIE message. */
- MPIU_Assert(!complete);
+ MPIR_Assert(!complete);
mpi_errno = do_dma_send(vc, req, req->dev.iov_count, &req->dev.iov[0], &s_cookie);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -549,7 +549,7 @@ int MPID_nem_lmt_dma_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV co
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_HANDLE_COOKIE);
return MPI_SUCCESS;
}
@@ -563,9 +563,9 @@ int MPID_nem_lmt_dma_progress(void)
struct lmt_dma_node *prev = NULL;
struct lmt_dma_node *free_me = NULL;
struct lmt_dma_node *cur = outstanding_head;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_PROGRESS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_PROGRESS);
/* Iterate over a linked-list of (req,status_idx)-tuples looking for
completed/failed requests. Currently knem only provides status to the
@@ -584,7 +584,7 @@ int MPID_nem_lmt_dma_progress(void)
if (complete) {
/* request was completed by the OnDataAvail fn */
MPID_nem_lmt_send_DONE(cur->vc, cur->req); /* tell the other side to complete its request */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
else {
@@ -607,7 +607,7 @@ int MPID_nem_lmt_dma_progress(void)
free_me = cur;
cur = cur->next;
}
- if (free_me) MPIU_Free(free_me);
+ if (free_me) MPL_free(free_me);
--MPID_nem_local_lmt_pending;
continue;
}
@@ -634,7 +634,7 @@ int MPID_nem_lmt_dma_progress(void)
cur = cur->next;
}
- if (free_me) MPIU_Free(free_me);
+ if (free_me) MPL_free(free_me);
--MPID_nem_local_lmt_pending;
continue;
@@ -653,7 +653,7 @@ int MPID_nem_lmt_dma_progress(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_PROGRESS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -666,14 +666,14 @@ fn_fail:
int MPID_nem_lmt_dma_vc_terminated(MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_VC_TERMINATED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_VC_TERMINATED);
/* Do nothing. KNEM should abort any ops with dead processes. */
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_VC_TERMINATED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -689,14 +689,14 @@ int MPID_nem_lmt_dma_vc_terminated(MPIDI_VC_t *vc)
#define FUNCNAME MPID_nem_lmt_dma_start_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_dma_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_cookie)
+int MPID_nem_lmt_dma_start_send(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV r_cookie)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_START_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_START_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_START_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_START_SEND);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_START_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_START_SEND);
return mpi_errno;
}
@@ -705,13 +705,13 @@ int MPID_nem_lmt_dma_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_coo
#define FUNCNAME MPID_nem_lmt_dma_done_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_dma_done_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
+int MPID_nem_lmt_dma_done_recv(MPIDI_VC_t *vc, MPIR_Request *rreq)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_DONE_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_DMA_DONE_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_DONE_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_DMA_DONE_RECV);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_DONE_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_DMA_DONE_RECV);
return MPI_SUCCESS;
}
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_shm.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_shm.c
index aa11809..38b8eb2 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_shm.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_shm.c
@@ -8,8 +8,7 @@
#include "mpid_nem_inline.h"
#include "mpid_nem_datatypes.h"
-#include "mpiu_os_wrappers.h"
-#if defined(USE_DBG_LOGGING) && 0
+#if defined(MPL_USE_DBG_LOGGING) && 0
#define DBG_LMT(x) x
#else
#define DBG_LMT(x)
@@ -33,8 +32,8 @@ static struct {lmt_shm_prog_element_t *head;} lmt_shm_progress_q = {NULL};
typedef struct MPID_nem_lmt_shm_wait_element
{
- int (* progress)(MPIDI_VC_t *vc, MPID_Request *req, int *done);
- MPID_Request *req;
+ int (* progress)(MPIDI_VC_t *vc, MPIR_Request *req, int *done);
+ MPIR_Request *req;
struct MPID_nem_lmt_shm_wait_element *next;
} MPID_nem_lmt_shm_wait_element_t;
@@ -68,7 +67,7 @@ typedef union
typedef union
{
- volatile MPIDI_msg_sz_t val;
+ volatile intptr_t val;
char padding[MPID_NEM_CACHE_LINE_LEN];
} MPID_nem_cacheline_msg_sz_t;
@@ -106,12 +105,12 @@ typedef struct MPID_nem_copy_buf
static inline int lmt_shm_progress_vc(MPIDI_VC_t *vc, int *done);
-static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done);
-static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done);
-static int MPID_nem_allocate_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd_t handle);
-static int MPID_nem_attach_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd_t handle);
-static int MPID_nem_detach_shm_region(MPID_nem_copy_buf_t **buf, MPIU_SHMW_Hnd_t handle);
-static int MPID_nem_delete_shm_region(MPID_nem_copy_buf_t **buf, MPIU_SHMW_Hnd_t *handle_p);
+static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPIR_Request *req, int *done);
+static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPIR_Request *req, int *done);
+static int MPID_nem_allocate_shm_region(MPID_nem_copy_buf_t **buf_p, MPL_shm_hnd_t handle);
+static int MPID_nem_attach_shm_region(MPID_nem_copy_buf_t **buf_p, MPL_shm_hnd_t handle);
+static int MPID_nem_detach_shm_region(MPID_nem_copy_buf_t **buf, MPL_shm_hnd_t handle);
+static int MPID_nem_delete_shm_region(MPID_nem_copy_buf_t **buf, MPL_shm_hnd_t *handle_p);
/* number of iterations to wait for the other side to process a buffer */
#define LMT_POLLS_BEFORE_GIVING_UP 5000
@@ -120,17 +119,17 @@ static int MPID_nem_delete_shm_region(MPID_nem_copy_buf_t **buf, MPIU_SHMW_Hnd_t
#define FUNCNAME MPID_nem_lmt_shm_initiate_lmt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_shm_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPID_Request *req)
+int MPID_nem_lmt_shm_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIR_Request *req)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig ATTRIBUTE((unused));
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPID_Datatype * dt_ptr;
+ MPIDU_Datatype* dt_ptr;
MPID_nem_pkt_lmt_rts_t * const rts_pkt = (MPID_nem_pkt_lmt_rts_t *)pkt;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_INITIATE_LMT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_INITIATE_LMT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_INITIATE_LMT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_INITIATE_LMT);
/* MT FIXME deadlock: we hold the LMT CS right now, the following macro
* unexpectedly acquires the MPIDCOMM CS. The normal locking order is
@@ -151,7 +150,7 @@ int MPID_nem_lmt_shm_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPID_Req
req->ch.lmt_data_sz = data_sz;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_INITIATE_LMT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_INITIATE_LMT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -161,18 +160,18 @@ int MPID_nem_lmt_shm_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPID_Req
#define FUNCNAME MPID_nem_lmt_shm_start_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_shm_start_recv(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_cookie)
+int MPID_nem_lmt_shm_start_recv(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV s_cookie)
{
int mpi_errno = MPI_SUCCESS;
int done = FALSE;
- MPIU_CHKPMEM_DECL(2);
+ MPIR_CHKPMEM_DECL(2);
MPID_nem_lmt_shm_wait_element_t *e;
int queue_initially_empty;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
char *ser_lmt_copy_buf_handle=NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_START_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_START_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_START_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_START_RECV);
if (vc_ch->lmt_copy_buf == NULL)
{
@@ -192,14 +191,14 @@ int MPID_nem_lmt_shm_start_recv(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_coo
}
/* send CTS with handle for copy buffer */
- mpi_errno = MPIU_SHMW_Hnd_get_serialized_by_ref((vc_ch->lmt_copy_buf_handle), &ser_lmt_copy_buf_handle);
+ mpi_errno = MPL_shm_hnd_get_serialized_by_ref((vc_ch->lmt_copy_buf_handle), &ser_lmt_copy_buf_handle);
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
MPID_nem_lmt_send_CTS(vc, req, ser_lmt_copy_buf_handle, (int)strlen(ser_lmt_copy_buf_handle) + 1);
queue_initially_empty = LMT_SHM_Q_EMPTY(vc_ch->lmt_queue) && vc_ch->lmt_active_lmt == NULL;
- MPIU_CHKPMEM_MALLOC (e, MPID_nem_lmt_shm_wait_element_t *, sizeof (MPID_nem_lmt_shm_wait_element_t), mpi_errno, "lmt wait queue element");
+ MPIR_CHKPMEM_MALLOC (e, MPID_nem_lmt_shm_wait_element_t *, sizeof (MPID_nem_lmt_shm_wait_element_t), mpi_errno, "lmt wait queue element");
e->progress = lmt_shm_recv_progress;
e->req = req;
LMT_SHM_Q_ENQUEUE(&vc_ch->lmt_queue, e); /* MT: not thread safe */
@@ -216,24 +215,24 @@ int MPID_nem_lmt_shm_start_recv(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_coo
/* lmt send didn't finish, enqueue it to be completed later */
lmt_shm_prog_element_t *pe;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "lmt recv not finished: enqueue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "lmt recv not finished: enqueue");
- MPIU_CHKPMEM_MALLOC (pe, lmt_shm_prog_element_t *, sizeof (lmt_shm_prog_element_t), mpi_errno, "lmt progress queue element");
+ MPIR_CHKPMEM_MALLOC (pe, lmt_shm_prog_element_t *, sizeof (lmt_shm_prog_element_t), mpi_errno, "lmt progress queue element");
pe->vc = vc;
LMT_SHM_L_ADD(pe);
MPID_nem_local_lmt_pending = TRUE;
- MPIU_Assert(!vc_ch->lmt_enqueued);
+ MPIR_Assert(!vc_ch->lmt_enqueued);
vc_ch->lmt_enqueued = TRUE;
}
- MPIU_Assert(LMT_SHM_Q_EMPTY(vc_ch->lmt_queue) || !LMT_SHM_L_EMPTY());
+ MPIR_Assert(LMT_SHM_Q_EMPTY(vc_ch->lmt_queue) || !LMT_SHM_L_EMPTY());
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_START_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_START_RECV);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -241,29 +240,29 @@ int MPID_nem_lmt_shm_start_recv(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV s_coo
#define FUNCNAME MPID_nem_lmt_shm_start_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_shm_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_cookie)
+int MPID_nem_lmt_shm_start_send(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV r_cookie)
{
int mpi_errno = MPI_SUCCESS;
int done = FALSE;
int queue_initially_empty;
MPID_nem_lmt_shm_wait_element_t *e;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIU_CHKPMEM_DECL(3);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_START_SEND);
+ MPIR_CHKPMEM_DECL(3);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_START_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_START_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_START_SEND);
if (vc_ch->lmt_copy_buf == NULL){
- mpi_errno = MPIU_SHMW_Hnd_deserialize(vc_ch->lmt_copy_buf_handle, r_cookie.MPL_IOV_BUF, strlen(r_cookie.MPL_IOV_BUF));
+ mpi_errno = MPL_shm_hnd_deserialize(vc_ch->lmt_copy_buf_handle, r_cookie.MPL_IOV_BUF, strlen(r_cookie.MPL_IOV_BUF));
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
mpi_errno = MPID_nem_attach_shm_region(&vc_ch->lmt_copy_buf, vc_ch->lmt_copy_buf_handle);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "attached to remote copy_buf");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "attached to remote copy_buf");
}
else{
char *ser_lmt_copy_buf_handle=NULL;
- mpi_errno = MPIU_SHMW_Hnd_get_serialized_by_ref(vc_ch->lmt_copy_buf_handle, &ser_lmt_copy_buf_handle);
+ mpi_errno = MPL_shm_hnd_get_serialized_by_ref(vc_ch->lmt_copy_buf_handle, &ser_lmt_copy_buf_handle);
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
if (strncmp(ser_lmt_copy_buf_handle, r_cookie.MPL_IOV_BUF, r_cookie.MPL_IOV_LEN) < 0){
/* Each side allocated its own buffer, lexicographically lower valued buffer handle is deleted */
@@ -273,10 +272,10 @@ int MPID_nem_lmt_shm_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_coo
vc_ch->lmt_copy_buf = NULL;
/* The shared memory handle is not valid any more -- so get a new shm handle */
- mpi_errno = MPIU_SHMW_Hnd_init(&vc_ch->lmt_copy_buf_handle);
+ mpi_errno = MPL_shm_hnd_init(&vc_ch->lmt_copy_buf_handle);
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
- mpi_errno = MPIU_SHMW_Hnd_deserialize(vc_ch->lmt_copy_buf_handle, r_cookie.MPL_IOV_BUF, strlen(r_cookie.MPL_IOV_BUF));
+ mpi_errno = MPL_shm_hnd_deserialize(vc_ch->lmt_copy_buf_handle, r_cookie.MPL_IOV_BUF, strlen(r_cookie.MPL_IOV_BUF));
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
mpi_errno = MPID_nem_attach_shm_region(&vc_ch->lmt_copy_buf, vc_ch->lmt_copy_buf_handle);
@@ -286,12 +285,12 @@ int MPID_nem_lmt_shm_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_coo
vc_ch->lmt_active_lmt = NULL;
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "deleted my copy_buf and attached to remote");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "deleted my copy_buf and attached to remote");
}
queue_initially_empty = LMT_SHM_Q_EMPTY(vc_ch->lmt_queue) && vc_ch->lmt_active_lmt == NULL;
- MPIU_CHKPMEM_MALLOC (e, MPID_nem_lmt_shm_wait_element_t *, sizeof (MPID_nem_lmt_shm_wait_element_t), mpi_errno, "lmt wait queue element");
+ MPIR_CHKPMEM_MALLOC (e, MPID_nem_lmt_shm_wait_element_t *, sizeof (MPID_nem_lmt_shm_wait_element_t), mpi_errno, "lmt wait queue element");
e->progress = lmt_shm_send_progress;
e->req = req;
LMT_SHM_Q_ENQUEUE(&vc_ch->lmt_queue, e); /* MT: not thread safe */
@@ -308,23 +307,23 @@ int MPID_nem_lmt_shm_start_send(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV r_coo
/* lmt send didn't finish, enqueue it to be completed later */
lmt_shm_prog_element_t *pe;
- MPIU_CHKPMEM_MALLOC (pe, lmt_shm_prog_element_t *, sizeof (lmt_shm_prog_element_t), mpi_errno, "lmt progress queue element");
+ MPIR_CHKPMEM_MALLOC (pe, lmt_shm_prog_element_t *, sizeof (lmt_shm_prog_element_t), mpi_errno, "lmt progress queue element");
pe->vc = vc;
LMT_SHM_L_ADD(pe);
MPID_nem_local_lmt_pending = TRUE;
- MPIU_Assert(!vc_ch->lmt_enqueued);
+ MPIR_Assert(!vc_ch->lmt_enqueued);
vc_ch->lmt_enqueued = TRUE;
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "lmt send not finished: enqueue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "lmt send not finished: enqueue");
}
- MPIU_Assert(LMT_SHM_Q_EMPTY(vc_ch->lmt_queue) || !LMT_SHM_L_EMPTY());
+ MPIR_Assert(LMT_SHM_Q_EMPTY(vc_ch->lmt_queue) || !LMT_SHM_L_EMPTY());
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_return:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_START_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_START_SEND);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_return;
}
@@ -338,18 +337,18 @@ static int get_next_req(MPIDI_VC_t *vc)
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPID_nem_copy_buf_t * const copy_buf = vc_ch->lmt_copy_buf;
int prev_owner_rank;
- MPID_Request *req;
- MPIDI_STATE_DECL(MPID_STATE_GET_NEXT_REQ);
+ MPIR_Request *req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_GET_NEXT_REQ);
- MPIDI_FUNC_ENTER(MPID_STATE_GET_NEXT_REQ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_GET_NEXT_REQ);
prev_owner_rank = OPA_cas_int(©_buf->owner_info.val.rank, NO_OWNER, MPIDI_Process.my_pg_rank);
if (prev_owner_rank == IN_USE || prev_owner_rank == MPIDI_Process.my_pg_rank)
{
/* last lmt is not complete (receiver still receiving */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "waiting for receiver");
- DBG_LMT(MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "waiting for receiver");
+ DBG_LMT(MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
goto fn_exit;
}
@@ -367,8 +366,8 @@ static int get_next_req(MPIDI_VC_t *vc)
LMT_SHM_Q_DEQUEUE(&vc_ch->lmt_queue, &vc_ch->lmt_active_lmt);
copy_buf->owner_info.val.remote_req_id = vc_ch->lmt_active_lmt->req->ch.lmt_req_id;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "grabbed idle buf. remote_req=%d local_req=%d", copy_buf->owner_info.val.remote_req_id, vc_ch->lmt_active_lmt->req->handle));
- DBG_LMT(MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "grabbed idle buf. remote_req=%d local_req=%d", copy_buf->owner_info.val.remote_req_id, vc_ch->lmt_active_lmt->req->handle));
+ DBG_LMT(MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
}
else
{
@@ -377,8 +376,8 @@ static int get_next_req(MPIDI_VC_t *vc)
OPA_read_barrier();
- MPIU_DBG_STMT(CH3_CHANNEL, VERBOSE, if (copy_buf->owner_info.val.remote_req_id == MPI_REQUEST_NULL)
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "waiting for owner rank=%d", vc->pg_rank));
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, if (copy_buf->owner_info.val.remote_req_id == MPI_REQUEST_NULL)
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "waiting for owner rank=%d", vc->pg_rank));
while (copy_buf->owner_info.val.remote_req_id == MPI_REQUEST_NULL) {
int p = 0;
@@ -392,13 +391,13 @@ static int get_next_req(MPIDI_VC_t *vc)
OPA_read_barrier();
LMT_SHM_Q_SEARCH_REMOVE(&vc_ch->lmt_queue, copy_buf->owner_info.val.remote_req_id, &vc_ch->lmt_active_lmt);
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "remote side owns buf. local_req=%d", copy_buf->owner_info.val.remote_req_id);
- DBG_LMT(MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "remote side owns buf. local_req=%d", copy_buf->owner_info.val.remote_req_id);
+ DBG_LMT(MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
if (vc_ch->lmt_active_lmt == NULL)
{
/* request not found */
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "request not found in lmt queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "request not found in lmt queue");
goto fn_exit;
}
@@ -414,16 +413,16 @@ static int get_next_req(MPIDI_VC_t *vc)
/* Check to see if we've already allocated a seg for this req.
This can happen if both sides allocated copy buffers, and
we decided to use the remote side's buffer. */
- req->dev.segment_ptr = MPID_Segment_alloc();
- MPIR_ERR_CHKANDJUMP1((req->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(req->dev.user_buf, req->dev.user_count, req->dev.datatype, req->dev.segment_ptr, 0);
+ req->dev.segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1((req->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(req->dev.user_buf, req->dev.user_count, req->dev.datatype, req->dev.segment_ptr, 0);
req->dev.segment_first = 0;
}
vc_ch->lmt_buf_num = 0;
vc_ch->lmt_surfeit = 0;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_GET_NEXT_REQ);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_GET_NEXT_REQ);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -440,25 +439,25 @@ static int get_next_req(MPIDI_VC_t *vc)
#define FUNCNAME lmt_shm_send_progress
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
+static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPIR_Request *req, int *done)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPID_nem_copy_buf_t * const copy_buf = vc_ch->lmt_copy_buf;
- MPIDI_msg_sz_t first;
- MPIDI_msg_sz_t last;
+ intptr_t first;
+ intptr_t last;
int buf_num;
- MPIDI_msg_sz_t data_sz, copy_limit;
- MPIDI_STATE_DECL(MPID_STATE_LMT_SHM_SEND_PROGRESS);
+ intptr_t data_sz, copy_limit;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_LMT_SHM_SEND_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_LMT_SHM_SEND_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_LMT_SHM_SEND_PROGRESS);
- DBG_LMT(MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
+ DBG_LMT(MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
copy_buf->sender_present.val = TRUE;
- MPIU_Assert(req == vc_ch->lmt_active_lmt->req);
-/* MPIU_Assert(MPIDI_Request_get_type(req) == MPIDI_REQUEST_TYPE_SEND); */
+ MPIR_Assert(req == vc_ch->lmt_active_lmt->req);
+/* MPIR_Assert(MPIDI_Request_get_type(req) == MPIDI_REQUEST_TYPE_SEND); */
data_sz = req->ch.lmt_data_sz;
buf_num = vc_ch->lmt_buf_num;
@@ -476,8 +475,8 @@ static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
req->dev.segment_first = first;
vc_ch->lmt_buf_num = buf_num;
*done = FALSE;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "first=" MPIDI_MSG_SZ_FMT " data_sz="MPIDI_MSG_SZ_FMT, first, data_sz));
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "Waiting on full buffer %d", buf_num);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "first=%" PRIdPTR " data_sz=%" PRIdPTR, first, data_sz));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Waiting on full buffer %d", buf_num);
goto fn_exit;
}
++p;
@@ -493,14 +492,14 @@ static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
else
copy_limit = MPID_NEM_COPY_BUF_LEN;
last = (data_sz - first <= copy_limit) ? data_sz : first + copy_limit;
- MPID_Segment_pack(req->dev.segment_ptr, first, &last, (void *)copy_buf->buf[buf_num]); /* cast away volatile */
+ MPIDU_Segment_pack(req->dev.segment_ptr, first, &last, (void *)copy_buf->buf[buf_num]); /* cast away volatile */
OPA_write_barrier();
- MPIU_Assign_trunc(copy_buf->len[buf_num].val, (last - first), volatile int);
+ MPIR_Assign_trunc(copy_buf->len[buf_num].val, (last - first), volatile int);
first = last;
buf_num = (buf_num+1) % NUM_BUFS;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "sent data. last=" MPIDI_MSG_SZ_FMT " data_sz=" MPIDI_MSG_SZ_FMT, last, data_sz));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "sent data. last=%" PRIdPTR " data_sz=%" PRIdPTR, last, data_sz));
}
while (last < data_sz);
@@ -509,12 +508,12 @@ static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "completed req local_req=%d", req->handle);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "completed req local_req=%d", req->handle);
fn_exit:
copy_buf->sender_present.val = FALSE;
- MPIDI_FUNC_EXIT(MPID_STATE_LMT_SHM_SEND_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_LMT_SHM_SEND_PROGRESS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -532,24 +531,24 @@ static int lmt_shm_send_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
#define FUNCNAME lmt_shm_recv_progress
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
+static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPIR_Request *req, int *done)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPID_nem_copy_buf_t * const copy_buf = vc_ch->lmt_copy_buf;
- MPIDI_msg_sz_t first;
- MPIDI_msg_sz_t last, expected_last;
+ intptr_t first;
+ intptr_t last, expected_last;
int buf_num;
- MPIDI_msg_sz_t data_sz, len;
+ intptr_t data_sz, len;
int i;
- MPIDI_msg_sz_t surfeit;
+ intptr_t surfeit;
char *src_buf;
char tmpbuf[MPID_NEM_CACHE_LINE_LEN];
- MPIDI_STATE_DECL(MPID_STATE_LMT_SHM_RECV_PROGRESS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_LMT_SHM_RECV_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_LMT_SHM_RECV_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_LMT_SHM_RECV_PROGRESS);
- DBG_LMT(MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
+ DBG_LMT(MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "ctr=%d rank=%d", copy_buf->owner_info.val.ctr, vc->pg_rank)));
copy_buf->receiver_present.val = TRUE;
@@ -571,8 +570,8 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
vc_ch->lmt_buf_num = buf_num;
vc_ch->lmt_surfeit = surfeit;
*done = FALSE;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "first=" MPIDI_MSG_SZ_FMT " data_sz=" MPIDI_MSG_SZ_FMT, first, data_sz));
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "Waiting on empty buffer %d", buf_num);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "first=%" PRIdPTR " data_sz=%" PRIdPTR, first, data_sz));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Waiting on empty buffer %d", buf_num);
goto fn_exit;
}
++p;
@@ -585,9 +584,9 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
src_buf = ((char *)copy_buf->buf[buf_num]) - surfeit; /* cast away volatile */
last = expected_last = (data_sz - first <= surfeit + len) ? data_sz : first + surfeit + len;
- MPID_Segment_unpack(req->dev.segment_ptr, first, &last, src_buf);
+ MPIDU_Segment_unpack(req->dev.segment_ptr, first, &last, src_buf);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL, VERBOSE, (MPIU_DBG_FDEST, "recvd data. last=" MPIDI_MSG_SZ_FMT " data_sz=" MPIDI_MSG_SZ_FMT, last, data_sz));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "recvd data. last=%" PRIdPTR " data_sz=%" PRIdPTR, last, data_sz));
if (surfeit && buf_num > 0)
{
@@ -597,9 +596,9 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
OPA_read_write_barrier();
copy_buf->len[(buf_num-1)].val = 0;
/* Make sure we copied at least the leftover data from last time */
- MPIU_Assert(last - first > surfeit);
+ MPIR_Assert(last - first > surfeit);
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "freed previous buffer");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "freed previous buffer");
}
if (last < expected_last)
@@ -613,7 +612,7 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
if (buf_num == NUM_BUFS-1)
{
/* if we're wrapping back to buf 0, then we can copy it directly */
- MPIU_Memcpy(((char *)copy_buf->buf[0]) - surfeit, surfeit_ptr, surfeit);
+ MPIR_Memcpy(((char *)copy_buf->buf[0]) - surfeit, surfeit_ptr, surfeit);
OPA_read_write_barrier();
copy_buf->len[buf_num].val = 0;
@@ -621,11 +620,11 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
else
{
/* otherwise, we need to copy to a tmpbuf first to make sure the src and dest addresses don't overlap */
- MPIU_Memcpy(tmpbuf, surfeit_ptr, surfeit);
- MPIU_Memcpy(((char *)copy_buf->buf[buf_num+1]) - surfeit, tmpbuf, surfeit);
+ MPIR_Memcpy(tmpbuf, surfeit_ptr, surfeit);
+ MPIR_Memcpy(((char *)copy_buf->buf[buf_num+1]) - surfeit, tmpbuf, surfeit);
}
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "copied leftover data");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "copied leftover data");
}
else
{
@@ -644,7 +643,7 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
for (i = 0; i < NUM_BUFS; ++i)
copy_buf->len[i].val = 0;
- MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "completed request local_req=%d", req->handle);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "completed request local_req=%d", req->handle);
OPA_write_barrier();
OPA_store_int(©_buf->owner_info.val.rank, NO_OWNER);
@@ -656,7 +655,7 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
fn_exit:
copy_buf->receiver_present.val = FALSE;
- MPIDI_FUNC_EXIT(MPID_STATE_LMT_SHM_RECV_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_LMT_SHM_RECV_PROGRESS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -666,13 +665,13 @@ static int lmt_shm_recv_progress(MPIDI_VC_t *vc, MPID_Request *req, int *done)
#define FUNCNAME MPID_nem_lmt_shm_handle_cookie
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_shm_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV cookie)
+int MPID_nem_lmt_shm_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV cookie)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_HANDLE_COOKIE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_HANDLE_COOKIE);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_HANDLE_COOKIE);
return MPI_SUCCESS;
}
@@ -680,13 +679,13 @@ int MPID_nem_lmt_shm_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV co
#define FUNCNAME MPID_nem_lmt_shm_done_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_shm_done_send(MPIDI_VC_t *vc, MPID_Request *req)
+int MPID_nem_lmt_shm_done_send(MPIDI_VC_t *vc, MPIR_Request *req)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_DONE_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_DONE_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_DONE_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_DONE_SEND);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_DONE_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_DONE_SEND);
return MPI_SUCCESS;
}
@@ -694,13 +693,13 @@ int MPID_nem_lmt_shm_done_send(MPIDI_VC_t *vc, MPID_Request *req)
#define FUNCNAME MPID_nem_lmt_shm_done_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_shm_done_recv(MPIDI_VC_t *vc, MPID_Request *req)
+int MPID_nem_lmt_shm_done_recv(MPIDI_VC_t *vc, MPIR_Request *req)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_DONE_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_DONE_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_DONE_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_DONE_RECV);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_DONE_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_DONE_RECV);
return MPI_SUCCESS;
}
@@ -714,9 +713,9 @@ static inline int lmt_shm_progress_vc(MPIDI_VC_t *vc, int *done)
int done_req = FALSE;
MPID_nem_lmt_shm_wait_element_t *we;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_LMT_SHM_PROGRESS_VC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_LMT_SHM_PROGRESS_VC);
- MPIDI_FUNC_ENTER(MPID_STATE_LMT_SHM_PROGRESS_VC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_LMT_SHM_PROGRESS_VC);
*done = FALSE;
@@ -742,7 +741,7 @@ static inline int lmt_shm_progress_vc(MPIDI_VC_t *vc, int *done)
if (done_req)
{
- MPIU_Free(vc_ch->lmt_active_lmt);
+ MPL_free(vc_ch->lmt_active_lmt);
vc_ch->lmt_active_lmt = NULL;
if (LMT_SHM_Q_EMPTY(vc_ch->lmt_queue))
@@ -750,7 +749,7 @@ static inline int lmt_shm_progress_vc(MPIDI_VC_t *vc, int *done)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_LMT_SHM_PROGRESS_VC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_LMT_SHM_PROGRESS_VC);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -764,9 +763,9 @@ int MPID_nem_lmt_shm_progress(void)
{
int mpi_errno = MPI_SUCCESS;
lmt_shm_prog_element_t *pe;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_PROGRESS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_PROGRESS);
pe = LMT_SHM_L_HEAD();
@@ -780,15 +779,15 @@ int MPID_nem_lmt_shm_progress(void)
if (done)
{
lmt_shm_prog_element_t *f;
- MPIU_Assert(LMT_SHM_Q_EMPTY(pe->vc->ch.lmt_queue));
- MPIU_Assert(pe->vc->ch.lmt_active_lmt == NULL);
- MPIU_Assert(pe->vc->ch.lmt_enqueued);
+ MPIR_Assert(LMT_SHM_Q_EMPTY(pe->vc->ch.lmt_queue));
+ MPIR_Assert(pe->vc->ch.lmt_active_lmt == NULL);
+ MPIR_Assert(pe->vc->ch.lmt_enqueued);
pe->vc->ch.lmt_enqueued = FALSE;
f = pe;
pe = pe->next;
LMT_SHM_L_REMOVE(f);
- MPIU_Free(f);
+ MPL_free(f);
}
else
pe = pe->next;
@@ -798,7 +797,7 @@ int MPID_nem_lmt_shm_progress(void)
MPID_nem_local_lmt_pending = FALSE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_PROGRESS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -814,10 +813,10 @@ int MPID_nem_lmt_shm_vc_terminated(MPIDI_VC_t *vc)
MPIDI_CH3I_VC *vc_ch = &vc->ch;
MPID_nem_lmt_shm_wait_element_t *we;
int req_errno = MPI_SUCCESS;
- MPID_Request *req = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_VC_TERMINATED);
+ MPIR_Request *req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_SHM_VC_TERMINATED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_SHM_VC_TERMINATED);
if (vc->state != MPIDI_VC_STATE_CLOSED) {
MPIR_ERR_SET1(req_errno, MPIX_ERR_PROC_FAILED, "**comm_fail", "**comm_fail %d", vc->pg_rank);
@@ -839,26 +838,26 @@ int MPID_nem_lmt_shm_vc_terminated(MPIDI_VC_t *vc)
calls lmt_shm_progress_vc() and it finds an empty queue. */
if (vc_ch->lmt_active_lmt) {
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Clearing active LMT");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Clearing active LMT");
vc_ch->lmt_active_lmt->req->status.MPI_ERROR = req_errno;
MPID_Request_complete(vc_ch->lmt_active_lmt->req);
- MPIU_Free(vc_ch->lmt_active_lmt);
+ MPL_free(vc_ch->lmt_active_lmt);
vc_ch->lmt_active_lmt = NULL;
}
if (!LMT_SHM_Q_EMPTY(vc_ch->lmt_queue)) {
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "Empty LMT queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, "Empty LMT queue");
}
while (!LMT_SHM_Q_EMPTY(vc_ch->lmt_queue)) {
LMT_SHM_Q_DEQUEUE(&vc_ch->lmt_queue, &we);
we->req->status.MPI_ERROR = req_errno;
MPID_Request_complete(we->req);
- MPIU_Free(we);
+ MPL_free(we);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_SHM_VC_TERMINATED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -869,12 +868,12 @@ int MPID_nem_lmt_shm_vc_terminated(MPIDI_VC_t *vc)
#define FUNCNAME MPID_nem_allocate_shm_region
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPID_nem_allocate_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd_t handle)
+static int MPID_nem_allocate_shm_region(MPID_nem_copy_buf_t **buf_p, MPL_shm_hnd_t handle)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION);
if (*buf_p)
{
@@ -882,11 +881,11 @@ static int MPID_nem_allocate_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_H
goto fn_exit;
}
- mpi_errno = MPIU_SHMW_Seg_create_and_attach(handle, sizeof(MPID_nem_copy_buf_t), (char **)buf_p, 0);
+ mpi_errno = MPL_shm_seg_create_and_attach(handle, sizeof(MPID_nem_copy_buf_t), (char **)buf_p, 0);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -896,12 +895,12 @@ static int MPID_nem_allocate_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_H
#define FUNCNAME MPID_nem_attach_shm_region
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPID_nem_attach_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd_t handle)
+static int MPID_nem_attach_shm_region(MPID_nem_copy_buf_t **buf_p, MPL_shm_hnd_t handle)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_ATTACH_SHM_REGION);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_ATTACH_SHM_REGION);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_ATTACH_SHM_REGION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_ATTACH_SHM_REGION);
if(*buf_p)
{
@@ -909,14 +908,14 @@ static int MPID_nem_attach_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd
goto fn_exit;
}
- mpi_errno = MPIU_SHMW_Seg_attach(handle, sizeof(MPID_nem_copy_buf_t), (char **)buf_p, 0);
+ mpi_errno = MPL_shm_seg_attach(handle, sizeof(MPID_nem_copy_buf_t), (char **)buf_p, 0);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- mpi_errno = MPIU_SHMW_Seg_remove(handle);
+ mpi_errno = MPL_shm_seg_remove(handle);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_ATTACH_SHM_REGION);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_ATTACH_SHM_REGION);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -926,18 +925,18 @@ static int MPID_nem_attach_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd
#define FUNCNAME MPID_nem_detach_shm_region
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPID_nem_detach_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd_t handle)
+static int MPID_nem_detach_shm_region(MPID_nem_copy_buf_t **buf_p, MPL_shm_hnd_t handle)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_DETACH_SHM_REGION);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_DETACH_SHM_REGION);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_DETACH_SHM_REGION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_DETACH_SHM_REGION);
- mpi_errno = MPIU_SHMW_Seg_detach(handle, (char **)buf_p, sizeof(MPID_nem_copy_buf_t));
+ mpi_errno = MPL_shm_seg_detach(handle, (char **)buf_p, sizeof(MPID_nem_copy_buf_t));
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_DETACH_SHM_REGION);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_DETACH_SHM_REGION);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -947,24 +946,24 @@ static int MPID_nem_detach_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd
#define FUNCNAME MPID_nem_delete_shm_region
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPID_nem_delete_shm_region(MPID_nem_copy_buf_t **buf_p, MPIU_SHMW_Hnd_t *handle_p)
+static int MPID_nem_delete_shm_region(MPID_nem_copy_buf_t **buf_p, MPL_shm_hnd_t *handle_p)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_DELETE_SHM_REGION);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_DELETE_SHM_REGION);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_DELETE_SHM_REGION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_DELETE_SHM_REGION);
- mpi_errno = MPIU_SHMW_Seg_remove(*handle_p);
+ mpi_errno = MPL_shm_seg_remove(*handle_p);
if (mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
mpi_errno = MPID_nem_detach_shm_region(buf_p, *handle_p);
if (mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
- mpi_errno = MPIU_SHMW_Hnd_finalize(handle_p);
+ mpi_errno = MPL_shm_hnd_finalize(handle_p);
if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_DELETE_SHM_REGION);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_DELETE_SHM_REGION);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_vmsplice.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_vmsplice.c
index 8a582f2..204b68c 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_vmsplice.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_vmsplice.c
@@ -24,7 +24,7 @@ MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
struct lmt_vmsplice_node {
struct lmt_vmsplice_node *next;
int pipe_fd;
- MPID_Request *req;
+ MPIR_Request *req;
};
/* MT: this stack is not thread-safe */
@@ -58,10 +58,10 @@ static int adjust_partially_xferred_iov(MPL_IOV iov[], int *iov_offset,
return complete;
}
-static inline int check_req_complete(MPIDI_VC_t *vc, MPID_Request *req, int *complete)
+static inline int check_req_complete(MPIDI_VC_t *vc, MPIR_Request *req, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
reqFn = req->dev.OnDataAvail;
if (reqFn) {
*complete = 0;
@@ -87,13 +87,13 @@ fn_fail:
/* fills in req->dev.iov{,_offset,_count} based on the datatype info in the
request, creating a segment if necessary */
-static int populate_iov_from_req(MPID_Request *req)
+static int populate_iov_from_req(MPIR_Request *req)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype * dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype* dt_ptr;
/* find out contig/noncontig, size, and lb for the datatype */
MPIDI_Datatype_get_info(req->dev.user_count, req->dev.datatype,
@@ -107,17 +107,17 @@ static int populate_iov_from_req(MPID_Request *req)
}
else {
/* use the segment routines to handle the iovec creation */
- MPIU_Assert(req->dev.segment_ptr == NULL);
+ MPIR_Assert(req->dev.segment_ptr == NULL);
req->dev.iov_count = MPL_IOV_LIMIT;
req->dev.iov_offset = 0;
/* XXX DJG FIXME where is this segment freed? */
- req->dev.segment_ptr = MPID_Segment_alloc();
+ req->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((req->dev.segment_ptr == NULL), mpi_errno,
MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(req->dev.user_buf, req->dev.user_count,
+ "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(req->dev.user_buf, req->dev.user_count,
req->dev.datatype, req->dev.segment_ptr, 0);
req->dev.segment_first = 0;
req->dev.segment_size = data_sz;
@@ -135,7 +135,7 @@ fn_fail:
return mpi_errno;
}
-static int do_vmsplice(MPID_Request *sreq, int pipe_fd, MPL_IOV iov[],
+static int do_vmsplice(MPIR_Request *sreq, int pipe_fd, MPL_IOV iov[],
int *iov_offset, int *iov_count, int *complete)
{
int mpi_errno = MPI_SUCCESS;
@@ -150,7 +150,7 @@ static int do_vmsplice(MPID_Request *sreq, int pipe_fd, MPL_IOV iov[],
if (err < 0) {
if (errno == EAGAIN) goto fn_exit;
MPIR_ERR_CHKANDJUMP2(errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**vmsplice",
- "**vmsplice %d %s", errno, MPIU_Strerror(errno));
+ "**vmsplice %d %s", errno, MPIR_Strerror(errno));
}
*complete = adjust_partially_xferred_iov(iov, iov_offset, iov_count, err);
@@ -162,7 +162,7 @@ static int do_vmsplice(MPID_Request *sreq, int pipe_fd, MPL_IOV iov[],
if (*complete) {
err = close(pipe_fd);
MPIR_ERR_CHKANDJUMP(err < 0, mpi_errno, MPI_ERR_OTHER, "**close");
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
}
@@ -175,15 +175,15 @@ fn_exit:
#define FUNCNAME MPID_nem_lmt_vmsplice_initiate_lmt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_vmsplice_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPID_Request *sreq)
+int MPID_nem_lmt_vmsplice_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPIR_Request *sreq)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_pkt_lmt_rts_t * const rts_pkt = (MPID_nem_pkt_lmt_rts_t *)pkt;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
int complete = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT);
/* re-use the same pipe per-pair,per-sender */
if (vc_ch->lmt_copy_buf_handle == NULL) {
@@ -193,16 +193,16 @@ int MPID_nem_lmt_vmsplice_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPI
pipe_name = tempnam(NULL, "lmt_");
MPIR_ERR_CHKANDJUMP2(!pipe_name, mpi_errno, MPI_ERR_OTHER, "**tempnam",
- "**tempnam %d %s", errno, MPIU_Strerror(errno));
+ "**tempnam %d %s", errno, MPIR_Strerror(errno));
- vc_ch->lmt_copy_buf_handle = MPIU_Strdup(pipe_name);
+ vc_ch->lmt_copy_buf_handle = MPL_strdup(pipe_name);
/* XXX DJG hack */
#undef free
free(pipe_name);
err = mkfifo(vc_ch->lmt_copy_buf_handle, 0660);
MPIR_ERR_CHKANDJUMP2(err < 0, mpi_errno, MPI_ERR_OTHER, "**mkfifo",
- "**mkfifo %d %s", errno, MPIU_Strerror(errno));
+ "**mkfifo %d %s", errno, MPIR_Strerror(errno));
}
/* can't start sending data yet, need full RTS/CTS handshake */
@@ -212,11 +212,11 @@ int MPID_nem_lmt_vmsplice_initiate_lmt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, MPI
fn_fail:
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_INITIATE_LMT);
return mpi_errno;
}
-static int do_readv(MPID_Request *rreq, int pipe_fd, MPL_IOV iov[],
+static int do_readv(MPIR_Request *rreq, int pipe_fd, MPL_IOV iov[],
int *iov_offset, int *iov_count, int *complete)
{
int mpi_errno = MPI_SUCCESS;
@@ -224,12 +224,12 @@ static int do_readv(MPID_Request *rreq, int pipe_fd, MPL_IOV iov[],
nread = readv(pipe_fd, &rreq->dev.iov[rreq->dev.iov_offset], rreq->dev.iov_count);
MPIR_ERR_CHKANDJUMP2(nread < 0 && errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**read",
- "**readv %d %s", errno, MPIU_Strerror(errno));
+ "**readv %d %s", errno, MPIR_Strerror(errno));
if (nread < 0) {
if (errno == EAGAIN) goto fn_exit;
MPIR_ERR_CHKANDJUMP2(errno != EAGAIN, mpi_errno, MPI_ERR_OTHER, "**vmsplice",
- "**vmsplice %d %s", errno, MPIU_Strerror(errno));
+ "**vmsplice %d %s", errno, MPIR_Strerror(errno));
}
*complete = adjust_partially_xferred_iov(iov, iov_offset, iov_count, nread);
@@ -241,7 +241,7 @@ static int do_readv(MPID_Request *rreq, int pipe_fd, MPL_IOV iov[],
if (*complete) {
nread = close(pipe_fd);
MPIR_ERR_CHKANDJUMP(nread < 0, mpi_errno, MPI_ERR_OTHER, "**close");
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
}
}
@@ -255,7 +255,7 @@ fn_exit:
#define FUNCNAME MPID_nem_lmt_vmsplice_start_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_vmsplice_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV s_cookie)
+int MPID_nem_lmt_vmsplice_start_recv(MPIDI_VC_t *vc, MPIR_Request *rreq, MPL_IOV s_cookie)
{
int mpi_errno = MPI_SUCCESS;
int i;
@@ -263,20 +263,20 @@ int MPID_nem_lmt_vmsplice_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV
struct lmt_vmsplice_node *node = NULL;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
int pipe_fd;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV);
if (vc_ch->lmt_recv_copy_buf_handle == NULL) {
- MPIU_Assert(s_cookie.MPL_IOV_BUF != NULL);
- vc_ch->lmt_recv_copy_buf_handle = MPIU_Strdup(s_cookie.MPL_IOV_BUF);
+ MPIR_Assert(s_cookie.MPL_IOV_BUF != NULL);
+ vc_ch->lmt_recv_copy_buf_handle = MPL_strdup(s_cookie.MPL_IOV_BUF);
}
/* XXX DJG FIXME in a real version we would want to cache the fd on the vc
so that we don't have two open's on the critical path every time. */
pipe_fd = open(vc_ch->lmt_recv_copy_buf_handle, O_NONBLOCK|O_RDONLY);
MPIR_ERR_CHKANDJUMP1(pipe_fd < 0, mpi_errno, MPI_ERR_OTHER, "**open",
- "**open %s", MPIU_Strerror(errno));
+ "**open %s", MPIR_Strerror(errno));
MPID_nem_lmt_send_CTS(vc, rreq, NULL, 0);
@@ -288,7 +288,7 @@ int MPID_nem_lmt_vmsplice_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV
/* push request if not complete for progress checks later */
if (!complete) {
- node = MPIU_Malloc(sizeof(struct lmt_vmsplice_node));
+ node = MPL_malloc(sizeof(struct lmt_vmsplice_node));
node->pipe_fd = pipe_fd;
node->req = rreq;
node->next = outstanding_head;
@@ -297,7 +297,7 @@ int MPID_nem_lmt_vmsplice_start_recv(MPIDI_VC_t *vc, MPID_Request *rreq, MPL_IOV
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_RECV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -312,9 +312,9 @@ int MPID_nem_lmt_vmsplice_progress(void)
struct lmt_vmsplice_node *prev = NULL;
struct lmt_vmsplice_node *free_me = NULL;
struct lmt_vmsplice_node *cur = outstanding_head;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS);
while (cur) {
int complete = 0;
@@ -340,7 +340,7 @@ int MPID_nem_lmt_vmsplice_progress(void)
}
if (complete) {
- MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, ".... complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, VERBOSE, ".... complete");
/* remove the node from the list */
if (cur == outstanding_head) {
@@ -355,7 +355,7 @@ int MPID_nem_lmt_vmsplice_progress(void)
free_me = cur;
cur = cur->next;
}
- if (free_me) MPIU_Free(free_me);
+ if (free_me) MPL_free(free_me);
--MPID_nem_local_lmt_pending;
}
@@ -366,7 +366,7 @@ int MPID_nem_lmt_vmsplice_progress(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_PROGRESS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -377,24 +377,24 @@ fn_fail:
#define FUNCNAME MPID_nem_lmt_vmsplice_start_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_vmsplice_start_send(MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV r_cookie)
+int MPID_nem_lmt_vmsplice_start_send(MPIDI_VC_t *vc, MPIR_Request *sreq, MPL_IOV r_cookie)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND);
int pipe_fd;
int complete;
struct lmt_vmsplice_node *node = NULL;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
MPIDI_CH3I_VC *vc_ch = &vc->ch;
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND);
/* Must do this after the other side has opened for reading, otherwise we
will error out with ENXIO. This will be indicated by the receipt of a
CTS message. */
pipe_fd = open(vc_ch->lmt_copy_buf_handle, O_NONBLOCK|O_WRONLY);
MPIR_ERR_CHKANDJUMP1(pipe_fd < 0, mpi_errno, MPI_ERR_OTHER, "**open",
- "**open %s", MPIU_Strerror(errno));
+ "**open %s", MPIR_Strerror(errno));
mpi_errno = populate_iov_from_req(sreq);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -408,7 +408,7 @@ int MPID_nem_lmt_vmsplice_start_send(MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV
if (!complete) {
/* push for later progress */
- node = MPIU_Malloc(sizeof(struct lmt_vmsplice_node));
+ node = MPL_malloc(sizeof(struct lmt_vmsplice_node));
node->pipe_fd = pipe_fd;
node->req = sreq;
node->next = outstanding_head;
@@ -418,7 +418,7 @@ int MPID_nem_lmt_vmsplice_start_send(MPIDI_VC_t *vc, MPID_Request *sreq, MPL_IOV
fn_fail:
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_START_SEND);
return mpi_errno;
}
@@ -429,16 +429,16 @@ fn_exit:
int MPIDI_CH3_MPID_nem_lmt_vmsplice_vc_terminated(MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED);
/* FIXME: need to handle the case where a VC is terminated due to
a process failure. We need to remove any outstanding LMT ops
for this VC. */
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_MPID_NEM_LMT_VMSPLICE_VC_TERMINATED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -455,15 +455,15 @@ int MPIDI_CH3_MPID_nem_lmt_vmsplice_vc_terminated(MPIDI_VC_t *vc)
#define FUNCNAME MPID_nem_lmt_vmsplice_done_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_vmsplice_done_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
+int MPID_nem_lmt_vmsplice_done_recv(MPIDI_VC_t *vc, MPIR_Request *rreq)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV);
/* nop */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_RECV);
return MPI_SUCCESS;
}
@@ -471,16 +471,16 @@ int MPID_nem_lmt_vmsplice_done_recv(MPIDI_VC_t *vc, MPID_Request *rreq)
#define FUNCNAME MPID_nem_lmt_vmsplice_done_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_vmsplice_done_send(MPIDI_VC_t *vc, MPID_Request *sreq)
+int MPID_nem_lmt_vmsplice_done_send(MPIDI_VC_t *vc, MPIR_Request *sreq)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND);
/* nop */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_DONE_SEND);
return MPI_SUCCESS;
}
@@ -489,16 +489,16 @@ int MPID_nem_lmt_vmsplice_done_send(MPIDI_VC_t *vc, MPID_Request *sreq)
#define FUNCNAME MPID_nem_lmt_vmsplice_handle_cookie
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_lmt_vmsplice_handle_cookie(MPIDI_VC_t *vc, MPID_Request *req, MPL_IOV cookie)
+int MPID_nem_lmt_vmsplice_handle_cookie(MPIDI_VC_t *vc, MPIR_Request *req, MPL_IOV cookie)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE);
/* nop */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_LMT_VMSPLICE_HANDLE_COOKIE);
return MPI_SUCCESS;
}
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c
index cea3ef7..a0635e2 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich.c
@@ -32,14 +32,14 @@ MPID_nem_mpich_init(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIU_CHKPMEM_DECL (2);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_INIT);
+ MPIR_CHKPMEM_DECL (2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_INIT);
MPID_nem_prefetched_cell = NULL;
- MPIU_CHKPMEM_MALLOC (MPID_nem_recv_seqno, unsigned short *, sizeof(*MPID_nem_recv_seqno) * MPID_nem_mem_region.num_procs, mpi_errno, "recv seqno");
+ MPIR_CHKPMEM_MALLOC (MPID_nem_recv_seqno, unsigned short *, sizeof(*MPID_nem_recv_seqno) * MPID_nem_mem_region.num_procs, mpi_errno, "recv seqno");
for (i = 0; i < MPID_nem_mem_region.num_procs; ++i)
{
@@ -47,7 +47,7 @@ MPID_nem_mpich_init(void)
}
/* set up fbox queue */
- MPIU_CHKPMEM_MALLOC (MPID_nem_fboxq_elem_list, MPID_nem_fboxq_elem_t *, MPID_nem_mem_region.num_local * sizeof(MPID_nem_fboxq_elem_t), mpi_errno, "fastbox element list");
+ MPIR_CHKPMEM_MALLOC (MPID_nem_fboxq_elem_list, MPID_nem_fboxq_elem_t *, MPID_nem_mem_region.num_local * sizeof(MPID_nem_fboxq_elem_t), mpi_errno, "fastbox element list");
for (i = 0; i < MPID_nem_mem_region.num_local; ++i)
{
@@ -64,13 +64,13 @@ MPID_nem_mpich_init(void)
MPID_nem_curr_fbox_all_poll = &MPID_nem_fboxq_elem_list[0];
MPID_nem_fboxq_elem_list_last = &MPID_nem_fboxq_elem_list[MPID_nem_mem_region.num_local - 1];
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_INIT);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -79,27 +79,27 @@ fn_fail:
#define FUNCNAME MPID_nem_send_iov
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_nem_send_iov(MPIDI_VC_t *vc, MPID_Request **sreq_ptr, MPL_IOV *iov, int n_iov)
+int MPID_nem_send_iov(MPIDI_VC_t *vc, MPIR_Request **sreq_ptr, MPL_IOV *iov, int n_iov)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int i;
int iov_data_copied;
- MPID_Request *sreq = *sreq_ptr;
+ MPIR_Request *sreq = *sreq_ptr;
MPL_IOV *data_iov = &iov[1]; /* iov of just the data, not the header */
int data_n_iov = n_iov - 1;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_SEND_IOV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_SEND_IOV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_SEND_IOV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_SEND_IOV);
if (*sreq_ptr == NULL)
{
/* create a request */
- sreq = MPID_Request_create();
- MPIU_Assert(sreq != NULL);
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Assert(sreq != NULL);
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = 0;
}
@@ -114,7 +114,7 @@ int MPID_nem_send_iov(MPIDI_VC_t *vc, MPID_Request **sreq_ptr, MPL_IOV *iov, int
/* --BEGIN ERROR HANDLING-- */
if (sreq->dev.tmpbuf_sz == 0)
{
- MPIU_DBG_MSG(CH3_CHANNEL,TYPICAL,"SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,TYPICAL,"SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", 0);
sreq->status.MPI_ERROR = mpi_errno;
@@ -123,11 +123,11 @@ int MPID_nem_send_iov(MPIDI_VC_t *vc, MPID_Request **sreq_ptr, MPL_IOV *iov, int
/* --END ERROR HANDLING-- */
}
- MPIU_Assert(sreq->dev.tmpbuf_sz >= data_sz);
+ MPIR_Assert(sreq->dev.tmpbuf_sz >= data_sz);
iov_data_copied = 0;
for (i = 0; i < data_n_iov; ++i) {
- MPIU_Memcpy((char*) sreq->dev.tmpbuf + iov_data_copied, data_iov[i].MPL_IOV_BUF, data_iov[i].MPL_IOV_LEN);
+ MPIR_Memcpy((char*) sreq->dev.tmpbuf + iov_data_copied, data_iov[i].MPL_IOV_BUF, data_iov[i].MPL_IOV_LEN);
iov_data_copied += data_iov[i].MPL_IOV_LEN;
}
@@ -137,7 +137,7 @@ int MPID_nem_send_iov(MPIDI_VC_t *vc, MPID_Request **sreq_ptr, MPL_IOV *iov, int
*sreq_ptr = sreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_SEND_IOV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_SEND_IOV);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich_rma.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich_rma.c
index 876575e..bb34944 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich_rma.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich_rma.c
@@ -19,12 +19,12 @@ int
MPID_nem_mpich_alloc_win (void **buf, int len, MPID_nem_mpich_win_t **win)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_ALLOC_WIN);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_ALLOC_WIN);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_ALLOC_WIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_ALLOC_WIN);
- MPIU_CHKPMEM_MALLOC (*win, MPID_nem_mpich_win_t *, sizeof (MPID_nem_mpich_win_t), mpi_errno, "rma win object");
+ MPIR_CHKPMEM_MALLOC (*win, MPID_nem_mpich_win_t *, sizeof (MPID_nem_mpich_win_t), mpi_errno, "rma win object");
mpi_errno = MPID_nem_allocate_shared_memory ((char **)buf, len, &(*win)->handle);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
@@ -34,12 +34,12 @@ MPID_nem_mpich_alloc_win (void **buf, int len, MPID_nem_mpich_win_t **win)
(*win)->len = len;
(*win)->local_address = *buf;
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_ALLOC_WIN);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_ALLOC_WIN);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -51,11 +51,11 @@ int
MPID_nem_mpich_free_win (MPID_nem_mpich_win_t *win)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_FREE_WIN);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_FREE_WIN);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_FREE_WIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_FREE_WIN);
- MPIU_Assert (win->proc == MPID_nem_mem_region.rank);
+ MPIR_Assert (win->proc == MPID_nem_mem_region.rank);
mpi_errno = MPID_nem_remove_shared_memory (win->handle);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
@@ -63,11 +63,11 @@ MPID_nem_mpich_free_win (MPID_nem_mpich_win_t *win)
mpi_errno = MPID_nem_detach_shared_memory (win->home_address, win->len);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
- MPIU_Free (win->handle);
- MPIU_Free (win);
+ MPL_free (win->handle);
+ MPL_free (win);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_FREE_WIN);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_FREE_WIN);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -81,9 +81,9 @@ int
MPID_nem_mpich_attach_win (void **buf, MPID_nem_mpich_win_t *remote_win)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_ATTACH_WIN);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_ATTACH_WIN);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_ATTACH_WIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_ATTACH_WIN);
if (remote_win->proc == MPID_nem_mem_region.rank)
{
@@ -99,7 +99,7 @@ MPID_nem_mpich_attach_win (void **buf, MPID_nem_mpich_win_t *remote_win)
remote_win->local_address = *buf;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_ATTACH_WIN);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_ATTACH_WIN);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -113,9 +113,9 @@ int
MPID_nem_mpich_detach_win (MPID_nem_mpich_win_t *remote_win)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_DETACH_WIN);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_DETACH_WIN);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_DETACH_WIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_DETACH_WIN);
if (remote_win->proc != MPID_nem_mem_region.rank)
{
@@ -125,7 +125,7 @@ MPID_nem_mpich_detach_win (MPID_nem_mpich_win_t *remote_win)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_DETACH_WIN);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_DETACH_WIN);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -140,19 +140,19 @@ MPID_nem_mpich_win_put (void *s_buf, void *d_buf, int len, MPID_nem_mpich_win_t
{
int mpi_errno = MPI_SUCCESS;
char *_d_buf = d_buf;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_PUT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_PUT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_PUT);
_d_buf += (char *)remote_win->local_address - (char *)remote_win->home_address;
if (_d_buf < (char *)remote_win->local_address || _d_buf + len > (char *)remote_win->local_address + remote_win->len)
MPIR_ERR_SETANDJUMP (mpi_errno, MPI_ERR_OTHER, "**winput_oob");
- MPIU_Memcpy (_d_buf, s_buf, len);
+ MPIR_Memcpy (_d_buf, s_buf, len);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_PUT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_PUT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -168,9 +168,9 @@ MPID_nem_mpich_win_putv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
int mpi_errno = MPI_SUCCESS;
size_t diff;
int len;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_PUTV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_PUTV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_PUTV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_PUTV);
diff = (char *)remote_win->local_address - (char *)remote_win->home_address;
@@ -183,7 +183,7 @@ MPID_nem_mpich_win_putv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
if ((*s_iov)->iov_len > (*d_iov)->iov_len)
{
len = (*d_iov)->iov_len;
- MPIU_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
+ MPIR_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
(*s_iov)->iov_base = (char *)(*s_iov)->iov_base + len;
(*s_iov)->iov_len =- len;
@@ -197,7 +197,7 @@ MPID_nem_mpich_win_putv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
else if ((*s_iov)->iov_len > (*d_iov)->iov_len)
{
len = (*s_iov)->iov_len;
- MPIU_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
+ MPIR_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
++(*s_iov);
--(*s_niov);
@@ -208,7 +208,7 @@ MPID_nem_mpich_win_putv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
else
{
len = (*s_iov)->iov_len;
- MPIU_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
+ MPIR_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
++(*s_iov);
--(*s_niov);
@@ -222,7 +222,7 @@ MPID_nem_mpich_win_putv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_PUTV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_PUTV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -237,19 +237,19 @@ MPID_nem_mpich_win_get (void *s_buf, void *d_buf, int len, MPID_nem_mpich_win_t
{
int mpi_errno = MPI_SUCCESS;
char *_s_buf = s_buf;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_GET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_GET);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_GET);
_s_buf += (char *)remote_win->local_address - (char *)remote_win->home_address;
if (_s_buf < (char *)remote_win->local_address || _s_buf + len > (char *)remote_win->local_address + remote_win->len)
MPIR_ERR_SETANDJUMP (mpi_errno, MPI_ERR_OTHER, "**winget_oob");
- MPIU_Memcpy (d_buf, _s_buf, len);
+ MPIR_Memcpy (d_buf, _s_buf, len);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_GET);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_GET);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -265,9 +265,9 @@ MPID_nem_mpich_win_getv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
int mpi_errno = MPI_SUCCESS;
size_t diff;
int len;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_GETV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_WIN_GETV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_GETV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_WIN_GETV);
diff = (char *)remote_win->local_address - (char *)remote_win->home_address;
@@ -280,7 +280,7 @@ MPID_nem_mpich_win_getv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
if ((*d_iov)->iov_len > (*s_iov)->iov_len)
{
len = (*s_iov)->iov_len;
- MPIU_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
+ MPIR_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
(*d_iov)->iov_base = (char *)(*d_iov)->iov_base + len;
(*d_iov)->iov_len =- len;
@@ -294,7 +294,7 @@ MPID_nem_mpich_win_getv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
else if ((*d_iov)->iov_len > (*s_iov)->iov_len)
{
len = (*d_iov)->iov_len;
- MPIU_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
+ MPIR_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
++(*d_iov);
--(*d_niov);
@@ -305,7 +305,7 @@ MPID_nem_mpich_win_getv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
else
{
len = (*d_iov)->iov_len;
- MPIU_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
+ MPIR_Memcpy ((char*)((*d_iov)->iov_base) + diff, (*s_iov)->iov_base, len);
++(*d_iov);
--(*d_niov);
@@ -319,7 +319,7 @@ MPID_nem_mpich_win_getv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_GETV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_WIN_GETV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -343,31 +343,31 @@ MPID_nem_mpich_serialize_win (void *buf, int buf_len, MPID_nem_mpich_win_t *win,
int bl = buf_len;
char *b = (char *)buf;
int handle_len;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_SERIALIZE_WIN);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_SERIALIZE_WIN);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_SERIALIZE_WIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_SERIALIZE_WIN);
handle_len = strlen (win->handle);
- str_errno = MPIU_Str_add_int_arg (&b, &bl, WIN_HANLEN_KEY, handle_len);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
- str_errno = MPIU_Str_add_string_arg(&b, &bl, WIN_HANDLE_KEY, win->handle);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
- str_errno = MPIU_Str_add_int_arg (&b, &bl, WIN_PROC_KEY, win->proc);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
- str_errno = MPIU_Str_add_binary_arg (&b, &bl, WIN_HOME_ADDR_KEY, win->home_address, sizeof (win->home_address));
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
- str_errno = MPIU_Str_add_int_arg (&b, &bl, WIN_LEN_KEY, win->len);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
+ str_errno = MPL_str_add_int_arg (&b, &bl, WIN_HANLEN_KEY, handle_len);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
+ str_errno = MPL_str_add_string_arg(&b, &bl, WIN_HANDLE_KEY, win->handle);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
+ str_errno = MPL_str_add_int_arg (&b, &bl, WIN_PROC_KEY, win->proc);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
+ str_errno = MPL_str_add_binary_arg (&b, &bl, WIN_HOME_ADDR_KEY, win->home_address, sizeof (win->home_address));
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
+ str_errno = MPL_str_add_int_arg (&b, &bl, WIN_LEN_KEY, win->len);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**winserialize");
*len = buf_len - bl;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_SERIALIZE_WIN);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_SERIALIZE_WIN);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -385,39 +385,39 @@ MPID_nem_mpich_deserialize_win (void *buf, int buf_len, MPID_nem_mpich_win_t **w
int ol;
char *b = (char *)buf;
int handle_len;
- MPIU_CHKPMEM_DECL(2);
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_DESERIALIZE_WIN);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_DESERIALIZE_WIN);
-
- MPIU_CHKPMEM_MALLOC (*win, MPID_nem_mpich_win_t *, sizeof (MPID_nem_mpich_win_t), mpi_errno, "win object");
-
- str_errno = MPIU_Str_get_int_arg (b, WIN_HANLEN_KEY, &handle_len);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
- MPIU_CHKPMEM_MALLOC ((*win)->handle, char *, handle_len, mpi_errno, "window handle");
-
- str_errno = MPIU_Str_get_string_arg(b, WIN_HANDLE_KEY, (*win)->handle, handle_len);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
- str_errno = MPIU_Str_get_int_arg (b, WIN_PROC_KEY, &(*win)->proc);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
- str_errno = MPIU_Str_get_binary_arg (b, WIN_HOME_ADDR_KEY, (char *)&(*win)->home_address, sizeof ((*win)->home_address), &ol);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL || ol != sizeof ((*win)->home_address), mpi_errno, MPI_ERR_OTHER, "**windeserialize");
- str_errno = MPIU_Str_get_int_arg (b, WIN_LEN_KEY, &(*win)->len);
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIR_ERR_CHKANDJUMP (str_errno == MPIU_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
+ MPIR_CHKPMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_DESERIALIZE_WIN);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_DESERIALIZE_WIN);
+
+ MPIR_CHKPMEM_MALLOC (*win, MPID_nem_mpich_win_t *, sizeof (MPID_nem_mpich_win_t), mpi_errno, "win object");
+
+ str_errno = MPL_str_get_int_arg (b, WIN_HANLEN_KEY, &handle_len);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
+ MPIR_CHKPMEM_MALLOC ((*win)->handle, char *, handle_len, mpi_errno, "window handle");
+
+ str_errno = MPL_str_get_string_arg(b, WIN_HANDLE_KEY, (*win)->handle, handle_len);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
+ str_errno = MPL_str_get_int_arg (b, WIN_PROC_KEY, &(*win)->proc);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
+ str_errno = MPL_str_get_binary_arg (b, WIN_HOME_ADDR_KEY, (char *)&(*win)->home_address, sizeof ((*win)->home_address), &ol);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL || ol != sizeof ((*win)->home_address), mpi_errno, MPI_ERR_OTHER, "**windeserialize");
+ str_errno = MPL_str_get_int_arg (b, WIN_LEN_KEY, &(*win)->len);
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ MPIR_ERR_CHKANDJUMP (str_errno == MPL_STR_FAIL, mpi_errno, MPI_ERR_OTHER, "**windeserialize");
(*win)->local_address = 0;
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_DESERIALIZE_WIN);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_DESERIALIZE_WIN);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -429,16 +429,16 @@ int
MPID_nem_mpich_register_memory (void *buf, int len)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_REGISTER_MEMORY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_REGISTER_MEMORY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_REGISTER_MEMORY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_REGISTER_MEMORY);
/* if (MPID_NEM_NET_MODULE == MPID_NEM_GM_MODULE) */
/* { */
/* /\*return MPID_nem_gm_module_register_mem (buf, len);*\/ */
/* } */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_REGISTER_MEMORY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_REGISTER_MEMORY);
return mpi_errno;
}
@@ -450,16 +450,16 @@ int
MPID_nem_mpich_deregister_memory (void *buf, int len)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_DEREGISTER_MEMORY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_DEREGISTER_MEMORY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_DEREGISTER_MEMORY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_DEREGISTER_MEMORY);
/* if (MPID_NEM_NET_MODULE == MPID_NEM_GM_MODULE) */
/* { */
/* /\*return MPID_nem_gm_module_deregister_mem (buf, len);*\/ */
/* } */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_DEREGISTER_MEMORY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_DEREGISTER_MEMORY);
return mpi_errno;
}
@@ -471,9 +471,9 @@ int
MPID_nem_mpich_put (void *s_buf, void *d_buf, int len, int proc, int *completion_ctr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_PUT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_PUT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_PUT);
if (MPID_NEM_IS_LOCAL (proc))
{
@@ -495,7 +495,7 @@ MPID_nem_mpich_put (void *s_buf, void *d_buf, int len, int proc, int *completion
*/
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_PUT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_PUT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -511,9 +511,9 @@ MPID_nem_mpich_putv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov, in
{
int mpi_errno = MPI_SUCCESS;
/* int len;*/
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_PUTV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_PUTV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_PUTV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_PUTV);
if (MPID_NEM_IS_LOCAL (proc))
{
@@ -572,7 +572,7 @@ MPID_nem_mpich_putv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov, in
*/
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_PUTV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_PUTV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -586,9 +586,9 @@ int
MPID_nem_mpich_get (void *s_buf, void *d_buf, int len, int proc, int *completion_ctr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_GET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_GET);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_GET);
if (MPID_NEM_IS_LOCAL (proc))
{
@@ -610,7 +610,7 @@ MPID_nem_mpich_get (void *s_buf, void *d_buf, int len, int proc, int *completion
*/
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_GET);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_GET);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -626,9 +626,9 @@ MPID_nem_mpich_getv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov, in
{
int mpi_errno = MPI_SUCCESS;
/* int len; */
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_GETV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_GETV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_GETV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_MPICH_GETV);
if (MPID_NEM_IS_LOCAL (proc))
{
@@ -687,7 +687,7 @@ MPID_nem_mpich_getv (struct iovec **s_iov, int *s_niov, struct iovec **d_iov, in
*/
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_MPICH_GETV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_MPICH_GETV);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c
index 636ffa1..7c89e20 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c
@@ -22,7 +22,7 @@ cvars:
scope : MPI_T_SCOPE_ALL_EQ
description : >-
If non-empty, this cvar specifies which network module
- should be used for communication.
+ should be used for communication. This variable is case-insensitive.
=== END_MPI_T_CVAR_INFO_BLOCK ===
*/
@@ -41,11 +41,11 @@ int MPID_nem_choose_netmod(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_CHOOSE_NETMOD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_NEM_CHOOSE_NETMOD);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_CHOOSE_NETMOD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_NEM_CHOOSE_NETMOD);
- MPIU_Assert(MPIR_CVAR_NEMESIS_NETMOD != NULL);
+ MPIR_Assert(MPIR_CVAR_NEMESIS_NETMOD != NULL);
if (strcmp(MPIR_CVAR_NEMESIS_NETMOD, "") == 0)
{
/* netmod not specified, using the default */
@@ -59,7 +59,7 @@ int MPID_nem_choose_netmod(void)
for (i = 0; i < MPID_nem_num_netmods; ++i)
{
- if (!MPIU_Strncasecmp(MPIR_CVAR_NEMESIS_NETMOD, MPID_nem_netmod_strings[i], MPID_NEM_MAX_NETMOD_STRING_LEN))
+ if (!MPIR_Strncasecmp(MPIR_CVAR_NEMESIS_NETMOD, MPID_nem_netmod_strings[i], MPID_NEM_MAX_NETMOD_STRING_LEN))
{
MPID_nem_netmod_func = MPID_nem_netmod_funcs[i];
MPID_nem_netmod_id = i;
@@ -73,7 +73,7 @@ int MPID_nem_choose_netmod(void)
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**invalid_netmod", "**invalid_netmod %s", MPIR_CVAR_NEMESIS_NETMOD);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_CHOOSE_NETMOD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_NEM_CHOOSE_NETMOD);
return mpi_errno;
fn_fail:
diff --git a/src/mpid/ch3/channels/nemesis/subconfigure.m4 b/src/mpid/ch3/channels/nemesis/subconfigure.m4
index 062698f..2ab9cda 100644
--- a/src/mpid/ch3/channels/nemesis/subconfigure.m4
+++ b/src/mpid/ch3/channels/nemesis/subconfigure.m4
@@ -1,4 +1,5 @@
[#] start of __file__
+dnl MPICH_SUBCFG_BEFORE=src/mpid/common/shm
dnl
dnl _PREREQ handles the former role of mpichprereq, setup_device, etc
AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
@@ -24,6 +25,8 @@ else
fi
export nemesis_networks
+# the nemesis channel depends on the common shm code
+build_mpid_common_shm=yes
])dnl end AM_COND_IF(BUILD_CH3_NEMESIS,...)
])dnl
dnl
@@ -181,10 +184,10 @@ AC_CHECK_FUNCS(rand)
AC_CHECK_FUNCS(srand)
# Check for available shared memory functions
-PAC_ARG_SHARED_MEMORY
-if test "$with_shared_memory" != "mmap" -a "$with_shared_memory" != "sysv"; then
- AC_MSG_ERROR([cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory])
-fi
+#PAC_ARG_SHARED_MEMORY
+#if test "$with_shared_memory" != "mmap" -a "$with_shared_memory" != "sysv"; then
+# AC_MSG_ERROR([cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory])
+#fi
AC_ARG_ENABLE(nemesis-shm-collectives, [--enable-nemesis-shm-collectives - enables use of shared memory for collective comunication within a node],
AC_DEFINE(ENABLED_SHM_COLLECTIVES, 1, [Define to enable shared-memory collectives]))
diff --git a/src/mpid/ch3/channels/nemesis/utils/monitor/.state-cache b/src/mpid/ch3/channels/nemesis/utils/monitor/.state-cache
index 10c5b33..0e68f83 100644
--- a/src/mpid/ch3/channels/nemesis/utils/monitor/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/utils/monitor/.state-cache
@@ -1,13 +1,13 @@
<dir>
-<file name="my_papi_defs.h" info="1447123141"/>
-<file name="papi_defs.c" info="1447123141"/>
-<file name="rdtsc.h" info="1447123141"/>
+<file name="papi_defs.c" info="1478973152"/>
+<file name="rdtsc.h" info="1478973152"/>
+<file name="my_papi_defs.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="my_papi_defs.h">
-</fileinfo>
<fileinfo name="papi_defs.c">
</fileinfo>
<fileinfo name="rdtsc.h">
</fileinfo>
+<fileinfo name="my_papi_defs.h">
+</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/nemesis/utils/replacements/.state-cache b/src/mpid/ch3/channels/nemesis/utils/replacements/.state-cache
index 4e46e9d..7e6e4d5 100644
--- a/src/mpid/ch3/channels/nemesis/utils/replacements/.state-cache
+++ b/src/mpid/ch3/channels/nemesis/utils/replacements/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="mkstemp.c" info="1447123141"/>
+<file name="mkstemp.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="mkstemp.c">
diff --git a/src/mpid/ch3/channels/sock/include/.state-cache b/src/mpid/ch3/channels/sock/include/.state-cache
index d2f2f33..ccb6a94 100644
--- a/src/mpid/ch3/channels/sock/include/.state-cache
+++ b/src/mpid/ch3/channels/sock/include/.state-cache
@@ -1,13 +1,19 @@
<dir>
-<file name="mpidi_ch3_pre.h" info="1447123141"/>
-<file name="mpidi_ch3_impl.h" info="1447123141"/>
-<file name="mpidi_ch3_post.h" info="1447123141"/>
+<file name="mpidu_sock.h" info="1478973152"/>
+<file name="mpidu_socki.h" info="1478973152"/>
+<file name="mpidi_ch3_impl.h" info="1478973152"/>
+<file name="mpidi_ch3_post.h" info="1478973152"/>
+<file name="mpidi_ch3_pre.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpidi_ch3_pre.h">
+<fileinfo name="mpidu_sock.h">
+</fileinfo>
+<fileinfo name="mpidu_socki.h">
</fileinfo>
<fileinfo name="mpidi_ch3_impl.h">
</fileinfo>
<fileinfo name="mpidi_ch3_post.h">
</fileinfo>
+<fileinfo name="mpidi_ch3_pre.h">
+</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/sock/include/mpidi_ch3_impl.h b/src/mpid/ch3/channels/sock/include/mpidi_ch3_impl.h
index 27f09a8..f7f6cd4 100644
--- a/src/mpid/ch3/channels/sock/include/mpidi_ch3_impl.h
+++ b/src/mpid/ch3/channels/sock/include/mpidi_ch3_impl.h
@@ -20,7 +20,7 @@
#define MPIDI_CH3I_SendQ_enqueue(vcch, req) \
{ \
- MPIU_DBG_MSG(CH3_MSG,TYPICAL,"Enqueuing this request");\
+ MPL_DBG_MSG(MPIDI_CH3_DBG_MSG,TYPICAL,"Enqueuing this request");\
MPIR_Request_add_ref(req); \
req->dev.next = NULL; \
if (vcch->sendq_tail != NULL) \
@@ -37,7 +37,7 @@
/* MT - not thread safe! */
#define MPIDI_CH3I_SendQ_enqueue_head(vcch, req) \
{ \
- MPIU_DBG_MSG(CH3_MSG,TYPICAL,"Enqueuing this request at head");\
+ MPL_DBG_MSG(MPIDI_CH3_DBG_MSG,TYPICAL,"Enqueuing this request at head");\
MPIR_Request_add_ref(req); \
req->dev.next = vcch->sendq_head; \
if (vcch->sendq_tail == NULL) \
@@ -50,14 +50,14 @@
/* MT - not thread safe! */
#define MPIDI_CH3I_SendQ_dequeue(vcch) \
{ \
- MPID_Request *req_ = vcch->sendq_head; \
- MPIU_DBG_MSG(CH3_MSG,TYPICAL,"Dequeuing this request");\
+ MPIR_Request *req_ = vcch->sendq_head; \
+ MPL_DBG_MSG(MPIDI_CH3_DBG_MSG,TYPICAL,"Dequeuing this request");\
vcch->sendq_head = vcch->sendq_head->dev.next; \
if (vcch->sendq_head == NULL) \
{ \
vcch->sendq_tail = NULL; \
} \
- MPID_Request_release(req_); \
+ MPIR_Request_free(req_); \
}
diff --git a/src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h b/src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h
index 8e444d8..897c80b 100644
--- a/src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h
+++ b/src/mpid/ch3/channels/sock/include/mpidi_ch3_pre.h
@@ -46,10 +46,10 @@ MPIDI_CH3I_VC_state_t;
/* channel-specific fields for the VC structure */
typedef struct MPIDI_CH3I_VC
{
- struct MPID_Request * sendq_head;
- struct MPID_Request * sendq_tail;
+ struct MPIR_Request * sendq_head;
+ struct MPIR_Request * sendq_tail;
MPIDI_CH3I_VC_state_t state;
- struct MPIDU_Sock *sock;
+ struct MPIDI_CH3I_Sock *sock;
struct MPIDI_CH3I_Connection * conn;
}
MPIDI_CH3I_VC;
@@ -57,12 +57,12 @@ MPIDI_CH3I_VC;
#define MPIDI_CH3_VC_DECL struct MPIDI_CH3I_VC ch;
/*
- * MPIDI_CH3_REQUEST_DECL (additions to MPID_Request)
+ * MPIDI_CH3_REQUEST_DECL (additions to MPIR_Request)
* The socket channel makes no additions
*/
/*
- * MPID_Progress_state - device/channel dependent state to be passed between
+ * MPID_Progress_state - device/channel dependent state to be passed between
* MPID_Progress_{start,wait,end}
*
*/
diff --git a/src/mpid/ch3/channels/sock/include/mpidu_sock.h b/src/mpid/ch3/channels/sock/include/mpidu_sock.h
new file mode 100644
index 0000000..dbd0b4a
--- /dev/null
+++ b/src/mpid/ch3/channels/sock/include/mpidu_sock.h
@@ -0,0 +1,1130 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPIDI_CH3I_SOCK_H_INCLUDED)
+#define MPIDI_CH3I_SOCK_H_INCLUDED
+
+#if defined(__cplusplus)
+#if !defined(CPLUSPLUS_BEGIN)
+#define CPLUSPLUS_BEGIN extern "C" {
+#define CPLUSPLUS_END }
+#endif
+#else
+#define CPLUSPLUS_BEGIN
+#define CPLUSPLUS_END
+#endif
+
+CPLUSPLUS_BEGIN
+
+/* Load just the utility definitions that we need */
+#include "mpichconf.h"
+#include "mpl.h"
+#include "mpir_strerror.h"
+#include "mpir_type_defs.h"
+#include "mpir_assert.h"
+#include "mpir_pointers.h"
+#include "mpir_cvars.h"
+/* implementation specific header file */
+#include "mpidu_socki.h"
+
+
+/*D
+MPIDI_CH3I_SOCK_ERR - Extended error classes specific to the Sock module
+
+Notes:
+The actual meaning of these error classes is defined by each function.
+
+Module:
+Utility-Sock
+D*/
+/* FIXME: This is not the right way to add error values to an MPICH module.
+ Note that (a) the last class values are not respected by the error handling
+ code, (b) the entire point of codes and classes is to provide a
+ natural grouping of codes to a class, (c) this approach can only be used
+ by one module and hence breaks any component design, and (d) this is
+ what the MPI dynamic error codes and classes was designed for. */
+#define MPIDI_CH3I_SOCK_SUCCESS MPI_SUCCESS
+#define MPIDI_CH3I_SOCK_ERR_FAIL MPICH_ERR_LAST_CLASS + 1
+#define MPIDI_CH3I_SOCK_ERR_INIT MPICH_ERR_LAST_CLASS + 2
+#define MPIDI_CH3I_SOCK_ERR_NOMEM MPICH_ERR_LAST_CLASS + 3
+#define MPIDI_CH3I_SOCK_ERR_BAD_SET MPICH_ERR_LAST_CLASS + 4
+#define MPIDI_CH3I_SOCK_ERR_BAD_SOCK MPICH_ERR_LAST_CLASS + 5
+#define MPIDI_CH3I_SOCK_ERR_BAD_HOST MPICH_ERR_LAST_CLASS + 6
+#define MPIDI_CH3I_SOCK_ERR_BAD_HOSTNAME MPICH_ERR_LAST_CLASS + 7
+#define MPIDI_CH3I_SOCK_ERR_BAD_PORT MPICH_ERR_LAST_CLASS + 8
+#define MPIDI_CH3I_SOCK_ERR_BAD_BUF MPICH_ERR_LAST_CLASS + 9
+#define MPIDI_CH3I_SOCK_ERR_BAD_LEN MPICH_ERR_LAST_CLASS + 10
+#define MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED MPICH_ERR_LAST_CLASS + 11
+#define MPIDI_CH3I_SOCK_ERR_CONN_CLOSED MPICH_ERR_LAST_CLASS + 12
+#define MPIDI_CH3I_SOCK_ERR_CONN_FAILED MPICH_ERR_LAST_CLASS + 13
+#define MPIDI_CH3I_SOCK_ERR_INPROGRESS MPICH_ERR_LAST_CLASS + 14
+#define MPIDI_CH3I_SOCK_ERR_TIMEOUT MPICH_ERR_LAST_CLASS + 15
+#define MPIDI_CH3I_SOCK_ERR_INTR MPICH_ERR_LAST_CLASS + 16
+#define MPIDI_CH3I_SOCK_ERR_NO_NEW_SOCK MPICH_ERR_LAST_CLASS + 17
+
+
+/*E
+MPIDI_CH3I_Sock_op_t - enumeration of posted operations that can be completed by the Sock module
+
+Notes:
+MPIDI_CH3I_SOCK_OP_ACCEPT is different that the other operations. When returned by MPIDI_CH3I_Sock_wait(), operations other than
+MPIDI_CH3I_SOCK_OP_ACCEPT mark the completion of a previously posted operation. MPIDI_CH3I_SOCK_OP_ACCEPT indicates that a new connection is
+being formed and that MPIDI_CH3I_Sock_accept() should be called.
+
+Module:
+Utility-Sock
+E*/
+typedef enum MPIDI_CH3I_Sock_op
+{
+ MPIDI_CH3I_SOCK_OP_READ,
+ MPIDI_CH3I_SOCK_OP_WRITE,
+ MPIDI_CH3I_SOCK_OP_ACCEPT,
+ MPIDI_CH3I_SOCK_OP_CONNECT,
+ MPIDI_CH3I_SOCK_OP_CLOSE,
+ MPIDI_CH3I_SOCK_OP_WAKEUP
+} MPIDI_CH3I_Sock_op_t;
+
+
+/*S
+MPIDI_CH3I_Sock_event_t - event structure returned by MPIDI_CH3I_Sock_wait() describing the operation that completed
+
+Fields:
++ op_type - type of operation that completed
+. num_bytes - number of bytes transferred (if appropriate)
+. user_ptr - user pointer associated with the sock on which this operation completed
+- error - a MPI error code with a Sock extended error class
+
+Notes:
+The num_bytes field is only used when a posted read or write operation completes.
+
+Module:
+Utility-Sock
+S*/
+typedef struct MPIDI_CH3I_Sock_event
+{
+ MPIDI_CH3I_Sock_op_t op_type;
+ size_t num_bytes;
+ void * user_ptr;
+ int error;
+} MPIDI_CH3I_Sock_event_t;
+
+
+/*@
+MPIDI_CH3I_Sock_init - initialize the Sock communication library
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - initialization completed successfully
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure; initialization failed
+
+Notes:
+The Sock module may be initialized multiple times. The implementation should perform reference counting if necessary.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_init(void);
+
+
+/*@
+MPIDI_CH3I_Sock_finalize - shutdown the Sock communication library
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - shutdown completed successfully
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure; shutdown failed
+
+Notes:
+<BRT> What are the semantics of finalize? Is it responsible for releasing any resources (socks and sock sets) that the calling
+code(s) leaked? Should it block until all OS resources are released?
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_finalize(void);
+
+
+/*@
+MPIDI_CH3I_Sock_get_host_description - obtain a description of the host's
+communication capabilities
+
+Input Parameters:
++ myRank - Rank of this process in its MPI_COMM_WORLD. This can be used
+ to find environment variables that are specific for this process.
+. host_description - character array in which the function can store a string
+ describing the communication capabilities of the host
+- len - length of the character array
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - description successfully obtained and placed in host_description
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - len parameter is less than zero
+. MPIDI_CH3I_SOCK_ERR_BAD_HOST - host_description parameter not big enough to
+ store required information
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - unable to obtain network interface information from OS
+
+Notes:
+The host description string returned by the function is defined by the
+implementation and should not be interpreted by the
+application. This string is to be supplied to MPIDI_CH3I_Sock_post_connect() when
+one wishes to form a connection with this host.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_get_host_description(int myRank, char * host_description, int len);
+
+
+/*@
+MPIDI_CH3I_Sock_hostname_to_host_description - convert a host name to a description of the host's communication capabilities
+
+Input Parameters:
++ hostname - host name string
+. host_description - character array in which the function can store a string describing the communication capabilities of the host
+- len - length of host_description
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - description successfully obtained and placed in host_description
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - len parameter is less than zero
+. MPIDI_CH3I_SOCK_ERR_BAD_HOSTNAME - hostname parameter not valid
+. MPIDI_CH3I_SOCK_ERR_BAD_HOST - host_description parameter not big enough to store required information
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - unable to obtain network interface information from OS
+
+Notes:
+The host description string returned by the function is defined by the implementation and should not be interpreted by the
+application. This string is to be supplied to MPIDI_CH3I_Sock_post_connect() when one wishes to form a connection with the host
+specified by hostname.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_hostname_to_host_description(char *hostname, char * host_description, int len);
+
+/*@
+MPIDI_CH3I_Sock_create_set - create a new sock set object
+
+Output Parameter:
+. set - pointer to the new sock set object
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - new sock set successfully create
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - pointer to the sock set object is bad
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure
+
+Notes:
+A sock set contains zero or more sock objects. Each sock object belongs to a single sock set and is bound to that set for the life
+of that object.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_create_set(MPIDI_CH3I_Sock_set_t * set);
+
+
+/*@
+MPIDI_CH3I_Sock_close_open_sockets - close the first open sockets of a sock_element
+
+Input Parameter:
+. set - set to be considered
+
+Output Parameter:
+. user_ptr - pointer to the user pointer pointer of a socket.
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - sock set successfully destroyed
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - unable to destroy the sock set (<BRT> because it still contained active sock objects?)
+
+
+Notes:
+This function only closes the first open socket of a sock_set and returns the
+user pointer of the sock-info structure. To close all sockets, the function must
+be called repeatedly, untiluser_ptr == NULL. The reason for this is
+that the overlying protocoll may need the user_ptr for further cleanup.
+
+@*/
+int MPIDI_CH3I_Sock_close_open_sockets(struct MPIDI_CH3I_Sock_set * sock_set, void** user_ptr );
+
+
+/*@
+MPIDI_CH3I_Sock_destroy_set - destroy an existing sock set, releasing an internal resource associated with that set
+
+Input Parameter:
+. set - set to be destroyed
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - sock set successfully destroyed
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - unable to destroy the sock set (<BRT> because it still contained active sock objects?)
+
+Notes:
+<BRT> What are the semantics for destroying a sock set that still contains active sock objects? sock objects by definition
+cannot exist outside of a set.
+
+It is consider erroneous to destroy a set that still contains sock objects or is being operated upon with an of the Sock routines.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_destroy_set(MPIDI_CH3I_Sock_set_t set);
+
+
+/*@
+MPIDI_CH3I_Sock_native_to_sock - convert a native file descriptor/handle to a sock object
+
+Input Parameters:
++ set - sock set to which the new sock should be added
+. fd - native file descriptor
+- user_ptr - user pointer to be associated with the new sock
+
+Output Parameter:
+. sock - new sock object
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - sock successfully created
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set
+. MPIDI_CH3I_SOCK_ERR_BAD_NATIVE_FD - invalid native file descriptor
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure; listener sock could not be created
+
+Notes:
+The constraints on which file descriptors/handles may be converted to a sock object are defined by the implementation. The
+implementation may return MPIDI_CH3I_SOCK_ERR_BAD_NATIVE_FD if the descriptor/handle cannot be used with the implementation. It is
+possible, however, that the conversion of an inappropriate descriptor/handle may complete successfully but the sock object may not
+function properly.
+
+Thread safety:
+The addition of a new sock object to the sock set may occur while other threads are performing operations on the same sock set.
+Thread safety of simultaneously operations on the same sock set must be guaranteed by the Sock implementation.
+
+@*/
+int MPIDI_CH3I_Sock_native_to_sock(MPIDI_CH3I_Sock_set_t set, MPIDI_CH3I_SOCK_NATIVE_FD fd, void * user_ptr, MPIDI_CH3I_Sock_t * sock);
+
+
+/*@
+MPIDI_CH3I_Sock_listen - establish a listener sock
+
+Input Parameters:
++ set - sock set to which the listening sock should be added
+. user_ptr - user pointer associated with the new sock object
+- port - desired port (or zero if a specific port is not desired)
+
+Output Parameters:
++ port - port assigned to the listener
+- sock - new listener sock
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - listener sock successfully established
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set
+. MPIDI_CH3I_SOCK_ERR_BAD_PORT - port number is out of range or pointer to port parameter is invalid
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure; listener sock could not be created
+
+Events generated:
+. MPIDI_CH3I_SOCK_OP_ACCEPT - each time a new connection is being formed and needs to be accepted (with MPIDI_CH3I_Sock_accept())
+
+Event errors:
++ MPI_SUCCESS - new sock waiting to be accepted
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure?
+
+Notes:
+While not a post routine, this routine can generate events. In fact,
+unlike the post routine, many MPIDI_CH3I_SOCK_OP_ACCEPT events can
+be generated from a listener (typically one per incoming connection attempt).
+
+The implementation may generate an event as soon it is notified that a
+new connection is forming. In such an implementation,
+MPIDI_CH3I_Sock_accept() may be responsible for finalizing the connection.
+It is also possible that the connection may fail to
+complete, causing MPIDI_CH3I_Sock_accept() to be unable to obtain a sock
+despite the event notification.
+
+The environment variable MPICH_PORT_RANGE=min:max may be used to
+restrict the ports mpich processes listen on.
+
+Thread safety:
+The addition of the listener sock object to the sock set may occur
+while other threads are performing operations on the same sock
+set. Thread safety of simultaneously operations on the same sock set
+must be guaranteed by the Sock implementation.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_listen(MPIDI_CH3I_Sock_set_t set, void * user_ptr, int * port, MPIDI_CH3I_Sock_t * sock);
+
+
+/*@
+MPIDI_CH3I_Sock_accept - obtain the sock object associated with a new connection
+
+Input Parameters:
++ listener_sock - listener sock object from which to obtain the new connection
+. set - sock set to which the new sock object should be added
+- user_ptr - user pointer associated with the new sock object
+
+Output Parameter:
+. sock - sock object for the new connection
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - new connection successfully established and associated with new sock objecta
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_NO_NEW_SOCK - no new connection was available
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid listener sock or bad pointer to new sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - failed to acquire a new connection
+
+Notes:
+In the event of a connection failure, MPIDI_CH3I_Sock_accept() may fail to acquire and return a new sock despite any
+MPIDI_CH3I_SOCK_OP_ACCEPT event notification. On the other hand, MPIDI_CH3I_Sock_accept() may return a sock for which the underlying
+connection has already failed. (The Sock implementation may be unaware of the failure until read/write operations are performed.)
+
+Thread safety:
+The addition of the new sock object to the sock set may occur while other threads are performing operations on the same sock set.
+Thread safety of simultaneously operations on the same sock set must be guaranteed by the Sock implementation.
+
+MPIDI_CH3I_Sock_accept() may fail to return a new sock if multiple threads call MPIDI_CH3I_Sock_accept() and queue of new connections is
+depleted. In this case, MPIDI_CH3I_SOCK_ERR_NO_SOCK is returned.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_accept(MPIDI_CH3I_Sock_t listener_sock, MPIDI_CH3I_Sock_set_t set, void * user_ptr, MPIDI_CH3I_Sock_t * sock);
+
+
+/*@
+MPIDI_CH3I_Sock_post_connect - request that a new connection be formed
+
+Input Parameters:
++ set - sock set to which the new sock object should be added
+. user_ptr - user pointer associated with the new sock object
+. host_description - string containing the communication capabilities of the listening host
++ port - port number of listener sock on the listening host
+
+Output Parameter:
+. sock - new sock object associated with the connection request
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - request to form new connection successfully posted
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set
+. MPIDI_CH3I_SOCK_ERR_BAD_HOST - host description string is not valid
+. MPIDI_CH3I_SOCK_ERR_BAD_PORT - port number is out of range
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure attempting to post connection request
+
+Events generated:
+. MPIDI_CH3I_SOCK_OP_CONNECT
+
+Event errors: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - successfully established
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - failed to connect to the remote host
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error?
+
+<BRT> Any other event errors? Does the sock channel require finer granularity?
+
+Notes:
+The host description of the listening host is supplied MPIDI_CH3I_Sock_get_host_description(). The intention is that the description
+contain an enumeration of interface information so that the MPIDI_CH3I_Sock_connect() can try each of the interfaces until it succeeds
+in forming a connection. Having a complete set of interface information also allows a particular interface be used selected by the
+user at runtime using the MPICH_NETMASK. <BRT> The name of the environment variable seems wrong. Perhaps MPICH_INTERFACE? We
+should ask the Systems group.
+
+Thread safety:
+The addition of the new sock object to the sock set may occur while other threads are performing operations on the same sock set.
+Thread safety of simultaneously operations on the same sock set must be guaranteed by the Sock implementation.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_post_connect(MPIDI_CH3I_Sock_set_t set, void * user_ptr, char * host_description, int port, MPIDI_CH3I_Sock_t * sock);
+
+/*S
+ MPIDI_CH3I_Sock_ifaddr_t - Structure to hold an Internet address.
+
++ len - Length of the address. 4 for IPv4, 16 for IPv6.
+- ifaddr - Address bytes (as bytes, not characters)
+
+S*/
+typedef struct MPIDI_CH3I_Sock_ifaddr_t {
+ int len, type;
+ unsigned char ifaddr[16];
+} MPIDI_CH3I_Sock_ifaddr_t;
+
+/*@ MPIDI_CH3I_Sock_post_connect_ifaddr - Post a connection given an interface
+ address (bytes, not string).
+
+ This is the basic routine. MPIDI_CH3I_Sock_post_connect converts the
+ host description into the ifaddr and calls this routine.
+ @*/
+int MPIDI_CH3I_Sock_post_connect_ifaddr( MPIDI_CH3I_Sock_set_t sock_set,
+ void * user_ptr,
+ MPIDI_CH3I_Sock_ifaddr_t *ifaddr, int port,
+ MPIDI_CH3I_Sock_t * sockp);
+
+
+/*@
+MPIDI_CH3I_Sock_set_user_ptr - change the user pointer associated with a sock object
+
+Input Parameters:
++ sock - sock object
+- user_ptr - new user pointer
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - user pointer successfully updated
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure?
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_set_user_ptr(MPIDI_CH3I_Sock_t sock, void * user_ptr);
+
+
+/*@
+MPIDI_CH3I_Sock_post_close - request that an existing connection be closed
+
+Input Parameter:
+. sock - sock object to be closed
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - request to close the connection was successfully posted
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object or close already posted
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other failure?
+
+Events generated:
++ MPIDI_CH3I_SOCK_OP_CLOSE
+. MPIDI_CH3I_SOCK_OP_READ
+- MPIDI_CH3I_SOCK_OP_WRITE
+
+Event errors: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - successfully established
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - an error occurred closing the sock; sock object is still destroyed
+
+Notes:
+If any other operations are posted on the specified sock, they will be terminated. An appropriate event will be generated for each
+terminated operation. All such events will be delivered by MPIDI_CH3I_Sock_wait() prior to the delivery of the MPIDI_CH3I_SOCK_OP_CLOSE
+event.
+
+The sock object is destroyed just prior to the MPIDI_CH3I_SOCK_OP_CLOSE event being returned by MPIDI_CH3I_Sock_wait(). Any oustanding
+references to the sock object held by the application should be considered invalid and not used again.
+
+Thread safety:
+MPIDI_CH3I_Sock_post_close() may be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() specifying the same sock set
+to which this sock belongs. If another thread is blocking MPIDI_CH3I_Sock_wait() and the close operation causes the sock set to become
+empty, then MPIDI_CH3I_Sock_wait() will return with an error.
+
+Calling any of the immediate or post routines during or after the call to MPIDI_CH3I_Sock_post_close() is consider an application error.
+The result of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads
+to ensure that simultaneous calls do not occur.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_post_close(MPIDI_CH3I_Sock_t sock);
+
+
+/*E
+MPIDI_CH3I_Sock_progress_update_func_t - progress update callback functions
+
+If a pointer to a function of this type is passed to one of the post read or write functions, the implementation must honor the
+following rules:
+
+1) The sock progress engine will call this function when partial data has been read or written for the posted operation.
+
+2) All progress_update calls must complete before completion notification is signalled. In other words, MPIDI_CH3I_Sock_wait() will not
+return until all progress_update calls have completed.
+
+Notes:
+<BRT> We need to define ordering and delivery from multiple threads. Do the handlers have to be thread safe? If so, then the
+internal progress engine could block on an application routine.
+
+Module:
+Utility-Sock
+E*/
+typedef int (* MPIDI_CH3I_Sock_progress_update_func_t)(size_t num_bytes, void * user_ptr);
+
+
+/*@
+MPIDI_CH3I_Sock_post_read - request that data be read from a sock
+
+Input Parameters:
++ sock - sock object from which data is to be read
+. buf - buffer into which the data should be placed
+. minlen - minimum number of bytes to read
+. maxlen - maximum number of bytes to read
++ upate_fn - application progress update function (may be NULL)
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - request to read was successfully posted
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - length parameters must be greater than zero and maxlen must be greater than minlen
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to post read
+
+Events generated:
+. MPIDI_CH3I_SOCK_OP_READ
+
+Event errors: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - successfully established
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by buf and maxlen resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error completing the read
+
+Notes:
+Only one read operation may be posted at a time. Furthermore, an immediate read may not be performed while a posted write is
+outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
+choose to catch the error and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+If MPIDI_CH3I_Sock_post_close() is called before the posted read operation completes, the read operation will be terminated and a
+MPIDI_CH3I_SOCK_OP_READ event containing a MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
+MPIDI_CH3I_Sock_wait() prior to the MPIDI_CH3I_SOCK_OP_CLOSE event.
+
+Thread safety:
+MPIDI_CH3I_Sock_post_read() may be called while another thread is attempting to perform an immediate write or post a write operation on
+the same sock. MPIDI_CH3I_Sock_post_read() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the
+same sock set to which the specified sock belongs.
+
+MPIDI_CH3I_Sock_post_write() may not be called while another thread is performing an immediate read on the same sock. This is
+considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
+and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_post_read() during or after the call to MPIDI_CH3I_Sock_post_close() is consider an application error. The result of
+doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure that
+one thread is not attempting to post a new operation while another thread is attempting to close the sock.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_post_read(MPIDI_CH3I_Sock_t sock, void * buf, size_t minbr, size_t maxbr,
+ MPIDI_CH3I_Sock_progress_update_func_t fn);
+
+
+/*@
+MPIDI_CH3I_Sock_post_readv - request that a vector of data be read from a sock
+
+Input Parameters:
++ sock - sock object from which the data is to read
+. iov - I/O vector describing buffers into which the data is placed
+. iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
++ upate_fn - application progress update function (may be NULL)
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - request to read was successfully posted
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - iov_n is out of range
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to post read
+
+Events generated:
+. MPIDI_CH3I_SOCK_OP_READ
+
+Event errors: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - successfully established
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error completing the read
+
+Notes:
+Only one read operation may be posted at a time. Furthermore, an immediate read may not be performed while a posted write is
+outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
+choose to catch the error and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+If MPIDI_CH3I_Sock_post_close() is called before the posted read operation completes, the read operation will be terminated and a
+MPIDI_CH3I_SOCK_OP_READ event containing a MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
+MPIDI_CH3I_Sock_wait() prior to the MPIDI_CH3I_SOCK_OP_CLOSE event.
+
+Thread safety:
+MPIDI_CH3I_Sock_post_readv() may be called while another thread is attempting to perform an immediate write or post a write operation on
+the same sock. MPIDI_CH3I_Sock_post_readv() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the
+same sock set to which the specified sock belongs.
+
+MPIDI_CH3I_Sock_post_readv() may not be called while another thread is performing an immediate read on the same sock. This is
+considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
+and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_post_readv() during or after the call to MPIDI_CH3I_Sock_post_close() is consider an application error. The result
+of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure
+that one thread is not attempting to post a new operation while another thread is attempting to close the sock.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_post_readv(MPIDI_CH3I_Sock_t sock, MPL_IOV * iov, int iov_n, MPIDI_CH3I_Sock_progress_update_func_t fn);
+
+
+/*@
+MPIDI_CH3I_Sock_post_write - request that data be written to a sock
+
+Input Parameters:
++ sock - sock object which the data is to be written
+. buf - buffer containing the data
+. minlen - minimum number of bytes to write
+. maxlen - maximum number of bytes to write
++ upate_fn - application progress aupdate function (may be NULL)
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - request to write was successfully posted
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - length parameters must be greater than zero and maxlen must be greater than minlen
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to post write
+
+Events generated:
+. MPIDI_CH3I_SOCK_OP_WRITE
+
+Event errors: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - successfully established
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by buf and maxlen resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error completing the write
+
+Notes:
+Only one write operation may be posted at a time. Furthermore, an immediate write may not be performed while a posted write is
+outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
+choose to catch the error and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+If MPIDI_CH3I_Sock_post_close() is called before the posted write operation completes, the write operation will be terminated and a
+MPIDI_CH3I_SOCK_OP_WRITE event containing a MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
+MPIDI_CH3I_Sock_wait() prior to the MPIDI_CH3I_SOCK_OP_CLOSE event.
+
+Thread safety:
+MPIDI_CH3I_Sock_post_write() may be called while another thread is attempting to perform an immediate read or post a read operation on
+the same sock. MPIDI_CH3I_Sock_post_write() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the
+same sock set to which the specified sock belongs.
+
+MPIDI_CH3I_Sock_post_write() may not be called while another thread is performing an immediate write on the same sock. This is
+considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
+and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_post_write() during or after the call to MPIDI_CH3I_Sock_post_close() is consider an application error. The result
+of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure
+that one thread is not attempting to post a new operation while another thread is attempting to close the sock. <BRT> Do we really
+need this flexibility?
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_post_write(MPIDI_CH3I_Sock_t sock, void * buf, size_t min, size_t max,
+ MPIDI_CH3I_Sock_progress_update_func_t fn);
+
+
+/*@
+MPIDI_CH3I_Sock_post_writev - request that a vector of data be written to a sock
+
+Input Parameters:
++ sock - sock object which the data is to be written
+. iov - I/O vector describing buffers of data to be written
+. iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
++ upate_fn - application progress update function (may be NULL)
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - request to write was successfully posted
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - iov_n is out of range
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to post write
+
+Events generated:
+. MPIDI_CH3I_SOCK_OP_WRITE
+
+Event errors: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - successfully established
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error completing the write
+
+Notes:
+Only one write operation may be posted at a time. Furthermore, an immediate write may not be performed while a posted write is
+outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
+choose to catch the error and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+If MPIDI_CH3I_Sock_post_close() is called before the posted write operation completes, the write operation will be terminated and a
+MPIDI_CH3I_SOCK_OP_WRITE event containing a MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
+MPIDI_CH3I_Sock_wait() prior to the MPIDI_CH3I_SOCK_OP_CLOSE event.
+
+Thread safety:
+MPIDI_CH3I_Sock_post_writev() may be called while another thread is attempting to perform an immediate read or post a read operation on
+the same sock. MPIDI_CH3I_Sock_post_writev() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the
+same sock set to which the specified sock belongs.
+
+MPIDI_CH3I_Sock_post_writev() may not be called while another thread is performing an immediate write on the same sock. This is
+considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
+and return MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_post_writev() during or after the call to MPIDI_CH3I_Sock_post_close() is consider an application error. The result
+of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure
+that one thread is not attempting to post a new operation while another thread is attempting to close the sock.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_post_writev(MPIDI_CH3I_Sock_t sock, MPL_IOV * iov, int iov_n, MPIDI_CH3I_Sock_progress_update_func_t fn);
+
+
+/*@
+MPIDI_CH3I_Sock_wait - wait for an event
+
+Input Parameters:
++ set - sock set upon which to wait for an event
+- timeout - timeout in milliseconds (<0 for infinity)
+
+Output Parameter:
+. event - pointer to the event structure to be populated
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - a new event was returned
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set object
+. MPIDI_CH3I_SOCK_ERR_TIMEOUT - a timeout occurred
+. MPIDI_CH3I_SOCK_ERR_INTR - the routine was interrupted by a call to MPIDI_CH3I_Sock_wakeup()
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error (are there any?)
+
+Notes:
+MPIDI_CH3I_Sock_wakeup() can be called from another thread to force MPIDI_CH3I_Sock_wait() to return with a MPIDI_CH3I_SOCK_ERR_INTR error.
+MPIDI_CH3I_Sock_wakeup() may not be called from within a progress update function or any function directly or indirectly called by a
+progress update function.
+
+Thread safety:
+New operations may be posted to sock contained in the specified sock set while another thread is calling or blocking in
+MPIDI_CH3I_Sock_wait(). These operations should complete as though they were posted before MPIDI_CH3I_Sock_wait() was called.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_wait(MPIDI_CH3I_Sock_set_t set, int timeout, MPIDI_CH3I_Sock_event_t * event);
+
+
+/*@
+MPIDI_CH3I_Sock_wakeup - wakeup a MPIDI_CH3I_Sock_wait blocking in another thread
+
+Input Parameter:
+. set - sock set upon which to wait for an event
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - wakeup request successfully processed
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SET - invalid sock set object
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory (is this possible?)
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error (are there any?)
+
+Notes:
+This routine forces a MPIDI_CH3I_Sock_wait() blocking in another thread to wakeup and return a MPIDI_CH3I_SOCK_ERR_INTR error.
+MPIDI_CH3I_Sock_wakeup() may not be called from within a progress update function or any function directly or indirectly called by a
+progress update function.
+
+The implementation should strive to only wakeup a MPIDI_CH3I_Sock_wait() that is already blocking; however, it is acceptable (although
+undesireable) for it wakeup a MPIDI_CH3I_Sock_wait() that is called in the future.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_wakeup(MPIDI_CH3I_Sock_set_t set);
+
+/*@
+MPIDI_CH3I_Sock_read - perform an immediate read
+
+Input Parameters:
++ sock - sock object from which data is to be read
+. buf - buffer into which the data should be placed
+- len - maximum number of bytes to read
+
+Output Parameter:
+. num_read - number of bytes actually read
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - no error encountered during the read operation
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by buf and len resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - length parameter must be greater than zero
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to post read
+
+Notes:
+
+An immediate read may not be performed while a posted read is outstanding on the same sock. This is considered to be an
+application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Thread safety:
+MPIDI_CH3I_Sock_read() may be called while another thread is attempting to perform an immediate write or post a write operation on the
+same sock. MPIDI_CH3I_Sock_read() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the same sock
+set to which the specified sock belongs.
+
+A immediate read may not be performed if another thread is performing an immediate read on the same sock. This is considered to be
+an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_read() during or after the call to MPIDI_CH3I_Sock_post_close() is consider an application error. The result of
+doing so is undefined, although the implementation may choose to return MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED if it is able to catch the
+error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
+not attempting to perform an immediate read while another thread is attempting to close the sock.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_read(MPIDI_CH3I_Sock_t sock, void * buf, size_t len, size_t * num_read);
+
+
+/*@
+MPIDI_CH3I_Sock_readv - perform an immediate vector read
+
+Input Parameters:
++ sock - sock object from which data is to be read
+. iov - I/O vector describing buffers into which the data is placed
+- iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
+
+Output Parameter:
+. num_read - number of bytes actually read
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - no error encountered during the read operation
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - iov_n parameter must be greater than zero and not greater than MPL_IOV_LIMIT
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to post read
+
+Notes:
+
+An immediate read may not be performed while a posted read is outstanding on the same sock. This is considered to be an
+application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Thread safety:
+MPIDI_CH3I_Sock_read() may be called while another thread is attempting to perform an immediate write or post a write operation on the
+same sock. MPIDI_CH3I_Sock_read() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the same sock
+set to which the specified sock belongs.
+
+A immediate read may not be performed if another thread is performing an immediate read on the same sock. This is considered to be
+an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_read() during or after the call to MPIDI_CH3I_Sock_post_close() is consider an application error. The result of
+doing so is undefined, although the implementation may choose to return MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED if it is able to catch the
+error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
+not attempting to perform an immediate read while another thread is attempting to close the sock.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_readv(MPIDI_CH3I_Sock_t sock, MPL_IOV * iov, int iov_n, size_t * num_read);
+
+
+/*@
+MPIDI_CH3I_Sock_write - perform an immediate write
+
+Input Parameters:
++ sock - sock object to which data is to be written
+. buf - buffer containing the data to be written
+- len - maximum number of bytes to written
+
+Output Parameter:
+. num_written - actual number of bytes written
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - no error encountered during the write operation
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by buf and len resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - length parameter must be greater than zero
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to perform the write
+
+Notes:
+An immediate write may not be performed while a posted write is outstanding on the same sock. This is considered to be an
+application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Thread safety:
+MPIDI_CH3I_Sock_write() may be called while another thread is attempting to perform an immediate read or post a read operation on the
+same sock. MPIDI_CH3I_Sock_write() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the same sock
+set to which the specified sock belongs.
+
+A immediate write may not be performed if another thread is performing an immediate write on the same sock. This is considered to
+be an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_write() during or after the call to MPIDI_CH3I_Sock_post_close() is consider to be an application error. The result
+of doing so is undefined, although the implementation may choose to return MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED if it is able to catch the
+error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
+not attempting to perform an immediate write while another thread is attempting to close the sock.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_write(MPIDI_CH3I_Sock_t sock, void * buf, size_t len, size_t * num_written);
+
+
+/*@
+MPIDI_CH3I_Sock_writev - perform an immediate vector write
+
+Input Parameters:
++ sock - sock object to which data is to be written
+. iov - I/O vector describing buffers of data to be written
+- iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
+
+Output Parameter:
+. num_written - actual number of bytes written
+
+Return value: a MPI error code with a Sock extended error class
++ MPI_SUCCESS - no error encountered during the write operation
+. MPIDI_CH3I_SOCK_ERR_INIT - Sock module not initialized
+. MPIDI_CH3I_SOCK_ERR_BAD_SOCK - invalid sock object
+. MPIDI_CH3I_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
+. MPIDI_CH3I_SOCK_ERR_BAD_LEN - iov_n parameter must be greater than zero and not greater than MPL_IOV_LIMIT
+. MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
+. MPIDI_CH3I_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
+. MPIDI_CH3I_SOCK_ERR_CONN_FAILED - the connection failed
+. MPIDI_CH3I_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
+. MPIDI_CH3I_SOCK_ERR_NOMEM - unable to allocate required memory
+- MPIDI_CH3I_SOCK_ERR_FAIL - other error attempting to perform the write
+
+Notes:
+An immediate write may not be performed while a posted write is outstanding on the same sock. This is considered to be an
+application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Thread safety:
+MPIDI_CH3I_Sock_write() may be called while another thread is attempting to perform an immediate read or post a read operation on the
+same sock. MPIDI_CH3I_Sock_write() may also be called while another thread is calling or blocking in MPIDI_CH3I_Sock_wait() on the same sock
+set to which the specified sock belongs.
+
+A immediate write may not be performed if another thread is performing an immediate write on the same sock. This is considered to
+be an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
+MPIDI_CH3I_SOCK_ERR_INPROGRESS, but it is not required to do so.
+
+Calling MPIDI_CH3I_Sock_write() during or after the call to MPIDI_CH3I_Sock_post_close() is consider to be an application error. The result
+of doing so is undefined, although the implementation may choose to return MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED if it is able to catch the
+error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
+not attempting to perform an immediate write while another thread is attempting to close the sock.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_writev(MPIDI_CH3I_Sock_t sock, MPL_IOV * iov, int iov_n, size_t * num_written);
+
+
+/*@
+MPIDI_CH3I_Sock_get_sock_id - get an integer identifier for a sock object
+
+Input Parameter:
+. sock - sock object
+
+Return value: an integer that uniquely identifies the sock object
+
+Notes:
+The integer is unique relative to all other open sock objects in the local process. The integer may later be reused for a
+different sock once the current object is closed and destroyed.
+
+This function does not return an error code. Passing in an invalid sock object has undefined results (garbage in, garbage out).
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_get_sock_id(MPIDI_CH3I_Sock_t sock);
+
+
+/*@
+MPIDI_CH3I_Sock_get_sock_set_id - get an integer identifier for a sock set object
+
+Input Parameter:
+. sock set - sock set object
+
+Return value: an integer that uniquely identifies the sock set object
+
+Notes:
+
+The integer is unique relative to all other sock set objects currently existing in the local process. The integer may later be
+reused for a different sock set once the current object destroyed.
+
+This function does not return an error code. Passing in an invalid sock set object has undefined results (garbage in, garbage
+out).
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_get_sock_set_id(MPIDI_CH3I_Sock_set_t set);
+
+
+/*@
+MPIDI_CH3I_Sock_get_error_class_string - get a generic error string from an error code
+
+Input Parameter:
++ error - sock error
+- length - length of error string
+
+Output Parameter:
+. error_string - error string
+
+Return value: a string representation of the sock error
+
+Notes:
+
+The returned string is the generic error message for the supplied error code.
+
+Module:
+Utility-Sock
+@*/
+int MPIDI_CH3I_Sock_get_error_class_string(int error, char *error_string, size_t length);
+
+
+CPLUSPLUS_END
+
+#endif /* !defined(MPIDI_CH3I_SOCK_H_INCLUDED) */
diff --git a/src/mpid/ch3/channels/sock/include/mpidu_socki.h b/src/mpid/ch3/channels/sock/include/mpidu_socki.h
new file mode 100644
index 0000000..cebf403
--- /dev/null
+++ b/src/mpid/ch3/channels/sock/include/mpidu_socki.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(SOCKI_H_INCLUDED)
+#define SOCKI_H_INCLUDED
+
+#include "mpichconf.h"
+
+#if defined(HAVE_SYS_UIO_H)
+#include <sys/uio.h>
+#endif
+#if defined(HAVE_LIMITS_H)
+#include <limits.h>
+#endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
+#if defined(HAVE_GETHOSTNAME) && defined(NEEDS_GETHOSTNAME_DECL) && !defined(gethostname)
+int gethostname(char *name, size_t len);
+# endif
+
+#ifndef SSIZE_MAX
+/* SSIZE_MAX is the maximum amount of data that we expect to be able
+ to read from a socket at one time. If this is not defined, we
+ guess that the value is 64k */
+/* FIXME!!! */
+#define SSIZE_MAX 65536
+#endif
+#define MPIDI_CH3I_SOCK_INFINITE_TIME -1
+#define MPIDI_CH3I_SOCK_INVALID_SOCK NULL
+#define MPIDI_CH3I_SOCK_INVALID_SET NULL
+#define MPIDI_CH3I_SOCK_SIZE_MAX SSIZE_MAX
+#define MPIDI_CH3I_SOCK_NATIVE_FD int
+
+typedef struct MPIDI_CH3I_Sock_set * MPIDI_CH3I_Sock_set_t;
+typedef struct MPIDI_CH3I_Sock * MPIDI_CH3I_Sock_t;
+typedef size_t MPIDI_CH3I_Sock_size_t;
+
+#define MPIDI_CH3I_SOCKI_STATE_LIST \
+MPID_STATE_MPIDI_CH3I_SOCKI_READ, \
+MPID_STATE_MPIDI_CH3I_SOCKI_WRITE, \
+MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_ALLOC, \
+MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_FREE, \
+MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_ENQUEUE, \
+MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_DEQUEUE, \
+MPID_STATE_MPIDI_CH3I_SOCKI_ADJUST_IOV, \
+MPID_STATE_READ, \
+MPID_STATE_READV, \
+MPID_STATE_WRITE, \
+MPID_STATE_WRITEV, \
+MPID_STATE_POLL,
+
+#if defined (MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIDI_CH3I_DBG_SOCK_CONNECT;
+#endif /* MPL_USE_DBG_LOGGING */
+
+#endif /* !defined(SOCKI_H_INCLUDED) */
diff --git a/src/mpid/ch3/channels/sock/src/.state-cache b/src/mpid/ch3/channels/sock/src/.state-cache
index 2b9f477..0784274 100644
--- a/src/mpid/ch3/channels/sock/src/.state-cache
+++ b/src/mpid/ch3/channels/sock/src/.state-cache
@@ -1,22 +1,70 @@
<dir>
-<file name="ch3_isend.c" info="1447123141"/>
-<file name="ch3_init.c" info="1447123141"/>
-<file name="ch3_progress.c" info="1447123141"/>
-<file name="ch3_istartmsg.c" info="1447123141"/>
-<file name="ch3_finalize.c" info="1447123141"/>
-<file name="ch3_isendv.c" info="1447123141"/>
-<file name="ch3_win_fns.c" info="1447123141"/>
-<file name="ch3_istartmsgv.c" info="1447123141"/>
-<file name="ch3i_errno.c" info="1447123141"/>
+<file name="ch3_isendv.c" info="1478973152"/>
+<file name="ch3_init.c" info="1478973152"/>
+<file name="ch3_istartmsg.c" info="1478973152"/>
+<file name="sock.c" info="1478973152"/>
+<file name="ch3_progress.c" info="1478973152"/>
+<file name="ch3_isend.c" info="1478973152"/>
+<file name="ch3i_errno.c" info="1478973152"/>
+<file name="ch3_win_fns.c" info="1478973152"/>
+<file name="ch3_istartmsgv.c" info="1478973152"/>
+<file name="ch3_finalize.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="ch3_isend.c">
+<fileinfo name="ch3_isendv.c">
MPID_STATE_UPDATE_REQUEST update_request
-MPID_STATE_MPIDI_CH3_ISEND MPIDI_CH3_iSend
+MPID_STATE_MPIDI_CH3_ISENDV MPIDI_CH3_iSendv
</fileinfo>
<fileinfo name="ch3_init.c">
MPID_STATE_MPID_CH3_INIT MPIDI_CH3_Init
</fileinfo>
+<fileinfo name="ch3_istartmsg.c">
+MPID_STATE_CREATE_REQUEST create_request
+MPID_STATE_MPIDI_CH3_ISTARTMSG MPIDI_CH3_iStartMsg
+</fileinfo>
+<fileinfo name="sock.c">
+MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET MPIDI_Sock_update_sock_set
+MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_ALLOC MPIDI_CH3I_Socki_sock_alloc
+MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_FREE MPIDI_CH3I_Socki_sock_free
+MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_ENQUEUE MPIDI_CH3I_Socki_event_enqueue
+MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_DEQUEUE MPIDI_CH3I_Socki_event_dequeue
+MPID_STATE_SOCKI_FREE_EVENTQ_MEM MPIDI_CH3I_Socki_free_eventq_mem
+MPID_STATE_MPIDI_CH3I_SOCK_INIT MPIDI_CH3I_Sock_init
+MPID_STATE_MPIDI_CH3I_SOCK_FINALIZE MPIDI_CH3I_Sock_finalize
+MPID_STATE_MPIDI_CH3I_SOCK_CREATE_SET MPIDI_CH3I_Sock_create_set
+MPID_STATE_MPIDI_CH3I_SOCK_CLOSE_OPEN_SOCKETS MPIDI_CH3I_Sock_close_open_sockets
+MPID_STATE_MPIDI_CH3I_SOCK_DESTROY_SET MPIDI_CH3I_Sock_destroy_set
+MPID_STATE_MPIDI_CH3I_SOCK_POST_CONNECT_IFADDR MPIDI_CH3I_Sock_post_connect_ifaddr
+MPID_STATE_MPIDI_CH3I_SOCK_LISTEN MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT
+MPID_STATE_MPIDI_CH3I_SOCK_POST_READ MPIDI_CH3I_Sock_post_read
+MPID_STATE_MPIDI_CH3I_SOCK_POST_READV MPIDI_CH3I_Sock_post_readv
+MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITE MPIDI_CH3I_Sock_post_write
+MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITEV MPIDI_CH3I_Sock_post_writev
+MPID_STATE_MPIDI_CH3I_SOCK_POST_CLOSE MPIDI_CH3I_Sock_post_close
+MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT MPIDI_CH3I_Sock_accept
+MPID_STATE_READ read
+MPID_STATE_MPIDI_CH3I_SOCK_READ MPIDI_CH3I_Sock_read
+MPID_STATE_READV readv
+MPID_STATE_MPIDI_CH3I_SOCK_READV MPIDI_CH3I_Sock_readv
+MPID_STATE_WRITE write
+MPID_STATE_MPIDI_CH3I_SOCK_WRITE MPIDI_CH3I_Sock_write
+MPID_STATE_WRITEV writev
+MPID_STATE_MPIDI_CH3I_SOCK_WRITEV MPIDI_CH3I_Sock_writev
+MPID_STATE_MPIDI_CH3I_SOCK_WAKEUP MPIDI_CH3I_Sock_wakeup
+MPID_STATE_MPIDI_CH3I_SOCK_GET_HOST_DESCRIPTION MPIDI_CH3I_Sock_get_host_description
+MPID_STATE_SOCK_NATIVE_TO_SOCK MPIDI_CH3I_Sock_native_to_sock
+MPID_STATE_MPIDI_CH3I_SOCK_SET_USER_PTR MPIDI_CH3I_Sock_set_user_ptr
+MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_ID MPIDI_CH3I_Sock_get_sock_id
+MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_SET_ID MPIDI_CH3I_Sock_get_sock_set_id
+MPID_STATE_MPIDI_CH3I_SOCK_GET_ERROR_CLASS_STRING MPIDI_CH3I_Sock_get_error_class_string
+MPID_STATE_MPIDI_CH3I_SOCK_WAIT MPIDI_CH3I_Sock_wait
+MPID_STATE_POLL poll
+MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLHUP MPIDI_CH3I_Socki_handle_pollhup
+MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLERR MPIDI_CH3I_Socki_handle_pollerr
+MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_READ MPIDI_CH3I_Socki_handle_read
+MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_WRITE MPIDI_CH3I_Socki_handle_write
+MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_CONNECT MPIDI_CH3I_Socki_handle_connect
+</fileinfo>
<fileinfo name="ch3_progress.c">
MPID_STATE_MPIDI_CH3I_PROGRESS_TEST MPIDI_CH3i_Progress_test
MPID_STATE_MPIDI_CH3I_PROGRESS_WAIT MPIDI_CH3i_Progress_wait
@@ -30,16 +78,11 @@ MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK MPIDI_CH3I_Progress_deregister_ho
MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK MPIDI_CH3I_Progress_activate_hook
MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK MPIDI_CH3I_Progress_deactivate_hook
</fileinfo>
-<fileinfo name="ch3_istartmsg.c">
-MPID_STATE_CREATE_REQUEST create_request
-MPID_STATE_MPIDI_CH3_ISTARTMSG MPIDI_CH3_iStartMsg
-</fileinfo>
-<fileinfo name="ch3_finalize.c">
-MPID_STATE_MPID_CH3_FINALIZE MPIDI_CH3_Finalize
-</fileinfo>
-<fileinfo name="ch3_isendv.c">
+<fileinfo name="ch3_isend.c">
MPID_STATE_UPDATE_REQUEST update_request
-MPID_STATE_MPIDI_CH3_ISENDV MPIDI_CH3_iSendv
+MPID_STATE_MPIDI_CH3_ISEND MPIDI_CH3_iSend
+</fileinfo>
+<fileinfo name="ch3i_errno.c">
</fileinfo>
<fileinfo name="ch3_win_fns.c">
MPID_STATE_MPIDI_CH3_WIN_FNS_INIT MPIDI_CH3_Win_fns_init
@@ -50,6 +93,7 @@ MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT MPIDI_CH3_Win_pkt_orderings_init
MPID_STATE_CREATE_REQUEST create_request
MPID_STATE_MPIDI_CH3_ISTARTMSGV MPIDI_CH3_iStartMsgv
</fileinfo>
-<fileinfo name="ch3i_errno.c">
+<fileinfo name="ch3_finalize.c">
+MPID_STATE_MPID_CH3_FINALIZE MPIDI_CH3_Finalize
</fileinfo>
</data>
diff --git a/src/mpid/ch3/channels/sock/src/Makefile.mk b/src/mpid/ch3/channels/sock/src/Makefile.mk
index 8885bbb..331642b 100644
--- a/src/mpid/ch3/channels/sock/src/Makefile.mk
+++ b/src/mpid/ch3/channels/sock/src/Makefile.mk
@@ -12,6 +12,7 @@ errnames_txt_files += src/mpid/ch3/channels/sock/src/errnames.txt
if BUILD_CH3_SOCK
mpi_core_sources += \
+ src/mpid/ch3/channels/sock/src/sock.c \
src/mpid/ch3/channels/sock/src/ch3_finalize.c \
src/mpid/ch3/channels/sock/src/ch3_init.c \
src/mpid/ch3/channels/sock/src/ch3_isend.c \
@@ -21,5 +22,9 @@ mpi_core_sources += \
src/mpid/ch3/channels/sock/src/ch3_progress.c \
src/mpid/ch3/channels/sock/src/ch3_win_fns.c
+noinst_HEADERS += \
+ src/mpid/ch3/channels/sock/include/mpidu_sock.h \
+ src/mpid/ch3/channels/sock/include/mpidu_socki.h
+
endif BUILD_CH3_SOCK
diff --git a/src/mpid/ch3/channels/sock/src/ch3_finalize.c b/src/mpid/ch3/channels/sock/src/ch3_finalize.c
index 0beac57..fe80272 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_finalize.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_finalize.c
@@ -14,14 +14,14 @@
int MPIDI_CH3_Finalize( void )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_CH3_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_CH3_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_CH3_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_CH3_FINALIZE);
mpi_errno = MPIDI_CH3I_Progress_finalize();
if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_CH3_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_CH3_FINALIZE);
return mpi_errno;
}
diff --git a/src/mpid/ch3/channels/sock/src/ch3_init.c b/src/mpid/ch3/channels/sock/src/ch3_init.c
index e6e90b6..8b3db04 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_init.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_init.c
@@ -27,9 +27,9 @@ int MPIDI_CH3_Init(int has_parent, MPIDI_PG_t * pg_p, int pg_rank )
char *publish_bc_orig = NULL;
char *bc_val = NULL;
int val_max_remaining;
- MPIDI_STATE_DECL(MPID_STATE_MPID_CH3_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_CH3_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_CH3_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_CH3_INIT);
mpi_errno = MPIDI_CH3I_Progress_init();
if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP(mpi_errno);
@@ -54,11 +54,11 @@ int MPIDI_CH3_Init(int has_parent, MPIDI_PG_t * pg_p, int pg_rank )
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_CH3_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_CH3_INIT);
return mpi_errno;
fn_fail:
if (publish_bc_orig != NULL) {
- MPIU_Free(publish_bc_orig);
+ MPL_free(publish_bc_orig);
}
goto fn_exit;
}
@@ -67,7 +67,7 @@ int MPIDI_CH3_Init(int has_parent, MPIDI_PG_t * pg_p, int pg_rank )
MPI Port functions */
int MPIDI_CH3_PortFnsInit( MPIDI_PortFns *portFns ATTRIBUTE((unused)) )
{
- MPIU_UNREFERENCED_ARG(portFns);
+ MPL_UNREFERENCED_ARG(portFns);
return 0;
}
@@ -78,13 +78,13 @@ int MPIDI_CH3_VC_Init( MPIDI_VC_t *vc ) {
vcch->sendq_tail = NULL;
vcch->state = MPIDI_CH3I_VC_STATE_UNCONNECTED;
MPIDI_VC_InitSock( vc );
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"vc=%p: Setting state (ch) to VC_STATE_UNCONNECTED (Initialization)", vc );
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CONNECT,TYPICAL,"vc=%p: Setting state (ch) to VC_STATE_UNCONNECTED (Initialization)", vc );
return 0;
}
const char * MPIDI_CH3_VC_GetStateString( struct MPIDI_VC *vc )
{
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
return MPIDI_CH3_VC_SockGetStateString( vc );
#else
return "unknown";
diff --git a/src/mpid/ch3/channels/sock/src/ch3_isend.c b/src/mpid/ch3/channels/sock/src/ch3_isend.c
index 2178358..a7c605f 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_isend.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_isend.c
@@ -10,40 +10,40 @@
#define FUNCNAME update_request
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static void update_request(MPID_Request * sreq, void * hdr,
- MPIDI_msg_sz_t hdr_sz, MPIU_Size_t nb)
+static void update_request(MPIR_Request * sreq, void * hdr,
+ intptr_t hdr_sz, size_t nb)
{
- MPIDI_STATE_DECL(MPID_STATE_UPDATE_REQUEST);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_UPDATE_REQUEST);
- MPIDI_FUNC_ENTER(MPID_STATE_UPDATE_REQUEST);
- MPIU_Assert(hdr_sz == sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_UPDATE_REQUEST);
+ MPIR_Assert(hdr_sz == sizeof(MPIDI_CH3_Pkt_t));
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) hdr;
sreq->dev.iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)((char *) &sreq->dev.pending_pkt + nb);
sreq->dev.iov[0].MPL_IOV_LEN = hdr_sz - nb;
sreq->dev.iov_count = 1;
- MPIDI_FUNC_EXIT(MPID_STATE_UPDATE_REQUEST);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_UPDATE_REQUEST);
}
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3_iSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
- MPIDI_msg_sz_t hdr_sz)
+int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPIR_Request * sreq, void * hdr,
+ intptr_t hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
MPIDI_CH3I_VC *vcch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISEND);
- MPIU_Assert( hdr_sz <= sizeof(MPIDI_CH3_Pkt_t) );
+ MPIR_Assert( hdr_sz <= sizeof(MPIDI_CH3_Pkt_t) );
/* The sock channel uses a fixed length header, the size of which is the
maximum of all possible packet headers */
hdr_sz = sizeof(MPIDI_CH3_Pkt_t);
- MPIU_DBG_STMT(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t*)hdr));
if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTED) /* MT */
@@ -52,28 +52,28 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
data, queuing any unsent data. */
if (MPIDI_CH3I_SendQ_empty(vcch)) /* MT */
{
- MPIU_Size_t nb;
+ size_t nb;
int rc;
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"send queue empty, attempting to write");
- MPIU_DBG_PKT(vcch->conn,hdr,"isend");
+ MPL_DBG_PKT(vcch->conn,hdr,"isend");
/* MT: need some signalling to lock down our right to use the
channel, thus insuring that the progress engine does
also try to write */
- rc = MPIDU_Sock_write(vcch->sock, hdr, hdr_sz, &nb);
+ rc = MPIDI_CH3I_Sock_write(vcch->sock, hdr, hdr_sz, &nb);
if (rc == MPI_SUCCESS)
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"wrote %ld bytes", (unsigned long) nb);
if (nb == hdr_sz)
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
- "write complete " MPIDI_MSG_SZ_FMT " bytes, calling OnDataAvail fcn", nb);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ "write complete %" PRIdPTR " bytes, calling OnDataAvail fcn", nb);
reqFn = sreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -85,11 +85,11 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (!complete) {
MPIDI_CH3I_SendQ_enqueue_head(vcch, sreq);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,
"posting writev, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
vcch->conn->send_active = sreq;
- mpi_errno = MPIDU_Sock_post_writev(
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(
vcch->conn->sock, sreq->dev.iov,
sreq->dev.iov_count, NULL);
/* --BEGIN ERROR HANDLING-- */
@@ -105,14 +105,14 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
}
else
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
- "partial write of " MPIDI_MSG_SZ_FMT " bytes, request enqueued at head", nb);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ "partial write of %" PRIdPTR " bytes, request enqueued at head", nb);
update_request(sreq, hdr, hdr_sz, nb);
MPIDI_CH3I_SendQ_enqueue_head(vcch, sreq);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"posting write, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"posting write, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
vcch->conn->send_active = sreq;
- mpi_errno = MPIDU_Sock_post_write(vcch->conn->sock,
+ mpi_errno = MPIDI_CH3I_Sock_post_write(vcch->conn->sock,
sreq->dev.iov[0].MPL_IOV_BUF,
sreq->dev.iov[0].MPL_IOV_LEN,
sreq->dev.iov[0].MPL_IOV_LEN, NULL);
@@ -127,19 +127,19 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
}
}
/* --BEGIN ERROR HANDLING-- */
- else if (MPIR_ERR_GET_CLASS(rc) == MPIDU_SOCK_ERR_NOMEM)
+ else if (MPIR_ERR_GET_CLASS(rc) == MPIDI_CH3I_SOCK_ERR_NOMEM)
{
- MPIU_DBG_MSG(CH3_CHANNEL,TYPICAL,
- "MPIDU_Sock_write failed, out of memory");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,TYPICAL,
+ "MPIDI_CH3I_Sock_write failed, out of memory");
sreq->status.MPI_ERROR = MPIR_ERR_MEMALLOCFAILED;
}
else
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,TYPICAL,
- "MPIDU_Sock_write failed, rc=%d", rc);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,TYPICAL,
+ "MPIDI_CH3I_Sock_write failed, rc=%d", rc);
/* Connection just failed. Mark the request complete and
return an error. */
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_FAILED);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_FAILED);
/* FIXME: Shouldn't the vc->state also change? */
vcch->state = MPIDI_CH3I_VC_STATE_FAILED;
sreq->status.MPI_ERROR = MPIR_Err_create_code( rc,
@@ -155,7 +155,7 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"send queue not empty, enqueuing");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"send queue not empty, enqueuing");
update_request(sreq, hdr, hdr_sz, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
}
@@ -163,14 +163,14 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
else if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTING) /* MT */
{
/* queuing the data so it can be sent later. */
- MPIU_DBG_VCUSE(vc,"connecting. enqueuing request");
+ MPL_DBG_VCUSE(vc,"connecting. enqueuing request");
update_request(sreq, hdr, hdr_sz, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
}
else if (vcch->state == MPIDI_CH3I_VC_STATE_UNCONNECTED) /* MT */
{
/* Form a new connection, queuing the data so it can be sent later. */
- MPIU_DBG_VCUSE(vc,"unconnected. enqueuing request");
+ MPL_DBG_VCUSE(vc,"unconnected. enqueuing request");
update_request(sreq, hdr, hdr_sz, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
mpi_errno = MPIDI_CH3I_VC_post_connect(vc);
@@ -181,7 +181,7 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
else if (vcch->state != MPIDI_CH3I_VC_STATE_FAILED)
{
/* Unable to send data at the moment, so queue it for later */
- MPIU_DBG_VCUSE(vc,"still connecting. Enqueuing request");
+ MPL_DBG_VCUSE(vc,"still connecting. Enqueuing request");
update_request(sreq, hdr, hdr_sz, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
}
@@ -197,7 +197,7 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * hdr,
/* --END ERROR HANDLING-- */
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISEND);
return mpi_errno;
}
diff --git a/src/mpid/ch3/channels/sock/src/ch3_isendv.c b/src/mpid/ch3/channels/sock/src/ch3_isendv.c
index e8bfd5f..0188170 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_isendv.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_isendv.c
@@ -10,13 +10,13 @@
#define FUNCNAME update_request
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static void update_request(MPID_Request * sreq, MPL_IOV * iov, int iov_count,
- int iov_offset, MPIU_Size_t nb)
+static void update_request(MPIR_Request * sreq, MPL_IOV * iov, int iov_count,
+ int iov_offset, size_t nb)
{
int i;
- MPIDI_STATE_DECL(MPID_STATE_UPDATE_REQUEST);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_UPDATE_REQUEST);
- MPIDI_FUNC_ENTER(MPID_STATE_UPDATE_REQUEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_UPDATE_REQUEST);
for (i = 0; i < iov_count; i++)
{
@@ -24,7 +24,7 @@ static void update_request(MPID_Request * sreq, MPL_IOV * iov, int iov_count,
}
if (iov_offset == 0)
{
- MPIU_Assert(iov[0].MPL_IOV_LEN == sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(iov[0].MPL_IOV_LEN == sizeof(MPIDI_CH3_Pkt_t));
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) iov[0].MPL_IOV_BUF;
sreq->dev.iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) &sreq->dev.pending_pkt;
}
@@ -33,22 +33,22 @@ static void update_request(MPID_Request * sreq, MPL_IOV * iov, int iov_count,
sreq->dev.iov[iov_offset].MPL_IOV_LEN -= nb;
sreq->dev.iov_count = iov_count;
- MPIDI_FUNC_EXIT(MPID_STATE_UPDATE_REQUEST);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_UPDATE_REQUEST);
}
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3_iSendv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
+int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPIR_Request * sreq,
MPL_IOV * iov, int n_iov)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vcch = &vc->ch;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISENDV);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISENDV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISENDV);
if (sreq->dev.ext_hdr_sz > 0) {
int i;
@@ -61,13 +61,13 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
n_iov++;
}
- MPIU_Assert(n_iov <= MPL_IOV_LIMIT);
- MPIU_Assert(iov[0].MPL_IOV_LEN <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(n_iov <= MPL_IOV_LIMIT);
+ MPIR_Assert(iov[0].MPL_IOV_LEN <= sizeof(MPIDI_CH3_Pkt_t));
/* The sock channel uses a fixed length header, the size of which is the
maximum of all possible packet headers */
iov[0].MPL_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
- MPIU_DBG_STMT(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t *)iov[0].MPL_IOV_BUF));
if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTED) /* MT */
@@ -76,13 +76,13 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
data, queuing any unsent data. */
if (MPIDI_CH3I_SendQ_empty(vcch)) /* MT */
{
- MPIU_Size_t nb;
+ size_t nb;
int rc;
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"send queue empty, attempting to write");
- MPIU_DBG_PKT(vcch->conn,(MPIDI_CH3_Pkt_t*)iov[0].MPL_IOV_BUF,
+ MPL_DBG_PKT(vcch->conn,(MPIDI_CH3_Pkt_t*)iov[0].MPL_IOV_BUF,
"isendv");
/* MT - need some signalling to lock down our right to use the
channel, thus insuring that the progress engine does
@@ -92,12 +92,12 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
Eventually it should be changed to agressively write
as much as possible. Ideally, the code would be shared between
the send routines and the progress engine. */
- rc = MPIDU_Sock_writev(vcch->sock, iov, n_iov, &nb);
+ rc = MPIDI_CH3I_Sock_writev(vcch->sock, iov, n_iov, &nb);
if (rc == MPI_SUCCESS)
{
int offset = 0;
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"wrote %ld bytes", (unsigned long) nb);
while (offset < n_iov)
@@ -109,14 +109,14 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"partial write, request enqueued at head");
update_request(sreq, iov, n_iov, offset, nb);
MPIDI_CH3I_SendQ_enqueue_head(vcch, sreq);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"posting writev, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"posting writev, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
vcch->conn->send_active = sreq;
- mpi_errno = MPIDU_Sock_post_writev(vcch->conn->sock,
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(vcch->conn->sock,
sreq->dev.iov + offset,
sreq->dev.iov_count - offset, NULL);
/* --BEGIN ERROR HANDLING-- */
@@ -134,11 +134,11 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
}
if (offset == n_iov)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"write complete, calling OnDataAvail fcn");
reqFn = sreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -150,10 +150,10 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (!complete) {
MPIDI_CH3I_SendQ_enqueue_head(vcch, sreq);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"posting writev, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"posting writev, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
vcch->conn->send_active = sreq;
- mpi_errno = MPIDU_Sock_post_writev(
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(
vcch->conn->sock, sreq->dev.iov,
sreq->dev.iov_count, NULL);
/* --BEGIN ERROR HANDLING-- */
@@ -169,19 +169,19 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
}
}
/* --BEGIN ERROR HANDLING-- */
- else if (MPIR_ERR_GET_CLASS(rc) == MPIDU_SOCK_ERR_NOMEM)
+ else if (MPIR_ERR_GET_CLASS(rc) == MPIDI_CH3I_SOCK_ERR_NOMEM)
{
- MPIU_DBG_MSG(CH3_CHANNEL,TYPICAL,
- "MPIDU_Sock_writev failed, out of memory");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,TYPICAL,
+ "MPIDI_CH3I_Sock_writev failed, out of memory");
sreq->status.MPI_ERROR = MPIR_ERR_MEMALLOCFAILED;
}
else
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,TYPICAL,
- "MPIDU_Sock_writev failed, rc=%d", rc);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,TYPICAL,
+ "MPIDI_CH3I_Sock_writev failed, rc=%d", rc);
/* Connection just failed. Mark the request complete and
return an error. */
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_FAILED);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_FAILED);
/* FIXME: Shouldn't the vc->state also change? */
vcch->state = MPIDI_CH3I_VC_STATE_FAILED;
@@ -198,7 +198,7 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"send queue not empty, enqueuing");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"send queue not empty, enqueuing");
update_request(sreq, iov, n_iov, 0, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
}
@@ -206,14 +206,14 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
else if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTING)
{
/* queuing the data so it can be sent later. */
- MPIU_DBG_VCUSE(vc,"connecting. Enqueuing request");
+ MPL_DBG_VCUSE(vc,"connecting. Enqueuing request");
update_request(sreq, iov, n_iov, 0, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
}
else if (vcch->state == MPIDI_CH3I_VC_STATE_UNCONNECTED)
{
/* Form a new connection, queuing the data so it can be sent later. */
- MPIU_DBG_VCUSE(vc,"unconnected. Enqueuing request");
+ MPL_DBG_VCUSE(vc,"unconnected. Enqueuing request");
update_request(sreq, iov, n_iov, 0, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
mpi_errno = MPIDI_CH3I_VC_post_connect(vc);
@@ -224,14 +224,14 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
else if (vcch->state != MPIDI_CH3I_VC_STATE_FAILED)
{
/* Unable to send data at the moment, so queue it for later */
- MPIU_DBG_VCUSE(vc,"still connecting. enqueuing request");
+ MPL_DBG_VCUSE(vc,"still connecting. enqueuing request");
update_request(sreq, iov, n_iov, 0, 0);
MPIDI_CH3I_SendQ_enqueue(vcch, sreq);
}
/* --BEGIN ERROR HANDLING-- */
else
{
- MPIU_DBG_VCUSE(vc,"connection failed");
+ MPL_DBG_VCUSE(vc,"connection failed");
/* Connection failed. Mark the request complete and return an error. */
/* TODO: Create an appropriate error message */
sreq->status.MPI_ERROR = MPI_ERR_INTERN;
@@ -241,7 +241,7 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
/* --END ERROR HANDLING-- */
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISENDV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISENDV);
return mpi_errno;
}
diff --git a/src/mpid/ch3/channels/sock/src/ch3_istartmsg.c b/src/mpid/ch3/channels/sock/src/ch3_istartmsg.c
index 37b98f5..9a4384a 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_istartmsg.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_istartmsg.c
@@ -10,22 +10,22 @@
#define FUNCNAME create_request
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static MPID_Request * create_request(void * hdr, MPIDI_msg_sz_t hdr_sz,
- MPIU_Size_t nb)
+static MPIR_Request * create_request(void * hdr, intptr_t hdr_sz,
+ size_t nb)
{
- MPID_Request * sreq;
- MPIDI_STATE_DECL(MPID_STATE_CREATE_REQUEST);
+ MPIR_Request * sreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CREATE_REQUEST);
- MPIDI_FUNC_ENTER(MPID_STATE_CREATE_REQUEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CREATE_REQUEST);
- sreq = MPID_Request_create();
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
/* --BEGIN ERROR HANDLING-- */
if (sreq == NULL)
return NULL;
/* --END ERROR HANDLING-- */
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
- MPIU_Assert(hdr_sz == sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
+ MPIR_Assert(hdr_sz == sizeof(MPIDI_CH3_Pkt_t));
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) hdr;
sreq->dev.iov[0].MPL_IOV_BUF =
(MPL_IOV_BUF_CAST)((char *) &sreq->dev.pending_pkt + nb);
@@ -33,7 +33,7 @@ static MPID_Request * create_request(void * hdr, MPIDI_msg_sz_t hdr_sz,
sreq->dev.iov_count = 1;
sreq->dev.OnDataAvail = 0;
- MPIDI_FUNC_EXIT(MPID_STATE_CREATE_REQUEST);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CREATE_REQUEST);
return sreq;
}
@@ -49,22 +49,22 @@ static MPID_Request * create_request(void * hdr, MPIDI_msg_sz_t hdr_sz,
#define FUNCNAME MPIDI_CH3_iStartMsg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
- MPID_Request ** sreq_ptr)
+int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, intptr_t hdr_sz,
+ MPIR_Request ** sreq_ptr)
{
- MPID_Request * sreq = NULL;
+ MPIR_Request * sreq = NULL;
MPIDI_CH3I_VC *vcch = &vc->ch;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSG);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSG);
- MPIU_Assert( hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert( hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
/* The SOCK channel uses a fixed length header, the size of which is the
maximum of all possible packet headers */
hdr_sz = sizeof(MPIDI_CH3_Pkt_t);
- MPIU_DBG_STMT(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t*)hdr));
if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTED) /* MT */
@@ -73,42 +73,42 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
data, queuing any unsent data. */
if (MPIDI_CH3I_SendQ_empty(vcch)) /* MT */
{
- MPIU_Size_t nb;
+ size_t nb;
int rc;
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"send queue empty, attempting to write");
- MPIU_DBG_PKT(vcch->conn,hdr,"istartmsg");
+ MPL_DBG_PKT(vcch->conn,hdr,"istartmsg");
/* MT: need some signalling to lock down our right to use the
channel, thus insuring that the progress engine does
not also try to write */
- rc = MPIDU_Sock_write(vcch->sock, hdr, hdr_sz, &nb);
+ rc = MPIDI_CH3I_Sock_write(vcch->sock, hdr, hdr_sz, &nb);
if (rc == MPI_SUCCESS)
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"wrote %ld bytes", (unsigned long) nb);
if (nb == hdr_sz)
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
- "entire write complete, " MPIDI_MSG_SZ_FMT " bytes", nb);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ "entire write complete, %" PRIdPTR " bytes", nb);
/* done. get us out of here as quickly as possible. */
}
else
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
- "partial write of " MPIDI_MSG_SZ_FMT " bytes, request enqueued at head", nb);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ "partial write of %" PRIdPTR " bytes, request enqueued at head", nb);
sreq = create_request(hdr, hdr_sz, nb);
if (!sreq) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
MPIDI_CH3I_SendQ_enqueue_head(vcch, sreq);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"posting write, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"posting write, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
vcch->conn->send_active = sreq;
- mpi_errno = MPIDU_Sock_post_write(vcch->conn->sock, sreq->dev.iov[0].MPL_IOV_BUF,
+ mpi_errno = MPIDI_CH3I_Sock_post_write(vcch->conn->sock, sreq->dev.iov[0].MPL_IOV_BUF,
sreq->dev.iov[0].MPL_IOV_LEN, sreq->dev.iov[0].MPL_IOV_LEN, NULL);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
@@ -124,14 +124,14 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
/* --BEGIN ERROR HANDLING-- */
else
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,TYPICAL,
- "ERROR - MPIDU_Sock_write failed, rc=%d", rc);
- sreq = MPID_Request_create();
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,TYPICAL,
+ "ERROR - MPIDI_CH3I_Sock_write failed, rc=%d", rc);
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (!sreq) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
- sreq->kind = MPID_REQUEST_SEND;
- MPID_cc_set(&(sreq->cc), 0);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
+ MPIR_cc_set(&(sreq->cc), 0);
sreq->status.MPI_ERROR = MPIR_Err_create_code( rc,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
MPI_ERR_INTERN, "**ch3|sock|writefailed",
@@ -143,7 +143,7 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"send in progress, request enqueued");
sreq = create_request(hdr, hdr_sz, 0);
if (!sreq) {
@@ -154,7 +154,7 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
}
else if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTING) /* MT */
{
- MPIU_DBG_VCUSE(vc,
+ MPL_DBG_VCUSE(vc,
"connecteding. enqueuing request");
/* queue the data so it can be sent after the connection is formed */
@@ -166,7 +166,7 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
}
else if (vcch->state == MPIDI_CH3I_VC_STATE_UNCONNECTED) /* MT */
{
- MPIU_DBG_VCUSE(vc,
+ MPL_DBG_VCUSE(vc,
"unconnected. posting connect and enqueuing request");
/* queue the data so it can be sent after the connection is formed */
@@ -182,7 +182,7 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
else if (vcch->state != MPIDI_CH3I_VC_STATE_FAILED)
{
/* Unable to send data at the moment, so queue it for later */
- MPIU_DBG_VCUSE(vc,"forming connection, request enqueued");
+ MPL_DBG_VCUSE(vc,"forming connection, request enqueued");
sreq = create_request(hdr, hdr_sz, 0);
if (!sreq) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
@@ -193,13 +193,13 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
else
{
/* Connection failed, so allocate a request and return an error. */
- MPIU_DBG_VCUSE(vc,"ERROR - connection failed");
- sreq = MPID_Request_create();
+ MPL_DBG_VCUSE(vc,"ERROR - connection failed");
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (!sreq) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
- sreq->kind = MPID_REQUEST_SEND;
- MPID_cc_set(&sreq->cc, 0);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
+ MPIR_cc_set(&sreq->cc, 0);
sreq->status.MPI_ERROR = MPIR_Err_create_code( MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
@@ -211,6 +211,6 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * hdr, MPIDI_msg_sz_t hdr_sz,
fn_fail:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSG);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSG);
return mpi_errno;
}
diff --git a/src/mpid/ch3/channels/sock/src/ch3_istartmsgv.c b/src/mpid/ch3/channels/sock/src/ch3_istartmsgv.c
index 4540a3f..d6132d8 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_istartmsgv.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_istartmsgv.c
@@ -10,22 +10,22 @@
#define FUNCNAME create_request
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static MPID_Request * create_request(MPL_IOV * iov, int iov_count,
- int iov_offset, MPIU_Size_t nb)
+static MPIR_Request * create_request(MPL_IOV * iov, int iov_count,
+ int iov_offset, size_t nb)
{
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int i;
- MPIDI_STATE_DECL(MPID_STATE_CREATE_REQUEST);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CREATE_REQUEST);
- MPIDI_FUNC_ENTER(MPID_STATE_CREATE_REQUEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CREATE_REQUEST);
- sreq = MPID_Request_create();
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
/* --BEGIN ERROR HANDLING-- */
if (sreq == NULL)
return NULL;
/* --END ERROR HANDLING-- */
- MPIU_Object_set_ref(sreq, 2);
- sreq->kind = MPID_REQUEST_SEND;
+ MPIR_Object_set_ref(sreq, 2);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
for (i = 0; i < iov_count; i++)
{
@@ -33,7 +33,7 @@ static MPID_Request * create_request(MPL_IOV * iov, int iov_count,
}
if (iov_offset == 0)
{
- MPIU_Assert(iov[0].MPL_IOV_LEN == sizeof(MPIDI_CH3_Pkt_t));
+ MPIR_Assert(iov[0].MPL_IOV_LEN == sizeof(MPIDI_CH3_Pkt_t));
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *) iov[0].MPL_IOV_BUF;
sreq->dev.iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) &sreq->dev.pending_pkt;
}
@@ -42,7 +42,7 @@ static MPID_Request * create_request(MPL_IOV * iov, int iov_count,
sreq->dev.iov_count = iov_count;
sreq->dev.OnDataAvail = 0;
- MPIDI_FUNC_EXIT(MPID_STATE_CREATE_REQUEST);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CREATE_REQUEST);
return sreq;
}
@@ -57,7 +57,7 @@ static MPID_Request * create_request(MPL_IOV * iov, int iov_count,
* the request.
*/
-/* XXX - What do we do if MPID_Request_create() returns NULL???
+/* XXX - What do we do if MPIR_Request_create returns NULL???
If MPIDI_CH3_iStartMsgv() returns NULL, the calling code
assumes the request completely successfully, but the reality is that we
couldn't allocate the memory for a request. This
@@ -74,21 +74,21 @@ static MPID_Request * create_request(MPL_IOV * iov, int iov_count,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
- MPID_Request ** sreq_ptr)
+ MPIR_Request ** sreq_ptr)
{
- MPID_Request * sreq = NULL;
+ MPIR_Request * sreq = NULL;
MPIDI_CH3I_VC *vcch = &vc->ch;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
- MPIU_Assert( n_iov <= MPL_IOV_LIMIT);
+ MPIR_Assert( n_iov <= MPL_IOV_LIMIT);
/* The SOCK channel uses a fixed length header, the size of which is the
maximum of all possible packet headers */
iov[0].MPL_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
- MPIU_DBG_STMT(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
MPIDI_DBG_Print_packet((MPIDI_CH3_Pkt_t*)iov[0].MPL_IOV_BUF));
if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTED) /* MT */
@@ -98,21 +98,21 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
if (MPIDI_CH3I_SendQ_empty(vcch)) /* MT */
{
int rc;
- MPIU_Size_t nb;
+ size_t nb;
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"send queue empty, attempting to write");
- MPIU_DBG_PKT(vcch->conn,(MPIDI_CH3_Pkt_t*)iov[0].MPL_IOV_BUF,"isend");
+ MPL_DBG_PKT(vcch->conn,(MPIDI_CH3_Pkt_t*)iov[0].MPL_IOV_BUF,"isend");
/* MT - need some signalling to lock down our right to use the
channel, thus insuring that the progress engine does
also try to write */
- rc = MPIDU_Sock_writev(vcch->sock, iov, n_iov, &nb);
+ rc = MPIDI_CH3I_Sock_writev(vcch->sock, iov, n_iov, &nb);
if (rc == MPI_SUCCESS)
{
int offset = 0;
- MPIU_DBG_MSG_D(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"wrote %ld bytes", (unsigned long) nb);
while (offset < n_iov)
@@ -124,17 +124,17 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"partial write, request enqueued at head");
sreq = create_request(iov, n_iov, offset, nb);
if (sreq == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
MPIDI_CH3I_SendQ_enqueue_head(vcch, sreq);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"posting writev, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"posting writev, vc=0x%p, sreq=0x%08x", vc, sreq->handle));
vcch->conn->send_active = sreq;
- mpi_errno = MPIDU_Sock_post_writev(vcch->conn->sock, sreq->dev.iov + offset,
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(vcch->conn->sock, sreq->dev.iov + offset,
sreq->dev.iov_count - offset, NULL);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
@@ -150,20 +150,20 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
if (offset == n_iov)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"entire write complete");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"entire write complete");
}
}
/* --BEGIN ERROR HANDLING-- */
else
{
- MPIU_DBG_MSG_D(CH3_CHANNEL,TYPICAL,
- "ERROR - MPIDU_Sock_writev failed, rc=%d", rc);
- sreq = MPID_Request_create();
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CHANNEL,TYPICAL,
+ "ERROR - MPIDI_CH3I_Sock_writev failed, rc=%d", rc);
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (sreq == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
- sreq->kind = MPID_REQUEST_SEND;
- MPID_cc_set(&(sreq->cc), 0);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
+ MPIR_cc_set(&(sreq->cc), 0);
sreq->status.MPI_ERROR = MPIR_Err_create_code( rc,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
MPI_ERR_INTERN, "**ch3|sock|writefailed",
@@ -175,7 +175,7 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"send in progress, request enqueued");
sreq = create_request(iov, n_iov, 0, 0);
if (sreq == NULL) {
@@ -186,7 +186,7 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
}
else if (vcch->state == MPIDI_CH3I_VC_STATE_CONNECTING)
{
- MPIU_DBG_VCUSE(vc,
+ MPL_DBG_VCUSE(vc,
"connecting. enqueuing request");
/* queue the data so it can be sent after the connection is formed */
@@ -198,7 +198,7 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
}
else if (vcch->state == MPIDI_CH3I_VC_STATE_UNCONNECTED)
{
- MPIU_DBG_VCUSE(vc,
+ MPL_DBG_VCUSE(vc,
"unconnected. posting connect and enqueuing request");
/* queue the data so it can be sent after the connection is formed */
@@ -214,7 +214,7 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
else if (vcch->state != MPIDI_CH3I_VC_STATE_FAILED)
{
/* Unable to send data at the moment, so queue it for later */
- MPIU_DBG_VCUSE(vc,"forming connection, request enqueued");
+ MPL_DBG_VCUSE(vc,"forming connection, request enqueued");
sreq = create_request(iov, n_iov, 0, 0);
if (sreq == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
@@ -225,13 +225,13 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
else
{
/* Connection failed, so allocate a request and return an error. */
- MPIU_DBG_VCUSE(vc,"ERROR - connection failed");
- sreq = MPID_Request_create();
+ MPL_DBG_VCUSE(vc,"ERROR - connection failed");
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (sreq == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
- sreq->kind = MPID_REQUEST_SEND;
- MPID_cc_set(&(sreq->cc), 0);
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
+ MPIR_cc_set(&(sreq->cc), 0);
sreq->status.MPI_ERROR = MPIR_Err_create_code( MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
MPI_ERR_INTERN, "**ch3|sock|connectionfailed",0 );
@@ -242,6 +242,6 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int n_iov,
fn_fail:
*sreq_ptr = sreq;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_ISTARTMSGV);
return mpi_errno;
}
diff --git a/src/mpid/ch3/channels/sock/src/ch3_progress.c b/src/mpid/ch3/channels/sock/src/ch3_progress.c
index 2ab4eed..35d485d 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_progress.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_progress.c
@@ -15,7 +15,7 @@
static MPIDI_CH3_PktHandler_Fcn *pktArray[MPIDI_CH3_PKT_END_CH3+1];
-static int ReadMoreData( MPIDI_CH3I_Connection_t *, MPID_Request * );
+static int ReadMoreData( MPIDI_CH3I_Connection_t *, MPIR_Request * );
static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * );
static int MPIDI_CH3i_Progress_test(void);
@@ -37,13 +37,13 @@ volatile unsigned int MPIDI_CH3I_progress_completion_count = 0;
#endif
-MPIDU_Sock_set_t MPIDI_CH3I_sock_set = NULL;
-static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event);
+MPIDI_CH3I_Sock_set_t MPIDI_CH3I_sock_set = NULL;
+static int MPIDI_CH3I_Progress_handle_sock_event(MPIDI_CH3I_Sock_event_t * event);
static inline int connection_pop_sendq_req(MPIDI_CH3I_Connection_t * conn);
static inline int connection_post_recv_pkt(MPIDI_CH3I_Connection_t * conn);
-static int adjust_iov(MPL_IOV ** iovp, int * countp, MPIU_Size_t nb);
+static int adjust_iov(MPL_IOV ** iovp, int * countp, size_t nb);
#define MAX_PROGRESS_HOOKS 4
typedef int (*progress_func_ptr_t) (int* made_progress);
@@ -61,13 +61,13 @@ static progress_hook_slot_t progress_hooks[MAX_PROGRESS_HOOKS];
#define FCNAME MPL_QUOTE(FUNCNAME)
static int MPIDI_CH3i_Progress_test(void)
{
- MPIDU_Sock_event_t event;
+ MPIDI_CH3I_Sock_event_t event;
int mpi_errno = MPI_SUCCESS;
int made_progress;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_TEST);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_TEST);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_TEST);
# ifdef MPICH_IS_THREADED
{
@@ -85,7 +85,7 @@ static int MPIDI_CH3i_Progress_test(void)
* MT: Another thread is already blocking in poll. Right now,
* calls to the progress routines are effectively
* serialized by the device. The only way another thread may
- * enter this function is if MPIDU_Sock_wait() blocks. If
+ * enter this function is if MPIDI_CH3I_Sock_wait() blocks. If
* this changes, a flag other than MPIDI_CH3I_Progress_blocked
* may be required to determine if another thread is in
* the progress engine.
@@ -98,13 +98,13 @@ static int MPIDI_CH3i_Progress_test(void)
for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
if (progress_hooks[i].active == TRUE) {
- MPIU_Assert(progress_hooks[i].func_ptr != NULL);
+ MPIR_Assert(progress_hooks[i].func_ptr != NULL);
mpi_errno = progress_hooks[i].func_ptr(&made_progress);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
}
- mpi_errno = MPIDU_Sock_wait(MPIDI_CH3I_sock_set, 0, &event);
+ mpi_errno = MPIDI_CH3I_Sock_wait(MPIDI_CH3I_sock_set, 0, &event);
if (mpi_errno == MPI_SUCCESS)
{
@@ -114,7 +114,7 @@ static int MPIDI_CH3i_Progress_test(void)
"**ch3|sock|handle_sock_event");
}
}
- else if (MPIR_ERR_GET_CLASS(mpi_errno) == MPIDU_SOCK_ERR_TIMEOUT)
+ else if (MPIR_ERR_GET_CLASS(mpi_errno) == MPIDI_CH3I_SOCK_ERR_TIMEOUT)
{
mpi_errno = MPI_SUCCESS;
goto fn_exit;
@@ -124,7 +124,7 @@ static int MPIDI_CH3i_Progress_test(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_TEST);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_TEST);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -138,11 +138,11 @@ static int MPIDI_CH3i_Progress_test(void)
#define FCNAME MPL_QUOTE(FUNCNAME)
static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * progress_state)
{
- MPIDU_Sock_event_t event;
+ MPIDI_CH3I_Sock_event_t event;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_WAIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_WAIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_WAIT);
/*
* MT: the following code will be needed if progress can occur between
@@ -165,7 +165,7 @@ static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * progress_state)
# endif
# ifdef MPICH_IS_THREADED
- MPID_THREAD_CHECK_BEGIN
+ MPIR_THREAD_CHECK_BEGIN;
{
if (MPIDI_CH3I_progress_blocked == TRUE)
{
@@ -175,7 +175,7 @@ static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * progress_state)
* MT: Another thread is already blocking in poll. Right now,
* calls to MPIDI_CH3_Progress_wait() are effectively
* serialized by the device. The only way another thread may
- * enter this function is if MPIDU_Sock_wait() blocks. If
+ * enter this function is if MPIDI_CH3I_Sock_wait() blocks. If
* this changes, a flag other than MPIDI_CH3I_Progress_blocked
* may be required to determine if another thread is in
* the progress engine.
@@ -185,7 +185,7 @@ static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * progress_state)
goto fn_exit;
}
}
- MPID_THREAD_CHECK_END
+ MPIR_THREAD_CHECK_END;
# endif
do
@@ -195,7 +195,7 @@ static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * progress_state)
for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
if (progress_hooks[i].active == TRUE) {
- MPIU_Assert(progress_hooks[i].func_ptr != NULL);
+ MPIR_Assert(progress_hooks[i].func_ptr != NULL);
mpi_errno = progress_hooks[i].func_ptr(&made_progress);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (made_progress) {
@@ -212,25 +212,25 @@ static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * progress_state)
we write separate code for each possibility */
if (MPIR_ThreadInfo.isThreaded) {
MPIDI_CH3I_progress_blocked = TRUE;
- mpi_errno = MPIDU_Sock_wait(MPIDI_CH3I_sock_set,
- MPIDU_SOCK_INFINITE_TIME, &event);
+ mpi_errno = MPIDI_CH3I_Sock_wait(MPIDI_CH3I_sock_set,
+ MPIDI_CH3I_SOCK_INFINITE_TIME, &event);
MPIDI_CH3I_progress_blocked = FALSE;
MPIDI_CH3I_progress_wakeup_signalled = FALSE;
}
else {
- mpi_errno = MPIDU_Sock_wait(MPIDI_CH3I_sock_set,
- MPIDU_SOCK_INFINITE_TIME, &event);
+ mpi_errno = MPIDI_CH3I_Sock_wait(MPIDI_CH3I_sock_set,
+ MPIDI_CH3I_SOCK_INFINITE_TIME, &event);
}
# else
- mpi_errno = MPIDU_Sock_wait(MPIDI_CH3I_sock_set,
- MPIDU_SOCK_INFINITE_TIME, &event);
+ mpi_errno = MPIDI_CH3I_Sock_wait(MPIDI_CH3I_sock_set,
+ MPIDI_CH3I_SOCK_INFINITE_TIME, &event);
# endif
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
- MPIU_Assert(MPIR_ERR_GET_CLASS(mpi_errno) != MPIDU_SOCK_ERR_TIMEOUT);
+ MPIR_Assert(MPIR_ERR_GET_CLASS(mpi_errno) != MPIDI_CH3I_SOCK_ERR_TIMEOUT);
MPIR_ERR_SET(mpi_errno,MPI_ERR_OTHER,"**progress_sock_wait");
goto fn_fail;
}
@@ -268,7 +268,7 @@ static int MPIDI_CH3i_Progress_wait(MPID_Progress_state * progress_state)
*/
progress_state->ch.completion_count = MPIDI_CH3I_progress_completion_count;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_WAIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_WAIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -285,10 +285,10 @@ int MPIDI_CH3_Connection_terminate(MPIDI_VC_t * vc)
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vcch = &vc->ch;
- MPIU_DBG_CONNSTATECHANGE(vc,vcch->conn,CONN_STATE_CLOSING);
+ MPL_DBG_CONNSTATECHANGE(vc,vcch->conn,CONN_STATE_CLOSING);
vcch->conn->state = CONN_STATE_CLOSING;
- MPIU_DBG_MSG(CH3_DISCONNECT,TYPICAL,"Closing sock (Post_close)");
- mpi_errno = MPIDU_Sock_post_close(vcch->sock);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,"Closing sock (Post_close)");
+ mpi_errno = MPIDI_CH3I_Sock_post_close(vcch->sock);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
@@ -309,28 +309,28 @@ int MPIDI_CH3I_Progress_init(void)
{
int i;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
- MPID_THREAD_CHECK_BEGIN
+ MPIR_THREAD_CHECK_BEGIN;
/* FIXME should be appropriately abstracted somehow */
-# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
+# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
{
int err;
MPID_Thread_cond_create(&MPIDI_CH3I_progress_completion_cond, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
}
# endif
- MPID_THREAD_CHECK_END
+ MPIR_THREAD_CHECK_END;
- mpi_errno = MPIDU_Sock_init();
+ mpi_errno = MPIDI_CH3I_Sock_init();
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
/* create sock set */
- mpi_errno = MPIDU_Sock_create_set(&MPIDI_CH3I_sock_set);
+ mpi_errno = MPIDI_CH3I_Sock_create_set(&MPIDI_CH3I_sock_set);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
@@ -350,7 +350,7 @@ int MPIDI_CH3I_Progress_init(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -367,9 +367,9 @@ int MPIDI_CH3I_Progress_finalize(void)
int mpi_errno;
MPIDI_CH3I_Connection_t *conn = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
/* Shut down the listener */
mpi_errno = MPIDU_CH3I_ShutdownListener();
@@ -377,39 +377,39 @@ int MPIDI_CH3I_Progress_finalize(void)
/* Close open connections */
- MPIDU_Sock_close_open_sockets(MPIDI_CH3I_sock_set,(void**) &conn);
+ MPIDI_CH3I_Sock_close_open_sockets(MPIDI_CH3I_sock_set,(void**) &conn);
while (conn != NULL) {
conn->state = CONN_STATE_CLOSING;
mpi_errno = MPIDI_CH3_Sockconn_handle_close_event(conn);
if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
- MPIDU_Sock_close_open_sockets(MPIDI_CH3I_sock_set,(void**) &conn);
+ MPIDI_CH3I_Sock_close_open_sockets(MPIDI_CH3I_sock_set,(void**) &conn);
}
/*
* MT: in a multi-threaded environment, finalize() should signal any
- * thread(s) blocking on MPIDU_Sock_wait() and wait for
+ * thread(s) blocking on MPIDI_CH3I_Sock_wait() and wait for
* those * threads to complete before destroying the progress engine
* data structures.
*/
- MPIDU_Sock_destroy_set(MPIDI_CH3I_sock_set);
- MPIDU_Sock_finalize();
+ MPIDI_CH3I_Sock_destroy_set(MPIDI_CH3I_sock_set);
+ MPIDI_CH3I_Sock_finalize();
- MPID_THREAD_CHECK_BEGIN
+ MPIR_THREAD_CHECK_BEGIN;
/* FIXME should be appropriately abstracted somehow */
-# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
+# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
{
int err;
MPID_Thread_cond_destroy(&MPIDI_CH3I_progress_completion_cond, &err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
}
# endif
- MPID_THREAD_CHECK_END
+ MPIR_THREAD_CHECK_END;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -424,8 +424,8 @@ int MPIDI_CH3I_Progress_finalize(void)
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIDI_CH3I_Progress_wakeup(void)
{
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"progress_wakeup called");
- MPIDU_Sock_wakeup(MPIDI_CH3I_sock_set);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"progress_wakeup called");
+ MPIDI_CH3I_Sock_wakeup(MPIDI_CH3I_sock_set);
}
#endif
@@ -443,18 +443,18 @@ int MPIDI_CH3_Get_business_card(int myRank, char *value, int length)
#define FUNCNAME MPIDI_CH3I_Progress_handle_sock_event
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
+static int MPIDI_CH3I_Progress_handle_sock_event(MPIDI_CH3I_Sock_event_t * event)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_HANDLE_SOCK_EVENT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_HANDLE_SOCK_EVENT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_HANDLE_SOCK_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_HANDLE_SOCK_EVENT);
- MPIU_DBG_MSG_D(CH3_OTHER,VERBOSE,"Socket event of type %d", event->op_type );
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,"Socket event of type %d", event->op_type );
switch (event->op_type)
{
- case MPIDU_SOCK_OP_READ:
+ case MPIDI_CH3I_SOCK_OP_READ:
{
MPIDI_CH3I_Connection_t * conn =
(MPIDI_CH3I_Connection_t *) event->user_ptr;
@@ -467,14 +467,14 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
break;
}
- MPID_Request * rreq = conn->recv_active;
+ MPIR_Request * rreq = conn->recv_active;
/* --BEGIN ERROR HANDLING-- */
if (event->error != MPI_SUCCESS)
{
/* FIXME: the following should be handled by the close
protocol */
- if (MPIR_ERR_GET_CLASS(event->error) != MPIDU_SOCK_ERR_CONN_CLOSED) {
+ if (MPIR_ERR_GET_CLASS(event->error) != MPIDI_CH3I_SOCK_ERR_CONN_CLOSED) {
mpi_errno = event->error;
MPIR_ERR_POP(mpi_errno);
}
@@ -486,15 +486,16 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
{
if (conn->recv_active == NULL)
{
- MPIDI_msg_sz_t buflen = sizeof (MPIDI_CH3_Pkt_t);
- MPIU_Assert(conn->pkt.type < MPIDI_CH3_PKT_END_CH3);
+ intptr_t buflen = 0;
+ MPIR_Assert(conn->pkt.type < MPIDI_CH3_PKT_END_CH3);
- mpi_errno = pktArray[conn->pkt.type]( conn->vc, &conn->pkt,
+ /* conn->pkt is always aligned */
+ mpi_errno = pktArray[conn->pkt.type]( conn->vc, &conn->pkt, NULL,
&buflen, &rreq );
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_Assert(buflen == sizeof (MPIDI_CH3_Pkt_t));
+ MPIR_Assert(buflen == 0);
if (rreq == NULL)
{
@@ -516,12 +517,12 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
}
else /* incoming data */
{
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
int complete;
reqFn = rreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(rreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(rreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -564,7 +565,7 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
/* END OF SOCK_OP_READ */
- case MPIDU_SOCK_OP_WRITE:
+ case MPIDI_CH3I_SOCK_OP_WRITE:
{
MPIDI_CH3I_Connection_t * conn =
(MPIDI_CH3I_Connection_t *) event->user_ptr;
@@ -577,13 +578,13 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
if (conn->send_active)
{
- MPID_Request * sreq = conn->send_active;
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ MPIR_Request * sreq = conn->send_active;
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
int complete;
reqFn = sreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -608,11 +609,11 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
for(;;)
{
MPL_IOV * iovp;
- MPIU_Size_t nb;
+ size_t nb;
iovp = sreq->dev.iov;
- mpi_errno = MPIDU_Sock_writev(conn->sock, iovp, sreq->dev.iov_count, &nb);
+ mpi_errno = MPIDI_CH3I_Sock_writev(conn->sock, iovp, sreq->dev.iov_count, &nb);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
@@ -623,15 +624,15 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
}
/* --END ERROR HANDLING-- */
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"immediate writev, vc=%p, sreq=0x%08x, nb=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"immediate writev, vc=%p, sreq=0x%08x, nb=%" PRIdPTR,
conn->vc, sreq->handle, nb));
if (nb > 0 && adjust_iov(&iovp, &sreq->dev.iov_count, nb))
{
reqFn = sreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -653,10 +654,10 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
}
else
{
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"posting writev, vc=%p, conn=%p, sreq=0x%08x",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"posting writev, vc=%p, conn=%p, sreq=0x%08x",
conn->vc, conn, sreq->handle));
- mpi_errno = MPIDU_Sock_post_writev(conn->sock, iovp, sreq->dev.iov_count, NULL);
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(conn->sock, iovp, sreq->dev.iov_count, NULL);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
@@ -682,14 +683,14 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
}
/* END OF SOCK_OP_WRITE */
- case MPIDU_SOCK_OP_ACCEPT:
+ case MPIDI_CH3I_SOCK_OP_ACCEPT:
{
mpi_errno = MPIDI_CH3_Sockconn_handle_accept_event();
if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
break;
}
- case MPIDU_SOCK_OP_CONNECT:
+ case MPIDI_CH3I_SOCK_OP_CONNECT:
{
mpi_errno = MPIDI_CH3_Sockconn_handle_connect_event(
(MPIDI_CH3I_Connection_t *) event->user_ptr,
@@ -698,7 +699,7 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
break;
}
- case MPIDU_SOCK_OP_CLOSE:
+ case MPIDI_CH3I_SOCK_OP_CLOSE:
{
mpi_errno = MPIDI_CH3_Sockconn_handle_close_event(
(MPIDI_CH3I_Connection_t *) event->user_ptr );
@@ -706,7 +707,7 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
break;
}
- case MPIDU_SOCK_OP_WAKEUP:
+ case MPIDI_CH3I_SOCK_OP_WAKEUP:
{
MPIDI_CH3_Progress_signal_completion();
/* MPIDI_CH3I_progress_completion_count++; */
@@ -715,7 +716,7 @@ static int MPIDI_CH3I_Progress_handle_sock_event(MPIDU_Sock_event_t * event)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_HANDLE_SOCK_EVENT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_HANDLE_SOCK_EVENT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -737,7 +738,7 @@ static int MPIDI_CH3I_Progress_delay(unsigned int completion_count)
int mpi_errno = MPI_SUCCESS, err;
/* FIXME should be appropriately abstracted somehow */
-# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
+# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
{
while (completion_count == MPIDI_CH3I_progress_completion_count)
{
@@ -760,14 +761,14 @@ static int MPIDI_CH3I_Progress_continue(unsigned int completion_count)
{
int mpi_errno = MPI_SUCCESS,err;
- MPID_THREAD_CHECK_BEGIN
+ MPIR_THREAD_CHECK_BEGIN;
/* FIXME should be appropriately abstracted somehow */
-# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
+# if defined(MPICH_IS_THREADED) && (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
{
MPID_Thread_cond_broadcast(&MPIDI_CH3I_progress_completion_cond,&err);
}
# endif
- MPID_THREAD_CHECK_END
+ MPIR_THREAD_CHECK_END;
return mpi_errno;
}
@@ -797,10 +798,10 @@ static inline int connection_pop_sendq_req(MPIDI_CH3I_Connection_t * conn)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vcch = &conn->vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_POP_SENDQ_REQ);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_POP_SENDQ_REQ);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_POP_SENDQ_REQ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_POP_SENDQ_REQ);
/* post send of next request on the send queue */
/* FIXME: Is dequeue/get next the operation we really want? */
@@ -808,15 +809,15 @@ static inline int connection_pop_sendq_req(MPIDI_CH3I_Connection_t * conn)
conn->send_active = MPIDI_CH3I_SendQ_head(vcch); /* MT */
if (conn->send_active != NULL)
{
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"conn=%p: Posting message from connection send queue", conn );
- mpi_errno = MPIDU_Sock_post_writev(conn->sock, conn->send_active->dev.iov, conn->send_active->dev.iov_count, NULL);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CONNECT,TYPICAL,"conn=%p: Posting message from connection send queue", conn );
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(conn->sock, conn->send_active->dev.iov, conn->send_active->dev.iov_count, NULL);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_POP_SENDQ_REQ);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_POP_SENDQ_REQ);
return mpi_errno;
}
@@ -829,16 +830,16 @@ static inline int connection_pop_sendq_req(MPIDI_CH3I_Connection_t * conn)
static inline int connection_post_recv_pkt(MPIDI_CH3I_Connection_t * conn)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_POST_RECV_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_POST_RECV_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_POST_RECV_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_POST_RECV_PKT);
- mpi_errno = MPIDU_Sock_post_read(conn->sock, &conn->pkt, sizeof(conn->pkt), sizeof(conn->pkt), NULL);
+ mpi_errno = MPIDI_CH3I_Sock_post_read(conn->sock, &conn->pkt, sizeof(conn->pkt), sizeof(conn->pkt), NULL);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_SET(mpi_errno,MPI_ERR_OTHER, "**fail");
}
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_POST_RECV_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_POST_RECV_PKT);
return mpi_errno;
}
@@ -847,7 +848,7 @@ static inline int connection_post_recv_pkt(MPIDI_CH3I_Connection_t * conn)
#define FUNCNAME adjust_iov
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int adjust_iov(MPL_IOV ** iovp, int * countp, MPIU_Size_t nb)
+static int adjust_iov(MPL_IOV ** iovp, int * countp, size_t nb)
{
MPL_IOV * const iov = *iovp;
const int count = *countp;
@@ -877,17 +878,17 @@ static int adjust_iov(MPL_IOV ** iovp, int * countp, MPIU_Size_t nb)
/* end adjust_iov() */
-static int ReadMoreData( MPIDI_CH3I_Connection_t * conn, MPID_Request *rreq )
+static int ReadMoreData( MPIDI_CH3I_Connection_t * conn, MPIR_Request *rreq )
{
int mpi_errno = MPI_SUCCESS;
while (1) {
MPL_IOV * iovp;
- MPIU_Size_t nb;
+ size_t nb;
iovp = rreq->dev.iov;
- mpi_errno = MPIDU_Sock_readv(conn->sock, iovp,
+ mpi_errno = MPIDI_CH3I_Sock_readv(conn->sock, iovp,
rreq->dev.iov_count, &nb);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS) {
@@ -898,17 +899,17 @@ static int ReadMoreData( MPIDI_CH3I_Connection_t * conn, MPID_Request *rreq )
}
/* --END ERROR HANDLING-- */
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"immediate readv, vc=%p nb=" MPIDI_MSG_SZ_FMT ", rreq=0x%08x",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"immediate readv, vc=%p nb=%" PRIdPTR ", rreq=0x%08x",
conn->vc, nb, rreq->handle));
if (nb > 0 && adjust_iov(&iovp, &rreq->dev.iov_count, nb)) {
- int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
+ int (*reqFn)(MPIDI_VC_t *, MPIR_Request *, int *);
int complete;
reqFn = rreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(rreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(rreq)!=MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -931,11 +932,11 @@ static int ReadMoreData( MPIDI_CH3I_Connection_t * conn, MPID_Request *rreq )
}
}
else {
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,
- (MPIU_DBG_FDEST,"posting readv, vc=%p, rreq=0x%08x",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
+ (MPL_DBG_FDEST,"posting readv, vc=%p, rreq=0x%08x",
conn->vc, rreq->handle));
conn->recv_active = rreq;
- mpi_errno = MPIDU_Sock_post_readv(conn->sock, iovp, rreq->dev.iov_count, NULL);
+ mpi_errno = MPIDI_CH3I_Sock_post_readv(conn->sock, iovp, rreq->dev.iov_count, NULL);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS) {
mpi_errno = MPIR_Err_create_code(
@@ -973,9 +974,9 @@ int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
@@ -996,7 +997,7 @@ int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id)
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_REGISTER_HOOK);
return mpi_errno;
fn_fail:
@@ -1010,19 +1011,19 @@ int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id)
int MPIDI_CH3I_Progress_deregister_hook(int id)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS && progress_hooks[id].func_ptr != NULL);
+ MPIR_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS && progress_hooks[id].func_ptr != NULL);
progress_hooks[id].func_ptr = NULL;
progress_hooks[id].active = FALSE;
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEREGISTER_HOOK);
return mpi_errno;
fn_fail:
@@ -1036,18 +1037,18 @@ int MPIDI_CH3I_Progress_deregister_hook(int id)
int MPIDI_CH3I_Progress_activate_hook(int id)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
+ MPIR_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
progress_hooks[id].active == FALSE && progress_hooks[id].func_ptr != NULL);
progress_hooks[id].active = TRUE;
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
return mpi_errno;
fn_fail:
@@ -1062,18 +1063,18 @@ int MPIDI_CH3I_Progress_activate_hook(int id)
int MPIDI_CH3I_Progress_deactivate_hook(int id)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
+ MPIR_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
progress_hooks[id].active == TRUE && progress_hooks[id].func_ptr != NULL);
progress_hooks[id].active = FALSE;
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
return mpi_errno;
fn_fail:
diff --git a/src/mpid/ch3/channels/sock/src/ch3_win_fns.c b/src/mpid/ch3/channels/sock/src/ch3_win_fns.c
index fe13d30..b9f8da8 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_win_fns.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_win_fns.c
@@ -15,13 +15,13 @@
int MPIDI_CH3_Win_fns_init(MPIDI_CH3U_Win_fns_t *win_fns)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
/* Sock doesn't override any of the default Window functions */
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT);
return mpi_errno;
}
@@ -33,13 +33,13 @@ int MPIDI_CH3_Win_fns_init(MPIDI_CH3U_Win_fns_t *win_fns)
int MPIDI_CH3_Win_hooks_init(MPIDI_CH3U_Win_hooks_t *win_hooks)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
/* Sock doesn't implement any of the Window hooks */
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT);
return mpi_errno;
}
@@ -52,14 +52,14 @@ int MPIDI_CH3_Win_pkt_orderings_init(MPIDI_CH3U_Win_pkt_ordering_t * win_pkt_ord
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
/* Guarantees ordered AM flush. */
win_pkt_orderings->am_flush_ordered = 1;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_WIN_PKT_ORDERINGS_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/channels/sock/src/errnames.txt b/src/mpid/ch3/channels/sock/src/errnames.txt
index c5c8ec4..1c08ad3 100644
--- a/src/mpid/ch3/channels/sock/src/errnames.txt
+++ b/src/mpid/ch3/channels/sock/src/errnames.txt
@@ -1,3 +1,89 @@
**ch3|sock|connectionfailed:Connection failed for virtual channel
**ch3|sock|writefailed:Write to socket failed
**ch3|sock|writefailed %d:Write to socket failed with code %d
+
+**sock|setalloc:unable to allocate a new sock set object
+**sock|sockalloc:unable to allocate a new sock object
+**sock|badbuf:the supplied buffer contains invalid memory
+**sock|badhandle:sock contains an invalid handle
+**sock|badhdbuf:a memory fault occurred while accessing the host description string
+**sock|badhdmax:the length of the host description string must be non-negative
+**sock|badhdlen:host description string to small to store description
+**sock|badiovn:size of iov is invalid
+**sock|badiovn %d %d %d:size of iov is invalid (set=%d,sock=%d,iov_n=%d)
+**sock|badlen:bad length parameter(s)
+**sock|badlen %d %d %d %d:bad length parameter(s) (set=%d,sock=%d,min=%d,max=%d)
+**sock|badport:port number is out of range
+**sock|badport %d:port number is out of range (sock=%d)
+**sock|badsock:supplied sock is corrupt
+**sock|connclosed:connection closed by peer
+**sock|connclosed %d %d:connection closed by peer (set=%d,sock=%d)
+**sock|connfailed:connection failure
+**sock|connrefused:connection refused
+**sock|close_cancel:operation cancelled because sock was closed locally
+**sock|close_cancel %d %d:operation cancelled because sock was closed locally (set=%d,sock=%d)
+**sock|closing:sock is in the process of being closed locally
+**sock|closing %d %d:sock is in the process of being closed locally (set=%d,sock=%d)
+**sock|closing_already:a close operation is already posted
+**sock|closing_already %d %d:a close operation is already post (set=%d,sock=%d)
+**sock|getport:failed to obtain port number of the listener
+**sock|listener_bad_sock:supplied sock is not a listener
+**sock|listener_bad_sock %d %d:supplied sock is not a listener (set=%d,sock=%d)
+**sock|listener_bad_state:supplied listener sock is in a bad state
+**sock|listener_bad_state %d %d %d:supplied listener sock is in a bad state (set=%d,sock=%d,state=%d)
+**sock|listener_read:read operation not allowed on a listener
+**sock|listener_read %d %d:read operation not allowed on a listener (set=%d,sock=%d)
+**sock|listener_write:write operation not allowed on a listener
+**sock|listener_write %d %d:write operation not allowed on a listener (set=%d,sock=%d)
+**sock|notconnected:sock is not connected
+**sock|notconnected %d %d:sock is not connected (set=%d,sock=%d)
+**sock|nosock:no new sock was available to accept
+**sock|oserror:unexpected operating system error
+**sock|osnomem:operating system routine failed due to lack of memory
+**sock|osnomem %s %d %d:operating system routine %s failed due to lack of memory (set=%d,sock=%d)
+**sock|reads:attempt to perform multiple simultaneous reads
+**sock|reads %d %d:attempt to perform multiple simultaneous reads (set=%d,sock=%d)
+**sock|uninit:Sock library has not been initialized
+**sock|writes:attempt to perform multiple simultaneous writes
+**sock|writes %d %d:attempt to perform multiple simultaneous writes (set=%d,sock=%d)
+
+**sock|poll|accept:accept failed to acquire a new socket
+**sock|poll|accept %d %s:accept failed to acquire a new socket (errno=%d:%s)
+**sock|poll|badbuf %d %d %d %s:the supplied buffer contains invalid memory (set=%d,sock=%d,errno=%d:%s)
+**sock|poll|badhandle %d %d %d:sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d)
+**sock|poll|badhandle %d %d %d %d:sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d:%d)
+**sock|poll|bind:unable to bind socket to port
+**sock|poll|bind %d %d %s:unable to bind socket to port (port=%d,errno=%d:%s)
+**sock|poll|connclosed %d %d %d %s:connection closed by peer (set=%d,sock=%d,errno=%d:%s)
+**sock|poll|connfailed %d %d %d %s:connection failure (set=%d,sock=%d,errno=%d:%s)
+**sock|poll|connrefused %d %d %s:connection refused (set=%d,sock=%d,host=%s)
+**sock|poll|eqmalloc:MPL_malloc failed to allocate memory for an event queue structure
+**sock|poll|eqfail:fatal error: failed to enqueue an event; event was lost
+**sock|poll|eqfail %d %d %d:fatal error: failed to enqueue an event; event was lost (set=%d,sock=%d,op=%d)
+**sock|poll|getport %d %s:failed to obtain port number of listener (errno=%d:%s)
+**sock|poll|listen:listen() failed
+**sock|poll|listen %d %s:listen() failed (errno=%d:%s)
+**sock|poll|nodelay:unable to set TCP no delay attribute on socket
+**sock|poll|nodelay %d %s:unable to set TCP no delay attribute on socket (errno=%d:%s)
+**sock|poll|nonblock:unable to set socket to nonblocking
+**sock|poll|nonblock %d %s:unable to set socket to nonblocking (errno=%d:%s)
+**sock|poll|oserror %d %s:unexpected operating system error (errno=%d:%s)
+**sock|poll|oserror %d %d %d %s:unexpected operating system error (set=%d,sock=%d,errno=%d:%s)
+**sock|poll|oserror %s %d %d %d %s:unpected operating system error from %s (set=%d,sock=%d,errno=%d:%s)
+**sock|poll|osnomem %d %d %d %s:operating system routine failed due to lack of memory (set=%d,sock=%d,errno=%d:%s)
+**sock|poll|pipe:unable to allocate pipe to wakeup a blocking poll()
+**sock|poll|pipe %d %s:unable to allocate pipe to wakeup a blocking poll() (errno=%d:%s)
+**sock|poll|pipenonblock:unable to set wakeup pipe to nonblocking
+**sock|poll|pipenonblock %d %s:unable to set wakeup pipe to nonblocking (errno=%d:%s)
+**sock|poll|reuseaddr:unable to set reuseaddr attribute on socket
+**sock|poll|reuseaddr %d %s:unable to set reuseaddr attribute on socket (errno=%d:%s)
+**sock|poll|setrcvbufsz: unable to set the receive socket buffer size
+**sock|poll|setrcvbufsz %d %d %s: unable to set the receive socket buffer size (size=%d,errno=%d:%s)
+**sock|poll|setsndbufsz: unable to set the send socket buffer size
+**sock|poll|setsndbufsz %d %d %s: unable to set the send socket buffer size (size=%d,errno=%d:%s)
+**sock|poll|socket:unable to obtain new socket
+**sock|poll|socket %d %s:unable to obtain new socket (errno=%d:%s)
+**sock|poll|unhandledstate:encountered an unexpected state
+**sock|poll|unhandledstate %d:encountered an unexpected state (%d)
+**sock|poll|unhandledtype:encountered an unexpected sock type
+**sock|poll|unhandledtype %d:encountered an unexpected sock type (%d)
diff --git a/src/mpid/ch3/channels/sock/src/sock.c b/src/mpid/ch3/channels/sock/src/sock.c
new file mode 100644
index 0000000..9ec72fd
--- /dev/null
+++ b/src/mpid/ch3/channels/sock/src/sock.c
@@ -0,0 +1,4187 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpiimpl.h"
+#include "mpidu_sock.h"
+#ifdef HAVE_STRING_H
+/* Include for memcpy and memset */
+#include <string.h>
+#endif
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#include <netinet/tcp.h>
+#include <netinet/in.h>
+#include <fcntl.h>
+#if defined(HAVE_POLL_H)
+#include <sys/poll.h>
+#elif defined(HAVE_SYS_POLL_H)
+#include <sys/poll.h>
+#endif
+#include <netdb.h>
+#include <errno.h>
+#include <stdio.h>
+
+
+/* FIXME: What do these mean? Why is 32 a good size (e.g., is it because
+ 32*32 = 1024 if these are bits in a 4-byte int? In that case, should
+ these be related to a maximum processor count or an OS-defined fd limit? */
+#if !defined(MPIDI_CH3I_SOCK_SET_DEFAULT_SIZE)
+#define MPIDI_CH3I_SOCK_SET_DEFAULT_SIZE 32
+#endif
+
+#if !defined(MPIDI_CH3I_SOCK_EVENTQ_POOL_SIZE)
+#define MPIDI_CH3I_SOCK_EVENTQ_POOL_SIZE 32
+#endif
+
+
+enum MPIDI_CH3I_Socki_state
+{
+ MPIDI_CH3I_SOCKI_STATE_FIRST = 0,
+ MPIDI_CH3I_SOCKI_STATE_CONNECTING,
+ MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW,
+ MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO,
+ MPIDI_CH3I_SOCKI_STATE_DISCONNECTED,
+ MPIDI_CH3I_SOCKI_STATE_CLOSING,
+ MPIDI_CH3I_SOCKI_STATE_LAST
+};
+
+enum MPIDI_CH3I_Socki_type
+{
+ MPIDI_CH3I_SOCKI_TYPE_FIRST = 0,
+ MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION,
+ MPIDI_CH3I_SOCKI_TYPE_LISTENER,
+ MPIDI_CH3I_SOCKI_TYPE_INTERRUPTER,
+ MPIDI_CH3I_SOCKI_TYPE_LAST
+};
+
+/*
+ * struct pollinfo
+ *
+ * sock_id - an integer id comprised of the sock_set id and the element number
+ * in the pollfd/info arrays
+ *
+ * sock_set - a pointer to the sock set to which this connection belongs
+ *
+ * elem - the element number of this connection in the pollfd/info arrays
+ *
+ * sock - at present this is only used to free the sock structure when the
+ * close is completed by MPIDIU_Sock_wait()
+ *
+ * fd - this file descriptor is used whenever the file descriptor is needed.
+ * this descriptor remains open until the sock, and
+ * thus the socket, are actually closed. the fd in the pollfd structure
+ * should only be used for telling poll() if it should
+ * check for events on that descriptor.
+ *
+ * user_ptr - a user supplied pointer that is included with event associated
+ * with this connection
+ *
+ * state - state of the connection
+ *
+ */
+struct pollinfo
+{
+ int sock_id;
+ struct MPIDI_CH3I_Sock_set * sock_set;
+ int elem;
+ struct MPIDI_CH3I_Sock * sock;
+ int fd;
+ void * user_ptr;
+ enum MPIDI_CH3I_Socki_type type;
+ enum MPIDI_CH3I_Socki_state state;
+ int os_errno;
+# ifdef MPICH_IS_THREADED
+ int pollfd_events;
+# endif
+ union
+ {
+ struct
+ {
+ MPL_IOV * ptr;
+ int count;
+ int offset;
+ } iov;
+ struct
+ {
+ char * ptr;
+ size_t min;
+ size_t max;
+ } buf;
+ } read;
+ int read_iov_flag;
+ size_t read_nb;
+ MPIDI_CH3I_Sock_progress_update_func_t read_progress_update_fn;
+ union
+ {
+ struct
+ {
+ MPL_IOV * ptr;
+ int count;
+ int offset;
+ } iov;
+ struct
+ {
+ char * ptr;
+ size_t min;
+ size_t max;
+ } buf;
+ } write;
+ int write_iov_flag;
+ size_t write_nb;
+ MPIDI_CH3I_Sock_progress_update_func_t write_progress_update_fn;
+};
+
+struct MPIDI_CH3I_Socki_eventq_elem
+{
+ struct MPIDI_CH3I_Sock_event event;
+ int set_elem;
+ struct MPIDI_CH3I_Socki_eventq_elem * next;
+};
+
+struct MPIDI_CH3I_Sock_set
+{
+ int id;
+
+ /* when the pollfds array is scanned for activity, start with this element.
+ this is used to prevent favoring a particular
+ element, such as the first. */
+ int starting_elem;
+
+ /* pointers to the pollfd and pollinfo that make up the logical poll array,
+ along with the current size of the array and last
+ allocated element */
+ int poll_array_sz;
+ int poll_array_elems;
+ struct pollfd * pollfds;
+ struct pollinfo * pollinfos;
+
+ /* head and tail pointers for the event queue */
+ struct MPIDI_CH3I_Socki_eventq_elem * eventq_head;
+ struct MPIDI_CH3I_Socki_eventq_elem * eventq_tail;
+
+# ifdef MPICH_IS_THREADED
+ /* pointer to the pollfds array being actively used by a blocking poll();
+ NULL if not blocking in poll() */
+ struct pollfd * pollfds_active;
+
+ /* flag indicating if updates were made to any pollfd entries while a
+ thread was blocking in poll() */
+ int pollfds_updated;
+
+ /* flag indicating that a wakeup has already been posted on the
+ interrupter socket */
+ int wakeup_posted;
+
+ /* sock and fds for the interrpter pipe */
+ struct MPIDI_CH3I_Sock * intr_sock;
+ int intr_fds[2];
+# endif
+};
+
+struct MPIDI_CH3I_Sock
+{
+ struct MPIDI_CH3I_Sock_set * sock_set;
+ int elem;
+};
+
+/* FIXME: Why aren't these static */
+int MPIDI_CH3I_Socki_initialized = 0;
+
+static struct MPIDI_CH3I_Socki_eventq_elem * MPIDI_CH3I_Socki_eventq_pool = NULL;
+
+/* MT: needs to be atomically incremented */
+static int MPIDI_CH3I_Socki_set_next_id = 0;
+
+/* Prototypes for functions used only within the socket code. */
+
+/* Set the buffer size on the socket fd from the environment variable
+ or other option; if "firm" is true, fail if the buffer size is not
+ successfully set */
+int MPIDI_CH3I_Sock_SetSockBufferSize( int fd, int firm );
+/* Get a string version of the address in ifaddr*/
+int MPIDI_CH3I_Sock_AddrToStr( MPIDI_CH3I_Sock_ifaddr_t *ifaddr, char *str, int maxlen );
+
+
+
+/*********** socki_util.i ***********/
+
+#ifdef MPICH_IS_THREADED
+static int MPIDI_CH3I_Socki_wakeup(struct MPIDI_CH3I_Sock_set * sock_set);
+int MPIDI_Sock_update_sock_set( struct MPIDI_CH3I_Sock_set *, int );
+#endif
+
+static int MPIDI_CH3I_Socki_os_to_mpi_errno(struct pollinfo * pollinfo,
+ int os_errno, const char * fcname, int line, int * conn_failed);
+
+static int MPIDI_CH3I_Socki_adjust_iov(ssize_t nb, MPL_IOV * const iov,
+ const int count, int * const offsetp);
+
+static int MPIDI_CH3I_Socki_sock_alloc(struct MPIDI_CH3I_Sock_set * sock_set,
+ struct MPIDI_CH3I_Sock ** sockp);
+static void MPIDI_CH3I_Socki_sock_free(struct MPIDI_CH3I_Sock * sock);
+
+static int MPIDI_CH3I_Socki_event_enqueue(struct pollinfo * pollinfo,
+ enum MPIDI_CH3I_Sock_op op,
+ size_t num_bytes,
+ void * user_ptr, int error);
+static inline int MPIDI_CH3I_Socki_event_dequeue(struct MPIDI_CH3I_Sock_set * sock_set,
+ int * set_elem,
+ struct MPIDI_CH3I_Sock_event * eventp);
+
+static void MPIDI_CH3I_Socki_free_eventq_mem(void);
+
+struct MPIDI_CH3I_Socki_eventq_table
+{
+ struct MPIDI_CH3I_Socki_eventq_elem elems[MPIDI_CH3I_SOCK_EVENTQ_POOL_SIZE];
+ struct MPIDI_CH3I_Socki_eventq_table * next;
+};
+
+static struct MPIDI_CH3I_Socki_eventq_table *MPIDI_CH3I_Socki_eventq_table_head=NULL;
+
+
+
+#define MPIDI_CH3I_Socki_sock_get_pollfd(sock_) (&(sock_)->sock_set->pollfds[(sock_)->elem])
+#define MPIDI_CH3I_Socki_sock_get_pollinfo(sock_) (&(sock_)->sock_set->pollinfos[(sock_)->elem])
+#define MPIDI_CH3I_Socki_pollinfo_get_pollfd(pollinfo_) (&(pollinfo_)->sock_set->pollfds[(pollinfo_)->elem])
+
+
+/* Enqueue a new event. If the enqueue fails, generate an error and jump to
+ the fail_label_ */
+#define MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo_, op_, nb_, user_ptr_, event_mpi_errno_, mpi_errno_, fail_label_) \
+{ \
+ mpi_errno_ = MPIDI_CH3I_Socki_event_enqueue((pollinfo_), (op_), (nb_), (user_ptr_), (event_mpi_errno_)); \
+ if (mpi_errno_ != MPI_SUCCESS) \
+ { \
+ mpi_errno_ = MPIR_Err_create_code(mpi_errno, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, \
+ "**sock|poll|eqfail", "**sock|poll|eqfail %d %d %d", \
+ pollinfo->sock_set->id, pollinfo->sock_id, (op_)); \
+ goto fail_label_; \
+ } \
+}
+
+/* FIXME: These need to separate the operations from the thread-related
+ synchronization to ensure that the code that is independent of
+ threads is always the same. Also, the thread-level check needs
+ to be identical to all others, and there should be an option,
+ possibly embedded within special thread macros, to allow
+ runtime control of the thread level */
+
+#ifndef MPICH_IS_THREADED
+# define MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd_, pollinfo_, op_) \
+ { \
+ (pollfd_)->events |= (op_); \
+ (pollfd_)->fd = (pollinfo_)->fd; \
+ }
+# define MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd_, pollinfo_, op_) \
+ { \
+ (pollfd_)->events &= ~(op_); \
+ (pollfd_)->revents &= ~(op_); \
+ if (((pollfd_)->events & (POLLIN | POLLOUT)) == 0) \
+ { \
+ (pollfd_)->fd = -1; \
+ } \
+ }
+#else /* MPICH_IS_THREADED */
+/* FIXME: Does this need a runtime check on whether threads are in use? */
+# define MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd_, pollinfo_, op_) \
+ { \
+ (pollinfo_)->pollfd_events |= (op_); \
+ if ((pollinfo_)->sock_set->pollfds_active == NULL) \
+ { \
+ (pollfd_)->events |= (op_); \
+ (pollfd_)->fd = (pollinfo_)->fd; \
+ } \
+ else \
+ { \
+ (pollinfo_)->sock_set->pollfds_updated = TRUE; \
+ MPIDI_CH3I_Socki_wakeup((pollinfo_)->sock_set); \
+ } \
+ }
+# define MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd_, pollinfo_, op_) \
+ { \
+ (pollinfo_)->pollfd_events &= ~(op_); \
+ if ((pollinfo_)->sock_set->pollfds_active == NULL) \
+ { \
+ (pollfd_)->events &= ~(op_); \
+ (pollfd_)->revents &= ~(op_); \
+ if (((pollfd_)->events & (POLLIN | POLLOUT)) == 0) \
+ { \
+ (pollfd_)->fd = -1; \
+ } \
+ } \
+ else \
+ { \
+ (pollinfo_)->sock_set->pollfds_updated = TRUE; \
+ MPIDI_CH3I_Socki_wakeup((pollinfo_)->sock_set); \
+ } \
+ }
+#endif
+
+#define MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd_, pollinfo_, op_) ((pollfd_)->events & (op_))
+
+/* FIXME: Low usage operations like this should be a function for
+ better readability, modularity, and code size */
+#define MPIDI_CH3I_SOCKI_GET_SOCKET_ERROR(pollinfo_, os_errno_, mpi_errno_, fail_label_) \
+{ \
+ int rc__; \
+ socklen_t sz__; \
+ \
+ sz__ = sizeof(os_errno_); \
+ rc__ = getsockopt((pollinfo_)->fd, SOL_SOCKET, SO_ERROR, &(os_errno_), &sz__); \
+ if (rc__ != 0) \
+ { \
+ if (errno == ENOMEM || errno == ENOBUFS) \
+ { \
+ mpi_errno_ = MPIR_Err_create_code( \
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM, "**sock|osnomem", \
+ "**sock|osnomem %s %d %d", "getsockopt", pollinfo->sock_set->id, pollinfo->sock_id); \
+ } \
+ else \
+ { \
+ mpi_errno = MPIR_Err_create_code( \
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|oserror", \
+ "**sock|poll|oserror %s %d %d %d %s", "getsockopt", pollinfo->sock_set->id, pollinfo->sock_id, \
+ (os_errno_), MPIR_Strerror(os_errno_)); \
+ } \
+ \
+ goto fail_label_; \
+ } \
+}
+
+
+/*
+ * Validation tests
+ */
+/* FIXME: Are these really optional? Based on their definitions, it looks
+ like they should only be used when debugging the code. */
+#ifdef USE_SOCK_VERIFY
+#define MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno_, fail_label_) \
+{ \
+ if (MPIDI_CH3I_Socki_initialized <= 0) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_INIT, \
+ "**sock|uninit", NULL); \
+ goto fail_label_; \
+ } \
+}
+
+
+#define MPIDI_CH3I_SOCKI_VALIDATE_SOCK_SET(sock_set_, mpi_errno_, fail_label_)
+
+
+#define MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock_, mpi_errno_, fail_label_) \
+{ \
+ struct pollinfo * pollinfo__; \
+ \
+ if ((sock_) == NULL || (sock_)->sock_set == NULL || (sock_)->elem < 0 || \
+ (sock_)->elem >= (sock_)->sock_set->poll_array_elems) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, \
+ "**sock|badsock", NULL); \
+ goto fail_label_; \
+ } \
+ \
+ pollinfo__ = MPIDI_CH3I_Socki_sock_get_pollinfo(sock_); \
+ \
+ if (pollinfo__->type <= MPIDI_CH3I_SOCKI_TYPE_FIRST || pollinfo__->type >= MPIDI_CH3I_SOCKI_TYPE_INTERRUPTER || \
+ pollinfo__->state <= MPIDI_CH3I_SOCKI_STATE_FIRST || pollinfo__->state >= MPIDI_CH3I_SOCKI_STATE_LAST) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, \
+ "**sock|badsock", NULL); \
+ goto fail_label_; \
+ } \
+}
+
+
+#define MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo_, mpi_errno_, fail_label_) \
+{ \
+ if ((pollinfo_)->type == MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION) \
+ { \
+ if ((pollinfo_)->state == MPIDI_CH3I_SOCKI_STATE_CONNECTING) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code( \
+ (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, "**sock|notconnected", \
+ "**sock|notconnected %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ goto fail_label_; \
+ } \
+ else if ((pollinfo_)->state == MPIDI_CH3I_SOCKI_STATE_DISCONNECTED) \
+ { \
+ if ((pollinfo_)->os_errno == 0) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code( \
+ (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_CLOSED, "**sock|connclosed", \
+ "**sock|connclosed %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ } \
+ else \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code( \
+ (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_FAILED, "**sock|connfailed", \
+ "**sock|poll|connfailed %d %d %d %s", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id, \
+ (pollinfo_)->os_errno, MPIR_Strerror((pollinfo_)->os_errno)); \
+ } \
+ goto fail_label_; \
+ } \
+ else if ((pollinfo_)->state == MPIDI_CH3I_SOCKI_STATE_CLOSING) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code( \
+ (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_INPROGRESS, "**sock|closing", \
+ "**sock|closing %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ \
+ goto fail_label_; \
+ } \
+ else if ((pollinfo_)->state != MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW && (pollinfo_)->state != MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, \
+ "**sock|badsock", NULL); \
+ goto fail_label_; \
+ } \
+ } \
+ else if ((pollinfo_)->type == MPIDI_CH3I_SOCKI_TYPE_LISTENER) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code( \
+ (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, "**sock|listener_read", \
+ "**sock|listener_read %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ \
+ goto fail_label_; \
+ } \
+}
+
+
+#define MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo_, mpi_errno_, fail_label_) \
+{ \
+ if ((pollinfo_)->type == MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION) \
+ { \
+ if ((pollinfo_)->state == MPIDI_CH3I_SOCKI_STATE_CONNECTING) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, \
+ "**sock|notconnected", "**sock|notconnected %d %d", \
+ (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ goto fail_label_; \
+ } \
+ else if ((pollinfo_)->state == MPIDI_CH3I_SOCKI_STATE_DISCONNECTED || (pollinfo_)->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO) \
+ { \
+ if ((pollinfo_)->os_errno == 0) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code( \
+ (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_CLOSED, "**sock|connclosed", \
+ "**sock|connclosed %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ } \
+ else \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code( \
+ (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_FAILED, "**sock|connfailed", \
+ "**sock|poll|connfailed %d %d %d %s", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id, \
+ (pollinfo_)->os_errno, MPIR_Strerror((pollinfo_)->os_errno)); \
+ } \
+ goto fail_label_; \
+ } \
+ else if ((pollinfo_)->state == MPIDI_CH3I_SOCKI_STATE_CLOSING) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_INPROGRESS, \
+ "**sock|closing", "**sock|closing %d %d", \
+ (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ \
+ goto fail_label_; \
+ } \
+ else if ((pollinfo_)->state != MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, \
+ "**sock|badsock", NULL); \
+ goto fail_label_; \
+ } \
+ } \
+ else if ((pollinfo_)->type == MPIDI_CH3I_SOCKI_TYPE_LISTENER) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, \
+ "**sock|listener_write", "**sock|listener_write %d %d", \
+ (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ \
+ goto fail_label_; \
+ } \
+}
+
+
+#define MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo_, mpi_errno_, fail_label_) \
+{ \
+ if ((pollinfo_)->fd < 0) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, \
+ "**sock|badhandle", "**sock|poll|badhandle %d %d %d", \
+ (pollinfo_)->sock_set->id, (pollinfo_)->sock_id, (pollinfo_)->fd); \
+ goto fail_label_; \
+ } \
+}
+
+
+#define MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_READ(pollfd_, pollinfo_, mpi_errno_, fail_label_) \
+{ \
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET((pollfd_), (pollinfo_), POLLIN)) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_INPROGRESS, \
+ "**sock|reads", "**sock|reads %d %d", \
+ (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ goto fail_label_; \
+ } \
+}
+
+
+#define MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd_, pollinfo_, mpi_errno_, fail_label_) \
+{ \
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET((pollfd_), (pollinfo_), POLLOUT)) \
+ { \
+ (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_INPROGRESS, \
+ "**sock|writes", "**sock|writes %d %d", \
+ (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
+ goto fail_label_; \
+ } \
+}
+#else
+/* Use minimal to no checking */
+#define MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno_,fail_label_)
+#define MPIDI_CH3I_SOCKI_VALIDATE_SOCK_SET(sock_set_,mpi_errno_,fail_label_)
+#define MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock_,mpi_errno_,fail_label_)
+#define MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo_,mpi_errno_,fail_label_)
+#define MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo_,mpi_errno_,fail_label_)
+#define MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo_,mpi_errno_,fail_label_)
+#define MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_READ(pollfd_,pollinfo_,mpi_errno,fail_label_)
+#define MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd_,pollinfo_,mpi_errno,fail_label_)
+
+#endif
+
+
+#ifdef MPICH_IS_THREADED
+
+/*
+ * MPIDI_CH3I_Socki_wakeup()
+ */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_wakeup
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_wakeup(struct MPIDI_CH3I_Sock_set * sock_set)
+{
+ MPIR_THREAD_CHECK_BEGIN;
+ if (sock_set->wakeup_posted == FALSE)
+ {
+ for(;;)
+ {
+ int nb;
+ char c = 0;
+
+ nb = write(sock_set->intr_fds[1], &c, 1);
+ if (nb == 1)
+ {
+ break;
+ }
+
+ MPIR_Assertp(nb == 0 || errno == EINTR);
+ }
+
+ sock_set->wakeup_posted = TRUE;
+ }
+ MPIR_THREAD_CHECK_END;
+ return MPIDI_CH3I_SOCK_SUCCESS;
+}
+/* end MPIDI_CH3I_Socki_wakeup() */
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Sock_update_sock_set
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_Sock_update_sock_set( struct MPIDI_CH3I_Sock_set *sock_set,
+ int pollfds_active_elems )
+{
+ int mpi_errno = MPI_SUCCESS;
+ int elem;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET);
+ for (elem = 0; elem < sock_set->poll_array_elems; elem++) {
+ sock_set->pollfds[elem].events = sock_set->pollinfos[elem].pollfd_events;
+ if ((sock_set->pollfds[elem].events & (POLLIN | POLLOUT)) != 0) {
+ sock_set->pollfds[elem].fd = sock_set->pollinfos[elem].fd;
+ }
+ else {
+ sock_set->pollfds[elem].fd = -1;
+ }
+
+ if (elem < pollfds_active_elems) {
+ if (sock_set->pollfds_active == sock_set->pollfds) {
+ sock_set->pollfds[elem].revents &= ~(POLLIN | POLLOUT) | sock_set->pollfds[elem].events;
+ }
+ else {
+ sock_set->pollfds[elem].revents = sock_set->pollfds_active[elem].revents &
+ (~(POLLIN | POLLOUT) | sock_set->pollfds[elem].events);
+ }
+ }
+ else {
+ sock_set->pollfds[elem].revents = 0;
+ }
+ }
+
+ if (sock_set->pollfds_active != sock_set->pollfds) {
+ MPL_free(sock_set->pollfds_active);
+ }
+
+ sock_set->pollfds_updated = FALSE;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET);
+ return mpi_errno;
+
+}
+
+#endif /* (MPICH_IS_THREADED) */
+
+
+/*
+ * MPIDI_CH3I_Socki_os_to_mpi_errno()
+ *
+ * This routine assumes that no thread can change the state between state check before the nonblocking OS operation and the call
+ * to this routine.
+ */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_os_to_mpi_errno
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* --BEGIN ERROR HANDLING-- */
+static int MPIDI_CH3I_Socki_os_to_mpi_errno(struct pollinfo * pollinfo, int os_errno, const char * fcname, int line, int * disconnected)
+{
+ int mpi_errno;
+
+ if (os_errno == ENOMEM || os_errno == ENOBUFS)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|osnomem", "**sock|poll|osnomem %d %d %d %s",
+ pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIR_Strerror(os_errno));
+ *disconnected = FALSE;
+ }
+ else if (os_errno == EFAULT || os_errno == EINVAL)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDI_CH3I_SOCK_ERR_BAD_BUF,
+ "**sock|badbuf", "**sock|poll|badbuf %d %d %d %s",
+ pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIR_Strerror(os_errno));
+ *disconnected = FALSE;
+ }
+ else if (os_errno == EPIPE)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDI_CH3I_SOCK_ERR_CONN_CLOSED,
+ "**sock|connclosed", "**sock|poll|connclosed %d %d %d %s",
+ pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIR_Strerror(os_errno));
+ *disconnected = TRUE;
+ }
+ else if (os_errno == ECONNRESET || os_errno == ENOTCONN || os_errno == ETIMEDOUT)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDI_CH3I_SOCK_ERR_CONN_FAILED,
+ "**sock|connfailed", "**sock|poll|connfailed %d %d %d %s",
+ pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIR_Strerror(os_errno));
+ pollinfo->os_errno = os_errno;
+ *disconnected = TRUE;
+ }
+ else if (os_errno == EBADF)
+ {
+ /*
+ * If we have a bad file descriptor, then either the sock was bad to
+ * start with and we didn't catch it in the preliminary
+ * checks, or a sock closure was finalized after the preliminary
+ * checks were performed. The latter should not happen if
+ * the thread safety code is correctly implemented. In any case,
+ * the data structures associated with the sock are no
+ * longer valid and should not be modified. We indicate this by
+ * returning a fatal error.
+ */
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, fcname, line, MPIDI_CH3I_SOCK_ERR_BAD_SOCK,
+ "**sock|badsock", NULL);
+ *disconnected = FALSE;
+ }
+ else
+ {
+ /*
+ * Unexpected OS error.
+ *
+ * FIXME: technically we should never reach this section of code.
+ * What's the right way to handle this situation? Should
+ * we print an immediate message asking the user to report the errno
+ * so that we can plug the hole?
+ */
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, fcname, line, MPIDI_CH3I_SOCK_ERR_CONN_FAILED,
+ "**sock|oserror", "**sock|poll|oserror %d %d %d %s",
+ pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIR_Strerror(os_errno));
+ pollinfo->os_errno = os_errno;
+ *disconnected = TRUE;
+ }
+
+ return mpi_errno;
+}
+/* --END ERROR HANDLING-- */
+/* end MPIDI_CH3I_Socki_os_to_mpi_errno() */
+
+
+/*
+ * MPIDI_CH3I_Socki_adjust_iov()
+ *
+ * Use the specified number of bytes (nb) to adjust the iovec and associated
+ * values. If the iovec has been consumed, return
+ * true; otherwise return false.
+ *
+ * The input is an iov (MPL_IOV is just an iov) and the offset into which
+ * to start (start with entry iov[*offsetp]) and remove nb bytes from the iov.
+ * The use of the offsetp term allows use to remove values from the iov without
+ * making a copy to shift down elements when only part of the iov is
+ * consumed.
+ */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_adjust_iov
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_adjust_iov(ssize_t nb, MPL_IOV * const iov, const int count, int * const offsetp)
+{
+ int offset = *offsetp;
+
+ while (offset < count)
+ {
+ if (iov[offset].MPL_IOV_LEN <= nb)
+ {
+ nb -= iov[offset].MPL_IOV_LEN;
+ offset++;
+ }
+ else
+ {
+ iov[offset].MPL_IOV_BUF = (char *) iov[offset].MPL_IOV_BUF + nb;
+ iov[offset].MPL_IOV_LEN -= nb;
+ *offsetp = offset;
+ return FALSE;
+ }
+ }
+
+ *offsetp = offset;
+ return TRUE;
+}
+/* end MPIDI_CH3I_Socki_adjust_iov() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_sock_alloc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_sock_alloc(struct MPIDI_CH3I_Sock_set * sock_set, struct MPIDI_CH3I_Sock ** sockp)
+{
+ struct MPIDI_CH3I_Sock * sock = NULL;
+ int avail_elem;
+ struct pollfd * pollfds = NULL;
+ struct pollinfo * pollinfos = NULL;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_ALLOC);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_ALLOC);
+
+ /* FIXME: Should this use the CHKPMEM macros (perm malloc)? */
+ sock = MPL_malloc(sizeof(struct MPIDI_CH3I_Sock));
+ /* --BEGIN ERROR HANDLING-- */
+ if (sock == NULL)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM, "**nomem", 0);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Check existing poll structures for a free element.
+ */
+ for (avail_elem = 0; avail_elem < sock_set->poll_array_sz; avail_elem++)
+ {
+ if (sock_set->pollinfos[avail_elem].sock_id == -1)
+ {
+ if (avail_elem >= sock_set->poll_array_elems)
+ {
+ sock_set->poll_array_elems = avail_elem + 1;
+ }
+
+ break;
+ }
+ }
+
+ /*
+ * No free elements were found. Larger pollfd and pollinfo arrays need to
+ * be allocated and the existing data transfered over.
+ */
+ if (avail_elem == sock_set->poll_array_sz)
+ {
+ int elem;
+
+ pollfds = MPL_malloc((sock_set->poll_array_sz + MPIDI_CH3I_SOCK_SET_DEFAULT_SIZE) * sizeof(struct pollfd));
+ /* --BEGIN ERROR HANDLING-- */
+ if (pollfds == NULL)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**nomem", 0);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+ pollinfos = MPL_malloc((sock_set->poll_array_sz + MPIDI_CH3I_SOCK_SET_DEFAULT_SIZE) * sizeof(struct pollinfo));
+ /* --BEGIN ERROR HANDLING-- */
+ if (pollinfos == NULL)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**nomem", 0);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ if (sock_set->poll_array_sz > 0)
+ {
+ /*
+ * Copy information from the old arrays and then free them.
+ *
+ * In the multi-threaded case, the pollfd array can only be copied
+ * if another thread is not already blocking in poll()
+ * and thus potentially modifying the array. Furthermore, the
+ * pollfd array must not be freed if it is the one
+ * actively being used by pol().
+ */
+# ifndef MPICH_IS_THREADED
+ {
+ memcpy(pollfds, sock_set->pollfds, sock_set->poll_array_sz * sizeof(struct pollfd));
+ MPL_free(sock_set->pollfds);
+ }
+# else
+ {
+ if (sock_set->pollfds_active == NULL)
+ {
+ memcpy(pollfds, sock_set->pollfds, sock_set->poll_array_sz * sizeof(struct pollfd));
+ }
+ if (sock_set->pollfds_active != sock_set->pollfds)
+ {
+ MPL_free(sock_set->pollfds);
+ }
+ }
+# endif
+
+ memcpy(pollinfos, sock_set->pollinfos, sock_set->poll_array_sz * sizeof(struct pollinfo));
+ MPL_free(sock_set->pollinfos);
+ }
+
+ sock_set->poll_array_elems = avail_elem + 1;
+ sock_set->poll_array_sz += MPIDI_CH3I_SOCK_SET_DEFAULT_SIZE;
+ sock_set->pollfds = pollfds;
+ sock_set->pollinfos = pollinfos;
+
+ /*
+ * Initialize new elements
+ */
+ for (elem = avail_elem; elem < sock_set->poll_array_sz; elem++)
+ {
+ pollfds[elem].fd = -1;
+ pollfds[elem].events = 0;
+ pollfds[elem].revents = 0;
+ }
+ for (elem = avail_elem; elem < sock_set->poll_array_sz; elem++)
+ {
+ pollinfos[elem].fd = -1;
+ pollinfos[elem].sock_set = sock_set;
+ pollinfos[elem].elem = elem;
+ pollinfos[elem].sock = NULL;
+ pollinfos[elem].sock_id = -1;
+ pollinfos[elem].type = MPIDI_CH3I_SOCKI_TYPE_FIRST;
+ pollinfos[elem].state = MPIDI_CH3I_SOCKI_STATE_FIRST;
+# ifdef MPICH_IS_THREADED
+ {
+ pollinfos[elem].pollfd_events = 0;
+ }
+# endif
+ }
+ }
+
+ /*
+ * Verify that memory hasn't been messed up.
+ */
+ MPIR_Assert(sock_set->pollinfos[avail_elem].sock_set == sock_set);
+ MPIR_Assert(sock_set->pollinfos[avail_elem].elem == avail_elem);
+ MPIR_Assert(sock_set->pollinfos[avail_elem].fd == -1);
+ MPIR_Assert(sock_set->pollinfos[avail_elem].sock == NULL);
+ MPIR_Assert(sock_set->pollinfos[avail_elem].sock_id == -1);
+ MPIR_Assert(sock_set->pollinfos[avail_elem].type == MPIDI_CH3I_SOCKI_TYPE_FIRST);
+ MPIR_Assert(sock_set->pollinfos[avail_elem].state == MPIDI_CH3I_SOCKI_STATE_FIRST);
+# ifdef MPICH_IS_THREADED
+ {
+ MPIR_Assert(sock_set->pollinfos[avail_elem].pollfd_events == 0);
+ }
+# endif
+
+ /*
+ * Initialize newly allocated sock structure and associated poll structures
+ */
+ sock_set->pollinfos[avail_elem].sock_id = (sock_set->id << 24) | avail_elem;
+ sock_set->pollinfos[avail_elem].sock = sock;
+ sock->sock_set = sock_set;
+ sock->elem = avail_elem;
+
+ sock_set->pollfds[avail_elem].fd = -1;
+ sock_set->pollfds[avail_elem].events = 0;
+ sock_set->pollfds[avail_elem].revents = 0;
+
+# ifdef MPICH_IS_THREADED
+ {
+ MPIR_THREAD_CHECK_BEGIN;
+ if (sock_set->pollfds_active != NULL)
+ {
+ sock_set->pollfds_updated = TRUE;
+ }
+ MPIR_THREAD_CHECK_END;
+ }
+# endif
+
+ *sockp = sock;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_ALLOC);
+ return mpi_errno;
+
+ /* --BEGIN ERROR HANDLING-- */
+ fn_fail:
+ if (pollinfos != NULL)
+ {
+ MPL_free(pollinfos);
+ }
+
+ if (pollfds != NULL)
+ {
+ MPL_free(pollfds);
+ }
+
+ if (sock != NULL)
+ {
+ MPL_free(sock);
+ }
+
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+/* end MPIDI_CH3I_Socki_sock_alloc() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_sock_free
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static void MPIDI_CH3I_Socki_sock_free(struct MPIDI_CH3I_Sock * sock)
+{
+ struct pollfd * pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ struct pollinfo * pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+ struct MPIDI_CH3I_Sock_set * sock_set = sock->sock_set;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_FREE);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_FREE);
+
+ /* FIXME: We need an abstraction for the thread sync operations */
+# ifdef MPICH_IS_THREADED
+ {
+ /*
+ * Freeing a sock while Sock_wait() is blocked in poll() is not supported
+ */
+ MPIR_Assert(sock_set->pollfds_active == NULL);
+ }
+# endif
+
+ /*
+ * Compress poll array
+ */
+ /* FIXME: move last element into current position and update sock associated with last element.
+ */
+ if (sock->elem + 1 == sock_set->poll_array_elems)
+ {
+ sock_set->poll_array_elems -= 1;
+ if (sock_set->starting_elem >= sock_set->poll_array_elems)
+ {
+ sock_set->starting_elem = 0;
+ }
+ }
+
+ /*
+ * Remove entry from the poll list and mark the entry as free
+ */
+ pollinfo->fd = -1;
+ pollinfo->sock = NULL;
+ pollinfo->sock_id = -1;
+ pollinfo->type = MPIDI_CH3I_SOCKI_TYPE_FIRST;
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_FIRST;
+# ifdef MPICH_IS_THREADED
+ {
+ pollinfo->pollfd_events = 0;
+ }
+# endif
+
+ pollfd->fd = -1;
+ pollfd->events = 0;
+ pollfd->revents = 0;
+
+ /*
+ * Mark the sock as invalid so that any future use might be caught
+ */
+ sock->sock_set = NULL;
+ sock->elem = -1;
+
+ MPL_free(sock);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_FREE);
+}
+/* end MPIDI_CH3I_Socki_sock_free() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_event_enqueue
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_event_enqueue(struct pollinfo * pollinfo, MPIDI_CH3I_Sock_op_t op, size_t num_bytes,
+ void * user_ptr, int error)
+{
+ struct MPIDI_CH3I_Sock_set * sock_set = pollinfo->sock_set;
+ struct MPIDI_CH3I_Socki_eventq_elem * eventq_elem;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_ENQUEUE);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_ENQUEUE);
+
+ if (MPIDI_CH3I_Socki_eventq_pool != NULL)
+ {
+ eventq_elem = MPIDI_CH3I_Socki_eventq_pool;
+ MPIDI_CH3I_Socki_eventq_pool = MPIDI_CH3I_Socki_eventq_pool->next;
+ }
+ else
+ {
+ int i;
+ struct MPIDI_CH3I_Socki_eventq_table *eventq_table;
+
+ eventq_table = MPL_malloc(sizeof(struct MPIDI_CH3I_Socki_eventq_table));
+ /* --BEGIN ERROR HANDLING-- */
+ if (eventq_table == NULL)
+ {
+ mpi_errno = MPIR_Err_create_code(errno, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER,
+ "**sock|poll|eqmalloc", 0);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ eventq_elem = eventq_table->elems;
+
+ eventq_table->next = MPIDI_CH3I_Socki_eventq_table_head;
+ MPIDI_CH3I_Socki_eventq_table_head = eventq_table;
+
+ if (MPIDI_CH3I_SOCK_EVENTQ_POOL_SIZE > 1)
+ {
+ MPIDI_CH3I_Socki_eventq_pool = &eventq_elem[1];
+ for (i = 0; i < MPIDI_CH3I_SOCK_EVENTQ_POOL_SIZE - 2; i++)
+ {
+ MPIDI_CH3I_Socki_eventq_pool[i].next = &MPIDI_CH3I_Socki_eventq_pool[i+1];
+ }
+ MPIDI_CH3I_Socki_eventq_pool[MPIDI_CH3I_SOCK_EVENTQ_POOL_SIZE - 2].next = NULL;
+ }
+ }
+
+ eventq_elem->event.op_type = op;
+ eventq_elem->event.num_bytes = num_bytes;
+ eventq_elem->event.user_ptr = user_ptr;
+ eventq_elem->event.error = error;
+ eventq_elem->set_elem = pollinfo->elem;
+ eventq_elem->next = NULL;
+
+ if (sock_set->eventq_head == NULL)
+ {
+ sock_set->eventq_head = eventq_elem;
+ }
+ else
+ {
+ sock_set->eventq_tail->next = eventq_elem;
+ }
+ sock_set->eventq_tail = eventq_elem;
+fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_ENQUEUE);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Socki_event_enqueue() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_event_dequeue
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH3I_Socki_event_dequeue(struct MPIDI_CH3I_Sock_set * sock_set, int * set_elem, struct MPIDI_CH3I_Sock_event * eventp)
+{
+ struct MPIDI_CH3I_Socki_eventq_elem * eventq_elem;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_DEQUEUE);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_DEQUEUE);
+
+ if (sock_set->eventq_head != NULL)
+ {
+ eventq_elem = sock_set->eventq_head;
+
+ sock_set->eventq_head = eventq_elem->next;
+ if (eventq_elem->next == NULL)
+ {
+ sock_set->eventq_tail = NULL;
+ }
+
+ *eventp = eventq_elem->event;
+ *set_elem = eventq_elem->set_elem;
+
+ eventq_elem->next = MPIDI_CH3I_Socki_eventq_pool;
+ MPIDI_CH3I_Socki_eventq_pool = eventq_elem;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ /* FIXME: Shouldn't this be an mpi error code? */
+ mpi_errno = MPIDI_CH3I_SOCK_ERR_FAIL;
+ }
+ /* --END ERROR HANDLING-- */
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_DEQUEUE);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Socki_event_dequeue() */
+
+
+/* FIXME: Who allocates eventq tables? Should there be a check that these
+ tables are empty first? */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_free_eventq_mem
+#undef FCNAME
+#define FCNAME "MPIDI_CH3I_Socki_free_eventq_mem"
+static void MPIDI_CH3I_Socki_free_eventq_mem(void)
+{
+ struct MPIDI_CH3I_Socki_eventq_table *eventq_table, *eventq_table_next;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SOCKI_FREE_EVENTQ_MEM);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SOCKI_FREE_EVENTQ_MEM);
+
+ eventq_table = MPIDI_CH3I_Socki_eventq_table_head;
+ while (eventq_table) {
+ eventq_table_next = eventq_table->next;
+ MPL_free(eventq_table);
+ eventq_table = eventq_table_next;
+ }
+ MPIDI_CH3I_Socki_eventq_table_head = NULL;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SOCKI_FREE_EVENTQ_MEM);
+}
+
+/* Provide a standard mechanism for setting the socket buffer size.
+ The value is -1 if the default size hasn't been set, 0 if no size
+ should be set, and > 0 if that size should be used */
+static int sockBufSize = -1;
+
+/* Set the socket buffer sizes on fd to the standard values (this is controlled
+ by the parameter MPICH_SOCK_BUFSIZE). If "firm" is true, require that the
+ sockets actually accept that buffer size. */
+int MPIDI_CH3I_Sock_SetSockBufferSize( int fd, int firm )
+{
+ int mpi_errno = MPI_SUCCESS;
+ int rc;
+
+ /* Get the socket buffer size if we haven't yet acquired it */
+ if (sockBufSize < 0) {
+ /* FIXME: Is this the name that we want to use (this was chosen
+ to match the original, undocumented name) */
+ rc = MPL_env2int( "MPICH_SOCKET_BUFFER_SIZE", &sockBufSize );
+ if (rc <= 0) {
+ sockBufSize = 0;
+ }
+ MPL_DBG_MSG_D(MPIDI_CH3I_DBG_SOCK_CONNECT,TYPICAL,"Sock buf size = %d",sockBufSize);
+ }
+
+ if (sockBufSize > 0) {
+ int bufsz;
+ socklen_t bufsz_len;
+
+ bufsz = sockBufSize;
+ bufsz_len = sizeof(bufsz);
+ rc = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsz, bufsz_len);
+ if (rc == -1) {
+ MPIR_ERR_SETANDJUMP3(mpi_errno,MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|setsndbufsz",
+ "**sock|poll|setsndbufsz %d %d %s",
+ bufsz, errno, MPIR_Strerror(errno));
+ }
+ bufsz = sockBufSize;
+ bufsz_len = sizeof(bufsz);
+ rc = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsz, bufsz_len);
+ if (rc == -1) {
+ MPIR_ERR_SETANDJUMP3(mpi_errno,MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|setrcvbufsz",
+ "**sock|poll|setrcvbufsz %d %d %s",
+ bufsz, errno, MPIR_Strerror(errno));
+ }
+ bufsz_len = sizeof(bufsz);
+
+ if (firm) {
+ rc = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsz, &bufsz_len);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == 0) {
+ if (bufsz < sockBufSize * 0.9) {
+ MPL_msg_printf("WARNING: send socket buffer size differs from requested size (requested=%d, actual=%d)\n",
+ sockBufSize, bufsz);
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ bufsz_len = sizeof(bufsz);
+ rc = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsz, &bufsz_len);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == 0) {
+ if (bufsz < sockBufSize * 0.9) {
+ MPL_msg_printf("WARNING: receive socket buffer size differs from requested size (requested=%d, actual=%d)\n",
+ sockBufSize, bufsz);
+ }
+ }
+ /* --END ERROR HANDLING-- */
+ }
+ }
+ fn_fail:
+ return mpi_errno;
+}
+
+/* This routine provides a string version of the address. */
+int MPIDI_CH3I_Sock_AddrToStr( MPIDI_CH3I_Sock_ifaddr_t *ifaddr, char *str, int maxlen )
+{
+ int i;
+ unsigned char *p = ifaddr->ifaddr;
+ for (i=0; i<ifaddr->len && maxlen > 4; i++) {
+ snprintf( str, maxlen, "%.3d.", *p++ );
+ str += 4;
+ maxlen -= 4;
+ }
+ /* Change the last period to a null; but be careful in case len was zero */
+ if (i > 0) *--str = 0;
+ else *str = 0;
+ return 0;
+}
+
+/*********** end of socki_util.i *********/
+
+/*********** sock_init.i *****************/
+
+#if defined (MPL_USE_DBG_LOGGING)
+MPL_dbg_class MPIDI_CH3I_DBG_SOCK_CONNECT;
+#endif /* MPL_USE_DBG_LOGGING */
+
+/* FIXME: The usual missing documentation (what are these routines for?
+ preconditions? who calls? post conditions? */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_init(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_INIT);
+
+#if defined (MPL_USE_DBG_LOGGING)
+ MPIDI_CH3I_DBG_SOCK_CONNECT = MPL_dbg_class_alloc("SOCK_CONNECT", "sock_connect");
+#endif
+
+ MPIDI_CH3I_Socki_initialized++;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_INIT);
+ return MPI_SUCCESS;
+}
+
+/* FIXME: Who calls? When? Should this be a finalize handler instead? */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_finalize
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_finalize(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_FINALIZE);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_FINALIZE);
+
+ MPIDI_CH3I_Socki_initialized--;
+
+ if (MPIDI_CH3I_Socki_initialized == 0)
+ {
+ MPIDI_CH3I_Socki_free_eventq_mem();
+ }
+
+#ifdef USE_SOCK_VERIFY
+ fn_exit:
+#endif
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_FINALIZE);
+ return mpi_errno;
+}
+
+/*********** end of sock_init.i *****************/
+
+/*********** sock_set.i *****************/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_create_set
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_create_set(struct MPIDI_CH3I_Sock_set ** sock_setp)
+{
+ struct MPIDI_CH3I_Sock_set * sock_set = NULL;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_CREATE_SET);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_CREATE_SET);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+
+ /*
+ * Allocate and initialized a new sock set structure
+ */
+ sock_set = MPL_malloc(sizeof(struct MPIDI_CH3I_Sock_set));
+ /* --BEGIN ERROR HANDLING-- */
+ if (sock_set == NULL)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|setalloc", 0);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ sock_set->id = MPIDI_CH3I_Socki_set_next_id++;
+ sock_set->poll_array_sz = 0;
+ sock_set->poll_array_elems = 0;
+ sock_set->starting_elem = 0;
+ sock_set->pollfds = NULL;
+ sock_set->pollinfos = NULL;
+ sock_set->eventq_head = NULL;
+ sock_set->eventq_tail = NULL;
+ /* FIXME: Move the thread-specific operations into thread-specific
+ routines (to allow for alternative thread sync models and
+ for runtime control of thread level) */
+# ifdef MPICH_IS_THREADED
+ {
+ sock_set->pollfds_active = NULL;
+ sock_set->pollfds_updated = FALSE;
+ sock_set->wakeup_posted = FALSE;
+ sock_set->intr_fds[0] = -1;
+ sock_set->intr_fds[1] = -1;
+ sock_set->intr_sock = NULL;
+ }
+# endif
+
+# ifdef MPICH_IS_THREADED
+ MPIR_THREAD_CHECK_BEGIN;
+ {
+ struct MPIDI_CH3I_Sock * sock = NULL;
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ long flags;
+ int rc;
+
+ /*
+ * Acquire a pipe (the interrupter) to wake up a blocking poll should
+ * it become necessary.
+ *
+ * Make the read descriptor nonblocking. The write descriptor is left
+ * as a blocking descriptor. The write has to
+ * succeed or the system will lock up. Should the blocking descriptor
+ * prove to be a problem, then (1) copy the above
+ * code, applying it to the write descriptor, and (2) update
+ * MPIDI_CH3I_Socki_wakeup() so that it loops while write returns 0,
+ * performing a thread yield between iterations.
+ */
+ rc = pipe(sock_set->intr_fds);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc != 0)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|pipe", "**sock|poll|pipe %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ flags = fcntl(sock_set->intr_fds[0], F_GETFL, 0);
+ /* --BEGIN ERROR HANDLING-- */
+ if (flags == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|pipenonblock", "**sock|poll|pipenonblock %d %s",
+ errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ rc = fcntl(sock_set->intr_fds[0], F_SETFL, flags | O_NONBLOCK);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|pipenonblock", "**sock|poll|pipenonblock %d %s",
+ errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Allocate and initialize a sock structure for the interrupter pipe
+ */
+ mpi_errno = MPIDI_CH3I_Socki_sock_alloc(sock_set, &sock);
+ /* --BEGIN ERROR HANDLING-- */
+ if (mpi_errno != MPI_SUCCESS)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|sockalloc", NULL);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ sock_set->intr_sock = sock;
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ pollfd->fd = sock_set->intr_fds[0];
+ pollinfo->fd = sock_set->intr_fds[0];
+ pollinfo->user_ptr = NULL;
+ pollinfo->type = MPIDI_CH3I_SOCKI_TYPE_INTERRUPTER;
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO;
+ pollinfo->os_errno = 0;
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
+ }
+ MPIR_THREAD_CHECK_END;
+# endif
+
+ *sock_setp = sock_set;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_CREATE_SET);
+ return mpi_errno;
+
+ /* --BEGIN ERROR HANDLING-- */
+ fn_fail:
+ if (sock_set != NULL)
+ {
+# ifdef MPICH_IS_THREADED
+ MPIR_THREAD_CHECK_BEGIN;
+ {
+ if (sock_set->intr_fds[0] != -1)
+ {
+ close(sock_set->intr_fds[0]);
+ }
+
+ if (sock_set->intr_fds[1] != -1)
+ {
+ close(sock_set->intr_fds[1]);
+ }
+ }
+ MPIR_THREAD_CHECK_END;
+# endif
+
+ MPL_free(sock_set);
+ }
+
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_close_open_sockets
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_close_open_sockets(struct MPIDI_CH3I_Sock_set * sock_set, void** user_ptr ){
+
+ int i;
+ int mpi_errno = MPI_SUCCESS;
+ struct pollinfo * pollinfos = NULL;
+ pollinfos = sock_set->pollinfos;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_CLOSE_OPEN_SOCKETS);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_CLOSE_OPEN_SOCKETS);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ /* wakeup waiting socket if mullti-threades */
+ *user_ptr = NULL;
+ for (i = 0; i < sock_set->poll_array_elems; i++) {
+ if(pollinfos[i].sock != NULL && pollinfos[i].type != MPIDI_CH3I_SOCKI_TYPE_INTERRUPTER){
+ close(pollinfos[i].fd);
+ MPIDI_CH3I_Socki_sock_free(pollinfos[i].sock);
+ *user_ptr = pollinfos[i].user_ptr;
+ break;
+ }
+ }
+#ifdef USE_SOCK_VERIFY
+ fn_exit:
+#endif
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_CLOSE_OPEN_SOCKETS);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_destroy_set
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_destroy_set(struct MPIDI_CH3I_Sock_set * sock_set)
+{
+ int elem;
+ struct MPIDI_CH3I_Sock_event event;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_DESTROY_SET);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_DESTROY_SET);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+
+ /*
+ * FIXME: check for open socks and return an error if any are found
+ */
+
+ /*
+ * FIXME: verify no other thread is blocked in poll(). wake it up and
+ * get it to exit.
+ */
+
+ /*
+ * Close pipe for interrupting a blocking poll()
+ */
+# ifdef MPICH_IS_THREADED
+ MPIR_THREAD_CHECK_BEGIN;
+ {
+ close(sock_set->intr_fds[1]);
+ close(sock_set->intr_fds[0]);
+ MPIDI_CH3I_Socki_sock_free(sock_set->intr_sock);
+
+ sock_set->pollfds_updated = FALSE;
+ sock_set->pollfds_active = NULL;
+ sock_set->wakeup_posted = FALSE;
+ sock_set->intr_fds[0] = -1;
+ sock_set->intr_fds[1] = -1;
+ sock_set->intr_sock = NULL;
+ }
+ MPIR_THREAD_CHECK_END;
+# endif
+
+ /*
+ * Clear the event queue to eliminate memory leaks
+ */
+ while (MPIDI_CH3I_Socki_event_dequeue(sock_set, &elem, &event) == MPI_SUCCESS);
+
+ /*
+ * Free structures used by the sock set
+ */
+ MPL_free(sock_set->pollinfos);
+ MPL_free(sock_set->pollfds);
+
+ /*
+ * Reset the sock set fields
+ */
+ sock_set->id = ~0;
+ sock_set->poll_array_sz = 0;
+ sock_set->poll_array_elems = 0;
+ sock_set->starting_elem = 0;
+ sock_set->pollfds = NULL;
+ sock_set->pollinfos = NULL;
+ sock_set->eventq_head = NULL;
+ sock_set->eventq_tail = NULL;
+
+ /*
+ * Free the structure
+ */
+ MPL_free(sock_set);
+
+#ifdef USE_SOCK_VERIFY
+ fn_exit:
+#endif
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_DESTROY_SET);
+ return mpi_errno;
+}
+
+/*********** end of sock_set.i *****************/
+
+/*********** sock_post.i *****************/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_post_connect_ifaddr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/*
+ This routine connects to a particular address (in byte form; for ipv4,
+ the address is four bytes, typically the value of h_addr_list[0] in
+ struct hostent. By avoiding a character name for an interface (we *never*
+ connect to a host; we are *always* connecting to a particular interface
+ on a host), we avoid problems with DNS services, including lack of properly
+ configured services and scalability problems. As this routine uses
+ a four-byte field, it is currently restricted to ipv4. This routine should
+ evolve to support ipv4 and ipv6 addresses.
+
+ This routine was constructed from MPIDI_CH3I_Sock_post_connect by removing the
+ poorly placed use of gethostname within the middle of that routine and
+ simply using the ifaddr field that is passed to this routine.
+ MPIDI_CH3I_Sock_post_connect simply uses the hostname field to get the canonical
+ IP address. The original routine and its API was retained to allow backwards
+ compatibility until it is determined that we can always use explicit addrs
+ needed in setting up the socket instead of character strings.
+ */
+int MPIDI_CH3I_Sock_post_connect_ifaddr( struct MPIDI_CH3I_Sock_set * sock_set,
+ void * user_ptr,
+ MPIDI_CH3I_Sock_ifaddr_t *ifaddr, int port,
+ struct MPIDI_CH3I_Sock ** sockp)
+{
+ struct MPIDI_CH3I_Sock * sock = NULL;
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int fd = -1;
+ struct sockaddr_in addr;
+ long flags;
+ int nodelay;
+ int rc;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_POST_CONNECT_IFADDR);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_POST_CONNECT_IFADDR);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+
+ /*
+ * Create a non-blocking socket with Nagle's algorithm disabled
+ */
+ fd = socket(PF_INET, SOCK_STREAM, 0);
+ if (fd == -1) {
+ /* FIXME: It would be better to include a special formatting
+ clue for system error messages (e.g., %dSE; in the recommended
+ revision for error reporting (that is, value (errno) is an int,
+ but should be interpreted as an System Error string) */
+ MPIR_ERR_SETANDJUMP2(mpi_errno,MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|socket",
+ "**sock|poll|socket %d %s", errno, MPIR_Strerror(errno));
+ }
+
+ flags = fcntl(fd, F_GETFL, 0);
+ if (flags == -1) {
+ MPIR_ERR_SETANDJUMP2(mpi_errno,MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock",
+ "**sock|poll|nonblock %d %s", errno, MPIR_Strerror(errno));
+ }
+ rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ if (rc == -1) {
+ MPIR_ERR_SETANDJUMP2( mpi_errno, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock",
+ "**sock|poll|nonblock %d %s",
+ errno, MPIR_Strerror(errno));
+ }
+
+ nodelay = 1;
+ rc = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
+ if (rc != 0) {
+ MPIR_ERR_SETANDJUMP2(mpi_errno,MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nodelay",
+ "**sock|poll|nodelay %d %s",
+ errno, MPIR_Strerror(errno));
+ }
+
+ /*
+ * Allocate and initialize sock and poll structures
+ *
+ * NOTE: pollfd->fd is initialized to -1. It is only set to the true fd
+ * value when an operation is posted on the sock. This
+ * (hopefully) eliminates a little overhead in the OS and avoids
+ * repetitive POLLHUP events when the connection is closed by
+ * the remote process.
+ */
+ mpi_errno = MPIDI_CH3I_Socki_sock_alloc(sock_set, &sock);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_SETANDJUMP(mpi_errno,MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|sockalloc");
+ }
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ pollinfo->fd = fd;
+ pollinfo->user_ptr = user_ptr;
+ pollinfo->type = MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION;
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW;
+ pollinfo->os_errno = 0;
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ memcpy(&addr.sin_addr.s_addr, ifaddr->ifaddr,
+ sizeof(addr.sin_addr.s_addr));
+ addr.sin_port = htons( (unsigned short)port);
+
+ /*
+ * Set and verify the socket buffer size
+ */
+ mpi_errno = MPIDI_CH3I_Sock_SetSockBufferSize( fd, 1 );
+ if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
+
+ /*
+ * Attempt to establish the connection
+ */
+ MPL_DBG_STMT(MPIDI_CH3I_DBG_SOCK_CONNECT,TYPICAL,{
+ char addrString[64];
+ MPIDI_CH3I_Sock_AddrToStr( ifaddr, addrString, sizeof(addrString) );
+ MPL_DBG_MSG_FMT(MPIDI_CH3I_DBG_SOCK_CONNECT,TYPICAL,(MPL_DBG_FDEST,
+ "Connecting to %s:%d", addrString, port ));
+ })
+
+ do
+ {
+ rc = connect(fd, (struct sockaddr *) &addr, sizeof(addr));
+ }
+ while (rc == -1 && errno == EINTR);
+
+ if (rc == 0)
+ {
+ /* connection succeeded */
+ MPL_DBG_MSG_P(MPIDI_CH3I_DBG_SOCK_CONNECT,TYPICAL,"Setting state to SOCKI_STATE_CONNECTED_RW for sock %p",sock);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW;
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_CONNECT, 0, user_ptr, MPI_SUCCESS, mpi_errno, fn_fail);
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else if (errno == EINPROGRESS)
+ {
+ /* connection pending */
+ MPL_DBG_MSG_P(MPIDI_CH3I_DBG_SOCK_CONNECT,TYPICAL,"Setting state to SOCKI_STATE_CONNECTING for sock %p",sock);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTING;
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);
+ }
+ else
+ {
+ MPL_DBG_MSG_P(MPIDI_CH3I_DBG_SOCK_CONNECT,TYPICAL,"Setting state to SOCKI_STATE_DISCONNECTED (failure in connect) for sock %p",sock);
+ pollinfo->os_errno = errno;
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+
+ if (errno == ECONNREFUSED)
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_CONNECT, 0, user_ptr, MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_FAILED,
+ "**sock|connrefused", "**sock|poll|connrefused %d %d %s",
+ pollinfo->sock_set->id, pollinfo->sock_id, ""), mpi_errno, fn_fail);
+ }
+ else
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_CONNECT, 0, user_ptr, MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_FAILED,
+ "**sock|oserror", "**sock|poll|oserror %d %d %d %s", pollinfo->sock_set->id, pollinfo->sock_id, errno,
+ MPIR_Strerror(errno)), mpi_errno, fn_fail);
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ *sockp = sock;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_POST_CONNECT_IFADDR);
+ return mpi_errno;
+
+ /* --BEGIN ERROR HANDLING-- */
+ fn_fail:
+ if (fd != -1)
+ {
+ close(fd);
+ }
+
+ if (sock != NULL)
+ {
+ MPIDI_CH3I_Socki_sock_free(sock);
+ }
+
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+
+/* FIXME: What does this routine do? Why does it take a host description
+ instead of an interface name or address? */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_post_connect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_post_connect(struct MPIDI_CH3I_Sock_set * sock_set, void * user_ptr,
+ char * host_description, int port,
+ struct MPIDI_CH3I_Sock ** sockp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_Sock_ifaddr_t ifaddr;
+ struct hostent * hostent;
+
+ /*
+ * Convert hostname to IP address
+ *
+ * FIXME: this should handle failures caused by a backed up listener queue
+ * at the remote process. It should also use a
+ * specific interface if one is specified by the user.
+ */
+ /* FIXME: strtok may change the contents of host_description. Shouldn't
+ the host description be a const char [] and not modified by this
+ routine? */
+ strtok(host_description, " ");
+ /* FIXME: For ipv6, we should use getaddrinfo */
+ hostent = gethostbyname(host_description);
+ /* --BEGIN ERROR HANDLING-- */
+ if (hostent == NULL || hostent->h_addrtype != AF_INET) {
+ /* FIXME: Set error */
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ /* These are correct for IPv4 */
+ memcpy( ifaddr.ifaddr, (unsigned char *)hostent->h_addr_list[0], 4 );
+ ifaddr.len = 4;
+ ifaddr.type = AF_INET;
+ mpi_errno = MPIDI_CH3I_Sock_post_connect_ifaddr( sock_set, user_ptr,
+ &ifaddr, port, sockp );
+ fn_exit:
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_post_connect() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_listen
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+#ifndef USHRT_MAX
+#define USHRT_MAX 65535 /* 2^16-1 */
+#endif
+int MPIDI_CH3I_Sock_listen(struct MPIDI_CH3I_Sock_set * sock_set, void * user_ptr,
+ int * port, struct MPIDI_CH3I_Sock ** sockp)
+{
+ struct MPIDI_CH3I_Sock * sock;
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int fd = -1;
+ long flags;
+ int optval;
+ struct sockaddr_in addr;
+ socklen_t addr_len;
+ int rc;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_LISTEN);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_LISTEN);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ /* --BEGIN ERROR HANDLING-- */
+ if (*port < 0 || *port > USHRT_MAX)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_PORT,
+ "**sock|badport", "**sock|badport %d", *port);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Create a non-blocking socket for the listener
+ */
+ fd = socket(PF_INET, SOCK_STREAM, 0);
+ /* --BEGIN ERROR HANDLING-- */
+ if (fd == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|socket", "**sock|poll|socket %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* set SO_REUSEADDR to a prevent a fixed service port from being bound to during subsequent invocations */
+ if (*port != 0)
+ {
+ optval = 1;
+ rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int));
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|reuseaddr", "**sock|poll|reuseaddr %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+
+ /* make the socket non-blocking so that accept() will return immediately if no new connection is available */
+ flags = fcntl(fd, F_GETFL, 0);
+ /* --BEGIN ERROR HANDLING-- */
+ if (flags == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+ rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Bind the socket to all interfaces and the specified port. The port specified by the calling routine may be 0, indicating
+ * that the operating system can select an available port in the ephemeral port range.
+ */
+ if (*port == 0) {
+ int portnum;
+ /* see if we actually want to find values within a range */
+
+ MPIR_ERR_CHKANDJUMP(MPIR_CVAR_CH3_PORT_RANGE.low < 0 || MPIR_CVAR_CH3_PORT_RANGE.low > MPIR_CVAR_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
+
+ /* default MPICH_PORT_RANGE is {0,0} so bind will use any available port */
+ for (portnum = MPIR_CVAR_CH3_PORT_RANGE.low; portnum <= MPIR_CVAR_CH3_PORT_RANGE.high; ++portnum) {
+ memset( (void *)&addr, 0, sizeof(addr) );
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ addr.sin_port = htons( (unsigned short)portnum );
+
+ rc = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
+ if (rc < 0) {
+ if (errno != EADDRINUSE && errno != EADDRNOTAVAIL) {
+ close(fd);
+ break;
+ }
+ }
+ else
+ break;
+ }
+ }
+ else {
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ addr.sin_port = htons((unsigned short) *port);
+ rc = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|bind", "**sock|poll|bind %d %d %s", *port, errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Set and verify the socket buffer size
+ */
+ mpi_errno = MPIDI_CH3I_Sock_SetSockBufferSize( fd, 1 );
+ if (mpi_errno) { MPIR_ERR_POP( mpi_errno ); }
+
+ /*
+ * Start listening for incoming connections...
+ */
+ rc = listen(fd, SOMAXCONN);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|listen", "**sock|poll|listen %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Get listener port. Techincally we don't need to do this if a port was
+ * specified by the calling routine; but it adds an extra error check.
+ */
+ addr_len = sizeof(addr);
+ rc = getsockname(fd, (struct sockaddr *) &addr, &addr_len);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|getport", "**sock|poll|getport %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+ *port = (unsigned int) ntohs(addr.sin_port);
+
+ /*
+ * Allocate and initialize sock and poll structures. If another thread is
+ * blocking in poll(), that thread must be woke up
+ * long enough to pick up the addition of the listener socket.
+ */
+ mpi_errno = MPIDI_CH3I_Socki_sock_alloc(sock_set, &sock);
+ /* --BEGIN ERROR HANDLING-- */
+ if (mpi_errno != MPI_SUCCESS)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|sockalloc", NULL);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ pollinfo->fd = fd;
+ pollinfo->user_ptr = user_ptr;
+ pollinfo->type = MPIDI_CH3I_SOCKI_TYPE_LISTENER;
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO;
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
+
+ *sockp = sock;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_LISTEN);
+ return mpi_errno;
+
+ /* --BEGIN ERROR HANDLING-- */
+ fn_fail:
+ if (fd != -1)
+ {
+ close(fd);
+ }
+
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+/* end MPIDI_CH3I_Sock_listen() */
+
+
+/* FIXME: What does this function do? */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_post_read
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_post_read(struct MPIDI_CH3I_Sock * sock, void * buf, size_t minlen, size_t maxlen,
+ MPIDI_CH3I_Sock_progress_update_func_t fn)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_POST_READ);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_POST_READ);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (minlen < 1 || minlen > maxlen)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_LEN,
+ "**sock|badlen", "**sock|badlen %d %d %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id, minlen, maxlen);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ pollinfo->read.buf.ptr = buf;
+ pollinfo->read.buf.min = minlen;
+ pollinfo->read.buf.max = maxlen;
+ pollinfo->read_iov_flag = FALSE;
+ pollinfo->read_nb = 0;
+ pollinfo->read_progress_update_fn = fn;
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_POST_READ);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_post_read() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_post_readv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_post_readv(struct MPIDI_CH3I_Sock * sock, MPL_IOV * iov, int iov_n, MPIDI_CH3I_Sock_progress_update_func_t fn)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_POST_READV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_POST_READV);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (iov_n < 1 || iov_n > MPL_IOV_LIMIT)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_LEN,
+ "**sock|badiovn", "**sock|badiovn %d %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id, iov_n);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ pollinfo->read.iov.ptr = iov;
+ pollinfo->read.iov.count = iov_n;
+ pollinfo->read.iov.offset = 0;
+ pollinfo->read_iov_flag = TRUE;
+ pollinfo->read_nb = 0;
+ pollinfo->read_progress_update_fn = fn;
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_POST_READV);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_post_readv() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_post_write
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_post_write(struct MPIDI_CH3I_Sock * sock, void * buf, size_t minlen, size_t maxlen,
+ MPIDI_CH3I_Sock_progress_update_func_t fn)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITE);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITE);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (minlen < 1 || minlen > maxlen)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_LEN,
+ "**sock|badlen", "**sock|badlen %d %d %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id, minlen, maxlen);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ pollinfo->write.buf.ptr = buf;
+ pollinfo->write.buf.min = minlen;
+ pollinfo->write.buf.max = maxlen;
+ pollinfo->write_iov_flag = FALSE;
+ pollinfo->write_nb = 0;
+ pollinfo->write_progress_update_fn = fn;
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITE);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_post_write() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_post_writev
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_post_writev(struct MPIDI_CH3I_Sock * sock, MPL_IOV * iov, int iov_n, MPIDI_CH3I_Sock_progress_update_func_t fn)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITEV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITEV);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (iov_n < 1 || iov_n > MPL_IOV_LIMIT)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_LEN,
+ "**sock|badiovn", "**sock|badiovn %d %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id, iov_n);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ pollinfo->write.iov.ptr = iov;
+ pollinfo->write.iov.count = iov_n;
+ pollinfo->write.iov.offset = 0;
+ pollinfo->write_iov_flag = TRUE;
+ pollinfo->write_nb = 0;
+ pollinfo->write_progress_update_fn = fn;
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITEV);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_post_writev() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_post_close
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_post_close(struct MPIDI_CH3I_Sock * sock)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_POST_CLOSE);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_POST_CLOSE);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CLOSING)
+ {
+ mpi_errno = MPIR_Err_create_code(
+ mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK, "**sock|closing_already",
+ "**sock|closing_already %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ if (pollinfo->type == MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION)
+ {
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLIN | POLLOUT))
+ {
+ /* --BEGIN ERROR HANDLING-- */
+ int event_mpi_errno;
+
+ event_mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED, "**sock|close_cancel",
+ "**sock|close_cancel %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
+
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLIN))
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
+ MPI_SUCCESS, mpi_errno, fn_exit);
+ }
+
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
+ MPI_SUCCESS, mpi_errno, fn_exit);
+ }
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN | POLLOUT);
+ /* --END ERROR HANDLING-- */
+ }
+ }
+ else /* if (pollinfo->type == MPIDI_CH3I_SOCKI_TYPE_LISTENER) */
+ {
+ /*
+ * The event queue may contain an accept event which means that
+ * MPIDI_CH3I_Sock_accept() may be legally called after
+ * MPIDI_CH3I_Sock_post_close(). However, MPIDI_CH3I_Sock_accept() must be
+ * called before the close event is return by
+ * MPIDI_CH3I_Sock_wait().
+ */
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN);
+ }
+
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_CLOSE, 0, pollinfo->user_ptr, MPI_SUCCESS, mpi_errno, fn_exit);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CLOSING;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_POST_CLOSE);
+ return mpi_errno;
+}
+
+/*********** end of sock_post.i *****************/
+
+/*********** sock_immed.i *****************/
+
+/* FIXME: Why is this the _immed file (what does immed stand for?) */
+
+/* FIXME: What do any of these routines do? What are the arguments?
+ Special conditions (see the FIXME on len = SSIZE_MAX)? preconditions?
+ postconditions? */
+
+/* FIXME: What does this function do? What are its arguments?
+ It appears to execute a nonblocking accept call */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_accept
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_accept(struct MPIDI_CH3I_Sock * listener,
+ struct MPIDI_CH3I_Sock_set * sock_set, void * user_ptr,
+ struct MPIDI_CH3I_Sock ** sockp)
+{
+ struct MPIDI_CH3I_Sock * sock;
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int fd = -1;
+ struct sockaddr_in addr;
+ socklen_t addr_len;
+ long flags;
+ int nodelay;
+ int rc;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(listener, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK_SET(sock_set, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(listener);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(listener);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (pollinfo->type != MPIDI_CH3I_SOCKI_TYPE_LISTENER)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK,
+ "**sock|listener_bad_sock", "**sock|listener_bad_sock %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id);
+ goto fn_exit;
+ }
+
+ if (pollinfo->state != MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO &&
+ pollinfo->state != MPIDI_CH3I_SOCKI_STATE_CLOSING)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK,
+ "**sock|listener_bad_state", "**sock|listener_bad_state %d %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id, pollinfo->state);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Get a socket for the new connection from the operating system.
+ * Make the socket nonblocking, and disable Nagle's
+ * alogorithm (to minimize latency of small messages).
+ */
+ addr_len = sizeof(struct sockaddr_in);
+ /* FIXME: Either use the syscall macro or correctly wrap this in a
+ test for EINTR */
+ fd = accept(pollinfo->fd, (struct sockaddr *) &addr, &addr_len);
+
+ if (pollinfo->state != MPIDI_CH3I_SOCKI_STATE_CLOSING)
+ {
+ /*
+ * Unless the listener sock is being closed, add it back into the
+ * poll list so that new connections will be detected.
+ */
+ MPIDI_CH3I_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
+ }
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (fd == -1)
+ {
+ if (errno == EAGAIN || errno == EWOULDBLOCK)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NO_NEW_SOCK,
+ "**sock|nosock", NULL);
+ }
+ else if (errno == ENOBUFS || errno == ENOMEM)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|osnomem", NULL);
+ }
+ else if (errno == EBADF || errno == ENOTSOCK || errno == EOPNOTSUPP)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK,
+ "**sock|badhandle", "**sock|poll|badhandle %d %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id,
+ pollinfo->fd);
+ }
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NO_NEW_SOCK,
+ "**sock|poll|accept", "**sock|poll|accept %d %s",
+ errno, MPIR_Strerror(errno));
+ }
+
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ flags = fcntl(fd, F_GETFL, 0);
+ /* FIXME: There should be a simpler macro for reporting errno messages */
+ /* --BEGIN ERROR HANDLING-- */
+ if (flags == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock", "**sock|poll|nonblock %d %s",
+ errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+ rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock", "**sock|poll|nonblock %d %s",
+ errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ nodelay = 1;
+ rc = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc != 0)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nodelay", "**sock|poll|nodelay %d %s",
+ errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /*
+ * Verify that the socket buffer size is correct
+ */
+ /* FIXME: Who sets the socket buffer size? Why isn't the test
+ made at that time? */
+#if 1
+ mpi_errno = MPIDI_CH3I_Sock_SetSockBufferSize( fd, 1 );
+ if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
+#else
+ if (MPIDI_CH3I_Socki_socket_bufsz > 0)
+ {
+ int bufsz;
+ socklen_t bufsz_len;
+
+ bufsz_len = sizeof(bufsz);
+ rc = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsz, &bufsz_len);
+ /* FIXME: There's normally no need to check that the socket buffer
+ size was set to the requested size. This should only be part of
+ some more verbose diagnostic output, not a general action */
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == 0)
+ {
+ if (bufsz < MPIDI_CH3I_Socki_socket_bufsz * 0.9 ||
+ bufsz < MPIDI_CH3I_Socki_socket_bufsz * 1.0)
+ {
+ MPL_msg_printf("WARNING: send socket buffer size differs from requested size (requested=%d, actual=%d)\n",
+ MPIDI_CH3I_Socki_socket_bufsz, bufsz);
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ bufsz_len = sizeof(bufsz);
+ rc = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsz, &bufsz_len);
+ /* FIXME: There's normally no need to check that the socket buffer
+ size was set to the requested size. This should only be part of
+ some more verbose diagnostic output, not a general action */
+ /* FIXME: Cut and paste code is a disaster waiting to happen.
+ Particularly in any non-performance critical section,
+ create a separate routine instead of using cut and paste. */
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == 0)
+ {
+ if (bufsz < MPIDI_CH3I_Socki_socket_bufsz * 0.9 ||
+ bufsz < MPIDI_CH3I_Socki_socket_bufsz * 1.0)
+ {
+ MPL_msg_printf("WARNING: receive socket buffer size differs from requested size (requested=%d, actual=%d)\n",
+ MPIDI_CH3I_Socki_socket_bufsz, bufsz);
+ }
+ }
+ /* --END ERROR HANDLING-- */
+ }
+#endif
+ /*
+ * Allocate and initialize sock and poll structures.
+ *
+ * NOTE: pollfd->fd is initialized to -1. It is only set to the true fd
+ * value when an operation is posted on the sock. This
+ * (hopefully) eliminates a little overhead in the OS and avoids
+ * repetitive POLLHUP events when the connection is closed by
+ * the remote process.
+ */
+ mpi_errno = MPIDI_CH3I_Socki_sock_alloc(sock_set, &sock);
+ /* --BEGIN ERROR HANDLING-- */
+ if (mpi_errno != MPI_SUCCESS)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|sockalloc", NULL);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ pollinfo->fd = fd;
+ pollinfo->user_ptr = user_ptr;
+ pollinfo->type = MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION;
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW;
+ pollinfo->os_errno = 0;
+
+ *sockp = sock;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT);
+ return mpi_errno;
+
+ /* --BEGIN ERROR HANDLING-- */
+ fn_fail:
+ if (fd != -1)
+ {
+ close(fd);
+ }
+
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+/* end MPIDI_CH3I_Sock_accept() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_read
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_read(MPIDI_CH3I_Sock_t sock, void * buf, size_t len,
+ size_t * num_read)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ size_t nb;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_READ);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_READ);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_READ);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /* FIXME: multiple passes should be made if
+ len > SSIZE_MAX and nb == SSIZE_MAX */
+ /* FIXME: This is a scary test/assignment. It needs an explanation
+ (presumably that this routine will be called again if len is
+ shortened. However, in that case, the description of the routine
+ (which is also missing!!!!) needs to be very clear about this
+ requirement. */
+ if (len > SSIZE_MAX)
+ {
+ len = SSIZE_MAX;
+ }
+
+ do
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_READ);
+ nb = read(pollinfo->fd, buf, len);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_READ);
+ }
+ while (nb == -1 && errno == EINTR);
+
+ if (nb > 0)
+ {
+ *num_read = (size_t) nb;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else if (nb == 0)
+ {
+ *num_read = 0;
+
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
+ MPIDI_CH3I_SOCK_ERR_CONN_CLOSED,
+ "**sock|connclosed", "**sock|connclosed %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id);
+
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
+ {
+ /* A write is posted on this connection. Enqueue an event for
+ the write indicating the connection is closed. */
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE,
+ pollinfo->write_nb, pollinfo->user_ptr,
+ mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ }
+
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+ }
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
+ {
+ *num_read = 0;
+ }
+ else
+ {
+ int disconnected;
+
+ *num_read = 0;
+
+ mpi_errno = MPIDI_CH3I_Socki_os_to_mpi_errno(pollinfo, errno,
+ FCNAME, __LINE__, &disconnected);
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ /*
+ * A serious error occurred. There is no guarantee that the
+ * data structures are still intact. Therefore, we avoid
+ * modifying them.
+ */
+ goto fn_exit;
+ }
+
+ if (disconnected)
+ {
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
+ {
+ /* A write is posted on this connection. Enqueue an event
+ for the write indicating the connection is closed. */
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE,
+ pollinfo->write_nb, pollinfo->user_ptr,
+ mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ }
+
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_READ);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_read() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_readv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_readv(MPIDI_CH3I_Sock_t sock, MPL_IOV * iov, int iov_n,
+ size_t * num_read)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ ssize_t nb;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_READV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_READV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_READV);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /*
+ * FIXME: The IEEE 1003.1 standard says that if the sum of the iov_len
+ * fields exceeds SSIZE_MAX, an errno of EINVAL will be
+ * returned. How do we handle this? Can we place an equivalent
+ * limitation in the Sock interface?
+ */
+ do
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_READV);
+ nb = MPL_large_readv(pollinfo->fd, iov, iov_n);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_READV);
+ }
+ while (nb == -1 && errno == EINTR);
+
+ if (nb > 0)
+ {
+ *num_read = (size_t) nb;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else if (nb == 0)
+ {
+ *num_read = 0;
+
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
+ MPIDI_CH3I_SOCK_ERR_CONN_CLOSED,
+ "**sock|connclosed", "**sock|connclosed %d %d",
+ pollinfo->sock_set->id, pollinfo->sock_id);
+
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
+ {
+
+ /* A write is posted on this connection. Enqueue an event
+ for the write indicating the connection is closed. */
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE,
+ pollinfo->write_nb, pollinfo->user_ptr,
+ mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ }
+
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+ }
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
+ {
+ *num_read = 0;
+ }
+ else
+ {
+ int disconnected;
+
+ *num_read = 0;
+
+ mpi_errno = MPIDI_CH3I_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME,
+ __LINE__, &disconnected);
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ /*
+ * A serious error occurred. There is no guarantee that the
+ * data structures are still intact. Therefore, we avoid
+ * modifying them.
+ */
+ goto fn_exit;
+ }
+
+ if (disconnected)
+ {
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
+ {
+ /* A write is posted on this connection. Enqueue an event
+ for the write indicating the connection is closed. */
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE,
+ pollinfo->write_nb, pollinfo->user_ptr,
+ mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ }
+
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_READV);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_readv() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_write
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_write(MPIDI_CH3I_Sock_t sock, void * buf, size_t len,
+ size_t * num_written)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ ssize_t nb;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_WRITE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_WRITE);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_WRITE);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /* FIXME: multiple passes should be made if len > SSIZE_MAX and nb == SSIZE_MAX */
+ if (len > SSIZE_MAX)
+ {
+ len = SSIZE_MAX;
+ }
+
+ do
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_WRITE);
+ nb = write(pollinfo->fd, buf, len);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_WRITE);
+ }
+ while (nb == -1 && errno == EINTR);
+
+ if (nb >= 0)
+ {
+ *num_written = nb;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
+ {
+ *num_written = 0;
+ }
+ else
+ {
+ int disconnected;
+
+ *num_written = 0;
+
+ mpi_errno = MPIDI_CH3I_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME,
+ __LINE__, &disconnected);
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ /*
+ * A serious error occurred. There is no guarantee that the data
+ * structures are still intact. Therefore, we avoid
+ * modifying them.
+ */
+ goto fn_exit;
+ }
+
+ if (disconnected)
+ {
+ /*
+ * The connection is dead but data may still be in the socket
+ * buffer; thus, we change the state and let
+ * MPIDI_CH3I_Sock_wait() clean things up.
+ */
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO;
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_WRITE);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_write() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_writev
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_writev(MPIDI_CH3I_Sock_t sock, MPL_IOV * iov, int iov_n, size_t * num_written)
+{
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ ssize_t nb;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_WRITEV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_WRITEV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_WRITEV);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ MPIDI_CH3I_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
+
+ /*
+ * FIXME: The IEEE 1003.1 standard says that if the sum of the iov_len
+ * fields exceeds SSIZE_MAX, an errno of EINVAL will be
+ * returned. How do we handle this? Can we place an equivalent
+ * limitation in the Sock interface?
+ */
+ do
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_WRITEV);
+ nb = MPL_large_writev(pollinfo->fd, iov, iov_n);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_WRITEV);
+ }
+ while (nb == -1 && errno == EINTR);
+
+ if (nb >= 0)
+ {
+ *num_written = (size_t) nb;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
+ {
+ *num_written = 0;
+ }
+ else
+ {
+ int disconnected;
+
+ *num_written = 0;
+
+ mpi_errno = MPIDI_CH3I_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME,
+ __LINE__, &disconnected);
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ /*
+ * A serious error occurred. There is no guarantee that the
+ * data structures are still intact. Therefore, we avoid
+ * modifying them.
+ */
+ goto fn_exit;
+ }
+
+ if (disconnected)
+ {
+ /*
+ * The connection is dead but data may still be in the socket
+ * buffer; thus, we change the state and let
+ * MPIDI_CH3I_Sock_wait() clean things up.
+ */
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO;
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_WRITEV);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_writev() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_wakeup
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_wakeup(struct MPIDI_CH3I_Sock_set * sock_set)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_WAKEUP);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_WAKEUP);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_VALIDATE_SOCK_SET(sock_set, mpi_errno, fn_exit);
+
+ /* FIXME: We need (1) a standardized test for including multithreaded
+ code and (2) include support for user requests for a lower-level
+ of thread safety. Finally, things like this should probably
+ be implemented as an abstraction (e.g., wakeup_progress_threads?)
+ rather than this specific code. */
+#ifdef MPICH_IS_THREADED
+ MPIR_THREAD_CHECK_BEGIN;
+ {
+ struct pollinfo * pollinfo;
+
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock_set->intr_sock);
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WAKEUP, 0, NULL,
+ mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_Socki_wakeup(sock_set);
+ }
+ MPIR_THREAD_CHECK_END;
+# endif
+
+#ifdef MPICH_IS_THREADED
+ fn_exit:
+#endif
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_WAKEUP);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Sock_wakeup() */
+
+/*********** end of sock_immed.i *****************/
+
+/*********** sock_misc.i *****************/
+
+/* This routine is called in mpid/ch3/util/sock/ch3u_connect_sock.c */
+/* FIXME: This routine is misnamed; it is really get_interface_name (in the
+ case where there are several networks available to the calling process,
+ this picks one but even in the current code can pick a different
+ interface if a particular environment variable is set) . */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_get_host_description
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_get_host_description(int myRank,
+ char * host_description, int len)
+{
+ char * env_hostname;
+ int rc;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_GET_HOST_DESCRIPTION);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_GET_HOST_DESCRIPTION);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+ /* --BEGIN ERROR HANDLING-- */
+ if (len < 0)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_LEN,
+ "**sock|badhdmax", NULL);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* FIXME: Is this documented? How does it work if the process manager
+ cannot give each process a different value for an environment
+ name? What if a different interface is needed? */
+ /* Use hostname supplied in environment variable, if it exists */
+ env_hostname = getenv("MPICH_INTERFACE_HOSTNAME");
+
+ if (!env_hostname) {
+ /* See if there is a per-process name for the interfaces (e.g.,
+ the process manager only delievers the same values for the
+ environment to each process */
+ char namebuf[1024];
+ MPL_snprintf( namebuf, sizeof(namebuf),
+ "MPICH_INTERFACE_HOSTNAME_R_%d", myRank );
+ env_hostname = getenv( namebuf );
+ }
+
+ if (env_hostname != NULL)
+ {
+ rc = MPL_strncpy(host_description, env_hostname, (size_t) len);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc != 0)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_HOST,
+ "**sock|badhdlen", NULL);
+ }
+ /* --END ERROR HANDLING-- */
+ }
+ else {
+ rc = gethostname(host_description, len);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ if (errno == EINVAL)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_HOST,
+ "**sock|badhdlen", NULL);
+ }
+ else if (errno == EFAULT)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_HOST,
+ "**sock|badhdbuf", NULL);
+ }
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|oserror", "**sock|poll|oserror %d %s", errno, MPIR_Strerror(errno));
+ }
+ }
+ /* --END ERROR HANDLING-- */
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_GET_HOST_DESCRIPTION);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_native_to_sock
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_native_to_sock(struct MPIDI_CH3I_Sock_set * sock_set, MPIDI_CH3I_SOCK_NATIVE_FD fd, void *user_ptr,
+ struct MPIDI_CH3I_Sock ** sockp)
+{
+ struct MPIDI_CH3I_Sock * sock = NULL;
+ struct pollfd * pollfd;
+ struct pollinfo * pollinfo;
+ int rc;
+ long flags;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SOCK_NATIVE_TO_SOCK);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SOCK_NATIVE_TO_SOCK);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+
+ /* allocate sock and poll structures */
+ mpi_errno = MPIDI_CH3I_Socki_sock_alloc(sock_set, &sock);
+ /* --BEGIN ERROR HANDLING-- */
+ if (mpi_errno != MPI_SUCCESS)
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|sockalloc", NULL);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ pollfd = MPIDI_CH3I_Socki_sock_get_pollfd(sock);
+ pollinfo = MPIDI_CH3I_Socki_sock_get_pollinfo(sock);
+
+ /* set file descriptor to non-blocking */
+ flags = fcntl(fd, F_GETFL, 0);
+ /* --BEGIN ERROR HANDLING-- */
+ if (flags == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+ rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ /* --BEGIN ERROR HANDLING-- */
+ if (rc == -1)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIR_Strerror(errno));
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* initialize sock and poll structures */
+ pollfd->fd = -1;
+ pollfd->events = 0;
+ pollfd->revents = 0;
+
+ pollinfo->fd = fd;
+ pollinfo->user_ptr = user_ptr;
+ pollinfo->type = MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION;
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW;
+
+ *sockp = sock;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SOCK_NATIVE_TO_SOCK);
+ return mpi_errno;
+
+ /* --BEGIN ERROR HANDLING-- */
+ fn_fail:
+ if (sock != NULL)
+ {
+ MPIDI_CH3I_Socki_sock_free(sock);
+ }
+
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_set_user_ptr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_set_user_ptr(struct MPIDI_CH3I_Sock * sock, void * user_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_SET_USER_PTR);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_SET_USER_PTR);
+
+ MPIDI_CH3I_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
+
+ if (sock != MPIDI_CH3I_SOCK_INVALID_SOCK &&
+ sock->sock_set != MPIDI_CH3I_SOCK_INVALID_SET)
+ {
+ MPIDI_CH3I_Socki_sock_get_pollinfo(sock)->user_ptr = user_ptr;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_BAD_SOCK,
+ "**sock|badsock", NULL);
+ }
+ /* --END ERROR HANDLING-- */
+
+#ifdef USE_SOCK_VERIFY
+ fn_exit:
+#endif
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_SET_USER_PTR);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_get_sock_id
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_get_sock_id(struct MPIDI_CH3I_Sock * sock)
+{
+ int id;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_ID);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_ID);
+
+ if (sock != MPIDI_CH3I_SOCK_INVALID_SOCK)
+ {
+ if (sock->sock_set != MPIDI_CH3I_SOCK_INVALID_SET)
+ {
+ id = MPIDI_CH3I_Socki_sock_get_pollinfo(sock)->sock_id;
+ }
+ else
+ {
+ id = -1;
+ }
+ }
+ else
+ {
+ id = -1;
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_ID);
+ return id;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_get_sock_set_id
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_get_sock_set_id(struct MPIDI_CH3I_Sock_set * sock_set)
+{
+ int id;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_SET_ID);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_SET_ID);
+
+ if (sock_set != MPIDI_CH3I_SOCK_INVALID_SET)
+ {
+ id = sock_set->id;
+ }
+ else
+ {
+ id = -1;
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_SET_ID);
+ return id;
+}
+
+/* FIXME: This function violates the internationalization design by
+ using English language strings rather than the error translation mechanism.
+ This unnecessarily breaks the goal of allowing internationalization.
+ Read the design documentation and if there is a problem, raise it rather
+ than ignoring it.
+*/
+/* FIXME: It appears that this function was used instead of making use of the
+ existing MPI-2 features to extend MPI error classes and code, of to export
+ messages to non-MPI application */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_get_error_class_string
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* --BEGIN ERROR HANDLING-- */
+int MPIDI_CH3I_Sock_get_error_class_string(int error, char *error_string, size_t length)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_GET_ERROR_CLASS_STRING);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_GET_ERROR_CLASS_STRING);
+ switch (MPIR_ERR_GET_CLASS(error))
+ {
+ case MPIDI_CH3I_SOCK_ERR_FAIL:
+ MPL_strncpy(error_string, "generic socket failure", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_INIT:
+ MPL_strncpy(error_string, "socket module not initialized", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_NOMEM:
+ MPL_strncpy(error_string, "not enough memory to complete the socket operation", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_BAD_SET:
+ MPL_strncpy(error_string, "invalid socket set", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_BAD_SOCK:
+ MPL_strncpy(error_string, "invalid socket", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_BAD_HOST:
+ MPL_strncpy(error_string, "host description buffer not large enough", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_BAD_HOSTNAME:
+ MPL_strncpy(error_string, "invalid host name", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_BAD_PORT:
+ MPL_strncpy(error_string, "invalid port", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_BAD_BUF:
+ MPL_strncpy(error_string, "invalid buffer", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_BAD_LEN:
+ MPL_strncpy(error_string, "invalid length", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_SOCK_CLOSED:
+ MPL_strncpy(error_string, "socket closed", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_CONN_CLOSED:
+ MPL_strncpy(error_string, "socket connection closed", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_CONN_FAILED:
+ MPL_strncpy(error_string, "socket connection failed", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_INPROGRESS:
+ MPL_strncpy(error_string, "socket operation in progress", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_TIMEOUT:
+ MPL_strncpy(error_string, "socket operation timed out", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_INTR:
+ MPL_strncpy(error_string, "socket operation interrupted", length);
+ break;
+ case MPIDI_CH3I_SOCK_ERR_NO_NEW_SOCK:
+ MPL_strncpy(error_string, "no new connection available", length);
+ break;
+ default:
+ MPL_snprintf(error_string, length, "unknown socket error %d", error);
+ break;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_GET_ERROR_CLASS_STRING);
+ return MPI_SUCCESS;
+}
+/* --END ERROR HANDLING-- */
+
+/*********** end of sock_misc.i *****************/
+
+/*********** sock_wait.i *****************/
+
+/* Make sure that we can properly ensure atomic access to the poll routine */
+#ifdef MPICH_IS_THREADED
+#if !(MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
+#error selected multi-threaded implementation is not supported
+#endif
+#endif
+
+
+static int MPIDI_CH3I_Socki_handle_pollhup(struct pollfd * const pollfd,
+ struct pollinfo * const pollinfo);
+static int MPIDI_CH3I_Socki_handle_pollerr(struct pollfd * const pollfd,
+ struct pollinfo * const pollinfo);
+static int MPIDI_CH3I_Socki_handle_read(struct pollfd * const pollfd,
+ struct pollinfo * const pollinfo);
+static int MPIDI_CH3I_Socki_handle_write(struct pollfd * const pollfd,
+ struct pollinfo * const pollinfo);
+static int MPIDI_CH3I_Socki_handle_connect(struct pollfd * const pollfd,
+ struct pollinfo * const pollinfo);
+
+/*
+ * MPIDI_CH3I_Sock_wait()
+ *
+ * NOTES:
+ *
+ * For fatal errors, the state of the connection progresses directly to the
+ * failed state and the connection is marked inactive in
+ * the poll array. Under normal conditions, the fatal error should result in
+ * the termination of the process; but, if that
+ * doesn't happen, we try to leave the implementation in a somewhat sane state.
+ *
+ * In the multithreaded case, only one routine at a time may call this routine
+ * To permit progress by other threads, it will release any global lock or
+ * coarse-grain critical section.
+ */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Sock_wait
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Sock_wait(struct MPIDI_CH3I_Sock_set * sock_set, int millisecond_timeout,
+ struct MPIDI_CH3I_Sock_event * eventp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_WAIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_POLL);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_WAIT);
+
+ for (;;)
+ {
+ int elem=0; /* Keep compiler happy */
+ int n_fds;
+ int n_elems;
+ int found_active_elem = FALSE;
+
+ mpi_errno = MPIDI_CH3I_Socki_event_dequeue(sock_set, &elem, eventp);
+ if (mpi_errno == MPI_SUCCESS) {
+ struct pollinfo * pollinfo;
+ int flags;
+
+ if (eventp->op_type != MPIDI_CH3I_SOCK_OP_CLOSE)
+ {
+ break;
+ }
+
+ pollinfo = &sock_set->pollinfos[elem];
+
+ /*
+ * Attempt to set socket back to blocking. This *should* prevent
+ * any data in the socket send buffer from being
+ * discarded. Instead close() will block until the buffer is
+ * flushed or the connection timeouts and is considered
+ * lost. Theoretically, this could cause the MPIDI_CH3I_Sock_wait() to
+ * hang indefinitely; however, the calling code
+ * should ensure this will not happen by going through a shutdown
+ * protocol before posting a close operation.
+ *
+ * FIXME: If the attempt to set the socket back to blocking fails,
+ * we presently ignore it. Should we return an
+ * error? We need to define acceptible data loss at close time.
+ * MS Windows has worse problems with this, so it
+ * may not be possible to make any guarantees.
+ */
+ flags = fcntl(pollinfo->fd, F_GETFL, 0);
+ if (flags != -1)
+ {
+ fcntl(pollinfo->fd, F_SETFL, flags & ~O_NONBLOCK);
+ }
+
+ /* FIXME: return code? If an error occurs do we return it
+ instead of the error specified in the event? */
+ close(pollinfo->fd);
+
+ MPIDI_CH3I_Socki_sock_free(pollinfo->sock);
+
+ break;
+ }
+
+ for(;;)
+ {
+# ifndef MPICH_IS_THREADED
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_POLL);
+ n_fds = poll(sock_set->pollfds, sock_set->poll_array_elems,
+ millisecond_timeout);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_POLL);
+ }
+# else /* MPICH_IS_THREADED */
+ {
+ /* If we've enabled runtime checking of the thread level,
+ then test for that and if we are *not* multithreaded,
+ just use the same code as above. Otherwise, use
+ multithreaded code (and we don't then need the
+ MPIR_THREAD_CHECK_BEGIN/END macros) */
+ if (!MPIR_ThreadInfo.isThreaded) {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_POLL);
+ n_fds = poll(sock_set->pollfds, sock_set->poll_array_elems,
+ millisecond_timeout);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_POLL);
+ }
+ else
+ {
+ /*
+ * First try a non-blocking poll to see if any immediate
+ * progress can be made. This avoids the lock manipulation
+ * overhead.
+ */
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_POLL);
+ n_fds = poll(sock_set->pollfds, sock_set->poll_array_elems, 0);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_POLL);
+
+ if (n_fds == 0 && millisecond_timeout != 0)
+ {
+ int pollfds_active_elems = sock_set->poll_array_elems;
+ int err;
+
+ /* The abstraction here is a shared (blocking) resource that
+ the threads must coordinate. That means not holding
+ a lock across the blocking operation but also
+ ensuring that only one thread at a time attempts
+ to use this resource.
+
+ What isn't yet clear in this where the test is made
+ to ensure that two threads don't call the poll operation,
+ even in a nonblocking sense.
+ */
+ sock_set->pollfds_active = sock_set->pollfds;
+
+ /* Release the lock so that other threads may make
+ progress while this thread waits for something to
+ do */
+ MPL_DBG_MSG(MPIR_DBG_OTHER,TYPICAL,"Exit global critical section (sock_wait)");
+ /* MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
+ MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX); */
+ MPID_Thread_mutex_unlock(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_POLL);
+ n_fds = poll(sock_set->pollfds_active,
+ pollfds_active_elems, millisecond_timeout);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_POLL);
+
+ /* Reaquire the lock before processing any of the
+ information returned from poll */
+ MPL_DBG_MSG(MPIR_DBG_OTHER,TYPICAL,"Enter global critical section (sock_wait)");
+ /* MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
+ MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX); */
+ MPID_Thread_mutex_lock(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
+
+ /*
+ * Update pollfds array if changes were posted while we
+ * were blocked in poll
+ */
+ if (sock_set->pollfds_updated) {
+ mpi_errno = MPIDI_Sock_update_sock_set(
+ sock_set, pollfds_active_elems );
+ }
+
+ sock_set->pollfds_active = NULL;
+ sock_set->wakeup_posted = FALSE;
+ }
+ } /* else !MPIR_ThreadInfo.isThreaded */
+ }
+# endif /* MPICH_IS_THREADED */
+
+ if (n_fds > 0)
+ {
+ break;
+ }
+ else if (n_fds == 0)
+ {
+ mpi_errno = MPIDI_CH3I_SOCK_ERR_TIMEOUT;
+ goto fn_exit;
+ }
+ else if (errno == EINTR)
+ {
+ if (millisecond_timeout != MPIDI_CH3I_SOCK_INFINITE_TIME)
+ {
+ mpi_errno = MPIDI_CH3I_SOCK_ERR_TIMEOUT;
+ goto fn_exit;
+ }
+
+ continue;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else if (errno == ENOMEM || errno == EAGAIN)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_NOMEM,
+ "**sock|osnomem", NULL);
+ goto fn_exit;
+ }
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL,
+ "**sock|oserror", "**sock|poll|oserror %d %s", errno, MPIR_Strerror(errno));
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+
+ elem = sock_set->starting_elem;
+ n_elems = sock_set->poll_array_elems;
+ while (n_fds > 0 && n_elems > 0)
+ {
+ /*
+ * Acquire pointers to the pollfd and pollinfo structures for the next element
+ *
+ * NOTE: These pointers could become stale, if a new sock were to be allocated during the processing of the element.
+ * At present, none of the handler routines allocate a sock, so the issue does not arise.
+ */
+ struct pollfd * const pollfd = &sock_set->pollfds[elem];
+ struct pollinfo * const pollinfo = &sock_set->pollinfos[elem];
+
+ MPIR_Assert((pollfd->events & (POLLIN | POLLOUT)) || pollfd->fd == -1);
+ MPIR_Assert(pollfd->fd >= 0 || pollfd->fd == -1);
+
+ if (pollfd->fd < 0 || pollfd->revents == 0)
+ {
+ /* This optimization assumes that most FDs will not have a pending event. */
+ n_elems -= 1;
+ elem = (elem + 1 < sock_set->poll_array_elems) ? elem + 1 : 0;
+ continue;
+ }
+
+ if (found_active_elem == FALSE)
+ {
+ found_active_elem = TRUE;
+ sock_set->starting_elem = (elem + 1 < sock_set->poll_array_elems) ? elem + 1 : 0;
+ }
+
+ if (pollfd->revents & POLLNVAL)
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|badhandle",
+ "**sock|poll|badhandle %d %d %d %d", pollinfo->sock_set->id, pollinfo->sock_id, pollfd->fd, pollinfo->fd);
+ goto fn_exit;
+ }
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (pollfd->revents & POLLHUP)
+ {
+ mpi_errno = MPIDI_CH3I_Socki_handle_pollhup(pollfd, pollinfo);
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ goto fn_exit;
+ }
+ }
+
+ /* According to Stevens, some errors are reported as normal data
+ (POLLIN) and some are reported with POLLERR. */
+ if (pollfd->revents & POLLERR)
+ {
+ mpi_errno = MPIDI_CH3I_Socki_handle_pollerr(pollfd, pollinfo);
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ goto fn_exit;
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ if (pollfd->revents & POLLIN)
+ {
+ if (pollinfo->type == MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION)
+ {
+ if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW ||
+ pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO)
+ {
+ mpi_errno = MPIDI_CH3I_Socki_handle_read(pollfd, pollinfo);
+ /* --BEGIN ERROR HANDLING-- */
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
+ "**sock|poll|unhandledstate %d", pollinfo->state);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ }
+ else if (pollinfo->type == MPIDI_CH3I_SOCKI_TYPE_LISTENER)
+ {
+ pollfd->events &= ~POLLIN;
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_ACCEPT, 0, pollinfo->user_ptr,
+ MPI_SUCCESS, mpi_errno, fn_exit);
+ }
+ else if ((MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE) && pollinfo->type == MPIDI_CH3I_SOCKI_TYPE_INTERRUPTER)
+ {
+ char c[16];
+ ssize_t nb;
+
+ do
+ {
+ nb = read(pollfd->fd, c, 16);
+ }
+ while (nb > 0 || (nb < 0 && errno == EINTR));
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|poll|unhandledtype",
+ "**sock|poll|unhandledtype %d", pollinfo->type);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+
+ if (pollfd->revents & POLLOUT)
+ {
+ if (pollinfo->type == MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION)
+ {
+ if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW)
+ {
+ mpi_errno = MPIDI_CH3I_Socki_handle_write(pollfd, pollinfo);
+ /* --BEGIN ERROR HANDLING-- */
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+ else if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTING)
+ {
+ mpi_errno = MPIDI_CH3I_Socki_handle_connect(pollfd, pollinfo);
+ /* --BEGIN ERROR HANDLING-- */
+ if (MPIR_Err_is_fatal(mpi_errno))
+ {
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
+ "**sock|poll|unhandledstate %d", pollinfo->state);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|poll|unhandledtype",
+ "**sock|poll|unhandledtype %d", pollinfo->type);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+
+ n_fds -= 1;
+ n_elems -= 1;
+ elem = (elem + 1 < sock_set->poll_array_elems) ? elem + 1 : 0;
+ }
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_WAIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_handle_pollhup
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_handle_pollhup(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLHUP);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLHUP);
+
+ if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW)
+ {
+ /*
+ * If a write was posted then cancel it and generate an connection closed event. If a read is posted, it will be handled
+ * by the POLLIN handler.
+ */
+ /* --BEGIN ERROR HANDLING-- */
+ if (pollfd->events & POLLOUT)
+ {
+ int event_mpi_errno;
+
+ event_mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_CLOSED,
+ "**sock|connclosed", "**sock|connclosed %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
+ event_mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO;
+ }
+ /* --END ERROR HANDLING-- */
+ }
+ else if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO)
+ {
+ /*
+ * If we are in the read-only state, then we should only get an error if we are looking to read data. If we are not
+ * reading data, then pollfd->fd should be set to -1 and we should not be getting a POLLHUP event.
+ *
+ * There may still be data in the socket buffer, so we will let the POLLIN handler deal with the error. Once all of the
+ * data has been read, the POLLIN handler will change the connection state and remove the connection from the active poll
+ * list.
+ */
+ MPIR_Assert(pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO && (pollfd->events & POLLIN) && (pollfd->revents & POLLIN));
+ }
+ else if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_DISCONNECTED)
+ {
+ /*
+ * We should never reach this state because pollfd->fd should be set to -1 if we are in the disconnected state.
+ */
+ MPIR_Assert(pollinfo->state == MPIDI_CH3I_SOCKI_STATE_DISCONNECTED && pollfd->fd == -1);
+ }
+ else if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTING)
+ {
+ /*
+ * The process we were connecting to died. Let the POLLOUT handler deal with the error.
+ */
+ MPIR_Assert(pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTING && (pollfd->events & POLLOUT));
+ pollfd->revents = POLLOUT;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
+ "**sock|poll|unhandledstate %d", pollinfo->state);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLHUP);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Socki_handle_pollhup() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_handle_pollerr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_handle_pollerr(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLERR);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLERR);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (pollinfo->type != MPIDI_CH3I_SOCKI_TYPE_COMMUNICATION)
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|poll|unhandledtype",
+ "**sock|poll|unhandledtype %d", pollinfo->type);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW)
+ {
+ /*
+ * Stevens suggests that some older version of UNIX did not properly reset so_error, which could allow POLLERR to be
+ * continuously triggered. We remove the socket from the poll list (pollfd->fd = 1) in order to prevent this issue.
+ * Here, we simple check that things are as we expect them to be.
+ */
+ MPIR_Assert((pollfd->events & (POLLIN | POLLOUT)) || pollfd->fd == -1);
+
+ /* If a write was posted then cancel it and generate an write completion event */
+ if (pollfd->events & POLLOUT)
+ {
+ int disconnected;
+ int os_errno;
+ int event_mpi_errno;
+
+ MPIDI_CH3I_SOCKI_GET_SOCKET_ERROR(pollinfo, os_errno, mpi_errno, fn_exit);
+
+ event_mpi_errno = MPIDI_CH3I_Socki_os_to_mpi_errno(pollinfo, os_errno, FCNAME, __LINE__, &disconnected);
+ /* --BEGIN ERROR HANDLING-- */
+ if (MPIR_Err_is_fatal(event_mpi_errno))
+ {
+ mpi_errno = event_mpi_errno;
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
+ event_mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO;
+ }
+ }
+ else if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO)
+ {
+ /*
+ * If we are in the read-only state, then we should only get an error if we are looking to read data. If we are not
+ * reading data, then pollfd->fd should be set to -1 and we should not be getting a POLLERR event.
+ *
+ * There may still be data in the socket buffer, so we will let the POLLIN handler deal with the error. Once all of the
+ * data has been read, the POLLIN handler will change the connection state and remove the connection from the active poll
+ * list.
+ */
+ MPIR_Assert(pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO && (pollfd->events & POLLIN) && (pollfd->revents & POLLIN));
+ }
+ else if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTING)
+ {
+ /*
+ * The process we were connecting to died. Let the POLLOUT handler deal with the error.
+ */
+ MPIR_Assert(pollinfo->state == MPIDI_CH3I_SOCKI_STATE_CONNECTING && (pollfd->events & POLLOUT));
+ pollfd->revents = POLLOUT;
+ }
+ else if (pollinfo->state == MPIDI_CH3I_SOCKI_STATE_DISCONNECTED)
+ {
+ /* We are already disconnected! Why are we handling an error? */
+ MPIR_Assert(pollfd->fd == -1);
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
+ "**sock|poll|unhandledstate %d", pollinfo->state);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLERR);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Socki_handle_pollerr() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_handle_read
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_handle_read(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
+{
+ ssize_t nb;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_READ);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_READV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_READ);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_READ);
+
+ do
+ {
+ if (pollinfo->read_iov_flag)
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_READV);
+ nb = MPL_large_readv(pollinfo->fd, pollinfo->read.iov.ptr + pollinfo->read.iov.offset,
+ pollinfo->read.iov.count - pollinfo->read.iov.offset);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_READV);
+ }
+ else
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_READ);
+ nb = read(pollinfo->fd, pollinfo->read.buf.ptr + pollinfo->read_nb,
+ pollinfo->read.buf.max - pollinfo->read_nb);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_READ);
+ }
+ }
+ while (nb < 0 && errno == EINTR);
+
+ if (nb > 0)
+ {
+ int done;
+
+ pollinfo->read_nb += nb;
+
+ done = pollinfo->read_iov_flag ?
+ MPIDI_CH3I_Socki_adjust_iov(nb, pollinfo->read.iov.ptr, pollinfo->read.iov.count, &pollinfo->read.iov.offset) :
+ (pollinfo->read_nb >= pollinfo->read.buf.min);
+
+ if (done)
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
+ MPI_SUCCESS, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN);
+ }
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else if (nb == 0)
+ {
+ int event_mpi_errno;
+
+ event_mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_CLOSED, "**sock|connclosed",
+ "**sock|connclosed %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
+ event_mpi_errno, mpi_errno, fn_exit);
+ }
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
+ event_mpi_errno, mpi_errno, fn_exit);
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN | POLLOUT);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+
+ }
+ /* --END ERROR HANDLING-- */
+ else if (errno == EAGAIN && errno == EWOULDBLOCK)
+ {
+ /* do nothing... */
+ goto fn_exit;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ int disconnected;
+ int event_mpi_errno;
+
+ event_mpi_errno = MPIDI_CH3I_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME, __LINE__, &disconnected);
+ if (MPIR_Err_is_fatal(event_mpi_errno))
+ {
+ /*
+ * A serious error occurred. There is no guarantee that the data
+ * structures are still intact. Therefore, we avoid
+ * modifying them.
+ */
+ mpi_errno = event_mpi_errno;
+ goto fn_exit;
+ }
+
+ if (disconnected)
+ {
+ if (MPIDI_CH3I_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
+ event_mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ }
+
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+ }
+
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
+ event_mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN);
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_READ);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Socki_handle_read() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_handle_write
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_handle_write(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
+{
+ ssize_t nb;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_WRITE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_WRITEV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_WRITE);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_WRITE);
+
+ do
+ {
+ if (pollinfo->write_iov_flag)
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_WRITEV);
+ nb = MPL_large_writev(pollinfo->fd, pollinfo->write.iov.ptr + pollinfo->write.iov.offset,
+ pollinfo->write.iov.count - pollinfo->write.iov.offset);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_WRITEV);
+ }
+ else
+ {
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_WRITE);
+ nb = write(pollinfo->fd, pollinfo->write.buf.ptr + pollinfo->write_nb,
+ pollinfo->write.buf.max - pollinfo->write_nb);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_WRITE);
+ }
+ }
+ while (nb < 0 && errno == EINTR);
+
+ if (nb >= 0)
+ {
+ int done;
+
+ pollinfo->write_nb += nb;
+
+ done = pollinfo->write_iov_flag ?
+ MPIDI_CH3I_Socki_adjust_iov(nb, pollinfo->write.iov.ptr, pollinfo->write.iov.count, &pollinfo->write.iov.offset) :
+ (pollinfo->write_nb >= pollinfo->write.buf.min);
+
+ if (done)
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
+ MPI_SUCCESS, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ }
+ }
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
+ {
+ /* do nothing... */
+ goto fn_exit;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ int disconnected;
+ int event_mpi_errno;
+
+ event_mpi_errno = MPIDI_CH3I_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME, __LINE__, &disconnected);
+ if (MPIR_Err_is_fatal(event_mpi_errno))
+ {
+ /*
+ * A serious error occurred. There is no guarantee that the data structures are still intact. Therefore, we avoid
+ * modifying them.
+ */
+ mpi_errno = event_mpi_errno;
+ goto fn_exit;
+ }
+
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
+ event_mpi_errno, mpi_errno, fn_exit);
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+ if (disconnected)
+ {
+ /*
+ * The connection is dead but data may still be in the socket buffer; thus, we change the state and let
+ * MPIDI_CH3I_Sock_wait() clean things up.
+ */
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RO;
+ }
+ }
+ /* --END ERROR HANDLING-- */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_WRITE);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Socki_handle_write() */
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Socki_handle_connect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Socki_handle_connect(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
+{
+ struct sockaddr_in addr;
+ socklen_t addr_len;
+ int rc;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_CONNECT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_CONNECT);
+
+ addr_len = sizeof(struct sockaddr_in);
+ rc = getpeername(pollfd->fd, (struct sockaddr *) &addr, &addr_len);
+ if (rc == 0)
+ {
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_CONNECT, 0, pollinfo->user_ptr, MPI_SUCCESS, mpi_errno, fn_exit);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_CONNECTED_RW;
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ else
+ {
+ int event_mpi_errno;
+
+ MPIDI_CH3I_SOCKI_GET_SOCKET_ERROR(pollinfo, pollinfo->os_errno, mpi_errno, fn_exit);
+ event_mpi_errno = MPIR_Err_create_code(
+ MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDI_CH3I_SOCK_ERR_CONN_FAILED, "**sock|connfailed",
+ "**sock|poll|connfailed %d %d %d %s", pollinfo->sock_set->id, pollinfo->sock_id, pollinfo->os_errno,
+ MPIR_Strerror(pollinfo->os_errno));
+ MPIDI_CH3I_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDI_CH3I_SOCK_OP_CONNECT, 0, pollinfo->user_ptr, event_mpi_errno, mpi_errno, fn_exit);
+ pollinfo->state = MPIDI_CH3I_SOCKI_STATE_DISCONNECTED;
+ }
+ /* --END ERROR HANDLING-- */
+
+ MPIDI_CH3I_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_CONNECT);
+ return mpi_errno;
+}
+/* end MPIDI_CH3I_Socki_handle_connect() */
+
+/*********** end of sock_wait.i *****************/
diff --git a/src/mpid/ch3/channels/sock/subconfigure.m4 b/src/mpid/ch3/channels/sock/subconfigure.m4
index b95f9cb..91bfab1 100644
--- a/src/mpid/ch3/channels/sock/subconfigure.m4
+++ b/src/mpid/ch3/channels/sock/subconfigure.m4
@@ -8,7 +8,6 @@ AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
AM_COND_IF([BUILD_CH3_SOCK],[
AC_MSG_NOTICE([RUNNING PREREQ FOR ch3:sock])
# this channel depends on the sock utilities
- build_mpid_common_sock=yes
build_ch3u_sock=yes
MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
@@ -55,6 +54,134 @@ AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
##for path in $pathlist ; do
## CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/${path} -I${master_top_srcdir}/${path}"
##done
+
+# Adding this prevents the pesky "(strerror() not found)" problem, which can be
+# very frustrating in the sock code, the most likely to receive an error code
+# from the system. [goodell@ 2008-01-10]
+AC_CHECK_FUNCS([strerror])
+
+AC_ARG_ENABLE([sock-debug],
+ [--enable-sock-debug - Turn on tests of the socket data structures],
+ [],
+ [enable_sock_debug=no])
+
+if test "$enable_sock_debug" = yes ; then
+ AC_DEFINE(USE_SOCK_VERIFY,1,[Define it the socket verify macros should be enabled])
+fi
+
+AC_CHECK_FUNC([poll],[pac_cv_have_func_poll=yes],[pac_cv_have_func_poll=no])
+if test "X$pac_cv_have_func_poll" = "Xno" ; then
+ if test -f /sw/include/sys/poll.h ; then
+ dnl This is for Mac OSX (Darwin) which doesn't have a poll function is
+ dnl the standard libraries. Instead we use a contributed library found
+ dnl off in la la land (/sw).
+ dnl
+ dnl I don't think the above comment is true for modern Darwin (goodell@ 2010-06-01)
+ CFLAGS="$CFLAGS -I/sw/include"
+ LIBS="$LIBS -L/sw/lib -lpoll"
+ else
+ AC_MSG_ERROR([This device requires the poll function])
+ fi
+fi
+
+AC_CHECK_HEADERS([assert.h errno.h fcntl.h limits.h netdb.h netinet/in.h netinet/tcp.h])
+AC_CHECK_HEADERS([poll.h stdlib.h sys/param.h sys/poll.h sys/types.h sys/uio.h unistd.h])
+
+AC_MSG_CHECKING([if struct poll is defined]);
+AC_TRY_COMPILE([
+#if defined(HAVE_POLL_H)
+#include <poll.h>
+#endif
+#if defined(HAVE_SYS_POLL_H)
+#include <sys/poll.h>
+#endif
+],[
+struct pollfd pollfd;
+pollfd.fd = -1;
+],[
+AC_MSG_RESULT([yes])
+],[
+AC_MSG_RESULT([no])
+AC_MSG_ERROR([This device requires the poll function])
+])
+
+AC_MSG_CHECKING([if a simple program using poll() can be compiled]);
+AC_TRY_COMPILE([
+#if defined(HAVE_POLL_H)
+#include <poll.h>
+#endif
+#if defined(HAVE_SYS_POLL_H)
+#include <sys/poll.h>
+#endif
+],[
+struct pollfd pollfds[2];
+int n_fds;
+pollfds[0].fd = -1;
+pollfds[1].fd = -1;
+n_fds = poll(pollfds, 2, -1);
+],[
+AC_MSG_RESULT([yes])
+],[
+AC_MSG_RESULT([no])
+AC_MSG_ERROR([This device requires the poll function])
+])
+
+dnl
+dnl needed on AIX
+dnl
+AC_MSG_CHECKING([whether bit fields work in ip.h]);
+AC_TRY_COMPILE([
+#include <netinet/tcp.h>
+],[
+int i;
+],[
+AC_MSG_RESULT([yes])
+bit_fields=yes
+],[
+AC_MSG_RESULT([no])
+bit_fields=no
+])
+if test "$bit_fields" = "no" ; then
+ AC_MSG_RESULT([Adding -D_NO_BITFIELDS to CFLAGS])
+ CFLAGS="$CFLAGS -D_NO_BITFIELDS"
+fi
+
+
+AC_CHECK_FUNCS([gethostname])
+if test "$ac_cv_func_gethostname" = "yes" ; then
+ # Do we need to declare gethostname?
+ PAC_FUNC_NEEDS_DECL([#include <unistd.h>],gethostname)
+fi
+
+AC_SEARCH_LIBS([socket],[socket])
+AC_SEARCH_LIBS([gethostbyname],[nsl])
+
+# Check first for sys/socket.h . We check not only for existence but whether
+# it can be compiled (!), as we have seen some problems with this.
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>
+],[int a;],ac_cv_header_sys_socket_h=yes,ac_cv_header_sys_socket_h=no)
+if test "$ac_cv_header_sys_socket_h" = yes ; then
+ AC_DEFINE(HAVE_SYS_SOCKET_H,1,[Define if you have the <sys/socket.h> header file.])
+fi
+# Check for socklen_t . If undefined, define it as int
+# (note the conditional inclusion of sys/socket.h)
+AC_CACHE_CHECK([whether socklen_t is defined (in sys/socket.h if present)],
+pac_cv_have_socklen_t,[
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+typedef struct { double a; int b; } socklen_t;],
+[socklen_t a;a.a=1.0;],
+[pac_cv_have_socklen_t=no],
+[pac_cv_have_socklen_t=yes])])
+if test "X$pac_cv_have_socklen_t" = Xno ; then
+ AC_DEFINE([socklen_t],[int],[Define if socklen_t is not defined])
+fi
+
])
])dnl
dnl
diff --git a/src/mpid/ch3/errnames.txt b/src/mpid/ch3/errnames.txt
index a3308bc..9204942 100644
--- a/src/mpid/ch3/errnames.txt
+++ b/src/mpid/ch3/errnames.txt
@@ -32,6 +32,9 @@
**ch3|close_progress:an error occurred while the device was waiting for all open connections to close
**ch3|pmi_finalize:PMI_Finalize failed
**ch3|pmi_finalize %d:PMI_Finalize failed, error %d
+**ch3|conntimeout:Connection timed out
+**ch3|conntimeout %d:Connection timed out in %d seconds
+**ch3|portclose:Port is unexpectedly closed
#
# RMA errors
diff --git a/src/mpid/ch3/include/.state-cache b/src/mpid/ch3/include/.state-cache
index 5700e04..8da4f16 100644
--- a/src/mpid/ch3/include/.state-cache
+++ b/src/mpid/ch3/include/.state-cache
@@ -1,24 +1,25 @@
<dir>
-<file name="mpid_rma_oplist.h" info="1447123141"/>
-<file name="mpid_rma_lockqueue.h" info="1447123141"/>
-<file name="mpid_rma_types.h" info="1447123141"/>
-<file name="mpid_rma_shm.h" info="1447123141"/>
-<file name="mpidimpl.h" info="1447123141"/>
-<file name="mpidpkt.h" info="1447123141"/>
-<file name="mpidrma.h" info="1447123141"/>
-<file name="mpidpre.h" info="1447123141"/>
-<file name="mpid_thread.h" info="1447123141"/>
-<file name="mpidi_recvq_statistics.h" info="1447123141"/>
-<file name="mpid_rma_issue.h" info="1447123141"/>
-<file name="mpidpost.h" info="1447123141"/>
-<file name="mpidftb.h" info="1447123141"/>
+<file name="mpid_sched.h" info="1478973152"/>
+<file name="mpid_port.h" info="1478973152"/>
+<file name="mpid_rma_shm.h" info="1478973152"/>
+<file name="mpid_thread.h" info="1478973152"/>
+<file name="mpidpost.h" info="1478973152"/>
+<file name="mpid_rma_oplist.h" info="1478973152"/>
+<file name="mpid_rma_issue.h" info="1478973152"/>
+<file name="mpidpkt.h" info="1478973152"/>
+<file name="mpidftb.h" info="1478973152"/>
+<file name="mpid_coll.h" info="1478973152"/>
+<file name="mpid_rma_types.h" info="1478973152"/>
+<file name="mpidimpl.h" info="1478973152"/>
+<file name="mpidi_recvq_statistics.h" info="1478973152"/>
+<file name="mpid_rma_lockqueue.h" info="1478973152"/>
+<file name="mpidpre.h" info="1478973152"/>
+<file name="mpidrma.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpid_rma_oplist.h">
-</fileinfo>
-<fileinfo name="mpid_rma_lockqueue.h">
+<fileinfo name="mpid_sched.h">
</fileinfo>
-<fileinfo name="mpid_rma_types.h">
+<fileinfo name="mpid_port.h">
</fileinfo>
<fileinfo name="mpid_rma_shm.h">
MPID_STATE_MPIDI_CH3I_SHM_PUT_OP MPIDI_CH3I_Shm_put_op
@@ -28,28 +29,11 @@ MPID_STATE_MPIDI_CH3I_SHM_GET_OP MPIDI_CH3I_Shm_get_op
MPID_STATE_MPIDI_CH3I_SHM_CAS_OP MPIDI_CH3I_Shm_cas_op
MPID_STATE_MPIDI_CH3I_SHM_FOP_OP MPIDI_CH3I_Shm_fop_op
</fileinfo>
-<fileinfo name="mpidimpl.h">
-</fileinfo>
-<fileinfo name="mpidpkt.h">
-</fileinfo>
-<fileinfo name="mpidrma.h">
-MPID_STATE_SEND_LOCK_MSG send_lock_msg
-MPID_STATE_SEND_UNLOCK_MSG send_unlock_msg
-MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT MPIDI_CH3I_Send_lock_ack_pkt
-MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT MPIDI_CH3I_Send_lock_op_ack_pkt
-MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT MPIDI_CH3I_Send_ack_pkt
-MPID_STATE_SEND_DECR_AT_CNT_MSG send_decr_at_cnt_msg
-MPID_STATE_SEND_FLUSH_MSG send_flush_msg
-MPID_STATE_CHECK_AND_SET_REQ_COMPLETION check_and_set_req_completion
-MPID_STATE_ACQUIRE_LOCAL_LOCK acquire_local_lock
-MPID_STATE_DO_ACCUMULATE_OP do_accumulate_op
-MPID_STATE_FILL_RANKS_IN_WIN_GRP do_accumulate_op
-</fileinfo>
-<fileinfo name="mpidpre.h">
-</fileinfo>
<fileinfo name="mpid_thread.h">
</fileinfo>
-<fileinfo name="mpidi_recvq_statistics.h">
+<fileinfo name="mpidpost.h">
+</fileinfo>
+<fileinfo name="mpid_rma_oplist.h">
</fileinfo>
<fileinfo name="mpid_rma_issue.h">
MPID_STATE_IMMED_COPY immed_copy
@@ -65,8 +49,33 @@ MPID_STATE_ISSUE_CAS_OP issue_cas_op
MPID_STATE_ISSUE_FOP_OP issue_fop_op
MPID_STATE_ISSUE_RMA_OP issue_rma_op
</fileinfo>
-<fileinfo name="mpidpost.h">
+<fileinfo name="mpidpkt.h">
</fileinfo>
<fileinfo name="mpidftb.h">
</fileinfo>
+<fileinfo name="mpid_coll.h">
+</fileinfo>
+<fileinfo name="mpid_rma_types.h">
+</fileinfo>
+<fileinfo name="mpidimpl.h">
+</fileinfo>
+<fileinfo name="mpidi_recvq_statistics.h">
+</fileinfo>
+<fileinfo name="mpid_rma_lockqueue.h">
+</fileinfo>
+<fileinfo name="mpidpre.h">
+</fileinfo>
+<fileinfo name="mpidrma.h">
+MPID_STATE_SEND_LOCK_MSG send_lock_msg
+MPID_STATE_SEND_UNLOCK_MSG send_unlock_msg
+MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT MPIDI_CH3I_Send_lock_ack_pkt
+MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT MPIDI_CH3I_Send_lock_op_ack_pkt
+MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT MPIDI_CH3I_Send_ack_pkt
+MPID_STATE_SEND_DECR_AT_CNT_MSG send_decr_at_cnt_msg
+MPID_STATE_SEND_FLUSH_MSG send_flush_msg
+MPID_STATE_CHECK_AND_SET_REQ_COMPLETION check_and_set_req_completion
+MPID_STATE_ACQUIRE_LOCAL_LOCK acquire_local_lock
+MPID_STATE_DO_ACCUMULATE_OP do_accumulate_op
+MPID_STATE_FILL_RANKS_IN_WIN_GRP do_accumulate_op
+</fileinfo>
</data>
diff --git a/src/mpid/ch3/include/mpid_coll.h b/src/mpid/ch3/include/mpid_coll.h
new file mode 100644
index 0000000..9adb88b
--- /dev/null
+++ b/src/mpid/ch3/include/mpid_coll.h
@@ -0,0 +1,720 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpidimpl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Barrier(MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Barrier_impl(comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Bcast_impl(buffer, count, datatype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Allreduce_impl(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Allgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Allgatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Scatter_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Scatterv_impl(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Gather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Alltoall_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
+ recvcounts, rdispls, recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const int rdispls[],
+ const MPI_Datatype recvtypes[], MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Alltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Reduce_scatter_impl(sendbuf, recvbuf, recvcounts,
+ datatype, op, comm_ptr, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Reduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Scan_impl(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Exscan_impl(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts, rdispls, recvtypes,
+ comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm,
+ request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype,
+ comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts, rdispls, recvtypes,
+ comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ibarrier(MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ibarrier_impl(comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ialltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ialltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype,
+ op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPID_Iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, request);
+
+ return mpi_errno;
+}
diff --git a/src/mpid/ch3/include/mpid_port.h b/src/mpid/ch3/include/mpid_port.h
new file mode 100644
index 0000000..4463d39
--- /dev/null
+++ b/src/mpid/ch3/include/mpid_port.h
@@ -0,0 +1,200 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPID_PORT_H_
+#define MPID_PORT_H_
+
+#include "mpl_utlist.h"
+
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
+
+/* Header file only used by port connect/accept routines (ch3u_port.c) */
+
+typedef enum {
+ MPIDI_CH3I_PORT_CONNREQ_INITED, /* Connection request initialized. */
+ MPIDI_CH3I_PORT_CONNREQ_REVOKE, /* Client started revoking a timed out connection request. */
+ MPIDI_CH3I_PORT_CONNREQ_ACCEPT, /* Server started accepting a connection request. */
+ MPIDI_CH3I_PORT_CONNREQ_ACCEPTED, /* Server successfully accepted this request (i.e.,
+ * client does not revoke it). */
+ MPIDI_CH3I_PORT_CONNREQ_ERR_CLOSE, /* Error state -- Server closed unexpectedly.
+ * (called close_port or finalize while client is
+ * still waiting acceptance).
+ * Note: revoke-state request will be directly
+ * changed to free-state. */
+ MPIDI_CH3I_PORT_CONNREQ_FREE, /* Started freeing a connection request.
+ * (VC has been locally closed and ready for blocking
+ * wait on termination).
+ * A connection request can be eventually freed when:
+ * (1) connection normally completed;
+ * (2) a timed out connection (revoke) request received
+ * accept packet;
+ * (3) server closed unexpectedly.*/
+} MPIDI_CH3I_Port_connreq_stat_t;
+
+typedef struct MPIDI_CH3I_Port_connreq {
+ MPIDI_VC_t *vc;
+ MPIDI_CH3I_Port_connreq_stat_t stat;
+ struct MPIDI_CH3I_Port_connreq *next;
+} MPIDI_CH3I_Port_connreq_t;
+
+typedef struct MPIDI_CH3I_Port_connreq_q {
+ MPIDI_CH3I_Port_connreq_t *head;
+ MPIDI_CH3I_Port_connreq_t *tail;
+ int size;
+} MPIDI_CH3I_Port_connreq_q_t;
+
+typedef struct MPIDI_CH3I_Port {
+ int port_name_tag;
+ MPIDI_CH3I_Port_connreq_q_t accept_connreq_q;
+ struct MPIDI_CH3I_Port *next;
+} MPIDI_CH3I_Port_t;
+
+typedef struct MPIDI_CH3I_Port_q {
+ MPIDI_CH3I_Port_t *head;
+ MPIDI_CH3I_Port_t *tail;
+ int size;
+} MPIDI_CH3I_Port_q_t;
+
+#define MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, new_stat) \
+ (connreq->stat = MPIDI_CH3I_PORT_CONNREQ_##new_stat)
+
+
+/* Start VC closing protocol -- locally close VC.
+ * It is the 1st step of VC closing protocol (see ch3u_handle_connection.c):
+ * local_closed / remote_closed -> close_acked -> closed. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_local_close_vc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH3I_Port_local_close_vc(MPIDI_VC_t * vc)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ /* Note that this routine is usually called in comm_release after matched in
+ * an accept call. Here we do not have comm for the VC, thus just close it
+ * with a dummy rank (this parameter is only for debugging) */
+ if (vc->state == MPIDI_VC_STATE_ACTIVE || vc->state == MPIDI_VC_STATE_REMOTE_CLOSE) {
+ mpi_errno = MPIDI_CH3U_VC_SendClose(vc, 0 /* dummy rank */);
+ }
+
+ return mpi_errno;
+}
+
+/*** Utility routines for connection request queues ***/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_connreq_q_enqueue
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_CH3I_Port_connreq_q_enqueue(MPIDI_CH3I_Port_connreq_q_t * connreq_q,
+ MPIDI_CH3I_Port_connreq_t * connreq)
+{
+ MPL_LL_APPEND(connreq_q->head, connreq_q->tail, connreq);
+ connreq_q->size++;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_connreq_q_dequeue
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_CH3I_Port_connreq_q_dequeue(MPIDI_CH3I_Port_connreq_q_t * connreq_q,
+ MPIDI_CH3I_Port_connreq_t ** connreq_ptr)
+{
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL;
+
+ /* delete head */
+ if (connreq_q->head != NULL) {
+ connreq = connreq_q->head;
+
+ MPL_LL_DELETE(connreq_q->head, connreq_q->tail, connreq);
+ connreq_q->size--;
+ }
+
+ (*connreq_ptr) = connreq;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_connreq_q_delete
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_CH3I_Port_connreq_q_delete(MPIDI_CH3I_Port_connreq_q_t * connreq_q,
+ MPIDI_CH3I_Port_connreq_t * connreq)
+{
+ MPL_LL_DELETE(connreq_q->head, connreq_q->tail, connreq);
+ connreq_q->size--;
+}
+
+
+
+/*** Utility routines for issuing ACK packets in accept/connect routine ***/
+
+/* Reply ACK packet to server accept routine. Client replies this packet after
+ * received an accept packet from server. Handled in MPIDI_CH3_PktHandler_AcceptAck.
+ * ACK - True means client matched with server acceptance;
+ * ACK - False means client already started revoking, thus acceptance fails. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_issue_accept_ack
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH3I_Port_issue_accept_ack(MPIDI_VC_t * vc, int ack)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req_ptr = NULL;
+ MPIDI_CH3_Pkt_t spkt;
+ MPIDI_CH3_Pkt_accept_ack_t *ack_pkt = &spkt.accept_ack;
+
+ MPIDI_Pkt_init(ack_pkt, MPIDI_CH3_PKT_ACCEPT_ACK);
+ ack_pkt->ack = ack;
+
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "issuing accpet_ack packet to vc %p, ack=%d", vc, ack));
+
+ mpi_errno = MPIDI_CH3_iStartMsg(vc, ack_pkt, sizeof(MPIDI_CH3_Pkt_t), &req_ptr);
+ if (mpi_errno != MPI_SUCCESS)
+ return mpi_errno;
+
+ if (req_ptr != NULL)
+ MPIR_Request_free(req_ptr); /* Only reduce reference, released after pkt sent. */
+
+ return mpi_errno;
+}
+
+/* Reply ACK packet to client connect routine. Server replies this packet in
+ * accept call for dequeued connection request, or replies immediately when
+ * received a request for non-existing port. Handled in MPIDI_CH3_PktHandler_ConnAck
+ * on client.
+ * ACK - True means server started accepting this connection request;
+ * ACK - False means port does not exist or being closed on server, thus connection
+ * fails. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_issue_conn_ack
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH3I_Port_issue_conn_ack(MPIDI_VC_t * vc, int ack)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req_ptr = NULL;
+ MPIDI_CH3_Pkt_t spkt;
+ MPIDI_CH3_Pkt_conn_ack_t *ack_pkt = &spkt.conn_ack;
+
+ MPIDI_Pkt_init(ack_pkt, MPIDI_CH3_PKT_CONN_ACK);
+ ack_pkt->ack = ack;
+
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "issuing conn_ack packet to vc %p, ack=%d", vc, ack));
+
+ mpi_errno = MPIDI_CH3_iStartMsg(vc, ack_pkt, sizeof(MPIDI_CH3_Pkt_t), &req_ptr);
+ if (mpi_errno != MPI_SUCCESS)
+ return mpi_errno;
+
+ if (req_ptr != NULL)
+ MPIR_Request_free(req_ptr); /* Only reduce reference, released after pkt sent. */
+
+ return mpi_errno;
+}
+
+#endif /* MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS */
+
+#endif /* MPID_PORT_H_ */
diff --git a/src/mpid/ch3/include/mpid_rma_issue.h b/src/mpid/ch3/include/mpid_rma_issue.h
index 5fa65dd..3027eee 100644
--- a/src/mpid/ch3/include/mpid_rma_issue.h
+++ b/src/mpid/ch3/include/mpid_rma_issue.h
@@ -23,9 +23,9 @@
static inline int immed_copy(void *src, void *dest, size_t len)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_IMMED_COPY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_IMMED_COPY);
- MPIDI_FUNC_ENTER(MPID_STATE_IMMED_COPY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_IMMED_COPY);
if (src == NULL || dest == NULL || len == 0)
goto fn_exit;
@@ -34,6 +34,10 @@ static inline int immed_copy(void *src, void *dest, size_t len)
case 1:
*(uint8_t *) dest = *(uint8_t *) src;
break;
+#ifndef NEEDS_STRICT_ALIGNMENT
+ /* Following copy is unsafe on platforms that require strict
+ * alignment (e.g., SPARC). Because the buffers may not be aligned
+ * for data type access except char. */
case 2:
*(uint16_t *) dest = *(uint16_t *) src;
break;
@@ -43,12 +47,13 @@ static inline int immed_copy(void *src, void *dest, size_t len)
case 8:
*(uint64_t *) dest = *(uint64_t *) src;
break;
+#endif
default:
- MPIU_Memcpy(dest, (void *) src, len);
+ MPIR_Memcpy(dest, (void *) src, len);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_IMMED_COPY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_IMMED_COPY);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -64,10 +69,10 @@ static inline int immed_copy(void *src, void *dest, size_t len)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline void fill_in_derived_dtp_info(MPIDI_RMA_dtype_info * dtype_info, void *dataloop,
- MPID_Datatype * dtp)
+ MPIDU_Datatype* dtp)
{
- MPIDI_STATE_DECL(MPID_STATE_FILL_IN_DERIVED_DTP_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_FILL_IN_DERIVED_DTP_INFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_FILL_IN_DERIVED_DTP_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_FILL_IN_DERIVED_DTP_INFO);
/* Derived datatype on target, fill derived datatype info. */
dtype_info->is_contig = dtp->is_contig;
@@ -85,13 +90,13 @@ static inline void fill_in_derived_dtp_info(MPIDI_RMA_dtype_info * dtype_info, v
dtype_info->has_sticky_ub = dtp->has_sticky_ub;
dtype_info->has_sticky_lb = dtp->has_sticky_lb;
- MPIU_Assert(dataloop != NULL);
- MPIU_Memcpy(dataloop, dtp->dataloop, dtp->dataloop_size);
+ MPIR_Assert(dataloop != NULL);
+ MPIR_Memcpy(dataloop, dtp->dataloop, dtp->dataloop_size);
/* The dataloop can have undefined padding sections, so we need to let
* valgrind know that it is OK to pass this data to writev later on. */
MPL_VG_MAKE_MEM_DEFINED(dataloop, dtp->dataloop_size);
- MPIDI_FUNC_EXIT(MPID_STATE_FILL_IN_DERIVED_DTP_INFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_FILL_IN_DERIVED_DTP_INFO);
}
/* Set extended header for ACC operation and return its real size. */
@@ -100,15 +105,15 @@ static inline void fill_in_derived_dtp_info(MPIDI_RMA_dtype_info * dtype_info, v
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int init_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
- MPID_Datatype * target_dtp, MPIDI_msg_sz_t stream_offset,
+ MPIDU_Datatype* target_dtp, intptr_t stream_offset,
void **ext_hdr_ptr, MPI_Aint * ext_hdr_sz)
{
MPI_Aint _ext_hdr_sz = 0, _total_sz = 0;
void *dataloop_ptr = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_INIT_ACCUM_EXT_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_INIT_ACCUM_EXT_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_INIT_ACCUM_EXT_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_INIT_ACCUM_EXT_PKT);
if ((flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) && target_dtp != NULL) {
MPIDI_CH3_Ext_pkt_accum_stream_derived_t *_ext_hdr_ptr = NULL;
@@ -118,7 +123,8 @@ static int init_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
_ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t);
_total_sz = _ext_hdr_sz + target_dtp->dataloop_size;
- _ext_hdr_ptr = (MPIDI_CH3_Ext_pkt_accum_stream_derived_t *) MPIU_Malloc(_total_sz);
+ _ext_hdr_ptr = (MPIDI_CH3_Ext_pkt_accum_stream_derived_t *) MPL_malloc(_total_sz);
+ MPL_VG_MEM_INIT(_ext_hdr_ptr, _total_sz);
if (_ext_hdr_ptr == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_accum_stream_derived_t");
@@ -136,7 +142,8 @@ static int init_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
_total_sz = sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t);
- _ext_hdr_ptr = (MPIDI_CH3_Ext_pkt_accum_stream_t *) MPIU_Malloc(_total_sz);
+ _ext_hdr_ptr = (MPIDI_CH3_Ext_pkt_accum_stream_t *) MPL_malloc(_total_sz);
+ MPL_VG_MEM_INIT(_ext_hdr_ptr, _total_sz);
if (_ext_hdr_ptr == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_accum_stream_t");
@@ -153,7 +160,8 @@ static int init_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
_ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t);
_total_sz = _ext_hdr_sz + target_dtp->dataloop_size;
- _ext_hdr_ptr = (MPIDI_CH3_Ext_pkt_accum_derived_t *) MPIU_Malloc(_total_sz);
+ _ext_hdr_ptr = (MPIDI_CH3_Ext_pkt_accum_derived_t *) MPL_malloc(_total_sz);
+ MPL_VG_MEM_INIT(_ext_hdr_ptr, _total_sz);
if (_ext_hdr_ptr == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_accum_derived_t");
@@ -168,11 +176,11 @@ static int init_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
(*ext_hdr_sz) = _total_sz;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_INIT_ACCUM_EXT_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_INIT_ACCUM_EXT_PKT);
return mpi_errno;
fn_fail:
if ((*ext_hdr_ptr))
- MPIU_Free((*ext_hdr_ptr));
+ MPL_free((*ext_hdr_ptr));
(*ext_hdr_ptr) = NULL;
(*ext_hdr_sz) = 0;
goto fn_exit;
@@ -183,25 +191,25 @@ static int init_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int init_get_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
- MPID_Datatype * target_dtp, MPIDI_msg_sz_t stream_offset,
+ MPIDU_Datatype* target_dtp, intptr_t stream_offset,
void **ext_hdr_ptr, MPI_Aint * ext_hdr_sz)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_INIT_GET_ACCUM_EXT_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_INIT_GET_ACCUM_EXT_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_INIT_GET_ACCUM_EXT_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_INIT_GET_ACCUM_EXT_PKT);
/* Check if get_accum still reuses accum' extended packet header. */
- MPIU_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t) ==
+ MPIR_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t) ==
sizeof(MPIDI_CH3_Ext_pkt_get_accum_stream_derived_t));
- MPIU_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t) ==
+ MPIR_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t) ==
sizeof(MPIDI_CH3_Ext_pkt_get_accum_derived_t));
- MPIU_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t) ==
+ MPIR_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t) ==
sizeof(MPIDI_CH3_Ext_pkt_get_accum_stream_t));
mpi_errno = init_accum_ext_pkt(flags, target_dtp, stream_offset, ext_hdr_ptr, ext_hdr_sz);
- MPIDI_FUNC_EXIT(MPID_STATE_INIT_GET_ACCUM_EXT_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_INIT_GET_ACCUM_EXT_PKT);
return mpi_errno;
}
@@ -217,22 +225,22 @@ static int init_get_accum_ext_pkt(MPIDI_CH3_Pkt_flags_t flags,
#define FCNAME MPL_QUOTE(FUNCNAME)
static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
void *ext_hdr_ptr, MPI_Aint ext_hdr_sz,
- MPIDI_msg_sz_t stream_offset, MPIDI_msg_sz_t stream_size,
- MPID_Request ** req_ptr)
+ intptr_t stream_offset, intptr_t stream_size,
+ MPIR_Request ** req_ptr)
{
MPI_Datatype target_datatype;
- MPID_Datatype *target_dtp = NULL, *origin_dtp = NULL;
+ MPIDU_Datatype*target_dtp = NULL, *origin_dtp = NULL;
int is_origin_contig;
MPL_IOV iov[MPL_IOV_LIMIT];
int iovcnt = 0;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
MPI_Aint dt_true_lb;
MPIDI_CH3_Pkt_flags_t flags;
int is_empty_origin = FALSE;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
- MPIDI_FUNC_ENTER(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
/* Judge if origin buffer is empty (this can only happens for
* GACC and FOP when op is MPI_NO_OP). */
@@ -246,7 +254,7 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
/* Judge if target datatype is derived datatype. */
MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(rma_op->pkt, target_datatype, mpi_errno);
if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
- MPID_Datatype_get_ptr(target_datatype, target_dtp);
+ MPIDU_Datatype_get_ptr(target_datatype, target_dtp);
/* Set dataloop size in pkt header */
MPIDI_CH3_PKT_RMA_SET_DATALOOP_SIZE(rma_op->pkt, target_dtp->dataloop_size, mpi_errno);
@@ -255,12 +263,12 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
if (is_empty_origin == FALSE) {
/* Judge if origin datatype is derived datatype. */
if (!MPIR_DATATYPE_IS_PREDEFINED(rma_op->origin_datatype)) {
- MPID_Datatype_get_ptr(rma_op->origin_datatype, origin_dtp);
+ MPIDU_Datatype_get_ptr(rma_op->origin_datatype, origin_dtp);
}
/* check if origin data is contiguous and get true lb */
- MPID_Datatype_is_contig(rma_op->origin_datatype, &is_origin_contig);
- MPID_Datatype_get_true_lb(rma_op->origin_datatype, &dt_true_lb);
+ MPIDU_Datatype_is_contig(rma_op->origin_datatype, &is_origin_contig);
+ MPIDU_Datatype_get_true_lb(rma_op->origin_datatype, &dt_true_lb);
}
else {
/* origin buffer is empty, mark origin data as contig and true_lb as 0. */
@@ -295,7 +303,7 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
if (origin_dtp != NULL) {
if (req == NULL) {
- MPID_Datatype_release(origin_dtp);
+ MPIDU_Datatype_release(origin_dtp);
}
else {
/* this will cause the datatype to be freed when the request
@@ -311,11 +319,11 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
* always need a request to be passed in. */
/* create a new request */
- req = MPID_Request_create();
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- MPIU_Object_set_ref(req, 2);
- req->kind = MPID_REQUEST_SEND;
+ MPIR_Object_set_ref(req, 2);
+ req->kind = MPIR_REQUEST_KIND__SEND;
/* set extended packet header, it is freed when the request is freed. */
if (ext_hdr_sz > 0) {
@@ -346,11 +354,11 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
}
else {
/* origin data is non-contiguous */
- req->dev.segment_ptr = MPID_Segment_alloc();
+ req->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1(req->dev.segment_ptr == NULL, mpi_errno,
- MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(rma_op->origin_addr, rma_op->origin_count,
+ MPIDU_Segment_init(rma_op->origin_addr, rma_op->origin_count,
rma_op->origin_datatype, req->dev.segment_ptr, 0);
req->dev.segment_first = stream_offset;
req->dev.segment_size = stream_offset + stream_size;
@@ -367,18 +375,18 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
fn_exit:
/* release the target datatype */
if (target_dtp)
- MPID_Datatype_release(target_dtp);
+ MPIDU_Datatype_release(target_dtp);
(*req_ptr) = req;
- MPIDI_FUNC_EXIT(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
return mpi_errno;
fn_fail:
if (req) {
if (req->dev.datatype_ptr)
- MPID_Datatype_release(req->dev.datatype_ptr);
+ MPIDU_Datatype_release(req->dev.datatype_ptr);
if (req->dev.ext_hdr_ptr)
- MPIU_Free(req->dev.ext_hdr_ptr);
- MPID_Request_release(req);
+ MPL_free(req->dev.ext_hdr_ptr);
+ MPIR_Request_free(req);
}
(*req_ptr) = NULL;
@@ -391,21 +399,21 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
#define FUNCNAME issue_put_op
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int issue_put_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
+static int issue_put_op(MPIDI_RMA_Op_t * rma_op, MPIR_Win * win_ptr,
MPIDI_RMA_Target_t * target_ptr, MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_VC_t *vc = NULL;
- MPID_Comm *comm_ptr = win_ptr->comm_ptr;
+ MPIR_Comm *comm_ptr = win_ptr->comm_ptr;
MPIDI_CH3_Pkt_put_t *put_pkt = &rma_op->pkt.put;
- MPID_Request *curr_req = NULL;
+ MPIR_Request *curr_req = NULL;
MPI_Datatype target_datatype;
- MPID_Datatype *target_dtp_ptr = NULL;
+ MPIDU_Datatype*target_dtp_ptr = NULL;
MPIDI_CH3_Ext_pkt_put_derived_t *ext_hdr_ptr = NULL;
MPI_Aint ext_hdr_sz = 0;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_PUT_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_PUT_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ISSUE_PUT_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ISSUE_PUT_OP);
put_pkt->flags |= flags;
@@ -420,19 +428,20 @@ static int issue_put_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
else {
MPI_Aint origin_type_size;
- MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_type_size);
+ MPIDU_Datatype_get_size_macro(rma_op->origin_datatype, origin_type_size);
/* If derived datatype on target, add extended packet header. */
MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(rma_op->pkt, target_datatype, mpi_errno);
if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
- MPID_Datatype_get_ptr(target_datatype, target_dtp_ptr);
+ MPIDU_Datatype_get_ptr(target_datatype, target_dtp_ptr);
void *dataloop_ptr = NULL;
/* dataloop is behind of extended header on origin.
* TODO: support extended header array */
ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_put_derived_t) + target_dtp_ptr->dataloop_size;
- ext_hdr_ptr = MPIU_Malloc(ext_hdr_sz);
+ ext_hdr_ptr = MPL_malloc(ext_hdr_sz);
+ MPL_VG_MEM_INIT(ext_hdr_ptr, ext_hdr_sz);
if (!ext_hdr_ptr) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_put_derived_t");
@@ -456,7 +465,7 @@ static int issue_put_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ISSUE_PUT_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ISSUE_PUT_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -473,30 +482,30 @@ static int issue_put_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
#define FUNCNAME issue_acc_op
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
+static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPIR_Win * win_ptr,
MPIDI_RMA_Target_t * target_ptr, MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_VC_t *vc = NULL;
- MPID_Comm *comm_ptr = win_ptr->comm_ptr;
+ MPIR_Comm *comm_ptr = win_ptr->comm_ptr;
MPIDI_CH3_Pkt_accum_t *accum_pkt = &rma_op->pkt.accum;
int i, j;
MPI_Aint stream_elem_count, stream_unit_count;
MPI_Aint predefined_dtp_size, predefined_dtp_extent, predefined_dtp_count;
MPI_Aint total_len, rest_len;
MPI_Aint origin_dtp_size;
- MPID_Datatype *origin_dtp_ptr = NULL;
- MPID_Datatype *target_dtp_ptr = NULL;
+ MPIDU_Datatype*origin_dtp_ptr = NULL;
+ MPIDU_Datatype*target_dtp_ptr = NULL;
void *ext_hdr_ptr = NULL;
MPI_Aint ext_hdr_sz = 0;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_ACC_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_ACC_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ISSUE_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ISSUE_ACC_OP);
MPIDI_Comm_get_vc_set_active(comm_ptr, rma_op->target_rank, &vc);
if (rma_op->pkt.type == MPIDI_CH3_PKT_ACCUMULATE_IMMED) {
- MPID_Request *curr_req = NULL;
+ MPIR_Request *curr_req = NULL;
accum_pkt->flags |= flags;
@@ -507,7 +516,7 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
if (curr_req != NULL) {
- MPIU_Assert(rma_op->reqs_size == 0 && rma_op->single_req == NULL);
+ MPIR_Assert(rma_op->reqs_size == 0 && rma_op->single_req == NULL);
rma_op->reqs_size = 1;
rma_op->single_req = curr_req;
@@ -516,29 +525,29 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
/* Get total length of origin data */
- MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_dtp_size);
+ MPIDU_Datatype_get_size_macro(rma_op->origin_datatype, origin_dtp_size);
total_len = origin_dtp_size * rma_op->origin_count;
/* Get size and count for predefined datatype elements */
if (MPIR_DATATYPE_IS_PREDEFINED(rma_op->origin_datatype)) {
predefined_dtp_size = origin_dtp_size;
predefined_dtp_count = rma_op->origin_count;
- MPID_Datatype_get_extent_macro(rma_op->origin_datatype, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(rma_op->origin_datatype, predefined_dtp_extent);
}
else {
- MPID_Datatype_get_ptr(rma_op->origin_datatype, origin_dtp_ptr);
- MPIU_Assert(origin_dtp_ptr != NULL && origin_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
- MPID_Datatype_get_size_macro(origin_dtp_ptr->basic_type, predefined_dtp_size);
+ MPIDU_Datatype_get_ptr(rma_op->origin_datatype, origin_dtp_ptr);
+ MPIR_Assert(origin_dtp_ptr != NULL && origin_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
+ MPIDU_Datatype_get_size_macro(origin_dtp_ptr->basic_type, predefined_dtp_size);
predefined_dtp_count = total_len / predefined_dtp_size;
- MPID_Datatype_get_extent_macro(origin_dtp_ptr->basic_type, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(origin_dtp_ptr->basic_type, predefined_dtp_extent);
}
- MPIU_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
+ MPIR_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
/* Calculate number of predefined elements in each stream unit, and
* total number of stream units. */
stream_elem_count = MPIDI_CH3U_Acc_stream_size / predefined_dtp_extent;
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
- MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ MPIR_Assert(stream_elem_count > 0 && stream_unit_count > 0);
/* If there are more than one stream unit, mark the current packet
* as stream packet */
@@ -547,13 +556,13 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
/* Get target datatype */
if (!MPIR_DATATYPE_IS_PREDEFINED(accum_pkt->datatype))
- MPID_Datatype_get_ptr(accum_pkt->datatype, target_dtp_ptr);
+ MPIDU_Datatype_get_ptr(accum_pkt->datatype, target_dtp_ptr);
rest_len = total_len;
- MPIU_Assert(rma_op->issued_stream_count >= 0);
+ MPIR_Assert(rma_op->issued_stream_count >= 0);
for (j = 0; j < stream_unit_count; j++) {
- MPIDI_msg_sz_t stream_offset, stream_size;
- MPID_Request *curr_req = NULL;
+ intptr_t stream_offset, stream_size;
+ MPIR_Request *curr_req = NULL;
if (j < rma_op->issued_stream_count)
continue;
@@ -571,7 +580,7 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
stream_offset = j * stream_elem_count * predefined_dtp_size;
- stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
+ stream_size = MPL_MIN(stream_elem_count * predefined_dtp_size, rest_len);
rest_len -= stream_size;
/* Set extended packet header if needed. */
@@ -584,12 +593,12 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
if (curr_req != NULL) {
if (rma_op->reqs_size == 0) {
- MPIU_Assert(rma_op->single_req == NULL && rma_op->multi_reqs == NULL);
+ MPIR_Assert(rma_op->single_req == NULL && rma_op->multi_reqs == NULL);
rma_op->reqs_size = stream_unit_count;
if (stream_unit_count > 1) {
rma_op->multi_reqs =
- (MPID_Request **) MPIU_Malloc(sizeof(MPID_Request *) * rma_op->reqs_size);
+ (MPIR_Request **) MPL_malloc(sizeof(MPIR_Request *) * rma_op->reqs_size);
for (i = 0; i < rma_op->reqs_size; i++)
rma_op->multi_reqs[i] = NULL;
}
@@ -607,7 +616,7 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE) {
/* if piggybacked with LOCK flag, we
* only issue the first streaming unit */
- MPIU_Assert(j == 0);
+ MPIR_Assert(j == 0);
break;
}
} /* end of for loop */
@@ -618,7 +627,7 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ISSUE_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ISSUE_ACC_OP);
return mpi_errno;
fn_fail:
if (rma_op->reqs_size == 1) {
@@ -626,7 +635,7 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
else if (rma_op->reqs_size > 1) {
if (rma_op->multi_reqs != NULL) {
- MPIU_Free(rma_op->multi_reqs);
+ MPL_free(rma_op->multi_reqs);
rma_op->multi_reqs = NULL;
}
}
@@ -640,30 +649,30 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
#define FUNCNAME issue_get_acc_op
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
+static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPIR_Win * win_ptr,
MPIDI_RMA_Target_t * target_ptr, MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_VC_t *vc = NULL;
- MPID_Comm *comm_ptr = win_ptr->comm_ptr;
+ MPIR_Comm *comm_ptr = win_ptr->comm_ptr;
MPIDI_CH3_Pkt_get_accum_t *get_accum_pkt = &rma_op->pkt.get_accum;
int i, j;
MPI_Aint stream_elem_count, stream_unit_count;
MPI_Aint predefined_dtp_size, predefined_dtp_count, predefined_dtp_extent;
MPI_Aint total_len, rest_len;
MPI_Aint target_dtp_size;
- MPID_Datatype *target_dtp_ptr = NULL;
+ MPIDU_Datatype*target_dtp_ptr = NULL;
void *ext_hdr_ptr = NULL;
MPI_Aint ext_hdr_sz = 0;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_GET_ACC_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_GET_ACC_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ISSUE_GET_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ISSUE_GET_ACC_OP);
MPIDI_Comm_get_vc_set_active(comm_ptr, rma_op->target_rank, &vc);
if (rma_op->pkt.type == MPIDI_CH3_PKT_GET_ACCUM_IMMED) {
- MPID_Request *resp_req = NULL;
- MPID_Request *curr_req = NULL;
+ MPIR_Request *resp_req = NULL;
+ MPIR_Request *curr_req = NULL;
get_accum_pkt->flags |= flags;
@@ -672,10 +681,10 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
/* Create a request for the GACC response. Store the response buf, count, and
* datatype in it, and pass the request's handle in the GACC packet. When the
* response comes from the target, it will contain the request handle. */
- resp_req = MPID_Request_create();
+ resp_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(resp_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- MPIU_Object_set_ref(resp_req, 2);
+ MPIR_Object_set_ref(resp_req, 2);
resp_req->dev.user_buf = rma_op->result_addr;
resp_req->dev.user_count = rma_op->result_count;
@@ -693,7 +702,7 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
if (curr_req != NULL) {
- MPID_Request_release(curr_req);
+ MPIR_Request_free(curr_req);
}
rma_op->single_req = resp_req;
@@ -702,29 +711,29 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
/* Get total length of target data */
- MPID_Datatype_get_size_macro(get_accum_pkt->datatype, target_dtp_size);
+ MPIDU_Datatype_get_size_macro(get_accum_pkt->datatype, target_dtp_size);
total_len = target_dtp_size * get_accum_pkt->count;
/* Get size and count for predefined datatype elements */
if (MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype)) {
predefined_dtp_size = target_dtp_size;
predefined_dtp_count = get_accum_pkt->count;
- MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(get_accum_pkt->datatype, predefined_dtp_extent);
}
else {
- MPID_Datatype_get_ptr(get_accum_pkt->datatype, target_dtp_ptr);
- MPIU_Assert(target_dtp_ptr != NULL && target_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
- MPID_Datatype_get_size_macro(target_dtp_ptr->basic_type, predefined_dtp_size);
+ MPIDU_Datatype_get_ptr(get_accum_pkt->datatype, target_dtp_ptr);
+ MPIR_Assert(target_dtp_ptr != NULL && target_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
+ MPIDU_Datatype_get_size_macro(target_dtp_ptr->basic_type, predefined_dtp_size);
predefined_dtp_count = total_len / predefined_dtp_size;
- MPID_Datatype_get_extent_macro(target_dtp_ptr->basic_type, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(target_dtp_ptr->basic_type, predefined_dtp_extent);
}
- MPIU_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
+ MPIR_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
/* Calculate number of predefined elements in each stream unit, and
* total number of stream units. */
stream_elem_count = MPIDI_CH3U_Acc_stream_size / predefined_dtp_extent;
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
- MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ MPIR_Assert(stream_elem_count > 0 && stream_unit_count > 0);
/* If there are more than one stream unit, mark the current packet
* as stream packet */
@@ -737,17 +746,17 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
if (rma_op->reqs_size > 1) {
rma_op->multi_reqs =
- (MPID_Request **) MPIU_Malloc(sizeof(MPID_Request *) * rma_op->reqs_size);
+ (MPIR_Request **) MPL_malloc(sizeof(MPIR_Request *) * rma_op->reqs_size);
for (i = 0; i < rma_op->reqs_size; i++)
rma_op->multi_reqs[i] = NULL;
}
- MPIU_Assert(rma_op->issued_stream_count >= 0);
+ MPIR_Assert(rma_op->issued_stream_count >= 0);
for (j = 0; j < stream_unit_count; j++) {
- MPIDI_msg_sz_t stream_offset, stream_size;
- MPID_Request *resp_req = NULL;
- MPID_Request *curr_req = NULL;
+ intptr_t stream_offset, stream_size;
+ MPIR_Request *resp_req = NULL;
+ MPIR_Request *curr_req = NULL;
if (j < rma_op->issued_stream_count)
continue;
@@ -767,10 +776,10 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
/* Create a request for the GACC response. Store the response buf, count, and
* datatype in it, and pass the request's handle in the GACC packet. When the
* response comes from the target, it will contain the request handle. */
- resp_req = MPID_Request_create();
+ resp_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(resp_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- MPIU_Object_set_ref(resp_req, 2);
+ MPIR_Object_set_ref(resp_req, 2);
resp_req->dev.user_buf = rma_op->result_addr;
resp_req->dev.user_count = rma_op->result_count;
@@ -780,8 +789,8 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
resp_req->dev.flags = flags;
if (!MPIR_DATATYPE_IS_PREDEFINED(resp_req->dev.datatype)) {
- MPID_Datatype *result_dtp = NULL;
- MPID_Datatype_get_ptr(resp_req->dev.datatype, result_dtp);
+ MPIDU_Datatype*result_dtp = NULL;
+ MPIDU_Datatype_get_ptr(resp_req->dev.datatype, result_dtp);
resp_req->dev.datatype_ptr = result_dtp;
/* this will cause the datatype to be freed when the
* request is freed. */
@@ -791,7 +800,7 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
get_accum_pkt->request_handle = resp_req->handle;
stream_offset = j * stream_elem_count * predefined_dtp_size;
- stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
+ stream_size = MPL_MIN(stream_elem_count * predefined_dtp_size, rest_len);
rest_len -= stream_size;
/* Set extended packet header if needed. */
@@ -810,7 +819,7 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
MPIR_ERR_POP(mpi_errno);
if (curr_req != NULL) {
- MPID_Request_release(curr_req);
+ MPIR_Request_free(curr_req);
}
if (rma_op->reqs_size == 1)
@@ -824,7 +833,7 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
get_accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE) {
/* if piggybacked with LOCK flag, we
* only issue the first streaming unit */
- MPIU_Assert(j == 0);
+ MPIR_Assert(j == 0);
break;
}
} /* end of for loop */
@@ -835,7 +844,7 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ISSUE_GET_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ISSUE_GET_ACC_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -843,8 +852,8 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
/* error case: drop both our reference to the request and the
* progress engine's reference to it, since the progress
* engine didn't get a chance to see it yet. */
- MPID_Request_release(rma_op->single_req);
- MPID_Request_release(rma_op->single_req);
+ MPIR_Request_free(rma_op->single_req);
+ MPIR_Request_free(rma_op->single_req);
rma_op->single_req = NULL;
}
else if (rma_op->reqs_size > 1) {
@@ -854,11 +863,11 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
* and the progress engine's reference to it, since
* the progress engine didn't get a chance to see it
* yet. */
- MPID_Request_release(rma_op->multi_reqs[i]);
- MPID_Request_release(rma_op->multi_reqs[i]);
+ MPIR_Request_free(rma_op->multi_reqs[i]);
+ MPIR_Request_free(rma_op->multi_reqs[i]);
}
}
- MPIU_Free(rma_op->multi_reqs);
+ MPL_free(rma_op->multi_reqs);
rma_op->multi_reqs = NULL;
}
rma_op->reqs_size = 0;
@@ -871,23 +880,23 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
#define FUNCNAME issue_get_op
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
+static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPIR_Win * win_ptr,
MPIDI_RMA_Target_t * target_ptr, MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_CH3_Pkt_get_t *get_pkt = &rma_op->pkt.get;
int mpi_errno = MPI_SUCCESS;
MPIDI_VC_t *vc;
- MPID_Comm *comm_ptr;
- MPID_Datatype *dtp;
+ MPIR_Comm *comm_ptr;
+ MPIDU_Datatype*dtp;
MPI_Datatype target_datatype;
- MPID_Request *req = NULL;
- MPID_Request *curr_req = NULL;
+ MPIR_Request *req = NULL;
+ MPIR_Request *curr_req = NULL;
MPIDI_CH3_Ext_pkt_get_derived_t *ext_hdr_ptr = NULL;
MPI_Aint ext_hdr_sz = 0;
MPL_IOV iov[MPL_IOV_LIMIT];
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_GET_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_GET_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ISSUE_GET_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ISSUE_GET_OP);
rma_op->reqs_size = 1;
@@ -895,12 +904,12 @@ static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
* and pass a handle to it in the get packet. When the get
* response comes from the target, it will contain the request
* handle. */
- curr_req = MPID_Request_create();
+ curr_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (curr_req == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomemreq");
}
- MPIU_Object_set_ref(curr_req, 2);
+ MPIR_Object_set_ref(curr_req, 2);
curr_req->dev.user_buf = rma_op->origin_addr;
curr_req->dev.user_count = rma_op->origin_count;
@@ -908,7 +917,7 @@ static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
curr_req->dev.target_win_handle = MPI_WIN_NULL;
curr_req->dev.source_win_handle = win_ptr->handle;
if (!MPIR_DATATYPE_IS_PREDEFINED(curr_req->dev.datatype)) {
- MPID_Datatype_get_ptr(curr_req->dev.datatype, dtp);
+ MPIDU_Datatype_get_ptr(curr_req->dev.datatype, dtp);
curr_req->dev.datatype_ptr = dtp;
/* this will cause the datatype to be freed when the
* request is freed. */
@@ -930,14 +939,15 @@ static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
}
else {
/* derived datatype on target. */
- MPID_Datatype_get_ptr(target_datatype, dtp);
+ MPIDU_Datatype_get_ptr(target_datatype, dtp);
void *dataloop_ptr = NULL;
/* set extended packet header.
* dataloop is behind of extended header on origin.
* TODO: support extended header array */
ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_get_derived_t) + dtp->dataloop_size;
- ext_hdr_ptr = MPIU_Malloc(ext_hdr_sz);
+ ext_hdr_ptr = MPL_malloc(ext_hdr_sz);
+ MPL_VG_MEM_INIT(ext_hdr_ptr, ext_hdr_sz);
if (!ext_hdr_ptr) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_get_derived_t");
@@ -959,7 +969,7 @@ static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
/* release the target datatype */
- MPID_Datatype_release(dtp);
+ MPIDU_Datatype_release(dtp);
/* If send is finished, we free extended header immediately.
* Otherwise, store its pointer in request thus it can be freed when request is freed.*/
@@ -967,7 +977,7 @@ static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
req->dev.ext_hdr_ptr = ext_hdr_ptr;
}
else {
- MPIU_Free(ext_hdr_ptr);
+ MPL_free(ext_hdr_ptr);
}
}
@@ -977,13 +987,13 @@ static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
/* release the request returned by iStartMsg or iStartMsgv */
if (req != NULL) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
rma_op->single_req = curr_req;
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ISSUE_GET_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ISSUE_GET_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -999,30 +1009,30 @@ static int issue_get_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int issue_cas_op(MPIDI_RMA_Op_t * rma_op,
- MPID_Win * win_ptr, MPIDI_RMA_Target_t * target_ptr,
+ MPIR_Win * win_ptr, MPIDI_RMA_Target_t * target_ptr,
MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_VC_t *vc = NULL;
- MPID_Comm *comm_ptr = win_ptr->comm_ptr;
+ MPIR_Comm *comm_ptr = win_ptr->comm_ptr;
MPIDI_CH3_Pkt_cas_t *cas_pkt = &rma_op->pkt.cas;
- MPID_Request *rmw_req = NULL;
- MPID_Request *curr_req = NULL;
+ MPIR_Request *rmw_req = NULL;
+ MPIR_Request *curr_req = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_CAS_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_CAS_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ISSUE_CAS_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ISSUE_CAS_OP);
rma_op->reqs_size = 1;
/* Create a request for the RMW response. Store the origin buf, count, and
* datatype in it, and pass the request's handle RMW packet. When the
* response comes from the target, it will contain the request handle. */
- curr_req = MPID_Request_create();
+ curr_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(curr_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
/* Set refs on the request to 2: one for the response message, and one for
* the partial completion handler */
- MPIU_Object_set_ref(curr_req, 2);
+ MPIR_Object_set_ref(curr_req, 2);
curr_req->dev.user_buf = rma_op->result_addr;
curr_req->dev.datatype = rma_op->result_datatype;
@@ -1040,13 +1050,13 @@ static int issue_cas_op(MPIDI_RMA_Op_t * rma_op,
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
if (rmw_req != NULL) {
- MPID_Request_release(rmw_req);
+ MPIR_Request_free(rmw_req);
}
rma_op->single_req = curr_req;
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ISSUE_CAS_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ISSUE_CAS_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1062,28 +1072,28 @@ static int issue_cas_op(MPIDI_RMA_Op_t * rma_op,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int issue_fop_op(MPIDI_RMA_Op_t * rma_op,
- MPID_Win * win_ptr, MPIDI_RMA_Target_t * target_ptr,
+ MPIR_Win * win_ptr, MPIDI_RMA_Target_t * target_ptr,
MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_VC_t *vc = NULL;
- MPID_Comm *comm_ptr = win_ptr->comm_ptr;
+ MPIR_Comm *comm_ptr = win_ptr->comm_ptr;
MPIDI_CH3_Pkt_fop_t *fop_pkt = &rma_op->pkt.fop;
- MPID_Request *resp_req = NULL;
- MPID_Request *curr_req = NULL;
+ MPIR_Request *resp_req = NULL;
+ MPIR_Request *curr_req = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_FOP_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_FOP_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ISSUE_FOP_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ISSUE_FOP_OP);
rma_op->reqs_size = 1;
/* Create a request for the GACC response. Store the response buf, count, and
* datatype in it, and pass the request's handle in the GACC packet. When the
* response comes from the target, it will contain the request handle. */
- resp_req = MPID_Request_create();
+ resp_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(resp_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- MPIU_Object_set_ref(resp_req, 2);
+ MPIR_Object_set_ref(resp_req, 2);
resp_req->dev.user_buf = rma_op->result_addr;
resp_req->dev.datatype = rma_op->result_datatype;
@@ -1105,7 +1115,7 @@ static int issue_fop_op(MPIDI_RMA_Op_t * rma_op,
}
else {
MPI_Aint origin_dtp_size;
- MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_dtp_size);
+ MPIDU_Datatype_get_size_macro(rma_op->origin_datatype, origin_dtp_size);
mpi_errno = issue_from_origin_buffer(rma_op, vc, NULL, 0, /*ext_hdr_ptr, ext_hdr_sz */
0, 1 * origin_dtp_size, &curr_req);
if (mpi_errno != MPI_SUCCESS)
@@ -1113,13 +1123,13 @@ static int issue_fop_op(MPIDI_RMA_Op_t * rma_op,
}
if (curr_req != NULL) {
- MPID_Request_release(curr_req);
+ MPIR_Request_free(curr_req);
}
rma_op->single_req = resp_req;
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ISSUE_FOP_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ISSUE_FOP_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1136,13 +1146,13 @@ static int issue_fop_op(MPIDI_RMA_Op_t * rma_op,
#define FUNCNAME issue_rma_op
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int issue_rma_op(MPIDI_RMA_Op_t * op_ptr, MPID_Win * win_ptr,
+static inline int issue_rma_op(MPIDI_RMA_Op_t * op_ptr, MPIR_Win * win_ptr,
MPIDI_RMA_Target_t * target_ptr, MPIDI_CH3_Pkt_flags_t flags)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_RMA_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ISSUE_RMA_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ISSUE_RMA_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ISSUE_RMA_OP);
switch (op_ptr->pkt.type) {
case (MPIDI_CH3_PKT_PUT):
@@ -1175,7 +1185,7 @@ static inline int issue_rma_op(MPIDI_RMA_Op_t * op_ptr, MPID_Win * win_ptr,
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ISSUE_RMA_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ISSUE_RMA_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
diff --git a/src/mpid/ch3/include/mpid_rma_lockqueue.h b/src/mpid/ch3/include/mpid_rma_lockqueue.h
index 057b2b9..b7aaab6 100644
--- a/src/mpid/ch3/include/mpid_rma_lockqueue.h
+++ b/src/mpid/ch3/include/mpid_rma_lockqueue.h
@@ -10,8 +10,8 @@
#include "mpl_utlist.h"
#include "mpid_rma_types.h"
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_lockqueue_alloc);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_winlock_getlocallock);
+extern MPIR_T_pvar_timer_t PVAR_TIMER_rma_lockqueue_alloc ATTRIBUTE((unused));
+extern MPIR_T_pvar_timer_t PVAR_TIMER_rma_winlock_getlocallock ATTRIBUTE((unused));
/* MPIDI_CH3I_Win_target_lock_entry_alloc(): return a new lock queue entry and
* initialize it. If we cannot get one, return NULL. */
@@ -19,7 +19,7 @@ MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_winlock_getlocallock);
#define FUNCNAME MPIDI_CH3I_Win_target_lock_entry_alloc
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline MPIDI_RMA_Target_lock_entry_t *MPIDI_CH3I_Win_target_lock_entry_alloc(MPID_Win *
+static inline MPIDI_RMA_Target_lock_entry_t *MPIDI_CH3I_Win_target_lock_entry_alloc(MPIR_Win *
win_ptr,
MPIDI_CH3_Pkt_t
* pkt)
@@ -33,7 +33,7 @@ static inline MPIDI_RMA_Target_lock_entry_t *MPIDI_CH3I_Win_target_lock_entry_al
if (new_ptr != NULL) {
new_ptr->next = NULL;
- MPIU_Memcpy(&(new_ptr->pkt), pkt, sizeof(*pkt));
+ MPIR_Memcpy(&(new_ptr->pkt), pkt, sizeof(*pkt));
new_ptr->vc = NULL;
new_ptr->data = NULL;
new_ptr->buf_size = 0;
@@ -49,7 +49,7 @@ static inline MPIDI_RMA_Target_lock_entry_t *MPIDI_CH3I_Win_target_lock_entry_al
#define FUNCNAME MPIDI_CH3I_Win_target_lock_entry_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_target_lock_entry_free(MPID_Win * win_ptr,
+static inline int MPIDI_CH3I_Win_target_lock_entry_free(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t *
target_lock_entry)
{
@@ -57,7 +57,7 @@ static inline int MPIDI_CH3I_Win_target_lock_entry_free(MPID_Win * win_ptr,
if (target_lock_entry->data != NULL) {
win_ptr->current_target_lock_data_bytes -= target_lock_entry->buf_size;
- MPIU_Free(target_lock_entry->data);
+ MPL_free(target_lock_entry->data);
}
/* use PREPEND when return objects back to the pool
diff --git a/src/mpid/ch3/include/mpid_rma_oplist.h b/src/mpid/ch3/include/mpid_rma_oplist.h
index 1680ae8..767bcc7 100644
--- a/src/mpid/ch3/include/mpid_rma_oplist.h
+++ b/src/mpid/ch3/include/mpid_rma_oplist.h
@@ -10,15 +10,15 @@
#include "mpl_utlist.h"
#include "mpid_rma_types.h"
-int MPIDI_CH3I_RMA_Cleanup_ops_aggressive(MPID_Win * win_ptr);
-int MPIDI_CH3I_RMA_Cleanup_target_aggressive(MPID_Win * win_ptr, MPIDI_RMA_Target_t ** target);
-int MPIDI_CH3I_RMA_Make_progress_target(MPID_Win * win_ptr, int target_rank, int *made_progress);
-int MPIDI_CH3I_RMA_Make_progress_win(MPID_Win * win_ptr, int *made_progress);
+int MPIDI_CH3I_RMA_Cleanup_ops_aggressive(MPIR_Win * win_ptr);
+int MPIDI_CH3I_RMA_Cleanup_target_aggressive(MPIR_Win * win_ptr, MPIDI_RMA_Target_t ** target);
+int MPIDI_CH3I_RMA_Make_progress_target(MPIR_Win * win_ptr, int target_rank, int *made_progress);
+int MPIDI_CH3I_RMA_Make_progress_win(MPIR_Win * win_ptr, int *made_progress);
extern MPIDI_RMA_Op_t *global_rma_op_pool_head, *global_rma_op_pool_start;
extern MPIDI_RMA_Target_t *global_rma_target_pool_head, *global_rma_target_pool_start;
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_rmaqueue_alloc);
+extern MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmaqueue_alloc ATTRIBUTE((unused));
/* This macro returns two flags: local_completed and remote_completed,
* to indicate if the completion is reached on this target. */
@@ -113,7 +113,7 @@ MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_rmaqueue_alloc);
#define FUNCNAME MPIDI_CH3I_Win_set_active
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_set_active(MPID_Win * win_ptr)
+static inline int MPIDI_CH3I_Win_set_active(MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
@@ -140,7 +140,7 @@ static inline int MPIDI_CH3I_Win_set_active(MPID_Win * win_ptr)
#define FUNCNAME MPIDI_CH3I_Win_set_inactive
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_set_inactive(MPID_Win * win_ptr)
+static inline int MPIDI_CH3I_Win_set_inactive(MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
@@ -168,7 +168,7 @@ static inline int MPIDI_CH3I_Win_set_inactive(MPID_Win * win_ptr)
#define FUNCNAME MPIDI_CH3I_Win_op_alloc
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline MPIDI_RMA_Op_t *MPIDI_CH3I_Win_op_alloc(MPID_Win * win_ptr)
+static inline MPIDI_RMA_Op_t *MPIDI_CH3I_Win_op_alloc(MPIR_Win * win_ptr)
{
MPIDI_RMA_Op_t *e;
@@ -205,12 +205,12 @@ static inline MPIDI_RMA_Op_t *MPIDI_CH3I_Win_op_alloc(MPID_Win * win_ptr)
#define FUNCNAME MPIDI_CH3I_Win_op_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_op_free(MPID_Win * win_ptr, MPIDI_RMA_Op_t * e)
+static inline int MPIDI_CH3I_Win_op_free(MPIR_Win * win_ptr, MPIDI_RMA_Op_t * e)
{
int mpi_errno = MPI_SUCCESS;
if (e->multi_reqs != NULL) {
- MPIU_Free(e->multi_reqs);
+ MPL_free(e->multi_reqs);
}
/* We enqueue elements to the right pool, so when they get freed
@@ -232,7 +232,7 @@ static inline int MPIDI_CH3I_Win_op_free(MPID_Win * win_ptr, MPIDI_RMA_Op_t * e)
#define FUNCNAME MPIDI_CH3I_Win_target_alloc
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline MPIDI_RMA_Target_t *MPIDI_CH3I_Win_target_alloc(MPID_Win * win_ptr)
+static inline MPIDI_RMA_Target_t *MPIDI_CH3I_Win_target_alloc(MPIR_Win * win_ptr)
{
MPIDI_RMA_Target_t *e;
@@ -275,15 +275,15 @@ static inline MPIDI_RMA_Target_t *MPIDI_CH3I_Win_target_alloc(MPID_Win * win_ptr
#define FUNCNAME MPIDI_CH3I_Win_target_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_target_free(MPID_Win * win_ptr, MPIDI_RMA_Target_t * e)
+static inline int MPIDI_CH3I_Win_target_free(MPIR_Win * win_ptr, MPIDI_RMA_Target_t * e)
{
int mpi_errno = MPI_SUCCESS;
/* We enqueue elements to the right pool, so when they get freed
* at window free time, they won't conflict with the global pool
* or other windows */
- MPIU_Assert(e->pending_net_ops_list_head == NULL);
- MPIU_Assert(e->pending_user_ops_list_head == NULL);
+ MPIR_Assert(e->pending_net_ops_list_head == NULL);
+ MPIR_Assert(e->pending_user_ops_list_head == NULL);
/* use PREPEND when return objects back to the pool
* in order to improve cache performance */
@@ -301,7 +301,7 @@ static inline int MPIDI_CH3I_Win_target_free(MPID_Win * win_ptr, MPIDI_RMA_Targe
#define FUNCNAME MPIDI_CH3I_Win_create_target
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_create_target(MPID_Win * win_ptr, int target_rank,
+static inline int MPIDI_CH3I_Win_create_target(MPIR_Win * win_ptr, int target_rank,
MPIDI_RMA_Target_t ** e)
{
int mpi_errno = MPI_SUCCESS;
@@ -337,7 +337,7 @@ static inline int MPIDI_CH3I_Win_create_target(MPID_Win * win_ptr, int target_ra
#define FUNCNAME MPIDI_CH3I_Win_find_target
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_find_target(MPID_Win * win_ptr, int target_rank,
+static inline int MPIDI_CH3I_Win_find_target(MPIR_Win * win_ptr, int target_rank,
MPIDI_RMA_Target_t ** e)
{
int mpi_errno = MPI_SUCCESS;
@@ -368,7 +368,7 @@ static inline int MPIDI_CH3I_Win_find_target(MPID_Win * win_ptr, int target_rank
#define FUNCNAME MPIDI_CH3I_Win_enqueue_op
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_enqueue_op(MPID_Win * win_ptr, MPIDI_RMA_Op_t * op)
+static inline int MPIDI_CH3I_Win_enqueue_op(MPIR_Win * win_ptr, MPIDI_RMA_Op_t * op)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_RMA_Target_t *target = NULL;
@@ -450,7 +450,7 @@ static inline int MPIDI_CH3I_Win_enqueue_op(MPID_Win * win_ptr, MPIDI_RMA_Op_t *
#define FUNCNAME MPIDI_CH3I_Win_target_dequeue_and_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_target_dequeue_and_free(MPID_Win * win_ptr, MPIDI_RMA_Target_t * e)
+static inline int MPIDI_CH3I_Win_target_dequeue_and_free(MPIR_Win * win_ptr, MPIDI_RMA_Target_t * e)
{
int mpi_errno = MPI_SUCCESS;
int target_rank = e->target_rank;
@@ -474,7 +474,7 @@ static inline int MPIDI_CH3I_Win_target_dequeue_and_free(MPID_Win * win_ptr, MPI
#define FUNCNAME MPIDI_CH3I_RMA_Cleanup_targets_win
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_RMA_Cleanup_targets_win(MPID_Win * win_ptr)
+static inline int MPIDI_CH3I_RMA_Cleanup_targets_win(MPIR_Win * win_ptr)
{
MPIDI_RMA_Target_t *target = NULL, *next_target = NULL;
int i, mpi_errno = MPI_SUCCESS;
@@ -499,7 +499,7 @@ static inline int MPIDI_CH3I_RMA_Cleanup_targets_win(MPID_Win * win_ptr)
#define FUNCNAME MPIDI_CH3I_Win_get_op
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Win_get_op(MPID_Win * win_ptr, MPIDI_RMA_Op_t ** e)
+static inline int MPIDI_CH3I_Win_get_op(MPIR_Win * win_ptr, MPIDI_RMA_Op_t ** e)
{
MPIDI_RMA_Op_t *new_ptr = NULL;
int mpi_errno = MPI_SUCCESS;
@@ -534,12 +534,12 @@ static inline int MPIDI_CH3I_Win_get_op(MPID_Win * win_ptr, MPIDI_RMA_Op_t ** e)
#define FUNCNAME MPIDI_CH3I_RMA_Ops_free_elem
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline void MPIDI_CH3I_RMA_Ops_free_elem(MPID_Win * win_ptr, MPIDI_RMA_Ops_list_t * list,
+static inline void MPIDI_CH3I_RMA_Ops_free_elem(MPIR_Win * win_ptr, MPIDI_RMA_Ops_list_t * list,
MPIDI_RMA_Op_t * curr_ptr)
{
MPIDI_RMA_Op_t *tmp_ptr = curr_ptr;
- MPIU_Assert(curr_ptr != NULL);
+ MPIR_Assert(curr_ptr != NULL);
MPL_DL_DELETE(*list, curr_ptr);
diff --git a/src/mpid/ch3/include/mpid_rma_shm.h b/src/mpid/ch3/include/mpid_rma_shm.h
index 1e82d3e..a33ddda 100644
--- a/src/mpid/ch3/include/mpid_rma_shm.h
+++ b/src/mpid/ch3/include/mpid_rma_shm.h
@@ -254,18 +254,18 @@ static inline int shm_copy(const void *src, int scount, MPI_Datatype stype,
static inline int MPIDI_CH3I_Shm_put_op(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype,
- MPID_Win * win_ptr)
+ MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
void *base = NULL;
int disp_unit;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_PUT_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_PUT_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_PUT_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_SHM_PUT_OP);
if (win_ptr->shm_allocated == TRUE) {
int local_target_rank = win_ptr->comm_ptr->intranode_table[target_rank];
- MPIU_Assert(local_target_rank >= 0);
+ MPIR_Assert(local_target_rank >= 0);
base = win_ptr->shm_base_addrs[local_target_rank];
disp_unit = win_ptr->basic_info_table[target_rank].disp_unit;
}
@@ -281,7 +281,7 @@ static inline int MPIDI_CH3I_Shm_put_op(const void *origin_addr, int origin_coun
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_PUT_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_SHM_PUT_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -297,7 +297,7 @@ static inline int MPIDI_CH3I_Shm_put_op(const void *origin_addr, int origin_coun
static inline int MPIDI_CH3I_Shm_acc_op(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr)
+ MPIR_Win * win_ptr)
{
void *base = NULL;
int disp_unit, shm_op = 0;
@@ -308,14 +308,14 @@ static inline int MPIDI_CH3I_Shm_acc_op(const void *origin_addr, int origin_coun
MPI_Aint predefined_dtp_size, predefined_dtp_extent, predefined_dtp_count;
MPI_Aint total_len, rest_len;
MPI_Aint origin_dtp_size;
- MPID_Datatype *origin_dtp_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_ACC_OP);
+ MPIDU_Datatype*origin_dtp_ptr = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_ACC_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_SHM_ACC_OP);
if (win_ptr->shm_allocated == TRUE) {
int local_target_rank = win_ptr->comm_ptr->intranode_table[target_rank];
- MPIU_Assert(local_target_rank >= 0);
+ MPIR_Assert(local_target_rank >= 0);
shm_op = 1;
base = win_ptr->shm_base_addrs[local_target_rank];
disp_unit = win_ptr->basic_info_table[target_rank].disp_unit;
@@ -343,55 +343,55 @@ static inline int MPIDI_CH3I_Shm_acc_op(const void *origin_addr, int origin_coun
}
/* Get total length of origin data */
- MPID_Datatype_get_size_macro(origin_datatype, origin_dtp_size);
+ MPIDU_Datatype_get_size_macro(origin_datatype, origin_dtp_size);
total_len = origin_dtp_size * origin_count;
- MPID_Datatype_get_ptr(origin_datatype, origin_dtp_ptr);
- MPIU_Assert(origin_dtp_ptr != NULL && origin_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
+ MPIDU_Datatype_get_ptr(origin_datatype, origin_dtp_ptr);
+ MPIR_Assert(origin_dtp_ptr != NULL && origin_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
basic_type = origin_dtp_ptr->basic_type;
- MPID_Datatype_get_size_macro(basic_type, predefined_dtp_size);
+ MPIDU_Datatype_get_size_macro(basic_type, predefined_dtp_size);
predefined_dtp_count = total_len / predefined_dtp_size;
- MPID_Datatype_get_extent_macro(basic_type, predefined_dtp_extent);
- MPIU_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
+ MPIDU_Datatype_get_extent_macro(basic_type, predefined_dtp_extent);
+ MPIR_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
stream_elem_count = MPIDI_CH3U_Acc_stream_size / predefined_dtp_extent;
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
- MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ MPIR_Assert(stream_elem_count > 0 && stream_unit_count > 0);
rest_len = total_len;
for (i = 0; i < stream_unit_count; i++) {
- MPID_Segment *seg = NULL;
+ MPIDU_Segment *seg = NULL;
void *packed_buf = NULL;
MPI_Aint first, last;
int is_predef_contig;
MPI_Aint stream_offset, stream_size, stream_count;
stream_offset = i * stream_elem_count * predefined_dtp_size;
- stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
+ stream_size = MPL_MIN(stream_elem_count * predefined_dtp_size, rest_len);
stream_count = stream_size / predefined_dtp_size;
rest_len -= stream_size;
first = stream_offset;
last = stream_offset + stream_size;
- packed_buf = MPIU_Malloc(stream_size);
+ packed_buf = MPL_malloc(stream_size);
- seg = MPID_Segment_alloc();
+ seg = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1(seg == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
- "MPID_Segment");
- MPID_Segment_init(origin_addr, origin_count, origin_datatype, seg, 0);
- MPID_Segment_pack(seg, first, &last, packed_buf);
- MPID_Segment_free(seg);
+ "MPIDU_Segment");
+ MPIDU_Segment_init(origin_addr, origin_count, origin_datatype, seg, 0);
+ MPIDU_Segment_pack(seg, first, &last, packed_buf);
+ MPIDU_Segment_free(seg);
- MPID_Datatype_is_contig(basic_type, &is_predef_contig);
+ MPIDU_Datatype_is_contig(basic_type, &is_predef_contig);
if (!is_predef_contig) {
- void *tmpbuf = MPIU_Malloc(stream_count * predefined_dtp_extent);
+ void *tmpbuf = MPL_malloc(stream_count * predefined_dtp_extent);
mpi_errno = MPIR_Localcopy(tmpbuf, stream_count, basic_type,
packed_buf, stream_size, MPI_BYTE);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Free(packed_buf);
+ MPL_free(packed_buf);
packed_buf = tmpbuf;
}
@@ -399,7 +399,7 @@ static inline int MPIDI_CH3I_Shm_acc_op(const void *origin_addr, int origin_coun
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
}
- MPIU_Assert(stream_count == (int) stream_count);
+ MPIR_Assert(stream_count == (int) stream_count);
mpi_errno = do_accumulate_op((void *) packed_buf, (int) stream_count, basic_type,
(void *) ((char *) base + disp_unit * target_disp),
target_count, target_datatype, stream_offset, op);
@@ -411,11 +411,11 @@ static inline int MPIDI_CH3I_Shm_acc_op(const void *origin_addr, int origin_coun
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Free(packed_buf);
+ MPL_free(packed_buf);
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ACC_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -433,7 +433,7 @@ static inline int MPIDI_CH3I_Shm_get_acc_op(const void *origin_addr, int origin_
MPI_Datatype result_datatype, int target_rank, MPI_Aint
target_disp, int target_count,
MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr)
+ MPIR_Win * win_ptr)
{
int disp_unit, shm_locked = 0;
void *base = NULL;
@@ -443,12 +443,12 @@ static inline int MPIDI_CH3I_Shm_get_acc_op(const void *origin_addr, int origin_
MPI_Aint predefined_dtp_size, predefined_dtp_extent, predefined_dtp_count;
MPI_Aint total_len, rest_len;
MPI_Aint origin_dtp_size;
- MPID_Datatype *origin_dtp_ptr = NULL;
+ MPIDU_Datatype*origin_dtp_ptr = NULL;
int is_empty_origin = FALSE;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_GET_ACC_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_GET_ACC_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_GET_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_SHM_GET_ACC_OP);
/* Judge if origin buffer is empty */
if (op == MPI_NO_OP)
@@ -456,7 +456,7 @@ static inline int MPIDI_CH3I_Shm_get_acc_op(const void *origin_addr, int origin_
if (win_ptr->shm_allocated == TRUE) {
int local_target_rank = win_ptr->comm_ptr->intranode_table[target_rank];
- MPIU_Assert(local_target_rank >= 0);
+ MPIR_Assert(local_target_rank >= 0);
base = win_ptr->shm_base_addrs[local_target_rank];
disp_unit = win_ptr->basic_info_table[target_rank].disp_unit;
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
@@ -490,59 +490,59 @@ static inline int MPIDI_CH3I_Shm_get_acc_op(const void *origin_addr, int origin_
}
/* Get total length of origin data */
- MPID_Datatype_get_size_macro(origin_datatype, origin_dtp_size);
+ MPIDU_Datatype_get_size_macro(origin_datatype, origin_dtp_size);
total_len = origin_dtp_size * origin_count;
- MPID_Datatype_get_ptr(origin_datatype, origin_dtp_ptr);
- MPIU_Assert(origin_dtp_ptr != NULL && origin_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
+ MPIDU_Datatype_get_ptr(origin_datatype, origin_dtp_ptr);
+ MPIR_Assert(origin_dtp_ptr != NULL && origin_dtp_ptr->basic_type != MPI_DATATYPE_NULL);
basic_type = origin_dtp_ptr->basic_type;
- MPID_Datatype_get_size_macro(basic_type, predefined_dtp_size);
+ MPIDU_Datatype_get_size_macro(basic_type, predefined_dtp_size);
predefined_dtp_count = total_len / predefined_dtp_size;
- MPID_Datatype_get_extent_macro(basic_type, predefined_dtp_extent);
- MPIU_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
+ MPIDU_Datatype_get_extent_macro(basic_type, predefined_dtp_extent);
+ MPIR_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 && predefined_dtp_extent > 0);
stream_elem_count = MPIDI_CH3U_Acc_stream_size / predefined_dtp_extent;
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
- MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ MPIR_Assert(stream_elem_count > 0 && stream_unit_count > 0);
rest_len = total_len;
for (i = 0; i < stream_unit_count; i++) {
- MPID_Segment *seg = NULL;
+ MPIDU_Segment *seg = NULL;
void *packed_buf = NULL;
MPI_Aint first, last;
int is_predef_contig;
MPI_Aint stream_offset, stream_size, stream_count;
stream_offset = i * stream_elem_count * predefined_dtp_size;
- stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
+ stream_size = MPL_MIN(stream_elem_count * predefined_dtp_size, rest_len);
stream_count = stream_size / predefined_dtp_size;
rest_len -= stream_size;
first = stream_offset;
last = stream_offset + stream_size;
- packed_buf = MPIU_Malloc(stream_size);
+ packed_buf = MPL_malloc(stream_size);
- seg = MPID_Segment_alloc();
+ seg = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1(seg == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
- "MPID_Segment");
- MPID_Segment_init(origin_addr, origin_count, origin_datatype, seg, 0);
- MPID_Segment_pack(seg, first, &last, packed_buf);
- MPID_Segment_free(seg);
+ "MPIDU_Segment");
+ MPIDU_Segment_init(origin_addr, origin_count, origin_datatype, seg, 0);
+ MPIDU_Segment_pack(seg, first, &last, packed_buf);
+ MPIDU_Segment_free(seg);
- MPID_Datatype_is_contig(basic_type, &is_predef_contig);
+ MPIDU_Datatype_is_contig(basic_type, &is_predef_contig);
if (!is_predef_contig) {
- void *tmpbuf = MPIU_Malloc(stream_count * predefined_dtp_extent);
+ void *tmpbuf = MPL_malloc(stream_count * predefined_dtp_extent);
mpi_errno = MPIR_Localcopy(tmpbuf, stream_count, basic_type,
packed_buf, stream_size, MPI_BYTE);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Free(packed_buf);
+ MPL_free(packed_buf);
packed_buf = tmpbuf;
}
- MPIU_Assert(stream_count == (int) stream_count);
+ MPIR_Assert(stream_count == (int) stream_count);
mpi_errno = do_accumulate_op((void *) packed_buf, (int) stream_count, basic_type,
(void *) ((char *) base + disp_unit * target_disp),
target_count, target_datatype, stream_offset, op);
@@ -550,7 +550,7 @@ static inline int MPIDI_CH3I_Shm_get_acc_op(const void *origin_addr, int origin_
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Free(packed_buf);
+ MPL_free(packed_buf);
}
if (shm_locked) {
@@ -559,7 +559,7 @@ static inline int MPIDI_CH3I_Shm_get_acc_op(const void *origin_addr, int origin_
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_ACC_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_ACC_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -578,18 +578,18 @@ static inline int MPIDI_CH3I_Shm_get_acc_op(const void *origin_addr, int origin_
static inline int MPIDI_CH3I_Shm_get_op(void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank,
MPI_Aint target_disp, int target_count,
- MPI_Datatype target_datatype, MPID_Win * win_ptr)
+ MPI_Datatype target_datatype, MPIR_Win * win_ptr)
{
void *base = NULL;
int disp_unit;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_GET_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_GET_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_GET_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_SHM_GET_OP);
if (win_ptr->shm_allocated == TRUE) {
int local_target_rank = win_ptr->comm_ptr->intranode_table[target_rank];
- MPIU_Assert(local_target_rank >= 0);
+ MPIR_Assert(local_target_rank >= 0);
base = win_ptr->shm_base_addrs[local_target_rank];
disp_unit = win_ptr->basic_info_table[target_rank].disp_unit;
}
@@ -605,7 +605,7 @@ static inline int MPIDI_CH3I_Shm_get_op(void *origin_addr, int origin_count,
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -620,20 +620,20 @@ static inline int MPIDI_CH3I_Shm_get_op(void *origin_addr, int origin_count,
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline int MPIDI_CH3I_Shm_cas_op(const void *origin_addr, const void *compare_addr,
void *result_addr, MPI_Datatype datatype, int target_rank,
- MPI_Aint target_disp, MPID_Win * win_ptr)
+ MPI_Aint target_disp, MPIR_Win * win_ptr)
{
void *base = NULL, *dest_addr = NULL;
int disp_unit;
MPI_Aint len;
int shm_locked = 0;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_CAS_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_CAS_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_CAS_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_SHM_CAS_OP);
if (win_ptr->shm_allocated == TRUE) {
int local_target_rank = win_ptr->comm_ptr->intranode_table[target_rank];
- MPIU_Assert(local_target_rank >= 0);
+ MPIR_Assert(local_target_rank >= 0);
base = win_ptr->shm_base_addrs[local_target_rank];
disp_unit = win_ptr->basic_info_table[target_rank].disp_unit;
@@ -647,11 +647,11 @@ static inline int MPIDI_CH3I_Shm_cas_op(const void *origin_addr, const void *com
dest_addr = (char *) base + disp_unit * target_disp;
- MPID_Datatype_get_size_macro(datatype, len);
- MPIU_Memcpy(result_addr, dest_addr, len);
+ MPIDU_Datatype_get_size_macro(datatype, len);
+ MPIR_Memcpy(result_addr, dest_addr, len);
if (MPIR_Compare_equal(compare_addr, dest_addr, datatype)) {
- MPIU_Memcpy(dest_addr, origin_addr, len);
+ MPIR_Memcpy(dest_addr, origin_addr, len);
}
if (shm_locked) {
@@ -660,7 +660,7 @@ static inline int MPIDI_CH3I_Shm_cas_op(const void *origin_addr, const void *com
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_CAS_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_SHM_CAS_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -678,7 +678,7 @@ static inline int MPIDI_CH3I_Shm_cas_op(const void *origin_addr, const void *com
#define FCNAME MPL_QUOTE(FUNCNAME)
static inline int MPIDI_CH3I_Shm_fop_op(const void *origin_addr, void *result_addr,
MPI_Datatype datatype, int target_rank,
- MPI_Aint target_disp, MPI_Op op, MPID_Win * win_ptr)
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win_ptr)
{
void *base = NULL, *dest_addr = NULL;
MPI_User_function *uop = NULL;
@@ -686,13 +686,13 @@ static inline int MPIDI_CH3I_Shm_fop_op(const void *origin_addr, void *result_ad
MPI_Aint len;
int one, shm_locked = 0;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_FOP_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_FOP_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_FOP_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_SHM_FOP_OP);
if (win_ptr->shm_allocated == TRUE) {
int local_target_rank = win_ptr->comm_ptr->intranode_table[target_rank];
- MPIU_Assert(local_target_rank >= 0);
+ MPIR_Assert(local_target_rank >= 0);
base = win_ptr->shm_base_addrs[local_target_rank];
disp_unit = win_ptr->basic_info_table[target_rank].disp_unit;
@@ -706,8 +706,8 @@ static inline int MPIDI_CH3I_Shm_fop_op(const void *origin_addr, void *result_ad
dest_addr = (char *) base + disp_unit * target_disp;
- MPID_Datatype_get_size_macro(datatype, len);
- MPIU_Memcpy(result_addr, dest_addr, len);
+ MPIDU_Datatype_get_size_macro(datatype, len);
+ MPIR_Memcpy(result_addr, dest_addr, len);
uop = MPIR_OP_HDL_TO_FN(op);
one = 1;
@@ -720,7 +720,7 @@ static inline int MPIDI_CH3I_Shm_fop_op(const void *origin_addr, void *result_ad
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_FOP_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_SHM_FOP_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
diff --git a/src/mpid/ch3/include/mpid_rma_types.h b/src/mpid/ch3/include/mpid_rma_types.h
index 4e3b9e4..7036da0 100644
--- a/src/mpid/ch3/include/mpid_rma_types.h
+++ b/src/mpid/ch3/include/mpid_rma_types.h
@@ -44,8 +44,8 @@ typedef struct MPIDI_RMA_Op {
int result_count;
MPI_Datatype result_datatype;
- struct MPID_Request *single_req; /* used for unstreamed RMA ops */
- struct MPID_Request **multi_reqs; /* used for streamed RMA ops */
+ struct MPIR_Request *single_req; /* used for unstreamed RMA ops */
+ struct MPIR_Request **multi_reqs; /* used for streamed RMA ops */
MPI_Aint reqs_size; /* when reqs_size == 0, neither single_req nor multi_reqs is used;
* when reqs_size == 1, single_req is used;
* when reqs_size > 1, multi_reqs is used. */
@@ -59,7 +59,7 @@ typedef struct MPIDI_RMA_Op {
int issued_stream_count; /* when >= 0, it specifies number of stream units that have been issued;
* when < 0, it means all stream units of this operation haven been issued. */
- MPID_Request *ureq;
+ MPIR_Request *ureq;
} MPIDI_RMA_Op_t;
diff --git a/src/mpid/ch3/include/mpid_sched.h b/src/mpid/ch3/include/mpid_sched.h
new file mode 100644
index 0000000..ae07119
--- /dev/null
+++ b/src/mpid/ch3/include/mpid_sched.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIR_SCHED_H_INCLUDED
+#define MPIR_SCHED_H_INCLUDED
+#include "mpidu_sched.h"
+
+#define MPIR_Sched_cb MPIDU_Sched_cb
+#define MPIR_Sched_cb2 MPIDU_Sched_cb2
+#define MPIR_Sched_next_tag MPIDU_Sched_next_tag
+#define MPIR_Sched_create MPIDU_Sched_create
+#define MPIR_Sched_clone MPIDU_Sched_clone
+#define MPIR_Sched_start MPIDU_Sched_start
+#define MPIR_Sched_send MPIDU_Sched_send
+#define MPIR_Sched_send_defer MPIDU_Sched_send_defer
+#define MPIR_Sched_recv MPIDU_Sched_recv
+#define MPIR_Sched_recv_status MPIDU_Sched_recv_status
+#define MPIR_Sched_ssend MPIDU_Sched_ssend
+#define MPIR_Sched_reduce MPIDU_Sched_reduce
+#define MPIR_Sched_copy MPIDU_Sched_copy
+#define MPIR_Sched_barrier MPIDU_Sched_barrier
+
+#endif /* MPIR_SCHED_H_INCLUDED */
diff --git a/src/mpid/ch3/include/mpid_thread.h b/src/mpid/ch3/include/mpid_thread.h
index 82565ae..b1285ee 100644
--- a/src/mpid/ch3/include/mpid_thread.h
+++ b/src/mpid/ch3/include/mpid_thread.h
@@ -8,7 +8,6 @@
#define MPID_THREAD_H_INCLUDED
#include "mpidu_thread_fallback.h"
-#include "mpiutil.h"
/* We simply use the fallback timer functionality and do not define
* our own */
@@ -23,14 +22,11 @@ typedef MPIDU_Thread_func_t MPID_Thread_func_t;
#define MPID_THREAD_CS_EXIT MPIDU_THREAD_CS_EXIT
#define MPID_THREAD_CS_YIELD MPIDU_THREAD_CS_YIELD
-#define MPID_THREAD_CHECK_BEGIN MPIDU_THREAD_CHECK_BEGIN
-#define MPID_THREAD_CHECK_END MPIDU_THREAD_CHECK_END
-
#define MPID_Thread_create MPIDU_Thread_create
#define MPID_Thread_exit MPIDU_Thread_exit
#define MPID_Thread_self MPIDU_Thread_self
#define MPID_Thread_same MPIDU_Thread_same
-#define MPID_Thread_same MPIDU_Thread_same
+#define MPID_Thread_yield MPIDU_Thread_yield
#define MPID_Thread_mutex_create MPIDU_Thread_mutex_create
#define MPID_Thread_mutex_destroy MPIDU_Thread_mutex_destroy
@@ -48,20 +44,8 @@ typedef MPIDU_Thread_func_t MPID_Thread_func_t;
#define MPID_Thread_tls_set MPIDU_Thread_tls_set
#define MPID_Thread_tls_get MPIDU_Thread_tls_get
-#define MPID_cc_t MPIDU_cc_t
-#define MPID_cc_get MPIDU_cc_get
-#define MPID_cc_set MPIDU_cc_set
-#define MPID_cc_is_complete MPIDU_cc_is_complete
-#define MPID_cc_incr MPIDU_cc_incr
-#define MPID_cc_decr MPIDU_cc_decr
-
-#define MPID_OBJ_PUBLISH_HANDLE MPIDU_OBJ_PUBLISH_HANDLE
-
-#define MPID_THREADPRIV_INITKEY MPIDU_THREADPRIV_INITKEY
-#define MPID_THREADPRIV_INIT MPIDU_THREADPRIV_INIT
-#define MPID_THREADPRIV_GET MPIDU_THREADPRIV_GET
-#define MPID_THREADPRIV_DECL MPIDU_THREADPRIV_DECL
-#define MPID_THREADPRIV_FIELD MPIDU_THREADPRIV_FIELD
-#define MPID_THREADPRIV_FINALIZE MPIDU_THREADPRIV_FINALIZE
+#define MPID_THREADPRIV_KEY_CREATE MPIDU_THREADPRIV_KEY_CREATE
+#define MPID_THREADPRIV_KEY_GET_ADDR MPIDU_THREADPRIV_KEY_GET_ADDR
+#define MPID_THREADPRIV_KEY_DESTROY MPIDU_THREADPRIV_KEY_DESTROY
#endif /* !defined(MPID_THREAD_H_INCLUDED) */
diff --git a/src/mpid/ch3/include/mpidi_recvq_statistics.h b/src/mpid/ch3/include/mpidi_recvq_statistics.h
index d1d83f6..3202d81 100644
--- a/src/mpid/ch3/include/mpidi_recvq_statistics.h
+++ b/src/mpid/ch3/include/mpidi_recvq_statistics.h
@@ -10,6 +10,6 @@
#include "mpit.h"
/* from ch3u_recvq.c */
-MPIR_T_PVAR_ULONG2_LEVEL_DECL_EXTERN(RECVQ, unexpected_recvq_buffer_size);
+extern unsigned long long PVAR_LEVEL_unexpected_recvq_buffer_size ATTRIBUTE((unused));
#endif /* _MPIDI_RECVQ_STATISTICS_H_ */
diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h
index 51d1420..d7eba2f 100644
--- a/src/mpid/ch3/include/mpidimpl.h
+++ b/src/mpid/ch3/include/mpidimpl.h
@@ -21,21 +21,11 @@
#include "mpiimpl.h"
-#if !defined(MPICH_MPIDPRE_H_INCLUDED)
-#include "mpidpre.h"
-#endif
-
#include "mpidftb.h"
/* Add the ch3 packet definitions */
#include "mpidpkt.h"
-#include "mpid_sched.h"
-
-/* We need to match the size of MPIU_Pint to the relevant Format control
- */
-#define MPIDI_MSG_SZ_FMT MPIU_PINT_FMT_DEC_SPEC
-
#if !defined(MPIDI_IOV_DENSITY_MIN)
# define MPIDI_IOV_DENSITY_MIN (16 * 1024)
#endif
@@ -51,14 +41,25 @@ int gethostname(char *name, size_t len);
/* group of processes detected to have failed. This is a subset of
comm_world group. */
-extern MPID_Group *MPIDI_Failed_procs_group;
+extern MPIR_Group *MPIDI_Failed_procs_group;
extern int MPIDI_last_known_failed;
extern char *MPIDI_failed_procs_string;
extern int MPIDI_Use_pmi2_api;
+#if defined(MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIDI_CH3_DBG_CONNECT;
+extern MPL_dbg_class MPIDI_CH3_DBG_DISCONNECT;
+extern MPL_dbg_class MPIDI_CH3_DBG_PROGRESS;
+extern MPL_dbg_class MPIDI_CH3_DBG_CHANNEL;
+extern MPL_dbg_class MPIDI_CH3_DBG_OTHER;
+extern MPL_dbg_class MPIDI_CH3_DBG_MSG;
+extern MPL_dbg_class MPIDI_CH3_DBG_VC;
+extern MPL_dbg_class MPIDI_CH3_DBG_REFCOUNT;
+#endif /* MPL_USE_DBG_LOGGING */
+
#define MPIDI_CHANGE_VC_STATE(vc, new_state) do { \
- MPIU_DBG_VCSTATECHANGE(vc, VC_STATE_##new_state); \
+ MPL_DBG_VCSTATECHANGE(vc, VC_STATE_##new_state); \
(vc)->state = MPIDI_VC_STATE_##new_state; \
} while (0)
@@ -75,7 +76,7 @@ typedef struct MPIDI_PG
MPIU_Object system, but we do use the associated reference counting
routines. Therefore, handle must be present, but is not used
except by debugging routines */
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
/* Next pointer used to maintain a list of all process groups known to
this process */
@@ -168,17 +169,17 @@ extern MPIDI_Process_t MPIDI_Process;
(dt_ptr_) = NULL; \
(dt_contig_out_) = TRUE; \
(dt_true_lb_) = 0; \
- (data_sz_out_) = (MPIDI_msg_sz_t) (count_) * MPID_Datatype_get_basic_size(datatype_); \
- MPIDI_DBG_PRINTF((15, FCNAME, "basic datatype: dt_contig=%d, dt_sz=%d, data_sz=" MPIDI_MSG_SZ_FMT,\
- (dt_contig_out_), MPID_Datatype_get_basic_size(datatype_), (data_sz_out_)));\
+ (data_sz_out_) = (intptr_t) (count_) * MPIDU_Datatype_get_basic_size(datatype_); \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, TERSE, (MPL_DBG_FDEST,"basic datatype: dt_contig=%d, dt_sz=%d, data_sz=%" PRIdPTR, \
+ (dt_contig_out_), MPIDU_Datatype_get_basic_size(datatype_), (data_sz_out_)));\
} \
else \
{ \
- MPID_Datatype_get_ptr((datatype_), (dt_ptr_)); \
+ MPIDU_Datatype_get_ptr((datatype_), (dt_ptr_)); \
(dt_contig_out_) = (dt_ptr_)->is_contig; \
- (data_sz_out_) = (MPIDI_msg_sz_t) (count_) * (dt_ptr_)->size; \
+ (data_sz_out_) = (intptr_t) (count_) * (dt_ptr_)->size; \
(dt_true_lb_) = (dt_ptr_)->true_lb; \
- MPIDI_DBG_PRINTF((15, FCNAME, "user defined datatype: dt_contig=%d, dt_sz=%d, data_sz=" MPIDI_MSG_SZ_FMT,\
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, TERSE, (MPL_DBG_FDEST, "user defined datatype: dt_contig=%d, dt_sz=" MPI_AINT_FMT_DEC_SPEC ", data_sz=%" PRIdPTR, \
(dt_contig_out_), (dt_ptr_)->size, (data_sz_out_)));\
} \
}
@@ -192,12 +193,12 @@ extern MPIDI_Process_t MPIDI_Process;
---------------------*/
/*
- * MPID_Requests
+ * MPIR_Requests
*
- * MPI Requests are handles to MPID_Request structures. These are used
+ * MPI Requests are handles to MPIR_Request structures. These are used
* for most communication operations to provide a uniform way in which to
* define pending operations. As such, they contain many fields that are
- * only used by some operations (logically, an MPID_Request is a union type).
+ * only used by some operations (logically, an MPIR_Request is a union type).
*
* There are several kinds of requests. They are
* Send, Receive, RMA, User, Persistent
@@ -249,45 +250,14 @@ extern MPIDI_Process_t MPIDI_Process;
*/
/* FIXME XXX DJG for TLS hack */
-#define MPID_REQUEST_TLS_MAX 128
+#define MPIR_REQUEST_TLS_MAX 128
-#if MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_THREAD_LOCAL
-# define MPIDI_Request_tls_alloc(req) \
- do { \
- int i; \
- MPID_THREADPRIV_DECL; \
- MPID_THREADPRIV_GET; \
- if (!MPID_THREADPRIV_FIELD(request_handles)) { \
- MPID_Request *prev, *cur; \
- /* batch allocate a linked list of requests */ \
- MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX); \
- prev = MPIU_Handle_obj_alloc_unsafe(&MPID_Request_mem); \
- prev->next = NULL; \
- assert(prev); \
- for (i = 1; i < MPID_REQUEST_TLS_MAX; ++i) { \
- cur = MPIU_Handle_obj_alloc_unsafe(&MPID_Request_mem); \
- assert(cur); \
- cur->next = prev; \
- prev = cur; \
- } \
- MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX); \
- MPID_THREADPRIV_FIELD(request_handles) = cur; \
- MPID_THREADPRIV_FIELD(request_handle_count) += MPID_REQUEST_TLS_MAX; \
- } \
- (req) = MPID_THREADPRIV_FIELD(request_handles); \
- MPID_THREADPRIV_FIELD(request_handles) = req->next; \
- MPID_THREADPRIV_FIELD(request_handle_count) -= 1; \
- } while (0)
-#elif MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_MUTEX
# define MPIDI_Request_tls_alloc(req_) \
do { \
- (req_) = MPIU_Handle_obj_alloc(&MPID_Request_mem); \
- MPIU_DBG_MSG_P(CH3_CHANNEL,VERBOSE, \
+ (req_) = MPIR_Handle_obj_alloc(&MPIR_Request_mem); \
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CHANNEL,VERBOSE, \
"allocated request, handle=0x%08x", req_);\
} while (0)
-#else
-# error MPIU_HANDLE_ALLOCATION_METHOD not defined
-#endif
/* If the channel doesn't initialize anything in the request,
@@ -296,12 +266,6 @@ extern MPIDI_Process_t MPIDI_Process;
#define MPIDI_CH3_REQUEST_INIT(a_)
#endif
-#ifdef HAVE_DEBUGGER_SUPPORT
-#define MPIDI_Request_clear_dbg(sreq_) ((sreq_)->dbg_next = NULL)
-#else
-#define MPIDI_Request_clear_dbg(sreq_)
-#endif
-
/* FIXME: Why does a send request need the match information?
Is that for debugging information? In case the initial envelope
cannot be sent? Ditto for the dev.user_buf, count, and datatype
@@ -317,11 +281,10 @@ extern MPIDI_Process_t MPIDI_Process;
*/
#define MPIDI_Request_create_sreq(sreq_, mpi_errno_, FAIL_) \
{ \
- (sreq_) = MPID_Request_create(); \
- MPIU_Object_set_ref((sreq_), 2); \
- (sreq_)->kind = MPID_REQUEST_SEND; \
+ (sreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__SEND); \
+ MPIR_Object_set_ref((sreq_), 2); \
(sreq_)->comm = comm; \
- (sreq_)->partner_request = NULL; \
+ (sreq_)->dev.partner_request = NULL; \
MPIR_Comm_add_ref(comm); \
(sreq_)->dev.match.parts.rank = rank; \
(sreq_)->dev.match.parts.tag = tag; \
@@ -330,32 +293,31 @@ extern MPIDI_Process_t MPIDI_Process;
(sreq_)->dev.user_count = count; \
(sreq_)->dev.datatype = datatype; \
(sreq_)->dev.iov_count = 0; \
- MPIDI_Request_clear_dbg(sreq_); \
}
/* This is the receive request version of MPIDI_Request_create_sreq */
#define MPIDI_Request_create_rreq(rreq_, mpi_errno_, FAIL_) \
{ \
- (rreq_) = MPID_Request_create(); \
- MPIU_Object_set_ref((rreq_), 2); \
- (rreq_)->kind = MPID_REQUEST_RECV; \
- (rreq_)->partner_request = NULL; \
+ (rreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED); \
+ MPIR_Object_set_ref((rreq_), 2); \
+ (rreq_)->kind = MPIR_REQUEST_KIND__RECV; \
+ (rreq_)->dev.partner_request = NULL; \
}
/* creates a new, trivially complete recv request that is suitable for
* returning when a user passed MPI_PROC_NULL */
#define MPIDI_Request_create_null_rreq(rreq_, mpi_errno_, FAIL_) \
do { \
- (rreq_) = MPID_Request_create(); \
+ (rreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED); \
if ((rreq_) != NULL) { \
- MPIU_Object_set_ref((rreq_), 1); \
- /* MT FIXME should these be handled by MPID_Request_create? */ \
- MPID_cc_set(&(rreq_)->cc, 0); \
- (rreq_)->kind = MPID_REQUEST_RECV; \
+ MPIR_Object_set_ref((rreq_), 1); \
+ /* MT FIXME should these be handled by MPIR_Request_create? */ \
+ MPIR_cc_set(&(rreq_)->cc, 0); \
+ (rreq_)->kind = MPIR_REQUEST_KIND__RECV; \
MPIR_Status_set_procnull(&(rreq_)->status); \
} \
else { \
- MPIU_DBG_MSG(CH3_CHANNEL,TYPICAL,"unable to allocate a request");\
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,TYPICAL,"unable to allocate a request");\
(mpi_errno_) = MPIR_ERR_MEMALLOCFAILED; \
FAIL_; \
} \
@@ -455,8 +417,8 @@ extern MPIDI_Process_t MPIDI_Process;
partner RTS sreq and nullify partner request */
#define MPIDI_Request_fetch_and_clear_rts_sreq(sreq_, rts_sreq_) \
{ \
- *(rts_sreq_) = (sreq_)->partner_request; \
- (sreq_)->partner_request = NULL; \
+ *(rts_sreq_) = (sreq_)->dev.partner_request; \
+ (sreq_)->dev.partner_request = NULL; \
}
/* FIXME: We've moved to allow finer-grain critical sections... */
@@ -592,11 +554,11 @@ int MPIDI_CH3_PG_Init( MPIDI_PG_t * );
#define MPIDI_PG_add_ref(pg_) \
do { \
- MPIU_Object_add_ref(pg_); \
+ MPIR_Object_add_ref(pg_); \
} while (0)
#define MPIDI_PG_release_ref(pg_, inuse_) \
do { \
- MPIU_Object_release_ref(pg_, inuse_); \
+ MPIR_Object_release_ref(pg_, inuse_); \
} while (0)
#define MPIDI_PG_Get_vc(pg_, rank_, vcp_) *(vcp_) = &(pg_)->vct[rank_]
@@ -643,62 +605,63 @@ typedef enum MPIDI_VC_State
MPIDI_VC_STATE_MORIBUND /* Abnormally terminated, there may be unsent/unreceived msgs */
} MPIDI_VC_State_t;
-struct MPID_Comm;
+struct MPIR_Comm;
#ifdef ENABLE_COMM_OVERRIDES
typedef struct MPIDI_Comm_ops
{
/* Overriding calls in case of matching-capable interfaces */
- int (*recv_posted)(struct MPIDI_VC *vc, struct MPID_Request *req);
+ int (*recv_posted)(struct MPIDI_VC *vc, struct MPIR_Request *req);
int (*send)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request);
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request);
int (*rsend)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request);
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request);
int (*ssend)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request );
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request );
int (*isend)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request );
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request );
int (*irsend)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request );
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request );
int (*issend)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request );
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request );
int (*send_init)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request );
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request );
int (*bsend_init)(struct MPIDI_VC *vc, const void *buf, int count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request);
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request);
int (*rsend_init)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request );
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request );
int (*ssend_init)(struct MPIDI_VC *vc, const void *buf, MPI_Aint count, MPI_Datatype datatype,
- int dest, int tag, MPID_Comm *comm, int context_offset,
- struct MPID_Request **request );
- int (*startall)(struct MPIDI_VC *vc, int count, struct MPID_Request *requests[]);
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ struct MPIR_Request **request );
+ int (*startall)(struct MPIDI_VC *vc, int count, struct MPIR_Request *requests[]);
- int (*cancel_send)(struct MPIDI_VC *vc, struct MPID_Request *sreq);
- int (*cancel_recv)(struct MPIDI_VC *vc, struct MPID_Request *rreq);
+ int (*cancel_send)(struct MPIDI_VC *vc, struct MPIR_Request *sreq);
+ int (*cancel_recv)(struct MPIDI_VC *vc, struct MPIR_Request *rreq);
- int (*probe)(struct MPIDI_VC *vc, int source, int tag, MPID_Comm *comm, int context_offset,
+ int (*probe)(struct MPIDI_VC *vc, int source, int tag, MPIR_Comm *comm, int context_offset,
MPI_Status *status);
- int (*iprobe)(struct MPIDI_VC *vc, int source, int tag, MPID_Comm *comm, int context_offset,
+ int (*iprobe)(struct MPIDI_VC *vc, int source, int tag, MPIR_Comm *comm, int context_offset,
int *flag, MPI_Status *status);
- int (*improbe)(struct MPIDI_VC *vc, int source, int tag, MPID_Comm *comm, int context_offset,
- int *flag, MPID_Request **message, MPI_Status *status);
+ int (*improbe)(struct MPIDI_VC *vc, int source, int tag, MPIR_Comm *comm, int context_offset,
+ int *flag, MPIR_Request **message, MPI_Status *status);
+ int (*imrecv)(struct MPIDI_VC *vc, struct MPIR_Request *req);
} MPIDI_Comm_ops_t;
-extern int (*MPIDI_Anysource_iprobe_fn)(int tag, MPID_Comm * comm, int context_offset, int *flag,
+extern int (*MPIDI_Anysource_iprobe_fn)(int tag, MPIR_Comm * comm, int context_offset, int *flag,
MPI_Status * status);
-extern int (*MPIDI_Anysource_improbe_fn)(int tag, MPID_Comm * comm, int context_offset,
- int *flag, MPID_Request **message,
+extern int (*MPIDI_Anysource_improbe_fn)(int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request **message,
MPI_Status * status);
#endif
@@ -711,7 +674,7 @@ typedef struct MPIDI_VC
when debugging objects (the handle kind is used in reporting
on changes to the object).
*/
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
/* state of the VC */
MPIDI_VC_State_t state;
@@ -731,6 +694,10 @@ typedef struct MPIDI_VC
/* port name tag */
int port_name_tag; /* added to handle dynamic process mgmt */
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
+ void *connreq_obj; /* pointer to dynamic connection mgmt object */
+#endif
+
#if defined(MPID_USE_SEQUENCE_NUMBERS)
/* Sequence number of the next packet to be sent */
MPID_Seqnum_t seqnum_send;
@@ -748,11 +715,11 @@ typedef struct MPIDI_VC
/* rendezvous function pointers. Called to send a rendevous
message or when one is matched */
- int (* rndvSend_fn)( struct MPID_Request **sreq_p, const void * buf, MPI_Aint count,
- MPI_Datatype datatype, int dt_contig, MPIDI_msg_sz_t data_sz,
+ int (* rndvSend_fn)( struct MPIR_Request **sreq_p, const void * buf, MPI_Aint count,
+ MPI_Datatype datatype, int dt_contig, intptr_t data_sz,
MPI_Aint dt_true_lb, int rank, int tag,
- struct MPID_Comm * comm, int context_offset );
- int (* rndvRecv_fn)( struct MPIDI_VC * vc, struct MPID_Request *rreq );
+ struct MPIR_Comm * comm, int context_offset );
+ int (* rndvRecv_fn)( struct MPIDI_VC * vc, struct MPIR_Request *rreq );
/* eager message threshold */
int eager_max_msg_sz;
@@ -763,8 +730,8 @@ typedef struct MPIDI_VC
noncontiguous message. Caller must initialize
sreq->dev.segment, _first and _size. Contiguous messages are
called directly from CH3 and cannot be overridden. */
- int (* sendNoncontig_fn)( struct MPIDI_VC *vc, struct MPID_Request *sreq,
- void *header, MPIDI_msg_sz_t hdr_sz );
+ int (* sendNoncontig_fn)( struct MPIDI_VC *vc, struct MPIR_Request *sreq,
+ void *header, intptr_t hdr_sz );
#ifdef ENABLE_COMM_OVERRIDES
MPIDI_Comm_ops_t *comm_ops;
@@ -794,7 +761,7 @@ MPIDI_VC_Event_t;
S*/
typedef struct MPIDI_VCRT
{
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
int size;
MPIDI_VC_t * vcr_table[1];
}
@@ -818,10 +785,10 @@ int MPIDI_VC_Init( MPIDI_VC_t *, MPIDI_PG_t *, int );
#define MPIDI_VC_add_ref( _vc ) \
- do { MPIU_Object_add_ref( _vc ); } while (0)
+ do { MPIR_Object_add_ref( _vc ); } while (0)
#define MPIDI_VC_release_ref( _vc, _inuse ) \
- do { MPIU_Object_release_ref( _vc, _inuse ); } while (0)
+ do { MPIR_Object_release_ref( _vc, _inuse ); } while (0)
/*------------------------------
END VIRTUAL CONNECTION SECTION
@@ -853,7 +820,7 @@ extern MPIDI_CH3U_SRBuf_element_t * MPIDI_CH3U_SRBuf_pool;
MPIDI_CH3U_SRBuf_element_t * tmp; \
if (!MPIDI_CH3U_SRBuf_pool) { \
MPIDI_CH3U_SRBuf_pool = \
- MPIU_Malloc(sizeof(MPIDI_CH3U_SRBuf_element_t)); \
+ MPL_malloc(sizeof(MPIDI_CH3U_SRBuf_element_t)); \
MPIDI_CH3U_SRBuf_pool->next = NULL; \
} \
tmp = MPIDI_CH3U_SRBuf_pool; \
@@ -867,7 +834,7 @@ extern MPIDI_CH3U_SRBuf_element_t * MPIDI_CH3U_SRBuf_pool;
# define MPIDI_CH3U_SRBuf_free(req_) \
{ \
MPIDI_CH3U_SRBuf_element_t * tmp; \
- MPIU_Assert(MPIDI_Request_get_srbuf_flag(req_)); \
+ MPIR_Assert(MPIDI_Request_get_srbuf_flag(req_)); \
MPIDI_Request_set_srbuf_flag((req_), FALSE); \
tmp = (MPIDI_CH3U_SRBuf_element_t *) (((MPI_Aint) ((req_)->dev.tmpbuf)) - \
((MPI_Aint) MPIDI_CH3U_Offsetof(MPIDI_CH3U_SRBuf_element_t, buf))); \
@@ -906,7 +873,7 @@ extern MPIDI_CH3U_SRBuf_element_t * MPIDI_CH3U_SRBuf_pool;
/* If there is no support for dynamic processes, there will be no
channel-specific connection state */
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
#ifdef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
#define MPIDI_CH3_VC_GetStateString( _c ) "none"
@@ -927,67 +894,66 @@ int MPIDI_PrintConnStrToFile( FILE *fd, const char *file, int line,
/* These macros simplify and unify the debugging of changes in the
connection state
- MPIU_DBG_VCSTATECHANGE(vc,newstate) - use when changing the state
+ MPL_DBG_VCSTATECHANGE(vc,newstate) - use when changing the state
of a VC
- MPIU_DBG_VCCHSTATECHANGE(vc,newstate) - use when changing the state
+ MPL_DBG_VCCHSTATECHANGE(vc,newstate) - use when changing the state
of the channel-specific part of the vc (e.g., vc->ch.state)
- MPIU_DBG_CONNSTATECHANGE(vc,conn,newstate ) - use when changing the
+ MPL_DBG_CONNSTATECHANGE(vc,conn,newstate ) - use when changing the
state of a conn. vc may be null
- MPIU_DBG_CONNSTATECHANGEMSG(vc,conn,newstate,msg ) - use when changing the
+ MPL_DBG_CONNSTATECHANGEMSG(vc,conn,newstate,msg ) - use when changing the
state of a conn. vc may be null. Like CONNSTATECHANGE, but allows
an additional message
- MPIU_DBG_PKT(conn,pkt,msg) - print out a short description of an
+ MPL_DBG_PKT(conn,pkt,msg) - print out a short description of an
packet being sent/received on the designated connection, prefixed with
msg.
*/
-#define MPIU_DBG_VCSTATECHANGE(_vc,_newstate) do { \
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST, \
+#define MPL_DBG_VCSTATECHANGE(_vc,_newstate) do { \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST, \
"vc=%p: Setting state (vc) from %s to %s, vcchstate is %s", \
_vc, MPIDI_VC_GetStateString((_vc)->state), \
#_newstate, MPIDI_CH3_VC_GetStateString( (_vc) ))); \
} while (0)
-#define MPIU_DBG_VCCHSTATECHANGE(_vc,_newstate) \
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST, \
+#define MPL_DBG_VCCHSTATECHANGE(_vc,_newstate) \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST, \
"vc=%p: Setting state (ch) from %s to %s, vc state is %s", \
_vc, MPIDI_CH3_VC_GetStateString((_vc)), \
#_newstate, MPIDI_VC_GetStateString( (_vc)->state )) )
-#define MPIU_DBG_CONNSTATECHANGE(_vc,_conn,_newstate) \
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST, \
+#define MPL_DBG_CONNSTATECHANGE(_vc,_conn,_newstate) \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST, \
"vc=%p,conn=%p: Setting state (conn) from %s to %s, vcstate = %s", \
_vc, _conn, \
MPIDI_Conn_GetStateString((_conn)->state), #_newstate, \
_vc ? MPIDI_VC_GetStateString((_vc)->state) : "<no vc>" ))
-#define MPIU_DBG_CONNSTATECHANGE_MSG(_vc,_conn,_newstate,_msg) \
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST, \
+#define MPL_DBG_CONNSTATECHANGE_MSG(_vc,_conn,_newstate,_msg) \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST, \
"vc=%p,conn=%p: Setting conn state from %s to %s, vcstate = %s %s", \
_vc, _conn, \
MPIDI_Conn_GetStateString((_conn)->state), #_newstate, \
_vc ? MPIDI_VC_GetStateString((_vc)->state) : "<no vc>", _msg ))
-#define MPIU_DBG_VCUSE(_vc,_msg) \
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST,\
+#define MPL_DBG_VCUSE(_vc,_msg) \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST,\
"vc=%p: Using vc for %s", _vc, _msg ))
-#define MPIU_DBG_PKT(_conn,_pkt,_msg) \
- MPIU_DBG_MSG_FMT(CH3_OTHER,TYPICAL,(MPIU_DBG_FDEST,\
+#define MPL_DBG_PKT(_conn,_pkt,_msg) \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TYPICAL,(MPL_DBG_FDEST,\
"conn=%p: %s %s", _conn, _msg, MPIDI_Pkt_GetDescString( _pkt ) ))
const char *MPIDI_Pkt_GetDescString( MPIDI_CH3_Pkt_t *pkt );
/* These macros help trace communication headers */
-#define MPIU_DBG_MSGPKT(_vc,_tag,_contextid,_dest,_size,_kind) \
- MPIU_DBG_MSG_FMT(CH3_MSG,TYPICAL,(MPIU_DBG_FDEST,\
- "%s: vc=%p, tag=%d, context=%d, dest=%d, datasz=" MPIDI_MSG_SZ_FMT,\
+#define MPL_DBG_MSGPKT(_vc,_tag,_contextid,_dest,_size,_kind) \
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_MSG,TYPICAL,(MPL_DBG_FDEST,\
+ "%s: vc=%p, tag=%d, context=%d, dest=%d, datasz=%" PRIdPTR,\
_kind,_vc,_tag,_contextid,_dest,_size) )
/* FIXME: Switch this to use the common debug code */
-void MPIDI_dbg_printf(int, char *, char *, ...);
void MPIDI_err_printf(char *, char *, ...);
/* FIXME: This does not belong here */
@@ -995,25 +961,9 @@ void MPIDI_err_printf(char *, char *, ...);
extern char *MPIDI_DBG_parent_str;
#endif
-#if defined(MPICH_DBG_OUTPUT)
-#define MPIDI_DBG_PRINTF(e_) \
-{ \
- if (MPIU_dbg_state != MPIU_DBG_STATE_NONE) \
- { \
- MPIDI_dbg_printf e_; \
- } \
-}
-#else
-# define MPIDI_DBG_PRINTF(e)
-#endif
-
#define MPIDI_ERR_PRINTF(e) MPIDI_err_printf e
#if defined(HAVE_MACRO_VA_ARGS)
-# define MPIDI_dbg_printf(level, func, fmt, ...) \
- { \
- MPIU_dbglog_printf("[%d] %s(): " fmt "\n", MPIR_Process.comm_world->rank, func, __VA_ARGS__); \
- }
# define MPIDI_err_printf(func, fmt, ...) \
{ \
MPL_error_printf("[%d] ERROR - %s(): " fmt "\n", MPIR_Process.comm_world->rank, func, __VA_ARGS__); \
@@ -1039,41 +989,49 @@ const char * MPIDI_VC_GetStateString(int);
/* Prototypes for internal device routines */
-int MPIDI_Isend_self(const void *, MPI_Aint, MPI_Datatype, int, int, MPID_Comm *,
- int, int, MPID_Request **);
+int MPIDI_Isend_self(const void *, MPI_Aint, MPI_Datatype, int, int, MPIR_Comm *,
+ int, int, MPIR_Request **);
/*--------------------------
- BEGIN MPI PORT SECTION
+ BEGIN MPI PORT SECTION
--------------------------*/
/* These are the default functions */
-int MPIDI_Comm_connect(const char *, MPID_Info *, int, MPID_Comm *, MPID_Comm **);
-int MPIDI_Comm_accept(const char *, MPID_Info *, int, MPID_Comm *, MPID_Comm **);
+int MPIDI_Comm_connect(const char *, MPIR_Info *, int, MPIR_Comm *, MPIR_Comm **);
+int MPIDI_Comm_accept(const char *, MPIR_Info *, int, MPIR_Comm *, MPIR_Comm **);
-int MPIDI_Comm_spawn_multiple(int, char **, char ***, const int *, MPID_Info **,
- int, MPID_Comm *, MPID_Comm **, int *);
+int MPIDI_Comm_spawn_multiple(int, char **, char ***, const int *, MPIR_Info **,
+ int, MPIR_Comm *, MPIR_Comm **, int *);
-/* This structure defines a module that handles the routines that
+/* This structure defines a module that handles the routines that
work with MPI port names */
typedef struct MPIDI_Port_Ops {
- int (*OpenPort)( MPID_Info *, char * );
+ int (*OpenPort)( MPIR_Info *, char * );
int (*ClosePort)( const char * );
- int (*CommAccept)( const char *, MPID_Info *, int, MPID_Comm *,
- MPID_Comm ** );
- int (*CommConnect)( const char *, MPID_Info *, int, MPID_Comm *,
- MPID_Comm ** );
+ int (*CommAccept)( const char *, MPIR_Info *, int, MPIR_Comm *,
+ MPIR_Comm ** );
+ int (*CommConnect)( const char *, MPIR_Info *, int, MPIR_Comm *,
+ MPIR_Comm ** );
} MPIDI_PortFns;
#define MPIDI_PORTFNS_VERSION 1
int MPIDI_CH3_PortFnsInit( MPIDI_PortFns * );
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
/* Utility routines provided in src/ch3u_port.c for working with connection
queues */
int MPIDI_CH3I_Acceptq_enqueue(MPIDI_VC_t * vc, int port_name_tag);
-int MPIDI_CH3I_Acceptq_dequeue(MPIDI_VC_t ** vc, int port_name_tag);
-#ifdef MPIDI_CH3_CHANNEL_AVOIDS_SELECT
-int MPIDI_CH3_Complete_Acceptq_dequeue(MPIDI_VC_t * vc);
+int MPIDI_Port_finalize(void);
+
+int MPIDI_CH3I_Port_init(int port_name_tag);
+int MPIDI_CH3I_Port_destroy(int port_name_tag);
#else
-#define MPIDI_CH3_Complete_Acceptq_dequeue(vc) MPI_SUCCESS
+/* Need empty symbols to avoid failure at compile time if defined
+ * MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS. */
+#define MPIDI_CH3I_Acceptq_enqueue(vc, port_name_tag) (MPI_SUCCESS)
+#define MPIDI_Port_finalize() (MPI_SUCCESS)
+
+#define MPIDI_CH3I_Port_init(port_name_tag) (MPI_SUCCESS)
+#define MPIDI_CH3I_Port_destroy(port_name_tag) (MPI_SUCCESS)
#endif
/*--------------------------
END MPI PORT SECTION
@@ -1094,21 +1052,21 @@ void MPIDI_RMA_finalize(void);
*/
typedef struct {
- int (*create)(void *, MPI_Aint, int, MPID_Info *, MPID_Comm *, MPID_Win **);
- int (*allocate)(MPI_Aint, int, MPID_Info *, MPID_Comm *, void *, MPID_Win **);
- int (*allocate_shared)(MPI_Aint, int, MPID_Info *, MPID_Comm *, void *, MPID_Win **);
- int (*allocate_shm)(MPI_Aint, int, MPID_Info *, MPID_Comm *, void *, MPID_Win **);
- int (*create_dynamic)(MPID_Info *, MPID_Comm *, MPID_Win **);
- int (*detect_shm)(MPID_Win **);
- int (*gather_info)(void *, MPI_Aint, int, MPID_Info *, MPID_Comm *, MPID_Win **);
- int (*shared_query)(MPID_Win *, int, MPI_Aint *, int *, void *);
+ int (*create)(void *, MPI_Aint, int, MPIR_Info *, MPIR_Comm *, MPIR_Win **);
+ int (*allocate)(MPI_Aint, int, MPIR_Info *, MPIR_Comm *, void *, MPIR_Win **);
+ int (*allocate_shared)(MPI_Aint, int, MPIR_Info *, MPIR_Comm *, void *, MPIR_Win **);
+ int (*allocate_shm)(MPI_Aint, int, MPIR_Info *, MPIR_Comm *, void *, MPIR_Win **);
+ int (*create_dynamic)(MPIR_Info *, MPIR_Comm *, MPIR_Win **);
+ int (*detect_shm)(MPIR_Win **);
+ int (*gather_info)(void *, MPI_Aint, int, MPIR_Info *, MPIR_Comm *, MPIR_Win **);
+ int (*shared_query)(MPIR_Win *, int, MPI_Aint *, int *, void *);
} MPIDI_CH3U_Win_fns_t;
extern MPIDI_CH3U_Win_fns_t MPIDI_CH3U_Win_fns;
typedef struct {
- int (*win_init)(MPI_Aint, int, int, int, MPID_Info *, MPID_Comm *, MPID_Win **);
- int (*win_free)(MPID_Win **);
+ int (*win_init)(MPI_Aint, int, int, int, MPIR_Info *, MPIR_Comm *, MPIR_Win **);
+ int (*win_free)(MPIR_Win **);
} MPIDI_CH3U_Win_hooks_t;
extern MPIDI_CH3U_Win_hooks_t MPIDI_CH3U_Win_hooks;
@@ -1135,33 +1093,33 @@ int MPIDI_CH3_Win_hooks_init(MPIDI_CH3U_Win_hooks_t *win_hooks);
int MPIDI_CH3_Win_pkt_orderings_init(MPIDI_CH3U_Win_pkt_ordering_t * win_pkt_orderings);
/* Default window creation functions provided by CH3 */
-int MPIDI_CH3U_Win_create(void *, MPI_Aint, int, MPID_Info *, MPID_Comm *,
- MPID_Win **);
-int MPIDI_CH3U_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info *info,
- MPID_Comm *comm, void *baseptr, MPID_Win **win);
-int MPIDI_CH3U_Win_allocate_no_shm(MPI_Aint size, int disp_unit, MPID_Info *info,
- MPID_Comm *comm_ptr, void *baseptr, MPID_Win **win_ptr);
-int MPIDI_CH3U_Win_create_dynamic(MPID_Info *info, MPID_Comm *comm, MPID_Win **win);
-int MPIDI_CH3U_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint * size,
+int MPIDI_CH3U_Win_create(void *, MPI_Aint, int, MPIR_Info *, MPIR_Comm *,
+ MPIR_Win **);
+int MPIDI_CH3U_Win_allocate(MPI_Aint size, int disp_unit, MPIR_Info *info,
+ MPIR_Comm *comm, void *baseptr, MPIR_Win **win);
+int MPIDI_CH3U_Win_allocate_no_shm(MPI_Aint size, int disp_unit, MPIR_Info *info,
+ MPIR_Comm *comm_ptr, void *baseptr, MPIR_Win **win_ptr);
+int MPIDI_CH3U_Win_create_dynamic(MPIR_Info *info, MPIR_Comm *comm, MPIR_Win **win);
+int MPIDI_CH3U_Win_shared_query(MPIR_Win * win_ptr, int target_rank, MPI_Aint * size,
int *disp_unit, void *baseptr);
/* MPI RMA Utility functions */
-int MPIDI_CH3U_Win_gather_info(void *, MPI_Aint, int, MPID_Info *, MPID_Comm *,
- MPID_Win **);
+int MPIDI_CH3U_Win_gather_info(void *, MPI_Aint, int, MPIR_Info *, MPIR_Comm *,
+ MPIR_Win **);
#ifdef MPIDI_CH3I_HAS_ALLOC_MEM
-void* MPIDI_CH3I_Alloc_mem(size_t size, MPID_Info *info_ptr);
-/* fallback to MPIU_Malloc if channel does not have its own RMA memory allocator */
+void* MPIDI_CH3I_Alloc_mem(size_t size, MPIR_Info *info_ptr);
+/* fallback to MPL_malloc if channel does not have its own RMA memory allocator */
#else
-#define MPIDI_CH3I_Alloc_mem(size, info_ptr) MPIU_Malloc(size)
+#define MPIDI_CH3I_Alloc_mem(size, info_ptr) MPL_malloc(size)
#endif
#ifdef MPIDI_CH3I_HAS_FREE_MEM
int MPIDI_CH3I_Free_mem(void *ptr);
#else
-#define MPIDI_CH3I_Free_mem(ptr) MPIU_Free(ptr);
+#define MPIDI_CH3I_Free_mem(ptr) MPL_free(ptr);
#endif
/* Pvars */
@@ -1169,8 +1127,8 @@ void MPIDI_CH3_RMA_Init_sync_pvars(void);
void MPIDI_CH3_RMA_Init_pkthandler_pvars(void);
/* internal */
-int MPIDI_CH3I_Release_lock(MPID_Win * win_ptr);
-int MPIDI_CH3I_Try_acquire_win_lock(MPID_Win * win_ptr, int requested_lock);
+int MPIDI_CH3I_Release_lock(MPIR_Win * win_ptr);
+int MPIDI_CH3I_Try_acquire_win_lock(MPIR_Win * win_ptr, int requested_lock);
int MPIDI_CH3I_Progress_finalize(void);
@@ -1179,21 +1137,21 @@ int MPIDI_CH3I_Progress_finalize(void);
* Called by normal RMA operations and request-based RMA operations . */
int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr,
- MPID_Request * ureq);
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr,
+ MPIR_Request * ureq);
int MPIDI_CH3I_Get(void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr,
- MPID_Request * ureq);
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr,
+ MPIR_Request * ureq);
int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr, MPID_Request * ureq);
+ MPIR_Win * win_ptr, MPIR_Request * ureq);
int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr, MPID_Request * ureq);
+ MPIR_Win * win_ptr, MPIR_Request * ureq);
/*@
MPIDI_CH3_Progress_signal_completion - Inform the progress engine that a
@@ -1227,7 +1185,7 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
do { \
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_COMPLETION_MUTEX); \
++MPIDI_CH3I_progress_completion_count; \
- MPIU_DBG_MSG_D(CH3_PROGRESS,VERBOSE, \
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_PROGRESS,VERBOSE, \
"just incremented MPIDI_CH3I_progress_completion_count=%d", \
MPIDI_CH3I_progress_completion_count); \
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_COMPLETION_MUTEX); \
@@ -1300,7 +1258,7 @@ int MPIDI_CH3I_VC_post_sockconnect(MPIDI_VC_t * );
/* Used internally to broadcast process groups belonging to peercomm to
all processes in comm*/
-int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root );
+int MPID_PG_BCast( MPIR_Comm *peercomm_p, MPIR_Comm *comm_p, int root );
/* Channel defintitions */
/*@
@@ -1330,8 +1288,8 @@ int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root );
If the send completes immediately, the channel implementation should return
NULL.
@*/
-int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * pkt, MPIDI_msg_sz_t pkt_sz,
- MPID_Request **sreq_ptr);
+int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * pkt, intptr_t pkt_sz,
+ MPIR_Request **sreq_ptr);
/*@
@@ -1364,7 +1322,7 @@ int MPIDI_CH3_iStartMsg(MPIDI_VC_t * vc, void * pkt, MPIDI_msg_sz_t pkt_sz,
NULL.
@*/
int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int iov_n,
- MPID_Request **sreq_ptr);
+ MPIR_Request **sreq_ptr);
/*@
@@ -1395,8 +1353,8 @@ int MPIDI_CH3_iStartMsgv(MPIDI_VC_t * vc, MPL_IOV * iov, int iov_n,
invoke the OnDataAvail routine in the request, if any; otherwise, is
must set the request as complete.
@*/
-int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * pkt,
- MPIDI_msg_sz_t pkt_sz);
+int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPIR_Request * sreq, void * pkt,
+ intptr_t pkt_sz);
/*@
@@ -1427,7 +1385,7 @@ int MPIDI_CH3_iSend(MPIDI_VC_t * vc, MPID_Request * sreq, void * pkt,
If the send completes immediately, the channel implementation still must
call the OnDataAvail routine in the request, if any.
@*/
-int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq, MPL_IOV * iov,
+int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPIR_Request * sreq, MPL_IOV * iov,
int iov_n);
/*@
@@ -1452,48 +1410,48 @@ int MPIDI_CH3_Connect_to_root(const char *, MPIDI_VC_t **);
*/
int MPIDI_CH3U_Recvq_init(void);
int MPIDI_CH3U_Recvq_FU(int, int, int, MPI_Status * );
-MPID_Request * MPIDI_CH3U_Recvq_FDU(MPI_Request, MPIDI_Message_match *);
-MPID_Request * MPIDI_CH3U_Recvq_FDU_matchonly(int source, int tag, int context_id, MPID_Comm *comm,
+MPIR_Request * MPIDI_CH3U_Recvq_FDU(MPI_Request, MPIDI_Message_match *);
+MPIR_Request * MPIDI_CH3U_Recvq_FDU_matchonly(int source, int tag, int context_id, MPIR_Comm *comm,
int *foundp);
-MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
- int context_id, MPID_Comm *comm, void *user_buf,
+MPIR_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
+ int context_id, MPIR_Comm *comm, void *user_buf,
MPI_Aint user_count, MPI_Datatype datatype, int * foundp);
-int MPIDI_CH3U_Recvq_DP(MPID_Request * rreq);
-MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
+int MPIDI_CH3U_Recvq_DP(MPIR_Request * rreq);
+MPIR_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
int * found);
int MPIDI_CH3U_Recvq_count_unexp(void);
int MPIDI_CH3U_Complete_posted_with_error(MPIDI_VC_t *vc);
-int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr);
+int MPIDI_CH3U_Clean_recvq(MPIR_Comm *comm_ptr);
-int MPIDI_CH3U_Request_load_send_iov(MPID_Request * const sreq,
+int MPIDI_CH3U_Request_load_send_iov(MPIR_Request * const sreq,
MPL_IOV * const iov, int * const iov_n);
-int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq);
-int MPIDI_CH3U_Request_unpack_uebuf(MPID_Request * rreq);
-int MPIDI_CH3U_Request_unpack_srbuf(MPID_Request * rreq);
+int MPIDI_CH3U_Request_load_recv_iov(MPIR_Request * const rreq);
+int MPIDI_CH3U_Request_unpack_uebuf(MPIR_Request * rreq);
+int MPIDI_CH3U_Request_unpack_srbuf(MPIR_Request * rreq);
void MPIDI_CH3U_Buffer_copy(const void * const sbuf, MPI_Aint scount,
MPI_Datatype sdt, int * smpi_errno,
void * const rbuf, MPI_Aint rcount, MPI_Datatype rdt,
- MPIDI_msg_sz_t * rdata_sz, int * rmpi_errno);
-int MPIDI_CH3U_Post_data_receive(int found, MPID_Request ** rreqp);
-int MPIDI_CH3U_Post_data_receive_found(MPID_Request * rreqp);
-int MPIDI_CH3U_Post_data_receive_unexpected(MPID_Request * rreqp);
-int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t *buflen, int *complete);
-int MPIDI_CH3U_Receive_data_unexpected(MPID_Request * rreq, char *buf, MPIDI_msg_sz_t *buflen, int *complete);
+ intptr_t * rdata_sz, int * rmpi_errno);
+int MPIDI_CH3U_Post_data_receive(int found, MPIR_Request ** rreqp);
+int MPIDI_CH3U_Post_data_receive_found(MPIR_Request * rreqp);
+int MPIDI_CH3U_Post_data_receive_unexpected(MPIR_Request * rreqp);
+int MPIDI_CH3U_Receive_data_found(MPIR_Request *rreq, void *buf, intptr_t *buflen, int *complete);
+int MPIDI_CH3U_Receive_data_unexpected(MPIR_Request * rreq, void *buf, intptr_t *buflen, int *complete);
/* Initialization routine for ch3u_comm.c */
int MPIDI_CH3I_Comm_init(void);
-int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs);
-void MPIDI_CH3I_Comm_find(MPIU_Context_id_t context_id, MPID_Comm **comm);
+int MPIDI_CH3I_Comm_handle_failed_procs(MPIR_Group *new_failed_procs);
+void MPIDI_CH3I_Comm_find(MPIR_Context_id_t context_id, MPIR_Comm **comm);
/* The functions below allow channels to register functions to be
called immediately after a communicator has been created, and
immediately before a communicator is to be destroyed.
*/
-int MPIDI_CH3U_Comm_register_create_hook(int (*hook_fn)(struct MPID_Comm *, void *), void *param);
-int MPIDI_CH3U_Comm_register_destroy_hook(int (*hook_fn)(struct MPID_Comm *, void *), void *param);
+int MPIDI_CH3U_Comm_register_create_hook(int (*hook_fn)(struct MPIR_Comm *, void *), void *param);
+int MPIDI_CH3U_Comm_register_destroy_hook(int (*hook_fn)(struct MPIR_Comm *, void *), void *param);
/* FIXME: This is a macro! */
#ifndef MPIDI_CH3_Request_add_ref
@@ -1504,7 +1462,7 @@ int MPIDI_CH3U_Comm_register_destroy_hook(int (*hook_fn)(struct MPID_Comm *, voi
Input Parameters:
. req - pointer to the request object
@*/
-void MPIDI_CH3_Request_add_ref(MPID_Request * req);
+void MPIDI_CH3_Request_add_ref(MPIR_Request * req);
#endif
/*@
@@ -1573,7 +1531,8 @@ int MPIDI_CH3_Get_business_card(int myRank, char *value, int length);
Input Parameters:
+ vc - virtual connection over which the packet was received
-- pkt - pointer to the CH3 packet
+- pkt - pointer to the CH3 packet header
+- data - pointer to the start address of data
Output Parameter:
. rreqp - receive request defining data to be received; may be NULL
@@ -1587,8 +1546,8 @@ int MPIDI_CH3_Get_business_card(int myRank, char *value, int length);
consideration may need to be given to packet ordering
if the channel has made guarantees about ordering.
E*/
-int MPIDI_CH3U_Handle_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request ** rreqp);
+int MPIDI_CH3U_Handle_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t *buflen, MPIR_Request ** rreqp);
/*@
MPIDI_CH3U_Handle_recv_req - Process a receive request for which all of the
@@ -1602,13 +1561,13 @@ int MPIDI_CH3U_Handle_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
Output Parameter:
. complete - data transfer for the request has completed
@*/
-int MPIDI_CH3U_Handle_recv_req(MPIDI_VC_t * vc, MPID_Request * rreq,
+int MPIDI_CH3U_Handle_recv_req(MPIDI_VC_t * vc, MPIR_Request * rreq,
int * complete);
/* Handle_send_req invokes the action (method/function) when data
becomes available. It is an obsolete routine; the completion
function should be invoked directly. */
-int MPIDI_CH3U_Handle_send_req(MPIDI_VC_t * vc, MPID_Request * sreq,
+int MPIDI_CH3U_Handle_send_req(MPIDI_VC_t * vc, MPIR_Request * sreq,
int *complete);
int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event);
@@ -1623,7 +1582,7 @@ int MPIDI_CH3_Channel_close( void );
/* MPIDI_CH3U_Get_failed_group() generates a group of failed processes based
* on the last list generated during MPIDI_CH3U_Check_for_failed_procs */
-int MPIDI_CH3U_Get_failed_group(int last_rank, MPID_Group **failed_group);
+int MPIDI_CH3U_Get_failed_group(int last_rank, MPIR_Group **failed_group);
/* MPIDI_CH3U_Check_for_failed_procs() reads PMI_dead_processes key
and marks VCs to those processes as failed */
int MPIDI_CH3U_Check_for_failed_procs(void);
@@ -1713,74 +1672,89 @@ int MPIDI_CH3_InitCompleted( void );
#endif
/* Routines in support of ch3 */
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
/* Routine to return the tag associated with a port */
int MPIDI_GetTagFromPort( const char *, int * );
+#else
+/* Need empty symbol to avoid failure at compile time if defined
+ * MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS. */
+#define MPIDI_GetTagFromPort(port_name, port_name_tag) (MPI_SUCCESS)
+#endif
/* Here are the packet handlers */
-int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
+int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
#ifdef USE_EAGER_SHORT
-int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
+int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
#endif
-int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_EagerSyncAck( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_RndvSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_CancelSendReq( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_CancelSendResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Put( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Accumulate( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_GetAccumulate( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_CAS( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_CASResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_FOP( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_FOPResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Get_AccumResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Get( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_GetResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Lock( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_LockAck( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_LockOpAck( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Unlock( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Flush( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Ack( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_DecrAtCnt( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_FlowCntlUpdate( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_EndCH3( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *,
- MPIDI_msg_sz_t *, MPID_Request ** );
-int MPIDI_CH3_PktHandler_Revoke(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp);
+int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_EagerSyncAck( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_RndvSend( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_CancelSendReq( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_CancelSendResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Put( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Accumulate( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_GetAccumulate( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_CAS( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_CASResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_FOP( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_FOPResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Get_AccumResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Get( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_GetResp( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Lock( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_LockAck( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_LockOpAck( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Unlock( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Flush( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Ack( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_DecrAtCnt( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_FlowCntlUpdate( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
+/* packet handlers used in dynamic process connection. */
+int MPIDI_CH3_PktHandler_ConnAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void * data,
+ intptr_t * buflen, MPIR_Request ** rreqp);
+int MPIDI_CH3_PktHandler_AcceptAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void * data,
+ intptr_t * buflen, MPIR_Request ** rreqp);
+#endif /* end of MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS */
+
+int MPIDI_CH3_PktHandler_EndCH3( MPIDI_VC_t *, MPIDI_CH3_Pkt_t *, void *,
+ intptr_t *, MPIR_Request ** );
+int MPIDI_CH3_PktHandler_Revoke(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void * data,
+ intptr_t *buflen, MPIR_Request **rreqp);
int MPIDI_CH3_PktHandler_Init( MPIDI_CH3_PktHandler_Fcn *[], int );
int MPIDI_CH3I_RMA_Make_progress_global(int *made_progress);
@@ -1798,82 +1772,82 @@ int MPIDI_CH3_PktPrint_EagerSyncAck( FILE *fp, MPIDI_CH3_Pkt_t *pkt );
#endif
/* Routines to create packets (used in implementing MPI communications */
-int MPIDI_CH3_EagerNoncontigSend( MPID_Request **, MPIDI_CH3_Pkt_type_t,
+int MPIDI_CH3_EagerNoncontigSend( MPIR_Request **, MPIDI_CH3_Pkt_type_t,
const void *, MPI_Aint,
- MPI_Datatype, MPIDI_msg_sz_t, int, int, MPID_Comm *,
+ MPI_Datatype, intptr_t, int, int, MPIR_Comm *,
int );
-int MPIDI_CH3_EagerContigSend( MPID_Request **, MPIDI_CH3_Pkt_type_t,
- const void *, MPIDI_msg_sz_t, int,
- int, MPID_Comm *, int );
-int MPIDI_CH3_EagerContigShortSend( MPID_Request **, MPIDI_CH3_Pkt_type_t,
- const void *, MPIDI_msg_sz_t,
- int, int, MPID_Comm *, int );
-int MPIDI_CH3_EagerContigIsend( MPID_Request **, MPIDI_CH3_Pkt_type_t,
- const void *, MPIDI_msg_sz_t, int,
- int, MPID_Comm *, int );
+int MPIDI_CH3_EagerContigSend( MPIR_Request **, MPIDI_CH3_Pkt_type_t,
+ const void *, intptr_t, int,
+ int, MPIR_Comm *, int );
+int MPIDI_CH3_EagerContigShortSend( MPIR_Request **, MPIDI_CH3_Pkt_type_t,
+ const void *, intptr_t,
+ int, int, MPIR_Comm *, int );
+int MPIDI_CH3_EagerContigIsend( MPIR_Request **, MPIDI_CH3_Pkt_type_t,
+ const void *, intptr_t, int,
+ int, MPIR_Comm *, int );
-int MPIDI_CH3_RndvSend( MPID_Request **, const void *, MPI_Aint, MPI_Datatype,
- int, MPIDI_msg_sz_t, MPI_Aint, int, int, MPID_Comm *, int );
+int MPIDI_CH3_RndvSend( MPIR_Request **, const void *, MPI_Aint, MPI_Datatype,
+ int, intptr_t, MPI_Aint, int, int, MPIR_Comm *, int );
-int MPIDI_CH3_EagerSyncNoncontigSend( MPID_Request **, const void *, int,
- MPI_Datatype, MPIDI_msg_sz_t, int, MPI_Aint,
- int, int, MPID_Comm *, int );
-int MPIDI_CH3_EagerSyncZero(MPID_Request **, int, int, MPID_Comm *, int );
+int MPIDI_CH3_EagerSyncNoncontigSend( MPIR_Request **, const void *, int,
+ MPI_Datatype, intptr_t, int, MPI_Aint,
+ int, int, MPIR_Comm *, int );
+int MPIDI_CH3_EagerSyncZero(MPIR_Request **, int, int, MPIR_Comm *, int );
-int MPIDI_CH3_SendNoncontig_iov( struct MPIDI_VC *vc, struct MPID_Request *sreq,
- void *header, MPIDI_msg_sz_t hdr_sz );
+int MPIDI_CH3_SendNoncontig_iov( struct MPIDI_VC *vc, struct MPIR_Request *sreq,
+ void *header, intptr_t hdr_sz );
/* Routines to ack packets, called in the receive routines when a
message is matched */
-int MPIDI_CH3_EagerSyncAck( MPIDI_VC_t *, MPID_Request * );
-int MPIDI_CH3_RecvFromSelf( MPID_Request *, void *, MPI_Aint, MPI_Datatype );
-int MPIDI_CH3_RecvRndv( MPIDI_VC_t *, MPID_Request * );
+int MPIDI_CH3_EagerSyncAck( MPIDI_VC_t *, MPIR_Request * );
+int MPIDI_CH3_RecvFromSelf( MPIR_Request *, void *, MPI_Aint, MPI_Datatype );
+int MPIDI_CH3_RecvRndv( MPIDI_VC_t *, MPIR_Request * );
/* Handler routines to continuing after an IOV is processed (assigned to the
OnDataAvail field in the device part of a request) */
-int MPIDI_CH3_ReqHandler_RecvComplete( MPIDI_VC_t *, MPID_Request *, int * );
-int MPIDI_CH3_ReqHandler_UnpackUEBufComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_RecvComplete( MPIDI_VC_t *, MPIR_Request *, int * );
+int MPIDI_CH3_ReqHandler_UnpackUEBufComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_ReloadIOV( MPIDI_VC_t *, MPID_Request *, int * );
+int MPIDI_CH3_ReqHandler_ReloadIOV( MPIDI_VC_t *, MPIR_Request *, int * );
-int MPIDI_CH3_ReqHandler_UnpackSRBufReloadIOV( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_UnpackSRBufReloadIOV( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_UnpackSRBufComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_UnpackSRBufComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
int MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete( MPIDI_VC_t *,
- MPID_Request *, int * );
-int MPIDI_CH3_ReqHandler_PutRecvComplete( MPIDI_VC_t *, MPID_Request *,
+ MPIR_Request *, int * );
+int MPIDI_CH3_ReqHandler_PutRecvComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_AccumRecvComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_AccumRecvComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_GaccumRecvComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_GaccumRecvComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_FOPRecvComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_FOPRecvComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete( MPIDI_VC_t *,
- MPID_Request *,
+ MPIR_Request *,
int * );
int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete( MPIDI_VC_t *,
- MPID_Request *,
+ MPIR_Request *,
int * );
int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete( MPIDI_VC_t *,
- MPID_Request *, int * );
+ MPIR_Request *, int * );
int MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete( MPIDI_VC_t *,
- MPID_Request *, int * );
+ MPIR_Request *, int * );
/* Send Handlers */
-int MPIDI_CH3_ReqHandler_SendReloadIOV( MPIDI_VC_t *vc, MPID_Request *sreq,
+int MPIDI_CH3_ReqHandler_SendReloadIOV( MPIDI_VC_t *vc, MPIR_Request *sreq,
int *complete );
-int MPIDI_CH3_ReqHandler_GetSendComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_GetSendComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_GaccumSendComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_GaccumSendComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_CASSendComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_CASSendComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
-int MPIDI_CH3_ReqHandler_FOPSendComplete( MPIDI_VC_t *, MPID_Request *,
+int MPIDI_CH3_ReqHandler_FOPSendComplete( MPIDI_VC_t *, MPIR_Request *,
int * );
/* RMA operation request handler */
-int MPIDI_CH3_Req_handler_rma_op_complete(MPID_Request *);
+int MPIDI_CH3_Req_handler_rma_op_complete(MPIR_Request *);
#define MPIDI_CH3_GET_EAGER_THRESHOLD(eager_threshold_p, comm, vc) \
do { \
@@ -1884,14 +1858,4 @@ int MPIDI_CH3_Req_handler_rma_op_complete(MPID_Request *);
} while (0)
-int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id);
-int MPIDI_CH3I_Progress_deregister_hook(int id);
-int MPIDI_CH3I_Progress_activate_hook(int id);
-int MPIDI_CH3I_Progress_deactivate_hook(int id);
-
-#define MPID_Progress_register_hook(fn_, id_) MPIDI_CH3I_Progress_register_hook(fn_, id_)
-#define MPID_Progress_deregister_hook(id_) MPIDI_CH3I_Progress_deregister_hook(id_)
-#define MPID_Progress_activate_hook(id_) MPIDI_CH3I_Progress_activate_hook(id_)
-#define MPID_Progress_deactivate_hook(id_) MPIDI_CH3I_Progress_deactivate_hook(id_)
-
#endif /* !defined(MPICH_MPIDIMPL_H_INCLUDED) */
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index 82a0921..c3b4d00 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -7,7 +7,7 @@
#ifndef HAVE_MPIDPKT_H
#define HAVE_MPIDPKT_H
-#include "oputil.h"
+#include "mpir_op_util.h"
#ifdef HAVE_STDINT_H
#include <stdint.h>
@@ -25,6 +25,20 @@
/* This is the number of ints that can be carried within an RMA packet */
#define MPIDI_RMA_IMMED_BYTES 8
+/* Union for immediate data in RMA packet headers.*/
+typedef union {
+ char payload[MPIDI_RMA_IMMED_BYTES];
+#ifdef NEEDS_STRICT_ALIGNMENT
+ /* Because the data is accessed per predefined type in the packet handler
+ * of accumulate-like operations, we need extra union members to ensure
+ * aligned access.
+ * NOTE: this fix might increase the packet size (long double complex
+ * can be 32bytes), thus we only enable this fix for a few platforms which
+ * are alignment-sensitive.*/
+ MPL_mem_alignment_t alignment;
+#endif
+} MPIDI_CH3_RMA_Immed_u;
+
/* Union over all types (integer, logical, and multi-language types) that are
allowed in a CAS operation. This is used to allocate enough space in the
packet header for immediate data. */
@@ -103,6 +117,11 @@ typedef enum {
MPIDI_CH3_PKT_FLOW_CNTL_UPDATE, /* FIXME: Unused */
MPIDI_CH3_PKT_CLOSE,
MPIDI_CH3_PKT_REVOKE,
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
+ /* Dynamic Connection Management */
+ MPIDI_CH3_PKT_CONN_ACK,
+ MPIDI_CH3_PKT_ACCEPT_ACK,
+#endif
MPIDI_CH3_PKT_END_CH3,
/* The channel can define additional types by defining the value
* MPIDI_CH3_PKT_ENUM */
@@ -137,7 +156,7 @@ typedef struct MPIDI_CH3_Pkt_send {
MPIDI_CH3_Pkt_type_t type; /* XXX - uint8_t to conserve space ??? */
MPIDI_Message_match match;
MPI_Request sender_req_id; /* needed for ssend and send cancel */
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
@@ -153,7 +172,7 @@ typedef MPIDI_CH3_Pkt_send_t MPIDI_CH3_Pkt_ready_send_t;
typedef struct MPIDI_CH3_Pkt_eagershort_send {
MPIDI_CH3_Pkt_type_t type; /* XXX - uint8_t to conserve space ??? */
MPIDI_Message_match match;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
@@ -271,16 +290,16 @@ MPIDI_CH3_PKT_DEFS
err_ = MPI_SUCCESS; \
switch((pkt_).type) { \
case (MPIDI_CH3_PKT_PUT_IMMED): \
- immed_data_ = (pkt_).put.info.data; \
+ immed_data_ = &((pkt_).put.info.data); \
break; \
case (MPIDI_CH3_PKT_ACCUMULATE_IMMED): \
- immed_data_ = (pkt_).accum.info.data; \
+ immed_data_ = &((pkt_).accum.info.data); \
break; \
case (MPIDI_CH3_PKT_GET_ACCUM_IMMED): \
- immed_data_ = (pkt_).get_accum.info.data; \
+ immed_data_ = &((pkt_).get_accum.info.data); \
break; \
case (MPIDI_CH3_PKT_FOP_IMMED): \
- immed_data_ = (pkt_).fop.info.data; \
+ immed_data_ = &((pkt_).fop.info.data); \
break; \
case (MPIDI_CH3_PKT_CAS_IMMED): \
/* Note that here we return pointer of origin data, not \
@@ -288,13 +307,13 @@ MPIDI_CH3_PKT_DEFS
immed_data_ = &((pkt_).cas.origin_data); \
break; \
case (MPIDI_CH3_PKT_GET_RESP_IMMED): \
- immed_data_ = (pkt_).get_resp.info.data; \
+ immed_data_ = &((pkt_).get_resp.info.data); \
break; \
case (MPIDI_CH3_PKT_GET_ACCUM_RESP_IMMED): \
- immed_data_ = (pkt_).get_accum_resp.info.data; \
+ immed_data_ = &((pkt_).get_accum_resp.info.data); \
break; \
case (MPIDI_CH3_PKT_FOP_RESP_IMMED): \
- immed_data_ = (pkt_).fop_resp.info.data; \
+ immed_data_ = &((pkt_).fop_resp.info.data); \
break; \
case (MPIDI_CH3_PKT_CAS_RESP_IMMED): \
immed_data_ = &((pkt_).cas_resp.info.data); \
@@ -639,7 +658,7 @@ typedef struct MPIDI_CH3_Pkt_put {
MPI_Win source_win_handle;
union {
int dataloop_size;
- char data[MPIDI_RMA_IMMED_BYTES];
+ MPIDI_CH3_RMA_Immed_u data;
} info;
} MPIDI_CH3_Pkt_put_t;
@@ -667,7 +686,7 @@ typedef struct MPIDI_CH3_Pkt_get_resp {
/* note that we use struct here in order
* to consistently access data
* by "pkt->info.data". */
- char data[MPIDI_RMA_IMMED_BYTES];
+ MPIDI_CH3_RMA_Immed_u data;
} info;
} MPIDI_CH3_Pkt_get_resp_t;
@@ -682,7 +701,7 @@ typedef struct MPIDI_CH3_Pkt_accum {
MPI_Win source_win_handle;
union {
int dataloop_size;
- char data[MPIDI_RMA_IMMED_BYTES];
+ MPIDI_CH3_RMA_Immed_u data;
} info;
} MPIDI_CH3_Pkt_accum_t;
@@ -697,7 +716,7 @@ typedef struct MPIDI_CH3_Pkt_get_accum {
MPI_Win target_win_handle;
union {
int dataloop_size;
- char data[MPIDI_RMA_IMMED_BYTES];
+ MPIDI_CH3_RMA_Immed_u data;
} info;
} MPIDI_CH3_Pkt_get_accum_t;
@@ -712,7 +731,7 @@ typedef struct MPIDI_CH3_Pkt_get_accum_resp {
/* note that we use struct here in order
* to consistently access data
* by "pkt->info.data". */
- char data[MPIDI_RMA_IMMED_BYTES];
+ MPIDI_CH3_RMA_Immed_u data;
} info;
} MPIDI_CH3_Pkt_get_accum_resp_t;
@@ -753,7 +772,7 @@ typedef struct MPIDI_CH3_Pkt_fop {
/* note that we use struct here in order
* to consistently access data
* by "pkt->info.data". */
- char data[MPIDI_RMA_IMMED_BYTES];
+ MPIDI_CH3_RMA_Immed_u data;
} info;
} MPIDI_CH3_Pkt_fop_t;
@@ -764,7 +783,7 @@ typedef struct MPIDI_CH3_Pkt_fop_resp {
/* note that we use struct here in order
* to consistently access data
* by "pkt->info.data". */
- char data[MPIDI_RMA_IMMED_BYTES];
+ MPIDI_CH3_RMA_Immed_u data;
} info;
/* followings are used to decrement ack_counter at orign */
int target_rank;
@@ -840,9 +859,19 @@ typedef struct MPIDI_CH3_Pkt_close {
int ack;
} MPIDI_CH3_Pkt_close_t;
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
+/* packet types used in dynamic process connection. */
+typedef struct MPIDI_CH3_Pkt_conn_ack {
+ MPIDI_CH3_Pkt_type_t type;
+ int ack;
+} MPIDI_CH3_Pkt_conn_ack_t;
+
+typedef MPIDI_CH3_Pkt_conn_ack_t MPIDI_CH3_Pkt_accept_ack_t;
+#endif /* end of MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS */
+
typedef struct MPIDI_CH3_Pkt_revoke {
MPIDI_CH3_Pkt_type_t type;
- MPIU_Context_id_t revoked_comm;
+ MPIR_Context_id_t revoked_comm;
} MPIDI_CH3_Pkt_revoke_t;
typedef union MPIDI_CH3_Pkt {
@@ -872,6 +901,10 @@ typedef union MPIDI_CH3_Pkt {
MPIDI_CH3_Pkt_ack_t ack;
MPIDI_CH3_Pkt_decr_at_counter_t decr_at_cnt;
MPIDI_CH3_Pkt_close_t close;
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
+ MPIDI_CH3_Pkt_conn_ack_t conn_ack;
+ MPIDI_CH3_Pkt_accept_ack_t accept_ack;
+#endif
MPIDI_CH3_Pkt_cas_t cas;
MPIDI_CH3_Pkt_cas_resp_t cas_resp;
MPIDI_CH3_Pkt_fop_t fop;
diff --git a/src/mpid/ch3/include/mpidpost.h b/src/mpid/ch3/include/mpidpost.h
index 01fd8c0..f2f1e80 100644
--- a/src/mpid/ch3/include/mpidpost.h
+++ b/src/mpid/ch3/include/mpidpost.h
@@ -4,8 +4,10 @@
* See COPYRIGHT in top-level directory.
*/
-#if !defined(MPICH_MPIDPOST_H_INCLUDED)
-#define MPICH_MPIDPOST_H_INCLUDED
+#if !defined(MPIDPOST_H_INCLUDED)
+#define MPIDPOST_H_INCLUDED
+
+#include "mpid_coll.h"
/* FIXME: mpidpost.h is included by mpiimpl.h . However, mpiimpl.h should
refer only to the ADI3 prototypes and should never include prototypes
@@ -56,7 +58,7 @@ void MPIDI_CH3_Progress_start(MPID_Progress_state * state);
make progress on outstanding communication requests.
Input Parameters:
-. state - pointer to the same MPID_Progress_state object passed to
+. state - pointer to the same MPID_Progress_state object passed to
MPIDI_CH3_Progress_start
Return value:
@@ -80,7 +82,7 @@ int MPIDI_CH3_Progress_wait(MPID_Progress_state * state);
MPIDI_CH3_Progress_end - Mark the end of a progress epoch.
Input Parameters:
-. state - pointer to the same MPID_Progress_state object passed to
+. state - pointer to the same MPID_Progress_state object passed to
MPIDI_CH3_Progress_start
Return value:
@@ -121,16 +123,16 @@ int MPIDI_CH3_Progress_poke(void);
int MPIDI_CH3_Open_port(char *port_name);
int MPIDI_CH3_Comm_spawn_multiple(int count, char ** commands, char *** argvs,
- int * maxprocs, MPID_Info ** info_ptrs,
+ int * maxprocs, MPIR_Info ** info_ptrs,
int root,
- MPID_Comm * comm_ptr, MPID_Comm ** intercomm,
+ MPIR_Comm * comm_ptr, MPIR_Comm ** intercomm,
int * errcodes);
-int MPIDI_CH3_Comm_accept(char * port_name, int root, MPID_Comm * comm_ptr,
- MPID_Comm ** newcomm);
+int MPIDI_CH3_Comm_accept(char * port_name, int root, MPIR_Comm * comm_ptr,
+ MPIR_Comm ** newcomm);
-int MPIDI_CH3_Comm_connect(char * port_name, int root, MPID_Comm * comm_ptr,
- MPID_Comm ** newcomm);
+int MPIDI_CH3_Comm_connect(char * port_name, int root, MPIR_Comm * comm_ptr,
+ MPIR_Comm ** newcomm);
/* Include definitions from the channel which require items defined by this
@@ -138,7 +140,7 @@ int MPIDI_CH3_Comm_connect(char * port_name, int root, MPID_Comm * comm_ptr,
(mpiimpl.h). */
#include "mpidi_ch3_post.h"
-#include "mpid_datatype.h"
+#include "mpidu_datatype.h"
/*
* Request utility macros (public - can be used in MPID macros)
@@ -152,11 +154,11 @@ int MPIDI_CH3_Comm_connect(char * port_name, int root, MPID_Comm * comm_ptr,
from the channel level? */
/* The above comment is accurate, although we do not currently have any channels
* that do this. Memory barriers are included in fine-grained multithreaded
- * versions of the MPID_cc_incr/decr macros. */
+ * versions of the MPIR_cc_incr/decr macros. */
#define MPIDI_CH3U_Request_decrement_cc(req_, incomplete_) \
- MPID_cc_decr((req_)->cc_ptr, incomplete_)
+ MPIR_cc_decr((req_)->cc_ptr, incomplete_)
#define MPIDI_CH3U_Request_increment_cc(req_, was_incomplete_) \
- MPID_cc_incr((req_)->cc_ptr, was_incomplete_)
+ MPIR_cc_incr((req_)->cc_ptr, was_incomplete_)
/*
* Device level request management macros
@@ -173,23 +175,34 @@ int MPIDI_CH3_Comm_connect(char * port_name, int root, MPID_Comm * comm_ptr,
#define MPID_Progress_poke() MPIDI_CH3_Progress_poke()
/* Dynamic process support */
-int MPID_GPID_GetAllInComm( MPID_Comm *comm_ptr, int local_size,
- MPID_Gpid local_gpids[], int *singlePG );
-int MPID_GPID_Get( MPID_Comm *comm_ptr, int rank, MPID_Gpid *gpid );
-int MPID_GPID_ToLpidArray( int size, MPID_Gpid gpid[], int lpid[] );
-int MPID_Create_intercomm_from_lpids( MPID_Comm *newcomm_ptr,
- int size, const int lpids[] );
-int MPID_PG_ForwardPGInfo( MPID_Comm *peer_ptr, MPID_Comm *comm_ptr,
- int nPGids, const MPID_Gpid gpids[],
- int root );
-/* PG_ForwardPGInfo is used as the implementation of the intercomm-create
- hook that is needed with dynamic processes because of limitations
- in the current definition of PMI */
-#define MPID_ICCREATE_REMOTECOMM_HOOK(_p,_c,_np,_gp,_r) \
- MPID_PG_ForwardPGInfo(_p,_c,_np,_gp,_r)
+int MPIDI_GPID_GetAllInComm( MPIR_Comm *comm_ptr, int local_size,
+ MPIDI_Gpid local_gpids[], int *singlePG );
+int MPIDI_GPID_Get( MPIR_Comm *comm_ptr, int rank, MPIDI_Gpid *gpid );
+int MPIDI_GPID_ToLpidArray( int size, MPIDI_Gpid gpid[], int lpid[] );
+int MPIDI_PG_ForwardPGInfo( MPIR_Comm *peer_ptr, MPIR_Comm *comm_ptr,
+ int nPGids, const MPIDI_Gpid gpids[],
+ int root );
+int MPID_Intercomm_exchange_map( MPIR_Comm *local_comm_ptr, int local_leader,
+ MPIR_Comm *peer_comm_ptr, int remote_leader,
+ int *remote_size, int **remote_lpids,
+ int *is_low_group);
+int MPID_Create_intercomm_from_lpids( MPIR_Comm *newcomm_ptr,
+ int size, const int lpids[] );
+
+#define MPID_INTERCOMM_NO_DYNPROC(comm) (0)
/* communicator hooks */
-int MPIDI_CH3I_Comm_create_hook(struct MPID_Comm *);
-int MPIDI_CH3I_Comm_destroy_hook(struct MPID_Comm *);
+int MPIDI_CH3I_Comm_create_hook(struct MPIR_Comm *);
+int MPIDI_CH3I_Comm_destroy_hook(struct MPIR_Comm *);
+
+int MPIDI_CH3I_Progress_register_hook(int (*progress_fn)(int*), int *id);
+int MPIDI_CH3I_Progress_deregister_hook(int id);
+int MPIDI_CH3I_Progress_activate_hook(int id);
+int MPIDI_CH3I_Progress_deactivate_hook(int id);
+
+#define MPID_Progress_register_hook(fn_, id_) MPIDI_CH3I_Progress_register_hook(fn_, id_)
+#define MPID_Progress_deregister_hook(id_) MPIDI_CH3I_Progress_deregister_hook(id_)
+#define MPID_Progress_activate_hook(id_) MPIDI_CH3I_Progress_activate_hook(id_)
+#define MPID_Progress_deactivate_hook(id_) MPIDI_CH3I_Progress_deactivate_hook(id_)
-#endif /* !defined(MPICH_MPIDPOST_H_INCLUDED) */
+#endif /* !defined(MPIDPOST_H_INCLUDED) */
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 9a25b58..c192970 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -7,38 +7,37 @@
/* FIXME: This header should contain only the definitions exported to the
mpiimpl.h level */
-#if !defined(MPICH_MPIDPRE_H_INCLUDED)
-#define MPICH_MPIDPRE_H_INCLUDED
+#if !defined(MPIDPRE_H_INCLUDED)
+#define MPIDPRE_H_INCLUDED
-/* Tell the compiler that we're going to declare struct MPID_Request later */
-struct MPID_Request;
+/* Tell the compiler that we're going to declare struct MPIR_Request later */
+struct MPIR_Request;
#if defined(HAVE_SYS_TYPES_H)
#include <sys/types.h>
#endif
-/* The maximum message size is the size of a pointer; this allows MPI_Aint
- to be larger than a pointer */
-typedef MPIU_Pint MPIDI_msg_sz_t;
-
-#include "mpid_dataloop.h"
+#include "mpid_datatype_fallback.h"
/* FIXME: Include here? */
#include "opa_primitives.h"
#include "mpid_thread.h"
+#include "mpid_sched.h"
+
/* We simply use the fallback timer functionality and do not define
* our own */
#include "mpid_timers_fallback.h"
union MPIDI_CH3_Pkt;
struct MPIDI_VC;
-struct MPID_Request;
+struct MPIR_Request;
/* PktHandler function:
vc (INPUT) -- vc on which the packet was received
- pkt (INPUT) -- pointer to packet header at beginning of receive buffer
+ pkt (INPUT) -- pointer to packet header (aligned access).
+ data (INPUT) -- pointer to beginning of data
buflen (I/O) -- IN: number of bytes received into receive buffer
OUT: number of bytes processed by the handler function
req (OUTPUT) -- NULL, if the whole message has been processed by the handler
@@ -47,8 +46,8 @@ struct MPID_Request;
message should be received.
(This decl needs to come before mpidi_ch3_pre.h)
*/
-typedef int MPIDI_CH3_PktHandler_Fcn(struct MPIDI_VC *vc, union MPIDI_CH3_Pkt *pkt,
- MPIDI_msg_sz_t *buflen, struct MPID_Request **req );
+typedef int MPIDI_CH3_PktHandler_Fcn(struct MPIDI_VC *vc, union MPIDI_CH3_Pkt *pkt, void *data,
+ intptr_t *buflen, struct MPIR_Request **req );
/* Include definitions from the channel which must exist before items in this
file (mpidpre.h) or the file it includes (mpiimpl.h) can be defined. */
@@ -84,16 +83,13 @@ typedef int32_t MPIDI_Rank_t;
typedef MPIDI_Rank_t MPID_Node_id_t;
-/* provides "pre" typedefs and such for NBC scheduling mechanism */
-#include "mpid_sched_pre.h"
-
/* For the typical communication system for which the ch3 channel is
appropriate, 16 bits is sufficient for the rank. By also using 16
bits for the context, we can reduce the size of the match
information, which is beneficial for slower communication
links. Further, this allows the total structure size to be 64 bits
and the search operations can be optimized on 64-bit platforms. We
- use a union of the actual required structure with a MPIU_Upint, so
+ use a union of the actual required structure with a uintptr_t, so
in this optimized case, the "whole" field can be used for
comparisons.
@@ -112,11 +108,11 @@ typedef MPIDI_Rank_t MPID_Node_id_t;
typedef struct MPIDI_Message_match_parts {
int32_t tag;
MPIDI_Rank_t rank;
- MPIU_Context_id_t context_id;
+ MPIR_Context_id_t context_id;
} MPIDI_Message_match_parts_t;
typedef union {
MPIDI_Message_match_parts_t parts;
- MPIU_Upint whole;
+ uintptr_t whole;
} MPIDI_Message_match;
/* Provides MPIDI_CH3_Pkt_t. Must come after MPIDI_Message_match definition. */
@@ -136,7 +132,7 @@ typedef union {
* MPIDI_CH3_CA_COMPLETE - The last operation for this request has completed.
* The completion counter should be decremented. If
* it has reached zero, then the request should be released by calling
- * MPID_Request_release().
+ * MPIR_Request_free().
*
* MPIDI_CH3_CA_UNPACK_UEBUF_AND_COMPLETE - This is a special case of the
* MPIDI_CH3_CA_COMPLETE. The data for an unexpected
@@ -168,9 +164,8 @@ typedef union {
* by the channel instance.
*/
-#define HAVE_DEV_COMM_HOOK
-#define MPID_Dev_comm_create_hook(comm_) MPIDI_CH3I_Comm_create_hook(comm_)
-#define MPID_Dev_comm_destroy_hook(comm_) MPIDI_CH3I_Comm_destroy_hook(comm_)
+#define MPID_Comm_create_hook(comm_) MPIDI_CH3I_Comm_create_hook(comm_)
+#define MPID_Comm_free_hook(comm_) MPIDI_CH3I_Comm_destroy_hook(comm_)
#ifndef HAVE_MPIDI_VCRT
#define HAVE_MPIDI_VCRT
@@ -193,8 +188,8 @@ typedef struct MPIDI_CH3I_comm
struct MPIDI_VCRT *vcrt; /* virtual connecton reference table */
struct MPIDI_VCRT *local_vcrt; /* local virtual connecton reference table */
- struct MPID_Comm *next; /* next pointer for list of communicators */
- struct MPID_Comm *prev; /* prev pointer for list of communicators */
+ struct MPIR_Comm *next; /* next pointer for list of communicators */
+ struct MPIR_Comm *prev; /* prev pointer for list of communicators */
MPIDI_CH3I_CH_comm_t ch;
}
MPIDI_CH3I_comm_t;
@@ -352,12 +347,12 @@ typedef struct MPIDI_Win_basic_info {
incomplete sync requests (used in \
Win_fence and PSCW). */ \
int active; /* specify if this window is active or not */ \
- struct MPID_Win *prev; \
- struct MPID_Win *next; \
+ struct MPIR_Win *prev; \
+ struct MPIR_Win *next; \
int outstanding_acks; /* keep track of # of outstanding ACKs window \
wide. */ \
-extern struct MPID_Win *MPIDI_RMA_Win_active_list_head, *MPIDI_RMA_Win_inactive_list_head;
+extern struct MPIR_Win *MPIDI_RMA_Win_active_list_head, *MPIDI_RMA_Win_inactive_list_head;
extern int MPIDI_CH3I_RMA_Active_req_cnt;
extern int MPIDI_CH3I_RMA_Progress_hook_id;
@@ -385,13 +380,13 @@ typedef struct MPIDI_Request {
/* segment, segment_first, and segment_size are used when processing
non-contiguous datatypes */
- /* MPID_Segment segment; */
- struct MPID_Segment *segment_ptr;
- MPIDI_msg_sz_t segment_first;
- MPIDI_msg_sz_t segment_size;
+ /* MPIDU_Segment segment; */
+ struct MPIDU_Segment *segment_ptr;
+ intptr_t segment_first;
+ intptr_t segment_size;
/* Pointer to datatype for reference counting purposes */
- struct MPID_Datatype * datatype_ptr;
+ struct MPIDU_Datatype* datatype_ptr;
/* iov and iov_count define the data to be transferred/received.
iov_offset points to the current head element in the IOV */
@@ -403,7 +398,7 @@ typedef struct MPIDI_Request {
For example, when an operation described by an iov has
completed. This replaces the MPIDI_CA_t (completion action)
field used through MPICH 1.0.4. */
- int (*OnDataAvail)( struct MPIDI_VC *, struct MPID_Request *, int * );
+ int (*OnDataAvail)( struct MPIDI_VC *, struct MPIR_Request *, int * );
/* OnFinal is used in the following case:
OnDataAvail is set to a function, and that function has processed
all of the data. At that point, the OnDataAvail function can
@@ -412,16 +407,16 @@ typedef struct MPIDI_Request {
as a get-response) when processing of the non-contiguous data
completes. This value need not be initialized unless OnDataAvail
is set to a non-null value (and then only in certain cases) */
- int (*OnFinal)( struct MPIDI_VC *, struct MPID_Request *, int * );
+ int (*OnFinal)( struct MPIDI_VC *, struct MPIR_Request *, int * );
/* tmpbuf and tmpbuf_sz describe temporary storage used for things like
unexpected eager messages and packing/unpacking
buffers. tmpuf_off is the current offset into the temporary buffer. */
void *tmpbuf;
- MPIDI_msg_sz_t tmpbuf_off;
- MPIDI_msg_sz_t tmpbuf_sz;
+ intptr_t tmpbuf_off;
+ intptr_t tmpbuf_sz;
- MPIDI_msg_sz_t recv_data_sz;
+ intptr_t recv_data_sz;
MPI_Request sender_req_id;
unsigned int state;
@@ -456,7 +451,7 @@ typedef struct MPIDI_Request {
void *ext_hdr_ptr; /* Pointer to extended packet header.
* It is allocated in RMA issuing/pkt_handler functions,
* and freed when release request. */
- MPIDI_msg_sz_t ext_hdr_sz;
+ intptr_t ext_hdr_sz;
struct MPIDI_RMA_Target *rma_target_ptr;
@@ -469,21 +464,50 @@ typedef struct MPIDI_Request {
Question: do we want to make this a link instead of reserving
a fixed spot in the request? */
MPIDI_CH3_Pkt_t pending_pkt;
- struct MPID_Request * next;
+
+ /* Notes about request_completed_cb:
+ *
+ * 1. The callback function is triggered when this requests
+ * completion count reaches 0.
+ *
+ * 2. The callback function should be nonblocking.
+ *
+ * 3. The callback function should not poke the progress engine,
+ * or call any function that pokes the progress engine.
+ *
+ * 4. The callback function can complete other requests, thus
+ * calling those requests' callback functions. However, the
+ * recursion depth of request completion function is limited.
+ * If we ever need deeper recurisve calls, we need to change
+ * to an iterative design instead of a recursive design for
+ * request completion.
+ *
+ * 5. In multithreaded programs, since the callback function is
+ * nonblocking and never calls the progress engine, it would
+ * never yield the lock to other threads. So the recursion
+ * should be multithreading-safe.
+ */
+ int (*request_completed_cb)(struct MPIR_Request *);
+
+ /* partner send request when a receive request is created by the
+ * sender (only used for self send) */
+ struct MPIR_Request * partner_request;
+
+ struct MPIR_Request * next;
} MPIDI_Request;
-#define MPID_REQUEST_DECL MPIDI_Request dev;
+#define MPIR_REQUEST_DECL MPIDI_Request dev;
#if defined(MPIDI_CH3_REQUEST_DECL)
#define MPID_DEV_REQUEST_DECL \
-MPID_REQUEST_DECL \
+MPIR_REQUEST_DECL \
MPIDI_CH3_REQUEST_DECL
#else
#define MPID_DEV_REQUEST_DECL \
-MPID_REQUEST_DECL
+MPIR_REQUEST_DECL
#endif
#ifdef MPIDI_CH3_REQUEST_KIND_DECL
-#define MPID_DEV_REQUEST_KIND_DECL MPIDI_CH3_REQUEST_KIND_DECL
+#define MPID_REQUEST_KIND_DECL MPIDI_CH3_REQUEST_KIND_DECL
#endif
#endif
@@ -494,17 +518,222 @@ MPID_REQUEST_DECL
/* FIXME: The progress routines will be made into ch3-common definitions, not
channel specific. Channels that need more will need to piggy back or
otherwise override */
-#ifndef MPID_PROGRESS_STATE_DECL
+typedef struct {
#if defined(MPIDI_CH3_PROGRESS_STATE_DECL)
-# define MPID_PROGRESS_STATE_DECL MPIDI_CH3_PROGRESS_STATE_DECL
+ MPIDI_CH3_PROGRESS_STATE_DECL
#else
-# define MPID_PROGRESS_STATE_DECL int foo;
-#endif
+ int foo;
#endif
+} MPID_Progress_state;
-#define MPID_DEV_GPID_DECL int gpid[2];
+typedef struct {
+ int gpid[2];
+} MPIDI_Gpid;
/* Tell initthread to prepare a private comm_world */
#define MPID_NEEDS_ICOMM_WORLD
-#endif /* !defined(MPICH_MPIDPRE_H_INCLUDED) */
+int MPID_Init( int *argc_p, char ***argv_p, int requested,
+ int *provided, int *has_args, int *has_env );
+
+int MPID_InitCompleted( void );
+
+int MPID_Finalize(void);
+int MPID_Abort( MPIR_Comm *comm, int mpi_errno, int exit_code, const char *error_msg );
+
+int MPID_Open_port(MPIR_Info *, char *);
+int MPID_Close_port(const char *);
+
+int MPID_Comm_accept(const char *, MPIR_Info *, int, MPIR_Comm *, MPIR_Comm **);
+
+int MPID_Comm_connect(const char *, MPIR_Info *, int, MPIR_Comm *, MPIR_Comm **);
+
+int MPID_Comm_disconnect(MPIR_Comm *);
+
+int MPID_Comm_spawn_multiple(int, char *[], char **[], const int [], MPIR_Info* [],
+ int, MPIR_Comm *, MPIR_Comm **, int []);
+
+int MPID_Comm_failure_ack(MPIR_Comm *comm);
+
+int MPID_Comm_failure_get_acked(MPIR_Comm *comm, MPIR_Group **failed_group_ptr);
+
+int MPID_Comm_get_all_failed_procs(MPIR_Comm *comm_ptr, MPIR_Group **failed_group, int tag);
+
+int MPID_Comm_revoke(MPIR_Comm *comm, int is_remote);
+
+int MPID_Send( const void *buf, MPI_Aint count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Rsend( const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Ssend( const void *buf, MPI_Aint count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_tBsend( const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset );
+
+int MPID_Isend( const void *buf, MPI_Aint count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Irsend( const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Issend( const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Recv( void *buf, MPI_Aint count, MPI_Datatype datatype,
+ int source, int tag, MPIR_Comm *comm, int context_offset,
+ MPI_Status *status, MPIR_Request **request );
+
+int MPID_Irecv( void *buf, MPI_Aint count, MPI_Datatype datatype,
+ int source, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Send_init( const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Bsend_init(const void *, int, MPI_Datatype, int, int, MPIR_Comm *,
+ int, MPIR_Request **);
+int MPID_Rsend_init( const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+int MPID_Ssend_init( const void *buf, int count, MPI_Datatype datatype,
+ int dest, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Recv_init( void *buf, int count, MPI_Datatype datatype,
+ int source, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **request );
+
+int MPID_Startall(int count, MPIR_Request *requests[]);
+
+int MPID_Probe(int, int, MPIR_Comm *, int, MPI_Status *);
+int MPID_Iprobe(int, int, MPIR_Comm *, int, int *, MPI_Status *);
+
+int MPID_Mprobe(int source, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **message, MPI_Status *status);
+
+int MPID_Improbe(int source, int tag, MPIR_Comm *comm, int context_offset,
+ int *flag, MPIR_Request **message, MPI_Status *status);
+
+int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request *message, MPIR_Request **rreqp);
+
+int MPID_Mrecv(void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request *message, MPI_Status *status);
+
+int MPID_Cancel_send(MPIR_Request *);
+int MPID_Cancel_recv(MPIR_Request *);
+
+int MPID_Comm_AS_enabled(MPIR_Comm *);
+
+int MPID_Request_is_anysource(MPIR_Request *);
+
+MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp);
+
+MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
+
+int MPID_Win_create(void *, MPI_Aint, int, MPIR_Info *, MPIR_Comm *,
+ MPIR_Win **);
+int MPID_Win_free(MPIR_Win **);
+
+int MPID_Put(const void *, int, MPI_Datatype, int, MPI_Aint, int,
+ MPI_Datatype, MPIR_Win *);
+int MPID_Get(void *, int, MPI_Datatype, int, MPI_Aint, int,
+ MPI_Datatype, MPIR_Win *);
+int MPID_Accumulate(const void *, int, MPI_Datatype, int, MPI_Aint, int,
+ MPI_Datatype, MPI_Op, MPIR_Win *);
+
+int MPID_Win_fence(int, MPIR_Win *);
+int MPID_Win_post(MPIR_Group *group_ptr, int assert, MPIR_Win *win_ptr);
+int MPID_Win_start(MPIR_Group *group_ptr, int assert, MPIR_Win *win_ptr);
+int MPID_Win_test(MPIR_Win *win_ptr, int *flag);
+int MPID_Win_wait(MPIR_Win *win_ptr);
+int MPID_Win_complete(MPIR_Win *win_ptr);
+
+int MPID_Win_lock(int lock_type, int dest, int assert, MPIR_Win *win_ptr);
+int MPID_Win_unlock(int dest, MPIR_Win *win_ptr);
+
+int MPID_Win_allocate(MPI_Aint size, int disp_unit, MPIR_Info *info,
+ MPIR_Comm *comm, void *baseptr, MPIR_Win **win);
+int MPID_Win_allocate_shared(MPI_Aint size, int disp_unit, MPIR_Info *info_ptr, MPIR_Comm *comm_ptr,
+ void *base_ptr, MPIR_Win **win_ptr);
+int MPID_Win_shared_query(MPIR_Win *win, int rank, MPI_Aint *size, int *disp_unit,
+ void *baseptr);
+int MPID_Win_create_dynamic(MPIR_Info *info, MPIR_Comm *comm, MPIR_Win **win);
+int MPID_Win_attach(MPIR_Win *win, void *base, MPI_Aint size);
+int MPID_Win_detach(MPIR_Win *win, const void *base);
+int MPID_Win_get_info(MPIR_Win *win, MPIR_Info **info_used);
+int MPID_Win_set_info(MPIR_Win *win, MPIR_Info *info);
+
+int MPID_Get_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr, int result_count,
+ MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPIR_Win *win);
+int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
+ MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
+ MPI_Op op, MPIR_Win *win);
+int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
+ void *result_addr, MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPIR_Win *win);
+int MPID_Rput(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win *win,
+ MPIR_Request **request);
+int MPID_Rget(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win *win,
+ MPIR_Request **request);
+int MPID_Raccumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPIR_Win *win,
+ MPIR_Request **request);
+int MPID_Rget_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr, int result_count,
+ MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPIR_Win *win,
+ MPIR_Request **request);
+
+int MPID_Win_lock_all(int assert, MPIR_Win *win);
+int MPID_Win_unlock_all(MPIR_Win *win);
+int MPID_Win_flush(int rank, MPIR_Win *win);
+int MPID_Win_flush_all(MPIR_Win *win);
+int MPID_Win_flush_local(int rank, MPIR_Win *win);
+int MPID_Win_flush_local_all(MPIR_Win *win);
+int MPID_Win_sync(MPIR_Win *win);
+
+void MPID_Progress_start(MPID_Progress_state * state);
+int MPID_Progress_wait(MPID_Progress_state * state);
+void MPID_Progress_end(MPID_Progress_state * stae);
+int MPID_Progress_test(void);
+int MPID_Progress_poke(void);
+
+int MPID_Get_processor_name( char *name, int namelen, int *resultlen);
+int MPID_Get_universe_size(int * universe_size);
+int MPID_Comm_get_lpid(MPIR_Comm *comm_ptr, int idx, int * lpid_ptr, MPL_bool is_remote);
+
+void MPID_Request_create_hook(MPIR_Request *);
+void MPID_Request_free_hook(MPIR_Request *);
+void MPID_Request_destroy_hook(MPIR_Request *);
+int MPID_Request_complete(MPIR_Request *);
+
+void *MPID_Alloc_mem( size_t size, MPIR_Info *info );
+int MPID_Free_mem( void *ptr );
+
+/* Prototypes and definitions for the node ID code. This is used to support
+ hierarchical collectives in a (mostly) device-independent way. */
+#if defined(MPID_USE_NODE_IDS)
+/* MPID_Node_id_t is a signed integer type defined by the device in mpidpre.h. */
+int MPID_Get_node_id(MPIR_Comm *comm, int rank, MPID_Node_id_t *id_p);
+int MPID_Get_max_node_id(MPIR_Comm *comm, MPID_Node_id_t *max_id_p);
+#endif
+
+#endif /* !defined(MPIDPRE_H_INCLUDED) */
diff --git a/src/mpid/ch3/include/mpidrma.h b/src/mpid/ch3/include/mpidrma.h
index 1b1f64f..fd72c65 100644
--- a/src/mpid/ch3/include/mpidrma.h
+++ b/src/mpid/ch3/include/mpidrma.h
@@ -17,15 +17,15 @@
#define FUNCNAME send_lock_msg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int send_lock_msg(int dest, int lock_type, MPID_Win * win_ptr)
+static inline int send_lock_msg(int dest, int lock_type, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_lock_t *lock_pkt = &upkt.lock;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
MPIDI_VC_t *vc;
- MPIDI_STATE_DECL(MPID_STATE_SEND_LOCK_MSG);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_SEND_LOCK_MSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_LOCK_MSG);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_SEND_LOCK_MSG);
MPIDI_Comm_get_vc_set_active(win_ptr->comm_ptr, dest, &vc);
@@ -37,7 +37,7 @@ static inline int send_lock_msg(int dest, int lock_type, MPID_Win * win_ptr)
if (lock_type == MPI_LOCK_SHARED)
lock_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED;
else {
- MPIU_Assert(lock_type == MPI_LOCK_EXCLUSIVE);
+ MPIR_Assert(lock_type == MPI_LOCK_EXCLUSIVE);
lock_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE;
}
@@ -48,11 +48,11 @@ static inline int send_lock_msg(int dest, int lock_type, MPID_Win * win_ptr)
/* release the request returned by iStartMsg */
if (req != NULL) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_SEND_LOCK_MSG);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_SEND_LOCK_MSG);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -64,15 +64,15 @@ static inline int send_lock_msg(int dest, int lock_type, MPID_Win * win_ptr)
#define FUNCNAME send_unlock_msg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int send_unlock_msg(int dest, MPID_Win * win_ptr, MPIDI_CH3_Pkt_flags_t flags)
+static inline int send_unlock_msg(int dest, MPIR_Win * win_ptr, MPIDI_CH3_Pkt_flags_t flags)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_unlock_t *unlock_pkt = &upkt.unlock;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
MPIDI_VC_t *vc;
- MPIDI_STATE_DECL(MPID_STATE_SEND_UNLOCK_MSG);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_SEND_UNLOCK_MSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_UNLOCK_MSG);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_SEND_UNLOCK_MSG);
MPIDI_Comm_get_vc_set_active(win_ptr->comm_ptr, dest, &vc);
@@ -91,11 +91,11 @@ static inline int send_unlock_msg(int dest, MPID_Win * win_ptr, MPIDI_CH3_Pkt_fl
/* Release the request returned by iStartMsg */
if (req != NULL) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_SEND_UNLOCK_MSG);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_SEND_UNLOCK_MSG);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -108,20 +108,20 @@ static inline int send_unlock_msg(int dest, MPID_Win * win_ptr, MPIDI_CH3_Pkt_fl
#define FUNCNAME MPIDI_CH3I_Send_lock_ack_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Send_lock_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_ptr,
+static inline int MPIDI_CH3I_Send_lock_ack_pkt(MPIDI_VC_t * vc, MPIR_Win * win_ptr,
MPIDI_CH3_Pkt_flags_t flags,
MPI_Win source_win_handle,
MPI_Request request_handle)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_lock_ack_t *lock_ack_pkt = &upkt.lock_ack;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
int mpi_errno;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT);
- MPIU_Assert(!(source_win_handle != MPI_WIN_NULL && request_handle != MPI_REQUEST_NULL));
+ MPIR_Assert(!(source_win_handle != MPI_WIN_NULL && request_handle != MPI_REQUEST_NULL));
/* send lock ack packet */
MPIDI_Pkt_init(lock_ack_pkt, MPIDI_CH3_PKT_LOCK_ACK);
@@ -130,8 +130,8 @@ static inline int MPIDI_CH3I_Send_lock_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_p
lock_ack_pkt->target_rank = win_ptr->comm_ptr->rank;
lock_ack_pkt->flags = flags;
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE,
- (MPIU_DBG_FDEST, "sending lock ack pkt on vc=%p, source_win_handle=%#08x",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE,
+ (MPL_DBG_FDEST, "sending lock ack pkt on vc=%p, source_win_handle=%#08x",
vc, lock_ack_pkt->source_win_handle));
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
@@ -142,11 +142,11 @@ static inline int MPIDI_CH3I_Send_lock_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_p
}
if (req != NULL) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT);
return mpi_errno;
}
@@ -155,20 +155,20 @@ static inline int MPIDI_CH3I_Send_lock_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_p
#define FUNCNAME MPIDI_CH3I_Send_lock_op_ack_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Send_lock_op_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_ptr,
+static inline int MPIDI_CH3I_Send_lock_op_ack_pkt(MPIDI_VC_t * vc, MPIR_Win * win_ptr,
MPIDI_CH3_Pkt_flags_t flags,
MPI_Win source_win_handle,
MPI_Request request_handle)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_lock_op_ack_t *lock_op_ack_pkt = &upkt.lock_op_ack;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
int mpi_errno;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT);
- MPIU_Assert(!(source_win_handle != MPI_WIN_NULL && request_handle != MPI_REQUEST_NULL));
+ MPIR_Assert(!(source_win_handle != MPI_WIN_NULL && request_handle != MPI_REQUEST_NULL));
/* send lock ack packet */
MPIDI_Pkt_init(lock_op_ack_pkt, MPIDI_CH3_PKT_LOCK_OP_ACK);
@@ -177,8 +177,8 @@ static inline int MPIDI_CH3I_Send_lock_op_ack_pkt(MPIDI_VC_t * vc, MPID_Win * wi
lock_op_ack_pkt->target_rank = win_ptr->comm_ptr->rank;
lock_op_ack_pkt->flags = flags;
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE,
- (MPIU_DBG_FDEST, "sending lock op ack pkt on vc=%p, source_win_handle=%#08x",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE,
+ (MPL_DBG_FDEST, "sending lock op ack pkt on vc=%p, source_win_handle=%#08x",
vc, lock_op_ack_pkt->source_win_handle));
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
@@ -189,11 +189,11 @@ static inline int MPIDI_CH3I_Send_lock_op_ack_pkt(MPIDI_VC_t * vc, MPID_Win * wi
}
if (req != NULL) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SEND_LOCK_OP_ACK_PKT);
return mpi_errno;
}
@@ -202,16 +202,16 @@ static inline int MPIDI_CH3I_Send_lock_op_ack_pkt(MPIDI_VC_t * vc, MPID_Win * wi
#define FUNCNAME MPIDI_CH3I_Send_ack_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_Send_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_ptr,
+static inline int MPIDI_CH3I_Send_ack_pkt(MPIDI_VC_t * vc, MPIR_Win * win_ptr,
MPI_Win source_win_handle)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_ack_t *ack_pkt = &upkt.ack;
- MPID_Request *req;
+ MPIR_Request *req;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT);
MPIDI_Pkt_init(ack_pkt, MPIDI_CH3_PKT_ACK);
ack_pkt->source_win_handle = source_win_handle;
@@ -226,11 +226,11 @@ static inline int MPIDI_CH3I_Send_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_ptr,
}
if (req != NULL) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT);
return mpi_errno;
}
@@ -239,15 +239,15 @@ static inline int MPIDI_CH3I_Send_ack_pkt(MPIDI_VC_t * vc, MPID_Win * win_ptr,
#define FUNCNAME send_decr_at_cnt_msg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int send_decr_at_cnt_msg(int dst, MPID_Win * win_ptr, MPIDI_CH3_Pkt_flags_t flags)
+static inline int send_decr_at_cnt_msg(int dst, MPIR_Win * win_ptr, MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_decr_at_counter_t *decr_at_cnt_pkt = &upkt.decr_at_cnt;
MPIDI_VC_t *vc;
- MPID_Request *request = NULL;
+ MPIR_Request *request = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_SEND_DECR_AT_CNT_MSG);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_SEND_DECR_AT_CNT_MSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_DECR_AT_CNT_MSG);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_SEND_DECR_AT_CNT_MSG);
MPIDI_Pkt_init(decr_at_cnt_pkt, MPIDI_CH3_PKT_DECR_AT_COUNTER);
decr_at_cnt_pkt->target_win_handle = win_ptr->basic_info_table[dst].win_handle;
@@ -264,11 +264,11 @@ static inline int send_decr_at_cnt_msg(int dst, MPID_Win * win_ptr, MPIDI_CH3_Pk
}
if (request != NULL) {
- MPID_Request_release(request);
+ MPIR_Request_free(request);
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_SEND_DECR_AT_CNT_MSG);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_SEND_DECR_AT_CNT_MSG);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -281,15 +281,15 @@ static inline int send_decr_at_cnt_msg(int dst, MPID_Win * win_ptr, MPIDI_CH3_Pk
#define FUNCNAME send_flush_msg
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int send_flush_msg(int dest, MPID_Win * win_ptr)
+static inline int send_flush_msg(int dest, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_flush_t *flush_pkt = &upkt.flush;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
MPIDI_VC_t *vc;
- MPIDI_STATE_DECL(MPID_STATE_SEND_FLUSH_MSG);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_SEND_FLUSH_MSG);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_FLUSH_MSG);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_SEND_FLUSH_MSG);
MPIDI_Comm_get_vc_set_active(win_ptr->comm_ptr, dest, &vc);
@@ -304,11 +304,11 @@ static inline int send_flush_msg(int dest, MPID_Win * win_ptr)
/* Release the request returned by iStartMsg */
if (req != NULL) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_SEND_FLUSH_MSG);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_SEND_FLUSH_MSG);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -318,9 +318,9 @@ static inline int send_flush_msg(int dest, MPID_Win * win_ptr)
/* enqueue an unsatisfied origin in passive target at target side. */
-static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
- MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** reqp)
+static inline int enqueue_lock_origin(MPIR_Win * win_ptr, MPIDI_VC_t * vc,
+ MPIDI_CH3_Pkt_t * pkt, void * data,
+ intptr_t * buflen, MPIR_Request ** reqp)
{
MPIDI_RMA_Target_lock_entry_t *new_ptr = NULL;
MPIDI_CH3_Pkt_flags_t flag;
@@ -345,7 +345,7 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
if (MPIDI_CH3I_RMA_PKT_IS_IMMED_OP(*pkt) || pkt->type == MPIDI_CH3_PKT_LOCK ||
pkt->type == MPIDI_CH3_PKT_GET) {
/* return bytes of data processed in this pkt handler */
- (*buflen) = sizeof(MPIDI_CH3_Pkt_t);
+ (*buflen) = 0;
if (new_ptr != NULL)
new_ptr->all_data_recved = 1;
@@ -355,14 +355,13 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
else {
MPI_Aint type_size = 0;
MPI_Aint type_extent;
- MPIDI_msg_sz_t recv_data_sz = 0;
- MPIDI_msg_sz_t buf_size = 0;
- MPID_Request *req = NULL;
+ intptr_t recv_data_sz = 0;
+ intptr_t buf_size = 0;
+ MPIR_Request *req = NULL;
MPI_Datatype target_dtp;
int target_count;
int complete = 0;
- MPIDI_msg_sz_t data_len;
- char *data_buf = NULL;
+ intptr_t data_len;
MPIDI_CH3_Pkt_flags_t flags;
/* This is PUT, ACC, GACC, FOP */
@@ -371,8 +370,8 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
MPIDI_CH3_PKT_RMA_GET_TARGET_COUNT((*pkt), target_count, mpi_errno);
MPIDI_CH3_PKT_RMA_GET_FLAGS((*pkt), flags, mpi_errno);
- MPID_Datatype_get_extent_macro(target_dtp, type_extent);
- MPID_Datatype_get_size_macro(target_dtp, type_size);
+ MPIDU_Datatype_get_extent_macro(target_dtp, type_extent);
+ MPIDU_Datatype_get_size_macro(target_dtp, type_size);
if (pkt->type == MPIDI_CH3_PKT_PUT) {
recv_data_sz = type_size * target_count;
@@ -387,13 +386,13 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
if (op != MPI_NO_OP) {
stream_elem_count = MPIDI_CH3U_SRBuf_size / type_extent;
total_len = type_size * target_count;
- recv_data_sz = MPIR_MIN(total_len, type_size * stream_elem_count);
+ recv_data_sz = MPL_MIN(total_len, type_size * stream_elem_count);
buf_size = type_extent * (recv_data_sz / type_size);
}
}
if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
- MPIU_Assert(pkt->type == MPIDI_CH3_PKT_ACCUMULATE ||
+ MPIR_Assert(pkt->type == MPIDI_CH3_PKT_ACCUMULATE ||
pkt->type == MPIDI_CH3_PKT_GET_ACCUM);
/* Only basic datatype may contain piggyback lock.
@@ -411,13 +410,13 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
if (new_ptr != NULL) {
if (win_ptr->current_target_lock_data_bytes + buf_size <
MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES) {
- new_ptr->data = MPIU_Malloc(buf_size);
+ new_ptr->data = MPL_malloc(buf_size);
}
if (new_ptr->data == NULL) {
/* Note that there are two possible reasons to make new_ptr->data to be NULL:
* (1) win_ptr->current_target_lock_data_bytes + buf_size >= MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES;
- * (2) MPIU_Malloc(buf_size) failed.
+ * (2) MPL_malloc(buf_size) failed.
* In such cases, we cannot allocate memory for lock data, so we give up
* buffering lock data, however, we still buffer lock request.
*/
@@ -455,8 +454,8 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
}
/* create request to receive upcoming requests */
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 1);
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Object_set_ref(req, 1);
/* fill in area in req that will be used in Receive_data_found() */
if (lock_discarded || data_discarded) {
@@ -469,9 +468,8 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
req->dev.OnFinal = MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete;
req->dev.target_lock_queue_entry = new_ptr;
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
- MPIU_Assert(req->dev.recv_data_sz >= 0);
+ data_len = *buflen;
+ MPIR_Assert(req->dev.recv_data_sz >= 0);
}
else {
req->dev.user_buf = new_ptr->data;
@@ -482,17 +480,16 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
req->dev.OnFinal = MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete;
req->dev.target_lock_queue_entry = new_ptr;
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
- MPIU_Assert(req->dev.recv_data_sz >= 0);
+ data_len = *buflen;
+ MPIR_Assert(req->dev.recv_data_sz >= 0);
}
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data, &data_len, &complete);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
/* return bytes of data processed in this pkt handler */
- (*buflen) = sizeof(MPIDI_CH3_Pkt_t) + data_len;
+ (*buflen) = data_len;
if (complete) {
mpi_errno = MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete(vc, req, &complete);
@@ -551,12 +548,12 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
}
-static inline int handle_lock_ack(MPID_Win * win_ptr, int target_rank, MPIDI_CH3_Pkt_flags_t flags)
+static inline int handle_lock_ack(MPIR_Win * win_ptr, int target_rank, MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_RMA_Target_t *t = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(win_ptr->states.access_state == MPIDI_RMA_PER_TARGET ||
+ MPIR_Assert(win_ptr->states.access_state == MPIDI_RMA_PER_TARGET ||
win_ptr->states.access_state == MPIDI_RMA_LOCK_ALL_CALLED ||
win_ptr->states.access_state == MPIDI_RMA_LOCK_ALL_ISSUED);
@@ -568,7 +565,7 @@ static inline int handle_lock_ack(MPID_Win * win_ptr, int target_rank, MPIDI_CH3
(win_ptr->shm_allocated == TRUE && orig_vc->node_id == target_vc->node_id)) {
if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
win_ptr->outstanding_locks--;
- MPIU_Assert(win_ptr->outstanding_locks >= 0);
+ MPIR_Assert(win_ptr->outstanding_locks >= 0);
}
else if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_DISCARDED) {
/* re-send lock request message. */
@@ -582,7 +579,7 @@ static inline int handle_lock_ack(MPID_Win * win_ptr, int target_rank, MPIDI_CH3
else if (win_ptr->states.access_state == MPIDI_RMA_LOCK_ALL_ISSUED) {
if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
win_ptr->outstanding_locks--;
- MPIU_Assert(win_ptr->outstanding_locks >= 0);
+ MPIR_Assert(win_ptr->outstanding_locks >= 0);
if (win_ptr->outstanding_locks == 0) {
win_ptr->states.access_state = MPIDI_RMA_LOCK_ALL_GRANTED;
@@ -606,7 +603,7 @@ static inline int handle_lock_ack(MPID_Win * win_ptr, int target_rank, MPIDI_CH3
mpi_errno = MPIDI_CH3I_Win_find_target(win_ptr, target_rank, &t);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(t != NULL);
+ MPIR_Assert(t != NULL);
if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
t->access_state = MPIDI_RMA_LOCK_GRANTED;
@@ -640,15 +637,15 @@ static inline int handle_lock_ack(MPID_Win * win_ptr, int target_rank, MPIDI_CH3
#define FUNCNAME check_and_set_req_completion
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int check_and_set_req_completion(MPID_Win * win_ptr, MPIDI_RMA_Target_t * target,
+static inline int check_and_set_req_completion(MPIR_Win * win_ptr, MPIDI_RMA_Target_t * target,
MPIDI_RMA_Op_t * rma_op, int *op_completed)
{
int i, mpi_errno = MPI_SUCCESS;
int incomplete_req_cnt = 0;
- MPID_Request **req = NULL;
- MPIDI_STATE_DECL(MPID_STATE_CHECK_AND_SET_REQ_COMPLETION);
+ MPIR_Request **req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CHECK_AND_SET_REQ_COMPLETION);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_CHECK_AND_SET_REQ_COMPLETION);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_CHECK_AND_SET_REQ_COMPLETION);
(*op_completed) = FALSE;
@@ -661,23 +658,23 @@ static inline int check_and_set_req_completion(MPID_Win * win_ptr, MPIDI_RMA_Tar
if ((*req) == NULL)
continue;
- if (MPID_Request_is_complete((*req))) {
- MPID_Request_release((*req));
+ if (MPIR_Request_is_complete((*req))) {
+ MPIR_Request_free((*req));
(*req) = NULL;
}
else {
- (*req)->request_completed_cb = MPIDI_CH3_Req_handler_rma_op_complete;
+ (*req)->dev.request_completed_cb = MPIDI_CH3_Req_handler_rma_op_complete;
(*req)->dev.source_win_handle = win_ptr->handle;
(*req)->dev.rma_target_ptr = target;
incomplete_req_cnt++;
if (rma_op->ureq != NULL) {
- MPID_cc_set(&(rma_op->ureq->cc), incomplete_req_cnt);
+ MPIR_cc_set(&(rma_op->ureq->cc), incomplete_req_cnt);
(*req)->dev.request_handle = rma_op->ureq->handle;
}
- MPID_Request_release((*req));
+ MPIR_Request_free((*req));
}
}
@@ -699,21 +696,21 @@ static inline int check_and_set_req_completion(MPID_Win * win_ptr, MPIDI_RMA_Tar
if (target->pending_net_ops_list_head == NULL) {
win_ptr->num_targets_with_pending_net_ops--;
- MPIU_Assert(win_ptr->num_targets_with_pending_net_ops >= 0);
+ MPIR_Assert(win_ptr->num_targets_with_pending_net_ops >= 0);
if (win_ptr->num_targets_with_pending_net_ops == 0) {
MPIDI_CH3I_Win_set_inactive(win_ptr);
}
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_CHECK_AND_SET_REQ_COMPLETION);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_CHECK_AND_SET_REQ_COMPLETION);
return mpi_errno;
fn_fail:
goto fn_exit;
}
-static inline int handle_lock_ack_with_op(MPID_Win * win_ptr,
+static inline int handle_lock_ack_with_op(MPIR_Win * win_ptr,
int target_rank, MPIDI_CH3_Pkt_flags_t flags)
{
MPIDI_RMA_Target_t *target = NULL;
@@ -725,15 +722,15 @@ static inline int handle_lock_ack_with_op(MPID_Win * win_ptr,
mpi_errno = MPIDI_CH3I_Win_find_target(win_ptr, target_rank, &target);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(target != NULL);
+ MPIR_Assert(target != NULL);
/* Here the next_op_to_issue pointer should still point to the OP piggybacked
* with LOCK */
op = target->next_op_to_issue;
- MPIU_Assert(op != NULL);
+ MPIR_Assert(op != NULL);
MPIDI_CH3_PKT_RMA_GET_FLAGS(op->pkt, op_flags, mpi_errno);
- MPIU_Assert(op_flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED ||
+ MPIR_Assert(op_flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED ||
op_flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
@@ -768,16 +765,16 @@ static inline int handle_lock_ack_with_op(MPID_Win * win_ptr,
* the internal request and erase all flags in current
* operation. */
if (op->reqs_size == 1) {
- MPIU_Assert(op->single_req != NULL);
- MPID_Request_release(op->single_req);
+ MPIR_Assert(op->single_req != NULL);
+ MPIR_Request_free(op->single_req);
op->single_req = NULL;
op->reqs_size = 0;
}
else if (op->reqs_size > 1) {
- MPIU_Assert(op->multi_reqs != NULL && op->multi_reqs[0] != NULL);
- MPID_Request_release(op->multi_reqs[0]);
+ MPIR_Assert(op->multi_reqs != NULL && op->multi_reqs[0] != NULL);
+ MPIR_Request_free(op->multi_reqs[0]);
/* free req array in this op */
- MPIU_Free(op->multi_reqs);
+ MPL_free(op->multi_reqs);
op->multi_reqs = NULL;
op->reqs_size = 0;
}
@@ -797,11 +794,11 @@ static inline int handle_lock_ack_with_op(MPID_Win * win_ptr,
#define FUNCNAME acquire_local_lock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int acquire_local_lock(MPID_Win * win_ptr, int lock_type)
+static inline int acquire_local_lock(MPIR_Win * win_ptr, int lock_type)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ACQUIRE_LOCAL_LOCK);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_ACQUIRE_LOCAL_LOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_ACQUIRE_LOCAL_LOCK);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_ACQUIRE_LOCAL_LOCK);
MPIR_T_PVAR_TIMER_START(RMA, rma_winlock_getlocallock);
@@ -825,7 +822,7 @@ static inline int acquire_local_lock(MPID_Win * win_ptr, int lock_type)
if (lock_type == MPI_LOCK_SHARED)
lock_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED;
else {
- MPIU_Assert(lock_type == MPI_LOCK_EXCLUSIVE);
+ MPIR_Assert(lock_type == MPI_LOCK_EXCLUSIVE);
lock_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE;
}
@@ -846,7 +843,7 @@ static inline int acquire_local_lock(MPID_Win * win_ptr, int lock_type)
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_winlock_getlocallock);
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_ACQUIRE_LOCAL_LOCK);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_ACQUIRE_LOCAL_LOCK);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -859,7 +856,7 @@ static inline int acquire_local_lock(MPID_Win * win_ptr, int lock_type)
#define FUNCNAME MPIDI_CH3I_RMA_Handle_ack
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDI_CH3I_RMA_Handle_ack(MPID_Win * win_ptr, int target_rank)
+static inline int MPIDI_CH3I_RMA_Handle_ack(MPIR_Win * win_ptr, int target_rank)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_RMA_Target_t *t;
@@ -869,10 +866,10 @@ static inline int MPIDI_CH3I_RMA_Handle_ack(MPID_Win * win_ptr, int target_rank)
MPIR_ERR_POP(mpi_errno);
t->sync.outstanding_acks--;
- MPIU_Assert(t->sync.outstanding_acks >= 0);
+ MPIR_Assert(t->sync.outstanding_acks >= 0);
win_ptr->outstanding_acks--;
- MPIU_Assert(win_ptr->outstanding_acks >= 0);
+ MPIR_Assert(win_ptr->outstanding_acks >= 0);
fn_exit:
return mpi_errno;
@@ -893,18 +890,18 @@ static inline int do_accumulate_op(void *source_buf, int source_count, MPI_Datat
MPI_User_function *uop = NULL;
MPI_Aint source_dtp_size = 0, source_dtp_extent = 0;
int is_empty_source = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_DO_ACCUMULATE_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_DO_ACCUMULATE_OP);
- MPIDI_FUNC_ENTER(MPID_STATE_DO_ACCUMULATE_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_DO_ACCUMULATE_OP);
/* first Judge if source buffer is empty */
if (acc_op == MPI_NO_OP)
is_empty_source = TRUE;
if (is_empty_source == FALSE) {
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(source_dtp));
- MPID_Datatype_get_size_macro(source_dtp, source_dtp_size);
- MPID_Datatype_get_extent_macro(source_dtp, source_dtp_extent);
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(source_dtp));
+ MPIDU_Datatype_get_size_macro(source_dtp, source_dtp_size);
+ MPIDU_Datatype_get_extent_macro(source_dtp, source_dtp_extent);
}
if (HANDLE_GET_KIND(acc_op) == HANDLE_KIND_BUILTIN) {
@@ -927,7 +924,7 @@ static inline int do_accumulate_op(void *source_buf, int source_count, MPI_Datat
void *curr_target_buf;
if (is_empty_source == FALSE) {
- MPIU_Assert(source_dtp == target_dtp);
+ MPIR_Assert(source_dtp == target_dtp);
real_stream_offset = (stream_offset / source_dtp_size) * source_dtp_extent;
curr_target_buf = (void *) ((char *) target_buf + real_stream_offset);
}
@@ -939,52 +936,52 @@ static inline int do_accumulate_op(void *source_buf, int source_count, MPI_Datat
}
else {
/* derived datatype */
- MPID_Segment *segp;
+ MPIDU_Segment *segp;
DLOOP_VECTOR *dloop_vec;
MPI_Aint first, last;
int vec_len, i, count;
MPI_Aint type_extent, type_size;
MPI_Datatype type;
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPI_Aint curr_len;
void *curr_loc;
int accumulated_count;
- segp = MPID_Segment_alloc();
+ segp = MPIDU_Segment_alloc();
/* --BEGIN ERROR HANDLING-- */
if (!segp) {
mpi_errno =
MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
MPI_ERR_OTHER, "**nomem", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_DO_ACCUMULATE_OP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_DO_ACCUMULATE_OP);
return mpi_errno;
}
/* --END ERROR HANDLING-- */
- MPID_Segment_init(NULL, target_count, target_dtp, segp, 0);
+ MPIDU_Segment_init(NULL, target_count, target_dtp, segp, 0);
first = stream_offset;
last = first + source_count * source_dtp_size;
- MPID_Datatype_get_ptr(target_dtp, dtp);
+ MPIDU_Datatype_get_ptr(target_dtp, dtp);
vec_len = dtp->max_contig_blocks * target_count + 1;
/* +1 needed because Rob says so */
dloop_vec = (DLOOP_VECTOR *)
- MPIU_Malloc(vec_len * sizeof(DLOOP_VECTOR));
+ MPL_malloc(vec_len * sizeof(DLOOP_VECTOR));
/* --BEGIN ERROR HANDLING-- */
if (!dloop_vec) {
mpi_errno =
MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
MPI_ERR_OTHER, "**nomem", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_DO_ACCUMULATE_OP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_DO_ACCUMULATE_OP);
return mpi_errno;
}
/* --END ERROR HANDLING-- */
- MPID_Segment_pack_vector(segp, first, &last, dloop_vec, &vec_len);
+ MPIDU_Segment_pack_vector(segp, first, &last, dloop_vec, &vec_len);
type = dtp->basic_type;
- MPIU_Assert(type != MPI_DATATYPE_NULL);
+ MPIR_Assert(type != MPI_DATATYPE_NULL);
- MPIU_Assert(type == source_dtp);
+ MPIR_Assert(type == source_dtp);
type_size = source_dtp_size;
type_extent = source_dtp_extent;
@@ -994,16 +991,16 @@ static inline int do_accumulate_op(void *source_buf, int source_count, MPI_Datat
accumulated_count = 0;
while (i != vec_len) {
if (curr_len < type_size) {
- MPIU_Assert(i != vec_len);
+ MPIR_Assert(i != vec_len);
i++;
curr_len += dloop_vec[i].DLOOP_VECTOR_LEN;
continue;
}
- MPIU_Assign_trunc(count, curr_len / type_size, int);
+ MPIR_Assign_trunc(count, curr_len / type_size, int);
(*uop) ((char *) source_buf + type_extent * accumulated_count,
- (char *) target_buf + MPIU_PtrToAint(curr_loc), &count, &type);
+ (char *) target_buf + MPIR_Ptr_to_aint(curr_loc), &count, &type);
if (curr_len % type_size == 0) {
i++;
@@ -1020,12 +1017,12 @@ static inline int do_accumulate_op(void *source_buf, int source_count, MPI_Datat
accumulated_count += count;
}
- MPID_Segment_free(segp);
- MPIU_Free(dloop_vec);
+ MPIDU_Segment_free(segp);
+ MPL_free(dloop_vec);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_DO_ACCUMULATE_OP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_DO_ACCUMULATE_OP);
return mpi_errno;
fn_fail:
@@ -1033,10 +1030,10 @@ static inline int do_accumulate_op(void *source_buf, int source_count, MPI_Datat
}
-static inline int check_piggyback_lock(MPID_Win * win_ptr, MPIDI_VC_t * vc,
- MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen,
- int *acquire_lock_fail, MPID_Request ** reqp)
+static inline int check_piggyback_lock(MPIR_Win * win_ptr, MPIDI_VC_t * vc,
+ MPIDI_CH3_Pkt_t * pkt, void * data,
+ intptr_t * buflen,
+ int *acquire_lock_fail, MPIR_Request ** reqp)
{
int lock_type;
MPIDI_CH3_Pkt_flags_t flags;
@@ -1051,13 +1048,13 @@ static inline int check_piggyback_lock(MPID_Win * win_ptr, MPIDI_VC_t * vc,
if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED)
lock_type = MPI_LOCK_SHARED;
else {
- MPIU_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
+ MPIR_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
lock_type = MPI_LOCK_EXCLUSIVE;
}
if (MPIDI_CH3I_Try_acquire_win_lock(win_ptr, lock_type) == 0) {
/* cannot acquire the lock, queue up this operation. */
- mpi_errno = enqueue_lock_origin(win_ptr, vc, pkt, buflen, reqp);
+ mpi_errno = enqueue_lock_origin(win_ptr, vc, pkt, data, buflen, reqp);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
(*acquire_lock_fail) = 1;
@@ -1070,7 +1067,7 @@ static inline int check_piggyback_lock(MPID_Win * win_ptr, MPIDI_VC_t * vc,
goto fn_exit;
}
-static inline int finish_op_on_target(MPID_Win * win_ptr, MPIDI_VC_t * vc,
+static inline int finish_op_on_target(MPIR_Win * win_ptr, MPIDI_VC_t * vc,
int has_response_data,
MPIDI_CH3_Pkt_flags_t flags, MPI_Win source_win_handle)
{
@@ -1083,7 +1080,7 @@ static inline int finish_op_on_target(MPID_Win * win_ptr, MPIDI_VC_t * vc,
MPIDI_CH3_Pkt_flags_t pkt_flags = MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED;
if ((flags & MPIDI_CH3_PKT_FLAG_RMA_FLUSH) || (flags & MPIDI_CH3_PKT_FLAG_RMA_UNLOCK))
pkt_flags |= MPIDI_CH3_PKT_FLAG_RMA_ACK;
- MPIU_Assert(source_win_handle != MPI_WIN_NULL);
+ MPIR_Assert(source_win_handle != MPI_WIN_NULL);
mpi_errno = MPIDI_CH3I_Send_lock_op_ack_pkt(vc, win_ptr,
pkt_flags,
source_win_handle, MPI_REQUEST_NULL);
@@ -1104,7 +1101,7 @@ static inline int finish_op_on_target(MPID_Win * win_ptr, MPIDI_VC_t * vc,
}
if (flags & MPIDI_CH3_PKT_FLAG_RMA_DECR_AT_COUNTER) {
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
/* Signal the local process when the op counter reaches 0. */
if (win_ptr->at_completion_counter == 0)
MPIDI_CH3_Progress_signal_completion();
@@ -1136,7 +1133,7 @@ static inline int finish_op_on_target(MPID_Win * win_ptr, MPIDI_VC_t * vc,
if (flags & MPIDI_CH3_PKT_FLAG_RMA_DECR_AT_COUNTER) {
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
/* Signal the local process when the op counter reaches 0. */
if (win_ptr->at_completion_counter == 0)
MPIDI_CH3_Progress_signal_completion();
@@ -1150,18 +1147,18 @@ static inline int finish_op_on_target(MPID_Win * win_ptr, MPIDI_VC_t * vc,
}
-static inline int fill_ranks_in_win_grp(MPID_Win * win_ptr, MPID_Group * group_ptr,
+static inline int fill_ranks_in_win_grp(MPIR_Win * win_ptr, MPIR_Group * group_ptr,
int *ranks_in_win_grp)
{
int mpi_errno = MPI_SUCCESS;
int i, *ranks_in_grp;
- MPID_Group *win_grp_ptr;
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_FILL_RANKS_IN_WIN_GRP);
+ MPIR_Group *win_grp_ptr;
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_FILL_RANKS_IN_WIN_GRP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_FILL_RANKS_IN_WIN_GRP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_FILL_RANKS_IN_WIN_GRP);
- MPIU_CHKLMEM_MALLOC(ranks_in_grp, int *, group_ptr->size * sizeof(int),
+ MPIR_CHKLMEM_MALLOC(ranks_in_grp, int *, group_ptr->size * sizeof(int),
mpi_errno, "ranks_in_grp");
for (i = 0; i < group_ptr->size; i++)
ranks_in_grp[i] = i;
@@ -1180,8 +1177,8 @@ static inline int fill_ranks_in_win_grp(MPID_Win * win_ptr, MPID_Group * group_p
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_FILL_RANKS_IN_WIN_GRP);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_FILL_RANKS_IN_WIN_GRP);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1231,12 +1228,12 @@ static inline void MPIDI_CH3_ExtPkt_Accum_get_stream(MPIDI_CH3_Pkt_flags_t flags
MPI_Aint * stream_offset)
{
if ((flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) && is_derived_dt) {
- MPIU_Assert(ext_hdr_ptr != NULL);
+ MPIR_Assert(ext_hdr_ptr != NULL);
(*stream_offset) =
((MPIDI_CH3_Ext_pkt_accum_stream_derived_t *) ext_hdr_ptr)->stream_offset;
}
else if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
- MPIU_Assert(ext_hdr_ptr != NULL);
+ MPIR_Assert(ext_hdr_ptr != NULL);
(*stream_offset) = ((MPIDI_CH3_Ext_pkt_accum_stream_t *) ext_hdr_ptr)->stream_offset;
}
}
diff --git a/src/mpid/ch3/src/.state-cache b/src/mpid/ch3/src/.state-cache
index e300e62..c11dff1 100644
--- a/src/mpid/ch3/src/.state-cache
+++ b/src/mpid/ch3/src/.state-cache
@@ -1,130 +1,91 @@
<dir>
-<file name="mpid_recv.c" info="1447123141"/>
-<file name="ch3u_request.c" info="1447123141"/>
-<file name="ch3u_port.c" info="1447123141"/>
-<file name="ch3u_rma_pkthandler.c" info="1447123141"/>
-<file name="ch3u_comm_spawn_multiple.c" info="1447123141"/>
-<file name="mpid_finalize.c" info="1447123141"/>
-<file name="mpid_ssend.c" info="1447123141"/>
-<file name="ch3u_eager.c" info="1447123141"/>
-<file name="ch3u_eagersync.c" info="1447123141"/>
-<file name="mpid_init.c" info="1447123141"/>
-<file name="mpid_issend.c" info="1447123141"/>
-<file name="mpid_rsend.c" info="1447123141"/>
-<file name="ch3u_handle_revoke_pkt.c" info="1447123141"/>
-<file name="mpidi_pg.c" info="1447123141"/>
-<file name="ch3u_rma_progress.c" info="1447123141"/>
-<file name="mpid_port.c" info="1447123141"/>
-<file name="mpid_comm_disconnect.c" info="1447123141"/>
-<file name="ch3u_handle_recv_pkt.c" info="1447123141"/>
-<file name="mpid_isend.c" info="1447123141"/>
-<file name="mpid_irsend.c" info="1447123141"/>
-<file name="mpid_probe.c" info="1447123141"/>
-<file name="ch3u_handle_recv_req.c" info="1447123141"/>
-<file name="ch3u_handle_connection.c" info="1447123141"/>
-<file name="mpidi_rma.c" info="1447123141"/>
-<file name="mpid_vc.c" info="1447123141"/>
-<file name="ch3u_handle_op_req.c" info="1447123141"/>
-<file name="mpid_get_universe_size.c" info="1447123141"/>
-<file name="mpid_mprobe.c" info="1447123141"/>
-<file name="mpid_comm_spawn_multiple.c" info="1447123141"/>
-<file name="mpid_mrecv.c" info="1447123141"/>
-<file name="mpid_irecv.c" info="1447123141"/>
-<file name="mpid_comm_get_all_failed_procs.c" info="1447123141"/>
-<file name="mpid_imrecv.c" info="1447123141"/>
-<file name="ch3u_buffer.c" info="1447123141"/>
-<file name="ch3u_handle_send_req.c" info="1447123141"/>
-<file name="ch3u_rndv.c" info="1447123141"/>
-<file name="ch3u_rma_reqops.c" info="1447123141"/>
-<file name="mpidi_printf.c" info="1447123141"/>
-<file name="ch3u_rma_sync.c" info="1447123141"/>
-<file name="mpidi_isend_self.c" info="1447123141"/>
-<file name="mpid_comm_revoke.c" info="1447123141"/>
-<file name="mpid_comm_failure_ack.c" info="1447123141"/>
-<file name="mpid_improbe.c" info="1447123141"/>
-<file name="mpid_getpname.c" info="1447123141"/>
-<file name="ch3u_win_fns.c" info="1447123141"/>
-<file name="mpid_cancel_send.c" info="1447123141"/>
-<file name="mpid_abort.c" info="1447123141"/>
-<file name="mpid_iprobe.c" info="1447123141"/>
-<file name="mpid_cancel_recv.c" info="1447123141"/>
-<file name="mpid_send.c" info="1447123141"/>
-<file name="ch3u_recvq.c" info="1447123141"/>
-<file name="mpid_startall.c" info="1447123141"/>
-<file name="mpid_aint.c" info="1447123141"/>
-<file name="ch3u_rma_ops.c" info="1447123141"/>
-<file name="ch3u_comm.c" info="1447123141"/>
-<file name="mpid_rma.c" info="1447123141"/>
+<file name="mpid_abort.c" info="1478973152"/>
+<file name="mpid_irsend.c" info="1478973152"/>
+<file name="mpid_aint.c" info="1478973152"/>
+<file name="ch3u_rma_reqops.c" info="1478973152"/>
+<file name="mpid_comm_disconnect.c" info="1478973152"/>
+<file name="ch3u_handle_recv_pkt.c" info="1478973152"/>
+<file name="mpidi_pg.c" info="1478973152"/>
+<file name="ch3u_recvq.c" info="1478973152"/>
+<file name="mpid_cancel_recv.c" info="1478973152"/>
+<file name="mpid_port.c" info="1478973152"/>
+<file name="mpid_getpname.c" info="1478973152"/>
+<file name="mpidi_isend_self.c" info="1478973152"/>
+<file name="mpid_rsend.c" info="1478973152"/>
+<file name="mpid_recv.c" info="1478973152"/>
+<file name="ch3u_rma_sync.c" info="1478973152"/>
+<file name="mpid_comm_revoke.c" info="1478973152"/>
+<file name="mpid_mrecv.c" info="1478973152"/>
+<file name="mpidi_rma.c" info="1478973152"/>
+<file name="ch3u_handle_send_req.c" info="1478973152"/>
+<file name="ch3u_eagersync.c" info="1478973152"/>
+<file name="mpid_rma.c" info="1478973152"/>
+<file name="ch3u_buffer.c" info="1478973152"/>
+<file name="ch3u_rma_progress.c" info="1478973152"/>
+<file name="mpid_comm_get_all_failed_procs.c" info="1478973152"/>
+<file name="mpid_cancel_send.c" info="1478973152"/>
+<file name="ch3u_rma_pkthandler.c" info="1478973152"/>
+<file name="ch3u_handle_recv_req.c" info="1478973152"/>
+<file name="mpid_irecv.c" info="1478973152"/>
+<file name="ch3u_handle_connection.c" info="1478973152"/>
+<file name="mpid_comm_spawn_multiple.c" info="1478973152"/>
+<file name="ch3u_rndv.c" info="1478973152"/>
+<file name="ch3u_win_fns.c" info="1478973152"/>
+<file name="mpid_comm_failure_ack.c" info="1478973152"/>
+<file name="ch3u_request.c" info="1478973152"/>
+<file name="mpid_improbe.c" info="1478973152"/>
+<file name="ch3u_comm.c" info="1478973152"/>
+<file name="ch3u_handle_op_req.c" info="1478973152"/>
+<file name="mpid_probe.c" info="1478973152"/>
+<file name="mpid_imrecv.c" info="1478973152"/>
+<file name="mpidi_printf.c" info="1478973152"/>
+<file name="mpid_get_universe_size.c" info="1478973152"/>
+<file name="mpid_vc.c" info="1478973152"/>
+<file name="ch3u_handle_revoke_pkt.c" info="1478973152"/>
+<file name="mpid_iprobe.c" info="1478973152"/>
+<file name="mpid_startall.c" info="1478973152"/>
+<file name="mpid_init.c" info="1478973152"/>
+<file name="mpid_ssend.c" info="1478973152"/>
+<file name="mpid_coll.c" info="1478973152"/>
+<file name="mpid_send.c" info="1478973152"/>
+<file name="mpid_mprobe.c" info="1478973152"/>
+<file name="mpid_issend.c" info="1478973152"/>
+<file name="mpid_finalize.c" info="1478973152"/>
+<file name="ch3u_rma_ops.c" info="1478973152"/>
+<file name="ch3u_port.c" info="1478973152"/>
+<file name="ch3u_comm_spawn_multiple.c" info="1478973152"/>
+<file name="mpid_isend.c" info="1478973152"/>
+<file name="ch3u_eager.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpid_recv.c">
-MPID_STATE_MPID_RECV MPID_Recv
-</fileinfo>
-<fileinfo name="ch3u_request.c">
-MPID_STATE_MPID_REQUEST_CREATE MPID_Request_create
-MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV MPIDI_CH3U_Request_load_send_iov
-MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV MPIDI_CH3U_Request_load_recv_iov
-MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF MPIDI_CH3U_Request_unpack_srbuf
-MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF MPIDI_CH3U_Request_unpack_uebuf
-MPID_STATE_MEMCPY memcpy
-</fileinfo>
-<fileinfo name="ch3u_port.c">
-MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT MPIDI_Create_inter_root_communicator_connect
-MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT MPIDI_Create_inter_root_communicator_accept
-MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM MPIDI_CH3I_Initialize_tmp_comm
-MPID_STATE_MPIDI_COMM_CONNECT MPIDI_Comm_connect
-MPID_STATE_EXTRACTLOCALPGINFO ExtractLocalPGInfo
-MPID_STATE_RECEIVEPGANDDISTRIBUTE ReceivePGAndDistribute
-MPID_STATE_SENDPGTOPEERANDFREE SendPGtoPeerAndFree
-MPID_STATE_MPIDI_COMM_ACCEPT MPIDI_Comm_accept
-MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE MPIDI_CH3I_Acceptq_enqueue
-MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE MPIDI_CH3I_Acceptq_dequeue
-</fileinfo>
-<fileinfo name="ch3u_rma_pkthandler.c">
-MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE MPIDI_CH3_ExtPktHandler_Accumulate
-MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT MPIDI_CH3_PktHandler_Put
-MPID_STATE_MPIDI_CH3_PKTHANDLER_GET MPIDI_CH3_PktHandler_Get
-MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE MPIDI_CH3_PktHandler_Accumulate
-MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE MPIDI_CH3_PktHandler_GetAccumulate
-MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS MPIDI_CH3_PktHandler_CAS
-MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP MPIDI_CH3_PktHandler_CASResp
-MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP MPIDI_CH3_PktHandler_FOP
-MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP MPIDI_CH3_PktHandler_FOPResp
-MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP MPIDI_CH3_PktHandler_Get_AccumResp
-MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK MPIDI_CH3_PktHandler_Lock
-MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP MPIDI_CH3_PktHandler_GetResp
-MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK MPIDI_CH3_PktHandler_LockAck
-MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK MPIDI_CH3_PktHandler_LockOpAck
-MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK MPIDI_CH3_PktHandler_Ack
-MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT MPIDI_CH3_PktHandler_DecrAtCnt
-MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK MPIDI_CH3_PktHandler_Unlock
-MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH MPIDI_CH3_PktHandler_Flush
-</fileinfo>
-<fileinfo name="ch3u_comm_spawn_multiple.c">
-MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE MPIDI_Comm_spawn_multiple
-</fileinfo>
-<fileinfo name="mpid_finalize.c">
-MPID_STATE_MPID_FINALIZE MPID_Finalize
-</fileinfo>
-<fileinfo name="mpid_ssend.c">
-MPID_STATE_MPID_SSEND MPID_Ssend
-</fileinfo>
-<fileinfo name="ch3u_eager.c">
-MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV MPIDI_CH3_SendNoncontig_iov
+<fileinfo name="mpid_abort.c">
+MPID_STATE_MPID_ABORT MPID_Abort
</fileinfo>
-<fileinfo name="ch3u_eagersync.c">
+<fileinfo name="mpid_irsend.c">
+MPID_STATE_MPID_IRSEND MPID_Irsend
</fileinfo>
-<fileinfo name="mpid_init.c">
-MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD set_eager_threshold
-MPID_STATE_MPID_INIT MPID_Init
+<fileinfo name="mpid_aint.c">
+MPID_STATE_MPID_AINT_ADD MPID_Aint_add
+MPID_STATE_MPID_AINT_DIFF MPID_Aint_diff
</fileinfo>
-<fileinfo name="mpid_issend.c">
-MPID_STATE_MPID_ISSEND MPID_Issend
+<fileinfo name="ch3u_rma_reqops.c">
+MPID_STATE_MPID_RPUT MPID_Rput
+MPID_STATE_MPID_RGET MPID_Rget
+MPID_STATE_MPID_RACCUMULATE MPID_Raccumulate
+MPID_STATE_MPID_RGET_ACCUMULATE MPID_Rget_accumulate
</fileinfo>
-<fileinfo name="mpid_rsend.c">
-MPID_STATE_MPID_RSEND MPID_Rsend
+<fileinfo name="mpid_comm_disconnect.c">
+MPID_STATE_MPID_COMM_DISCONNECT MPID_Comm_disconnect
</fileinfo>
-<fileinfo name="ch3u_handle_revoke_pkt.c">
+<fileinfo name="ch3u_handle_recv_pkt.c">
+MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT MPIDI_CH3U_Handle_ordered_recv_pkt
+MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND MPIDI_CH3U_Receive_data_found
+MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED MPIDI_CH3U_Receive_data_unexpected
+MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND MPIDI_CH3U_Post_data_receive_found
+MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED MPIDI_CH3U_Post_data_receive_unexpected
+MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK MPIDI_CH3I_Try_acquire_win_lock
+MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3 MPIDI_CH3_PktHandler_EndCH3
+MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT MPIDI_CH3_PktHandler_Init
</fileinfo>
<fileinfo name="mpidi_pg.c">
MPID_STATE_MPIDI_PG_FINALIZE MPIDI_PG_Finalize
@@ -137,37 +98,117 @@ MPID_STATE_MPIDI_PG_SetConnInfo MPIDI_PG_SetConnInfo
MPID_STATE_MPIDI_PG_DUP_VCR MPIDI_PG_Dup_vcr
MPID_STATE_MPIDI_PG_CLOSE_VCS MPIDI_PG_Close_VCs
</fileinfo>
-<fileinfo name="ch3u_rma_progress.c">
+<fileinfo name="ch3u_recvq.c">
+MPID_STATE_MPIDI_CH3U_RECVQ_FU MPIDI_CH3U_Recvq_FU
+MPID_STATE_MPIDI_CH3U_RECVQ_FDU MPIDI_CH3U_Recvq_FDU
+MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY MPIDI_CH3U_Recvq_FDU_matchonly
+MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP MPIDI_CH3U_Recvq_FDU_or_AEP
+MPID_STATE_MPIDI_CH3U_RECVQ_DP MPIDI_CH3U_Recvq_DP
+MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU MPIDI_CH3U_Recvq_FDP_or_AEU
+MPIDI_CH3U_CLEAN_RECVQ dequeue_and_set_error
+MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR MPIDU_Complete_posted_with_error
+</fileinfo>
+<fileinfo name="mpid_cancel_recv.c">
+MPID_STATE_MPID_CANCEL_RECV MPID_Cancel_recv
</fileinfo>
<fileinfo name="mpid_port.c">
-MPID_STATE_MPID_OPEN_PORT MPID_Open_port
+MPID_STATE_MPIR_OPEN_PORT MPID_Open_port
MPID_STATE_MPID_CLOSE_PORT MPID_Close_port
MPID_STATE_MPID_COMM_ACCEPT MPID_Comm_accept
MPID_STATE_MPID_COMM_CONNECT MPID_Comm_connect
MPID_STATE_MPIDI_OPEN_PORT MPIDI_Open_port
MPID_STATE_MPIDI_CLOSE_PORT MPIDI_Close_port
</fileinfo>
-<fileinfo name="mpid_comm_disconnect.c">
-MPID_STATE_MPID_COMM_DISCONNECT MPID_Comm_disconnect
+<fileinfo name="mpid_getpname.c">
</fileinfo>
-<fileinfo name="ch3u_handle_recv_pkt.c">
-MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT MPIDI_CH3U_Handle_ordered_recv_pkt
-MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND MPIDI_CH3U_Receive_data_found
-MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED MPIDI_CH3U_Receive_data_unexpected
-MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND MPIDI_CH3U_Post_data_receive_found
-MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED MPIDI_CH3U_Post_data_receive_unexpected
-MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK MPIDI_CH3I_Try_acquire_win_lock
-MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3 MPIDI_CH3_PktHandler_EndCH3
-MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT MPIDI_CH3_PktHandler_Init
+<fileinfo name="mpidi_isend_self.c">
</fileinfo>
-<fileinfo name="mpid_isend.c">
-MPID_STATE_MPID_ISEND MPID_Isend
+<fileinfo name="mpid_rsend.c">
+MPID_STATE_MPID_RSEND MPID_Rsend
</fileinfo>
-<fileinfo name="mpid_irsend.c">
-MPID_STATE_MPID_IRSEND MPID_Irsend
+<fileinfo name="mpid_recv.c">
+MPID_STATE_MPID_RECV MPID_Recv
</fileinfo>
-<fileinfo name="mpid_probe.c">
-MPID_STATE_MPID_PROBE MPID_Probe
+<fileinfo name="ch3u_rma_sync.c">
+MPID_STATE_FLUSH_LOCAL_ALL flush_local_all
+MPID_STATE_FLUSH_ALL flush_all
+MPID_STATE_FENCE_BARRIER_COMPLETE fence_barrier_complete
+MPID_STATE_MPID_WIN_FENCE MPID_Win_fence
+MPID_STATE_MPID_WIN_POST MPID_Win_post
+MPID_STATE_START_REQ_COMPLETE start_req_complete
+MPID_STATE_MPID_WIN_START MPID_Win_start
+MPID_STATE_MPID_WIN_COMPLETE MPID_Win_complete
+MPID_STATE_MPID_WIN_WAIT MPID_Win_wait
+MPID_STATE_MPID_WIN_TEST MPID_Win_test
+MPID_STATE_MPID_WIN_LOCK MPID_Win_lock
+MPID_STATE_MPID_WIN_UNLOCK MPID_Win_unlock
+MPID_STATE_MPID_WIN_FLUSH MPID_Win_flush
+MPID_STATE_MPID_WIN_FLUSH_LOCAL MPID_Win_flush_local
+MPID_STATE_MPID_WIN_LOCK_ALL MPID_Win_lock_all
+MPID_STATE_MPID_WIN_UNLOCK_ALL MPID_Win_unlock_all
+MPIDI_STATE_MPID_WIN_FLUSH_ALL MPID_Win_flush_all
+MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL MPID_Win_flush_local_all
+MPID_STATE_MPID_WIN_SYNC MPID_Win_sync
+</fileinfo>
+<fileinfo name="mpid_comm_revoke.c">
+MPID_STATE_MPID_COMM_REVOKE MPID_Comm_revoke
+</fileinfo>
+<fileinfo name="mpid_mrecv.c">
+</fileinfo>
+<fileinfo name="mpidi_rma.c">
+MPID_STATE_MPIDI_RMA_INIT MPIDI_RMA_init
+MPID_STATE_MPIDI_RMA_FINALIZE MPIDI_RMA_finalize
+MPID_STATE_MPID_WIN_FREE MPID_Win_free
+</fileinfo>
+<fileinfo name="ch3u_handle_send_req.c">
+MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ MPIDI_CH3U_Handle_send_req
+MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE MPIDI_CH3_ReqHandler_GaccumSendComplete
+MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE MPIDI_CH3_ReqHandler_CASSendComplete
+MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE MPIDI_CH3_ReqHandler_FOPSendComplete
+</fileinfo>
+<fileinfo name="ch3u_eagersync.c">
+</fileinfo>
+<fileinfo name="mpid_rma.c">
+MPID_STATE_MPID_WIN_CREATE MPID_Win_create
+MPID_STATE_MPID_WIN_ALLOCATE MPID_Win_allocate
+MPID_STATE_MPID_WIN_CREATE_DYNAMIC MPID_Win_create_dynamic
+MPID_STATE_MPID_ALLOC_MEM MPID_Alloc_mem
+MPID_STATE_MPID_FREE_MEM MPID_Free_mem
+MPID_STATE_MPID_WIN_ALLOCATE_SHARED MPID_Win_allocate_shared
+MPID_STATE_MPID_WIN_SHARED_QUERY MPID_Win_shared_query
+MPID_STATE_WIN_INIT win_init
+</fileinfo>
+<fileinfo name="ch3u_buffer.c">
+MPID_STATE_MPIDI_CH3U_BUFFER_COPY MPIDI_CH3U_Buffer_copy
+MPID_STATE_MEMCPY memcpy
+</fileinfo>
+<fileinfo name="ch3u_rma_progress.c">
+</fileinfo>
+<fileinfo name="mpid_comm_get_all_failed_procs.c">
+MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS MPID_Comm_get_all_failed_procs
+</fileinfo>
+<fileinfo name="mpid_cancel_send.c">
+MPID_STATE_MPID_CANCEL_SEND MPID_Cancel_send
+</fileinfo>
+<fileinfo name="ch3u_rma_pkthandler.c">
+MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE MPIDI_CH3_ExtPktHandler_Accumulate
+MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT MPIDI_CH3_PktHandler_Put
+MPID_STATE_MPIDI_CH3_PKTHANDLER_GET MPIDI_CH3_PktHandler_Get
+MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE MPIDI_CH3_PktHandler_Accumulate
+MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE MPIDI_CH3_PktHandler_GetAccumulate
+MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS MPIDI_CH3_PktHandler_CAS
+MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP MPIDI_CH3_PktHandler_CASResp
+MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP MPIDI_CH3_PktHandler_FOP
+MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP MPIDI_CH3_PktHandler_FOPResp
+MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP MPIDI_CH3_PktHandler_Get_AccumResp
+MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK MPIDI_CH3_PktHandler_Lock
+MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP MPIDI_CH3_PktHandler_GetResp
+MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK MPIDI_CH3_PktHandler_LockAck
+MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK MPIDI_CH3_PktHandler_LockOpAck
+MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK MPIDI_CH3_PktHandler_Ack
+MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT MPIDI_CH3_PktHandler_DecrAtCnt
+MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK MPIDI_CH3_PktHandler_Unlock
+MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH MPIDI_CH3_PktHandler_Flush
</fileinfo>
<fileinfo name="ch3u_handle_recv_req.c">
MPID_STATE_MPIDI_CH3U_HANDLE_RECV_REQ MPIDI_CH3U_Handle_recv_req
@@ -187,6 +228,9 @@ MPID_STATE_CREATE_DERIVED_DATATYPE create_derived_datatype
MPID_STATE_MPIDI_CH3I_RELEASE_LOCK MPIDI_CH3I_Release_lock
MPID_STATE_MPIDI_CH3_REQHANDLER_PIGGYBACKLOCKOPRECVCOMPLETE MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete
</fileinfo>
+<fileinfo name="mpid_irecv.c">
+MPID_STATE_MPID_IRECV MPID_Irecv
+</fileinfo>
<fileinfo name="ch3u_handle_connection.c">
MPID_STATE_MPIDI_CH3U_HANDLE_CONNECTION MPIDI_CH3U_Handle_connection
MPID_STATE_MPIDI_CH3U_VC_SENDCLOSE MPIDI_VC_SendClose
@@ -195,94 +239,11 @@ MPID_STATE_TERMINATE_FAILED_VCS terminate_failed_VCs
MPID_STATE_GET_FAILED_GROUP MPIDI_CH3U_Get_failed_group
MPID_STATE_MPIDI_CH3U_CHECK_FOR_FAILED_PROCS MPIDI_CH3U_Check_for_failed_procs
</fileinfo>
-<fileinfo name="mpidi_rma.c">
-MPID_STATE_MPIDI_RMA_INIT MPIDI_RMA_init
-MPID_STATE_MPIDI_RMA_FINALIZE MPIDI_RMA_finalize
-MPID_STATE_MPID_WIN_FREE MPID_Win_free
-</fileinfo>
-<fileinfo name="mpid_vc.c">
-MPID_STATE_MPIDI_VCRT_CREATE MPIDI_VCRT_Create
-MPID_STATE_MPIDI_VCRT_ADD_REF MPIDI_VCRT_Add_ref
-MPID_STATE_MPIDI_VCRT_RELEASE MPIDI_VCRT_Release
-MPID_STATE_MPID_VCR_DUP MPIDI_VCR_Dup
-MPID_STATE_MPID_VCR_GET_LPID MPID_Comm_get_lpid
-MPID_STATE_MPID_GPID_GETALLINCOMM MPID_GPID_GetAllInComm
-MPID_STATE_PARSE_MAPPING parse_mapping
-</fileinfo>
-<fileinfo name="ch3u_handle_op_req.c">
-MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE MPIDI_CH3_Req_handler_rma_op_complete
-</fileinfo>
-<fileinfo name="mpid_get_universe_size.c">
-</fileinfo>
-<fileinfo name="mpid_mprobe.c">
-</fileinfo>
<fileinfo name="mpid_comm_spawn_multiple.c">
MPID_STATE_MPID_COMM_SPAWN_MULTIPLE MPID_Comm_spawn_multiple
</fileinfo>
-<fileinfo name="mpid_mrecv.c">
-</fileinfo>
-<fileinfo name="mpid_irecv.c">
-MPID_STATE_MPID_IRECV MPID_Irecv
-</fileinfo>
-<fileinfo name="mpid_comm_get_all_failed_procs.c">
-MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS MPID_Comm_get_all_failed_procs
-</fileinfo>
-<fileinfo name="mpid_imrecv.c">
-</fileinfo>
-<fileinfo name="ch3u_buffer.c">
-MPID_STATE_MPIDI_CH3U_BUFFER_COPY MPIDI_CH3U_Buffer_copy
-MPID_STATE_MEMCPY memcpy
-</fileinfo>
-<fileinfo name="ch3u_handle_send_req.c">
-MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ MPIDI_CH3U_Handle_send_req
-MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE MPIDI_CH3_ReqHandler_GaccumSendComplete
-MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE MPIDI_CH3_ReqHandler_CASSendComplete
-MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE MPIDI_CH3_ReqHandler_FOPSendComplete
-</fileinfo>
<fileinfo name="ch3u_rndv.c">
</fileinfo>
-<fileinfo name="ch3u_rma_reqops.c">
-MPID_STATE_MPID_RPUT MPID_Rput
-MPID_STATE_MPID_RGET MPID_Rget
-MPID_STATE_MPID_RACCUMULATE MPID_Raccumulate
-MPID_STATE_MPID_RGET_ACCUMULATE MPID_Rget_accumulate
-</fileinfo>
-<fileinfo name="mpidi_printf.c">
-</fileinfo>
-<fileinfo name="ch3u_rma_sync.c">
-MPID_STATE_FLUSH_LOCAL_ALL flush_local_all
-MPID_STATE_FLUSH_ALL flush_all
-MPID_STATE_FENCE_BARRIER_COMPLETE fence_barrier_complete
-MPID_STATE_MPID_WIN_FENCE MPID_Win_fence
-MPID_STATE_MPID_WIN_POST MPID_Win_post
-MPID_STATE_START_REQ_COMPLETE start_req_complete
-MPID_STATE_MPID_WIN_START MPID_Win_start
-MPID_STATE_MPID_WIN_COMPLETE MPID_Win_complete
-MPID_STATE_MPID_WIN_WAIT MPID_Win_wait
-MPID_STATE_MPID_WIN_TEST MPID_Win_test
-MPID_STATE_MPID_WIN_LOCK MPID_Win_lock
-MPID_STATE_MPID_WIN_UNLOCK MPID_Win_unlock
-MPID_STATE_MPID_WIN_FLUSH MPID_Win_flush
-MPID_STATE_MPID_WIN_FLUSH_LOCAL MPID_Win_flush_local
-MPID_STATE_MPID_WIN_LOCK_ALL MPID_Win_lock_all
-MPID_STATE_MPID_WIN_UNLOCK_ALL MPID_Win_unlock_all
-MPIDI_STATE_MPID_WIN_FLUSH_ALL MPID_Win_flush_all
-MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL MPID_Win_flush_local_all
-MPID_STATE_MPID_WIN_SYNC MPID_Win_sync
-</fileinfo>
-<fileinfo name="mpidi_isend_self.c">
-</fileinfo>
-<fileinfo name="mpid_comm_revoke.c">
-MPID_STATE_MPID_COMM_REVOKE MPID_Comm_revoke
-</fileinfo>
-<fileinfo name="mpid_comm_failure_ack.c">
-MPID_STATE_MPID_COMM_FAILURE_ACK MPID_Comm_failure_ack
-MPID_STATE_MPID_COMM_FAILURE_GET_ACKED MPID_Comm_failure_get_acked
-</fileinfo>
-<fileinfo name="mpid_improbe.c">
-</fileinfo>
-<fileinfo name="mpid_getpname.c">
-</fileinfo>
<fileinfo name="ch3u_win_fns.c">
MPID_STATE_MPIDI_WIN_FNS_INIT MPIDI_Win_fns_init
MPID_STATE_MPIDI_CH3U_WIN_GATHER_INFO MPIDI_CH3U_Win_gather_info
@@ -296,30 +257,57 @@ MPID_STATE_MPIDI_CH3U_WIN_SHARED_QUERY MPIDI_CH3U_Win_shared_query
MPID_STATE_MPID_WIN_SET_INFO MPID_Win_set_info
MPID_STATE_MPID_WIN_GET_INFO MPID_Win_get_info
</fileinfo>
-<fileinfo name="mpid_cancel_send.c">
-MPID_STATE_MPID_CANCEL_SEND MPID_Cancel_send
+<fileinfo name="mpid_comm_failure_ack.c">
+MPID_STATE_MPID_COMM_FAILURE_ACK MPID_Comm_failure_ack
+MPID_STATE_MPID_COMM_FAILURE_GET_ACKED MPID_Comm_failure_get_acked
</fileinfo>
-<fileinfo name="mpid_abort.c">
-MPID_STATE_MPID_ABORT MPID_Abort
+<fileinfo name="ch3u_request.c">
+MPID_STATE_MPID_REQUEST_INIT MPID_Request_create_hook
+MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV MPIDI_CH3U_Request_load_send_iov
+MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV MPIDI_CH3U_Request_load_recv_iov
+MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF MPIDI_CH3U_Request_unpack_srbuf
+MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF MPIDI_CH3U_Request_unpack_uebuf
+MPID_STATE_MEMCPY memcpy
</fileinfo>
-<fileinfo name="mpid_iprobe.c">
-MPID_STATE_MPID_IPROBE MPID_Iprobe
+<fileinfo name="mpid_improbe.c">
</fileinfo>
-<fileinfo name="mpid_cancel_recv.c">
-MPID_STATE_MPID_CANCEL_RECV MPID_Cancel_recv
+<fileinfo name="ch3u_comm.c">
+MPID_STATE_MPIDI_CH3U_COMM_INIT MPIDI_CH3U_Comm_init
+MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK MPIDI_CH3U_Comm_create_hook
+MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK MPIDI_CH3U_Comm_destroy_hook
+MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK MPIDI_CH3U_Comm_register_create_hook
+MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK MPIDI_CH3U_Comm_register_destroy_hook
+MPID_STATE_REGISTER_HOOK_FINALIZE register_hook_finalize
+MPID_STATE_COMM_CREATED comm_created
+MPID_STATE_COMM_DESTROYED comm_destroyed
+MPID_STATE_NONEMPTY_INTERSECTION nonempty_intersection
+MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS MPIDI_CH3I_Comm_handle_failed_procs
+MPIDI_STATE_MPIDI_CH3I_COMM_FIND MPIDI_CH3I_Comm_handle_failed_procs
</fileinfo>
-<fileinfo name="mpid_send.c">
-MPID_STATE_MPID_SEND MPID_Send
+<fileinfo name="ch3u_handle_op_req.c">
+MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE MPIDI_CH3_Req_handler_rma_op_complete
</fileinfo>
-<fileinfo name="ch3u_recvq.c">
-MPID_STATE_MPIDI_CH3U_RECVQ_FU MPIDI_CH3U_Recvq_FU
-MPID_STATE_MPIDI_CH3U_RECVQ_FDU MPIDI_CH3U_Recvq_FDU
-MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY MPIDI_CH3U_Recvq_FDU_matchonly
-MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP MPIDI_CH3U_Recvq_FDU_or_AEP
-MPID_STATE_MPIDI_CH3U_RECVQ_DP MPIDI_CH3U_Recvq_DP
-MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU MPIDI_CH3U_Recvq_FDP_or_AEU
-MPIDI_CH3U_CLEAN_RECVQ dequeue_and_set_error
-MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR MPIDU_Complete_posted_with_error
+<fileinfo name="mpid_probe.c">
+MPID_STATE_MPID_PROBE MPID_Probe
+</fileinfo>
+<fileinfo name="mpid_imrecv.c">
+</fileinfo>
+<fileinfo name="mpidi_printf.c">
+</fileinfo>
+<fileinfo name="mpid_get_universe_size.c">
+</fileinfo>
+<fileinfo name="mpid_vc.c">
+MPID_STATE_MPIDI_VCRT_CREATE MPIDI_VCRT_Create
+MPID_STATE_MPIDI_VCRT_ADD_REF MPIDI_VCRT_Add_ref
+MPID_STATE_MPIDI_VCRT_RELEASE MPIDI_VCRT_Release
+MPID_STATE_MPID_VCR_DUP MPIDI_VCR_Dup
+MPID_STATE_MPID_VCR_GET_LPID MPID_Comm_get_lpid
+MPID_STATE_MPID_GPID_GETALLINCOMM MPIDI_GPID_GetAllInComm
+</fileinfo>
+<fileinfo name="ch3u_handle_revoke_pkt.c">
+</fileinfo>
+<fileinfo name="mpid_iprobe.c">
+MPID_STATE_MPID_IPROBE MPID_Iprobe
</fileinfo>
<fileinfo name="mpid_startall.c">
MPID_STATE_MPID_STARTALL MPID_Startall
@@ -329,9 +317,25 @@ MPID_STATE_MPID_RSEND_INIT MPID_Rsend_init
MPID_STATE_MPID_BSEND_INIT MPID_Bsend_init
MPID_STATE_MPID_RECV_INIT MPID_Recv_init
</fileinfo>
-<fileinfo name="mpid_aint.c">
-MPID_STATE_MPID_AINT_ADD MPID_Aint_add
-MPID_STATE_MPID_AINT_DIFF MPID_Aint_diff
+<fileinfo name="mpid_init.c">
+MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD set_eager_threshold
+MPID_STATE_MPID_INIT MPID_Init
+</fileinfo>
+<fileinfo name="mpid_ssend.c">
+MPID_STATE_MPID_SSEND MPID_Ssend
+</fileinfo>
+<fileinfo name="mpid_coll.c">
+</fileinfo>
+<fileinfo name="mpid_send.c">
+MPID_STATE_MPID_SEND MPID_Send
+</fileinfo>
+<fileinfo name="mpid_mprobe.c">
+</fileinfo>
+<fileinfo name="mpid_issend.c">
+MPID_STATE_MPID_ISSEND MPID_Issend
+</fileinfo>
+<fileinfo name="mpid_finalize.c">
+MPID_STATE_MPID_FINALIZE MPID_Finalize
</fileinfo>
<fileinfo name="ch3u_rma_ops.c">
MPID_STATE_MPIDI_CH3I_PUT MPIDI_CH3I_Put
@@ -345,27 +349,28 @@ MPID_STATE_MPID_GET_ACCUMULATE MPID_Get_accumulate
MPID_STATE_MPID_COMPARE_AND_SWAP MPID_Compare_and_swap
MPID_STATE_MPID_FETCH_AND_OP MPID_Fetch_and_op
</fileinfo>
-<fileinfo name="ch3u_comm.c">
-MPID_STATE_MPIDI_CH3U_COMM_INIT MPIDI_CH3U_Comm_init
-MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK MPIDI_CH3U_Comm_create_hook
-MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK MPIDI_CH3U_Comm_destroy_hook
-MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK MPIDI_CH3U_Comm_register_create_hook
-MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK MPIDI_CH3U_Comm_register_destroy_hook
-MPID_STATE_REGISTER_HOOK_FINALIZE register_hook_finalize
-MPID_STATE_COMM_CREATED comm_created
-MPID_STATE_COMM_DESTROYED comm_destroyed
-MPID_STATE_NONEMPTY_INTERSECTION nonempty_intersection
-MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS MPIDI_CH3I_Comm_handle_failed_procs
-MPIDI_STATE_MPIDI_CH3I_COMM_FIND MPIDI_CH3I_Comm_handle_failed_procs
+<fileinfo name="ch3u_port.c">
+MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT MPIDI_Create_inter_root_communicator_connect
+MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT MPIDI_Create_inter_root_communicator_accept
+MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM MPIDI_CH3I_Initialize_tmp_comm
+MPID_STATE_MPIDI_COMM_CONNECT MPIDI_Comm_connect
+MPID_STATE_EXTRACTLOCALPGINFO ExtractLocalPGInfo
+MPID_STATE_RECEIVEPGANDDISTRIBUTE ReceivePGAndDistribute
+MPID_STATE_SENDPGTOPEERANDFREE SendPGtoPeerAndFree
+MPID_STATE_MPIDI_COMM_ACCEPT MPIDI_Comm_accept
+MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE MPIDI_CH3I_Acceptq_enqueue
+MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE MPIDI_CH3I_Acceptq_dequeue
+MPID_STATE_MPIDI_CH3I_PORT_INIT MPIDI_CH3I_Port_init
+MPID_STATE_MPIDI_CH3I_PORT_DESTROY MPIDI_CH3I_Port_destroy
+MPID_STATE_MPIDI_PORT_FINALIZE MPIDI_Port_finalize
</fileinfo>
-<fileinfo name="mpid_rma.c">
-MPID_STATE_MPID_WIN_CREATE MPID_Win_create
-MPID_STATE_MPID_WIN_ALLOCATE MPID_Win_allocate
-MPID_STATE_MPID_WIN_CREATE_DYNAMIC MPID_Win_create_dynamic
-MPID_STATE_MPID_ALLOC_MEM MPID_Alloc_mem
-MPID_STATE_MPID_FREE_MEM MPID_Free_mem
-MPID_STATE_MPID_WIN_ALLOCATE_SHARED MPID_Win_allocate_shared
-MPID_STATE_MPID_WIN_SHARED_QUERY MPID_Win_shared_query
-MPID_STATE_WIN_INIT win_init
+<fileinfo name="ch3u_comm_spawn_multiple.c">
+MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE MPIDI_Comm_spawn_multiple
+</fileinfo>
+<fileinfo name="mpid_isend.c">
+MPID_STATE_MPID_ISEND MPID_Isend
+</fileinfo>
+<fileinfo name="ch3u_eager.c">
+MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV MPIDI_CH3_SendNoncontig_iov
</fileinfo>
</data>
diff --git a/src/mpid/ch3/src/ch3u_buffer.c b/src/mpid/ch3/src/ch3u_buffer.c
index 9302c0f..7af0dba 100644
--- a/src/mpid/ch3/src/ch3u_buffer.c
+++ b/src/mpid/ch3/src/ch3u_buffer.c
@@ -34,20 +34,20 @@ Used indirectly by mpid_irecv, mpid_recv (through MPIDI_CH3_RecvFromSelf) and
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIDI_CH3U_Buffer_copy(
const void * const sbuf, MPI_Aint scount, MPI_Datatype sdt, int * smpi_errno,
- void * const rbuf, MPI_Aint rcount, MPI_Datatype rdt, MPIDI_msg_sz_t * rsz,
+ void * const rbuf, MPI_Aint rcount, MPI_Datatype rdt, intptr_t * rsz,
int * rmpi_errno)
{
int sdt_contig;
int rdt_contig;
MPI_Aint sdt_true_lb, rdt_true_lb;
- MPIDI_msg_sz_t sdata_sz;
- MPIDI_msg_sz_t rdata_sz;
- MPID_Datatype * sdt_ptr;
- MPID_Datatype * rdt_ptr;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_BUFFER_COPY);
- MPIDI_STATE_DECL(MPID_STATE_MEMCPY);
+ intptr_t sdata_sz;
+ intptr_t rdata_sz;
+ MPIDU_Datatype* sdt_ptr;
+ MPIDU_Datatype* rdt_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_BUFFER_COPY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MEMCPY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_BUFFER_COPY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_BUFFER_COPY);
*smpi_errno = MPI_SUCCESS;
*rmpi_errno = MPI_SUCCESS;
@@ -57,8 +57,8 @@ void MPIDI_CH3U_Buffer_copy(
/* --BEGIN ERROR HANDLING-- */
if (sdata_sz > rdata_sz)
{
- MPIU_DBG_MSG_FMT(CH3_OTHER,TYPICAL,(MPIU_DBG_FDEST,
- "message truncated, sdata_sz=" MPIDI_MSG_SZ_FMT " rdata_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TYPICAL,(MPL_DBG_FDEST,
+ "message truncated, sdata_sz=%" PRIdPTR " rdata_sz=%" PRIdPTR,
sdata_sz, rdata_sz));
sdata_sz = rdata_sz;
*rmpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE, "**truncate", "**truncate %d %d", sdata_sz, rdata_sz );
@@ -73,23 +73,23 @@ void MPIDI_CH3U_Buffer_copy(
if (sdt_contig && rdt_contig)
{
- MPIDI_FUNC_ENTER(MPID_STATE_MEMCPY);
- MPIU_Memcpy((char *)rbuf + rdt_true_lb, (const char *)sbuf + sdt_true_lb, sdata_sz);
- MPIDI_FUNC_EXIT(MPID_STATE_MEMCPY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MEMCPY);
+ MPIR_Memcpy((char *)rbuf + rdt_true_lb, (const char *)sbuf + sdt_true_lb, sdata_sz);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MEMCPY);
*rsz = sdata_sz;
}
else if (sdt_contig)
{
- MPID_Segment seg;
+ MPIDU_Segment seg;
MPI_Aint last;
- MPID_Segment_init(rbuf, rcount, rdt, &seg, 0);
+ MPIDU_Segment_init(rbuf, rcount, rdt, &seg, 0);
last = sdata_sz;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "pre-unpack last=" MPIDI_MSG_SZ_FMT, last ));
- MPID_Segment_unpack(&seg, 0, &last, (char*)sbuf + sdt_true_lb);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "pre-unpack last=" MPIDI_MSG_SZ_FMT, last ));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "pre-unpack last=%" PRIdPTR, last ));
+ MPIDU_Segment_unpack(&seg, 0, &last, (char*)sbuf + sdt_true_lb);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "pre-unpack last=%" PRIdPTR, last ));
/* --BEGIN ERROR HANDLING-- */
if (last != sdata_sz)
{
@@ -101,16 +101,16 @@ void MPIDI_CH3U_Buffer_copy(
}
else if (rdt_contig)
{
- MPID_Segment seg;
+ MPIDU_Segment seg;
MPI_Aint last;
- MPID_Segment_init(sbuf, scount, sdt, &seg, 0);
+ MPIDU_Segment_init(sbuf, scount, sdt, &seg, 0);
last = sdata_sz;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "pre-pack last=" MPIDI_MSG_SZ_FMT, last ));
- MPID_Segment_pack(&seg, 0, &last, (char*)rbuf + rdt_true_lb);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "post-pack last=" MPIDI_MSG_SZ_FMT, last ));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "pre-pack last=%" PRIdPTR, last ));
+ MPIDU_Segment_pack(&seg, 0, &last, (char*)rbuf + rdt_true_lb);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "post-pack last=%" PRIdPTR, last ));
/* --BEGIN ERROR HANDLING-- */
if (last != sdata_sz)
{
@@ -123,17 +123,17 @@ void MPIDI_CH3U_Buffer_copy(
else
{
char * buf;
- MPIDI_msg_sz_t buf_off;
- MPID_Segment sseg;
- MPIDI_msg_sz_t sfirst;
- MPID_Segment rseg;
- MPIDI_msg_sz_t rfirst;
+ intptr_t buf_off;
+ MPIDU_Segment sseg;
+ intptr_t sfirst;
+ MPIDU_Segment rseg;
+ intptr_t rfirst;
- buf = MPIU_Malloc(MPIDI_COPY_BUFFER_SZ);
+ buf = MPL_malloc(MPIDI_COPY_BUFFER_SZ);
/* --BEGIN ERROR HANDLING-- */
if (buf == NULL)
{
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"SRBuf allocation failure");
*smpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", 0);
*rmpi_errno = *smpi_errno;
*rsz = 0;
@@ -141,8 +141,8 @@ void MPIDI_CH3U_Buffer_copy(
}
/* --END ERROR HANDLING-- */
- MPID_Segment_init(sbuf, scount, sdt, &sseg, 0);
- MPID_Segment_init(rbuf, rcount, rdt, &rseg, 0);
+ MPIDU_Segment_init(sbuf, scount, sdt, &sseg, 0);
+ MPIDU_Segment_init(rbuf, rcount, rdt, &rseg, 0);
sfirst = 0;
rfirst = 0;
@@ -162,29 +162,29 @@ void MPIDI_CH3U_Buffer_copy(
last = sdata_sz;
}
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "pre-pack first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "pre-pack first=%" PRIdPTR ", last=%" PRIdPTR,
sfirst, last ));
- MPID_Segment_pack(&sseg, sfirst, &last, buf + buf_off);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "post-pack first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT,
+ MPIDU_Segment_pack(&sseg, sfirst, &last, buf + buf_off);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "post-pack first=%" PRIdPTR ", last=%" PRIdPTR,
sfirst, last ));
/* --BEGIN ERROR HANDLING-- */
- MPIU_Assert(last > sfirst);
+ MPIR_Assert(last > sfirst);
/* --END ERROR HANDLING-- */
buf_end = buf + buf_off + (last - sfirst);
sfirst = last;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "pre-unpack first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "pre-unpack first=%" PRIdPTR ", last=%" PRIdPTR,
rfirst, last ));
- MPID_Segment_unpack(&rseg, rfirst, &last, buf);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "post-unpack first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT,
+ MPIDU_Segment_unpack(&rseg, rfirst, &last, buf);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "post-unpack first=%" PRIdPTR ", last=%" PRIdPTR,
rfirst, last ));
/* --BEGIN ERROR HANDLING-- */
- MPIU_Assert(last > rfirst);
+ MPIR_Assert(last > rfirst);
/* --END ERROR HANDLING-- */
rfirst = last;
@@ -207,18 +207,18 @@ void MPIDI_CH3U_Buffer_copy(
buf_off = sfirst - rfirst;
if (buf_off > 0)
{
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE, (MPIU_DBG_FDEST,
- "moved " MPIDI_MSG_SZ_FMT " bytes to the beginning of the tmp buffer", buf_off));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE, (MPL_DBG_FDEST,
+ "moved %" PRIdPTR " bytes to the beginning of the tmp buffer", buf_off));
memmove(buf, buf_end - buf_off, buf_off);
}
}
*rsz = rfirst;
- MPIU_Free(buf);
+ MPL_free(buf);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_BUFFER_COPY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_BUFFER_COPY);
}
@@ -226,15 +226,15 @@ void MPIDI_CH3U_Buffer_copy(
* This routine is called by mpid_recv and mpid_irecv when a request
* matches a send-to-self message
*/
-int MPIDI_CH3_RecvFromSelf( MPID_Request *rreq, void *buf, MPI_Aint count,
+int MPIDI_CH3_RecvFromSelf( MPIR_Request *rreq, void *buf, MPI_Aint count,
MPI_Datatype datatype )
{
- MPID_Request * const sreq = rreq->partner_request;
+ MPIR_Request * const sreq = rreq->dev.partner_request;
int mpi_errno = MPI_SUCCESS;
if (sreq != NULL)
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPIDI_CH3U_Buffer_copy(sreq->dev.user_buf, sreq->dev.user_count,
sreq->dev.datatype, &sreq->status.MPI_ERROR,
diff --git a/src/mpid/ch3/src/ch3u_comm.c b/src/mpid/ch3/src/ch3u_comm.c
index 7458f9a..a8c7502 100644
--- a/src/mpid/ch3/src/ch3u_comm.c
+++ b/src/mpid/ch3/src/ch3u_comm.c
@@ -28,18 +28,18 @@ cvars:
*/
static int register_hook_finalize(void *param);
-static int comm_created(MPID_Comm *comm, void *param);
-static int comm_destroyed(MPID_Comm *comm, void *param);
+static int comm_created(MPIR_Comm *comm, void *param);
+static int comm_destroyed(MPIR_Comm *comm, void *param);
/* macros and head for list of communicators */
#define COMM_ADD(comm) MPL_DL_PREPEND_NP(comm_list, comm, dev.next, dev.prev)
#define COMM_DEL(comm) MPL_DL_DELETE_NP(comm_list, comm, dev.next, dev.prev)
#define COMM_FOREACH(elt) MPL_DL_FOREACH_NP(comm_list, elt, dev.next, dev.prev)
-static MPID_Comm *comm_list = NULL;
+static MPIR_Comm *comm_list = NULL;
typedef struct hook_elt
{
- int (*hook_fn)(struct MPID_Comm *, void *);
+ int (*hook_fn)(struct MPIR_Comm *, void *);
void *param;
struct hook_elt *prev;
struct hook_elt *next;
@@ -58,11 +58,11 @@ int MPIDI_CH3I_Comm_init(void)
{
int mpi_errno = MPI_SUCCESS;
#if defined HAVE_LIBHCOLL && MPID_CH3I_CH_HCOLL_BCOL
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
#endif
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_COMM_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_COMM_INIT);
MPIR_Add_finalize(register_hook_finalize, NULL, MPIR_FINALIZE_CALLBACK_PRIO-1);
@@ -89,7 +89,7 @@ int MPIDI_CH3I_Comm_init(void)
char *envstr;
int size = strlen("HCOLL_BCOL=") + strlen(MPID_CH3I_CH_HCOLL_BCOL) + 1;
- MPIU_CHKLMEM_MALLOC(envstr, char *, size, mpi_errno, "**malloc");
+ MPIR_CHKLMEM_MALLOC(envstr, char *, size, mpi_errno, "**malloc");
MPL_snprintf(envstr, size, "HCOLL_BCOL=%s", MPID_CH3I_CH_HCOLL_BCOL);
r = MPL_putenv(envstr);
@@ -108,9 +108,9 @@ int MPIDI_CH3I_Comm_init(void)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_COMM_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_COMM_INIT);
#if defined HAVE_LIBHCOLL && MPID_CH3I_CH_HCOLL_BCOL
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
#endif
return mpi_errno;
fn_fail:
@@ -127,12 +127,12 @@ static void dup_vcrt(struct MPIDI_VCRT *src_vcrt, struct MPIDI_VCRT **dest_vcrt,
/* try to find the simple case where the new comm is a simple
* duplicate of the previous comm. in that case, we simply add a
* reference to the previous VCRT instead of recreating it. */
- if (mapper->type == MPIR_COMM_MAP_DUP && src_comm_size == vcrt_size) {
+ if (mapper->type == MPIR_COMM_MAP_TYPE__DUP && src_comm_size == vcrt_size) {
*dest_vcrt = src_vcrt;
MPIDI_VCRT_Add_ref(src_vcrt);
return;
}
- else if (mapper->type == MPIR_COMM_MAP_IRREGULAR &&
+ else if (mapper->type == MPIR_COMM_MAP_TYPE__IRREGULAR &&
mapper->src_mapping_size == vcrt_size) {
/* if the mapping array is exactly the same as the original
* comm's VC list, there is no need to create a new VCRT.
@@ -156,7 +156,7 @@ static void dup_vcrt(struct MPIDI_VCRT *src_vcrt, struct MPIDI_VCRT **dest_vcrt,
if (!vcrt_offset)
MPIDI_VCRT_Create(vcrt_size, dest_vcrt);
- if (mapper->type == MPIR_COMM_MAP_DUP) {
+ if (mapper->type == MPIR_COMM_MAP_TYPE__DUP) {
for (i = 0; i < src_comm_size; i++)
MPIDI_VCR_Dup(src_vcrt->vcr_table[i],
&((*dest_vcrt)->vcr_table[i + vcrt_offset]));
@@ -170,9 +170,9 @@ static void dup_vcrt(struct MPIDI_VCRT *src_vcrt, struct MPIDI_VCRT **dest_vcrt,
static inline int map_size(MPIR_Comm_map_t map)
{
- if (map.type == MPIR_COMM_MAP_IRREGULAR)
+ if (map.type == MPIR_COMM_MAP_TYPE__IRREGULAR)
return map.src_mapping_size;
- else if (map.dir == MPIR_COMM_MAP_DIR_L2L || map.dir == MPIR_COMM_MAP_DIR_L2R)
+ else if (map.dir == MPIR_COMM_MAP_DIR__L2L || map.dir == MPIR_COMM_MAP_DIR__L2R)
return map.src_comm->local_size;
else
return map.src_comm->remote_size;
@@ -182,17 +182,17 @@ static inline int map_size(MPIR_Comm_map_t map)
#define FUNCNAME MPIDI_CH3U_Comm_create_hook
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
+int MPIDI_CH3I_Comm_create_hook(MPIR_Comm *comm)
{
int mpi_errno = MPI_SUCCESS;
hook_elt *elt;
MPIR_Comm_map_t *mapper;
- MPID_Comm *src_comm;
+ MPIR_Comm *src_comm;
int vcrt_size, vcrt_offset;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK);
/* initialize the is_disconnected variable to FALSE. this will be
* set to TRUE if the communicator is freed by an
@@ -201,20 +201,20 @@ int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
/* do some sanity checks */
MPL_LL_FOREACH(comm->mapper_head, mapper) {
- if (mapper->src_comm->comm_kind == MPID_INTRACOMM)
- MPIU_Assert(mapper->dir == MPIR_COMM_MAP_DIR_L2L ||
- mapper->dir == MPIR_COMM_MAP_DIR_L2R);
- if (comm->comm_kind == MPID_INTRACOMM)
- MPIU_Assert(mapper->dir == MPIR_COMM_MAP_DIR_L2L ||
- mapper->dir == MPIR_COMM_MAP_DIR_R2L);
+ if (mapper->src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIR_Assert(mapper->dir == MPIR_COMM_MAP_DIR__L2L ||
+ mapper->dir == MPIR_COMM_MAP_DIR__L2R);
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIR_Assert(mapper->dir == MPIR_COMM_MAP_DIR__L2L ||
+ mapper->dir == MPIR_COMM_MAP_DIR__R2L);
}
/* First, handle all the mappers that contribute to the local part
* of the comm */
vcrt_size = 0;
MPL_LL_FOREACH(comm->mapper_head, mapper) {
- if (mapper->dir == MPIR_COMM_MAP_DIR_L2R ||
- mapper->dir == MPIR_COMM_MAP_DIR_R2R)
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2R ||
+ mapper->dir == MPIR_COMM_MAP_DIR__R2R)
continue;
vcrt_size += map_size(*mapper);
@@ -223,19 +223,19 @@ int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
MPL_LL_FOREACH(comm->mapper_head, mapper) {
src_comm = mapper->src_comm;
- if (mapper->dir == MPIR_COMM_MAP_DIR_L2R ||
- mapper->dir == MPIR_COMM_MAP_DIR_R2R)
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2R ||
+ mapper->dir == MPIR_COMM_MAP_DIR__R2R)
continue;
- if (mapper->dir == MPIR_COMM_MAP_DIR_L2L) {
- if (src_comm->comm_kind == MPID_INTRACOMM && comm->comm_kind == MPID_INTRACOMM) {
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2L) {
+ if (src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM && comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
dup_vcrt(src_comm->dev.vcrt, &comm->dev.vcrt, mapper, mapper->src_comm->local_size,
vcrt_size, vcrt_offset);
}
- else if (src_comm->comm_kind == MPID_INTRACOMM && comm->comm_kind == MPID_INTERCOMM)
+ else if (src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM && comm->comm_kind == MPIR_COMM_KIND__INTERCOMM)
dup_vcrt(src_comm->dev.vcrt, &comm->dev.local_vcrt, mapper, mapper->src_comm->local_size,
vcrt_size, vcrt_offset);
- else if (src_comm->comm_kind == MPID_INTERCOMM && comm->comm_kind == MPID_INTRACOMM) {
+ else if (src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM && comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
dup_vcrt(src_comm->dev.local_vcrt, &comm->dev.vcrt, mapper, mapper->src_comm->local_size,
vcrt_size, vcrt_offset);
}
@@ -243,9 +243,9 @@ int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
dup_vcrt(src_comm->dev.local_vcrt, &comm->dev.local_vcrt, mapper,
mapper->src_comm->local_size, vcrt_size, vcrt_offset);
}
- else { /* mapper->dir == MPIR_COMM_MAP_DIR_R2L */
- MPIU_Assert(src_comm->comm_kind == MPID_INTERCOMM);
- if (comm->comm_kind == MPID_INTRACOMM) {
+ else { /* mapper->dir == MPIR_COMM_MAP_DIR__R2L */
+ MPIR_Assert(src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM);
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
dup_vcrt(src_comm->dev.vcrt, &comm->dev.vcrt, mapper, mapper->src_comm->remote_size,
vcrt_size, vcrt_offset);
}
@@ -260,8 +260,8 @@ int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
* of the comm (only valid for intercomms) */
vcrt_size = 0;
MPL_LL_FOREACH(comm->mapper_head, mapper) {
- if (mapper->dir == MPIR_COMM_MAP_DIR_L2L ||
- mapper->dir == MPIR_COMM_MAP_DIR_R2L)
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2L ||
+ mapper->dir == MPIR_COMM_MAP_DIR__R2L)
continue;
vcrt_size += map_size(*mapper);
@@ -270,29 +270,29 @@ int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
MPL_LL_FOREACH(comm->mapper_head, mapper) {
src_comm = mapper->src_comm;
- if (mapper->dir == MPIR_COMM_MAP_DIR_L2L ||
- mapper->dir == MPIR_COMM_MAP_DIR_R2L)
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2L ||
+ mapper->dir == MPIR_COMM_MAP_DIR__R2L)
continue;
- MPIU_Assert(comm->comm_kind == MPID_INTERCOMM);
+ MPIR_Assert(comm->comm_kind == MPIR_COMM_KIND__INTERCOMM);
- if (mapper->dir == MPIR_COMM_MAP_DIR_L2R) {
- if (src_comm->comm_kind == MPID_INTRACOMM)
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2R) {
+ if (src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM)
dup_vcrt(src_comm->dev.vcrt, &comm->dev.vcrt, mapper, mapper->src_comm->local_size,
vcrt_size, vcrt_offset);
else
dup_vcrt(src_comm->dev.local_vcrt, &comm->dev.vcrt, mapper,
mapper->src_comm->local_size, vcrt_size, vcrt_offset);
}
- else { /* mapper->dir == MPIR_COMM_MAP_DIR_R2R */
- MPIU_Assert(src_comm->comm_kind == MPID_INTERCOMM);
+ else { /* mapper->dir == MPIR_COMM_MAP_DIR__R2R */
+ MPIR_Assert(src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM);
dup_vcrt(src_comm->dev.vcrt, &comm->dev.vcrt, mapper, mapper->src_comm->remote_size,
vcrt_size, vcrt_offset);
}
vcrt_offset += map_size(*mapper);
}
- if (comm->comm_kind == MPID_INTERCOMM) {
+ if (comm->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
/* setup the vcrt for the local_comm in the intercomm */
if (comm->local_comm) {
comm->local_comm->dev.vcrt = comm->dev.local_vcrt;
@@ -306,7 +306,7 @@ int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_COMM_CREATE_HOOK);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -316,13 +316,13 @@ int MPIDI_CH3I_Comm_create_hook(MPID_Comm *comm)
#define FUNCNAME MPIDI_CH3U_Comm_destroy_hook
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Comm_destroy_hook(MPID_Comm *comm)
+int MPIDI_CH3I_Comm_destroy_hook(MPIR_Comm *comm)
{
int mpi_errno = MPI_SUCCESS;
hook_elt *elt;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK);
MPL_LL_FOREACH(destroy_hooks_head, elt) {
mpi_errno = elt->hook_fn(comm, elt->param);
@@ -332,13 +332,13 @@ int MPIDI_CH3I_Comm_destroy_hook(MPID_Comm *comm)
mpi_errno = MPIDI_VCRT_Release(comm->dev.vcrt, comm->dev.is_disconnected);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- if (comm->comm_kind == MPID_INTERCOMM) {
+ if (comm->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
mpi_errno = MPIDI_VCRT_Release(comm->dev.local_vcrt, comm->dev.is_disconnected);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_COMM_DESTROY_HOOK);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -349,16 +349,16 @@ int MPIDI_CH3I_Comm_destroy_hook(MPID_Comm *comm)
#define FUNCNAME MPIDI_CH3U_Comm_register_create_hook
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Comm_register_create_hook(int (*hook_fn)(struct MPID_Comm *, void *), void *param)
+int MPIDI_CH3U_Comm_register_create_hook(int (*hook_fn)(struct MPIR_Comm *, void *), void *param)
{
int mpi_errno = MPI_SUCCESS;
hook_elt *elt;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK);
- MPIU_CHKPMEM_MALLOC(elt, hook_elt *, sizeof(hook_elt), mpi_errno, "hook_elt");
+ MPIR_CHKPMEM_MALLOC(elt, hook_elt *, sizeof(hook_elt), mpi_errno, "hook_elt");
elt->hook_fn = hook_fn;
elt->param = param;
@@ -366,11 +366,11 @@ int MPIDI_CH3U_Comm_register_create_hook(int (*hook_fn)(struct MPID_Comm *, void
MPL_LL_PREPEND(create_hooks_head, create_hooks_tail, elt);
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_CREATE_HOOK);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -378,16 +378,16 @@ int MPIDI_CH3U_Comm_register_create_hook(int (*hook_fn)(struct MPID_Comm *, void
#define FUNCNAME MPIDI_CH3U_Comm_register_destroy_hook
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Comm_register_destroy_hook(int (*hook_fn)(struct MPID_Comm *, void *), void *param)
+int MPIDI_CH3U_Comm_register_destroy_hook(int (*hook_fn)(struct MPIR_Comm *, void *), void *param)
{
int mpi_errno = MPI_SUCCESS;
hook_elt *elt;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK);
- MPIU_CHKPMEM_MALLOC(elt, hook_elt *, sizeof(hook_elt), mpi_errno, "hook_elt");
+ MPIR_CHKPMEM_MALLOC(elt, hook_elt *, sizeof(hook_elt), mpi_errno, "hook_elt");
elt->hook_fn = hook_fn;
elt->param = param;
@@ -395,10 +395,10 @@ int MPIDI_CH3U_Comm_register_destroy_hook(int (*hook_fn)(struct MPID_Comm *, voi
MPL_LL_PREPEND(destroy_hooks_head, destroy_hooks_tail, elt);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_COMM_REGISTER_DESTROY_HOOK);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -410,22 +410,22 @@ static int register_hook_finalize(void *param)
{
int mpi_errno = MPI_SUCCESS;
hook_elt *elt, *tmp;
- MPIDI_STATE_DECL(MPID_STATE_REGISTER_HOOK_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_REGISTER_HOOK_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_REGISTER_HOOK_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_REGISTER_HOOK_FINALIZE);
MPL_LL_FOREACH_SAFE(create_hooks_head, elt, tmp) {
MPL_LL_DELETE(create_hooks_head, create_hooks_tail, elt);
- MPIU_Free(elt);
+ MPL_free(elt);
}
MPL_LL_FOREACH_SAFE(destroy_hooks_head, elt, tmp) {
MPL_LL_DELETE(destroy_hooks_head, destroy_hooks_tail, elt);
- MPIU_Free(elt);
+ MPL_free(elt);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_REGISTER_HOOK_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_REGISTER_HOOK_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -436,12 +436,12 @@ static int register_hook_finalize(void *param)
#define FUNCNAME comm_created
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int comm_created(MPID_Comm *comm, void *param)
+int comm_created(MPIR_Comm *comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_COMM_CREATED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_COMM_CREATED);
- MPIDI_FUNC_ENTER(MPID_STATE_COMM_CREATED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_COMM_CREATED);
comm->dev.anysource_enabled = TRUE;
@@ -454,7 +454,7 @@ int comm_created(MPID_Comm *comm, void *param)
COMM_ADD(comm);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_COMM_CREATED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_COMM_CREATED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -464,19 +464,19 @@ int comm_created(MPID_Comm *comm, void *param)
#define FUNCNAME comm_destroyed
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int comm_destroyed(MPID_Comm *comm, void *param)
+int comm_destroyed(MPIR_Comm *comm, void *param)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_COMM_DESTROYED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_COMM_DESTROYED);
- MPIDI_FUNC_ENTER(MPID_STATE_COMM_DESTROYED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_COMM_DESTROYED);
COMM_DEL(comm);
comm->dev.next = NULL;
comm->dev.prev = NULL;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_COMM_DESTROYED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_COMM_DESTROYED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -488,19 +488,19 @@ int comm_destroyed(MPID_Comm *comm, void *param)
#define FUNCNAME nonempty_intersection
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int nonempty_intersection(MPID_Comm *comm, MPID_Group *group, int *flag)
+static int nonempty_intersection(MPIR_Comm *comm, MPIR_Group *group, int *flag)
{
int mpi_errno = MPI_SUCCESS;
int i_g, i_c;
MPIDI_VC_t *vc_g, *vc_c;
- MPIDI_STATE_DECL(MPID_STATE_NONEMPTY_INTERSECTION);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NONEMPTY_INTERSECTION);
- MPIDI_FUNC_ENTER(MPID_STATE_NONEMPTY_INTERSECTION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NONEMPTY_INTERSECTION);
/* handle common case fast */
if (comm == MPIR_Process.comm_world || comm == MPIR_Process.icomm_world) {
*flag = TRUE;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "comm is comm_world or icomm_world");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "comm is comm_world or icomm_world");
goto fn_exit;
}
*flag = FALSE;
@@ -522,7 +522,7 @@ static int nonempty_intersection(MPID_Comm *comm, MPID_Group *group, int *flag)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_NONEMPTY_INTERSECTION);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NONEMPTY_INTERSECTION);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -533,14 +533,14 @@ static int nonempty_intersection(MPID_Comm *comm, MPID_Group *group, int *flag)
#define FUNCNAME MPIDI_CH3I_Comm_handle_failed_procs
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs)
+int MPIDI_CH3I_Comm_handle_failed_procs(MPIR_Group *new_failed_procs)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm;
+ MPIR_Comm *comm;
int flag = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
/* mark communicators with new failed processes as collectively inactive and
disable posting anysource receives */
@@ -554,8 +554,8 @@ int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (flag) {
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE,
- (MPIU_DBG_FDEST, "disabling AS on communicator %p (%#08x)",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE,
+ (MPL_DBG_FDEST, "disabling AS on communicator %p (%#08x)",
comm, comm->handle));
comm->dev.anysource_enabled = FALSE;
}
@@ -566,25 +566,25 @@ int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs)
MPIDI_CH3_Progress_signal_completion();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
return mpi_errno;
fn_fail:
goto fn_exit;
}
-void MPIDI_CH3I_Comm_find(MPIU_Context_id_t context_id, MPID_Comm **comm)
+void MPIDI_CH3I_Comm_find(MPIR_Context_id_t context_id, MPIR_Comm **comm)
{
- MPIDI_STATE_DECL(MPIDI_STATE_MPIDI_CH3I_COMM_FIND);
- MPIDI_FUNC_ENTER(MPIDI_STATE_MPIDI_CH3I_COMM_FIND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPIDI_STATE_MPIDI_CH3I_COMM_FIND);
+ MPIR_FUNC_VERBOSE_ENTER(MPIDI_STATE_MPIDI_CH3I_COMM_FIND);
COMM_FOREACH((*comm)) {
- if ((*comm)->context_id == context_id || ((*comm)->context_id + MPID_CONTEXT_INTRA_COLL) == context_id ||
- ((*comm)->node_comm && ((*comm)->node_comm->context_id == context_id || ((*comm)->node_comm->context_id + MPID_CONTEXT_INTRA_COLL) == context_id)) ||
- ((*comm)->node_roots_comm && ((*comm)->node_roots_comm->context_id == context_id || ((*comm)->node_roots_comm->context_id + MPID_CONTEXT_INTRA_COLL) == context_id)) ) {
- MPIU_DBG_MSG_D(CH3_OTHER,VERBOSE,"Found matching context id: %d", (*comm)->context_id);
+ if ((*comm)->context_id == context_id || ((*comm)->context_id + MPIR_CONTEXT_INTRA_COLL) == context_id ||
+ ((*comm)->node_comm && ((*comm)->node_comm->context_id == context_id || ((*comm)->node_comm->context_id + MPIR_CONTEXT_INTRA_COLL) == context_id)) ||
+ ((*comm)->node_roots_comm && ((*comm)->node_roots_comm->context_id == context_id || ((*comm)->node_roots_comm->context_id + MPIR_CONTEXT_INTRA_COLL) == context_id)) ) {
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,"Found matching context id: %d", (*comm)->context_id);
break;
}
}
- MPIDI_FUNC_EXIT(MPIDI_STATE_MPIDI_CH3I_COMM_FIND);
+ MPIR_FUNC_VERBOSE_EXIT(MPIDI_STATE_MPIDI_CH3I_COMM_FIND);
}
diff --git a/src/mpid/ch3/src/ch3u_comm_spawn_multiple.c b/src/mpid/ch3/src/ch3u_comm_spawn_multiple.c
index 78c864d..ce9e54e 100644
--- a/src/mpid/ch3/src/ch3u_comm_spawn_multiple.c
+++ b/src/mpid/ch3/src/ch3u_comm_spawn_multiple.c
@@ -34,7 +34,7 @@
#define FUNCNAME mpi_to_pmi_keyvals
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int mpi_to_pmi_keyvals( MPID_Info *info_ptr, PMI_keyval_t **kv_ptr,
+static int mpi_to_pmi_keyvals( MPIR_Info *info_ptr, PMI_keyval_t **kv_ptr,
int *nkeys_ptr )
{
char key[MPI_MAX_INFO_KEY];
@@ -49,7 +49,7 @@ static int mpi_to_pmi_keyvals( MPID_Info *info_ptr, PMI_keyval_t **kv_ptr,
if (nkeys == 0) {
goto fn_exit;
}
- kv = (PMI_keyval_t *)MPIU_Malloc( nkeys * sizeof(PMI_keyval_t) );
+ kv = (PMI_keyval_t *)MPL_malloc( nkeys * sizeof(PMI_keyval_t) );
if (!kv) { MPIR_ERR_POP(mpi_errno); }
for (i=0; i<nkeys; i++) {
@@ -58,14 +58,14 @@ static int mpi_to_pmi_keyvals( MPID_Info *info_ptr, PMI_keyval_t **kv_ptr,
MPIR_Info_get_valuelen_impl( info_ptr, key, &vallen, &flag );
MPIR_ERR_CHKANDJUMP1(!flag, mpi_errno, MPI_ERR_OTHER,"**infonokey", "**infonokey %s", key);
- kv[i].key = MPIU_Strdup(key);
- kv[i].val = MPIU_Malloc( vallen + 1 );
+ kv[i].key = MPL_strdup(key);
+ kv[i].val = MPL_malloc( vallen + 1 );
if (!kv[i].key || !kv[i].val) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem" );
}
MPIR_Info_get_impl( info_ptr, key, vallen+1, kv[i].val, &flag );
MPIR_ERR_CHKANDJUMP1(!flag, mpi_errno, MPI_ERR_OTHER,"**infonokey", "**infonokey %s", key);
- MPIU_DBG_PRINTF(("key: <%s>, value: <%s>\n", kv[i].key, kv[i].val));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST,"key: <%s>, value: <%s>\n", kv[i].key, kv[i].val));
}
fn_fail:
@@ -84,13 +84,13 @@ static void free_pmi_keyvals(PMI_keyval_t **kv, int size, int *counts)
for (j=0; j<counts[i]; j++)
{
if (kv[i][j].key != NULL)
- MPIU_Free((char *)kv[i][j].key);
+ MPL_free((char *)kv[i][j].key);
if (kv[i][j].val != NULL)
- MPIU_Free(kv[i][j].val);
+ MPL_free(kv[i][j].val);
}
if (kv[i] != NULL)
{
- MPIU_Free(kv[i]);
+ MPL_free(kv[i]);
}
}
}
@@ -104,8 +104,8 @@ static void free_pmi_keyvals(PMI_keyval_t **kv, int size, int *counts)
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_Comm_spawn_multiple(int count, char **commands,
char ***argvs, const int *maxprocs,
- MPID_Info **info_ptrs, int root,
- MPID_Comm *comm_ptr, MPID_Comm
+ MPIR_Info **info_ptrs, int root,
+ MPIR_Comm *comm_ptr, MPIR_Comm
**intercomm, int *errcodes)
{
char port_name[MPI_MAX_PORT_NAME];
@@ -113,9 +113,9 @@ int MPIDI_Comm_spawn_multiple(int count, char **commands,
PMI_keyval_t **info_keyval_vectors=0, preput_keyval_vector;
int *pmi_errcodes = 0, pmi_errno;
int total_num_processes, should_accept = 1;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
if (comm_ptr->rank == root) {
@@ -124,7 +124,7 @@ int MPIDI_Comm_spawn_multiple(int count, char **commands,
for (i=0; i<count; i++) {
total_num_processes += maxprocs[i];
}
- pmi_errcodes = (int*)MPIU_Malloc(sizeof(int) * total_num_processes);
+ pmi_errcodes = (int*)MPL_malloc(sizeof(int) * total_num_processes);
if (pmi_errcodes == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
@@ -142,15 +142,15 @@ int MPIDI_Comm_spawn_multiple(int count, char **commands,
/* Spawn the processes */
#ifdef USE_PMI2_API
- MPIU_Assert(count > 0);
+ MPIR_Assert(count > 0);
{
- int *argcs = MPIU_Malloc(count*sizeof(int));
- struct MPID_Info preput;
- struct MPID_Info *preput_p[1] = { &preput };
+ int *argcs = MPL_malloc(count*sizeof(int));
+ struct MPIR_Info preput;
+ struct MPIR_Info *preput_p[1] = { &preput };
- MPIU_Assert(argcs);
+ MPIR_Assert(argcs);
/*
- info_keyval_sizes = MPIU_Malloc(count * sizeof(int));
+ info_keyval_sizes = MPL_malloc(count * sizeof(int));
*/
/* FIXME cheating on constness */
@@ -179,14 +179,14 @@ int MPIDI_Comm_spawn_multiple(int count, char **commands,
pmi_errno = PMI2_Job_Spawn(count, (const char **)commands,
argcs, (const char ***)argvs,
maxprocs,
- info_keyval_sizes, (const MPID_Info **)info_ptrs,
- 1, (const struct MPID_Info **)preput_p,
+ info_keyval_sizes, (const MPIR_Info **)info_ptrs,
+ 1, (const struct MPIR_Info **)preput_p,
NULL, 0,
/*jobId, jobIdSize,*/ /* XXX DJG job stuff? */
pmi_errcodes);
MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
/*MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_PMI_MUTEX);*/
- MPIU_Free(argcs);
+ MPL_free(argcs);
if (pmi_errno != PMI2_SUCCESS) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER,
"**pmi_spawn_multiple", "**pmi_spawn_multiple %d", pmi_errno);
@@ -199,9 +199,9 @@ int MPIDI_Comm_spawn_multiple(int count, char **commands,
the necessary arrays of key/value pairs */
/* convert the infos into PMI keyvals */
- info_keyval_sizes = (int *) MPIU_Malloc(count * sizeof(int));
+ info_keyval_sizes = (int *) MPL_malloc(count * sizeof(int));
info_keyval_vectors =
- (PMI_keyval_t**) MPIU_Malloc(count * sizeof(PMI_keyval_t*));
+ (PMI_keyval_t**) MPL_malloc(count * sizeof(PMI_keyval_t*));
if (!info_keyval_sizes || !info_keyval_vectors) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
@@ -291,13 +291,13 @@ int MPIDI_Comm_spawn_multiple(int count, char **commands,
fn_exit:
if (info_keyval_vectors) {
free_pmi_keyvals(info_keyval_vectors, count, info_keyval_sizes);
- MPIU_Free(info_keyval_sizes);
- MPIU_Free(info_keyval_vectors);
+ MPL_free(info_keyval_sizes);
+ MPL_free(info_keyval_vectors);
}
if (pmi_errcodes) {
- MPIU_Free(pmi_errcodes);
+ MPL_free(pmi_errcodes);
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -354,7 +354,7 @@ int MPIDI_CH3_GetParentPort(char ** parent_port)
goto fn_exit;
}
#endif
- parent_port_name = MPIU_Strdup(val);
+ parent_port_name = MPL_strdup(val);
if (parent_port_name == NULL) {
MPIR_ERR_POP(mpi_errno); /* FIXME DARIUS */
}
@@ -370,7 +370,7 @@ int MPIDI_CH3_GetParentPort(char ** parent_port)
void MPIDI_CH3_FreeParentPort(void)
{
if (parent_port_name) {
- MPIU_Free( parent_port_name );
+ MPL_free( parent_port_name );
parent_port_name = 0;
}
}
diff --git a/src/mpid/ch3/src/ch3u_eager.c b/src/mpid/ch3/src/ch3u_eager.c
index 1a81c5a..d39e0e8 100644
--- a/src/mpid/ch3/src/ch3u_eager.c
+++ b/src/mpid/ch3/src/ch3u_eager.c
@@ -20,15 +20,15 @@
/* MPIDI_CH3_SendNoncontig_iov - Sends a message by loading an
IOV and calling iSendv. The caller must initialize
sreq->dev.segment as well as segment_first and segment_size. */
-int MPIDI_CH3_SendNoncontig_iov( MPIDI_VC_t *vc, MPID_Request *sreq,
- void *header, MPIDI_msg_sz_t hdr_sz )
+int MPIDI_CH3_SendNoncontig_iov( MPIDI_VC_t *vc, MPIR_Request *sreq,
+ void *header, intptr_t hdr_sz )
{
int mpi_errno = MPI_SUCCESS;
int iov_n;
MPL_IOV iov[MPL_IOV_LIMIT];
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV);
iov[0].MPL_IOV_BUF = header;
iov[0].MPL_IOV_LEN = hdr_sz;
@@ -54,7 +54,7 @@ int MPIDI_CH3_SendNoncontig_iov( MPIDI_VC_t *vc, MPID_Request *sreq,
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|eagermsg");
}
/* --END ERROR HANDLING-- */
@@ -65,14 +65,14 @@ int MPIDI_CH3_SendNoncontig_iov( MPIDI_VC_t *vc, MPID_Request *sreq,
else
{
/* --BEGIN ERROR HANDLING-- */
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|loadsendiov");
/* --END ERROR HANDLING-- */
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_SENDNONCONTIG_IOV);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -85,22 +85,22 @@ int MPIDI_CH3_SendNoncontig_iov( MPIDI_VC_t *vc, MPID_Request *sreq,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/* MPIDI_CH3_EagerNoncontigSend - Eagerly send noncontiguous data */
-int MPIDI_CH3_EagerNoncontigSend( MPID_Request **sreq_p,
+int MPIDI_CH3_EagerNoncontigSend( MPIR_Request **sreq_p,
MPIDI_CH3_Pkt_type_t reqtype,
const void * buf, MPI_Aint count,
- MPI_Datatype datatype, MPIDI_msg_sz_t data_sz,
+ MPI_Datatype datatype, intptr_t data_sz,
int rank,
- int tag, MPID_Comm * comm,
+ int tag, MPIR_Comm * comm,
int context_offset )
{
int mpi_errno = MPI_SUCCESS;
MPIDI_VC_t * vc;
- MPID_Request *sreq = *sreq_p;
+ MPIR_Request *sreq = *sreq_p;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_send_t * const eager_pkt = &upkt.eager_send;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "sending non-contiguous eager message, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "sending non-contiguous eager message, data_sz=%" PRIdPTR,
data_sz));
sreq->dev.OnDataAvail = 0;
sreq->dev.OnFinal = 0;
@@ -118,13 +118,13 @@ int MPIDI_CH3_EagerNoncontigSend( MPID_Request **sreq_p,
MPIDI_Pkt_set_seqnum(eager_pkt, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
- MPIU_DBG_MSGPKT(vc,tag,eager_pkt->match.parts.context_id,rank,data_sz,
+ MPL_DBG_MSGPKT(vc,tag,eager_pkt->match.parts.context_id,rank,data_sz,
"Eager");
- sreq->dev.segment_ptr = MPID_Segment_alloc( );
- MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc( );
+ MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
@@ -151,16 +151,16 @@ int MPIDI_CH3_EagerNoncontigSend( MPID_Request **sreq_p,
#define FUNCNAME MPIDI_EagerContigSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_EagerContigSend( MPID_Request **sreq_p,
+int MPIDI_CH3_EagerContigSend( MPIR_Request **sreq_p,
MPIDI_CH3_Pkt_type_t reqtype,
- const void * buf, MPIDI_msg_sz_t data_sz, int rank,
- int tag, MPID_Comm * comm, int context_offset )
+ const void * buf, intptr_t data_sz, int rank,
+ int tag, MPIR_Comm * comm, int context_offset )
{
int mpi_errno = MPI_SUCCESS;
MPIDI_VC_t * vc;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_send_t * const eager_pkt = &upkt.eager_send;
- MPID_Request *sreq = *sreq_p;
+ MPIR_Request *sreq = *sreq_p;
MPL_IOV iov[2];
MPIDI_Pkt_init(eager_pkt, reqtype);
@@ -173,8 +173,8 @@ int MPIDI_CH3_EagerContigSend( MPID_Request **sreq_p,
iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)eager_pkt;
iov[0].MPL_IOV_LEN = sizeof(*eager_pkt);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "sending contiguous eager message, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "sending contiguous eager message, data_sz=%" PRIdPTR,
data_sz));
iov[1].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) buf;
@@ -184,7 +184,7 @@ int MPIDI_CH3_EagerContigSend( MPID_Request **sreq_p,
MPIDI_VC_FAI_send_seqnum(vc, seqnum);
MPIDI_Pkt_set_seqnum(eager_pkt, seqnum);
- MPIU_DBG_MSGPKT(vc,tag,eager_pkt->match.parts.context_id,rank,data_sz,"EagerContig");
+ MPL_DBG_MSGPKT(vc,tag,eager_pkt->match.parts.context_id,rank,data_sz,"EagerContig");
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, 2, sreq_p);
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
@@ -217,10 +217,10 @@ int MPIDI_CH3_EagerContigSend( MPID_Request **sreq_p,
#define FUNCNAME MPIDI_EagerContigShortSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_EagerContigShortSend( MPID_Request **sreq_p,
- MPIDI_CH3_Pkt_type_t reqtype,
- const void * buf, MPIDI_msg_sz_t data_sz, int rank,
- int tag, MPID_Comm * comm,
+int MPIDI_CH3_EagerContigShortSend( MPIR_Request **sreq_p,
+ MPIDI_CH3_Pkt_type_t reqtype,
+ const void * buf, intptr_t data_sz, int rank,
+ int tag, MPIR_Comm * comm,
int context_offset )
{
int mpi_errno = MPI_SUCCESS;
@@ -228,7 +228,7 @@ int MPIDI_CH3_EagerContigShortSend( MPID_Request **sreq_p,
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eagershort_send_t * const eagershort_pkt =
&upkt.eagershort_send;
- MPID_Request *sreq = *sreq_p;
+ MPIR_Request *sreq = *sreq_p;
/* printf( "Sending short eager\n"); fflush(stdout); */
MPIDI_Pkt_init(eagershort_pkt, reqtype);
@@ -237,8 +237,8 @@ int MPIDI_CH3_EagerContigShortSend( MPID_Request **sreq_p,
eagershort_pkt->match.parts.context_id = comm->context_id + context_offset;
eagershort_pkt->data_sz = data_sz;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "sending contiguous short eager message, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "sending contiguous short eager message, data_sz=%" PRIdPTR,
data_sz));
MPIDI_Comm_get_vc_set_active(comm, rank, &vc);
@@ -258,7 +258,7 @@ int MPIDI_CH3_EagerContigShortSend( MPID_Request **sreq_p,
}
}
- MPIU_DBG_MSGPKT(vc,tag,eagershort_pkt->match.parts.context_id,rank,data_sz,
+ MPL_DBG_MSGPKT(vc,tag,eagershort_pkt->match.parts.context_id,rank,data_sz,
"EagerShort");
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
mpi_errno = MPIDI_CH3_iStartMsg(vc, eagershort_pkt, sizeof(*eagershort_pkt), sreq_p);
@@ -288,24 +288,24 @@ int MPIDI_CH3_EagerContigShortSend( MPID_Request **sreq_p,
#define FUNCNAME MPIDI_CH3_PktHandler_EagerShortSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_eagershort_send_t * eagershort_pkt = &pkt->eagershort_send;
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
int mpi_errno = MPI_SUCCESS;
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
/* printf( "Receiving short eager!\n" ); fflush(stdout); */
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"received eagershort send pkt, rank=%d, tag=%d, context=%d",
eagershort_pkt->match.parts.rank,
eagershort_pkt->match.parts.tag,
eagershort_pkt->match.parts.context_id));
- MPIU_DBG_MSGPKT(vc,eagershort_pkt->match.parts.tag,
+ MPL_DBG_MSGPKT(vc,eagershort_pkt->match.parts.tag,
eagershort_pkt->match.parts.context_id,
eagershort_pkt->match.parts.rank,eagershort_pkt->data_sz,
"ReceivedEagerShort");
@@ -315,7 +315,7 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
/* If the completion counter is 0, that means that the communicator to
* which this message is being sent has been revoked and we shouldn't
* bother finishing this. */
- if (!found && MPID_cc_get(rreq->cc) == 0) {
+ if (!found && MPIR_cc_get(rreq->cc) == 0) {
*rreqp = NULL;
goto fn_fail;
}
@@ -332,7 +332,7 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
The packet handler returns null for a request that requires
no further communication */
*rreqp = NULL;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
/* Extract the data from the packet */
/* Note that if the data size if zero, we're already done */
@@ -340,9 +340,9 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
if (found) {
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t userbuf_sz;
- MPID_Datatype *dt_ptr;
- MPIDI_msg_sz_t data_sz;
+ intptr_t userbuf_sz;
+ MPIDU_Datatype *dt_ptr;
+ intptr_t data_sz;
/* Make sure that we handle the general (non-contiguous)
datatypes correctly while optimizing for the
@@ -354,10 +354,10 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
data_sz = rreq->dev.recv_data_sz;
}
else {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "receive buffer too small; message truncated, msg_sz="
- MPIDI_MSG_SZ_FMT ", userbuf_sz="
- MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "receive buffer too small; message truncated, msg_sz=%"
+ PRIdPTR ", userbuf_sz=%"
+ PRIdPTR,
rreq->dev.recv_data_sz, userbuf_sz));
rreq->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE,
@@ -396,22 +396,22 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
to fix this, but it will require a sweep of the code */
}
else {
- MPIDI_msg_sz_t recv_data_sz;
+ intptr_t recv_data_sz;
MPI_Aint last;
/* user buffer is not contiguous. Use the segment
code to unpack it, handling various errors and
exceptional cases */
/* FIXME: The MPICH tests do not exercise this branch */
/* printf( "Surprise!\n" ); fflush(stdout);*/
- rreq->dev.segment_ptr = MPID_Segment_alloc( );
- MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc( );
+ MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
rreq->dev.datatype, rreq->dev.segment_ptr, 0);
recv_data_sz = rreq->dev.recv_data_sz;
last = recv_data_sz;
- MPID_Segment_unpack( rreq->dev.segment_ptr, 0,
+ MPIDU_Segment_unpack( rreq->dev.segment_ptr, 0,
&last, eagershort_pkt->data );
if (last != recv_data_sz) {
/* --BEGIN ERROR HANDLING-- */
@@ -436,7 +436,7 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
* cool in this case? No upper layer has a pointer to rreq yet
* (it's unexpected and freshly allocated)
*/
- MPIDI_msg_sz_t recv_data_sz;
+ intptr_t recv_data_sz;
/* This is easy; copy the data into a temporary buffer.
To begin with, we use the same temporary location as
is used in receiving eager unexpected data.
@@ -450,7 +450,7 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
/* printf( "Allocating into tmp\n" ); fflush(stdout); */
recv_data_sz = rreq->dev.recv_data_sz;
MPIR_T_PVAR_LEVEL_INC(RECVQ, unexpected_recvq_buffer_size, recv_data_sz);
- rreq->dev.tmpbuf = MPIU_Malloc(recv_data_sz);
+ rreq->dev.tmpbuf = MPL_malloc(recv_data_sz);
if (!rreq->dev.tmpbuf) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
@@ -525,20 +525,20 @@ int MPIDI_CH3_PktHandler_EagerShortSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#define FUNCNAME MPIDI_EagerContigIsend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_EagerContigIsend( MPID_Request **sreq_p,
+int MPIDI_CH3_EagerContigIsend( MPIR_Request **sreq_p,
MPIDI_CH3_Pkt_type_t reqtype,
- const void * buf, MPIDI_msg_sz_t data_sz, int rank,
- int tag, MPID_Comm * comm, int context_offset )
+ const void * buf, intptr_t data_sz, int rank,
+ int tag, MPIR_Comm * comm, int context_offset )
{
int mpi_errno = MPI_SUCCESS;
MPIDI_VC_t * vc;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_send_t * const eager_pkt = &upkt.eager_send;
- MPID_Request *sreq = *sreq_p;
+ MPIR_Request *sreq = *sreq_p;
MPL_IOV iov[MPL_IOV_LIMIT];
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "sending contiguous eager message, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "sending contiguous eager message, data_sz=%" PRIdPTR,
data_sz));
sreq->dev.OnDataAvail = 0;
@@ -561,14 +561,14 @@ int MPIDI_CH3_EagerContigIsend( MPID_Request **sreq_p,
MPIDI_Pkt_set_seqnum(eager_pkt, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
- MPIU_DBG_MSGPKT(vc,tag,eager_pkt->match.parts.context_id,rank,data_sz,"EagerIsend");
+ MPL_DBG_MSGPKT(vc,tag,eager_pkt->match.parts.context_id,rank,data_sz,"EagerIsend");
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
mpi_errno = MPIDI_CH3_iSendv(vc, sreq, iov, 2);
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
*sreq_p = NULL;
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|eagermsg");
}
@@ -604,24 +604,23 @@ int MPIDI_CH3_EagerContigIsend( MPID_Request **sreq_p,
#define FUNCNAME MPIDI_CH3_PktHandler_EagerSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data,
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_eager_send_t * eager_pkt = &pkt->eager_send;
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
int complete;
- char *data_buf;
- MPIDI_msg_sz_t data_len;
+ intptr_t data_len;
int mpi_errno = MPI_SUCCESS;
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"received eager send pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d",
eager_pkt->sender_req_id, eager_pkt->match.parts.rank,
eager_pkt->match.parts.tag, eager_pkt->match.parts.context_id));
- MPIU_DBG_MSGPKT(vc,eager_pkt->match.parts.tag,
+ MPL_DBG_MSGPKT(vc,eager_pkt->match.parts.tag,
eager_pkt->match.parts.context_id,
eager_pkt->match.parts.rank,eager_pkt->data_sz,
"ReceivedEager");
@@ -632,20 +631,19 @@ int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
/* If the completion counter is 0, that means that the communicator to
* which this message is being sent has been revoked and we shouldn't
* bother finishing this. */
- if (!found && MPID_cc_get(rreq->cc) == 0) {
+ if (!found && MPIR_cc_get(rreq->cc) == 0) {
*rreqp = NULL;
goto fn_fail;
}
set_request_info(rreq, eager_pkt, MPIDI_REQUEST_EAGER_MSG);
- data_len = ((*buflen - sizeof(MPIDI_CH3_Pkt_t) >= rreq->dev.recv_data_sz)
- ? rreq->dev.recv_data_sz : *buflen - sizeof(MPIDI_CH3_Pkt_t));
- data_buf = (char *)pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = ((*buflen >= rreq->dev.recv_data_sz)
+ ? rreq->dev.recv_data_sz : *buflen);
if (rreq->dev.recv_data_sz == 0) {
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -654,11 +652,11 @@ int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
}
else {
if (found) {
- mpi_errno = MPIDI_CH3U_Receive_data_found( rreq, data_buf,
+ mpi_errno = MPIDI_CH3U_Receive_data_found( rreq, data,
&data_len, &complete );
}
else {
- mpi_errno = MPIDI_CH3U_Receive_data_unexpected( rreq, data_buf,
+ mpi_errno = MPIDI_CH3U_Receive_data_unexpected( rreq, data,
&data_len, &complete );
}
@@ -668,7 +666,7 @@ int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
}
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + data_len;
+ *buflen = data_len;
if (complete)
{
@@ -694,24 +692,23 @@ int MPIDI_CH3_PktHandler_EagerSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_ReadySend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data,
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_ready_send_t * ready_pkt = &pkt->ready_send;
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
int complete;
- char *data_buf;
- MPIDI_msg_sz_t data_len;
+ intptr_t data_len;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"received ready send pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d",
ready_pkt->sender_req_id,
ready_pkt->match.parts.rank,
ready_pkt->match.parts.tag,
ready_pkt->match.parts.context_id));
- MPIU_DBG_MSGPKT(vc,ready_pkt->match.parts.tag,
+ MPL_DBG_MSGPKT(vc,ready_pkt->match.parts.tag,
ready_pkt->match.parts.context_id,
ready_pkt->match.parts.rank,ready_pkt->data_sz,
"ReceivedReady");
@@ -722,21 +719,20 @@ int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
/* If the completion counter is 0, that means that the communicator to
* which this message is being sent has been revoked and we shouldn't
* bother finishing this. */
- if (!found && MPID_cc_get(rreq->cc) == 0) {
+ if (!found && MPIR_cc_get(rreq->cc) == 0) {
*rreqp = NULL;
goto fn_fail;
}
set_request_info(rreq, ready_pkt, MPIDI_REQUEST_EAGER_MSG);
- data_len = ((*buflen - sizeof(MPIDI_CH3_Pkt_t) >= rreq->dev.recv_data_sz)
- ? rreq->dev.recv_data_sz : *buflen - sizeof(MPIDI_CH3_Pkt_t));
- data_buf = (char *)pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = ((*buflen >= rreq->dev.recv_data_sz)
+ ? rreq->dev.recv_data_sz : *buflen);
if (found) {
if (rreq->dev.recv_data_sz == 0) {
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + data_len;;
+ *buflen = data_len;;
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -744,7 +740,7 @@ int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
*rreqp = NULL;
}
else {
- mpi_errno = MPIDI_CH3U_Receive_data_found(rreq, data_buf, &data_len,
+ mpi_errno = MPIDI_CH3U_Receive_data_found(rreq, data, &data_len,
&complete);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER,
@@ -754,7 +750,7 @@ int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
}
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + data_len;
+ *buflen = data_len;
if (complete)
{
@@ -810,7 +806,7 @@ int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
*rreqp = NULL;
}
/* we didn't process anything but the header in this case */
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
}
fn_fail:
return mpi_errno;
@@ -824,14 +820,14 @@ int MPIDI_CH3_PktHandler_ReadySend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#ifdef MPICH_DBG_OUTPUT
int MPIDI_CH3_PktPrint_EagerSend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... EAGER_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->eager_send.sender_req_id));
- MPIU_DBG_PRINTF((" context_id ... %d\n", pkt->eager_send.match.parts.context_id));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->eager_send.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->eager_send.match.parts.rank));
- MPIU_DBG_PRINTF((" data_sz ...... %d\n", pkt->eager_send.data_sz));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... EAGER_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->eager_send.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n", pkt->eager_send.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->eager_send.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->eager_send.match.parts.rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," data_sz ...... %d\n", pkt->eager_send.data_sz);
#ifdef MPID_USE_SEQUENCE_NUMBERS
- MPIU_DBG_PRINTF((" seqnum ....... %d\n", pkt->eager_send.seqnum));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," seqnum ....... %d\n", pkt->eager_send.seqnum);
#endif
}
@@ -840,13 +836,13 @@ int MPIDI_CH3_PktPrint_EagerShortSend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
int datalen;
unsigned char *p = (unsigned char *)pkt->eagershort_send.data;
- MPIU_DBG_PRINTF((" type ......... EAGERSHORT_SEND\n"));
- MPIU_DBG_PRINTF((" context_id ... %d\n", pkt->eagershort_send.match.parts.context_id));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->eagershort_send.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->eagershort_send.match.parts.rank));
- MPIU_DBG_PRINTF((" data_sz ...... %d\n", pkt->eagershort_send.data_sz));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... EAGERSHORT_SEND\n");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n", pkt->eagershort_send.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->eagershort_send.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->eagershort_send.match.parts.rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," data_sz ...... %d\n", pkt->eagershort_send.data_sz);
#ifdef MPID_USE_SEQUENCE_NUMBERS
- MPIU_DBG_PRINTF((" seqnum ....... %d\n", pkt->eagershort_send.seqnum));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," seqnum ....... %d\n", pkt->eagershort_send.seqnum);
#endif
datalen = pkt->eagershort_send.data_sz;
if (datalen > 0) {
@@ -856,21 +852,21 @@ int MPIDI_CH3_PktPrint_EagerShortSend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
for (i=0; i<datalen; i++) {
MPL_snprintf( &databytes[2*i], 64 - 2*i, "%2x", p[i] );
}
- MPIU_DBG_PRINTF((" data ......... %s\n", databytes));
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_OTHER,TERSE," data ......... %s\n", databytes);
}
}
#endif /* defined(USE_EAGER_SHORT) */
int MPIDI_CH3_PktPrint_ReadySend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... READY_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->ready_send.sender_req_id));
- MPIU_DBG_PRINTF((" context_id ... %d\n", pkt->ready_send.match.parts.context_id));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->ready_send.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->ready_send.match.parts.rank));
- MPIU_DBG_PRINTF((" data_sz ...... %d\n", pkt->ready_send.data_sz));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... READY_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->ready_send.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n", pkt->ready_send.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->ready_send.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->ready_send.match.parts.rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," data_sz ...... %d\n", pkt->ready_send.data_sz);
#ifdef MPID_USE_SEQUENCE_NUMBERS
- MPIU_DBG_PRINTF((" seqnum ....... %d\n", pkt->ready_send.seqnum));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," seqnum ....... %d\n", pkt->ready_send.seqnum);
#endif
}
diff --git a/src/mpid/ch3/src/ch3u_eagersync.c b/src/mpid/ch3/src/ch3u_eagersync.c
index 3e57955..3eaadbf 100644
--- a/src/mpid/ch3/src/ch3u_eagersync.c
+++ b/src/mpid/ch3/src/ch3u_eagersync.c
@@ -26,23 +26,23 @@
most application codes should not be using synchronous sends in
performance-critical operations.
*/
-int MPIDI_CH3_EagerSyncNoncontigSend( MPID_Request **sreq_p,
+int MPIDI_CH3_EagerSyncNoncontigSend( MPIR_Request **sreq_p,
const void * buf, int count,
- MPI_Datatype datatype, MPIDI_msg_sz_t data_sz,
+ MPI_Datatype datatype, intptr_t data_sz,
int dt_contig, MPI_Aint dt_true_lb,
int rank,
- int tag, MPID_Comm * comm,
+ int tag, MPIR_Comm * comm,
int context_offset )
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_sync_send_t * const es_pkt = &upkt.eager_sync_send;
MPIDI_VC_t * vc;
- MPID_Request *sreq = *sreq_p;
+ MPIR_Request *sreq = *sreq_p;
/* MT FIXME what are the two operations we are waiting for? the send and
* the sync response? */
- MPID_cc_set(&sreq->cc, 2);
+ MPIR_cc_set(&sreq->cc, 2);
sreq->dev.OnDataAvail = 0;
sreq->dev.OnFinal = 0;
@@ -59,13 +59,13 @@ int MPIDI_CH3_EagerSyncNoncontigSend( MPID_Request **sreq_p,
MPIDI_Pkt_set_seqnum(es_pkt, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
- MPIU_DBG_MSGPKT(vc,tag,es_pkt->match.parts.context_id,rank,data_sz,"EagerSync");
+ MPL_DBG_MSGPKT(vc,tag,es_pkt->match.parts.context_id,rank,data_sz,"EagerSync");
if (dt_contig)
{
MPL_IOV iov[2];
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "sending contiguous sync eager message, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "sending contiguous sync eager message, data_sz=%" PRIdPTR,
data_sz));
iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)es_pkt;
@@ -81,7 +81,7 @@ int MPIDI_CH3_EagerSyncNoncontigSend( MPID_Request **sreq_p,
{
/* Make sure to destroy the request before setting the pointer to
* NULL, otherwise we lose the handle on the request */
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
*sreq_p = NULL;
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|eagermsg");
}
@@ -89,14 +89,14 @@ int MPIDI_CH3_EagerSyncNoncontigSend( MPID_Request **sreq_p,
}
else
{
- MPIU_DBG_MSG_D(CH3_OTHER,VERBOSE,
- "sending non-contiguous sync eager message, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,
+ "sending non-contiguous sync eager message, data_sz=%" PRIdPTR,
data_sz);
- sreq->dev.segment_ptr = MPID_Segment_alloc( );
- MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc( );
+ MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
+ MPIDU_Segment_init(buf, count, datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
@@ -116,20 +116,20 @@ int MPIDI_CH3_EagerSyncNoncontigSend( MPID_Request **sreq_p,
/* Send a zero-sized message with eager synchronous. This is a temporary
routine, as we may want to replace this with a counterpart to the
Eager Short message */
-int MPIDI_CH3_EagerSyncZero(MPID_Request **sreq_p, int rank, int tag,
- MPID_Comm * comm, int context_offset )
+int MPIDI_CH3_EagerSyncZero(MPIR_Request **sreq_p, int rank, int tag,
+ MPIR_Comm * comm, int context_offset )
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_sync_send_t * const es_pkt = &upkt.eager_sync_send;
MPIDI_VC_t * vc;
- MPID_Request *sreq = *sreq_p;
+ MPIR_Request *sreq = *sreq_p;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending zero length message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending zero length message");
/* MT FIXME what are the two operations we are waiting for? the send and
* the sync response? */
- MPID_cc_set(&sreq->cc, 2);
+ MPIR_cc_set(&sreq->cc, 2);
MPIDI_Request_set_msg_type(sreq, MPIDI_REQUEST_EAGER_MSG);
sreq->dev.OnDataAvail = 0;
@@ -145,14 +145,14 @@ int MPIDI_CH3_EagerSyncZero(MPID_Request **sreq_p, int rank, int tag,
MPIDI_Pkt_set_seqnum(es_pkt, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
- MPIU_DBG_MSGPKT(vc,tag,es_pkt->match.parts.context_id,rank,(MPIDI_msg_sz_t)0,"EagerSync0");
+ MPL_DBG_MSGPKT(vc,tag,es_pkt->match.parts.context_id,rank,(intptr_t)0,"EagerSync0");
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
mpi_errno = MPIDI_CH3_iSend(vc, sreq, es_pkt, sizeof(*es_pkt));
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
*sreq_p = NULL;
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|eagermsg");
}
@@ -167,14 +167,14 @@ int MPIDI_CH3_EagerSyncZero(MPID_Request **sreq_p, int rank, int tag,
/*
* These routines are called when a receive matches an eager sync send
*/
-int MPIDI_CH3_EagerSyncAck( MPIDI_VC_t *vc, MPID_Request *rreq )
+int MPIDI_CH3_EagerSyncAck( MPIDI_VC_t *vc, MPIR_Request *rreq )
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_sync_ack_t * const esa_pkt = &upkt.eager_sync_ack;
- MPID_Request * esa_req;
+ MPIR_Request * esa_req;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending eager sync ack");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending eager sync ack");
MPIDI_Pkt_init(esa_pkt, MPIDI_CH3_PKT_EAGER_SYNC_ACK);
esa_pkt->sender_req_id = rreq->dev.sender_req_id;
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
@@ -185,7 +185,7 @@ int MPIDI_CH3_EagerSyncAck( MPIDI_VC_t *vc, MPID_Request *rreq )
}
if (esa_req != NULL)
{
- MPID_Request_release(esa_req);
+ MPIR_Request_free(esa_req);
}
fn_fail:
return mpi_errno;
@@ -212,23 +212,22 @@ int MPIDI_CH3_EagerSyncAck( MPIDI_VC_t *vc, MPID_Request *rreq )
#define FUNCNAME MPIDI_CH3_PktHandler_EagerSyncSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data,
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_eager_send_t * es_pkt = &pkt->eager_send;
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
int complete;
- char *data_buf;
- MPIDI_msg_sz_t data_len;
+ intptr_t data_len;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"received eager sync send pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d",
es_pkt->sender_req_id, es_pkt->match.parts.rank,
es_pkt->match.parts.tag,
es_pkt->match.parts.context_id));
- MPIU_DBG_MSGPKT(vc,es_pkt->match.parts.tag,es_pkt->match.parts.context_id,
+ MPL_DBG_MSGPKT(vc,es_pkt->match.parts.tag,es_pkt->match.parts.context_id,
es_pkt->match.parts.rank,es_pkt->data_sz,
"ReceivedEagerSync");
@@ -238,25 +237,24 @@ int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
/* If the completion counter is 0, that means that the communicator to
* which this message is being sent has been revoked and we shouldn't
* bother finishing this. */
- if (!found && MPID_cc_get(rreq->cc) == 0) {
+ if (!found && MPIR_cc_get(rreq->cc) == 0) {
*rreqp = NULL;
goto fn_fail;
}
set_request_info(rreq, es_pkt, MPIDI_REQUEST_EAGER_MSG);
- data_len = ((*buflen - sizeof(MPIDI_CH3_Pkt_t) >= rreq->dev.recv_data_sz)
- ? rreq->dev.recv_data_sz : *buflen - sizeof(MPIDI_CH3_Pkt_t));
- data_buf = (char *)pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = ((*buflen >= rreq->dev.recv_data_sz)
+ ? rreq->dev.recv_data_sz : *buflen);
if (found)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_sync_ack_t * const esa_pkt = &upkt.eager_sync_ack;
- MPID_Request * esa_req;
+ MPIR_Request * esa_req;
if (rreq->dev.recv_data_sz == 0) {
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -264,14 +262,14 @@ int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
*rreqp = NULL;
}
else {
- mpi_errno = MPIDI_CH3U_Receive_data_found( rreq, data_buf,
+ mpi_errno = MPIDI_CH3U_Receive_data_found( rreq, data,
&data_len, &complete );
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_EAGER_SYNC_SEND");
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + data_len;
+ *buflen = data_len;
if (complete)
{
@@ -286,7 +284,7 @@ int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
*rreqp = rreq;
}
}
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending eager sync ack");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending eager sync ack");
MPIDI_Pkt_init(esa_pkt, MPIDI_CH3_PKT_EAGER_SYNC_ACK);
esa_pkt->sender_req_id = rreq->dev.sender_req_id;
@@ -299,13 +297,13 @@ int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
"**ch3|syncack");
}
if (esa_req != NULL) {
- MPID_Request_release(esa_req);
+ MPIR_Request_free(esa_req);
}
}
else
{
if (rreq->dev.recv_data_sz == 0) {
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -313,14 +311,14 @@ int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
*rreqp = NULL;
}
else {
- mpi_errno = MPIDI_CH3U_Receive_data_unexpected( rreq, data_buf,
+ mpi_errno = MPIDI_CH3U_Receive_data_unexpected( rreq, data,
&data_len, &complete );
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_EAGER_SYNC_SEND");
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + data_len;
+ *buflen = data_len;
if (complete)
{
@@ -345,17 +343,17 @@ int MPIDI_CH3_PktHandler_EagerSyncSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_EagerSyncAck
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_EagerSyncAck( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_EagerSyncAck( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_eager_sync_ack_t * esa_pkt = &pkt->eager_sync_ack;
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,
"received eager sync ack pkt, sreq=0x%08x", esa_pkt->sender_req_id);
- MPID_Request_get_ptr(esa_pkt->sender_req_id, sreq);
+ MPIR_Request_get_ptr(esa_pkt->sender_req_id, sreq);
/* decrement CC (but don't mark data transfer as complete since the
transfer could still be in progress) */
@@ -365,7 +363,7 @@ int MPIDI_CH3_PktHandler_EagerSyncAck( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
MPIR_ERR_POP(mpi_errno);
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
fn_exit:
@@ -377,22 +375,22 @@ int MPIDI_CH3_PktHandler_EagerSyncAck( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#ifdef MPICH_DBG_OUTPUT
int MPIDI_CH3_PktPrint_EagerSyncSend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... EAGER_SYNC_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->eager_sync_send.sender_req_id));
- MPIU_DBG_PRINTF((" context_id ... %d\n", pkt->eager_sync_send.match.parts.context_id));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->eager_sync_send.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->eager_sync_send.match.parts.rank));
- MPIU_DBG_PRINTF((" data_sz ...... %d\n", pkt->eager_sync_send.data_sz));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... EAGER_SYNC_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->eager_sync_send.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n", pkt->eager_sync_send.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->eager_sync_send.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->eager_sync_send.match.parts.rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," data_sz ...... %d\n", pkt->eager_sync_send.data_sz);
#ifdef MPID_USE_SEQUENCE_NUMBERS
- MPIU_DBG_PRINTF((" seqnum ....... %d\n", pkt->eager_sync_send.seqnum));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," seqnum ....... %d\n", pkt->eager_sync_send.seqnum);
#endif
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_EagerSyncAck( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... EAGER_SYNC_ACK\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->eager_sync_ack.sender_req_id));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... EAGER_SYNC_ACK\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->eager_sync_ack.sender_req_id));
return MPI_SUCCESS;
}
#endif
diff --git a/src/mpid/ch3/src/ch3u_handle_connection.c b/src/mpid/ch3/src/ch3u_handle_connection.c
index fa0b569..9dda0cd 100644
--- a/src/mpid/ch3/src/ch3u_handle_connection.c
+++ b/src/mpid/ch3/src/ch3u_handle_connection.c
@@ -12,13 +12,13 @@
#endif
#undef utarray_oom
#define utarray_oom() do { goto fn_oom; } while (0)
-#include "mpiu_utarray.h"
+#include "mpir_utarray.h"
/* Count the number of outstanding close requests */
static volatile int MPIDI_Outstanding_close_ops = 0;
int MPIDI_Failed_vc_count = 0;
-MPID_Group *MPIDI_Failed_procs_group = NULL;
+MPIR_Group *MPIDI_Failed_procs_group = NULL;
int MPIDI_last_known_failed = MPI_PROC_NULL;
char *MPIDI_failed_procs_string = NULL;
@@ -49,9 +49,9 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
{
int inuse;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_CONNECTION);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_CONNECTION);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_CONNECTION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_CONNECTION);
switch (event)
{
@@ -65,7 +65,7 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
/* MT: this is not thread safe */
MPIDI_Outstanding_close_ops -= 1;
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,
"outstanding close operations = %d", MPIDI_Outstanding_close_ops);
if (MPIDI_Outstanding_close_ops == 0)
@@ -81,7 +81,7 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
/* VC was terminated before it was activated.
This can happen if a failed process was
detected before the process used the VC. */
- MPIU_DBG_MSG(CH3_DISCONNECT,TYPICAL, "VC terminated before it was activated. We probably got a failed"
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT,TYPICAL, "VC terminated before it was activated. We probably got a failed"
" process notification.");
MPIDI_CH3U_Complete_posted_with_error(vc);
++MPIDI_Failed_vc_count;
@@ -97,7 +97,7 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
be outstanding sends or receives on the local
side, remote side or both. */
- MPIU_DBG_MSG(CH3_DISCONNECT,TYPICAL, "Connection closed prematurely.");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT,TYPICAL, "Connection closed prematurely.");
MPIDI_CH3U_Complete_posted_with_error(vc);
++MPIDI_Failed_vc_count;
@@ -124,7 +124,7 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
outstanding sends or receives on either
side. */
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL, "Connection closed prematurely during close protocol. "
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL, "Connection closed prematurely during close protocol. "
"Outstanding close operations = %d", MPIDI_Outstanding_close_ops);
MPIDI_CH3U_Complete_posted_with_error(vc);
@@ -146,7 +146,7 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
default:
{
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL, "Unhandled connection state %d when closing connection",vc->state);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL, "Unhandled connection state %d when closing connection",vc->state);
mpi_errno = MPIR_Err_create_code(
MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__,
MPI_ERR_INTERN, "**ch3|unhandled_connection_state",
@@ -159,14 +159,14 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
/* FIXME: Decrement the reference count? Who increments? */
/* FIXME: The reference count is often already 0. But
not always */
- /* MPIU_Object_set_ref(vc, 0); ??? */
+ /* MPIR_Object_set_ref(vc, 0); ??? */
/*
* FIXME: The VC used in connect accept has a NULL
* process group
*/
/* XXX DJG FIXME-MT should we be checking this ref_count? */
- if (vc->pg != NULL && (MPIU_Object_get_ref(vc) == 0))
+ if (vc->pg != NULL && (MPIR_Object_get_ref(vc) == 0))
{
/* FIXME: Who increments the reference count that
this is decrementing? */
@@ -191,7 +191,7 @@ int MPIDI_CH3U_Handle_connection(MPIDI_VC_t * vc, MPIDI_VC_Event_t event)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_CONNECTION);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_CONNECTION);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -216,15 +216,15 @@ int MPIDI_CH3U_VC_SendClose( MPIDI_VC_t *vc, int rank )
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_close_t * close_pkt = &upkt.close;
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_VC_SENDCLOSE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_VC_SENDCLOSE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_VC_SENDCLOSE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_VC_SENDCLOSE);
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
- MPIU_Assert( vc->state == MPIDI_VC_STATE_ACTIVE ||
+ MPIR_Assert( vc->state == MPIDI_VC_STATE_ACTIVE ||
vc->state == MPIDI_VC_STATE_REMOTE_CLOSE );
MPIDI_Pkt_init(close_pkt, MPIDI_CH3_PKT_CLOSE);
@@ -233,7 +233,7 @@ int MPIDI_CH3U_VC_SendClose( MPIDI_VC_t *vc, int rank )
/* MT: this is not thread safe, the POBJ CS is scoped to the vc and
* doesn't protect this global correctly */
MPIDI_Outstanding_close_ops += 1;
- MPIU_DBG_MSG_FMT(CH3_DISCONNECT,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,(MPL_DBG_FDEST,
"sending close(%s) on vc (pg=%p) %p to rank %d, ops = %d",
close_pkt->ack ? "TRUE" : "FALSE", vc->pg, vc,
rank, MPIDI_Outstanding_close_ops));
@@ -248,7 +248,7 @@ int MPIDI_CH3U_VC_SendClose( MPIDI_VC_t *vc, int rank )
MPIDI_CHANGE_VC_STATE(vc, LOCAL_CLOSE);
}
else {
- MPIU_Assert( vc->state == MPIDI_VC_STATE_REMOTE_CLOSE );
+ MPIR_Assert( vc->state == MPIDI_VC_STATE_REMOTE_CLOSE );
MPIDI_CHANGE_VC_STATE(vc, CLOSE_ACKED);
}
@@ -258,13 +258,13 @@ int MPIDI_CH3U_VC_SendClose( MPIDI_VC_t *vc, int rank )
if (sreq != NULL) {
/* There is still another reference being held by the channel. It
will not be released until the pkt is actually sent. */
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
}
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_VC_SENDCLOSE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_VC_SENDCLOSE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -276,8 +276,8 @@ int MPIDI_CH3U_VC_SendClose( MPIDI_VC_t *vc, int rank )
#define FUNCNAME MPIDI_CH3_PktHandler_Close
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_close_t * close_pkt = &pkt->close;
int mpi_errno = MPI_SUCCESS;
@@ -286,12 +286,12 @@ int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_close_t * resp_pkt = &upkt.close;
- MPID_Request * resp_sreq;
+ MPIR_Request * resp_sreq;
MPIDI_Pkt_init(resp_pkt, MPIDI_CH3_PKT_CLOSE);
resp_pkt->ack = TRUE;
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL,"sending close(TRUE) to %d",
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,"sending close(TRUE) to %d",
vc->pg_rank);
mpi_errno = MPIDI_CH3_iStartMsg(vc, resp_pkt, sizeof(*resp_pkt), &resp_sreq);
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|send_close_ack");
@@ -300,7 +300,7 @@ int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
{
/* There is still another reference being held by the channel. It
will not be released until the pkt is actually sent. */
- MPID_Request_release(resp_sreq);
+ MPIR_Request_free(resp_sreq);
}
}
@@ -308,7 +308,7 @@ int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
{
if (vc->state == MPIDI_VC_STATE_LOCAL_CLOSE)
{
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,
"received close(FALSE) from %d, moving to CLOSE_ACKED.",
vc->pg_rank);
MPIDI_CHANGE_VC_STATE(vc, CLOSE_ACKED);
@@ -317,21 +317,21 @@ int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
{
if (vc->state != MPIDI_VC_STATE_ACTIVE)
{
- MPIU_DBG_MSG_FMT(CH3_DISCONNECT, TYPICAL, (MPIU_DBG_FDEST, "Unexpected state %s in vc %p (rank=%d) (expecting MPIDI_VC_STATE_ACTIVE)\n", MPIDI_VC_GetStateString(vc->state), vc, vc->pg_rank ));
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_DISCONNECT, TYPICAL, (MPL_DBG_FDEST, "Unexpected state %s in vc %p (rank=%d) (expecting MPIDI_VC_STATE_ACTIVE)\n", MPIDI_VC_GetStateString(vc->state), vc, vc->pg_rank ));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,
"received close(FALSE) from %d, moving to REMOTE_CLOSE.",
vc->pg_rank);
}
- MPIU_Assert(vc->state == MPIDI_VC_STATE_ACTIVE);
+ MPIR_Assert(vc->state == MPIDI_VC_STATE_ACTIVE);
MPIDI_CHANGE_VC_STATE(vc, REMOTE_CLOSE);
}
}
else /* (close_pkt->ack == TRUE) */
{
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,
"received close(TRUE) from %d, moving to CLOSED.",
vc->pg_rank);
- MPIU_Assert (vc->state == MPIDI_VC_STATE_LOCAL_CLOSE ||
+ MPIR_Assert (vc->state == MPIDI_VC_STATE_LOCAL_CLOSE ||
vc->state == MPIDI_VC_STATE_CLOSE_ACKED);
MPIDI_CHANGE_VC_STATE(vc, CLOSED);
/* For example, with sockets, Connection_terminate will close
@@ -339,7 +339,7 @@ int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
mpi_errno = MPIDI_CH3_Connection_terminate(vc);
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
fn_fail:
@@ -349,8 +349,8 @@ int MPIDI_CH3_PktHandler_Close( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#ifdef MPICH_DBG_OUTPUT
int MPIDI_CH3_PktPrint_Close( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_CLOSE\n"));
- MPIU_DBG_PRINTF((" ack ......... %s\n", pkt->close.ack ? "TRUE" : "FALSE"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_CLOSE\n");
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_OTHER,TERSE," ack ......... %s\n", pkt->close.ack ? "TRUE" : "FALSE");
return MPI_SUCCESS;
}
#endif
@@ -371,13 +371,13 @@ int MPIDI_CH3U_VC_WaitForClose( void )
{
MPID_Progress_state progress_state;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_VC_WAITFORCLOSE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_VC_WAITFORCLOSE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_VC_WAITFORCLOSE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_VC_WAITFORCLOSE);
MPID_Progress_start(&progress_state);
while(MPIDI_Outstanding_close_ops > 0) {
- MPIU_DBG_MSG_D(CH3_DISCONNECT,TYPICAL,
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,
"Waiting for %d close operations",
MPIDI_Outstanding_close_ops);
mpi_errno = MPID_Progress_wait(&progress_state);
@@ -390,7 +390,7 @@ int MPIDI_CH3U_VC_WaitForClose( void )
}
MPID_Progress_end(&progress_state);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_VC_WAITFORCLOSE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_VC_WAITFORCLOSE);
return mpi_errno;
}
@@ -398,13 +398,13 @@ int MPIDI_CH3U_VC_WaitForClose( void )
#define FUNCNAME terminate_failed_VCs
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int terminate_failed_VCs(MPID_Group *new_failed_group)
+static int terminate_failed_VCs(MPIR_Group *new_failed_group)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIDI_STATE_DECL(MPID_STATE_TERMINATE_FAILED_VCS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_TERMINATE_FAILED_VCS);
- MPIDI_FUNC_ENTER(MPID_STATE_TERMINATE_FAILED_VCS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_TERMINATE_FAILED_VCS);
for (i = 0; i < new_failed_group->size; ++i) {
MPIDI_VC_t *vc;
@@ -416,7 +416,7 @@ static int terminate_failed_VCs(MPID_Group *new_failed_group)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_TERMINATE_FAILED_VCS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_TERMINATE_FAILED_VCS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -435,7 +435,7 @@ static int terminate_failed_VCs(MPID_Group *new_failed_group)
/* There are three possible input values for `last_rank:
*
* < -1 = All failures regardless of acknowledgement
- * -1 (MPI_PROC_NULL) = No failures have been acknowledged yet (return MPID_Group_empty)
+ * -1 (MPI_PROC_NULL) = No failures have been acknowledged yet (return MPIR_Group_empty)
* >= 0 = The last failure acknowledged. All failures returned will have
* been acknowledged previously.
*/
@@ -443,27 +443,27 @@ static int terminate_failed_VCs(MPID_Group *new_failed_group)
#define FUNCNAME MPIDI_CH3U_Get_failed_group
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Get_failed_group(int last_rank, MPID_Group **failed_group)
+int MPIDI_CH3U_Get_failed_group(int last_rank, MPIR_Group **failed_group)
{
char *c;
int i, mpi_errno = MPI_SUCCESS, rank;
UT_array *failed_procs = NULL;
- MPID_Group *world_group;
- MPIDI_STATE_DECL(MPID_STATE_GET_FAILED_GROUP);
+ MPIR_Group *world_group;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_GET_FAILED_GROUP);
- MPIDI_FUNC_ENTER(MPID_STATE_GET_FAILED_GROUP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_GET_FAILED_GROUP);
- MPIU_DBG_MSG_D(CH3_OTHER, VERBOSE, "Getting failed group with %d as last acknowledged\n", last_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, VERBOSE, "Getting failed group with %d as last acknowledged\n", last_rank);
if (-1 == last_rank) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "No failure acknowledged");
- *failed_group = MPID_Group_empty;
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "No failure acknowledged");
+ *failed_group = MPIR_Group_empty;
goto fn_exit;
}
if (*MPIDI_failed_procs_string == '\0') {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "Found no failed ranks");
- *failed_group = MPID_Group_empty;
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "Found no failed ranks");
+ *failed_group = MPIR_Group_empty;
goto fn_exit;
}
@@ -476,7 +476,7 @@ int MPIDI_CH3U_Get_failed_group(int last_rank, MPID_Group **failed_group)
while(1) {
parse_rank(&rank);
++i;
- MPIU_DBG_MSG_D(CH3_OTHER, VERBOSE, "Found failed rank: %d", rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, VERBOSE, "Found failed rank: %d", rank);
utarray_push_back(failed_procs, &rank);
MPIDI_last_known_failed = rank;
MPIR_ERR_CHKINTERNAL(*c != ',' && *c != '\0', mpi_errno, "error parsing failed process list");
@@ -497,7 +497,7 @@ int MPIDI_CH3U_Get_failed_group(int last_rank, MPID_Group **failed_group)
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_GET_FAILED_GROUP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_GET_FAILED_GROUP);
if (failed_procs)
utarray_free(failed_procs);
return mpi_errno;
@@ -517,10 +517,10 @@ int MPIDI_CH3U_Check_for_failed_procs(void)
int pmi_errno;
int len;
char *kvsname;
- MPID_Group *prev_failed_group, *new_failed_group;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_CHECK_FOR_FAILED_PROCS);
+ MPIR_Group *prev_failed_group, *new_failed_group;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_CHECK_FOR_FAILED_PROCS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_CHECK_FOR_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_CHECK_FOR_FAILED_PROCS);
/* FIXME: Currently this only handles failed processes in
comm_world. We need to fix hydra to include the pgid along
@@ -543,11 +543,11 @@ int MPIDI_CH3U_Check_for_failed_procs(void)
if (*MPIDI_failed_procs_string == '\0') {
/* there are no failed processes */
- MPIDI_Failed_procs_group = MPID_Group_empty;
+ MPIDI_Failed_procs_group = MPIR_Group_empty;
goto fn_exit;
}
- MPIU_DBG_MSG_S(CH3_OTHER, TYPICAL, "Received proc fail notification: %s", MPIDI_failed_procs_string);
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_OTHER, TYPICAL, "Received proc fail notification: %s", MPIDI_failed_procs_string);
/* save reference to previous group so we can identify new failures */
prev_failed_group = MPIDI_Failed_procs_group;
@@ -559,7 +559,7 @@ int MPIDI_CH3U_Check_for_failed_procs(void)
mpi_errno = MPIR_Group_difference_impl(MPIDI_Failed_procs_group, prev_failed_group, &new_failed_group);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- if (new_failed_group != MPID_Group_empty) {
+ if (new_failed_group != MPIR_Group_empty) {
mpi_errno = MPIDI_CH3I_Comm_handle_failed_procs(new_failed_group);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
@@ -571,13 +571,13 @@ int MPIDI_CH3U_Check_for_failed_procs(void)
}
/* free prev group */
- if (prev_failed_group != MPID_Group_empty) {
+ if (prev_failed_group != MPIR_Group_empty) {
mpi_errno = MPIR_Group_release(prev_failed_group);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_CHECK_FOR_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_CHECK_FOR_FAILED_PROCS);
return mpi_errno;
fn_oom: /* out-of-memory handler for utarray operations */
diff --git a/src/mpid/ch3/src/ch3u_handle_op_req.c b/src/mpid/ch3/src/ch3u_handle_op_req.c
index 906d10f..7e83418 100644
--- a/src/mpid/ch3/src/ch3u_handle_op_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_op_req.c
@@ -12,28 +12,28 @@
#define FUNCNAME MPIDI_CH3_Req_handler_rma_op_complete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_Req_handler_rma_op_complete(MPID_Request * sreq)
+int MPIDI_CH3_Req_handler_rma_op_complete(MPIR_Request * sreq)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *ureq = NULL;
- MPID_Win *win_ptr = NULL;
+ MPIR_Request *ureq = NULL;
+ MPIR_Win *win_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE);
if (sreq->dev.rma_target_ptr != NULL) {
(sreq->dev.rma_target_ptr)->num_pkts_wait_for_local_completion--;
}
/* get window, decrement active request cnt on window */
- MPID_Win_get_ptr(sreq->dev.source_win_handle, win_ptr);
- MPIU_Assert(win_ptr != NULL);
+ MPIR_Win_get_ptr(sreq->dev.source_win_handle, win_ptr);
+ MPIR_Assert(win_ptr != NULL);
MPIDI_CH3I_RMA_Active_req_cnt--;
- MPIU_Assert(MPIDI_CH3I_RMA_Active_req_cnt >= 0);
+ MPIR_Assert(MPIDI_CH3I_RMA_Active_req_cnt >= 0);
if (sreq->dev.request_handle != MPI_REQUEST_NULL) {
/* get user request */
- MPID_Request_get_ptr(sreq->dev.request_handle, ureq);
+ MPIR_Request_get_ptr(sreq->dev.request_handle, ureq);
mpi_errno = MPID_Request_complete(ureq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -41,7 +41,7 @@ int MPIDI_CH3_Req_handler_rma_op_complete(MPID_Request * sreq)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQ_HANDLER_RMA_OP_COMPLETE);
return mpi_errno;
fn_fail:
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_pkt.c b/src/mpid/ch3/src/ch3u_handle_recv_pkt.c
index c069632..0041bda 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_pkt.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_pkt.c
@@ -52,21 +52,21 @@
#define FUNCNAME MPIDI_CH3U_Handle_ordered_recv_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Handle_ordered_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request ** rreqp)
+int MPIDI_CH3U_Handle_ordered_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t *buflen, MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
static MPIDI_CH3_PktHandler_Fcn *pktArray[MPIDI_CH3_PKT_END_CH3+1];
static int needsInit = 1;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT);
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,MPIDI_DBG_Print_packet(pkt));
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,MPIDI_DBG_Print_packet(pkt));
/* FIXME: We can turn this into something like
- MPIU_Assert(pkt->type <= MAX_PACKET_TYPE);
+ MPIR_Assert(pkt->type <= MAX_PACKET_TYPE);
mpi_errno = MPIDI_CH3_ProgressFunctions[pkt->type](vc,pkt,rreqp);
in the progress engine itself. Then this routine is not necessary.
@@ -77,10 +77,10 @@ int MPIDI_CH3U_Handle_ordered_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
needsInit = 0;
}
/* Packet type is an enum and hence >= 0 */
- MPIU_Assert(pkt->type <= MPIDI_CH3_PKT_END_CH3);
- mpi_errno = pktArray[pkt->type](vc, pkt, buflen, rreqp);
+ MPIR_Assert(pkt->type <= MPIDI_CH3_PKT_END_CH3);
+ mpi_errno = pktArray[pkt->type](vc, pkt, data, buflen, rreqp);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_ORDERED_RECV_PKT);
return mpi_errno;
}
@@ -102,19 +102,19 @@ int MPIDI_CH3U_Handle_ordered_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#define FUNCNAME MPIDI_CH3U_Receive_data_found
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t *buflen, int *complete)
+int MPIDI_CH3U_Receive_data_found(MPIR_Request *rreq, void *buf, intptr_t *buflen, int *complete)
{
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t userbuf_sz;
- MPID_Datatype * dt_ptr = NULL;
- MPIDI_msg_sz_t data_sz;
+ intptr_t userbuf_sz;
+ MPIDU_Datatype * dt_ptr = NULL;
+ intptr_t data_sz;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND);
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"posted request found");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"posted request found");
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype,
dt_contig, userbuf_sz, dt_ptr, dt_true_lb);
@@ -123,9 +123,9 @@ int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t
data_sz = rreq->dev.recv_data_sz;
}
else {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "receive buffer too small; message truncated, msg_sz=" MPIDI_MSG_SZ_FMT ", userbuf_sz="
- MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "receive buffer too small; message truncated, msg_sz=%" PRIdPTR ", userbuf_sz=%"
+ PRIdPTR,
rreq->dev.recv_data_sz, userbuf_sz));
rreq->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE,
@@ -146,17 +146,17 @@ int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t
now, otherwise build an iov and let the channel unpack */
if (*buflen >= data_sz)
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"Copying contiguous data to user buffer");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"Copying contiguous data to user buffer");
/* copy data out of the receive buffer */
if (rreq->dev.drop_data == FALSE) {
- MPIU_Memcpy((char*)(rreq->dev.user_buf) + dt_true_lb, buf, data_sz);
+ MPIR_Memcpy((char*)(rreq->dev.user_buf) + dt_true_lb, buf, data_sz);
}
*buflen = data_sz;
*complete = TRUE;
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"IOV loaded for contiguous read");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"IOV loaded for contiguous read");
rreq->dev.iov[0].MPL_IOV_BUF =
(MPL_IOV_BUF_CAST)((char*)(rreq->dev.user_buf) + dt_true_lb);
@@ -173,10 +173,10 @@ int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t
/* user buffer is not contiguous or is too small to hold
the entire message */
- rreq->dev.segment_ptr = MPID_Segment_alloc( );
- MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc( );
+ MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
rreq->dev.datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
@@ -186,10 +186,10 @@ int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t
iov and let the channel unpack */
if (data_sz == rreq->dev.recv_data_sz && *buflen >= data_sz)
{
- MPIDI_msg_sz_t last;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"Copying noncontiguous data to user buffer");
+ intptr_t last;
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"Copying noncontiguous data to user buffer");
last = data_sz;
- MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first,
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first,
&last, buf);
/* --BEGIN ERROR HANDLING-- */
if (last != data_sz)
@@ -212,7 +212,7 @@ int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"IOV loaded for non-contiguous read");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"IOV loaded for non-contiguous read");
mpi_errno = MPIDI_CH3U_Request_load_recv_iov(rreq);
if (mpi_errno != MPI_SUCCESS) {
@@ -225,7 +225,7 @@ int MPIDI_CH3U_Receive_data_found(MPID_Request *rreq, char *buf, MPIDI_msg_sz_t
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_FOUND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -235,20 +235,20 @@ fn_fail:
#define FUNCNAME MPIDI_CH3U_Receive_data_unexpected
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Receive_data_unexpected(MPID_Request * rreq, char *buf, MPIDI_msg_sz_t *buflen, int *complete)
+int MPIDI_CH3U_Receive_data_unexpected(MPIR_Request * rreq, void *buf, intptr_t *buflen, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED);
/* FIXME: to improve performance, allocate temporary buffer from a
specialized buffer pool. */
/* FIXME: to avoid memory exhaustion, integrate buffer pool management
with flow control */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"unexpected request allocated");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"unexpected request allocated");
- rreq->dev.tmpbuf = MPIU_Malloc(rreq->dev.recv_data_sz);
+ rreq->dev.tmpbuf = MPL_malloc(rreq->dev.recv_data_sz);
if (!rreq->dev.tmpbuf) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER,"**nomem","**nomem %d",
rreq->dev.recv_data_sz);
@@ -259,7 +259,7 @@ int MPIDI_CH3U_Receive_data_unexpected(MPID_Request * rreq, char *buf, MPIDI_msg
now, otherwise build an iov and let the channel copy it */
if (rreq->dev.recv_data_sz <= *buflen)
{
- MPIU_Memcpy(rreq->dev.tmpbuf, buf, rreq->dev.recv_data_sz);
+ MPIR_Memcpy(rreq->dev.tmpbuf, buf, rreq->dev.recv_data_sz);
*buflen = rreq->dev.recv_data_sz;
rreq->dev.recv_pending_count = 1;
*complete = TRUE;
@@ -280,7 +280,7 @@ int MPIDI_CH3U_Receive_data_unexpected(MPID_Request * rreq, char *buf, MPIDI_msg
rreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_UnpackUEBufComplete;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECEIVE_DATA_UNEXPECTED);
return mpi_errno;
}
@@ -293,19 +293,19 @@ int MPIDI_CH3U_Receive_data_unexpected(MPID_Request * rreq, char *buf, MPIDI_msg
#define FUNCNAME MPIDI_CH3U_Post_data_receive_found
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Post_data_receive_found(MPID_Request * rreq)
+int MPIDI_CH3U_Post_data_receive_found(MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t userbuf_sz;
- MPID_Datatype * dt_ptr = NULL;
- MPIDI_msg_sz_t data_sz;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND);
+ intptr_t userbuf_sz;
+ MPIDU_Datatype * dt_ptr = NULL;
+ intptr_t data_sz;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND);
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"posted request found");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"posted request found");
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype,
dt_contig, userbuf_sz, dt_ptr, dt_true_lb);
@@ -314,9 +314,9 @@ int MPIDI_CH3U_Post_data_receive_found(MPID_Request * rreq)
data_sz = rreq->dev.recv_data_sz;
}
else {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "receive buffer too small; message truncated, msg_sz=" MPIDI_MSG_SZ_FMT ", userbuf_sz="
- MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "receive buffer too small; message truncated, msg_sz=%" PRIdPTR ", userbuf_sz=%"
+ PRIdPTR,
rreq->dev.recv_data_sz, userbuf_sz));
rreq->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_TRUNCATE,
@@ -332,7 +332,7 @@ int MPIDI_CH3U_Post_data_receive_found(MPID_Request * rreq)
/* user buffer is contiguous and large enough to store the
entire message. However, we haven't yet *read* the data
(this code describes how to read the data into the destination) */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"IOV loaded for contiguous read");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"IOV loaded for contiguous read");
rreq->dev.iov[0].MPL_IOV_BUF =
(MPL_IOV_BUF_CAST)((char*)(rreq->dev.user_buf) + dt_true_lb);
rreq->dev.iov[0].MPL_IOV_LEN = data_sz;
@@ -345,10 +345,10 @@ int MPIDI_CH3U_Post_data_receive_found(MPID_Request * rreq)
else {
/* user buffer is not contiguous or is too small to hold
the entire message */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"IOV loaded for non-contiguous read");
- rreq->dev.segment_ptr = MPID_Segment_alloc( );
- MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"IOV loaded for non-contiguous read");
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc( );
+ MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
rreq->dev.datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = data_sz;
@@ -360,7 +360,7 @@ int MPIDI_CH3U_Post_data_receive_found(MPID_Request * rreq)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_FOUND);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -370,20 +370,20 @@ int MPIDI_CH3U_Post_data_receive_found(MPID_Request * rreq)
#define FUNCNAME MPIDI_CH3U_Post_data_receive_unexpected
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Post_data_receive_unexpected(MPID_Request * rreq)
+int MPIDI_CH3U_Post_data_receive_unexpected(MPIR_Request * rreq)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED);
/* FIXME: to improve performance, allocate temporary buffer from a
specialized buffer pool. */
/* FIXME: to avoid memory exhaustion, integrate buffer pool management
with flow control */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"unexpected request allocated");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"unexpected request allocated");
- rreq->dev.tmpbuf = MPIU_Malloc(rreq->dev.recv_data_sz);
+ rreq->dev.tmpbuf = MPL_malloc(rreq->dev.recv_data_sz);
if (!rreq->dev.tmpbuf) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER,"**nomem","**nomem %d",
rreq->dev.recv_data_sz);
@@ -397,7 +397,7 @@ int MPIDI_CH3U_Post_data_receive_unexpected(MPID_Request * rreq)
rreq->dev.recv_pending_count = 2;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_POST_DATA_RECEIVE_UNEXPECTED);
return mpi_errno;
}
@@ -413,12 +413,12 @@ int MPIDI_CH3U_Post_data_receive_unexpected(MPID_Request * rreq)
#define FUNCNAME MPIDI_CH3I_Try_acquire_win_lock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Try_acquire_win_lock(MPID_Win *win_ptr, int requested_lock)
+int MPIDI_CH3I_Try_acquire_win_lock(MPIR_Win *win_ptr, int requested_lock)
{
int existing_lock;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
existing_lock = win_ptr->current_lock_type;
@@ -446,12 +446,12 @@ int MPIDI_CH3I_Try_acquire_win_lock(MPID_Win *win_ptr, int requested_lock)
if (requested_lock == MPI_LOCK_SHARED)
win_ptr->shared_lock_ref_cnt++;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
return 1;
}
else {
/* do not grant lock */
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK);
return 0;
}
}
@@ -483,10 +483,10 @@ int MPIDI_CH3I_Try_acquire_win_lock(MPID_Win *win_ptr, int requested_lock)
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3_PktHandler_FlowCntlUpdate
#undef FCNAME
-int MPIDI_CH3_PktHandler_FlowCntlUpdate( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+int MPIDI_CH3_PktHandler_FlowCntlUpdate( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp)
{
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
return MPI_SUCCESS;
}
@@ -497,14 +497,15 @@ int MPIDI_CH3_PktHandler_FlowCntlUpdate( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_EndCH3( MPIDI_VC_t *vc ATTRIBUTE((unused)),
MPIDI_CH3_Pkt_t *pkt ATTRIBUTE((unused)),
- MPIDI_msg_sz_t *buflen ATTRIBUTE((unused)),
- MPID_Request **rreqp ATTRIBUTE((unused)) )
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen ATTRIBUTE((unused)),
+ MPIR_Request **rreqp ATTRIBUTE((unused)) )
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_ENDCH3);
return MPI_SUCCESS;
}
@@ -527,9 +528,9 @@ int MPIDI_CH3_PktHandler_Init( MPIDI_CH3_PktHandler_Fcn *pktArray[],
int arraySize )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT);
/* Check that the array is large enough */
if (arraySize < MPIDI_CH3_PKT_END_CH3) {
@@ -563,6 +564,13 @@ int MPIDI_CH3_PktHandler_Init( MPIDI_CH3_PktHandler_Fcn *pktArray[],
pktArray[MPIDI_CH3_PKT_CLOSE] =
MPIDI_CH3_PktHandler_Close;
+#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
+ /* Dynamic Connection Management */
+ pktArray[MPIDI_CH3_PKT_CONN_ACK] =
+ MPIDI_CH3_PktHandler_ConnAck;
+ pktArray[MPIDI_CH3_PKT_ACCEPT_ACK] =
+ MPIDI_CH3_PktHandler_AcceptAck;
+#endif
/* Provision for flow control */
pktArray[MPIDI_CH3_PKT_FLOW_CNTL_UPDATE] = 0;
@@ -626,7 +634,7 @@ int MPIDI_CH3_PktHandler_Init( MPIDI_CH3_PktHandler_Fcn *pktArray[],
MPIDI_CH3_PktHandler_Revoke;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_INIT);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_req.c b/src/mpid/ch3/src/ch3u_handle_recv_req.c
index 9973d89..de738fe 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_req.c
@@ -7,28 +7,28 @@
#include "mpidimpl.h"
#include "mpidrma.h"
-static int create_derived_datatype(MPID_Request * req, MPIDI_RMA_dtype_info * dtype_info,
- MPID_Datatype ** dtp);
+static int create_derived_datatype(MPIR_Request * req, MPIDI_RMA_dtype_info * dtype_info,
+ MPIDU_Datatype** dtp);
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3U_Handle_recv_req
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Handle_recv_req(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3U_Handle_recv_req(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
static int in_routine ATTRIBUTE((unused)) = FALSE;
int mpi_errno = MPI_SUCCESS;
- int (*reqFn) (MPIDI_VC_t *, MPID_Request *, int *);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_RECV_REQ);
+ int (*reqFn) (MPIDI_VC_t *, MPIR_Request *, int *);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_RECV_REQ);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_RECV_REQ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_RECV_REQ);
- MPIU_Assert(in_routine == FALSE);
+ MPIR_Assert(in_routine == FALSE);
in_routine = TRUE;
reqFn = rreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_RECV);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_RECV);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -42,7 +42,7 @@ int MPIDI_CH3U_Handle_recv_req(MPIDI_VC_t * vc, MPID_Request * rreq, int *comple
in_routine = FALSE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_RECV_REQ);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_RECV_REQ);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -55,7 +55,7 @@ int MPIDI_CH3U_Handle_recv_req(MPIDI_VC_t * vc, MPID_Request * rreq, int *comple
*
* The convention for the names of routines that are called when data is
* available is
- * MPIDI_CH3_ReqHandler_<type>(MPIDI_VC_t *, MPID_Request *, int *)
+ * MPIDI_CH3_ReqHandler_<type>(MPIDI_VC_t *, MPIR_Request *, int *)
* as in
* MPIDI_CH3_ReqHandler_...
*
@@ -68,7 +68,7 @@ int MPIDI_CH3U_Handle_recv_req(MPIDI_VC_t * vc, MPID_Request * rreq, int *comple
*/
/* ----------------------------------------------------------------------- */
int MPIDI_CH3_ReqHandler_RecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
@@ -90,15 +90,15 @@ int MPIDI_CH3_ReqHandler_RecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#define FUNCNAME MPIDI_CH3_ReqHandler_PutRecvComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_PutRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_PutRecvComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
MPI_Win source_win_handle = rreq->dev.source_win_handle;
MPIDI_CH3_Pkt_flags_t flags = rreq->dev.flags;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTRECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTRECVCOMPLETE);
/* NOTE: It is possible that this request is already completed before
* entering this handler. This happens when this req handler is called
@@ -113,12 +113,12 @@ int MPIDI_CH3_ReqHandler_PutRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
* which leads to wrong execution.
* Here we check if req is already completed to prevent processing the
* same request twice. */
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
*complete = FALSE;
goto fn_exit;
}
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
/* mark data transfer as complete and decrement CC */
mpi_errno = MPID_Request_complete(rreq);
@@ -138,7 +138,7 @@ int MPIDI_CH3_ReqHandler_PutRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTRECVCOMPLETE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -152,18 +152,18 @@ int MPIDI_CH3_ReqHandler_PutRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
#define FUNCNAME MPIDI_CH3_ReqHandler_AccumRecvComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
MPI_Win source_win_handle = rreq->dev.source_win_handle;
MPIDI_CH3_Pkt_flags_t flags = rreq->dev.flags;
MPI_Datatype basic_type;
MPI_Aint predef_count, predef_dtp_size;
MPI_Aint stream_offset;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
/* NOTE: It is possible that this request is already completed before
* entering this handler. This happens when this req handler is called
@@ -178,25 +178,25 @@ int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq,
* which leads to wrong execution.
* Here we check if req is already completed to prevent processing the
* same request twice. */
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
*complete = FALSE;
goto fn_exit;
}
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
- MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_ACCUM_RECV);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_ACCUM_RECV);
if (MPIR_DATATYPE_IS_PREDEFINED(rreq->dev.datatype))
basic_type = rreq->dev.datatype;
else {
basic_type = rreq->dev.datatype_ptr->basic_type;
}
- MPIU_Assert(basic_type != MPI_DATATYPE_NULL);
+ MPIR_Assert(basic_type != MPI_DATATYPE_NULL);
- MPID_Datatype_get_size_macro(basic_type, predef_dtp_size);
+ MPIDU_Datatype_get_size_macro(basic_type, predef_dtp_size);
predef_count = rreq->dev.recv_data_sz / predef_dtp_size;
- MPIU_Assert(predef_count > 0);
+ MPIR_Assert(predef_count > 0);
stream_offset = 0;
MPIDI_CH3_ExtPkt_Accum_get_stream(flags,
@@ -206,7 +206,7 @@ int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq,
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
/* accumulate data from tmp_buf into user_buf */
- MPIU_Assert(predef_count == (int) predef_count);
+ MPIR_Assert(predef_count == (int) predef_count);
mpi_errno = do_accumulate_op(rreq->dev.user_buf, (int) predef_count, basic_type,
rreq->dev.real_user_buf, rreq->dev.user_count, rreq->dev.datatype,
stream_offset, rreq->dev.op);
@@ -237,7 +237,7 @@ int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq,
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -251,13 +251,13 @@ int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq,
#define FUNCNAME MPIDI_CH3_ReqHandler_GaccumRecvComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_get_accum_resp_t *get_accum_resp_pkt = &upkt.get_accum_resp;
- MPID_Request *resp_req;
+ MPIR_Request *resp_req;
MPL_IOV iov[MPL_IOV_LIMIT];
int iovcnt;
int is_contig;
@@ -268,24 +268,24 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
int is_empty_origin = FALSE;
MPI_Aint extent, type_size;
MPI_Aint stream_data_len, total_len;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
/* Judge if origin buffer is empty */
if (rreq->dev.op == MPI_NO_OP) {
is_empty_origin = TRUE;
}
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
if (MPIR_DATATYPE_IS_PREDEFINED(rreq->dev.datatype))
basic_type = rreq->dev.datatype;
else {
basic_type = rreq->dev.datatype_ptr->basic_type;
}
- MPIU_Assert(basic_type != MPI_DATATYPE_NULL);
+ MPIR_Assert(basic_type != MPI_DATATYPE_NULL);
stream_offset = 0;
MPIDI_CH3_ExtPkt_Gaccum_get_stream(rreq->dev.flags,
@@ -293,15 +293,15 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
rreq->dev.ext_hdr_ptr, &stream_offset);
/* Use target data to calculate current stream unit size */
- MPID_Datatype_get_size_macro(rreq->dev.datatype, type_size);
+ MPIDU_Datatype_get_size_macro(rreq->dev.datatype, type_size);
total_len = type_size * rreq->dev.user_count;
- MPID_Datatype_get_size_macro(basic_type, predef_dtp_size);
- MPID_Datatype_get_extent_macro(basic_type, extent);
- stream_data_len = MPIR_MIN(total_len - (stream_offset / extent) * predef_dtp_size,
+ MPIDU_Datatype_get_size_macro(basic_type, predef_dtp_size);
+ MPIDU_Datatype_get_extent_macro(basic_type, extent);
+ stream_data_len = MPL_MIN(total_len - (stream_offset / extent) * predef_dtp_size,
(MPIDI_CH3U_SRBuf_size / extent) * predef_dtp_size);
predef_count = stream_data_len / predef_dtp_size;
- MPIU_Assert(predef_count > 0);
+ MPIR_Assert(predef_count > 0);
MPIDI_Pkt_init(get_accum_resp_pkt, MPIDI_CH3_PKT_GET_ACCUM_RESP);
get_accum_resp_pkt->request_handle = rreq->dev.resp_request_handle;
@@ -315,15 +315,15 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
get_accum_resp_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_ACK;
/* check if data is contiguous and get true lb */
- MPID_Datatype_is_contig(rreq->dev.datatype, &is_contig);
- MPID_Datatype_get_true_lb(rreq->dev.datatype, &dt_true_lb);
+ MPIDU_Datatype_is_contig(rreq->dev.datatype, &is_contig);
+ MPIDU_Datatype_get_true_lb(rreq->dev.datatype, &dt_true_lb);
- resp_req = MPID_Request_create();
+ resp_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(resp_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- MPIU_Object_set_ref(resp_req, 1);
+ MPIR_Object_set_ref(resp_req, 1);
MPIDI_Request_set_type(resp_req, MPIDI_REQUEST_TYPE_GET_ACCUM_RESP);
- MPIU_CHKPMEM_MALLOC(resp_req->dev.user_buf, void *, stream_data_len,
+ MPIR_CHKPMEM_MALLOC(resp_req->dev.user_buf, void *, stream_data_len,
mpi_errno, "GACC resp. buffer");
/* NOTE: 'copy data + ACC' needs to be atomic */
@@ -334,12 +334,12 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
/* Copy data from target window to temporary buffer */
if (is_contig) {
- MPIU_Memcpy(resp_req->dev.user_buf,
+ MPIR_Memcpy(resp_req->dev.user_buf,
(void *) ((char *) rreq->dev.real_user_buf + dt_true_lb +
stream_offset), stream_data_len);
}
else {
- MPID_Segment *seg = MPID_Segment_alloc();
+ MPIDU_Segment *seg = MPIDU_Segment_alloc();
MPI_Aint first = stream_offset;
MPI_Aint last = first + stream_data_len;
@@ -348,15 +348,15 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
}
MPIR_ERR_CHKANDJUMP1(seg == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
- "MPID_Segment");
- MPID_Segment_init(rreq->dev.real_user_buf, rreq->dev.user_count, rreq->dev.datatype, seg,
+ "MPIDU_Segment");
+ MPIDU_Segment_init(rreq->dev.real_user_buf, rreq->dev.user_count, rreq->dev.datatype, seg,
0);
- MPID_Segment_pack(seg, first, &last, resp_req->dev.user_buf);
- MPID_Segment_free(seg);
+ MPIDU_Segment_pack(seg, first, &last, resp_req->dev.user_buf);
+ MPIDU_Segment_free(seg);
}
/* accumulate data from tmp_buf into user_buf */
- MPIU_Assert(predef_count == (int) predef_count);
+ MPIR_Assert(predef_count == (int) predef_count);
mpi_errno = do_accumulate_op(rreq->dev.user_buf, (int) predef_count, basic_type,
rreq->dev.real_user_buf, rreq->dev.user_count, rreq->dev.datatype,
stream_offset, rreq->dev.op);
@@ -391,7 +391,7 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
/* Mark get portion as handled */
rreq->dev.resp_request_handle = MPI_REQUEST_NULL;
- MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
if (is_empty_origin == FALSE) {
/* free the temporary buffer.
@@ -408,13 +408,13 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
*complete = TRUE;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -424,47 +424,47 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
#define FUNCNAME MPIDI_CH3_ReqHandler_FOPRecvComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_FOPRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_FOPRecvComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
MPI_Aint type_size;
- MPID_Request *resp_req = NULL;
+ MPIR_Request *resp_req = NULL;
MPL_IOV iov[MPL_IOV_LIMIT];
int iovcnt;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_fop_resp_t *fop_resp_pkt = &upkt.fop_resp;
int is_contig;
int is_empty_origin = FALSE;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPRECVCOMPLETE);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPRECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPRECVCOMPLETE);
/* Judge if origin buffer is empty */
if (rreq->dev.op == MPI_NO_OP) {
is_empty_origin = TRUE;
}
- MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_FOP_RECV);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_FOP_RECV);
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
- MPID_Datatype_get_size_macro(rreq->dev.datatype, type_size);
+ MPIDU_Datatype_get_size_macro(rreq->dev.datatype, type_size);
- MPID_Datatype_is_contig(rreq->dev.datatype, &is_contig);
+ MPIDU_Datatype_is_contig(rreq->dev.datatype, &is_contig);
/* Create response request */
- resp_req = MPID_Request_create();
+ resp_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(resp_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
MPIDI_Request_set_type(resp_req, MPIDI_REQUEST_TYPE_FOP_RESP);
- MPIU_Object_set_ref(resp_req, 1);
+ MPIR_Object_set_ref(resp_req, 1);
resp_req->dev.OnFinal = MPIDI_CH3_ReqHandler_FOPSendComplete;
resp_req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_FOPSendComplete;
resp_req->dev.target_win_handle = rreq->dev.target_win_handle;
resp_req->dev.flags = rreq->dev.flags;
- MPIU_CHKPMEM_MALLOC(resp_req->dev.user_buf, void *, type_size, mpi_errno, "FOP resp. buffer");
+ MPIR_CHKPMEM_MALLOC(resp_req->dev.user_buf, void *, type_size, mpi_errno, "FOP resp. buffer");
/* here we increment the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
@@ -477,10 +477,10 @@ int MPIDI_CH3_ReqHandler_FOPRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
/* Copy data into a temporary buffer in response request */
if (is_contig) {
- MPIU_Memcpy(resp_req->dev.user_buf, rreq->dev.real_user_buf, type_size);
+ MPIR_Memcpy(resp_req->dev.user_buf, rreq->dev.real_user_buf, type_size);
}
else {
- MPID_Segment *seg = MPID_Segment_alloc();
+ MPIDU_Segment *seg = MPIDU_Segment_alloc();
MPI_Aint last = type_size;
if (seg == NULL) {
@@ -488,10 +488,10 @@ int MPIDI_CH3_ReqHandler_FOPRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
}
MPIR_ERR_CHKANDJUMP1(seg == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
- "MPID_Segment");
- MPID_Segment_init(rreq->dev.real_user_buf, 1, rreq->dev.datatype, seg, 0);
- MPID_Segment_pack(seg, 0, &last, resp_req->dev.user_buf);
- MPID_Segment_free(seg);
+ "MPIDU_Segment");
+ MPIDU_Segment_init(rreq->dev.real_user_buf, 1, rreq->dev.datatype, seg, 0);
+ MPIDU_Segment_pack(seg, 0, &last, resp_req->dev.user_buf);
+ MPIDU_Segment_free(seg);
}
/* Perform accumulate computation */
@@ -532,7 +532,7 @@ int MPIDI_CH3_ReqHandler_FOPRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
/* free the temporary buffer.
* When origin data is zero, there
* is no temporary buffer allocated */
- MPIU_Free((char *) rreq->dev.user_buf);
+ MPL_free((char *) rreq->dev.user_buf);
}
/* mark data transfer as complete and decrement CC */
@@ -544,12 +544,12 @@ int MPIDI_CH3_ReqHandler_FOPRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
*complete = TRUE;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPRECVCOMPLETE);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPRECVCOMPLETE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -560,14 +560,14 @@ int MPIDI_CH3_ReqHandler_FOPRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *new_dtp = NULL;
+ MPIDU_Datatype*new_dtp = NULL;
MPIDI_RMA_dtype_info *dtype_info = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTDERIVEDDTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTDERIVEDDTRECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTDERIVEDDTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTDERIVEDDTRECVCOMPLETE);
/* get data from extended header */
dtype_info = &((MPIDI_CH3_Ext_pkt_put_derived_t *) rreq->dev.ext_hdr_ptr)->dtype_info;
@@ -581,11 +581,11 @@ int MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unu
rreq->dev.datatype_ptr = new_dtp;
- rreq->dev.segment_ptr = MPID_Segment_alloc();
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
+ "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf,
+ MPIDU_Segment_init(rreq->dev.user_buf,
rreq->dev.user_count, rreq->dev.datatype, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = rreq->dev.recv_data_sz;
@@ -599,7 +599,7 @@ int MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unu
*complete = FALSE;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTDERIVEDDTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTDERIVEDDTRECVCOMPLETE);
return mpi_errno;
}
@@ -608,22 +608,22 @@ int MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unu
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *new_dtp = NULL;
+ MPIDU_Datatype*new_dtp = NULL;
MPIDI_RMA_dtype_info *dtype_info = NULL;
MPI_Aint basic_type_extent, basic_type_size;
MPI_Aint total_len, rest_len, stream_elem_count;
MPI_Aint stream_offset;
MPI_Aint type_size;
MPI_Datatype basic_dtp;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
stream_offset = 0;
- MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
+ MPIR_Assert(rreq->dev.ext_hdr_ptr != NULL);
if (MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_ACCUM_RECV_DERIVED_DT) {
/* get data from extended header */
@@ -645,7 +645,7 @@ int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((un
/* update new request to get the data */
MPIDI_Request_set_type(rreq, MPIDI_REQUEST_TYPE_ACCUM_RECV);
- MPIU_Assert(rreq->dev.datatype == MPI_DATATYPE_NULL);
+ MPIR_Assert(rreq->dev.datatype == MPI_DATATYPE_NULL);
rreq->dev.datatype = new_dtp->handle;
rreq->dev.datatype_ptr = new_dtp;
@@ -654,8 +654,8 @@ int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((un
basic_dtp = new_dtp->basic_type;
}
else {
- MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_ACCUM_RECV);
- MPIU_Assert(rreq->dev.datatype != MPI_DATATYPE_NULL);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_ACCUM_RECV);
+ MPIR_Assert(rreq->dev.datatype != MPI_DATATYPE_NULL);
/* get data from extended header */
if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
@@ -664,20 +664,20 @@ int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((un
stream_offset = ext_hdr->stream_offset;
}
- MPID_Datatype_get_size_macro(rreq->dev.datatype, type_size);
+ MPIDU_Datatype_get_size_macro(rreq->dev.datatype, type_size);
basic_dtp = rreq->dev.datatype;
}
- MPID_Datatype_get_size_macro(basic_dtp, basic_type_size);
- MPID_Datatype_get_extent_macro(basic_dtp, basic_type_extent);
+ MPIDU_Datatype_get_size_macro(basic_dtp, basic_type_size);
+ MPIDU_Datatype_get_extent_macro(basic_dtp, basic_type_extent);
- MPIU_Assert(!MPIDI_Request_get_srbuf_flag(rreq));
+ MPIR_Assert(!MPIDI_Request_get_srbuf_flag(rreq));
/* allocate a SRBuf for receiving stream unit */
MPIDI_CH3U_SRBuf_alloc(rreq, MPIDI_CH3U_SRBuf_size);
/* --BEGIN ERROR HANDLING-- */
if (rreq->dev.tmpbuf_sz == 0) {
- MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, TYPICAL, "SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
"**nomem %d", MPIDI_CH3U_SRBuf_size);
@@ -692,13 +692,13 @@ int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((un
rest_len = total_len - stream_offset;
stream_elem_count = MPIDI_CH3U_SRBuf_size / basic_type_extent;
- rreq->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * basic_type_size);
+ rreq->dev.recv_data_sz = MPL_MIN(rest_len, stream_elem_count * basic_type_size);
- rreq->dev.segment_ptr = MPID_Segment_alloc();
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
+ "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf,
+ MPIDU_Segment_init(rreq->dev.user_buf,
(rreq->dev.recv_data_sz / basic_type_size),
basic_dtp, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
@@ -713,7 +713,7 @@ int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((un
*complete = FALSE;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
return mpi_errno;
}
@@ -723,10 +723,10 @@ int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((un
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *new_dtp = NULL;
+ MPIDU_Datatype*new_dtp = NULL;
MPIDI_RMA_dtype_info *dtype_info = NULL;
MPI_Aint basic_type_extent, basic_type_size;
MPI_Aint total_len, rest_len, stream_elem_count;
@@ -734,9 +734,9 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
MPI_Aint type_size;
MPI_Datatype basic_dtp;
int is_empty_origin = FALSE;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
/* Judge if origin buffer is empty */
if (rreq->dev.op == MPI_NO_OP) {
@@ -744,7 +744,7 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
}
stream_offset = 0;
- MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
+ MPIR_Assert(rreq->dev.ext_hdr_ptr != NULL);
if (MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_GET_ACCUM_RECV_DERIVED_DT) {
/* get data from extended header */
@@ -766,7 +766,7 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
/* update new request to get the data */
MPIDI_Request_set_type(rreq, MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
- MPIU_Assert(rreq->dev.datatype == MPI_DATATYPE_NULL);
+ MPIR_Assert(rreq->dev.datatype == MPI_DATATYPE_NULL);
rreq->dev.datatype = new_dtp->handle;
rreq->dev.datatype_ptr = new_dtp;
@@ -775,8 +775,8 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
basic_dtp = new_dtp->basic_type;
}
else {
- MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
- MPIU_Assert(rreq->dev.datatype != MPI_DATATYPE_NULL);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
+ MPIR_Assert(rreq->dev.datatype != MPI_DATATYPE_NULL);
/* get data from extended header */
if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
@@ -785,7 +785,7 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
stream_offset = ext_hdr->stream_offset;
}
- MPID_Datatype_get_size_macro(rreq->dev.datatype, type_size);
+ MPIDU_Datatype_get_size_macro(rreq->dev.datatype, type_size);
basic_dtp = rreq->dev.datatype;
}
@@ -799,15 +799,15 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
MPIR_ERR_POP(mpi_errno);
}
else {
- MPID_Datatype_get_size_macro(basic_dtp, basic_type_size);
- MPID_Datatype_get_extent_macro(basic_dtp, basic_type_extent);
+ MPIDU_Datatype_get_size_macro(basic_dtp, basic_type_size);
+ MPIDU_Datatype_get_extent_macro(basic_dtp, basic_type_extent);
- MPIU_Assert(!MPIDI_Request_get_srbuf_flag(rreq));
+ MPIR_Assert(!MPIDI_Request_get_srbuf_flag(rreq));
/* allocate a SRBuf for receiving stream unit */
MPIDI_CH3U_SRBuf_alloc(rreq, MPIDI_CH3U_SRBuf_size);
/* --BEGIN ERROR HANDLING-- */
if (rreq->dev.tmpbuf_sz == 0) {
- MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, TYPICAL, "SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
"**nomem %d", MPIDI_CH3U_SRBuf_size);
@@ -822,13 +822,13 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
rest_len = total_len - stream_offset;
stream_elem_count = MPIDI_CH3U_SRBuf_size / basic_type_extent;
- rreq->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * basic_type_size);
+ rreq->dev.recv_data_sz = MPL_MIN(rest_len, stream_elem_count * basic_type_size);
- rreq->dev.segment_ptr = MPID_Segment_alloc();
+ rreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
+ "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(rreq->dev.user_buf,
+ MPIDU_Segment_init(rreq->dev.user_buf,
(rreq->dev.recv_data_sz / basic_type_size),
basic_dtp, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
@@ -845,7 +845,7 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
return mpi_errno;
}
@@ -856,22 +856,22 @@ int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(MPIDI_VC_t * vc,
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *new_dtp = NULL;
+ MPIDU_Datatype*new_dtp = NULL;
MPIDI_RMA_dtype_info *dtype_info = NULL;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_get_resp_t *get_resp_pkt = &upkt.get_resp;
- MPID_Request *sreq;
- MPID_Win *win_ptr;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GETDERIVEDDTRECVCOMPLETE);
+ MPIR_Request *sreq;
+ MPIR_Win *win_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GETDERIVEDDTRECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GETDERIVEDDTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GETDERIVEDDTRECVCOMPLETE);
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
- MPIU_Assert(!(rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP));
+ MPIR_Assert(!(rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP));
/* get data from extended header */
dtype_info = &((MPIDI_CH3_Ext_pkt_get_derived_t *) rreq->dev.ext_hdr_ptr)->dtype_info;
@@ -879,10 +879,10 @@ int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(MPIDI_VC_t * vc,
create_derived_datatype(rreq, dtype_info, &new_dtp);
/* create request for sending data */
- sreq = MPID_Request_create();
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(sreq == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- sreq->kind = MPID_REQUEST_SEND;
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_GET_RESP);
sreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GetSendComplete;
sreq->dev.OnFinal = MPIDI_CH3_ReqHandler_GetSendComplete;
@@ -904,11 +904,11 @@ int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(MPIDI_VC_t * vc,
(rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_UNLOCK))
get_resp_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_ACK;
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Segment_alloc");
+ "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(sreq->dev.user_buf,
+ MPIDU_Segment_init(sreq->dev.user_buf,
sreq->dev.user_count, sreq->dev.datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = new_dtp->size * sreq->dev.user_count;
@@ -919,7 +919,7 @@ int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(MPIDI_VC_t * vc,
/* MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex); */
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
sreq = NULL;
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
@@ -935,7 +935,7 @@ int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(MPIDI_VC_t * vc,
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GETDERIVEDDTRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GETDERIVEDDTRECVCOMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -947,20 +947,20 @@ int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(MPIDI_VC_t * vc,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_UnpackUEBufComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int recv_pending;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKUEBUFCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKUEBUFCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKUEBUFCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKUEBUFCOMPLETE);
MPIDI_Request_decr_pending(rreq);
MPIDI_Request_check_pending(rreq, &recv_pending);
if (!recv_pending) {
if (rreq->dev.recv_data_sz > 0) {
MPIDI_CH3U_Request_unpack_uebuf(rreq);
- MPIU_Free(rreq->dev.tmpbuf);
+ MPL_free(rreq->dev.tmpbuf);
}
}
else {
@@ -977,7 +977,7 @@ int MPIDI_CH3_ReqHandler_UnpackUEBufComplete(MPIDI_VC_t * vc ATTRIBUTE((unused))
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKUEBUFCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKUEBUFCOMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -987,12 +987,12 @@ int MPIDI_CH3_ReqHandler_UnpackUEBufComplete(MPIDI_VC_t * vc ATTRIBUTE((unused))
#define FUNCNAME MPIDI_CH3_ReqHandler_UnpackSRBufComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_UnpackSRBufComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_UnpackSRBufComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFCOMPLETE);
MPIDI_CH3U_Request_unpack_srbuf(rreq);
@@ -1019,7 +1019,7 @@ int MPIDI_CH3_ReqHandler_UnpackSRBufComplete(MPIDI_VC_t * vc, MPID_Request * rre
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFCOMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1030,12 +1030,12 @@ int MPIDI_CH3_ReqHandler_UnpackSRBufComplete(MPIDI_VC_t * vc, MPID_Request * rre
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_UnpackSRBufReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFRELOADIOV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFRELOADIOV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFRELOADIOV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFRELOADIOV);
MPIDI_CH3U_Request_unpack_srbuf(rreq);
mpi_errno = MPIDI_CH3U_Request_load_recv_iov(rreq);
@@ -1044,7 +1044,7 @@ int MPIDI_CH3_ReqHandler_UnpackSRBufReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)
}
*complete = FALSE;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFRELOADIOV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_UNPACKSRBUFRELOADIOV);
return mpi_errno;
}
@@ -1053,12 +1053,12 @@ int MPIDI_CH3_ReqHandler_UnpackSRBufReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_ReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_RELOADIOV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_RELOADIOV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_RELOADIOV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_RELOADIOV);
mpi_errno = MPIDI_CH3U_Request_load_recv_iov(rreq);
if (mpi_errno != MPI_SUCCESS) {
@@ -1066,7 +1066,7 @@ int MPIDI_CH3_ReqHandler_ReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)),
}
*complete = FALSE;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_RELOADIOV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_RELOADIOV);
return mpi_errno;
}
@@ -1077,27 +1077,27 @@ int MPIDI_CH3_ReqHandler_ReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#define FUNCNAME create_derived_datatype
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int create_derived_datatype(MPID_Request * req, MPIDI_RMA_dtype_info * dtype_info,
- MPID_Datatype ** dtp)
+static int create_derived_datatype(MPIR_Request * req, MPIDI_RMA_dtype_info * dtype_info,
+ MPIDU_Datatype** dtp)
{
- MPID_Datatype *new_dtp;
+ MPIDU_Datatype*new_dtp;
int mpi_errno = MPI_SUCCESS;
MPI_Aint ptrdiff;
- MPIDI_STATE_DECL(MPID_STATE_CREATE_DERIVED_DATATYPE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CREATE_DERIVED_DATATYPE);
- MPIDI_FUNC_ENTER(MPID_STATE_CREATE_DERIVED_DATATYPE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CREATE_DERIVED_DATATYPE);
/* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
+ new_dtp = (MPIDU_Datatype*) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
if (!new_dtp) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
- "MPID_Datatype_mem");
+ "MPIDU_Datatype_mem");
}
*dtp = new_dtp;
- /* Note: handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
+ /* Note: handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
new_dtp->is_permanent = 0;
new_dtp->is_committed = 1;
new_dtp->attributes = 0;
@@ -1126,38 +1126,38 @@ static int create_derived_datatype(MPID_Request * req, MPIDI_RMA_dtype_info * dt
/* FIXME: Temp to avoid SEGV when memory tracing */
new_dtp->hetero_dloop = 0;
- MPID_Dataloop_update(new_dtp->dataloop, ptrdiff);
+ MPIDU_Dataloop_update(new_dtp->dataloop, ptrdiff);
new_dtp->contents = NULL;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_CREATE_DERIVED_DATATYPE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CREATE_DERIVED_DATATYPE);
return mpi_errno;
}
-static inline int perform_put_in_lock_queue(MPID_Win * win_ptr,
+static inline int perform_put_in_lock_queue(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t * target_lock_entry)
{
MPIDI_CH3_Pkt_put_t *put_pkt = &((target_lock_entry->pkt).put);
int mpi_errno = MPI_SUCCESS;
/* Piggyback candidate should have basic datatype for target datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(put_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(put_pkt->datatype));
/* Make sure that all data is received for this op. */
- MPIU_Assert(target_lock_entry->all_data_recved == 1);
+ MPIR_Assert(target_lock_entry->all_data_recved == 1);
if (put_pkt->type == MPIDI_CH3_PKT_PUT_IMMED) {
/* all data fits in packet header */
- mpi_errno = MPIR_Localcopy(put_pkt->info.data, put_pkt->count, put_pkt->datatype,
+ mpi_errno = MPIR_Localcopy((void *) &put_pkt->info.data, put_pkt->count, put_pkt->datatype,
put_pkt->addr, put_pkt->count, put_pkt->datatype);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
}
else {
- MPIU_Assert(put_pkt->type == MPIDI_CH3_PKT_PUT);
+ MPIR_Assert(put_pkt->type == MPIDI_CH3_PKT_PUT);
mpi_errno = MPIR_Localcopy(target_lock_entry->data, put_pkt->count, put_pkt->datatype,
put_pkt->addr, put_pkt->count, put_pkt->datatype);
@@ -1178,13 +1178,13 @@ static inline int perform_put_in_lock_queue(MPID_Win * win_ptr,
goto fn_exit;
}
-static inline int perform_get_in_lock_queue(MPID_Win * win_ptr,
+static inline int perform_get_in_lock_queue(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t * target_lock_entry)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_get_resp_t *get_resp_pkt = &upkt.get_resp;
MPIDI_CH3_Pkt_get_t *get_pkt = &((target_lock_entry->pkt).get);
- MPID_Request *sreq = NULL;
+ MPIR_Request *sreq = NULL;
MPI_Aint type_size;
size_t len;
int iovcnt;
@@ -1193,19 +1193,19 @@ static inline int perform_get_in_lock_queue(MPID_Win * win_ptr,
int mpi_errno = MPI_SUCCESS;
/* Piggyback candidate should have basic datatype for target datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_pkt->datatype));
/* Make sure that all data is received for this op. */
- MPIU_Assert(target_lock_entry->all_data_recved == 1);
+ MPIR_Assert(target_lock_entry->all_data_recved == 1);
- sreq = MPID_Request_create();
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (sreq == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomemreq");
}
- MPIU_Object_set_ref(sreq, 1);
+ MPIR_Object_set_ref(sreq, 1);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_GET_RESP);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GetSendComplete;
sreq->dev.OnFinal = MPIDI_CH3_ReqHandler_GetSendComplete;
@@ -1233,13 +1233,13 @@ static inline int perform_get_in_lock_queue(MPID_Win * win_ptr,
get_resp_pkt->target_rank = win_ptr->comm_ptr->rank;
/* length of target data */
- MPID_Datatype_get_size_macro(get_pkt->datatype, type_size);
- MPIU_Assign_trunc(len, get_pkt->count * type_size, size_t);
+ MPIDU_Datatype_get_size_macro(get_pkt->datatype, type_size);
+ MPIR_Assign_trunc(len, get_pkt->count * type_size, size_t);
- MPID_Datatype_is_contig(get_pkt->datatype, &is_contig);
+ MPIDU_Datatype_is_contig(get_pkt->datatype, &is_contig);
if (get_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP) {
- void *src = (void *) (get_pkt->addr), *dest = (void *) (get_resp_pkt->info.data);
+ void *src = (void *) (get_pkt->addr), *dest = (void *) &get_resp_pkt->info.data;
mpi_errno = immed_copy(src, dest, len);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -1251,7 +1251,7 @@ static inline int perform_get_in_lock_queue(MPID_Win * win_ptr,
mpi_errno = MPIDI_CH3_iSendv(target_lock_entry->vc, sreq, iov, iovcnt);
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
}
@@ -1264,7 +1264,7 @@ static inline int perform_get_in_lock_queue(MPID_Win * win_ptr,
mpi_errno = MPIDI_CH3_iSendv(target_lock_entry->vc, sreq, iov, iovcnt);
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
}
@@ -1272,11 +1272,11 @@ static inline int perform_get_in_lock_queue(MPID_Win * win_ptr,
iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) get_resp_pkt;
iov[0].MPL_IOV_LEN = sizeof(*get_resp_pkt);
- sreq->dev.segment_ptr = MPID_Segment_alloc();
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1(sreq->dev.segment_ptr == NULL, mpi_errno,
- MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(get_pkt->addr, get_pkt->count,
+ MPIDU_Segment_init(get_pkt->addr, get_pkt->count,
get_pkt->datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = get_pkt->count * type_size;
@@ -1293,41 +1293,41 @@ static inline int perform_get_in_lock_queue(MPID_Win * win_ptr,
}
-static inline int perform_acc_in_lock_queue(MPID_Win * win_ptr,
+static inline int perform_acc_in_lock_queue(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t * target_lock_entry)
{
MPIDI_CH3_Pkt_accum_t *acc_pkt = &((target_lock_entry->pkt).accum);
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(target_lock_entry->all_data_recved == 1);
+ MPIR_Assert(target_lock_entry->all_data_recved == 1);
/* Piggyback candidate should have basic datatype for target datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(acc_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(acc_pkt->datatype));
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
if (acc_pkt->type == MPIDI_CH3_PKT_ACCUMULATE_IMMED) {
/* All data fits in packet header */
- mpi_errno = do_accumulate_op(acc_pkt->info.data, acc_pkt->count, acc_pkt->datatype,
- acc_pkt->addr, acc_pkt->count, acc_pkt->datatype,
- 0, acc_pkt->op);
+ mpi_errno = do_accumulate_op((void *) &acc_pkt->info.data, acc_pkt->count,
+ acc_pkt->datatype, acc_pkt->addr, acc_pkt->count,
+ acc_pkt->datatype, 0, acc_pkt->op);
}
else {
- MPIU_Assert(acc_pkt->type == MPIDI_CH3_PKT_ACCUMULATE);
+ MPIR_Assert(acc_pkt->type == MPIDI_CH3_PKT_ACCUMULATE);
MPI_Aint type_size, type_extent;
MPI_Aint total_len, recv_count;
- MPID_Datatype_get_size_macro(acc_pkt->datatype, type_size);
- MPID_Datatype_get_extent_macro(acc_pkt->datatype, type_extent);
+ MPIDU_Datatype_get_size_macro(acc_pkt->datatype, type_size);
+ MPIDU_Datatype_get_extent_macro(acc_pkt->datatype, type_extent);
total_len = type_size * acc_pkt->count;
- recv_count = MPIR_MIN((total_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
- MPIU_Assert(recv_count > 0);
+ recv_count = MPL_MIN((total_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
+ MPIR_Assert(recv_count > 0);
/* Note: here stream_offset is 0 because when piggybacking LOCK, we must use
* the first stream unit. */
- MPIU_Assert(recv_count = (int) recv_count);
+ MPIR_Assert(recv_count == (int) recv_count);
mpi_errno = do_accumulate_op(target_lock_entry->data, (int) recv_count, acc_pkt->datatype,
acc_pkt->addr, acc_pkt->count, acc_pkt->datatype,
0, acc_pkt->op);
@@ -1352,13 +1352,13 @@ static inline int perform_acc_in_lock_queue(MPID_Win * win_ptr,
}
-static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
+static inline int perform_get_acc_in_lock_queue(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t * target_lock_entry)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_get_accum_resp_t *get_accum_resp_pkt = &upkt.get_accum_resp;
MPIDI_CH3_Pkt_get_accum_t *get_accum_pkt = &((target_lock_entry->pkt).get_accum);
- MPID_Request *sreq = NULL;
+ MPIR_Request *sreq = NULL;
MPI_Aint type_size;
size_t len;
int iovcnt;
@@ -1369,19 +1369,19 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
MPI_Aint total_len, recv_count;
/* Piggyback candidate should have basic datatype for target datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype));
/* Make sure that all data is received for this op. */
- MPIU_Assert(target_lock_entry->all_data_recved == 1);
+ MPIR_Assert(target_lock_entry->all_data_recved == 1);
- sreq = MPID_Request_create();
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (sreq == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomemreq");
}
- MPIU_Object_set_ref(sreq, 1);
+ MPIR_Object_set_ref(sreq, 1);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_GET_ACCUM_RESP);
- sreq->kind = MPID_REQUEST_SEND;
+ sreq->kind = MPIR_REQUEST_KIND__SEND;
sreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumSendComplete;
sreq->dev.OnFinal = MPIDI_CH3_ReqHandler_GaccumSendComplete;
@@ -1389,10 +1389,10 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
sreq->dev.flags = get_accum_pkt->flags;
/* Copy data into a temporary buffer */
- MPID_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
/* length of target data */
- MPIU_Assign_trunc(len, get_accum_pkt->count * type_size, size_t);
+ MPIR_Assign_trunc(len, get_accum_pkt->count * type_size, size_t);
if (get_accum_pkt->type == MPIDI_CH3_PKT_GET_ACCUM_IMMED) {
MPIDI_Pkt_init(get_accum_resp_pkt, MPIDI_CH3_PKT_GET_ACCUM_RESP_IMMED);
@@ -1415,7 +1415,7 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
/* Copy data from target window to response packet header */
void *src = (void *) (get_accum_pkt->addr), *dest =
- (void *) (get_accum_resp_pkt->info.data);
+ (void *) &(get_accum_resp_pkt->info.data);
mpi_errno = immed_copy(src, dest, len);
if (mpi_errno != MPI_SUCCESS) {
if (win_ptr->shm_allocated == TRUE)
@@ -1427,7 +1427,7 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
/* All data fits in packet header */
mpi_errno =
- do_accumulate_op(get_accum_pkt->info.data, get_accum_pkt->count,
+ do_accumulate_op((void *) &get_accum_pkt->info.data, get_accum_pkt->count,
get_accum_pkt->datatype, get_accum_pkt->addr, get_accum_pkt->count,
get_accum_pkt->datatype, 0, get_accum_pkt->op);
@@ -1448,24 +1448,24 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
mpi_errno = MPIDI_CH3_iSendv(target_lock_entry->vc, sreq, iov, iovcnt);
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
goto fn_exit;
}
- MPIU_Assert(get_accum_pkt->type == MPIDI_CH3_PKT_GET_ACCUM);
+ MPIR_Assert(get_accum_pkt->type == MPIDI_CH3_PKT_GET_ACCUM);
- MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, type_extent);
+ MPIDU_Datatype_get_extent_macro(get_accum_pkt->datatype, type_extent);
total_len = type_size * get_accum_pkt->count;
- recv_count = MPIR_MIN((total_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
- MPIU_Assert(recv_count > 0);
+ recv_count = MPL_MIN((total_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
+ MPIR_Assert(recv_count > 0);
- sreq->dev.user_buf = (void *) MPIU_Malloc(recv_count * type_size);
+ sreq->dev.user_buf = (void *) MPL_malloc(recv_count * type_size);
- MPID_Datatype_is_contig(get_accum_pkt->datatype, &is_contig);
+ MPIDU_Datatype_is_contig(get_accum_pkt->datatype, &is_contig);
/* NOTE: 'copy data + ACC' needs to be atomic */
@@ -1478,10 +1478,10 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
* the first stream unit. */
if (is_contig) {
- MPIU_Memcpy(sreq->dev.user_buf, get_accum_pkt->addr, recv_count * type_size);
+ MPIR_Memcpy(sreq->dev.user_buf, get_accum_pkt->addr, recv_count * type_size);
}
else {
- MPID_Segment *seg = MPID_Segment_alloc();
+ MPIDU_Segment *seg = MPIDU_Segment_alloc();
MPI_Aint first = 0;
MPI_Aint last = first + type_size * recv_count;
@@ -1490,16 +1490,16 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
}
MPIR_ERR_CHKANDJUMP1(seg == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
- "MPID_Segment");
- MPID_Segment_init(get_accum_pkt->addr, get_accum_pkt->count, get_accum_pkt->datatype, seg,
+ "MPIDU_Segment");
+ MPIDU_Segment_init(get_accum_pkt->addr, get_accum_pkt->count, get_accum_pkt->datatype, seg,
0);
- MPID_Segment_pack(seg, first, &last, sreq->dev.user_buf);
- MPID_Segment_free(seg);
+ MPIDU_Segment_pack(seg, first, &last, sreq->dev.user_buf);
+ MPIDU_Segment_free(seg);
}
/* Perform ACCUMULATE OP */
- MPIU_Assert(recv_count == (int) recv_count);
+ MPIR_Assert(recv_count == (int) recv_count);
mpi_errno = do_accumulate_op(target_lock_entry->data, (int) recv_count, get_accum_pkt->datatype,
get_accum_pkt->addr, get_accum_pkt->count, get_accum_pkt->datatype,
0, get_accum_pkt->op);
@@ -1533,7 +1533,7 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
mpi_errno = MPIDI_CH3_iSendv(target_lock_entry->vc, sreq, iov, iovcnt);
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
@@ -1544,13 +1544,13 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
}
-static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
+static inline int perform_fop_in_lock_queue(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t * target_lock_entry)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_fop_resp_t *fop_resp_pkt = &upkt.fop_resp;
MPIDI_CH3_Pkt_fop_t *fop_pkt = &((target_lock_entry->pkt).fop);
- MPID_Request *resp_req = NULL;
+ MPIR_Request *resp_req = NULL;
MPI_Aint type_size;
MPL_IOV iov[MPL_IOV_LIMIT];
int iovcnt;
@@ -1558,17 +1558,17 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
int mpi_errno = MPI_SUCCESS;
/* Piggyback candidate should have basic datatype for target datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(fop_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(fop_pkt->datatype));
/* Make sure that all data is received for this op. */
- MPIU_Assert(target_lock_entry->all_data_recved == 1);
+ MPIR_Assert(target_lock_entry->all_data_recved == 1);
/* FIXME: this function is same with PktHandler_FOP(), should
* do code refactoring on both of them. */
- MPID_Datatype_get_size_macro(fop_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(fop_pkt->datatype, type_size);
- MPID_Datatype_is_contig(fop_pkt->datatype, &is_contig);
+ MPIDU_Datatype_is_contig(fop_pkt->datatype, &is_contig);
if (fop_pkt->type == MPIDI_CH3_PKT_FOP_IMMED) {
MPIDI_Pkt_init(fop_resp_pkt, MPIDI_CH3_PKT_FOP_RESP_IMMED);
@@ -1588,11 +1588,11 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
fop_resp_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_ACK;
if (fop_pkt->type == MPIDI_CH3_PKT_FOP) {
- resp_req = MPID_Request_create();
+ resp_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (resp_req == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomemreq");
}
- MPIU_Object_set_ref(resp_req, 1);
+ MPIR_Object_set_ref(resp_req, 1);
resp_req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_FOPSendComplete;
resp_req->dev.OnFinal = MPIDI_CH3_ReqHandler_FOPSendComplete;
@@ -1600,7 +1600,7 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
resp_req->dev.target_win_handle = win_ptr->handle;
resp_req->dev.flags = fop_pkt->flags;
- resp_req->dev.user_buf = (void *) MPIU_Malloc(type_size);
+ resp_req->dev.user_buf = (void *) MPL_malloc(type_size);
/* here we increment the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
@@ -1616,7 +1616,7 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
if (fop_pkt->type == MPIDI_CH3_PKT_FOP_IMMED) {
/* copy data to resp pkt header */
- void *src = fop_pkt->addr, *dest = fop_resp_pkt->info.data;
+ void *src = fop_pkt->addr, *dest = (void *) &fop_resp_pkt->info.data;
mpi_errno = immed_copy(src, dest, type_size);
if (mpi_errno != MPI_SUCCESS) {
if (win_ptr->shm_allocated == TRUE)
@@ -1625,10 +1625,10 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
}
}
else if (is_contig) {
- MPIU_Memcpy(resp_req->dev.user_buf, fop_pkt->addr, type_size);
+ MPIR_Memcpy(resp_req->dev.user_buf, fop_pkt->addr, type_size);
}
else {
- MPID_Segment *seg = MPID_Segment_alloc();
+ MPIDU_Segment *seg = MPIDU_Segment_alloc();
MPI_Aint last = type_size;
if (seg == NULL) {
@@ -1636,15 +1636,15 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
}
MPIR_ERR_CHKANDJUMP1(seg == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
- "MPID_Segment");
- MPID_Segment_init(fop_pkt->addr, 1, fop_pkt->datatype, seg, 0);
- MPID_Segment_pack(seg, 0, &last, resp_req->dev.user_buf);
- MPID_Segment_free(seg);
+ "MPIDU_Segment");
+ MPIDU_Segment_init(fop_pkt->addr, 1, fop_pkt->datatype, seg, 0);
+ MPIDU_Segment_pack(seg, 0, &last, resp_req->dev.user_buf);
+ MPIDU_Segment_free(seg);
}
/* Apply the op */
if (fop_pkt->type == MPIDI_CH3_PKT_FOP_IMMED) {
- mpi_errno = do_accumulate_op(fop_pkt->info.data, 1, fop_pkt->datatype,
+ mpi_errno = do_accumulate_op((void *) &fop_pkt->info.data, 1, fop_pkt->datatype,
fop_pkt->addr, 1, fop_pkt->datatype, 0, fop_pkt->op);
}
else {
@@ -1668,7 +1668,7 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
MPIR_ERR_CHKANDJUMP(mpi_errno != MPI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
if (resp_req != NULL) {
- if (!MPID_Request_is_complete(resp_req)) {
+ if (!MPIR_Request_is_complete(resp_req)) {
/* sending process is not completed, set proper OnDataAvail
* (it is initialized to NULL by lower layer) */
resp_req->dev.target_win_handle = fop_pkt->target_win_handle;
@@ -1679,11 +1679,11 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter++;
- MPID_Request_release(resp_req);
+ MPIR_Request_free(resp_req);
goto fn_exit;
}
else {
- MPID_Request_release(resp_req);
+ MPIR_Request_free(resp_req);
}
}
}
@@ -1696,7 +1696,7 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
mpi_errno = MPIDI_CH3_iSendv(target_lock_entry->vc, resp_req, iov, iovcnt);
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(resp_req);
+ MPIR_Request_free(resp_req);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
goto fn_exit;
@@ -1715,21 +1715,21 @@ static inline int perform_fop_in_lock_queue(MPID_Win * win_ptr,
}
-static inline int perform_cas_in_lock_queue(MPID_Win * win_ptr,
+static inline int perform_cas_in_lock_queue(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t * target_lock_entry)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_cas_resp_t *cas_resp_pkt = &upkt.cas_resp;
MPIDI_CH3_Pkt_cas_t *cas_pkt = &((target_lock_entry->pkt).cas);
- MPID_Request *send_req = NULL;
+ MPIR_Request *send_req = NULL;
MPI_Aint len;
int mpi_errno = MPI_SUCCESS;
/* Piggyback candidate should have basic datatype for target datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(cas_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(cas_pkt->datatype));
/* Make sure that all data is received for this op. */
- MPIU_Assert(target_lock_entry->all_data_recved == 1);
+ MPIR_Assert(target_lock_entry->all_data_recved == 1);
MPIDI_Pkt_init(cas_resp_pkt, MPIDI_CH3_PKT_CAS_RESP_IMMED);
cas_resp_pkt->request_handle = cas_pkt->request_handle;
@@ -1743,17 +1743,17 @@ static inline int perform_cas_in_lock_queue(MPID_Win * win_ptr,
cas_resp_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_ACK;
/* Copy old value into the response packet */
- MPID_Datatype_get_size_macro(cas_pkt->datatype, len);
- MPIU_Assert(len <= sizeof(MPIDI_CH3_CAS_Immed_u));
+ MPIDU_Datatype_get_size_macro(cas_pkt->datatype, len);
+ MPIR_Assert(len <= sizeof(MPIDI_CH3_CAS_Immed_u));
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
- MPIU_Memcpy((void *) &cas_resp_pkt->info.data, cas_pkt->addr, len);
+ MPIR_Memcpy((void *) &cas_resp_pkt->info.data, cas_pkt->addr, len);
/* Compare and replace if equal */
if (MPIR_Compare_equal(&cas_pkt->compare_data, cas_pkt->addr, cas_pkt->datatype)) {
- MPIU_Memcpy(cas_pkt->addr, &cas_pkt->origin_data, len);
+ MPIR_Memcpy(cas_pkt->addr, &cas_pkt->origin_data, len);
}
if (win_ptr->shm_allocated == TRUE)
@@ -1768,7 +1768,7 @@ static inline int perform_cas_in_lock_queue(MPID_Win * win_ptr,
MPIR_ERR_CHKANDJUMP(mpi_errno != MPI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
if (send_req != NULL) {
- if (!MPID_Request_is_complete(send_req)) {
+ if (!MPIR_Request_is_complete(send_req)) {
/* sending process is not completed, set proper OnDataAvail
* (it is initialized to NULL by lower layer) */
send_req->dev.target_win_handle = cas_pkt->target_win_handle;
@@ -1779,11 +1779,11 @@ static inline int perform_cas_in_lock_queue(MPID_Win * win_ptr,
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter++;
- MPID_Request_release(send_req);
+ MPIR_Request_free(send_req);
goto fn_exit;
}
else
- MPID_Request_release(send_req);
+ MPIR_Request_free(send_req);
}
/* do final action */
@@ -1799,7 +1799,7 @@ static inline int perform_cas_in_lock_queue(MPID_Win * win_ptr,
}
-static inline int perform_op_in_lock_queue(MPID_Win * win_ptr,
+static inline int perform_op_in_lock_queue(MPIR_Win * win_ptr,
MPIDI_RMA_Target_lock_entry_t * target_lock_entry)
{
int mpi_errno = MPI_SUCCESS;
@@ -1887,13 +1887,13 @@ static int entered_count = 0;
#define FUNCNAME MPIDI_CH3I_Release_lock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Release_lock(MPID_Win * win_ptr)
+int MPIDI_CH3I_Release_lock(MPIR_Win * win_ptr)
{
MPIDI_RMA_Target_lock_entry_t *target_lock_entry, *target_lock_entry_next;
int requested_lock, mpi_errno = MPI_SUCCESS, temp_entered_count;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_RELEASE_LOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_RELEASE_LOCK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_RELEASE_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_RELEASE_LOCK);
if (win_ptr->current_lock_type == MPI_LOCK_SHARED) {
/* decr ref cnt */
@@ -1944,7 +1944,7 @@ int MPIDI_CH3I_Release_lock(MPID_Win * win_ptr)
if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED)
requested_lock = MPI_LOCK_SHARED;
else {
- MPIU_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
+ MPIR_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
requested_lock = MPI_LOCK_EXCLUSIVE;
}
if (MPIDI_CH3I_Try_acquire_win_lock(win_ptr, requested_lock) == 1) {
@@ -1976,7 +1976,7 @@ int MPIDI_CH3I_Release_lock(MPID_Win * win_ptr)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_RELEASE_LOCK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_RELEASE_LOCK);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1989,17 +1989,17 @@ int MPIDI_CH3I_Release_lock(MPID_Win * win_ptr)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete(MPIDI_VC_t * vc,
- MPID_Request * rreq, int *complete)
+ MPIR_Request * rreq, int *complete)
{
int requested_lock;
MPI_Win target_win_handle;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
MPIDI_CH3_Pkt_flags_t flags;
MPIDI_RMA_Target_lock_entry_t *target_lock_queue_entry = rreq->dev.target_lock_queue_entry;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_PIGGYBACKLOCKOPRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_PIGGYBACKLOCKOPRECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_PIGGYBACKLOCKOPRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_PIGGYBACKLOCKOPRECVCOMPLETE);
/* This handler is triggered when we received all data of a lock queue
* entry */
@@ -2015,12 +2015,12 @@ int MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete(MPIDI_VC_t * vc,
MPIDI_CH3_PKT_RMA_GET_FLAGS(target_lock_queue_entry->pkt, flags, mpi_errno);
MPIDI_CH3_PKT_RMA_GET_TARGET_WIN_HANDLE(target_lock_queue_entry->pkt, target_win_handle,
mpi_errno);
- MPID_Win_get_ptr(target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(target_win_handle, win_ptr);
if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM &&
(rreq->dev.target_lock_queue_entry)->data != NULL) {
- MPIU_Assert(target_lock_queue_entry->pkt.type == MPIDI_CH3_PKT_ACCUMULATE ||
+ MPIR_Assert(target_lock_queue_entry->pkt.type == MPIDI_CH3_PKT_ACCUMULATE ||
target_lock_queue_entry->pkt.type == MPIDI_CH3_PKT_GET_ACCUM);
int ext_hdr_sz;
@@ -2044,7 +2044,7 @@ int MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete(MPIDI_VC_t * vc,
requested_lock = MPI_LOCK_SHARED;
}
else {
- MPIU_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
+ MPIR_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
requested_lock = MPI_LOCK_EXCLUSIVE;
}
@@ -2077,7 +2077,7 @@ int MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete(MPIDI_VC_t * vc,
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_PIGGYBACKLOCKOPRECVCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_PIGGYBACKLOCKOPRECVCOMPLETE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/ch3u_handle_revoke_pkt.c b/src/mpid/ch3/src/ch3u_handle_revoke_pkt.c
index 559e75b..2ebd5e4 100644
--- a/src/mpid/ch3/src/ch3u_handle_revoke_pkt.c
+++ b/src/mpid/ch3/src/ch3u_handle_revoke_pkt.c
@@ -11,13 +11,14 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_Revoke(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp)
+ void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp)
{
MPIDI_CH3_Pkt_revoke_t *revoke_pkt = &pkt->revoke;
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *comm_ptr = NULL;
+ MPIR_Comm *comm_ptr = NULL;
- MPIU_DBG_MSG_D(CH3_OTHER, VERBOSE, "Received revoke pkt from %d", vc->pg_rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER, VERBOSE, "Received revoke pkt from %d", vc->pg_rank);
/* Search through all of the communicators to find the right context_id */
MPIDI_CH3I_Comm_find(revoke_pkt->revoked_comm, &comm_ptr);
diff --git a/src/mpid/ch3/src/ch3u_handle_send_req.c b/src/mpid/ch3/src/ch3u_handle_send_req.c
index 10c9f9f..cbdad6e 100644
--- a/src/mpid/ch3/src/ch3u_handle_send_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_send_req.c
@@ -11,19 +11,19 @@
#define FUNCNAME MPIDI_CH3U_Handle_send_req
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Handle_send_req(MPIDI_VC_t * vc, MPID_Request * sreq, int *complete)
+int MPIDI_CH3U_Handle_send_req(MPIDI_VC_t * vc, MPIR_Request * sreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- int (*reqFn) (MPIDI_VC_t *, MPID_Request *, int *);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ);
+ int (*reqFn) (MPIDI_VC_t *, MPIR_Request *, int *);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ);
/* Use the associated function rather than switching on the old ca field */
/* Routines can call the attached function directly */
reqFn = sreq->dev.OnDataAvail;
if (!reqFn) {
- MPIU_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
+ MPIR_Assert(MPIDI_Request_get_type(sreq) != MPIDI_REQUEST_TYPE_GET_RESP);
mpi_errno = MPID_Request_complete(sreq);
*complete = 1;
}
@@ -35,7 +35,7 @@ int MPIDI_CH3U_Handle_send_req(MPIDI_VC_t * vc, MPID_Request * sreq, int *comple
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_SEND_REQ);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -49,10 +49,10 @@ int MPIDI_CH3U_Handle_send_req(MPIDI_VC_t * vc, MPID_Request * sreq, int *comple
/* ----------------------------------------------------------------------- */
int MPIDI_CH3_ReqHandler_GetSendComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * sreq, int *complete)
+ MPIR_Request * sreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
MPIDI_CH3_Pkt_flags_t flags = sreq->dev.flags;
/* NOTE: It is possible that this request is already completed before
@@ -68,17 +68,17 @@ int MPIDI_CH3_ReqHandler_GetSendComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
* which leads to wrong execution.
* Here we check if req is already completed to prevent processing the
* same request twice. */
- if (MPID_Request_is_complete(sreq)) {
+ if (MPIR_Request_is_complete(sreq)) {
*complete = FALSE;
goto fn_exit;
}
- MPID_Win_get_ptr(sreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(sreq->dev.target_win_handle, win_ptr);
/* here we decrement the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
/* mark data transfer as complete and decrement CC */
mpi_errno = MPID_Request_complete(sreq);
@@ -107,14 +107,14 @@ int MPIDI_CH3_ReqHandler_GetSendComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#define FUNCNAME MPIDI_CH3_ReqHandler_GaccumSendComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_GaccumSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_GaccumSendComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
MPIDI_CH3_Pkt_flags_t flags = rreq->dev.flags;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE);
/* NOTE: It is possible that this request is already completed before
* entering this handler. This happens when this req handler is called
@@ -129,7 +129,7 @@ int MPIDI_CH3_ReqHandler_GaccumSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq
* which leads to wrong execution.
* Here we check if req is already completed to prevent processing the
* same request twice. */
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
*complete = FALSE;
goto fn_exit;
}
@@ -138,14 +138,14 @@ int MPIDI_CH3_ReqHandler_GaccumSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq
* is finished. Only GACC used user_buf. FOP and CAS can fit all data
* in response packet. */
if (rreq->dev.user_buf != NULL)
- MPIU_Free(rreq->dev.user_buf);
+ MPL_free(rreq->dev.user_buf);
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
/* here we decrement the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
@@ -164,7 +164,7 @@ int MPIDI_CH3_ReqHandler_GaccumSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMSENDCOMPLETE);
return mpi_errno;
fn_fail:
@@ -176,14 +176,14 @@ int MPIDI_CH3_ReqHandler_GaccumSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq
#define FUNCNAME MPIDI_CH3_ReqHandler_CASSendComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_CASSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_CASSendComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
MPIDI_CH3_Pkt_flags_t flags = rreq->dev.flags;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE);
/* NOTE: It is possible that this request is already completed before
* entering this handler. This happens when this req handler is called
@@ -198,7 +198,7 @@ int MPIDI_CH3_ReqHandler_CASSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
* which leads to wrong execution.
* Here we check if req is already completed to prevent processing the
* same request twice. */
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
*complete = FALSE;
goto fn_exit;
}
@@ -207,14 +207,14 @@ int MPIDI_CH3_ReqHandler_CASSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
* is finished. Only GACC used user_buf. FOP and CAS can fit all data
* in response packet. */
if (rreq->dev.user_buf != NULL)
- MPIU_Free(rreq->dev.user_buf);
+ MPL_free(rreq->dev.user_buf);
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
/* here we decrement the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
@@ -233,7 +233,7 @@ int MPIDI_CH3_ReqHandler_CASSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_CASSENDCOMPLETE);
return mpi_errno;
fn_fail:
@@ -244,14 +244,14 @@ int MPIDI_CH3_ReqHandler_CASSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
#define FUNCNAME MPIDI_CH3_ReqHandler_FOPSendComplete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_FOPSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_FOPSendComplete(MPIDI_VC_t * vc, MPIR_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
MPIDI_CH3_Pkt_flags_t flags = rreq->dev.flags;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE);
/* NOTE: It is possible that this request is already completed before
* entering this handler. This happens when this req handler is called
@@ -266,7 +266,7 @@ int MPIDI_CH3_ReqHandler_FOPSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
* which leads to wrong execution.
* Here we check if req is already completed to prevent processing the
* same request twice. */
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
*complete = FALSE;
goto fn_exit;
}
@@ -275,14 +275,14 @@ int MPIDI_CH3_ReqHandler_FOPSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
* is finished. Only GACC used user_buf. FOP and CAS can fit all data
* in response packet. */
if (rreq->dev.user_buf != NULL)
- MPIU_Free(rreq->dev.user_buf);
+ MPL_free(rreq->dev.user_buf);
- MPID_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(rreq->dev.target_win_handle, win_ptr);
/* here we decrement the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
mpi_errno = MPID_Request_complete(rreq);
if (mpi_errno != MPI_SUCCESS) {
@@ -301,7 +301,7 @@ int MPIDI_CH3_ReqHandler_FOPSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
*complete = TRUE;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_FOPSENDCOMPLETE);
return mpi_errno;
fn_fail:
@@ -309,7 +309,7 @@ int MPIDI_CH3_ReqHandler_FOPSendComplete(MPIDI_VC_t * vc, MPID_Request * rreq, i
}
-int MPIDI_CH3_ReqHandler_SendReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)), MPID_Request * sreq,
+int MPIDI_CH3_ReqHandler_SendReloadIOV(MPIDI_VC_t * vc ATTRIBUTE((unused)), MPIR_Request * sreq,
int *complete)
{
int mpi_errno;
diff --git a/src/mpid/ch3/src/ch3u_port.c b/src/mpid/ch3/src/ch3u_port.c
index 1be77da..67cb411 100644
--- a/src/mpid/ch3/src/ch3u_port.c
+++ b/src/mpid/ch3/src/ch3u_port.c
@@ -5,6 +5,27 @@
*/
#include "mpidi_ch3_impl.h"
+#include "mpid_port.h"
+
+/*
+=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
+
+cvars:
+ - name : MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT
+ category : CH3
+ type : int
+ default : 180
+ class : none
+ verbosity : MPI_T_VERBOSITY_USER_BASIC
+ scope : MPI_T_SCOPE_GROUP_EQ
+ description : >-
+ The default time out period in seconds for a connection attempt to the
+ server communicator where the named port exists but no pending accept.
+ User can change the value for a specified connection through its info
+ argument.
+
+=== END_MPI_T_CVAR_INFO_BLOCK ===
+*/
/*
* This file replaces ch3u_comm_connect.c and ch3u_comm_accept.c . These
@@ -38,18 +59,29 @@ typedef struct pg_node {
} pg_node;
/* These functions help implement the connect/accept algorithm */
-static int ExtractLocalPGInfo( MPID_Comm *, pg_translation [],
+static int ExtractLocalPGInfo( MPIR_Comm *, pg_translation [],
pg_node **, int * );
-static int ReceivePGAndDistribute( MPID_Comm *, MPID_Comm *, int, int *,
+static int ReceivePGAndDistribute( MPIR_Comm *, MPIR_Comm *, int, int *,
int, MPIDI_PG_t *[] );
-static int SendPGtoPeerAndFree( MPID_Comm *, int *, pg_node * );
+static int SendPGtoPeerAndFree( MPIR_Comm *, int *, pg_node * );
static int FreeNewVC( MPIDI_VC_t *new_vc );
-static int SetupNewIntercomm( MPID_Comm *comm_ptr, int remote_comm_size,
+static int SetupNewIntercomm( MPIR_Comm *comm_ptr, int remote_comm_size,
pg_translation remote_translation[],
MPIDI_PG_t **remote_pg,
- MPID_Comm *intercomm );
-static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
+ MPIR_Comm *intercomm );
+static int MPIDI_CH3I_Initialize_tmp_comm(MPIR_Comm **comm_pptr,
MPIDI_VC_t *vc_ptr, int is_low_group, int context_id_offset);
+
+static int MPIDI_CH3I_Acceptq_dequeue(MPIDI_CH3I_Port_connreq_t ** connreq_ptr, int port_name_tag);
+static int MPIDI_CH3I_Acceptq_cleanup(MPIDI_CH3I_Port_connreq_q_t * accept_connreq_q);
+
+static int MPIDI_CH3I_Revokeq_cleanup(void);
+
+static int MPIDI_CH3I_Port_connreq_create(MPIDI_VC_t * vc,
+ MPIDI_CH3I_Port_connreq_t ** connreq_ptr);
+static int MPIDI_CH3I_Port_connreq_free(MPIDI_CH3I_Port_connreq_t * connreq);
+
+
/* ------------------------------------------------------------------------- */
/*
* Structure of this file and the connect/accept algorithm:
@@ -78,6 +110,98 @@ static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
* routine MPIDI_CH3I_Acceptq_dequeue). This routine returns the matched
* virtual connection (VC).
*
+ * -----------------------------------------------------------------------------
+ * To support connection timeout, we add additional handshake protocol in above
+ * VC establishing step. The implementation includes init/destroy processing in
+ * port open/close routine and MPI_Finalize, packet handlers, and modified code
+ * in following subroutines:
+ * - MPIDI_Create_inter_root_communicator_connect
+ * - and MPIDI_Create_inter_root_communicator_accept
+ *
+ * 1. Every connection attempt is described as an *request object* on both sides,
+ * with following state change (see MPIDI_CH3I_Port_connreq_stat_t).
+ * - Connecting side: INITED -> REVOKE / ACCEPTED / ERR_CLOSE -> FREE
+ * - Accepting side : INITED -> ACCEPT -> (ACCEPTED) -> FREE
+ *
+ * 2. Handshake protocol:
+ * I. Connecting side:
+ * a. After VC is created, a connection *request object* is created with
+ * INITED state, then we pokes progress to wait the state being changed
+ * in specified timeout period (default CVAR).
+ * b. If waiting time exceeded threshold, set state to REVOKE.
+ * c. Progress engine receives a MPIDI_CH3_PKT_CONN_ACK packet indicating
+ * whether the other side could accept the request.
+ * - ACK (TRUE): if request state is INITED, then set to ACCEPTED and
+ * reply a MPIDI_CH3_PKT_ACCEPT_ACK packet with TRUE ACK; otherwise
+ * such request is already being revoked, then set to FREE and reply
+ * packet with FALSE ACK.
+ * - ACK (FALSE): if request state is INITED, then set to ERR_CLOSE;
+ * otherwise set to FREE (see MPIDI_CH3_PktHandler_ConnAck).
+ * d. If the process is still waiting, then it checks the changed state:
+ * if request is ACCEPTED, then continue connection; otherwise report
+ * MPI_ERR_PORT -- unexpected port closing.
+ *
+ * II. Accepting side:
+ * a. If port exists, the new VC is enqueued into the accept_queue and
+ * described as a *request object* with INITED state; otherwise, reply a
+ * MPIDI_CH3_PKT_CONN_ACK packet with FALSE ACK (closed port)
+ * (see MPIDI_CH3I_Acceptq_dequeue routine).
+ * b. After VC is dequeued in accept routine, send a MPIDI_CH3_PKT_CONN_ACK
+ * packet with TRUE ACK to connecting side and change state to ACCEPT.
+ * Then we poll progress to wait for state change.
+ * c. Progress engine receives a MPIDI_CH3_PKT_ACCEPT_ACK packet indicating
+ * whether the other side can match the acceptance (not being revoked).
+ * - ACK (TRUE): change request state to ACCEPTED
+ * - ACK (FALSE): set state to FREE
+ * (see MPIDI_CH3_PktHandler_AcceptAck).
+ * d. In accept routine, process checks the changed state. If it became
+ * ACCEPTED, then finish acceptance; otherwise free this request and VC
+ * and then wait for next coming request.
+ *
+ * 3. Resource cleanup. In case of timed out connection, following user code
+ * shall be considered as correct program (no description in standard yet).
+ * Thus the resource of first connect must be cleaned up before exit.
+ * ================================================
+ * Server: Client:
+ * open_port(); connect(); ** timed out **
+ * accept(); connect();
+ * close_port();
+ * ================================================
+ * (* The most critical part is closing VC because of closing synchronization
+ * with the other side (see note in MPIDI_CH3I_Port_local_close_vc and
+ * ch3u_handle_connection.c), VC object cannot be freed before it became
+ * INACTIVE state, otherwise segfault !)
+ *
+ * Here is the design to ensure resource cleanup. It also covers most
+ * incorrect user code (e.g., no accept, no close_port), except no finalize.
+ * I. Connecting side :
+ * (use revoked_connreq_q)
+ * a. A REVOKE state request is enqueued to revoked_connreq_q (in 2-I-b).
+ * b. If request changed state INITED->ERR_CLOSE in 2-I-c, we free such
+ * request in the connect call before return (step 2-I-d).
+ * c. If REVOKE->FREE in step 2-I-c, we start VC closing in packet handler,
+ * and free request and VC at finalize (see MPIDI_CH3I_Revokeq_cleanup).
+ * d. For any REVOKE state request at finalize, both request object and VC
+ * will be eventually freed once the other side started finalize.
+ *
+ * II. Accepting side :
+ * (use port_queue, port->accept_queue, global unexpected_queue)
+ * a. We create a port object for every opened port and each of them holds
+ * a separate accept queue (to ensure no mess in multiple-ports).
+ * b. If request becomes FREE in 2-II-a, we start VC closing there and
+ * enqueue it to global unexpected_queue.
+ * c. If request updated state ACCEPT->FREE in 2-II-c, we start VC closing
+ * in packet handler and free both request and VC in accept call (2-II-d).
+ * d. For any requests still in port->accept_queue at close_port or finalize,
+ * issue MPIDI_CH3_PKT_CONN_ACK packet with FALSE ACK to the other side,
+ * then blocking free both VC and request object there. It also ensures
+ * 3-I-d (see MPIDI_CH3I_Acceptq_cleanup).
+ * e. For any requests in global unexpected_queue, we blocking free both VC
+ * and request at finalize (see MPIDI_Port_finalize).
+ *
+ * - END of connection timeout support.
+ * -----------------------------------------------------------------------------
+ *
* Once both sides have established there VC, they both invoke
* MPIDI_CH3I_Initialize_tmp_comm to create a temporary intercommunicator.
* A temporary intercommunicator is constructed so that we can use
@@ -102,7 +226,21 @@ static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
*/
/* ------------------------------------------------------------------------- */
-/*
+
+/*** Queues for supporting connection timeout ***/
+
+/* Server side queues
+ * - unexpected connection requests queue (global)
+ * - active port queue */
+static MPIDI_CH3I_Port_connreq_q_t unexpt_connreq_q = {NULL, NULL, 0};
+static MPIDI_CH3I_Port_q_t active_portq = {NULL, NULL, 0};
+
+/* Client side queue
+ * - revoked connection requests (i.e., timeout) */
+static MPIDI_CH3I_Port_connreq_q_t revoked_connreq_q = {NULL, NULL, 0};
+
+
+/*
* These next two routines are used to create a virtual connection
* (VC) and a temporary intercommunicator that can be used to
* communicate between the two "root" processes for the
@@ -114,16 +252,18 @@ static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int MPIDI_Create_inter_root_communicator_connect(const char *port_name,
- MPID_Comm **comm_pptr,
+ int timeout, MPIR_Comm **comm_pptr,
MPIDI_VC_t **vc_pptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *tmp_comm;
+ MPIR_Comm *tmp_comm;
MPIDI_VC_t *connect_vc = NULL;
int port_name_tag;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT);
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL;
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT);
/* Connect to the root on the other side. Create a
temporary intercommunicator between the two roots so that
@@ -136,10 +276,75 @@ static int MPIDI_Create_inter_root_communicator_connect(const char *port_name,
/* extract the tag from the port_name */
mpi_errno = MPIDI_GetTagFromPort( port_name, &port_name_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
+ if (mpi_errno != MPL_STR_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
+ mpi_errno = MPIDI_CH3I_Port_connreq_create(connect_vc, &connreq);
+ MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Can't create communicator connection object.");
+
+ /* Poke progress to wait server response for the connection request
+ * before timed out. The response is handled in MPIDI_CH3_PktHandler_ConnResp
+ * in progress.*/
+ {
+ MPID_Time_t time_sta, time_now;
+ double time_gap = 0;
+
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "connect: waiting accept in %d(s)", timeout));
+
+ MPID_Wtime(&time_sta);
+ do {
+ mpi_errno = MPID_Progress_poke();
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPID_Wtime(&time_now);
+ MPID_Wtime_diff(&time_sta, &time_now, &time_gap);
+ /* FIXME: not thread-safe */
+ } while (connreq->stat == MPIDI_CH3I_PORT_CONNREQ_INITED
+ && (int) time_gap < timeout);
+ }
+
+ switch (connreq->stat) {
+ case MPIDI_CH3I_PORT_CONNREQ_ACCEPTED:
+ /* Successfully matched an acceptance, then finish connection. */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT, VERBOSE, "Matched with server accept");
+ break;
+
+ case MPIDI_CH3I_PORT_CONNREQ_INITED:
+ /* Connection timed out.
+ * Enqueue to revoked queue. Packet handler will notify server when
+ * when server starts on it. The request will be released at finalize. */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT, VERBOSE, "Connection timed out");
+
+ MPIDI_CH3I_Port_connreq_q_enqueue(&revoked_connreq_q, connreq);
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, REVOKE);
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_PORT, "**ch3|conntimeout",
+ "**ch3|conntimeout %d", timeout);
+ break;
+
+ case MPIDI_CH3I_PORT_CONNREQ_ERR_CLOSE:
+ /* Unexpected port closing on server.
+ * The same as no port case, return MPI_ERR_PORT. Now we caught the error,
+ * close vc and free connection request at fn_fail. */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ "Error - remote closed without matching this connection");
+
+ mpi_errno = MPIDI_CH3I_Port_local_close_vc(connreq->vc);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, FREE);
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_PORT, "**ch3|portclose");
+ break;
+
+ default:
+ /* Unexpected status, internal error. */
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_INTERN, "**unknown");
+ break;
+ }
+
mpi_errno = MPIDI_CH3I_Initialize_tmp_comm(&tmp_comm, connect_vc, 1, port_name_tag);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -148,10 +353,18 @@ static int MPIDI_Create_inter_root_communicator_connect(const char *port_name,
*comm_pptr = tmp_comm;
*vc_pptr = connect_vc;
+ MPL_free(connreq);
+
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_CONNECT);
return mpi_errno;
fn_fail:
+ if (connreq != NULL) {
+ int mpi_errno2 = MPI_SUCCESS;
+ mpi_errno2 = MPIDI_CH3I_Port_connreq_free(connreq);
+ if (mpi_errno2)
+ MPIR_ERR_ADD(mpi_errno, mpi_errno2);
+ }
goto fn_exit;
}
@@ -163,48 +376,99 @@ static int MPIDI_Create_inter_root_communicator_connect(const char *port_name,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
static int MPIDI_Create_inter_root_communicator_accept(const char *port_name,
- MPID_Comm **comm_pptr,
+ MPIR_Comm **comm_pptr,
MPIDI_VC_t **vc_pptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *tmp_comm;
+ MPIR_Comm *tmp_comm;
MPIDI_VC_t *new_vc = NULL;
MPID_Progress_state progress_state;
int port_name_tag;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT);
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL;
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT);
/* extract the tag from the port_name */
mpi_errno = MPIDI_GetTagFromPort( port_name, &port_name_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
+ if (mpi_errno != MPL_STR_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
/* FIXME: Describe the algorithm used here, and what routine
is user on the other side of this connection */
- /* dequeue the accept queue to see if a connection with the
- root on the connect side has been formed in the progress
- engine (the connection is returned in the form of a vc). If
- not, poke the progress engine. */
+ /* dequeue the accept queue to see if a connection request with
+ * the root on the connect side has been formed in the progress
+ * engine. If not, poke the progress engine; If a new connection
+ * request has be found, then we start accepting such request by
+ * sending an ACK packet to client; Pork progress engine unless
+ * we get response from client (state changed). */
MPID_Progress_start(&progress_state);
- for(;;)
- {
- MPIDI_CH3I_Acceptq_dequeue(&new_vc, port_name_tag);
- if (new_vc != NULL)
- {
- break;
- }
+ for (;;) {
+ int matched = 0;
- mpi_errno = MPID_Progress_wait(&progress_state);
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno)
- {
- MPID_Progress_end(&progress_state);
- MPIR_ERR_POP(mpi_errno);
- }
- /* --END ERROR HANDLING-- */
+ if (connreq == NULL) {
+ mpi_errno = MPIDI_CH3I_Acceptq_dequeue(&connreq, port_name_tag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ if (connreq != NULL && connreq->stat == MPIDI_CH3I_PORT_CONNREQ_INITED) {
+ new_vc = connreq->vc;
+
+ /* locally accept */
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, ACCEPT);
+
+ /* Send connection ACK: accept to client */
+ mpi_errno = MPIDI_CH3I_Port_issue_conn_ack(connreq->vc, TRUE /*accept*/);
+ MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Cannot issue acceptance packet");
+
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ "Sent acceptance to client, waiting for ACK");
+ }
+
+ /* Wait either new connection request or response packet for existing one. */
+ mpi_errno = MPID_Progress_wait(&progress_state);
+ /* --BEGIN ERROR HANDLING-- */
+ if (mpi_errno != MPI_SUCCESS) {
+ MPID_Progress_end(&progress_state);
+ MPIR_ERR_POP(mpi_errno);
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* Packet handler received response from client, check updated state */
+ if (connreq != NULL && connreq->stat != MPIDI_CH3I_PORT_CONNREQ_ACCEPT) {
+ switch (connreq->stat) {
+ case MPIDI_CH3I_PORT_CONNREQ_ACCEPTED:
+ /* Matched, now finish acceptance. */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT, VERBOSE, "Matched with client connect");
+ matched = 1; /* leave loop */
+ break;
+
+ case MPIDI_CH3I_PORT_CONNREQ_FREE:
+ /* Client revoked, free connection request.*/
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ "Connection is already closed on client");
+
+ /* Client already started vc closing process, thus it is safe to
+ * blocking wait here till vc freed. */
+ mpi_errno = MPIDI_CH3I_Port_connreq_free(connreq);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ connreq = NULL;
+ break; /* continue while loop */
+ default:
+ /* report internal error -- unexpected state */
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_INTERN, "**unknown");
+ break;
+ }
+ }
+
+ if (matched)
+ break;
}
MPID_Progress_end(&progress_state);
@@ -216,14 +480,22 @@ static int MPIDI_Create_inter_root_communicator_accept(const char *port_name,
*comm_pptr = tmp_comm;
*vc_pptr = new_vc;
- MPIU_DBG_MSG_FMT(CH3_CONNECT,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_free(connreq);
+
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,VERBOSE,(MPL_DBG_FDEST,
"new_vc=%p", new_vc));
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CREATE_INTER_ROOT_COMMUNICATOR_ACCEPT);
return mpi_errno;
fn_fail:
+ if(connreq != NULL) {
+ int mpi_errno2 = MPI_SUCCESS;
+ mpi_errno2 = MPIDI_CH3I_Port_connreq_free(connreq);
+ if (mpi_errno2)
+ MPIR_ERR_ADD(mpi_errno, mpi_errno2);
+ }
goto fn_exit;
}
@@ -234,16 +506,16 @@ fn_fail:
#define FUNCNAME MPIDI_CH3I_Initialize_tmp_comm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
+static int MPIDI_CH3I_Initialize_tmp_comm(MPIR_Comm **comm_pptr,
MPIDI_VC_t *vc_ptr, int is_low_group, int context_id_offset)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *tmp_comm, *commself_ptr;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM);
+ MPIR_Comm *tmp_comm, *commself_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM);
- MPID_Comm_get_ptr( MPI_COMM_SELF, commself_ptr );
+ MPIR_Comm_get_ptr( MPI_COMM_SELF, commself_ptr );
/* WDG-old code allocated a context id that was then discarded */
mpi_errno = MPIR_Comm_create(&tmp_comm);
@@ -259,13 +531,13 @@ static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
* If the same process opens connections to the multiple
* processes, this context ID might get out of sync.
*/
- tmp_comm->context_id = MPID_CONTEXT_SET_FIELD(DYNAMIC_PROC, context_id_offset, 1);
+ tmp_comm->context_id = MPIR_CONTEXT_SET_FIELD(DYNAMIC_PROC, context_id_offset, 1);
tmp_comm->recvcontext_id = tmp_comm->context_id;
/* sanity: the INVALID context ID value could potentially conflict with the
* dynamic proccess space */
- MPIU_Assert(tmp_comm->context_id != MPIU_INVALID_CONTEXT_ID);
- MPIU_Assert(tmp_comm->recvcontext_id != MPIU_INVALID_CONTEXT_ID);
+ MPIR_Assert(tmp_comm->context_id != MPIR_INVALID_CONTEXT_ID);
+ MPIR_Assert(tmp_comm->recvcontext_id != MPIR_INVALID_CONTEXT_ID);
/* FIXME - we probably need a unique context_id. */
tmp_comm->remote_size = 1;
@@ -273,7 +545,7 @@ static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
/* Fill in new intercomm */
tmp_comm->local_size = 1;
tmp_comm->rank = 0;
- tmp_comm->comm_kind = MPID_INTERCOMM;
+ tmp_comm->comm_kind = MPIR_COMM_KIND__INTERCOMM;
tmp_comm->local_comm = NULL;
tmp_comm->is_low_group = is_low_group;
@@ -301,13 +573,13 @@ static int MPIDI_CH3I_Initialize_tmp_comm(MPID_Comm **comm_pptr,
/* Even though this is a tmp comm and we don't call
MPI_Comm_commit, we still need to call the creation hook
because the destruction hook will be called in comm_release */
- mpi_errno = MPID_Dev_comm_create_hook(tmp_comm);
+ mpi_errno = MPID_Comm_create_hook(tmp_comm);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
*comm_pptr = tmp_comm;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -330,25 +602,25 @@ fn_fail:
#define FUNCNAME MPIDI_Comm_connect
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
- MPID_Comm *comm_ptr, MPID_Comm **newcomm)
+int MPIDI_Comm_connect(const char *port_name, MPIR_Info *info, int root,
+ MPIR_Comm *comm_ptr, MPIR_Comm **newcomm)
{
int mpi_errno=MPI_SUCCESS;
int j, i, rank, recv_ints[3], send_ints[3], context_id;
int remote_comm_size=0;
- MPID_Comm *tmp_comm = NULL;
+ MPIR_Comm *tmp_comm = NULL;
MPIDI_VC_t *new_vc = NULL;
int sendtag=100, recvtag=100, n_remote_pgs;
int n_local_pgs=1, local_comm_size;
pg_translation *local_translation = NULL, *remote_translation = NULL;
pg_node *pg_list = NULL;
MPIDI_PG_t **remote_pg = NULL;
- MPIU_Context_id_t recvcontext_id = MPIU_INVALID_CONTEXT_ID;
+ MPIR_Context_id_t recvcontext_id = MPIR_INVALID_CONTEXT_ID;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKLMEM_DECL(3);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_COMM_CONNECT);
+ MPIR_CHKLMEM_DECL(3);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_CONNECT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_CONNECT);
/* Get the context ID here because we need to send it to the remote side */
mpi_errno = MPIR_Get_contextid_sparse( comm_ptr, &recvcontext_id, FALSE );
@@ -359,17 +631,29 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
if (rank == root)
{
+ int timeout = MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT;
+
+ /* Check if user specifies timeout threshold. */
+ if (info != NULL) {
+ int info_flag = 0;
+ char info_value[MPI_MAX_INFO_VAL + 1];
+ MPIR_Info_get_impl(info, "timeout", MPI_MAX_INFO_VAL, info_value, &info_flag);
+ if (info_flag) {
+ timeout = atoi(info_value);
+ }
+ }
+
/* Establish a communicator to communicate with the root on the
other side. */
mpi_errno = MPIDI_Create_inter_root_communicator_connect(
- port_name, &tmp_comm, &new_vc);
+ port_name, timeout, &tmp_comm, &new_vc);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP_LABEL(mpi_errno, no_port);
}
/* Make an array to translate local ranks to process group index
and rank */
- MPIU_CHKLMEM_MALLOC(local_translation,pg_translation*,
+ MPIR_CHKLMEM_MALLOC(local_translation,pg_translation*,
local_comm_size*sizeof(pg_translation),
mpi_errno,"local_translation");
@@ -389,7 +673,7 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
send_ints[1] = local_comm_size;
send_ints[2] = recvcontext_id;
- MPIU_DBG_MSG_FMT(CH3_CONNECT,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,VERBOSE,(MPL_DBG_FDEST,
"sending 3 ints, %d, %d and %d, and receiving 3 ints",
send_ints[0], send_ints[1], send_ints[2]));
mpi_errno = MPIC_Sendrecv(send_ints, 3, MPI_INT, 0,
@@ -404,7 +688,7 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
}
/* broadcast the received info to local processes */
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"broadcasting the received 3 ints");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"broadcasting the received 3 ints");
mpi_errno = MPIR_Bcast_intra(recv_ints, 3, MPI_INT, root, comm_ptr, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
@@ -416,13 +700,13 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
remote_comm_size = recv_ints[1];
context_id = recv_ints[2];
- MPIU_CHKLMEM_MALLOC(remote_pg,MPIDI_PG_t**,
+ MPIR_CHKLMEM_MALLOC(remote_pg,MPIDI_PG_t**,
n_remote_pgs * sizeof(MPIDI_PG_t*),
mpi_errno,"remote_pg");
- MPIU_CHKLMEM_MALLOC(remote_translation,pg_translation*,
+ MPIR_CHKLMEM_MALLOC(remote_translation,pg_translation*,
remote_comm_size * sizeof(pg_translation),
mpi_errno,"remote_translation");
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"allocated remote process groups");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"allocated remote process groups");
/* Exchange the process groups and their corresponding KVSes */
if (rank == root)
@@ -432,7 +716,7 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
n_remote_pgs, remote_pg );
/* Receive the translations from remote process rank to process group
index */
- MPIU_DBG_MSG_FMT(CH3_CONNECT,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,VERBOSE,(MPL_DBG_FDEST,
"sending %d ints, receiving %d ints",
local_comm_size * 2, remote_comm_size * 2));
mpi_errno = MPIC_Sendrecv(local_translation, local_comm_size * 2,
@@ -445,10 +729,10 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
}
#ifdef MPICH_DBG_OUTPUT
- MPIU_DBG_PRINTF(("[%d]connect:Received remote_translation:\n", rank));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE,"[%d]connect:Received remote_translation:\n", rank);
for (i=0; i<remote_comm_size; i++)
{
- MPIU_DBG_PRINTF((" remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank));
}
#endif
@@ -460,17 +744,17 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
}
/* Broadcast out the remote rank translation array */
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"Broadcasting remote translation");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Broadcasting remote translation");
mpi_errno = MPIR_Bcast_intra(remote_translation, remote_comm_size * 2, MPI_INT,
root, comm_ptr, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
#ifdef MPICH_DBG_OUTPUT
- MPIU_DBG_PRINTF(("[%d]connect:Received remote_translation after broadcast:\n", rank));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE,"[%d]connect:Received remote_translation after broadcast:\n", rank);
for (i=0; i<remote_comm_size; i++)
{
- MPIU_DBG_PRINTF((" remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank));
}
#endif
@@ -491,7 +775,7 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
/* synchronize with remote root */
if (rank == root)
{
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"sync with peer");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"sync with peer");
mpi_errno = MPIC_Sendrecv(&i, 0, MPI_INT, 0,
sendtag++, &j, 0, MPI_INT,
0, recvtag++, tmp_comm,
@@ -516,9 +800,9 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
}
fn_exit:
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"Exiting ch3u_comm_connect");
- MPIU_CHKLMEM_FREEALL();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_COMM_CONNECT);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Exiting ch3u_comm_connect");
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_CONNECT);
return mpi_errno;
fn_fail:
{
@@ -528,7 +812,7 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
if (mpi_errno2) MPIR_ERR_SET(mpi_errno2, MPI_ERR_OTHER, "**fail");
}
- if (recvcontext_id != MPIU_INVALID_CONTEXT_ID)
+ if (recvcontext_id != MPIR_INVALID_CONTEXT_ID)
MPIR_Free_contextid(recvcontext_id);
if (mpi_errno2) MPIR_ERR_ADD(mpi_errno, mpi_errno2);
@@ -537,17 +821,22 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
}
no_port:
{
+ int mpi_errno_noport = MPI_SUCCESS;
int mpi_errno2 = MPI_SUCCESS;
/* broadcast error notification to other processes */
- MPIU_Assert(rank == root);
+ MPIR_Assert(rank == root);
recv_ints[0] = -1;
recv_ints[1] = -1;
recv_ints[2] = -1;
- MPIR_ERR_SET1(mpi_errno, MPI_ERR_PORT, "**portexist", "**portexist %s", port_name);
+
+ /* append no port error message */
+ MPIR_ERR_SET1(mpi_errno_noport, MPI_ERR_PORT, "**portexist", "**portexist %s", port_name);
+ MPIR_ERR_ADD(mpi_errno_noport, mpi_errno);
+ mpi_errno = mpi_errno_noport;
/* notify other processes to return an error */
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"broadcasting 3 ints: error case");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"broadcasting 3 ints: error case");
mpi_errno2 = MPIR_Bcast_intra(recv_ints, 3, MPI_INT, root, comm_ptr, &errflag);
if (mpi_errno2) MPIR_ERR_ADD(mpi_errno, mpi_errno2);
if (errflag) {
@@ -574,17 +863,17 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
#define FUNCNAME ExtractLocalPGInfo
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int ExtractLocalPGInfo( MPID_Comm *comm_p,
+static int ExtractLocalPGInfo( MPIR_Comm *comm_p,
pg_translation local_translation[],
pg_node **pg_list_p,
int *n_local_pgs_p )
{
pg_node *pg_list = 0, *pg_iter, *pg_trailer;
int i, cur_index = 0, local_comm_size, mpi_errno = 0;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_EXTRACTLOCALPGINFO);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_EXTRACTLOCALPGINFO);
- MPIDI_FUNC_ENTER(MPID_STATE_EXTRACTLOCALPGINFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_EXTRACTLOCALPGINFO);
/* If we are in the case of singleton-init, we may need to reset the
id string for comm world. We do this before doing anything else */
@@ -598,20 +887,20 @@ static int ExtractLocalPGInfo( MPID_Comm *comm_p,
group id, size and all its KVS values */
cur_index = 0;
- MPIU_CHKPMEM_MALLOC(pg_list,pg_node*,sizeof(pg_node),mpi_errno,
+ MPIR_CHKPMEM_MALLOC(pg_list,pg_node*,sizeof(pg_node),mpi_errno,
"pg_list");
- pg_list->pg_id = MPIU_Strdup(comm_p->dev.vcrt->vcr_table[0]->pg->id);
+ pg_list->pg_id = MPL_strdup(comm_p->dev.vcrt->vcr_table[0]->pg->id);
pg_list->index = cur_index++;
pg_list->next = NULL;
/* XXX DJG FIXME-MT should we be checking this? the add/release macros already check this */
- MPIU_Assert( MPIU_Object_get_ref(comm_p->dev.vcrt->vcr_table[0]->pg));
+ MPIR_Assert( MPIR_Object_get_ref(comm_p->dev.vcrt->vcr_table[0]->pg));
mpi_errno = MPIDI_PG_To_string(comm_p->dev.vcrt->vcr_table[0]->pg, &pg_list->str,
&pg_list->lenStr );
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_DBG_STMT(CH3_CONNECT,VERBOSE,MPIDI_PrintConnStr(__FILE__,__LINE__,"PG as string is", pg_list->str ));
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CONNECT,VERBOSE,MPIDI_PrintConnStr(__FILE__,__LINE__,"PG as string is", pg_list->str ));
local_translation[0].pg_index = 0;
local_translation[0].pg_rank = comm_p->dev.vcrt->vcr_table[0]->pg_rank;
pg_iter = pg_list;
@@ -621,7 +910,7 @@ static int ExtractLocalPGInfo( MPID_Comm *comm_p,
while (pg_iter != NULL) {
/* Check to ensure pg is (probably) valid */
/* XXX DJG FIXME-MT should we be checking this? the add/release macros already check this */
- MPIU_Assert(MPIU_Object_get_ref(comm_p->dev.vcrt->vcr_table[i]->pg) != 0);
+ MPIR_Assert(MPIR_Object_get_ref(comm_p->dev.vcrt->vcr_table[i]->pg) != 0);
if (MPIDI_PG_Id_compare(comm_p->dev.vcrt->vcr_table[i]->pg->id, pg_iter->pg_id)) {
local_translation[i].pg_index = pg_iter->index;
local_translation[i].pg_rank = comm_p->dev.vcrt->vcr_table[i]->pg_rank;
@@ -632,13 +921,13 @@ static int ExtractLocalPGInfo( MPID_Comm *comm_p,
pg_iter = pg_iter->next;
}
if (pg_iter == NULL) {
- /* We use MPIU_Malloc directly because we do not know in
+ /* We use MPL_malloc directly because we do not know in
advance how many nodes we may allocate */
- pg_iter = (pg_node*)MPIU_Malloc(sizeof(pg_node));
+ pg_iter = (pg_node*)MPL_malloc(sizeof(pg_node));
if (!pg_iter) {
MPIR_ERR_POP(mpi_errno);
}
- pg_iter->pg_id = MPIU_Strdup(comm_p->dev.vcrt->vcr_table[i]->pg->id);
+ pg_iter->pg_id = MPL_strdup(comm_p->dev.vcrt->vcr_table[i]->pg->id);
pg_iter->index = cur_index++;
pg_iter->next = NULL;
mpi_errno = MPIDI_PG_To_string(comm_p->dev.vcrt->vcr_table[i]->pg, &pg_iter->str,
@@ -658,17 +947,17 @@ static int ExtractLocalPGInfo( MPID_Comm *comm_p,
#ifdef MPICH_DBG_OUTPUT
pg_iter = pg_list;
while (pg_iter != NULL) {
- MPIU_DBG_PRINTF(("connect:PG: '%s'\n<%s>\n", pg_iter->pg_id, pg_iter->str));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST,"connect:PG: '%s'\n<%s>\n", pg_iter->pg_id, pg_iter->str));
pg_iter = pg_iter->next;
}
#endif
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_EXTRACTLOCALPGINFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_EXTRACTLOCALPGINFO);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -681,7 +970,7 @@ static int ExtractLocalPGInfo( MPID_Comm *comm_p,
#define FUNCNAME ReceivePGAndDistribute
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int ReceivePGAndDistribute( MPID_Comm *tmp_comm, MPID_Comm *comm_ptr,
+static int ReceivePGAndDistribute( MPIR_Comm *tmp_comm, MPIR_Comm *comm_ptr,
int root, int *recvtag_p,
int n_remote_pgs, MPIDI_PG_t *remote_pg[] )
{
@@ -691,9 +980,9 @@ static int ReceivePGAndDistribute( MPID_Comm *tmp_comm, MPID_Comm *comm_ptr,
int mpi_errno = 0;
int recvtag = *recvtag_p;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIDI_STATE_DECL(MPID_STATE_RECEIVEPGANDDISTRIBUTE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_RECEIVEPGANDDISTRIBUTE);
- MPIDI_FUNC_ENTER(MPID_STATE_RECEIVEPGANDDISTRIBUTE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_RECEIVEPGANDDISTRIBUTE);
for (i=0; i<n_remote_pgs; i++) {
@@ -705,7 +994,7 @@ static int ReceivePGAndDistribute( MPID_Comm *tmp_comm, MPID_Comm *comm_ptr,
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- pg_str = (char*)MPIU_Malloc(j);
+ pg_str = (char*)MPL_malloc(j);
if (pg_str == NULL) {
MPIR_ERR_POP(mpi_errno);
}
@@ -725,7 +1014,7 @@ static int ReceivePGAndDistribute( MPID_Comm *tmp_comm, MPID_Comm *comm_ptr,
if (rank != root) {
/* The root has already allocated this string */
- pg_str = (char*)MPIU_Malloc(j);
+ pg_str = (char*)MPL_malloc(j);
if (pg_str == NULL) {
MPIR_ERR_POP(mpi_errno);
}
@@ -737,16 +1026,16 @@ static int ReceivePGAndDistribute( MPID_Comm *tmp_comm, MPID_Comm *comm_ptr,
/* Then reconstruct the received process group. This step
also initializes the created process group */
- MPIU_DBG_STMT(CH3_CONNECT,VERBOSE,MPIDI_PrintConnStr(__FILE__,__LINE__,"Creating pg from string", pg_str ));
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CONNECT,VERBOSE,MPIDI_PrintConnStr(__FILE__,__LINE__,"Creating pg from string", pg_str ));
mpi_errno = MPIDI_PG_Create_from_string(pg_str, &remote_pg[i], &flag);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- MPIU_Free(pg_str);
+ MPL_free(pg_str);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_RECEIVEPGANDDISTRIBUTE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_RECEIVEPGANDDISTRIBUTE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -760,19 +1049,19 @@ static int ReceivePGAndDistribute( MPID_Comm *tmp_comm, MPID_Comm *comm_ptr,
#define FUNCNAME MPID_PG_BCast
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root )
+int MPID_PG_BCast( MPIR_Comm *peercomm_p, MPIR_Comm *comm_p, int root )
{
int n_local_pgs=0, mpi_errno = MPI_SUCCESS;
pg_translation *local_translation = 0;
pg_node *pg_list, *pg_next, *pg_head = 0;
int rank, i, peer_comm_size;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKLMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
peer_comm_size = comm_p->local_size;
rank = comm_p->rank;
- MPIU_CHKLMEM_MALLOC(local_translation,pg_translation*,
+ MPIR_CHKLMEM_MALLOC(local_translation,pg_translation*,
peer_comm_size*sizeof(pg_translation),
mpi_errno,"local_translation");
@@ -808,16 +1097,16 @@ int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root )
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
if (rank != root) {
- pg_str = (char *)MPIU_Malloc(len);
+ pg_str = (char *)MPL_malloc(len);
if (!pg_str) {
- MPIU_CHKMEM_SETERR(mpi_errno, len, "pg_str");
+ MPIR_CHKMEM_SETERR(mpi_errno, len, "pg_str");
goto fn_exit;
}
}
mpi_errno = MPIR_Bcast_impl( pg_str, len, MPI_CHAR, root, comm_p, &errflag);
if (mpi_errno) {
if (rank != root)
- MPIU_Free( pg_str );
+ MPL_free( pg_str );
MPIR_ERR_POP(mpi_errno);
}
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
@@ -832,7 +1121,7 @@ int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root )
(char *)pgptr->id );
fflush(stdout); */
}
- MPIU_Free( pg_str );
+ MPL_free( pg_str );
}
}
@@ -843,16 +1132,16 @@ int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root )
the PG fields are valid for that function */
while (pg_list) {
pg_next = pg_list->next;
- MPIU_Free( pg_list->str );
+ MPL_free( pg_list->str );
if (pg_list->pg_id ) {
- MPIU_Free( pg_list->pg_id );
+ MPL_free( pg_list->pg_id );
}
- MPIU_Free( pg_list );
+ MPL_free( pg_list );
pg_list = pg_next;
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -864,16 +1153,16 @@ int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root )
#define FUNCNAME SendPGtoPeerAndFree
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int SendPGtoPeerAndFree( MPID_Comm *tmp_comm, int *sendtag_p,
+static int SendPGtoPeerAndFree( MPIR_Comm *tmp_comm, int *sendtag_p,
pg_node *pg_list )
{
int mpi_errno = 0;
int sendtag = *sendtag_p, i;
pg_node *pg_iter;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIDI_STATE_DECL(MPID_STATE_SENDPGTOPEERANDFREE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SENDPGTOPEERANDFREE);
- MPIDI_FUNC_ENTER(MPID_STATE_SENDPGTOPEERANDFREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SENDPGTOPEERANDFREE);
while (pg_list != NULL) {
pg_iter = pg_list;
@@ -894,13 +1183,13 @@ static int SendPGtoPeerAndFree( MPID_Comm *tmp_comm, int *sendtag_p,
}
pg_list = pg_list->next;
- MPIU_Free(pg_iter->str);
- MPIU_Free(pg_iter->pg_id);
- MPIU_Free(pg_iter);
+ MPL_free(pg_iter->str);
+ MPL_free(pg_iter->pg_id);
+ MPL_free(pg_iter);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SENDPGTOPEERANDFREE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SENDPGTOPEERANDFREE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -926,13 +1215,13 @@ static int SendPGtoPeerAndFree( MPID_Comm *tmp_comm, int *sendtag_p,
#define FUNCNAME MPIDI_Comm_accept
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
- MPID_Comm *comm_ptr, MPID_Comm **newcomm)
+int MPIDI_Comm_accept(const char *port_name, MPIR_Info *info, int root,
+ MPIR_Comm *comm_ptr, MPIR_Comm **newcomm)
{
int mpi_errno=MPI_SUCCESS;
int i, j, rank, recv_ints[3], send_ints[3], context_id;
int remote_comm_size=0;
- MPID_Comm *tmp_comm = NULL, *intercomm;
+ MPIR_Comm *tmp_comm = NULL, *intercomm;
MPIDI_VC_t *new_vc = NULL;
int sendtag=100, recvtag=100, local_comm_size;
int n_local_pgs=1, n_remote_pgs;
@@ -940,10 +1229,10 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
pg_node *pg_list = NULL;
MPIDI_PG_t **remote_pg = NULL;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKLMEM_DECL(3);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_COMM_ACCEPT);
+ MPIR_CHKLMEM_DECL(3);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_ACCEPT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_ACCEPT);
/* Create the new intercommunicator here. We need to send the
context id to the other side. */
@@ -971,7 +1260,7 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
/* Make an array to translate local ranks to process group index and
rank */
- MPIU_CHKLMEM_MALLOC(local_translation,pg_translation*,
+ MPIR_CHKLMEM_MALLOC(local_translation,pg_translation*,
local_comm_size*sizeof(pg_translation),
mpi_errno,"local_translation");
@@ -1009,13 +1298,13 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
n_remote_pgs = recv_ints[0];
remote_comm_size = recv_ints[1];
context_id = recv_ints[2];
- MPIU_CHKLMEM_MALLOC(remote_pg,MPIDI_PG_t**,
+ MPIR_CHKLMEM_MALLOC(remote_pg,MPIDI_PG_t**,
n_remote_pgs * sizeof(MPIDI_PG_t*),
mpi_errno,"remote_pg");
- MPIU_CHKLMEM_MALLOC(remote_translation,pg_translation*,
+ MPIR_CHKLMEM_MALLOC(remote_translation,pg_translation*,
remote_comm_size * sizeof(pg_translation),
mpi_errno, "remote_translation");
- MPIU_DBG_PRINTF(("[%d]accept:remote process groups: %d\nremote comm size: %d\n", rank, n_remote_pgs, remote_comm_size));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST,"[%d]accept:remote process groups: %d\nremote comm size: %d\n", rank, n_remote_pgs, remote_comm_size));
/* Exchange the process groups and their corresponding KVSes */
if (rank == root)
@@ -1024,8 +1313,10 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
distributes them to the processes in comm_ptr */
mpi_errno = ReceivePGAndDistribute( tmp_comm, comm_ptr, root, &recvtag,
n_remote_pgs, remote_pg );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
mpi_errno = SendPGtoPeerAndFree( tmp_comm, &sendtag, pg_list );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* Receive the translations from remote process rank to process group index */
/*printf("accept:sending %d ints and receiving %d ints\n", local_comm_size * 2, remote_comm_size * 2);fflush(stdout);*/
@@ -1034,11 +1325,13 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
remote_translation, remote_comm_size * 2,
MPI_INT, 0, recvtag++, tmp_comm,
MPI_STATUS_IGNORE, &errflag);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
#ifdef MPICH_DBG_OUTPUT
- MPIU_DBG_PRINTF(("[%d]accept:Received remote_translation:\n", rank));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE,"[%d]accept:Received remote_translation:\n", rank);
for (i=0; i<remote_comm_size; i++)
{
- MPIU_DBG_PRINTF((" remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank));
}
#endif
@@ -1051,16 +1344,16 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
}
/* Broadcast out the remote rank translation array */
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"Broadcast remote_translation");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Broadcast remote_translation");
mpi_errno = MPIR_Bcast_intra(remote_translation, remote_comm_size * 2, MPI_INT,
root, comm_ptr, &errflag);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
#ifdef MPICH_DBG_OUTPUT
- MPIU_DBG_PRINTF(("[%d]accept:Received remote_translation after broadcast:\n", rank));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE,"[%d]accept:Received remote_translation after broadcast:\n", rank);
for (i=0; i<remote_comm_size; i++)
{
- MPIU_DBG_PRINTF((" remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank));
}
#endif
@@ -1080,7 +1373,7 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
/* synchronize with remote root */
if (rank == root)
{
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"sync with peer");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"sync with peer");
mpi_errno = MPIC_Sendrecv(&i, 0, MPI_INT, 0,
sendtag++, &j, 0, MPI_INT,
0, recvtag++, tmp_comm,
@@ -1093,7 +1386,7 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
MPIR_Comm_release(tmp_comm);
}
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"Barrier");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Barrier");
mpi_errno = MPIR_Barrier_intra(comm_ptr, &errflag);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -1107,8 +1400,8 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_COMM_ACCEPT);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_ACCEPT);
return mpi_errno;
fn_fail:
@@ -1143,10 +1436,10 @@ Input/Output Parameters:
#define FUNCNAME SetupNewIntercomm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int SetupNewIntercomm( MPID_Comm *comm_ptr, int remote_comm_size,
+static int SetupNewIntercomm( MPIR_Comm *comm_ptr, int remote_comm_size,
pg_translation remote_translation[],
MPIDI_PG_t **remote_pg,
- MPID_Comm *intercomm )
+ MPIR_Comm *intercomm )
{
int mpi_errno = MPI_SUCCESS, i;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
@@ -1160,7 +1453,7 @@ static int SetupNewIntercomm( MPID_Comm *comm_ptr, int remote_comm_size,
intercomm->rank = comm_ptr->rank;
intercomm->local_group = NULL;
intercomm->remote_group = NULL;
- intercomm->comm_kind = MPID_INTERCOMM;
+ intercomm->comm_kind = MPIR_COMM_KIND__INTERCOMM;
intercomm->local_comm = NULL;
intercomm->coll_fns = NULL;
@@ -1181,7 +1474,7 @@ static int SetupNewIntercomm( MPID_Comm *comm_ptr, int remote_comm_size,
mpi_errno = MPIR_Comm_commit(intercomm);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"Barrier");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Barrier");
mpi_errno = MPIR_Barrier_intra(comm_ptr, &errflag);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -1223,7 +1516,7 @@ static int FreeNewVC( MPIDI_VC_t *new_vc )
}
MPIDI_CH3_VC_Destroy(new_vc);
- MPIU_Free(new_vc);
+ MPL_free(new_vc);
fn_fail:
return mpi_errno;
@@ -1246,110 +1539,515 @@ static int FreeNewVC( MPIDI_VC_t *new_vc )
designed and documented.
*/
-typedef struct MPIDI_CH3I_Acceptq_s
+/* Enqueue a connection request from client. This routine is called from netmod
+ * (i.e., TCP) if received dynamic connection from others. If port exists, we
+ * enqueue the request to that port's accept queue to wait for an accept call to
+ * serve it; otherwise, such request should be discarded, thus we immediately send
+ * nack back to client and start closing. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Acceptq_enqueue
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Acceptq_enqueue(MPIDI_VC_t * vc, int port_name_tag )
{
- struct MPIDI_VC *vc;
- int port_name_tag;
- struct MPIDI_CH3I_Acceptq_s *next;
+ int mpi_errno=MPI_SUCCESS;
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL;
+ MPIDI_CH3I_Port_t *port = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE);
+
+ MPL_LL_SEARCH_SCALAR(active_portq.head, port, port_name_tag, port_name_tag);
+
+ /* Find port object by using port_name_tag. */
+ mpi_errno = MPIDI_CH3I_Port_connreq_create(vc, &connreq);
+ MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Can't create communicator connection object.");
+
+ /* No port exists if port is not opened or already closed (incorrect user code).
+ * Thus we just start closing VC here. */
+ if (port == NULL) {
+ /* Notify connecting client. */
+ mpi_errno = MPIDI_CH3I_Port_issue_conn_ack(connreq->vc, FALSE /* closed port */);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Start VC closing protocol. */
+ mpi_errno = MPIDI_CH3I_Port_local_close_vc(connreq->vc);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, FREE);
+
+ /* Enqueue unexpected VC to avoid waiting progress recursively.
+ * these VCs will be freed in finalize. */
+ MPIDI_CH3I_Port_connreq_q_enqueue(&unexpt_connreq_q, connreq);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "Enqueued conn %p to unexpected queue with tag %d, vc=%p",
+ connreq, port_name_tag, vc));
+ }
+ else {
+ /* Enqueue to accept queue, thus next accept call can serve it. */
+ MPIDI_CH3I_Port_connreq_q_enqueue(&port->accept_connreq_q, connreq);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "Enqueued conn %p to accept queue with tag %d, vc=%p",
+ connreq, port_name_tag, vc));
+
+ /* signal for new enqueued VC, thus progress wait can return in accept. */
+ MPIDI_CH3_Progress_signal_completion();
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE);
+ return mpi_errno;
+ fn_fail:
+ if (connreq)
+ MPIDI_CH3I_Port_connreq_free(connreq);
+ goto fn_exit;
}
-MPIDI_CH3I_Acceptq_t;
-static MPIDI_CH3I_Acceptq_t * acceptq_head=0;
-static int maxAcceptQueueSize = 0;
-static int AcceptQueueSize = 0;
+/* Attempt to dequeue a connection request from the accept queue. If the queue
+ * is empty return a NULL object. */
#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3I_Acceptq_enqueue
+#define FUNCNAME MPIDI_CH3I_Acceptq_dequeue
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Acceptq_enqueue(MPIDI_VC_t * vc, int port_name_tag )
+int MPIDI_CH3I_Acceptq_dequeue(MPIDI_CH3I_Port_connreq_t ** connreq_ptr, int port_name_tag)
{
int mpi_errno=MPI_SUCCESS;
- MPIDI_CH3I_Acceptq_t *q_item;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE);
+ MPIDI_CH3I_Port_t *port = NULL;
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE);
- /* FIXME: Use CHKPMEM */
- q_item = (MPIDI_CH3I_Acceptq_t *)
- MPIU_Malloc(sizeof(MPIDI_CH3I_Acceptq_t));
- /* --BEGIN ERROR HANDLING-- */
- if (q_item == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDI_CH3I_Acceptq_t" );
- goto fn_exit;
+ /* Find port object by using port_name_tag. */
+ MPL_LL_SEARCH_SCALAR(active_portq.head, port, port_name_tag, port_name_tag);
+ MPIR_Assert(port != NULL); /* Port is always initialized in open_port. */
+
+ MPIDI_CH3I_Port_connreq_q_dequeue(&port->accept_connreq_q, connreq_ptr);
+ if ((*connreq_ptr) != NULL) {
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "conn=%p:Dequeued accept connection with tag %d, vc=%p",
+ (*connreq_ptr), port_name_tag, (*connreq_ptr)->vc));
}
- /* --END ERROR HANDLING-- */
- q_item->vc = vc;
- q_item->port_name_tag = port_name_tag;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE);
+ return mpi_errno;
+}
+
+/* Clean up received new VCs that are not accepted or closed in accept
+ * calls (e.g., mismatching accept and connect).This routine is called in
+ * MPIDI_CH3I_Port_destroy(close_port) and MPIDI_Port_finalize (finalize).
+ * Note that we already deleted port from active_port queue before cleaning up
+ * its accept queue, thus no new VC can be enqueued concurrently. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Acceptq_cleanup
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Acceptq_cleanup(MPIDI_CH3I_Port_connreq_q_t * accept_connreq_q)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL, *connreq_tmp = NULL;
- /* Keep some statistics on the accept queue */
- AcceptQueueSize++;
- if (AcceptQueueSize > maxAcceptQueueSize)
- maxAcceptQueueSize = AcceptQueueSize;
+ MPL_LL_FOREACH_SAFE(accept_connreq_q->head, connreq, connreq_tmp) {
+ MPIDI_CH3I_Port_connreq_q_delete(accept_connreq_q, connreq);
- /* FIXME: Stack or queue? */
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"vc=%p:Enqueuing accept connection",vc);
- q_item->next = acceptq_head;
- acceptq_head = q_item;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_ACCEPTQ_ENQUEUE);
+ /* Notify connecting client. */
+ mpi_errno = MPIDI_CH3I_Port_issue_conn_ack(connreq->vc, FALSE /* closed port */);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Start VC closing protocol. */
+ mpi_errno = MPIDI_CH3I_Port_local_close_vc(connreq->vc);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, FREE);
+
+ /* Free connection request (blocking wait till VC closed). */
+ mpi_errno = MPIDI_CH3I_Port_connreq_free(connreq);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ MPIR_Assert(accept_connreq_q->size == 0);
+
+ fn_exit:
return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
-/* Attempt to dequeue a vc from the accept queue. If the queue is
- empty or the port_name_tag doesn't match, return a NULL vc. */
+/*** Utility routines for revoked connection requests ***/
+
+/* Clean up revoked requests in connect (e.g., timed out connect).
+ * We do not want to wait for these VCs being freed in timed out connect,
+ * because it is blocked till the server calls a matching accept or close_port.
+ * This routine is called in finalize on client process. */
#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3I_Acceptq_dequeue
+#define FUNCNAME MPIDI_CH3I_Revokeq_cleanup
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Acceptq_dequeue(MPIDI_VC_t ** vc, int port_name_tag)
+static int MPIDI_CH3I_Revokeq_cleanup(void)
{
- int mpi_errno=MPI_SUCCESS;
- MPIDI_CH3I_Acceptq_t *q_item, *prev;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE);
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL, *connreq_tmp = NULL;
+
+ MPL_LL_FOREACH_SAFE(revoked_connreq_q.head, connreq, connreq_tmp) {
+ MPID_Progress_state progress_state;
+ MPIDI_CH3I_Port_connreq_q_delete(&revoked_connreq_q, connreq);
+
+ /* Blocking wait till the request is freed on server. */
+ if (connreq->stat != MPIDI_CH3I_PORT_CONNREQ_FREE) {
+ MPID_Progress_start(&progress_state);
+ do {
+ mpi_errno = MPID_Progress_wait(&progress_state);
+ /* --BEGIN ERROR HANDLING-- */
+ if (mpi_errno != MPI_SUCCESS) {
+ MPID_Progress_end(&progress_state);
+ MPIR_ERR_POP(mpi_errno);
+ }
+ /* --END ERROR HANDLING-- */
+ } while (connreq->stat != MPIDI_CH3I_PORT_CONNREQ_FREE);
+ MPID_Progress_end(&progress_state);
+ }
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE);
+ /* Release connection (blocking wait till VC closed). */
+ MPIDI_CH3I_Port_connreq_free(connreq);
+ }
- *vc = NULL;
- q_item = acceptq_head;
- prev = q_item;
+ MPIR_Assert(revoked_connreq_q.size == 0);
- while (q_item != NULL)
- {
- if (q_item->port_name_tag == port_name_tag)
- {
- *vc = q_item->vc;
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
- if ( q_item == acceptq_head )
- acceptq_head = q_item->next;
- else
- prev->next = q_item->next;
+/*** Packet handlers exposed to progress engine ***/
- MPIU_Free(q_item);
- AcceptQueueSize--;
- break;;
- }
- else
- {
- prev = q_item;
- q_item = q_item->next;
- }
+/* Packet handler to handle response (connection ACK) on client process. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3_PktHandler_ConnAck
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3_PktHandler_ConnAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
+ void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
+{
+ MPIDI_CH3_Pkt_conn_ack_t *ack_pkt = &pkt->conn_ack;
+ MPIDI_CH3I_Port_connreq_t *connreq = (MPIDI_CH3I_Port_connreq_t *) (vc->connreq_obj);
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_Assert(connreq != NULL);
+
+ /* Report unknown error, unexpectedly get response for remote
+ * revoked connection. */
+ if (connreq->stat != MPIDI_CH3I_PORT_CONNREQ_INITED &&
+ connreq->stat != MPIDI_CH3I_PORT_CONNREQ_REVOKE)
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_INTERN, "**unknown");
+
+ if (ack_pkt->ack == TRUE) {
+ if (connreq->stat == MPIDI_CH3I_PORT_CONNREQ_INITED) {
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "received ACK true for vc %p: inited->accepted", vc));
+
+ /* Reply to server */
+ mpi_errno = MPIDI_CH3I_Port_issue_accept_ack(connreq->vc, TRUE /* accept matched */);
+ MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Cannot issue accept-matched packet");
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, ACCEPTED);
+ }
+ else if (connreq->stat == MPIDI_CH3I_PORT_CONNREQ_REVOKE) {
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "received ACK true for vc %p: revoke->free", vc));
+
+ /* Reply to server */
+ mpi_errno = MPIDI_CH3I_Port_issue_accept_ack(connreq->vc, FALSE /* locally revoked */);
+ MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Cannot issue revoke packet");
+
+ /* Start freeing connection request.
+ * Note that we do not blocking close VC here, instead, we close VC
+ * in MPIDI_CH3I_Revokeq_cleanup at finalize. This is because
+ * VC close packets might be received following this packet, thus if
+ * we blocked here we can never read that packet. */
+ mpi_errno = MPIDI_CH3I_Port_local_close_vc(connreq->vc);
+ MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Cannot locally close VC");
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, FREE);
+ }
}
-
- mpi_errno = MPIDI_CH3_Complete_Acceptq_dequeue(*vc);
+ else { /* ack == FALSE */
+ if (connreq->stat == MPIDI_CH3I_PORT_CONNREQ_INITED) {
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "received ACK false for vc %p: inited->err_close", vc));
+
+ /* Server closed port without issuing accept, client
+ * connect call will catch this error and return MPI_ERR_PORT. */
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, ERR_CLOSE);
+ }
+ else if (connreq->stat == MPIDI_CH3I_PORT_CONNREQ_REVOKE) {
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "received ACK false for vc %p: revoke->free", vc));
+
+ /* Start VC closing, and set connection ready-for-free. */
+ mpi_errno = MPIDI_CH3I_Port_local_close_vc(connreq->vc);
+ MPIR_ERR_CHKINTERNAL(mpi_errno, mpi_errno, "Cannot locally close VC");
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, FREE);
+ }
+ }
+
+ *buflen = 0;
+ *rreqp = NULL;
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+/* Packet handler to handle response (acceptance ACK) on server process. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3_PktHandler_AcceptAck
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3_PktHandler_AcceptAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
+ void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
+{
+ MPIDI_CH3_Pkt_accept_ack_t *ack_pkt = &pkt->accept_ack;
+ MPIDI_CH3I_Port_connreq_t *connreq = (MPIDI_CH3I_Port_connreq_t *) (vc->connreq_obj);
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_Assert(connreq != NULL);
+
+ /* Acceptance matched, finish accept. */
+ if (ack_pkt->ack == TRUE) {
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "received (accept) ACK true for vc %p: accept->match", vc));
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, ACCEPTED);
+ }
+ else {
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT, VERBOSE,
+ (MPL_DBG_FDEST, "received (accept) ACK false for vc %p: accept->close",
+ vc));
+
+ /* Client already left, close VC.
+ * Note that accept call does not return when client timed out,
+ * thus we only change the state and let accept call handle closing. */
+ mpi_errno = MPIDI_CH3I_Port_local_close_vc(connreq->vc);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, FREE);
+ }
+
+ *buflen = 0;
+ *rreqp = NULL;
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+/*** Routines for connection request creation and freeing ***/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_connreq_create
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Port_connreq_create(MPIDI_VC_t * vc, MPIDI_CH3I_Port_connreq_t ** connreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL;
+
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_MALLOC(connreq, MPIDI_CH3I_Port_connreq_t *, sizeof(MPIDI_CH3I_Port_connreq_t),
+ mpi_errno, "comm_conn");
+
+ connreq->vc = vc;
+ MPIDI_CH3I_PORT_CONNREQ_SET_STAT(connreq, INITED);
+
+ /* Netmod may not change VC to active when connection established (i.e., sock).
+ * Instead, it is changed in CH3 layer (e.g., isend, RMA).*/
+ if (vc->state == MPIDI_VC_STATE_INACTIVE)
+ MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
+
+ vc->connreq_obj = (void *) connreq; /* to get connection request in packet handlers */
+ *connreq_ptr = connreq;
+
+ fn_exit:
+ MPIR_CHKPMEM_COMMIT();
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_connreq_free
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDI_CH3I_Port_connreq_free(MPIDI_CH3I_Port_connreq_t * connreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ /* Skip if connection request is still in revoked state.
+ * Because packet handler may be talking to server. */
+ if (connreq->stat == MPIDI_CH3I_PORT_CONNREQ_REVOKE)
+ return mpi_errno;
+
+ /* Expected free, the remote side should also start closing too,
+ * thus we blocking close VC here. */
+ if (connreq->stat == MPIDI_CH3I_PORT_CONNREQ_FREE) {
+ mpi_errno = FreeNewVC(connreq->vc);
+ }
+ else {
+ /* Unexpected free, the remote side might not be able to close
+ * VC at this point. Thus we cannot blocking close VC. */
+ mpi_errno = MPIDI_CH3_VC_Destroy(connreq->vc);
+ }
+
+ /* Always free connection request.
+ * Because it is only used in connect/accept routine. */
+ MPL_free(connreq);
+
+ return mpi_errno;
+}
+
+
+/*** Routines to initialize / destroy dynamic connection ***/
+
+/* Initialize port's accept queue. It is called in MPIDI_Open_port. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Port_init(int port_name_tag)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_Port_t *port = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PORT_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PORT_INIT);
+
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_MALLOC(port, MPIDI_CH3I_Port_t *, sizeof(MPIDI_CH3I_Port_t),
+ mpi_errno, "comm_port");
+
+ port->port_name_tag = port_name_tag;
+ port->accept_connreq_q.head = port->accept_connreq_q.tail = 0;
+ port->accept_connreq_q.size = 0;
+ port->next = NULL;
+
+ MPL_LL_APPEND(active_portq.head, active_portq.tail, port);
+ active_portq.size++;
+
+ fn_exit:
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PORT_INIT);
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+/* Destroy port's accept queue. It is called in MPIDI_Close_port. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH3I_Port_destroy
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CH3I_Port_destroy(int port_name_tag)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH3I_Port_t *port = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PORT_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_PORT_DESTROY);
+
+ MPL_LL_SEARCH_SCALAR(active_portq.head, port, port_name_tag, port_name_tag);
+ if (port != NULL) {
+ MPL_LL_DELETE(active_portq.head, active_portq.tail, port);
+
+ mpi_errno = MPIDI_CH3I_Acceptq_cleanup(&port->accept_connreq_q);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,
- (MPIU_DBG_FDEST,"vc=%p:Dequeuing accept connection with tag %d",
- *vc,port_name_tag));
+ MPL_free(port);
+ active_portq.size--;
+ }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_ACCEPTQ_DEQUEUE);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_PORT_DESTROY);
return mpi_errno;
+ fn_fail:
+ goto fn_exit;
}
+/* This routine is called by MPID_Finalize to clean up dynamic connections. */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Port_finalize
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_Port_finalize(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PORT_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PORT_FINALIZE);
+
+ /* Server side clean up. */
+
+ /* - Clean up all active ports.
+ * Note that if a process is both server and client, we will never
+ * deadlock here because only server cleanup issues closing packets.
+ * All closing process on client is handled in progress. */
+ {
+ MPIDI_CH3I_Port_t *port = NULL, *port_tmp = NULL;
+
+ MPL_LL_FOREACH_SAFE(active_portq.head, port, port_tmp) {
+ /* destroy all opening ports. */
+ MPL_LL_DELETE(active_portq.head, active_portq.tail, port);
+
+ mpi_errno = MPIDI_CH3I_Acceptq_cleanup(&port->accept_connreq_q);
+ MPL_free(port);
+ active_portq.size--;
+ }
+ MPIR_Assert(active_portq.size == 0);
+ }
+
+ /* - Destroy all unexpected connection requests.
+ * The closing protocol already started when we got them in acceptq_enqueue,
+ * so just blocking wait for final release. */
+ {
+ MPIDI_CH3I_Port_connreq_t *connreq = NULL, *connreq_tmp = NULL;
+
+ MPL_LL_FOREACH_SAFE(unexpt_connreq_q.head, connreq, connreq_tmp) {
+ MPIDI_CH3I_Port_connreq_q_delete(&unexpt_connreq_q, connreq);
+ mpi_errno = MPIDI_CH3I_Port_connreq_free(connreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ MPIR_Assert(unexpt_connreq_q.size == 0);
+ }
+
+ /* Client side clean up. */
+
+ /* - Destroy all revoked connection requests. */
+ mpi_errno = MPIDI_CH3I_Revokeq_cleanup();
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PORT_FINALIZE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
#else /* MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS is defined */
#endif /* MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS */
diff --git a/src/mpid/ch3/src/ch3u_recvq.c b/src/mpid/ch3/src/ch3u_recvq.c
index 4518cb4..8eced2f 100644
--- a/src/mpid/ch3/src/ch3u_recvq.c
+++ b/src/mpid/ch3/src/ch3u_recvq.c
@@ -43,10 +43,10 @@
*
*/
-static MPID_Request * recvq_posted_head = 0;
-static MPID_Request * recvq_posted_tail = 0;
-static MPID_Request * recvq_unexpected_head = 0;
-static MPID_Request * recvq_unexpected_tail = 0;
+static MPIR_Request * recvq_posted_head = 0;
+static MPIR_Request * recvq_posted_tail = 0;
+static MPIR_Request * recvq_unexpected_head = 0;
+static MPIR_Request * recvq_unexpected_tail = 0;
/* Export the location of the queue heads if debugger support is enabled.
* This allows the queue code to rely on the local variables for the
@@ -55,8 +55,8 @@ static MPID_Request * recvq_unexpected_tail = 0;
* access the message queues.
*/
#ifdef HAVE_DEBUGGER_SUPPORT
-MPID_Request ** const MPID_Recvq_posted_head_ptr = &recvq_posted_head;
-MPID_Request ** const MPID_Recvq_unexpected_head_ptr = &recvq_unexpected_head;
+MPIR_Request ** const MPID_Recvq_posted_head_ptr = &recvq_posted_head;
+MPIR_Request ** const MPID_Recvq_unexpected_head_ptr = &recvq_unexpected_head;
#endif
/* If the MPIDI_Message_match structure fits into a pointer size, we
@@ -92,15 +92,15 @@ MPID_Request ** const MPID_Recvq_unexpected_head_ptr = &recvq_unexpected_head;
((match1).parts.context_id == (match2).parts.context_id)))
-MPIR_T_PVAR_UINT_LEVEL_DECL_STATIC(RECVQ, posted_recvq_length);
-MPIR_T_PVAR_UINT_LEVEL_DECL_STATIC(RECVQ, unexpected_recvq_length);
-MPIR_T_PVAR_ULONG2_COUNTER_DECL_STATIC(RECVQ, posted_recvq_match_attempts);
-MPIR_T_PVAR_ULONG2_COUNTER_DECL_STATIC(RECVQ, unexpected_recvq_match_attempts);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_STATIC(RECVQ, time_failed_matching_postedq);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_STATIC(RECVQ, time_matching_unexpectedq);
+static unsigned PVAR_LEVEL_posted_recvq_length ATTRIBUTE((unused));
+static unsigned PVAR_LEVEL_unexpected_recvq_length ATTRIBUTE((unused));
+static unsigned long long PVAR_COUNTER_posted_recvq_match_attempts ATTRIBUTE((unused));
+static unsigned long long PVAR_COUNTER_unexpected_recvq_match_attempts ATTRIBUTE((unused));
+static MPIR_T_pvar_timer_t PVAR_TIMER_time_failed_matching_postedq ATTRIBUTE((unused));
+static MPIR_T_pvar_timer_t PVAR_TIMER_time_matching_unexpectedq ATTRIBUTE((unused));
/* used in ch3u_eager.c and ch3u_handle_recv_pkt.c */
-MPIR_T_PVAR_ULONG2_LEVEL_DECL(RECVQ, unexpected_recvq_buffer_size);
+unsigned long long PVAR_LEVEL_unexpected_recvq_buffer_size ATTRIBUTE((unused));
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3U_Recvq_init
@@ -213,12 +213,12 @@ fn_fail:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3U_Recvq_FU(int source, int tag, int context_id, MPI_Status *s)
{
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found = 0;
MPIDI_Message_match match, mask;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FU);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FU);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FU);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FU);
rreq = recvq_unexpected_head;
@@ -270,7 +270,7 @@ int MPIDI_CH3U_Recvq_FU(int source, int tag, int context_id, MPI_Status *s)
found = 1;
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FU);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FU);
return found;
}
@@ -290,18 +290,18 @@ int MPIDI_CH3U_Recvq_FU(int source, int tag, int context_id, MPI_Status *s)
#define FUNCNAME MPIDI_CH3U_Recvq_FDU
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-MPID_Request * MPIDI_CH3U_Recvq_FDU(MPI_Request sreq_id,
+MPIR_Request * MPIDI_CH3U_Recvq_FDU(MPI_Request sreq_id,
MPIDI_Message_match * match)
{
- MPID_Request * rreq;
- MPID_Request * prev_rreq;
- MPID_Request * cur_rreq;
- MPID_Request * matching_prev_rreq;
- MPID_Request * matching_cur_rreq;
+ MPIR_Request * rreq;
+ MPIR_Request * prev_rreq;
+ MPIR_Request * cur_rreq;
+ MPIR_Request * matching_prev_rreq;
+ MPIR_Request * matching_cur_rreq;
MPIDI_Message_match mask;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDU);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDU);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDU);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDU);
matching_prev_rreq = NULL;
matching_cur_rreq = NULL;
@@ -361,7 +361,7 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU(MPI_Request sreq_id,
rreq = NULL;
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDU);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDU);
return rreq;
}
@@ -373,15 +373,15 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU(MPI_Request sreq_id,
#define FUNCNAME MPIDI_CH3U_Recvq_FDU_matchonly
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-MPID_Request * MPIDI_CH3U_Recvq_FDU_matchonly(int source, int tag, int context_id, MPID_Comm *comm, int *foundp)
+MPIR_Request * MPIDI_CH3U_Recvq_FDU_matchonly(int source, int tag, int context_id, MPIR_Comm *comm, int *foundp)
{
int found = FALSE;
- MPID_Request *rreq, *prev_rreq;
+ MPIR_Request *rreq, *prev_rreq;
MPIDI_Message_match match;
MPIDI_Message_match mask;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY);
/* Store how much time is spent traversing the queue */
MPIR_T_PVAR_TIMER_START(RECVQ, time_matching_unexpectedq);
@@ -468,7 +468,7 @@ lock_exit:
*foundp = found;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_MATCHONLY);
return rreq;
}
@@ -490,18 +490,18 @@ lock_exit:
#define FUNCNAME MPIDI_CH3U_Recvq_FDU_or_AEP
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
- int context_id, MPID_Comm *comm, void *user_buf,
+MPIR_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
+ int context_id, MPIR_Comm *comm, void *user_buf,
MPI_Aint user_count, MPI_Datatype datatype, int * foundp)
{
int mpi_errno = MPI_SUCCESS;
int found = FALSE;
- MPID_Request *rreq, *prev_rreq;
+ MPIR_Request *rreq, *prev_rreq;
MPIDI_Message_match match;
MPIDI_Message_match mask;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP);
/* Store how much time is spent traversing the queue */
MPIR_T_PVAR_TIMER_START(RECVQ, time_matching_unexpectedq);
@@ -652,7 +652,7 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
if (found)
MPIR_T_PVAR_TIMER_END(RECVQ, time_matching_unexpectedq);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDU_OR_AEP);
return rreq;
}
@@ -669,15 +669,15 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
#define FUNCNAME MPIDI_CH3U_Recvq_DP
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Recvq_DP(MPID_Request * rreq)
+int MPIDI_CH3U_Recvq_DP(MPIR_Request * rreq)
{
int found;
- MPID_Request * cur_rreq;
- MPID_Request * prev_rreq;
+ MPIR_Request * cur_rreq;
+ MPIR_Request * prev_rreq;
int dequeue_failed;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_DP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_DP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_DP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_DP);
found = FALSE;
prev_rreq = NULL;
@@ -715,7 +715,7 @@ int MPIDI_CH3U_Recvq_DP(MPID_Request * rreq)
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_DP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_DP);
return found;
}
@@ -742,17 +742,17 @@ int MPIDI_CH3U_Recvq_DP(MPID_Request * rreq)
#define FUNCNAME MPIDI_CH3U_Recvq_FDP_or_AEU
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
+MPIR_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
int * foundp)
{
int found;
- MPID_Request * rreq;
- MPID_Request * prev_rreq;
+ MPIR_Request * rreq;
+ MPIR_Request * prev_rreq;
int channel_matched;
int error_bit_masked = 0, proc_failure_bit_masked = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU);
/* Unset the error bit if it is set on the incoming packet so we don't
* have to mask it every time. It will get reset at the end of the loop or
@@ -806,7 +806,7 @@ MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
* revoked. If so, just throw this request away since it won't be used
* anyway. */
{
- MPID_Comm *comm_ptr;
+ MPIR_Comm *comm_ptr;
int mpi_errno ATTRIBUTE((unused)) = MPI_SUCCESS;
MPIDI_CH3I_Comm_find(match->parts.context_id, &comm_ptr);
@@ -815,10 +815,10 @@ MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
comm_ptr->revoked && MPIR_TAG_MASK_ERROR_BITS(match->parts.tag) != MPIR_SHRINK_TAG) {
*foundp = FALSE;
MPIDI_Request_create_null_rreq( rreq, mpi_errno, found=FALSE;goto lock_exit );
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE,
- (MPIU_DBG_FDEST, "RECEIVED MESSAGE FOR REVOKED COMM (tag=%d,src=%d,cid=%d)\n", MPIR_TAG_MASK_ERROR_BITS(match->parts.tag), match->parts.rank, comm_ptr->context_id));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE,
+ (MPL_DBG_FDEST, "RECEIVED MESSAGE FOR REVOKED COMM (tag=%d,src=%d,cid=%d)\n", MPIR_TAG_MASK_ERROR_BITS(match->parts.tag), match->parts.rank, comm_ptr->context_id));
return rreq;
}
}
@@ -829,7 +829,7 @@ MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
int mpi_errno ATTRIBUTE((unused)) = 0;
MPIDI_Request_create_rreq( rreq, mpi_errno,
found=FALSE;goto lock_exit );
- MPIU_Assert(mpi_errno == 0);
+ MPIR_Assert(mpi_errno == 0);
rreq->dev.recv_pending_count = 1;
/* Reset the error bits if we unset it earlier. */
if (error_bit_masked) MPIR_TAG_SET_ERROR_BIT(match->parts.tag);
@@ -856,12 +856,12 @@ MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
*foundp = found;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_RECVQ_FDP_OR_AEU);
return rreq;
}
/* returns TRUE iff the request was sent on the vc */
-static inline int req_uses_vc(const MPID_Request* req, const MPIDI_VC_t *vc)
+static inline int req_uses_vc(const MPIR_Request* req, const MPIDI_VC_t *vc)
{
MPIDI_VC_t *vc1;
@@ -875,9 +875,9 @@ static inline int req_uses_vc(const MPID_Request* req, const MPIDI_VC_t *vc)
#define FCNAME MPL_QUOTE(FUNCNAME)
/* This dequeues req from the posted recv queue, set req's error code to comm_fail, and updates the req pointer.
Note that this creates a new error code if one hasn't already been created (i.e., if *error is MPI_SUCCESS). */
-static inline void dequeue_and_set_error(MPID_Request **req, MPID_Request *prev_req, MPID_Request **head, MPID_Request **tail, int *error, int rank)
+static inline void dequeue_and_set_error(MPIR_Request **req, MPIR_Request *prev_req, MPIR_Request **head, MPIR_Request **tail, int *error, int rank)
{
- MPID_Request *next = (*req)->dev.next;
+ MPIR_Request *next = (*req)->dev.next;
/* remove from queue */
if (*head == *req) {
@@ -893,8 +893,8 @@ static inline void dequeue_and_set_error(MPID_Request **req, MPID_Request *prev
/* set error and complete */
(*req)->status.MPI_ERROR = *error;
MPID_Request_complete(*req);
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE,
- (MPIU_DBG_FDEST, "set error of req %p (%#08x) to %#x and completing.",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE,
+ (MPL_DBG_FDEST, "set error of req %p (%#08x) to %#x and completing.",
*req, (*req)->handle, *error));
*req = next;
}
@@ -912,16 +912,16 @@ static inline void dequeue_and_set_error(MPID_Request **req, MPID_Request *prev
* may then find it and dequeue it.
*
*/
-int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
+int MPIDI_CH3U_Clean_recvq(MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
int error = MPI_SUCCESS;
- MPID_Request *rreq, *prev_rreq = NULL;
+ MPIR_Request *rreq, *prev_rreq = NULL;
MPIDI_Message_match match;
MPIDI_Message_match mask;
- MPIDI_STATE_DECL(MPIDI_CH3U_CLEAN_RECVQ);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPIDI_CH3U_CLEAN_RECVQ);
- MPIDI_FUNC_ENTER(MPIDI_CH3U_CLEAN_RECVQ);
+ MPIR_FUNC_VERBOSE_ENTER(MPIDI_CH3U_CLEAN_RECVQ);
MPIR_ERR_SETSIMPLE(error, MPIX_ERR_REVOKED, "**revoked");
@@ -936,22 +936,22 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
while (NULL != rreq) {
/* We'll have to do this matching twice. Once for the pt2pt context id
* and once for the collective context id */
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRA_PT2PT;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRA_PT2PT;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up unexpected pt2pt pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_unexpected_head, &recvq_unexpected_tail, &error, MPI_PROC_NULL);
continue;
}
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRA_COLL;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRA_COLL;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up unexpected collective pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_unexpected_head, &recvq_unexpected_tail, &error, MPI_PROC_NULL);
@@ -961,13 +961,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
if (MPIR_Comm_is_node_aware(comm_ptr)) {
int offset;
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_PT2PT : MPID_CONTEXT_INTER_PT2PT;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRANODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_PT2PT : MPIR_CONTEXT_INTER_PT2PT;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRANODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up unexpected pt2pt pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_unexpected_head, &recvq_unexpected_tail, &error, MPI_PROC_NULL);
@@ -975,13 +975,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
}
}
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRANODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRANODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up unexpected collective pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_unexpected_head, &recvq_unexpected_tail, &error, MPI_PROC_NULL);
@@ -989,13 +989,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
}
}
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_PT2PT : MPID_CONTEXT_INTER_PT2PT;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTERNODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_PT2PT : MPIR_CONTEXT_INTER_PT2PT;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTERNODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up unexpected pt2pt pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_unexpected_head, &recvq_unexpected_tail, &error, MPI_PROC_NULL);
@@ -1003,13 +1003,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
}
}
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTERNODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTERNODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up unexpected collective pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_unexpected_head, &recvq_unexpected_tail, &error, MPI_PROC_NULL);
@@ -1028,22 +1028,22 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
while (NULL != rreq) {
/* We'll have to do this matching twice. Once for the pt2pt context id
* and once for the collective context id */
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRA_PT2PT;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRA_PT2PT;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up posted pt2pt pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL);
continue;
}
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRA_COLL;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRA_COLL;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up posted collective pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL);
@@ -1053,13 +1053,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
if (MPIR_Comm_is_node_aware(comm_ptr)) {
int offset;
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_PT2PT : MPID_CONTEXT_INTER_PT2PT;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRANODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_PT2PT : MPIR_CONTEXT_INTER_PT2PT;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRANODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up posted pt2pt pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL);
@@ -1067,13 +1067,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
}
}
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTRANODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTRANODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up posted collective pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL);
@@ -1081,13 +1081,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
}
}
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_PT2PT : MPID_CONTEXT_INTER_PT2PT;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTERNODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_PT2PT : MPIR_CONTEXT_INTER_PT2PT;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTERNODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up posted pt2pt pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL);
@@ -1095,13 +1095,13 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
}
}
- offset = (comm_ptr->comm_kind == MPID_INTRACOMM) ? MPID_CONTEXT_INTRA_COLL : MPID_CONTEXT_INTER_COLL;
- match.parts.context_id = comm_ptr->recvcontext_id + MPID_CONTEXT_INTERNODE_OFFSET + offset;
+ offset = (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) ? MPIR_CONTEXT_INTRA_COLL : MPIR_CONTEXT_INTER_COLL;
+ match.parts.context_id = comm_ptr->recvcontext_id + MPIR_CONTEXT_INTERNODE_OFFSET + offset;
if (MATCH_WITH_LEFT_RIGHT_MASK(rreq->dev.match, match, mask)) {
if (MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_AGREE_TAG &&
MPIR_TAG_MASK_ERROR_BITS(rreq->dev.match.parts.tag) != MPIR_SHRINK_TAG) {
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"cleaning up posted collective pkt rank=%d tag=%d contextid=%d",
rreq->dev.match.parts.rank, rreq->dev.match.parts.tag, rreq->dev.match.parts.context_id));
dequeue_and_set_error(&rreq, prev_rreq, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL);
@@ -1114,7 +1114,7 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
rreq = rreq->dev.next;
}
- MPIDI_FUNC_EXIT(MPIDI_CH3U_CLEAN_RECVQ);
+ MPIR_FUNC_VERBOSE_EXIT(MPIDI_CH3U_CLEAN_RECVQ);
return mpi_errno;
}
@@ -1126,11 +1126,11 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
int MPIDI_CH3U_Complete_posted_with_error(MPIDI_VC_t *vc)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *req, *prev_req;
+ MPIR_Request *req, *prev_req;
int error = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
@@ -1152,7 +1152,7 @@ int MPIDI_CH3U_Complete_posted_with_error(MPIDI_VC_t *vc)
fn_exit:
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_COMPLETE_POSTED_WITH_ERROR);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1164,7 +1164,7 @@ int MPIDI_CH3U_Complete_posted_with_error(MPIDI_VC_t *vc)
static char *tag_val_to_str(int tag, char *out, int max)
{
if (tag == MPI_ANY_TAG) {
- MPIU_Strncpy(out, "MPI_ANY_TAG", max);
+ MPL_strncpy(out, "MPI_ANY_TAG", max);
}
else {
MPL_snprintf(out, max, "%d", tag);
@@ -1176,7 +1176,7 @@ static char *tag_val_to_str(int tag, char *out, int max)
static char *rank_val_to_str(int rank, char *out, int max)
{
if (rank == MPI_ANY_SOURCE) {
- MPIU_Strncpy(out, "MPI_ANY_SOURCE", max);
+ MPL_strncpy(out, "MPI_ANY_SOURCE", max);
}
else {
MPL_snprintf(out, max, "%d", rank);
@@ -1197,7 +1197,7 @@ void MPIDI_CH3U_Dbg_print_recvq(FILE *stream);
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIDI_CH3U_Dbg_print_recvq(FILE *stream)
{
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int i;
char tag_buf[128];
char rank_buf[128];
@@ -1252,7 +1252,7 @@ void MPIDI_CH3U_Dbg_print_recvq(FILE *stream)
int MPIDI_CH3U_Recvq_count_unexp(void)
{
int count = 0;
- MPID_Request *req = recvq_unexpected_head;
+ MPIR_Request *req = recvq_unexpected_head;
while (req)
{
diff --git a/src/mpid/ch3/src/ch3u_request.c b/src/mpid/ch3/src/ch3u_request.c
index 6a6605a..0d9e714 100644
--- a/src/mpid/ch3/src/ch3u_request.c
+++ b/src/mpid/ch3/src/ch3u_request.c
@@ -17,103 +17,51 @@
*/
/* Routines and data structures for request allocation and deallocation */
-#ifndef MPID_REQUEST_PREALLOC
-#define MPID_REQUEST_PREALLOC 8
-#endif
/* Max depth of recursive calls of MPID_Request_complete */
#define REQUEST_CB_DEPTH 2
-MPID_Request MPID_Request_direct[MPID_REQUEST_PREALLOC] = {{0}};
-MPIU_Object_alloc_t MPID_Request_mem = {
- 0, 0, 0, 0, MPID_REQUEST, sizeof(MPID_Request), MPID_Request_direct,
- MPID_REQUEST_PREALLOC };
-
/* See the comments above about request creation. Some routines will
use macros in mpidimpl.h *instead* of this routine */
#undef FUNCNAME
-#define FUNCNAME MPID_Request_create
+#define FUNCNAME MPID_Request_create_hook
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-MPID_Request * MPID_Request_create(void)
+void MPID_Request_create_hook(MPIR_Request *req)
{
- MPID_Request * req;
- MPIDI_STATE_DECL(MPID_STATE_MPID_REQUEST_CREATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_REQUEST_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_REQUEST_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_REQUEST_INIT);
- req = MPIU_Handle_obj_alloc(&MPID_Request_mem);
- if (req != NULL)
- {
- MPIU_DBG_MSG_P(CH3_CHANNEL,VERBOSE,
- "allocated request, handle=0x%08x", req->handle);
-#ifdef MPICH_DBG_OUTPUT
- /*MPIU_Assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST);*/
- if (HANDLE_GET_MPI_KIND(req->handle) != MPID_REQUEST)
- {
- int mpi_errno;
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
- FCNAME, __LINE__, MPI_ERR_OTHER,
- "**invalid_handle", "**invalid_handle %d", req->handle);
- MPID_Abort(MPIR_Process.comm_world, mpi_errno, -1, NULL);
- }
-#endif
- /* FIXME: This makes request creation expensive. We need to trim
- this to the basics, with additional setup for special-purpose
- requests (think base class and inheritance). For example, do we
- *really* want to set the kind to UNDEFINED? And should the RMA
- values be set only for RMA requests? */
- MPIU_Object_set_ref(req, 1);
- req->kind = MPID_REQUEST_UNDEFINED;
- MPID_cc_set(&req->cc, 1);
- req->cc_ptr = &req->cc;
- /* FIXME: status fields meaningful only for receive, and even then
- should not need to be set. */
- req->status.MPI_SOURCE = MPI_UNDEFINED;
- req->status.MPI_TAG = MPI_UNDEFINED;
- req->status.MPI_ERROR = MPI_SUCCESS;
- MPIR_STATUS_SET_COUNT(req->status, 0);
- MPIR_STATUS_SET_CANCEL_BIT(req->status, FALSE);
- req->comm = NULL;
- req->greq_fns = NULL;
- req->errflag = MPIR_ERR_NONE;
- req->request_completed_cb = NULL;
- req->dev.datatype_ptr = NULL;
- req->dev.segment_ptr = NULL;
- /* Masks and flags for channel device state in an MPID_Request */
- req->dev.state = 0;
- req->dev.cancel_pending = FALSE;
- /* FIXME: RMA ops shouldn't need to be set except when creating a
- request for RMA operations */
- req->dev.target_win_handle = MPI_WIN_NULL;
- req->dev.source_win_handle = MPI_WIN_NULL;
- req->dev.target_lock_queue_entry = NULL;
- req->dev.dataloop = NULL;
- req->dev.iov_offset = 0;
- req->dev.flags = MPIDI_CH3_PKT_FLAG_NONE;
- req->dev.resp_request_handle = MPI_REQUEST_NULL;
- req->dev.user_buf = NULL;
- req->dev.OnDataAvail = NULL;
- req->dev.OnFinal = NULL;
- req->dev.user_buf = NULL;
- req->dev.drop_data = FALSE;
- req->dev.tmpbuf = NULL;
- req->dev.ext_hdr_ptr = NULL;
- req->dev.ext_hdr_sz = 0;
- req->dev.rma_target_ptr = NULL;
- req->dev.request_handle = MPI_REQUEST_NULL;
+ req->dev.datatype_ptr = NULL;
+ req->dev.segment_ptr = NULL;
+ /* Masks and flags for channel device state in an MPIR_Request */
+ req->dev.state = 0;
+ req->dev.cancel_pending = FALSE;
+ /* FIXME: RMA ops shouldn't need to be set except when creating a
+ * request for RMA operations */
+ req->dev.target_win_handle = MPI_WIN_NULL;
+ req->dev.source_win_handle = MPI_WIN_NULL;
+ req->dev.target_lock_queue_entry = NULL;
+ req->dev.dataloop = NULL;
+ req->dev.iov_offset = 0;
+ req->dev.flags = MPIDI_CH3_PKT_FLAG_NONE;
+ req->dev.resp_request_handle = MPI_REQUEST_NULL;
+ req->dev.user_buf = NULL;
+ req->dev.OnDataAvail = NULL;
+ req->dev.OnFinal = NULL;
+ req->dev.user_buf = NULL;
+ req->dev.drop_data = FALSE;
+ req->dev.tmpbuf = NULL;
+ req->dev.ext_hdr_ptr = NULL;
+ req->dev.ext_hdr_sz = 0;
+ req->dev.rma_target_ptr = NULL;
+ req->dev.request_handle = MPI_REQUEST_NULL;
+
+ req->dev.request_completed_cb = NULL;
#ifdef MPIDI_CH3_REQUEST_INIT
- MPIDI_CH3_REQUEST_INIT(req);
+ MPIDI_CH3_REQUEST_INIT(req);
#endif
- }
- else
- {
- /* FIXME: This fails to fail if debugging is turned off */
- MPIU_DBG_MSG(CH3_CHANNEL,TYPICAL,"unable to allocate a request");
- }
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_REQUEST_CREATE);
- return req;
}
@@ -137,46 +85,46 @@ MPID_Request * MPID_Request_create(void)
#define FUNCNAME MPIDI_CH3U_Request_load_send_iov
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Request_load_send_iov(MPID_Request * const sreq,
+int MPIDI_CH3U_Request_load_send_iov(MPIR_Request * const sreq,
MPL_IOV * const iov, int * const iov_n)
{
MPI_Aint last;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV);
- MPIU_Assert(sreq->dev.segment_ptr != NULL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV);
+ MPIR_Assert(sreq->dev.segment_ptr != NULL);
last = sreq->dev.segment_size;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,(MPIU_DBG_FDEST,
- "pre-pv: first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT ", iov_n=%d",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,(MPL_DBG_FDEST,
+ "pre-pv: first=%" PRIdPTR ", last=%" PRIdPTR ", iov_n=%d",
sreq->dev.segment_first, last, *iov_n));
- MPIU_Assert(sreq->dev.segment_first < last);
- MPIU_Assert(last > 0);
- MPIU_Assert(*iov_n > 0 && *iov_n <= MPL_IOV_LIMIT);
- MPID_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first,
+ MPIR_Assert(sreq->dev.segment_first < last);
+ MPIR_Assert(last > 0);
+ MPIR_Assert(*iov_n > 0 && *iov_n <= MPL_IOV_LIMIT);
+ MPIDU_Segment_pack_vector(sreq->dev.segment_ptr, sreq->dev.segment_first,
&last, iov, iov_n);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,(MPIU_DBG_FDEST,
- "post-pv: first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT ", iov_n=%d",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,(MPL_DBG_FDEST,
+ "post-pv: first=%" PRIdPTR ", last=%" PRIdPTR ", iov_n=%d",
sreq->dev.segment_first, last, *iov_n));
- MPIU_Assert(*iov_n > 0 && *iov_n <= MPL_IOV_LIMIT);
+ MPIR_Assert(*iov_n > 0 && *iov_n <= MPL_IOV_LIMIT);
if (last == sreq->dev.segment_size)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"remaining data loaded into IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"remaining data loaded into IOV");
sreq->dev.OnDataAvail = sreq->dev.OnFinal;
}
else if ((last - sreq->dev.segment_first) / *iov_n >= MPIDI_IOV_DENSITY_MIN)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"more data loaded into IOV");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"more data loaded into IOV");
sreq->dev.segment_first = last;
sreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_SendReloadIOV;
}
else
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int i, iov_data_copied;
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"low density. using SRBuf.");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"low density. using SRBuf.");
data_sz = sreq->dev.segment_size - sreq->dev.segment_first;
if (!MPIDI_Request_get_srbuf_flag(sreq))
@@ -185,7 +133,7 @@ int MPIDI_CH3U_Request_load_send_iov(MPID_Request * const sreq,
/* --BEGIN ERROR HANDLING-- */
if (sreq->dev.tmpbuf_sz == 0)
{
- MPIU_DBG_MSG(CH3_CHANNEL,TYPICAL,"SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,TYPICAL,"SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
"**nomem %d", data_sz);
@@ -197,7 +145,7 @@ int MPIDI_CH3U_Request_load_send_iov(MPID_Request * const sreq,
iov_data_copied = 0;
for (i = 0; i < *iov_n; i++) {
- MPIU_Memcpy((char*) sreq->dev.tmpbuf + iov_data_copied,
+ MPIR_Memcpy((char*) sreq->dev.tmpbuf + iov_data_copied,
iov[i].MPL_IOV_BUF, iov[i].MPL_IOV_LEN);
iov_data_copied += iov[i].MPL_IOV_LEN;
}
@@ -206,32 +154,32 @@ int MPIDI_CH3U_Request_load_send_iov(MPID_Request * const sreq,
last = (data_sz <= sreq->dev.tmpbuf_sz - iov_data_copied) ?
sreq->dev.segment_size :
sreq->dev.segment_first + sreq->dev.tmpbuf_sz - iov_data_copied;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,(MPIU_DBG_FDEST,
- "pre-pack: first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,(MPL_DBG_FDEST,
+ "pre-pack: first=%" PRIdPTR ", last=%" PRIdPTR,
sreq->dev.segment_first, last));
- MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first,
+ MPIDU_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first,
&last, (char*) sreq->dev.tmpbuf + iov_data_copied);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,(MPIU_DBG_FDEST,
- "post-pack: first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,(MPL_DBG_FDEST,
+ "post-pack: first=%" PRIdPTR ", last=%" PRIdPTR,
sreq->dev.segment_first, last));
iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)sreq->dev.tmpbuf;
iov[0].MPL_IOV_LEN = last - sreq->dev.segment_first + iov_data_copied;
*iov_n = 1;
if (last == sreq->dev.segment_size)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"remaining data packed into SRBuf");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"remaining data packed into SRBuf");
sreq->dev.OnDataAvail = sreq->dev.OnFinal;
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"more data packed into SRBuf");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"more data packed into SRBuf");
sreq->dev.segment_first = last;
sreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_SendReloadIOV;
}
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_SEND_IOV);
return mpi_errno;
}
@@ -249,14 +197,14 @@ int MPIDI_CH3U_Request_load_send_iov(MPID_Request * const sreq,
#define FUNCNAME MPIDI_CH3U_Request_load_recv_iov
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
+int MPIDI_CH3U_Request_load_recv_iov(MPIR_Request * const rreq)
{
MPI_Aint last;
- static MPIDI_msg_sz_t orig_segment_first = MPIDI_LOAD_RECV_IOV_ORIG_SEGMENT_FIRST_UNSET;
+ static intptr_t orig_segment_first = MPIDI_LOAD_RECV_IOV_ORIG_SEGMENT_FIRST_UNSET;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV);
if (orig_segment_first == MPIDI_LOAD_RECV_IOV_ORIG_SEGMENT_FIRST_UNSET) {
orig_segment_first = rreq->dev.segment_first;
@@ -270,8 +218,8 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
MPIDI_Request_get_type(rreq) != MPIDI_REQUEST_TYPE_GET_ACCUM_RECV &&
MPIDI_Request_get_srbuf_flag(rreq))
{
- MPIDI_msg_sz_t data_sz;
- MPIDI_msg_sz_t tmpbuf_sz;
+ intptr_t data_sz;
+ intptr_t tmpbuf_sz;
/* Once a SRBuf is in use, we continue to use it since a small
amount of data may already be present at the beginning
@@ -282,7 +230,7 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
data_sz = rreq->dev.segment_size - rreq->dev.segment_first -
rreq->dev.tmpbuf_off;
- MPIU_Assert(data_sz > 0);
+ MPIR_Assert(data_sz > 0);
tmpbuf_sz = rreq->dev.tmpbuf_sz - rreq->dev.tmpbuf_off;
if (data_sz > tmpbuf_sz)
{
@@ -294,19 +242,19 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
rreq->dev.iov[0].MPL_IOV_LEN = data_sz;
rreq->dev.iov_offset = 0;
rreq->dev.iov_count = 1;
- MPIU_Assert(rreq->dev.segment_first - orig_segment_first + data_sz +
+ MPIR_Assert(rreq->dev.segment_first - orig_segment_first + data_sz +
rreq->dev.tmpbuf_off <= rreq->dev.recv_data_sz);
if (rreq->dev.segment_first - orig_segment_first + data_sz + rreq->dev.tmpbuf_off ==
rreq->dev.recv_data_sz)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"updating rreq to read the remaining data into the SRBuf");
rreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_UnpackSRBufComplete;
orig_segment_first = MPIDI_LOAD_RECV_IOV_ORIG_SEGMENT_FIRST_UNSET;
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"updating rreq to read more data into the SRBuf");
rreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_UnpackSRBufReloadIOV;
}
@@ -316,18 +264,18 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
last = rreq->dev.segment_size;
rreq->dev.iov_count = MPL_IOV_LIMIT;
rreq->dev.iov_offset = 0;
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,(MPIU_DBG_FDEST,
- "pre-upv: first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT ", iov_n=%d",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,(MPL_DBG_FDEST,
+ "pre-upv: first=%" PRIdPTR ", last=%" PRIdPTR ", iov_n=%d",
rreq->dev.segment_first, last, rreq->dev.iov_count));
- MPIU_Assert(rreq->dev.segment_first < last);
- MPIU_Assert(last > 0);
- MPID_Segment_unpack_vector(rreq->dev.segment_ptr,
+ MPIR_Assert(rreq->dev.segment_first < last);
+ MPIR_Assert(last > 0);
+ MPIDU_Segment_unpack_vector(rreq->dev.segment_ptr,
rreq->dev.segment_first,
&last, &rreq->dev.iov[0], &rreq->dev.iov_count);
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,(MPIU_DBG_FDEST,
- "post-upv: first=" MPIDI_MSG_SZ_FMT ", last=" MPIDI_MSG_SZ_FMT ", iov_n=%d, iov_offset=%lld",
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,(MPL_DBG_FDEST,
+ "post-upv: first=%" PRIdPTR ", last=%" PRIdPTR ", iov_n=%d, iov_offset=%lld",
rreq->dev.segment_first, last, rreq->dev.iov_count, (long long)rreq->dev.iov_offset));
- MPIU_Assert(rreq->dev.iov_count >= 0 && rreq->dev.iov_count <=
+ MPIR_Assert(rreq->dev.iov_count >= 0 && rreq->dev.iov_count <=
MPL_IOV_LIMIT);
/* --BEGIN ERROR HANDLING-- */
@@ -347,13 +295,13 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
}
else
{
- MPIU_Assert(rreq->dev.iov_offset < rreq->dev.iov_count);
+ MPIR_Assert(rreq->dev.iov_offset < rreq->dev.iov_count);
}
/* --END ERROR HANDLING-- */
if (last == rreq->dev.recv_data_sz + orig_segment_first)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"updating rreq to read the remaining data directly into the user buffer");
/* Eventually, use OnFinal for this instead */
rreq->dev.OnDataAvail = rreq->dev.OnFinal;
@@ -364,7 +312,7 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
(last == rreq->dev.segment_size ||
(last - rreq->dev.segment_first) / rreq->dev.iov_count >= MPIDI_IOV_DENSITY_MIN))
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"updating rreq to read more data directly into the user buffer");
rreq->dev.segment_first = last;
rreq->dev.OnDataAvail = MPIDI_CH3_ReqHandler_ReloadIOV;
@@ -374,7 +322,7 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
/* Too little data would have been received using an IOV.
We will start receiving data into a SRBuf and unpacking it
later. */
- MPIU_Assert(MPIDI_Request_get_srbuf_flag(rreq) == FALSE);
+ MPIR_Assert(MPIDI_Request_get_srbuf_flag(rreq) == FALSE);
MPIDI_CH3U_SRBuf_alloc(rreq,
rreq->dev.segment_size - rreq->dev.segment_first);
@@ -385,7 +333,7 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
/* FIXME - we should drain the data off the pipe here, but we
don't have a buffer to drain it into. should this be
a fatal error? */
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,"SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,"SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
"**nomem %d",
@@ -403,7 +351,7 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
{
/* receive and toss any extra data that does not fit in the user's
buffer */
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
data_sz = rreq->dev.recv_data_sz - rreq->dev.segment_first;
if (!MPIDI_Request_get_srbuf_flag(rreq))
@@ -412,7 +360,7 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
/* --BEGIN ERROR HANDLING-- */
if (rreq->dev.tmpbuf_sz == 0)
{
- MPIU_DBG_MSG(CH3_CHANNEL,TYPICAL,"SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,TYPICAL,"SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", 0);
rreq->status.MPI_ERROR = mpi_errno;
@@ -423,17 +371,17 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
if (data_sz <= rreq->dev.tmpbuf_sz)
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"updating rreq to read overflow data into the SRBuf and complete");
rreq->dev.iov[0].MPL_IOV_LEN = data_sz;
- MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_RECV);
+ MPIR_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_RECV);
/* Eventually, use OnFinal for this instead */
rreq->dev.OnDataAvail = rreq->dev.OnFinal;
orig_segment_first = MPIDI_LOAD_RECV_IOV_ORIG_SEGMENT_FIRST_UNSET;
}
else
{
- MPIU_DBG_MSG(CH3_CHANNEL,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL,VERBOSE,
"updating rreq to read overflow data into the SRBuf and reload IOV");
rreq->dev.iov[0].MPL_IOV_LEN = rreq->dev.tmpbuf_sz;
rreq->dev.segment_first += rreq->dev.tmpbuf_sz;
@@ -445,7 +393,7 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_LOAD_RECV_IOV);
return mpi_errno;
}
@@ -458,14 +406,14 @@ int MPIDI_CH3U_Request_load_recv_iov(MPID_Request * const rreq)
#define FUNCNAME MPIDI_CH3U_Request_unpack_srbuf
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Request_unpack_srbuf(MPID_Request * rreq)
+int MPIDI_CH3U_Request_unpack_srbuf(MPIR_Request * rreq)
{
MPI_Aint last;
int tmpbuf_last;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF);
tmpbuf_last = (int)(rreq->dev.segment_first + rreq->dev.tmpbuf_sz);
if (rreq->dev.segment_size < tmpbuf_last)
@@ -473,7 +421,7 @@ int MPIDI_CH3U_Request_unpack_srbuf(MPID_Request * rreq)
tmpbuf_last = (int)rreq->dev.segment_size;
}
last = tmpbuf_last;
- MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first,
+ MPIDU_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first,
&last, rreq->dev.tmpbuf);
if (last == 0 || last == rreq->dev.segment_first)
{
@@ -522,7 +470,7 @@ int MPIDI_CH3U_Request_unpack_srbuf(MPID_Request * rreq)
rreq->dev.segment_first = last;
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_SRBUF);
return mpi_errno;
}
@@ -535,18 +483,18 @@ int MPIDI_CH3U_Request_unpack_srbuf(MPID_Request * rreq)
#define FUNCNAME MPIDI_CH3U_Request_unpack_uebuf
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Request_unpack_uebuf(MPID_Request * rreq)
+int MPIDI_CH3U_Request_unpack_uebuf(MPIR_Request * rreq)
{
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t userbuf_sz;
- MPID_Datatype * dt_ptr;
- MPIDI_msg_sz_t unpack_sz;
+ intptr_t userbuf_sz;
+ MPIDU_Datatype * dt_ptr;
+ intptr_t unpack_sz;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF);
- MPIDI_STATE_DECL(MPID_STATE_MEMCPY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MEMCPY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF);
MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype,
dt_contig, userbuf_sz, dt_ptr, dt_true_lb);
@@ -558,9 +506,9 @@ int MPIDI_CH3U_Request_unpack_uebuf(MPID_Request * rreq)
else
{
/* --BEGIN ERROR HANDLING-- */
- MPIU_DBG_MSG_FMT(CH3_CHANNEL,VERBOSE,(MPIU_DBG_FDEST,
- "receive buffer overflow; message truncated, msg_sz=" MPIDI_MSG_SZ_FMT
- ", buf_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL,VERBOSE,(MPL_DBG_FDEST,
+ "receive buffer overflow; message truncated, msg_sz=%" PRIdPTR
+ ", buf_sz=%" PRIdPTR,
rreq->dev.recv_data_sz, userbuf_sz));
unpack_sz = userbuf_sz;
MPIR_STATUS_SET_COUNT(rreq->status, userbuf_sz);
@@ -579,20 +527,20 @@ int MPIDI_CH3U_Request_unpack_uebuf(MPID_Request * rreq)
In other words, if we were to use Segment_unpack()
would last = unpack? If not we should return an error
(unless configured with --enable-fast) */
- MPIDI_FUNC_ENTER(MPID_STATE_MEMCPY);
- MPIU_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, rreq->dev.tmpbuf,
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MEMCPY);
+ MPIR_Memcpy((char *)rreq->dev.user_buf + dt_true_lb, rreq->dev.tmpbuf,
unpack_sz);
- MPIDI_FUNC_EXIT(MPID_STATE_MEMCPY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MEMCPY);
}
else
{
- MPID_Segment seg;
+ MPIDU_Segment seg;
MPI_Aint last;
- MPID_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
+ MPIDU_Segment_init(rreq->dev.user_buf, rreq->dev.user_count,
rreq->dev.datatype, &seg, 0);
last = unpack_sz;
- MPID_Segment_unpack(&seg, 0, &last, rreq->dev.tmpbuf);
+ MPIDU_Segment_unpack(&seg, 0, &last, rreq->dev.tmpbuf);
if (last != unpack_sz)
{
/* --BEGIN ERROR HANDLING-- */
@@ -608,30 +556,34 @@ int MPIDI_CH3U_Request_unpack_uebuf(MPID_Request * rreq)
}
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_REQUEST_UNPACK_UEBUF);
return mpi_errno;
}
-int MPID_Request_complete(MPID_Request *req)
+int MPID_Request_complete(MPIR_Request *req)
{
- int incomplete;
+ int incomplete, notify_counter;
int mpi_errno = MPI_SUCCESS;
static int called_cnt = 0;
- MPIU_Assert(called_cnt <= REQUEST_CB_DEPTH);
+ MPIR_Assert(called_cnt <= REQUEST_CB_DEPTH);
called_cnt++;
MPIDI_CH3U_Request_decrement_cc(req, &incomplete);
if (!incomplete) {
/* trigger request_completed callback function */
- if (req->request_completed_cb != NULL) {
- mpi_errno = req->request_completed_cb(req);
+ if (req->dev.request_completed_cb != NULL) {
+ mpi_errno = req->dev.request_completed_cb(req);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
}
- MPID_Request_release(req);
+ /* decrement completion_notification counter */
+ if (req->completion_notification)
+ MPIR_cc_decr(req->completion_notification, ¬ify_counter);
+
+ MPIR_Request_free(req);
MPIDI_CH3_Progress_signal_completion();
}
@@ -642,64 +594,26 @@ int MPID_Request_complete(MPID_Request *req)
goto fn_exit;
}
-void MPID_Request_release(MPID_Request *req)
+void MPID_Request_free_hook(MPIR_Request *req)
{
- int inuse;
-
- MPIR_Request_release_ref(req, &inuse);
- if (inuse == 0) {
- MPIU_DBG_MSG_P(CH3_CHANNEL,VERBOSE,
- "freeing request, handle=0x%08x", req->handle);
-
-#ifdef MPICH_DBG_OUTPUT
- /*MPIU_Assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST);*/
- if (HANDLE_GET_MPI_KIND(req->handle) != MPID_REQUEST)
- {
- int mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
- FCNAME, __LINE__, MPI_ERR_OTHER,
- "**invalid_handle", "**invalid_handle %d", req->handle);
- MPID_Abort(MPIR_Process.comm_world, mpi_errno, -1, NULL);
- }
- /* XXX DJG FIXME should we be checking this? */
- /*MPIU_Assert(req->ref_count == 0);*/
- if (req->ref_count != 0)
- {
- int mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
- FCNAME, __LINE__, MPI_ERR_OTHER,
- "**invalid_refcount", "**invalid_refcount %d", req->ref_count);
- MPID_Abort(MPIR_Process.comm_world, mpi_errno, -1, NULL);
- }
-#endif
-
- /* FIXME: We need a better way to handle these so that we do
- not always need to initialize these fields and check them
- when we destroy a request */
- /* FIXME: We need a way to call these routines ONLY when the
- related ref count has become zero. */
- if (req->comm != NULL) {
- MPIR_Comm_release(req->comm);
- }
-
- if (req->greq_fns != NULL) {
- MPIU_Free(req->greq_fns);
- }
-
- if (req->dev.datatype_ptr != NULL) {
- MPID_Datatype_release(req->dev.datatype_ptr);
- }
+ return;
+}
- if (req->dev.segment_ptr != NULL) {
- MPID_Segment_free(req->dev.segment_ptr);
- }
+void MPID_Request_destroy_hook(MPIR_Request *req)
+{
+ if (req->dev.datatype_ptr != NULL) {
+ MPIDU_Datatype_release(req->dev.datatype_ptr);
+ }
- if (MPIDI_Request_get_srbuf_flag(req)) {
- MPIDI_CH3U_SRBuf_free(req);
- }
+ if (req->dev.segment_ptr != NULL) {
+ MPIDU_Segment_free(req->dev.segment_ptr);
+ }
- if (req->dev.ext_hdr_ptr != NULL) {
- MPIU_Free(req->dev.ext_hdr_ptr);
- }
+ if (MPIDI_Request_get_srbuf_flag(req)) {
+ MPIDI_CH3U_SRBuf_free(req);
+ }
- MPIU_Handle_obj_free(&MPID_Request_mem, req);
+ if (req->dev.ext_hdr_ptr != NULL) {
+ MPL_free(req->dev.ext_hdr_ptr);
}
}
diff --git a/src/mpid/ch3/src/ch3u_rma_ops.c b/src/mpid/ch3/src/ch3u_rma_ops.c
index 76de395..1388054 100644
--- a/src/mpid/ch3/src/ch3u_rma_ops.c
+++ b/src/mpid/ch3/src/ch3u_rma_ops.c
@@ -6,7 +6,7 @@
#include "mpidrma.h"
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_rmaqueue_set);
+extern MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmaqueue_set ATTRIBUTE((unused));
/*
=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
@@ -40,19 +40,19 @@ cvars:
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr,
- MPID_Request * ureq)
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr,
+ MPIR_Request * ureq)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig ATTRIBUTE((unused)), rank;
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int made_progress = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PUT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_PUT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PUT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_PUT);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state == MPIDI_RMA_NONE,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -127,16 +127,16 @@ int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
/* if source or target datatypes are derived, increment their
* reference counts */
if (!MPIR_DATATYPE_IS_PREDEFINED(origin_datatype)) {
- MPID_Datatype_get_ptr(origin_datatype, dtp);
- MPID_Datatype_add_ref(dtp);
+ MPIDU_Datatype_get_ptr(origin_datatype, dtp);
+ MPIDU_Datatype_add_ref(dtp);
}
if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
- MPID_Datatype_get_ptr(target_datatype, dtp);
- MPID_Datatype_add_ref(dtp);
+ MPIDU_Datatype_get_ptr(target_datatype, dtp);
+ MPIDU_Datatype_add_ref(dtp);
}
- MPID_Datatype_is_contig(origin_datatype, &is_origin_contig);
- MPID_Datatype_is_contig(target_datatype, &is_target_contig);
+ MPIDU_Datatype_is_contig(origin_datatype, &is_origin_contig);
+ MPIDU_Datatype_is_contig(target_datatype, &is_target_contig);
/* Judge if we can use IMMED data packet */
if (MPIR_DATATYPE_IS_PREDEFINED(origin_datatype) &&
@@ -175,7 +175,7 @@ int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
put_pkt->source_win_handle = win_ptr->handle;
put_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
- void *src = (void *) origin_addr, *dest = (void *) (put_pkt->info.data);
+ void *src = (void *) origin_addr, *dest = (void *) &(put_pkt->info.data);
mpi_errno = immed_copy(src, dest, data_sz);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -202,7 +202,7 @@ int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PUT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_PUT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -217,19 +217,19 @@ int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3I_Get(void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr,
- MPID_Request * ureq)
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr,
+ MPIR_Request * ureq)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t orig_data_sz, target_data_sz;
+ intptr_t orig_data_sz, target_data_sz;
int dt_contig ATTRIBUTE((unused)), rank;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int made_progress = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_GET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_GET);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_GET);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_GET);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state == MPIDI_RMA_NONE,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -306,19 +306,19 @@ int MPIDI_CH3I_Get(void *origin_addr, int origin_count, MPI_Datatype
/* if source or target datatypes are derived, increment their
* reference counts */
if (!MPIR_DATATYPE_IS_PREDEFINED(origin_datatype)) {
- MPID_Datatype_get_ptr(origin_datatype, dtp);
- MPID_Datatype_add_ref(dtp);
+ MPIDU_Datatype_get_ptr(origin_datatype, dtp);
+ MPIDU_Datatype_add_ref(dtp);
}
if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
- MPID_Datatype_get_ptr(target_datatype, dtp);
- MPID_Datatype_add_ref(dtp);
+ MPIDU_Datatype_get_ptr(target_datatype, dtp);
+ MPIDU_Datatype_add_ref(dtp);
}
- MPID_Datatype_is_contig(origin_datatype, &is_origin_contig);
- MPID_Datatype_is_contig(target_datatype, &is_target_contig);
+ MPIDU_Datatype_is_contig(origin_datatype, &is_origin_contig);
+ MPIDU_Datatype_is_contig(target_datatype, &is_target_contig);
- MPID_Datatype_get_size_macro(target_datatype, target_type_size);
- MPIU_Assign_trunc(target_data_sz, target_count * target_type_size, MPIDI_msg_sz_t);
+ MPIDU_Datatype_get_size_macro(target_datatype, target_type_size);
+ MPIR_Assign_trunc(target_data_sz, target_count * target_type_size, intptr_t);
/* Judge if we can use IMMED data response packet */
if (MPIR_DATATYPE_IS_PREDEFINED(origin_datatype) &&
@@ -371,7 +371,7 @@ int MPIDI_CH3I_Get(void *origin_addr, int origin_count, MPI_Datatype
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_GET);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_GET);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -388,18 +388,18 @@ int MPIDI_CH3I_Get(void *origin_addr, int origin_count, MPI_Datatype
int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr, MPID_Request * ureq)
+ MPIR_Win * win_ptr, MPIR_Request * ureq)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig ATTRIBUTE((unused)), rank;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int made_progress = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_ACCUMULATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_ACCUMULATE);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state == MPIDI_RMA_NONE,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -455,7 +455,7 @@ int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatyp
int is_origin_contig, is_target_contig;
MPI_Aint stream_elem_count, stream_unit_count;
MPI_Aint predefined_dtp_size, predefined_dtp_count, predefined_dtp_extent;
- MPID_Datatype *origin_dtp = NULL, *target_dtp = NULL;
+ MPIDU_Datatype*origin_dtp = NULL, *target_dtp = NULL;
int i;
/* queue it up */
@@ -478,44 +478,44 @@ int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatyp
/* if source or target datatypes are derived, increment their
* reference counts */
if (!MPIR_DATATYPE_IS_PREDEFINED(origin_datatype)) {
- MPID_Datatype_get_ptr(origin_datatype, origin_dtp);
+ MPIDU_Datatype_get_ptr(origin_datatype, origin_dtp);
}
if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
- MPID_Datatype_get_ptr(target_datatype, target_dtp);
+ MPIDU_Datatype_get_ptr(target_datatype, target_dtp);
}
/* Get size and count for predefined datatype elements */
if (MPIR_DATATYPE_IS_PREDEFINED(origin_datatype)) {
- MPID_Datatype_get_size_macro(origin_datatype, predefined_dtp_size);
+ MPIDU_Datatype_get_size_macro(origin_datatype, predefined_dtp_size);
predefined_dtp_count = origin_count;
- MPID_Datatype_get_extent_macro(origin_datatype, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(origin_datatype, predefined_dtp_extent);
}
else {
- MPIU_Assert(origin_dtp->basic_type != MPI_DATATYPE_NULL);
- MPID_Datatype_get_size_macro(origin_dtp->basic_type, predefined_dtp_size);
+ MPIR_Assert(origin_dtp->basic_type != MPI_DATATYPE_NULL);
+ MPIDU_Datatype_get_size_macro(origin_dtp->basic_type, predefined_dtp_size);
predefined_dtp_count = data_sz / predefined_dtp_size;
- MPID_Datatype_get_extent_macro(origin_dtp->basic_type, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(origin_dtp->basic_type, predefined_dtp_extent);
}
- MPIU_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 &&
+ MPIR_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 &&
predefined_dtp_extent > 0);
/* Calculate number of predefined elements in each stream unit, and
* total number of stream units. */
stream_elem_count = MPIDI_CH3U_Acc_stream_size / predefined_dtp_extent;
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
- MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ MPIR_Assert(stream_elem_count > 0 && stream_unit_count > 0);
for (i = 0; i < stream_unit_count; i++) {
if (origin_dtp != NULL) {
- MPID_Datatype_add_ref(origin_dtp);
+ MPIDU_Datatype_add_ref(origin_dtp);
}
if (target_dtp != NULL) {
- MPID_Datatype_add_ref(target_dtp);
+ MPIDU_Datatype_add_ref(target_dtp);
}
}
- MPID_Datatype_is_contig(origin_datatype, &is_origin_contig);
- MPID_Datatype_is_contig(target_datatype, &is_target_contig);
+ MPIDU_Datatype_is_contig(origin_datatype, &is_origin_contig);
+ MPIDU_Datatype_is_contig(target_datatype, &is_target_contig);
/* Judge if we can use IMMED data packet */
if (MPIR_DATATYPE_IS_PREDEFINED(origin_datatype) &&
@@ -555,7 +555,7 @@ int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatyp
accum_pkt->source_win_handle = win_ptr->handle;
accum_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
- void *src = (void *) origin_addr, *dest = (void *) (accum_pkt->info.data);
+ void *src = (void *) origin_addr, *dest = (void *) &(accum_pkt->info.data);
mpi_errno = immed_copy(src, dest, data_sz);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -582,7 +582,7 @@ int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatyp
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_ACCUMULATE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -600,19 +600,19 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr, MPID_Request * ureq)
+ MPIR_Win * win_ptr, MPIR_Request * ureq)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_msg_sz_t orig_data_sz, target_data_sz;
+ intptr_t orig_data_sz, target_data_sz;
int rank;
int dt_contig ATTRIBUTE((unused));
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int made_progress = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state == MPIDI_RMA_NONE,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -672,7 +672,7 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
int is_origin_contig, is_target_contig, is_result_contig;
MPI_Aint stream_elem_count, stream_unit_count;
MPI_Aint predefined_dtp_size, predefined_dtp_count, predefined_dtp_extent;
- MPID_Datatype *origin_dtp = NULL, *target_dtp = NULL, *result_dtp = NULL;
+ MPIDU_Datatype*origin_dtp = NULL, *target_dtp = NULL, *result_dtp = NULL;
int is_empty_origin = FALSE;
/* Judge if origin buffer is empty */
@@ -704,68 +704,68 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
/* if source or target datatypes are derived, increment their
* reference counts */
if (is_empty_origin == FALSE && !MPIR_DATATYPE_IS_PREDEFINED(origin_datatype)) {
- MPID_Datatype_get_ptr(origin_datatype, origin_dtp);
+ MPIDU_Datatype_get_ptr(origin_datatype, origin_dtp);
}
if (!MPIR_DATATYPE_IS_PREDEFINED(result_datatype)) {
- MPID_Datatype_get_ptr(result_datatype, result_dtp);
+ MPIDU_Datatype_get_ptr(result_datatype, result_dtp);
}
if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
- MPID_Datatype_get_ptr(target_datatype, target_dtp);
+ MPIDU_Datatype_get_ptr(target_datatype, target_dtp);
}
if (is_empty_origin == FALSE) {
- MPID_Datatype_get_size_macro(origin_datatype, origin_type_size);
- MPIU_Assign_trunc(orig_data_sz, origin_count * origin_type_size, MPIDI_msg_sz_t);
+ MPIDU_Datatype_get_size_macro(origin_datatype, origin_type_size);
+ MPIR_Assign_trunc(orig_data_sz, origin_count * origin_type_size, intptr_t);
}
else {
/* If origin buffer is empty, set origin data size to 0 */
orig_data_sz = 0;
}
- MPID_Datatype_get_size_macro(target_datatype, target_type_size);
+ MPIDU_Datatype_get_size_macro(target_datatype, target_type_size);
/* Get size and count for predefined datatype elements */
if (MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
predefined_dtp_size = target_type_size;
predefined_dtp_count = target_count;
- MPID_Datatype_get_extent_macro(target_datatype, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(target_datatype, predefined_dtp_extent);
}
else {
- MPIU_Assert(target_dtp->basic_type != MPI_DATATYPE_NULL);
- MPID_Datatype_get_size_macro(target_dtp->basic_type, predefined_dtp_size);
+ MPIR_Assert(target_dtp->basic_type != MPI_DATATYPE_NULL);
+ MPIDU_Datatype_get_size_macro(target_dtp->basic_type, predefined_dtp_size);
predefined_dtp_count = target_data_sz / predefined_dtp_size;
- MPID_Datatype_get_extent_macro(target_dtp->basic_type, predefined_dtp_extent);
+ MPIDU_Datatype_get_extent_macro(target_dtp->basic_type, predefined_dtp_extent);
}
- MPIU_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 &&
+ MPIR_Assert(predefined_dtp_count > 0 && predefined_dtp_size > 0 &&
predefined_dtp_extent > 0);
/* Calculate number of predefined elements in each stream unit, and
* total number of stream units. */
stream_elem_count = MPIDI_CH3U_Acc_stream_size / predefined_dtp_extent;
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
- MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ MPIR_Assert(stream_elem_count > 0 && stream_unit_count > 0);
for (i = 0; i < stream_unit_count; i++) {
if (origin_dtp != NULL) {
- MPID_Datatype_add_ref(origin_dtp);
+ MPIDU_Datatype_add_ref(origin_dtp);
}
if (target_dtp != NULL) {
- MPID_Datatype_add_ref(target_dtp);
+ MPIDU_Datatype_add_ref(target_dtp);
}
if (result_dtp != NULL) {
- MPID_Datatype_add_ref(result_dtp);
+ MPIDU_Datatype_add_ref(result_dtp);
}
}
if (is_empty_origin == FALSE) {
- MPID_Datatype_is_contig(origin_datatype, &is_origin_contig);
+ MPIDU_Datatype_is_contig(origin_datatype, &is_origin_contig);
}
else {
/* If origin buffer is empty, mark origin data as contig data */
is_origin_contig = 1;
}
- MPID_Datatype_is_contig(target_datatype, &is_target_contig);
- MPID_Datatype_is_contig(result_datatype, &is_result_contig);
+ MPIDU_Datatype_is_contig(target_datatype, &is_target_contig);
+ MPIDU_Datatype_is_contig(result_datatype, &is_result_contig);
/* Judge if we can use IMMED data packet */
if ((is_empty_origin == TRUE || MPIR_DATATYPE_IS_PREDEFINED(origin_datatype)) &&
@@ -807,7 +807,7 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
get_accum_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
get_accum_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
- void *src = (void *) origin_addr, *dest = (void *) (get_accum_pkt->info.data);
+ void *src = (void *) origin_addr, *dest = (void *) &(get_accum_pkt->info.data);
mpi_errno = immed_copy(src, dest, orig_data_sz);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -834,7 +834,7 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -850,19 +850,19 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Put(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr)
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_PUT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_PUT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_PUT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_PUT);
mpi_errno = MPIDI_CH3I_Put(origin_addr, origin_count, origin_datatype,
target_rank, target_disp, target_count, target_datatype,
win_ptr, NULL);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_PUT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_PUT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -877,19 +877,19 @@ int MPID_Put(const void *origin_addr, int origin_count, MPI_Datatype
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Get(void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr)
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_GET);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_GET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_GET);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_GET);
mpi_errno = MPIDI_CH3I_Get(origin_addr, origin_count, origin_datatype,
target_rank, target_disp, target_count, target_datatype,
win_ptr, NULL);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_GET);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_GET);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -904,19 +904,19 @@ int MPID_Get(void *origin_addr, int origin_count, MPI_Datatype
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPI_Op op, MPID_Win * win_ptr)
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_ACCUMULATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_ACCUMULATE);
mpi_errno = MPIDI_CH3I_Accumulate(origin_addr, origin_count, origin_datatype,
target_rank, target_disp, target_count, target_datatype,
op, win_ptr, NULL);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_ACCUMULATE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -933,12 +933,12 @@ int MPID_Get_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr)
+ MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_GET_ACCUMULATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_GET_ACCUMULATE);
mpi_errno = MPIDI_CH3I_Get_accumulate(origin_addr, origin_count, origin_datatype,
result_addr, result_count, result_datatype,
@@ -946,7 +946,7 @@ int MPID_Get_accumulate(const void *origin_addr, int origin_count,
target_datatype, op, win_ptr, NULL);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_GET_ACCUMULATE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -962,16 +962,16 @@ int MPID_Get_accumulate(const void *origin_addr, int origin_count,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
void *result_addr, MPI_Datatype datatype, int target_rank,
- MPI_Aint target_disp, MPID_Win * win_ptr)
+ MPI_Aint target_disp, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
int rank;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int made_progress = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMPARE_AND_SWAP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_COMPARE_AND_SWAP);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state == MPIDI_RMA_NONE,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -1047,8 +1047,8 @@ int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
/* REQUIRE: All datatype arguments must be of the same, builtin
* type and counts must be 1. */
- MPID_Datatype_get_size_macro(datatype, type_size);
- MPIU_Assert(type_size <= sizeof(MPIDI_CH3_CAS_Immed_u));
+ MPIDU_Datatype_get_size_macro(datatype, type_size);
+ MPIR_Assert(type_size <= sizeof(MPIDI_CH3_CAS_Immed_u));
src = (void *) origin_addr, dest = (void *) (&(cas_pkt->origin_data));
mpi_errno = immed_copy(src, dest, type_size);
@@ -1081,7 +1081,7 @@ int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_COMPARE_AND_SWAP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1096,16 +1096,16 @@ int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
MPI_Datatype datatype, int target_rank,
- MPI_Aint target_disp, MPI_Op op, MPID_Win * win_ptr)
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
int rank;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int made_progress = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPID_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_FETCH_AND_OP);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_FETCH_AND_OP);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state == MPIDI_RMA_NONE,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -1169,10 +1169,10 @@ int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
/************** Setting packet struct areas in operation ****************/
- MPID_Datatype_get_size_macro(datatype, type_size);
- MPIU_Assert(type_size <= sizeof(MPIDI_CH3_FOP_Immed_u));
+ MPIDU_Datatype_get_size_macro(datatype, type_size);
+ MPIR_Assert(type_size <= sizeof(MPIDI_CH3_FOP_Immed_u));
- MPID_Datatype_is_contig(datatype, &is_contig);
+ MPIDU_Datatype_is_contig(datatype, &is_contig);
if (is_contig) {
/* Judge if we can use IMMED data packet */
@@ -1196,7 +1196,7 @@ int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
fop_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
fop_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
- void *src = (void *) origin_addr, *dest = (void *) (fop_pkt->info.data);
+ void *src = (void *) origin_addr, *dest = (void *) &(fop_pkt->info.data);
mpi_errno = immed_copy(src, dest, type_size);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -1223,7 +1223,7 @@ int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_FETCH_AND_OP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
diff --git a/src/mpid/ch3/src/ch3u_rma_pkthandler.c b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
index 395ddae..9447157 100644
--- a/src/mpid/ch3/src/ch3u_rma_pkthandler.c
+++ b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
@@ -7,22 +7,22 @@
#include "mpidimpl.h"
#include "mpidrma.h"
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_put);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_get);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_acc);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_get_accum);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_cas);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_fop);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_get_resp);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_get_accum_resp);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_cas_resp);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_fop_resp);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_lock);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_lock_ack);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_unlock);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_flush);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_ack);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmapkt_decr_at_cnt);
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_put ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_get ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_acc ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_get_accum ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_cas ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_fop ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_get_resp ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_get_accum_resp ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_cas_resp ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_fop_resp ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_lock ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_lock_ack ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_unlock ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_flush ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_ack ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmapkt_decr_at_cnt ATTRIBUTE((unused));
void MPIDI_CH3_RMA_Init_pkthandler_pvars(void)
{
@@ -188,12 +188,12 @@ static int MPIDI_CH3_ExtPktHandler_Accumulate(MPIDI_CH3_Pkt_flags_t flags,
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE);
if ((flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) && is_derived_dt) {
(*ext_hdr_sz) = sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t);
- (*ext_hdr_ptr) = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t));
+ (*ext_hdr_ptr) = MPL_malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t));
if ((*ext_hdr_ptr) == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_accum_stream_derived_t");
@@ -201,7 +201,7 @@ static int MPIDI_CH3_ExtPktHandler_Accumulate(MPIDI_CH3_Pkt_flags_t flags,
}
else if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
(*ext_hdr_sz) = sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t);
- (*ext_hdr_ptr) = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t));
+ (*ext_hdr_ptr) = MPL_malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t));
if ((*ext_hdr_ptr) == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_accum_stream_t");
@@ -209,7 +209,7 @@ static int MPIDI_CH3_ExtPktHandler_Accumulate(MPIDI_CH3_Pkt_flags_t flags,
}
else if (is_derived_dt) {
(*ext_hdr_sz) = sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t);
- (*ext_hdr_ptr) = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t));
+ (*ext_hdr_ptr) = MPL_malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t));
if ((*ext_hdr_ptr) == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomem %s", "MPIDI_CH3_Ext_pkt_accum_derived_t");
@@ -217,11 +217,11 @@ static int MPIDI_CH3_ExtPktHandler_Accumulate(MPIDI_CH3_Pkt_flags_t flags,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_EXTPKTHANDLER_ACCUMULATE);
return mpi_errno;
fn_fail:
if ((*ext_hdr_ptr) != NULL)
- MPIU_Free((*ext_hdr_ptr));
+ MPL_free((*ext_hdr_ptr));
(*ext_hdr_ptr) = NULL;
(*ext_hdr_sz) = 0;
goto fn_exit;
@@ -236,11 +236,11 @@ static int MPIDI_CH3_ExtPktHandler_GetAccumulate(MPIDI_CH3_Pkt_flags_t flags,
MPI_Aint * ext_hdr_sz)
{
/* Check if get_accum still reuses accum' extended packet header. */
- MPIU_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t) ==
+ MPIR_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_derived_t) ==
sizeof(MPIDI_CH3_Ext_pkt_get_accum_stream_derived_t));
- MPIU_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t) ==
+ MPIR_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_derived_t) ==
sizeof(MPIDI_CH3_Ext_pkt_get_accum_derived_t));
- MPIU_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t) ==
+ MPIR_Assert(sizeof(MPIDI_CH3_Ext_pkt_accum_stream_t) ==
sizeof(MPIDI_CH3_Ext_pkt_get_accum_stream_t));
return MPIDI_CH3_ExtPktHandler_Accumulate(flags, is_derived_dt, ext_hdr_ptr, ext_hdr_sz);
@@ -257,29 +257,29 @@ static int MPIDI_CH3_ExtPktHandler_GetAccumulate(MPIDI_CH3_Pkt_flags_t flags,
#define FUNCNAME MPIDI_CH3_PktHandler_Put
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_put_t *put_pkt = &pkt->put;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
int complete = 0;
char *data_buf = NULL;
- MPIDI_msg_sz_t data_len;
- MPID_Win *win_ptr;
+ intptr_t data_len;
+ MPIR_Win *win_ptr;
int acquire_lock_fail = 0;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received put pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received put pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_put);
- MPIU_Assert(put_pkt->target_win_handle != MPI_WIN_NULL);
- MPID_Win_get_ptr(put_pkt->target_win_handle, win_ptr);
+ MPIR_Assert(put_pkt->target_win_handle != MPI_WIN_NULL);
+ MPIR_Win_get_ptr(put_pkt->target_win_handle, win_ptr);
- mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, buflen, &acquire_lock_fail, &req);
+ mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, data, buflen, &acquire_lock_fail, &req);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -292,12 +292,12 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPI_Aint type_size;
/* Immed packet type is used when target datatype is predefined datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(put_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(put_pkt->datatype));
- MPID_Datatype_get_size_macro(put_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(put_pkt->datatype, type_size);
/* copy data from packet header to target buffer */
- MPIU_Memcpy(put_pkt->addr, put_pkt->info.data, put_pkt->count * type_size);
+ MPIR_Memcpy(put_pkt->addr, (void *) &put_pkt->info.data, put_pkt->count * type_size);
/* trigger final action */
mpi_errno = finish_op_on_target(win_ptr, vc, FALSE /* has no response data */ ,
@@ -305,18 +305,18 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
}
else {
- MPIU_Assert(pkt->type == MPIDI_CH3_PKT_PUT);
+ MPIR_Assert(pkt->type == MPIDI_CH3_PKT_PUT);
/* get start location of data and length of data */
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
+ data_buf = (char *) data;
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 1);
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Object_set_ref(req, 1);
req->dev.user_buf = put_pkt->addr;
req->dev.user_count = put_pkt->count;
@@ -331,17 +331,17 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_PUT_RECV);
req->dev.datatype = put_pkt->datatype;
- MPID_Datatype_get_size_macro(put_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(put_pkt->datatype, type_size);
req->dev.recv_data_sz = type_size * put_pkt->count;
- MPIU_Assert(req->dev.recv_data_sz > 0);
+ MPIR_Assert(req->dev.recv_data_sz > 0);
mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
MPIR_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_PUT");
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + data_len;
+ *buflen = data_len;
if (complete) {
mpi_errno = MPIDI_CH3_ReqHandler_PutRecvComplete(vc, req, &complete);
@@ -361,7 +361,7 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* allocate extended header in the request,
* only including fixed-length variables defined in packet type. */
req->dev.ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_put_derived_t);
- req->dev.ext_hdr_ptr = MPIU_Malloc(req->dev.ext_hdr_sz);
+ req->dev.ext_hdr_ptr = MPL_malloc(req->dev.ext_hdr_sz);
if (!req->dev.ext_hdr_ptr) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
"MPIDI_CH3_Ext_pkt_put_derived_t");
@@ -369,7 +369,7 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* put dataloop in a separate buffer to be reused in datatype.
* It will be freed when free datatype. */
- req->dev.dataloop = MPIU_Malloc(put_pkt->info.dataloop_size);
+ req->dev.dataloop = MPL_malloc(put_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
put_pkt->info.dataloop_size);
@@ -380,12 +380,11 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
* channel copy it */
if (data_len >= req->dev.ext_hdr_sz + put_pkt->info.dataloop_size) {
/* Copy extended header */
- MPIU_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
- MPIU_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
+ MPIR_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
+ MPIR_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
put_pkt->info.dataloop_size);
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + req->dev.ext_hdr_sz +
- put_pkt->info.dataloop_size;
+ *buflen = req->dev.ext_hdr_sz + put_pkt->info.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(vc, req, &complete);
@@ -403,7 +402,7 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[1].MPL_IOV_LEN = put_pkt->info.dataloop_size;
req->dev.iov_count = 2;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete;
}
@@ -421,7 +420,7 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_put);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_PUT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -431,31 +430,31 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_Get
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_get_t *get_pkt = &pkt->get;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
MPL_IOV iov[MPL_IOV_LIMIT];
int complete = 0;
char *data_buf = NULL;
- MPIDI_msg_sz_t data_len;
- MPID_Win *win_ptr;
+ intptr_t data_len;
+ MPIR_Win *win_ptr;
int mpi_errno = MPI_SUCCESS;
MPI_Aint type_size;
int acquire_lock_fail = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received get pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received get pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_get);
- MPIU_Assert(get_pkt->target_win_handle != MPI_WIN_NULL);
- MPID_Win_get_ptr(get_pkt->target_win_handle, win_ptr);
+ MPIR_Assert(get_pkt->target_win_handle != MPI_WIN_NULL);
+ MPIR_Win_get_ptr(get_pkt->target_win_handle, win_ptr);
- mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, buflen, &acquire_lock_fail, &req);
+ mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, data, buflen, &acquire_lock_fail, &req);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -464,20 +463,20 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
goto fn_exit;
}
- req = MPID_Request_create();
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
req->dev.target_win_handle = get_pkt->target_win_handle;
req->dev.flags = get_pkt->flags;
/* get start location of data and length of data */
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
+ data_buf = (char *) data;
/* here we increment the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter++;
if (get_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP) {
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_pkt->datatype));
}
if (MPIR_DATATYPE_IS_PREDEFINED(get_pkt->datatype)) {
@@ -491,7 +490,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_GET_RESP);
req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GetSendComplete;
req->dev.OnFinal = MPIDI_CH3_ReqHandler_GetSendComplete;
- req->kind = MPID_REQUEST_SEND;
+ req->kind = MPIR_REQUEST_KIND__SEND;
if (get_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP) {
MPIDI_Pkt_init(get_resp_pkt, MPIDI_CH3_PKT_GET_RESP_IMMED);
@@ -510,13 +509,13 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
get_resp_pkt->target_rank = win_ptr->comm_ptr->rank;
/* length of target data */
- MPID_Datatype_get_size_macro(get_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(get_pkt->datatype, type_size);
- MPID_Datatype_is_contig(get_pkt->datatype, &is_contig);
+ MPIDU_Datatype_is_contig(get_pkt->datatype, &is_contig);
if (get_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP) {
- MPIU_Assign_trunc(len, get_pkt->count * type_size, size_t);
- void *src = (void *) (get_pkt->addr), *dest = (void *) (get_resp_pkt->info.data);
+ MPIR_Assign_trunc(len, get_pkt->count * type_size, size_t);
+ void *src = (void *) (get_pkt->addr), *dest = (void *) &(get_resp_pkt->info.data);
mpi_errno = immed_copy(src, dest, len);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -530,7 +529,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
/* --END ERROR HANDLING-- */
@@ -547,7 +546,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
/* --END ERROR HANDLING-- */
@@ -556,11 +555,11 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) get_resp_pkt;
iov[0].MPL_IOV_LEN = sizeof(*get_resp_pkt);
- req->dev.segment_ptr = MPID_Segment_alloc();
+ req->dev.segment_ptr = MPIDU_Segment_alloc();
MPIR_ERR_CHKANDJUMP1(req->dev.segment_ptr == NULL, mpi_errno,
- MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
- MPID_Segment_init(get_pkt->addr, get_pkt->count,
+ MPIDU_Segment_init(get_pkt->addr, get_pkt->count,
get_pkt->datatype, req->dev.segment_ptr, 0);
req->dev.segment_first = 0;
req->dev.segment_size = get_pkt->count * type_size;
@@ -571,7 +570,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
}
else {
@@ -588,7 +587,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* allocate extended header in the request,
* only including fixed-length variables defined in packet type. */
req->dev.ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_get_derived_t);
- req->dev.ext_hdr_ptr = MPIU_Malloc(req->dev.ext_hdr_sz);
+ req->dev.ext_hdr_ptr = MPL_malloc(req->dev.ext_hdr_sz);
if (!req->dev.ext_hdr_ptr) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
"MPIDI_CH3_Ext_pkt_get_derived_t");
@@ -596,7 +595,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* put dataloop in a separate buffer to be reused in datatype.
* It will be freed when free datatype. */
- req->dev.dataloop = MPIU_Malloc(get_pkt->info.dataloop_size);
+ req->dev.dataloop = MPL_malloc(get_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
get_pkt->info.dataloop_size);
@@ -607,11 +606,11 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
* channel copy it */
if (data_len >= req->dev.ext_hdr_sz + get_pkt->info.dataloop_size) {
/* Copy extended header */
- MPIU_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
- MPIU_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
+ MPIR_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
+ MPIR_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
get_pkt->info.dataloop_size);
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + req->dev.ext_hdr_sz + get_pkt->info.dataloop_size;
+ *buflen = req->dev.ext_hdr_sz + get_pkt->info.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(vc, req, &complete);
@@ -627,14 +626,14 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[1].MPL_IOV_LEN = get_pkt->info.dataloop_size;
req->dev.iov_count = 2;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = req;
}
}
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_get);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -644,32 +643,32 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_Accumulate
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_accum_t *accum_pkt = &pkt->accum;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
MPI_Aint extent;
int complete = 0;
char *data_buf = NULL;
- MPIDI_msg_sz_t data_len;
- MPID_Win *win_ptr;
+ intptr_t data_len;
+ MPIR_Win *win_ptr;
int acquire_lock_fail = 0;
int mpi_errno = MPI_SUCCESS;
MPI_Aint type_size;
MPI_Aint stream_elem_count, total_len;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received accumulate pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received accumulate pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_acc);
- MPIU_Assert(accum_pkt->target_win_handle != MPI_WIN_NULL);
- MPID_Win_get_ptr(accum_pkt->target_win_handle, win_ptr);
+ MPIR_Assert(accum_pkt->target_win_handle != MPI_WIN_NULL);
+ MPIR_Win_get_ptr(accum_pkt->target_win_handle, win_ptr);
- mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, buflen, &acquire_lock_fail, &req);
+ mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, data, buflen, &acquire_lock_fail, &req);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -680,13 +679,13 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (pkt->type == MPIDI_CH3_PKT_ACCUMULATE_IMMED) {
/* Immed packet type is used when target datatype is predefined datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(accum_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(accum_pkt->datatype));
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
- mpi_errno = do_accumulate_op(accum_pkt->info.data, accum_pkt->count, accum_pkt->datatype,
- accum_pkt->addr, accum_pkt->count, accum_pkt->datatype,
- 0, accum_pkt->op);
+ mpi_errno = do_accumulate_op((void *) &accum_pkt->info.data, accum_pkt->count,
+ accum_pkt->datatype, accum_pkt->addr, accum_pkt->count,
+ accum_pkt->datatype, 0, accum_pkt->op);
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
if (mpi_errno) {
@@ -699,14 +698,14 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
}
else {
- MPIU_Assert(pkt->type == MPIDI_CH3_PKT_ACCUMULATE);
+ MPIR_Assert(pkt->type == MPIDI_CH3_PKT_ACCUMULATE);
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 1);
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Object_set_ref(req, 1);
*rreqp = req;
req->dev.user_count = accum_pkt->count;
@@ -719,8 +718,8 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.resp_request_handle = MPI_REQUEST_NULL;
/* get start location of data and length of data */
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
+ data_buf = (char *) data;
/* allocate extended header in the request,
* only including fixed-length variables defined in packet type. */
@@ -743,19 +742,19 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPL_IOV_LEN = req->dev.ext_hdr_sz;
req->dev.iov_count = 1;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
}
else {
req->dev.OnFinal = MPIDI_CH3_ReqHandler_AccumRecvComplete;
- MPID_Datatype_get_extent_macro(accum_pkt->datatype, extent);
+ MPIDU_Datatype_get_extent_macro(accum_pkt->datatype, extent);
- MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
+ MPIR_Assert(!MPIDI_Request_get_srbuf_flag(req));
/* allocate a SRBuf for receiving stream unit */
MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
/* --BEGIN ERROR HANDLING-- */
if (req->dev.tmpbuf_sz == 0) {
- MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, TYPICAL, "SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
"**nomem %d", MPIDI_CH3U_SRBuf_size);
@@ -766,20 +765,20 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.user_buf = req->dev.tmpbuf;
- MPID_Datatype_get_size_macro(accum_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(accum_pkt->datatype, type_size);
total_len = type_size * accum_pkt->count;
stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
- req->dev.recv_data_sz = MPIR_MIN(total_len, stream_elem_count * type_size);
- MPIU_Assert(req->dev.recv_data_sz > 0);
+ req->dev.recv_data_sz = MPL_MIN(total_len, stream_elem_count * type_size);
+ MPIR_Assert(req->dev.recv_data_sz > 0);
mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
MPIR_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_ACCUMULATE");
/* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = data_len;
if (complete) {
mpi_errno = MPIDI_CH3_ReqHandler_AccumRecvComplete(vc, req, &complete);
@@ -799,7 +798,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* Put dataloop in a separate buffer to be reused in datatype.
* It will be freed when free datatype. */
- req->dev.dataloop = MPIU_Malloc(accum_pkt->info.dataloop_size);
+ req->dev.dataloop = MPL_malloc(accum_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
accum_pkt->info.dataloop_size);
@@ -807,12 +806,11 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (data_len >= req->dev.ext_hdr_sz + accum_pkt->info.dataloop_size) {
/* Copy extended header */
- MPIU_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
- MPIU_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
+ MPIR_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
+ MPIR_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
accum_pkt->info.dataloop_size);
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + req->dev.ext_hdr_sz +
- accum_pkt->info.dataloop_size;
+ *buflen = req->dev.ext_hdr_sz + accum_pkt->info.dataloop_size;
/* All extended data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(vc, req, &complete);
@@ -832,7 +830,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[1].MPL_IOV_LEN = accum_pkt->info.dataloop_size;
req->dev.iov_count = 2;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
}
}
@@ -845,7 +843,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_acc);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -856,31 +854,31 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_GetAccumulate
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_get_accum_t *get_accum_pkt = &pkt->get_accum;
- MPID_Request *req = NULL;
+ MPIR_Request *req = NULL;
MPI_Aint extent;
int complete = 0;
char *data_buf = NULL;
- MPIDI_msg_sz_t data_len;
- MPID_Win *win_ptr;
+ intptr_t data_len;
+ MPIR_Win *win_ptr;
int acquire_lock_fail = 0;
int mpi_errno = MPI_SUCCESS;
MPI_Aint stream_elem_count, total_len;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received accumulate pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received accumulate pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_get_accum);
- MPIU_Assert(get_accum_pkt->target_win_handle != MPI_WIN_NULL);
- MPID_Win_get_ptr(get_accum_pkt->target_win_handle, win_ptr);
+ MPIR_Assert(get_accum_pkt->target_win_handle != MPI_WIN_NULL);
+ MPIR_Win_get_ptr(get_accum_pkt->target_win_handle, win_ptr);
- mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, buflen, &acquire_lock_fail, &req);
+ mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, data, buflen, &acquire_lock_fail, &req);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -892,35 +890,35 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (pkt->type == MPIDI_CH3_PKT_GET_ACCUM_IMMED) {
size_t len;
void *src = NULL, *dest = NULL;
- MPID_Request *resp_req = NULL;
+ MPIR_Request *resp_req = NULL;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_get_accum_resp_t *get_accum_resp_pkt = &upkt.get_accum_resp;
MPL_IOV iov[MPL_IOV_LIMIT];
int iovcnt;
MPI_Aint type_size;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
/* Immed packet type is used when target datatype is predefined datatype. */
- MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype));
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype));
- resp_req = MPID_Request_create();
+ resp_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
resp_req->dev.target_win_handle = get_accum_pkt->target_win_handle;
resp_req->dev.flags = get_accum_pkt->flags;
MPIDI_Request_set_type(resp_req, MPIDI_REQUEST_TYPE_GET_ACCUM_RESP);
resp_req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumSendComplete;
resp_req->dev.OnFinal = MPIDI_CH3_ReqHandler_GaccumSendComplete;
- resp_req->kind = MPID_REQUEST_SEND;
+ resp_req->kind = MPIR_REQUEST_KIND__SEND;
/* here we increment the Active Target counter to guarantee the GET-like
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter++;
/* Calculate the length of reponse data, ensure that it fits into immed packet. */
- MPID_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
- MPIU_Assign_trunc(len, get_accum_pkt->count * type_size, size_t);
+ MPIDU_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
+ MPIR_Assign_trunc(len, get_accum_pkt->count * type_size, size_t);
MPIDI_Pkt_init(get_accum_resp_pkt, MPIDI_CH3_PKT_GET_ACCUM_RESP_IMMED);
get_accum_resp_pkt->request_handle = get_accum_pkt->request_handle;
@@ -939,7 +937,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
/* copy data from target buffer to response packet header */
- src = (void *) (get_accum_pkt->addr), dest = (void *) (get_accum_resp_pkt->info.data);
+ src = (void *) (get_accum_pkt->addr), dest = (void *) &(get_accum_resp_pkt->info.data);
mpi_errno = immed_copy(src, dest, len);
if (mpi_errno != MPI_SUCCESS) {
if (win_ptr->shm_allocated == TRUE)
@@ -949,7 +947,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* perform accumulate operation. */
mpi_errno =
- do_accumulate_op(get_accum_pkt->info.data, get_accum_pkt->count,
+ do_accumulate_op((void *) &get_accum_pkt->info.data, get_accum_pkt->count,
get_accum_pkt->datatype, get_accum_pkt->addr, get_accum_pkt->count,
get_accum_pkt->datatype, 0, get_accum_pkt->op);
@@ -968,7 +966,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS) {
- MPID_Request_release(resp_req);
+ MPIR_Request_free(resp_req);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
/* --END ERROR HANDLING-- */
@@ -976,10 +974,10 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
else {
int is_derived_dt = 0;
- MPIU_Assert(pkt->type == MPIDI_CH3_PKT_GET_ACCUM);
+ MPIR_Assert(pkt->type == MPIDI_CH3_PKT_GET_ACCUM);
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 1);
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Object_set_ref(req, 1);
*rreqp = req;
req->dev.user_count = get_accum_pkt->count;
@@ -991,8 +989,8 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.resp_request_handle = get_accum_pkt->request_handle;
/* get start location of data and length of data */
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
+ data_buf = (char *) data;
/* allocate extended header in the request,
* only including fixed-length variables defined in packet type. */
@@ -1017,7 +1015,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPL_IOV_LEN = req->dev.ext_hdr_sz;
req->dev.iov_count = 1;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
}
else {
int is_empty_origin = FALSE;
@@ -1031,18 +1029,18 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (is_empty_origin == TRUE) {
req->dev.recv_data_sz = 0;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
complete = 1;
}
else {
- MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, extent);
+ MPIDU_Datatype_get_extent_macro(get_accum_pkt->datatype, extent);
- MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
+ MPIR_Assert(!MPIDI_Request_get_srbuf_flag(req));
/* allocate a SRBuf for receiving stream unit */
MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
/* --BEGIN ERROR HANDLING-- */
if (req->dev.tmpbuf_sz == 0) {
- MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CHANNEL, TYPICAL, "SRBuf allocation failure");
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
"**nomem %d", MPIDI_CH3U_SRBuf_size);
@@ -1053,19 +1051,19 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.user_buf = req->dev.tmpbuf;
- MPID_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
total_len = type_size * get_accum_pkt->count;
stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
- req->dev.recv_data_sz = MPIR_MIN(total_len, stream_elem_count * type_size);
- MPIU_Assert(req->dev.recv_data_sz > 0);
+ req->dev.recv_data_sz = MPL_MIN(total_len, stream_elem_count * type_size);
+ MPIR_Assert(req->dev.recv_data_sz > 0);
mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
MPIR_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_ACCUMULATE");
/* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = data_len;
}
if (complete) {
@@ -1086,7 +1084,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* Put dataloop in a separate buffer to be reused in datatype.
* It will be freed when free datatype. */
- req->dev.dataloop = MPIU_Malloc(get_accum_pkt->info.dataloop_size);
+ req->dev.dataloop = MPL_malloc(get_accum_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
get_accum_pkt->info.dataloop_size);
@@ -1094,12 +1092,11 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (data_len >= req->dev.ext_hdr_sz + get_accum_pkt->info.dataloop_size) {
/* Copy extended header */
- MPIU_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
- MPIU_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
+ MPIR_Memcpy(req->dev.ext_hdr_ptr, data_buf, req->dev.ext_hdr_sz);
+ MPIR_Memcpy(req->dev.dataloop, data_buf + req->dev.ext_hdr_sz,
get_accum_pkt->info.dataloop_size);
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + req->dev.ext_hdr_sz +
- get_accum_pkt->info.dataloop_size;
+ *buflen = req->dev.ext_hdr_sz + get_accum_pkt->info.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(vc, req, &complete);
@@ -1119,7 +1116,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[1].MPL_IOV_LEN = get_accum_pkt->info.dataloop_size;
req->dev.iov_count = 2;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
}
}
@@ -1132,7 +1129,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_get_accum);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1144,33 +1141,33 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_CAS
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_cas_resp_t *cas_resp_pkt = &upkt.cas_resp;
MPIDI_CH3_Pkt_cas_t *cas_pkt = &pkt->cas;
- MPID_Win *win_ptr;
- MPID_Request *req;
- MPID_Request *rreq = NULL;
+ MPIR_Win *win_ptr;
+ MPIR_Request *req;
+ MPIR_Request *rreq = NULL;
MPI_Aint len;
int acquire_lock_fail = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received CAS pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received CAS pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_cas);
- MPIU_Assert(cas_pkt->target_win_handle != MPI_WIN_NULL);
- MPID_Win_get_ptr(cas_pkt->target_win_handle, win_ptr);
+ MPIR_Assert(cas_pkt->target_win_handle != MPI_WIN_NULL);
+ MPIR_Win_get_ptr(cas_pkt->target_win_handle, win_ptr);
- mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, buflen, &acquire_lock_fail, &rreq);
+ mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, data, buflen, &acquire_lock_fail, &rreq);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(rreq == NULL); /* CAS should not have request because all data
+ MPIR_Assert(rreq == NULL); /* CAS should not have request because all data
* can fit in packet header */
if (acquire_lock_fail) {
@@ -1180,7 +1177,7 @@ int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
/* return the number of bytes processed in this function */
/* data_len == 0 (all within packet) */
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
MPIDI_Pkt_init(cas_resp_pkt, MPIDI_CH3_PKT_CAS_RESP_IMMED);
@@ -1195,17 +1192,17 @@ int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
cas_resp_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_ACK;
/* Copy old value into the response packet */
- MPID_Datatype_get_size_macro(cas_pkt->datatype, len);
- MPIU_Assert(len <= sizeof(MPIDI_CH3_CAS_Immed_u));
+ MPIDU_Datatype_get_size_macro(cas_pkt->datatype, len);
+ MPIR_Assert(len <= sizeof(MPIDI_CH3_CAS_Immed_u));
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
- MPIU_Memcpy((void *) &cas_resp_pkt->info.data, cas_pkt->addr, len);
+ MPIR_Memcpy((void *) &cas_resp_pkt->info.data, cas_pkt->addr, len);
/* Compare and replace if equal */
if (MPIR_Compare_equal(&cas_pkt->compare_data, cas_pkt->addr, cas_pkt->datatype)) {
- MPIU_Memcpy(cas_pkt->addr, &cas_pkt->origin_data, len);
+ MPIR_Memcpy(cas_pkt->addr, &cas_pkt->origin_data, len);
}
if (win_ptr->shm_allocated == TRUE)
@@ -1219,7 +1216,7 @@ int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIR_ERR_CHKANDJUMP(mpi_errno != MPI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
if (req != NULL) {
- if (!MPID_Request_is_complete(req)) {
+ if (!MPIR_Request_is_complete(req)) {
/* sending process is not completed, set proper OnDataAvail
* (it is initialized to NULL by lower layer) */
req->dev.target_win_handle = cas_pkt->target_win_handle;
@@ -1230,11 +1227,11 @@ int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter++;
- MPID_Request_release(req);
+ MPIR_Request_free(req);
goto fn_exit;
}
else
- MPID_Request_release(req);
+ MPIR_Request_free(req);
}
mpi_errno = finish_op_on_target(win_ptr, vc, TRUE /* has response data */ ,
@@ -1244,7 +1241,7 @@ int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_cas);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_CAS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1257,25 +1254,25 @@ int MPIDI_CH3_PktHandler_CAS(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_CASResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ MPIDI_CH3_Pkt_t * pkt, void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_cas_resp_t *cas_resp_pkt = &pkt->cas_resp;
- MPID_Request *req;
+ MPIR_Request *req;
MPI_Aint len;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
int target_rank = cas_resp_pkt->target_rank;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received CAS response pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received CAS response pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_cas_resp);
- MPID_Request_get_ptr(cas_resp_pkt->request_handle, req);
- MPID_Win_get_ptr(req->dev.source_win_handle, win_ptr);
+ MPIR_Request_get_ptr(cas_resp_pkt->request_handle, req);
+ MPIR_Win_get_ptr(req->dev.source_win_handle, win_ptr);
/* decrement ack_counter on this target */
if (cas_resp_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
@@ -1293,21 +1290,21 @@ int MPIDI_CH3_PktHandler_CASResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
MPIR_ERR_POP(mpi_errno);
}
- MPID_Datatype_get_size_macro(req->dev.datatype, len);
+ MPIDU_Datatype_get_size_macro(req->dev.datatype, len);
- MPIU_Memcpy(req->dev.user_buf, (void *) &cas_resp_pkt->info.data, len);
+ MPIR_Memcpy(req->dev.user_buf, (void *) &cas_resp_pkt->info.data, len);
mpi_errno = MPID_Request_complete(req);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_cas_resp);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_CASRESP);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1318,29 +1315,29 @@ int MPIDI_CH3_PktHandler_CASResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#define FUNCNAME MPIDI_CH3_PktHandler_FOP
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_fop_t *fop_pkt = &pkt->fop;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_fop_resp_t *fop_resp_pkt = &upkt.fop_resp;
- MPID_Request *resp_req = NULL;
- MPID_Request *rreq = NULL;
+ MPIR_Request *resp_req = NULL;
+ MPIR_Request *rreq = NULL;
int acquire_lock_fail = 0;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
MPI_Aint type_size;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received FOP pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received FOP pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_fop);
- MPID_Win_get_ptr(fop_pkt->target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(fop_pkt->target_win_handle, win_ptr);
- mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, buflen, &acquire_lock_fail, &rreq);
+ mpi_errno = check_piggyback_lock(win_ptr, vc, pkt, data, buflen, &acquire_lock_fail, &rreq);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -1349,10 +1346,10 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
goto fn_exit;
}
- (*buflen) = sizeof(MPIDI_CH3_Pkt_t);
+ (*buflen) = 0;
(*rreqp) = NULL;
- MPID_Datatype_get_size_macro(fop_pkt->datatype, type_size);
+ MPIDU_Datatype_get_size_macro(fop_pkt->datatype, type_size);
if (pkt->type == MPIDI_CH3_PKT_FOP_IMMED) {
@@ -1373,7 +1370,7 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
/* copy data to resp pkt header */
- void *src = fop_pkt->addr, *dest = fop_resp_pkt->info.data;
+ void *src = fop_pkt->addr, *dest = (void *) &fop_resp_pkt->info.data;
mpi_errno = immed_copy(src, dest, type_size);
if (mpi_errno != MPI_SUCCESS) {
if (win_ptr->shm_allocated == TRUE)
@@ -1382,7 +1379,7 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
}
/* Apply the op */
- mpi_errno = do_accumulate_op(fop_pkt->info.data, 1, fop_pkt->datatype,
+ mpi_errno = do_accumulate_op((void *) &fop_pkt->info.data, 1, fop_pkt->datatype,
fop_pkt->addr, 1, fop_pkt->datatype, 0, fop_pkt->op);
if (win_ptr->shm_allocated == TRUE)
@@ -1398,7 +1395,7 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIR_ERR_CHKANDJUMP(mpi_errno != MPI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
if (resp_req != NULL) {
- if (!MPID_Request_is_complete(resp_req)) {
+ if (!MPIR_Request_is_complete(resp_req)) {
/* sending process is not completed, set proper OnDataAvail
* (it is initialized to NULL by lower layer) */
resp_req->dev.target_win_handle = fop_pkt->target_win_handle;
@@ -1409,11 +1406,11 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
* operation are completed when counter reaches zero. */
win_ptr->at_completion_counter++;
- MPID_Request_release(resp_req);
+ MPIR_Request_free(resp_req);
goto fn_exit;
}
else {
- MPID_Request_release(resp_req);
+ MPIR_Request_free(resp_req);
}
}
@@ -1423,11 +1420,10 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIR_ERR_POP(mpi_errno);
}
else {
- MPIU_Assert(pkt->type == MPIDI_CH3_PKT_FOP);
+ MPIR_Assert(pkt->type == MPIDI_CH3_PKT_FOP);
- MPID_Request *req = NULL;
- char *data_buf = NULL;
- MPIDI_msg_sz_t data_len;
+ MPIR_Request *req = NULL;
+ intptr_t data_len;
MPI_Aint extent;
int complete = 0;
int is_empty_origin = FALSE;
@@ -1436,8 +1432,8 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (fop_pkt->op == MPI_NO_OP)
is_empty_origin = TRUE;
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 1);
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIR_Object_set_ref(req, 1);
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_FOP_RECV);
*rreqp = req;
@@ -1454,30 +1450,29 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
if (is_empty_origin == TRUE) {
req->dev.recv_data_sz = 0;
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
complete = 1;
}
else {
/* get start location of data and length of data */
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
- MPID_Datatype_get_extent_macro(fop_pkt->datatype, extent);
+ MPIDU_Datatype_get_extent_macro(fop_pkt->datatype, extent);
- req->dev.user_buf = MPIU_Malloc(extent);
+ req->dev.user_buf = MPL_malloc(extent);
if (!req->dev.user_buf) {
MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d", extent);
}
req->dev.recv_data_sz = type_size;
- MPIU_Assert(req->dev.recv_data_sz > 0);
+ MPIR_Assert(req->dev.recv_data_sz > 0);
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data, &data_len, &complete);
MPIR_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_ACCUMULATE");
/* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = data_len;
}
if (complete) {
@@ -1493,7 +1488,7 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_fop);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1507,28 +1502,27 @@ int MPIDI_CH3_PktHandler_FOP(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_FOPResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_fop_resp_t *fop_resp_pkt = &pkt->fop_resp;
- MPID_Request *req = NULL;
- MPID_Win *win_ptr = NULL;
+ MPIR_Request *req = NULL;
+ MPIR_Win *win_ptr = NULL;
MPI_Aint type_size;
- MPIDI_msg_sz_t data_len;
- char *data_buf = NULL;
+ intptr_t data_len;
int complete = 0;
int target_rank = fop_resp_pkt->target_rank;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received FOP response pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received FOP response pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_fop_resp);
- MPID_Request_get_ptr(fop_resp_pkt->request_handle, req);
- MPID_Win_get_ptr(req->dev.source_win_handle, win_ptr);
+ MPIR_Request_get_ptr(fop_resp_pkt->request_handle, req);
+ MPIR_Win_get_ptr(req->dev.source_win_handle, win_ptr);
/* decrement ack_counter */
if (fop_resp_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
@@ -1546,31 +1540,30 @@ int MPIDI_CH3_PktHandler_FOPResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
MPIR_ERR_POP(mpi_errno);
}
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
- MPID_Datatype_get_size_macro(req->dev.datatype, type_size);
+ MPIDU_Datatype_get_size_macro(req->dev.datatype, type_size);
req->dev.recv_data_sz = type_size;
req->dev.user_count = 1;
*rreqp = req;
if (fop_resp_pkt->type == MPIDI_CH3_PKT_FOP_RESP_IMMED) {
- MPIU_Memcpy(req->dev.user_buf, fop_resp_pkt->info.data, req->dev.recv_data_sz);
+ MPIR_Memcpy(req->dev.user_buf, (void *) &fop_resp_pkt->info.data, req->dev.recv_data_sz);
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
complete = 1;
}
else {
- MPIU_Assert(fop_resp_pkt->type == MPIDI_CH3_PKT_FOP_RESP);
+ MPIR_Assert(fop_resp_pkt->type == MPIDI_CH3_PKT_FOP_RESP);
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data, &data_len, &complete);
MPIR_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_FOP_RESP");
/* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = data_len;
}
if (complete) {
@@ -1583,7 +1576,7 @@ int MPIDI_CH3_PktHandler_FOPResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_fop_resp);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_FOPRESP);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1596,28 +1589,27 @@ int MPIDI_CH3_PktHandler_FOPResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#define FUNCNAME MPIDI_CH3_PktHandler_Get_AccumResp
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_get_accum_resp_t *get_accum_resp_pkt = &pkt->get_accum_resp;
- MPID_Request *req;
+ MPIR_Request *req;
int complete = 0;
- char *data_buf = NULL;
- MPIDI_msg_sz_t data_len;
+ intptr_t data_len;
int mpi_errno = MPI_SUCCESS;
MPI_Aint type_size;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
int target_rank = get_accum_resp_pkt->target_rank;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received Get-Accumulate response pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received Get-Accumulate response pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_get_accum_resp);
- MPID_Request_get_ptr(get_accum_resp_pkt->request_handle, req);
- MPID_Win_get_ptr(req->dev.source_win_handle, win_ptr);
+ MPIR_Request_get_ptr(get_accum_resp_pkt->request_handle, req);
+ MPIR_Win_get_ptr(req->dev.source_win_handle, win_ptr);
/* decrement ack_counter on target */
if (get_accum_resp_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
@@ -1634,23 +1626,23 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIR_ERR_POP(mpi_errno);
}
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
- MPID_Datatype_get_size_macro(req->dev.datatype, type_size);
+ MPIDU_Datatype_get_size_macro(req->dev.datatype, type_size);
*rreqp = req;
if (get_accum_resp_pkt->type == MPIDI_CH3_PKT_GET_ACCUM_RESP_IMMED) {
req->dev.recv_data_sz = type_size * req->dev.user_count;
- MPIU_Memcpy(req->dev.user_buf, get_accum_resp_pkt->info.data, req->dev.recv_data_sz);
+ MPIR_Memcpy(req->dev.user_buf, (void *) &get_accum_resp_pkt->info.data,
+ req->dev.recv_data_sz);
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
complete = 1;
}
else {
- MPIU_Assert(pkt->type == MPIDI_CH3_PKT_GET_ACCUM_RESP);
+ MPIR_Assert(pkt->type == MPIDI_CH3_PKT_GET_ACCUM_RESP);
MPI_Datatype basic_type;
MPI_Aint basic_type_extent, basic_type_size;
@@ -1663,12 +1655,12 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
basic_type = req->dev.datatype;
}
else {
- MPIU_Assert(req->dev.datatype_ptr != NULL);
+ MPIR_Assert(req->dev.datatype_ptr != NULL);
basic_type = req->dev.datatype_ptr->basic_type;
}
- MPID_Datatype_get_extent_macro(basic_type, basic_type_extent);
- MPID_Datatype_get_size_macro(basic_type, basic_type_size);
+ MPIDU_Datatype_get_extent_macro(basic_type, basic_type_extent);
+ MPIDU_Datatype_get_size_macro(basic_type, basic_type_size);
/* Note: here we get the stream_offset from the extended packet header
* in the response request, which is set in issue_get_acc_op() funcion.
@@ -1682,23 +1674,23 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
rest_len = total_len - contig_stream_offset;
stream_elem_count = MPIDI_CH3U_SRBuf_size / basic_type_extent;
- req->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * basic_type_size);
+ req->dev.recv_data_sz = MPL_MIN(rest_len, stream_elem_count * basic_type_size);
real_stream_offset = (contig_stream_offset / basic_type_size) * basic_type_extent;
if (MPIR_DATATYPE_IS_PREDEFINED(req->dev.datatype)) {
req->dev.user_buf = (void *) ((char *) req->dev.user_buf + real_stream_offset);
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data, &data_len, &complete);
MPIR_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_GET_ACCUM_RESP");
/* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = data_len;
}
else {
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
- req->dev.segment_ptr = MPID_Segment_alloc();
- MPID_Segment_init(req->dev.user_buf, req->dev.user_count, req->dev.datatype,
+ req->dev.segment_ptr = MPIDU_Segment_alloc();
+ MPIDU_Segment_init(req->dev.user_buf, req->dev.user_count, req->dev.datatype,
req->dev.segment_ptr, 0);
req->dev.segment_first = contig_stream_offset;
req->dev.segment_size = contig_stream_offset + req->dev.recv_data_sz;
@@ -1723,7 +1715,7 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_get_accum_resp);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GET_ACCUM_RESP);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1734,29 +1726,29 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_Lock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_Lock(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+int MPIDI_CH3_PktHandler_Lock(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_lock_t *lock_pkt = &pkt->lock;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
int lock_type;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received lock pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received lock pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_lock);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
- MPID_Win_get_ptr(lock_pkt->target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(lock_pkt->target_win_handle, win_ptr);
if (lock_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED)
lock_type = MPI_LOCK_SHARED;
else {
- MPIU_Assert(lock_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
+ MPIR_Assert(lock_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE);
lock_type = MPI_LOCK_EXCLUSIVE;
}
@@ -1770,17 +1762,17 @@ int MPIDI_CH3_PktHandler_Lock(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
}
else {
- MPID_Request *req = NULL;
- mpi_errno = enqueue_lock_origin(win_ptr, vc, pkt, buflen, &req);
+ MPIR_Request *req = NULL;
+ mpi_errno = enqueue_lock_origin(win_ptr, vc, pkt, data, buflen, &req);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_Assert(req == NULL);
+ MPIR_Assert(req == NULL);
}
*rreqp = NULL;
fn_fail:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_lock);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCK);
return mpi_errno;
}
@@ -1790,28 +1782,27 @@ int MPIDI_CH3_PktHandler_Lock(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_GetResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ MPIDI_CH3_Pkt_t * pkt, void *data,
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_get_resp_t *get_resp_pkt = &pkt->get_resp;
- MPID_Request *req;
+ MPIR_Request *req;
int complete = 0;
- char *data_buf = NULL;
- MPIDI_msg_sz_t data_len;
+ intptr_t data_len;
int mpi_errno = MPI_SUCCESS;
MPI_Aint type_size;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
int target_rank = get_resp_pkt->target_rank;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received get response pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received get response pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_get_resp);
- MPID_Request_get_ptr(get_resp_pkt->request_handle, req);
- MPID_Win_get_ptr(req->dev.source_win_handle, win_ptr);
+ MPIR_Request_get_ptr(get_resp_pkt->request_handle, req);
+ MPIR_Win_get_ptr(req->dev.source_win_handle, win_ptr);
/* decrement ack_counter on target */
if (get_resp_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED) {
@@ -1829,30 +1820,29 @@ int MPIDI_CH3_PktHandler_GetResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
MPIR_ERR_POP(mpi_errno);
}
- data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
- data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = *buflen;
- MPID_Datatype_get_size_macro(req->dev.datatype, type_size);
+ MPIDU_Datatype_get_size_macro(req->dev.datatype, type_size);
req->dev.recv_data_sz = type_size * req->dev.user_count;
*rreqp = req;
if (get_resp_pkt->type == MPIDI_CH3_PKT_GET_RESP_IMMED) {
- MPIU_Memcpy(req->dev.user_buf, get_resp_pkt->info.data, req->dev.recv_data_sz);
+ MPIR_Memcpy(req->dev.user_buf, (void *) &get_resp_pkt->info.data, req->dev.recv_data_sz);
/* return the number of bytes processed in this function */
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
complete = 1;
}
else {
- MPIU_Assert(get_resp_pkt->type == MPIDI_CH3_PKT_GET_RESP);
+ MPIR_Assert(get_resp_pkt->type == MPIDI_CH3_PKT_GET_RESP);
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data, &data_len, &complete);
MPIR_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_GET_RESP");
/* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = data_len;
}
if (complete) {
@@ -1866,7 +1856,7 @@ int MPIDI_CH3_PktHandler_GetResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_get_resp);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETRESP);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1877,32 +1867,33 @@ int MPIDI_CH3_PktHandler_GetResp(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_LockAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_lock_ack_t *lock_ack_pkt = &pkt->lock_ack;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
int target_rank = lock_ack_pkt->target_rank;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received lock ack pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received lock ack pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_lock_ack);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
if (lock_ack_pkt->source_win_handle != MPI_WIN_NULL) {
- MPID_Win_get_ptr(lock_ack_pkt->source_win_handle, win_ptr);
+ MPIR_Win_get_ptr(lock_ack_pkt->source_win_handle, win_ptr);
}
else {
- MPIU_Assert(lock_ack_pkt->request_handle != MPI_REQUEST_NULL);
+ MPIR_Assert(lock_ack_pkt->request_handle != MPI_REQUEST_NULL);
- MPID_Request *req_ptr = NULL;
- MPID_Request_get_ptr(lock_ack_pkt->request_handle, req_ptr);
- MPIU_Assert(req_ptr->dev.source_win_handle != MPI_REQUEST_NULL);
- MPID_Win_get_ptr(req_ptr->dev.source_win_handle, win_ptr);
+ MPIR_Request *req_ptr = NULL;
+ MPIR_Request_get_ptr(lock_ack_pkt->request_handle, req_ptr);
+ MPIR_Assert(req_ptr->dev.source_win_handle != MPI_REQUEST_NULL);
+ MPIR_Win_get_ptr(req_ptr->dev.source_win_handle, win_ptr);
}
mpi_errno = handle_lock_ack(win_ptr, target_rank, lock_ack_pkt->flags);
@@ -1913,7 +1904,7 @@ int MPIDI_CH3_PktHandler_LockAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_CH3_Progress_signal_completion();
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_lock_ack);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKACK);
fn_exit:
return MPI_SUCCESS;
fn_fail:
@@ -1925,29 +1916,30 @@ int MPIDI_CH3_PktHandler_LockAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_LockOpAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_lock_op_ack_t *lock_op_ack_pkt = &pkt->lock_op_ack;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
int target_rank = lock_op_ack_pkt->target_rank;
MPIDI_CH3_Pkt_flags_t flags = lock_op_ack_pkt->flags;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
if (lock_op_ack_pkt->source_win_handle != MPI_WIN_NULL) {
- MPID_Win_get_ptr(lock_op_ack_pkt->source_win_handle, win_ptr);
+ MPIR_Win_get_ptr(lock_op_ack_pkt->source_win_handle, win_ptr);
}
else {
- MPIU_Assert(lock_op_ack_pkt->request_handle != MPI_REQUEST_NULL);
+ MPIR_Assert(lock_op_ack_pkt->request_handle != MPI_REQUEST_NULL);
- MPID_Request *req_ptr = NULL;
- MPID_Request_get_ptr(lock_op_ack_pkt->request_handle, req_ptr);
- MPIU_Assert(req_ptr->dev.source_win_handle != MPI_REQUEST_NULL);
- MPID_Win_get_ptr(req_ptr->dev.source_win_handle, win_ptr);
+ MPIR_Request *req_ptr = NULL;
+ MPIR_Request_get_ptr(lock_op_ack_pkt->request_handle, req_ptr);
+ MPIR_Assert(req_ptr->dev.source_win_handle != MPI_REQUEST_NULL);
+ MPIR_Win_get_ptr(req_ptr->dev.source_win_handle, win_ptr);
}
mpi_errno = handle_lock_ack_with_op(win_ptr, target_rank, lock_op_ack_pkt->flags);
@@ -1959,7 +1951,7 @@ int MPIDI_CH3_PktHandler_LockOpAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIR_ERR_POP(mpi_errno);
if (flags & MPIDI_CH3_PKT_FLAG_RMA_ACK) {
- MPIU_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED);
+ MPIR_Assert(flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_GRANTED);
mpi_errno = MPIDI_CH3I_RMA_Handle_ack(win_ptr, target_rank);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -1968,7 +1960,7 @@ int MPIDI_CH3_PktHandler_LockOpAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
*rreqp = NULL;
MPIDI_CH3_Progress_signal_completion();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_LOCKOPACK);
fn_exit:
return MPI_SUCCESS;
fn_fail:
@@ -1980,23 +1972,24 @@ int MPIDI_CH3_PktHandler_LockOpAck(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_Ack(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_ack_t *ack_pkt = &pkt->ack;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
int mpi_errno = MPI_SUCCESS;
int target_rank = ack_pkt->target_rank;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received shared lock ops done pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received shared lock ops done pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_ack);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
- MPID_Win_get_ptr(ack_pkt->source_win_handle, win_ptr);
+ MPIR_Win_get_ptr(ack_pkt->source_win_handle, win_ptr);
/* decrement ack_counter on target */
mpi_errno = MPIDI_CH3I_RMA_Handle_ack(win_ptr, target_rank);
@@ -2007,7 +2000,7 @@ int MPIDI_CH3_PktHandler_Ack(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_CH3_Progress_signal_completion();
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_ack);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACK);
fn_exit:
return MPI_SUCCESS;
fn_fail:
@@ -2020,24 +2013,24 @@ int MPIDI_CH3_PktHandler_Ack(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_DecrAtCnt(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ MPIDI_CH3_Pkt_t * pkt, void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
MPIDI_CH3_Pkt_decr_at_counter_t *decr_at_cnt_pkt = &pkt->decr_at_cnt;
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT);
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_decr_at_cnt);
- MPID_Win_get_ptr(decr_at_cnt_pkt->target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(decr_at_cnt_pkt->target_win_handle, win_ptr);
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
if (decr_at_cnt_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_FLUSH) {
@@ -2050,7 +2043,7 @@ int MPIDI_CH3_PktHandler_DecrAtCnt(MPIDI_VC_t * vc ATTRIBUTE((unused)),
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_decr_at_cnt);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_DECRATCNT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -2062,23 +2055,23 @@ int MPIDI_CH3_PktHandler_DecrAtCnt(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_Unlock(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ MPIDI_CH3_Pkt_t * pkt, void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_unlock_t *unlock_pkt = &pkt->unlock;
- MPID_Win *win_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received unlock pkt");
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received unlock pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_unlock);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
- MPID_Win_get_ptr(unlock_pkt->target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(unlock_pkt->target_win_handle, win_ptr);
mpi_errno = MPIDI_CH3I_Release_lock(win_ptr);
MPIR_ERR_CHKANDJUMP(mpi_errno != MPI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**ch3|rma_msg");
@@ -2092,7 +2085,7 @@ int MPIDI_CH3_PktHandler_Unlock(MPIDI_VC_t * vc ATTRIBUTE((unused)),
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_unlock);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_UNLOCK);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -2106,22 +2099,23 @@ int MPIDI_CH3_PktHandler_Unlock(MPIDI_VC_t * vc ATTRIBUTE((unused)),
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3_PktHandler_Flush(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
- MPIDI_msg_sz_t * buflen, MPID_Request ** rreqp)
+ void *data ATTRIBUTE((unused)),
+ intptr_t * buflen, MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3_Pkt_flush_t *flush_pkt = &pkt->flush;
- MPID_Win *win_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH);
+ MPIR_Win *win_ptr = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH);
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "received flush pkt");
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER, VERBOSE, "received flush pkt");
MPIR_T_PVAR_TIMER_START(RMA, rma_rmapkt_flush);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
*rreqp = NULL;
- MPID_Win_get_ptr(flush_pkt->target_win_handle, win_ptr);
+ MPIR_Win_get_ptr(flush_pkt->target_win_handle, win_ptr);
mpi_errno = MPIDI_CH3I_Send_ack_pkt(vc, win_ptr, flush_pkt->source_win_handle);
if (mpi_errno != MPI_SUCCESS)
@@ -2129,7 +2123,7 @@ int MPIDI_CH3_PktHandler_Flush(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
fn_exit:
MPIR_T_PVAR_TIMER_END(RMA, rma_rmapkt_flush);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_PKTHANDLER_FLUSH);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -2147,76 +2141,76 @@ int MPIDI_CH3_PktHandler_Flush(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
#ifdef MPICH_DBG_OUTPUT
int MPIDI_CH3_PktPrint_Put(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_PUT\n"));
- MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->put.addr));
- MPIU_DBG_PRINTF((" count ........ %d\n", pkt->put.count));
- MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->put.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. 0x%08X\n", pkt->put.info.dataloop_size));
- MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->put.target_win_handle));
- MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->put.source_win_handle));
- /*MPIU_DBG_PRINTF((" win_ptr ...... 0x%08X\n", pkt->put.win_ptr)); */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_PUT\n");
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,TERSE," addr ......... %p\n", pkt->put.addr);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," count ........ %d\n", pkt->put.count);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," datatype ..... 0x%08X\n", pkt->put.datatype));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," dataloop_size. 0x%08X\n", pkt->put.info.dataloop_size));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," target ....... 0x%08X\n", pkt->put.target_win_handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," source ....... 0x%08X\n", pkt->put.source_win_handle));
+ /*MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," win_ptr ...... 0x%08X\n", pkt->put.win_ptr)); */
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_Get(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_GET\n"));
- MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->get.addr));
- MPIU_DBG_PRINTF((" count ........ %d\n", pkt->get.count));
- MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->get.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->get.info.dataloop_size));
- MPIU_DBG_PRINTF((" request ...... 0x%08X\n", pkt->get.request_handle));
- MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->get.target_win_handle));
- MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->get.source_win_handle));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_GET\n");
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,TERSE," addr ......... %p\n", pkt->get.addr);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," count ........ %d\n", pkt->get.count);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," datatype ..... 0x%08X\n", pkt->get.datatype));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," dataloop_size. %d\n", pkt->get.info.dataloop_size);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," request ...... 0x%08X\n", pkt->get.request_handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," target ....... 0x%08X\n", pkt->get.target_win_handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," source ....... 0x%08X\n", pkt->get.source_win_handle));
/*
- * MPIU_DBG_PRINTF((" request ...... 0x%08X\n", pkt->get.request));
- * MPIU_DBG_PRINTF((" win_ptr ...... 0x%08X\n", pkt->get.win_ptr));
+ * MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," request ...... 0x%08X\n", pkt->get.request));
+ * MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," win_ptr ...... 0x%08X\n", pkt->get.win_ptr));
*/
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_GetResp(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_GET_RESP\n"));
- MPIU_DBG_PRINTF((" request ...... 0x%08X\n", pkt->get_resp.request_handle));
- /*MPIU_DBG_PRINTF((" request ...... 0x%08X\n", pkt->get_resp.request)); */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_GET_RESP\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," request ...... 0x%08X\n", pkt->get_resp.request_handle));
+ /*MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," request ...... 0x%08X\n", pkt->get_resp.request)); */
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_Accumulate(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_ACCUMULATE\n"));
- MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->accum.addr));
- MPIU_DBG_PRINTF((" count ........ %d\n", pkt->accum.count));
- MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->accum.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->accum.info.dataloop_size));
- MPIU_DBG_PRINTF((" op ........... 0x%08X\n", pkt->accum.op));
- MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->accum.target_win_handle));
- MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->accum.source_win_handle));
- /*MPIU_DBG_PRINTF((" win_ptr ...... 0x%08X\n", pkt->accum.win_ptr)); */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_ACCUMULATE\n");
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,TERSE," addr ......... %p\n", pkt->accum.addr);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," count ........ %d\n", pkt->accum.count);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," datatype ..... 0x%08X\n", pkt->accum.datatype));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," dataloop_size. %d\n", pkt->accum.info.dataloop_size);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," op ........... 0x%08X\n", pkt->accum.op));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," target ....... 0x%08X\n", pkt->accum.target_win_handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," source ....... 0x%08X\n", pkt->accum.source_win_handle));
+ /*MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," win_ptr ...... 0x%08X\n", pkt->accum.win_ptr)); */
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_Lock(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_LOCK\n"));
- MPIU_DBG_PRINTF((" lock_type .... %d\n", pkt->lock.lock_type));
- MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->lock.target_win_handle));
- MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->lock.source_win_handle));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_LOCK\n");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," lock_type .... %d\n", pkt->lock.lock_type);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," target ....... 0x%08X\n", pkt->lock.target_win_handle));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," source ....... 0x%08X\n", pkt->lock.source_win_handle));
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_Ack(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_ACK\n"));
- MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->ack.source_win_handle));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_ACK\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," source ....... 0x%08X\n", pkt->ack.source_win_handle));
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_LockAck(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
{
- MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_LOCK_ACK\n"));
- MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->lock_ack.source_win_handle));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_LOCK_ACK\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," source ....... 0x%08X\n", pkt->lock_ack.source_win_handle));
return MPI_SUCCESS;
}
#endif
diff --git a/src/mpid/ch3/src/ch3u_rma_progress.c b/src/mpid/ch3/src/ch3u_rma_progress.c
index e781e64..1b561d0 100644
--- a/src/mpid/ch3/src/ch3u_rma_progress.c
+++ b/src/mpid/ch3/src/ch3u_rma_progress.c
@@ -45,11 +45,11 @@ cvars:
=== END_MPI_T_CVAR_INFO_BLOCK ===
*/
-static inline int check_and_switch_target_state(MPID_Win * win_ptr, MPIDI_RMA_Target_t * target,
+static inline int check_and_switch_target_state(MPIR_Win * win_ptr, MPIDI_RMA_Target_t * target,
int *is_able_to_issue, int *made_progress);
-static inline int issue_ops_target(MPID_Win * win_ptr, MPIDI_RMA_Target_t * target,
+static inline int issue_ops_target(MPIR_Win * win_ptr, MPIDI_RMA_Target_t * target,
int *made_progress);
-static inline int issue_ops_win(MPID_Win * win_ptr, int *made_progress);
+static inline int issue_ops_win(MPIR_Win * win_ptr, int *made_progress);
/* This macro checks if window state is ready for issuing RMA operations. */
@@ -65,7 +65,7 @@ static inline int issue_ops_win(MPID_Win * win_ptr, int *made_progress);
#define FUNCNAME check_and_switch_target_state
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int check_and_switch_target_state(MPID_Win * win_ptr, MPIDI_RMA_Target_t * target,
+static inline int check_and_switch_target_state(MPIR_Win * win_ptr, MPIDI_RMA_Target_t * target,
int *is_able_to_issue, int *made_progress)
{
int rank = win_ptr->comm_ptr->rank;
@@ -137,9 +137,9 @@ static inline int check_and_switch_target_state(MPID_Win * win_ptr, MPIDI_RMA_Ta
/* if we reach WIN_UNLOCK and there is still operation existing
* in pending list, this operation must be the only operation
* and it is prepared to piggyback LOCK and UNLOCK. */
- MPIU_Assert(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING);
- MPIU_Assert(target->pending_net_ops_list_head->next == NULL);
- MPIU_Assert(target->pending_net_ops_list_head->piggyback_lock_candidate);
+ MPIR_Assert(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING);
+ MPIR_Assert(target->pending_net_ops_list_head->next == NULL);
+ MPIR_Assert(target->pending_net_ops_list_head->piggyback_lock_candidate);
}
}
break;
@@ -239,7 +239,7 @@ static inline int check_and_switch_target_state(MPID_Win * win_ptr, MPIDI_RMA_Ta
#define FUNCNAME issue_ops_target
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int issue_ops_target(MPID_Win * win_ptr, MPIDI_RMA_Target_t * target,
+static inline int issue_ops_target(MPIR_Win * win_ptr, MPIDI_RMA_Target_t * target,
int *made_progress)
{
MPIDI_RMA_Op_t *curr_op = NULL;
@@ -277,11 +277,11 @@ static inline int issue_ops_target(MPID_Win * win_ptr, MPIDI_RMA_Target_t * targ
if (first_op) {
/* piggyback on first OP. */
if (target->access_state == MPIDI_RMA_LOCK_CALLED) {
- MPIU_Assert(curr_op->piggyback_lock_candidate);
+ MPIR_Assert(curr_op->piggyback_lock_candidate);
if (target->lock_type == MPI_LOCK_SHARED)
flags |= MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED;
else {
- MPIU_Assert(target->lock_type == MPI_LOCK_EXCLUSIVE);
+ MPIR_Assert(target->lock_type == MPI_LOCK_EXCLUSIVE);
flags |= MPIDI_CH3_PKT_FLAG_RMA_LOCK_EXCLUSIVE;
}
target->access_state = MPIDI_RMA_LOCK_ISSUED;
@@ -381,7 +381,7 @@ static inline int issue_ops_target(MPID_Win * win_ptr, MPIDI_RMA_Target_t * targ
#define FUNCNAME issue_ops_win
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int issue_ops_win(MPID_Win * win_ptr, int *made_progress)
+static inline int issue_ops_win(MPIR_Win * win_ptr, int *made_progress)
{
int mpi_errno = MPI_SUCCESS;
int start_slot, end_slot, i, idx;
@@ -433,7 +433,7 @@ static inline int issue_ops_win(MPID_Win * win_ptr, int *made_progress)
#define FUNCNAME MPIDI_CH3I_RMA_Cleanup_ops_aggressive
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_RMA_Cleanup_ops_aggressive(MPID_Win * win_ptr)
+int MPIDI_CH3I_RMA_Cleanup_ops_aggressive(MPIR_Win * win_ptr)
{
int i, local_completed = 0, remote_completed ATTRIBUTE((unused)) = 0;
int mpi_errno = MPI_SUCCESS;
@@ -486,7 +486,7 @@ int MPIDI_CH3I_RMA_Cleanup_ops_aggressive(MPID_Win * win_ptr)
#define FUNCNAME MPIDI_CH3I_RMA_Cleanup_target_aggressive
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_RMA_Cleanup_target_aggressive(MPID_Win * win_ptr, MPIDI_RMA_Target_t ** target)
+int MPIDI_CH3I_RMA_Cleanup_target_aggressive(MPIR_Win * win_ptr, MPIDI_RMA_Target_t ** target)
{
int i, local_completed ATTRIBUTE((unused)) = 0, remote_completed = 0;
int made_progress = 0;
@@ -568,7 +568,7 @@ int MPIDI_CH3I_RMA_Cleanup_target_aggressive(MPID_Win * win_ptr, MPIDI_RMA_Targe
#define FUNCNAME MPIDI_CH3I_RMA_Make_progress_target
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_RMA_Make_progress_target(MPID_Win * win_ptr, int target_rank, int *made_progress)
+int MPIDI_CH3I_RMA_Make_progress_target(MPIR_Win * win_ptr, int target_rank, int *made_progress)
{
int temp_progress = 0;
int is_able_to_issue = 0;
@@ -628,7 +628,7 @@ int MPIDI_CH3I_RMA_Make_progress_target(MPID_Win * win_ptr, int target_rank, int
#define FUNCNAME MPIDI_CH3I_RMA_Make_progress_win
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3I_RMA_Make_progress_win(MPID_Win * win_ptr, int *made_progress)
+int MPIDI_CH3I_RMA_Make_progress_win(MPIR_Win * win_ptr, int *made_progress)
{
int mpi_errno = MPI_SUCCESS;
int temp_progress = 0;
@@ -670,7 +670,7 @@ int MPIDI_CH3I_RMA_Make_progress_win(MPID_Win * win_ptr, int *made_progress)
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3I_RMA_Make_progress_global(int *made_progress)
{
- MPID_Win *win_ptr;
+ MPIR_Win *win_ptr;
int mpi_errno = MPI_SUCCESS;
(*made_progress) = 0;
diff --git a/src/mpid/ch3/src/ch3u_rma_reqops.c b/src/mpid/ch3/src/ch3u_rma_reqops.c
index 08b57ff..6d65a3f 100644
--- a/src/mpid/ch3/src/ch3u_rma_reqops.c
+++ b/src/mpid/ch3/src/ch3u_rma_reqops.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2012 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -14,18 +14,18 @@
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Rput(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr,
- MPID_Request ** request)
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr,
+ MPIR_Request ** request)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig ATTRIBUTE((unused));
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPIDI_msg_sz_t data_sz;
- MPID_Request *ureq;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RPUT);
+ intptr_t data_sz;
+ MPIR_Request *ureq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RPUT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RPUT);
/* request-based RMA operations are only valid within a passive epoch */
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
@@ -37,12 +37,12 @@ int MPID_Rput(const void *origin_addr, int origin_count,
MPIDI_Datatype_get_info(origin_count, origin_datatype, dt_contig, data_sz, dtp, dt_true_lb);
/* Create user request, initially cc=1, ref=1 */
- ureq = MPID_Request_create();
+ ureq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(ureq == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- ureq->kind = MPID_WIN_REQUEST;
+ ureq->kind = MPIR_REQUEST_KIND__RMA;
/* This request is referenced by user and ch3 by default. */
- MPIU_Object_set_ref(ureq, 2);
+ MPIR_Object_set_ref(ureq, 2);
/* Enqueue or perform the RMA operation */
if (target_rank != MPI_PROC_NULL && data_sz != 0) {
@@ -64,7 +64,7 @@ int MPID_Rput(const void *origin_addr, int origin_count,
*request = ureq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RPUT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RPUT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -77,18 +77,18 @@ int MPID_Rput(const void *origin_addr, int origin_count,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Rget(void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPID_Win * win_ptr,
- MPID_Request ** request)
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win_ptr,
+ MPIR_Request ** request)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig ATTRIBUTE((unused));
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPIDI_msg_sz_t data_sz;
- MPID_Request *ureq;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RGET);
+ intptr_t data_sz;
+ MPIR_Request *ureq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RGET);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RGET);
/* request-based RMA operations are only valid within a passive epoch */
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
@@ -100,12 +100,12 @@ int MPID_Rget(void *origin_addr, int origin_count,
MPIDI_Datatype_get_info(origin_count, origin_datatype, dt_contig, data_sz, dtp, dt_true_lb);
/* Create user request, initially cc=1, ref=1 */
- ureq = MPID_Request_create();
+ ureq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(ureq == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- ureq->kind = MPID_WIN_REQUEST;
+ ureq->kind = MPIR_REQUEST_KIND__RMA;
/* This request is referenced by user and ch3 by default. */
- MPIU_Object_set_ref(ureq, 2);
+ MPIR_Object_set_ref(ureq, 2);
/* Enqueue or perform the RMA operation */
if (target_rank != MPI_PROC_NULL && data_sz != 0) {
@@ -127,7 +127,7 @@ int MPID_Rget(void *origin_addr, int origin_count,
*request = ureq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RGET);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RGET);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -140,18 +140,18 @@ int MPID_Rget(void *origin_addr, int origin_count,
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Raccumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
- int target_count, MPI_Datatype target_datatype, MPI_Op op, MPID_Win * win_ptr,
- MPID_Request ** request)
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win_ptr,
+ MPIR_Request ** request)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig ATTRIBUTE((unused));
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPIDI_msg_sz_t data_sz;
- MPID_Request *ureq;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RACCUMULATE);
+ intptr_t data_sz;
+ MPIR_Request *ureq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RACCUMULATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RACCUMULATE);
/* request-based RMA operations are only valid within a passive epoch */
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
@@ -161,12 +161,12 @@ int MPID_Raccumulate(const void *origin_addr, int origin_count,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
/* Create user request, initially cc=1, ref=1 */
- ureq = MPID_Request_create();
+ ureq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(ureq == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- ureq->kind = MPID_WIN_REQUEST;
+ ureq->kind = MPIR_REQUEST_KIND__RMA;
/* This request is referenced by user and ch3 by default. */
- MPIU_Object_set_ref(ureq, 2);
+ MPIR_Object_set_ref(ureq, 2);
MPIDI_Datatype_get_info(origin_count, origin_datatype, dt_contig, data_sz, dtp, dt_true_lb);
@@ -190,7 +190,7 @@ int MPID_Raccumulate(const void *origin_addr, int origin_count,
*request = ureq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RACCUMULATE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -205,17 +205,17 @@ int MPID_Rget_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op,
- MPID_Win * win_ptr, MPID_Request ** request)
+ MPIR_Win * win_ptr, MPIR_Request ** request)
{
int mpi_errno = MPI_SUCCESS;
int dt_contig ATTRIBUTE((unused));
- MPID_Datatype *dtp;
+ MPIDU_Datatype*dtp;
MPI_Aint dt_true_lb ATTRIBUTE((unused));
- MPIDI_msg_sz_t data_sz, trg_data_sz;
- MPID_Request *ureq;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RGET_ACCUMULATE);
+ intptr_t data_sz, trg_data_sz;
+ MPIR_Request *ureq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RGET_ACCUMULATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RGET_ACCUMULATE);
/* request-based RMA operations are only valid within a passive epoch */
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
@@ -225,12 +225,12 @@ int MPID_Rget_accumulate(const void *origin_addr, int origin_count,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
/* Create user request, initially cc=1, ref=1 */
- ureq = MPID_Request_create();
+ ureq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
MPIR_ERR_CHKANDJUMP(ureq == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- ureq->kind = MPID_WIN_REQUEST;
+ ureq->kind = MPIR_REQUEST_KIND__RMA;
/* This request is referenced by user and ch3 by default. */
- MPIU_Object_set_ref(ureq, 2);
+ MPIR_Object_set_ref(ureq, 2);
/* Note that GACC is only a no-op if no data goes in both directions */
MPIDI_Datatype_get_info(origin_count, origin_datatype, dt_contig, data_sz, dtp, dt_true_lb);
@@ -257,7 +257,7 @@ int MPID_Rget_accumulate(const void *origin_addr, int origin_count,
*request = ureq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RGET_ACCUMULATE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 6d0c5b5..80f52b7 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -256,12 +256,12 @@ cvars:
=== END_MPI_T_CVAR_INFO_BLOCK ===
*/
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_lockqueue_alloc);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_winlock_getlocallock);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_wincreate_allgather);
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_lockqueue_alloc ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_winlock_getlocallock ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_wincreate_allgather ATTRIBUTE((unused));
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmaqueue_alloc);
-MPIR_T_PVAR_DOUBLE_TIMER_DECL(RMA, rma_rmaqueue_set);
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmaqueue_alloc ATTRIBUTE((unused));
+MPIR_T_pvar_timer_t PVAR_TIMER_rma_rmaqueue_set ATTRIBUTE((unused));
void MPIDI_CH3_RMA_Init_sync_pvars(void)
{
@@ -329,15 +329,15 @@ void MPIDI_CH3_RMA_Init_sync_pvars(void)
#define FUNCNAME flush_local_all
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int flush_local_all(MPID_Win * win_ptr)
+static inline int flush_local_all(MPIR_Win * win_ptr)
{
int i, made_progress = 0;
int local_completed = 0;
MPIDI_RMA_Target_t *curr_target = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_FLUSH_LOCAL_ALL);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_FLUSH_LOCAL_ALL);
/* Set sync_flag in sync struct. */
for (i = 0; i < win_ptr->num_slots; i++) {
@@ -368,7 +368,7 @@ static inline int flush_local_all(MPID_Win * win_ptr)
} while (!local_completed);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_FLUSH_LOCAL_ALL);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -380,15 +380,15 @@ static inline int flush_local_all(MPID_Win * win_ptr)
#define FUNCNAME flush_all
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int flush_all(MPID_Win * win_ptr)
+static inline int flush_all(MPIR_Win * win_ptr)
{
int i, made_progress = 0;
int remote_completed = 0;
MPIDI_RMA_Target_t *curr_target = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_FLUSH_ALL);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_FLUSH_ALL);
/* Set sync_flag in sync struct. */
for (i = 0; i < win_ptr->num_slots; i++) {
@@ -418,7 +418,7 @@ static inline int flush_all(MPID_Win * win_ptr)
} while (!remote_completed);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_FLUSH_ALL);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -431,20 +431,20 @@ static inline int flush_all(MPID_Win * win_ptr)
#define FUNCNAME fence_barrier_complete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int fence_barrier_complete(MPID_Request * sreq)
+static int fence_barrier_complete(MPIR_Request * sreq)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_FENCE_BARRIER_COMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_FENCE_BARRIER_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_FENCE_BARRIER_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_FENCE_BARRIER_COMPLETE);
- MPID_Win_get_ptr(sreq->dev.source_win_handle, win_ptr);
- MPIU_Assert(win_ptr != NULL);
+ MPIR_Win_get_ptr(sreq->dev.source_win_handle, win_ptr);
+ MPIR_Assert(win_ptr != NULL);
/* decrement incomplete ibarrier request counter */
win_ptr->sync_request_cnt--;
- MPIU_Assert(win_ptr->sync_request_cnt >= 0);
+ MPIR_Assert(win_ptr->sync_request_cnt >= 0);
if (win_ptr->sync_request_cnt == 0) {
if (win_ptr->states.access_state == MPIDI_RMA_FENCE_ISSUED) {
@@ -460,7 +460,7 @@ static int fence_barrier_complete(MPID_Request * sreq)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_FENCE_BARRIER_COMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_FENCE_BARRIER_COMPLETE);
return mpi_errno;
fn_fail:
@@ -477,7 +477,7 @@ static int fence_barrier_complete(MPID_Request * sreq)
#define FUNCNAME MPID_Win_fence
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_fence(int assert, MPID_Win * win_ptr)
+int MPID_Win_fence(int assert, MPIR_Win * win_ptr)
{
int i;
MPIDI_RMA_Target_t *curr_target = NULL;
@@ -486,10 +486,10 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
int scalable_fence_enabled = 0;
int *rma_target_marks = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_FENCE);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_FENCE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_FENCE);
MPIR_ERR_CHKANDJUMP((win_ptr->states.access_state != MPIDI_RMA_NONE &&
win_ptr->states.access_state != MPIDI_RMA_FENCE_ISSUED &&
@@ -515,7 +515,7 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
MPI_Request fence_sync_req;
if (win_ptr->shm_allocated == TRUE) {
- MPID_Comm *node_comm_ptr = win_ptr->comm_ptr->node_comm;
+ MPIR_Comm *node_comm_ptr = win_ptr->comm_ptr->node_comm;
mpi_errno = MPIR_Barrier_impl(node_comm_ptr, &errflag);
if (mpi_errno != MPI_SUCCESS)
@@ -532,15 +532,15 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
win_ptr->states.access_state = MPIDI_RMA_FENCE_GRANTED;
}
else {
- MPID_Request *req_ptr;
+ MPIR_Request *req_ptr;
/* Set window access state properly. */
win_ptr->states.access_state = MPIDI_RMA_FENCE_ISSUED;
- MPID_Request_get_ptr(fence_sync_req, req_ptr);
- if (!MPID_Request_is_complete(req_ptr)) {
+ MPIR_Request_get_ptr(fence_sync_req, req_ptr);
+ if (!MPIR_Request_is_complete(req_ptr)) {
req_ptr->dev.source_win_handle = win_ptr->handle;
- req_ptr->request_completed_cb = fence_barrier_complete;
+ req_ptr->dev.request_completed_cb = fence_barrier_complete;
win_ptr->sync_request_cnt++;
}
else {
@@ -548,7 +548,7 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
win_ptr->states.access_state = MPIDI_RMA_FENCE_GRANTED;
}
- MPID_Request_release(req_ptr);
+ MPIR_Request_free(req_ptr);
}
goto finish_fence;
@@ -557,7 +557,7 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
/* Perform basic algorithm by calling reduce-scatter */
if (!scalable_fence_enabled) {
- MPIU_CHKLMEM_MALLOC(rma_target_marks, int *, comm_size * sizeof(int),
+ MPIR_CHKLMEM_MALLOC(rma_target_marks, int *, comm_size * sizeof(int),
mpi_errno, "rma_target_marks");
for (i = 0; i < comm_size; i++)
rma_target_marks[i] = 0;
@@ -581,7 +581,7 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
win_ptr->at_completion_counter -= comm_size;
win_ptr->at_completion_counter += rma_target_marks[0];
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
win_ptr->states.access_state = MPIDI_RMA_FENCE_GRANTED;
}
@@ -657,14 +657,14 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
win_ptr->states.access_state = MPIDI_RMA_FENCE_GRANTED;
}
else {
- MPID_Request *req_ptr;
+ MPIR_Request *req_ptr;
win_ptr->states.access_state = MPIDI_RMA_FENCE_ISSUED;
- MPID_Request_get_ptr(fence_sync_req, req_ptr);
- if (!MPID_Request_is_complete(req_ptr)) {
+ MPIR_Request_get_ptr(fence_sync_req, req_ptr);
+ if (!MPIR_Request_is_complete(req_ptr)) {
req_ptr->dev.source_win_handle = win_ptr->handle;
- req_ptr->request_completed_cb = fence_barrier_complete;
+ req_ptr->dev.request_completed_cb = fence_barrier_complete;
win_ptr->sync_request_cnt++;
}
else {
@@ -672,11 +672,11 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
win_ptr->states.access_state = MPIDI_RMA_FENCE_GRANTED;
}
- MPID_Request_release(req_ptr);
+ MPIR_Request_free(req_ptr);
}
if (win_ptr->shm_allocated == TRUE) {
- MPID_Comm *node_comm_ptr = win_ptr->comm_ptr->node_comm;
+ MPIR_Comm *node_comm_ptr = win_ptr->comm_ptr->node_comm;
mpi_errno = MPIR_Barrier_impl(node_comm_ptr, &errflag);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -692,8 +692,8 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_FENCE);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_FENCE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -706,14 +706,14 @@ int MPID_Win_fence(int assert, MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_post
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_post(MPID_Group * post_grp_ptr, int assert, MPID_Win * win_ptr)
+int MPID_Win_post(MPIR_Group * post_grp_ptr, int assert, MPIR_Win * win_ptr)
{
int *post_ranks_in_win_grp;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(3);
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_POST);
+ MPIR_CHKLMEM_DECL(3);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_POST);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_POST);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_POST);
/* Note that here we cannot distinguish if this exposure epoch is overlapped
* with an exposure epoch of FENCE (which is not allowed), since FENCE may be
@@ -736,7 +736,7 @@ int MPID_Win_post(MPID_Group * post_grp_ptr, int assert, MPID_Win * win_ptr)
MPI_Request *req;
MPI_Status *status;
int i, post_grp_size, dst, rank;
- MPID_Comm *win_comm_ptr;
+ MPIR_Comm *win_comm_ptr;
/* NOCHECK not specified. We need to notify the source
* processes that Post has been called. */
@@ -745,15 +745,15 @@ int MPID_Win_post(MPID_Group * post_grp_ptr, int assert, MPID_Win * win_ptr)
win_comm_ptr = win_ptr->comm_ptr;
rank = win_ptr->comm_ptr->rank;
- MPIU_CHKLMEM_MALLOC(post_ranks_in_win_grp, int *,
+ MPIR_CHKLMEM_MALLOC(post_ranks_in_win_grp, int *,
post_grp_size * sizeof(int), mpi_errno, "post_ranks_in_win_grp");
mpi_errno = fill_ranks_in_win_grp(win_ptr, post_grp_ptr, post_ranks_in_win_grp);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_CHKLMEM_MALLOC(req, MPI_Request *, post_grp_size * sizeof(MPI_Request),
+ MPIR_CHKLMEM_MALLOC(req, MPI_Request *, post_grp_size * sizeof(MPI_Request),
mpi_errno, "req");
- MPIU_CHKLMEM_MALLOC(status, MPI_Status *, post_grp_size * sizeof(MPI_Status),
+ MPIR_CHKLMEM_MALLOC(status, MPI_Status *, post_grp_size * sizeof(MPI_Status),
mpi_errno, "status");
/* Send a 0-byte message to the source processes */
@@ -761,9 +761,9 @@ int MPID_Win_post(MPID_Group * post_grp_ptr, int assert, MPID_Win * win_ptr)
dst = post_ranks_in_win_grp[i];
if (dst != rank) {
- MPID_Request *req_ptr;
+ MPIR_Request *req_ptr;
mpi_errno = MPID_Isend(&i, 0, MPI_INT, dst, SYNC_POST_TAG, win_comm_ptr,
- MPID_CONTEXT_INTRA_PT2PT, &req_ptr);
+ MPIR_CONTEXT_INTRA_PT2PT, &req_ptr);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
req[i] = req_ptr->handle;
@@ -790,8 +790,8 @@ int MPID_Win_post(MPID_Group * post_grp_ptr, int assert, MPID_Win * win_ptr)
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_POST);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_POST);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -803,19 +803,19 @@ int MPID_Win_post(MPID_Group * post_grp_ptr, int assert, MPID_Win * win_ptr)
#define FUNCNAME start_req_complete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int start_req_complete(MPID_Request * req)
+static int start_req_complete(MPIR_Request * req)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Win *win_ptr = NULL;
+ MPIR_Win *win_ptr = NULL;
- MPIDI_STATE_DECL(MPID_STATE_START_REQ_COMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_START_REQ_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_START_REQ_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_START_REQ_COMPLETE);
- MPID_Win_get_ptr(req->dev.source_win_handle, win_ptr);
- MPIU_Assert(win_ptr != NULL);
+ MPIR_Win_get_ptr(req->dev.source_win_handle, win_ptr);
+ MPIR_Assert(win_ptr != NULL);
win_ptr->sync_request_cnt--;
- MPIU_Assert(win_ptr->sync_request_cnt >= 0);
+ MPIR_Assert(win_ptr->sync_request_cnt >= 0);
if (win_ptr->sync_request_cnt == 0) {
win_ptr->states.access_state = MPIDI_RMA_PSCW_GRANTED;
@@ -825,7 +825,7 @@ static int start_req_complete(MPID_Request * req)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_START_REQ_COMPLETE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_START_REQ_COMPLETE);
return mpi_errno;
fn_fail:
@@ -836,14 +836,14 @@ static int start_req_complete(MPID_Request * req)
#define FUNCNAME MPID_Win_start
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
+int MPID_Win_start(MPIR_Group * group_ptr, int assert, MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKLMEM_DECL(2);
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_START);
+ MPIR_CHKLMEM_DECL(2);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_START);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_START);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_START);
/* Note that here we cannot distinguish if this access epoch is overlapped
* with an access epoch of FENCE (which is not allowed), since FENCE may be
@@ -857,7 +857,7 @@ int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
win_ptr->start_grp_size = group_ptr->size;
- MPIU_CHKPMEM_MALLOC(win_ptr->start_ranks_in_win_grp, int *,
+ MPIR_CHKPMEM_MALLOC(win_ptr->start_ranks_in_win_grp, int *,
win_ptr->start_grp_size * sizeof(int),
mpi_errno, "win_ptr->start_ranks_in_win_grp");
@@ -869,7 +869,7 @@ int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
int i, intra_cnt;
MPI_Request *intra_start_req = NULL;
MPI_Status *intra_start_status = NULL;
- MPID_Comm *comm_ptr = win_ptr->comm_ptr;
+ MPIR_Comm *comm_ptr = win_ptr->comm_ptr;
int rank = comm_ptr->rank;
/* wait for messages from local processes */
@@ -877,16 +877,16 @@ int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
/* post IRECVs */
if (win_ptr->shm_allocated == TRUE) {
int node_comm_size = comm_ptr->node_comm->local_size;
- MPIU_CHKLMEM_MALLOC(intra_start_req, MPI_Request *,
+ MPIR_CHKLMEM_MALLOC(intra_start_req, MPI_Request *,
node_comm_size * sizeof(MPI_Request), mpi_errno, "intra_start_req");
- MPIU_CHKLMEM_MALLOC(intra_start_status, MPI_Status *,
+ MPIR_CHKLMEM_MALLOC(intra_start_status, MPI_Status *,
node_comm_size * sizeof(MPI_Status),
mpi_errno, "intra_start_status");
}
intra_cnt = 0;
for (i = 0; i < win_ptr->start_grp_size; i++) {
- MPID_Request *req_ptr;
+ MPIR_Request *req_ptr;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int src = win_ptr->start_ranks_in_win_grp[i];
@@ -895,7 +895,7 @@ int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
MPIDI_Comm_get_vc(comm_ptr, src, &target_vc);
mpi_errno = MPID_Irecv(NULL, 0, MPI_INT, src, SYNC_POST_TAG,
- comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &req_ptr);
+ comm_ptr, MPIR_CONTEXT_INTRA_PT2PT, &req_ptr);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
@@ -903,13 +903,13 @@ int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
intra_start_req[intra_cnt++] = req_ptr->handle;
}
else {
- if (!MPID_Request_is_complete(req_ptr)) {
+ if (!MPIR_Request_is_complete(req_ptr)) {
req_ptr->dev.source_win_handle = win_ptr->handle;
- req_ptr->request_completed_cb = start_req_complete;
+ req_ptr->dev.request_completed_cb = start_req_complete;
win_ptr->sync_request_cnt++;
}
- MPID_Request_release(req_ptr);
+ MPIR_Request_free(req_ptr);
}
}
}
@@ -945,11 +945,11 @@ int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_START);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_START);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -959,14 +959,14 @@ int MPID_Win_start(MPID_Group * group_ptr, int assert, MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_complete
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_complete(MPID_Win * win_ptr)
+int MPID_Win_complete(MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
int i, dst, rank = win_ptr->comm_ptr->rank;
MPIDI_RMA_Target_t *curr_target;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_COMPLETE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_COMPLETE);
/* Access epochs on the same window must be disjoint. */
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PSCW_ISSUED &&
@@ -990,7 +990,7 @@ int MPID_Win_complete(MPID_Win * win_ptr)
dst = win_ptr->start_ranks_in_win_grp[i];
if (dst == rank) {
win_ptr->at_completion_counter--;
- MPIU_Assert(win_ptr->at_completion_counter >= 0);
+ MPIR_Assert(win_ptr->at_completion_counter >= 0);
continue;
}
@@ -1029,11 +1029,11 @@ int MPID_Win_complete(MPID_Win * win_ptr)
win_ptr->states.access_state = MPIDI_RMA_NONE;
/* free start group stored in window */
- MPIU_Free(win_ptr->start_ranks_in_win_grp);
+ MPL_free(win_ptr->start_ranks_in_win_grp);
win_ptr->start_ranks_in_win_grp = NULL;
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_COMPLETE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1047,12 +1047,12 @@ int MPID_Win_complete(MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_wait
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_wait(MPID_Win * win_ptr)
+int MPID_Win_wait(MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_WAIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_WAIT);
MPIR_ERR_CHKANDJUMP(win_ptr->states.exposure_state != MPIDI_RMA_PSCW_EXPO,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -1073,7 +1073,7 @@ int MPID_Win_wait(MPID_Win * win_ptr)
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_WAIT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1086,12 +1086,12 @@ int MPID_Win_wait(MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_test
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_test(MPID_Win * win_ptr, int *flag)
+int MPID_Win_test(MPIR_Win * win_ptr, int *flag)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_TEST);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_TEST);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_TEST);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_TEST);
MPIR_ERR_CHKANDJUMP(win_ptr->states.exposure_state != MPIDI_RMA_PSCW_EXPO,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -1113,7 +1113,7 @@ int MPID_Win_test(MPID_Win * win_ptr, int *flag)
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_TEST);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_TEST);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1132,7 +1132,7 @@ int MPID_Win_test(MPID_Win * win_ptr, int *flag)
#define FUNCNAME MPID_Win_lock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_lock(int lock_type, int dest, int assert, MPID_Win * win_ptr)
+int MPID_Win_lock(int lock_type, int dest, int assert, MPIR_Win * win_ptr)
{
int made_progress = 0;
int shm_target = FALSE;
@@ -1140,9 +1140,9 @@ int MPID_Win_lock(int lock_type, int dest, int assert, MPID_Win * win_ptr)
MPIDI_RMA_Target_t *target = NULL;
MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_LOCK);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_LOCK);
/* Note that here we cannot distinguish if this access epoch is overlapped
* with an access epoch of FENCE (which is not allowed), since FENCE may be
@@ -1230,7 +1230,7 @@ int MPID_Win_lock(int lock_type, int dest, int assert, MPID_Win * win_ptr)
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_LOCK);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1242,16 +1242,16 @@ int MPID_Win_lock(int lock_type, int dest, int assert, MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_unlock
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_unlock(int dest, MPID_Win * win_ptr)
+int MPID_Win_unlock(int dest, MPIR_Win * win_ptr)
{
int made_progress = 0;
int local_completed ATTRIBUTE((unused)) = 0, remote_completed = 0;
MPIDI_RMA_Target_t *target = NULL;
enum MPIDI_RMA_sync_types sync_flag;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_UNLOCK);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_UNLOCK);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET,
mpi_errno, MPI_ERR_RMA_SYNC, "**rmasync");
@@ -1328,7 +1328,7 @@ int MPID_Win_unlock(int dest, MPID_Win * win_ptr)
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_UNLOCK);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1341,16 +1341,16 @@ int MPID_Win_unlock(int dest, MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_flush
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_flush(int dest, MPID_Win * win_ptr)
+int MPID_Win_flush(int dest, MPIR_Win * win_ptr)
{
int made_progress = 0;
int local_completed ATTRIBUTE((unused)) = 0, remote_completed = 0;
int rank = win_ptr->comm_ptr->rank;
MPIDI_RMA_Target_t *target = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_FLUSH);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_FLUSH);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
win_ptr->states.access_state != MPIDI_RMA_LOCK_ALL_CALLED &&
@@ -1419,7 +1419,7 @@ int MPID_Win_flush(int dest, MPID_Win * win_ptr)
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_FLUSH);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1432,16 +1432,16 @@ int MPID_Win_flush(int dest, MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_flush_local
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_flush_local(int dest, MPID_Win * win_ptr)
+int MPID_Win_flush_local(int dest, MPIR_Win * win_ptr)
{
int made_progress = 0;
int local_completed = 0, remote_completed ATTRIBUTE((unused)) = 0;
int rank = win_ptr->comm_ptr->rank;
MPIDI_RMA_Target_t *target = NULL;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_FLUSH_LOCAL);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_FLUSH_LOCAL);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
win_ptr->states.access_state != MPIDI_RMA_LOCK_ALL_CALLED &&
@@ -1495,7 +1495,7 @@ int MPID_Win_flush_local(int dest, MPID_Win * win_ptr)
} while (!local_completed);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_FLUSH_LOCAL);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1508,13 +1508,13 @@ int MPID_Win_flush_local(int dest, MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_lock_all
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_lock_all(int assert, MPID_Win * win_ptr)
+int MPID_Win_lock_all(int assert, MPIR_Win * win_ptr)
{
int i, rank = win_ptr->comm_ptr->rank;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_LOCK_ALL);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_LOCK_ALL);
/* Note that here we cannot distinguish if this access epoch is overlapped
* with an access epoch of FENCE (which is not allowed), since FENCE may be
@@ -1534,7 +1534,7 @@ int MPID_Win_lock_all(int assert, MPID_Win * win_ptr)
win_ptr->lock_all_assert = assert;
- MPIU_Assert(win_ptr->outstanding_locks == 0);
+ MPIR_Assert(win_ptr->outstanding_locks == 0);
/* Acquire the lock on myself and the lock on processes on SHM.
* No need to create a target for them. */
@@ -1574,7 +1574,7 @@ int MPID_Win_lock_all(int assert, MPID_Win * win_ptr)
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_LOCK_ALL);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1587,7 +1587,7 @@ int MPID_Win_lock_all(int assert, MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_unlock_all
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_unlock_all(MPID_Win * win_ptr)
+int MPID_Win_unlock_all(MPIR_Win * win_ptr)
{
int i, made_progress = 0;
int remote_completed = 0;
@@ -1595,9 +1595,9 @@ int MPID_Win_unlock_all(MPID_Win * win_ptr)
MPIDI_RMA_Target_t *curr_target = NULL;
enum MPIDI_RMA_sync_types sync_flag;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_UNLOCK_ALL);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_UNLOCK_ALL);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_LOCK_ALL_CALLED &&
win_ptr->states.access_state != MPIDI_RMA_LOCK_ALL_ISSUED &&
@@ -1706,7 +1706,7 @@ int MPID_Win_unlock_all(MPID_Win * win_ptr)
win_ptr->lock_all_assert = 0;
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_UNLOCK_ALL);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1719,12 +1719,12 @@ int MPID_Win_unlock_all(MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_flush_all
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_flush_all(MPID_Win * win_ptr)
+int MPID_Win_flush_all(MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPIDI_STATE_MPID_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPIDI_STATE_MPID_WIN_FLUSH_ALL);
- MPIDI_RMA_FUNC_ENTER(MPIDI_STATE_MPID_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPIDI_STATE_MPID_WIN_FLUSH_ALL);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
win_ptr->states.access_state != MPIDI_RMA_LOCK_ALL_CALLED &&
@@ -1742,7 +1742,7 @@ int MPID_Win_flush_all(MPID_Win * win_ptr)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPIDI_STATE_MPID_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPIDI_STATE_MPID_WIN_FLUSH_ALL);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1755,12 +1755,12 @@ int MPID_Win_flush_all(MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_flush_local_all
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_flush_local_all(MPID_Win * win_ptr)
+int MPID_Win_flush_local_all(MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
win_ptr->states.access_state != MPIDI_RMA_LOCK_ALL_CALLED &&
@@ -1778,7 +1778,7 @@ int MPID_Win_flush_local_all(MPID_Win * win_ptr)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_FLUSH_LOCAL_ALL);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -1791,12 +1791,12 @@ int MPID_Win_flush_local_all(MPID_Win * win_ptr)
#define FUNCNAME MPID_Win_sync
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_sync(MPID_Win * win_ptr)
+int MPID_Win_sync(MPIR_Win * win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_SYNC);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_SYNC);
MPIR_ERR_CHKANDJUMP(win_ptr->states.access_state != MPIDI_RMA_PER_TARGET &&
win_ptr->states.access_state != MPIDI_RMA_LOCK_ALL_CALLED &&
@@ -1807,7 +1807,7 @@ int MPID_Win_sync(MPID_Win * win_ptr)
OPA_read_write_barrier();
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_SYNC);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
diff --git a/src/mpid/ch3/src/ch3u_rndv.c b/src/mpid/ch3/src/ch3u_rndv.c
index f6bb567..c1ef77f 100644
--- a/src/mpid/ch3/src/ch3u_rndv.c
+++ b/src/mpid/ch3/src/ch3u_rndv.c
@@ -16,25 +16,25 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
/* MPIDI_CH3_RndvSend - Send a request to perform a rendezvous send */
-int MPIDI_CH3_RndvSend( MPID_Request **sreq_p, const void * buf, MPI_Aint count,
- MPI_Datatype datatype, int dt_contig, MPIDI_msg_sz_t data_sz,
+int MPIDI_CH3_RndvSend( MPIR_Request **sreq_p, const void * buf, MPI_Aint count,
+ MPI_Datatype datatype, int dt_contig, intptr_t data_sz,
MPI_Aint dt_true_lb,
int rank,
- int tag, MPID_Comm * comm, int context_offset )
+ int tag, MPIR_Comm * comm, int context_offset )
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_rndv_req_to_send_t * const rts_pkt = &upkt.rndv_req_to_send;
MPIDI_VC_t * vc;
- MPID_Request * rts_sreq;
- MPID_Request *sreq =*sreq_p;
+ MPIR_Request * rts_sreq;
+ MPIR_Request *sreq =*sreq_p;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_D(CH3_OTHER,VERBOSE,
- "sending rndv RTS, data_sz=" MPIDI_MSG_SZ_FMT, data_sz);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,
+ "sending rndv RTS, data_sz=%" PRIdPTR, data_sz);
sreq->dev.OnDataAvail = 0;
- sreq->partner_request = NULL;
+ sreq->dev.partner_request = NULL;
MPIDI_Pkt_init(rts_pkt, MPIDI_CH3_PKT_RNDV_REQ_TO_SEND);
rts_pkt->match.parts.rank = comm->rank;
@@ -48,7 +48,7 @@ int MPIDI_CH3_RndvSend( MPID_Request **sreq_p, const void * buf, MPI_Aint count,
MPIDI_Pkt_set_seqnum(rts_pkt, seqnum);
MPIDI_Request_set_seqnum(sreq, seqnum);
- MPIU_DBG_MSGPKT(vc,tag,rts_pkt->match.parts.context_id,rank,data_sz,"Rndv");
+ MPL_DBG_MSGPKT(vc,tag,rts_pkt->match.parts.context_id,rank,data_sz,"Rndv");
MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
mpi_errno = MPIDI_CH3_iStartMsg(vc, rts_pkt, sizeof(*rts_pkt), &rts_sreq);
@@ -56,7 +56,7 @@ int MPIDI_CH3_RndvSend( MPID_Request **sreq_p, const void * buf, MPI_Aint count,
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
*sreq_p = NULL;
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rtspkt");
}
@@ -65,13 +65,13 @@ int MPIDI_CH3_RndvSend( MPID_Request **sreq_p, const void * buf, MPI_Aint count,
{
if (rts_sreq->status.MPI_ERROR != MPI_SUCCESS)
{
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
*sreq_p = NULL;
mpi_errno = rts_sreq->status.MPI_ERROR;
- MPID_Request_release(rts_sreq);
+ MPIR_Request_free(rts_sreq);
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**ch3|rtspkt");
}
- MPID_Request_release(rts_sreq);
+ MPIR_Request_free(rts_sreq);
}
/* FIXME: fill temporary IOV or pack temporary buffer after send to hide
@@ -107,20 +107,20 @@ int MPIDI_CH3_RndvSend( MPID_Request **sreq_p, const void * buf, MPI_Aint count,
#define FUNCNAME MPIDI_CH3_PktHandler_RndvReqToSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp )
{
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
MPIDI_CH3_Pkt_rndv_req_to_send_t * rts_pkt = &pkt->rndv_req_to_send;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "received rndv RTS pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "received rndv RTS pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d, data_sz=%" PRIdPTR,
rts_pkt->sender_req_id, rts_pkt->match.parts.rank,
rts_pkt->match.parts.tag,
rts_pkt->match.parts.context_id, rts_pkt->data_sz));
- MPIU_DBG_MSGPKT(vc,rts_pkt->match.parts.tag,rts_pkt->match.parts.context_id,
+ MPL_DBG_MSGPKT(vc,rts_pkt->match.parts.tag,rts_pkt->match.parts.context_id,
rts_pkt->match.parts.rank,rts_pkt->data_sz,
"ReceivedRndv");
@@ -131,7 +131,7 @@ int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
/* If the completion counter is 0, that means that the communicator to
* which this message is being sent has been revoked and we shouldn't
* bother finishing this. */
- if (!found && MPID_cc_get(rreq->cc) == 0) {
+ if (!found && MPIR_cc_get(rreq->cc) == 0) {
*rreqp = NULL;
goto fn_fail;
}
@@ -140,20 +140,20 @@ int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
if (found)
{
- MPID_Request * cts_req;
+ MPIR_Request * cts_req;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_rndv_clr_to_send_t * cts_pkt = &upkt.rndv_clr_to_send;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"posted request found");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"posted request found");
/* FIXME: What if the receive user buffer is not big enough to
hold the data about to be cleared for sending? */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending rndv CTS packet");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending rndv CTS packet");
MPIDI_Pkt_init(cts_pkt, MPIDI_CH3_PKT_RNDV_CLR_TO_SEND);
cts_pkt->sender_req_id = rts_pkt->sender_req_id;
cts_pkt->receiver_req_id = rreq->handle;
@@ -165,12 +165,12 @@ int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
"**ch3|ctspkt");
}
if (cts_req != NULL) {
- MPID_Request_release(cts_req);
+ MPIR_Request_free(cts_req);
}
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"unexpected request allocated");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"unexpected request allocated");
/*
* A MPID_Probe() may be waiting for the request we just
@@ -195,24 +195,24 @@ int MPIDI_CH3_PktHandler_RndvReqToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_RndvClrToSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_rndv_clr_to_send_t * cts_pkt = &pkt->rndv_clr_to_send;
- MPID_Request * sreq;
- MPID_Request * rts_sreq;
+ MPIR_Request * sreq;
+ MPIR_Request * rts_sreq;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_rndv_send_t * rs_pkt = &upkt.rndv_send;
int dt_contig;
MPI_Aint dt_true_lb;
- MPIDI_msg_sz_t data_sz;
- MPID_Datatype * dt_ptr;
+ intptr_t data_sz;
+ MPIDU_Datatype* dt_ptr;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"received rndv CTS pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"received rndv CTS pkt");
- MPID_Request_get_ptr(cts_pkt->sender_req_id, sreq);
- MPIU_DBG_PRINTF(("received cts, count=%d\n", sreq->dev.user_count));
+ MPIR_Request_get_ptr(cts_pkt->sender_req_id, sreq);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST,"received cts, count=" MPI_AINT_FMT_DEC_SPEC "\n", sreq->dev.user_count));
sreq->dev.OnDataAvail = 0;
sreq->dev.OnFinal = 0;
@@ -227,10 +227,10 @@ int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
MPIDI_Request_fetch_and_clear_rts_sreq(sreq, &rts_sreq);
if (rts_sreq != NULL)
{
- MPID_Request_release(rts_sreq);
+ MPIR_Request_free(rts_sreq);
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
MPIDI_Pkt_init(rs_pkt, MPIDI_CH3_PKT_RNDV_SEND);
rs_pkt->receiver_req_id = cts_pkt->receiver_req_id;
@@ -241,8 +241,8 @@ int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
{
MPL_IOV iov[MPL_IOV_LIMIT];
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
- "sending contiguous rndv data, data_sz=" MPIDI_MSG_SZ_FMT,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
+ "sending contiguous rndv data, data_sz=%" PRIdPTR,
data_sz));
iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)rs_pkt;
@@ -258,9 +258,9 @@ int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
}
else
{
- sreq->dev.segment_ptr = MPID_Segment_alloc( );
- MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(sreq->dev.user_buf, sreq->dev.user_count,
+ sreq->dev.segment_ptr = MPIDU_Segment_alloc( );
+ MPIR_ERR_CHKANDJUMP1((sreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPIDU_Segment_alloc");
+ MPIDU_Segment_init(sreq->dev.user_buf, sreq->dev.user_count,
sreq->dev.datatype, sreq->dev.segment_ptr, 0);
sreq->dev.segment_first = 0;
sreq->dev.segment_size = data_sz;
@@ -280,26 +280,24 @@ int MPIDI_CH3_PktHandler_RndvClrToSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#define FUNCNAME MPIDI_CH3_PktHandler_RndvSend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_PktHandler_RndvSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_RndvSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data,
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_rndv_send_t * rs_pkt = &pkt->rndv_send;
int mpi_errno = MPI_SUCCESS;
int complete;
- char *data_buf;
- MPIDI_msg_sz_t data_len;
- MPID_Request *req;
+ intptr_t data_len;
+ MPIR_Request *req;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"received rndv send (data) pkt");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"received rndv send (data) pkt");
- MPID_Request_get_ptr(rs_pkt->receiver_req_id, req);
+ MPIR_Request_get_ptr(rs_pkt->receiver_req_id, req);
- data_len = ((*buflen - sizeof(MPIDI_CH3_Pkt_t) >= req->dev.recv_data_sz)
- ? req->dev.recv_data_sz : *buflen - sizeof(MPIDI_CH3_Pkt_t));
- data_buf = (char *)pkt + sizeof(MPIDI_CH3_Pkt_t);
+ data_len = ((*buflen >= req->dev.recv_data_sz)
+ ? req->dev.recv_data_sz : *buflen);
if (req->dev.recv_data_sz == 0) {
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
mpi_errno = MPID_Request_complete(req);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
@@ -307,14 +305,14 @@ int MPIDI_CH3_PktHandler_RndvSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
*rreqp = NULL;
}
else {
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len,
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data, &data_len,
&complete);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_PKT_RNDV_SEND");
}
- *buflen = sizeof(MPIDI_CH3_Pkt_t) + data_len;
+ *buflen = data_len;
if (complete)
{
@@ -342,17 +340,17 @@ int MPIDI_CH3_PktHandler_RndvSend( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
#define FUNCNAME MPIDI_CH3_RecvRndv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3_RecvRndv( MPIDI_VC_t * vc, MPID_Request *rreq )
+int MPIDI_CH3_RecvRndv( MPIDI_VC_t * vc, MPIR_Request *rreq )
{
int mpi_errno = MPI_SUCCESS;
/* A rendezvous request-to-send (RTS) message has arrived. We need
to send a CTS message to the remote process. */
- MPID_Request * cts_req;
+ MPIR_Request * cts_req;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_rndv_clr_to_send_t * cts_pkt = &upkt.rndv_clr_to_send;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,
"rndv RTS in the request, sending rndv CTS");
MPIDI_Pkt_init(cts_pkt, MPIDI_CH3_PKT_RNDV_CLR_TO_SEND);
@@ -369,7 +367,7 @@ int MPIDI_CH3_RecvRndv( MPIDI_VC_t * vc, MPID_Request *rreq )
/* FIXME: Ideally we could specify that a req not be returned.
This would avoid our having to decrement the
reference count on a req we don't want/need. */
- MPID_Request_release(cts_req);
+ MPIR_Request_free(cts_req);
}
fn_fail:
@@ -383,28 +381,28 @@ int MPIDI_CH3_RecvRndv( MPIDI_VC_t * vc, MPID_Request *rreq )
#ifdef MPICH_DBG_OUTPUT
int MPIDI_CH3_PktPrint_RndvReqToSend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... REQ_TO_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->rndv_req_to_send.sender_req_id));
- MPIU_DBG_PRINTF((" context_id ... %d\n", pkt->rndv_req_to_send.match.parts.context_id));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->rndv_req_to_send.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->rndv_req_to_send.match.parts.rank));
- MPIU_DBG_PRINTF((" data_sz ...... %d\n", pkt->rndv_req_to_send.data_sz));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... REQ_TO_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->rndv_req_to_send.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n", pkt->rndv_req_to_send.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->rndv_req_to_send.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->rndv_req_to_send.match.parts.rank);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," data_sz ...... %d\n", pkt->rndv_req_to_send.data_sz);
#ifdef MPID_USE_SEQUENCE_NUMBERS
- MPIU_DBG_PRINTF((" seqnum ....... %d\n", pkt->rndv_req_to_send.seqnum));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," seqnum ....... %d\n", pkt->rndv_req_to_send.seqnum);
#endif
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_RndvClrToSend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... CLR_TO_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->rndv_clr_to_send.sender_req_id));
- MPIU_DBG_PRINTF((" recvr_reqid .. 0x%08X\n", pkt->rndv_clr_to_send.receiver_req_id));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... CLR_TO_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->rndv_clr_to_send.sender_req_id));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," recvr_reqid .. 0x%08X\n", pkt->rndv_clr_to_send.receiver_req_id));
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_RndvSend( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... RNDV_SEND\n"));
- MPIU_DBG_PRINTF((" recvr_reqid .. 0x%08X\n", pkt->rndv_send.receiver_req_id));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... RNDV_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," recvr_reqid .. 0x%08X\n", pkt->rndv_send.receiver_req_id));
return MPI_SUCCESS;
}
#endif
diff --git a/src/mpid/ch3/src/ch3u_win_fns.c b/src/mpid/ch3/src/ch3u_win_fns.c
index a1eb3a9..f3324e0 100644
--- a/src/mpid/ch3/src/ch3u_win_fns.c
+++ b/src/mpid/ch3/src/ch3u_win_fns.c
@@ -5,10 +5,10 @@
*/
#include "mpidimpl.h"
-#include "mpiinfo.h"
+#include "mpir_info.h"
#include "mpidrma.h"
-MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_wincreate_allgather);
+extern MPIR_T_pvar_timer_t PVAR_TIMER_rma_wincreate_allgather ATTRIBUTE((unused));
#undef FUNCNAME
#define FUNCNAME MPIDI_Win_fns_init
@@ -17,9 +17,9 @@ MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_wincreate_allgather);
int MPIDI_Win_fns_init(MPIDI_CH3U_Win_fns_t * win_fns)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_FNS_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_WIN_FNS_INIT);
win_fns->create = MPIDI_CH3U_Win_create;
win_fns->allocate = MPIDI_CH3U_Win_allocate;
@@ -28,7 +28,7 @@ int MPIDI_Win_fns_init(MPIDI_CH3U_Win_fns_t * win_fns)
win_fns->gather_info = MPIDI_CH3U_Win_gather_info;
win_fns->shared_query = MPIDI_CH3U_Win_shared_query;
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_WIN_FNS_INIT);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_WIN_FNS_INIT);
return mpi_errno;
}
@@ -39,16 +39,16 @@ int MPIDI_Win_fns_init(MPIDI_CH3U_Win_fns_t * win_fns)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3U_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
- MPID_Info * info, MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+ MPIR_Info * info, MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS, i, k, comm_size, rank;
MPI_Aint *tmp_buf;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKPMEM_DECL(1);
- MPIU_CHKLMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_GATHER_INFO);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_GATHER_INFO);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_WIN_GATHER_INFO);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3U_WIN_GATHER_INFO);
comm_size = (*win_ptr)->comm_ptr->local_size;
rank = (*win_ptr)->comm_ptr->rank;
@@ -56,19 +56,19 @@ int MPIDI_CH3U_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
MPIR_T_PVAR_TIMER_START(RMA, rma_wincreate_allgather);
/* allocate memory for the base addresses, disp_units, and
* completion counters of all processes */
- MPIU_CHKPMEM_MALLOC((*win_ptr)->basic_info_table, MPIDI_Win_basic_info_t *,
+ MPIR_CHKPMEM_MALLOC((*win_ptr)->basic_info_table, MPIDI_Win_basic_info_t *,
comm_size * sizeof(MPIDI_Win_basic_info_t),
mpi_errno, "(*win_ptr)->basic_info_table");
/* get the addresses of the windows, window objects, and completion
* counters of all processes. allocate temp. buffer for communication */
- MPIU_CHKLMEM_MALLOC(tmp_buf, MPI_Aint *, 4 * comm_size * sizeof(MPI_Aint),
+ MPIR_CHKLMEM_MALLOC(tmp_buf, MPI_Aint *, 4 * comm_size * sizeof(MPI_Aint),
mpi_errno, "tmp_buf");
/* FIXME: This needs to be fixed for heterogeneous systems */
/* FIXME: If we wanted to validate the transfer as within range at the
* origin, we'd also need the window size. */
- tmp_buf[4 * rank] = MPIU_PtrToAint(base);
+ tmp_buf[4 * rank] = MPIR_Ptr_to_aint(base);
tmp_buf[4 * rank + 1] = size;
tmp_buf[4 * rank + 2] = (MPI_Aint) disp_unit;
tmp_buf[4 * rank + 3] = (MPI_Aint) (*win_ptr)->handle;
@@ -83,19 +83,19 @@ int MPIDI_CH3U_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
k = 0;
for (i = 0; i < comm_size; i++) {
- (*win_ptr)->basic_info_table[i].base_addr = MPIU_AintToPtr(tmp_buf[k++]);
+ (*win_ptr)->basic_info_table[i].base_addr = MPIR_Aint_to_ptr(tmp_buf[k++]);
(*win_ptr)->basic_info_table[i].size = tmp_buf[k++];
(*win_ptr)->basic_info_table[i].disp_unit = (int) tmp_buf[k++];
(*win_ptr)->basic_info_table[i].win_handle = (MPI_Win) tmp_buf[k++];
}
fn_exit:
- MPIU_CHKLMEM_FREEALL();
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_WIN_GATHER_INFO);
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3U_WIN_GATHER_INFO);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -105,13 +105,13 @@ int MPIDI_CH3U_Win_gather_info(void *base, MPI_Aint size, int disp_unit,
#define FUNCNAME MPIDI_CH3U_Win_create
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Win_create(void *base, MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+int MPIDI_CH3U_Win_create(void *base, MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_CREATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3U_WIN_CREATE);
mpi_errno = MPIDI_CH3U_Win_fns.gather_info(base, size, disp_unit, info, comm_ptr, win_ptr);
if (mpi_errno != MPI_SUCCESS)
@@ -127,7 +127,7 @@ int MPIDI_CH3U_Win_create(void *base, MPI_Aint size, int disp_unit, MPID_Info *
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3U_WIN_CREATE);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -140,19 +140,19 @@ int MPIDI_CH3U_Win_create(void *base, MPI_Aint size, int disp_unit, MPID_Info *
#define FUNCNAME MPIDI_CH3U_Win_create_dynamic
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Win_create_dynamic(MPID_Info * info, MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+int MPIDI_CH3U_Win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_CREATE_DYNAMIC);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3U_WIN_CREATE_DYNAMIC);
mpi_errno = MPIDI_CH3U_Win_fns.gather_info(MPI_BOTTOM, 0, 1, info, comm_ptr, win_ptr);
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3U_WIN_CREATE_DYNAMIC);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -164,17 +164,17 @@ int MPIDI_CH3U_Win_create_dynamic(MPID_Info * info, MPID_Comm * comm_ptr, MPID_W
#define FUNCNAME MPID_Win_attach
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_attach(MPID_Win * win, void *base, MPI_Aint size)
+int MPID_Win_attach(MPIR_Win * win, void *base, MPI_Aint size)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_ATTACH);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_ATTACH);
/* no op, all of memory is exposed */
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_ATTACH);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -187,17 +187,17 @@ int MPID_Win_attach(MPID_Win * win, void *base, MPI_Aint size)
#define FUNCNAME MPID_Win_detach
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_detach(MPID_Win * win, const void *base)
+int MPID_Win_detach(MPIR_Win * win, const void *base)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_DETACH);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_DETACH);
/* no op, all of memory is exposed */
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_DETACH);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -210,13 +210,13 @@ int MPID_Win_detach(MPID_Win * win, const void *base)
#define FUNCNAME MPIDI_CH3U_Win_allocate
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, void *baseptr, MPID_Win ** win_ptr)
+int MPIDI_CH3U_Win_allocate(MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, void *baseptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE);
if ((*win_ptr)->info_args.alloc_shm == TRUE) {
if (MPIDI_CH3U_Win_fns.allocate_shm != NULL) {
@@ -233,7 +233,7 @@ int MPIDI_CH3U_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info * info,
MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -244,18 +244,19 @@ int MPIDI_CH3U_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info * info,
#define FUNCNAME MPIDI_CH3U_Win_allocate_no_shm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Win_allocate_no_shm(MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, void *baseptr, MPID_Win ** win_ptr)
+int MPIDI_CH3U_Win_allocate_no_shm(MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, void *baseptr, MPIR_Win ** win_ptr)
{
void **base_pp = (void **) baseptr;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE_NO_SHM);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE_NO_SHM);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE_NO_SHM);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE_NO_SHM);
if (size > 0) {
- MPIU_CHKPMEM_MALLOC(*base_pp, void *, size, mpi_errno, "(*win_ptr)->base");
+ MPIR_CHKPMEM_MALLOC(*base_pp, void *, size, mpi_errno, "(*win_ptr)->base");
+ MPL_VG_MEM_INIT(*base_pp, size);
}
else if (size == 0) {
*base_pp = NULL;
@@ -272,11 +273,11 @@ int MPIDI_CH3U_Win_allocate_no_shm(MPI_Aint size, int disp_unit, MPID_Info * inf
}
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE_NO_SHM);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3U_WIN_ALLOCATE_NO_SHM);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -286,20 +287,20 @@ int MPIDI_CH3U_Win_allocate_no_shm(MPI_Aint size, int disp_unit, MPID_Info * inf
#define FUNCNAME MPIDI_CH3U_Win_shared_query
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint * size,
+int MPIDI_CH3U_Win_shared_query(MPIR_Win * win_ptr, int target_rank, MPI_Aint * size,
int *disp_unit, void *baseptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_SHARED_QUERY);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3U_WIN_SHARED_QUERY);
*(void **) baseptr = win_ptr->base;
*size = win_ptr->size;
*disp_unit = win_ptr->disp_unit;
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3U_WIN_SHARED_QUERY);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
@@ -312,12 +313,12 @@ int MPIDI_CH3U_Win_shared_query(MPID_Win * win_ptr, int target_rank, MPI_Aint *
#define FUNCNAME MPID_Win_set_info
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_set_info(MPID_Win * win, MPID_Info * info)
+int MPID_Win_set_info(MPIR_Win * win, MPIR_Info * info)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_SET_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_WIN_SET_INFO);
/********************************************************/
/************** check for info no_locks *****************/
@@ -380,7 +381,7 @@ int MPID_Win_set_info(MPID_Win * win, MPID_Info * info)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_WIN_SET_INFO);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -391,15 +392,15 @@ int MPID_Win_set_info(MPID_Win * win, MPID_Info * info)
#define FUNCNAME MPID_Win_get_info
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_get_info(MPID_Win * win, MPID_Info ** info_used)
+int MPID_Win_get_info(MPIR_Win * win, MPIR_Info ** info_used)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_GET_INFO);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_WIN_GET_INFO);
/* Allocate an empty info object */
- mpi_errno = MPIU_Info_alloc(info_used);
+ mpi_errno = MPIR_Info_alloc(info_used);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
@@ -474,7 +475,7 @@ int MPID_Win_get_info(MPID_Win * win, MPID_Info ** info_used)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_WIN_GET_INFO);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpid_abort.c b/src/mpid/ch3/src/mpid_abort.c
index e598fcc..032b5a1 100644
--- a/src/mpid/ch3/src/mpid_abort.c
+++ b/src/mpid/ch3/src/mpid_abort.c
@@ -30,15 +30,15 @@
#define FUNCNAME MPID_Abort
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Abort(MPID_Comm * comm, int mpi_errno, int exit_code,
+int MPID_Abort(MPIR_Comm * comm, int mpi_errno, int exit_code,
const char *error_msg)
{
int rank;
char msg[MPI_MAX_ERROR_STRING] = "";
char error_str[MPI_MAX_ERROR_STRING + 100];
- MPIDI_STATE_DECL(MPID_STATE_MPID_ABORT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_ABORT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_ABORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_ABORT);
if (error_msg == NULL) {
/* Create a default error message */
@@ -80,7 +80,7 @@ int MPID_Abort(MPID_Comm * comm, int mpi_errno, int exit_code,
MPIDU_Ftb_finalize();
#ifdef HAVE_DEBUGGER_SUPPORT
- MPIR_DebuggerSetAborting( error_msg );
+ MPIR_Debugger_set_aborting( error_msg );
#endif
/* Dumping the error message in MPICH and passing the same
@@ -106,7 +106,7 @@ int MPID_Abort(MPID_Comm * comm, int mpi_errno, int exit_code,
/* pmi_abort should not return but if it does, exit here. If it does,
add the function exit code before calling the final exit. */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_ABORT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_ABORT);
MPL_exit(exit_code);
return MPI_ERR_INTERN;
diff --git a/src/mpid/ch3/src/mpid_aint.c b/src/mpid/ch3/src/mpid_aint.c
index e5f6af7..fe60ebe 100644
--- a/src/mpid/ch3/src/mpid_aint.c
+++ b/src/mpid/ch3/src/mpid_aint.c
@@ -24,12 +24,12 @@ MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp)
{
MPI_Aint result;
- MPIDI_STATE_DECL(MPID_STATE_MPID_AINT_ADD);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_AINT_ADD);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_AINT_ADD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_AINT_ADD);
- result = MPIU_VOID_PTR_CAST_TO_MPI_AINT ((char*)MPIU_AINT_CAST_TO_VOID_PTR(base) + disp);
+ result = MPIR_VOID_PTR_CAST_TO_MPI_AINT ((char*)MPIR_AINT_CAST_TO_VOID_PTR(base) + disp);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_AINT_ADD);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_AINT_ADD);
return result;
}
@@ -51,11 +51,11 @@ MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
{
MPI_Aint result;
- MPIDI_STATE_DECL(MPID_STATE_MPID_AINT_DIFF);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_AINT_DIFF);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_AINT_DIFF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_AINT_DIFF);
- result = MPIU_PTR_DISP_CAST_TO_MPI_AINT ((char*)MPIU_AINT_CAST_TO_VOID_PTR(addr1) - (char*)MPIU_AINT_CAST_TO_VOID_PTR(addr2));
+ result = MPIR_PTR_DISP_CAST_TO_MPI_AINT ((char*)MPIR_AINT_CAST_TO_VOID_PTR(addr1) - (char*)MPIR_AINT_CAST_TO_VOID_PTR(addr2));
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_AINT_DIFF);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_AINT_DIFF);
return result;
}
diff --git a/src/mpid/ch3/src/mpid_cancel_recv.c b/src/mpid/ch3/src/mpid_cancel_recv.c
index 4bba002..146bd1f 100644
--- a/src/mpid/ch3/src/mpid_cancel_recv.c
+++ b/src/mpid/ch3/src/mpid_cancel_recv.c
@@ -10,16 +10,16 @@
#define FUNCNAME MPID_Cancel_recv
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Cancel_recv(MPID_Request * rreq)
+int MPID_Cancel_recv(MPIR_Request * rreq)
{
int netmod_cancelled = TRUE;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_CANCEL_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_CANCEL_RECV);
- MPIU_Assert(rreq->kind == MPID_REQUEST_RECV);
+ MPIR_Assert(rreq->kind == MPIR_REQUEST_KIND__RECV);
/* If the netmod has its own cancel_recv function, we need to call
it here. ANYSOURCE cancels (netmod and otherwise) are handled by
@@ -36,7 +36,7 @@ int MPID_Cancel_recv(MPID_Request * rreq)
if (netmod_cancelled && MPIDI_CH3U_Recvq_DP(rreq))
{
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,
"request 0x%08x cancelled", rreq->handle);
MPIR_STATUS_SET_CANCEL_BIT(rreq->status, TRUE);
MPIR_STATUS_SET_COUNT(rreq->status, 0);
@@ -47,12 +47,12 @@ int MPID_Cancel_recv(MPID_Request * rreq)
}
else
{
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,
"request 0x%08x already matched, unable to cancel", rreq->handle);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_CANCEL_RECV);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpid_cancel_send.c b/src/mpid/ch3/src/mpid_cancel_send.c
index 5f4b683..d6f4175 100644
--- a/src/mpid/ch3/src/mpid_cancel_send.c
+++ b/src/mpid/ch3/src/mpid_cancel_send.c
@@ -14,17 +14,17 @@
#define FUNCNAME MPID_Cancel_send
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Cancel_send(MPID_Request * sreq)
+int MPID_Cancel_send(MPIR_Request * sreq)
{
MPIDI_VC_t * vc;
int proto;
int flag;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_CANCEL_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_CANCEL_SEND);
- MPIU_Assert(sreq->kind == MPID_REQUEST_SEND);
+ MPIR_Assert(sreq->kind == MPIR_REQUEST_KIND__SEND);
MPIDI_Request_cancel_pending(sreq, &flag);
if (flag)
@@ -51,9 +51,9 @@ int MPID_Cancel_send(MPID_Request * sreq)
if (proto == MPIDI_REQUEST_SELF_MSG)
{
- MPID_Request * rreq;
+ MPIR_Request * rreq;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,
"attempting to cancel message sent to self");
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
@@ -61,9 +61,9 @@ int MPID_Cancel_send(MPID_Request * sreq)
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
if (rreq)
{
- MPIU_Assert(rreq->partner_request == sreq);
+ MPIR_Assert(rreq->dev.partner_request == sreq);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"send-to-self cancellation successful, sreq=0x%08x, rreq=0x%08x",
sreq->handle, rreq->handle));
@@ -72,8 +72,8 @@ int MPID_Cancel_send(MPID_Request * sreq)
* reference. We explicitly drop a second reference,
* because the receive request will never be visible to
* the user. */
- MPID_Request_release(rreq);
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
+ MPIR_Request_free(rreq);
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, TRUE);
mpi_errno = MPID_Request_complete(sreq);
@@ -84,7 +84,7 @@ int MPID_Cancel_send(MPID_Request * sreq)
else
{
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, FALSE);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"send-to-self cancellation failed, sreq=0x%08x, rreq=0x%08x",
sreq->handle, rreq->handle));
}
@@ -111,7 +111,7 @@ int MPID_Cancel_send(MPID_Request * sreq)
if (proto == MPIDI_REQUEST_RNDV_MSG)
{
- MPID_Request * rts_sreq;
+ MPIR_Request * rts_sreq;
/* The cancellation of the RTS request needs to be atomic through
the destruction of the RTS request to avoid
conflict with release of the RTS request if the CTS is received
@@ -126,7 +126,7 @@ int MPID_Cancel_send(MPID_Request * sreq)
/* since we attempted to cancel a RTS request, then we are
responsible for releasing that request */
- MPID_Request_release(rts_sreq);
+ MPIR_Request_free(rts_sreq);
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
@@ -142,9 +142,9 @@ int MPID_Cancel_send(MPID_Request * sreq)
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, TRUE);
/* no other thread should be waiting on sreq, so it is
safe to reset ref_count and cc */
- MPID_cc_set(&sreq->cc, 0);
+ MPIR_cc_set(&sreq->cc, 0);
/* FIXME should be a decr and assert, not a set */
- MPIU_Object_set_ref(sreq, 1);
+ MPIR_Object_set_ref(sreq, 1);
goto fn_exit;
}
}
@@ -157,9 +157,9 @@ int MPID_Cancel_send(MPID_Request * sreq)
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, TRUE);
/* no other thread should be waiting on sreq, so it is safe to
reset ref_count and cc */
- MPID_cc_set(&sreq->cc, 0);
+ MPIR_cc_set(&sreq->cc, 0);
/* FIXME should be a decr and assert, not a set */
- MPIU_Object_set_ref(sreq, 1);
+ MPIR_Object_set_ref(sreq, 1);
goto fn_exit;
}
}
@@ -172,9 +172,9 @@ int MPID_Cancel_send(MPID_Request * sreq)
int was_incomplete;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_cancel_send_req_t * const csr_pkt = &upkt.cancel_send_req;
- MPID_Request * csr_sreq;
+ MPIR_Request * csr_sreq;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"sending cancel request to %d for 0x%08x",
sreq->dev.match.parts.rank, sreq->handle));
@@ -204,7 +204,7 @@ int MPID_Cancel_send(MPID_Request * sreq)
}
if (csr_sreq != NULL)
{
- MPID_Request_release(csr_sreq);
+ MPIR_Request_free(csr_sreq);
}
}
@@ -218,7 +218,7 @@ int MPID_Cancel_send(MPID_Request * sreq)
should be adequate. */
fn_fail:
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_CANCEL_SEND);
return mpi_errno;
}
@@ -226,44 +226,44 @@ int MPID_Cancel_send(MPID_Request * sreq)
* Handler routines called when cancel send packets arrive
*/
-int MPIDI_CH3_PktHandler_CancelSendReq( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+int MPIDI_CH3_PktHandler_CancelSendReq( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_cancel_send_req_t * req_pkt = &pkt->cancel_send_req;
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int ack;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_cancel_send_resp_t * resp_pkt = &upkt.cancel_send_resp;
- MPID_Request * resp_sreq;
+ MPIR_Request * resp_sreq;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"received cancel send req pkt, sreq=0x%08x, rank=%d, tag=%d, context=%d",
req_pkt->sender_req_id, req_pkt->match.parts.rank,
req_pkt->match.parts.tag, req_pkt->match.parts.context_id));
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
/* FIXME: Note that this routine is called from within the packet handler.
If the message queue mutex is different from the progress mutex, this
must be protected within a message-queue mutex */
rreq = MPIDI_CH3U_Recvq_FDU(req_pkt->sender_req_id, &req_pkt->match);
if (rreq != NULL)
{
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"message cancelled");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"message cancelled");
if (MPIDI_Request_get_msg_type(rreq) == MPIDI_REQUEST_EAGER_MSG && rreq->dev.recv_data_sz > 0)
{
- MPIU_Free(rreq->dev.tmpbuf);
+ MPL_free(rreq->dev.tmpbuf);
}
if (MPIDI_Request_get_msg_type(rreq) == MPIDI_REQUEST_RNDV_MSG)
{
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
}
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
ack = TRUE;
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"unable to cancel message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"unable to cancel message");
ack = FALSE;
}
@@ -280,7 +280,7 @@ int MPIDI_CH3_PktHandler_CancelSendReq( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
}
if (resp_sreq != NULL)
{
- MPID_Request_release(resp_sreq);
+ MPIR_Request_free(resp_sreq);
}
*rreqp = NULL;
@@ -290,20 +290,20 @@ int MPIDI_CH3_PktHandler_CancelSendReq( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
}
int MPIDI_CH3_PktHandler_CancelSendResp( MPIDI_VC_t *vc ATTRIBUTE((unused)),
- MPIDI_CH3_Pkt_t *pkt,
- MPIDI_msg_sz_t *buflen, MPID_Request **rreqp )
+ MPIDI_CH3_Pkt_t *pkt, void *data ATTRIBUTE((unused)),
+ intptr_t *buflen, MPIR_Request **rreqp )
{
MPIDI_CH3_Pkt_cancel_send_resp_t * resp_pkt = &pkt->cancel_send_resp;
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"received cancel send resp pkt, sreq=0x%08x, ack=%d",
resp_pkt->sender_req_id, resp_pkt->ack));
- *buflen = sizeof(MPIDI_CH3_Pkt_t);
+ *buflen = 0;
- MPID_Request_get_ptr(resp_pkt->sender_req_id, sreq);
+ MPIR_Request_get_ptr(resp_pkt->sender_req_id, sreq);
if (resp_pkt->ack)
{
@@ -319,12 +319,12 @@ int MPIDI_CH3_PktHandler_CancelSendResp( MPIDI_VC_t *vc ATTRIBUTE((unused)),
MPIDI_CH3U_Request_decrement_cc(sreq, &cc);
}
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"message cancelled");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"message cancelled");
}
else
{
MPIR_STATUS_SET_CANCEL_BIT(sreq->status, FALSE);
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,"unable to cancel message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,"unable to cancel message");
}
mpi_errno = MPID_Request_complete(sreq);
@@ -347,20 +347,20 @@ int MPIDI_CH3_PktHandler_CancelSendResp( MPIDI_VC_t *vc ATTRIBUTE((unused)),
#ifdef MPICH_DBG_OUTPUT
int MPIDI_CH3_PktPrint_CancelSendReq( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... CANCEL_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->cancel_send_req.sender_req_id));
- MPIU_DBG_PRINTF((" context_id ... %d\n", pkt->cancel_send_req.match.parts.context_id));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->cancel_send_req.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->cancel_send_req.match.parts.rank));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... CANCEL_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->cancel_send_req.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n", pkt->cancel_send_req.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->cancel_send_req.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->cancel_send_req.match.parts.rank);
return MPI_SUCCESS;
}
int MPIDI_CH3_PktPrint_CancelSendResp( FILE *fp, MPIDI_CH3_Pkt_t *pkt )
{
- MPIU_DBG_PRINTF((" type ......... CANCEL_SEND_RESP\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->cancel_send_resp.sender_req_id));
- MPIU_DBG_PRINTF((" ack .......... %d\n", pkt->cancel_send_resp.ack));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... CANCEL_SEND_RESP\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->cancel_send_resp.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," ack .......... %d\n", pkt->cancel_send_resp.ack);
return MPI_SUCCESS;
}
diff --git a/src/mpid/ch3/src/mpid_coll.c b/src/mpid/ch3/src/mpid_coll.c
new file mode 100644
index 0000000..a302616
--- /dev/null
+++ b/src/mpid/ch3/src/mpid_coll.c
@@ -0,0 +1,710 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpidimpl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Barrier(MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Barrier_impl(comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Bcast(void * buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Bcast_impl(buffer, count, datatype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Allreduce(const void * sendbuf, void * recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Allreduce_impl(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Allgather(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Allgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Allgatherv(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, const int * recvcounts, const int * displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Allgatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Scatter(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Scatter_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Scatterv(const void * sendbuf, const int * sendcounts, const int * displs,
+ MPI_Datatype sendtype, void * recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Scatterv_impl(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Gather(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Gather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Gatherv(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, const int * recvcounts, const int * displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Alltoall(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Alltoall_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Alltoallv(const void * sendbuf, const int * sendcounts, const int * sdispls,
+ MPI_Datatype sendtype, void * recvbuf, const int * recvcounts,
+ const int * rdispls, MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
+ recvcounts, rdispls, recvtype, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Alltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Reduce(const void * sendbuf, void * recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm *comm_ptr,
+ MPIR_Errflag_t *errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Reduce_scatter_impl(sendbuf, recvbuf, recvcounts,
+ datatype, op, comm_ptr, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm *comm_ptr, MPIR_Errflag_t *errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Reduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Scan(const void * sendbuf, void * recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Scan_impl(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Exscan(const void * sendbuf, void * recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Exscan_impl(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Neighbor_allgather(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Neighbor_allgatherv(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Neighbor_alltoallv(const void * sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void * recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Neighbor_alltoallw(const void * sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
+ void * recvbuf, const int recvcounts[],
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Neighbor_alltoall(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ineighbor_allgather(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ineighbor_allgatherv(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request *request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ineighbor_alltoall(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ineighbor_alltoallv(const void * sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void * recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ineighbor_alltoallw(const void * sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
+ void * recvbuf, const int recvcounts[],
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ibarrier(MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ibarrier_impl(comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ibcast(void * buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Iallgather(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Iallgatherv(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, const int * recvcounts, const int * displs, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Iallreduce(const void * sendbuf, void * recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm,
+ request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ialltoall(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ialltoallv(const void * sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void * recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ialltoallw(const void * sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void * recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Iexscan(const void * sendbuf, void * recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Igather(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Igatherv(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, const int * recvcounts, const int * displs, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ireduce_scatter_block(const void * sendbuf, void * recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ireduce_scatter(const void * sendbuf, void * recvbuf, const int recvcounts[],
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype,
+ op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Ireduce(const void * sendbuf, void * recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Iscan(const void * sendbuf, void * recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Iscatter(const void * sendbuf, int sendcount, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, request);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Iscatterv(const void * sendbuf, const int * sendcounts,
+ const int * displs, MPI_Datatype sendtype,
+ void * recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, request);
+
+ return mpi_errno;
+}
diff --git a/src/mpid/ch3/src/mpid_comm_disconnect.c b/src/mpid/ch3/src/mpid_comm_disconnect.c
index f2fc65f..f4fa049 100644
--- a/src/mpid/ch3/src/mpid_comm_disconnect.c
+++ b/src/mpid/ch3/src/mpid_comm_disconnect.c
@@ -22,12 +22,12 @@
#define FUNCNAME MPID_Comm_disconnect
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_disconnect(MPID_Comm *comm_ptr)
+int MPID_Comm_disconnect(MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_DISCONNECT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_DISCONNECT);
/* Check to make sure the communicator hasn't already been revoked */
if (comm_ptr->revoked) {
@@ -48,7 +48,7 @@ int MPID_Comm_disconnect(MPID_Comm *comm_ptr)
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_DISCONNECT);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpid_comm_failure_ack.c b/src/mpid/ch3/src/mpid_comm_failure_ack.c
index 947056c..8ea5b20 100644
--- a/src/mpid/ch3/src/mpid_comm_failure_ack.c
+++ b/src/mpid/ch3/src/mpid_comm_failure_ack.c
@@ -10,12 +10,12 @@
#define FUNCNAME MPID_Comm_failure_ack
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_failure_ack(MPID_Comm *comm_ptr)
+int MPID_Comm_failure_ack(MPIR_Comm *comm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_FAILURE_ACK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_FAILURE_ACK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_FAILURE_ACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_FAILURE_ACK);
/* Update the list of failed processes that we know about locally.
* This part could technically be turned off and be a correct
@@ -32,7 +32,7 @@ int MPID_Comm_failure_ack(MPID_Comm *comm_ptr)
comm_ptr->dev.anysource_enabled = 1;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_FAILURE_ACK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_FAILURE_ACK);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -42,19 +42,19 @@ fn_fail:
#define FUNCNAME MPID_Comm_failure_get_acked
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_failure_get_acked(MPID_Comm *comm_ptr, MPID_Group **group_ptr)
+int MPID_Comm_failure_get_acked(MPIR_Comm *comm_ptr, MPIR_Group **group_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Group *failed_group, *comm_group;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_FAILURE_GET_ACKED);
+ MPIR_Group *failed_group, *comm_group;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_FAILURE_GET_ACKED);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_FAILURE_GET_ACKED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_FAILURE_GET_ACKED);
/* Get the group of all failed processes */
MPIDI_CH3U_Check_for_failed_procs();
MPIDI_CH3U_Get_failed_group(comm_ptr->dev.last_ack_rank, &failed_group);
- if (failed_group == MPID_Group_empty) {
- *group_ptr = MPID_Group_empty;
+ if (failed_group == MPIR_Group_empty) {
+ *group_ptr = MPIR_Group_empty;
goto fn_exit;
}
@@ -67,7 +67,7 @@ int MPID_Comm_failure_get_acked(MPID_Comm *comm_ptr, MPID_Group **group_ptr)
MPIR_Group_release(failed_group);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_FAILURE_GET_ACKED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_FAILURE_GET_ACKED);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -77,7 +77,7 @@ fn_fail:
#define FUNCNAME MPID_Comm_AS_enabled
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_AS_enabled(MPID_Comm *comm_ptr) {
+int MPID_Comm_AS_enabled(MPIR_Comm *comm_ptr) {
return comm_ptr->dev.anysource_enabled;
}
@@ -86,10 +86,10 @@ int MPID_Comm_AS_enabled(MPID_Comm *comm_ptr) {
#define FUNCNAME MPID_Request_is_anysource
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Request_is_anysource(MPID_Request *request_ptr) {
+int MPID_Request_is_anysource(MPIR_Request *request_ptr) {
int ret = 0;
- if (request_ptr->kind == MPID_REQUEST_RECV)
+ if (request_ptr->kind == MPIR_REQUEST_KIND__RECV)
ret = request_ptr->dev.match.parts.rank == MPI_ANY_SOURCE;
return ret;
diff --git a/src/mpid/ch3/src/mpid_comm_get_all_failed_procs.c b/src/mpid/ch3/src/mpid_comm_get_all_failed_procs.c
index 9b04c48..2c49ba4 100644
--- a/src/mpid/ch3/src/mpid_comm_get_all_failed_procs.c
+++ b/src/mpid/ch3/src/mpid_comm_get_all_failed_procs.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2011 by Argonne National Laboratory.
+ * (C) 2014 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -12,23 +12,23 @@
#endif
/* Generates a bitarray based on orig_comm where all procs in group are marked with 1 */
-static void group_to_bitarray(MPID_Group *group, MPID_Comm *orig_comm, int **bitarray, int *bitarray_size) {
+static void group_to_bitarray(MPIR_Group *group, MPIR_Comm *orig_comm, int **bitarray, int *bitarray_size) {
int mask;
int *group_ranks, *comm_ranks, i, index;
/* Calculate the bitarray size in ints and allocate space */
*bitarray_size = (orig_comm->local_size / (8 * sizeof(int)) + (orig_comm->local_size % (8 * sizeof(int)) ? 1 : 0));
- *bitarray = (int *) MPIU_Malloc(sizeof(int) * *bitarray_size);
+ *bitarray = (int *) MPL_malloc(sizeof(int) * *bitarray_size);
/* If the group is empty, return an empty bitarray. */
- if (group == MPID_Group_empty) {
+ if (group == MPIR_Group_empty) {
for (i = 0; i < *bitarray_size; i++) *bitarray[i] = 0;
return;
}
/* Get the ranks of group in orig_comm */
- group_ranks = (int *) MPIU_Malloc(sizeof(int) * group->size);
- comm_ranks = (int *) MPIU_Malloc(sizeof(int) * group->size);
+ group_ranks = (int *) MPL_malloc(sizeof(int) * group->size);
+ comm_ranks = (int *) MPL_malloc(sizeof(int) * group->size);
for (i = 0; i < group->size; i++) group_ranks[i] = i;
for (i = 0; i < *bitarray_size; i++) *bitarray[i] = 0;
@@ -45,15 +45,15 @@ static void group_to_bitarray(MPID_Group *group, MPID_Comm *orig_comm, int **bit
*bitarray[index] |= mask;
}
- MPIU_Free(group_ranks);
- MPIU_Free(comm_ranks);
+ MPL_free(group_ranks);
+ MPL_free(comm_ranks);
}
-/* Generates an MPID_Group from a bitarray */
-static MPID_Group *bitarray_to_group(MPID_Comm *comm_ptr, int *bitarray)
+/* Generates an MPIR_Group from a bitarray */
+static MPIR_Group *bitarray_to_group(MPIR_Comm *comm_ptr, int *bitarray)
{
- MPID_Group *ret_group;
- MPID_Group *comm_group;
+ MPIR_Group *ret_group;
+ MPIR_Group *comm_group;
UT_array *ranks_array;
int i, found = 0;
@@ -74,7 +74,7 @@ static MPID_Group *bitarray_to_group(MPID_Comm *comm_ptr, int *bitarray)
/* Converts the utarray into a group */
MPIR_Group_incl_impl(comm_group, found, ut_int_array(ranks_array), &ret_group);
else
- ret_group = MPID_Group_empty;
+ ret_group = MPIR_Group_empty;
utarray_free(ranks_array);
MPIR_Group_release(comm_group);
@@ -86,16 +86,16 @@ static MPID_Group *bitarray_to_group(MPID_Comm *comm_ptr, int *bitarray)
#define FUNCNAME MPID_Comm_get_all_failed_procs
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_get_all_failed_procs(MPID_Comm *comm_ptr, MPID_Group **failed_group, int tag)
+int MPID_Comm_get_all_failed_procs(MPIR_Comm *comm_ptr, MPIR_Group **failed_group, int tag)
{
int mpi_errno = MPI_SUCCESS, ret_errno;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
int i, j, bitarray_size;
int *bitarray, *remote_bitarray;
- MPID_Group *local_fail;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS);
+ MPIR_Group *local_fail;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS);
/* Kick the progress engine in case it's been a while so we get all the
* latest updates about failures */
@@ -109,8 +109,8 @@ int MPID_Comm_get_all_failed_procs(MPID_Comm *comm_ptr, MPID_Group **failed_grou
/* Generate a bitarray based on the list of failed procs */
group_to_bitarray(local_fail, comm_ptr, &bitarray, &bitarray_size);
- remote_bitarray = MPIU_Malloc(sizeof(int) * bitarray_size);
- if (local_fail != MPID_Group_empty)
+ remote_bitarray = MPL_malloc(sizeof(int) * bitarray_size);
+ if (local_fail != MPIR_Group_empty)
MPIR_Group_release(local_fail);
/* For now, this will be implemented as a star with rank 0 serving as
@@ -152,11 +152,11 @@ int MPID_Comm_get_all_failed_procs(MPID_Comm *comm_ptr, MPID_Group **failed_grou
*failed_group = bitarray_to_group(comm_ptr, remote_bitarray);
}
- MPIU_Free(bitarray);
- MPIU_Free(remote_bitarray);
+ MPL_free(bitarray);
+ MPL_free(remote_bitarray);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_GET_ALL_FAILED_PROCS);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpid_comm_revoke.c b/src/mpid/ch3/src/mpid_comm_revoke.c
index 09d836f..23cd53c 100644
--- a/src/mpid/ch3/src/mpid_comm_revoke.c
+++ b/src/mpid/ch3/src/mpid_comm_revoke.c
@@ -19,18 +19,18 @@
#define FUNCNAME MPID_Comm_revoke
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_revoke(MPID_Comm *comm_ptr, int is_remote)
+int MPID_Comm_revoke(MPIR_Comm *comm_ptr, int is_remote)
{
MPIDI_VC_t *vc;
MPL_IOV iov[MPL_IOV_LIMIT];
int mpi_errno = MPI_SUCCESS;
int i, size, my_rank;
- MPID_Request *request;
+ MPIR_Request *request;
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_revoke_t *revoke_pkt = &upkt.revoke;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_REVOKE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_REVOKE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_REVOKE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_REVOKE);
if (0 == comm_ptr->revoked) {
/* Mark the communicator as revoked locally */
@@ -41,7 +41,7 @@ int MPID_Comm_revoke(MPID_Comm *comm_ptr, int is_remote)
/* Start a counter to track how many revoke messages we've received from
* other ranks */
comm_ptr->dev.waiting_for_revoke = comm_ptr->local_size - 1 - is_remote; /* Subtract the processes who already know about the revoke */
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE, (MPIU_DBG_FDEST, "Comm %08x waiting_for_revoke: %d", comm_ptr->handle, comm_ptr->dev.waiting_for_revoke));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE, (MPL_DBG_FDEST, "Comm %08x waiting_for_revoke: %d", comm_ptr->handle, comm_ptr->dev.waiting_for_revoke));
/* Keep a reference to this comm so it doesn't get destroyed while
* it's being revoked */
@@ -70,7 +70,7 @@ int MPID_Comm_revoke(MPID_Comm *comm_ptr, int is_remote)
/* We don't need to keep a reference to this request. The
* progress engine will keep a reference until it completes
* later */
- MPID_Request_release(request);
+ MPIR_Request_free(request);
}
/* Check to see if we are done revoking */
@@ -90,7 +90,7 @@ int MPID_Comm_revoke(MPID_Comm *comm_ptr, int is_remote)
} else if (is_remote) { /* If this is local, we've already revoked and don't need to do it again. */
/* Decrement the revoke counter */
comm_ptr->dev.waiting_for_revoke--;
- MPIU_DBG_MSG_FMT(CH3_OTHER, VERBOSE, (MPIU_DBG_FDEST, "Comm %08x waiting_for_revoke: %d", comm_ptr->handle, comm_ptr->dev.waiting_for_revoke));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE, (MPL_DBG_FDEST, "Comm %08x waiting_for_revoke: %d", comm_ptr->handle, comm_ptr->dev.waiting_for_revoke));
/* Check to see if we are done revoking */
if (comm_ptr->dev.waiting_for_revoke == 0) {
@@ -98,6 +98,6 @@ int MPID_Comm_revoke(MPID_Comm *comm_ptr, int is_remote)
}
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_REVOKE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_REVOKE);
return MPI_SUCCESS;
}
diff --git a/src/mpid/ch3/src/mpid_comm_spawn_multiple.c b/src/mpid/ch3/src/mpid_comm_spawn_multiple.c
index 36d6f14..c702d2b 100644
--- a/src/mpid/ch3/src/mpid_comm_spawn_multiple.c
+++ b/src/mpid/ch3/src/mpid_comm_spawn_multiple.c
@@ -34,14 +34,14 @@
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Comm_spawn_multiple(int count, char *array_of_commands[],
char ** array_of_argv[], const int array_of_maxprocs[],
- MPID_Info * array_of_info_ptrs[], int root,
- MPID_Comm * comm_ptr, MPID_Comm ** intercomm,
+ MPIR_Info * array_of_info_ptrs[], int root,
+ MPIR_Comm * comm_ptr, MPIR_Comm ** intercomm,
int array_of_errcodes[])
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_SPAWN_MULTIPLE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_SPAWN_MULTIPLE);
/* Check to make sure the communicator hasn't already been revoked */
if (comm_ptr->revoked) {
@@ -64,6 +64,6 @@ int MPID_Comm_spawn_multiple(int count, char *array_of_commands[],
fn_fail:
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_SPAWN_MULTIPLE);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_finalize.c b/src/mpid/ch3/src/mpid_finalize.c
index c6a9ae2..a5fe615 100644
--- a/src/mpid/ch3/src/mpid_finalize.c
+++ b/src/mpid/ch3/src/mpid_finalize.c
@@ -18,9 +18,9 @@
int MPID_Finalize(void)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_FINALIZE);
/*
* Wait for all posted receives to complete. For now we are not doing
@@ -95,6 +95,10 @@ int MPID_Finalize(void)
/* Re-enabling the close step because many tests are failing
* without it, particularly under gforker */
+
+ mpi_errno = MPIDI_Port_finalize();
+ if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
+
#if 1
/* FIXME: The close actions should use the same code as the other
connection close code */
@@ -140,19 +144,19 @@ int MPID_Finalize(void)
p = MPIDI_CH3U_SRBuf_pool;
while (p) {
pNext = p->next;
- MPIU_Free(p);
+ MPL_free(p);
p = pNext;
}
}
MPIDI_RMA_finalize();
- MPIU_Free(MPIDI_failed_procs_string);
+ MPL_free(MPIDI_failed_procs_string);
MPIDU_Ftb_finalize();
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_FINALIZE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpid_getpname.c b/src/mpid/ch3/src/mpid_getpname.c
index db069c5..9345e10 100644
--- a/src/mpid/ch3/src/mpid_getpname.c
+++ b/src/mpid/ch3/src/mpid_getpname.c
@@ -32,11 +32,11 @@ int MPID_Get_processor_name(char * name, int namelen, int * resultlen)
}
MPIR_ERR_CHKANDJUMP(processorNameLen <= 0, mpi_errno, MPI_ERR_OTHER, "**procnamefailed");
- /* MPIU_Strncpy only copies until (and including) the null,
+ /* MPL_strncpy only copies until (and including) the null,
unlike strncpy, it does not blank pad. This is a good thing
here, because users don't always allocated MPI_MAX_PROCESSOR_NAME
characters */
- MPIU_Strncpy(name, processorName, namelen );
+ MPL_strncpy(name, processorName, namelen );
if (resultlen)
*resultlen = processorNameLen;
@@ -89,7 +89,7 @@ static inline void setupProcessorName( void )
}
#elif defined(HAVE_SYSINFO)
-static inline void setupProcessorName( void );
+static inline void setupProcessorName( void )
{
if (sysinfo(SI_HOSTNAME, processorName, MPI_MAX_PROCESSOR_NAME) == 0) {
processorNameLen = (int)strlen( processorName );
@@ -97,7 +97,7 @@ static inline void setupProcessorName( void );
}
#else
-static inline void setupProcessorName( void );
+static inline void setupProcessorName( void )
{
/* Set the name as the rank of the process */
MPL_snprintf( processorName, MPI_MAX_PROCESSOR_NAME, "%d",
diff --git a/src/mpid/ch3/src/mpid_improbe.c b/src/mpid/ch3/src/mpid_improbe.c
index 4dbb6b7..28d29a1 100644
--- a/src/mpid/ch3/src/mpid_improbe.c
+++ b/src/mpid/ch3/src/mpid_improbe.c
@@ -6,16 +6,16 @@
#include "mpidimpl.h"
-int (*MPIDI_Anysource_improbe_fn)(int tag, MPID_Comm * comm, int context_offset,
- int *flag, MPID_Request **message,
+int (*MPIDI_Anysource_improbe_fn)(int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request **message,
MPI_Status * status) = NULL;
#undef FUNCNAME
#define FUNCNAME MPID_Improbe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Improbe(int source, int tag, MPID_Comm *comm, int context_offset,
- int *flag, MPID_Request **message, MPI_Status *status)
+int MPID_Improbe(int source, int tag, MPIR_Comm *comm, int context_offset,
+ int *flag, MPIR_Request **message, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
int context_id = comm->recvcontext_id + context_offset;
@@ -99,7 +99,7 @@ int MPID_Improbe(int source, int tag, MPID_Comm *comm, int context_offset,
}
if (*flag && *message) {
- (*message)->kind = MPID_REQUEST_MPROBE;
+ (*message)->kind = MPIR_REQUEST_KIND__MPROBE;
MPIR_Request_extract_status((*message), status);
}
diff --git a/src/mpid/ch3/src/mpid_imrecv.c b/src/mpid/ch3/src/mpid_imrecv.c
index cb0b00e..d8c9e67 100644
--- a/src/mpid/ch3/src/mpid_imrecv.c
+++ b/src/mpid/ch3/src/mpid_imrecv.c
@@ -11,11 +11,11 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
- MPID_Request *message, MPID_Request **rreqp)
+ MPIR_Request *message, MPIR_Request **rreqp)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *rreq;
- MPID_Comm *comm;
+ MPIR_Request *rreq;
+ MPIR_Comm *comm;
MPIDI_VC_t *vc = NULL;
/* message==NULL is equivalent to MPI_MESSAGE_NO_PROC being passed at the
@@ -27,11 +27,11 @@ int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
goto fn_exit;
}
- MPIU_Assert(message != NULL);
- MPIU_Assert(message->kind == MPID_REQUEST_MPROBE);
+ MPIR_Assert(message != NULL);
+ MPIR_Assert(message->kind == MPIR_REQUEST_KIND__MPROBE);
/* promote the request object to be a "real" recv request */
- message->kind = MPID_REQUEST_RECV;
+ message->kind = MPIR_REQUEST_KIND__RECV;
*rreqp = rreq = message;
@@ -43,12 +43,22 @@ int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
rreq->dev.user_count = count;
rreq->dev.datatype = datatype;
+#ifdef ENABLE_COMM_OVERRIDES
+ MPIDI_Comm_get_vc(comm, rreq->status.MPI_SOURCE, &vc);
+ if (vc->comm_ops && vc->comm_ops->imrecv) {
+ MPID_THREAD_CS_ENTER(POBJ, vc->pobj_mutex);
+ vc->comm_ops->imrecv(vc, rreq);
+ MPID_THREAD_CS_EXIT(POBJ, vc->pobj_mutex);
+ goto fn_exit;
+ }
+#endif
+
if (MPIDI_Request_get_msg_type(rreq) == MPIDI_REQUEST_EAGER_MSG)
{
int recv_pending;
/* This is an eager message */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"eager message in the request");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"eager message in the request");
/* If this is an eager synchronous message, then we need to send an
acknowledgement back to the sender. */
@@ -64,16 +74,16 @@ int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
MPIDI_Request_decr_pending(rreq);
MPIDI_Request_check_pending(rreq, &recv_pending);
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
/* is it ever possible to have (cc==0 && recv_pending>0) ? */
- MPIU_Assert(!recv_pending);
+ MPIR_Assert(!recv_pending);
/* All of the data has arrived, we need to copy the data and
then free the buffer. */
if (rreq->dev.recv_data_sz > 0)
{
MPIDI_CH3U_Request_unpack_uebuf(rreq);
- MPIU_Free(rreq->dev.tmpbuf);
+ MPL_free(rreq->dev.tmpbuf);
}
mpi_errno = rreq->status.MPI_ERROR;
@@ -83,14 +93,14 @@ int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
{
/* there should never be outstanding completion events for an unexpected
* recv without also having a "pending recv" */
- MPIU_Assert(recv_pending);
+ MPIR_Assert(recv_pending);
/* The data is still being transfered across the net. We'll
leave it to the progress engine to handle once the
entire message has arrived. */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
}
@@ -103,8 +113,8 @@ int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
}
else if (MPIDI_Request_get_msg_type(rreq) == MPIDI_REQUEST_SELF_MSG)
@@ -118,7 +128,7 @@ int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
#ifdef HAVE_ERROR_CHECKING
int msg_type = MPIDI_Request_get_msg_type(rreq);
#endif
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
rreq = NULL;
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_INTERN, "**ch3|badmsgtype",
"**ch3|badmsgtype %d", msg_type);
diff --git a/src/mpid/ch3/src/mpid_init.c b/src/mpid/ch3/src/mpid_init.c
index c0367d8..f4cbadd 100644
--- a/src/mpid/ch3/src/mpid_init.c
+++ b/src/mpid/ch3/src/mpid_init.c
@@ -35,7 +35,7 @@ static int init_pg( int *argc_p, char ***argv_p,
int *pg_rank_p, MPIDI_PG_t **pg_p );
static int pg_compare_ids(void * id1, void * id2);
static int pg_destroy(MPIDI_PG_t * pg );
-static int set_eager_threshold(MPID_Comm *comm_ptr, MPID_Info *info, void *state);
+static int set_eager_threshold(MPIR_Comm *comm_ptr, MPIR_Info *info, void *state);
MPIDI_Process_t MPIDI_Process = { NULL };
MPIDI_CH3U_SRBuf_element_t * MPIDI_CH3U_SRBuf_pool = NULL;
@@ -43,6 +43,16 @@ MPIDI_CH3U_Win_fns_t MPIDI_CH3U_Win_fns = { NULL };
MPIDI_CH3U_Win_hooks_t MPIDI_CH3U_Win_hooks = { NULL };
MPIDI_CH3U_Win_pkt_ordering_t MPIDI_CH3U_Win_pkt_orderings = { 0 };
+#if defined(MPL_USE_DBG_LOGGING)
+MPL_dbg_class MPIDI_CH3_DBG_CONNECT;
+MPL_dbg_class MPIDI_CH3_DBG_DISCONNECT;
+MPL_dbg_class MPIDI_CH3_DBG_PROGRESS;
+MPL_dbg_class MPIDI_CH3_DBG_CHANNEL;
+MPL_dbg_class MPIDI_CH3_DBG_OTHER;
+MPL_dbg_class MPIDI_CH3_DBG_MSG;
+MPL_dbg_class MPIDI_CH3_DBG_VC;
+MPL_dbg_class MPIDI_CH3_DBG_REFCOUNT;
+#endif /* MPL_USE_DBG_LOGGING */
#undef FUNCNAME
#define FUNCNAME finalize_failed_procs_group
@@ -51,7 +61,7 @@ MPIDI_CH3U_Win_pkt_ordering_t MPIDI_CH3U_Win_pkt_orderings = { 0 };
static int finalize_failed_procs_group(void *param)
{
int mpi_errno = MPI_SUCCESS;
- if (MPIDI_Failed_procs_group != MPID_Group_empty) {
+ if (MPIDI_Failed_procs_group != MPIR_Group_empty) {
mpi_errno = MPIR_Group_free_impl(MPIDI_Failed_procs_group);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
}
@@ -64,13 +74,13 @@ static int finalize_failed_procs_group(void *param)
#define FUNCNAME set_eager_threshold
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int set_eager_threshold(MPID_Comm *comm_ptr, MPID_Info *info, void *state)
+static int set_eager_threshold(MPIR_Comm *comm_ptr, MPIR_Info *info, void *state)
{
int mpi_errno = MPI_SUCCESS;
char *endptr;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD);
+ MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD);
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD);
+ MPIR_FUNC_TERSE_ENTER(MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD);
comm_ptr->dev.eager_max_msg_sz = strtol(info->value, &endptr, 0);
@@ -79,7 +89,7 @@ static int set_eager_threshold(MPID_Comm *comm_ptr, MPID_Info *info, void *state
info->key);
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD);
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPIDI_CH3_SET_EAGER_THRESHOLD);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -98,19 +108,19 @@ int MPID_Init(int *argc, char ***argv, int requested, int *provided,
MPIDI_PG_t * pg=NULL;
int pg_rank=-1;
int pg_size;
- MPID_Comm * comm;
+ MPIR_Comm * comm;
int p;
int val;
- MPIDI_STATE_DECL(MPID_STATE_MPID_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_INIT);
/* initialization routine for ch3u_comm.c */
mpi_errno = MPIDI_CH3I_Comm_init();
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
/* init group of failed processes, and set finalize callback */
- MPIDI_Failed_procs_group = MPID_Group_empty;
+ MPIDI_Failed_procs_group = MPIR_Group_empty;
MPIR_Add_finalize(finalize_failed_procs_group, NULL, MPIR_FINALIZE_CALLBACK_PRIO-1);
/* FIXME: This is a good place to check for environment variables
@@ -130,10 +140,10 @@ int MPID_Init(int *argc, char ***argv, int requested, int *provided,
/* Create the string that will cache the last group of failed processes
* we received from PMI */
#ifdef USE_PMI2_API
- MPIDI_failed_procs_string = MPIU_Malloc(sizeof(char) * PMI2_MAX_VALLEN);
+ MPIDI_failed_procs_string = MPL_malloc(sizeof(char) * PMI2_MAX_VALLEN);
#else
PMI_KVS_Get_value_length_max(&val);
- MPIDI_failed_procs_string = MPIU_Malloc(sizeof(char) * (val+1));
+ MPIDI_failed_procs_string = MPL_malloc(sizeof(char) * (val+1));
#endif
/*
@@ -179,6 +189,17 @@ int MPID_Init(int *argc, char ***argv, int requested, int *provided,
MPIDI_CH3_Win_fns_init(&MPIDI_CH3U_Win_fns);
MPIDI_CH3_Win_hooks_init(&MPIDI_CH3U_Win_hooks);
+#ifdef MPL_USE_DBG_LOGGING
+ MPIDI_CH3_DBG_CONNECT = MPL_dbg_class_alloc("CH3_CONNECT", "ch3_connect");;
+ MPIDI_CH3_DBG_DISCONNECT = MPL_dbg_class_alloc("CH3_DISCONNECT", "ch3_disconnect");
+ MPIDI_CH3_DBG_PROGRESS = MPL_dbg_class_alloc("CH3_PROGRESS", "ch3_progress");
+ MPIDI_CH3_DBG_CHANNEL = MPL_dbg_class_alloc("CH3_CHANNEL", "ch3_channel");
+ MPIDI_CH3_DBG_OTHER = MPL_dbg_class_alloc("CH3_OTHER", "ch3_other");
+ MPIDI_CH3_DBG_MSG = MPL_dbg_class_alloc("CH3_MSG", "ch3_msg");
+ MPIDI_CH3_DBG_VC = MPL_dbg_class_alloc("VC", "vc");
+ MPIDI_CH3_DBG_REFCOUNT = MPL_dbg_class_alloc("REFCOUNT", "refcount");
+#endif /* MPL_USE_DBG_LOGGING */
+
/*
* Let the channel perform any necessary initialization
* The channel init should assume that PMI_Init has been called and that
@@ -294,7 +315,7 @@ int MPID_Init(int *argc, char ***argv, int requested, int *provided,
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,
"**ch3|get_parent_port");
}
- MPIU_DBG_MSG_S(CH3_CONNECT,VERBOSE,"Parent port is %s", parent_port);
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Parent port is %s", parent_port);
mpi_errno = MPID_Comm_connect(parent_port, NULL, 0,
MPIR_Process.comm_world, &comm);
@@ -305,8 +326,8 @@ int MPID_Init(int *argc, char ***argv, int requested, int *provided,
}
MPIR_Process.comm_parent = comm;
- MPIU_Assert(MPIR_Process.comm_parent != NULL);
- MPIU_Strncpy(comm->name, "MPI_COMM_PARENT", MPI_MAX_OBJECT_NAME);
+ MPIR_Assert(MPIR_Process.comm_parent != NULL);
+ MPL_strncpy(comm->name, "MPI_COMM_PARENT", MPI_MAX_OBJECT_NAME);
/* FIXME: Check that this intercommunicator gets freed in MPI_Finalize
if not already freed. */
@@ -333,7 +354,7 @@ int MPID_Init(int *argc, char ***argv, int requested, int *provided,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_INIT);
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
@@ -435,7 +456,7 @@ static int init_pg( int *argc, char ***argv,
#ifdef USE_PMI2_API
/* This memory will be freed by the PG_Destroy if there is an error */
- pg_id = MPIU_Malloc(MAX_JOBID_LEN);
+ pg_id = MPL_malloc(MAX_JOBID_LEN);
if (pg_id == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER,"**nomem","**nomem %d",
MAX_JOBID_LEN);
@@ -458,7 +479,7 @@ static int init_pg( int *argc, char ***argv,
}
/* This memory will be freed by the PG_Destroy if there is an error */
- pg_id = MPIU_Malloc(pg_id_sz + 1);
+ pg_id = MPL_malloc(pg_id_sz + 1);
if (pg_id == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER,"**nomem","**nomem %d",
pg_id_sz+1);
@@ -476,11 +497,11 @@ static int init_pg( int *argc, char ***argv,
}
else {
/* Create a default pg id */
- pg_id = MPIU_Malloc(2);
+ pg_id = MPL_malloc(2);
if (pg_id == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**nomem");
}
- MPIU_Strncpy( pg_id, "0", 2 );
+ MPL_strncpy( pg_id, "0", 2 );
}
/*
@@ -557,7 +578,7 @@ int MPIDI_CH3I_BCInit( char **bc_val_p, int *val_max_sz_p )
}
#endif
/* This memroy is returned by this routine */
- *bc_val_p = MPIU_Malloc(*val_max_sz_p);
+ *bc_val_p = MPL_malloc(*val_max_sz_p);
if (*bc_val_p == NULL) {
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**nomem","**nomem %d",
*val_max_sz_p);
@@ -579,7 +600,7 @@ int MPIDI_CH3I_BCFree( char *bc_val )
{
/* */
if (bc_val) {
- MPIU_Free( bc_val );
+ MPL_free( bc_val );
}
return 0;
@@ -597,7 +618,7 @@ static int pg_destroy(MPIDI_PG_t * pg)
{
if (pg->id != NULL)
{
- MPIU_Free(pg->id);
+ MPL_free(pg->id);
}
return MPI_SUCCESS;
diff --git a/src/mpid/ch3/src/mpid_iprobe.c b/src/mpid/ch3/src/mpid_iprobe.c
index e30a1b2..7e68081 100644
--- a/src/mpid/ch3/src/mpid_iprobe.c
+++ b/src/mpid/ch3/src/mpid_iprobe.c
@@ -6,22 +6,22 @@
#include "mpidimpl.h"
-int (*MPIDI_Anysource_iprobe_fn)(int tag, MPID_Comm * comm, int context_offset, int *flag,
+int (*MPIDI_Anysource_iprobe_fn)(int tag, MPIR_Comm * comm, int context_offset, int *flag,
MPI_Status * status) = NULL;
#undef FUNCNAME
#define FUNCNAME MPID_Iprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Iprobe(int source, int tag, MPID_Comm *comm, int context_offset,
+int MPID_Iprobe(int source, int tag, MPIR_Comm *comm, int context_offset,
int *flag, MPI_Status *status)
{
const int context = comm->recvcontext_id + context_offset;
int found = 0;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_IPROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_IPROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_IPROBE);
if (source == MPI_PROC_NULL)
{
@@ -109,7 +109,7 @@ int MPID_Iprobe(int source, int tag, MPID_Comm *comm, int context_offset,
*flag = found;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_IPROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_IPROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpid_irecv.c b/src/mpid/ch3/src/mpid_irecv.c
index 47528f5..05afa12 100644
--- a/src/mpid/ch3/src/mpid_irecv.c
+++ b/src/mpid/ch3/src/mpid_irecv.c
@@ -11,17 +11,17 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_IRECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_IRECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_IRECV);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d",
rank, tag, comm->recvcontext_id + context_offset));
@@ -35,7 +35,7 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
if (comm->revoked &&
MPIR_AGREE_TAG != MPIR_TAG_MASK_ERROR_BITS(tag & ~MPIR_Process.tagged_coll_mask) &&
MPIR_SHRINK_TAG != MPIR_TAG_MASK_ERROR_BITS(tag & ~MPIR_Process.tagged_coll_mask)) {
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"Comm has been revoked. Returning from MPID_IRECV.");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"Comm has been revoked. Returning from MPID_IRECV.");
MPIR_ERR_SETANDJUMP(mpi_errno,MPIX_ERR_REVOKED,"**revoked");
}
@@ -54,7 +54,7 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
MPIDI_VC_t * vc;
/* Message was found in the unexepected queue */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"request found in unexpected queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"request found in unexpected queue");
/* Release the message queue - we've removed this request from
the queue already */
@@ -65,7 +65,7 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
int recv_pending;
/* This is an eager message */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"eager message in the request");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"eager message in the request");
/* If this is a eager synchronous message, then we need to send an
acknowledgement back to the sender. */
@@ -81,16 +81,16 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
MPIDI_Request_decr_pending(rreq);
MPIDI_Request_check_pending(rreq, &recv_pending);
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
/* is it ever possible to have (cc==0 && recv_pending>0) ? */
- MPIU_Assert(!recv_pending);
+ MPIR_Assert(!recv_pending);
/* All of the data has arrived, we need to copy the data and
then free the buffer. */
if (rreq->dev.recv_data_sz > 0)
{
MPIDI_CH3U_Request_unpack_uebuf(rreq);
- MPIU_Free(rreq->dev.tmpbuf);
+ MPL_free(rreq->dev.tmpbuf);
}
mpi_errno = rreq->status.MPI_ERROR;
@@ -100,14 +100,14 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
{
/* there should never be outstanding completion events for an unexpected
* recv without also having a "pending recv" */
- MPIU_Assert(recv_pending);
+ MPIR_Assert(recv_pending);
/* The data is still being transfered across the net. We'll
leave it to the progress engine to handle once the
entire message has arrived. */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
}
@@ -120,8 +120,8 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
if (mpi_errno) MPIR_ERR_POP( mpi_errno );
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
}
else if (MPIDI_Request_get_msg_type(rreq) == MPIDI_REQUEST_SELF_MSG)
@@ -135,7 +135,7 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
#ifdef HAVE_ERROR_CHECKING
int msg_type = MPIDI_Request_get_msg_type(rreq);
#endif
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
rreq = NULL;
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_INTERN, "**ch3|badmsgtype",
"**ch3|badmsgtype %d", msg_type);
@@ -147,12 +147,12 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
/* Message has yet to arrived. The request has been placed on the
list of posted receive requests and populated with
information supplied in the arguments. */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"request allocated in posted queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"request allocated in posted queue");
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
rreq->dev.recv_pending_count = 1;
@@ -165,12 +165,12 @@ int MPID_Irecv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int
fn_exit:
*request = rreq;
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,"request allocated, handle=0x%08x",
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,"request allocated, handle=0x%08x",
rreq->handle);
fn_fail:
- MPIU_DBG_MSG_D(CH3_OTHER,VERBOSE,"IRECV errno: 0x%08x", mpi_errno);
- MPIU_DBG_MSG_D(CH3_OTHER,VERBOSE,"(class: %d)", MPIR_ERR_GET_CLASS(mpi_errno));
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_IRECV);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,"IRECV errno: 0x%08x", mpi_errno);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,"(class: %d)", MPIR_ERR_GET_CLASS(mpi_errno));
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_IRECV);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_irsend.c b/src/mpid/ch3/src/mpid_irsend.c
index 1dfce62..6434621 100644
--- a/src/mpid/ch3/src/mpid_irsend.c
+++ b/src/mpid/ch3/src/mpid_irsend.c
@@ -15,26 +15,26 @@
#define FUNCNAME MPID_Irsend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_ready_send_t * const ready_pkt = &upkt.ready_send;
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype * dt_ptr;
- MPID_Request * sreq;
+ MPIDU_Datatype* dt_ptr;
+ MPIR_Request * sreq;
MPIDI_VC_t * vc;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_IRSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_IRSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_IRSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_IRSEND);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d",
rank, tag, comm->context_id + context_offset));
@@ -45,7 +45,7 @@ int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, in
MPIR_ERR_SETANDJUMP(mpi_errno,MPIX_ERR_REVOKED,"**revoked");
}
- if (rank == comm->rank && comm->comm_kind != MPID_INTERCOMM)
+ if (rank == comm->rank && comm->comm_kind != MPIR_COMM_KIND__INTERCOMM)
{
mpi_errno = MPIDI_Isend_self(buf, count, datatype, rank, tag, comm, context_offset, MPIDI_REQUEST_TYPE_RSEND, &sreq);
goto fn_exit;
@@ -70,8 +70,8 @@ int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, in
if (rank == MPI_PROC_NULL)
{
- MPIU_Object_set_ref(sreq, 1);
- MPID_cc_set(&sreq->cc, 0);
+ MPIR_Object_set_ref(sreq, 1);
+ MPIR_cc_set(&sreq->cc, 0);
goto fn_exit;
}
@@ -86,7 +86,7 @@ int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, in
if (data_sz == 0)
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending zero length message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending zero length message");
sreq->dev.OnDataAvail = 0;
@@ -100,7 +100,7 @@ int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, in
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
sreq = NULL;
MPIR_ERR_SET(mpi_errno, MPI_ERR_OTHER, "**ch3|eagermsg");
goto fn_exit;
@@ -125,9 +125,9 @@ int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, in
data_sz, rank, tag,
comm, context_offset );
/* If we're not complete, then add a reference to the datatype */
- if (sreq && sreq->dev.OnDataAvail) {
+ if (sreq) {
sreq->dev.datatype_ptr = dt_ptr;
- MPID_Datatype_add_ref(dt_ptr);
+ MPIDU_Datatype_add_ref(dt_ptr);
}
}
} else {
@@ -140,22 +140,22 @@ int MPID_Irsend(const void * buf, int count, MPI_Datatype datatype, int rank, in
context_offset );
if (sreq && dt_ptr != NULL) {
sreq->dev.datatype_ptr = dt_ptr;
- MPID_Datatype_add_ref(dt_ptr);
+ MPIDU_Datatype_add_ref(dt_ptr);
}
}
fn_exit:
*request = sreq;
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,{
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,{
if (sreq != NULL)
{
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,"request allocated, handle=0x%08x", sreq->handle);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,"request allocated, handle=0x%08x", sreq->handle);
}
}
);
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_IRSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_IRSEND);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_isend.c b/src/mpid/ch3/src/mpid_isend.c
index 345e5cc..c5aaeb0 100644
--- a/src/mpid/ch3/src/mpid_isend.c
+++ b/src/mpid/ch3/src/mpid_isend.c
@@ -28,25 +28,25 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Isend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank,
- int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype * dt_ptr;
- MPID_Request * sreq;
+ MPIDU_Datatype* dt_ptr;
+ MPIR_Request * sreq;
MPIDI_VC_t * vc=0;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
int eager_threshold = -1;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_ISEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_ISEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_ISEND);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d",
rank, tag, comm->context_id + context_offset));
@@ -54,11 +54,11 @@ int MPID_Isend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
if (comm->revoked &&
MPIR_AGREE_TAG != MPIR_TAG_MASK_ERROR_BITS(tag & ~MPIR_Process.tagged_coll_mask) &&
MPIR_SHRINK_TAG != MPIR_TAG_MASK_ERROR_BITS(tag & ~MPIR_Process.tagged_coll_mask)) {
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"Communicator revoked. MPID_ISEND returning");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"Communicator revoked. MPID_ISEND returning");
MPIR_ERR_SETANDJUMP(mpi_errno,MPIX_ERR_REVOKED,"**revoked");
}
- if (rank == comm->rank && comm->comm_kind != MPID_INTERCOMM)
+ if (rank == comm->rank && comm->comm_kind != MPIR_COMM_KIND__INTERCOMM)
{
mpi_errno = MPIDI_Isend_self(buf, count, datatype, rank, tag, comm,
context_offset, MPIDI_REQUEST_TYPE_SEND, &sreq);
@@ -83,8 +83,8 @@ int MPID_Isend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
if (rank == MPI_PROC_NULL)
{
- MPIU_Object_set_ref(sreq, 1);
- MPID_cc_set(&sreq->cc, 0);
+ MPIR_Object_set_ref(sreq, 1);
+ MPIR_cc_set(&sreq->cc, 0);
goto fn_exit;
}
@@ -99,7 +99,7 @@ int MPID_Isend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
MPIDI_Request_set_msg_type(sreq, MPIDI_REQUEST_EAGER_MSG);
sreq->dev.OnDataAvail = 0;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending zero length message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending zero length message");
MPIDI_Pkt_init(eager_pkt, MPIDI_CH3_PKT_EAGER_SEND);
eager_pkt->match.parts.rank = comm->rank;
eager_pkt->match.parts.tag = tag;
@@ -117,7 +117,7 @@ int MPID_Isend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
/* --BEGIN ERROR HANDLING-- */
if (mpi_errno != MPI_SUCCESS)
{
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
sreq = NULL;
MPIR_ERR_SET(mpi_errno, MPI_ERR_OTHER, "**ch3|eagermsg");
goto fn_exit;
@@ -149,9 +149,9 @@ int MPID_Isend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
data_sz, rank, tag,
comm, context_offset );
/* If we're not complete, then add a reference to the datatype */
- if (sreq && sreq->dev.OnDataAvail) {
+ if (sreq) {
sreq->dev.datatype_ptr = dt_ptr;
- MPID_Datatype_add_ref(dt_ptr);
+ MPIDU_Datatype_add_ref(dt_ptr);
}
}
}
@@ -171,23 +171,23 @@ int MPID_Isend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
if (sreq && dt_ptr != NULL)
{
sreq->dev.datatype_ptr = dt_ptr;
- MPID_Datatype_add_ref(dt_ptr);
+ MPIDU_Datatype_add_ref(dt_ptr);
}
}
fn_exit:
*request = sreq;
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,
{
if (sreq != NULL)
{
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,"request allocated, handle=0x%08x", sreq->handle);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,"request allocated, handle=0x%08x", sreq->handle);
}
}
);
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_ISEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_ISEND);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_issend.c b/src/mpid/ch3/src/mpid_issend.c
index 7454af5..1c6da7c 100644
--- a/src/mpid/ch3/src/mpid_issend.c
+++ b/src/mpid/ch3/src/mpid_issend.c
@@ -15,25 +15,25 @@
#define FUNCNAME MPID_Issend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Issend(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Issend(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype * dt_ptr;
- MPID_Request * sreq;
+ MPIDU_Datatype* dt_ptr;
+ MPIR_Request * sreq;
MPIDI_VC_t * vc=0;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
int eager_threshold = -1;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_ISSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_ISSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_ISSEND);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d",
rank, tag, comm->context_id + context_offset));
@@ -44,7 +44,7 @@ int MPID_Issend(const void * buf, int count, MPI_Datatype datatype, int rank, in
MPIR_ERR_SETANDJUMP(mpi_errno,MPIX_ERR_REVOKED,"**revoked");
}
- if (rank == comm->rank && comm->comm_kind != MPID_INTERCOMM)
+ if (rank == comm->rank && comm->comm_kind != MPIR_COMM_KIND__INTERCOMM)
{
mpi_errno = MPIDI_Isend_self(buf, count, datatype, rank, tag, comm, context_offset, MPIDI_REQUEST_TYPE_SSEND, &sreq);
goto fn_exit;
@@ -69,8 +69,8 @@ int MPID_Issend(const void * buf, int count, MPI_Datatype datatype, int rank, in
if (rank == MPI_PROC_NULL)
{
- MPIU_Object_set_ref(sreq, 1);
- MPID_cc_set(&sreq->cc, 0);
+ MPIR_Object_set_ref(sreq, 1);
+ MPIR_cc_set(&sreq->cc, 0);
goto fn_exit;
}
@@ -92,10 +92,11 @@ int MPID_Issend(const void * buf, int count, MPI_Datatype datatype, int rank, in
dt_contig, dt_true_lb,
rank, tag, comm,
context_offset );
- /* If we're not complete, then add a reference to the datatype */
- if (sreq && sreq->dev.OnDataAvail) {
+ /* If we're not complete and this is a derived datatype
+ * communication, then add a reference to the datatype */
+ if (sreq && (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)) {
sreq->dev.datatype_ptr = dt_ptr;
- MPID_Datatype_add_ref(dt_ptr);
+ MPIDU_Datatype_add_ref(dt_ptr);
}
}
else
@@ -115,23 +116,23 @@ int MPID_Issend(const void * buf, int count, MPI_Datatype datatype, int rank, in
if (sreq && dt_ptr != NULL)
{
sreq->dev.datatype_ptr = dt_ptr;
- MPID_Datatype_add_ref(dt_ptr);
+ MPIDU_Datatype_add_ref(dt_ptr);
}
}
fn_exit:
*request = sreq;
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,
{
if (sreq != NULL) {
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,
"request allocated, handle=0x%08x", sreq->handle);
}
}
)
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_ISSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_ISSEND);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_mprobe.c b/src/mpid/ch3/src/mpid_mprobe.c
index 6e50eaf..f68b9b7 100644
--- a/src/mpid/ch3/src/mpid_mprobe.c
+++ b/src/mpid/ch3/src/mpid_mprobe.c
@@ -10,8 +10,8 @@
#define FUNCNAME MPID_Mprobe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Mprobe(int source, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **message, MPI_Status *status)
+int MPID_Mprobe(int source, int tag, MPIR_Comm *comm, int context_offset,
+ MPIR_Request **message, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
MPID_Progress_state progress_state;
@@ -106,7 +106,7 @@ int MPID_Mprobe(int source, int tag, MPID_Comm *comm, int context_offset,
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (*message) {
- (*message)->kind = MPID_REQUEST_MPROBE;
+ (*message)->kind = MPIR_REQUEST_KIND__MPROBE;
MPIR_Request_extract_status((*message), status);
}
diff --git a/src/mpid/ch3/src/mpid_mrecv.c b/src/mpid/ch3/src/mpid_mrecv.c
index 2aedeac..986321f 100644
--- a/src/mpid/ch3/src/mpid_mrecv.c
+++ b/src/mpid/ch3/src/mpid_mrecv.c
@@ -11,12 +11,12 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Mrecv(void *buf, int count, MPI_Datatype datatype,
- MPID_Request *message, MPI_Status *status)
+ MPIR_Request *message, MPI_Status *status)
{
int mpi_errno = MPI_SUCCESS;
MPI_Request req_handle; /* dummy for MPIR_Request_complete */
int active_flag; /* dummy for MPIR_Request_complete */
- MPID_Request *rreq = NULL;
+ MPIR_Request *rreq = NULL;
if (message == NULL) {
/* treat as though MPI_MESSAGE_NO_PROC was passed */
@@ -31,11 +31,11 @@ int MPID_Mrecv(void *buf, int count, MPI_Datatype datatype,
mpi_errno = MPID_Imrecv(buf, count, datatype, message, &rreq);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- if (!MPID_Request_is_complete(rreq)) {
+ if (!MPIR_Request_is_complete(rreq)) {
MPID_Progress_state progress_state;
MPID_Progress_start(&progress_state);
- while (!MPID_Request_is_complete(rreq))
+ while (!MPIR_Request_is_complete(rreq))
{
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno) {
diff --git a/src/mpid/ch3/src/mpid_port.c b/src/mpid/ch3/src/mpid_port.c
index ecac7f2..7cf4fe1 100644
--- a/src/mpid/ch3/src/mpid_port.c
+++ b/src/mpid/ch3/src/mpid_port.c
@@ -9,7 +9,7 @@
static int setupPortFunctions = 1;
#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
-static int MPIDI_Open_port(MPID_Info *, char *);
+static int MPIDI_Open_port(MPIR_Info *, char *);
static int MPIDI_Close_port(const char *);
/* Define the functions that are used to implement the port
@@ -41,12 +41,12 @@ static MPIDI_PortFns portFns = { 0, 0, 0, 0 };
#define FUNCNAME MPID_Open_port
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Open_port(MPID_Info *info_ptr, char *port_name)
+int MPID_Open_port(MPIR_Info *info_ptr, char *port_name)
{
int mpi_errno=MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIR_OPEN_PORT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIR_OPEN_PORT);
/* Check to see if we need to setup channel-specific functions
for handling the port operations */
@@ -71,7 +71,7 @@ int MPID_Open_port(MPID_Info *info_ptr, char *port_name)
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIR_OPEN_PORT);
return mpi_errno;
}
@@ -95,9 +95,9 @@ Input Parameters:
int MPID_Close_port(const char *port_name)
{
int mpi_errno=MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_CLOSE_PORT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_CLOSE_PORT);
/* Check to see if we need to setup channel-specific functions
for handling the port operations */
@@ -120,7 +120,7 @@ int MPID_Close_port(const char *port_name)
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_CLOSE_PORT);
return mpi_errno;
}
@@ -128,13 +128,13 @@ int MPID_Close_port(const char *port_name)
#define FUNCNAME MPID_Comm_accept
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_accept(const char * port_name, MPID_Info * info, int root,
- MPID_Comm * comm, MPID_Comm ** newcomm_ptr)
+int MPID_Comm_accept(const char * port_name, MPIR_Info * info, int root,
+ MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_ACCEPT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_ACCEPT);
/* Check to see if we need to setup channel-specific functions
for handling the port operations */
@@ -158,7 +158,7 @@ int MPID_Comm_accept(const char * port_name, MPID_Info * info, int root,
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_ACCEPT);
return mpi_errno;
}
@@ -166,13 +166,13 @@ int MPID_Comm_accept(const char * port_name, MPID_Info * info, int root,
#define FUNCNAME MPID_Comm_connect
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_connect(const char * port_name, MPID_Info * info, int root,
- MPID_Comm * comm, MPID_Comm ** newcomm_ptr)
+int MPID_Comm_connect(const char * port_name, MPIR_Info * info, int root,
+ MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
{
int mpi_errno=MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_COMM_CONNECT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_COMM_CONNECT);
/* Check to see if we need to setup channel-specific functions
for handling the port operations */
@@ -196,7 +196,7 @@ int MPID_Comm_connect(const char * port_name, MPID_Info * info, int root,
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_COMM_CONNECT);
return mpi_errno;
}
@@ -281,27 +281,27 @@ static void free_port_name_tag(int tag)
#define FUNCNAME MPIDI_Open_port
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDI_Open_port(MPID_Info *info_ptr, char *port_name)
+static int MPIDI_Open_port(MPIR_Info *info_ptr, char *port_name)
{
int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
+ int str_errno = MPL_STR_SUCCESS;
int len;
int port_name_tag = 0; /* this tag is added to the business card,
which is then returned as the port name */
int myRank = MPIR_Process.comm_world->rank;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OPEN_PORT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OPEN_PORT);
mpi_errno = get_port_name_tag(&port_name_tag);
MPIR_ERR_CHKANDJUMP(mpi_errno,mpi_errno,MPI_ERR_OTHER,"**argstr_port_name_tag");
len = MPI_MAX_PORT_NAME;
- str_errno = MPIU_Str_add_int_arg(&port_name, &len,
+ str_errno = MPL_str_add_int_arg(&port_name, &len,
MPIDI_CH3I_PORT_NAME_TAG_KEY, port_name_tag);
MPIR_ERR_CHKANDJUMP(str_errno, mpi_errno, MPI_ERR_OTHER, "**argstr_port_name_tag");
- /* This works because Get_business_card uses the same MPIU_Str_xxx
+ /* This works because Get_business_card uses the same MPL_str_xxx
functions as above to add the business card to the input string */
/* FIXME: We should instead ask the mpid_pg routines to give us
a connection string. There may need to be a separate step to
@@ -310,10 +310,12 @@ static int MPIDI_Open_port(MPID_Info *info_ptr, char *port_name)
may not use shared memory). We may need a channel-specific
function to create an exportable connection string. */
mpi_errno = MPIDI_CH3_Get_business_card(myRank, port_name, len);
- MPIU_DBG_MSG_FMT(CH3, VERBOSE, (MPIU_DBG_FDEST, "port_name = %s", port_name));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER, VERBOSE, (MPL_DBG_FDEST, "port_name = %s", port_name));
+
+ mpi_errno = MPIDI_CH3I_Port_init(port_name_tag);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OPEN_PORT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -330,17 +332,19 @@ static int MPIDI_Close_port(const char *port_name)
{
int mpi_errno = MPI_SUCCESS;
int port_name_tag;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CLOSE_PORT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CLOSE_PORT);
mpi_errno = MPIDI_GetTagFromPort(port_name, &port_name_tag);
MPIR_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER,"**argstr_port_name_tag");
free_port_name_tag(port_name_tag);
+ mpi_errno = MPIDI_CH3I_Port_destroy(port_name_tag);
+
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CLOSE_PORT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -353,9 +357,9 @@ fn_fail:
int MPIDI_GetTagFromPort( const char *port_name, int *port_name_tag )
{
int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
+ int str_errno = MPL_STR_SUCCESS;
- str_errno = MPIU_Str_get_int_arg(port_name, MPIDI_CH3I_PORT_NAME_TAG_KEY,
+ str_errno = MPL_str_get_int_arg(port_name, MPIDI_CH3I_PORT_NAME_TAG_KEY,
port_name_tag);
MPIR_ERR_CHKANDJUMP(str_errno, mpi_errno, MPI_ERR_OTHER, "**argstr_no_port_name_tag");
diff --git a/src/mpid/ch3/src/mpid_probe.c b/src/mpid/ch3/src/mpid_probe.c
index 2c37309..3b3dde5 100644
--- a/src/mpid/ch3/src/mpid_probe.c
+++ b/src/mpid/ch3/src/mpid_probe.c
@@ -10,15 +10,15 @@
#define FUNCNAME MPID_Probe
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Probe(int source, int tag, MPID_Comm * comm, int context_offset,
+int MPID_Probe(int source, int tag, MPIR_Comm * comm, int context_offset,
MPI_Status * status)
{
MPID_Progress_state progress_state;
const int context = comm->recvcontext_id + context_offset;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_PROBE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_PROBE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_PROBE);
if (source == MPI_PROC_NULL)
{
@@ -97,7 +97,7 @@ int MPID_Probe(int source, int tag, MPID_Comm * comm, int context_offset,
MPIDI_CH3_Progress_end(&progress_state);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_PROBE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_PROBE);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpid_recv.c b/src/mpid/ch3/src/mpid_recv.c
index d226784..19e5861 100644
--- a/src/mpid/ch3/src/mpid_recv.c
+++ b/src/mpid/ch3/src/mpid_recv.c
@@ -11,8 +11,8 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int tag,
- MPID_Comm * comm, int context_offset,
- MPI_Status * status, MPID_Request ** request)
+ MPIR_Comm * comm, int context_offset,
+ MPI_Status * status, MPIR_Request ** request)
{
/* FIXME: in the common case, we want to simply complete the message
and make as few updates as possible.
@@ -22,13 +22,13 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
message was not found in the unexpected queue. */
int mpi_errno = MPI_SUCCESS;
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int found;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RECV);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RECV);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RECV);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d", rank, tag,
comm->recvcontext_id + context_offset));
@@ -60,7 +60,7 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
MPIDI_VC_t * vc;
/* Message was found in the unexepected queue */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"request found in unexpected queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"request found in unexpected queue");
/* Release the message queue - we've removed this request from
the queue already */
@@ -70,7 +70,7 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
int recv_pending;
/* This is an eager message. */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"eager message in the request");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"eager message in the request");
if (MPIDI_Request_get_sync_send_flag(rreq))
{
@@ -85,16 +85,16 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
MPIDI_Request_decr_pending(rreq);
MPIDI_Request_check_pending(rreq, &recv_pending);
- if (MPID_Request_is_complete(rreq)) {
+ if (MPIR_Request_is_complete(rreq)) {
/* is it ever possible to have (cc==0 && recv_pending>0) ? */
- MPIU_Assert(!recv_pending);
+ MPIR_Assert(!recv_pending);
/* All of the data has arrived, we need to unpack the data and
then free the buffer and the request. */
if (rreq->dev.recv_data_sz > 0)
{
MPIDI_CH3U_Request_unpack_uebuf(rreq);
- MPIU_Free(rreq->dev.tmpbuf);
+ MPL_free(rreq->dev.tmpbuf);
}
mpi_errno = rreq->status.MPI_ERROR;
@@ -103,7 +103,7 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
*status = rreq->status;
}
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
rreq = NULL;
goto fn_exit;
@@ -112,15 +112,15 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
{
/* there should never be outstanding completion events for an unexpected
* recv without also having a "pending recv" */
- MPIU_Assert(recv_pending);
+ MPIR_Assert(recv_pending);
/* The data is still being transfered across the net.
We'll leave it to the progress engine to handle once the
entire message has arrived. */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
}
}
@@ -132,8 +132,8 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
}
else if (MPIDI_Request_get_msg_type(rreq) == MPIDI_REQUEST_SELF_MSG)
@@ -151,7 +151,7 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
#ifdef HAVE_ERROR_CHECKING
int msg_type = MPIDI_Request_get_msg_type(rreq);
#endif
- MPID_Request_release(rreq);
+ MPIR_Request_free(rreq);
rreq = NULL;
MPIR_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_INTERN, "**ch3|badmsgtype",
"**ch3|badmsgtype %d", msg_type);
@@ -163,7 +163,7 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
/* Message has yet to arrived. The request has been placed on the
list of posted receive requests and populated with
information supplied in the arguments. */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"request allocated in posted queue");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"request allocated in posted queue");
/* FIXME: We do not need to add a datatype reference if
the request is blocking. This is currently added because
@@ -172,8 +172,8 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
decremented, and are freed if the refs are zero) */
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
rreq->dev.recv_pending_count = 1;
@@ -185,19 +185,19 @@ int MPID_Recv(void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int t
fn_exit:
*request = rreq;
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,
if (rreq)
{
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,
"request allocated, handle=0x%08x", rreq->handle);
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,
"operation complete, no requests allocated");
});
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RECV);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RECV);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_rma.c b/src/mpid/ch3/src/mpid_rma.c
index 6c570d4..e104d09 100644
--- a/src/mpid/ch3/src/mpid_rma.c
+++ b/src/mpid/ch3/src/mpid_rma.c
@@ -40,7 +40,7 @@ cvars:
static volatile int initRMAoptions = 1;
-MPID_Win *MPIDI_RMA_Win_active_list_head = NULL, *MPIDI_RMA_Win_inactive_list_head = NULL;
+MPIR_Win *MPIDI_RMA_Win_active_list_head = NULL, *MPIDI_RMA_Win_inactive_list_head = NULL;
/* This variable keeps track of number of active RMA requests, i.e., total number of issued
* but incomplete RMA operations. We use this variable to control the resources used up by
@@ -50,22 +50,22 @@ int MPIDI_CH3I_RMA_Active_req_cnt = 0;
/* This variable stores the index of RMA progress hook in progress hook array */
int MPIDI_CH3I_RMA_Progress_hook_id = 0;
-static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model, MPID_Info * info,
- MPID_Comm * comm_ptr, MPID_Win ** win_ptr);
+static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr);
#undef FUNCNAME
#define FUNCNAME MPID_Win_create
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_create(void *base, MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+int MPID_Win_create(void *base, MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_CREATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_CREATE);
/* Check to make sure the communicator hasn't already been revoked */
if (comm_ptr->revoked) {
@@ -84,7 +84,7 @@ int MPID_Win_create(void *base, MPI_Aint size, int disp_unit, MPID_Info * info,
MPIR_ERR_POP(mpi_errno);
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_WIN_CREATE);
return mpi_errno;
}
@@ -93,13 +93,13 @@ int MPID_Win_create(void *base, MPI_Aint size, int disp_unit, MPID_Info * info,
#define FUNCNAME MPID_Win_allocate
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info * info,
- MPID_Comm * comm_ptr, void *baseptr, MPID_Win ** win_ptr)
+int MPID_Win_allocate(MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, void *baseptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_ALLOCATE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_ALLOCATE);
mpi_errno =
win_init(size, disp_unit, MPI_WIN_FLAVOR_ALLOCATE, MPI_WIN_UNIFIED, info, comm_ptr,
@@ -114,7 +114,7 @@ int MPID_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info * info,
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_WIN_ALLOCATE);
return mpi_errno;
}
@@ -123,13 +123,13 @@ int MPID_Win_allocate(MPI_Aint size, int disp_unit, MPID_Info * info,
#define FUNCNAME MPID_Win_create_dynamic
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_create_dynamic(MPID_Info * info, MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+int MPID_Win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_CREATE_DYNAMIC);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_CREATE_DYNAMIC);
mpi_errno = win_init(0 /* spec defines size to be 0 */ ,
1 /* spec defines disp_unit to be 1 */ ,
@@ -146,7 +146,7 @@ int MPID_Win_create_dynamic(MPID_Info * info, MPID_Comm * comm_ptr, MPID_Win **
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_WIN_CREATE_DYNAMIC);
return mpi_errno;
}
@@ -156,16 +156,16 @@ int MPID_Win_create_dynamic(MPID_Info * info, MPID_Comm * comm_ptr, MPID_Win **
#define FUNCNAME MPID_Alloc_mem
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-void *MPID_Alloc_mem(size_t size, MPID_Info * info_ptr)
+void *MPID_Alloc_mem(size_t size, MPIR_Info * info_ptr)
{
void *ap = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPID_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_ALLOC_MEM);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_ALLOC_MEM);
ap = MPIDI_CH3I_Alloc_mem(size, info_ptr);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_ALLOC_MEM);
return ap;
}
@@ -177,14 +177,14 @@ void *MPID_Alloc_mem(size_t size, MPID_Info * info_ptr)
int MPID_Free_mem(void *ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_FREE_MEM);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_FREE_MEM);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_FREE_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_FREE_MEM);
MPIDI_CH3I_Free_mem(ptr);
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_FREE_MEM);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_FREE_MEM);
return mpi_errno;
}
@@ -193,14 +193,14 @@ int MPID_Free_mem(void *ptr)
#define FUNCNAME MPID_Win_allocate_shared
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_allocate_shared(MPI_Aint size, int disp_unit, MPID_Info * info, MPID_Comm * comm_ptr,
- void *base_ptr, MPID_Win ** win_ptr)
+int MPID_Win_allocate_shared(MPI_Aint size, int disp_unit, MPIR_Info * info, MPIR_Comm * comm_ptr,
+ void *base_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_ALLOCATE_SHARED);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_ALLOCATE_SHARED);
mpi_errno =
win_init(size, disp_unit, MPI_WIN_FLAVOR_SHARED, MPI_WIN_UNIFIED, info, comm_ptr, win_ptr);
@@ -213,7 +213,7 @@ int MPID_Win_allocate_shared(MPI_Aint size, int disp_unit, MPID_Info * info, MPI
MPIR_ERR_POP(mpi_errno);
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_WIN_ALLOCATE_SHARED);
return mpi_errno;
}
@@ -221,13 +221,13 @@ int MPID_Win_allocate_shared(MPI_Aint size, int disp_unit, MPID_Info * info, MPI
#define FUNCNAME MPID_Win_shared_query
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_shared_query(MPID_Win * win, int rank, MPI_Aint * size, int *disp_unit, void *baseptr)
+int MPID_Win_shared_query(MPIR_Win * win, int rank, MPI_Aint * size, int *disp_unit, void *baseptr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_SHARED_QUERY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_WIN_SHARED_QUERY);
mpi_errno = MPIDI_CH3U_Win_fns.shared_query(win, rank, size, disp_unit, baseptr);
if (mpi_errno != MPI_SUCCESS) {
@@ -235,7 +235,7 @@ int MPID_Win_shared_query(MPID_Win * win, int rank, MPI_Aint * size, int *disp_u
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_WIN_SHARED_QUERY);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -245,17 +245,17 @@ int MPID_Win_shared_query(MPID_Win * win, int rank, MPI_Aint * size, int *disp_u
#define FUNCNAME win_init
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model, MPID_Info * info,
- MPID_Comm * comm_ptr, MPID_Win ** win_ptr)
+static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model, MPIR_Info * info,
+ MPIR_Comm * comm_ptr, MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPID_Comm *win_comm_ptr;
+ MPIR_Comm *win_comm_ptr;
int win_target_pool_size;
- MPIU_CHKPMEM_DECL(5);
- MPIDI_STATE_DECL(MPID_STATE_WIN_INIT);
+ MPIR_CHKPMEM_DECL(5);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_WIN_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_WIN_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_WIN_INIT);
MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
if (initRMAoptions) {
@@ -267,15 +267,15 @@ static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model,
}
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- *win_ptr = (MPID_Win *) MPIU_Handle_obj_alloc(&MPID_Win_mem);
+ *win_ptr = (MPIR_Win *) MPIR_Handle_obj_alloc(&MPIR_Win_mem);
MPIR_ERR_CHKANDJUMP1(!(*win_ptr), mpi_errno, MPI_ERR_OTHER, "**nomem",
- "**nomem %s", "MPID_Win_mem");
+ "**nomem %s", "MPIR_Win_mem");
mpi_errno = MPIR_Comm_dup_impl(comm_ptr, &win_comm_ptr);
if (mpi_errno)
MPIR_ERR_POP(mpi_errno);
- MPIU_Object_set_ref(*win_ptr, 1);
+ MPIR_Object_set_ref(*win_ptr, 1);
/* (*win_ptr)->errhandler is set by upper level; */
/* (*win_ptr)->base is set by caller; */
@@ -322,7 +322,7 @@ static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model,
if (mpi_errno != MPI_SUCCESS)
MPIR_ERR_POP(mpi_errno);
- MPIU_CHKPMEM_MALLOC((*win_ptr)->op_pool_start, MPIDI_RMA_Op_t *,
+ MPIR_CHKPMEM_MALLOC((*win_ptr)->op_pool_start, MPIDI_RMA_Op_t *,
sizeof(MPIDI_RMA_Op_t) * MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE, mpi_errno,
"RMA op pool");
(*win_ptr)->op_pool_head = NULL;
@@ -332,8 +332,8 @@ static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model,
}
win_target_pool_size =
- MPIR_MIN(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE, MPIR_Comm_size(win_comm_ptr));
- MPIU_CHKPMEM_MALLOC((*win_ptr)->target_pool_start, MPIDI_RMA_Target_t *,
+ MPL_MIN(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE, MPIR_Comm_size(win_comm_ptr));
+ MPIR_CHKPMEM_MALLOC((*win_ptr)->target_pool_start, MPIDI_RMA_Target_t *,
sizeof(MPIDI_RMA_Target_t) * win_target_pool_size, mpi_errno,
"RMA target pool");
(*win_ptr)->target_pool_head = NULL;
@@ -342,14 +342,14 @@ static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model,
MPL_DL_APPEND((*win_ptr)->target_pool_head, &((*win_ptr)->target_pool_start[i]));
}
- (*win_ptr)->num_slots = MPIR_MIN(MPIR_CVAR_CH3_RMA_SLOTS_SIZE, MPIR_Comm_size(win_comm_ptr));
- MPIU_CHKPMEM_MALLOC((*win_ptr)->slots, MPIDI_RMA_Slot_t *,
+ (*win_ptr)->num_slots = MPL_MIN(MPIR_CVAR_CH3_RMA_SLOTS_SIZE, MPIR_Comm_size(win_comm_ptr));
+ MPIR_CHKPMEM_MALLOC((*win_ptr)->slots, MPIDI_RMA_Slot_t *,
sizeof(MPIDI_RMA_Slot_t) * (*win_ptr)->num_slots, mpi_errno, "RMA slots");
for (i = 0; i < (*win_ptr)->num_slots; i++) {
(*win_ptr)->slots[i].target_list_head = NULL;
}
- MPIU_CHKPMEM_MALLOC((*win_ptr)->target_lock_entry_pool_start,
+ MPIR_CHKPMEM_MALLOC((*win_ptr)->target_lock_entry_pool_start,
MPIDI_RMA_Target_lock_entry_t *,
sizeof(MPIDI_RMA_Target_lock_entry_t) *
MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE, mpi_errno,
@@ -380,9 +380,9 @@ static int win_init(MPI_Aint size, int disp_unit, int create_flavor, int model,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_WIN_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_WIN_INIT);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
diff --git a/src/mpid/ch3/src/mpid_rsend.c b/src/mpid/ch3/src/mpid_rsend.c
index 3619214..445e31b 100644
--- a/src/mpid/ch3/src/mpid_rsend.c
+++ b/src/mpid/ch3/src/mpid_rsend.c
@@ -19,24 +19,24 @@
#define FUNCNAME MPID_Rsend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Rsend(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Rsend(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype * dt_ptr;
- MPID_Request * sreq = NULL;
+ MPIDU_Datatype* dt_ptr;
+ MPIR_Request * sreq = NULL;
MPIDI_VC_t * vc;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RSEND);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d",
rank, tag, comm->context_id + context_offset));
@@ -47,7 +47,7 @@ int MPID_Rsend(const void * buf, int count, MPI_Datatype datatype, int rank, int
MPIR_ERR_SETANDJUMP(mpi_errno,MPIX_ERR_REVOKED,"**revoked");
}
- if (rank == comm->rank && comm->comm_kind != MPID_INTERCOMM)
+ if (rank == comm->rank && comm->comm_kind != MPIR_COMM_KIND__INTERCOMM)
{
mpi_errno = MPIDI_Isend_self(buf, count, datatype, rank, tag, comm, context_offset, MPIDI_REQUEST_TYPE_RSEND, &sreq);
goto fn_exit;
@@ -75,7 +75,7 @@ int MPID_Rsend(const void * buf, int count, MPI_Datatype datatype, int rank, int
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_ready_send_t * const ready_pkt = &upkt.ready_send;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending zero length message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending zero length message");
MPIDI_Pkt_init(ready_pkt, MPIDI_CH3_PKT_READY_SEND);
ready_pkt->match.parts.rank = comm->rank;
@@ -144,21 +144,21 @@ int MPID_Rsend(const void * buf, int count, MPI_Datatype datatype, int rank, int
fn_exit:
*request = sreq;
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,
{
if (mpi_errno == MPI_SUCCESS) {
if (sreq) {
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,"request allocated, handle=0x%08x", sreq->handle);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,"request allocated, handle=0x%08x", sreq->handle);
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"operation complete, no requests allocated");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"operation complete, no requests allocated");
}
}
}
);
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RSEND);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_send.c b/src/mpid/ch3/src/mpid_send.c
index 7b6c2a8..3389423 100644
--- a/src/mpid/ch3/src/mpid_send.c
+++ b/src/mpid/ch3/src/mpid_send.c
@@ -16,25 +16,25 @@
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPID_Send(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank,
- int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype * dt_ptr;
- MPID_Request * sreq = NULL;
+ MPIDU_Datatype* dt_ptr;
+ MPIR_Request * sreq = NULL;
MPIDI_VC_t * vc;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
int eager_threshold = -1;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEND);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d",
rank, tag, comm->context_id + context_offset));
@@ -45,7 +45,7 @@ int MPID_Send(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank,
MPIR_ERR_SETANDJUMP(mpi_errno,MPIX_ERR_REVOKED,"**revoked");
}
- if (rank == comm->rank && comm->comm_kind != MPID_INTERCOMM)
+ if (rank == comm->rank && comm->comm_kind != MPIR_COMM_KIND__INTERCOMM)
{
mpi_errno = MPIDI_Isend_self(buf, count, datatype, rank, tag, comm,
context_offset, MPIDI_REQUEST_TYPE_SEND,
@@ -56,7 +56,7 @@ int MPID_Send(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank,
will not be made (long-term FIXME) */
# ifndef MPICH_IS_THREADED
{
- if (sreq != NULL && MPID_cc_get(sreq->cc) != 0) {
+ if (sreq != NULL && MPIR_cc_get(sreq->cc) != 0) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,
"**dev|selfsenddeadlock");
}
@@ -91,7 +91,7 @@ int MPID_Send(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank,
MPIDI_CH3_Pkt_t upkt;
MPIDI_CH3_Pkt_eager_send_t * const eager_pkt = &upkt.eager_send;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending zero length message");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending zero length message");
MPIDI_Pkt_init(eager_pkt, MPIDI_CH3_PKT_EAGER_SEND);
eager_pkt->match.parts.rank = comm->rank;
eager_pkt->match.parts.tag = tag;
@@ -174,22 +174,22 @@ int MPID_Send(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank,
fn_exit:
*request = sreq;
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,
{
if (mpi_errno == MPI_SUCCESS) {
if (sreq) {
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,
"request allocated, handle=0x%08x", sreq->handle);
}
else
{
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,
"operation complete, no requests allocated");
}
}
}
);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEND);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_ssend.c b/src/mpid/ch3/src/mpid_ssend.c
index cf3ba5f..7133f26 100644
--- a/src/mpid/ch3/src/mpid_ssend.c
+++ b/src/mpid/ch3/src/mpid_ssend.c
@@ -15,25 +15,25 @@
#define FUNCNAME MPID_Ssend
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Ssend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Ssend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
int dt_contig;
MPI_Aint dt_true_lb;
- MPID_Datatype * dt_ptr;
- MPID_Request * sreq = NULL;
+ MPIDU_Datatype * dt_ptr;
+ MPIR_Request * sreq = NULL;
MPIDI_VC_t * vc;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
#endif
int eager_threshold = -1;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SSEND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SSEND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SSEND);
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d",
rank, tag, comm->context_id + context_offset));
@@ -44,7 +44,7 @@ int MPID_Ssend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
MPIR_ERR_SETANDJUMP(mpi_errno,MPIX_ERR_REVOKED,"**revoked");
}
- if (rank == comm->rank && comm->comm_kind != MPID_INTERCOMM)
+ if (rank == comm->rank && comm->comm_kind != MPIR_COMM_KIND__INTERCOMM)
{
mpi_errno = MPIDI_Isend_self(buf, count, datatype, rank, tag, comm,
context_offset, MPIDI_REQUEST_TYPE_SSEND,
@@ -55,7 +55,7 @@ int MPID_Ssend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
# ifndef MPICH_IS_THREADED
{
/* --BEGIN ERROR HANDLING-- */
- if (sreq != NULL && MPID_cc_get(sreq->cc) != 0)
+ if (sreq != NULL && MPIR_cc_get(sreq->cc) != 0)
{
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
"**dev|selfsenddeadlock", 0);
@@ -120,10 +120,10 @@ int MPID_Ssend(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank
fn_exit:
*request = sreq;
- MPIU_DBG_STMT(CH3_OTHER,VERBOSE,{if (sreq!=NULL) {
- MPIU_DBG_MSG_P(CH3_OTHER,VERBOSE,
+ MPL_DBG_STMT(MPIDI_CH3_DBG_OTHER,VERBOSE,{if (sreq!=NULL) {
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_OTHER,VERBOSE,
"request allocated, handle=0x%08x", sreq->handle);}});
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SSEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SSEND);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_startall.c b/src/mpid/ch3/src/mpid_startall.c
index cbd1ca4..e4701b0 100644
--- a/src/mpid/ch3/src/mpid_startall.c
+++ b/src/mpid/ch3/src/mpid_startall.c
@@ -22,17 +22,17 @@
/* This macro initializes all of the fields in a persistent request */
#define MPIDI_Request_create_psreq(sreq_, mpi_errno_, FAIL_) \
{ \
- (sreq_) = MPID_Request_create(); \
+ (sreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED); \
if ((sreq_) == NULL) \
{ \
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"send request allocation failed");\
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"send request allocation failed");\
(mpi_errno_) = MPIR_ERR_MEMALLOCFAILED; \
FAIL_; \
} \
\
- MPIU_Object_set_ref((sreq_), 1); \
- MPID_cc_set(&(sreq_)->cc, 0); \
- (sreq_)->kind = MPID_PREQUEST_SEND; \
+ MPIR_Object_set_ref((sreq_), 1); \
+ MPIR_cc_set(&(sreq_)->cc, 0); \
+ (sreq_)->kind = MPIR_REQUEST_KIND__PREQUEST_SEND; \
(sreq_)->comm = comm; \
MPIR_Comm_add_ref(comm); \
(sreq_)->dev.match.parts.rank = rank; \
@@ -41,7 +41,7 @@
(sreq_)->dev.user_buf = (void *) buf; \
(sreq_)->dev.user_count = count; \
(sreq_)->dev.datatype = datatype; \
- (sreq_)->partner_request = NULL; \
+ (sreq_)->u.persist.real_request = NULL; \
}
@@ -52,18 +52,18 @@
#define FUNCNAME MPID_Startall
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Startall(int count, MPID_Request * requests[])
+int MPID_Startall(int count, MPIR_Request * requests[])
{
int i;
int rc;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_STARTALL);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_STARTALL);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_STARTALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_STARTALL);
for (i = 0; i < count; i++)
{
- MPID_Request * const preq = requests[i];
+ MPIR_Request * const preq = requests[i];
/* FIXME: The odd 7th arg (match.context_id - comm->context_id)
is probably to get the context offset. Do we really need the
@@ -74,7 +74,7 @@ int MPID_Startall(int count, MPID_Request * requests[])
{
rc = MPID_Irecv(preq->dev.user_buf, preq->dev.user_count, preq->dev.datatype, preq->dev.match.parts.rank,
preq->dev.match.parts.tag, preq->comm, preq->dev.match.parts.context_id - preq->comm->recvcontext_id,
- &preq->partner_request);
+ &preq->u.persist.real_request);
break;
}
@@ -82,7 +82,7 @@ int MPID_Startall(int count, MPID_Request * requests[])
{
rc = MPID_Isend(preq->dev.user_buf, preq->dev.user_count, preq->dev.datatype, preq->dev.match.parts.rank,
preq->dev.match.parts.tag, preq->comm, preq->dev.match.parts.context_id - preq->comm->context_id,
- &preq->partner_request);
+ &preq->u.persist.real_request);
break;
}
@@ -90,7 +90,7 @@ int MPID_Startall(int count, MPID_Request * requests[])
{
rc = MPID_Irsend(preq->dev.user_buf, preq->dev.user_count, preq->dev.datatype, preq->dev.match.parts.rank,
preq->dev.match.parts.tag, preq->comm, preq->dev.match.parts.context_id - preq->comm->context_id,
- &preq->partner_request);
+ &preq->u.persist.real_request);
break;
}
@@ -98,7 +98,7 @@ int MPID_Startall(int count, MPID_Request * requests[])
{
rc = MPID_Issend(preq->dev.user_buf, preq->dev.user_count, preq->dev.datatype, preq->dev.match.parts.rank,
preq->dev.match.parts.tag, preq->comm, preq->dev.match.parts.context_id - preq->comm->context_id,
- &preq->partner_request);
+ &preq->u.persist.real_request);
break;
}
@@ -112,7 +112,7 @@ int MPID_Startall(int count, MPID_Request * requests[])
&sreq_handle);
if (rc == MPI_SUCCESS)
{
- MPID_Request_get_ptr(sreq_handle, preq->partner_request);
+ MPIR_Request_get_ptr(sreq_handle, preq->u.persist.real_request);
}
break;
}
@@ -129,7 +129,7 @@ int MPID_Startall(int count, MPID_Request * requests[])
if (rc == MPI_SUCCESS)
{
preq->status.MPI_ERROR = MPI_SUCCESS;
- preq->cc_ptr = &preq->partner_request->cc;
+ preq->cc_ptr = &preq->u.persist.real_request->cc;
}
/* --BEGIN ERROR HANDLING-- */
else
@@ -139,15 +139,15 @@ int MPID_Startall(int count, MPID_Request * requests[])
the error code in the persistent request. The wait and test
routines will look at the error code in the persistent
request if a partner request is not present. */
- preq->partner_request = NULL;
+ preq->u.persist.real_request = NULL;
preq->status.MPI_ERROR = rc;
preq->cc_ptr = &preq->cc;
- MPID_cc_set(&preq->cc, 0);
+ MPIR_cc_set(&preq->cc, 0);
}
/* --END ERROR HANDLING-- */
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_STARTALL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_STARTALL);
return mpi_errno;
}
@@ -162,26 +162,26 @@ int MPID_Startall(int count, MPID_Request * requests[])
#define FUNCNAME MPID_Send_init
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Send_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Send_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEND_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEND_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEND_INIT);
MPIDI_Request_create_psreq(sreq, mpi_errno, goto fn_exit);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SEND);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
*request = sreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEND_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEND_INIT);
return mpi_errno;
}
@@ -192,26 +192,26 @@ int MPID_Send_init(const void * buf, int count, MPI_Datatype datatype, int rank,
#define FUNCNAME MPID_Ssend_init
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Ssend_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Ssend_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SSEND_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SSEND_INIT);
MPIDI_Request_create_psreq(sreq, mpi_errno, goto fn_exit);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_SSEND);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
*request = sreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SSEND_INIT);
return mpi_errno;
}
@@ -222,26 +222,26 @@ int MPID_Ssend_init(const void * buf, int count, MPI_Datatype datatype, int rank
#define FUNCNAME MPID_Rsend_init
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Rsend_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Rsend_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RSEND_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RSEND_INIT);
MPIDI_Request_create_psreq(sreq, mpi_errno, goto fn_exit);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_RSEND);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
*request = sreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RSEND_INIT);
return mpi_errno;
}
@@ -252,26 +252,26 @@ int MPID_Rsend_init(const void * buf, int count, MPI_Datatype datatype, int rank
#define FUNCNAME MPID_Bsend_init
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Bsend_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Bsend_init(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPID_Request * sreq;
+ MPIR_Request * sreq;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_BSEND_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_BSEND_INIT);
MPIDI_Request_create_psreq(sreq, mpi_errno, goto fn_exit);
MPIDI_Request_set_type(sreq, MPIDI_REQUEST_TYPE_BSEND);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
*request = sreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_BSEND_INIT);
return mpi_errno;
}
@@ -290,16 +290,16 @@ int MPID_Bsend_init(const void * buf, int count, MPI_Datatype datatype, int rank
#define FUNCNAME MPID_Recv_init
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Recv_init(void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- MPID_Request ** request)
+int MPID_Recv_init(void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
{
- MPID_Request * rreq;
+ MPIR_Request * rreq;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPID_RECV_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_RECV_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_RECV_INIT);
- rreq = MPID_Request_create();
+ rreq = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
if (rreq == NULL)
{
/* --BEGIN ERROR HANDLING-- */
@@ -308,10 +308,10 @@ int MPID_Recv_init(void * buf, int count, MPI_Datatype datatype, int rank, int t
goto fn_exit;
}
- MPIU_Object_set_ref(rreq, 1);
- rreq->kind = MPID_PREQUEST_RECV;
+ MPIR_Object_set_ref(rreq, 1);
+ rreq->kind = MPIR_REQUEST_KIND__PREQUEST_RECV;
rreq->comm = comm;
- MPID_cc_set(&rreq->cc, 0);
+ MPIR_cc_set(&rreq->cc, 0);
MPIR_Comm_add_ref(comm);
rreq->dev.match.parts.rank = rank;
rreq->dev.match.parts.tag = tag;
@@ -319,16 +319,16 @@ int MPID_Recv_init(void * buf, int count, MPI_Datatype datatype, int rank, int t
rreq->dev.user_buf = (void *) buf;
rreq->dev.user_count = count;
rreq->dev.datatype = datatype;
- rreq->partner_request = NULL;
+ rreq->u.persist.real_request = NULL;
MPIDI_Request_set_type(rreq, MPIDI_REQUEST_TYPE_RECV);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(rreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, rreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(rreq->dev.datatype_ptr);
}
*request = rreq;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_RECV_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_RECV_INIT);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/mpid_vc.c b/src/mpid/ch3/src/mpid_vc.c
index 8a616e1..100cc0f 100644
--- a/src/mpid/ch3/src/mpid_vc.c
+++ b/src/mpid/ch3/src/mpid_vc.c
@@ -22,36 +22,11 @@
#endif
#include <ctype.h>
+#include "build_nodemap.h"
/*
=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
cvars:
- - name : MPIR_CVAR_CH3_NOLOCAL
- category : CH3
- alt-env : MPIR_CVAR_CH3_NO_LOCAL
- type : boolean
- default : false
- class : none
- verbosity : MPI_T_VERBOSITY_USER_BASIC
- scope : MPI_T_SCOPE_ALL_EQ
- description : >-
- If true, force all processes to operate as though all processes
- are located on another node. For example, this disables shared
- memory communication hierarchical collectives.
-
- - name : MPIR_CVAR_CH3_ODD_EVEN_CLIQUES
- category : CH3
- alt-env : MPIR_CVAR_CH3_EVEN_ODD_CLIQUES
- type : boolean
- default : false
- class : none
- verbosity : MPI_T_VERBOSITY_USER_BASIC
- scope : MPI_T_SCOPE_ALL_EQ
- description : >-
- If true, odd procs on a node are seen as local to each other, and even
- procs on a node are seen as local to each other. Used for debugging on
- a single machine.
-
- name : MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE
category : CH3
type : int
@@ -94,24 +69,24 @@ int MPIDI_VCRT_Create(int size, struct MPIDI_VCRT **vcrt_ptr)
{
MPIDI_VCRT_t * vcrt;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_VCRT_CREATE);
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_VCRT_CREATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_VCRT_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_VCRT_CREATE);
- MPIU_CHKPMEM_MALLOC(vcrt, MPIDI_VCRT_t *, sizeof(MPIDI_VCRT_t) + (size - 1) * sizeof(MPIDI_VC_t *), mpi_errno, "**nomem");
+ MPIR_CHKPMEM_MALLOC(vcrt, MPIDI_VCRT_t *, sizeof(MPIDI_VCRT_t) + (size - 1) * sizeof(MPIDI_VC_t *), mpi_errno, "**nomem");
vcrt->handle = HANDLE_SET_KIND(0, HANDLE_KIND_INVALID);
- MPIU_Object_set_ref(vcrt, 1);
+ MPIR_Object_set_ref(vcrt, 1);
vcrt->size = size;
*vcrt_ptr = vcrt;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_VCRT_CREATE);
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_VCRT_CREATE);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -131,12 +106,12 @@ int MPIDI_VCRT_Create(int size, struct MPIDI_VCRT **vcrt_ptr)
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_VCRT_Add_ref(struct MPIDI_VCRT *vcrt)
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_VCRT_ADD_REF);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_VCRT_ADD_REF);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_VCRT_ADD_REF);
- MPIU_Object_add_ref(vcrt);
- MPIU_DBG_MSG_FMT(REFCOUNT,TYPICAL,(MPIU_DBG_FDEST, "Incr VCRT %p ref count",vcrt));
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_VCRT_ADD_REF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_VCRT_ADD_REF);
+ MPIR_Object_add_ref(vcrt);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_REFCOUNT,TYPICAL,(MPL_DBG_FDEST, "Incr VCRT %p ref count",vcrt));
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_VCRT_ADD_REF);
return MPI_SUCCESS;
}
@@ -156,12 +131,12 @@ int MPIDI_VCRT_Release(struct MPIDI_VCRT *vcrt, int isDisconnect )
{
int in_use;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_VCRT_RELEASE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_VCRT_RELEASE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_VCRT_RELEASE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_VCRT_RELEASE);
- MPIU_Object_release_ref(vcrt, &in_use);
- MPIU_DBG_MSG_FMT(REFCOUNT,TYPICAL,(MPIU_DBG_FDEST, "Decr VCRT %p ref count",vcrt));
+ MPIR_Object_release_ref(vcrt, &in_use);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_REFCOUNT,TYPICAL,(MPL_DBG_FDEST, "Decr VCRT %p ref count",vcrt));
/* If this VC reference table is no longer in use, we can
decrement the reference count of each of the VCs. If the
@@ -184,17 +159,17 @@ int MPIDI_VCRT_Release(struct MPIDI_VCRT *vcrt, int isDisconnect )
/* probably not, need to do something like the following instead: */
#if 0
if (isDisconnect) {
- MPIU_Assert(in_use);
+ MPIR_Assert(in_use);
/* FIXME this is still bogus, the VCRT may contain a mix of
* dynamic and non-dynamic VCs, so the ref_count isn't
* guaranteed to have started at 2. The best thing to do might
* be to avoid overloading the reference counting this way and
* use a separate check for dynamic VCs (another flag? compare
* PGs?) */
- MPIU_Object_release_ref(vc, &in_use);
+ MPIR_Object_release_ref(vc, &in_use);
}
#endif
- if (isDisconnect && MPIU_Object_get_ref(vc) == 1) {
+ if (isDisconnect && MPIR_Object_get_ref(vc) == 1) {
MPIDI_VC_release_ref(vc, &in_use);
}
@@ -227,7 +202,7 @@ int MPIDI_VCRT_Release(struct MPIDI_VCRT *vcrt, int isDisconnect )
MPIDI_PG_Destroy(vc->pg);
}
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"vc=%p: not sending a close to %d, vc in state %s",
vc, i, MPIDI_VC_GetStateString(vc->state)));
}
@@ -240,11 +215,11 @@ int MPIDI_VCRT_Release(struct MPIDI_VCRT *vcrt, int isDisconnect )
}
}
- MPIU_Free(vcrt);
+ MPL_free(vcrt);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_VCRT_RELEASE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_VCRT_RELEASE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -270,16 +245,16 @@ int MPIDI_VCRT_Release(struct MPIDI_VCRT *vcrt, int isDisconnect )
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_VCR_Dup(MPIDI_VCR orig_vcr, MPIDI_VCR * new_vcr)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_VCR_DUP);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_VCR_DUP);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_VCR_DUP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_VCR_DUP);
/* We are allowed to create a vc that belongs to no process group
as part of the initial connect/accept action, so in that case,
ignore the pg ref count update */
/* XXX DJG FIXME-MT should we be checking this? */
/* we probably need a test-and-incr operation or equivalent to avoid races */
- if (MPIU_Object_get_ref(orig_vcr) == 0 && orig_vcr->pg) {
+ if (MPIR_Object_get_ref(orig_vcr) == 0 && orig_vcr->pg) {
MPIDI_VC_add_ref( orig_vcr );
MPIDI_VC_add_ref( orig_vcr );
MPIDI_PG_add_ref( orig_vcr->pg );
@@ -287,9 +262,9 @@ int MPIDI_VCR_Dup(MPIDI_VCR orig_vcr, MPIDI_VCR * new_vcr)
else {
MPIDI_VC_add_ref(orig_vcr);
}
- MPIU_DBG_MSG_FMT(REFCOUNT,TYPICAL,(MPIU_DBG_FDEST,"Incr VCR %p ref count",orig_vcr));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_REFCOUNT,TYPICAL,(MPL_DBG_FDEST,"Incr VCR %p ref count",orig_vcr));
*new_vcr = orig_vcr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_VCR_DUP);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_VCR_DUP);
return MPI_SUCCESS;
}
@@ -300,20 +275,20 @@ int MPIDI_VCR_Dup(MPIDI_VCR orig_vcr, MPIDI_VCR * new_vcr)
#define FUNCNAME MPID_Comm_get_lpid
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Comm_get_lpid(MPID_Comm *comm_ptr, int idx, int * lpid_ptr, MPIU_BOOL is_remote)
+int MPID_Comm_get_lpid(MPIR_Comm *comm_ptr, int idx, int * lpid_ptr, MPL_bool is_remote)
{
- MPIDI_STATE_DECL(MPID_STATE_MPID_VCR_GET_LPID);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_VCR_GET_LPID);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_VCR_GET_LPID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_VCR_GET_LPID);
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
*lpid_ptr = comm_ptr->dev.vcrt->vcr_table[idx]->lpid;
else if (is_remote)
*lpid_ptr = comm_ptr->dev.vcrt->vcr_table[idx]->lpid;
else
*lpid_ptr = comm_ptr->dev.local_vcrt->vcr_table[idx]->lpid;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_VCR_GET_LPID);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_VCR_GET_LPID);
return MPI_SUCCESS;
}
@@ -324,22 +299,22 @@ int MPID_Comm_get_lpid(MPID_Comm *comm_ptr, int idx, int * lpid_ptr, MPIU_BOOL i
/* FIXME: These routines belong in a different place */
#undef FUNCNAME
-#define FUNCNAME MPID_GPID_GetAllInComm
+#define FUNCNAME MPIDI_GPID_GetAllInComm
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_GPID_GetAllInComm( MPID_Comm *comm_ptr, int local_size,
- MPID_Gpid local_gpids[], int *singlePG )
+int MPIDI_GPID_GetAllInComm( MPIR_Comm *comm_ptr, int local_size,
+ MPIDI_Gpid local_gpids[], int *singlePG )
{
int mpi_errno = MPI_SUCCESS;
int i;
int *gpid = (int*)&local_gpids[0];
int lastPGID = -1, pgid;
MPIDI_VCR vc;
- MPIDI_STATE_DECL(MPID_STATE_MPID_GPID_GETALLINCOMM);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_GPID_GETALLINCOMM);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_GPID_GETALLINCOMM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_GPID_GETALLINCOMM);
- MPIU_Assert(comm_ptr->local_size == local_size);
+ MPIR_Assert(comm_ptr->local_size == local_size);
*singlePG = 1;
for (i=0; i<comm_ptr->local_size; i++) {
@@ -356,20 +331,20 @@ int MPID_GPID_GetAllInComm( MPID_Comm *comm_ptr, int local_size,
}
*gpid++ = vc->pg_rank;
- MPIU_DBG_MSG_FMT(COMM,VERBOSE, (MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE, (MPL_DBG_FDEST,
"pgid=%d vc->pg_rank=%d",
pgid, vc->pg_rank));
}
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_GPID_GETALLINCOMM);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_GPID_GETALLINCOMM);
return mpi_errno;
}
#undef FUNCNAME
-#define FUNCNAME MPID_GPID_Get
+#define FUNCNAME MPIDI_GPID_Get
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_GPID_Get( MPID_Comm *comm_ptr, int rank, MPID_Gpid *in_gpid )
+int MPIDI_GPID_Get( MPIR_Comm *comm_ptr, int rank, MPIDI_Gpid *in_gpid )
{
int pgid;
MPIDI_VCR vc;
@@ -391,10 +366,10 @@ int MPID_GPID_Get( MPID_Comm *comm_ptr, int rank, MPID_Gpid *in_gpid )
* have information on the process groups.
*/
#undef FUNCNAME
-#define FUNCNAME MPID_GPID_ToLpidArray
+#define FUNCNAME MPIDI_GPID_ToLpidArray
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_GPID_ToLpidArray( int size, MPID_Gpid in_gpid[], int lpid[] )
+int MPIDI_GPID_ToLpidArray( int size, MPIDI_Gpid in_gpid[], int lpid[] )
{
int i, mpi_errno = MPI_SUCCESS;
int pgid;
@@ -449,6 +424,252 @@ int MPID_GPID_ToLpidArray( int size, MPID_Gpid in_gpid[], int lpid[] )
return mpi_errno;
}
+#undef FUNCNAME
+#define FUNCNAME MPIDI_LPID_GetAllInComm
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_LPID_GetAllInComm(MPIR_Comm *comm_ptr, int local_size,
+ int local_lpids[])
+{
+ int i;
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Assert( comm_ptr->local_size == local_size );
+ for (i=0; i<comm_ptr->local_size; i++) {
+ mpi_errno |= MPID_Comm_get_lpid( comm_ptr, i, &local_lpids[i], FALSE );
+ }
+ return mpi_errno;
+}
+
+#ifdef HAVE_ERROR_CHECKING
+#define N_STATIC_LPID32 128
+/*@
+ MPIDI_CheckDisjointLpids - Exchange address mapping for intercomm creation.
+ @*/
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CheckDisjointLpids
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_CheckDisjointLpids(int lpids1[], int n1, int lpids2[], int n2)
+{
+ int i, mask_size, idx, bit, maxlpid = -1;
+ int mpi_errno = MPI_SUCCESS;
+ uint32_t lpidmaskPrealloc[N_STATIC_LPID32];
+ uint32_t *lpidmask;
+ MPIR_CHKLMEM_DECL(1);
+
+ /* Find the max lpid */
+ for (i=0; i<n1; i++) {
+ if (lpids1[i] > maxlpid) maxlpid = lpids1[i];
+ }
+ for (i=0; i<n2; i++) {
+ if (lpids2[i] > maxlpid) maxlpid = lpids2[i];
+ }
+
+ mask_size = (maxlpid / 32) + 1;
+
+ if (mask_size > N_STATIC_LPID32) {
+ MPIR_CHKLMEM_MALLOC(lpidmask,uint32_t*,mask_size*sizeof(uint32_t),
+ mpi_errno,"lpidmask");
+ }
+ else {
+ lpidmask = lpidmaskPrealloc;
+ }
+
+ /* zero the bitvector array */
+ memset(lpidmask, 0x00, mask_size*sizeof(*lpidmask));
+
+ /* Set the bits for the first array */
+ for (i=0; i<n1; i++) {
+ idx = lpids1[i] / 32;
+ bit = lpids1[i] % 32;
+ lpidmask[idx] = lpidmask[idx] | (1 << bit);
+ MPIR_Assert(idx < mask_size);
+ }
+
+ /* Look for any duplicates in the second array */
+ for (i=0; i<n2; i++) {
+ idx = lpids2[i] / 32;
+ bit = lpids2[i] % 32;
+ if (lpidmask[idx] & (1 << bit)) {
+ MPIR_ERR_SET1(mpi_errno,MPI_ERR_COMM,
+ "**dupprocesses", "**dupprocesses %d", lpids2[i] );
+ goto fn_fail;
+ }
+ /* Add a check on duplicates *within* group 2 */
+ lpidmask[idx] = lpidmask[idx] | (1 << bit);
+ MPIR_Assert(idx < mask_size);
+ }
+
+ /* Also fall through for normal return */
+ fn_fail:
+ MPIR_CHKLMEM_FREEALL();
+ return mpi_errno;
+}
+#endif /* HAVE_ERROR_CHECKING */
+
+/*@
+ MPID_Intercomm_exchange_map - Exchange address mapping for intercomm creation.
+ @*/
+#undef FUNCNAME
+#define FUNCNAME MPID_Intercomm_exchange_map
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPID_Intercomm_exchange_map(MPIR_Comm *local_comm_ptr, int local_leader,
+ MPIR_Comm *peer_comm_ptr, int remote_leader,
+ int *remote_size, int **remote_lpids,
+ int *is_low_group)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int singlePG;
+ int local_size,*local_lpids=0;
+ MPIDI_Gpid *local_gpids=NULL, *remote_gpids=NULL;
+ int comm_info[2];
+ int cts_tag;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_CHKLMEM_DECL(3);
+
+ cts_tag = 0 | MPIR_Process.tagged_coll_mask;
+
+ if (local_comm_ptr->rank == local_leader) {
+
+ /* First, exchange the group information. If we were certain
+ that the groups were disjoint, we could exchange possible
+ context ids at the same time, saving one communication.
+ But experience has shown that that is a risky assumption.
+ */
+ /* Exchange information with my peer. Use sendrecv */
+ local_size = local_comm_ptr->local_size;
+
+ /* printf( "About to sendrecv in intercomm_create\n" );fflush(stdout);*/
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,"rank %d sendrecv to rank %d", peer_comm_ptr->rank,
+ remote_leader));
+ mpi_errno = MPIC_Sendrecv( &local_size, 1, MPI_INT,
+ remote_leader, cts_tag,
+ remote_size, 1, MPI_INT,
+ remote_leader, cts_tag,
+ peer_comm_ptr, MPI_STATUS_IGNORE, &errflag );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST, "local size = %d, remote size = %d", local_size,
+ *remote_size ));
+ /* With this information, we can now send and receive the
+ global process ids from the peer. */
+ MPIR_CHKLMEM_MALLOC(remote_gpids,MPIDI_Gpid*,(*remote_size)*sizeof(MPIDI_Gpid), mpi_errno,"remote_gpids");
+ *remote_lpids = (int*) MPL_malloc((*remote_size)*sizeof(int));
+ MPIR_CHKLMEM_MALLOC(local_gpids,MPIDI_Gpid*,local_size*sizeof(MPIDI_Gpid), mpi_errno,"local_gpids");
+ MPIR_CHKLMEM_MALLOC(local_lpids,int*,local_size*sizeof(int), mpi_errno,"local_lpids");
+
+ mpi_errno = MPIDI_GPID_GetAllInComm( local_comm_ptr, local_size, local_gpids, &singlePG );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* Exchange the lpid arrays */
+ mpi_errno = MPIC_Sendrecv( local_gpids, local_size*sizeof(MPIDI_Gpid), MPI_BYTE,
+ remote_leader, cts_tag,
+ remote_gpids, (*remote_size)*sizeof(MPIDI_Gpid), MPI_BYTE,
+ remote_leader, cts_tag, peer_comm_ptr,
+ MPI_STATUS_IGNORE, &errflag );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+
+ /* Convert the remote gpids to the lpids */
+ mpi_errno = MPIDI_GPID_ToLpidArray( *remote_size, remote_gpids, *remote_lpids );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* Get our own lpids */
+ mpi_errno = MPIDI_LPID_GetAllInComm( local_comm_ptr, local_size, local_lpids );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+# ifdef HAVE_ERROR_CHECKING
+ {
+ MPID_BEGIN_ERROR_CHECKS;
+ {
+ /* Now that we have both the local and remote processes,
+ check for any overlap */
+ mpi_errno = MPIDI_CheckDisjointLpids( local_lpids, local_size, *remote_lpids, *remote_size );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
+ MPID_END_ERROR_CHECKS;
+ }
+# endif /* HAVE_ERROR_CHECKING */
+
+ /* Make an arbitrary decision about which group of processs is
+ the low group. The LEADERS do this by comparing the
+ local process ids of the 0th member of the two groups */
+ (*is_low_group) = local_lpids[0] < (*remote_lpids)[0];
+
+ /* At this point, we're done with the local lpids; they'll
+ be freed with the other local memory on exit */
+
+ } /* End of the first phase of the leader communication */
+ /* Leaders can now swap context ids and then broadcast the value
+ to the local group of processes */
+ if (local_comm_ptr->rank == local_leader) {
+ /* Now, send all of our local processes the remote_lpids,
+ along with the final context id */
+ comm_info[0] = *remote_size;
+ comm_info[1] = *is_low_group;
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"About to bcast on local_comm");
+ mpi_errno = MPID_Bcast( comm_info, 2, MPI_INT, local_leader, local_comm_ptr, &errflag );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
+ mpi_errno = MPID_Bcast( remote_gpids, (*remote_size)*sizeof(MPIDI_Gpid), MPI_BYTE, local_leader,
+ local_comm_ptr, &errflag );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,VERBOSE,"end of bcast on local_comm of size %d",
+ local_comm_ptr->local_size );
+ }
+ else
+ {
+ /* we're the other processes */
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"About to receive bcast on local_comm");
+ mpi_errno = MPID_Bcast( comm_info, 2, MPI_INT, local_leader, local_comm_ptr, &errflag );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
+ *remote_size = comm_info[0];
+ MPIR_CHKLMEM_MALLOC(remote_gpids,MPIDI_Gpid*,(*remote_size)*sizeof(MPIDI_Gpid), mpi_errno,"remote_gpids");
+ *remote_lpids = (int*) MPL_malloc((*remote_size)*sizeof(int));
+ mpi_errno = MPID_Bcast( remote_gpids, (*remote_size)*sizeof(MPIDI_Gpid), MPI_BYTE, local_leader,
+ local_comm_ptr, &errflag );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
+
+ /* Extract the context and group sign informatin */
+ *is_low_group = comm_info[1];
+ }
+
+ /* Finish up by giving the device the opportunity to update
+ any other infomration among these processes. Note that the
+ new intercomm has not been set up; in fact, we haven't yet
+ attempted to set up the connection tables.
+
+ In the case of the ch3 device, this calls MPID_PG_ForwardPGInfo
+ to ensure that all processes have the information about all
+ process groups. This must be done before the call
+ to MPID_GPID_ToLpidArray, as that call needs to know about
+ all of the process groups.
+ */
+ MPIDI_PG_ForwardPGInfo( peer_comm_ptr, local_comm_ptr,
+ *remote_size, (const MPIDI_Gpid*)remote_gpids, local_leader );
+
+
+ /* Finally, if we are not the local leader, we need to
+ convert the remote gpids to local pids. This must be done
+ after we allow the device to handle any steps that it needs to
+ take to ensure that all processes contain the necessary process
+ group information */
+ if (local_comm_ptr->rank != local_leader) {
+ mpi_errno = MPIDI_GPID_ToLpidArray( *remote_size, remote_gpids, *remote_lpids );
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
+
+fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
/*@
MPID_Create_intercomm_from_lpids - Create a new communicator from a given set
of lpids.
@@ -462,11 +683,11 @@ int MPID_GPID_ToLpidArray( int size, MPID_Gpid in_gpid[], int lpid[] )
#define FUNCNAME MPID_Create_intercomm_from_lpids
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Create_intercomm_from_lpids( MPID_Comm *newcomm_ptr,
+int MPID_Create_intercomm_from_lpids( MPIR_Comm *newcomm_ptr,
int size, const int lpids[] )
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm *commworld_ptr;
+ MPIR_Comm *commworld_ptr;
int i;
MPIDI_PG_iterator iter;
@@ -542,11 +763,11 @@ fn_fail:
contacting any process in the process groups).
*/
#undef FUNCNAME
-#define FUNCNAME MPID_PG_ForwardPGInfo
+#define FUNCNAME MPIDI_PG_ForwardPGInfo
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_PG_ForwardPGInfo( MPID_Comm *peer_ptr, MPID_Comm *comm_ptr,
- int nPGids, const MPID_Gpid in_gpids[],
+int MPIDI_PG_ForwardPGInfo( MPIR_Comm *peer_ptr, MPIR_Comm *comm_ptr,
+ int nPGids, const MPIDI_Gpid in_gpids[],
int root )
{
int mpi_errno = MPI_SUCCESS;
@@ -620,8 +841,8 @@ static int lpid_counter = 0;
int MPIDI_VC_Init( MPIDI_VC_t *vc, MPIDI_PG_t *pg, int rank )
{
vc->state = MPIDI_VC_STATE_INACTIVE;
- vc->handle = HANDLE_SET_MPI_KIND(0, MPID_VCONN);
- MPIU_Object_set_ref(vc, 0);
+ vc->handle = HANDLE_SET_MPI_KIND(0, MPIR_VCONN);
+ MPIR_Object_set_ref(vc, 0);
vc->pg = pg;
vc->pg_rank = rank;
vc->lpid = lpid_counter++;
@@ -639,11 +860,11 @@ int MPIDI_VC_Init( MPIDI_VC_t *vc, MPIDI_PG_t *pg, int rank )
#endif
/* FIXME: We need a better abstraction for initializing the thread state
for an object */
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
{
int err;
MPID_Thread_mutex_create(&vc->pobj_mutex,&err);
- MPIU_Assert(err == 0);
+ MPIR_Assert(err == 0);
}
#endif /* MPICH_THREAD_GRANULARITY */
MPIDI_CH3_VC_Init(vc);
@@ -663,7 +884,7 @@ char MPIU_hostname[MAX_HOSTNAME_LEN] = "_UNKNOWN_"; /* '_' is an illegal char fo
#define FUNCNAME MPID_Get_node_id
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Get_node_id(MPID_Comm *comm, int rank, MPID_Node_id_t *id_p)
+int MPID_Get_node_id(MPIR_Comm *comm, int rank, MPID_Node_id_t *id_p)
{
*id_p = comm->dev.vcrt->vcr_table[rank]->node_id;
return MPI_SUCCESS;
@@ -675,341 +896,14 @@ int MPID_Get_node_id(MPID_Comm *comm, int rank, MPID_Node_id_t *id_p)
#define FCNAME MPL_QUOTE(FUNCNAME)
/* Providing a comm argument permits optimization, but this function is always
allowed to return the max for the universe. */
-int MPID_Get_max_node_id(MPID_Comm *comm, MPID_Node_id_t *max_id_p)
+int MPID_Get_max_node_id(MPIR_Comm *comm, MPID_Node_id_t *max_id_p)
{
/* easiest way to implement this is to track it at PG create/destroy time */
*max_id_p = g_max_node_id;
- MPIU_Assert(*max_id_p >= 0);
+ MPIR_Assert(*max_id_p >= 0);
return MPI_SUCCESS;
}
-#if !defined(USE_PMI2_API)
-/* this function is not used in pmi2 */
-static int publish_node_id(MPIDI_PG_t *pg, int our_pg_rank)
-{
- int mpi_errno = MPI_SUCCESS;
- int pmi_errno;
- int ret;
- char *key;
- int key_max_sz;
- char *kvs_name;
- MPIU_CHKLMEM_DECL(1);
-
- /* set MPIU_hostname */
- ret = gethostname(MPIU_hostname, MAX_HOSTNAME_LEN);
- MPIR_ERR_CHKANDJUMP2(ret == -1, mpi_errno, MPI_ERR_OTHER, "**sock_gethost", "**sock_gethost %s %d", MPIU_Strerror(errno), errno);
- MPIU_hostname[MAX_HOSTNAME_LEN-1] = '\0';
-
- /* Allocate space for pmi key */
- pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
- MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
-
- MPIU_CHKLMEM_MALLOC(key, char *, key_max_sz, mpi_errno, "key");
-
- mpi_errno = MPIDI_PG_GetConnKVSname(&kvs_name);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* Put my hostname id */
- if (pg->size > 1)
- {
- memset(key, 0, key_max_sz);
- MPL_snprintf(key, key_max_sz, "hostname[%d]", our_pg_rank);
-
- pmi_errno = PMI_KVS_Put(kvs_name, key, MPIU_hostname);
- MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_put", "**pmi_kvs_put %d", pmi_errno);
-
- pmi_errno = PMI_KVS_Commit(kvs_name);
- MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_commit", "**pmi_kvs_commit %d", pmi_errno);
-
- pmi_errno = PMI_Barrier();
- MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
- }
-
-fn_exit:
- MPIU_CHKLMEM_FREEALL();
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-#endif
-
-
-#define parse_error() MPIR_ERR_INTERNALANDJUMP(mpi_errno, "parse error")
-/* advance _c until we find a non whitespace character */
-#define skip_space(_c) while (isspace(*(_c))) ++(_c)
-/* return true iff _c points to a character valid as an indentifier, i.e., [-_a-zA-Z0-9] */
-#define isident(_c) (isalnum(_c) || (_c) == '-' || (_c) == '_')
-
-/* give an error iff *_c != _e */
-#define expect_c(_c, _e) do { if (*(_c) != _e) parse_error(); } while (0)
-#define expect_and_skip_c(_c, _e) do { expect_c(_c, _e); ++c; } while (0)
-/* give an error iff the first |_m| characters of the string _s are equal to _e */
-#define expect_s(_s, _e) (strncmp(_s, _e, strlen(_e)) == 0 && !isident((_s)[strlen(_e)]))
-
-typedef enum {
- UNKNOWN_MAPPING = -1,
- NULL_MAPPING = 0,
- VECTOR_MAPPING
-} mapping_type_t;
-
-#define VECTOR "vector"
-
-typedef struct map_block
-{
- int start_id;
- int count;
- int size;
-} map_block_t;
-
-#undef FUNCNAME
-#define FUNCNAME parse_mapping
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int parse_mapping(char *map_str, mapping_type_t *type, map_block_t **map, int *nblocks)
-{
- int mpi_errno = MPI_SUCCESS;
- char *c = map_str, *d;
- int num_blocks = 0;
- int i;
- MPIU_CHKPMEM_DECL(1);
- MPIDI_STATE_DECL(MPID_STATE_PARSE_MAPPING);
-
- MPIDI_FUNC_ENTER(MPID_STATE_PARSE_MAPPING);
-
- /* parse string of the form:
- '(' <format> ',' '(' <num> ',' <num> ',' <num> ')' {',' '(' <num> ',' <num> ',' <num> ')'} ')'
-
- the values of each 3-tuple have the following meaning (X,Y,Z):
- X - node id start value
- Y - number of nodes with size Z
- Z - number of processes assigned to each node
- */
- MPIU_DBG_MSG_S(CH3_OTHER,VERBOSE,"parsing mapping string '%s'", map_str);
-
- if (!strlen(map_str)) {
- /* An empty-string indicates an inability to determine or express the
- * process layout on the part of the process manager. Consider this a
- * non-fatal error case. */
- *type = NULL_MAPPING;
- *map = NULL;
- *nblocks = 0;
- goto fn_exit;
- }
-
- skip_space(c);
- expect_and_skip_c(c, '(');
- skip_space(c);
-
- d = c;
- if (expect_s(d, VECTOR))
- *type = VECTOR_MAPPING;
- else
- parse_error();
- c += strlen(VECTOR);
- skip_space(c);
-
- /* first count the number of block descriptors */
- d = c;
- while (*d) {
- if (*d == '(')
- ++num_blocks;
- ++d;
- }
-
- MPIU_CHKPMEM_MALLOC(*map, map_block_t *, sizeof(map_block_t) * num_blocks, mpi_errno, "map");
-
- /* parse block descriptors */
- for (i = 0; i < num_blocks; ++i) {
- expect_and_skip_c(c, ',');
- skip_space(c);
-
- expect_and_skip_c(c, '(');
- skip_space(c);
-
- if (!isdigit(*c))
- parse_error();
- (*map)[i].start_id = (int)strtol(c, &c, 0);
- skip_space(c);
-
- expect_and_skip_c(c, ',');
- skip_space(c);
-
- if (!isdigit(*c))
- parse_error();
- (*map)[i].count = (int)strtol(c, &c, 0);
- skip_space(c);
-
- expect_and_skip_c(c, ',');
- skip_space(c);
-
- if (!isdigit(*c))
- parse_error();
- (*map)[i].size = (int)strtol(c, &c, 0);
-
- expect_and_skip_c(c, ')');
- skip_space(c);
- }
-
- expect_and_skip_c(c, ')');
-
- *nblocks = num_blocks;
- MPIU_CHKPMEM_COMMIT();
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_PARSE_MAPPING);
- return mpi_errno;
-fn_fail:
- /* --BEGIN ERROR HANDLING-- */
- MPIU_CHKPMEM_REAP();
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-#if 0
-static void t(const char *s, int nprocs)
-{
- int ret;
- map_block_t *mb;
- int nblocks=0;
- int i;
- mapping_type_t mt = UNKNOWN_MAPPING;
- int rank;
- int block, block_node, node_proc;
-
- ret = parse_mapping(strdup(s), &mt, &mb, &nblocks);
- printf("str=\"%s\" type=%d ret=%d\n", s, mt, ret);
- if (ret) return;
- for (i = 0; i < nblocks; ++i)
- printf(" %d: start=%d size=%d count=%d\n", i, mb[i].start_id, mb[i].size, mb[i].count);
- printf("\n");
-
-
- rank = 0;
- while (rank < nprocs) {
- int node_id;
- for (block = 0; block < nblocks; ++block) {
- node_id = mb[block].start_id;
- for (block_node = 0; block_node < mb[block].count; ++block_node) {
- for (node_proc = 0; node_proc < mb[block].size; ++node_proc) {
- printf(" %d %d\n", rank, node_id);
- ++rank;
- if (rank == nprocs)
- goto done;
- }
- ++node_id;
- }
- }
- }
-done:
- return;
-
-}
-
-
- void test_parse_mapping(void)
-{
- t("(vector, (0,1,1))", 5);
- t("(vector, (0,1,1), (1,5,3), (6,2, 5))", 100);
- t("(vector, (1,1,1), (0,2,2))", 5);
-
- t("(vector, (1,1,1), (0,2,2),)", 5);
- t("XXX, (1,1))", 1);
- t("vector, (1,1))", 1);
- t("(vector, (1.11, 2,2))", 1);
- t("", 1);
-
-}
-
-
-#endif
-
-#undef FUNCNAME
-#define FUNCNAME populate_ids_from_mapping
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int populate_ids_from_mapping(char *mapping, MPID_Node_id_t *max_node_id, MPIDI_PG_t *pg, int *did_map)
-{
- int mpi_errno = MPI_SUCCESS;
- /* PMI_process_mapping is available */
- mapping_type_t mt = UNKNOWN_MAPPING;
- map_block_t *mb = NULL;
- int nblocks = 0;
- int rank;
- int block, block_node, node_proc;
- int *tmp_rank_list, i;
- int found_wrap;
-
- *did_map = 1; /* reset upon failure */
-
- mpi_errno = parse_mapping(mapping, &mt, &mb, &nblocks);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- if (NULL_MAPPING == mt) goto fn_fail;
- MPIR_ERR_CHKINTERNAL(mt != VECTOR_MAPPING, mpi_errno, "unsupported mapping type");
-
- /* allocate nodes to ranks */
- found_wrap = 0;
- for (rank = 0;;) {
- /* FIXME: The patch is hacky because it assumes that seeing a
- * start node ID of 0 means a wrap around. This is not
- * necessarily true. A user-defined node list can, in theory,
- * use the node ID 0 without actually creating a wrap around.
- * The reason this patch still works in this case is because
- * Hydra creates a new node list starting from node ID 0 for
- * user-specified nodes during MPI_Comm_spawn{_multiple}. If
- * a different process manager searches for allocated nodes in
- * the user-specified list, this patch will break. */
-
- /* If we found that the blocks wrap around, repeat loops
- * should only start at node id 0 */
- for (block = 0; found_wrap && mb[block].start_id; block++);
-
- for (; block < nblocks; block++) {
- if (mb[block].start_id == 0)
- found_wrap = 1;
- for (block_node = 0; block_node < mb[block].count; block_node++) {
- for (node_proc = 0; node_proc < mb[block].size; node_proc++) {
- pg->vct[rank].node_id = mb[block].start_id + block_node;
- if (++rank == pg->size)
- goto break_out;
- }
- }
- }
- }
-
- break_out:
- /* identify maximum node id */
- *max_node_id = -1;
- for (i = 0; i < pg->size; i++)
- if (pg->vct[i].node_id + 1 > *max_node_id)
- *max_node_id = pg->vct[i].node_id;
-
-fn_exit:
- MPIU_Free(mb);
- return mpi_errno;
-fn_fail:
- /* --BEGIN ERROR HANDLING-- */
- *did_map = 0;
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-/* Fills in the node_id info from PMI info. Adapted from MPIU_Get_local_procs.
- This function is collective over the entire PG because PMI_Barrier is called.
-
- our_pg_rank should be set to -1 if this is not the current process' PG. This
- is currently not supported due to PMI limitations.
-
- Fallback Algorithm:
-
- Each process kvs_puts its hostname and stores the total number of
- processes (g_num_global). Each process determines maximum node id
- (g_max_node_id) and assigns a node id to each process (g_node_ids[]):
-
- For each hostname the process seaches the list of unique nodes
- names (node_names[]) for a match. If a match is found, the node id
- is recorded for that matching process. Otherwise, the hostname is
- added to the list of node names.
-*/
#undef FUNCNAME
#define FUNCNAME MPIDI_Populate_vc_node_ids
#undef FCNAME
@@ -1017,178 +911,20 @@ fn_fail:
int MPIDI_Populate_vc_node_ids(MPIDI_PG_t *pg, int our_pg_rank)
{
int mpi_errno = MPI_SUCCESS;
- int pmi_errno;
- int i, j;
- char *key;
- char *value;
- int key_max_sz;
- int val_max_sz;
- char *kvs_name;
- char **node_names;
- char *node_name_buf;
- int no_local = 0;
- int odd_even_cliques = 0;
- int pmi_version = MPIDI_CH3I_DEFAULT_PMI_VERSION;
- int pmi_subversion = MPIDI_CH3I_DEFAULT_PMI_SUBVERSION;
- MPIU_CHKLMEM_DECL(4);
-
- /* See if the user wants to override our default values */
- MPL_env2int("PMI_VERSION", &pmi_version);
- MPL_env2int("PMI_SUBVERSION", &pmi_subversion);
-
- if (pg->size == 1) {
- pg->vct[0].node_id = ++g_max_node_id;
- goto fn_exit;
- }
-
- /* Used for debugging only. This disables communication over shared memory */
-#ifdef ENABLED_NO_LOCAL
- no_local = 1;
-#else
- no_local = MPIR_CVAR_CH3_NOLOCAL;
-#endif
-
- /* Used for debugging on a single machine: Odd procs on a node are
- seen as local to each other, and even procs on a node are seen
- as local to each other. */
-#ifdef ENABLED_ODD_EVEN_CLIQUES
- odd_even_cliques = 1;
-#else
- odd_even_cliques = MPIR_CVAR_CH3_ODD_EVEN_CLIQUES;
-#endif
-
- if (no_local) {
- /* just assign 0 to n-1 as node ids and bail */
- for (i = 0; i < pg->size; ++i) {
- pg->vct[i].node_id = ++g_max_node_id;
- }
- goto fn_exit;
- }
-
-#ifdef USE_PMI2_API
- {
- char process_mapping[PMI2_MAX_VALLEN];
- int outlen;
- int found = FALSE;
- int i;
- map_block_t *mb;
- int nblocks;
- int rank;
- int block, block_node, node_proc;
- int did_map = 0;
-
- mpi_errno = PMI2_Info_GetJobAttr("PMI_process_mapping", process_mapping, sizeof(process_mapping), &found);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKINTERNAL(!found, mpi_errno, "PMI_process_mapping attribute not found");
- /* this code currently assumes pg is comm_world */
- mpi_errno = populate_ids_from_mapping(process_mapping, &g_max_node_id, pg, &did_map);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- MPIR_ERR_CHKINTERNAL(!did_map, mpi_errno, "unable to populate node ids from PMI_process_mapping");
- }
-#else /* USE_PMI2_API */
- if (our_pg_rank == -1) {
- /* FIXME this routine can't handle the dynamic process case at this
- time. This will require more support from the process manager. */
- MPIU_Assert(0);
- }
-
- /* Allocate space for pmi key and value */
- pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
- MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
- MPIU_CHKLMEM_MALLOC(key, char *, key_max_sz, mpi_errno, "key");
-
- pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
- MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
- MPIU_CHKLMEM_MALLOC(value, char *, val_max_sz, mpi_errno, "value");
-
- mpi_errno = MPIDI_PG_GetConnKVSname(&kvs_name);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* See if process manager supports PMI_process_mapping keyval */
-
- if (pmi_version == 1 && pmi_subversion == 1) {
- pmi_errno = PMI_KVS_Get(kvs_name, "PMI_process_mapping", value, val_max_sz);
- if (pmi_errno == 0) {
- int did_map = 0;
- /* this code currently assumes pg is comm_world */
- mpi_errno = populate_ids_from_mapping(value, &g_max_node_id, pg, &did_map);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- if (did_map) {
- goto odd_even_cliques;
- }
- else {
- MPIU_DBG_MSG_S(CH3_OTHER,TERSE,"did_map==0, unable to populate node ids from mapping=%s",value);
- }
- /* else fall through to O(N^2) PMI_KVS_Gets version */
- }
- else {
- MPIU_DBG_MSG(CH3_OTHER,TERSE,"unable to obtain the 'PMI_process_mapping' PMI key");
- }
- }
+ int i;
+ MPID_Node_id_t *out_nodemap;
+ out_nodemap = (MPID_Node_id_t *) MPL_malloc(pg->size * sizeof(MPID_Node_id_t));
- mpi_errno = publish_node_id(pg, our_pg_rank);
+ mpi_errno = MPIR_NODEMAP_build_nodemap(pg->size, our_pg_rank, out_nodemap, &g_max_node_id);
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_Assert(g_max_node_id >= 0);
- /* Allocate temporary structures. These would need to be persistent if
- we somehow were able to support dynamic processes via this method. */
- MPIU_CHKLMEM_MALLOC(node_names, char **, pg->size * sizeof(char*), mpi_errno, "node_names");
- MPIU_CHKLMEM_MALLOC(node_name_buf, char *, pg->size * key_max_sz * sizeof(char), mpi_errno, "node_name_buf");
-
- /* Gather hostnames */
- for (i = 0; i < pg->size; ++i)
- {
- node_names[i] = &node_name_buf[i * key_max_sz];
- node_names[i][0] = '\0';
+ for (i = 0; i < pg->size; i++) {
+ pg->vct[i].node_id = out_nodemap[i];
}
- g_max_node_id = 0; /* defensive */
-
- for (i = 0; i < pg->size; ++i)
- {
- MPIU_Assert(g_max_node_id < pg->size);
- if (i == our_pg_rank)
- {
- /* This is us, no need to perform a get */
- MPL_snprintf(node_names[g_max_node_id], key_max_sz, "%s", MPIU_hostname);
- }
- else
- {
- memset(key, 0, key_max_sz);
- MPL_snprintf(key, key_max_sz, "hostname[%d]", i);
-
- pmi_errno = PMI_KVS_Get(kvs_name, key, node_names[g_max_node_id], key_max_sz);
- MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_get", "**pmi_kvs_get %d", pmi_errno);
- }
-
- /* Find the node_id for this process, or create a new one */
- /* FIXME:need a better algorithm -- this one does O(N^2) strncmp()s! */
- /* The right fix is to get all this information from the process
- manager, rather than bother with this hostname hack at all. */
- for (j = 0; j < g_max_node_id + 1; ++j)
- if (!strncmp(node_names[j], node_names[g_max_node_id], key_max_sz))
- break;
- if (j == g_max_node_id + 1)
- ++g_max_node_id;
- else
- node_names[g_max_node_id][0] = '\0';
- pg->vct[i].node_id = j;
- }
-
-odd_even_cliques:
- if (odd_even_cliques)
- {
- /* Create new processes for all odd numbered processes. This
- may leave nodes ids with no processes assigned to them, but
- I think this is OK */
- for (i = 0; i < pg->size; ++i)
- if (i & 0x1)
- pg->vct[i].node_id += g_max_node_id + 1;
- g_max_node_id = (g_max_node_id + 1) * 2;
- }
-#endif
-
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPL_free(out_nodemap);
return mpi_errno;
fn_fail:
goto fn_exit;
diff --git a/src/mpid/ch3/src/mpidi_isend_self.c b/src/mpid/ch3/src/mpidi_isend_self.c
index 72c9f89..5da4cd2 100644
--- a/src/mpid/ch3/src/mpidi_isend_self.c
+++ b/src/mpid/ch3/src/mpidi_isend_self.c
@@ -16,12 +16,12 @@
#define FUNCNAME MPIDI_Isend_self
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_Isend_self(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,
- int type, MPID_Request ** request)
+int MPIDI_Isend_self(const void * buf, MPI_Aint count, MPI_Datatype datatype, int rank, int tag, MPIR_Comm * comm, int context_offset,
+ int type, MPIR_Request ** request)
{
MPIDI_Message_match match;
- MPID_Request * sreq;
- MPID_Request * rreq;
+ MPIR_Request * sreq;
+ MPIR_Request * rreq;
MPIDI_VC_t * vc;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
MPID_Seqnum_t seqnum;
@@ -29,7 +29,7 @@ int MPIDI_Isend_self(const void * buf, MPI_Aint count, MPI_Datatype datatype, in
int found;
int mpi_errno = MPI_SUCCESS;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,"sending message to self");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,"sending message to self");
MPIDI_Request_create_sreq(sreq, mpi_errno, goto fn_exit);
MPIDI_Request_set_type(sreq, type);
@@ -49,8 +49,8 @@ int MPIDI_Isend_self(const void * buf, MPI_Aint count, MPI_Datatype datatype, in
* progress engine reference and the second to release the
* user reference since the user will never have a chance to
* release their reference. */
- MPID_Request_release(sreq);
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
+ MPIR_Request_free(sreq);
sreq = NULL;
MPIR_ERR_SET1(mpi_errno, MPI_ERR_OTHER, "**nomem",
"**nomemuereq %d", MPIDI_CH3U_Recvq_count_unexp());
@@ -61,13 +61,13 @@ int MPIDI_Isend_self(const void * buf, MPI_Aint count, MPI_Datatype datatype, in
/* If the completion counter is 0, that means that the communicator to
* which this message is being sent has been revoked and we shouldn't
* bother finishing this. */
- if (!found && MPID_cc_get(rreq->cc) == 0) {
+ if (!found && MPIR_cc_get(rreq->cc) == 0) {
/* We release the send request twice, once to release the
* progress engine reference and the second to release the
* user reference since the user will never have a chance to
* release their reference. */
- MPID_Request_release(sreq);
- MPID_Request_release(sreq);
+ MPIR_Request_free(sreq);
+ MPIR_Request_free(sreq);
sreq = NULL;
goto fn_exit;
}
@@ -82,12 +82,12 @@ int MPIDI_Isend_self(const void * buf, MPI_Aint count, MPI_Datatype datatype, in
if (found)
{
- MPIDI_msg_sz_t data_sz;
+ intptr_t data_sz;
/* we found a posted req, which we now own, so we can release the CS */
MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_MSGQ_MUTEX);
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,
"found posted receive request; copying data");
MPIDI_CH3U_Buffer_copy(buf, count, datatype, &sreq->status.MPI_ERROR,
@@ -111,28 +111,28 @@ int MPIDI_Isend_self(const void * buf, MPI_Aint count, MPI_Datatype datatype, in
/* FIXME: Insert code here to buffer small sends in a temporary buffer? */
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,
"added receive request to unexpected queue; attaching send request");
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
{
- MPID_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
- MPID_Datatype_add_ref(sreq->dev.datatype_ptr);
+ MPIDU_Datatype_get_ptr(datatype, sreq->dev.datatype_ptr);
+ MPIDU_Datatype_add_ref(sreq->dev.datatype_ptr);
}
- rreq->partner_request = sreq;
+ rreq->dev.partner_request = sreq;
rreq->dev.sender_req_id = sreq->handle;
- MPID_Datatype_get_size_macro(datatype, dt_sz);
+ MPIDU_Datatype_get_size_macro(datatype, dt_sz);
MPIR_STATUS_SET_COUNT(rreq->status, count * dt_sz);
}
else
{
/* --BEGIN ERROR HANDLING-- */
- MPIU_DBG_MSG(CH3_OTHER,TYPICAL,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TYPICAL,
"ready send unable to find matching recv req");
sreq->status.MPI_ERROR = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
"**rsendnomatch", "**rsendnomatch %d %d", rank, tag);
rreq->status.MPI_ERROR = sreq->status.MPI_ERROR;
- rreq->partner_request = NULL;
+ rreq->dev.partner_request = NULL;
rreq->dev.sender_req_id = MPI_REQUEST_NULL;
MPIR_STATUS_SET_COUNT(rreq->status, 0);
diff --git a/src/mpid/ch3/src/mpidi_pg.c b/src/mpid/ch3/src/mpidi_pg.c
index 72dbd98..dba77eb 100644
--- a/src/mpid/ch3/src/mpidi_pg.c
+++ b/src/mpid/ch3/src/mpidi_pg.c
@@ -82,9 +82,9 @@ int MPIDI_PG_Finalize(void)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_PG_t *pg, *pgNext;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_FINALIZE);
/* Print the state of the process groups */
if (verbose) {
@@ -118,11 +118,11 @@ int MPIDI_PG_Finalize(void)
fails to use MPI_Comm_disconnect on communicators that
were created with the dynamic process routines.*/
/* XXX DJG FIXME-MT should we be checking this? */
- if (MPIU_Object_get_ref(pg) == 0 || 1) {
+ if (MPIR_Object_get_ref(pg) == 0 || 1) {
if (pg == MPIDI_Process.my_pg)
MPIDI_Process.my_pg = NULL;
- MPIU_Object_set_ref(pg, 0); /* satisfy assertions in PG_Destroy */
+ MPIR_Object_set_ref(pg, 0); /* satisfy assertions in PG_Destroy */
MPIDI_PG_Destroy( pg );
}
pg = pgNext;
@@ -155,7 +155,7 @@ int MPIDI_PG_Finalize(void)
}
#endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_FINALIZE);
return mpi_errno;
}
@@ -179,13 +179,13 @@ int MPIDI_PG_Create(int vct_sz, void * pg_id, MPIDI_PG_t ** pg_ptr)
MPIDI_PG_t * pg = NULL, *pgnext;
int p;
int mpi_errno = MPI_SUCCESS;
- MPIU_CHKPMEM_DECL(2);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_CREATE);
+ MPIR_CHKPMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_CREATE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_CREATE);
- MPIU_CHKPMEM_MALLOC(pg,MPIDI_PG_t*,sizeof(MPIDI_PG_t),mpi_errno,"pg");
- MPIU_CHKPMEM_MALLOC(pg->vct,MPIDI_VC_t *,sizeof(MPIDI_VC_t)*vct_sz,
+ MPIR_CHKPMEM_MALLOC(pg,MPIDI_PG_t*,sizeof(MPIDI_PG_t),mpi_errno,"pg");
+ MPIR_CHKPMEM_MALLOC(pg->vct,MPIDI_VC_t *,sizeof(MPIDI_VC_t)*vct_sz,
mpi_errno,"pg->vct");
if (verbose) {
@@ -197,7 +197,7 @@ int MPIDI_PG_Create(int vct_sz, void * pg_id, MPIDI_PG_t ** pg_ptr)
/* The reference count indicates the number of vc's that are or
have been in use and not disconnected. It starts at zero,
except for MPI_COMM_WORLD. */
- MPIU_Object_set_ref(pg, 0);
+ MPIR_Object_set_ref(pg, 0);
pg->size = vct_sz;
pg->id = pg_id;
pg->finalize = 0;
@@ -251,11 +251,11 @@ int MPIDI_PG_Create(int vct_sz, void * pg_id, MPIDI_PG_t ** pg_ptr)
*pg_ptr = pg;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_CREATE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_CREATE);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -269,11 +269,11 @@ int MPIDI_PG_Destroy(MPIDI_PG_t * pg)
MPIDI_PG_t * pg_cur;
int i;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_DESTROY);
- MPIU_Assert(MPIU_Object_get_ref(pg) == 0);
+ MPIR_Assert(MPIR_Object_get_ref(pg) == 0);
pg_prev = NULL;
pg_cur = MPIDI_PG_list;
@@ -291,7 +291,7 @@ int MPIDI_PG_Destroy(MPIDI_PG_t * pg)
else
pg_prev->next = pg->next;
- MPIU_DBG_MSG_FMT(CH3_DISCONNECT, VERBOSE, (MPIU_DBG_FDEST, "destroying pg=%p pg->id=%s", pg, (char *)pg->id));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_DISCONNECT, VERBOSE, (MPL_DBG_FDEST, "destroying pg=%p pg->id=%s", pg, (char *)pg->id));
for (i = 0; i < pg->size; ++i) {
/* FIXME it would be good if we could make this assertion.
@@ -304,9 +304,9 @@ int MPIDI_PG_Destroy(MPIDI_PG_t * pg)
counts IS required and missing one is a bug.)
2) There is a real bug lurking out there somewhere and we
just haven't hit it in the tests yet. */
- /*MPIU_Assert(MPIU_Object_get_ref(pg->vct[i]) == 0);*/
+ /*MPIR_Assert(MPIR_Object_get_ref(pg->vct[i]) == 0);*/
- MPIU_DBG_MSG_FMT(CH3_DISCONNECT, VERBOSE, (MPIU_DBG_FDEST, "about to free pg->vct=%p which contains vc=%p", pg->vct, &pg->vct[i]));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_DISCONNECT, VERBOSE, (MPL_DBG_FDEST, "about to free pg->vct=%p which contains vc=%p", pg->vct, &pg->vct[i]));
/* This used to be handled in MPIDI_VCRT_Release, but that was
not the right place to do this. The VC should only be freed
@@ -323,17 +323,17 @@ int MPIDI_PG_Destroy(MPIDI_PG_t * pg)
}
MPIDI_PG_Destroy_fn(pg);
- MPIU_Free(pg->vct);
+ MPL_free(pg->vct);
if (pg->connData) {
if (pg->freeConnInfo) {
(*pg->freeConnInfo)( pg );
}
else {
- MPIU_Free(pg->connData);
+ MPL_free(pg->connData);
}
}
mpi_errno = MPIDI_CH3_PG_Destroy(pg);
- MPIU_Free(pg);
+ MPL_free(pg);
goto fn_exit;
}
@@ -347,7 +347,7 @@ int MPIDI_PG_Destroy(MPIDI_PG_t * pg)
"**dev|pg_not_found", "**dev|pg_not_found %p", pg);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_DESTROY);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -361,9 +361,9 @@ int MPIDI_PG_Find(void * id, MPIDI_PG_t ** pg_ptr)
{
MPIDI_PG_t * pg;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_FIND);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_FIND);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_FIND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_FIND);
pg = MPIDI_PG_list;
while (pg != NULL)
@@ -380,7 +380,7 @@ int MPIDI_PG_Find(void * id, MPIDI_PG_t ** pg_ptr)
*pg_ptr = NULL;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_FIND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_FIND);
return mpi_errno;
}
@@ -444,9 +444,9 @@ int MPIDI_PG_Get_iterator(MPIDI_PG_iterator *iter)
int MPIDI_PG_To_string(MPIDI_PG_t *pg_ptr, char **str_ptr, int *lenStr)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_TO_STRING);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_TO_STRING);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_TO_STRING);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_TO_STRING);
/* Replace this with the new string */
if (pg_ptr->connInfoToString) {
@@ -458,7 +458,7 @@ int MPIDI_PG_To_string(MPIDI_PG_t *pg_ptr, char **str_ptr, int *lenStr)
/*printf( "PgToString: Pg string is %s\n", *str_ptr ); fflush(stdout);*/
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_TO_STRING);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_TO_STRING);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -483,9 +483,9 @@ int MPIDI_PG_Create_from_string(const char * str, MPIDI_PG_t ** pg_pptr,
const char *p;
int vct_sz;
MPIDI_PG_t *existing_pg, *pg_ptr=0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING);
/*printf( "PgCreateFromString: Creating pg from %s\n", str );
fflush(stdout); */
@@ -515,14 +515,14 @@ int MPIDI_PG_Create_from_string(const char * str, MPIDI_PG_t ** pg_pptr,
}
pg_ptr = *pg_pptr;
- pg_ptr->id = MPIU_Strdup( str );
+ pg_ptr->id = MPL_strdup( str );
/* Set up the functions to use strings to manage connection information */
MPIDI_PG_InitConnString( pg_ptr );
(*pg_ptr->connInfoFromString)( str, pg_ptr );
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -591,9 +591,9 @@ int MPIDI_PG_SetConnInfo( int rank, const char *connString )
int mpi_errno = MPI_SUCCESS;
int len;
char key[PMI2_MAX_KEYLEN];
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_SetConnInfo);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_SetConnInfo);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_SetConnInfo);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_SetConnInfo);
len = MPL_snprintf(key, sizeof(key), "P%d-businesscard", rank);
MPIR_ERR_CHKANDJUMP1(len < 0 || len > sizeof(key), mpi_errno, MPI_ERR_OTHER, "**snprintf", "**snprintf %d", len);
@@ -605,7 +605,7 @@ int MPIDI_PG_SetConnInfo( int rank, const char *connString )
if (mpi_errno) MPIR_ERR_POP(mpi_errno);
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_SetConnInfo);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_SetConnInfo);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -614,11 +614,11 @@ int MPIDI_PG_SetConnInfo( int rank, const char *connString )
int pmi_errno;
int len;
char key[128];
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_SetConnInfo);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_SetConnInfo);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_SetConnInfo);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_SetConnInfo);
- MPIU_Assert(pg_world->connData);
+ MPIR_Assert(pg_world->connData);
len = MPL_snprintf(key, sizeof(key), "P%d-businesscard", rank);
if (len < 0 || len > sizeof(key)) {
@@ -642,7 +642,7 @@ int MPIDI_PG_SetConnInfo( int rank, const char *connString )
"**pmi_barrier %d", pmi_errno);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_SetConnInfo);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_SetConnInfo);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -739,7 +739,7 @@ static int connToStringKVS( char **buf_p, int *slen, MPIDI_PG_t *pg )
needed space */
len = 0;
curSlen = 10 + pg->size * 128;
- string = (char *)MPIU_Malloc( curSlen );
+ string = (char *)MPL_malloc( curSlen );
/* Start with the id of the pg */
while (*pg_idStr && len < curSlen)
@@ -783,7 +783,7 @@ static int connToStringKVS( char **buf_p, int *slen, MPIDI_PG_t *pg )
if (len + vallen + 1 >= curSlen) {
char *nstring = 0;
curSlen += (pg->size - i) * (vallen + 1 );
- nstring = MPIU_Realloc( string, curSlen );
+ nstring = MPL_realloc( string, curSlen );
if (!nstring) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
}
@@ -795,14 +795,14 @@ static int connToStringKVS( char **buf_p, int *slen, MPIDI_PG_t *pg )
}
}
- MPIU_Assert(len <= curSlen);
+ MPIR_Assert(len <= curSlen);
*buf_p = string;
*slen = len;
fn_exit:
return mpi_errno;
fn_fail:
- if (string) MPIU_Free(string);
+ if (string) MPL_free(string);
goto fn_exit;
}
static int connFromStringKVS( const char *buf ATTRIBUTE((unused)),
@@ -814,7 +814,7 @@ static int connFromStringKVS( const char *buf ATTRIBUTE((unused)),
static int connFreeKVS( MPIDI_PG_t *pg )
{
if (pg->connData) {
- MPIU_Free( pg->connData );
+ MPL_free( pg->connData );
}
return MPI_SUCCESS;
}
@@ -829,7 +829,7 @@ int MPIDI_PG_InitConnKVS( MPIDI_PG_t *pg )
#ifdef USE_PMI2_API
int mpi_errno = MPI_SUCCESS;
- pg->connData = (char *)MPIU_Malloc(MAX_JOBID_LEN);
+ pg->connData = (char *)MPL_malloc(MAX_JOBID_LEN);
if (pg->connData == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**nomem");
}
@@ -847,7 +847,7 @@ int MPIDI_PG_InitConnKVS( MPIDI_PG_t *pg )
"**pmi_kvs_get_name_length_max %d", pmi_errno);
}
- pg->connData = (char *)MPIU_Malloc(kvs_name_sz + 1);
+ pg->connData = (char *)MPL_malloc(kvs_name_sz + 1);
if (pg->connData == NULL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**nomem");
}
@@ -867,7 +867,7 @@ int MPIDI_PG_InitConnKVS( MPIDI_PG_t *pg )
fn_exit:
return mpi_errno;
fn_fail:
- if (pg->connData) { MPIU_Free(pg->connData); }
+ if (pg->connData) { MPL_free(pg->connData); }
goto fn_exit;
}
@@ -905,7 +905,7 @@ static int getConnInfo( int rank, char *buf, int bufsize, MPIDI_PG_t *pg )
/* printf( "Copying %s to buf\n", connInfo->connStrings[rank] ); fflush(stdout); */
- MPIU_Strncpy( buf, connInfo->connStrings[rank], bufsize );
+ MPL_strncpy( buf, connInfo->connStrings[rank], bufsize );
return MPI_SUCCESS;
}
@@ -918,11 +918,11 @@ static int connToString( char **buf_p, int *slen, MPIDI_PG_t *pg )
int mpi_errno = MPI_SUCCESS;
char *str = NULL, *pg_id;
int i, len=0;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
MPIDI_ConnInfo *connInfo = (MPIDI_ConnInfo *)pg->connData;
/* Create this from the string array */
- MPIU_CHKPMEM_MALLOC(str, char *, connInfo->toStringLen, mpi_errno, "str");
+ MPIR_CHKPMEM_MALLOC(str, char *, connInfo->toStringLen, mpi_errno, "str");
#if defined(MPICH_DEBUG_MEMINIT)
memset(str, 0, connInfo->toStringLen);
@@ -937,7 +937,7 @@ static int connToString( char **buf_p, int *slen, MPIDI_PG_t *pg )
/* XXX DJG TODO figure out what this little bit is all about. */
if (strstr( pg_id, "singinit_kvs" ) == pg_id) {
#ifdef USE_PMI2_API
- MPIU_Assertp(0); /* don't know what to do here for pmi2 yet. DARIUS */
+ MPIR_Assertp(0); /* don't know what to do here for pmi2 yet. DARIUS */
#else
PMI_KVS_Get_my_name( pg->id, 256 );
#endif
@@ -967,10 +967,10 @@ static int connToString( char **buf_p, int *slen, MPIDI_PG_t *pg )
*slen = len;
fn_exit:
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -989,13 +989,13 @@ static int connFromString( const char *buf, MPIDI_PG_t *pg )
pg->size = atoi( buf );
while (*buf) buf++; buf++;
- conninfo = (MPIDI_ConnInfo *)MPIU_Malloc( sizeof(MPIDI_ConnInfo) );
- conninfo->connStrings = (char **)MPIU_Malloc( pg->size * sizeof(char *));
+ conninfo = (MPIDI_ConnInfo *)MPL_malloc( sizeof(MPIDI_ConnInfo) );
+ conninfo->connStrings = (char **)MPL_malloc( pg->size * sizeof(char *));
/* For now, make a copy of each item */
for (i=0; i<pg->size; i++) {
/* printf( "Adding conn[%d] = %s\n", i, buf );fflush(stdout); */
- conninfo->connStrings[i] = MPIU_Strdup( buf );
+ conninfo->connStrings[i] = MPL_strdup( buf );
while (*buf) buf++;
buf++;
}
@@ -1013,15 +1013,15 @@ static int connFree( MPIDI_PG_t *pg )
int i;
for (i=0; i<pg->size; i++) {
- MPIU_Free( conninfo->connStrings[i] );
+ MPL_free( conninfo->connStrings[i] );
}
- MPIU_Free( conninfo->connStrings );
- MPIU_Free( conninfo );
+ MPL_free( conninfo->connStrings );
+ MPL_free( conninfo );
return MPI_SUCCESS;
}
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
/* This is a temporary routine that is used to print out the pg string.
A better approach may be to convert it into a single (long) string
with no nulls. */
@@ -1030,8 +1030,8 @@ int MPIDI_PrintConnStr( const char *file, int line,
{
int pg_size, i;
- MPIU_DBG_Outevent( file, line, MPIU_DBG_CH3_CONNECT, 0, "%s", label );
- MPIU_DBG_Outevent( file, line, MPIU_DBG_CH3_CONNECT, 0, "%s", str );
+ MPL_dbg_outevent( file, line, MPIDI_CH3_DBG_CONNECT, 0, "%s", label );
+ MPL_dbg_outevent( file, line, MPIDI_CH3_DBG_CONNECT, 0, "%s", str );
/* Skip the pg id */
while (*str) str++; str++;
@@ -1041,7 +1041,7 @@ int MPIDI_PrintConnStr( const char *file, int line,
while (*str) str++; str++;
for (i=0; i<pg_size; i++) {
- MPIU_DBG_Outevent( file, line, MPIU_DBG_CH3_CONNECT, 0, "%s", str );
+ MPL_dbg_outevent( file, line, MPIDI_CH3_DBG_CONNECT, 0, "%s", str );
while (*str) str++;
str++;
}
@@ -1126,9 +1126,9 @@ int MPIDI_PG_GetConnString( MPIDI_PG_t *pg, int rank, char *val, int vallen )
int MPIDI_PG_Dup_vcr( MPIDI_PG_t *pg, int rank, MPIDI_VC_t **vc_p )
{
MPIDI_VC_t *vc;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_DUP_VCR);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_DUP_VCR);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_DUP_VCR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_DUP_VCR);
vc = &pg->vct[rank];
/* Increase the reference count of the vc. If the reference count
@@ -1136,14 +1136,14 @@ int MPIDI_PG_Dup_vcr( MPIDI_PG_t *pg, int rank, MPIDI_VC_t **vc_p )
process group *and* the reference count of the vc (this
allows us to distinquish between Comm_free and Comm_disconnect) */
/* FIXME-MT: This should be a fetch and increment for thread-safety */
- if (MPIU_Object_get_ref(vc) == 0) {
+ if (MPIR_Object_get_ref(vc) == 0) {
MPIDI_PG_add_ref(pg);
MPIDI_VC_add_ref(vc);
}
MPIDI_VC_add_ref(vc);
*vc_p = vc;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_DUP_VCR);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_DUP_VCR);
return MPI_SUCCESS;
}
@@ -1164,14 +1164,14 @@ int MPIDI_PG_Close_VCs( void )
{
MPIDI_PG_t * pg = MPIDI_PG_list;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PG_CLOSE_VCS);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_CLOSE_VCS);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PG_CLOSE_VCS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_CLOSE_VCS);
while (pg) {
int i, inuse, n, i_start;
- MPIU_DBG_MSG_S(CH3_DISCONNECT,VERBOSE,"Closing vcs for pg %s",
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_DISCONNECT,VERBOSE,"Closing vcs for pg %s",
(char *)pg->id );
/* We want to reduce the chance of having all processes send
@@ -1187,7 +1187,7 @@ int MPIDI_PG_Close_VCs( void )
/* If the VC is myself then skip the close message */
if (pg == MPIDI_Process.my_pg && i == MPIDI_Process.my_pg_rank) {
/* XXX DJG FIXME-MT should we be checking this? */
- if (MPIU_Object_get_ref(vc) != 0) {
+ if (MPIR_Object_get_ref(vc) != 0) {
MPIDI_PG_release_ref(pg, &inuse);
}
continue;
@@ -1200,7 +1200,7 @@ int MPIDI_PG_Close_VCs( void )
} else if (vc->state == MPIDI_VC_STATE_INACTIVE ||
vc->state == MPIDI_VC_STATE_MORIBUND) {
/* XXX DJG FIXME-MT should we be checking this? */
- if (MPIU_Object_get_ref(vc) != 0) {
+ if (MPIR_Object_get_ref(vc) != 0) {
/* FIXME: If the reference count for the vc is not 0,
something is wrong */
MPIDI_PG_release_ref(pg, &inuse);
@@ -1212,7 +1212,7 @@ int MPIDI_PG_Close_VCs( void )
if (vc->state == MPIDI_VC_STATE_INACTIVE)
MPIDI_CHANGE_VC_STATE(vc, INACTIVE_CLOSED);
} else {
- MPIU_DBG_MSG_FMT(CH3_DISCONNECT,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_DISCONNECT,VERBOSE,(MPL_DBG_FDEST,
"vc=%p: not sending a close to %d, vc in state %s", vc,i,
MPIDI_VC_GetStateString(vc->state)));
}
@@ -1226,7 +1226,7 @@ int MPIDI_PG_Close_VCs( void )
handles any close requests that this code generates) */
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PG_CLOSE_VCS);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_CLOSE_VCS);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1247,10 +1247,10 @@ int MPIU_PG_Printall( FILE *fp )
while (pg) {
/* XXX DJG FIXME-MT should we be checking this? */
fprintf( fp, "size = %d, refcount = %d, id = %s\n",
- pg->size, MPIU_Object_get_ref(pg), (char *)pg->id );
+ pg->size, MPIR_Object_get_ref(pg), (char *)pg->id );
for (i=0; i<pg->size; i++) {
fprintf( fp, "\tVCT rank = %d, refcount = %d, lpid = %d, state = %d \n",
- pg->vct[i].pg_rank, MPIU_Object_get_ref(&pg->vct[i]),
+ pg->vct[i].pg_rank, MPIR_Object_get_ref(&pg->vct[i]),
pg->vct[i].lpid, (int)pg->vct[i].state );
}
fflush(fp);
diff --git a/src/mpid/ch3/src/mpidi_printf.c b/src/mpid/ch3/src/mpidi_printf.c
index 031bef9..57ae376 100644
--- a/src/mpid/ch3/src/mpidi_printf.c
+++ b/src/mpid/ch3/src/mpidi_printf.c
@@ -24,32 +24,6 @@
*/
/* --BEGIN DEBUG-- */
-#undef MPIDI_dbg_printf
-void MPIDI_dbg_printf(int level, char *func, char *fmt, ...)
-{
- /* FIXME: This "unreferenced_arg" is an example of a problem with the
- * API (unneeded level argument) or the code (failure to check the
- * level argument). Inserting these "unreference_arg" macros erroneously
- * suggests that the code is correct with this ununsed argument, and thus
- * commits the grave harm of obscuring a real problem */
- MPIU_UNREFERENCED_ARG(level);
- {
- va_list list;
-
- if (MPIR_Process.comm_world) {
- MPIU_dbglog_printf("[%d] %s(): ", MPIR_Process.comm_world->rank, func);
- }
- else {
- MPIU_dbglog_printf("[-1] %s(): ", func);
- }
- va_start(list, fmt);
- MPIU_dbglog_vprintf(fmt, list);
- va_end(list);
- MPIU_dbglog_printf("\n");
- fflush(stdout);
- }
-}
-
#undef MPIDI_err_printf
void MPIDI_err_printf(char *func, char *fmt, ...)
{
@@ -75,7 +49,7 @@ void MPIDI_err_printf(char *func, char *fmt, ...)
of packet types (and allowing channels to customize the printing
of packets). For example, an array of function pointers, indexed by
packet type, could be used.
- Also, these routines should not use MPIU_DBG_PRINTF, instead they should
+ Also, these routines should not use MPL_DBG_MSG_* functions, instead they should
us a simple fprintf with a style allowance (so that the style checker
won't flag the use as a possible problem).
@@ -89,7 +63,7 @@ void MPIDI_err_printf(char *func, char *fmt, ...)
void MPIDI_DBG_Print_packet(MPIDI_CH3_Pkt_t * pkt)
{
{
- MPIU_DBG_PRINTF(("MPIDI_CH3_Pkt_t:\n"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE,"MPIDI_CH3_Pkt_t:\n");
switch (pkt->type) {
case MPIDI_CH3_PKT_EAGER_SEND:
MPIDI_CH3_PktPrint_EagerSend(stdout, pkt);
@@ -146,12 +120,12 @@ void MPIDI_DBG_Print_packet(MPIDI_CH3_Pkt_t * pkt)
break;
/*
* case MPIDI_CH3_PKT_SHARED_LOCK_OPS_DONE:
- * MPIU_DBG_PRINTF((" type ......... MPIDI_CH3_PKT_SHARED_LOCK_OPS_DONE\n"));
- * MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->shared_lock_ops_done.source_win_handle));
+ * MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type ......... MPIDI_CH3_PKT_SHARED_LOCK_OPS_DONE\n");
+ * MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," source ....... 0x%08X\n", pkt->shared_lock_ops_done.source_win_handle));
* break;
*/
case MPIDI_CH3_PKT_FLOW_CNTL_UPDATE:
- MPIU_DBG_PRINTF((" FLOW_CNTRL_UPDATE\n"));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," FLOW_CNTRL_UPDATE\n");
break;
case MPIDI_CH3_PKT_CLOSE:
@@ -159,41 +133,41 @@ void MPIDI_DBG_Print_packet(MPIDI_CH3_Pkt_t * pkt)
break;
default:
- MPIU_DBG_PRINTF((" INVALID PACKET\n"));
- MPIU_DBG_PRINTF((" unknown type ... %d\n", pkt->type));
- MPIU_DBG_PRINTF((" type .......... EAGER_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->eager_send.sender_req_id));
- MPIU_DBG_PRINTF((" context_id ... %d\n", pkt->eager_send.match.parts.context_id));
- MPIU_DBG_PRINTF((" data_sz ...... %d\n", pkt->eager_send.data_sz));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->eager_send.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->eager_send.match.parts.rank));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," INVALID PACKET\n");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," unknown type ... %d\n", pkt->type);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type .......... EAGER_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->eager_send.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n", pkt->eager_send.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," data_sz ...... %d\n", pkt->eager_send.data_sz);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->eager_send.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->eager_send.match.parts.rank);
#ifdef MPID_USE_SEQUENCE_NUMBERS
- MPIU_DBG_PRINTF((" seqnum ....... %d\n", pkt->eager_send.seqnum));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," seqnum ....... %d\n", pkt->eager_send.seqnum);
#endif
- MPIU_DBG_PRINTF((" type .......... REQ_TO_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->rndv_req_to_send.sender_req_id));
- MPIU_DBG_PRINTF((" context_id ... %d\n",
- pkt->rndv_req_to_send.match.parts.context_id));
- MPIU_DBG_PRINTF((" data_sz ...... %d\n", pkt->rndv_req_to_send.data_sz));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->rndv_req_to_send.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->rndv_req_to_send.match.parts.rank));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type .......... REQ_TO_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->rndv_req_to_send.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n",
+ pkt->rndv_req_to_send.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," data_sz ...... %d\n", pkt->rndv_req_to_send.data_sz);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->rndv_req_to_send.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->rndv_req_to_send.match.parts.rank);
#ifdef MPID_USE_SEQUENCE_NUMBERS
- MPIU_DBG_PRINTF((" seqnum ....... %d\n", pkt->rndv_req_to_send.seqnum));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," seqnum ....... %d\n", pkt->rndv_req_to_send.seqnum);
#endif
- MPIU_DBG_PRINTF((" type .......... CLR_TO_SEND\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->rndv_clr_to_send.sender_req_id));
- MPIU_DBG_PRINTF((" recvr_reqid .. 0x%08X\n", pkt->rndv_clr_to_send.receiver_req_id));
- MPIU_DBG_PRINTF((" type .......... RNDV_SEND\n"));
- MPIU_DBG_PRINTF((" recvr_reqid .. 0x%08X\n", pkt->rndv_send.receiver_req_id));
- MPIU_DBG_PRINTF((" type .......... CANCEL_SEND\n"));
- MPIU_DBG_PRINTF((" context_id ... %d\n",
- pkt->cancel_send_req.match.parts.context_id));
- MPIU_DBG_PRINTF((" tag .......... %d\n", pkt->cancel_send_req.match.parts.tag));
- MPIU_DBG_PRINTF((" rank ......... %d\n", pkt->cancel_send_req.match.parts.rank));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->cancel_send_req.sender_req_id));
- MPIU_DBG_PRINTF((" type .......... CANCEL_SEND_RESP\n"));
- MPIU_DBG_PRINTF((" sender_reqid . 0x%08X\n", pkt->cancel_send_resp.sender_req_id));
- MPIU_DBG_PRINTF((" ack .......... %d\n", pkt->cancel_send_resp.ack));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type .......... CLR_TO_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->rndv_clr_to_send.sender_req_id));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," recvr_reqid .. 0x%08X\n", pkt->rndv_clr_to_send.receiver_req_id));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type .......... RNDV_SEND\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," recvr_reqid .. 0x%08X\n", pkt->rndv_send.receiver_req_id));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type .......... CANCEL_SEND\n");
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," context_id ... %d\n",
+ pkt->cancel_send_req.match.parts.context_id);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," tag .......... %d\n", pkt->cancel_send_req.match.parts.tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," rank ......... %d\n", pkt->cancel_send_req.match.parts.rank);
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->cancel_send_req.sender_req_id));
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,TERSE," type .......... CANCEL_SEND_RESP\n");
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST," sender_reqid . 0x%08X\n", pkt->cancel_send_resp.sender_req_id));
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_OTHER,TERSE," ack .......... %d\n", pkt->cancel_send_resp.ack);
break;
}
}
@@ -238,14 +212,14 @@ const char *MPIDI_Pkt_GetDescString(MPIDI_CH3_Pkt_t * pkt)
switch (pkt->type) {
case MPIDI_CH3_PKT_EAGER_SEND:
MPL_snprintf(pktmsg, sizeof(pktmsg),
- "EAGER_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT,
+ "EAGER_SEND - (%d,%d,%d,)%" PRIdPTR,
pkt->eager_send.match.parts.context_id,
(int) pkt->eager_send.match.parts.tag,
pkt->eager_send.match.parts.rank, pkt->eager_send.data_sz);
break;
case MPIDI_CH3_PKT_EAGER_SYNC_SEND:
MPL_snprintf(pktmsg, sizeof(pktmsg),
- "EAGER_SYNC_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT " req=%d",
+ "EAGER_SYNC_SEND - (%d,%d,%d,)%" PRIdPTR " req=%d",
pkt->eager_sync_send.match.parts.context_id,
(int) pkt->eager_sync_send.match.parts.tag,
pkt->eager_sync_send.match.parts.rank,
@@ -257,14 +231,14 @@ const char *MPIDI_Pkt_GetDescString(MPIDI_CH3_Pkt_t * pkt)
break;
case MPIDI_CH3_PKT_READY_SEND:
MPL_snprintf(pktmsg, sizeof(pktmsg),
- "READY_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT,
+ "READY_SEND - (%d,%d,%d,)%" PRIdPTR,
pkt->ready_send.match.parts.context_id,
(int) pkt->ready_send.match.parts.tag,
pkt->ready_send.match.parts.rank, pkt->ready_send.data_sz);
break;
case MPIDI_CH3_PKT_RNDV_REQ_TO_SEND:
MPL_snprintf(pktmsg, sizeof(pktmsg),
- "RNDV_REQ_TO_SEND - (%d,%d,%d,)" MPIDI_MSG_SZ_FMT " req=%d",
+ "RNDV_REQ_TO_SEND - (%d,%d,%d,)%" PRIdPTR " req=%d",
pkt->rndv_req_to_send.match.parts.context_id,
(int) pkt->rndv_req_to_send.match.parts.tag,
pkt->rndv_req_to_send.match.parts.rank,
diff --git a/src/mpid/ch3/src/mpidi_rma.c b/src/mpid/ch3/src/mpidi_rma.c
index 941eb6e..cb98e8e 100644
--- a/src/mpid/ch3/src/mpidi_rma.c
+++ b/src/mpid/ch3/src/mpidi_rma.c
@@ -90,13 +90,13 @@ int MPIDI_RMA_init(void)
{
int mpi_errno = MPI_SUCCESS;
int i;
- MPIU_CHKPMEM_DECL(3);
+ MPIR_CHKPMEM_DECL(3);
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_RMA_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RMA_INIT);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_RMA_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_RMA_INIT);
- MPIU_CHKPMEM_MALLOC(global_rma_op_pool_start, MPIDI_RMA_Op_t *,
+ MPIR_CHKPMEM_MALLOC(global_rma_op_pool_start, MPIDI_RMA_Op_t *,
sizeof(MPIDI_RMA_Op_t) * MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE,
mpi_errno, "RMA op pool");
for (i = 0; i < MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE; i++) {
@@ -104,7 +104,7 @@ int MPIDI_RMA_init(void)
MPL_DL_APPEND(global_rma_op_pool_head, &(global_rma_op_pool_start[i]));
}
- MPIU_CHKPMEM_MALLOC(global_rma_target_pool_start, MPIDI_RMA_Target_t *,
+ MPIR_CHKPMEM_MALLOC(global_rma_target_pool_start, MPIDI_RMA_Target_t *,
sizeof(MPIDI_RMA_Target_t) * MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE,
mpi_errno, "RMA target pool");
for (i = 0; i < MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE; i++) {
@@ -113,11 +113,11 @@ int MPIDI_RMA_init(void)
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_RMA_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RMA_INIT);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_fail;
}
@@ -128,14 +128,14 @@ int MPIDI_RMA_init(void)
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIDI_RMA_finalize(void)
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_RMA_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RMA_FINALIZE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_RMA_FINALIZE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_RMA_FINALIZE);
- MPIU_Free(global_rma_op_pool_start);
- MPIU_Free(global_rma_target_pool_start);
+ MPL_free(global_rma_op_pool_start);
+ MPL_free(global_rma_target_pool_start);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_RMA_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RMA_FINALIZE);
}
@@ -143,15 +143,15 @@ void MPIDI_RMA_finalize(void)
#define FUNCNAME MPID_Win_free
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Win_free(MPID_Win ** win_ptr)
+int MPID_Win_free(MPIR_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
int in_use;
- MPID_Comm *comm_ptr;
+ MPIR_Comm *comm_ptr;
MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIDI_STATE_DECL(MPID_STATE_MPID_WIN_FREE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_WIN_FREE);
- MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPID_WIN_FREE);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPID_WIN_FREE);
MPIR_ERR_CHKANDJUMP(((*win_ptr)->states.access_state != MPIDI_RMA_NONE &&
(*win_ptr)->states.access_state != MPIDI_RMA_FENCE_ISSUED &&
@@ -190,10 +190,10 @@ int MPID_Win_free(MPID_Win ** win_ptr)
}
/* dequeue window from the global list */
- MPIU_Assert((*win_ptr)->active == FALSE);
+ MPIR_Assert((*win_ptr)->active == FALSE);
MPL_DL_DELETE(MPIDI_RMA_Win_inactive_list_head, (*win_ptr));
- if (MPIDI_RMA_Win_inactive_list_head == NULL && MPIDI_RMA_Win_inactive_list_head == NULL) {
+ if (MPIDI_RMA_Win_inactive_list_head == NULL && MPIDI_RMA_Win_active_list_head == NULL) {
/* this is the last window, de-register RMA progress hook */
mpi_errno = MPID_Progress_deregister_hook(MPIDI_CH3I_RMA_Progress_hook_id);
if (mpi_errno != MPI_SUCCESS) {
@@ -207,29 +207,29 @@ int MPID_Win_free(MPID_Win ** win_ptr)
MPIR_ERR_POP(mpi_errno);
if ((*win_ptr)->basic_info_table != NULL)
- MPIU_Free((*win_ptr)->basic_info_table);
- MPIU_Free((*win_ptr)->op_pool_start);
- MPIU_Free((*win_ptr)->target_pool_start);
- MPIU_Free((*win_ptr)->slots);
- MPIU_Free((*win_ptr)->target_lock_entry_pool_start);
+ MPL_free((*win_ptr)->basic_info_table);
+ MPL_free((*win_ptr)->op_pool_start);
+ MPL_free((*win_ptr)->target_pool_start);
+ MPL_free((*win_ptr)->slots);
+ MPL_free((*win_ptr)->target_lock_entry_pool_start);
- MPIU_Assert((*win_ptr)->current_target_lock_data_bytes == 0);
+ MPIR_Assert((*win_ptr)->current_target_lock_data_bytes == 0);
/* Free the attached buffer for windows created with MPI_Win_allocate() */
if ((*win_ptr)->create_flavor == MPI_WIN_FLAVOR_ALLOCATE ||
(*win_ptr)->create_flavor == MPI_WIN_FLAVOR_SHARED) {
if ((*win_ptr)->shm_allocated == FALSE && (*win_ptr)->size > 0) {
- MPIU_Free((*win_ptr)->base);
+ MPL_free((*win_ptr)->base);
}
}
- MPIU_Object_release_ref(*win_ptr, &in_use);
+ MPIR_Object_release_ref(*win_ptr, &in_use);
/* MPI windows don't have reference count semantics, so this should always be true */
- MPIU_Assert(!in_use);
- MPIU_Handle_obj_free(&MPID_Win_mem, *win_ptr);
+ MPIR_Assert(!in_use);
+ MPIR_Handle_obj_free(&MPIR_Win_mem, *win_ptr);
fn_exit:
- MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPID_WIN_FREE);
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPID_WIN_FREE);
return mpi_errno;
fn_fail:
diff --git a/src/mpid/ch3/util/ftb/.state-cache b/src/mpid/ch3/util/ftb/.state-cache
index 8881353..cdc4122 100644
--- a/src/mpid/ch3/util/ftb/.state-cache
+++ b/src/mpid/ch3/util/ftb/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="ftb.c" info="1447123141"/>
+<file name="ftb.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="ftb.c">
diff --git a/src/mpid/ch3/util/ftb/ftb.c b/src/mpid/ch3/util/ftb/ftb.c
index e7b4ed8..f17e13f 100644
--- a/src/mpid/ch3/util/ftb/ftb.c
+++ b/src/mpid/ch3/util/ftb/ftb.c
@@ -23,7 +23,7 @@ static FTB_event_info_t event_info[] = {
};
#ifdef DEBUG_MPIDU_FTB
-#define CHECK_FTB_ERROR(x) do { MPIU_Assertp(x); } while(0)
+#define CHECK_FTB_ERROR(x) do { MPIR_Assertp(x); } while(0)
#else
#define CHECK_FTB_ERROR(x) (void)x
#endif
@@ -37,13 +37,13 @@ int MPIDU_Ftb_init(void)
int mpi_errno = MPI_SUCCESS;
int ret;
FTB_client_t ci;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_FTB_INIT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_FTB_INIT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_FTB_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_FTB_INIT);
- MPIU_Strncpy(ci.event_space, "ftb.mpi.mpich", sizeof(ci.event_space));
- MPIU_Strncpy(ci.client_name, "mpich " MPICH_VERSION, sizeof(ci.client_name));
- MPIU_Strncpy(ci.client_subscription_style, "FTB_SUBSCRIPTION_NONE", sizeof(ci.client_subscription_style));
+ MPL_strncpy(ci.event_space, "ftb.mpi.mpich", sizeof(ci.event_space));
+ MPL_strncpy(ci.client_name, "mpich " MPICH_VERSION, sizeof(ci.client_name));
+ MPL_strncpy(ci.client_subscription_style, "FTB_SUBSCRIPTION_NONE", sizeof(ci.client_subscription_style));
ci.client_polling_queue_len = -1;
#ifdef USE_PMI2_API
@@ -61,7 +61,7 @@ int MPIDU_Ftb_init(void)
MPIR_ERR_CHKANDJUMP(ret, mpi_errno, MPI_ERR_OTHER, "**ftb_declare_publishable_events");
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_FTB_INIT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_FTB_INIT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -80,16 +80,16 @@ void MPIDU_Ftb_publish(const char *event_name, const char *event_payload)
{
FTB_event_properties_t event_prop;
FTB_event_handle_t event_handle;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_FTB_PUBLISH);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_FTB_PUBLISH);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_FTB_PUBLISH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_FTB_PUBLISH);
event_prop.event_type = 1;
- MPIU_Strncpy(event_prop.event_payload, event_payload, sizeof(event_prop.event_payload));
+ MPL_strncpy(event_prop.event_payload, event_payload, sizeof(event_prop.event_payload));
CHECK_FTB_ERROR(FTB_Publish(client_handle, event_name, &event_prop, &event_handle));
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_FTB_PUBLISH);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_FTB_PUBLISH);
return;
}
@@ -132,13 +132,13 @@ void MPIDU_Ftb_publish_me(const char *event_name)
#define FCNAME MPL_QUOTE(FUNCNAME)
void MPIDU_Ftb_finalize(void)
{
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_FTB_FINALIZE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_FTB_FINALIZE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_FTB_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_FTB_FINALIZE);
CHECK_FTB_ERROR(FTB_Disconnect(client_handle));
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_FTB_FINALIZE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_FTB_FINALIZE);
return;
}
diff --git a/src/mpid/ch3/util/sock/.state-cache b/src/mpid/ch3/util/sock/.state-cache
index 0036717..6b9eb99 100644
--- a/src/mpid/ch3/util/sock/.state-cache
+++ b/src/mpid/ch3/util/sock/.state-cache
@@ -1,17 +1,19 @@
<dir>
-<file name="ch3u_init_sock.c" info="1447123141"/>
-<file name="ch3u_connect_sock.c" info="1447123141"/>
-<file name="ch3u_getinterfaces.c" info="1447123141"/>
-<file name="ch3usock.h" info="1447123141"/>
-<file name="findinterfaces.c" info="1447123141"/>
+<file name="findinterfaces.c" info="1478973152"/>
+<file name="ch3u_init_sock.c" info="1478973152"/>
+<file name="ch3u_connect_sock.c" info="1478973152"/>
+<file name="ch3u_getinterfaces.c" info="1478973152"/>
+<file name="ch3usock.h" info="1478973152"/>
</dir>
<data>
+<fileinfo name="findinterfaces.c">
+</fileinfo>
<fileinfo name="ch3u_init_sock.c">
</fileinfo>
<fileinfo name="ch3u_connect_sock.c">
MPID_STATE_CONNECTION_ALLOC MPIDI_CH3I_Connection_alloc
MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SOCK MPIDI_CH3I_Connect_to_root_sock
-MPID_STATE_MPIDU_SOCK_GET_CONNINFO_FROM_BC MPIDU_Sock_get_conninfo_from_bc
+MPID_STATE_MPIDI_CH3I_SOCK_GET_CONNINFO_FROM_BC MPIDI_CH3I_Sock_get_conninfo_from_bc
MPID_STATE_MPIDI_CH3U_GET_BUSINESS_CARD_SOCK MPIDI_CH3U_Get_business_card_sock
MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_ACCEPT_EVENT MPIDI_CH3_Sockconn_handle_accept_event
MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNECT_EVENT MPIDI_CH3_Sockconn_handle_connect_event
@@ -31,6 +33,4 @@ MPID_STATE_CONNECTION_DESTROY connection_destroy
</fileinfo>
<fileinfo name="ch3usock.h">
</fileinfo>
-<fileinfo name="findinterfaces.c">
-</fileinfo>
</data>
diff --git a/src/mpid/ch3/util/sock/ch3u_connect_sock.c b/src/mpid/ch3/util/sock/ch3u_connect_sock.c
index fd51607..7da3c86 100644
--- a/src/mpid/ch3/util/sock/ch3u_connect_sock.c
+++ b/src/mpid/ch3/util/sock/ch3u_connect_sock.c
@@ -88,23 +88,23 @@ static int MPIDI_CH3I_listener_port = 0;
static MPIDI_CH3I_Connection_t * MPIDI_CH3I_listener_conn = NULL;
/* Required for (socket version) upcall to Connect_to_root (see FIXME) */
-extern MPIDU_Sock_set_t MPIDI_CH3I_sock_set;
+extern MPIDI_CH3I_Sock_set_t MPIDI_CH3I_sock_set;
#undef FUNCNAME
#define FUNCNAME MPIDU_CH3I_SetupListener
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_CH3I_SetupListener( MPIDU_Sock_set_t sock_set )
+int MPIDU_CH3I_SetupListener( MPIDI_CH3I_Sock_set_t sock_set )
{
int mpi_errno = MPI_SUCCESS;
- MPIDU_Sock_t sock;
+ MPIDI_CH3I_Sock_t sock;
mpi_errno = MPIDI_CH3I_Connection_alloc(&MPIDI_CH3I_listener_conn);
if (mpi_errno != MPI_SUCCESS) {
return mpi_errno;
}
- MPIU_DBG_MSG(CH3_CONNECT,TYPICAL,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,TYPICAL,
"Setting listener connect state to CONN_STATE_LISTENING");
MPIDI_CH3I_listener_conn->sock = NULL;
MPIDI_CH3I_listener_conn->vc = NULL;
@@ -112,11 +112,11 @@ int MPIDU_CH3I_SetupListener( MPIDU_Sock_set_t sock_set )
MPIDI_CH3I_listener_conn->send_active = NULL;
MPIDI_CH3I_listener_conn->recv_active = NULL;
- mpi_errno = MPIDU_Sock_listen(sock_set, MPIDI_CH3I_listener_conn,
+ mpi_errno = MPIDI_CH3I_Sock_listen(sock_set, MPIDI_CH3I_listener_conn,
&MPIDI_CH3I_listener_port, &sock);
if (mpi_errno) return mpi_errno;
- MPIU_DBG_MSG_D(CH3_CONNECT,VERBOSE,"Listener port %d",
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Listener port %d",
MPIDI_CH3I_listener_port );
MPIDI_CH3I_listener_conn->sock = sock;
@@ -133,8 +133,8 @@ int MPIDU_CH3I_ShutdownListener( void )
int mpi_errno;
MPID_Progress_state progress_state;
- MPIU_DBG_MSG(CH3_DISCONNECT,TYPICAL,"Closing listener sock (Post_close)");
- mpi_errno = MPIDU_Sock_post_close(MPIDI_CH3I_listener_conn->sock);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,"Closing listener sock (Post_close)");
+ mpi_errno = MPIDI_CH3I_Sock_post_close(MPIDI_CH3I_listener_conn->sock);
if (mpi_errno != MPI_SUCCESS) {
return mpi_errno;
}
@@ -165,12 +165,12 @@ int MPIDI_CH3I_Connection_alloc(MPIDI_CH3I_Connection_t ** connp)
MPIDI_CH3I_Connection_t * conn = NULL;
int id_sz;
int pmi_errno;
- MPIU_CHKPMEM_DECL(2);
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_ALLOC);
+ MPIR_CHKPMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_ALLOC);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_ALLOC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_ALLOC);
- MPIU_CHKPMEM_MALLOC(conn,MPIDI_CH3I_Connection_t*,
+ MPIR_CHKPMEM_MALLOC(conn,MPIDI_CH3I_Connection_t*,
sizeof(MPIDI_CH3I_Connection_t),mpi_errno,"conn");
/* FIXME: This size is unchanging, so get it only once (at most);
@@ -184,16 +184,16 @@ int MPIDI_CH3I_Connection_alloc(MPIDI_CH3I_Connection_t ** connp)
"**pmi_get_id_length_max",
"**pmi_get_id_length_max %d", pmi_errno);
#endif
- MPIU_CHKPMEM_MALLOC(conn->pg_id,char*,id_sz + 1,mpi_errno,"conn->pg_id");
+ MPIR_CHKPMEM_MALLOC(conn->pg_id,char*,id_sz + 1,mpi_errno,"conn->pg_id");
conn->pg_id[0] = 0; /* Be careful about pg_id in case a later
error */
*connp = conn;
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_ALLOC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_ALLOC);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -211,19 +211,19 @@ int MPIDI_CH3I_Connect_to_root_sock(const char * port_name,
int mpi_errno = MPI_SUCCESS;
MPIDI_VC_t * vc;
MPIDI_CH3I_VC *vcch;
- MPIU_CHKPMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(1);
char host_description[MAX_HOST_DESCRIPTION_LEN];
int port, port_name_tag;
- MPIDU_Sock_ifaddr_t ifaddr;
+ MPIDI_CH3I_Sock_ifaddr_t ifaddr;
int hasIfaddr = 0;
MPIDI_CH3I_Connection_t * conn;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SOCK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SOCK);
/* First, create a new vc (we may use this to pass to a generic
connection routine) */
- MPIU_CHKPMEM_MALLOC(vc,MPIDI_VC_t *,sizeof(MPIDI_VC_t),mpi_errno,"vc");
+ MPIR_CHKPMEM_MALLOC(vc,MPIDI_VC_t *,sizeof(MPIDI_VC_t),mpi_errno,"vc");
/* FIXME - where does this vc get freed? */
*new_vc = vc;
@@ -233,21 +233,21 @@ int MPIDI_CH3I_Connect_to_root_sock(const char * port_name,
and the remote process to which the vc will connect). */
MPIDI_VC_Init(vc, NULL, 0);
- MPIU_DBG_MSG_S(CH3_CONNECT,VERBOSE,"Connect to root with portstring %s",
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_CONNECT,VERBOSE,"Connect to root with portstring %s",
port_name );
- mpi_errno = MPIDU_Sock_get_conninfo_from_bc( port_name, host_description,
+ mpi_errno = MPIDI_CH3I_Sock_get_conninfo_from_bc( port_name, host_description,
sizeof(host_description),
&port, &ifaddr, &hasIfaddr );
if (mpi_errno) {
MPIR_ERR_POP(mpi_errno);
}
mpi_errno = MPIDI_GetTagFromPort(port_name, &port_name_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
+ if (mpi_errno != MPL_STR_SUCCESS) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**argstr_port_name_tag");
}
- MPIU_DBG_MSG_D(CH3_CONNECT,VERBOSE,"port tag %d",port_name_tag);
+ MPL_DBG_MSG_D(MPIDI_CH3_DBG_CONNECT,VERBOSE,"port tag %d",port_name_tag);
mpi_errno = MPIDI_CH3I_Connection_alloc(&conn);
if (mpi_errno != MPI_SUCCESS) {
@@ -262,9 +262,9 @@ int MPIDI_CH3I_Connect_to_root_sock(const char * port_name,
socket for a connection and return the connection. That will
keep the socket set out of the general ch3 code, even if this
is the socket utility functions. */
- MPIU_DBG_MSG_FMT(CH3_CONNECT,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,VERBOSE,(MPL_DBG_FDEST,
"posting connect to host %s, port %d", host_description, port ));
- mpi_errno = MPIDU_Sock_post_connect(MPIDI_CH3I_sock_set, conn,
+ mpi_errno = MPIDI_CH3I_Sock_post_connect(MPIDI_CH3I_sock_set, conn,
host_description, port, &conn->sock);
if (mpi_errno == MPI_SUCCESS)
{
@@ -275,7 +275,7 @@ int MPIDI_CH3I_Connect_to_root_sock(const char * port_name,
vcch->conn = conn;
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTING;
conn->vc = vc;
- MPIU_DBG_CONNSTATECHANGE(vc,conn,CONN_STATE_CONNECT_ACCEPT);
+ MPL_DBG_CONNSTATECHANGE(vc,conn,CONN_STATE_CONNECT_ACCEPT);
conn->state = CONN_STATE_CONNECT_ACCEPT;
conn->send_active = NULL;
conn->recv_active = NULL;
@@ -287,13 +287,13 @@ int MPIDI_CH3I_Connect_to_root_sock(const char * port_name,
/* --BEGIN ERROR HANDLING-- */
else
{
- if (MPIR_ERR_GET_CLASS(mpi_errno) == MPIDU_SOCK_ERR_BAD_HOST)
+ if (MPIR_ERR_GET_CLASS(mpi_errno) == MPIDI_CH3I_SOCK_ERR_BAD_HOST)
{
mpi_errno = MPIR_Err_create_code(
MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**ch3|sock|badhost",
"**ch3|sock|badhost %s %d %s", conn->pg_id, conn->vc->pg_rank, port_name);
}
- else if (MPIR_ERR_GET_CLASS(mpi_errno) == MPIDU_SOCK_ERR_CONN_FAILED)
+ else if (MPIR_ERR_GET_CLASS(mpi_errno) == MPIDI_CH3I_SOCK_ERR_CONN_FAILED)
{
mpi_errno = MPIR_Err_create_code(
MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**ch3|sock|connrefused",
@@ -305,16 +305,16 @@ int MPIDI_CH3I_Connect_to_root_sock(const char * port_name,
}
vcch = &vc->ch;
vcch->state = MPIDI_CH3I_VC_STATE_FAILED;
- MPIU_Free(conn);
+ MPL_free(conn);
goto fn_fail;
}
/* --END ERROR HANDLING-- */
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SOCK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SOCK);
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
@@ -329,12 +329,12 @@ int MPIDI_CH3I_Connect_to_root_sock(const char * port_name,
/* The host_description should be of length MAX_HOST_DESCRIPTION_LEN */
#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_conninfo_from_bc
+#define FUNCNAME MPIDI_CH3I_Sock_get_conninfo_from_bc
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_conninfo_from_bc( const char *bc,
+int MPIDI_CH3I_Sock_get_conninfo_from_bc( const char *bc,
char *host_description, int maxlen,
- int *port, MPIDU_Sock_ifaddr_t *ifaddr,
+ int *port, MPIDI_CH3I_Sock_ifaddr_t *ifaddr,
int *hasIfaddr )
{
int mpi_errno = MPI_SUCCESS;
@@ -342,31 +342,31 @@ int MPIDU_Sock_get_conninfo_from_bc( const char *bc,
#if !defined(HAVE_WINDOWS_H) && defined(HAVE_INET_PTON)
char ifname[256];
#endif
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_CONNINFO_FROM_BC);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_GET_CONNINFO_FROM_BC);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_CONNINFO_FROM_BC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_GET_CONNINFO_FROM_BC);
- str_errno = MPIU_Str_get_string_arg(bc, MPIDI_CH3I_HOST_DESCRIPTION_KEY,
+ str_errno = MPL_str_get_string_arg(bc, MPIDI_CH3I_HOST_DESCRIPTION_KEY,
host_description, maxlen);
- if (str_errno != MPIU_STR_SUCCESS) {
+ if (str_errno != MPL_STR_SUCCESS) {
/* --BEGIN ERROR HANDLING */
- if (str_errno == MPIU_STR_FAIL) {
+ if (str_errno == MPL_STR_FAIL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**argstr_missinghost");
}
else {
- /* MPIU_STR_TRUNCATED or MPIU_STR_NONEM */
+ /* MPL_STR_TRUNCATED or MPL_STR_NONEM */
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**argstr_hostd");
}
/* --END ERROR HANDLING-- */
}
- str_errno = MPIU_Str_get_int_arg(bc, MPIDI_CH3I_PORT_KEY, port);
- if (str_errno != MPIU_STR_SUCCESS) {
+ str_errno = MPL_str_get_int_arg(bc, MPIDI_CH3I_PORT_KEY, port);
+ if (str_errno != MPL_STR_SUCCESS) {
/* --BEGIN ERROR HANDLING */
- if (str_errno == MPIU_STR_FAIL) {
+ if (str_errno == MPL_STR_FAIL) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**argstr_missingport");
}
else {
- /* MPIU_STR_TRUNCATED or MPIU_STR_NONEM */
+ /* MPL_STR_TRUNCATED or MPL_STR_NONEM */
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**argstr_port");
}
/* --END ERROR HANDLING-- */
@@ -381,9 +381,9 @@ int MPIDU_Sock_get_conninfo_from_bc( const char *bc,
be identified or written. See also channels/sock/ch3_progress.c */
*hasIfaddr = 0;
#if !defined(HAVE_WINDOWS_H) && defined(HAVE_INET_PTON)
- str_errno = MPIU_Str_get_string_arg(bc, MPIDI_CH3I_IFNAME_KEY,
+ str_errno = MPL_str_get_string_arg(bc, MPIDI_CH3I_IFNAME_KEY,
ifname, sizeof(ifname) );
- if (str_errno == MPIU_STR_SUCCESS) {
+ if (str_errno == MPL_STR_SUCCESS) {
/* Convert ifname into 4-byte ip address */
/* Use AF_INET6 for IPv6 (inet_pton may still be used).
An address with more than 3 :'s is an IPv6 address */
@@ -406,7 +406,7 @@ int MPIDU_Sock_get_conninfo_from_bc( const char *bc,
#endif
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_CONNINFO_FROM_BC);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_GET_CONNINFO_FROM_BC);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -432,27 +432,27 @@ int MPIDI_CH3U_Get_business_card_sock(int myRank,
char **bc_val_p, int *val_max_sz_p)
{
int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
- MPIDU_Sock_ifaddr_t ifaddr;
+ int str_errno = MPL_STR_SUCCESS;
+ MPIDI_CH3I_Sock_ifaddr_t ifaddr;
char ifnamestr[MAX_HOST_DESCRIPTION_LEN];
char *bc_orig = *bc_val_p;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_GET_BUSINESS_CARD_SOCK);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_GET_BUSINESS_CARD_SOCK);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_GET_BUSINESS_CARD_SOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_GET_BUSINESS_CARD_SOCK);
MPIDU_CH3U_GetSockInterfaceAddr( myRank, ifnamestr, sizeof(ifnamestr), &ifaddr );
- str_errno = MPIU_Str_add_int_arg(bc_val_p, val_max_sz_p,
+ str_errno = MPL_str_add_int_arg(bc_val_p, val_max_sz_p,
MPIDI_CH3I_PORT_KEY, MPIDI_CH3I_listener_port);
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
- str_errno = MPIU_Str_add_string_arg(bc_val_p, val_max_sz_p,
+ str_errno = MPL_str_add_string_arg(bc_val_p, val_max_sz_p,
MPIDI_CH3I_HOST_DESCRIPTION_KEY, ifnamestr );
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
@@ -462,7 +462,7 @@ int MPIDI_CH3U_Get_business_card_sock(int myRank,
/* FIXME: We don't make use of the ifname in Windows in order to
provide backward compatibility with the (undocumented) host
description string used by the socket connection routine
- MPIDU_Sock_post_connect. We need to change to an interface-address
+ MPIDI_CH3I_Sock_post_connect. We need to change to an interface-address
(already resolved) based description for better scalability and
to eliminate reliance on fragile DNS services. Note that this is
also more scalable, since the DNS server may serialize address
@@ -481,13 +481,13 @@ int MPIDI_CH3U_Get_business_card_sock(int myRank,
p = (unsigned char *)(info->h_addr_list[0]);
MPL_snprintf( ifname, sizeof(ifname), "%u.%u.%u.%u",
p[0], p[1], p[2], p[3] );
- MPIU_DBG_MSG_S(CH3_CONNECT,VERBOSE,"ifname = %s",ifname );
- str_errno = MPIU_Str_add_string_arg( bc_val_p,
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_CONNECT,VERBOSE,"ifname = %s",ifname );
+ str_errno = MPL_str_add_string_arg( bc_val_p,
val_max_sz_p,
MPIDI_CH3I_IFNAME_KEY,
ifname );
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
}
@@ -502,22 +502,22 @@ int MPIDI_CH3U_Get_business_card_sock(int myRank,
p = (unsigned char *)(ifaddr.ifaddr);
MPL_snprintf( ifname, sizeof(ifname), "%u.%u.%u.%u",
p[0], p[1], p[2], p[3] );
- MPIU_DBG_MSG_S(CH3_CONNECT,VERBOSE,"ifname = %s",ifname );
- str_errno = MPIU_Str_add_string_arg( bc_val_p,
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_CONNECT,VERBOSE,"ifname = %s",ifname );
+ str_errno = MPL_str_add_string_arg( bc_val_p,
val_max_sz_p,
MPIDI_CH3I_IFNAME_KEY,
ifname );
if (str_errno) {
- MPIR_ERR_CHKANDJUMP(str_errno == MPIU_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
+ MPIR_ERR_CHKANDJUMP(str_errno == MPL_STR_NOMEM, mpi_errno, MPI_ERR_OTHER, "**buscard_len");
MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**buscard");
}
}
}
- MPIU_DBG_MSG_S(CH3_CONNECT,TYPICAL,"business card is %s", bc_orig );
+ MPL_DBG_MSG_S(MPIDI_CH3_DBG_CONNECT,TYPICAL,"business card is %s", bc_orig );
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_GET_BUSINESS_CARD_SOCK);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_GET_BUSINESS_CARD_SOCK);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -534,7 +534,7 @@ static int connection_post_send_pkt_and_pgid(MPIDI_CH3I_Connection_t * conn);
static int connection_post_sendq_req(MPIDI_CH3I_Connection_t * conn);
static void connection_destroy(MPIDI_CH3I_Connection_t * conn);
-/* This routine is called in response to an MPIDU_SOCK_OP_ACCEPT event
+/* This routine is called in response to an MPIDI_CH3I_SOCK_OP_ACCEPT event
in ch3_progress */
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3_Sockconn_handle_accept_event
@@ -544,22 +544,22 @@ int MPIDI_CH3_Sockconn_handle_accept_event( void )
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_Connection_t * conn;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_ACCEPT_EVENT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_ACCEPT_EVENT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_ACCEPT_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_ACCEPT_EVENT);
mpi_errno = MPIDI_CH3I_Connection_alloc(&conn);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
- mpi_errno = MPIDU_Sock_accept(MPIDI_CH3I_listener_conn->sock,
+ mpi_errno = MPIDI_CH3I_Sock_accept(MPIDI_CH3I_listener_conn->sock,
MPIDI_CH3I_sock_set, conn, &conn->sock);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**ch3|sock|accept");
}
conn->vc = NULL;
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LRECV_PKT);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LRECV_PKT);
conn->state = CONN_STATE_OPEN_LRECV_PKT;
conn->send_active = NULL;
conn->recv_active = NULL;
@@ -570,7 +570,7 @@ int MPIDI_CH3_Sockconn_handle_accept_event( void )
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_ACCEPT_EVENT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_ACCEPT_EVENT);
return mpi_errno;
fn_fail:
@@ -585,9 +585,9 @@ int MPIDI_CH3_Sockconn_handle_connect_event( MPIDI_CH3I_Connection_t *conn,
int event_error )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNECT_EVENT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNECT_EVENT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNECT_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNECT_EVENT);
/* --BEGIN ERROR HANDLING-- */
if (event_error != MPI_SUCCESS) {
@@ -602,7 +602,7 @@ int MPIDI_CH3_Sockconn_handle_connect_event( MPIDI_CH3I_Connection_t *conn,
MPIDI_CH3I_Pkt_sc_open_req_t *openpkt =
(MPIDI_CH3I_Pkt_sc_open_req_t *)&conn->pkt.type;
if(conn->state == CONN_STATE_CONNECTING){
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_CSEND);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_CSEND);
conn->state = CONN_STATE_OPEN_CSEND;
}
MPIDI_Pkt_init(openpkt, MPIDI_CH3I_PKT_SC_OPEN_REQ);
@@ -618,8 +618,8 @@ int MPIDI_CH3_Sockconn_handle_connect_event( MPIDI_CH3I_Connection_t *conn,
MPIDI_CH3I_Pkt_sc_conn_accept_t *acceptpkt =
(MPIDI_CH3I_Pkt_sc_conn_accept_t *)&conn->pkt.type;
- MPIU_Assert(conn->state == CONN_STATE_CONNECT_ACCEPT);
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_CSEND);
+ MPIR_Assert(conn->state == CONN_STATE_CONNECT_ACCEPT);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_CSEND);
conn->state = CONN_STATE_OPEN_CSEND;
/* pkt contains port name tag. In memory debugging mode,
@@ -637,7 +637,7 @@ int MPIDI_CH3_Sockconn_handle_connect_event( MPIDI_CH3I_Connection_t *conn,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNECT_EVENT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNECT_EVENT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -650,29 +650,29 @@ int MPIDI_CH3_Sockconn_handle_connect_event( MPIDI_CH3I_Connection_t *conn,
int MPIDI_CH3_Sockconn_handle_close_event( MPIDI_CH3I_Connection_t * conn )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CLOSE_EVENT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CLOSE_EVENT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CLOSE_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CLOSE_EVENT);
/* If the conn pointer is NULL then the close was intentional */
/* FIXME: What does the above comment mean? */
if (conn != NULL) {
if (conn->state == CONN_STATE_CLOSING) {
- MPIU_Assert(conn->send_active == NULL);
- MPIU_Assert(conn->recv_active == NULL);
+ MPIR_Assert(conn->send_active == NULL);
+ MPIR_Assert(conn->recv_active == NULL);
if (conn->vc != NULL) {
MPIDI_CH3I_VC *vcch = &conn->vc->ch;
- conn->sock = MPIDU_SOCK_INVALID_SOCK;
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CLOSED);
+ conn->sock = MPIDI_CH3I_SOCK_INVALID_SOCK;
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CLOSED);
conn->state = CONN_STATE_CLOSED;
/* Only manipulate vcch if conn was not the loser in a
head-to-head resolution. */
if (vcch && vcch->conn == conn) {
- MPIU_DBG_VCCHSTATECHANGE(conn->vc,VC_STATE_UNCONNECTED);
+ MPL_DBG_VCCHSTATECHANGE(conn->vc,VC_STATE_UNCONNECTED);
vcch->state = MPIDI_CH3I_VC_STATE_UNCONNECTED;
- vcch->sock = MPIDU_SOCK_INVALID_SOCK;
+ vcch->sock = MPIDI_CH3I_SOCK_INVALID_SOCK;
/* This step is important; without this, test
disconnect_reconnect fails because the vc->ch.conn
@@ -692,16 +692,16 @@ int MPIDI_CH3_Sockconn_handle_close_event( MPIDI_CH3I_Connection_t * conn )
}
else if(conn->state == CONN_STATE_DISCARD) {
/* post close, so the socket is closed and memmory leaks are avoided */
- MPIU_DBG_MSG(CH3_DISCONNECT,TYPICAL,"CLosing sock (Post_close)");
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,"CLosing sock (Post_close)");
conn->state = CONN_STATE_CLOSING;
- mpi_errno = MPIDU_Sock_post_close(conn->sock);
+ mpi_errno = MPIDI_CH3I_Sock_post_close(conn->sock);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
goto fn_exit;
}
else {
- MPIU_Assert(conn->state == CONN_STATE_LISTENING);
+ MPIR_Assert(conn->state == CONN_STATE_LISTENING);
MPIDI_CH3I_listener_conn = NULL;
MPIDI_CH3I_listener_port = 0;
@@ -711,7 +711,7 @@ int MPIDI_CH3_Sockconn_handle_close_event( MPIDI_CH3I_Connection_t * conn )
connection_destroy(conn);
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CLOSE_EVENT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CLOSE_EVENT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -727,9 +727,9 @@ int MPIDI_CH3_Sockconn_handle_close_event( MPIDI_CH3I_Connection_t * conn )
int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONN_EVENT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONN_EVENT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONN_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONN_EVENT);
/* FIXME: Is there an assumption about conn->state? */
@@ -738,10 +738,10 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
(MPIDI_CH3I_Pkt_sc_open_req_t *)&conn->pkt.type;
/* Answer to fixme: it appears from the control flow that this is
the required state) */
- MPIU_Assert( conn->state == CONN_STATE_OPEN_LRECV_PKT);
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LRECV_DATA);
+ MPIR_Assert( conn->state == CONN_STATE_OPEN_LRECV_PKT);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LRECV_DATA);
conn->state = CONN_STATE_OPEN_LRECV_DATA;
- mpi_errno = MPIDU_Sock_post_read(conn->sock, conn->pg_id,
+ mpi_errno = MPIDI_CH3I_Sock_post_read(conn->sock, conn->pg_id,
openpkt->pg_id_len,
openpkt->pg_id_len, NULL);
if (mpi_errno != MPI_SUCCESS) {
@@ -757,7 +757,7 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
MPIDI_CH3I_Pkt_sc_open_resp_t *openresp =
(MPIDI_CH3I_Pkt_sc_open_resp_t *)&conn->pkt.type;
- vc = (MPIDI_VC_t *) MPIU_Malloc(sizeof(MPIDI_VC_t));
+ vc = (MPIDI_VC_t *) MPL_malloc(sizeof(MPIDI_VC_t));
/* --BEGIN ERROR HANDLING-- */
if (vc == NULL) {
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER,
@@ -770,7 +770,7 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
MPIDI_VC_Init(vc, NULL, 0);
vcch = &vc->ch;
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTING;
vcch->sock = conn->sock;
vcch->conn = conn;
@@ -781,7 +781,7 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
openresp->ack = TRUE;
/* FIXME: Possible ambiguous state (two ways to get to OPEN_LSEND) */
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LSEND);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LSEND);
conn->state = CONN_STATE_OPEN_LSEND;
mpi_errno = connection_post_send_pkt(conn);
if (mpi_errno != MPI_SUCCESS) {
@@ -799,13 +799,13 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
/* FIXME: is this the correct assert? */
if (openpkt->ack && conn->state != CONN_STATE_DISCARD) {
- MPIU_Assert( conn->state == CONN_STATE_OPEN_CRECV );
+ MPIR_Assert( conn->state == CONN_STATE_OPEN_CRECV );
MPIDI_CH3I_VC *vcch = &conn->vc->ch;
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CONNECTED);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CONNECTED);
conn->state = CONN_STATE_CONNECTED;
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTED;
- MPIU_Assert(vcch->conn == conn);
- MPIU_Assert(vcch->sock == conn->sock);
+ MPIR_Assert(vcch->conn == conn);
+ MPIR_Assert(vcch->sock == conn->sock);
mpi_errno = connection_post_recv_pkt(conn);
if (mpi_errno != MPI_SUCCESS) {
@@ -830,14 +830,14 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
a head-to-head connection. The VC is still in use, but by
another sochekt connection. The refcount is not incremented
By chaning the assosiated connection. */
- /* MPIU_Assert( conn->vc->ch.conn != conn ); */
+ /* MPIR_Assert( conn->vc->ch.conn != conn ); */
/* Set the candidate vc for this connection to NULL (we
are discarding this connection because (I think) we
are performing a head-to-head connection, and this
connection is being rejected in favor of the connection
from the other side. */
if (vcch->conn == conn) vcch->conn = NULL;
- MPIU_DBG_CONNSTATECHANGE_MSG(conn->vc,conn,CONN_STATE_CLOSING,
+ MPL_DBG_CONNSTATECHANGE_MSG(conn->vc,conn,CONN_STATE_CLOSING,
"because ack on OPEN_CRECV was false");
conn->vc = NULL;
conn->state = CONN_STATE_CLOSING;
@@ -847,8 +847,8 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
no longer needed and should be closed. This is initiated with the post
close command. This also caused that the socket is removed from the
socket set, so no more polling on this socket*/
- MPIU_DBG_MSG(CH3_DISCONNECT,TYPICAL,"CLosing sock (Post_close)");
- mpi_errno = MPIDU_Sock_post_close(conn->sock);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,"CLosing sock (Post_close)");
+ mpi_errno = MPIDI_CH3I_Sock_post_close(conn->sock);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
@@ -856,7 +856,7 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
}
/* --BEGIN ERROR HANDLING-- */
else {
- MPIU_DBG_STMT(CH3_CONNECT,VERBOSE,MPIDI_DBG_Print_packet(&conn->pkt));
+ MPL_DBG_STMT(MPIDI_CH3_DBG_CONNECT,VERBOSE,MPIDI_DBG_Print_packet(&conn->pkt));
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_INTERN,
"**ch3|sock|badpacket", "**ch3|sock|badpacket %d", conn->pkt.type);
goto fn_fail;
@@ -865,7 +865,7 @@ int MPIDI_CH3_Sockconn_handle_conn_event( MPIDI_CH3I_Connection_t * conn )
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONN_EVENT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONN_EVENT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -887,9 +887,9 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
(MPIDI_CH3I_Pkt_sc_open_req_t *)&conn->pkt.type;
MPIDI_CH3I_Pkt_sc_open_resp_t *openresp =
(MPIDI_CH3I_Pkt_sc_open_resp_t *)&conn->pkt.type;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNOPEN_EVENT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNOPEN_EVENT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNOPEN_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNOPEN_EVENT);
/* Look up pg based on conn->pg_id */
mpi_errno = MPIDI_PG_Find(conn->pg_id, &pg);
@@ -902,12 +902,12 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
/* We require that the packet be the open_req type */
pg_rank = openpkt->pg_rank;
MPIDI_PG_Get_vc_set_active(pg, pg_rank, &vc);
- MPIU_Assert(vc->pg_rank == pg_rank);
+ MPIR_Assert(vc->pg_rank == pg_rank);
if(pg->finalize == 1) {
MPIDI_Pkt_init(openresp, MPIDI_CH3I_PKT_SC_OPEN_RESP);
openresp->ack = FALSE;
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LSEND);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LSEND);
conn->state = CONN_STATE_OPEN_LSEND;
mpi_errno = connection_post_send_pkt(conn);
if (mpi_errno != MPI_SUCCESS) {
@@ -919,7 +919,7 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
vcch = &vc->ch;
if (vcch->conn == NULL) {
/* no head-to-head connects, accept the connection */
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTING;
vcch->sock = conn->sock;
vcch->conn = conn;
@@ -934,16 +934,16 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
/* the other process is in the same comm_world; just compare the
ranks */
if (MPIR_Process.comm_world->rank < pg_rank) {
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST,
"vc=%p,conn=%p:Accept head-to-head connection (my process group), discarding vcch->conn=%p",vc,conn, vcch->conn));
/* mark old connection */
MPIDI_CH3I_Connection_t *old_conn = vcch->conn;
- MPIU_DBG_CONNSTATECHANGE(old_conn,old_conn,CONN_STATE_DISCARD);
+ MPL_DBG_CONNSTATECHANGE(old_conn,old_conn,CONN_STATE_DISCARD);
old_conn->state = CONN_STATE_DISCARD;
/* accept connection */
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTING;
vcch->sock = conn->sock;
vcch->conn = conn;
@@ -954,7 +954,7 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
}
else {
/* refuse connection */
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST,
"vc=%p,conn=%p:Refuse head-to-head connection (my process group)",vc,conn));
MPIDI_Pkt_init(openresp, MPIDI_CH3I_PKT_SC_OPEN_RESP);
openresp->ack = FALSE;
@@ -964,14 +964,14 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
/* the two processes are in different comm_worlds; compare their
unique pg_ids. */
if (strcmp(MPIDI_Process.my_pg->id, pg->id) < 0) {
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST,
"vc=%p,conn=%p:Accept head-to-head connection (two process groups), discarding vcch->conn=%p",vc,conn, vcch->conn));
/* mark old connection */
MPIDI_CH3I_Connection_t *old_conn = vcch->conn;
- MPIU_DBG_CONNSTATECHANGE(old_conn,old_conn,CONN_STATE_DISCARD);
+ MPL_DBG_CONNSTATECHANGE(old_conn,old_conn,CONN_STATE_DISCARD);
old_conn->state = CONN_STATE_DISCARD;
/* accept connection */
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTING;
vcch->sock = conn->sock;
vcch->conn = conn;
@@ -982,7 +982,7 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
}
else {
/* refuse connection */
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CONNECT,TYPICAL,(MPL_DBG_FDEST,
"vc=%p,conn=%p:Refuse head-to-head connection (two process groups)",vc,conn));
MPIDI_Pkt_init(openresp, MPIDI_CH3I_PKT_SC_OPEN_RESP);
openresp->ack = FALSE;
@@ -990,7 +990,7 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
}
}
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LSEND);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_LSEND);
conn->state = CONN_STATE_OPEN_LSEND;
mpi_errno = connection_post_send_pkt(conn);
if (mpi_errno != MPI_SUCCESS) {
@@ -999,7 +999,7 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNOPEN_EVENT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNOPEN_EVENT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1013,15 +1013,15 @@ int MPIDI_CH3_Sockconn_handle_connopen_event( MPIDI_CH3I_Connection_t * conn )
int MPIDI_CH3_Sockconn_handle_connwrite( MPIDI_CH3I_Connection_t * conn )
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNWRITE);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNWRITE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNWRITE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNWRITE);
if (conn->state == CONN_STATE_OPEN_CSEND || conn->state == CONN_STATE_DISCARD) {
/* finished sending open request packet */
/* post receive for open response packet */
if(conn->state == CONN_STATE_OPEN_CSEND){
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_CRECV);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_OPEN_CRECV);
conn->state = CONN_STATE_OPEN_CRECV;
}
mpi_errno = connection_post_recv_pkt(conn);
@@ -1036,9 +1036,9 @@ int MPIDI_CH3_Sockconn_handle_connwrite( MPIDI_CH3I_Connection_t * conn )
if (openresp->ack == TRUE) {
MPIDI_CH3I_VC *vcch = &conn->vc->ch;
/* post receive for packet header */
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CONNECTED);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CONNECTED);
conn->state = CONN_STATE_CONNECTED;
- MPIU_DBG_VCCHSTATECHANGE(conn->vc,VC_STATE_CONNECTED);
+ MPL_DBG_VCCHSTATECHANGE(conn->vc,VC_STATE_CONNECTED);
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTED;
mpi_errno = connection_post_recv_pkt(conn);
if (mpi_errno != MPI_SUCCESS) {
@@ -1053,7 +1053,7 @@ int MPIDI_CH3_Sockconn_handle_connwrite( MPIDI_CH3I_Connection_t * conn )
}
else {
/* head-to-head connections - close this connection */
- MPIU_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CLOSING);
+ MPL_DBG_CONNSTATECHANGE(conn->vc,conn,CONN_STATE_CLOSING);
/* FIXME: the connect side of this sets conn->vc to NULL. Why is
this different? The code that checks CONN_STATE_CLOSING uses
conn == NULL to identify intentional close, which this
@@ -1063,8 +1063,8 @@ int MPIDI_CH3_Sockconn_handle_connwrite( MPIDI_CH3I_Connection_t * conn )
/* zero out the vc to prevent trouble in _handle_close_event */
conn->vc = NULL;
- MPIU_DBG_MSG(CH3_DISCONNECT,TYPICAL,"Closing sock2 (Post_close)");
- mpi_errno = MPIDU_Sock_post_close(conn->sock);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_DISCONNECT,TYPICAL,"Closing sock2 (Post_close)");
+ mpi_errno = MPIDI_CH3I_Sock_post_close(conn->sock);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,
"**sock_post_close");
@@ -1073,7 +1073,7 @@ int MPIDI_CH3_Sockconn_handle_connwrite( MPIDI_CH3I_Connection_t * conn )
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNWRITE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3_SOCKCONN_HANDLE_CONNWRITE);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1090,21 +1090,21 @@ int MPIDI_CH3I_VC_post_sockconnect(MPIDI_VC_t * vc)
int mpi_errno = MPI_SUCCESS;
char val[MPIDI_MAX_KVS_VALUE_LEN];
MPIDI_CH3I_VC *vcch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT);
/* MPIDI_PG_GetConnString() can block & release the lock for
* the current thread. Prevent other threads from trying to
* obtain the ConnString by setting the VC to *CONNECTING.
*/
if(vcch->state == MPIDI_CH3I_VC_STATE_UNCONNECTED){
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_CONNECTING);
vcch->state = MPIDI_CH3I_VC_STATE_CONNECTING;
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"vc=(%p) Going ahead to obtain connstring", vc);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CONNECT,TYPICAL,"vc=(%p) Going ahead to obtain connstring", vc);
}else{
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"MT: vc=(%p) is already connecting/ed", vc);
- MPIU_DBG_MSG(CH3_CONNECT,TYPICAL,"Aborting posting a connect");
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CONNECT,TYPICAL,"MT: vc=(%p) is already connecting/ed", vc);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,TYPICAL,"Aborting posting a connect");
/*************** MT *****************/
/* There are 3 cases here,
* 1) Another thread posted a connect while the current thread
@@ -1137,7 +1137,7 @@ int MPIDI_CH3I_VC_post_sockconnect(MPIDI_VC_t * vc)
mpi_errno = MPIDI_CH3I_Sock_connect( vc, val, sizeof(val) );
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT);
return mpi_errno;
fn_fail:
goto fn_exit;
@@ -1158,20 +1158,20 @@ int MPIDI_CH3I_VC_post_sockconnect(MPIDI_VC_t * vc)
int MPIDI_CH3I_Sock_connect( MPIDI_VC_t *vc, const char val[], int vallen )
{
char host_description[MAX_HOST_DESCRIPTION_LEN];
- MPIDU_Sock_ifaddr_t ifaddr;
+ MPIDI_CH3I_Sock_ifaddr_t ifaddr;
int hasIfaddr = 0, port;
MPIDI_CH3I_Connection_t * conn = 0;
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vcch = &vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_CONNECT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3I_SOCK_CONNECT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3I_SOCK_CONNECT);
if(vcch->state == MPIDI_CH3I_VC_STATE_CONNECTING){
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"Posting a connect for vc=(%p)", vc);
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CONNECT,TYPICAL,"Posting a connect for vc=(%p)", vc);
}else{
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"MT: vc=(%p) is already connected", vc);
- MPIU_DBG_MSG(CH3_CONNECT,TYPICAL,"Aborting posting a connect");
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CONNECT,TYPICAL,"MT: vc=(%p) is already connected", vc);
+ MPL_DBG_MSG(MPIDI_CH3_DBG_CONNECT,TYPICAL,"Aborting posting a connect");
/*************** MT *****************/
/* 1) Another thread received a connect from the same proc
* the current thread is connecting to and opened a
@@ -1188,7 +1188,7 @@ int MPIDI_CH3I_Sock_connect( MPIDI_VC_t *vc, const char val[], int vallen )
goto fn_exit;
}
- mpi_errno = MPIDU_Sock_get_conninfo_from_bc( val, host_description,
+ mpi_errno = MPIDI_CH3I_Sock_get_conninfo_from_bc( val, host_description,
sizeof(host_description),
&port, &ifaddr, &hasIfaddr );
if (mpi_errno) {
@@ -1205,20 +1205,20 @@ int MPIDI_CH3I_Sock_connect( MPIDI_VC_t *vc, const char val[], int vallen )
address. */
#ifndef HAVE_WINDOWS_H
if (hasIfaddr) {
- mpi_errno = MPIDU_Sock_post_connect_ifaddr(MPIDI_CH3I_sock_set,
+ mpi_errno = MPIDI_CH3I_Sock_post_connect_ifaddr(MPIDI_CH3I_sock_set,
conn, &ifaddr, port,
&conn->sock);
}
else
#endif
{
- mpi_errno = MPIDU_Sock_post_connect(MPIDI_CH3I_sock_set, conn,
+ mpi_errno = MPIDI_CH3I_Sock_post_connect(MPIDI_CH3I_sock_set, conn,
host_description, port,
&conn->sock);
}
if (mpi_errno == MPI_SUCCESS)
{
- MPIU_DBG_CONNSTATECHANGE(vc,conn,CONN_STATE_CONNECTING);
+ MPL_DBG_CONNSTATECHANGE(vc,conn,CONN_STATE_CONNECTING);
vcch->sock = conn->sock;
vcch->conn = conn;
conn->vc = vc;
@@ -1229,7 +1229,7 @@ int MPIDI_CH3I_Sock_connect( MPIDI_VC_t *vc, const char val[], int vallen )
/* --BEGIN ERROR HANDLING-- */
else
{
- MPIU_DBG_VCCHSTATECHANGE(vc,VC_STATE_FAILED);
+ MPL_DBG_VCCHSTATECHANGE(vc,VC_STATE_FAILED);
vcch->state = MPIDI_CH3I_VC_STATE_FAILED;
mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**ch3|sock|postconnect",
"**ch3|sock|postconnect %d %d %s", MPIR_Process.comm_world->rank, vc->pg_rank, val);
@@ -1242,7 +1242,7 @@ int MPIDI_CH3I_Sock_connect( MPIDI_VC_t *vc, const char val[], int vallen )
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_CONNECT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3I_SOCK_CONNECT);
return mpi_errno;
fn_fail:
/* --BEGIN ERROR HANDLING-- */
@@ -1265,18 +1265,18 @@ int MPIDI_CH3I_Sock_connect( MPIDI_VC_t *vc, const char val[], int vallen )
static int connection_post_recv_pkt(MPIDI_CH3I_Connection_t * conn)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_POST_RECV_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_POST_RECV_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_POST_RECV_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_POST_RECV_PKT);
- mpi_errno = MPIDU_Sock_post_read(conn->sock, &conn->pkt, sizeof(conn->pkt),
+ mpi_errno = MPIDI_CH3I_Sock_post_read(conn->sock, &conn->pkt, sizeof(conn->pkt),
sizeof(conn->pkt), NULL);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_POST_RECV_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_POST_RECV_PKT);
return mpi_errno;
}
@@ -1288,19 +1288,19 @@ static int connection_post_recv_pkt(MPIDI_CH3I_Connection_t * conn)
static int connection_post_send_pkt(MPIDI_CH3I_Connection_t * conn)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_POST_SEND_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_POST_SEND_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_POST_SEND_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_POST_SEND_PKT);
- MPIU_DBG_PKT(conn,&conn->pkt,"connect");
- mpi_errno = MPIDU_Sock_post_write(conn->sock, &conn->pkt, sizeof(conn->pkt),
+ MPL_DBG_PKT(conn,&conn->pkt,"connect");
+ mpi_errno = MPIDI_CH3I_Sock_post_write(conn->sock, &conn->pkt, sizeof(conn->pkt),
sizeof(conn->pkt), NULL);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_POST_SEND_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_POST_SEND_PKT);
return mpi_errno;
}
@@ -1311,9 +1311,9 @@ static int connection_post_send_pkt(MPIDI_CH3I_Connection_t * conn)
static int connection_post_send_pkt_and_pgid(MPIDI_CH3I_Connection_t * conn)
{
int mpi_errno;
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_POST_SEND_PKT_AND_PGID);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_POST_SEND_PKT_AND_PGID);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_POST_SEND_PKT_AND_PGID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_POST_SEND_PKT_AND_PGID);
conn->iov[0].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) &conn->pkt;
conn->iov[0].MPL_IOV_LEN = (int) sizeof(conn->pkt);
@@ -1321,14 +1321,14 @@ static int connection_post_send_pkt_and_pgid(MPIDI_CH3I_Connection_t * conn)
conn->iov[1].MPL_IOV_BUF = (MPL_IOV_BUF_CAST) MPIDI_Process.my_pg->id;
conn->iov[1].MPL_IOV_LEN = (int) strlen(MPIDI_Process.my_pg->id) + 1;
- MPIU_DBG_PKT(conn,&conn->pkt,"connect-pgid");
- mpi_errno = MPIDU_Sock_post_writev(conn->sock, conn->iov, 2, NULL);
+ MPL_DBG_PKT(conn,&conn->pkt,"connect-pgid");
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(conn->sock, conn->iov, 2, NULL);
if (mpi_errno != MPI_SUCCESS) {
MPIR_ERR_POP(mpi_errno);
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_POST_SEND_PKT_AND_PGID);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_POST_SEND_PKT_AND_PGID);
return mpi_errno;
}
@@ -1341,16 +1341,16 @@ static int connection_post_sendq_req(MPIDI_CH3I_Connection_t * conn)
{
int mpi_errno = MPI_SUCCESS;
MPIDI_CH3I_VC *vcch = &conn->vc->ch;
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_POST_SENDQ_REQ);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_POST_SENDQ_REQ);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_POST_SENDQ_REQ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_POST_SENDQ_REQ);
/* post send of next request on the send queue */
conn->send_active = MPIDI_CH3I_SendQ_head(vcch); /* MT */
if (conn->send_active != NULL)
{
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"conn=%p: Posting message from connection send queue", conn );
- mpi_errno = MPIDU_Sock_post_writev(conn->sock,
+ MPL_DBG_MSG_P(MPIDI_CH3_DBG_CONNECT,TYPICAL,"conn=%p: Posting message from connection send queue", conn );
+ mpi_errno = MPIDI_CH3I_Sock_post_writev(conn->sock,
conn->send_active->dev.iov,
conn->send_active->dev.iov_count,
NULL);
@@ -1360,7 +1360,7 @@ static int connection_post_sendq_req(MPIDI_CH3I_Connection_t * conn)
}
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_POST_SENDQ_REQ);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_POST_SENDQ_REQ);
return mpi_errno;
}
@@ -1375,18 +1375,18 @@ static int connection_post_sendq_req(MPIDI_CH3I_Connection_t * conn)
#define FCNAME MPL_QUOTE(FUNCNAME)
static void connection_destroy(MPIDI_CH3I_Connection_t * conn)
{
- MPIDI_STATE_DECL(MPID_STATE_CONNECTION_DESTROY);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CONNECTION_DESTROY);
- MPIDI_FUNC_ENTER(MPID_STATE_CONNECTION_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CONNECTION_DESTROY);
- MPIU_Free(conn->pg_id);
- MPIU_Free(conn);
+ MPL_free(conn->pg_id);
+ MPL_free(conn);
- MPIDI_FUNC_EXIT(MPID_STATE_CONNECTION_DESTROY);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CONNECTION_DESTROY);
}
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
const char * MPIDI_CH3_VC_SockGetStateString( struct MPIDI_VC *vc )
{
const char *name = "unknown";
diff --git a/src/mpid/ch3/util/sock/ch3u_getinterfaces.c b/src/mpid/ch3/util/sock/ch3u_getinterfaces.c
index 0e5cda5..35fad86 100644
--- a/src/mpid/ch3/util/sock/ch3u_getinterfaces.c
+++ b/src/mpid/ch3/util/sock/ch3u_getinterfaces.c
@@ -36,7 +36,7 @@
*/
static int dbg_ifname = -1;
-static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *, int * );
+static int MPIDI_CH3U_GetIPInterface( MPIDI_CH3I_Sock_ifaddr_t *, int * );
/*
* Get a description of the network interface to use for socket communication
@@ -64,7 +64,7 @@ static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *, int * );
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDU_CH3U_GetSockInterfaceAddr( int myRank, char *ifname, int maxIfname,
- MPIDU_Sock_ifaddr_t *ifaddr )
+ MPIDI_CH3I_Sock_ifaddr_t *ifaddr )
{
char *ifname_string;
int mpi_errno = MPI_SUCCESS;
@@ -120,7 +120,7 @@ int MPIDU_CH3U_GetSockInterfaceAddr( int myRank, char *ifname, int maxIfname,
}
else {
/* Copy this name into the output name */
- MPIU_Strncpy( ifname, ifname_string, maxIfname );
+ MPL_strncpy( ifname, ifname_string, maxIfname );
}
/* If we don't have an IP address, try to get it from the name */
@@ -139,7 +139,7 @@ int MPIDU_CH3U_GetSockInterfaceAddr( int myRank, char *ifname, int maxIfname,
ifaddr->type = -1;
}
else {
- MPIU_Memcpy( ifaddr->ifaddr, info->h_addr_list[0], ifaddr->len );
+ MPIR_Memcpy( ifaddr->ifaddr, info->h_addr_list[0], ifaddr->len );
}
}
}
@@ -181,12 +181,12 @@ fn_fail:
#define NUM_IFREQS 10
-static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
+static int MPIDI_CH3U_GetIPInterface( MPIDI_CH3I_Sock_ifaddr_t *ifaddr, int *found )
{
char *buf_ptr, *ptr;
int buf_len, buf_len_prev;
int fd;
- MPIDU_Sock_ifaddr_t myifaddr;
+ MPIDI_CH3I_Sock_ifaddr_t myifaddr;
int nfound = 0, foundLocalhost = 0;
/* We predefine the LSB and MSB localhost addresses */
unsigned int localhost = 0x0100007f;
@@ -227,7 +227,7 @@ static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
struct ifconf ifconf;
int rc;
- buf_ptr = (char *) MPIU_Malloc(buf_len);
+ buf_ptr = (char *) MPL_malloc(buf_len);
if (buf_ptr == NULL) {
fprintf( stderr, "Unable to allocate %d bytes\n", buf_len );
return 1;
@@ -253,7 +253,7 @@ static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
buf_len_prev = ifconf.ifc_len;
}
- MPIU_Free(buf_ptr);
+ MPL_free(buf_ptr);
buf_len += NUM_IFREQS * sizeof(struct ifreq);
}
@@ -295,14 +295,14 @@ static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
if (nfound == 0) {
myifaddr.type = AF_INET;
myifaddr.len = 4;
- MPIU_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
+ MPIR_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
}
}
else {
nfound++;
myifaddr.type = AF_INET;
myifaddr.len = 4;
- MPIU_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
+ MPIR_Memcpy( myifaddr.ifaddr, &addr.s_addr, 4 );
}
}
else {
@@ -332,7 +332,7 @@ static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
#endif
}
- MPIU_Free(buf_ptr);
+ MPL_free(buf_ptr);
close(fd);
/* If we found a unique address, use that */
@@ -350,7 +350,7 @@ static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
#else /* things needed to find the interfaces */
/* In this case, just return false for interfaces found */
-static int MPIDI_CH3U_GetIPInterface( MPIDU_Sock_ifaddr_t *ifaddr, int *found )
+static int MPIDI_CH3U_GetIPInterface( MPIDI_CH3I_Sock_ifaddr_t *ifaddr, int *found )
{
*found = 0;
return 0;
diff --git a/src/mpid/ch3/util/sock/ch3u_init_sock.c b/src/mpid/ch3/util/sock/ch3u_init_sock.c
index f0bbbc1..13dad8e 100644
--- a/src/mpid/ch3/util/sock/ch3u_init_sock.c
+++ b/src/mpid/ch3/util/sock/ch3u_init_sock.c
@@ -41,8 +41,8 @@ int MPIDI_CH3U_Init_sock(int has_parent, MPIDI_PG_t *pg_p, int pg_rank,
int p;
/* FIXME: Why are these unused? */
- MPIU_UNREFERENCED_ARG(has_parent);
- MPIU_UNREFERENCED_ARG(pg_rank);
+ MPL_UNREFERENCED_ARG(has_parent);
+ MPL_UNREFERENCED_ARG(pg_rank);
/*
* Initialize the VCs associated with this process group (and thus
@@ -65,7 +65,7 @@ int MPIDI_CH3U_Init_sock(int has_parent, MPIDI_PG_t *pg_p, int pg_rank,
vcch->sendq_head = NULL;
vcch->sendq_tail = NULL;
vcch->state = MPIDI_CH3I_VC_STATE_UNCONNECTED;
- vcch->sock = MPIDU_SOCK_INVALID_SOCK;
+ vcch->sock = MPIDI_CH3I_SOCK_INVALID_SOCK;
vcch->conn = NULL;
}
@@ -96,12 +96,12 @@ int MPIDI_CH3U_Init_sock(int has_parent, MPIDI_PG_t *pg_p, int pg_rank,
int MPIDI_VC_InitSock( MPIDI_VC_t *vc )
{
MPIDI_CH3I_VC *vcch = &vc->ch;
- vcch->sock = MPIDU_SOCK_INVALID_SOCK;
+ vcch->sock = MPIDI_CH3I_SOCK_INVALID_SOCK;
vcch->conn = NULL;
return 0;
}
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
const char * MPIDI_Conn_GetStateString(int state)
{
const char *name = "unknown";
diff --git a/src/mpid/ch3/util/sock/ch3usock.h b/src/mpid/ch3/util/sock/ch3usock.h
index e29bb2f..34fd867 100644
--- a/src/mpid/ch3/util/sock/ch3usock.h
+++ b/src/mpid/ch3/util/sock/ch3usock.h
@@ -7,7 +7,7 @@
#ifndef CH3USOCK_H_INCLUDED
#define CH3USOCK_H_INCLUDED
-#ifndef MPIDU_SOCK_H_INCLUDED
+#ifndef MPIDI_CH3I_SOCK_H_INCLUDED
#include "mpidu_sock.h"
#endif
@@ -32,10 +32,10 @@ typedef enum MPIDI_CH3I_Conn_state
typedef struct MPIDI_CH3I_Connection
{
MPIDI_VC_t * vc;
- MPIDU_Sock_t sock;
+ MPIDI_CH3I_Sock_t sock;
MPIDI_CH3I_Conn_state state;
- struct MPID_Request * send_active;
- struct MPID_Request * recv_active;
+ struct MPIR_Request * send_active;
+ struct MPIR_Request * recv_active;
MPIDI_CH3_Pkt_t pkt;
char * pg_id;
MPL_IOV iov[2];
@@ -58,22 +58,22 @@ int MPIDI_CH3I_Connection_alloc(MPIDI_CH3I_Connection_t **);
void MPIDI_CH3I_Connection_free(MPIDI_CH3I_Connection_t *);
/* Routines to get the socket address */
-int MPIDU_CH3U_GetSockInterfaceAddr( int, char *, int, MPIDU_Sock_ifaddr_t * );
+int MPIDU_CH3U_GetSockInterfaceAddr( int, char *, int, MPIDI_CH3I_Sock_ifaddr_t * );
/* Return a string for the connection state */
-#ifdef USE_DBG_LOGGING
+#ifdef MPL_USE_DBG_LOGGING
const char * MPIDI_Conn_GetStateString(int);
const char * MPIDI_CH3_VC_GetStateString( struct MPIDI_VC * );
#endif
-int MPIDU_Sock_get_conninfo_from_bc( const char *bc,
+int MPIDI_CH3I_Sock_get_conninfo_from_bc( const char *bc,
char *host_description, int maxlen,
- int *port, MPIDU_Sock_ifaddr_t *ifaddr,
+ int *port, MPIDI_CH3I_Sock_ifaddr_t *ifaddr,
int *hasIfaddr );
/* These two routines from util/sock initialize and shutdown the
socket used to establish connections. */
-int MPIDU_CH3I_SetupListener( MPIDU_Sock_set_t );
+int MPIDU_CH3I_SetupListener( MPIDI_CH3I_Sock_set_t );
int MPIDU_CH3I_ShutdownListener( void );
#endif
diff --git a/src/mpid/ch3/util/sock/errnames.txt b/src/mpid/ch3/util/sock/errnames.txt
index d7488fb..1d1eb5e 100644
--- a/src/mpid/ch3/util/sock/errnames.txt
+++ b/src/mpid/ch3/util/sock/errnames.txt
@@ -29,4 +29,4 @@
**ch3|sock|badhost %s %d %s:[ch3:sock] invalid host description, %s:%d (%s)
**pglookup:unable to find the process group structure
**pglookup %s:unable to find the process group structure with id <%s>
-**ch3|sock|handle_sock_event:an error occurred while handling an event returned by MPIDU_Sock_Wait()
+**ch3|sock|handle_sock_event:an error occurred while handling an event returned by MPIDI_CH3I_Sock_Wait()
diff --git a/src/mpid/ch3/util/sock/findinterfaces.c b/src/mpid/ch3/util/sock/findinterfaces.c
index aeaf09e..e7273b9 100644
--- a/src/mpid/ch3/util/sock/findinterfaces.c
+++ b/src/mpid/ch3/util/sock/findinterfaces.c
@@ -37,7 +37,7 @@ static int GetLocalIPs(int32_t *pIP, int max)
b = ((unsigned char *)(&pIP[n]))[1];
c = ((unsigned char *)(&pIP[n]))[2];
d = ((unsigned char *)(&pIP[n]))[3];
- MPIU_DBG_PRINTF(("ip: %u.%u.%u.%u\n", a, b, c, d));
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,TERSE,(MPL_DBG_FDEST,"ip: %u.%u.%u.%u\n", a, b, c, d));
}*/
hlist++;
@@ -117,7 +117,7 @@ static int GetLocalIPs(int32_t *pIP, int max)
struct ifconf ifconf;
int rc;
- buf_ptr = (char *) MPIU_Malloc(buf_len);
+ buf_ptr = (char *) MPL_malloc(buf_len);
if (buf_ptr == NULL)
return 0;
@@ -141,7 +141,7 @@ static int GetLocalIPs(int32_t *pIP, int max)
buf_len_prev = ifconf.ifc_len;
}
- MPIU_Free(buf_ptr);
+ MPL_free(buf_ptr);
buf_len += NUM_IFREQS * sizeof(struct ifreq);
}
@@ -190,7 +190,7 @@ static int GetLocalIPs(int32_t *pIP, int max)
# endif
}
- MPIU_Free(buf_ptr);
+ MPL_free(buf_ptr);
close(fd);
return n;
diff --git a/src/mpid/ch3/util/unordered/.state-cache b/src/mpid/ch3/util/unordered/.state-cache
index e895d52..c98c468 100644
--- a/src/mpid/ch3/util/unordered/.state-cache
+++ b/src/mpid/ch3/util/unordered/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="unordered.c" info="1447123141"/>
+<file name="unordered.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="unordered.c">
diff --git a/src/mpid/ch3/util/unordered/unordered.c b/src/mpid/ch3/util/unordered/unordered.c
index d85070c..f656708 100644
--- a/src/mpid/ch3/util/unordered/unordered.c
+++ b/src/mpid/ch3/util/unordered/unordered.c
@@ -18,20 +18,20 @@ int MPIDI_CH3U_Handle_unordered_recv_pkt(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt)
#if defined(MPIDI_CH3_MSGS_UNORDERED)
-#define MPIDI_CH3U_Pkt_send_container_alloc() (MPIU_Malloc(sizeof(MPIDI_CH3_Pkt_send_container_t)))
-#define MPIDI_CH3U_Pkt_send_container_free(pc_) MPIU_Free(pc_)
+#define MPIDI_CH3U_Pkt_send_container_alloc() (MPL_malloc(sizeof(MPIDI_CH3_Pkt_send_container_t)))
+#define MPIDI_CH3U_Pkt_send_container_free(pc_) MPL_free(pc_)
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3U_Handle_unordered_recv_pkt
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIDI_CH3U_Handle_unordered_recv_pkt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t * pkt,
- MPID_Request ** rreqp)
+ MPIR_Request ** rreqp)
{
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_UNORDERED_RECV_PKT);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3U_HANDLE_UNORDERED_RECV_PKT);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_UNORDERED_RECV_PKT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH3U_HANDLE_UNORDERED_RECV_PKT);
/* FIXME: This should probably be *rreqp = NULL? */
rreqp = NULL;
@@ -47,13 +47,13 @@ int MPIDI_CH3U_Handle_unordered_recv_pkt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_CH3_Pkt_send_container_t * pc_cur;
MPIDI_CH3_Pkt_send_container_t * pc_last;
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE,
+ MPL_DBG_MSG(MPIDI_CH3_DBG_OTHER,VERBOSE,
"received (potentially) out-of-order send pkt");
- MPIU_DBG_MSG_FMT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"rank=%d, tag=%d, context=%d seqnum=%d",
send_pkt->match.rank, send_pkt->match.tag,
send_pkt->match.context_id, send_pkt->seqnum));
- MPIU_DBG_MSG_FMAT(CH3_OTHER,VERBOSE,(MPIU_DBG_FDEST,
+ MPL_DBG_MSG_FMAT(MPIDI_CH3_DBG_OTHER,VERBOSE,(MPL_DBG_FDEST,
"vc - seqnum_send=%d seqnum_recv=%d reorder_msg_queue=0x%08lx",
vc->seqnum_send, vc->seqnum_recv,
(unsigned long) vc->msg_reorder_queue));
@@ -157,7 +157,7 @@ int MPIDI_CH3U_Handle_unordered_recv_pkt(MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t * pkt,
}
fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_UNORDERED_RECV_PKT);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH3U_HANDLE_UNORDERED_RECV_PKT);
return mpi_errno;
}
#endif /* defined(MPIDI_CH3_MSGS_UNORDERED) */
diff --git a/src/mpid/ch4/.gitignore b/src/mpid/ch4/.gitignore
new file mode 100644
index 0000000..72a535f
--- /dev/null
+++ b/src/mpid/ch4/.gitignore
@@ -0,0 +1,6 @@
+# ch4 ignore files
+src/mpid_ch4_net_array.c
+src/mpid_ch4_shm_array.c
+
+# for embedded libfabric
+netmod/ofi/libfabric/
diff --git a/src/mpid/ch4/Makefile.mk b/src/mpid/ch4/Makefile.mk
new file mode 100644
index 0000000..d0d196f
--- /dev/null
+++ b/src/mpid/ch4/Makefile.mk
@@ -0,0 +1,21 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+
+if BUILD_CH4
+
+include $(top_srcdir)/src/mpid/ch4/include/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/src/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/generic/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/netmod/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/shm/Makefile.mk
+
+endif BUILD_CH4
diff --git a/src/mpid/ch4/cross/gcc-linux-x86-8 b/src/mpid/ch4/cross/gcc-linux-x86-8
new file mode 100644
index 0000000..33e0896
--- /dev/null
+++ b/src/mpid/ch4/cross/gcc-linux-x86-8
@@ -0,0 +1,13 @@
+CROSS_F77_SIZEOF_INTEGER="4"
+CROSS_F77_SIZEOF_REAL="4"
+CROSS_F77_SIZEOF_DOUBLE_PRECISION="8"
+CROSS_F77_TRUE_VALUE="1"
+CROSS_F77_FALSE_VALUE="0"
+CROSS_F90_ADDRESS_KIND="8"
+CROSS_F90_OFFSET_KIND="8"
+CROSS_F90_INTEGER_KIND="4"
+CROSS_F90_REAL_MODEL=" 6 , 37"
+CROSS_F90_DOUBLE_MODEL=" 15 , 307"
+CROSS_F90_INTEGER_MODEL=" 9"
+CROSS_F90_ALL_INTEGER_MODELS=" 2 , 1, 4 , 2, 9 , 4, 18 , 8,"
+CROSS_F90_INTEGER_MODEL_MAP=" { 2 , 1 , 1 }, { 4 , 2 , 2 }, { 9 , 4 , 4 }, { 18 , 8 , 8 },"
diff --git a/src/mpid/ch4/cross/icc-linux-x86-8 b/src/mpid/ch4/cross/icc-linux-x86-8
new file mode 100644
index 0000000..c3800d1
--- /dev/null
+++ b/src/mpid/ch4/cross/icc-linux-x86-8
@@ -0,0 +1,13 @@
+CROSS_F77_SIZEOF_INTEGER="4"
+CROSS_F77_SIZEOF_REAL="4"
+CROSS_F77_SIZEOF_DOUBLE_PRECISION="8"
+CROSS_F77_TRUE_VALUE="-1"
+CROSS_F77_FALSE_VALUE="0"
+CROSS_F90_ADDRESS_KIND="8"
+CROSS_F90_OFFSET_KIND="8"
+CROSS_F90_INTEGER_KIND="4"
+CROSS_F90_REAL_MODEL=" 6 , 37"
+CROSS_F90_DOUBLE_MODEL=" 15 , 307"
+CROSS_F90_INTEGER_MODEL=" 9"
+CROSS_F90_ALL_INTEGER_MODELS=" 2 , 1, 4 , 2, 9 , 4, 18 , 8,"
+CROSS_F90_INTEGER_MODEL_MAP=" { 2 , 1 , 1 }, { 4 , 2 , 2 }, { 9 , 4 , 4 }, { 18 , 8 , 8 },"
diff --git a/src/mpid/ch4/errnames.txt b/src/mpid/ch4/errnames.txt
new file mode 100644
index 0000000..55c9135
--- /dev/null
+++ b/src/mpid/ch4/errnames.txt
@@ -0,0 +1,47 @@
+#
+# CH4 errors
+#
+**ch4|pktarraytoosmall: Size of the array of packet handlers is too small
+**ch4|badmsgtype %d:request contained an invalid message type (%d)
+**ch4|badmsgtype:request contained an invalid message type
+**ch4|badreqtype %d:request contained an invalid request type (%d)
+**ch4|badreqtype:request contained an invalid request type
+**ch4|cancelreq:failure occurred while sending remote cancellation request packet
+**ch4|cancelresp:failure occurred while attempting to send cancel response packet
+**ch4|cancelrndv:failure occurred while performing local cancellation of a rendezvous message
+**ch4|ch4_init:channel initialization failed
+**ch4|ctspkt:failure occurred while attempting to send CTS packet
+**ch4|eagermsg:failure occurred while attempting to send an eager message
+**ch4|loadrecviov:failure occurred while loading the receive I/O vector
+**ch4|loadsendiov:failure occurred while loading the send I/O vector
+**ch4|nopktcontainermem:failed to allocate memory for a packet reorder container
+**ch4|ooocancelreq:UNIMPLEMENTED: unable to process out-of-order cancellation requests
+**ch4|pktordered:failure occurred while processing a reordered packet
+**ch4|postrecv %s:failure occurred while posting a receive for message data (%s)
+**ch4|postrecv:failure occurred while posting a receive for message data
+**ch4|rmamsg:failure occurred while attempting to send an RMA message
+**ch4|rtspkt:failure occurred while attempting to send RTS packet
+**ch4|senddata:failure occurred while attempting to send message data
+**ch4|syncack:failure occurred while attempting to send eager synchronization packet
+**ch4|get_parent_port:spawn process group was unable to obtain parent port name from the channel
+**ch4|conn_parent:spawned process group was unable to connect back to the parent
+**ch4|conn_parent %s:spawned process group was unable to connect back to the parent on port <%s>
+**ch4|unhandled_connection_state:encountered an unexpected connection state
+**ch4|unhandled_connection_state %p %d:encountered an unexpected connection state (vc=%p, state=%d)
+**ch4|send_close_ack:an error occurred when the device attempted to acknowledge the closing of a connection
+**ch4|close_progress:an error occurred while the device was waiting for all open connections to close
+**ch4|pmi_finalize:PMI_Finalize failed
+**ch4|pmi_finalize %d:PMI_Finalize failed, error %d
+**ch4|invalid_shm:Invalid shm specified
+**ch4|invalid_shm %s:Invalid shm specified (%s)
+**ch4|invalid_locality:Invalid locality usage
+**ch4|invalid_locality %s:Invalid locality usage (%s)
+#
+# RMA errors
+#
+**ch4|sync_arg:Invalid RMA synchronization argument
+**ch4|sync_arg %d:Invalid RMA synchronization argument (%d)
+**ch4|rma_flags:Invalid combination of RMA packet flags
+**ch4|nocheck_invalid:MPI_MODE_NOCHECK was specified, but the lock was not available at the target
+**ch4|rma_msg:RMA message operation failed
+**ch4|win_shared_comm:Cannot map shared memory using the given communicator
diff --git a/src/mpid/ch4/generic/Makefile.mk b/src/mpid/ch4/generic/Makefile.mk
new file mode 100644
index 0000000..4d43db1
--- /dev/null
+++ b/src/mpid/ch4/generic/Makefile.mk
@@ -0,0 +1,20 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+
+AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/ch4/generic
+
+noinst_HEADERS += src/mpid/ch4/generic/mpidig_send.h \
+ src/mpid/ch4/generic/mpidig_recv.h \
+ src/mpid/ch4/generic/mpidig.h
+
+mpi_core_sources += src/mpid/ch4/generic/mpidig_globals.c \
+ src/mpid/ch4/generic/mpidig_init.c
diff --git a/src/mpid/ch4/generic/mpidig.h b/src/mpid/ch4/generic/mpidig.h
new file mode 100644
index 0000000..8c09bca
--- /dev/null
+++ b/src/mpid/ch4/generic/mpidig.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPIDIG_H_INCLUDED
+#define MPIDIG_H_INCLUDED
+
+#include <mpidimpl.h>
+
+#define MPIDI_AM_HANDLERS_MAX (64)
+
+typedef int (*MPIDIG_am_target_cmpl_cb) (MPIR_Request * req);
+typedef int (*MPIDIG_am_origin_cb) (MPIR_Request * req);
+
+/* Callback function setup by handler register function */
+/* for short cases, output arguments are NULL */
+typedef int (*MPIDIG_am_target_msg_cb)
+ (int handler_id, void *am_hdr, void **data, /* data should be iovs if *is_contig is false */
+ size_t * data_sz, int *is_contig, MPIDIG_am_target_cmpl_cb * target_cmpl_cb, /* completion handler */
+ MPIR_Request ** req); /* if allocated, need pointer to completion function */
+
+typedef struct MPIDIG_global_t {
+ MPIDIG_am_target_msg_cb target_msg_cbs[MPIDI_AM_HANDLERS_MAX];
+ MPIDIG_am_origin_cb origin_cbs[MPIDI_AM_HANDLERS_MAX];
+} MPIDIG_global_t;
+extern MPIDIG_global_t MPIDIG_global;
+
+int MPIDIG_am_reg_cb(int handler_id,
+ MPIDIG_am_origin_cb origin_cb, MPIDIG_am_target_msg_cb target_msg_cb);
+int MPIDIG_init(MPIR_Comm * comm_world, MPIR_Comm * comm_self,
+ int num_contexts, void **netmod_contexts);
+void MPIDIG_finalize(void);
+
+#endif /* MPIDIG_H_INCLUDED */
diff --git a/src/mpid/ch4/generic/mpidig_globals.c b/src/mpid/ch4/generic/mpidig_globals.c
new file mode 100644
index 0000000..9072213
--- /dev/null
+++ b/src/mpid/ch4/generic/mpidig_globals.c
@@ -0,0 +1,15 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include "mpidimpl.h"
+#include "mpidig.h"
+
+MPIDIG_global_t MPIDIG_global = { 0 };
diff --git a/src/mpid/ch4/generic/mpidig_init.c b/src/mpid/ch4/generic/mpidig_init.c
new file mode 100644
index 0000000..b52f677
--- /dev/null
+++ b/src/mpid/ch4/generic/mpidig_init.c
@@ -0,0 +1,259 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include "mpidimpl.h"
+#include "mpidig.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_am_reg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDIG_am_reg_cb(int handler_id,
+ MPIDIG_am_origin_cb origin_cb, MPIDIG_am_target_msg_cb target_msg_cb)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_AM_REG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_AM_REG_CB);
+
+ MPIDIG_global.target_msg_cbs[handler_id] = target_msg_cb;
+ MPIDIG_global.origin_cbs[handler_id] = origin_cb;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_AM_REG_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDIG_init(MPIR_Comm * comm_world, MPIR_Comm * comm_self,
+ int num_contexts, void **netmod_contexts)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_INIT);
+
+ MPIDI_CH4_Global.is_ch4u_initialized = 0;
+
+ MPIDI_CH4_Global.comm_req_lists = (MPIDI_CH4U_comm_req_list_t *)
+ MPL_calloc(MPIR_MAX_CONTEXT_MASK * MPIR_CONTEXT_INT_BITS,
+ sizeof(MPIDI_CH4U_comm_req_list_t));
+#ifndef MPIDI_CH4U_USE_PER_COMM_QUEUE
+ MPIDI_CH4_Global.posted_list = NULL;
+ MPIDI_CH4_Global.unexp_list = NULL;
+#endif
+
+ MPIDI_CH4_Global.cmpl_list = NULL;
+ OPA_store_int(&MPIDI_CH4_Global.exp_seq_no, 0);
+ OPA_store_int(&MPIDI_CH4_Global.nxt_seq_no, 0);
+
+ MPIDI_CH4_Global.buf_pool = MPIDI_CH4U_create_buf_pool(MPIDI_CH4I_BUF_POOL_NUM,
+ MPIDI_CH4I_BUF_POOL_SZ);
+ MPIR_Assert(MPIDI_CH4_Global.buf_pool);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_SEND, &MPIDI_send_origin_cb, &MPIDI_send_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_SEND_LONG_REQ, NULL /* Injection only */ ,
+ &MPIDI_send_long_req_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_SEND_LONG_ACK, NULL /* Injection only */ ,
+ &MPIDI_send_long_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_SEND_LONG_LMT,
+ &MPIDI_send_long_lmt_origin_cb,
+ &MPIDI_send_long_lmt_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_SSEND_REQ,
+ &MPIDI_send_origin_cb, &MPIDI_ssend_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_SSEND_ACK,
+ &MPIDI_ssend_ack_origin_cb, &MPIDI_ssend_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno =
+ MPIDIG_am_reg_cb(MPIDI_CH4U_PUT_REQ, &MPIDI_put_origin_cb, &MPIDI_put_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_PUT_ACK, NULL, &MPIDI_put_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno =
+ MPIDIG_am_reg_cb(MPIDI_CH4U_GET_REQ, &MPIDI_get_origin_cb, &MPIDI_get_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_GET_ACK,
+ &MPIDI_get_ack_origin_cb, &MPIDI_get_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_CSWAP_REQ,
+ &MPIDI_cswap_origin_cb, &MPIDI_cswap_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_CSWAP_ACK,
+ &MPIDI_cswap_ack_origin_cb, &MPIDI_cswap_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno =
+ MPIDIG_am_reg_cb(MPIDI_CH4U_ACC_REQ, &MPIDI_acc_origin_cb, &MPIDI_acc_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_GET_ACC_REQ,
+ &MPIDI_get_acc_origin_cb, &MPIDI_get_acc_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_ACC_ACK, NULL, &MPIDI_acc_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_GET_ACC_ACK,
+ &MPIDI_get_acc_ack_origin_cb, &MPIDI_get_acc_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_COMPLETE, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_POST, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_LOCK, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_LOCK_ACK, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_UNLOCK, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_UNLOCK_ACK, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_LOCKALL, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_LOCKALL_ACK, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_UNLOCKALL, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_WIN_UNLOCKALL_ACK, NULL, &MPIDI_win_ctrl_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_PUT_IOV_REQ,
+ &MPIDI_put_iov_origin_cb, &MPIDI_put_iov_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_PUT_IOV_ACK, NULL, &MPIDI_put_iov_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_PUT_DAT_REQ,
+ &MPIDI_put_data_origin_cb, &MPIDI_put_data_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_ACC_IOV_REQ,
+ &MPIDI_acc_iov_origin_cb, &MPIDI_acc_iov_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_GET_ACC_IOV_REQ,
+ &MPIDI_get_acc_iov_origin_cb, &MPIDI_get_acc_iov_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_ACC_IOV_ACK, NULL, &MPIDI_acc_iov_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_GET_ACC_IOV_ACK,
+ NULL, &MPIDI_get_acc_iov_ack_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_ACC_DAT_REQ,
+ &MPIDI_acc_data_origin_cb, &MPIDI_acc_data_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDIG_am_reg_cb(MPIDI_CH4U_GET_ACC_DAT_REQ,
+ &MPIDI_get_acc_data_origin_cb, &MPIDI_get_acc_data_target_msg_cb);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDI_CH4U_init_comm(comm_world);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIDI_CH4U_init_comm(comm_self);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_CH4_Global.win_hash = NULL;
+
+ MPIDI_CH4_Global.is_ch4u_initialized = 1;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_INIT);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_finalize
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+void MPIDIG_finalize(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_FINALIZE);
+
+ MPIDI_CH4_Global.is_ch4u_initialized = 0;
+ MPL_HASH_CLEAR(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash);
+ MPIDI_CH4R_destroy_buf_pool(MPIDI_CH4_Global.buf_pool);
+ MPL_free(MPIDI_CH4_Global.comm_req_lists);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_FINALIZE);
+}
diff --git a/src/mpid/ch4/generic/mpidig_recv.h b/src/mpid/ch4/generic/mpidig_recv.h
new file mode 100644
index 0000000..881c9ce
--- /dev/null
+++ b/src/mpid/ch4/generic/mpidig_recv.h
@@ -0,0 +1,433 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef MPIDIG_RECV_H_INCLUDED
+#define MPIDIG_RECV_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4r_proc.h"
+#include "ch4r_recv.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_prepare_recv_req
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_prepare_recv_req(void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PREPARE_RECV_REQ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PREPARE_RECV_REQ);
+
+ MPIDI_CH4U_REQUEST(rreq, datatype) = datatype;
+ MPIDI_CH4U_REQUEST(rreq, buffer) = (char *) buf;
+ MPIDI_CH4U_REQUEST(rreq, count) = count;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PREPARE_RECV_REQ);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_handle_unexpected
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_handle_unexpected(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Comm * comm, int context_offset, MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int dt_contig;
+ MPI_Aint dt_true_lb, last;
+ MPIR_Datatype *dt_ptr;
+ size_t in_data_sz, dt_sz, nbytes;
+ MPID_Segment *segment_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_HANDLE_UNEXPECTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_HANDLE_UNEXPECTED);
+
+ in_data_sz = MPIDI_CH4U_REQUEST(rreq, count);
+ MPID_Datatype_get_size_macro(datatype, dt_sz);
+
+ if (in_data_sz > dt_sz * count) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ nbytes = dt_sz * count;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ nbytes = in_data_sz;
+ count = dt_sz ? nbytes / dt_sz : 0;
+ }
+ MPIR_STATUS_SET_COUNT(rreq->status, nbytes);
+ MPIDI_CH4U_REQUEST(rreq, datatype) = datatype;
+ MPIDI_CH4U_REQUEST(rreq, count) = nbytes;
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, dt_sz, dt_ptr, dt_true_lb);
+
+ if (!dt_contig) {
+ segment_ptr = MPID_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(segment_ptr == NULL, mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "Recv MPID_Segment_alloc");
+ MPID_Segment_init(buf, count, datatype, segment_ptr, 0);
+
+ last = nbytes;
+ MPID_Segment_unpack(segment_ptr, 0, &last, MPIDI_CH4U_REQUEST(rreq, buffer));
+ MPID_Segment_free(segment_ptr);
+ if (last != (MPI_Aint) (nbytes)) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ __FUNCTION__, __LINE__,
+ MPI_ERR_TYPE, "**dtypemismatch", 0);
+ rreq->status.MPI_ERROR = mpi_errno;
+ }
+ }
+ else {
+ MPIR_Memcpy((char *) buf + dt_true_lb, MPIDI_CH4U_REQUEST(rreq, buffer), nbytes);
+ }
+
+ MPIDI_CH4U_REQUEST(rreq, req->status) &= ~MPIDI_CH4U_REQ_UNEXPECTED;
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, buffer));
+
+ rreq->status.MPI_SOURCE = MPIDI_CH4U_REQUEST(rreq, rank);
+ rreq->status.MPI_TAG = MPIDI_CH4U_get_tag(MPIDI_CH4U_REQUEST(rreq, tag));
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_PEER_SSEND) {
+ mpi_errno = MPIDI_reply_ssend(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ MPIDI_Request_complete(rreq);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_HANDLE_UNEXPECTED);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_do_irecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_do_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request, int alloc_req, uint64_t flags)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL, *unexp_req = NULL;
+ uint64_t match_bits, mask_bits;
+ MPIR_Context_id_t context_id = comm->recvcontext_id + context_offset;
+ MPIR_Comm *root_comm;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DO_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DO_IRECV);
+
+ match_bits = MPIDI_CH4U_init_recvtag(&mask_bits, context_id, rank, tag);
+ root_comm = MPIDI_CH4U_context_id_to_comm(comm->recvcontext_id);
+ unexp_req = MPIDI_CH4U_dequeue_unexp(match_bits, mask_bits,
+ &MPIDI_CH4U_COMM(root_comm, unexp_list));
+
+ if (unexp_req) {
+ MPIR_Comm_release(root_comm); /* -1 for removing from unexp_list */
+ if (MPIDI_CH4U_REQUEST(unexp_req, req->status) & MPIDI_CH4U_REQ_BUSY) {
+ MPIDI_CH4U_REQUEST(unexp_req, req->status) |= MPIDI_CH4U_REQ_MATCHED;
+ }
+ else if (MPIDI_CH4U_REQUEST(unexp_req, req->status) & MPIDI_CH4U_REQ_LONG_RTS) {
+ /* Matching receive is now posted, tell the netmod */
+ dtype_add_ref_if_not_builtin(datatype);
+ MPIDI_CH4U_REQUEST(unexp_req, datatype) = datatype;
+ MPIDI_CH4U_REQUEST(unexp_req, buffer) = (char *) buf;
+ MPIDI_CH4U_REQUEST(unexp_req, count) = count;
+ *request = unexp_req;
+ mpi_errno = MPIDI_NM_am_recv(unexp_req);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ else {
+ *request = unexp_req;
+ mpi_errno =
+ MPIDI_handle_unexpected(buf, count, datatype, root_comm, context_id, unexp_req);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ }
+
+ if (alloc_req) {
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RECV, 2);
+ }
+ else {
+ rreq = *request;
+ MPIR_Assert(0);
+ }
+
+ *request = rreq;
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ rreq->kind = MPIR_REQUEST_KIND__RECV;
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ rreq->status.MPI_SOURCE = rank;
+ rreq->status.MPI_TAG = tag;
+ MPIDI_Request_complete(rreq);
+ goto fn_exit;
+ }
+
+ dtype_add_ref_if_not_builtin(datatype);
+ MPIDI_CH4U_REQUEST(rreq, tag) = match_bits;
+ MPIDI_CH4U_REQUEST(rreq, req->rreq.ignore) = mask_bits;
+ MPIDI_CH4U_REQUEST(rreq, datatype) = datatype;
+
+ mpi_errno = MPIDI_prepare_recv_req(buf, count, datatype, rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+
+ if (!unexp_req) {
+ /* MPIDI_CS_ENTER(); */
+ /* Increment refcnt for comm before posting rreq to posted_list,
+ * to make sure comm is alive while holding an entry in the posted_list */
+ MPIR_Comm_add_ref(root_comm);
+ MPIDI_CH4U_enqueue_posted(rreq, &MPIDI_CH4U_COMM(root_comm, posted_list));
+ /* MPIDI_CS_EXIT(); */
+ }
+ else {
+ MPIDI_CH4U_REQUEST(unexp_req, req->rreq.match_req) = (uint64_t) rreq;
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DO_IRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_recv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_RECV);
+
+ mpi_errno =
+ MPIDI_do_irecv(buf, count, datatype, rank, tag, comm, context_offset, request, 1, 0ULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_RECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_recv_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_RECV_INIT);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__PREQUEST_RECV, 2);
+
+ *request = rreq;
+ rreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+
+ MPIDI_CH4U_REQUEST(rreq, buffer) = (void *) buf;
+ MPIDI_CH4U_REQUEST(rreq, count) = count;
+ MPIDI_CH4U_REQUEST(rreq, datatype) = datatype;
+ MPIDI_CH4U_REQUEST(rreq, rank) = rank;
+ MPIDI_CH4U_REQUEST(rreq, tag) =
+ MPIDI_CH4U_init_send_tag(comm->context_id + context_offset, rank, tag);
+ rreq->u.persist.real_request = NULL;
+ MPIDI_Request_complete(rreq);
+ MPIDI_CH4U_REQUEST(rreq, p_type) = MPIDI_PTYPE_RECV;
+ dtype_add_ref_if_not_builtin(datatype);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_RECV_INIT);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_imrecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_IMRECV);
+
+ if (message == NULL) {
+ MPIDI_Request_create_null_rreq(rreq, mpi_errno, fn_fail);
+ *rreqp = rreq;
+ goto fn_exit;
+ }
+
+ MPIR_Assert(message->kind == MPIR_REQUEST_KIND__MPROBE);
+ MPIDI_CH4U_REQUEST(message, req->rreq.mrcv_buffer) = buf;
+ MPIDI_CH4U_REQUEST(message, req->rreq.mrcv_count) = count;
+ MPIDI_CH4U_REQUEST(message, req->rreq.mrcv_datatype) = datatype;
+ *rreqp = message;
+
+ /* MPIDI_CS_ENTER(); */
+ if (MPIDI_CH4U_REQUEST(message, req->status) & MPIDI_CH4U_REQ_BUSY) {
+ MPIDI_CH4U_REQUEST(message, req->status) |= MPIDI_CH4U_REQ_UNEXP_CLAIMED;
+ }
+ else if (MPIDI_CH4U_REQUEST(message, req->status) & MPIDI_CH4U_REQ_LONG_RTS) {
+ /* Matching receive is now posted, tell the netmod */
+ message->kind = MPIR_REQUEST_KIND__RECV;
+ dtype_add_ref_if_not_builtin(datatype);
+ MPIDI_CH4U_REQUEST(message, datatype) = datatype;
+ MPIDI_CH4U_REQUEST(message, buffer) = (char *) buf;
+ MPIDI_CH4U_REQUEST(message, count) = count;
+ mpi_errno = MPIDI_NM_am_recv(message);
+ }
+ else {
+ mpi_errno = MPIDI_handle_unexp_mrecv(message);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ /* MPIDI_CS_EXIT(); */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_IMRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mrecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS, active_flag;
+ MPI_Request req_handle;
+ MPIR_Request *rreq = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MRECV);
+
+ mpi_errno = MPIDI_Imrecv(buf, count, datatype, message, &rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ while (!MPIR_Request_is_complete(rreq)) {
+ MPIDI_Progress_test();
+ }
+
+ MPIR_Request_extract_status(rreq, status);
+
+ mpi_errno = MPIR_Request_complete(&req_handle, rreq, status, &active_flag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_irecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_IRECV);
+
+ mpi_errno =
+ MPIDI_do_irecv(buf, count, datatype, rank, tag, comm, context_offset, request, 1, 0ULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_IRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_cancel_recv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS, found;
+ MPIR_Comm *root_comm;
+ uint64_t msg_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_CANCEL_RECV);
+
+ msg_tag = MPIDI_CH4U_REQUEST(rreq, tag);
+ root_comm = MPIDI_CH4U_context_id_to_comm(MPIDI_CH4U_get_context(msg_tag));
+
+ /* MPIDI_CS_ENTER(); */
+ found =
+ MPIDI_CH4U_delete_posted(&rreq->dev.ch4.am.req->rreq,
+ &MPIDI_CH4U_COMM(root_comm, posted_list));
+ /* MPIDI_CS_EXIT(); */
+
+ if (found) {
+ MPIR_STATUS_SET_CANCEL_BIT(rreq->status, TRUE);
+ MPIR_STATUS_SET_COUNT(rreq->status, 0);
+ MPIR_Comm_release(root_comm); /* -1 for posted_list */
+ MPIDI_Request_complete(rreq);
+ }
+ else {
+ MPIR_STATUS_SET_CANCEL_BIT(rreq->status, FALSE);
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_CANCEL_RECV);
+ return mpi_errno;
+}
+
+#endif /* MPIDIG_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/generic/mpidig_send.h b/src/mpid/ch4/generic/mpidig_send.h
new file mode 100644
index 0000000..d6abb56
--- /dev/null
+++ b/src/mpid/ch4/generic/mpidig_send.h
@@ -0,0 +1,473 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef MPIDIG_SEND_H_INCLUDED
+#define MPIDIG_SEND_H_INCLUDED
+
+#include "ch4_impl.h"
+#include <../mpi/pt2pt/bsendutil.h>
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_am_isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_am_isend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request, int is_blocking, int type)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIR_Request *sreq = NULL;
+ uint64_t match_bits;
+ MPIDI_CH4U_hdr_t am_hdr;
+ MPIDI_CH4U_ssend_req_msg_t ssend_req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_AM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_AM_ISEND);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ mpi_errno = MPI_SUCCESS;
+ /* for blocking calls, we directly complete the request */
+ if (!is_blocking) {
+ *request = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__SEND, 2);
+ MPIDI_Request_complete((*request));
+ }
+ goto fn_exit;
+ }
+
+ sreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__SEND, 2);
+ MPIR_Assert(sreq);
+
+ *request = sreq;
+ match_bits = MPIDI_CH4U_init_send_tag(comm->context_id + context_offset, comm->rank, tag);
+
+ am_hdr.msg_tag = match_bits;
+ am_hdr.src_rank = comm->rank;
+ if (type == MPIDI_CH4U_SSEND_REQ) {
+ ssend_req.hdr = am_hdr;
+ ssend_req.sreq_ptr = (uint64_t) sreq;
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+
+ mpi_errno = MPIDI_NM_am_isend(rank, comm, MPIDI_CH4U_SSEND_REQ,
+ &ssend_req, sizeof(ssend_req),
+ buf, count, datatype, sreq, NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ else {
+ mpi_errno = MPIDI_NM_am_isend(rank, comm, MPIDI_CH4U_SEND,
+ &am_hdr, sizeof(am_hdr), buf, count, datatype, sreq, NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_AM_ISEND);
+ return mpi_errno;
+
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_psend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_psend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ MPIR_Request *sreq;
+ uint64_t match_bits;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PSEND_INIT);
+
+ sreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__PREQUEST_SEND, 2);
+ *request = sreq;
+
+ MPIR_Comm_add_ref(comm);
+ sreq->comm = comm;
+ match_bits = MPIDI_CH4U_init_send_tag(comm->context_id + context_offset, rank, tag);
+
+ MPIDI_CH4U_REQUEST(sreq, buffer) = (void *) buf;
+ MPIDI_CH4U_REQUEST(sreq, count) = count;
+ MPIDI_CH4U_REQUEST(sreq, datatype) = datatype;
+ MPIDI_CH4U_REQUEST(sreq, tag) = match_bits;
+ MPIDI_CH4U_REQUEST(sreq, rank) = rank;
+
+ sreq->u.persist.real_request = NULL;
+ MPIDI_Request_complete(sreq);
+
+ dtype_add_ref_if_not_builtin(datatype);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PSEND_INIT);
+ return MPI_SUCCESS;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_SEND);
+
+ mpi_errno =
+ MPIDI_am_isend(buf, count, datatype, rank, tag, comm, context_offset, request, 1, 0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_SEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_ISEND);
+
+ mpi_errno =
+ MPIDI_am_isend(buf, count, datatype, rank, tag, comm, context_offset, request, 0, 0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_ISEND);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_rsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_rsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_RSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_RSEND);
+
+ mpi_errno =
+ MPIDI_am_isend(buf, count, datatype, rank, tag, comm, context_offset, request, 1, 0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_RSEND);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_irsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_IRSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_IRSEND);
+
+ mpi_errno =
+ MPIDI_am_isend(buf, count, datatype, rank, tag, comm, context_offset, request, 0, 0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_IRSEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_ssend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_SSEND);
+
+ mpi_errno = MPIDI_am_isend(buf, count, datatype, rank, tag, comm,
+ context_offset, request, 1, MPIDI_CH4U_SSEND_REQ);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_SSEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_issend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_ISSEND);
+
+ mpi_errno = MPIDI_am_isend(buf, count, datatype, rank, tag, comm,
+ context_offset, request, 0, MPIDI_CH4U_SSEND_REQ);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_ISSEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_startall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_startall(int count, MPIR_Request * requests[])
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ int rank, tag, context_offset;
+ MPI_Datatype datatype;
+ uint64_t msg_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_STARTALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_STARTALL);
+
+ for (i = 0; i < count; i++) {
+ MPIR_Request *const preq = requests[i];
+ MPI_Request sreq_handle;
+
+ msg_tag = MPIDI_CH4U_REQUEST(preq, tag);
+ datatype = MPIDI_CH4U_REQUEST(preq, datatype);
+
+ tag = MPIDI_CH4U_get_tag(msg_tag);
+ rank = MPIDI_CH4U_REQUEST(preq, rank);
+ context_offset = MPIDI_CH4U_get_context(msg_tag) - preq->comm->context_id;
+
+ switch (MPIDI_CH4U_REQUEST(preq, p_type)) {
+
+ case MPIDI_PTYPE_RECV:
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_NM_mpi_irecv(MPIDI_CH4U_REQUEST(preq, buffer),
+ MPIDI_CH4U_REQUEST(preq, count),
+ datatype, rank, tag,
+ preq->comm, context_offset,
+ &preq->u.persist.real_request);
+#else
+ mpi_errno = MPIDI_Irecv(MPIDI_CH4U_REQUEST(preq, buffer),
+ MPIDI_CH4U_REQUEST(preq, count),
+ datatype, rank, tag,
+ preq->comm, context_offset, &preq->u.persist.real_request);
+#endif
+ break;
+
+ case MPIDI_PTYPE_SEND:
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_NM_mpi_isend(MPIDI_CH4U_REQUEST(preq, buffer),
+ MPIDI_CH4U_REQUEST(preq, count),
+ datatype, rank, tag,
+ preq->comm, context_offset,
+ &preq->u.persist.real_request);
+#else
+ mpi_errno = MPIDI_Isend(MPIDI_CH4U_REQUEST(preq, buffer),
+ MPIDI_CH4U_REQUEST(preq, count),
+ datatype, rank, tag,
+ preq->comm, context_offset, &preq->u.persist.real_request);
+#endif
+ break;
+
+ case MPIDI_PTYPE_SSEND:
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_NM_mpi_issend(MPIDI_CH4U_REQUEST(preq, buffer),
+ MPIDI_CH4U_REQUEST(preq, count),
+ datatype, rank, tag,
+ preq->comm, context_offset,
+ &preq->u.persist.real_request);
+#else
+ mpi_errno = MPIDI_Issend(MPIDI_CH4U_REQUEST(preq, buffer),
+ MPIDI_CH4U_REQUEST(preq, count),
+ datatype, rank, tag,
+ preq->comm, context_offset, &preq->u.persist.real_request);
+#endif
+ break;
+
+ case MPIDI_PTYPE_BSEND:
+ mpi_errno = MPIR_Ibsend_impl(MPIDI_CH4U_REQUEST(preq, buffer),
+ MPIDI_CH4U_REQUEST(preq, count),
+ datatype, rank, tag, preq->comm, &sreq_handle);
+ if (mpi_errno == MPI_SUCCESS)
+ MPIR_Request_get_ptr(sreq_handle, preq->u.persist.real_request);
+
+ break;
+
+ default:
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, __FUNCTION__,
+ __LINE__, MPI_ERR_INTERN, "**ch3|badreqtype",
+ "**ch3|badreqtype %d", MPIDI_CH4U_REQUEST(preq,
+ p_type));
+ }
+
+ if (mpi_errno == MPI_SUCCESS) {
+ preq->status.MPI_ERROR = MPI_SUCCESS;
+
+ if (MPIDI_CH4U_REQUEST(preq, p_type) == MPIDI_PTYPE_BSEND) {
+ preq->cc_ptr = &preq->cc;
+ MPIDI_Request_set_completed(preq);
+ }
+ else
+ preq->cc_ptr = &preq->u.persist.real_request->cc;
+ }
+ else {
+ preq->u.persist.real_request = NULL;
+ preq->status.MPI_ERROR = mpi_errno;
+ preq->cc_ptr = &preq->cc;
+ MPIDI_Request_set_completed(preq);
+ }
+ dtype_release_if_not_builtin(datatype);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_STARTALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_send_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_SEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_SEND_INIT);
+
+ mpi_errno = MPIDI_psend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+ MPIDI_CH4U_REQUEST((*request), p_type) = MPIDI_PTYPE_SEND;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_SEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_ssend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_SSEND_INIT);
+
+ mpi_errno = MPIDI_psend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+ MPIDI_CH4U_REQUEST((*request), p_type) = MPIDI_PTYPE_SSEND;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_SSEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_bsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_BSEND_INIT);
+
+ mpi_errno = MPIDI_psend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+ MPIDI_CH4U_REQUEST((*request), p_type) = MPIDI_PTYPE_BSEND;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_BSEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_rsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_RSEND_INIT);
+
+ mpi_errno = MPIDI_psend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+ MPIDI_CH4U_REQUEST((*request), p_type) = MPIDI_PTYPE_SEND;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_RSEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIG_mpi_cancel_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIG_mpi_cancel_send(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_MPI_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_MPI_CANCEL_SEND);
+
+ /* cannot cancel send */
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_MPI_CANCEL_SEND);
+ return mpi_errno;
+}
+
+#endif /* MPIDIG_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/include/Makefile.mk b/src/mpid/ch4/include/Makefile.mk
new file mode 100644
index 0000000..bd58048
--- /dev/null
+++ b/src/mpid/ch4/include/Makefile.mk
@@ -0,0 +1,23 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+
+AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/ch4/include
+AM_CPPFLAGS += -I$(top_builddir)/src/mpid/ch4/include
+
+noinst_HEADERS += src/mpid/ch4/include/netmodpre.h \
+ src/mpid/ch4/include/shmpre.h \
+ src/mpid/ch4/include/mpidch4.h \
+ src/mpid/ch4/include/mpidch4r.h \
+ src/mpid/ch4/include/mpidimpl.h \
+ src/mpid/ch4/include/mpidpre.h \
+ src/mpid/ch4/include/mpid_sched.h \
+ src/mpid/ch4/include/mpid_thread.h
diff --git a/src/mpid/ch4/include/mpid_sched.h b/src/mpid/ch4/include/mpid_sched.h
new file mode 100644
index 0000000..818a1cf
--- /dev/null
+++ b/src/mpid/ch4/include/mpid_sched.h
@@ -0,0 +1,30 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPID_SCHED_H_INCLUDED
+#define MPID_SCHED_H_INCLUDED
+#include "mpidu_sched.h"
+
+#define MPIR_Sched_cb MPIDU_Sched_cb
+#define MPIR_Sched_cb2 MPIDU_Sched_cb2
+#define MPIR_Sched_next_tag MPIDU_Sched_next_tag
+#define MPIR_Sched_create MPIDU_Sched_create
+#define MPIR_Sched_clone MPIDU_Sched_clone
+#define MPIR_Sched_start MPIDU_Sched_start
+#define MPIR_Sched_send MPIDU_Sched_send
+#define MPIR_Sched_send_defer MPIDU_Sched_send_defer
+#define MPIR_Sched_recv MPIDU_Sched_recv
+#define MPIR_Sched_recv_status MPIDU_Sched_recv_status
+#define MPIR_Sched_ssend MPIDU_Sched_ssend
+#define MPIR_Sched_reduce MPIDU_Sched_reduce
+#define MPIR_Sched_copy MPIDU_Sched_copy
+#define MPIR_Sched_barrier MPIDU_Sched_barrier
+
+#endif /* MPID_SCHED_H_INCLUDED */
diff --git a/src/mpid/ch4/include/mpid_thread.h b/src/mpid/ch4/include/mpid_thread.h
new file mode 100644
index 0000000..2122d3d
--- /dev/null
+++ b/src/mpid/ch4/include/mpid_thread.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPID_THREAD_H_INCLUDED
+#define MPID_THREAD_H_INCLUDED
+
+#include "mpidu_thread_fallback.h"
+
+/* We simply use the fallback timer functionality and do not define
+ * our own */
+
+typedef MPIDU_Thread_cond_t MPID_Thread_cond_t;
+typedef MPIDU_Thread_id_t MPID_Thread_id_t;
+typedef MPIDU_Thread_tls_t MPID_Thread_tls_t;
+typedef MPIDU_Thread_func_t MPID_Thread_func_t;
+
+#ifdef MPIDI_CH4_USE_TICKET_LOCK
+#include "mpid_ticketlock.h"
+typedef MPIDI_CH4_Ticket_lock MPID_Thread_mutex_t;
+#define MPID_THREAD_CS_ENTER MPIDI_CH4I_THREAD_CS_ENTER
+#define MPID_THREAD_CS_EXIT MPIDI_CH4I_THREAD_CS_EXIT
+#define MPID_THREAD_CS_YIELD MPIDI_CH4I_THREAD_CS_YIELD
+#define MPID_Thread_mutex_create MPIDI_CH4I_Thread_mutex_create
+#define MPID_Thread_mutex_destroy MPIDI_CH4I_Thread_mutex_destroy
+#define MPID_Thread_mutex_lock MPIDI_CH4I_Thread_mutex_lock
+#define MPID_Thread_mutex_unlock MPIDI_CH4I_Thread_mutex_unlock
+#define MPID_Thread_cond_wait MPIDI_CH4I_Thread_cond_wait
+#else
+typedef MPIDU_Thread_mutex_t MPID_Thread_mutex_t;
+#define MPID_THREAD_CS_ENTER MPIDU_THREAD_CS_ENTER
+#define MPID_THREAD_CS_EXIT MPIDU_THREAD_CS_EXIT
+#define MPID_THREAD_CS_YIELD MPIDU_THREAD_CS_YIELD
+#define MPID_Thread_mutex_create MPIDU_Thread_mutex_create
+#define MPID_Thread_mutex_destroy MPIDU_Thread_mutex_destroy
+#define MPID_Thread_mutex_lock MPIDU_Thread_mutex_lock
+#define MPID_Thread_mutex_unlock MPIDU_Thread_mutex_unlock
+#define MPID_Thread_cond_wait MPIDU_Thread_cond_wait
+#endif /* MPIDI_CH4_USE_TICKET_LOCK */
+
+#define MPID_Thread_create MPIDU_Thread_create
+#define MPID_Thread_exit MPIDU_Thread_exit
+#define MPID_Thread_self MPIDU_Thread_self
+#define MPID_Thread_same MPIDU_Thread_same
+#define MPID_Thread_same MPIDU_Thread_same
+
+#define MPID_Thread_cond_create MPIDU_Thread_cond_create
+#define MPID_Thread_cond_destroy MPIDU_Thread_cond_destroy
+#define MPID_Thread_cond_broadcast MPIDU_Thread_cond_broadcast
+#define MPID_Thread_cond_signal MPIDU_Thread_cond_signal
+
+#define MPID_Thread_tls_create MPIDU_Thread_tls_create
+#define MPID_Thread_tls_destroy MPIDU_Thread_tls_destroy
+#define MPID_Thread_tls_set MPIDU_Thread_tls_set
+#define MPID_Thread_tls_get MPIDU_Thread_tls_get
+
+#define MPID_THREADPRIV_KEY_CREATE MPIDU_THREADPRIV_KEY_CREATE
+#define MPID_THREADPRIV_KEY_GET_ADDR MPIDU_THREADPRIV_KEY_GET_ADDR
+#define MPID_THREADPRIV_KEY_DESTROY MPIDU_THREADPRIV_KEY_DESTROY
+
+
+#endif /* MPID_THREAD_H_INCLUDED */
diff --git a/src/mpid/ch4/include/mpid_ticketlock.h b/src/mpid/ch4/include/mpid_ticketlock.h
new file mode 100644
index 0000000..9ed4be7
--- /dev/null
+++ b/src/mpid/ch4/include/mpid_ticketlock.h
@@ -0,0 +1,202 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPID_TICKETLOCK_H_INCLUDED
+#define MPID_TICKETLOCK_H_INCLUDED
+
+#define MPIDI_CH4_CACHELINE_SIZE 64
+
+typedef union MPIDI_CH4_Ticket_lock {
+ unsigned u;
+ char cacheline[MPIDI_CH4_CACHELINE_SIZE];
+ struct {
+ unsigned short ticket;
+ unsigned short clients;
+ } s;
+} MPIDI_CH4_Ticket_lock __attribute__ ((aligned(MPIDI_CH4_CACHELINE_SIZE)));
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4I_Thread_mutex_acquire(MPIDI_CH4_Ticket_lock * m)
+{
+ uint16_t u = __sync_fetch_and_add(&m->s.clients, 1);
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_ACQUIRE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_ACQUIRE);
+
+ while (m->s.ticket != u)
+ asm volatile ("pause\n":::"memory");
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_ACQUIRE);
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4I_Thread_mutex_release(MPIDI_CH4_Ticket_lock * m)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_RELEASE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_RELEASE);
+
+ asm volatile ("":::"memory");
+ m->s.ticket++;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_RELEASE);
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4I_Thread_mutex_try_acquire(MPIDI_CH4_Ticket_lock * m)
+{
+ uint16_t u = m->s.clients;
+ uint16_t u2 = u + 1;
+ uint32_t val = ((uint32_t) u << 16) + u;
+ uint32_t val2 = ((uint32_t) u2 << 16) + u;
+ int ret = EBUSY;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_TRY_ACQUIRE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_TRY_ACQUIRE);
+
+ if (__sync_val_compare_and_swap(&m->u, val, val2) == val)
+ ret = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_TRY_ACQUIRE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4I_Thread_mutex_lock(MPIDI_CH4_Ticket_lock * m,
+ int *mpi_error)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_LOCK);
+
+ MPIDI_CH4I_Thread_mutex_acquire(m);
+ *mpi_error = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_LOCK);
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4I_Thread_mutex_unlock(MPIDI_CH4_Ticket_lock * m,
+ int *mpi_error)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_UNLOCK);
+
+ MPIDI_CH4I_Thread_mutex_release(m);
+ *mpi_error = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_UNLOCK);
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4I_Thread_mutex_create(MPIDI_CH4_Ticket_lock * m,
+ int *mpi_error)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_CREATE);
+
+ m->u = 0;
+ *mpi_error = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_CREATE);
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4I_Thread_mutex_destroy(MPIDI_CH4_Ticket_lock * m,
+ int *mpi_error)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_DESTROY);
+
+ m->u = 0;
+ *mpi_error = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_MUTEX_DESTROY);
+}
+
+/* For this implementation we have two options */
+/* 1) Split the typedef for condition variable mutexes and call the utility routines */
+/* 2) Implement it from scratch */
+/* Currently only async.c is using condition variables, so we should figure out what */
+/* we really want from the cv implementations */
+MPL_STATIC_INLINE_PREFIX void
+MPIDI_CH4I_Thread_cond_wait(MPIDU_Thread_cond_t * cond, MPIDI_CH4_Ticket_lock * m, int *mpi_error)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_THREAD_COND_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_THREAD_COND_WAIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_THREAD_COND_WAIT);
+}
+
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL
+
+#define MPIDI_CH4I_THREAD_CS_ENTER_POBJ(mutex)
+#define MPIDI_CH4I_THREAD_CS_EXIT_POBJ(mutex)
+#define MPIDI_CH4I_THREAD_CS_TRY_POBJ(mutex)
+#define MPIDI_CH4I_THREAD_CS_YIELD_POBJ(mutex)
+
+#define MPIDI_CH4I_THREAD_CS_ENTER_GLOBAL(m) do { if (MPIR_ThreadInfo.isThreaded) { MPIDI_CH4I_Thread_mutex_acquire(&m); }} while (0)
+#define MPIDI_CH4I_THREAD_CS_EXIT_GLOBAL(m) do { if (MPIR_ThreadInfo.isThreaded) { MPIDI_CH4I_Thread_mutex_release(&m); }} while (0)
+#define MPIDI_CH4I_THREAD_CS_TRY_GLOBAL(m) do { (0==MPIDI_CH4I_Thread_mutex_try_acquire(&m));}} while (0)
+#define MPIDI_CH4I_THREAD_CS_YIELD_GLOBAL(m) do { if (MPIR_ThreadInfo.isThreaded) { MPIDI_CH4I_Thread_mutex_release(&m); sched_yield(); MPIDI_CH4I_Thread_mutex_acquire(&m); }} while (0)
+
+#define MPIDI_CH4I_THREAD_CS_ENTER_ALLGRAN(mutex) MPIDI_CH4I_THREAD_CS_ENTER_GLOBAL(m)
+#define MPIDI_CH4I_THREAD_CS_EXIT_ALLGRAN(mutex) MPIDI_CH4I_THREAD_CS_EXIT_GLOBAL(m)
+#define MPIDI_CH4I_THREAD_CS_TRY_ALLGRAN(mutex) MPIDI_CH4I_THREAD_CS_TRY_GLOBAL(m)
+#define MPIDI_CH4I_THREAD_CS_YIELD_ALLGRAN(mutex) MPIDI_CH4I_THREAD_CS_YIELD_GLOBAL(m)
+
+#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ
+
+#define MPIDI_CH4I_THREAD_CS_ENTER_POBJ(m) \
+ do { \
+ if (likely(MPIR_ThreadInfo.isThreaded)) { \
+ MPIDI_CH4I_Thread_mutex_acquire(&m); \
+ } \
+ } while (0)
+
+#define MPIDI_CH4I_THREAD_CS_EXIT_POBJ(m) \
+ do { \
+ if (likely(MPIR_ThreadInfo.isThreaded)) { \
+ MPIDI_CH4I_Thread_mutex_release(&m); \
+ } \
+ } while (0)
+
+#define MPIDI_CH4I_THREAD_CS_TRY_POBJ(m) \
+ do { \
+ if (likely(MPIR_ThreadInfo.isThreaded)) { \
+ MPIDI_CH4I_Thread_mutex_try_acquire(&m); \
+ } \
+ } while (0)
+
+#define MPIDI_CH4I_THREAD_CS_YIELD_POBJ(m) \
+ do { \
+ if (likely(MPIR_ThreadInfo.isThreaded)) { \
+ MPIDI_CH4I_Thread_mutex_release(&m); \
+ sched_yield(); \
+ MPIDI_CH4I_Thread_mutex_acquire(&m); \
+ } \
+ } while (0)
+
+#define MPIDI_CH4I_THREAD_CS_ENTER_ALLGRAN MPIDI_CH4I_THREAD_CS_ENTER_POBJ
+#define MPIDI_CH4I_THREAD_CS_EXIT_ALLGRAN MPIDI_CH4I_THREAD_CS_EXIT_POBJ
+#define MPIDI_CH4I_THREAD_CS_TRY_ALLGRAN MPIDI_CH4I_THREAD_CS_TRY_POBJ
+#define MPIDI_CH4I_THREAD_CS_YIELD_ALLGRAN MPIDI_CH4I_THREAD_CS_YIELD_POBJ
+
+/* GLOBAL locks are all NO-OPs */
+#define MPIDI_CH4I_THREAD_CS_ENTER_GLOBAL(mutex)
+#define MPIDI_CH4I_THREAD_CS_EXIT_GLOBAL(mutex)
+#define MPIDI_CH4I_THREAD_CS_TRY_GLOBAL(mutex)
+#define MPIDI_CH4I_THREAD_CS_YIELD_GLOBAL(mutex)
+
+#else
+
+#error "Ticket locks are only supported in Global or Per-Object Granularity"
+
+#endif /* MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL */
+
+#define MPIDI_CH4I_THREAD_CS_ENTER(name, mutex) MPIDI_CH4I_THREAD_CS_ENTER_##name(mutex)
+#define MPIDI_CH4I_THREAD_CS_EXIT(name, mutex) MPIDI_CH4I_THREAD_CS_EXIT_##name(mutex)
+#define MPIDI_CH4I_THREAD_CS_TRY(name, mutex) MPIDI_CH4I_THREAD_CS_TRY_##name(mutex)
+#define MPIDI_CH4I_THREAD_CS_YIELD(name, mutex) MPIDI_CH4I_THREAD_CS_YIELD_##name(mutex)
+
+#endif /* MPID_TICKETLOCK_H_INCLUDED */
diff --git a/src/mpid/ch4/include/mpidch4.h b/src/mpid/ch4/include/mpidch4.h
new file mode 100644
index 0000000..2238b13
--- /dev/null
+++ b/src/mpid/ch4/include/mpidch4.h
@@ -0,0 +1,428 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPIDCH4_H_INCLUDED
+#define MPIDCH4_H_INCLUDED
+
+/* We need to define the static inlines right away to avoid
+ * any implicit prototype generation and subsequent warnings
+ * This allows us to make ADI up calls from within a direct
+ * netmod.
+ */
+#define MPIDI_CH4I_API(rc,fcnname,...) \
+ MPL_STATIC_INLINE_PREFIX rc MPIDI_##fcnname(__VA_ARGS__) MPL_STATIC_INLINE_SUFFIX
+
+MPIDI_CH4I_API(int, Init, int *, char ***, int, int *, int *, int *);
+MPIDI_CH4I_API(int, InitCompleted, void);
+MPIDI_CH4I_API(int, Abort, MPIR_Comm *, int, int, const char *);
+MPIDI_CH4I_API(int, Cancel_recv, MPIR_Request *);
+MPIDI_CH4I_API(int, Cancel_send, MPIR_Request *);
+MPIDI_CH4I_API(int, Comm_disconnect, MPIR_Comm *);
+MPIDI_CH4I_API(int, Comm_spawn_multiple, int, char *[], char **[], const int[], MPIR_Info *[], int,
+ MPIR_Comm *, MPIR_Comm **, int[]);
+MPIDI_CH4I_API(int, Comm_failure_get_acked, MPIR_Comm *, MPIR_Group **);
+MPIDI_CH4I_API(int, Comm_get_all_failed_procs, MPIR_Comm *, MPIR_Group **, int);
+MPIDI_CH4I_API(int, Comm_revoke, MPIR_Comm *, int);
+MPIDI_CH4I_API(int, Comm_failure_ack, MPIR_Comm *);
+MPIDI_CH4I_API(int, Comm_AS_enabled, MPIR_Comm *);
+MPIDI_CH4I_API(int, Comm_get_lpid, MPIR_Comm *, int, int *, MPL_bool);
+MPIDI_CH4I_API(int, Finalize, void);
+MPIDI_CH4I_API(int, Get_universe_size, int *);
+MPIDI_CH4I_API(int, Get_processor_name, char *, int, int *);
+MPIDI_CH4I_API(int, Iprobe, int, int, MPIR_Comm *, int, int *, MPI_Status *);
+MPIDI_CH4I_API(int, Irecv, void *, int, MPI_Datatype, int, int, MPIR_Comm *, int, MPIR_Request **);
+MPIDI_CH4I_API(int, Isend, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Issend, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Mrecv, void *, int, MPI_Datatype, MPIR_Request *, MPI_Status *);
+MPIDI_CH4I_API(int, Imrecv, void *, int, MPI_Datatype, MPIR_Request *, MPIR_Request **);
+MPIDI_CH4I_API(int, Open_port, MPIR_Info *, char *);
+MPIDI_CH4I_API(int, Close_port, const char *);
+MPIDI_CH4I_API(int, Comm_accept, const char *, MPIR_Info *, int, MPIR_Comm *, MPIR_Comm **);
+MPIDI_CH4I_API(int, Comm_connect, const char *, MPIR_Info *, int, MPIR_Comm *, MPIR_Comm **);
+MPIDI_CH4I_API(int, Probe, int, int, MPIR_Comm *, int, MPI_Status *);
+MPIDI_CH4I_API(int, Mprobe, int, int, MPIR_Comm *, int, MPIR_Request **, MPI_Status *);
+MPIDI_CH4I_API(int, Improbe, int, int, MPIR_Comm *, int, int *, MPIR_Request **, MPI_Status *);
+MPIDI_CH4I_API(int, Progress_test, void);
+MPIDI_CH4I_API(int, Progress_poke, void);
+MPIDI_CH4I_API(void, Progress_start, MPID_Progress_state *);
+MPIDI_CH4I_API(void, Progress_end, MPID_Progress_state *);
+MPIDI_CH4I_API(int, Progress_wait, MPID_Progress_state *);
+MPIDI_CH4I_API(int, Progress_register, int (*progress_fn) (int *), int *id);
+MPIDI_CH4I_API(int, Progress_deregister, int id);
+MPIDI_CH4I_API(int, Progress_activate, int id);
+MPIDI_CH4I_API(int, Progress_deactivate, int id);
+MPIDI_CH4I_API(int, Recv, void *, int, MPI_Datatype, int, int, MPIR_Comm *, int, MPI_Status *,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Recv_init, void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(void, Request_set_completed, MPIR_Request *);
+MPIDI_CH4I_API(int, Request_complete, MPIR_Request *);
+MPIDI_CH4I_API(int, Request_is_anysource, MPIR_Request *);
+MPIDI_CH4I_API(int, Send, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Ssend, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Rsend, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Irsend, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Send_init, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Ssend_init, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Bsend_init, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Rsend_init, const void *, int, MPI_Datatype, int, int, MPIR_Comm *, int,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Startall, int, MPIR_Request *[]);
+MPIDI_CH4I_API(int, Accumulate, const void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
+ MPI_Op, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_create, void *, MPI_Aint, int, MPIR_Info *, MPIR_Comm *, MPIR_Win **);
+MPIDI_CH4I_API(int, Win_fence, int, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_free, MPIR_Win **);
+MPIDI_CH4I_API(int, Get, void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_get_info, MPIR_Win *, MPIR_Info **);
+MPIDI_CH4I_API(int, Win_lock, int, int, int, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_unlock, int, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_start, MPIR_Group *, int, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_complete, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_post, MPIR_Group *, int, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_wait, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_test, MPIR_Win *, int *);
+MPIDI_CH4I_API(int, Put, const void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
+ MPIR_Win *);
+MPIDI_CH4I_API(int, Win_set_info, MPIR_Win *, MPIR_Info *);
+MPIDI_CH4I_API(int, Comm_reenable_anysource, MPIR_Comm *, MPIR_Group **);
+MPIDI_CH4I_API(int, Comm_remote_group_failed, MPIR_Comm *, MPIR_Group **);
+MPIDI_CH4I_API(int, Comm_group_failed, MPIR_Comm *, MPIR_Group **);
+MPIDI_CH4I_API(int, Win_attach, MPIR_Win *, void *, MPI_Aint);
+MPIDI_CH4I_API(int, Win_allocate_shared, MPI_Aint, int, MPIR_Info *, MPIR_Comm *, void **,
+ MPIR_Win **);
+MPIDI_CH4I_API(int, Rput, const void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
+ MPIR_Win *, MPIR_Request **);
+MPIDI_CH4I_API(int, Win_flush_local, int, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_detach, MPIR_Win *, const void *);
+MPIDI_CH4I_API(int, Compare_and_swap, const void *, const void *, void *, MPI_Datatype, int,
+ MPI_Aint, MPIR_Win *);
+MPIDI_CH4I_API(int, Raccumulate, const void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
+ MPI_Op, MPIR_Win *, MPIR_Request **);
+MPIDI_CH4I_API(int, Rget_accumulate, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ int, MPI_Aint, int, MPI_Datatype, MPI_Op, MPIR_Win *, MPIR_Request **);
+MPIDI_CH4I_API(int, Fetch_and_op, const void *, void *, MPI_Datatype, int, MPI_Aint, MPI_Op,
+ MPIR_Win *);
+MPIDI_CH4I_API(int, Win_shared_query, MPIR_Win *, int, MPI_Aint *, int *, void *);
+MPIDI_CH4I_API(int, Win_allocate, MPI_Aint, int, MPIR_Info *, MPIR_Comm *, void *, MPIR_Win **);
+MPIDI_CH4I_API(int, Win_flush, int, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_flush_local_all, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_unlock_all, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_create_dynamic, MPIR_Info *, MPIR_Comm *, MPIR_Win **);
+MPIDI_CH4I_API(int, Rget, void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPIR_Win *,
+ MPIR_Request **);
+MPIDI_CH4I_API(int, Win_sync, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_flush_all, MPIR_Win *);
+MPIDI_CH4I_API(int, Get_accumulate, const void *, int, MPI_Datatype, void *, int, MPI_Datatype, int,
+ MPI_Aint, int, MPI_Datatype, MPI_Op, MPIR_Win *);
+MPIDI_CH4I_API(int, Win_lock_all, int, MPIR_Win *);
+MPIDI_CH4I_API(void *, Alloc_mem, size_t, MPIR_Info *);
+MPIDI_CH4I_API(int, Free_mem, void *);
+MPIDI_CH4I_API(int, Get_node_id, MPIR_Comm *, int rank, MPID_Node_id_t *);
+MPIDI_CH4I_API(int, Get_max_node_id, MPIR_Comm *, MPID_Node_id_t *);
+MPIDI_CH4I_API(int, Request_is_pending_failure, MPIR_Request *);
+MPIDI_CH4I_API(MPI_Aint, Aint_add, MPI_Aint, MPI_Aint);
+MPIDI_CH4I_API(MPI_Aint, Aint_diff, MPI_Aint, MPI_Aint);
+MPIDI_CH4I_API(int, Intercomm_exchange_map, MPIR_Comm *, int, MPIR_Comm *, int, int *, int **,
+ int *);
+MPIDI_CH4I_API(int, Create_intercomm_from_lpids, MPIR_Comm *, int, const int[]);
+MPIDI_CH4I_API(int, Comm_create_hook, MPIR_Comm *);
+MPIDI_CH4I_API(int, Comm_free_hook, MPIR_Comm *);
+MPIDI_CH4I_API(int, Barrier, MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Bcast, void *, int, MPI_Datatype, int, MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Allreduce, const void *, void *, int, MPI_Datatype, MPI_Op, MPIR_Comm *,
+ MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Allgather, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Allgatherv, const void *, int, MPI_Datatype, void *, const int *, const int *,
+ MPI_Datatype, MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Scatter, const void *, int, MPI_Datatype, void *, int, MPI_Datatype, int,
+ MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Scatterv, const void *, const int *, const int *, MPI_Datatype, void *, int,
+ MPI_Datatype, int, MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Gather, const void *, int, MPI_Datatype, void *, int, MPI_Datatype, int,
+ MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Gatherv, const void *, int, MPI_Datatype, void *, const int *, const int *,
+ MPI_Datatype, int, MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Alltoall, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Alltoallv, const void *, const int *, const int *, MPI_Datatype, void *,
+ const int *, const int *, MPI_Datatype, MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Alltoallw, const void *, const int[], const int[], const MPI_Datatype[], void *,
+ const int[], const int[], const MPI_Datatype[], MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Reduce, const void *, void *, int, MPI_Datatype, MPI_Op, int, MPIR_Comm *,
+ MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Reduce_scatter, const void *, void *, const int[], MPI_Datatype, MPI_Op,
+ MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Reduce_scatter_block, const void *, void *, int, MPI_Datatype, MPI_Op,
+ MPIR_Comm *, MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Scan, const void *, void *, int, MPI_Datatype, MPI_Op, MPIR_Comm *,
+ MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Exscan, const void *, void *, int, MPI_Datatype, MPI_Op, MPIR_Comm *,
+ MPIR_Errflag_t *);
+MPIDI_CH4I_API(int, Neighbor_allgather, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *);
+MPIDI_CH4I_API(int, Neighbor_allgatherv, const void *, int, MPI_Datatype, void *, const int[],
+ const int[], MPI_Datatype, MPIR_Comm *);
+MPIDI_CH4I_API(int, Neighbor_alltoallv, const void *, const int[], const int[], MPI_Datatype,
+ void *, const int[], const int[], MPI_Datatype, MPIR_Comm *);
+MPIDI_CH4I_API(int, Neighbor_alltoallw, const void *, const int[], const MPI_Aint[],
+ const MPI_Datatype[], void *, const int[], const MPI_Aint[], const MPI_Datatype[],
+ MPIR_Comm *);
+MPIDI_CH4I_API(int, Neighbor_alltoall, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *);
+MPIDI_CH4I_API(int, Ineighbor_allgather, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ineighbor_allgatherv, const void *, int, MPI_Datatype, void *, const int[],
+ const int[], MPI_Datatype, MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ineighbor_alltoall, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ineighbor_alltoallv, const void *, const int[], const int[], MPI_Datatype,
+ void *, const int[], const int[], MPI_Datatype, MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ineighbor_alltoallw, const void *, const int[], const MPI_Aint[],
+ const MPI_Datatype[], void *, const int[], const MPI_Aint[], const MPI_Datatype[],
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ibarrier, MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ibcast, void *, int, MPI_Datatype, int, MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Iallgather, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Iallgatherv, const void *, int, MPI_Datatype, void *, const int *, const int *,
+ MPI_Datatype, MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Iallreduce, const void *, void *, int, MPI_Datatype, MPI_Op, MPIR_Comm *,
+ MPI_Request *);
+MPIDI_CH4I_API(int, Ialltoall, const void *, int, MPI_Datatype, void *, int, MPI_Datatype,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ialltoallv, const void *, const int[], const int[], MPI_Datatype, void *,
+ const int[], const int[], MPI_Datatype, MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ialltoallw, const void *, const int[], const int[], const MPI_Datatype[],
+ void *, const int[], const int[], const MPI_Datatype[], MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Iexscan, const void *, void *, int, MPI_Datatype, MPI_Op, MPIR_Comm *,
+ MPI_Request *);
+MPIDI_CH4I_API(int, Igather, const void *, int, MPI_Datatype, void *, int, MPI_Datatype, int,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Igatherv, const void *, int, MPI_Datatype, void *, const int *, const int *,
+ MPI_Datatype, int, MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ireduce_scatter_block, const void *, void *, int, MPI_Datatype, MPI_Op,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ireduce_scatter, const void *, void *, const int[], MPI_Datatype, MPI_Op,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Ireduce, const void *, void *, int, MPI_Datatype, MPI_Op, int, MPIR_Comm *,
+ MPI_Request *);
+MPIDI_CH4I_API(int, Iscan, const void *, void *, int, MPI_Datatype, MPI_Op, MPIR_Comm *,
+ MPI_Request *);
+MPIDI_CH4I_API(int, Iscatter, const void *, int, MPI_Datatype, void *, int, MPI_Datatype, int,
+ MPIR_Comm *, MPI_Request *);
+MPIDI_CH4I_API(int, Iscatterv, const void *, const int *, const int *, MPI_Datatype, void *, int,
+ MPI_Datatype, int, MPIR_Comm *, MPI_Request *);
+
+/* This function is not exposed to the upper layers but functions in a way
+ * similar to the functions above. Other CH4-level functions should call this
+ * function to query locality. This function will determine whether to call the
+ * netmod or CH4U locality functions. */
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4_rank_is_local(int rank, MPIR_Comm * comm);
+
+/* Include netmod prototypes */
+#include <netmod.h>
+#ifdef MPIDI_BUILD_CH4_SHM
+#include "shm.h"
+#endif
+
+/* Declare request functions here so netmods can refer to
+ them in the NETMOD_DIRECT mode */
+#include "ch4_request.h"
+
+/* Include netmod and shm implementations */
+/* Prototypes are split from impl to avoid */
+/* circular dependencies */
+#include <netmod_impl.h>
+#ifdef MPIDI_BUILD_CH4_SHM
+#include "shm_impl.h"
+#endif
+
+#include "ch4_init.h"
+#include "ch4_probe.h"
+#include "ch4_send.h"
+#include "ch4_recv.h"
+#include "ch4_comm.h"
+#include "ch4_win.h"
+#include "ch4_rma.h"
+#include "ch4_progress.h"
+#include "ch4_spawn.h"
+#include "ch4_proc.h"
+#include "ch4_coll.h"
+
+#define MPID_Abort MPIDI_Abort
+#define MPID_Accumulate MPIDI_Accumulate
+#define MPID_Alloc_mem MPIDI_Alloc_mem
+#define MPID_Bsend_init MPIDI_Bsend_init
+#define MPID_Cancel_recv MPIDI_Cancel_recv
+#define MPID_Cancel_send MPIDI_Cancel_send
+#define MPID_Close_port MPIDI_Close_port
+#define MPID_Comm_accept MPIDI_Comm_accept
+#define MPID_Comm_connect MPIDI_Comm_connect
+#define MPID_Comm_disconnect MPIDI_Comm_disconnect
+#define MPID_Comm_group_failed MPIDI_Comm_group_failed
+#define MPID_Comm_reenable_anysource MPIDI_Comm_reenable_anysource
+#define MPID_Comm_remote_group_failed MPIDI_Comm_remote_group_failed
+#define MPID_Comm_spawn_multiple MPIDI_Comm_spawn_multiple
+#define MPID_Comm_failure_get_acked MPIDI_Comm_failure_get_acked
+#define MPID_Comm_get_all_failed_procs MPIDI_Comm_get_all_failed_procs
+#define MPID_Comm_revoke MPIDI_Comm_revoke
+#define MPID_Comm_failure_ack MPIDI_Comm_failure_ack
+#define MPID_Comm_AS_enabled MPIDI_Comm_AS_enabled
+#define MPID_Comm_get_lpid MPIDI_Comm_get_lpid
+#define MPID_Compare_and_swap MPIDI_Compare_and_swap
+#define MPID_Fetch_and_op MPIDI_Fetch_and_op
+#define MPID_Finalize MPIDI_Finalize
+#define MPID_Free_mem MPIDI_Free_mem
+#define MPID_Get MPIDI_Get
+#define MPID_Get_accumulate MPIDI_Get_accumulate
+#define MPID_Get_processor_name MPIDI_Get_processor_name
+#define MPID_Get_universe_size MPIDI_Get_universe_size
+#define MPID_Improbe MPIDI_Improbe
+#define MPID_Imrecv MPIDI_Imrecv
+#define MPID_Init MPIDI_Init
+#define MPID_InitCompleted MPIDI_InitCompleted
+#define MPID_Iprobe MPIDI_Iprobe
+#define MPID_Irecv MPIDI_Irecv
+#define MPID_Irsend MPIDI_Irsend
+#define MPID_Isend MPIDI_Isend
+#define MPID_Issend MPIDI_Issend
+#define MPID_Mprobe MPIDI_Mprobe
+#define MPID_Mrecv MPIDI_Mrecv
+#define MPID_Open_port MPIDI_Open_port
+#define MPID_Probe MPIDI_Probe
+#define MPID_Progress_end MPIDI_Progress_end
+#define MPID_Progress_poke MPIDI_Progress_poke
+#define MPID_Progress_start MPIDI_Progress_start
+#define MPID_Progress_test MPIDI_Progress_test
+#define MPID_Progress_wait MPIDI_Progress_wait
+#define MPID_Progress_register MPIDI_Progress_register
+#define MPID_Progress_deregister MPIDI_Progress_deregister
+#define MPID_Progress_activate MPIDI_Progress_activate
+#define MPID_Progress_deactivate MPIDI_Progress_deactivate
+#define MPID_Put MPIDI_Put
+#define MPID_Raccumulate MPIDI_Raccumulate
+#define MPID_Recv MPIDI_Recv
+#define MPID_Recv_init MPIDI_Recv_init
+#define MPID_Request_release MPIDI_Request_release
+#define MPID_Request_complete MPIDI_Request_complete
+#define MPID_Request_is_anysource MPIDI_Request_is_anysource
+#define MPID_Request_set_completed MPIDI_Request_set_completed
+#define MPID_Rget MPIDI_Rget
+#define MPID_Rget_accumulate MPIDI_Rget_accumulate
+#define MPID_Rput MPIDI_Rput
+#define MPID_Rsend MPIDI_Rsend
+#define MPID_Rsend_init MPIDI_Rsend_init
+#define MPID_Send MPIDI_Send
+#define MPID_Send_init MPIDI_Send_init
+#define MPID_Ssend MPIDI_Ssend
+#define MPID_Ssend_init MPIDI_Ssend_init
+#define MPID_Startall MPIDI_Startall
+#define MPID_Win_allocate MPIDI_Win_allocate
+#define MPID_Win_allocate_shared MPIDI_Win_allocate_shared
+#define MPID_Win_attach MPIDI_Win_attach
+#define MPID_Win_complete MPIDI_Win_complete
+#define MPID_Win_create MPIDI_Win_create
+#define MPID_Win_create_dynamic MPIDI_Win_create_dynamic
+#define MPID_Win_detach MPIDI_Win_detach
+#define MPID_Win_fence MPIDI_Win_fence
+#define MPID_Win_flush MPIDI_Win_flush
+#define MPID_Win_flush_all MPIDI_Win_flush_all
+#define MPID_Win_flush_local MPIDI_Win_flush_local
+#define MPID_Win_flush_local_all MPIDI_Win_flush_local_all
+#define MPID_Win_free MPIDI_Win_free
+#define MPID_Win_get_info MPIDI_Win_get_info
+#define MPID_Win_lock MPIDI_Win_lock
+#define MPID_Win_lock_all MPIDI_Win_lock_all
+#define MPID_Win_post MPIDI_Win_post
+#define MPID_Win_set_info MPIDI_Win_set_info
+#define MPID_Win_shared_query MPIDI_Win_shared_query
+#define MPID_Win_start MPIDI_Win_start
+#define MPID_Win_sync MPIDI_Win_sync
+#define MPID_Win_test MPIDI_Win_test
+#define MPID_Win_unlock MPIDI_Win_unlock
+#define MPID_Win_unlock_all MPIDI_Win_unlock_all
+#define MPID_Win_wait MPIDI_Win_wait
+#define MPID_Get_node_id MPIDI_Get_node_id
+#define MPID_Get_max_node_id MPIDI_Get_max_node_id
+#define MPID_Request_is_pending_failure MPIDI_Request_is_pending_failure
+#define MPID_Aint_add MPIDI_Aint_add
+#define MPID_Aint_diff MPIDI_Aint_diff
+#define MPID_Intercomm_exchange_map MPIDI_Intercomm_exchange_map
+#define MPID_Create_intercomm_from_lpids MPIDI_Create_intercomm_from_lpids
+/* Variables */
+#define MPID_Barrier MPIDI_Barrier
+#define MPID_Bcast MPIDI_Bcast
+#define MPID_Allreduce MPIDI_Allreduce
+#define MPID_Allgather MPIDI_Allgather
+#define MPID_Allgatherv MPIDI_Allgatherv
+#define MPID_Scatter MPIDI_Scatter
+#define MPID_Scatterv MPIDI_Scatterv
+#define MPID_Gather MPIDI_Gather
+#define MPID_Gatherv MPIDI_Gatherv
+#define MPID_Alltoall MPIDI_Alltoall
+#define MPID_Alltoallv MPIDI_Alltoallv
+#define MPID_Alltoallw MPIDI_Alltoallw
+#define MPID_Reduce MPIDI_Reduce
+#define MPID_Reduce_scatter MPIDI_Reduce_scatter
+#define MPID_Reduce_scatter_block MPIDI_Reduce_scatter_block
+#define MPID_Scan MPIDI_Scan
+#define MPID_Exscan MPIDI_Exscan
+#define MPID_Neighbor_allgather MPIDI_Neighbor_allgather
+#define MPID_Neighbor_allgatherv MPIDI_Neighbor_allgatherv
+#define MPID_Neighbor_alltoallv MPIDI_Neighbor_alltoallv
+#define MPID_Neighbor_alltoallw MPIDI_Neighbor_alltoallw
+#define MPID_Neighbor_alltoall MPIDI_Neighbor_alltoall
+#define MPID_Ineighbor_allgather MPIDI_Ineighbor_allgather
+#define MPID_Ineighbor_allgatherv MPIDI_Ineighbor_allgatherv
+#define MPID_Ineighbor_alltoall MPIDI_Ineighbor_alltoall
+#define MPID_Ineighbor_alltoallv MPIDI_Ineighbor_alltoallv
+#define MPID_Ineighbor_alltoallw MPIDI_Ineighbor_alltoallw
+#define MPID_Ibarrier MPIDI_Ibarrier
+#define MPID_Ibcast MPIDI_Ibcast
+#define MPID_Iallgather MPIDI_Iallgather
+#define MPID_Iallgatherv MPIDI_Iallgatherv
+#define MPID_Iallreduce MPIDI_Iallreduce
+#define MPID_Ialltoall MPIDI_Ialltoall
+#define MPID_Ialltoallv MPIDI_Ialltoallv
+#define MPID_Ialltoallw MPIDI_Ialltoallw
+#define MPID_Iexscan MPIDI_Iexscan
+#define MPID_Igather MPIDI_Igather
+#define MPID_Igatherv MPIDI_Igatherv
+#define MPID_Ireduce_scatter_block MPIDI_Ireduce_scatter_block
+#define MPID_Ireduce_scatter MPIDI_Ireduce_scatter
+#define MPID_Ireduce MPIDI_Ireduce
+#define MPID_Iscan MPIDI_Iscan
+#define MPID_Iscatter MPIDI_Iscatter
+#define MPID_Iscatterv MPIDI_Iscatterv
+
+#define MPIDI_MAX_NETMOD_STRING_LEN 64
+extern int MPIDI_num_netmods;
+#ifdef MPL_USE_DBG_LOGGING
+extern MPL_dbg_class MPIDI_CH4_DBG_GENERAL;
+extern MPL_dbg_class MPIDI_CH4_DBG_MAP;
+extern MPL_dbg_class MPIDI_CH4_DBG_COMM;
+extern MPL_dbg_class MPIDI_CH4_DBG_MEMORY;
+#endif /* MPL_USE_DBG_LOGGING */
+
+
+
+
+#endif /* MPIDCH4_H_INCLUDED */
diff --git a/src/mpid/ch4/include/mpidch4r.h b/src/mpid/ch4/include/mpidch4r.h
new file mode 100644
index 0000000..b6ec13b
--- /dev/null
+++ b/src/mpid/ch4/include/mpidch4r.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPIDCH4R_H_INCLUDED
+#define MPIDCH4R_H_INCLUDED
+
+#include "ch4r_symheap.h"
+#include "ch4r_recvq.h"
+#include "ch4r_proc.h"
+#include "ch4r_init.h"
+#include "ch4r_probe.h"
+#include "mpidig_recv.h"
+#include "ch4r_rma.h"
+#include "mpidig_send.h"
+#include "ch4r_win.h"
+#include "ch4r_buf.h"
+#include "ch4r_request.h"
+
+#endif /* MPIDCH4R_H_INCLUDED */
diff --git a/src/mpid/ch4/include/mpidimpl.h b/src/mpid/ch4/include/mpidimpl.h
new file mode 100644
index 0000000..057e881
--- /dev/null
+++ b/src/mpid/ch4/include/mpidimpl.h
@@ -0,0 +1,30 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPIDIMPL_H_INCLUDED
+#define MPIDIMPL_H_INCLUDED
+
+#include "mpichconf.h"
+#include <stdio.h>
+
+#ifdef HAVE_ASSERT_H
+#include <assert.h>
+#endif
+
+#define MPICH_SKIP_MPICXX
+#include "mpiimpl.h"
+
+#ifndef MPICH_MPIDPRE_H_INCLUDED
+#include "mpidpre.h"
+#endif
+
+#include "mpidch4.h"
+
+#endif /* MPIDIMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/include/mpidpost.h b/src/mpid/ch4/include/mpidpost.h
new file mode 100644
index 0000000..dcb7ea3
--- /dev/null
+++ b/src/mpid/ch4/include/mpidpost.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPIDPOST_H_INCLUDED
+#define MPIDPOST_H_INCLUDED
+
+#include "mpidu_datatype.h"
+#include "mpidch4.h"
+
+MPL_STATIC_INLINE_PREFIX void MPID_Request_create_hook(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_REQUEST_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_REQUEST_CREATE_HOOK);
+
+ MPIDI_CH4U_REQUEST(req, req) = NULL;
+#ifdef MPIDI_BUILD_CH4_SHM
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req) = NULL;
+#endif
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_REQUEST_CREATE_HOOK);
+}
+
+MPL_STATIC_INLINE_PREFIX void MPID_Request_free_hook(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_REQUEST_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_REQUEST_FREE_HOOK);
+
+ if (req->kind == MPIR_REQUEST_KIND__PREQUEST_RECV &&
+ NULL != MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req))
+ MPIR_Request_free(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_REQUEST_FREE_HOOK);
+ return;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPID_Request_destroy_hook(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_REQUEST_DESTROY_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_REQUEST_DESTROY_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_REQUEST_DESTROY_HOOK);
+ return;
+}
+
+#endif /* MPIDPOST_H_INCLUDED */
diff --git a/src/mpid/ch4/include/mpidpre.h b/src/mpid/ch4/include/mpidpre.h
new file mode 100644
index 0000000..53492e5
--- /dev/null
+++ b/src/mpid/ch4/include/mpidpre.h
@@ -0,0 +1,466 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef MPIDPRE_H_INCLUDED
+#define MPIDPRE_H_INCLUDED
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include "mpidu_dataloop.h"
+#include "mpid_thread.h"
+#include "mpid_sched.h"
+#include "mpid_timers_fallback.h"
+#include "netmodpre.h"
+#include "shmpre.h"
+#include "mpl_uthash.h"
+
+typedef struct {
+ union {
+ MPIDI_NM_DT_DECL} netmod;
+} MPIDI_Devdt_t;
+#define MPID_DEV_DATATYPE_DECL MPIDI_Devdt_t dev;
+#include "mpid_datatype_fallback.h"
+
+typedef int MPID_Progress_state;
+
+#define CH4_COMPILE_TIME_ASSERT(expr_) \
+ do { switch(0) { case 0: case (expr_): default: break; } } while (0)
+
+typedef enum {
+ MPIDI_PTYPE_RECV,
+ MPIDI_PTYPE_SEND,
+ MPIDI_PTYPE_BSEND,
+ MPIDI_PTYPE_SSEND
+} MPIDI_ptype;
+
+#define MPIDI_CH4U_REQ_BUSY (0x1)
+#define MPIDI_CH4U_REQ_PEER_SSEND (0x1 << 1)
+#define MPIDI_CH4U_REQ_UNEXPECTED (0x1 << 2)
+#define MPIDI_CH4U_REQ_UNEXP_DQUED (0x1 << 3)
+#define MPIDI_CH4U_REQ_UNEXP_CLAIMED (0x1 << 4)
+#define MPIDI_CH4U_REQ_RCV_NON_CONTIG (0x1 << 5)
+#define MPIDI_CH4U_REQ_MATCHED (0x1 << 6)
+#define MPIDI_CH4U_REQ_LONG_RTS (0x1 << 7)
+
+#define MPIDI_PARENT_PORT_KVSKEY "PARENT_ROOT_PORT_NAME"
+#define MPIDI_MAX_KVS_VALUE_LEN 4096
+
+typedef struct MPIDI_CH4U_sreq_t {
+ /* persistent send fields */
+} MPIDI_CH4U_sreq_t;
+
+typedef struct MPIDI_CH4U_lreq_t {
+ /* Long send fields */
+ const void *src_buf;
+ MPI_Count count;
+ MPI_Datatype datatype;
+ uint64_t msg_tag;
+} MPIDI_CH4U_lreq_t;
+
+typedef struct MPIDI_CH4U_rreq_t {
+ /* mrecv fields */
+ void *mrcv_buffer;
+ uint64_t mrcv_count;
+ MPI_Datatype mrcv_datatype;
+
+ uint64_t ignore;
+ uint64_t peer_req_ptr;
+ uint64_t match_req;
+ uint64_t request;
+
+ struct MPIDI_CH4U_rreq_t *prev, *next;
+} MPIDI_CH4U_rreq_t;
+
+typedef struct MPIDI_CH4U_put_req_t {
+ MPIR_Win *win_ptr;
+ uint64_t preq_ptr;
+ void *dt_iov;
+ void *origin_addr;
+ int origin_count;
+ MPI_Datatype origin_datatype;
+ int n_iov;
+} MPIDI_CH4U_put_req_t;
+
+typedef struct MPIDI_CH4U_get_req_t {
+ MPIR_Win *win_ptr;
+ uint64_t greq_ptr;
+ uint64_t addr;
+ MPI_Datatype datatype;
+ int count;
+ int n_iov;
+ void *dt_iov;
+} MPIDI_CH4U_get_req_t;
+
+typedef struct MPIDI_CH4U_cswap_req_t {
+ MPIR_Win *win_ptr;
+ uint64_t creq_ptr;
+ uint64_t addr;
+ MPI_Datatype datatype;
+ void *data;
+ void *result_addr;
+} MPIDI_CH4U_cswap_req_t;
+
+typedef struct MPIDI_CH4U_acc_req_t {
+ MPIR_Win *win_ptr;
+ uint64_t req_ptr;
+ MPI_Datatype origin_datatype;
+ MPI_Datatype target_datatype;
+ int origin_count;
+ int target_count;
+ int n_iov;
+ void *target_addr;
+ void *dt_iov;
+ void *data;
+ size_t data_sz;
+ MPI_Op op;
+ void *result_addr;
+ int result_count;
+ void *origin_addr;
+ MPI_Datatype result_datatype;
+} MPIDI_CH4U_acc_req_t;
+
+typedef struct MPIDI_CH4U_req_ext_t {
+ union {
+ MPIDI_CH4U_sreq_t sreq;
+ MPIDI_CH4U_lreq_t lreq;
+ MPIDI_CH4U_rreq_t rreq;
+ MPIDI_CH4U_put_req_t preq;
+ MPIDI_CH4U_get_req_t greq;
+ MPIDI_CH4U_cswap_req_t creq;
+ MPIDI_CH4U_acc_req_t areq;
+ };
+
+ struct iovec *iov;
+ void *target_cmpl_cb;
+ uint64_t seq_no;
+ uint64_t request;
+ uint64_t status;
+ struct MPIDI_CH4U_req_ext_t *next, *prev;
+
+} MPIDI_CH4U_req_ext_t;
+
+typedef struct MPIDI_CH4U_req_t {
+ union {
+ MPIDI_NM_REQUEST_AM_DECL} netmod_am;
+ MPIDI_CH4U_req_ext_t *req;
+ MPIDI_ptype p_type;
+ void *buffer;
+ uint64_t count;
+ uint64_t tag;
+ int rank;
+ MPI_Datatype datatype;
+} MPIDI_CH4U_req_t;
+
+typedef struct {
+#ifdef MPIDI_CH4_EXCLUSIVE_SHM
+ int is_local;
+#endif
+ /* Anysource handling. Netmod and shm specific requests are cross
+ * referenced. This must be present all of the time to avoid lots of extra
+ * ifdefs in the code. */
+#ifdef MPIDI_BUILD_CH4_SHM
+ struct MPIR_Request *anysource_partner_request;
+#endif
+
+ union {
+ /* The first fields are used by the CH4U apis */
+ MPIDI_CH4U_req_t am;
+
+ /* Used by the netmod direct apis */
+ union {
+ MPIDI_NM_REQUEST_DECL} netmod;
+
+ union {
+ MPIDI_SHM_REQUEST_DECL} shm;
+ } ch4;
+} MPIDI_Devreq_t;
+#define MPIDI_REQUEST_HDR_SIZE offsetof(struct MPIR_Request, dev.ch4.netmod)
+#define MPIDI_CH4I_REQUEST(req,field) (((req)->dev).field)
+#define MPIDI_CH4U_REQUEST(req,field) (((req)->dev.ch4.am).field)
+
+#ifdef MPIDI_BUILD_CH4_SHM
+#define MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req) (((req)->dev).anysource_partner_request)
+#else
+#define MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req) NULL
+#endif
+
+MPL_STATIC_INLINE_PREFIX void MPID_Request_create_hook(struct MPIR_Request *req);
+MPL_STATIC_INLINE_PREFIX void MPID_Request_free_hook(struct MPIR_Request *req);
+MPL_STATIC_INLINE_PREFIX void MPID_Request_destroy_hook(struct MPIR_Request *req);
+
+typedef struct MPIDI_CH4U_win_shared_info {
+ uint32_t disp_unit;
+ size_t size;
+} MPIDI_CH4U_win_shared_info_t;
+
+#define MPIDI_CH4I_ACCU_ORDER_RAR (1)
+#define MPIDI_CH4I_ACCU_ORDER_RAW (1 << 1)
+#define MPIDI_CH4I_ACCU_ORDER_WAR (1 << 2)
+#define MPIDI_CH4I_ACCU_ORDER_WAW (1 << 3)
+
+typedef enum {
+ MPIDI_CH4I_ACCU_SAME_OP,
+ MPIDI_CH4I_ACCU_SAME_OP_NO_OP
+} MPIDI_CH4U_win_info_accumulate_ops;
+
+typedef struct MPIDI_CH4U_win_info_args_t {
+ int no_locks;
+ int same_size;
+ int accumulate_ordering;
+ int alloc_shared_noncontig;
+ MPIDI_CH4U_win_info_accumulate_ops accumulate_ops;
+} MPIDI_CH4U_win_info_args_t;
+
+struct MPIDI_CH4U_win_lock {
+ struct MPIDI_CH4U_win_lock *next;
+ int rank;
+ uint16_t mtype;
+ uint16_t type;
+};
+
+struct MPIDI_CH4U_win_queue {
+ struct MPIDI_CH4U_win_lock *head;
+ struct MPIDI_CH4U_win_lock *tail;
+};
+
+typedef struct MPIDI_CH4U_win_lock_info {
+ unsigned peer;
+ int lock_type;
+ struct MPIR_Win *win;
+ volatile unsigned done;
+} MPIDI_CH4U_win_lock_info;
+
+typedef struct MPIDI_CH4U_win_sync_lock {
+ struct {
+ volatile unsigned locked;
+ volatile unsigned allLocked;
+ } remote;
+ struct {
+ struct MPIDI_CH4U_win_queue requested;
+ int type;
+ unsigned count;
+ } local;
+} MPIDI_CH4U_win_sync_lock;
+
+typedef struct MPIDI_CH4U_win_sync_pscw {
+ struct MPIR_Group *group;
+ volatile unsigned count;
+} MPIDI_CH4U_win_sync_pscw;
+
+typedef struct MPIDI_CH4U_win_sync_t {
+ volatile int origin_epoch_type;
+ volatile int target_epoch_type;
+ MPIDI_CH4U_win_sync_pscw sc, pw;
+ MPIDI_CH4U_win_sync_lock lock;
+} MPIDI_CH4U_win_sync_t;
+
+typedef struct MPIDI_CH4U_win_target {
+ MPIR_cc_t local_cmpl_cnts; /* increase at OP issuing, decrease at local completion */
+ MPIR_cc_t remote_cmpl_cnts; /* increase at OP issuing, decrease at remote completion */
+} MPIDI_CH4U_win_target_t;
+
+typedef struct MPIDI_CH4U_win_t {
+ uint64_t win_id;
+ void *mmap_addr;
+ int64_t mmap_sz;
+
+ /* per-window OP completion for fence */
+ MPIR_cc_t local_cmpl_cnts; /* increase at OP issuing, decrease at local completion */
+ MPIR_cc_t remote_cmpl_cnts; /* increase at OP issuing, decrease at remote completion */
+
+ MPI_Aint *sizes;
+ MPIDI_CH4U_win_lock_info *lockQ;
+ MPIDI_CH4U_win_sync_t sync;
+ MPIDI_CH4U_win_info_args_t info_args;
+ MPIDI_CH4U_win_shared_info_t *shared_table;
+
+ /* per-target structure for sync and OP completion. */
+ MPIDI_CH4U_win_target_t *targets;
+
+ MPL_UT_hash_handle hash_handle;
+} MPIDI_CH4U_win_t;
+
+typedef struct {
+ MPIDI_CH4U_win_t ch4u;
+ union {
+ MPIDI_NM_WIN_DECL} netmod;
+} MPIDI_Devwin_t;
+
+#define MPIDI_CH4U_WIN(win,field) (((win)->dev.ch4u).field)
+#define MPIDI_CH4U_WINFO(win,rank) (MPIDI_CH4U_win_info_t*) &(MPIDI_CH4U_WIN(win, info_table)[rank])
+#define MPIDI_CH4U_WIN_TARGET(win,rank,field) ((((win)->dev.ch4u).targets)[rank].field)
+
+typedef unsigned MPIDI_locality_t;
+
+typedef struct MPIDI_CH4U_comm_t {
+ MPIDI_CH4U_rreq_t *posted_list;
+ MPIDI_CH4U_rreq_t *unexp_list;
+ uint32_t window_instance;
+} MPIDI_CH4U_comm_t;
+
+#define MPIDI_CALC_STRIDE(rank, stride, blocksize, offset) \
+ ((rank) / (blocksize) * ((stride) - (blocksize)) + (rank) + (offset))
+
+#define MPIDI_CALC_STRIDE_SIMPLE(rank, stride, offset) \
+ ((rank) * (stride) + (offset))
+
+typedef enum {
+ MPIDI_RANK_MAP_DIRECT,
+ MPIDI_RANK_MAP_DIRECT_INTRA,
+ MPIDI_RANK_MAP_OFFSET,
+ MPIDI_RANK_MAP_OFFSET_INTRA,
+ MPIDI_RANK_MAP_STRIDE,
+ MPIDI_RANK_MAP_STRIDE_INTRA,
+ MPIDI_RANK_MAP_STRIDE_BLOCK,
+ MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA,
+ MPIDI_RANK_MAP_LUT,
+ MPIDI_RANK_MAP_LUT_INTRA,
+ MPIDI_RANK_MAP_MLUT,
+ MPIDI_RANK_MAP_NONE
+} MPIDI_rank_map_mode;
+
+typedef int MPIDI_lpid_t;
+typedef struct {
+ int avtid;
+ int lpid;
+} MPIDI_gpid_t;
+
+typedef struct {
+ MPIR_OBJECT_HEADER;
+ MPIDI_lpid_t lpid[0];
+} MPIDI_rank_map_lut_t;
+
+typedef struct {
+ MPIR_OBJECT_HEADER;
+ MPIDI_gpid_t gpid[0];
+} MPIDI_rank_map_mlut_t;
+
+typedef struct {
+ MPIDI_rank_map_mode mode;
+ int avtid;
+ int size;
+
+ union {
+ int offset;
+ struct {
+ int offset;
+ int stride;
+ int blocksize;
+ } stride;
+ } reg;
+
+ union {
+ struct {
+ MPIDI_rank_map_lut_t *t;
+ MPIDI_lpid_t *lpid;
+ } lut;
+ struct {
+ MPIDI_rank_map_mlut_t *t;
+ MPIDI_gpid_t *gpid;
+ } mlut;
+ } irreg;
+} MPIDI_rank_map_t;
+
+typedef struct MPIDI_Devcomm_t {
+ struct {
+ /* The first fields are used by the CH4U apis */
+ MPIDI_CH4U_comm_t ch4u;
+
+ /* Used by the netmod direct apis */
+ union {
+ MPIDI_NM_COMM_DECL} netmod;
+
+ union {
+ MPIDI_SHM_COMM_DECL} shm;
+
+ MPIDI_rank_map_t map;
+ MPIDI_rank_map_t local_map;
+ } ch4;
+} MPIDI_Devcomm_t;
+#define MPIDI_CH4U_COMM(comm,field) ((comm)->dev.ch4.ch4u).field
+#define MPIDI_COMM(comm,field) ((comm)->dev.ch4).field
+
+
+#define MPID_USE_NODE_IDS
+typedef uint16_t MPID_Node_id_t;
+
+typedef struct {
+ union {
+ MPIDI_NM_OP_DECL} netmod;
+} MPIDI_Devop_t;
+
+#define MPID_DEV_REQUEST_DECL MPIDI_Devreq_t dev;
+#define MPID_DEV_WIN_DECL MPIDI_Devwin_t dev;
+#define MPID_DEV_COMM_DECL MPIDI_Devcomm_t dev;
+#define MPID_DEV_OP_DECL MPIDI_Devop_t dev;
+
+typedef struct {
+ union {
+ MPIDI_NM_ADDR_DECL} netmod;
+#ifdef MPIDI_BUILD_CH4_LOCALITY_INFO
+ MPIDI_locality_t is_local;
+#endif
+} MPIDI_av_entry_t;
+
+typedef struct {
+ MPIR_OBJECT_HEADER;
+ int size;
+ MPIDI_av_entry_t table[0];
+} MPIDI_av_table_t;
+
+extern MPIDI_av_table_t **MPIDI_av_table;
+extern MPIDI_av_table_t *MPIDI_av_table0;
+
+#define MPIDIU_get_av_table(avtid) (MPIDI_av_table[(avtid)])
+#define MPIDIU_get_av(avtid, lpid) (MPIDI_av_table[(avtid)]->table[(lpid)])
+
+#define MPIDIU_get_node_map(avtid) (MPIDI_CH4_Global.node_map[(avtid)])
+
+#define MPID_Progress_register_hook(fn_, id_) MPID_Progress_register(fn_, id_)
+#define MPID_Progress_deregister_hook(id_) MPID_Progress_deregister(id_)
+#define MPID_Progress_activate_hook(id_) MPID_Progress_activate(id_)
+#define MPID_Progress_deactivate_hook(id_) MPID_Progress_deactivate(id_)
+
+#define HAVE_DEV_COMM_HOOK
+#define MPID_Comm_create_hook MPIDI_Comm_create_hook
+#define MPID_Comm_free_hook MPIDI_Comm_free_hook
+
+#define MPID_Type_create_hook MPIDI_Type_create_hook
+#define MPID_Type_free_hook MPIDI_Type_free_hook
+
+#define MPID_Op_create_hook MPIDI_Op_create_hook
+#define MPID_Op_free_hook MPIDI_Op_free_hook
+
+/* operation for (avtid, lpid) to/from "lpid64" */
+/* hard code limit on number of live comm worlds. This should be fixed by future
+ * LUPID patch */
+#define MPIDIU_AVTID_BITS (8)
+#define MPIDIU_LPID_BITS (24)
+#define MPIDIU_LPID_MASK (0x00FFFFFFU)
+#define MPIDIU_AVTID_MASK (0xFF000000U)
+#define MPIDIU_NEW_AVT_MARK (0x80000000U)
+#define MPIDIU_LUPID_CREATE(avtid, lpid) (((avtid) << MPIDIU_LPID_BITS) | (lpid))
+#define MPIDIU_LUPID_GET_AVTID(lupid) ((((lupid) & MPIDIU_AVTID_MASK) >> MPIDIU_LPID_BITS))
+#define MPIDIU_LUPID_GET_LPID(lupid) (((lupid) & MPIDIU_LPID_MASK))
+#define MPIDIU_LUPID_SET_NEW_AVT_MARK(lupid) ((lupid) |= MPIDIU_NEW_AVT_MARK)
+#define MPIDIU_LUPID_CLEAR_NEW_AVT_MARK(lupid) ((lupid) &= (~MPIDIU_NEW_AVT_MARK))
+#define MPIDIU_LUPID_IS_NEW_AVT(lupid) ((lupid) & MPIDIU_NEW_AVT_MARK)
+
+#define MPIDI_DYNPROC_MASK (0x80000000U)
+
+#define MPID_INTERCOMM_NO_DYNPROC(comm) \
+ (MPIDI_COMM((comm),map).avtid == 0 && MPIDI_COMM((comm),local_map).avtid == 0)
+
+
+#include "mpidu_pre.h"
+
+#endif /* MPIDPRE_H_INCLUDED */
diff --git a/src/mpid/ch4/include/netmodpre.h.in b/src/mpid/ch4/include/netmodpre.h.in
new file mode 100644
index 0000000..eb9facb
--- /dev/null
+++ b/src/mpid/ch4/include/netmodpre.h.in
@@ -0,0 +1,27 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef NETMODPRE_H_INCLUDED
+#define NETMODPRE_H_INCLUDED
+
+/* *INDENT-OFF* */
+ at ch4_netmod_pre_include@
+/* *INDENT-ON* */
+
+#define MPIDI_NM_REQUEST_AM_DECL @ch4_netmod_amrequest_decl@
+#define MPIDI_NM_REQUEST_DECL @ch4_netmod_request_decl@
+
+#define MPIDI_NM_COMM_DECL @ch4_netmod_comm_decl@
+#define MPIDI_NM_DT_DECL @ch4_netmod_dt_decl@
+#define MPIDI_NM_WIN_DECL @ch4_netmod_win_decl@
+#define MPIDI_NM_ADDR_DECL @ch4_netmod_addr_decl@
+#define MPIDI_NM_OP_DECL @ch4_netmod_op_decl@
+
+#endif /* NETMODPRE_H_INCLUDED */
diff --git a/src/mpid/ch4/include/shmpre.h.in b/src/mpid/ch4/include/shmpre.h.in
new file mode 100644
index 0000000..069de00
--- /dev/null
+++ b/src/mpid/ch4/include/shmpre.h.in
@@ -0,0 +1,20 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef SHMPRE_H_INCLUDED
+#define SHMPRE_H_INCLUDED
+
+/* *INDENT-OFF* */
+ at ch4_shm_pre_include@
+/* *INDENT-ON* */
+
+#define MPIDI_SHM_REQUEST_DECL @ch4_shm_request_decl@
+#define MPIDI_SHM_COMM_DECL @ch4_shm_comm_decl@
+#endif /* SHMPRE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/Makefile.mk b/src/mpid/ch4/netmod/Makefile.mk
new file mode 100644
index 0000000..2b875a6
--- /dev/null
+++ b/src/mpid/ch4/netmod/Makefile.mk
@@ -0,0 +1,22 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## (C) 2014 by Mellanox Technologies, Inc.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+
+AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/ch4/netmod/include
+
+noinst_HEADERS += src/mpid/ch4/netmod/include/netmod.h
+noinst_HEADERS += src/mpid/ch4/netmod/include/netmod_impl.h
+
+include $(top_srcdir)/src/mpid/ch4/netmod/ofi/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/netmod/ucx/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/netmod/portals4/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/netmod/stubnm/Makefile.mk
diff --git a/src/mpid/ch4/netmod/include/netmod.h b/src/mpid/ch4/netmod/include/netmod.h
new file mode 100644
index 0000000..c286acb
--- /dev/null
+++ b/src/mpid/ch4/netmod/include/netmod.h
@@ -0,0 +1,993 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+/* ch4 netmod functions */
+#ifndef NETMOD_H_INCLUDED
+#define NETMOD_H_INCLUDED
+
+#include <mpidimpl.h>
+
+#define MPIDI_MAX_NETMOD_STRING_LEN 64
+
+typedef int (*MPIDI_NM_mpi_init_t) (int rank, int size, int appnum, int *tag_ub,
+ MPIR_Comm * comm_world, MPIR_Comm * comm_self, int spawned,
+ int num_contexts, void **netmod_contexts);
+typedef int (*MPIDI_NM_mpi_finalize_t) (void);
+typedef int (*MPIDI_NM_progress_t) (void *netmod_context, int blocking);
+typedef int (*MPIDI_NM_mpi_comm_connect_t) (const char *port_name, MPIR_Info * info, int root,
+ MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr);
+typedef int (*MPIDI_NM_mpi_comm_disconnect_t) (MPIR_Comm * comm_ptr);
+typedef int (*MPIDI_NM_mpi_open_port_t) (MPIR_Info * info_ptr, char *port_name);
+typedef int (*MPIDI_NM_mpi_close_port_t) (const char *port_name);
+typedef int (*MPIDI_NM_mpi_comm_accept_t) (const char *port_name, MPIR_Info * info, int root,
+ MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr);
+typedef int (*MPIDI_NM_am_send_hdr_t) (int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *netmod_context);
+typedef int (*MPIDI_NM_am_isend_t) (int rank, MPIR_Comm * comm, int handler_id, const void *am_hdr,
+ size_t am_hdr_sz, const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context);
+typedef int (*MPIDI_NM_am_isendv_t) (int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec * am_hdrs, size_t iov_len, const void *data,
+ MPI_Count count, MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context);
+typedef int (*MPIDI_NM_am_send_hdr_reply_t) (MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz);
+typedef int (*MPIDI_NM_am_isend_reply_t) (MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count, MPI_Datatype datatype,
+ MPIR_Request * sreq);
+typedef size_t(*MPIDI_NM_am_hdr_max_sz_t) (void);
+typedef int (*MPIDI_NM_am_recv_t) (MPIR_Request * req);
+typedef int (*MPIDI_NM_comm_get_lpid_t) (MPIR_Comm * comm_ptr, int idx, int *lpid_ptr,
+ MPL_bool is_remote);
+typedef int (*MPIDI_NM_get_local_upids_t) (MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids);
+typedef int (*MPIDI_NM_upids_to_lupids_t) (int size, size_t * remote_upid_size, char *remote_upids,
+ int **remote_lupids);
+typedef int (*MPIDI_NM_create_intercomm_from_lpids_t) (MPIR_Comm * newcomm_ptr, int size,
+ const int lpids[]);
+typedef int (*MPIDI_NM_mpi_comm_create_hook_t) (MPIR_Comm * comm);
+typedef int (*MPIDI_NM_mpi_comm_free_hook_t) (MPIR_Comm * comm);
+typedef void (*MPIDI_NM_am_request_init_t) (MPIR_Request * req);
+typedef void (*MPIDI_NM_am_request_finalize_t) (MPIR_Request * req);
+typedef int (*MPIDI_NM_mpi_send_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_ssend_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_startall_t) (int count, MPIR_Request * requests[]);
+typedef int (*MPIDI_NM_mpi_send_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_ssend_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_rsend_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_bsend_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_isend_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_issend_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_cancel_send_t) (MPIR_Request * sreq);
+typedef int (*MPIDI_NM_mpi_recv_init_t) (void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_recv_t) (void *buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset, MPI_Status * status,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_irecv_t) (void *buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_imrecv_t) (void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp);
+typedef int (*MPIDI_NM_mpi_cancel_recv_t) (MPIR_Request * rreq);
+typedef void *(*MPIDI_NM_mpi_alloc_mem_t) (size_t size, MPIR_Info * info_ptr);
+typedef int (*MPIDI_NM_mpi_free_mem_t) (void *ptr);
+typedef int (*MPIDI_NM_mpi_improbe_t) (int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status);
+typedef int (*MPIDI_NM_mpi_iprobe_t) (int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPI_Status * status);
+typedef int (*MPIDI_NM_mpi_win_set_info_t) (MPIR_Win * win, MPIR_Info * info);
+typedef int (*MPIDI_NM_mpi_win_shared_query_t) (MPIR_Win * win, int rank, MPI_Aint * size,
+ int *disp_unit, void *baseptr);
+typedef int (*MPIDI_NM_mpi_put_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_start_t) (MPIR_Group * group, int assert, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_complete_t) (MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_post_t) (MPIR_Group * group, int assert, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_wait_t) (MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_test_t) (MPIR_Win * win, int *flag);
+typedef int (*MPIDI_NM_mpi_win_lock_t) (int lock_type, int rank, int assert, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_unlock_t) (int rank, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_get_info_t) (MPIR_Win * win, MPIR_Info ** info_p_p);
+typedef int (*MPIDI_NM_mpi_get_t) (void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_free_t) (MPIR_Win ** win_ptr);
+typedef int (*MPIDI_NM_mpi_win_fence_t) (int assert, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_create_t) (void *base, MPI_Aint length, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr);
+typedef int (*MPIDI_NM_mpi_accumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_attach_t) (MPIR_Win * win, void *base, MPI_Aint size);
+typedef int (*MPIDI_NM_mpi_win_allocate_shared_t) (MPI_Aint size, int disp_unit,
+ MPIR_Info * info_ptr, MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr);
+typedef int (*MPIDI_NM_mpi_rput_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_win_flush_local_t) (int rank, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_detach_t) (MPIR_Win * win, const void *base);
+typedef int (*MPIDI_NM_mpi_compare_and_swap_t) (const void *origin_addr, const void *compare_addr,
+ void *result_addr, MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_raccumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_rget_accumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr,
+ int result_count, MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_fetch_and_op_t) (const void *origin_addr, void *result_addr,
+ MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_allocate_t) (MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win);
+typedef int (*MPIDI_NM_mpi_win_flush_t) (int rank, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_flush_local_all_t) (MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_unlock_all_t) (MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_create_dynamic_t) (MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win);
+typedef int (*MPIDI_NM_mpi_rget_t) (void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request);
+typedef int (*MPIDI_NM_mpi_win_sync_t) (MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_flush_all_t) (MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_get_accumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr,
+ int result_count, MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win);
+typedef int (*MPIDI_NM_mpi_win_lock_all_t) (int assert, MPIR_Win * win);
+typedef int (*MPIDI_NM_rank_is_local_t) (int target, MPIR_Comm * comm);
+typedef int (*MPIDI_NM_mpi_barrier_t) (MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_bcast_t) (void *buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_allreduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_allgather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_allgatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_scatter_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_scatterv_t) (const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_gather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_gatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_alltoall_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_alltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_alltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[], MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_reduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_reduce_scatter_t) (const void *sendbuf, void *recvbuf,
+ const int *recvcounts, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_reduce_scatter_block_t) (const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_scan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_exscan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_NM_mpi_neighbor_allgather_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm);
+typedef int (*MPIDI_NM_mpi_neighbor_allgatherv_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm);
+typedef int (*MPIDI_NM_mpi_neighbor_alltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm);
+typedef int (*MPIDI_NM_mpi_neighbor_alltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes, void *recvbuf,
+ const int *recvcounts, const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes, MPIR_Comm * comm);
+typedef int (*MPIDI_NM_mpi_neighbor_alltoall_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm);
+typedef int (*MPIDI_NM_mpi_ineighbor_allgather_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ineighbor_allgatherv_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ineighbor_alltoall_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ineighbor_alltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ineighbor_alltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes, void *recvbuf,
+ const int *recvcounts, const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ibarrier_t) (MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ibcast_t) (void *buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_iallgather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_iallgatherv_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_iallreduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ialltoall_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ialltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ialltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[], MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_iexscan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_igather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_igatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ireduce_scatter_block_t) (const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ireduce_scatter_t) (const void *sendbuf, void *recvbuf,
+ const int *recvcounts, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_ireduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_iscan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_iscatter_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_iscatterv_t) (const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req);
+typedef int (*MPIDI_NM_mpi_type_create_hook_t) (MPIR_Datatype * datatype_p);
+typedef int (*MPIDI_NM_mpi_type_free_hook_t) (MPIR_Datatype * datatype_p);
+typedef int (*MPIDI_NM_mpi_op_create_hook_t) (MPIR_Op * op_p);
+typedef int (*MPIDI_NM_mpi_op_free_hook_t) (MPIR_Op * op_p);
+
+typedef struct MPIDI_NM_funcs {
+ MPIDI_NM_mpi_init_t mpi_init;
+ MPIDI_NM_mpi_finalize_t mpi_finalize;
+ MPIDI_NM_progress_t progress;
+ MPIDI_NM_mpi_comm_connect_t mpi_comm_connect;
+ MPIDI_NM_mpi_comm_disconnect_t mpi_comm_disconnect;
+ MPIDI_NM_mpi_open_port_t mpi_open_port;
+ MPIDI_NM_mpi_close_port_t mpi_close_port;
+ MPIDI_NM_mpi_comm_accept_t mpi_comm_accept;
+ /* Routines that handle addressing */
+ MPIDI_NM_comm_get_lpid_t comm_get_lpid;
+ MPIDI_NM_get_local_upids_t get_local_upids;
+ MPIDI_NM_upids_to_lupids_t upids_to_lupids;
+ MPIDI_NM_create_intercomm_from_lpids_t create_intercomm_from_lpids;
+ MPIDI_NM_mpi_comm_create_hook_t mpi_comm_create_hook;
+ MPIDI_NM_mpi_comm_free_hook_t mpi_comm_free_hook;
+ /* Request allocation routines */
+ MPIDI_NM_am_request_init_t am_request_init;
+ MPIDI_NM_am_request_finalize_t am_request_finalize;
+ /* Active Message Routines */
+ MPIDI_NM_am_send_hdr_t am_send_hdr;
+ MPIDI_NM_am_isend_t am_isend;
+ MPIDI_NM_am_isendv_t am_isendv;
+ MPIDI_NM_am_send_hdr_reply_t am_send_hdr_reply;
+ MPIDI_NM_am_isend_reply_t am_isend_reply;
+ MPIDI_NM_am_hdr_max_sz_t am_hdr_max_sz;
+ MPIDI_NM_am_recv_t am_recv;
+} MPIDI_NM_funcs_t;
+
+typedef struct MPIDI_NM_native_funcs {
+ MPIDI_NM_mpi_send_t mpi_send;
+ MPIDI_NM_mpi_ssend_t mpi_ssend;
+ MPIDI_NM_mpi_startall_t mpi_startall;
+ MPIDI_NM_mpi_send_init_t mpi_send_init;
+ MPIDI_NM_mpi_ssend_init_t mpi_ssend_init;
+ MPIDI_NM_mpi_rsend_init_t mpi_rsend_init;
+ MPIDI_NM_mpi_bsend_init_t mpi_bsend_init;
+ MPIDI_NM_mpi_isend_t mpi_isend;
+ MPIDI_NM_mpi_issend_t mpi_issend;
+ MPIDI_NM_mpi_cancel_send_t mpi_cancel_send;
+ MPIDI_NM_mpi_recv_init_t mpi_recv_init;
+ MPIDI_NM_mpi_recv_t mpi_recv;
+ MPIDI_NM_mpi_irecv_t mpi_irecv;
+ MPIDI_NM_mpi_imrecv_t mpi_imrecv;
+ MPIDI_NM_mpi_cancel_recv_t mpi_cancel_recv;
+ MPIDI_NM_mpi_alloc_mem_t mpi_alloc_mem;
+ MPIDI_NM_mpi_free_mem_t mpi_free_mem;
+ MPIDI_NM_mpi_improbe_t mpi_improbe;
+ MPIDI_NM_mpi_iprobe_t mpi_iprobe;
+ MPIDI_NM_mpi_win_set_info_t mpi_win_set_info;
+ MPIDI_NM_mpi_win_shared_query_t mpi_win_shared_query;
+ MPIDI_NM_mpi_put_t mpi_put;
+ MPIDI_NM_mpi_win_start_t mpi_win_start;
+ MPIDI_NM_mpi_win_complete_t mpi_win_complete;
+ MPIDI_NM_mpi_win_post_t mpi_win_post;
+ MPIDI_NM_mpi_win_wait_t mpi_win_wait;
+ MPIDI_NM_mpi_win_test_t mpi_win_test;
+ MPIDI_NM_mpi_win_lock_t mpi_win_lock;
+ MPIDI_NM_mpi_win_unlock_t mpi_win_unlock;
+ MPIDI_NM_mpi_win_get_info_t mpi_win_get_info;
+ MPIDI_NM_mpi_get_t mpi_get;
+ MPIDI_NM_mpi_win_free_t mpi_win_free;
+ MPIDI_NM_mpi_win_fence_t mpi_win_fence;
+ MPIDI_NM_mpi_win_create_t mpi_win_create;
+ MPIDI_NM_mpi_accumulate_t mpi_accumulate;
+ MPIDI_NM_mpi_win_attach_t mpi_win_attach;
+ MPIDI_NM_mpi_win_allocate_shared_t mpi_win_allocate_shared;
+ MPIDI_NM_mpi_rput_t mpi_rput;
+ MPIDI_NM_mpi_win_flush_local_t mpi_win_flush_local;
+ MPIDI_NM_mpi_win_detach_t mpi_win_detach;
+ MPIDI_NM_mpi_compare_and_swap_t mpi_compare_and_swap;
+ MPIDI_NM_mpi_raccumulate_t mpi_raccumulate;
+ MPIDI_NM_mpi_rget_accumulate_t mpi_rget_accumulate;
+ MPIDI_NM_mpi_fetch_and_op_t mpi_fetch_and_op;
+ MPIDI_NM_mpi_win_allocate_t mpi_win_allocate;
+ MPIDI_NM_mpi_win_flush_t mpi_win_flush;
+ MPIDI_NM_mpi_win_flush_local_all_t mpi_win_flush_local_all;
+ MPIDI_NM_mpi_win_unlock_all_t mpi_win_unlock_all;
+ MPIDI_NM_mpi_win_create_dynamic_t mpi_win_create_dynamic;
+ MPIDI_NM_mpi_rget_t mpi_rget;
+ MPIDI_NM_mpi_win_sync_t mpi_win_sync;
+ MPIDI_NM_mpi_win_flush_all_t mpi_win_flush_all;
+ MPIDI_NM_mpi_get_accumulate_t mpi_get_accumulate;
+ MPIDI_NM_mpi_win_lock_all_t mpi_win_lock_all;
+ MPIDI_NM_rank_is_local_t rank_is_local;
+ /* Collectives */
+ MPIDI_NM_mpi_barrier_t mpi_barrier;
+ MPIDI_NM_mpi_bcast_t mpi_bcast;
+ MPIDI_NM_mpi_allreduce_t mpi_allreduce;
+ MPIDI_NM_mpi_allgather_t mpi_allgather;
+ MPIDI_NM_mpi_allgatherv_t mpi_allgatherv;
+ MPIDI_NM_mpi_scatter_t mpi_scatter;
+ MPIDI_NM_mpi_scatterv_t mpi_scatterv;
+ MPIDI_NM_mpi_gather_t mpi_gather;
+ MPIDI_NM_mpi_gatherv_t mpi_gatherv;
+ MPIDI_NM_mpi_alltoall_t mpi_alltoall;
+ MPIDI_NM_mpi_alltoallv_t mpi_alltoallv;
+ MPIDI_NM_mpi_alltoallw_t mpi_alltoallw;
+ MPIDI_NM_mpi_reduce_t mpi_reduce;
+ MPIDI_NM_mpi_reduce_scatter_t mpi_reduce_scatter;
+ MPIDI_NM_mpi_reduce_scatter_block_t mpi_reduce_scatter_block;
+ MPIDI_NM_mpi_scan_t mpi_scan;
+ MPIDI_NM_mpi_exscan_t mpi_exscan;
+ MPIDI_NM_mpi_neighbor_allgather_t mpi_neighbor_allgather;
+ MPIDI_NM_mpi_neighbor_allgatherv_t mpi_neighbor_allgatherv;
+ MPIDI_NM_mpi_neighbor_alltoall_t mpi_neighbor_alltoall;
+ MPIDI_NM_mpi_neighbor_alltoallv_t mpi_neighbor_alltoallv;
+ MPIDI_NM_mpi_neighbor_alltoallw_t mpi_neighbor_alltoallw;
+ MPIDI_NM_mpi_ineighbor_allgather_t mpi_ineighbor_allgather;
+ MPIDI_NM_mpi_ineighbor_allgatherv_t mpi_ineighbor_allgatherv;
+ MPIDI_NM_mpi_ineighbor_alltoall_t mpi_ineighbor_alltoall;
+ MPIDI_NM_mpi_ineighbor_alltoallv_t mpi_ineighbor_alltoallv;
+ MPIDI_NM_mpi_ineighbor_alltoallw_t mpi_ineighbor_alltoallw;
+ MPIDI_NM_mpi_ibarrier_t mpi_ibarrier;
+ MPIDI_NM_mpi_ibcast_t mpi_ibcast;
+ MPIDI_NM_mpi_iallgather_t mpi_iallgather;
+ MPIDI_NM_mpi_iallgatherv_t mpi_iallgatherv;
+ MPIDI_NM_mpi_iallreduce_t mpi_iallreduce;
+ MPIDI_NM_mpi_ialltoall_t mpi_ialltoall;
+ MPIDI_NM_mpi_ialltoallv_t mpi_ialltoallv;
+ MPIDI_NM_mpi_ialltoallw_t mpi_ialltoallw;
+ MPIDI_NM_mpi_iexscan_t mpi_iexscan;
+ MPIDI_NM_mpi_igather_t mpi_igather;
+ MPIDI_NM_mpi_igatherv_t mpi_igatherv;
+ MPIDI_NM_mpi_ireduce_scatter_block_t mpi_ireduce_scatter_block;
+ MPIDI_NM_mpi_ireduce_scatter_t mpi_ireduce_scatter;
+ MPIDI_NM_mpi_ireduce_t mpi_ireduce;
+ MPIDI_NM_mpi_iscan_t mpi_iscan;
+ MPIDI_NM_mpi_iscatter_t mpi_iscatter;
+ MPIDI_NM_mpi_iscatterv_t mpi_iscatterv;
+ /* Datatype hooks */
+ MPIDI_NM_mpi_type_create_hook_t mpi_type_create_hook;
+ MPIDI_NM_mpi_type_free_hook_t mpi_type_free_hook;
+ /* Op hooks */
+ MPIDI_NM_mpi_op_create_hook_t mpi_op_create_hook;
+ MPIDI_NM_mpi_op_free_hook_t mpi_op_free_hook;
+} MPIDI_NM_native_funcs_t;
+
+extern MPIDI_NM_funcs_t *MPIDI_NM_funcs[];
+extern MPIDI_NM_funcs_t *MPIDI_NM_func;
+extern MPIDI_NM_native_funcs_t *MPIDI_NM_native_funcs[];
+extern MPIDI_NM_native_funcs_t *MPIDI_NM_native_func;
+extern int MPIDI_num_netmods;
+extern char MPIDI_NM_strings[][MPIDI_MAX_NETMOD_STRING_LEN];
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_init_hook(int rank, int size, int appnum, int *tag_ub,
+ MPIR_Comm * comm_world, MPIR_Comm * comm_self,
+ int spawned, int num_contexts,
+ void **netmod_contexts)
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_finalize_hook(void) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_progress(void *netmod_context,
+ int blocking) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_connect(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm **
+ newcomm_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm *
+ comm_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr,
+ char *port_name) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_close_port(const char *port_name)
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_accept(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm **
+ newcomm_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_send_hdr(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ void *netmod_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isend(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isendv(int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec *am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_send_hdr_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr,
+ size_t am_hdr_sz) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isend_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr,
+ size_t am_hdr_sz, const void *data,
+ MPI_Count count, MPI_Datatype datatype,
+ MPIR_Request * sreq) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX size_t MPIDI_NM_am_hdr_max_sz(void) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_recv(MPIR_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_comm_get_lpid(MPIR_Comm * comm_ptr, int idx,
+ int *lpid_ptr,
+ MPL_bool is_remote) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_upids_to_lupids(int size, size_t * remote_upid_size,
+ char *remote_upids,
+ int **remote_lupids) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size,
+ const int lpids[])
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_create_hook(MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_free_hook(MPIR_Comm * comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX void MPIDI_NM_am_request_init(MPIR_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX void MPIDI_NM_am_request_finalize(MPIR_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_send(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ssend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_startall(int count,
+ MPIR_Request *
+ requests[]) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_send_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ssend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_bsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_isend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_issend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv_init(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_irecv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_imrecv(void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request * message,
+ MPIR_Request ** rreqp) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX void *MPIDI_NM_mpi_alloc_mem(size_t size,
+ MPIR_Info *
+ info_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_free_mem(void *ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_improbe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPIR_Request ** message,
+ MPI_Status * status) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iprobe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPI_Status * status) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_set_info(MPIR_Win * win,
+ MPIR_Info * info) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win, int rank,
+ MPI_Aint * size, int *disp_unit,
+ void *baseptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_put(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_complete(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_wait(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_test(MPIR_Win * win,
+ int *flag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_unlock(int rank,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_get_info(MPIR_Win * win,
+ MPIR_Info **
+ info_p_p) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_get(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_fence(int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_create(void *base, MPI_Aint length, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base,
+ MPI_Aint size) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size, int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr,
+ MPIR_Win **
+ win_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rput(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_local(int rank,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_detach(MPIR_Win * win,
+ const void *base) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_raccumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr, void *result_addr,
+ MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPI_Op op,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_allocate(MPI_Aint size, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm,
+ void *baseptr,
+ MPIR_Win ** win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush(int rank,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win *
+ win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win **
+ win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rget(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_sync(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_get_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_lock_all(int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rank_is_local(int target,
+ MPIR_Comm * comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_barrier(MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_gather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_gatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ibarrier(MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_igather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_igatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_type_create_hook(MPIR_Datatype *
+ datatype_p) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_type_free_hook(MPIR_Datatype *
+ datatype_p) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_op_create_hook(MPIR_Op * op_p) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_op_free_hook(MPIR_Op * op_p) MPL_STATIC_INLINE_SUFFIX;
+
+#endif /* NETMOD_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/include/netmod_impl.h b/src/mpid/ch4/netmod/include/netmod_impl.h
new file mode 100644
index 0000000..09e4ae9
--- /dev/null
+++ b/src/mpid/ch4/netmod/include/netmod_impl.h
@@ -0,0 +1,2016 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+/* ch4 netmod functions */
+#ifndef NETMOD_IMPL_H_INCLUDED
+#define NETMOD_IMPL_H_INCLUDED
+
+
+#ifndef NETMOD_DIRECT
+#ifndef NETMOD_DISABLE_INLINES
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_init_hook(int rank, int size, int appnum, int *tag_ub,
+ MPIR_Comm * comm_world, MPIR_Comm * comm_self,
+ int spawned, int num_contexts,
+ void **netmod_contexts)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INIT_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INIT_HOOK);
+
+ ret = MPIDI_NM_func->mpi_init(rank, size, appnum, tag_ub, comm_world, comm_self, spawned,
+ num_contexts, netmod_contexts);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INIT_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_finalize_hook(void)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_FINALIZE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_FINALIZE_HOOK);
+
+ ret = MPIDI_NM_func->mpi_finalize();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_FINALIZE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_progress(void *netmod_context, int blocking)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_PROGRESS);
+
+ ret = MPIDI_NM_func->progress(netmod_context, blocking);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_PROGRESS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_connect(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm ** newcomm_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_CONNECT);
+
+ ret = MPIDI_NM_func->mpi_comm_connect(port_name, info, root, comm, newcomm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_CONNECT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_DISCONNECT);
+
+ ret = MPIDI_NM_func->mpi_comm_disconnect(comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_DISCONNECT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_OPEN_PORT);
+
+ ret = MPIDI_NM_func->mpi_open_port(info_ptr, port_name);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_OPEN_PORT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_close_port(const char *port_name)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_CLOSE_PORT);
+
+ ret = MPIDI_NM_func->mpi_close_port(port_name);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_CLOSE_PORT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_accept(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm ** newcomm_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_ACCEPT);
+
+ ret = MPIDI_NM_func->mpi_comm_accept(port_name, info, root, comm, newcomm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_ACCEPT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_send_hdr(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ void *netmod_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_SEND_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_SEND_HDR);
+
+ ret = MPIDI_NM_func->am_send_hdr(rank, comm, handler_id, am_hdr, am_hdr_sz, netmod_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_SEND_HDR);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isend(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_ISEND);
+
+ ret = MPIDI_NM_func->am_isend(rank, comm, handler_id, am_hdr, am_hdr_sz, data, count, datatype,
+ sreq, netmod_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_ISEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isendv(int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec *am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_ISENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_ISENDV);
+
+ ret = MPIDI_NM_func->am_isendv(rank, comm, handler_id, am_hdrs, iov_len, data, count, datatype,
+ sreq, netmod_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_ISENDV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_send_hdr_reply(MPIR_Context_id_t context_id,
+ int src_rank, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_SEND_HDR_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_SEND_HDR_REPLY);
+
+ ret = MPIDI_NM_func->am_send_hdr_reply(context_id, src_rank, handler_id, am_hdr, am_hdr_sz);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_SEND_HDR_REPLY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_isend_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr,
+ size_t am_hdr_sz, const void *data,
+ MPI_Count count, MPI_Datatype datatype,
+ MPIR_Request * sreq)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_ISEND_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_ISEND_REPLY);
+
+ ret = MPIDI_NM_func->am_isend_reply(context_id, src_rank, handler_id, am_hdr, am_hdr_sz, data,
+ count, datatype, sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_ISEND_REPLY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX size_t MPIDI_NM_am_hdr_max_sz(void)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_HDR_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_HDR_MAX_SZ);
+
+ ret = MPIDI_NM_func->am_hdr_max_sz();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_HDR_MAX_SZ);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_am_recv(MPIR_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_RECV);
+
+ ret = MPIDI_NM_func->am_recv(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_RECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_comm_get_lpid(MPIR_Comm * comm_ptr, int idx,
+ int *lpid_ptr, MPL_bool is_remote)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_COMM_GET_LPID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_COMM_GET_LPID);
+
+ ret = MPIDI_NM_func->comm_get_lpid(comm_ptr, idx, lpid_ptr, is_remote);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_COMM_GET_LPID);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_GET_LOCAL_UPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_GET_LOCAL_UPIDS);
+
+ ret = MPIDI_NM_func->get_local_upids(comm, local_upid_size, local_upids);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_GET_LOCAL_UPIDS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_upids_to_lupids(int size, size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_UPIDS_TO_LUPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_UPIDS_TO_LUPIDS);
+
+ ret = MPIDI_NM_func->upids_to_lupids(size, remote_upid_size, remote_upids, remote_lupids);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_UPIDS_TO_LUPIDS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_CREATE_INTERCOMM_FROM_LPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_CREATE_INTERCOMM_FROM_LPIDS);
+
+ ret = MPIDI_NM_func->create_intercomm_from_lpids(newcomm_ptr, size, lpids);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_CREATE_INTERCOMM_FROM_LPIDS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+
+ ret = MPIDI_NM_func->mpi_comm_create_hook(comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+
+ ret = MPIDI_NM_func->mpi_comm_free_hook(comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_NM_am_request_init(MPIR_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_REQUEST_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_REQUEST_INIT);
+
+ ret = MPIDI_NM_func->am_request_init(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_REQUEST_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_NM_am_request_finalize(MPIR_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_REQUEST_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_REQUEST_FINALIZE);
+
+ ret = MPIDI_NM_func->am_request_finalize(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_REQUEST_FINALIZE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_send(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SEND);
+
+ ret = MPIDI_NM_native_func->mpi_send(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ssend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SSEND);
+
+ ret = MPIDI_NM_native_func->mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SSEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_STARTALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_STARTALL);
+
+ ret = MPIDI_NM_native_func->mpi_startall(count, requests);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_STARTALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_send_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SEND_INIT);
+
+ ret = MPIDI_NM_native_func->mpi_send_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ssend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SSEND_INIT);
+
+ ret = MPIDI_NM_native_func->mpi_ssend_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SSEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RSEND_INIT);
+
+ ret = MPIDI_NM_native_func->mpi_rsend_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RSEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_bsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BSEND_INIT);
+
+ ret = MPIDI_NM_native_func->mpi_bsend_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BSEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_isend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISEND);
+
+ ret = MPIDI_NM_native_func->mpi_isend(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_issend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISSEND);
+
+ ret = MPIDI_NM_native_func->mpi_issend(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISSEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_CANCEL_SEND);
+
+ ret = MPIDI_NM_native_func->mpi_cancel_send(sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_CANCEL_SEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv_init(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+
+ ret = MPIDI_NM_native_func->mpi_recv_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RECV);
+
+ ret = MPIDI_NM_native_func->mpi_recv(buf, count, datatype, rank, tag, comm, context_offset,
+ status, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_irecv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IRECV);
+
+ ret = MPIDI_NM_native_func->mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IRECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_imrecv(void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+
+ ret = MPIDI_NM_native_func->mpi_imrecv(buf, count, datatype, message, rreqp);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+
+ ret = MPIDI_NM_native_func->mpi_cancel_recv(rreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void *MPIDI_NM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLOC_MEM);
+
+ ret = MPIDI_NM_native_func->mpi_alloc_mem(size, info_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLOC_MEM);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_free_mem(void *ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_FREE_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_FREE_MEM);
+
+ ret = MPIDI_NM_native_func->mpi_free_mem(ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_FREE_MEM);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_improbe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPIR_Request ** message, MPI_Status * status)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IMPROBE);
+
+ ret = MPIDI_NM_native_func->mpi_improbe(source, tag, comm, context_offset, flag, message,
+ status);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IMPROBE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iprobe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IPROBE);
+
+ ret = MPIDI_NM_native_func->mpi_iprobe(source, tag, comm, context_offset, flag, status);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IPROBE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+
+ ret = MPIDI_NM_native_func->mpi_win_set_info(win, info);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win, int rank,
+ MPI_Aint * size, int *disp_unit,
+ void *baseptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+
+ ret = MPIDI_NM_native_func->mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_put(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_PUT);
+
+ ret = MPIDI_NM_native_func->mpi_put(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_PUT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+
+ ret = MPIDI_NM_native_func->mpi_win_start(group, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_complete(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+
+ ret = MPIDI_NM_native_func->mpi_win_complete(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+
+ ret = MPIDI_NM_native_func->mpi_win_post(group, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_wait(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+
+ ret = MPIDI_NM_native_func->mpi_win_wait(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+
+ ret = MPIDI_NM_native_func->mpi_win_test(win, flag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+
+ ret = MPIDI_NM_native_func->mpi_win_lock(lock_type, rank, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+
+ ret = MPIDI_NM_native_func->mpi_win_unlock(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+
+ ret = MPIDI_NM_native_func->mpi_win_get_info(win, info_p_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_get(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GET);
+
+ ret = MPIDI_NM_native_func->mpi_get(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GET);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+
+ ret = MPIDI_NM_native_func->mpi_win_free(win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+
+ ret = MPIDI_NM_native_func->mpi_win_fence(assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_create(void *base, MPI_Aint length, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+
+ ret = MPIDI_NM_native_func->mpi_win_create(base, length, disp_unit, info, comm_ptr, win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+
+ ret = MPIDI_NM_native_func->mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+
+ ret = MPIDI_NM_native_func->mpi_win_attach(win, base, size);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size, int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+
+ ret = MPIDI_NM_native_func->mpi_win_allocate_shared(size, disp_unit, info_ptr, comm_ptr,
+ base_ptr, win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rput(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RPUT);
+
+ ret = MPIDI_NM_native_func->mpi_rput(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RPUT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+
+ ret = MPIDI_NM_native_func->mpi_win_flush_local(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+
+ ret = MPIDI_NM_native_func->mpi_win_detach(win, base);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+
+ ret = MPIDI_NM_native_func->mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_raccumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+
+ ret = MPIDI_NM_native_func->mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+
+ ret = MPIDI_NM_native_func->mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr, void *result_addr,
+ MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPI_Op op,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+
+ ret = MPIDI_NM_native_func->mpi_fetch_and_op(origin_addr, result_addr, datatype, target_rank,
+ target_disp, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_allocate(MPI_Aint size, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm,
+ void *baseptr, MPIR_Win ** win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+
+ ret = MPIDI_NM_native_func->mpi_win_allocate(size, disp_unit, info, comm, baseptr, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+
+ ret = MPIDI_NM_native_func->mpi_win_flush(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+
+ ret = MPIDI_NM_native_func->mpi_win_flush_local_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+
+ ret = MPIDI_NM_native_func->mpi_win_unlock_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+
+ ret = MPIDI_NM_native_func->mpi_win_create_dynamic(info, comm, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rget(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RGET);
+
+ ret = MPIDI_NM_native_func->mpi_rget(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RGET);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_sync(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+
+ ret = MPIDI_NM_native_func->mpi_win_sync(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+
+ ret = MPIDI_NM_native_func->mpi_win_flush_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_get_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GET_ACCUMULATE);
+
+ ret = MPIDI_NM_native_func->mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GET_ACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+
+ ret = MPIDI_NM_native_func->mpi_win_lock_all(assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rank_is_local(int target, MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+
+ ret = MPIDI_NM_native_func->rank_is_local(target, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_barrier(MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+
+ ret = MPIDI_NM_native_func->mpi_barrier(comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BCAST);
+
+ ret = MPIDI_NM_native_func->mpi_bcast(buffer, count, datatype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+
+ ret = MPIDI_NM_native_func->mpi_allreduce(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+
+ ret = MPIDI_NM_native_func->mpi_allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+
+ ret = MPIDI_NM_native_func->mpi_allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+
+ ret = MPIDI_NM_native_func->mpi_scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+
+ ret = MPIDI_NM_native_func->mpi_scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_gather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHER);
+
+ ret = MPIDI_NM_native_func->mpi_gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_gatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+
+ ret = MPIDI_NM_native_func->mpi_gatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+
+ ret = MPIDI_NM_native_func->mpi_alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+
+ ret = MPIDI_NM_native_func->mpi_alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
+ recvcounts, rdispls, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_alltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+
+ ret = MPIDI_NM_native_func->mpi_alltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf,
+ recvcounts, rdispls, recvtypes, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+
+ ret = MPIDI_NM_native_func->mpi_reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr,
+ errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+
+ ret = MPIDI_NM_native_func->mpi_reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+
+ ret = MPIDI_NM_native_func->mpi_reduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCAN);
+
+ ret = MPIDI_NM_native_func->mpi_scan(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+
+ ret = MPIDI_NM_native_func->mpi_exscan(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+
+ ret = MPIDI_NM_native_func->mpi_neighbor_allgather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+
+ ret = MPIDI_NM_native_func->mpi_neighbor_allgatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+
+ ret = MPIDI_NM_native_func->mpi_neighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+
+ ret = MPIDI_NM_native_func->mpi_neighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+
+ ret = MPIDI_NM_native_func->mpi_neighbor_alltoall(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+
+ ret = MPIDI_NM_native_func->mpi_ineighbor_allgather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+
+ ret = MPIDI_NM_native_func->mpi_ineighbor_allgatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+
+ ret = MPIDI_NM_native_func->mpi_ineighbor_alltoall(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+
+ ret = MPIDI_NM_native_func->mpi_ineighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ineighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+
+ ret = MPIDI_NM_native_func->mpi_ineighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ibarrier(MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+
+ ret = MPIDI_NM_native_func->mpi_ibarrier(comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+
+ ret = MPIDI_NM_native_func->mpi_ibcast(buffer, count, datatype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+
+ ret = MPIDI_NM_native_func->mpi_iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+
+ ret = MPIDI_NM_native_func->mpi_iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+
+ ret = MPIDI_NM_native_func->mpi_iallreduce(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+
+ ret = MPIDI_NM_native_func->mpi_ialltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+
+ ret = MPIDI_NM_native_func->mpi_ialltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
+ recvcounts, rdispls, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+
+ ret = MPIDI_NM_native_func->mpi_ialltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf,
+ recvcounts, rdispls, recvtypes, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+
+ ret = MPIDI_NM_native_func->mpi_iexscan(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_igather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+
+ ret = MPIDI_NM_native_func->mpi_igather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_igatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+
+ ret = MPIDI_NM_native_func->mpi_igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ ret = MPIDI_NM_native_func->mpi_ireduce_scatter_block(sendbuf, recvbuf, recvcount, datatype,
+ op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+
+ ret = MPIDI_NM_native_func->mpi_ireduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+
+ ret = MPIDI_NM_native_func->mpi_ireduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr,
+ req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+
+ ret = MPIDI_NM_native_func->mpi_iscan(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+
+ ret = MPIDI_NM_native_func->mpi_iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+
+ ret = MPIDI_NM_native_func->mpi_iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_type_create_hook(MPIR_Datatype * datatype_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_TYPE_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_TYPE_CREATE_HOOK);
+
+ ret = MPIDI_NM_native_func->mpi_type_create_hook(datatype_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_TYPE_CREATE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_type_free_hook(MPIR_Datatype * datatype_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_TYPE_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_TYPE_FREE_HOOK);
+
+ ret = MPIDI_NM_native_func->mpi_type_free_hook(datatype_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_TYPE_FREE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_op_create_hook(MPIR_Op * op_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_OP_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_OP_CREATE_HOOK);
+
+ ret = MPIDI_NM_native_func->mpi_op_create_hook(op_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_OP_CREATE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_op_free_hook(MPIR_Op * op_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_OP_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_OP_FREE_HOOK);
+
+ ret = MPIDI_NM_native_func->mpi_op_free_hook(op_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_OP_FREE_HOOK);
+ return ret;
+}
+
+#endif /* NETMOD_DISABLE_INLINES */
+
+#else
+#define __netmod_direct_stubnm__ 0
+#define __netmod_direct_ofi__ 1
+#define __netmod_direct_shm__ 2
+#define __netmod_direct_ucx__ 3
+#define __netmod_direct_portals4__ 4
+
+#if NETMOD_DIRECT==__netmod_direct_stubnm__
+#include "../stubnm/netmod_direct.h"
+#elif NETMOD_DIRECT==__netmod_direct_ofi__
+#include "../ofi/netmod_direct.h"
+#elif NETMOD_DIRECT==__netmod_direct_shm__
+#include "../shm/netmod_direct.h"
+#elif NETMOD_DIRECT==__netmod_direct_ucx__
+#include "../ucx/netmod_direct.h"
+#elif NETMOD_DIRECT==__netmod_direct_portals4__
+#include "../portals4/netmod_direct.h"
+#else
+#error "No direct netmod included"
+#endif
+#endif /* NETMOD_DIRECT */
+
+#endif /* NETMOD_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/Makefile.mk b/src/mpid/ch4/netmod/ofi/Makefile.mk
new file mode 100644
index 0000000..b4d479c
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/Makefile.mk
@@ -0,0 +1,22 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+if BUILD_CH4_NETMOD_OFI
+
+noinst_HEADERS +=
+mpi_core_sources += src/mpid/ch4/netmod/ofi/func_table.c \
+ src/mpid/ch4/netmod/ofi/globals.c \
+ src/mpid/ch4/netmod/ofi/util.c
+errnames_txt_files += src/mpid/ch4/netmod/ofi/errnames.txt
+external_subdirs += @ofisrcdir@
+pmpi_convenience_libs += @ofilib@
+
+endif
diff --git a/src/mpid/ch4/netmod/ofi/catalog.c b/src/mpid/ch4/netmod/ofi/catalog.c
new file mode 100644
index 0000000..0905a25
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/catalog.c
@@ -0,0 +1,61 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+static inline void MPIDI_OFI_unused_gen_catalog()
+{
+#if 0
+ char *a;
+ int b, e;
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_pmi", "**ofid_pmi %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_addrinfo", "**ofid_addrinfo %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_opendomain", "**ofid_opendomain %s %d %s %s", a, b, a,
+ a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_bind", "**ofid_bind %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_fabric", "**ofid_fabric %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_opencq", "**ofid_opencq %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_openct", "**ofid_openct %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_bind", "**ofid_bind %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_ep_enable", "**ofid_ep_enable %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_ep", "**ofid_ep %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_avopen", "**ofid_avopen %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_getname", "**ofid_getname %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_avmap", "**ofid_avmap %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_avlookup", "**ofid_avlookup %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_avsync", "**ofid_avsync %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_epclose", "**ofid_epclose %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_cqclose", "**ofid_cqclose %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_epsync", "**ofid_epsync %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_alias", "**ofid_alias %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_getopt", "**ofid_getopt %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_setopt", "**ofid_setopt %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_domainclose", "**ofid_domainclose %s %d %s %s", a, b, a,
+ a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_avclose", "**ofid_avclose %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_tsend", "**ofid_tsend %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_tinject", "**ofid_tinject %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_tsendsync", "**ofid_tsendsync %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_trecv", "**ofid_trecv %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_trecvsync", "**ofid_trecvsync %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_poll", "**ofid_poll %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_peek", "**ofid_peek %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_send", "**ofid_send %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_inject", "**ofid_inject %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_rdma_write", "**ofid_rdma_write %s %d %s %s", a, b, a,
+ a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_rdma_inject_write",
+ "**ofid_rdma_inject_write %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_rdma_atomicto", "**ofid_rdma_atomicto %s %d %s %s", a,
+ b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_rdma_cswap", "**ofid_rdma_cswap %s %d %s %s", a, b, a,
+ a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_rdma_readfrom", "**ofid_rdma_readfrom %s %d %s %s", a,
+ b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_rdma_readfrom", "**ofid_rdma_readfrom %s %d %s %s", a,
+ b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_mr_reg", "**ofid_mr_reg %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_mr_unreg", "**ofid_mr_unreg %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_prepost", "**ofid_prepost %s %d %s %s", a, b, a, a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_ctrlcancel", "**ofid_ctrlcancel %s %d %s %s", a, b, a,
+ a);
+ MPIR_ERR_SET2(e, MPI_ERR_OTHER, "**ofid_cntr_wait", "**ofid_cntr_wait %s %d %s %s", a, b, a, a);
+
+#endif
+}
diff --git a/src/mpid/ch4/netmod/ofi/errnames.txt b/src/mpid/ch4/netmod/ofi/errnames.txt
new file mode 100644
index 0000000..2648e10
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/errnames.txt
@@ -0,0 +1,97 @@
+**ofid_pmi:PMI_Init() failure
+**ofid_pmi %s %d %s %s:pmi failed (%s:%d:%s:%s)
+**ofid_addrinfo:OFI addrinfo() failure
+**ofid_addrinfo %s %d %s %s:OFI addrinfo() failed (%s:%d:%s:%s)
+**ofid_addrinfo %s:Addrinfo failure ('%s')
+**ofid_opendomain:OFI fi_open domain failure
+**ofid_opendomain %s %d %s %s:OFI fi_open domain failed (%s:%d:%s:%s)
+**ofid_fabric:OFI fi_fabric failure
+**ofid_fabric %s %d %s %s:OFI fi_fabric failed (%s:%d:%s:%s)
+**ofid_opencq:OFI event queue create failure
+**ofid_opencq %s %d %s %s:OFI event queue create failed (%s:%d:%s:%s)
+**ofid_openct:OFI event counter create failure
+**ofid_openct %s %d %s %s:OFI event counter create failed (%s:%d:%s:%s)
+**ofid_bind:OFI resource bind failure
+**ofid_bind %s %d %s %s:OFI resource bind failed (%s:%d:%s:%s)
+**ofid_ep_enable:OFI EP enable failure
+**ofid_ep_enable %s %d %s %s:OFI EP enable failed (%s:%d:%s:%s)
+**ofid_avopen:OFI address vector open failed
+**ofid_avopen %s %d %s %s:OFI address vector open failed (%s:%d:%s:%s)
+**ofid_ep:OFI endpoint open failed
+**ofid_ep %s %d %s %s:OFI endpoint open failed (%s:%d:%s:%s)
+**ofid_getname:OFI get endpoint name failed
+**ofid_getname %s %d %s %s:OFI get endpoint name failed (%s:%d:%s:%s)
+**ofid_avmap:OFI get address vector map failed
+**ofid_avmap %s %d %s %s:OFI address vector map failed (%s:%d:%s:%s)
+**ofid_avlookup:OFI get address vector lookup failed
+**ofid_avlookup %s %d %s %s:OFI address vector lookup failed (%s:%d:%s:%s)
+**ofid_avsync:OFI get address vector sync failed
+**ofid_avsync %s %d %s %s:OFI address vector sync failed (%s:%d:%s:%s)
+**ofid_epclose:OFI endpoint close failed
+**ofid_epclose %s %d %s %s:OFI endpoint close failed (%s:%d:%s:%s)
+**ofid_cqclose:OFI cq close failed
+**ofid_cqclose %s %d %s %s:OFI cq close failed (%s:%d:%s:%s)
+**ofid_epsync:OFI synchronization failed
+**ofid_epsync %s %d %s %s:OFI endpoint synchronization failed (%s:%d:%s:%s)
+**ofid_alias:OFI cq alias failed
+**ofid_alias %s %d %s %s:OFI cq alias failed (%s:%d:%s:%s)
+**ofid_getopt:OFI getopt failed
+**ofid_getopt %s %d %s %s:OFI getopt failed (%s:%d:%s:%s)
+**ofid_setopt:OFI setopt failed
+**ofid_setopt %s %d %s %s:OFI setopt failed (%s:%d:%s:%s)
+**ofid_domainclose:OFI domain close failed
+**ofid_domainclose %s %d %s %s:OFI domain close failed (%s:%d:%s:%s)
+**ofid_avclose:OFI av close failed
+**ofid_avclose %s %d %s %s:OFI av close failed (%s:%d:%s:%s)
+**ofid_tsend:OFI tagged send failed
+**ofid_tsend %s %d %s %s:OFI tagged send failed (%s:%d:%s:%s)
+**ofid_tsenddata:OFI tagged senddata failed
+**ofid_tsenddata %s %d %s %s:OFI tagged senddata failed (%s:%d:%s:%s)
+**ofid_tsendmsg:OFI tagged sendmsg failed
+**ofid_tsendmsg %s %d %s %s:OFI tagged sendmsg failed (%s:%d:%s:%s)
+**ofid_tinject:OFI tagged inject failed
+**ofid_tinject %s %d %s %s:OFI tagged inject failed (%s:%d:%s:%s)
+**ofid_tinjectdata:OFI tagged injectdata failed
+**ofid_tinjectdata %s %d %s %s:OFI tagged injectdata failed (%s:%d:%s:%s)
+**ofid_tsendsync:OFI tagged send sync failed
+**ofid_tsendsync %s %d %s %s:OFI tagged send sync failed (%s:%d:%s:%s)
+**ofid_trecv:OFI tagged recv failed
+**ofid_trecv %s %d %s %s:OFI tagged recv failed (%s:%d:%s:%s)
+**ofid_trecvmsg:OFI tagged recvmsg failed
+**ofid_trecvmsg %s %d %s %s:OFI tagged recvmsg failed (%s:%d:%s:%s)
+**ofid_trecvsync:OFI tagged recv sync failed
+**ofid_trecvsync %s %d %s %s:OFI tagged recv sync failed (%s:%d:%s:%s)
+**ofid_poll:OFI poll failed
+**ofid_poll %s %d %s %s:OFI poll failed (%s:%d:%s:%s)
+**ofid_peek:OFI peek failed
+**ofid_peek %s %d %s %s:OFI peek failed (%s:%d:%s:%s)
+**ofid_send:OFI send failed
+**ofid_send %s %d %s %s:OFI send failed (%s:%d:%s:%s)
+**ofid_inject:OFI inject failed
+**ofid_inject %s %d %s %s:OFI inject failed (%s:%d:%s:%s)
+**ofid_rdma_write:OFI rdma write failed
+**ofid_rdma_write %s %d %s %s:OFI rdma write failed (%s:%d:%s:%s)
+**ofid_rdma_inject_write:OFI rdma write immediatefailed
+**ofid_rdma_inject_write %s %d %s %s:OFI rdma write immediate failed (%s:%d:%s:%s)
+**ofid_rdma_atomicto:OFI rdma atomicto failed
+**ofid_rdma_atomicto %s %d %s %s:OFI rdma atomicto failed (%s:%d:%s:%s)
+**ofid_rdma_cswap:OFI rdma cswap failed
+**ofid_rdma_cswap %s %d %s %s:OFI rdma cswap failed (%s:%d:%s:%s)
+**ofid_rdma_readfrom:OFI rdma read failed
+**ofid_rdma_readfrom %s %d %s %s:OFI read failed (%s:%d:%s:%s)
+**ofid_mr_reg:OFI memory registration failed
+**ofid_mr_reg %s %d %s %s:OFI memory registration failed (%s:%d:%s:%s)
+**ofid_mr_unreg:OFI memory deregistration failed
+**ofid_mr_unreg %s %d %s %s:OFI memory deregistration failed (%s:%d:%s:%s)
+**ofid_prepost:OFI preposting receives failed
+**ofid_prepost %s %d %s %s:OFI preposting receives failed (%s:%d:%s:%s)
+**ofid_ctrlcancel:OFI Control cancel failed
+**ofid_ctrlcancel %s %d %s %s:OFI control cancel failed (%s:%d:%s:%s)
+**ofid_cntr_wait:OFI Counter wait failed
+**ofid_cntr_wait %s %d %s %s:OFI OFI Counter wait failed (%s:%d:%s:%s)
+**ofid_rma_init:OFI RMA Initialization failed
+**ofid_rma_init %s %d %s %s:OFI RMA Initialization failed (%s:%d:%s:%s)
+**ofid_stx_ctx:OFI fi_stx_context failed
+**ofid_stx_ctx %s %d %s %s:OFI fi_stx_context failed (%s:%d:%s:%s)
+**ofid_stx_ctx_close:OFI stx context close failed
+**ofid_stx_ctx_close %s %d %s %s:OFI stx context close failed (%s:%d:%s:%s)
diff --git a/src/mpid/ch4/netmod/ofi/fi_list.h b/src/mpid/ch4/netmod/ofi/fi_list.h
new file mode 100644
index 0000000..af1d616
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/fi_list.h
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2011-2016 Intel Corporation. All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses. You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * BSD license below:
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifndef FI_LIST_H_INCLUDED
+#define FI_LIST_H_INCLUDED
+
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+/*
+ * Double-linked list
+ */
+struct dlist_entry {
+ struct dlist_entry *next;
+ struct dlist_entry *prev;
+};
+
+#define DLIST_INIT(addr) { addr, addr }
+#define DEFINE_LIST(name) struct dlist_entry name = DLIST_INIT(&name)
+
+static inline void dlist_init(struct dlist_entry *head)
+{
+ head->next = head;
+ head->prev = head;
+}
+
+static inline int dlist_empty(struct dlist_entry *head)
+{
+ return head->next == head;
+}
+
+static inline void dlist_insert_after(struct dlist_entry *item, struct dlist_entry *head)
+{
+ item->next = head->next;
+ item->prev = head;
+ head->next->prev = item;
+ head->next = item;
+}
+
+static inline void dlist_insert_before(struct dlist_entry *item, struct dlist_entry *head)
+{
+ dlist_insert_after(item, head->prev);
+}
+
+#define dlist_insert_head dlist_insert_after
+#define dlist_insert_tail dlist_insert_before
+
+static inline void dlist_remove(struct dlist_entry *item)
+{
+ item->prev->next = item->next;
+ item->next->prev = item->prev;
+}
+
+#define dlist_foreach(head, item) \
+ for (item = (head)->next; item != head; item = item->next)
+
+typedef int dlist_func_t(struct dlist_entry *item, const void *arg);
+
+static inline struct dlist_entry *dlist_find_first_match(struct dlist_entry *head,
+ dlist_func_t * match, const void *arg)
+{
+ struct dlist_entry *item;
+
+ dlist_foreach(head, item) {
+ if (match(item, arg))
+ return item;
+ }
+
+ return NULL;
+}
+
+static inline struct dlist_entry *dlist_remove_first_match(struct dlist_entry *head,
+ dlist_func_t * match, const void *arg)
+{
+ struct dlist_entry *item;
+
+ item = dlist_find_first_match(head, match, arg);
+ if (item)
+ dlist_remove(item);
+
+ return item;
+}
+
+/*
+ * Single-linked list
+ */
+struct slist_entry {
+ struct slist_entry *next;
+};
+
+struct slist {
+ struct slist_entry *head;
+ struct slist_entry *tail;
+};
+
+static inline void slist_init(struct slist *list)
+{
+ list->head = list->tail = NULL;
+}
+
+static inline int slist_empty(struct slist *list)
+{
+ return !list->head;
+}
+
+static inline void slist_insert_head(struct slist_entry *item, struct slist *list)
+{
+ if (slist_empty(list))
+ list->tail = item;
+ else
+ item->next = list->head;
+
+ list->head = item;
+}
+
+static inline void slist_insert_tail(struct slist_entry *item, struct slist *list)
+{
+ if (slist_empty(list))
+ list->head = item;
+ else
+ list->tail->next = item;
+
+ list->tail = item;
+}
+
+static inline struct slist_entry *slist_remove_head(struct slist *list)
+{
+ struct slist_entry *item;
+
+ item = list->head;
+ if (list->head == list->tail)
+ slist_init(list);
+ else
+ list->head = item->next;
+ return item;
+}
+
+#define slist_foreach(list, item, prev) \
+ for (prev = NULL, item = list->head; item; prev = item, item = item->next)
+
+typedef int slist_func_t(struct slist_entry *item, const void *arg);
+
+static inline struct slist_entry *slist_remove_first_match(struct slist *list, slist_func_t * match,
+ const void *arg)
+{
+ struct slist_entry *item, *prev;
+
+ slist_foreach(list, item, prev) {
+ if (match(item, arg)) {
+ if (prev)
+ prev->next = item->next;
+ else
+ list->head = item->next;
+
+ if (!item->next)
+ list->tail = prev;
+
+ return item;
+ }
+ }
+
+ return NULL;
+}
+
+#endif /* FI_LIST_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/func_table.c b/src/mpid/ch4/netmod/ofi/func_table.c
new file mode 100644
index 0000000..03b0864
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/func_table.c
@@ -0,0 +1,152 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifndef NETMOD_DIRECT
+#define NETMOD_DISABLE_INLINES
+#include <mpidimpl.h>
+#include "netmod_direct.h"
+MPIDI_NM_funcs_t MPIDI_NM_ofi_funcs = {
+ MPIDI_NM_mpi_init_hook,
+ MPIDI_NM_mpi_finalize_hook,
+ MPIDI_NM_progress,
+ MPIDI_NM_mpi_comm_connect,
+ MPIDI_NM_mpi_comm_disconnect,
+ MPIDI_NM_mpi_open_port,
+ MPIDI_NM_mpi_close_port,
+ MPIDI_NM_mpi_comm_accept,
+ MPIDI_NM_comm_get_lpid,
+ MPIDI_NM_get_local_upids,
+ MPIDI_NM_upids_to_lupids,
+ MPIDI_NM_create_intercomm_from_lpids,
+ MPIDI_NM_mpi_comm_create_hook,
+ MPIDI_NM_mpi_comm_free_hook,
+ MPIDI_NM_am_request_init,
+ MPIDI_NM_am_request_finalize,
+ MPIDI_NM_am_reg_cb,
+ MPIDI_NM_am_send_hdr,
+ MPIDI_NM_am_isend,
+ MPIDI_NM_am_isendv,
+ MPIDI_NM_am_send_hdr_reply,
+ MPIDI_NM_am_isend_reply,
+ MPIDI_NM_am_hdr_max_sz,
+ MPIDI_NM_am_recv
+};
+
+MPIDI_NM_native_funcs_t MPIDI_NM_native_ofi_funcs = {
+ MPIDI_NM_mpi_send,
+ MPIDI_NM_mpi_ssend,
+ MPIDI_NM_mpi_startall,
+ MPIDI_NM_mpi_send_init,
+ MPIDI_NM_mpi_ssend_init,
+ MPIDI_NM_mpi_rsend_init,
+ MPIDI_NM_mpi_bsend_init,
+ MPIDI_NM_mpi_isend,
+ MPIDI_NM_mpi_issend,
+ MPIDI_NM_mpi_cancel_send,
+ MPIDI_NM_mpi_recv_init,
+ MPIDI_NM_mpi_recv,
+ MPIDI_NM_mpi_irecv,
+ MPIDI_NM_mpi_imrecv,
+ MPIDI_NM_mpi_cancel_recv,
+ MPIDI_NM_mpi_alloc_mem,
+ MPIDI_NM_mpi_free_mem,
+ MPIDI_NM_mpi_improbe,
+ MPIDI_NM_mpi_iprobe,
+ MPIDI_NM_mpi_win_set_info,
+ MPIDI_NM_mpi_win_shared_query,
+ MPIDI_NM_mpi_put,
+ MPIDI_NM_mpi_win_start,
+ MPIDI_NM_mpi_win_complete,
+ MPIDI_NM_mpi_win_post,
+ MPIDI_NM_mpi_win_wait,
+ MPIDI_NM_mpi_win_test,
+ MPIDI_NM_mpi_win_lock,
+ MPIDI_NM_mpi_win_unlock,
+ MPIDI_NM_mpi_win_get_info,
+ MPIDI_NM_mpi_get,
+ MPIDI_NM_mpi_win_free,
+ MPIDI_NM_mpi_win_fence,
+ MPIDI_NM_mpi_win_create,
+ MPIDI_NM_mpi_accumulate,
+ MPIDI_NM_mpi_win_attach,
+ MPIDI_NM_mpi_win_allocate_shared,
+ MPIDI_NM_mpi_rput,
+ MPIDI_NM_mpi_win_flush_local,
+ MPIDI_NM_mpi_win_detach,
+ MPIDI_NM_mpi_compare_and_swap,
+ MPIDI_NM_mpi_raccumulate,
+ MPIDI_NM_mpi_rget_accumulate,
+ MPIDI_NM_mpi_fetch_and_op,
+ MPIDI_NM_mpi_win_allocate,
+ MPIDI_NM_mpi_win_flush,
+ MPIDI_NM_mpi_win_flush_local_all,
+ MPIDI_NM_mpi_win_unlock_all,
+ MPIDI_NM_mpi_win_create_dynamic,
+ MPIDI_NM_mpi_rget,
+ MPIDI_NM_mpi_win_sync,
+ MPIDI_NM_mpi_win_flush_all,
+ MPIDI_NM_mpi_get_accumulate,
+ MPIDI_NM_mpi_win_lock_all,
+ MPIDI_NM_rank_is_local,
+ MPIDI_NM_mpi_barrier,
+ MPIDI_NM_mpi_bcast,
+ MPIDI_NM_mpi_allreduce,
+ MPIDI_NM_mpi_allgather,
+ MPIDI_NM_mpi_allgatherv,
+ MPIDI_NM_mpi_scatter,
+ MPIDI_NM_mpi_scatterv,
+ MPIDI_NM_mpi_gather,
+ MPIDI_NM_mpi_gatherv,
+ MPIDI_NM_mpi_alltoall,
+ MPIDI_NM_mpi_alltoallv,
+ MPIDI_NM_mpi_alltoallw,
+ MPIDI_NM_mpi_reduce,
+ MPIDI_NM_mpi_reduce_scatter,
+ MPIDI_NM_mpi_reduce_scatter_block,
+ MPIDI_NM_mpi_scan,
+ MPIDI_NM_mpi_exscan,
+ MPIDI_NM_mpi_neighbor_allgather,
+ MPIDI_NM_mpi_neighbor_allgatherv,
+ MPIDI_NM_mpi_neighbor_alltoall,
+ MPIDI_NM_mpi_neighbor_alltoallv,
+ MPIDI_NM_mpi_neighbor_alltoallw,
+ MPIDI_NM_mpi_ineighbor_allgather,
+ MPIDI_NM_mpi_ineighbor_allgatherv,
+ MPIDI_NM_mpi_ineighbor_alltoall,
+ MPIDI_NM_mpi_ineighbor_alltoallv,
+ MPIDI_NM_mpi_ineighbor_alltoallw,
+ MPIDI_NM_mpi_ibarrier,
+ MPIDI_NM_mpi_ibcast,
+ MPIDI_NM_mpi_iallgather,
+ MPIDI_NM_mpi_iallgatherv,
+ MPIDI_NM_mpi_iallreduce,
+ MPIDI_NM_mpi_ialltoall,
+ MPIDI_NM_mpi_ialltoallv,
+ MPIDI_NM_mpi_ialltoallw,
+ MPIDI_NM_mpi_iexscan,
+ MPIDI_NM_mpi_igather,
+ MPIDI_NM_mpi_igatherv,
+ MPIDI_NM_mpi_ireduce_scatter_block,
+ MPIDI_NM_mpi_ireduce_scatter,
+ MPIDI_NM_mpi_ireduce,
+ MPIDI_NM_mpi_iscan,
+ MPIDI_NM_mpi_iscatter,
+ MPIDI_NM_mpi_iscatterv,
+ MPIDI_NM_mpi_type_create_hook,
+ MPIDI_NM_mpi_type_free_hook,
+ MPIDI_NM_mpi_op_create_hook,
+ MPIDI_NM_mpi_op_free_hook,
+};
+#endif
diff --git a/src/mpid/ch4/netmod/ofi/globals.c b/src/mpid/ch4/netmod/ofi/globals.c
new file mode 100644
index 0000000..cf74fd9
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/globals.c
@@ -0,0 +1,13 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#include <mpidimpl.h>
+#include "ofi_impl.h"
+MPIDI_OFI_global_t MPIDI_Global = { 0 };
diff --git a/src/mpid/ch4/netmod/ofi/netmod_direct.h b/src/mpid/ch4/netmod/ofi/netmod_direct.h
new file mode 100644
index 0000000..0d77db2
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/netmod_direct.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef NETMOD_DIRECT_H_INCLUDED
+#define NETMOD_DIRECT_H_INCLUDED
+
+#include "ofi_am.h"
+#include "ofi_events.h"
+#include "ofi_comm.h"
+#include "ofi_proc.h"
+#include "ofi_progress.h"
+#include "ofi_unimpl.h"
+#include "ofi_init.h"
+#include "ofi_coll.h"
+#include "ofi_datatype.h"
+#include "ofi_op.h"
+
+#ifdef USE_OFI_TAGGED
+#include "ofi_probe.h"
+#include "ofi_recv.h"
+#include "ofi_send.h"
+#include "ofi_win.h"
+#include "ofi_rma.h"
+#include "ofi_spawn.h"
+#else
+#include "ofi_am_probe.h"
+#include "ofi_am_recv.h"
+#include "ofi_am_send.h"
+#include "ofi_am_win.h"
+#include "ofi_am_rma.h"
+#include "ofi_am_spawn.h"
+#endif /* USE_OFI_TAGGED */
+
+#endif /* NETMOD_DIRECT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am.h b/src/mpid/ch4/netmod/ofi/ofi_am.h
new file mode 100644
index 0000000..63e180d
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am.h
@@ -0,0 +1,219 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_H_INCLUDED
+#define OFI_AM_H_INCLUDED
+#include "ofi_impl.h"
+#include "ofi_am_impl.h"
+#include "ofi_am_events.h"
+
+static inline int MPIDI_OFI_progress_do_queue(void *netmod_context);
+
+static inline void MPIDI_NM_am_request_init(MPIR_Request * req)
+{
+ MPIDI_OFI_AMREQUEST(req, req_hdr) = NULL;
+}
+
+static inline void MPIDI_NM_am_request_finalize(MPIR_Request * req)
+{
+ MPIDI_OFI_am_clear_request(req);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_am_isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_am_isend(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_SEND_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_SEND_AM);
+ if (count)
+ mpi_errno = MPIDI_OFI_do_am_isend(rank, comm, handler_id,
+ am_hdr, am_hdr_sz, data, count, datatype, sreq, FALSE);
+ else
+ mpi_errno = MPIDI_OFI_do_am_isend_header(rank, comm, handler_id,
+ am_hdr, am_hdr_sz, sreq, FALSE);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_SEND_AM);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_am_isendv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_am_isendv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype,
+ MPIR_Request * sreq, void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS, is_allocated;
+ size_t am_hdr_sz = 0, i;
+ char *am_hdr_buf;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_SEND_AMV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_SEND_AMV);
+
+ for (i = 0; i < iov_len; i++) {
+ am_hdr_sz += am_hdr[i].iov_len;
+ }
+
+ if (am_hdr_sz > MPIDI_OFI_BUF_POOL_SIZE) {
+ am_hdr_buf = (char *) MPL_malloc(am_hdr_sz);
+ is_allocated = 1;
+ }
+ else {
+ am_hdr_buf = (char *) MPIDI_CH4R_get_buf(MPIDI_Global.am_buf_pool);
+ is_allocated = 0;
+ }
+
+ MPIR_Assert(am_hdr_buf);
+ am_hdr_sz = 0;
+
+ for (i = 0; i < iov_len; i++) {
+ MPIR_Memcpy(am_hdr_buf + am_hdr_sz, am_hdr[i].iov_base, am_hdr[i].iov_len);
+ am_hdr_sz += am_hdr[i].iov_len;
+ }
+
+ mpi_errno = MPIDI_NM_am_isend(rank, comm, handler_id, am_hdr_buf, am_hdr_sz,
+ data, count, datatype, sreq, netmod_context);
+
+ if (is_allocated)
+ MPL_free(am_hdr_buf);
+ else
+ MPIDI_CH4R_release_buf(am_hdr_buf);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_SEND_AMV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_am_isend_reply
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_am_isend_reply(MPIR_Context_id_t context_id,
+ int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_SEND_AM_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_SEND_AM_REPLY);
+ if (count)
+ mpi_errno = MPIDI_OFI_do_am_isend(src_rank,
+ MPIDI_CH4U_context_id_to_comm(context_id),
+ handler_id,
+ am_hdr, am_hdr_sz, data, count, datatype, sreq, TRUE);
+ else
+ mpi_errno = MPIDI_OFI_do_am_isend_header(src_rank,
+ MPIDI_CH4U_context_id_to_comm(context_id),
+ handler_id, am_hdr, am_hdr_sz, sreq, TRUE);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_SEND_AM_REPLY);
+ return mpi_errno;
+}
+
+static inline size_t MPIDI_NM_am_hdr_max_sz(void)
+{
+ /* Maximum size that fits in short send */
+ size_t max_shortsend = MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE -
+ (sizeof(MPIDI_OFI_am_header_t) + sizeof(MPIDI_OFI_lmt_msg_payload_t));
+ /* Maximum payload size representable by MPIDI_OFI_am_header_t::am_hdr_sz field */
+ size_t max_representable = (1 << MPIDI_OFI_AM_HDR_SZ_BITS) - 1;
+
+ return MPL_MIN(max_shortsend, max_representable);
+}
+
+static inline int MPIDI_NM_am_send_hdr(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_INJECT_AM_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_INJECT_AM_HDR);
+ mpi_errno = MPIDI_OFI_do_inject(rank, comm,
+ handler_id, am_hdr, am_hdr_sz,
+ netmod_context, FALSE, TRUE, TRUE);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_INJECT_AM_HDR);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_am_send_hdr_reply(MPIR_Context_id_t context_id,
+ int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_INJECT_AM_HDR_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_INJECT_AM_HDR_REPLY);
+
+ mpi_errno = MPIDI_OFI_do_inject(src_rank, MPIDI_CH4U_context_id_to_comm(context_id),
+ handler_id, am_hdr, am_hdr_sz, NULL, TRUE, TRUE, FALSE);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_INJECT_AM_HDR);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_am_recv(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_send_long_ack_msg_t msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_AM_MATCHED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_AM_MATCHED);
+
+ msg.sreq_ptr = (MPIDI_CH4U_REQUEST(req, req->rreq.peer_req_ptr));
+ msg.rreq_ptr = (uint64_t) req;
+ MPIR_Assert((void *) msg.sreq_ptr != NULL);
+ mpi_errno = MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_get_context(MPIDI_CH4U_REQUEST(req, tag)),
+ MPIDI_CH4U_REQUEST(req, rank),
+ MPIDI_CH4U_SEND_LONG_ACK, &msg, sizeof(msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_AM_MATCHED);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* OFI_AM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_events.h b/src/mpid/ch4/netmod/ofi/ofi_am_events.h
new file mode 100644
index 0000000..f8edb39
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_events.h
@@ -0,0 +1,414 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_EVENTS_H_INCLUDED
+#define OFI_AM_EVENTS_H_INCLUDED
+
+#include "ofi_am_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_short_am
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_handle_short_am(MPIDI_OFI_am_header_t * msg_hdr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ void *p_data;
+ void *in_data;
+
+ size_t data_sz, in_data_sz;
+ MPIDIG_am_target_cmpl_cb target_cmpl_cb;
+ struct iovec *iov;
+ int i, is_contig, iov_len;
+ size_t done, curr_len, rem;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_HANDLE_SHORT_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_HANDLE_SHORT_AM);
+
+ p_data = in_data = (char *) msg_hdr->payload + msg_hdr->am_hdr_sz;
+ in_data_sz = data_sz = msg_hdr->data_sz;
+
+ MPIDIG_global.target_msg_cbs[msg_hdr->handler_id] (msg_hdr->handler_id, msg_hdr->payload,
+ &p_data, &data_sz,
+ &is_contig, &target_cmpl_cb, &rreq);
+
+ if (!rreq)
+ goto fn_exit;
+
+ if ((!p_data || !data_sz) && target_cmpl_cb) {
+ MPIR_STATUS_SET_COUNT(rreq->status, data_sz);
+ target_cmpl_cb(rreq);
+ goto fn_exit;
+ }
+
+ if (is_contig) {
+ if (in_data_sz > data_sz) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ data_sz = MPL_MIN(data_sz, in_data_sz);
+ MPIR_Memcpy(p_data, in_data, data_sz);
+ MPIR_STATUS_SET_COUNT(rreq->status, data_sz);
+ }
+ else {
+ done = 0;
+ rem = in_data_sz;
+ iov = (struct iovec *) p_data;
+ iov_len = data_sz;
+
+ for (i = 0; i < iov_len && rem > 0; i++) {
+ curr_len = MPL_MIN(rem, iov[i].iov_len);
+ MPIR_Memcpy(iov[i].iov_base, (char *) in_data + done, curr_len);
+ rem -= curr_len;
+ done += curr_len;
+ }
+
+ if (rem) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ MPIR_STATUS_SET_COUNT(rreq->status, done);
+ }
+
+ if (target_cmpl_cb) {
+ target_cmpl_cb(rreq);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_HANDLE_SHORT_AM);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_short_am_hdr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_handle_short_am_hdr(MPIDI_OFI_am_header_t * msg_hdr, void *am_hdr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ MPIDIG_am_target_cmpl_cb target_cmpl_cb = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_HANDLE_SHORT_AM_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_HANDLE_SHORT_AM_HDR);
+
+ MPIDIG_global.target_msg_cbs[msg_hdr->handler_id] (msg_hdr->handler_id, am_hdr,
+ NULL, NULL, NULL, &target_cmpl_cb, &rreq);
+
+ if (!rreq)
+ goto fn_exit;
+
+ if (target_cmpl_cb) {
+ target_cmpl_cb(rreq);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_HANDLE_SHORT_AM_HDR);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_rdma_read
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_rdma_read(void *dst,
+ uint64_t src,
+ size_t data_sz,
+ MPIR_Context_id_t context_id,
+ int src_rank, MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t done = 0, curr_len, rem = 0;
+ MPIDI_OFI_am_request_t *am_req;
+ MPIR_Comm *comm;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_RDMA_READ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_RDMA_READ);
+
+ rem = data_sz;
+
+ while (done != data_sz) {
+ curr_len = MPL_MIN(rem, MPIDI_Global.max_send);
+
+ MPIR_Assert(sizeof(MPIDI_OFI_am_request_t) <= MPIDI_OFI_BUF_POOL_SIZE);
+ am_req = (MPIDI_OFI_am_request_t *) MPIDI_CH4R_get_buf(MPIDI_Global.am_buf_pool);
+ MPIR_Assert(am_req);
+
+ am_req->req_hdr = MPIDI_OFI_AMREQUEST(rreq, req_hdr);
+ am_req->event_id = MPIDI_OFI_EVENT_AM_READ;
+ comm = MPIDI_CH4U_context_id_to_comm(context_id);
+ MPIR_Assert(comm);
+ MPIDI_OFI_cntr_incr();
+ MPIDI_OFI_CALL_RETRY_AM(fi_read(MPIDI_OFI_EP_TX_RMA(0),
+ (char *) dst + done,
+ curr_len, NULL,
+ MPIDI_OFI_comm_to_phys(comm, src_rank, MPIDI_OFI_API_TAG),
+ src + done,
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_info).rma_key,
+ &am_req->context), FALSE /* no lock */ , read);
+ done += curr_len;
+ rem -= curr_len;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_RDMA_READ);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_long_am_hdr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_handle_long_am_hdr(MPIDI_OFI_am_header_t * msg_hdr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_lmt_msg_payload_t *lmt_msg;
+ MPIR_Request *rreq;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_HANDLE_LONG_AM_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_HANDLE_LONG_AM_HDR);
+
+ rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RECV);
+
+ mpi_errno = MPIDI_OFI_am_init_request(NULL, 0, rreq);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ lmt_msg = (MPIDI_OFI_lmt_msg_payload_t *) msg_hdr->payload;
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_info) = *lmt_msg;
+ MPIDI_OFI_AMREQUEST_HDR(rreq, msg_hdr) = *msg_hdr;
+ MPIDI_OFI_AMREQUEST_HDR(rreq, rreq_ptr) = (void *) rreq;
+ MPIDI_OFI_AMREQUEST_HDR(rreq, am_hdr) = MPL_malloc(msg_hdr->am_hdr_sz);
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_cntr) =
+ ((msg_hdr->am_hdr_sz - 1) / MPIDI_Global.max_send) + 1;
+ MPIDI_OFI_do_rdma_read(MPIDI_OFI_AMREQUEST_HDR(rreq, am_hdr), lmt_msg->am_hdr_src,
+ msg_hdr->am_hdr_sz, lmt_msg->context_id, lmt_msg->src_rank, rreq);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_HANDLE_LONG_AM_HDR);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_handle_long_am
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_handle_long_am(MPIDI_OFI_am_header_t * msg_hdr,
+ MPIDI_OFI_lmt_msg_payload_t * lmt_msg, void *am_hdr)
+{
+ int num_reads, i, iov_len, c, mpi_errno = MPI_SUCCESS, is_contig = 0;
+ MPIR_Request *rreq;
+ void *p_data;
+ size_t data_sz, rem, done, curr_len, in_data_sz;
+ MPIDIG_am_target_cmpl_cb target_cmpl_cb;
+ struct iovec *iov;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_HANDLE_LONG_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_HANDLE_LONG_AM);
+
+ in_data_sz = data_sz = msg_hdr->data_sz;
+ MPIDIG_global.target_msg_cbs[msg_hdr->handler_id] (msg_hdr->handler_id, am_hdr,
+ &p_data, &data_sz, &is_contig,
+ &target_cmpl_cb, &rreq);
+
+ if (!rreq)
+ goto fn_exit;
+
+ MPIDI_OFI_AMREQUEST(rreq, req_hdr) = NULL;
+ mpi_errno = MPIDI_OFI_am_init_request(NULL, 0, rreq);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIR_cc_incr(rreq->cc_ptr, &c);
+
+ MPIDI_OFI_AMREQUEST_HDR(rreq, target_cmpl_cb) = target_cmpl_cb;
+
+ if ((!p_data || !data_sz) && target_cmpl_cb) {
+ target_cmpl_cb(rreq);
+ MPIDI_Request_complete(rreq); /* FIXME: Should not call MPIDI in NM ? */
+ goto fn_exit;
+ }
+
+ MPIDI_OFI_AMREQUEST_HDR(rreq, msg_hdr) = *msg_hdr;
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_info) = *lmt_msg;
+ MPIDI_OFI_AMREQUEST_HDR(rreq, rreq_ptr) = (void *) rreq;
+
+ if (is_contig) {
+ if (in_data_sz > data_sz) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ data_sz = MPL_MIN(data_sz, in_data_sz);
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_cntr) = ((data_sz - 1) / MPIDI_Global.max_send) + 1;
+ MPIDI_OFI_do_rdma_read(p_data,
+ lmt_msg->src_offset,
+ data_sz, lmt_msg->context_id, lmt_msg->src_rank, rreq);
+ MPIR_STATUS_SET_COUNT(rreq->status, data_sz);
+ }
+ else {
+ done = 0;
+ rem = in_data_sz;
+ iov = (struct iovec *) p_data;
+ iov_len = data_sz;
+
+ /* FIXME: optimize iov processing part */
+
+ /* set lmt counter */
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_cntr) = 0;
+
+ for (i = 0; i < iov_len && rem > 0; i++) {
+ curr_len = MPL_MIN(rem, iov[i].iov_len);
+ num_reads = ((curr_len - 1) / MPIDI_Global.max_send) + 1;
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_cntr) += num_reads;
+ rem -= curr_len;
+ }
+
+ done = 0;
+ rem = in_data_sz;
+
+ for (i = 0; i < iov_len && rem > 0; i++) {
+ curr_len = MPL_MIN(rem, iov[i].iov_len);
+ MPIDI_OFI_do_rdma_read(iov[i].iov_base, lmt_msg->src_offset + done,
+ curr_len, lmt_msg->context_id, lmt_msg->src_rank, rreq);
+ rem -= curr_len;
+ done += curr_len;
+ }
+
+ if (rem) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ MPIR_STATUS_SET_COUNT(rreq->status, done);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_HANDLE_LONG_AM);
+ return mpi_errno;
+
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_long_am
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_handle_long_am(MPIDI_OFI_am_header_t * msg_hdr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_lmt_msg_payload_t *lmt_msg;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_HANDLE_LONG_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_HANDLE_LONG_AM);
+
+ lmt_msg = (MPIDI_OFI_lmt_msg_payload_t *) ((char *) msg_hdr->payload + msg_hdr->am_hdr_sz);
+ mpi_errno = MPIDI_OFI_do_handle_long_am(msg_hdr, lmt_msg, msg_hdr->payload);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_HANDLE_LONG_AM);
+ return mpi_errno;
+
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_lmt_ack
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_handle_lmt_ack(MPIDI_OFI_am_header_t * msg_hdr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq;
+ MPIDI_OFI_ack_msg_payload_t *ack_msg;
+ int handler_id;
+ uint64_t index;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_HANDLE_LMT_ACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_HANDLE_LMT_ACK);
+
+ ack_msg = (MPIDI_OFI_ack_msg_payload_t *) msg_hdr->payload;
+ sreq = (MPIR_Request *) ack_msg->sreq_ptr;
+
+ index = fi_mr_key(MPIDI_OFI_AMREQUEST_HDR(sreq, lmt_mr)) >> MPIDI_Global.huge_rma_shift;
+ MPIDI_OFI_index_allocator_free(MPIDI_OFI_COMM(MPIR_Process.comm_world).rma_id_allocator, index);
+ MPIDI_OFI_CALL_NOLOCK(fi_close(&MPIDI_OFI_AMREQUEST_HDR(sreq, lmt_mr)->fid), mr_unreg);
+ OPA_decr_int(&MPIDI_Global.am_inflight_rma_send_mrs);
+
+ if (MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer)) {
+ MPL_free(MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer));
+ }
+
+ handler_id = MPIDI_OFI_AMREQUEST_HDR(sreq, msg_hdr).handler_id;
+ MPIDI_Request_complete(sreq); /* FIXME: Should not call MPIDI in NM ? */
+ mpi_errno = MPIDIG_global.origin_cbs[handler_id] (sreq);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_HANDLE_LMT_ACK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_dispatch_ack
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_dispatch_ack(int rank,
+ int context_id,
+ uint64_t sreq_ptr, int am_type, void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_ack_msg_t msg;
+ MPIR_Comm *comm;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DISPATCH_ACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DISPATCH_ACK);
+
+ comm = MPIDI_CH4U_context_id_to_comm(context_id);
+
+ msg.hdr.am_hdr_sz = sizeof(msg.pyld);
+ msg.hdr.data_sz = 0;
+ msg.hdr.am_type = am_type;
+ msg.pyld.sreq_ptr = sreq_ptr;
+ MPIDI_OFI_CALL_RETRY_AM(fi_inject(MPIDI_OFI_EP_TX_MSG(0), &msg, sizeof(msg),
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_TAG)),
+ FALSE /* no lock */ , inject);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DISPATCH_ACK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#endif /* OFI_AM_EVENTS_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_impl.h b/src/mpid/ch4/netmod/ofi/ofi_am_impl.h
new file mode 100644
index 0000000..db36c41
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_impl.h
@@ -0,0 +1,554 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_IMPL_H_INCLUDED
+#define OFI_AM_IMPL_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_OFI_progress_do_queue(void *netmod_context);
+
+/*
+ Per-object lock for OFI
+
+ * When calling OFI function MPIDI_OFI_THREAD_FI_MUTEX must be held.
+ * When being called from the MPI layer (app), we must grab the lock.
+ This is the case for regular (non-reply) functions such as am_isend.
+ * When being called from callback function or progress engine, we must
+ not grab the lock because the progress engine is already holding the lock.
+ This is the case for reply functions such as am_isend_reply.
+*/
+#define MPIDI_OFI_CALL_RETRY_AM(FUNC,LOCK,STR) \
+ do { \
+ ssize_t _ret; \
+ do { \
+ if (LOCK) MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ _ret = FUNC; \
+ if (LOCK) MPID_THREAD_CS_EXIT(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ if (likely(_ret==0)) break; \
+ MPIR_ERR_##CHKANDJUMP4(_ret != -FI_EAGAIN, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ofi_"#STR, \
+ "**ofi_"#STR" %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ fi_strerror(-_ret)); \
+ if (LOCK) MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ mpi_errno = MPIDI_OFI_progress_do_queue(NULL); \
+ if (LOCK) MPID_THREAD_CS_EXIT(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ if (mpi_errno != MPI_SUCCESS) \
+ MPIR_ERR_POP(mpi_errno); \
+ } while (_ret == -FI_EAGAIN); \
+ } while (0)
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_clear_request
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_OFI_am_clear_request(MPIR_Request * sreq)
+{
+ MPIDI_OFI_am_request_header_t *req_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_AM_CLEAR_REQUEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_AM_CLEAR_REQUEST);
+
+ req_hdr = MPIDI_OFI_AMREQUEST(sreq, req_hdr);
+
+ if (!req_hdr)
+ return;
+
+ if (req_hdr->am_hdr != &req_hdr->am_hdr_buf[0]) {
+ MPL_free(req_hdr->am_hdr);
+ }
+
+ MPIDI_CH4R_release_buf(req_hdr);
+ MPIDI_OFI_AMREQUEST(sreq, req_hdr) = NULL;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_AM_CLEAR_REQUEST);
+ return;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_init_request
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_am_init_request(const void *am_hdr,
+ size_t am_hdr_sz, MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_am_request_header_t *req_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_AM_INIT_REQUEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_AM_INIT_REQUEST);
+
+ if (MPIDI_OFI_AMREQUEST(sreq, req_hdr) == NULL) {
+ req_hdr = (MPIDI_OFI_am_request_header_t *)
+ MPIDI_CH4R_get_buf(MPIDI_Global.am_buf_pool);
+ MPIR_Assert(req_hdr);
+ MPIDI_OFI_AMREQUEST(sreq, req_hdr) = req_hdr;
+
+ req_hdr->am_hdr = (void *) &req_hdr->am_hdr_buf[0];
+ req_hdr->am_hdr_sz = MPIDI_OFI_MAX_AM_HDR_SIZE;
+ }
+ else {
+ req_hdr = MPIDI_OFI_AMREQUEST(sreq, req_hdr);
+ }
+
+ if (am_hdr_sz > req_hdr->am_hdr_sz) {
+ if (req_hdr->am_hdr != &req_hdr->am_hdr_buf[0])
+ MPL_free(req_hdr->am_hdr);
+
+ req_hdr->am_hdr = MPL_malloc(am_hdr_sz);
+ MPIR_Assert(req_hdr->am_hdr);
+ req_hdr->am_hdr_sz = am_hdr_sz;
+ }
+
+ if (am_hdr) {
+ MPIR_Memcpy(req_hdr->am_hdr, am_hdr, am_hdr_sz);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_AM_INIT_REQUEST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_repost_buffer
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_repost_buffer(void *buf, MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_am_repost_request_t *am = (MPIDI_OFI_am_repost_request_t *) req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_REPOST_BUFFER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_REPOST_BUFFER);
+ MPIDI_OFI_CALL_RETRY_AM(fi_recvmsg(MPIDI_OFI_EP_RX_MSG(0),
+ &MPIDI_Global.am_msg[am->index],
+ FI_MULTI_RECV | FI_COMPLETION), FALSE /* lock */ , repost);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_REPOST_BUFFER);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_progress_do_queue
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_progress_do_queue(void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS, ret;
+ struct fi_cq_tagged_entry cq_entry;
+
+ /* Caller must hold MPIDI_OFI_THREAD_FI_MUTEX */
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_PROGRESS_DO_QUEUE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_PROGRESS_DO_QUEUE);
+
+ ret = fi_cq_read(MPIDI_Global.p2p_cq, &cq_entry, 1);
+
+ if (unlikely(ret == -FI_EAGAIN))
+ goto fn_exit;
+
+ if (ret < 0) {
+ mpi_errno = MPIDI_OFI_handle_cq_error_util(ret);
+ goto fn_fail;
+ }
+
+ if (((MPIDI_Global.cq_buff_head + 1) %
+ MPIDI_OFI_NUM_CQ_BUFFERED == MPIDI_Global.cq_buff_tail) ||
+ !slist_empty(&MPIDI_Global.cq_buff_list)) {
+ MPIDI_OFI_cq_list_t *list_entry =
+ (MPIDI_OFI_cq_list_t *) MPL_malloc(sizeof(MPIDI_OFI_cq_list_t));
+ MPIR_Assert(list_entry);
+ list_entry->cq_entry = cq_entry;
+ slist_insert_tail(&list_entry->entry, &MPIDI_Global.cq_buff_list);
+ }
+ else {
+ MPIDI_Global.cq_buffered[MPIDI_Global.cq_buff_head].cq_entry = cq_entry;
+ MPIDI_Global.cq_buff_head = (MPIDI_Global.cq_buff_head + 1) % MPIDI_OFI_NUM_CQ_BUFFERED;
+ }
+
+ if ((cq_entry.flags & FI_RECV) && (cq_entry.flags & FI_MULTI_RECV)) {
+ mpi_errno = MPIDI_OFI_repost_buffer(cq_entry.op_context,
+ MPIDI_OFI_context_to_request(cq_entry.op_context));
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_PROGRESS_DO_QUEUE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_am_isend_header
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_am_isend_header(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz, MPIR_Request * sreq, int is_reply)
+{
+ struct iovec iov[2];
+ MPIDI_OFI_am_header_t *msg_hdr;
+ int mpi_errno = MPI_SUCCESS, c;
+ int need_lock = !is_reply;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_AM_ISEND_HEADER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_AM_ISEND_HEADER);
+
+ MPIDI_OFI_AMREQUEST(sreq, req_hdr) = NULL;
+ mpi_errno = MPIDI_OFI_am_init_request(am_hdr, am_hdr_sz, sreq);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIR_Assert(handler_id < (1 << MPIDI_OFI_AM_HANDLER_ID_BITS));
+ MPIR_Assert(am_hdr_sz < (1ULL << MPIDI_OFI_AM_HDR_SZ_BITS));
+ msg_hdr = &MPIDI_OFI_AMREQUEST_HDR(sreq, msg_hdr);
+ msg_hdr->handler_id = handler_id;
+ msg_hdr->am_hdr_sz = am_hdr_sz;
+ msg_hdr->data_sz = 0;
+ msg_hdr->am_type = MPIDI_AMTYPE_SHORT_HDR;
+
+ MPIR_Assert((uint64_t) comm->rank < (1ULL << MPIDI_OFI_AM_RANK_BITS));
+
+ MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer) = NULL;
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+
+ iov[0].iov_base = msg_hdr;
+ iov[0].iov_len = sizeof(*msg_hdr);
+
+ MPIR_Assert((sizeof(*msg_hdr) + am_hdr_sz) <= MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE);
+ iov[1].iov_base = MPIDI_OFI_AMREQUEST_HDR(sreq, am_hdr);
+ iov[1].iov_len = am_hdr_sz;
+ MPIDI_OFI_AMREQUEST(sreq, event_id) = MPIDI_OFI_EVENT_AM_SEND;
+ MPIDI_OFI_CALL_RETRY_AM(fi_sendv(MPIDI_OFI_EP_TX_MSG(0), iov, NULL, 2,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_MSG),
+ &MPIDI_OFI_AMREQUEST(sreq, context)), need_lock, sendv);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_AM_ISEND_HEADER);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_isend_long
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_am_isend_long(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ size_t data_sz, MPIR_Request * sreq, int need_lock)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIDI_OFI_am_header_t *msg_hdr;
+ MPIDI_OFI_lmt_msg_payload_t *lmt_info;
+ struct iovec iov[3];
+ uint64_t index;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_AM_ISEND_LONG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_AM_ISEND_LONG);
+
+ MPIR_Assert(handler_id < (1 << MPIDI_OFI_AM_HANDLER_ID_BITS));
+ MPIR_Assert(am_hdr_sz < (1ULL << MPIDI_OFI_AM_HDR_SZ_BITS));
+ MPIR_Assert(data_sz < (1ULL << MPIDI_OFI_AM_DATA_SZ_BITS));
+ MPIR_Assert((uint64_t) comm->rank < (1ULL << MPIDI_OFI_AM_RANK_BITS));
+
+ msg_hdr = &MPIDI_OFI_AMREQUEST_HDR(sreq, msg_hdr);
+ msg_hdr->handler_id = handler_id;
+ msg_hdr->am_hdr_sz = am_hdr_sz;
+ msg_hdr->data_sz = data_sz;
+ msg_hdr->am_type = MPIDI_AMTYPE_LMT_REQ;
+
+ lmt_info = &MPIDI_OFI_AMREQUEST_HDR(sreq, lmt_info);
+ lmt_info->context_id = comm->context_id;
+ lmt_info->src_rank = comm->rank;
+ lmt_info->src_offset = MPIDI_OFI_ENABLE_MR_SCALABLE ? (uint64_t) 0 /* MR_SCALABLE */ : (uint64_t) data; /* MR_BASIC */
+ lmt_info->sreq_ptr = (uint64_t) sreq;
+ /* Always allocates RMA ID from COMM_WORLD as the actual associated communicator
+ * is not available here */
+ index =
+ MPIDI_OFI_index_allocator_alloc(MPIDI_OFI_COMM(MPIR_Process.comm_world).rma_id_allocator);
+ MPIR_Assert((int) index < MPIDI_Global.max_huge_rmas);
+ lmt_info->rma_key = MPIDI_OFI_ENABLE_MR_SCALABLE ? index << MPIDI_Global.huge_rma_shift : 0;
+
+ MPIR_cc_incr(sreq->cc_ptr, &c); /* send completion */
+ MPIR_cc_incr(sreq->cc_ptr, &c); /* lmt ack handler */
+ MPIR_Assert((sizeof(*msg_hdr) + sizeof(*lmt_info) + am_hdr_sz) <=
+ MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE);
+ if (need_lock)
+ MPIDI_OFI_CALL(fi_mr_reg(MPIDI_Global.domain,
+ data,
+ data_sz,
+ FI_REMOTE_READ,
+ 0ULL,
+ lmt_info->rma_key,
+ 0ULL, &MPIDI_OFI_AMREQUEST_HDR(sreq, lmt_mr), NULL), mr_reg);
+ else
+ MPIDI_OFI_CALL_NOLOCK(fi_mr_reg(MPIDI_Global.domain,
+ data,
+ data_sz,
+ FI_REMOTE_READ,
+ 0ULL,
+ lmt_info->rma_key,
+ 0ULL,
+ &MPIDI_OFI_AMREQUEST_HDR(sreq, lmt_mr), NULL), mr_reg);
+ OPA_incr_int(&MPIDI_Global.am_inflight_rma_send_mrs);
+
+ if (!MPIDI_OFI_ENABLE_MR_SCALABLE) {
+ /* MR_BASIC */
+ lmt_info->rma_key = fi_mr_key(MPIDI_OFI_AMREQUEST_HDR(sreq, lmt_mr));
+ }
+
+ iov[0].iov_base = msg_hdr;
+ iov[0].iov_len = sizeof(*msg_hdr);
+
+ iov[1].iov_base = MPIDI_OFI_AMREQUEST_HDR(sreq, am_hdr);
+ iov[1].iov_len = am_hdr_sz;
+
+ iov[2].iov_base = lmt_info;
+ iov[2].iov_len = sizeof(*lmt_info);
+ MPIDI_OFI_AMREQUEST(sreq, event_id) = MPIDI_OFI_EVENT_AM_SEND;
+ MPIDI_OFI_CALL_RETRY_AM(fi_sendv(MPIDI_OFI_EP_TX_MSG(0), iov, NULL, 3,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_MSG),
+ &MPIDI_OFI_AMREQUEST(sreq, context)), need_lock, sendv);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_AM_ISEND_LONG);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_isend_short
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_am_isend_short(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count, MPIR_Request * sreq, int need_lock)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIDI_OFI_am_header_t *msg_hdr;
+ struct iovec iov[3];
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_AM_ISEND_SHORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_AM_ISEND_SHORT);
+
+ MPIR_Assert(handler_id < (1 << MPIDI_OFI_AM_HANDLER_ID_BITS));
+ MPIR_Assert(am_hdr_sz < (1ULL << MPIDI_OFI_AM_HDR_SZ_BITS));
+ MPIR_Assert((uint64_t) count < (1ULL << MPIDI_OFI_AM_DATA_SZ_BITS));
+ MPIR_Assert((uint64_t) comm->rank < (1ULL << MPIDI_OFI_AM_RANK_BITS));
+
+ msg_hdr = &MPIDI_OFI_AMREQUEST_HDR(sreq, msg_hdr);
+ msg_hdr->handler_id = handler_id;
+ msg_hdr->am_hdr_sz = am_hdr_sz;
+ msg_hdr->data_sz = count;
+ msg_hdr->am_type = MPIDI_AMTYPE_SHORT;
+
+ iov[0].iov_base = msg_hdr;
+ iov[0].iov_len = sizeof(*msg_hdr);
+
+ iov[1].iov_base = MPIDI_OFI_AMREQUEST_HDR(sreq, am_hdr);
+ iov[1].iov_len = am_hdr_sz;
+
+ iov[2].iov_base = (void *) data;
+ iov[2].iov_len = count;
+
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+ MPIDI_OFI_AMREQUEST(sreq, event_id) = MPIDI_OFI_EVENT_AM_SEND;
+ MPIDI_OFI_CALL_RETRY_AM(fi_sendv(MPIDI_OFI_EP_TX_MSG(0), iov, NULL, 3,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_MSG),
+ &MPIDI_OFI_AMREQUEST(sreq, context)), need_lock, sendv);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_AM_ISEND_SHORT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_am_isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_am_isend(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *buf,
+ size_t count,
+ MPI_Datatype datatype, MPIR_Request * sreq, int is_reply)
+{
+ int dt_contig, mpi_errno = MPI_SUCCESS;
+ char *send_buf;
+ size_t data_sz;
+ MPI_Aint dt_true_lb, last;
+ MPIR_Datatype *dt_ptr;
+ int need_lock = !is_reply;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_AM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_AM_ISEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ send_buf = (char *) buf + dt_true_lb;
+
+ if (handler_id == MPIDI_CH4U_SEND &&
+ am_hdr_sz + data_sz + sizeof(MPIDI_OFI_am_header_t) > MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE) {
+ MPIDI_CH4U_send_long_req_msg_t lreq_hdr;
+
+ MPIR_Memcpy(&lreq_hdr.hdr, am_hdr, am_hdr_sz);
+ lreq_hdr.data_sz = data_sz;
+ lreq_hdr.sreq_ptr = (uint64_t) sreq;
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).src_buf = buf;
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).count = count;
+ dtype_add_ref_if_not_builtin(datatype);
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).datatype = datatype;
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).msg_tag = lreq_hdr.hdr.msg_tag;
+ MPIDI_CH4U_REQUEST(sreq, rank) = rank;
+ mpi_errno = MPIDI_NM_am_send_hdr(rank, comm, MPIDI_CH4U_SEND_LONG_REQ,
+ &lreq_hdr, sizeof(lreq_hdr), NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ MPIDI_OFI_AMREQUEST(sreq, req_hdr) = NULL;
+ mpi_errno = MPIDI_OFI_am_init_request(am_hdr, am_hdr_sz, sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (!dt_contig) {
+ size_t segment_first;
+ struct MPIDU_Segment *segment_ptr;
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(segment_ptr == NULL, mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "Send MPIDU_Segment_alloc");
+ MPIDU_Segment_init(buf, count, datatype, segment_ptr, 0);
+ segment_first = 0;
+ last = data_sz;
+ MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer) = (char *) MPL_malloc(data_sz);
+ MPIR_ERR_CHKANDJUMP1(MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer) == NULL, mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "Send Pack buffer alloc");
+ MPIDU_Segment_pack(segment_ptr, segment_first, &last,
+ MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer));
+ MPIDU_Segment_free(segment_ptr);
+ send_buf = (char *) MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer);
+ }
+ else {
+ MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer) = NULL;
+ }
+
+ if (am_hdr_sz + data_sz + sizeof(MPIDI_OFI_am_header_t) <= MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE) {
+ mpi_errno =
+ MPIDI_OFI_am_isend_short(rank, comm, handler_id, MPIDI_OFI_AMREQUEST_HDR(sreq, am_hdr),
+ am_hdr_sz, send_buf, data_sz, sreq, need_lock);
+ }
+ else {
+ mpi_errno =
+ MPIDI_OFI_am_isend_long(rank, comm, handler_id, MPIDI_OFI_AMREQUEST_HDR(sreq, am_hdr),
+ am_hdr_sz, send_buf, data_sz, sreq, need_lock);
+ }
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_AM_ISEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_OFI_do_inject(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ void *netmod_context,
+ int is_reply, int use_comm_table, int need_lock)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_am_header_t msg_hdr;
+ struct fi_msg msg;
+ struct iovec msg_iov[2];
+ uint64_t send_flag = FI_INJECT;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_INJECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_INJECT);
+
+ MPIR_Assert(handler_id < (1 << MPIDI_OFI_AM_HANDLER_ID_BITS));
+ MPIR_Assert(am_hdr_sz < (1ULL << MPIDI_OFI_AM_HDR_SZ_BITS));
+
+ msg_hdr.handler_id = handler_id;
+ msg_hdr.am_hdr_sz = am_hdr_sz;
+ msg_hdr.data_sz = 0;
+ msg_hdr.am_type = MPIDI_AMTYPE_SHORT_HDR;
+
+ MPIR_Assert((uint64_t) comm->rank < (1ULL << MPIDI_OFI_AM_RANK_BITS));
+
+ msg_iov[0].iov_base = (void *) &msg_hdr;
+ msg_iov[0].iov_len = sizeof(msg_hdr);
+
+ msg_iov[1].iov_base = (void *) am_hdr;
+ msg_iov[1].iov_len = am_hdr_sz;
+
+ msg.msg_iov = &msg_iov[0];
+ msg.desc = NULL;
+ msg.iov_count = 2;
+ msg.context = NULL;
+ msg.addr = use_comm_table ?
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_MSG) :
+ MPIDI_OFI_to_phys(rank, MPIDI_OFI_API_MSG);
+
+ if (unlikely(am_hdr_sz + sizeof(msg_hdr) > MPIDI_Global.max_buffered_send)) {
+ MPIR_Request *sreq;
+ char *ibuf;
+
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Assert(sreq);
+ ibuf = (char *) MPL_malloc(am_hdr_sz + sizeof(msg_hdr));
+ MPIR_Assert(ibuf);
+ memcpy(ibuf, &msg_hdr, sizeof(msg_hdr));
+ memcpy(ibuf + sizeof(msg_hdr), am_hdr, am_hdr_sz);
+ msg_iov[0].iov_base = ibuf;
+ msg_iov[0].iov_len = am_hdr_sz + sizeof(msg_hdr);
+ msg.iov_count = 1;
+
+ MPIDI_OFI_REQUEST(sreq, event_id) = MPIDI_OFI_EVENT_INJECT_EMU;
+ MPIDI_OFI_REQUEST(sreq, util.inject_buf) = ibuf;
+ /* Cancel FI_INJECT and ask for completion event */
+ send_flag = FI_COMPLETION;
+ msg.context = (void *) &(MPIDI_OFI_REQUEST(sreq, context));
+ OPA_incr_int(&MPIDI_Global.am_inflight_inject_emus);
+ }
+
+ MPIDI_OFI_CALL_RETRY_AM(fi_sendmsg(MPIDI_OFI_EP_TX_MSG(0), &msg, send_flag), need_lock, send);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_INJECT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* OFI_AM_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_probe.h b/src/mpid/ch4/netmod/ofi/ofi_am_probe.h
new file mode 100644
index 0000000..d12892a
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_probe.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_PROBE_H_INCLUDED
+#define OFI_AM_PROBE_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_probe(int source,
+ int tag, MPIR_Comm * comm, int context_offset, MPI_Status * status)
+{
+ return MPIDI_CH4U_probe(source, tag, comm, context_offset, status);
+}
+
+static inline int MPIDI_NM_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+ return MPIDI_CH4U_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+}
+
+static inline int MPIDI_NM_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ return MPIDI_CH4U_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+}
+
+#endif /* OFI_AM_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_recv.h b/src/mpid/ch4/netmod/ofi/ofi_am_recv.h
new file mode 100644
index 0000000..9a340f7
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_recv.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_RECV_H_INCLUDED
+#define OFI_AM_RECV_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_recv(buf, count, datatype, rank, tag, comm, context_offset, status, request);
+}
+
+static inline int MPIDI_NM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_recv_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ return MPIDIG_mpi_imrecv(buf, count, datatype, message, rreqp);
+}
+
+static inline int MPIDI_NM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+
+}
+
+static inline int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ return MPIDIG_mpi_cancel_recv(rreq);
+}
+
+#endif /* OFI_AM_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_rma.h b/src/mpid/ch4/netmod/ofi/ofi_am_rma.h
new file mode 100644
index 0000000..3b9ac08
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_rma.h
@@ -0,0 +1,153 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_RMA_H_INCLUDED
+#define OFI_AM_RMA_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+}
+
+static inline int MPIDI_NM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+}
+
+static inline int MPIDI_NM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rput(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+}
+
+static inline int MPIDI_NM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_fetch_and_op(origin_addr, result_addr, datatype,
+ target_rank, target_disp, op, win);
+}
+
+
+static inline int MPIDI_NM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+}
+
+static inline int MPIDI_NM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win);
+}
+
+#endif /* OFI_AM_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_send.h b/src/mpid/ch4/netmod/ofi/ofi_am_send.h
new file mode 100644
index 0000000..e5e5749
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_send.h
@@ -0,0 +1,132 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_SEND_H_INCLUDED
+#define OFI_AM_SEND_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_rsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+
+
+static inline int MPIDI_NM_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_irsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ return MPIDIG_mpi_startall(count, requests);
+}
+
+static inline int MPIDI_NM_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_bsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_issend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ return MPIDIG_mpi_cancel_send(sreq);
+}
+
+#endif /* OFI_AM_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_spawn.h b/src/mpid/ch4/netmod/ofi/ofi_am_spawn.h
new file mode 100644
index 0000000..53744b5
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_spawn.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_SPAWN_H_INCLUDED
+#define OFI_AM_SPAWN_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_mpi_comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_close_port(const char *port_name)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* OFI_AM_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_am_win.h b/src/mpid/ch4/netmod/ofi/ofi_am_win.h
new file mode 100644
index 0000000..1135eba
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_am_win.h
@@ -0,0 +1,163 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_AM_WIN_H_INCLUDED
+#define OFI_AM_WIN_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ return MPIDI_CH4R_mpi_win_set_info(win, info);
+}
+
+
+static inline int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_start(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_complete(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_complete(win);
+}
+
+static inline int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_post(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_wait(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_wait(win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ return MPIDI_CH4R_mpi_win_test(win, flag);
+}
+
+static inline int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock(lock_type, rank, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_unlock(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ return MPIDI_CH4R_mpi_win_get_info(win, info_p_p);
+}
+
+
+static inline int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_free(win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_fence(assert, win);
+}
+
+static inline int MPIDI_NM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_create(base, length, disp_unit, info, comm_ptr, win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ return MPIDI_CH4R_mpi_win_attach(win, base, size);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_allocate_shared(size, disp_unit, info_ptr, comm_ptr, base_ptr,
+ win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ return MPIDI_CH4R_mpi_win_detach(win, base);
+}
+
+static inline int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ return MPIDI_CH4R_mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win)
+{
+ return MPIDI_CH4R_mpi_win_allocate(size, disp_unit, info, comm, baseptr, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_local_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_unlock_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ return MPIDI_CH4R_mpi_win_create_dynamic(info, comm, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_local(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_sync(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_sync(win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock_all(assert, win);
+}
+
+
+#endif /* OFI_AM_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_coll.h b/src/mpid/ch4/netmod/ofi/ofi_coll.h
new file mode 100644
index 0000000..217876d
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_coll.h
@@ -0,0 +1,875 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_COLL_H_INCLUDED
+#define OFI_COLL_H_INCLUDED
+
+#include "ofi_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+
+ mpi_errno = MPIR_Barrier(comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BCAST);
+
+ mpi_errno = MPIR_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+
+ mpi_errno = MPIR_Allreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+
+ mpi_errno = MPIR_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+
+ mpi_errno = MPIR_Allgatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHER);
+
+ mpi_errno = MPIR_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+
+ mpi_errno = MPIR_Gatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+
+ mpi_errno = MPIR_Scatter(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+
+ mpi_errno = MPIR_Scatterv(sendbuf, sendcounts, displs,
+ sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+
+ mpi_errno = MPIR_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+
+ mpi_errno = MPIR_Alltoallv(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+
+ mpi_errno = MPIR_Alltoallw(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+
+ mpi_errno = MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+
+ mpi_errno = MPIR_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Reduce_scatter_block(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCAN);
+
+ mpi_errno = MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+
+ mpi_errno = MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+
+ mpi_errno =
+ MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+
+ mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibarrier(MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+
+ mpi_errno = MPIR_Ibarrier_impl(comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+
+ mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+
+ mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+
+ mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+
+ mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+
+ mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+
+ mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts,
+ rdispls, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+
+ mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+
+ mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+
+ mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+
+ mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+
+ mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+
+ mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+
+ mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+
+ mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+
+ mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ return mpi_errno;
+}
+
+#endif /* OFI_COLL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_comm.h b/src/mpid/ch4/netmod/ofi/ofi_comm.h
new file mode 100644
index 0000000..2a3bee9
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_comm.h
@@ -0,0 +1,65 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_COMM_H_INCLUDED
+#define OFI_COMM_H_INCLUDED
+
+#include "ofi_impl.h"
+#include "mpl_utlist.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+
+ MPIDI_OFI_map_create(&MPIDI_OFI_COMM(comm).huge_send_counters);
+ MPIDI_OFI_map_create(&MPIDI_OFI_COMM(comm).huge_recv_counters);
+ MPIDI_OFI_index_allocator_create(&MPIDI_OFI_COMM(comm).win_id_allocator, 0);
+ MPIDI_OFI_index_allocator_create(&MPIDI_OFI_COMM(comm).rma_id_allocator, 1);
+
+ mpi_errno = MPIDI_CH4U_init_comm(comm);
+
+ /* Do not handle intercomms */
+ if (comm->comm_kind == MPIR_COMM_KIND__INTERCOMM)
+ goto fn_exit;
+
+ MPIR_Assert(comm->coll_fns != NULL);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+
+ mpi_errno = MPIDI_CH4U_destroy_comm(comm);
+ MPIDI_OFI_map_destroy(MPIDI_OFI_COMM(comm).huge_send_counters);
+ MPIDI_OFI_map_destroy(MPIDI_OFI_COMM(comm).huge_recv_counters);
+ MPIDI_OFI_index_allocator_destroy(MPIDI_OFI_COMM(comm).win_id_allocator);
+ MPIDI_OFI_index_allocator_destroy(MPIDI_OFI_COMM(comm).rma_id_allocator);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+ return mpi_errno;
+}
+
+
+#endif /* OFI_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_control.h b/src/mpid/ch4/netmod/ofi/ofi_control.h
new file mode 100644
index 0000000..06451d5
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_control.h
@@ -0,0 +1,72 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_CONTROL_H_INCLUDED
+#define OFI_CONTROL_H_INCLUDED
+
+#include "ofi_am_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_control_win
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_control_win(MPIDI_OFI_win_control_t * control,
+ int rank, MPIR_Win * win, int use_comm, int use_lock)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_CONTROL_WIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_CONTROL_WIN);
+
+ control->win_id = MPIDI_OFI_WIN(win).win_id;
+ control->origin_rank = win->comm_ptr->rank;
+
+ mpi_errno = MPIDI_OFI_do_inject(rank,
+ win->comm_ptr,
+ MPIDI_OFI_INTERNAL_HANDLER_CONTROL,
+ (void *) control,
+ sizeof(*control), NULL, FALSE, use_comm, use_lock);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_CONTROL_WIN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_control_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_control_send(MPIDI_OFI_send_control_t * control,
+ char *send_buf,
+ size_t msgsize,
+ int rank,
+ MPIR_Comm * comm_ptr,
+ MPIR_Request * ackreq, int need_lock)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_CONTROL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_CONTROL_SEND);
+
+ control->origin_rank = comm_ptr->rank;
+ control->send_buf = (uintptr_t) send_buf;
+ control->msgsize = msgsize;
+ control->comm_id = comm_ptr->context_id;
+ control->endpoint_id = MPIDI_OFI_COMM_TO_EP(comm_ptr, comm_ptr->rank);
+ control->ackreq = ackreq;
+
+ mpi_errno = MPIDI_OFI_do_inject(rank, comm_ptr,
+ MPIDI_OFI_INTERNAL_HANDLER_CONTROL,
+ (void *) control,
+ sizeof(*control), NULL, FALSE, TRUE, need_lock);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_CONTROL_SEND);
+ return mpi_errno;
+}
+
+
+#endif /* OFI_CONTROL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_datatype.h b/src/mpid/ch4/netmod/ofi/ofi_datatype.h
new file mode 100644
index 0000000..0cf3e99
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_datatype.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_DATATYPE_H_INCLUDED
+#define OFI_DATATYPE_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_mpi_type_free_hook(MPIR_Datatype * datatype_p)
+{
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_type_create_hook(MPIR_Datatype * datatype_p)
+{
+ return 0;
+}
+
+#endif /* OFI_DATATYPE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_events.h b/src/mpid/ch4/netmod/ofi/ofi_events.h
new file mode 100644
index 0000000..ae526e8
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_events.h
@@ -0,0 +1,819 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_EVENTS_H_INCLUDED
+#define OFI_EVENTS_H_INCLUDED
+
+#include "ofi_impl.h"
+#include "ofi_am_impl.h"
+#include "ofi_am_events.h"
+#include "ofi_control.h"
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_get_huge_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * req);
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_cqe_get_source(struct fi_cq_tagged_entry *wc, int do_data)
+{
+ if (do_data)
+ return wc->data;
+ else
+ return MPIDI_OFI_init_get_source(wc->tag);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_peek_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_peek_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ size_t count;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_NETMOD_PEEK_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_NETMOD_PEEK_EVENT);
+ MPIDI_OFI_REQUEST(rreq, util_id) = MPIDI_OFI_PEEK_FOUND;
+ rreq->status.MPI_SOURCE = MPIDI_OFI_cqe_get_source(wc, MPIDI_OFI_ENABLE_DATA);
+ rreq->status.MPI_TAG = MPIDI_OFI_init_get_tag(wc->tag);
+ count = wc->len;
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ MPIR_STATUS_SET_COUNT(rreq->status, count);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_NETMOD_PEEK_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_peek_empty_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_peek_empty_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_NETMOD_PEEK_EMPTY_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_NETMOD_PEEK_EMPTY_EVENT);
+ MPIDI_OFI_dynamic_process_request_t *ctrl;
+
+ switch (MPIDI_OFI_REQUEST(rreq, event_id)) {
+ case MPIDI_OFI_EVENT_PEEK:
+ MPIDI_OFI_REQUEST(rreq, util_id) = MPIDI_OFI_PEEK_NOT_FOUND;
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ break;
+
+ case MPIDI_OFI_EVENT_ACCEPT_PROBE:
+ ctrl = (MPIDI_OFI_dynamic_process_request_t *) rreq;
+ ctrl->done = MPIDI_OFI_PEEK_NOT_FOUND;
+ break;
+
+ default:
+ MPIR_Assert(0);
+ break;
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_NETMOD_PEEK_EMPTY_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_recv_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_recv_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPI_Aint last;
+ size_t count;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_RECV_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_RECV_EVENT);
+
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ rreq->status.MPI_SOURCE = MPIDI_OFI_cqe_get_source(wc, MPIDI_OFI_ENABLE_DATA);
+ rreq->status.MPI_TAG = MPIDI_OFI_init_get_tag(wc->tag);
+ count = wc->len;
+ MPIR_STATUS_SET_COUNT(rreq->status, count);
+
+#ifdef MPIDI_BUILD_CH4_SHM
+
+ if (MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq)) {
+ int continue_matching = 1;
+
+ MPIDI_CH4R_anysource_matched(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq), MPIDI_CH4R_NETMOD,
+ &continue_matching);
+
+ /* It is always possible to cancel a request on shm side w/o an aux thread */
+
+ /* Decouple requests */
+ if (unlikely(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq))) {
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq)) = NULL;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq) = NULL;
+ }
+
+ if (!continue_matching)
+ goto fn_exit;
+ }
+
+#endif
+
+ if (MPIDI_OFI_REQUEST(rreq, noncontig)) {
+ last = count;
+ MPID_Segment_unpack(&MPIDI_OFI_REQUEST(rreq, noncontig->segment), 0, &last,
+ MPIDI_OFI_REQUEST(rreq, noncontig->pack_buffer));
+ MPL_free(MPIDI_OFI_REQUEST(rreq, noncontig));
+ if (last != (MPI_Aint) count) {
+ rreq->status.MPI_ERROR =
+ MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ __FUNCTION__, __LINE__, MPI_ERR_TYPE, "**dtypemismatch", 0);
+ }
+ }
+
+ dtype_release_if_not_builtin(MPIDI_OFI_REQUEST(rreq, datatype));
+
+ /* If syncronous, ack and complete when the ack is done */
+ if (unlikely(MPIDI_OFI_is_tag_sync(wc->tag))) {
+ uint64_t ss_bits = MPIDI_OFI_init_sendtag(MPIDI_OFI_REQUEST(rreq, util_id),
+ MPIDI_OFI_REQUEST(rreq, util_comm->rank),
+ rreq->status.MPI_TAG,
+ MPIDI_OFI_SYNC_SEND_ACK, MPIDI_OFI_ENABLE_DATA);
+ MPIR_Comm *c = MPIDI_OFI_REQUEST(rreq, util_comm);
+ int r = rreq->status.MPI_SOURCE;
+ mpi_errno = MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0), NULL, 0, NULL,
+ MPIDI_OFI_REQUEST(rreq, util_comm->rank),
+ MPIDI_OFI_comm_to_phys(c, r, MPIDI_OFI_API_TAG),
+ ss_bits, NULL, MPIDI_OFI_DO_INJECT,
+ MPIDI_OFI_ENABLE_DATA, MPIDI_OFI_CALL_NO_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ MPIDI_CH4U_request_complete(rreq);
+
+ /* Polling loop will check for truncation */
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_RECV_EVENT);
+ return mpi_errno;
+ fn_fail:
+ rreq->status.MPI_ERROR = mpi_errno;
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_recv_huge_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_recv_huge_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ MPIDI_OFI_huge_recv_t *recv;
+ MPIR_Comm *comm_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_RECV_HUGE_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_RECV_HUGE_EVENT);
+
+ /* Look up the receive sequence number and chunk queue */
+ comm_ptr = MPIDI_OFI_REQUEST(rreq, util_comm);
+ recv =
+ (MPIDI_OFI_huge_recv_t *) MPIDI_OFI_map_lookup(MPIDI_OFI_COMM(comm_ptr).huge_recv_counters,
+ MPIDI_OFI_cqe_get_source(wc,
+ MPIDI_OFI_ENABLE_DATA));
+ if (recv == MPIDI_OFI_MAP_NOT_FOUND) {
+ recv = (MPIDI_OFI_huge_recv_t *) MPL_calloc(sizeof(*recv), 1);
+ MPIDI_OFI_map_set(MPIDI_OFI_COMM(comm_ptr).huge_recv_counters,
+ MPIDI_OFI_cqe_get_source(wc, MPIDI_OFI_ENABLE_DATA), recv);
+ }
+
+ recv->event_id = MPIDI_OFI_EVENT_GET_HUGE;
+ recv->localreq = rreq;
+ recv->done_fn = MPIDI_OFI_recv_event;
+ recv->wc = *wc;
+ MPIDI_OFI_get_huge_event(NULL, (MPIR_Request *) recv);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_RECV_HUGE_EVENT);
+ return MPI_SUCCESS;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_send_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_send_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * sreq)
+{
+ int c;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_SEND_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_SEND_EVENT);
+
+ MPIR_cc_decr(sreq->cc_ptr, &c);
+
+ if (c == 0) {
+ if (MPIDI_OFI_REQUEST(sreq, noncontig))
+ MPL_free(MPIDI_OFI_REQUEST(sreq, noncontig));
+
+ dtype_release_if_not_builtin(MPIDI_OFI_REQUEST(sreq, datatype));
+ MPIR_Request_free(sreq);
+ } /* c != 0, ssend */
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_SEND_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_send_huge_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_send_huge_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int c;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_SEND_EVENT_HUGE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_SEND_EVENT_HUGE);
+
+ MPIR_cc_decr(sreq->cc_ptr, &c);
+
+ if (c == 0) {
+ MPIR_Comm *comm;
+ void *ptr;
+ MPIDI_OFI_huge_counter_t *cntr;
+ comm = MPIDI_OFI_REQUEST(sreq, util_comm);
+ ptr =
+ MPIDI_OFI_map_lookup(MPIDI_OFI_COMM(comm).huge_send_counters,
+ MPIDI_OFI_REQUEST(sreq, util_id));
+ MPIR_Assert(ptr != MPIDI_OFI_MAP_NOT_FOUND);
+ cntr = (MPIDI_OFI_huge_counter_t *) ptr;
+ cntr->outstanding--;
+ if (cntr->outstanding == 0) {
+ MPIDI_OFI_send_control_t ctrl;
+ uint64_t key;
+ int key_back;
+ MPIDI_OFI_map_erase(MPIDI_OFI_COMM(comm).huge_send_counters,
+ MPIDI_OFI_REQUEST(sreq, util_id));
+ key = fi_mr_key(cntr->mr);
+ key_back = (key >> MPIDI_Global.huge_rma_shift);
+ MPIDI_OFI_index_allocator_free(MPIDI_OFI_COMM(comm).rma_id_allocator, key_back);
+ MPIDI_OFI_CALL_NOLOCK(fi_close(&cntr->mr->fid), mr_unreg);
+ MPL_free(ptr);
+ ctrl.type = MPIDI_OFI_CTRL_HUGE_CLEANUP;
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_do_control_send
+ (&ctrl, NULL, 0, MPIDI_OFI_REQUEST(sreq, util_id), comm, NULL,
+ FALSE /* no lock */));
+ }
+
+ if (MPIDI_OFI_REQUEST(sreq, noncontig))
+ MPL_free(MPIDI_OFI_REQUEST(sreq, noncontig));
+
+ dtype_release_if_not_builtin(MPIDI_OFI_REQUEST(sreq, datatype));
+ MPIR_Request_free(sreq);
+ } /* c != 0, ssend */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_SEND_EVENT_HUGE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_ssend_ack_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_ssend_ack_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * sreq)
+{
+ int mpi_errno;
+ MPIDI_OFI_ssendack_request_t *req = (MPIDI_OFI_ssendack_request_t *) sreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_SSEND_ACK_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_SSEND_ACK_EVENT);
+ mpi_errno = MPIDI_OFI_send_event(NULL, req->signal_req);
+ MPIDI_OFI_ssendack_request_t_tls_free(req);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_SSEND_ACK_EVENT);
+ return mpi_errno;
+}
+
+MPL_STATIC_INLINE_PREFIX uintptr_t MPIDI_OFI_recv_rbase(MPIDI_OFI_huge_recv_t * recv)
+{
+#ifdef USE_OFI_MR_SCALABLE
+ return 0;
+#else
+ return recv->remote_info.send_buf;
+#endif
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_get_huge_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_get_huge_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_huge_recv_t *recv = (MPIDI_OFI_huge_recv_t *) req;
+ uint64_t remote_key;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_GETHUGE_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_GETHUGE_EVENT);
+
+ if (recv->localreq && recv->cur_offset != 0) {
+ size_t bytesSent = recv->cur_offset - MPIDI_Global.max_send;
+ size_t bytesLeft = recv->remote_info.msgsize - bytesSent - MPIDI_Global.max_send;
+ size_t bytesToGet =
+ (bytesLeft <= MPIDI_Global.max_send) ? bytesLeft : MPIDI_Global.max_send;
+
+ if (bytesToGet == 0ULL) {
+ MPIDI_OFI_send_control_t ctrl;
+ recv->wc.len = recv->cur_offset;
+ recv->done_fn(&recv->wc, recv->localreq);
+ ctrl.type = MPIDI_OFI_CTRL_HUGEACK;
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_do_control_send
+ (&ctrl, NULL, 0, recv->remote_info.origin_rank, recv->comm_ptr,
+ recv->remote_info.ackreq, FALSE));
+ /* "recv" and maps will be freed in MPIDI_OFI_get_huge_cleanup */
+ goto fn_exit;
+ }
+
+ if (MPIDI_OFI_ENABLE_MR_SCALABLE)
+ remote_key = recv->remote_info.rma_key << MPIDI_Global.huge_rma_shift;
+ else
+ remote_key = recv->remote_info.rma_key;
+
+ MPIDI_OFI_cntr_incr();
+ MPIDI_OFI_CALL_RETRY(fi_read(MPIDI_OFI_EP_TX_RMA(0), /* endpoint */
+ (void *) ((uintptr_t) recv->wc.buf + recv->cur_offset), /* local buffer */
+ bytesToGet, /* bytes */
+ NULL, /* descriptor */
+ MPIDI_OFI_comm_to_phys(recv->comm_ptr, recv->remote_info.origin_rank, MPIDI_OFI_API_MSG), /* Destination */
+ MPIDI_OFI_recv_rbase(recv) + recv->cur_offset, /* remote maddr */
+ remote_key, /* Key */
+ (void *) &recv->context), rdma_readfrom, /* Context */
+ MPIDI_OFI_CALL_NO_LOCK);
+ recv->cur_offset += bytesToGet;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_GETHUGE_EVENT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_chunk_done_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_chunk_done_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * req)
+{
+ int c;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_CHUNK_DONE_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_CHUNK_DONE_EVENT);
+
+ MPIDI_OFI_chunk_request *creq = (MPIDI_OFI_chunk_request *) req;
+ MPIR_cc_decr(creq->parent->cc_ptr, &c);
+
+ if (c == 0)
+ MPIR_Request_free(creq->parent);
+
+ MPL_free(creq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_CHUNK_DONE_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_inject_emu_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_inject_emu_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * req)
+{
+ int incomplete;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_INJECT_EMU_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_INJECT_EMU_EVENT);
+
+ MPIR_cc_decr(req->cc_ptr, &incomplete);
+
+ if (!incomplete) {
+ MPL_free(MPIDI_OFI_REQUEST(req, util.inject_buf));
+ MPIR_Request_free(req);
+ OPA_decr_int(&MPIDI_Global.am_inflight_inject_emus);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_INJECT_EMU_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_rma_done_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_rma_done_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * in_req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CH4_OFI_RMA_DONE_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CH4_OFI_RMA_DONE_EVENT);
+
+ MPIDI_OFI_win_request_t *req = (MPIDI_OFI_win_request_t *) in_req;
+ MPIDI_OFI_win_request_complete(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CH4_OFI_RMA_DONE_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_accept_probe_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_accept_probe_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CH4_OFI_ACCEPT_PROBE_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CH4_OFI_ACCEPT_PROBE_EVENT);
+ MPIDI_OFI_dynamic_process_request_t *ctrl = (MPIDI_OFI_dynamic_process_request_t *) rreq;
+ ctrl->source = MPIDI_OFI_cqe_get_source(wc, MPIDI_OFI_ENABLE_DATA);
+ ctrl->tag = MPIDI_OFI_init_get_tag(wc->tag);
+ ctrl->msglen = wc->len;
+ ctrl->done = MPIDI_OFI_PEEK_FOUND;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CH4_OFI_ACCEPT_PROBE_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_dynproc_done_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_dynproc_done_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CH4_OFI_DYNPROC_DONE_EVENT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CH4_OFI_DYNPROC_DONE_EVENT);
+ MPIDI_OFI_dynamic_process_request_t *ctrl = (MPIDI_OFI_dynamic_process_request_t *) rreq;
+ ctrl->done++;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CH4_OFI_DYNPROC_DONE_EVENT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_isend_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_am_isend_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_am_header_t *msg_hdr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_HANDLE_SEND_COMPLETION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_HANDLE_SEND_COMPLETION);
+
+ msg_hdr = &MPIDI_OFI_AMREQUEST_HDR(sreq, msg_hdr);
+ MPIDI_Request_complete(sreq); /* FIXME: Should not call MPIDI in NM ? */
+
+ switch (msg_hdr->am_type) {
+ case MPIDI_AMTYPE_LMT_ACK:
+ case MPIDI_AMTYPE_LMT_REQ:
+ goto fn_exit;
+
+ default:
+ break;
+ }
+
+ if (MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer)) {
+ MPL_free(MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer));
+ MPIDI_OFI_AMREQUEST_HDR(sreq, pack_buffer) = NULL;
+ }
+
+ mpi_errno = MPIDIG_global.origin_cbs[msg_hdr->handler_id] (sreq);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_HANDLE_SEND_COMPLETION);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_recv_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_am_recv_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_am_header_t *am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_HANDLE_RECV_COMPLETION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_HANDLE_RECV_COMPLETION);
+
+ am_hdr = (MPIDI_OFI_am_header_t *) wc->buf;
+
+ switch (am_hdr->am_type) {
+ case MPIDI_AMTYPE_SHORT_HDR:
+ mpi_errno = MPIDI_OFI_handle_short_am_hdr(am_hdr, am_hdr->payload);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ break;
+
+ case MPIDI_AMTYPE_SHORT:
+ mpi_errno = MPIDI_OFI_handle_short_am(am_hdr);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ break;
+
+ case MPIDI_AMTYPE_LMT_REQ:
+ mpi_errno = MPIDI_OFI_handle_long_am(am_hdr);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ break;
+
+ case MPIDI_AMTYPE_LMT_ACK:
+ mpi_errno = MPIDI_OFI_handle_lmt_ack(am_hdr);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ break;
+
+ default:
+ MPIR_Assert(0);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_HANDLE_RECV_COMPLETION);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_read_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_am_read_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * dont_use_me)
+{
+ int mpi_errno = MPI_SUCCESS;
+ void *netmod_context = NULL;
+ MPIR_Request *rreq;
+ MPIDI_OFI_am_request_t *ofi_req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_HANDLE_READ_COMPLETION);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_HANDLE_READ_COMPLETION);
+
+ ofi_req = container_of(wc->op_context, MPIDI_OFI_am_request_t, context);
+ ofi_req->req_hdr->lmt_cntr--;
+
+ if (ofi_req->req_hdr->lmt_cntr)
+ goto fn_exit;
+
+ rreq = (MPIR_Request *) ofi_req->req_hdr->rreq_ptr;
+ mpi_errno = MPIDI_OFI_dispatch_ack(MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_info).src_rank,
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_info).context_id,
+ MPIDI_OFI_AMREQUEST_HDR(rreq, lmt_info).sreq_ptr,
+ MPIDI_AMTYPE_LMT_ACK, netmod_context);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_Request_complete(rreq); /* FIXME: Should not call MPIDI in NM ? */
+ ofi_req->req_hdr->target_cmpl_cb(rreq);
+ fn_exit:
+ MPIDI_CH4R_release_buf((void *) ofi_req);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_HANDLE_READ_COMPLETION);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_am_repost_event
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_am_repost_event(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_REPOST_BUFFER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_REPOST_BUFFER);
+
+ mpi_errno = MPIDI_OFI_repost_buffer(wc->op_context, rreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_REPOST_BUFFER);
+ return mpi_errno;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_dispatch_function(struct fi_cq_tagged_entry *wc,
+ MPIR_Request * req, int buffered)
+{
+ int mpi_errno;
+
+ if (likely(MPIDI_OFI_REQUEST(req, event_id) == MPIDI_OFI_EVENT_SEND)) {
+ mpi_errno = MPIDI_OFI_send_event(wc, req);
+ goto fn_exit;
+ }
+ else if (likely(MPIDI_OFI_REQUEST(req, event_id) == MPIDI_OFI_EVENT_RECV)) {
+ mpi_errno = MPIDI_OFI_recv_event(wc, req);
+ goto fn_exit;
+ }
+ else if (likely(MPIDI_OFI_REQUEST(req, event_id) == MPIDI_OFI_EVENT_RMA_DONE)) {
+ mpi_errno = MPIDI_OFI_rma_done_event(wc, req);
+ goto fn_exit;
+ }
+ else if (likely(MPIDI_OFI_REQUEST(req, event_id) == MPIDI_OFI_EVENT_AM_SEND)) {
+ mpi_errno = MPIDI_OFI_am_isend_event(wc, req);
+ goto fn_exit;
+ }
+ else if (likely(MPIDI_OFI_REQUEST(req, event_id) == MPIDI_OFI_EVENT_AM_RECV)) {
+ mpi_errno = MPIDI_OFI_am_recv_event(wc, req);
+
+ if (unlikely((wc->flags & FI_MULTI_RECV) && !buffered))
+ MPIDI_OFI_am_repost_event(wc, req);
+
+ goto fn_exit;
+ }
+ else if (likely(MPIDI_OFI_REQUEST(req, event_id) == MPIDI_OFI_EVENT_AM_READ)) {
+ mpi_errno = MPIDI_OFI_am_read_event(wc, req);
+ goto fn_exit;
+ }
+ else if (unlikely(1)) {
+ switch (MPIDI_OFI_REQUEST(req, event_id)) {
+ case MPIDI_OFI_EVENT_AM_MULTI:
+ mpi_errno = MPIDI_OFI_am_repost_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_PEEK:
+ mpi_errno = MPIDI_OFI_peek_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_RECV_HUGE:
+ mpi_errno = MPIDI_OFI_recv_huge_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_SEND_HUGE:
+ mpi_errno = MPIDI_OFI_send_huge_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_SSEND_ACK:
+ mpi_errno = MPIDI_OFI_ssend_ack_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_GET_HUGE:
+ mpi_errno = MPIDI_OFI_get_huge_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_CHUNK_DONE:
+ mpi_errno = MPIDI_OFI_chunk_done_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_INJECT_EMU:
+ mpi_errno = MPIDI_OFI_inject_emu_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_DYNPROC_DONE:
+ mpi_errno = MPIDI_OFI_dynproc_done_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_ACCEPT_PROBE:
+ mpi_errno = MPIDI_OFI_accept_probe_event(wc, req);
+ break;
+
+ case MPIDI_OFI_EVENT_ABORT:
+ default:
+ mpi_errno = MPI_SUCCESS;
+ MPIR_Assert(0);
+ break;
+ }
+ }
+
+ fn_exit:
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_get_buffered
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_get_buffered(struct fi_cq_tagged_entry *wc, ssize_t num)
+{
+ int rc = 0;
+
+ if ((MPIDI_Global.cq_buff_head != MPIDI_Global.cq_buff_tail) ||
+ !slist_empty(&MPIDI_Global.cq_buff_list)) {
+ if (MPIDI_Global.cq_buff_head != MPIDI_Global.cq_buff_tail) {
+ wc[0] = MPIDI_Global.cq_buffered[MPIDI_Global.cq_buff_tail].cq_entry;
+ MPIDI_Global.cq_buff_tail = (MPIDI_Global.cq_buff_tail + 1) % MPIDI_OFI_NUM_CQ_BUFFERED;
+ }
+ else {
+ MPIDI_OFI_cq_list_t *MPIDI_OFI_cq_list_entry;
+ struct slist_entry *entry = slist_remove_head(&MPIDI_Global.cq_buff_list);
+ MPIDI_OFI_cq_list_entry = container_of(entry, MPIDI_OFI_cq_list_t, entry);
+ wc[0] = MPIDI_OFI_cq_list_entry->cq_entry;
+ MPL_free((void *) MPIDI_OFI_cq_list_entry);
+ }
+
+ rc = 1;
+ }
+
+ return rc;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_cq_entries
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_handle_cq_entries(struct fi_cq_tagged_entry *wc,
+ ssize_t num, int buffered)
+{
+ int i, mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_HANDLE_CQ_ENTRIES);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_HANDLE_CQ_ENTRIES);
+
+ for (i = 0; i < num; i++) {
+ req = MPIDI_OFI_context_to_request(wc[i].op_context);
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dispatch_function(&wc[i], req, buffered));
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_HANDLE_CQ_ENTRIES);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_cq_error
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_handle_cq_error(ssize_t ret)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct fi_cq_err_entry e;
+ MPIR_Request *req;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_HANDLE_CQ_ERROR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_HANDLE_CQ_ERROR);
+
+ switch (ret) {
+ case -FI_EAVAIL:
+ fi_cq_readerr(MPIDI_Global.p2p_cq, &e, 0);
+
+ switch (e.err) {
+ case FI_ETRUNC:
+ req = MPIDI_OFI_context_to_request(e.op_context);
+
+ switch (req->kind) {
+ case MPIR_REQUEST_KIND__SEND:
+ mpi_errno = MPIDI_OFI_dispatch_function(NULL, req, 0);
+ break;
+
+ case MPIR_REQUEST_KIND__RECV:
+ mpi_errno = MPIDI_OFI_dispatch_function((struct fi_cq_tagged_entry *) &e, req, 0);
+ req->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ break;
+
+ default:
+ MPIR_ERR_SETFATALANDJUMP4(mpi_errno, MPI_ERR_OTHER, "**ofid_poll",
+ "**ofid_poll %s %d %s %s", __SHORT_FILE__,
+ __LINE__, FCNAME, fi_strerror(e.err));
+ }
+
+ break;
+
+ case FI_ECANCELED:
+ req = MPIDI_OFI_context_to_request(e.op_context);
+ MPIR_STATUS_SET_CANCEL_BIT(req->status, TRUE);
+ break;
+
+ case FI_ENOMSG:
+ req = MPIDI_OFI_context_to_request(e.op_context);
+ MPIDI_OFI_peek_empty_event(NULL, req);
+ break;
+ }
+
+ break;
+
+ default:
+ MPIR_ERR_SETFATALANDJUMP4(mpi_errno, MPI_ERR_OTHER, "**ofid_poll",
+ "**ofid_poll %s %d %s %s", __SHORT_FILE__, __LINE__,
+ FCNAME, fi_strerror(errno));
+ break;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_HANDLE_CQ_ERROR);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* OFI_EVENTS_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_impl.h b/src/mpid/ch4/netmod/ofi/ofi_impl.h
new file mode 100644
index 0000000..b901729
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_impl.h
@@ -0,0 +1,439 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_IMPL_H_INCLUDED
+#define OFI_IMPL_H_INCLUDED
+
+#include <mpidimpl.h>
+#include "ofi_types.h"
+#include "mpidch4r.h"
+#include "mpidig.h"
+#include "ch4_impl.h"
+#include "ofi_iovec_util.h"
+
+#define MPIDI_OFI_DT(dt) ((dt)->dev.netmod.ofi)
+#define MPIDI_OFI_OP(op) ((op)->dev.netmod.ofi)
+#define MPIDI_OFI_COMM(comm) ((comm)->dev.ch4.netmod.ofi)
+#define MPIDI_OFI_COMM_TO_INDEX(comm,rank) \
+ MPIDIU_comm_rank_to_pid(comm, rank, NULL, NULL)
+#define MPIDI_OFI_COMM_TO_PHYS(comm,rank) \
+ MPIDI_OFI_AV(MPIDIU_comm_rank_to_av((comm), (rank))).dest
+#define MPIDI_OFI_TO_PHYS(avtid, lpid) \
+ MPIDI_OFI_AV(&MPIDIU_get_av((avtid), (lpid))).dest
+
+#define MPIDI_OFI_WIN(win) ((win)->dev.netmod.ofi)
+/*
+ * Helper routines and macros for request completion
+ */
+#define MPIDI_OFI_ssendack_request_t_tls_alloc(req) \
+ do { \
+ (req) = (MPIDI_OFI_ssendack_request_t*) \
+ MPIR_Request_create(MPIR_REQUEST_KIND__SEND); \
+ if (req == NULL) \
+ MPID_Abort(NULL, MPI_ERR_NO_SPACE, -1, \
+ "Cannot allocate Ssendack Request"); \
+ } while (0)
+
+#define MPIDI_OFI_ssendack_request_t_tls_free(req) \
+ MPIR_Handle_obj_free(&MPIR_Request_mem, (req))
+
+#define MPIDI_OFI_ssendack_request_t_alloc_and_init(req) \
+ do { \
+ MPIDI_OFI_ssendack_request_t_tls_alloc(req); \
+ MPIR_Assert(req != NULL); \
+ MPIR_Assert(HANDLE_GET_MPI_KIND(req->handle) \
+ == MPID_SSENDACK_REQUEST); \
+ } while (0)
+
+#define MPIDI_OFI_request_create_null_rreq(rreq_, mpi_errno_, FAIL_) \
+ do { \
+ (rreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__RECV); \
+ if ((rreq_) != NULL) { \
+ MPIR_cc_set(&(rreq_)->cc, 0); \
+ (rreq_)->kind = MPIR_REQUEST_KIND__RECV; \
+ MPIR_Status_set_procnull(&(rreq_)->status); \
+ } \
+ else { \
+ MPIR_ERR_SETANDJUMP(mpi_errno_,MPI_ERR_OTHER,"**nomemreq"); \
+ } \
+ } while (0)
+
+
+#define MPIDI_OFI_PROGRESS() \
+ do { \
+ mpi_errno = MPIDI_Progress_test(); \
+ if (mpi_errno!=MPI_SUCCESS) MPIR_ERR_POP(mpi_errno); \
+ } while (0)
+
+#define MPIDI_OFI_PROGRESS_NONINLINE() \
+ do { \
+ mpi_errno = MPIDI_OFI_progress_test_no_inline(); \
+ if (mpi_errno!=MPI_SUCCESS) MPIR_ERR_POP(mpi_errno); \
+ } while (0)
+
+#define MPIDI_OFI_PROGRESS_WHILE(cond) \
+ while (cond) MPIDI_OFI_PROGRESS()
+
+#define MPIDI_OFI_ERR MPIR_ERR_CHKANDJUMP4
+#define MPIDI_OFI_CALL(FUNC,STR) \
+ do { \
+ MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ ssize_t _ret = FUNC; \
+ MPID_THREAD_CS_EXIT(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ MPIDI_OFI_ERR(_ret<0, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ofid_"#STR, \
+ "**ofid_"#STR" %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ fi_strerror(-_ret)); \
+ } while (0)
+
+#define MPIDI_OFI_CALL_NOLOCK(FUNC,STR) \
+ do { \
+ ssize_t _ret = FUNC; \
+ MPIDI_OFI_ERR(_ret<0, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ofid_"#STR, \
+ "**ofid_"#STR" %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ fi_strerror(-_ret)); \
+ } while (0)
+
+#define MPIDI_OFI_CALL_LOCK 1
+#define MPIDI_OFI_CALL_NO_LOCK 0
+#define MPIDI_OFI_CALL_RETRY(FUNC,STR,LOCK) \
+ do { \
+ ssize_t _ret; \
+ do { \
+ if (LOCK == MPIDI_OFI_CALL_LOCK) \
+ MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ _ret = FUNC; \
+ if (LOCK == MPIDI_OFI_CALL_LOCK) \
+ MPID_THREAD_CS_EXIT(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ if (likely(_ret==0)) break; \
+ MPIDI_OFI_ERR(_ret!=-FI_EAGAIN, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ofid_"#STR, \
+ "**ofid_"#STR" %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ fi_strerror(-_ret)); \
+ if (LOCK == MPIDI_OFI_CALL_NO_LOCK) \
+ MPID_THREAD_CS_EXIT(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ MPIDI_OFI_PROGRESS_NONINLINE(); \
+ if (LOCK == MPIDI_OFI_CALL_NO_LOCK) \
+ MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ } while (_ret == -FI_EAGAIN); \
+ } while (0)
+
+#define MPIDI_OFI_CALL_RETRY2(FUNC1,FUNC2,STR) \
+ do { \
+ ssize_t _ret; \
+ MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ FUNC1; \
+ do { \
+ _ret = FUNC2; \
+ MPID_THREAD_CS_EXIT(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ if (likely(_ret==0)) break; \
+ MPIDI_OFI_ERR(_ret!=-FI_EAGAIN, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ofid_"#STR, \
+ "**ofid_"#STR" %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ fi_strerror(-_ret)); \
+ MPIDI_OFI_PROGRESS_NONINLINE(); \
+ MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ } while (_ret == -FI_EAGAIN); \
+ } while (0)
+
+#define MPIDI_OFI_CALL_RETURN(FUNC, _ret) \
+ do { \
+ MPID_THREAD_CS_ENTER(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ (_ret) = FUNC; \
+ MPID_THREAD_CS_EXIT(POBJ,MPIDI_OFI_THREAD_FI_MUTEX); \
+ } while (0)
+
+#define MPIDI_OFI_PMI_CALL_POP(FUNC,STR) \
+ do \
+ { \
+ pmi_errno = FUNC; \
+ MPIDI_OFI_ERR(pmi_errno!=PMI_SUCCESS, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ofid_"#STR, \
+ "**ofid_"#STR" %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ #STR); \
+ } while (0)
+
+#define MPIDI_OFI_MPI_CALL_POP(FUNC) \
+ do \
+ { \
+ mpi_errno = FUNC; \
+ if (unlikely(mpi_errno!=MPI_SUCCESS)) MPIR_ERR_POP(mpi_errno); \
+ } while (0)
+
+#define MPIDI_OFI_STR_CALL(FUNC,STR) \
+ do \
+ { \
+ str_errno = FUNC; \
+ MPIDI_OFI_ERR(str_errno!=MPL_STR_SUCCESS, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**"#STR, \
+ "**"#STR" %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ #STR); \
+ } while (0)
+
+#define MPIDI_OFI_REQUEST_CREATE(req, kind) \
+ do { \
+ (req) = MPIR_Request_create(kind); \
+ MPIR_Request_add_ref((req)); \
+ } while (0)
+
+#define MPIDI_OFI_SEND_REQUEST_CREATE_LW(req) \
+ do { \
+ (req) = MPIR_Request_create(MPIR_REQUEST_KIND__SEND); \
+ MPIR_cc_set(&(req)->cc, 0); \
+ } while (0)
+
+#define MPIDI_OFI_SSEND_ACKREQUEST_CREATE(req) \
+ do { \
+ MPIDI_OFI_ssendack_request_t_tls_alloc(req); \
+ } while (0)
+
+#define WINFO(w,rank) MPIDI_CH4U_WINFO(w,rank)
+
+MPL_STATIC_INLINE_PREFIX uintptr_t MPIDI_OFI_winfo_base(MPIR_Win * w, int rank)
+{
+#if MPIDI_OFI_ENABLE_MR_SCALABLE
+ return 0;
+#else
+ return MPIDI_OFI_WIN(w).winfo[rank].base;
+#endif
+}
+
+MPL_STATIC_INLINE_PREFIX uint64_t MPIDI_OFI_winfo_mr_key(MPIR_Win * w, int rank)
+{
+#if MPIDI_OFI_ENABLE_MR_SCALABLE
+ return MPIDI_OFI_WIN(w).mr_key;
+#else
+ return MPIDI_OFI_WIN(w).winfo[rank].mr_key;
+#endif
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_OFI_win_cntr_incr(MPIR_Win * win)
+{
+ (*MPIDI_OFI_WIN(win).issued_cntr)++;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_OFI_cntr_incr()
+{
+ MPIDI_Global.rma_issued_cntr++;
+}
+
+/* Externs: see util.c for definition */
+int MPIDI_OFI_handle_cq_error_util(ssize_t ret);
+int MPIDI_OFI_progress_test_no_inline(void);
+int MPIDI_OFI_control_handler(int handler_id, void *am_hdr,
+ void **data, size_t * data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb, MPIR_Request ** req);
+void MPIDI_OFI_map_create(void **map);
+void MPIDI_OFI_map_destroy(void *map);
+void MPIDI_OFI_map_set(void *_map, uint64_t id, void *val);
+void MPIDI_OFI_map_erase(void *_map, uint64_t id);
+void *MPIDI_OFI_map_lookup(void *_map, uint64_t id);
+int MPIDI_OFI_control_dispatch(void *buf);
+void MPIDI_OFI_index_datatypes(void);
+void MPIDI_OFI_index_allocator_create(void **_indexmap, int start);
+int MPIDI_OFI_index_allocator_alloc(void *_indexmap);
+void MPIDI_OFI_index_allocator_free(void *_indexmap, int index);
+void MPIDI_OFI_index_allocator_destroy(void *_indexmap);
+
+/* Common Utility functions used by the
+ * C and C++ components
+ */
+MPL_STATIC_INLINE_PREFIX MPIDI_OFI_win_request_t *MPIDI_OFI_win_request_alloc_and_init(int extra)
+{
+ MPIDI_OFI_win_request_t *req;
+ req = (MPIDI_OFI_win_request_t *) MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ memset((char *) req + MPIDI_REQUEST_HDR_SIZE, 0,
+ sizeof(MPIDI_OFI_win_request_t) - MPIDI_REQUEST_HDR_SIZE);
+ req->noncontig =
+ (MPIDI_OFI_win_noncontig_t *) MPL_calloc(1, (extra) + sizeof(*(req->noncontig)));
+ return req;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_OFI_win_datatype_unmap(MPIDI_OFI_win_datatype_t * dt)
+{
+ if (dt && dt->map && (dt->map != &dt->__map))
+ MPL_free(dt->map);
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_OFI_win_request_complete(MPIDI_OFI_win_request_t * req)
+{
+ int count;
+ MPIR_Assert(HANDLE_GET_MPI_KIND(req->handle) == MPIR_REQUEST);
+ MPIR_Object_release_ref(req, &count);
+ MPIR_Assert(count >= 0);
+ if (count == 0) {
+ MPIDI_OFI_win_datatype_unmap(&req->noncontig->target_dt);
+ MPIDI_OFI_win_datatype_unmap(&req->noncontig->origin_dt);
+ MPIDI_OFI_win_datatype_unmap(&req->noncontig->result_dt);
+ MPL_free(req->noncontig);
+ MPIR_Handle_obj_free(&MPIR_Request_mem, (req));
+ }
+}
+
+MPL_STATIC_INLINE_PREFIX fi_addr_t MPIDI_OFI_comm_to_phys(MPIR_Comm * comm, int rank, int ep_family)
+{
+#ifdef MPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS
+ int ep_num = MPIDI_OFI_COMM_TO_EP(comm, rank);
+ int offset = MPIDI_Global.ctx[ep_num].ctx_offset;
+ int rx_idx = offset + ep_family;
+ return fi_rx_addr(MPIDI_OFI_COMM_TO_PHYS(comm, rank), rx_idx, MPIDI_OFI_MAX_ENDPOINTS_BITS);
+#else
+ return MPIDI_OFI_COMM_TO_PHYS(comm, rank);
+#endif
+}
+
+MPL_STATIC_INLINE_PREFIX fi_addr_t MPIDI_OFI_to_phys(int rank, int ep_family)
+{
+#ifdef MPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS
+ int ep_num = 0;
+ int offset = MPIDI_Global.ctx[ep_num].ctx_offset;
+ int rx_idx = offset + ep_family;
+ return fi_rx_addr(MPIDI_OFI_TO_PHYS(0, rank), rx_idx, MPIDI_OFI_MAX_ENDPOINTS_BITS);
+#else
+ return MPIDI_OFI_TO_PHYS(0, rank);
+#endif
+}
+
+MPL_STATIC_INLINE_PREFIX bool MPIDI_OFI_is_tag_sync(uint64_t match_bits)
+{
+ return (0 != (MPIDI_OFI_SYNC_SEND & match_bits));
+}
+
+MPL_STATIC_INLINE_PREFIX uint64_t MPIDI_OFI_init_sendtag(MPIR_Context_id_t contextid,
+ int source, int tag, uint64_t type,
+ int do_data)
+{
+ uint64_t match_bits;
+ match_bits = contextid;
+
+ if (!do_data) {
+ match_bits = (match_bits << MPIDI_OFI_SOURCE_SHIFT);
+ match_bits |= source;
+ }
+
+ match_bits = (match_bits << MPIDI_OFI_TAG_SHIFT);
+ match_bits |= (MPIDI_OFI_TAG_MASK & tag) | type;
+ return match_bits;
+}
+
+/* receive posting */
+MPL_STATIC_INLINE_PREFIX uint64_t MPIDI_OFI_init_recvtag(uint64_t * mask_bits,
+ MPIR_Context_id_t contextid,
+ int source, int tag, int do_data)
+{
+ uint64_t match_bits = 0;
+ *mask_bits = MPIDI_OFI_PROTOCOL_MASK;
+ match_bits = contextid;
+
+ if (!do_data) {
+ match_bits = (match_bits << MPIDI_OFI_SOURCE_SHIFT);
+
+ if (MPI_ANY_SOURCE == source) {
+ match_bits = (match_bits << MPIDI_OFI_TAG_SHIFT);
+ *mask_bits |= MPIDI_OFI_SOURCE_MASK;
+ }
+ else {
+ match_bits |= source;
+ match_bits = (match_bits << MPIDI_OFI_TAG_SHIFT);
+ }
+ }
+ else {
+ match_bits = (match_bits << MPIDI_OFI_TAG_SHIFT);
+ }
+
+ if (MPI_ANY_TAG == tag)
+ *mask_bits |= MPIDI_OFI_TAG_MASK;
+ else
+ match_bits |= (MPIDI_OFI_TAG_MASK & tag);
+
+ return match_bits;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_init_get_tag(uint64_t match_bits)
+{
+ return ((int) (match_bits & MPIDI_OFI_TAG_MASK));
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_init_get_source(uint64_t match_bits)
+{
+ return ((int) ((match_bits & MPIDI_OFI_SOURCE_MASK) >> MPIDI_OFI_TAG_SHIFT));
+}
+
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_OFI_context_to_request(void *context)
+{
+ char *base = (char *) context;
+ return (MPIR_Request *) container_of(base, MPIR_Request, dev.ch4.netmod);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_send_handler
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_send_handler(struct fid_ep *ep, const void *buf, size_t len,
+ void *desc, uint64_t dest, fi_addr_t dest_addr,
+ uint64_t tag, void *context, int is_inject,
+ int do_data, int do_lock)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ if (is_inject) {
+ if (do_data)
+ MPIDI_OFI_CALL_RETRY(fi_tinjectdata(ep, buf, len, dest, dest_addr, tag), tinjectdata,
+ do_lock);
+ else
+ MPIDI_OFI_CALL_RETRY(fi_tinject(ep, buf, len, dest_addr, tag), tinject, do_lock);
+ }
+ else {
+ if (do_data)
+ MPIDI_OFI_CALL_RETRY(fi_tsenddata(ep, buf, len, desc, dest, dest_addr, tag, context),
+ tsenddata, do_lock);
+ else
+ MPIDI_OFI_CALL_RETRY(fi_tsend(ep, buf, len, desc, dest_addr, tag, context), tsend,
+ do_lock);
+ }
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* OFI_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_init.h b/src/mpid/ch4/netmod/ofi/ofi_init.h
new file mode 100644
index 0000000..aea8bf6
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_init.h
@@ -0,0 +1,969 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_INIT_H_INCLUDED
+#define OFI_INIT_H_INCLUDED
+
+#include "ofi_impl.h"
+#include "mpir_cvars.h"
+#include "pmi.h"
+
+static inline int MPIDI_OFI_choose_provider(struct fi_info *prov, struct fi_info **prov_use);
+static inline int MPIDI_OFI_create_endpoint(struct fi_info *prov_use,
+ struct fid_domain *domain,
+ struct fid_cq *p2p_cq,
+ struct fid_cntr *rma_ctr,
+ struct fid_av *av,
+ struct fid_ep **ep, int index,
+ int do_tagged, int do_scalable_ep, int do_data);
+
+#define MPIDI_OFI_CHOOSE_PROVIDER(prov, prov_use,errstr) \
+ do { \
+ struct fi_info *p = prov; \
+ MPIR_ERR_CHKANDJUMP4(p==NULL, mpi_errno,MPI_ERR_OTHER,"**ofid_addrinfo", \
+ "**ofid_addrinfo %s %d %s %s",__SHORT_FILE__, \
+ __LINE__,FCNAME, errstr); \
+ MPIDI_OFI_choose_provider(prov,prov_use); \
+ } while (0);
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_init_generic
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_init_generic(int rank,
+ int size,
+ int appnum,
+ int *tag_ub,
+ MPIR_Comm * comm_world,
+ MPIR_Comm * comm_self,
+ int spawned,
+ int num_contexts,
+ void **netmod_contexts,
+ int do_av_table,
+ int do_scalable_ep,
+ int do_am,
+ int do_tagged,
+ int do_data, int do_stx_rma, int do_mr_scalable)
+{
+ int mpi_errno = MPI_SUCCESS, pmi_errno, i, fi_version;
+ int thr_err = 0, str_errno, maxlen;
+ char *table = NULL, *provname = NULL;
+ struct fi_info *hints, *prov, *prov_use;
+ struct fi_cq_attr cq_attr;
+ struct fi_cntr_attr cntr_attr;
+ fi_addr_t *mapped_table;
+ struct fi_av_attr av_attr;
+ char valS[MPIDI_KVSAPPSTRLEN], *val;
+ char keyS[MPIDI_KVSAPPSTRLEN];
+ size_t optlen;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_INIT);
+
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct MPIR_Request, dev.ch4.netmod) ==
+ offsetof(MPIDI_OFI_chunk_request, context));
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct MPIR_Request, dev.ch4.netmod) ==
+ offsetof(MPIDI_OFI_huge_recv_t, context));
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct MPIR_Request, dev.ch4.netmod) ==
+ offsetof(MPIDI_OFI_am_repost_request_t, context));
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct MPIR_Request, dev.ch4.netmod) ==
+ offsetof(MPIDI_OFI_ssendack_request_t, context));
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct MPIR_Request, dev.ch4.netmod) ==
+ offsetof(MPIDI_OFI_dynamic_process_request_t, context));
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct MPIR_Request, dev.ch4.netmod) ==
+ offsetof(MPIDI_OFI_win_request_t, context));
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct MPIR_Request, dev.ch4.am.netmod_am.ofi.context) ==
+ offsetof(struct MPIR_Request, dev.ch4.netmod.ofi.context));
+ CH4_COMPILE_TIME_ASSERT(sizeof(MPIDI_Devreq_t) >= sizeof(MPIDI_OFI_request_t));
+ CH4_COMPILE_TIME_ASSERT(sizeof(MPIR_Request) >= sizeof(MPIDI_OFI_win_request_t));
+ CH4_COMPILE_TIME_ASSERT(sizeof(MPIR_Context_id_t) * 8 >= MPIDI_OFI_AM_CONTEXT_ID_BITS);
+
+ *tag_ub = (1ULL << MPIDI_OFI_TAG_SHIFT) - 1;
+
+ MPID_Thread_mutex_create(&MPIDI_OFI_THREAD_UTIL_MUTEX, &thr_err);
+ MPID_Thread_mutex_create(&MPIDI_OFI_THREAD_PROGRESS_MUTEX, &thr_err);
+ MPID_Thread_mutex_create(&MPIDI_OFI_THREAD_FI_MUTEX, &thr_err);
+ MPID_Thread_mutex_create(&MPIDI_OFI_THREAD_SPAWN_MUTEX, &thr_err);
+
+ /* ------------------------------------------------------------------------ */
+ /* Hints to filter providers */
+ /* See man fi_getinfo for a list */
+ /* of all filters */
+ /* mode: Select capabilities that this netmod will support */
+ /* FI_CONTEXT: This netmod will pass in context into communication */
+ /* to optimize storage locality between MPI requests and OFI opaque */
+ /* data structures. */
+ /* FI_ASYNC_IOV: MPICH will provide storage for iovecs on */
+ /* communication calls, avoiding the OFI provider needing to require */
+ /* a copy. */
+ /* FI_LOCAL_MR unset: Note that we do not set FI_LOCAL_MR, */
+ /* which means this netmod does not support exchange of memory */
+ /* regions on communication calls. */
+ /* caps: Capabilities required from the provider. The bits specified */
+ /* with buffered receive, cancel, and remote complete implements */
+ /* MPI semantics. */
+ /* Tagged: used to support tag matching, 2-sided */
+ /* RMA|Atomics: supports MPI 1-sided */
+ /* MSG|MULTI_RECV: Supports synchronization protocol for 1-sided */
+ /* FI_DIRECTED_RECV: Support not putting the source in the match */
+ /* bits */
+ /* We expect to register all memory up front for use with this */
+ /* endpoint, so the netmod requires dynamic memory regions */
+ /* ------------------------------------------------------------------------ */
+
+ /* ------------------------------------------------------------------------ */
+ /* fi_allocinfo: allocate and zero an fi_info structure and all related */
+ /* substructures */
+ /* ------------------------------------------------------------------------ */
+ hints = fi_allocinfo();
+ MPIR_Assert(hints != NULL);
+
+ hints->mode = FI_CONTEXT | FI_ASYNC_IOV; /* We can handle contexts */
+ hints->caps = 0ULL; /* Tag matching interface */
+ hints->caps |= FI_RMA; /* RMA(read/write) */
+ hints->caps |= FI_ATOMICS; /* Atomics capabilities */
+
+ if (do_tagged) {
+ hints->caps |= FI_TAGGED; /* Tag matching interface */
+ }
+
+ if (do_am) {
+ hints->caps |= FI_MSG; /* Message Queue apis */
+ hints->caps |= FI_MULTI_RECV; /* Shared receive buffer */
+ }
+
+ if (do_data) {
+ hints->caps |= FI_DIRECTED_RECV; /* Match source address */
+ }
+
+ /* ------------------------------------------------------------------------ */
+ /* FI_VERSION provides binary backward and forward compatibility support */
+ /* Specify the version of OFI is coded to, the provider will select struct */
+ /* layouts that are compatible with this version. */
+ /* ------------------------------------------------------------------------ */
+ fi_version = FI_VERSION(MPIDI_OFI_MAJOR_VERSION, MPIDI_OFI_MINOR_VERSION);
+
+ /* ------------------------------------------------------------------------ */
+ /* Set object options to be filtered by getinfo */
+ /* domain_attr: domain attribute requirements */
+ /* op_flags: persistent flag settings for an endpoint */
+ /* endpoint type: see FI_EP_RDM */
+ /* Filters applied (for this netmod, we need providers that can support): */
+ /* THREAD_DOMAIN: Progress serialization is handled by netmod (locking) */
+ /* PROGRESS_AUTO: request providers that make progress without requiring */
+ /* the ADI to dedicate a thread to advance the state */
+ /* FI_DELIVERY_COMPLETE: RMA operations are visible in remote memory */
+ /* FI_COMPLETION: Selective completions of RMA ops */
+ /* FI_EP_RDM: Reliable datagram */
+ /* ------------------------------------------------------------------------ */
+ hints->addr_format = FI_FORMAT_UNSPEC;
+ hints->domain_attr->threading = FI_THREAD_DOMAIN;
+ hints->domain_attr->control_progress = FI_PROGRESS_MANUAL;
+ hints->domain_attr->data_progress = FI_PROGRESS_MANUAL;
+ hints->domain_attr->resource_mgmt = FI_RM_ENABLED;
+ hints->domain_attr->av_type = do_av_table ? FI_AV_TABLE : FI_AV_MAP;
+ hints->domain_attr->mr_mode = do_mr_scalable ? FI_MR_SCALABLE : FI_MR_BASIC;
+ hints->tx_attr->op_flags = FI_DELIVERY_COMPLETE | FI_COMPLETION;
+ hints->tx_attr->msg_order = FI_ORDER_SAS;
+ hints->tx_attr->comp_order = FI_ORDER_NONE;
+ hints->rx_attr->op_flags = FI_COMPLETION;
+ hints->rx_attr->total_buffered_recv = 0; /* FI_RM_ENABLED ensures buffering of unexpected messages */
+ hints->ep_attr->type = FI_EP_RDM;
+
+ /* ------------------------------------------------------------------------ */
+ /* fi_getinfo: returns information about fabric services for reaching a */
+ /* remote node or service. this does not necessarily allocate resources. */
+ /* Pass NULL for name/service because we want a list of providers supported */
+ /* ------------------------------------------------------------------------ */
+ provname = MPIR_CVAR_OFI_USE_PROVIDER ? (char *) MPL_strdup(MPIR_CVAR_OFI_USE_PROVIDER) : NULL;
+ hints->fabric_attr->prov_name = provname;
+ MPIDI_OFI_CALL(fi_getinfo(fi_version, NULL, NULL, 0ULL, hints, &prov), addrinfo);
+ MPIDI_OFI_CHOOSE_PROVIDER(prov, &prov_use, "No suitable provider provider found");
+
+ MPIDI_Global.prov_use = fi_dupinfo(prov_use);
+ MPIR_Assert(MPIDI_Global.prov_use);
+
+ /* ------------------------------------------------------------------------ */
+ /* Set global attributes attributes based on the provider choice */
+ /* ------------------------------------------------------------------------ */
+ MPIDI_Global.max_buffered_send = prov_use->tx_attr->inject_size;
+ MPIDI_Global.max_buffered_write = prov_use->tx_attr->inject_size;
+ MPIDI_Global.max_send = prov_use->ep_attr->max_msg_size;
+ MPIDI_Global.max_write = prov_use->ep_attr->max_msg_size;
+ MPIDI_Global.iov_limit = MIN(prov_use->tx_attr->iov_limit, MPIDI_OFI_IOV_MAX);
+ MPIDI_Global.rma_iov_limit = MIN(prov_use->tx_attr->rma_iov_limit, MPIDI_OFI_IOV_MAX);
+ MPIDI_Global.max_mr_key_size = prov_use->domain_attr->mr_key_size;
+
+ if (MPIDI_Global.max_mr_key_size >= 8) {
+ MPIDI_Global.max_windows_bits = MPIDI_OFI_MAX_WINDOWS_BITS_64;
+ MPIDI_Global.max_huge_rma_bits = MPIDI_OFI_MAX_HUGE_RMA_BITS_64;
+ MPIDI_Global.max_huge_rmas = MPIDI_OFI_MAX_HUGE_RMAS_64;
+ MPIDI_Global.huge_rma_shift = MPIDI_OFI_HUGE_RMA_SHIFT_64;
+ MPIDI_Global.context_shift = MPIDI_OFI_CONTEXT_SHIFT_64;
+ }
+ else if (MPIDI_Global.max_mr_key_size >= 4) {
+ MPIDI_Global.max_windows_bits = MPIDI_OFI_MAX_WINDOWS_BITS_32;
+ MPIDI_Global.max_huge_rma_bits = MPIDI_OFI_MAX_HUGE_RMA_BITS_32;
+ MPIDI_Global.max_huge_rmas = MPIDI_OFI_MAX_HUGE_RMAS_32;
+ MPIDI_Global.huge_rma_shift = MPIDI_OFI_HUGE_RMA_SHIFT_32;
+ MPIDI_Global.context_shift = MPIDI_OFI_CONTEXT_SHIFT_32;
+ }
+ else if (MPIDI_Global.max_mr_key_size >= 2) {
+ MPIDI_Global.max_windows_bits = MPIDI_OFI_MAX_WINDOWS_BITS_16;
+ MPIDI_Global.max_huge_rma_bits = MPIDI_OFI_MAX_HUGE_RMA_BITS_16;
+ MPIDI_Global.max_huge_rmas = MPIDI_OFI_MAX_HUGE_RMAS_16;
+ MPIDI_Global.huge_rma_shift = MPIDI_OFI_HUGE_RMA_SHIFT_16;
+ MPIDI_Global.context_shift = MPIDI_OFI_CONTEXT_SHIFT_16;
+ }
+ else {
+ MPIR_ERR_SETFATALANDJUMP4(mpi_errno,
+ MPI_ERR_OTHER,
+ "**ofid_rma_init",
+ "**ofid_rma_init %s %d %s %s",
+ __SHORT_FILE__, __LINE__, FCNAME, "Key space too small");
+ }
+
+ /* ------------------------------------------------------------------------ */
+ /* Open fabric */
+ /* The getinfo struct returns a fabric attribute struct that can be used to */
+ /* instantiate the virtual or physical network. This opens a "fabric */
+ /* provider". We choose the first available fabric, but getinfo */
+ /* returns a list. */
+ /* ------------------------------------------------------------------------ */
+ MPIDI_OFI_CALL(fi_fabric(prov_use->fabric_attr, &MPIDI_Global.fabric, NULL), fabric);
+
+ /* ------------------------------------------------------------------------ */
+ /* Create the access domain, which is the physical or virtual network or */
+ /* hardware port/collection of ports. Returns a domain object that can be */
+ /* used to create endpoints. */
+ /* ------------------------------------------------------------------------ */
+ MPIDI_OFI_CALL(fi_domain(MPIDI_Global.fabric, prov_use, &MPIDI_Global.domain, NULL),
+ opendomain);
+
+ /* ------------------------------------------------------------------------ */
+ /* Create the objects that will be bound to the endpoint. */
+ /* The objects include: */
+ /* * dynamic memory-spanning memory region */
+ /* * completion queues for events */
+ /* * counters for rma operations */
+ /* * address vector of other endpoint addresses */
+ /* ------------------------------------------------------------------------ */
+
+ /* ------------------------------------------------------------------------ */
+ /* Construct: Completion Queues */
+ /* ------------------------------------------------------------------------ */
+ memset(&cq_attr, 0, sizeof(cq_attr));
+ cq_attr.format = FI_CQ_FORMAT_TAGGED;
+ MPIDI_OFI_CALL(fi_cq_open(MPIDI_Global.domain, /* In: Domain Object */
+ &cq_attr, /* In: Configuration object */
+ &MPIDI_Global.p2p_cq, /* Out: CQ Object */
+ NULL), opencq); /* In: Context for cq events */
+
+ /* ------------------------------------------------------------------------ */
+ /* Construct: Counters */
+ /* ------------------------------------------------------------------------ */
+ memset(&cntr_attr, 0, sizeof(cntr_attr));
+ cntr_attr.events = FI_CNTR_EVENTS_COMP;
+ MPIDI_OFI_CALL(fi_cntr_open(MPIDI_Global.domain, /* In: Domain Object */
+ &cntr_attr, /* In: Configuration object */
+ &MPIDI_Global.rma_cmpl_cntr, /* Out: Counter Object */
+ NULL), openct); /* Context: counter events */
+
+ /* ------------------------------------------------------------------------ */
+ /* Construct: Address Vector */
+ /* ------------------------------------------------------------------------ */
+
+ memset(&av_attr, 0, sizeof(av_attr));
+
+
+ if (do_av_table) {
+ av_attr.type = FI_AV_TABLE;
+ }
+ else {
+ av_attr.type = FI_AV_MAP;
+ }
+
+ av_attr.rx_ctx_bits = MPIDI_OFI_MAX_ENDPOINTS_BITS;
+
+ /* ------------------------------------------------------------------------ */
+ /* Attempt to open a shared address vector read-only. The open will fail if */
+ /* the address vector does not exist, otherwise the location of the mapped */
+ /* fi_addr_t array will be returned in the 'map_addr' field of the address */
+ /* vector attribute structure. */
+ /* ------------------------------------------------------------------------ */
+ char av_name[128];
+ snprintf(av_name, 127, "FI_NAMED_AV_%d\n", appnum);
+ av_attr.name = av_name;
+ av_attr.flags = FI_READ;
+ av_attr.map_addr = 0;
+
+ unsigned do_av_insert = 1;
+ if (0 == fi_av_open(MPIDI_Global.domain, /* In: Domain Object */
+ &av_attr, /* In: Configuration object */
+ &MPIDI_Global.av, /* Out: AV Object */
+ NULL)) { /* Context: AV events */
+ do_av_insert = 0;
+
+ /* TODO - the copy from the pre-existing av map into the 'MPIDI_OFI_AV' */
+ /* is wasteful and should be changed so that the 'MPIDI_OFI_AV' object */
+ /* directly references the mapped fi_addr_t array instead */
+ mapped_table = (fi_addr_t *) av_attr.map_addr;
+ for (i = 0; i < size; i++) {
+ MPIDI_OFI_AV(&MPIDIU_get_av(0, i)).dest = mapped_table[i];
+ }
+ mapped_table = NULL;
+ }
+ else {
+ av_attr.name = NULL;
+ av_attr.flags = 0;
+ MPIDI_OFI_CALL(fi_av_open(MPIDI_Global.domain, /* In: Domain Object */
+ &av_attr, /* In: Configuration object */
+ &MPIDI_Global.av, /* Out: AV Object */
+ NULL), avopen); /* Context: AV events */
+ }
+
+ /* ------------------------------------------------------------------------ */
+ /* Construct: Shared TX Context for RMA */
+ /* ------------------------------------------------------------------------ */
+ if (do_stx_rma) {
+ int ret;
+ struct fi_tx_attr tx_attr;
+ memset(&tx_attr, 0, sizeof(tx_attr));
+ tx_attr.op_flags = FI_DELIVERY_COMPLETE | FI_COMPLETION;
+ MPIDI_OFI_CALL_RETURN(fi_stx_context(MPIDI_Global.domain,
+ &tx_attr,
+ &MPIDI_Global.stx_ctx, NULL /* context */), ret);
+ if (ret < 0) {
+ MPL_DBG_MSG(MPIDI_CH4_DBG_GENERAL, VERBOSE,
+ "Failed to create shared TX context for RMA, "
+ "falling back to global EP/counter scheme");
+ MPIDI_Global.stx_ctx = NULL;
+ }
+ }
+
+ /* ------------------------------------------------------------------------ */
+ /* Create a transport level communication endpoint. To use the endpoint, */
+ /* it must be bound to completion counters or event queues and enabled, */
+ /* and the resources consumed by it, such as address vectors, counters, */
+ /* completion queues, etc. */
+ /* ------------------------------------------------------------------------ */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_create_endpoint(prov_use,
+ MPIDI_Global.domain,
+ MPIDI_Global.p2p_cq,
+ MPIDI_Global.rma_cmpl_cntr,
+ MPIDI_Global.av,
+ &MPIDI_Global.ep, 0,
+ do_tagged, do_scalable_ep, do_data));
+
+ if (do_av_insert) {
+
+ /* ---------------------------------- */
+ /* Get our endpoint name and publish */
+ /* the socket to the KVS */
+ /* ---------------------------------- */
+ MPIDI_Global.addrnamelen = FI_NAME_MAX;
+ MPIDI_OFI_CALL(fi_getname((fid_t) MPIDI_Global.ep, MPIDI_Global.addrname,
+ &MPIDI_Global.addrnamelen), getname);
+ MPIR_Assert(MPIDI_Global.addrnamelen <= FI_NAME_MAX);
+
+ val = valS;
+ str_errno = MPL_STR_SUCCESS;
+ maxlen = MPIDI_KVSAPPSTRLEN;
+ memset(val, 0, maxlen);
+ MPIDI_OFI_STR_CALL(MPL_str_add_binary_arg
+ (&val, &maxlen, "OFI", (char *) &MPIDI_Global.addrname,
+ MPIDI_Global.addrnamelen), buscard_len);
+ MPIDI_OFI_PMI_CALL_POP(PMI_KVS_Get_my_name(MPIDI_Global.kvsname, MPIDI_KVSAPPSTRLEN), pmi);
+
+ val = valS;
+ sprintf(keyS, "OFI-%d", rank);
+ MPIDI_OFI_PMI_CALL_POP(PMI_KVS_Put(MPIDI_Global.kvsname, keyS, val), pmi);
+ MPIDI_OFI_PMI_CALL_POP(PMI_KVS_Commit(MPIDI_Global.kvsname), pmi);
+ MPIDI_OFI_PMI_CALL_POP(PMI_Barrier(), pmi);
+
+ /* -------------------------------- */
+ /* Create our address table from */
+ /* encoded KVS values */
+ /* -------------------------------- */
+ table = (char *) MPL_malloc(size * MPIDI_Global.addrnamelen);
+ maxlen = MPIDI_KVSAPPSTRLEN;
+
+ for (i = 0; i < size; i++) {
+ sprintf(keyS, "OFI-%d", i);
+ MPIDI_OFI_PMI_CALL_POP(PMI_KVS_Get
+ (MPIDI_Global.kvsname, keyS, valS, MPIDI_KVSAPPSTRLEN), pmi);
+ MPIDI_OFI_STR_CALL(MPL_str_get_binary_arg
+ (valS, "OFI", (char *) &table[i * MPIDI_Global.addrnamelen],
+ MPIDI_Global.addrnamelen, &maxlen), buscard_len);
+ }
+
+ /* -------------------------------- */
+ /* Table is constructed. Map it */
+ /* -------------------------------- */
+ mapped_table = (fi_addr_t *) MPL_malloc(size * sizeof(fi_addr_t));
+ MPIDI_OFI_CALL(fi_av_insert(MPIDI_Global.av, table, size, mapped_table, 0ULL, NULL), avmap);
+
+ for (i = 0; i < size; i++) {
+ MPIDI_OFI_AV(&MPIDIU_get_av(0, i)).dest = mapped_table[i];
+ }
+ MPL_free(mapped_table);
+ }
+
+ /* -------------------------------- */
+ /* Create the id to object maps */
+ /* -------------------------------- */
+ MPIDI_OFI_map_create(&MPIDI_Global.win_map);
+
+ /* ---------------------------------- */
+ /* Initialize Active Message */
+ /* ---------------------------------- */
+ if (do_am) {
+ /* Maximum possible message size for short message send (=eager send)
+ * See MPIDI_OFI_do_am_isend for short/long switching logic */
+ MPIR_Assert(MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE <= MPIDI_Global.max_send);
+ MPIDI_Global.am_buf_pool =
+ MPIDI_CH4U_create_buf_pool(MPIDI_OFI_BUF_POOL_NUM, MPIDI_OFI_BUF_POOL_SIZE);
+ mpi_errno = MPIDIG_init(comm_world, comm_self, num_contexts, netmod_contexts);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ slist_init(&MPIDI_Global.cq_buff_list);
+ MPIDI_Global.cq_buff_head = MPIDI_Global.cq_buff_tail = 0;
+ optlen = MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE;
+
+ MPIDI_OFI_CALL(fi_setopt(&(MPIDI_OFI_EP_RX_MSG(0)->fid),
+ FI_OPT_ENDPOINT,
+ FI_OPT_MIN_MULTI_RECV, &optlen, sizeof(optlen)), setopt);
+
+ for (i = 0; i < MPIDI_OFI_NUM_AM_BUFFERS; i++) {
+ MPIDI_Global.am_bufs[i] = MPL_malloc(MPIDI_OFI_AM_BUFF_SZ);
+ MPIDI_Global.am_reqs[i].event_id = MPIDI_OFI_EVENT_AM_RECV;
+ MPIDI_Global.am_reqs[i].index = i;
+ MPIR_Assert(MPIDI_Global.am_bufs[i]);
+ MPIDI_Global.am_iov[i].iov_base = MPIDI_Global.am_bufs[i];
+ MPIDI_Global.am_iov[i].iov_len = MPIDI_OFI_AM_BUFF_SZ;
+ MPIDI_Global.am_msg[i].msg_iov = &MPIDI_Global.am_iov[i];
+ MPIDI_Global.am_msg[i].desc = NULL;
+ MPIDI_Global.am_msg[i].addr = FI_ADDR_UNSPEC;
+ MPIDI_Global.am_msg[i].context = &MPIDI_Global.am_reqs[i].context;
+ MPIDI_Global.am_msg[i].iov_count = 1;
+ MPIDI_OFI_CALL_RETRY(fi_recvmsg(MPIDI_OFI_EP_RX_MSG(0),
+ &MPIDI_Global.am_msg[i],
+ FI_MULTI_RECV | FI_COMPLETION), prepost,
+ MPIDI_OFI_CALL_LOCK);
+ }
+
+ /* Grow the header handlers down */
+ MPIDIG_global.target_msg_cbs[MPIDI_OFI_INTERNAL_HANDLER_CONTROL] =
+ MPIDI_OFI_control_handler;
+ MPIDIG_global.origin_cbs[MPIDI_OFI_INTERNAL_HANDLER_CONTROL] = NULL;
+ }
+ OPA_store_int(&MPIDI_Global.am_inflight_inject_emus, 0);
+ OPA_store_int(&MPIDI_Global.am_inflight_rma_send_mrs, 0);
+
+ /* max_inject_size is temporarily set to 1 inorder to avoid deadlock in
+ * shm initialization since PMI_Barrier does not call progress and flush its injects */
+ MPIDI_Global.max_buffered_send = 1;
+ MPIDI_Global.max_buffered_write = 1;
+
+ MPIDI_Global.max_buffered_send = prov_use->tx_attr->inject_size;
+ MPIDI_Global.max_buffered_write = prov_use->tx_attr->inject_size;
+
+ MPIR_Datatype_init_names();
+ MPIDI_OFI_index_datatypes();
+
+ /* -------------------------------- */
+ /* Initialize Dynamic Tasking */
+ /* -------------------------------- */
+ if (spawned) {
+ char parent_port[MPIDI_MAX_KVS_VALUE_LEN];
+ MPIDI_OFI_PMI_CALL_POP(PMI_KVS_Get(MPIDI_Global.kvsname,
+ MPIDI_PARENT_PORT_KVSKEY,
+ parent_port, MPIDI_MAX_KVS_VALUE_LEN), pmi);
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_Comm_connect
+ (parent_port, NULL, 0, comm_world, &MPIR_Process.comm_parent));
+ MPIR_Assert(MPIR_Process.comm_parent != NULL);
+ MPL_strncpy(MPIR_Process.comm_parent->name, "MPI_COMM_PARENT", MPI_MAX_OBJECT_NAME);
+ }
+
+ fn_exit:
+
+ /* -------------------------------- */
+ /* Free temporary resources */
+ /* -------------------------------- */
+ if (provname) {
+ MPL_free(provname);
+ hints->fabric_attr->prov_name = NULL;
+ }
+
+ if (prov)
+ fi_freeinfo(prov);
+
+ fi_freeinfo(hints);
+
+ if (table)
+ MPL_free(table);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_init_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_init_hook(int rank,
+ int size,
+ int appnum,
+ int *tag_ub,
+ MPIR_Comm * comm_world,
+ MPIR_Comm * comm_self,
+ int spawned, int num_contexts, void **netmod_contexts)
+{
+ int mpi_errno;
+ mpi_errno = MPIDI_OFI_init_generic(rank, size, appnum, tag_ub, comm_world,
+ comm_self, spawned, num_contexts,
+ netmod_contexts,
+ MPIDI_OFI_ENABLE_AV_TABLE,
+ MPIDI_OFI_ENABLE_SCALABLE_ENDPOINTS,
+ MPIDI_OFI_ENABLE_AM,
+ MPIDI_OFI_ENABLE_TAGGED,
+ MPIDI_OFI_ENABLE_DATA,
+ MPIDI_OFI_ENABLE_STX_RMA, MPIDI_OFI_ENABLE_MR_SCALABLE);
+ return mpi_errno;
+}
+
+
+
+
+static inline int MPIDI_OFI_finalize_generic(int do_tagged, int do_scalable_ep, int do_am,
+ int do_stx_rma)
+{
+ int thr_err = 0, mpi_errno = MPI_SUCCESS;
+ int i = 0;
+ int barrier[2] = { 0 };
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Comm *comm;
+
+ /* Progress until we drain all inflight RMA send long buffers */
+ while (OPA_load_int(&MPIDI_Global.am_inflight_rma_send_mrs) > 0)
+ MPIDI_OFI_PROGRESS();
+
+ /* Barrier over allreduce, but force non-immediate send */
+ MPIDI_Global.max_buffered_send = 0;
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Allreduce_impl(&barrier[0], &barrier[1], 1, MPI_INT,
+ MPI_SUM, MPIR_Process.comm_world, &errflag));
+
+ /* Progress until we drain all inflight injection emulation requests */
+ while (OPA_load_int(&MPIDI_Global.am_inflight_inject_emus) > 0)
+ MPIDI_OFI_PROGRESS();
+ MPIR_Assert(OPA_load_int(&MPIDI_Global.am_inflight_inject_emus) == 0);
+
+ if (do_scalable_ep) {
+ if (do_tagged)
+ MPIDI_OFI_CALL(fi_close((fid_t) MPIDI_OFI_EP_TX_TAG(0)), epclose);
+ MPIDI_OFI_CALL(fi_close((fid_t) MPIDI_OFI_EP_TX_RMA(0)), epclose);
+ MPIDI_OFI_CALL(fi_close((fid_t) MPIDI_OFI_EP_TX_MSG(0)), epclose);
+ MPIDI_OFI_CALL(fi_close((fid_t) MPIDI_OFI_EP_TX_CTR(0)), epclose);
+
+ if (do_tagged)
+ MPIDI_OFI_CALL(fi_close((fid_t) MPIDI_OFI_EP_RX_TAG(0)), epclose);
+ MPIDI_OFI_CALL(fi_close((fid_t) MPIDI_OFI_EP_RX_RMA(0)), epclose);
+ MPIDI_OFI_CALL(fi_close((fid_t) MPIDI_OFI_EP_RX_MSG(0)), epclose);
+ }
+
+ if (do_stx_rma && MPIDI_Global.stx_ctx != NULL)
+ MPIDI_OFI_CALL(fi_close(&MPIDI_Global.stx_ctx->fid), stx_ctx_close);
+ MPIDI_OFI_CALL(fi_close(&MPIDI_Global.ep->fid), epclose);
+ MPIDI_OFI_CALL(fi_close(&MPIDI_Global.av->fid), avclose);
+ MPIDI_OFI_CALL(fi_close(&MPIDI_Global.p2p_cq->fid), cqclose);
+ MPIDI_OFI_CALL(fi_close(&MPIDI_Global.rma_cmpl_cntr->fid), cqclose);
+ MPIDI_OFI_CALL(fi_close(&MPIDI_Global.domain->fid), domainclose);
+
+ fi_freeinfo(MPIDI_Global.prov_use);
+
+ /* --------------------------------------- */
+ /* Free comm world addr table */
+ /* --------------------------------------- */
+ comm = MPIR_Process.comm_world;
+ MPIR_Comm_release_always(comm);
+
+ comm = MPIR_Process.comm_self;
+ MPIR_Comm_release_always(comm);
+
+ MPIDIG_finalize();
+
+ MPIDI_OFI_map_destroy(MPIDI_Global.win_map);
+
+ if (do_am) {
+ for (i = 0; i < MPIDI_OFI_NUM_AM_BUFFERS; i++)
+ MPL_free(MPIDI_Global.am_bufs[i]);
+
+ MPIDI_CH4R_destroy_buf_pool(MPIDI_Global.am_buf_pool);
+
+ MPIR_Assert(MPIDI_Global.cq_buff_head == MPIDI_Global.cq_buff_tail);
+ MPIR_Assert(slist_empty(&MPIDI_Global.cq_buff_list));
+ }
+
+ PMI_Finalize();
+
+ MPID_Thread_mutex_destroy(&MPIDI_OFI_THREAD_UTIL_MUTEX, &thr_err);
+ MPID_Thread_mutex_destroy(&MPIDI_OFI_THREAD_PROGRESS_MUTEX, &thr_err);
+ MPID_Thread_mutex_destroy(&MPIDI_OFI_THREAD_FI_MUTEX, &thr_err);
+ MPID_Thread_mutex_destroy(&MPIDI_OFI_THREAD_SPAWN_MUTEX, &thr_err);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_mpi_finalize_hook(void)
+{
+ return MPIDI_OFI_finalize_generic(MPIDI_OFI_ENABLE_TAGGED,
+ MPIDI_OFI_ENABLE_SCALABLE_ENDPOINTS,
+ MPIDI_OFI_ENABLE_AM, MPIDI_OFI_ENABLE_STX_RMA);
+}
+
+static inline void *MPIDI_NM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+
+ void *ap;
+ ap = MPL_malloc(size);
+ return ap;
+}
+
+static inline int MPIDI_NM_mpi_free_mem(void *ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPL_free(ptr);
+
+ return mpi_errno;
+}
+
+static inline int MPIDI_NM_comm_get_lpid(MPIR_Comm * comm_ptr,
+ int idx, int *lpid_ptr, MPL_bool is_remote)
+{
+ int avtid = 0, lpid = 0;
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIDIU_comm_rank_to_pid(comm_ptr, idx, &lpid, &avtid);
+ else if (is_remote)
+ MPIDIU_comm_rank_to_pid(comm_ptr, idx, &lpid, &avtid);
+ else {
+ MPIDIU_comm_rank_to_pid_local(comm_ptr, idx, &lpid, &avtid);
+ }
+
+ *lpid_ptr = MPIDIU_LUPID_CREATE(avtid, lpid);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i, total_size = 0;
+ char *temp_buf = NULL, *curr_ptr = NULL;
+
+ MPIR_CHKPMEM_DECL(2);
+ MPIR_CHKLMEM_DECL(1);
+
+ /* *local_upid_size = (size_t*) MPL_malloc(comm->local_size * sizeof(size_t)); */
+ MPIR_CHKPMEM_MALLOC((*local_upid_size), size_t *, comm->local_size * sizeof(size_t),
+ mpi_errno, "local_upid_size");
+ /* temp_buf = (char*) MPL_malloc(comm->local_size * MPIDI_Global.addrnamelen); */
+ MPIR_CHKLMEM_MALLOC(temp_buf, char *, comm->local_size * MPIDI_Global.addrnamelen,
+ mpi_errno, "temp_buf");
+
+ for (i = 0; i < comm->local_size; i++) {
+ (*local_upid_size)[i] = MPIDI_Global.addrnamelen;
+ MPIDI_OFI_CALL(fi_av_lookup(MPIDI_Global.av, MPIDI_OFI_COMM_TO_PHYS(comm, i),
+ &temp_buf[i * MPIDI_Global.addrnamelen],
+ &(*local_upid_size)[i]), avlookup);
+ total_size += (*local_upid_size)[i];
+ }
+
+ /* *local_upids = (char*) MPL_malloc(total_size * sizeof(char)); */
+ MPIR_CHKPMEM_MALLOC((*local_upids), char *, total_size * sizeof(char),
+ mpi_errno, "local_upids");
+ curr_ptr = (*local_upids);
+ for (i = 0; i < comm->local_size; i++) {
+ memcpy(curr_ptr, &temp_buf[i * MPIDI_Global.addrnamelen], (*local_upid_size)[i]);
+ curr_ptr += (*local_upid_size)[i];
+ }
+
+ MPIR_CHKPMEM_COMMIT();
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+static inline int MPIDI_OFI_upids_to_lupids_general(int size,
+ size_t * remote_upid_size,
+ char *remote_upids,
+ int **remote_lupids, int use_av_table)
+{
+ int i, mpi_errno = MPI_SUCCESS;
+ int *new_avt_procs;
+ char **new_upids;
+ int n_new_procs = 0;
+ int max_n_avts;
+ char *curr_upid;
+ new_avt_procs = (int *) MPL_malloc(size * sizeof(int));
+ new_upids = (char **) MPL_malloc(size * sizeof(char *));
+ max_n_avts = MPIDIU_get_max_n_avts();
+
+ curr_upid = remote_upids;
+ for (i = 0; i < size; i++) {
+ int j, k;
+ char tbladdr[FI_NAME_MAX];
+ int found = 0;
+ size_t sz = 0;
+
+ for (k = 0; k < max_n_avts; k++) {
+ if (MPIDIU_get_av_table(k) == NULL) {
+ continue;
+ }
+ for (j = 0; j < MPIDIU_get_av_table(k)->size; j++) {
+ sz = MPIDI_Global.addrnamelen;
+ MPIDI_OFI_CALL(fi_av_lookup(MPIDI_Global.av, MPIDI_OFI_TO_PHYS(k, j),
+ &tbladdr, &sz), avlookup);
+ if (sz == remote_upid_size[i]
+ && !memcmp(tbladdr, curr_upid, remote_upid_size[i])) {
+ (*remote_lupids)[i] = MPIDIU_LUPID_CREATE(k, j);
+ found = 1;
+ break;
+ }
+ }
+ }
+
+ if (!found) {
+ new_avt_procs[n_new_procs] = i;
+ new_upids[n_new_procs] = curr_upid;
+ n_new_procs++;
+ }
+ curr_upid += remote_upid_size[i];
+ }
+
+ /* create new av_table, insert processes */
+ if (n_new_procs > 0) {
+ int avtid;
+ MPIDIU_new_avt(n_new_procs, &avtid);
+
+ for (i = 0; i < n_new_procs; i++) {
+ if (use_av_table) { /* logical addressing */
+ MPIDI_OFI_CALL(fi_av_insert(MPIDI_Global.av, new_upids[new_avt_procs[i]],
+ 1, NULL, 0ULL, NULL), avmap);
+ /* FIXME: get logical address */
+ }
+ else {
+ MPIDI_OFI_CALL(fi_av_insert(MPIDI_Global.av, new_upids[new_avt_procs[i]],
+ 1,
+ (fi_addr_t *) &
+ MPIDI_OFI_AV(&MPIDIU_get_av(avtid, i)).dest, 0ULL,
+ NULL), avmap);
+ }
+ /* highest bit is marked as 1 to indicate this is a new process */
+ (*remote_lupids)[i] = MPIDIU_LUPID_CREATE(avtid, i);
+ MPIDIU_LUPID_SET_NEW_AVT_MARK((*remote_lupids)[i]);
+ }
+ }
+
+ fn_exit:
+ MPL_free(new_avt_procs);
+ MPL_free(new_upids);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_upids_to_lupids(int size,
+ size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ return MPIDI_OFI_upids_to_lupids_general(size, remote_upid_size, remote_upids,
+ remote_lupids, MPIDI_OFI_ENABLE_AV_TABLE);
+}
+
+static inline int MPIDI_NM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ return 0;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_create_endpoint
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_create_endpoint(struct fi_info *prov_use,
+ struct fid_domain *domain,
+ struct fid_cq *p2p_cq,
+ struct fid_cntr *rma_ctr,
+ struct fid_av *av,
+ struct fid_ep **ep, int index,
+ int do_tagged, int do_scalable_ep, int do_data)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct fi_tx_attr tx_attr;
+ struct fi_rx_attr rx_attr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_CREATE_ENDPOINT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_CREATE_ENDPOINT);
+
+ if (do_scalable_ep) {
+ int idx_off;
+ MPIDI_OFI_CALL(fi_scalable_ep(domain, prov_use, ep, NULL), ep);
+ MPIDI_OFI_CALL(fi_scalable_ep_bind(*ep, &av->fid, 0), bind);
+
+ idx_off = index * 4;
+ MPIDI_Global.ctx[index].ctx_offset = idx_off;
+
+ if (do_tagged) {
+ tx_attr = *prov_use->tx_attr;
+ tx_attr.caps = FI_TAGGED;
+ tx_attr.op_flags = FI_COMPLETION | FI_INJECT_COMPLETE;
+ MPIDI_OFI_CALL(fi_tx_context(*ep, idx_off, &tx_attr, &MPIDI_OFI_EP_TX_TAG(index), NULL),
+ ep);
+ MPIDI_OFI_CALL(fi_ep_bind
+ (MPIDI_OFI_EP_TX_TAG(index), &p2p_cq->fid,
+ FI_SEND | FI_SELECTIVE_COMPLETION), bind);
+ }
+
+ tx_attr = *prov_use->tx_attr;
+ tx_attr.caps = FI_RMA;
+ tx_attr.caps |= FI_ATOMICS;
+ tx_attr.op_flags = FI_COMPLETION | FI_DELIVERY_COMPLETE;
+ MPIDI_OFI_CALL(fi_tx_context(*ep, idx_off + 1, &tx_attr, &MPIDI_OFI_EP_TX_RMA(index), NULL),
+ ep);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_EP_TX_RMA(index), &rma_ctr->fid, FI_WRITE | FI_READ),
+ bind);
+ MPIDI_OFI_CALL(fi_ep_bind
+ (MPIDI_OFI_EP_TX_RMA(index), &p2p_cq->fid,
+ FI_SEND | FI_SELECTIVE_COMPLETION), bind);
+
+ tx_attr = *prov_use->tx_attr;
+ tx_attr.caps = FI_MSG;
+ tx_attr.op_flags = FI_COMPLETION | FI_INJECT_COMPLETE;
+ MPIDI_OFI_CALL(fi_tx_context(*ep, idx_off + 2, &tx_attr, &MPIDI_OFI_EP_TX_MSG(index), NULL),
+ ep);
+ MPIDI_OFI_CALL(fi_ep_bind
+ (MPIDI_OFI_EP_TX_MSG(index), &p2p_cq->fid,
+ FI_SEND | FI_SELECTIVE_COMPLETION), bind);
+
+ tx_attr = *prov_use->tx_attr;
+ tx_attr.caps = FI_RMA;
+ tx_attr.caps |= FI_ATOMICS;
+ tx_attr.op_flags = FI_DELIVERY_COMPLETE;
+ MPIDI_OFI_CALL(fi_tx_context(*ep, idx_off + 3, &tx_attr, &MPIDI_OFI_EP_TX_CTR(index), NULL),
+ ep);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_EP_TX_CTR(index), &rma_ctr->fid, FI_WRITE | FI_READ),
+ bind);
+ /* We need to bind to the CQ if the progress mode is manual.
+ * Otherwise fi_cq_read would not make progress on this context and potentially leads to a deadlock. */
+ if (prov_use->domain_attr->data_progress == FI_PROGRESS_MANUAL)
+ MPIDI_OFI_CALL(fi_ep_bind
+ (MPIDI_OFI_EP_TX_CTR(index), &p2p_cq->fid,
+ FI_SEND | FI_SELECTIVE_COMPLETION), bind);
+
+ if (do_tagged) {
+ rx_attr = *prov_use->rx_attr;
+ rx_attr.caps = FI_TAGGED;
+ if (do_data)
+ rx_attr.caps |= FI_DIRECTED_RECV;
+ rx_attr.op_flags = 0;
+ MPIDI_OFI_CALL(fi_rx_context(*ep, idx_off, &rx_attr, &MPIDI_OFI_EP_RX_TAG(index), NULL),
+ ep);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_EP_RX_TAG(index), &p2p_cq->fid, FI_RECV), bind);
+ }
+
+ rx_attr = *prov_use->rx_attr;
+ rx_attr.caps = FI_RMA;
+ rx_attr.caps |= FI_ATOMICS;
+ rx_attr.op_flags = 0;
+ MPIDI_OFI_CALL(fi_rx_context(*ep, idx_off + 1, &rx_attr, &MPIDI_OFI_EP_RX_RMA(index), NULL),
+ ep);
+
+ /* Note: This bind should cause the "passive target" rx context to never generate an event
+ * We need this bind for manual progress to ensure that progress is made on the
+ * rx_ctr or rma operations during completion queue reads */
+ if (prov_use->domain_attr->data_progress == FI_PROGRESS_MANUAL)
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_EP_RX_RMA(index), &p2p_cq->fid,
+ FI_SEND | FI_RECV | FI_SELECTIVE_COMPLETION), bind);
+
+ rx_attr = *prov_use->rx_attr;
+ rx_attr.caps = FI_MSG;
+ rx_attr.caps |= FI_MULTI_RECV;
+ if (do_data)
+ rx_attr.caps |= FI_DIRECTED_RECV;
+ rx_attr.op_flags = FI_MULTI_RECV;
+ MPIDI_OFI_CALL(fi_rx_context(*ep, idx_off + 2, &rx_attr, &MPIDI_OFI_EP_RX_MSG(index), NULL),
+ ep);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_EP_RX_MSG(index), &p2p_cq->fid, FI_RECV), bind);
+
+ MPIDI_OFI_CALL(fi_enable(*ep), ep_enable);
+
+ if (do_tagged)
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_EP_TX_TAG(index)), ep_enable);
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_EP_TX_RMA(index)), ep_enable);
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_EP_TX_MSG(index)), ep_enable);
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_EP_TX_CTR(index)), ep_enable);
+
+ if (do_tagged)
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_EP_RX_TAG(index)), ep_enable);
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_EP_RX_RMA(index)), ep_enable);
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_EP_RX_MSG(index)), ep_enable);
+ }
+ else {
+ /* ---------------------------------------------------------- */
+ /* Bind the CQs, counters, and AV to the endpoint object */
+ /* ---------------------------------------------------------- */
+ /* "Normal Endpoint */
+ MPIDI_OFI_CALL(fi_endpoint(domain, prov_use, ep, NULL), ep);
+ MPIDI_OFI_CALL(fi_ep_bind(*ep, &p2p_cq->fid, FI_SEND | FI_RECV | FI_SELECTIVE_COMPLETION),
+ bind);
+ MPIDI_OFI_CALL(fi_ep_bind(*ep, &rma_ctr->fid, FI_READ | FI_WRITE), bind);
+ MPIDI_OFI_CALL(fi_ep_bind(*ep, &av->fid, 0), bind);
+ MPIDI_OFI_CALL(fi_enable(*ep), ep_enable);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_CREATE_ENDPOINT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_OFI_choose_provider(struct fi_info *prov, struct fi_info **prov_use)
+{
+ struct fi_info *p = prov;
+ int i = 0;
+ *prov_use = prov;
+
+ if (MPIR_CVAR_OFI_DUMP_PROVIDERS) {
+ fprintf(stdout, "Dumping Providers(first=%p):\n", prov);
+
+ while (p) {
+ fprintf(stdout, "%s", fi_tostr(p, FI_TYPE_INFO));
+ p = p->next;
+ }
+ }
+
+ return i;
+}
+
+#endif /* OFI_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_iovec_util.h b/src/mpid/ch4/netmod/ofi/ofi_iovec_util.h
new file mode 100644
index 0000000..4c2868a
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_iovec_util.h
@@ -0,0 +1,390 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_IOVEC_UTIL_H_INCLUDED
+#define OFI_IOVEC_UTIL_H_INCLUDED
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif /* HAVE_STDINT_H */
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif /* HAVE_SYS_UIO_H */
+#include <assert.h>
+#include "ofi_types.h"
+
+#define MPIDI_OFI_IOV_DONE 0
+#define MPIDI_OFI_IOV_SUCCESS 0
+#define MPIDI_OFI_IOV_EAGAIN 1
+#define MPIDI_OFI_IOV_ERROR -1
+
+#define MPIDI_OFI_INIT_IOV_STATE(var) \
+ do { \
+ iov_state->var## _base_addr = var; \
+ iov_state->var## _count = var## _count; \
+ iov_state->var## _iov = var## _iov; \
+ iov_state->var## _idx = 0; \
+ iov_state->var## _addr = (uintptr_t)iov_state->var## _iov[iov_state->var## _idx].iov_base + iov_state->var## _base_addr; \
+ iov_state->var## _size = (uintptr_t)iov_state->var## _iov[iov_state->var## _idx].iov_len; \
+ while (iov_state->var## _size == 0) { \
+ iov_state->var## _idx++; \
+ if (iov_state->var## _idx < iov_state->var## _count) { \
+ iov_state->var## _addr = (uintptr_t)iov_state->var## _iov[iov_state->var## _idx].iov_base + iov_state->var## _base_addr; \
+ iov_state->var## _size = (uintptr_t)iov_state->var## _iov[iov_state->var## _idx].iov_len; \
+ } else { \
+ break; \
+ } \
+ } \
+ } while (0)
+
+#define MPIDI_OFI_NEXT_IOV_STATE(var) \
+ do { \
+ *var## _addr_next = iov_state->var## _addr; \
+ iov_state->var## _addr += buf_size; \
+ iov_state->var## _size -= buf_size; \
+ while (iov_state->var## _size == 0) { \
+ iov_state->var## _idx++; \
+ if (iov_state->var## _idx < iov_state->var## _count) { \
+ iov_state->var## _addr = (uintptr_t)iov_state->var## _iov[iov_state->var## _idx].iov_base + iov_state->var## _base_addr; \
+ iov_state->var## _size = (uintptr_t)iov_state->var## _iov[iov_state->var## _idx].iov_len; \
+ } else { \
+ break; \
+ } \
+ } \
+ } while (0)
+
+#define MPIDI_OFI_INIT_IOV(var) \
+ do { \
+ ((struct iovec*)(&var## _iov[0]))->iov_len = last_len; \
+ ((struct iovec*)(&var## _iov[0]))->iov_base = (void*)var## _last_addr; \
+ *var## _iovs_nout = 1; \
+ } while (0)
+
+#define MPIDI_OFI_UPDATE_IOV(var) \
+ do { \
+ var## _idx++; \
+ (*var## _iovs_nout)++; \
+ ((struct iovec*)(&var## _iov[var## _idx]))->iov_base = (void *)var## _addr; \
+ ((struct iovec*)(&var## _iov[var## _idx]))->iov_len = len; \
+ } while (0)
+
+#define MPIDI_OFI_UPDATE_IOV_STATE1(var1,var2) \
+ do { \
+ if (*var2## _iovs_nout>=var2## _max_iovs) return MPIDI_OFI_IOV_EAGAIN; \
+ ((struct iovec*)(&var1## _iov[var1## _idx]))->iov_len += len; \
+ var2## _idx++; \
+ (*var2## _iovs_nout)++; \
+ ((struct iovec*)(&var2## _iov[var2## _idx]))->iov_base = (void *)var2## _addr; \
+ ((struct iovec*)(&var2## _iov[var2## _idx]))->iov_len = len; \
+ MPIDI_OFI_next_iovec_state(iov_state,&origin_addr, &target_addr, &len); \
+ } while (0)
+
+#define MPIDI_OFI_UPDATE_IOV_STATE2(var1,var2,var3) \
+ do { \
+ if (*var2## _iovs_nout>=var2## _max_iovs) return MPIDI_OFI_IOV_EAGAIN; \
+ if (*var3## _iovs_nout>=var3## _max_iovs) return MPIDI_OFI_IOV_EAGAIN; \
+ ((struct iovec*)(&var1## _iov[var1## _idx]))->iov_len += len; \
+ var2## _idx++; \
+ (*var2## _iovs_nout)++; \
+ ((struct iovec*)(&var2## _iov[var2## _idx]))->iov_base = (void *)var2## _addr; \
+ ((struct iovec*)(&var2## _iov[var2## _idx]))->iov_len = len; \
+ var3## _idx++; \
+ (*var3## _iovs_nout)++; \
+ ((struct iovec*)(&var3## _iov[var3## _idx]))->iov_base = (void *)var3## _addr; \
+ ((struct iovec*)(&var3## _iov[var3## _idx]))->iov_len = len; \
+ MPIDI_OFI_next_iovec_state2(iov_state,&origin_addr, &result_addr, &target_addr,&len); \
+ } while (0)
+
+static inline
+ int MPIDI_OFI_init_iovec_state(MPIDI_OFI_iovec_state_t * iov_state,
+ uintptr_t origin,
+ uintptr_t target,
+ size_t origin_count,
+ size_t target_count,
+ size_t buf_limit,
+ struct iovec *origin_iov, struct iovec *target_iov)
+{
+ iov_state->buf_limit = buf_limit;
+ iov_state->buf_limit_left = buf_limit;
+
+ if ((origin_count > 0) && (target_count > 0)) {
+ MPIDI_OFI_INIT_IOV_STATE(target);
+ MPIDI_OFI_INIT_IOV_STATE(origin);
+ }
+ else
+ return MPIDI_OFI_IOV_ERROR;
+
+ return MPIDI_OFI_IOV_SUCCESS;
+}
+
+static inline
+ int MPIDI_OFI_init_iovec_state2(MPIDI_OFI_iovec_state_t * iov_state,
+ uintptr_t origin,
+ uintptr_t result,
+ uintptr_t target,
+ size_t origin_count,
+ size_t result_count,
+ size_t target_count,
+ size_t buf_limit,
+ struct iovec *origin_iov,
+ struct iovec *result_iov, struct iovec *target_iov)
+{
+ iov_state->buf_limit = buf_limit;
+ iov_state->buf_limit_left = buf_limit;
+
+ if ((origin_count > 0) && (target_count > 0) && (result_count > 0)) {
+ MPIDI_OFI_INIT_IOV_STATE(target);
+ MPIDI_OFI_INIT_IOV_STATE(origin);
+ MPIDI_OFI_INIT_IOV_STATE(result);
+ }
+ else
+ return MPIDI_OFI_IOV_ERROR;
+
+ return MPIDI_OFI_IOV_SUCCESS;
+}
+
+
+static inline
+ int MPIDI_OFI_peek_iovec_state(MPIDI_OFI_iovec_state_t * iov_state,
+ uintptr_t * next_origin_addr,
+ uintptr_t * next_target_addr, size_t * buf_len)
+{
+ if ((iov_state->origin_size != 0) && (iov_state->target_size != 0)) {
+ *next_origin_addr = iov_state->origin_addr;
+ *next_target_addr = iov_state->target_addr;
+ *buf_len =
+ MPL_MIN(MPL_MIN(iov_state->target_size, iov_state->origin_size),
+ iov_state->buf_limit_left);
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+ else {
+ if (((iov_state->origin_size != 0) || (iov_state->target_size != 0)))
+ return MPIDI_OFI_IOV_ERROR;
+
+ return MPIDI_OFI_IOV_DONE;
+ }
+}
+
+static inline
+ int MPIDI_OFI_peek_iovec_state2(MPIDI_OFI_iovec_state_t * iov_state,
+ uintptr_t * next_origin_addr,
+ uintptr_t * next_result_addr,
+ uintptr_t * next_target_addr, size_t * buf_len)
+{
+ if ((iov_state->origin_size != 0) && (iov_state->target_size != 0) &&
+ (iov_state->result_size != 0)) {
+ *next_origin_addr = iov_state->origin_addr;
+ *next_result_addr = iov_state->result_addr;
+ *next_target_addr = iov_state->target_addr;
+ *buf_len = MPL_MIN(MPL_MIN(MPL_MIN(iov_state->target_size, iov_state->origin_size),
+ iov_state->result_size), iov_state->buf_limit_left);
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+ else {
+ if (((iov_state->origin_size != 0) || (iov_state->target_size != 0) ||
+ (iov_state->result_size != 0)))
+ return MPIDI_OFI_IOV_ERROR;
+
+ return MPIDI_OFI_IOV_DONE;
+ }
+}
+
+
+static inline
+ int MPIDI_OFI_next_iovec_state(MPIDI_OFI_iovec_state_t * iov_state,
+ uintptr_t * origin_addr_next,
+ uintptr_t * target_addr_next, size_t * buf_len)
+{
+ if ((iov_state->origin_size != 0) && (iov_state->target_size != 0)) {
+ uintptr_t buf_size = MPL_MIN(MPL_MIN(iov_state->target_size, iov_state->origin_size),
+ iov_state->buf_limit_left);
+ *buf_len = buf_size;
+ MPIDI_OFI_NEXT_IOV_STATE(target);
+ MPIDI_OFI_NEXT_IOV_STATE(origin);
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+ else {
+ if (((iov_state->origin_size != 0) || (iov_state->target_size != 0)))
+ return MPIDI_OFI_IOV_ERROR;
+
+ return MPIDI_OFI_IOV_DONE;
+ }
+}
+
+static inline
+ int MPIDI_OFI_next_iovec_state2(MPIDI_OFI_iovec_state_t * iov_state,
+ uintptr_t * origin_addr_next,
+ uintptr_t * result_addr_next,
+ uintptr_t * target_addr_next, size_t * buf_len)
+{
+ if ((iov_state->origin_size != 0) && (iov_state->target_size != 0) &&
+ (iov_state->result_size != 0)) {
+ uintptr_t buf_size =
+ MPL_MIN(MPL_MIN(MPL_MIN(iov_state->target_size, iov_state->origin_size),
+ iov_state->result_size), iov_state->buf_limit_left);
+ *buf_len = buf_size;
+ MPIDI_OFI_NEXT_IOV_STATE(target);
+ MPIDI_OFI_NEXT_IOV_STATE(origin);
+ MPIDI_OFI_NEXT_IOV_STATE(result);
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+ else {
+ if (((iov_state->origin_size != 0) || (iov_state->target_size != 0) ||
+ (iov_state->result_size != 0)))
+ return MPIDI_OFI_IOV_ERROR;
+
+ return MPIDI_OFI_IOV_DONE;
+ }
+}
+
+static inline
+ int MPIDI_OFI_merge_iov_list(MPIDI_OFI_iovec_state_t * iov_state,
+ struct iovec *origin_iov,
+ size_t origin_max_iovs,
+ struct fi_rma_iov *target_iov,
+ size_t target_max_iovs,
+ size_t * origin_iovs_nout, size_t * target_iovs_nout)
+{
+ int rc;
+ uintptr_t origin_addr = (uintptr_t) NULL, target_addr = (uintptr_t) NULL;
+ uintptr_t origin_last_addr = 0, target_last_addr = 0;
+ int origin_idx = 0, target_idx = 0;
+ size_t len = 0, last_len = 0;
+
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct iovec, iov_base) == offsetof(struct fi_rma_iov, addr));
+ CH4_COMPILE_TIME_ASSERT(offsetof(struct iovec, iov_len) == offsetof(struct fi_rma_iov, len));
+
+ rc = MPIDI_OFI_next_iovec_state(iov_state, &origin_last_addr, &target_last_addr, &last_len);
+ assert(rc != MPIDI_OFI_IOV_ERROR);
+ MPIDI_OFI_INIT_IOV(target);
+ MPIDI_OFI_INIT_IOV(origin);
+ iov_state->buf_limit_left -= last_len;
+
+ while (rc > 0) {
+ rc = MPIDI_OFI_peek_iovec_state(iov_state, &origin_addr, &target_addr, &len);
+ assert(rc != MPIDI_OFI_IOV_ERROR);
+
+ if (rc == MPIDI_OFI_IOV_DONE) {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+
+ if (target_last_addr + last_len == target_addr) {
+ MPIDI_OFI_UPDATE_IOV_STATE1(target, origin);
+ }
+ else if (origin_last_addr + last_len == origin_addr) {
+ MPIDI_OFI_UPDATE_IOV_STATE1(origin, target);
+ }
+ else {
+ if ((*origin_iovs_nout >= origin_max_iovs) || (*target_iovs_nout >= target_max_iovs)) {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+
+ MPIDI_OFI_UPDATE_IOV(target);
+ MPIDI_OFI_UPDATE_IOV(origin);
+ MPIDI_OFI_next_iovec_state(iov_state, &origin_addr, &target_addr, &len);
+ }
+
+ origin_last_addr = origin_addr;
+ target_last_addr = target_addr;
+ last_len = len;
+ iov_state->buf_limit_left -= len;
+ if (iov_state->buf_limit_left == 0) {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+ }
+
+ if (rc == MPIDI_OFI_IOV_DONE)
+ return MPIDI_OFI_IOV_DONE;
+ else {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+}
+
+static inline
+ int MPIDI_OFI_merge_iov_list2(MPIDI_OFI_iovec_state_t * iov_state,
+ struct iovec *origin_iov,
+ size_t origin_max_iovs,
+ struct iovec *result_iov,
+ size_t result_max_iovs,
+ struct fi_rma_iov *target_iov,
+ size_t target_max_iovs,
+ size_t * origin_iovs_nout,
+ size_t * result_iovs_nout, size_t * target_iovs_nout)
+{
+ int rc;
+ uintptr_t origin_addr = (uintptr_t) NULL, result_addr = (uintptr_t) NULL, target_addr =
+ (uintptr_t) NULL;
+ uintptr_t origin_last_addr = 0, result_last_addr = 0, target_last_addr = 0;
+ int origin_idx = 0, result_idx = 0, target_idx = 0;
+ size_t len = 0, last_len = 0;
+
+ rc = MPIDI_OFI_next_iovec_state2(iov_state, &origin_last_addr, &result_last_addr,
+ &target_last_addr, &last_len);
+ assert(rc != MPIDI_OFI_IOV_ERROR);
+ MPIDI_OFI_INIT_IOV(target);
+ MPIDI_OFI_INIT_IOV(origin);
+ MPIDI_OFI_INIT_IOV(result);
+ iov_state->buf_limit_left -= last_len;
+
+ while (rc > 0) {
+ rc = MPIDI_OFI_peek_iovec_state2(iov_state, &origin_addr, &result_addr, &target_addr, &len);
+ assert(rc != MPIDI_OFI_IOV_ERROR);
+
+ if (rc == MPIDI_OFI_IOV_DONE) {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+
+ if (target_last_addr + last_len == target_addr) {
+ MPIDI_OFI_UPDATE_IOV_STATE2(target, origin, result);
+ }
+ else if (origin_last_addr + last_len == origin_addr) {
+ MPIDI_OFI_UPDATE_IOV_STATE2(origin, target, result);
+ }
+ else if (result_last_addr + last_len == result_addr) {
+ MPIDI_OFI_UPDATE_IOV_STATE2(result, target, origin);
+ }
+ else {
+ if ((*origin_iovs_nout >= origin_max_iovs) || (*target_iovs_nout >= target_max_iovs) ||
+ (*result_iovs_nout >= result_max_iovs)) {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+
+ MPIDI_OFI_UPDATE_IOV(target);
+ MPIDI_OFI_UPDATE_IOV(origin);
+ MPIDI_OFI_UPDATE_IOV(result);
+ MPIDI_OFI_next_iovec_state2(iov_state, &origin_addr, &result_addr, &target_addr, &len);
+ }
+
+ origin_last_addr = origin_addr;
+ result_last_addr = result_addr;
+ target_last_addr = target_addr;
+ last_len = len;
+ iov_state->buf_limit_left -= len;
+ if (iov_state->buf_limit_left == 0) {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+
+ }
+
+ if (rc == MPIDI_OFI_IOV_DONE)
+ return MPIDI_OFI_IOV_DONE;
+ else {
+ iov_state->buf_limit_left = iov_state->buf_limit;
+ return MPIDI_OFI_IOV_EAGAIN;
+ }
+}
+#endif /* OFI_IOVEC_UTIL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_op.h b/src/mpid/ch4/netmod/ofi/ofi_op.h
new file mode 100644
index 0000000..5707a8b
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_op.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_OP_H_INCLUDED
+#define OFI_OP_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_mpi_op_free_hook(MPIR_Op * op_p)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_OP_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_OP_FREE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_OP_FREE_HOOK);
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_op_create_hook(MPIR_Op * op_p)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_OP_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_OP_CREATE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_OP_CREATE_HOOK);
+ return 0;
+}
+
+
+#endif /* OFI_OP_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_pre.h b/src/mpid/ch4/netmod/ofi/ofi_pre.h
new file mode 100644
index 0000000..8468a78
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_pre.h
@@ -0,0 +1,184 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef OFI_PRE_H_INCLUDED
+#define OFI_PRE_H_INCLUDED
+
+#include <mpi.h>
+#include <rdma/fabric.h>
+#include <rdma/fi_endpoint.h>
+#include <rdma/fi_domain.h>
+#include <rdma/fi_tagged.h>
+#include <rdma/fi_rma.h>
+#include <rdma/fi_atomic.h>
+#include <rdma/fi_cm.h>
+#include <rdma/fi_errno.h>
+
+/* Defines */
+
+#define MPIDI_OFI_MAX_AM_HDR_SIZE 128
+#define MPIDI_OFI_AM_HANDLER_ID_BITS 8
+#define MPIDI_OFI_AM_TYPE_BITS 8
+#define MPIDI_OFI_AM_HDR_SZ_BITS 8
+#define MPIDI_OFI_AM_DATA_SZ_BITS 48
+#define MPIDI_OFI_AM_CONTEXT_ID_BITS 16
+#define MPIDI_OFI_AM_RANK_BITS 32
+#define MPIDI_OFI_AM_MSG_HEADER_SIZE (sizeof(MPIDI_OFI_am_header_t))
+
+#ifdef MPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS
+#define MPIDI_OFI_MAX_ENDPOINTS 256
+#define MPIDI_OFI_MAX_ENDPOINTS_BITS 8
+#else
+#define MPIDI_OFI_MAX_ENDPOINTS 1
+#define MPIDI_OFI_MAX_ENDPOINTS_BITS 0
+#endif
+
+/* Typedefs */
+
+struct MPIR_Comm;
+struct MPIR_Request;
+
+typedef struct {
+ void *huge_send_counters;
+ void *huge_recv_counters;
+ void *win_id_allocator;
+ void *rma_id_allocator;
+} MPIDI_OFI_comm_t;
+enum {
+ MPIDI_AMTYPE_SHORT_HDR = 0,
+ MPIDI_AMTYPE_SHORT,
+ MPIDI_AMTYPE_LMT_REQ,
+ MPIDI_AMTYPE_LMT_ACK
+};
+
+typedef struct {
+ /* context id and src rank so the target side can
+ * issue RDMA read operation */
+ MPIR_Context_id_t context_id;
+ int src_rank;
+
+ uint64_t src_offset;
+ uint64_t sreq_ptr;
+ uint64_t am_hdr_src;
+ uint64_t rma_key;
+} MPIDI_OFI_lmt_msg_payload_t;
+
+typedef struct {
+ uint64_t sreq_ptr;
+} MPIDI_OFI_ack_msg_payload_t;
+
+typedef struct MPIDI_OFI_am_header_t {
+ uint64_t handler_id:MPIDI_OFI_AM_HANDLER_ID_BITS;
+ uint64_t am_type:MPIDI_OFI_AM_TYPE_BITS;
+ uint64_t am_hdr_sz:MPIDI_OFI_AM_HDR_SZ_BITS;
+ uint64_t data_sz:MPIDI_OFI_AM_DATA_SZ_BITS;
+ uint64_t payload[0];
+} MPIDI_OFI_am_header_t;
+
+typedef struct {
+ MPIDI_OFI_am_header_t hdr;
+ MPIDI_OFI_ack_msg_payload_t pyld;
+} MPIDI_OFI_ack_msg_t;
+
+typedef struct {
+ MPIDI_OFI_am_header_t hdr;
+ MPIDI_OFI_lmt_msg_payload_t pyld;
+} MPIDI_OFI_lmt_msg_t;
+
+typedef struct {
+ MPIDI_OFI_lmt_msg_payload_t lmt_info;
+ uint64_t lmt_cntr;
+ struct fid_mr *lmt_mr;
+ void *pack_buffer;
+ void *rreq_ptr;
+ void *am_hdr;
+ int (*target_cmpl_cb) (struct MPIR_Request * req);
+ uint16_t am_hdr_sz;
+ uint8_t pad[6];
+ MPIDI_OFI_am_header_t msg_hdr;
+ uint8_t am_hdr_buf[MPIDI_OFI_MAX_AM_HDR_SIZE];
+} MPIDI_OFI_am_request_header_t;
+
+typedef struct {
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ MPIDI_OFI_am_request_header_t *req_hdr;
+} MPIDI_OFI_am_request_t;
+
+
+typedef struct MPIDI_OFI_noncontig_t {
+ struct MPIDU_Segment segment;
+ char pack_buffer[0];
+} MPIDI_OFI_noncontig_t;
+
+typedef struct {
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ int util_id;
+ struct MPIR_Comm *util_comm;
+ MPI_Datatype datatype;
+ MPIDI_OFI_noncontig_t *noncontig;
+ /* persistent send fields */
+ union {
+ struct {
+ int type;
+ int rank;
+ int tag;
+ int count;
+ void *buf;
+ } persist;
+ struct iovec iov;
+ void *inject_buf; /* Internal buffer for inject emulation */
+ } util;
+} MPIDI_OFI_request_t;
+
+typedef struct {
+ int index;
+} MPIDI_OFI_dt_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_OFI_op_t;
+
+struct MPIDI_OFI_win_request;
+
+/* Stores per-rank information for RMA */
+typedef struct {
+ int32_t disp_unit;
+#ifndef USE_OFI_MR_SCALABLE
+ /* For MR_BASIC mode we need to store an MR key and a base address of the target window */
+ uint64_t mr_key;
+ uintptr_t base;
+#endif
+} MPIDI_OFI_win_targetinfo_t;
+
+typedef struct {
+ struct fid_mr *mr;
+ uint64_t mr_key;
+ struct fid_ep *ep; /* EP with counter & completion */
+ struct fid_ep *ep_nocmpl; /* EP with counter only (no completion) */
+ uint64_t *issued_cntr;
+ uint64_t issued_cntr_v; /* main body of an issued counter,
+ * if we are to use per-window counter */
+ struct fid_cntr *cmpl_cntr;
+ uint64_t win_id;
+ struct MPIDI_OFI_win_request *syncQ;
+ MPIDI_OFI_win_targetinfo_t *winfo;
+} MPIDI_OFI_win_t;
+
+typedef struct {
+ fi_addr_t dest;
+#ifdef MPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS
+ unsigned ep_idx:MPIDI_OFI_MAX_ENDPOINTS_BITS;
+#endif
+} MPIDI_OFI_addr_t;
+
+#endif /* OFI_PRE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_probe.h b/src/mpid/ch4/netmod/ofi/ofi_probe.h
new file mode 100644
index 0000000..4ef400d
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_probe.h
@@ -0,0 +1,168 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_PROBE_H_INCLUDED
+#define OFI_PROBE_H_INCLUDED
+
+#include "ofi_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_iprobe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag,
+ MPI_Status * status,
+ MPIR_Request ** message, uint64_t peek_flags)
+{
+ int mpi_errno = MPI_SUCCESS;
+ fi_addr_t remote_proc;
+ uint64_t match_bits, mask_bits;
+ MPIR_Request r, *rreq; /* don't need to init request, output only */
+ struct fi_msg_tagged msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_IPROBE);
+
+ if (unlikely(MPI_ANY_SOURCE == source))
+ remote_proc = FI_ADDR_UNSPEC;
+ else
+ remote_proc = MPIDI_OFI_comm_to_phys(comm, source, MPIDI_OFI_API_TAG);
+
+ if (message)
+ MPIDI_OFI_REQUEST_CREATE(rreq, MPIR_REQUEST_KIND__MPROBE);
+ else
+ rreq = &r;
+
+ match_bits =
+ MPIDI_OFI_init_recvtag(&mask_bits, comm->context_id + context_offset, source, tag,
+ MPIDI_OFI_ENABLE_DATA);
+
+ MPIDI_OFI_REQUEST(rreq, event_id) = MPIDI_OFI_EVENT_PEEK;
+ MPIDI_OFI_REQUEST(rreq, util_id) = MPIDI_OFI_PEEK_START;
+
+ msg.msg_iov = NULL;
+ msg.desc = NULL;
+ msg.iov_count = 0;
+ msg.addr = remote_proc;
+ msg.tag = match_bits;
+ msg.ignore = mask_bits;
+ msg.context = (void *) &(MPIDI_OFI_REQUEST(rreq, context));
+ msg.data = 0;
+
+ MPIDI_OFI_CALL(fi_trecvmsg
+ (MPIDI_OFI_EP_RX_TAG(0), &msg,
+ peek_flags | FI_PEEK | FI_COMPLETION | MPIDI_OFI_ENABLE_DATA), trecvmsg);
+ MPIDI_OFI_PROGRESS_WHILE(MPIDI_OFI_REQUEST(rreq, util_id) == MPIDI_OFI_PEEK_START);
+
+ switch (MPIDI_OFI_REQUEST(rreq, util_id)) {
+ case MPIDI_OFI_PEEK_NOT_FOUND:
+ *flag = 0;
+
+ if (message)
+ MPIR_Handle_obj_free(&MPIR_Request_mem, rreq);
+
+ goto fn_exit;
+ break;
+
+ case MPIDI_OFI_PEEK_FOUND:
+ MPIR_Request_extract_status(rreq, status);
+ *flag = 1;
+
+ if (message)
+ *message = rreq;
+
+ break;
+
+ default:
+ MPIR_Assert(0);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_IPROBE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_probe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_probe(int source,
+ int tag, MPIR_Comm * comm, int context_offset, MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS, flag = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_PROBE);
+
+ while (!flag) {
+ mpi_errno = MPIDI_Iprobe(source, tag, comm, context_offset, &flag, status);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_OFI_PROGRESS();
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_PROBE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_improbe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IMPROBE);
+ /* Set flags for mprobe peek, when ready */
+ int mpi_errno = MPIDI_OFI_do_iprobe(source, tag, comm, context_offset,
+ flag, status, message, FI_CLAIM | FI_COMPLETION);
+
+ if (*flag && *message) {
+ (*message)->comm = comm;
+ MPIR_Object_add_ref(comm);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IMPROBE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iprobe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IPROBE);
+ mpi_errno = MPIDI_OFI_do_iprobe(source, tag, comm, context_offset, flag, status, NULL, 0ULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IPROBE);
+ return mpi_errno;
+}
+
+#endif /* OFI_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_proc.h b/src/mpid/ch4/netmod/ofi/ofi_proc.h
new file mode 100644
index 0000000..c5814d1
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_proc.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_PROC_H_INCLUDED
+#define OFI_PROC_H_INCLUDED
+
+#include "ofi_impl.h"
+
+static inline int MPIDI_NM_rank_is_local(int rank, MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+
+ ret = MPIDI_CH4U_rank_is_local(rank, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ return ret;
+}
+
+#endif /* OFI_PROC_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_progress.h b/src/mpid/ch4/netmod/ofi/ofi_progress.h
new file mode 100644
index 0000000..a9365c3
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_progress.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_PROGRESS_H_INCLUDED
+#define OFI_PROGRESS_H_INCLUDED
+
+#include "ofi_impl.h"
+#include "ofi_events.h"
+#include "ofi_am_events.h"
+
+MPL_STATIC_INLINE_PREFIX
+ int MPIDI_OFI_progress_generic(void *netmod_context, int blocking, int do_am, int do_tagged)
+{
+ int mpi_errno;
+ struct fi_cq_tagged_entry wc[MPIDI_OFI_NUM_CQ_ENTRIES];
+ ssize_t ret;
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+
+ if (unlikely(MPIDI_OFI_get_buffered(wc, 1)))
+ mpi_errno = MPIDI_OFI_handle_cq_entries(wc, 1, 1);
+ else if (likely(1)) {
+ ret = fi_cq_read(MPIDI_Global.p2p_cq, (void *) wc, MPIDI_OFI_NUM_CQ_ENTRIES);
+
+ if (likely(ret > 0))
+ mpi_errno = MPIDI_OFI_handle_cq_entries(wc, ret, 0);
+ else if (ret == -FI_EAGAIN)
+ mpi_errno = MPI_SUCCESS;
+ else
+ mpi_errno = MPIDI_OFI_handle_cq_error(ret);
+ }
+
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+
+ MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
+ MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_progress
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_progress(void *netmod_context, int blocking)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_PROGRESS);
+ mpi_errno = MPIDI_OFI_progress_generic(netmod_context,
+ blocking, MPIDI_OFI_ENABLE_AM, MPIDI_OFI_ENABLE_TAGGED);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_PROGRESS);
+ return mpi_errno;
+}
+
+#endif /* OFI_PROGRESS_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_recv.h b/src/mpid/ch4/netmod/ofi/ofi_recv.h
new file mode 100644
index 0000000..0bb8fb0
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_recv.h
@@ -0,0 +1,286 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_RECV_H_INCLUDED
+#define OFI_RECV_H_INCLUDED
+
+#include "ofi_impl.h"
+
+#define MPIDI_OFI_ON_HEAP 0
+#define MPIDI_OFI_USE_EXISTING 1
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_irecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_do_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request, int mode, uint64_t flags)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ uint64_t match_bits, mask_bits;
+ MPIR_Context_id_t context_id = comm->recvcontext_id + context_offset;
+ size_t data_sz;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+ struct fi_msg_tagged msg;
+ char *recv_buf;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_IRECV);
+
+ if (mode == MPIDI_OFI_ON_HEAP) /* Branch should compile out */
+ MPIDI_OFI_REQUEST_CREATE(rreq, MPIR_REQUEST_KIND__RECV);
+ else if (mode == MPIDI_OFI_USE_EXISTING) {
+ rreq = *request;
+ rreq->kind = MPIR_REQUEST_KIND__RECV;
+ }
+
+ *request = rreq;
+
+ match_bits = MPIDI_OFI_init_recvtag(&mask_bits, context_id, rank, tag, MPIDI_OFI_ENABLE_DATA);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ MPIDI_OFI_REQUEST(rreq, datatype) = datatype;
+ dtype_add_ref_if_not_builtin(datatype);
+
+ recv_buf = (char *) buf + dt_true_lb;
+
+ if (!dt_contig) {
+ MPIDI_OFI_REQUEST(rreq, noncontig) =
+ (MPIDI_OFI_noncontig_t *) MPL_malloc(data_sz + sizeof(MPID_Segment));
+ MPIR_ERR_CHKANDJUMP1(MPIDI_OFI_REQUEST(rreq, noncontig->pack_buffer) == NULL, mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "Recv Pack Buffer alloc");
+ recv_buf = MPIDI_OFI_REQUEST(rreq, noncontig->pack_buffer);
+ MPID_Segment_init(buf, count, datatype, &MPIDI_OFI_REQUEST(rreq, noncontig->segment), 0);
+ }
+ else
+ MPIDI_OFI_REQUEST(rreq, noncontig) = NULL;
+
+ MPIDI_OFI_REQUEST(rreq, util_comm) = comm;
+ MPIDI_OFI_REQUEST(rreq, util_id) = context_id;
+
+ if (unlikely(data_sz > MPIDI_Global.max_send)) {
+ MPIDI_OFI_REQUEST(rreq, event_id) = MPIDI_OFI_EVENT_RECV_HUGE;
+ data_sz = MPIDI_Global.max_send;
+ }
+ else
+ MPIDI_OFI_REQUEST(rreq, event_id) = MPIDI_OFI_EVENT_RECV;
+
+ if (!flags) /* Branch should compile out */
+ MPIDI_OFI_CALL_RETRY(fi_trecv(MPIDI_OFI_EP_RX_TAG(0),
+ recv_buf,
+ data_sz,
+ NULL,
+ (MPI_ANY_SOURCE ==
+ rank) ? FI_ADDR_UNSPEC : MPIDI_OFI_comm_to_phys(comm, rank,
+ MPIDI_OFI_API_TAG),
+ match_bits, mask_bits,
+ (void *) &(MPIDI_OFI_REQUEST(rreq, context))), trecv,
+ MPIDI_OFI_CALL_LOCK);
+ else {
+ MPIDI_OFI_REQUEST(rreq, util.iov).iov_base = recv_buf;
+ MPIDI_OFI_REQUEST(rreq, util.iov).iov_len = data_sz;
+
+ msg.msg_iov = &MPIDI_OFI_REQUEST(rreq, util.iov);
+ msg.desc = NULL;
+ msg.iov_count = 1;
+ msg.tag = match_bits;
+ msg.ignore = mask_bits;
+ msg.context = (void *) &(MPIDI_OFI_REQUEST(rreq, context));
+ msg.data = 0;
+ msg.addr = FI_ADDR_UNSPEC;
+
+ MPIDI_OFI_CALL_RETRY(fi_trecvmsg(MPIDI_OFI_EP_RX_TAG(0), &msg, flags), trecv,
+ MPIDI_OFI_CALL_LOCK);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_IRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_recv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ MPI_Status * status, MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RECV);
+ mpi_errno = MPIDI_OFI_do_irecv(buf, count, datatype, rank, tag, comm,
+ context_offset, request, MPIDI_OFI_ON_HEAP, 0ULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RECV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_recv_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ MPIR_Request *rreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+
+ MPIDI_OFI_REQUEST_CREATE((rreq), MPIR_REQUEST_KIND__PREQUEST_RECV);
+
+ *request = rreq;
+ rreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+
+ MPIDI_OFI_REQUEST(rreq, util.persist.buf) = (void *) buf;
+ MPIDI_OFI_REQUEST(rreq, util.persist.count) = count;
+ MPIDI_OFI_REQUEST(rreq, datatype) = datatype;
+ MPIDI_OFI_REQUEST(rreq, util.persist.rank) = rank;
+ MPIDI_OFI_REQUEST(rreq, util.persist.tag) = tag;
+ MPIDI_OFI_REQUEST(rreq, util_comm) = comm;
+ MPIDI_OFI_REQUEST(rreq, util_id) = comm->context_id + context_offset;
+ rreq->u.persist.real_request = NULL;
+
+ MPIDI_CH4U_request_complete(rreq);
+
+ MPIDI_OFI_REQUEST(rreq, util.persist.type) = MPIDI_PTYPE_RECV;
+
+ if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
+ MPIR_Datatype *dt_ptr;
+ MPID_Datatype_get_ptr(datatype, dt_ptr);
+ MPID_Datatype_add_ref(dt_ptr);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_imrecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+
+ if (message == NULL) {
+ MPIDI_OFI_request_create_null_rreq(rreq, mpi_errno, fn_fail);
+ *rreqp = rreq;
+ goto fn_exit;
+ }
+
+ MPIR_Assert(message != NULL);
+ MPIR_Assert(message->kind == MPIR_REQUEST_KIND__MPROBE);
+
+ *rreqp = rreq = message;
+
+ mpi_errno = MPIDI_OFI_do_irecv(buf, count, datatype, message->status.MPI_SOURCE,
+ message->status.MPI_TAG, rreq->comm, 0,
+ &rreq, MPIDI_OFI_USE_EXISTING, FI_CLAIM | FI_COMPLETION);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_irecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IRECV);
+ mpi_errno = MPIDI_OFI_do_irecv(buf, count, datatype, rank, tag, comm,
+ context_offset, request, MPIDI_OFI_ON_HEAP, 0ULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IRECV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_cancel_recv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ ssize_t ret;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+
+#ifndef MPIDI_BUILD_CH4_SHM
+ MPIDI_OFI_PROGRESS();
+#endif /* MPIDI_BUILD_CH4_SHM */
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+ ret = fi_cancel((fid_t) MPIDI_OFI_EP_RX_TAG(0), &(MPIDI_OFI_REQUEST(rreq, context)));
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+
+ if (ret == 0) {
+ while ((!MPIR_STATUS_GET_CANCEL_BIT(rreq->status)) && (!MPIR_cc_is_complete(&rreq->cc))) {
+ if ((mpi_errno =
+ MPIDI_NM_progress(&MPIDI_OFI_REQUEST(rreq, context), 0)) != MPI_SUCCESS)
+ goto fn_exit;
+ }
+
+ if (MPIR_STATUS_GET_CANCEL_BIT(rreq->status)) {
+ MPIR_STATUS_SET_CANCEL_BIT(rreq->status, TRUE);
+ MPIR_STATUS_SET_COUNT(rreq->status, 0);
+ MPIDI_CH4U_request_complete(rreq);
+ }
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+ return mpi_errno;
+
+#ifndef MPIDI_BUILD_CH4_SHM
+ fn_fail:
+ goto fn_exit;
+#endif
+}
+
+#endif /* OFI_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_rma.h b/src/mpid/ch4/netmod/ofi/ofi_rma.h
new file mode 100644
index 0000000..a270b2c
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_rma.h
@@ -0,0 +1,1322 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_RMA_H_INCLUDED
+#define OFI_RMA_H_INCLUDED
+
+#include "ofi_impl.h"
+
+#define MPIDI_OFI_QUERY_ATOMIC_COUNT 0
+#define MPIDI_OFI_QUERY_FETCH_ATOMIC_COUNT 1
+#define MPIDI_OFI_QUERY_COMPARE_ATOMIC_COUNT 2
+
+#define MPIDI_OFI_INIT_CHUNK_CONTEXT(win,sigreq) \
+ do { \
+ if (sigreq) { \
+ int tmp; \
+ MPIDI_OFI_chunk_request *creq; \
+ MPIR_cc_incr((*sigreq)->cc_ptr, &tmp); \
+ creq=(MPIDI_OFI_chunk_request*)MPL_malloc(sizeof(*creq)); \
+ creq->event_id = MPIDI_OFI_EVENT_CHUNK_DONE; \
+ creq->parent = *sigreq; \
+ msg.context = &creq->context; \
+ } \
+ MPIDI_OFI_win_cntr_incr(win); \
+ } while (0)
+
+#define MPIDI_OFI_INIT_SIGNAL_REQUEST(win,sigreq,flags,ep) \
+ do { \
+ if (sigreq) \
+ { \
+ MPIDI_OFI_REQUEST_CREATE((*(sigreq)), MPIR_REQUEST_KIND__RMA); \
+ MPIR_cc_set((*(sigreq))->cc_ptr, 0); \
+ *(flags) = FI_COMPLETION | FI_DELIVERY_COMPLETE; \
+ *(ep) = MPIDI_OFI_WIN(win).ep; \
+ } \
+ else { \
+ *(ep) = MPIDI_OFI_WIN(win).ep_nocmpl; \
+ *(flags) = FI_DELIVERY_COMPLETE; \
+ } \
+ } while (0)
+
+#define MPIDI_OFI_GET_BASIC_TYPE(a,b) \
+ do { \
+ if (MPIR_DATATYPE_IS_PREDEFINED(a)) \
+ b = a; \
+ else { \
+ MPIR_Datatype *dt_ptr; \
+ MPID_Datatype_get_ptr(a,dt_ptr); \
+ b = dt_ptr->basic_type; \
+ } \
+ } while (0)
+
+static inline uint32_t MPIDI_OFI_winfo_disp_unit(MPIR_Win * win, int rank)
+{
+ uint32_t ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_WINFO_DISP_UNIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_WINFO_DISP_UNIT);
+
+ if (MPIDI_OFI_WIN(win).winfo)
+ ret = MPIDI_OFI_WIN(win).winfo[rank].disp_unit;
+ else
+ ret = win->disp_unit;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_WINFO_DISP_UNIT);
+ return ret;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_query_datatype
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_query_datatype(MPI_Datatype dt,
+ enum fi_datatype *fi_dt,
+ MPI_Op op,
+ enum fi_op *fi_op, size_t * count, size_t * dtsize)
+{
+ MPIR_Datatype *dt_ptr;
+ int op_index, dt_index, rc;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_QUERY_DATATYPE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_QUERY_DATATYPE);
+
+ MPID_Datatype_get_ptr(dt, dt_ptr);
+
+ /* OP_NULL is the oddball */
+ /* todo...change configure to table this correctly */
+ dt_index = MPIDI_OFI_DATATYPE(dt_ptr).index;
+
+ if (op == MPI_OP_NULL)
+ op_index = 14;
+ else
+ op_index = (0x000000FFU & op) - 1;
+
+ *fi_dt = (enum fi_datatype) MPIDI_Global.win_op_table[dt_index][op_index].dt;
+ *fi_op = (enum fi_op) MPIDI_Global.win_op_table[dt_index][op_index].op;
+ *dtsize = MPIDI_Global.win_op_table[dt_index][op_index].dtsize;
+
+ if (*count == MPIDI_OFI_QUERY_ATOMIC_COUNT)
+ *count = MPIDI_Global.win_op_table[dt_index][op_index].max_atomic_count;
+
+ if (*count == MPIDI_OFI_QUERY_FETCH_ATOMIC_COUNT)
+ *count = MPIDI_Global.win_op_table[dt_index][op_index].max_fetch_atomic_count;
+
+ if (*count == MPIDI_OFI_QUERY_COMPARE_ATOMIC_COUNT)
+ *count = MPIDI_Global.win_op_table[dt_index][op_index].max_compare_atomic_count;
+
+ if (((int) *fi_dt) == -1 || ((int) *fi_op) == -1)
+ rc = -1;
+ else
+ rc = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_QUERY_DATATYPE);
+ return rc;
+}
+
+
+static inline void MPIDI_OFI_win_datatype_basic(int count,
+ MPI_Datatype datatype,
+ MPIDI_OFI_win_datatype_t * dt)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_WIN_DATATYPE_BASIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_WIN_DATATYPE_BASIC);
+
+ if (datatype != MPI_DATATYPE_NULL)
+ MPIDI_Datatype_get_info(dt->count = count,
+ dt->type = datatype,
+ dt->contig, dt->size, dt->pointer, dt->true_lb);
+ else
+ memset(dt, 0, sizeof(*dt));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_WIN_DATATYPE_BASIC);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_win_datatype_map
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_OFI_win_datatype_map(MPIDI_OFI_win_datatype_t * dt)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_WIN_DATATYPE_MAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_WIN_DATATYPE_MAP);
+
+ if (dt->contig) {
+ dt->num_contig = 1;
+ dt->map = &dt->__map;
+ dt->map[0].DLOOP_VECTOR_BUF = (void *) (size_t) dt->true_lb;
+ dt->map[0].DLOOP_VECTOR_LEN = dt->size;
+ }
+ else {
+ unsigned map_size = dt->pointer->max_contig_blocks * dt->count + 1;
+ dt->num_contig = map_size;
+ dt->map = (DLOOP_VECTOR *) MPL_malloc(map_size * sizeof(DLOOP_VECTOR));
+ MPIR_Assert(dt->map != NULL);
+
+ MPID_Segment seg;
+ DLOOP_Offset last = dt->pointer->size * dt->count;
+ MPIDU_Segment_init(NULL, dt->count, dt->type, &seg, 0);
+ MPIDU_Segment_pack_vector(&seg, 0, &last, dt->map, &dt->num_contig);
+ MPIR_Assert((unsigned) dt->num_contig <= map_size);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_WIN_DATATYPE_MAP);
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_allocate_win_request_put_get(MPIR_Win * win,
+ int origin_count,
+ int target_count,
+ int target_rank,
+ MPI_Datatype origin_datatype,
+ MPI_Datatype target_datatype,
+ MPIDI_OFI_win_request_t **
+ winreq, uint64_t * flags,
+ struct fid_ep **ep,
+ MPIR_Request ** sigreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t o_size, t_size;
+ MPIDI_OFI_win_request_t *req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_PUT_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_PUT_GET);
+
+ o_size = sizeof(struct iovec);
+ t_size = sizeof(struct fi_rma_iov);
+ req = MPIDI_OFI_win_request_alloc_and_init(MPIDI_Global.iov_limit * (o_size + t_size));
+ *winreq = req;
+
+ req->noncontig->buf.iov.put_get.originv = (struct iovec *) &req->noncontig->buf.iov_store[0];
+ req->noncontig->buf.iov.put_get.targetv =
+ (struct fi_rma_iov *) &req->noncontig->buf.iov_store[o_size * MPIDI_Global.iov_limit];
+ MPIDI_OFI_INIT_SIGNAL_REQUEST(win, sigreq, flags, ep);
+ MPIDI_OFI_win_datatype_basic(origin_count, origin_datatype, &req->noncontig->origin_dt);
+ MPIDI_OFI_win_datatype_basic(target_count, target_datatype, &req->noncontig->target_dt);
+ MPIR_ERR_CHKANDJUMP((req->noncontig->origin_dt.size != req->noncontig->target_dt.size),
+ mpi_errno, MPI_ERR_SIZE, "**rmasize");
+
+ MPIDI_OFI_win_datatype_map(&req->noncontig->origin_dt);
+ MPIDI_OFI_win_datatype_map(&req->noncontig->target_dt);
+ req->target_rank = target_rank;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_PUT_GET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_allocate_win_request_accumulate(MPIR_Win * win,
+ int origin_count,
+ int target_count,
+ int target_rank,
+ MPI_Datatype origin_datatype,
+ MPI_Datatype target_datatype,
+ MPIDI_OFI_win_request_t **
+ winreq, uint64_t * flags,
+ struct fid_ep **ep,
+ MPIR_Request ** sigreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t o_size, t_size;
+ MPIDI_OFI_win_request_t *req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_ACCUMULATE);
+
+ o_size = sizeof(struct fi_ioc);
+ t_size = sizeof(struct fi_rma_ioc);
+ req = MPIDI_OFI_win_request_alloc_and_init(MPIDI_Global.iov_limit * (o_size + t_size));
+ *winreq = req;
+
+ req->noncontig->buf.iov.accumulate.originv =
+ (struct fi_ioc *) &req->noncontig->buf.iov_store[0];
+ req->noncontig->buf.iov.accumulate.targetv =
+ (struct fi_rma_ioc *) &req->noncontig->buf.iov_store[o_size * MPIDI_Global.iov_limit];
+ MPIDI_OFI_INIT_SIGNAL_REQUEST(win, sigreq, flags, ep);
+ MPIDI_OFI_win_datatype_basic(origin_count, origin_datatype, &req->noncontig->origin_dt);
+ MPIDI_OFI_win_datatype_basic(target_count, target_datatype, &req->noncontig->target_dt);
+ MPIR_ERR_CHKANDJUMP((req->noncontig->origin_dt.size != req->noncontig->target_dt.size),
+ mpi_errno, MPI_ERR_SIZE, "**rmasize");
+
+ MPIDI_OFI_win_datatype_map(&req->noncontig->origin_dt);
+ MPIDI_OFI_win_datatype_map(&req->noncontig->target_dt);
+ req->target_rank = target_rank;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_allocate_win_request_get_accumulate(MPIR_Win * win,
+ int origin_count,
+ int target_count,
+ int result_count,
+ int target_rank,
+ MPI_Op op,
+ MPI_Datatype
+ origin_datatype,
+ MPI_Datatype
+ target_datatype,
+ MPI_Datatype
+ result_datatype,
+ MPIDI_OFI_win_request_t
+ ** winreq,
+ uint64_t * flags,
+ struct fid_ep **ep,
+ MPIR_Request ** sigreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t o_size, t_size, r_size;
+ MPIDI_OFI_win_request_t *req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_GET_ACCUMULATE);
+
+ o_size = sizeof(struct fi_ioc);
+ t_size = sizeof(struct fi_rma_ioc);
+ r_size = sizeof(struct fi_ioc);
+ req = MPIDI_OFI_win_request_alloc_and_init(MPIDI_Global.iov_limit * (o_size + t_size + r_size));
+ *winreq = req;
+
+ req->noncontig->buf.iov.get_accumulate.originv =
+ (struct fi_ioc *) &req->noncontig->buf.iov_store[0];
+ req->noncontig->buf.iov.get_accumulate.targetv =
+ (struct fi_rma_ioc *) &req->noncontig->buf.iov_store[o_size * MPIDI_Global.iov_limit];
+ req->noncontig->buf.iov.get_accumulate.resultv =
+ (struct fi_ioc *) &req->noncontig->buf.iov_store[o_size * MPIDI_Global.iov_limit +
+ t_size * MPIDI_Global.rma_iov_limit];
+ MPIDI_OFI_INIT_SIGNAL_REQUEST(win, sigreq, flags, ep);
+ MPIDI_OFI_win_datatype_basic(origin_count, origin_datatype, &req->noncontig->origin_dt);
+ MPIDI_OFI_win_datatype_basic(target_count, target_datatype, &req->noncontig->target_dt);
+ MPIDI_OFI_win_datatype_basic(result_count, result_datatype, &req->noncontig->result_dt);
+
+ MPIR_ERR_CHKANDJUMP((req->noncontig->origin_dt.size != req->noncontig->target_dt.size &&
+ op != MPI_NO_OP), mpi_errno, MPI_ERR_SIZE, "**rmasize");
+ MPIR_ERR_CHKANDJUMP((req->noncontig->result_dt.size != req->noncontig->target_dt.size),
+ mpi_errno, MPI_ERR_SIZE, "**rmasize");
+
+ if (op != MPI_NO_OP)
+ MPIDI_OFI_win_datatype_map(&req->noncontig->origin_dt);
+
+ MPIDI_OFI_win_datatype_map(&req->noncontig->target_dt);
+ MPIDI_OFI_win_datatype_map(&req->noncontig->result_dt);
+
+ req->target_rank = target_rank;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_ALLOCATE_WIN_REQUEST_GET_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_put
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** sigreq)
+{
+ int rc, mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_win_request_t *req;
+ size_t offset, omax, tmax, tout, oout;
+ uint64_t flags;
+ struct fid_ep *ep;
+ struct fi_msg_rma msg;
+ unsigned i;
+ struct iovec *originv;
+ struct fi_rma_iov *targetv;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_PUT);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_allocate_win_request_put_get(win,
+ origin_count,
+ target_count,
+ target_rank,
+ origin_datatype,
+ target_datatype,
+ &req, &flags, &ep, sigreq));
+
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+
+ req->event_id = MPIDI_OFI_EVENT_ABORT;
+ msg.desc = NULL;
+ msg.addr = MPIDI_OFI_comm_to_phys(win->comm_ptr, req->target_rank, MPIDI_OFI_API_RMA);
+ msg.context = NULL;
+ msg.data = 0;
+ req->next = MPIDI_OFI_WIN(win).syncQ;
+ MPIDI_OFI_WIN(win).syncQ = req;
+ MPIDI_OFI_init_iovec_state(&req->noncontig->iovs,
+ (uintptr_t) origin_addr,
+ MPIDI_OFI_winfo_base(win, req->target_rank) + offset,
+ req->noncontig->origin_dt.num_contig,
+ req->noncontig->target_dt.num_contig,
+ INT64_MAX,
+ req->noncontig->origin_dt.map, req->noncontig->target_dt.map);
+ rc = MPIDI_OFI_IOV_EAGAIN;
+
+ while (rc == MPIDI_OFI_IOV_EAGAIN) {
+ originv = req->noncontig->buf.iov.put_get.originv;
+ targetv = req->noncontig->buf.iov.put_get.targetv;
+ omax = MPIDI_Global.iov_limit;
+ tmax = MPIDI_Global.rma_iov_limit;
+ rc = MPIDI_OFI_merge_iov_list(&req->noncontig->iovs, originv,
+ omax, targetv, tmax, &oout, &tout);
+
+ if (rc == MPIDI_OFI_IOV_DONE)
+ break;
+
+ for (i = 0; i < tout; i++)
+ targetv[i].key = MPIDI_OFI_winfo_mr_key(win, target_rank);
+ MPIR_Assert(rc != MPIDI_OFI_IOV_ERROR);
+ msg.msg_iov = originv;
+ msg.iov_count = oout;
+ msg.rma_iov = targetv;
+ msg.rma_iov_count = tout;
+ MPIDI_OFI_CALL_RETRY2(MPIDI_OFI_INIT_CHUNK_CONTEXT(win, sigreq),
+ fi_writemsg(ep, &msg, flags), rdma_write);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_PUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_put
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_PUT);
+ int target_contig, origin_contig, mpi_errno = MPI_SUCCESS;
+ size_t target_bytes, origin_bytes;
+ MPI_Aint origin_true_lb, target_true_lb;
+ size_t offset;
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+
+ MPIDI_Datatype_check_contig_size_lb(target_datatype, target_count,
+ target_contig, target_bytes, target_true_lb);
+ MPIDI_Datatype_check_contig_size_lb(origin_datatype, origin_count,
+ origin_contig, origin_bytes, origin_true_lb);
+
+ MPIR_ERR_CHKANDJUMP((origin_bytes != target_bytes), mpi_errno, MPI_ERR_SIZE, "**rmasize");
+
+ if (unlikely((origin_bytes == 0) || (target_rank == MPI_PROC_NULL)))
+ goto fn_exit;
+
+ if (target_rank == win->comm_ptr->rank) {
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+ mpi_errno = MPIR_Localcopy(origin_addr,
+ origin_count,
+ origin_datatype,
+ (char *) win->base + offset, target_count, target_datatype);
+ goto fn_exit;
+ }
+
+ if (origin_contig && target_contig && origin_bytes <= MPIDI_Global.max_buffered_write) {
+ MPIDI_OFI_CALL_RETRY2(MPIDI_OFI_win_cntr_incr(win),
+ fi_inject_write(MPIDI_OFI_WIN(win).ep_nocmpl,
+ (char *) origin_addr + origin_true_lb, target_bytes,
+ MPIDI_OFI_comm_to_phys(win->comm_ptr, target_rank,
+ MPIDI_OFI_API_RMA),
+ (uint64_t) MPIDI_OFI_winfo_base(win, target_rank)
+ + target_disp * MPIDI_OFI_winfo_disp_unit(win,
+ target_rank)
+ + target_true_lb, MPIDI_OFI_winfo_mr_key(win,
+ target_rank)),
+ rdma_inject_write);
+ }
+ else {
+ mpi_errno = MPIDI_OFI_do_put(origin_addr,
+ origin_count,
+ origin_datatype,
+ target_rank,
+ target_disp, target_count, target_datatype, win, NULL);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_PUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_get
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** sigreq)
+{
+ int rc, mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_win_request_t *req;
+ size_t offset, omax, tmax, tout, oout;
+ uint64_t flags;
+ struct fid_ep *ep;
+ struct fi_msg_rma msg;
+ struct iovec *originv;
+ struct fi_rma_iov *targetv;
+ unsigned i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_GET);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_allocate_win_request_put_get(win, origin_count, target_count,
+ target_rank,
+ origin_datatype, target_datatype,
+ &req, &flags, &ep, sigreq));
+
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+ req->event_id = MPIDI_OFI_EVENT_ABORT;
+ msg.desc = NULL;
+ msg.addr = MPIDI_OFI_comm_to_phys(win->comm_ptr, req->target_rank, MPIDI_OFI_API_RMA);
+ msg.context = NULL;
+ msg.data = 0;
+ req->next = MPIDI_OFI_WIN(win).syncQ;
+ MPIDI_OFI_WIN(win).syncQ = req;
+ MPIDI_OFI_init_iovec_state(&req->noncontig->iovs,
+ (uintptr_t) origin_addr,
+ MPIDI_OFI_winfo_base(win, req->target_rank) + offset,
+ req->noncontig->origin_dt.num_contig,
+ req->noncontig->target_dt.num_contig,
+ INT64_MAX,
+ req->noncontig->origin_dt.map, req->noncontig->target_dt.map);
+ rc = MPIDI_OFI_IOV_EAGAIN;
+
+ while (rc == MPIDI_OFI_IOV_EAGAIN) {
+ originv = req->noncontig->buf.iov.put_get.originv;
+ targetv = req->noncontig->buf.iov.put_get.targetv;
+ omax = MPIDI_Global.iov_limit;
+ tmax = MPIDI_Global.rma_iov_limit;
+ rc = MPIDI_OFI_merge_iov_list(&req->noncontig->iovs, originv,
+ omax, targetv, tmax, &oout, &tout);
+
+ if (rc == MPIDI_OFI_IOV_DONE)
+ break;
+
+ MPIR_Assert(rc != MPIDI_OFI_IOV_ERROR);
+
+ for (i = 0; i < tout; i++)
+ targetv[i].key = MPIDI_OFI_winfo_mr_key(win, target_rank);
+
+ msg.msg_iov = originv;
+ msg.iov_count = oout;
+ msg.rma_iov = targetv;
+ msg.rma_iov_count = tout;
+ MPIDI_OFI_CALL_RETRY2(MPIDI_OFI_INIT_CHUNK_CONTEXT(win, sigreq),
+ fi_readmsg(ep, &msg, flags), rdma_write);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_GET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_get
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ int origin_contig, target_contig, mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_win_datatype_t origin_dt, target_dt;
+ size_t origin_bytes;
+ size_t offset;
+ struct fi_rma_iov riov;
+ struct iovec iov;
+ struct fi_msg_rma msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GET);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+
+ MPIDI_Datatype_check_contig_size(origin_datatype, origin_count, origin_contig, origin_bytes);
+
+ if (unlikely((origin_bytes == 0) || (target_rank == MPI_PROC_NULL)))
+ goto fn_exit;
+
+ if (target_rank == win->comm_ptr->rank) {
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+ mpi_errno = MPIR_Localcopy((char *) win->base + offset,
+ target_count,
+ target_datatype, origin_addr, origin_count, origin_datatype);
+ }
+
+ MPIDI_Datatype_check_contig(origin_datatype, origin_contig);
+ MPIDI_Datatype_check_contig(target_datatype, target_contig);
+
+ if (origin_contig && target_contig) {
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+ MPIDI_OFI_win_datatype_basic(origin_count, origin_datatype, &origin_dt);
+ MPIDI_OFI_win_datatype_basic(target_count, target_datatype, &target_dt);
+ MPIR_ERR_CHKANDJUMP((origin_dt.size != target_dt.size),
+ mpi_errno, MPI_ERR_SIZE, "**rmasize");
+
+ msg.desc = NULL;
+ msg.msg_iov = &iov;
+ msg.iov_count = 1;
+ msg.addr = MPIDI_OFI_comm_to_phys(win->comm_ptr, target_rank, MPIDI_OFI_API_RMA);
+ msg.rma_iov = &riov;
+ msg.rma_iov_count = 1;
+ msg.context = NULL;
+ msg.data = 0;
+ iov.iov_base = (char *) origin_addr + origin_dt.true_lb;
+ iov.iov_len = target_dt.size;
+ riov.addr =
+ (uint64_t) (MPIDI_OFI_winfo_base(win, target_rank) + offset + target_dt.true_lb);
+ riov.len = target_dt.size;
+ riov.key = MPIDI_OFI_winfo_mr_key(win, target_rank);
+ MPIDI_OFI_CALL_RETRY2(MPIDI_OFI_win_cntr_incr(win),
+ fi_readmsg(MPIDI_OFI_WIN(win).ep_nocmpl, &msg, 0), rdma_write);
+ }
+ else {
+ mpi_errno = MPIDI_OFI_do_get(origin_addr,
+ origin_count,
+ origin_datatype,
+ target_rank,
+ target_disp, target_count, target_datatype, win, NULL);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_rput
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RPUT);
+ int mpi_errno;
+ size_t origin_bytes;
+ size_t offset;
+ MPIR_Request *rreq;
+
+ MPIDI_Datatype_check_size(origin_datatype, origin_count, origin_bytes);
+
+ if (unlikely((origin_bytes == 0) || (target_rank == MPI_PROC_NULL))) {
+ mpi_errno = MPI_SUCCESS;
+ rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Request_add_ref(rreq);
+ MPIDI_CH4U_request_complete(rreq);
+ goto fn_exit;
+ }
+
+ if (target_rank == win->comm_ptr->rank) {
+ rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Request_add_ref(rreq);
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+ mpi_errno = MPIR_Localcopy(origin_addr,
+ origin_count,
+ origin_datatype,
+ (char *) win->base + offset, target_count, target_datatype);
+ MPIDI_CH4U_request_complete(rreq);
+ goto fn_exit;
+ }
+
+ mpi_errno = MPIDI_OFI_do_put((void *) origin_addr,
+ origin_count,
+ origin_datatype,
+ target_rank,
+ target_disp, target_count, target_datatype, win, &rreq);
+
+ fn_exit:
+ *request = rreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RPUT);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_compare_and_swap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ enum fi_op fi_op;
+ enum fi_datatype fi_dt;
+ MPIDI_OFI_win_datatype_t origin_dt, target_dt, result_dt;
+ size_t offset, max_size, dt_size;
+ void *buffer, *tbuffer, *rbuffer;
+ struct fi_ioc originv, resultv, comparev;
+ struct fi_rma_ioc targetv;
+ struct fi_msg_atomic msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+
+ MPIDI_OFI_win_datatype_basic(1, datatype, &origin_dt);
+ MPIDI_OFI_win_datatype_basic(1, datatype, &result_dt);
+ MPIDI_OFI_win_datatype_basic(1, datatype, &target_dt);
+
+ if ((origin_dt.size == 0) || (target_rank == MPI_PROC_NULL))
+ goto fn_exit;
+
+ buffer = (char *) origin_addr + origin_dt.true_lb;
+ rbuffer = (char *) result_addr + result_dt.true_lb;
+ tbuffer = (void *) (MPIDI_OFI_winfo_base(win, target_rank) + offset);
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+
+ max_size = MPIDI_OFI_QUERY_COMPARE_ATOMIC_COUNT;
+ MPIDI_OFI_query_datatype(datatype, &fi_dt, MPI_OP_NULL, &fi_op, &max_size, &dt_size);
+
+ originv.addr = (void *) buffer;
+ originv.count = 1;
+ resultv.addr = (void *) rbuffer;
+ resultv.count = 1;
+ comparev.addr = (void *) compare_addr;
+ comparev.count = 1;
+ targetv.addr = (uint64_t) tbuffer;
+ targetv.count = 1;
+ targetv.key = MPIDI_OFI_winfo_mr_key(win, target_rank);;
+
+ msg.msg_iov = &originv;
+ msg.desc = NULL;
+ msg.iov_count = 1;
+ msg.addr = MPIDI_OFI_comm_to_phys(win->comm_ptr, target_rank, MPIDI_OFI_API_RMA);
+ msg.rma_iov = &targetv;
+ msg.rma_iov_count = 1;
+ msg.datatype = fi_dt;
+ msg.op = fi_op;
+ msg.context = NULL;
+ msg.data = 0;
+ MPIDI_OFI_CALL_RETRY2(MPIDI_OFI_win_cntr_incr(win),
+ fi_compare_atomicmsg(MPIDI_OFI_WIN(win).ep_nocmpl, &msg,
+ &comparev, NULL, 1, &resultv, NULL, 1, 0), atomicto);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_do_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** sigreq)
+{
+ int rc, acccheck = 0, mpi_errno = MPI_SUCCESS;
+ uint64_t flags;
+ MPIDI_OFI_win_request_t *req;
+ size_t offset, max_size, dt_size, omax, tmax, tout, oout;
+ struct fid_ep *ep;
+ MPI_Datatype basic_type;
+ enum fi_op fi_op;
+ enum fi_datatype fi_dt;
+ struct fi_msg_atomic msg;
+ struct fi_ioc *originv;
+ struct fi_rma_ioc *targetv;
+ unsigned i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_ACCUMULATE);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_allocate_win_request_accumulate(win,
+ origin_count,
+ target_count,
+ target_rank,
+ origin_datatype,
+ target_datatype,
+ &req, &flags, &ep, sigreq));
+
+ if ((req->noncontig->origin_dt.size == 0) || (target_rank == MPI_PROC_NULL)) {
+ MPIDI_OFI_win_request_complete(req);
+
+ if (sigreq)
+ MPIR_Request_free(*sigreq);
+
+ return MPI_SUCCESS;
+ }
+
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+
+ MPIDI_OFI_GET_BASIC_TYPE(target_datatype, basic_type);
+
+ switch (basic_type) {
+ /* 8 byte types */
+ case MPI_FLOAT_INT:
+ case MPI_2INT:
+ case MPI_LONG_INT:
+#ifdef HAVE_FORTRAN_BINDING
+ case MPI_2REAL:
+ case MPI_2INTEGER:
+#endif
+ {
+ basic_type = MPI_LONG_LONG;
+ acccheck = 1;
+ break;
+ }
+
+ /* 16-byte types */
+#ifdef HAVE_FORTRAN_BINDING
+
+ case MPI_2DOUBLE_PRECISION:
+#endif
+#ifdef MPICH_DEFINE_2COMPLEX
+ case MPI_2COMPLEX:
+#endif
+ {
+ basic_type = MPI_DOUBLE_COMPLEX;
+ acccheck = 1;
+ break;
+ }
+
+ /* Types with pads or too large to handle */
+ case MPI_DATATYPE_NULL:
+ case MPI_SHORT_INT:
+ case MPI_DOUBLE_INT:
+ case MPI_LONG_DOUBLE_INT:
+#ifdef MPICH_DEFINE_2COMPLEX
+ case MPI_2DOUBLE_COMPLEX:
+#endif
+ goto am_fallback;
+ }
+
+ if (acccheck && op != MPI_REPLACE)
+ goto am_fallback;
+
+ max_size = MPIDI_OFI_QUERY_ATOMIC_COUNT;
+
+ MPIDI_OFI_query_datatype(basic_type, &fi_dt, op, &fi_op, &max_size, &dt_size);
+ if (max_size == 0)
+ goto am_fallback;
+
+ req->event_id = MPIDI_OFI_EVENT_ABORT;
+ req->next = MPIDI_OFI_WIN(win).syncQ;
+ MPIDI_OFI_WIN(win).syncQ = req;
+ max_size = max_size * dt_size;
+
+ MPIDI_OFI_init_iovec_state(&req->noncontig->iovs,
+ (uintptr_t) origin_addr,
+ MPIDI_OFI_winfo_base(win, req->target_rank) + offset,
+ req->noncontig->origin_dt.num_contig,
+ req->noncontig->target_dt.num_contig,
+ max_size,
+ req->noncontig->origin_dt.map, req->noncontig->target_dt.map);
+
+ msg.desc = NULL;
+ msg.addr = MPIDI_OFI_comm_to_phys(win->comm_ptr, req->target_rank, MPIDI_OFI_API_RMA);
+ msg.context = NULL;
+ msg.data = 0;
+ msg.datatype = fi_dt;
+ msg.op = fi_op;
+ rc = MPIDI_OFI_IOV_EAGAIN;
+
+ while (rc == MPIDI_OFI_IOV_EAGAIN) {
+ originv = req->noncontig->buf.iov.accumulate.originv;
+ targetv = req->noncontig->buf.iov.accumulate.targetv;
+ omax = MPIDI_Global.iov_limit;
+ tmax = MPIDI_Global.rma_iov_limit;
+ rc = MPIDI_OFI_merge_iov_list(&req->noncontig->iovs, (struct iovec *) originv, omax,
+ (struct fi_rma_iov *) targetv, tmax, &oout, &tout);
+
+ if (rc == MPIDI_OFI_IOV_DONE)
+ break;
+
+ MPIR_Assert(rc != MPIDI_OFI_IOV_ERROR);
+
+ for (i = 0; i < tout; i++)
+ targetv[i].key = MPIDI_OFI_winfo_mr_key(win, target_rank);
+
+ for (i = 0; i < oout; i++)
+ originv[i].count /= dt_size;
+
+ for (i = 0; i < tout; i++)
+ targetv[i].count /= dt_size;
+
+ msg.msg_iov = originv;
+ msg.iov_count = oout;
+ msg.rma_iov = targetv;
+ msg.rma_iov_count = tout;
+ MPIDI_OFI_CALL_RETRY2(MPIDI_OFI_INIT_CHUNK_CONTEXT(win, sigreq),
+ fi_atomicmsg(ep, &msg, flags), rdma_atomicto);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+ am_fallback:
+ /* Fall back to active message */
+ MPIDI_OFI_win_request_complete(req);
+ return MPIDI_CH4U_mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_get_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_do_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** sigreq)
+{
+ int rc, acccheck = 0, mpi_errno = MPI_SUCCESS;
+ uint64_t flags;
+ MPIDI_OFI_win_request_t *req;
+ size_t offset, max_size, dt_size, omax, rmax, tmax, tout, rout, oout;
+ struct fid_ep *ep;
+ MPI_Datatype rt, basic_type, basic_type_res;
+ enum fi_op fi_op;
+ enum fi_datatype fi_dt;
+ struct fi_msg_atomic msg;
+ struct fi_ioc *originv, *resultv;
+ struct fi_rma_ioc *targetv;
+ unsigned i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_GET_ACCUMULATE);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_allocate_win_request_get_accumulate(win,
+ origin_count,
+ target_count,
+ result_count,
+ target_rank,
+ op,
+ origin_datatype,
+ target_datatype,
+ result_datatype,
+ &req, &flags, &ep,
+ sigreq));
+
+ if ((req->noncontig->result_dt.size == 0) || (target_rank == MPI_PROC_NULL)) {
+ MPIDI_OFI_win_request_complete(req);
+
+ if (sigreq)
+ MPIR_Request_free(*sigreq);
+
+ goto fn_exit;
+ }
+
+ offset = target_disp * MPIDI_OFI_winfo_disp_unit(win, target_rank);
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+
+ MPIDI_OFI_GET_BASIC_TYPE(target_datatype, basic_type);
+ rt = result_datatype;
+
+ switch (basic_type) {
+ /* 8 byte types */
+ case MPI_FLOAT_INT:
+ case MPI_2INT:
+ case MPI_LONG_INT:
+#ifdef HAVE_FORTRAN_BINDING
+ case MPI_2REAL:
+ case MPI_2INTEGER:
+#endif
+ {
+ basic_type = rt = MPI_LONG_LONG;
+ acccheck = 1;
+ break;
+ }
+
+ /* 16-byte types */
+#ifdef HAVE_FORTRAN_BINDING
+
+ case MPI_2DOUBLE_PRECISION:
+#endif
+#ifdef MPICH_DEFINE_2COMPLEX
+ case MPI_2COMPLEX:
+#endif
+ {
+ basic_type = rt = MPI_DOUBLE_COMPLEX;
+ acccheck = 1;
+ break;
+ }
+
+ /* Types with pads or too large to handle */
+ case MPI_DATATYPE_NULL:
+ case MPI_SHORT_INT:
+ case MPI_DOUBLE_INT:
+ case MPI_LONG_DOUBLE_INT:
+#ifdef MPICH_DEFINE_2COMPLEX
+ case MPI_2DOUBLE_COMPLEX:
+#endif
+ goto am_fallback;
+ break;
+ }
+
+ if (acccheck && op != MPI_REPLACE && op != MPI_NO_OP)
+ goto am_fallback;
+
+ MPIDI_OFI_GET_BASIC_TYPE(rt, basic_type_res);
+ MPIR_Assert(basic_type_res != MPI_DATATYPE_NULL);
+
+ max_size = MPIDI_OFI_QUERY_FETCH_ATOMIC_COUNT;
+ MPIDI_OFI_query_datatype(basic_type_res, &fi_dt, op, &fi_op, &max_size, &dt_size);
+ max_size = max_size * dt_size;
+ if (max_size == 0)
+ goto am_fallback;
+
+ req->event_id = MPIDI_OFI_EVENT_RMA_DONE;
+ req->next = MPIDI_OFI_WIN(win).syncQ;
+ MPIDI_OFI_WIN(win).syncQ = req;
+
+ if (op != MPI_NO_OP)
+ MPIDI_OFI_init_iovec_state2(&req->noncontig->iovs,
+ (uintptr_t) origin_addr,
+ (uintptr_t) result_addr,
+ MPIDI_OFI_winfo_base(win, req->target_rank) + offset,
+ req->noncontig->origin_dt.num_contig,
+ req->noncontig->result_dt.num_contig,
+ req->noncontig->target_dt.num_contig, max_size,
+ req->noncontig->origin_dt.map, req->noncontig->result_dt.map,
+ req->noncontig->target_dt.map);
+ else
+ MPIDI_OFI_init_iovec_state(&req->noncontig->iovs,
+ (uintptr_t) result_addr,
+ MPIDI_OFI_winfo_base(win, req->target_rank) + offset,
+ req->noncontig->result_dt.num_contig,
+ req->noncontig->target_dt.num_contig,
+ max_size,
+ req->noncontig->result_dt.map, req->noncontig->target_dt.map);
+
+ msg.desc = NULL;
+ msg.addr = MPIDI_OFI_comm_to_phys(win->comm_ptr, req->target_rank, MPIDI_OFI_API_RMA);
+ msg.context = NULL;
+ msg.data = 0;
+ msg.datatype = fi_dt;
+ msg.op = fi_op;
+ rc = MPIDI_OFI_IOV_EAGAIN;
+
+ while (rc == MPIDI_OFI_IOV_EAGAIN) {
+ originv = req->noncontig->buf.iov.get_accumulate.originv;
+ targetv = req->noncontig->buf.iov.get_accumulate.targetv;
+ resultv = req->noncontig->buf.iov.get_accumulate.resultv;
+ omax = rmax = MPIDI_Global.iov_limit;
+ tmax = MPIDI_Global.rma_iov_limit;
+
+ if (op != MPI_NO_OP)
+ rc = MPIDI_OFI_merge_iov_list2(&req->noncontig->iovs, (struct iovec *) originv,
+ omax, (struct iovec *) resultv, rmax,
+ (struct fi_rma_iov *) targetv, tmax, &oout, &rout,
+ &tout);
+ else {
+ oout = 0;
+ rc = MPIDI_OFI_merge_iov_list(&req->noncontig->iovs, (struct iovec *) resultv,
+ rmax, (struct fi_rma_iov *) targetv, tmax, &rout, &tout);
+ }
+
+ if (rc == MPIDI_OFI_IOV_DONE)
+ break;
+
+ MPIR_Assert(rc != MPIDI_OFI_IOV_ERROR);
+
+ for (i = 0; i < oout; i++)
+ originv[i].count /= dt_size;
+
+ for (i = 0; i < rout; i++)
+ resultv[i].count /= dt_size;
+
+ for (i = 0; i < tout; i++) {
+ targetv[i].count /= dt_size;
+ targetv[i].key = MPIDI_OFI_winfo_mr_key(win, target_rank);
+ }
+
+ msg.msg_iov = originv;
+ msg.iov_count = oout;
+ msg.rma_iov = targetv;
+ msg.rma_iov_count = tout;
+ MPIDI_OFI_CALL_RETRY2(MPIDI_OFI_INIT_CHUNK_CONTEXT(win, sigreq),
+ fi_fetch_atomicmsg(ep, &msg, resultv,
+ NULL, rout, flags), rdma_readfrom);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_GET_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+ am_fallback:
+ MPIDI_OFI_win_request_complete(req);
+ return MPIDI_CH4U_mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_raccumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+ MPIR_Request *rreq;
+ int mpi_errno = MPIDI_OFI_do_accumulate((void *) origin_addr,
+ origin_count,
+ origin_datatype,
+ target_rank,
+ target_disp,
+ target_count,
+ target_datatype,
+ op,
+ win,
+ &rreq);
+ *request = rreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_rget_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+
+ mpi_errno = MPIDI_OFI_do_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, &rreq);
+ *request = rreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_fetch_and_op
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+
+ /* This can be optimized by directly calling the fi directly
+ * and avoiding all the datatype processing of the full
+ * MPIDI_Get_accumulate
+ */
+ mpi_errno = MPIDI_OFI_do_get_accumulate(origin_addr, 1, datatype,
+ result_addr, 1, datatype,
+ target_rank, target_disp, 1, datatype, op, win, NULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_rget
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RGET);
+ int mpi_errno;
+ size_t origin_bytes;
+ size_t offset;
+ MPIR_Request *rreq;
+
+ MPIDI_Datatype_check_size(origin_datatype, origin_count, origin_bytes);
+
+ if (unlikely((origin_bytes == 0) || (target_rank == MPI_PROC_NULL))) {
+ mpi_errno = MPI_SUCCESS;
+ rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Request_add_ref(rreq);
+ MPIDI_CH4U_request_complete(rreq);
+ goto fn_exit;
+ }
+
+ if (target_rank == win->comm_ptr->rank) {
+ rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Request_add_ref(rreq);
+ offset = win->disp_unit * target_disp;
+ mpi_errno = MPIR_Localcopy((char *) win->base + offset,
+ target_count,
+ target_datatype, origin_addr, origin_count, origin_datatype);
+ MPIDI_CH4U_request_complete(rreq);
+ goto fn_exit;
+ }
+
+ mpi_errno = MPIDI_OFI_do_get(origin_addr,
+ origin_count,
+ origin_datatype,
+ target_rank,
+ target_disp, target_count, target_datatype, win, &rreq);
+ fn_exit:
+ *request = rreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RGET);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_get_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DO_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DO_GET_ACCUMULATE);
+ mpi_errno = MPIDI_OFI_do_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, NULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DO_GET_ACCUMULATE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+ int mpi_errno = MPIDI_OFI_do_accumulate(origin_addr,
+ origin_count,
+ origin_datatype,
+ target_rank,
+ target_disp,
+ target_count,
+ target_datatype,
+ op,
+ win,
+ NULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+ return mpi_errno;
+}
+
+#endif /* OFI_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_send.h b/src/mpid/ch4/netmod/ofi/ofi_send.h
new file mode 100644
index 0000000..b4178fc
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_send.h
@@ -0,0 +1,567 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_SEND_H_INCLUDED
+#define OFI_SEND_H_INCLUDED
+
+#include "ofi_impl.h"
+#include <../mpi/pt2pt/bsendutil.h>
+
+#define MPIDI_OFI_SENDPARAMS const void *buf,int count,MPI_Datatype datatype, \
+ int rank,int tag,MPIR_Comm *comm, \
+ int context_offset,MPIR_Request **request
+
+#define MPIDI_OFI_SENDARGS buf,count,datatype,rank,tag, \
+ comm,context_offset,request
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_send_lightweight
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_send_lightweight(const void *buf,
+ size_t data_sz,
+ int rank,
+ int tag, MPIR_Comm * comm,
+ int context_offset)
+{
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t match_bits;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_SEND_LIGHTWEIGHT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_SEND_LIGHTWEIGHT);
+ match_bits =
+ MPIDI_OFI_init_sendtag(comm->context_id + context_offset, comm->rank, tag, 0,
+ MPIDI_OFI_ENABLE_DATA);
+ mpi_errno =
+ MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0), buf, data_sz, NULL, comm->rank,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_TAG), match_bits,
+ NULL, MPIDI_OFI_DO_INJECT, MPIDI_OFI_ENABLE_DATA,
+ MPIDI_OFI_CALL_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_SEND_LIGHTWEIGHT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_send_lightweight_request
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_send_lightweight_request(const void *buf,
+ size_t data_sz,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t match_bits;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_SEND_LIGHTWEIGHT_REQUEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_SEND_LIGHTWEIGHT_REQUEST);
+ MPIR_Request *r;
+ MPIDI_OFI_SEND_REQUEST_CREATE_LW(r);
+ *request = r;
+ match_bits =
+ MPIDI_OFI_init_sendtag(comm->context_id + context_offset, comm->rank, tag, 0,
+ MPIDI_OFI_ENABLE_DATA);
+ mpi_errno =
+ MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0), buf, data_sz, NULL, comm->rank,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_TAG), match_bits,
+ NULL, MPIDI_OFI_DO_INJECT, MPIDI_OFI_ENABLE_DATA,
+ MPIDI_OFI_CALL_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_SEND_LIGHTWEIGHT_REQUEST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_send_normal
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_send_normal(MPIDI_OFI_SENDPARAMS,
+ int dt_contig,
+ size_t data_sz,
+ MPIR_Datatype * dt_ptr,
+ MPI_Aint dt_true_lb, uint64_t type)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPI_Aint last;
+ char *send_buf;
+ uint64_t match_bits;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_SEND_NORMAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_SEND_NORMAL);
+
+ MPIDI_OFI_REQUEST_CREATE(sreq, MPIR_REQUEST_KIND__SEND);
+ *request = sreq;
+ match_bits =
+ MPIDI_OFI_init_sendtag(comm->context_id + context_offset, comm->rank, tag, type,
+ MPIDI_OFI_ENABLE_DATA);
+ MPIDI_OFI_REQUEST(sreq, event_id) = MPIDI_OFI_EVENT_SEND;
+ MPIDI_OFI_REQUEST(sreq, datatype) = datatype;
+ dtype_add_ref_if_not_builtin(datatype);
+
+ if (type == MPIDI_OFI_SYNC_SEND) { /* Branch should compile out */
+ int c = 1;
+ uint64_t ssend_match, ssend_mask;
+ MPIDI_OFI_ssendack_request_t *ackreq;
+ MPIDI_OFI_SSEND_ACKREQUEST_CREATE(ackreq);
+ ackreq->event_id = MPIDI_OFI_EVENT_SSEND_ACK;
+ ackreq->signal_req = sreq;
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+ ssend_match =
+ MPIDI_OFI_init_recvtag(&ssend_mask, comm->context_id + context_offset, rank, tag,
+ MPIDI_OFI_ENABLE_DATA);
+ ssend_match |= MPIDI_OFI_SYNC_SEND_ACK;
+ MPIDI_OFI_CALL_RETRY(fi_trecv(MPIDI_OFI_EP_RX_TAG(0), /* endpoint */
+ NULL, /* recvbuf */
+ 0, /* data sz */
+ NULL, /* memregion descr */
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_TAG), /* remote proc */
+ ssend_match, /* match bits */
+ 0ULL, /* mask bits */
+ (void *) &(ackreq->context)), trecvsync, MPIDI_OFI_CALL_LOCK);
+ }
+
+ send_buf = (char *) buf + dt_true_lb;
+
+ if (!dt_contig) {
+ size_t segment_first;
+ segment_first = 0;
+ last = data_sz;
+ MPIDI_OFI_REQUEST(sreq, noncontig) =
+ (MPIDI_OFI_noncontig_t *) MPL_malloc(data_sz + sizeof(MPID_Segment));
+ MPIR_ERR_CHKANDJUMP1(MPIDI_OFI_REQUEST(sreq, noncontig) == NULL, mpi_errno, MPI_ERR_OTHER,
+ "**nomem", "**nomem %s", "Send Pack buffer alloc");
+ MPID_Segment_init(buf, count, datatype, &MPIDI_OFI_REQUEST(sreq, noncontig->segment), 0);
+ MPID_Segment_pack(&MPIDI_OFI_REQUEST(sreq, noncontig->segment), segment_first, &last,
+ MPIDI_OFI_REQUEST(sreq, noncontig->pack_buffer));
+ send_buf = MPIDI_OFI_REQUEST(sreq, noncontig->pack_buffer);
+ }
+ else
+ MPIDI_OFI_REQUEST(sreq, noncontig) = NULL;
+
+ if (data_sz <= MPIDI_Global.max_buffered_send) {
+ mpi_errno =
+ MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0), send_buf, data_sz, NULL, comm->rank,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_TAG),
+ match_bits, NULL, MPIDI_OFI_DO_INJECT, MPIDI_OFI_ENABLE_DATA,
+ MPIDI_OFI_CALL_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ MPIDI_OFI_send_event(NULL, sreq);
+ }
+ else if (data_sz <= MPIDI_Global.max_send) {
+ mpi_errno =
+ MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0), send_buf, data_sz, NULL, comm->rank,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_TAG),
+ match_bits, (void *) &(MPIDI_OFI_REQUEST(sreq, context)),
+ MPIDI_OFI_DO_SEND, MPIDI_OFI_ENABLE_DATA, MPIDI_OFI_CALL_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ else if (unlikely(1)) {
+ MPIDI_OFI_send_control_t ctrl;
+ int c;
+ uint64_t rma_key = 0;
+ MPIDI_OFI_huge_counter_t *cntr;
+ void *ptr;
+ c = 1;
+ MPIDI_OFI_REQUEST(sreq, event_id) = MPIDI_OFI_EVENT_SEND_HUGE;
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+ ptr = MPIDI_OFI_map_lookup(MPIDI_OFI_COMM(comm).huge_send_counters, rank);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+
+ if (ptr == MPIDI_OFI_MAP_NOT_FOUND) {
+ ptr = MPL_malloc(sizeof(MPIDI_OFI_huge_counter_t));
+ cntr = (MPIDI_OFI_huge_counter_t *) ptr;
+ cntr->outstanding = 0;
+ cntr->counter = 0;
+ MPIDI_OFI_map_set(MPIDI_OFI_COMM(comm).huge_send_counters, rank, ptr);
+ }
+
+ cntr = (MPIDI_OFI_huge_counter_t *) ptr;
+
+ ctrl.rma_key = MPIDI_OFI_index_allocator_alloc(MPIDI_OFI_COMM(comm).rma_id_allocator);
+ MPIR_Assert(ctrl.rma_key < MPIDI_Global.max_huge_rmas);
+ if (MPIDI_OFI_ENABLE_MR_SCALABLE)
+ rma_key = ctrl.rma_key << MPIDI_Global.huge_rma_shift;
+ MPIDI_OFI_CALL_NOLOCK(fi_mr_reg(MPIDI_Global.domain, /* In: Domain Object */
+ send_buf, /* In: Lower memory address */
+ data_sz, /* In: Length */
+ FI_REMOTE_READ, /* In: Expose MR for read */
+ 0ULL, /* In: offset(not used) */
+ rma_key, /* In: requested key */
+ 0ULL, /* In: flags */
+ &cntr->mr, /* Out: memregion object */
+ NULL), mr_reg); /* In: context */
+
+ if (!MPIDI_OFI_ENABLE_MR_SCALABLE) {
+ /* MR_BASIC */
+ ctrl.rma_key = fi_mr_key(cntr->mr);
+ }
+
+ cntr->outstanding++;
+ cntr->counter++;
+ MPIR_Assert(cntr->outstanding != USHRT_MAX);
+ MPIR_Assert(cntr->counter != USHRT_MAX);
+ MPIDI_OFI_REQUEST(sreq, util_comm) = comm;
+ MPIDI_OFI_REQUEST(sreq, util_id) = rank;
+ mpi_errno = MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0), send_buf,
+ MPIDI_Global.max_send,
+ NULL,
+ comm->rank,
+ MPIDI_OFI_comm_to_phys(comm, rank, MPIDI_OFI_API_TAG),
+ match_bits,
+ (void *) &(MPIDI_OFI_REQUEST(sreq, context)),
+ MPIDI_OFI_DO_SEND, MPIDI_OFI_ENABLE_DATA,
+ MPIDI_OFI_CALL_NO_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ ctrl.type = MPIDI_OFI_CTRL_HUGE;
+ ctrl.seqno = cntr->counter - 1;
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_do_control_send
+ (&ctrl, send_buf, data_sz, rank, comm, sreq, FALSE));
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_SEND_NORMAL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_send(MPIDI_OFI_SENDPARAMS, int noreq, uint64_t syncflag)
+{
+ int dt_contig, mpi_errno;
+ size_t data_sz;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_SEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ if (likely(!syncflag && dt_contig && (data_sz <= MPIDI_Global.max_buffered_send)))
+ if (noreq)
+ mpi_errno = MPIDI_OFI_send_lightweight((char *) buf + dt_true_lb, data_sz,
+ rank, tag, comm, context_offset);
+ else
+ mpi_errno = MPIDI_OFI_send_lightweight_request((char *) buf + dt_true_lb, data_sz,
+ rank, tag, comm, context_offset,
+ request);
+ else
+ mpi_errno = MPIDI_OFI_send_normal(buf, count, datatype, rank, tag, comm,
+ context_offset, request, dt_contig,
+ data_sz, dt_ptr, dt_true_lb, syncflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_SEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_persistent_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_OFI_persistent_send(MPIDI_OFI_SENDPARAMS)
+{
+ MPIR_Request *sreq;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_PERSISTENT_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_PERSISTENT_SEND);
+
+ MPIDI_OFI_REQUEST_CREATE(sreq, MPIR_REQUEST_KIND__PREQUEST_SEND);
+ *request = sreq;
+
+ MPIR_Comm_add_ref(comm);
+ sreq->comm = comm;
+ MPIDI_OFI_REQUEST(sreq, util.persist.buf) = (void *) buf;
+ MPIDI_OFI_REQUEST(sreq, util.persist.count) = count;
+ MPIDI_OFI_REQUEST(sreq, datatype) = datatype;
+ MPIDI_OFI_REQUEST(sreq, util.persist.rank) = rank;
+ MPIDI_OFI_REQUEST(sreq, util.persist.tag) = tag;
+ MPIDI_OFI_REQUEST(sreq, util_comm) = comm;
+ MPIDI_OFI_REQUEST(sreq, util_id) = comm->context_id + context_offset;
+ sreq->u.persist.real_request = NULL;
+ MPIDI_CH4U_request_complete(sreq);
+
+ if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
+ MPIR_Datatype *dt_ptr;
+ MPID_Datatype_get_ptr(datatype, dt_ptr);
+ MPID_Datatype_add_ref(dt_ptr);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_PERSISTENT_SEND);
+ return MPI_SUCCESS;
+}
+
+#define STARTALL_CASE(CASELABEL,FUNC,CONTEXTID) \
+ case CASELABEL: \
+ { \
+ rc = FUNC(MPIDI_OFI_REQUEST(preq,util.persist.buf), \
+ MPIDI_OFI_REQUEST(preq,util.persist.count), \
+ MPIDI_OFI_REQUEST(preq,datatype), \
+ MPIDI_OFI_REQUEST(preq,util.persist.rank), \
+ MPIDI_OFI_REQUEST(preq,util.persist.tag), \
+ preq->comm, \
+ MPIDI_OFI_REQUEST(preq,util_id) - \
+ CONTEXTID, \
+ &preq->u.persist.real_request); \
+ break; \
+ }
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_send(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SEND);
+ mpi_errno = MPIDI_OFI_send(MPIDI_OFI_SENDARGS, 1, 0ULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_rsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_rsend(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_RSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_RSEND);
+ mpi_errno = MPIDI_OFI_send(MPIDI_OFI_SENDARGS, 1, 0ULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_RSEND);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_irsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_irsend(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_IRSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_IRSEND);
+ mpi_errno = MPIDI_OFI_send(MPIDI_OFI_SENDARGS, 0, 0ULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_IRSEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ssend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ssend(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SSEND);
+ mpi_errno = MPIDI_OFI_send(MPIDI_OFI_SENDARGS, 0, MPIDI_OFI_SYNC_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SSEND);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_isend(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISEND);
+ mpi_errno = MPIDI_OFI_send(MPIDI_OFI_SENDARGS, 0, 0ULL);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_issend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_issend(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISSEND);
+ mpi_errno = MPIDI_OFI_send(MPIDI_OFI_SENDARGS, 0, MPIDI_OFI_SYNC_SEND);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISSEND);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_startall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ int rc = MPI_SUCCESS, i;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_STARTALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_STARTALL);
+
+ for (i = 0; i < count; i++) {
+ MPIR_Request *const preq = requests[i];
+
+ switch (MPIDI_OFI_REQUEST(preq, util.persist.type)) {
+#ifdef MPIDI_BUILD_CH4_SHM
+ STARTALL_CASE(MPIDI_PTYPE_RECV, MPIDI_NM_mpi_irecv, preq->comm->recvcontext_id);
+#else
+ STARTALL_CASE(MPIDI_PTYPE_RECV, MPIDI_Irecv, preq->comm->recvcontext_id);
+#endif
+
+#ifdef MPIDI_BUILD_CH4_SHM
+ STARTALL_CASE(MPIDI_PTYPE_SEND, MPIDI_NM_mpi_isend, preq->comm->context_id);
+#else
+ STARTALL_CASE(MPIDI_PTYPE_SEND, MPIDI_Isend, preq->comm->context_id);
+#endif
+ STARTALL_CASE(MPIDI_PTYPE_SSEND, MPIDI_Issend, preq->comm->context_id);
+
+ case MPIDI_PTYPE_BSEND:{
+ MPI_Request sreq_handle;
+ rc = MPIR_Ibsend_impl(MPIDI_OFI_REQUEST(preq, util.persist.buf),
+ MPIDI_OFI_REQUEST(preq, util.persist.count),
+ MPIDI_OFI_REQUEST(preq, datatype),
+ MPIDI_OFI_REQUEST(preq, util.persist.rank),
+ MPIDI_OFI_REQUEST(preq, util.persist.tag),
+ preq->comm, &sreq_handle);
+
+ if (rc == MPI_SUCCESS)
+ MPIR_Request_get_ptr(sreq_handle, preq->u.persist.real_request);
+
+ break;
+ }
+
+ default:
+ rc = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, __FUNCTION__,
+ __LINE__, MPI_ERR_INTERN, "**ch3|badreqtype",
+ "**ch3|badreqtype %d", MPIDI_OFI_REQUEST(preq,
+ util.persist.type));
+ }
+
+ if (rc == MPI_SUCCESS) {
+ preq->status.MPI_ERROR = MPI_SUCCESS;
+
+ if (MPIDI_OFI_REQUEST(preq, util.persist.type) == MPIDI_PTYPE_BSEND) {
+ preq->cc_ptr = &preq->cc;
+ MPIR_cc_set(&preq->cc, 0);
+ }
+ else
+ preq->cc_ptr = &preq->u.persist.real_request->cc;
+ }
+ else {
+ preq->u.persist.real_request = NULL;
+ preq->status.MPI_ERROR = rc;
+ preq->cc_ptr = &preq->cc;
+ MPIR_cc_set(&preq->cc, 0);
+ }
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_STARTALL);
+ return rc;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_send_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_send_init(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SEND_INIT);
+ mpi_errno = MPIDI_OFI_persistent_send(MPIDI_OFI_SENDARGS);
+ MPIDI_OFI_REQUEST((*request), util.persist.type) = MPIDI_PTYPE_SEND;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ssend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_ssend_init(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SSEND_INIT);
+ mpi_errno = MPIDI_OFI_persistent_send(MPIDI_OFI_SENDARGS);
+ MPIDI_OFI_REQUEST((*request), util.persist.type) = MPIDI_PTYPE_SSEND;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SSEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_bsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_bsend_init(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BSEND_INIT);
+ mpi_errno = MPIDI_OFI_persistent_send(MPIDI_OFI_SENDARGS);
+ MPIDI_OFI_REQUEST((*request), util.persist.type) = MPIDI_PTYPE_BSEND;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BSEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_rsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_rsend_init(MPIDI_OFI_SENDPARAMS)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RSEND_INIT);
+ mpi_errno = MPIDI_OFI_persistent_send(MPIDI_OFI_SENDARGS);
+ MPIDI_OFI_REQUEST((*request), util.persist.type) = MPIDI_PTYPE_SEND;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RSEND_INIT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_cancel_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_CANCEL_SEND);
+ /* Sends cannot be cancelled */
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_CANCEL_SEND);
+ return mpi_errno;
+}
+
+#endif /* OFI_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_spawn.h b/src/mpid/ch4/netmod/ofi/ofi_spawn.h
new file mode 100644
index 0000000..a445159
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_spawn.h
@@ -0,0 +1,593 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_SPAWN_H_INCLUDED
+#define OFI_SPAWN_H_INCLUDED
+
+#include "ofi_impl.h"
+
+#define MPIDI_OFI_PORT_NAME_TAG_KEY "tag"
+#define MPIDI_OFI_CONNENTRY_TAG_KEY "connentry"
+
+// FIXME:
+#ifdef MPIDI_OFI_CONFIG_USE_AV_TABLE
+#define MPIDI_OFI_TABLE_INDEX_INCR()
+#else
+#define MPIDI_OFI_TABLE_INDEX_INCR()
+#endif
+
+static inline void MPIDI_OFI_free_port_name_tag(int tag)
+{
+ int index, rem_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_FREE_PORT_NAME_TAG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_FREE_PORT_NAME_TAG);
+
+ index = tag / (sizeof(int) * 8);
+ rem_tag = tag - (index * sizeof(int) * 8);
+
+ MPIDI_Global.port_name_tag_mask[index] &= ~(1 << ((8 * sizeof(int)) - 1 - rem_tag));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_FREE_PORT_NAME_TAG);
+}
+
+
+static inline int MPIDI_OFI_get_port_name_tag(int *port_name_tag)
+{
+ unsigned i, j;
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_GET_PORT_NAME_TAG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_GET_PORT_NAME_TAG);
+
+ for (i = 0; i < MPIR_MAX_CONTEXT_MASK; i++)
+ if (MPIDI_Global.port_name_tag_mask[i] != ~0)
+ break;
+
+ if (i < MPIR_MAX_CONTEXT_MASK)
+ for (j = 0; j < (8 * sizeof(int)); j++) {
+ if ((MPIDI_Global.port_name_tag_mask[i] | (1 << ((8 * sizeof(int)) - j - 1))) !=
+ MPIDI_Global.port_name_tag_mask[i]) {
+ MPIDI_Global.port_name_tag_mask[i] |= (1 << ((8 * sizeof(int)) - j - 1));
+ *port_name_tag = ((i * 8 * sizeof(int)) + j);
+ goto fn_exit;
+ }
+ }
+ else
+ goto fn_fail;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_GET_PORT_NAME_TAG);
+ return mpi_errno;
+
+ fn_fail:
+ *port_name_tag = -1;
+ mpi_errno = MPI_ERR_OTHER;
+ goto fn_exit;
+}
+
+static inline int MPIDI_OFI_get_tag_from_port(const char *port_name, int *port_name_tag)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int str_errno = MPL_STR_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_GET_TAG_FROM_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_GET_TAG_FROM_PORT);
+
+ if (strlen(port_name) == 0)
+ goto fn_exit;
+
+ str_errno = MPL_str_get_int_arg(port_name, MPIDI_OFI_PORT_NAME_TAG_KEY, port_name_tag);
+ MPIR_ERR_CHKANDJUMP(str_errno, mpi_errno, MPI_ERR_OTHER, "**argstr_no_port_name_tag");
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_GET_TAG_FROM_PORT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+static inline int MPIDI_OFI_get_conn_name_from_port(const char *port_name, char *connname)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int maxlen = MPIDI_KVSAPPSTRLEN;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_GET_CONN_NAME_FROM_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_GET_CONN_NAME_FROM_PORT);
+
+ MPL_str_get_binary_arg(port_name,
+ MPIDI_OFI_CONNENTRY_TAG_KEY,
+ connname, MPIDI_Global.addrnamelen, &maxlen);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_GET_CONN_NAME_FROM_PORT);
+ return mpi_errno;
+}
+
+static inline int MPIDI_OFI_dynproc_create_intercomm(const char *port_name,
+ char *addr_table,
+ MPID_Node_id_t * node_table,
+ int entries,
+ MPIR_Comm * comm_ptr,
+ MPIR_Comm ** newcomm,
+ int is_low_group, char *api)
+{
+ int i, context_id_offset, mpi_errno = MPI_SUCCESS;
+ MPIR_Comm *tmp_comm_ptr = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DYNPROC_CREATE_INTERCOMM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DYNPROC_CREATE_INTERCOMM);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_get_tag_from_port(port_name, &context_id_offset));
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Comm_create(&tmp_comm_ptr));
+
+ tmp_comm_ptr->context_id = MPIR_CONTEXT_SET_FIELD(DYNAMIC_PROC, context_id_offset, 1);
+ tmp_comm_ptr->recvcontext_id = tmp_comm_ptr->context_id;
+ tmp_comm_ptr->remote_size = entries;
+ tmp_comm_ptr->local_size = comm_ptr->local_size;
+ tmp_comm_ptr->rank = comm_ptr->rank;
+ tmp_comm_ptr->comm_kind = MPIR_COMM_KIND__INTERCOMM;
+ tmp_comm_ptr->local_comm = comm_ptr;
+ tmp_comm_ptr->is_low_group = is_low_group;
+ MPIDI_COMM(tmp_comm_ptr, local_map).mode = MPIDI_COMM(comm_ptr, map).mode;
+ MPIDI_COMM(tmp_comm_ptr, local_map).size = MPIDI_COMM(comm_ptr, map).size;
+ MPIDI_COMM(tmp_comm_ptr, local_map).avtid = MPIDI_COMM(comm_ptr, map).avtid;
+ switch (MPIDI_COMM(comm_ptr, map).mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ MPIDI_COMM(tmp_comm_ptr, local_map).reg.offset = MPIDI_COMM(comm_ptr, map).reg.offset;
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ MPIDI_COMM(tmp_comm_ptr, local_map).reg.stride.stride =
+ MPIDI_COMM(comm_ptr, map).reg.stride.stride;
+ MPIDI_COMM(tmp_comm_ptr, local_map).reg.stride.blocksize =
+ MPIDI_COMM(comm_ptr, map).reg.stride.blocksize;
+ MPIDI_COMM(tmp_comm_ptr, local_map).reg.stride.offset =
+ MPIDI_COMM(comm_ptr, map).reg.stride.offset;
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ MPIDI_COMM(tmp_comm_ptr, local_map).irreg.lut.t = MPIDI_COMM(comm_ptr, map).irreg.lut.t;
+ MPIDI_COMM(tmp_comm_ptr, local_map).irreg.lut.lpid =
+ MPIDI_COMM(comm_ptr, map).irreg.lut.lpid;
+ MPIR_Object_add_ref(MPIDI_COMM(comm_ptr, map).irreg.lut.t);
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ MPIDI_COMM(tmp_comm_ptr, local_map).irreg.mlut.t = MPIDI_COMM(comm_ptr, map).irreg.mlut.t;
+ MPIDI_COMM(tmp_comm_ptr, local_map).irreg.mlut.gpid =
+ MPIDI_COMM(comm_ptr, map).irreg.mlut.gpid;
+ MPIR_Object_add_ref(MPIDI_COMM(comm_ptr, map).irreg.mlut.t);
+ break;
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+
+ int avtid;
+ avtid = 0;
+ MPIDIU_new_avt(entries, &avtid);
+
+#ifdef MPIDI_OFI_CONFIG_USE_AV_TABLE
+ MPIDI_OFI_CALL(fi_av_insert(MPIDI_Global.av, addr_table, entries, NULL, 0ULL, NULL), avmap);
+#else
+ fi_addr_t *mapped_table;
+ mapped_table = (fi_addr_t *) MPL_malloc(entries * sizeof(fi_addr_t));
+
+ MPIDI_OFI_CALL(fi_av_insert(MPIDI_Global.av, addr_table, entries,
+ mapped_table, 0ULL, NULL), avmap);
+ for (i = 0; i < entries; i++) {
+ MPIDI_OFI_AV(&MPIDIU_get_av(avtid, i)).dest = mapped_table[i];
+ }
+ MPL_free(mapped_table);
+#endif
+
+ MPIDIU_update_node_map(avtid, entries, node_table);
+
+ /* set mapping for remote group */
+ MPIDI_COMM(tmp_comm_ptr, map).mode = MPIDI_RANK_MAP_DIRECT;
+ MPIDI_COMM(tmp_comm_ptr, map).size = entries;
+ MPIDI_COMM(tmp_comm_ptr, map).avtid = avtid;
+
+ MPIR_Comm_commit(tmp_comm_ptr);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Comm_dup_impl(tmp_comm_ptr, newcomm));
+
+ tmp_comm_ptr->local_comm = NULL; /* avoid freeing local comm with comm_release */
+ MPIR_Comm_release(tmp_comm_ptr);
+
+ MPL_free(addr_table);
+ MPL_free(node_table);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DYNPROC_CREATE_INTERCOMM);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_OFI_dynproc_bcast(int root,
+ MPIR_Comm * comm_ptr,
+ int *out_root,
+ ssize_t * out_table_size,
+ char **out_addr_table, MPID_Node_id_t ** out_node_table)
+{
+ int entries, mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DYNPROC_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DYNPROC_BCAST);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Bcast_intra(out_root, 1, MPI_INT, root, comm_ptr, &errflag));
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Bcast_intra(out_table_size, 1, MPI_LONG_LONG_INT,
+ root, comm_ptr, &errflag));
+
+ if (*out_addr_table == NULL)
+ *out_addr_table = (char *) MPL_malloc(*out_table_size);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Bcast_intra(*out_addr_table, *out_table_size,
+ MPI_CHAR, root, comm_ptr, &errflag));
+
+ entries = *out_table_size / MPIDI_Global.addrnamelen;
+
+ if (*out_node_table == NULL)
+ *out_node_table = (MPID_Node_id_t *) MPL_malloc(MPIDI_Global.addrnamelen * entries);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Bcast_intra(*out_node_table, entries * sizeof(MPID_Node_id_t),
+ MPI_CHAR, root, comm_ptr, &errflag));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DYNPROC_BCAST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+static inline int MPIDI_OFI_dynproc_exchange_map(int root,
+ int phase,
+ int port_id,
+ fi_addr_t * conn,
+ char *conname,
+ MPIR_Comm * comm_ptr,
+ ssize_t * out_table_size,
+ int *out_root,
+ char **out_addr_table,
+ MPID_Node_id_t ** out_node_table)
+{
+ int i, mpi_errno = MPI_SUCCESS;
+
+ MPIDI_OFI_dynamic_process_request_t req[2];
+ uint64_t match_bits = 0;
+ uint64_t mask_bits = 0;
+ struct fi_msg_tagged msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_DYNPROC_EXCHANGE_MAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_DYNPROC_EXCHANGE_MAP);
+
+ req[0].done = MPIDI_OFI_PEEK_START;
+ req[0].event_id = MPIDI_OFI_EVENT_ACCEPT_PROBE;
+ req[1].done = MPIDI_OFI_PEEK_START;
+ req[1].event_id = MPIDI_OFI_EVENT_ACCEPT_PROBE;
+ match_bits = MPIDI_OFI_init_recvtag(&mask_bits, port_id,
+ MPI_ANY_SOURCE, MPI_ANY_TAG, MPIDI_OFI_ENABLE_DATA);
+ match_bits |= MPIDI_OFI_DYNPROC_SEND;
+
+ if (phase == 0) {
+ /* Receive the addresses */
+ /* We don't know the size, so probe for table size */
+ /* Receive phase updates the connection */
+ /* With the probed address */
+ msg.msg_iov = NULL;
+ msg.desc = NULL;
+ msg.iov_count = 0;
+ msg.addr = FI_ADDR_UNSPEC;
+ msg.tag = match_bits;
+ msg.ignore = mask_bits;
+ msg.context = (void *) &req[0].context;
+ msg.data = 0;
+
+ while (req[0].done != MPIDI_OFI_PEEK_FOUND) {
+ req[0].done = MPIDI_OFI_PEEK_START;
+ MPIDI_OFI_CALL(fi_trecvmsg
+ (MPIDI_OFI_EP_RX_TAG(0), &msg,
+ FI_PEEK | FI_COMPLETION | MPIDI_OFI_ENABLE_DATA), trecv);
+ MPIDI_OFI_PROGRESS_WHILE(req[0].done == MPIDI_OFI_PEEK_START);
+ }
+
+ *out_table_size = req[0].msglen;
+ *out_root = req[0].tag;
+ *out_addr_table = (char *) MPL_malloc(*out_table_size);
+
+ int entries = req[0].msglen / MPIDI_Global.addrnamelen;
+ *out_node_table = (MPID_Node_id_t *) MPL_malloc(entries * sizeof(MPID_Node_id_t));
+
+ req[0].done = 0;
+ req[0].event_id = MPIDI_OFI_EVENT_DYNPROC_DONE;
+ req[1].done = 0;
+ req[1].event_id = MPIDI_OFI_EVENT_DYNPROC_DONE;
+
+ MPIDI_OFI_CALL_RETRY(fi_trecv(MPIDI_OFI_EP_RX_TAG(0),
+ *out_addr_table,
+ *out_table_size,
+ NULL,
+ FI_ADDR_UNSPEC,
+ match_bits,
+ mask_bits, &req[0].context), trecv, MPIDI_OFI_CALL_LOCK);
+ MPIDI_OFI_CALL_RETRY(fi_trecv(MPIDI_OFI_EP_RX_TAG(0),
+ *out_node_table,
+ entries * sizeof(MPID_Node_id_t),
+ NULL,
+ FI_ADDR_UNSPEC,
+ match_bits,
+ mask_bits, &req[1].context), trecv, MPIDI_OFI_CALL_LOCK);
+
+ MPIDI_OFI_PROGRESS_WHILE(!req[0].done || !req[1].done);
+ memcpy(conname, *out_addr_table + req[0].source * MPIDI_Global.addrnamelen,
+ MPIDI_Global.addrnamelen);
+ }
+
+ if (phase == 1) {
+ /* Send our table to the child */
+ /* Send phase maps the entry */
+ char *my_addr_table;
+ int tag = root;
+ int tblsz = MPIDI_Global.addrnamelen * comm_ptr->local_size;
+ my_addr_table = (char *) MPL_malloc(tblsz);
+
+ MPID_Node_id_t *my_node_table;
+ MPID_Node_id_t nodetblsz = sizeof(*my_node_table) * comm_ptr->local_size;
+ my_node_table = (MPID_Node_id_t *) MPL_malloc(nodetblsz);
+
+ match_bits = MPIDI_OFI_init_sendtag(port_id,
+ comm_ptr->rank,
+ tag, MPIDI_OFI_DYNPROC_SEND, MPIDI_OFI_ENABLE_DATA);
+
+ for (i = 0; i < comm_ptr->local_size; i++) {
+ size_t sz = MPIDI_Global.addrnamelen;
+ MPIDI_OFI_CALL(fi_av_lookup(MPIDI_Global.av,
+ MPIDI_OFI_COMM_TO_PHYS(comm_ptr, i),
+ my_addr_table + i * MPIDI_Global.addrnamelen,
+ &sz), avlookup);
+ MPIR_Assert(sz == MPIDI_Global.addrnamelen);
+ }
+
+ for (i = 0; i < comm_ptr->local_size; i++)
+ MPIDI_CH4U_get_node_id(comm_ptr, i, &my_node_table[i]);
+
+ /* fi_av_map here is not quite right for some providers */
+ /* we need to get this connection from the sockname */
+ req[0].done = 0;
+ req[0].event_id = MPIDI_OFI_EVENT_DYNPROC_DONE;
+ req[1].done = 0;
+ req[1].event_id = MPIDI_OFI_EVENT_DYNPROC_DONE;
+ mpi_errno = MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0),
+ my_addr_table,
+ tblsz,
+ NULL,
+ comm_ptr->rank,
+ *conn,
+ match_bits,
+ (void *) &req[0].context,
+ MPIDI_OFI_DO_SEND, MPIDI_OFI_ENABLE_DATA,
+ MPIDI_OFI_CALL_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ MPIDI_OFI_send_handler(MPIDI_OFI_EP_TX_TAG(0),
+ my_node_table,
+ nodetblsz,
+ NULL,
+ comm_ptr->rank,
+ *conn,
+ match_bits,
+ (void *) &req[1].context,
+ MPIDI_OFI_DO_SEND, MPIDI_OFI_ENABLE_DATA, MPIDI_OFI_CALL_LOCK);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_OFI_PROGRESS_WHILE(!req[0].done || !req[1].done);
+
+ MPL_free(my_addr_table);
+ MPL_free(my_node_table);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_DYNPROC_EXCHANGE_MAP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_connect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm)
+{
+ int entries, mpi_errno = MPI_SUCCESS;
+ char *parent_addr_table = NULL;
+ MPID_Node_id_t *parent_node_table = NULL;
+ ssize_t parent_table_sz = -1LL;
+ int parent_root = -1;
+ int rank = comm_ptr->rank;
+ int port_id;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_CONNECT);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_SPAWN_MUTEX);
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_get_tag_from_port(port_name, &port_id));
+
+ if (rank == root) {
+ fi_addr_t conn;
+ char conname[FI_NAME_MAX];
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_get_conn_name_from_port(port_name, conname));
+ MPIDI_OFI_CALL(fi_av_insert(MPIDI_Global.av, conname, 1, &conn, 0ULL, NULL), avmap);
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_exchange_map
+ (root, 1, port_id, &conn, conname, comm_ptr, &parent_table_sz,
+ &parent_root, &parent_addr_table, &parent_node_table));
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_exchange_map
+ (root, 0, port_id, &conn, conname, comm_ptr, &parent_table_sz,
+ &parent_root, &parent_addr_table, &parent_node_table));
+ MPIDI_OFI_CALL(fi_av_remove(MPIDI_Global.av, &conn, 1, 0ULL), avmap);
+ }
+
+ /* Map the new address table */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_bcast(root, comm_ptr, &parent_root,
+ &parent_table_sz,
+ &parent_addr_table, &parent_node_table));
+
+ /* Now Create the New Intercomm */
+ entries = parent_table_sz / MPIDI_Global.addrnamelen;
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_create_intercomm(port_name,
+ parent_addr_table,
+ parent_node_table,
+ entries,
+ comm_ptr,
+ newcomm, 0, (char *) "Connect"));
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_SPAWN_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_CONNECT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_disconnect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_DISCONNECT);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Barrier_impl(comm_ptr, &errflag));
+ MPIDI_OFI_MPI_CALL_POP(MPIR_Comm_free_impl(comm_ptr));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_DISCONNECT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_comm_open_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int str_errno = MPL_STR_SUCCESS;
+ int port_name_tag = 0;
+ int len = MPI_MAX_PORT_NAME;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_OPEN_PORT);
+
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_get_port_name_tag(&port_name_tag));
+ MPIDI_OFI_STR_CALL(MPL_str_add_int_arg(&port_name, &len, MPIDI_OFI_PORT_NAME_TAG_KEY,
+ port_name_tag), port_str);
+ MPIDI_OFI_STR_CALL(MPL_str_add_binary_arg(&port_name, &len, MPIDI_OFI_CONNENTRY_TAG_KEY,
+ MPIDI_Global.addrname,
+ MPIDI_Global.addrnamelen), port_str);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_OPEN_PORT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_comm_close_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_close_port(const char *port_name)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int port_name_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_CLOSE_PORT);
+
+ mpi_errno = MPIDI_OFI_get_tag_from_port(port_name, &port_name_tag);
+ MPIDI_OFI_free_port_name_tag(port_name_tag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_CLOSE_PORT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_comm_close_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm)
+{
+ int entries, mpi_errno = MPI_SUCCESS;
+ char *child_addr_table = NULL;
+ MPID_Node_id_t *child_node_table = NULL;
+ ssize_t child_table_sz = -1LL;
+ int child_root = -1;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_ACCEPT);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_SPAWN_MUTEX);
+ int rank = comm_ptr->rank;
+
+ if (rank == root) {
+ fi_addr_t conn;
+ char conname[FI_NAME_MAX];
+ int port_id;
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_get_tag_from_port(port_name, &port_id));
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_exchange_map
+ (root, 0, port_id, &conn, conname, comm_ptr, &child_table_sz,
+ &child_root, &child_addr_table, &child_node_table));
+ MPIDI_OFI_CALL(fi_av_insert(MPIDI_Global.av, conname, 1, &conn, 0ULL, NULL), avmap);
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_exchange_map
+ (root, 1, port_id, &conn, conname, comm_ptr, &child_table_sz,
+ &child_root, &child_addr_table, &child_node_table));
+ MPIDI_OFI_CALL(fi_av_remove(MPIDI_Global.av, &conn, 1, 0ULL), avmap);
+ }
+
+ /* Map the new address table */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_bcast(root, comm_ptr, &child_root,
+ &child_table_sz,
+ &child_addr_table, &child_node_table));
+ /* Now Create the New Intercomm */
+ entries = child_table_sz / MPIDI_Global.addrnamelen;
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_dynproc_create_intercomm(port_name,
+ child_addr_table,
+ child_node_table,
+ entries,
+ comm_ptr,
+ newcomm, 1, (char *) "Accept"));
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_SPAWN_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_ACCEPT);
+ return mpi_errno;
+
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* OFI_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_types.h b/src/mpid/ch4/netmod/ofi/ofi_types.h
new file mode 100644
index 0000000..779da4b
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_types.h
@@ -0,0 +1,537 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_TYPES_H_INCLUDED
+#define OFI_TYPES_H_INCLUDED
+
+#include <netdb.h>
+#include <stddef.h>
+#include <inttypes.h>
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#include "ofi_pre.h"
+#include "ch4_types.h"
+#include "mpidch4r.h"
+#include "fi_list.h"
+
+#define __SHORT_FILE__ \
+ (strrchr(__FILE__,'/') \
+ ? strrchr(__FILE__,'/')+1 \
+ : __FILE__ \
+)
+#define MPIDI_OFI_MAP_NOT_FOUND ((void*)(-1UL))
+#define MPIDI_OFI_MAJOR_VERSION 1
+#define MPIDI_OFI_MINOR_VERSION 0
+#define MPIDI_OFI_DEFAULT_SHORT_SEND_SIZE (16 * 1024)
+#define MPIDI_OFI_NUM_AM_BUFFERS (8)
+#define MPIDI_OFI_AM_BUFF_SZ (1 * 1024 * 1024)
+#define MPIDI_OFI_CACHELINE_SIZE (64)
+#define MPIDI_OFI_IOV_MAX (32)
+#define MPIDI_OFI_BUF_POOL_SIZE (1024)
+#define MPIDI_OFI_BUF_POOL_NUM (1024)
+#define MPIDI_OFI_NUM_CQ_BUFFERED (1024)
+#define MPIDI_OFI_INTERNAL_HANDLER_CONTROL (MPIDI_AM_HANDLERS_MAX-1)
+#define MPIDI_OFI_INTERNAL_HANDLER_NEXT (MPIDI_AM_HANDLERS_MAX-2)
+
+#ifdef USE_OFI_TAGGED
+#define MPIDI_OFI_ENABLE_TAGGED 1
+#define MPIDI_OFI_ENABLE_AM 1
+#define MPIDI_OFI_ENABLE_RMA 1
+#else
+#define MPIDI_OFI_ENABLE_TAGGED 0
+#define MPIDI_OFI_ENABLE_AM 1
+#define MPIDI_OFI_ENABLE_RMA 1
+#endif
+
+#ifdef MPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS
+#define MPIDI_OFI_ENABLE_SCALABLE_ENDPOINTS 1
+#else
+#define MPIDI_OFI_ENABLE_SCALABLE_ENDPOINTS 0
+#endif
+
+#ifdef MPIDI_OFI_CONFIG_USE_AV_TABLE
+#define MPIDI_OFI_ENABLE_AV_TABLE 1
+#else
+#define MPIDI_OFI_ENABLE_AV_TABLE 0
+#endif
+
+#ifdef USE_OFI_IMMEDIATE_DATA
+#define MPIDI_OFI_ENABLE_DATA FI_REMOTE_CQ_DATA
+#else
+#define MPIDI_OFI_ENABLE_DATA 0
+#endif
+
+#ifdef USE_OFI_STX_RMA
+#define MPIDI_OFI_ENABLE_STX_RMA 1
+#else
+#define MPIDI_OFI_ENABLE_STX_RMA 0
+#endif
+
+#ifdef USE_OFI_MR_SCALABLE
+#define MPIDI_OFI_ENABLE_MR_SCALABLE 1
+#else
+#define MPIDI_OFI_ENABLE_MR_SCALABLE 0
+#endif
+
+#ifdef USE_OFI_IMMEDIATE_DATA
+/* match/ignore bit manipulation
+ *
+ * 0123 4567 01234567 01234567 01234567 01234567 01234567 01234567 01234567
+ * | | |
+ * ^ | Unused | context id | message tag
+ * | | | |
+ * +---- protocol
+ */
+#define MPIDI_OFI_PROTOCOL_MASK (0x9000000000000000ULL)
+#define MPIDI_OFI_CONTEXT_MASK (0x00007FFF80000000ULL)
+#define MPIDI_OFI_SOURCE_MASK (0x0000000000000000ULL)
+#define MPIDI_OFI_TAG_MASK (0x000000007FFFFFFFULL)
+#define MPIDI_OFI_SYNC_SEND (0x1000000000000000ULL)
+#define MPIDI_OFI_SYNC_SEND_ACK (0x2000000000000000ULL)
+#define MPIDI_OFI_DYNPROC_SEND (0x4000000000000000ULL)
+#define MPIDI_OFI_TAG_SHIFT (31)
+#define MPIDI_OFI_SOURCE_SHIFT (0)
+#else
+/* match/ignore bit manipulation
+ *
+ * 0123 4567 01234567 0123 4567 01234567 0123 4567 01234567 01234567 01234567
+ * | | |
+ * ^ | context id | source | message tag
+ * | | | |
+ * +---- protocol
+ */
+#define MPIDI_OFI_PROTOCOL_MASK (0x9000000000000000ULL)
+#define MPIDI_OFI_CONTEXT_MASK (0x0FFFF00000000000ULL)
+#define MPIDI_OFI_SOURCE_MASK (0x00000FFFF0000000ULL)
+#define MPIDI_OFI_TAG_MASK (0x000000000FFFFFFFULL)
+#define MPIDI_OFI_SYNC_SEND (0x1000000000000000ULL)
+#define MPIDI_OFI_SYNC_SEND_ACK (0x2000000000000000ULL)
+#define MPIDI_OFI_DYNPROC_SEND (0x4000000000000000ULL)
+#define MPIDI_OFI_TAG_SHIFT (28)
+#define MPIDI_OFI_SOURCE_SHIFT (16)
+#endif
+
+/* RMA Key Space division
+ * | | | |
+ * ... Context ID | Huge RMA | Window Instance |
+ * | | | |
+ */
+/* 64-bit key space */
+/* 2M window instances per comm */
+/* 2M outstanding huge RMAS per comm */
+/* 4M communicators */
+#define MPIDI_OFI_MAX_WINDOWS_BITS_64 (21)
+#define MPIDI_OFI_MAX_HUGE_RMA_BITS_64 (21)
+#define MPIDI_OFI_MAX_HUGE_RMAS_64 (1<<(MPIDI_OFI_MAX_HUGE_RMA_BITS_64))
+#define MPIDI_OFI_MAX_WINDOWS_64 (1<<(MPIDI_OFI_MAX_WINDOWS_BITS_64))
+#define MPIDI_OFI_HUGE_RMA_SHIFT_64 (MPIDI_OFI_MAX_WINDOWS_BITS_64)
+#define MPIDI_OFI_CONTEXT_SHIFT_64 (MPIDI_OFI_MAX_WINDOWS_BITS_64+MPIDI_OFI_MAX_HUGE_RMA_BITS_64)
+
+/* 32-bit key space */
+/* 4096 window instances per comm */
+/* 256 outstanding huge RMAS per comm */
+/* 4096 communicators */
+#define MPIDI_OFI_MAX_WINDOWS_BITS_32 (12)
+#define MPIDI_OFI_MAX_HUGE_RMA_BITS_32 (8)
+#define MPIDI_OFI_MAX_HUGE_RMAS_32 (1<<(MPIDI_OFI_MAX_HUGE_RMA_BITS_32))
+#define MPIDI_OFI_MAX_WINDOWS_32 (1<<(MPIDI_OFI_MAX_WINDOWS_BITS_32))
+#define MPIDI_OFI_HUGE_RMA_SHIFT_32 (MPIDI_OFI_MAX_WINDOWS_BITS_32)
+#define MPIDI_OFI_CONTEXT_SHIFT_32 (MPIDI_OFI_MAX_WINDOWS_BITS_32+MPIDI_OFI_MAX_HUGE_RMA_BITS_32)
+
+/* 16-bit key space */
+/* 64 window instances per comm */
+/* 16 outstanding huge RMAS per comm */
+/* 64 communicators */
+#define MPIDI_OFI_MAX_WINDOWS_BITS_16 (6)
+#define MPIDI_OFI_MAX_HUGE_RMA_BITS_16 (4)
+#define MPIDI_OFI_MAX_HUGE_RMAS_16 (1<<(MPIDI_OFI_MAX_HUGE_RMA_BITS_16))
+#define MPIDI_OFI_MAX_WINDOWS_16 (1<<(MPIDI_OFI_MAX_WINDOWS_BITS_16))
+#define MPIDI_OFI_HUGE_RMA_SHIFT_16 (MPIDI_OFI_MAX_WINDOWS_BITS_16)
+#define MPIDI_OFI_CONTEXT_SHIFT_16 (MPIDI_OFI_MAX_WINDOWS_BITS_16+MPIDI_OFI_MAX_HUGE_RMA_BITS_16)
+
+#ifdef HAVE_FORTRAN_BINDING
+#ifdef MPICH_DEFINE_2COMPLEX
+#define MPIDI_OFI_DT_SIZES 62
+#else
+#define MPIDI_OFI_DT_SIZES 60
+#endif
+#else
+#define MPIDI_OFI_DT_SIZES 40
+#endif
+#define MPIDI_OFI_OP_SIZES 15
+
+#define MPIDI_OFI_API_TAG 0
+#define MPIDI_OFI_API_RMA 1
+#define MPIDI_OFI_API_MSG 2
+#define MPIDI_OFI_API_CTR 3
+
+#define MPIDI_OFI_THREAD_UTIL_MUTEX MPIDI_Global.mutexes[0].m
+#define MPIDI_OFI_THREAD_PROGRESS_MUTEX MPIDI_Global.mutexes[1].m
+#define MPIDI_OFI_THREAD_FI_MUTEX MPIDI_Global.mutexes[2].m
+#define MPIDI_OFI_THREAD_SPAWN_MUTEX MPIDI_Global.mutexes[3].m
+
+/* Field accessor macros */
+#define MPIDI_OFI_OBJECT_HEADER_SIZE offsetof(MPIDI_OFI_offset_checker_t, pad)
+#define MPIDI_OFI_AMREQUEST(req,field) ((req)->dev.ch4.am.netmod_am.ofi.field)
+#define MPIDI_OFI_AMREQUEST_HDR(req,field) ((req)->dev.ch4.am.netmod_am.ofi.req_hdr->field)
+#define MPIDI_OFI_AMREQUEST_HDR_PTR(req) ((req)->dev.ch4.am.netmod_am.ofi.req_hdr)
+#define MPIDI_OFI_REQUEST(req,field) ((req)->dev.ch4.netmod.ofi.field)
+#define MPIDI_OFI_AV(av) ((av)->netmod.ofi)
+
+#define MPIDI_OFI_DATATYPE(dt) ((dt)->dev.netmod.ofi)
+#define MPIDI_OFI_COMM(comm) ((comm)->dev.ch4.netmod.ofi)
+
+#ifdef MPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS
+#define MPIDI_OFI_COMM_TO_EP(comm,rank) MPIDI_OFI_AV(MPIDIU_comm_rank_to_av(comm, rank)).ep_idx
+#define MPIDI_OFI_EP_TX_TAG(x) MPIDI_Global.ctx[x].tx_tag
+#define MPIDI_OFI_EP_TX_RMA(x) MPIDI_Global.ctx[x].tx_rma
+#define MPIDI_OFI_EP_TX_MSG(x) MPIDI_Global.ctx[x].tx_msg
+#define MPIDI_OFI_EP_TX_CTR(x) MPIDI_Global.ctx[x].tx_ctr
+#define MPIDI_OFI_EP_RX_TAG(x) MPIDI_Global.ctx[x].rx_tag
+#define MPIDI_OFI_EP_RX_RMA(x) MPIDI_Global.ctx[x].rx_rma
+#define MPIDI_OFI_EP_RX_MSG(x) MPIDI_Global.ctx[x].rx_msg
+#else
+#define MPIDI_OFI_COMM_TO_EP(comm,rank) 0
+#define MPIDI_OFI_EP_TX_TAG(x) MPIDI_Global.ep
+#define MPIDI_OFI_EP_TX_RMA(x) MPIDI_Global.ep
+#define MPIDI_OFI_EP_TX_MSG(x) MPIDI_Global.ep
+#define MPIDI_OFI_EP_TX_CTR(x) MPIDI_Global.ep
+#define MPIDI_OFI_EP_RX_TAG(x) MPIDI_Global.ep
+#define MPIDI_OFI_EP_RX_RMA(x) MPIDI_Global.ep
+#define MPIDI_OFI_EP_RX_MSG(x) MPIDI_Global.ep
+#endif
+
+#define MPIDI_OFI_DO_SEND 0
+#define MPIDI_OFI_DO_INJECT 1
+#define MPIDI_OFI_NUM_CQ_ENTRIES 8
+
+/* Typedefs */
+enum {
+ MPIDI_OFI_CTRL_ASSERT, /**< Lock acknowledge */
+ MPIDI_OFI_CTRL_LOCKACK, /**< Lock acknowledge */
+ MPIDI_OFI_CTRL_LOCKALLACK,/**< Lock all acknowledge */
+ MPIDI_OFI_CTRL_LOCKREQ, /**< Lock window */
+ MPIDI_OFI_CTRL_LOCKALLREQ,/**< Lock all window */
+ MPIDI_OFI_CTRL_UNLOCK, /**< Unlock window */
+ MPIDI_OFI_CTRL_UNLOCKACK, /**< Unlock window */
+ MPIDI_OFI_CTRL_UNLOCKALL, /**< Unlock window */
+ MPIDI_OFI_CTRL_UNLOCKALLACK,
+ /**< Unlock window */
+ MPIDI_OFI_CTRL_COMPLETE, /**< End a START epoch */
+ MPIDI_OFI_CTRL_POST, /**< Begin POST epoch */
+ MPIDI_OFI_CTRL_HUGE, /**< Huge message */
+ MPIDI_OFI_CTRL_HUGEACK, /**< Huge message ack */
+ MPIDI_OFI_CTRL_HUGE_CLEANUP
+ /**< Huge message cleanup */
+};
+
+enum {
+ MPIDI_OFI_EVENT_ABORT,
+ MPIDI_OFI_EVENT_SEND,
+ MPIDI_OFI_EVENT_RECV,
+ MPIDI_OFI_EVENT_RMA_DONE,
+ MPIDI_OFI_EVENT_AM_SEND,
+ MPIDI_OFI_EVENT_AM_RECV,
+ MPIDI_OFI_EVENT_AM_READ,
+ MPIDI_OFI_EVENT_AM_MULTI,
+ MPIDI_OFI_EVENT_PEEK,
+ MPIDI_OFI_EVENT_RECV_HUGE,
+ MPIDI_OFI_EVENT_SEND_HUGE,
+ MPIDI_OFI_EVENT_SSEND_ACK,
+ MPIDI_OFI_EVENT_GET_HUGE,
+ MPIDI_OFI_EVENT_CHUNK_DONE,
+ MPIDI_OFI_EVENT_INJECT_EMU,
+ MPIDI_OFI_EVENT_DYNPROC_DONE,
+ MPIDI_OFI_EVENT_ACCEPT_PROBE
+};
+
+enum {
+ MPIDI_OFI_REQUEST_LOCK,
+ MPIDI_OFI_REQUEST_LOCKALL
+};
+
+enum {
+ MPIDI_OFI_PEEK_START,
+ MPIDI_OFI_PEEK_NOT_FOUND,
+ MPIDI_OFI_PEEK_FOUND
+};
+
+typedef struct {
+ char pad[MPIDI_REQUEST_HDR_SIZE];
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ int index;
+} MPIDI_OFI_am_repost_request_t;
+
+typedef struct {
+ char pad[MPIDI_REQUEST_HDR_SIZE];
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ MPIR_Request *signal_req;
+} MPIDI_OFI_ssendack_request_t;
+
+typedef struct {
+ char pad[MPIDI_REQUEST_HDR_SIZE];
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ int done;
+ uint32_t tag;
+ uint32_t source;
+ uint64_t msglen;
+} MPIDI_OFI_dynamic_process_request_t;
+
+typedef struct {
+ uint8_t op;
+ uint8_t dt;
+ unsigned atomic_valid:2;
+ unsigned fetch_atomic_valid:2;
+ unsigned compare_atomic_valid:2;
+ unsigned dtsize:10;
+ uint64_t max_atomic_count;
+ uint64_t max_compare_atomic_count;
+ uint64_t max_fetch_atomic_count;
+} MPIDI_OFI_atomic_valid_t;
+
+typedef struct {
+ struct fid_ep *tx_tag;
+ struct fid_ep *rx_tag;
+
+ struct fid_ep *tx_rma;
+ struct fid_ep *rx_rma;
+
+ struct fid_ep *tx_msg;
+ struct fid_ep *rx_msg;
+
+ struct fid_ep *tx_ctr;
+
+ int ctx_offset;
+} MPIDI_OFI_context_t;
+
+typedef union {
+ MPID_Thread_mutex_t m;
+ char cacheline[MPIDI_OFI_CACHELINE_SIZE];
+} MPIDI_OFI_cacheline_mutex_t __attribute__ ((aligned(MPIDI_OFI_CACHELINE_SIZE)));
+
+typedef struct {
+ struct fi_cq_tagged_entry cq_entry;
+ fi_addr_t source;
+ struct slist_entry entry;
+} MPIDI_OFI_cq_list_t;
+
+typedef struct {
+ struct fi_cq_tagged_entry cq_entry;
+} MPIDI_OFI_cq_buff_entry_t;
+
+/* Global state data */
+#define MPIDI_KVSAPPSTRLEN 1024
+typedef struct {
+ /* OFI objects */
+ int avtid;
+ struct fi_info *prov_use;
+ struct fid_domain *domain;
+ struct fid_fabric *fabric;
+ struct fid_av *av;
+ struct fid_ep *ep;
+ struct fid_cq *p2p_cq;
+ struct fid_cntr *rma_cmpl_cntr;
+ struct fid_stx *stx_ctx; /* shared TX context for RMA */
+
+ /* Queryable limits */
+ uint64_t max_buffered_send;
+ uint64_t max_buffered_write;
+ uint64_t max_send;
+ uint64_t max_write;
+ uint64_t max_short_send;
+ uint64_t max_mr_key_size;
+ int max_windows_bits;
+ int max_huge_rma_bits;
+ int max_huge_rmas;
+ int huge_rma_shift;
+ int context_shift;
+ size_t iov_limit;
+ size_t rma_iov_limit;
+
+ /* Mutexex and endpoints */
+ MPIDI_OFI_cacheline_mutex_t mutexes[4];
+ MPIDI_OFI_context_t ctx[MPIDI_OFI_MAX_ENDPOINTS];
+
+ /* Window/RMA Globals */
+ void *win_map;
+ uint64_t rma_issued_cntr;
+ MPIDI_OFI_atomic_valid_t win_op_table[MPIDI_OFI_DT_SIZES][MPIDI_OFI_OP_SIZES];
+
+ /* Active Message Globals */
+ struct iovec am_iov[MPIDI_OFI_NUM_AM_BUFFERS];
+ struct fi_msg am_msg[MPIDI_OFI_NUM_AM_BUFFERS];
+ void *am_bufs[MPIDI_OFI_NUM_AM_BUFFERS];
+ MPIDI_OFI_am_repost_request_t am_reqs[MPIDI_OFI_NUM_AM_BUFFERS];
+ MPIU_buf_pool_t *am_buf_pool;
+ OPA_int_t am_inflight_inject_emus;
+ OPA_int_t am_inflight_rma_send_mrs;
+
+ /* Completion queue buffering */
+ MPIDI_OFI_cq_buff_entry_t cq_buffered[MPIDI_OFI_NUM_CQ_BUFFERED];
+ struct slist cq_buff_list;
+ int cq_buff_head;
+ int cq_buff_tail;
+
+ /* Process management and PMI globals */
+ int pname_set;
+ int pname_len;
+ int jobid;
+ char addrname[FI_NAME_MAX];
+ size_t addrnamelen;
+ char kvsname[MPIDI_KVSAPPSTRLEN];
+ char pname[MPI_MAX_PROCESSOR_NAME];
+ int port_name_tag_mask[MPIR_MAX_CONTEXT_MASK];
+} MPIDI_OFI_global_t;
+
+typedef struct {
+ uint32_t index;
+} MPIDI_OFI_datatype_t;
+/* These control structures have to be the same size */
+typedef struct {
+ int16_t type;
+ int16_t lock_type;
+ int origin_rank;
+ uint64_t win_id;
+ int dummy[8];
+} MPIDI_OFI_win_control_t;
+
+typedef struct {
+ int16_t type;
+ int16_t seqno;
+ int origin_rank;
+ MPIR_Request *ackreq;
+ uintptr_t send_buf;
+ size_t msgsize;
+ int comm_id;
+ int endpoint_id;
+ uint64_t rma_key;
+} MPIDI_OFI_send_control_t;
+
+typedef struct {
+ MPIR_OBJECT_HEADER;
+ void *pad;
+} MPIDI_OFI_offset_checker_t;
+
+typedef struct {
+ uintptr_t target_base_addr;
+ uintptr_t origin_base_addr;
+ uintptr_t result_base_addr;
+ size_t target_count;
+ size_t origin_count;
+ size_t result_count;
+ struct iovec *target_iov;
+ struct iovec *origin_iov;
+ struct iovec *result_iov;
+ size_t target_idx;
+ uintptr_t target_addr;
+ uintptr_t target_size;
+ size_t origin_idx;
+ uintptr_t origin_addr;
+ uintptr_t origin_size;
+ size_t result_idx;
+ uintptr_t result_addr;
+ uintptr_t result_size;
+ size_t buf_limit;
+ size_t buf_limit_left;
+} MPIDI_OFI_iovec_state_t;
+
+typedef struct {
+ MPIR_Datatype *pointer;
+ MPI_Datatype type;
+ int count;
+ int contig;
+ MPI_Aint true_lb;
+ size_t size;
+ int num_contig;
+ DLOOP_VECTOR *map;
+ DLOOP_VECTOR __map;
+} MPIDI_OFI_win_datatype_t;
+
+typedef struct {
+ char pad[MPIDI_REQUEST_HDR_SIZE];
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ struct MPIDI_Iovec_array *next;
+ union {
+ struct {
+ struct iovec *originv;
+ struct fi_rma_iov *targetv;
+ } put_get;
+ struct {
+ struct fi_ioc *originv;
+ struct fi_rma_ioc *targetv;
+ struct fi_ioc *resultv;
+ struct fi_ioc *comparev;
+ } cas;
+ struct {
+ struct fi_ioc *originv;
+ struct fi_rma_ioc *targetv;
+ } accumulate;
+ struct {
+ struct fi_ioc *originv;
+ struct fi_rma_ioc *targetv;
+ struct fi_ioc *resultv;
+ } get_accumulate;
+ } iov;
+ char iov_store[0]; /* Flexible array, do not move */
+} MPIDI_OFI_iovec_array_t;
+
+typedef struct {
+ MPIDI_OFI_iovec_state_t iovs;
+ MPIDI_OFI_win_datatype_t origin_dt;
+ MPIDI_OFI_win_datatype_t target_dt;
+ MPIDI_OFI_win_datatype_t result_dt;
+ MPIDI_OFI_iovec_array_t buf; /* Do not move me, flexible array */
+} MPIDI_OFI_win_noncontig_t;
+
+typedef struct MPIDI_OFI_win_request {
+ MPIR_OBJECT_HEADER;
+ char pad[MPIDI_REQUEST_HDR_SIZE - MPIDI_OFI_OBJECT_HEADER_SIZE];
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ struct MPIDI_OFI_win_request *next;
+ int target_rank;
+ MPIDI_OFI_win_noncontig_t *noncontig;
+} MPIDI_OFI_win_request_t;
+
+typedef struct {
+ char pad[MPIDI_REQUEST_HDR_SIZE];
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ MPIR_Request *parent; /* Parent request */
+} MPIDI_OFI_chunk_request;
+
+typedef struct {
+ char pad[MPIDI_REQUEST_HDR_SIZE];
+ struct fi_context context; /* fixed field, do not move */
+ int event_id; /* fixed field, do not move */
+ int (*done_fn) (struct fi_cq_tagged_entry * wc, MPIR_Request * req);
+ MPIDI_OFI_send_control_t remote_info;
+ size_t cur_offset;
+ MPIR_Comm *comm_ptr;
+ MPIR_Request *localreq;
+ struct fi_cq_tagged_entry wc;
+} MPIDI_OFI_huge_recv_t;
+
+typedef struct MPIDI_OFI_huge_counter_t {
+ uint16_t counter;
+ uint16_t outstanding;
+ struct fid_mr *mr;
+} MPIDI_OFI_huge_counter_t;
+
+/* Externs */
+extern MPIDI_OFI_global_t MPIDI_Global;
+extern int MPIR_Datatype_init_names(void);
+
+#endif /* OFI_TYPES_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_unimpl.h b/src/mpid/ch4/netmod/ofi/ofi_unimpl.h
new file mode 100644
index 0000000..cc31419
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_unimpl.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif /* OFI_UNIMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/ofi_win.h b/src/mpid/ch4/netmod/ofi/ofi_win.h
new file mode 100644
index 0000000..b01893b
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/ofi_win.h
@@ -0,0 +1,1356 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef OFI_WIN_H_INCLUDED
+#define OFI_WIN_H_INCLUDED
+
+#include "ofi_impl.h"
+#include <opa_primitives.h>
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_win_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_win_allgather(MPIR_Win * win, void *base, int disp_unit)
+{
+ int i, same_disp, mpi_errno = MPI_SUCCESS;
+ uint32_t first;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Comm *comm_ptr = win->comm_ptr;
+ int raw_prefix, idx, bitpos;
+ unsigned gen_id;
+ MPIDI_OFI_win_targetinfo_t *winfo;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_WIN_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_WIN_ALLGATHER);
+
+ /* Calculate a canonical context id */
+ raw_prefix = MPIR_CONTEXT_READ_FIELD(PREFIX, comm_ptr->context_id);
+ idx = raw_prefix / MPIR_CONTEXT_INT_BITS;
+ bitpos = raw_prefix % MPIR_CONTEXT_INT_BITS;
+ gen_id = (idx * MPIR_CONTEXT_INT_BITS) + (31 - bitpos);
+
+ int total_bits_avail = MPIDI_Global.max_mr_key_size * 8;
+ uint64_t window_instance = (uint64_t) (MPIDI_OFI_WIN(win).win_id) >> 32;
+ int bits_for_instance_id = MPIDI_Global.max_windows_bits;
+ int bits_for_context_id;
+ uint64_t max_contexts_allowed;
+ uint64_t max_instances_allowed;
+
+ bits_for_context_id = total_bits_avail -
+ MPIDI_Global.max_windows_bits - MPIDI_Global.max_huge_rma_bits;
+ max_contexts_allowed = 1 << (bits_for_context_id);
+ max_instances_allowed = 1 << (bits_for_instance_id);
+ MPIR_ERR_CHKANDSTMT(gen_id >= max_contexts_allowed, mpi_errno, MPI_ERR_OTHER,
+ goto fn_fail, "**ofid_mr_reg");
+ MPIR_ERR_CHKANDSTMT(window_instance >= max_instances_allowed, mpi_errno, MPI_ERR_OTHER,
+ goto fn_fail, "**ofid_mr_reg");
+
+ if (MPIDI_OFI_ENABLE_MR_SCALABLE) {
+ /* Context id in lower bits, instance in upper bits */
+ MPIDI_OFI_WIN(win).mr_key = (gen_id << MPIDI_Global.context_shift) | window_instance;
+ }
+ else {
+ MPIDI_OFI_WIN(win).mr_key = 0;
+ }
+
+ MPIDI_OFI_CALL(fi_mr_reg(MPIDI_Global.domain, /* In: Domain Object */
+ base, /* In: Lower memory address */
+ win->size, /* In: Length */
+ FI_REMOTE_READ | FI_REMOTE_WRITE, /* In: Expose MR for read */
+ 0ULL, /* In: offset(not used) */
+ MPIDI_OFI_WIN(win).mr_key, /* In: requested key */
+ 0ULL, /* In: flags */
+ &MPIDI_OFI_WIN(win).mr, /* Out: memregion object */
+ NULL), mr_reg); /* In: context */
+
+ MPIDI_OFI_WIN(win).winfo = MPL_malloc(sizeof(*winfo) * comm_ptr->local_size);
+
+ winfo = MPIDI_OFI_WIN(win).winfo;
+ winfo[comm_ptr->rank].disp_unit = disp_unit;
+
+#ifndef USE_OFI_MR_SCALABLE
+ /* MR_BASIC */
+ MPIDI_OFI_WIN(win).mr_key = fi_mr_key(MPIDI_OFI_WIN(win).mr);
+ winfo[comm_ptr->rank].mr_key = MPIDI_OFI_WIN(win).mr_key;
+ winfo[comm_ptr->rank].base = (uintptr_t) base;
+#endif
+
+ mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE, 0,
+ MPI_DATATYPE_NULL,
+ winfo, sizeof(*winfo), MPI_BYTE, comm_ptr, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (MPIDI_OFI_ENABLE_MR_SCALABLE) {
+ first = winfo[0].disp_unit;
+ same_disp = 1;
+ for (i = 1; i < comm_ptr->local_size; i++) {
+ if (winfo[i].disp_unit != first) {
+ same_disp = 0;
+ break;
+ }
+ }
+ if (same_disp) {
+ MPL_free(MPIDI_OFI_WIN(win).winfo);
+ MPIDI_OFI_WIN(win).winfo = NULL;
+ }
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_WIN_ALLGATHER);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_win_init_generic
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_win_init_generic(MPI_Aint length,
+ int disp_unit,
+ MPIR_Win ** win_ptr,
+ MPIR_Info * info,
+ MPIR_Comm * comm_ptr,
+ int create_flavor, int model, int do_stx_rma)
+{
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t window_instance;
+ MPIR_Win *win;
+ struct fi_info *finfo;
+ struct fi_cntr_attr cntr_attr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_WIN_INIT_GENERIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_WIN_INIT_GENERIC);
+
+ CH4_COMPILE_TIME_ASSERT(sizeof(MPIDI_Devwin_t) >= sizeof(MPIDI_OFI_win_t));
+ CH4_COMPILE_TIME_ASSERT(sizeof(MPIDI_Devdt_t) >= sizeof(MPIDI_OFI_datatype_t));
+
+ /* Note: MPIDI_CH4U_win_init will interpret the info object */
+ mpi_errno = MPIDI_CH4R_win_init(length, disp_unit, &win, info, comm_ptr, create_flavor, model);
+ MPIR_ERR_CHKANDSTMT(mpi_errno != MPI_SUCCESS,
+ mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ *win_ptr = win;
+
+ memset(&MPIDI_OFI_WIN(win), 0, sizeof(MPIDI_OFI_win_t));
+
+ /* context id lower bits, window instance upper bits */
+ window_instance =
+ MPIDI_OFI_index_allocator_alloc(MPIDI_OFI_COMM(win->comm_ptr).win_id_allocator);
+ MPIDI_OFI_WIN(win).win_id = ((uint64_t) comm_ptr->context_id) | (window_instance << 32);
+ MPIDI_OFI_map_set(MPIDI_Global.win_map, MPIDI_OFI_WIN(win).win_id, win);
+
+ if (do_stx_rma && MPIDI_Global.stx_ctx != NULL) {
+ /* Activate per-window EP/counter */
+ int ret;
+
+ finfo = fi_dupinfo(MPIDI_Global.prov_use);
+ MPIR_Assert(finfo);
+ finfo->ep_attr->tx_ctx_cnt = FI_SHARED_CONTEXT; /* Request a shared context */
+ MPIDI_OFI_CALL_RETURN(fi_endpoint(MPIDI_Global.domain,
+ finfo, &MPIDI_OFI_WIN(win).ep, NULL), ret);
+ if (ret < 0) {
+ MPL_DBG_MSG(MPIDI_CH4_DBG_GENERAL, VERBOSE,
+ "Failed to create per-window EP (with completion), "
+ "falling back to global EP/counter scheme");
+ fi_freeinfo(finfo);
+ goto fallback_global;
+ }
+
+ memset(&cntr_attr, 0, sizeof(cntr_attr));
+ cntr_attr.events = FI_CNTR_EVENTS_COMP;
+ MPIDI_OFI_CALL(fi_cntr_open(MPIDI_Global.domain, /* In: Domain Object */
+ &cntr_attr, /* In: Configuration object */
+ &MPIDI_OFI_WIN(win).cmpl_cntr, /* Out: Counter Object */
+ NULL), openct); /* Context: counter events */
+ MPIDI_OFI_WIN(win).issued_cntr = &MPIDI_OFI_WIN(win).issued_cntr_v;
+
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_WIN(win).ep, &MPIDI_Global.stx_ctx->fid, 0), bind);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_WIN(win).ep,
+ &MPIDI_Global.p2p_cq->fid, FI_TRANSMIT | FI_SELECTIVE_COMPLETION),
+ bind);
+ MPIDI_OFI_CALL(fi_ep_bind
+ (MPIDI_OFI_WIN(win).ep, &MPIDI_OFI_WIN(win).cmpl_cntr->fid,
+ FI_READ | FI_WRITE), bind);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_WIN(win).ep, &MPIDI_Global.av->fid, 0), bind);
+
+ MPIDI_OFI_CALL_RETURN(fi_endpoint(MPIDI_Global.domain,
+ finfo, &MPIDI_OFI_WIN(win).ep_nocmpl, NULL), ret);
+ fi_freeinfo(finfo);
+ if (ret < 0) {
+ MPL_DBG_MSG(MPIDI_CH4_DBG_GENERAL, VERBOSE,
+ "Failed to create an EP alias, "
+ "falling back to global EP/counter scheme");
+ MPIDI_OFI_CALL(fi_close(&MPIDI_OFI_WIN(win).ep->fid), epclose);
+ MPIDI_OFI_CALL(fi_close(&MPIDI_OFI_WIN(win).cmpl_cntr->fid), epclose);
+ goto fallback_global;
+ }
+
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_WIN(win).ep_nocmpl,
+ &MPIDI_Global.stx_ctx->fid, 0), bind);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_WIN(win).ep_nocmpl,
+ &MPIDI_OFI_WIN(win).cmpl_cntr->fid, FI_READ | FI_WRITE), bind);
+ MPIDI_OFI_CALL(fi_ep_bind(MPIDI_OFI_WIN(win).ep_nocmpl, &MPIDI_Global.av->fid, 0), bind);
+
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_WIN(win).ep), ep_enable);
+ MPIDI_OFI_CALL(fi_enable(MPIDI_OFI_WIN(win).ep_nocmpl), ep_enable);
+ }
+ else {
+ fallback_global:
+ /* Fallback for the traditional global EP/counter model */
+ MPIDI_OFI_WIN(win).ep = MPIDI_OFI_EP_TX_RMA(0);
+ MPIDI_OFI_WIN(win).ep_nocmpl = MPIDI_OFI_EP_TX_CTR(0);
+ MPIDI_OFI_WIN(win).cmpl_cntr = MPIDI_Global.rma_cmpl_cntr;
+ MPIDI_OFI_WIN(win).issued_cntr = &MPIDI_Global.rma_issued_cntr;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_WIN_INIT_GENERIC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_win_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_win_init(MPI_Aint length,
+ int disp_unit,
+ MPIR_Win ** win_ptr,
+ MPIR_Info * info,
+ MPIR_Comm * comm_ptr, int create_flavor, int model)
+{
+ int mpi_errno;
+ int use_stx_rma = MPIDI_OFI_ENABLE_SCALABLE_ENDPOINTS ? 0 : MPIDI_OFI_ENABLE_STX_RMA;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_WIN_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_WIN_INIT);
+
+ mpi_errno = MPIDI_OFI_win_init_generic(length,
+ disp_unit,
+ win_ptr,
+ info, comm_ptr, create_flavor, model, use_stx_rma);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_WIN_INIT);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_win_progress_fence
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_win_progress_fence(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int itercount = 0;
+ int ret;
+ uint64_t tcount, donecount;
+ MPIDI_OFI_win_request_t *r;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_WIN_PROGRESS_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFI_WIN_PROGRESS_FENCE);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+ tcount = *MPIDI_OFI_WIN(win).issued_cntr;
+ donecount = fi_cntr_read(MPIDI_OFI_WIN(win).cmpl_cntr);
+
+ MPIR_Assert(donecount <= tcount);
+
+ while (tcount > donecount) {
+ MPIR_Assert(donecount <= tcount);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+ MPIDI_OFI_PROGRESS();
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+ donecount = fi_cntr_read(MPIDI_OFI_WIN(win).cmpl_cntr);
+ itercount++;
+
+ if (itercount == 1000) {
+ ret = fi_cntr_wait(MPIDI_OFI_WIN(win).cmpl_cntr, tcount, 0);
+ MPIDI_OFI_ERR(ret < 0 && ret != -FI_ETIMEDOUT,
+ mpi_errno,
+ MPI_ERR_RMA_RANGE,
+ "**ofid_cntr_wait",
+ "**ofid_cntr_wait %s %d %s %s",
+ __SHORT_FILE__, __LINE__, FCNAME, fi_strerror(-ret));
+ itercount = 0;
+ }
+ }
+
+ r = MPIDI_OFI_WIN(win).syncQ;
+
+ while (r) {
+ MPIDI_OFI_win_request_t *next = r->next;
+ MPIDI_OFI_rma_done_event(NULL, (MPIR_Request *) r);
+ r = next;
+ }
+
+ MPIDI_OFI_WIN(win).syncQ = NULL;
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_FI_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFI_WIN_PROGRESS_FENCE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_set_info
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+
+ mpi_errno = MPIDI_CH4R_mpi_win_set_info(win, info);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_start
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+
+ MPIDI_CH4U_EPOCH_CHECK_TYPE(win, mpi_errno, goto fn_fail);
+
+ MPIR_Group_add_ref(group);
+
+ MPIDI_OFI_PROGRESS_WHILE(group->size != (int) MPIDI_CH4U_WIN(win, sync).pw.count);
+
+ MPIDI_CH4U_WIN(win, sync).pw.count = 0;
+
+ MPIR_ERR_CHKANDJUMP((MPIDI_CH4U_WIN(win, sync).sc.group != NULL),
+ mpi_errno, MPI_ERR_GROUP, "**group");
+ MPIDI_CH4U_WIN(win, sync).sc.group = group;
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_START;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+/* FIXME: This internal routine is only for manually checking AM completion
+ * in win_complete, it should be removed once we improved the OFI sync routines
+ * similar as UCX where the netmod sync only does
+ * (1) check netmod completion
+ * (2) call CH4R_sync for remaining work). */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_fill_ranks_in_win_grp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_fill_ranks_in_win_grp(MPIR_Win * win_ptr, MPIR_Group * group_ptr,
+ int *ranks_in_win_grp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i, *ranks_in_grp;
+ MPIR_Group *win_grp_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFI_FILL_RANKS_IN_WIN_GRP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_OFI_FILL_RANKS_IN_WIN_GRP);
+
+ ranks_in_grp = (int *) MPL_malloc(group_ptr->size * sizeof(int));
+ MPIR_Assert(ranks_in_grp);
+ for (i = 0; i < group_ptr->size; i++)
+ ranks_in_grp[i] = i;
+
+ mpi_errno = MPIR_Comm_group_impl(win_ptr->comm_ptr, &win_grp_ptr);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Group_translate_ranks_impl(group_ptr, group_ptr->size,
+ ranks_in_grp, win_grp_ptr, ranks_in_win_grp);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Group_free_impl(win_grp_ptr);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPL_free(ranks_in_grp);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_OFI_FILL_RANKS_IN_WIN_GRP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_complete
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_complete(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int *ranks_in_win_grp = NULL;
+ MPIR_Group *group;
+ int am_all_local_completed = 0;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+
+ MPIR_CHKLMEM_DECL(1);
+
+ MPIDI_CH4U_EPOCH_START_CHECK2(win, mpi_errno, goto fn_fail);
+
+ group = MPIDI_CH4U_WIN(win, sync).sc.group;
+ MPIR_Assert(group != NULL);
+
+ MPIR_CHKLMEM_MALLOC(ranks_in_win_grp, int *, group->size * sizeof(int),
+ mpi_errno, "ranks_in_win_grp");
+
+ mpi_errno = MPIDI_OFI_fill_ranks_in_win_grp(win, group, ranks_in_win_grp);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* AM completion */
+ /* FIXME: now we simply set per-target counters for PSCW, can it be optimized ? */
+ do {
+ MPIDI_CH4R_PROGRESS();
+ MPIDI_win_check_group_local_completed(win, ranks_in_win_grp, group->size,
+ &am_all_local_completed);
+ } while (am_all_local_completed != 1);
+
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ MPIDI_OFI_win_control_t msg;
+ msg.type = MPIDI_OFI_CTRL_COMPLETE;
+
+ int index, peer;
+
+ for (index = 0; index < group->size; ++index) {
+ peer = group->lrank_to_lpid[index].lpid;
+ mpi_errno = MPIDI_OFI_do_control_win(&msg, peer, win, 0, 1);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+ }
+
+ MPIDI_CH4U_EPOCH_TARGET_EVENT(win);
+
+ MPIR_Group_release(MPIDI_CH4U_WIN(win, sync).sc.group);
+ MPIDI_CH4U_WIN(win, sync).sc.group = NULL;
+
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_post
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int peer, index, mpi_errno = MPI_SUCCESS;
+ MPIDI_OFI_win_control_t msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+
+ MPIDI_CH4U_EPOCH_POST_CHECK(win, mpi_errno, goto fn_fail);
+
+ MPIR_Group_add_ref(group);
+ MPIR_ERR_CHKANDJUMP((MPIDI_CH4U_WIN(win, sync).pw.group != NULL),
+ mpi_errno, MPI_ERR_GROUP, "**group");
+
+ MPIDI_CH4U_WIN(win, sync).pw.group = group;
+ MPIR_Assert(group != NULL);
+
+ msg.type = MPIDI_OFI_CTRL_POST;
+
+ for (index = 0; index < group->size; ++index) {
+ peer = group->lrank_to_lpid[index].lpid;
+ mpi_errno = MPIDI_OFI_do_control_win(&msg, peer, win, 0, 1);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+ }
+
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_POST;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_wait
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_wait(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+
+ MPIDI_CH4U_EPOCH_TARGET_CHECK(win, MPIDI_CH4U_EPOTYPE_POST, mpi_errno, return mpi_errno);
+
+ MPIR_Group *group;
+ group = MPIDI_CH4U_WIN(win, sync).pw.group;
+
+ MPIDI_OFI_PROGRESS_WHILE(group->size != (int) MPIDI_CH4U_WIN(win, sync).sc.count);
+
+ MPIDI_CH4U_WIN(win, sync).sc.count = 0;
+ MPIDI_CH4U_WIN(win, sync).pw.group = NULL;
+
+ MPIR_Group_release(group);
+
+ MPIDI_CH4U_EPOCH_ORIGIN_EVENT(win);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_test
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+
+ MPIDI_CH4U_EPOCH_TARGET_CHECK(win, MPIDI_CH4U_EPOTYPE_POST, mpi_errno, return mpi_errno);
+
+ MPIR_Group *group;
+ group = MPIDI_CH4U_WIN(win, sync).pw.group;
+
+ if (group->size == (int) MPIDI_CH4U_WIN(win, sync).sc.count) {
+ MPIDI_CH4U_WIN(win, sync).sc.count = 0;
+ MPIDI_CH4U_WIN(win, sync).pw.group = NULL;
+ *flag = 1;
+ MPIR_Group_release(group);
+ MPIDI_CH4U_EPOCH_ORIGIN_EVENT(win);
+ }
+ else {
+ MPIDI_OFI_PROGRESS();
+ *flag = 0;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_lock
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+
+ MPIDI_CH4U_win_sync_lock *slock = &MPIDI_CH4U_WIN(win, sync).lock;
+ MPIDI_CH4U_EPOCH_CHECK_TYPE(win, mpi_errno, goto fn_fail);
+
+ if (rank == MPI_PROC_NULL)
+ goto fn_exit0;
+
+ MPIDI_OFI_win_control_t msg;
+
+ msg.type = MPIDI_OFI_CTRL_LOCKREQ;
+ msg.lock_type = lock_type;
+
+ mpi_errno = MPIDI_OFI_do_control_win(&msg, rank, win, 1, 1);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ MPIDI_OFI_PROGRESS_WHILE(!slock->remote.locked);
+
+ fn_exit0:
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_LOCK;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_unlock
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+
+ MPIDI_CH4U_EPOCH_ORIGIN_CHECK(win, MPIDI_CH4U_EPOTYPE_LOCK, mpi_errno, return mpi_errno);
+
+ if (rank == MPI_PROC_NULL)
+ goto fn_exit0;
+
+ /* AM completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_CH4R_mpi_win_flush(rank, win));
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ MPIDI_OFI_win_control_t msg;
+ msg.type = MPIDI_OFI_CTRL_UNLOCK;
+ mpi_errno = MPIDI_OFI_do_control_win(&msg, rank, win, 1, 1);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ MPIDI_OFI_PROGRESS_WHILE(MPIDI_CH4U_WIN(win, sync).lock.remote.locked);
+ fn_exit0:
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_get_info
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+
+ mpi_errno = MPIDI_CH4R_mpi_win_get_info(win, info_p_p);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_free
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win = *win_ptr;
+ uint32_t window_instance;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+
+ MPIDI_CH4U_EPOCH_FREE_CHECK(win, mpi_errno, return mpi_errno);
+
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ window_instance = (uint32_t) (MPIDI_OFI_WIN(win).win_id >> 32);
+
+ MPIDI_OFI_index_allocator_free(MPIDI_OFI_COMM(win->comm_ptr).win_id_allocator, window_instance);
+ MPIDI_OFI_map_erase(MPIDI_Global.win_map, MPIDI_OFI_WIN(win).win_id);
+ if (MPIDI_OFI_WIN(win).ep_nocmpl != MPIDI_OFI_EP_TX_CTR(0))
+ MPIDI_OFI_CALL(fi_close(&MPIDI_OFI_WIN(win).ep_nocmpl->fid), epclose);
+ if (MPIDI_OFI_WIN(win).ep != MPIDI_OFI_EP_TX_RMA(0))
+ MPIDI_OFI_CALL(fi_close(&MPIDI_OFI_WIN(win).ep->fid), epclose);
+ if (MPIDI_OFI_WIN(win).cmpl_cntr != MPIDI_Global.rma_cmpl_cntr)
+ MPIDI_OFI_CALL(fi_close(&MPIDI_OFI_WIN(win).cmpl_cntr->fid), cqclose);
+ MPIDI_OFI_CALL(fi_close(&MPIDI_OFI_WIN(win).mr->fid), mr_unreg);
+ if (MPIDI_OFI_WIN(win).winfo) {
+ MPL_free(MPIDI_OFI_WIN(win).winfo);
+ MPIDI_OFI_WIN(win).winfo = NULL;
+ }
+
+ MPIDI_CH4R_win_finalize(win_ptr);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_fence
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_fence(int massert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+
+ MPIDI_CH4U_EPOCH_FENCE_CHECK(win, mpi_errno, goto fn_fail);
+
+ /* AM completion */
+ do {
+ MPIDI_CH4R_PROGRESS();
+ } while (MPIR_cc_get(MPIDI_CH4U_WIN(win, local_cmpl_cnts)) != 0);
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ MPIDI_CH4U_EPOCH_FENCE_EVENT(win, massert);
+
+ /*
+ * We always make a barrier even if MPI_MODE_NOPRECEDE is specified.
+ * This is necessary because we no longer defer executions of RMA ops
+ * until synchronization calls as CH3 did. Otherwise, the code like
+ * this won't work correctly (cf. f77/rma/wingetf)
+ *
+ * Rank 0 Rank 1
+ * ---- ----
+ * Store to local mem in window
+ * MPI_Win_fence(MODE_NOPRECEDE) MPI_Win_fence(MODE_NOPRECEDE)
+ * MPI_Get(from rank 1)
+ */
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_create
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+
+ mpi_errno = MPIDI_OFI_win_init(length,
+ disp_unit,
+ win_ptr, info, comm_ptr, MPI_WIN_FLAVOR_CREATE, MPI_WIN_UNIFIED);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ win = *win_ptr;
+ win->base = base;
+
+ mpi_errno = MPIDI_OFI_win_allgather(win, base, disp_unit);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_attach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+
+ MPIR_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_DYNAMIC), mpi_errno,
+ MPI_ERR_RMA_FLAVOR, goto fn_fail, "**rmaflavor");
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_allocate_shared
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ int i = 0, fd = -1, rc, first = 0, mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ void *baseP = NULL;
+ MPIR_Win *win = NULL;
+ ssize_t total_size = 0LL;
+ MPI_Aint size_out = 0;
+ char shm_key[64];
+ void *map_ptr;
+ MPIDI_CH4U_win_shared_info_t *shared_table = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+
+ mpi_errno = MPIDI_OFI_win_init(size, disp_unit, win_ptr, info_ptr, comm_ptr,
+ MPI_WIN_FLAVOR_SHARED, MPI_WIN_UNIFIED);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+ win = *win_ptr;
+ MPIDI_CH4U_WIN(win, shared_table) =
+ (MPIDI_CH4U_win_shared_info_t *) MPL_malloc(sizeof(MPIDI_CH4U_win_shared_info_t) *
+ comm_ptr->local_size);
+ shared_table = MPIDI_CH4U_WIN(win, shared_table);
+
+ shared_table[comm_ptr->rank].size = size;
+ shared_table[comm_ptr->rank].disp_unit = disp_unit;
+
+ mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE,
+ 0,
+ MPI_DATATYPE_NULL,
+ shared_table,
+ sizeof(MPIDI_CH4U_win_shared_info_t),
+ MPI_BYTE, comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ /* No allreduce here because this is a shared memory domain
+ * and should be a relatively small number of processes
+ * and a non performance sensitive API.
+ */
+ for (i = 0; i < comm_ptr->local_size; i++)
+ total_size += shared_table[i].size;
+
+ if (total_size == 0)
+ goto fn_zero;
+
+ sprintf(shm_key, "/mpi-%X-%" PRIx64, MPIDI_Global.jobid, MPIDI_OFI_WIN(win).win_id);
+
+ rc = shm_open(shm_key, O_CREAT | O_EXCL | O_RDWR, 0600);
+ first = (rc != -1);
+
+ if (!first) {
+ rc = shm_open(shm_key, O_RDWR, 0);
+
+ if (rc == -1) {
+ shm_unlink(shm_key);
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+ }
+
+ /* Make the addresses symmetric by using MAP_FIXED */
+ size_t page_sz, mapsize;
+
+ mapsize = MPIDI_CH4R_get_mapsize(total_size, &page_sz);
+ fd = rc;
+ rc = ftruncate(fd, mapsize);
+
+ if (rc == -1) {
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+
+ if (comm_ptr->rank == 0) {
+ map_ptr = MPIDI_CH4R_generate_random_addr(mapsize);
+ map_ptr = mmap(map_ptr, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0);
+
+ if (map_ptr == NULL || map_ptr == MAP_FAILED) {
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+
+ mpi_errno = MPIR_Bcast_impl(&map_ptr, 1, MPI_UNSIGNED_LONG, 0, comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ MPIDI_CH4U_WIN(win, mmap_addr) = map_ptr;
+ MPIDI_CH4U_WIN(win, mmap_sz) = mapsize;
+ }
+ else {
+ mpi_errno = MPIR_Bcast_impl(&map_ptr, 1, MPI_UNSIGNED_LONG, 0, comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ rc = MPIDI_CH4R_check_maprange_ok(map_ptr, mapsize);
+ /* If we hit this assert, we need to iterate
+ * trying more addresses
+ */
+ MPIR_Assert(rc == 1);
+ map_ptr = mmap(map_ptr, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0);
+ MPIDI_CH4U_WIN(win, mmap_addr) = map_ptr;
+ MPIDI_CH4U_WIN(win, mmap_sz) = mapsize;
+
+ if (map_ptr == NULL || map_ptr == MAP_FAILED) {
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+ }
+
+ /* Scan for my offset into the buffer */
+ /* Could use exscan if this is expensive at scale */
+ for (i = 0; i < comm_ptr->rank; i++)
+ size_out += shared_table[i].size;
+
+ fn_zero:
+
+ baseP = (size == 0) ? NULL : (void *) ((char *) map_ptr + size_out);
+ win->base = baseP;
+ win->size = size;
+ mpi_errno = MPIDI_OFI_win_allgather(win, baseP, disp_unit);
+
+ if (mpi_errno != MPI_SUCCESS)
+ return mpi_errno;
+
+ *(void **) base_ptr = (void *) win->base;
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
+
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+ MPIR_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_DYNAMIC), mpi_errno,
+ MPI_ERR_RMA_FLAVOR, goto fn_fail, "**rmaflavor");
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_shared_query
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+ int offset = rank;
+ int i;
+ uintptr_t base = (uintptr_t) MPIDI_CH4U_WIN(win, mmap_addr);
+
+ MPIDI_CH4U_win_shared_info_t *shared_table = MPIDI_CH4U_WIN(win, shared_table);
+
+ if (rank < 0)
+ offset = 0;
+
+ *size = shared_table[offset].size;
+ *disp_unit = shared_table[offset].disp_unit;
+ if (*size > 0) {
+ for (i = 0; i < offset; i++)
+ base += shared_table[i].size;
+ *(void **) baseptr = (void *) base;
+ }
+ else
+ *(void **) baseptr = NULL;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_allocate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ void *baseP;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+
+ mpi_errno = MPIDI_OFI_win_init(size, disp_unit, win_ptr, info, comm,
+ MPI_WIN_FLAVOR_ALLOCATE, MPI_WIN_UNIFIED);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ mpi_errno = MPIDI_CH4R_get_symmetric_heap(size, comm, &baseP, *win_ptr);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ win = *win_ptr;
+ win->base = baseP;
+ mpi_errno = MPIDI_OFI_win_allgather(win, baseP, disp_unit);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ *(void **) baseptr = (void *) win->base;
+ mpi_errno = MPIR_Barrier_impl(comm, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_flush
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ /* AM completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_CH4R_mpi_win_flush(rank, win));
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_flush_local_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ /* AM completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_CH4R_mpi_win_flush_local_all(win));
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_unlock_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+ int i;
+ MPIDI_CH4U_win_lock_info *lockQ;
+
+ MPIDI_CH4U_EPOCH_ORIGIN_CHECK(win, MPIDI_CH4U_EPOTYPE_LOCK_ALL, mpi_errno, return mpi_errno);
+
+ /* AM completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_CH4R_mpi_win_flush_all(win));
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ MPIR_Assert(MPIDI_CH4U_WIN(win, lockQ) != NULL);
+
+ lockQ = (MPIDI_CH4U_win_lock_info *) MPIDI_CH4U_WIN(win, lockQ);
+
+ for (i = 0; i < win->comm_ptr->local_size; i++) {
+ MPIDI_OFI_win_control_t msg;
+ lockQ[i].done = 0;
+ lockQ[i].peer = i;
+ lockQ[i].win = win;
+ msg.type = MPIDI_OFI_CTRL_UNLOCKALL;
+ mpi_errno = MPIDI_OFI_do_control_win(&msg, lockQ[i].peer, win, 1, 1);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ if (MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked == 1)
+ lockQ[i].done = 1;
+ }
+
+ MPIDI_OFI_PROGRESS_WHILE(MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked);
+
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_create_dynamic
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info,
+ MPIR_Comm * comm, MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int rc = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+
+ rc = MPIDI_OFI_win_init((uintptr_t) UINTPTR_MAX - (uintptr_t) MPI_BOTTOM,
+ 1, win_ptr, info, comm, MPI_WIN_FLAVOR_DYNAMIC, MPI_WIN_UNIFIED);
+
+ if (rc != MPI_SUCCESS)
+ goto fn_fail;
+
+ win = *win_ptr;
+ win->base = MPI_BOTTOM;
+
+ rc = MPIDI_OFI_win_allgather(win, win->base, 1);
+
+ if (rc != MPI_SUCCESS)
+ goto fn_fail;
+
+ mpi_errno = MPIR_Barrier_impl(comm, &errflag);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_flush_local
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ /* AM completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_CH4R_mpi_win_flush_local(rank, win));
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_sync
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_sync(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ OPA_read_write_barrier();
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_flush_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ /* AM completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_CH4R_mpi_win_flush_all(win));
+ /* network completion */
+ MPIDI_OFI_MPI_CALL_POP(MPIDI_OFI_win_progress_fence(win));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_win_lock_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_win_lock_info *lockQ;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+
+ MPIDI_CH4U_EPOCH_CHECK_TYPE(win, mpi_errno, goto fn_fail);
+
+ int size;
+ size = win->comm_ptr->local_size;
+
+ if (!MPIDI_CH4U_WIN(win, lockQ)) {
+ MPIDI_CH4U_WIN(win, lockQ) =
+ (MPIDI_CH4U_win_lock_info *) MPL_calloc(size, sizeof(MPIDI_CH4U_win_lock_info));
+ MPIR_Assert(MPIDI_CH4U_WIN(win, lockQ) != NULL);
+ }
+
+ lockQ = MPIDI_CH4U_WIN(win, lockQ);
+ int i;
+
+ for (i = 0; i < size; i++) {
+ MPIDI_OFI_win_control_t msg;
+
+ lockQ[i].done = 0;
+ lockQ[i].peer = i;
+ lockQ[i].win = win;
+ lockQ[i].lock_type = MPI_LOCK_SHARED;
+
+ msg.type = MPIDI_OFI_CTRL_LOCKALLREQ;
+ msg.lock_type = MPI_LOCK_SHARED;
+ mpi_errno = MPIDI_OFI_do_control_win(&msg, lockQ[i].peer, lockQ[i].win, 1, 1);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ if (MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked == 1)
+ lockQ[i].done = 1;
+ }
+
+ MPIDI_OFI_PROGRESS_WHILE(size != (int) MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked);
+
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_LOCK_ALL;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#endif /* OFI_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ofi/subconfigure.m4 b/src/mpid/ch4/netmod/ofi/subconfigure.m4
new file mode 100644
index 0000000..1536a77
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/subconfigure.m4
@@ -0,0 +1,174 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_AFTER=src/mpid/ch4
+
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_COND_IF([BUILD_CH4],[
+ for net in $ch4_netmods ; do
+ AS_CASE([$net],[ofi],[build_ch4_netmod_ofi=yes])
+ if test $net = "ofi" ; then
+ AC_DEFINE(HAVE_CH4_NETMOD_OFI,1,[OFI netmod is built])
+ AC_DEFINE(MPIDI_BUILD_CH4_LOCALITY_INFO, 1, [CH4 should build locality info])
+ fi
+ done
+
+ AC_ARG_WITH(ch4-netmod-ofi-args,
+ [ --with-ch4-netmod-ofi-args=arg1:arg2:arg3
+ CH4 OFI netmod arguments:
+ scalable-endpoints - Use OFI scalable endpoint mode
+ av-table - Use OFI AV table (logical addressing mode). Default is av-map mode
+ mr-basic - USE OFI MR_BASIC mode. Default is MR_SCALABLE mode.
+ direct-provider - USE OFI FI_DIRECT to compile in a single OFI direct provider
+ no-tagged - Do not use OFI fi_tagged interfaces.
+ no-data - Disable immediate data field
+ no-stx-rma - Disable per-window EP & counter for RMA
+ ],
+ [ofi_netmod_args=$withval],
+ [ofi_netmod_args=])
+
+dnl Parse the device arguments
+ SAVE_IFS=$IFS
+ IFS=':'
+ args_array=$ofi_netmod_args
+ do_scalable_endpoints=false
+ do_direct_provider=false
+ do_av_table=false
+ do_tagged=true
+ do_data=true
+ do_stx_rma=true
+ do_mr_scalable=true
+ echo "Parsing Arguments for OFI Netmod"
+ for arg in $args_array; do
+ case ${arg} in
+ scalable-endpoints)
+ do_scalable_endpoints=true
+ echo " ---> CH4::OFI Provider : $arg"
+ ;;
+ av_table)
+ do_av_table=true
+ echo " ---> CH4::OFI Provider AV table : $arg"
+ ;;
+ direct-provider)
+ do_direct_provider=true
+ echo " ---> CH4::OFI Direct OFI Provider requested : $arg"
+ ;;
+ no-tagged)
+ do_tagged=false
+ echo " ---> CH4::OFI Disable fi_tagged interfaces : $arg"
+ ;;
+ no-data)
+ do_data=false
+ echo " ---> CH4::OFI Disable immediate data field : $arg"
+ ;;
+ no-stx-rma)
+ do_stx_rma=false
+ echo " ---> CH4::OFI Disable per-window EP & counter for RMA : $arg"
+ ;;
+ mr-basic)
+ do_mr_scalable=false
+ echo " ---> CH4::OFI Switching to MR_BASIC mode : $arg"
+ ;;
+ esac
+ done
+ IFS=$SAVE_IFS
+
+ if [test "$do_scalable_endpoints" = "true"]; then
+ AC_MSG_NOTICE([Enabling OFI netmod scalable endpoints])
+ PAC_APPEND_FLAG([-DMPIDI_OFI_CONFIG_USE_SCALABLE_ENDPOINTS], [CPPFLAGS])
+ fi
+
+ if [test "$do_av_table" = "true"]; then
+ AC_MSG_NOTICE([Enabling OFI netmod AV table])
+ PAC_APPEND_FLAG([-DMPIDI_OFI_CONFIG_USE_AV_TABLE], [CPPFLAGS])
+ fi
+
+ if [test "$do_direct_provider" = "true"]; then
+ AC_MSG_NOTICE([Enabling OFI netmod direct provider])
+ PAC_APPEND_FLAG([-DFABRIC_DIRECT],[CPPFLAGS])
+ fi
+
+ if [test "$do_tagged" = "true"]; then
+ AC_DEFINE([USE_OFI_TAGGED], [1], [Define to use fi_tagged interfaces])
+ AC_MSG_NOTICE([Enabling fi_tagged interfaces])
+ fi
+
+ if [test "$do_data" = "true"]; then
+ AC_DEFINE([USE_OFI_IMMEDIATE_DATA], [1], [Define to use immediate data field])
+ AC_MSG_NOTICE([Enabling immediate data field])
+ fi
+
+ if [test "$do_stx_rma" = "true"]; then
+ AC_DEFINE([USE_OFI_STX_RMA], [1], [Define to use per-window EP & counter])
+ AC_MSG_NOTICE([Enabling per-window EP & counter])
+ fi
+
+ if [test "$do_mr_scalable" = "true"]; then
+ AC_DEFINE([USE_OFI_MR_SCALABLE], [1], [Define to use MR_SCALABLE])
+ AC_MSG_NOTICE([Enabling MR_SCALABLE])
+ fi
+])
+ AM_CONDITIONAL([BUILD_CH4_NETMOD_OFI],[test "X$build_ch4_netmod_ofi" = "Xyes"])
+])dnl
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_CH4_NETMOD_OFI],[
+ AC_MSG_NOTICE([RUNNING CONFIGURE FOR ch4:ofi])
+
+ ofisrcdir=""
+ AC_SUBST([ofisrcdir])
+ ofilib=""
+ AC_SUBST([ofilib])
+
+ ofi_embedded=""
+ dnl Use embedded libfabric if we specify to do so or we didn't specify and the source is present
+ if test "${with_libfabric}" = "embedded" ; then
+ ofi_embedded="yes"
+ elif test -z ${with_libfabric} ; then
+ if test -f ${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/configure ; then
+ ofi_embedded="yes"
+ else
+ ofi_embedded="no"
+ PAC_SET_HEADER_LIB_PATH(libfabric)
+ fi
+ else
+ ofi_embedded="no"
+ PAC_SET_HEADER_LIB_PATH(libfabric)
+ fi
+
+ if test "${ofi_embedded}" = "yes" ; then
+ AC_MSG_NOTICE([CH4 OFI Netmod: Using an embedded libfabric])
+ ofi_subdir_args="--enable-embedded"
+
+ dnl Unset all of these env vars so they don't pollute the libfabric configuration
+ PAC_PUSH_FLAG(CPPFLAGS)
+ PAC_CONFIG_SUBDIR_ARGS([src/mpid/ch4/netmod/ofi/libfabric],[$ofi_subdir_args],[],[AC_MSG_ERROR(libfabric configure failed)])
+ PAC_POP_FLAG(CPPFLAGS)
+ PAC_APPEND_FLAG([-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/include], [CPPFLAGS])
+ PAC_APPEND_FLAG([-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/include], [CPPFLAGS])
+
+ if test "$do_direct_provider" = "true" ; then
+ if test "x${enable_direct}" != "x" && test "${enable_direct}" != "no" ; then
+ PAC_APPEND_FLAG([-I${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include], [CPPFLAGS])
+ PAC_APPEND_FLAG([-I${use_top_srcdir}/src/mpid/ch4/netmod/ofi/libfabric/prov/${enable_direct}/include], [CPPFLAGS])
+ else
+ AC_MSG_ERROR([Enabled direct OFI provider but didn't specify which one])
+ fi
+ fi
+
+ ofisrcdir="${master_top_builddir}/src/mpid/ch4/netmod/ofi/libfabric"
+ ofilib="src/mpid/ch4/netmod/ofi/libfabric/src/libfabric.la"
+ else
+ PAC_PUSH_FLAG(LIBS)
+ PAC_CHECK_HEADER_LIB([rdma/fabric.h], [fabric], [fi_getinfo], [have_libfabric=yes], [have_libfabric=no])
+ PAC_POP_FLAG(LIBS)
+ if test "${have_libfabric}" = "yes" ; then
+ AC_MSG_NOTICE([CH4 OFI Netmod: Using an external libfabric])
+ PAC_APPEND_FLAG([-lfabric],[WRAPPER_LIBS])
+ else
+ AC_MSG_ERROR([Provided libfabric installation (--with-libfabric=${with_libfabric}) could not be configured.])
+ fi
+ fi
+
+])dnl end AM_COND_IF(BUILD_CH4_NETMOD_OFI,...)
+])dnl end _BODY
+
+[#] end of __file__
diff --git a/src/mpid/ch4/netmod/ofi/util.c b/src/mpid/ch4/netmod/ofi/util.c
new file mode 100644
index 0000000..b54137b
--- /dev/null
+++ b/src/mpid/ch4/netmod/ofi/util.c
@@ -0,0 +1,821 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include <mpidimpl.h>
+#include "ofi_impl.h"
+#include "ofi_events.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_handle_cq_error_util
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_OFI_handle_cq_error_util(ssize_t ret)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_OFI_HANDLE_CQ_ERROR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_OFI_HANDLE_CQ_ERROR);
+
+ mpi_errno = MPIDI_OFI_handle_cq_error(ret);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_HANDLE_CQ_ERROR);
+ return mpi_errno;
+}
+
+int MPIDI_OFI_progress_test_no_inline()
+{
+ return MPIDI_Progress_test();
+}
+
+typedef struct {
+ uint64_t key;
+ void *value;
+ MPL_UT_hash_handle hh; /* makes this structure hashable */
+} MPIDI_OFI_map_entry_t;
+
+typedef struct MPIDI_OFI_map_t {
+ MPIDI_OFI_map_entry_t *head;
+
+} MPIDI_OFI_map_t;
+
+void MPIDI_OFI_map_create(void **out_map)
+{
+ MPIDI_OFI_map_t *map;
+ map = MPL_malloc(sizeof(MPIDI_OFI_map_t));
+ MPIR_Assert(map != NULL);
+ map->head = NULL;
+ *out_map = map;
+}
+
+void MPIDI_OFI_map_destroy(void *in_map)
+{
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ MPIDI_OFI_map_t *map = in_map;
+ MPL_HASH_CLEAR(hh, map->head);
+ MPL_free(map);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+}
+
+void MPIDI_OFI_map_set(void *in_map, uint64_t id, void *val)
+{
+ MPIDI_OFI_map_t *map;
+ MPIDI_OFI_map_entry_t *map_entry;
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ map = (MPIDI_OFI_map_t *) in_map;
+ map_entry = MPL_malloc(sizeof(MPIDI_OFI_map_entry_t));
+ MPIR_Assert(map_entry != NULL);
+ map_entry->key = id;
+ map_entry->value = val;
+ MPL_HASH_ADD(hh, map->head, key, sizeof(uint64_t), map_entry);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+}
+
+void MPIDI_OFI_map_erase(void *in_map, uint64_t id)
+{
+ MPIDI_OFI_map_t *map;
+ MPIDI_OFI_map_entry_t *map_entry;
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ map = (MPIDI_OFI_map_t *) in_map;
+ MPL_HASH_FIND(hh, map->head, &id, sizeof(uint64_t), map_entry);
+ MPIR_Assert(map_entry != NULL);
+ MPL_HASH_DELETE(hh, map->head, map_entry);
+ MPL_free(map_entry);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+}
+
+void *MPIDI_OFI_map_lookup(void *in_map, uint64_t id)
+{
+ void *rc;
+ MPIDI_OFI_map_t *map;
+ MPIDI_OFI_map_entry_t *map_entry;
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ map = (MPIDI_OFI_map_t *) in_map;
+ MPL_HASH_FIND(hh, map->head, &id, sizeof(uint64_t), map_entry);
+ if (map_entry == NULL)
+ rc = MPIDI_OFI_MAP_NOT_FOUND;
+ else
+ rc = map_entry->value;
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ return rc;
+}
+
+typedef struct MPIDI_OFI_index_allocator_t {
+ int chunk_size;
+ int num_ints;
+ int start;
+ int last_free_index;
+ uint64_t *bitmask;
+} MPIDI_OFI_index_allocator_t;
+
+void MPIDI_OFI_index_allocator_create(void **indexmap, int start)
+{
+ MPIDI_OFI_index_allocator_t *allocator;
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ allocator = MPL_malloc(sizeof(MPIDI_OFI_index_allocator_t));
+ allocator->chunk_size = 128;
+ allocator->num_ints = allocator->chunk_size;
+ allocator->start = start;
+ allocator->last_free_index = 0;
+ allocator->bitmask = MPL_malloc(sizeof(uint64_t) * allocator->num_ints);
+ memset(allocator->bitmask, 0xFF, sizeof(uint64_t) * allocator->num_ints);
+ assert(allocator != NULL);
+ *indexmap = allocator;
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+}
+
+#define MPIDI_OFI_INDEX_CALC(val,nval,shift,mask) \
+ if ((val & mask) == 0) { \
+ val >>= shift##ULL; \
+ nval += shift; \
+ }
+int MPIDI_OFI_index_allocator_alloc(void *indexmap)
+{
+ int i;
+ MPIDI_OFI_index_allocator_t *allocator = indexmap;
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ for (i = allocator->last_free_index; i < allocator->num_ints; i++) {
+ if (allocator->bitmask[i]) {
+ register uint64_t val, nval;
+ val = allocator->bitmask[i];
+ nval = 2;
+ MPIDI_OFI_INDEX_CALC(val, nval, 32, 0xFFFFFFFFULL);
+ MPIDI_OFI_INDEX_CALC(val, nval, 16, 0xFFFFULL);
+ MPIDI_OFI_INDEX_CALC(val, nval, 8, 0xFFULL);
+ MPIDI_OFI_INDEX_CALC(val, nval, 4, 0xFULL);
+ MPIDI_OFI_INDEX_CALC(val, nval, 2, 0x3ULL);
+ nval -= val & 0x1ULL;
+ allocator->bitmask[i] &= ~(0x1ULL << (nval - 1));
+ allocator->last_free_index = i;
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ return i * sizeof(uint64_t) * 8 + (nval - 1) + allocator->start;
+ }
+ if (i == allocator->num_ints - 1) {
+ allocator->num_ints += allocator->chunk_size;
+ allocator->bitmask = MPL_realloc(allocator->bitmask,
+ sizeof(uint64_t) * allocator->num_ints);
+ memset(&allocator->bitmask[i + 1], 0xFF, sizeof(uint64_t) * allocator->chunk_size);
+ }
+ }
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ return -1;
+}
+
+void MPIDI_OFI_index_allocator_free(void *indexmap, int index)
+{
+ int int_index, bitpos, numbits;
+ MPIDI_OFI_index_allocator_t *allocator = indexmap;
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ numbits = sizeof(uint64_t) * 8;
+ int_index = (index + 1 - allocator->start) / numbits;
+ bitpos = (index - allocator->start) % numbits;
+
+ allocator->last_free_index = MPL_MIN(int_index, allocator->last_free_index);
+ allocator->bitmask[int_index] |= (0x1ULL << bitpos);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+}
+
+void MPIDI_OFI_index_allocator_destroy(void *indexmap)
+{
+ MPIDI_OFI_index_allocator_t *allocator;
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+ allocator = (MPIDI_OFI_index_allocator_t *) indexmap;
+ MPL_free(allocator->bitmask);
+ MPL_free(allocator);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_OFI_THREAD_UTIL_MUTEX);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_OFI_win_lock_advance
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_OFI_win_lock_advance(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDI_CH4U_win_sync_lock *slock = &MPIDI_CH4U_WIN(win, sync).lock;
+ struct MPIDI_CH4U_win_queue *q = &slock->local.requested;
+
+ if ((q->head != NULL) &&
+ ((slock->local.count == 0) ||
+ ((slock->local.type == MPI_LOCK_SHARED) && (q->head->type == MPI_LOCK_SHARED)
+)
+)
+) {
+ struct MPIDI_CH4U_win_lock *lock = q->head;
+ q->head = lock->next;
+
+ if (q->head == NULL)
+ q->tail = NULL;
+
+ ++slock->local.count;
+ slock->local.type = lock->type;
+
+ if (lock->mtype == MPIDI_OFI_REQUEST_LOCK) {
+ MPIDI_OFI_win_control_t info;
+ info.type = MPIDI_OFI_CTRL_LOCKACK;
+ mpi_errno = MPIDI_OFI_do_control_win(&info, lock->rank, win, 1, 0);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ }
+ else if (lock->mtype == MPIDI_OFI_REQUEST_LOCKALL) {
+ MPIDI_OFI_win_control_t info;
+ info.type = MPIDI_OFI_CTRL_LOCKALLACK;
+ mpi_errno = MPIDI_OFI_do_control_win(&info, lock->rank, win, 1, 0);
+ }
+ else
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ MPL_free(lock);
+ mpi_errno = MPIDI_OFI_win_lock_advance(win);
+
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+ }
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_OFI_win_lock_request_proc(const MPIDI_OFI_win_control_t * info,
+ MPIR_Win * win, unsigned peer)
+{
+ int mpi_errno;
+ struct MPIDI_CH4U_win_lock *lock =
+ (struct MPIDI_CH4U_win_lock *) MPL_calloc(1, sizeof(struct MPIDI_CH4U_win_lock));
+
+ if (info->type == MPIDI_OFI_CTRL_LOCKREQ)
+ lock->mtype = MPIDI_OFI_REQUEST_LOCK;
+ else if (info->type == MPIDI_OFI_CTRL_LOCKALLREQ)
+ lock->mtype = MPIDI_OFI_REQUEST_LOCKALL;
+
+ lock->rank = info->origin_rank;
+ lock->type = info->lock_type;
+ struct MPIDI_CH4U_win_queue *q = &MPIDI_CH4U_WIN(win, sync).lock.local.requested;
+ MPIR_Assert((q->head != NULL) ^ (q->tail == NULL));
+
+ if (q->tail == NULL)
+ q->head = lock;
+ else
+ q->tail->next = lock;
+
+ q->tail = lock;
+
+ mpi_errno = MPIDI_OFI_win_lock_advance(win);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline void MPIDI_OFI_win_lock_ack_proc(const MPIDI_OFI_win_control_t * info,
+ MPIR_Win * win, unsigned peer)
+{
+ if (info->type == MPIDI_OFI_CTRL_LOCKACK)
+ MPIDI_CH4U_WIN(win, sync).lock.remote.locked = 1;
+ else if (info->type == MPIDI_OFI_CTRL_LOCKALLACK)
+ MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked += 1;
+}
+
+
+static inline int MPIDI_OFI_win_unlock_proc(const MPIDI_OFI_win_control_t * info,
+ MPIR_Win * win, unsigned peer)
+{
+ int mpi_errno;
+ --MPIDI_CH4U_WIN(win, sync).lock.local.count;
+ MPIR_Assert((int) MPIDI_CH4U_WIN(win, sync).lock.local.count >= 0);
+ mpi_errno = MPIDI_OFI_win_lock_advance(win);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ MPIDI_OFI_win_control_t new_info;
+ new_info.type = MPIDI_OFI_CTRL_UNLOCKACK;
+ mpi_errno = MPIDI_OFI_do_control_win(&new_info, peer, win, 1, 0);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline void MPIDI_OFI_win_complete_proc(const MPIDI_OFI_win_control_t * info,
+ MPIR_Win * win, unsigned peer)
+{
+ ++MPIDI_CH4U_WIN(win, sync).sc.count;
+}
+
+static inline void MPIDI_OFI_win_post_proc(const MPIDI_OFI_win_control_t * info,
+ MPIR_Win * win, unsigned peer)
+{
+ ++MPIDI_CH4U_WIN(win, sync).pw.count;
+}
+
+
+static inline void MPIDI_OFI_win_unlock_done_proc(const MPIDI_OFI_win_control_t * info,
+ MPIR_Win * win, unsigned peer)
+{
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_LOCK)
+ MPIDI_CH4U_WIN(win, sync).lock.remote.locked = 0;
+ else if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_LOCK_ALL) {
+ MPIR_Assert((int) MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked > 0);
+ MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked -= 1;
+ }
+ else
+ MPIR_Assert(0);
+
+}
+
+static inline void MPIDI_OFI_get_huge_cleanup(MPIDI_OFI_send_control_t * info)
+{
+ MPIDI_OFI_huge_recv_t *recv;
+ MPIR_Comm *comm_ptr;
+ uint64_t mapid;
+ /* Look up the communicator */
+ mapid = ((uint64_t) info->endpoint_id << 32) | info->comm_id;
+ comm_ptr = MPIDI_CH4U_context_id_to_comm(mapid);
+ /* Look up the per destination receive queue object */
+ recv =
+ (MPIDI_OFI_huge_recv_t *) MPIDI_OFI_map_lookup(MPIDI_OFI_COMM(comm_ptr).huge_recv_counters,
+ info->origin_rank);
+ MPIDI_OFI_map_erase(MPIDI_OFI_COMM(comm_ptr).huge_recv_counters, info->origin_rank);
+ MPL_free(recv);
+}
+
+static inline void MPIDI_OFI_get_huge(MPIDI_OFI_send_control_t * info)
+{
+ MPIDI_OFI_huge_recv_t *recv;
+ MPIR_Comm *comm_ptr;
+ /* Look up the communicator */
+ comm_ptr = MPIDI_CH4U_context_id_to_comm(info->comm_id);
+ /* Look up the per destination receive queue object */
+ recv =
+ (MPIDI_OFI_huge_recv_t *) MPIDI_OFI_map_lookup(MPIDI_OFI_COMM(comm_ptr).huge_recv_counters,
+ info->origin_rank);
+ if (recv == MPIDI_OFI_MAP_NOT_FOUND) {
+ recv = (MPIDI_OFI_huge_recv_t *) MPL_calloc(sizeof(*recv), 1);
+ MPIDI_OFI_map_set(MPIDI_OFI_COMM(comm_ptr).huge_recv_counters, info->origin_rank, recv);
+ }
+ recv->event_id = MPIDI_OFI_EVENT_GET_HUGE;
+ recv->cur_offset = MPIDI_Global.max_send;
+ recv->remote_info = *info;
+ recv->comm_ptr = comm_ptr;
+ MPIDI_OFI_get_huge_event(NULL, (MPIR_Request *) recv);
+}
+
+int MPIDI_OFI_control_handler(int handler_id, void *am_hdr,
+ void **data,
+ size_t * data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb, MPIR_Request ** req)
+{
+ int senderrank;
+ int mpi_errno = MPI_SUCCESS;
+ void *buf = am_hdr;
+ MPIDI_OFI_win_control_t *control = (MPIDI_OFI_win_control_t *) buf;
+ *req = NULL;
+ *target_cmpl_cb = NULL;
+
+ switch (control->type) {
+ case MPIDI_OFI_CTRL_HUGEACK:{
+ MPIDI_OFI_send_control_t *ctrlsend = (MPIDI_OFI_send_control_t *) buf;
+ MPIDI_OFI_dispatch_function(NULL, ctrlsend->ackreq, 0);
+ goto fn_exit;
+ }
+ break;
+
+ case MPIDI_OFI_CTRL_HUGE:{
+ MPIDI_OFI_send_control_t *ctrlsend = (MPIDI_OFI_send_control_t *) buf;
+ MPIDI_OFI_get_huge(ctrlsend);
+ goto fn_exit;
+ }
+ break;
+
+ case MPIDI_OFI_CTRL_HUGE_CLEANUP:{
+ MPIDI_OFI_send_control_t *ctrlsend = (MPIDI_OFI_send_control_t *) buf;
+ MPIDI_OFI_get_huge_cleanup(ctrlsend);
+ goto fn_exit;
+ }
+ break;
+ }
+
+ MPIR_Win *win;
+ senderrank = control->origin_rank;
+ win = (MPIR_Win *) MPIDI_OFI_map_lookup(MPIDI_Global.win_map, control->win_id);
+ MPIR_Assert(win != MPIDI_OFI_MAP_NOT_FOUND);
+
+ switch (control->type) {
+ case MPIDI_OFI_CTRL_LOCKREQ:
+ case MPIDI_OFI_CTRL_LOCKALLREQ:
+ mpi_errno = MPIDI_OFI_win_lock_request_proc(control, win, senderrank);
+ break;
+
+ case MPIDI_OFI_CTRL_LOCKACK:
+ case MPIDI_OFI_CTRL_LOCKALLACK:
+ MPIDI_OFI_win_lock_ack_proc(control, win, senderrank);
+ break;
+
+ case MPIDI_OFI_CTRL_UNLOCK:
+ case MPIDI_OFI_CTRL_UNLOCKALL:
+ mpi_errno = MPIDI_OFI_win_unlock_proc(control, win, senderrank);
+ break;
+
+ case MPIDI_OFI_CTRL_UNLOCKACK:
+ case MPIDI_OFI_CTRL_UNLOCKALLACK:
+ MPIDI_OFI_win_unlock_done_proc(control, win, senderrank);
+ break;
+
+ case MPIDI_OFI_CTRL_COMPLETE:
+ MPIDI_OFI_win_complete_proc(control, win, senderrank);
+ break;
+
+ case MPIDI_OFI_CTRL_POST:
+ MPIDI_OFI_win_post_proc(control, win, senderrank);
+ break;
+
+ default:
+ fprintf(stderr, "Bad control type: 0x%08x %d\n", control->type, control->type);
+ MPIR_Assert(0);
+ }
+
+ fn_exit:
+ return mpi_errno;
+}
+
+
+/* MPI Datatype Processing for RMA */
+#define isS_INT(x) ((x)==MPI_INTEGER || \
+ (x) == MPI_INT32_T || (x) == MPI_INTEGER4 || \
+ (x) == MPI_INT)
+#define isUS_INT(x) ((x) == MPI_UINT32_T || (x) == MPI_UNSIGNED)
+#define isS_SHORT(x) ((x) == MPI_SHORT || (x) == MPI_INT16_T || \
+ (x) == MPI_INTEGER2)
+#define isUS_SHORT(x) ((x) == MPI_UNSIGNED_SHORT || (x) == MPI_UINT16_T)
+#define isS_CHAR(x) ((x) == MPI_SIGNED_CHAR || (x) == MPI_INT8_T || \
+ (x) == MPI_INTEGER1 || (x) == MPI_CHAR)
+#define isUS_CHAR(x) ((x) == MPI_BYTE || \
+ (x) == MPI_UNSIGNED_CHAR || (x) == MPI_UINT8_T)
+#define isS_LONG(x) ((x) == MPI_LONG || (x) == MPI_AINT)
+#define isUS_LONG(x) ((x) == MPI_UNSIGNED_LONG)
+#define isS_LONG_LONG(x) ((x) == MPI_INT64_T || (x) == MPI_OFFSET || \
+ (x) == MPI_INTEGER8 || (x) == MPI_LONG_LONG || \
+ (x) == MPI_LONG_LONG_INT || (x) == MPI_COUNT)
+#define isUS_LONG_LONG(x) ((x) == MPI_UINT64_T || (x) == MPI_UNSIGNED_LONG_LONG)
+#define isFLOAT(x) ((x) == MPI_FLOAT || (x) == MPI_REAL)
+#define isDOUBLE(x) ((x) == MPI_DOUBLE || (x) == MPI_DOUBLE_PRECISION)
+#define isLONG_DOUBLE(x) ((x) == MPI_LONG_DOUBLE)
+#define isLOC_TYPE(x) ((x) == MPI_2REAL || (x) == MPI_2DOUBLE_PRECISION || \
+ (x) == MPI_2INTEGER || (x) == MPI_FLOAT_INT || \
+ (x) == MPI_DOUBLE_INT || (x) == MPI_LONG_INT || \
+ (x) == MPI_2INT || (x) == MPI_SHORT_INT || \
+ (x) == MPI_LONG_DOUBLE_INT)
+#define isBOOL(x) ((x) == MPI_C_BOOL)
+#define isLOGICAL(x) ((x) == MPI_LOGICAL)
+#define isSINGLE_COMPLEX(x) ((x) == MPI_COMPLEX || (x) == MPI_C_FLOAT_COMPLEX)
+#define isDOUBLE_COMPLEX(x) ((x) == MPI_DOUBLE_COMPLEX || (x) == MPI_COMPLEX8 || \
+ (x) == MPI_C_DOUBLE_COMPLEX)
+
+
+#undef FUNCNAME
+#define FUNCNAME mpi_to_ofi
+#undef FCNAME
+#define FCNAME DECL_FUNC(mpi_to_ofi)
+static inline int mpi_to_ofi(MPI_Datatype dt, enum fi_datatype *fi_dt, MPI_Op op, enum fi_op *fi_op)
+{
+ *fi_dt = FI_DATATYPE_LAST;
+ *fi_op = FI_ATOMIC_OP_LAST;
+
+ if (isS_INT(dt))
+ *fi_dt = FI_INT32;
+ else if (isUS_INT(dt))
+ *fi_dt = FI_UINT32;
+ else if (isFLOAT(dt))
+ *fi_dt = FI_FLOAT;
+ else if (isDOUBLE(dt))
+ *fi_dt = FI_DOUBLE;
+ else if (isLONG_DOUBLE(dt))
+ *fi_dt = FI_LONG_DOUBLE;
+ else if (isS_CHAR(dt))
+ *fi_dt = FI_INT8;
+ else if (isUS_CHAR(dt))
+ *fi_dt = FI_UINT8;
+ else if (isS_SHORT(dt))
+ *fi_dt = FI_INT16;
+ else if (isUS_SHORT(dt))
+ *fi_dt = FI_UINT16;
+ else if (isS_LONG(dt))
+ *fi_dt = FI_INT64;
+ else if (isUS_LONG(dt))
+ *fi_dt = FI_UINT64;
+ else if (isS_LONG_LONG(dt))
+ *fi_dt = FI_INT64;
+ else if (isUS_LONG_LONG(dt))
+ *fi_dt = FI_UINT64;
+ else if (isSINGLE_COMPLEX(dt))
+ *fi_dt = FI_FLOAT_COMPLEX;
+ else if (isDOUBLE_COMPLEX(dt))
+ *fi_dt = FI_DOUBLE_COMPLEX;
+ else if (isLOC_TYPE(dt))
+ *fi_dt = FI_DATATYPE_LAST;
+ else if (isLOGICAL(dt))
+ *fi_dt = FI_UINT32;
+ else if (isBOOL(dt))
+ *fi_dt = FI_UINT8;
+
+ if (*fi_dt == FI_DATATYPE_LAST)
+ goto fn_fail;
+
+ *fi_op = FI_ATOMIC_OP_LAST;
+
+ switch (op) {
+ case MPI_SUM:
+ *fi_op = FI_SUM;
+ goto fn_exit;
+ break;
+
+ case MPI_PROD:
+ *fi_op = FI_PROD;
+ goto fn_exit;
+ break;
+
+ case MPI_MAX:
+ *fi_op = FI_MAX;
+ goto fn_exit;
+ break;
+
+ case MPI_MIN:
+ *fi_op = FI_MIN;
+ goto fn_exit;
+ break;
+
+ case MPI_BAND:
+ *fi_op = FI_BAND;
+ goto fn_exit;
+ break;
+
+ case MPI_BOR:
+ *fi_op = FI_BOR;
+ goto fn_exit;
+ break;
+
+ case MPI_BXOR:
+ *fi_op = FI_BXOR;
+ goto fn_exit;
+ break;
+
+ case MPI_LAND:
+ if (isLONG_DOUBLE(dt))
+ goto fn_fail;
+
+ *fi_op = FI_LAND;
+ goto fn_exit;
+ break;
+
+ case MPI_LOR:
+ if (isLONG_DOUBLE(dt))
+ goto fn_fail;
+
+ *fi_op = FI_LOR;
+ goto fn_exit;
+ break;
+
+ case MPI_LXOR:
+ if (isLONG_DOUBLE(dt))
+ goto fn_fail;
+
+ *fi_op = FI_LXOR;
+ goto fn_exit;
+ break;
+
+ case MPI_REPLACE:{
+ *fi_op = FI_ATOMIC_WRITE;
+ goto fn_exit;
+ break;
+ }
+
+ case MPI_NO_OP:{
+ *fi_op = FI_ATOMIC_READ;
+ goto fn_exit;
+ break;
+ }
+
+ case MPI_OP_NULL:{
+ *fi_op = FI_CSWAP;
+ goto fn_exit;
+ break;
+ }
+
+ default:
+ goto fn_fail;
+ break;
+ }
+
+ fn_exit:
+ return MPI_SUCCESS;
+ fn_fail:
+ return -1;
+}
+
+static MPI_Datatype mpi_dtypes[] = {
+ MPI_CHAR, MPI_UNSIGNED_CHAR, MPI_SIGNED_CHAR, MPI_BYTE,
+ MPI_WCHAR, MPI_SHORT, MPI_UNSIGNED_SHORT, MPI_INT,
+ MPI_UNSIGNED, MPI_LONG, MPI_UNSIGNED_LONG, MPI_FLOAT,
+ MPI_DOUBLE, MPI_LONG_DOUBLE, MPI_LONG_LONG, MPI_UNSIGNED_LONG_LONG,
+ MPI_PACKED, MPI_LB, MPI_UB, MPI_2INT,
+
+ MPI_INT8_T, MPI_INT16_T, MPI_INT32_T,
+ MPI_INT64_T, MPI_UINT8_T, MPI_UINT16_T,
+ MPI_UINT32_T, MPI_UINT64_T, MPI_C_BOOL,
+ MPI_C_FLOAT_COMPLEX, MPI_C_DOUBLE_COMPLEX, MPI_C_LONG_DOUBLE_COMPLEX,
+ /* address/offset/count types */
+ MPI_AINT, MPI_OFFSET, MPI_COUNT,
+ /* Fortran types */
+#ifdef HAVE_FORTRAN_BINDING
+ MPI_COMPLEX, MPI_DOUBLE_COMPLEX, MPI_LOGICAL, MPI_REAL,
+ MPI_DOUBLE_PRECISION, MPI_INTEGER, MPI_2INTEGER,
+
+#ifdef MPICH_DEFINE_2COMPLEX
+ MPI_2COMPLEX, MPI_2DOUBLE_COMPLEX,
+#endif
+ MPI_2REAL, MPI_2DOUBLE_PRECISION, MPI_CHARACTER,
+ MPI_REAL4, MPI_REAL8, MPI_REAL16, MPI_COMPLEX8, MPI_COMPLEX16,
+ MPI_COMPLEX32, MPI_INTEGER1, MPI_INTEGER2, MPI_INTEGER4, MPI_INTEGER8,
+ MPI_INTEGER16,
+#endif
+ MPI_FLOAT_INT, MPI_DOUBLE_INT,
+ MPI_LONG_INT, MPI_SHORT_INT,
+ MPI_LONG_DOUBLE_INT,
+ (MPI_Datatype) - 1,
+};
+
+static MPI_Op mpi_ops[] = {
+ MPI_MAX, MPI_MIN, MPI_SUM, MPI_PROD,
+ MPI_LAND, MPI_BAND, MPI_LOR, MPI_BOR,
+ MPI_LXOR, MPI_BXOR, MPI_MINLOC, MPI_MAXLOC,
+ MPI_REPLACE, MPI_NO_OP, MPI_OP_NULL,
+};
+
+#define _TBL MPIDI_Global.win_op_table[i][j]
+#define CHECK_ATOMIC(fcn,field1,field2) \
+ atomic_count = 0; \
+ ret = fcn(MPIDI_OFI_EP_TX_RMA(0), \
+ fi_dt, \
+ fi_op, \
+ &atomic_count); \
+ if (ret == 0 && atomic_count != 0) \
+ { \
+ _TBL.field1 = 1; \
+ _TBL.field2 = atomic_count; \
+ }
+
+static inline void create_dt_map()
+{
+ int i, j;
+ size_t dtsize[FI_DATATYPE_LAST];
+ dtsize[FI_INT8] = sizeof(int8_t);
+ dtsize[FI_UINT8] = sizeof(uint8_t);
+ dtsize[FI_INT16] = sizeof(int16_t);
+ dtsize[FI_UINT16] = sizeof(uint16_t);
+ dtsize[FI_INT32] = sizeof(int32_t);
+ dtsize[FI_UINT32] = sizeof(uint32_t);
+ dtsize[FI_INT64] = sizeof(int64_t);
+ dtsize[FI_UINT64] = sizeof(uint64_t);
+ dtsize[FI_FLOAT] = sizeof(float);
+ dtsize[FI_DOUBLE] = sizeof(double);
+ dtsize[FI_FLOAT_COMPLEX] = sizeof(float complex);
+ dtsize[FI_DOUBLE_COMPLEX] = sizeof(double complex);
+ dtsize[FI_LONG_DOUBLE] = sizeof(long double);
+ dtsize[FI_LONG_DOUBLE_COMPLEX] = sizeof(long double complex);
+
+ for (i = 0; i < MPIDI_OFI_DT_SIZES; i++)
+ for (j = 0; j < MPIDI_OFI_OP_SIZES; j++) {
+ enum fi_datatype fi_dt = (enum fi_datatype) -1;
+ enum fi_op fi_op = (enum fi_op) -1;
+ mpi_to_ofi(mpi_dtypes[i], &fi_dt, mpi_ops[j], &fi_op);
+ MPIR_Assert(fi_dt != (enum fi_datatype) -1);
+ MPIR_Assert(fi_op != (enum fi_op) -1);
+ _TBL.dt = fi_dt;
+ _TBL.op = fi_op;
+ _TBL.atomic_valid = 0;
+ _TBL.max_atomic_count = 0;
+ _TBL.max_fetch_atomic_count = 0;
+ _TBL.max_compare_atomic_count = 0;
+ ssize_t ret;
+ size_t atomic_count;
+
+ if (fi_dt != FI_DATATYPE_LAST && fi_op != FI_ATOMIC_OP_LAST) {
+ CHECK_ATOMIC(fi_atomicvalid, atomic_valid, max_atomic_count);
+ CHECK_ATOMIC(fi_fetch_atomicvalid, fetch_atomic_valid, max_fetch_atomic_count);
+ CHECK_ATOMIC(fi_compare_atomicvalid, compare_atomic_valid,
+ max_compare_atomic_count);
+ _TBL.dtsize = dtsize[fi_dt];
+ }
+ }
+}
+
+static inline void add_index(MPI_Datatype datatype, int *index)
+{
+ MPIR_Datatype *dt_ptr;
+ MPID_Datatype_get_ptr(datatype, dt_ptr);
+ MPIDI_OFI_DATATYPE(dt_ptr).index = *index;
+ (*index)++;
+}
+
+void MPIDI_OFI_index_datatypes()
+{
+ int index = 0;
+
+ add_index(MPI_CHAR, &index);
+ add_index(MPI_UNSIGNED_CHAR, &index);
+ add_index(MPI_SIGNED_CHAR, &index);
+ add_index(MPI_BYTE, &index);
+ add_index(MPI_WCHAR, &index);
+ add_index(MPI_SHORT, &index);
+ add_index(MPI_UNSIGNED_SHORT, &index);
+ add_index(MPI_INT, &index);
+ add_index(MPI_UNSIGNED, &index);
+ add_index(MPI_LONG, &index);
+ add_index(MPI_UNSIGNED_LONG, &index); /* 10 */
+
+ add_index(MPI_FLOAT, &index);
+ add_index(MPI_DOUBLE, &index);
+ add_index(MPI_LONG_DOUBLE, &index);
+ add_index(MPI_LONG_LONG, &index);
+ add_index(MPI_UNSIGNED_LONG_LONG, &index);
+ add_index(MPI_PACKED, &index);
+ add_index(MPI_LB, &index);
+ add_index(MPI_UB, &index);
+ add_index(MPI_2INT, &index);
+
+ /* C99 types */
+ add_index(MPI_INT8_T, &index); /* 20 */
+ add_index(MPI_INT16_T, &index);
+ add_index(MPI_INT32_T, &index);
+ add_index(MPI_INT64_T, &index);
+ add_index(MPI_UINT8_T, &index);
+ add_index(MPI_UINT16_T, &index);
+ add_index(MPI_UINT32_T, &index);
+ add_index(MPI_UINT64_T, &index);
+ add_index(MPI_C_BOOL, &index);
+ add_index(MPI_C_FLOAT_COMPLEX, &index);
+ add_index(MPI_C_DOUBLE_COMPLEX, &index); /* 30 */
+ add_index(MPI_C_LONG_DOUBLE_COMPLEX, &index);
+
+ /* address/offset/count types */
+ add_index(MPI_AINT, &index);
+ add_index(MPI_OFFSET, &index);
+ add_index(MPI_COUNT, &index);
+
+ /* Fortran types */
+#ifdef HAVE_FORTRAN_BINDING
+ add_index(MPI_COMPLEX, &index);
+ add_index(MPI_DOUBLE_COMPLEX, &index);
+ add_index(MPI_LOGICAL, &index);
+ add_index(MPI_REAL, &index);
+ add_index(MPI_DOUBLE_PRECISION, &index);
+ add_index(MPI_INTEGER, &index); /* 40 */
+ add_index(MPI_2INTEGER, &index);
+#ifdef MPICH_DEFINE_2COMPLEX
+ add_index(MPI_2COMPLEX, &index);
+ add_index(MPI_2DOUBLE_COMPLEX, &index);
+#endif
+ add_index(MPI_2REAL, &index);
+ add_index(MPI_2DOUBLE_PRECISION, &index);
+ add_index(MPI_CHARACTER, &index);
+ add_index(MPI_REAL4, &index);
+ add_index(MPI_REAL8, &index);
+ add_index(MPI_REAL16, &index);
+ add_index(MPI_COMPLEX8, &index); /* 50 */
+ add_index(MPI_COMPLEX16, &index);
+ add_index(MPI_COMPLEX32, &index);
+ add_index(MPI_INTEGER1, &index);
+ add_index(MPI_INTEGER2, &index);
+ add_index(MPI_INTEGER4, &index);
+ add_index(MPI_INTEGER8, &index);
+
+ if (MPI_INTEGER16 == MPI_DATATYPE_NULL)
+ index++;
+ else
+ add_index(MPI_INTEGER16, &index);
+
+#endif
+ add_index(MPI_FLOAT_INT, &index);
+ add_index(MPI_DOUBLE_INT, &index);
+ add_index(MPI_LONG_INT, &index);
+ add_index(MPI_SHORT_INT, &index); /* 60 */
+ add_index(MPI_LONG_DOUBLE_INT, &index);
+ create_dt_map();
+}
diff --git a/src/mpid/ch4/netmod/portals4/Makefile.mk b/src/mpid/ch4/netmod/portals4/Makefile.mk
new file mode 100644
index 0000000..af89854
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/Makefile.mk
@@ -0,0 +1,7 @@
+if BUILD_CH4_NETMOD_PORTALS4
+
+mpi_core_sources += src/mpid/ch4/netmod/portals4/globals.c \
+ src/mpid/ch4/netmod/portals4/func_table.c
+errnames_txt_files += src/mpid/ch4/netmod/portals4/errnames.txt
+
+endif
diff --git a/src/mpid/ch4/netmod/portals4/errnames.txt b/src/mpid/ch4/netmod/portals4/errnames.txt
new file mode 100644
index 0000000..ff024e3
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/errnames.txt
@@ -0,0 +1,10 @@
+**PtlInit:PtlInit failed
+**PtlInit %s %d %s %s:PtlInit failed (%s %d %s %s)
+**PtlNIInit:PtlNIInit failed
+**PtlNIInit %s %d %s %s:PtlNIInit failed (%s %d %s %s)
+**PtlEQAlloc:PtlEQAlloc failed
+**PtlEQAlloc %s %d %s %s:PtlEQAlloc failed (%s %d %s %s)
+**PtlPTAlloc:PtlPTAlloc failed
+**PtlPTAlloc %s %d %s %s:PtlPTAlloc failed (%s %d %s %s)
+**PtlMDBind:PtlMDBind failed
+**PtlMDBind %s %d %s %s:PtlMDBind failed (%s %d %s %s)
diff --git a/src/mpid/ch4/netmod/portals4/func_table.c b/src/mpid/ch4/netmod/portals4/func_table.c
new file mode 100644
index 0000000..b016322
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/func_table.c
@@ -0,0 +1,152 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifndef NETMOD_DIRECT
+#define NETMOD_DISABLE_INLINES
+#include "mpidimpl.h"
+#include "netmod_direct.h"
+
+MPIDI_NM_funcs_t MPIDI_NM_portals4_funcs = {
+ MPIDI_NM_mpi_init_hook,
+ MPIDI_NM_mpi_finalize_hook,
+ MPIDI_NM_progress,
+ MPIDI_NM_mpi_comm_connect,
+ MPIDI_NM_mpi_comm_disconnect,
+ MPIDI_NM_mpi_open_port,
+ MPIDI_NM_mpi_close_port,
+ MPIDI_NM_mpi_comm_accept,
+ MPIDI_NM_comm_get_lpid,
+ MPIDI_NM_get_local_upids,
+ MPIDI_NM_upids_to_lupids,
+ MPIDI_NM_create_intercomm_from_lpids,
+ MPIDI_NM_mpi_comm_create_hook,
+ MPIDI_NM_mpi_comm_free_hook,
+ MPIDI_NM_am_request_init,
+ MPIDI_NM_am_request_finalize,
+ MPIDI_NM_am_send_hdr,
+ MPIDI_NM_am_isend,
+ MPIDI_NM_am_isendv,
+ MPIDI_NM_am_send_hdr_reply,
+ MPIDI_NM_am_isend_reply,
+ MPIDI_NM_am_hdr_max_sz,
+ MPIDI_NM_am_recv,
+};
+
+MPIDI_NM_native_funcs_t MPIDI_NM_native_portals4_funcs = {
+ MPIDI_NM_mpi_send,
+ MPIDI_NM_mpi_ssend,
+ MPIDI_NM_mpi_startall,
+ MPIDI_NM_mpi_send_init,
+ MPIDI_NM_mpi_ssend_init,
+ MPIDI_NM_mpi_rsend_init,
+ MPIDI_NM_mpi_bsend_init,
+ MPIDI_NM_mpi_isend,
+ MPIDI_NM_mpi_issend,
+ MPIDI_NM_mpi_cancel_send,
+ MPIDI_NM_mpi_recv_init,
+ MPIDI_NM_mpi_recv,
+ MPIDI_NM_mpi_irecv,
+ MPIDI_NM_mpi_imrecv,
+ MPIDI_NM_mpi_cancel_recv,
+ MPIDI_NM_mpi_alloc_mem,
+ MPIDI_NM_mpi_free_mem,
+ MPIDI_NM_mpi_improbe,
+ MPIDI_NM_mpi_iprobe,
+ MPIDI_NM_mpi_win_set_info,
+ MPIDI_NM_mpi_win_shared_query,
+ MPIDI_NM_mpi_put,
+ MPIDI_NM_mpi_win_start,
+ MPIDI_NM_mpi_win_complete,
+ MPIDI_NM_mpi_win_post,
+ MPIDI_NM_mpi_win_wait,
+ MPIDI_NM_mpi_win_test,
+ MPIDI_NM_mpi_win_lock,
+ MPIDI_NM_mpi_win_unlock,
+ MPIDI_NM_mpi_win_get_info,
+ MPIDI_NM_mpi_get,
+ MPIDI_NM_mpi_win_free,
+ MPIDI_NM_mpi_win_fence,
+ MPIDI_NM_mpi_win_create,
+ MPIDI_NM_mpi_accumulate,
+ MPIDI_NM_mpi_win_attach,
+ MPIDI_NM_mpi_win_allocate_shared,
+ MPIDI_NM_mpi_rput,
+ MPIDI_NM_mpi_win_flush_local,
+ MPIDI_NM_mpi_win_detach,
+ MPIDI_NM_mpi_compare_and_swap,
+ MPIDI_NM_mpi_raccumulate,
+ MPIDI_NM_mpi_rget_accumulate,
+ MPIDI_NM_mpi_fetch_and_op,
+ MPIDI_NM_mpi_win_allocate,
+ MPIDI_NM_mpi_win_flush,
+ MPIDI_NM_mpi_win_flush_local_all,
+ MPIDI_NM_mpi_win_unlock_all,
+ MPIDI_NM_mpi_win_create_dynamic,
+ MPIDI_NM_mpi_rget,
+ MPIDI_NM_mpi_win_sync,
+ MPIDI_NM_mpi_win_flush_all,
+ MPIDI_NM_mpi_get_accumulate,
+ MPIDI_NM_mpi_win_lock_all,
+ MPIDI_NM_rank_is_local,
+ MPIDI_NM_mpi_barrier,
+ MPIDI_NM_mpi_bcast,
+ MPIDI_NM_mpi_allreduce,
+ MPIDI_NM_mpi_allgather,
+ MPIDI_NM_mpi_allgatherv,
+ MPIDI_NM_mpi_scatter,
+ MPIDI_NM_mpi_scatterv,
+ MPIDI_NM_mpi_gather,
+ MPIDI_NM_mpi_gatherv,
+ MPIDI_NM_mpi_alltoall,
+ MPIDI_NM_mpi_alltoallv,
+ MPIDI_NM_mpi_alltoallw,
+ MPIDI_NM_mpi_reduce,
+ MPIDI_NM_mpi_reduce_scatter,
+ MPIDI_NM_mpi_reduce_scatter_block,
+ MPIDI_NM_mpi_scan,
+ MPIDI_NM_mpi_exscan,
+ MPIDI_NM_mpi_neighbor_allgather,
+ MPIDI_NM_mpi_neighbor_allgatherv,
+ MPIDI_NM_mpi_neighbor_alltoall,
+ MPIDI_NM_mpi_neighbor_alltoallv,
+ MPIDI_NM_mpi_neighbor_alltoallw,
+ MPIDI_NM_mpi_ineighbor_allgather,
+ MPIDI_NM_mpi_ineighbor_allgatherv,
+ MPIDI_NM_mpi_ineighbor_alltoall,
+ MPIDI_NM_mpi_ineighbor_alltoallv,
+ MPIDI_NM_mpi_ineighbor_alltoallw,
+ MPIDI_NM_mpi_ibarrier,
+ MPIDI_NM_mpi_ibcast,
+ MPIDI_NM_mpi_iallgather,
+ MPIDI_NM_mpi_iallgatherv,
+ MPIDI_NM_mpi_iallreduce,
+ MPIDI_NM_mpi_ialltoall,
+ MPIDI_NM_mpi_ialltoallv,
+ MPIDI_NM_mpi_ialltoallw,
+ MPIDI_NM_mpi_iexscan,
+ MPIDI_NM_mpi_igather,
+ MPIDI_NM_mpi_igatherv,
+ MPIDI_NM_mpi_ireduce_scatter_block,
+ MPIDI_NM_mpi_ireduce_scatter,
+ MPIDI_NM_mpi_ireduce,
+ MPIDI_NM_mpi_iscan,
+ MPIDI_NM_mpi_iscatter,
+ MPIDI_NM_mpi_iscatterv,
+ MPIDI_NM_mpi_type_create_hook,
+ MPIDI_NM_mpi_type_free_hook,
+ MPIDI_NM_mpi_op_create_hook,
+ MPIDI_NM_mpi_op_free_hook
+};
+#endif
diff --git a/src/mpid/ch4/netmod/portals4/globals.c b/src/mpid/ch4/netmod/portals4/globals.c
new file mode 100644
index 0000000..0275cdd
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/globals.c
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#include "ptl_impl.h"
+#include "ptl_types.h"
+
+MPIDI_PTL_global_t MPIDI_PTL_global = { 0 };
diff --git a/src/mpid/ch4/netmod/portals4/netmod_direct.h b/src/mpid/ch4/netmod/portals4/netmod_direct.h
new file mode 100644
index 0000000..edae2b3
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/netmod_direct.h
@@ -0,0 +1,30 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef NETMOD_DIRECT_H_INCLUDED
+#define NETMOD_DIRECT_H_INCLUDED
+#include "ptl_init.h"
+#include "ptl_types.h"
+#include "ptl_probe.h"
+#include "ptl_progress.h"
+#include "ptl_recv.h"
+#include "ptl_request.h"
+#include "ptl_send.h"
+#include "ptl_win.h"
+#include "ptl_rma.h"
+#include "ptl_am.h"
+#include "ptl_spawn.h"
+#include "ptl_comm.h"
+#include "ptl_unimpl.h"
+#include "ptl_proc.h"
+#include "ptl_coll.h"
+#include "ptl_datatype.h"
+#include "ptl_op.h"
+#endif /* NETMOD_DIRECT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/portals4_pre.h b/src/mpid/ch4/netmod/portals4/portals4_pre.h
new file mode 100644
index 0000000..b772a51
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/portals4_pre.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef PORTALS4_PRE_H_INCLUDED
+#define PORTALS4_PRE_H_INCLUDED
+
+#include "portals4.h"
+
+typedef struct {
+ int handler_id;
+ char *pack_buffer;
+ ptl_handle_md_t md;
+} MPIDI_PORTALS4_am_request_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_PORTALS4_request_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_PORTALS4_comm_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_PORTALS4_dt_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_PORTALS4_win_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_PORTALS4_addr_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_PORTALS4_op_t;
+
+#endif /* PORTALS4_PRE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_am.h b/src/mpid/ch4/netmod/portals4/ptl_am.h
new file mode 100644
index 0000000..7977327
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_am.h
@@ -0,0 +1,292 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_AM_H_INCLUDED
+#define PTL_AM_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_am_isend(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS, ret, c;
+ size_t data_sz;
+ MPI_Aint dt_true_lb, last;
+ MPIR_Datatype *dt_ptr;
+ int dt_contig;
+ ptl_hdr_data_t ptl_hdr;
+ ptl_match_bits_t match_bits;
+ char *send_buf = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_SEND_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_SEND_AM);
+
+ match_bits = MPIDI_PTL_init_tag(comm->context_id, MPIDI_PTL_AM_TAG);
+ sreq->dev.ch4.am.netmod_am.portals4.handler_id = handler_id;
+
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+
+ /* fast path: there's no data to be sent */
+ if (count == 0) {
+ send_buf = MPL_malloc(am_hdr_sz);
+ MPIR_Memcpy(send_buf, am_hdr, am_hdr_sz);
+ sreq->dev.ch4.am.netmod_am.portals4.pack_buffer = send_buf;
+
+ ptl_hdr = MPIDI_PTL_init_am_hdr(handler_id, 0);
+
+ ret = PtlPut(MPIDI_PTL_global.md, (ptl_size_t) send_buf, am_hdr_sz,
+ PTL_ACK_REQ, MPIDI_PTL_global.addr_table[rank].process,
+ MPIDI_PTL_global.addr_table[rank].pt, match_bits, 0, sreq, ptl_hdr);
+
+ goto fn_exit;
+ }
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ ptl_hdr = MPIDI_PTL_init_am_hdr(handler_id, data_sz);
+
+ if (dt_contig) {
+ /* create a two element iovec and send */
+ ptl_md_t md;
+ ptl_iovec_t iovec[2];
+
+ send_buf = MPL_malloc(am_hdr_sz);
+ MPIR_Memcpy(send_buf, am_hdr, am_hdr_sz);
+ sreq->dev.ch4.am.netmod_am.portals4.pack_buffer = send_buf;
+
+ iovec[0].iov_base = send_buf;
+ iovec[0].iov_len = am_hdr_sz;
+ iovec[1].iov_base = (char *) data + dt_true_lb;
+ iovec[1].iov_len = data_sz;
+ md.start = iovec;
+ md.length = 2;
+ md.options = PTL_IOVEC;
+ md.eq_handle = MPIDI_PTL_global.eqs[0];
+ md.ct_handle = PTL_CT_NONE;
+
+ ret = PtlMDBind(MPIDI_PTL_global.ni, &md, &sreq->dev.ch4.am.netmod_am.portals4.md);
+ ret = PtlPut(sreq->dev.ch4.am.netmod_am.portals4.md, 0, am_hdr_sz + data_sz,
+ PTL_ACK_REQ, MPIDI_PTL_global.addr_table[rank].process,
+ MPIDI_PTL_global.addr_table[rank].pt, match_bits, 0, sreq, ptl_hdr);
+ }
+ else {
+ /* copy everything into pack_buffer */
+ MPID_Segment *segment;
+ MPI_Aint last;
+
+ send_buf = MPL_malloc(am_hdr_sz + data_sz);
+ MPIR_Memcpy(send_buf, am_hdr, am_hdr_sz);
+ segment = MPID_Segment_alloc();
+ MPID_Segment_init(data, count, datatype, segment, 0);
+ last = data_sz;
+ MPID_Segment_pack(segment, 0, &last, send_buf + am_hdr_sz);
+ MPIR_Assert(last == data_sz);
+ MPID_Segment_free(segment);
+ sreq->dev.ch4.am.netmod_am.portals4.pack_buffer = send_buf;
+
+ ret = PtlPut(MPIDI_PTL_global.md, (ptl_size_t) send_buf, am_hdr_sz + data_sz,
+ PTL_ACK_REQ, MPIDI_PTL_global.addr_table[rank].process,
+ MPIDI_PTL_global.addr_table[rank].pt, match_bits, 0, sreq, ptl_hdr);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_SEND_AM);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_am_isendv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype,
+ MPIR_Request * sreq, void *netmod_context)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_am_isend_reply(MPIR_Context_id_t context_id,
+ int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS, ret, c;
+ size_t data_sz;
+ MPI_Aint dt_true_lb, last;
+ MPIR_Datatype *dt_ptr;
+ int dt_contig;
+ ptl_hdr_data_t ptl_hdr;
+ ptl_match_bits_t match_bits;
+ MPIR_Comm *use_comm;
+ char *send_buf = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_SEND_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_SEND_AM);
+
+ use_comm = MPIDI_CH4U_context_id_to_comm(context_id);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ match_bits = MPIDI_PTL_init_tag(use_comm->context_id, MPIDI_PTL_AM_TAG);
+ ptl_hdr = MPIDI_PTL_init_am_hdr(handler_id, data_sz);
+ sreq->dev.ch4.am.netmod_am.portals4.handler_id = handler_id;
+
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+
+ if (dt_contig) {
+ /* create a two element iovec and send */
+ ptl_md_t md;
+ ptl_iovec_t iovec[2];
+
+ send_buf = MPL_malloc(am_hdr_sz);
+ MPIR_Memcpy(send_buf, am_hdr, am_hdr_sz);
+ sreq->dev.ch4.am.netmod_am.portals4.pack_buffer = send_buf;
+
+ iovec[0].iov_base = send_buf;
+ iovec[0].iov_len = am_hdr_sz;
+ iovec[1].iov_base = (char *) data + dt_true_lb;
+ iovec[1].iov_len = data_sz;
+ md.start = iovec;
+ md.length = 2;
+ md.options = PTL_IOVEC;
+ md.eq_handle = MPIDI_PTL_global.eqs[0];
+ md.ct_handle = PTL_CT_NONE;
+
+ ret = PtlMDBind(MPIDI_PTL_global.ni, &md, &sreq->dev.ch4.am.netmod_am.portals4.md);
+ ret = PtlPut(sreq->dev.ch4.am.netmod_am.portals4.md, 0, am_hdr_sz + data_sz,
+ PTL_ACK_REQ, MPIDI_PTL_global.addr_table[src_rank].process,
+ MPIDI_PTL_global.addr_table[src_rank].pt, match_bits, 0, sreq, ptl_hdr);
+ }
+ else {
+ /* copy everything into pack_buffer */
+ MPID_Segment *segment;
+ MPI_Aint last;
+
+ send_buf = MPL_malloc(am_hdr_sz + data_sz);
+ MPIR_Memcpy(send_buf, am_hdr, am_hdr_sz);
+ segment = MPID_Segment_alloc();
+ MPID_Segment_init(data, count, datatype, segment, 0);
+ last = data_sz;
+ MPID_Segment_pack(segment, 0, &last, send_buf + am_hdr_sz);
+ MPIR_Assert(last == data_sz);
+ MPID_Segment_free(segment);
+ sreq->dev.ch4.am.netmod_am.portals4.pack_buffer = send_buf;
+
+ ret = PtlPut(MPIDI_PTL_global.md, (ptl_size_t) send_buf, am_hdr_sz + data_sz,
+ PTL_ACK_REQ, MPIDI_PTL_global.addr_table[src_rank].process,
+ MPIDI_PTL_global.addr_table[src_rank].pt, match_bits, 0, sreq, ptl_hdr);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_SEND_AM);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline size_t MPIDI_NM_am_hdr_max_sz(void)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+static inline int MPIDI_NM_am_send_hdr(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS, ret, c;
+ ptl_hdr_data_t ptl_hdr;
+ ptl_match_bits_t match_bits;
+ char *send_buf = NULL;
+ MPIR_Request *inject_req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_SEND_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_SEND_AM);
+
+ ptl_hdr = MPIDI_PTL_init_am_hdr(handler_id, 0);
+ match_bits = MPIDI_PTL_init_tag(comm->context_id, MPIDI_PTL_AM_TAG);
+
+ /* create an internal request for the inject */
+ inject_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIDI_NM_am_request_init(inject_req);
+ send_buf = MPL_malloc(am_hdr_sz);
+ MPIR_Memcpy(send_buf, am_hdr, am_hdr_sz);
+ inject_req->dev.ch4.am.netmod_am.portals4.pack_buffer = send_buf;
+
+ ret = PtlPut(MPIDI_PTL_global.md, (ptl_size_t) send_buf, am_hdr_sz,
+ PTL_ACK_REQ, MPIDI_PTL_global.addr_table[rank].process,
+ MPIDI_PTL_global.addr_table[rank].pt, match_bits, 0, inject_req, ptl_hdr);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_SEND_AM);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_am_send_hdr_reply(MPIR_Context_id_t context_id,
+ int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz)
+{
+ int mpi_errno = MPI_SUCCESS, ret, c;
+ ptl_hdr_data_t ptl_hdr;
+ ptl_match_bits_t match_bits;
+ MPIR_Comm *use_comm;
+ char *send_buf = NULL;
+ MPIR_Request *inject_req;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_SEND_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_SEND_AM);
+
+ use_comm = MPIDI_CH4U_context_id_to_comm(context_id);
+
+ ptl_hdr = MPIDI_PTL_init_am_hdr(handler_id, 0);
+ match_bits = MPIDI_PTL_init_tag(use_comm->context_id, MPIDI_PTL_AM_TAG);
+
+ /* create an internal request for the inject */
+ inject_req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED);
+ MPIDI_NM_am_request_init(inject_req);
+ send_buf = MPL_malloc(am_hdr_sz);
+ MPIR_Memcpy(send_buf, am_hdr, am_hdr_sz);
+ inject_req->dev.ch4.am.netmod_am.portals4.pack_buffer = send_buf;
+
+ ret = PtlPut(MPIDI_PTL_global.md, (ptl_size_t) send_buf, am_hdr_sz,
+ PTL_ACK_REQ, MPIDI_PTL_global.addr_table[src_rank].process,
+ MPIDI_PTL_global.addr_table[src_rank].pt, match_bits, 0, inject_req, ptl_hdr);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_SEND_AM);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_am_recv(MPIR_Request * req)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+#endif /* PTL_AM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_coll.h b/src/mpid/ch4/netmod/portals4/ptl_coll.h
new file mode 100644
index 0000000..175dbe2
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_coll.h
@@ -0,0 +1,877 @@
+
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_COLL_H_INCLUDED
+#define PTL_COLL_H_INCLUDED
+
+#include "ptl_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+
+ mpi_errno = MPIR_Barrier(comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BCAST);
+
+ mpi_errno = MPIR_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+
+ mpi_errno = MPIR_Allreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+
+ mpi_errno = MPIR_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+
+ mpi_errno = MPIR_Allgatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHER);
+
+ mpi_errno = MPIR_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+
+ mpi_errno = MPIR_Gatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+
+ mpi_errno = MPIR_Scatter(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+
+ mpi_errno = MPIR_Scatterv(sendbuf, sendcounts, displs,
+ sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+
+ mpi_errno = MPIR_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+
+ mpi_errno = MPIR_Alltoallv(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+
+ mpi_errno = MPIR_Alltoallw(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+
+ mpi_errno = MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+
+ mpi_errno = MPIR_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Reduce_scatter_block(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCAN);
+
+ mpi_errno = MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+
+ mpi_errno = MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+
+ mpi_errno =
+ MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+
+ mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibarrier(MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+
+ mpi_errno = MPIR_Ibarrier_impl(comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+
+ mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+
+ mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+
+ mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+
+ mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+
+ mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+
+ mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts,
+ rdispls, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+
+ mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+
+ mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+
+ mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+
+ mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+
+ mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+
+ mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+
+ mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+
+ mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+
+ mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ return mpi_errno;
+}
+
+#endif /* PTL_COLL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_comm.h b/src/mpid/ch4/netmod/portals4/ptl_comm.h
new file mode 100644
index 0000000..5c45ee1
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_comm.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_COMM_H_INCLUDED
+#define PTL_COMM_H_INCLUDED
+
+#include "ptl_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mpi_errno = MPIDI_CH4U_init_comm(comm);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ mpi_errno = MPIDI_CH4U_destroy_comm(comm);
+ return mpi_errno;
+}
+
+
+#endif /* PTL_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_datatype.h b/src/mpid/ch4/netmod/portals4/ptl_datatype.h
new file mode 100644
index 0000000..5510796
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_datatype.h
@@ -0,0 +1,22 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+#ifndef PTL_DATATYPE_H_INCLUDED
+#define PTL_DATATYPE_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_mpi_type_free_hook(MPIR_Datatype * datatype_p)
+{
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_type_create_hook(MPIR_Datatype * datatype_p)
+{
+ return 0;
+}
+
+#endif /* PTL_DATATYPE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_impl.h b/src/mpid/ch4/netmod/portals4/ptl_impl.h
new file mode 100644
index 0000000..9040efb
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_impl.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_IMPL_H_INCLUDED
+#define PTL_IMPL_H_INCLUDED
+
+#include <mpidimpl.h>
+#include "portals4.h"
+
+#define MPIDI_PTL_CASE_STR(x) case x: return #x
+
+static inline const char *MPIDI_PTL_strerror(int ret)
+{
+ switch (ret) {
+ MPIDI_PTL_CASE_STR(PTL_OK);
+ MPIDI_PTL_CASE_STR(PTL_ARG_INVALID);
+ MPIDI_PTL_CASE_STR(PTL_CT_NONE_REACHED);
+ MPIDI_PTL_CASE_STR(PTL_EQ_DROPPED);
+ MPIDI_PTL_CASE_STR(PTL_EQ_EMPTY);
+ MPIDI_PTL_CASE_STR(PTL_FAIL);
+ MPIDI_PTL_CASE_STR(PTL_IN_USE);
+ MPIDI_PTL_CASE_STR(PTL_INTERRUPTED);
+ MPIDI_PTL_CASE_STR(PTL_IGNORED);
+ MPIDI_PTL_CASE_STR(PTL_LIST_TOO_LONG);
+ MPIDI_PTL_CASE_STR(PTL_NO_INIT);
+ MPIDI_PTL_CASE_STR(PTL_NO_SPACE);
+ MPIDI_PTL_CASE_STR(PTL_PID_IN_USE);
+ MPIDI_PTL_CASE_STR(PTL_PT_FULL);
+ MPIDI_PTL_CASE_STR(PTL_PT_EQ_NEEDED);
+ MPIDI_PTL_CASE_STR(PTL_PT_IN_USE);
+ default:
+ return "UNKNOWN";
+ }
+}
+
+#define MPIDI_PTL_ERR MPIR_ERR_CHKANDJUMP4
+
+#define MPIDI_PTL_CHK_STATUS(STATUS,STR) \
+ do { \
+ MPIDI_PTL_ERR(STATUS!=PTL_OK, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**"#STR, \
+ "**"#STR" %s %d %s %s", \
+ __FILE__, \
+ __LINE__, \
+ FCNAME, \
+ MPIDI_PTL_strerror(STATUS)); \
+ } while (0)
+
+#endif /* PTL_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_init.h b/src/mpid/ch4/netmod/portals4/ptl_init.h
new file mode 100644
index 0000000..63cc7c4
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_init.h
@@ -0,0 +1,255 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_INIT_H_INCLUDED
+#define PTL_INIT_H_INCLUDED
+
+#include "mpidch4r.h"
+#include "ptl_types.h"
+#include "ptl_impl.h"
+#include "portals4.h"
+
+static inline int MPIDI_PTL_append_overflow(size_t i)
+{
+ ptl_me_t me;
+ ptl_process_t id_any;
+
+ id_any.phys.pid = PTL_PID_ANY;
+ id_any.phys.nid = PTL_NID_ANY;
+
+ me.start = MPIDI_PTL_global.overflow_bufs[i];
+ me.length = MPIDI_PTL_OVERFLOW_BUFFER_SZ;
+ me.ct_handle = PTL_CT_NONE;
+ me.uid = PTL_UID_ANY;
+ me.options = (PTL_ME_OP_PUT | PTL_ME_MANAGE_LOCAL | PTL_ME_NO_TRUNCATE | PTL_ME_MAY_ALIGN |
+ PTL_ME_IS_ACCESSIBLE | PTL_ME_EVENT_LINK_DISABLE);
+ me.match_id = id_any;
+ me.match_bits = 0;
+ me.ignore_bits = ~((ptl_match_bits_t) 0);
+ me.min_free = MPIDI_PTL_MAX_AM_EAGER_SZ;
+
+ return PtlMEAppend(MPIDI_PTL_global.ni, MPIDI_PTL_global.pt, &me, PTL_OVERFLOW_LIST, (void *) i,
+ &MPIDI_PTL_global.overflow_me_handles[i]);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_init_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_init_hook(int rank,
+ int size,
+ int appnum,
+ int *tag_ub,
+ MPIR_Comm * comm_world,
+ MPIR_Comm * comm_self,
+ int spawned, int num_contexts, void **netmod_contexts)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int ret;
+ ptl_md_t md;
+ ptl_ni_limits_t desired;
+ ptl_process_t my_ptl_id;
+ int key_max_sz;
+ int val_max_sz, val_sz_left;
+ int name_max_sz;
+ int len, i;
+ char *keyS, *valS, *buscard;
+
+ /* Make sure our IOV is the same as portals4's IOV */
+ MPIR_Assert(sizeof(ptl_iovec_t) == sizeof(MPL_IOV));
+ MPIR_Assert(((void *) &(((ptl_iovec_t *) 0)->iov_base)) ==
+ ((void *) &(((MPL_IOV *) 0)->MPL_IOV_BUF)));
+ MPIR_Assert(((void *) &(((ptl_iovec_t *) 0)->iov_len)) ==
+ ((void *) &(((MPL_IOV *) 0)->MPL_IOV_LEN)));
+ MPIR_Assert(sizeof(((ptl_iovec_t *) 0)->iov_len) == sizeof(((MPL_IOV *) 0)->MPL_IOV_LEN));
+
+ /* init portals */
+ ret = PtlInit();
+ MPIDI_PTL_CHK_STATUS(ret, PtlInit);
+
+ /* /\* do an interface pre-init to get the default limits struct *\/ */
+ /* ret = PtlNIInit(PTL_IFACE_DEFAULT, PTL_NI_MATCHING | PTL_NI_PHYSICAL, */
+ /* PTL_PID_ANY, NULL, &desired, &MPIDI_PTL_global.ni_handle); */
+ /* MPIDI_PTL_CHK_STATUS(ret, PtlNIInit); */
+
+ /* /\* finalize the interface so we can re-init with our desired maximums *\/ */
+ /* ret = PtlNIFini(MPIDI_PTL_global.ni_handle); */
+ /* MPIDI_PTL_CHK_STATUS(ret, PtlNIFini); */
+
+ /* /\* set higher limits if they are determined to be too low *\/ */
+ /* if (desired.max_unexpected_headers < UNEXPECTED_HDR_COUNT && getenv("PTL_LIM_MAX_UNEXPECTED_HEADERS") == NULL) */
+ /* desired.max_unexpected_headers = UNEXPECTED_HDR_COUNT; */
+ /* if (desired.max_list_size < LIST_SIZE && getenv("PTL_LIM_MAX_LIST_SIZE") == NULL) */
+ /* desired.max_list_size = LIST_SIZE; */
+ /* if (desired.max_entries < ENTRY_COUNT && getenv("PTL_LIM_MAX_ENTRIES") == NULL) */
+ /* desired.max_entries = ENTRY_COUNT; */
+
+ /* do the real init */
+ ret = PtlNIInit(PTL_IFACE_DEFAULT, PTL_NI_MATCHING | PTL_NI_PHYSICAL,
+ PTL_PID_ANY, NULL, &MPIDI_PTL_global.ni_limits, &MPIDI_PTL_global.ni);
+ MPIDI_PTL_CHK_STATUS(ret, PtlNIInit);
+
+ /* allocate EQs: 0 is origin, 1 is target */
+ ret = PtlEQAlloc(MPIDI_PTL_global.ni, MPIDI_PTL_EVENT_COUNT, &MPIDI_PTL_global.eqs[0]);
+ MPIDI_PTL_CHK_STATUS(ret, PtlEQAlloc);
+ ret = PtlEQAlloc(MPIDI_PTL_global.ni, MPIDI_PTL_EVENT_COUNT, &MPIDI_PTL_global.eqs[1]);
+ MPIDI_PTL_CHK_STATUS(ret, PtlEQAlloc);
+
+ /* allocate portal */
+ ret =
+ PtlPTAlloc(MPIDI_PTL_global.ni,
+ PTL_PT_ONLY_USE_ONCE | PTL_PT_ONLY_TRUNCATE | PTL_PT_FLOWCTRL,
+ MPIDI_PTL_global.eqs[1], PTL_PT_ANY, &MPIDI_PTL_global.pt);
+ MPIDI_PTL_CHK_STATUS(ret, PtlPTAlloc);
+
+ /* create an MD that covers all of memory */
+ md.start = NULL;
+ md.length = PTL_SIZE_MAX;
+ md.options = 0x0;
+ md.eq_handle = MPIDI_PTL_global.eqs[0];
+ md.ct_handle = PTL_CT_NONE;
+ ret = PtlMDBind(MPIDI_PTL_global.ni, &md, &MPIDI_PTL_global.md);
+ MPIDI_PTL_CHK_STATUS(ret, PtlMDBind);
+
+ /* create business card */
+ ret = PMI_KVS_Get_key_length_max(&key_max_sz);
+ ret = PMI_KVS_Get_value_length_max(&val_max_sz);
+ ret = PMI_KVS_Get_name_length_max(&name_max_sz);
+ MPIDI_PTL_global.kvsname = MPL_malloc(name_max_sz);
+ ret = PMI_KVS_Get_my_name(MPIDI_PTL_global.kvsname, name_max_sz);
+
+ keyS = MPL_malloc(key_max_sz);
+ valS = MPL_malloc(val_max_sz);
+ buscard = valS;
+ val_sz_left = val_max_sz;
+
+ ret = PtlGetId(MPIDI_PTL_global.ni, &my_ptl_id);
+ ret =
+ MPL_str_add_binary_arg(&buscard, &val_sz_left, "NID", (char *) &my_ptl_id.phys.nid,
+ sizeof(my_ptl_id.phys.nid));
+ ret =
+ MPL_str_add_binary_arg(&buscard, &val_sz_left, "PID", (char *) &my_ptl_id.phys.pid,
+ sizeof(my_ptl_id.phys.pid));
+ ret =
+ MPL_str_add_binary_arg(&buscard, &val_sz_left, "PTI", (char *) &MPIDI_PTL_global.pt,
+ sizeof(MPIDI_PTL_global.pt));
+
+ sprintf(keyS, "PTL-%d", rank);
+ buscard = valS;
+ ret = PMI_KVS_Put(MPIDI_PTL_global.kvsname, keyS, buscard);
+ ret = PMI_KVS_Commit(MPIDI_PTL_global.kvsname);
+ ret = PMI_Barrier();
+
+ /* get and store business cards in address table */
+ MPIDI_PTL_global.addr_table = MPL_malloc(size * sizeof(MPIDI_PTL_addr_t));
+ for (i = 0; i < size; i++) {
+ sprintf(keyS, "PTL-%d", i);
+ ret = PMI_KVS_Get(MPIDI_PTL_global.kvsname, keyS, valS, val_max_sz);
+ MPL_str_get_binary_arg(valS, "NID",
+ (char *) &MPIDI_PTL_global.addr_table[i].process.phys.nid,
+ sizeof(MPIDI_PTL_global.addr_table[i].process.phys.nid), &len);
+ MPL_str_get_binary_arg(valS, "PID",
+ (char *) &MPIDI_PTL_global.addr_table[i].process.phys.pid,
+ sizeof(MPIDI_PTL_global.addr_table[i].process.phys.pid), &len);
+ MPL_str_get_binary_arg(valS, "PTI", (char *) &MPIDI_PTL_global.addr_table[i].pt,
+ sizeof(MPIDI_PTL_global.addr_table[i].pt), &len);
+ }
+
+ /* Setup CH4R Active Messages */
+ MPIDIG_init(comm_world, comm_self, num_contexts, netmod_contexts);
+ for (i = 0; i < MPIDI_PTL_NUM_OVERFLOW_BUFFERS; i++) {
+ MPIDI_PTL_global.overflow_bufs[i] = MPL_malloc(MPIDI_PTL_OVERFLOW_BUFFER_SZ);
+ MPIDI_PTL_append_overflow(i);
+ }
+
+ MPIDI_PTL_global.node_map = MPL_malloc(size * sizeof(*MPIDI_PTL_global.node_map));
+ mpi_errno =
+ MPIDI_CH4U_build_nodemap(rank, comm_world, size, MPIDI_PTL_global.node_map,
+ &MPIDI_PTL_global.max_node_id);
+
+ fn_exit:
+ MPL_free(keyS);
+ MPL_free(valS);
+
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_mpi_finalize_hook(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int ret, i;
+
+ MPIR_Comm_release(MPIR_Process.comm_world);
+ MPIR_Comm_release(MPIR_Process.comm_self);
+
+ MPIDIG_finalize();
+
+ for (i = 0; i < MPIDI_PTL_NUM_OVERFLOW_BUFFERS; i++) {
+ ret = PtlMEUnlink(MPIDI_PTL_global.overflow_me_handles[i]);
+ MPL_free(MPIDI_PTL_global.overflow_bufs[i]);
+ }
+ ret = PtlMDRelease(MPIDI_PTL_global.md);
+ ret = PtlPTFree(MPIDI_PTL_global.ni, MPIDI_PTL_global.pt);
+ ret = PtlEQFree(MPIDI_PTL_global.eqs[1]);
+ ret = PtlEQFree(MPIDI_PTL_global.eqs[0]);
+ ret = PtlNIFini(MPIDI_PTL_global.ni);
+ PtlFini();
+
+ MPL_free(MPIDI_PTL_global.node_map);
+ MPL_free(MPIDI_PTL_global.addr_table);
+ MPL_free(MPIDI_PTL_global.kvsname);
+
+ return mpi_errno;
+}
+
+
+static inline int MPIDI_NM_comm_get_lpid(MPIR_Comm * comm_ptr,
+ int idx, int *lpid_ptr, MPL_bool is_remote)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_upids_to_lupids(int size,
+ size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_free_mem(void *ptr)
+{
+ return MPIDI_CH4U_mpi_free_mem(ptr);
+}
+
+static inline void *MPIDI_NM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ return MPIDI_CH4U_mpi_alloc_mem(size, info_ptr);
+}
+
+
+#endif /* PTL_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_op.h b/src/mpid/ch4/netmod/portals4/ptl_op.h
new file mode 100644
index 0000000..c21c824
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_op.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+#ifndef PTL_OP_H_INCLUDED
+#define PTL_OP_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_mpi_op_free_hook(MPIR_Op * op_p)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_op_create_hook(MPIR_Op * op_p)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+#endif /* PTL_OP_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_probe.h b/src/mpid/ch4/netmod/portals4/ptl_probe.h
new file mode 100644
index 0000000..d36eb10
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_probe.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_PROBE_H_INCLUDED
+#define PTL_PROBE_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_probe(int source,
+ int tag, MPIR_Comm * comm, int context_offset, MPI_Status * status)
+{
+ return MPIDI_CH4U_probe(source, tag, comm, context_offset, status);
+}
+
+static inline int MPIDI_NM_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+ return MPIDI_CH4U_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+}
+
+static inline int MPIDI_NM_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ return MPIDI_CH4U_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+}
+
+#endif /* PTL_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_proc.h b/src/mpid/ch4/netmod/portals4/ptl_proc.h
new file mode 100644
index 0000000..8674f6c
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_proc.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_PROC_H_INCLUDED
+#define PTL_PROC_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_rank_is_local(int rank, MPIR_Comm * comm)
+{
+ int ret;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+
+ MPIR_Assert(0);
+ ret = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ return ret;
+}
+
+#endif /* PTL_PROC_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_progress.h b/src/mpid/ch4/netmod/portals4/ptl_progress.h
new file mode 100644
index 0000000..392b670
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_progress.h
@@ -0,0 +1,185 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_PROGRESS_H_INCLUDED
+#define PTL_PROGRESS_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_PTL_am_handler(ptl_event_t * e)
+{
+ int mpi_errno;
+ MPIR_Request *rreq = NULL;
+ void *p_data;
+ void *in_data;
+ size_t data_sz, in_data_sz;
+ MPIDIG_am_target_cmpl_cb target_cmpl_cb = NULL;
+ struct iovec *iov;
+ int i, is_contig, iov_len;
+ size_t done, curr_len, rem;
+
+ in_data_sz = data_sz = (e->hdr_data & MPIDI_PTL_MSG_SZ_MASK);
+ in_data = p_data = (e->start + (e->mlength - data_sz));
+ int handler_id = e->hdr_data >> 56;
+
+ MPIDIG_global.target_msg_cbs[handler_id] (handler_id, e->start,
+ &p_data, &data_sz, &is_contig, &target_cmpl_cb,
+ &rreq);
+
+ if (!rreq)
+ goto fn_exit;
+
+ if ((!p_data || !data_sz) && target_cmpl_cb) {
+ target_cmpl_cb(rreq);
+ goto fn_exit;
+ }
+
+ if (is_contig) {
+ if (in_data_sz > data_sz) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ data_sz = MPL_MIN(data_sz, in_data_sz);
+ MPIR_Memcpy(p_data, in_data, data_sz);
+ MPIR_STATUS_SET_COUNT(rreq->status, data_sz);
+ }
+ else {
+ done = 0;
+ rem = in_data_sz;
+ iov = (struct iovec *) p_data;
+ iov_len = data_sz;
+
+ for (i = 0; i < iov_len && rem > 0; i++) {
+ curr_len = MPL_MIN(rem, iov[i].iov_len);
+ MPIR_Memcpy(iov[i].iov_base, (char *) in_data + done, curr_len);
+ rem -= curr_len;
+ done += curr_len;
+ }
+
+ if (rem) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ MPIR_STATUS_SET_COUNT(rreq->status, done);
+ }
+
+ if (target_cmpl_cb) {
+ target_cmpl_cb(rreq);
+ }
+
+ fn_exit:
+ return mpi_errno;
+}
+
+static inline int MPIDI_NM_progress(void *netmod_context, int blocking)
+{
+ ptl_event_t e;
+ unsigned int which;
+
+ while (PtlEQPoll(MPIDI_PTL_global.eqs, 2, 0, &e, &which) != PTL_EQ_EMPTY) {
+ switch (e.type) {
+ case PTL_EVENT_PUT:
+ MPIR_Assert(e.ptl_list == PTL_OVERFLOW_LIST);
+ MPIDI_PTL_am_handler(&e);
+ break;
+ case PTL_EVENT_ACK:
+ {
+ int count;
+ MPIR_Request *sreq = (MPIR_Request *) e.user_ptr;
+ int handler_id = sreq->dev.ch4.am.netmod_am.portals4.handler_id;
+
+ MPIR_cc_decr(sreq->cc_ptr, &count);
+ MPIR_Assert(count >= 0);
+
+ if (count == 0) {
+ MPIR_Request_free(sreq);
+ break;
+ }
+ MPIDIG_global.origin_cbs[handler_id] (sreq);
+ }
+ break;
+ case PTL_EVENT_AUTO_UNLINK:
+ MPIDI_PTL_global.overflow_me_handles[(size_t) e.user_ptr] = PTL_INVALID_HANDLE;
+ break;
+ case PTL_EVENT_AUTO_FREE:
+ MPIDI_PTL_append_overflow((size_t) e.user_ptr);
+ break;
+ case PTL_EVENT_SEND:
+ break;
+ default:
+ printf("ABORT: event = %d\n", e.type);
+ abort();
+ }
+ }
+
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_test(void)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_poke(void)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline void MPIDI_NM_progress_start(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return;
+}
+
+static inline void MPIDI_NM_progress_end(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return;
+}
+
+static inline int MPIDI_NM_progress_wait(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_register(int (*progress_fn) (int *), int *id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_deregister(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_activate(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_deactivate(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* PTL_PROGRESS_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_recv.h b/src/mpid/ch4/netmod/portals4/ptl_recv.h
new file mode 100644
index 0000000..8ba6d66
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_recv.h
@@ -0,0 +1,65 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_RECV_H_INCLUDED
+#define PTL_RECV_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_recv(buf, count, datatype, rank, tag, comm, context_offset, status, request);
+}
+
+static inline int MPIDI_NM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* PTL_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_request.h b/src/mpid/ch4/netmod/portals4/ptl_request.h
new file mode 100644
index 0000000..8feab50
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_request.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_REQUEST_H_INCLUDED
+#define PTL_REQUEST_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline void MPIDI_NM_am_request_init(MPIR_Request * req)
+{
+ req->dev.ch4.am.netmod_am.portals4.pack_buffer = NULL;
+ req->dev.ch4.am.netmod_am.portals4.md = PTL_INVALID_HANDLE;
+}
+
+static inline void MPIDI_NM_am_request_finalize(MPIR_Request * req)
+{
+ if ((req)->dev.ch4.am.netmod_am.portals4.pack_buffer) {
+ MPL_free((req)->dev.ch4.am.netmod_am.portals4.pack_buffer);
+ }
+ if ((req)->dev.ch4.am.netmod_am.portals4.md != PTL_INVALID_HANDLE) {
+ PtlMDRelease((req)->dev.ch4.am.netmod_am.portals4.md);
+ }
+}
+
+#endif /* PTL_REQUEST_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_rma.h b/src/mpid/ch4/netmod/portals4/ptl_rma.h
new file mode 100644
index 0000000..f867fb8
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_rma.h
@@ -0,0 +1,153 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_RMA_H_INCLUDED
+#define PTL_RMA_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+}
+
+static inline int MPIDI_NM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+}
+
+static inline int MPIDI_NM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rput(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+}
+
+static inline int MPIDI_NM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_fetch_and_op(origin_addr, result_addr, datatype,
+ target_rank, target_disp, op, win);
+}
+
+
+static inline int MPIDI_NM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+}
+
+static inline int MPIDI_NM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win);
+}
+
+#endif /* PTL_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_send.h b/src/mpid/ch4/netmod/portals4/ptl_send.h
new file mode 100644
index 0000000..eb5a215
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_send.h
@@ -0,0 +1,132 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_SEND_H_INCLUDED
+#define PTL_SEND_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_rsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+
+
+static inline int MPIDI_NM_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_irsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ return MPIDIG_mpi_startall(count, requests);
+}
+
+static inline int MPIDI_NM_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_bsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_issend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ return MPIDIG_mpi_cancel_send(sreq);
+}
+
+#endif /* PTL_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_spawn.h b/src/mpid/ch4/netmod/portals4/ptl_spawn.h
new file mode 100644
index 0000000..d319bf4
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_spawn.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_SPAWN_H_INCLUDED
+#define PTL_SPAWN_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_mpi_comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_close_port(const char *port_name)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* PTL_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_types.h b/src/mpid/ch4/netmod/portals4/ptl_types.h
new file mode 100644
index 0000000..c17dea6
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_types.h
@@ -0,0 +1,73 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * * (C) 2016 by Argonne National Laboratory.
+ * * See COPYRIGHT in top-level directory.
+ * *
+ * */
+
+#ifndef PTL_TYPES_H_INCLUDED
+#define PTL_TYPES_H_INCLUDED
+
+#include "mpidimpl.h"
+#include "portals4.h"
+
+/* Portals 4 Limits */
+#define MPIDI_PTL_EVENT_COUNT (1024*64)
+#define MPIDI_PTL_UNEXPECTED_HDR_COUNT (1024*64)
+#define MPIDI_PTL_LIST_SIZE (1024*64)
+
+/* Active Message Stuff */
+#define MPIDI_PTL_NUM_OVERFLOW_BUFFERS (8)
+#define MPIDI_PTL_OVERFLOW_BUFFER_SZ (1024*1024)
+#define MPIDI_PTL_MAX_AM_EAGER_SZ (64*1024)
+#define MPIDI_PTL_AM_TAG (1 << 28)
+
+typedef struct {
+ ptl_process_t process;
+ ptl_pt_index_t pt;
+} MPIDI_PTL_addr_t;
+
+typedef struct {
+ MPIDI_PTL_addr_t *addr_table;
+ MPID_Node_id_t *node_map;
+ MPID_Node_id_t max_node_id;
+ char *kvsname;
+ char pname[MPI_MAX_PROCESSOR_NAME];
+ void *overflow_bufs[MPIDI_PTL_NUM_OVERFLOW_BUFFERS];
+ ptl_handle_me_t overflow_me_handles[MPIDI_PTL_NUM_OVERFLOW_BUFFERS];
+ ptl_handle_ni_t ni;
+ ptl_ni_limits_t ni_limits;
+ ptl_handle_eq_t eqs[2];
+ ptl_pt_index_t pt;
+ ptl_handle_md_t md;
+} MPIDI_PTL_global_t;
+
+extern MPIDI_PTL_global_t MPIDI_PTL_global;
+
+#define MPIDI_PTL_CONTEXT_ID_BITS 32
+#define MPIDI_PTL_TAG_BITS 32
+
+#define MPIDI_PTL_TAG_MASK (0x00000000FFFFFFFFULL)
+#define MPIDI_PTL_CTX_MASK (0xFFFFFFFF00000000ULL)
+#define MPIDI_PTL_TAG_SHIFT (MPIDI_PTL_TAG_BITS)
+
+static inline ptl_match_bits_t MPIDI_PTL_init_tag(MPIR_Context_id_t contextid, int tag)
+{
+ ptl_match_bits_t match_bits = 0;
+ match_bits = contextid;
+ match_bits <<= MPIDI_PTL_TAG_SHIFT;
+ match_bits |= (MPIDI_PTL_TAG_MASK & tag);
+ return match_bits;
+}
+
+#define MPIDI_PTL_MSG_SZ_MASK (0x00FFFFFFFFFFFFFFULL)
+
+static inline ptl_hdr_data_t MPIDI_PTL_init_am_hdr(int handler_id, size_t msg_sz)
+{
+ ptl_hdr_data_t hdr = 0;
+ hdr = (ptl_hdr_data_t) handler_id << 56;
+ hdr |= (MPIDI_PTL_MSG_SZ_MASK & msg_sz);
+ return hdr;
+}
+
+#endif /* PTL_TYPES_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_unimpl.h b/src/mpid/ch4/netmod/portals4/ptl_unimpl.h
new file mode 100644
index 0000000..e8bb3f6
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_unimpl.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif /* PTL_UNIMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/ptl_win.h b/src/mpid/ch4/netmod/portals4/ptl_win.h
new file mode 100644
index 0000000..6a15080
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/ptl_win.h
@@ -0,0 +1,163 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef PTL_WIN_H_INCLUDED
+#define PTL_WIN_H_INCLUDED
+
+#include "ptl_impl.h"
+
+static inline int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ return MPIDI_CH4R_mpi_win_set_info(win, info);
+}
+
+
+static inline int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_start(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_complete(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_complete(win);
+}
+
+static inline int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_post(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_wait(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_wait(win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ return MPIDI_CH4R_mpi_win_test(win, flag);
+}
+
+static inline int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock(lock_type, rank, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_unlock(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ return MPIDI_CH4R_mpi_win_get_info(win, info_p_p);
+}
+
+
+static inline int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_free(win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_fence(assert, win);
+}
+
+static inline int MPIDI_NM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_create(base, length, disp_unit, info, comm_ptr, win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ return MPIDI_CH4R_mpi_win_attach(win, base, size);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_allocate_shared(size, disp_unit, info_ptr, comm_ptr, base_ptr,
+ win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ return MPIDI_CH4R_mpi_win_detach(win, base);
+}
+
+static inline int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ return MPIDI_CH4R_mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win)
+{
+ return MPIDI_CH4R_mpi_win_allocate(size, disp_unit, info, comm, baseptr, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_local_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_unlock_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ return MPIDI_CH4R_mpi_win_create_dynamic(info, comm, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_local(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_sync(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_sync(win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock_all(assert, win);
+}
+
+
+#endif /* PTL_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/portals4/subconfigure.m4 b/src/mpid/ch4/netmod/portals4/subconfigure.m4
new file mode 100644
index 0000000..21a60b1
--- /dev/null
+++ b/src/mpid/ch4/netmod/portals4/subconfigure.m4
@@ -0,0 +1,33 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_AFTER=src/mpid/ch4
+
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_COND_IF([BUILD_CH4],[
+ for net in $ch4_netmods ; do
+ AS_CASE([$net],[portals4],[build_ch4_netmod_portals4=yes])
+ if test $net = "portals4" ; then
+ AC_DEFINE(HAVE_CH4_NETMOD_PORTALS4,1,[Portals4 netmod is built])
+ # if test "$build_ch4_locality_info" != "yes" ; then
+ # AC_DEFINE(MPIDI_BUILD_CH4_LOCALITY_INFO, 1, [CH4 should build locality info])
+ # build_ch4_locality_info="yes"
+ # fi
+ fi
+ done
+ ])
+ AM_CONDITIONAL([BUILD_CH4_NETMOD_PORTALS4],[test "X$build_ch4_netmod_portals4" = "Xyes"])
+])dnl
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_CH4_NETMOD_PORTALS4],[
+ AC_MSG_NOTICE([RUNNING CONFIGURE FOR ch4:portals4])
+
+ PAC_SET_HEADER_LIB_PATH(portals4)
+ PAC_PUSH_FLAG(LIBS)
+ PAC_CHECK_HEADER_LIB_FATAL(portals4, portals4.h, portals, PtlInit)
+ PAC_APPEND_FLAG([-lportals],[WRAPPER_LIBS])
+ PAC_POP_FLAG(LIBS)
+
+])dnl end AM_COND_IF(BUILD_CH4_NETMOD_PORTALS4,...)
+])dnl end _BODY
+
+[#] end of __file__
diff --git a/src/mpid/ch4/netmod/stubnm/Makefile.mk b/src/mpid/ch4/netmod/stubnm/Makefile.mk
new file mode 100644
index 0000000..244ba01
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/Makefile.mk
@@ -0,0 +1,6 @@
+if BUILD_CH4_NETMOD_STUBNM
+
+mpi_core_sources += src/mpid/ch4/netmod/stubnm/globals.c
+# errnames_txt_files += src/mpid/ch4/netmod/stub/errnames.txt
+
+endif
diff --git a/src/mpid/ch4/netmod/stubnm/globals.c b/src/mpid/ch4/netmod/stubnm/globals.c
new file mode 100644
index 0000000..d1220c3
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/globals.c
@@ -0,0 +1,147 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef NETMOD_DIRECT
+#define NETMOD_DISABLE_INLINES
+#include <mpidimpl.h>
+#include "netmod_direct.h"
+MPIDI_NM_funcs_t MPIDI_NM_stubnm_funcs = {
+ MPIDI_NM_mpi_init_hook,
+ MPIDI_NM_mpi_finalize_hook,
+ MPIDI_NM_progress,
+ MPIDI_NM_mpi_comm_connect,
+ MPIDI_NM_mpi_comm_disconnect,
+ MPIDI_NM_mpi_open_port,
+ MPIDI_NM_mpi_close_port,
+ MPIDI_NM_mpi_comm_accept,
+ MPIDI_NM_comm_get_lpid,
+ MPIDI_NM_get_local_upids,
+ MPIDI_NM_upids_to_lupids,
+ MPIDI_NM_create_intercomm_from_lpids,
+ MPIDI_NM_mpi_comm_create_hook,
+ MPIDI_NM_mpi_comm_free_hook,
+ MPIDI_NM_am_request_init,
+ MPIDI_NM_am_request_finalize,
+ MPIDI_NM_am_send_hdr,
+ MPIDI_NM_am_isend,
+ MPIDI_NM_am_isendv,
+ MPIDI_NM_am_send_hdr_reply,
+ MPIDI_NM_am_isend_reply,
+ MPIDI_NM_am_hdr_max_sz,
+ MPIDI_NM_am_recv,
+};
+
+MPIDI_NM_native_funcs_t MPIDI_NM_native_stubnm_funcs = {
+ MPIDI_NM_mpi_send,
+ MPIDI_NM_mpi_ssend,
+ MPIDI_NM_mpi_startall,
+ MPIDI_NM_mpi_send_init,
+ MPIDI_NM_mpi_ssend_init,
+ MPIDI_NM_mpi_rsend_init,
+ MPIDI_NM_mpi_bsend_init,
+ MPIDI_NM_mpi_isend,
+ MPIDI_NM_mpi_issend,
+ MPIDI_NM_mpi_cancel_send,
+ MPIDI_NM_mpi_recv_init,
+ MPIDI_NM_mpi_recv,
+ MPIDI_NM_mpi_irecv,
+ MPIDI_NM_mpi_imrecv,
+ MPIDI_NM_mpi_cancel_recv,
+ MPIDI_NM_mpi_alloc_mem,
+ MPIDI_NM_mpi_free_mem,
+ MPIDI_NM_mpi_improbe,
+ MPIDI_NM_mpi_iprobe,
+ MPIDI_NM_mpi_win_set_info,
+ MPIDI_NM_mpi_win_shared_query,
+ MPIDI_NM_mpi_put,
+ MPIDI_NM_mpi_win_start,
+ MPIDI_NM_mpi_win_complete,
+ MPIDI_NM_mpi_win_post,
+ MPIDI_NM_mpi_win_wait,
+ MPIDI_NM_mpi_win_test,
+ MPIDI_NM_mpi_win_lock,
+ MPIDI_NM_mpi_win_unlock,
+ MPIDI_NM_mpi_win_get_info,
+ MPIDI_NM_mpi_get,
+ MPIDI_NM_mpi_win_free,
+ MPIDI_NM_mpi_win_fence,
+ MPIDI_NM_mpi_win_create,
+ MPIDI_NM_mpi_accumulate,
+ MPIDI_NM_mpi_win_attach,
+ MPIDI_NM_mpi_win_allocate_shared,
+ MPIDI_NM_mpi_rput,
+ MPIDI_NM_mpi_win_flush_local,
+ MPIDI_NM_mpi_win_detach,
+ MPIDI_NM_mpi_compare_and_swap,
+ MPIDI_NM_mpi_raccumulate,
+ MPIDI_NM_mpi_rget_accumulate,
+ MPIDI_NM_mpi_fetch_and_op,
+ MPIDI_NM_mpi_win_allocate,
+ MPIDI_NM_mpi_win_flush,
+ MPIDI_NM_mpi_win_flush_local_all,
+ MPIDI_NM_mpi_win_unlock_all,
+ MPIDI_NM_mpi_win_create_dynamic,
+ MPIDI_NM_mpi_rget,
+ MPIDI_NM_mpi_win_sync,
+ MPIDI_NM_mpi_win_flush_all,
+ MPIDI_NM_mpi_get_accumulate,
+ MPIDI_NM_mpi_win_lock_all,
+ MPIDI_NM_rank_is_local,
+ MPIDI_NM_mpi_barrier,
+ MPIDI_NM_mpi_bcast,
+ MPIDI_NM_mpi_allreduce,
+ MPIDI_NM_mpi_allgather,
+ MPIDI_NM_mpi_allgatherv,
+ MPIDI_NM_mpi_scatter,
+ MPIDI_NM_mpi_scatterv,
+ MPIDI_NM_mpi_gather,
+ MPIDI_NM_mpi_gatherv,
+ MPIDI_NM_mpi_alltoall,
+ MPIDI_NM_mpi_alltoallv,
+ MPIDI_NM_mpi_alltoallw,
+ MPIDI_NM_mpi_reduce,
+ MPIDI_NM_mpi_reduce_scatter,
+ MPIDI_NM_mpi_reduce_scatter_block,
+ MPIDI_NM_mpi_scan,
+ MPIDI_NM_mpi_exscan,
+ MPIDI_NM_mpi_neighbor_allgather,
+ MPIDI_NM_mpi_neighbor_allgatherv,
+ MPIDI_NM_mpi_neighbor_alltoall,
+ MPIDI_NM_mpi_neighbor_alltoallv,
+ MPIDI_NM_mpi_neighbor_alltoallw,
+ MPIDI_NM_mpi_ineighbor_allgather,
+ MPIDI_NM_mpi_ineighbor_allgatherv,
+ MPIDI_NM_mpi_ineighbor_alltoall,
+ MPIDI_NM_mpi_ineighbor_alltoallv,
+ MPIDI_NM_mpi_ineighbor_alltoallw,
+ MPIDI_NM_mpi_ibarrier,
+ MPIDI_NM_mpi_ibcast,
+ MPIDI_NM_mpi_iallgather,
+ MPIDI_NM_mpi_iallgatherv,
+ MPIDI_NM_mpi_iallreduce,
+ MPIDI_NM_mpi_ialltoall,
+ MPIDI_NM_mpi_ialltoallv,
+ MPIDI_NM_mpi_ialltoallw,
+ MPIDI_NM_mpi_iexscan,
+ MPIDI_NM_mpi_igather,
+ MPIDI_NM_mpi_igatherv,
+ MPIDI_NM_mpi_ireduce_scatter_block,
+ MPIDI_NM_mpi_ireduce_scatter,
+ MPIDI_NM_mpi_ireduce,
+ MPIDI_NM_mpi_iscan,
+ MPIDI_NM_mpi_iscatter,
+ MPIDI_NM_mpi_iscatterv,
+ MPIDI_NM_mpi_type_create_hook,
+ MPIDI_NM_mpi_type_free_hook,
+ MPIDI_NM_mpi_op_create_hook,
+ MPIDI_NM_mpi_op_free_hook,
+};
+#endif
diff --git a/src/mpid/ch4/netmod/stubnm/netmod_direct.h b/src/mpid/ch4/netmod/stubnm/netmod_direct.h
new file mode 100644
index 0000000..f2873ad
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/netmod_direct.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef NETMOD_DIRECT_H_INCLUDED
+#define NETMOD_DIRECT_H_INCLUDED
+#include "stubnm_init.h"
+#include "stubnm_probe.h"
+#include "stubnm_progress.h"
+#include "stubnm_recv.h"
+#include "stubnm_request.h"
+#include "stubnm_send.h"
+#include "stubnm_win.h"
+#include "stubnm_rma.h"
+#include "stubnm_am.h"
+#include "stubnm_spawn.h"
+#include "stubnm_comm.h"
+#include "stubnm_unimpl.h"
+#include "stubnm_proc.h"
+#include "stubnm_coll.h"
+#include "stubnm_datatype.h"
+#include "stubnm_op.h"
+#endif /* NETMOD_DIRECT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_am.h b/src/mpid/ch4/netmod/stubnm/stubnm_am.h
new file mode 100644
index 0000000..9a49c58
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_am.h
@@ -0,0 +1,84 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_AM_H_INCLUDED
+#define STUBNM_AM_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_am_isend(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_am_isendv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype,
+ MPIR_Request * sreq, void *netmod_context)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_am_isend_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline size_t MPIDI_NM_am_hdr_max_sz(void)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+static inline int MPIDI_NM_am_send_hdr(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *netmod_context)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_am_send_hdr_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_am_recv(MPIR_Request * req)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+#endif /* STUBNM_AM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_coll.h b/src/mpid/ch4/netmod/stubnm/stubnm_coll.h
new file mode 100644
index 0000000..c16acdb
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_coll.h
@@ -0,0 +1,877 @@
+
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_COLL_H_INCLUDED
+#define STUBNM_COLL_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+
+ mpi_errno = MPIR_Barrier(comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BCAST);
+
+ mpi_errno = MPIR_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+
+ mpi_errno = MPIR_Allreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+
+ mpi_errno = MPIR_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+
+ mpi_errno = MPIR_Allgatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHER);
+
+ mpi_errno = MPIR_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+
+ mpi_errno = MPIR_Gatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+
+ mpi_errno = MPIR_Scatter(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+
+ mpi_errno = MPIR_Scatterv(sendbuf, sendcounts, displs,
+ sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+
+ mpi_errno = MPIR_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+
+ mpi_errno = MPIR_Alltoallv(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+
+ mpi_errno = MPIR_Alltoallw(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+
+ mpi_errno = MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+
+ mpi_errno = MPIR_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Reduce_scatter_block(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCAN);
+
+ mpi_errno = MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+
+ mpi_errno = MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+
+ mpi_errno =
+ MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+
+ mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibarrier(MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+
+ mpi_errno = MPIR_Ibarrier_impl(comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+
+ mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+
+ mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+
+ mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+
+ mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+
+ mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+
+ mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts,
+ rdispls, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+
+ mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+
+ mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+
+ mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+
+ mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+
+ mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+
+ mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+
+ mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+
+ mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+
+ mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ return mpi_errno;
+}
+
+#endif /* STUBNM_COLL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_comm.h b/src/mpid/ch4/netmod/stubnm/stubnm_comm.h
new file mode 100644
index 0000000..5c05582
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_comm.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_COMM_H_INCLUDED
+#define STUBNM_COMM_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Assert(0);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Assert(0);
+ return mpi_errno;
+}
+
+
+#endif /* STUBNM_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_datatype.h b/src/mpid/ch4/netmod/stubnm/stubnm_datatype.h
new file mode 100644
index 0000000..c774f55
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_datatype.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_DATATYPE_H_INCLUDED
+#define STUBNM_DATATYPE_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_type_free_hook(MPIR_Datatype * datatype_p)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_type_create_hook(MPIR_Datatype * datatype_p)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+#endif /* STUBNM_DATATYPE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_impl.h b/src/mpid/ch4/netmod/stubnm/stubnm_impl.h
new file mode 100644
index 0000000..e02c4b6
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_impl.h
@@ -0,0 +1,17 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_IMPL_H_INCLUDED
+#define STUBNM_IMPL_H_INCLUDED
+
+#include <mpidimpl.h>
+#include "mpidch4r.h"
+
+#endif /* STUBNM_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_init.h b/src/mpid/ch4/netmod/stubnm/stubnm_init.h
new file mode 100644
index 0000000..183aa0c
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_init.h
@@ -0,0 +1,79 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_INIT_H_INCLUDED
+#define STUBNM_INIT_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_init_hook(int rank,
+ int size,
+ int appnum,
+ int *tag_ub,
+ MPIR_Comm * comm_world,
+ MPIR_Comm * comm_self,
+ int spawned, int num_contexts, void **netmod_contexts)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+
+ MPIR_Assert(0);
+ return mpi_errno;
+}
+
+static inline int MPIDI_NM_mpi_finalize_hook(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Assert(0);
+ return mpi_errno;
+}
+
+
+static inline int MPIDI_NM_comm_get_lpid(MPIR_Comm * comm_ptr,
+ int idx, int *lpid_ptr, MPL_bool is_remote)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_upids_to_lupids(int size,
+ size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_free_mem(void *ptr)
+{
+ return MPIDI_CH4U_mpi_free_mem(ptr);
+}
+
+static inline void *MPIDI_NM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ return MPIDI_CH4U_mpi_alloc_mem(size, info_ptr);
+}
+
+
+#endif /* STUBNM_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_op.h b/src/mpid/ch4/netmod/stubnm/stubnm_op.h
new file mode 100644
index 0000000..5cb4589
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_op.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2012 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_OP_H_INCLUDED
+#define STUBNM_OP_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_op_free_hook(MPIR_Op * op_p)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_op_create_hook(MPIR_Op * op_p)
+{
+ MPIR_Assert(0);
+ return 0;
+}
+
+
+#endif /* STUBNM_OP_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_pre.h b/src/mpid/ch4/netmod/stubnm/stubnm_pre.h
new file mode 100644
index 0000000..f1ce3ab
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_pre.h
@@ -0,0 +1,43 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef STUBNM_PRE_H_INCLUDED
+#define STUBNM_PRE_H_INCLUDED
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBNM_am_request_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBNM_request_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBNM_comm_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBNM_dt_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBNM_op_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBNM_win_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBNM_addr_t;
+
+#endif /* STUBNM_PRE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_probe.h b/src/mpid/ch4/netmod/stubnm/stubnm_probe.h
new file mode 100644
index 0000000..b4e907b
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_probe.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_PROBE_H_INCLUDED
+#define STUBNM_PROBE_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_probe(int source,
+ int tag, MPIR_Comm * comm, int context_offset, MPI_Status * status)
+{
+ return MPIDI_CH4U_probe(source, tag, comm, context_offset, status);
+}
+
+static inline int MPIDI_NM_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+ return MPIDI_CH4U_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+}
+
+static inline int MPIDI_NM_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ return MPIDI_CH4U_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+}
+
+#endif /* STUBNM_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_proc.h b/src/mpid/ch4/netmod/stubnm/stubnm_proc.h
new file mode 100644
index 0000000..941e41c
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_proc.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_PROC_H_INCLUDED
+#define STUBNM_PROC_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_rank_is_local(int rank, MPIR_Comm * comm)
+{
+ int ret;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+
+ MPIR_Assert(0);
+ ret = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ return ret;
+}
+#endif /* STUBNM_PROC_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_progress.h b/src/mpid/ch4/netmod/stubnm/stubnm_progress.h
new file mode 100644
index 0000000..dc279a0
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_progress.h
@@ -0,0 +1,76 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_PROGRESS_H_INCLUDED
+#define STUBNM_PROGRESS_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_progress(void *netmod_context, int blocking)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_test(void)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_poke(void)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline void MPIDI_NM_progress_start(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return;
+}
+
+static inline void MPIDI_NM_progress_end(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return;
+}
+
+static inline int MPIDI_NM_progress_wait(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_register(int (*progress_fn) (int *), int *id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_deregister(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_activate(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_progress_deactivate(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBNM_PROGRESS_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_recv.h b/src/mpid/ch4/netmod/stubnm/stubnm_recv.h
new file mode 100644
index 0000000..af3a943
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_recv.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_RECV_H_INCLUDED
+#define STUBNM_RECV_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ int err = MPI_SUCCESS;
+ MPIR_Assert(0);
+ return err;
+}
+
+static inline int MPIDI_NM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int err = MPI_SUCCESS;
+ MPIR_Assert(0);
+ return err;
+}
+
+static inline int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBNM_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_request.h b/src/mpid/ch4/netmod/stubnm/stubnm_request.h
new file mode 100644
index 0000000..6ef3609
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_request.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_REQUEST_H_INCLUDED
+#define STUBNM_REQUEST_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline void MPIDI_NM_am_request_init(MPIR_Request * req)
+{
+ MPIR_Assert(0);
+}
+
+static inline void MPIDI_NM_am_request_finalize(MPIR_Request * req)
+{
+ MPIR_Assert(0);
+}
+
+#endif /* STUBNM_REQUEST_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_rma.h b/src/mpid/ch4/netmod/stubnm/stubnm_rma.h
new file mode 100644
index 0000000..2cb352a
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_rma.h
@@ -0,0 +1,153 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_RMA_H_INCLUDED
+#define STUBNM_RMA_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+}
+
+static inline int MPIDI_NM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+}
+
+static inline int MPIDI_NM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rput(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+}
+
+static inline int MPIDI_NM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_fetch_and_op(origin_addr, result_addr, datatype,
+ target_rank, target_disp, op, win);
+}
+
+
+static inline int MPIDI_NM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+}
+
+static inline int MPIDI_NM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win);
+}
+
+#endif /* STUBNM_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_send.h b/src/mpid/ch4/netmod/stubnm/stubnm_send.h
new file mode 100644
index 0000000..0788807
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_send.h
@@ -0,0 +1,132 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_SEND_H_INCLUDED
+#define STUBNM_SEND_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_rsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+
+
+static inline int MPIDI_NM_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_irsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ return MPIDIG_mpi_startall(count, requests);
+}
+
+static inline int MPIDI_NM_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_bsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_issend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ return MPIDIG_mpi_cancel_send(sreq);
+}
+
+#endif /* STUBNM_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_spawn.h b/src/mpid/ch4/netmod/stubnm/stubnm_spawn.h
new file mode 100644
index 0000000..3914201
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_spawn.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_SPAWN_H_INCLUDED
+#define STUBNM_SPAWN_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_close_port(const char *port_name)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBNM_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_unimpl.h b/src/mpid/ch4/netmod/stubnm/stubnm_unimpl.h
new file mode 100644
index 0000000..24deea2
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_unimpl.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif /* STUBNM_UNIMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/stubnm_win.h b/src/mpid/ch4/netmod/stubnm/stubnm_win.h
new file mode 100644
index 0000000..8ba3213
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/stubnm_win.h
@@ -0,0 +1,163 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBNM_WIN_H_INCLUDED
+#define STUBNM_WIN_H_INCLUDED
+
+#include "stubnm_impl.h"
+
+static inline int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ return MPIDI_CH4R_mpi_win_set_info(win, info);
+}
+
+
+static inline int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_start(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_complete(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_complete(win);
+}
+
+static inline int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_post(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_wait(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_wait(win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ return MPIDI_CH4R_mpi_win_test(win, flag);
+}
+
+static inline int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock(lock_type, rank, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_unlock(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ return MPIDI_CH4R_mpi_win_get_info(win, info_p_p);
+}
+
+
+static inline int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_free(win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_fence(assert, win);
+}
+
+static inline int MPIDI_NM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_create(base, length, disp_unit, info, comm_ptr, win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ return MPIDI_CH4R_mpi_win_attach(win, base, size);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_allocate_shared(size, disp_unit, info_ptr, comm_ptr, base_ptr,
+ win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ return MPIDI_CH4R_mpi_win_detach(win, base);
+}
+
+static inline int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ return MPIDI_CH4R_mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win)
+{
+ return MPIDI_CH4R_mpi_win_allocate(size, disp_unit, info, comm, baseptr, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_local_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_unlock_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ return MPIDI_CH4R_mpi_win_create_dynamic(info, comm, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_local(rank, win);
+}
+
+static inline int MPIDI_NM_mpi_win_sync(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_sync(win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_flush_all(win);
+}
+
+static inline int MPIDI_NM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock_all(assert, win);
+}
+
+
+#endif /* STUBNM_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/stubnm/subconfigure.m4 b/src/mpid/ch4/netmod/stubnm/subconfigure.m4
new file mode 100644
index 0000000..4dce4f1
--- /dev/null
+++ b/src/mpid/ch4/netmod/stubnm/subconfigure.m4
@@ -0,0 +1,21 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_AFTER=src/mpid/ch4
+
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_COND_IF([BUILD_CH4],[
+ for net in $ch4_netmods ; do
+ AS_CASE([$net],[stubnm],[build_ch4_netmod_stubnm=yes])
+ done
+ ])
+ AM_CONDITIONAL([BUILD_CH4_NETMOD_STUBNM],[test "X$build_ch4_netmod_stubnm" = "Xyes"])
+])dnl
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_CH4_NETMOD_STUBNM],[
+ AC_MSG_NOTICE([RUNNING CONFIGURE FOR ch4:stubnm])
+ AC_DEFINE([ENABLE_COMM_OVERRIDES], 1, [define to add per-vc function pointers to override send and recv functions])
+ AC_DEFINE(MPIDI_BUILD_CH4_LOCALITY_INFO, 1, [CH4 should build locality info])
+])dnl end AM_COND_IF(BUILD_CH4_NETMOD_STUBNM,...)
+])dnl end _BODY
+
+[#] end of __file__
diff --git a/src/mpid/ch4/netmod/ucx/Makefile.mk b/src/mpid/ch4/netmod/ucx/Makefile.mk
new file mode 100644
index 0000000..ca88e1a
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/Makefile.mk
@@ -0,0 +1,15 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+if BUILD_CH4_NETMOD_UCX
+
+noinst_HEADERS +=
+mpi_core_sources += src/mpid/ch4/netmod/ucx/func_table.c\
+ src/mpid/ch4/netmod/ucx/globals.c
+
+errnames_txt_files += src/mpid/ch4/netmod/ucx/errnames.txt
+
+endif
diff --git a/src/mpid/ch4/netmod/ucx/errnames.txt b/src/mpid/ch4/netmod/ucx/errnames.txt
new file mode 100644
index 0000000..d7e4ba6
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/errnames.txt
@@ -0,0 +1,10 @@
+**ucx_nm_status: ucx function returned with failed status
+**ucx_nm_status %s %d %s %s: ucx function returned with failed status(%s %d %s %s)
+**ucx_nm_pmi_error: pmi error in UCX netmod
+**ucx_nm_pmi_error %s %d %s %s: string error in UCX netmod(%s %d %s %s)
+**ucx_nm_str_error: string error in UCX netmod
+**ucx_nm_str_error %s %d %s %s: string error in UCX netmod(%s %d %s %s)
+**ucx_nm_rq_error: return failed request in UCX netmod
+**ucx_nm_rq_error %s %d %s %s: returned failed request in UCX netmod(%s %d %s %s)
+**ucx_nm_other:Other UCX error
+**ucx_nm_other %s %d %s %s: Other UCX error (%s %d %s %s)
diff --git a/src/mpid/ch4/netmod/ucx/func_table.c b/src/mpid/ch4/netmod/ucx/func_table.c
new file mode 100644
index 0000000..df58ad9
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/func_table.c
@@ -0,0 +1,149 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifndef NETMOD_DIRECT
+#define NETMOD_DISABLE_INLINES
+#include <mpidimpl.h>
+#include "netmod_direct.h"
+MPIDI_NM_funcs_t MPIDI_NM_ucx_funcs = {
+ MPIDI_NM_mpi_init_hook,
+ MPIDI_NM_mpi_finalize_hook,
+ MPIDI_NM_progress,
+ MPIDI_NM_mpi_comm_connect,
+ MPIDI_NM_mpi_comm_disconnect,
+ MPIDI_NM_mpi_open_port,
+ MPIDI_NM_mpi_close_port,
+ MPIDI_NM_mpi_comm_accept,
+ MPIDI_NM_comm_get_lpid,
+ MPIDI_NM_get_local_upids,
+ MPIDI_NM_upids_to_lupids,
+ MPIDI_NM_create_intercomm_from_lpids,
+ MPIDI_NM_mpi_comm_create_hook,
+ MPIDI_NM_mpi_comm_free_hook,
+ MPIDI_NM_am_request_init,
+ MPIDI_NM_am_request_finalize,
+ MPIDI_NM_am_send_hdr,
+ MPIDI_NM_am_isend,
+ MPIDI_NM_am_isendv,
+ MPIDI_NM_am_send_hdr_reply,
+ MPIDI_NM_am_isend_reply,
+ MPIDI_NM_am_hdr_max_sz,
+ MPIDI_NM_am_recv
+};
+
+MPIDI_NM_native_funcs_t MPIDI_NM_native_ucx_funcs = {
+ MPIDI_NM_mpi_send,
+ MPIDI_NM_mpi_ssend,
+ MPIDI_NM_mpi_startall,
+ MPIDI_NM_mpi_send_init,
+ MPIDI_NM_mpi_ssend_init,
+ MPIDI_NM_mpi_rsend_init,
+ MPIDI_NM_mpi_bsend_init,
+ MPIDI_NM_mpi_isend,
+ MPIDI_NM_mpi_issend,
+ MPIDI_NM_mpi_cancel_send,
+ MPIDI_NM_mpi_recv_init,
+ MPIDI_NM_mpi_recv,
+ MPIDI_NM_mpi_irecv,
+ MPIDI_NM_mpi_imrecv,
+ MPIDI_NM_mpi_cancel_recv,
+ MPIDI_NM_mpi_alloc_mem,
+ MPIDI_NM_mpi_free_mem,
+ MPIDI_NM_mpi_improbe,
+ MPIDI_NM_mpi_iprobe,
+ MPIDI_NM_mpi_win_set_info,
+ MPIDI_NM_mpi_win_shared_query,
+ MPIDI_NM_mpi_put,
+ MPIDI_NM_mpi_win_start,
+ MPIDI_NM_mpi_win_complete,
+ MPIDI_NM_mpi_win_post,
+ MPIDI_NM_mpi_win_wait,
+ MPIDI_NM_mpi_win_test,
+ MPIDI_NM_mpi_win_lock,
+ MPIDI_NM_mpi_win_unlock,
+ MPIDI_NM_mpi_win_get_info,
+ MPIDI_NM_mpi_get,
+ MPIDI_NM_mpi_win_free,
+ MPIDI_NM_mpi_win_fence,
+ MPIDI_NM_mpi_win_create,
+ MPIDI_NM_mpi_accumulate,
+ MPIDI_NM_mpi_win_attach,
+ MPIDI_NM_mpi_win_allocate_shared,
+ MPIDI_NM_mpi_rput,
+ MPIDI_NM_mpi_win_flush_local,
+ MPIDI_NM_mpi_win_detach,
+ MPIDI_NM_mpi_compare_and_swap,
+ MPIDI_NM_mpi_raccumulate,
+ MPIDI_NM_mpi_rget_accumulate,
+ MPIDI_NM_mpi_fetch_and_op,
+ MPIDI_NM_mpi_win_allocate,
+ MPIDI_NM_mpi_win_flush,
+ MPIDI_NM_mpi_win_flush_local_all,
+ MPIDI_NM_mpi_win_unlock_all,
+ MPIDI_NM_mpi_win_create_dynamic,
+ MPIDI_NM_mpi_rget,
+ MPIDI_NM_mpi_win_sync,
+ MPIDI_NM_mpi_win_flush_all,
+ MPIDI_NM_mpi_get_accumulate,
+ MPIDI_NM_mpi_win_lock_all,
+ MPIDI_NM_rank_is_local,
+ MPIDI_NM_mpi_barrier,
+ MPIDI_NM_mpi_bcast,
+ MPIDI_NM_mpi_allreduce,
+ MPIDI_NM_mpi_allgather,
+ MPIDI_NM_mpi_allgatherv,
+ MPIDI_NM_mpi_scatter,
+ MPIDI_NM_mpi_scatterv,
+ MPIDI_NM_mpi_gather,
+ MPIDI_NM_mpi_gatherv,
+ MPIDI_NM_mpi_alltoall,
+ MPIDI_NM_mpi_alltoallv,
+ MPIDI_NM_mpi_alltoallw,
+ MPIDI_NM_mpi_reduce,
+ MPIDI_NM_mpi_reduce_scatter,
+ MPIDI_NM_mpi_reduce_scatter_block,
+ MPIDI_NM_mpi_scan,
+ MPIDI_NM_mpi_exscan,
+ MPIDI_NM_mpi_neighbor_allgather,
+ MPIDI_NM_mpi_neighbor_allgatherv,
+ MPIDI_NM_mpi_neighbor_alltoall,
+ MPIDI_NM_mpi_neighbor_alltoallv,
+ MPIDI_NM_mpi_neighbor_alltoallw,
+ MPIDI_NM_mpi_ineighbor_allgather,
+ MPIDI_NM_mpi_ineighbor_allgatherv,
+ MPIDI_NM_mpi_ineighbor_alltoall,
+ MPIDI_NM_mpi_ineighbor_alltoallv,
+ MPIDI_NM_mpi_ineighbor_alltoallw,
+ MPIDI_NM_mpi_ibarrier,
+ MPIDI_NM_mpi_ibcast,
+ MPIDI_NM_mpi_iallgather,
+ MPIDI_NM_mpi_iallgatherv,
+ MPIDI_NM_mpi_iallreduce,
+ MPIDI_NM_mpi_ialltoall,
+ MPIDI_NM_mpi_ialltoallv,
+ MPIDI_NM_mpi_ialltoallw,
+ MPIDI_NM_mpi_iexscan,
+ MPIDI_NM_mpi_igather,
+ MPIDI_NM_mpi_igatherv,
+ MPIDI_NM_mpi_ireduce_scatter_block,
+ MPIDI_NM_mpi_ireduce_scatter,
+ MPIDI_NM_mpi_ireduce,
+ MPIDI_NM_mpi_iscan,
+ MPIDI_NM_mpi_iscatter,
+ MPIDI_NM_mpi_iscatterv,
+ MPIDI_NM_mpi_type_create_hook,
+ MPIDI_NM_mpi_type_free_hook,
+ MPIDI_NM_mpi_op_create_hook,
+ MPIDI_NM_mpi_op_free_hook
+};
+#endif
diff --git a/src/mpid/ch4/netmod/ucx/globals.c b/src/mpid/ch4/netmod/ucx/globals.c
new file mode 100644
index 0000000..d914681
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/globals.c
@@ -0,0 +1,13 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#include <mpidimpl.h>
+#include "ucx_impl.h"
+#include "ucx_types.h"
+
+MPIDI_UCX_global_t MPIDI_UCX_global = { 0 };
diff --git a/src/mpid/ch4/netmod/ucx/netmod_direct.h b/src/mpid/ch4/netmod/ucx/netmod_direct.h
new file mode 100644
index 0000000..0fd8bdf
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/netmod_direct.h
@@ -0,0 +1,34 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef NETMOD_DIRECT_H_INCLUDED
+#define NETMOD_DIRECT_H_INCLUDED
+
+#include "ucx_progress.h"
+#include "ucx_request.h"
+#include "ucx_probe.h"
+#include "ucx_init.h"
+#ifdef MPICH_UCX_AM_ONLY
+#include "ucx_am_send.h"
+#include "ucx_am_recv.h"
+#include "ucx_am_win.h"
+#include "ucx_am_rma.h"
+#else
+#include "ucx_send.h"
+#include "ucx_recv.h"
+#include "ucx_win.h"
+#include "ucx_rma.h"
+#endif
+#include "ucx_am.h"
+#include "ucx_spawn.h"
+#include "ucx_comm.h"
+#include "ucx_datatype.h"
+#include "ucx_op.h"
+#include "ucx_proc.h"
+#include "ucx_coll.h"
+#endif /* NETMOD_DIRECT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/subconfigure.m4 b/src/mpid/ch4/netmod/ucx/subconfigure.m4
new file mode 100644
index 0000000..7dc5a21
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/subconfigure.m4
@@ -0,0 +1,61 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_AFTER=src/mpid/ch4
+
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_COND_IF([BUILD_CH4],[
+ for net in $ch4_netmods ; do
+ AS_CASE([$net],[ucx],[build_ch4_netmod_ucx=yes])
+ if test $net = "ucx" ; then
+ AC_DEFINE(HAVE_CH4_NETMOD_UCX,1,[UCX netmod is built])
+ if test "$build_ch4_locality_info" != "yes" ; then
+ AC_DEFINE(MPIDI_BUILD_CH4_LOCALITY_INFO, 1, [CH4 should build locality info])
+ build_ch4_locality_info="yes"
+ fi
+ fi
+ done
+ ])
+ AM_CONDITIONAL([BUILD_CH4_NETMOD_UCX],[test "X$build_ch4_netmod_ucx" = "Xyes"])
+
+ AC_ARG_WITH(ch4-netmod-ucx-args,
+ [ --with-ch4-netmod-ucx-args=arg1:arg2:arg3
+ CH4 OFI netmod arguments:
+ am-only - Do not use UCX tagged or RMA communication.
+ ],
+ [ucx_netmod_args=$withval],
+ [ucx_netmod_args=])
+
+dnl Parse the device arguments
+ SAVE_IFS=$IFS
+ IFS=':'
+ args_array=$ucx_netmod_args
+ do_am_only=false
+ echo "Parsing Arguments for OFI Netmod"
+ for arg in $args_array; do
+ case ${arg} in
+ am-only)
+ do_am_only=true
+ echo " ---> CH4::UCX Disable native tagged and RMA communication : $arg"
+ esac
+ done
+ IFS=$SAVE_IFS
+
+ if [test "$do_am_only" = "true"]; then
+ AC_MSG_NOTICE([Disabling native UCX tagged and RMA communication])
+ PAC_APPEND_FLAG([-DMPICH_UCX_AM_ONLY], [CPPFLAGS])
+ fi
+])dnl
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_CH4_NETMOD_UCX],[
+ AC_MSG_NOTICE([RUNNING CONFIGURE FOR ch4:ucx])
+
+ PAC_SET_HEADER_LIB_PATH(ucx)
+ PAC_PUSH_FLAG(LIBS)
+ PAC_CHECK_HEADER_LIB_FATAL(ucx, ucp/api/ucp.h, ucp, ucp_config_read)
+ PAC_POP_FLAG(LIBS)
+ PAC_APPEND_FLAG([-lucp],[WRAPPER_LIBS])
+
+])dnl end AM_COND_IF(BUILD_CH4_NETMOD_OFI,...)
+])dnl end _BODY
+
+[#] end of __file__
diff --git a/src/mpid/ch4/netmod/ucx/ucx_am.h b/src/mpid/ch4/netmod/ucx/ucx_am.h
new file mode 100644
index 0000000..91665d8
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_am.h
@@ -0,0 +1,439 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_AM_H_INCLUDED
+#define UCX_AM_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline void MPIDI_UCX_am_isend_callback(void *request, ucs_status_t status)
+{
+ MPIDI_UCX_ucp_request_t *ucp_request = (MPIDI_UCX_ucp_request_t *) request;
+ MPIR_Request *req = ucp_request->req;
+ int handler_id = req->dev.ch4.am.netmod_am.ucx.handler_id;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_UCX_AM_ISEND_CALLBACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_UCX_AM_ISEND_CALLBACK);
+
+ MPL_free(req->dev.ch4.am.netmod_am.ucx.pack_buffer);
+ req->dev.ch4.am.netmod_am.ucx.pack_buffer = NULL;
+ MPIDIG_global.origin_cbs[handler_id] (req);
+ ucp_request->req = NULL;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_UCX_AM_ISEND_CALLBACK);
+ return;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline void MPIDI_UCX_inject_am_callback(void *request, ucs_status_t status)
+{
+ MPIDI_UCX_ucp_request_t *ucp_request = (MPIDI_UCX_ucp_request_t *) request;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_UCX_INJECT_AM_CALLBACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_UCX_INJECT_AM_CALLBACK);
+
+ if (ucp_request->req) {
+ MPL_free(ucp_request->req);
+ ucp_request->req = NULL;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ ucp_request->req = (void *) TRUE;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_UCX_INJECT_AM_CALLBACK);
+ return;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_am_isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+
+static inline int MPIDI_NM_am_isend(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+ char *send_buf;
+ size_t data_sz;
+ MPI_Aint dt_true_lb, last;
+ MPIR_Datatype *dt_ptr;
+ int dt_contig;
+ MPIDI_UCX_am_header_t ucx_hdr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_ISEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ if (handler_id == MPIDI_CH4U_SEND &&
+ am_hdr_sz + sizeof(MPIDI_UCX_am_header_t) + data_sz > MPIDI_UCX_MAX_AM_EAGER_SZ) {
+ MPIDI_CH4U_send_long_req_msg_t lreq_hdr;
+
+ MPIR_Memcpy(&lreq_hdr.hdr, am_hdr, am_hdr_sz);
+ lreq_hdr.data_sz = data_sz;
+ lreq_hdr.sreq_ptr = (uint64_t) sreq;
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).src_buf = data;
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).count = count;
+ dtype_add_ref_if_not_builtin(datatype);
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).datatype = datatype;
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).msg_tag = lreq_hdr.hdr.msg_tag;
+ MPIDI_CH4U_REQUEST(sreq, rank) = rank;
+ mpi_errno = MPIDI_NM_am_send_hdr(rank, comm, MPIDI_CH4U_SEND_LONG_REQ,
+ &lreq_hdr, sizeof(lreq_hdr), NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ ep = MPIDI_UCX_COMM_TO_EP(comm, rank);
+ ucx_tag = MPIDI_UCX_init_tag(0, 0, MPIDI_UCX_AM_TAG);
+
+ /* initialize our portion of the hdr */
+ ucx_hdr.handler_id = handler_id;
+ ucx_hdr.data_sz = data_sz;
+
+ if (dt_contig) {
+ /* just pack and send for now */
+ send_buf = MPL_malloc(data_sz + am_hdr_sz + sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf, &ucx_hdr, sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf + sizeof(ucx_hdr), am_hdr, am_hdr_sz);
+ MPIR_Memcpy(send_buf + am_hdr_sz + sizeof(ucx_hdr), (char *) data + dt_true_lb, data_sz);
+ }
+ else {
+ size_t segment_first;
+ struct MPIDU_Segment *segment_ptr;
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(segment_ptr == NULL, mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "Send MPIDU_Segment_alloc");
+ MPIDU_Segment_init(data, count, datatype, segment_ptr, 0);
+ segment_first = 0;
+ last = data_sz;
+ send_buf = MPL_malloc(data_sz + am_hdr_sz + sizeof(ucx_hdr));
+
+ MPIR_Memcpy(send_buf, &ucx_hdr, sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf + sizeof(ucx_hdr), am_hdr, am_hdr_sz);
+ MPIDU_Segment_pack(segment_ptr, segment_first, &last,
+ send_buf + am_hdr_sz + sizeof(ucx_hdr));
+ MPIDU_Segment_free(segment_ptr);
+ }
+
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_send_nb(ep, send_buf,
+ data_sz + am_hdr_sz + sizeof(ucx_hdr),
+ ucp_dt_make_contig(1), ucx_tag,
+ &MPIDI_UCX_am_isend_callback);
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ /* send is done. free all resources and complete the request */
+ if (ucp_request == NULL) {
+ MPL_free(send_buf);
+ MPIDIG_global.origin_cbs[handler_id] (sreq);
+ goto fn_exit;
+ }
+
+ /* request completed between the UCP call and now. free resources
+ * and complete the send request */
+ /* set the ch4r request inside the UCP request */
+ sreq->dev.ch4.am.netmod_am.ucx.pack_buffer = send_buf;
+ sreq->dev.ch4.am.netmod_am.ucx.handler_id = handler_id;
+ ucp_request->req = sreq;
+ ucp_request_release(ucp_request);
+
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_ISEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_am_isendv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_am_isendv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype,
+ MPIR_Request * sreq, void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t am_hdr_sz = 0, i;
+ char *am_hdr_buf;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_ISENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_ISENDV);
+
+ for (i = 0; i < iov_len; i++) {
+ am_hdr_sz += am_hdr[i].iov_len;
+ }
+
+ am_hdr_buf = (char *) MPL_malloc(am_hdr_sz);
+ MPIR_Assert(am_hdr_buf);
+ am_hdr_sz = 0;
+
+ for (i = 0; i < iov_len; i++) {
+ MPIR_Memcpy(am_hdr_buf + am_hdr_sz, am_hdr[i].iov_base, am_hdr[i].iov_len);
+ am_hdr_sz += am_hdr[i].iov_len;
+ }
+
+ mpi_errno = MPIDI_NM_am_isend(rank, comm, handler_id, am_hdr_buf, am_hdr_sz,
+ data, count, datatype, sreq, netmod_context);
+
+ MPL_free(am_hdr_buf);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_ISENDV);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_am_isend_reply
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_am_isend_reply(MPIR_Context_id_t context_id,
+ int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+ char *send_buf;
+ size_t data_sz;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+ int dt_contig;
+ MPIDI_UCX_am_header_t ucx_hdr;
+ MPIR_Comm *use_comm;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_ISEND_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_ISEND_REPLY);
+
+ use_comm = MPIDI_CH4U_context_id_to_comm(context_id);
+ ep = MPIDI_UCX_COMM_TO_EP(use_comm, src_rank);
+ ucx_tag = MPIDI_UCX_init_tag(0, 0, MPIDI_UCX_AM_TAG);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ /* initialize our portion of the hdr */
+ ucx_hdr.handler_id = handler_id;
+ ucx_hdr.data_sz = data_sz;
+
+ if (dt_contig) {
+ /* just pack and send for now */
+ send_buf = MPL_malloc(data_sz + am_hdr_sz + sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf, &ucx_hdr, sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf + sizeof(ucx_hdr), am_hdr, am_hdr_sz);
+ MPIR_Memcpy(send_buf + am_hdr_sz + sizeof(ucx_hdr), (char *) data + dt_true_lb, data_sz);
+
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_send_nb(ep, send_buf,
+ data_sz + am_hdr_sz +
+ sizeof(ucx_hdr),
+ ucp_dt_make_contig(1), ucx_tag,
+ &MPIDI_UCX_am_isend_callback);
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ }
+
+ /* send is done. free all resources and complete the request */
+ if (ucp_request == NULL) {
+ MPL_free(send_buf);
+ MPIDIG_global.origin_cbs[handler_id] (sreq);
+ goto fn_exit;
+ }
+
+ /* request completed between the UCP call and now. free resources
+ * and complete the send request */
+ if (ucp_request->req) {
+ MPL_free(send_buf);
+ MPIDIG_global.origin_cbs[handler_id] (sreq);
+ ucp_request->req = NULL;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ /* set the ch4r request inside the UCP request */
+ sreq->dev.ch4.am.netmod_am.ucx.pack_buffer = send_buf;
+ sreq->dev.ch4.am.netmod_am.ucx.handler_id = handler_id;
+ ucp_request->req = sreq;
+ ucp_request_release(ucp_request);
+
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_ISEND_REPLY);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline size_t MPIDI_NM_am_hdr_max_sz(void)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_HDR_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_HDR_MAX_SZ);
+
+ ret = (MPIDI_UCX_MAX_AM_EAGER_SZ - sizeof(MPIDI_UCX_am_header_t));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_HDR_MAX_SZ);
+ return ret;
+}
+
+static inline int MPIDI_NM_am_send_hdr(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *netmod_context)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+ char *send_buf;
+ MPIDI_UCX_am_header_t ucx_hdr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_SEND_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_SEND_HDR);
+
+ ep = MPIDI_UCX_COMM_TO_EP(comm, rank);
+ ucx_tag = MPIDI_UCX_init_tag(0, 0, MPIDI_UCX_AM_TAG);
+
+ /* initialize our portion of the hdr */
+ ucx_hdr.handler_id = handler_id;
+ ucx_hdr.data_sz = 0;
+
+ /* just pack and send for now */
+ send_buf = MPL_malloc(am_hdr_sz + sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf, &ucx_hdr, sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf + sizeof(ucx_hdr), am_hdr, am_hdr_sz);
+
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_send_nb(ep, send_buf,
+ am_hdr_sz + sizeof(ucx_hdr),
+ ucp_dt_make_contig(1), ucx_tag,
+ &MPIDI_UCX_inject_am_callback);
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ if (ucp_request == NULL) {
+ /* inject is done */
+ MPL_free(send_buf);
+ }
+ else if (ucp_request->req) {
+ MPL_free(send_buf);
+ ucp_request->req = NULL;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ ucp_request->req = send_buf;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_SEND_HDR);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_am_send_hdr_reply(MPIR_Context_id_t context_id,
+ int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+ char *send_buf;
+ MPIDI_UCX_am_header_t ucx_hdr;
+ MPIR_Comm *use_comm;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_SEND_HDR_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_SEND_HDR_REPLY);
+
+ use_comm = MPIDI_CH4U_context_id_to_comm(context_id);
+ ep = MPIDI_UCX_COMM_TO_EP(use_comm, src_rank);
+ ucx_tag = MPIDI_UCX_init_tag(0, 0, MPIDI_UCX_AM_TAG);
+
+ /* initialize our portion of the hdr */
+ ucx_hdr.handler_id = handler_id;
+
+ /* just pack and send for now */
+ send_buf = MPL_malloc(am_hdr_sz + sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf, &ucx_hdr, sizeof(ucx_hdr));
+ MPIR_Memcpy(send_buf + sizeof(ucx_hdr), am_hdr, am_hdr_sz);
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_send_nb(ep, send_buf,
+ am_hdr_sz + sizeof(ucx_hdr),
+ ucp_dt_make_contig(1), ucx_tag,
+ &MPIDI_UCX_inject_am_callback);
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ if (ucp_request == NULL) {
+ /* inject is done */
+ MPL_free(send_buf);
+ }
+ else if (ucp_request->req) {
+ MPL_free(send_buf);
+ ucp_request->req = NULL;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ ucp_request->req = send_buf;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_SEND_HDR_REPLY);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_am_recv(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_send_long_ack_msg_t msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_AM_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_AM_RECV);
+
+ msg.sreq_ptr = (MPIDI_CH4U_REQUEST(req, req->rreq.peer_req_ptr));
+ msg.rreq_ptr = (uint64_t) req;
+ MPIR_Assert((void *) msg.sreq_ptr != NULL);
+ mpi_errno = MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_get_context(MPIDI_CH4U_REQUEST(req, tag)),
+ MPIDI_CH4U_REQUEST(req, rank),
+ MPIDI_CH4U_SEND_LONG_ACK, &msg, sizeof(msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_AM_RECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#endif /* UCX_AM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_am_recv.h b/src/mpid/ch4/netmod/ucx/ucx_am_recv.h
new file mode 100644
index 0000000..34d6f10
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_am_recv.h
@@ -0,0 +1,102 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef UCX_AM_RECV_H_INCLUDED
+#define UCX_AM_RECV_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline int MPIDI_NM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RECV);
+
+ ret = MPIDIG_mpi_recv(buf, count, datatype, rank, tag, comm, context_offset, status, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RECV);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+
+ ret = MPIDIG_mpi_recv_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RECV_INIT);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+
+ ret = MPIDIG_mpi_imrecv(buf, count, datatype, message, rreqp);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IMRECV);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IRECV);
+
+ ret = MPIDIG_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IRECV);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+
+ ret = MPIDIG_mpi_cancel_recv(rreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_CANCEL_RECV);
+ return ret;
+}
+
+#endif /* UCX_AM_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_am_rma.h b/src/mpid/ch4/netmod/ucx/ucx_am_rma.h
new file mode 100644
index 0000000..d6ad1cf
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_am_rma.h
@@ -0,0 +1,234 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef UCX_AM_RMA_H_INCLUDED
+#define UCX_AM_RMA_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline int MPIDI_NM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_PUT);
+
+ ret = MPIDI_CH4U_mpi_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_PUT);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GET);
+
+ ret = MPIDI_CH4U_mpi_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GET);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RPUT);
+
+ ret = MPIDI_CH4U_mpi_rput(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RPUT);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+
+ ret = MPIDI_CH4U_mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMPARE_AND_SWAP);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+
+ ret = MPIDI_CH4U_mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RACCUMULATE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+
+ ret = MPIDI_CH4U_mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RGET_ACCUMULATE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+
+ ret = MPIDI_CH4U_mpi_fetch_and_op(origin_addr, result_addr, datatype,
+ target_rank, target_disp, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_FETCH_AND_OP);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_RGET);
+
+ ret = MPIDI_CH4U_mpi_rget(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_RGET);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GET_ACCUMULATE);
+
+ ret = MPIDI_CH4U_mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GET_ACCUMULATE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+
+ ret = MPIDI_CH4U_mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ACCUMULATE);
+ return ret;
+}
+
+#endif /* UCX_AM_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_am_send.h b/src/mpid/ch4/netmod/ucx/ucx_am_send.h
new file mode 100644
index 0000000..fe08f10
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_am_send.h
@@ -0,0 +1,132 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef UCX_AM_SEND_H_INCLUDED
+#define UCX_AM_SEND_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline int MPIDI_NM_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_rsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+
+
+static inline int MPIDI_NM_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_irsend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ return MPIDIG_mpi_startall(count, requests);
+}
+
+static inline int MPIDI_NM_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_bsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_issend(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+static inline int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ return MPIDIG_mpi_cancel_send(sreq);
+}
+
+#endif /* UCX_AM_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_am_win.h b/src/mpid/ch4/netmod/ucx/ucx_am_win.h
new file mode 100644
index 0000000..eaa4dde
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_am_win.h
@@ -0,0 +1,363 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef UCX_AM_WIN_H_INCLUDED
+#define UCX_AM_WIN_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+
+ ret = MPIDI_CH4R_mpi_win_set_info(win, info);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SET_INFO);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+
+ ret = MPIDI_CH4R_mpi_win_start(group, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_START);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_win_complete(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+
+ ret = MPIDI_CH4R_mpi_win_complete(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_COMPLETE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+
+ ret = MPIDI_CH4R_mpi_win_post(group, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_POST);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_win_wait(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+
+ ret = MPIDI_CH4R_mpi_win_wait(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_WAIT);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+
+ ret = MPIDI_CH4R_mpi_win_test(win, flag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_TEST);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+
+ ret = MPIDI_CH4R_mpi_win_lock(lock_type, rank, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+
+ ret = MPIDI_CH4R_mpi_win_unlock(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+
+ ret = MPIDI_CH4R_mpi_win_get_info(win, info_p_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_GET_INFO);
+ return ret;
+}
+
+
+static inline int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+
+ ret = MPIDI_CH4R_mpi_win_free(win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FREE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+
+ ret = MPIDI_CH4R_mpi_win_fence(assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FENCE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+
+ ret = MPIDI_CH4R_mpi_win_create(base, length, disp_unit, info, comm_ptr, win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+
+ ret = MPIDI_CH4R_mpi_win_attach(win, base, size);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ATTACH);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+
+ ret = MPIDI_CH4R_mpi_win_allocate_shared(size, disp_unit, info_ptr, comm_ptr, base_ptr,
+ win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE_SHARED);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+
+ ret = MPIDI_CH4R_mpi_win_detach(win, base);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_DETACH);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+
+ ret = MPIDI_CH4R_mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SHARED_QUERY);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+
+ ret = MPIDI_CH4R_mpi_win_allocate(size, disp_unit, info, comm, baseptr, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_ALLOCATE);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+
+ ret = MPIDI_CH4R_mpi_win_flush(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+
+ ret = MPIDI_CH4R_mpi_win_flush_local_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL_ALL);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+
+ ret = MPIDI_CH4R_mpi_win_unlock_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_UNLOCK_ALL);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+
+ ret = MPIDI_CH4R_mpi_win_create_dynamic(info, comm, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_CREATE_DYNAMIC);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+
+ ret = MPIDI_CH4R_mpi_win_flush_local(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_LOCAL);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_sync(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+
+ ret = MPIDI_CH4R_mpi_win_sync(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_SYNC);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+
+ ret = MPIDI_CH4R_mpi_win_flush_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_FLUSH_ALL);
+ return ret;
+}
+
+static inline int MPIDI_NM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+
+ ret = MPIDI_CH4R_mpi_win_lock_all(assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_WIN_LOCK_ALL);
+ return ret;
+}
+
+
+#endif /* UCX_AM_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_coll.h b/src/mpid/ch4/netmod/ucx/ucx_coll.h
new file mode 100644
index 0000000..c660409
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_coll.h
@@ -0,0 +1,873 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_COLL_H_INCLUDED
+#define UCX_COLL_H_INCLUDED
+
+#include "ucx_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+
+ mpi_errno = MPIR_Barrier(comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_BCAST);
+
+ mpi_errno = MPIR_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_BCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+
+ mpi_errno = MPIR_Allreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+
+ mpi_errno = MPIR_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+
+ mpi_errno = MPIR_Allgatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHER);
+
+ mpi_errno = MPIR_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+
+ mpi_errno = MPIR_Gatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_GATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+
+ mpi_errno = MPIR_Scatter(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+
+ mpi_errno = MPIR_Scatterv(sendbuf, sendcounts, displs,
+ sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCATTERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+
+ mpi_errno = MPIR_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+
+ mpi_errno = MPIR_Alltoallv(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_alltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+
+ mpi_errno = MPIR_Alltoallw(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+
+ mpi_errno = MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+
+ mpi_errno = MPIR_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Reduce_scatter_block(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_REDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_SCAN);
+
+ mpi_errno = MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_SCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+
+ mpi_errno = MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_EXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+
+ mpi_errno =
+ MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_neighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_NEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+
+ mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_INEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibarrier(MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+
+ mpi_errno = MPIR_Ibarrier_impl(comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+
+ mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IBCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+
+ mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+
+ mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+
+ mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+
+ mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+
+ mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts,
+ rdispls, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+
+ mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+
+ mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IEXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+
+ mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+
+ mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+
+ mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+
+ mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_IREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+
+ mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+
+ mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+
+ mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_ISCATTERV);
+ return mpi_errno;
+}
+
+#endif /* UCX_COLL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_comm.h b/src/mpid/ch4/netmod/ucx/ucx_comm.h
new file mode 100644
index 0000000..7a6543b
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_comm.h
@@ -0,0 +1,48 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_COMM_H_INCLUDED
+#define UCX_COMM_H_INCLUDED
+
+#include "ucx_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+
+ mpi_errno = MPIDI_CH4U_init_comm(comm);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_CREATE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+
+ mpi_errno = MPIDI_CH4U_destroy_comm(comm);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_MPI_COMM_FREE_HOOK);
+ return mpi_errno;
+}
+
+#endif /* UCX_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_datatype.h b/src/mpid/ch4/netmod/ucx/ucx_datatype.h
new file mode 100644
index 0000000..08cdd3f
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_datatype.h
@@ -0,0 +1,143 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_DATATYPE_H_INCLUDED
+#define UCX_DATATYPE_H_INCLUDED
+
+#include "ucx_impl.h"
+#include "ucx_types.h"
+#include <ucp/api/ucp.h>
+struct MPIDI_UCX_pack_state {
+
+ MPID_Segment *segment_ptr;
+ MPI_Aint packsize;
+};
+
+static inline void *MPIDI_UCX_Start_pack(void *context, const void *buffer, size_t count)
+{
+
+ MPI_Datatype *datatype = (MPI_Datatype *) context;
+ MPID_Segment *segment_ptr;
+ struct MPIDI_UCX_pack_state *state;
+ MPI_Aint packsize;
+ state = MPL_malloc(sizeof(struct MPIDI_UCX_pack_state));
+ segment_ptr = MPID_Segment_alloc();
+ MPIR_Pack_size_impl(count, *datatype, &packsize);
+/* Todo: Add error handling */
+ MPID_Segment_init(buffer, count, *datatype, segment_ptr, 1);
+ state->packsize = packsize;
+ state->segment_ptr = segment_ptr;
+ return (void *) state;
+}
+
+static inline void *MPIDI_UCX_Start_unpack(void *context, void *buffer, size_t count)
+{
+
+ MPI_Datatype *datatype = (MPI_Datatype *) context;
+ MPID_Segment *segment_ptr;
+ struct MPIDI_UCX_pack_state *state;
+ MPI_Aint packsize;
+
+ state = MPL_malloc(sizeof(struct MPIDI_UCX_pack_state));
+ MPIR_Pack_size_impl(count, *datatype, &packsize);
+
+ segment_ptr = MPID_Segment_alloc();
+
+/* Todo: Add error handling */
+ MPID_Segment_init(buffer, count, *datatype, segment_ptr, 1);
+ state->packsize = packsize;
+ state->segment_ptr = segment_ptr;
+ return (void *) state;
+
+}
+
+static inline size_t MPIDI_UCX_Packed_size(void *state)
+{
+
+ struct MPIDI_UCX_pack_state *pack_state = (struct MPIDI_UCX_pack_state *) state;
+
+ return (size_t) pack_state->packsize;
+}
+
+static inline size_t MPIDI_UCX_Pack(void *state, size_t offset, void *dest, size_t max_length)
+{
+
+ struct MPIDI_UCX_pack_state *pack_state = (struct MPIDI_UCX_pack_state *) state;
+ MPI_Aint last = MPL_MIN(pack_state->packsize, offset + max_length);
+
+ MPID_Segment_pack(pack_state->segment_ptr, offset, &last, dest);
+
+ return (size_t) last - offset;
+}
+
+static inline ucs_status_t MPIDI_UCX_Unpack(void *state, size_t offset, const void *src,
+ size_t count)
+{
+
+ struct MPIDI_UCX_pack_state *pack_state = (struct MPIDI_UCX_pack_state *) state;
+ size_t last = MPL_MIN(pack_state->packsize, offset + count);
+
+ MPID_Segment_unpack(pack_state->segment_ptr, offset, &last, (void *) src);
+
+ return UCS_OK;
+}
+
+static inline void MPIDI_UCX_Finish_pack(void *state)
+{
+
+ struct MPIDI_UCX_pack_state *pack_state = (struct MPIDI_UCX_pack_state *) state;
+ MPID_Segment_free(pack_state->segment_ptr);
+ MPL_free(pack_state);
+
+}
+
+
+static ucp_generic_dt_ops_t MPIDI_UCX_datatype_ops = {
+ .start_pack = MPIDI_UCX_Start_pack,
+ .start_unpack = MPIDI_UCX_Start_unpack,
+ .packed_size = MPIDI_UCX_Packed_size,
+ .pack = MPIDI_UCX_Pack,
+ .unpack = MPIDI_UCX_Unpack,
+ .finish = MPIDI_UCX_Finish_pack
+};
+
+
+static inline int MPIDI_NM_mpi_type_free_hook(MPIR_Datatype * datatype_p)
+{
+
+
+ if (datatype_p->is_committed && (int) datatype_p->dev.netmod.ucx.ucp_datatype >= 0) {
+ ucp_dt_destroy(datatype_p->dev.netmod.ucx.ucp_datatype);
+ datatype_p->dev.netmod.ucx.ucp_datatype = -1;
+ }
+
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_type_create_hook(MPIR_Datatype * datatype_p)
+{
+ ucp_datatype_t ucp_datatype;
+ ucs_status_t status;
+ int is_contig;
+
+
+ datatype_p->dev.netmod.ucx.ucp_datatype = -1;
+ MPID_Datatype_is_contig(datatype_p->handle, &is_contig);
+
+ if (!is_contig) {
+
+ status = ucp_dt_create_generic(&MPIDI_UCX_datatype_ops, datatype_p, &ucp_datatype);
+ MPIR_Assertp(status == UCS_OK);
+ datatype_p->dev.netmod.ucx.ucp_datatype = ucp_datatype;
+
+ }
+
+ return 0;
+}
+
+#endif /* UCX_DATATYPE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_impl.h b/src/mpid/ch4/netmod/ucx/ucx_impl.h
new file mode 100644
index 0000000..4d56c88
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_impl.h
@@ -0,0 +1,149 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_IMPL_H_INCLUDED
+#define UCX_IMPL_H_INCLUDED
+
+#include <mpidimpl.h>
+#include "ucx_types.h"
+#include "mpidch4r.h"
+#include "ch4_impl.h"
+
+#include <ucs/type/status.h>
+
+#define MPIDI_UCX_COMM(comm) ((comm)->dev.ch4.netmod.ucx)
+#define MPIDI_UCX_REQ(req) ((req)->dev.ch4.netmod.ucx)
+#define COMM_TO_INDEX(comm,rank) MPIDIU_comm_rank_to_pid(comm, rank, NULL, NULL)
+#define MPIDI_UCX_COMM_TO_EP(comm,rank) \
+ MPIDI_UCX_AV(MPIDIU_comm_rank_to_av(comm, rank)).dest
+
+#define MPIDI_UCX_WIN(win) ((win)->dev.netmod.ucx)
+#define MPIDI_UCX_WIN_INFO(win, rank) MPIDI_UCX_WIN(win).info_table[rank]
+
+static inline uint64_t MPIDI_UCX_init_tag(MPIR_Context_id_t contextid, int source, uint64_t tag)
+{
+ uint64_t ucp_tag = 0;
+ ucp_tag = contextid;
+ ucp_tag = (ucp_tag << MPIDI_UCX_SOURCE_SHIFT);
+ ucp_tag |= source;
+ ucp_tag = (ucp_tag << MPIDI_UCX_TAG_SHIFT);
+ ucp_tag |= (MPIDI_UCX_TAG_MASK & tag);
+ return ucp_tag;
+}
+
+#ifndef MPIR_TAG_ERROR_BIT
+#define MPIR_TAG_ERROR_BIT (1 << 30)
+#endif
+#ifndef MPIR_TAG_PROC_FAILURE_BIT
+#define MPIR_TAG_PROC_FAILURE_BIT (1 << 29)
+#endif
+
+static inline uint64_t MPIDI_UCX_tag_mask(int mpi_tag, int src)
+{
+ uint64_t tag_mask;
+ tag_mask = ~(MPIR_TAG_PROC_FAILURE_BIT | MPIR_TAG_ERROR_BIT);
+ if (mpi_tag == MPI_ANY_TAG)
+ tag_mask &= ~MPIDI_UCX_TAG_MASK;
+
+ if (src == MPI_ANY_SOURCE)
+ tag_mask &= ~(MPIDI_UCX_SOURCE_MASK);
+
+ return tag_mask;
+}
+
+static inline uint64_t MPIDI_UCX_recv_tag(int mpi_tag, int src, MPIR_Context_id_t contextid)
+{
+ uint64_t ucp_tag = contextid;
+
+ ucp_tag = (ucp_tag << MPIDI_UCX_SOURCE_SHIFT);
+ if (src != MPI_ANY_SOURCE)
+ ucp_tag |= (src & UCS_MASK(MPIDI_UCX_CONTEXT_RANK_BITS));
+ ucp_tag = ucp_tag << MPIDI_UCX_TAG_SHIFT;
+ if (mpi_tag != MPI_ANY_TAG)
+ ucp_tag |= (MPIDI_UCX_TAG_MASK & mpi_tag);
+ return ucp_tag;
+}
+
+static inline int MPIDI_UCX_get_tag(uint64_t match_bits)
+{
+ return ((int) (match_bits & MPIDI_UCX_TAG_MASK));
+}
+
+static inline int MPIDI_UCX_get_source(uint64_t match_bits)
+{
+ return ((int) ((match_bits & MPIDI_UCX_SOURCE_MASK) >> MPIDI_UCX_TAG_SHIFT));
+}
+
+
+
+#define MPIDI_UCX_CHK_STATUS(STATUS) \
+ do { \
+ MPIR_ERR_CHKANDJUMP4((STATUS!=UCS_OK && STATUS!=UCS_INPROGRESS),\
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ucx_nm_status", \
+ "**ucx_nm_status %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ ucs_status_string(STATUS)); \
+ } while (0)
+
+
+#define MPIDI_UCX_PMI_ERROR(_errno) \
+ do \
+ { \
+ MPIR_ERR_CHKANDJUMP4(_errno!=PMI_SUCCESS, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ucx_nm_pmi_error", \
+ "**ucx_nm_pmi_error %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ "pmi_error"); \
+ } while (0)
+
+#define MPIDI_UCX_MPI_ERROR(_errno) \
+ do \
+ { \
+ if (unlikely(_errno!=MPI_SUCCESS)) MPIR_ERR_POP(mpi_errno); \
+ } while (0)
+
+#define MPIDI_UCX_STR_ERRCHK(_errno) \
+ do \
+ { \
+ MPIR_ERR_CHKANDJUMP4(_errno!=MPL_STR_SUCCESS, \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ucx_nm_str_error", \
+ "**ucx_nm_str_error %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ "strng_error"); \
+ } while (0)
+
+
+
+#define MPIDI_CH4_UCX_REQUEST(_req) \
+ do { \
+ MPIR_ERR_CHKANDJUMP4(UCS_PTR_IS_ERR(_req), \
+ mpi_errno, \
+ MPI_ERR_OTHER, \
+ "**ucx_nm_rq_error", \
+ "**ucx_nm_rq_error %s %d %s %s", \
+ __SHORT_FILE__, \
+ __LINE__, \
+ FCNAME, \
+ ucs_status_string(UCS_PTR_STATUS(_req))); \
+ } while (0)
+
+extern int MPIR_Datatype_init_names(void);
+
+#endif /* UCX_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_init.h b/src/mpid/ch4/netmod/ucx/ucx_init.h
new file mode 100644
index 0000000..fa7949e
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_init.h
@@ -0,0 +1,472 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_INIT_H_INCLUDED
+#define UCX_INIT_H_INCLUDED
+
+#include "ucx_impl.h"
+#include "mpir_cvars.h"
+#include "ucx_types.h"
+#include "pmi.h"
+#include <ucp/api/ucp.h>
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_init_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_init_hook(int rank,
+ int size,
+ int appnum,
+ int *tag_ub,
+ MPIR_Comm * comm_world,
+ MPIR_Comm * comm_self,
+ int spawned, int num_contexts, void **netmod_contexts)
+{
+ int mpi_errno = MPI_SUCCESS, pmi_errno;
+ int str_errno = MPL_STR_SUCCESS;
+ ucp_config_t *config;
+ ucs_status_t ucx_status;
+ uint64_t features = 0;
+ int status;
+ int val_max_sz, key_max_sz;
+ char *valS, *val;
+ char *keyS;
+ char *remote_addr;
+ size_t maxlen;
+ int string_addr_len;
+ int max_string;
+ int i;
+ ucp_params_t ucp_params;
+ int avtid = 0, max_n_avts;
+
+ int p;
+ int addr_size = 0;
+ char *string_addr;
+ MPIR_CHKLMEM_DECL(4);
+
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_INIT);
+
+ ucx_status = ucp_config_read(NULL, NULL, &config);
+ MPIDI_UCX_CHK_STATUS(ucx_status);
+
+ /* For now use only the tag feature */
+ features = UCP_FEATURE_TAG | UCP_FEATURE_RMA;
+ ucp_params.features = features;
+ ucp_params.request_size = sizeof(MPIDI_UCX_ucp_request_t);
+ ucp_params.request_init = MPIDI_UCX_Request_init_callback;
+ ucp_params.request_cleanup = NULL;
+ ucx_status = ucp_init(&ucp_params, config, &MPIDI_UCX_global.context);
+ MPIDI_UCX_CHK_STATUS(ucx_status);
+ ucp_config_release(config);
+
+ ucx_status = ucp_worker_create(MPIDI_UCX_global.context, UCS_THREAD_MODE_SERIALIZED,
+ &MPIDI_UCX_global.worker);
+ MPIDI_UCX_CHK_STATUS(ucx_status);
+ ucx_status =
+ ucp_worker_get_address(MPIDI_UCX_global.worker, &MPIDI_UCX_global.if_address,
+ &MPIDI_UCX_global.addrname_len);
+ MPIDI_UCX_CHK_STATUS(ucx_status);
+#ifdef USE_PMI2_API
+ val_max_sz = PMI2_MAX_VALLEN;
+ key_max_sz = PMI2_MAX_KEYLEN;
+#else
+ pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+
+ pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+
+#endif
+
+ /*we have to reduce the value - the total size of an PMI string is 1024, so command+value+key
+ * assume 100 characters for the command to be save */
+ val_max_sz = val_max_sz - key_max_sz - 100;
+
+
+ MPIR_CHKLMEM_MALLOC(valS, char *, val_max_sz, mpi_errno, "valS");
+/* In UCX we have the problem that the key size (as a string) van be larger than val_max_sz.
+ * We create a string from the key - but we don't know the size that this string will have
+ * So we guess the size - based on the worker address size. The decoding uses the hex-representation
+ * of the binary. So we need 2 bytes per byte. Add some extra bytes for the "key".
+ */
+
+ max_string = MPIDI_UCX_global.addrname_len * 2 + 128;
+ MPIR_CHKLMEM_MALLOC(keyS, char *, key_max_sz, mpi_errno, "keyS");
+ MPIR_CHKLMEM_MALLOC(string_addr, char *, max_string, mpi_errno, "string_addr");
+ MPIR_CHKLMEM_MALLOC(remote_addr, char *, max_string, mpi_errno, "remote_addr");
+
+ maxlen = max_string;
+ val = string_addr;
+
+ str_errno =
+ MPL_str_add_binary_arg(&val, (int *) &maxlen, "U", (char *) MPIDI_UCX_global.if_address,
+ (int) MPIDI_UCX_global.addrname_len);
+
+ /*todo: fallback if buffer is to small */
+ MPIDI_UCX_STR_ERRCHK(str_errno);
+
+ string_addr_len = max_string - maxlen;
+ pmi_errno = PMI_KVS_Get_my_name(MPIDI_UCX_global.kvsname, val_max_sz);
+ val = valS;
+ /* I first commit my worker-address size */
+ maxlen = val_max_sz;
+ sprintf(keyS, "Ksize-%d", rank);
+ MPL_str_add_int_arg(&val, (int *) &maxlen, "K", string_addr_len);
+ val = valS;
+ pmi_errno = PMI_KVS_Put(MPIDI_UCX_global.kvsname, keyS, val);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ pmi_errno = PMI_KVS_Commit(MPIDI_UCX_global.kvsname);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+/* now we have to commit the key. However, if the size is larger than the val_max_sz,
+ * we have tho spilt it up That's ugly, but badluck */
+
+ if (string_addr_len < val_max_sz) {
+ val = string_addr;
+ sprintf(keyS, "UCX-%d", rank);
+ pmi_errno = PMI_KVS_Put(MPIDI_UCX_global.kvsname, keyS, val);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ pmi_errno = PMI_KVS_Commit(MPIDI_UCX_global.kvsname);
+ }
+ else {
+ p = 0;
+ while (p < string_addr_len) {
+ val = valS;
+ MPL_snprintf(val, val_max_sz, "%s", string_addr + p);
+ val = valS;
+ sprintf(keyS, "UCX-%d-%d", rank, p);
+ pmi_errno = PMI_KVS_Put(MPIDI_UCX_global.kvsname, keyS, val);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ pmi_errno = PMI_KVS_Commit(MPIDI_UCX_global.kvsname);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ p += val_max_sz - 1;
+ }
+ }
+
+ val = valS;
+ MPIDI_UCX_global.max_addr_len = MPIDI_UCX_global.addrname_len;
+
+ pmi_errno = PMI_Barrier();
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+
+ /* Set to NULL now, only created if required in MPI_Intercomm_create */
+
+ MPIDI_UCX_global.pmi_addr_table = NULL;
+ maxlen = val_max_sz - 1;
+
+ for (i = 0; i < size; i++) {
+ /*first get the size */
+ sprintf(keyS, "Ksize-%d", i);
+ pmi_errno = PMI_KVS_Get(MPIDI_UCX_global.kvsname, keyS, val, val_max_sz);
+ str_errno = MPL_str_get_int_arg(val, "K", &string_addr_len);
+
+ if (string_addr_len < val_max_sz) {
+ val = string_addr;
+ sprintf(keyS, "UCX-%d", i);
+ pmi_errno = PMI_KVS_Get(MPIDI_UCX_global.kvsname, keyS, val, val_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ str_errno = MPL_str_get_binary_arg(string_addr, "U", remote_addr,
+ (int) max_string, (int *) &addr_size);
+
+ MPIDI_UCX_STR_ERRCHK(str_errno);
+ }
+ else {
+ /* first catch the string together */
+ p = 0;
+ while (p < string_addr_len) {
+ val = string_addr + p;
+ sprintf(keyS, "UCX-%d-%d", i, p);
+ pmi_errno = PMI_KVS_Get(MPIDI_UCX_global.kvsname, keyS, val, val_max_sz);
+ p += val_max_sz - 1;
+ }
+ str_errno = MPL_str_get_binary_arg(string_addr, "U", remote_addr,
+ (int) max_string, (int *) &addr_size);
+ MPIDI_UCX_STR_ERRCHK(str_errno);
+
+ }
+
+ if (addr_size > MPIDI_UCX_global.max_addr_len)
+ MPIDI_UCX_global.max_addr_len = addr_size;
+
+ ucx_status = ucp_ep_create(MPIDI_UCX_global.worker,
+ (ucp_address_t *) remote_addr,
+ &MPIDI_UCX_AV(&MPIDIU_get_av(0, i)).dest);
+
+ MPIDI_UCX_CHK_STATUS(ucx_status);
+ }
+
+ MPIDIG_init(comm_world, comm_self, num_contexts, netmod_contexts);
+
+ mpi_errno = MPIR_Datatype_init_names();
+ MPIDI_UCX_MPI_ERROR(mpi_errno);
+
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_EXIT);
+ return mpi_errno;
+ fn_fail:
+ if (MPIDI_UCX_global.worker != NULL)
+ ucp_worker_destroy(MPIDI_UCX_global.worker);
+
+ if (MPIDI_UCX_global.context != NULL)
+ ucp_cleanup(MPIDI_UCX_global.context);
+
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_finalize_hook(void)
+{
+ int mpi_errno = MPI_SUCCESS, pmi_errno;
+ int i, j, max_n_avts;
+ MPIR_Comm *comm;
+ max_n_avts = MPIDIU_get_max_n_avts();
+
+ for (i = 0; i < max_n_avts; i++) {
+ for (j = 0; j < MPIDIU_get_av_table(i)->size; j++)
+ ucp_ep_destroy(MPIDI_UCX_AV(&MPIDIU_get_av(i, j)).dest);
+ }
+ pmi_errno = PMI_Barrier();
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+
+
+ if (MPIDI_UCX_global.worker != NULL)
+ ucp_worker_destroy(MPIDI_UCX_global.worker);
+
+ if (MPIDI_UCX_global.context != NULL)
+ ucp_cleanup(MPIDI_UCX_global.context);
+
+ comm = MPIR_Process.comm_world;
+ MPIR_Comm_release_always(comm);
+
+ comm = MPIR_Process.comm_self;
+ MPIR_Comm_release_always(comm);
+ if (MPIDI_UCX_global.pmi_addr_table)
+ MPL_free(MPIDI_UCX_global.pmi_addr_table);
+
+ MPIDIG_finalize();
+ PMI_Finalize();
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_comm_get_lpid(MPIR_Comm * comm_ptr,
+ int idx, int *lpid_ptr, MPL_bool is_remote)
+{
+ int avtid = 0, lpid = 0;
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ MPIDIU_comm_rank_to_pid(comm_ptr, idx, &lpid, &avtid);
+ }
+ else if (is_remote) {
+ MPIDIU_comm_rank_to_pid(comm_ptr, idx, &lpid, &avtid);
+ }
+ else {
+ MPIDIU_comm_rank_to_pid_local(comm_ptr, idx, &lpid, &avtid);
+ }
+
+ *lpid_ptr = MPIDIU_LUPID_CREATE(avtid, lpid);
+ return MPI_SUCCESS;
+
+}
+
+static inline int MPIDI_NMI_allocate_address_table()
+{
+
+ char *keyS;
+ char *valS, *val;
+ int mpi_errno = MPI_SUCCESS, pmi_errno, str_errno;
+ int len = MPIDI_UCX_global.max_addr_len;
+ int i;
+ int size, maxlen = 1;
+ int key_max_sz, val_max_sz;
+ int string_addr_len;
+ int max_string;
+ char *string_addr;
+ int addr_size;
+ int p;
+ MPIR_CHKLMEM_DECL(3);
+#ifdef USE_PMI2_API
+ val_max_sz = PMI2_MAX_VALLEN;
+ key_max_sz = PMI2_MAX_KEYLEN;
+#else
+ pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+#endif
+
+ val_max_sz = val_max_sz - 100 - key_max_sz; /*see comment at init */
+
+ max_string = len * 2 + 128;
+ MPIR_CHKLMEM_MALLOC(valS, char *, val_max_sz, mpi_errno, "valS");
+ MPIR_CHKLMEM_MALLOC(keyS, char *, key_max_sz, mpi_errno, "keyS");
+ MPIR_CHKLMEM_MALLOC(string_addr, char *, max_string, mpi_errno, "string_addr");
+ val = valS;
+
+ size = MPIR_Process.comm_world->local_size;
+ MPIDI_UCX_global.pmi_addr_table = MPL_malloc(size * len);
+ memset(MPIDI_UCX_global.pmi_addr_table, 0x0, len * size);
+
+ for (i = 0; i < size; i++) {
+ /*first get the size */
+ sprintf(keyS, "Ksize-%d", i);
+ pmi_errno = PMI_KVS_Get(MPIDI_UCX_global.kvsname, keyS, val, val_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ str_errno = MPL_str_get_int_arg(val, "K", &string_addr_len);
+ if (string_addr_len < val_max_sz) {
+ val = string_addr;
+ sprintf(keyS, "UCX-%d", i);
+ pmi_errno = PMI_KVS_Get(MPIDI_UCX_global.kvsname, keyS, val, val_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ str_errno =
+ MPL_str_get_binary_arg(string_addr, "U", &MPIDI_UCX_global.pmi_addr_table[i * len],
+ (int) max_string, (int *) &addr_size);
+ MPIDI_UCX_STR_ERRCHK(str_errno);
+ }
+ else {
+ /* first catch the string together */
+ p = 0;
+ while (p < string_addr_len) {
+ val = string_addr + p;
+ sprintf(keyS, "UCX-%d-%d", i, p);
+ pmi_errno = PMI_KVS_Get(MPIDI_UCX_global.kvsname, keyS, val, val_max_sz);
+ MPIDI_UCX_PMI_ERROR(pmi_errno);
+ p += val_max_sz - 1;
+ }
+ str_errno =
+ MPL_str_get_binary_arg(string_addr, "U", &MPIDI_UCX_global.pmi_addr_table[i * len],
+ (int) max_string, (int *) &addr_size);
+ }
+
+ }
+
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i, total_size = 0;
+ char *temp_buf = NULL, *curr_ptr = NULL;
+ char keyS[MPIDI_UCX_KVSAPPSTRLEN];
+ char valS[MPIDI_UCX_KVSAPPSTRLEN];
+ int len = MPIDI_UCX_global.max_addr_len;
+
+ *local_upid_size = (size_t *) MPL_malloc(comm->local_size * sizeof(size_t));
+ temp_buf = (char *) MPL_malloc(comm->local_size * len);
+
+ for (i = 0; i < comm->local_size; i++) {
+ sprintf(keyS, "UCX-%d", i);
+ PMI_KVS_Get(MPIDI_UCX_global.kvsname, keyS, valS, MPIDI_UCX_KVSAPPSTRLEN);
+ // MPIDI_UCX_PMI_ERROR(pmi_errno, pmi_commit);
+ MPL_str_get_binary_arg(valS, "UCX", &temp_buf[len * i],
+ (int) len, (int *) &(*local_upid_size)[i]);
+ total_size += (*local_upid_size)[i];
+ }
+
+ *local_upids = (char *) MPL_malloc(total_size * sizeof(char));
+ curr_ptr = (*local_upids);
+ for (i = 0; i < comm->local_size; i++) {
+ memcpy(curr_ptr, &temp_buf[i * len], (*local_upid_size)[i]);
+ curr_ptr += (*local_upid_size)[i];
+ }
+
+ fn_exit:
+ if (temp_buf)
+ MPL_free(temp_buf);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_upids_to_lupids(int size,
+ size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ int i, mpi_errno = MPI_SUCCESS;
+ size_t sz = MPIDI_UCX_global.max_addr_len;
+ int *new_avt_procs;
+ char **new_upids;
+ int n_new_procs = 0;
+ int max_n_avts;
+ char *curr_upid;
+ new_avt_procs = (int *) MPL_malloc(size * sizeof(int));
+ new_upids = (char **) MPL_malloc(size * sizeof(char *));
+ max_n_avts = MPIDIU_get_max_n_avts();
+ if (MPIDI_UCX_global.pmi_addr_table == NULL) {
+ MPIDI_NMI_allocate_address_table();
+ }
+
+ curr_upid = remote_upids;
+ for (i = 0; i < size; i++) {
+ int j, k;
+ int found = 0;
+
+ for (k = 0; k < max_n_avts; k++) {
+ if (MPIDIU_get_av_table(k) == NULL) {
+ continue;
+ }
+ for (j = 0; j < MPIDIU_get_av_table(k)->size; j++) {
+ if (!memcmp(&MPIDI_UCX_global.pmi_addr_table[j * sz],
+ curr_upid, remote_upid_size[i])) {
+ (*remote_lupids)[i] = MPIDIU_LUPID_CREATE(k, j);
+ found = 1;
+ break;
+ }
+ }
+ }
+
+ if (!found) {
+ new_avt_procs[n_new_procs] = i;
+ new_upids[n_new_procs] = curr_upid;
+ n_new_procs++;
+ }
+ curr_upid += remote_upid_size[i];
+ }
+
+ /* FIXME: add support for dynamic processes */
+ /* create new av_table, insert processes */
+ if (n_new_procs > 0) {
+ mpi_errno = -1;
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPL_free(new_avt_procs);
+ MPL_free(new_upids);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_NM_mpi_free_mem(void *ptr)
+{
+ return MPIDI_CH4U_mpi_free_mem(ptr);
+}
+
+static inline void *MPIDI_NM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ return MPIDI_CH4U_mpi_alloc_mem(size, info_ptr);
+}
+
+#endif /* UCX_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_op.h b/src/mpid/ch4/netmod/ucx/ucx_op.h
new file mode 100644
index 0000000..c371d17
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_op.h
@@ -0,0 +1,24 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_OP_H_INCLUDED
+#define UCX_OP_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline int MPIDI_NM_mpi_op_free_hook(MPIR_Op * op_p)
+{
+ return 0;
+}
+
+static inline int MPIDI_NM_mpi_op_create_hook(MPIR_Op * op_p)
+{
+ return 0;
+}
+
+#endif /* UCX_OP_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_pre.h b/src/mpid/ch4/netmod/ucx/ucx_pre.h
new file mode 100644
index 0000000..fda7bf5
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_pre.h
@@ -0,0 +1,71 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_PRE_H_INCLUDED
+#define UCX_PRE_H_INCLUDED
+
+#include <ucp/api/ucp.h>
+
+#define HAVE_MPIDI_NM_type_create_hook
+#define HAVE_MPIDI_NM_type_free_hook
+
+#define MPIDI_UCX_KVSAPPSTRLEN 4096
+
+//#define MPIDI_UCX_NAME_LEN (512)
+typedef struct {
+ void *req;
+} MPIDI_UCX_ucp_request_t;
+
+typedef struct {
+ ucp_datatype_t ucp_datatype;
+} MPIDI_UCX_dt_t;
+
+typedef struct {
+ union {
+ ucp_tag_message_h message_handler;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ } a;
+} MPIDI_UCX_request_t;
+
+typedef struct {
+ int handler_id;
+ char *pack_buffer;
+} MPIDI_UCX_am_request_t;
+
+typedef struct MPIDI_UCX_am_header_t {
+ uint64_t handler_id;
+ uint64_t data_sz;
+ uint64_t payload[0];
+} MPIDI_UCX_am_header_t;
+
+typedef struct MPIDI_UCX_win_info {
+ ucp_rkey_h rkey;
+ uint64_t addr;
+ uint32_t disp;
+} __attribute__ ((packed)) MPIDI_UCX_win_info_t;
+
+
+typedef struct {
+ MPIDI_UCX_win_info_t *info_table;
+ ucp_mem_h mem_h;
+ int need_local_flush;
+} MPIDI_UCX_win_t;
+
+typedef struct {
+ ucp_ep_h dest;
+} MPIDI_UCX_addr_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_UCX_comm_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_UCX_op_t;
+
+#endif /* UCX_PRE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_probe.h b/src/mpid/ch4/netmod/ucx/ucx_probe.h
new file mode 100644
index 0000000..eb5280c
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_probe.h
@@ -0,0 +1,99 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_PROBE_H_INCLUDED
+#define UCX_PROBE_H_INCLUDED
+
+#include "ucx_impl.h"
+#include "mpidch4.h"
+
+static inline int ucx_do_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm, int context_offset, int *flag,
+ MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t ucp_tag, tag_mask;
+ MPI_Aint count;
+ ucp_tag_recv_info_t info;
+ ucp_tag_message_h message_handler;
+ tag_mask = MPIDI_UCX_tag_mask(tag, source);
+ ucp_tag = MPIDI_UCX_recv_tag(tag, source, comm->recvcontext_id + context_offset);
+ message_handler = ucp_tag_probe_nb(MPIDI_UCX_global.worker, ucp_tag, tag_mask, 0, &info);
+ if (message_handler == NULL) {
+ *flag = 0;
+ goto fn_exit;
+ }
+ *flag = true;
+ if (status == MPI_STATUS_IGNORE)
+ goto fn_exit;
+
+ status->MPI_ERROR = MPI_SUCCESS;
+ status->MPI_SOURCE = MPIDI_UCX_get_source(info.sender_tag);
+ status->MPI_TAG = MPIDI_UCX_get_tag(info.sender_tag);
+ count = info.length;
+ MPIR_STATUS_SET_COUNT(*status, count);
+ fn_exit:
+ return mpi_errno;
+
+}
+
+static inline int MPIDI_NM_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+
+
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t ucp_tag, tag_mask;
+ MPI_Aint count;
+ ucp_tag_recv_info_t info;
+ ucp_tag_message_h message_handler;
+ MPIR_Request *req;
+
+ tag_mask = MPIDI_UCX_tag_mask(tag, source);
+ ucp_tag = MPIDI_UCX_recv_tag(tag, source, comm->recvcontext_id + context_offset);
+
+ message_handler = ucp_tag_probe_nb(MPIDI_UCX_global.worker, ucp_tag, tag_mask, 1, &info);
+ if (message_handler == NULL) {
+ *flag = 0;
+ goto fn_exit;
+ }
+ *flag = 1;
+ req = (MPIR_Request *) MPIR_Request_create(MPIR_REQUEST_KIND__MPROBE);
+ MPIR_Assert(req);
+ MPIDI_UCX_REQ(req).a.message_handler = message_handler;
+ if (status == MPI_STATUS_IGNORE)
+ goto fn_exit;
+
+ status->MPI_SOURCE = MPIDI_UCX_get_source(info.sender_tag);
+ status->MPI_TAG = MPIDI_UCX_get_tag(info.sender_tag);
+ count = info.length;
+ MPIR_STATUS_SET_COUNT(*status, count);
+ fn_exit:
+ *message = req;
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+static inline int MPIDI_NM_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ mpi_errno = ucx_do_iprobe(source, tag, comm, context_offset, flag, status);
+ return mpi_errno;
+}
+
+#endif /* UCX_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_proc.h b/src/mpid/ch4/netmod/ucx/ucx_proc.h
new file mode 100644
index 0000000..7ebb0be
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_proc.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_PROC_H_INCLUDED
+#define UCX_PROC_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline int MPIDI_NM_rank_is_local(int rank, MPIR_Comm * comm)
+{
+ int ret;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+
+ ret = MPIDI_CH4U_rank_is_local(rank, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NM_RANK_IS_LOCAL);
+ return ret;
+}
+
+#endif /* UCX_PROC_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_progress.h b/src/mpid/ch4/netmod/ucx/ucx_progress.h
new file mode 100644
index 0000000..062fad3
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_progress.h
@@ -0,0 +1,147 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_PROGRESS_H_INCLUDED
+#define UCX_PROGRESS_H_INCLUDED
+
+#include "ucx_impl.h"
+//#include "events.h"
+
+static inline int MPIDI_UCX_am_handler(void *msg, size_t msg_sz)
+{
+ int mpi_errno;
+ MPIR_Request *rreq;
+ void *p_data;
+ void *in_data;
+ size_t data_sz, in_data_sz;
+ MPIDIG_am_target_cmpl_cb target_cmpl_cb;
+ struct iovec *iov;
+ int i, is_contig, iov_len;
+ size_t done, curr_len, rem;
+ MPIDI_UCX_am_header_t *msg_hdr = (MPIDI_UCX_am_header_t *) msg;
+
+ p_data = in_data = (char *) msg_hdr->payload + (msg_sz - msg_hdr->data_sz - sizeof(*msg_hdr));
+ in_data_sz = data_sz = msg_hdr->data_sz;
+
+ MPIDIG_global.target_msg_cbs[msg_hdr->handler_id] (msg_hdr->handler_id, msg_hdr->payload,
+ &p_data, &data_sz, &is_contig,
+ &target_cmpl_cb, &rreq);
+
+ if (!rreq)
+ goto fn_exit;
+
+ if ((!p_data || !data_sz) && target_cmpl_cb) {
+ MPIR_STATUS_SET_COUNT(rreq->status, data_sz);
+ target_cmpl_cb(rreq);
+ goto fn_exit;
+ }
+
+ if (is_contig) {
+ if (in_data_sz > data_sz) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ data_sz = MPL_MIN(data_sz, in_data_sz);
+ MPIR_Memcpy(p_data, in_data, data_sz);
+ MPIR_STATUS_SET_COUNT(rreq->status, data_sz);
+ }
+ else {
+ done = 0;
+ rem = in_data_sz;
+ iov = (struct iovec *) p_data;
+ iov_len = data_sz;
+
+ for (i = 0; i < iov_len && rem > 0; i++) {
+ curr_len = MPL_MIN(rem, iov[i].iov_len);
+ MPIR_Memcpy(iov[i].iov_base, (char *) in_data + done, curr_len);
+ rem -= curr_len;
+ done += curr_len;
+ }
+
+ if (rem) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ }
+
+ MPIR_STATUS_SET_COUNT(rreq->status, done);
+ }
+
+ if (target_cmpl_cb) {
+ target_cmpl_cb(rreq);
+ }
+
+ fn_exit:
+ return mpi_errno;
+}
+
+static inline void MPIDI_UCX_Handle_am_recv(void *request, ucs_status_t status,
+ ucp_tag_recv_info_t * info)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_UCX_ucp_request_t *ucp_request = (MPIDI_UCX_ucp_request_t *) request;
+
+ if (status == UCS_ERR_CANCELED) {
+ goto fn_exit;
+ }
+ fn_exit:
+ return;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_progress
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_progress(void *netmod_context, int blocking)
+{
+ int mpi_errno = MPI_SUCCESS;
+ ucp_tag_recv_info_t info;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ void *am_buf;
+ ucp_tag_message_h message_handle;
+ /* check for active messages */
+ message_handle =
+ ucp_tag_probe_nb(MPIDI_UCX_global.worker, MPIDI_UCX_AM_TAG, MPIDI_UCX_AM_TAG, 1, &info);
+ while (message_handle) {
+ am_buf = MPL_malloc(info.length);
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_msg_recv_nb(MPIDI_UCX_global.worker,
+ am_buf,
+ info.length,
+ ucp_dt_make_contig(1),
+ message_handle,
+ &MPIDI_UCX_Handle_am_recv);
+ while (!ucp_request_is_completed(ucp_request)) {
+ ucp_worker_progress(MPIDI_UCX_global.worker);
+ }
+
+ ucp_request_release(ucp_request);
+ MPIDI_UCX_am_handler(am_buf, info.length);
+ MPL_free(am_buf);
+ message_handle =
+ ucp_tag_probe_nb(MPIDI_UCX_global.worker, MPIDI_UCX_AM_TAG,
+ ~MPIDI_UCX_AM_TAG, 1, &info);
+
+ }
+
+ ucp_worker_progress(MPIDI_UCX_global.worker);
+
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_THREAD_WORKER_MUTEX);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* UCX_PROGRESS_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_recv.h b/src/mpid/ch4/netmod/ucx/ucx_recv.h
new file mode 100644
index 0000000..26c3519
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_recv.h
@@ -0,0 +1,245 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_RECV_H_INCLUDED
+#define UCX_RECV_H_INCLUDED
+
+#include "ucx_impl.h"
+
+MPL_STATIC_INLINE_PREFIX int ucx_irecv_continous(void *buf,
+ size_t data_sz,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t ucp_tag, tag_mask;
+ MPIR_Request *req;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+// MPID_THREAD_CS_ENTER(POBJ,MPIDI_THREAD_WORKER_MUTEX);
+ tag_mask = MPIDI_UCX_tag_mask(tag, rank);
+ ucp_tag = MPIDI_UCX_recv_tag(tag, rank, comm->recvcontext_id + context_offset);
+
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_recv_nb(MPIDI_UCX_global.worker,
+ buf, data_sz, ucp_dt_make_contig(1),
+ ucp_tag, tag_mask,
+ &MPIDI_UCX_Handle_recv_callback);
+
+
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+
+ if (ucp_request->req == NULL) {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__RECV);
+ MPIR_Request_add_ref(req);
+ MPIDI_UCX_REQ(req).a.ucp_request = ucp_request;
+ ucp_request->req = req;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ req = ucp_request->req;
+ ucp_request->req = NULL;
+ MPIDI_UCX_REQ(req).a.ucp_request = NULL;
+ ucp_request_release(ucp_request);
+ }
+ fn_exit:
+ *request = req;
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+MPL_STATIC_INLINE_PREFIX int ucx_irecv_non_continous(void *buf,
+ size_t count,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request,
+ MPIR_Datatype * datatype)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t ucp_tag, tag_mask;
+ MPIR_Request *req;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+// MPID_THREAD_CS_ENTER(POBJ,MPIDI_THREAD_WORKER_MUTEX);
+ tag_mask = MPIDI_UCX_tag_mask(tag, rank);
+ ucp_tag = MPIDI_UCX_recv_tag(tag, rank, comm->recvcontext_id + context_offset);
+
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_recv_nb(MPIDI_UCX_global.worker,
+ buf, count,
+ datatype->dev.netmod.ucx.ucp_datatype,
+ ucp_tag, tag_mask,
+ &MPIDI_UCX_Handle_recv_callback);
+
+
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+
+ if (ucp_request->req == NULL) {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__RECV);
+ MPIR_Request_add_ref(req);
+ ucp_request->req = req;
+ MPIDI_UCX_REQ(req).a.ucp_request = ucp_request;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ req = ucp_request->req;
+
+ MPIDI_UCX_REQ(req).a.ucp_request = NULL;
+ ucp_request->req = NULL;
+ ucp_request_release(ucp_request);
+ }
+ (req)->kind = MPIR_REQUEST_KIND__RECV;
+ fn_exit:
+ *request = req;
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int do_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag, MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t data_sz;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
+
+ MPIR_Datatype *dt_ptr;
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ if (dt_contig)
+ mpi_errno =
+ ucx_irecv_continous((char *) buf + dt_true_lb, data_sz, rank, tag, comm, context_offset,
+ request);
+ else
+ mpi_errno =
+ ucx_irecv_non_continous(buf, count, rank, tag, comm, context_offset, request, dt_ptr);
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ MPI_Status * status, MPIR_Request ** request)
+{
+
+ return do_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ return MPIDIG_mpi_recv_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ ucp_tag_message_h message_handler;
+ int mpi_errno = MPI_SUCCESS;
+ size_t data_sz;
+ int dt_contig;
+ MPIR_Request *req;
+ MPI_Aint dt_true_lb;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+
+ MPIR_Datatype *dt_ptr;
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ if (message == NULL) {
+ mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_request_complete(req);
+ *rreqp = req;
+
+ goto fn_exit;
+ }
+
+ message_handler = MPIDI_UCX_REQ(message).a.message_handler;
+ if (dt_contig)
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_msg_recv_nb(MPIDI_UCX_global.worker,
+ (char *) buf + dt_true_lb,
+ data_sz,
+ ucp_dt_make_contig(1),
+ message_handler,
+ &MPIDI_UCX_Handle_recv_callback);
+ else
+ ucp_request = (MPIDI_UCX_ucp_request_t *) ucp_tag_msg_recv_nb(MPIDI_UCX_global.worker,
+ buf, count,
+ dt_ptr->dev.netmod.ucx.
+ ucp_datatype, message_handler,
+ &MPIDI_UCX_Handle_recv_callback);
+
+
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ if (ucp_request->req == NULL) {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__RECV);
+ MPIR_Request_add_ref(req);
+ ucp_request->req = req;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ req = ucp_request->req;
+ ucp_request->req = NULL;
+ ucp_request_release(ucp_request);
+ }
+
+
+ fn_exit:
+ *rreqp = req;
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_NM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+
+
+
+ return do_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+
+}
+
+static inline int MPIDI_NM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+
+ if (MPIDI_UCX_REQ(rreq).a.ucp_request) {
+ ucp_request_cancel(MPIDI_UCX_global.worker, MPIDI_UCX_REQ(rreq).a.ucp_request);
+ }
+
+}
+
+#endif /* UCX_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_request.h b/src/mpid/ch4/netmod/ucx/ucx_request.h
new file mode 100644
index 0000000..8e62d24
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_request.h
@@ -0,0 +1,111 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_REQUEST_H_INCLUDED
+#define UCX_REQUEST_H_INCLUDED
+
+#include "ucx_impl.h"
+#include "mpidch4.h"
+#include <ucp/api/ucp.h>
+#include "mpidch4r.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_am_request_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_NM_am_request_init(MPIR_Request * req)
+{
+ req->dev.ch4.am.netmod_am.ucx.pack_buffer = NULL;
+}
+
+static inline void MPIDI_NM_am_request_finalize(MPIR_Request * req)
+{
+ if ((req)->dev.ch4.am.netmod_am.ucx.pack_buffer) {
+ MPL_free((req)->dev.ch4.am.netmod_am.ucx.pack_buffer);
+ }
+ /* MPIR_Request_free(req); */
+}
+
+static inline void MPIDI_UCX_Request_init_callback(void *request)
+{
+
+ MPIDI_UCX_ucp_request_t *ucp_request = (MPIDI_UCX_ucp_request_t *) request;
+ ucp_request->req = NULL;
+
+}
+
+static inline void MPIDI_UCX_Handle_send_callback(void *request, ucs_status_t status)
+{
+ int c;
+ int mpi_errno;
+ MPIDI_UCX_ucp_request_t *ucp_request = (MPIDI_UCX_ucp_request_t *) request;
+ MPIR_Request *req = NULL;
+ if (unlikely(status == UCS_ERR_CANCELED)) {
+ req = ucp_request->req;
+ MPIDI_CH4U_request_complete(req);
+ MPIR_STATUS_SET_CANCEL_BIT(req->status, TRUE);
+ ucp_request->req = NULL;
+ goto fn_exit;
+ }
+
+ req = ucp_request->req;
+ MPIR_cc_decr(req->cc_ptr, &c);
+ MPIR_Assert(c >= 0);
+
+ if (c == 0) {
+ MPIR_Request_free(req);
+ }
+ ucp_request->req = NULL;
+
+ fn_exit:
+ return;
+ fn_fail:
+ req->status.MPI_ERROR = mpi_errno;
+}
+
+static inline void MPIDI_UCX_Handle_recv_callback(void *request, ucs_status_t status,
+ ucp_tag_recv_info_t * info)
+{
+ MPI_Aint count;
+ int mpi_errno;
+ MPIDI_UCX_ucp_request_t *ucp_request = (MPIDI_UCX_ucp_request_t *) request;
+ MPIR_Request *rreq = NULL;
+ if (unlikely(status == UCS_ERR_CANCELED)) {
+ rreq = ucp_request->req;
+ MPIDI_CH4U_request_complete(rreq);
+ MPIR_STATUS_SET_CANCEL_BIT(rreq->status, TRUE);
+ ucp_request->req = NULL;
+ goto fn_exit;
+ }
+ if (!ucp_request->req) {
+ rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RECV);
+ MPIR_cc_set(&rreq->cc, 0);
+ rreq->status.MPI_SOURCE = MPIDI_UCX_get_source(info->sender_tag);
+ rreq->status.MPI_TAG = MPIDI_UCX_get_tag(info->sender_tag);
+ count = info->length;
+ MPIR_STATUS_SET_COUNT(rreq->status, count);
+ ucp_request->req = rreq;
+ }
+ else {
+ rreq = ucp_request->req;
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ rreq->status.MPI_SOURCE = MPIDI_UCX_get_source(info->sender_tag);
+ rreq->status.MPI_TAG = MPIDI_UCX_get_tag(info->sender_tag);
+ count = info->length;
+ MPIR_STATUS_SET_COUNT(rreq->status, count);
+ MPIDI_CH4U_request_complete(rreq);
+ ucp_request->req = NULL;
+ }
+
+ fn_exit:
+ return;
+ fn_fail:
+ rreq->status.MPI_ERROR = mpi_errno;
+}
+
+#endif /* UCX_REQUEST_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_rma.h b/src/mpid/ch4/netmod/ucx/ucx_rma.h
new file mode 100644
index 0000000..d761b47
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_rma.h
@@ -0,0 +1,304 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_RMA_H_INCLUDED
+#define UCX_RMA_H_INCLUDED
+
+#include "ucx_impl.h"
+
+static inline int MPIDI_UCX_contig_put(const void *origin_addr,
+ size_t size,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Aint true_lb, MPIR_Win * win)
+{
+
+ MPIDI_UCX_win_info_t *win_info = &(MPIDI_UCX_WIN_INFO(win, target_rank));
+ size_t offset;
+ uint64_t base;
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t status;
+ MPIR_Comm *comm = win->comm_ptr;
+ ucp_ep_h ep = MPIDI_UCX_COMM_TO_EP(comm, target_rank);
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+ base = win_info->addr;
+ offset = target_disp * win_info->disp + true_lb;
+
+ status = ucp_put_nbi(ep, origin_addr, size, base + offset, win_info->rkey);
+ if (status == UCS_INPROGRESS)
+ MPIDI_UCX_WIN(win).need_local_flush = 1;
+ else
+ MPIDI_UCX_CHK_STATUS(status);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+
+
+}
+
+static inline int MPIDI_UCX_contig_get(void *origin_addr,
+ size_t size,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Aint true_lb, MPIR_Win * win)
+{
+
+ MPIDI_UCX_win_info_t *win_info = &(MPIDI_UCX_WIN_INFO(win, target_rank));
+ size_t offset;
+ uint64_t base;
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t status;
+ MPIR_Comm *comm = win->comm_ptr;
+ ucp_ep_h ep = MPIDI_UCX_COMM_TO_EP(comm, target_rank);
+
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+ base = win_info->addr;
+ offset = target_disp * win_info->disp + true_lb;
+
+ status = ucp_get_nbi(ep, origin_addr, size, base + offset, win_info->rkey);
+ if (status == UCS_INPROGRESS)
+ MPIDI_UCX_WIN(win).need_local_flush = 1;
+ else
+ MPIDI_UCX_CHK_STATUS(status);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+
+
+}
+
+static inline int MPIDI_NM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_UCX_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_UCX_PUT);
+ int target_contig, origin_contig, mpi_errno = MPI_SUCCESS;
+ size_t target_bytes, origin_bytes;
+ MPI_Aint origin_true_lb, target_true_lb;
+ size_t offset;
+ if (win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC || win->create_flavor == MPI_WIN_FLAVOR_SHARED)
+ return MPIDI_CH4U_mpi_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+
+
+
+
+
+ MPIDI_Datatype_check_contig_size_lb(target_datatype, target_count,
+ target_contig, target_bytes, target_true_lb);
+ MPIDI_Datatype_check_contig_size_lb(origin_datatype, origin_count,
+ origin_contig, origin_bytes, origin_true_lb);
+
+ MPIR_ERR_CHKANDJUMP((origin_bytes != target_bytes), mpi_errno, MPI_ERR_SIZE, "**rmasize");
+
+ if (unlikely((origin_bytes == 0) || (target_rank == MPI_PROC_NULL)))
+ goto fn_exit;
+ if (!target_contig || !origin_contig || MPIDI_UCX_WIN_INFO(win, target_rank).rkey == NULL)
+ return MPIDI_CH4U_mpi_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ if (target_rank == win->comm_ptr->rank) {
+ offset = win->disp_unit * target_disp;
+ return MPIR_Localcopy(origin_addr,
+ origin_count,
+ origin_datatype,
+ (char *) win->base + offset, target_count, target_datatype);
+ }
+
+
+ mpi_errno = MPIDI_UCX_contig_put((char *) origin_addr + origin_true_lb, origin_bytes,
+ target_rank, target_disp, target_true_lb, win);
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+
+
+ int origin_contig, target_contig, mpi_errno = MPI_SUCCESS;
+ size_t origin_bytes, target_bytes;
+ size_t offset;
+
+ MPI_Aint origin_true_lb, target_true_lb;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_UCX_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_UCX_GET);
+
+ if (win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC || win->create_flavor == MPI_WIN_FLAVOR_SHARED)
+ return MPIDI_CH4U_mpi_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+
+ MPIDI_Datatype_check_contig_size_lb(target_datatype, target_count,
+ target_contig, target_bytes, target_true_lb);
+ MPIDI_Datatype_check_contig_size_lb(origin_datatype, origin_count,
+ origin_contig, origin_bytes, origin_true_lb);
+
+ if (unlikely((origin_bytes == 0) || (target_rank == MPI_PROC_NULL)))
+ goto fn_exit;
+
+
+
+ if (!origin_contig || !target_contig || MPIDI_UCX_WIN_INFO(win, target_rank).rkey == NULL)
+ return MPIDI_CH4U_mpi_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ if (target_rank == win->comm_ptr->rank) {
+ offset = target_disp * win->disp_unit;
+ return MPIR_Localcopy((char *) win->base + offset,
+ target_count,
+ target_datatype, origin_addr, origin_count, origin_datatype);
+ }
+
+
+ return MPIDI_UCX_contig_get((char *) origin_addr + origin_true_lb, origin_bytes,
+ target_rank, target_disp, target_true_lb, win);
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rput(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+}
+
+static inline int MPIDI_NM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+}
+
+static inline int MPIDI_NM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_fetch_and_op(origin_addr, result_addr, datatype,
+ target_rank, target_disp, op, win);
+}
+
+
+static inline int MPIDI_NM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ return MPIDI_CH4U_mpi_rget(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win,
+ request);
+}
+
+
+static inline int MPIDI_NM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+}
+
+static inline int MPIDI_NM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ return MPIDI_CH4U_mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win);
+}
+
+#endif /* UCX_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_send.h b/src/mpid/ch4/netmod/ucx/ucx_send.h
new file mode 100644
index 0000000..b6a7bec
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_send.h
@@ -0,0 +1,482 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_SEND_H_INCLUDED
+#define UCX_SEND_H_INCLUDED
+#include <ucp/api/ucp.h>
+#include "ucx_impl.h"
+#include "ucx_types.h"
+
+#undef FUNCNAME
+#define FUNCNAME ucx_send_continous
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int ucx_send_continous(const void *buf,
+ size_t data_sz,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request, int have_request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_CONTINOUS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_CONTINOUS);
+
+ ep = MPIDI_UCX_COMM_TO_EP(comm, rank);
+ ucx_tag = MPIDI_UCX_init_tag(comm->context_id + context_offset, comm->rank, tag);
+
+ ucp_request =
+ (MPIDI_UCX_ucp_request_t *) ucp_tag_send_nb(ep, buf, data_sz, ucp_dt_make_contig(1),
+ ucx_tag, &MPIDI_UCX_Handle_send_callback);
+
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ if (ucp_request == NULL) {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_cc_set(&req->cc, 0);
+ MPIDI_UCX_REQ(req).a.ucp_request = NULL;
+ goto fn_exit;
+ }
+
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(req);
+ ucp_request->req = req;
+ MPIDI_UCX_REQ(req).a.ucp_request = ucp_request;
+ ucp_request_release(ucp_request);
+
+ fn_exit:
+ *request = req;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_CONTINOUS);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+MPL_STATIC_INLINE_PREFIX int ucx_sync_send_continous(const void *buf,
+ size_t data_sz,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request, int have_request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_CONTINOUS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_CONTINOUS);
+
+ ep = MPIDI_UCX_COMM_TO_EP(comm, rank);
+ ucx_tag = MPIDI_UCX_init_tag(comm->context_id + context_offset, comm->rank, tag);
+
+ ucp_request =
+ (MPIDI_UCX_ucp_request_t *) ucp_tag_send_sync_nb(ep, buf, data_sz, ucp_dt_make_contig(1),
+ ucx_tag, &MPIDI_UCX_Handle_send_callback);
+
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+ if (ucp_request->req) {
+ req = ucp_request->req;
+ ucp_request->req = NULL;
+ MPIDI_UCX_REQ(req).a.ucp_request = NULL;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(req);
+ ucp_request->req = req;
+ MPIDI_UCX_REQ(req).a.ucp_request = ucp_request;
+ ucp_request_release(ucp_request);
+ }
+
+
+ fn_exit:
+ *request = req;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_CONTINOUS);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+MPL_STATIC_INLINE_PREFIX int ucx_sync_send_non_continous(const void *buf,
+ size_t count,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request, int have_request,
+ MPIR_Datatype * datatype)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_CONTINOUS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_CONTINOUS);
+
+ ep = MPIDI_UCX_COMM_TO_EP(comm, rank);
+ ucx_tag = MPIDI_UCX_init_tag(comm->context_id + context_offset, comm->rank, tag);
+
+ ucp_request =
+ (MPIDI_UCX_ucp_request_t *) ucp_tag_send_sync_nb(ep, buf, count,
+ datatype->dev.netmod.ucx.ucp_datatype,
+ ucx_tag, &MPIDI_UCX_Handle_send_callback);
+
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ if (ucp_request->req) {
+ req = ucp_request->req;
+ ucp_request->req = NULL;
+ ucp_request_release(ucp_request);
+ MPIDI_UCX_REQ(req).a.ucp_request = NULL;
+ }
+ else {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(req);
+ ucp_request->req = req;
+ ucp_request_release(ucp_request);
+ MPIDI_UCX_REQ(req).a.ucp_request = ucp_request;
+ }
+
+
+ fn_exit:
+ *request = req;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_CONTINOUS);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+
+
+#undef FUNCNAME
+#define FUNCNAME ucx_send_continous
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+
+MPL_STATIC_INLINE_PREFIX int ucx_send_non_continous(const void *buf,
+ size_t count,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request, int have_request,
+ MPIR_Datatype * datatype)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req;
+ MPIDI_UCX_ucp_request_t *ucp_request;
+ ucp_ep_h ep;
+ uint64_t ucx_tag;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND_CONTINOUS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND_CONTINOUS);
+
+ ep = MPIDI_UCX_COMM_TO_EP(comm, rank);
+ ucx_tag = MPIDI_UCX_init_tag(comm->context_id + context_offset, comm->rank, tag);
+
+ ucp_request =
+ (MPIDI_UCX_ucp_request_t *) ucp_tag_send_nb(ep, buf, count,
+ datatype->dev.netmod.ucx.ucp_datatype, ucx_tag,
+ &MPIDI_UCX_Handle_send_callback);
+
+ MPIDI_CH4_UCX_REQUEST(ucp_request);
+
+ if (ucp_request == NULL) {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIDI_UCX_REQ(req).a.ucp_request = NULL;
+ MPIR_cc_set(&req->cc, 0);
+ goto fn_exit;
+ }
+
+ if (ucp_request->req) {
+ req = ucp_request->req;
+ ucp_request->req = NULL;
+ MPIDI_UCX_REQ(req).a.ucp_request = NULL;
+ ucp_request_release(ucp_request);
+ }
+ else {
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(req);
+ ucp_request->req = req;
+ MPIDI_UCX_REQ(req).a.ucp_request = ucp_request;
+ ucp_request_release(ucp_request);
+ }
+
+
+ fn_exit:
+ *request = req;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND_CONTINOUS);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME ucx_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int ucx_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request,
+ int have_request)
+{
+
+ int dt_contig, mpi_errno;
+ size_t data_sz;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ if (dt_contig)
+ mpi_errno =
+ ucx_send_continous((char *) buf + dt_true_lb, data_sz, rank, tag, comm, context_offset,
+ request, have_request);
+ else
+ mpi_errno =
+ ucx_send_non_continous(buf, count, rank, tag, comm, context_offset, request,
+ have_request, dt_ptr);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int ucx_sync_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request,
+ int have_request)
+{
+
+ int dt_contig, mpi_errno;
+ size_t data_sz;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ if (dt_contig)
+ mpi_errno =
+ ucx_sync_send_continous((char *) buf + dt_true_lb, data_sz, rank, tag, comm,
+ context_offset, request, have_request);
+ else
+ mpi_errno =
+ ucx_sync_send_non_continous(buf, count, rank, tag, comm, context_offset, request,
+ have_request, dt_ptr);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SEND);
+ mpi_errno = ucx_send(buf, count, datatype, rank, tag, comm, context_offset, request, 0);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SEND);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_rsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_rsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return ucx_send(buf, count, datatype, rank, tag, comm, context_offset, request, 0);
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_irsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_netmod_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return ucx_send(buf, count, datatype, rank, tag, comm, context_offset, request, 1);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_ssend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ return ucx_sync_send(buf, count, datatype, rank, tag, comm, context_offset, request, 0);
+}
+
+static inline int MPIDI_NM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ return MPIDIG_mpi_startall(count, requests);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_send_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_send_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_ssend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_ssend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_bsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_bsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_rsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ return MPIDIG_mpi_rsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+
+ return ucx_send(buf, count, datatype, rank, tag, comm, context_offset, request, 1);
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_issend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+
+ return ucx_sync_send(buf, count, datatype, rank, tag, comm, context_offset, request, 1);
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmode_cancel_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ if (MPIDI_UCX_REQ(sreq).a.ucp_request) {
+ ucp_request_cancel(MPIDI_UCX_global.worker, MPIDI_UCX_REQ(sreq).a.ucp_request);
+ ucp_request_release(MPIDI_UCX_REQ(sreq).a.ucp_request);
+ }
+}
+
+#endif /* UCX_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_spawn.h b/src/mpid/ch4/netmod/ucx/ucx_spawn.h
new file mode 100644
index 0000000..a083831
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_spawn.h
@@ -0,0 +1,103 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_SPAWN_H_INCLUDED
+#define UCX_SPAWN_H_INCLUDED
+
+#include "ucx_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmod_comm_open_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ int mpi_errno = MPI_SUCCESS;
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmod_comm_close_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_close_port(const char *port_name)
+{
+ int mpi_errno = MPI_SUCCESS;
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_connect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_NM_mpi_comm_disconnect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_COMM_DISCONNECT);
+
+
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_COMM_DISCONNECT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_netmod_comm_close_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_NM_mpi_comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm_ptr, MPIR_Comm ** newcomm)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_COMM_ACCEPT);
+
+
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_COMM_ACCEPT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* UCX_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_types.h b/src/mpid/ch4/netmod/ucx/ucx_types.h
new file mode 100644
index 0000000..9588636
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_types.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_TYPES_H_INCLUDED
+#define UCX_TYPES_H_INCLUDED
+#include <ucp/api/ucp.h>
+#include <ucp/api/ucp_def.h>
+#include "mpiimpl.h"
+
+#define __SHORT_FILE__ \
+ (strrchr(__FILE__,'/') \
+ ? strrchr(__FILE__,'/')+1 \
+ : __FILE__ \
+)
+
+#define UCP_PEER_NAME_MAX HOST_NAME_MAX
+
+#define MPIDI_MAP_NOT_FOUND ((void*)(-1UL))
+
+/* Active Message Stuff */
+#define MPIDI_UCX_NUM_AM_BUFFERS (64)
+#define MPIDI_UCX_MAX_AM_EAGER_SZ (16*1024)
+#define MPIDI_UCX_AM_TAG (1 << 28)
+
+typedef struct {
+ int avtid;
+ ucp_context_h context;
+ ucp_worker_h worker;
+ char addrname[UCP_PEER_NAME_MAX];
+ char *pmi_addr_table;
+ size_t addrname_len;
+ ucp_address_t *if_address;
+ char kvsname[MPIDI_UCX_KVSAPPSTRLEN];
+ char pname[MPI_MAX_PROCESSOR_NAME];
+ int max_addr_len;
+} MPIDI_UCX_global_t;
+
+#define MPIDI_UCX_AV(av) ((av)->netmod.ucx)
+
+extern MPIDI_UCX_global_t MPIDI_UCX_global;
+
+/* UCX TAG Layout */
+
+/* 01234567 01234567 01234567 01234567 01234567 01234567 01234567 01234567
+ * context_id (16) |source rank (16) | Message Tag (32)+ERROR BITS
+ */
+
+#define MPIDI_UCX_CONTEXT_TAG_BITS 16
+#define MPIDI_UCX_CONTEXT_RANK_BITS 16
+#define UCX_TAG_BITS 32
+
+#define MPIDI_UCX_TAG_MASK (0x00000000FFFFFFFFULL)
+#define MPIDI_UCX_SOURCE_MASK (0x0000FFFF00000000ULL)
+#define MPIDI_UCX_TAG_SHIFT (32)
+#define MPIDI_UCX_SOURCE_SHIFT (16)
+
+#endif /* UCX_TYPES_H_INCLUDED */
diff --git a/src/mpid/ch4/netmod/ucx/ucx_win.h b/src/mpid/ch4/netmod/ucx/ucx_win.h
new file mode 100644
index 0000000..b51d7c9
--- /dev/null
+++ b/src/mpid/ch4/netmod/ucx/ucx_win.h
@@ -0,0 +1,509 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Mellanox Technologies Ltd.
+ * Copyright (C) Mellanox Technologies Ltd. 2016. ALL RIGHTS RESERVED
+ */
+#ifndef UCX_WIN_H_INCLUDED
+#define UCX_WIN_H_INCLUDED
+
+#include "ucx_impl.h"
+struct _UCX_share {
+ int disp;
+ MPI_Aint addr;
+};
+
+char ucx_dummy_buffer[4096];
+
+static inline int MPIDI_UCX_Win_allgather(MPIR_Win * win, size_t length,
+ uint32_t disp_unit, void **base_ptr)
+{
+
+ MPIR_Errflag_t err = MPIR_ERR_NONE;
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t status;
+ ucp_mem_h mem_h;
+ int cntr = 0;
+ size_t rkey_size;
+ int *rkey_sizes, *recv_disps, i;
+ char *rkey_buffer, *rkey_recv_buff = NULL;
+ struct _UCX_share *share_data;
+ size_t size;
+ void *base;
+ if (length == 0)
+ size = 1024;
+ else
+ size = length;
+ MPIR_Comm *comm_ptr = win->comm_ptr;
+
+ ucp_context_h ucp_context = MPIDI_UCX_global.context;
+
+ MPIDI_UCX_WIN(win).info_table = MPL_malloc(sizeof(MPIDI_UCX_win_info_t) * comm_ptr->local_size);
+ if (length == 0)
+ base = &ucx_dummy_buffer;
+ else
+ base = *base_ptr;
+
+ status = ucp_mem_map(MPIDI_UCX_global.context, &base, size, 0, &mem_h);
+ MPIDI_UCX_CHK_STATUS(status);
+ if (length > 0)
+ *base_ptr = base;
+
+ MPIDI_UCX_WIN(win).mem_h = mem_h;
+
+ /* pack the key */
+ status = ucp_rkey_pack(ucp_context, mem_h, (void **) &rkey_buffer, &rkey_size);
+
+ MPIDI_UCX_CHK_STATUS(status);
+
+ rkey_sizes = (int *) MPL_malloc(sizeof(int) * comm_ptr->local_size);
+ rkey_sizes[comm_ptr->rank] = (int) rkey_size;
+ mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE, 1, MPI_INT,
+ rkey_sizes, 1, MPI_INT, comm_ptr, &err);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ recv_disps = (int *) MPL_malloc(sizeof(int) * comm_ptr->local_size);
+
+
+ for (i = 0; i < comm_ptr->local_size; i++) {
+ recv_disps[i] = cntr;
+ cntr += rkey_sizes[i];
+ }
+
+ rkey_recv_buff = MPL_malloc(cntr);
+
+ /* allgather */
+ mpi_errno = MPIR_Allgatherv_impl(rkey_buffer, rkey_size, MPI_BYTE,
+ rkey_recv_buff, rkey_sizes, recv_disps, MPI_BYTE,
+ comm_ptr, &err);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+/* If we use the shared memory support in UCX, we have to distinguish between local
+ and remote windows (at least now). If win_create is used, the key cannot be unpackt -
+ then we need our fallback-solution */
+
+ for (i = 0; i < comm_ptr->local_size; i++) {
+ status = ucp_ep_rkey_unpack(MPIDI_UCX_COMM_TO_EP(comm_ptr, i),
+ &rkey_recv_buff[recv_disps[i]],
+ &(MPIDI_UCX_WIN_INFO(win, i).rkey));
+ if (status == UCS_ERR_UNREACHABLE) {
+ MPIDI_UCX_WIN_INFO(win, i).rkey = NULL;
+ }
+ else
+ MPIDI_UCX_CHK_STATUS(status);
+ }
+ share_data = MPL_malloc(comm_ptr->local_size * sizeof(struct _UCX_share));
+
+ share_data[comm_ptr->rank].disp = disp_unit;
+ share_data[comm_ptr->rank].addr = (MPI_Aint) base;
+
+ mpi_errno =
+ MPIR_Allgather(MPI_IN_PLACE, sizeof(struct _UCX_share), MPI_BYTE, share_data,
+ sizeof(struct _UCX_share), MPI_BYTE, comm_ptr, &err);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ for (i = 0; i < comm_ptr->local_size; i++) {
+ MPIDI_UCX_WIN_INFO(win, i).disp = share_data[i].disp;
+ MPIDI_UCX_WIN_INFO(win, i).addr = share_data[i].addr;
+ }
+ MPIDI_UCX_WIN(win).need_local_flush = 0;
+ fn_exit:
+ /* buffer release */
+ if (rkey_buffer)
+ ucp_rkey_buffer_release(rkey_buffer);
+ /* free temps */
+ MPL_free(share_data);
+ MPL_free(rkey_sizes);
+ MPL_free(recv_disps);
+ MPL_free(rkey_recv_buff);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_UCX_Win_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_UCX_Win_init(MPI_Aint length,
+ int disp_unit,
+ MPIR_Win ** win_ptr,
+ MPIR_Info * info,
+ MPIR_Comm * comm_ptr, int create_flavor, int model)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Win *win;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_CH4_UCX_WIN_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_CH4_UCX_WIN_INIT);
+
+ mpi_errno = MPIDI_CH4R_win_init(length, disp_unit, &win, info, comm_ptr, create_flavor, model);
+ MPIR_ERR_CHKANDSTMT(mpi_errno != MPI_SUCCESS,
+ mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ *win_ptr = win;
+
+ memset(&MPIDI_UCX_WIN(win), 0, sizeof(MPIDI_UCX_win_t));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_CH4_UCX_PROGRESS_WIN_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ return MPIDI_CH4R_mpi_win_set_info(win, info);
+}
+
+
+static inline int MPIDI_NM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_start(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_complete(MPIR_Win * win)
+{
+
+ ucs_status_t ucp_status;
+ ucp_status = ucp_worker_flush(MPIDI_UCX_global.worker);
+ return MPIDI_CH4R_mpi_win_complete(win);
+}
+
+static inline int MPIDI_NM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+
+ return MPIDI_CH4R_mpi_win_post(group, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_wait(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_wait(win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ return MPIDI_CH4R_mpi_win_test(win, flag);
+}
+
+static inline int MPIDI_NM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock(lock_type, rank, assert, win);
+}
+
+
+static inline int MPIDI_NM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t ucp_status;
+ ucp_ep_h ep = MPIDI_UCX_COMM_TO_EP(win->comm_ptr, rank);
+ /* make sure all operations are completed */
+ ucp_status = ucp_ep_flush(ep);
+
+ MPIDI_UCX_CHK_STATUS(ucp_status);
+ mpi_errno = MPIDI_CH4R_mpi_win_unlock(rank, win);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ return MPIDI_CH4R_mpi_win_get_info(win, info_p_p);
+}
+
+
+static inline int MPIDI_NM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win = *win_ptr;
+ MPIDI_CH4U_EPOCH_FREE_CHECK(win, mpi_errno, return mpi_errno);
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+ if (win->create_flavor != MPI_WIN_FLAVOR_SHARED && win->create_flavor != MPI_WIN_FLAVOR_DYNAMIC) {
+ ucp_mem_unmap(MPIDI_UCX_global.context, MPIDI_UCX_WIN(win).mem_h);
+ MPL_free(MPIDI_UCX_WIN(win).info_table);
+ }
+ if (win->create_flavor == MPI_WIN_FLAVOR_ALLOCATE)
+ win->base = NULL;
+ MPIDI_CH4R_win_finalize(win_ptr);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_OFI_WIN_FREE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ int mpi_errno;
+ ucs_status_t ucp_status;
+ /*keep this for now to fence all none-natice operations */
+/* make sure all local and remote operations are completed */
+ ucp_status = ucp_worker_flush(MPIDI_UCX_global.worker);
+
+
+ mpi_errno = MPIDI_CH4R_mpi_win_fence(assert, win);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_UCX_CHK_STATUS(ucp_status);
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_UCX_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_UCX_WIN_CREATE);
+
+ MPIDI_UCX_Win_init(length, disp_unit, win_ptr, info,
+ comm_ptr, MPI_WIN_FLAVOR_CREATE, MPI_WIN_UNIFIED);
+
+ win = *win_ptr;
+
+ mpi_errno = MPIDI_UCX_Win_allgather(win, length, disp_unit, &base);
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ win->base = base;
+
+
+
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_UCX_WIN_CREATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+
+}
+
+static inline int MPIDI_NM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ return MPIDI_CH4R_mpi_win_attach(win, base, size);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ return MPIDI_CH4R_mpi_win_allocate_shared(size, disp_unit, info_ptr, comm_ptr, base_ptr,
+ win_ptr);
+}
+
+static inline int MPIDI_NM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ return MPIDI_CH4R_mpi_win_detach(win, base);
+}
+
+static inline int MPIDI_NM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ return MPIDI_CH4R_mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+}
+
+static inline int MPIDI_NM_mpi_win_allocate(MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm_ptr, void *baseptr,
+ MPIR_Win ** win_ptr)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win;
+ void *base = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_NETMOD_UCX_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_NETMOD_UCX_WIN_WIN_ALLOCATE);
+
+ MPIDI_UCX_Win_init(length, disp_unit, win_ptr, info,
+ comm_ptr, MPI_WIN_FLAVOR_ALLOCATE, MPI_WIN_UNIFIED);
+ win = *win_ptr;
+ mpi_errno = MPIDI_UCX_Win_allgather(win, length, disp_unit, &base);
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+ win->base = base;
+
+
+ *(void **) baseptr = (void *) base;
+
+
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_NETMOD_UCX_WIN_ALLOCATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+
+}
+
+static inline int MPIDI_NM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+
+ int mpi_errno;
+ ucs_status_t ucp_status;
+
+ ucp_ep_h ep = MPIDI_UCX_COMM_TO_EP(win->comm_ptr, rank);
+
+ mpi_errno = MPIDI_CH4R_mpi_win_flush(rank, win);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+/* only flush the endpoint */
+ ucp_status = ucp_ep_flush(ep);
+
+ MPIDI_UCX_CHK_STATUS(ucp_status);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t ucp_status;
+ mpi_errno = MPIDI_CH4R_mpi_win_flush_local_all(win);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ /* currently, UCP does not support local flush, so we have to call
+ * a global flush. This is not good for performance - but OK for now */
+ if (MPIDI_UCX_WIN(win).need_local_flush == 1) {
+ ucp_status = ucp_worker_flush(MPIDI_UCX_global.worker);
+ MPIDI_UCX_CHK_STATUS(ucp_status);
+ MPIDI_UCX_WIN(win).need_local_flush = 0;
+ }
+
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t ucp_status;
+
+ /*first we have to make sure that all operations are completed */
+ ucp_status = ucp_worker_flush(MPIDI_UCX_global.worker);
+ MPIDI_UCX_CHK_STATUS(ucp_status);
+ mpi_errno = MPIDI_CH4R_mpi_win_unlock_all(win);
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline int MPIDI_NM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ return MPIDI_CH4R_mpi_win_create_dynamic(info, comm, win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t ucp_status;
+ mpi_errno = MPIDI_CH4R_mpi_win_flush_local(rank, win);
+
+ ucp_ep_h ep = MPIDI_UCX_COMM_TO_EP(win->comm_ptr, rank);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ /* currently, UCP does not support local flush, so we have to call
+ * a global flush. This is not good for performance - but OK for now */
+
+ if (MPIDI_UCX_WIN(win).need_local_flush == 1) {
+ ucp_status = ucp_ep_flush(ep);
+ MPIDI_UCX_CHK_STATUS(ucp_status);
+ MPIDI_UCX_WIN(win).need_local_flush = 0;
+ }
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_win_sync(MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_sync(win);
+}
+
+static inline int MPIDI_NM_mpi_win_flush_all(MPIR_Win * win)
+{
+
+/*maybe we just flush all eps here? More efficient for smaller communicators...*/
+ int mpi_errno = MPI_SUCCESS;
+ ucs_status_t ucp_status;
+ mpi_errno = MPIDI_CH4R_mpi_win_flush_all(win);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ ucp_status = ucp_worker_flush(MPIDI_UCX_global.worker);
+
+ MPIDI_UCX_CHK_STATUS(ucp_status);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+static inline int MPIDI_NM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ return MPIDI_CH4R_mpi_win_lock_all(assert, win);
+}
+
+
+#endif /* UCX_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/Makefile.mk b/src/mpid/ch4/shm/Makefile.mk
new file mode 100644
index 0000000..6bf059b
--- /dev/null
+++ b/src/mpid/ch4/shm/Makefile.mk
@@ -0,0 +1,24 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## (C) 2014 by Mellanox Technologies, Inc.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+
+if BUILD_CH4_SHM
+
+AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/ch4/shm/include
+
+noinst_HEADERS += src/mpid/ch4/shm/include/shm.h
+noinst_HEADERS += src/mpid/ch4/shm/include/shm_impl.h
+
+include $(top_srcdir)/src/mpid/ch4/shm/stubshm/Makefile.mk
+include $(top_srcdir)/src/mpid/ch4/shm/posix/Makefile.mk
+
+endif
diff --git a/src/mpid/ch4/shm/include/shm.h b/src/mpid/ch4/shm/include/shm.h
new file mode 100644
index 0000000..6a35e9d
--- /dev/null
+++ b/src/mpid/ch4/shm/include/shm.h
@@ -0,0 +1,1057 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+/* ch4 shm functions */
+#ifndef SHM_H_INCLUDED
+#define SHM_H_INCLUDED
+
+#include <mpidimpl.h>
+
+#define MPIDI_MAX_SHM_STRING_LEN 64
+
+typedef int (*MPIDI_SHM_mpi_init_t) (int rank, int size);
+typedef int (*MPIDI_SHM_mpi_finalize_t) (void);
+typedef int (*MPIDI_SHM_progress_t) (int blocking);
+typedef int (*MPIDI_SHM_mpi_comm_connect_t) (const char *port_name, MPIR_Info * info, int root,
+ MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr);
+typedef int (*MPIDI_SHM_mpi_comm_disconnect_t) (MPIR_Comm * comm_ptr);
+typedef int (*MPIDI_SHM_mpi_open_port_t) (MPIR_Info * info_ptr, char *port_name);
+typedef int (*MPIDI_SHM_mpi_close_port_t) (const char *port_name);
+typedef int (*MPIDI_SHM_mpi_comm_accept_t) (const char *port_name, MPIR_Info * info, int root,
+ MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr);
+typedef int (*MPIDI_SHM_am_send_hdr_t) (int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *shm_context);
+typedef int (*MPIDI_SHM_am_isend_t) (int rank, MPIR_Comm * comm, int handler_id, const void *am_hdr,
+ size_t am_hdr_sz, const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq, void *shm_context);
+typedef int (*MPIDI_SHM_inject_am_t) (int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, const void *data,
+ MPI_Count count, MPI_Datatype datatype, void *shm_context);
+typedef int (*MPIDI_SHM_am_isendv_t) (int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec * am_hdrs, size_t iov_len, const void *data,
+ MPI_Count count, MPI_Datatype datatype, MPIR_Request * sreq,
+ void *shm_context);
+typedef int (*MPIDI_SHM_inject_amv_t) (int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec * am_hdrs, size_t iov_len, const void *data,
+ MPI_Count count, MPI_Datatype datatype, void *shm_context);
+typedef int (*MPIDI_SHM_am_send_hdr_reply_t) (MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz);
+typedef int (*MPIDI_SHM_am_isend_reply_t) (MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count, MPI_Datatype datatype,
+ MPIR_Request * sreq);
+typedef int (*MPIDI_SHM_inject_am_reply_t) (MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype);
+typedef int (*MPIDI_SHM_inject_amv_reply_t) (MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, struct iovec * am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype);
+typedef size_t(*MPIDI_SHM_am_hdr_max_sz_t) (void);
+typedef size_t(*MPIDI_SHM_am_inject_max_sz_t) (void);
+typedef int (*MPIDI_SHM_am_recv_t) (MPIR_Request * req);
+typedef int (*MPIDI_SHM_comm_get_lpid_t) (MPIR_Comm * comm_ptr, int idx, int *lpid_ptr,
+ MPL_bool is_remote);
+typedef int (*MPIDI_SHM_get_node_id_t) (MPIR_Comm * comm, int rank, MPID_Node_id_t * id_p);
+typedef int (*MPIDI_SHM_get_max_node_id_t) (MPIR_Comm * comm, MPID_Node_id_t * max_id_p);
+typedef int (*MPIDI_SHM_get_local_upids_t) (MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids);
+typedef int (*MPIDI_SHM_upids_to_lupids_t) (int size, size_t * remote_upid_size, char *remote_upids,
+ int **remote_lupids);
+typedef int (*MPIDI_SHM_create_intercomm_from_lpids_t) (MPIR_Comm * newcomm_ptr, int size,
+ const int lpids[]);
+typedef int (*MPIDI_SHM_mpi_comm_create_hook_t) (MPIR_Comm * comm);
+typedef int (*MPIDI_SHM_mpi_comm_free_hook_t) (MPIR_Comm * comm);
+typedef int (*MPIDI_SHM_mpi_type_create_hook_t) (MPIR_Datatype * type);
+typedef int (*MPIDI_SHM_mpi_type_free_hook_t) (MPIR_Datatype * type);
+typedef int (*MPIDI_SHM_mpi_op_create_hook_t) (MPIR_Op * op);
+typedef int (*MPIDI_SHM_mpi_op_free_hook_t) (MPIR_Op * op);
+typedef void (*MPIDI_SHM_am_request_init_t) (MPIR_Request * req);
+typedef void (*MPIDI_SHM_am_request_finalize_t) (MPIR_Request * req);
+typedef int (*MPIDI_SHM_mpi_send_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_ssend_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_startall_t) (int count, MPIR_Request * requests[]);
+typedef int (*MPIDI_SHM_mpi_send_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_ssend_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_rsend_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_bsend_init_t) (const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_isend_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_issend_t) (const void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_cancel_send_t) (MPIR_Request * sreq);
+typedef int (*MPIDI_SHM_mpi_recv_init_t) (void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_recv_t) (void *buf, int count, MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset, MPI_Status * status,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_irecv_t) (void *buf, int count, MPI_Datatype datatype, int rank,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_imrecv_t) (void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp);
+typedef int (*MPIDI_SHM_mpi_cancel_recv_t) (MPIR_Request * rreq);
+typedef void *(*MPIDI_SHM_mpi_alloc_mem_t) (size_t size, MPIR_Info * info_ptr);
+typedef int (*MPIDI_SHM_mpi_free_mem_t) (void *ptr);
+typedef int (*MPIDI_SHM_mpi_improbe_t) (int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status);
+typedef int (*MPIDI_SHM_mpi_iprobe_t) (int source, int tag, MPIR_Comm * comm, int context_offset,
+ int *flag, MPI_Status * status);
+typedef int (*MPIDI_SHM_mpi_win_set_info_t) (MPIR_Win * win, MPIR_Info * info);
+typedef int (*MPIDI_SHM_mpi_win_shared_query_t) (MPIR_Win * win, int rank, MPI_Aint * size,
+ int *disp_unit, void *baseptr);
+typedef int (*MPIDI_SHM_mpi_put_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_start_t) (MPIR_Group * group, int assert, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_complete_t) (MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_post_t) (MPIR_Group * group, int assert, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_wait_t) (MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_test_t) (MPIR_Win * win, int *flag);
+typedef int (*MPIDI_SHM_mpi_win_lock_t) (int lock_type, int rank, int assert, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_unlock_t) (int rank, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_get_info_t) (MPIR_Win * win, MPIR_Info ** info_p_p);
+typedef int (*MPIDI_SHM_mpi_get_t) (void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_free_t) (MPIR_Win ** win_ptr);
+typedef int (*MPIDI_SHM_mpi_win_fence_t) (int assert, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_create_t) (void *base, MPI_Aint length, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr);
+typedef int (*MPIDI_SHM_mpi_accumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_attach_t) (MPIR_Win * win, void *base, MPI_Aint size);
+typedef int (*MPIDI_SHM_mpi_win_allocate_shared_t) (MPI_Aint size, int disp_unit,
+ MPIR_Info * info_ptr, MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr);
+typedef int (*MPIDI_SHM_mpi_rput_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_win_flush_local_t) (int rank, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_detach_t) (MPIR_Win * win, const void *base);
+typedef int (*MPIDI_SHM_mpi_compare_and_swap_t) (const void *origin_addr, const void *compare_addr,
+ void *result_addr, MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_raccumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_rget_accumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr,
+ int result_count, MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_fetch_and_op_t) (const void *origin_addr, void *result_addr,
+ MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_allocate_t) (MPI_Aint size, int disp_unit, MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win);
+typedef int (*MPIDI_SHM_mpi_win_flush_t) (int rank, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_flush_local_all_t) (MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_unlock_all_t) (MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_create_dynamic_t) (MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win);
+typedef int (*MPIDI_SHM_mpi_rget_t) (void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request);
+typedef int (*MPIDI_SHM_mpi_win_sync_t) (MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_flush_all_t) (MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_get_accumulate_t) (const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr,
+ int result_count, MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_win_lock_all_t) (int assert, MPIR_Win * win);
+typedef int (*MPIDI_SHM_mpi_barrier_t) (MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_bcast_t) (void *buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_allreduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_allgather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_allgatherv_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_scatter_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_scatterv_t) (const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_gather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_gatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_alltoall_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_alltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_alltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[], MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_reduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_reduce_scatter_t) (const void *sendbuf, void *recvbuf,
+ const int *recvcounts, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_reduce_scatter_block_t) (const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_scan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_exscan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_neighbor_allgather_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_neighbor_allgatherv_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_neighbor_alltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_neighbor_alltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes, void *recvbuf,
+ const int *recvcounts, const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_neighbor_alltoall_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag);
+typedef int (*MPIDI_SHM_mpi_ineighbor_allgather_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ineighbor_allgatherv_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ineighbor_alltoall_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ineighbor_alltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ineighbor_alltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes, void *recvbuf,
+ const int *recvcounts, const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ibarrier_t) (MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ibcast_t) (void *buffer, int count, MPI_Datatype datatype, int root,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_iallgather_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_iallgatherv_t) (const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_iallreduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ialltoall_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ialltoallv_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ialltoallw_t) (const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[], MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_iexscan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_igather_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_igatherv_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ireduce_scatter_block_t) (const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ireduce_scatter_t) (const void *sendbuf, void *recvbuf,
+ const int *recvcounts, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_ireduce_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_iscan_t) (const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_iscatter_t) (const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * req);
+typedef int (*MPIDI_SHM_mpi_iscatterv_t) (const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req);
+
+typedef struct MPIDI_SHM_funcs {
+ MPIDI_SHM_mpi_init_t mpi_init;
+ MPIDI_SHM_mpi_finalize_t mpi_finalize;
+ MPIDI_SHM_progress_t progress;
+ MPIDI_SHM_mpi_comm_connect_t mpi_comm_connect;
+ MPIDI_SHM_mpi_comm_disconnect_t mpi_comm_disconnect;
+ MPIDI_SHM_mpi_open_port_t mpi_open_port;
+ MPIDI_SHM_mpi_close_port_t mpi_close_port;
+ MPIDI_SHM_mpi_comm_accept_t mpi_comm_accept;
+ MPIDI_SHM_am_send_hdr_t am_send_hdr;
+ MPIDI_SHM_am_isend_t am_isend;
+ MPIDI_SHM_inject_am_t inject_am;
+ MPIDI_SHM_am_isendv_t am_isendv;
+ MPIDI_SHM_inject_amv_t inject_amv;
+ MPIDI_SHM_am_send_hdr_reply_t am_send_hdr_reply;
+ MPIDI_SHM_am_isend_reply_t am_isend_reply;
+ MPIDI_SHM_inject_am_reply_t inject_am_reply;
+ MPIDI_SHM_inject_amv_reply_t inject_amv_reply;
+ MPIDI_SHM_am_hdr_max_sz_t am_hdr_max_sz;
+ MPIDI_SHM_am_inject_max_sz_t am_inject_max_sz;
+ MPIDI_SHM_am_recv_t am_recv;
+ /* Routines that handle addressing */
+ MPIDI_SHM_comm_get_lpid_t comm_get_lpid;
+ MPIDI_SHM_get_node_id_t get_node_id;
+ MPIDI_SHM_get_max_node_id_t get_max_node_id;
+ MPIDI_SHM_get_local_upids_t get_local_upids;
+ MPIDI_SHM_upids_to_lupids_t upids_to_lupids;
+ MPIDI_SHM_create_intercomm_from_lpids_t create_intercomm_from_lpids;
+ MPIDI_SHM_mpi_comm_create_hook_t mpi_comm_create_hook;
+ MPIDI_SHM_mpi_comm_free_hook_t mpi_comm_free_hook;
+ MPIDI_SHM_mpi_type_create_hook_t mpi_type_create_hook;
+ MPIDI_SHM_mpi_type_free_hook_t mpi_type_free_hook;
+ MPIDI_SHM_mpi_op_create_hook_t mpi_op_create_hook;
+ MPIDI_SHM_mpi_op_free_hook_t mpi_op_free_hook;
+ /* Request allocation routines */
+ MPIDI_SHM_am_request_init_t am_request_init;
+ MPIDI_SHM_am_request_finalize_t am_request_finalize;
+} MPIDI_SHM_funcs_t;
+
+typedef struct MPIDI_SHM_native_funcs {
+ MPIDI_SHM_mpi_send_t mpi_send;
+ MPIDI_SHM_mpi_ssend_t mpi_ssend;
+ MPIDI_SHM_mpi_startall_t mpi_startall;
+ MPIDI_SHM_mpi_send_init_t mpi_send_init;
+ MPIDI_SHM_mpi_ssend_init_t mpi_ssend_init;
+ MPIDI_SHM_mpi_rsend_init_t mpi_rsend_init;
+ MPIDI_SHM_mpi_bsend_init_t mpi_bsend_init;
+ MPIDI_SHM_mpi_isend_t mpi_isend;
+ MPIDI_SHM_mpi_issend_t mpi_issend;
+ MPIDI_SHM_mpi_cancel_send_t mpi_cancel_send;
+ MPIDI_SHM_mpi_recv_init_t mpi_recv_init;
+ MPIDI_SHM_mpi_recv_t mpi_recv;
+ MPIDI_SHM_mpi_irecv_t mpi_irecv;
+ MPIDI_SHM_mpi_imrecv_t mpi_imrecv;
+ MPIDI_SHM_mpi_cancel_recv_t mpi_cancel_recv;
+ MPIDI_SHM_mpi_alloc_mem_t mpi_alloc_mem;
+ MPIDI_SHM_mpi_free_mem_t mpi_free_mem;
+ MPIDI_SHM_mpi_improbe_t mpi_improbe;
+ MPIDI_SHM_mpi_iprobe_t mpi_iprobe;
+ MPIDI_SHM_mpi_win_set_info_t mpi_win_set_info;
+ MPIDI_SHM_mpi_win_shared_query_t mpi_win_shared_query;
+ MPIDI_SHM_mpi_put_t mpi_put;
+ MPIDI_SHM_mpi_win_start_t mpi_win_start;
+ MPIDI_SHM_mpi_win_complete_t mpi_win_complete;
+ MPIDI_SHM_mpi_win_post_t mpi_win_post;
+ MPIDI_SHM_mpi_win_wait_t mpi_win_wait;
+ MPIDI_SHM_mpi_win_test_t mpi_win_test;
+ MPIDI_SHM_mpi_win_lock_t mpi_win_lock;
+ MPIDI_SHM_mpi_win_unlock_t mpi_win_unlock;
+ MPIDI_SHM_mpi_win_get_info_t mpi_win_get_info;
+ MPIDI_SHM_mpi_get_t mpi_get;
+ MPIDI_SHM_mpi_win_free_t mpi_win_free;
+ MPIDI_SHM_mpi_win_fence_t mpi_win_fence;
+ MPIDI_SHM_mpi_win_create_t mpi_win_create;
+ MPIDI_SHM_mpi_accumulate_t mpi_accumulate;
+ MPIDI_SHM_mpi_win_attach_t mpi_win_attach;
+ MPIDI_SHM_mpi_win_allocate_shared_t mpi_win_allocate_shared;
+ MPIDI_SHM_mpi_rput_t mpi_rput;
+ MPIDI_SHM_mpi_win_flush_local_t mpi_win_flush_local;
+ MPIDI_SHM_mpi_win_detach_t mpi_win_detach;
+ MPIDI_SHM_mpi_compare_and_swap_t mpi_compare_and_swap;
+ MPIDI_SHM_mpi_raccumulate_t mpi_raccumulate;
+ MPIDI_SHM_mpi_rget_accumulate_t mpi_rget_accumulate;
+ MPIDI_SHM_mpi_fetch_and_op_t mpi_fetch_and_op;
+ MPIDI_SHM_mpi_win_allocate_t mpi_win_allocate;
+ MPIDI_SHM_mpi_win_flush_t mpi_win_flush;
+ MPIDI_SHM_mpi_win_flush_local_all_t mpi_win_flush_local_all;
+ MPIDI_SHM_mpi_win_unlock_all_t mpi_win_unlock_all;
+ MPIDI_SHM_mpi_win_create_dynamic_t mpi_win_create_dynamic;
+ MPIDI_SHM_mpi_rget_t mpi_rget;
+ MPIDI_SHM_mpi_win_sync_t mpi_win_sync;
+ MPIDI_SHM_mpi_win_flush_all_t mpi_win_flush_all;
+ MPIDI_SHM_mpi_get_accumulate_t mpi_get_accumulate;
+ MPIDI_SHM_mpi_win_lock_all_t mpi_win_lock_all;
+ /* Collectives */
+ MPIDI_SHM_mpi_barrier_t mpi_barrier;
+ MPIDI_SHM_mpi_bcast_t mpi_bcast;
+ MPIDI_SHM_mpi_allreduce_t mpi_allreduce;
+ MPIDI_SHM_mpi_allgather_t mpi_allgather;
+ MPIDI_SHM_mpi_allgatherv_t mpi_allgatherv;
+ MPIDI_SHM_mpi_scatter_t mpi_scatter;
+ MPIDI_SHM_mpi_scatterv_t mpi_scatterv;
+ MPIDI_SHM_mpi_gather_t mpi_gather;
+ MPIDI_SHM_mpi_gatherv_t mpi_gatherv;
+ MPIDI_SHM_mpi_alltoall_t mpi_alltoall;
+ MPIDI_SHM_mpi_alltoallv_t mpi_alltoallv;
+ MPIDI_SHM_mpi_alltoallw_t mpi_alltoallw;
+ MPIDI_SHM_mpi_reduce_t mpi_reduce;
+ MPIDI_SHM_mpi_reduce_scatter_t mpi_reduce_scatter;
+ MPIDI_SHM_mpi_reduce_scatter_block_t mpi_reduce_scatter_block;
+ MPIDI_SHM_mpi_scan_t mpi_scan;
+ MPIDI_SHM_mpi_exscan_t mpi_exscan;
+ MPIDI_SHM_mpi_neighbor_allgather_t mpi_neighbor_allgather;
+ MPIDI_SHM_mpi_neighbor_allgatherv_t mpi_neighbor_allgatherv;
+ MPIDI_SHM_mpi_neighbor_alltoall_t mpi_neighbor_alltoall;
+ MPIDI_SHM_mpi_neighbor_alltoallv_t mpi_neighbor_alltoallv;
+ MPIDI_SHM_mpi_neighbor_alltoallw_t mpi_neighbor_alltoallw;
+ MPIDI_SHM_mpi_ineighbor_allgather_t mpi_ineighbor_allgather;
+ MPIDI_SHM_mpi_ineighbor_allgatherv_t mpi_ineighbor_allgatherv;
+ MPIDI_SHM_mpi_ineighbor_alltoall_t mpi_ineighbor_alltoall;
+ MPIDI_SHM_mpi_ineighbor_alltoallv_t mpi_ineighbor_alltoallv;
+ MPIDI_SHM_mpi_ineighbor_alltoallw_t mpi_ineighbor_alltoallw;
+ MPIDI_SHM_mpi_ibarrier_t mpi_ibarrier;
+ MPIDI_SHM_mpi_ibcast_t mpi_ibcast;
+ MPIDI_SHM_mpi_iallgather_t mpi_iallgather;
+ MPIDI_SHM_mpi_iallgatherv_t mpi_iallgatherv;
+ MPIDI_SHM_mpi_iallreduce_t mpi_iallreduce;
+ MPIDI_SHM_mpi_ialltoall_t mpi_ialltoall;
+ MPIDI_SHM_mpi_ialltoallv_t mpi_ialltoallv;
+ MPIDI_SHM_mpi_ialltoallw_t mpi_ialltoallw;
+ MPIDI_SHM_mpi_iexscan_t mpi_iexscan;
+ MPIDI_SHM_mpi_igather_t mpi_igather;
+ MPIDI_SHM_mpi_igatherv_t mpi_igatherv;
+ MPIDI_SHM_mpi_ireduce_scatter_block_t mpi_ireduce_scatter_block;
+ MPIDI_SHM_mpi_ireduce_scatter_t mpi_ireduce_scatter;
+ MPIDI_SHM_mpi_ireduce_t mpi_ireduce;
+ MPIDI_SHM_mpi_iscan_t mpi_iscan;
+ MPIDI_SHM_mpi_iscatter_t mpi_iscatter;
+ MPIDI_SHM_mpi_iscatterv_t mpi_iscatterv;
+} MPIDI_SHM_native_funcs_t;
+
+extern MPIDI_SHM_funcs_t *MPIDI_SHM_funcs[];
+extern MPIDI_SHM_funcs_t *MPIDI_SHM_func;
+extern MPIDI_SHM_native_funcs_t *MPIDI_SHM_native_funcs[];
+extern MPIDI_SHM_native_funcs_t *MPIDI_SHM_native_func;
+extern int MPIDI_num_shms;
+extern char MPIDI_SHM_strings[][MPIDI_MAX_SHM_STRING_LEN];
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_init_hook(int rank, int size) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_finalize_hook(void) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_progress(int blocking) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_connect(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm **
+ newcomm_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_disconnect(MPIR_Comm *
+ comm_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_open_port(MPIR_Info * info_ptr,
+ char *port_name) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_close_port(const char *port_name)
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_accept(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm **
+ newcomm_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_send_hdr(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ void *shm_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isend(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *shm_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_am(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype,
+ void *shm_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isendv(int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec *am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *shm_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_amv(int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec *am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype,
+ void *shm_context) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_send_hdr_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr,
+ size_t am_hdr_sz) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isend_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr,
+ size_t am_hdr_sz, const void *data,
+ MPI_Count count, MPI_Datatype datatype,
+ MPIR_Request * sreq) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_am_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr,
+ size_t am_hdr_sz, const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype)
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_amv_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, struct iovec *am_hdrs,
+ size_t iov_len, const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype)
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX size_t MPIDI_SHM_am_hdr_max_sz(void) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX size_t MPIDI_SHM_am_inject_max_sz(void) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_recv(MPIR_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_comm_get_lpid(MPIR_Comm * comm_ptr, int idx,
+ int *lpid_ptr,
+ MPL_bool is_remote) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_get_node_id(MPIR_Comm * comm, int rank,
+ MPID_Node_id_t * id_p) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_get_max_node_id(MPIR_Comm * comm,
+ MPID_Node_id_t *
+ max_id_p) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_upids_to_lupids(int size, size_t * remote_upid_size,
+ char *remote_upids,
+ int **remote_lupids)
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size,
+ const int lpids[])
+ MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_create_hook(MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_free_hook(MPIR_Comm *
+ comm) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_type_create_hook(MPIR_Datatype *
+ type) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_type_free_hook(MPIR_Datatype *
+ type) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_op_create_hook(MPIR_Op * op) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_op_free_hook(MPIR_Op * op) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX void MPIDI_SHM_am_request_init(MPIR_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX void MPIDI_SHM_am_request_finalize(MPIR_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_send(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ssend(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_startall(int count,
+ MPIR_Request *
+ requests[]) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_send_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ssend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_bsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_isend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_issend(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_cancel_send(MPIR_Request *
+ sreq) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_recv_init(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_recv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_irecv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_imrecv(void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request * message,
+ MPIR_Request ** rreqp) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_cancel_recv(MPIR_Request *
+ rreq) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX void *MPIDI_SHM_mpi_alloc_mem(size_t size,
+ MPIR_Info *
+ info_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_free_mem(void *ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_improbe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPIR_Request ** message,
+ MPI_Status * status) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iprobe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPI_Status * status) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_set_info(MPIR_Win * win,
+ MPIR_Info * info) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_shared_query(MPIR_Win * win, int rank,
+ MPI_Aint * size, int *disp_unit,
+ void *baseptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_put(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_start(MPIR_Group * group, int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_complete(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_post(MPIR_Group * group, int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_wait(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_test(MPIR_Win * win,
+ int *flag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_lock(int lock_type, int rank, int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_unlock(int rank,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_get_info(MPIR_Win * win,
+ MPIR_Info **
+ info_p_p) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_get(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_free(MPIR_Win ** win_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_fence(int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_create(void *base, MPI_Aint length, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_attach(MPIR_Win * win, void *base,
+ MPI_Aint size) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_allocate_shared(MPI_Aint size, int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr,
+ MPIR_Win **
+ win_ptr) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rput(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush_local(int rank,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_detach(MPIR_Win * win,
+ const void *base) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win *
+ win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_raccumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win,
+ MPIR_Request **
+ request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_fetch_and_op(const void *origin_addr, void *result_addr,
+ MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPI_Op op,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_allocate(MPI_Aint size, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm,
+ void *baseptr,
+ MPIR_Win ** win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush(int rank,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush_local_all(MPIR_Win *
+ win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_unlock_all(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win **
+ win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rget(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_sync(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush_all(MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_lock_all(int assert,
+ MPIR_Win * win) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_barrier(MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_scatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_gather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_gatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_alltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t *
+ errflag) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ibarrier(MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iallgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ialltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int *recvcounts, const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_igather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_igatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request *
+ req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr,
+ MPI_Request * req) MPL_STATIC_INLINE_SUFFIX;
+
+#endif /* SHM_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/include/shm_impl.h b/src/mpid/ch4/shm/include/shm_impl.h
new file mode 100644
index 0000000..825aebe
--- /dev/null
+++ b/src/mpid/ch4/shm/include/shm_impl.h
@@ -0,0 +1,2129 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+/* ch4 shm functions */
+#ifndef SHM_IMPL_H_INCLUDED
+#define SHM_IMPL_H_INCLUDED
+
+#ifndef SHM_DIRECT
+#ifndef SHM_DISABLE_INLINES
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_init_hook(int rank, int size)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INIT_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INIT_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_init(rank, size);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INIT_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_finalize_hook(void)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_FINALIZE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_FINALIZE_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_finalize();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_FINALIZE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_progress(int blocking)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS);
+
+ ret = MPIDI_SHM_func->progress(blocking);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_connect(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm ** newcomm_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+
+ ret = MPIDI_SHM_func->mpi_comm_connect(port_name, info, root, comm, newcomm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+
+ ret = MPIDI_SHM_func->mpi_comm_disconnect(comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+
+ ret = MPIDI_SHM_func->mpi_open_port(info_ptr, port_name);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_close_port(const char *port_name)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+
+ ret = MPIDI_SHM_func->mpi_close_port(port_name);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_accept(const char *port_name, MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm ** newcomm_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+
+ ret = MPIDI_SHM_func->mpi_comm_accept(port_name, info, root, comm, newcomm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_send_hdr(int rank, MPIR_Comm * comm,
+ int handler_id, const void *am_hdr,
+ size_t am_hdr_sz, void *shm_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+
+ ret = MPIDI_SHM_func->am_send_hdr(rank, comm, handler_id, am_hdr, am_hdr_sz, shm_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isend(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *shm_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND);
+
+ ret = MPIDI_SHM_func->am_isend(rank, comm, handler_id, am_hdr, am_hdr_sz, data, count,
+ datatype, sreq, shm_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_am(int rank, MPIR_Comm * comm, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, void *shm_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AM);
+
+ ret = MPIDI_SHM_func->inject_am(rank, comm, handler_id, am_hdr, am_hdr_sz, data, count,
+ datatype, shm_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AM);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isendv(int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec *am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq,
+ void *shm_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+
+ ret = MPIDI_SHM_func->am_isendv(rank, comm, handler_id, am_hdrs, iov_len, data, count,
+ datatype, sreq, shm_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_amv(int rank, MPIR_Comm * comm, int handler_id,
+ struct iovec *am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, void *shm_context)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+
+ ret = MPIDI_SHM_func->inject_amv(rank, comm, handler_id, am_hdrs, iov_len, data, count,
+ datatype, shm_context);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_send_hdr_reply(MPIR_Context_id_t context_id,
+ int src_rank, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+
+ ret = MPIDI_SHM_func->am_send_hdr_reply(context_id, src_rank, handler_id, am_hdr, am_hdr_sz);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_isend_reply(MPIR_Context_id_t context_id,
+ int src_rank, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+
+ ret = MPIDI_SHM_func->am_isend_reply(context_id, src_rank, handler_id, am_hdr, am_hdr_sz, data,
+ count, datatype, sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_am_reply(MPIR_Context_id_t context_id,
+ int src_rank, int handler_id,
+ const void *am_hdr, size_t am_hdr_sz,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+
+ ret = MPIDI_SHM_func->inject_am_reply(context_id, src_rank, handler_id, am_hdr, am_hdr_sz,
+ data, count, datatype);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_inject_amv_reply(MPIR_Context_id_t context_id,
+ int src_rank, int handler_id,
+ struct iovec *am_hdrs, size_t iov_len,
+ const void *data, MPI_Count count,
+ MPI_Datatype datatype)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+
+ ret = MPIDI_SHM_func->inject_amv_reply(context_id, src_rank, handler_id, am_hdrs, iov_len,
+ data, count, datatype);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX size_t MPIDI_SHM_am_hdr_max_sz(void)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+
+ ret = MPIDI_SHM_func->am_hdr_max_sz();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX size_t MPIDI_SHM_am_inject_max_sz(void)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+
+ ret = MPIDI_SHM_func->am_inject_max_sz();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_am_recv(MPIR_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_RECV);
+
+ ret = MPIDI_SHM_func->am_recv();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_RECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_comm_get_lpid(MPIR_Comm * comm_ptr, int idx,
+ int *lpid_ptr, MPL_bool is_remote)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_COMM_GET_LPID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_COMM_GET_LPID);
+
+ ret = MPIDI_SHM_func->comm_get_lpid(comm_ptr, idx, lpid_ptr, is_remote);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_COMM_GET_LPID);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_get_node_id(MPIR_Comm * comm, int rank,
+ MPID_Node_id_t * id_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_GET_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_GET_NODE_ID);
+
+ ret = MPIDI_SHM_func->get_node_id(comm, rank, id_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_GET_NODE_ID);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_get_max_node_id(MPIR_Comm * comm, MPID_Node_id_t * max_id_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_GET_MAX_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_GET_MAX_NODE_ID);
+
+ ret = MPIDI_SHM_func->get_max_node_id(comm, max_id_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_GET_MAX_NODE_ID);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_GET_LOCAL_UPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_GET_LOCAL_UPIDS);
+
+ ret = MPIDI_SHM_func->get_local_upids(comm, local_upid_size, local_upids);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_GET_LOCAL_UPIDS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_upids_to_lupids(int size, size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_UPIDS_TO_LUPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_UPIDS_TO_LUPIDS);
+
+ ret = MPIDI_SHM_func->upids_to_lupids(size, remote_upid_size, remote_upids, remote_lupids);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_UPIDS_TO_LUPIDS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_CREATE_INTERCOMM_FROM_LPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_CREATE_INTERCOMM_FROM_LPIDS);
+
+ ret = MPIDI_SHM_func->create_intercomm_from_lpids(newcomm_ptr, size, lpids);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_CREATE_INTERCOMM_FROM_LPIDS);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_comm_create_hook(comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_comm_free_hook(comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_type_create_hook(MPIR_Datatype * type)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_TYPE_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_TYPE_CREATE_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_type_create_hook(type);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_TYPE_CREATE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_type_free_hook(MPIR_Datatype * type)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_TYPE_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_TYPE_FREE_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_type_free_hook(type);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_TYPE_FREE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_op_create_hook(MPIR_Op * op)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_OP_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_OP_CREATE_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_op_create_hook(op);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_OP_CREATE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_op_free_hook(MPIR_Op * op)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_OP_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_OP_FREE_HOOK);
+
+ ret = MPIDI_SHM_func->mpi_op_free_hook(op);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_OP_FREE_HOOK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_SHM_am_request_init(MPIR_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+
+ ret = MPIDI_SHM_func->am_request_init(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_SHM_am_request_finalize(MPIR_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+
+ ret = MPIDI_SHM_func->am_request_finalize(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_send(const void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SEND);
+
+ ret = MPIDI_SHM_native_func->mpi_send(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ssend(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+
+ ret = MPIDI_SHM_native_func->mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+
+ ret = MPIDI_SHM_native_func->mpi_startall(count, requests);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_send_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+
+ ret = MPIDI_SHM_native_func->mpi_send_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ssend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+
+ ret = MPIDI_SHM_native_func->mpi_ssend_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+
+ ret = MPIDI_SHM_native_func->mpi_rsend_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_bsend_init(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+
+ ret = MPIDI_SHM_native_func->mpi_bsend_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_isend(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+
+ ret = MPIDI_SHM_native_func->mpi_isend(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_issend(const void *buf, int count,
+ MPI_Datatype datatype, int rank, int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+
+ ret = MPIDI_SHM_native_func->mpi_issend(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+
+ ret = MPIDI_SHM_native_func->mpi_cancel_send(sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_recv_init(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+
+ ret = MPIDI_SHM_native_func->mpi_recv_init(buf, count, datatype, rank, tag, comm,
+ context_offset, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_recv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RECV);
+
+ ret = MPIDI_SHM_native_func->mpi_recv(buf, count, datatype, rank, tag, comm, context_offset,
+ status, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_irecv(void *buf, int count, MPI_Datatype datatype,
+ int rank, int tag, MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+
+ ret = MPIDI_SHM_native_func->mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset,
+ request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_imrecv(void *buf, int count, MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+
+ ret = MPIDI_SHM_native_func->mpi_imrecv(buf, count, datatype, message, rreqp);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+
+ ret = MPIDI_SHM_native_func->mpi_cancel_recv(rreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void *MPIDI_SHM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLOC_MEM);
+
+ ret = MPIDI_SHM_native_func->mpi_alloc_mem(size, info_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLOC_MEM);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_free_mem(void *ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_FREE_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_FREE_MEM);
+
+ ret = MPIDI_SHM_native_func->mpi_free_mem(ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_FREE_MEM);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_improbe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPIR_Request ** message, MPI_Status * status)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+
+ ret = MPIDI_SHM_native_func->mpi_improbe(source, tag, comm, context_offset, flag, message,
+ status);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iprobe(int source, int tag, MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPI_Status * status)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+
+ ret = MPIDI_SHM_native_func->mpi_iprobe(source, tag, comm, context_offset, flag, status);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+
+ ret = MPIDI_SHM_native_func->mpi_win_set_info(win, info);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_shared_query(MPIR_Win * win, int rank,
+ MPI_Aint * size, int *disp_unit,
+ void *baseptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+
+ ret = MPIDI_SHM_native_func->mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_put(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_PUT);
+
+ ret = MPIDI_SHM_native_func->mpi_put(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_PUT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+
+ ret = MPIDI_SHM_native_func->mpi_win_start(group, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_complete(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+
+ ret = MPIDI_SHM_native_func->mpi_win_complete(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+
+ ret = MPIDI_SHM_native_func->mpi_win_post(group, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_wait(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+
+ ret = MPIDI_SHM_native_func->mpi_win_wait(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+
+ ret = MPIDI_SHM_native_func->mpi_win_test(win, flag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_lock(int lock_type, int rank, int assert,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+
+ ret = MPIDI_SHM_native_func->mpi_win_lock(lock_type, rank, assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+
+ ret = MPIDI_SHM_native_func->mpi_win_unlock(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+
+ ret = MPIDI_SHM_native_func->mpi_win_get_info(win, info_p_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_get(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GET);
+
+ ret = MPIDI_SHM_native_func->mpi_get(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GET);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+
+ ret = MPIDI_SHM_native_func->mpi_win_free(win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+
+ ret = MPIDI_SHM_native_func->mpi_win_fence(assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_create(void *base, MPI_Aint length, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+
+ ret = MPIDI_SHM_native_func->mpi_win_create(base, length, disp_unit, info, comm_ptr, win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+
+ ret = MPIDI_SHM_native_func->mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+
+ ret = MPIDI_SHM_native_func->mpi_win_attach(win, base, size);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_allocate_shared(MPI_Aint size, int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+
+ ret = MPIDI_SHM_native_func->mpi_win_allocate_shared(size, disp_unit, info_ptr, comm_ptr,
+ base_ptr, win_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rput(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+
+ ret = MPIDI_SHM_native_func->mpi_rput(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+
+ ret = MPIDI_SHM_native_func->mpi_win_flush_local(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+
+ ret = MPIDI_SHM_native_func->mpi_win_detach(win, base);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+
+ ret = MPIDI_SHM_native_func->mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_raccumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+
+ ret = MPIDI_SHM_native_func->mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+
+ ret = MPIDI_SHM_native_func->mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr, MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPI_Op op, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+
+ ret = MPIDI_SHM_native_func->mpi_fetch_and_op(origin_addr, result_addr, datatype, target_rank,
+ target_disp, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_allocate(MPI_Aint size, int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm,
+ void *baseptr, MPIR_Win ** win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+
+ ret = MPIDI_SHM_native_func->mpi_win_allocate(size, disp_unit, info, comm, baseptr, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+
+ ret = MPIDI_SHM_native_func->mpi_win_flush(rank, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+
+ ret = MPIDI_SHM_native_func->mpi_win_flush_local_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+
+ ret = MPIDI_SHM_native_func->mpi_win_unlock_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+
+ ret = MPIDI_SHM_native_func->mpi_win_create_dynamic(info, comm, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_rget(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RGET);
+
+ ret = MPIDI_SHM_native_func->mpi_rget(origin_addr, origin_count, origin_datatype, target_rank,
+ target_disp, target_count, target_datatype, win, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RGET);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_sync(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+
+ ret = MPIDI_SHM_native_func->mpi_win_sync(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_flush_all(MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+
+ ret = MPIDI_SHM_native_func->mpi_win_flush_all(win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr, int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank, MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+
+ ret = MPIDI_SHM_native_func->mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+
+ ret = MPIDI_SHM_native_func->mpi_win_lock_all(assert, win);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_barrier(MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+
+ ret = MPIDI_SHM_native_func->mpi_barrier(comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+
+ ret = MPIDI_SHM_native_func->mpi_bcast(buffer, count, datatype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_allreduce(const void *sendbuf, void *recvbuf,
+ int count, MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+
+ ret = MPIDI_SHM_native_func->mpi_allreduce(sendbuf, recvbuf, count, datatype, op, comm,
+ errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+
+ ret = MPIDI_SHM_native_func->mpi_allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+
+ ret = MPIDI_SHM_native_func->mpi_allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_scatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+
+ ret = MPIDI_SHM_native_func->mpi_scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+
+ ret = MPIDI_SHM_native_func->mpi_scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_gather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+
+ ret = MPIDI_SHM_native_func->mpi_gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_gatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+
+ ret = MPIDI_SHM_native_func->mpi_gatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+
+ ret = MPIDI_SHM_native_func->mpi_alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+
+ ret = MPIDI_SHM_native_func->mpi_alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
+ recvcounts, rdispls, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_alltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+
+ ret = MPIDI_SHM_native_func->mpi_alltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf,
+ recvcounts, rdispls, recvtypes, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+
+ ret = MPIDI_SHM_native_func->mpi_reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr,
+ errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+
+ ret = MPIDI_SHM_native_func->mpi_reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_reduce_scatter_block(const void *sendbuf,
+ void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+
+ ret = MPIDI_SHM_native_func->mpi_reduce_scatter_block(sendbuf, recvbuf, recvcount, datatype,
+ op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+
+ ret = MPIDI_SHM_native_func->mpi_scan(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+
+ ret = MPIDI_SHM_native_func->mpi_exscan(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+
+ ret = MPIDI_SHM_native_func->mpi_neighbor_allgather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+
+ ret = MPIDI_SHM_native_func->mpi_neighbor_allgatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm,
+ errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+
+ ret = MPIDI_SHM_native_func->mpi_neighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf,
+ const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+
+ ret = MPIDI_SHM_native_func->mpi_neighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+
+ ret = MPIDI_SHM_native_func->mpi_neighbor_alltoall(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+
+ ret = MPIDI_SHM_native_func->mpi_ineighbor_allgather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_allgatherv(const void *sendbuf,
+ int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+
+ ret = MPIDI_SHM_native_func->mpi_ineighbor_allgatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+
+ ret = MPIDI_SHM_native_func->mpi_ineighbor_alltoall(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_alltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *sdispls,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *rdispls,
+ MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+
+ ret = MPIDI_SHM_native_func->mpi_ineighbor_alltoallv(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ineighbor_alltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf,
+ const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+
+ ret = MPIDI_SHM_native_func->mpi_ineighbor_alltoallw(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ibarrier(MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+
+ ret = MPIDI_SHM_native_func->mpi_ibarrier(comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+
+ ret = MPIDI_SHM_native_func->mpi_ibcast(buffer, count, datatype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iallgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+
+ ret = MPIDI_SHM_native_func->mpi_iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+
+ ret = MPIDI_SHM_native_func->mpi_iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iallreduce(const void *sendbuf, void *recvbuf,
+ int count, MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+
+ ret = MPIDI_SHM_native_func->mpi_iallreduce(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ialltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+
+ ret = MPIDI_SHM_native_func->mpi_ialltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+
+ ret = MPIDI_SHM_native_func->mpi_ialltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf,
+ recvcounts, rdispls, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls,
+ const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls,
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+
+ ret = MPIDI_SHM_native_func->mpi_ialltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf,
+ recvcounts, rdispls, recvtypes, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+
+ ret = MPIDI_SHM_native_func->mpi_iexscan(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_igather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+
+ ret = MPIDI_SHM_native_func->mpi_igather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_igatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+
+ ret = MPIDI_SHM_native_func->mpi_igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts,
+ displs, recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ireduce_scatter_block(const void *sendbuf,
+ void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ ret = MPIDI_SHM_native_func->mpi_ireduce_scatter_block(sendbuf, recvbuf, recvcount, datatype,
+ op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+
+ ret = MPIDI_SHM_native_func->mpi_ireduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+
+ ret = MPIDI_SHM_native_func->mpi_ireduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr,
+ req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+
+ ret = MPIDI_SHM_native_func->mpi_iscan(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+
+ ret = MPIDI_SHM_native_func->mpi_iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_SHM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+
+ ret = MPIDI_SHM_native_func->mpi_iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+ return ret;
+}
+
+#endif /* SHM_DISABLE_INLINES */
+
+#else
+
+#define __shm_direct_stubshm__ 0
+#define __shm_direct_posix__ 1
+
+#if SHM_DIRECT==__shm_direct_stubshm__
+#include "../stubshm/shm_direct.h"
+#elif SHM_DIRECT==__shm_direct_posix__
+#include "../posix/shm_direct.h"
+#else
+#error "No direct shm included"
+#endif
+
+
+#endif /* SHM_DIRECT */
+
+#endif /* SHM_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/Makefile.mk b/src/mpid/ch4/shm/posix/Makefile.mk
new file mode 100644
index 0000000..2a0fcb3
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/Makefile.mk
@@ -0,0 +1,38 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+
+if BUILD_SHM_POSIX
+
+noinst_HEADERS += src/mpid/ch4/shm/posix/posix_am.h \
+ src/mpid/ch4/shm/posix/posix_coll.h \
+ src/mpid/ch4/shm/posix/posix_datatypes.h \
+ src/mpid/ch4/shm/posix/shm_direct.h \
+ src/mpid/ch4/shm/posix/posix_init.h \
+ src/mpid/ch4/shm/posix/posix_progress.h \
+ src/mpid/ch4/shm/posix/posix_recv.h \
+ src/mpid/ch4/shm/posix/posix_rma.h \
+ src/mpid/ch4/shm/posix/posix_spawn.h \
+ src/mpid/ch4/shm/posix/posix_win.h \
+ src/mpid/ch4/shm/posix/posix_comm.h \
+ src/mpid/ch4/shm/posix/posix_defs.h \
+ src/mpid/ch4/shm/posix/posix_impl.h \
+ src/mpid/ch4/shm/posix/posix_probe.h \
+ src/mpid/ch4/shm/posix/posix_queue.h \
+ src/mpid/ch4/shm/posix/posix_request.h \
+ src/mpid/ch4/shm/posix/posix_send.h \
+ src/mpid/ch4/shm/posix/posix_unimpl.h
+
+mpi_core_sources += src/mpid/ch4/shm/posix/globals.c \
+ src/mpid/ch4/shm/posix/func_table.c \
+ src/mpid/ch4/shm/posix/barrier.c
+
+endif
diff --git a/src/mpid/ch4/shm/posix/barrier.c b/src/mpid/ch4/shm/posix/barrier.c
new file mode 100644
index 0000000..151a50b
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/barrier.c
@@ -0,0 +1,42 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include <mpidimpl.h>
+#include "posix_impl.h"
+
+/* ------------------------------------------------------- */
+/* from mpid/ch3/channels/nemesis/src/ch3i_comm.c */
+/* ------------------------------------------------------- */
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_POSIX_barrier_vars_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDI_POSIX_barrier_vars_init(MPIDI_POSIX_barrier_vars_t * barrier_region)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_POSIX_BARRIER_VARS_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_POSIX_BARRIER_VARS_INIT);
+
+ if (MPIDI_POSIX_mem_region.local_rank == 0)
+ for (i = 0; i < MPIDI_POSIX_NUM_BARRIER_VARS; ++i) {
+ OPA_store_int(&barrier_region[i].context_id, -1);
+ OPA_store_int(&barrier_region[i].usage_cnt, 0);
+ OPA_store_int(&barrier_region[i].cnt, 0);
+ OPA_store_int(&barrier_region[i].sig0, 0);
+ OPA_store_int(&barrier_region[i].sig, 0);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_POSIX_BARRIER_VARS_INIT);
+ return mpi_errno;
+}
diff --git a/src/mpid/ch4/shm/posix/func_table.c b/src/mpid/ch4/shm/posix/func_table.c
new file mode 100644
index 0000000..bb48b78
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/func_table.c
@@ -0,0 +1,155 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifndef SHM_DIRECT
+#define SHM_DISABLE_INLINES
+#include <mpidimpl.h>
+#include "shm_direct.h"
+MPIDI_SHM_funcs_t MPIDI_SHM_posix_funcs = {
+ MPIDI_SHM_mpi_init_hook,
+ MPIDI_SHM_mpi_finalize_hook,
+ MPIDI_SHM_progress,
+ MPIDI_SHM_mpi_comm_connect,
+ MPIDI_SHM_mpi_comm_disconnect,
+ MPIDI_SHM_mpi_open_port,
+ MPIDI_SHM_mpi_close_port,
+ MPIDI_SHM_mpi_comm_accept,
+ MPIDI_SHM_am_send_hdr,
+ MPIDI_SHM_am_isend,
+ MPIDI_SHM_inject_am,
+ MPIDI_SHM_am_isendv,
+ MPIDI_SHM_inject_amv,
+ MPIDI_SHM_am_send_hdr_reply,
+ MPIDI_SHM_am_isend_reply,
+ MPIDI_SHM_inject_am_reply,
+ MPIDI_SHM_inject_amv_reply,
+ MPIDI_SHM_am_hdr_max_sz,
+ MPIDI_SHM_am_inject_max_sz,
+ MPIDI_SHM_am_recv,
+ MPIDI_SHM_comm_get_lpid,
+ MPIDI_SHM_get_node_id,
+ MPIDI_SHM_get_max_node_id,
+ MPIDI_SHM_get_local_upids,
+ MPIDI_SHM_upids_to_lupids,
+ MPIDI_SHM_create_intercomm_from_lpids,
+ MPIDI_SHM_mpi_comm_create_hook,
+ MPIDI_SHM_mpi_comm_free_hook,
+ MPIDI_SHM_mpi_type_create_hook,
+ MPIDI_SHM_mpi_type_free_hook,
+ MPIDI_SHM_mpi_op_create_hook,
+ MPIDI_SHM_mpi_op_free_hook,
+ MPIDI_SHM_am_request_init,
+};
+
+MPIDI_SHM_native_funcs_t MPIDI_SHM_native_posix_funcs = {
+ MPIDI_SHM_mpi_send,
+ MPIDI_SHM_mpi_ssend,
+ MPIDI_SHM_mpi_startall,
+ MPIDI_SHM_mpi_send_init,
+ MPIDI_SHM_mpi_ssend_init,
+ MPIDI_SHM_mpi_rsend_init,
+ MPIDI_SHM_mpi_bsend_init,
+ MPIDI_SHM_mpi_isend,
+ MPIDI_SHM_mpi_issend,
+ MPIDI_SHM_mpi_cancel_send,
+ MPIDI_SHM_mpi_recv_init,
+ MPIDI_SHM_mpi_recv,
+ MPIDI_SHM_mpi_irecv,
+ MPIDI_SHM_mpi_imrecv,
+ MPIDI_SHM_mpi_cancel_recv,
+ MPIDI_SHM_mpi_alloc_mem,
+ MPIDI_SHM_mpi_free_mem,
+ MPIDI_SHM_mpi_improbe,
+ MPIDI_SHM_mpi_iprobe,
+ MPIDI_SHM_mpi_win_set_info,
+ MPIDI_SHM_mpi_win_shared_query,
+ MPIDI_SHM_mpi_put,
+ MPIDI_SHM_mpi_win_start,
+ MPIDI_SHM_mpi_win_complete,
+ MPIDI_SHM_mpi_win_post,
+ MPIDI_SHM_mpi_win_wait,
+ MPIDI_SHM_mpi_win_test,
+ MPIDI_SHM_mpi_win_lock,
+ MPIDI_SHM_mpi_win_unlock,
+ MPIDI_SHM_mpi_win_get_info,
+ MPIDI_SHM_mpi_get,
+ MPIDI_SHM_mpi_win_free,
+ MPIDI_SHM_mpi_win_fence,
+ MPIDI_SHM_mpi_win_create,
+ MPIDI_SHM_mpi_accumulate,
+ MPIDI_SHM_mpi_win_attach,
+ MPIDI_SHM_mpi_win_allocate_shared,
+ MPIDI_SHM_mpi_rput,
+ MPIDI_SHM_mpi_win_flush_local,
+ MPIDI_SHM_mpi_win_detach,
+ MPIDI_SHM_mpi_compare_and_swap,
+ MPIDI_SHM_mpi_raccumulate,
+ MPIDI_SHM_mpi_rget_accumulate,
+ MPIDI_SHM_mpi_fetch_and_op,
+ MPIDI_SHM_mpi_win_allocate,
+ MPIDI_SHM_mpi_win_flush,
+ MPIDI_SHM_mpi_win_flush_local_all,
+ MPIDI_SHM_mpi_win_unlock_all,
+ MPIDI_SHM_mpi_win_create_dynamic,
+ MPIDI_SHM_mpi_rget,
+ MPIDI_SHM_mpi_win_sync,
+ MPIDI_SHM_mpi_win_flush_all,
+ MPIDI_SHM_mpi_get_accumulate,
+ MPIDI_SHM_mpi_win_lock_all,
+ MPIDI_SHM_mpi_barrier,
+ MPIDI_SHM_mpi_bcast,
+ MPIDI_SHM_mpi_allreduce,
+ MPIDI_SHM_mpi_allgather,
+ MPIDI_SHM_mpi_allgatherv,
+ MPIDI_SHM_mpi_scatter,
+ MPIDI_SHM_mpi_scatterv,
+ MPIDI_SHM_mpi_gather,
+ MPIDI_SHM_mpi_gatherv,
+ MPIDI_SHM_mpi_alltoall,
+ MPIDI_SHM_mpi_alltoallv,
+ MPIDI_SHM_mpi_alltoallw,
+ MPIDI_SHM_mpi_reduce,
+ MPIDI_SHM_mpi_reduce_scatter,
+ MPIDI_SHM_mpi_reduce_scatter_block,
+ MPIDI_SHM_mpi_scan,
+ MPIDI_SHM_mpi_exscan,
+ MPIDI_SHM_mpi_neighbor_allgather,
+ MPIDI_SHM_mpi_neighbor_allgatherv,
+ MPIDI_SHM_mpi_neighbor_alltoall,
+ MPIDI_SHM_mpi_neighbor_alltoallv,
+ MPIDI_SHM_mpi_neighbor_alltoallw,
+ MPIDI_SHM_mpi_ineighbor_allgather,
+ MPIDI_SHM_mpi_ineighbor_allgatherv,
+ MPIDI_SHM_mpi_ineighbor_alltoall,
+ MPIDI_SHM_mpi_ineighbor_alltoallv,
+ MPIDI_SHM_mpi_ineighbor_alltoallw,
+ MPIDI_SHM_mpi_ibarrier,
+ MPIDI_SHM_mpi_ibcast,
+ MPIDI_SHM_mpi_iallgather,
+ MPIDI_SHM_mpi_iallgatherv,
+ MPIDI_SHM_mpi_iallreduce,
+ MPIDI_SHM_mpi_ialltoall,
+ MPIDI_SHM_mpi_ialltoallv,
+ MPIDI_SHM_mpi_ialltoallw,
+ MPIDI_SHM_mpi_iexscan,
+ MPIDI_SHM_mpi_igather,
+ MPIDI_SHM_mpi_igatherv,
+ MPIDI_SHM_mpi_ireduce_scatter_block,
+ MPIDI_SHM_mpi_ireduce_scatter,
+ MPIDI_SHM_mpi_ireduce,
+ MPIDI_SHM_mpi_iscan,
+ MPIDI_SHM_mpi_iscatter,
+ MPIDI_SHM_mpi_iscatterv,
+};
+#endif
diff --git a/src/mpid/ch4/shm/posix/globals.c b/src/mpid/ch4/shm/posix/globals.c
new file mode 100644
index 0000000..84f538a
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/globals.c
@@ -0,0 +1,22 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include <mpidimpl.h>
+#include "posix_impl.h"
+
+MPIDI_POSIX_request_queue_t MPIDI_POSIX_sendq = { NULL, NULL };
+MPIDI_POSIX_request_queue_t MPIDI_POSIX_recvq_posted = { NULL, NULL };
+MPIDI_POSIX_request_queue_t MPIDI_POSIX_recvq_unexpected = { NULL, NULL };
+MPIDI_POSIX_mem_region_t MPIDI_POSIX_mem_region = { {0}
+};
+
+char *MPIDI_POSIX_asym_base_addr = 0;
+MPID_Thread_mutex_t MPID_shm_mutex;
diff --git a/src/mpid/ch4/shm/posix/posix_am.h b/src/mpid/ch4/shm/posix/posix_am.h
new file mode 100644
index 0000000..56e09e8
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_am.h
@@ -0,0 +1,193 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_AM_H_INCLUDED
+#define POSIX_AM_H_INCLUDED
+
+#include "posix_impl.h"
+
+static inline int MPIDI_SHM_am_isend(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_isendv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_isend_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline size_t MPIDI_SHM_am_hdr_max_sz(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_send_hdr(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_am(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AM);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AM);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_amv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_send_hdr_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_am_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_amv_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline size_t MPIDI_SHM_am_inject_max_sz(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+ return 0;
+}
+
+static inline int MPIDI_SHM_am_recv(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_RECV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_RECV);
+ return MPI_SUCCESS;
+}
+
+#endif /* POSIX_AM_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_coll.h b/src/mpid/ch4/shm/posix/posix_coll.h
new file mode 100644
index 0000000..641c30c
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_coll.h
@@ -0,0 +1,880 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_COLL_H_INCLUDED
+#define POSIX_COLL_H_INCLUDED
+
+#include "posix_impl.h"
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+
+ mpi_errno = MPIR_Barrier(comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+
+ mpi_errno = MPIR_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+
+ mpi_errno = MPIR_Allreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+
+ mpi_errno = MPIR_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+
+ mpi_errno = MPIR_Allgatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+
+ mpi_errno = MPIR_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+
+ mpi_errno = MPIR_Gatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+
+ mpi_errno = MPIR_Scatter(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+
+ mpi_errno = MPIR_Scatterv(sendbuf, sendcounts, displs,
+ sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+
+ mpi_errno = MPIR_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount,
+ recvtype, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+
+ mpi_errno = MPIR_Alltoallv(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_alltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+
+ mpi_errno = MPIR_Alltoallw(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, errflag);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+
+ mpi_errno = MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+
+ mpi_errno = MPIR_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Reduce_scatter_block(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+
+ mpi_errno = MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+
+ mpi_errno = MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+
+ mpi_errno =
+ MPIR_Neighbor_allgather_impl(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,
+ comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Neighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Neighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Neighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Neighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+
+ mpi_errno = MPIR_Ineighbor_allgather_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+
+ mpi_errno = MPIR_Ineighbor_allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+
+ mpi_errno = MPIR_Ineighbor_alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+
+ mpi_errno = MPIR_Ineighbor_alltoallv_impl(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[],
+ const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+
+ mpi_errno = MPIR_Ineighbor_alltoallw_impl(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ibarrier(MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+
+ mpi_errno = MPIR_Ibarrier_impl(comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+
+ mpi_errno = MPIR_Ibcast_impl(buffer, count, datatype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iallgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+
+ mpi_errno = MPIR_Iallgather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+
+ mpi_errno = MPIR_Iallgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+
+ mpi_errno = MPIR_Ialltoall_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+
+ mpi_errno = MPIR_Ialltoallv_impl(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts,
+ rdispls, recvtype, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+
+ mpi_errno = MPIR_Ialltoallw_impl(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts,
+ rdispls, recvtypes, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+
+ mpi_errno = MPIR_Iexscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+
+ mpi_errno = MPIR_Igather_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+
+ mpi_errno = MPIR_Igatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ mpi_errno = MPIR_Ireduce_scatter_block_impl(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+
+ mpi_errno = MPIR_Ireduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype, op,
+ comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+
+ mpi_errno = MPIR_Ireduce_impl(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+
+ mpi_errno = MPIR_Iallreduce_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+
+ mpi_errno = MPIR_Iscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+
+ mpi_errno = MPIR_Iscatter_impl(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+
+ mpi_errno = MPIR_Iscatterv_impl(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype, root, comm, request);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+ return mpi_errno;
+}
+
+#endif /* POSIX_COLL_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_comm.h b/src/mpid/ch4/shm/posix/posix_comm.h
new file mode 100644
index 0000000..710f54a
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_comm.h
@@ -0,0 +1,45 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_COMM_H_INCLUDED
+#define POSIX_COMM_H_INCLUDED
+
+#include "posix_impl.h"
+#include "mpl_utlist.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_comm_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_comm_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+ return mpi_errno;
+}
+
+
+#endif /* POSIX_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_datatypes.h b/src/mpid/ch4/shm/posix/posix_datatypes.h
new file mode 100644
index 0000000..34bcc44
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_datatypes.h
@@ -0,0 +1,185 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_DATATYPES_H_INCLUDED
+#define POSIX_DATATYPES_H_INCLUDED
+
+/* ************************************************************************** */
+/* from mpid/ch3/channels/nemesis/include/mpid_nem_datatypes.h */
+/* ************************************************************************** */
+
+#define MPIDI_POSIX_OFFSETOF(struc, field) ((int)(&((struc *)0)->field))
+#define MPIDI_POSIX_CACHE_LINE_LEN (64)
+#define MPIDI_POSIX_NUM_CELLS (64)
+#define MPIDI_POSIX_CELL_LEN (64*1024)
+
+#if (SIZEOF_OPA_PTR_T > 8)
+#if (SIZEOF_OPA_PTR_T > 16)
+#error unexpected size for OPA_ptr_t
+#endif
+#define MPIDI_POSIX_CELL_HEAD_LEN 16 /* We use this to keep elements 64-bit aligned */
+#else /* (SIZEOF_OPA_PTR_T <= 8) */
+#define MPIDI_POSIX_CELL_HEAD_LEN 8 /* We use this to keep elements 64-bit aligned */
+#endif
+
+/* cell header with matching info now is cache line */
+#define MPIDI_POSIX_CELL_PAYLOAD_LEN (MPIDI_POSIX_CELL_LEN - MPIDI_POSIX_CACHE_LINE_LEN + MPIDI_POSIX_MPICH_HEAD_LEN)
+
+#define MPIDI_POSIX_CALC_CELL_LEN(cellp) (MPIDI_POSIX_CELL_HEAD_LEN + MPIDI_POSIX_MPICH_HEAD_LEN + MPIDI_POSIX_CELL_DLEN (cell))
+
+#define MPIDI_POSIX_ALIGNED(addr, bytes) ((((unsigned long)addr) & (((unsigned long)bytes)-1)) == 0)
+
+#define MPIDI_POSIX_PKT_UNKNOWN 0
+#define MPIDI_POSIX_PKT_MPICH 1
+#define MPIDI_POSIX_PKT_MPICH_HEAD 2
+
+#define MPIDI_POSIX_FBOX_SOURCE(cell) (MPIDI_POSIX_mem_region.local_procs[(cell)->pkt.mpich.source])
+#define MPIDI_POSIX_CELL_SOURCE(cell) ((cell)->pkt.mpich.source)
+#define MPIDI_POSIX_CELL_DEST(cell) ((cell)->pkt.mpich.dest)
+#define MPIDI_POSIX_CELL_DLEN(cell) ((cell)->pkt.mpich.datalen)
+#define MPIDI_POSIX_CELL_SEQN(cell) ((cell)->pkt.mpich.seqno)
+
+#define MPIDI_POSIX_MPICH_HEAD_LEN sizeof(MPIDI_POSIX_pkt_header_t)
+#define MPIDI_POSIX_DATA_LEN (MPIDI_POSIX_CELL_PAYLOAD_LEN - MPIDI_POSIX_MPICH_HEAD_LEN)
+
+#define MPIDI_POSIX_PKT_HEADER_FIELDS \
+ int source; \
+ int dest; \
+ uintptr_t datalen; \
+ unsigned short seqno; \
+ unsigned short type; /* currently used only with checkpointing */
+
+typedef struct MPIDI_POSIX_pkt_header {
+ MPIDI_POSIX_PKT_HEADER_FIELDS;
+} MPIDI_POSIX_pkt_header_t;
+
+typedef struct MPIDI_POSIX_pkt_mpich {
+ MPIDI_POSIX_PKT_HEADER_FIELDS;
+ union {
+ char payload[MPIDI_POSIX_DATA_LEN];
+ double dummy; /* align paylod to double */
+ } p;
+} MPIDI_POSIX_pkt_mpich_t;
+
+typedef union {
+ MPIDI_POSIX_pkt_header_t header;
+ MPIDI_POSIX_pkt_mpich_t mpich;
+} MPIDI_POSIX_pkt_t;
+
+/* Nemesis cells which are to be used in shared memory need to use
+ * "relative pointers" because the absolute pointers to a cell from
+ * different processes may be different. Relative pointers are
+ * offsets from the beginning of the mmapped region where they live.
+ * We use different types for relative and absolute pointers to help
+ * catch errors. Use MPIDI_POSIX_REL_TO_ABS and MPIDI_POSIX_ABS_TO_REL to
+ * convert between relative and absolute pointers. */
+
+/* This should always be exactly the size of a pointer */
+typedef struct MPIDI_POSIX_cell_rel_ptr {
+ OPA_ptr_t p;
+} MPIDI_POSIX_cell_rel_ptr_t;
+
+/* MPIDI_POSIX_cell and MPIDI_POSIX_abs_cell must be kept in sync so that we
+ * can cast between them. MPIDI_POSIX_abs_cell should only be used when
+ * a cell is enqueued on a queue local to a single process (e.g., a
+ * queue in a network module) where relative pointers are not
+ * needed. */
+
+typedef struct MPIDI_POSIX_cell {
+ MPIDI_POSIX_cell_rel_ptr_t next;
+#if (MPIDI_POSIX_CELL_HEAD_LEN > SIZEOF_OPA_PTR_T)
+ char padding[MPIDI_POSIX_CELL_HEAD_LEN - sizeof(MPIDI_POSIX_cell_rel_ptr_t)];
+#endif
+ int my_rank;
+ int rank;
+ int tag;
+ int context_id;
+ MPIR_Request *pending;
+#if MPIDI_POSIX_CACHE_LINE_LEN != 0
+ char padding[MPIDI_POSIX_CACHE_LINE_LEN - MPIDI_POSIX_CELL_HEAD_LEN - MPIDI_POSIX_MPICH_HEAD_LEN - 4 * sizeof(int) - sizeof(MPIR_Request *)]; /* should be 64-16-16-16-8 = 8 */
+#endif
+ volatile MPIDI_POSIX_pkt_t pkt;
+} MPIDI_POSIX_cell_t;
+typedef MPIDI_POSIX_cell_t *MPIDI_POSIX_cell_ptr_t;
+
+typedef struct MPIDI_POSIX_abs_cell {
+ struct MPIDI_POSIX_abs_cell *next;
+#if (MPIDI_POSIX_CELL_HEAD_LEN > SIZEOF_VOID_P)
+ char padding[MPIDI_POSIX_CELL_HEAD_LEN - sizeof(struct MPIDI_POSIX_abs_cell *)];
+#endif
+ volatile MPIDI_POSIX_pkt_t pkt;
+} MPIDI_POSIX_abs_cell_t;
+typedef MPIDI_POSIX_abs_cell_t *MPIDI_POSIX_abs_cell_ptr_t;
+
+#define MPIDI_POSIX_CELL_TO_PACKET(cellp) (&(cellp)->pkt)
+#define MPIDI_POSIX_PACKET_TO_CELL(packetp) \
+ ((MPIDI_POSIX_cell_ptr_t) ((char*)(packetp) - (char *)MPIDI_POSIX_CELL_TO_PACKET((MPIDI_POSIX_cell_ptr_t)0)))
+#define MPIDI_POSIX_MIN_PACKET_LEN (sizeof (MPIDI_POSIX_pkt_header_t))
+#define MPIDI_POSIX_MAX_PACKET_LEN (sizeof (MPIDI_POSIX_pkt_t))
+#define MPIDI_POSIX_PACKET_LEN(pkt) ((pkt)->mpich.datalen + MPIDI_POSIX_MPICH_HEAD_LEN)
+
+#define MPIDI_POSIX_OPT_LOAD 16
+#define MPIDI_POSIX_OPT_SIZE ((sizeof(MPIDI_CH3_Pkt_t)) + (MPIDI_POSIX_OPT_LOAD))
+#define MPIDI_POSIX_OPT_HEAD_LEN ((MPIDI_POSIX_MPICH_HEAD_LEN) + (MPIDI_POSIX_OPT_SIZE))
+
+#define MPIDI_POSIX_PACKET_OPT_LEN(pkt) \
+ (((pkt)->mpich.datalen < MPIDI_POSIX_OPT_SIZE) ? (MPIDI_POSIX_OPT_HEAD_LEN) : (MPIDI_POSIX_PACKET_LEN(pkt)))
+
+#define MPIDI_POSIX_PACKET_PAYLOAD(pkt) ((pkt)->mpich.payload)
+
+typedef struct MPIDI_POSIX_queue {
+ MPIDI_POSIX_cell_rel_ptr_t head;
+ MPIDI_POSIX_cell_rel_ptr_t tail;
+#if (MPIDI_POSIX_CACHE_LINE_LEN > (2 * SIZEOF_OPA_PTR_T))
+ char padding1[MPIDI_POSIX_CACHE_LINE_LEN - 2 * sizeof(MPIDI_POSIX_cell_rel_ptr_t)];
+#endif
+ MPIDI_POSIX_cell_rel_ptr_t my_head;
+#if (MPIDI_POSIX_CACHE_LINE_LEN > SIZEOF_OPA_PTR_T)
+ char padding2[MPIDI_POSIX_CACHE_LINE_LEN - sizeof(MPIDI_POSIX_cell_rel_ptr_t)];
+#endif
+#ifndef MPIDI_POSIX_USE_LOCK_FREE_QUEUES
+ /* see FIXME in mpid_nem_queue.h */
+#define MPIDI_POSIX_queue_mutex_t MPID_Thread_mutex_t
+ MPIDI_POSIX_queue_mutex_t lock;
+ char padding3[MPIDI_POSIX_CACHE_LINE_LEN - sizeof(MPID_Thread_mutex_t)];
+#endif
+}
+MPIDI_POSIX_queue_t, *MPIDI_POSIX_queue_ptr_t;
+
+/* Fast Boxes*/
+typedef union {
+ OPA_int_t value;
+#if MPIDI_POSIX_CACHE_LINE_LEN != 0
+ char padding[MPIDI_POSIX_CACHE_LINE_LEN];
+#endif
+} MPIDI_POSIX_opt_volint_t;
+
+typedef struct MPIDI_POSIX_fbox_common {
+ MPIDI_POSIX_opt_volint_t flag;
+} MPIDI_POSIX_fbox_common_t, *MPIDI_POSIX_fbox_common_ptr_t;
+
+typedef struct MPIDI_POSIX_fbox_mpich {
+ MPIDI_POSIX_opt_volint_t flag;
+ MPIDI_POSIX_cell_t cell;
+} MPIDI_POSIX_fbox_mpich_t;
+
+#define MPIDI_POSIX_FBOX_DATALEN MPIDI_POSIX_DATA_LEN
+
+typedef union {
+ MPIDI_POSIX_fbox_common_t common;
+ MPIDI_POSIX_fbox_mpich_t mpich;
+} MPIDI_POSIX_fastbox_t;
+
+typedef struct MPIDI_POSIX_fbox_arrays {
+ MPIDI_POSIX_fastbox_t **in;
+ MPIDI_POSIX_fastbox_t **out;
+} MPIDI_POSIX_fbox_arrays_t;
+
+#endif /* POSIX_DATATYPES_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_defs.h b/src/mpid/ch4/shm/posix/posix_defs.h
new file mode 100644
index 0000000..30f51a1
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_defs.h
@@ -0,0 +1,115 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_DEFS_H_INCLUDED
+#define POSIX_DEFS_H_INCLUDED
+
+/* ************************************************************************** */
+/* from mpid/ch3/channels/nemesis/include/mpid_nem_defs.h */
+/* ************************************************************************** */
+
+#include "mpidu_shm.h"
+#define MPIDI_POSIX_MAX_FNAME_LEN 256
+
+/* FIXME: This definition should be gotten from mpidi_ch3_impl.h */
+#ifndef MPIDI_POSIX_MAX_HOSTNAME_LEN
+#define MPIDI_POSIX_MAX_HOSTNAME_LEN 256
+#endif /* MPIDI_POSIX_MAX_HOSTNAME_LEN */
+
+extern char MPIDI_POSIX_hostname[MPIDI_POSIX_MAX_HOSTNAME_LEN];
+
+#define MPIDI_POSIX_RET_OK 1
+#define MPIDI_POSIX_RET_NG -1
+#define MPIDI_POSIX_KEY 632236
+#define MPIDI_POSIX_ANY_SOURCE -1
+#define MPIDI_POSIX_IN 1
+#define MPIDI_POSIX_OUT 0
+
+#define MPIDI_POSIX_POLL_IN 0
+#define MPIDI_POSIX_POLL_OUT 1
+
+#define MPIDI_POSIX_ASYMM_NULL_VAL 64
+typedef MPI_Aint MPIDI_POSIX_addr_t;
+extern char *MPIDI_POSIX_asym_base_addr;
+
+#define MPIDI_POSIX_REL_NULL (0x0)
+#define MPIDI_POSIX_IS_REL_NULL(rel_ptr) (OPA_load_ptr(&(rel_ptr).p) == MPIDI_POSIX_REL_NULL)
+#define MPIDI_POSIX_SET_REL_NULL(rel_ptr) (OPA_store_ptr(&((rel_ptr).p), MPIDI_POSIX_REL_NULL))
+#define MPIDI_POSIX_REL_ARE_EQUAL(rel_ptr1, rel_ptr2) \
+ (OPA_load_ptr(&(rel_ptr1).p) == OPA_load_ptr(&(rel_ptr2).p))
+
+#ifndef MPIDI_POSIX_SYMMETRIC_QUEUES
+
+static inline MPIDI_POSIX_cell_ptr_t MPIDI_POSIX_REL_TO_ABS(MPIDI_POSIX_cell_rel_ptr_t r)
+{
+ return (MPIDI_POSIX_cell_ptr_t) ((char *) OPA_load_ptr(&r.p) +
+ (MPIDI_POSIX_addr_t) MPIDI_POSIX_asym_base_addr);
+}
+
+static inline MPIDI_POSIX_cell_rel_ptr_t MPIDI_POSIX_ABS_TO_REL(MPIDI_POSIX_cell_ptr_t a)
+{
+ MPIDI_POSIX_cell_rel_ptr_t ret;
+ OPA_store_ptr(&ret.p, (char *) a - (MPIDI_POSIX_addr_t) MPIDI_POSIX_asym_base_addr);
+ return ret;
+}
+
+#else /*MPIDI_POSIX_SYMMETRIC_QUEUES */
+#define MPIDI_POSIX_REL_TO_ABS(ptr) (ptr)
+#define MPIDI_POSIX_ABS_TO_REL(ptr) (ptr)
+#endif /*MPIDI_POSIX_SYMMETRIC_QUEUES */
+
+/* NOTE: MPIDI_POSIX_IS_LOCAL should only be used when the process is known to be
+ in your comm_world (such as at init time). This will generally not work for
+ dynamic processes. Check vc_ch->is_local instead. If that is true, then
+ it's safe to use MPIDI_POSIX_LOCAL_RANK. */
+#define MPIDI_POSIX_NON_LOCAL -1
+#define MPIDI_POSIX_IS_LOCAL(grank) (MPIDI_POSIX_mem_region.local_ranks[grank] != MPIDI_POSIX_NON_LOCAL)
+#define MPIDI_POSIX_LOCAL_RANK(grank) (MPIDI_POSIX_mem_region.local_ranks[grank])
+#define MPIDI_POSIX_NUM_BARRIER_VARS 16
+#define MPIDI_POSIX_SHM_MUTEX MPID_shm_mutex
+typedef struct MPIDI_POSIX_barrier_vars {
+ OPA_int_t context_id;
+ OPA_int_t usage_cnt;
+ OPA_int_t cnt;
+#if MPIDI_POSIX_CACHE_LINE_LEN != SIZEOF_INT
+ char padding0[MPIDI_POSIX_CACHE_LINE_LEN - sizeof(int)];
+#endif
+ OPA_int_t sig0;
+ OPA_int_t sig;
+ char padding1[MPIDI_POSIX_CACHE_LINE_LEN - 2 * sizeof(int)];
+} MPIDI_POSIX_barrier_vars_t;
+
+typedef struct MPIDI_POSIX_mem_region {
+ MPIDU_shm_seg_t memory;
+ MPIDU_shm_seg_info_t *seg;
+ int num_seg;
+ int map_lock;
+ int num_local;
+ int num_procs;
+ int *local_procs; /* local_procs[lrank] gives the global rank of proc with local rank lrank */
+ int local_rank;
+ int *local_ranks; /* local_ranks[grank] gives the local rank of proc with global rank grank or MPIDI_POSIX_NON_LOCAL */
+ int ext_procs; /* Number of non-local processes */
+ int *ext_ranks; /* Ranks of non-local processes */
+ MPIDI_POSIX_fbox_arrays_t mailboxes;
+ MPIDI_POSIX_cell_ptr_t Elements;
+ MPIDI_POSIX_queue_ptr_t *FreeQ;
+ MPIDI_POSIX_queue_ptr_t *RecvQ;
+ MPIDU_shm_barrier_t *barrier;
+ MPIDI_POSIX_queue_ptr_t my_freeQ;
+ MPIDI_POSIX_queue_ptr_t my_recvQ;
+ MPIDI_POSIX_barrier_vars_t *barrier_vars;
+ int rank;
+ struct MPIDI_POSIX_mem_region *next;
+} MPIDI_POSIX_mem_region_t, *MPIDI_POSIX_mem_region_ptr_t;
+extern MPIDI_POSIX_mem_region_t MPIDI_POSIX_mem_region;
+extern MPID_Thread_mutex_t MPID_shm_mutex;
+
+#endif /* POSIX_DEFS_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_impl.h b/src/mpid/ch4/shm/posix/posix_impl.h
new file mode 100644
index 0000000..295d731
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_impl.h
@@ -0,0 +1,174 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_IMPL_H_INCLUDED
+#define POSIX_IMPL_H_INCLUDED
+
+#include <mpidimpl.h>
+#include "mpidch4r.h"
+
+#include "pmi.h"
+
+#include "mpidu_shm.h"
+
+/* ---------------------------------------------------- */
+/* temp headers */
+/* ---------------------------------------------------- */
+#include "posix_datatypes.h" /* MPID_nem datatypes like cell, fastbox defined here */
+#include "posix_defs.h" /* MPID_nem objects like shared memory region defined here */
+#include "posix_queue.h" /* MPIDI_POSIX_queue functions defined here */
+
+/* ---------------------------------------------------- */
+/* constants */
+/* ---------------------------------------------------- */
+#define MPIDI_POSIX_EAGER_THRESHOLD MPIDI_POSIX_DATA_LEN
+#define MPIDI_POSIX_TYPESTANDARD 0
+#define MPIDI_POSIX_TYPEEAGER 1
+#define MPIDI_POSIX_TYPELMT 2
+#define MPIDI_POSIX_TYPESYNC 3
+#define MPIDI_POSIX_TYPEBUFFERED 4
+#define MPIDI_POSIX_TYPEREADY 5
+#define MPIDI_POSIX_TYPEACK 6
+#define MPIDI_POSIX_REQUEST(req) (&(req)->dev.ch4.shm.posix)
+
+/* ---------------------------------------------------- */
+/* shm specific object data */
+/* ---------------------------------------------------- */
+/* VCR Table Data */
+typedef struct {
+ unsigned int avt_rank;
+} MPIDI_POSIX_vcr_t;
+
+struct MPIDI_POSIX_vcrt_t {
+ MPIR_OBJECT_HEADER;
+ unsigned size; /**< Number of entries in the table */
+ MPIDI_POSIX_vcr_t vcr_table[0]; /**< Array of virtual connection references */
+};
+/* ---------------------------------------------------- */
+/* general send/recv queue types, macros and objects */
+/* ---------------------------------------------------- */
+typedef struct {
+ MPIR_Request *head;
+ MPIR_Request *tail;
+} MPIDI_POSIX_request_queue_t;
+
+#define MPIDI_POSIX_REQUEST_COMPLETE(req_) \
+{ \
+ int incomplete__; \
+ MPIR_cc_decr((req_)->cc_ptr, &incomplete__); \
+ dtype_release_if_not_builtin(MPIDI_POSIX_REQUEST(req_)->datatype); \
+ if (!incomplete__) \
+ MPIR_Request_free(req_); \
+}
+
+#define MPIDI_POSIX_REQUEST_ENQUEUE(req,queue) \
+{ \
+ if ((queue).tail != NULL) \
+ MPIDI_POSIX_REQUEST((queue).tail)->next = req; \
+ else \
+ (queue).head = req; \
+ (queue).tail = req; \
+}
+
+#define MPIDI_POSIX_REQUEST_DEQUEUE(req_p,prev_req,queue) \
+{ \
+ MPIR_Request *next = MPIDI_POSIX_REQUEST(*(req_p))->next; \
+ if ((queue).head == *(req_p)) \
+ (queue).head = next; \
+ else \
+ MPIDI_POSIX_REQUEST(prev_req)->next = next; \
+ if ((queue).tail == *(req_p)) \
+ (queue).tail = prev_req; \
+ MPIDI_POSIX_REQUEST(*(req_p))->next = NULL; \
+}
+
+#define MPIDI_POSIX_REQUEST_DEQUEUE_AND_SET_ERROR(req_p,prev_req,queue,err) \
+{ \
+ MPIR_Request *next = MPIDI_POSIX_REQUEST(*(req_p))->next; \
+ if ((queue).head == *(req_p)) \
+ (queue).head = next; \
+ else \
+ MPIDI_POSIX_REQUEST(prev_req)->next = next; \
+ if ((queue).tail == *(req_p)) \
+ (queue).tail = prev_req; \
+ (*(req_p))->status.MPI_ERROR = err; \
+ MPIDI_POSIX_REQUEST_COMPLETE(*(req_p)); \
+ *(req_p) = next; \
+}
+
+#define MPIDI_POSIX_REQUEST_CREATE_SREQ(sreq_) \
+{ \
+ (sreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__SEND); \
+ MPIR_Request_add_ref((sreq_)); \
+ (sreq_)->u.persist.real_request = NULL; \
+}
+
+#define MPIDI_POSIX_REQUEST_CREATE_RREQ(rreq_) \
+{ \
+ (rreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__RECV); \
+ MPIR_Request_add_ref((rreq_)); \
+ (rreq_)->u.persist.real_request = NULL; \
+}
+
+/* ---------------------------------------------------- */
+/* matching macros */
+/* ---------------------------------------------------- */
+#define MPIDI_POSIX_ENVELOPE_SET(ptr_,rank_,tag_,context_id_) \
+{ \
+ (ptr_)->rank = rank_; \
+ (ptr_)->tag = tag_; \
+ (ptr_)->context_id = context_id_; \
+}
+
+#define MPIDI_POSIX_ENVELOPE_GET(ptr_,rank_,tag_,context_id_) \
+{ \
+ rank_ = (ptr_)->rank; \
+ tag_ = (ptr_)->tag; \
+ context_id_ = (ptr_)->context_id; \
+}
+
+#define MPIDI_POSIX_ENVELOPE_MATCH(ptr_,rank_,tag_,context_id_) \
+ (((ptr_)->rank == (rank_) || (rank_) == MPI_ANY_SOURCE) && \
+ ((ptr_)->tag == (tag_) || (tag_) == MPI_ANY_TAG) && \
+ (ptr_)->context_id == (context_id_))
+
+/*
+ * Helper routines and macros for request completion
+ */
+#define DECL_FUNC(FUNCNAME) MPL_QUOTE(FUNCNAME)
+
+#undef FUNCNAME
+#define FUNCNAME nothing
+#define BEGIN_FUNC(FUNCNAME) \
+ MPIR_FUNC_VERBOSE_STATE_DECL(FUNCNAME); \
+ MPIR_FUNC_VERBOSE_ENTER(FUNCNAME);
+#define END_FUNC(FUNCNAME) \
+ MPIR_FUNC_VERBOSE_EXIT(FUNCNAME);
+#define END_FUNC_RC(FUNCNAME) \
+ fn_exit: \
+ MPIR_FUNC_VERBOSE_EXIT(FUNCNAME); \
+ return mpi_errno; \
+fn_fail: \
+ goto fn_exit;
+
+#define __SHORT_FILE__ \
+ (strrchr(__FILE__,'/') \
+ ? strrchr(__FILE__,'/')+1 \
+ : __FILE__ \
+)
+
+int MPIDI_POSIX_barrier_vars_init(MPIDI_POSIX_barrier_vars_t * barrier_region);
+extern MPIDI_POSIX_request_queue_t MPIDI_POSIX_sendq;
+extern MPIDI_POSIX_request_queue_t MPIDI_POSIX_recvq_unexpected;
+extern MPIDI_POSIX_request_queue_t MPIDI_POSIX_recvq_posted;
+
+
+
+#endif /* POSIX_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_init.h b/src/mpid/ch4/shm/posix/posix_init.h
new file mode 100644
index 0000000..20a0bc1
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_init.h
@@ -0,0 +1,376 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_INIT_H_INCLUDED
+#define POSIX_INIT_H_INCLUDED
+
+#include "posix_impl.h"
+#include "ch4_types.h"
+#include "mpidu_shm.h"
+
+/* ------------------------------------------------------- */
+/* from mpid/ch3/channels/nemesis/src/mpid_nem_init.c */
+/* ------------------------------------------------------- */
+extern MPIDI_POSIX_mem_region_t MPIDI_POSIX_mem_region;
+extern char *MPIDI_POSIX_asym_base_addr;
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_init_hook)
+static inline int MPIDI_SHM_mpi_init_hook(int rank, int size)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int num_local = 0;
+ int local_rank = -1;
+ int *local_procs = NULL;
+ int *local_ranks = NULL;
+ int i;
+ int grank;
+ MPIDI_POSIX_fastbox_t *fastboxes_p = NULL;
+ MPIDI_POSIX_cell_t(*cells_p)[MPIDI_POSIX_NUM_CELLS];
+ MPIDI_POSIX_queue_t *recv_queues_p = NULL;
+ MPIDI_POSIX_queue_t *free_queues_p = NULL;
+ MPIR_CHKPMEM_DECL(9);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INIT);
+
+ MPIDI_POSIX_mem_region.num_seg = 1;
+ MPIR_CHKPMEM_MALLOC(MPIDI_POSIX_mem_region.seg, MPIDU_shm_seg_info_ptr_t,
+ MPIDI_POSIX_mem_region.num_seg * sizeof(MPIDU_shm_seg_info_t), mpi_errno,
+ "mem_region segments");
+ MPIR_CHKPMEM_MALLOC(local_procs, int *, size * sizeof(int), mpi_errno,
+ "local process index array");
+ MPIR_CHKPMEM_MALLOC(local_ranks, int *, size * sizeof(int), mpi_errno,
+ "mem_region local ranks");
+
+ for (i = 0; i < size; i++) {
+ if (MPIDI_CH4_rank_is_local(i, MPIR_Process.comm_world)) {
+ if (i == rank) {
+ local_rank = num_local;
+ }
+
+ local_procs[num_local] = i;
+ local_ranks[i] = num_local;
+ num_local++;
+ }
+ }
+
+ MPIDI_POSIX_mem_region.rank = rank;
+ MPIDI_POSIX_mem_region.num_local = num_local;
+ MPIDI_POSIX_mem_region.num_procs = size;
+ MPIDI_POSIX_mem_region.local_procs = local_procs;
+ MPIDI_POSIX_mem_region.local_ranks = local_ranks;
+ MPIDI_POSIX_mem_region.local_rank = local_rank;
+ MPIDI_POSIX_mem_region.next = NULL;
+
+ /* Request fastboxes region */
+ mpi_errno =
+ MPIDU_shm_seg_alloc(MAX
+ ((num_local * ((num_local - 1) * sizeof(MPIDI_POSIX_fastbox_t))),
+ MPIDI_POSIX_ASYMM_NULL_VAL), (void **) &fastboxes_p);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Request data cells region */
+ mpi_errno =
+ MPIDU_shm_seg_alloc(num_local * MPIDI_POSIX_NUM_CELLS * sizeof(MPIDI_POSIX_cell_t),
+ (void **) &cells_p);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Request free q region */
+ mpi_errno =
+ MPIDU_shm_seg_alloc(num_local * sizeof(MPIDI_POSIX_queue_t), (void **) &free_queues_p);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Request recv q region */
+ mpi_errno =
+ MPIDU_shm_seg_alloc(num_local * sizeof(MPIDI_POSIX_queue_t), (void **) &recv_queues_p);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Request shared collectives barrier vars region */
+ mpi_errno =
+ MPIDU_shm_seg_alloc(MPIDI_POSIX_NUM_BARRIER_VARS * sizeof(MPIDI_POSIX_barrier_vars_t),
+ (void **) &MPIDI_POSIX_mem_region.barrier_vars);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Actually allocate the segment and assign regions to the pointers */
+ mpi_errno =
+ MPIDU_shm_seg_commit(&MPIDI_POSIX_mem_region.memory, &MPIDI_POSIX_mem_region.barrier,
+ num_local, local_rank, MPIDI_POSIX_mem_region.local_procs[0],
+ MPIDI_POSIX_mem_region.rank);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* post check_alloc steps */
+ if (MPIDI_POSIX_mem_region.memory.symmetrical == 1) {
+ MPIDI_POSIX_asym_base_addr = NULL;
+ }
+ else {
+ MPIDI_POSIX_asym_base_addr = MPIDI_POSIX_mem_region.memory.base_addr;
+#ifdef MPIDI_POSIX_SYMMETRIC_QUEUES
+ MPIR_ERR_INTERNALANDJUMP(mpi_errno, "queues are not symmetrically allocated as expected");
+#endif
+ }
+
+ /* init shared collectives barrier region */
+ mpi_errno = MPIDI_POSIX_barrier_vars_init(MPIDI_POSIX_mem_region.barrier_vars);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* local procs barrier */
+ mpi_errno = MPIDU_shm_barrier(MPIDI_POSIX_mem_region.barrier, num_local);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* find our cell region */
+ MPIDI_POSIX_mem_region.Elements = cells_p[local_rank];
+
+ /* Tables of pointers to shared memory Qs */
+ MPIR_CHKPMEM_MALLOC(MPIDI_POSIX_mem_region.FreeQ, MPIDI_POSIX_queue_ptr_t *,
+ size * sizeof(MPIDI_POSIX_queue_ptr_t), mpi_errno, "FreeQ");
+ MPIR_CHKPMEM_MALLOC(MPIDI_POSIX_mem_region.RecvQ, MPIDI_POSIX_queue_ptr_t *,
+ size * sizeof(MPIDI_POSIX_queue_ptr_t), mpi_errno, "RecvQ");
+
+ /* Init table entry for our Qs */
+ MPIDI_POSIX_mem_region.FreeQ[rank] = &free_queues_p[local_rank];
+ MPIDI_POSIX_mem_region.RecvQ[rank] = &recv_queues_p[local_rank];
+
+ /* Init our queues */
+ MPIDI_POSIX_queue_init(MPIDI_POSIX_mem_region.RecvQ[rank]);
+ MPIDI_POSIX_queue_init(MPIDI_POSIX_mem_region.FreeQ[rank]);
+
+ /* Init and enqueue our free cells */
+ for (i = 0; i < MPIDI_POSIX_NUM_CELLS; ++i) {
+ MPIDI_POSIX_cell_init(&(MPIDI_POSIX_mem_region.Elements[i]), rank);
+ MPIDI_POSIX_queue_enqueue(MPIDI_POSIX_mem_region.FreeQ[rank],
+ &(MPIDI_POSIX_mem_region.Elements[i]));
+ }
+
+ /* set route for local procs through shmem */
+ for (i = 0; i < num_local; i++) {
+ grank = local_procs[i];
+ MPIDI_POSIX_mem_region.FreeQ[grank] = &free_queues_p[i];
+ MPIDI_POSIX_mem_region.RecvQ[grank] = &recv_queues_p[i];
+
+ MPIR_Assert(MPIDI_POSIX_ALIGNED
+ (MPIDI_POSIX_mem_region.FreeQ[grank], MPIDI_POSIX_CACHE_LINE_LEN));
+ MPIR_Assert(MPIDI_POSIX_ALIGNED
+ (MPIDI_POSIX_mem_region.RecvQ[grank], MPIDI_POSIX_CACHE_LINE_LEN));
+ }
+
+ /* make pointers to our queues global so we don't have to dereference the array */
+ MPIDI_POSIX_mem_region.my_freeQ = MPIDI_POSIX_mem_region.FreeQ[rank];
+ MPIDI_POSIX_mem_region.my_recvQ = MPIDI_POSIX_mem_region.RecvQ[rank];
+
+ /* local barrier */
+ mpi_errno = MPIDU_shm_barrier(MPIDI_POSIX_mem_region.barrier, num_local);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Allocate table of pointers to fastboxes */
+ MPIR_CHKPMEM_MALLOC(MPIDI_POSIX_mem_region.mailboxes.in, MPIDI_POSIX_fastbox_t **,
+ num_local * sizeof(MPIDI_POSIX_fastbox_t *), mpi_errno, "fastboxes");
+ MPIR_CHKPMEM_MALLOC(MPIDI_POSIX_mem_region.mailboxes.out, MPIDI_POSIX_fastbox_t **,
+ num_local * sizeof(MPIDI_POSIX_fastbox_t *), mpi_errno, "fastboxes");
+
+ MPIR_Assert(num_local > 0);
+
+#define MPIDI_POSIX_MAILBOX_INDEX(sender, receiver) (((sender) > (receiver)) ? ((num_local-1) * (sender) + (receiver)) : \
+ (((sender) < (receiver)) ? ((num_local-1) * (sender) + ((receiver)-1)) : 0))
+
+ /* fill in tables */
+ for (i = 0; i < num_local; ++i) {
+ if (i == local_rank) {
+ /* No fastboxs to myself */
+ MPIDI_POSIX_mem_region.mailboxes.in[i] = NULL;
+ MPIDI_POSIX_mem_region.mailboxes.out[i] = NULL;
+ }
+ else {
+ MPIDI_POSIX_mem_region.mailboxes.in[i] =
+ &fastboxes_p[MPIDI_POSIX_MAILBOX_INDEX(i, local_rank)];
+ MPIDI_POSIX_mem_region.mailboxes.out[i] =
+ &fastboxes_p[MPIDI_POSIX_MAILBOX_INDEX(local_rank, i)];
+ OPA_store_int(&MPIDI_POSIX_mem_region.mailboxes.in[i]->common.flag.value, 0);
+ OPA_store_int(&MPIDI_POSIX_mem_region.mailboxes.out[i]->common.flag.value, 0);
+ }
+ }
+
+#undef MPIDI_POSIX_MAILBOX_INDEX
+
+ MPIR_CHKPMEM_COMMIT();
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INIT);
+ return mpi_errno;
+ fn_fail:
+ /* --BEGIN ERROR HANDLING-- */
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_finalize_hook)
+static inline int MPIDI_SHM_mpi_finalize_hook(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_FINALIZE);
+
+ /* local barrier */
+ mpi_errno = MPIDU_shm_barrier(MPIDI_POSIX_mem_region.barrier, MPIDI_POSIX_mem_region.num_local);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* from MPIDI_POSIX_init */
+ MPL_free(MPIDI_POSIX_mem_region.FreeQ);
+ MPL_free(MPIDI_POSIX_mem_region.RecvQ);
+ MPL_free(MPIDI_POSIX_mem_region.local_ranks);
+ MPL_free(MPIDI_POSIX_mem_region.seg);
+ MPL_free(MPIDI_POSIX_mem_region.mailboxes.out);
+ MPL_free(MPIDI_POSIX_mem_region.mailboxes.in);
+ MPL_free(MPIDI_POSIX_mem_region.local_procs);
+
+ mpi_errno =
+ MPIDU_shm_seg_destroy(&MPIDI_POSIX_mem_region.memory, MPIDI_POSIX_mem_region.num_local);
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_FINALIZE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline void *MPIDI_SHM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ MPIR_Assert(0);
+ return NULL;
+}
+
+static inline int MPIDI_SHM_mpi_free_mem(void *ptr)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_comm_get_lpid(MPIR_Comm * comm_ptr,
+ int idx, int *lpid_ptr, MPL_bool is_remote)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_get_node_id(MPIR_Comm * comm, int rank, MPID_Node_id_t * id_p)
+{
+ *id_p = (MPID_Node_id_t) 0;
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_get_max_node_id(MPIR_Comm * comm, MPID_Node_id_t * max_id_p)
+{
+ *max_id_p = (MPID_Node_id_t) 1;
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_upids_to_lupids(int size,
+ size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_type_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_type_create_hook(MPIR_Datatype * type)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SHM_TYPE_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SHM_TYPE_CREATE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SHM_TYPE_CREATE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_type_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_type_free_hook(MPIR_Datatype * type)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SHM_TYPE_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SHM_TYPE_FREE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SHM_TYPE_FREE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_op_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_op_create_hook(MPIR_Op * op)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SHM_OP_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SHM_OP_CREATE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SHM_OP_CREATE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_op_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_op_free_hook(MPIR_Op * op)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_SHM_OP_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_SHM_OP_FREE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_SHM_OP_FREE_HOOK);
+ return mpi_errno;
+}
+
+#endif /* POSIX_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_pre.h b/src/mpid/ch4/shm/posix/posix_pre.h
new file mode 100644
index 0000000..27b90c1
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_pre.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef POSIX_PRE_H_INCLUDED
+#define POSIX_PRE_H_INCLUDED
+
+#include <mpi.h>
+
+struct MPIR_Request;
+struct MPIDU_Segment;
+
+typedef struct {
+ struct MPIR_Request *next;
+ struct MPIR_Request *pending;
+ int dest;
+ int rank;
+ int tag;
+ int context_id;
+ char *user_buf;
+ size_t data_sz;
+ int type;
+ int user_count;
+ MPI_Datatype datatype;
+ struct MPIDU_Segment *segment_ptr;
+ size_t segment_first;
+ size_t segment_size;
+} MPIDI_POSIX_request_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_POSIX_comm_t;
+
+#endif /* POSIX_PRE_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_probe.h b/src/mpid/ch4/shm/posix/posix_probe.h
new file mode 100644
index 0000000..0f6436e
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_probe.h
@@ -0,0 +1,146 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_PROBE_H_INCLUDED
+#define POSIX_PROBE_H_INCLUDED
+
+#include "posix_impl.h"
+
+
+static inline int MPIDI_SHM_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req, *matched_req = NULL;
+ int count = 0;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ *message = NULL;
+
+ if (unlikely(source == MPI_PROC_NULL)) {
+ MPIR_Status_set_procnull(status);
+ *flag = true;
+ goto fn_exit;
+ }
+
+ for (req = MPIDI_POSIX_recvq_unexpected.head; req; req = MPIDI_POSIX_REQUEST(req)->next) {
+ if (MPIDI_POSIX_ENVELOPE_MATCH
+ (MPIDI_POSIX_REQUEST(req), source, tag, comm->recvcontext_id + context_offset)) {
+ if (!matched_req)
+ matched_req = req;
+
+ if (req && MPIDI_POSIX_REQUEST(req)->type == MPIDI_POSIX_TYPEEAGER) {
+ *message = matched_req;
+ break;
+ }
+ }
+ }
+
+ if (*message) {
+ MPIDI_POSIX_request_queue_t mqueue = { NULL, NULL };
+ MPIR_Request *prev_req = NULL, *next_req = NULL;
+ req = MPIDI_POSIX_recvq_unexpected.head;
+
+ while (req) {
+ next_req = MPIDI_POSIX_REQUEST(req)->next;
+
+ if (MPIDI_POSIX_ENVELOPE_MATCH
+ (MPIDI_POSIX_REQUEST(req), source, tag, comm->recvcontext_id + context_offset)) {
+ if (mqueue.head == NULL)
+ MPIR_Assert(req == matched_req);
+
+ count += MPIR_STATUS_GET_COUNT(req->status);
+ MPIDI_POSIX_REQUEST_DEQUEUE(&req, prev_req, MPIDI_POSIX_recvq_unexpected);
+ MPIDI_POSIX_REQUEST_ENQUEUE(req, mqueue);
+
+ if (req && MPIDI_POSIX_REQUEST(req)->type == MPIDI_POSIX_TYPEEAGER)
+ break;
+ }
+ else
+ prev_req = req;
+
+ req = next_req;
+ }
+
+ *flag = 1;
+ matched_req->kind = MPIR_REQUEST_KIND__MPROBE;
+ matched_req->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ status->MPI_TAG = matched_req->status.MPI_TAG;
+ status->MPI_SOURCE = matched_req->status.MPI_SOURCE;
+ MPIR_STATUS_SET_COUNT(*status, count);
+ }
+ else {
+ *flag = 0;
+ MPIDI_Progress_test();
+ }
+
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+ return mpi_errno;
+}
+
+static inline int MPIDI_SHM_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *req, *matched_req = NULL;
+ int count = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+
+ if (unlikely(source == MPI_PROC_NULL)) {
+ MPIR_Status_set_procnull(status);
+ *flag = true;
+ goto fn_exit;
+ }
+
+ for (req = MPIDI_POSIX_recvq_unexpected.head; req; req = MPIDI_POSIX_REQUEST(req)->next) {
+ if (MPIDI_POSIX_ENVELOPE_MATCH
+ (MPIDI_POSIX_REQUEST(req), source, tag, comm->recvcontext_id + context_offset)) {
+ count += MPIR_STATUS_GET_COUNT(req->status);
+
+ if (MPIDI_POSIX_REQUEST(req)->type == MPIDI_POSIX_TYPEEAGER) {
+ matched_req = req;
+ break;
+ }
+ }
+ }
+
+ if (matched_req) {
+ *flag = 1;
+ status->MPI_TAG = matched_req->status.MPI_TAG;
+ status->MPI_SOURCE = matched_req->status.MPI_SOURCE;
+ MPIR_STATUS_SET_COUNT(*status, count);
+ }
+ else {
+ *flag = 0;
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIDI_Progress_test();
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ }
+
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+ return mpi_errno;
+}
+
+#endif /* POSIX_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_progress.h b/src/mpid/ch4/shm/posix/posix_progress.h
new file mode 100644
index 0000000..a0e2db3
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_progress.h
@@ -0,0 +1,454 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_PROGRESS_H_INCLUDED
+#define POSIX_PROGRESS_H_INCLUDED
+
+#include "posix_impl.h"
+
+/* ----------------------------------------------------- */
+/* MPIDI_POSIX_progress_recv */
+/* ----------------------------------------------------- */
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_POSIX_progress_recv)
+static inline int MPIDI_POSIX_progress_recv(int blocking, int *completion_count)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t data_sz;
+ int in_cell = 0;
+ MPIDI_POSIX_cell_ptr_t cell = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_DO_PROGRESS_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_DO_PROGRESS_RECV);
+ /* try to match with unexpected */
+ MPIR_Request *sreq = MPIDI_POSIX_recvq_unexpected.head;
+ MPIR_Request *prev_sreq = NULL;
+ unexpected_l:
+
+ if (sreq != NULL) {
+ goto match_l;
+ }
+
+ /* try to receive from recvq */
+ if (MPIDI_POSIX_mem_region.my_recvQ &&
+ !MPIDI_POSIX_queue_empty(MPIDI_POSIX_mem_region.my_recvQ)) {
+ MPIDI_POSIX_queue_dequeue(MPIDI_POSIX_mem_region.my_recvQ, &cell);
+ in_cell = 1;
+ goto match_l;
+ }
+
+ goto fn_exit;
+ match_l:{
+ /* traverse posted receive queue */
+ MPIR_Request *req = MPIDI_POSIX_recvq_posted.head;
+ MPIR_Request *prev_req = NULL;
+ int continue_matching = 1;
+ char *send_buffer =
+ in_cell ? (char *) cell->pkt.mpich.p.payload : (char *) MPIDI_POSIX_REQUEST(sreq)->
+ user_buf;
+ int type = in_cell ? cell->pkt.mpich.type : MPIDI_POSIX_REQUEST(sreq)->type;
+ MPIR_Request *pending = in_cell ? cell->pending : MPIDI_POSIX_REQUEST(sreq)->pending;
+
+ if (type == MPIDI_POSIX_TYPEACK) {
+ /* ACK message doesn't have a matching receive! */
+ int c;
+ MPIR_Assert(in_cell);
+ MPIR_Assert(pending);
+ MPIR_cc_decr(pending->cc_ptr, &c);
+ MPIR_Request_free(pending);
+ goto release_cell_l;
+ }
+
+ while (req) {
+ int sender_rank, tag, context_id;
+ MPI_Count count;
+ MPIDI_POSIX_ENVELOPE_GET(MPIDI_POSIX_REQUEST(req), sender_rank, tag, context_id);
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL,
+ (MPL_DBG_FDEST, "Posted from grank %d to %d in progress %d,%d,%d\n",
+ MPIDI_CH4U_rank_to_lpid(sender_rank, req->comm),
+ MPIDI_POSIX_mem_region.rank, sender_rank, tag, context_id));
+
+ if ((in_cell && MPIDI_POSIX_ENVELOPE_MATCH(cell, sender_rank, tag, context_id)) ||
+ (sreq &&
+ MPIDI_POSIX_ENVELOPE_MATCH(MPIDI_POSIX_REQUEST(sreq), sender_rank, tag,
+ context_id))) {
+
+ /* Request matched */
+
+ continue_matching = 1;
+
+ if (MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req)) {
+ MPIDI_CH4R_anysource_matched(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req),
+ MPIDI_CH4R_SHM, &continue_matching);
+ MPIR_Request_free(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req));
+
+ /* Decouple requests */
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req))
+ = NULL;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(req) = NULL;
+
+ if (continue_matching)
+ break;
+ }
+
+ char *recv_buffer = (char *) MPIDI_POSIX_REQUEST(req)->user_buf;
+
+ if (pending) {
+ /* we must send ACK */
+ int srank = in_cell ? cell->rank : sreq->status.MPI_SOURCE;
+ MPIR_Request *req_ack = NULL;
+ MPIDI_POSIX_REQUEST_CREATE_SREQ(req_ack);
+ MPIR_Object_set_ref(req_ack, 1);
+ req_ack->comm = req->comm;
+ MPIR_Comm_add_ref(req->comm);
+
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(req_ack), req->comm->rank, tag,
+ context_id);
+ MPIDI_POSIX_REQUEST(req_ack)->user_buf = NULL;
+ MPIDI_POSIX_REQUEST(req_ack)->user_count = 0;
+ MPIDI_POSIX_REQUEST(req_ack)->datatype = MPI_BYTE;
+ MPIDI_POSIX_REQUEST(req_ack)->data_sz = 0;
+ MPIDI_POSIX_REQUEST(req_ack)->type = MPIDI_POSIX_TYPEACK;
+ MPIDI_POSIX_REQUEST(req_ack)->dest = srank;
+ MPIDI_POSIX_REQUEST(req_ack)->next = NULL;
+ MPIDI_POSIX_REQUEST(req_ack)->segment_ptr = NULL;
+ MPIDI_POSIX_REQUEST(req_ack)->pending = pending;
+ /* enqueue req_ack */
+ MPIDI_POSIX_REQUEST_ENQUEUE(req_ack, MPIDI_POSIX_sendq);
+ }
+
+ if (type == MPIDI_POSIX_TYPEEAGER)
+ /* eager message */
+ data_sz =
+ in_cell ? cell->pkt.mpich.datalen : MPIDI_POSIX_REQUEST(sreq)->data_sz;
+ else if (type == MPIDI_POSIX_TYPELMT)
+ data_sz = MPIDI_POSIX_EAGER_THRESHOLD;
+ else {
+ data_sz = 0; /* unused warning */
+ MPIR_Assert(0);
+ }
+ /* check for user buffer overflow */
+ size_t user_data_sz = MPIDI_POSIX_REQUEST(req)->data_sz;
+ if (user_data_sz < data_sz) {
+ req->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ data_sz = user_data_sz;
+ }
+
+ /* copy to user buffer */
+ if (MPIDI_POSIX_REQUEST(req)->segment_ptr) {
+ /* non-contig */
+ size_t last = MPIDI_POSIX_REQUEST(req)->segment_first + data_sz;
+ MPID_Segment_unpack(MPIDI_POSIX_REQUEST(req)->segment_ptr,
+ MPIDI_POSIX_REQUEST(req)->segment_first,
+ (MPI_Aint *) & last, send_buffer);
+ if (last != MPIDI_POSIX_REQUEST(req)->segment_first + data_sz)
+ req->status.MPI_ERROR = MPI_ERR_TYPE;
+ if (type == MPIDI_POSIX_TYPEEAGER)
+ MPID_Segment_free(MPIDI_POSIX_REQUEST(req)->segment_ptr);
+ else
+ MPIDI_POSIX_REQUEST(req)->segment_first = last;
+ }
+ else
+ /* contig */
+ if (send_buffer)
+ MPIR_Memcpy(recv_buffer, (void *) send_buffer, data_sz);
+ MPIDI_POSIX_REQUEST(req)->data_sz -= data_sz;
+ MPIDI_POSIX_REQUEST(req)->user_buf += data_sz;
+
+ /* set status and dequeue receive request if done */
+ count = MPIR_STATUS_GET_COUNT(req->status) + (MPI_Count) data_sz;
+ MPIR_STATUS_SET_COUNT(req->status, count);
+ if (type == MPIDI_POSIX_TYPEEAGER) {
+ if (in_cell) {
+ req->status.MPI_SOURCE = cell->rank;
+ req->status.MPI_TAG = cell->tag;
+ }
+ else {
+ req->status.MPI_SOURCE = sreq->status.MPI_SOURCE;
+ req->status.MPI_TAG = sreq->status.MPI_TAG;
+ }
+ MPIDI_POSIX_REQUEST_DEQUEUE_AND_SET_ERROR(&req, prev_req,
+ MPIDI_POSIX_recvq_posted,
+ req->status.MPI_ERROR);
+ }
+
+ goto release_cell_l;
+ } /* if matched */
+
+ prev_req = req;
+ req = MPIDI_POSIX_REQUEST(req)->next;
+ }
+
+ /* unexpected message, no posted matching req */
+ if (in_cell) {
+ /* free the cell, move to unexpected queue */
+ MPIR_Request *rreq;
+ MPIDI_POSIX_REQUEST_CREATE_RREQ(rreq);
+ MPIR_Object_set_ref(rreq, 1);
+ /* set status */
+ rreq->status.MPI_SOURCE = cell->rank;
+ rreq->status.MPI_TAG = cell->tag;
+ MPIR_STATUS_SET_COUNT(rreq->status, cell->pkt.mpich.datalen);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(rreq), cell->rank, cell->tag,
+ cell->context_id);
+ data_sz = cell->pkt.mpich.datalen;
+ MPIDI_POSIX_REQUEST(rreq)->data_sz = data_sz;
+ MPIDI_POSIX_REQUEST(rreq)->type = cell->pkt.mpich.type;
+
+ if (data_sz > 0) {
+ MPIDI_POSIX_REQUEST(rreq)->user_buf = (char *) MPL_malloc(data_sz);
+ MPIR_Memcpy(MPIDI_POSIX_REQUEST(rreq)->user_buf, (void *) cell->pkt.mpich.p.payload,
+ data_sz);
+ }
+ else {
+ MPIDI_POSIX_REQUEST(rreq)->user_buf = NULL;
+ }
+
+ MPIDI_POSIX_REQUEST(rreq)->datatype = MPI_BYTE;
+ MPIDI_POSIX_REQUEST(rreq)->next = NULL;
+ MPIDI_POSIX_REQUEST(rreq)->pending = cell->pending;
+ /* enqueue rreq */
+ MPIDI_POSIX_REQUEST_ENQUEUE(rreq, MPIDI_POSIX_recvq_unexpected);
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL,
+ (MPL_DBG_FDEST, "Unexpected from grank %d to %d in progress %d,%d,%d\n",
+ cell->my_rank, MPIDI_POSIX_mem_region.rank,
+ cell->rank, cell->tag, cell->context_id));
+ }
+ else {
+ /* examine another message in unexpected queue */
+ prev_sreq = sreq;
+ sreq = MPIDI_POSIX_REQUEST(sreq)->next;
+ goto unexpected_l;
+ }
+ }
+ release_cell_l:
+
+ if (in_cell) {
+ /* release cell */
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL,
+ (MPL_DBG_FDEST, "Received from grank %d to %d in progress %d,%d,%d\n",
+ cell->my_rank, MPIDI_POSIX_mem_region.rank, cell->rank, cell->tag,
+ cell->context_id));
+ cell->pending = NULL;
+ {
+ MPIDI_POSIX_queue_enqueue(MPIDI_POSIX_mem_region.FreeQ[cell->my_rank], cell);
+ }
+ }
+ else {
+ /* destroy unexpected req */
+ MPIDI_POSIX_REQUEST(sreq)->pending = NULL;
+ MPL_free(MPIDI_POSIX_REQUEST(sreq)->user_buf);
+ MPIDI_POSIX_REQUEST_DEQUEUE_AND_SET_ERROR(&sreq, prev_sreq, MPIDI_POSIX_recvq_unexpected,
+ mpi_errno);
+ }
+
+ (*completion_count)++;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_DO_PROGRESS_RECV);
+ return mpi_errno;
+}
+
+/* ----------------------------------------------------- */
+/* MPIDI_POSIX_progress_send */
+/* ----------------------------------------------------- */
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_POSIX_progress_send)
+static inline int MPIDI_POSIX_progress_send(int blocking, int *completion_count)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int dest;
+ MPIDI_POSIX_cell_ptr_t cell = NULL;
+ MPIR_Request *sreq = MPIDI_POSIX_sendq.head;
+ MPIR_Request *prev_sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_DO_PROGRESS_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_DO_PROGRESS_SEND);
+
+ if (sreq == NULL)
+ goto fn_exit;
+
+ /* try to send via freeq */
+ if (!MPIDI_POSIX_queue_empty(MPIDI_POSIX_mem_region.my_freeQ)) {
+ MPIDI_POSIX_queue_dequeue(MPIDI_POSIX_mem_region.my_freeQ, &cell);
+ MPIDI_POSIX_ENVELOPE_GET(MPIDI_POSIX_REQUEST(sreq), cell->rank, cell->tag,
+ cell->context_id);
+ dest = MPIDI_POSIX_REQUEST(sreq)->dest;
+ char *recv_buffer = (char *) cell->pkt.mpich.p.payload;
+ size_t data_sz = MPIDI_POSIX_REQUEST(sreq)->data_sz;
+ /*
+ * TODO: make request field dest_lpid (or even recvQ[dest_lpid]) instead of dest - no need to do rank_to_lpid each time
+ */
+ int grank = MPIDI_CH4U_rank_to_lpid(dest, sreq->comm);
+ cell->pending = NULL;
+
+ if (MPIDI_POSIX_REQUEST(sreq)->type == MPIDI_POSIX_TYPESYNC) {
+ /* increase req cc in order to release req only after ACK, do it once per SYNC request */
+ /* non-NULL pending req signal receiver about sending ACK back */
+ /* the pending req should be sent back for sender to decrease cc, for it is dequeued already */
+ int c;
+ cell->pending = sreq;
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+ MPIDI_POSIX_REQUEST(sreq)->type = MPIDI_POSIX_TYPESTANDARD;
+ }
+
+ if (data_sz <= MPIDI_POSIX_EAGER_THRESHOLD) {
+ cell->pkt.mpich.datalen = data_sz;
+
+ if (MPIDI_POSIX_REQUEST(sreq)->type == MPIDI_POSIX_TYPEACK) {
+ cell->pkt.mpich.type = MPIDI_POSIX_TYPEACK;
+ cell->pending = MPIDI_POSIX_REQUEST(sreq)->pending;
+ }
+ else {
+ /* eager message */
+ if (MPIDI_POSIX_REQUEST(sreq)->segment_ptr) {
+ /* non-contig */
+ MPID_Segment_pack(MPIDI_POSIX_REQUEST(sreq)->segment_ptr,
+ MPIDI_POSIX_REQUEST(sreq)->segment_first,
+ (MPI_Aint *) & MPIDI_POSIX_REQUEST(sreq)->segment_size,
+ recv_buffer);
+ MPID_Segment_free(MPIDI_POSIX_REQUEST(sreq)->segment_ptr);
+ }
+ else {
+ /* contig */
+ MPIR_Memcpy((void *) recv_buffer, MPIDI_POSIX_REQUEST(sreq)->user_buf, data_sz);
+ }
+
+ cell->pkt.mpich.type = MPIDI_POSIX_TYPEEAGER;
+ /* set status */
+ /*
+ * TODO: incorrect count for LMT - set to a last chunk of data
+ * is send status required?
+ */
+ sreq->status.MPI_SOURCE = cell->rank;
+ sreq->status.MPI_TAG = cell->tag;
+ MPIR_STATUS_SET_COUNT(sreq->status, data_sz);
+ }
+
+ /* dequeue sreq */
+ MPIDI_POSIX_REQUEST_DEQUEUE_AND_SET_ERROR(&sreq, prev_sreq, MPIDI_POSIX_sendq,
+ mpi_errno);
+ }
+ else {
+ /* long message */
+ if (MPIDI_POSIX_REQUEST(sreq)->segment_ptr) {
+ /* non-contig */
+ size_t last =
+ MPIDI_POSIX_REQUEST(sreq)->segment_first + MPIDI_POSIX_EAGER_THRESHOLD;
+ MPID_Segment_pack(MPIDI_POSIX_REQUEST(sreq)->segment_ptr,
+ MPIDI_POSIX_REQUEST(sreq)->segment_first, (MPI_Aint *) & last,
+ recv_buffer);
+ MPIDI_POSIX_REQUEST(sreq)->segment_first = last;
+ }
+ else {
+ /* contig */
+ MPIR_Memcpy((void *) recv_buffer, MPIDI_POSIX_REQUEST(sreq)->user_buf,
+ MPIDI_POSIX_EAGER_THRESHOLD);
+ MPIDI_POSIX_REQUEST(sreq)->user_buf += MPIDI_POSIX_EAGER_THRESHOLD;
+ }
+
+ cell->pkt.mpich.datalen = MPIDI_POSIX_EAGER_THRESHOLD;
+ MPIDI_POSIX_REQUEST(sreq)->data_sz -= MPIDI_POSIX_EAGER_THRESHOLD;
+ cell->pkt.mpich.type = MPIDI_POSIX_TYPELMT;
+ }
+
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL,
+ (MPL_DBG_FDEST, "Sent to grank %d from %d in progress %d,%d,%d\n", grank,
+ cell->my_rank, cell->rank, cell->tag, cell->context_id));
+ MPIDI_POSIX_queue_enqueue(MPIDI_POSIX_mem_region.RecvQ[grank], cell);
+ (*completion_count)++;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_DO_PROGRESS_SEND);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_progress)
+static inline int MPIDI_SHM_progress(int blocking)
+{
+ int complete = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS);
+
+ do {
+ /* Receieve progress */
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIDI_POSIX_progress_recv(blocking, &complete);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ /* Send progress */
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIDI_POSIX_progress_send(blocking, &complete);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+
+ MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
+ MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
+
+ if (complete > 0)
+ break;
+ } while (blocking);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_test(void)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_poke(void)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline void MPIDI_SHM_progress_start(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return;
+}
+
+static inline void MPIDI_SHM_progress_end(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return;
+}
+
+static inline int MPIDI_SHM_progress_wait(MPID_Progress_state * state)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_register(int (*progress_fn) (int *))
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_deregister(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_activate(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_deactivate(int id)
+{
+ MPIR_Assert(0);
+ return MPI_SUCCESS;
+}
+
+#endif /* POSIX_PROGRESS_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_queue.h b/src/mpid/ch4/shm/posix/posix_queue.h
new file mode 100644
index 0000000..e143480
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_queue.h
@@ -0,0 +1,343 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_QUEUE_H_INCLUDED
+#define POSIX_QUEUE_H_INCLUDED
+
+/* ------------------------------------------------------- */
+/* from mpid/ch3/channels/nemesis/include/mpid_nem_debug.h */
+/* ------------------------------------------------------- */
+
+/*#define MPIDI_POSIX_YIELD_IN_SKIP*/
+#ifdef MPIDI_POSIX_YIELD_IN_SKIP
+#define MPIDI_POSIX_SKIP MPL_sched_yield()
+#warning "MPIDI_POSIX_SKIP is yield"
+#else /* MPIDI_POSIX_YIELD_IN_SKIP */
+#define MPIDI_POSIX_SKIP do {} while (0)
+/*#warning "MPIDI_POSIX_SKIP is do ...while" */
+#endif /* MPIDI_POSIX_YIELD_IN_SKIP */
+
+/* ------------------------------------------------------- */
+/* from mpid/ch3/channels/nemesis/include/mpid_nem_queue.h */
+/* ------------------------------------------------------- */
+
+/* Assertion macros for nemesis queues. We don't use the normal
+ * assertion macros because we don't usually want to assert several
+ * times per queue operation. These assertions serve more as structured
+ * comments that can easily transformed into being real assertions */
+#define MPIDI_POSIX_Q_assert(a_) \
+ do {/*nothing*/} while (0)
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_POSIX_cell_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_POSIX_cell_init(MPIDI_POSIX_cell_ptr_t cell, int rank)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_POSIX_CELL_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_POSIX_CELL_INIT);
+
+ MPIDI_POSIX_SET_REL_NULL(cell->next);
+ memset((void *) &cell->pkt, 0, sizeof(MPIDI_POSIX_pkt_header_t));
+ cell->my_rank = rank;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_POSIX_CELL_INIT);
+}
+
+#ifdef MPIDI_POSIX_USE_LOCK_FREE_QUEUES
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_POSIX_queue_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_POSIX_queue_init(MPIDI_POSIX_queue_ptr_t qhead)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_POSIX_QUEUE_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_POSIX_QUEUE_INIT);
+
+ MPIDI_POSIX_SET_REL_NULL(qhead->head);
+ MPIDI_POSIX_SET_REL_NULL(qhead->my_head);
+ MPIDI_POSIX_SET_REL_NULL(qhead->tail);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_POSIX_QUEUE_INIT);
+}
+
+#define MPIDI_POSIX_USE_SHADOW_HEAD
+
+static inline MPIDI_POSIX_cell_rel_ptr_t MPIDI_POSIX_SWAP_REL(MPIDI_POSIX_cell_rel_ptr_t * ptr,
+ MPIDI_POSIX_cell_rel_ptr_t val)
+{
+ MPIDI_POSIX_cell_rel_ptr_t ret;
+ OPA_store_ptr(&ret.p, OPA_swap_ptr(&(ptr->p), OPA_load_ptr(&val.p)));
+ return ret;
+}
+
+/* do a compare-and-swap with MPIDI_POSIX_RELNULL */
+static inline MPIDI_POSIX_cell_rel_ptr_t MPIDI_POSIX_CAS_REL_NULL(MPIDI_POSIX_cell_rel_ptr_t * ptr,
+ MPIDI_POSIX_cell_rel_ptr_t oldv)
+{
+ MPIDI_POSIX_cell_rel_ptr_t ret;
+ OPA_store_ptr(&ret.p, OPA_cas_ptr(&(ptr->p), OPA_load_ptr(&oldv.p), MPIDI_POSIX_REL_NULL));
+ return ret;
+}
+
+static inline void MPIDI_POSIX_queue_enqueue(MPIDI_POSIX_queue_ptr_t qhead,
+ MPIDI_POSIX_cell_ptr_t element)
+{
+ MPIDI_POSIX_cell_rel_ptr_t r_prev;
+ MPIDI_POSIX_cell_rel_ptr_t r_element = MPIDI_POSIX_ABS_TO_REL(element);
+
+ /* the _dequeue can break if this does not hold */
+ MPIDI_POSIX_Q_assert(MPIDI_POSIX_IS_REL_NULL(element->next));
+
+ /* Orders payload and e->next=NULL w.r.t. the SWAP, updating head, and
+ * updating prev->next. We assert e->next==NULL above, but it may have been
+ * done by us in the preceding _dequeue operation.
+ *
+ * The SWAP itself does not need to be ordered w.r.t. the payload because
+ * the consumer does not directly inspect the tail. But the subsequent
+ * update to the head or e->next field does need to be ordered w.r.t. the
+ * payload or the consumer may read incorrect data. */
+ OPA_write_barrier();
+
+ /* enqueue at tail */
+ r_prev = MPIDI_POSIX_SWAP_REL(&(qhead->tail), r_element);
+
+ if (MPIDI_POSIX_IS_REL_NULL(r_prev)) {
+ /* queue was empty, element is the new head too */
+
+ /* no write barrier needed, we believe atomic SWAP with a control
+ * dependence (if) will enforce ordering between the SWAP and the head
+ * assignment */
+ qhead->head = r_element;
+ }
+ else {
+ /* queue was not empty, swing old tail's next field to point to
+ * our element */
+ MPIDI_POSIX_Q_assert(MPIDI_POSIX_IS_REL_NULL(MPIDI_POSIX_REL_TO_ABS(r_prev)->next));
+
+ /* no write barrier needed, we believe atomic SWAP with a control
+ * dependence (if/else) will enforce ordering between the SWAP and the
+ * prev->next assignment */
+ MPIDI_POSIX_REL_TO_ABS(r_prev)->next = r_element;
+ }
+}
+
+/* This operation is only safe because this is a single-dequeuer queue impl.
+ Assumes that MPIDI_POSIX_queue_empty was called immediately prior to fix up any
+ shadow head issues. */
+static inline MPIDI_POSIX_cell_ptr_t MPIDI_POSIX_queue_head(MPIDI_POSIX_queue_ptr_t qhead)
+{
+ MPIDI_POSIX_Q_assert(MPIDI_POSIX_IS_REL_NULL(qhead->head));
+ return MPIDI_POSIX_REL_TO_ABS(qhead->my_head);
+}
+
+static inline int MPIDI_POSIX_queue_empty(MPIDI_POSIX_queue_ptr_t qhead)
+{
+ /* outside of this routine my_head and head should never both
+ * contain a non-null value */
+ MPIDI_POSIX_Q_assert(MPIDI_POSIX_IS_REL_NULL(qhead->my_head) ||
+ MPIDI_POSIX_IS_REL_NULL(qhead->head));
+
+ if (MPIDI_POSIX_IS_REL_NULL(qhead->my_head)) {
+ /* the order of comparison between my_head and head does not
+ * matter, no read barrier needed here */
+ if (MPIDI_POSIX_IS_REL_NULL(qhead->head)) {
+ /* both null, nothing in queue */
+ return 1;
+ }
+ else {
+ /* shadow head null and head has value, move the value to
+ * our private shadow head and zero the real head */
+ qhead->my_head = qhead->head;
+ /* no barrier needed, my_head is entirely private to consumer */
+ MPIDI_POSIX_SET_REL_NULL(qhead->head);
+ }
+ }
+
+ /* the following assertions are present at the beginning of _dequeue:
+ * MPIDI_POSIX_Q_assert(!MPIDI_POSIX_IS_REL_NULL(qhead->my_head));
+ * MPIDI_POSIX_Q_assert(MPIDI_POSIX_IS_REL_NULL(qhead->head));
+ */
+ return 0;
+}
+
+
+/* Gets the head */
+static inline void MPIDI_POSIX_queue_dequeue(MPIDI_POSIX_queue_ptr_t qhead,
+ MPIDI_POSIX_cell_ptr_t * e)
+{
+ MPIDI_POSIX_cell_ptr_t _e;
+ MPIDI_POSIX_cell_rel_ptr_t _r_e;
+
+ /* _empty always called first, moving head-->my_head */
+ MPIDI_POSIX_Q_assert(!MPIDI_POSIX_IS_REL_NULL(qhead->my_head));
+ MPIDI_POSIX_Q_assert(MPIDI_POSIX_IS_REL_NULL(qhead->head));
+
+ _r_e = qhead->my_head;
+ _e = MPIDI_POSIX_REL_TO_ABS(_r_e);
+
+ /* no barrier needed, my_head is private to consumer, plus
+ * head/my_head and _e->next are ordered by a data dependency */
+ if (!MPIDI_POSIX_IS_REL_NULL(_e->next)) {
+ qhead->my_head = _e->next;
+ }
+ else {
+ /* we've reached the end (tail) of the queue */
+ MPIDI_POSIX_cell_rel_ptr_t old_tail;
+
+ MPIDI_POSIX_SET_REL_NULL(qhead->my_head);
+ /* no barrier needed, the caller doesn't need any ordering w.r.t.
+ * my_head or the tail */
+ old_tail = MPIDI_POSIX_CAS_REL_NULL(&(qhead->tail), _r_e);
+
+ if (!MPIDI_POSIX_REL_ARE_EQUAL(old_tail, _r_e)) {
+ /* FIXME is a barrier needed here because of the control-only dependency? */
+ while (MPIDI_POSIX_IS_REL_NULL(_e->next)) {
+ MPIDI_POSIX_SKIP;
+ }
+
+ /* no read barrier needed between loads from the same location */
+ qhead->my_head = _e->next;
+ }
+ }
+
+ MPIDI_POSIX_SET_REL_NULL(_e->next);
+
+ /* Conservative read barrier here to ensure loads from head are ordered
+ * w.r.t. payload reads by the caller. The McKenney "whymb" document's
+ * Figure 11 indicates that we don't need a barrier, but we are currently
+ * unconvinced of this. Further work, ideally using more formal methods,
+ * should justify removing this. (note that this barrier won't cost us
+ * anything on many platforms, esp. x86) */
+ OPA_read_barrier();
+
+ *e = _e;
+}
+
+#else /* !defined(MPIDI_POSIX_USE_LOCK_FREE_QUEUES) */
+
+/* FIXME We shouldn't really be using the MPID_Thread_mutex_* code but the
+ * MPIDU_Process_locks code is a total mess right now. In the long term we need
+ to resolve this, but in the short run it should be safe on most (all?)
+ platforms to use these instead. Usually they will both boil down to a
+ pthread_mutex_t and and associated functions. */
+#define MPIDI_POSIX_queue_mutex_create MPID_Thread_mutex_create
+#define MPIDI_POSIX_queue_mutex_lock MPID_Thread_mutex_lock
+#define MPIDI_POSIX_queue_mutex_unlock MPID_Thread_mutex_unlock
+
+/* must be called by exactly one process per queue */
+#undef FUNCNAME
+#define FUNCNAME MPIDI_POSIX_queue_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_POSIX_queue_init(MPIDI_POSIX_queue_ptr_t qhead)
+{
+ int err = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_POSIX_QUEUE_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_POSIX_QUEUE_INIT);
+
+ MPIDI_POSIX_SET_REL_NULL(qhead->head);
+ MPIDI_POSIX_SET_REL_NULL(qhead->my_head);
+ MPIDI_POSIX_SET_REL_NULL(qhead->tail);
+ MPIDI_POSIX_queue_mutex_create(&qhead->lock, &err);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_POSIX_QUEUE_INIT);
+}
+
+static inline void MPIDI_POSIX_queue_enqueue(MPIDI_POSIX_queue_ptr_t qhead,
+ MPIDI_POSIX_cell_ptr_t element)
+{
+ int err = 0;
+ MPIDI_POSIX_cell_rel_ptr_t r_prev;
+ MPIDI_POSIX_cell_rel_ptr_t r_element = MPIDI_POSIX_ABS_TO_REL(element);
+
+ MPIDI_POSIX_queue_mutex_lock(&qhead->lock, &err);
+
+ r_prev = qhead->tail;
+ qhead->tail = r_element;
+
+ if (MPIDI_POSIX_IS_REL_NULL(r_prev)) {
+ qhead->head = r_element;
+ }
+ else {
+ MPIDI_POSIX_REL_TO_ABS(r_prev)->next = r_element;
+ }
+
+ MPIDI_POSIX_queue_mutex_unlock(&qhead->lock, &err);
+}
+
+/* This operation is only safe because this is a single-dequeuer queue impl. */
+static inline MPIDI_POSIX_cell_ptr_t MPIDI_POSIX_queue_head(MPIDI_POSIX_queue_ptr_t qhead)
+{
+ return MPIDI_POSIX_REL_TO_ABS(qhead->my_head);
+}
+
+/* Assumption: regular loads & stores are atomic. This may not be univerally
+ true, but it's not uncommon. We often need to use these "lock-ful" queues on
+ platforms where atomics are not yet implemented, so we can't rely on the
+ atomics to provide atomic load/store operations for us. */
+static inline int MPIDI_POSIX_queue_empty(MPIDI_POSIX_queue_ptr_t qhead)
+{
+ if (MPIDI_POSIX_IS_REL_NULL(qhead->my_head)) {
+ if (MPIDI_POSIX_IS_REL_NULL(qhead->head)) {
+ return 1;
+ }
+ else {
+ qhead->my_head = qhead->head;
+ MPIDI_POSIX_SET_REL_NULL(qhead->head); /* reset it for next time */
+ }
+ }
+
+ return 0;
+}
+
+static inline void MPIDI_POSIX_queue_dequeue(MPIDI_POSIX_queue_ptr_t qhead,
+ MPIDI_POSIX_cell_ptr_t * e)
+{
+ int err = 0;
+ MPIDI_POSIX_cell_ptr_t _e;
+ MPIDI_POSIX_cell_rel_ptr_t _r_e;
+
+ _r_e = qhead->my_head;
+ _e = MPIDI_POSIX_REL_TO_ABS(_r_e);
+
+
+ if (MPIDI_POSIX_IS_REL_NULL(_e->next)) {
+ /* a REL_NULL _e->next or writing qhead->tail both require locking */
+ MPIDI_POSIX_queue_mutex_lock(&qhead->lock, &err);
+ qhead->my_head = _e->next;
+
+ /* We have to check _e->next again because it may have changed between
+ * the time we checked it without the lock and the time that we acquired
+ * the lock. */
+ if (MPIDI_POSIX_IS_REL_NULL(_e->next)) {
+ MPIDI_POSIX_SET_REL_NULL(qhead->tail);
+ }
+
+ MPIDI_POSIX_queue_mutex_unlock(&qhead->lock, &err);
+ }
+ else { /* !MPIDI_POSIX_IS_REL_NULL(_e->next) */
+ /* We don't need to lock because a non-null _e->next can't be changed by
+ * anyone but us (the dequeuer) and we don't need to modify qhead->tail
+ * because we aren't removing the last element from the queue. */
+ qhead->my_head = _e->next;
+ }
+
+ MPIDI_POSIX_SET_REL_NULL(_e->next);
+ *e = _e;
+}
+
+#endif /* !defined(MPIDI_POSIX_USE_LOCK_FREE_QUEUES) */
+
+#endif /* POSIX_QUEUE_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_recv.h b/src/mpid/ch4/shm/posix/posix_recv.h
new file mode 100644
index 0000000..7eb13a9
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_recv.h
@@ -0,0 +1,363 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_RECV_H_INCLUDED
+#define POSIX_RECV_H_INCLUDED
+
+#include "posix_impl.h"
+#include "ch4_impl.h"
+
+/* ---------------------------------------------------- */
+/* general queues */
+/* ---------------------------------------------------- */
+extern MPIDI_POSIX_request_queue_t MPIDI_POSIX_recvq_posted;
+extern MPIDI_POSIX_request_queue_t MPIDI_POSIX_recvq_unexpected;
+
+/* ---------------------------------------------------- */
+/* MPIDI_POSIX_do_irecv */
+/* ---------------------------------------------------- */
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_POSIX_do_irecv)
+static inline int MPIDI_POSIX_do_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS, dt_contig;
+ size_t data_sz;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+ MPIR_Request *rreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_POSIX_DO_IRECV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_POSIX_DO_IRECV);
+
+ MPIDI_POSIX_REQUEST_CREATE_RREQ(rreq);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Status_set_procnull(&(rreq->status));
+ *request = rreq;
+ goto fn_exit;
+ }
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(rreq), rank, tag,
+ comm->context_id + context_offset);
+ rreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ MPIDI_POSIX_REQUEST(rreq)->user_buf = (char *) buf + dt_true_lb;
+ MPIDI_POSIX_REQUEST(rreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(rreq)->datatype = datatype;
+ MPIDI_POSIX_REQUEST(rreq)->data_sz = data_sz;
+ MPIDI_POSIX_REQUEST(rreq)->next = NULL;
+ MPIDI_POSIX_REQUEST(rreq)->segment_ptr = NULL;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq) = NULL;
+ MPIR_STATUS_SET_COUNT(rreq->status, 0);
+
+ if (!dt_contig) {
+ MPIDI_POSIX_REQUEST(rreq)->segment_ptr = MPID_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1((MPIDI_POSIX_REQUEST(rreq)->segment_ptr == NULL), mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPID_Segment_init((char *) buf, MPIDI_POSIX_REQUEST(rreq)->user_count,
+ MPIDI_POSIX_REQUEST(rreq)->datatype,
+ MPIDI_POSIX_REQUEST(rreq)->segment_ptr, 0);
+ MPIDI_POSIX_REQUEST(rreq)->segment_first = 0;
+ MPIDI_POSIX_REQUEST(rreq)->segment_size = data_sz;
+ }
+
+ dtype_add_ref_if_not_builtin(datatype);
+ /* enqueue rreq */
+ MPIDI_POSIX_REQUEST_ENQUEUE(rreq, MPIDI_POSIX_recvq_posted);
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL,
+ (MPL_DBG_FDEST,
+ "Enqueued from grank %d to %d (comm_kind %d) in recv %d,%d,%d\n",
+ MPIDI_CH4U_rank_to_lpid(rank, comm), MPIDI_POSIX_mem_region.rank,
+ comm->comm_kind, rank, tag, comm->context_id + context_offset));
+ *request = rreq;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_POSIX_DO_IRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_recv)
+static inline int MPIDI_SHM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS, dt_contig __attribute__ ((__unused__));
+ size_t data_sz __attribute__ ((__unused__));
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RECV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RECV);
+
+ /* create a request */
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ mpi_errno =
+ MPIDI_POSIX_do_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RECV);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_recv)
+static inline int MPIDI_SHM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+
+ MPIDI_POSIX_REQUEST_CREATE_RREQ(rreq);
+ MPIR_Object_set_ref(rreq, 1);
+ MPIR_cc_set(&rreq->cc, 0);
+ rreq->kind = MPIR_REQUEST_KIND__PREQUEST_RECV;
+ rreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(rreq), rank, tag,
+ comm->context_id + context_offset);
+ MPIDI_POSIX_REQUEST(rreq)->user_buf = (char *) buf;
+ MPIDI_POSIX_REQUEST(rreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(rreq)->datatype = datatype;
+ *request = rreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+ return mpi_errno;
+}
+
+
+static inline int MPIDI_SHM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int dt_contig;
+ size_t data_sz;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+ MPIR_Request *rreq = NULL, *sreq = NULL;
+ int rank, tag, context_id;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+
+ if (message == NULL) {
+ MPIDI_Request_create_null_rreq(rreq, mpi_errno, goto fn_fail);
+ *rreqp = rreq;
+ goto fn_exit;
+ }
+
+ MPIR_Assert(message != NULL);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ MPIDI_POSIX_REQUEST_CREATE_RREQ(rreq);
+ MPIR_Object_set_ref(rreq, 1);
+ MPIR_cc_set(&rreq->cc, 0);
+ MPIDI_POSIX_ENVELOPE_GET(MPIDI_POSIX_REQUEST(message), rank, tag, context_id);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(rreq), rank, tag, context_id);
+ rreq->comm = message->comm;
+ MPIR_Comm_add_ref(message->comm);
+ MPIDI_POSIX_REQUEST(rreq)->user_buf = (char *) buf + dt_true_lb;
+ MPIDI_POSIX_REQUEST(rreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(rreq)->datatype = datatype;
+ MPIDI_POSIX_REQUEST(rreq)->next = NULL;
+ MPIDI_POSIX_REQUEST(rreq)->segment_ptr = NULL;
+ MPIR_STATUS_SET_COUNT(rreq->status, 0);
+
+ if (!dt_contig) {
+ MPIDI_POSIX_REQUEST(rreq)->segment_ptr = MPID_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1((MPIDI_POSIX_REQUEST(rreq)->segment_ptr == NULL), mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPID_Segment_init((char *) buf, MPIDI_POSIX_REQUEST(rreq)->user_count,
+ MPIDI_POSIX_REQUEST(rreq)->datatype,
+ MPIDI_POSIX_REQUEST(rreq)->segment_ptr, 0);
+ MPIDI_POSIX_REQUEST(rreq)->segment_first = 0;
+ MPIDI_POSIX_REQUEST(rreq)->segment_size = data_sz;
+ }
+
+ if (MPIDI_POSIX_REQUEST(message)->pending) {
+ /* Sync send - we must send ACK */
+ int srank = message->status.MPI_SOURCE;
+ MPIR_Request *req_ack = NULL;
+ MPIDI_POSIX_REQUEST_CREATE_SREQ(req_ack);
+ MPIR_Object_set_ref(req_ack, 1);
+ req_ack->comm = message->comm;
+ MPIR_Comm_add_ref(message->comm);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(req_ack), message->comm->rank, tag,
+ context_id);
+ MPIDI_POSIX_REQUEST(req_ack)->user_buf = NULL;
+ MPIDI_POSIX_REQUEST(req_ack)->user_count = 0;
+ MPIDI_POSIX_REQUEST(req_ack)->datatype = MPI_BYTE;
+ MPIDI_POSIX_REQUEST(req_ack)->data_sz = 0;
+ MPIDI_POSIX_REQUEST(req_ack)->type = MPIDI_POSIX_TYPEACK;
+ MPIDI_POSIX_REQUEST(req_ack)->dest = srank;
+ MPIDI_POSIX_REQUEST(req_ack)->next = NULL;
+ MPIDI_POSIX_REQUEST(req_ack)->segment_ptr = NULL;
+ MPIDI_POSIX_REQUEST(req_ack)->pending = MPIDI_POSIX_REQUEST(message)->pending;
+ /* enqueue req_ack */
+ MPIDI_POSIX_REQUEST_ENQUEUE(req_ack, MPIDI_POSIX_sendq);
+ }
+
+ for (sreq = message; sreq;) {
+ MPIR_Request *next_req = NULL;
+ char *send_buffer = MPIDI_POSIX_REQUEST(sreq)->user_buf;
+ char *recv_buffer = (char *) MPIDI_POSIX_REQUEST(rreq)->user_buf;
+
+ if (MPIDI_POSIX_REQUEST(sreq)->type == MPIDI_POSIX_TYPEEAGER) {
+ /* eager message */
+ data_sz = MPIDI_POSIX_REQUEST(sreq)->data_sz;
+
+ if (MPIDI_POSIX_REQUEST(rreq)->segment_ptr) {
+ /* non-contig */
+ size_t last = MPIDI_POSIX_REQUEST(rreq)->segment_first + data_sz;
+ MPID_Segment_unpack(MPIDI_POSIX_REQUEST(rreq)->segment_ptr,
+ MPIDI_POSIX_REQUEST(rreq)->segment_first, (MPI_Aint *) & last,
+ send_buffer);
+ MPID_Segment_free(MPIDI_POSIX_REQUEST(rreq)->segment_ptr);
+ }
+ else
+ /* contig */
+ if (send_buffer)
+ MPIR_Memcpy(recv_buffer, (void *) send_buffer, data_sz);
+
+ /* set status */
+ rreq->status.MPI_SOURCE = sreq->status.MPI_SOURCE;
+ rreq->status.MPI_TAG = sreq->status.MPI_TAG;
+ count = MPIR_STATUS_GET_COUNT(rreq->status) + (MPI_Count) data_sz;
+ MPIR_STATUS_SET_COUNT(rreq->status, count);
+ }
+ else if (MPIDI_POSIX_REQUEST(sreq)->type == MPIDI_POSIX_TYPELMT) {
+ /* long message */
+ if (MPIDI_POSIX_REQUEST(rreq)->segment_ptr) {
+ /* non-contig */
+ size_t last =
+ MPIDI_POSIX_REQUEST(rreq)->segment_first + MPIDI_POSIX_EAGER_THRESHOLD;
+ MPID_Segment_unpack(MPIDI_POSIX_REQUEST(rreq)->segment_ptr,
+ MPIDI_POSIX_REQUEST(rreq)->segment_first, (MPI_Aint *) & last,
+ send_buffer);
+ MPIDI_POSIX_REQUEST(rreq)->segment_first = last;
+ }
+ else
+ /* contig */
+ if (send_buffer)
+ MPIR_Memcpy(recv_buffer, (void *) send_buffer, MPIDI_POSIX_EAGER_THRESHOLD);
+
+ MPIDI_POSIX_REQUEST(rreq)->data_sz -= MPIDI_POSIX_EAGER_THRESHOLD;
+ MPIDI_POSIX_REQUEST(rreq)->user_buf += MPIDI_POSIX_EAGER_THRESHOLD;
+ count = MPIR_STATUS_GET_COUNT(rreq->status) + (MPI_Count) MPIDI_POSIX_EAGER_THRESHOLD;
+ MPIR_STATUS_SET_COUNT(rreq->status, count);
+ }
+
+ /* destroy unexpected req */
+ MPIDI_POSIX_REQUEST(sreq)->pending = NULL;
+ MPL_free(MPIDI_POSIX_REQUEST(sreq)->user_buf);
+ next_req = MPIDI_POSIX_REQUEST(sreq)->next;
+ MPIDI_POSIX_REQUEST_COMPLETE(sreq);
+ sreq = next_req;
+ }
+
+ *rreqp = rreq;
+
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_irecv)
+static inline int MPIDI_SHM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+
+ mpi_errno =
+ MPIDI_POSIX_do_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_cancel_recv)
+static inline int MPIDI_SHM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ MPIR_Request *req = MPIDI_POSIX_recvq_posted.head;
+ MPIR_Request *prev_req = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+
+ while (req) {
+ if (req == rreq) {
+ /* Remove request from shm posted receive queue */
+
+ if (prev_req) {
+ MPIDI_POSIX_REQUEST(prev_req)->next = MPIDI_POSIX_REQUEST(req)->next;
+ }
+ else {
+ MPIDI_POSIX_recvq_posted.head = MPIDI_POSIX_REQUEST(req)->next;
+ }
+
+ if (req == MPIDI_POSIX_recvq_posted.tail) {
+ MPIDI_POSIX_recvq_posted.tail = prev_req;
+ }
+
+ MPIR_STATUS_SET_CANCEL_BIT(req->status, TRUE);
+ MPIR_STATUS_SET_COUNT(req->status, 0);
+ MPIDI_POSIX_REQUEST_COMPLETE(req);
+
+ break;
+ }
+
+ prev_req = req;
+ req = MPIDI_POSIX_REQUEST(req)->next;
+ }
+
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+ return MPI_SUCCESS;
+}
+
+#endif /* POSIX_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_request.h b/src/mpid/ch4/shm/posix/posix_request.h
new file mode 100644
index 0000000..e3d0aef
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_request.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_REQUEST_H_INCLUDED
+#define POSIX_REQUEST_H_INCLUDED
+
+#include "posix_impl.h"
+
+static inline void MPIDI_SHM_am_request_init(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+}
+
+static inline void MPIDI_SHM_am_request_finalize(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+}
+
+#endif /* POSIX_REQUEST_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_rma.h b/src/mpid/ch4/shm/posix/posix_rma.h
new file mode 100644
index 0000000..0e58b26
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_rma.h
@@ -0,0 +1,195 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_RMA_H_INCLUDED
+#define POSIX_RMA_H_INCLUDED
+
+#include "posix_impl.h"
+
+static inline int MPIDI_SHM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_PUT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_PUT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GET);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GET);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RGET);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RGET);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+#endif /* POSIX_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_send.h b/src/mpid/ch4/shm/posix/posix_send.h
new file mode 100644
index 0000000..5270c9b
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_send.h
@@ -0,0 +1,468 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_SEND_H_INCLUDED
+#define POSIX_SEND_H_INCLUDED
+
+#include "posix_impl.h"
+#include "ch4_impl.h"
+#include <../mpi/pt2pt/bsendutil.h>
+/* ---------------------------------------------------- */
+/* from mpid/ch3/channels/nemesis/include/mpid_nem_impl.h */
+/* ---------------------------------------------------- */
+/* assumes value!=0 means the fbox is full. Contains acquire barrier to
+ * ensure that later operations that are dependent on this check don't
+ * escape earlier than this check. */
+#define MPIDI_POSIX_fbox_is_full(pbox_) (OPA_load_acquire_int(&(pbox_)->flag.value))
+
+/* ---------------------------------------------------- */
+/* MPIDI_POSIX_do_isend */
+/* ---------------------------------------------------- */
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_POSIX_do_isend)
+static inline int MPIDI_POSIX_do_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request, int type)
+{
+ int dt_contig, mpi_errno = MPI_SUCCESS;
+ MPI_Aint dt_true_lb;
+ MPIR_Request *sreq = NULL;
+ size_t data_sz;
+ MPIR_Datatype *dt_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_POSIX_DO_ISEND);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_POSIX_DO_ISEND);
+
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+ MPIDI_POSIX_REQUEST_CREATE_SREQ(sreq);
+ sreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(sreq), comm->rank, tag,
+ comm->context_id + context_offset);
+ MPIDI_POSIX_REQUEST(sreq)->user_buf = (char *) buf + dt_true_lb;
+ MPIDI_POSIX_REQUEST(sreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(sreq)->datatype = datatype;
+ MPIDI_POSIX_REQUEST(sreq)->data_sz = data_sz;
+ MPIDI_POSIX_REQUEST(sreq)->type = type;
+ MPIDI_POSIX_REQUEST(sreq)->dest = rank;
+ MPIDI_POSIX_REQUEST(sreq)->next = NULL;
+ MPIDI_POSIX_REQUEST(sreq)->pending = NULL;
+ MPIDI_POSIX_REQUEST(sreq)->segment_ptr = NULL;
+
+ if (!dt_contig) {
+ MPIDI_POSIX_REQUEST(sreq)->segment_ptr = MPID_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1((MPIDI_POSIX_REQUEST(sreq)->segment_ptr == NULL), mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ MPID_Segment_init((char *) buf, MPIDI_POSIX_REQUEST(sreq)->user_count,
+ MPIDI_POSIX_REQUEST(sreq)->datatype,
+ MPIDI_POSIX_REQUEST(sreq)->segment_ptr, 0);
+ MPIDI_POSIX_REQUEST(sreq)->segment_first = 0;
+ MPIDI_POSIX_REQUEST(sreq)->segment_size = data_sz;
+ }
+
+ dtype_add_ref_if_not_builtin(datatype);
+ /* enqueue sreq */
+ MPIDI_POSIX_REQUEST_ENQUEUE(sreq, MPIDI_POSIX_sendq);
+ *request = sreq;
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL,
+ (MPL_DBG_FDEST,
+ "Enqueued to grank %d from %d (comm_kind %d) in recv %d,%d,%d\n",
+ MPIDI_CH4U_rank_to_lpid(rank, comm), MPIDI_POSIX_mem_region.rank,
+ comm->comm_kind, comm->rank, tag, comm->context_id + context_offset));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_POSIX_DO_ISEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_SEND)
+static inline int MPIDI_SHM_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int dt_contig __attribute__ ((__unused__)), mpi_errno = MPI_SUCCESS;
+ MPI_Aint dt_true_lb;
+ size_t data_sz;
+ MPIR_Datatype *dt_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SEND);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SEND);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ /* try to send immediately, contig, short message */
+ if (dt_contig && data_sz <= MPIDI_POSIX_EAGER_THRESHOLD) {
+ /* eager message */
+ int grank = MPIDI_CH4U_rank_to_lpid(rank, comm);
+
+ /* Try freeQ */
+ if (!MPIDI_POSIX_queue_empty(MPIDI_POSIX_mem_region.my_freeQ)) {
+ MPIDI_POSIX_cell_ptr_t cell;
+ MPIDI_POSIX_queue_dequeue(MPIDI_POSIX_mem_region.my_freeQ, &cell);
+ MPIDI_POSIX_ENVELOPE_SET(cell, comm->rank, tag, comm->context_id + context_offset);
+ cell->pkt.mpich.datalen = data_sz;
+ cell->pkt.mpich.type = MPIDI_POSIX_TYPEEAGER;
+ MPIR_Memcpy((void *) cell->pkt.mpich.p.payload, (char *) buf + dt_true_lb, data_sz);
+ cell->pending = NULL;
+ MPIDI_POSIX_queue_enqueue(MPIDI_POSIX_mem_region.RecvQ[grank], cell);
+ *request = NULL;
+ MPL_DBG_MSG_FMT(MPIR_DBG_HANDLE, TYPICAL,
+ (MPL_DBG_FDEST, "Sent to grank %d from %d in send %d,%d,%d\n", grank,
+ cell->my_rank, cell->rank, cell->tag, cell->context_id));
+ goto fn_exit;
+ }
+ }
+
+ /* Long message or */
+ /* Failed to send immediately - create and return request */
+ mpi_errno =
+ MPIDI_POSIX_do_isend(buf, count, datatype, rank, tag, comm, context_offset, request,
+ MPIDI_POSIX_TYPESTANDARD);
+
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SEND);
+ return mpi_errno;
+}
+
+
+
+
+static inline int MPIDI_SHM_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_IRSEND);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_IRSEND);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ mpi_errno =
+ MPIDI_POSIX_do_isend(buf, count, datatype, rank, tag, comm, context_offset, request,
+ MPIDI_POSIX_TYPEREADY);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_IRSEND);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_SSEND)
+static inline int MPIDI_SHM_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ mpi_errno =
+ MPIDI_POSIX_do_isend(buf, count, datatype, rank, tag, comm, context_offset, request,
+ MPIDI_POSIX_TYPESYNC);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_STARTALL)
+static inline int MPIDI_SHM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ int i, mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+
+ for (i = 0; i < count; i++) {
+ MPIR_Request *preq = requests[i];
+
+ if (preq->kind == MPIR_REQUEST_KIND__PREQUEST_SEND) {
+ if (MPIDI_POSIX_REQUEST(preq)->type != MPIDI_POSIX_TYPEBUFFERED) {
+ mpi_errno =
+ MPIDI_POSIX_do_isend(MPIDI_POSIX_REQUEST(preq)->user_buf,
+ MPIDI_POSIX_REQUEST(preq)->user_count,
+ MPIDI_POSIX_REQUEST(preq)->datatype,
+ MPIDI_POSIX_REQUEST(preq)->dest,
+ MPIDI_POSIX_REQUEST(preq)->tag, preq->comm,
+ MPIDI_POSIX_REQUEST(preq)->context_id -
+ preq->comm->context_id, &preq->u.persist.real_request,
+ MPIDI_POSIX_REQUEST(preq)->type);
+ }
+ else {
+ MPI_Request sreq_handle;
+ mpi_errno =
+ MPIR_Ibsend_impl(MPIDI_POSIX_REQUEST(preq)->user_buf,
+ MPIDI_POSIX_REQUEST(preq)->user_count,
+ MPIDI_POSIX_REQUEST(preq)->datatype,
+ MPIDI_POSIX_REQUEST(preq)->dest,
+ MPIDI_POSIX_REQUEST(preq)->tag, preq->comm, &sreq_handle);
+
+ if (mpi_errno == MPI_SUCCESS)
+ MPIR_Request_get_ptr(sreq_handle, preq->u.persist.real_request);
+ }
+ }
+ else if (preq->kind == MPIR_REQUEST_KIND__PREQUEST_RECV) {
+ mpi_errno =
+ MPIDI_POSIX_do_irecv(MPIDI_POSIX_REQUEST(preq)->user_buf,
+ MPIDI_POSIX_REQUEST(preq)->user_count,
+ MPIDI_POSIX_REQUEST(preq)->datatype,
+ MPIDI_POSIX_REQUEST(preq)->rank,
+ MPIDI_POSIX_REQUEST(preq)->tag, preq->comm,
+ MPIDI_POSIX_REQUEST(preq)->context_id - preq->comm->context_id,
+ &preq->u.persist.real_request);
+ }
+ else {
+ MPIR_Assert(0);
+ }
+
+ if (mpi_errno == MPI_SUCCESS) {
+ preq->status.MPI_ERROR = MPI_SUCCESS;
+
+ if (MPIDI_POSIX_REQUEST(preq)->type == MPIDI_POSIX_TYPEBUFFERED) {
+ preq->cc_ptr = &preq->cc;
+ MPIR_cc_set(&preq->cc, 0);
+ }
+ else
+ preq->cc_ptr = &preq->u.persist.real_request->cc;
+ }
+ else {
+ preq->u.persist.real_request = NULL;
+ preq->status.MPI_ERROR = mpi_errno;
+ preq->cc_ptr = &preq->cc;
+ MPIR_cc_set(&preq->cc, 0);
+ }
+ }
+
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_SEND_INIT)
+static inline int MPIDI_SHM_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+ MPIDI_POSIX_REQUEST_CREATE_SREQ(sreq);
+ MPIR_Object_set_ref(sreq, 1);
+ MPIR_cc_set(&(sreq)->cc, 0);
+ sreq->kind = MPIR_REQUEST_KIND__PREQUEST_SEND;
+ sreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(sreq), comm->rank, tag,
+ comm->context_id + context_offset);
+ MPIDI_POSIX_REQUEST(sreq)->user_buf = (char *) buf;
+ MPIDI_POSIX_REQUEST(sreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(sreq)->dest = rank;
+ MPIDI_POSIX_REQUEST(sreq)->datatype = datatype;
+ MPIDI_POSIX_REQUEST(sreq)->type = MPIDI_POSIX_TYPESTANDARD;
+ *request = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_SSEND_INIT)
+static inline int MPIDI_SHM_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+ MPIDI_POSIX_REQUEST_CREATE_SREQ(sreq);
+ MPIR_Object_set_ref(sreq, 1);
+ sreq->kind = MPIR_REQUEST_KIND__PREQUEST_SEND;
+ sreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(sreq), comm->rank, tag,
+ comm->context_id + context_offset);
+ MPIDI_POSIX_REQUEST(sreq)->user_buf = (char *) buf;
+ MPIDI_POSIX_REQUEST(sreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(sreq)->dest = rank;
+ MPIDI_POSIX_REQUEST(sreq)->datatype = datatype;
+ MPIDI_POSIX_REQUEST(sreq)->type = MPIDI_POSIX_TYPESYNC;
+ *request = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+ return mpi_errno;
+}
+
+static inline int MPIDI_SHM_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+ MPIDI_POSIX_REQUEST_CREATE_SREQ(sreq);
+ MPIR_Object_set_ref(sreq, 1);
+ sreq->kind = MPIR_REQUEST_KIND__PREQUEST_SEND;
+ sreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(sreq), comm->rank, tag,
+ comm->context_id + context_offset);
+ MPIDI_POSIX_REQUEST(sreq)->user_buf = (char *) buf;
+ MPIDI_POSIX_REQUEST(sreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(sreq)->dest = rank;
+ MPIDI_POSIX_REQUEST(sreq)->datatype = datatype;
+ MPIDI_POSIX_REQUEST(sreq)->type = MPIDI_POSIX_TYPEBUFFERED;
+ *request = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+ return mpi_errno;
+}
+
+static inline int MPIDI_SHM_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+ MPIDI_POSIX_REQUEST_CREATE_SREQ(sreq);
+ MPIR_Object_set_ref(sreq, 1);
+ MPIR_cc_set(&(sreq)->cc, 0);
+ sreq->kind = MPIR_REQUEST_KIND__PREQUEST_SEND;
+ sreq->comm = comm;
+ MPIR_Comm_add_ref(comm);
+ MPIDI_POSIX_ENVELOPE_SET(MPIDI_POSIX_REQUEST(sreq), comm->rank, tag,
+ comm->context_id + context_offset);
+ MPIDI_POSIX_REQUEST(sreq)->user_buf = (char *) buf;
+ MPIDI_POSIX_REQUEST(sreq)->user_count = count;
+ MPIDI_POSIX_REQUEST(sreq)->dest = rank;
+ MPIDI_POSIX_REQUEST(sreq)->datatype = datatype;
+ MPIDI_POSIX_REQUEST(sreq)->type = MPIDI_POSIX_TYPEREADY;
+ *request = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+ return mpi_errno;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_isend)
+static inline int MPIDI_SHM_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ mpi_errno =
+ MPIDI_POSIX_do_isend(buf, count, datatype, rank, tag, comm, context_offset, request,
+ MPIDI_POSIX_TYPESTANDARD);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+ return mpi_errno;
+}
+
+static inline int MPIDI_SHM_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+
+ mpi_errno =
+ MPIDI_POSIX_do_isend(buf, count, datatype, rank, tag, comm, context_offset, request,
+ MPIDI_POSIX_TYPESYNC);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+ return mpi_errno;
+}
+
+static inline int MPIDI_SHM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_Request *req = MPIDI_POSIX_sendq.head;
+ MPIR_Request *prev_req = NULL;
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+
+ while (req) {
+ if (req == sreq) {
+ MPIR_STATUS_SET_CANCEL_BIT(sreq->status, TRUE);
+ MPIR_STATUS_SET_COUNT(sreq->status, 0);
+ MPIDI_POSIX_REQUEST_COMPLETE(sreq);
+ MPIDI_POSIX_REQUEST_DEQUEUE_AND_SET_ERROR(&sreq, prev_req, MPIDI_POSIX_sendq,
+ mpi_errno);
+ break;
+ }
+
+ prev_req = req;
+ req = MPIDI_POSIX_REQUEST(req)->next;
+ }
+
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_POSIX_SHM_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+ return mpi_errno;
+}
+
+#endif /* POSIX_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_spawn.h b/src/mpid/ch4/shm/posix/posix_spawn.h
new file mode 100644
index 0000000..eacb66b
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_spawn.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_SPAWN_H_INCLUDED
+#define POSIX_SPAWN_H_INCLUDED
+
+#include "posix_impl.h"
+
+static inline int MPIDI_SHM_mpi_comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_close_port(const char *port_name)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+ return MPI_SUCCESS;
+}
+
+#endif /* POSIX_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_unimpl.h b/src/mpid/ch4/shm/posix/posix_unimpl.h
new file mode 100644
index 0000000..763000c
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_unimpl.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif /* POSIX_UNIMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/posix_win.h b/src/mpid/ch4/shm/posix/posix_win.h
new file mode 100644
index 0000000..3c69eb7
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/posix_win.h
@@ -0,0 +1,312 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef POSIX_WIN_H_INCLUDED
+#define POSIX_WIN_H_INCLUDED
+
+#include "posix_impl.h"
+
+static inline int MPIDI_SHM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_complete(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_wait(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_sync(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush_all(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+ return MPI_SUCCESS;
+}
+
+
+#endif /* POSIX_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/shm_direct.h b/src/mpid/ch4/shm/posix/shm_direct.h
new file mode 100644
index 0000000..9173da2
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/shm_direct.h
@@ -0,0 +1,27 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef SHM_DIRECT_H_INCLUDED
+#define SHM_DIRECT_H_INCLUDED
+
+#include "posix_init.h"
+#include "posix_probe.h"
+#include "posix_progress.h"
+#include "posix_recv.h"
+#include "posix_request.h"
+#include "posix_send.h"
+#include "posix_win.h"
+#include "posix_rma.h"
+#include "posix_am.h"
+#include "posix_spawn.h"
+#include "posix_comm.h"
+#include "posix_coll.h"
+#include "posix_unimpl.h"
+
+#endif /* SHM_DIRECT_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/posix/subconfigure.m4 b/src/mpid/ch4/shm/posix/subconfigure.m4
new file mode 100644
index 0000000..0a32273
--- /dev/null
+++ b/src/mpid/ch4/shm/posix/subconfigure.m4
@@ -0,0 +1,53 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_BEFORE=src/mpid/common/shm
+dnl MPICH_SUBCFG_AFTER=src/mpid/ch4
+
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_COND_IF([BUILD_CH4],[
+ for shm in $ch4_shm ; do
+ AS_CASE([$shm],[posix],[build_ch4_shm_posix=yes])
+ done
+
+ AC_ARG_WITH(ch4-shmmod-posix-args,
+ [ --with-ch4-shmmod-posix-args=arg1:arg2:arg3
+ CH4 POSIX shmmod arguments:
+ disable-lock-free-queues - Disable atomics and lock-free queues
+ ],
+ [posix_shmmod_args=$withval],
+ [posix_shmmod_args=])
+
+dnl Parse the shmmod arguments
+ SAVE_IFS=$IFS
+ IFS=':'
+ args_array=$posix_shmmod_args
+ do_disable_lock_free_queues=false
+ echo "Parsing Arguments for POSIX shmmod"
+ for arg in $args_array; do
+ case ${arg} in
+ disable-lock-free-queues)
+ do_disable_lock_free_queues=true
+ echo " ---> CH4::SHM::POSIX : $arg"
+ ;;
+ esac
+ done
+ IFS=$SAVE_IFS
+
+ if [test "$do_disable_lock_free_queues" = "true"]; then
+ AC_MSG_NOTICE([Disabling POSIX shared memory lock free queues])
+ else
+ AC_MSG_NOTICE([Enabling POSIX shared memory lock free queues])
+ PAC_APPEND_FLAG([-DMPIDI_POSIX_USE_LOCK_FREE_QUEUES],[CPPFLAGS])
+ fi
+ # the POSIX shmmod depends on the common shm code
+ build_mpid_common_shm=yes
+ ])
+ AM_CONDITIONAL([BUILD_SHM_POSIX],[test "X$build_ch4_shm_posix" = "Xyes"])
+])dnl
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_SHM_POSIX],[
+ AC_MSG_NOTICE([RUNNING CONFIGURE FOR ch4:shm:posix])
+])dnl end AM_COND_IF(BUILD_SHM_POSIX,...)
+])dnl end _BODY
+
+[#] end of __file__
diff --git a/src/mpid/ch4/shm/stubshm/Makefile.mk b/src/mpid/ch4/shm/stubshm/Makefile.mk
new file mode 100644
index 0000000..b1dcb01
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/Makefile.mk
@@ -0,0 +1,7 @@
+if BUILD_SHM_STUBSHM
+
+mpi_core_sources += src/mpid/ch4/shm/stubshm/globals.c \
+ src/mpid/ch4/shm/stubshm/func_table.c
+# errnames_txt_files += src/mpid/ch4/shm/stub/errnames.txt
+
+endif
diff --git a/src/mpid/ch4/shm/stubshm/func_table.c b/src/mpid/ch4/shm/stubshm/func_table.c
new file mode 100644
index 0000000..58a28dd
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/func_table.c
@@ -0,0 +1,155 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifndef SHM_DIRECT
+#define SHM_DISABLE_INLINES
+#include <mpidimpl.h>
+#include "shm_direct.h"
+MPIDI_SHM_funcs_t MPIDI_SHM_stubshm_funcs = {
+ MPIDI_SHM_mpi_init_hook,
+ MPIDI_SHM_mpi_finalize_hook,
+ MPIDI_SHM_progress,
+ MPIDI_SHM_mpi_comm_connect,
+ MPIDI_SHM_mpi_comm_disconnect,
+ MPIDI_SHM_mpi_open_port,
+ MPIDI_SHM_mpi_close_port,
+ MPIDI_SHM_mpi_comm_accept,
+ MPIDI_SHM_am_send_hdr,
+ MPIDI_SHM_am_isend,
+ MPIDI_SHM_inject_am,
+ MPIDI_SHM_am_isendv,
+ MPIDI_SHM_inject_amv,
+ MPIDI_SHM_am_send_hdr_reply,
+ MPIDI_SHM_am_isend_reply,
+ MPIDI_SHM_inject_am_reply,
+ MPIDI_SHM_inject_amv_reply,
+ MPIDI_SHM_am_hdr_max_sz,
+ MPIDI_SHM_am_inject_max_sz,
+ MPIDI_SHM_am_recv,
+ MPIDI_SHM_comm_get_lpid,
+ MPIDI_SHM_get_node_id,
+ MPIDI_SHM_get_max_node_id,
+ MPIDI_SHM_get_local_upids,
+ MPIDI_SHM_upids_to_lupids,
+ MPIDI_SHM_create_intercomm_from_lpids,
+ MPIDI_SHM_mpi_comm_create_hook,
+ MPIDI_SHM_mpi_comm_free_hook,
+ MPIDI_SHM_mpi_type_create_hook,
+ MPIDI_SHM_mpi_type_free_hook,
+ MPIDI_SHM_mpi_op_create_hook,
+ MPIDI_SHM_mpi_op_free_hook,
+ MPIDI_SHM_am_request_init,
+};
+
+MPIDI_SHM_native_funcs_t MPIDI_SHM_native_stubshm_funcs = {
+ MPIDI_SHM_mpi_send,
+ MPIDI_SHM_mpi_ssend,
+ MPIDI_SHM_mpi_startall,
+ MPIDI_SHM_mpi_send_init,
+ MPIDI_SHM_mpi_ssend_init,
+ MPIDI_SHM_mpi_rsend_init,
+ MPIDI_SHM_mpi_bsend_init,
+ MPIDI_SHM_mpi_isend,
+ MPIDI_SHM_mpi_issend,
+ MPIDI_SHM_mpi_cancel_send,
+ MPIDI_SHM_mpi_recv_init,
+ MPIDI_SHM_mpi_recv,
+ MPIDI_SHM_mpi_irecv,
+ MPIDI_SHM_mpi_imrecv,
+ MPIDI_SHM_mpi_cancel_recv,
+ MPIDI_SHM_mpi_alloc_mem,
+ MPIDI_SHM_mpi_free_mem,
+ MPIDI_SHM_mpi_improbe,
+ MPIDI_SHM_mpi_iprobe,
+ MPIDI_SHM_mpi_win_set_info,
+ MPIDI_SHM_mpi_win_shared_query,
+ MPIDI_SHM_mpi_put,
+ MPIDI_SHM_mpi_win_start,
+ MPIDI_SHM_mpi_win_complete,
+ MPIDI_SHM_mpi_win_post,
+ MPIDI_SHM_mpi_win_wait,
+ MPIDI_SHM_mpi_win_test,
+ MPIDI_SHM_mpi_win_lock,
+ MPIDI_SHM_mpi_win_unlock,
+ MPIDI_SHM_mpi_win_get_info,
+ MPIDI_SHM_mpi_get,
+ MPIDI_SHM_mpi_win_free,
+ MPIDI_SHM_mpi_win_fence,
+ MPIDI_SHM_mpi_win_create,
+ MPIDI_SHM_mpi_accumulate,
+ MPIDI_SHM_mpi_win_attach,
+ MPIDI_SHM_mpi_win_allocate_shared,
+ MPIDI_SHM_mpi_rput,
+ MPIDI_SHM_mpi_win_flush_local,
+ MPIDI_SHM_mpi_win_detach,
+ MPIDI_SHM_mpi_compare_and_swap,
+ MPIDI_SHM_mpi_raccumulate,
+ MPIDI_SHM_mpi_rget_accumulate,
+ MPIDI_SHM_mpi_fetch_and_op,
+ MPIDI_SHM_mpi_win_allocate,
+ MPIDI_SHM_mpi_win_flush,
+ MPIDI_SHM_mpi_win_flush_local_all,
+ MPIDI_SHM_mpi_win_unlock_all,
+ MPIDI_SHM_mpi_win_create_dynamic,
+ MPIDI_SHM_mpi_rget,
+ MPIDI_SHM_mpi_win_sync,
+ MPIDI_SHM_mpi_win_flush_all,
+ MPIDI_SHM_mpi_get_accumulate,
+ MPIDI_SHM_mpi_win_lock_all,
+ MPIDI_SHM_mpi_barrier,
+ MPIDI_SHM_mpi_bcast,
+ MPIDI_SHM_mpi_allreduce,
+ MPIDI_SHM_mpi_allgather,
+ MPIDI_SHM_mpi_allgatherv,
+ MPIDI_SHM_mpi_scatter,
+ MPIDI_SHM_mpi_scatterv,
+ MPIDI_SHM_mpi_gather,
+ MPIDI_SHM_mpi_gatherv,
+ MPIDI_SHM_mpi_alltoall,
+ MPIDI_SHM_mpi_alltoallv,
+ MPIDI_SHM_mpi_alltoallw,
+ MPIDI_SHM_mpi_reduce,
+ MPIDI_SHM_mpi_reduce_scatter,
+ MPIDI_SHM_mpi_reduce_scatter_block,
+ MPIDI_SHM_mpi_scan,
+ MPIDI_SHM_mpi_exscan,
+ MPIDI_SHM_mpi_neighbor_allgather,
+ MPIDI_SHM_mpi_neighbor_allgatherv,
+ MPIDI_SHM_mpi_neighbor_alltoall,
+ MPIDI_SHM_mpi_neighbor_alltoallv,
+ MPIDI_SHM_mpi_neighbor_alltoallw,
+ MPIDI_SHM_mpi_ineighbor_allgather,
+ MPIDI_SHM_mpi_ineighbor_allgatherv,
+ MPIDI_SHM_mpi_ineighbor_alltoall,
+ MPIDI_SHM_mpi_ineighbor_alltoallv,
+ MPIDI_SHM_mpi_ineighbor_alltoallw,
+ MPIDI_SHM_mpi_ibarrier,
+ MPIDI_SHM_mpi_ibcast,
+ MPIDI_SHM_mpi_iallgather,
+ MPIDI_SHM_mpi_iallgatherv,
+ MPIDI_SHM_mpi_iallreduce,
+ MPIDI_SHM_mpi_ialltoall,
+ MPIDI_SHM_mpi_ialltoallv,
+ MPIDI_SHM_mpi_ialltoallw,
+ MPIDI_SHM_mpi_iexscan,
+ MPIDI_SHM_mpi_igather,
+ MPIDI_SHM_mpi_igatherv,
+ MPIDI_SHM_mpi_ireduce_scatter_block,
+ MPIDI_SHM_mpi_ireduce_scatter,
+ MPIDI_SHM_mpi_ireduce,
+ MPIDI_SHM_mpi_iscan,
+ MPIDI_SHM_mpi_iscatter,
+ MPIDI_SHM_mpi_iscatterv,
+};
+#endif
diff --git a/src/mpid/ch4/shm/stubshm/globals.c b/src/mpid/ch4/shm/stubshm/globals.c
new file mode 100644
index 0000000..74ad1a3
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/globals.c
@@ -0,0 +1,13 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include <mpidimpl.h>
+#include "stubshm_impl.h"
diff --git a/src/mpid/ch4/shm/stubshm/shm_direct.h b/src/mpid/ch4/shm/stubshm/shm_direct.h
new file mode 100644
index 0000000..69fd12b
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/shm_direct.h
@@ -0,0 +1,27 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef SHM_DIRECT_H_INCLUDED
+#define SHM_DIRECT_H_INCLUDED
+
+#include "stubshm_init.h"
+#include "stubshm_probe.h"
+#include "stubshm_progress.h"
+#include "stubshm_recv.h"
+#include "stubshm_request.h"
+#include "stubshm_send.h"
+#include "stubshm_win.h"
+#include "stubshm_rma.h"
+#include "stubshm_am.h"
+#include "stubshm_spawn.h"
+#include "stubshm_comm.h"
+#include "stubshm_coll.h"
+#include "stubshm_unimpl.h"
+
+#endif /* SHM_DIRECT_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_am.h b/src/mpid/ch4/shm/stubshm/stubshm_am.h
new file mode 100644
index 0000000..af4a949
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_am.h
@@ -0,0 +1,193 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_AM_H_INCLUDED
+#define STUBSHM_AM_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_am_isend(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_isendv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISENDV);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_isend_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count,
+ MPI_Datatype datatype, MPIR_Request * sreq)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_ISEND_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline size_t MPIDI_SHM_am_hdr_max_sz(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_HDR_MAX_SZ);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_send_hdr(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr, size_t am_hdr_sz, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_am(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AM);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AM);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_amv(int rank,
+ MPIR_Comm * comm,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype, void *shm_context)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AMV);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_am_send_hdr_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id, const void *am_hdr, size_t am_hdr_sz)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_SEND_HDR_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_am_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id,
+ const void *am_hdr,
+ size_t am_hdr_sz,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AM_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_inject_amv_reply(MPIR_Context_id_t context_id, int src_rank,
+ int handler_id,
+ struct iovec *am_hdr,
+ size_t iov_len,
+ const void *data,
+ MPI_Count count, MPI_Datatype datatype)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_INJECT_AMV_REPLY);
+ return MPI_SUCCESS;
+}
+
+static inline size_t MPIDI_SHM_am_inject_max_sz(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_INJECT_MAX_SZ);
+ return 0;
+}
+
+static inline int MPIDI_SHM_am_recv(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_RECV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_RECV);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_AM_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_coll.h b/src/mpid/ch4/shm/stubshm/stubshm_coll.h
new file mode 100644
index 0000000..8ccf40a
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_coll.h
@@ -0,0 +1,800 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_COLL_H_INCLUDED
+#define STUBSHM_COLL_H_INCLUDED
+
+#include "stubshm_impl.h"
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BARRIER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_bcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BCAST);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_allreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLREDUCE);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLGATHER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLGATHERV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_gather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GATHER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_gatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GATHERV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCATTER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_scatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCATTERV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALL);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_alltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLTOALLW);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_reduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_reduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_reduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_REDUCE_SCATTER_BLOCK);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_scan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SCAN);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_exscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_EXSCAN);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLGATHERV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALL);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_neighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_neighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_NEIGHBOR_ALLTOALLW);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_allgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_allgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLGATHERV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_alltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALL);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_alltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_alltoallv(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ineighbor_alltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf,
+ const int recvcounts[],
+ const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INEIGHBOR_ALLTOALLW);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ibarrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ibarrier(MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IBARRIER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ibcast
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IBCAST);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iallgather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iallgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLGATHER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iallgatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLGATHERV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ialltoall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALL);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ialltoallv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ialltoallw
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype sendtypes[],
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLTOALLW);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iexscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IEXSCAN);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_igather
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IGATHER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_igatherv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IGATHERV);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ireduce_scatter_block
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER_BLOCK);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ireduce_scatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE_SCATTER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_ireduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IREDUCE);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iallreduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op,
+ MPIR_Comm * comm_ptr, MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IALLREDUCE);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iscan
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm_ptr,
+ MPI_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCAN);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iscatter
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCATTER);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_iscatterv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root,
+ MPIR_Comm * comm, MPI_Request * request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISCATTERV);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_COLL_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_comm.h b/src/mpid/ch4/shm/stubshm/stubshm_comm.h
new file mode 100644
index 0000000..2001424
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_comm.h
@@ -0,0 +1,38 @@
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_COMM_H_INCLUDED
+#define STUBSHM_COMM_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_mpi_comm_create_hook(MPIR_Comm * comm)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_CREATE_HOOK);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_comm_free_hook(MPIR_Comm * comm)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_FREE_HOOK);
+ return MPI_SUCCESS;
+}
+
+
+#endif /* STUBSHM_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_impl.h b/src/mpid/ch4/shm/stubshm/stubshm_impl.h
new file mode 100644
index 0000000..f72507c
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_impl.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_IMPL_H_INCLUDED
+#define STUBSHM_IMPL_H_INCLUDED
+
+#endif /* STUBSHM_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_init.h b/src/mpid/ch4/shm/stubshm/stubshm_init.h
new file mode 100644
index 0000000..cdf1226
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_init.h
@@ -0,0 +1,187 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_INIT_H_INCLUDED
+#define STUBSHM_INIT_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_mpi_init_hook(int rank, int size)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_INIT_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_INIT_HOOK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_INIT_HOOK);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_finalize_hook(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_FINALIZE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_FINALIZE_HOOK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_FINALIZE_HOOK);
+ return MPI_SUCCESS;
+}
+
+static inline void *MPIDI_SHM_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ALLOC_MEM);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ALLOC_MEM);
+ return NULL;
+}
+
+static inline int MPIDI_SHM_mpi_free_mem(void *ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_FREE_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_FREE_MEM);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_FREE_MEM);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_comm_get_lpid(MPIR_Comm * comm_ptr,
+ int idx, int *lpid_ptr, MPL_bool is_remote)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_COMM_GET_LPID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_COMM_GET_LPID);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_COMM_GET_LPID);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_get_node_id(MPIR_Comm * comm, int rank, MPID_Node_id_t * id_p)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_GET_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_GET_NODE_ID);
+
+ *id_p = (MPID_Node_id_t) 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_GET_NODE_ID);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_get_max_node_id(MPIR_Comm * comm, MPID_Node_id_t * max_id_p)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_GET_MAX_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_GET_MAX_NODE_ID);
+
+ *max_id_p = (MPID_Node_id_t) 1;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_GET_MAX_NODE_ID);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_get_local_upids(MPIR_Comm * comm, size_t ** local_upid_size,
+ char **local_upids)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_GET_LOCAL_UPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_GET_LOCAL_UPIDS);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_GET_LOCAL_UPIDS);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_upids_to_lupids(int size,
+ size_t * remote_upid_size,
+ char *remote_upids, int **remote_lupids)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_UPIDS_TO_LUPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_UPIDS_TO_LUPIDS);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_UPIDS_TO_LUPIDS);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_CREATE_INTERCOMM_FROM_LPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_CREATE_INTERCOMM_FROM_LPIDS);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_CREATE_INTERCOMM_FROM_LPIDS);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_type_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_type_create_hook(MPIR_Datatype * type)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_TYPE_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_TYPE_CREATE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_TYPE_CREATE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_type_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_type_free_hook(MPIR_Datatype * type)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_TYPE_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_TYPE_FREE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_TYPE_FREE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_op_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_op_create_hook(MPIR_Op * op)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_OP_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_OP_CREATE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_OP_CREATE_HOOK);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_SHM_mpi_op_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_SHM_mpi_op_free_hook(MPIR_Op * op)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_OP_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_OP_FREE_HOOK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_OP_FREE_HOOK);
+ return mpi_errno;
+}
+
+#endif /* STUBSHM_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_pre.h b/src/mpid/ch4/shm/stubshm/stubshm_pre.h
new file mode 100644
index 0000000..c70292e
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_pre.h
@@ -0,0 +1,27 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef STUBSHM_PRE_H_INCLUDED
+#define STUBSHM_PRE_H_INCLUDED
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBSHM_am_request_t;
+
+typedef struct {
+ int dummy;
+} MPIDI_STUBSHM_request_t;
+
+typedef struct MPIDI_STUBSHM_comm_t {
+ int dummy;
+} MPIDI_STUBSHM_comm_t;
+
+#endif /* STUBSHM_PRE_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_probe.h b/src/mpid/ch4/shm/stubshm/stubshm_probe.h
new file mode 100644
index 0000000..4e65f7a
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_probe.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_PROBE_H_INCLUDED
+#define STUBSHM_PROBE_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+
+static inline int MPIDI_SHM_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IMPROBE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IPROBE);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_proc.h b/src/mpid/ch4/shm/stubshm/stubshm_proc.h
new file mode 100644
index 0000000..d12a271
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_proc.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_PROC_H_INCLUDED
+#define STUBSHM_PROC_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_rank_is_local(int rank, MPIR_Comm * comm)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_RANK_IS_LOCAL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_RANK_IS_LOCAL);
+ return MPI_SUCCESS;
+}
+#endif /* STUBSHM_PROC_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_progress.h b/src/mpid/ch4/shm/stubshm/stubshm_progress.h
new file mode 100644
index 0000000..1b32e44
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_progress.h
@@ -0,0 +1,148 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_PROGRESS_H_INCLUDED
+#define STUBSHM_PROGRESS_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_do_progress_recv(int blocking, int *completion_count)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_DO_PROGRESS_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_DO_PROGRESS_RECV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_DO_PROGRESS_RECV);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_do_progress_send(int blocking, int *completion_count)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_DO_PROGRESS_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_DO_PROGRESS_SEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_DO_PROGRESS_SEND);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress(int blocking)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_test(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_TEST);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_TEST);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_poke(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_POKE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_POKE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_POKE);
+ return MPI_SUCCESS;
+}
+
+static inline void MPIDI_SHM_progress_start(MPID_Progress_state * state)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_START);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_START);
+ return MPI_SUCCESS;
+}
+
+static inline void MPIDI_SHM_progress_end(MPID_Progress_state * state)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_END);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_END);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_END);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_wait(MPID_Progress_state * state)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_WAIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_WAIT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_register(int (*progress_fn) (int *))
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_REGISTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_REGISTER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_REGISTER);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_deregister(int id)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_DEREGISTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_DEREGISTER);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_DEREGISTER);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_activate(int id)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_ACTIVATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_ACTIVATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_ACTIVATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_progress_deactivate(int id)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_PROGRESS_DEACTIVATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_PROGRESS_DEACTIVATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_PROGRESS_DEACTIVATE);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_PROGRESS_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_recv.h b/src/mpid/ch4/shm/stubshm/stubshm_recv.h
new file mode 100644
index 0000000..c398c3f
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_recv.h
@@ -0,0 +1,97 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_RECV_H_INCLUDED
+#define STUBSHM_RECV_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_recv)
+static inline int MPIDI_SHM_mpi_recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RECV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RECV);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RECV_INIT);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IMRECV);
+ return MPI_SUCCESS;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_irecv)
+static inline int MPIDI_SHM_mpi_irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_IRECV);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_cancel_recv(MPIR_Request * rreq)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CANCEL_RECV);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_request.h b/src/mpid/ch4/shm/stubshm/stubshm_request.h
new file mode 100644
index 0000000..ef12ddf
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_request.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_REQUEST_H_INCLUDED
+#define STUBSHM_REQUEST_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline void MPIDI_SHM_am_request_init(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_INIT);
+}
+
+static inline void MPIDI_SHM_am_request_finalize(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_AM_REQUEST_FINALIZE);
+}
+
+#endif /* STUBSHM_REQUEST_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_rma.h b/src/mpid/ch4/shm/stubshm/stubshm_rma.h
new file mode 100644
index 0000000..cba17c6
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_rma.h
@@ -0,0 +1,195 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_RMA_H_INCLUDED
+#define STUBSHM_RMA_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_PUT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_PUT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GET);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GET);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RPUT);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMPARE_AND_SWAP);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RGET_ACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_FETCH_AND_OP);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RGET);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RGET);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_GET_ACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ACCUMULATE);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_send.h b/src/mpid/ch4/shm/stubshm/stubshm_send.h
new file mode 100644
index 0000000..2c38306
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_send.h
@@ -0,0 +1,192 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_SEND_H_INCLUDED
+#define STUBSHM_SEND_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_mpi_send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SEND);
+ return MPI_SUCCESS;
+}
+
+
+
+
+static inline int MPIDI_SHM_irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_IRSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_IRSEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_IRSEND);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SSEND);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_startall(int count, MPIR_Request * requests[])
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_STARTALL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SEND_INIT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_SSEND_INIT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_BSEND_INIT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_RSEND_INIT);
+ return MPI_SUCCESS;
+}
+
+#undef FCNAME
+#define FCNAME DECL_FUNC(MPIDI_SHM_mpi_isend)
+static inline int MPIDI_SHM_mpi_isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset, MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISEND);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_ISSEND);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_cancel_send(MPIR_Request * sreq)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CANCEL_SEND);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_spawn.h b/src/mpid/ch4/shm/stubshm/stubshm_spawn.h
new file mode 100644
index 0000000..46d1961
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_spawn.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_SPAWN_H_INCLUDED
+#define STUBSHM_SPAWN_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_mpi_comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_CONNECT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_DISCONNECT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_OPEN_PORT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_close_port(const char *port_name)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_CLOSE_PORT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_COMM_ACCEPT);
+ return MPI_SUCCESS;
+}
+
+#endif /* STUBSHM_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_unimpl.h b/src/mpid/ch4/shm/stubshm/stubshm_unimpl.h
new file mode 100644
index 0000000..8bc3c91
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_unimpl.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif /* STUBSHM_UNIMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/stubshm_win.h b/src/mpid/ch4/shm/stubshm/stubshm_win.h
new file mode 100644
index 0000000..e9f1aab
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/stubshm_win.h
@@ -0,0 +1,312 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef STUBSHM_WIN_H_INCLUDED
+#define STUBSHM_WIN_H_INCLUDED
+
+#include "stubshm_impl.h"
+
+static inline int MPIDI_SHM_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SET_INFO);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_START);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_complete(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_COMPLETE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_POST);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_wait(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_WAIT);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_TEST);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_GET_INFO);
+ return MPI_SUCCESS;
+}
+
+
+static inline int MPIDI_SHM_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FREE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_fence(int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FENCE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ATTACH);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE_SHARED);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_DETACH);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SHARED_QUERY);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_ALLOCATE);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL_ALL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_unlock_all(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_UNLOCK_ALL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_CREATE_DYNAMIC);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_LOCAL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_sync(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_SYNC);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_flush_all(MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_FLUSH_ALL);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDI_SHM_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SHM_MPI_WIN_LOCK_ALL);
+ return MPI_SUCCESS;
+}
+
+
+#endif /* STUBSHM_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/shm/stubshm/subconfigure.m4 b/src/mpid/ch4/shm/stubshm/subconfigure.m4
new file mode 100644
index 0000000..9e6d42a
--- /dev/null
+++ b/src/mpid/ch4/shm/stubshm/subconfigure.m4
@@ -0,0 +1,19 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_AFTER=src/mpid/ch4
+
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_COND_IF([BUILD_CH4],[
+ for shm in $ch4_shm ; do
+ AS_CASE([$shm],[stubshm],[build_ch4_shm_stubshm=yes])
+ done
+ ])
+ AM_CONDITIONAL([BUILD_SHM_STUBSHM],[test "X$build_ch4_shm_stubshm" = "Xyes"])
+])dnl
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_SHM_STUBSHM],[
+ AC_MSG_NOTICE([RUNNING CONFIGURE FOR ch4:shm:stubshm])
+])dnl end AM_COND_IF(BUILD_SHM_STUBSHM,...)
+])dnl end _BODY
+
+[#] end of __file__
diff --git a/src/mpid/ch4/src/Makefile.mk b/src/mpid/ch4/src/Makefile.mk
new file mode 100644
index 0000000..783280d
--- /dev/null
+++ b/src/mpid/ch4/src/Makefile.mk
@@ -0,0 +1,43 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+## Portions of this code were written by Intel Corporation.
+## Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+## to Argonne National Laboratory subject to Software Grant and Corporate
+## Contributor License Agreement dated February 8, 2012.
+##
+
+AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/ch4/src
+
+noinst_HEADERS += src/mpid/ch4/src/ch4_comm.h \
+ src/mpid/ch4/src/ch4_init.h \
+ src/mpid/ch4/src/ch4_progress.h \
+ src/mpid/ch4/src/ch4_request.h \
+ src/mpid/ch4/src/ch4_send.h \
+ src/mpid/ch4/src/ch4_types.h \
+ src/mpid/ch4/src/ch4_impl.h \
+ src/mpid/ch4/src/ch4_probe.h \
+ src/mpid/ch4/src/ch4_proc.h \
+ src/mpid/ch4/src/ch4_recv.h \
+ src/mpid/ch4/src/ch4_rma.h \
+ src/mpid/ch4/src/ch4_spawn.h \
+ src/mpid/ch4/src/ch4_win.h \
+ src/mpid/ch4/src/ch4r_probe.h \
+ src/mpid/ch4/src/ch4r_rma.h \
+ src/mpid/ch4/src/ch4r_win.h \
+ src/mpid/ch4/src/ch4r_init.h \
+ src/mpid/ch4/src/ch4r_proc.h \
+ src/mpid/ch4/src/ch4i_comm.h \
+ src/mpid/ch4/src/ch4r_recvq.h \
+ src/mpid/ch4/src/ch4r_recv.h \
+ src/mpid/ch4/src/ch4i_util.h \
+ src/mpid/ch4/src/ch4r_symheap.h \
+ src/mpid/ch4/src/ch4r_buf.h \
+ src/mpid/ch4/src/ch4r_request.h
+
+mpi_core_sources += src/mpid/ch4/src/ch4_globals.c \
+ src/mpid/ch4/src/mpid_ch4_net_array.c \
+ src/mpid/ch4/src/mpid_ch4_shm_array.c
diff --git a/src/mpid/ch4/src/ch4_coll.h b/src/mpid/ch4/src/ch4_coll.h
new file mode 100644
index 0000000..eb8ee7b
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_coll.h
@@ -0,0 +1,751 @@
+/* -*- Mode: C ; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_COLL_H_INCLUDED
+#define CH4_COLL_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4r_proc.h"
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Barrier(MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_BARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_BARRIER);
+
+ ret = MPIDI_NM_mpi_barrier(comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_BARRIER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Bcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_BCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_BCAST);
+
+ ret = MPIDI_NM_mpi_bcast(buffer, count, datatype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_BCAST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Allreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLREDUCE);
+
+ ret = MPIDI_NM_mpi_allreduce(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLGATHER);
+
+ ret = MPIDI_NM_mpi_allgather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLGATHERV);
+
+ ret = MPIDI_NM_mpi_allgatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Scatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SCATTER);
+
+ ret = MPIDI_NM_mpi_scatter(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Scatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SCATTERV);
+
+ ret = MPIDI_NM_mpi_scatterv(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SCATTERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GATHER);
+
+ ret = MPIDI_NM_mpi_gather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Gatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GATHERV);
+
+ ret = MPIDI_NM_mpi_gatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, root, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLTOALL);
+
+ ret = MPIDI_NM_mpi_alltoall(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLTOALLV);
+
+ ret = MPIDI_NM_mpi_alltoallv(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Alltoallw(const void *sendbuf, const int sendcounts[],
+ const int sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[],
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLTOALLW);
+
+ ret = MPIDI_NM_mpi_alltoallw(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Reduce(const void *sendbuf, void *recvbuf,
+ int count, MPI_Datatype datatype, MPI_Op op,
+ int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REDUCE);
+
+ ret = MPIDI_NM_mpi_reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Reduce_scatter(const void *sendbuf, void *recvbuf,
+ const int recvcounts[], MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REDUCE_SCATTER);
+
+ ret = MPIDI_NM_mpi_reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr,
+ errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REDUCE_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm_ptr,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REDUCE_SCATTER_BLOCK);
+
+ ret = MPIDI_NM_mpi_reduce_scatter_block(sendbuf, recvbuf, recvcount,
+ datatype, op, comm_ptr, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REDUCE_SCATTER_BLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Scan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SCAN);
+
+ ret = MPIDI_NM_mpi_scan(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Exscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPIR_Errflag_t * errflag)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_EXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_EXSCAN);
+
+ ret = MPIDI_NM_mpi_exscan(sendbuf, recvbuf, count, datatype, op, comm, errflag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_EXSCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Neighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEIGHBOR_ALLGATHER);
+
+ ret = MPIDI_NM_mpi_neighbor_allgather(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEIGHBOR_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Neighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEIGHBOR_ALLGATHERV);
+
+ ret = MPIDI_NM_mpi_neighbor_allgatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEIGHBOR_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Neighbor_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALLV);
+
+ ret = MPIDI_NM_mpi_neighbor_alltoallv(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Neighbor_alltoallw(const void *sendbuf, const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes, void *recvbuf,
+ const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALLW);
+
+ ret = MPIDI_NM_mpi_neighbor_alltoallw(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Neighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALL);
+
+ ret = MPIDI_NM_mpi_neighbor_alltoall(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_NEIGHBOR_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ineighbor_allgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INEIGHBOR_ALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INEIGHBOR_ALLGATHER);
+
+ ret = MPIDI_NM_mpi_ineighbor_allgather(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INEIGHBOR_ALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ineighbor_allgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INEIGHBOR_ALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INEIGHBOR_ALLGATHERV);
+
+ ret = MPIDI_NM_mpi_ineighbor_allgatherv(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INEIGHBOR_ALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ineighbor_alltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALL);
+
+ ret = MPIDI_NM_mpi_ineighbor_alltoall(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ineighbor_alltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALLV);
+
+ ret = MPIDI_NM_mpi_ineighbor_alltoallv(sendbuf, sendcounts, sdispls,
+ sendtype, recvbuf, recvcounts, rdispls, recvtype, comm,
+ req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ineighbor_alltoallw(const void *sendbuf, const int *sendcounts,
+ const MPI_Aint * sdispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const MPI_Aint * rdispls,
+ const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALLW);
+
+ ret = MPIDI_NM_mpi_ineighbor_alltoallw(sendbuf, sendcounts, sdispls,
+ sendtypes, recvbuf, recvcounts, rdispls, recvtypes,
+ comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INEIGHBOR_ALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ibarrier(MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IBARRIER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IBARRIER);
+
+ ret = MPIDI_NM_mpi_ibarrier(comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IBARRIER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ibcast(void *buffer, int count, MPI_Datatype datatype,
+ int root, MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IBCAST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IBCAST);
+
+ ret = MPIDI_NM_mpi_ibcast(buffer, count, datatype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IBCAST);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iallgather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IALLGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IALLGATHER);
+
+ ret = MPIDI_NM_mpi_iallgather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IALLGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iallgatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IALLGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IALLGATHERV);
+
+ ret = MPIDI_NM_mpi_iallgatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IALLGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iallreduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IALLREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IALLREDUCE);
+
+ ret = MPIDI_NM_mpi_iallreduce(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IALLREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ialltoall(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IALLTOALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IALLTOALL);
+
+ ret = MPIDI_NM_mpi_ialltoall(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IALLTOALL);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ialltoallv(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IALLTOALLV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IALLTOALLV);
+
+ ret = MPIDI_NM_mpi_ialltoallv(sendbuf, sendcounts, sdispls, sendtype,
+ recvbuf, recvcounts, rdispls, recvtype, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IALLTOALLV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ialltoallw(const void *sendbuf, const int *sendcounts,
+ const int *sdispls, const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts,
+ const int *rdispls, const MPI_Datatype * recvtypes,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IALLTOALLW);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IALLTOALLW);
+
+ ret = MPIDI_NM_mpi_ialltoallw(sendbuf, sendcounts, sdispls, sendtypes,
+ recvbuf, recvcounts, rdispls, recvtypes, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IALLTOALLW);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iexscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IEXSCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IEXSCAN);
+
+ ret = MPIDI_NM_mpi_iexscan(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IEXSCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Igather(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IGATHER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IGATHER);
+
+ ret = MPIDI_NM_mpi_igather(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IGATHER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Igatherv(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IGATHERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IGATHERV);
+
+ ret = MPIDI_NM_mpi_igatherv(sendbuf, sendcount, sendtype, recvbuf,
+ recvcounts, displs, recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IGATHERV);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf,
+ int recvcount, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IREDUCE_SCATTER_BLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IREDUCE_SCATTER_BLOCK);
+
+ ret = MPIDI_NM_mpi_ireduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IREDUCE_SCATTER_BLOCK);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ireduce_scatter(const void *sendbuf, void *recvbuf,
+ const int *recvcounts, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IREDUCE_SCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IREDUCE_SCATTER);
+
+ ret = MPIDI_NM_mpi_ireduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IREDUCE_SCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ireduce(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root,
+ MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IREDUCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IREDUCE);
+
+ ret = MPIDI_NM_mpi_ireduce(sendbuf, recvbuf, count, datatype, op, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IREDUCE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iscan(const void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ISCAN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ISCAN);
+
+ ret = MPIDI_NM_mpi_iscan(sendbuf, recvbuf, count, datatype, op, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ISCAN);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iscatter(const void *sendbuf, int sendcount,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount,
+ MPI_Datatype recvtype, int root, MPIR_Comm * comm,
+ MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ISCATTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ISCATTER);
+
+ ret = MPIDI_NM_mpi_iscatter(sendbuf, sendcount, sendtype, recvbuf,
+ recvcount, recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ISCATTER);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iscatterv(const void *sendbuf, const int *sendcounts,
+ const int *displs, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPIR_Comm * comm, MPI_Request * req)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ISCATTERV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ISCATTERV);
+
+ ret = MPIDI_NM_mpi_iscatterv(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype, root, comm, req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ISCATTERV);
+ return ret;
+}
+
+#endif /* CH4_COLL_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_comm.h b/src/mpid/ch4/src/ch4_comm.h
new file mode 100644
index 0000000..c87294c
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_comm.h
@@ -0,0 +1,623 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_COMM_H_INCLUDED
+#define CH4_COMM_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4i_comm.h"
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_AS_enabled(MPIR_Comm * comm)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_AS_ENABLED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_AS_ENABLED);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_AS_ENABLED);
+ return MPI_SUCCESS;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_reenable_anysource(MPIR_Comm * comm,
+ MPIR_Group ** failed_group_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_REENABLE_ANYSOURCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_REENABLE_ANYSOURCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_REENABLE_ANYSOURCE);
+ return MPI_SUCCESS;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_remote_group_failed(MPIR_Comm * comm,
+ MPIR_Group ** failed_group_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_REMOTE_GROUP_FAILED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_REMOTE_GROUP_FAILED);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_REMOTE_GROUP_FAILED);
+ return MPI_SUCCESS;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_group_failed(MPIR_Comm * comm_ptr,
+ MPIR_Group ** failed_group_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_GROUP_FAILED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_GROUP_FAILED);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_GROUP_FAILED);
+ return MPI_SUCCESS;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_failure_ack(MPIR_Comm * comm_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_FAILURE_ACK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_FAILURE_ACK);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_FAILURE_ACK);
+ return 0;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_failure_get_acked(MPIR_Comm * comm_ptr,
+ MPIR_Group ** failed_group_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_FAILURE_GET_ACKED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_FAILURE_GET_ACKED);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_FAILURE_GET_ACKED);
+ return 0;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_revoke(MPIR_Comm * comm_ptr, int is_remote)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_REVOKE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_REVOKE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_REVOKE);
+ return 0;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_get_all_failed_procs(MPIR_Comm * comm_ptr,
+ MPIR_Group ** failed_group, int tag)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_GET_ALL_FAILED_PROCS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_GET_ALL_FAILED_PROCS);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_GET_ALL_FAILED_PROCS);
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_split_type
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_split_type(MPIR_Comm * comm_ptr,
+ int split_type,
+ int key, MPIR_Info * info_ptr,
+ MPIR_Comm ** newcomm_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int idx;
+ MPID_Node_id_t node_id;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_SPLIT_TYPE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_SPLIT_TYPE);
+
+ if (split_type == MPI_COMM_TYPE_SHARED) {
+ MPIDI_Comm_get_lpid(comm_ptr, comm_ptr->rank, &idx, FALSE);
+ MPIDI_Get_node_id(comm_ptr, comm_ptr->rank, &node_id);
+ mpi_errno = MPIR_Comm_split_impl(comm_ptr, node_id, key, newcomm_ptr);
+ }
+ else
+ mpi_errno = MPIR_Comm_split_impl(comm_ptr, MPI_UNDEFINED, key, newcomm_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_SPLIT_TYPE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_create_hook(MPIR_Comm * comm)
+{
+ int mpi_errno;
+ int i, *uniq_avtids;
+ int max_n_avts;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_CREATE_HOOK);
+ mpi_errno = MPIDI_NM_mpi_comm_create_hook(comm);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_comm_create_hook(comm);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#endif
+
+ /* comm_world and comm_self are already initialized */
+ if (comm != MPIR_Process.comm_world && comm != MPIR_Process.comm_self) {
+ MPIDI_comm_create_rank_map(comm);
+ /* add ref to avts */
+ switch (MPIDI_COMM(comm, map).mode) {
+ case MPIDI_RANK_MAP_NONE:
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ max_n_avts = MPIDIU_get_max_n_avts();
+ uniq_avtids = (int *) MPL_malloc(max_n_avts * sizeof(int));
+ memset(uniq_avtids, 0, max_n_avts);
+ for (i = 0; i < MPIDI_COMM(comm, map).size; i++) {
+ if (uniq_avtids[MPIDI_COMM(comm, map).irreg.mlut.gpid[i].avtid] == 0) {
+ uniq_avtids[MPIDI_COMM(comm, map).irreg.mlut.gpid[i].avtid] = 1;
+ MPIDIU_avt_add_ref(MPIDI_COMM(comm, map).irreg.mlut.gpid[i].avtid);
+ }
+ }
+ MPL_free(uniq_avtids);
+ break;
+ default:
+ MPIDIU_avt_add_ref(MPIDI_COMM(comm, map).avtid);
+ }
+
+ switch (MPIDI_COMM(comm, local_map).mode) {
+ case MPIDI_RANK_MAP_NONE:
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ max_n_avts = MPIDIU_get_max_n_avts();
+ uniq_avtids = (int *) MPL_malloc(max_n_avts * sizeof(int));
+ memset(uniq_avtids, 0, max_n_avts);
+ for (i = 0; i < MPIDI_COMM(comm, local_map).size; i++) {
+ if (uniq_avtids[MPIDI_COMM(comm, local_map).irreg.mlut.gpid[i].avtid] == 0) {
+ uniq_avtids[MPIDI_COMM(comm, local_map).irreg.mlut.gpid[i].avtid] = 1;
+ MPIDIU_avt_add_ref(MPIDI_COMM(comm, local_map).irreg.mlut.gpid[i].avtid);
+ }
+ }
+ MPL_free(uniq_avtids);
+ break;
+ default:
+ MPIDIU_avt_add_ref(MPIDI_COMM(comm, local_map).avtid);
+ }
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_CREATE_HOOK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_free_hook(MPIR_Comm * comm)
+{
+ int mpi_errno;
+ int i, *uniq_avtids;
+ int max_n_avts;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_FREE_HOOK);
+ /* release ref to avts */
+ switch (MPIDI_COMM(comm, map).mode) {
+ case MPIDI_RANK_MAP_NONE:
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ max_n_avts = MPIDIU_get_max_n_avts();
+ uniq_avtids = (int *) MPL_malloc(max_n_avts * sizeof(int));
+ memset(uniq_avtids, 0, max_n_avts);
+ for (i = 0; i < MPIDI_COMM(comm, map).size; i++) {
+ if (uniq_avtids[MPIDI_COMM(comm, map).irreg.mlut.gpid[i].avtid] == 0) {
+ uniq_avtids[MPIDI_COMM(comm, map).irreg.mlut.gpid[i].avtid] = 1;
+ MPIDIU_avt_release_ref(MPIDI_COMM(comm, map).irreg.mlut.gpid[i].avtid);
+ }
+ }
+ MPL_free(uniq_avtids);
+ break;
+ default:
+ MPIDIU_avt_release_ref(MPIDI_COMM(comm, map).avtid);
+ }
+
+ switch (MPIDI_COMM(comm, local_map).mode) {
+ case MPIDI_RANK_MAP_NONE:
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ max_n_avts = MPIDIU_get_max_n_avts();
+ uniq_avtids = (int *) MPL_malloc(max_n_avts * sizeof(int));
+ memset(uniq_avtids, 0, max_n_avts);
+ for (i = 0; i < MPIDI_COMM(comm, local_map).size; i++) {
+ if (uniq_avtids[MPIDI_COMM(comm, local_map).irreg.mlut.gpid[i].avtid] == 0) {
+ uniq_avtids[MPIDI_COMM(comm, local_map).irreg.mlut.gpid[i].avtid] = 1;
+ MPIDIU_avt_release_ref(MPIDI_COMM(comm, local_map).irreg.mlut.gpid[i].avtid);
+ }
+ }
+ MPL_free(uniq_avtids);
+ break;
+ default:
+ MPIDIU_avt_release_ref(MPIDI_COMM(comm, local_map).avtid);
+ }
+
+ mpi_errno = MPIDI_NM_mpi_comm_free_hook(comm);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_comm_free_hook(comm);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#endif
+
+ if (MPIDI_COMM(comm, map).mode == MPIDI_RANK_MAP_LUT
+ || MPIDI_COMM(comm, map).mode == MPIDI_RANK_MAP_LUT_INTRA) {
+ MPIDIU_release_lut(MPIDI_COMM(comm, map).irreg.lut.t);
+ }
+ if (MPIDI_COMM(comm, local_map).mode == MPIDI_RANK_MAP_LUT
+ || MPIDI_COMM(comm, local_map).mode == MPIDI_RANK_MAP_LUT_INTRA) {
+ MPIDIU_release_lut(MPIDI_COMM(comm, local_map).irreg.lut.t);
+ }
+ if (MPIDI_COMM(comm, map).mode == MPIDI_RANK_MAP_MLUT) {
+ MPIDIU_release_mlut(MPIDI_COMM(comm, map).irreg.mlut.t);
+ }
+ if (MPIDI_COMM(comm, local_map).mode == MPIDI_RANK_MAP_MLUT) {
+ MPIDIU_release_mlut(MPIDI_COMM(comm, local_map).irreg.mlut.t);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_FREE_HOOK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Intercomm_upid_lupid_bcast_intra
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Intercomm_map_bcast_intra(MPIR_Comm * local_comm,
+ int local_leader,
+ int *remote_size,
+ int *is_low_group,
+ int pure_intracomm,
+ size_t * remote_upid_size,
+ char *remote_upids,
+ int **remote_lupids,
+ MPID_Node_id_t * remote_node_ids)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i;
+ int upid_recv_size = 0;
+ int map_info[4];
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ size_t *_remote_upid_size = NULL;
+
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(2);
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INTERCOMM_MAP_BCAST_INTRA);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INTERCOMM_MAP_BCAST_INTRA);
+
+ if (local_comm->rank == local_leader) {
+ if (!pure_intracomm) {
+ for (i = 0; i < (*remote_size); i++) {
+ upid_recv_size += remote_upid_size[i];
+ }
+ }
+ map_info[0] = *remote_size;
+ map_info[1] = upid_recv_size;
+ map_info[2] = *is_low_group;
+ map_info[3] = pure_intracomm;
+ mpi_errno = MPIR_Bcast_intra(map_info, 4, MPI_INT, local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (!pure_intracomm) {
+ mpi_errno = MPIR_Bcast_intra(remote_upid_size, *remote_size, MPI_UNSIGNED_LONG,
+ local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ mpi_errno = MPIR_Bcast_intra(remote_upids, upid_recv_size, MPI_BYTE,
+ local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ mpi_errno =
+ MPIR_Bcast_intra(remote_node_ids, (*remote_size) * sizeof(MPID_Node_id_t), MPI_BYTE,
+ local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ else {
+ mpi_errno = MPIR_Bcast_intra(*remote_lupids, *remote_size, MPI_INT,
+ local_leader, local_comm, &errflag);
+ }
+ }
+ else {
+ mpi_errno = MPIR_Bcast_intra(map_info, 4, MPI_INT, local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ *remote_size = map_info[0];
+ upid_recv_size = map_info[1];
+ *is_low_group = map_info[2];
+ pure_intracomm = map_info[3];
+
+ MPIR_CHKPMEM_MALLOC((*remote_lupids), int *, (*remote_size) * sizeof(int),
+ mpi_errno, "remote_lupids");
+ if (!pure_intracomm) {
+ MPIR_CHKLMEM_MALLOC(_remote_upid_size, size_t *, (*remote_size) * sizeof(size_t),
+ mpi_errno, "_remote_upid_size");
+ mpi_errno = MPIR_Bcast_intra(_remote_upid_size, *remote_size, MPI_UNSIGNED_LONG,
+ local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ MPIR_CHKLMEM_MALLOC(remote_upids, char *, upid_recv_size * sizeof(char),
+ mpi_errno, "remote_upids");
+ mpi_errno = MPIR_Bcast_intra(remote_upids, upid_recv_size, MPI_BYTE,
+ local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ mpi_errno =
+ MPIR_Bcast_intra(remote_node_ids, (*remote_size) * sizeof(MPID_Node_id_t), MPI_BYTE,
+ local_leader, local_comm, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_upids_to_lupids(*remote_size, _remote_upid_size, remote_upids,
+ remote_lupids, remote_node_ids);
+ }
+ else {
+ mpi_errno = MPIR_Bcast_intra(*remote_lupids, *remote_size, MPI_INT,
+ local_leader, local_comm, &errflag);
+ }
+ }
+
+ MPIR_CHKPMEM_COMMIT();
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INTERCOMM_MAP_BCAST_INTRA);
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Intercomm_exchange_map
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Intercomm_exchange_map(MPIR_Comm * local_comm,
+ int local_leader,
+ MPIR_Comm * peer_comm,
+ int remote_leader,
+ int *remote_size,
+ int **remote_lupids, int *is_low_group)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i;
+ int avtid = 0, lpid;
+ int local_avtid = 0, remote_avtid = 0;
+ int local_size_send = 0, remote_size_recv = 0;
+ int cts_tag = 0;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ int pure_intracomm = 0;
+ int local_size = 0;
+ MPID_Node_id_t *local_node_ids = NULL, *remote_node_ids = NULL;
+ int *local_lupids = NULL;
+ size_t *local_upid_size = NULL, *remote_upid_size = NULL;
+ int upid_send_size = 0, upid_recv_size = 0;
+ char *local_upids = NULL, *remote_upids = NULL;
+
+ /*
+ * CH4 only cares about LUPID. GUPID extraction and exchange should be done
+ * by netmod
+ */
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INTERCOMM_EXCHANGE_MAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INTERCOMM_EXCHANGE_MAP);
+
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(5);
+
+ cts_tag = 0 | MPIR_Process.tagged_coll_mask;
+ local_size = local_comm->local_size;
+
+ /*
+ * Stage 1: UPID exchange and LUPID conversion in leaders
+ */
+ if (local_comm->rank == local_leader) {
+ /* embedded dynamic process info in size */
+ MPIDIU_comm_rank_to_pid(local_comm, local_leader, &lpid, &local_avtid);
+ MPIDIU_comm_rank_to_pid(peer_comm, remote_leader, &lpid, &remote_avtid);
+ if (local_avtid == 0 && remote_avtid == 0) {
+ pure_intracomm = 1;
+ local_size_send = local_size;
+ }
+ else {
+ local_size_send = local_size | MPIDI_DYNPROC_MASK;
+ }
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST, "rank %d sendrecv to rank %d",
+ peer_comm->rank, remote_leader));
+ mpi_errno = MPIC_Sendrecv(&local_size_send, 1, MPI_INT,
+ remote_leader, cts_tag,
+ &remote_size_recv, 1, MPI_INT,
+ remote_leader, cts_tag, peer_comm, MPI_STATUS_IGNORE, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (remote_size_recv & MPIDI_DYNPROC_MASK)
+ pure_intracomm = 0;
+ (*remote_size) = remote_size_recv & (~MPIDI_DYNPROC_MASK);
+
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST, "local size = %d, remote size = %d, pure_intracomm = %d",
+ local_size, *remote_size, pure_intracomm));
+
+ MPIR_CHKPMEM_MALLOC((*remote_lupids), int *, (*remote_size) * sizeof(int),
+ mpi_errno, "remote_lupids");
+ MPIR_CHKLMEM_MALLOC(local_lupids, int *, local_size * sizeof(int),
+ mpi_errno, "local_lupids");
+ for (i = 0; i < local_size; i++) {
+ MPIDIU_comm_rank_to_pid(local_comm, i, &lpid, &avtid);
+ local_lupids[i] = MPIDIU_LUPID_CREATE(avtid, lpid);
+ }
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST, "Intercomm map exchange stage 1: leaders"));
+ if (!pure_intracomm) {
+ /* Stage 1.1 UPID exchange between leaders */
+ MPIR_CHKLMEM_MALLOC(remote_upid_size, size_t *, (*remote_size) * sizeof(size_t),
+ mpi_errno, "remote_upid_size");
+
+ mpi_errno = MPIDI_NM_get_local_upids(local_comm, &local_upid_size, &local_upids);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ mpi_errno = MPIC_Sendrecv(local_upid_size, local_size, MPI_UNSIGNED_LONG,
+ remote_leader, cts_tag,
+ remote_upid_size, *remote_size, MPI_UNSIGNED_LONG,
+ remote_leader, cts_tag,
+ peer_comm, MPI_STATUS_IGNORE, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ upid_send_size = 0;
+ for (i = 0; i < local_size; i++)
+ upid_send_size += local_upid_size[i];
+ upid_recv_size = 0;
+ for (i = 0; i < *remote_size; i++)
+ upid_recv_size += remote_upid_size[i];
+ MPIR_CHKLMEM_MALLOC(remote_upids, char *, upid_recv_size * sizeof(char),
+ mpi_errno, "remote_upids");
+ mpi_errno = MPIC_Sendrecv(local_upids, upid_send_size, MPI_BYTE,
+ remote_leader, cts_tag,
+ remote_upids, upid_recv_size, MPI_BYTE,
+ remote_leader, cts_tag,
+ peer_comm, MPI_STATUS_IGNORE, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIR_CHKLMEM_MALLOC(local_node_ids, MPID_Node_id_t *,
+ local_size * sizeof(MPID_Node_id_t), mpi_errno, "local_node_ids");
+ MPIR_CHKLMEM_MALLOC(remote_node_ids, MPID_Node_id_t *,
+ (*remote_size) * sizeof(MPID_Node_id_t),
+ mpi_errno, "remote_node_ids");
+ for (i = 0; i < local_size; i++) {
+ MPIDI_CH4U_get_node_id(local_comm, i, &local_node_ids[i]);
+ }
+ mpi_errno = MPIC_Sendrecv(local_node_ids, local_size * sizeof(MPID_Node_id_t), MPI_BYTE,
+ remote_leader, cts_tag,
+ remote_node_ids, (*remote_size) * sizeof(MPID_Node_id_t),
+ MPI_BYTE, remote_leader, cts_tag, peer_comm,
+ MPI_STATUS_IGNORE, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* Stage 1.2 convert remote UPID to LUPID and get LUPID for local group */
+ MPIDI_upids_to_lupids(*remote_size, remote_upid_size, remote_upids,
+ remote_lupids, remote_node_ids);
+ }
+ else {
+ /* Stage 1.1f only exchange LUPIDS if no dynamic process involved */
+ mpi_errno = MPIC_Sendrecv(local_lupids, local_size, MPI_INT,
+ remote_leader, cts_tag,
+ *remote_lupids, *remote_size, MPI_INT,
+ remote_leader, cts_tag,
+ peer_comm, MPI_STATUS_IGNORE, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ /* Stage 1.3 check if local/remote groups are disjoint */
+
+ /*
+ * Error checking for this routine requires care. Because this
+ * routine is collective over two different sets of processes,
+ * it is relatively easy for the user to try to create an
+ * intercommunicator from two overlapping groups of processes.
+ * This is made more likely by inconsistencies in the MPI-1
+ * specification (clarified in MPI-2) that seemed to allow
+ * the groups to overlap. Because of that, we first check that the
+ * groups are in fact disjoint before performing any collective
+ * operations.
+ */
+
+#ifdef HAVE_ERROR_CHECKING
+ {
+ MPID_BEGIN_ERROR_CHECKS;
+ {
+ /* Now that we have both the local and remote processes,
+ * check for any overlap */
+ mpi_errno = MPIDI_check_disjoint_lupids(local_lupids, local_size,
+ *remote_lupids, *remote_size);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ MPID_END_ERROR_CHECKS;
+ }
+#endif /* HAVE_ERROR_CHECKING */
+
+ /*
+ * Make an arbitrary decision about which group of processs is
+ * the low group. The LEADERS do this by comparing the
+ * local process ids of the 0th member of the two groups
+ * LUPID itself is not enough for determine is_low_group because both
+ * local group is always smaller than remote
+ */
+ if (pure_intracomm) {
+ *is_low_group = local_lupids[0] < (*remote_lupids)[0];
+ }
+ else {
+ if (local_upid_size[0] == remote_upid_size[0]) {
+ *is_low_group = memcmp(local_upids, remote_upids, local_upid_size[0]);
+ }
+ else {
+ *is_low_group = local_upid_size[0] < remote_upid_size[0];
+ }
+ (*is_low_group) |= MPIDI_DYNPROC_MASK;
+ }
+
+ /* At this point, we're done with the local lpids; they'll
+ * be freed with the other local memory on exit */
+ local_lupids = NULL;
+ }
+
+ /*
+ * Stage 2. Bcast UPID to non-leaders (intra-group)
+ */
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST, "Intercomm map exchange stage 2: intra-group"));
+ mpi_errno = MPIDI_Intercomm_map_bcast_intra(local_comm, local_leader,
+ remote_size, is_low_group, pure_intracomm,
+ remote_upid_size, remote_upids,
+ remote_lupids, remote_node_ids);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIR_CHKPMEM_COMMIT();
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INTERCOMM_EXCHANGE_MAP);
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+#endif /* CH4_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_globals.c b/src/mpid/ch4/src/ch4_globals.c
new file mode 100644
index 0000000..3671769
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_globals.c
@@ -0,0 +1,63 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+/* All global ADI data structures need to go in this file */
+/* reference them with externs from other files */
+
+#include <mpidimpl.h>
+#include "ch4_impl.h"
+
+MPIDI_CH4_Global_t MPIDI_CH4_Global;
+MPIDI_av_table_t **MPIDI_av_table;
+MPIDI_av_table_t *MPIDI_av_table0;
+
+MPIDI_NM_funcs_t *MPIDI_NM_func;
+MPIDI_NM_native_funcs_t *MPIDI_NM_native_func;
+
+#ifdef MPIDI_BUILD_CH4_SHM
+MPIDI_SHM_funcs_t *MPIDI_SHM_func;
+MPIDI_SHM_native_funcs_t *MPIDI_SHM_native_func;
+#endif
+
+#ifdef MPID_DEVICE_DEFINES_THREAD_CS
+pthread_mutex_t MPIDI_Mutex_lock[MPIDI_NUM_LOCKS];
+#endif
+
+/* The MPID_Abort ADI is strangely defined by the upper layers */
+/* We should fix the upper layer to define MPID_Abort like any */
+/* Other ADI */
+#ifdef MPID_Abort
+#define MPID_TMP MPID_Abort
+#undef MPID_Abort
+int MPID_Abort(MPIR_Comm * comm, int mpi_errno, int exit_code, const char *error_msg)
+{
+ return MPIDI_Abort(comm, mpi_errno, exit_code, error_msg);
+}
+
+#define MPID_Abort MPID_TMP
+#endif
+
+/* Another weird ADI that doesn't follow convention */
+static void init_comm() __attribute__ ((constructor));
+static void init_comm()
+{
+ MPIR_Comm_fns = &MPIDI_CH4_Global.MPIR_Comm_fns_store;
+ MPIR_Comm_fns->split_type = MPIDI_Comm_split_type;
+}
+
+MPL_dbg_class MPIDI_CH4_DBG_GENERAL;
+
+#ifdef MPL_USE_DBG_LOGGING
+MPL_dbg_class MPIDI_CH4_DBG_GENERAL;
+MPL_dbg_class MPIDI_CH4_DBG_MAP;
+MPL_dbg_class MPIDI_CH4_DBG_COMM;
+MPL_dbg_class MPIDI_CH4_DBG_MEMORY;
+#endif
diff --git a/src/mpid/ch4/src/ch4_impl.h b/src/mpid/ch4/src/ch4_impl.h
new file mode 100644
index 0000000..b87d52e
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_impl.h
@@ -0,0 +1,749 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_IMPL_H_INCLUDED
+#define CH4_IMPL_H_INCLUDED
+
+#include "ch4_types.h"
+#include <mpidch4.h>
+#include "mpidig.h"
+
+/* Static inlines */
+static inline int MPIDI_CH4U_get_tag(uint64_t match_bits)
+{
+ int tag = (match_bits & MPIDI_CH4U_TAG_MASK);
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_GET_TAG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_GET_TAG);
+
+ /* Left shift and right shift by MPIDI_CH4U_TAG_SHIFT_UNPACK is to make sure the sign of tag is retained */
+ ret = ((tag << MPIDI_CH4U_TAG_SHIFT_UNPACK) >> MPIDI_CH4U_TAG_SHIFT_UNPACK);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_GET_TAG);
+ return ret;
+}
+
+static inline int MPIDI_CH4U_get_context(uint64_t match_bits)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_GET_CONTEXT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_GET_CONTEXT);
+
+ ret = ((int) ((match_bits & MPIDI_CH4U_CONTEXT_MASK) >>
+ (MPIDI_CH4U_TAG_SHIFT + MPIDI_CH4U_SOURCE_SHIFT)));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_GET_CONTEXT);
+ return ret;
+}
+
+static inline int MPIDI_CH4U_get_context_index(uint64_t context_id)
+{
+ int raw_prefix, idx, bitpos, gen_id;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_GET_CONTEXT_INDEX);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_GET_CONTEXT_INDEX);
+
+ raw_prefix = MPIR_CONTEXT_READ_FIELD(PREFIX, context_id);
+ idx = raw_prefix / MPIR_CONTEXT_INT_BITS;
+ bitpos = raw_prefix % MPIR_CONTEXT_INT_BITS;
+ gen_id = (idx * MPIR_CONTEXT_INT_BITS) + (31 - bitpos);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_GET_CONTEXT_INDEX);
+ return gen_id;
+}
+
+static inline MPIR_Comm *MPIDI_CH4U_context_id_to_comm(uint64_t context_id)
+{
+ int comm_idx = MPIDI_CH4U_get_context_index(context_id);
+ int subcomm_type = MPIR_CONTEXT_READ_FIELD(SUBCOMM, context_id);
+ int is_localcomm = MPIR_CONTEXT_READ_FIELD(IS_LOCALCOMM, context_id);
+ MPIR_Comm *ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_CONTEXT_ID_TO_COMM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_CONTEXT_ID_TO_COMM);
+
+ MPIR_Assert(subcomm_type <= 3);
+ MPIR_Assert(is_localcomm <= 2);
+ ret = MPIDI_CH4_Global.comm_req_lists[comm_idx].comm[is_localcomm][subcomm_type];
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_CONTEXT_ID_TO_COMM);
+ return ret;
+}
+
+static inline MPIDI_CH4U_rreq_t **MPIDI_CH4U_context_id_to_uelist(uint64_t context_id)
+{
+ int comm_idx = MPIDI_CH4U_get_context_index(context_id);
+ int subcomm_type = MPIR_CONTEXT_READ_FIELD(SUBCOMM, context_id);
+ int is_localcomm = MPIR_CONTEXT_READ_FIELD(IS_LOCALCOMM, context_id);
+ MPIDI_CH4U_rreq_t **ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_CONTEXT_ID_TO_UELIST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_CONTEXT_ID_TO_UELIST);
+
+ MPIR_Assert(subcomm_type <= 3);
+ MPIR_Assert(is_localcomm <= 2);
+
+ ret = &MPIDI_CH4_Global.comm_req_lists[comm_idx].uelist[is_localcomm][subcomm_type];
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_CONTEXT_ID_TO_UELIST);
+ return ret;
+}
+
+static inline uint64_t MPIDI_CH4U_generate_win_id(MPIR_Comm * comm_ptr)
+{
+ uint64_t ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_GENERATE_WIN_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_GENERATE_WIN_ID);
+
+ /* context id lower bits, window instance upper bits */
+ ret = 1 + (((uint64_t) comm_ptr->context_id) |
+ ((uint64_t) ((MPIDI_CH4U_COMM(comm_ptr, window_instance))++) << 32));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_GENERATE_WIN_ID);
+ return ret;
+}
+
+static inline MPIR_Context_id_t MPIDI_CH4U_win_id_to_context(uint64_t win_id)
+{
+ MPIR_Context_id_t ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_WIN_ID_TO_CONTEXT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_WIN_ID_TO_CONTEXT);
+
+ /* pick the lower 32-bit to extract context id */
+ ret = (win_id - 1) & 0xffffffff;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_WIN_ID_TO_CONTEXT);
+ return ret;
+}
+
+static inline MPIR_Context_id_t MPIDI_CH4U_win_to_context(const MPIR_Win * win)
+{
+ MPIR_Context_id_t ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_WIN_TO_CONTEXT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_WIN_TO_CONTEXT);
+
+ ret = MPIDI_CH4U_win_id_to_context(MPIDI_CH4U_WIN(win, win_id));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_WIN_TO_CONTEXT);
+ return ret;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_request_complete
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4U_request_complete(MPIR_Request * req)
+{
+ int incomplete;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_REQUEST_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_REQUEST_COMPLETE);
+
+ MPIR_cc_decr(req->cc_ptr, &incomplete);
+ if (!incomplete)
+ MPIR_Request_free(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_REQUEST_COMPLETE);
+}
+
+#ifndef dtype_add_ref_if_not_builtin
+#define dtype_add_ref_if_not_builtin(datatype_) \
+ do { \
+ if ((datatype_) != MPI_DATATYPE_NULL && \
+ HANDLE_GET_KIND((datatype_)) != HANDLE_KIND_BUILTIN) \
+ { \
+ MPIR_Datatype *dtp_ = NULL; \
+ MPID_Datatype_get_ptr((datatype_), dtp_); \
+ MPID_Datatype_add_ref(dtp_); \
+ } \
+ } while (0)
+#endif
+
+#ifndef dtype_release_if_not_builtin
+#define dtype_release_if_not_builtin(datatype_) \
+ do { \
+ if ((datatype_) != MPI_DATATYPE_NULL && \
+ HANDLE_GET_KIND((datatype_)) != HANDLE_KIND_BUILTIN) \
+ { \
+ MPIR_Datatype *dtp_ = NULL; \
+ MPID_Datatype_get_ptr((datatype_), dtp_); \
+ MPID_Datatype_release(dtp_); \
+ } \
+ } while (0)
+#endif
+
+#define MPIDI_Datatype_get_info(_count, _datatype, \
+ _dt_contig_out, _data_sz_out, \
+ _dt_ptr, _dt_true_lb) \
+ do { \
+ if (IS_BUILTIN(_datatype)) \
+ { \
+ (_dt_ptr) = NULL; \
+ (_dt_contig_out) = TRUE; \
+ (_dt_true_lb) = 0; \
+ (_data_sz_out) = (size_t)(_count) * \
+ MPID_Datatype_get_basic_size(_datatype); \
+ } \
+ else \
+ { \
+ MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
+ if (_dt_ptr) \
+ { \
+ (_dt_contig_out) = (_dt_ptr)->is_contig; \
+ (_dt_true_lb) = (_dt_ptr)->true_lb; \
+ (_data_sz_out) = (size_t)(_count) * \
+ (_dt_ptr)->size; \
+ } \
+ else \
+ { \
+ (_dt_contig_out) = 1; \
+ (_dt_true_lb) = 0; \
+ (_data_sz_out) = 0; \
+ } \
+ } \
+ } while (0)
+
+#define MPIDI_Datatype_get_size_dt_ptr(_count, _datatype, \
+ _data_sz_out, _dt_ptr) \
+ do { \
+ if (IS_BUILTIN(_datatype)) \
+ { \
+ (_dt_ptr) = NULL; \
+ (_data_sz_out) = (size_t)(_count) * \
+ MPID_Datatype_get_basic_size(_datatype); \
+ } \
+ else \
+ { \
+ MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
+ (_data_sz_out) = (_dt_ptr) ? (size_t)(_count) * \
+ (_dt_ptr)->size : 0; \
+ } \
+ } while (0)
+
+#define MPIDI_Datatype_check_contig(_datatype,_dt_contig_out) \
+ do { \
+ if (IS_BUILTIN(_datatype)) \
+ { \
+ (_dt_contig_out) = TRUE; \
+ } \
+ else \
+ { \
+ MPIR_Datatype *_dt_ptr; \
+ MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
+ (_dt_contig_out) = (_dt_ptr) ? (_dt_ptr)->is_contig : 1; \
+ } \
+ } while (0)
+
+#define MPIDI_Datatype_check_contig_size(_datatype,_count, \
+ _dt_contig_out, \
+ _data_sz_out) \
+ do { \
+ if (IS_BUILTIN(_datatype)) \
+ { \
+ (_dt_contig_out) = TRUE; \
+ (_data_sz_out) = (size_t)(_count) * \
+ MPID_Datatype_get_basic_size(_datatype); \
+ } \
+ else \
+ { \
+ MPIR_Datatype *_dt_ptr; \
+ MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
+ if (_dt_ptr) \
+ { \
+ (_dt_contig_out) = (_dt_ptr)->is_contig; \
+ (_data_sz_out) = (size_t)(_count) * \
+ (_dt_ptr)->size; \
+ } \
+ else \
+ { \
+ (_dt_contig_out) = 1; \
+ (_data_sz_out) = 0; \
+ } \
+ } \
+ } while (0)
+
+#define MPIDI_Datatype_check_size(_datatype,_count,_data_sz_out) \
+ do { \
+ if (IS_BUILTIN(_datatype)) \
+ { \
+ (_data_sz_out) = (size_t)(_count) * \
+ MPID_Datatype_get_basic_size(_datatype); \
+ } \
+ else \
+ { \
+ MPIR_Datatype *_dt_ptr; \
+ MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
+ (_data_sz_out) = (_dt_ptr) ? (size_t)(_count) * \
+ (_dt_ptr)->size : 0; \
+ } \
+ } while (0)
+
+#define MPIDI_Datatype_check_contig_size_lb(_datatype,_count, \
+ _dt_contig_out, \
+ _data_sz_out, \
+ _dt_true_lb) \
+ do { \
+ if (IS_BUILTIN(_datatype)) \
+ { \
+ (_dt_contig_out) = TRUE; \
+ (_data_sz_out) = (size_t)(_count) * \
+ MPID_Datatype_get_basic_size(_datatype); \
+ (_dt_true_lb) = 0; \
+ } \
+ else \
+ { \
+ MPIR_Datatype *_dt_ptr; \
+ MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
+ if (_dt_ptr) \
+ { \
+ (_dt_contig_out) = (_dt_ptr)->is_contig; \
+ (_data_sz_out) = (size_t)(_count) * \
+ (_dt_ptr)->size; \
+ (_dt_true_lb) = (_dt_ptr)->true_lb; \
+ } \
+ else \
+ { \
+ (_dt_contig_out) = 1; \
+ (_data_sz_out) = 0; \
+ (_dt_true_lb) = 0; \
+ } \
+ } \
+ } while (0)
+
+#define MPIDI_Request_create_null_rreq(rreq_, mpi_errno_, FAIL_) \
+ do { \
+ (rreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__RECV); \
+ if ((rreq_) != NULL) { \
+ MPIR_cc_set(&(rreq_)->cc, 0); \
+ MPIR_Status_set_procnull(&(rreq_)->status); \
+ } \
+ else { \
+ MPIR_ERR_SETANDJUMP(mpi_errno_,MPI_ERR_OTHER,"**nomemreq"); \
+ } \
+ } while (0)
+
+#define IS_BUILTIN(_datatype) \
+ (HANDLE_GET_KIND(_datatype) == HANDLE_KIND_BUILTIN)
+
+#ifndef container_of
+#define container_of(ptr, type, field) \
+ ((type *) ((char *)ptr - offsetof(type, field)))
+#endif
+
+static inline uint64_t MPIDI_CH4U_init_send_tag(MPIR_Context_id_t contextid, int source, int tag)
+{
+ uint64_t match_bits;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_INIT_SEND_TAG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_INIT_SEND_TAG);
+
+ match_bits = contextid;
+ match_bits = (match_bits << MPIDI_CH4U_SOURCE_SHIFT);
+ match_bits |= (source & (MPIDI_CH4U_SOURCE_MASK >> MPIDI_CH4U_TAG_SHIFT));
+ match_bits = (match_bits << MPIDI_CH4U_TAG_SHIFT);
+ match_bits |= (MPIDI_CH4U_TAG_MASK & tag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_INIT_SEND_TAG);
+ return match_bits;
+}
+
+static inline uint64_t MPIDI_CH4U_init_recvtag(uint64_t * mask_bits,
+ MPIR_Context_id_t contextid, int source, int tag)
+{
+ uint64_t match_bits = 0;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_INIT_RECVTAG);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_INIT_RECVTAG);
+
+ *mask_bits = MPIDI_CH4U_PROTOCOL_MASK;
+ match_bits = contextid;
+ match_bits = (match_bits << MPIDI_CH4U_SOURCE_SHIFT);
+
+ if (MPI_ANY_SOURCE == source) {
+ match_bits = (match_bits << MPIDI_CH4U_TAG_SHIFT);
+ *mask_bits |= MPIDI_CH4U_SOURCE_MASK;
+ }
+ else {
+ match_bits |= source;
+ match_bits = (match_bits << MPIDI_CH4U_TAG_SHIFT);
+ }
+
+ if (MPI_ANY_TAG == tag)
+ *mask_bits |= MPIDI_CH4U_TAG_MASK;
+ else
+ match_bits |= (MPIDI_CH4U_TAG_MASK & tag);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_INIT_RECVTAG);
+ return match_bits;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4I_valid_group_rank
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4I_valid_group_rank(MPIR_Comm * comm, int rank, MPIR_Group * grp)
+{
+ int lpid;
+ int size = grp->size;
+ int z;
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_VALID_GROUP_RANK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_VALID_GROUP_RANK);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ /* Treat PROC_NULL as always valid */
+ ret = 1;
+ goto fn_exit;
+ }
+
+ MPIDI_NM_comm_get_lpid(comm, rank, &lpid, FALSE);
+
+ for (z = 0; z < size && lpid != grp->lrank_to_lpid[z].lpid; ++z) {
+ }
+
+ ret = (z < size);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_VALID_GROUP_RANK);
+ return ret;
+}
+
+#define MPIDI_CH4R_PROGRESS() \
+ do { \
+ mpi_errno = MPIDI_Progress_test(); \
+ if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP(mpi_errno); \
+ } while (0)
+
+#define MPIDI_CH4R_PROGRESS_WHILE(cond) \
+ do { \
+ while (cond) \
+ MPIDI_CH4R_PROGRESS(); \
+ } while (0)
+
+#ifdef HAVE_ERROR_CHECKING
+#define MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_WIN(win, sync).target_epoch_type && \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_REFENCE) \
+ { \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_FENCE; \
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_FENCE; \
+ } \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_NONE || \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_POST) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_CHECK_TYPE(win,mpi_errno,stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_NONE && \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_REFENCE) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_START_CHECK(win,mpi_errno,stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_START && \
+ !MPIDI_CH4I_valid_group_rank(win->comm_ptr, target_rank, \
+ MPIDI_CH4U_WIN(win, sync).sc.group)) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, \
+ MPI_ERR_RMA_SYNC, \
+ stmt, \
+ "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_START_CHECK2(win,mpi_errno,stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_START) { \
+ MPIR_ERR_SETANDSTMT(mpi_errno, \
+ MPI_ERR_RMA_SYNC, \
+ stmt, \
+ "**rmasync"); \
+ } \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_FENCE_CHECK(win,mpi_errno,stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_WIN(win, sync).target_epoch_type) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ if (!(massert & MPI_MODE_NOPRECEDE) && \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_FENCE && \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_REFENCE && \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_NONE) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_POST_CHECK(win,mpi_errno,stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).target_epoch_type != MPIDI_CH4U_EPOTYPE_NONE && \
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type != MPIDI_CH4U_EPOTYPE_REFENCE) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_LOCK_CHECK(win,mpi_errno,stmt) \
+do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if ((MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_LOCK) && \
+ (MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_LOCK_ALL)) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+} while (0)
+
+#define MPIDI_CH4U_EPOCH_FREE_CHECK(win,mpi_errno,stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_WIN(win, sync).target_epoch_type || \
+ (MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_NONE && \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type != MPIDI_CH4U_EPOTYPE_REFENCE)) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_ORIGIN_CHECK(win, epoch_type, mpi_errno, stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type != epoch_type) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_TARGET_CHECK(win, epoch_type, mpi_errno, stmt) \
+ do { \
+ MPID_BEGIN_ERROR_CHECKS; \
+ if (MPIDI_CH4U_WIN(win, sync).target_epoch_type != epoch_type) \
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, \
+ stmt, "**rmasync"); \
+ MPID_END_ERROR_CHECKS; \
+ } while (0)
+
+#else /* HAVE_ERROR_CHECKING */
+#define MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_CHECK_TYPE(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_START_CHECK2(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_FENCE_CHECK(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_POST_CHECK(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_FREE_CHECK(win, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_ORIGIN_CHECK(win, epoch_type, mpi_errno, stmt) if (0) goto fn_fail;
+#define MPIDI_CH4U_EPOCH_TARGET_CHECK(win, epoch_type, mpi_errno, stmt) if (0) goto fn_fail;
+#endif /* HAVE_ERROR_CHECKING */
+
+#define MPIDI_CH4U_EPOCH_FENCE_EVENT(win, massert) \
+ do { \
+ if (massert & MPI_MODE_NOSUCCEED) \
+ { \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_NONE; \
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_NONE; \
+ } \
+ else \
+ { \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_REFENCE; \
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_REFENCE; \
+ } \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_TARGET_EVENT(win) \
+ do { \
+ if (MPIDI_CH4U_WIN(win, sync).target_epoch_type == MPIDI_CH4U_EPOTYPE_REFENCE) \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_REFENCE; \
+ else \
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_NONE; \
+ } while (0)
+
+#define MPIDI_CH4U_EPOCH_ORIGIN_EVENT(Win) \
+ do { \
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_REFENCE) \
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_REFENCE; \
+ else \
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_NONE; \
+ } while (0)
+
+/*
+ Calculate base address of the target window at the origin side
+ Return zero to let the target side calculate the actual address
+ (only offset from window base is given to the target in this case)
+*/
+static inline uintptr_t MPIDI_CH4I_win_base_at_origin(const MPIR_Win * win, int target_rank)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_WIN_BASE_AT_ORIGIN);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_WIN_BASE_AT_ORIGIN);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_WIN_BASE_AT_ORIGIN);
+
+ /* TODO: In future we may want to calculate the full virtual address
+ * in the target at the origin side. It can be done by looking at
+ * MPIDI_CH4U_WINFO(win, target_rank)->base_addr */
+ return 0;
+}
+
+/*
+ Calculate base address of the window at the target side
+ If MPIDI_CH4I_win_base_at_origin calculates the full virtual address
+ this function must return zero
+*/
+static inline uintptr_t MPIDI_CH4I_win_base_at_target(const MPIR_Win * win)
+{
+ uintptr_t ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_WIN_BASE_AT_TARGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_WIN_BASE_AT_TARGET);
+
+ ret = (uintptr_t) win->base;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_WIN_BASE_AT_TARGET);
+ return ret;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_cmpl_cnts_incr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_cmpl_cnts_incr(MPIR_Win * win, int target_rank,
+ MPIR_cc_t ** local_cmpl_cnts_ptr)
+{
+ int c = 0;
+
+ /* Increase per-window counters for fence, and per-target counters for
+ * all other synchronization. */
+ switch (MPIDI_CH4U_WIN(win, sync).origin_epoch_type) {
+ case MPIDI_CH4U_EPOTYPE_LOCK:
+ /* FIXME: now we simply set per-target counters for lockall in case
+ * user flushes per target, but this should be optimized. */
+ case MPIDI_CH4U_EPOTYPE_LOCK_ALL:
+ /* FIXME: now we simply set per-target counters for PSCW, can it be optimized ? */
+ case MPIDI_CH4U_EPOTYPE_START:
+ {
+ MPIDI_CH4U_win_target_t *target_ptr = NULL;
+ target_ptr = &MPIDI_CH4U_WIN(win, targets)[target_rank];
+ MPIR_Assert(target_ptr != NULL);
+
+ MPIR_cc_incr(&target_ptr->local_cmpl_cnts, &c);
+ MPIR_cc_incr(&target_ptr->remote_cmpl_cnts, &c);
+
+ *local_cmpl_cnts_ptr = &target_ptr->local_cmpl_cnts;
+ break;
+ }
+ default:
+ MPIR_cc_incr(&MPIDI_CH4U_WIN(win, local_cmpl_cnts), &c);
+ MPIR_cc_incr(&MPIDI_CH4U_WIN(win, remote_cmpl_cnts), &c);
+
+ *local_cmpl_cnts_ptr = &MPIDI_CH4U_WIN(win, local_cmpl_cnts);
+ break;
+ }
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_remote_cmpl_cnt_decr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_remote_cmpl_cnt_decr(MPIR_Win * win, int target_rank)
+{
+ int c = 0;
+
+ /* Decrease per-window counter for fence, and per-target counters for
+ * all other synchronization. */
+ switch (MPIDI_CH4U_WIN(win, sync).origin_epoch_type) {
+ case MPIDI_CH4U_EPOTYPE_LOCK:
+ case MPIDI_CH4U_EPOTYPE_LOCK_ALL:
+ case MPIDI_CH4U_EPOTYPE_START:
+ {
+ MPIDI_CH4U_win_target_t *target_ptr = NULL;
+ target_ptr = &MPIDI_CH4U_WIN(win, targets)[target_rank];
+ MPIR_Assert(target_ptr != NULL);
+ MPIR_cc_decr(&target_ptr->remote_cmpl_cnts, &c);
+ break;
+ }
+ default:
+ MPIR_cc_decr(&MPIDI_CH4U_WIN(win, remote_cmpl_cnts), &c);
+ break;
+ }
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_check_all_targets_remote_completed
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_check_all_targets_remote_completed(MPIR_Win * win, int *allcompleted)
+{
+ int rank = 0;
+
+ *allcompleted = 1;
+ for (rank = 0; rank < win->comm_ptr->local_size; rank++) {
+ if (MPIR_cc_get(MPIDI_CH4U_WIN_TARGET(win, rank, remote_cmpl_cnts)) != 0) {
+ *allcompleted = 0;
+ break;
+ }
+ }
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_check_all_targets_local_completed
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_check_all_targets_local_completed(MPIR_Win * win, int *allcompleted)
+{
+ int rank = 0;
+
+ *allcompleted = 1;
+ for (rank = 0; rank < win->comm_ptr->local_size; rank++) {
+ if (MPIR_cc_get(MPIDI_CH4U_WIN_TARGET(win, rank, local_cmpl_cnts)) != 0) {
+ *allcompleted = 0;
+ break;
+ }
+ }
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_check_all_targets_local_completed
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_check_group_local_completed(MPIR_Win * win,
+ int *ranks_in_win_grp,
+ int grp_siz, int *allcompleted)
+{
+ int i = 0;
+
+ *allcompleted = 1;
+ for (i = 0; i < grp_siz; i++) {
+ int rank = ranks_in_win_grp[i];
+ if (MPIR_cc_get(MPIDI_CH4U_WIN_TARGET(win, rank, local_cmpl_cnts)) != 0) {
+ *allcompleted = 0;
+ break;
+ }
+ }
+}
+
+#endif /* CH4_IMPL_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_init.h b/src/mpid/ch4/src/ch4_init.h
new file mode 100644
index 0000000..c8bab13
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_init.h
@@ -0,0 +1,832 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_INIT_H_INCLUDED
+#define CH4_INIT_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4r_proc.h"
+#include "ch4i_comm.h"
+#include "strings.h"
+
+/*
+=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
+
+categories:
+ - name : CH4
+ description : cvars that control behavior of the CH4 device
+
+cvars:
+ - name : MPIR_CVAR_CH4_NETMOD
+ category : CH4
+ type : string
+ default : ""
+ class : device
+ verbosity : MPI_T_VERBOSITY_USER_BASIC
+ scope : MPI_T_SCOPE_ALL_EQ
+ description : >-
+ If non-empty, this cvar specifies which network module to use
+
+ - name : MPIR_CVAR_CH4_SHM
+ category : CH4
+ type : string
+ default : ""
+ class : device
+ verbosity : MPI_T_VERBOSITY_USER_BASIC
+ scope : MPI_T_SCOPE_ALL_EQ
+ description : >-
+ If non-empty, this cvar specifies which shm module to use
+
+=== END_MPI_T_CVAR_INFO_BLOCK ===
+*/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_choose_netmod
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_choose_netmod(void)
+{
+ int i, mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CHOOSE_NETMOD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CHOOSE_NETMOD);
+
+ MPIR_Assert(MPIR_CVAR_CH4_NETMOD != NULL);
+
+ if (strcmp(MPIR_CVAR_CH4_NETMOD, "") == 0) {
+ /* netmod not specified, using the default */
+ MPIDI_NM_func = MPIDI_NM_funcs[0];
+ MPIDI_NM_native_func = MPIDI_NM_native_funcs[0];
+ goto fn_exit;
+ }
+
+ for (i = 0; i < MPIDI_num_netmods; ++i) {
+ /* use MPL variant of strncasecmp if we get one */
+ if (!strncasecmp(MPIR_CVAR_CH4_NETMOD, MPIDI_NM_strings[i], MPIDI_MAX_NETMOD_STRING_LEN)) {
+ MPIDI_NM_func = MPIDI_NM_funcs[i];
+ MPIDI_NM_native_func = MPIDI_NM_native_funcs[i];
+ goto fn_exit;
+ }
+ }
+
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**invalid_netmod", "**invalid_netmod %s",
+ MPIR_CVAR_CH4_NETMOD);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CHOOSE_NETMOD);
+ return mpi_errno;
+ fn_fail:
+
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_choose_shm
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_choose_shm(void)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+#ifdef MPIDI_BUILD_CH4_SHM
+ int i;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CHOOSE_SHM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CHOOSE_SHM);
+
+
+ MPIR_Assert(MPIR_CVAR_CH4_SHM != NULL);
+
+ if (strcmp(MPIR_CVAR_CH4_SHM, "") == 0) {
+ /* shm not specified, using the default */
+ MPIDI_SHM_func = MPIDI_SHM_funcs[0];
+ MPIDI_SHM_native_func = MPIDI_SHM_native_funcs[0];
+ goto fn_exit;
+ }
+
+ for (i = 0; i < MPIDI_num_shms; ++i) {
+ /* use MPL variant of strncasecmp if we get one */
+ if (!strncasecmp(MPIR_CVAR_CH4_SHM, MPIDI_SHM_strings[i], MPIDI_MAX_SHM_STRING_LEN)) {
+ MPIDI_SHM_func = MPIDI_SHM_funcs[i];
+ MPIDI_SHM_native_func = MPIDI_SHM_native_funcs[i];
+ goto fn_exit;
+ }
+ }
+
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**ch4|invalid_shm", "**ch4|invalid_shm %s",
+ MPIR_CVAR_CH4_SHM);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CHOOSE_SHM);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+#else
+ return mpi_errno;
+#endif
+}
+
+
+#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ)
+#define MAX_THREAD_MODE MPI_THREAD_MULTIPLE
+#elif (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL)
+#define MAX_THREAD_MODE MPI_THREAD_MULTIPLE
+#elif (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__SINGLE)
+#define MAX_THREAD_MODE MPI_THREAD_SERIALIZED
+#elif (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__LOCKFREE)
+#define MAX_THREAD_MODE MPI_THREAD_SERIALIZED
+#else
+#error "Thread Granularity: Invalid"
+#endif
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Init(int *argc,
+ char ***argv,
+ int requested, int *provided, int *has_args, int *has_env)
+{
+ int pmi_errno, mpi_errno = MPI_SUCCESS, rank, has_parent, size, appnum, thr_err;
+ void *netmod_contexts;
+ int avtid, max_n_avts;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INIT);
+
+#ifdef MPL_USE_DBG_LOGGING
+ MPIDI_CH4_DBG_GENERAL = MPL_dbg_class_alloc("CH4", "ch4");
+ MPIDI_CH4_DBG_MAP = MPL_dbg_class_alloc("CH4_MAP", "ch4_map");
+ MPIDI_CH4_DBG_COMM = MPL_dbg_class_alloc("CH4_COMM", "ch4_comm");
+ MPIDI_CH4_DBG_MEMORY = MPL_dbg_class_alloc("CH4_MEMORY", "ch4_memory");
+#endif
+ MPIDI_choose_netmod();
+ pmi_errno = PMI_Init(&has_parent);
+
+ if (pmi_errno != PMI_SUCCESS) {
+ MPIR_ERR_SETANDJUMP1(pmi_errno, MPI_ERR_OTHER, "**pmi_init", "**pmi_init %d", pmi_errno);
+ }
+
+ pmi_errno = PMI_Get_rank(&rank);
+
+ if (pmi_errno != PMI_SUCCESS) {
+ MPIR_ERR_SETANDJUMP1(pmi_errno, MPI_ERR_OTHER, "**pmi_get_rank",
+ "**pmi_get_rank %d", pmi_errno);
+ }
+
+ pmi_errno = PMI_Get_size(&size);
+
+ if (pmi_errno != 0) {
+ MPIR_ERR_SETANDJUMP1(pmi_errno, MPI_ERR_OTHER, "**pmi_get_size",
+ "**pmi_get_size %d", pmi_errno);
+ }
+
+ pmi_errno = PMI_Get_appnum(&appnum);
+
+ if (pmi_errno != PMI_SUCCESS) {
+ MPIR_ERR_SETANDJUMP1(pmi_errno, MPI_ERR_OTHER, "**pmi_get_appnum",
+ "**pmi_get_appnum %d", pmi_errno);
+ }
+
+ MPID_Thread_mutex_create(&MPIDI_CH4I_THREAD_PROGRESS_MUTEX, &thr_err);
+ MPID_Thread_mutex_create(&MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX, &thr_err);
+
+ /* ---------------------------------- */
+ /* Initialize MPI_COMM_SELF */
+ /* ---------------------------------- */
+ MPIR_Process.comm_self->rank = 0;
+ MPIR_Process.comm_self->remote_size = 1;
+ MPIR_Process.comm_self->local_size = 1;
+
+ /* ---------------------------------- */
+ /* Initialize MPI_COMM_WORLD */
+ /* ---------------------------------- */
+ MPIR_Process.comm_world->rank = rank;
+ MPIR_Process.comm_world->remote_size = size;
+ MPIR_Process.comm_world->local_size = size;
+
+ mpi_errno = MPIDI_choose_shm();
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POPFATAL(mpi_errno);
+ }
+
+ MPIDI_CH4_Global.allocated_max_n_avts = 0;
+ MPIDIU_avt_init();
+ MPIDIU_get_next_avtid(&avtid);
+ MPIR_Assert(avtid == 0);
+ max_n_avts = MPIDIU_get_max_n_avts();
+
+ MPIDI_av_table = (MPIDI_av_table_t **)
+ MPL_malloc(max_n_avts * sizeof(MPIDI_av_table_t *));
+
+ MPIDI_av_table[0] = (MPIDI_av_table_t *)
+ MPL_malloc(size * sizeof(MPIDI_av_entry_t)
+ + sizeof(MPIDI_av_table_t));
+
+ MPIDI_av_table[0]->size = size;
+ MPIR_Object_set_ref(MPIDI_av_table[0], 1);
+
+ MPIDIU_alloc_globals_for_avtid(avtid);
+
+ MPIDI_av_table0 = MPIDI_av_table[0];
+
+ /* initialize rank_map */
+ MPIDI_COMM(MPIR_Process.comm_world, map).mode = MPIDI_RANK_MAP_DIRECT_INTRA;
+ MPIDI_COMM(MPIR_Process.comm_world, map).avtid = 0;
+ MPIDI_COMM(MPIR_Process.comm_world, map).size = size;
+ MPIDI_COMM(MPIR_Process.comm_world, local_map).mode = MPIDI_RANK_MAP_NONE;
+ MPIDIU_avt_add_ref(0);
+
+ MPIDI_COMM(MPIR_Process.comm_self, map).mode = MPIDI_RANK_MAP_OFFSET_INTRA;
+ MPIDI_COMM(MPIR_Process.comm_self, map).avtid = 0;
+ MPIDI_COMM(MPIR_Process.comm_self, map).size = 1;
+ MPIDI_COMM(MPIR_Process.comm_self, map).reg.offset = rank;
+ MPIDI_COMM(MPIR_Process.comm_self, local_map).mode = MPIDI_RANK_MAP_NONE;
+ MPIDIU_avt_add_ref(0);
+
+ MPIR_Process.attrs.tag_ub = (1ULL << MPIDI_CH4U_TAG_SHIFT) - 1;
+ /* discuss */
+
+ mpi_errno = MPIDI_NM_mpi_init_hook(rank, size, appnum, &MPIR_Process.attrs.tag_ub,
+ MPIR_Process.comm_world,
+ MPIR_Process.comm_self, has_parent, 1, &netmod_contexts);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POPFATAL(mpi_errno);
+ }
+
+#ifdef MPIDI_BUILD_CH4_LOCALITY_INFO
+ int i;
+ for (i = 0; i < MPIR_Process.comm_world->local_size; i++) {
+ MPIDI_av_table0->table[i].is_local = 0;
+ }
+ MPIDI_CH4U_build_nodemap(MPIR_Process.comm_world->rank,
+ MPIR_Process.comm_world,
+ MPIR_Process.comm_world->local_size,
+ MPIDI_CH4_Global.node_map[0], &MPIDI_CH4_Global.max_node_id);
+
+ for (i = 0; i < MPIR_Process.comm_world->local_size; i++) {
+ MPIDI_av_table0->table[i].is_local =
+ (MPIDI_CH4_Global.node_map[0][i] ==
+ MPIDI_CH4_Global.node_map[0][MPIR_Process.comm_world->rank]) ? 1 : 0;
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_GENERAL, VERBOSE,
+ (MPL_DBG_FDEST, "WORLD RANK %d %s local", i,
+ MPIDI_av_table0->table[i].is_local ? "is" : "is not"));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_GENERAL, VERBOSE,
+ (MPL_DBG_FDEST, "Node id (i) (me) %d %d", MPIDI_CH4_Global.node_map[0][i],
+ MPIDI_CH4_Global.node_map[0][MPIR_Process.comm_world->rank]));
+ }
+#endif
+
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_init_hook(rank, size);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POPFATAL(mpi_errno);
+ }
+#endif
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ MPIR_Process.attrs.appnum = appnum;
+ MPIR_Process.attrs.wtime_is_global = 1;
+ MPIR_Process.attrs.io = MPI_ANY_SOURCE;
+
+ MPIR_Comm_commit(MPIR_Process.comm_self);
+ MPIR_Comm_commit(MPIR_Process.comm_world);
+
+ /* -------------------------------- */
+ /* Return MPICH Parameters */
+ /* -------------------------------- */
+ switch (requested) {
+ case MPI_THREAD_SINGLE:
+ case MPI_THREAD_SERIALIZED:
+ case MPI_THREAD_FUNNELED:
+ *provided = requested;
+ break;
+
+ case MPI_THREAD_MULTIPLE:
+ *provided = MAX_THREAD_MODE;
+ break;
+ }
+
+ *has_args = TRUE;
+ *has_env = TRUE;
+ MPIDI_CH4_Global.is_initialized = 0;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_InitCompleted
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_InitCompleted(void)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_INITCOMPLETED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_INITCOMPLETED);
+ MPIDI_CH4_Global.is_initialized = 1;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_INITCOMPLETED);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Finalize
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Finalize(void)
+{
+ int mpi_errno, thr_err;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_FINALIZE);
+
+ mpi_errno = MPIDI_NM_mpi_finalize_hook();
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_finalize_hook();
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+#endif
+
+ int i;
+ int max_n_avts;
+ max_n_avts = MPIDIU_get_max_n_avts();
+ for (i = 0; i < max_n_avts; i++) {
+ if (MPIDI_av_table[i] != NULL) {
+ MPIDIU_avt_release_ref(i);
+ }
+ }
+ MPL_free(MPIDI_av_table);
+ MPL_free(MPIDI_CH4_Global.node_map);
+
+ MPIDIU_avt_destroy();
+
+ MPID_Thread_mutex_destroy(&MPIDI_CH4I_THREAD_PROGRESS_MUTEX, &thr_err);
+ MPID_Thread_mutex_destroy(&MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX, &thr_err);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_FINALIZE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Get_universe_size
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Get_universe_size(int *universe_size)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int pmi_errno = PMI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_UNIVERSE_SIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_UNIVERSE_SIZE);
+
+
+ pmi_errno = PMI_Get_universe_size(universe_size);
+
+ if (pmi_errno != PMI_SUCCESS)
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER,
+ "**pmi_get_universe_size", "**pmi_get_universe_size %d", pmi_errno);
+
+ if (*universe_size < 0)
+ *universe_size = MPIR_UNIVERSE_SIZE_NOT_AVAILABLE;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_UNIVERSE_SIZE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Get_processor_name
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Get_processor_name(char *name, int namelen, int *resultlen)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_PROCESSOR_NAME);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_PROCESSOR_NAME);
+
+ if (!MPIDI_CH4_Global.pname_set) {
+#ifdef HAVE_GETHOSTNAME
+
+ if (gethostname(MPIDI_CH4_Global.pname, MPI_MAX_PROCESSOR_NAME) == 0)
+ MPIDI_CH4_Global.pname_len = (int) strlen(MPIDI_CH4_Global.pname);
+
+#elif defined(HAVE_SYSINFO)
+
+ if (sysinfo(SI_HOSTNAME, MPIDI_CH4_Global.pname, MPI_MAX_PROCESSOR_NAME) == 0)
+ MPIDI_CH4_Global.pname_len = (int) strlen(MPIDI_CH4_Global.pname);
+
+#else
+ MPL_snprintf(MPIDI_CH4_Global.pname, MPI_MAX_PROCESSOR_NAME, "%d",
+ MPIR_Process.comm_world->rank);
+ MPIDI_CH4_Global.pname_len = (int) strlen(MPIDI_CH4_Global.pname);
+#endif
+ MPIDI_CH4_Global.pname_set = 1;
+ }
+
+ MPIR_ERR_CHKANDJUMP(MPIDI_CH4_Global.pname_len <= 0,
+ mpi_errno, MPI_ERR_OTHER, "**procnamefailed");
+ MPL_strncpy(name, MPIDI_CH4_Global.pname, namelen);
+
+ if (resultlen)
+ *resultlen = MPIDI_CH4_Global.pname_len;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_PROCESSOR_NAME);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Abort
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Abort(MPIR_Comm * comm,
+ int mpi_errno, int exit_code, const char *error_msg)
+{
+ char sys_str[MPI_MAX_ERROR_STRING + 5] = "";
+ char comm_str[MPI_MAX_ERROR_STRING] = "";
+ char world_str[MPI_MAX_ERROR_STRING] = "";
+ char error_str[2 * MPI_MAX_ERROR_STRING + 128];
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ABORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ABORT);
+
+ if (MPIR_Process.comm_world) {
+ int rank = MPIR_Process.comm_world->rank;
+ snprintf(world_str, sizeof(world_str), " on node %d", rank);
+ }
+
+ if (comm) {
+ int rank = comm->rank;
+ int context_id = comm->context_id;
+ snprintf(comm_str, sizeof(comm_str), " (rank %d in comm %d)", rank, context_id);
+ }
+
+ if (!error_msg)
+ error_msg = "Internal error";
+
+ if (mpi_errno != MPI_SUCCESS) {
+ char msg[MPI_MAX_ERROR_STRING] = "";
+ MPIR_Err_get_string(mpi_errno, msg, MPI_MAX_ERROR_STRING, NULL);
+ snprintf(sys_str, sizeof(msg), " (%s)", msg);
+ }
+ MPL_snprintf(error_str, sizeof(error_str), "Abort(%d)%s%s: %s%s\n",
+ exit_code, world_str, comm_str, error_msg, sys_str);
+ MPL_error_printf("%s", error_str);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ABORT);
+ fflush(stderr);
+ fflush(stdout);
+ PMI_Abort(exit_code, error_msg);
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Alloc_mem
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void *MPIDI_Alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ void *p;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLOC_MEM);
+
+ p = MPIDI_NM_mpi_alloc_mem(size, info_ptr);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLOC_MEM);
+ return p;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Free_mem
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Free_mem(void *ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_FREE_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_FREE_MEM);
+ mpi_errno = MPIDI_NM_mpi_free_mem(ptr);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_FREE_MEM);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_get_lpid
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_get_lpid(MPIR_Comm * comm_ptr,
+ int idx, int *lpid_ptr, MPL_bool is_remote)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int avtid = 0, lpid = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_GET_LPID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_GET_LPID);
+
+ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIDIU_comm_rank_to_pid(comm_ptr, idx, &lpid, &avtid);
+ else if (is_remote)
+ MPIDIU_comm_rank_to_pid(comm_ptr, idx, &lpid, &avtid);
+ else {
+ MPIDIU_comm_rank_to_pid_local(comm_ptr, idx, &lpid, &avtid);
+ }
+
+ *lpid_ptr = MPIDIU_LUPID_CREATE(avtid, lpid);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_GET_LPID);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Get_node_id
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Get_node_id(MPIR_Comm * comm, int rank, MPID_Node_id_t * id_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_NODE_ID);
+
+ MPIDI_CH4U_get_node_id(comm, rank, id_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_NODE_ID);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Get_max_node_id
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Get_max_node_id(MPIR_Comm * comm, MPID_Node_id_t * max_id_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_MAX_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_MAX_NODE_ID);
+
+ MPIDI_CH4U_get_max_node_id(comm, max_id_p);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_MAX_NODE_ID);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_upids_to_lupids
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_upids_to_lupids(int size,
+ size_t * remote_upid_size,
+ char *remote_upids,
+ int **remote_lupids,
+ MPID_Node_id_t * remote_node_ids)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_UPIDS_TO_LUPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_UPIDS_TO_LUPIDS);
+
+ mpi_errno = MPIDI_NM_upids_to_lupids(size, remote_upid_size, remote_upids, remote_lupids);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ /* update node_map */
+ for (i = 0; i < size; i++) {
+ int _avtid = 0, _lpid = 0;
+ /* if this is a new process, update node_map and locality */
+ if (MPIDIU_LUPID_IS_NEW_AVT((*remote_lupids)[i])) {
+ MPIDIU_LUPID_CLEAR_NEW_AVT_MARK((*remote_lupids)[i]);
+ _avtid = MPIDIU_LUPID_GET_AVTID((*remote_lupids)[i]);
+ _lpid = MPIDIU_LUPID_GET_LPID((*remote_lupids)[i]);
+ if (_avtid != 0) {
+ /*
+ * new process groups are always assumed to be remote,
+ * so CH4 don't care what node they are on
+ */
+ MPIDI_CH4_Global.node_map[_avtid][_lpid] = remote_node_ids[i];
+#ifdef MPIDI_BUILD_CH4_LOCALITY_INFO
+ MPIDI_av_table[_avtid]->table[_lpid].is_local = 0;
+#endif
+ }
+ }
+ }
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_UPIDS_TO_LUPIDS);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Create_intercomm_from_lpids
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Create_intercomm_from_lpids(MPIR_Comm * newcomm_ptr,
+ int size, const int lpids[])
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CREATE_INTERCOMM_FROM_LPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CREATE_INTERCOMM_FROM_LPIDS);
+
+ MPIDI_rank_map_mlut_t *mlut = NULL;
+ MPIDI_COMM(newcomm_ptr, map).mode = MPIDI_RANK_MAP_MLUT;
+ MPIDI_COMM(newcomm_ptr, map).avtid = -1;
+ mpi_errno = MPIDI_alloc_mlut(&mlut, size);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ MPIDI_COMM(newcomm_ptr, map).size = size;
+ MPIDI_COMM(newcomm_ptr, map).irreg.mlut.t = mlut;
+ MPIDI_COMM(newcomm_ptr, map).irreg.mlut.gpid = mlut->gpid;
+
+ for (i = 0; i < size; i++) {
+ MPIDI_COMM(newcomm_ptr, map).irreg.mlut.gpid[i].avtid = MPIDIU_LUPID_GET_AVTID(lpids[i]);
+ MPIDI_COMM(newcomm_ptr, map).irreg.mlut.gpid[i].lpid = MPIDIU_LUPID_GET_LPID(lpids[i]);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " remote rank=%d, avtid=%d, lpid=%d", i,
+ MPIDI_COMM(newcomm_ptr, map).irreg.mlut.gpid[i].avtid,
+ MPIDI_COMM(newcomm_ptr, map).irreg.mlut.gpid[i].lpid));
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CREATE_INTERCOMM_FROM_LPIDS);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Aint_add
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPI_Aint MPIDI_Aint_add(MPI_Aint base, MPI_Aint disp)
+{
+ MPI_Aint result;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_AINT_ADD);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_AINT_ADD);
+ result = MPIR_VOID_PTR_CAST_TO_MPI_AINT((char *) MPIR_AINT_CAST_TO_VOID_PTR(base) + disp);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_AINT_ADD);
+ return result;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Aint_diff
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPI_Aint MPIDI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
+{
+ MPI_Aint result;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_AINT_DIFF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_AINT_DIFF);
+
+ result = MPIR_PTR_DISP_CAST_TO_MPI_AINT((char *) MPIR_AINT_CAST_TO_VOID_PTR(addr1)
+ - (char *) MPIR_AINT_CAST_TO_VOID_PTR(addr2));
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_AINT_DIFF);
+ return result;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Type_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Type_create_hook(MPIR_Datatype * type)
+{
+ int mpi_errno;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_TYPE_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_TYPE_CREATE_HOOK);
+
+ mpi_errno = MPIDI_NM_mpi_type_create_hook(type);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_type_create_hook(type);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#endif
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_TYPE_CREATE_HOOK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Type_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Type_free_hook(MPIR_Datatype * type)
+{
+ int mpi_errno;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_TYPE_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_TYPE_FREE_HOOK);
+
+ mpi_errno = MPIDI_NM_mpi_type_free_hook(type);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_type_free_hook(type);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#endif
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_TYPE_FREE_HOOK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Op_create_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Op_create_hook(MPIR_Op * op)
+{
+ int mpi_errno;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OP_CREATE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OP_CREATE_HOOK);
+
+ mpi_errno = MPIDI_NM_mpi_op_create_hook(op);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_op_create_hook(op);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#endif
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OP_CREATE_HOOK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Op_free_hook
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Op_free_hook(MPIR_Op * op)
+{
+ int mpi_errno;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OP_FREE_HOOK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OP_FREE_HOOK);
+
+ mpi_errno = MPIDI_NM_mpi_op_free_hook(op);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_op_free_hook(op);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#endif
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OP_FREE_HOOK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_probe.h b/src/mpid/ch4/src/ch4_probe.h
new file mode 100644
index 0000000..c18934d
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_probe.h
@@ -0,0 +1,202 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_PROBE_H_INCLUDED
+#define CH4_PROBE_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Probe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Probe(int source,
+ int tag, MPIR_Comm * comm, int context_offset,
+ MPI_Status * status)
+{
+ int mpi_errno, flag = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROBE);
+
+ if (unlikely(source == MPI_PROC_NULL)) {
+ MPIR_Status_set_procnull(status);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+ while (!flag) {
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_iprobe(source, tag, comm, context_offset, &flag, status);
+#else
+ if (unlikely(source == MPI_ANY_SOURCE)) {
+ mpi_errno = MPIDI_SHM_mpi_iprobe(source, tag, comm, context_offset, &flag, status);
+ if (!flag)
+ mpi_errno = MPIDI_NM_mpi_iprobe(source, tag, comm, context_offset, &flag, status);
+ }
+ else if (MPIDI_CH4_rank_is_local(source, comm))
+ mpi_errno = MPIDI_SHM_mpi_iprobe(source, tag, comm, context_offset, &flag, status);
+ else
+ mpi_errno = MPIDI_NM_mpi_iprobe(source, tag, comm, context_offset, &flag, status);
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ MPIDI_Progress_test();
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROBE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Mprobe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Mprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPIR_Request ** message,
+ MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS, flag = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_MPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_MPROBE);
+
+ if (source == MPI_PROC_NULL) {
+ MPIR_Status_set_procnull(status);
+ *message = NULL; /* should be interpreted as MPI_MESSAGE_NO_PROC */
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+ while (!flag) {
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_improbe(source, tag, comm, context_offset, &flag, message, status);
+#else
+ if (unlikely(source == MPI_ANY_SOURCE)) {
+ mpi_errno =
+ MPIDI_SHM_mpi_improbe(source, tag, comm, context_offset, &flag, message, status);
+ if (!flag)
+ mpi_errno =
+ MPIDI_NM_mpi_improbe(source, tag, comm, context_offset, &flag, message, status);
+ }
+ else if (MPIDI_CH4_rank_is_local(source, comm))
+ mpi_errno =
+ MPIDI_SHM_mpi_improbe(source, tag, comm, context_offset, &flag, message, status);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_improbe(source, tag, comm, context_offset, &flag, message, status);
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ MPIDI_Progress_test();
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_MPROBE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Improbe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message, MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IMPROBE);
+
+ if (source == MPI_PROC_NULL) {
+ MPIR_Status_set_procnull(status);
+ *flag = 1;
+ *message = NULL; /* should be interpreted as MPI_MESSAGE_NO_PROC */
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+#else
+ if (unlikely(source == MPI_ANY_SOURCE)) {
+ mpi_errno = MPIDI_SHM_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+ if (!*flag)
+ mpi_errno =
+ MPIDI_NM_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+ }
+ else if (MPIDI_CH4_rank_is_local(source, comm))
+ mpi_errno = MPIDI_SHM_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+ else
+ mpi_errno = MPIDI_NM_mpi_improbe(source, tag, comm, context_offset, flag, message, status);
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IMPROBE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Iprobe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag, MPI_Status * status)
+{
+
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IPROBE);
+
+ if (unlikely(source == MPI_PROC_NULL)) {
+ MPIR_Status_set_procnull(status);
+ *flag = 1;
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+#else
+ if (unlikely(source == MPI_ANY_SOURCE)) {
+ mpi_errno = MPIDI_SHM_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+ if (!*flag)
+ mpi_errno = MPIDI_NM_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+ }
+ else if (MPIDI_CH4_rank_is_local(source, comm))
+ mpi_errno = MPIDI_SHM_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+ else
+ mpi_errno = MPIDI_NM_mpi_iprobe(source, tag, comm, context_offset, flag, status);
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IPROBE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_proc.h b/src/mpid/ch4/src/ch4_proc.h
new file mode 100644
index 0000000..f3b2199
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_proc.h
@@ -0,0 +1,37 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_PROC_H_INCLUDED
+#define CH4_PROC_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4_rank_is_local
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4_rank_is_local(int rank, MPIR_Comm * comm)
+{
+ int ret;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4_RANK_IS_LOCAL);
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ /* Ask the netmod for locality information. If it decided not to build it,
+ * it will call back up to the CH4U function to get the infomration. */
+ ret = MPIDI_NM_rank_is_local(rank, comm);
+#else
+ ret = MPIDI_CH4U_rank_is_local(rank, comm);
+#endif
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4_RANK_IS_LOCAL);
+ return ret;
+}
+#endif /* CH4_PROC_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_progress.h b/src/mpid/ch4/src/ch4_progress.h
new file mode 100644
index 0000000..551db4f
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_progress.h
@@ -0,0 +1,209 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_PROGRESS_H_INCLUDED
+#define CH4_PROGRESS_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Progress_test
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Progress_test(void)
+{
+ int mpi_errno, made_progress, i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_TEST);
+
+ if (OPA_load_int(&MPIDI_CH4_Global.active_progress_hooks)) {
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_CH4I_THREAD_PROGRESS_MUTEX);
+ for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
+ if (MPIDI_CH4_Global.progress_hooks[i].active == TRUE) {
+ MPIR_Assert(MPIDI_CH4_Global.progress_hooks[i].func_ptr != NULL);
+ mpi_errno = MPIDI_CH4_Global.progress_hooks[i].func_ptr(&made_progress);
+ if (mpi_errno) {
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_CH4I_THREAD_PROGRESS_MUTEX);
+ MPIR_ERR_POP(mpi_errno);
+ }
+ }
+ }
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_CH4I_THREAD_PROGRESS_MUTEX);
+ }
+ /* todo: progress unexp_list */
+ mpi_errno = MPIDI_NM_progress(MPIDI_CH4_Global.netmod_context[0], 0);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#ifdef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_SHM_progress(0);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+#endif
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_TEST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Progress_poke(void)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_POKE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_POKE);
+
+ ret = MPIDI_Progress_test();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_POKE);
+ return ret;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_Progress_start(MPID_Progress_state * state)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_START);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_START);
+ return;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_Progress_end(MPID_Progress_state * state)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_END);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_END);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_END);
+ return;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Progress_wait(MPID_Progress_state * state)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_WAIT);
+
+ ret = MPIDI_Progress_test();
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_WAIT);
+ return ret;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Progress_register
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Progress_register(int (*progress_fn) (int *), int *id)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_REGISTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_REGISTER);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
+ if (MPIDI_CH4_Global.progress_hooks[i].func_ptr == NULL) {
+ MPIDI_CH4_Global.progress_hooks[i].func_ptr = progress_fn;
+ MPIDI_CH4_Global.progress_hooks[i].active = FALSE;
+ break;
+ }
+ }
+
+ if (i >= MAX_PROGRESS_HOOKS)
+ goto fn_fail;
+
+ OPA_incr_int(&MPIDI_CH4_Global.active_progress_hooks);
+
+ (*id) = i;
+
+ fn_exit:
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_REGISTER);
+ return mpi_errno;
+ fn_fail:
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDI_Progress_register", __LINE__,
+ MPI_ERR_INTERN, "**progresshookstoomany", 0);
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Progress_deregister
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Progress_deregister(int id)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_DEREGISTER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_DEREGISTER);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ MPIR_Assert(id >= 0);
+ MPIR_Assert(id < MAX_PROGRESS_HOOKS);
+ MPIR_Assert(MPIDI_CH4_Global.progress_hooks[id].func_ptr != NULL);
+ MPIDI_CH4_Global.progress_hooks[id].func_ptr = NULL;
+ MPIDI_CH4_Global.progress_hooks[id].active = FALSE;
+
+ OPA_decr_int(&MPIDI_CH4_Global.active_progress_hooks);
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_DEREGISTER);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Progress_activate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Progress_activate(int id)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_ACTIVATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_ACTIVATE);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ MPIR_Assert(id >= 0);
+ MPIR_Assert(id < MAX_PROGRESS_HOOKS);
+ MPIR_Assert(MPIDI_CH4_Global.progress_hooks[id].active == FALSE);
+ MPIR_Assert(MPIDI_CH4_Global.progress_hooks[id].func_ptr != NULL);
+ MPIDI_CH4_Global.progress_hooks[id].active = TRUE;
+
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_ACTIVATE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Progress_deactivate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Progress_deactivate(int id)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_DEACTIVATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_DEACTIVATE);
+
+ MPID_THREAD_CS_ENTER(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ MPIR_Assert(id >= 0);
+ MPIR_Assert(id < MAX_PROGRESS_HOOKS);
+ MPIR_Assert(MPIDI_CH4_Global.progress_hooks[id].active == TRUE);
+ MPIR_Assert(MPIDI_CH4_Global.progress_hooks[id].func_ptr != NULL);
+ MPIDI_CH4_Global.progress_hooks[id].active = FALSE;
+
+ MPID_THREAD_CS_EXIT(POBJ, MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_DEACTIVATE);
+ return mpi_errno;
+}
+
+#endif /* CH4_PROGRESS_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_recv.h b/src/mpid/ch4/src/ch4_recv.h
new file mode 100644
index 0000000..4e77fee
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_recv.h
@@ -0,0 +1,418 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_RECV_H_INCLUDED
+#define CH4_RECV_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Recv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Recv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, MPI_Status * status,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RECV);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RECV);
+ *request = rreq;
+ MPIR_Request_add_ref(rreq);
+ rreq->status.MPI_SOURCE = rank;
+ rreq->status.MPI_TAG = tag;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno =
+ MPIDI_NM_mpi_recv(buf, count, datatype, rank, tag, comm, context_offset, status, request);
+#else
+ if (unlikely(rank == MPI_ANY_SOURCE)) {
+ mpi_errno =
+ MPIDI_SHM_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ mpi_errno = MPIDI_NM_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset,
+ &(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request)));
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ /* cancel the shm request if netmod/am handles the request from unexpected queue. */
+ else if (*request) {
+ if (MPIR_Request_is_complete(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request))) {
+ mpi_errno = MPIDI_SHM_mpi_cancel_recv(*request);
+ if (MPIR_STATUS_GET_CANCEL_BIT((*request)->status)) {
+ (*request)->status = MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request)->status;
+ }
+ MPIR_Request_free(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request));
+ goto fn_exit;
+ }
+ MPIDI_CH4I_REQUEST(*request, is_local) = 1;
+ MPIDI_CH4I_REQUEST(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request), is_local) = 0;
+ }
+
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request)) =
+ *request;
+ }
+ else {
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_recv(buf, count, datatype, rank, tag, comm, context_offset, status,
+ request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_recv(buf, count, datatype, rank, tag, comm, context_offset, status,
+ request);
+ if (mpi_errno == MPI_SUCCESS && *request) {
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request) = NULL;
+ }
+ }
+#endif
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Recv_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Recv_init(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RECV_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RECV_INIT);
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno =
+ MPIDI_NM_mpi_recv_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ if (unlikely(rank == MPI_ANY_SOURCE)) {
+ mpi_errno =
+ MPIDI_SHM_mpi_recv_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ mpi_errno = MPIDI_NM_mpi_recv_init(buf, count, datatype, rank, tag, comm, context_offset,
+ &(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request)));
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ MPIDI_CH4I_REQUEST(*request, is_local) = 1;
+ MPIDI_CH4I_REQUEST(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request), is_local) = 0;
+
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request)) =
+ *request;
+ }
+ else {
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno = MPIDI_SHM_mpi_recv_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ else
+ mpi_errno = MPIDI_NM_mpi_recv_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS) {
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request) = NULL;
+ }
+ }
+#endif
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RECV_INIT);
+ return mpi_errno;
+
+#ifdef MPIDI_CH4_EXCLUSIVE_SHM
+ fn_fail:
+ goto fn_exit;
+#endif /* MPIDI_CH4_EXCLUSIVE_SHM */
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Mrecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Mrecv(void *buf,
+ int count,
+ MPI_Datatype datatype, MPIR_Request * message,
+ MPI_Status * status)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_MRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_MRECV);
+
+ MPI_Request req_handle;
+ int active_flag;
+ MPIR_Request *rreq = NULL;
+
+ if (message == NULL) {
+ /* treat as though MPI_MESSAGE_NO_PROC was passed */
+ MPIR_Status_set_procnull(status);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+ if (unlikely(message->status.MPI_SOURCE == MPI_PROC_NULL)) {
+ rreq = message;
+ rreq->status.MPI_SOURCE = message->status.MPI_SOURCE;
+ rreq->status.MPI_TAG = message->status.MPI_TAG;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_imrecv(buf, count, datatype, message, &rreq);
+#else
+
+ if (unlikely(message->status.MPI_SOURCE == MPI_ANY_SOURCE)) {
+ mpi_errno = MPIDI_SHM_mpi_imrecv(buf, count, datatype, message, &rreq);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ mpi_errno =
+ MPIDI_NM_mpi_imrecv(buf, count, datatype, message,
+ &(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq)));
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq)) = rreq;
+ MPIDI_CH4I_REQUEST(rreq, is_local) = 1;
+ MPIDI_CH4I_REQUEST(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq), is_local) = 0;
+ }
+ else {
+ int local = MPIDI_CH4_rank_is_local(message->status.MPI_SOURCE, message->comm);
+ if (local)
+ mpi_errno = MPIDI_SHM_mpi_imrecv(buf, count, datatype, message, &rreq);
+ else
+ mpi_errno = MPIDI_NM_mpi_imrecv(buf, count, datatype, message, &rreq);
+
+ if (mpi_errno == MPI_SUCCESS) {
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq) = NULL;
+ MPIDI_CH4I_REQUEST(rreq, is_local) = local;
+ }
+ }
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ while (!MPIR_Request_is_complete(rreq)) {
+ MPIDI_Progress_test();
+ }
+
+ /* This should probably be moved to MPICH (above device) level */
+ /* Someone neglected to put the blocking at the MPICH level */
+ MPIR_Request_extract_status(rreq, status);
+ MPIR_Request_complete(&req_handle, rreq, status, &active_flag);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_MRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Imrecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Imrecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ MPIR_Request * message, MPIR_Request ** rreqp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IMRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IMRECV);
+
+ if (message == NULL) {
+ MPIR_Request *rreq;
+ MPIDI_Request_create_null_rreq(rreq, mpi_errno, goto fn_fail);
+ *rreqp = rreq;
+ goto fn_exit;
+ }
+
+ if (unlikely(message->status.MPI_SOURCE == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = message;
+ rreq->status.MPI_SOURCE = message->status.MPI_SOURCE;
+ rreq->status.MPI_TAG = message->status.MPI_TAG;
+ MPIDI_CH4U_request_complete(rreq);
+ *rreqp = rreq;
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_imrecv(buf, count, datatype, message, rreqp);
+#else
+ {
+ int local = MPIDI_CH4_rank_is_local(message->status.MPI_SOURCE, message->comm);
+ if (local)
+ mpi_errno = MPIDI_SHM_mpi_imrecv(buf, count, datatype, message, rreqp);
+ else
+ mpi_errno = MPIDI_NM_mpi_imrecv(buf, count, datatype, message, rreqp);
+ if (mpi_errno == MPI_SUCCESS) {
+ MPIDI_CH4I_REQUEST(*rreqp, is_local) = local;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*rreqp) = NULL;
+ }
+ }
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IMRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Irecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Irecv(void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IRECV);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__RECV);
+ *request = rreq;
+ MPIR_Request_add_ref(rreq);
+ rreq->status.MPI_SOURCE = rank;
+ rreq->status.MPI_TAG = tag;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ if (unlikely(rank == MPI_ANY_SOURCE)) {
+ mpi_errno =
+ MPIDI_SHM_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ mpi_errno = MPIDI_NM_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset,
+ &(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request)));
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ else if (*request) {
+ MPIDI_CH4I_REQUEST(*request, is_local) = 1;
+ MPIDI_CH4I_REQUEST(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request), is_local) = 0;
+ }
+
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request)) =
+ *request;
+ }
+ else {
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_irecv(buf, count, datatype, rank, tag, comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS && *request) {
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request) = NULL;
+ }
+ }
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Cancel_Recv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Cancel_recv(MPIR_Request * rreq)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CANCEL_RECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CANCEL_RECV);
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_cancel_recv(rreq);
+#else
+ if (MPIDI_CH4I_REQUEST(rreq, is_local))
+ mpi_errno = MPIDI_SHM_mpi_cancel_recv(rreq);
+ else
+ mpi_errno = MPIDI_NM_mpi_cancel_recv(rreq);
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CANCEL_RECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_request.h b/src/mpid/ch4/src/ch4_request.h
new file mode 100644
index 0000000..427d89d
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_request.h
@@ -0,0 +1,137 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_REQUEST_H_INCLUDED
+#define CH4_REQUEST_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4r_buf.h"
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Request_is_anysource(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REQUEST_IS_ANYSOURCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REQUEST_IS_ANYSOURCE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REQUEST_IS_ANYSOURCE);
+ return MPI_SUCCESS;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_Request_is_pending_failure(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REQUEST_IS_PENDING_FAILURE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REQUEST_IS_PENDING_FAILURE);
+
+ MPIR_Assert(0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REQUEST_IS_PENDING_FAILURE);
+ return MPI_SUCCESS;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_Request_set_completed(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REQUEST_SET_COMPLETED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REQUEST_SET_COMPLETED);
+
+ MPIR_cc_set(&req->cc, 0);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REQUEST_SET_COMPLETED);
+ return;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_Request_add_ref(MPIR_Request * req)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REQUEST_ADD_REF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REQUEST_ADD_REF);
+
+ MPIR_Request_add_ref(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REQUEST_ADD_REF);
+ return;
+}
+
+MPL_STATIC_INLINE_PREFIX void MPIDI_Request_release_ref(MPIR_Request * req)
+{
+ int inuse;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REQUEST_RELEASE_REF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REQUEST_RELEASE_REF);
+
+ MPIR_Request_release_ref(req, &inuse);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REQUEST_RELEASE_REF);
+ return;
+}
+
+/* These request functions should be called by the MPI layer only
+ since they only do base initialization of the request object.
+ A few notes:
+
+ It is each layer's responsibility to initialize a request
+ properly.
+
+ The CH4I_request functions are even more bare bones.
+ They create request objects that are not useable by the
+ lower layers until further initialization takes place.
+
+ CH4R_request_xxx functions can be used to create and destroy
+ request objects at any CH4 layer, including shmmod and netmod.
+ These functions create and initialize a base request with
+ the appropriate "above device" fields initialized, and any
+ required CH4 layer fields initialized.
+
+ The net/shm mods can upcall to CH4R to create a request, or
+ they can iniitalize their own requests internally, but note
+ that all the fields from the upper layers must be initialized
+ properly.
+
+ Note that the request_release function is used by the MPI
+ layer to release the ref on a request object. It is important
+ for the netmods to release any memory pointed to by the request
+ when the internal completion counters hits zero, NOT when the
+ ref hits zero or there will be a memory leak. The generic
+ release function will not release any memory pointed to by
+ the request because it does not know about the internals of
+ the ch4r/netmod/shmmod fields of the request.
+*/
+#undef FUNCNAME
+#define FUNCNAME MPIDI_request_complete
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Request_complete(MPIR_Request * req)
+{
+ int incomplete, notify_counter;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REQUEST_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REQUEST_COMPLETE);
+
+ MPIR_cc_decr(req->cc_ptr, &incomplete);
+
+ /* if we hit a zero completion count, free up AM-related
+ * objects */
+ if (!incomplete) {
+ /* decrement completion_notification counter */
+ if (req->completion_notification)
+ MPIR_cc_decr(req->completion_notification, ¬ify_counter);
+
+ if (MPIDI_CH4U_REQUEST(req, req)) {
+ MPIDI_CH4R_release_buf(MPIDI_CH4U_REQUEST(req, req));
+ MPIDI_CH4U_REQUEST(req, req) = NULL;
+ MPIDI_NM_am_request_finalize(req);
+ }
+ MPIR_Request_free(req);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REQUEST_COMPLETE);
+ return MPI_SUCCESS;
+}
+
+#endif /* CH4_REQUEST_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_rma.h b/src/mpid/ch4/src/ch4_rma.h
new file mode 100644
index 0000000..81b0efb
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_rma.h
@@ -0,0 +1,305 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_RMA_H_INCLUDED
+#define CH4_RMA_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Put
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT);
+ mpi_errno = MPIDI_NM_mpi_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Get
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET);
+ mpi_errno = MPIDI_NM_mpi_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACCUMULATE);
+ mpi_errno = MPIDI_NM_mpi_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Compare_and_swap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank, MPI_Aint target_disp,
+ MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMPARE_AND_SWAP);
+ mpi_errno = MPIDI_NM_mpi_compare_and_swap(origin_addr, compare_addr, result_addr,
+ datatype, target_rank, target_disp, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMPARE_AND_SWAP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Raccumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win, MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RACCUMULATE);
+ mpi_errno = MPIDI_NM_mpi_raccumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Rget_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RGET_ACCUMULATE);
+ mpi_errno = MPIDI_NM_mpi_rget_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, op, win, request);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RGET_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Fetch_and_op
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_FETCH_AND_OP);
+ mpi_errno = MPIDI_NM_mpi_fetch_and_op(origin_addr, result_addr,
+ datatype, target_rank, target_disp, op, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_FETCH_AND_OP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Rget
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RGET);
+ mpi_errno = MPIDI_NM_mpi_rget(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, win, request);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RGET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Rput
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RPUT);
+ mpi_errno = MPIDI_NM_mpi_rput(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count,
+ target_datatype, win, request);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RPUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Get_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACCUMULATE);
+ mpi_errno = MPIDI_NM_mpi_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count, target_datatype,
+ op, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_send.h b/src/mpid/ch4/src/ch4_send.h
new file mode 100644
index 0000000..8c009b5
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_send.h
@@ -0,0 +1,540 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_SEND_H_INCLUDED
+#define CH4_SEND_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4r_proc.h"
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Send(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(rreq);
+ *request = rreq;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS && *request)
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Isend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Isend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ISEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ISEND);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(rreq);
+ *request = rreq;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS)
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ISEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Rsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Rsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RSEND);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(rreq);
+ *request = rreq;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_send(buf, count, datatype, rank, tag, comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS && *request)
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RSEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Irsend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Irsend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_IRSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_IRSEND);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(rreq);
+ *request = rreq;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_isend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS)
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_IRSEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Ssend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ssend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SSEND);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(rreq);
+ *request = rreq;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_ssend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS && *request)
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SSEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Issend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Issend(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ISSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ISSEND);
+
+ if (unlikely(rank == MPI_PROC_NULL)) {
+ MPIR_Request *rreq = MPIR_Request_create(MPIR_REQUEST_KIND__SEND);
+ MPIR_Request_add_ref(rreq);
+ *request = rreq;
+ MPIDI_CH4U_request_complete(rreq);
+ mpi_errno = MPI_SUCCESS;
+ goto fn_exit;
+ }
+
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_issend(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno =
+ MPIDI_SHM_mpi_issend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ else
+ mpi_errno =
+ MPIDI_NM_mpi_issend(buf, count, datatype, rank, tag, comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS)
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ISSEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Startall
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Startall(int count, MPIR_Request * requests[])
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_STARTALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_STARTALL);
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_startall(count, requests);
+#else
+ int i;
+ for (i = 0; i < count; i++) {
+ /* This is sub-optimal, can we do better? */
+ if (MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(requests[i])) {
+ mpi_errno = MPIDI_SHM_mpi_startall(1, &requests[i]);
+ if (mpi_errno == MPI_SUCCESS) {
+ mpi_errno =
+ MPIDI_NM_mpi_startall(1, &MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(requests[i]));
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(requests[i]->u.persist.real_request) =
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(requests[i])->u.persist.real_request;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER
+ (requests[i])->u.persist.real_request) =
+ requests[i]->u.persist.real_request;
+ }
+ }
+ else if (MPIDI_CH4I_REQUEST(requests[i], is_local))
+ mpi_errno = MPIDI_SHM_mpi_startall(1, &requests[i]);
+ else
+ mpi_errno = MPIDI_NM_mpi_startall(1, &requests[i]);
+ }
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_STARTALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Send_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Send_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND_INIT);
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno =
+ MPIDI_NM_mpi_send_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno = MPIDI_SHM_mpi_send_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ else
+ mpi_errno = MPIDI_NM_mpi_send_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS)
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request) = NULL;
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Ssend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Ssend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SSEND_INIT);
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno =
+ MPIDI_NM_mpi_ssend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno = MPIDI_SHM_mpi_ssend_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ else
+ mpi_errno = MPIDI_NM_mpi_ssend_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS && *request) {
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request) = NULL;
+ }
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SSEND_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Bsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Bsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_BSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_BSEND_INIT);
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno =
+ MPIDI_NM_mpi_bsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno = MPIDI_SHM_mpi_bsend_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ else
+ mpi_errno = MPIDI_NM_mpi_bsend_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS && *request) {
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request) = NULL;
+ }
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_BSEND_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Rsend_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Rsend_init(const void *buf,
+ int count,
+ MPI_Datatype datatype,
+ int rank,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPIR_Request ** request)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RSEND_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RSEND_INIT);
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno =
+ MPIDI_NM_mpi_rsend_init(buf, count, datatype, rank, tag, comm, context_offset, request);
+#else
+ int r;
+ if ((r = MPIDI_CH4_rank_is_local(rank, comm)))
+ mpi_errno = MPIDI_SHM_mpi_rsend_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ else
+ mpi_errno = MPIDI_NM_mpi_rsend_init(buf, count, datatype, rank, tag,
+ comm, context_offset, request);
+ if (mpi_errno == MPI_SUCCESS && *request) {
+ MPIDI_CH4I_REQUEST(*request, is_local) = r;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(*request) = NULL;
+ }
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RSEND_INIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Cancel_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Cancel_send(MPIR_Request * sreq)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CANCEL_SEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CANCEL_SEND);
+#ifndef MPIDI_CH4_EXCLUSIVE_SHM
+ mpi_errno = MPIDI_NM_mpi_cancel_send(sreq);
+#else
+ if (MPIDI_CH4I_REQUEST(sreq, is_local))
+ mpi_errno = MPIDI_SHM_mpi_cancel_send(sreq);
+ else
+ mpi_errno = MPIDI_NM_mpi_cancel_send(sreq);
+#endif
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CANCEL_SEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4_SEND_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_spawn.h b/src/mpid/ch4/src/ch4_spawn.h
new file mode 100644
index 0000000..86c7245
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_spawn.h
@@ -0,0 +1,330 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_SPAWN_H_INCLUDED
+#define CH4_SPAWN_H_INCLUDED
+
+#include "ch4_impl.h"
+
+static inline int MPIDI_mpi_to_pmi_keyvals(MPIR_Info * info_ptr,
+ PMI_keyval_t ** kv_ptr, int *nkeys_ptr)
+{
+ char key[MPI_MAX_INFO_KEY];
+ PMI_keyval_t *kv = 0;
+ int i, nkeys = 0, vallen, flag, mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_MPI_TO_PMI_KEYVALS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_MPI_TO_PMI_KEYVALS);
+
+ if (!info_ptr || info_ptr->handle == MPI_INFO_NULL)
+ goto fn_exit;
+
+ MPIR_Info_get_nkeys_impl(info_ptr, &nkeys);
+
+ if (nkeys == 0)
+ goto fn_exit;
+
+ kv = (PMI_keyval_t *) MPL_malloc(nkeys * sizeof(PMI_keyval_t));
+
+ for (i = 0; i < nkeys; i++) {
+ mpi_errno = MPIR_Info_get_nthkey_impl(info_ptr, i, key);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ MPIR_Info_get_valuelen_impl(info_ptr, key, &vallen, &flag);
+ kv[i].key = (const char *) MPL_strdup(key);
+ kv[i].val = (char *) MPL_malloc(vallen + 1);
+ MPIR_Info_get_impl(info_ptr, key, vallen + 1, kv[i].val, &flag);
+ }
+
+ fn_exit:
+ *kv_ptr = kv;
+ *nkeys_ptr = nkeys;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_MPI_TO_PMI_KEYVALS);
+ return mpi_errno;
+
+ fn_fail:
+ goto fn_exit;
+}
+
+static inline void MPIDI_free_pmi_keyvals(PMI_keyval_t ** kv, int size, int *counts)
+{
+ int i, j;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_FREE_PMI_KEYVALS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_FREE_PMI_KEYVALS);
+
+ for (i = 0; i < size; i++) {
+ for (j = 0; j < counts[i]; j++) {
+ if (kv[i][j].key != NULL)
+ MPL_free((char *) kv[i][j].key);
+
+ if (kv[i][j].val != NULL)
+ MPL_free(kv[i][j].val);
+ }
+
+ if (kv[i] != NULL)
+ MPL_free(kv[i]);
+ }
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_FREE_PMI_KEYVALS);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_spawn_multiple
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_spawn_multiple(int count,
+ char *commands[],
+ char **argvs[],
+ const int maxprocs[],
+ MPIR_Info * info_ptrs[],
+ int root,
+ MPIR_Comm * comm_ptr,
+ MPIR_Comm ** intercomm, int errcodes[])
+{
+ char port_name[MPI_MAX_PORT_NAME];
+ int *info_keyval_sizes = 0, i, mpi_errno = MPI_SUCCESS;
+ PMI_keyval_t **info_keyval_vectors = 0, preput_keyval_vector;
+ int *pmi_errcodes = 0, pmi_errno = 0;
+ int total_num_processes, should_accept = 1;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
+
+ memset(port_name, 0, sizeof(port_name));
+
+ if (comm_ptr->rank == root) {
+ total_num_processes = 0;
+
+ for (i = 0; i < count; i++)
+ total_num_processes += maxprocs[i];
+
+ pmi_errcodes = (int *) MPL_malloc(sizeof(int) * total_num_processes);
+ MPIR_ERR_CHKANDJUMP(!pmi_errcodes, mpi_errno, MPI_ERR_OTHER, "**nomem");
+
+ for (i = 0; i < total_num_processes; i++)
+ pmi_errcodes[i] = 0;
+
+ mpi_errno = MPIDI_Open_port(NULL, port_name);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ info_keyval_sizes = (int *) MPL_malloc(count * sizeof(int));
+ MPIR_ERR_CHKANDJUMP(!info_keyval_sizes, mpi_errno, MPI_ERR_OTHER, "**nomem");
+ info_keyval_vectors = (PMI_keyval_t **) MPL_malloc(count * sizeof(PMI_keyval_t *));
+ MPIR_ERR_CHKANDJUMP(!info_keyval_vectors, mpi_errno, MPI_ERR_OTHER, "**nomem");
+
+ if (!info_ptrs)
+ for (i = 0; i < count; i++) {
+ info_keyval_vectors[i] = 0;
+ info_keyval_sizes[i] = 0;
+ }
+ else
+ for (i = 0; i < count; i++) {
+ mpi_errno = MPIDI_mpi_to_pmi_keyvals(info_ptrs[i],
+ &info_keyval_vectors[i],
+ &info_keyval_sizes[i]);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ preput_keyval_vector.key = MPIDI_PARENT_PORT_KVSKEY;
+ preput_keyval_vector.val = port_name;
+ pmi_errno = PMI_Spawn_multiple(count, (const char **)
+ commands,
+ (const char ***) argvs,
+ maxprocs, info_keyval_sizes, (const PMI_keyval_t **)
+ info_keyval_vectors, 1, &preput_keyval_vector, pmi_errcodes);
+
+ if (pmi_errno != PMI_SUCCESS)
+ MPIR_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER,
+ "**pmi_spawn_multiple", "**pmi_spawn_multiple %d", pmi_errno);
+
+ if (errcodes != MPI_ERRCODES_IGNORE) {
+ for (i = 0; i < total_num_processes; i++) {
+ errcodes[i] = pmi_errcodes[0];
+ should_accept = should_accept && errcodes[i];
+ }
+
+ should_accept = !should_accept;
+ }
+ }
+
+ if (errcodes != MPI_ERRCODES_IGNORE) {
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ mpi_errno = MPIR_Bcast_impl(&should_accept, 1, MPI_INT, root, comm_ptr, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Bcast_impl(&pmi_errno, 1, MPI_INT, root, comm_ptr, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Bcast_impl(&total_num_processes, 1, MPI_INT, root, comm_ptr, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Bcast_impl(errcodes, total_num_processes, MPI_INT,
+ root, comm_ptr, &errflag);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ if (should_accept) {
+ mpi_errno = MPIDI_Comm_accept(port_name, NULL, root, comm_ptr, intercomm);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ else {
+ if ((pmi_errno == PMI_SUCCESS) && (errcodes[0] != 0))
+ MPIR_Comm_create(intercomm);
+ }
+
+ if (comm_ptr->rank == root) {
+ mpi_errno = MPIDI_Close_port(port_name);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+
+ if (info_keyval_vectors) {
+ MPIDI_free_pmi_keyvals(info_keyval_vectors, count, info_keyval_sizes);
+ MPL_free(info_keyval_vectors);
+ }
+
+ if (info_keyval_sizes)
+ MPL_free(info_keyval_sizes);
+
+ if (pmi_errcodes)
+ MPL_free(pmi_errcodes);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_SPAWN_MULTIPLE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_connect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_connect(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm,
+ MPIR_Comm ** newcomm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_CONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_CONNECT);
+ mpi_errno = MPIDI_NM_mpi_comm_connect(port_name, info, root, comm, newcomm_ptr);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_CONNECT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_disconnect
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_disconnect(MPIR_Comm * comm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_DISCONNECT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_DISCONNECT);
+ mpi_errno = MPIDI_NM_mpi_comm_disconnect(comm_ptr);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_DISCONNECT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Open_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Open_port(MPIR_Info * info_ptr, char *port_name)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OPEN_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OPEN_PORT);
+ mpi_errno = MPIDI_NM_mpi_open_port(info_ptr, port_name);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OPEN_PORT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Close_port
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Close_port(const char *port_name)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CLOSE_PORT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CLOSE_PORT);
+ mpi_errno = MPIDI_NM_mpi_close_port(port_name);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CLOSE_PORT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Comm_accept
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Comm_accept(const char *port_name,
+ MPIR_Info * info,
+ int root, MPIR_Comm * comm, MPIR_Comm ** newcomm_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_ACCEPT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_ACCEPT);
+ mpi_errno = MPIDI_NM_mpi_comm_accept(port_name, info, root, comm, newcomm_ptr);
+
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_ACCEPT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4_SPAWN_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_types.h b/src/mpid/ch4/src/ch4_types.h
new file mode 100644
index 0000000..1080e13
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_types.h
@@ -0,0 +1,291 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_TYPES_H_INCLUDED
+#define CH4_TYPES_H_INCLUDED
+
+#include <mpidimpl.h>
+#include <stdio.h>
+#include "mpir_cvars.h"
+#include "pmi.h"
+
+/* Macros and inlines */
+/* match/ignore bit manipulation
+ *
+ * 0123 4567 01234567 0123 4567 01234567 0123 4567 01234567 01234567 01234567
+ * | | |
+ * ^ | context id | source | message tag
+ * | | | |
+ * +---- protocol
+ */
+#define MPIDI_CH4U_PROTOCOL_MASK (0x9000000000000000ULL)
+#define MPIDI_CH4U_CONTEXT_MASK (0x0FFFF00000000000ULL)
+#define MPIDI_CH4U_SOURCE_MASK (0x00000FFFF0000000ULL)
+#define MPIDI_CH4U_TAG_MASK (0x000000000FFFFFFFULL)
+#define MPIDI_CH4U_DYNPROC_SEND (0x4000000000000000ULL)
+#define MPIDI_CH4U_TAG_SHIFT (28)
+#define MPIDI_CH4U_SOURCE_SHIFT (16)
+#define MPIDI_CH4U_SOURCE_SHIFT_UNPACK (sizeof(int)*8 - MPIDI_CH4U_SOURCE_SHIFT)
+#define MPIDI_CH4U_TAG_SHIFT_UNPACK (sizeof(int)*8 - MPIDI_CH4U_TAG_SHIFT)
+
+#define MPIDI_CH4I_MAP_NOT_FOUND ((void*)(-1UL))
+
+#define MAX_NETMOD_CONTEXTS 8
+#define MAX_PROGRESS_HOOKS 4
+
+#define MPIDI_CH4I_BUF_POOL_NUM (1024)
+#define MPIDI_CH4I_BUF_POOL_SZ (256)
+
+typedef int (*progress_func_ptr_t) (int *made_progress);
+typedef struct progress_hook_slot {
+ progress_func_ptr_t func_ptr;
+ int active;
+} progress_hook_slot_t;
+
+enum {
+ MPIDI_CH4U_SEND = 0, /* Eager send */
+
+ MPIDI_CH4U_SEND_LONG_REQ, /* Rendezvous send RTS (request to send) */
+ MPIDI_CH4U_SEND_LONG_ACK, /* Rendezvous send CTS (clear to send) */
+ MPIDI_CH4U_SEND_LONG_LMT, /* Rendezvous send LMT */
+
+ MPIDI_CH4U_SSEND_REQ,
+ MPIDI_CH4U_SSEND_ACK,
+
+ MPIDI_CH4U_PUT_REQ,
+ MPIDI_CH4U_PUT_ACK,
+ MPIDI_CH4U_PUT_IOV_REQ,
+ MPIDI_CH4U_PUT_DAT_REQ,
+ MPIDI_CH4U_PUT_IOV_ACK,
+
+ MPIDI_CH4U_GET_REQ,
+ MPIDI_CH4U_GET_ACK,
+
+ MPIDI_CH4U_ACC_REQ,
+ MPIDI_CH4U_ACC_ACK,
+ MPIDI_CH4U_ACC_IOV_REQ,
+ MPIDI_CH4U_ACC_DAT_REQ,
+ MPIDI_CH4U_ACC_IOV_ACK,
+
+ MPIDI_CH4U_GET_ACC_REQ,
+ MPIDI_CH4U_GET_ACC_ACK,
+ MPIDI_CH4U_GET_ACC_IOV_REQ,
+ MPIDI_CH4U_GET_ACC_DAT_REQ,
+ MPIDI_CH4U_GET_ACC_IOV_ACK,
+
+ MPIDI_CH4U_CSWAP_REQ,
+ MPIDI_CH4U_CSWAP_ACK,
+ MPIDI_CH4U_FETCH_OP,
+
+ MPIDI_CH4U_WIN_COMPLETE,
+ MPIDI_CH4U_WIN_POST,
+ MPIDI_CH4U_WIN_LOCK,
+ MPIDI_CH4U_WIN_LOCK_ACK,
+ MPIDI_CH4U_WIN_UNLOCK,
+ MPIDI_CH4U_WIN_UNLOCK_ACK,
+ MPIDI_CH4U_WIN_LOCKALL,
+ MPIDI_CH4U_WIN_LOCKALL_ACK,
+ MPIDI_CH4U_WIN_UNLOCKALL,
+ MPIDI_CH4U_WIN_UNLOCKALL_ACK
+};
+
+enum {
+ MPIDI_CH4U_EPOTYPE_NONE = 0, /**< No epoch in affect */
+ MPIDI_CH4U_EPOTYPE_LOCK = 1, /**< MPI_Win_lock access epoch */
+ MPIDI_CH4U_EPOTYPE_START = 2, /**< MPI_Win_start access epoch */
+ MPIDI_CH4U_EPOTYPE_POST = 3, /**< MPI_Win_post exposure epoch */
+ MPIDI_CH4U_EPOTYPE_FENCE = 4, /**< MPI_Win_fence access/exposure epoch */
+ MPIDI_CH4U_EPOTYPE_REFENCE = 5, /**< MPI_Win_fence possible access/exposure epoch */
+ MPIDI_CH4U_EPOTYPE_LOCK_ALL = 6 /**< MPI_Win_lock_all access epoch */
+};
+
+/* Enum for calling types between netmod and shm */
+enum {
+ MPIDI_CH4R_NETMOD = 0,
+ MPIDI_CH4R_SHM = 1
+};
+
+typedef struct MPIDI_CH4U_hdr_t {
+ uint64_t msg_tag;
+ int src_rank;
+} MPIDI_CH4U_hdr_t;
+
+typedef struct MPIDI_CH4U_send_long_req_msg_t {
+ MPIDI_CH4U_hdr_t hdr;
+ size_t data_sz; /* Message size in bytes */
+ uint64_t sreq_ptr; /* Pointer value of the request object at the sender side */
+} MPIDI_CH4U_send_long_req_msg_t;
+
+typedef struct MPIDI_CH4U_send_long_ack_msg_t {
+ uint64_t sreq_ptr;
+ uint64_t rreq_ptr;
+} MPIDI_CH4U_send_long_ack_msg_t;
+
+typedef struct MPIDI_CH4U_send_long_lmt_msg_t {
+ uint64_t rreq_ptr;
+} MPIDI_CH4U_send_long_lmt_msg_t;
+
+typedef struct MPIDI_CH4U_ssend_req_msg_t {
+ MPIDI_CH4U_hdr_t hdr;
+ uint64_t sreq_ptr;
+} MPIDI_CH4U_ssend_req_msg_t;
+
+typedef struct MPIDI_CH4U_ssend_ack_msg_t {
+ uint64_t sreq_ptr;
+} MPIDI_CH4U_ssend_ack_msg_t;
+
+typedef struct MPIDI_CH4U_win_cntrl_msg_t {
+ uint64_t win_id;
+ uint32_t origin_rank;
+ int16_t lock_type;
+} MPIDI_CH4U_win_cntrl_msg_t;
+
+typedef struct MPIDI_CH4U_put_msg_t {
+ int src_rank;
+ uint64_t win_id;
+ uint64_t preq_ptr;
+ MPI_Aint target_disp;
+ uint64_t count;
+ MPI_Datatype datatype;
+ int n_iov;
+} MPIDI_CH4U_put_msg_t;
+
+typedef struct MPIDI_CH4U_put_iov_ack_msg_t {
+ int src_rank;
+ uint64_t target_preq_ptr;
+ uint64_t origin_preq_ptr;
+} MPIDI_CH4U_put_iov_ack_msg_t;
+typedef MPIDI_CH4U_put_iov_ack_msg_t MPIDI_CH4U_acc_iov_ack_msg_t;
+typedef MPIDI_CH4U_put_iov_ack_msg_t MPIDI_CH4U_get_acc_iov_ack_msg_t;
+
+typedef struct MPIDI_CH4U_put_dat_msg_t {
+ uint64_t preq_ptr;
+} MPIDI_CH4U_put_dat_msg_t;
+typedef MPIDI_CH4U_put_dat_msg_t MPIDI_CH4U_acc_dat_msg_t;
+typedef MPIDI_CH4U_put_dat_msg_t MPIDI_CH4U_get_acc_dat_msg_t;
+
+typedef struct MPIDI_CH4U_put_ack_msg_t {
+ uint64_t preq_ptr;
+} MPIDI_CH4U_put_ack_msg_t;
+
+typedef struct MPIDI_CH4U_get_req_msg_t {
+ int src_rank;
+ uint64_t win_id;
+ uint64_t greq_ptr;
+ MPI_Aint target_disp;
+ uint64_t count;
+ MPI_Datatype datatype;
+ int n_iov;
+} MPIDI_CH4U_get_req_msg_t;
+
+typedef struct MPIDI_CH4U_get_ack_msg_t {
+ uint64_t greq_ptr;
+} MPIDI_CH4U_get_ack_msg_t;
+
+typedef struct MPIDI_CH4U_cswap_req_msg_t {
+ int src_rank;
+ uint64_t win_id;
+ uint64_t req_ptr;
+ MPI_Aint target_disp;
+ MPI_Datatype datatype;
+} MPIDI_CH4U_cswap_req_msg_t;
+
+typedef struct MPIDI_CH4U_cswap_ack_msg_t {
+ uint64_t req_ptr;
+} MPIDI_CH4U_cswap_ack_msg_t;
+
+typedef struct MPIDI_CH4U_acc_req_msg_t {
+ int src_rank;
+ uint64_t win_id;
+ uint64_t req_ptr;
+ int origin_count;
+ MPI_Datatype origin_datatype;
+ int target_count;
+ MPI_Datatype target_datatype;
+ MPI_Op op;
+ MPI_Aint target_disp;
+ uint64_t result_data_sz;
+ int n_iov;
+} MPIDI_CH4U_acc_req_msg_t;
+
+typedef struct MPIDI_CH4U_acc_req_msg_t MPIDI_CH4U_get_acc_req_msg_t;
+
+typedef struct MPIDI_CH4U_acc_ack_msg_t {
+ uint64_t req_ptr;
+} MPIDI_CH4U_acc_ack_msg_t;
+
+typedef MPIDI_CH4U_acc_ack_msg_t MPIDI_CH4U_get_acc_ack_msg_t;
+
+typedef struct MPIDI_CH4U_comm_req_list_t {
+ MPIR_Comm *comm[2][4];
+ MPIDI_CH4U_rreq_t *uelist[2][4];
+} MPIDI_CH4U_comm_req_list_t;
+
+typedef struct MPIU_buf_pool_t {
+ int size;
+ int num;
+ void *memory_region;
+ struct MPIU_buf_pool_t *next;
+ struct MPIU_buf_t *head;
+ pthread_mutex_t lock;
+} MPIU_buf_pool_t;
+
+typedef struct MPIU_buf_t {
+ struct MPIU_buf_t *next;
+ MPIU_buf_pool_t *pool;
+ char data[];
+} MPIU_buf_t;
+
+typedef struct {
+ int max_n_avts;
+ int n_avts;
+ int next_avtid;
+ int *free_avtid;
+} MPIDI_CH4_avt_manager;
+
+typedef struct MPIDI_CH4_Global_t {
+ MPIR_Request *request_test;
+ MPIR_Comm *comm_test;
+ int pname_set;
+ int pname_len;
+ char pname[MPI_MAX_PROCESSOR_NAME];
+ int is_initialized;
+ int allocated_max_n_avts;
+ MPIDI_CH4_avt_manager avt_mgr;
+ int is_ch4u_initialized;
+ MPID_Node_id_t **node_map, max_node_id;
+ MPIDI_CH4U_comm_req_list_t *comm_req_lists;
+ OPA_int_t active_progress_hooks;
+ MPIR_Commops MPIR_Comm_fns_store;
+ progress_hook_slot_t progress_hooks[MAX_PROGRESS_HOOKS];
+ MPID_Thread_mutex_t m[2];
+ MPIR_Win *win_hash;
+ int jobid;
+#ifndef MPIDI_CH4U_USE_PER_COMM_QUEUE
+ MPIDI_CH4U_rreq_t *posted_list;
+ MPIDI_CH4U_rreq_t *unexp_list;
+#endif
+ MPIDI_CH4U_req_ext_t *cmpl_list;
+ OPA_int_t exp_seq_no;
+ OPA_int_t nxt_seq_no;
+ void *netmod_context[8];
+ MPIU_buf_pool_t *buf_pool;
+} MPIDI_CH4_Global_t;
+extern MPIDI_CH4_Global_t MPIDI_CH4_Global;
+#ifdef MPL_USE_DBG_LOGGING
+extern MPL_dbg_class MPIDI_CH4_DBG_GENERAL;
+extern MPL_dbg_class MPIDI_CH4_DBG_MAP;
+extern MPL_dbg_class MPIDI_CH4_DBG_COMM;
+extern MPL_dbg_class MPIDI_CH4_DBG_MEMORY;
+#endif
+#define MPIDI_CH4I_THREAD_PROGRESS_MUTEX MPIDI_CH4_Global.m[0]
+#define MPIDI_CH4I_THREAD_PROGRESS_HOOK_MUTEX MPIDI_CH4_Global.m[1]
+
+#endif /* CH4_TYPES_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4_win.h b/src/mpid/ch4/src/ch4_win.h
new file mode 100644
index 0000000..d744cc0
--- /dev/null
+++ b/src/mpid/ch4/src/ch4_win.h
@@ -0,0 +1,533 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4_WIN_H_INCLUDED
+#define CH4_WIN_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_set_info
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_SET_INFO);
+ mpi_errno = MPIDI_NM_mpi_win_set_info(win, info);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_SET_INFO);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_start
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_START);
+ mpi_errno = MPIDI_NM_mpi_win_start(group, assert, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_START);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_complete
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_complete(MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_COMPLETE);
+ mpi_errno = MPIDI_NM_mpi_win_complete(win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_COMPLETE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_post
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_POST);
+ mpi_errno = MPIDI_NM_mpi_win_post(group, assert, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_POST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_wait
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_wait(MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_WAIT);
+ mpi_errno = MPIDI_NM_mpi_win_wait(win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_WAIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_test
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_test(MPIR_Win * win, int *flag)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_TEST);
+ mpi_errno = MPIDI_NM_mpi_win_test(win, flag);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_TEST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_lock
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_LOCK);
+ mpi_errno = MPIDI_NM_mpi_win_lock(lock_type, rank, assert, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_LOCK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_unlock
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_unlock(int rank, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_UNLOCK);
+ mpi_errno = MPIDI_NM_mpi_win_unlock(rank, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_UNLOCK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_get_info
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_GET_INFO);
+ mpi_errno = MPIDI_NM_mpi_win_get_info(win, info_p_p);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_GET_INFO);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_free
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_free(MPIR_Win ** win_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_FREE);
+ mpi_errno = MPIDI_NM_mpi_win_free(win_ptr);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_FREE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_fence
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_fence(int assert, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_FENCE);
+ mpi_errno = MPIDI_NM_mpi_win_fence(assert, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_FENCE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_create
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_CREATE);
+ mpi_errno = MPIDI_NM_mpi_win_create(base, length, disp_unit, info, comm_ptr, win_ptr);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_CREATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_attach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_ATTACH);
+ mpi_errno = MPIDI_NM_mpi_win_attach(win, base, size);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_ATTACH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_allocate_shared
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_ALLOCATE_SHARED);
+ mpi_errno = MPIDI_NM_mpi_win_allocate_shared(size, disp_unit,
+ info_ptr, comm_ptr, base_ptr, win_ptr);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_ALLOCATE_SHARED);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_flush_local
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_flush_local(int rank, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_FLUSH_LOCAL);
+ mpi_errno = MPIDI_NM_mpi_win_flush_local(rank, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_FLUSH_LOCAL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_detach(MPIR_Win * win, const void *base)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_DETACH);
+ mpi_errno = MPIDI_NM_mpi_win_detach(win, base);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_DETACH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_shared_query
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_shared_query(MPIR_Win * win,
+ int rank, MPI_Aint * size, int *disp_unit,
+ void *baseptr)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_SHARED_QUERY);
+ mpi_errno = MPIDI_NM_mpi_win_shared_query(win, rank, size, disp_unit, baseptr);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_SHARED_QUERY);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_allocate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_ALLOCATE);
+ mpi_errno = MPIDI_NM_mpi_win_allocate(size, disp_unit, info, comm, baseptr, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_ALLOCATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_flush
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_flush(int rank, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_FLUSH);
+ mpi_errno = MPIDI_NM_mpi_win_flush(rank, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_FLUSH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_flush_local_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_flush_local_all(MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_FLUSH_LOCAL_ALL);
+ mpi_errno = MPIDI_NM_mpi_win_flush_local_all(win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_FLUSH_LOCAL_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_unlock_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_unlock_all(MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_UNLOCK_ALL);
+ mpi_errno = MPIDI_NM_mpi_win_unlock_all(win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_UNLOCK_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_create_dynamic
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_create_dynamic(MPIR_Info * info, MPIR_Comm * comm,
+ MPIR_Win ** win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_CREATE_DYNAMIC);
+ mpi_errno = MPIDI_NM_mpi_win_create_dynamic(info, comm, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_CREATE_DYNAMIC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_sync
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_sync(MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_SYNC);
+ mpi_errno = MPIDI_NM_mpi_win_sync(win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_SYNC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_flush_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_flush_all(MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_FLUSH_ALL);
+ mpi_errno = MPIDI_NM_mpi_win_flush_all(win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_FLUSH_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Win_lock_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_Win_lock_all(int assert, MPIR_Win * win)
+{
+ int mpi_errno;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_LOCK_ALL);
+ mpi_errno = MPIDI_NM_mpi_win_lock_all(assert, win);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_LOCK_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4i_comm.h b/src/mpid/ch4/src/ch4i_comm.h
new file mode 100644
index 0000000..578fc7b
--- /dev/null
+++ b/src/mpid/ch4/src/ch4i_comm.h
@@ -0,0 +1,1226 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef CH4I_COMM_H_INCLUDED
+#define CH4I_COMM_H_INCLUDED
+
+#include "ch4_types.h"
+#include "mpl_utlist.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_alloc_lut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_alloc_lut(MPIDI_rank_map_lut_t ** lut, int size)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_rank_map_lut_t *new_lut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLOC_LUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLOC_LUT);
+
+ new_lut = (MPIDI_rank_map_lut_t *) MPL_malloc(sizeof(MPIDI_rank_map_lut_t)
+ + size * sizeof(MPIDI_lpid_t));
+ if (new_lut == NULL) {
+ *lut = NULL;
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
+ }
+
+ MPIR_Object_set_ref(new_lut, 1);
+ *lut = new_lut;
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MEMORY, VERBOSE,
+ (MPL_DBG_FDEST, "alloc lut %p, size %ld, refcount=%d",
+ new_lut, size * sizeof(MPIDI_lpid_t), MPIR_Object_get_ref(new_lut)));
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLOC_LUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_release_lut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDIU_release_lut(MPIDI_rank_map_lut_t * lut)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int count = 0;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_RELEASE_LUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_RELEASE_LUT);
+
+ MPIR_Object_release_ref(lut, &count);
+ if (count == 0) {
+ MPL_free(lut);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MEMORY, VERBOSE, (MPL_DBG_FDEST, "free lut %p", lut));
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_RELEASE_LUT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_alloc_mlut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_alloc_mlut(MPIDI_rank_map_mlut_t ** mlut, int size)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_rank_map_mlut_t *new_mlut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ALLOC_MLUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ALLOC_MLUT);
+
+ new_mlut = (MPIDI_rank_map_mlut_t *) MPL_malloc(sizeof(MPIDI_rank_map_mlut_t)
+ + size * sizeof(MPIDI_gpid_t));
+ if (new_mlut == NULL) {
+ *mlut = NULL;
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
+ }
+
+ MPIR_Object_set_ref(new_mlut, 1);
+ *mlut = new_mlut;
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MEMORY, VERBOSE,
+ (MPL_DBG_FDEST, "alloc mlut %p, size %ld, refcount=%d",
+ new_mlut, size * sizeof(MPIDI_gpid_t), MPIR_Object_get_ref(new_mlut)));
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ALLOC_MLUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_release_mlut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDIU_release_mlut(MPIDI_rank_map_mlut_t * mlut)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int count = 0;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_RELEASE_MLUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_RELEASE_MLUT);
+
+ MPIR_Object_release_ref(mlut, &count);
+ if (count == 0) {
+ MPL_free(mlut);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MEMORY, VERBOSE, (MPL_DBG_FDEST, "free mlut %p", mlut));
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_RELEASE_MLUT);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_map_size
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_map_size(MPIR_Comm_map_t map)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_MAP_SIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_MAP_SIZE);
+
+ if (map.type == MPIR_COMM_MAP_TYPE__IRREGULAR)
+ return map.src_mapping_size;
+ else if (map.dir == MPIR_COMM_MAP_DIR__L2L || map.dir == MPIR_COMM_MAP_DIR__L2R)
+ return map.src_comm->local_size;
+ else
+ return map.src_comm->remote_size;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_MAP_SIZE);
+}
+
+/*
+ * This enum is used exclusively in this header file
+ */
+enum MPIDI_src_mapper_models {
+ MPIDI_SRC_MAPPER_IRREGULAR = 0,
+ MPIDI_SRC_MAPPER_DIRECT = 1,
+ MPIDI_SRC_MAPPER_OFFSET = 2,
+ MPIDI_SRC_MAPPER_STRIDE = 3
+};
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_detect_regular_model
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_detect_regular_model(int *lpid, int size,
+ int *offset, int *blocksize, int *stride)
+{
+ int off = 0, bs = 0, st = 0;
+ int i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DETECT_REGULAR_MODEL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DETECT_REGULAR_MODEL);
+
+ off = lpid[0];
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, "\tdetect model: offset %d", off));
+
+ for (i = 0; i < size; i++) {
+ if (lpid[i] != i + off) {
+ break;
+ }
+ bs++;
+ }
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\tdetect model: blocksize %d", bs));
+ if (bs == size) {
+ if (off == 0) {
+ return MPIDI_SRC_MAPPER_DIRECT;
+ }
+ else {
+ *offset = off;
+ return MPIDI_SRC_MAPPER_OFFSET;
+ }
+ }
+
+ /* blocksize less than total size, try if this is stride */
+ st = lpid[bs] - lpid[0];
+ if (st < 0 || st <= bs) {
+ return MPIDI_SRC_MAPPER_IRREGULAR;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, "\tdetect model: stride %d", st));
+ for (i = bs; i < size; i++) {
+ if (lpid[i] != MPIDI_CALC_STRIDE(i, st, bs, off)) {
+ return MPIDI_SRC_MAPPER_IRREGULAR;
+ }
+ }
+ *offset = off;
+ *blocksize = bs;
+ *stride = st;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DETECT_REGULAR_MODEL);
+ return MPIDI_SRC_MAPPER_STRIDE;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_src_comm_to_lut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_src_comm_to_lut(MPIDI_rank_map_t * src,
+ MPIDI_rank_map_t * dest,
+ int size, int total_mapper_size, int mapper_offset)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ MPIDI_rank_map_lut_t *lut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SRC_COMM_TO_LUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SRC_COMM_TO_LUT);
+
+ if (!mapper_offset) {
+ mpi_errno = MPIDI_alloc_lut(&lut, total_mapper_size);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dest->size = total_mapper_size;
+ dest->mode = MPIDI_RANK_MAP_LUT;
+ dest->avtid = src->avtid;
+ dest->irreg.lut.t = lut;
+ dest->irreg.lut.lpid = lut->lpid;
+ }
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source mode %d", (int) src->mode));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, " size %d", size));
+ switch (src->mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = i;
+ }
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = i + src->reg.offset;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source offset %d", src->reg.offset));
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = MPIDI_CALC_STRIDE_SIMPLE(i,
+ src->reg.stride.
+ stride,
+ src->reg.stride.
+ offset);
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source stride %d blocksize %d offset %d",
+ src->reg.stride.stride, src->reg.stride.blocksize,
+ src->reg.stride.offset));
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = MPIDI_CALC_STRIDE(i,
+ src->reg.stride.stride,
+ src->reg.stride.blocksize,
+ src->reg.stride.offset);
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source stride %d blocksize %d offset %d",
+ src->reg.stride.stride, src->reg.stride.blocksize,
+ src->reg.stride.offset));
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = src->irreg.lut.lpid[i];
+ }
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SRC_COMM_TO_LUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_src_comm_to_mlut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_src_comm_to_mlut(MPIDI_rank_map_t * src,
+ MPIDI_rank_map_t * dest,
+ int size, int total_mapper_size, int mapper_offset)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ MPIDI_rank_map_mlut_t *mlut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SRC_COMM_TO_MLUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SRC_COMM_TO_MLUT);
+
+ if (!mapper_offset) {
+ mpi_errno = MPIDI_alloc_mlut(&mlut, total_mapper_size);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dest->size = total_mapper_size;
+ dest->mode = MPIDI_RANK_MAP_MLUT;
+ dest->avtid = -1;
+ dest->irreg.mlut.t = mlut;
+ dest->irreg.mlut.gpid = mlut->gpid;
+ }
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source mode %d", (int) src->mode));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, " size %d", size));
+ switch (src->mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.mlut.gpid[i + mapper_offset].lpid = i;
+ dest->irreg.mlut.gpid[i + mapper_offset].avtid = src->avtid;
+ }
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.mlut.gpid[i + mapper_offset].lpid = i + src->reg.offset;
+ dest->irreg.mlut.gpid[i + mapper_offset].avtid = src->avtid;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source offset %d", src->reg.offset));
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.mlut.gpid[i + mapper_offset].lpid = MPIDI_CALC_STRIDE_SIMPLE(i,
+ src->reg.
+ stride.stride,
+ src->reg.
+ stride.offset);
+ dest->irreg.mlut.gpid[i + mapper_offset].avtid = src->avtid;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source stride %d blocksize %d offset %d",
+ src->reg.stride.stride, src->reg.stride.blocksize,
+ src->reg.stride.offset));
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.mlut.gpid[i + mapper_offset].lpid = MPIDI_CALC_STRIDE(i,
+ src->reg.stride.
+ stride,
+ src->reg.stride.
+ blocksize,
+ src->reg.stride.
+ offset);
+ dest->irreg.mlut.gpid[i + mapper_offset].avtid = src->avtid;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source stride %d blocksize %d offset %d",
+ src->reg.stride.stride, src->reg.stride.blocksize,
+ src->reg.stride.offset));
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.mlut.gpid[i + mapper_offset].lpid = src->irreg.lut.lpid[i];
+ dest->irreg.mlut.gpid[i + mapper_offset].avtid = src->avtid;
+ }
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ for (i = 0; i < size; i++) {
+ dest->irreg.mlut.gpid[i + mapper_offset].lpid = src->irreg.mlut.gpid[i].lpid;
+ dest->irreg.mlut.gpid[i + mapper_offset].avtid = src->irreg.mlut.gpid[i].avtid;
+ }
+ break;
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SRC_COMM_TO_MLUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_src_mlut_to_mlut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_src_mlut_to_mlut(MPIDI_rank_map_t * src,
+ MPIDI_rank_map_t * dest,
+ MPIR_Comm_map_t * mapper,
+ int total_mapper_size, int mapper_offset)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ int size = MPIDI_map_size(*mapper);
+ MPIDI_rank_map_mlut_t *mlut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SRC_MLUT_TO_MLUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SRC_MLUT_TO_MLUT);
+
+ if (!mapper_offset) {
+ mpi_errno = MPIDI_alloc_mlut(&mlut, total_mapper_size);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dest->size = total_mapper_size;
+ }
+
+ dest->mode = MPIDI_RANK_MAP_MLUT;
+ dest->mode = src->mode;
+ dest->irreg.mlut.t = mlut;
+ dest->irreg.mlut.gpid = mlut->gpid;
+ for (i = 0; i < size; i++) {
+ dest->irreg.mlut.gpid[i + mapper_offset].avtid =
+ src->irreg.mlut.gpid[mapper->src_mapping[i]].avtid;
+ dest->irreg.mlut.gpid[i + mapper_offset].lpid =
+ src->irreg.mlut.gpid[mapper->src_mapping[i]].lpid;
+ }
+ fn_exit:
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " src mode %d, dest mode %d",
+ (int) src->mode, (int) dest->mode));
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SRC_MLUT_TO_MLUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_src_map_to_lut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_src_map_to_lut(MPIDI_rank_map_t * src,
+ MPIDI_rank_map_t * dest,
+ MPIR_Comm_map_t * mapper,
+ int total_mapper_size, int mapper_offset)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ int size = MPIDI_map_size(*mapper);
+ MPIDI_rank_map_lut_t *lut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SRC_MAP_TO_LUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SRC_MAP_TO_LUT);
+
+ if (!mapper_offset) {
+ mpi_errno = MPIDI_alloc_lut(&lut, total_mapper_size);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dest->size = total_mapper_size;
+ }
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source mode %d", (int) src->mode));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " size %d, mapper->src_mapping_size %d",
+ size, mapper->src_mapping_size));
+ dest->mode = MPIDI_RANK_MAP_LUT;
+ dest->avtid = src->avtid;
+ dest->irreg.lut.t = lut;
+ dest->irreg.lut.lpid = lut->lpid;
+ switch (src->mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = mapper->src_mapping[i];
+ }
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = mapper->src_mapping[i] + src->reg.offset;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source offset %d", src->reg.offset));
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] =
+ MPIDI_CALC_STRIDE_SIMPLE(mapper->src_mapping[i], src->reg.stride.stride,
+ src->reg.stride.offset);
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source stride %d blocksize %d offset %d",
+ src->reg.stride.stride, src->reg.stride.blocksize,
+ src->reg.stride.offset));
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = MPIDI_CALC_STRIDE(mapper->src_mapping[i],
+ src->reg.stride.stride,
+ src->reg.stride.blocksize,
+ src->reg.stride.offset);
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source stride %d blocksize %d offset %d",
+ src->reg.stride.stride, src->reg.stride.blocksize,
+ src->reg.stride.offset));
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ for (i = 0; i < size; i++) {
+ dest->irreg.lut.lpid[i + mapper_offset] = src->irreg.lut.lpid[mapper->src_mapping[i]];
+ }
+ break;
+ default:
+ mpi_errno = 1;
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " cannot convert mode %d to lut", (int) src->mode));
+ goto fn_fail;
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SRC_MAP_TO_LUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_direct_of_src_rmap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_direct_of_src_rmap(MPIDI_rank_map_t * src,
+ MPIDI_rank_map_t * dest, MPIR_Comm_map_t * mapper)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DIRECT_OF_SRC_RMAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DIRECT_OF_SRC_RMAP);
+ dest->mode = src->mode;
+ dest->size = MPIDI_map_size(*mapper);
+ dest->avtid = src->avtid;
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source mode %d", (int) src->mode));
+ switch (src->mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ dest->reg.offset = src->reg.offset;
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ dest->reg.stride.stride = src->reg.stride.stride;
+ dest->reg.stride.blocksize = src->reg.stride.blocksize;
+ dest->reg.stride.offset = src->reg.stride.offset;
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ dest->irreg.lut.t = src->irreg.lut.t;
+ dest->irreg.lut.lpid = src->irreg.lut.lpid;
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\tref count %d", MPIR_Object_get_ref(src->irreg.lut.t)));
+ MPIR_Object_add_ref(src->irreg.lut.t);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, "\tadd ref to src lut"));
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ dest->irreg.mlut.t = src->irreg.mlut.t;
+ dest->irreg.mlut.gpid = src->irreg.mlut.gpid;
+ MPIR_Object_add_ref(src->irreg.mlut.t);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, "\tadd ref to src mlut"));
+ break;
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DIRECT_OF_SRC_RMAP);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_offset_of_src_rmap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_offset_of_src_rmap(MPIDI_rank_map_t * src,
+ MPIDI_rank_map_t * dest,
+ MPIR_Comm_map_t * mapper, int offset)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_OFFSET_OF_SRC_RMAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_OFFSET_OF_SRC_RMAP);
+ dest->avtid = src->avtid;
+ dest->size = MPIDI_map_size(*mapper);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source mode %d", (int) src->mode));
+ switch (src->mode) {
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ dest->mode = MPIDI_RANK_MAP_OFFSET_INTRA;
+ dest->reg.offset = offset;
+ break;
+ case MPIDI_RANK_MAP_DIRECT:
+ dest->mode = MPIDI_RANK_MAP_OFFSET;
+ dest->reg.offset = offset;
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ dest->mode = MPIDI_RANK_MAP_OFFSET;
+ dest->reg.offset = src->reg.offset + offset;
+ break;
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ dest->mode = MPIDI_RANK_MAP_OFFSET_INTRA;
+ dest->reg.offset = src->reg.offset + offset;
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ dest->mode = MPIDI_RANK_MAP_STRIDE;
+ dest->reg.stride.stride = src->reg.stride.stride;
+ dest->reg.stride.blocksize = src->reg.stride.blocksize;
+ dest->reg.stride.offset = src->reg.stride.offset + offset * src->reg.stride.stride;
+ break;
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ dest->mode = MPIDI_RANK_MAP_STRIDE_INTRA;
+ dest->reg.stride.stride = src->reg.stride.stride;
+ dest->reg.stride.blocksize = src->reg.stride.blocksize;
+ dest->reg.stride.offset = src->reg.stride.offset + offset * src->reg.stride.stride;
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ MPIDI_src_map_to_lut(src, dest, mapper, mapper->src_mapping_size, 0);
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ dest->mode = src->mode;
+ dest->irreg.lut.t = src->irreg.lut.t;
+ dest->irreg.lut.lpid = &src->irreg.lut.lpid[offset];
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\tref count %d", MPIR_Object_get_ref(src->irreg.lut.t)));
+ MPIR_Object_add_ref(src->irreg.lut.t);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, "\tadd ref to src lut"));
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ dest->mode = src->mode;
+ dest->irreg.mlut.t = src->irreg.mlut.t;
+ dest->irreg.mlut.gpid = &src->irreg.mlut.gpid[offset];
+ MPIR_Object_add_ref(src->irreg.mlut.t);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, "\tadd ref to src mlut"));
+ break;
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_OFFSET_OF_SRC_RMAP);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_stride_of_src_rmap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_stride_of_src_rmap(MPIDI_rank_map_t * src,
+ MPIDI_rank_map_t * dest,
+ MPIR_Comm_map_t * mapper,
+ int stride, int blocksize, int offset)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_STRIDE_OF_SRC_RMAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_STRIDE_OF_SRC_RMAP);
+ dest->avtid = src->avtid;
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " source mode %d", (int) src->mode));
+ switch (src->mode) {
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ if (blocksize == 1) {
+ dest->mode = MPIDI_RANK_MAP_STRIDE_INTRA;
+ }
+ else {
+ dest->mode = MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA;
+ }
+ dest->size = MPIDI_map_size(*mapper);
+ dest->reg.stride.stride = stride;
+ dest->reg.stride.blocksize = blocksize;
+ dest->reg.stride.offset = offset;
+ MPIR_Assert(stride > 0);
+ MPIR_Assert(blocksize > 0);
+ break;
+ case MPIDI_RANK_MAP_DIRECT:
+ if (blocksize == 1) {
+ dest->mode = MPIDI_RANK_MAP_STRIDE;
+ }
+ else {
+ dest->mode = MPIDI_RANK_MAP_STRIDE_BLOCK;
+ }
+ dest->size = MPIDI_map_size(*mapper);
+ dest->reg.stride.stride = stride;
+ dest->reg.stride.blocksize = blocksize;
+ dest->reg.stride.offset = offset;
+ MPIR_Assert(stride > 0);
+ MPIR_Assert(blocksize > 0);
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ if (blocksize == 1) {
+ dest->mode = MPIDI_RANK_MAP_STRIDE;
+ }
+ else {
+ dest->mode = MPIDI_RANK_MAP_STRIDE_BLOCK;
+ }
+ dest->size = MPIDI_map_size(*mapper);
+ dest->reg.stride.stride = stride;
+ dest->reg.stride.blocksize = blocksize;
+ dest->reg.stride.offset = offset + src->reg.offset;
+ break;
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ if (blocksize == 1) {
+ dest->mode = MPIDI_RANK_MAP_STRIDE_INTRA;
+ }
+ else {
+ dest->mode = MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA;
+ }
+ dest->size = MPIDI_map_size(*mapper);
+ dest->reg.stride.stride = stride;
+ dest->reg.stride.blocksize = blocksize;
+ dest->reg.stride.offset = offset + src->reg.offset;
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ if (blocksize == 1) {
+ dest->mode = MPIDI_RANK_MAP_STRIDE;
+ dest->reg.stride.stride = src->reg.stride.stride * stride;
+ dest->reg.stride.blocksize = blocksize;
+ dest->reg.stride.offset = src->reg.stride.stride * offset + src->reg.stride.offset;
+ }
+ else {
+ MPIDI_src_map_to_lut(src, dest, mapper, mapper->src_mapping_size, 0);
+ }
+ break;
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ if (blocksize == 1) {
+ dest->mode = MPIDI_RANK_MAP_STRIDE_INTRA;
+ dest->reg.stride.stride = src->reg.stride.stride * stride;
+ dest->reg.stride.blocksize = blocksize;
+ dest->reg.stride.offset = src->reg.stride.stride * offset + src->reg.stride.offset;
+ }
+ else {
+ MPIDI_src_map_to_lut(src, dest, mapper, mapper->src_mapping_size, 0);
+ }
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ MPIDI_src_map_to_lut(src, dest, mapper, mapper->src_mapping_size, 0);
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ MPIDI_src_map_to_lut(src, dest, mapper, mapper->src_mapping_size, 0);
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ MPIDI_src_mlut_to_mlut(src, dest, mapper, mapper->src_mapping_size, 0);
+ break;
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_STRIDE_OF_SRC_RMAP);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_check_convert_mlut_to_lut
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_check_convert_mlut_to_lut(MPIDI_rank_map_t * src)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ int flag = 1;
+ int avtid;
+ MPIDI_rank_map_mlut_t *mlut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CHECK_CONVERT_MLUT_TO_LUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CHECK_CONVERT_MLUT_TO_LUT);
+
+ if (src->mode != MPIDI_RANK_MAP_MLUT) {
+ goto fn_exit;
+ }
+
+ /* check if all mlut item has the same avtid */
+ avtid = src->irreg.mlut.gpid[0].avtid;
+ for (i = 1; i < src->size; i++) {
+ if (src->irreg.mlut.gpid[i].avtid != avtid) {
+ flag = 0;
+ break;
+ }
+ }
+ if (!flag) { /* multiple avtid */
+ goto fn_exit;
+ }
+
+ src->avtid = avtid;
+ if (avtid == 0) {
+ src->mode = MPIDI_RANK_MAP_LUT_INTRA;
+ }
+ else {
+ src->mode = MPIDI_RANK_MAP_LUT;
+ }
+ mlut = src->irreg.mlut.t;
+ mpi_errno = MPIDI_alloc_lut(&src->irreg.lut.t, src->size);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ src->irreg.lut.lpid = src->irreg.lut.t->lpid;
+ for (i = 0; i < src->size; i++) {
+ src->irreg.lut.lpid[i] = mlut->gpid[i].lpid;
+ }
+ MPIDIU_release_mlut(mlut);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, " avtid %d", src->avtid));
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CHECK_CONVERT_MLUT_TO_LUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_check_convert_lut_to_regular
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_check_convert_lut_to_regular(MPIDI_rank_map_t * src)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int mode_detected, offset, blocksize, stride;
+ MPIDI_rank_map_lut_t *lut = NULL;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CHECK_CONVERT_LUT_TO_REGULAR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CHECK_CONVERT_LUT_TO_REGULAR);
+
+ if (src->mode != MPIDI_RANK_MAP_LUT && src->mode != MPIDI_RANK_MAP_LUT_INTRA) {
+ goto fn_exit;
+ }
+
+ lut = src->irreg.lut.t;
+ mode_detected = MPIDI_detect_regular_model(src->irreg.lut.lpid, src->size,
+ &offset, &blocksize, &stride);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " detected mode: %d", mode_detected));
+
+
+ switch (mode_detected) {
+ case MPIDI_SRC_MAPPER_DIRECT:
+ src->mode = MPIDI_RANK_MAP_DIRECT;
+ if (src->avtid == 0) {
+ src->mode = MPIDI_RANK_MAP_DIRECT_INTRA;
+ }
+ src->irreg.lut.t = NULL;
+ src->irreg.lut.lpid = NULL;
+ MPIDIU_release_lut(lut);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\tlut to mode %d", (int) src->mode));
+ break;
+ case MPIDI_SRC_MAPPER_OFFSET:
+ src->mode = MPIDI_RANK_MAP_OFFSET;
+ if (src->avtid == 0) {
+ src->mode = MPIDI_RANK_MAP_OFFSET_INTRA;
+ }
+ src->reg.offset = offset;
+ src->irreg.lut.t = NULL;
+ src->irreg.lut.lpid = NULL;
+ MPIDIU_release_lut(lut);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " lut to mode %d", (int) src->mode));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\toffset: %d", src->reg.offset));
+ break;
+ case MPIDI_SRC_MAPPER_STRIDE:
+ if (blocksize == 1) {
+ src->mode = MPIDI_RANK_MAP_STRIDE;
+ if (src->avtid == 0) {
+ src->mode = MPIDI_RANK_MAP_STRIDE_INTRA;
+ }
+ }
+ else {
+ src->mode = MPIDI_RANK_MAP_STRIDE_BLOCK;
+ if (src->avtid == 0) {
+ src->mode = MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA;
+ }
+ }
+ src->reg.stride.stride = stride;
+ src->reg.stride.blocksize = blocksize;
+ src->reg.stride.offset = offset;
+ src->irreg.lut.t = NULL;
+ src->irreg.lut.lpid = NULL;
+ MPIDIU_release_lut(lut);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " lut to mode %d", (int) src->mode));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\toffset: %d", src->reg.stride.offset));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\tblocksize: %d", src->reg.stride.blocksize));
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\tstride: %d", src->reg.stride.stride));
+ break;
+ }
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CHECK_CONVERT_LUT_TO_REGULAR);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_set_map
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_set_map(MPIDI_rank_map_t * src_rmap,
+ MPIDI_rank_map_t * dest_rmap,
+ MPIR_Comm_map_t * mapper,
+ int src_comm_size, int total_mapper_size, int mapper_offset)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SET_MAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SET_MAP);
+
+ /* Simplest case: MAP_DUP, exact duplication of src_comm */
+ if (mapper->type == MPIR_COMM_MAP_TYPE__DUP && src_comm_size == total_mapper_size) {
+ MPIDI_direct_of_src_rmap(src_rmap, dest_rmap, mapper);
+ goto fn_exit;
+ }
+ /* single src_comm, newcomm is smaller than src_comm, only one mapper */
+ else if (mapper->type == MPIR_COMM_MAP_TYPE__IRREGULAR &&
+ mapper->src_mapping_size == total_mapper_size) {
+ /* check if new comm has the same mapping as src_comm */
+ /* detect src_mapping_offset for direct_to_direct and offset_to_offset */
+ int mode_detected, offset, blocksize, stride;
+ mode_detected = MPIDI_detect_regular_model(mapper->src_mapping, mapper->src_mapping_size,
+ &offset, &blocksize, &stride);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\tdetected mode: %d", mode_detected));
+
+ switch (mode_detected) {
+ case MPIDI_SRC_MAPPER_DIRECT:
+ MPIDI_direct_of_src_rmap(src_rmap, dest_rmap, mapper);
+ break;
+ case MPIDI_SRC_MAPPER_OFFSET:
+ MPIDI_offset_of_src_rmap(src_rmap, dest_rmap, mapper, offset);
+ break;
+ case MPIDI_SRC_MAPPER_STRIDE:
+ MPIDI_stride_of_src_rmap(src_rmap, dest_rmap, mapper, stride, blocksize, offset);
+ break;
+ default:
+ if (src_rmap->mode == MPIDI_RANK_MAP_MLUT) {
+ MPIDI_src_mlut_to_mlut(src_rmap, dest_rmap, mapper, total_mapper_size,
+ mapper_offset);
+ }
+ else {
+ MPIDI_src_map_to_lut(src_rmap, dest_rmap, mapper, mapper->src_mapping_size,
+ mapper_offset);
+ }
+ }
+ goto fn_exit;
+ }
+
+ /* more complex case: multiple mappers
+ * We always alloc lut (or mlut is src_rmap is mlut). We will check if a
+ * lut mapping can be converted to something simpler after all the mapper
+ * are processed
+ */
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE, (MPL_DBG_FDEST, " multiple mapper"));
+ if (mapper->type == MPIR_COMM_MAP_TYPE__DUP) {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " check map_size %d, src_comm_size %d",
+ MPIDI_map_size(*mapper), src_comm_size));
+ MPIDI_src_comm_to_mlut(src_rmap, dest_rmap, src_comm_size,
+ total_mapper_size, mapper_offset);
+ }
+ else { /* mapper->type == MPIR_COMM_MAP_TYPE__IRREGULAR */
+ MPIDI_src_mlut_to_mlut(src_rmap, dest_rmap, mapper, total_mapper_size, mapper_offset);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SET_MAP);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_comm_create_rank_map
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_comm_create_rank_map(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Comm_map_t *mapper;
+ MPIR_Comm *src_comm;
+ int total_mapper_size, mapper_offset;
+
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_COMM_CREATE_RANK_MAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_COMM_CREATE_RANK_MAP);
+
+ /* do some sanity checks */
+ MPL_LL_FOREACH(comm->mapper_head, mapper) {
+ if (mapper->src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIR_Assert(mapper->dir == MPIR_COMM_MAP_DIR__L2L ||
+ mapper->dir == MPIR_COMM_MAP_DIR__L2R);
+
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM)
+ MPIR_Assert(mapper->dir == MPIR_COMM_MAP_DIR__L2L ||
+ mapper->dir == MPIR_COMM_MAP_DIR__R2L);
+ }
+
+ /* First, handle all the mappers that contribute to the local part
+ * of the comm */
+ total_mapper_size = 0;
+ MPL_LL_FOREACH(comm->mapper_head, mapper) {
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2R || mapper->dir == MPIR_COMM_MAP_DIR__R2R)
+ continue;
+
+ total_mapper_size += MPIDI_map_size(*mapper);
+ }
+ mapper_offset = 0;
+ MPL_LL_FOREACH(comm->mapper_head, mapper) {
+ src_comm = mapper->src_comm;
+
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2R || mapper->dir == MPIR_COMM_MAP_DIR__R2R)
+ continue;
+
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2L) {
+ if (src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
+ comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " intra->intra, L2L, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->local_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, map), &MPIDI_COMM(comm, map), mapper,
+ src_comm->local_size, total_mapper_size, mapper_offset);
+ }
+ else if (src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
+ comm->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " intra->inter, L2L, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->local_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, map), &MPIDI_COMM(comm, local_map), mapper,
+ src_comm->local_size, total_mapper_size, mapper_offset);
+ }
+ else if (src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM &&
+ comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " inter->intra, L2L, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->local_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, local_map), &MPIDI_COMM(comm, map), mapper,
+ src_comm->local_size, total_mapper_size, mapper_offset);
+ }
+ else { /* src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM && comm->comm_kind == MPIR_COMM_KIND__INTERCOMM */
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " inter->inter, L2L, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->local_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, local_map), &MPIDI_COMM(comm, local_map),
+ mapper, src_comm->local_size, total_mapper_size, mapper_offset);
+ }
+ }
+ else { /* mapper->dir == MPIR_COMM_MAP_DIR__R2L */
+ MPIR_Assert(src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM);
+
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " ->intra, R2L, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->remote_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, map), &MPIDI_COMM(comm, map), mapper,
+ src_comm->remote_size, total_mapper_size, mapper_offset);
+ }
+ else {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " ->inter, R2L, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->remote_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, map), &MPIDI_COMM(comm, local_map), mapper,
+ src_comm->remote_size, total_mapper_size, mapper_offset);
+ }
+ }
+
+ mapper_offset += MPIDI_map_size(*mapper);
+ }
+
+ /* Next, handle all the mappers that contribute to the remote part
+ * of the comm (only valid for intercomms)
+ */
+ total_mapper_size = 0;
+ MPL_LL_FOREACH(comm->mapper_head, mapper) {
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2L || mapper->dir == MPIR_COMM_MAP_DIR__R2L)
+ continue;
+
+ total_mapper_size += MPIDI_map_size(*mapper);
+ }
+ mapper_offset = 0;
+ MPL_LL_FOREACH(comm->mapper_head, mapper) {
+ src_comm = mapper->src_comm;
+
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2L || mapper->dir == MPIR_COMM_MAP_DIR__R2L)
+ continue;
+
+ MPIR_Assert(comm->comm_kind == MPIR_COMM_KIND__INTERCOMM);
+
+ if (mapper->dir == MPIR_COMM_MAP_DIR__L2R) {
+ if (src_comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " intra->, L2R, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->local_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, map), &MPIDI_COMM(comm, map), mapper,
+ src_comm->local_size, total_mapper_size, mapper_offset);
+ }
+ else { /* src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM */
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " inter->, L2R, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->local_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, local_map), &MPIDI_COMM(comm, map), mapper,
+ src_comm->local_size, total_mapper_size, mapper_offset);
+ }
+ }
+ else { /* mapper->dir == MPIR_COMM_MAP_DIR__R2R */
+ MPIR_Assert(src_comm->comm_kind == MPIR_COMM_KIND__INTERCOMM);
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST,
+ " inter->, R2R, size=%d, total_mapper_size=%d, mapper_offset=%d",
+ src_comm->remote_size, total_mapper_size, mapper_offset));
+ MPIDI_set_map(&MPIDI_COMM(src_comm, map), &MPIDI_COMM(comm, map), mapper,
+ src_comm->remote_size, total_mapper_size, mapper_offset);
+ }
+
+ mapper_offset += MPIDI_map_size(*mapper);
+ }
+
+ /* check before finishing
+ * 1. if mlut can be converted to lut: all avtids are the same
+ * 2. if lut can be converted to regular modes: direct, offset, and more
+ */
+ MPIDI_check_convert_mlut_to_lut(&MPIDI_COMM(comm, map));
+ MPIDI_check_convert_lut_to_regular(&MPIDI_COMM(comm, map));
+ if (comm->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ MPIDI_check_convert_mlut_to_lut(&MPIDI_COMM(comm, local_map));
+ MPIDI_check_convert_lut_to_regular(&MPIDI_COMM(comm, local_map));
+ }
+
+ if (comm->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ /* setup the lut for the local_comm in the intercomm */
+ if (comm->local_comm) {
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, "\t create local_comm using src_comm"));
+ MPIDI_direct_of_src_rmap(&MPIDI_COMM(comm, local_map),
+ &MPIDI_COMM(comm->local_comm, map), mapper);
+
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MEMORY, VERBOSE,
+ (MPL_DBG_FDEST, "create local_comm using src_comm"));
+ }
+ }
+
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ MPIDI_COMM(comm, local_map).mode = MPIDI_RANK_MAP_NONE;
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_COMM_CREATE_RANK_MAP);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_check_disjoint_lupids
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_check_disjoint_lupids(int lupids1[], int n1,
+ int lupids2[], int n2)
+{
+ int i, mask_size, idx, bit, maxlupid = -1;
+ int mpi_errno = MPI_SUCCESS;
+ uint32_t lupidmaskPrealloc[128];
+ uint32_t *lupidmask;
+ MPIR_CHKLMEM_DECL(1);
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CHECK_DISJOINT_LUPIDS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CHECK_DISJOINT_LUPIDS);
+
+ /* Find the max lupid */
+ for (i = 0; i < n1; i++) {
+ if (lupids1[i] > maxlupid)
+ maxlupid = lupids1[i];
+ }
+ for (i = 0; i < n2; i++) {
+ if (lupids2[i] > maxlupid)
+ maxlupid = lupids2[i];
+ }
+
+ mask_size = (maxlupid / 32) + 1;
+
+ if (mask_size > 128) {
+ MPIR_CHKLMEM_MALLOC(lupidmask, uint32_t *, mask_size * sizeof(uint32_t),
+ mpi_errno, "lupidmask");
+ }
+ else {
+ lupidmask = lupidmaskPrealloc;
+ }
+
+ /* zero the bitvector array */
+ memset(lupidmask, 0x00, mask_size * sizeof(*lupidmask));
+
+ /* Set the bits for the first array */
+ for (i = 0; i < n1; i++) {
+ idx = lupids1[i] / 32;
+ bit = lupids1[i] % 32;
+ lupidmask[idx] = lupidmask[idx] | (1 << bit);
+ MPIR_Assert(idx < mask_size);
+ }
+
+ /* Look for any duplicates in the second array */
+ for (i = 0; i < n2; i++) {
+ idx = lupids2[i] / 32;
+ bit = lupids2[i] % 32;
+ if (lupidmask[idx] & (1 << bit)) {
+ MPIR_ERR_SET1(mpi_errno, MPI_ERR_COMM,
+ "**dupprocesses", "**dupprocesses %d", lupids2[i]);
+ goto fn_fail;
+ }
+ /* Add a check on duplicates *within* group 2 */
+ lupidmask[idx] = lupidmask[idx] | (1 << bit);
+ MPIR_Assert(idx < mask_size);
+ }
+
+ /* Also fall through for normal return */
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CHECK_DISJOINT_LUPIDS);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4I_COMM_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4i_util.h b/src/mpid/ch4/src/ch4i_util.h
new file mode 100644
index 0000000..e6a636d
--- /dev/null
+++ b/src/mpid/ch4/src/ch4i_util.h
@@ -0,0 +1,20 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4I_UTIL_H_INCLUDED
+#define CH4I_UTIL_H_INCLUDED
+
+void MPIDI_CH4I_map_create(void **_map);
+void MPIDI_CH4I_map_destroy(void *_map);
+void MPIDI_CH4I_map_set(void *_map, uint64_t id, void *val);
+void MPIDI_CH4I_map_erase(void *_map, uint64_t id);
+void *MPIDI_CH4I_map_lookup(void *_map, uint64_t id);
+
+#endif /* CH4I_UTIL_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_buf.h b/src/mpid/ch4/src/ch4r_buf.h
new file mode 100644
index 0000000..641962c
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_buf.h
@@ -0,0 +1,174 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_BUF_H_INCLUDED
+#define CH4R_BUF_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4i_util.h"
+#include <pthread.h>
+
+/*
+ initial prototype of buffer pool.
+
+ TODO:
+ - align buffer region
+ - add garbage collection
+ - use huge pages
+*/
+
+static inline MPIU_buf_pool_t *MPIDI_create_buf_pool(int num, int size,
+ MPIU_buf_pool_t * parent_pool)
+{
+ int i;
+ MPIU_buf_pool_t *buf_pool;
+ MPIU_buf_t *curr, *next;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CREATE_BUF_POOL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CREATE_BUF_POOL);
+
+ buf_pool = (MPIU_buf_pool_t *) MPL_malloc(sizeof(*buf_pool));
+ MPIR_Assert(buf_pool);
+ pthread_mutex_init(&buf_pool->lock, NULL);
+
+ buf_pool->size = size;
+ buf_pool->num = num;
+ buf_pool->next = NULL;
+ buf_pool->memory_region = MPL_malloc(num * (sizeof(MPIU_buf_t) + size));
+ MPIR_Assert(buf_pool->memory_region);
+
+ curr = (MPIU_buf_t *) buf_pool->memory_region;
+ buf_pool->head = curr;
+ for (i = 0; i < num - 1; i++) {
+ next = (MPIU_buf_t *) ((char *) curr + size + sizeof(MPIU_buf_t));
+ curr->next = next;
+ curr->pool = parent_pool ? parent_pool : buf_pool;
+ curr = curr->next;
+ }
+ curr->next = NULL;
+ curr->pool = parent_pool ? parent_pool : buf_pool;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CREATE_BUF_POOL);
+ return buf_pool;
+}
+
+static inline MPIU_buf_pool_t *MPIDI_CH4U_create_buf_pool(int num, int size)
+{
+ MPIU_buf_pool_t *buf_pool;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_CREATE_BUF_POOL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_CREATE_BUF_POOL);
+
+ buf_pool = MPIDI_create_buf_pool(num, size, NULL);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_CREATE_BUF_POOL);
+ return buf_pool;
+}
+
+static inline void *MPIDI_CH4U_get_head_buf(MPIU_buf_pool_t * pool)
+{
+ void *buf;
+ MPIU_buf_t *curr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_GET_HEAD_BUF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_GET_HEAD_BUF);
+
+ curr = pool->head;
+ pool->head = curr->next;
+ buf = curr->data;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_GET_HEAD_BUF);
+ return buf;
+}
+
+static inline void *MPIDI_CH4R_get_buf_safe(MPIU_buf_pool_t * pool)
+{
+ void *buf;
+ MPIU_buf_pool_t *curr_pool;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_GET_BUF_SAFE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_GET_BUF_SAFE);
+
+ if (pool->head) {
+ buf = MPIDI_CH4U_get_head_buf(pool);
+ goto fn_exit;
+ }
+
+ curr_pool = pool;
+ while (curr_pool->next)
+ curr_pool = curr_pool->next;
+
+ curr_pool->next = MPIDI_create_buf_pool(pool->num, pool->size, pool);
+ MPIR_Assert(curr_pool->next);
+ pool->head = curr_pool->next->head;
+ buf = MPIDI_CH4U_get_head_buf(pool);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_GET_BUF_SAFE);
+ return buf;
+}
+
+
+static inline void *MPIDI_CH4R_get_buf(MPIU_buf_pool_t * pool)
+{
+ void *buf;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_GET_BUF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_GET_BUF);
+
+ pthread_mutex_lock(&pool->lock);
+ buf = MPIDI_CH4R_get_buf_safe(pool);
+ pthread_mutex_unlock(&pool->lock);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_GET_BUF);
+ return buf;
+}
+
+static inline void MPIDI_CH4R_release_buf_safe(void *buf)
+{
+ MPIU_buf_t *curr_buf;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_RELEASE_BUF_SAFE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_RELEASE_BUF_SAFE);
+
+ curr_buf = container_of(buf, MPIU_buf_t, data);
+ curr_buf->next = curr_buf->pool->head;
+ curr_buf->pool->head = curr_buf;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_RELEASE_BUF_SAFE);
+}
+
+static inline void MPIDI_CH4R_release_buf(void *buf)
+{
+ MPIU_buf_t *curr_buf;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_RELEASE_BUF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_RELEASE_BUF);
+
+ curr_buf = container_of(buf, MPIU_buf_t, data);
+ pthread_mutex_lock(&curr_buf->pool->lock);
+ curr_buf->next = curr_buf->pool->head;
+ curr_buf->pool->head = curr_buf;
+ pthread_mutex_unlock(&curr_buf->pool->lock);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_RELEASE_BUF);
+}
+
+
+static inline void MPIDI_CH4R_destroy_buf_pool(MPIU_buf_pool_t * pool)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_DESTROY_BUF_POOL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_DESTROY_BUF_POOL);
+
+ if (pool->next)
+ MPIDI_CH4R_destroy_buf_pool(pool->next);
+
+ MPL_free(pool->memory_region);
+ MPL_free(pool);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_DESTROY_BUF_POOL);
+}
+
+#endif /* CH4R_BUF_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_callbacks.h b/src/mpid/ch4/src/ch4r_callbacks.h
new file mode 100644
index 0000000..a03d191
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_callbacks.h
@@ -0,0 +1,637 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_CALLBACKS_H_INCLUDED
+#define CH4R_CALLBACKS_H_INCLUDED
+
+/* This file includes all callback routines and the completion function of
+ * receive callback for send-receive AM. All handlers on the packet issuing
+ * side are named with suffix "_origin_cb", and all handlers on the
+ * packet receiving side are named with "_target_msg_cb". */
+
+#include "mpidig.h"
+#include "ch4r_request.h"
+#include "ch4r_recv.h"
+
+static inline int MPIDI_recv_target_cmpl_cb(MPIR_Request * rreq);
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_check_cmpl_order
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_check_cmpl_order(MPIR_Request * req,
+ MPIDIG_am_target_cmpl_cb target_cmpl_cb)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CHECK_CMPL_ORDER);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CHECK_CMPL_ORDER);
+
+ if (MPIDI_CH4U_REQUEST(req, req->seq_no) ==
+ (uint64_t) OPA_load_int(&MPIDI_CH4_Global.exp_seq_no)) {
+ OPA_incr_int(&MPIDI_CH4_Global.exp_seq_no);
+ return 1;
+ }
+
+ MPIDI_CH4U_REQUEST(req, req->target_cmpl_cb) = (void *) target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(req, req->request) = (uint64_t) req;
+ /* MPIDI_CS_ENTER(); */
+ MPL_DL_APPEND(MPIDI_CH4_Global.cmpl_list, req->dev.ch4.am.req);
+ /* MPIDI_CS_EXIT(); */
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CHECK_CMPL_ORDER);
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_progress_cmpl_list
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_progress_cmpl_list(void)
+{
+ MPIR_Request *req;
+ MPIDI_CH4U_req_ext_t *curr, *tmp;
+ MPIDIG_am_target_cmpl_cb target_cmpl_cb;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_CMPL_LIST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PROGRESS_CMPL_LIST);
+
+ /* MPIDI_CS_ENTER(); */
+ do_check_again:
+ MPL_DL_FOREACH_SAFE(MPIDI_CH4_Global.cmpl_list, curr, tmp) {
+ if (curr->seq_no == (uint64_t) OPA_load_int(&MPIDI_CH4_Global.exp_seq_no)) {
+ MPL_DL_DELETE(MPIDI_CH4_Global.cmpl_list, curr);
+ req = (MPIR_Request *) curr->request;
+ target_cmpl_cb = (MPIDIG_am_target_cmpl_cb) curr->target_cmpl_cb;
+ target_cmpl_cb(req);
+ goto do_check_again;
+ }
+ }
+ /* MPIDI_CS_EXIT(); */
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PROGRESS_CMPL_LIST);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_handle_unexp_cmpl
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_handle_unexp_cmpl(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIR_Comm *root_comm;
+ MPIR_Request *match_req = NULL;
+ uint64_t msg_tag;
+ size_t count;
+ MPI_Aint last;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+ size_t dt_sz;
+ MPID_Segment *segment_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_HANDLE_UNEXP_CMPL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_HANDLE_UNEXP_CMPL);
+
+ /* MPIDI_CS_ENTER(); */
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_UNEXP_DQUED) {
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_UNEXP_CLAIMED) {
+ MPIDI_handle_unexp_mrecv(rreq);
+ }
+ /* MPIDI_CS_EXIT(); */
+ goto fn_exit;
+ }
+ /* MPIDI_CS_EXIT(); */
+
+ msg_tag = MPIDI_CH4U_REQUEST(rreq, tag);
+ root_comm = MPIDI_CH4U_context_id_to_comm(MPIDI_CH4U_get_context(msg_tag));
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_MATCHED) {
+ match_req = (MPIR_Request *) MPIDI_CH4U_REQUEST(rreq, req->rreq.match_req);
+ }
+ else {
+ /* MPIDI_CS_ENTER(); */
+ if (root_comm)
+ match_req =
+ MPIDI_CH4U_dequeue_posted(msg_tag, &MPIDI_CH4U_COMM(root_comm, posted_list));
+
+ if (match_req) {
+ MPIDI_CH4U_delete_unexp(rreq, &MPIDI_CH4U_COMM(root_comm, unexp_list));
+ /* Decrement the counter twice, one for posted_list and the other for unexp_list */
+ MPIR_Comm_release(root_comm);
+ MPIR_Comm_release(root_comm);
+ }
+ /* MPIDI_CS_EXIT(); */
+ }
+
+ if (!match_req) {
+ MPIDI_CH4U_REQUEST(rreq, req->status) &= ~MPIDI_CH4U_REQ_BUSY;
+ goto fn_exit;
+ }
+
+ match_req->status.MPI_SOURCE = MPIDI_CH4U_REQUEST(rreq, rank);
+ match_req->status.MPI_TAG = MPIDI_CH4U_get_tag(msg_tag);
+
+ MPIDI_Datatype_get_info(MPIDI_CH4U_REQUEST(match_req, count),
+ MPIDI_CH4U_REQUEST(match_req, datatype),
+ dt_contig, dt_sz, dt_ptr, dt_true_lb);
+ MPID_Datatype_get_size_macro(MPIDI_CH4U_REQUEST(match_req, datatype), dt_sz);
+
+ if (MPIDI_CH4U_REQUEST(rreq, count) > dt_sz * MPIDI_CH4U_REQUEST(match_req, count)) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ count = MPIDI_CH4U_REQUEST(match_req, count);
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ count = MPIDI_CH4U_REQUEST(rreq, count) / dt_sz;
+ }
+
+ MPIR_STATUS_SET_COUNT(match_req->status, count * dt_sz);
+ MPIDI_CH4U_REQUEST(rreq, count) = count;
+
+ if (!dt_contig) {
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(segment_ptr == NULL, mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "Recv MPIDU_Segment_alloc");
+ MPIDU_Segment_init(MPIDI_CH4U_REQUEST(match_req, buffer), count,
+ MPIDI_CH4U_REQUEST(match_req, datatype), segment_ptr, 0);
+
+ last = count * dt_sz;
+ MPIDU_Segment_unpack(segment_ptr, 0, &last, MPIDI_CH4U_REQUEST(rreq, buffer));
+ MPIDU_Segment_free(segment_ptr);
+ if (last != (MPI_Aint) (count * dt_sz)) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ __FUNCTION__, __LINE__,
+ MPI_ERR_TYPE, "**dtypemismatch", 0);
+ match_req->status.MPI_ERROR = mpi_errno;
+ }
+ }
+ else {
+ MPIR_Memcpy((char *) MPIDI_CH4U_REQUEST(match_req, buffer) + dt_true_lb,
+ MPIDI_CH4U_REQUEST(rreq, buffer), count * dt_sz);
+ }
+
+ MPIDI_CH4U_REQUEST(rreq, req->status) &= ~MPIDI_CH4U_REQ_UNEXPECTED;
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_PEER_SSEND) {
+ mpi_errno = MPIDI_reply_ssend(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ dtype_release_if_not_builtin(MPIDI_CH4U_REQUEST(match_req, datatype));
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, buffer));
+ MPIR_Object_release_ref(rreq, &c);
+ MPIDI_Request_complete(rreq);
+ MPIDI_Request_complete(match_req);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_HANDLE_UNEXP_CMPL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_do_send_target
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_do_send_target(void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request * rreq)
+{
+ int dt_contig, n_iov;
+ MPI_Aint dt_true_lb, last, num_iov;
+ MPIR_Datatype *dt_ptr;
+ MPID_Segment *segment_ptr;
+ size_t data_sz;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DO_SEND_TARGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DO_SEND_TARGET);
+
+ *target_cmpl_cb = MPIDI_recv_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(rreq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ if (p_data_sz == NULL)
+ return MPI_SUCCESS;
+
+ MPIDI_Datatype_get_info(MPIDI_CH4U_REQUEST(rreq, count),
+ MPIDI_CH4U_REQUEST(rreq, datatype),
+ dt_contig, data_sz, dt_ptr, dt_true_lb);
+ *is_contig = dt_contig;
+
+ if (dt_contig) {
+ *p_data_sz = data_sz;
+ *data = (char *) MPIDI_CH4U_REQUEST(rreq, buffer) + dt_true_lb;
+ }
+ else {
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+ MPIDU_Segment_init(MPIDI_CH4U_REQUEST(rreq, buffer),
+ MPIDI_CH4U_REQUEST(rreq, count),
+ MPIDI_CH4U_REQUEST(rreq, datatype), segment_ptr, 0);
+
+ if (*p_data_sz > data_sz) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ *p_data_sz = data_sz;
+ }
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ MPIDI_CH4U_REQUEST(rreq, req->iov) =
+ (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(MPIDI_CH4U_REQUEST(rreq, req->iov));
+
+ last = *p_data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, MPIDI_CH4U_REQUEST(rreq, req->iov),
+ &n_iov);
+ if (last != (MPI_Aint) * p_data_sz) {
+ rreq->status.MPI_ERROR = MPI_ERR_TYPE;
+ }
+ *data = MPIDI_CH4U_REQUEST(rreq, req->iov);
+ *p_data_sz = n_iov;
+ MPIDI_CH4U_REQUEST(rreq, req->status) |= MPIDI_CH4U_REQ_RCV_NON_CONTIG;
+ MPL_free(segment_ptr);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DO_SEND_TARGET);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_recv_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_recv_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_RECV_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_RECV_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(rreq, MPIDI_recv_target_cmpl_cb))
+ return mpi_errno;
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_RCV_NON_CONTIG) {
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, req->iov));
+ }
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_UNEXPECTED) {
+ mpi_errno = MPIDI_handle_unexp_cmpl(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ rreq->status.MPI_SOURCE = MPIDI_CH4U_REQUEST(rreq, rank);
+ rreq->status.MPI_TAG = MPIDI_CH4U_get_tag(MPIDI_CH4U_REQUEST(rreq, tag));
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_PEER_SSEND) {
+ mpi_errno = MPIDI_reply_ssend(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+#ifdef MPIDI_BUILD_CH4_SHM
+ if (MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq)) {
+ int continue_matching = 1;
+ MPIDI_CH4R_anysource_matched(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq), MPIDI_CH4R_NETMOD,
+ &continue_matching);
+ if (unlikely(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq))) {
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq)) = NULL;
+ MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq) = NULL;
+ }
+ }
+#endif
+
+ dtype_release_if_not_builtin(MPIDI_CH4U_REQUEST(rreq, datatype));
+ MPIDI_Request_complete(rreq);
+ fn_exit:
+ MPIDI_progress_cmpl_list();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_RECV_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_send_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_send_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_send_long_lmt_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_send_long_lmt_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND_LONG_LMT_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND_LONG_LMT_ORIGIN_CB);
+ dtype_release_if_not_builtin(MPIDI_CH4U_REQUEST(sreq, req->lreq).datatype);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND_LONG_LMT_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_ssend_ack_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_ssend_ack_origin_cb(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SSEND_ACK_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SSEND_ACK_ORIGIN_CB);
+ MPIDI_Request_complete(req);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SSEND_ACK_ORIGIN_CB);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_send_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_send_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ MPIR_Comm *root_comm;
+ MPIDI_CH4U_hdr_t *hdr = (MPIDI_CH4U_hdr_t *) am_hdr;
+ MPIR_Context_id_t context_id;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND_TARGET_MSG_CB);
+ context_id = MPIDI_CH4U_get_context(hdr->msg_tag);
+ root_comm = MPIDI_CH4U_context_id_to_comm(context_id);
+ if (root_comm) {
+ /* MPIDI_CS_ENTER(); */
+ rreq = MPIDI_CH4U_dequeue_posted(hdr->msg_tag, &MPIDI_CH4U_COMM(root_comm, posted_list));
+ /* MPIDI_CS_EXIT(); */
+ }
+
+ if (rreq == NULL) {
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RECV, 2);
+ MPIDI_CH4U_REQUEST(rreq, datatype) = MPI_BYTE;
+ if (p_data_sz) {
+ MPIDI_CH4U_REQUEST(rreq, buffer) = (char *) MPL_malloc(*p_data_sz);
+ MPIDI_CH4U_REQUEST(rreq, count) = *p_data_sz;
+ }
+ else {
+ MPIDI_CH4U_REQUEST(rreq, buffer) = NULL;
+ MPIDI_CH4U_REQUEST(rreq, count) = 0;
+ }
+ MPIDI_CH4U_REQUEST(rreq, tag) = hdr->msg_tag;
+ MPIDI_CH4U_REQUEST(rreq, rank) = hdr->src_rank;
+ MPIDI_CH4U_REQUEST(rreq, req->status) |= MPIDI_CH4U_REQ_BUSY;
+ MPIDI_CH4U_REQUEST(rreq, req->status) |= MPIDI_CH4U_REQ_UNEXPECTED;
+ /* MPIDI_CS_ENTER(); */
+ if (root_comm) {
+ MPIR_Comm_add_ref(root_comm);
+ MPIDI_CH4U_enqueue_unexp(rreq, &MPIDI_CH4U_COMM(root_comm, unexp_list));
+ }
+ else {
+ MPIDI_CH4U_enqueue_unexp(rreq, MPIDI_CH4U_context_id_to_uelist(context_id));
+ }
+ /* MPIDI_CS_EXIT(); */
+ }
+ else {
+ /* rreq != NULL <=> root_comm != NULL */
+ MPIR_Assert(root_comm);
+ /* Decrement the refcnt when popping a request out from posted_list */
+ MPIR_Comm_release(root_comm);
+ MPIDI_CH4U_REQUEST(rreq, rank) = hdr->src_rank;
+ MPIDI_CH4U_REQUEST(rreq, tag) = hdr->msg_tag;
+ }
+
+ *req = rreq;
+
+ mpi_errno = MPIDI_do_send_target(data, p_data_sz, is_contig, target_cmpl_cb, rreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_send_long_req_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_send_long_req_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ MPIR_Comm *root_comm;
+ MPIDI_CH4U_hdr_t *hdr = (MPIDI_CH4U_hdr_t *) am_hdr;
+ MPIDI_CH4U_send_long_req_msg_t *lreq_hdr = (MPIDI_CH4U_send_long_req_msg_t *) am_hdr;
+ MPIR_Context_id_t context_id;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND_LONG_REQ_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND_LONG_REQ_TARGET_MSG_CB);
+
+ context_id = MPIDI_CH4U_get_context(hdr->msg_tag);
+ root_comm = MPIDI_CH4U_context_id_to_comm(context_id);
+ if (root_comm) {
+ /* MPIDI_CS_ENTER(); */
+ rreq = MPIDI_CH4U_dequeue_posted(hdr->msg_tag, &MPIDI_CH4U_COMM(root_comm, posted_list));
+ /* MPIDI_CS_EXIT(); */
+ }
+
+ if (rreq == NULL) {
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RECV, 2);
+
+ MPIDI_CH4U_REQUEST(rreq, buffer) = NULL;
+ MPIDI_CH4U_REQUEST(rreq, datatype) = MPI_BYTE;
+ MPIDI_CH4U_REQUEST(rreq, count) = lreq_hdr->data_sz;
+ MPIDI_CH4U_REQUEST(rreq, req->status) |= MPIDI_CH4U_REQ_LONG_RTS;
+ MPIDI_CH4U_REQUEST(rreq, req->rreq.peer_req_ptr) = lreq_hdr->sreq_ptr;
+ MPIDI_CH4U_REQUEST(rreq, tag) = hdr->msg_tag;
+ MPIDI_CH4U_REQUEST(rreq, rank) = hdr->src_rank;
+
+ /* MPIDI_CS_ENTER(); */
+ if (root_comm) {
+ MPIR_Comm_add_ref(root_comm);
+ MPIDI_CH4U_enqueue_unexp(rreq, &MPIDI_CH4U_COMM(root_comm, unexp_list));
+ }
+ else {
+ MPIDI_CH4U_enqueue_unexp(rreq, MPIDI_CH4U_context_id_to_uelist(context_id));
+ }
+ /* MPIDI_CS_EXIT(); */
+ }
+ else {
+ /* Matching receive was posted, tell the netmod */
+ MPIR_Comm_release(root_comm); /* -1 for posted_list */
+ MPIDI_CH4U_REQUEST(rreq, req->status) |= MPIDI_CH4U_REQ_LONG_RTS;
+ MPIDI_CH4U_REQUEST(rreq, req->rreq.peer_req_ptr) = lreq_hdr->sreq_ptr;
+ MPIDI_CH4U_REQUEST(rreq, tag) = hdr->msg_tag;
+ MPIDI_CH4U_REQUEST(rreq, rank) = hdr->src_rank;
+ mpi_errno = MPIDI_NM_am_recv(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND_LONG_REQ_TARGET_MSG_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_send_long_lmt_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_send_long_lmt_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno;
+ MPIR_Request *rreq;
+ MPIDI_CH4U_send_long_lmt_msg_t *lmt_hdr = (MPIDI_CH4U_send_long_lmt_msg_t *) am_hdr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND_LONG_LMT_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND_LONG_LMT_TARGET_MSG_CB);
+
+ rreq = (MPIR_Request *) lmt_hdr->rreq_ptr;
+ MPIR_Assert(rreq);
+ mpi_errno = MPIDI_do_send_target(data, p_data_sz, is_contig, target_cmpl_cb, rreq);
+ *req = rreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND_LONG_LMT_TARGET_MSG_CB);
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_ssend_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_ssend_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIDI_CH4U_ssend_req_msg_t *msg_hdr = (MPIDI_CH4U_ssend_req_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SSEND_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SSEND_TARGET_MSG_CB);
+
+ mpi_errno =
+ MPIDI_send_target_msg_cb(handler_id, am_hdr, data, p_data_sz, is_contig, target_cmpl_cb,
+ req);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIR_Assert(req);
+ MPIDI_CH4U_REQUEST(*req, req->rreq.peer_req_ptr) = msg_hdr->sreq_ptr;
+ MPIDI_CH4U_REQUEST(*req, req->status) |= MPIDI_CH4U_REQ_PEER_SSEND;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SSEND_TARGET_MSG_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_ssend_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_ssend_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq;
+ MPIDI_CH4U_ssend_ack_msg_t *msg_hdr = (MPIDI_CH4U_ssend_ack_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SSEND_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SSEND_ACK_TARGET_MSG_CB);
+
+ sreq = (MPIR_Request *) msg_hdr->sreq_ptr;
+ MPIDI_Request_complete(sreq);
+
+ if (req)
+ *req = NULL;
+ if (target_cmpl_cb)
+ *target_cmpl_cb = NULL;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SSEND_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_send_long_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_send_long_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq;
+ MPIDI_CH4U_send_long_ack_msg_t *msg_hdr = (MPIDI_CH4U_send_long_ack_msg_t *) am_hdr;
+ MPIDI_CH4U_send_long_lmt_msg_t send_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_SEND_LONG_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_SEND_LONG_ACK_TARGET_MSG_CB);
+
+ sreq = (MPIR_Request *) msg_hdr->sreq_ptr;
+ MPIR_Assert(sreq != NULL);
+
+ /* Start the main data transfer */
+ send_hdr.rreq_ptr = msg_hdr->rreq_ptr;
+ mpi_errno =
+ MPIDI_NM_am_isend_reply(MPIDI_CH4U_get_context(MPIDI_CH4U_REQUEST(sreq, req->lreq).msg_tag),
+ MPIDI_CH4U_REQUEST(sreq, rank), MPIDI_CH4U_SEND_LONG_LMT,
+ &send_hdr, sizeof(send_hdr),
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).src_buf,
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).count,
+ MPIDI_CH4U_REQUEST(sreq, req->lreq).datatype, sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (target_cmpl_cb)
+ *target_cmpl_cb = MPIDI_send_origin_cb;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_SEND_LONG_ACK_TARGET_MSG_CB);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4R_CALLBACKS_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_init.h b/src/mpid/ch4/src/ch4r_init.h
new file mode 100644
index 0000000..bddddcd
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_init.h
@@ -0,0 +1,149 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_INIT_H_INCLUDED
+#define CH4R_INIT_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4i_util.h"
+#include "ch4r_buf.h"
+#include "ch4r_callbacks.h"
+#include "ch4r_rma_target_callbacks.h"
+#include "ch4r_rma_origin_callbacks.h"
+#include "mpidig.h"
+#include "mpl_uthash.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_init_comm
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_init_comm(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS, comm_idx, subcomm_type, is_localcomm;
+ MPIDI_CH4U_rreq_t **uelist;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_INIT_COMM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_INIT_COMM);
+
+ /*
+ * Prevents double initialization of some special communicators.
+ *
+ * comm_world and comm_self may exhibit this function twice, first during MPIDI_CH4U_mpi_init
+ * and the second during MPIR_Comm_commit in MPIDI_Init.
+ * If there is an early arrival of an unexpected message before the second visit,
+ * the following code will wipe out the unexpected queue andthe message is lost forever.
+ */
+ if (unlikely(MPIDI_CH4_Global.is_ch4u_initialized &&
+ (comm == MPIR_Process.comm_world || comm == MPIR_Process.comm_self)))
+ goto fn_exit;
+
+ comm_idx = MPIDI_CH4U_get_context_index(comm->recvcontext_id);
+ subcomm_type = MPIR_CONTEXT_READ_FIELD(SUBCOMM, comm->recvcontext_id);
+ is_localcomm = MPIR_CONTEXT_READ_FIELD(IS_LOCALCOMM, comm->recvcontext_id);
+
+ MPIR_Assert(subcomm_type <= 3);
+ MPIR_Assert(is_localcomm <= 1);
+ MPIDI_CH4_Global.comm_req_lists[comm_idx].comm[is_localcomm][subcomm_type] = comm;
+ MPIDI_CH4U_COMM(comm, posted_list) = NULL;
+ MPIDI_CH4U_COMM(comm, unexp_list) = NULL;
+
+ uelist = MPIDI_CH4U_context_id_to_uelist(comm->context_id);
+ if (*uelist) {
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPL_DL_FOREACH_SAFE(*uelist, curr, tmp) {
+ MPL_DL_DELETE(*uelist, curr);
+ MPIR_Comm_add_ref(comm); /* +1 for each entry in unexp_list */
+ MPL_DL_APPEND(MPIDI_CH4U_COMM(comm, unexp_list), curr);
+ }
+ *uelist = NULL;
+ }
+
+ MPIDI_CH4U_COMM(comm, window_instance) = 0;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_INIT_COMM);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_destroy_comm
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_destroy_comm(MPIR_Comm * comm)
+{
+ int mpi_errno = MPI_SUCCESS, comm_idx, subcomm_type, is_localcomm;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DESTROY_COMM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DESTROY_COMM);
+
+ comm_idx = MPIDI_CH4U_get_context_index(comm->recvcontext_id);
+ subcomm_type = MPIR_CONTEXT_READ_FIELD(SUBCOMM, comm->recvcontext_id);
+ is_localcomm = MPIR_CONTEXT_READ_FIELD(IS_LOCALCOMM, comm->recvcontext_id);
+
+ MPIR_Assert(subcomm_type <= 3);
+ MPIR_Assert(is_localcomm <= 1);
+ MPIR_Assert(MPIDI_CH4_Global.comm_req_lists[comm_idx].comm[is_localcomm][subcomm_type] != NULL);
+
+ if (MPIDI_CH4_Global.comm_req_lists[comm_idx].comm[subcomm_type]) {
+ MPIR_Assert(MPIDI_CH4_Global.comm_req_lists[comm_idx].comm[is_localcomm][subcomm_type]->dev.
+ ch4.ch4u.posted_list == NULL);
+ MPIR_Assert(MPIDI_CH4_Global.comm_req_lists[comm_idx].comm[is_localcomm][subcomm_type]->dev.
+ ch4.ch4u.unexp_list == NULL);
+ }
+ MPIDI_CH4_Global.comm_req_lists[comm_idx].comm[is_localcomm][subcomm_type] = NULL;
+
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DESTROY_COMM);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_alloc_mem
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void *MPIDI_CH4U_mpi_alloc_mem(size_t size, MPIR_Info * info_ptr)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_ALLOC_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_ALLOC_MEM);
+ void *p;
+ p = MPL_malloc(size);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_ALLOC_MEM);
+ return p;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_free_mem
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_free_mem(void *ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_FREE_MEM);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_FREE_MEM);
+ MPL_free(ptr);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_FREE_MEM);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_update_node_map
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDIU_update_node_map(int avtid, int size, MPID_Node_id_t node_map[])
+{
+ int i;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_UPDATE_NODE_MAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_UPDATE_NODE_MAP);
+ for (i = 0; i < size; i++) {
+ MPIDI_CH4_Global.node_map[avtid][i] = node_map[i];
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_UPDATE_NODE_MAP);
+ return MPI_SUCCESS;
+}
+
+#endif /* CH4R_INIT_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_probe.h b/src/mpid/ch4/src/ch4r_probe.h
new file mode 100644
index 0000000..a492e2f
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_probe.h
@@ -0,0 +1,180 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_PROBE_H_INCLUDED
+#define CH4R_PROBE_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_iprobe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_iprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset, int *flag,
+ MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Comm *root_comm;
+ MPIR_Request *unexp_req;
+ uint64_t match_bits, mask_bits;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_IPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_IPROBE);
+
+ if (unlikely(source == MPI_PROC_NULL)) {
+ MPIR_Status_set_procnull(status);
+ *flag = true;
+ goto fn_exit;
+ }
+
+ root_comm = MPIDI_CH4U_context_id_to_comm(comm->context_id);
+ match_bits = MPIDI_CH4U_init_recvtag(&mask_bits, root_comm->recvcontext_id +
+ context_offset, source, tag);
+
+ /* MPIDI_CS_ENTER(); */
+ unexp_req = MPIDI_CH4U_find_unexp(match_bits, mask_bits,
+ &MPIDI_CH4U_COMM(root_comm, unexp_list));
+
+ if (unexp_req) {
+ *flag = 1;
+ unexp_req->status.MPI_ERROR = MPI_SUCCESS;
+ unexp_req->status.MPI_SOURCE = MPIDI_CH4U_REQUEST(unexp_req, rank);
+ unexp_req->status.MPI_TAG = MPIDI_CH4U_get_tag(MPIDI_CH4U_REQUEST(unexp_req, tag));
+ MPIR_STATUS_SET_COUNT(unexp_req->status, MPIDI_CH4U_REQUEST(unexp_req, count));
+
+ status->MPI_TAG = unexp_req->status.MPI_TAG;
+ status->MPI_SOURCE = unexp_req->status.MPI_SOURCE;
+ MPIR_STATUS_SET_COUNT(*status, MPIDI_CH4U_REQUEST(unexp_req, count));
+ }
+ else {
+ *flag = 0;
+ MPIDI_Progress_test();
+ }
+ /* MPIDI_CS_EXIT(); */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_IPROBE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_Probe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_probe(int source,
+ int tag,
+ MPIR_Comm * comm, int context_offset,
+ MPI_Status * status)
+{
+ int mpi_errno, flag = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_PROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_PROBE);
+
+ while (!flag) {
+ mpi_errno = MPIDI_CH4U_mpi_iprobe(source, tag, comm, context_offset, &flag, status);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_PROBE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_improbe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_improbe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ int *flag, MPIR_Request ** message,
+ MPI_Status * status)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Comm *root_comm;
+ MPIR_Request *unexp_req;
+ uint64_t match_bits, mask_bits;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_IMPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_IMPROBE);
+
+ if (unlikely(source == MPI_PROC_NULL)) {
+ MPIR_Status_set_procnull(status);
+ *flag = true;
+ goto fn_exit;
+ }
+
+ root_comm = MPIDI_CH4U_context_id_to_comm(comm->context_id);
+ match_bits = MPIDI_CH4U_init_recvtag(&mask_bits, root_comm->recvcontext_id +
+ context_offset, source, tag);
+
+ /* MPIDI_CS_ENTER(); */
+ unexp_req = MPIDI_CH4U_dequeue_unexp(match_bits, mask_bits,
+ &MPIDI_CH4U_COMM(root_comm, unexp_list));
+
+ if (unexp_req) {
+ *flag = 1;
+ *message = unexp_req;
+
+ (*message)->kind = MPIR_REQUEST_KIND__MPROBE;
+ (*message)->comm = comm;
+ /* Notes on refcounting comm:
+ * We intentionally do nothing here because what we are supposed to do here
+ * is -1 for dequeue(unexp_list) and +1 for (*message)->comm */
+
+ unexp_req->status.MPI_ERROR = MPI_SUCCESS;
+ unexp_req->status.MPI_SOURCE = MPIDI_CH4U_REQUEST(unexp_req, rank);
+ unexp_req->status.MPI_TAG = MPIDI_CH4U_get_tag(MPIDI_CH4U_REQUEST(unexp_req, tag));
+ MPIR_STATUS_SET_COUNT(unexp_req->status, MPIDI_CH4U_REQUEST(unexp_req, count));
+ MPIDI_CH4U_REQUEST(unexp_req, req->status) |= MPIDI_CH4U_REQ_UNEXP_DQUED;
+
+ status->MPI_TAG = unexp_req->status.MPI_TAG;
+ status->MPI_SOURCE = unexp_req->status.MPI_SOURCE;
+ MPIR_STATUS_SET_COUNT(*status, MPIDI_CH4U_REQUEST(unexp_req, count));
+ }
+ else {
+ *flag = 0;
+ MPIDI_Progress_test();
+ }
+ /* MPIDI_CS_EXIT(); */
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_IMPROBE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mprobe
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mprobe(int source,
+ int tag,
+ MPIR_Comm * comm,
+ int context_offset,
+ MPIR_Request ** message, MPI_Status * status)
+{
+ int mpi_errno, flag = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPROBE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPROBE);
+ while (!flag) {
+ mpi_errno =
+ MPIDI_CH4U_mpi_improbe(source, tag, comm, context_offset, &flag, message, status);
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPROBE);
+ return mpi_errno;
+}
+
+#endif /* CH4R_PROBE_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_proc.h b/src/mpid/ch4/src/ch4r_proc.h
new file mode 100644
index 0000000..4697940
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_proc.h
@@ -0,0 +1,518 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_PROC_H_INCLUDED
+#define CH4R_PROC_H_INCLUDED
+
+#include "ch4_types.h"
+#include "build_nodemap.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_comm_rank_to_pid
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIU_comm_rank_to_pid(MPIR_Comm * comm, int rank, int *index,
+ int *avtid)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_COMM_RANK_TO_PID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_COMM_RANK_TO_PID);
+
+ switch (MPIDI_COMM(comm, map).mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ *avtid = MPIDI_COMM(comm, map).avtid;
+ *index = rank;
+ break;
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ *index = rank;
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ *avtid = MPIDI_COMM(comm, map).avtid;
+ *index = rank + MPIDI_COMM(comm, map).reg.offset;
+ break;
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ *index = rank + MPIDI_COMM(comm, map).reg.offset;
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ *avtid = MPIDI_COMM(comm, map).avtid;
+ *index = MPIDI_CALC_STRIDE_SIMPLE(rank, MPIDI_COMM(comm, map).reg.stride.stride,
+ MPIDI_COMM(comm, map).reg.stride.offset);
+ break;
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ *index = MPIDI_CALC_STRIDE_SIMPLE(rank, MPIDI_COMM(comm, map).reg.stride.stride,
+ MPIDI_COMM(comm, map).reg.stride.offset);
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ *avtid = MPIDI_COMM(comm, map).avtid;
+ *index = MPIDI_CALC_STRIDE(rank, MPIDI_COMM(comm, map).reg.stride.stride,
+ MPIDI_COMM(comm, map).reg.stride.blocksize,
+ MPIDI_COMM(comm, map).reg.stride.offset);
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ *index = MPIDI_CALC_STRIDE(rank, MPIDI_COMM(comm, map).reg.stride.stride,
+ MPIDI_COMM(comm, map).reg.stride.blocksize,
+ MPIDI_COMM(comm, map).reg.stride.offset);
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ *avtid = MPIDI_COMM(comm, map).avtid;
+ *index = MPIDI_COMM(comm, map).irreg.lut.lpid[rank];
+ break;
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ *index = MPIDI_COMM(comm, map).irreg.lut.lpid[rank];
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ *index = MPIDI_COMM(comm, map).irreg.mlut.gpid[rank].lpid;
+ *avtid = MPIDI_COMM(comm, map).irreg.mlut.gpid[rank].avtid;
+ break;
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " rank=%d, index=%d", rank, *index));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_COMM_RANK_TO_PID);
+ return *index;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_comm_rank_to_av
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIDI_av_entry_t *MPIDIU_comm_rank_to_av(MPIR_Comm * comm, int rank)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_COMM_RANK_TO_AV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_COMM_RANK_TO_AV);
+
+ switch (MPIDI_COMM(comm, map).mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ return &MPIDI_av_table[MPIDI_COMM(comm, map).avtid]->table[rank];
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ return &MPIDI_av_table0->table[rank];
+ case MPIDI_RANK_MAP_OFFSET:
+ return &MPIDI_av_table[MPIDI_COMM(comm, map).avtid]
+ ->table[rank + MPIDI_COMM(comm, map).reg.offset];
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ return &MPIDI_av_table0->table[rank + MPIDI_COMM(comm, map).reg.offset];
+ case MPIDI_RANK_MAP_STRIDE:
+ return &MPIDI_av_table[MPIDI_COMM(comm, map).avtid]
+ ->table[MPIDI_CALC_STRIDE_SIMPLE(rank,
+ MPIDI_COMM(comm, map).reg.stride.stride,
+ MPIDI_COMM(comm, map).reg.stride.offset)];
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ return &MPIDI_av_table0->table[MPIDI_CALC_STRIDE_SIMPLE(rank,
+ MPIDI_COMM(comm,
+ map).reg.stride.stride,
+ MPIDI_COMM(comm,
+ map).reg.stride.offset)];
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ return &MPIDI_av_table[MPIDI_COMM(comm, map).avtid]
+ ->table[MPIDI_CALC_STRIDE(rank,
+ MPIDI_COMM(comm, map).reg.stride.stride,
+ MPIDI_COMM(comm, map).reg.stride.blocksize,
+ MPIDI_COMM(comm, map).reg.stride.offset)];
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ return &MPIDI_av_table0->table[MPIDI_CALC_STRIDE(rank,
+ MPIDI_COMM(comm, map).reg.stride.stride,
+ MPIDI_COMM(comm,
+ map).reg.stride.blocksize,
+ MPIDI_COMM(comm, map).reg.stride.offset)];
+ case MPIDI_RANK_MAP_LUT:
+ return &MPIDI_av_table[MPIDI_COMM(comm, map).avtid]
+ ->table[MPIDI_COMM(comm, map).irreg.lut.lpid[rank]];
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ return &MPIDI_av_table0->table[MPIDI_COMM(comm, map).irreg.lut.lpid[rank]];
+ case MPIDI_RANK_MAP_MLUT:
+ return &MPIDI_av_table[MPIDI_COMM(comm, map).irreg.mlut.gpid[rank].avtid]
+ ->table[MPIDI_COMM(comm, map).irreg.mlut.gpid[rank].lpid];
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_COMM_RANK_TO_AV);
+
+ fn_exit:
+ return NULL;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_comm_rank_to_pid_local
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDIU_comm_rank_to_pid_local(MPIR_Comm * comm, int rank, int *index,
+ int *avtid)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_COMM_RANK_TO_PID_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_COMM_RANK_TO_PID_LOCAL);
+
+ *avtid = MPIDI_COMM(comm, local_map).avtid;
+ switch (MPIDI_COMM(comm, local_map).mode) {
+ case MPIDI_RANK_MAP_DIRECT:
+ case MPIDI_RANK_MAP_DIRECT_INTRA:
+ *index = rank;
+ break;
+ case MPIDI_RANK_MAP_OFFSET:
+ case MPIDI_RANK_MAP_OFFSET_INTRA:
+ *index = rank + MPIDI_COMM(comm, local_map).reg.offset;
+ break;
+ case MPIDI_RANK_MAP_STRIDE:
+ case MPIDI_RANK_MAP_STRIDE_INTRA:
+ *index = MPIDI_CALC_STRIDE_SIMPLE(rank, MPIDI_COMM(comm, local_map).reg.stride.stride,
+ MPIDI_COMM(comm, local_map).reg.stride.offset);
+ break;
+ case MPIDI_RANK_MAP_STRIDE_BLOCK:
+ case MPIDI_RANK_MAP_STRIDE_BLOCK_INTRA:
+ *index = MPIDI_CALC_STRIDE(rank, MPIDI_COMM(comm, local_map).reg.stride.stride,
+ MPIDI_COMM(comm, local_map).reg.stride.blocksize,
+ MPIDI_COMM(comm, local_map).reg.stride.offset);
+ break;
+ case MPIDI_RANK_MAP_LUT:
+ case MPIDI_RANK_MAP_LUT_INTRA:
+ *index = MPIDI_COMM(comm, local_map).irreg.lut.lpid[rank];
+ break;
+ case MPIDI_RANK_MAP_MLUT:
+ *index = MPIDI_COMM(comm, local_map).irreg.mlut.gpid[rank].lpid;
+ *avtid = MPIDI_COMM(comm, local_map).irreg.mlut.gpid[rank].avtid;
+ break;
+ case MPIDI_RANK_MAP_NONE:
+ MPIR_Assert(0);
+ break;
+ }
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " rank: rank=%d, index=%d", rank, *index));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_COMM_RANK_TO_PID_LOCAL);
+ return *index;
+}
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_rank_is_local(int rank, MPIR_Comm * comm)
+{
+ int ret;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_RANK_IS_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_RANK_IS_LOCAL);
+
+#ifdef MPIDI_BUILD_CH4_LOCALITY_INFO
+ if (comm->comm_kind == MPIR_COMM_KIND__INTERCOMM) {
+ ret = 0;
+ goto fn_exit;
+ }
+ ret = MPIDIU_comm_rank_to_av(comm, rank)->is_local;
+ MPL_DBG_MSG_FMT(MPIDI_CH4_DBG_MAP, VERBOSE,
+ (MPL_DBG_FDEST, " is_local=%d, rank=%d", ret, rank));
+#endif
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_RANK_IS_LOCAL);
+ return ret;
+}
+
+
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_rank_to_lpid(int rank, MPIR_Comm * comm)
+{
+ int ret;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_RANK_TO_LPID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_RANK_TO_LPID);
+
+ int avtid = 0, lpid = 0;
+ MPIDIU_comm_rank_to_pid(comm, rank, &lpid, &avtid);
+ if (avtid == 0) {
+ ret = lpid;
+ }
+ else {
+ ret = -1;
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_RANK_TO_LPID);
+ return ret;
+}
+
+static inline int MPIDI_CH4U_get_node_id(MPIR_Comm * comm, int rank, MPID_Node_id_t * id_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int avtid = 0, lpid = 0;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_GET_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_GET_NODE_ID);
+
+ MPIDIU_comm_rank_to_pid(comm, rank, &lpid, &avtid);
+ *id_p = MPIDI_CH4_Global.node_map[avtid][lpid];
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_GET_NODE_ID);
+ return mpi_errno;
+}
+
+static inline int MPIDI_CH4U_get_max_node_id(MPIR_Comm * comm, MPID_Node_id_t * max_id_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_GET_MAX_NODE_ID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_GET_MAX_NODE_ID);
+
+ *max_id_p = MPIDI_CH4_Global.max_node_id;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_GET_MAX_NODE_ID);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_build_nodemap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4U_build_nodemap(int myrank,
+ MPIR_Comm * comm,
+ int sz,
+ MPID_Node_id_t * out_nodemap, MPID_Node_id_t * sz_out)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_BUILD_NODEMAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_BUILD_NODEMAP);
+
+ ret = MPIR_NODEMAP_build_nodemap(sz, myrank, out_nodemap, sz_out);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_BUILD_NODEMAP);
+ return ret;
+}
+
+static inline int MPIDIU_get_n_avts()
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_GET_N_AVTS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_GET_N_AVTS);
+
+ ret = MPIDI_CH4_Global.avt_mgr.n_avts;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_GET_N_AVTS);
+ return ret;
+}
+
+static inline int MPIDIU_get_max_n_avts()
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_GET_MAX_N_AVTS);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_GET_MAX_N_AVTS);
+
+ ret = MPIDI_CH4_Global.avt_mgr.max_n_avts;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_GET_MAX_N_AVTS);
+ return ret;
+}
+
+static inline int MPIDIU_get_avt_size(int avtid)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_GET_AVT_SIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_GET_AVT_SIZE);
+
+ ret = MPIDI_av_table[avtid]->size;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_GET_AVT_SIZE);
+ return ret;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_alloc_globals_for_avtid
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDIU_alloc_globals_for_avtid(int avtid)
+{
+ int max_n_avts;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_ALLOC_GLOBALS_FOR_AVTID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_ALLOC_GLOBALS_FOR_AVTID);
+ max_n_avts = MPIDIU_get_max_n_avts();
+ if (max_n_avts > MPIDI_CH4_Global.allocated_max_n_avts) {
+ MPIDI_CH4_Global.node_map = (MPID_Node_id_t **) MPL_realloc(MPIDI_CH4_Global.node_map,
+ max_n_avts *
+ sizeof(MPID_Node_id_t *));
+ }
+
+ MPIDI_CH4_Global.node_map[avtid] =
+ (MPID_Node_id_t *) MPL_malloc(MPIDI_av_table[avtid]->size * sizeof(MPID_Node_id_t));
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_ALLOC_GLOBALS_FOR_AVTID);
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDIU_free_globals_for_avtid
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDIU_free_globals_for_avtid(int avtid)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_FREE_GLOBALS_FOR_AVTID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_FREE_GLOBALS_FOR_AVTID);
+ MPL_free(MPIDI_CH4_Global.node_map[avtid]);
+ MPIDI_CH4_Global.node_map[avtid] = NULL;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_FREE_GLOBALS_FOR_AVTID);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDIU_get_next_avtid(int *avtid)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_GET_NEXT_AVTID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_GET_NEXT_AVTID);
+
+ if (MPIDI_CH4_Global.avt_mgr.next_avtid == -1) { /* out of free avtids */
+ int old_max, new_max, i;
+ old_max = MPIDI_CH4_Global.avt_mgr.max_n_avts;
+ new_max = old_max + 1;
+ MPIDI_CH4_Global.avt_mgr.free_avtid =
+ (int *) MPL_realloc(MPIDI_CH4_Global.avt_mgr.free_avtid, new_max * sizeof(int));
+ for (i = old_max; i < new_max - 1; i++) {
+ MPIDI_CH4_Global.avt_mgr.free_avtid[i] = i + 1;
+ }
+ MPIDI_CH4_Global.avt_mgr.free_avtid[new_max - 1] = -1;
+ MPIDI_CH4_Global.avt_mgr.max_n_avts = new_max;
+ MPIDI_CH4_Global.avt_mgr.next_avtid = old_max;
+ }
+
+ *avtid = MPIDI_CH4_Global.avt_mgr.next_avtid;
+ MPIDI_CH4_Global.avt_mgr.next_avtid = MPIDI_CH4_Global.avt_mgr.free_avtid[*avtid];
+ MPIDI_CH4_Global.avt_mgr.free_avtid[*avtid] = -1;
+ MPIDI_CH4_Global.avt_mgr.n_avts++;
+ MPIR_Assert(MPIDI_CH4_Global.avt_mgr.n_avts <= MPIDI_CH4_Global.avt_mgr.max_n_avts);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_GET_NEXT_AVTID);
+ return *avtid;
+}
+
+static inline int MPIDIU_free_avtid(int avtid)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_FREE_AVTID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_FREE_AVTID);
+
+ MPIR_Assert(MPIDI_CH4_Global.avt_mgr.n_avts > 0);
+ MPIDI_CH4_Global.avt_mgr.free_avtid[avtid] = MPIDI_CH4_Global.avt_mgr.next_avtid;
+ MPIDI_CH4_Global.avt_mgr.next_avtid = avtid;
+ MPIDI_CH4_Global.avt_mgr.n_avts--;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_FREE_AVTID);
+ return 0;
+}
+
+static inline int MPIDIU_new_avt(int size, int *avtid)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int max_n_avts;
+ MPIDI_av_table_t *new_av_table;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_NEW_AVT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_NEW_AVT);
+
+ MPIDIU_get_next_avtid(avtid);
+
+ new_av_table = (MPIDI_av_table_t *) MPL_malloc(size * sizeof(MPIDI_av_entry_t)
+ + sizeof(MPIDI_av_table_t));
+ max_n_avts = MPIDIU_get_max_n_avts();
+ MPIDI_av_table = (MPIDI_av_table_t **) MPL_realloc(MPIDI_av_table,
+ max_n_avts * sizeof(MPIDI_av_table_t *));
+ new_av_table->size = size;
+ MPIDI_av_table[*avtid] = new_av_table;
+
+ MPIR_Object_set_ref(MPIDI_av_table[*avtid], 0);
+
+ MPIDIU_alloc_globals_for_avtid(*avtid);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_NEW_AVT);
+ return mpi_errno;
+}
+
+static inline int MPIDIU_free_avt(int avtid)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_FREE_AVT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_FREE_AVT);
+
+ MPIDIU_free_globals_for_avtid(avtid);
+ MPL_free(MPIDI_av_table[avtid]);
+ MPIDI_av_table[avtid] = NULL;
+ MPIDIU_free_avtid(avtid);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_FREE_AVT);
+ return mpi_errno;
+}
+
+static inline int MPIDIU_avt_add_ref(int avtid)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_AVT_ADD_REF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_AVT_ADD_REF);
+
+ MPIR_Object_add_ref(MPIDI_av_table[avtid]);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_AVT_ADD_REF);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDIU_avt_release_ref(int avtid)
+{
+ int count;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_AVT_RELEASE_REF);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_AVT_RELEASE_REF);
+
+ MPIR_Object_release_ref(MPIDIU_get_av_table(avtid), &count);
+ if (count == 0) {
+ MPIDIU_free_avt(avtid);
+ MPIDIU_free_globals_for_avtid(avtid);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_AVT_RELEASE_REF);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDIU_avt_init()
+{
+ int i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_AVT_INIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_AVT_INIT);
+
+ MPIDI_CH4_Global.avt_mgr.max_n_avts = 1;
+ MPIDI_CH4_Global.avt_mgr.next_avtid = 0;
+ MPIDI_CH4_Global.avt_mgr.n_avts = 0;
+ MPIDI_CH4_Global.avt_mgr.free_avtid =
+ (int *) MPL_malloc(MPIDI_CH4_Global.avt_mgr.max_n_avts * sizeof(int));
+
+ for (i = 0; i < MPIDI_CH4_Global.avt_mgr.max_n_avts - 1; i++) {
+ MPIDI_CH4_Global.avt_mgr.free_avtid[i] = i + 1;
+ }
+ MPIDI_CH4_Global.avt_mgr.free_avtid[MPIDI_CH4_Global.avt_mgr.max_n_avts - 1] = -1;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_AVT_INIT);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDIU_avt_destroy()
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_AVT_DESTROY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_AVT_DESTROY);
+
+ MPL_free(MPIDI_CH4_Global.avt_mgr.free_avtid);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_AVT_DESTROY);
+ return MPI_SUCCESS;
+}
+
+static inline int MPIDIU_build_nodemap_avtid(int myrank, MPIR_Comm * comm, int sz, int avtid)
+{
+ int ret;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIU_BUILD_NODEMAP_AVTID);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIU_BUILD_NODEMAP_AVTID);
+ ret = MPIDI_CH4U_build_nodemap(myrank, comm, sz,
+ MPIDI_CH4_Global.node_map[avtid], &MPIDI_CH4_Global.max_node_id);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIU_BUILD_NODEMAP_AVTID);
+ return ret;
+}
+
+#endif /* CH4R_PROC_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_recv.h b/src/mpid/ch4/src/ch4r_recv.h
new file mode 100644
index 0000000..20e064c
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_recv.h
@@ -0,0 +1,124 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#ifndef CH4R_RECV_H_INCLUDED
+#define CH4R_RECV_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_reply_ssend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_reply_ssend(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIDI_CH4U_ssend_ack_msg_t ack_msg;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_REPLY_SSEND);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_REPLY_SSEND);
+ MPIR_cc_incr(rreq->cc_ptr, &c);
+ ack_msg.sreq_ptr = MPIDI_CH4U_REQUEST(rreq, req->rreq.peer_req_ptr);
+
+ mpi_errno = MPIDI_NM_am_isend_reply(MPIDI_CH4U_get_context(MPIDI_CH4U_REQUEST(rreq, tag)),
+ MPIDI_CH4U_REQUEST(rreq, rank),
+ MPIDI_CH4U_SSEND_ACK, &ack_msg, sizeof(ack_msg),
+ NULL, 0, MPI_DATATYPE_NULL, rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_REPLY_SSEND);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_handle_unexp_mrecv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_handle_unexp_mrecv(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ uint64_t msg_tag;
+ size_t message_sz;
+ MPI_Aint last;
+ int dt_contig;
+ MPI_Aint dt_true_lb;
+ MPIR_Datatype *dt_ptr;
+ size_t data_sz, dt_sz;
+ MPID_Segment *segment_ptr;
+ void *buf;
+ int count;
+ MPI_Datatype datatype;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_HANDLE_UNEXP_MRECV);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_HANDLE_UNEXP_MRECV);
+
+ msg_tag = MPIDI_CH4U_REQUEST(rreq, tag);
+ rreq->status.MPI_SOURCE = MPIDI_CH4U_REQUEST(rreq, rank);
+ rreq->status.MPI_TAG = MPIDI_CH4U_get_tag(msg_tag);
+
+ buf = MPIDI_CH4U_REQUEST(rreq, req->rreq.mrcv_buffer);
+ count = MPIDI_CH4U_REQUEST(rreq, req->rreq.mrcv_count);
+ datatype = MPIDI_CH4U_REQUEST(rreq, req->rreq.mrcv_datatype);
+
+ message_sz = MPIDI_CH4U_REQUEST(rreq, count);
+ MPID_Datatype_get_size_macro(datatype, dt_sz);
+
+ if (message_sz > count * dt_sz) {
+ rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
+ }
+ else {
+ rreq->status.MPI_ERROR = MPI_SUCCESS;
+ count = message_sz / dt_sz;
+ }
+
+ MPIR_STATUS_SET_COUNT(rreq->status, count * dt_sz);
+ MPIDI_Datatype_get_info(count, datatype, dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ if (!dt_contig) {
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_ERR_CHKANDJUMP1(segment_ptr == NULL, mpi_errno,
+ MPI_ERR_OTHER, "**nomem", "**nomem %s", "Recv MPIDU_Segment_alloc");
+ MPIDU_Segment_init(buf, count, datatype, segment_ptr, 0);
+
+ last = count * dt_sz;
+ MPIDU_Segment_unpack(segment_ptr, 0, &last, MPIDI_CH4U_REQUEST(rreq, buffer));
+ MPIDU_Segment_free(segment_ptr);
+ if (last != (MPI_Aint) (count * dt_sz)) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ __FUNCTION__, __LINE__,
+ MPI_ERR_TYPE, "**dtypemismatch", 0);
+ rreq->status.MPI_ERROR = mpi_errno;
+ }
+ }
+ else {
+ MPIR_Memcpy((char *) buf + dt_true_lb, MPIDI_CH4U_REQUEST(rreq, buffer), data_sz);
+ }
+
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, buffer));
+ rreq->kind = MPIR_REQUEST_KIND__RECV;
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_PEER_SSEND) {
+ mpi_errno = MPIDI_reply_ssend(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ MPIDI_Request_complete(rreq);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_HANDLE_UNEXP_MRECV);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+#endif /* CH4R_RECV_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_recvq.h b/src/mpid/ch4/src/ch4r_recvq.h
new file mode 100644
index 0000000..7b9c6c1
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_recvq.h
@@ -0,0 +1,347 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_RECVQ_H_INCLUDED
+#define CH4R_RECVQ_H_INCLUDED
+
+#include <mpidimpl.h>
+#include "mpidig.h"
+#include "mpl_utlist.h"
+#include "ch4_impl.h"
+
+#ifdef MPIDI_CH4U_USE_PER_COMM_QUEUE
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_enqueue_posted
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4U_enqueue_posted(MPIR_Request * req,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_ENQUEUE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_ENQUEUE_POSTED);
+ MPIDI_CH4U_REQUEST(req, req->rreq.request) = (uint64_t) req;
+ MPL_DL_APPEND(*list, &req->dev.ch4.am.req->rreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_ENQUEUE_POSTED);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_enqueue_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4U_enqueue_unexp(MPIR_Request * req,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_ENQUEUE_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_ENQUEUE_UNEXP);
+ MPIDI_CH4U_REQUEST(req, req->rreq.request) = (uint64_t) req;
+ MPL_DL_APPEND(*list, &req->dev.ch4.am.req->rreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_ENQUEUE_UNEXP);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_delete_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4U_delete_unexp(MPIR_Request * req, MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DELETE_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DELETE_UNEXP);
+ MPL_DL_DELETE(*list, &req->dev.ch4.am.req->rreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DELETE_UNEXP);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_dequeue_unexp_strict
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_dequeue_unexp_strict(uint64_t tag,
+ uint64_t ignore,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_Request *req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP_STRICT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP_STRICT);
+
+ MPL_DL_FOREACH_SAFE(*list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if (!(MPIDI_CH4U_REQUEST(req, req->status) & MPIDI_CH4U_REQ_BUSY) &&
+ ((tag & ~ignore) == (MPIDI_CH4U_REQUEST(req, tag) & ~ignore))) {
+ MPL_DL_DELETE(*list, curr);
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP_STRICT);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_dequeue_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_dequeue_unexp(uint64_t tag, uint64_t ignore,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_Request *req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP);
+
+ MPL_DL_FOREACH_SAFE(*list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if ((tag & ~ignore) == (MPIDI_CH4U_REQUEST(req, tag) & ~ignore)) {
+ MPL_DL_DELETE(*list, curr);
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_find_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_find_unexp(uint64_t tag, uint64_t ignore,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_Request *req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_FIND_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_FIND_UNEXP);
+
+ MPL_DL_FOREACH_SAFE(*list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if ((tag & ~ignore) == (MPIDI_CH4U_REQUEST(req, tag) & ~ignore)) {
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_FIND_UNEXP);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_dequeue_posted
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_dequeue_posted(uint64_t tag,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_Request *req = NULL;
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DEQUEUE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DEQUEUE_POSTED);
+
+ MPL_DL_FOREACH_SAFE(*list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if ((tag & ~(MPIDI_CH4U_REQUEST(req, req->rreq.ignore))) ==
+ (MPIDI_CH4U_REQUEST(req, tag) & ~(MPIDI_CH4U_REQUEST(req, req->rreq.ignore)))) {
+ MPL_DL_DELETE(*list, curr);
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DEQUEUE_POSTED);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_delete_posted
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_delete_posted(MPIDI_CH4U_rreq_t * req,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ int found = 0;
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DELETE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DELETE_POSTED);
+ MPL_DL_FOREACH_SAFE(*list, curr, tmp) {
+ if (curr == req) {
+ MPL_DL_DELETE(*list, curr);
+ found = 1;
+ break;
+ }
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DELETE_POSTED);
+ return found;
+}
+
+#else /* #ifdef MPIDI_CH4U_USE_PER_COMM_QUEUE */
+
+/* Use global queue */
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_enqueue_posted
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4U_enqueue_posted(MPIR_Request * req,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_ENQUEUE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_ENQUEUE_POSTED);
+ MPIDI_CH4U_REQUEST(req, req->rreq.request) = (uint64_t) req;
+ MPL_DL_APPEND(MPIDI_CH4_Global.posted_list, &req->dev.ch4.am.req->rreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_ENQUEUE_POSTED);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_enqueue_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4U_enqueue_unexp(MPIR_Request * req,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_ENQUEUE_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_ENQUEUE_UNEXP);
+ MPIDI_CH4U_REQUEST(req, req->rreq.request) = (uint64_t) req;
+ MPL_DL_APPEND(MPIDI_CH4_Global.unexp_list, &req->dev.ch4.am.req->rreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_ENQUEUE_UNEXP);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_delete_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX void MPIDI_CH4U_delete_unexp(MPIR_Request * req, MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DELETE_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DELETE_UNEXP);
+ MPL_DL_DELETE(MPIDI_CH4_Global.unexp_list, &req->dev.ch4.am.req->rreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DELETE_UNEXP);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_dequeue_unexp_strict
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_dequeue_unexp_strict(uint64_t tag,
+ uint64_t ignore,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_Request *req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP_STRICT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP_STRICT);
+
+ MPL_DL_FOREACH_SAFE(MPIDI_CH4_Global.unexp_list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if (!(MPIDI_CH4U_REQUEST(req, req->status) & MPIDI_CH4U_REQ_BUSY) &&
+ ((tag & ~ignore) == (MPIDI_CH4U_REQUEST(req, tag) & ~ignore))) {
+ MPL_DL_DELETE(MPIDI_CH4_Global.unexp_list, curr);
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP_STRICT);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_dequeue_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_dequeue_unexp(uint64_t tag, uint64_t ignore,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_Request *req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP);
+
+ MPL_DL_FOREACH_SAFE(MPIDI_CH4_Global.unexp_list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if ((tag & ~ignore) == (MPIDI_CH4U_REQUEST(req, tag) & ~ignore)) {
+ MPL_DL_DELETE(MPIDI_CH4_Global.unexp_list, curr);
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DEQUEUE_UNEXP);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_find_unexp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_find_unexp(uint64_t tag, uint64_t ignore,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_Request *req = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_FIND_UNEXP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_FIND_UNEXP);
+
+ MPL_DL_FOREACH_SAFE(MPIDI_CH4_Global.unexp_list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if ((tag & ~ignore) == (MPIDI_CH4U_REQUEST(req, tag) & ~ignore)) {
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_FIND_UNEXP);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_dequeue_posted
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX MPIR_Request *MPIDI_CH4U_dequeue_posted(uint64_t tag,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ MPIR_Request *req = NULL;
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DEQUEUE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DEQUEUE_POSTED);
+
+ MPL_DL_FOREACH_SAFE(MPIDI_CH4_Global.posted_list, curr, tmp) {
+ req = (MPIR_Request *) curr->request;
+ if ((tag & ~MPIDI_CH4U_REQUEST(req, req->rreq.ignore)) ==
+ (MPIDI_CH4U_REQUEST(req, tag) & ~MPIDI_CH4U_REQUEST(req, req->rreq.ignore))) {
+ MPL_DL_DELETE(MPIDI_CH4_Global.posted_list, curr);
+ break;
+ }
+ req = NULL;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DEQUEUE_POSTED);
+ return req;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_delete_posted
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_delete_posted(MPIDI_CH4U_rreq_t * req,
+ MPIDI_CH4U_rreq_t ** list)
+{
+ int found = 0;
+ MPIDI_CH4U_rreq_t *curr, *tmp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_DELETE_POSTED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_DELETE_POSTED);
+ MPL_DL_FOREACH_SAFE(MPIDI_CH4_Global.posted_list, curr, tmp) {
+ if (curr == req) {
+ MPL_DL_DELETE(MPIDI_CH4_Global.posted_list, curr);
+ found = 1;
+ break;
+ }
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_DELETE_POSTED);
+ return found;
+}
+
+#endif /* MPIDI_CH4U_USE_PER_COMM_QUEUE */
+
+#endif /* CH4R_RECVQ_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_request.h b/src/mpid/ch4/src/ch4r_request.h
new file mode 100644
index 0000000..933abf7
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_request.h
@@ -0,0 +1,96 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_REQUEST_H_INCLUDED
+#define CH4R_REQUEST_H_INCLUDED
+
+#include "ch4_types.h"
+#include "ch4r_buf.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4I_am_request_create
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline MPIR_Request *MPIDI_CH4I_am_request_create(MPIR_Request_kind_t kind, int ref_count)
+{
+ MPIR_Request *req;
+ int i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_AM_REQUEST_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4I_AM_REQUEST_CREATE);
+
+ req = MPIR_Request_create(kind);
+
+ /* as long as ref_count is a constant, any compiler should be able
+ * to unroll the below loop. when threading is not enabled, the
+ * compiler should be able to combine the below individual
+ * increments to a single increment of "ref_count - 1".
+ *
+ * FIXME: when threading is enabled, the ref_count increase is an
+ * atomic operation, so it might be more inefficient. we should
+ * use a new API to increase the ref_count value instead of the
+ * for loop. */
+ for (i = 0; i < ref_count - 1; i++)
+ MPIR_Request_add_ref(req);
+
+ MPIDI_NM_am_request_init(req);
+
+ CH4_COMPILE_TIME_ASSERT(sizeof(MPIDI_CH4U_req_ext_t) <= MPIDI_CH4I_BUF_POOL_SZ);
+ MPIDI_CH4U_REQUEST(req, req) =
+ (MPIDI_CH4U_req_ext_t *) MPIDI_CH4R_get_buf(MPIDI_CH4_Global.buf_pool);
+ MPIR_Assert(MPIDI_CH4U_REQUEST(req, req));
+ MPIDI_CH4U_REQUEST(req, req->status) = 0;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4I_AM_REQUEST_CREATE);
+ return req;
+}
+
+/* This function should be called any time an anysource request is matched so
+ * the upper layer will have a chance to arbitrate who wins the race between
+ * the netmod and the shmod. This will cancel the request of the other side and
+ * take care of copying any relevant data. */
+static inline int MPIDI_CH4R_anysource_matched(MPIR_Request * rreq, int caller,
+ int *continue_matching)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_ANYSOURCE_MATCHED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_ANYSOURCE_MATCHED);
+
+ MPIR_Assert(MPIDI_CH4R_NETMOD == caller || MPIDI_CH4R_SHM == caller);
+
+ if (MPIDI_CH4R_NETMOD == caller) {
+#ifdef MPIDI_BUILD_CH4_SHM
+ mpi_errno = MPIDI_SHM_mpi_cancel_recv(rreq);
+
+ /* If the netmod is cancelling the request, then shared memory will
+ * just copy the status from the shared memory side because the netmod
+ * will always win the race condition here. */
+ if (MPIR_STATUS_GET_CANCEL_BIT(rreq->status)) {
+ /* If the request is cancelled, copy the status object from the
+ * partner request */
+ rreq->status = MPIDI_CH4I_REQUEST_ANYSOURCE_PARTNER(rreq)->status;
+ }
+#endif
+ *continue_matching = 0;
+ }
+ else if (MPIDI_CH4R_SHM == caller) {
+ mpi_errno = MPIDI_NM_mpi_cancel_recv(rreq);
+
+ /* If the netmod has already matched this request, shared memory will
+ * lose and should stop matching this request */
+ *continue_matching = !MPIR_STATUS_GET_CANCEL_BIT(rreq->status);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_ANYSOURCE_MATCHED);
+ return mpi_errno;
+}
+
+#endif /* CH4R_REQUEST_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_rma.h b/src/mpid/ch4/src/ch4r_rma.h
new file mode 100644
index 0000000..c5c507f
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_rma.h
@@ -0,0 +1,967 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_RMA_H_INCLUDED
+#define CH4R_RMA_H_INCLUDED
+
+#include "ch4_impl.h"
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_do_put
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_do_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS, n_iov, c;
+ MPIR_Request *sreq = NULL;
+ MPIDI_CH4U_put_msg_t am_hdr;
+ uint64_t offset;
+ size_t data_sz;
+ MPI_Aint last, num_iov;
+ MPID_Segment *segment_ptr;
+ struct iovec *dt_iov, am_iov[2];
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DO_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DO_PUT);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ MPIDI_Datatype_check_size(origin_datatype, origin_count, data_sz);
+ if (data_sz == 0 || target_rank == MPI_PROC_NULL) {
+ goto fn_exit;
+ }
+
+ if (target_rank == win->comm_ptr->rank) {
+ offset = win->disp_unit * target_disp;
+ mpi_errno = MPIR_Localcopy(origin_addr,
+ origin_count,
+ origin_datatype,
+ (char *) win->base + offset, target_count, target_datatype);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ /* Only create request when issuing is not completed.
+ * We initialize two ref_count for progress engine and request-based OP,
+ * then put needs to free the second ref_count.*/
+ sreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 2);
+ MPIR_Assert(sreq);
+ MPIDI_CH4U_REQUEST(sreq, req->preq.win_ptr) = win;
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+ am_hdr.src_rank = win->comm_ptr->rank;
+ am_hdr.target_disp = target_disp;
+ am_hdr.count = target_count;
+ am_hdr.datatype = target_datatype;
+ am_hdr.preq_ptr = (uint64_t) sreq;
+ am_hdr.win_id = MPIDI_CH4U_WIN(win, win_id);
+
+ /* Increase local and remote completion counters and set the local completion
+ * counter in request, thus it can be decreased at request completion. */
+ MPIDI_win_cmpl_cnts_incr(win, target_rank, &sreq->completion_notification);
+ MPIDI_CH4U_REQUEST(sreq, rank) = target_rank;
+
+ if (HANDLE_GET_KIND(target_datatype) == HANDLE_KIND_BUILTIN) {
+ am_hdr.n_iov = 0;
+ MPIDI_CH4U_REQUEST(sreq, req->preq.dt_iov) = NULL;
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_PUT_REQ,
+ &am_hdr, sizeof(am_hdr), origin_addr,
+ origin_count, origin_datatype, sreq, NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+ MPIDU_Segment_init(NULL, target_count, target_datatype, segment_ptr, 0);
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ am_hdr.n_iov = n_iov;
+ dt_iov = (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(dt_iov);
+
+ last = data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, dt_iov, &n_iov);
+ MPIR_Assert(last == (MPI_Aint) data_sz);
+ MPL_free(segment_ptr);
+
+ am_iov[0].iov_base = &am_hdr;
+ am_iov[0].iov_len = sizeof(am_hdr);
+ am_iov[1].iov_base = dt_iov;
+ am_iov[1].iov_len = sizeof(struct iovec) * am_hdr.n_iov;
+
+ MPIDI_CH4U_REQUEST(sreq, req->preq.dt_iov) = dt_iov;
+
+ /* FIXIME: MPIDI_NM_am_hdr_max_sz should be removed */
+ if ((am_iov[0].iov_len + am_iov[1].iov_len) <= MPIDI_NM_am_hdr_max_sz()) {
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isendv(target_rank, win->comm_ptr, MPIDI_CH4U_PUT_REQ,
+ &am_iov[0], 2, origin_addr, origin_count, origin_datatype,
+ sreq, NULL);
+ }
+ else {
+ MPIDI_CH4U_REQUEST(sreq, req->preq.origin_addr) = (void *) origin_addr;
+ MPIDI_CH4U_REQUEST(sreq, req->preq.origin_count) = origin_count;
+ MPIDI_CH4U_REQUEST(sreq, req->preq.origin_datatype) = origin_datatype;
+ dtype_add_ref_if_not_builtin(origin_datatype);
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_PUT_IOV_REQ,
+ &am_hdr, sizeof(am_hdr), am_iov[1].iov_base,
+ am_iov[1].iov_len, MPI_BYTE, sreq, NULL);
+ }
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ *sreq_ptr = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DO_PUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_do_get
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_do_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPIR_Win * win,
+ MPIR_Request ** sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS, n_iov, c;
+ size_t offset;
+ MPIR_Request *sreq = NULL;
+ MPIDI_CH4U_get_req_msg_t am_hdr;
+ size_t data_sz;
+ MPI_Aint last, num_iov;
+ MPID_Segment *segment_ptr;
+ struct iovec *dt_iov;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DO_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DO_GET);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ MPIDI_Datatype_check_size(origin_datatype, origin_count, data_sz);
+ if (data_sz == 0 || target_rank == MPI_PROC_NULL) {
+ goto fn_exit;
+ }
+
+ if (target_rank == win->comm_ptr->rank) {
+ offset = win->disp_unit * target_disp;
+ mpi_errno = MPIR_Localcopy((char *) win->base + offset,
+ target_count,
+ target_datatype, origin_addr, origin_count, origin_datatype);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ /* Only create request when issuing is not completed.
+ * We initialize two ref_count for progress engine and request-based OP,
+ * then get needs to free the second ref_count.*/
+ sreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 2);
+ MPIR_Assert(sreq);
+
+ MPIDI_CH4U_REQUEST(sreq, req->greq.win_ptr) = win;
+ MPIDI_CH4U_REQUEST(sreq, req->greq.addr) = (uint64_t) ((char *) origin_addr);
+ MPIDI_CH4U_REQUEST(sreq, req->greq.count) = origin_count;
+ MPIDI_CH4U_REQUEST(sreq, req->greq.datatype) = origin_datatype;
+ MPIDI_CH4U_REQUEST(sreq, rank) = target_rank;
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+ am_hdr.target_disp = target_disp;
+ am_hdr.count = target_count;
+ am_hdr.datatype = target_datatype;
+ am_hdr.greq_ptr = (uint64_t) sreq;
+ am_hdr.win_id = MPIDI_CH4U_WIN(win, win_id);
+ am_hdr.src_rank = win->comm_ptr->rank;
+
+ /* Increase local and remote completion counters and set the local completion
+ * counter in request, thus it can be decreased at request completion. */
+ MPIDI_win_cmpl_cnts_incr(win, target_rank, &sreq->completion_notification);
+
+ if (HANDLE_GET_KIND(target_datatype) == HANDLE_KIND_BUILTIN) {
+ am_hdr.n_iov = 0;
+ MPIDI_CH4U_REQUEST(sreq, req->greq.dt_iov) = NULL;
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr,
+ MPIDI_CH4U_GET_REQ, &am_hdr, sizeof(am_hdr),
+ NULL, 0, MPI_DATATYPE_NULL, sreq, NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+ MPIDU_Segment_init(NULL, target_count, target_datatype, segment_ptr, 0);
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ am_hdr.n_iov = n_iov;
+ dt_iov = (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(dt_iov);
+
+ last = data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, dt_iov, &n_iov);
+ MPIR_Assert(last == (MPI_Aint) data_sz);
+ MPL_free(segment_ptr);
+
+ MPIDI_CH4U_REQUEST(sreq, req->greq.dt_iov) = dt_iov;
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_GET_REQ,
+ &am_hdr, sizeof(am_hdr), dt_iov,
+ sizeof(struct iovec) * am_hdr.n_iov, MPI_BYTE, sreq, NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ *sreq_ptr = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DO_GET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_do_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_do_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS, c, n_iov;
+ MPIR_Request *sreq = NULL;
+ size_t basic_type_size;
+ MPIDI_CH4U_acc_req_msg_t am_hdr;
+ uint64_t data_sz, target_data_sz;
+ MPI_Aint last, num_iov;
+ MPID_Segment *segment_ptr;
+ struct iovec *dt_iov, am_iov[2];
+ MPIR_Datatype *dt_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DO_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DO_ACCUMULATE);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ MPIDI_Datatype_get_size_dt_ptr(origin_count, origin_datatype, data_sz, dt_ptr);
+ MPIDI_Datatype_check_size(target_datatype, target_count, target_data_sz);
+
+ if (data_sz == 0 || target_rank == MPI_PROC_NULL || target_data_sz == 0) {
+ goto fn_exit;
+ }
+
+ /* Only create request when issuing is not completed.
+ * We initialize two ref_count for progress engine and request-based OP,
+ * then acc needs to free the second ref_count.*/
+ sreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 2);
+ MPIR_Assert(sreq);
+ MPIDI_CH4U_REQUEST(sreq, req->areq.win_ptr) = win;
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+
+ am_hdr.req_ptr = (uint64_t) sreq;
+ am_hdr.origin_count = origin_count;
+
+ if (HANDLE_GET_KIND(origin_datatype) == HANDLE_KIND_BUILTIN) {
+ am_hdr.origin_datatype = origin_datatype;
+ }
+ else {
+ am_hdr.origin_datatype = (dt_ptr) ? dt_ptr->basic_type : MPI_DATATYPE_NULL;
+ MPID_Datatype_get_size_macro(am_hdr.origin_datatype, basic_type_size);
+ am_hdr.origin_count = (basic_type_size > 0) ? data_sz / basic_type_size : 0;
+ }
+
+ am_hdr.target_count = target_count;
+ am_hdr.target_datatype = target_datatype;
+ am_hdr.target_disp = target_disp;
+ am_hdr.op = op;
+ am_hdr.win_id = MPIDI_CH4U_WIN(win, win_id);
+ am_hdr.src_rank = win->comm_ptr->rank;
+
+ /* Increase local and remote completion counters and set the local completion
+ * counter in request, thus it can be decreased at request completion. */
+ MPIDI_win_cmpl_cnts_incr(win, target_rank, &sreq->completion_notification);
+
+ MPIDI_CH4U_REQUEST(sreq, rank) = target_rank;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.data_sz) = data_sz;
+ if (HANDLE_GET_KIND(target_datatype) == HANDLE_KIND_BUILTIN) {
+ am_hdr.n_iov = 0;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.dt_iov) = NULL;
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_ACC_REQ,
+ &am_hdr, sizeof(am_hdr), origin_addr,
+ (op == MPI_NO_OP) ? 0 : origin_count,
+ origin_datatype, sreq, NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ MPIDI_Datatype_get_size_dt_ptr(target_count, target_datatype, data_sz, dt_ptr);
+ am_hdr.target_datatype = dt_ptr->basic_type;
+ am_hdr.target_count = dt_ptr->n_builtin_elements;
+
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+
+ MPIDU_Segment_init(NULL, target_count, target_datatype, segment_ptr, 0);
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ am_hdr.n_iov = n_iov;
+ dt_iov = (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(dt_iov);
+
+ last = data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, dt_iov, &n_iov);
+ MPIR_Assert(last == (MPI_Aint) data_sz);
+ MPL_free(segment_ptr);
+
+ am_iov[0].iov_base = &am_hdr;
+ am_iov[0].iov_len = sizeof(am_hdr);
+ am_iov[1].iov_base = dt_iov;
+ am_iov[1].iov_len = sizeof(struct iovec) * am_hdr.n_iov;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.dt_iov) = dt_iov;
+
+ /* FIXIME: MPIDI_NM_am_hdr_max_sz should be removed */
+ if ((am_iov[0].iov_len + am_iov[1].iov_len) <= MPIDI_NM_am_hdr_max_sz()) {
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isendv(target_rank, win->comm_ptr, MPIDI_CH4U_ACC_REQ,
+ &am_iov[0], 2, origin_addr,
+ (op == MPI_NO_OP) ? 0 : origin_count,
+ origin_datatype, sreq, NULL);
+ }
+ else {
+ MPIDI_CH4U_REQUEST(sreq, req->areq.origin_addr) = (void *) origin_addr;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.origin_count) = origin_count;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.origin_datatype) = origin_datatype;
+ dtype_add_ref_if_not_builtin(origin_datatype);
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_ACC_IOV_REQ,
+ &am_hdr, sizeof(am_hdr), am_iov[1].iov_base,
+ am_iov[1].iov_len, MPI_BYTE, sreq, NULL);
+ }
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ *sreq_ptr = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DO_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_do_get_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_do_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** sreq_ptr)
+{
+ int mpi_errno = MPI_SUCCESS, c, n_iov;
+ MPIR_Request *sreq = NULL;
+ size_t basic_type_size;
+ MPIDI_CH4U_get_acc_req_msg_t am_hdr;
+ uint64_t data_sz, result_data_sz, target_data_sz;
+ MPI_Aint last, num_iov;
+ MPID_Segment *segment_ptr;
+ struct iovec *dt_iov, am_iov[2];
+ MPIR_Datatype *dt_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DO_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DO_GET_ACCUMULATE);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ MPIDI_Datatype_get_size_dt_ptr(origin_count, origin_datatype, data_sz, dt_ptr);
+ MPIDI_Datatype_check_size(target_datatype, target_count, target_data_sz);
+ MPIDI_Datatype_check_size(result_datatype, result_count, result_data_sz);
+
+ if (target_rank == MPI_PROC_NULL || target_data_sz == 0 ||
+ (data_sz == 0 && result_data_sz == 0)) {
+ goto fn_exit;
+ }
+
+ /* Only create request when issuing is not completed.
+ * We initialize two ref_count for progress engine and request-based OP,
+ * then get_acc needs to free the second ref_count.*/
+ sreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 2);
+ MPIR_Assert(sreq);
+
+ MPIDI_CH4U_REQUEST(sreq, req->areq.win_ptr) = win;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.result_addr) = result_addr;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.result_count) = result_count;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.result_datatype) = result_datatype;
+ dtype_add_ref_if_not_builtin(result_datatype);
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+
+ /* TODO: have common routine for accumulate/get_accumulate */
+ am_hdr.req_ptr = (uint64_t) sreq;
+ am_hdr.origin_count = origin_count;
+
+ if (HANDLE_GET_KIND(origin_datatype) == HANDLE_KIND_BUILTIN) {
+ am_hdr.origin_datatype = origin_datatype;
+ }
+ else {
+ am_hdr.origin_datatype = (dt_ptr) ? dt_ptr->basic_type : MPI_DATATYPE_NULL;
+ MPID_Datatype_get_size_macro(am_hdr.origin_datatype, basic_type_size);
+ am_hdr.origin_count = (basic_type_size > 0) ? data_sz / basic_type_size : 0;
+ }
+
+ am_hdr.target_count = target_count;
+ am_hdr.target_datatype = target_datatype;
+ am_hdr.target_disp = target_disp;
+ am_hdr.op = op;
+ am_hdr.win_id = MPIDI_CH4U_WIN(win, win_id);
+ am_hdr.src_rank = win->comm_ptr->rank;
+
+ am_hdr.result_data_sz = result_data_sz;
+
+ /* Increase local and remote completion counters and set the local completion
+ * counter in request, thus it can be decreased at request completion. */
+ MPIDI_win_cmpl_cnts_incr(win, target_rank, &sreq->completion_notification);
+
+ MPIDI_CH4U_REQUEST(sreq, rank) = target_rank;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.data_sz) = data_sz;
+ if (HANDLE_GET_KIND(target_datatype) == HANDLE_KIND_BUILTIN) {
+ am_hdr.n_iov = 0;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.dt_iov) = NULL;
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_GET_ACC_REQ,
+ &am_hdr, sizeof(am_hdr), origin_addr,
+ (op == MPI_NO_OP) ? 0 : origin_count,
+ origin_datatype, sreq, NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ MPIDI_Datatype_get_size_dt_ptr(target_count, target_datatype, data_sz, dt_ptr);
+ am_hdr.target_datatype = dt_ptr->basic_type;
+ am_hdr.target_count = dt_ptr->n_builtin_elements;
+
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+
+ MPIDU_Segment_init(NULL, target_count, target_datatype, segment_ptr, 0);
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ am_hdr.n_iov = n_iov;
+ dt_iov = (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(dt_iov);
+
+ last = data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, dt_iov, &n_iov);
+ MPIR_Assert(last == (MPI_Aint) data_sz);
+ MPL_free(segment_ptr);
+
+ am_iov[0].iov_base = &am_hdr;
+ am_iov[0].iov_len = sizeof(am_hdr);
+ am_iov[1].iov_base = dt_iov;
+ am_iov[1].iov_len = sizeof(struct iovec) * am_hdr.n_iov;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.dt_iov) = dt_iov;
+
+ /* FIXIME: MPIDI_NM_am_hdr_max_sz should be removed */
+ if ((am_iov[0].iov_len + am_iov[1].iov_len) <= MPIDI_NM_am_hdr_max_sz()) {
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isendv(target_rank, win->comm_ptr, MPIDI_CH4U_GET_ACC_REQ,
+ &am_iov[0], 2, origin_addr,
+ (op == MPI_NO_OP) ? 0 : origin_count,
+ origin_datatype, sreq, NULL);
+ }
+ else {
+ MPIDI_CH4U_REQUEST(sreq, req->areq.origin_addr) = (void *) origin_addr;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.origin_count) = origin_count;
+ MPIDI_CH4U_REQUEST(sreq, req->areq.origin_datatype) = origin_datatype;
+ dtype_add_ref_if_not_builtin(origin_datatype);
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_GET_ACC_IOV_REQ,
+ &am_hdr, sizeof(am_hdr), am_iov[1].iov_base,
+ am_iov[1].iov_len, MPI_BYTE, sreq, NULL);
+ }
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ *sreq_ptr = sreq;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DO_GET_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_put
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_put(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_PUT);
+
+ mpi_errno = MPIDI_do_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ /* always release my ref, only request-ops track. */
+ if (sreq != NULL)
+ MPIR_Request_free(sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_PUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_rput
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_rput(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_RPUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_RPUT);
+
+ mpi_errno = MPIDI_do_put(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (sreq == NULL) {
+ /* create a completed request for user if issuing is completed immediately. */
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Assert(sreq);
+
+ MPIR_Request_add_ref(sreq);
+ MPIDI_Request_complete(sreq);
+ }
+
+ fn_exit:
+ *request = sreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_RPUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_get
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_get(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype,
+ MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_GET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_GET);
+
+ mpi_errno = MPIDI_do_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ /* always release my ref, only request-ops track. */
+ if (sreq != NULL)
+ MPIR_Request_free(sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_GET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_rget
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_rget(void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPIR_Win * win, MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_RGET);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_RGET);
+
+ mpi_errno = MPIDI_do_get(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (sreq == NULL) {
+ /* create a completed request for user if issuing is completed immediately. */
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Assert(sreq);
+
+ MPIR_Request_add_ref(sreq);
+ MPIDI_Request_complete(sreq);
+ }
+
+ fn_exit:
+ *request = sreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_RGET);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_raccumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_raccumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_RACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_RACCUMULATE);
+
+ mpi_errno = MPIDI_do_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (sreq == NULL) {
+ /* create a completed request for user if issuing is completed immediately. */
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Assert(sreq);
+
+ MPIR_Request_add_ref(sreq);
+ MPIDI_Request_complete(sreq);
+ }
+
+ fn_exit:
+ *request = sreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_RACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype, MPI_Op op,
+ MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_ACCUMULATE);
+
+ mpi_errno = MPIDI_do_accumulate(origin_addr, origin_count, origin_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ /* always release my ref, only request-ops track. */
+ if (sreq != NULL)
+ MPIR_Request_free(sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_rget_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_rget_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win,
+ MPIR_Request ** request)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_RGET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_RGET_ACCUMULATE);
+
+ mpi_errno = MPIDI_do_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ if (sreq == NULL) {
+ /* create a completed request for user if issuing is completed immediately. */
+ sreq = MPIR_Request_create(MPIR_REQUEST_KIND__RMA);
+ MPIR_Assert(sreq);
+
+ MPIR_Request_add_ref(sreq);
+ MPIDI_Request_complete(sreq);
+ }
+
+ fn_exit:
+ *request = sreq;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_RGET_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_get_accumulate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_get_accumulate(const void *origin_addr,
+ int origin_count,
+ MPI_Datatype origin_datatype,
+ void *result_addr,
+ int result_count,
+ MPI_Datatype result_datatype,
+ int target_rank,
+ MPI_Aint target_disp,
+ int target_count,
+ MPI_Datatype target_datatype,
+ MPI_Op op, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *sreq = NULL;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_GET_ACCUMULATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_GET_ACCUMULATE);
+
+ mpi_errno = MPIDI_do_get_accumulate(origin_addr, origin_count, origin_datatype,
+ result_addr, result_count, result_datatype,
+ target_rank, target_disp, target_count, target_datatype, op,
+ win, &sreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ /* always release my ref, only request-ops track. */
+ if (sreq != NULL)
+ MPIR_Request_free(sreq);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_GET_ACCUMULATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_compare_and_swap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_compare_and_swap(const void *origin_addr,
+ const void *compare_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIR_Request *sreq = NULL;
+ MPIDI_CH4U_cswap_req_msg_t am_hdr;
+ size_t data_sz;
+ void *p_data;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_COMPARE_AND_SWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_COMPARE_AND_SWAP);
+
+ MPIDI_CH4U_EPOCH_CHECK_SYNC(win, mpi_errno, goto fn_fail);
+
+ MPIDI_Datatype_check_size(datatype, 1, data_sz);
+ if (data_sz == 0 || target_rank == MPI_PROC_NULL) {
+ goto fn_exit;
+ }
+
+ p_data = MPL_malloc(data_sz * 2);
+ MPIR_Assert(p_data);
+ MPIR_Memcpy(p_data, (char *) origin_addr, data_sz);
+ MPIR_Memcpy((char *) p_data + data_sz, (char *) compare_addr, data_sz);
+
+ sreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(sreq);
+
+ MPIDI_CH4U_REQUEST(sreq, req->creq.win_ptr) = win;
+ MPIDI_CH4U_REQUEST(sreq, req->creq.addr) = (uint64_t) ((char *) result_addr);
+ MPIDI_CH4U_REQUEST(sreq, req->creq.datatype) = datatype;
+ MPIDI_CH4U_REQUEST(sreq, req->creq.result_addr) = result_addr;
+ MPIDI_CH4U_REQUEST(sreq, req->creq.data) = p_data;
+ MPIDI_CH4U_REQUEST(sreq, rank) = target_rank;
+
+ MPIDI_CH4U_EPOCH_START_CHECK(win, mpi_errno, goto fn_fail);
+ MPIR_cc_incr(sreq->cc_ptr, &c);
+
+ am_hdr.target_disp = target_disp;
+ am_hdr.datatype = datatype;
+ am_hdr.req_ptr = (uint64_t) sreq;
+ am_hdr.win_id = MPIDI_CH4U_WIN(win, win_id);
+ am_hdr.src_rank = win->comm_ptr->rank;
+
+ MPIDI_win_cmpl_cnts_incr(win, target_rank, &sreq->completion_notification);
+
+ /* FIXIME: we need to choose between NM and SHM */
+ mpi_errno = MPIDI_NM_am_isend(target_rank, win->comm_ptr, MPIDI_CH4U_CSWAP_REQ,
+ &am_hdr, sizeof(am_hdr), (char *) p_data, 2, datatype, sreq,
+ NULL);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_COMPARE_AND_SWAP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_mpi_fetch_and_op
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+MPL_STATIC_INLINE_PREFIX int MPIDI_CH4U_mpi_fetch_and_op(const void *origin_addr,
+ void *result_addr,
+ MPI_Datatype datatype,
+ int target_rank,
+ MPI_Aint target_disp, MPI_Op op,
+ MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4U_MPI_FETCH_AND_OP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4U_MPI_FETCH_AND_OP);
+
+ mpi_errno = MPIDI_CH4U_mpi_get_accumulate(origin_addr, 1, datatype,
+ result_addr, 1, datatype,
+ target_rank, target_disp, 1, datatype, op, win);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4U_MPI_FETCH_AND_OP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4R_RMA_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_rma_origin_callbacks.h b/src/mpid/ch4/src/ch4r_rma_origin_callbacks.h
new file mode 100644
index 0000000..e0c5f57
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_rma_origin_callbacks.h
@@ -0,0 +1,256 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_RMA_ORIGIN_CALLBACKS_H_INCLUDED
+#define CH4R_RMA_ORIGIN_CALLBACKS_H_INCLUDED
+
+#include "ch4r_request.h"
+
+/* This file includes all RMA callback routines on the packet issuing side.
+ * All handler functions are named with suffix "_origin_cb". */
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_ack_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_ack_origin_cb(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_ACK_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_ACK_ORIGIN_CB);
+ MPIDI_Request_complete(req);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_ACK_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_ack_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_ack_origin_cb(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_ACK_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_ACK_ORIGIN_CB);
+ MPIDI_Request_complete(req);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_ACK_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_ack_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_ack_origin_cb(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_ACK_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_ACK_ORIGIN_CB);
+ MPL_free(MPIDI_CH4U_REQUEST(req, req->areq.data));
+
+ MPIDI_Request_complete(req);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_ACK_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_cswap_ack_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_cswap_ack_origin_cb(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CSWAP_ACK_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CSWAP_ACK_ORIGIN_CB);
+
+ MPL_free(MPIDI_CH4U_REQUEST(req, req->creq.data));
+ MPIDI_Request_complete(req);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CSWAP_ACK_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_ack_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_ack_origin_cb(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACK_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACK_ORIGIN_CB);
+
+ if (MPIDI_CH4U_REQUEST(req, req->greq.dt_iov)) {
+ MPL_free(MPIDI_CH4U_REQUEST(req, req->greq.dt_iov));
+ }
+
+ MPIDI_Request_complete(req);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACK_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_cswap_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_cswap_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CSWAP_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CSWAP_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CSWAP_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_data_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_data_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_DATA_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_DATA_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_DATA_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_data_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_data_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_DATA_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_DATA_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_DATA_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_data_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_data_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_DATA_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_DATA_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_DATA_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_iov_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_iov_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_IOV_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_IOV_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_IOV_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_iov_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_iov_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_IOV_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_IOV_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_IOV_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_iov_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_iov_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_IOV_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_IOV_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_IOV_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_origin_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_origin_cb(MPIR_Request * sreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ORIGIN_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ORIGIN_CB);
+ MPIDI_Request_complete(sreq);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ORIGIN_CB);
+ return mpi_errno;
+}
+
+#endif /* CH4R_RMA_ORIGIN_CALLBACKS_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_rma_target_callbacks.h b/src/mpid/ch4/src/ch4r_rma_target_callbacks.h
new file mode 100644
index 0000000..4f147bf
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_rma_target_callbacks.h
@@ -0,0 +1,2099 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_RMA_TARGET_CALLBACKS_H_INCLUDED
+#define CH4R_RMA_TARGET_CALLBACKS_H_INCLUDED
+
+#include "ch4r_request.h"
+#include "ch4r_callbacks.h"
+
+/* This file includes all RMA callback routines and the completion function of
+ * each callback (e.g., received all data) on the packet receiving side. All handler
+ * functions are named with suffix "_target_msg_cb", and all handler completion
+ * function are named with suffix "_target_cmpl_cb". */
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_ack_put
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_ack_put(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_put_ack_msg_t ack_msg;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACK_PUT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACK_PUT);
+
+ ack_msg.preq_ptr = MPIDI_CH4U_REQUEST(rreq, req->preq.preq_ptr);
+ mpi_errno =
+ MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_win_to_context
+ (MPIDI_CH4U_REQUEST(rreq, req->preq.win_ptr)),
+ MPIDI_CH4U_REQUEST(rreq, rank), MPIDI_CH4U_PUT_ACK,
+ &ack_msg, sizeof(ack_msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACK_PUT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_ack_cswap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_ack_cswap(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIDI_CH4U_cswap_ack_msg_t ack_msg;
+ void *result_addr;
+ size_t data_sz;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACK_CSWAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACK_CSWAP);
+
+ MPIDI_Datatype_check_size(MPIDI_CH4U_REQUEST(rreq, req->creq.datatype), 1, data_sz);
+ result_addr = ((char *) MPIDI_CH4U_REQUEST(rreq, req->creq.data)) + data_sz;
+
+ MPIR_cc_incr(rreq->cc_ptr, &c);
+ ack_msg.req_ptr = MPIDI_CH4U_REQUEST(rreq, req->creq.creq_ptr);
+
+ mpi_errno =
+ MPIDI_NM_am_isend_reply(MPIDI_CH4U_win_to_context
+ (MPIDI_CH4U_REQUEST(rreq, req->creq.win_ptr)),
+ MPIDI_CH4U_REQUEST(rreq, rank), MPIDI_CH4U_CSWAP_ACK, &ack_msg,
+ sizeof(ack_msg), result_addr, 1,
+ MPIDI_CH4U_REQUEST(rreq, req->creq.datatype), rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACK_CSWAP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_ack_acc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_ack_acc(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_acc_ack_msg_t ack_msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACK_ACC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACK_ACC);
+
+ ack_msg.req_ptr = MPIDI_CH4U_REQUEST(rreq, req->areq.req_ptr);
+ mpi_errno =
+ MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_win_to_context
+ (MPIDI_CH4U_REQUEST(rreq, req->areq.win_ptr)),
+ MPIDI_CH4U_REQUEST(rreq, rank), MPIDI_CH4U_ACC_ACK,
+ &ack_msg, sizeof(ack_msg));
+
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACK_ACC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_ack_get_acc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_ack_get_acc(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS, c;
+ MPIDI_CH4U_acc_ack_msg_t ack_msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACK_GET_ACC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACK_GET_ACC);
+
+ MPIR_cc_incr(rreq->cc_ptr, &c);
+ ack_msg.req_ptr = MPIDI_CH4U_REQUEST(rreq, req->areq.req_ptr);
+
+ mpi_errno =
+ MPIDI_NM_am_isend_reply(MPIDI_CH4U_win_to_context
+ (MPIDI_CH4U_REQUEST(rreq, req->areq.win_ptr)),
+ MPIDI_CH4U_REQUEST(rreq, rank), MPIDI_CH4U_GET_ACC_ACK,
+ &ack_msg, sizeof(ack_msg), MPIDI_CH4U_REQUEST(rreq, req->areq.data),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.data_sz), MPI_BYTE, rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACK_GET_ACC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_lock_advance
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_win_lock_advance(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDI_CH4U_win_sync_lock *slock = &MPIDI_CH4U_WIN(win, sync).lock;
+ struct MPIDI_CH4U_win_queue *q = &slock->local.requested;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_LOCK_ADVANCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_LOCK_ADVANCE);
+
+ if ((q->head != NULL) && ((slock->local.count == 0) ||
+ ((slock->local.type == MPI_LOCK_SHARED) &&
+ (q->head->type == MPI_LOCK_SHARED)))) {
+ struct MPIDI_CH4U_win_lock *lock = q->head;
+ q->head = lock->next;
+
+ if (q->head == NULL)
+ q->tail = NULL;
+
+ ++slock->local.count;
+ slock->local.type = lock->type;
+
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+ int handler_id;
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+
+ if (lock->mtype == MPIDI_CH4U_WIN_LOCK)
+ handler_id = MPIDI_CH4U_WIN_LOCK_ACK;
+ else if (lock->mtype == MPIDI_CH4U_WIN_LOCKALL)
+ handler_id = MPIDI_CH4U_WIN_LOCKALL_ACK;
+ else
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**rmasync");
+
+ mpi_errno = MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_win_to_context(win),
+ lock->rank, handler_id, &msg, sizeof(msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ MPL_free(lock);
+
+ mpi_errno = MPIDI_win_lock_advance(win);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_LOCK_ADVANCE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_lock_req_proc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_lock_req_proc(int handler_id,
+ const MPIDI_CH4U_win_cntrl_msg_t * info, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_LOCK_REQ_PROC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_LOCK_REQ_PROC);
+
+ struct MPIDI_CH4U_win_lock *lock = (struct MPIDI_CH4U_win_lock *)
+ MPL_calloc(1, sizeof(struct MPIDI_CH4U_win_lock));
+
+ lock->mtype = handler_id;
+ lock->rank = info->origin_rank;
+ lock->type = info->lock_type;
+ struct MPIDI_CH4U_win_queue *q = &MPIDI_CH4U_WIN(win, sync).lock.local.requested;
+ MPIR_Assert((q->head != NULL) ^ (q->tail == NULL));
+
+ if (q->tail == NULL)
+ q->head = lock;
+ else
+ q->tail->next = lock;
+
+ q->tail = lock;
+
+ MPIDI_win_lock_advance(win);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_LOCK_REQ_PROC);
+ return;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_lock_ack_proc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_lock_ack_proc(int handler_id,
+ const MPIDI_CH4U_win_cntrl_msg_t * info, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_LOCK_ACK_PROC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_LOCK_ACK_PROC);
+
+ if (handler_id == MPIDI_CH4U_WIN_LOCK_ACK)
+ MPIDI_CH4U_WIN(win, sync).lock.remote.locked += 1;
+ else if (handler_id == MPIDI_CH4U_WIN_LOCKALL_ACK)
+ MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked += 1;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_LOCK_ACK_PROC);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4U_win_unlock_ack_proc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_unlock_proc(const MPIDI_CH4U_win_cntrl_msg_t * info, MPIR_Win * win)
+{
+
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_UNLOCK_PROC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_UNLOCK_PROC);
+
+ --MPIDI_CH4U_WIN(win, sync).lock.local.count;
+ MPIR_Assert((int) MPIDI_CH4U_WIN(win, sync).lock.local.count >= 0);
+ MPIDI_win_lock_advance(win);
+
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+
+ mpi_errno = MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_win_to_context(win),
+ info->origin_rank,
+ MPIDI_CH4U_WIN_UNLOCK_ACK, &msg, sizeof(msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_UNLOCK_PROC);
+ return;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_complete_proc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_complete_proc(const MPIDI_CH4U_win_cntrl_msg_t * info, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_COMPLETE_PROC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_COMPLETE_PROC);
+
+ ++MPIDI_CH4U_WIN(win, sync).sc.count;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_COMPLETE_PROC);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_post_proc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_post_proc(const MPIDI_CH4U_win_cntrl_msg_t * info, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_POST_PROC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_POST_PROC);
+
+ ++MPIDI_CH4U_WIN(win, sync).pw.count;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_POST_PROC);
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_unlock_done
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_win_unlock_done(const MPIDI_CH4U_win_cntrl_msg_t * info, MPIR_Win * win)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_UNLOCK_DONE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_UNLOCK_DONE);
+
+ if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_LOCK) {
+ MPIDI_CH4U_WIN(win, sync).lock.remote.locked--;
+ }
+ else if (MPIDI_CH4U_WIN(win, sync).origin_epoch_type == MPIDI_CH4U_EPOTYPE_LOCK_ALL) {
+ MPIR_Assert((int) MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked > 0);
+ MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked -= 1;
+ }
+ else {
+ MPIR_Assert(0);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_UNLOCK_DONE);
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_do_accumulate_op
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_do_accumulate_op(void *source_buf, int source_count,
+ MPI_Datatype source_dtp, void *target_buf,
+ int target_count, MPI_Datatype target_dtp,
+ MPI_Aint stream_offset, MPI_Op acc_op)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPI_User_function *uop = NULL;
+ MPI_Aint source_dtp_size = 0, source_dtp_extent = 0;
+ int is_empty_source = FALSE;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_DO_ACCUMULATE_OP);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_DO_ACCUMULATE_OP);
+
+ /* first Judge if source buffer is empty */
+ if (acc_op == MPI_NO_OP)
+ is_empty_source = TRUE;
+
+ if (is_empty_source == FALSE) {
+ MPIR_Assert(MPIR_DATATYPE_IS_PREDEFINED(source_dtp));
+ MPID_Datatype_get_size_macro(source_dtp, source_dtp_size);
+ MPID_Datatype_get_extent_macro(source_dtp, source_dtp_extent);
+ }
+
+ if (HANDLE_GET_KIND(acc_op) == HANDLE_KIND_BUILTIN) {
+ /* get the function by indexing into the op table */
+ uop = MPIR_OP_HDL_TO_FN(acc_op);
+ }
+ else {
+ /* --BEGIN ERROR HANDLING-- */
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPI_ERR_OP,
+ "**opnotpredefined", "**opnotpredefined %d", acc_op);
+ return mpi_errno;
+ /* --END ERROR HANDLING-- */
+ }
+
+
+ if (is_empty_source == TRUE || MPIR_DATATYPE_IS_PREDEFINED(target_dtp)) {
+ /* directly apply op if target dtp is predefined dtp OR source buffer is empty */
+ MPI_Aint real_stream_offset;
+ void *curr_target_buf;
+
+ if (is_empty_source == FALSE) {
+ MPIR_Assert(source_dtp == target_dtp);
+ real_stream_offset = (stream_offset / source_dtp_size) * source_dtp_extent;
+ curr_target_buf = (void *) ((char *) target_buf + real_stream_offset);
+ }
+ else {
+ curr_target_buf = target_buf;
+ }
+
+ (*uop) (source_buf, curr_target_buf, &source_count, &source_dtp);
+ }
+ else {
+ /* derived datatype */
+ MPID_Segment *segp;
+ DLOOP_VECTOR *dloop_vec;
+ MPI_Aint first, last;
+ int vec_len, i, count;
+ MPI_Aint type_extent, type_size;
+ MPI_Datatype type;
+ MPIR_Datatype *dtp;
+ MPI_Aint curr_len;
+ void *curr_loc;
+ int accumulated_count;
+
+ segp = MPIDU_Segment_alloc();
+ /* --BEGIN ERROR HANDLING-- */
+ if (!segp) {
+ mpi_errno =
+ MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
+ MPI_ERR_OTHER, "**nomem", 0);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+ MPIDU_Segment_init(NULL, target_count, target_dtp, segp, 0);
+ first = stream_offset;
+ last = first + source_count * source_dtp_size;
+
+ MPID_Datatype_get_ptr(target_dtp, dtp);
+ vec_len = dtp->max_contig_blocks * target_count + 1;
+ /* +1 needed because Rob says so */
+ dloop_vec = (DLOOP_VECTOR *)
+ MPL_malloc(vec_len * sizeof(DLOOP_VECTOR));
+ /* --BEGIN ERROR HANDLING-- */
+ if (!dloop_vec) {
+ mpi_errno =
+ MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
+ MPI_ERR_OTHER, "**nomem", 0);
+ goto fn_exit;
+ }
+ /* --END ERROR HANDLING-- */
+
+ MPIDU_Segment_pack_vector(segp, first, &last, dloop_vec, &vec_len);
+
+ type = dtp->basic_type;
+ MPIR_Assert(type != MPI_DATATYPE_NULL);
+
+ MPIR_Assert(type == source_dtp);
+ type_size = source_dtp_size;
+ type_extent = source_dtp_extent;
+
+ i = 0;
+ curr_loc = dloop_vec[0].DLOOP_VECTOR_BUF;
+ curr_len = dloop_vec[0].DLOOP_VECTOR_LEN;
+ accumulated_count = 0;
+ while (i != vec_len) {
+ if (curr_len < type_size) {
+ MPIR_Assert(i != vec_len);
+ i++;
+ curr_len += dloop_vec[i].DLOOP_VECTOR_LEN;
+ continue;
+ }
+
+ MPIR_Assign_trunc(count, curr_len / type_size, int);
+
+ (*uop) ((char *) source_buf + type_extent * accumulated_count,
+ (char *) target_buf + MPIR_Ptr_to_aint(curr_loc), &count, &type);
+
+ if (curr_len % type_size == 0) {
+ i++;
+ if (i != vec_len) {
+ curr_loc = dloop_vec[i].DLOOP_VECTOR_BUF;
+ curr_len = dloop_vec[i].DLOOP_VECTOR_LEN;
+ }
+ }
+ else {
+ curr_loc = (void *) ((char *) curr_loc + type_extent * count);
+ curr_len -= type_size * count;
+ }
+
+ accumulated_count += count;
+ }
+
+ MPIDU_Segment_free(segp);
+ MPL_free(dloop_vec);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_DO_ACCUMULATE_OP);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_handle_acc_cmpl
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_handle_acc_cmpl(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ MPI_Aint basic_sz, count;
+ struct iovec *iov;
+ char *src_ptr;
+ size_t data_sz;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_HANDLE_ACC_CMPL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_HANDLE_ACC_CMPL);
+
+ MPID_Datatype_get_size_macro(MPIDI_CH4U_REQUEST(rreq, req->areq.target_datatype), basic_sz);
+ data_sz = MPIDI_CH4U_REQUEST(rreq, req->areq.data_sz);
+
+ /* MPIDI_CS_ENTER(); */
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->areq.op) == MPI_NO_OP) {
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_count) =
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_count);
+ MPIDI_CH4U_REQUEST(rreq, req->areq.data_sz) = data_sz;
+ }
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov) == NULL) {
+ mpi_errno = MPIDI_do_accumulate_op(MPIDI_CH4U_REQUEST(rreq, req->areq.data),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_count),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_datatype),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_addr),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_count),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_datatype),
+ 0, MPIDI_CH4U_REQUEST(rreq, req->areq.op));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ else {
+ iov = (struct iovec *) MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov);
+ src_ptr = (char *) MPIDI_CH4U_REQUEST(rreq, req->areq.data);
+ for (i = 0; i < MPIDI_CH4U_REQUEST(rreq, req->areq.n_iov); i++) {
+ count = iov[i].iov_len / basic_sz;
+ MPIR_Assert(count > 0);
+
+ mpi_errno = MPIDI_do_accumulate_op(src_ptr, count,
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_datatype),
+ iov[i].iov_base, count,
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_datatype),
+ 0, MPIDI_CH4U_REQUEST(rreq, req->areq.op));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ src_ptr += count * basic_sz;
+ }
+ MPL_free(iov);
+ }
+
+ /* MPIDI_CS_EXIT(); */
+ if (MPIDI_CH4U_REQUEST(rreq, req->areq.data))
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, req->areq.data));
+
+ MPIDI_CH4U_REQUEST(rreq, req->areq.data) = NULL;
+ mpi_errno = MPIDI_ack_acc(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_Request_complete(rreq);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_HANDLE_ACC_CMPL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_handle_get_acc_cmpl
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_handle_get_acc_cmpl(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ MPI_Aint basic_sz, count, offset = 0;
+ struct iovec *iov;
+ char *src_ptr, *original = NULL;
+ size_t data_sz;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_HANDLE_GET_ACC_CMPL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_HANDLE_GET_ACC_CMPL);
+
+ MPID_Datatype_get_size_macro(MPIDI_CH4U_REQUEST(rreq, req->areq.target_datatype), basic_sz);
+ data_sz = MPIDI_CH4U_REQUEST(rreq, req->areq.data_sz);
+
+ /* MPIDI_CS_ENTER(); */
+
+ original = (char *) MPL_malloc(data_sz);
+ MPIR_Assert(original);
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->areq.op) == MPI_NO_OP) {
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_count) =
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_count);
+ MPIDI_CH4U_REQUEST(rreq, req->areq.data_sz) = data_sz;
+ }
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov) == NULL) {
+
+ MPIR_Memcpy(original, MPIDI_CH4U_REQUEST(rreq, req->areq.target_addr),
+ basic_sz * MPIDI_CH4U_REQUEST(rreq, req->areq.target_count));
+
+ mpi_errno = MPIDI_do_accumulate_op(MPIDI_CH4U_REQUEST(rreq, req->areq.data),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_count),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_datatype),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_addr),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_count),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_datatype),
+ 0, MPIDI_CH4U_REQUEST(rreq, req->areq.op));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ else {
+ iov = (struct iovec *) MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov);
+ src_ptr = (char *) MPIDI_CH4U_REQUEST(rreq, req->areq.data);
+ for (i = 0; i < MPIDI_CH4U_REQUEST(rreq, req->areq.n_iov); i++) {
+ count = iov[i].iov_len / basic_sz;
+ MPIR_Assert(count > 0);
+
+ MPIR_Memcpy(original + offset, iov[i].iov_base, count * basic_sz);
+ offset += count * basic_sz;
+
+ mpi_errno = MPIDI_do_accumulate_op(src_ptr, count,
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_datatype),
+ iov[i].iov_base, count,
+ MPIDI_CH4U_REQUEST(rreq, req->areq.target_datatype),
+ 0, MPIDI_CH4U_REQUEST(rreq, req->areq.op));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ src_ptr += count * basic_sz;
+ }
+ MPL_free(iov);
+ }
+
+ /* MPIDI_CS_EXIT(); */
+ if (MPIDI_CH4U_REQUEST(rreq, req->areq.data))
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, req->areq.data));
+
+ MPIDI_CH4U_REQUEST(rreq, req->areq.data) = original;
+ mpi_errno = MPIDI_ack_get_acc(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_Request_complete(rreq);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_HANDLE_GET_ACC_CMPL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_handle_acc_data
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void MPIDI_handle_acc_data(void **data, size_t * p_data_sz, int *is_contig,
+ MPIR_Request * rreq)
+{
+ void *p_data = NULL;
+ size_t data_sz;
+ uintptr_t base;
+ int i;
+ struct iovec *iov;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_HANDLE_ACC_DATA);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_HANDLE_ACC_DATA);
+
+ base = (uintptr_t) MPIDI_CH4U_REQUEST(rreq, req->areq.target_addr);
+ MPIDI_Datatype_check_size(MPIDI_CH4U_REQUEST(rreq, req->areq.origin_datatype),
+ MPIDI_CH4U_REQUEST(rreq, req->areq.origin_count), data_sz);
+ if (data_sz) {
+ p_data = MPL_malloc(data_sz);
+ MPIR_Assert(p_data);
+ }
+
+ MPIDI_CH4U_REQUEST(rreq, req->areq.data) = p_data;
+
+ /* Adjust the target addresses using the window base address */
+ iov = (struct iovec *) MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov);
+ for (i = 0; i < MPIDI_CH4U_REQUEST(rreq, req->areq.n_iov); i++)
+ iov[i].iov_base = (char *) iov[i].iov_base + base;
+
+ *data = p_data;
+ *is_contig = 1;
+ *p_data_sz = data_sz;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_HANDLE_ACC_DATA);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_target_cmpl_cb(MPIR_Request * req)
+{
+ int mpi_errno = MPI_SUCCESS, i, c;
+ size_t data_sz, offset;
+ MPIDI_CH4U_get_ack_msg_t get_ack;
+ struct iovec *iov;
+ char *p_data;
+ uintptr_t base;
+ MPIR_Win *win;
+ MPIR_Context_id_t context_id;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(req, MPIDI_get_target_cmpl_cb))
+ return mpi_errno;
+
+ base = MPIDI_CH4U_REQUEST(req, req->greq.addr);
+
+ MPIR_cc_incr(req->cc_ptr, &c);
+ get_ack.greq_ptr = MPIDI_CH4U_REQUEST(req, req->greq.greq_ptr);
+ win = MPIDI_CH4U_REQUEST(req, req->greq.win_ptr);
+ context_id = MPIDI_CH4U_win_to_context(win);
+ if (MPIDI_CH4U_REQUEST(req, req->greq.n_iov) == 0) {
+ mpi_errno = MPIDI_NM_am_isend_reply(context_id,
+ MPIDI_CH4U_REQUEST(req, rank),
+ MPIDI_CH4U_GET_ACK,
+ &get_ack, sizeof(get_ack),
+ (void *) MPIDI_CH4U_REQUEST(req, req->greq.addr),
+ MPIDI_CH4U_REQUEST(req, req->greq.count),
+ MPIDI_CH4U_REQUEST(req, req->greq.datatype), req);
+ MPIDI_Request_complete(req);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+
+ iov = (struct iovec *) MPIDI_CH4U_REQUEST(req, req->greq.dt_iov);
+
+ data_sz = 0;
+ for (i = 0; i < MPIDI_CH4U_REQUEST(req, req->greq.n_iov); i++) {
+ data_sz += iov[i].iov_len;
+ }
+
+ p_data = (char *) MPL_malloc(data_sz);
+ MPIR_Assert(p_data);
+
+ offset = 0;
+ for (i = 0; i < MPIDI_CH4U_REQUEST(req, req->greq.n_iov); i++) {
+ /* Adjust a window base address */
+ iov[i].iov_base = (char *) iov[i].iov_base + base;
+ MPIR_Memcpy(p_data + offset, iov[i].iov_base, iov[i].iov_len);
+ offset += iov[i].iov_len;
+ }
+
+ MPL_free(MPIDI_CH4U_REQUEST(req, req->greq.dt_iov));
+ MPIDI_CH4U_REQUEST(req, req->greq.dt_iov) = (void *) p_data;
+
+ mpi_errno = MPIDI_NM_am_isend_reply(context_id,
+ MPIDI_CH4U_REQUEST(req, rank),
+ MPIDI_CH4U_GET_ACK,
+ &get_ack, sizeof(get_ack), p_data, data_sz, MPI_BYTE, req);
+ MPIDI_Request_complete(req);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ MPIDI_progress_cmpl_list();
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(rreq, MPIDI_put_target_cmpl_cb))
+ return mpi_errno;
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->status) & MPIDI_CH4U_REQ_RCV_NON_CONTIG) {
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, req->iov));
+ }
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->preq.dt_iov)) {
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, req->preq.dt_iov));
+ }
+
+ mpi_errno = MPIDI_ack_put(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_Request_complete(rreq);
+ MPIDI_progress_cmpl_list();
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_iov_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_iov_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_put_iov_ack_msg_t ack_msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_IOV_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_IOV_TARGET_CMPL_CB);
+
+ ack_msg.src_rank = MPIDI_CH4U_REQUEST(rreq, rank);
+ ack_msg.origin_preq_ptr = (uint64_t) MPIDI_CH4U_REQUEST(rreq, req->preq.preq_ptr);
+ ack_msg.target_preq_ptr = (uint64_t) rreq;
+
+ mpi_errno =
+ MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_win_to_context
+ (MPIDI_CH4U_REQUEST(rreq, req->preq.win_ptr)),
+ MPIDI_CH4U_REQUEST(rreq, rank), MPIDI_CH4U_PUT_IOV_ACK,
+ &ack_msg, sizeof(ack_msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_IOV_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_iov_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_iov_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_acc_iov_ack_msg_t ack_msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_IOV_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_IOV_TARGET_CMPL_CB);
+
+ ack_msg.origin_preq_ptr = (uint64_t) MPIDI_CH4U_REQUEST(rreq, req->areq.req_ptr);
+ ack_msg.target_preq_ptr = (uint64_t) rreq;
+
+ mpi_errno =
+ MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_win_to_context
+ (MPIDI_CH4U_REQUEST(rreq, req->areq.win_ptr)),
+ MPIDI_CH4U_REQUEST(rreq, rank), MPIDI_CH4U_ACC_IOV_ACK,
+ &ack_msg, sizeof(ack_msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_IOV_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_iov_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_iov_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_get_acc_iov_ack_msg_t ack_msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_IOV_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_IOV_TARGET_CMPL_CB);
+
+ ack_msg.origin_preq_ptr = (uint64_t) MPIDI_CH4U_REQUEST(rreq, req->areq.req_ptr);
+ ack_msg.target_preq_ptr = (uint64_t) rreq;
+
+ mpi_errno =
+ MPIDI_NM_am_send_hdr_reply(MPIDI_CH4U_win_to_context
+ (MPIDI_CH4U_REQUEST(rreq, req->areq.win_ptr)),
+ MPIDI_CH4U_REQUEST(rreq, rank), MPIDI_CH4U_GET_ACC_IOV_ACK,
+ &ack_msg, sizeof(ack_msg));
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_IOV_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_cswap_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_cswap_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ void *compare_addr;
+ void *origin_addr;
+ size_t data_sz;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CSWAP_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CSWAP_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(rreq, MPIDI_cswap_target_cmpl_cb))
+ return mpi_errno;
+
+ MPIDI_Datatype_check_size(MPIDI_CH4U_REQUEST(rreq, req->creq.datatype), 1, data_sz);
+ origin_addr = MPIDI_CH4U_REQUEST(rreq, req->creq.data);
+ compare_addr = ((char *) MPIDI_CH4U_REQUEST(rreq, req->creq.data)) + data_sz;
+
+ /* MPIDI_CS_ENTER(); */
+
+ if (MPIR_Compare_equal((void *) MPIDI_CH4U_REQUEST(rreq, req->creq.addr), compare_addr,
+ MPIDI_CH4U_REQUEST(rreq, req->creq.datatype))) {
+ MPIR_Memcpy(compare_addr, (void *) MPIDI_CH4U_REQUEST(rreq, req->creq.addr), data_sz);
+ MPIR_Memcpy((void *) MPIDI_CH4U_REQUEST(rreq, req->creq.addr), origin_addr, data_sz);
+ }
+ else {
+ MPIR_Memcpy(compare_addr, (void *) MPIDI_CH4U_REQUEST(rreq, req->creq.addr), data_sz);
+ }
+
+ /* MPIDI_CS_EXIT(); */
+
+ mpi_errno = MPIDI_ack_cswap(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ MPIDI_Request_complete(rreq);
+ MPIDI_progress_cmpl_list();
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CSWAP_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(rreq, MPIDI_acc_target_cmpl_cb))
+ return mpi_errno;
+
+ mpi_errno = MPIDI_handle_acc_cmpl(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_progress_cmpl_list();
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(rreq, MPIDI_get_acc_target_cmpl_cb))
+ return mpi_errno;
+
+ mpi_errno = MPIDI_handle_get_acc_cmpl(rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPIDI_progress_cmpl_list();
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_TARGET_CMPL_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_ack_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_ack_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *greq;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACK_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACK_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(rreq, MPIDI_get_ack_target_cmpl_cb))
+ return mpi_errno;
+
+ greq = (MPIR_Request *) MPIDI_CH4U_REQUEST(rreq, req->greq.greq_ptr);
+ if (MPIDI_CH4U_REQUEST(greq, req->status) & MPIDI_CH4U_REQ_RCV_NON_CONTIG) {
+ MPL_free(MPIDI_CH4U_REQUEST(greq, req->iov));
+ }
+
+ win = MPIDI_CH4U_REQUEST(greq, req->greq.win_ptr);
+ MPIDI_win_remote_cmpl_cnt_decr(win, MPIDI_CH4U_REQUEST(greq, rank));
+
+ MPIDI_Request_complete(greq);
+ MPIDI_Request_complete(rreq);
+ MPIDI_progress_cmpl_list();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACK_TARGET_CMPL_CB);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_ack_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_ack_target_cmpl_cb(MPIR_Request * areq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_ACK_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_ACK_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(areq, MPIDI_get_acc_ack_target_cmpl_cb))
+ return mpi_errno;
+
+ if (MPIDI_CH4U_REQUEST(areq, req->status) & MPIDI_CH4U_REQ_RCV_NON_CONTIG) {
+ MPL_free(MPIDI_CH4U_REQUEST(areq, req->iov));
+ }
+
+ win = MPIDI_CH4U_REQUEST(areq, req->areq.win_ptr);
+ MPIDI_win_remote_cmpl_cnt_decr(win, MPIDI_CH4U_REQUEST(areq, rank));
+
+ dtype_release_if_not_builtin(MPIDI_CH4U_REQUEST(areq, req->areq.result_datatype));
+ MPIDI_Request_complete(areq);
+
+ MPIDI_progress_cmpl_list();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_ACK_TARGET_CMPL_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_cswap_ack_target_cmpl_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_cswap_ack_target_cmpl_cb(MPIR_Request * rreq)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CSWAP_ACK_TARGET_CMPL_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CSWAP_ACK_TARGET_CMPL_CB);
+
+ if (!MPIDI_check_cmpl_order(rreq, MPIDI_cswap_ack_target_cmpl_cb))
+ return mpi_errno;
+
+ win = MPIDI_CH4U_REQUEST(rreq, req->creq.win_ptr);
+ MPIDI_win_remote_cmpl_cnt_decr(win, MPIDI_CH4U_REQUEST(rreq, rank));
+
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, req->creq.data));
+ MPIDI_Request_complete(rreq);
+
+ MPIDI_progress_cmpl_list();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CSWAP_ACK_TARGET_CMPL_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_put_ack_msg_t *msg_hdr = (MPIDI_CH4U_put_ack_msg_t *) am_hdr;
+ MPIR_Win *win;
+ MPIR_Request *preq;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_ACK_TARGET_MSG_CB);
+
+ preq = (MPIR_Request *) msg_hdr->preq_ptr;
+ win = MPIDI_CH4U_REQUEST(preq, req->preq.win_ptr);
+
+ if (MPIDI_CH4U_REQUEST(preq, req->preq.dt_iov)) {
+ MPL_free(MPIDI_CH4U_REQUEST(preq, req->preq.dt_iov));
+ }
+
+ MPIDI_win_remote_cmpl_cnt_decr(win, MPIDI_CH4U_REQUEST(preq, rank));
+
+ MPIDI_Request_complete(preq);
+
+ if (req)
+ *req = NULL;
+ if (target_cmpl_cb)
+ *target_cmpl_cb = NULL;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_acc_ack_msg_t *msg_hdr = (MPIDI_CH4U_acc_ack_msg_t *) am_hdr;
+ MPIR_Win *win;
+ MPIR_Request *areq;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_ACK_TARGET_MSG_CB);
+
+ areq = (MPIR_Request *) msg_hdr->req_ptr;
+ win = MPIDI_CH4U_REQUEST(areq, req->areq.win_ptr);
+
+ if (MPIDI_CH4U_REQUEST(areq, req->areq.dt_iov)) {
+ MPL_free(MPIDI_CH4U_REQUEST(areq, req->areq.dt_iov));
+ }
+
+ MPIDI_win_remote_cmpl_cnt_decr(win, MPIDI_CH4U_REQUEST(areq, rank));
+
+ MPIDI_Request_complete(areq);
+
+ if (req)
+ *req = NULL;
+ if (target_cmpl_cb)
+ *target_cmpl_cb = NULL;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_get_acc_ack_msg_t *msg_hdr = (MPIDI_CH4U_get_acc_ack_msg_t *) am_hdr;
+ MPIR_Request *areq;
+
+ size_t data_sz;
+ int dt_contig, n_iov;
+ MPI_Aint dt_true_lb, last, num_iov;
+ MPIR_Datatype *dt_ptr;
+ MPID_Segment *segment_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_ACK_TARGET_MSG_CB);
+
+ areq = (MPIR_Request *) msg_hdr->req_ptr;
+
+ if (MPIDI_CH4U_REQUEST(areq, req->areq.dt_iov)) {
+ MPL_free(MPIDI_CH4U_REQUEST(areq, req->areq.dt_iov));
+ }
+
+ MPIDI_Datatype_get_info(MPIDI_CH4U_REQUEST(areq, req->areq.result_count),
+ MPIDI_CH4U_REQUEST(areq, req->areq.result_datatype),
+ dt_contig, data_sz, dt_ptr, dt_true_lb);
+ *is_contig = dt_contig;
+
+ if (dt_contig) {
+ *p_data_sz = data_sz;
+ *data = (char *) MPIDI_CH4U_REQUEST(areq, req->areq.result_addr) + dt_true_lb;
+ }
+ else {
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+ MPIDU_Segment_init(MPIDI_CH4U_REQUEST(areq, req->areq.result_addr),
+ MPIDI_CH4U_REQUEST(areq, req->areq.result_count),
+ MPIDI_CH4U_REQUEST(areq, req->areq.result_datatype), segment_ptr, 0);
+
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ MPIDI_CH4U_REQUEST(areq, req->iov) =
+ (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(MPIDI_CH4U_REQUEST(areq, req->iov));
+
+ last = data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, MPIDI_CH4U_REQUEST(areq, req->iov),
+ &n_iov);
+ MPIR_Assert(last == (MPI_Aint) data_sz);
+ *data = MPIDI_CH4U_REQUEST(areq, req->iov);
+ *p_data_sz = n_iov;
+ MPIDI_CH4U_REQUEST(areq, req->status) |= MPIDI_CH4U_REQ_RCV_NON_CONTIG;
+ MPL_free(segment_ptr);
+ }
+
+ *req = areq;
+ *target_cmpl_cb = MPIDI_get_acc_ack_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(areq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_cswap_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_cswap_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_cswap_ack_msg_t *msg_hdr = (MPIDI_CH4U_cswap_ack_msg_t *) am_hdr;
+ MPIR_Request *creq;
+ uint64_t data_sz;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CSWAP_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CSWAP_ACK_TARGET_MSG_CB);
+
+ creq = (MPIR_Request *) msg_hdr->req_ptr;
+ MPIDI_Datatype_check_size(MPIDI_CH4U_REQUEST(creq, req->creq.datatype), 1, data_sz);
+ *data = MPIDI_CH4U_REQUEST(creq, req->creq.result_addr);
+ *p_data_sz = data_sz;
+ *is_contig = 1;
+
+ *req = creq;
+ *target_cmpl_cb = MPIDI_cswap_ack_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(creq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CSWAP_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_win_ctrl_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_win_ctrl_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz, int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_win_cntrl_msg_t *msg_hdr = (MPIDI_CH4U_win_cntrl_msg_t *) am_hdr;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_WIN_CTRL_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_WIN_CTRL_TARGET_MSG_CB);
+
+ MPL_HASH_FIND(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ &msg_hdr->win_id, sizeof(uint64_t), win);
+ /* TODO: check output win ptr */
+
+ switch (handler_id) {
+ char buff[32];
+
+ case MPIDI_CH4U_WIN_LOCK:
+ case MPIDI_CH4U_WIN_LOCKALL:
+ MPIDI_win_lock_req_proc(handler_id, msg_hdr, win);
+ break;
+
+ case MPIDI_CH4U_WIN_LOCK_ACK:
+ case MPIDI_CH4U_WIN_LOCKALL_ACK:
+ MPIDI_win_lock_ack_proc(handler_id, msg_hdr, win);
+ break;
+
+ case MPIDI_CH4U_WIN_UNLOCK:
+ case MPIDI_CH4U_WIN_UNLOCKALL:
+ MPIDI_win_unlock_proc(msg_hdr, win);
+ break;
+
+ case MPIDI_CH4U_WIN_UNLOCK_ACK:
+ case MPIDI_CH4U_WIN_UNLOCKALL_ACK:
+ MPIDI_win_unlock_done(msg_hdr, win);
+ break;
+
+ case MPIDI_CH4U_WIN_COMPLETE:
+ MPIDI_win_complete_proc(msg_hdr, win);
+ break;
+
+ case MPIDI_CH4U_WIN_POST:
+ MPIDI_win_post_proc(msg_hdr, win);
+ break;
+
+ default:
+ MPL_snprintf(buff, sizeof(buff), "Invalid message type: %d\n", handler_id);
+ MPID_Abort(NULL, MPI_ERR_INTERN, 1, buff);
+ }
+
+ if (req)
+ *req = NULL;
+ if (target_cmpl_cb)
+ *target_cmpl_cb = NULL;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_WIN_CTRL_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ size_t data_sz;
+ struct iovec *iov, *dt_iov;
+ uintptr_t base; /* Base address of the window */
+ size_t offset;
+
+ int dt_contig, n_iov;
+ MPI_Aint dt_true_lb, last, num_iov;
+ MPIR_Datatype *dt_ptr;
+ MPID_Segment *segment_ptr;
+ MPIR_Win *win;
+ MPIDI_CH4U_put_msg_t *msg_hdr = (MPIDI_CH4U_put_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+ *req = rreq;
+
+ MPIDI_CH4U_REQUEST(*req, req->preq.preq_ptr) = msg_hdr->preq_ptr;
+ MPIDI_CH4U_REQUEST(*req, rank) = msg_hdr->src_rank;
+
+ MPL_HASH_FIND(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ &msg_hdr->win_id, sizeof(uint64_t), win);
+ MPIR_Assert(win);
+
+ base = MPIDI_CH4I_win_base_at_target(win);
+
+ MPIDI_CH4U_REQUEST(rreq, req->preq.win_ptr) = win;
+
+ *target_cmpl_cb = MPIDI_put_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(rreq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ offset = win->disp_unit * msg_hdr->target_disp;
+ if (msg_hdr->n_iov) {
+ int i;
+ dt_iov = (struct iovec *) MPL_malloc(sizeof(struct iovec) * msg_hdr->n_iov);
+ MPIR_Assert(dt_iov);
+
+ iov = (struct iovec *) ((char *) am_hdr + sizeof(*msg_hdr));
+ for (i = 0; i < msg_hdr->n_iov; i++)
+ iov[i].iov_base = (char *) iov[i].iov_base + base + offset;
+ MPIR_Memcpy(dt_iov, iov, sizeof(struct iovec) * msg_hdr->n_iov);
+ MPIDI_CH4U_REQUEST(rreq, req->preq.dt_iov) = dt_iov;
+ MPIDI_CH4U_REQUEST(rreq, req->preq.n_iov) = msg_hdr->n_iov;
+ *is_contig = 0;
+ *data = iov;
+ *p_data_sz = msg_hdr->n_iov;
+ goto fn_exit;
+ }
+
+ MPIDI_CH4U_REQUEST(rreq, req->preq.dt_iov) = NULL;
+ MPIDI_Datatype_get_info(msg_hdr->count, msg_hdr->datatype,
+ dt_contig, data_sz, dt_ptr, dt_true_lb);
+ *is_contig = dt_contig;
+
+ if (dt_contig) {
+ *p_data_sz = data_sz;
+ *data = (char *) (offset + base + dt_true_lb);
+ }
+ else {
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+ MPIDU_Segment_init((void *) (offset + base), msg_hdr->count, msg_hdr->datatype,
+ segment_ptr, 0);
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ MPIDI_CH4U_REQUEST(rreq, req->iov) =
+ (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(MPIDI_CH4U_REQUEST(rreq, req->iov));
+
+ last = data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, MPIDI_CH4U_REQUEST(rreq, req->iov),
+ &n_iov);
+ MPIR_Assert(last == (MPI_Aint) data_sz);
+ *data = MPIDI_CH4U_REQUEST(rreq, req->iov);
+ *p_data_sz = n_iov;
+ MPIDI_CH4U_REQUEST(rreq, req->status) |= MPIDI_CH4U_REQ_RCV_NON_CONTIG;
+ MPL_free(segment_ptr);
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_iov_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_iov_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ struct iovec *dt_iov;
+
+ MPIR_Win *win;
+ MPIDI_CH4U_put_msg_t *msg_hdr = (MPIDI_CH4U_put_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_IOV_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_IOV_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+ *req = rreq;
+
+ MPIDI_CH4U_REQUEST(*req, req->preq.preq_ptr) = msg_hdr->preq_ptr;
+ MPIDI_CH4U_REQUEST(*req, rank) = msg_hdr->src_rank;
+
+ MPL_HASH_FIND(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ &msg_hdr->win_id, sizeof(uint64_t), win);
+ MPIR_Assert(win);
+
+ MPIDI_CH4U_REQUEST(rreq, req->preq.win_ptr) = win;
+
+ *target_cmpl_cb = MPIDI_put_iov_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(rreq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ /* Base adjustment for iov will be done after we get the entire iovs,
+ * at MPIDI_CH4U_put_data_target_msg_cb */
+ MPIR_Assert(msg_hdr->n_iov);
+ dt_iov = (struct iovec *) MPL_malloc(sizeof(struct iovec) * msg_hdr->n_iov);
+ MPIR_Assert(dt_iov);
+
+ MPIDI_CH4U_REQUEST(rreq, req->preq.dt_iov) = dt_iov;
+ MPIDI_CH4U_REQUEST(rreq, req->preq.n_iov) = msg_hdr->n_iov;
+ *is_contig = 1;
+ *data = dt_iov;
+ *p_data_sz = msg_hdr->n_iov * sizeof(struct iovec);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_IOV_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_iov_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_iov_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq, *origin_req;
+ MPIDI_CH4U_put_iov_ack_msg_t *msg_hdr = (MPIDI_CH4U_put_iov_ack_msg_t *) am_hdr;
+ MPIDI_CH4U_put_dat_msg_t dat_msg;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_IOV_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_IOV_ACK_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+
+ origin_req = (MPIR_Request *) msg_hdr->origin_preq_ptr;
+ dat_msg.preq_ptr = msg_hdr->target_preq_ptr;
+ win = MPIDI_CH4U_REQUEST(origin_req, req->preq.win_ptr);
+ mpi_errno = MPIDI_NM_am_isend_reply(MPIDI_CH4U_win_to_context(win),
+ MPIDI_CH4U_REQUEST(origin_req, rank),
+ MPIDI_CH4U_PUT_DAT_REQ,
+ &dat_msg, sizeof(dat_msg),
+ MPIDI_CH4U_REQUEST(origin_req, req->preq.origin_addr),
+ MPIDI_CH4U_REQUEST(origin_req, req->preq.origin_count),
+ MPIDI_CH4U_REQUEST(origin_req, req->preq.origin_datatype),
+ rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dtype_release_if_not_builtin(MPIDI_CH4U_REQUEST(origin_req, req->preq.origin_datatype));
+
+ *target_cmpl_cb = NULL;
+ *req = NULL;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_IOV_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_iov_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_iov_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq, *origin_req;
+ MPIDI_CH4U_acc_iov_ack_msg_t *msg_hdr = (MPIDI_CH4U_acc_iov_ack_msg_t *) am_hdr;
+ MPIDI_CH4U_acc_dat_msg_t dat_msg;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_IOV_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_IOV_ACK_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+
+ origin_req = (MPIR_Request *) msg_hdr->origin_preq_ptr;
+ dat_msg.preq_ptr = msg_hdr->target_preq_ptr;
+ win = MPIDI_CH4U_REQUEST(origin_req, req->areq.win_ptr);
+ mpi_errno = MPIDI_NM_am_isend_reply(MPIDI_CH4U_win_to_context(win),
+ MPIDI_CH4U_REQUEST(origin_req, rank),
+ MPIDI_CH4U_ACC_DAT_REQ,
+ &dat_msg, sizeof(dat_msg),
+ MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_addr),
+ MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_count),
+ MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_datatype),
+ rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dtype_release_if_not_builtin(MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_datatype));
+
+ *target_cmpl_cb = NULL;
+ *req = NULL;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_IOV_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_iov_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_iov_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb *
+ target_cmpl_cb, MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq, *origin_req;
+ MPIDI_CH4U_get_acc_iov_ack_msg_t *msg_hdr = (MPIDI_CH4U_get_acc_iov_ack_msg_t *) am_hdr;
+ MPIDI_CH4U_get_acc_dat_msg_t dat_msg;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_IOV_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_IOV_ACK_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+
+ origin_req = (MPIR_Request *) msg_hdr->origin_preq_ptr;
+ dat_msg.preq_ptr = msg_hdr->target_preq_ptr;
+ win = MPIDI_CH4U_REQUEST(origin_req, req->areq.win_ptr);
+ mpi_errno = MPIDI_NM_am_isend_reply(MPIDI_CH4U_win_to_context(win),
+ MPIDI_CH4U_REQUEST(origin_req, rank),
+ MPIDI_CH4U_GET_ACC_DAT_REQ,
+ &dat_msg, sizeof(dat_msg),
+ MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_addr),
+ MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_count),
+ MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_datatype),
+ rreq);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dtype_release_if_not_builtin(MPIDI_CH4U_REQUEST(origin_req, req->areq.origin_datatype));
+
+ *target_cmpl_cb = NULL;
+ *req = NULL;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_IOV_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_put_data_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_put_data_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ MPIDI_CH4U_put_dat_msg_t *msg_hdr = (MPIDI_CH4U_put_dat_msg_t *) am_hdr;
+ MPIR_Win *win;
+ struct iovec *iov;
+ uintptr_t base;
+ int i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PUT_DATA_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PUT_DATA_TARGET_MSG_CB);
+
+ rreq = (MPIR_Request *) msg_hdr->preq_ptr;
+ win = MPIDI_CH4U_REQUEST(rreq, req->preq.win_ptr);
+ base = MPIDI_CH4I_win_base_at_target(win);
+
+ /* Adjust the target addresses using the window base address */
+ iov = (struct iovec *) MPIDI_CH4U_REQUEST(rreq, req->preq.dt_iov);
+ for (i = 0; i < MPIDI_CH4U_REQUEST(rreq, req->preq.n_iov); i++)
+ iov[i].iov_base = (char *) iov[i].iov_base + base;
+
+ *data = MPIDI_CH4U_REQUEST(rreq, req->preq.dt_iov);
+ *is_contig = 0;
+ *p_data_sz = MPIDI_CH4U_REQUEST(rreq, req->preq.n_iov);
+ *req = rreq;
+ *target_cmpl_cb = MPIDI_put_target_cmpl_cb;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PUT_DATA_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_data_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_data_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ MPIDI_CH4U_acc_dat_msg_t *msg_hdr = (MPIDI_CH4U_acc_dat_msg_t *) am_hdr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_DATA_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_DATA_TARGET_MSG_CB);
+
+ rreq = (MPIR_Request *) msg_hdr->preq_ptr;
+ MPIDI_handle_acc_data(data, p_data_sz, is_contig, rreq);
+
+ *req = rreq;
+ *target_cmpl_cb = MPIDI_acc_target_cmpl_cb;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_DATA_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_data_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_data_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq;
+ MPIDI_CH4U_get_acc_dat_msg_t *msg_hdr = (MPIDI_CH4U_get_acc_dat_msg_t *) am_hdr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_DATA_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_DATA_TARGET_MSG_CB);
+
+ rreq = (MPIR_Request *) msg_hdr->preq_ptr;
+ MPIDI_handle_acc_data(data, p_data_sz, is_contig, rreq);
+
+ *req = rreq;
+ *target_cmpl_cb = MPIDI_get_acc_target_cmpl_cb;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_DATA_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_cswap_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_cswap_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ size_t data_sz;
+ MPIR_Win *win;
+ uintptr_t base;
+ size_t offset;
+
+ int dt_contig;
+ void *p_data;
+
+ MPIDI_CH4U_cswap_req_msg_t *msg_hdr = (MPIDI_CH4U_cswap_req_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CSWAP_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CSWAP_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+ *req = rreq;
+
+ *target_cmpl_cb = MPIDI_cswap_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(rreq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ MPIDI_Datatype_check_contig_size(msg_hdr->datatype, 1, dt_contig, data_sz);
+ *is_contig = dt_contig;
+
+ MPL_HASH_FIND(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ &msg_hdr->win_id, sizeof(uint64_t), win);
+ MPIR_Assert(win);
+
+ base = MPIDI_CH4I_win_base_at_target(win);
+ offset = win->disp_unit * msg_hdr->target_disp;
+
+ MPIDI_CH4U_REQUEST(*req, req->creq.win_ptr) = win;
+ MPIDI_CH4U_REQUEST(*req, req->creq.creq_ptr) = msg_hdr->req_ptr;
+ MPIDI_CH4U_REQUEST(*req, req->creq.datatype) = msg_hdr->datatype;
+ MPIDI_CH4U_REQUEST(*req, req->creq.addr) = offset + base;
+ MPIDI_CH4U_REQUEST(*req, rank) = msg_hdr->src_rank;
+
+ MPIR_Assert(dt_contig == 1);
+ p_data = MPL_malloc(data_sz * 2);
+ MPIR_Assert(p_data);
+
+ *p_data_sz = data_sz * 2;
+ *data = p_data;
+ MPIDI_CH4U_REQUEST(*req, req->creq.data) = p_data;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CSWAP_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ size_t data_sz;
+ void *p_data = NULL;
+ struct iovec *iov, *dt_iov;
+ MPIR_Win *win;
+ uintptr_t base;
+ size_t offset;
+ int i;
+
+ MPIDI_CH4U_acc_req_msg_t *msg_hdr = (MPIDI_CH4U_acc_req_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+ *req = rreq;
+
+ MPIDI_Datatype_check_size(msg_hdr->origin_datatype, msg_hdr->origin_count, data_sz);
+ if (data_sz) {
+ p_data = MPL_malloc(data_sz);
+ MPIR_Assert(p_data);
+ }
+
+ *target_cmpl_cb = MPIDI_acc_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(rreq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ if (is_contig) {
+ *is_contig = 1;
+ *p_data_sz = data_sz;
+ *data = p_data;
+ }
+
+ MPL_HASH_FIND(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ &msg_hdr->win_id, sizeof(uint64_t), win);
+ MPIR_Assert(win);
+
+ base = MPIDI_CH4I_win_base_at_target(win);
+ offset = win->disp_unit * msg_hdr->target_disp;
+
+ MPIDI_CH4U_REQUEST(*req, req->areq.win_ptr) = win;
+ MPIDI_CH4U_REQUEST(*req, req->areq.req_ptr) = msg_hdr->req_ptr;
+ MPIDI_CH4U_REQUEST(*req, req->areq.origin_datatype) = msg_hdr->origin_datatype;
+ MPIDI_CH4U_REQUEST(*req, req->areq.target_datatype) = msg_hdr->target_datatype;
+ MPIDI_CH4U_REQUEST(*req, req->areq.origin_count) = msg_hdr->origin_count;
+ MPIDI_CH4U_REQUEST(*req, req->areq.target_count) = msg_hdr->target_count;
+ MPIDI_CH4U_REQUEST(*req, req->areq.target_addr) = (void *) (offset + base);
+ MPIDI_CH4U_REQUEST(*req, req->areq.op) = msg_hdr->op;
+ MPIDI_CH4U_REQUEST(*req, req->areq.data) = p_data;
+ MPIDI_CH4U_REQUEST(*req, req->areq.n_iov) = msg_hdr->n_iov;
+ MPIDI_CH4U_REQUEST(*req, req->areq.data_sz) = msg_hdr->result_data_sz;
+ MPIDI_CH4U_REQUEST(*req, rank) = msg_hdr->src_rank;
+
+ if (!msg_hdr->n_iov) {
+ MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov) = NULL;
+ goto fn_exit;
+ }
+
+ dt_iov = (struct iovec *) MPL_malloc(sizeof(struct iovec) * msg_hdr->n_iov);
+ MPIR_Assert(dt_iov);
+
+ iov = (struct iovec *) ((char *) msg_hdr + sizeof(*msg_hdr));
+ for (i = 0; i < msg_hdr->n_iov; i++) {
+ dt_iov[i].iov_base = (char *) iov[i].iov_base + base + offset;
+ dt_iov[i].iov_len = iov[i].iov_len;
+ }
+ MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov) = dt_iov;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_acc_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_TARGET_MSG_CB);
+
+ /* the same handling processing as ACC except the completion handler function. */
+ mpi_errno =
+ MPIDI_acc_target_msg_cb(handler_id, am_hdr, data, p_data_sz, is_contig, target_cmpl_cb,
+ req);
+
+ *target_cmpl_cb = MPIDI_get_acc_target_cmpl_cb;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_iov_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_acc_iov_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ struct iovec *dt_iov;
+ MPIR_Win *win;
+ uintptr_t base;
+ size_t offset;
+
+ MPIDI_CH4U_acc_req_msg_t *msg_hdr = (MPIDI_CH4U_acc_req_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_ACC_IOV_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_ACC_IOV_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+ *req = rreq;
+
+ MPL_HASH_FIND(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ &msg_hdr->win_id, sizeof(uint64_t), win);
+ MPIR_Assert(win);
+
+ base = MPIDI_CH4I_win_base_at_target(win);
+ offset = win->disp_unit * msg_hdr->target_disp;
+
+ MPIDI_CH4U_REQUEST(*req, req->areq.win_ptr) = win;
+ MPIDI_CH4U_REQUEST(*req, req->areq.req_ptr) = msg_hdr->req_ptr;
+ MPIDI_CH4U_REQUEST(*req, req->areq.origin_datatype) = msg_hdr->origin_datatype;
+ MPIDI_CH4U_REQUEST(*req, req->areq.target_datatype) = msg_hdr->target_datatype;
+ MPIDI_CH4U_REQUEST(*req, req->areq.origin_count) = msg_hdr->origin_count;
+ MPIDI_CH4U_REQUEST(*req, req->areq.target_count) = msg_hdr->target_count;
+ MPIDI_CH4U_REQUEST(*req, req->areq.target_addr) = (void *) (offset + base);
+ MPIDI_CH4U_REQUEST(*req, req->areq.op) = msg_hdr->op;
+ MPIDI_CH4U_REQUEST(*req, req->areq.n_iov) = msg_hdr->n_iov;
+ MPIDI_CH4U_REQUEST(*req, req->areq.data_sz) = msg_hdr->result_data_sz;
+ MPIDI_CH4U_REQUEST(*req, rank) = msg_hdr->src_rank;
+
+ dt_iov = (struct iovec *) MPL_malloc(sizeof(struct iovec) * msg_hdr->n_iov);
+ MPIDI_CH4U_REQUEST(rreq, req->areq.dt_iov) = dt_iov;
+ MPIR_Assert(dt_iov);
+
+ /* Base adjustment for iov will be done after we get the entire iovs,
+ * at MPIDI_CH4U_acc_data_target_msg_cb */
+ *is_contig = 1;
+ *p_data_sz = sizeof(struct iovec) * msg_hdr->n_iov;
+ *data = (void *) dt_iov;
+
+ *target_cmpl_cb = MPIDI_acc_iov_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(rreq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_ACC_IOV_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_acc_iov_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_acc_iov_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACC_IOV_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACC_IOV_TARGET_MSG_CB);
+
+ /* the same handling processing as ACC except the completion handler function. */
+ mpi_errno = MPIDI_acc_iov_target_msg_cb(handler_id, am_hdr, data,
+ p_data_sz, is_contig, target_cmpl_cb, req);
+
+ *target_cmpl_cb = MPIDI_get_acc_iov_target_cmpl_cb;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACC_IOV_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL;
+ MPIDI_CH4U_get_req_msg_t *msg_hdr = (MPIDI_CH4U_get_req_msg_t *) am_hdr;
+ struct iovec *iov;
+ MPIR_Win *win;
+ uintptr_t base;
+ size_t offset;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_TARGET_MSG_CB);
+
+ rreq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(rreq);
+
+ *req = rreq;
+ *target_cmpl_cb = MPIDI_get_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(rreq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ MPL_HASH_FIND(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ &msg_hdr->win_id, sizeof(uint64_t), win);
+ MPIR_Assert(win);
+
+ base = MPIDI_CH4I_win_base_at_target(win);
+
+ offset = win->disp_unit * msg_hdr->target_disp;
+ MPIDI_CH4U_REQUEST(rreq, req->greq.win_ptr) = win;
+ MPIDI_CH4U_REQUEST(rreq, req->greq.n_iov) = msg_hdr->n_iov;
+ MPIDI_CH4U_REQUEST(rreq, req->greq.addr) = offset + base;
+ MPIDI_CH4U_REQUEST(rreq, req->greq.count) = msg_hdr->count;
+ MPIDI_CH4U_REQUEST(rreq, req->greq.datatype) = msg_hdr->datatype;
+ MPIDI_CH4U_REQUEST(rreq, req->greq.dt_iov) = NULL;
+ MPIDI_CH4U_REQUEST(rreq, req->greq.greq_ptr) = msg_hdr->greq_ptr;
+ MPIDI_CH4U_REQUEST(rreq, rank) = msg_hdr->src_rank;
+
+ if (msg_hdr->n_iov) {
+ iov = (struct iovec *) MPL_malloc(msg_hdr->n_iov * sizeof(*iov));
+ MPIR_Assert(iov);
+
+ *data = (void *) iov;
+ *is_contig = 1;
+ *p_data_sz = msg_hdr->n_iov * sizeof(*iov);
+ MPIDI_CH4U_REQUEST(rreq, req->greq.dt_iov) = iov;
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_get_ack_target_msg_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_get_ack_target_msg_cb(int handler_id, void *am_hdr,
+ void **data,
+ size_t * p_data_sz,
+ int *is_contig,
+ MPIDIG_am_target_cmpl_cb * target_cmpl_cb,
+ MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *rreq = NULL, *greq;
+ size_t data_sz;
+
+ int dt_contig, n_iov;
+ MPI_Aint dt_true_lb, last, num_iov;
+ MPIR_Datatype *dt_ptr;
+ MPID_Segment *segment_ptr;
+
+ MPIDI_CH4U_get_ack_msg_t *msg_hdr = (MPIDI_CH4U_get_ack_msg_t *) am_hdr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_GET_ACK_TARGET_MSG_CB);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_GET_ACK_TARGET_MSG_CB);
+
+ greq = MPIDI_CH4I_am_request_create(MPIR_REQUEST_KIND__RMA, 1);
+ MPIR_Assert(greq);
+ *req = greq;
+
+ rreq = (MPIR_Request *) msg_hdr->greq_ptr;
+ MPIR_Assert(rreq->kind == MPIR_REQUEST_KIND__RMA);
+ MPIDI_CH4U_REQUEST(greq, req->greq.greq_ptr) = (uint64_t) rreq;
+
+ if (MPIDI_CH4U_REQUEST(rreq, req->greq.dt_iov)) {
+ MPL_free(MPIDI_CH4U_REQUEST(rreq, req->greq.dt_iov));
+ }
+
+ *target_cmpl_cb = MPIDI_get_ack_target_cmpl_cb;
+ MPIDI_CH4U_REQUEST(greq, req->seq_no) = OPA_fetch_and_add_int(&MPIDI_CH4_Global.nxt_seq_no, 1);
+
+ MPIDI_Datatype_get_info(MPIDI_CH4U_REQUEST(rreq, req->greq.count),
+ MPIDI_CH4U_REQUEST(rreq, req->greq.datatype),
+ dt_contig, data_sz, dt_ptr, dt_true_lb);
+
+ *is_contig = dt_contig;
+
+ if (dt_contig) {
+ *p_data_sz = data_sz;
+ *data = (char *) (MPIDI_CH4U_REQUEST(rreq, req->greq.addr) + dt_true_lb);
+ }
+ else {
+ segment_ptr = MPIDU_Segment_alloc();
+ MPIR_Assert(segment_ptr);
+
+ MPIDU_Segment_init((void *) MPIDI_CH4U_REQUEST(rreq, req->greq.addr),
+ MPIDI_CH4U_REQUEST(rreq, req->greq.count),
+ MPIDI_CH4U_REQUEST(rreq, req->greq.datatype), segment_ptr, 0);
+ last = data_sz;
+ MPIDU_Segment_count_contig_blocks(segment_ptr, 0, &last, &num_iov);
+ n_iov = (int) num_iov;
+ MPIR_Assert(n_iov > 0);
+ MPIDI_CH4U_REQUEST(rreq, req->iov) =
+ (struct iovec *) MPL_malloc(n_iov * sizeof(struct iovec));
+ MPIR_Assert(MPIDI_CH4U_REQUEST(rreq, req->iov));
+
+ last = data_sz;
+ MPIDU_Segment_pack_vector(segment_ptr, 0, &last, MPIDI_CH4U_REQUEST(rreq, req->iov),
+ &n_iov);
+ MPIR_Assert(last == (MPI_Aint) data_sz);
+ *data = MPIDI_CH4U_REQUEST(rreq, req->iov);
+ *p_data_sz = n_iov;
+ MPIDI_CH4U_REQUEST(rreq, req->status) |= MPIDI_CH4U_REQ_RCV_NON_CONTIG;
+ MPL_free(segment_ptr);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_GET_ACK_TARGET_MSG_CB);
+ return mpi_errno;
+}
+
+#endif /* CH4R_RMA_TARGET_CALLBACKS_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_symheap.h b/src/mpid/ch4/src/ch4r_symheap.h
new file mode 100644
index 0000000..6df0a3d
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_symheap.h
@@ -0,0 +1,260 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_SYMHEAP_H_INCLUDED
+#define CH4R_SYMHEAP_H_INCLUDED
+
+#include <mpichconf.h>
+
+#include <opa_primitives.h>
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif /* HAVE_SYS_MMAN_H */
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif /* HAVE_SYS_TIME_H */
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif /* HAVE_SYS_STAT_H */
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif /* HAVE_FCNTL_H */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif /* HAVE_STDINT_H */
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_get_mapsize
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline size_t MPIDI_CH4R_get_mapsize(size_t size, size_t * psz)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_GET_MAPSIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_GET_MAPSIZE);
+
+ long page_sz = sysconf(_SC_PAGESIZE);
+ size_t mapsize = (size + (page_sz - 1)) & (~(page_sz - 1));
+ *psz = page_sz;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_GET_MAPSIZE);
+ return mapsize;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_check_maprange_ok
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_check_maprange_ok(void *start, size_t size)
+{
+ int rc = 0;
+ int ret = 0;
+ size_t page_sz;
+ size_t mapsize = MPIDI_CH4R_get_mapsize(size, &page_sz);
+ size_t i, num_pages = mapsize / page_sz;
+ char *ptr = (char *) start;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_CHECK_MAPRANGE_OK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_CHECK_MAPRANGE_OK);
+
+ for (i = 0; i < num_pages; i++) {
+ rc = msync(ptr, page_sz, 0);
+
+ if (rc == -1) {
+ if (errno != ENOMEM)
+ goto fn_fail;
+ ptr += page_sz;
+ }
+ else
+ goto fn_exit;
+ }
+
+ fn_fail:
+ ret = 1;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_CHECK_MAPRANGE_OK);
+ return ret;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_generate_random_addr
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline void *MPIDI_CH4R_generate_random_addr(size_t size)
+{
+ /* starting position for pointer to map
+ * This is not generic, probably only works properly on Linux
+ * but it's not fatal since we bail after a fixed number of iterations
+ */
+#define MPIDI_CH4I_MAP_POINTER ((random_unsigned&((0x00006FFFFFFFFFFF&(~(page_sz-1)))|0x0000600000000000)))
+ uintptr_t map_pointer;
+#ifdef USE_SYM_HEAP
+ char random_state[256];
+ size_t page_sz;
+ uint64_t random_unsigned;
+ size_t mapsize = MPIDI_CH4R_get_mapsize(size, &page_sz);
+ struct timeval ts;
+ int iter = 100;
+ int32_t rh, rl;
+ struct random_data rbuf;
+#endif
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_GENERATE_RANDOM_ADDR);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_GENERATE_RANDOM_ADDR);
+
+#ifndef USE_SYM_HEAP
+ map_pointer = -1ULL;
+ goto fn_exit;
+#else
+
+ /* rbuf must be zero-cleared otherwise it results in SIGSEGV in glibc
+ * (http://stackoverflow.com/questions/4167034/c-initstate-r-crashing) */
+ memset(&rbuf, 0, sizeof(rbuf));
+
+ gettimeofday(&ts, NULL);
+
+ initstate_r(ts.tv_usec, random_state, sizeof(random_state), &rbuf);
+ random_r(&rbuf, &rh);
+ random_r(&rbuf, &rl);
+ random_unsigned = ((uint64_t) rh) << 32 | (uint64_t) rl;
+ map_pointer = MPIDI_CH4I_MAP_POINTER;
+
+ while (MPIDI_CH4R_check_maprange_ok((void *) map_pointer, mapsize) == 0) {
+ random_r(&rbuf, &rh);
+ random_r(&rbuf, &rl);
+ random_unsigned = ((uint64_t) rh) << 32 | (uint64_t) rl;
+ map_pointer = MPIDI_CH4I_MAP_POINTER;
+ iter--;
+
+ if (iter == 0) {
+ map_pointer = -1ULL;
+ goto fn_exit;
+ }
+ }
+
+#endif
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_GENERATE_RANDOM_ADDR);
+ return (void *) map_pointer;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_get_symmetric_heap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_get_symmetric_heap(MPI_Aint size,
+ MPIR_Comm * comm, void **base, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int iter = 100;
+ void *baseP = NULL;
+ size_t mapsize = 0;
+#ifdef USE_SYM_HEAP
+ unsigned test, result;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ size_t page_sz;
+#endif
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_GET_SYMMETRIC_HEAP);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_GET_SYMMETRIC_HEAP);
+
+#ifndef USE_SYM_HEAP
+ iter = 0;
+#else
+
+ mapsize = MPIDI_CH4R_get_mapsize(size, &page_sz);
+
+ struct {
+ uint64_t sz;
+ int loc;
+ } maxloc, maxloc_result;
+
+ maxloc.sz = size;
+ maxloc.loc = comm->rank;
+ mpi_errno = MPIR_Allreduce_impl(&maxloc,
+ &maxloc_result, 1, MPI_LONG_INT, MPI_MAXLOC, comm, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ if (maxloc_result.sz > 0) {
+ result = 0;
+
+ while (!result && --iter != 0) {
+ uintptr_t map_pointer = 0ULL;
+
+ baseP = (void *) -1ULL;
+
+ if (comm->rank == maxloc_result.loc) {
+ map_pointer = (uintptr_t) MPIDI_CH4R_generate_random_addr(mapsize);
+ baseP = mmap((void *) map_pointer,
+ mapsize,
+ PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0);
+ }
+
+ mpi_errno = MPIR_Bcast_impl(&map_pointer,
+ 1, MPI_UNSIGNED_LONG, maxloc_result.loc, comm, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ if (comm->rank != maxloc_result.loc) {
+ int rc = MPIDI_CH4R_check_maprange_ok((void *) map_pointer, mapsize);
+
+ if (rc) {
+ baseP = mmap((void *) map_pointer,
+ mapsize,
+ PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0);
+ }
+ else
+ baseP = (void *) -1ULL;
+ }
+
+ if (mapsize == 0)
+ baseP = (void *) map_pointer;
+
+ test = ((uintptr_t) baseP != -1ULL) ? 1 : 0;
+ mpi_errno = MPIR_Allreduce_impl(&test,
+ &result, 1, MPI_UNSIGNED, MPI_BAND, comm, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ if (result == 0 && baseP != (void *) -1ULL)
+ munmap(baseP, mapsize);
+ }
+ }
+ else
+ baseP = NULL;
+#endif
+
+ if (iter == 0) {
+ MPL_DBG_MSG(MPIDI_CH4_DBG_GENERAL, VERBOSE,
+ "WARNING: Win_allocate: Unable to allocate symmetric heap\n");
+ baseP = MPL_malloc(size);
+ MPIR_ERR_CHKANDJUMP((baseP == NULL), mpi_errno, MPI_ERR_BUFFER, "**bufnull");
+ MPIDI_CH4U_WIN(win, mmap_sz) = -1ULL;
+ MPIDI_CH4U_WIN(win, mmap_addr) = NULL;
+ }
+ else {
+ MPIDI_CH4U_WIN(win, mmap_sz) = mapsize;
+ MPIDI_CH4U_WIN(win, mmap_addr) = baseP;
+ }
+
+ *base = baseP;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_GET_SYMMETRIC_HEAP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4R_SYMHEAP_H_INCLUDED */
diff --git a/src/mpid/ch4/src/ch4r_win.h b/src/mpid/ch4/src/ch4r_win.h
new file mode 100644
index 0000000..fa161bd
--- /dev/null
+++ b/src/mpid/ch4/src/ch4r_win.h
@@ -0,0 +1,1290 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+#ifndef CH4R_WIN_H_INCLUDED
+#define CH4R_WIN_H_INCLUDED
+
+#include "ch4_impl.h"
+#include "ch4i_util.h"
+#include <opa_primitives.h>
+#include "mpir_info.h"
+#include "mpl_uthash.h"
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif /* HAVE_SYS_MMAN_H */
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_set_info
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_set_info(MPIR_Win * win, MPIR_Info * info)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_SET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_SET_INFO);
+
+ MPIR_Info *curr_ptr;
+ char *value, *token, *savePtr;
+ int save_ordering;
+
+ curr_ptr = info->next;
+
+ while (curr_ptr) {
+ if (!strcmp(curr_ptr->key, "no_locks")) {
+ if (!strcmp(curr_ptr->value, "true"))
+ MPIDI_CH4U_WIN(win, info_args).no_locks = 1;
+ else
+ MPIDI_CH4U_WIN(win, info_args).no_locks = 0;
+ }
+ else if (!strcmp(curr_ptr->key, "accumulate_ordering")) {
+ save_ordering = MPIDI_CH4U_WIN(win, info_args).accumulate_ordering;
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ordering = 0;
+ value = curr_ptr->value;
+ token = (char *) strtok_r(value, ",", &savePtr);
+
+ while (token) {
+ if (!memcmp(token, "rar", 3))
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ordering =
+ (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering |
+ MPIDI_CH4I_ACCU_ORDER_RAR);
+ else if (!memcmp(token, "raw", 3))
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ordering =
+ (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering |
+ MPIDI_CH4I_ACCU_ORDER_RAW);
+ else if (!memcmp(token, "war", 3))
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ordering =
+ (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering |
+ MPIDI_CH4I_ACCU_ORDER_WAR);
+ else if (!memcmp(token, "waw", 3))
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ordering =
+ (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering |
+ MPIDI_CH4I_ACCU_ORDER_WAW);
+ else
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_ARG, goto fn_fail, "**info");
+
+ token = (char *) strtok_r(NULL, ",", &savePtr);
+ }
+
+ if (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering == 0)
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ordering = save_ordering;
+ }
+ else if (!strcmp(curr_ptr->key, "accumulate_ops")) {
+ /* the default setting is MPIDI_ACCU_SAME_OP_NO_OP */
+ if (!strcmp(curr_ptr->value, "same_op"))
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ops = MPIDI_CH4I_ACCU_SAME_OP;
+ }
+
+ curr_ptr = curr_ptr->next;
+ }
+
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_SET_INFO);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_win_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_win_init(MPI_Aint length,
+ int disp_unit,
+ MPIR_Win ** win_ptr,
+ MPIR_Info * info,
+ MPIR_Comm * comm_ptr, int create_flavor, int model)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Win *win = (MPIR_Win *) MPIR_Handle_obj_alloc(&MPIR_Win_mem);
+ MPIDI_CH4U_win_target_t *targets = NULL;
+ int i;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_WIN_INIT);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH4R_WIN_INIT);
+
+ MPIR_CHKPMEM_DECL(1);
+
+ MPIR_ERR_CHKANDSTMT(win == NULL, mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ *win_ptr = win;
+
+ memset(&win->dev.ch4u, 0, sizeof(MPIDI_CH4U_win_t));
+ win->comm_ptr = comm_ptr;
+ MPIR_Comm_add_ref(comm_ptr);
+
+ /* FIXME: per-target structure should be initialized only when user starts
+ * per-target synchronization. */
+ MPIR_CHKPMEM_MALLOC(targets, MPIDI_CH4U_win_target_t *,
+ comm_ptr->local_size * sizeof(MPIDI_CH4U_win_target_t),
+ mpi_errno, "window targets");
+ MPIDI_CH4U_WIN(win, targets) = targets;
+
+ win->errhandler = NULL;
+ win->base = NULL;
+ win->size = length;
+ win->disp_unit = disp_unit;
+ win->create_flavor = (MPIR_Win_flavor_t) create_flavor;
+ win->model = (MPIR_Win_model_t) model;
+ win->copyCreateFlavor = (MPIR_Win_flavor_t) 0;
+ win->copyModel = (MPIR_Win_model_t) 0;
+ win->attributes = NULL;
+ win->comm_ptr = comm_ptr;
+ win->copyDispUnit = 0;
+ win->copySize = 0;
+ MPIDI_CH4U_WIN(win, shared_table) = NULL;
+ if ((info != NULL) && ((int *) info != (int *) MPI_INFO_NULL)) {
+ mpi_errno = MPIDI_CH4R_mpi_win_set_info(win, info);
+ MPIR_Assert(mpi_errno == 0);
+ }
+
+ /* Initialize the info (hint) flags per window */
+ MPIDI_CH4U_WIN(win, info_args).no_locks = 0;
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ordering = (MPIDI_CH4I_ACCU_ORDER_RAR |
+ MPIDI_CH4I_ACCU_ORDER_RAW |
+ MPIDI_CH4I_ACCU_ORDER_WAR |
+ MPIDI_CH4I_ACCU_ORDER_WAW);
+ MPIDI_CH4U_WIN(win, info_args).accumulate_ops = MPIDI_CH4I_ACCU_SAME_OP_NO_OP;
+ MPIDI_CH4U_WIN(win, info_args).same_size = 0;
+ MPIDI_CH4U_WIN(win, info_args).alloc_shared_noncontig = 0;
+ MPIDI_CH4U_WIN(win, mmap_sz) = 0;
+ MPIDI_CH4U_WIN(win, mmap_addr) = NULL;
+
+ MPIR_cc_set(&MPIDI_CH4U_WIN(win, local_cmpl_cnts), 0);
+ MPIR_cc_set(&MPIDI_CH4U_WIN(win, remote_cmpl_cnts), 0);
+ for (i = 0; i < win->comm_ptr->local_size; i++) {
+ MPIR_cc_set(&targets[i].local_cmpl_cnts, 0);
+ MPIR_cc_set(&targets[i].remote_cmpl_cnts, 0);
+ }
+
+ MPIDI_CH4U_WIN(win, win_id) = MPIDI_CH4U_generate_win_id(comm_ptr);
+ MPL_HASH_ADD(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash,
+ dev.ch4u.win_id, sizeof(uint64_t), win);
+
+ MPIR_CHKPMEM_COMMIT();
+ fn_exit:
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH4R_WIN_INIT);
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4I_fill_ranks_in_win_grp
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4I_fill_ranks_in_win_grp(MPIR_Win * win_ptr, MPIR_Group * group_ptr,
+ int *ranks_in_win_grp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i, *ranks_in_grp;
+ MPIR_Group *win_grp_ptr;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4I_FILL_RANKS_IN_WIN_GRP);
+ MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH4I_FILL_RANKS_IN_WIN_GRP);
+
+ ranks_in_grp = (int *) MPL_malloc(group_ptr->size * sizeof(int));
+ MPIR_Assert(ranks_in_grp);
+ for (i = 0; i < group_ptr->size; i++)
+ ranks_in_grp[i] = i;
+
+ mpi_errno = MPIR_Comm_group_impl(win_ptr->comm_ptr, &win_grp_ptr);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Group_translate_ranks_impl(group_ptr, group_ptr->size,
+ ranks_in_grp, win_grp_ptr, ranks_in_win_grp);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Group_free_impl(win_grp_ptr);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPL_free(ranks_in_grp);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH4I_FILL_RANKS_IN_WIN_GRP);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_start
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_start(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_START);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_START);
+
+ MPIDI_CH4U_EPOCH_CHECK_TYPE(win, mpi_errno, goto fn_fail);
+
+ MPIR_Group_add_ref(group);
+
+ MPIDI_CH4R_PROGRESS_WHILE(group->size != (int) MPIDI_CH4U_WIN(win, sync).pw.count);
+ MPIDI_CH4U_WIN(win, sync).pw.count = 0;
+
+ MPIR_ERR_CHKANDJUMP((MPIDI_CH4U_WIN(win, sync).sc.group != NULL),
+ mpi_errno, MPI_ERR_GROUP, "**group");
+ MPIDI_CH4U_WIN(win, sync).sc.group = group;
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_START;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_START);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_complete
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_complete(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+ int index, peer;
+ MPIR_Group *group;
+ int *ranks_in_win_grp;
+ int all_local_completed = 0;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_COMPLETE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_COMPLETE);
+
+ MPIDI_CH4U_EPOCH_START_CHECK2(win, mpi_errno, goto fn_fail);
+
+ group = MPIDI_CH4U_WIN(win, sync).sc.group;
+ MPIR_Assert(group != NULL);
+
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+
+ ranks_in_win_grp = (int *) MPL_malloc(sizeof(int) * group->size);
+ MPIR_Assert(ranks_in_win_grp);
+
+ mpi_errno = MPIDI_CH4I_fill_ranks_in_win_grp(win, group, ranks_in_win_grp);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* FIXME: now we simply set per-target counters for PSCW, can it be optimized ? */
+ do {
+ MPIDI_CH4R_PROGRESS();
+ MPIDI_win_check_group_local_completed(win, ranks_in_win_grp, group->size,
+ &all_local_completed);
+ } while (all_local_completed != 1);
+
+ for (index = 0; index < group->size; ++index) {
+ peer = ranks_in_win_grp[index];
+ mpi_errno = MPIDI_NM_am_send_hdr(peer, win->comm_ptr,
+ MPIDI_CH4U_WIN_COMPLETE, &msg, sizeof(msg), NULL);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+ }
+
+ MPL_free(ranks_in_win_grp);
+ MPIDI_CH4U_EPOCH_TARGET_EVENT(win);
+ MPIR_Group_release(MPIDI_CH4U_WIN(win, sync).sc.group);
+ MPIDI_CH4U_WIN(win, sync).sc.group = NULL;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_COMPLETE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_post
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_post(MPIR_Group * group, int assert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+ int index, peer;
+ int *ranks_in_win_grp;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_POST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_POST);
+
+ MPIDI_CH4U_EPOCH_POST_CHECK(win, mpi_errno, goto fn_fail);
+
+ MPIR_Group_add_ref(group);
+ MPIR_ERR_CHKANDJUMP((MPIDI_CH4U_WIN(win, sync).pw.group != NULL),
+ mpi_errno, MPI_ERR_GROUP, "**group");
+
+ MPIDI_CH4U_WIN(win, sync).pw.group = group;
+ MPIR_Assert(group != NULL);
+
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+
+ ranks_in_win_grp = (int *) MPL_malloc(sizeof(int) * group->size);
+ MPIR_Assert(ranks_in_win_grp);
+
+ mpi_errno = MPIDI_CH4I_fill_ranks_in_win_grp(win, group, ranks_in_win_grp);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_POP(mpi_errno);
+
+ for (index = 0; index < group->size; ++index) {
+ peer = ranks_in_win_grp[index];
+ mpi_errno = MPIDI_NM_am_send_hdr(peer, win->comm_ptr,
+ MPIDI_CH4U_WIN_POST, &msg, sizeof(msg), NULL);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+ }
+
+ MPL_free(ranks_in_win_grp);
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_POST;
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_POST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_wait
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_wait(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Group *group;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_WAIT);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_WAIT);
+
+ MPIDI_CH4U_EPOCH_TARGET_CHECK(win, MPIDI_CH4U_EPOTYPE_POST, mpi_errno, goto fn_fail);
+ group = MPIDI_CH4U_WIN(win, sync).pw.group;
+ MPIDI_CH4R_PROGRESS_WHILE(group->size != (int) MPIDI_CH4U_WIN(win, sync).sc.count);
+
+ MPIDI_CH4U_WIN(win, sync).sc.count = 0;
+ MPIDI_CH4U_WIN(win, sync).pw.group = NULL;
+ MPIR_Group_release(group);
+ MPIDI_CH4U_EPOCH_ORIGIN_EVENT(win);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_WAIT);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_test
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_test(MPIR_Win * win, int *flag)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_TEST);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_TEST);
+
+ MPIDI_CH4U_EPOCH_TARGET_CHECK(win, MPIDI_CH4U_EPOTYPE_POST, mpi_errno, goto fn_fail);
+
+ MPIR_Group *group;
+ group = MPIDI_CH4U_WIN(win, sync).pw.group;
+
+ if (group->size == (int) MPIDI_CH4U_WIN(win, sync).sc.count) {
+ MPIDI_CH4U_WIN(win, sync).sc.count = 0;
+ MPIDI_CH4U_WIN(win, sync).pw.group = NULL;
+ *flag = 1;
+ MPIR_Group_release(group);
+ MPIDI_CH4U_EPOCH_ORIGIN_EVENT(win);
+ }
+ else {
+ MPIDI_CH4R_PROGRESS();
+ *flag = 0;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_TEST);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_lock
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_lock(int lock_type, int rank, int assert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ unsigned locked;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_LOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_LOCK);
+
+ MPIDI_CH4U_win_sync_lock *slock = &MPIDI_CH4U_WIN(win, sync).lock;
+ if (rank == MPI_PROC_NULL)
+ goto fn_exit0;
+
+ MPIDI_CH4U_EPOCH_CHECK_TYPE(win, mpi_errno, goto fn_fail);
+
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+ msg.lock_type = lock_type;
+
+ locked = slock->remote.locked + 1;
+ mpi_errno = MPIDI_NM_am_send_hdr(rank, win->comm_ptr,
+ MPIDI_CH4U_WIN_LOCK, &msg, sizeof(msg), NULL);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+ MPIDI_CH4R_PROGRESS_WHILE(slock->remote.locked != locked);
+
+ fn_exit0:
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_LOCK;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_LOCK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_unlock
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_unlock(int rank, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ unsigned unlocked;
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_UNLOCK);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_UNLOCK);
+ if (rank == MPI_PROC_NULL)
+ goto fn_exit0;
+
+ MPIDI_CH4U_EPOCH_ORIGIN_CHECK(win, MPIDI_CH4U_EPOTYPE_LOCK, mpi_errno, return mpi_errno);
+
+ do {
+ MPIDI_CH4R_PROGRESS();
+ } while (MPIR_cc_get(MPIDI_CH4U_WIN_TARGET(win, rank, remote_cmpl_cnts)) != 0);
+
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+ unlocked = MPIDI_CH4U_WIN(win, sync).lock.remote.locked - 1;
+
+ mpi_errno = MPIDI_NM_am_send_hdr(rank, win->comm_ptr,
+ MPIDI_CH4U_WIN_UNLOCK, &msg, sizeof(msg), NULL);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ MPIDI_CH4R_PROGRESS_WHILE(MPIDI_CH4U_WIN(win, sync).lock.remote.locked != unlocked);
+ fn_exit0:
+
+ if (!MPIDI_CH4U_WIN(win, sync).lock.remote.locked) {
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_UNLOCK);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_get_info
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_get_info(MPIR_Win * win, MPIR_Info ** info_p_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_GET_INFO);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_GET_INFO);
+
+ mpi_errno = MPIR_Info_alloc(info_p_p);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+
+ if (MPIDI_CH4U_WIN(win, info_args).no_locks)
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "no_locks", "true");
+ else
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "no_locks", "false");
+
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+
+ {
+#define BUFSIZE 32
+ char buf[BUFSIZE];
+ int c = 0;
+
+ if (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering & MPIDI_CH4I_ACCU_ORDER_RAR)
+ c += snprintf(buf + c, BUFSIZE - c, "%srar", (c > 0) ? "," : "");
+
+ if (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering & MPIDI_CH4I_ACCU_ORDER_RAW)
+ c += snprintf(buf + c, BUFSIZE - c, "%sraw", (c > 0) ? "," : "");
+
+ if (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering & MPIDI_CH4I_ACCU_ORDER_WAR)
+ c += snprintf(buf + c, BUFSIZE - c, "%swar", (c > 0) ? "," : "");
+
+ if (MPIDI_CH4U_WIN(win, info_args).accumulate_ordering & MPIDI_CH4I_ACCU_ORDER_WAW)
+ c += snprintf(buf + c, BUFSIZE - c, "%swaw", (c > 0) ? "," : "");
+
+ if (c == 0) {
+ memcpy(&buf[0], "not set ", 10);
+ }
+
+ MPIR_Info_set_impl(*info_p_p, "accumulate_ordering", buf);
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+#undef BUFSIZE
+ }
+
+ if (MPIDI_CH4U_WIN(win, info_args).accumulate_ops == MPIDI_CH4I_ACCU_SAME_OP)
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "accumulate_ops", "same_op");
+ else
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "accumulate_ops", "same_op_no_op");
+
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+
+ if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
+ if (MPIDI_CH4U_WIN(win, info_args).alloc_shared_noncontig)
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "alloc_shared_noncontig", "true");
+ else
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "alloc_shared_noncontig", "false");
+
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+ }
+ else if (win->create_flavor == MPI_WIN_FLAVOR_ALLOCATE) {
+ if (MPIDI_CH4U_WIN(win, info_args).same_size)
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "same_size", "true");
+ else
+ mpi_errno = MPIR_Info_set_impl(*info_p_p, "same_size", "false");
+
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+ }
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_GET_INFO);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_win_finalize
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_win_finalize(MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int all_completed = 0;
+ MPIR_Win *win = *win_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_WIN_FINALIZE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_WIN_FINALIZE);
+
+ /* All local outstanding OPs should have been completed. */
+ MPIR_Assert(MPIR_cc_get(MPIDI_CH4U_WIN(win, local_cmpl_cnts)) == 0);
+ MPIR_Assert(MPIR_cc_get(MPIDI_CH4U_WIN(win, remote_cmpl_cnts)) == 0);
+
+ /* Make progress till all OPs have been completed */
+ do {
+ int all_local_completed = 0, all_remote_completed = 0;
+
+ MPIDI_CH4R_PROGRESS();
+
+ MPIDI_win_check_all_targets_local_completed(win, &all_local_completed);
+ MPIDI_win_check_all_targets_remote_completed(win, &all_remote_completed);
+
+ /* Local completion counter might be updated later than remote completion
+ * (at request completion), so we need to check it before release entire
+ * window. */
+ all_completed = (MPIR_cc_get(MPIDI_CH4U_WIN(win, local_cmpl_cnts)) == 0) &&
+ (MPIR_cc_get(MPIDI_CH4U_WIN(win, remote_cmpl_cnts)) == 0) &&
+ all_local_completed && all_remote_completed;
+ } while (all_completed != 1);
+
+ MPL_free(MPIDI_CH4U_WIN(win, targets));
+
+ if (win->create_flavor == MPI_WIN_FLAVOR_ALLOCATE && win->base) {
+ if (MPIDI_CH4U_WIN(win, mmap_sz) > 0)
+ munmap(MPIDI_CH4U_WIN(win, mmap_addr), MPIDI_CH4U_WIN(win, mmap_sz));
+ else if (MPIDI_CH4U_WIN(win, mmap_sz) == -1)
+ MPL_free(win->base);
+ }
+
+ if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
+ if (MPIDI_CH4U_WIN(win, mmap_addr))
+ munmap(MPIDI_CH4U_WIN(win, mmap_addr), MPIDI_CH4U_WIN(win, mmap_sz));
+ MPL_free(MPIDI_CH4U_WIN(win, sizes));
+ }
+
+ if (MPIDI_CH4U_WIN(win, lockQ)) {
+ MPL_free(MPIDI_CH4U_WIN(win, lockQ));
+ MPIDI_CH4U_WIN(win, lockQ) = NULL;
+ }
+
+ MPL_HASH_DELETE(dev.ch4u.hash_handle, MPIDI_CH4_Global.win_hash, win);
+
+ if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
+ MPL_free(MPIDI_CH4U_WIN(win, shared_table));
+ }
+
+ MPIR_Comm_release(win->comm_ptr);
+ MPIR_Handle_obj_free(&MPIR_Win_mem, win);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_WIN_FINALIZE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_free
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_free(MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win = *win_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_FREE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_FREE);
+
+ MPIDI_CH4U_EPOCH_FREE_CHECK(win, mpi_errno, goto fn_fail);
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ MPIDI_CH4R_win_finalize(win_ptr);
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_FREE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_fence
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_fence(int massert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_FENCE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_FENCE);
+
+ MPIDI_CH4U_EPOCH_FENCE_CHECK(win, mpi_errno, goto fn_fail);
+ do {
+ MPIDI_CH4R_PROGRESS();
+ } while (MPIR_cc_get(MPIDI_CH4U_WIN(win, local_cmpl_cnts)) != 0);
+ MPIDI_CH4U_EPOCH_FENCE_EVENT(win, massert);
+
+ /*
+ * We always make a barrier even if MPI_MODE_NOPRECEDE is specified.
+ * This is necessary because we no longer defer executions of RMA ops
+ * until synchronization calls as CH3 did. Otherwise, the code like
+ * this won't work correctly (cf. f77/rma/wingetf)
+ *
+ * Rank 0 Rank 1
+ * ---- ----
+ * Store to local mem in window
+ * MPI_Win_fence(MODE_NOPRECEDE) MPI_Win_fence(MODE_NOPRECEDE)
+ * MPI_Get(from rank 1)
+ */
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_FENCE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_create
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_create(void *base,
+ MPI_Aint length,
+ int disp_unit,
+ MPIR_Info * info, MPIR_Comm * comm_ptr,
+ MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_CREATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_CREATE);
+
+ mpi_errno = MPIDI_CH4R_win_init(length,
+ disp_unit,
+ win_ptr,
+ info, comm_ptr, MPI_WIN_FLAVOR_CREATE, MPI_WIN_UNIFIED);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ win = *win_ptr;
+ win->base = base;
+
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_CREATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_attach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_attach(MPIR_Win * win, void *base, MPI_Aint size)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_ATTACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_ATTACH);
+
+ MPIR_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_DYNAMIC), mpi_errno,
+ MPI_ERR_RMA_FLAVOR, goto fn_fail, "**rmaflavor");
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_ATTACH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_allocate_shared
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_allocate_shared(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info_ptr,
+ MPIR_Comm * comm_ptr,
+ void **base_ptr, MPIR_Win ** win_ptr)
+{
+ int i = 0, fd = -1, rc, first = 0, mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ void *baseP = NULL;
+ MPIR_Win *win = NULL;
+ ssize_t total_size = 0LL;
+ MPI_Aint size_out = 0;
+ MPIDI_CH4U_win_shared_info_t *shared_table = NULL;
+ char shm_key[64];
+ void *map_ptr;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_ALLOCATE_SHARED);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_ALLOCATE_SHARED);
+
+ mpi_errno = MPIDI_CH4R_win_init(size, disp_unit, win_ptr, info_ptr, comm_ptr,
+ MPI_WIN_FLAVOR_SHARED, MPI_WIN_UNIFIED);
+
+ win = *win_ptr;
+ MPIDI_CH4U_WIN(win, shared_table) =
+ (MPIDI_CH4U_win_shared_info_t *) MPL_malloc(sizeof(MPIDI_CH4U_win_shared_info_t) *
+ comm_ptr->local_size);
+ shared_table = MPIDI_CH4U_WIN(win, shared_table);
+ shared_table[comm_ptr->rank].size = size;
+ shared_table[comm_ptr->rank].disp_unit = disp_unit;
+
+ mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE,
+ 0,
+ MPI_DATATYPE_NULL,
+ shared_table,
+ sizeof(MPIDI_CH4U_win_shared_info_t),
+ MPI_BYTE, comm_ptr, &errflag);
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ /* No allreduce here because this is a shared memory domain
+ * and should be a relatively small number of processes
+ * and a non performance sensitive API.
+ */
+ for (i = 0; i < comm_ptr->local_size; i++)
+ total_size += shared_table[i].size;
+
+ if (total_size == 0)
+ goto fn_zero;
+
+ sprintf(shm_key, "/mpi-%X-%" PRIx64, MPIDI_CH4_Global.jobid, MPIDI_CH4U_WIN(win, win_id));
+
+ rc = shm_open(shm_key, O_CREAT | O_EXCL | O_RDWR, 0600);
+ first = (rc != -1);
+
+ if (!first) {
+ rc = shm_open(shm_key, O_RDWR, 0);
+
+ if (rc == -1) {
+ shm_unlink(shm_key);
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+ }
+
+ /* Make the addresses symmetric by using MAP_FIXED */
+ size_t page_sz, mapsize;
+
+ mapsize = MPIDI_CH4R_get_mapsize(total_size, &page_sz);
+ fd = rc;
+ rc = ftruncate(fd, mapsize);
+
+ if (rc == -1) {
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+
+ if (comm_ptr->rank == 0) {
+ map_ptr = MPIDI_CH4R_generate_random_addr(mapsize);
+ map_ptr = mmap(map_ptr, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0);
+
+ if (map_ptr == NULL || map_ptr == MAP_FAILED) {
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+
+ mpi_errno = MPIR_Bcast_impl(&map_ptr, 1, MPI_UNSIGNED_LONG, 0, comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ MPIDI_CH4U_WIN(win, mmap_addr) = map_ptr;
+ MPIDI_CH4U_WIN(win, mmap_sz) = mapsize;
+ }
+ else {
+ mpi_errno = MPIR_Bcast_impl(&map_ptr, 1, MPI_UNSIGNED_LONG, 0, comm_ptr, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ rc = MPIDI_CH4R_check_maprange_ok(map_ptr, mapsize);
+ /* If we hit this assert, we need to iterate
+ * trying more addresses
+ */
+ MPIR_Assert(rc == 1);
+ map_ptr = mmap(map_ptr, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0);
+ MPIDI_CH4U_WIN(win, mmap_addr) = map_ptr;
+ MPIDI_CH4U_WIN(win, mmap_sz) = mapsize;
+
+ if (map_ptr == NULL || map_ptr == MAP_FAILED) {
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_NO_MEM, goto fn_fail, "**nomem");
+ }
+ }
+
+ /* Scan for my offset into the buffer */
+ /* Could use exscan if this is expensive at scale */
+ for (i = 0; i < comm_ptr->rank; i++)
+ size_out += shared_table[i].size;
+
+ fn_zero:
+
+ baseP = (size == 0) ? NULL : (void *) ((char *) map_ptr + size_out);
+ win->base = baseP;
+ win->size = size;
+
+ *(void **) base_ptr = (void *) win->base;
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
+
+ if (fd >= 0)
+ close(fd);
+
+ if (first)
+ shm_unlink(shm_key);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_ALLOCATE_SHARED);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_detach(MPIR_Win * win, const void *base)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_DETACH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_DETACH);
+ MPIR_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_DYNAMIC), mpi_errno,
+ MPI_ERR_RMA_FLAVOR, goto fn_fail, "**rmaflavor");
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_DETACH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_shared_query
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_shared_query(MPIR_Win * win,
+ int rank,
+ MPI_Aint * size, int *disp_unit, void *baseptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ uintptr_t base = (uintptr_t) MPIDI_CH4U_WIN(win, mmap_addr);
+ int offset = rank, i;
+ MPIDI_CH4U_win_shared_info_t *shared_table = MPIDI_CH4U_WIN(win, shared_table);
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_SHARED_QUERY);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_SHARED_QUERY);
+
+ if (rank < 0)
+ offset = 0;
+ *size = shared_table[offset].size;
+ *disp_unit = shared_table[offset].disp_unit;
+ if (*size > 0) {
+ for (i = 0; i < offset; i++)
+ base += shared_table[i].size;
+ *(void **) baseptr = (void *) base;
+ }
+ else
+ *(void **) baseptr = NULL;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_SHARED_QUERY);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_allocate
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_allocate(MPI_Aint size,
+ int disp_unit,
+ MPIR_Info * info,
+ MPIR_Comm * comm, void *baseptr, MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+ void *baseP;
+ MPIR_Win *win;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_ALLOCATE);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_ALLOCATE);
+
+ mpi_errno = MPIDI_CH4R_win_init(size, disp_unit, win_ptr, info, comm,
+ MPI_WIN_FLAVOR_ALLOCATE, MPI_WIN_UNIFIED);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ mpi_errno = MPIDI_CH4R_get_symmetric_heap(size, comm, &baseP, *win_ptr);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ win = *win_ptr;
+ win->base = baseP;
+
+ *(void **) baseptr = (void *) win->base;
+ mpi_errno = MPIR_Barrier_impl(comm, &errflag);
+
+ if (mpi_errno != MPI_SUCCESS)
+ goto fn_fail;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_ALLOCATE);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_flush
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_flush(int rank, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ do {
+ MPIDI_CH4R_PROGRESS();
+ } while (MPIR_cc_get(MPIDI_CH4U_WIN_TARGET(win, rank, remote_cmpl_cnts)) != 0);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_flush_local_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_flush_local_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int all_local_completed = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_LOCAL_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_LOCAL_ALL);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ /* FIXME: now we simply set per-target counters for lockall in case
+ * user flushes per target, but this should be optimized. */
+ do {
+ MPIDI_CH4R_PROGRESS();
+ MPIDI_win_check_all_targets_local_completed(win, &all_local_completed);
+ } while (all_local_completed != 1);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_LOCAL_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_unlock_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_unlock_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_UNLOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_UNLOCK_ALL);
+ int i;
+ MPIDI_CH4U_win_lock_info *lockQ;
+ int all_remote_completed = 0;
+ MPIDI_CH4U_EPOCH_ORIGIN_CHECK(win, MPIDI_CH4U_EPOTYPE_LOCK_ALL, mpi_errno, goto fn_exit);
+
+ /* FIXME: now we simply set per-target counters for lockall in case
+ * user flushes per target, but this should be optimized. */
+ do {
+ MPIDI_CH4R_PROGRESS();
+ MPIDI_win_check_all_targets_remote_completed(win, &all_remote_completed);
+ } while (all_remote_completed != 1);
+
+ MPIR_Assert(MPIDI_CH4U_WIN(win, lockQ) != NULL);
+ lockQ = (MPIDI_CH4U_win_lock_info *) MPIDI_CH4U_WIN(win, lockQ);
+
+ for (i = 0; i < win->comm_ptr->local_size; i++) {
+
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+
+ lockQ[i].done = 0;
+ lockQ[i].peer = i;
+ lockQ[i].win = win;
+
+ mpi_errno = MPIDI_NM_am_send_hdr(i, win->comm_ptr,
+ MPIDI_CH4U_WIN_UNLOCKALL, &msg, sizeof(msg), NULL);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ if (MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked == 1)
+ lockQ[i].done = 1;
+ }
+
+ MPIDI_CH4R_PROGRESS_WHILE(MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked);
+
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+ MPIDI_CH4U_WIN(win, sync).target_epoch_type = MPIDI_CH4U_EPOTYPE_NONE;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_UNLOCK_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_create_dynamic
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_create_dynamic(MPIR_Info * info,
+ MPIR_Comm * comm, MPIR_Win ** win_ptr)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int rc = MPI_SUCCESS;
+ MPIR_Errflag_t errflag = MPIR_ERR_NONE;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_CREATE_DYNAMIC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_CREATE_DYNAMIC);
+
+ MPIR_Win *win;
+
+ rc = MPIDI_CH4R_win_init(0, 1, win_ptr, info, comm, MPI_WIN_FLAVOR_DYNAMIC, MPI_WIN_UNIFIED);
+
+ if (rc != MPI_SUCCESS)
+ goto fn_fail;
+
+ win = *win_ptr;
+ win->base = MPI_BOTTOM;
+
+
+ if (rc != MPI_SUCCESS)
+ goto fn_fail;
+
+ mpi_errno = MPIR_Barrier_impl(comm, &errflag);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_CREATE_DYNAMIC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_flush_local
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_flush_local(int rank, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_LOCAL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_LOCAL);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ do {
+ MPIDI_CH4R_PROGRESS();
+ } while (MPIR_cc_get(MPIDI_CH4U_WIN_TARGET(win, rank, local_cmpl_cnts)) != 0);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_LOCAL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_sync
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_sync(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_SYNC);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_SYNC);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+ OPA_read_write_barrier();
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_SYNC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_flush_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_flush_all(MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int all_remote_completed = 0;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_ALL);
+
+ MPIDI_CH4U_EPOCH_LOCK_CHECK(win, mpi_errno, goto fn_fail);
+
+ do {
+ MPIDI_CH4R_PROGRESS();
+
+ /* FIXME: now we simply set per-target counters for lockall in case
+ * user flushes per target, but this should be optimized. */
+ MPIDI_win_check_all_targets_remote_completed(win, &all_remote_completed);
+ } while (all_remote_completed != 1);
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_FLUSH_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDI_CH4R_mpi_win_lock_all
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIDI_CH4R_mpi_win_lock_all(int assert, MPIR_Win * win)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH4R_MPI_WIN_LOCK_ALL);
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_CH4R_MPI_WIN_LOCK_ALL);
+
+ MPIDI_CH4U_EPOCH_CHECK_TYPE(win, mpi_errno, goto fn_fail);
+
+ int size;
+ size = win->comm_ptr->local_size;
+
+ if (!MPIDI_CH4U_WIN(win, lockQ)) {
+ MPIDI_CH4U_WIN(win, lockQ) =
+ (MPIDI_CH4U_win_lock_info *) MPL_calloc(size, sizeof(MPIDI_CH4U_win_lock_info));
+ MPIR_Assert(MPIDI_CH4U_WIN(win, lockQ) != NULL);
+ }
+
+ MPIDI_CH4U_win_lock_info *lockQ;
+ lockQ = (MPIDI_CH4U_win_lock_info *) MPIDI_CH4U_WIN(win, lockQ);
+ int i;
+
+ for (i = 0; i < size; i++) {
+ MPIDI_CH4U_win_cntrl_msg_t msg;
+ msg.win_id = MPIDI_CH4U_WIN(win, win_id);
+ msg.origin_rank = win->comm_ptr->rank;
+ msg.lock_type = MPI_LOCK_SHARED;
+
+ lockQ[i].done = 0;
+ lockQ[i].peer = i;
+ lockQ[i].win = win;
+ lockQ[i].lock_type = MPI_LOCK_SHARED;
+
+ mpi_errno = MPIDI_NM_am_send_hdr(i, win->comm_ptr,
+ MPIDI_CH4U_WIN_LOCKALL, &msg, sizeof(msg), NULL);
+ if (mpi_errno != MPI_SUCCESS)
+ MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, goto fn_fail, "**rmasync");
+
+ if (MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked == 1)
+ lockQ[i].done = 1;
+ }
+
+ MPIDI_CH4R_PROGRESS_WHILE(size != (int) MPIDI_CH4U_WIN(win, sync).lock.remote.allLocked);
+ MPIDI_CH4U_WIN(win, sync).origin_epoch_type = MPIDI_CH4U_EPOTYPE_LOCK_ALL;
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_CH4R_MPI_WIN_LOCK_ALL);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#endif /* CH4R_WIN_H_INCLUDED */
diff --git a/src/mpid/ch4/src/mpid_ch4_net_array.c.in b/src/mpid/ch4/src/mpid_ch4_net_array.c.in
new file mode 100644
index 0000000..c07b7a6
--- /dev/null
+++ b/src/mpid/ch4/src/mpid_ch4_net_array.c.in
@@ -0,0 +1,30 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include <mpidimpl.h>
+
+/* *INDENT-OFF* */
+/* forward declaration of funcs structs defined in network modules */
+extern MPIDI_NM_funcs_t @ch4_nets_func_decl@;
+extern MPIDI_NM_native_funcs_t @ch4_nets_native_func_decl@;
+
+#ifndef NETMOD_DIRECT
+MPIDI_NM_funcs_t *MPIDI_NM_funcs[@ch4_nets_array_sz@] = { @ch4_nets_func_array@ };
+MPIDI_NM_native_funcs_t *MPIDI_NM_native_funcs[@ch4_nets_array_sz@] =
+ { @ch4_nets_native_func_array@ };
+#else
+MPIDI_NM_funcs_t *MPIDI_NM_funcs[@ch4_nets_array_sz@] = { 0 };
+MPIDI_NM_native_funcs_t *MPIDI_NM_native_funcs[@ch4_nets_array_sz@] = { 0 };
+#endif
+int MPIDI_num_netmods = @ch4_nets_array_sz@;
+char MPIDI_NM_strings[@ch4_nets_array_sz@][MPIDI_MAX_NETMOD_STRING_LEN] =
+ { @ch4_nets_strings@ };
+/* *INDENT-ON* */
diff --git a/src/mpid/ch4/src/mpid_ch4_shm_array.c.in b/src/mpid/ch4/src/mpid_ch4_shm_array.c.in
new file mode 100644
index 0000000..3649d45
--- /dev/null
+++ b/src/mpid/ch4/src/mpid_ch4_shm_array.c.in
@@ -0,0 +1,34 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ */
+
+#include <mpidimpl.h>
+
+#ifdef MPIDI_BUILD_CH4_SHM
+
+/* *INDENT-OFF* */
+/* forward declaration of funcs structs defined in network modules */
+extern MPIDI_SHM_funcs_t @ch4_shm_func_decl@;
+extern MPIDI_SHM_native_funcs_t @ch4_shm_native_func_decl@;
+
+#ifndef SHM_DIRECT
+MPIDI_SHM_funcs_t *MPIDI_SHM_funcs[@ch4_shm_array_sz@] = { @ch4_shm_func_array@ };
+MPIDI_SHM_native_funcs_t *MPIDI_SHM_native_funcs[@ch4_shm_array_sz@] =
+ { @ch4_shm_native_func_array@ };
+#else
+MPIDI_SHM_funcs_t *MPIDI_SHM_funcs[@ch4_shm_array_sz@] = { 0 };
+MPIDI_SHM_native_funcs_t *MPIDI_SHM_native_funcs[@ch4_shm_array_sz@] = { 0 };
+#endif
+int MPIDI_num_shms = @ch4_shm_array_sz@;
+char MPIDI_SHM_strings[@ch4_shm_array_sz@][MPIDI_MAX_SHM_STRING_LEN] =
+ { @ch4_shm_strings@ };
+/* *INDENT-ON* */
+
+#endif
diff --git a/src/mpid/ch4/subconfigure.m4 b/src/mpid/ch4/subconfigure.m4
new file mode 100644
index 0000000..9b423cb
--- /dev/null
+++ b/src/mpid/ch4/subconfigure.m4
@@ -0,0 +1,386 @@
+[#] start of __file__
+dnl MPICH_SUBCFG_BEFORE=src/mpid/common/sched
+dnl MPICH_SUBCFG_BEFORE=src/mpid/common/datatype
+dnl MPICH_SUBCFG_BEFORE=src/mpid/common/thread
+
+dnl _PREREQ handles the former role of mpichprereq, setup_device, etc
+[#] expansion is: PAC_SUBCFG_PREREQ_[]PAC_SUBCFG_AUTO_SUFFIX
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_CONDITIONAL([BUILD_CH4],[test "$device_name" = "ch4"])
+
+# the CH4 device depends on the common NBC scheduler code
+build_mpid_common_sched=yes
+build_mpid_common_datatype=yes
+build_mpid_common_thread=yes
+
+MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
+MPID_MAX_PROCESSOR_NAME=128
+MPID_MAX_ERROR_STRING=512
+
+AM_COND_IF([BUILD_CH4],[
+AC_MSG_NOTICE([RUNNING PREREQ FOR CH4 DEVICE])
+
+# $device_args - contains the netmods
+if test -z "${device_args}" ; then
+ ch4_netmods="ofi"
+else
+ ch4_netmods=`echo ${device_args} | sed -e 's/,/ /g'`
+fi
+export ch4_netmods
+
+#
+# reset DEVICE so that it (a) always includes the channel name, and (b) does not include channel options
+#
+DEVICE="${device_name}:${ch4_netmods}"
+
+ch4_nets_func_decl=""
+ch4_nets_native_func_decl=""
+ch4_nets_func_array=""
+ch4_nets_native_func_array=""
+ch4_nets_strings=""
+net_index=0
+for net in $ch4_netmods ; do
+ if test ! -d $srcdir/src/mpid/ch4/netmod/${net} ; then
+ AC_MSG_ERROR([Network module ${net} is unknown "$srcdir/src/mpid/ch4/netmod/${net}"])
+ fi
+ net_macro=`echo $net | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ net_macro="MPIDI_CH4_${net_macro}"
+
+ if test -z "$ch4_nets_array" ; then
+ ch4_nets_array="$net_macro"
+ else
+ ch4_nets_array="$ch4_nets_array, $net_macro"
+ fi
+
+ if test -z "$ch4_nets_func_decl" ; then
+ ch4_nets_func_decl="MPIDI_NM_${net}_funcs"
+ else
+ ch4_nets_func_decl="${ch4_nets_func_decl}, MPIDI_NM_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_native_func_decl" ; then
+ ch4_nets_native_func_decl="MPIDI_NM_native_${net}_funcs"
+ else
+ ch4_nets_native_func_decl="${ch4_nets_native_func_decl}, MPIDI_NM_native_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_func_array" ; then
+ ch4_nets_func_array="&MPIDI_NM_${net}_funcs"
+ else
+ ch4_nets_func_array="${ch4_nets_func_array}, &MPIDI_NM_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_native_func_array" ; then
+ ch4_nets_native_func_array="&MPIDI_NM_native_${net}_funcs"
+ else
+ ch4_nets_native_func_array="${ch4_nets_native_func_array}, &MPIDI_NM_native_${net}_funcs"
+ fi
+
+ if test -z "$ch4_nets_strings" ; then
+ ch4_nets_strings="\"$net\""
+ else
+ ch4_nets_strings="$ch4_nets_strings, \"$net\""
+ fi
+
+ if test -z "$ch4_netmod_pre_include" ; then
+ ch4_netmod_pre_include="#include \"../netmod/${net}/${net}_pre.h\""
+ else
+ ch4_netmod_pre_include="${ch4_netmod_pre_include}
+#include \"../netmod/${net}/${net}_pre.h\""
+ fi
+
+ net_upper=`echo ${net} | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ if test -z "$ch4_netmod_amrequest_decl" ; then
+ ch4_netmod_amrequest_decl="MPIDI_${net_upper}_am_request_t ${net};"
+ else
+ ch4_netmod_amrequest_decl="${ch4_netmod_amrequest_decl} \\
+MPIDI_${net_upper}_am_request_t ${net};"
+ fi
+
+ if test -z "$ch4_netmod_request_decl" ; then
+ ch4_netmod_request_decl="MPIDI_${net_upper}_request_t ${net};"
+ else
+ ch4_netmod_request_decl="${ch4_netmod_request_decl} \\
+MPIDI_${net_upper}_request_t ${net};"
+ fi
+
+ if test -z "$ch4_netmod_comm_decl" ; then
+ ch4_netmod_comm_decl="MPIDI_${net_upper}_comm_t ${net};"
+ else
+ ch4_netmod_comm_decl="${ch4_netmod_comm_decl} \\
+MPIDI_${net_upper}_comm_t ${net};"
+ fi
+ if test -z "$ch4_netmod_dt_decl" ; then
+ ch4_netmod_dt_decl="MPIDI_${net_upper}_dt_t ${net};"
+ else
+ ch4_netmod_dt_decl="${ch4_netmod_dt_decl} \\
+MPIDI_${net_upper}_dt_t ${net};"
+ fi
+ if test -z "$ch4_netmod_op_decl" ; then
+ ch4_netmod_op_decl="MPIDI_${net_upper}_op_t ${net};"
+ else
+ ch4_netmod_op_decl="${ch4_netmod_op_decl} \\
+MPIDI_${net_upper}_op_t ${net};"
+ fi
+
+ if test -z "$ch4_netmod_win_decl" ; then
+ ch4_netmod_win_decl="MPIDI_${net_upper}_win_t ${net};"
+ else
+ ch4_netmod_win_decl="${ch4_netmod_win_decl} \\
+MPIDI_${net_upper}_win_t ${net};"
+ fi
+ if test -z "$ch4_netmod_addr_decl" ; then
+ ch4_netmod_addr_decl="MPIDI_${net_upper}_addr_t ${net};"
+ else
+ ch4_netmod_addr_decl="${ch4_netmod_addr_decl} \\
+MPIDI_${net_upper}_addr_t ${net};"
+ fi
+
+
+
+
+net_index=`expr $net_index + 1`
+done
+ch4_nets_array_sz=$net_index
+
+AC_SUBST(device_name)
+AC_SUBST(ch4_netmods)
+AC_SUBST(ch4_nets_array)
+AC_SUBST(ch4_nets_array_sz)
+AC_SUBST(ch4_nets_func_decl)
+AC_SUBST(ch4_nets_native_func_decl)
+AC_SUBST(ch4_nets_func_array)
+AC_SUBST(ch4_nets_native_func_array)
+AC_SUBST(ch4_nets_strings)
+AC_SUBST(ch4_netmod_pre_include)
+AC_SUBST(ch4_netmod_amrequest_decl)
+AC_SUBST(ch4_netmod_request_decl)
+AC_SUBST(ch4_netmod_comm_decl)
+AC_SUBST(ch4_netmod_dt_decl)
+AC_SUBST(ch4_netmod_win_decl)
+AC_SUBST(ch4_netmod_addr_decl)
+AC_SUBST(ch4_netmod_op_decl)
+AM_SUBST_NOTMAKE(ch4_netmod_pre_include)
+AM_SUBST_NOTMAKE(ch4_netmod_amrequest_decl)
+AM_SUBST_NOTMAKE(ch4_netmod_request_decl)
+AM_SUBST_NOTMAKE(ch4_netmod_comm_decl)
+AM_SUBST_NOTMAKE(ch4_netmod_dt_decl)
+AM_SUBST_NOTMAKE(ch4_netmod_win_decl)
+AM_SUBST_NOTMAKE(ch4_netmod_addr_decl)
+AM_SUBST_NOTMAKE(ch4_netmod_op_decl)
+
+AC_ARG_ENABLE(ch4-netmod-direct,
+ [--enable-ch4-netmod-direct
+ Enables inlined netmod build when a single netmod is used
+ level:
+ yes - Enabled (default)
+ no - Disabled (may improve build times and code size)
+ ],,enable_ch4_netmod_direct=yes)
+
+
+if test "$ch4_nets_array_sz" = "1" && test "$enable_ch4_netmod_direct" = "yes" ; then
+ PAC_APPEND_FLAG([-DNETMOD_DIRECT=__netmod_direct_${ch4_netmods}__], [CPPFLAGS])
+fi
+
+
+AC_ARG_ENABLE(ch4-shm,
+ [--enable-ch4-shm=level:module
+ Control whether CH4 shared memory is built and/or used.
+ level:
+ no - Do not build or use CH4 shared memory.
+ yes - Build CH4 shared memory, but do not use it by default (Your chosen netmod must provide it).
+ exclusive - Build and exclusively use CH4 shared memory. (Default)
+ module-list(optional). comma separated list of shared memory modules:
+ posix - POSIX shared memory implementation
+ ],,enable_ch4_shm=exclusive:posix)
+
+AC_ARG_ENABLE(ch4-shm-direct,
+ [--enable-ch4-shm-direct
+ Enables inlined shared memory build when a single shared memory module is used
+ level:
+ yes - Enabled (default)
+ no - Disabled (may improve build times and code size)
+ ],,enable_ch4_shm_direct=yes)
+
+ch4_shm_level=`echo $enable_ch4_shm | sed -e 's/:.*$//'`
+changequote(<<,>>)
+ch4_shm=`echo $enable_ch4_shm | sed -e 's/^[^:]*//' -e 's/^://'`
+changequote([,])
+
+if test "$ch4_shm_level" != "no" -a "$ch4_shm_level" != "yes" -a "$ch4_shm_level" != "exclusive"; then
+ AC_MSG_ERROR([Shared memory level ${ch4_shm_level} is unknown])
+fi
+
+if test "$ch4_shm_level" != "no" ; then
+ AC_DEFINE([MPIDI_BUILD_CH4_SHM], [1],
+ [Define if CH4 will build the default shared memory implementation as opposed to only using a netmod implementation])
+fi
+
+if test "$ch4_shm_level" = "exclusive" ; then
+ # This variable is set only when the user wants CH4 to handle all shared memory operations
+ AC_DEFINE(MPIDI_CH4_EXCLUSIVE_SHM, 1, [Define if CH4 will be providing the exclusive implementation of shared memory])
+
+ # This variable can be set either when the user asks for CH4 exclusive shared memory
+ # or when the netmod doesn't want to implement its own locality information
+ AC_DEFINE(MPIDI_BUILD_CH4_LOCALITY_INFO, 1, [CH4 should build locality info])
+fi
+
+# $ch4_shm - contains the shm mods
+if test -z "${ch4_shm}" ; then
+ if test "$ch4_shm_level" != "no" ; then
+ ch4_shm="posix"
+ fi
+else
+ ch4_shm=`echo ${ch4_shm} | sed -e 's/,/ /g'`
+fi
+export ch4_shm
+
+ch4_shm_func_decl=""
+ch4_shm_native_func_decl=""
+ch4_shm_func_array=""
+ch4_shm_native_func_array=""
+ch4_shm_strings=""
+shm_index=0
+for shm in $ch4_shm ; do
+ if test ! -d $srcdir/src/mpid/ch4/shm/${shm} ; then
+ AC_MSG_ERROR([Shared memory module ${shm} is unknown "$srcdir/src/mpid/ch4/shm/${shm}"])
+ fi
+ shm_macro=`echo $shm | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ shm_macro="MPIDI_SHM_${shm_macro}"
+
+ if test -z "$ch4_shm_array" ; then
+ ch4_shm_array="$shm_macro"
+ else
+ ch4_shm_array="$ch4_shm_array, $shm_macro"
+ fi
+
+ if test -z "$ch4_shm_func_decl" ; then
+ ch4_shm_func_decl="MPIDI_SHM_${shm}_funcs"
+ else
+ ch4_shm_func_decl="${ch4_shm_func_decl}, MPIDI_SHM_${shm}_funcs"
+ fi
+
+ if test -z "$ch4_shm_native_func_decl" ; then
+ ch4_shm_native_func_decl="MPIDI_SHM_native_${shm}_funcs"
+ else
+ ch4_shm_native_func_decl="${ch4_shm_native_func_decl}, MPIDI_SHM_native_${shm}_funcs"
+ fi
+
+ if test -z "$ch4_shm_func_array" ; then
+ ch4_shm_func_array="&MPIDI_SHM_${shm}_funcs"
+ else
+ ch4_shm_func_array="${ch4_shm_func_array}, &MPIDI_SHM_${shm}_funcs"
+ fi
+
+ if test -z "$ch4_shm_native_func_array" ; then
+ ch4_shm_native_func_array="&MPIDI_SHM_native_${shm}_funcs"
+ else
+ ch4_shm_native_func_array="${ch4_shm_native_func_array}, &MPIDI_SHM_native_${shm}_funcs"
+ fi
+
+ if test -z "$ch4_shm_strings" ; then
+ ch4_shm_strings="\"$shm\""
+ else
+ ch4_shm_strings="$ch4_shm_strings, \"$shm\""
+ fi
+
+ if test -z "$ch4_shm_pre_include" ; then
+ ch4_shm_pre_include="#include \"../shm/${shm}/${shm}_pre.h\""
+ else
+ ch4_shm_pre_include="${ch4_shm_pre_include}
+#include \"../shm/${shm}/${shm}_pre.h\""
+ fi
+
+ shm_upper=`echo ${shm} | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ if test -z "$ch4_shm_request_decl" ; then
+ ch4_shm_request_decl="MPIDI_${shm_upper}_request_t ${shm};"
+ else
+ ch4_shm_request_decl="${ch4_shm_request_decl} \\
+MPIDI_${shm_upper}_request_t ${shm};"
+ fi
+
+ if test -z "$ch4_shm_comm_decl" ; then
+ ch4_shm_comm_decl="MPIDI_${shm_upper}_comm_t ${shm};"
+ else
+ ch4_shm_comm_decl="${ch4_shm_comm_decl} \\
+MPIDI_${shm_upper}_comm_t ${shm};"
+ fi
+
+
+ shm_index=`expr $shm_index + 1`
+done
+ch4_shm_array_sz=$shm_index
+
+AC_SUBST(ch4_shm)
+AC_SUBST(ch4_shm_array)
+AC_SUBST(ch4_shm_array_sz)
+AC_SUBST(ch4_shm_func_decl)
+AC_SUBST(ch4_shm_native_func_decl)
+AC_SUBST(ch4_shm_func_array)
+AC_SUBST(ch4_shm_native_func_array)
+AC_SUBST(ch4_shm_strings)
+AC_SUBST(ch4_shm_pre_include)
+AC_SUBST(ch4_shm_request_decl)
+AC_SUBST(ch4_shm_comm_decl)
+AM_SUBST_NOTMAKE(ch4_shm_pre_include)
+AM_SUBST_NOTMAKE(ch4_shm_request_decl)
+AM_SUBST_NOTMAKE(ch4_shm_comm_decl)
+
+if test "$ch4_shm_array_sz" = "1" && test "$enable_ch4_shm_direct" = "yes" ; then
+ PAC_APPEND_FLAG([-DSHM_DIRECT=__shm_direct_${ch4_shm}__], [CPPFLAGS])
+fi
+
+])dnl end AM_COND_IF(BUILD_CH4,...)
+])dnl end PREREQ
+
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+AM_COND_IF([BUILD_CH4],[
+AC_MSG_NOTICE([RUNNING CONFIGURE FOR CH4 DEVICE])
+
+AC_ARG_WITH(ch4-rank-bits, [--with-ch4-rank-bits=16/32 Number of bits allocated to the rank field (16 or 32)],
+ [ rankbits=$withval ],
+ [ rankbits=32 ])
+if test "$rankbits" != "16" -a "$rankbits" != "32" ; then
+ AC_MSG_ERROR(Only 16 or 32-bit ranks are supported)
+fi
+AC_DEFINE_UNQUOTED(CH4_RANK_BITS,$rankbits,[Define the number of CH4_RANK_BITS])
+
+AC_ARG_ENABLE(ch4r-per-comm-msg-queue,
+ [--enable-ch4r-per-comm-msg-queue=option
+ Enable use of per-communicator message queues for posted recvs/unexpected messages
+ yes - Use per-communicator message queue. (Default)
+ no - Use global queue for posted recvs/unexpected messages.
+ ],,enable_ch4r_per_comm_msg_queue=yes)
+
+if test "$enable_ch4r_per_comm_msg_queue" = "yes" ; then
+ AC_DEFINE([MPIDI_CH4U_USE_PER_COMM_QUEUE], [1],
+ [Define if CH4U will use per-communicator message queues])
+fi
+
+PAC_ARG_SHARED_MEMORY
+
+AC_CONFIG_FILES([
+src/mpid/ch4/src/mpid_ch4_net_array.c
+src/mpid/ch4/src/mpid_ch4_shm_array.c
+src/mpid/ch4/include/netmodpre.h
+src/mpid/ch4/include/shmpre.h
+])
+PAC_ARG_SHARED_MEMORY
+])dnl end AM_COND_IF(BUILD_CH4,...)
+
+AM_CONDITIONAL([BUILD_CH4_SHM],[test "$ch4_shm_level" = "yes" -o "$ch4_shm_level" = "exclusive"])
+
+AC_CHECK_HEADERS(sys/mman.h sys/stat.h fcntl.h)
+
+gl_FUNC_RANDOM_R
+if test "$HAVE_RANDOM_R" = "1" -a "$HAVE_STRUCT_RANDOM_DATA" = "1" ; then
+ AC_DEFINE(USE_SYM_HEAP,1,[Define if we can use a symmetric heap])
+ AC_MSG_NOTICE([Using a symmetric heap])
+else
+ AC_MSG_NOTICE([Using a non-symmetric heap])
+fi
+
+
+])dnl end _BODY
+
+[#] end of __file__
diff --git a/src/mpid/common/Makefile.mk b/src/mpid/common/Makefile.mk
index d041162..1e1a92b 100644
--- a/src/mpid/common/Makefile.mk
+++ b/src/mpid/common/Makefile.mk
@@ -8,7 +8,7 @@
include $(top_srcdir)/src/mpid/common/datatype/Makefile.mk
include $(top_srcdir)/src/mpid/common/sched/Makefile.mk
-include $(top_srcdir)/src/mpid/common/sock/Makefile.mk
include $(top_srcdir)/src/mpid/common/thread/Makefile.mk
include $(top_srcdir)/src/mpid/common/hcoll/Makefile.mk
include $(top_srcdir)/src/mpid/common/timers/Makefile.mk
+include $(top_srcdir)/src/mpid/common/shm/Makefile.mk
diff --git a/src/mpid/common/datatype/.state-cache b/src/mpid/common/datatype/.state-cache
index 8a404ce..7d293eb 100644
--- a/src/mpid/common/datatype/.state-cache
+++ b/src/mpid/common/datatype/.state-cache
@@ -1,87 +1,90 @@
<dir>
-<file name="mpid_type_dup.c" info="1447123141"/>
-<file name="mpid_segment.c" info="1447123141"/>
-<file name="mpid_contents_support.c" info="1447123141"/>
-<file name="mpid_type_commit.c" info="1447123141"/>
-<file name="mpid_type_contiguous.c" info="1447123141"/>
-<file name="segment_states.h" info="1447123141"/>
-<file name="mpid_ext32_segment.h" info="1447123141"/>
-<file name="mpid_type_create_pairtype.c" info="1447123141"/>
-<file name="mpid_ext32_segment.c" info="1447123141"/>
-<file name="mpid_dataloop.h" info="1447123141"/>
-<file name="mpid_type_vector.c" info="1447123141"/>
-<file name="mpid_type_create_resized.c" info="1447123141"/>
-<file name="mpid_datatype_free.c" info="1447123141"/>
-<file name="mpid_ext32_datatype.c" info="1447123141"/>
-<file name="mpid_type_blockindexed.c" info="1447123141"/>
-<file name="mpir_type_flatten.c" info="1447123141"/>
-<file name="mpid_datatype.h" info="1447123141"/>
-<file name="mpid_type_get_envelope.c" info="1447123141"/>
-<file name="mpid_type_get_contents.c" info="1447123141"/>
-<file name="mpid_type_zerolen.c" info="1447123141"/>
-<file name="mpid_type_debug.c" info="1447123141"/>
-<file name="mpid_type_indexed.c" info="1447123141"/>
-<file name="mpid_datatype_contents.c" info="1447123141"/>
-<file name="mpid_type_struct.c" info="1447123141"/>
+<file name="mpidu_type_zerolen.c" info="1478973152"/>
+<file name="mpidu_type_commit.c" info="1478973152"/>
+<file name="mpidu_type_blockindexed.c" info="1478973152"/>
+<file name="mpidu_type_contiguous.c" info="1478973152"/>
+<file name="mpidu_type_struct.c" info="1478973152"/>
+<file name="mpid_datatype_fallback.h" info="1478973152"/>
+<file name="mpidu_segment.c" info="1478973152"/>
+<file name="mpidu_ext32_segment.h" info="1478973152"/>
+<file name="mpidu_datatype.h" info="1478973152"/>
+<file name="mpidu_type_debug.c" info="1478973152"/>
+<file name="mpidu_type_dup.c" info="1478973152"/>
+<file name="mpidu_datatype_contents.c" info="1478973152"/>
+<file name="mpir_type_flatten.c" info="1478973152"/>
+<file name="mpidu_type_get_contents.c" info="1478973152"/>
+<file name="mpidu_dataloop.h" info="1478973152"/>
+<file name="mpidu_type_indexed.c" info="1478973152"/>
+<file name="mpidu_ext32_segment.c" info="1478973152"/>
+<file name="mpidu_contents_support.c" info="1478973152"/>
+<file name="mpidu_ext32_datatype.c" info="1478973152"/>
+<file name="mpidu_datatype_free.c" info="1478973152"/>
+<file name="mpidu_type_get_envelope.c" info="1478973152"/>
+<file name="mpidu_type_create_resized.c" info="1478973152"/>
+<file name="mpidu_type_vector.c" info="1478973152"/>
+<file name="mpidu_type_create_pairtype.c" info="1478973152"/>
+<file name="segment_states.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpid_type_dup.c">
+<fileinfo name="mpidu_type_zerolen.c">
</fileinfo>
-<fileinfo name="mpid_segment.c">
-MPID_STATE_MPID_SEGMENT_PACK_VECTOR MPID_Segment_pack_vector
-MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR MPID_Segment_unpack_vector
-MPID_STATE_MPID_SEGMENT_FLATTEN MPID_Segment_flatten
-MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV MPID_Segment_contig_pack_to_iov
-MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV MPID_Segment_vector_pack_to_iov
-MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN MPID_Segment_contig_flatten
-MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN MPID_Segment_vector_flatten
+<fileinfo name="mpidu_type_commit.c">
</fileinfo>
-<fileinfo name="mpid_contents_support.c">
+<fileinfo name="mpidu_type_blockindexed.c">
</fileinfo>
-<fileinfo name="mpid_type_commit.c">
+<fileinfo name="mpidu_type_contiguous.c">
</fileinfo>
-<fileinfo name="mpid_type_contiguous.c">
+<fileinfo name="mpidu_type_struct.c">
</fileinfo>
-<fileinfo name="segment_states.h">
+<fileinfo name="mpid_datatype_fallback.h">
</fileinfo>
-<fileinfo name="mpid_ext32_segment.h">
+<fileinfo name="mpidu_segment.c">
+MPID_STATE_MPID_SEGMENT_PACK_VECTOR MPIDU_Segment_pack_vector
+MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR MPIDU_Segment_unpack_vector
+MPID_STATE_MPID_SEGMENT_FLATTEN MPIDU_Segment_flatten
+MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV MPIDU_Segment_contig_pack_to_iov
+MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV MPIDU_Segment_vector_pack_to_iov
+MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN MPIDU_Segment_contig_flatten
+MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN MPIDU_Segment_vector_flatten
</fileinfo>
-<fileinfo name="mpid_type_create_pairtype.c">
+<fileinfo name="mpidu_ext32_segment.h">
</fileinfo>
-<fileinfo name="mpid_ext32_segment.c">
-MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF MPID_Segment_contig_pack_external32_to_buf
-MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF MPID_Segment_contig_unpack_external32_to_buf
-MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL MPID_Segment_pack_external32
-MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32 MPID_Segment_unpack_external32
+<fileinfo name="mpidu_datatype.h">
</fileinfo>
-<fileinfo name="mpid_dataloop.h">
+<fileinfo name="mpidu_type_debug.c">
</fileinfo>
-<fileinfo name="mpid_type_vector.c">
+<fileinfo name="mpidu_type_dup.c">
</fileinfo>
-<fileinfo name="mpid_type_create_resized.c">
+<fileinfo name="mpidu_datatype_contents.c">
</fileinfo>
-<fileinfo name="mpid_datatype_free.c">
+<fileinfo name="mpir_type_flatten.c">
</fileinfo>
-<fileinfo name="mpid_ext32_datatype.c">
+<fileinfo name="mpidu_type_get_contents.c">
</fileinfo>
-<fileinfo name="mpid_type_blockindexed.c">
+<fileinfo name="mpidu_dataloop.h">
</fileinfo>
-<fileinfo name="mpir_type_flatten.c">
+<fileinfo name="mpidu_type_indexed.c">
</fileinfo>
-<fileinfo name="mpid_datatype.h">
+<fileinfo name="mpidu_ext32_segment.c">
+MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF MPIDU_Segment_contig_pack_external32_to_buf
+MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF MPIDU_Segment_contig_unpack_external32_to_buf
+MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL MPIDU_Segment_pack_external32
+MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32 MPIDU_Segment_unpack_external32
</fileinfo>
-<fileinfo name="mpid_type_get_envelope.c">
+<fileinfo name="mpidu_contents_support.c">
</fileinfo>
-<fileinfo name="mpid_type_get_contents.c">
+<fileinfo name="mpidu_ext32_datatype.c">
</fileinfo>
-<fileinfo name="mpid_type_zerolen.c">
+<fileinfo name="mpidu_datatype_free.c">
</fileinfo>
-<fileinfo name="mpid_type_debug.c">
+<fileinfo name="mpidu_type_get_envelope.c">
</fileinfo>
-<fileinfo name="mpid_type_indexed.c">
+<fileinfo name="mpidu_type_create_resized.c">
</fileinfo>
-<fileinfo name="mpid_datatype_contents.c">
+<fileinfo name="mpidu_type_vector.c">
</fileinfo>
-<fileinfo name="mpid_type_struct.c">
+<fileinfo name="mpidu_type_create_pairtype.c">
+</fileinfo>
+<fileinfo name="segment_states.h">
</fileinfo>
</data>
diff --git a/src/mpid/common/datatype/Makefile.mk b/src/mpid/common/datatype/Makefile.mk
index fd61cc1..893a628 100644
--- a/src/mpid/common/datatype/Makefile.mk
+++ b/src/mpid/common/datatype/Makefile.mk
@@ -10,35 +10,36 @@ if BUILD_MPID_COMMON_DATATYPE
include $(top_srcdir)/src/mpid/common/datatype/dataloop/Makefile.mk
mpi_core_sources += \
- src/mpid/common/datatype/mpid_contents_support.c \
- src/mpid/common/datatype/mpid_datatype_contents.c \
- src/mpid/common/datatype/mpid_datatype_free.c \
- src/mpid/common/datatype/mpid_ext32_datatype.c \
- src/mpid/common/datatype/mpid_ext32_segment.c \
- src/mpid/common/datatype/mpid_segment.c \
- src/mpid/common/datatype/mpid_type_blockindexed.c \
- src/mpid/common/datatype/mpid_type_commit.c \
- src/mpid/common/datatype/mpid_type_contiguous.c \
- src/mpid/common/datatype/mpid_type_create_pairtype.c \
- src/mpid/common/datatype/mpid_type_create_resized.c \
- src/mpid/common/datatype/mpid_type_debug.c \
- src/mpid/common/datatype/mpid_type_dup.c \
- src/mpid/common/datatype/mpid_type_get_contents.c \
- src/mpid/common/datatype/mpid_type_get_envelope.c \
- src/mpid/common/datatype/mpid_type_indexed.c \
- src/mpid/common/datatype/mpid_type_struct.c \
- src/mpid/common/datatype/mpid_type_vector.c \
- src/mpid/common/datatype/mpid_type_zerolen.c \
+ src/mpid/common/datatype/mpidu_contents_support.c \
+ src/mpid/common/datatype/mpidu_datatype_contents.c \
+ src/mpid/common/datatype/mpidu_datatype_free.c \
+ src/mpid/common/datatype/mpidu_ext32_datatype.c \
+ src/mpid/common/datatype/mpidu_ext32_segment.c \
+ src/mpid/common/datatype/mpidu_segment.c \
+ src/mpid/common/datatype/mpidu_type_blockindexed.c \
+ src/mpid/common/datatype/mpidu_type_commit.c \
+ src/mpid/common/datatype/mpidu_type_contiguous.c \
+ src/mpid/common/datatype/mpidu_type_create_pairtype.c \
+ src/mpid/common/datatype/mpidu_type_create_resized.c \
+ src/mpid/common/datatype/mpidu_type_debug.c \
+ src/mpid/common/datatype/mpidu_type_dup.c \
+ src/mpid/common/datatype/mpidu_type_get_contents.c \
+ src/mpid/common/datatype/mpidu_type_get_envelope.c \
+ src/mpid/common/datatype/mpidu_type_indexed.c \
+ src/mpid/common/datatype/mpidu_type_struct.c \
+ src/mpid/common/datatype/mpidu_type_vector.c \
+ src/mpid/common/datatype/mpidu_type_zerolen.c \
src/mpid/common/datatype/mpir_type_flatten.c
# there are no AC_OUTPUT_FILES headers, so builddir is unnecessary
AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/common/datatype
noinst_HEADERS += \
- src/mpid/common/datatype/mpid_dataloop.h \
- src/mpid/common/datatype/mpid_datatype.h \
- src/mpid/common/datatype/mpid_ext32_segment.h \
- src/mpid/common/datatype/segment_states.h
+ src/mpid/common/datatype/mpidu_dataloop.h \
+ src/mpid/common/datatype/mpidu_datatype.h \
+ src/mpid/common/datatype/mpidu_ext32_segment.h \
+ src/mpid/common/datatype/segment_states.h \
+ src/mpid/common/datatype/mpid_datatype_fallback.h
endif BUILD_MPID_COMMON_DATATYPE
diff --git a/src/mpid/common/datatype/dataloop/.state-cache b/src/mpid/common/datatype/dataloop/.state-cache
index 07d7ee9..fcdb3da 100644
--- a/src/mpid/common/datatype/dataloop/.state-cache
+++ b/src/mpid/common/datatype/dataloop/.state-cache
@@ -1,64 +1,64 @@
<dir>
-<file name="segment_flatten.c" info="1447123141"/>
-<file name="darray_support.c" info="1447123141"/>
-<file name="dataloop_create_contig.c" info="1447123141"/>
-<file name="dataloop_create.c" info="1447123141"/>
-<file name="dataloop_create_blockindexed.c" info="1447123141"/>
-<file name="segment_count.c" info="1447123141"/>
-<file name="segment_packunpack.c" info="1447123141"/>
-<file name="dataloop_create_indexed.c" info="1447123141"/>
-<file name="dataloop_create.h" info="1447123141"/>
-<file name="dataloop_parts.h" info="1447123141"/>
-<file name="dataloop_create_vector.c" info="1447123141"/>
-<file name="dataloop.c" info="1447123141"/>
-<file name="segment.c" info="1447123141"/>
-<file name="typesize_support.c" info="1447123141"/>
-<file name="subarray_support.c" info="1447123141"/>
-<file name="dataloop_create_struct.c" info="1447123141"/>
-<file name="typesize_support.h" info="1447123141"/>
-<file name="veccpy.h" info="1447123141"/>
-<file name="dataloop_create_pairtype.c" info="1447123141"/>
-<file name="dataloop.h" info="1447123141"/>
+<file name="dataloop.h" info="1478973152"/>
+<file name="typesize_support.c" info="1478973152"/>
+<file name="dataloop_parts.h" info="1478973152"/>
+<file name="dataloop_create_indexed.c" info="1478973152"/>
+<file name="dataloop_create_vector.c" info="1478973152"/>
+<file name="darray_support.c" info="1478973152"/>
+<file name="dataloop.c" info="1478973152"/>
+<file name="dataloop_create_struct.c" info="1478973152"/>
+<file name="segment_flatten.c" info="1478973152"/>
+<file name="dataloop_create.c" info="1478973152"/>
+<file name="subarray_support.c" info="1478973152"/>
+<file name="dataloop_create_pairtype.c" info="1478973152"/>
+<file name="segment.c" info="1478973152"/>
+<file name="dataloop_create_blockindexed.c" info="1478973152"/>
+<file name="dataloop_create.h" info="1478973152"/>
+<file name="typesize_support.h" info="1478973152"/>
+<file name="segment_packunpack.c" info="1478973152"/>
+<file name="segment_count.c" info="1478973152"/>
+<file name="dataloop_create_contig.c" info="1478973152"/>
+<file name="veccpy.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="segment_flatten.c">
+<fileinfo name="dataloop.h">
</fileinfo>
-<fileinfo name="darray_support.c">
+<fileinfo name="typesize_support.c">
</fileinfo>
-<fileinfo name="dataloop_create_contig.c">
+<fileinfo name="dataloop_parts.h">
</fileinfo>
-<fileinfo name="dataloop_create.c">
+<fileinfo name="dataloop_create_indexed.c">
</fileinfo>
-<fileinfo name="dataloop_create_blockindexed.c">
+<fileinfo name="dataloop_create_vector.c">
</fileinfo>
-<fileinfo name="segment_count.c">
+<fileinfo name="darray_support.c">
</fileinfo>
-<fileinfo name="segment_packunpack.c">
+<fileinfo name="dataloop.c">
</fileinfo>
-<fileinfo name="dataloop_create_indexed.c">
+<fileinfo name="dataloop_create_struct.c">
</fileinfo>
-<fileinfo name="dataloop_create.h">
+<fileinfo name="segment_flatten.c">
</fileinfo>
-<fileinfo name="dataloop_parts.h">
+<fileinfo name="dataloop_create.c">
</fileinfo>
-<fileinfo name="dataloop_create_vector.c">
+<fileinfo name="subarray_support.c">
</fileinfo>
-<fileinfo name="dataloop.c">
+<fileinfo name="dataloop_create_pairtype.c">
</fileinfo>
<fileinfo name="segment.c">
</fileinfo>
-<fileinfo name="typesize_support.c">
-</fileinfo>
-<fileinfo name="subarray_support.c">
+<fileinfo name="dataloop_create_blockindexed.c">
</fileinfo>
-<fileinfo name="dataloop_create_struct.c">
+<fileinfo name="dataloop_create.h">
</fileinfo>
<fileinfo name="typesize_support.h">
</fileinfo>
-<fileinfo name="veccpy.h">
+<fileinfo name="segment_packunpack.c">
</fileinfo>
-<fileinfo name="dataloop_create_pairtype.c">
+<fileinfo name="segment_count.c">
</fileinfo>
-<fileinfo name="dataloop.h">
+<fileinfo name="dataloop_create_contig.c">
+</fileinfo>
+<fileinfo name="veccpy.h">
</fileinfo>
</data>
diff --git a/src/mpid/common/datatype/dataloop/darray_support.c b/src/mpid/common/datatype/dataloop/darray_support.c
index d422bec..615bc24 100644
--- a/src/mpid/common/datatype/dataloop/darray_support.c
+++ b/src/mpid/common/datatype/dataloop/darray_support.c
@@ -39,7 +39,7 @@ int PREPEND_PREFIX(Type_convert_darray)(int size,
int procs, tmp_rank, i, tmp_size, blklens[3], *coords;
MPI_Aint *st_offsets, orig_extent, disps[3];
- MPIR_Type_extent_impl(oldtype, &orig_extent);
+ MPIDU_Datatype_get_extent_macro(oldtype, orig_extent);
/* calculate position in Cartesian grid as MPI would (row-major
ordering) */
diff --git a/src/mpid/common/datatype/dataloop/dataloop.c b/src/mpid/common/datatype/dataloop/dataloop.c
index 2cca5b9..f18257d 100644
--- a/src/mpid/common/datatype/dataloop/dataloop.c
+++ b/src/mpid/common/datatype/dataloop/dataloop.c
@@ -24,8 +24,8 @@
* makes it somewhat easier to copy these subtrees around. Keep this in mind
* when looking at the functions below.
*
- * The structures used in this file are defined in mpid_datatype.h. There is
- * no separate mpid_dataloop.h at this time.
+ * The structures used in this file are defined in mpidu_datatype.h. There is
+ * no separate mpidu_dataloop.h at this time.
*
* OPTIMIZATIONS:
*
@@ -63,8 +63,8 @@ void PREPEND_PREFIX(Dataloop_free)(DLOOP_Dataloop **dataloop)
if (*dataloop == NULL) return;
#ifdef DLOOP_DEBUG_MEMORY
- DLOOP_dbg_printf("DLOOP_Dataloop_free: freeing loop @ %x.\n",
- (int) *dataloop);
+ MPL_DBG_MSG_D(MPIR_DBG_DATATYPE,VERBOSE,"DLOOP_Dataloop_free: freeing loop @ %x.\n",
+ (int) *dataloop);
#endif
memset(*dataloop, 0, sizeof(DLOOP_Dataloop_common));
@@ -102,8 +102,8 @@ void PREPEND_PREFIX(Dataloop_copy)(void *dest,
DLOOP_Offset ptrdiff;
#ifdef DLOOP_DEBUG_MEMORY
- DLOOP_dbg_printf("DLOOP_Dataloop_copy: copying from %x to %x (%z bytes).\n",
- (int) src, (int) dest, (size_t)size);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"DLOOP_Dataloop_copy: copying from %x to %x (%z bytes).\n",
+ (int) src, (int) dest, (size_t)size));
#endif
/* copy region first */
@@ -386,7 +386,7 @@ void PREPEND_PREFIX(Dataloop_alloc_and_copy)(int kind,
}
#ifdef DLOOP_DEBUG_MEMORY
- DLOOP_dbg_printf("DLOOP_Dataloop_alloc_and_copy: new loop @ %x (tot sz = %z, loop = %z, off = %z, blk = %z, ptr = %z, extent = %z, old = %z)\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"DLOOP_Dataloop_alloc_and_copy: new loop @ %x (tot sz = %z, loop = %z, off = %z, blk = %z, ptr = %z, extent = %z, old = %z)\n",
(int) new_loop,
new_loop_sz,
loop_sz,
@@ -394,7 +394,7 @@ void PREPEND_PREFIX(Dataloop_alloc_and_copy)(int kind,
blk_sz,
ptr_sz,
extent_sz,
- old_loop_sz);
+ old_loop_sz));
#endif
/* set all the pointers in the new dataloop structure */
@@ -567,7 +567,7 @@ void PREPEND_PREFIX(Dataloop_struct_alloc)(DLOOP_Count count,
}
#ifdef DLOOP_DEBUG_MEMORY
- DLOOP_dbg_printf("DLOOP_Dataloop_struct_alloc: new loop @ %x (tot sz = %z, loop = %z, off = %z, blk = %z, ptr = %z, extent = %z, basics = %z, old = %z)\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"DLOOP_Dataloop_struct_alloc: new loop @ %x (tot sz = %z, loop = %z, off = %z, blk = %z, ptr = %z, extent = %z, basics = %z, old = %z)\n",
(int) new_loop,
new_loop_sz,
loop_sz,
@@ -576,7 +576,7 @@ void PREPEND_PREFIX(Dataloop_struct_alloc)(DLOOP_Count count,
ptr_sz,
extent_sz,
basic_sz,
- old_loop_sz);
+ old_loop_sz));
#endif
/* set all the pointers in the new dataloop structure */
@@ -656,36 +656,36 @@ PREPEND_PREFIX(Dataloop_stream_size)(struct DLOOP_Dataloop *dl_p,
case DLOOP_KIND_CONTIG:
tmp_ct *= (DLOOP_Offset)(dl_p->loop_params.c_t.count);
#ifdef DLOOP_DEBUG_SIZE
- DLOOP_dbg_printf("stream_size: contig: ct = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
- (int) dl_p->loop_params.c_t.count, (DLOOP_Offset) tmp_ct);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"stream_size: contig: ct = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ (int) dl_p->loop_params.c_t.count, (DLOOP_Offset) tmp_ct));
#endif
break;
case DLOOP_KIND_VECTOR:
tmp_ct *= (DLOOP_Offset)(dl_p->loop_params.v_t.count) *
(DLOOP_Offset)(dl_p->loop_params.v_t.blocksize);
#ifdef DLOOP_DEBUG_SIZE
- DLOOP_dbg_printf("stream_size: vector: ct = %d; blk = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"stream_size: vector: ct = %d; blk = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
(int) dl_p->loop_params.v_t.count,
(int) dl_p->loop_params.v_t.blocksize,
- (DLOOP_Offset) tmp_ct);
+ (DLOOP_Offset) tmp_ct));
#endif
break;
case DLOOP_KIND_BLOCKINDEXED:
tmp_ct *= (DLOOP_Offset)(dl_p->loop_params.bi_t.count) *
(DLOOP_Offset)(dl_p->loop_params.bi_t.blocksize);
#ifdef DLOOP_DEBUG_SIZE
- DLOOP_dbg_printf("stream_size: blkindexed: blks = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"stream_size: blkindexed: blks = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
(int) dl_p->loop_params.bi_t.count *
(int) dl_p->loop_params.bi_t.blocksize,
- (DLOOP_Offset) tmp_ct);
+ (DLOOP_Offset) tmp_ct));
#endif
break;
case DLOOP_KIND_INDEXED:
tmp_ct *= (DLOOP_Offset)(dl_p->loop_params.i_t.total_blocks);
#ifdef DLOOP_DEBUG_SIZE
- DLOOP_dbg_printf("stream_size: contig: blks = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"stream_size: contig: blks = %d; new tot_ct = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
(int) dl_p->loop_params.i_t.total_blocks,
- (DLOOP_Offset) tmp_ct);
+ (DLOOP_Offset) tmp_ct));
#endif
break;
default:
@@ -724,57 +724,57 @@ void PREPEND_PREFIX(Dataloop_print)(struct DLOOP_Dataloop *dataloop,
if (dataloop == NULL)
{
- DLOOP_dbg_printf("dataloop is NULL (probably basic type)\n");
+ MPL_DBG_MSG(MPIR_DBG_DATATYPE,VERBOSE,"dataloop is NULL (probably basic type)\n");
return;
}
- DLOOP_dbg_printf("loc=%p, treedepth=%d, kind=%d, el_extent=" DLOOP_OFFSET_FMT_DEC_SPEC "\n",
- dataloop, (int) depth, (int) dataloop->kind, (DLOOP_Offset) dataloop->el_extent);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"loc=%p, treedepth=%d, kind=%d, el_extent=" DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ dataloop, (int) depth, (int) dataloop->kind, (DLOOP_Offset) dataloop->el_extent));
switch(dataloop->kind & DLOOP_KIND_MASK) {
case DLOOP_KIND_CONTIG:
- DLOOP_dbg_printf("\tCONTIG: count=%d, datatype=%p\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tCONTIG: count=%d, datatype=%p\n",
(int) dataloop->loop_params.c_t.count,
- dataloop->loop_params.c_t.dataloop);
+ dataloop->loop_params.c_t.dataloop));
if (!(dataloop->kind & DLOOP_FINAL_MASK))
PREPEND_PREFIX(Dataloop_print)(dataloop->loop_params.c_t.dataloop, depth+1);
break;
case DLOOP_KIND_VECTOR:
- DLOOP_dbg_printf("\tVECTOR: count=%d, blksz=%d, stride=" DLOOP_OFFSET_FMT_DEC_SPEC ", datatype=%p\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tVECTOR: count=%d, blksz=%d, stride=" DLOOP_OFFSET_FMT_DEC_SPEC ", datatype=%p\n",
(int) dataloop->loop_params.v_t.count,
(int) dataloop->loop_params.v_t.blocksize,
(DLOOP_Offset) dataloop->loop_params.v_t.stride,
- dataloop->loop_params.v_t.dataloop);
+ dataloop->loop_params.v_t.dataloop));
if (!(dataloop->kind & DLOOP_FINAL_MASK))
PREPEND_PREFIX(Dataloop_print)(dataloop->loop_params.v_t.dataloop, depth+1);
break;
case DLOOP_KIND_BLOCKINDEXED:
- DLOOP_dbg_printf("\tBLOCKINDEXED: count=%d, blksz=%d, datatype=%p\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tBLOCKINDEXED: count=%d, blksz=%d, datatype=%p\n",
(int) dataloop->loop_params.bi_t.count,
(int) dataloop->loop_params.bi_t.blocksize,
- dataloop->loop_params.bi_t.dataloop);
+ dataloop->loop_params.bi_t.dataloop));
/* print out offsets later */
if (!(dataloop->kind & DLOOP_FINAL_MASK))
PREPEND_PREFIX(Dataloop_print)(dataloop->loop_params.bi_t.dataloop, depth+1);
break;
case DLOOP_KIND_INDEXED:
- DLOOP_dbg_printf("\tINDEXED: count=%d, datatype=%p\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tINDEXED: count=%d, datatype=%p\n",
(int) dataloop->loop_params.i_t.count,
- dataloop->loop_params.i_t.dataloop);
+ dataloop->loop_params.i_t.dataloop));
/* print out blocksizes and offsets later */
if (!(dataloop->kind & DLOOP_FINAL_MASK))
PREPEND_PREFIX(Dataloop_print)(dataloop->loop_params.i_t.dataloop, depth+1);
break;
case DLOOP_KIND_STRUCT:
- DLOOP_dbg_printf("\tSTRUCT: count=%d\n", (int) dataloop->loop_params.s_t.count);
- DLOOP_dbg_printf("\tblocksizes:\n");
+ MPL_DBG_MSG_D(MPIR_DBG_DATATYPE,VERBOSE,"\tSTRUCT: count=%d\n", (int) dataloop->loop_params.s_t.count);
+ MPL_DBG_MSG(MPIR_DBG_DATATYPE,VERBOSE,"\tblocksizes:\n");
for (i=0; i < dataloop->loop_params.s_t.count; i++)
- DLOOP_dbg_printf("\t\t%d\n", (int) dataloop->loop_params.s_t.blocksize_array[i]);
- DLOOP_dbg_printf("\toffsets:\n");
+ MPL_DBG_MSG_D(MPIR_DBG_DATATYPE,VERBOSE,"\t\t%d\n", (int) dataloop->loop_params.s_t.blocksize_array[i]);
+ MPL_DBG_MSG(MPIR_DBG_DATATYPE,VERBOSE,"\toffsets:\n");
for (i=0; i < dataloop->loop_params.s_t.count; i++)
- DLOOP_dbg_printf("\t\t" DLOOP_OFFSET_FMT_DEC_SPEC "\n", (DLOOP_Offset) dataloop->loop_params.s_t.offset_array[i]);
- DLOOP_dbg_printf("\tdatatypes:\n");
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\t\t" DLOOP_OFFSET_FMT_DEC_SPEC "\n", (DLOOP_Offset) dataloop->loop_params.s_t.offset_array[i]));
+ MPL_DBG_MSG(MPIR_DBG_DATATYPE,VERBOSE,"\tdatatypes:\n");
for (i=0; i < dataloop->loop_params.s_t.count; i++)
- DLOOP_dbg_printf("\t\t%p\n", dataloop->loop_params.s_t.dataloop_array[i]);
+ MPL_DBG_MSG_P(MPIR_DBG_DATATYPE,VERBOSE,"\t\t%p\n", dataloop->loop_params.s_t.dataloop_array[i]);
if (dataloop->kind & DLOOP_FINAL_MASK) break;
for (i=0; i < dataloop->loop_params.s_t.count; i++) {
diff --git a/src/mpid/common/datatype/dataloop/dataloop.h b/src/mpid/common/datatype/dataloop/dataloop.h
index 2a16e96..cdfd5fd 100644
--- a/src/mpid/common/datatype/dataloop/dataloop.h
+++ b/src/mpid/common/datatype/dataloop/dataloop.h
@@ -13,7 +13,7 @@
#define DATALOOP_H
/* This is specific to MPICH */
-#include "mpid_dataloop.h"
+#include "mpidu_dataloop.h"
#include "mpiimpl.h"
#endif
diff --git a/src/mpid/common/datatype/dataloop/dataloop_create_struct.c b/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
index 7d51b7b..b0bc1aa 100644
--- a/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
+++ b/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
@@ -684,14 +684,14 @@ static int DLOOP_Dataloop_create_flattened_struct(DLOOP_Count count,
nr_blks = first_ind;
#if 0
- if (MPIU_DBG_SELECTED(DATATYPE,VERBOSE)) {
- MPIU_DBG_OUT(DATATYPE,"--- start of flattened type ---");
+ if (MPL_DBG_SELECTED(MPIR_DBG_DATATYPE,VERBOSE)) {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"--- start of flattened type ---");
for (i=0; i < nr_blks; i++) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
"a[%d] = (%d, " DLOOP_OFFSET_FMT_DEC_SPEC ")", i,
tmp_blklens[i], tmp_disps[i]));
}
- MPIU_DBG_OUT(DATATYPE,"--- end of flattened type ---");
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"--- end of flattened type ---");
}
#endif
diff --git a/src/mpid/common/datatype/dataloop/dataloop_parts.h b/src/mpid/common/datatype/dataloop/dataloop_parts.h
index 56d6bd5..47c77f9 100644
--- a/src/mpid/common/datatype/dataloop/dataloop_parts.h
+++ b/src/mpid/common/datatype/dataloop/dataloop_parts.h
@@ -52,7 +52,7 @@
* optimizations may be applied. They are also passed in at Segment_init
* time to specify which dataloop to use.
*
- * Note: The flag to MPID_Segment_init() was originally simply "hetero"
+ * Note: The flag to MPIDU_Segment_init() was originally simply "hetero"
* and was a boolean value (0 meaning homogeneous). Some MPICH code
* may still rely on HOMOGENEOUS being "0" and HETEROGENEOUS being "1".
*/
diff --git a/src/mpid/common/datatype/dataloop/segment.c b/src/mpid/common/datatype/dataloop/segment.c
index 5408135..bb93f24 100644
--- a/src/mpid/common/datatype/dataloop/segment.c
+++ b/src/mpid/common/datatype/dataloop/segment.c
@@ -64,9 +64,8 @@ int PREPEND_PREFIX(Segment_init)(const DLOOP_Buffer buf,
flag == DLOOP_DATALOOP_ALL_BYTES);
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("DLOOP_Segment_init: count = %d, buf = %x\n",
- count,
- buf);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"DLOOP_Segment_init: count = %d, buf = %x\n",
+ count, buf));
#endif
if (!DLOOP_Handle_hasloop_macro(handle)) {
@@ -372,15 +371,14 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
if (first == *lastp) {
/* nothing to do */
- DLOOP_dbg_printf("dloop_segment_manipulate: warning: first == last (" DLOOP_OFFSET_FMT_DEC_SPEC ")\n", first);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"dloop_segment_manipulate: warning: first == last (" DLOOP_OFFSET_FMT_DEC_SPEC ")\n", first));
return;
}
/* first we ensure that stream_off and first are in the same spot */
if (first != stream_off) {
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("first=" DLOOP_OFFSET_FMT_DEC_SPEC "; stream_off=" DLOOP_OFFSET_FMT_DEC_SPEC "; resetting.\n",
- first, stream_off);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"first=" DLOOP_OFFSET_FMT_DEC_SPEC "; stream_off=" DLOOP_OFFSET_FMT_DEC_SPEC "; resetting.\n", first, stream_off));
#endif
if (first < stream_off) {
@@ -413,16 +411,16 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
DLOOP_SEGMENT_LOAD_LOCAL_VALUES;
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("done repositioning stream_off; first=" DLOOP_OFFSET_FMT_DEC_SPEC ", stream_off=" DLOOP_OFFSET_FMT_DEC_SPEC ", last=" DLOOP_OFFSET_FMT_DEC_SPEC "\n",
- first, stream_off, last);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"done repositioning stream_off; first=" DLOOP_OFFSET_FMT_DEC_SPEC ", stream_off=" DLOOP_OFFSET_FMT_DEC_SPEC ", last=" DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ first, stream_off, last));
#endif
}
for (;;) {
#ifdef DLOOP_DEBUG_MANIPULATE
#if 0
- DLOOP_dbg_printf("looptop; cur_sp=%d, cur_elmp=%x\n",
- cur_sp, (unsigned) cur_elmp);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"looptop; cur_sp=%d, cur_elmp=%x\n",
+ cur_sp, (unsigned) cur_elmp));
#endif
#endif
@@ -498,9 +496,9 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
}
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\thit leaf; cur_sp=%d, elmp=%x, piece_sz=" DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\thit leaf; cur_sp=%d, elmp=%x, piece_sz=" DLOOP_OFFSET_FMT_DEC_SPEC "\n",
cur_sp,
- (unsigned) cur_elmp, myblocks * local_el_size);
+ (unsigned) cur_elmp, myblocks * local_el_size));
#endif
/* enforce the last parameter if necessary by reducing myblocks */
@@ -509,9 +507,9 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
{
myblocks = ((last - stream_off) / stream_el_size);
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\tpartial block count=" DLOOP_OFFSET_FMT_DEC_SPEC " (" DLOOP_OFFSET_FMT_DEC_SPEC " bytes)\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tpartial block count=" DLOOP_OFFSET_FMT_DEC_SPEC " (" DLOOP_OFFSET_FMT_DEC_SPEC " bytes)\n",
myblocks,
- myblocks * stream_el_size);
+ myblocks * stream_el_size));
#endif
if (myblocks == 0) {
DLOOP_SEGMENT_SAVE_LOCAL_VALUES;
@@ -524,7 +522,7 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
case PF_NULL:
piecefn_indicated_exit = 0;
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\tNULL piecefn for this piece\n");
+ MPL_DBG_MSG("\tNULL piecefn for this piece\n");
#endif
break;
case PF_CONTIG:
@@ -697,8 +695,8 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
} /* end of if leaf */
else if (cur_elmp->curblock == 0) {
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\thit end of block; elmp=%x [%d]\n",
- (unsigned) cur_elmp, cur_sp);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\thit end of block; elmp=%x [%d]\n",
+ (unsigned) cur_elmp, cur_sp));
#endif
cur_elmp->curcount--;
@@ -728,8 +726,8 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
if (cur_elmp->curcount == 0) {
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\talso hit end of count; elmp=%x [%d]\n",
- (unsigned) cur_elmp, cur_sp);
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\talso hit end of count; elmp=%x [%d]\n",
+ (unsigned) cur_elmp, cur_sp));
#endif
DLOOP_SEGMENT_POP_AND_MAYBE_EXIT;
}
@@ -764,10 +762,10 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
}
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\tloading dlp=%x, elmp=%x [%d]\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tloading dlp=%x, elmp=%x [%d]\n",
(unsigned) load_dlp,
(unsigned) next_elmp,
- cur_sp+1);
+ cur_sp+1));
#endif
DLOOP_Stackelm_load(next_elmp,
@@ -776,9 +774,9 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
}
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\tpushing type, elmp=%x [%d], count=%d, block=%d\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tpushing type, elmp=%x [%d], count=%d, block=%d\n",
(unsigned) cur_elmp, cur_sp, count_index,
- block_index);
+ block_index));
#endif
/* set orig_offset and all cur values for new stackelm.
* this is done in two steps: first set orig_offset based on
@@ -819,9 +817,9 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
}
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\tstep 1: next orig_offset = " DLOOP_OFFSET_FMT_DEC_SPEC " (0x" DLOOP_OFFSET_FMT_HEX_SPEC ")\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tstep 1: next orig_offset = " DLOOP_OFFSET_FMT_DEC_SPEC " (0x" DLOOP_OFFSET_FMT_HEX_SPEC ")\n",
next_elmp->orig_offset,
- next_elmp->orig_offset);
+ next_elmp->orig_offset));
#endif
switch (next_elmp->loop_p->kind & DLOOP_KIND_MASK) {
@@ -859,9 +857,9 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
}
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("\tstep 2: next curoffset = " DLOOP_OFFSET_FMT_DEC_SPEC " (0x" DLOOP_OFFSET_FMT_HEX_SPEC ")\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\tstep 2: next curoffset = " DLOOP_OFFSET_FMT_DEC_SPEC " (0x" DLOOP_OFFSET_FMT_HEX_SPEC ")\n",
next_elmp->curoffset,
- next_elmp->curoffset);
+ next_elmp->curoffset));
#endif
cur_elmp->curblock--;
@@ -870,7 +868,7 @@ void PREPEND_PREFIX(Segment_manipulate)(struct DLOOP_Segment *segp,
} /* end of for (;;) */
#ifdef DLOOP_DEBUG_MANIPULATE
- DLOOP_dbg_printf("hit end of datatype\n");
+ MPL_DBG_MSG("hit end of datatype\n");
#endif
DLOOP_SEGMENT_SAVE_LOCAL_VALUES;
diff --git a/src/mpid/common/datatype/dataloop/segment_count.c b/src/mpid/common/datatype/dataloop/segment_count.c
index ee8ea82..9318d7e 100644
--- a/src/mpid/common/datatype/dataloop/segment_count.c
+++ b/src/mpid/common/datatype/dataloop/segment_count.c
@@ -103,10 +103,10 @@ static int DLOOP_Leaf_contig_count_block(DLOOP_Offset *blocks_p,
size = *blocks_p * el_size;
#ifdef MPID_SP_VERBOSE
- MPIU_dbg_printf("contig count block: count = %d, buf+off = %d, lastloc = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"contig count block: count = %d, buf+off = %d, lastloc = " DLOOP_OFFSET_FMT_DEC_SPEC "\n",
(int) paramp->count,
(int) ((char *) bufp + rel_off),
- paramp->last_loc);
+ paramp->last_loc));
#endif
if (paramp->count > 0 && rel_off == paramp->last_loc)
diff --git a/src/mpid/common/datatype/dataloop/segment_flatten.c b/src/mpid/common/datatype/dataloop/segment_flatten.c
index 0a035ec..5b6015a 100644
--- a/src/mpid/common/datatype/dataloop/segment_flatten.c
+++ b/src/mpid/common/datatype/dataloop/segment_flatten.c
@@ -52,7 +52,7 @@ struct PREPEND_PREFIX(mpi_flatten_params) {
MPI_Aint *disps;
};
-/* MPID_Segment_mpi_flatten - flatten a type into a representation
+/* MPIDU_Segment_mpi_flatten - flatten a type into a representation
* appropriate for passing to hindexed create.
*
* NOTE: blocks will be in units of bytes when returned.
@@ -96,7 +96,7 @@ void PREPEND_PREFIX(Segment_mpi_flatten)(DLOOP_Segment *segp,
NULL,
¶ms);
- /* last value already handled by MPID_Segment_manipulate */
+ /* last value already handled by MPIDU_Segment_manipulate */
*lengthp = params.index;
return;
}
@@ -236,9 +236,9 @@ static int DLOOP_Leaf_vector_mpi_flatten(DLOOP_Offset *blocks_p,
*/
*blocks_p -= (blocks_left + (size / el_size));
#ifdef MPID_SP_VERBOSE
- MPIU_dbg_printf("\t[vector to vec exiting (1): next ind = %d, " DLOOP_OFFSET_FMT_DEC_SPEC " blocks processed.\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\t[vector to vec exiting (1): next ind = %d, " DLOOP_OFFSET_FMT_DEC_SPEC " blocks processed.\n",
paramp->u.pack_vector.index,
- *blocks_p);
+ *blocks_p));
#endif
return 1;
}
@@ -261,9 +261,9 @@ static int DLOOP_Leaf_vector_mpi_flatten(DLOOP_Offset *blocks_p,
}
#ifdef MPID_SP_VERBOSE
- MPIU_dbg_printf("\t[vector to vec exiting (2): next ind = %d, " DLOOP_OFFSET_FMT_DEC_SPEC " blocks processed.\n",
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\t[vector to vec exiting (2): next ind = %d, " DLOOP_OFFSET_FMT_DEC_SPEC " blocks processed.\n",
paramp->u.pack_vector.index,
- *blocks_p);
+ *blocks_p));
#endif
/* if we get here then we processed ALL the blocks; don't need to update
diff --git a/src/mpid/common/datatype/dataloop/segment_packunpack.c b/src/mpid/common/datatype/dataloop/segment_packunpack.c
index 86f9f00..26a491f 100644
--- a/src/mpid/common/datatype/dataloop/segment_packunpack.c
+++ b/src/mpid/common/datatype/dataloop/segment_packunpack.c
@@ -303,7 +303,7 @@ int PREPEND_PREFIX(Segment_vector_m2m)(DLOOP_Offset *blocks_p,
return 0;
}
-/* MPID_Segment_blkidx_m2m
+/* MPIDU_Segment_blkidx_m2m
*/
int PREPEND_PREFIX(Segment_blkidx_m2m)(DLOOP_Offset *blocks_p,
DLOOP_Count count,
@@ -383,7 +383,7 @@ int PREPEND_PREFIX(Segment_blkidx_m2m)(DLOOP_Offset *blocks_p,
return 0;
}
-/* MPID_Segment_index_m2m
+/* MPIDU_Segment_index_m2m
*/
int PREPEND_PREFIX(Segment_index_m2m)(DLOOP_Offset *blocks_p,
DLOOP_Count count,
diff --git a/src/mpid/common/datatype/dataloop/subarray_support.c b/src/mpid/common/datatype/dataloop/subarray_support.c
index 1bdb80a..1953926 100644
--- a/src/mpid/common/datatype/dataloop/subarray_support.c
+++ b/src/mpid/common/datatype/dataloop/subarray_support.c
@@ -25,7 +25,7 @@ int PREPEND_PREFIX(Type_convert_subarray)(int ndims,
int i, blklens[3];
MPI_Datatype tmp1, tmp2, types[3];
- MPIR_Type_extent_impl(oldtype, &extent);
+ MPIDU_Datatype_get_extent_macro(oldtype, extent);
if (order == MPI_ORDER_FORTRAN) {
/* dimension 0 changes fastest */
diff --git a/src/mpid/common/datatype/dataloop/typesize_support.c b/src/mpid/common/datatype/dataloop/typesize_support.c
index 074c6d4..a73260d 100644
--- a/src/mpid/common/datatype/dataloop/typesize_support.c
+++ b/src/mpid/common/datatype/dataloop/typesize_support.c
@@ -168,8 +168,8 @@ void PREPEND_PREFIX(Type_calc_footprint)(MPI_Datatype type,
int mpisize;
MPI_Aint mpiextent;
- MPIR_Type_size_impl(type, &mpisize);
- MPIR_Type_extent_impl(type, &mpiextent);
+ MPIDU_Datatype_get_size_macro(type, mpisize);
+ MPIDU_Datatype_get_extent_macro(type, mpiextent);
tfp->size = (DLOOP_Offset) mpisize;
tfp->lb = 0;
tfp->ub = (DLOOP_Offset) mpiextent;
@@ -592,7 +592,7 @@ static int DLOOP_Named_type_alignsize(MPI_Datatype type, MPI_Aint disp)
if (type == MPI_LB || type == MPI_UB)
return 0;
- MPIR_Type_size_impl(type, &alignsize);
+ MPIDU_Datatype_get_size_macro(type, alignsize);
switch(type)
{
diff --git a/src/mpid/common/datatype/mpid_contents_support.c b/src/mpid/common/datatype/mpid_contents_support.c
deleted file mode 100644
index 3294a73..0000000
--- a/src/mpid/common/datatype/mpid_contents_support.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpi.h>
-#include <mpid_datatype.h>
-
-void MPID_Type_access_contents(MPI_Datatype type,
- int **ints_p,
- MPI_Aint **aints_p,
- MPI_Datatype **types_p)
-{
- int nr_ints, nr_aints, nr_types, combiner;
- int types_sz, struct_sz, ints_sz, epsilon, align_sz = 8;
- MPID_Datatype *dtp;
- MPID_Datatype_contents *cp;
-
- MPIR_Type_get_envelope_impl(type, &nr_ints, &nr_aints, &nr_types, &combiner);
-
- /* hardcoded handling of MPICH contents format... */
- MPID_Datatype_get_ptr(type, dtp);
- DLOOP_Assert(dtp != NULL);
-
- cp = dtp->contents;
- DLOOP_Assert(cp != NULL);
-
-#ifdef HAVE_MAX_STRUCT_ALIGNMENT
- if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
- align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
- }
-#endif
-
- struct_sz = sizeof(MPID_Datatype_contents);
- types_sz = nr_types * sizeof(MPI_Datatype);
- ints_sz = nr_ints * sizeof(int);
-
- if ((epsilon = struct_sz % align_sz)) {
- struct_sz += align_sz - epsilon;
- }
- if ((epsilon = types_sz % align_sz)) {
- types_sz += align_sz - epsilon;
- }
- if ((epsilon = ints_sz % align_sz)) {
- ints_sz += align_sz - epsilon;
- }
- *types_p = (MPI_Datatype *) (((char *) cp) + struct_sz);
- *ints_p = (int *) (((char *) (*types_p)) + types_sz);
- *aints_p = (MPI_Aint *) (((char *) (*ints_p)) + ints_sz);
- /* end of hardcoded handling of MPICH contents format */
-
- return;
-}
-
-/* FIXME: Is this routine complete? Why is it needed? If it is needed, it
- must have a comment that describes why it is needed and the arguments
- must have ATTRIBUTE((unused)) */
-void MPID_Type_release_contents(MPI_Datatype type,
- int **ints_p,
- MPI_Aint **aints_p,
- MPI_Datatype **types_p)
-{
- return;
-}
-
diff --git a/src/mpid/common/datatype/mpid_dataloop.h b/src/mpid/common/datatype/mpid_dataloop.h
deleted file mode 100644
index 7ff7c94..0000000
--- a/src/mpid/common/datatype/mpid_dataloop.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPID_DATALOOP_H
-#define MPID_DATALOOP_H
-
-#include <mpi.h>
-
-/* Note: this is where you define the prefix that will be prepended on
- * all externally visible generic dataloop and segment functions.
- */
-#define PREPEND_PREFIX(fn) MPID_ ## fn
-
-/* These following dataloop-specific types will be used throughout the DLOOP
- * instance:
- */
-#define DLOOP_Offset MPI_Aint
-#define DLOOP_Count MPI_Aint
-#define DLOOP_Handle MPI_Datatype
-#define DLOOP_Type MPI_Datatype
-#define DLOOP_Buffer void *
-#define DLOOP_VECTOR MPL_IOV
-#define DLOOP_VECTOR_LEN MPL_IOV_LEN
-#define DLOOP_VECTOR_BUF MPL_IOV_BUF
-#define DLOOP_Size MPI_Aint
-
-/* The following accessor functions must also be defined:
- *
- * DLOOP_Handle_extent()
- * DLOOP_Handle_size()
- * DLOOP_Handle_loopptr()
- * DLOOP_Handle_loopdepth()
- * DLOOP_Handle_hasloop()
- *
- */
-
-/* USE THE NOTATION THAT BILL USED IN MPIIMPL.H AND MAKE THESE MACROS */
-
-/* NOTE: put get size into mpiimpl.h; the others go here until such time
- * as we see that we need them elsewhere.
- */
-#define DLOOP_Handle_get_loopdepth_macro(handle_,depth_,flag_) \
- MPID_Datatype_get_loopdepth_macro(handle_,depth_,flag_)
-
-#define DLOOP_Handle_get_loopsize_macro(handle_,size_,flag_) \
- MPID_Datatype_get_loopsize_macro(handle_,size_,flag_)
-
-#define DLOOP_Handle_set_loopptr_macro(handle_,lptr_,flag_) \
- MPID_Datatype_set_loopptr_macro(handle_,lptr_,flag_)
-
-#define DLOOP_Handle_set_loopdepth_macro(handle_,depth_,flag_) \
- MPID_Datatype_set_loopdepth_macro(handle_,depth_,flag_)
-
-#define DLOOP_Handle_set_loopsize_macro(handle_,size_,flag_) \
- MPID_Datatype_set_loopsize_macro(handle_,size_,flag_)
-
-#define DLOOP_Handle_get_loopptr_macro(handle_,lptr_,flag_) \
- MPID_Datatype_get_loopptr_macro(handle_,lptr_,flag_)
-
-#define DLOOP_Handle_get_size_macro(handle_,size_) \
- MPID_Datatype_get_size_macro(handle_,size_)
-
-#define DLOOP_Handle_get_basic_type_macro(handle_,basic_type_) \
- MPID_Datatype_get_basic_type(handle_, basic_type_)
-
-#define DLOOP_Handle_get_extent_macro(handle_,extent_) \
- MPID_Datatype_get_extent_macro(handle_,extent_)
-
-#define DLOOP_Handle_hasloop_macro(handle_) \
- ((HANDLE_GET_KIND(handle_) == HANDLE_KIND_BUILTIN) ? 0 : 1)
-
-#define DLOOP_Ensure_Offset_fits_in_pointer(value_) \
- MPIU_Ensure_Aint_fits_in_pointer(value_)
-
-/* allocate and free functions must also be defined. */
-#define DLOOP_Malloc MPIU_Malloc
-#define DLOOP_Free MPIU_Free
-
-/* debugging output function */
-#define DLOOP_dbg_printf MPIU_dbg_printf
-
-/* assert function */
-#define DLOOP_Assert MPIU_Assert
-
-/* memory copy function */
-#define DLOOP_Memcpy MPIU_Memcpy
-
-/* casting macros */
-#define DLOOP_OFFSET_CAST_TO_VOID_PTR MPIU_AINT_CAST_TO_VOID_PTR
-#define DLOOP_VOID_PTR_CAST_TO_OFFSET MPIU_VOID_PTR_CAST_TO_MPI_AINT
-#define DLOOP_PTR_DISP_CAST_TO_OFFSET MPIU_PTR_DISP_CAST_TO_MPI_AINT
-
-/* printing macros */
-#define DLOOP_OFFSET_FMT_DEC_SPEC MPI_AINT_FMT_DEC_SPEC
-#define DLOOP_OFFSET_FMT_HEX_SPEC MPI_AINT_FMT_HEX_SPEC
-
-/* Include dataloop_parts.h at the end to get the rest of the prototypes
- * and defines, in terms of the prefixes and types above.
- */
-#include "dataloop/dataloop_parts.h"
-#include "dataloop/dataloop_create.h"
-
-/* These values are defined by DLOOP code.
- *
- * Note: DLOOP_DATALOOP_ALL_BYTES is used only when the device
- * defines MPID_NEEDS_DLOOP_ALL_BYTES.
- */
-#define MPID_DATALOOP_HETEROGENEOUS DLOOP_DATALOOP_HETEROGENEOUS
-#define MPID_DATALOOP_HOMOGENEOUS DLOOP_DATALOOP_HOMOGENEOUS
-#define MPID_DATALOOP_ALL_BYTES DLOOP_DATALOOP_ALL_BYTES
-
-#include <mpiimpl.h>
-
-#endif
diff --git a/src/mpid/common/datatype/mpid_datatype.h b/src/mpid/common/datatype/mpid_datatype.h
deleted file mode 100644
index 073fd32..0000000
--- a/src/mpid/common/datatype/mpid_datatype.h
+++ /dev/null
@@ -1,760 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPID_DATATYPE_H
-#define MPID_DATATYPE_H
-
-#include "mpiimpl.h"
-#include "mpid_dataloop.h"
-#include "mpihandlemem.h"
-
-/* NOTE:
- * - struct MPID_Dataloop and MPID_Segment are defined in
- * src/mpid/common/datatype/mpid_dataloop.h (and gen_dataloop.h).
- * - MPIU_Object_alloc_t is defined in src/include/mpihandle.h
- */
-
-#define MPID_Datatype_get_ptr(a,ptr) MPID_Getb_ptr(Datatype,a,0x000000ff,ptr)
-/* MPID_Datatype_get_basic_id() is useful for creating and indexing into arrays
- that store data on a per-basic type basis */
-#define MPID_Datatype_get_basic_id(a) ((a)&0x000000ff)
-#define MPID_Datatype_get_basic_size(a) (((a)&0x0000ff00)>>8)
-
-#define MPID_Datatype_add_ref(datatype_ptr) MPIU_Object_add_ref((datatype_ptr))
-
-#define MPID_Datatype_get_basic_type(a,basic_type_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- basic_type_ = ((MPID_Datatype *) ptr)->basic_type; \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- basic_type_ = ((MPID_Datatype *) ptr)->basic_type; \
- break; \
- case HANDLE_KIND_BUILTIN: \
- basic_type_ = a; \
- break; \
- case HANDLE_KIND_INVALID: \
- default: \
- basic_type_ = 0; \
- break; \
- \
- } \
- /* This macro returns the builtin type, if 'basic_type' is not \
- * a builtin type, it must be a pair type composed of different \
- * builtin types, so we return MPI_DATATYPE_NULL here. \
- */ \
- if (HANDLE_GET_KIND(basic_type_) != HANDLE_KIND_BUILTIN) \
- basic_type_ = MPI_DATATYPE_NULL; \
- } while(0)
-
-/* MPID_Datatype_release decrements the reference count on the MPID_Datatype
- * and, if the refct is then zero, frees the MPID_Datatype and associated
- * structures.
- */
-#define MPID_Datatype_release(datatype_ptr) do { \
- int inuse_; \
- \
- MPIU_Object_release_ref((datatype_ptr),&inuse_); \
- if (!inuse_) { \
- int lmpi_errno = MPI_SUCCESS; \
- if (MPIR_Process.attr_free && datatype_ptr->attributes) { \
- lmpi_errno = MPIR_Process.attr_free( datatype_ptr->handle, \
- &datatype_ptr->attributes ); \
- } \
- /* LEAVE THIS COMMENTED OUT UNTIL WE HAVE SOME USE FOR THE FREE_FN \
- if (datatype_ptr->free_fn) { \
- mpi_errno = (datatype_ptr->free_fn)( datatype_ptr ); \
- if (mpi_errno) { \
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_TYPE_FREE); \
- return MPIR_Err_return_comm( 0, FCNAME, mpi_errno ); \
- } \
- } */ \
- if (lmpi_errno == MPI_SUCCESS) { \
- MPID_Datatype_free(datatype_ptr); \
- } \
- } \
-} while(0)
-
-/* Note: Probably there is some clever way to build all of these from a macro.
- */
-#define MPID_Datatype_get_size_macro(a,size_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- size_ = ((MPID_Datatype *) ptr)->size; \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- size_ = ((MPID_Datatype *) ptr)->size; \
- break; \
- case HANDLE_KIND_BUILTIN: \
- size_ = MPID_Datatype_get_basic_size(a); \
- break; \
- case HANDLE_KIND_INVALID: \
- default: \
- size_ = 0; \
- break; \
- \
- } \
-} while(0)
-
-/*
- * The following macro allows us to reference either the regular or
- * hetero value for the 3 fields (NULL,_size,_depth) in the
- * MPID_Datatype structure. This is used in the many
- * macros that access fields of the datatype. We need this macro
- * to simplify the definition of the other macros in the case where
- * MPID_HAS_HETERO is *not* defined.
- */
-#if defined(MPID_HAS_HETERO) || 1
-#define MPID_GET_FIELD(hetero_,value_,fieldname_) do { \
- if (hetero_ != MPID_DATALOOP_HETEROGENEOUS) \
- value_ = ((MPID_Datatype *)ptr)->dataloop##fieldname_; \
- else value_ = ((MPID_Datatype *) ptr)->hetero_dloop##fieldname_; \
- } while(0)
-#else
-#define MPID_GET_FIELD(hetero_,value_,fieldname_) \
- value_ = ((MPID_Datatype *)ptr)->dataloop##fieldname_
-#endif
-
-#if defined(MPID_HAS_HETERO) || 1
-#define MPID_SET_FIELD(hetero_,value_,fieldname_) do { \
- if (hetero_ != MPID_DATALOOP_HETEROGENEOUS) \
- ((MPID_Datatype *)ptr)->dataloop##fieldname_ = value_; \
- else ((MPID_Datatype *) ptr)->hetero_dloop##fieldname_ = value_; \
- } while(0)
-#else
-#define MPID_SET_FIELD(hetero_,value_,fieldname_) \
- ((MPID_Datatype *)ptr)->dataloop##fieldname_ = value_
-#endif
-
-#define MPID_Datatype_get_loopdepth_macro(a,depth_,hetero_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- MPID_GET_FIELD(hetero_,depth_,_depth); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- MPID_GET_FIELD(hetero_,depth_,_depth); \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- depth_ = 0; \
- break; \
- } \
-} while(0)
-
-#define MPID_Datatype_get_loopsize_macro(a,depth_,hetero_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- MPID_GET_FIELD(hetero_,depth_,_size); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- MPID_GET_FIELD(hetero_,depth_,_size); \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- depth_ = 0; \
- break; \
- } \
-} while(0)
-
-#define MPID_Datatype_get_loopptr_macro(a,lptr_,hetero_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- MPID_GET_FIELD(hetero_,lptr_,); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- MPID_GET_FIELD(hetero_,lptr_,); \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- lptr_ = 0; \
- break; \
- } \
-} while(0)
-#define MPID_Datatype_set_loopdepth_macro(a,depth_,hetero_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- MPID_SET_FIELD(hetero_,depth_,_depth); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- MPID_SET_FIELD(hetero_,depth_,_depth); \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- depth_ = 0; \
- break; \
- } \
-} while(0)
-
-#define MPID_Datatype_set_loopsize_macro(a,depth_,hetero_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- MPID_SET_FIELD(hetero_,depth_,_size); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- MPID_SET_FIELD(hetero_,depth_,_size); \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- depth_ = 0; \
- break; \
- } \
-} while(0)
-
-#define MPID_Datatype_set_loopptr_macro(a,lptr_,hetero_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- MPID_SET_FIELD(hetero_,lptr_,); \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- MPID_SET_FIELD(hetero_,lptr_,); \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- lptr_ = 0; \
- break; \
- } \
-} while(0)
-
-#define MPID_Datatype_get_extent_macro(a,extent_) do { \
- void *ptr; \
- switch (HANDLE_GET_KIND(a)) { \
- case HANDLE_KIND_DIRECT: \
- ptr = MPID_Datatype_direct+HANDLE_INDEX(a); \
- extent_ = ((MPID_Datatype *) ptr)->extent; \
- break; \
- case HANDLE_KIND_INDIRECT: \
- ptr = ((MPID_Datatype *) \
- MPIU_Handle_get_ptr_indirect(a,&MPID_Datatype_mem)); \
- extent_ = ((MPID_Datatype *) ptr)->extent; \
- break; \
- case HANDLE_KIND_INVALID: \
- case HANDLE_KIND_BUILTIN: \
- default: \
- extent_ = MPID_Datatype_get_basic_size(a); /* same as size */ \
- break; \
- } \
-} while(0)
-
-#define MPID_Datatype_valid_ptr(ptr,err) MPID_Valid_ptr_class(Datatype,ptr,MPI_ERR_TYPE,err)
-
-/* to be used only after MPID_Datatype_valid_ptr(); the check on
- * err == MPI_SUCCESS ensures that we won't try to dereference the
- * pointer if something has already been detected as wrong.
- */
-#define MPID_Datatype_committed_ptr(ptr,err) do { \
- if ((err == MPI_SUCCESS) && !((ptr)->is_committed)) \
- err = MPIR_Err_create_code(MPI_SUCCESS, \
- MPIR_ERR_RECOVERABLE, \
- FCNAME, \
- __LINE__, \
- MPI_ERR_TYPE, \
- "**dtypecommit", \
- 0); \
-} while(0)
-
-/*S
- MPID_Datatype_contents - Holds envelope and contents data for a given
- datatype
-
- Notes:
- Space is allocated beyond the structure itself in order to hold the
- arrays of types, ints, and aints, in that order.
-
- S*/
-typedef struct MPID_Datatype_contents {
- int combiner;
- int nr_ints;
- int nr_aints;
- int nr_types;
- /* space allocated beyond structure used to store the types[],
- * ints[], and aints[], in that order.
- */
-} MPID_Datatype_contents;
-
-/* Datatype Structure */
-/*S
- MPID_Datatype - Description of the MPID Datatype structure
-
- Notes:
- The 'ref_count' is needed for nonblocking operations such as
-.vb
- MPI_Type_struct( ... , &newtype );
- MPI_Irecv( buf, 1000, newtype, ..., &request );
- MPI_Type_free( &newtype );
- ...
- MPI_Wait( &request, &status );
-.ve
-
- Module:
- Datatype-DS
-
- Notes:
-
- Alternatives:
- The following alternatives for the layout of this structure were considered.
- Most were not chosen because any benefit in performance or memory
- efficiency was outweighed by the added complexity of the implementation.
-
- A number of fields contain only boolean inforation ('is_contig',
- 'has_sticky_ub', 'has_sticky_lb', 'is_permanent', 'is_committed'). These
- could be combined and stored in a single bit vector.
-
- 'MPI_Type_dup' could be implemented with a shallow copy, where most of the
- data fields, would not be copied into the new object created by
- 'MPI_Type_dup'; instead, the new object could point to the data fields in
- the old object. However, this requires more code to make sure that fields
- are found in the correct objects and that deleting the old object doesn't
- invalidate the dup'ed datatype.
-
- Originally we attempted to keep contents/envelope data in a non-optimized
- dataloop. The subarray and darray types were particularly problematic,
- and eventually we decided it would be simpler to just keep contents/
- envelope data in arrays separately.
-
- Earlier versions of the ADI used a single API to change the 'ref_count',
- with each MPI object type having a separate routine. Since reference
- count changes are always up or down one, and since all MPI objects
- are defined to have the 'ref_count' field in the same place, the current
- ADI3 API uses two routines, 'MPIU_Object_add_ref' and
- 'MPIU_Object_release_ref', to increment and decrement the reference count.
-
- S*/
-typedef struct MPID_Datatype {
- /* handle and ref_count are filled in by MPIU_Handle_obj_alloc() */
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
-
- /* basic parameters for datatype, accessible via MPI calls */
- MPI_Aint size; /* MPI_Count could be 128 bits, so use MPI_Aint */
- MPI_Aint extent, ub, lb, true_ub, true_lb;
-
- /* chars affecting subsequent datatype processing and creation */
- MPI_Aint alignsize;
- int has_sticky_ub, has_sticky_lb;
- int is_permanent; /* non-zero if datatype is a predefined type */
- int is_committed;
-
- /* element information; used for accumulate and get elements
- * basic_type: describes basic type (predefined type). If the
- * type is composed of the same basic type, it is
- * set to that type, otherwise it is set to MPI_DATATYPE_NULL.
- * n_builtin_elements: refers to the number of builtin type elements.
- * builtin_element_size: refers to the size of builtin type. If the
- * type is composed of the same builtin type,
- * it is set to size of that type, otherwise it
- * is set to -1.
- */
- int basic_type;
- MPI_Aint n_builtin_elements;
- MPI_Aint builtin_element_size;
-
- /* information on contiguity of type, for processing shortcuts.
- *
- * is_contig is non-zero only if N instances of the type would be
- * contiguous.
- */
- int is_contig;
- /* Upper bound on the number of contig blocks for one instance.
- * It is not trivial to calculate the *real* number of contig
- * blocks in the case where old datatype is non-contiguous
- */
- MPI_Aint max_contig_blocks;
-
- /* pointer to contents and envelope data for the datatype */
- MPID_Datatype_contents *contents;
-
- /* dataloop members, including a pointer to the loop, the size in bytes,
- * and a depth used to verify that we can process it (limited stack depth
- */
- struct MPID_Dataloop *dataloop; /* might be optimized for homogenous */
- MPI_Aint dataloop_size;
- int dataloop_depth;
-#if defined(MPID_HAS_HETERO) || 1
- struct MPID_Dataloop *hetero_dloop; /* heterogeneous dataloop */
- MPI_Aint hetero_dloop_size;
- int hetero_dloop_depth;
-#endif /* MPID_HAS_HETERO */
- /* MPI-2 attributes and name */
- struct MPID_Attribute *attributes;
- char name[MPI_MAX_OBJECT_NAME];
-
- /* not yet used; will be used to track what processes have cached
- * copies of this type.
- */
- int32_t cache_id;
- /* MPID_Lpidmask mask; */
-
- /* int (*free_fn)( struct MPID_Datatype * ); */ /* Function to free this datatype */
-
- /* Other, device-specific information */
-#ifdef MPID_DEV_DATATYPE_DECL
- MPID_DEV_DATATYPE_DECL
-#endif
-} MPID_Datatype;
-
-extern MPIU_Object_alloc_t MPID_Datatype_mem;
-
-/* Preallocated datatype objects */
-/* This value should be set to greatest value used as the type index suffix in
- * the predefined handles. That is, look at the last two hex digits of all
- * predefined datatype handles, take the greatest one, and convert it to decimal
- * here. */
-/* FIXME calculating this value this way is foolish, we should make this more
- * automatic and less error prone */
-/* FIXME: Given that this is relatively static, an adequate alternative is
- to provide a check that this value is valid. */
-#define MPID_DATATYPE_N_BUILTIN 69
-extern MPID_Datatype MPID_Datatype_builtin[MPID_DATATYPE_N_BUILTIN + 1];
-extern MPID_Datatype MPID_Datatype_direct[];
-
-#define MPID_DTYPE_BEGINNING 0
-#define MPID_DTYPE_END -1
-
-/* LB/UB calculation helper macros */
-
-/* MPID_DATATYPE_CONTIG_LB_UB()
- *
- * Determines the new LB and UB for a block of old types given the
- * old type's LB, UB, and extent, and a count of these types in the
- * block.
- *
- * Note: if the displacement is non-zero, the MPID_DATATYPE_BLOCK_LB_UB()
- * should be used instead (see below).
- */
-#define MPID_DATATYPE_CONTIG_LB_UB(cnt_, \
- old_lb_, \
- old_ub_, \
- old_extent_, \
- lb_, \
- ub_) \
-do { \
- if (cnt_ == 0) { \
- lb_ = old_lb_; \
- ub_ = old_ub_; \
- } \
- else if (old_ub_ >= old_lb_) { \
- lb_ = old_lb_; \
- ub_ = old_ub_ + (old_extent_) * (cnt_ - 1); \
- } \
- else /* negative extent */ { \
- lb_ = old_lb_ + (old_extent_) * (cnt_ - 1); \
- ub_ = old_ub_; \
- } \
-} while(0)
-
-/* MPID_DATATYPE_VECTOR_LB_UB()
- *
- * Determines the new LB and UB for a vector of blocks of old types
- * given the old type's LB, UB, and extent, and a count, stride, and
- * blocklen describing the vectorization.
- */
-#define MPID_DATATYPE_VECTOR_LB_UB(cnt_, \
- stride_, \
- blklen_, \
- old_lb_, \
- old_ub_, \
- old_extent_, \
- lb_, \
- ub_) \
-do { \
- if (cnt_ == 0 || blklen_ == 0) { \
- lb_ = old_lb_; \
- ub_ = old_ub_; \
- } \
- else if (stride_ >= 0 && (old_extent_) >= 0) { \
- lb_ = old_lb_; \
- ub_ = old_ub_ + (old_extent_) * ((blklen_) - 1) + \
- (stride_) * ((cnt_) - 1); \
- } \
- else if (stride_ < 0 && (old_extent_) >= 0) { \
- lb_ = old_lb_ + (stride_) * ((cnt_) - 1); \
- ub_ = old_ub_ + (old_extent_) * ((blklen_) - 1); \
- } \
- else if (stride_ >= 0 && (old_extent_) < 0) { \
- lb_ = old_lb_ + (old_extent_) * ((blklen_) - 1); \
- ub_ = old_ub_ + (stride_) * ((cnt_) - 1); \
- } \
- else { \
- lb_ = old_lb_ + (old_extent_) * ((blklen_) - 1) + \
- (stride_) * ((cnt_) - 1); \
- ub_ = old_ub_; \
- } \
-} while(0)
-
-/* MPID_DATATYPE_BLOCK_LB_UB()
- *
- * Determines the new LB and UB for a block of old types given the LB,
- * UB, and extent of the old type as well as a new displacement and count
- * of types.
- *
- * Note: we need the extent here in addition to the lb and ub because the
- * extent might have some padding in it that we need to take into account.
- */
-#define MPID_DATATYPE_BLOCK_LB_UB(cnt_, \
- disp_, \
- old_lb_, \
- old_ub_, \
- old_extent_, \
- lb_, \
- ub_) \
-do { \
- if (cnt_ == 0) { \
- lb_ = old_lb_ + (disp_); \
- ub_ = old_ub_ + (disp_); \
- } \
- else if (old_ub_ >= old_lb_) { \
- lb_ = old_lb_ + (disp_); \
- ub_ = old_ub_ + (disp_) + (old_extent_) * ((cnt_) - 1); \
- } \
- else /* negative extent */ { \
- lb_ = old_lb_ + (disp_) + (old_extent_) * ((cnt_) - 1); \
- ub_ = old_ub_ + (disp_); \
- } \
-} while(0)
-
-/* helper macro: takes an MPI_Datatype handle value and returns TRUE in
- * (*is_config_) if the type is contiguous */
-#define MPID_Datatype_is_contig(dtype_, is_contig_) \
- do { \
- if (HANDLE_GET_KIND(dtype_) == HANDLE_KIND_BUILTIN) { \
- *(is_contig_) = TRUE; \
- } \
- else { \
- MPID_Datatype *dtp_ = NULL; \
- MPID_Datatype_get_ptr((dtype_), dtp_); \
- *(is_contig_) = dtp_->is_contig; \
- } \
- } while (0)
-
-/* helper macro: takes an MPI_Datatype handle value and returns true_lb in
- * (*true_lb_) */
-#define MPID_Datatype_get_true_lb(dtype_, true_lb_) \
- do { \
- if (HANDLE_GET_KIND(dtype_) == HANDLE_KIND_BUILTIN) { \
- *(true_lb_) = 0; \
- } \
- else { \
- MPID_Datatype *dtp_ = NULL; \
- MPID_Datatype_get_ptr((dtype_), dtp_); \
- *(true_lb_) = dtp_->true_lb; \
- } \
- } while (0)
-
-/* Datatype functions */
-int MPID_Type_commit(MPI_Datatype *type);
-
-int MPID_Type_dup(MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-
-int MPID_Type_struct(int count,
- const int *blocklength_array,
- const MPI_Aint *displacement_array,
- const MPI_Datatype *oldtype_array,
- MPI_Datatype *newtype);
-
-int MPID_Type_indexed(int count,
- const int *blocklength_array,
- const void *displacement_array,
- int dispinbytes,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-
-int MPID_Type_blockindexed(int count,
- int blocklength,
- const void *displacement_array,
- int dispinbytes,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-
-int MPID_Type_vector(int count,
- int blocklength,
- MPI_Aint stride,
- int strideinbytes,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-
-int MPID_Type_contiguous(int count,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype);
-
-int MPID_Type_zerolen(MPI_Datatype *newtype);
-
-int MPID_Type_create_resized(MPI_Datatype oldtype,
- MPI_Aint lb,
- MPI_Aint extent,
- MPI_Datatype *newtype);
-
-int MPID_Type_get_envelope(MPI_Datatype datatype,
- int *num_integers,
- int *num_addresses,
- int *num_datatypes,
- int *combiner);
-
-int MPID_Type_get_contents(MPI_Datatype datatype,
- int max_integers,
- int max_addresses,
- int max_datatypes,
- int array_of_integers[],
- MPI_Aint array_of_addresses[],
- MPI_Datatype array_of_datatypes[]);
-
-int MPID_Type_create_pairtype(MPI_Datatype datatype,
- MPID_Datatype *new_dtp);
-
-/* internal debugging functions */
-void MPIDI_Datatype_printf(MPI_Datatype type,
- int depth,
- MPI_Aint displacement,
- int blocklength,
- int header);
-
-/* Dataloop functions */
-void MPID_Dataloop_copy(void *dest,
- void *src,
- MPI_Aint size);
-
-void MPID_Dataloop_print(struct MPID_Dataloop *dataloop,
- int depth);
-
-void MPID_Dataloop_alloc(int kind,
- MPI_Aint count,
- DLOOP_Dataloop **new_loop_p,
- MPI_Aint *new_loop_sz_p);
-
-void MPID_Dataloop_alloc_and_copy(int kind,
- MPI_Aint count,
- struct DLOOP_Dataloop *old_loop,
- MPI_Aint old_loop_sz,
- struct DLOOP_Dataloop **new_loop_p,
- MPI_Aint *new_loop_sz_p);
-void MPID_Dataloop_struct_alloc(MPI_Aint count,
- MPI_Aint old_loop_sz,
- int basic_ct,
- DLOOP_Dataloop **old_loop_p,
- DLOOP_Dataloop **new_loop_p,
- MPI_Aint *new_loop_sz_p);
-void MPID_Dataloop_dup(DLOOP_Dataloop *old_loop,
- MPI_Aint old_loop_sz,
- DLOOP_Dataloop **new_loop_p);
-void MPID_Dataloop_free(struct MPID_Dataloop **dataloop);
-
-/* Segment functions specific to MPICH */
-void MPID_Segment_pack_vector(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_VECTOR *vector,
- int *lengthp);
-
-void MPID_Segment_unpack_vector(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_VECTOR *vector,
- int *lengthp);
-
-void MPID_Segment_flatten(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_Offset *offp,
- DLOOP_Size *sizep,
- DLOOP_Offset *lengthp);
-
-/* misc */
-int MPID_Datatype_set_contents(struct MPID_Datatype *ptr,
- int combiner,
- int nr_ints,
- int nr_aints,
- int nr_types,
- int *ints,
- const MPI_Aint *aints,
- const MPI_Datatype *types);
-
-void MPID_Datatype_free_contents(struct MPID_Datatype *ptr);
-void MPIDI_Datatype_get_contents_aints(MPID_Datatype_contents *cp,
- MPI_Aint *user_aints);
-void MPIDI_Datatype_get_contents_types(MPID_Datatype_contents *cp,
- MPI_Datatype *user_types);
-void MPIDI_Datatype_get_contents_ints(MPID_Datatype_contents *cp,
- int *user_ints);
-
-void MPID_Datatype_free(struct MPID_Datatype *ptr);
-
-void MPID_Dataloop_update(struct DLOOP_Dataloop *dataloop,
- MPI_Aint ptrdiff);
-
-MPI_Count MPIR_Type_get_contig_blocks(MPI_Datatype type,
- MPI_Count *nr_blocks_p);
-
-int MPIR_Type_flatten(MPI_Datatype type,
- MPI_Aint *off_array,
- DLOOP_Size *size_array,
- MPI_Aint *array_len_p);
-
-void MPID_Segment_pack_external32(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- void *pack_buffer);
-
-void MPID_Segment_unpack_external32(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_Buffer unpack_buffer);
-
-MPI_Aint MPID_Datatype_size_external32(MPI_Datatype type);
-MPI_Aint MPIDI_Datatype_get_basic_size_external32(MPI_Datatype el_type);
-
-/* debugging helper functions */
-char *MPIDU_Datatype_builtin_to_string(MPI_Datatype type);
-char *MPIDU_Datatype_combiner_to_string(int combiner);
-void MPIDU_Datatype_debug(MPI_Datatype type, int array_ct);
-
-/* contents accessor functions */
-void MPID_Type_access_contents(MPI_Datatype type,
- int **ints_p,
- MPI_Aint **aints_p,
- MPI_Datatype **types_p);
-void MPID_Type_release_contents(MPI_Datatype type,
- int **ints_p,
- MPI_Aint **aints_p,
- MPI_Datatype **types_p);
-
-/* end of file */
-#endif
diff --git a/src/mpid/common/datatype/mpid_datatype_contents.c b/src/mpid/common/datatype/mpid_datatype_contents.c
deleted file mode 100644
index 8cf924c..0000000
--- a/src/mpid/common/datatype/mpid_datatype_contents.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-#include <limits.h>
-
-/*@
- MPID_Datatype_set_contents - store contents information for use in
- MPI_Type_get_contents.
-
- Returns MPI_SUCCESS on success, MPI error code on error.
-@*/
-int MPID_Datatype_set_contents(MPID_Datatype *new_dtp,
- int combiner,
- int nr_ints,
- int nr_aints,
- int nr_types,
- int array_of_ints[],
- const MPI_Aint array_of_aints[],
- const MPI_Datatype array_of_types[])
-{
- int i, contents_size, align_sz = 8, epsilon, mpi_errno;
- int struct_sz, ints_sz, aints_sz, types_sz;
- MPID_Datatype_contents *cp;
- MPID_Datatype *old_dtp;
- char *ptr;
-
-#ifdef HAVE_MAX_STRUCT_ALIGNMENT
- if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
- align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
- }
-#endif
-
- struct_sz = sizeof(MPID_Datatype_contents);
- types_sz = nr_types * sizeof(MPI_Datatype);
- ints_sz = nr_ints * sizeof(int);
- aints_sz = nr_aints * sizeof(MPI_Aint);
-
- /* pad the struct, types, and ints before we allocate.
- *
- * note: it's not necessary that we pad the aints,
- * because they are last in the region.
- */
- if ((epsilon = struct_sz % align_sz)) {
- struct_sz += align_sz - epsilon;
- }
- if ((epsilon = types_sz % align_sz)) {
- types_sz += align_sz - epsilon;
- }
- if ((epsilon = ints_sz % align_sz)) {
- ints_sz += align_sz - epsilon;
- }
-
- contents_size = struct_sz + types_sz + ints_sz + aints_sz;
-
- cp = (MPID_Datatype_contents *) MPIU_Malloc(contents_size);
- /* --BEGIN ERROR HANDLING-- */
- if (cp == NULL) {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "MPID_Datatype_set_contents",
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem",
- 0);
- return mpi_errno;
- }
- /* --END ERROR HANDLING-- */
-
- cp->combiner = combiner;
- cp->nr_ints = nr_ints;
- cp->nr_aints = nr_aints;
- cp->nr_types = nr_types;
-
- /* arrays are stored in the following order: types, ints, aints,
- * following the structure itself.
- */
- ptr = ((char *) cp) + struct_sz;
- /* Fortran90 combiner types do not have a "base" type */
- if (nr_types > 0) {
- MPIU_Memcpy(ptr, array_of_types, nr_types * sizeof(MPI_Datatype));
- }
-
- ptr = ((char *) cp) + struct_sz + types_sz;
- if (nr_ints > 0) {
- MPIU_Memcpy(ptr, array_of_ints, nr_ints * sizeof(int));
- }
-
- ptr = ((char *) cp) + struct_sz + types_sz + ints_sz;
- if (nr_aints > 0) {
- MPIU_Memcpy(ptr, array_of_aints, nr_aints * sizeof(MPI_Aint));
- }
- new_dtp->contents = cp;
-
- /* increment reference counts on all the derived types used here */
- for (i=0; i < nr_types; i++) {
- if (HANDLE_GET_KIND(array_of_types[i]) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype_get_ptr(array_of_types[i], old_dtp);
- MPID_Datatype_add_ref(old_dtp);
- }
- }
-
- return MPI_SUCCESS;
-}
-
-void MPID_Datatype_free_contents(MPID_Datatype *dtp)
-{
- int i, struct_sz = sizeof(MPID_Datatype_contents);
- int align_sz = 8, epsilon;
- MPID_Datatype *old_dtp;
- MPI_Datatype *array_of_types;
-
- if ((epsilon = struct_sz % align_sz)) {
- struct_sz += align_sz - epsilon;
- }
-
- /* note: relies on types being first after structure */
- array_of_types = (MPI_Datatype *) ((char *)dtp->contents + struct_sz);
-
- for (i=0; i < dtp->contents->nr_types; i++) {
- if (HANDLE_GET_KIND(array_of_types[i]) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype_get_ptr(array_of_types[i], old_dtp);
- MPID_Datatype_release(old_dtp);
- }
- }
-
- MPIU_Free(dtp->contents);
- dtp->contents = NULL;
-}
-
-void MPIDI_Datatype_get_contents_ints(MPID_Datatype_contents *cp,
- int *user_ints)
-{
- char *ptr;
- int align_sz = 8, epsilon;
- int struct_sz, types_sz;
-
-#ifdef HAVE_MAX_STRUCT_ALIGNMENT
- if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
- align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
- }
-#endif
-
- struct_sz = sizeof(MPID_Datatype_contents);
- types_sz = cp->nr_types * sizeof(MPI_Datatype);
-
- /* pad the struct, types, and ints before we allocate.
- *
- * note: it's not necessary that we pad the aints,
- * because they are last in the region.
- */
- if ((epsilon = struct_sz % align_sz)) {
- struct_sz += align_sz - epsilon;
- }
- if ((epsilon = types_sz % align_sz)) {
- types_sz += align_sz - epsilon;
- }
-
- ptr = ((char *) cp) + struct_sz + types_sz;
- MPIU_Memcpy(user_ints, ptr, cp->nr_ints * sizeof(int));
-
- return;
-}
-
-void MPIDI_Datatype_get_contents_aints(MPID_Datatype_contents *cp,
- MPI_Aint *user_aints)
-{
- char *ptr;
- int align_sz = 8, epsilon;
- int struct_sz, ints_sz, types_sz;
-
-#ifdef HAVE_MAX_STRUCT_ALIGNMENT
- if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
- align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
- }
-#endif
-
- struct_sz = sizeof(MPID_Datatype_contents);
- types_sz = cp->nr_types * sizeof(MPI_Datatype);
- ints_sz = cp->nr_ints * sizeof(int);
-
- /* pad the struct, types, and ints before we allocate.
- *
- * note: it's not necessary that we pad the aints,
- * because they are last in the region.
- */
- if ((epsilon = struct_sz % align_sz)) {
- struct_sz += align_sz - epsilon;
- }
- if ((epsilon = types_sz % align_sz)) {
- types_sz += align_sz - epsilon;
- }
- if ((epsilon = ints_sz % align_sz)) {
- ints_sz += align_sz - epsilon;
- }
-
- ptr = ((char *) cp) + struct_sz + types_sz + ints_sz;
- MPIU_Memcpy(user_aints, ptr, cp->nr_aints * sizeof(MPI_Aint));
-
- return;
-}
-
-void MPIDI_Datatype_get_contents_types(MPID_Datatype_contents *cp,
- MPI_Datatype *user_types)
-{
- char *ptr;
- int align_sz = 8, epsilon;
- int struct_sz;
-
-#ifdef HAVE_MAX_STRUCT_ALIGNMENT
- if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
- align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
- }
-#endif
-
- struct_sz = sizeof(MPID_Datatype_contents);
-
- /* pad the struct, types, and ints before we allocate.
- *
- * note: it's not necessary that we pad the aints,
- * because they are last in the region.
- */
- if ((epsilon = struct_sz % align_sz)) {
- struct_sz += align_sz - epsilon;
- }
-
- ptr = ((char *) cp) + struct_sz;
- MPIU_Memcpy(user_types, ptr, cp->nr_types * sizeof(MPI_Datatype));
-
- return;
-}
diff --git a/src/mpid/common/datatype/mpid_datatype_fallback.h b/src/mpid/common/datatype/mpid_datatype_fallback.h
new file mode 100644
index 0000000..0ac6da7
--- /dev/null
+++ b/src/mpid/common/datatype/mpid_datatype_fallback.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPIR_DATATYPE_FALLBACK_H_INCLUDED
+#define MPIR_DATATYPE_FALLBACK_H_INCLUDED
+
+#include "mpidu_datatype.h"
+
+/* Variables */
+#define MPIR_Datatype_direct MPIDU_Datatype_direct
+#define MPIR_Datatype_builtin MPIDU_Datatype_builtin
+#define MPIR_Datatype_mem MPIDU_Datatype_mem
+
+/* Macros */
+#define MPIR_DATATYPE_N_BUILTIN MPIDU_DATATYPE_N_BUILTIN
+#define MPID_DTYPE_BEGINNING MPIDU_DTYPE_BEGINNING
+#define MPID_DTYPE_END MPIDU_DTYPE_END
+
+typedef MPIDU_Datatype MPIR_Datatype;
+typedef MPIDU_Datatype_contents MPIR_Datatype_contents;
+
+#define MPID_Datatype_add_ref MPIDU_Datatype_add_ref
+#define MPID_Datatype_committed_ptr MPIDU_Datatype_committed_ptr
+#define MPID_Datatype_get_basic_size MPIDU_Datatype_get_basic_size
+#define MPID_Datatype_get_basic_type MPIDU_Datatype_get_basic_type
+
+#define MPID_Datatype_get_ptr MPIDU_Datatype_get_ptr
+#define MPID_Datatype_get_size_macro MPIDU_Datatype_get_size_macro
+#define MPID_Datatype_get_extent_macro MPIDU_Datatype_get_extent_macro
+#define MPID_Datatype_is_contig MPIDU_Datatype_is_contig
+#define MPID_Datatype_release MPIDU_Datatype_release
+#define MPIR_Datatype_valid_ptr MPIDU_Datatype_valid_ptr
+
+#define MPID_Datatype_get_loopdepth_macro MPIDU_Datatype_get_loopdepth_macro
+#define MPID_Datatype_get_loopptr_macro MPIDU_Datatype_get_loopptr_macro
+#define MPID_Datatype_get_loopsize_macro MPIDU_Datatype_get_loopsize_macro
+#define MPID_Datatype_set_loopdepth_macro MPIDU_Datatype_set_loopdepth_macro
+#define MPID_Datatype_set_loopptr_macro MPIDU_Datatype_set_loopptr_macro
+#define MPID_Datatype_set_loopsize_macro MPIDU_Datatype_set_loopsize_macro
+
+#define MPID_Datatype_free MPIDU_Datatype_free
+#define MPID_Datatype_free_contents MPIDU_Datatype_free_contents
+#define MPID_Datatype_set_contents MPIDU_Datatype_set_contents
+#define MPID_Datatype_size_external32 MPIDU_Datatype_size_external32
+
+/* MPID_Segment */
+typedef struct DLOOP_Segment MPID_Segment; /* MPIDU_Segment */
+
+#define MPID_Segment_init MPIDU_Segment_init
+#define MPID_Segment_alloc MPIDU_Segment_alloc
+#define MPID_Segment_free MPIDU_Segment_free
+#define MPID_Segment_pack MPIDU_Segment_pack
+#define MPID_Segment_unpack MPIDU_Segment_unpack
+#define MPID_Segment_pack_external32 MPIDU_Segment_pack_external32
+#define MPID_Segment_unpack_external32 MPIDU_Segment_unpack_external32
+
+/* MPID_Type */
+#define MPID_Type_access_contents MPIDU_Type_access_contents
+#define MPID_Type_blockindexed MPIDU_Type_blockindexed
+#define MPID_Type_commit MPIDU_Type_commit
+#define MPID_Type_contiguous MPIDU_Type_contiguous
+#define MPID_Type_create_pairtype MPIDU_Type_create_pairtype
+#define MPID_Type_create_resized MPIDU_Type_create_resized
+#define MPID_Type_dup MPIDU_Type_dup
+#define MPID_Type_get_contents MPIDU_Type_get_contents
+#define MPID_Type_get_envelope MPIDU_Type_get_envelope
+#define MPID_Type_indexed MPIDU_Type_indexed
+#define MPID_Type_release_contents MPIDU_Type_release_contents
+#define MPID_Type_struct MPIDU_Type_struct
+#define MPID_Type_vector MPIDU_Type_vector
+#define MPID_Type_zerolen MPIDU_Type_zerolen
+
+#endif /* MPiD_DATATYPE_FALLBACK_H_INCLUDED */
diff --git a/src/mpid/common/datatype/mpid_datatype_free.c b/src/mpid/common/datatype/mpid_datatype_free.c
deleted file mode 100644
index e7bb965..0000000
--- a/src/mpid/common/datatype/mpid_datatype_free.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2002 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-#include <limits.h>
-
-/* #define MPID_TYPE_ALLOC_DEBUG */
-
-/*@
-
- MPID_Datatype_free
-
-Input Parameters:
-. MPID_Datatype ptr - pointer to MPID datatype structure that is no longer
- referenced
-
-Output Parameters:
- none
-
- Return Value:
- none
-
- This function handles freeing dynamically allocated memory associated with
- the datatype. In the process MPID_Datatype_free_contents() is also called,
- which handles decrementing reference counts to constituent types (in
- addition to freeing the space used for contents information).
- MPID_Datatype_free_contents() will call MPID_Datatype_free() on constituent
- types that are no longer referenced as well.
-
- @*/
-void MPID_Datatype_free(MPID_Datatype *ptr)
-{
- MPIU_DBG_MSG_P(DATATYPE,VERBOSE,"type %x freed.", ptr->handle);
-
-#ifdef MPID_Dev_datatype_destroy_hook
- MPID_Dev_datatype_destroy_hook(ptr);
-#endif /* MPID_Dev_datatype_destroy_hook */
-
- /* before freeing the contents, check whether the pointer is not
- null because it is null in the case of a datatype shipped to the target
- for RMA ops */
- if (ptr->contents) {
- MPID_Datatype_free_contents(ptr);
- }
- if (ptr->dataloop) {
- MPID_Dataloop_free(&(ptr->dataloop));
- }
-#if defined(MPID_HAS_HETERO) || 1
- if (ptr->hetero_dloop) {
- MPID_Dataloop_free(&(ptr->hetero_dloop));
- }
-#endif /* MPID_HAS_HETERO */
- MPIU_Handle_obj_free(&MPID_Datatype_mem, ptr);
-}
diff --git a/src/mpid/common/datatype/mpid_ext32_datatype.c b/src/mpid/common/datatype/mpid_ext32_datatype.c
deleted file mode 100644
index e8f8a84..0000000
--- a/src/mpid/common/datatype/mpid_ext32_datatype.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <mpichconf.h>
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-
-
-typedef struct external32_basic_size
-{
- MPI_Datatype el_type;
- MPI_Aint el_size;
-} external32_basic_size_t;
-
-static external32_basic_size_t external32_basic_size_array[] =
-{
- { MPI_PACKED, 1 },
- { MPI_BYTE, 1 },
- { MPI_CHAR, 1 },
- { MPI_UNSIGNED_CHAR, 1 },
- { MPI_SIGNED_CHAR, 1 },
- { MPI_WCHAR, 2 },
- { MPI_SHORT, 2 },
- { MPI_UNSIGNED_SHORT, 2 },
- { MPI_INT, 4 },
- { MPI_UNSIGNED, 4 },
- { MPI_LONG, 4 },
- { MPI_UNSIGNED_LONG, 4 },
- { MPI_LONG_LONG, 8 },
- { MPI_LONG_LONG_INT, 8 },
- { MPI_UNSIGNED_LONG_LONG, 8 },
- { MPI_FLOAT, 4 },
- { MPI_DOUBLE, 8 },
- { MPI_LONG_DOUBLE, 16 },
-
- { MPI_C_BOOL, 1 },
- { MPI_INT8_T, 1 },
- { MPI_INT16_T, 2 },
- { MPI_INT32_T, 4 },
- { MPI_INT64_T, 8 },
- { MPI_UINT8_T, 1 },
- { MPI_UINT16_T, 2 },
- { MPI_UINT32_T, 4 },
- { MPI_UINT64_T, 8 },
- { MPI_AINT, 8 },
- { MPI_COUNT, 8 },
- { MPI_OFFSET, 8 },
- { MPI_C_COMPLEX, 2*4 },
- { MPI_C_FLOAT_COMPLEX, 2*4 },
- { MPI_C_DOUBLE_COMPLEX, 2*8 },
- { MPI_C_LONG_DOUBLE_COMPLEX, 2*16 },
-
- { MPI_CHARACTER, 1 },
- { MPI_LOGICAL, 4 },
- { MPI_INTEGER, 4 },
- { MPI_REAL, 4 },
- { MPI_DOUBLE_PRECISION, 8 },
- { MPI_COMPLEX, 8 },
- { MPI_DOUBLE_COMPLEX, 16 },
-
- { MPI_INTEGER1, 1 },
- { MPI_INTEGER2, 2 },
- { MPI_INTEGER4, 4 },
- { MPI_INTEGER8, 8 },
- { MPI_INTEGER16, 16 },
-
- { MPI_REAL4, 4 },
- { MPI_REAL8, 8 },
- { MPI_REAL16, 16 },
-
- { MPI_COMPLEX8, 2*4 },
- { MPI_COMPLEX16, 2*8 },
- { MPI_COMPLEX32, 2*16 },
-
- { MPI_CXX_BOOL, 1 },
- { MPI_CXX_FLOAT_COMPLEX, 2*4 },
- { MPI_CXX_DOUBLE_COMPLEX, 2*8 },
- { MPI_CXX_LONG_DOUBLE_COMPLEX, 2*16 }
-};
-
-MPI_Aint MPIDI_Datatype_get_basic_size_external32(MPI_Datatype el_type)
-{
- MPI_Aint ret = (MPI_Aint) 0;
- unsigned int i = 0;
- for(i = 0; i < (sizeof(external32_basic_size_array) /
- sizeof(external32_basic_size_t)); i++)
- {
- if (external32_basic_size_array[i].el_type == el_type)
- {
- ret = external32_basic_size_array[i].el_size;
- break;
- }
- }
- return ret;
-}
-
-MPI_Aint MPID_Datatype_size_external32(MPI_Datatype type)
-{
- if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
- return MPIDI_Datatype_get_basic_size_external32(type);
- }
- else {
- MPID_Dataloop *dlp = NULL;
-
- MPID_Datatype_get_loopptr_macro(type, dlp, MPID_DATALOOP_HETEROGENEOUS);
-
- return MPID_Dataloop_stream_size(dlp,
- MPIDI_Datatype_get_basic_size_external32);
- }
-}
-
diff --git a/src/mpid/common/datatype/mpid_ext32_segment.c b/src/mpid/common/datatype/mpid_ext32_segment.c
deleted file mode 100644
index 120aaef..0000000
--- a/src/mpid/common/datatype/mpid_ext32_segment.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <mpichconf.h>
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-
-#undef MPID_SP_VERBOSE
-#undef MPID_SU_VERBOSE
-
-#include "mpid_ext32_segment.h"
-
-/* MPID_Segment_piece_params
- *
- * This structure is used to pass function-specific parameters into our
- * segment processing function. This allows us to get additional parameters
- * to the functions it calls without changing the prototype.
- */
-struct MPID_Segment_piece_params {
- union {
- struct {
- char *pack_buffer;
- } pack;
- struct {
- DLOOP_VECTOR *vectorp;
- int index;
- int length;
- } pack_vector;
- struct {
- int64_t *offp;
- int *sizep; /* see notes in Segment_flatten header */
- int index;
- int length;
- } flatten;
- struct {
- char *last_loc;
- int count;
- } contig_blocks;
- struct {
- char *unpack_buffer;
- } unpack;
- struct {
- int stream_off;
- } print;
- } u;
-};
-
-static inline int is_float_type(DLOOP_Type el_type)
-{
- return ((el_type == MPI_FLOAT) || (el_type == MPI_DOUBLE) ||
- (el_type == MPI_LONG_DOUBLE) ||
- (el_type == MPI_DOUBLE_PRECISION) ||
- (el_type == MPI_COMPLEX) || (el_type == MPI_DOUBLE_COMPLEX));
-/* (el_type == MPI_REAL4) || (el_type == MPI_REAL8) || */
-/* (el_type == MPI_REAL16)); */
-}
-
-static int external32_basic_convert(char *dest_buf,
- char *src_buf,
- int dest_el_size,
- int src_el_size,
- DLOOP_Offset count)
-{
- char *src_ptr = src_buf, *dest_ptr = dest_buf;
- char *src_end = (char *)(src_buf + ((int)count * src_el_size));
-
- MPIU_Assert(dest_buf && src_buf);
-
- if (src_el_size == dest_el_size)
- {
- if (src_el_size == 2)
- {
- while(src_ptr != src_end)
- {
- BASIC_convert16((*(TWO_BYTE_BASIC_TYPE *)src_ptr),
- (*(TWO_BYTE_BASIC_TYPE *)dest_ptr));
-
- src_ptr += src_el_size;
- dest_ptr += dest_el_size;
- }
- }
- else if (src_el_size == 4)
- {
- while(src_ptr != src_end)
- {
- BASIC_convert32((*(FOUR_BYTE_BASIC_TYPE *)src_ptr),
- (*(FOUR_BYTE_BASIC_TYPE *)dest_ptr));
-
- src_ptr += src_el_size;
- dest_ptr += dest_el_size;
- }
- }
- else if (src_el_size == 8)
- {
- while(src_ptr != src_end)
- {
- BASIC_convert64(src_ptr, dest_ptr);
-
- src_ptr += src_el_size;
- dest_ptr += dest_el_size;
- }
- }
- }
- else
- {
- /* TODO */
- MPL_error_printf( "Conversion of types whose size is not the same as the size in external32 is not supported\n" );
- MPID_Abort( 0, MPI_SUCCESS, 1, "Aborting with internal error" );
- /* There is no way to return an error code, so an abort is the
- only choice (the return value of this routine is not
- an error code) */
- }
- return 0;
-}
-
-static int external32_float_convert(char *dest_buf,
- char *src_buf,
- int dest_el_size,
- int src_el_size,
- int count)
-{
- char *src_ptr = src_buf, *dest_ptr = dest_buf;
- char *src_end = (char *)(src_buf + ((int)count * src_el_size));
-
- MPIU_Assert(dest_buf && src_buf);
-
- if (src_el_size == dest_el_size)
- {
- if (src_el_size == 4)
- {
- while(src_ptr != src_end)
- {
- FLOAT_convert((*(FOUR_BYTE_FLOAT_TYPE *)src_ptr),
- (*(FOUR_BYTE_FLOAT_TYPE *)dest_ptr));
-
- src_ptr += src_el_size;
- dest_ptr += dest_el_size;
- }
- }
- else if (src_el_size == 8)
- {
- while(src_ptr != src_end)
- {
- FLOAT_convert((*(EIGHT_BYTE_FLOAT_TYPE *)src_ptr),
- (*(EIGHT_BYTE_FLOAT_TYPE *)dest_ptr));
-
- src_ptr += src_el_size;
- dest_ptr += dest_el_size;
- }
- }
- }
- else
- {
- /* TODO */
- MPL_error_printf( "Conversion of types whose size is not the same as the size in external32 is not supported\n" );
- MPID_Abort( 0, MPI_SUCCESS, 1, "Aborting with internal error" );
- /* There is no way to return an error code, so an abort is the
- only choice (the return value of this routine is not
- an error code) */
- }
- return 0;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_contig_pack_external32_to_buf
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPID_Segment_contig_pack_external32_to_buf(DLOOP_Offset *blocks_p,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off,
- void *bufp,
- void *v_paramp)
-{
- int src_el_size, dest_el_size;
- struct MPID_Segment_piece_params *paramp = v_paramp;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF);
-
- src_el_size = MPID_Datatype_get_basic_size(el_type);
- dest_el_size = MPIDI_Datatype_get_basic_size_external32(el_type);
- MPIU_Assert(dest_el_size);
-
- /*
- * h = handle value
- * do = datatype buffer offset
- * dp = datatype buffer pointer
- * bp = pack buffer pointer (current location, incremented as we go)
- * sz = size of datatype (guess we could get this from handle value if
- * we wanted...)
- */
-#ifdef MPID_SP_VERBOSE
- dbg_printf("\t[contig pack [external32]: do=%d, dp=%x, bp=%x, "
- "src_el_sz=%d, dest_el_sz=%d, blksz=%d]\n",
- rel_off,
- (unsigned) bufp,
- (unsigned) paramp->u.pack.pack_buffer,
- src_el_size,
- dest_el_size,
- (int) *blocks_p);
-#endif
-
- /* TODO: DEAL WITH CASE WHERE ALL DATA DOESN'T FIT! */
- if ((src_el_size == dest_el_size) && (src_el_size == 1))
- {
- MPIU_Memcpy(paramp->u.pack.pack_buffer,
- ((char *) bufp) + rel_off, *blocks_p);
- }
- else if (is_float_type(el_type))
- {
- external32_float_convert(paramp->u.pack.pack_buffer,
- ((char *) bufp) + rel_off,
- dest_el_size, src_el_size, *blocks_p);
- }
- else
- {
- external32_basic_convert(paramp->u.pack.pack_buffer,
- ((char *) bufp) + rel_off,
- dest_el_size, src_el_size, *blocks_p);
- }
- paramp->u.pack.pack_buffer += (dest_el_size * (*blocks_p));
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF);
- return 0;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_contig_unpack_external32_to_buf
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPID_Segment_contig_unpack_external32_to_buf(DLOOP_Offset *blocks_p,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off,
- void *bufp,
- void *v_paramp)
-{
- int src_el_size, dest_el_size;
- struct MPID_Segment_piece_params *paramp = v_paramp;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF);
-
- src_el_size = MPID_Datatype_get_basic_size(el_type);
- dest_el_size = MPIDI_Datatype_get_basic_size_external32(el_type);
- MPIU_Assert(dest_el_size);
-
- /*
- * h = handle value
- * do = datatype buffer offset
- * dp = datatype buffer pointer
- * up = unpack buffer pointer (current location, incremented as we go)
- * sz = size of datatype (guess we could get this from handle value if
- * we wanted...)
- */
-#ifdef MPID_SP_VERBOSE
- dbg_printf("\t[contig unpack [external32]: do=%d, dp=%x, up=%x, "
- "src_el_sz=%d, dest_el_sz=%d, blksz=%d]\n",
- rel_off,
- (unsigned) bufp,
- (unsigned) paramp->u.unpack.unpack_buffer,
- src_el_size,
- dest_el_size,
- (int) *blocks_p);
-#endif
-
- /* TODO: DEAL WITH CASE WHERE ALL DATA DOESN'T FIT! */
- if ((src_el_size == dest_el_size) && (src_el_size == 1))
- {
- MPIU_Memcpy(((char *)bufp) + rel_off,
- paramp->u.unpack.unpack_buffer, *blocks_p);
- }
- else if (is_float_type(el_type))
- {
- external32_float_convert(((char *) bufp) + rel_off,
- paramp->u.unpack.unpack_buffer,
- dest_el_size, src_el_size, *blocks_p);
- }
- else
- {
- external32_basic_convert(((char *) bufp) + rel_off,
- paramp->u.unpack.unpack_buffer,
- dest_el_size, src_el_size, *blocks_p);
- }
- paramp->u.unpack.unpack_buffer += (dest_el_size * (*blocks_p));
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF);
- return 0;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_pack_external32
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPID_Segment_pack_external32(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- void *pack_buffer)
-{
- struct MPID_Segment_piece_params pack_params;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL);
-
- pack_params.u.pack.pack_buffer = (DLOOP_Buffer)pack_buffer;
- MPID_Segment_manipulate(segp,
- first,
- lastp,
- MPID_Segment_contig_pack_external32_to_buf,
- NULL, /* MPID_Segment_vector_pack_external32_to_buf, */
- NULL, /* blkidx */
- NULL, /* MPID_Segment_index_pack_external32_to_buf, */
- MPIDI_Datatype_get_basic_size_external32,
- &pack_params);
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL);
- return;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_unpack_external32
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPID_Segment_unpack_external32(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_Buffer unpack_buffer)
-{
- struct MPID_Segment_piece_params pack_params;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32);
-
- pack_params.u.unpack.unpack_buffer = unpack_buffer;
- MPID_Segment_manipulate(segp,
- first,
- lastp,
- MPID_Segment_contig_unpack_external32_to_buf,
- NULL, /* MPID_Segment_vector_unpack_external32_to_buf, */
- NULL, /* blkidx */
- NULL, /* MPID_Segment_index_unpack_external32_to_buf, */
- MPIDI_Datatype_get_basic_size_external32,
- &pack_params);
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32);
- return;
-}
diff --git a/src/mpid/common/datatype/mpid_ext32_segment.h b/src/mpid/common/datatype/mpid_ext32_segment.h
deleted file mode 100644
index 97eff20..0000000
--- a/src/mpid/common/datatype/mpid_ext32_segment.h
+++ /dev/null
@@ -1,415 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPIDEXT32SEGMENT_H
-#define MPIDEXT32SEGMENT_H
-
-#include "mpichconf.h"
-
-/* FIXME!!! TODO!!! FOO!!! DO THIS!!! DETECT ME!!!
- *
- * Include mpiimpl.h up here too, taking it out of mpid_ext32_segment.c
- *
- * Consider using MPIU_INT64_T etc. types instead of the
- * EIGHT_BYTE_BASIC_TYPE stuff, or put #defines at the top of this file
- * assigning them in a simple manner.
- *
- * Doing that might require that we create MPIU_UINT64_T types (etc),
- * because it looks like we really want to have unsigned types for the
- * various convert functions below.
- */
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_ENDIAN_H
-#include <endian.h>
-#endif
-
-#ifdef HAVE_INT64
-#define uint64_t __int64
-#define uint32_t __int32
-#elif defined(MPIU_INT64_T)
-/* FIXME: This is necessary with some compilers or compiler settings */
-#define uint64_t unsigned MPIU_INT64_T
-#endif
-
-/* FIXME: Who defines __BYTE_ORDER or __BIG_ENDIAN? They aren't part of C */
-/* FIXME: The else test assumes that the byte order is little endian, whereas
- it may simply have been undetermined. This should instead use either
- a configure-time test (for which there are macros) or a runtime test
- and not use this non-portable check */
-
-/* Some platforms, like AIX, use BYTE_ORDER instead of __BYTE_ORDER */
-#if defined(BYTE_ORDER) && !defined(__BYTE_ORDER)
-#define __BYTE_ORDER BYTE_ORDER
-#endif
-
-#if defined(WORDS_BIGENDIAN)
-#define BLENDIAN 0
-#elif defined(WORDS_LITTLEENDIAN)
-#define BLENDIAN 1
-#else
-#if !defined(__BYTE_ORDER) || !defined(__BIG_ENDIAN)
-#error This code assumes that __BYTE_ORDER and __BIG_ENDIAN are defined
-#endif
-/* FIXME: "BLENDIAN" is a non-conforming name - it could conflict with some
- other definition in a non-mpich header file */
-#if ((defined(_BIG_ENDIAN) && !defined(ntohl)) || (__BYTE_ORDER == __BIG_ENDIAN))
-#define BLENDIAN 0 /* detected host arch byte order is big endian */
-#else
-#define BLENDIAN 1 /* detected host arch byte order is little endian */
-#endif
-#endif
-
-/*
- set to 1: uses manual swapping routines
- for 16/32 bit data types
- set to 0: uses system provided swapping routines
- for 16/32 bit data types
-*/
-#define MANUAL_BYTESWAPS 1
-
-/*
- NOTE:
-
- There are two 'public' calls here:
-
- FLOAT_convert(src, dest) -- converts floating point src into
- external32 floating point format and stores the result in dest.
-
- BASIC_convert(src, dest) -- converts integral type src into
- external32 integral type and stores the result in dest.
-
- These two macros compile to assignments on big-endian architectures.
-*/
-
-#if (MANUAL_BYTESWAPS == 0)
-#include <netinet/in.h>
-#endif
-
-#define BITSIZE_OF(type) (sizeof(type) * CHAR_BIT)
-
-#if (MANUAL_BYTESWAPS == 1)
-#define BASIC_convert32(src, dest) \
-{ \
- dest = (((src >> 24) & 0x000000FF) |\
- ((src >> 8) & 0x0000FF00) |\
- ((src << 8) & 0x00FF0000) |\
- ((src << 24) & 0xFF000000));\
-}
-#else
-#define BASIC_convert32(src, dest) \
-{ \
- dest = htonl((uint32_t)src); \
-}
-#endif
-
-#if (MANUAL_BYTESWAPS == 1)
-#define BASIC_convert16(src, dest) \
-{ \
- dest = (((src >> 8) & 0x00FF) | \
- ((src << 8) & 0xFF00)); \
-}
-#else
-#define BASIC_convert16(src, dest) \
-{ \
- dest = htons((uint16_t)src); \
-}
-#endif
-
-
-/* changed the argument types to be char* instead of uint64_t* because the Sun compiler
- prints out warnings that the function expects unsigned long long, but is being passed
- signed long long in mpid_ext32_segment.c. */
-static inline void BASIC_convert64(char *src, char *dest)
-{
- uint32_t tmp_src[2];
- uint32_t tmp_dest[2];
-
- tmp_src[0] = (uint32_t)(*((uint64_t *)src) >> 32);
- tmp_src[1] = (uint32_t)((*((uint64_t *)src) << 32) >> 32);
-
- BASIC_convert32(tmp_src[0], tmp_dest[0]);
- BASIC_convert32(tmp_src[1], tmp_dest[1]);
-
- *((uint64_t *)dest) = (uint64_t)tmp_dest[0];
- *((uint64_t *)dest) <<= 32;
- *((uint64_t *)dest) |= (uint64_t)tmp_dest[1];
-}
-
-static inline void BASIC_convert96(char *src, char *dest)
-{
- uint32_t tmp_src[3];
- uint32_t tmp_dest[3];
- char *ptr = dest;
-
- tmp_src[0] = (uint32_t)(*((uint64_t *)src) >> 32);
- tmp_src[1] = (uint32_t)((*((uint64_t *)src) << 32) >> 32);
- tmp_src[2] = (uint32_t)
- (*((uint32_t *)((char *)src + sizeof(uint64_t))));
-
- BASIC_convert32(tmp_src[0], tmp_dest[0]);
- BASIC_convert32(tmp_src[1], tmp_dest[1]);
- BASIC_convert32(tmp_src[2], tmp_dest[2]);
-
- *((uint32_t *)ptr) = tmp_dest[0];
- ptr += sizeof(uint32_t);
- *((uint32_t *)ptr) = tmp_dest[1];
- ptr += sizeof(uint32_t);
- *((uint32_t *)ptr) = tmp_dest[2];
-}
-
-static inline void BASIC_convert128(char *src, char *dest)
-{
- uint64_t tmp_src[2];
- uint64_t tmp_dest[2];
- char *ptr = dest;
-
- tmp_src[0] = *((uint64_t *)src);
- tmp_src[1] = *((uint64_t *)((char *)src + sizeof(uint64_t)));
-
- BASIC_convert64((char *) &tmp_src[0], (char *) &tmp_dest[0]);
- BASIC_convert64((char *) &tmp_src[1], (char *) &tmp_dest[1]);
-
- *((uint64_t *)ptr) = tmp_dest[0];
- ptr += sizeof(uint64_t);
- *((uint64_t *)ptr) = tmp_dest[1];
-}
-
-#if (BLENDIAN == 1)
-#define BASIC_convert(src, dest) \
-{ \
- register int type_byte_size = sizeof(src); \
- switch(type_byte_size) \
- { \
- case 1: \
- dest = src; \
- break; \
- case 2: \
- BASIC_convert16(src, dest); \
- break; \
- case 4: \
- BASIC_convert32(src, dest); \
- break; \
- case 8: \
- BASIC_convert64((char *)&src, \
- (char *)&dest);\
- break; \
- } \
-}
-
-/*
- http://www.mpi-forum.org/docs/mpi-20-html/node200.htm
-
- When converting a larger size integer to a smaller size integer,
- only the less significant bytes are moved. Care must be taken to
- preserve the sign bit value. This allows no conversion errors if the
- data range is within the range of the smaller size integer. ( End of
- advice to implementors.)
-*/
-#define BASIC_mixed_convert(src, dest)
-#else
-#define BASIC_convert(src, dest) \
- { dest = src; }
-#define BASIC_mixed_convert(src, dest) \
- { dest = src; }
-#endif
-
-/*
- Notes on the IEEE floating point format
- ---------------------------------------
-
- external32 for floating point types is big-endian IEEE format.
-
- ---------------------
- 32 bit floating point
- ---------------------
- * big endian byte order
- struct be_ieee754_single_precision
- {
- unsigned int sign_neg:1;
- unsigned int exponent:8;
- unsigned int mantissa:23;
- };
-
- * little endian byte order
- struct le_ieee754_single_precision
- {
- unsigned int mantissa:23;
- unsigned int exponent:8;
- unsigned int sign_neg:1;
- };
- ---------------------
-
- ---------------------
- 64 bit floating point
- ---------------------
- * big endian byte order
- struct be_ieee754_double_precision
- {
- unsigned int sign_neg:1;
- unsigned int exponent:11;
- unsigned int mantissa0:20;
- unsigned int mantissa1:32;
- };
-
- * little endian byte order
- * big endian float word order
- struct le_ieee754_double_precision
- {
- unsigned int mantissa0:20;
- unsigned int exponent:11;
- unsigned int sign_neg:1;
- unsigned int mantissa1:32;
- };
-
- * little endian byte order
- * little endian float word order
- struct le_ieee754_double_precision
- {
- unsigned int mantissa1:32;
- unsigned int mantissa0:20;
- unsigned int exponent:11;
- unsigned int sign_neg:1;
- };
- ---------------------
-
- ---------------------
- 96 bit floating point
- ---------------------
- * big endian byte order
- struct be_ieee854_double_extended
- {
- unsigned int negative:1;
- unsigned int exponent:15;
- unsigned int empty:16;
- unsigned int mantissa0:32;
- unsigned int mantissa1:32;
- };
-
- * little endian byte order
- * big endian float word order
- struct le_ieee854_double_extended
- {
- unsigned int exponent:15;
- unsigned int negative:1;
- unsigned int empty:16;
- unsigned int mantissa0:32;
- unsigned int mantissa1:32;
- };
-
- * little endian byte order
- * little endian float word order
- struct le_ieee854_double_extended
- {
- unsigned int mantissa1:32;
- unsigned int mantissa0:32;
- unsigned int exponent:15;
- unsigned int negative:1;
- unsigned int empty:16;
- };
- ---------------------
-
- 128 bit floating point implementation notes
- ===========================================
-
- "A 128-bit long double number consists of an ordered pair of
- 64-bit double-precision numbers. The first member of the
- ordered pair contains the high-order part of the number, and
- the second member contains the low-order part. The value of the
- long double quantity is the sum of the two 64-bit numbers."
-
- From http://nscp.upenn.edu/aix4.3html/aixprggd/genprogc/128bit_long_double_floating-point_datatype.htm
- [ as of 09/04/2003 ]
-*/
-
-#if (BLENDIAN == 1)
-#define FLOAT_convert(src, dest) \
-{ \
- register int type_byte_size = sizeof(src);\
- switch(type_byte_size) \
- { \
- case 4: \
- { \
- long d; \
- BASIC_convert32((long)src, d); \
- dest = (float)d; \
- } \
- break; \
- case 8: \
- { \
- BASIC_convert64((char *)&src, \
- (char *)&dest);\
- } \
- case 12: \
- { \
- BASIC_convert96((char *)&src, \
- (char *)&dest); \
- } \
- case 16: \
- { \
- BASIC_convert128((char *)&src, \
- (char *)&dest); \
- } \
- break; \
- } \
-}
-#else
-#define FLOAT_convert(src, dest) \
- { dest = src; }
-#endif
-
-#ifdef HAVE_INT16_T
-#define TWO_BYTE_BASIC_TYPE int16_t
-#else
-#if (SIZEOF_SHORT == 2)
-#define TWO_BYTE_BASIC_TYPE short
-#else
-#error "Cannot detect a basic type that is 2 bytes long"
-#endif
-#endif /* HAVE_INT16_T */
-
-#ifdef HAVE_INT32_T
-#define FOUR_BYTE_BASIC_TYPE int32_t
-#else
-#if (SIZEOF_INT == 4)
-#define FOUR_BYTE_BASIC_TYPE int
-#elif (SIZEOF_LONG == 4)
-#define FOUR_BYTE_BASIC_TYPE long
-#else
-#error "Cannot detect a basic type that is 4 bytes long"
-#endif
-#endif /* HAVE_INT32_T */
-
-#ifdef HAVE_INT64_T
-#define EIGHT_BYTE_BASIC_TYPE int64_t
-#else
-#ifdef HAVE_INT64
-#define EIGHT_BYTE_BASIC_TYPE __int64
-#elif (SIZEOF_LONG_LONG == 8)
-#define EIGHT_BYTE_BASIC_TYPE long long
-#else
-#error "Cannot detect a basic type that is 8 bytes long"
-#endif
-#endif /* HAVE_INT64_T */
-
-#if (SIZEOF_FLOAT == 4)
-#define FOUR_BYTE_FLOAT_TYPE float
-#else
-#error "Cannot detect a float type that is 4 bytes long"
-#endif
-
-#if (SIZEOF_DOUBLE == 8)
-#define EIGHT_BYTE_FLOAT_TYPE double
-#else
-#error "Cannot detect a float type that is 8 bytes long"
-#endif
-
-#endif /* MPIDEXT32SEGMENT_H */
diff --git a/src/mpid/common/datatype/mpid_segment.c b/src/mpid/common/datatype/mpid_segment.c
deleted file mode 100644
index 027f47d..0000000
--- a/src/mpid/common/datatype/mpid_segment.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
-* (C) 2001 by Argonne National Laboratory.
-* See COPYRIGHT in top-level directory.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-
-/*
- * Define these two names to enable debugging output.
- */
-#undef MPID_SP_VERBOSE
-#undef MPID_SU_VERBOSE
-
-/* MPID_Segment_piece_params
-*
-* This structure is used to pass function-specific parameters into our
-* segment processing function. This allows us to get additional parameters
-* to the functions it calls without changing the prototype.
-*/
-struct MPID_Segment_piece_params {
- union {
- struct {
- char *pack_buffer;
- } pack;
- struct {
- DLOOP_VECTOR *vectorp;
- int index;
- int length;
- } pack_vector;
- struct {
- int64_t *offp;
- DLOOP_Size *sizep; /* see notes in Segment_flatten header */
- int index;
- MPI_Aint length;
- } flatten;
- struct {
- char *last_loc;
- int count;
- } contig_blocks;
- struct {
- char *unpack_buffer;
- } unpack;
- struct {
- int stream_off;
- } print;
- } u;
-};
-
-/* prototypes of internal functions */
-static int MPID_Segment_vector_pack_to_iov(DLOOP_Offset *blocks_p,
- DLOOP_Count count,
- DLOOP_Size blksz,
- DLOOP_Offset stride,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off,
- void *bufp,
- void *v_paramp);
-
-static int MPID_Segment_contig_pack_to_iov(DLOOP_Offset *blocks_p,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off,
- void *bufp,
- void *v_paramp);
-
-static int MPID_Segment_contig_flatten(DLOOP_Offset *blocks_p,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off,
- void *bufp,
- void *v_paramp);
-
-static int MPID_Segment_vector_flatten(DLOOP_Offset *blocks_p,
- DLOOP_Count count,
- DLOOP_Size blksz,
- DLOOP_Offset stride,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off, /* offset into buffer */
- void *bufp, /* start of buffer */
- void *v_paramp);
-
-/********** EXTERNALLY VISIBLE FUNCTIONS FOR TYPE MANIPULATION **********/
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_pack_vector
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* MPID_Segment_pack_vector
-*
-* Parameters:
-* segp - pointer to segment structure
-* first - first byte in segment to pack
-* lastp - in/out parameter describing last byte to pack (and afterwards
-* the last byte _actually_ packed)
-* NOTE: actually returns index of byte _after_ last one packed
-* vectorp - pointer to (off, len) pairs to fill in
-* lengthp - in/out parameter describing length of array (and afterwards
-* the amount of the array that has actual data)
-*/
-void MPID_Segment_pack_vector(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_VECTOR *vectorp,
- int *lengthp)
-{
-struct MPID_Segment_piece_params packvec_params;
-MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_PACK_VECTOR);
-
-MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_PACK_VECTOR);
-
-packvec_params.u.pack_vector.vectorp = vectorp;
-packvec_params.u.pack_vector.index = 0;
-packvec_params.u.pack_vector.length = *lengthp;
-
-MPIU_Assert(*lengthp > 0);
-
-MPID_Segment_manipulate(segp,
- first,
- lastp,
- MPID_Segment_contig_pack_to_iov,
- MPID_Segment_vector_pack_to_iov,
- NULL, /* blkidx fn */
- NULL, /* index fn */
- NULL,
- &packvec_params);
-
-/* last value already handled by MPID_Segment_manipulate */
-*lengthp = packvec_params.u.pack_vector.index;
-MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_PACK_VECTOR);
-return;
-}
-
-/* MPID_Segment_unpack_vector
-*
-* Q: Should this be any different from pack vector?
-*/
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_unpack_vector
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPID_Segment_unpack_vector(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_VECTOR *vectorp,
- int *lengthp)
-{
-MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR);
-MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR);
-MPID_Segment_pack_vector(segp, first, lastp, vectorp, lengthp);
-MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR);
-return;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_flatten
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* MPID_Segment_flatten
-*
-* offp - pointer to array to fill in with offsets
-* sizep - pointer to array to fill in with sizes
-* lengthp - pointer to value holding size of arrays; # used is returned
-*
-* Internally, index is used to store the index of next array value to fill in.
-*
-* TODO: MAKE SIZES Aints IN ROMIO, CHANGE THIS TO USE INTS TOO.
-*/
-void MPID_Segment_flatten(struct DLOOP_Segment *segp,
- DLOOP_Offset first,
- DLOOP_Offset *lastp,
- DLOOP_Offset *offp,
- DLOOP_Size *sizep,
- DLOOP_Offset *lengthp)
-{
-struct MPID_Segment_piece_params packvec_params;
-MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_FLATTEN);
-
-MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_FLATTEN);
-
-packvec_params.u.flatten.offp = (int64_t *) offp;
-packvec_params.u.flatten.sizep = sizep;
-packvec_params.u.flatten.index = 0;
-packvec_params.u.flatten.length = *lengthp;
-
-MPIU_Assert(*lengthp > 0);
-
-MPID_Segment_manipulate(segp,
- first,
- lastp,
- MPID_Segment_contig_flatten,
- MPID_Segment_vector_flatten,
- NULL, /* blkidx fn */
- NULL,
- NULL,
- &packvec_params);
-
-/* last value already handled by MPID_Segment_manipulate */
-*lengthp = packvec_params.u.flatten.index;
-MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_FLATTEN);
-return;
-}
-
-
-/*
-* EVERYTHING BELOW HERE IS USED ONLY WITHIN THIS FILE
-*/
-
-/********** FUNCTIONS FOR CREATING AN IOV DESCRIBING BUFFER **********/
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_contig_pack_to_iov
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* MPID_Segment_contig_pack_to_iov
-*/
-static int MPID_Segment_contig_pack_to_iov(DLOOP_Offset *blocks_p,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off,
- void *bufp,
- void *v_paramp)
-{
- int el_size, last_idx;
- DLOOP_Offset size;
- char *last_end = NULL;
- struct MPID_Segment_piece_params *paramp = v_paramp;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
-
- el_size = MPID_Datatype_get_basic_size(el_type);
- size = *blocks_p * (DLOOP_Offset) el_size;
-
- MPIU_DBG_MSG_FMT(DATATYPE,VERBOSE,(MPIU_DBG_FDEST,
- " contig to vec: do=" MPI_AINT_FMT_DEC_SPEC ", dp=%p, ind=%d, sz=%d, blksz=" MPI_AINT_FMT_DEC_SPEC,
- (MPI_Aint) rel_off,
- bufp,
- paramp->u.pack_vector.index,
- el_size,
- (MPI_Aint) *blocks_p));
-
- last_idx = paramp->u.pack_vector.index - 1;
- if (last_idx >= 0) {
- last_end = ((char *) paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_BUF) +
- paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN;
- }
-
- MPIU_Ensure_Aint_fits_in_pointer((MPIU_VOID_PTR_CAST_TO_MPI_AINT (bufp)) + rel_off);
- if ((last_idx == paramp->u.pack_vector.length-1) &&
- (last_end != ((char *) bufp + rel_off)))
- {
- /* we have used up all our entries, and this region doesn't fit on
- * the end of the last one. setting blocks to 0 tells manipulation
- * function that we are done (and that we didn't process any blocks).
- */
- *blocks_p = 0;
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
- return 1;
- }
- else if (last_idx >= 0 && (last_end == ((char *) bufp + rel_off)))
- {
- /* add this size to the last vector rather than using up another one */
- paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN += size;
- }
- else {
- paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_BUF = (char *) bufp + rel_off;
- paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_LEN = size;
- paramp->u.pack_vector.index++;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
- return 0;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_vector_pack_to_iov
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* MPID_Segment_vector_pack_to_iov
- *
- * Input Parameters:
- * blocks_p - [inout] pointer to a count of blocks (total, for all noncontiguous pieces)
- * count - # of noncontiguous regions
- * blksz - size of each noncontiguous region
- * stride - distance in bytes from start of one region to start of next
- * el_type - elemental type (e.g. MPI_INT)
- * ...
- *
- * Note: this is only called when the starting position is at the beginning
- * of a whole block in a vector type.
- */
-static int MPID_Segment_vector_pack_to_iov(DLOOP_Offset *blocks_p,
- DLOOP_Count count,
- DLOOP_Size blksz,
- DLOOP_Offset stride,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off, /* offset into buffer */
- void *bufp, /* start of buffer */
- void *v_paramp)
-{
- int i;
- DLOOP_Offset size, blocks_left, basic_size;
- struct MPID_Segment_piece_params *paramp = v_paramp;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
-
- basic_size = (DLOOP_Offset) MPID_Datatype_get_basic_size(el_type);
- blocks_left = *blocks_p;
-
- MPIU_DBG_MSG_FMT(DATATYPE,VERBOSE,(MPIU_DBG_FDEST,
- " vector to vec: do=" MPI_AINT_FMT_DEC_SPEC
- ", dp=%p"
- ", len=" MPI_AINT_FMT_DEC_SPEC
- ", ind=" MPI_AINT_FMT_DEC_SPEC
- ", ct=" MPI_AINT_FMT_DEC_SPEC
- ", blksz=" MPI_AINT_FMT_DEC_SPEC
- ", str=" MPI_AINT_FMT_DEC_SPEC
- ", blks=" MPI_AINT_FMT_DEC_SPEC,
- (MPI_Aint) rel_off,
- bufp,
- (MPI_Aint) paramp->u.pack_vector.length,
- (MPI_Aint) paramp->u.pack_vector.index,
- count,
- blksz,
- (MPI_Aint) stride,
- (MPI_Aint) *blocks_p));
-
- for (i=0; i < count && blocks_left > 0; i++) {
- int last_idx;
- char *last_end = NULL;
-
- if (blocks_left > (DLOOP_Offset) blksz) {
- size = ((DLOOP_Offset) blksz) * basic_size;
- blocks_left -= (DLOOP_Offset) blksz;
- }
- else {
- /* last pass */
- size = blocks_left * basic_size;
- blocks_left = 0;
- }
-
- last_idx = paramp->u.pack_vector.index - 1;
- if (last_idx >= 0) {
- last_end = ((char *) paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_BUF) +
- paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN;
- }
-
- MPIU_Ensure_Aint_fits_in_pointer((MPIU_VOID_PTR_CAST_TO_MPI_AINT (bufp)) + rel_off);
- if ((last_idx == paramp->u.pack_vector.length-1) &&
- (last_end != ((char *) bufp + rel_off)))
- {
- /* we have used up all our entries, and this one doesn't fit on
- * the end of the last one.
- */
- *blocks_p -= (blocks_left + (size / basic_size));
-#ifdef MPID_SP_VERBOSE
- MPIU_dbg_printf("\t[vector to vec exiting (1): next ind = %d, " MPI_AINT_FMT_DEC_SPEC " blocks processed.\n",
- paramp->u.pack_vector.index,
- (MPI_Aint) *blocks_p);
-#endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
- return 1;
- }
- else if (last_idx >= 0 && (last_end == ((char *) bufp + rel_off)))
- {
- /* add this size to the last vector rather than using up new one */
- paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN += size;
- }
- else {
- paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_BUF =
- (char *) bufp + rel_off;
- paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_LEN = size;
- paramp->u.pack_vector.index++;
- }
-
- rel_off += stride;
-
- }
-
-#ifdef MPID_SP_VERBOSE
- MPIU_dbg_printf("\t[vector to vec exiting (2): next ind = %d, " MPI_AINT_FMT_DEC_SPEC " blocks processed.\n",
- paramp->u.pack_vector.index,
- (MPI_Aint) *blocks_p);
-#endif
-
- /* if we get here then we processed ALL the blocks; don't need to update
- * blocks_p
- */
- MPIU_Assert(blocks_left == 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
- return 0;
-}
-
-/********** FUNCTIONS FOR FLATTENING A TYPE **********/
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_contig_flatten
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* MPID_Segment_contig_flatten
- */
-static int MPID_Segment_contig_flatten(DLOOP_Offset *blocks_p,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off,
- void *bufp,
- void *v_paramp)
-{
- int idx, el_size;
- DLOOP_Offset size;
- struct MPID_Segment_piece_params *paramp = v_paramp;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
-
- el_size = MPID_Datatype_get_basic_size(el_type);
- size = *blocks_p * (DLOOP_Offset) el_size;
- idx = paramp->u.flatten.index;
-
-#ifdef MPID_SP_VERBOSE
- MPIU_dbg_printf("\t[contig flatten: idx = %d, loc = (" MPI_AINT_FMT_HEX_SPEC " + " MPI_AINT_FMT_HEX_SPEC ") = " MPI_AINT_FMT_HEX_SPEC ", size = " MPI_AINT_FMT_DEC_SPEC "]\n",
- idx,
- MPIU_VOID_PTR_CAST_TO_MPI_AINT bufp,
- (MPI_Aint) rel_off,
- MPIU_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off,
- (MPI_Aint) size);
-#endif
-
- if (idx > 0 && ((DLOOP_Offset) MPIU_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off) ==
- ((paramp->u.flatten.offp[idx - 1]) +
- (DLOOP_Offset) paramp->u.flatten.sizep[idx - 1]))
- {
- /* add this size to the last vector rather than using up another one */
- paramp->u.flatten.sizep[idx - 1] += size;
- }
- else {
- paramp->u.flatten.offp[idx] = ((int64_t) MPIU_VOID_PTR_CAST_TO_MPI_AINT bufp) + (int64_t) rel_off;
- paramp->u.flatten.sizep[idx] = size;
-
- paramp->u.flatten.index++;
- /* check to see if we have used our entire vector buffer, and if so
- * return 1 to stop processing
- */
- if (paramp->u.flatten.index == paramp->u.flatten.length)
- {
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
- return 1;
- }
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
- return 0;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Segment_vector_flatten
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* MPID_Segment_vector_flatten
- *
- * Notes:
- * - this is only called when the starting position is at the beginning
- * of a whole block in a vector type.
- * - this was a virtual copy of MPID_Segment_pack_to_iov; now it has improvements
- * that MPID_Segment_pack_to_iov needs.
- * - we return the number of blocks that we did process in region pointed to by
- * blocks_p.
- */
-static int MPID_Segment_vector_flatten(DLOOP_Offset *blocks_p,
- DLOOP_Count count,
- DLOOP_Size blksz,
- DLOOP_Offset stride,
- DLOOP_Type el_type,
- DLOOP_Offset rel_off, /* offset into buffer */
- void *bufp, /* start of buffer */
- void *v_paramp)
-{
- int i;
- DLOOP_Offset size, blocks_left, basic_size;
- struct MPID_Segment_piece_params *paramp = v_paramp;
- MPIDI_STATE_DECL(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
-
- basic_size = (DLOOP_Offset) MPID_Datatype_get_basic_size(el_type);
- blocks_left = *blocks_p;
-
- for (i=0; i < count && blocks_left > 0; i++) {
- int idx = paramp->u.flatten.index;
-
- if (blocks_left > (DLOOP_Offset) blksz) {
- size = ((DLOOP_Offset) blksz) * basic_size;
- blocks_left -= (DLOOP_Offset) blksz;
- }
- else {
- /* last pass */
- size = blocks_left * basic_size;
- blocks_left = 0;
- }
-
- if (idx > 0 && ((DLOOP_Offset) MPIU_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off) ==
- ((paramp->u.flatten.offp[idx - 1]) + (DLOOP_Offset) paramp->u.flatten.sizep[idx - 1]))
- {
- /* add this size to the last region rather than using up another one */
- paramp->u.flatten.sizep[idx - 1] += size;
- }
- else if (idx < paramp->u.flatten.length) {
- /* take up another region */
- paramp->u.flatten.offp[idx] = (DLOOP_Offset) MPIU_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off;
- paramp->u.flatten.sizep[idx] = size;
- paramp->u.flatten.index++;
- }
- else {
- /* we tried to add to the end of the last region and failed; add blocks back in */
- *blocks_p = *blocks_p - blocks_left + (size / basic_size);
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
- return 1;
- }
- rel_off += stride;
-
- }
- /* --BEGIN ERROR HANDLING-- */
- MPIU_Assert(blocks_left == 0);
- /* --END ERROR HANDLING-- */
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
- return 0;
-}
diff --git a/src/mpid/common/datatype/mpid_type_blockindexed.c b/src/mpid/common/datatype/mpid_type_blockindexed.c
deleted file mode 100644
index a3caf24..0000000
--- a/src/mpid/common/datatype/mpid_type_blockindexed.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-#undef MPID_TYPE_ALLOC_DEBUG
-
-/*@
- MPID_Type_blockindexed - create a block indexed datatype
-
-Input Parameters:
-+ count - number of blocks in type
-. blocklength - number of elements in each block
-. displacement_array - offsets of blocks from start of type (see next
- parameter for units)
-. dispinbytes - if nonzero, then displacements are in bytes, otherwise
- they in terms of extent of oldtype
-- oldtype - type (using handle) of datatype on which new type is based
-
-Output Parameters:
-. newtype - handle of new block indexed datatype
-
- Return Value:
- MPI_SUCCESS on success, MPI error on failure.
-@*/
-
-int MPID_Type_blockindexed(int count,
- int blocklength,
- const void *displacement_array,
- int dispinbytes,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype)
-{
- int mpi_errno = MPI_SUCCESS, i;
- int is_builtin, old_is_contig;
- MPI_Aint contig_count;
- MPI_Aint el_sz;
- MPI_Datatype el_type;
- MPI_Aint old_lb, old_ub, old_extent, old_true_lb, old_true_ub;
- MPI_Aint min_lb = 0, max_ub = 0, eff_disp;
-
- MPID_Datatype *new_dtp;
-
- if (count == 0) return MPID_Type_zerolen(newtype);
-
- /* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- /* --BEGIN ERROR HANDLING-- */
- if (!new_dtp)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPID_Type_vector", __LINE__,
- MPI_ERR_OTHER, "**nomem", 0);
- return mpi_errno;
- }
- /* --END ERROR HANDLING-- */
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 0;
- new_dtp->is_committed = 0;
- new_dtp->attributes = NULL;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = NULL;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
-
- if (is_builtin)
- {
- el_sz = (MPI_Aint) MPID_Datatype_get_basic_size(oldtype);
- el_type = oldtype;
-
- old_lb = 0;
- old_true_lb = 0;
- old_ub = el_sz;
- old_true_ub = el_sz;
- old_extent = el_sz;
- old_is_contig = 1;
-
- new_dtp->size = (MPI_Aint) count *
- (MPI_Aint) blocklength * el_sz;
- new_dtp->has_sticky_lb = 0;
- new_dtp->has_sticky_ub = 0;
-
- new_dtp->alignsize = el_sz; /* ??? */
- new_dtp->n_builtin_elements = count * blocklength;
- new_dtp->builtin_element_size = el_sz;
- new_dtp->basic_type = el_type;
-
- new_dtp->max_contig_blocks = count;
- }
- else
- {
- /* user-defined base type (oldtype) */
- MPID_Datatype *old_dtp;
-
- MPID_Datatype_get_ptr(oldtype, old_dtp);
- el_sz = old_dtp->builtin_element_size;
- el_type = old_dtp->basic_type;
-
- old_lb = old_dtp->lb;
- old_true_lb = old_dtp->true_lb;
- old_ub = old_dtp->ub;
- old_true_ub = old_dtp->true_ub;
- old_extent = old_dtp->extent;
- old_is_contig = old_dtp->is_contig;
-
- new_dtp->size = (MPI_Aint) count *
- (MPI_Aint) blocklength *
- (MPI_Aint) old_dtp->size;
- new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
- new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
-
- new_dtp->alignsize = old_dtp->alignsize;
- new_dtp->n_builtin_elements = count * blocklength * old_dtp->n_builtin_elements;
- new_dtp->builtin_element_size = el_sz;
- new_dtp->basic_type = el_type;
-
- new_dtp->max_contig_blocks = old_dtp->max_contig_blocks * count * blocklength;
- }
-
- /* priming for loop */
- eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[0] :
- (((MPI_Aint) ((int *) displacement_array)[0]) * old_extent);
- MPID_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength,
- eff_disp,
- old_lb,
- old_ub,
- old_extent,
- min_lb,
- max_ub);
-
- /* determine new min lb and max ub */
- for (i=1; i < count; i++)
- {
- MPI_Aint tmp_lb, tmp_ub;
-
- eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[i] :
- (((MPI_Aint) ((int *) displacement_array)[i]) * old_extent);
- MPID_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength,
- eff_disp,
- old_lb,
- old_ub,
- old_extent,
- tmp_lb,
- tmp_ub);
-
- if (tmp_lb < min_lb) min_lb = tmp_lb;
- if (tmp_ub > max_ub) max_ub = tmp_ub;
- }
-
- new_dtp->lb = min_lb;
- new_dtp->ub = max_ub;
- new_dtp->true_lb = min_lb + (old_true_lb - old_lb);
- new_dtp->true_ub = max_ub + (old_true_ub - old_ub);
- new_dtp->extent = max_ub - min_lb;
-
- /* new type is contig for N types if it is all one big block,
- * its size and extent are the same, and the old type was also
- * contiguous.
- */
- new_dtp->is_contig = 0;
- if (old_is_contig)
- {
- contig_count = MPID_Type_blockindexed_count_contig(count,
- blocklength,
- displacement_array,
- dispinbytes,
- old_extent);
- new_dtp->max_contig_blocks = contig_count;
- if( (contig_count == 1) &&
- ((MPI_Aint) new_dtp->size == new_dtp->extent) )
- {
- new_dtp->is_contig = 1;
- }
- }
-
- *newtype = new_dtp->handle;
- return mpi_errno;
-}
diff --git a/src/mpid/common/datatype/mpid_type_commit.c b/src/mpid/common/datatype/mpid_type_commit.c
deleted file mode 100644
index 28be988..0000000
--- a/src/mpid/common/datatype/mpid_type_commit.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-/*@
- MPID_Type_commit
-
-Input Parameters:
-. datatype_p - pointer to MPI datatype
-
-Output Parameters:
-
- Return Value:
- 0 on success, -1 on failure.
-@*/
-
-int MPID_Type_commit(MPI_Datatype *datatype_p)
-{
- int mpi_errno=MPI_SUCCESS;
- MPID_Datatype *datatype_ptr;
-
- MPIU_Assert(HANDLE_GET_KIND(*datatype_p) != HANDLE_KIND_BUILTIN);
-
- MPID_Datatype_get_ptr(*datatype_p, datatype_ptr);
-
- if (datatype_ptr->is_committed == 0) {
- datatype_ptr->is_committed = 1;
-
-#ifdef MPID_NEEDS_DLOOP_ALL_BYTES
- /* If MPID implementation needs use to reduce everything to
- a byte stream, do that. */
- MPID_Dataloop_create(*datatype_p,
- &datatype_ptr->dataloop,
- &datatype_ptr->dataloop_size,
- &datatype_ptr->dataloop_depth,
- MPID_DATALOOP_ALL_BYTES);
-#else
- MPID_Dataloop_create(*datatype_p,
- &datatype_ptr->dataloop,
- &datatype_ptr->dataloop_size,
- &datatype_ptr->dataloop_depth,
- MPID_DATALOOP_HOMOGENEOUS);
-#endif
-
- /* create heterogeneous dataloop */
- MPID_Dataloop_create(*datatype_p,
- &datatype_ptr->hetero_dloop,
- &datatype_ptr->hetero_dloop_size,
- &datatype_ptr->hetero_dloop_depth,
- MPID_DATALOOP_HETEROGENEOUS);
-
- MPIU_DBG_PRINTF(("# contig blocks = %d\n",
- (int) datatype_ptr->max_contig_blocks));
-
-#if 0
- MPIDI_Dataloop_dot_printf(datatype_ptr->dataloop, 0, 1);
-#endif
-
-#ifdef MPID_Dev_datatype_commit_hook
- MPID_Dev_datatype_commit_hook(datatype_p);
-#endif /* MPID_Dev_datatype_commit_hook */
-
- }
- return mpi_errno;
-}
-
diff --git a/src/mpid/common/datatype/mpid_type_contiguous.c b/src/mpid/common/datatype/mpid_type_contiguous.c
deleted file mode 100644
index 2aa7c39..0000000
--- a/src/mpid/common/datatype/mpid_type_contiguous.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-/* #define MPID_TYPE_ALLOC_DEBUG */
-
-/*@
- MPID_Type_contiguous - create a contiguous datatype
-
-Input Parameters:
-+ count - number of elements in the contiguous block
-- oldtype - type (using handle) of datatype on which vector is based
-
-Output Parameters:
-. newtype - handle of new contiguous datatype
-
- Return Value:
- MPI_SUCCESS on success, MPI error code on failure.
-@*/
-int MPID_Type_contiguous(int count,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype)
-{
- int mpi_errno = MPI_SUCCESS;
- int is_builtin;
- MPI_Aint el_sz;
- MPI_Datatype el_type;
- MPID_Datatype *new_dtp;
-
- if (count == 0) return MPID_Type_zerolen(newtype);
-
- /* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- /* --BEGIN ERROR HANDLING-- */
- if (!new_dtp)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPID_Type_contiguous",
- __LINE__, MPI_ERR_OTHER,
- "**nomem", 0);
- return mpi_errno;
- }
- /* --END ERROR HANDLING-- */
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 0;
- new_dtp->is_committed = 0;
- new_dtp->attributes = NULL;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = NULL;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
-
- if (is_builtin)
- {
- el_sz = MPID_Datatype_get_basic_size(oldtype);
- el_type = oldtype;
-
- new_dtp->size = count * el_sz;
- new_dtp->has_sticky_ub = 0;
- new_dtp->has_sticky_lb = 0;
- new_dtp->true_lb = 0;
- new_dtp->lb = 0;
- new_dtp->true_ub = count * el_sz;
- new_dtp->ub = new_dtp->true_ub;
- new_dtp->extent = new_dtp->ub - new_dtp->lb;
-
- new_dtp->alignsize = el_sz;
- new_dtp->n_builtin_elements = count;
- new_dtp->builtin_element_size = el_sz;
- new_dtp->basic_type = el_type;
- new_dtp->is_contig = 1;
- new_dtp->max_contig_blocks = 1;
-
- }
- else
- {
- /* user-defined base type (oldtype) */
- MPID_Datatype *old_dtp;
-
- MPID_Datatype_get_ptr(oldtype, old_dtp);
- el_sz = old_dtp->builtin_element_size;
- el_type = old_dtp->basic_type;
-
- new_dtp->size = count * old_dtp->size;
- new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
- new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
-
- MPID_DATATYPE_CONTIG_LB_UB((MPI_Aint) count,
- old_dtp->lb,
- old_dtp->ub,
- old_dtp->extent,
- new_dtp->lb,
- new_dtp->ub);
-
- /* easiest to calc true lb/ub relative to lb/ub; doesn't matter
- * if there are sticky lb/ubs or not when doing this.
- */
- new_dtp->true_lb = new_dtp->lb + (old_dtp->true_lb - old_dtp->lb);
- new_dtp->true_ub = new_dtp->ub + (old_dtp->true_ub - old_dtp->ub);
- new_dtp->extent = new_dtp->ub - new_dtp->lb;
-
- new_dtp->alignsize = old_dtp->alignsize;
- new_dtp->n_builtin_elements = count * old_dtp->n_builtin_elements;
- new_dtp->builtin_element_size = old_dtp->builtin_element_size;
- new_dtp->basic_type = el_type;
-
- new_dtp->is_contig = old_dtp->is_contig;
- if(old_dtp->is_contig)
- new_dtp->max_contig_blocks = 1;
- else
- new_dtp->max_contig_blocks = count * old_dtp->max_contig_blocks;
- }
-
- *newtype = new_dtp->handle;
-
- MPIU_DBG_MSG_P(DATATYPE,VERBOSE,"contig type %x created.",
- new_dtp->handle);
-
- return mpi_errno;
-}
-
diff --git a/src/mpid/common/datatype/mpid_type_create_pairtype.c b/src/mpid/common/datatype/mpid_type_create_pairtype.c
deleted file mode 100644
index 3c6fad8..0000000
--- a/src/mpid/common/datatype/mpid_type_create_pairtype.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-#include <limits.h>
-
-/* PAIRTYPE_SIZE_EXTENT - calculates size, extent, etc. for pairtype by
- * defining the appropriate C type.
- */
-#define PAIRTYPE_SIZE_EXTENT(mt1_,ut1_,mt2_,ut2_, type_size_, type_extent_, \
- el_size_, true_ub_, alignsize_) \
- { \
- struct { ut1_ a; ut2_ b; } foo; \
- type_size_ = sizeof(foo.a) + sizeof(foo.b); \
- type_extent_ = (MPI_Aint) sizeof(foo); \
- el_size_ = (sizeof(foo.a) == sizeof(foo.b)) ? (int) sizeof(foo.a) : -1; \
- true_ub_ = (MPIU_VOID_PTR_CAST_TO_MPI_AINT ((char *) &foo.b - \
- (char *) &foo.a)) + \
- (MPI_Aint) sizeof(foo.b); \
- alignsize_ = MPIR_MAX(MPID_Datatype_get_basic_size(mt1_), \
- MPID_Datatype_get_basic_size(mt2_)); \
- }
-
-/*@
- MPID_Type_create_pairtype - create necessary data structures for certain
- pair types (all but MPI_2INT etc., which never have the size != extent
- issue).
-
- This function is different from the other MPID_Type_create functions in that
- it fills in an already- allocated MPID_Datatype. This is important for
- allowing configure-time determination of the MPI type values (these types
- are stored in the "direct" space, for those familiar with how MPICH deals
- with type allocation).
-
-Input Parameters:
-+ type - name of pair type (e.g. MPI_FLOAT_INT)
-- new_dtp - pointer to previously allocated datatype structure, which is
- filled in by this function
-
- Return Value:
- MPI_SUCCESS on success, MPI errno on failure.
-
- Note:
- Section 4.9.3 (MINLOC and MAXLOC) of the MPI-1 standard specifies that
- these types should be built as if by the following (e.g. MPI_FLOAT_INT):
-
- type[0] = MPI_FLOAT
- type[1] = MPI_INT
- disp[0] = 0
- disp[1] = sizeof(float) <---- questionable displacement!
- block[0] = 1
- block[1] = 1
- MPI_TYPE_STRUCT(2, block, disp, type, MPI_FLOAT_INT)
-
- However, this is a relatively naive approach that does not take struct
- padding into account when setting the displacement of the second element.
- Thus in our implementation we have chosen to instead use the actual
- difference in starting locations of the two types in an actual struct.
-@*/
-int MPID_Type_create_pairtype(MPI_Datatype type,
- MPID_Datatype *new_dtp)
-{
- int err, mpi_errno = MPI_SUCCESS;
- int type_size, alignsize;
- MPI_Aint type_extent, true_ub, el_size;
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 1;
- new_dtp->is_committed = 1; /* predefined types are pre-committed */
- new_dtp->attributes = NULL;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = NULL;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- switch(type) {
- case MPI_FLOAT_INT:
- PAIRTYPE_SIZE_EXTENT(MPI_FLOAT, float, MPI_INT, int,
- type_size, type_extent, el_size, true_ub, alignsize);
- break;
- case MPI_DOUBLE_INT:
- PAIRTYPE_SIZE_EXTENT(MPI_DOUBLE, double, MPI_INT, int,
- type_size, type_extent, el_size, true_ub, alignsize);
- break;
- case MPI_LONG_INT:
- PAIRTYPE_SIZE_EXTENT(MPI_LONG, long, MPI_INT, int,
- type_size, type_extent, el_size, true_ub, alignsize);
- break;
- case MPI_SHORT_INT:
- PAIRTYPE_SIZE_EXTENT(MPI_SHORT, short, MPI_INT, int,
- type_size, type_extent, el_size, true_ub, alignsize);
- break;
- case MPI_LONG_DOUBLE_INT:
- PAIRTYPE_SIZE_EXTENT(MPI_LONG_DOUBLE, long double, MPI_INT, int,
- type_size, type_extent, el_size, true_ub, alignsize);
- break;
- default:
- /* --BEGIN ERROR HANDLING-- */
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "MPID_Type_create_pairtype",
- __LINE__,
- MPI_ERR_OTHER,
- "**dtype", 0);
- return mpi_errno;
- /* --END ERROR HANDLING-- */
- }
-
- new_dtp->n_builtin_elements = 2;
- new_dtp->builtin_element_size = el_size;
- new_dtp->basic_type = type;
-
- new_dtp->has_sticky_lb = 0;
- new_dtp->true_lb = 0;
- new_dtp->lb = 0;
-
- new_dtp->has_sticky_ub = 0;
- new_dtp->true_ub = true_ub;
-
- new_dtp->size = type_size;
- new_dtp->ub = type_extent; /* possible padding */
- new_dtp->extent = type_extent;
- new_dtp->alignsize = alignsize;
-
- /* place maximum on alignment based on padding rules */
- /* There are some really wierd rules for structure alignment;
- these capture the ones of which we are aware. */
- switch(type) {
- case MPI_SHORT_INT:
- case MPI_LONG_INT:
-#ifdef HAVE_MAX_INTEGER_ALIGNMENT
- new_dtp->alignsize = MPIR_MIN(new_dtp->alignsize,
- HAVE_MAX_INTEGER_ALIGNMENT);
-#endif
- break;
- case MPI_FLOAT_INT:
-#ifdef HAVE_MAX_FP_ALIGNMENT
- new_dtp->alignsize = MPIR_MIN(new_dtp->alignsize,
- HAVE_MAX_FP_ALIGNMENT);
-#endif
- break;
- case MPI_DOUBLE_INT:
-#ifdef HAVE_MAX_DOUBLE_FP_ALIGNMENT
- new_dtp->alignsize = MPIR_MIN(new_dtp->alignsize,
- HAVE_MAX_DOUBLE_FP_ALIGNMENT);
-#elif defined(HAVE_MAX_FP_ALIGNMENT)
- new_dtp->alignsize = MPIR_MIN(new_dtp->alignsize,
- HAVE_MAX_FP_ALIGNMENT);
-#endif
- break;
- case MPI_LONG_DOUBLE_INT:
-#ifdef HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT
- new_dtp->alignsize = MPIR_MIN(new_dtp->alignsize,
- HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT);
-#elif defined(HAVE_MAX_FP_ALIGNMENT)
- new_dtp->alignsize = MPIR_MIN(new_dtp->alignsize,
- HAVE_MAX_FP_ALIGNMENT);
-#endif
- break;
- }
-
- new_dtp->is_contig = (((MPI_Aint) type_size) == type_extent) ? 1 : 0;
- new_dtp->max_contig_blocks = (((MPI_Aint) type_size) == type_extent) ? 1 : 2;
-
- /* fill in dataloops -- only case where we precreate dataloops
- *
- * this is necessary because these types aren't committed by the
- * user, which is the other place where we create dataloops. so
- * if the user uses one of these w/out building some more complex
- * type and then committing it, then the dataloop will be missing.
- */
-
-#ifdef MPID_NEEDS_DLOOP_ALL_BYTES
- /* If MPID implementation needs use to reduce everything to
- a byte stream, do that. */
- err = MPID_Dataloop_create_pairtype(type,
- &(new_dtp->dataloop),
- &(new_dtp->dataloop_size),
- &(new_dtp->dataloop_depth),
- MPID_DATALOOP_ALL_BYTES);
-#else
- err = MPID_Dataloop_create_pairtype(type,
- &(new_dtp->dataloop),
- &(new_dtp->dataloop_size),
- &(new_dtp->dataloop_depth),
- MPID_DATALOOP_HOMOGENEOUS);
-#endif
-
- if (!err) {
- err = MPID_Dataloop_create_pairtype(type,
- &(new_dtp->hetero_dloop),
- &(new_dtp->hetero_dloop_size),
- &(new_dtp->hetero_dloop_depth),
- MPID_DATALOOP_HETEROGENEOUS);
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (err) {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "MPID_Dataloop_create_pairtype",
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem",
- 0);
- return mpi_errno;
-
- }
- /* --END ERROR HANDLING-- */
-
- return mpi_errno;
-}
diff --git a/src/mpid/common/datatype/mpid_type_create_resized.c b/src/mpid/common/datatype/mpid_type_create_resized.c
deleted file mode 100644
index 05945ae..0000000
--- a/src/mpid/common/datatype/mpid_type_create_resized.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-/* #define MPID_TYPE_ALLOC_DEBUG */
-
-static int MPIDI_Type_create_resized_memory_error(void);
-
-int MPID_Type_create_resized(MPI_Datatype oldtype,
- MPI_Aint lb,
- MPI_Aint extent,
- MPI_Datatype *newtype_p)
-{
- MPID_Datatype *new_dtp;
-
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- /* --BEGIN ERROR HANDLING-- */
- if (!new_dtp) return MPIDI_Type_create_resized_memory_error();
- /* --END ERROR HANDLING-- */
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 0;
- new_dtp->is_committed = 0;
- new_dtp->attributes = 0;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = 0;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- /* if oldtype is a basic, we build a contiguous dataloop of count = 1 */
- if (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN)
- {
- int oldsize = MPID_Datatype_get_basic_size(oldtype);
-
- new_dtp->size = oldsize;
- new_dtp->has_sticky_ub = 0;
- new_dtp->has_sticky_lb = 0;
- new_dtp->dataloop_depth = 1;
- new_dtp->true_lb = 0;
- new_dtp->lb = lb;
- new_dtp->true_ub = oldsize;
- new_dtp->ub = lb + extent;
- new_dtp->extent = extent;
- new_dtp->alignsize = oldsize; /* FIXME ??? */
- new_dtp->n_builtin_elements = 1;
- new_dtp->builtin_element_size = oldsize;
- new_dtp->is_contig = (extent == oldsize) ? 1 : 0;
- new_dtp->basic_type = oldtype;
- new_dtp->max_contig_blocks = 3; /* lb, data, ub */
- }
- else
- {
- /* user-defined base type */
- MPID_Datatype *old_dtp;
-
- MPID_Datatype_get_ptr(oldtype, old_dtp);
-
- new_dtp->size = old_dtp->size;
- new_dtp->has_sticky_ub = 0;
- new_dtp->has_sticky_lb = 0;
- new_dtp->dataloop_depth = old_dtp->dataloop_depth;
- new_dtp->true_lb = old_dtp->true_lb;
- new_dtp->lb = lb;
- new_dtp->true_ub = old_dtp->true_ub;
- new_dtp->ub = lb + extent;
- new_dtp->extent = extent;
- new_dtp->alignsize = old_dtp->alignsize;
- new_dtp->n_builtin_elements = old_dtp->n_builtin_elements;
- new_dtp->builtin_element_size = old_dtp->builtin_element_size;
- new_dtp->basic_type = old_dtp->basic_type;
-
- new_dtp->is_contig =
- (extent == old_dtp->size) ? old_dtp->is_contig : 0;
- new_dtp->max_contig_blocks = old_dtp->max_contig_blocks;
- }
-
- *newtype_p = new_dtp->handle;
-
- MPIU_DBG_MSG_P(DATATYPE,VERBOSE,"resized type %x created.",
- new_dtp->handle);
-
- return MPI_SUCCESS;
-}
-
-/* --BEGIN ERROR HANDLING-- */
-static int MPIDI_Type_create_resized_memory_error(void)
-{
- int mpi_errno;
-
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "MPID_Type_create_resized",
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem",
- 0);
- return mpi_errno;
-}
-/* --END ERROR HANDLING-- */
diff --git a/src/mpid/common/datatype/mpid_type_debug.c b/src/mpid/common/datatype/mpid_type_debug.c
deleted file mode 100644
index 6c607be..0000000
--- a/src/mpid/common/datatype/mpid_type_debug.c
+++ /dev/null
@@ -1,670 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-#include "mpid_dataloop.h"
-#include <stdlib.h>
-#include <limits.h>
-
-/* MPI datatype debugging helper routines.
- *
- * The one you want to call is:
- * MPIDU_Datatype_debug(MPI_Datatype type, int array_ct)
- *
- * The "array_ct" value tells the call how many array values to print
- * for struct, indexed, and blockindexed types.
- *
- */
-
-
-void MPIDI_Datatype_dot_printf(MPI_Datatype type, int depth, int header);
-void MPIDI_Dataloop_dot_printf(MPID_Dataloop *loop_p, int depth, int header);
-void MPIDI_Datatype_contents_printf(MPI_Datatype type, int depth, int acount);
-static char *MPIDI_Datatype_depth_spacing(int depth) ATTRIBUTE((unused));
-
-#define NR_TYPE_CUTOFF 6 /* Number of types to display before truncating
- output. 6 picked as arbitrary cutoff */
-
-/* note: this isn't really "error handling" per se, but leave these comments
- * because Bill uses them for coverage analysis.
- */
-
-/* --BEGIN ERROR HANDLING-- */
-void MPIDI_Datatype_dot_printf(MPI_Datatype type,
- int depth,
- int header)
-{
- if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
- MPIU_DBG_OUT(DATATYPE,
- "MPIDI_Datatype_dot_printf: type is a basic");
- return;
- }
- else {
- MPID_Datatype *dt_p;
- MPID_Dataloop *loop_p;
-
- MPID_Datatype_get_ptr(type, dt_p);
- loop_p = dt_p->dataloop;
-
- MPIDI_Dataloop_dot_printf(loop_p, depth, header);
- return;
- }
-}
-
-void MPIDI_Dataloop_dot_printf(MPID_Dataloop *loop_p,
- int depth,
- int header)
-{
- int i;
-
- if (loop_p == NULL) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"<null dataloop>\n"));
- return;
- }
-
- if (header) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- /* graphviz does not like the 0xNNN format */
- "digraph %lld { {", (long long int)loop_p));
- }
-
- switch (loop_p->kind & DLOOP_KIND_MASK) {
- case DLOOP_KIND_CONTIG:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- " dl%d [shape = record, label = \"contig |{ ct = %d; el_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = " MPI_AINT_FMT_DEC_SPEC " }\"];",
- depth,
- (int) loop_p->loop_params.c_t.count,
- (MPI_Aint) loop_p->el_size,
- (MPI_Aint) loop_p->el_extent));
- break;
- case DLOOP_KIND_VECTOR:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- " dl%d [shape = record, label = \"vector |{ ct = %d; blk = %d; str = " MPI_AINT_FMT_DEC_SPEC "; el_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = "MPI_AINT_FMT_DEC_SPEC " }\"];",
- depth,
- (int) loop_p->loop_params.v_t.count,
- (int) loop_p->loop_params.v_t.blocksize,
- (MPI_Aint) loop_p->loop_params.v_t.stride,
- (MPI_Aint) loop_p->el_size,
- (MPI_Aint) loop_p->el_extent));
- break;
- case DLOOP_KIND_INDEXED:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- " dl%d [shape = record, label = \"indexed |{ ct = %d; tot_blks = %d; regions = ",
- depth,
- (int) loop_p->loop_params.i_t.count,
- (int) loop_p->loop_params.i_t.total_blocks));
-
- for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.i_t.count; i++) {
- if (i + 1 < loop_p->loop_params.i_t.count) {
- /* more regions after this one */
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "\\n(" MPI_AINT_FMT_DEC_SPEC ", %d), ",
- (MPI_Aint) loop_p->loop_params.i_t.offset_array[i],
- (int) loop_p->loop_params.i_t.blocksize_array[i]));
- }
- else {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "\\n(" MPI_AINT_FMT_DEC_SPEC ", %d); ",
- (MPI_Aint) loop_p->loop_params.i_t.offset_array[i],
- (int) loop_p->loop_params.i_t.blocksize_array[i]));
- }
- }
- if (i < loop_p->loop_params.i_t.count) {
- MPIU_DBG_OUT(DATATYPE,"\\n...; ");
- }
-
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "\\nel_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = " MPI_AINT_FMT_DEC_SPEC " }\"];\n",
- (MPI_Aint) loop_p->el_size,
- (MPI_Aint) loop_p->el_extent));
- break;
- case DLOOP_KIND_BLOCKINDEXED:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- " dl%d [shape = record, label = \"blockindexed |{ ct = %d; blk = %d; disps = ",
- depth,
- (int) loop_p->loop_params.bi_t.count,
- (int) loop_p->loop_params.bi_t.blocksize));
-
- for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.bi_t.count; i++) {
- if (i + 1 < loop_p->loop_params.bi_t.count) {
- /* more regions after this one */
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- MPI_AINT_FMT_DEC_SPEC ",\\n ",
- (MPI_Aint) loop_p->loop_params.bi_t.offset_array[i]));
- }
- else {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- MPI_AINT_FMT_DEC_SPEC "; ",
- (MPI_Aint) loop_p->loop_params.bi_t.offset_array[i]));
- }
- }
- if (i < loop_p->loop_params.bi_t.count) {
- MPIU_DBG_OUT(DATATYPE,"...; ");
- }
-
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "\\nel_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = " MPI_AINT_FMT_DEC_SPEC " }\"];",
- (MPI_Aint) loop_p->el_size,
- (MPI_Aint) loop_p->el_extent));
- break;
- case DLOOP_KIND_STRUCT:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- " dl%d [shape = record, label = \"struct | {ct = %d; blks = ",
- depth,
- (int) loop_p->loop_params.s_t.count));
- for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.s_t.count; i++) {
- if (i + 1 < loop_p->loop_params.s_t.count) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%d, ",
- (int) loop_p->loop_params.s_t.blocksize_array[i]));
- }
- else {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%d; ",
- (int) loop_p->loop_params.s_t.blocksize_array[i]));
- }
- }
- if (i < loop_p->loop_params.s_t.count) {
- MPIU_DBG_OUT(DATATYPE,"...; disps = ");
- }
- else {
- MPIU_DBG_OUT(DATATYPE,"disps = ");
- }
-
- for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.s_t.count; i++) {
- if (i + 1 < loop_p->loop_params.s_t.count) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,MPI_AINT_FMT_DEC_SPEC ", ",
- (MPI_Aint) loop_p->loop_params.s_t.offset_array[i]));
- }
- else {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,MPI_AINT_FMT_DEC_SPEC "; ",
- (MPI_Aint) loop_p->loop_params.s_t.offset_array[i]));
- }
- }
- if (i < loop_p->loop_params.s_t.count) {
- MPIU_DBG_OUT(DATATYPE,"... }\"];");
- }
- else {
- MPIU_DBG_OUT(DATATYPE,"}\"];");
- }
- break;
- default:
- MPIU_Assert(0);
- }
-
- if (!(loop_p->kind & DLOOP_FINAL_MASK)) {
- /* more loops to go; recurse */
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- " dl%d -> dl%d;\n", depth, depth + 1));
- switch (loop_p->kind & DLOOP_KIND_MASK) {
- case DLOOP_KIND_CONTIG:
- MPIDI_Dataloop_dot_printf(loop_p->loop_params.c_t.dataloop, depth + 1, 0);
- break;
- case DLOOP_KIND_VECTOR:
- MPIDI_Dataloop_dot_printf(loop_p->loop_params.v_t.dataloop, depth + 1, 0);
- break;
- case DLOOP_KIND_INDEXED:
- MPIDI_Dataloop_dot_printf(loop_p->loop_params.i_t.dataloop, depth + 1, 0);
- break;
- case DLOOP_KIND_BLOCKINDEXED:
- MPIDI_Dataloop_dot_printf(loop_p->loop_params.bi_t.dataloop, depth + 1, 0);
- break;
- case DLOOP_KIND_STRUCT:
- for (i=0; i < loop_p->loop_params.s_t.count; i++) {
- MPIDI_Dataloop_dot_printf(loop_p->loop_params.s_t.dataloop_array[i],
- depth + 1, 0);
- }
- break;
- default:
- MPIU_DBG_OUT(DATATYPE," < unsupported type >");
- }
- }
-
-
- if (header) {
- MPIU_DBG_OUT(DATATYPE," }\n}");
- }
- return;
-}
-
-void MPIDI_Datatype_printf(MPI_Datatype type,
- int depth,
- MPI_Aint displacement,
- int blocklength,
- int header)
-{
-#ifdef USE_DBG_LOGGING
- char *string;
- MPI_Aint size;
- MPI_Aint extent, true_lb, true_ub, lb, ub, sticky_lb, sticky_ub;
-
- if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
- string = MPIDU_Datatype_builtin_to_string(type);
- if (type == MPI_LB) sticky_lb = 1;
- else sticky_lb = 0;
- if (type == MPI_UB) sticky_ub = 1;
- else sticky_ub = 0;
- }
- else {
- MPID_Datatype *type_ptr;
-
- MPID_Datatype_get_ptr(type, type_ptr);
- string = MPIDU_Datatype_combiner_to_string(type_ptr->contents->combiner);
- sticky_lb = type_ptr->has_sticky_lb;
- sticky_ub = type_ptr->has_sticky_ub;
- }
-
- MPIR_Type_size_impl(type, &size);
- MPIR_Type_get_true_extent_impl(type, &true_lb, &extent);
- true_ub = extent + true_lb;
- MPIR_Type_get_extent_impl(type, &lb, &extent);
- ub = extent + lb;
-
- if (header == 1) {
- /* 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 */
- MPIU_DBG_OUT(DATATYPE,"------------------------------------------------------------------------------------------------------------------------------------------\n");
- MPIU_DBG_OUT(DATATYPE,"depth type size extent true_lb true_ub lb(s) ub(s) disp blklen\n");
- MPIU_DBG_OUT(DATATYPE,"------------------------------------------------------------------------------------------------------------------------------------------\n");
- }
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%5d %21s %11d " MPI_AINT_FMT_DEC_SPEC " " MPI_AINT_FMT_DEC_SPEC " " MPI_AINT_FMT_DEC_SPEC " " MPI_AINT_FMT_DEC_SPEC "(" MPI_AINT_FMT_DEC_SPEC ") " MPI_AINT_FMT_DEC_SPEC "(" MPI_AINT_FMT_DEC_SPEC ") " MPI_AINT_FMT_DEC_SPEC " %11d",
- depth,
- string,
- (int) size,
- (MPI_Aint) extent,
- (MPI_Aint) true_lb,
- (MPI_Aint) true_ub,
- (MPI_Aint) lb,
- (MPI_Aint) sticky_lb,
- (MPI_Aint) ub,
- (MPI_Aint) sticky_ub,
- (MPI_Aint) displacement,
- (int) blocklength));
-#endif
- return;
-}
-/* --END ERROR HANDLING-- */
-
-/* longest string is 21 characters */
-char *MPIDU_Datatype_builtin_to_string(MPI_Datatype type)
-{
- static char t_char[] = "MPI_CHAR";
- static char t_uchar[] = "MPI_UNSIGNED_CHAR";
- static char t_byte[] = "MPI_BYTE";
- static char t_wchar_t[] = "MPI_WCHAR";
- static char t_short[] = "MPI_SHORT";
- static char t_ushort[] = "MPI_UNSIGNED_SHORT";
- static char t_int[] = "MPI_INT";
- static char t_uint[] = "MPI_UNSIGNED";
- static char t_long[] = "MPI_LONG";
- static char t_ulong[] = "MPI_UNSIGNED_LONG";
- static char t_float[] = "MPI_FLOAT";
- static char t_double[] = "MPI_DOUBLE";
- static char t_longdouble[] = "MPI_LONG_DOUBLE";
- static char t_longlongint[] = "MPI_LONG_LONG_INT";
- static char t_longlong[] = "MPI_LONG_LONG";
- static char t_ulonglong[] = "MPI_UNSIGNED_LONG_LONG";
- static char t_schar[] = "MPI_SIGNED_CHAR";
-
- static char t_packed[] = "MPI_PACKED";
- static char t_lb[] = "MPI_LB";
- static char t_ub[] = "MPI_UB";
-
- static char t_floatint[] = "MPI_FLOAT_INT";
- static char t_doubleint[] = "MPI_DOUBLE_INT";
- static char t_longint[] = "MPI_LONG_INT";
- static char t_shortint[] = "MPI_SHORT_INT";
- static char t_2int[] = "MPI_2INT";
- static char t_longdoubleint[] = "MPI_LONG_DOUBLE_INT";
-
- static char t_complex[] = "MPI_COMPLEX";
- static char t_doublecomplex[] = "MPI_DOUBLE_COMPLEX";
- static char t_logical[] = "MPI_LOGICAL";
- static char t_real[] = "MPI_REAL";
- static char t_doubleprecision[] = "MPI_DOUBLE_PRECISION";
- static char t_integer[] = "MPI_INTEGER";
- static char t_2integer[] = "MPI_2INTEGER";
-#ifdef MPICH_DEFINE_2COMPLEX
- static char t_2complex[] = "MPI_2COMPLEX";
- static char t_2doublecomplex[] = "MPI_2DOUBLE_COMPLEX";
-#endif
- static char t_2real[] = "MPI_2REAL";
- static char t_2doubleprecision[] = "MPI_2DOUBLE_PRECISION";
- static char t_character[] = "MPI_CHARACTER";
-
- if (type == MPI_CHAR) return t_char;
- if (type == MPI_UNSIGNED_CHAR) return t_uchar;
- if (type == MPI_SIGNED_CHAR) return t_schar;
- if (type == MPI_BYTE) return t_byte;
- if (type == MPI_WCHAR) return t_wchar_t;
- if (type == MPI_SHORT) return t_short;
- if (type == MPI_UNSIGNED_SHORT) return t_ushort;
- if (type == MPI_INT) return t_int;
- if (type == MPI_UNSIGNED) return t_uint;
- if (type == MPI_LONG) return t_long;
- if (type == MPI_UNSIGNED_LONG) return t_ulong;
- if (type == MPI_FLOAT) return t_float;
- if (type == MPI_DOUBLE) return t_double;
- if (type == MPI_LONG_DOUBLE) return t_longdouble;
- if (type == MPI_LONG_LONG_INT) return t_longlongint;
- if (type == MPI_LONG_LONG) return t_longlong;
- if (type == MPI_UNSIGNED_LONG_LONG) return t_ulonglong;
-
- if (type == MPI_PACKED) return t_packed;
- if (type == MPI_LB) return t_lb;
- if (type == MPI_UB) return t_ub;
-
- if (type == MPI_FLOAT_INT) return t_floatint;
- if (type == MPI_DOUBLE_INT) return t_doubleint;
- if (type == MPI_LONG_INT) return t_longint;
- if (type == MPI_SHORT_INT) return t_shortint;
- if (type == MPI_2INT) return t_2int;
- if (type == MPI_LONG_DOUBLE_INT) return t_longdoubleint;
-
- if (type == MPI_COMPLEX) return t_complex;
- if (type == MPI_DOUBLE_COMPLEX) return t_doublecomplex;
- if (type == MPI_LOGICAL) return t_logical;
- if (type == MPI_REAL) return t_real;
- if (type == MPI_DOUBLE_PRECISION) return t_doubleprecision;
- if (type == MPI_INTEGER) return t_integer;
- if (type == MPI_2INTEGER) return t_2integer;
-#ifdef MPICH_DEFINE_2COMPLEX
- if (type == MPI_2COMPLEX) return t_2complex;
- if (type == MPI_2DOUBLE_COMPLEX) return t_2doublecomplex;
-#endif
- if (type == MPI_2REAL) return t_2real;
- if (type == MPI_2DOUBLE_PRECISION) return t_2doubleprecision;
- if (type == MPI_CHARACTER) return t_character;
-
- return NULL;
-}
-
-/* MPIDU_Datatype_combiner_to_string(combiner)
- *
- * Converts a numeric combiner into a pointer to a string used for printing.
- *
- * longest string is 16 characters.
- */
-char *MPIDU_Datatype_combiner_to_string(int combiner)
-{
- static char c_named[] = "named";
- static char c_contig[] = "contig";
- static char c_vector[] = "vector";
- static char c_hvector[] = "hvector";
- static char c_indexed[] = "indexed";
- static char c_hindexed[] = "hindexed";
- static char c_struct[] = "struct";
- static char c_dup[] = "dup";
- static char c_hvector_integer[] = "hvector_integer";
- static char c_hindexed_integer[] = "hindexed_integer";
- static char c_indexed_block[] = "indexed_block";
- static char c_hindexed_block[] = "hindexed_block";
- static char c_struct_integer[] = "struct_integer";
- static char c_subarray[] = "subarray";
- static char c_darray[] = "darray";
- static char c_f90_real[] = "f90_real";
- static char c_f90_complex[] = "f90_complex";
- static char c_f90_integer[] = "f90_integer";
- static char c_resized[] = "resized";
-
- if (combiner == MPI_COMBINER_NAMED) return c_named;
- if (combiner == MPI_COMBINER_CONTIGUOUS) return c_contig;
- if (combiner == MPI_COMBINER_VECTOR) return c_vector;
- if (combiner == MPI_COMBINER_HVECTOR) return c_hvector;
- if (combiner == MPI_COMBINER_INDEXED) return c_indexed;
- if (combiner == MPI_COMBINER_HINDEXED) return c_hindexed;
- if (combiner == MPI_COMBINER_STRUCT) return c_struct;
- if (combiner == MPI_COMBINER_DUP) return c_dup;
- if (combiner == MPI_COMBINER_HVECTOR_INTEGER) return c_hvector_integer;
- if (combiner == MPI_COMBINER_HINDEXED_INTEGER) return c_hindexed_integer;
- if (combiner == MPI_COMBINER_INDEXED_BLOCK) return c_indexed_block;
- if (combiner == MPI_COMBINER_HINDEXED_BLOCK) return c_hindexed_block;
- if (combiner == MPI_COMBINER_STRUCT_INTEGER) return c_struct_integer;
- if (combiner == MPI_COMBINER_SUBARRAY) return c_subarray;
- if (combiner == MPI_COMBINER_DARRAY) return c_darray;
- if (combiner == MPI_COMBINER_F90_REAL) return c_f90_real;
- if (combiner == MPI_COMBINER_F90_COMPLEX) return c_f90_complex;
- if (combiner == MPI_COMBINER_F90_INTEGER) return c_f90_integer;
- if (combiner == MPI_COMBINER_RESIZED) return c_resized;
-
- return NULL;
-}
-
-/* --BEGIN DEBUG-- */
-/*
- * You must configure MPICH2 with the logging option enabled (--enable-g=log)
- * for these routines to print - in which case, they use the same options
- * as the logging code, including print to file and control by class (DATATYPE)
- */
-void MPIDU_Datatype_debug(MPI_Datatype type,
- int array_ct)
-{
- int is_builtin;
- MPID_Datatype *dtp ATTRIBUTE((unused));
-
- is_builtin = (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN);
-
- /* can get a NULL type a number of different ways, including not having
- * fortran support included.
- */
- if (type == MPI_DATATYPE_NULL) {
- MPIU_DBG_OUT_FMT(DATATYPE,
- (MPIU_DBG_FDEST,
- "# MPIU_Datatype_debug: MPI_Datatype = MPI_DATATYPE_NULL"));
- return;
- }
-
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# MPIU_Datatype_debug: MPI_Datatype = 0x%0x (%s)", type,
- (is_builtin) ? MPIDU_Datatype_builtin_to_string(type) :
- "derived"));
-
- if (is_builtin) return;
-
- MPID_Datatype_get_ptr(type, dtp);
- MPIU_Assert(dtp != NULL);
-
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# Size = " MPI_AINT_FMT_DEC_SPEC ", Extent = " MPI_AINT_FMT_DEC_SPEC ", LB = " MPI_AINT_FMT_DEC_SPEC "%s, UB = " MPI_AINT_FMT_DEC_SPEC "%s, Extent = " MPI_AINT_FMT_DEC_SPEC ", Element Size = " MPI_AINT_FMT_DEC_SPEC " (%s), %s",
- (MPI_Aint) dtp->size,
- (MPI_Aint) dtp->extent,
- (MPI_Aint) dtp->lb,
- (dtp->has_sticky_lb) ? "(sticky)" : "",
- (MPI_Aint) dtp->ub,
- (dtp->has_sticky_ub) ? "(sticky)" : "",
- (MPI_Aint) dtp->extent,
- (MPI_Aint) dtp->builtin_element_size,
- dtp->builtin_element_size == -1 ? "multiple types" :
- MPIDU_Datatype_builtin_to_string(dtp->basic_type),
- dtp->is_contig ? "is N contig" : "is not N contig"));
-
- MPIU_DBG_OUT(DATATYPE,"# Contents:");
- MPIDI_Datatype_contents_printf(type, 0, array_ct);
-
- MPIU_DBG_OUT(DATATYPE,"# Dataloop:");
- MPIDI_Datatype_dot_printf(type, 0, 1);
-}
-
-static char *MPIDI_Datatype_depth_spacing(int depth)
-{
- static char d0[] = "";
- static char d1[] = " ";
- static char d2[] = " ";
- static char d3[] = " ";
- static char d4[] = " ";
- static char d5[] = " ";
-
- switch (depth) {
- case 0: return d0;
- case 1: return d1;
- case 2: return d2;
- case 3: return d3;
- case 4: return d4;
- default: return d5;
- }
-}
-
-#define __mpidi_datatype_free_and_return { \
- if (cp->nr_ints > 0) MPIU_Free(ints); \
- if (cp->nr_aints > 0) MPIU_Free(aints); \
- if (cp->nr_types > 0) MPIU_Free(types); \
- return; }
-
-void MPIDI_Datatype_contents_printf(MPI_Datatype type,
- int depth,
- int acount)
-{
- int i;
- MPID_Datatype *dtp;
- MPID_Datatype_contents *cp;
-
- MPI_Aint *aints = NULL;
- MPI_Datatype *types = NULL;
- int *ints = NULL;
-
- if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# %stype: %s\n",
- MPIDI_Datatype_depth_spacing(depth),
- MPIDU_Datatype_builtin_to_string(type)));
- return;
- }
-
- MPID_Datatype_get_ptr(type, dtp);
- cp = dtp->contents;
-
- if (cp == NULL) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# <NULL>\n"));
- return;
- }
-
- if (cp->nr_ints > 0)
- {
- ints = (int *) MPIU_Malloc(cp->nr_ints * sizeof(int));
- MPIDI_Datatype_get_contents_ints(cp, ints);
- }
-
- if (cp->nr_aints > 0) {
- aints = (MPI_Aint *) MPIU_Malloc(cp->nr_aints * sizeof(MPI_Aint));
- MPIDI_Datatype_get_contents_aints(cp, aints);
- }
-
- if (cp->nr_types > 0) {
- types = (MPI_Datatype *) MPIU_Malloc(cp->nr_types * sizeof(MPI_Datatype));
- MPIDI_Datatype_get_contents_types(cp, types);
- }
-
-
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# %scombiner: %s",
- MPIDI_Datatype_depth_spacing(depth),
- MPIDU_Datatype_combiner_to_string(cp->combiner)));
-
- switch (cp->combiner) {
- case MPI_COMBINER_NAMED:
- case MPI_COMBINER_DUP:
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_RESIZED:
- /* not done */
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_CONTIGUOUS:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# %scontig ct = %d\n",
- MPIDI_Datatype_depth_spacing(depth),
- *ints));
- MPIDI_Datatype_contents_printf(*types,
- depth + 1,
- acount);
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_VECTOR:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# %svector ct = %d, blk = %d, str = %d\n",
- MPIDI_Datatype_depth_spacing(depth),
- ints[0],
- ints[1],
- ints[2]));
- MPIDI_Datatype_contents_printf(*types,
- depth + 1,
- acount);
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_HVECTOR:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# %shvector ct = %d, blk = %d, str = " MPI_AINT_FMT_DEC_SPEC "\n",
- MPIDI_Datatype_depth_spacing(depth),
- ints[0],
- ints[1],
- (MPI_Aint) aints[0]));
- MPIDI_Datatype_contents_printf(*types,
- depth + 1,
- acount);
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_INDEXED:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# %sindexed ct = %d:",
- MPIDI_Datatype_depth_spacing(depth),
- ints[0]));
- for (i=0; i < acount && i < ints[0]; i++) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# %s indexed [%d]: blk = %d, disp = %d\n",
- MPIDI_Datatype_depth_spacing(depth),
- i,
- ints[i+1],
- ints[i+(cp->nr_ints/2)+1]));
- MPIDI_Datatype_contents_printf(*types,
- depth + 1,
- acount);
- }
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_HINDEXED:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# %shindexed ct = %d:",
- MPIDI_Datatype_depth_spacing(depth),
- ints[0]));
- for (i=0; i < acount && i < ints[0]; i++) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# %s hindexed [%d]: blk = %d, disp = " MPI_AINT_FMT_DEC_SPEC "\n",
- MPIDI_Datatype_depth_spacing(depth),
- i,
- (int) ints[i+1],
- (MPI_Aint) aints[i]));
- MPIDI_Datatype_contents_printf(*types,
- depth + 1,
- acount);
- }
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_STRUCT:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# %sstruct ct = %d:",
- MPIDI_Datatype_depth_spacing(depth),
- (int) ints[0]));
- for (i=0; i < acount && i < ints[0]; i++) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# %s struct[%d]: blk = %d, disp = " MPI_AINT_FMT_DEC_SPEC "\n",
- MPIDI_Datatype_depth_spacing(depth),
- i,
- (int) ints[i+1],
- (MPI_Aint) aints[i]));
- MPIDI_Datatype_contents_printf(types[i],
- depth + 1,
- acount);
- }
- __mpidi_datatype_free_and_return;
- case MPI_COMBINER_SUBARRAY:
- MPIU_DBG_OUT_FMT(DATATYPE, (MPIU_DBG_FDEST,"# %ssubarray ct = %d:",
- MPIDI_Datatype_depth_spacing(depth),
- (int) ints[0]));
- for (i=0; i< acount && i < ints[0]; i++) {
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,
- "# %s sizes[%d] = %d subsizes[%d] = %d starts[%d] = %d\n",
- MPIDI_Datatype_depth_spacing(depth),
- i, (int)ints[i+1],
- i, (int)ints[i+ ints[0]+1],
- i, (int)ints[2*ints[0]+1]));
- }
- MPIDI_Datatype_contents_printf(*types,
- depth + 1,
- acount);
- __mpidi_datatype_free_and_return;
-
- default:
- MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"# %sunhandled combiner",
- MPIDI_Datatype_depth_spacing(depth)));
- __mpidi_datatype_free_and_return;
- }
-}
-/* --END DEBUG-- */
diff --git a/src/mpid/common/datatype/mpid_type_dup.c b/src/mpid/common/datatype/mpid_type_dup.c
deleted file mode 100644
index d4a8b3c..0000000
--- a/src/mpid/common/datatype/mpid_type_dup.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-#undef FCNAME
-#define FCNAME "MPID_Type_dup"
-
-/* #define MPID_TYPE_ALLOC_DEBUG */
-
-/*@
- MPID_Type_dup - create a copy of a datatype
-
-Input Parameters:
-- oldtype - handle of original datatype
-
-Output Parameters:
-. newtype - handle of newly created copy of datatype
-
- Return Value:
- 0 on success, MPI error code on failure.
-@*/
-int MPID_Type_dup(MPI_Datatype oldtype,
- MPI_Datatype *newtype)
-{
- int mpi_errno = MPI_SUCCESS;
- MPID_Datatype *new_dtp = 0, *old_dtp;
-
- if (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN) {
- /* create a new type and commit it. */
- mpi_errno = MPID_Type_contiguous(1, oldtype, newtype);
- if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
- }
- else {
- /* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- if (!new_dtp) {
- /* --BEGIN ERROR HANDLING-- */
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPID_Type_dup", __LINE__, MPI_ERR_OTHER,
- "**nomem", 0);
- goto fn_fail;
- /* --END ERROR HANDLING-- */
- }
-
- MPID_Datatype_get_ptr(oldtype, old_dtp);
-
- /* fill in datatype */
- MPIU_Object_set_ref(new_dtp, 1);
- /* new_dtp->handle is filled in by MPIU_Handle_obj_alloc() */
- new_dtp->is_contig = old_dtp->is_contig;
- new_dtp->size = old_dtp->size;
- new_dtp->extent = old_dtp->extent;
- new_dtp->ub = old_dtp->ub;
- new_dtp->lb = old_dtp->lb;
- new_dtp->true_ub = old_dtp->true_ub;
- new_dtp->true_lb = old_dtp->true_lb;
- new_dtp->alignsize = old_dtp->alignsize;
- new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
- new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
- new_dtp->is_permanent = old_dtp->is_permanent;
- new_dtp->is_committed = old_dtp->is_committed;
-
- new_dtp->attributes = NULL; /* Attributes are copied in the
- top-level MPI_Type_dup routine */
- new_dtp->cache_id = -1; /* ??? */
- new_dtp->name[0] = 0; /* The Object name is not copied on
- a dup */
- new_dtp->n_builtin_elements = old_dtp->n_builtin_elements;
- new_dtp->builtin_element_size = old_dtp->builtin_element_size;
- new_dtp->basic_type = old_dtp->basic_type;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = old_dtp->dataloop_size;
- new_dtp->dataloop_depth = old_dtp->dataloop_depth;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = old_dtp->hetero_dloop_size;
- new_dtp->hetero_dloop_depth = old_dtp->hetero_dloop_depth;
- *newtype = new_dtp->handle;
-
- if (old_dtp->is_committed) {
- MPIU_Assert(old_dtp->dataloop != NULL);
- MPID_Dataloop_dup(old_dtp->dataloop,
- old_dtp->dataloop_size,
- &new_dtp->dataloop);
- if (old_dtp->hetero_dloop != NULL) {
- /* at this time MPI_COMPLEX doesn't have this loop...
- * -- RBR, 02/01/2007
- */
- MPID_Dataloop_dup(old_dtp->hetero_dloop,
- old_dtp->hetero_dloop_size,
- &new_dtp->hetero_dloop);
- }
-
-#ifdef MPID_Dev_datatype_commit_hook
- MPID_Dev_datatype_dup_hook(new_dtp);
-#endif /* MPID_Dev_datatype_commit_hook */
- }
- }
-
- MPIU_DBG_MSG_D(DATATYPE,VERBOSE, "dup type %x created.", *newtype);
-
- fn_fail:
- return mpi_errno;
-}
diff --git a/src/mpid/common/datatype/mpid_type_get_contents.c b/src/mpid/common/datatype/mpid_type_get_contents.c
deleted file mode 100644
index 60aadba..0000000
--- a/src/mpid/common/datatype/mpid_type_get_contents.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpi.h>
-#include <mpiimpl.h>
-#include <mpid_datatype.h>
-#include <mpid_dataloop.h>
-
-/*@
- MPID_Type_get_contents - get content information from datatype
-
-Input Parameters:
-+ datatype - MPI datatype
-. max_integers - size of array_of_integers
-. max_addresses - size of array_of_addresses
-- max_datatypes - size of array_of_datatypes
-
-Output Parameters:
-+ array_of_integers - integers used in creating type
-. array_of_addresses - MPI_Aints used in creating type
-- array_of_datatypes - MPI_Datatypes used in creating type
-
-@*/
-int MPID_Type_get_contents(MPI_Datatype datatype,
- int max_integers,
- int max_addresses,
- int max_datatypes,
- int array_of_integers[],
- MPI_Aint array_of_addresses[],
- MPI_Datatype array_of_datatypes[])
-{
- int i, mpi_errno;
- MPID_Datatype *dtp;
- MPID_Datatype_contents *cp;
-
- /* --BEGIN ERROR HANDLING-- */
- /* these are checked at the MPI layer, so I feel that asserts
- * are appropriate.
- */
- MPIU_Assert(HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN);
- MPIU_Assert(datatype != MPI_FLOAT_INT &&
- datatype != MPI_DOUBLE_INT &&
- datatype != MPI_LONG_INT &&
- datatype != MPI_SHORT_INT &&
- datatype != MPI_LONG_DOUBLE_INT);
- /* --END ERROR HANDLING-- */
-
- MPID_Datatype_get_ptr(datatype, dtp);
- cp = dtp->contents;
- MPIU_Assert(cp != NULL);
-
- /* --BEGIN ERROR HANDLING-- */
- if (max_integers < cp->nr_ints ||
- max_addresses < cp->nr_aints ||
- max_datatypes < cp->nr_types)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPID_Type_get_contents", __LINE__,
- MPI_ERR_OTHER, "**dtype", 0);
- return mpi_errno;
- }
- /* --END ERROR HANDLING-- */
-
- if (cp->nr_ints > 0)
- {
- MPIDI_Datatype_get_contents_ints(cp, array_of_integers);
- }
-
- if (cp->nr_aints > 0) {
- MPIDI_Datatype_get_contents_aints(cp, array_of_addresses);
- }
-
- if (cp->nr_types > 0) {
- MPIDI_Datatype_get_contents_types(cp, array_of_datatypes);
- }
-
- for (i=0; i < cp->nr_types; i++)
- {
- if (HANDLE_GET_KIND(array_of_datatypes[i]) != HANDLE_KIND_BUILTIN)
- {
- MPID_Datatype_get_ptr(array_of_datatypes[i], dtp);
- MPID_Datatype_add_ref(dtp);
- }
- }
-
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/common/datatype/mpid_type_get_envelope.c b/src/mpid/common/datatype/mpid_type_get_envelope.c
deleted file mode 100644
index 665c6b9..0000000
--- a/src/mpid/common/datatype/mpid_type_get_envelope.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpi.h>
-#include <mpiimpl.h>
-#include <mpid_datatype.h>
-#include <mpid_dataloop.h>
-
-/*@
- MPID_Type_get_envelope - get envelope information from datatype
-
-Input Parameters:
-. datatype - MPI datatype
-
-Output Parameters:
-+ num_integers - number of integers used to create datatype
-. num_addresses - number of MPI_Aints used to create datatype
-. num_datatypes - number of MPI_Datatypes used to create datatype
-- combiner - function type used to create datatype
-@*/
-
-int MPID_Type_get_envelope(MPI_Datatype datatype,
- int *num_integers,
- int *num_addresses,
- int *num_datatypes,
- int *combiner)
-{
- if (HANDLE_GET_KIND(datatype) == HANDLE_KIND_BUILTIN ||
- datatype == MPI_FLOAT_INT ||
- datatype == MPI_DOUBLE_INT ||
- datatype == MPI_LONG_INT ||
- datatype == MPI_SHORT_INT ||
- datatype == MPI_LONG_DOUBLE_INT)
- {
- *combiner = MPI_COMBINER_NAMED;
- *num_integers = 0;
- *num_addresses = 0;
- *num_datatypes = 0;
- }
- else {
- MPID_Datatype *dtp;
-
- MPID_Datatype_get_ptr(datatype, dtp);
-
- *combiner = dtp->contents->combiner;
- *num_integers = dtp->contents->nr_ints;
- *num_addresses = dtp->contents->nr_aints;
- *num_datatypes = dtp->contents->nr_types;
- }
-
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/common/datatype/mpid_type_indexed.c b/src/mpid/common/datatype/mpid_type_indexed.c
deleted file mode 100644
index 69e23a1..0000000
--- a/src/mpid/common/datatype/mpid_type_indexed.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-#undef MPID_TYPE_ALLOC_DEBUG
-
-/*@
- MPID_Type_indexed - create an indexed datatype
-
-Input Parameters:
-+ count - number of blocks in type
-. blocklength_array - number of elements in each block
-. displacement_array - offsets of blocks from start of type (see next
- parameter for units)
-. dispinbytes - if nonzero, then displacements are in bytes (the
- displacement_array is an array of ints), otherwise they in terms of
- extent of oldtype (the displacement_array is an array of MPI_Aints)
-- oldtype - type (using handle) of datatype on which new type is based
-
-Output Parameters:
-. newtype - handle of new indexed datatype
-
- Return Value:
- 0 on success, -1 on failure.
-@*/
-
-int MPID_Type_indexed(int count,
- const int *blocklength_array,
- const void *displacement_array,
- int dispinbytes,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype)
-{
- int mpi_errno = MPI_SUCCESS;
- int is_builtin, old_is_contig;
- int i;
- MPI_Aint contig_count;
- MPI_Aint el_sz, el_ct, old_ct, old_sz;
- MPI_Aint old_lb, old_ub, old_extent, old_true_lb, old_true_ub;
- MPI_Aint min_lb = 0, max_ub = 0, eff_disp;
- MPI_Datatype el_type;
-
- MPID_Datatype *new_dtp;
-
- if (count == 0) return MPID_Type_zerolen(newtype);
-
- /* sanity check that blocklens are all non-negative */
- for (i = 0; i < count; ++i) {
- DLOOP_Assert(blocklength_array[i] >= 0);
- }
-
- /* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- /* --BEGIN ERROR HANDLING-- */
- if (!new_dtp)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- "MPID_Type_indexed",
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem",
- 0);
- return mpi_errno;
- }
- /* --END ERROR HANDLING-- */
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 0;
- new_dtp->is_committed = 0;
- new_dtp->attributes = NULL;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = NULL;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
-
- if (is_builtin)
- {
- /* builtins are handled differently than user-defined types because
- * they have no associated dataloop or datatype structure.
- */
- el_sz = MPID_Datatype_get_basic_size(oldtype);
- old_sz = el_sz;
- el_ct = 1;
- el_type = oldtype;
-
- old_lb = 0;
- old_true_lb = 0;
- old_ub = (MPI_Aint) el_sz;
- old_true_ub = (MPI_Aint) el_sz;
- old_extent = (MPI_Aint) el_sz;
- old_is_contig = 1;
-
- new_dtp->has_sticky_ub = 0;
- new_dtp->has_sticky_lb = 0;
-
- MPIU_Assign_trunc(new_dtp->alignsize, el_sz, MPI_Aint);
- new_dtp->builtin_element_size = el_sz;
- new_dtp->basic_type = el_type;
-
- new_dtp->max_contig_blocks = count;
- }
- else
- {
- /* user-defined base type (oldtype) */
- MPID_Datatype *old_dtp;
-
- MPID_Datatype_get_ptr(oldtype, old_dtp);
-
- /* Ensure that "builtin_element_size" fits into an int datatype. */
- MPIU_Ensure_Aint_fits_in_int(old_dtp->builtin_element_size);
-
- el_sz = old_dtp->builtin_element_size;
- old_sz = old_dtp->size;
- el_ct = old_dtp->n_builtin_elements;
- el_type = old_dtp->basic_type;
-
- old_lb = old_dtp->lb;
- old_true_lb = old_dtp->true_lb;
- old_ub = old_dtp->ub;
- old_true_ub = old_dtp->true_ub;
- old_extent = old_dtp->extent;
- old_is_contig = old_dtp->is_contig;
-
- new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
- new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
- new_dtp->builtin_element_size = (MPI_Aint) el_sz;
- new_dtp->basic_type = el_type;
-
- new_dtp->max_contig_blocks = 0;
- for(i=0; i<count; i++)
- new_dtp->max_contig_blocks
- += old_dtp->max_contig_blocks
- * ((MPI_Aint ) blocklength_array[i]);
- }
-
- /* find the first nonzero blocklength element */
- i = 0;
- while (i < count && blocklength_array[i] == 0) i++;
-
- if (i == count) {
- MPIU_Handle_obj_free(&MPID_Datatype_mem, new_dtp);
- return MPID_Type_zerolen(newtype);
- }
-
- /* priming for loop */
- old_ct = blocklength_array[i];
- eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[i] :
- (((MPI_Aint) ((int *) displacement_array)[i]) * old_extent);
-
- MPID_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength_array[i],
- eff_disp,
- old_lb,
- old_ub,
- old_extent,
- min_lb,
- max_ub);
-
- /* determine min lb, max ub, and count of old types in remaining
- * nonzero size blocks
- */
- for (i++; i < count; i++)
- {
- MPI_Aint tmp_lb, tmp_ub;
-
- if (blocklength_array[i] > 0) {
- old_ct += blocklength_array[i]; /* add more oldtypes */
-
- eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[i] :
- (((MPI_Aint) ((int *) displacement_array)[i]) * old_extent);
-
- /* calculate ub and lb for this block */
- MPID_DATATYPE_BLOCK_LB_UB((MPI_Aint)(blocklength_array[i]),
- eff_disp,
- old_lb,
- old_ub,
- old_extent,
- tmp_lb,
- tmp_ub);
-
- if (tmp_lb < min_lb) min_lb = tmp_lb;
- if (tmp_ub > max_ub) max_ub = tmp_ub;
- }
- }
-
- new_dtp->size = old_ct * old_sz;
-
- new_dtp->lb = min_lb;
- new_dtp->ub = max_ub;
- new_dtp->true_lb = min_lb + (old_true_lb - old_lb);
- new_dtp->true_ub = max_ub + (old_true_ub - old_ub);
- new_dtp->extent = max_ub - min_lb;
-
- new_dtp->n_builtin_elements = old_ct * el_ct;
-
- /* new type is only contig for N types if it's all one big
- * block, its size and extent are the same, and the old type
- * was also contiguous.
- */
- new_dtp->is_contig = 0;
- if(old_is_contig)
- {
- MPI_Aint *blklens = MPIU_Malloc(count *sizeof(MPI_Aint));
- for (i=0; i<count; i++)
- blklens[i] = blocklength_array[i];
- contig_count = MPID_Type_indexed_count_contig(count,
- blklens,
- displacement_array,
- dispinbytes,
- old_extent);
- new_dtp->max_contig_blocks = contig_count;
- if( (contig_count == 1) &&
- ((MPI_Aint) new_dtp->size == new_dtp->extent))
- {
- new_dtp->is_contig = 1;
- }
- MPIU_Free(blklens);
- }
-
- *newtype = new_dtp->handle;
- return mpi_errno;
-}
diff --git a/src/mpid/common/datatype/mpid_type_struct.c b/src/mpid/common/datatype/mpid_type_struct.c
deleted file mode 100644
index cabd164..0000000
--- a/src/mpid/common/datatype/mpid_type_struct.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#undef MPID_STRUCT_FLATTEN_DEBUG
-#undef MPID_STRUCT_DEBUG
-
-static MPI_Aint MPID_Type_struct_alignsize(int count,
- const MPI_Datatype *oldtype_array,
- const MPI_Aint *displacement_array);
-
-/* MPID_Type_struct_alignsize
- *
- * This function guesses at how the C compiler would align a structure
- * with the given components.
- *
- * It uses these configure-time defines to do its magic:
- * - HAVE_MAX_INTEGER_ALIGNMENT - maximum byte alignment of integers
- * - HAVE_MAX_FP_ALIGNMENT - maximum byte alignment of floating points
- * - HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT - maximum byte alignment with long
- * doubles (if different from FP_ALIGNMENT)
- * - HAVE_MAX_DOUBLE_FP_ALIGNMENT - maximum byte alignment with doubles (if
- * long double is different from FP_ALIGNMENT)
- * - HAVE_DOUBLE_POS_ALIGNMENT - indicates that structures with doubles
- * are aligned differently if double isn't
- * at displacement 0 (e.g. PPC32/64).
- * - HAVE_LLINT_POS_ALIGNMENT - same as above, for MPI_LONG_LONG_INT
- *
- * The different FP, DOUBLE, LONG_DOUBLE alignment case are necessary for
- * Cygwin on X86 (because long_double is 12 bytes, so double and long double
- * have different natural alignments). Linux on X86, however, does not have
- * different rules for this case.
- */
-static MPI_Aint MPID_Type_struct_alignsize(int count,
- const MPI_Datatype *oldtype_array,
- const MPI_Aint *displacement_array)
-{
- int i;
- MPI_Aint max_alignsize = 0, tmp_alignsize, derived_alignsize = 0;
-
- for (i=0; i < count; i++)
- {
- /* shouldn't be called with an LB or UB, but we'll handle it nicely */
- if (oldtype_array[i] == MPI_LB || oldtype_array[i] == MPI_UB) continue;
- else if (HANDLE_GET_KIND(oldtype_array[i]) == HANDLE_KIND_BUILTIN)
- {
- tmp_alignsize = MPID_Datatype_get_basic_size(oldtype_array[i]);
-
-#ifdef HAVE_DOUBLE_ALIGNMENT_EXCEPTION
- if (oldtype_array[i] == MPI_DOUBLE) {
- tmp_alignsize = HAVE_DOUBLE_ALIGNMENT_EXCEPTION;
- }
-#endif
-
- switch(oldtype_array[i])
- {
- case MPI_FLOAT:
- case MPI_DOUBLE:
- case MPI_LONG_DOUBLE:
-#if defined(HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT) && \
- defined(HAVE_MAX_DOUBLE_FP_ALIGNMENT)
- if (oldtype_array[i] == MPI_LONG_DOUBLE) {
- if (tmp_alignsize > HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT)
- tmp_alignsize = HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT;
- }
- else if (oldtype_array[i] == MPI_DOUBLE) {
- if (tmp_alignsize > HAVE_MAX_DOUBLE_FP_ALIGNMENT)
- tmp_alignsize = HAVE_MAX_DOUBLE_FP_ALIGNMENT;
- }
- else {
- /* HAVE_MAX_FP_ALIGNMENT may not be defined, hence commented */
- /*
- if (tmp_alignsize > HAVE_MAX_FP_ALIGNMENT)
- tmp_alignsize = HAVE_MAX_FP_ALIGNMENT;
- */
- }
-#elif defined(HAVE_MAX_FP_ALIGNMENT)
- if (tmp_alignsize > HAVE_MAX_FP_ALIGNMENT)
- tmp_alignsize = HAVE_MAX_FP_ALIGNMENT;
-#endif
-#ifdef HAVE_DOUBLE_POS_ALIGNMENT
- /* sort of a hack, but so is this rule */
- if (oldtype_array[i] == MPI_DOUBLE &&
- displacement_array[i] != (MPI_Aint) 0)
- {
- tmp_alignsize = 4;
- }
-#endif
- break;
- default:
-#ifdef HAVE_MAX_INTEGER_ALIGNMENT
- if (tmp_alignsize > HAVE_MAX_INTEGER_ALIGNMENT)
- tmp_alignsize = HAVE_MAX_INTEGER_ALIGNMENT;
-#endif
- break;
-#ifdef HAVE_LLINT_POS_ALIGNMENT
- if (oldtype_array[i] == MPI_LONG_LONG_INT &&
- displacement_array[i] != (MPI_Aint) 0)
- {
- tmp_alignsize = 4;
- }
-#endif
- }
- }
- else
- {
- MPID_Datatype *dtp;
-
- MPID_Datatype_get_ptr(oldtype_array[i], dtp);
- tmp_alignsize = dtp->alignsize;
- if (derived_alignsize < tmp_alignsize)
- derived_alignsize = tmp_alignsize;
- }
- if (max_alignsize < tmp_alignsize) max_alignsize = tmp_alignsize;
-
- }
-
- return max_alignsize;
-}
-
-
-/*@
- MPID_Type_struct - create a struct datatype
-
-Input Parameters:
-+ count - number of blocks in vector
-. blocklength_array - number of elements in each block
-. displacement_array - offsets of blocks from start of type in bytes
-- oldtype_array - types (using handle) of datatypes on which vector is based
-
-Output Parameters:
-. newtype - handle of new struct datatype
-
- Return Value:
- MPI_SUCCESS on success, MPI errno on failure.
-@*/
-int MPID_Type_struct(int count,
- const int *blocklength_array,
- const MPI_Aint *displacement_array,
- const MPI_Datatype *oldtype_array,
- MPI_Datatype *newtype)
-{
- int mpi_errno = MPI_SUCCESS;
- int i, old_are_contig = 1, definitely_not_contig = 0;
- int found_sticky_lb = 0, found_sticky_ub = 0, found_true_lb = 0,
- found_true_ub = 0, found_el_type = 0, found_lb=0, found_ub=0;
- MPI_Aint el_sz = 0;
- MPI_Aint size = 0;
- MPI_Datatype el_type = MPI_DATATYPE_NULL;
- MPI_Aint true_lb_disp = 0, true_ub_disp = 0, sticky_lb_disp = 0,
- sticky_ub_disp = 0, lb_disp = 0, ub_disp = 0;
-
- MPID_Datatype *new_dtp;
-
- if (count == 0) return MPID_Type_zerolen(newtype);
-
-#ifdef MPID_STRUCT_DEBUG
- MPIDI_Datatype_printf(oldtype_array[0], 1, displacement_array[0],
- blocklength_array[0], 1);
- for (i=1; i < count; i++)
- {
- MPIDI_Datatype_printf(oldtype_array[i], 1, displacement_array[i],
- blocklength_array[i], 0);
- }
-#endif
-
- /* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- /* --BEGIN ERROR HANDLING-- */
- if (!new_dtp)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPID_Type_struct",
- __LINE__, MPI_ERR_OTHER,
- "**nomem", 0);
- return mpi_errno;
- }
- /* --END ERROR HANDLING-- */
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 0;
- new_dtp->is_committed = 0;
- new_dtp->attributes = NULL;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = NULL;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- /* check for junk struct with all zero blocks */
- for (i=0; i < count; i++) if (blocklength_array[i] != 0) break;
-
- if (i == count)
- {
- MPIU_Handle_obj_free(&MPID_Datatype_mem, new_dtp);
- return MPID_Type_zerolen(newtype);
- }
-
- new_dtp->max_contig_blocks = 0;
- for (i=0; i < count; i++)
- {
- int is_builtin =
- (HANDLE_GET_KIND(oldtype_array[i]) == HANDLE_KIND_BUILTIN);
- MPI_Aint tmp_lb, tmp_ub, tmp_true_lb, tmp_true_ub;
- MPI_Aint tmp_el_sz;
- MPI_Datatype tmp_el_type;
- MPID_Datatype *old_dtp = NULL;
-
- /* Interpreting typemap to not include 0 blklen things, including
- * MPI_LB and MPI_UB. -- Rob Ross, 10/31/2005
- */
- if (blocklength_array[i] == 0) continue;
-
- if (is_builtin)
- {
- tmp_el_sz = MPID_Datatype_get_basic_size(oldtype_array[i]);
- tmp_el_type = oldtype_array[i];
-
- MPID_DATATYPE_BLOCK_LB_UB((MPI_Aint)(blocklength_array[i]),
- displacement_array[i],
- 0,
- tmp_el_sz,
- tmp_el_sz,
- tmp_lb,
- tmp_ub);
- tmp_true_lb = tmp_lb;
- tmp_true_ub = tmp_ub;
-
- size += tmp_el_sz * blocklength_array[i];
-
- new_dtp->max_contig_blocks++;
- }
- else
- {
- MPID_Datatype_get_ptr(oldtype_array[i], old_dtp);
-
- /* Ensure that "builtin_element_size" fits into an int datatype. */
- MPIU_Ensure_Aint_fits_in_int(old_dtp->builtin_element_size);
-
- tmp_el_sz = old_dtp->builtin_element_size;
- tmp_el_type = old_dtp->basic_type;
-
- MPID_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength_array[i],
- displacement_array[i],
- old_dtp->lb,
- old_dtp->ub,
- old_dtp->extent,
- tmp_lb,
- tmp_ub);
- tmp_true_lb = tmp_lb + (old_dtp->true_lb - old_dtp->lb);
- tmp_true_ub = tmp_ub + (old_dtp->true_ub - old_dtp->ub);
-
- size += old_dtp->size * blocklength_array[i];
-
- new_dtp->max_contig_blocks += old_dtp->max_contig_blocks;
- }
-
- /* element size and type */
- if (oldtype_array[i] != MPI_LB && oldtype_array[i] != MPI_UB)
- {
- if (found_el_type == 0)
- {
- el_sz = tmp_el_sz;
- el_type = tmp_el_type;
- found_el_type = 1;
- }
- else if (el_sz != tmp_el_sz)
- {
- el_sz = -1;
- el_type = MPI_DATATYPE_NULL;
- }
- else if (el_type != tmp_el_type)
- {
- /* Q: should we set el_sz = -1 even though the same? */
- el_type = MPI_DATATYPE_NULL;
- }
- }
-
- /* keep lowest sticky lb */
- if ((oldtype_array[i] == MPI_LB) ||
- (!is_builtin && old_dtp->has_sticky_lb))
- {
- if (!found_sticky_lb)
- {
- found_sticky_lb = 1;
- sticky_lb_disp = tmp_lb;
- }
- else if (sticky_lb_disp > tmp_lb)
- {
- sticky_lb_disp = tmp_lb;
- }
- }
-
- /* keep highest sticky ub */
- if ((oldtype_array[i] == MPI_UB) ||
- (!is_builtin && old_dtp->has_sticky_ub))
- {
- if (!found_sticky_ub)
- {
- found_sticky_ub = 1;
- sticky_ub_disp = tmp_ub;
- }
- else if (sticky_ub_disp < tmp_ub)
- {
- sticky_ub_disp = tmp_ub;
- }
- }
-
- /* keep lowest lb/true_lb and highest ub/true_ub
- *
- * note: checking for contiguity at the same time, to avoid
- * yet another pass over the arrays
- */
- if (oldtype_array[i] != MPI_UB && oldtype_array[i] != MPI_LB)
- {
- if (!found_true_lb)
- {
- found_true_lb = 1;
- true_lb_disp = tmp_true_lb;
- }
- else if (true_lb_disp > tmp_true_lb)
- {
- /* element starts before previous */
- true_lb_disp = tmp_true_lb;
- definitely_not_contig = 1;
- }
-
- if (!found_lb)
- {
- found_lb = 1;
- lb_disp = tmp_lb;
- }
- else if (lb_disp > tmp_lb)
- {
- /* lb before previous */
- lb_disp = tmp_lb;
- definitely_not_contig = 1;
- }
-
- if (!found_true_ub)
- {
- found_true_ub = 1;
- true_ub_disp = tmp_true_ub;
- }
- else if (true_ub_disp < tmp_true_ub)
- {
- true_ub_disp = tmp_true_ub;
- }
- else {
- /* element ends before previous ended */
- definitely_not_contig = 1;
- }
-
- if (!found_ub)
- {
- found_ub = 1;
- ub_disp = tmp_ub;
- }
- else if (ub_disp < tmp_ub)
- {
- ub_disp = tmp_ub;
- }
- else {
- /* ub before previous */
- definitely_not_contig = 1;
- }
- }
-
- if (!is_builtin && !old_dtp->is_contig)
- {
- old_are_contig = 0;
- }
- }
-
- new_dtp->n_builtin_elements = -1; /* TODO */
- new_dtp->builtin_element_size = el_sz;
- new_dtp->basic_type = el_type;
-
- new_dtp->has_sticky_lb = found_sticky_lb;
- new_dtp->true_lb = true_lb_disp;
- new_dtp->lb = (found_sticky_lb) ? sticky_lb_disp : lb_disp;
-
- new_dtp->has_sticky_ub = found_sticky_ub;
- new_dtp->true_ub = true_ub_disp;
- new_dtp->ub = (found_sticky_ub) ? sticky_ub_disp : ub_disp;
-
- new_dtp->alignsize = MPID_Type_struct_alignsize(count,
- oldtype_array,
- displacement_array);
-
- new_dtp->extent = new_dtp->ub - new_dtp->lb;
- if ((!found_sticky_lb) && (!found_sticky_ub))
- {
- /* account for padding */
- MPI_Aint epsilon = (new_dtp->alignsize > 0) ?
- new_dtp->extent % ((MPI_Aint)(new_dtp->alignsize)) : 0;
-
- if (epsilon)
- {
- new_dtp->ub += ((MPI_Aint)(new_dtp->alignsize) - epsilon);
- new_dtp->extent = new_dtp->ub - new_dtp->lb;
- }
- }
-
- new_dtp->size = size;
-
- /* new type is contig for N types if its size and extent are the
- * same, and the old type was also contiguous, and we didn't see
- * something noncontiguous based on true ub/ub.
- */
- if (((MPI_Aint)(new_dtp->size) == new_dtp->extent) &&
- old_are_contig && (! definitely_not_contig))
- {
- new_dtp->is_contig = 1;
- }
- else
- {
- new_dtp->is_contig = 0;
- }
-
- *newtype = new_dtp->handle;
- return mpi_errno;
-}
-
-
diff --git a/src/mpid/common/datatype/mpid_type_vector.c b/src/mpid/common/datatype/mpid_type_vector.c
deleted file mode 100644
index 67e398f..0000000
--- a/src/mpid/common/datatype/mpid_type_vector.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-/* #define MPID_TYPE_ALLOC_DEBUG */
-
-/*@
- MPID_Type_vector - create a vector datatype
-
-Input Parameters:
-+ count - number of blocks in vector
-. blocklength - number of elements in each block
-. stride - distance from beginning of one block to the next (see next
- parameter for units)
-. strideinbytes - if nonzero, then stride is in bytes, otherwise stride
- is in terms of extent of oldtype
-- oldtype - type (using handle) of datatype on which vector is based
-
-Output Parameters:
-. newtype - handle of new vector datatype
-
- Return Value:
- 0 on success, MPI error code on failure.
-@*/
-int MPID_Type_vector(int count,
- int blocklength,
- MPI_Aint stride,
- int strideinbytes,
- MPI_Datatype oldtype,
- MPI_Datatype *newtype)
-{
- int mpi_errno = MPI_SUCCESS;
- int is_builtin, old_is_contig;
- MPI_Aint el_sz, old_sz;
- MPI_Datatype el_type;
- MPI_Aint old_lb, old_ub, old_extent, old_true_lb, old_true_ub, eff_stride;
-
- MPID_Datatype *new_dtp;
-
- if (count == 0) return MPID_Type_zerolen(newtype);
-
- /* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- if (!new_dtp) {
- /* --BEGIN ERROR HANDLING-- */
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPID_Type_vector", __LINE__,
- MPI_ERR_OTHER, "**nomem", 0);
- return mpi_errno;
- /* --END ERROR HANDLING-- */
- }
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 0;
- new_dtp->is_committed = 0;
- new_dtp->attributes = NULL;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = NULL;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
-
- if (is_builtin) {
- el_sz = (MPI_Aint) MPID_Datatype_get_basic_size(oldtype);
- el_type = oldtype;
-
- old_lb = 0;
- old_true_lb = 0;
- old_ub = el_sz;
- old_true_ub = el_sz;
- old_sz = el_sz;
- old_extent = el_sz;
- old_is_contig = 1;
-
- new_dtp->size = (MPI_Aint) count *
- (MPI_Aint) blocklength * el_sz;
- new_dtp->has_sticky_lb = 0;
- new_dtp->has_sticky_ub = 0;
-
- new_dtp->alignsize = el_sz; /* ??? */
- new_dtp->n_builtin_elements = count * blocklength;
- new_dtp->builtin_element_size = el_sz;
- new_dtp->basic_type = el_type;
-
- new_dtp->max_contig_blocks = count;
-
- eff_stride = (strideinbytes) ? stride : (stride * el_sz);
- }
- else /* user-defined base type (oldtype) */ {
- MPID_Datatype *old_dtp;
-
- MPID_Datatype_get_ptr(oldtype, old_dtp);
- el_sz = old_dtp->builtin_element_size;
- el_type = old_dtp->basic_type;
-
- old_lb = old_dtp->lb;
- old_true_lb = old_dtp->true_lb;
- old_ub = old_dtp->ub;
- old_true_ub = old_dtp->true_ub;
- old_sz = old_dtp->size;
- old_extent = old_dtp->extent;
- old_is_contig = old_dtp->is_contig;
-
- new_dtp->size = count * blocklength * old_dtp->size;
- new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
- new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
-
- new_dtp->alignsize = old_dtp->alignsize;
- new_dtp->n_builtin_elements = count * blocklength * old_dtp->n_builtin_elements;
- new_dtp->builtin_element_size = el_sz;
- new_dtp->basic_type = el_type;
-
- new_dtp->max_contig_blocks = old_dtp->max_contig_blocks * count * blocklength;
-
- eff_stride = (strideinbytes) ? stride : (stride * old_dtp->extent);
- }
-
- MPID_DATATYPE_VECTOR_LB_UB((MPI_Aint) count,
- eff_stride,
- (MPI_Aint) blocklength,
- old_lb,
- old_ub,
- old_extent,
- new_dtp->lb,
- new_dtp->ub);
- new_dtp->true_lb = new_dtp->lb + (old_true_lb - old_lb);
- new_dtp->true_ub = new_dtp->ub + (old_true_ub - old_ub);
- new_dtp->extent = new_dtp->ub - new_dtp->lb;
-
- /* new type is only contig for N types if old one was, and
- * size and extent of new type are equivalent, and stride is
- * equal to blocklength * size of old type.
- */
- if ((MPI_Aint)(new_dtp->size) == new_dtp->extent &&
- eff_stride == (MPI_Aint) blocklength * old_sz &&
- old_is_contig)
- {
- new_dtp->is_contig = 1;
- new_dtp->max_contig_blocks = 1;
- }
- else {
- new_dtp->is_contig = 0;
- }
-
- *newtype = new_dtp->handle;
-
- MPIU_DBG_MSG_P(DATATYPE,VERBOSE,"vector type %x created.",
- new_dtp->handle);
-
- return mpi_errno;
-}
diff --git a/src/mpid/common/datatype/mpid_type_zerolen.c b/src/mpid/common/datatype/mpid_type_zerolen.c
deleted file mode 100644
index 630eb46..0000000
--- a/src/mpid/common/datatype/mpid_type_zerolen.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpiimpl.h>
-#include <mpid_dataloop.h>
-#include <stdlib.h>
-
-/* #define MPID_TYPE_ALLOC_DEBUG */
-
-/*@
- MPID_Type_zerolen - create an empty datatype
-
-Input Parameters:
-. none
-
-Output Parameters:
-. newtype - handle of new contiguous datatype
-
- Return Value:
- MPI_SUCCESS on success, MPI error code on failure.
-@*/
-
-int MPID_Type_zerolen(MPI_Datatype *newtype)
-{
- int mpi_errno;
- MPID_Datatype *new_dtp;
-
- /* allocate new datatype object and handle */
- new_dtp = (MPID_Datatype *) MPIU_Handle_obj_alloc(&MPID_Datatype_mem);
- /* --BEGIN ERROR HANDLING-- */
- if (!new_dtp)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPID_Type_zerolen",
- __LINE__, MPI_ERR_OTHER,
- "**nomem", 0);
- return mpi_errno;
- }
- /* --END ERROR HANDLING-- */
-
- /* handle is filled in by MPIU_Handle_obj_alloc() */
- MPIU_Object_set_ref(new_dtp, 1);
- new_dtp->is_permanent = 0;
- new_dtp->is_committed = 0;
- new_dtp->attributes = NULL;
- new_dtp->cache_id = 0;
- new_dtp->name[0] = 0;
- new_dtp->contents = NULL;
-
- new_dtp->dataloop = NULL;
- new_dtp->dataloop_size = -1;
- new_dtp->dataloop_depth = -1;
- new_dtp->hetero_dloop = NULL;
- new_dtp->hetero_dloop_size = -1;
- new_dtp->hetero_dloop_depth = -1;
-
- new_dtp->size = 0;
- new_dtp->has_sticky_ub = 0;
- new_dtp->has_sticky_lb = 0;
- new_dtp->lb = 0;
- new_dtp->ub = 0;
- new_dtp->true_lb = 0;
- new_dtp->true_ub = 0;
- new_dtp->extent = 0;
-
- new_dtp->alignsize = 0;
- new_dtp->builtin_element_size = 0;
- new_dtp->basic_type = 0;
- new_dtp->n_builtin_elements = 0;
- new_dtp->is_contig = 1;
-
- *newtype = new_dtp->handle;
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/common/datatype/mpidu_contents_support.c b/src/mpid/common/datatype/mpidu_contents_support.c
new file mode 100644
index 0000000..aded1d3
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_contents_support.c
@@ -0,0 +1,68 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpi.h>
+#include <mpiimpl.h>
+#include <mpidu_datatype.h>
+
+void MPIDU_Type_access_contents(MPI_Datatype type,
+ int **ints_p,
+ MPI_Aint **aints_p,
+ MPI_Datatype **types_p)
+{
+ int nr_ints, nr_aints, nr_types, combiner;
+ int types_sz, struct_sz, ints_sz, epsilon, align_sz = 8;
+ MPIDU_Datatype *dtp;
+ MPIDU_Datatype_contents *cp;
+
+ MPIR_Type_get_envelope_impl(type, &nr_ints, &nr_aints, &nr_types, &combiner);
+
+ /* hardcoded handling of MPICH contents format... */
+ MPIDU_Datatype_get_ptr(type, dtp);
+ DLOOP_Assert(dtp != NULL);
+
+ cp = dtp->contents;
+ DLOOP_Assert(cp != NULL);
+
+#ifdef HAVE_MAX_STRUCT_ALIGNMENT
+ if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
+ align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
+ }
+#endif
+
+ struct_sz = sizeof(MPIDU_Datatype_contents);
+ types_sz = nr_types * sizeof(MPI_Datatype);
+ ints_sz = nr_ints * sizeof(int);
+
+ if ((epsilon = struct_sz % align_sz)) {
+ struct_sz += align_sz - epsilon;
+ }
+ if ((epsilon = types_sz % align_sz)) {
+ types_sz += align_sz - epsilon;
+ }
+ if ((epsilon = ints_sz % align_sz)) {
+ ints_sz += align_sz - epsilon;
+ }
+ *types_p = (MPI_Datatype *) (((char *) cp) + struct_sz);
+ *ints_p = (int *) (((char *) (*types_p)) + types_sz);
+ *aints_p = (MPI_Aint *) (((char *) (*ints_p)) + ints_sz);
+ /* end of hardcoded handling of MPICH contents format */
+
+ return;
+}
+
+/* FIXME: Is this routine complete? Why is it needed? If it is needed, it
+ must have a comment that describes why it is needed and the arguments
+ must have ATTRIBUTE((unused)) */
+void MPIDU_Type_release_contents(MPI_Datatype type,
+ int **ints_p,
+ MPI_Aint **aints_p,
+ MPI_Datatype **types_p)
+{
+ return;
+}
+
diff --git a/src/mpid/common/datatype/mpidu_dataloop.h b/src/mpid/common/datatype/mpidu_dataloop.h
new file mode 100644
index 0000000..b9dddd1
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_dataloop.h
@@ -0,0 +1,114 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIDU_DATALOOP_H
+#define MPIDU_DATALOOP_H
+
+#include <mpi.h>
+#include <mpl.h>
+
+/* Note: this is where you define the prefix that will be prepended on
+ * all externally visible generic dataloop and segment functions.
+ */
+#define PREPEND_PREFIX(fn) MPIDU_ ## fn
+
+/* These following dataloop-specific types will be used throughout the DLOOP
+ * instance:
+ */
+#define DLOOP_Offset MPI_Aint
+#define DLOOP_Count MPI_Aint
+#define DLOOP_Handle MPI_Datatype
+#define DLOOP_Type MPI_Datatype
+#define DLOOP_Buffer void *
+#define DLOOP_VECTOR MPL_IOV
+#define DLOOP_VECTOR_LEN MPL_IOV_LEN
+#define DLOOP_VECTOR_BUF MPL_IOV_BUF
+#define DLOOP_Size MPI_Aint
+
+/* The following accessor functions must also be defined:
+ *
+ * DLOOP_Handle_extent()
+ * DLOOP_Handle_size()
+ * DLOOP_Handle_loopptr()
+ * DLOOP_Handle_loopdepth()
+ * DLOOP_Handle_hasloop()
+ *
+ */
+
+/* USE THE NOTATION THAT BILL USED IN MPIIMPL.H AND MAKE THESE MACROS */
+
+/* NOTE: put get size into mpiimpl.h; the others go here until such time
+ * as we see that we need them elsewhere.
+ */
+#define DLOOP_Handle_get_loopdepth_macro(handle_,depth_,flag_) \
+ MPIDU_Datatype_get_loopdepth_macro(handle_,depth_,flag_)
+
+#define DLOOP_Handle_get_loopsize_macro(handle_,size_,flag_) \
+ MPIDU_Datatype_get_loopsize_macro(handle_,size_,flag_)
+
+#define DLOOP_Handle_set_loopptr_macro(handle_,lptr_,flag_) \
+ MPIDU_Datatype_set_loopptr_macro(handle_,lptr_,flag_)
+
+#define DLOOP_Handle_set_loopdepth_macro(handle_,depth_,flag_) \
+ MPIDU_Datatype_set_loopdepth_macro(handle_,depth_,flag_)
+
+#define DLOOP_Handle_set_loopsize_macro(handle_,size_,flag_) \
+ MPIDU_Datatype_set_loopsize_macro(handle_,size_,flag_)
+
+#define DLOOP_Handle_get_loopptr_macro(handle_,lptr_,flag_) \
+ MPIDU_Datatype_get_loopptr_macro(handle_,lptr_,flag_)
+
+#define DLOOP_Handle_get_size_macro(handle_,size_) \
+ MPIDU_Datatype_get_size_macro(handle_,size_)
+
+#define DLOOP_Handle_get_basic_type_macro(handle_,basic_type_) \
+ MPIDU_Datatype_get_basic_type(handle_, basic_type_)
+
+#define DLOOP_Handle_get_extent_macro(handle_,extent_) \
+ MPIDU_Datatype_get_extent_macro(handle_,extent_)
+
+#define DLOOP_Handle_hasloop_macro(handle_) \
+ ((HANDLE_GET_KIND(handle_) == HANDLE_KIND_BUILTIN) ? 0 : 1)
+
+#define DLOOP_Ensure_Offset_fits_in_pointer(value_) \
+ MPIR_Ensure_Aint_fits_in_pointer(value_)
+
+/* allocate and free functions must also be defined. */
+#define DLOOP_Malloc MPL_malloc
+#define DLOOP_Free MPL_free
+
+/* assert function */
+#define DLOOP_Assert MPIR_Assert
+
+/* memory copy function */
+#define DLOOP_Memcpy MPIR_Memcpy
+
+/* casting macros */
+#define DLOOP_OFFSET_CAST_TO_VOID_PTR MPIR_AINT_CAST_TO_VOID_PTR
+#define DLOOP_VOID_PTR_CAST_TO_OFFSET MPIR_VOID_PTR_CAST_TO_MPI_AINT
+#define DLOOP_PTR_DISP_CAST_TO_OFFSET MPIR_PTR_DISP_CAST_TO_MPI_AINT
+
+/* printing macros */
+#define DLOOP_OFFSET_FMT_DEC_SPEC MPI_AINT_FMT_DEC_SPEC
+#define DLOOP_OFFSET_FMT_HEX_SPEC MPI_AINT_FMT_HEX_SPEC
+
+/* Include dataloop_parts.h at the end to get the rest of the prototypes
+ * and defines, in terms of the prefixes and types above.
+ */
+#include "dataloop/dataloop_parts.h"
+#include "dataloop/dataloop_create.h"
+
+/* These values are defined by DLOOP code.
+ *
+ * Note: DLOOP_DATALOOP_ALL_BYTES is used only when the device
+ * defines MPID_NEEDS_DLOOP_ALL_BYTES.
+ */
+#define MPIDU_DATALOOP_HETEROGENEOUS DLOOP_DATALOOP_HETEROGENEOUS
+#define MPIDU_DATALOOP_HOMOGENEOUS DLOOP_DATALOOP_HOMOGENEOUS
+#define MPIDU_DATALOOP_ALL_BYTES DLOOP_DATALOOP_ALL_BYTES
+
+#endif
diff --git a/src/mpid/common/datatype/mpidu_datatype.h b/src/mpid/common/datatype/mpidu_datatype.h
new file mode 100644
index 0000000..350515f
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_datatype.h
@@ -0,0 +1,756 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPIDU_DATATYPE_H
+#define MPIDU_DATATYPE_H
+
+#include "mpidu_dataloop.h"
+#include "mpir_objects.h"
+
+/* NOTE:
+ * - struct MPIDU_Dataloop and MPIDU_Segment are defined in
+ * src/mpid/common/datatype/mpidu_dataloop.h (and gen_dataloop.h).
+ * - MPIR_Object_alloc_t is defined in src/include/mpihandle.h
+ */
+
+#define MPIDU_Datatype_get_ptr(a,ptr) MPIR_Getb_ptr(Datatype,a,0x000000ff,ptr)
+/* MPIDU_Datatype_get_basic_id() is useful for creating and indexing into arrays
+ that store data on a per-basic type basis */
+#define MPIDU_Datatype_get_basic_id(a) ((a)&0x000000ff)
+#define MPIDU_Datatype_get_basic_size(a) (((a)&0x0000ff00)>>8)
+
+#define MPIDU_Datatype_add_ref(datatype_ptr) MPIR_Object_add_ref((datatype_ptr))
+
+#define MPIDU_Datatype_get_basic_type(a,basic_type_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ basic_type_ = ((MPIDU_Datatype *) ptr)->basic_type; \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ basic_type_ = ((MPIDU_Datatype *) ptr)->basic_type; \
+ break; \
+ case HANDLE_KIND_BUILTIN: \
+ basic_type_ = a; \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ default: \
+ basic_type_ = 0; \
+ break; \
+ \
+ } \
+ /* This macro returns the builtin type, if 'basic_type' is not \
+ * a builtin type, it must be a pair type composed of different \
+ * builtin types, so we return MPI_DATATYPE_NULL here. \
+ */ \
+ if (HANDLE_GET_KIND(basic_type_) != HANDLE_KIND_BUILTIN) \
+ basic_type_ = MPI_DATATYPE_NULL; \
+ } while(0)
+
+/* MPIDU_Datatype_release decrements the reference count on the MPIR_Datatype
+ * and, if the refct is then zero, frees the MPIDU_Datatype and associated
+ * structures.
+ */
+#define MPIDU_Datatype_release(datatype_ptr) do { \
+ int inuse_; \
+ \
+ MPIR_Object_release_ref((datatype_ptr),&inuse_); \
+ if (!inuse_) { \
+ int lmpi_errno = MPI_SUCCESS; \
+ if (MPIR_Process.attr_free && datatype_ptr->attributes) { \
+ lmpi_errno = MPIR_Process.attr_free( datatype_ptr->handle, \
+ &datatype_ptr->attributes ); \
+ } \
+ /* LEAVE THIS COMMENTED OUT UNTIL WE HAVE SOME USE FOR THE FREE_FN \
+ if (datatype_ptr->free_fn) { \
+ mpi_errno = (datatype_ptr->free_fn)( datatype_ptr ); \
+ if (mpi_errno) { \
+ MPIR_FUNC_TERSE_EXIT(MPID_STATE_MPI_TYPE_FREE); \
+ return MPIR_Err_return_comm( 0, FCNAME, mpi_errno ); \
+ } \
+ } */ \
+ if (lmpi_errno == MPI_SUCCESS) { \
+ MPIDU_Datatype_free(datatype_ptr); \
+ } \
+ } \
+} while(0)
+
+/* Note: Probably there is some clever way to build all of these from a macro.
+ */
+#define MPIDU_Datatype_get_size_macro(a,size_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ size_ = ((MPIDU_Datatype *) ptr)->size; \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ size_ = ((MPIDU_Datatype *) ptr)->size; \
+ break; \
+ case HANDLE_KIND_BUILTIN: \
+ size_ = MPIDU_Datatype_get_basic_size(a); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ default: \
+ size_ = 0; \
+ break; \
+ \
+ } \
+} while(0)
+
+/*
+ * The following macro allows us to reference either the regular or
+ * hetero value for the 3 fields (NULL,_size,_depth) in the
+ * MPIDU_Datatype structure. This is used in the many
+ * macros that access fields of the datatype. We need this macro
+ * to simplify the definition of the other macros in the case where
+ * MPID_HAS_HETERO is *not* defined.
+ */
+#if defined(MPID_HAS_HETERO) || 1
+#define MPIDU_GET_FIELD(hetero_,value_,fieldname_) do { \
+ if (hetero_ != MPIDU_DATALOOP_HETEROGENEOUS) \
+ value_ = ((MPIDU_Datatype *)ptr)->dataloop##fieldname_; \
+ else value_ = ((MPIDU_Datatype *) ptr)->hetero_dloop##fieldname_; \
+ } while(0)
+#else
+#define MPIDU_GET_FIELD(hetero_,value_,fieldname_) \
+ value_ = ((MPIDU_Datatype *)ptr)->dataloop##fieldname_
+#endif
+
+#if defined(MPID_HAS_HETERO) || 1
+#define MPIDU_SET_FIELD(hetero_,value_,fieldname_) do { \
+ if (hetero_ != MPIDU_DATALOOP_HETEROGENEOUS) \
+ ((MPIDU_Datatype *)ptr)->dataloop##fieldname_ = value_; \
+ else ((MPIDU_Datatype *) ptr)->hetero_dloop##fieldname_ = value_; \
+ } while(0)
+#else
+#define MPIDU_SET_FIELD(hetero_,value_,fieldname_) \
+ ((MPIDU_Datatype *)ptr)->dataloop##fieldname_ = value_
+#endif
+
+#define MPIDU_Datatype_get_loopdepth_macro(a,depth_,hetero_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ MPIDU_GET_FIELD(hetero_,depth_,_depth); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ MPIDU_GET_FIELD(hetero_,depth_,_depth); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ depth_ = 0; \
+ break; \
+ } \
+} while(0)
+
+#define MPIDU_Datatype_get_loopsize_macro(a,depth_,hetero_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ MPIDU_GET_FIELD(hetero_,depth_,_size); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ MPIDU_GET_FIELD(hetero_,depth_,_size); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ depth_ = 0; \
+ break; \
+ } \
+} while(0)
+
+#define MPIDU_Datatype_get_loopptr_macro(a,lptr_,hetero_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ MPIDU_GET_FIELD(hetero_,lptr_,); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ MPIDU_GET_FIELD(hetero_,lptr_,); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ lptr_ = 0; \
+ break; \
+ } \
+} while(0)
+#define MPIDU_Datatype_set_loopdepth_macro(a,depth_,hetero_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ MPIDU_SET_FIELD(hetero_,depth_,_depth); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ MPIDU_SET_FIELD(hetero_,depth_,_depth); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ depth_ = 0; \
+ break; \
+ } \
+} while(0)
+
+#define MPIDU_Datatype_set_loopsize_macro(a,depth_,hetero_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ MPIDU_SET_FIELD(hetero_,depth_,_size); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ MPIDU_SET_FIELD(hetero_,depth_,_size); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ depth_ = 0; \
+ break; \
+ } \
+} while(0)
+
+#define MPIDU_Datatype_set_loopptr_macro(a,lptr_,hetero_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ MPIDU_SET_FIELD(hetero_,lptr_,); \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ MPIDU_SET_FIELD(hetero_,lptr_,); \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ lptr_ = 0; \
+ break; \
+ } \
+} while(0)
+
+#define MPIDU_Datatype_get_extent_macro(a,extent_) do { \
+ void *ptr; \
+ switch (HANDLE_GET_KIND(a)) { \
+ case HANDLE_KIND_DIRECT: \
+ ptr = MPIDU_Datatype_direct+HANDLE_INDEX(a); \
+ extent_ = ((MPIDU_Datatype *) ptr)->extent; \
+ break; \
+ case HANDLE_KIND_INDIRECT: \
+ ptr = ((MPIDU_Datatype *) \
+ MPIR_Handle_get_ptr_indirect(a,&MPIDU_Datatype_mem)); \
+ extent_ = ((MPIDU_Datatype *) ptr)->extent; \
+ break; \
+ case HANDLE_KIND_INVALID: \
+ case HANDLE_KIND_BUILTIN: \
+ default: \
+ extent_ = MPIDU_Datatype_get_basic_size(a); /* same as size */ \
+ break; \
+ } \
+} while(0)
+
+#define MPIDU_Datatype_valid_ptr(ptr,err) MPIR_Valid_ptr_class(Datatype,ptr,MPI_ERR_TYPE,err)
+
+/* to be used only after MPIDU_Datatype_valid_ptr(); the check on
+ * err == MPI_SUCCESS ensures that we won't try to dereference the
+ * pointer if something has already been detected as wrong.
+ */
+#define MPIDU_Datatype_committed_ptr(ptr,err) do { \
+ if ((err == MPI_SUCCESS) && !((ptr)->is_committed)) \
+ err = MPIR_Err_create_code(MPI_SUCCESS, \
+ MPIR_ERR_RECOVERABLE, \
+ FCNAME, \
+ __LINE__, \
+ MPI_ERR_TYPE, \
+ "**dtypecommit", \
+ 0); \
+} while(0)
+
+/*S
+ MPIDU_Datatype_contents - Holds envelope and contents data for a given
+ datatype
+
+ Notes:
+ Space is allocated beyond the structure itself in order to hold the
+ arrays of types, ints, and aints, in that order.
+
+ S*/
+typedef struct MPIDU_Datatype_contents {
+ int combiner;
+ int nr_ints;
+ int nr_aints;
+ int nr_types;
+ /* space allocated beyond structure used to store the types[],
+ * ints[], and aints[], in that order.
+ */
+} MPIDU_Datatype_contents;
+
+/* Datatype Structure */
+/*S
+ MPIDU_Datatype - Description of the MPID Datatype structure
+
+ Notes:
+ The 'ref_count' is needed for nonblocking operations such as
+.vb
+ MPI_Type_struct( ... , &newtype );
+ MPI_Irecv( buf, 1000, newtype, ..., &request );
+ MPI_Type_free( &newtype );
+ ...
+ MPI_Wait( &request, &status );
+.ve
+
+ Module:
+ Datatype-DS
+
+ Notes:
+
+ Alternatives:
+ The following alternatives for the layout of this structure were considered.
+ Most were not chosen because any benefit in performance or memory
+ efficiency was outweighed by the added complexity of the implementation.
+
+ A number of fields contain only boolean inforation ('is_contig',
+ 'has_sticky_ub', 'has_sticky_lb', 'is_permanent', 'is_committed'). These
+ could be combined and stored in a single bit vector.
+
+ 'MPI_Type_dup' could be implemented with a shallow copy, where most of the
+ data fields, would not be copied into the new object created by
+ 'MPI_Type_dup'; instead, the new object could point to the data fields in
+ the old object. However, this requires more code to make sure that fields
+ are found in the correct objects and that deleting the old object doesn't
+ invalidate the dup'ed datatype.
+
+ Originally we attempted to keep contents/envelope data in a non-optimized
+ dataloop. The subarray and darray types were particularly problematic,
+ and eventually we decided it would be simpler to just keep contents/
+ envelope data in arrays separately.
+
+ Earlier versions of the ADI used a single API to change the 'ref_count',
+ with each MPI object type having a separate routine. Since reference
+ count changes are always up or down one, and since all MPI objects
+ are defined to have the 'ref_count' field in the same place, the current
+ ADI3 API uses two routines, 'MPIR_Object_add_ref' and
+ 'MPIR_Object_release_ref', to increment and decrement the reference count.
+
+ S*/
+typedef struct MPIDU_Datatype {
+ /* handle and ref_count are filled in by MPIR_Handle_obj_alloc() */
+ MPIR_OBJECT_HEADER; /* adds handle and ref_count fields */
+
+ /* basic parameters for datatype, accessible via MPI calls */
+ MPI_Aint size; /* MPI_Count could be 128 bits, so use MPI_Aint */
+ MPI_Aint extent, ub, lb, true_ub, true_lb;
+
+ /* chars affecting subsequent datatype processing and creation */
+ MPI_Aint alignsize;
+ int has_sticky_ub, has_sticky_lb;
+ int is_permanent; /* non-zero if datatype is a predefined type */
+ int is_committed;
+
+ /* element information; used for accumulate and get elements
+ * basic_type: describes basic type (predefined type). If the
+ * type is composed of the same basic type, it is
+ * set to that type, otherwise it is set to MPI_DATATYPE_NULL.
+ * n_builtin_elements: refers to the number of builtin type elements.
+ * builtin_element_size: refers to the size of builtin type. If the
+ * type is composed of the same builtin type,
+ * it is set to size of that type, otherwise it
+ * is set to -1.
+ */
+ int basic_type;
+ MPI_Aint n_builtin_elements;
+ MPI_Aint builtin_element_size;
+
+ /* information on contiguity of type, for processing shortcuts.
+ *
+ * is_contig is non-zero only if N instances of the type would be
+ * contiguous.
+ */
+ int is_contig;
+ /* Upper bound on the number of contig blocks for one instance.
+ * It is not trivial to calculate the *real* number of contig
+ * blocks in the case where old datatype is non-contiguous
+ */
+ MPI_Aint max_contig_blocks;
+
+ /* pointer to contents and envelope data for the datatype */
+ MPIDU_Datatype_contents *contents;
+
+ /* dataloop members, including a pointer to the loop, the size in bytes,
+ * and a depth used to verify that we can process it (limited stack depth
+ */
+ struct MPIDU_Dataloop *dataloop; /* might be optimized for homogenous */
+ MPI_Aint dataloop_size;
+ int dataloop_depth;
+#if defined(MPID_HAS_HETERO) || 1
+ struct MPIDU_Dataloop *hetero_dloop; /* heterogeneous dataloop */
+ MPI_Aint hetero_dloop_size;
+ int hetero_dloop_depth;
+#endif /* MPID_HAS_HETERO */
+ /* MPI-2 attributes and name */
+ struct MPIR_Attribute *attributes;
+ char name[MPI_MAX_OBJECT_NAME];
+
+ /* not yet used; will be used to track what processes have cached
+ * copies of this type.
+ */
+ int32_t cache_id;
+ /* MPID_Lpidmask mask; */
+
+ /* int (*free_fn)( struct MPIDU_Datatype * ); */ /* Function to free this datatype */
+
+ /* Other, device-specific information */
+#ifdef MPID_DEV_DATATYPE_DECL
+ MPID_DEV_DATATYPE_DECL
+#endif
+} MPIDU_Datatype;
+
+extern MPIR_Object_alloc_t MPIDU_Datatype_mem;
+
+/* Preallocated datatype objects */
+/* This value should be set to greatest value used as the type index suffix in
+ * the predefined handles. That is, look at the last two hex digits of all
+ * predefined datatype handles, take the greatest one, and convert it to decimal
+ * here. */
+/* FIXME calculating this value this way is foolish, we should make this more
+ * automatic and less error prone */
+/* FIXME: Given that this is relatively static, an adequate alternative is
+ to provide a check that this value is valid. */
+#define MPIDU_DATATYPE_N_BUILTIN 69
+extern MPIDU_Datatype MPIDU_Datatype_builtin[MPIDU_DATATYPE_N_BUILTIN + 1];
+extern MPIDU_Datatype MPIDU_Datatype_direct[];
+
+#define MPIDU_DTYPE_BEGINNING 0
+#define MPIDU_DTYPE_END -1
+
+/* LB/UB calculation helper macros */
+
+/* MPIDU_DATATYPE_CONTIG_LB_UB()
+ *
+ * Determines the new LB and UB for a block of old types given the
+ * old type's LB, UB, and extent, and a count of these types in the
+ * block.
+ *
+ * Note: if the displacement is non-zero, the MPIDU_DATATYPE_BLOCK_LB_UB()
+ * should be used instead (see below).
+ */
+#define MPIDU_DATATYPE_CONTIG_LB_UB(cnt_, \
+ old_lb_, \
+ old_ub_, \
+ old_extent_, \
+ lb_, \
+ ub_) \
+do { \
+ if (cnt_ == 0) { \
+ lb_ = old_lb_; \
+ ub_ = old_ub_; \
+ } \
+ else if (old_ub_ >= old_lb_) { \
+ lb_ = old_lb_; \
+ ub_ = old_ub_ + (old_extent_) * (cnt_ - 1); \
+ } \
+ else /* negative extent */ { \
+ lb_ = old_lb_ + (old_extent_) * (cnt_ - 1); \
+ ub_ = old_ub_; \
+ } \
+} while(0)
+
+/* MPIDU_DATATYPE_VECTOR_LB_UB()
+ *
+ * Determines the new LB and UB for a vector of blocks of old types
+ * given the old type's LB, UB, and extent, and a count, stride, and
+ * blocklen describing the vectorization.
+ */
+#define MPIDU_DATATYPE_VECTOR_LB_UB(cnt_, \
+ stride_, \
+ blklen_, \
+ old_lb_, \
+ old_ub_, \
+ old_extent_, \
+ lb_, \
+ ub_) \
+do { \
+ if (cnt_ == 0 || blklen_ == 0) { \
+ lb_ = old_lb_; \
+ ub_ = old_ub_; \
+ } \
+ else if (stride_ >= 0 && (old_extent_) >= 0) { \
+ lb_ = old_lb_; \
+ ub_ = old_ub_ + (old_extent_) * ((blklen_) - 1) + \
+ (stride_) * ((cnt_) - 1); \
+ } \
+ else if (stride_ < 0 && (old_extent_) >= 0) { \
+ lb_ = old_lb_ + (stride_) * ((cnt_) - 1); \
+ ub_ = old_ub_ + (old_extent_) * ((blklen_) - 1); \
+ } \
+ else if (stride_ >= 0 && (old_extent_) < 0) { \
+ lb_ = old_lb_ + (old_extent_) * ((blklen_) - 1); \
+ ub_ = old_ub_ + (stride_) * ((cnt_) - 1); \
+ } \
+ else { \
+ lb_ = old_lb_ + (old_extent_) * ((blklen_) - 1) + \
+ (stride_) * ((cnt_) - 1); \
+ ub_ = old_ub_; \
+ } \
+} while(0)
+
+/* MPIDU_DATATYPE_BLOCK_LB_UB()
+ *
+ * Determines the new LB and UB for a block of old types given the LB,
+ * UB, and extent of the old type as well as a new displacement and count
+ * of types.
+ *
+ * Note: we need the extent here in addition to the lb and ub because the
+ * extent might have some padding in it that we need to take into account.
+ */
+#define MPIDU_DATATYPE_BLOCK_LB_UB(cnt_, \
+ disp_, \
+ old_lb_, \
+ old_ub_, \
+ old_extent_, \
+ lb_, \
+ ub_) \
+do { \
+ if (cnt_ == 0) { \
+ lb_ = old_lb_ + (disp_); \
+ ub_ = old_ub_ + (disp_); \
+ } \
+ else if (old_ub_ >= old_lb_) { \
+ lb_ = old_lb_ + (disp_); \
+ ub_ = old_ub_ + (disp_) + (old_extent_) * ((cnt_) - 1); \
+ } \
+ else /* negative extent */ { \
+ lb_ = old_lb_ + (disp_) + (old_extent_) * ((cnt_) - 1); \
+ ub_ = old_ub_ + (disp_); \
+ } \
+} while(0)
+
+/* helper macro: takes an MPI_Datatype handle value and returns TRUE in
+ * (*is_config_) if the type is contiguous */
+#define MPIDU_Datatype_is_contig(dtype_, is_contig_) \
+ do { \
+ if (HANDLE_GET_KIND(dtype_) == HANDLE_KIND_BUILTIN) { \
+ *(is_contig_) = TRUE; \
+ } \
+ else { \
+ MPIDU_Datatype *dtp_ = NULL; \
+ MPIDU_Datatype_get_ptr((dtype_), dtp_); \
+ *(is_contig_) = dtp_->is_contig; \
+ } \
+ } while (0)
+
+/* helper macro: takes an MPI_Datatype handle value and returns true_lb in
+ * (*true_lb_) */
+#define MPIDU_Datatype_get_true_lb(dtype_, true_lb_) \
+ do { \
+ if (HANDLE_GET_KIND(dtype_) == HANDLE_KIND_BUILTIN) { \
+ *(true_lb_) = 0; \
+ } \
+ else { \
+ MPIDU_Datatype *dtp_ = NULL; \
+ MPIDU_Datatype_get_ptr((dtype_), dtp_); \
+ *(true_lb_) = dtp_->true_lb; \
+ } \
+ } while (0)
+
+/* Datatype functions */
+int MPIDU_Type_commit(MPI_Datatype *type);
+
+int MPIDU_Type_dup(MPI_Datatype oldtype,
+ MPI_Datatype *newtype);
+
+int MPIDU_Type_struct(int count,
+ const int *blocklength_array,
+ const MPI_Aint *displacement_array,
+ const MPI_Datatype *oldtype_array,
+ MPI_Datatype *newtype);
+
+int MPIDU_Type_indexed(int count,
+ const int *blocklength_array,
+ const void *displacement_array,
+ int dispinbytes,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype);
+
+int MPIDU_Type_blockindexed(int count,
+ int blocklength,
+ const void *displacement_array,
+ int dispinbytes,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype);
+
+int MPIDU_Type_vector(int count,
+ int blocklength,
+ MPI_Aint stride,
+ int strideinbytes,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype);
+
+int MPIDU_Type_contiguous(int count,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype);
+
+int MPIDU_Type_zerolen(MPI_Datatype *newtype);
+
+int MPIDU_Type_create_resized(MPI_Datatype oldtype,
+ MPI_Aint lb,
+ MPI_Aint extent,
+ MPI_Datatype *newtype);
+
+int MPIDU_Type_get_envelope(MPI_Datatype datatype,
+ int *num_integers,
+ int *num_addresses,
+ int *num_datatypes,
+ int *combiner);
+
+int MPIDU_Type_get_contents(MPI_Datatype datatype,
+ int max_integers,
+ int max_addresses,
+ int max_datatypes,
+ int array_of_integers[],
+ MPI_Aint array_of_addresses[],
+ MPI_Datatype array_of_datatypes[]);
+
+int MPIDU_Type_create_pairtype(MPI_Datatype datatype,
+ MPIDU_Datatype *new_dtp);
+
+/* internal debugging functions */
+void MPIDI_Datatype_printf(MPI_Datatype type,
+ int depth,
+ MPI_Aint displacement,
+ int blocklength,
+ int header);
+
+/* Dataloop functions */
+void MPIDU_Dataloop_copy(void *dest,
+ void *src,
+ MPI_Aint size);
+
+void MPIDU_Dataloop_print(struct MPIDU_Dataloop *dataloop,
+ int depth);
+
+void MPIDU_Dataloop_alloc(int kind,
+ MPI_Aint count,
+ DLOOP_Dataloop **new_loop_p,
+ MPI_Aint *new_loop_sz_p);
+
+void MPIDU_Dataloop_alloc_and_copy(int kind,
+ MPI_Aint count,
+ struct DLOOP_Dataloop *old_loop,
+ MPI_Aint old_loop_sz,
+ struct DLOOP_Dataloop **new_loop_p,
+ MPI_Aint *new_loop_sz_p);
+void MPIDU_Dataloop_struct_alloc(MPI_Aint count,
+ MPI_Aint old_loop_sz,
+ int basic_ct,
+ DLOOP_Dataloop **old_loop_p,
+ DLOOP_Dataloop **new_loop_p,
+ MPI_Aint *new_loop_sz_p);
+void MPIDU_Dataloop_dup(DLOOP_Dataloop *old_loop,
+ MPI_Aint old_loop_sz,
+ DLOOP_Dataloop **new_loop_p);
+void MPIDU_Dataloop_free(struct MPIDU_Dataloop **dataloop);
+
+/* Segment functions specific to MPICH */
+void MPIDU_Segment_pack_vector(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_VECTOR *vector,
+ int *lengthp);
+
+void MPIDU_Segment_unpack_vector(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_VECTOR *vector,
+ int *lengthp);
+
+void MPIDU_Segment_flatten(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_Offset *offp,
+ DLOOP_Size *sizep,
+ DLOOP_Offset *lengthp);
+
+/* misc */
+int MPIDU_Datatype_set_contents(struct MPIDU_Datatype *ptr,
+ int combiner,
+ int nr_ints,
+ int nr_aints,
+ int nr_types,
+ int *ints,
+ const MPI_Aint *aints,
+ const MPI_Datatype *types);
+
+void MPIDU_Datatype_free_contents(struct MPIDU_Datatype *ptr);
+void MPIDI_Datatype_get_contents_aints(MPIDU_Datatype_contents *cp,
+ MPI_Aint *user_aints);
+void MPIDI_Datatype_get_contents_types(MPIDU_Datatype_contents *cp,
+ MPI_Datatype *user_types);
+void MPIDI_Datatype_get_contents_ints(MPIDU_Datatype_contents *cp,
+ int *user_ints);
+
+void MPIDU_Datatype_free(struct MPIDU_Datatype *ptr);
+
+void MPIDU_Dataloop_update(struct DLOOP_Dataloop *dataloop,
+ MPI_Aint ptrdiff);
+
+int MPIR_Type_flatten(MPI_Datatype type,
+ MPI_Aint *off_array,
+ DLOOP_Size *size_array,
+ MPI_Aint *array_len_p);
+
+void MPIDU_Segment_pack_external32(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ void *pack_buffer);
+
+void MPIDU_Segment_unpack_external32(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_Buffer unpack_buffer);
+
+MPI_Aint MPIDU_Datatype_size_external32(MPI_Datatype type);
+MPI_Aint MPIDI_Datatype_get_basic_size_external32(MPI_Datatype el_type);
+
+/* debugging helper functions */
+char *MPIDU_Datatype_builtin_to_string(MPI_Datatype type);
+char *MPIDU_Datatype_combiner_to_string(int combiner);
+void MPIDU_Datatype_debug(MPI_Datatype type, int array_ct);
+
+/* contents accessor functions */
+void MPIDU_Type_access_contents(MPI_Datatype type,
+ int **ints_p,
+ MPI_Aint **aints_p,
+ MPI_Datatype **types_p);
+void MPIDU_Type_release_contents(MPI_Datatype type,
+ int **ints_p,
+ MPI_Aint **aints_p,
+ MPI_Datatype **types_p);
+
+/* end of file */
+#endif
diff --git a/src/mpid/common/datatype/mpidu_datatype_contents.c b/src/mpid/common/datatype/mpidu_datatype_contents.c
new file mode 100644
index 0000000..636e1be
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_datatype_contents.c
@@ -0,0 +1,237 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+#include <limits.h>
+
+/*@
+ MPIDU_Datatype_set_contents - store contents information for use in
+ MPI_Type_get_contents.
+
+ Returns MPI_SUCCESS on success, MPI error code on error.
+@*/
+int MPIDU_Datatype_set_contents(MPIDU_Datatype *new_dtp,
+ int combiner,
+ int nr_ints,
+ int nr_aints,
+ int nr_types,
+ int array_of_ints[],
+ const MPI_Aint array_of_aints[],
+ const MPI_Datatype array_of_types[])
+{
+ int i, contents_size, align_sz = 8, epsilon, mpi_errno;
+ int struct_sz, ints_sz, aints_sz, types_sz;
+ MPIDU_Datatype_contents *cp;
+ MPIDU_Datatype *old_dtp;
+ char *ptr;
+
+#ifdef HAVE_MAX_STRUCT_ALIGNMENT
+ if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
+ align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
+ }
+#endif
+
+ struct_sz = sizeof(MPIDU_Datatype_contents);
+ types_sz = nr_types * sizeof(MPI_Datatype);
+ ints_sz = nr_ints * sizeof(int);
+ aints_sz = nr_aints * sizeof(MPI_Aint);
+
+ /* pad the struct, types, and ints before we allocate.
+ *
+ * note: it's not necessary that we pad the aints,
+ * because they are last in the region.
+ */
+ if ((epsilon = struct_sz % align_sz)) {
+ struct_sz += align_sz - epsilon;
+ }
+ if ((epsilon = types_sz % align_sz)) {
+ types_sz += align_sz - epsilon;
+ }
+ if ((epsilon = ints_sz % align_sz)) {
+ ints_sz += align_sz - epsilon;
+ }
+
+ contents_size = struct_sz + types_sz + ints_sz + aints_sz;
+
+ cp = (MPIDU_Datatype_contents *) MPL_malloc(contents_size);
+ /* --BEGIN ERROR HANDLING-- */
+ if (cp == NULL) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ "MPIDU_Datatype_set_contents",
+ __LINE__,
+ MPI_ERR_OTHER,
+ "**nomem",
+ 0);
+ return mpi_errno;
+ }
+ /* --END ERROR HANDLING-- */
+
+ cp->combiner = combiner;
+ cp->nr_ints = nr_ints;
+ cp->nr_aints = nr_aints;
+ cp->nr_types = nr_types;
+
+ /* arrays are stored in the following order: types, ints, aints,
+ * following the structure itself.
+ */
+ ptr = ((char *) cp) + struct_sz;
+ /* Fortran90 combiner types do not have a "base" type */
+ if (nr_types > 0) {
+ MPIR_Memcpy(ptr, array_of_types, nr_types * sizeof(MPI_Datatype));
+ }
+
+ ptr = ((char *) cp) + struct_sz + types_sz;
+ if (nr_ints > 0) {
+ MPIR_Memcpy(ptr, array_of_ints, nr_ints * sizeof(int));
+ }
+
+ ptr = ((char *) cp) + struct_sz + types_sz + ints_sz;
+ if (nr_aints > 0) {
+ MPIR_Memcpy(ptr, array_of_aints, nr_aints * sizeof(MPI_Aint));
+ }
+ new_dtp->contents = cp;
+
+ /* increment reference counts on all the derived types used here */
+ for (i=0; i < nr_types; i++) {
+ if (HANDLE_GET_KIND(array_of_types[i]) != HANDLE_KIND_BUILTIN) {
+ MPIDU_Datatype_get_ptr(array_of_types[i], old_dtp);
+ MPIDU_Datatype_add_ref(old_dtp);
+ }
+ }
+
+ return MPI_SUCCESS;
+}
+
+void MPIDU_Datatype_free_contents(MPIDU_Datatype *dtp)
+{
+ int i, struct_sz = sizeof(MPIDU_Datatype_contents);
+ int align_sz = 8, epsilon;
+ MPIDU_Datatype *old_dtp;
+ MPI_Datatype *array_of_types;
+
+ if ((epsilon = struct_sz % align_sz)) {
+ struct_sz += align_sz - epsilon;
+ }
+
+ /* note: relies on types being first after structure */
+ array_of_types = (MPI_Datatype *) ((char *)dtp->contents + struct_sz);
+
+ for (i=0; i < dtp->contents->nr_types; i++) {
+ if (HANDLE_GET_KIND(array_of_types[i]) != HANDLE_KIND_BUILTIN) {
+ MPIDU_Datatype_get_ptr(array_of_types[i], old_dtp);
+ MPIDU_Datatype_release(old_dtp);
+ }
+ }
+
+ MPL_free(dtp->contents);
+ dtp->contents = NULL;
+}
+
+void MPIDI_Datatype_get_contents_ints(MPIDU_Datatype_contents *cp,
+ int *user_ints)
+{
+ char *ptr;
+ int align_sz = 8, epsilon;
+ int struct_sz, types_sz;
+
+#ifdef HAVE_MAX_STRUCT_ALIGNMENT
+ if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
+ align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
+ }
+#endif
+
+ struct_sz = sizeof(MPIDU_Datatype_contents);
+ types_sz = cp->nr_types * sizeof(MPI_Datatype);
+
+ /* pad the struct, types, and ints before we allocate.
+ *
+ * note: it's not necessary that we pad the aints,
+ * because they are last in the region.
+ */
+ if ((epsilon = struct_sz % align_sz)) {
+ struct_sz += align_sz - epsilon;
+ }
+ if ((epsilon = types_sz % align_sz)) {
+ types_sz += align_sz - epsilon;
+ }
+
+ ptr = ((char *) cp) + struct_sz + types_sz;
+ MPIR_Memcpy(user_ints, ptr, cp->nr_ints * sizeof(int));
+
+ return;
+}
+
+void MPIDI_Datatype_get_contents_aints(MPIDU_Datatype_contents *cp,
+ MPI_Aint *user_aints)
+{
+ char *ptr;
+ int align_sz = 8, epsilon;
+ int struct_sz, ints_sz, types_sz;
+
+#ifdef HAVE_MAX_STRUCT_ALIGNMENT
+ if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
+ align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
+ }
+#endif
+
+ struct_sz = sizeof(MPIDU_Datatype_contents);
+ types_sz = cp->nr_types * sizeof(MPI_Datatype);
+ ints_sz = cp->nr_ints * sizeof(int);
+
+ /* pad the struct, types, and ints before we allocate.
+ *
+ * note: it's not necessary that we pad the aints,
+ * because they are last in the region.
+ */
+ if ((epsilon = struct_sz % align_sz)) {
+ struct_sz += align_sz - epsilon;
+ }
+ if ((epsilon = types_sz % align_sz)) {
+ types_sz += align_sz - epsilon;
+ }
+ if ((epsilon = ints_sz % align_sz)) {
+ ints_sz += align_sz - epsilon;
+ }
+
+ ptr = ((char *) cp) + struct_sz + types_sz + ints_sz;
+ MPIR_Memcpy(user_aints, ptr, cp->nr_aints * sizeof(MPI_Aint));
+
+ return;
+}
+
+void MPIDI_Datatype_get_contents_types(MPIDU_Datatype_contents *cp,
+ MPI_Datatype *user_types)
+{
+ char *ptr;
+ int align_sz = 8, epsilon;
+ int struct_sz;
+
+#ifdef HAVE_MAX_STRUCT_ALIGNMENT
+ if (align_sz > HAVE_MAX_STRUCT_ALIGNMENT) {
+ align_sz = HAVE_MAX_STRUCT_ALIGNMENT;
+ }
+#endif
+
+ struct_sz = sizeof(MPIDU_Datatype_contents);
+
+ /* pad the struct, types, and ints before we allocate.
+ *
+ * note: it's not necessary that we pad the aints,
+ * because they are last in the region.
+ */
+ if ((epsilon = struct_sz % align_sz)) {
+ struct_sz += align_sz - epsilon;
+ }
+
+ ptr = ((char *) cp) + struct_sz;
+ MPIR_Memcpy(user_types, ptr, cp->nr_types * sizeof(MPI_Datatype));
+
+ return;
+}
diff --git a/src/mpid/common/datatype/mpidu_datatype_free.c b/src/mpid/common/datatype/mpidu_datatype_free.c
new file mode 100644
index 0000000..4527af4
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_datatype_free.c
@@ -0,0 +1,59 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2002 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+#include <limits.h>
+
+/* #define MPID_TYPE_ALLOC_DEBUG */
+
+/*@
+
+ MPIDU_Datatype_free
+
+Input Parameters:
+. MPIDU_Datatype ptr - pointer to MPID datatype structure that is no longer
+ referenced
+
+Output Parameters:
+ none
+
+ Return Value:
+ none
+
+ This function handles freeing dynamically allocated memory associated with
+ the datatype. In the process MPIDU_Datatype_free_contents() is also called,
+ which handles decrementing reference counts to constituent types (in
+ addition to freeing the space used for contents information).
+ MPIDU_Datatype_free_contents() will call MPIDU_Datatype_free() on constituent
+ types that are no longer referenced as well.
+
+ @*/
+void MPIDU_Datatype_free(MPIDU_Datatype *ptr)
+{
+ MPL_DBG_MSG_P(MPIR_DBG_DATATYPE,VERBOSE,"type %x freed.", ptr->handle);
+
+#ifdef MPID_Type_free_hook
+ MPID_Type_free_hook(ptr);
+#endif /* MPID_Type_free_hook */
+
+ /* before freeing the contents, check whether the pointer is not
+ null because it is null in the case of a datatype shipped to the target
+ for RMA ops */
+ if (ptr->contents) {
+ MPIDU_Datatype_free_contents(ptr);
+ }
+ if (ptr->dataloop) {
+ MPIDU_Dataloop_free(&(ptr->dataloop));
+ }
+#if defined(MPID_HAS_HETERO) || 1
+ if (ptr->hetero_dloop) {
+ MPIDU_Dataloop_free(&(ptr->hetero_dloop));
+ }
+#endif /* MPID_HAS_HETERO */
+ MPIR_Handle_obj_free(&MPIDU_Datatype_mem, ptr);
+}
diff --git a/src/mpid/common/datatype/mpidu_ext32_datatype.c b/src/mpid/common/datatype/mpidu_ext32_datatype.c
new file mode 100644
index 0000000..155410d
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_ext32_datatype.c
@@ -0,0 +1,118 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpichconf.h>
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+
+
+typedef struct external32_basic_size
+{
+ MPI_Datatype el_type;
+ MPI_Aint el_size;
+} external32_basic_size_t;
+
+static external32_basic_size_t external32_basic_size_array[] =
+{
+ { MPI_PACKED, 1 },
+ { MPI_BYTE, 1 },
+ { MPI_CHAR, 1 },
+ { MPI_UNSIGNED_CHAR, 1 },
+ { MPI_SIGNED_CHAR, 1 },
+ { MPI_WCHAR, 2 },
+ { MPI_SHORT, 2 },
+ { MPI_UNSIGNED_SHORT, 2 },
+ { MPI_INT, 4 },
+ { MPI_UNSIGNED, 4 },
+ { MPI_LONG, 4 },
+ { MPI_UNSIGNED_LONG, 4 },
+ { MPI_LONG_LONG, 8 },
+ { MPI_LONG_LONG_INT, 8 },
+ { MPI_UNSIGNED_LONG_LONG, 8 },
+ { MPI_FLOAT, 4 },
+ { MPI_DOUBLE, 8 },
+ { MPI_LONG_DOUBLE, 16 },
+
+ { MPI_C_BOOL, 1 },
+ { MPI_INT8_T, 1 },
+ { MPI_INT16_T, 2 },
+ { MPI_INT32_T, 4 },
+ { MPI_INT64_T, 8 },
+ { MPI_UINT8_T, 1 },
+ { MPI_UINT16_T, 2 },
+ { MPI_UINT32_T, 4 },
+ { MPI_UINT64_T, 8 },
+ { MPI_AINT, 8 },
+ { MPI_COUNT, 8 },
+ { MPI_OFFSET, 8 },
+ { MPI_C_COMPLEX, 2*4 },
+ { MPI_C_FLOAT_COMPLEX, 2*4 },
+ { MPI_C_DOUBLE_COMPLEX, 2*8 },
+ { MPI_C_LONG_DOUBLE_COMPLEX, 2*16 },
+
+ { MPI_CHARACTER, 1 },
+ { MPI_LOGICAL, 4 },
+ { MPI_INTEGER, 4 },
+ { MPI_REAL, 4 },
+ { MPI_DOUBLE_PRECISION, 8 },
+ { MPI_COMPLEX, 8 },
+ { MPI_DOUBLE_COMPLEX, 16 },
+
+ { MPI_INTEGER1, 1 },
+ { MPI_INTEGER2, 2 },
+ { MPI_INTEGER4, 4 },
+ { MPI_INTEGER8, 8 },
+ { MPI_INTEGER16, 16 },
+
+ { MPI_REAL4, 4 },
+ { MPI_REAL8, 8 },
+ { MPI_REAL16, 16 },
+
+ { MPI_COMPLEX8, 2*4 },
+ { MPI_COMPLEX16, 2*8 },
+ { MPI_COMPLEX32, 2*16 },
+
+ { MPI_CXX_BOOL, 1 },
+ { MPI_CXX_FLOAT_COMPLEX, 2*4 },
+ { MPI_CXX_DOUBLE_COMPLEX, 2*8 },
+ { MPI_CXX_LONG_DOUBLE_COMPLEX, 2*16 }
+};
+
+MPI_Aint MPIDI_Datatype_get_basic_size_external32(MPI_Datatype el_type)
+{
+ MPI_Aint ret = (MPI_Aint) 0;
+ unsigned int i = 0;
+ for(i = 0; i < (sizeof(external32_basic_size_array) /
+ sizeof(external32_basic_size_t)); i++)
+ {
+ if (external32_basic_size_array[i].el_type == el_type)
+ {
+ ret = external32_basic_size_array[i].el_size;
+ break;
+ }
+ }
+ return ret;
+}
+
+MPI_Aint MPIDU_Datatype_size_external32(MPI_Datatype type)
+{
+ if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
+ return MPIDI_Datatype_get_basic_size_external32(type);
+ }
+ else {
+ MPIDU_Dataloop *dlp = NULL;
+
+ MPIDU_Datatype_get_loopptr_macro(type, dlp, MPIDU_DATALOOP_HETEROGENEOUS);
+
+ return MPIDU_Dataloop_stream_size(dlp,
+ MPIDI_Datatype_get_basic_size_external32);
+ }
+}
+
diff --git a/src/mpid/common/datatype/mpidu_ext32_segment.c b/src/mpid/common/datatype/mpidu_ext32_segment.c
new file mode 100644
index 0000000..cea3fb1
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_ext32_segment.c
@@ -0,0 +1,353 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpichconf.h>
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+
+#undef MPID_SP_VERBOSE
+#undef MPID_SU_VERBOSE
+
+#include "mpidu_ext32_segment.h"
+
+/* MPIDU_Segment_piece_params
+ *
+ * This structure is used to pass function-specific parameters into our
+ * segment processing function. This allows us to get additional parameters
+ * to the functions it calls without changing the prototype.
+ */
+struct MPIDU_Segment_piece_params {
+ union {
+ struct {
+ char *pack_buffer;
+ } pack;
+ struct {
+ DLOOP_VECTOR *vectorp;
+ int index;
+ int length;
+ } pack_vector;
+ struct {
+ int64_t *offp;
+ int *sizep; /* see notes in Segment_flatten header */
+ int index;
+ int length;
+ } flatten;
+ struct {
+ char *last_loc;
+ int count;
+ } contig_blocks;
+ struct {
+ char *unpack_buffer;
+ } unpack;
+ struct {
+ int stream_off;
+ } print;
+ } u;
+};
+
+static inline int is_float_type(DLOOP_Type el_type)
+{
+ return ((el_type == MPI_FLOAT) || (el_type == MPI_DOUBLE) ||
+ (el_type == MPI_LONG_DOUBLE) ||
+ (el_type == MPI_DOUBLE_PRECISION) ||
+ (el_type == MPI_COMPLEX) || (el_type == MPI_DOUBLE_COMPLEX));
+/* (el_type == MPI_REAL4) || (el_type == MPI_REAL8) || */
+/* (el_type == MPI_REAL16)); */
+}
+
+static int external32_basic_convert(char *dest_buf,
+ char *src_buf,
+ int dest_el_size,
+ int src_el_size,
+ DLOOP_Offset count)
+{
+ char *src_ptr = src_buf, *dest_ptr = dest_buf;
+ char *src_end = (char *)(src_buf + ((int)count * src_el_size));
+
+ MPIR_Assert(dest_buf && src_buf);
+
+ if (src_el_size == dest_el_size)
+ {
+ if (src_el_size == 2)
+ {
+ while(src_ptr != src_end)
+ {
+ BASIC_convert16((*(TWO_BYTE_BASIC_TYPE *)src_ptr),
+ (*(TWO_BYTE_BASIC_TYPE *)dest_ptr));
+
+ src_ptr += src_el_size;
+ dest_ptr += dest_el_size;
+ }
+ }
+ else if (src_el_size == 4)
+ {
+ while(src_ptr != src_end)
+ {
+ BASIC_convert32((*(FOUR_BYTE_BASIC_TYPE *)src_ptr),
+ (*(FOUR_BYTE_BASIC_TYPE *)dest_ptr));
+
+ src_ptr += src_el_size;
+ dest_ptr += dest_el_size;
+ }
+ }
+ else if (src_el_size == 8)
+ {
+ while(src_ptr != src_end)
+ {
+ BASIC_convert64(src_ptr, dest_ptr);
+
+ src_ptr += src_el_size;
+ dest_ptr += dest_el_size;
+ }
+ }
+ }
+ else
+ {
+ /* TODO */
+ MPL_error_printf( "Conversion of types whose size is not the same as the size in external32 is not supported\n" );
+ MPID_Abort( 0, MPI_SUCCESS, 1, "Aborting with internal error" );
+ /* There is no way to return an error code, so an abort is the
+ only choice (the return value of this routine is not
+ an error code) */
+ }
+ return 0;
+}
+
+static int external32_float_convert(char *dest_buf,
+ char *src_buf,
+ int dest_el_size,
+ int src_el_size,
+ int count)
+{
+ char *src_ptr = src_buf, *dest_ptr = dest_buf;
+ char *src_end = (char *)(src_buf + ((int)count * src_el_size));
+
+ MPIR_Assert(dest_buf && src_buf);
+
+ if (src_el_size == dest_el_size)
+ {
+ if (src_el_size == 4)
+ {
+ while(src_ptr != src_end)
+ {
+ FLOAT_convert((*(FOUR_BYTE_FLOAT_TYPE *)src_ptr),
+ (*(FOUR_BYTE_FLOAT_TYPE *)dest_ptr));
+
+ src_ptr += src_el_size;
+ dest_ptr += dest_el_size;
+ }
+ }
+ else if (src_el_size == 8)
+ {
+ while(src_ptr != src_end)
+ {
+ FLOAT_convert((*(EIGHT_BYTE_FLOAT_TYPE *)src_ptr),
+ (*(EIGHT_BYTE_FLOAT_TYPE *)dest_ptr));
+
+ src_ptr += src_el_size;
+ dest_ptr += dest_el_size;
+ }
+ }
+ }
+ else
+ {
+ /* TODO */
+ MPL_error_printf( "Conversion of types whose size is not the same as the size in external32 is not supported\n" );
+ MPID_Abort( 0, MPI_SUCCESS, 1, "Aborting with internal error" );
+ /* There is no way to return an error code, so an abort is the
+ only choice (the return value of this routine is not
+ an error code) */
+ }
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_contig_pack_external32_to_buf
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDU_Segment_contig_pack_external32_to_buf(DLOOP_Offset *blocks_p,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off,
+ void *bufp,
+ void *v_paramp)
+{
+ int src_el_size, dest_el_size;
+ struct MPIDU_Segment_piece_params *paramp = v_paramp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF);
+
+ src_el_size = MPIDU_Datatype_get_basic_size(el_type);
+ dest_el_size = MPIDI_Datatype_get_basic_size_external32(el_type);
+ MPIR_Assert(dest_el_size);
+
+ /*
+ * h = handle value
+ * do = datatype buffer offset
+ * dp = datatype buffer pointer
+ * bp = pack buffer pointer (current location, incremented as we go)
+ * sz = size of datatype (guess we could get this from handle value if
+ * we wanted...)
+ */
+#ifdef MPID_SP_VERBOSE
+ dbg_printf("\t[contig pack [external32]: do=%d, dp=%x, bp=%x, "
+ "src_el_sz=%d, dest_el_sz=%d, blksz=%d]\n",
+ rel_off,
+ (unsigned) bufp,
+ (unsigned) paramp->u.pack.pack_buffer,
+ src_el_size,
+ dest_el_size,
+ (int) *blocks_p);
+#endif
+
+ /* TODO: DEAL WITH CASE WHERE ALL DATA DOESN'T FIT! */
+ if ((src_el_size == dest_el_size) && (src_el_size == 1))
+ {
+ MPIR_Memcpy(paramp->u.pack.pack_buffer,
+ ((char *) bufp) + rel_off, *blocks_p);
+ }
+ else if (is_float_type(el_type))
+ {
+ external32_float_convert(paramp->u.pack.pack_buffer,
+ ((char *) bufp) + rel_off,
+ dest_el_size, src_el_size, *blocks_p);
+ }
+ else
+ {
+ external32_basic_convert(paramp->u.pack.pack_buffer,
+ ((char *) bufp) + rel_off,
+ dest_el_size, src_el_size, *blocks_p);
+ }
+ paramp->u.pack.pack_buffer += (dest_el_size * (*blocks_p));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF);
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_contig_unpack_external32_to_buf
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDU_Segment_contig_unpack_external32_to_buf(DLOOP_Offset *blocks_p,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off,
+ void *bufp,
+ void *v_paramp)
+{
+ int src_el_size, dest_el_size;
+ struct MPIDU_Segment_piece_params *paramp = v_paramp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF);
+
+ src_el_size = MPIDU_Datatype_get_basic_size(el_type);
+ dest_el_size = MPIDI_Datatype_get_basic_size_external32(el_type);
+ MPIR_Assert(dest_el_size);
+
+ /*
+ * h = handle value
+ * do = datatype buffer offset
+ * dp = datatype buffer pointer
+ * up = unpack buffer pointer (current location, incremented as we go)
+ * sz = size of datatype (guess we could get this from handle value if
+ * we wanted...)
+ */
+#ifdef MPID_SP_VERBOSE
+ dbg_printf("\t[contig unpack [external32]: do=%d, dp=%x, up=%x, "
+ "src_el_sz=%d, dest_el_sz=%d, blksz=%d]\n",
+ rel_off,
+ (unsigned) bufp,
+ (unsigned) paramp->u.unpack.unpack_buffer,
+ src_el_size,
+ dest_el_size,
+ (int) *blocks_p);
+#endif
+
+ /* TODO: DEAL WITH CASE WHERE ALL DATA DOESN'T FIT! */
+ if ((src_el_size == dest_el_size) && (src_el_size == 1))
+ {
+ MPIR_Memcpy(((char *)bufp) + rel_off,
+ paramp->u.unpack.unpack_buffer, *blocks_p);
+ }
+ else if (is_float_type(el_type))
+ {
+ external32_float_convert(((char *) bufp) + rel_off,
+ paramp->u.unpack.unpack_buffer,
+ dest_el_size, src_el_size, *blocks_p);
+ }
+ else
+ {
+ external32_basic_convert(((char *) bufp) + rel_off,
+ paramp->u.unpack.unpack_buffer,
+ dest_el_size, src_el_size, *blocks_p);
+ }
+ paramp->u.unpack.unpack_buffer += (dest_el_size * (*blocks_p));
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF);
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_pack_external32
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+void MPIDU_Segment_pack_external32(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ void *pack_buffer)
+{
+ struct MPIDU_Segment_piece_params pack_params;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL);
+
+ pack_params.u.pack.pack_buffer = (DLOOP_Buffer)pack_buffer;
+ MPIDU_Segment_manipulate(segp,
+ first,
+ lastp,
+ MPIDU_Segment_contig_pack_external32_to_buf,
+ NULL, /* MPIDU_Segment_vector_pack_external32_to_buf, */
+ NULL, /* blkidx */
+ NULL, /* MPIDU_Segment_index_pack_external32_to_buf, */
+ MPIDI_Datatype_get_basic_size_external32,
+ &pack_params);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL);
+ return;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_unpack_external32
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+void MPIDU_Segment_unpack_external32(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_Buffer unpack_buffer)
+{
+ struct MPIDU_Segment_piece_params pack_params;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32);
+
+ pack_params.u.unpack.unpack_buffer = unpack_buffer;
+ MPIDU_Segment_manipulate(segp,
+ first,
+ lastp,
+ MPIDU_Segment_contig_unpack_external32_to_buf,
+ NULL, /* MPIDU_Segment_vector_unpack_external32_to_buf, */
+ NULL, /* blkidx */
+ NULL, /* MPIDU_Segment_index_unpack_external32_to_buf, */
+ MPIDI_Datatype_get_basic_size_external32,
+ &pack_params);
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32);
+ return;
+}
diff --git a/src/mpid/common/datatype/mpidu_ext32_segment.h b/src/mpid/common/datatype/mpidu_ext32_segment.h
new file mode 100644
index 0000000..b4e853f
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_ext32_segment.h
@@ -0,0 +1,417 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIDUEXT32SEGMENT_H
+#define MPIDUEXT32SEGMENT_H
+
+#include "mpichconf.h"
+
+/* FIXME!!! TODO!!! FOO!!! DO THIS!!! DETECT ME!!!
+ *
+ * Include mpiimpl.h up here too, taking it out of mpid_ext32_segment.c
+ *
+ * Consider using MPIU_INT64_T etc. types instead of the
+ * EIGHT_BYTE_BASIC_TYPE stuff, or put #defines at the top of this file
+ * assigning them in a simple manner.
+ *
+ * Doing that might require that we create MPIU_UINT64_T types (etc),
+ * because it looks like we really want to have unsigned types for the
+ * various convert functions below.
+ */
+
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_ENDIAN_H
+#include <endian.h>
+#endif
+
+#ifdef HAVE_INT64
+#define uint64_t __int64
+#define uint32_t __int32
+#elif defined(MPIU_INT64_T)
+/* FIXME: This is necessary with some compilers or compiler settings */
+#define uint64_t unsigned MPIU_INT64_T
+#endif
+
+/* FIXME: Who defines __BYTE_ORDER or __BIG_ENDIAN? They aren't part of C */
+/* FIXME: The else test assumes that the byte order is little endian, whereas
+ it may simply have been undetermined. This should instead use either
+ a configure-time test (for which there are macros) or a runtime test
+ and not use this non-portable check */
+
+/* Some platforms, like AIX, use BYTE_ORDER instead of __BYTE_ORDER */
+#if defined(BYTE_ORDER) && !defined(__BYTE_ORDER)
+#define __BYTE_ORDER BYTE_ORDER
+#endif
+
+#if defined(WORDS_BIGENDIAN)
+#define BLENDIAN 0
+#elif defined(WORDS_LITTLEENDIAN)
+#define BLENDIAN 1
+#else
+#if !defined(__BYTE_ORDER) || !defined(__BIG_ENDIAN)
+#error This code assumes that __BYTE_ORDER and __BIG_ENDIAN are defined
+#endif
+/* FIXME: "BLENDIAN" is a non-conforming name - it could conflict with some
+ other definition in a non-mpich header file */
+#if ((defined(_BIG_ENDIAN) && !defined(ntohl)) || (__BYTE_ORDER == __BIG_ENDIAN))
+#define BLENDIAN 0 /* detected host arch byte order is big endian */
+#else
+#define BLENDIAN 1 /* detected host arch byte order is little endian */
+#endif
+#endif
+
+/*
+ set to 1: uses manual swapping routines
+ for 16/32 bit data types
+ set to 0: uses system provided swapping routines
+ for 16/32 bit data types
+*/
+#define MANUAL_BYTESWAPS 1
+
+/*
+ NOTE:
+
+ There are two 'public' calls here:
+
+ FLOAT_convert(src, dest) -- converts floating point src into
+ external32 floating point format and stores the result in dest.
+
+ BASIC_convert(src, dest) -- converts integral type src into
+ external32 integral type and stores the result in dest.
+
+ These two macros compile to assignments on big-endian architectures.
+*/
+
+#if (MANUAL_BYTESWAPS == 0)
+#include <netinet/in.h>
+#endif
+
+#define BITSIZE_OF(type) (sizeof(type) * CHAR_BIT)
+
+#if (MANUAL_BYTESWAPS == 1)
+#define BASIC_convert32(src, dest) \
+{ \
+ dest = (((src >> 24) & 0x000000FF) |\
+ ((src >> 8) & 0x0000FF00) |\
+ ((src << 8) & 0x00FF0000) |\
+ ((src << 24) & 0xFF000000));\
+}
+#else
+#define BASIC_convert32(src, dest) \
+{ \
+ dest = htonl((uint32_t)src); \
+}
+#endif
+
+#if (MANUAL_BYTESWAPS == 1)
+#define BASIC_convert16(src, dest) \
+{ \
+ dest = (((src >> 8) & 0x00FF) | \
+ ((src << 8) & 0xFF00)); \
+}
+#else
+#define BASIC_convert16(src, dest) \
+{ \
+ dest = htons((uint16_t)src); \
+}
+#endif
+
+
+/* changed the argument types to be char* instead of uint64_t* because the Sun compiler
+ prints out warnings that the function expects unsigned long long, but is being passed
+ signed long long in mpid_ext32_segment.c. */
+static inline void BASIC_convert64(char *src, char *dest)
+{
+ uint32_t tmp_src[2];
+ uint32_t tmp_dest[2];
+
+ tmp_src[0] = (uint32_t)(*((uint64_t *)src) >> 32);
+ tmp_src[1] = (uint32_t)((*((uint64_t *)src) << 32) >> 32);
+
+ BASIC_convert32(tmp_src[0], tmp_dest[0]);
+ BASIC_convert32(tmp_src[1], tmp_dest[1]);
+
+ *((uint64_t *)dest) = (uint64_t)tmp_dest[0];
+ *((uint64_t *)dest) <<= 32;
+ *((uint64_t *)dest) |= (uint64_t)tmp_dest[1];
+}
+
+static inline void BASIC_convert96(char *src, char *dest)
+{
+ uint32_t tmp_src[3];
+ uint32_t tmp_dest[3];
+ char *ptr = dest;
+
+ tmp_src[0] = (uint32_t)(*((uint64_t *)src) >> 32);
+ tmp_src[1] = (uint32_t)((*((uint64_t *)src) << 32) >> 32);
+ tmp_src[2] = (uint32_t)
+ (*((uint32_t *)((char *)src + sizeof(uint64_t))));
+
+ BASIC_convert32(tmp_src[0], tmp_dest[0]);
+ BASIC_convert32(tmp_src[1], tmp_dest[1]);
+ BASIC_convert32(tmp_src[2], tmp_dest[2]);
+
+ *((uint32_t *)ptr) = tmp_dest[0];
+ ptr += sizeof(uint32_t);
+ *((uint32_t *)ptr) = tmp_dest[1];
+ ptr += sizeof(uint32_t);
+ *((uint32_t *)ptr) = tmp_dest[2];
+}
+
+static inline void BASIC_convert128(char *src, char *dest)
+{
+ uint64_t tmp_src[2];
+ uint64_t tmp_dest[2];
+ char *ptr = dest;
+
+ tmp_src[0] = *((uint64_t *)src);
+ tmp_src[1] = *((uint64_t *)((char *)src + sizeof(uint64_t)));
+
+ BASIC_convert64((char *) &tmp_src[0], (char *) &tmp_dest[0]);
+ BASIC_convert64((char *) &tmp_src[1], (char *) &tmp_dest[1]);
+
+ *((uint64_t *)ptr) = tmp_dest[0];
+ ptr += sizeof(uint64_t);
+ *((uint64_t *)ptr) = tmp_dest[1];
+}
+
+#if (BLENDIAN == 1)
+#define BASIC_convert(src, dest) \
+{ \
+ register int type_byte_size = sizeof(src); \
+ switch(type_byte_size) \
+ { \
+ case 1: \
+ dest = src; \
+ break; \
+ case 2: \
+ BASIC_convert16(src, dest); \
+ break; \
+ case 4: \
+ BASIC_convert32(src, dest); \
+ break; \
+ case 8: \
+ BASIC_convert64((char *)&src, \
+ (char *)&dest);\
+ break; \
+ } \
+}
+
+/*
+ http://www.mpi-forum.org/docs/mpi-20-html/node200.htm
+
+ When converting a larger size integer to a smaller size integer,
+ only the less significant bytes are moved. Care must be taken to
+ preserve the sign bit value. This allows no conversion errors if the
+ data range is within the range of the smaller size integer. ( End of
+ advice to implementors.)
+*/
+#define BASIC_mixed_convert(src, dest)
+#else
+#define BASIC_convert(src, dest) \
+ { dest = src; }
+#define BASIC_mixed_convert(src, dest) \
+ { dest = src; }
+#endif
+
+/*
+ Notes on the IEEE floating point format
+ ---------------------------------------
+
+ external32 for floating point types is big-endian IEEE format.
+
+ ---------------------
+ 32 bit floating point
+ ---------------------
+ * big endian byte order
+ struct be_ieee754_single_precision
+ {
+ unsigned int sign_neg:1;
+ unsigned int exponent:8;
+ unsigned int mantissa:23;
+ };
+
+ * little endian byte order
+ struct le_ieee754_single_precision
+ {
+ unsigned int mantissa:23;
+ unsigned int exponent:8;
+ unsigned int sign_neg:1;
+ };
+ ---------------------
+
+ ---------------------
+ 64 bit floating point
+ ---------------------
+ * big endian byte order
+ struct be_ieee754_double_precision
+ {
+ unsigned int sign_neg:1;
+ unsigned int exponent:11;
+ unsigned int mantissa0:20;
+ unsigned int mantissa1:32;
+ };
+
+ * little endian byte order
+ * big endian float word order
+ struct le_ieee754_double_precision
+ {
+ unsigned int mantissa0:20;
+ unsigned int exponent:11;
+ unsigned int sign_neg:1;
+ unsigned int mantissa1:32;
+ };
+
+ * little endian byte order
+ * little endian float word order
+ struct le_ieee754_double_precision
+ {
+ unsigned int mantissa1:32;
+ unsigned int mantissa0:20;
+ unsigned int exponent:11;
+ unsigned int sign_neg:1;
+ };
+ ---------------------
+
+ ---------------------
+ 96 bit floating point
+ ---------------------
+ * big endian byte order
+ struct be_ieee854_double_extended
+ {
+ unsigned int negative:1;
+ unsigned int exponent:15;
+ unsigned int empty:16;
+ unsigned int mantissa0:32;
+ unsigned int mantissa1:32;
+ };
+
+ * little endian byte order
+ * big endian float word order
+ struct le_ieee854_double_extended
+ {
+ unsigned int exponent:15;
+ unsigned int negative:1;
+ unsigned int empty:16;
+ unsigned int mantissa0:32;
+ unsigned int mantissa1:32;
+ };
+
+ * little endian byte order
+ * little endian float word order
+ struct le_ieee854_double_extended
+ {
+ unsigned int mantissa1:32;
+ unsigned int mantissa0:32;
+ unsigned int exponent:15;
+ unsigned int negative:1;
+ unsigned int empty:16;
+ };
+ ---------------------
+
+ 128 bit floating point implementation notes
+ ===========================================
+
+ "A 128-bit long double number consists of an ordered pair of
+ 64-bit double-precision numbers. The first member of the
+ ordered pair contains the high-order part of the number, and
+ the second member contains the low-order part. The value of the
+ long double quantity is the sum of the two 64-bit numbers."
+
+ From http://nscp.upenn.edu/aix4.3html/aixprggd/genprogc/128bit_long_double_floating-point_datatype.htm
+ [ as of 09/04/2003 ]
+*/
+
+#if (BLENDIAN == 1)
+#define FLOAT_convert(src, dest) \
+{ \
+ register int type_byte_size = sizeof(src);\
+ switch(type_byte_size) \
+ { \
+ case 4: \
+ { \
+ long d; \
+ BASIC_convert32((long)src, d); \
+ dest = (float)d; \
+ } \
+ break; \
+ case 8: \
+ { \
+ BASIC_convert64((char *)&src, \
+ (char *)&dest);\
+ } \
+ break; \
+ case 12: \
+ { \
+ BASIC_convert96((char *)&src, \
+ (char *)&dest); \
+ } \
+ break; \
+ case 16: \
+ { \
+ BASIC_convert128((char *)&src, \
+ (char *)&dest); \
+ } \
+ break; \
+ } \
+}
+#else
+#define FLOAT_convert(src, dest) \
+ { dest = src; }
+#endif
+
+#ifdef HAVE_INT16_T
+#define TWO_BYTE_BASIC_TYPE int16_t
+#else
+#if (SIZEOF_SHORT == 2)
+#define TWO_BYTE_BASIC_TYPE short
+#else
+#error "Cannot detect a basic type that is 2 bytes long"
+#endif
+#endif /* HAVE_INT16_T */
+
+#ifdef HAVE_INT32_T
+#define FOUR_BYTE_BASIC_TYPE int32_t
+#else
+#if (SIZEOF_INT == 4)
+#define FOUR_BYTE_BASIC_TYPE int
+#elif (SIZEOF_LONG == 4)
+#define FOUR_BYTE_BASIC_TYPE long
+#else
+#error "Cannot detect a basic type that is 4 bytes long"
+#endif
+#endif /* HAVE_INT32_T */
+
+#ifdef HAVE_INT64_T
+#define EIGHT_BYTE_BASIC_TYPE int64_t
+#else
+#ifdef HAVE_INT64
+#define EIGHT_BYTE_BASIC_TYPE __int64
+#elif (SIZEOF_LONG_LONG == 8)
+#define EIGHT_BYTE_BASIC_TYPE long long
+#else
+#error "Cannot detect a basic type that is 8 bytes long"
+#endif
+#endif /* HAVE_INT64_T */
+
+#if (SIZEOF_FLOAT == 4)
+#define FOUR_BYTE_FLOAT_TYPE float
+#else
+#error "Cannot detect a float type that is 4 bytes long"
+#endif
+
+#if (SIZEOF_DOUBLE == 8)
+#define EIGHT_BYTE_FLOAT_TYPE double
+#else
+#error "Cannot detect a float type that is 8 bytes long"
+#endif
+
+#endif /* MPIDEXT32SEGMENT_H */
diff --git a/src/mpid/common/datatype/mpidu_segment.c b/src/mpid/common/datatype/mpidu_segment.c
new file mode 100644
index 0000000..ffeb521
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_segment.c
@@ -0,0 +1,528 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+* (C) 2001 by Argonne National Laboratory.
+* See COPYRIGHT in top-level directory.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+
+/*
+ * Define these two names to enable debugging output.
+ */
+#undef MPID_SP_VERBOSE
+#undef MPID_SU_VERBOSE
+
+/* MPIDU_Segment_piece_params
+*
+* This structure is used to pass function-specific parameters into our
+* segment processing function. This allows us to get additional parameters
+* to the functions it calls without changing the prototype.
+*/
+struct MPIDU_Segment_piece_params {
+ union {
+ struct {
+ char *pack_buffer;
+ } pack;
+ struct {
+ DLOOP_VECTOR *vectorp;
+ int index;
+ int length;
+ } pack_vector;
+ struct {
+ int64_t *offp;
+ DLOOP_Size *sizep; /* see notes in Segment_flatten header */
+ int index;
+ MPI_Aint length;
+ } flatten;
+ struct {
+ char *last_loc;
+ int count;
+ } contig_blocks;
+ struct {
+ char *unpack_buffer;
+ } unpack;
+ struct {
+ int stream_off;
+ } print;
+ } u;
+};
+
+/* prototypes of internal functions */
+static int MPIDU_Segment_vector_pack_to_iov(DLOOP_Offset *blocks_p,
+ DLOOP_Count count,
+ DLOOP_Size blksz,
+ DLOOP_Offset stride,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off,
+ void *bufp,
+ void *v_paramp);
+
+static int MPIDU_Segment_contig_pack_to_iov(DLOOP_Offset *blocks_p,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off,
+ void *bufp,
+ void *v_paramp);
+
+static int MPIDU_Segment_contig_flatten(DLOOP_Offset *blocks_p,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off,
+ void *bufp,
+ void *v_paramp);
+
+static int MPIDU_Segment_vector_flatten(DLOOP_Offset *blocks_p,
+ DLOOP_Count count,
+ DLOOP_Size blksz,
+ DLOOP_Offset stride,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off, /* offset into buffer */
+ void *bufp, /* start of buffer */
+ void *v_paramp);
+
+/********** EXTERNALLY VISIBLE FUNCTIONS FOR TYPE MANIPULATION **********/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_pack_vector
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* MPIDU_Segment_pack_vector
+*
+* Parameters:
+* segp - pointer to segment structure
+* first - first byte in segment to pack
+* lastp - in/out parameter describing last byte to pack (and afterwards
+* the last byte _actually_ packed)
+* NOTE: actually returns index of byte _after_ last one packed
+* vectorp - pointer to (off, len) pairs to fill in
+* lengthp - in/out parameter describing length of array (and afterwards
+* the amount of the array that has actual data)
+*/
+void MPIDU_Segment_pack_vector(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_VECTOR *vectorp,
+ int *lengthp)
+{
+struct MPIDU_Segment_piece_params packvec_params;
+MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_PACK_VECTOR);
+
+MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_PACK_VECTOR);
+
+packvec_params.u.pack_vector.vectorp = vectorp;
+packvec_params.u.pack_vector.index = 0;
+packvec_params.u.pack_vector.length = *lengthp;
+
+MPIR_Assert(*lengthp > 0);
+
+MPIDU_Segment_manipulate(segp,
+ first,
+ lastp,
+ MPIDU_Segment_contig_pack_to_iov,
+ MPIDU_Segment_vector_pack_to_iov,
+ NULL, /* blkidx fn */
+ NULL, /* index fn */
+ NULL,
+ &packvec_params);
+
+/* last value already handled by MPIDU_Segment_manipulate */
+*lengthp = packvec_params.u.pack_vector.index;
+MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_PACK_VECTOR);
+return;
+}
+
+/* MPIDU_Segment_unpack_vector
+*
+* Q: Should this be any different from pack vector?
+*/
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_unpack_vector
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+void MPIDU_Segment_unpack_vector(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_VECTOR *vectorp,
+ int *lengthp)
+{
+MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR);
+MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR);
+MPIDU_Segment_pack_vector(segp, first, lastp, vectorp, lengthp);
+MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR);
+return;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_flatten
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* MPIDU_Segment_flatten
+*
+* offp - pointer to array to fill in with offsets
+* sizep - pointer to array to fill in with sizes
+* lengthp - pointer to value holding size of arrays; # used is returned
+*
+* Internally, index is used to store the index of next array value to fill in.
+*
+* TODO: MAKE SIZES Aints IN ROMIO, CHANGE THIS TO USE INTS TOO.
+*/
+void MPIDU_Segment_flatten(struct DLOOP_Segment *segp,
+ DLOOP_Offset first,
+ DLOOP_Offset *lastp,
+ DLOOP_Offset *offp,
+ DLOOP_Size *sizep,
+ DLOOP_Offset *lengthp)
+{
+struct MPIDU_Segment_piece_params packvec_params;
+MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_FLATTEN);
+
+MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_FLATTEN);
+
+packvec_params.u.flatten.offp = (int64_t *) offp;
+packvec_params.u.flatten.sizep = sizep;
+packvec_params.u.flatten.index = 0;
+packvec_params.u.flatten.length = *lengthp;
+
+MPIR_Assert(*lengthp > 0);
+
+MPIDU_Segment_manipulate(segp,
+ first,
+ lastp,
+ MPIDU_Segment_contig_flatten,
+ MPIDU_Segment_vector_flatten,
+ NULL, /* blkidx fn */
+ NULL,
+ NULL,
+ &packvec_params);
+
+/* last value already handled by MPIDU_Segment_manipulate */
+*lengthp = packvec_params.u.flatten.index;
+MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_FLATTEN);
+return;
+}
+
+
+/*
+* EVERYTHING BELOW HERE IS USED ONLY WITHIN THIS FILE
+*/
+
+/********** FUNCTIONS FOR CREATING AN IOV DESCRIBING BUFFER **********/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_contig_pack_to_iov
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* MPIDU_Segment_contig_pack_to_iov
+*/
+static int MPIDU_Segment_contig_pack_to_iov(DLOOP_Offset *blocks_p,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off,
+ void *bufp,
+ void *v_paramp)
+{
+ int el_size, last_idx;
+ DLOOP_Offset size;
+ char *last_end = NULL;
+ struct MPIDU_Segment_piece_params *paramp = v_paramp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
+
+ el_size = MPIDU_Datatype_get_basic_size(el_type);
+ size = *blocks_p * (DLOOP_Offset) el_size;
+
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,
+ " contig to vec: do=" MPI_AINT_FMT_DEC_SPEC ", dp=%p, ind=%d, sz=%d, blksz=" MPI_AINT_FMT_DEC_SPEC,
+ (MPI_Aint) rel_off,
+ bufp,
+ paramp->u.pack_vector.index,
+ el_size,
+ (MPI_Aint) *blocks_p));
+
+ last_idx = paramp->u.pack_vector.index - 1;
+ if (last_idx >= 0) {
+ last_end = ((char *) paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_BUF) +
+ paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN;
+ }
+
+ MPIR_Ensure_Aint_fits_in_pointer((MPIR_VOID_PTR_CAST_TO_MPI_AINT (bufp)) + rel_off);
+ if ((last_idx == paramp->u.pack_vector.length-1) &&
+ (last_end != ((char *) bufp + rel_off)))
+ {
+ /* we have used up all our entries, and this region doesn't fit on
+ * the end of the last one. setting blocks to 0 tells manipulation
+ * function that we are done (and that we didn't process any blocks).
+ */
+ *blocks_p = 0;
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
+ return 1;
+ }
+ else if (last_idx >= 0 && (last_end == ((char *) bufp + rel_off)))
+ {
+ /* add this size to the last vector rather than using up another one */
+ paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN += size;
+ }
+ else {
+ paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_BUF = (char *) bufp + rel_off;
+ paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_LEN = size;
+ paramp->u.pack_vector.index++;
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV);
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_vector_pack_to_iov
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* MPIDU_Segment_vector_pack_to_iov
+ *
+ * Input Parameters:
+ * blocks_p - [inout] pointer to a count of blocks (total, for all noncontiguous pieces)
+ * count - # of noncontiguous regions
+ * blksz - size of each noncontiguous region
+ * stride - distance in bytes from start of one region to start of next
+ * el_type - elemental type (e.g. MPI_INT)
+ * ...
+ *
+ * Note: this is only called when the starting position is at the beginning
+ * of a whole block in a vector type.
+ */
+static int MPIDU_Segment_vector_pack_to_iov(DLOOP_Offset *blocks_p,
+ DLOOP_Count count,
+ DLOOP_Size blksz,
+ DLOOP_Offset stride,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off, /* offset into buffer */
+ void *bufp, /* start of buffer */
+ void *v_paramp)
+{
+ int i;
+ DLOOP_Offset size, blocks_left, basic_size;
+ struct MPIDU_Segment_piece_params *paramp = v_paramp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
+
+ basic_size = (DLOOP_Offset) MPIDU_Datatype_get_basic_size(el_type);
+ blocks_left = *blocks_p;
+
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,
+ " vector to vec: do=" MPI_AINT_FMT_DEC_SPEC
+ ", dp=%p"
+ ", len=" MPI_AINT_FMT_DEC_SPEC
+ ", ind=" MPI_AINT_FMT_DEC_SPEC
+ ", ct=" MPI_AINT_FMT_DEC_SPEC
+ ", blksz=" MPI_AINT_FMT_DEC_SPEC
+ ", str=" MPI_AINT_FMT_DEC_SPEC
+ ", blks=" MPI_AINT_FMT_DEC_SPEC,
+ (MPI_Aint) rel_off,
+ bufp,
+ (MPI_Aint) paramp->u.pack_vector.length,
+ (MPI_Aint) paramp->u.pack_vector.index,
+ count,
+ blksz,
+ (MPI_Aint) stride,
+ (MPI_Aint) *blocks_p));
+
+ for (i=0; i < count && blocks_left > 0; i++) {
+ int last_idx;
+ char *last_end = NULL;
+
+ if (blocks_left > (DLOOP_Offset) blksz) {
+ size = ((DLOOP_Offset) blksz) * basic_size;
+ blocks_left -= (DLOOP_Offset) blksz;
+ }
+ else {
+ /* last pass */
+ size = blocks_left * basic_size;
+ blocks_left = 0;
+ }
+
+ last_idx = paramp->u.pack_vector.index - 1;
+ if (last_idx >= 0) {
+ last_end = ((char *) paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_BUF) +
+ paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN;
+ }
+
+ MPIR_Ensure_Aint_fits_in_pointer((MPIR_VOID_PTR_CAST_TO_MPI_AINT (bufp)) + rel_off);
+ if ((last_idx == paramp->u.pack_vector.length-1) &&
+ (last_end != ((char *) bufp + rel_off)))
+ {
+ /* we have used up all our entries, and this one doesn't fit on
+ * the end of the last one.
+ */
+ *blocks_p -= (blocks_left + (size / basic_size));
+#ifdef MPID_SP_VERBOSE
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\t[vector to vec exiting (1): next ind = %d, " MPI_AINT_FMT_DEC_SPEC " blocks processed.\n",
+ paramp->u.pack_vector.index,
+ (MPI_Aint) *blocks_p));
+#endif
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
+ return 1;
+ }
+ else if (last_idx >= 0 && (last_end == ((char *) bufp + rel_off)))
+ {
+ /* add this size to the last vector rather than using up new one */
+ paramp->u.pack_vector.vectorp[last_idx].DLOOP_VECTOR_LEN += size;
+ }
+ else {
+ paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_BUF =
+ (char *) bufp + rel_off;
+ paramp->u.pack_vector.vectorp[last_idx+1].DLOOP_VECTOR_LEN = size;
+ paramp->u.pack_vector.index++;
+ }
+
+ rel_off += stride;
+
+ }
+
+#ifdef MPID_SP_VERBOSE
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\t[vector to vec exiting (2): next ind = %d, " MPI_AINT_FMT_DEC_SPEC " blocks processed.\n",
+ paramp->u.pack_vector.index,
+ (MPI_Aint) *blocks_p));
+#endif
+
+ /* if we get here then we processed ALL the blocks; don't need to update
+ * blocks_p
+ */
+ MPIR_Assert(blocks_left == 0);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV);
+ return 0;
+}
+
+/********** FUNCTIONS FOR FLATTENING A TYPE **********/
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_contig_flatten
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* MPIDU_Segment_contig_flatten
+ */
+static int MPIDU_Segment_contig_flatten(DLOOP_Offset *blocks_p,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off,
+ void *bufp,
+ void *v_paramp)
+{
+ int idx, el_size;
+ DLOOP_Offset size;
+ struct MPIDU_Segment_piece_params *paramp = v_paramp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
+
+ el_size = MPIDU_Datatype_get_basic_size(el_type);
+ size = *blocks_p * (DLOOP_Offset) el_size;
+ idx = paramp->u.flatten.index;
+
+#ifdef MPID_SP_VERBOSE
+ MPL_DBG_MSG_FMT(MPIR_DBG_DATATYPE,VERBOSE,(MPL_DBG_FDEST,"\t[contig flatten: idx = %d, loc = (" MPI_AINT_FMT_HEX_SPEC " + " MPI_AINT_FMT_HEX_SPEC ") = " MPI_AINT_FMT_HEX_SPEC ", size = " MPI_AINT_FMT_DEC_SPEC "]\n",
+ idx,
+ MPIR_VOID_PTR_CAST_TO_MPI_AINT bufp,
+ (MPI_Aint) rel_off,
+ MPIR_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off,
+ (MPI_Aint) size));
+#endif
+
+ if (idx > 0 && ((DLOOP_Offset) MPIR_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off) ==
+ ((paramp->u.flatten.offp[idx - 1]) +
+ (DLOOP_Offset) paramp->u.flatten.sizep[idx - 1]))
+ {
+ /* add this size to the last vector rather than using up another one */
+ paramp->u.flatten.sizep[idx - 1] += size;
+ }
+ else {
+ paramp->u.flatten.offp[idx] = ((int64_t) MPIR_VOID_PTR_CAST_TO_MPI_AINT bufp) + (int64_t) rel_off;
+ paramp->u.flatten.sizep[idx] = size;
+
+ paramp->u.flatten.index++;
+ /* check to see if we have used our entire vector buffer, and if so
+ * return 1 to stop processing
+ */
+ if (paramp->u.flatten.index == paramp->u.flatten.length)
+ {
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
+ return 1;
+ }
+ }
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN);
+ return 0;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Segment_vector_flatten
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* MPIDU_Segment_vector_flatten
+ *
+ * Notes:
+ * - this is only called when the starting position is at the beginning
+ * of a whole block in a vector type.
+ * - this was a virtual copy of MPIDU_Segment_pack_to_iov; now it has improvements
+ * that MPIDU_Segment_pack_to_iov needs.
+ * - we return the number of blocks that we did process in region pointed to by
+ * blocks_p.
+ */
+static int MPIDU_Segment_vector_flatten(DLOOP_Offset *blocks_p,
+ DLOOP_Count count,
+ DLOOP_Size blksz,
+ DLOOP_Offset stride,
+ DLOOP_Type el_type,
+ DLOOP_Offset rel_off, /* offset into buffer */
+ void *bufp, /* start of buffer */
+ void *v_paramp)
+{
+ int i;
+ DLOOP_Offset size, blocks_left, basic_size;
+ struct MPIDU_Segment_piece_params *paramp = v_paramp;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
+
+ basic_size = (DLOOP_Offset) MPIDU_Datatype_get_basic_size(el_type);
+ blocks_left = *blocks_p;
+
+ for (i=0; i < count && blocks_left > 0; i++) {
+ int idx = paramp->u.flatten.index;
+
+ if (blocks_left > (DLOOP_Offset) blksz) {
+ size = ((DLOOP_Offset) blksz) * basic_size;
+ blocks_left -= (DLOOP_Offset) blksz;
+ }
+ else {
+ /* last pass */
+ size = blocks_left * basic_size;
+ blocks_left = 0;
+ }
+
+ if (idx > 0 && ((DLOOP_Offset) MPIR_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off) ==
+ ((paramp->u.flatten.offp[idx - 1]) + (DLOOP_Offset) paramp->u.flatten.sizep[idx - 1]))
+ {
+ /* add this size to the last region rather than using up another one */
+ paramp->u.flatten.sizep[idx - 1] += size;
+ }
+ else if (idx < paramp->u.flatten.length) {
+ /* take up another region */
+ paramp->u.flatten.offp[idx] = (DLOOP_Offset) MPIR_VOID_PTR_CAST_TO_MPI_AINT bufp + rel_off;
+ paramp->u.flatten.sizep[idx] = size;
+ paramp->u.flatten.index++;
+ }
+ else {
+ /* we tried to add to the end of the last region and failed; add blocks back in */
+ *blocks_p = *blocks_p - blocks_left + (size / basic_size);
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
+ return 1;
+ }
+ rel_off += stride;
+
+ }
+ /* --BEGIN ERROR HANDLING-- */
+ MPIR_Assert(blocks_left == 0);
+ /* --END ERROR HANDLING-- */
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN);
+ return 0;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_blockindexed.c b/src/mpid/common/datatype/mpidu_type_blockindexed.c
new file mode 100644
index 0000000..f1f42c2
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_blockindexed.c
@@ -0,0 +1,194 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+#undef MPID_TYPE_ALLOC_DEBUG
+
+/*@
+ MPIDU_Type_blockindexed - create a block indexed datatype
+
+Input Parameters:
++ count - number of blocks in type
+. blocklength - number of elements in each block
+. displacement_array - offsets of blocks from start of type (see next
+ parameter for units)
+. dispinbytes - if nonzero, then displacements are in bytes, otherwise
+ they in terms of extent of oldtype
+- oldtype - type (using handle) of datatype on which new type is based
+
+Output Parameters:
+. newtype - handle of new block indexed datatype
+
+ Return Value:
+ MPI_SUCCESS on success, MPI error on failure.
+@*/
+
+int MPIDU_Type_blockindexed(int count,
+ int blocklength,
+ const void *displacement_array,
+ int dispinbytes,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype)
+{
+ int mpi_errno = MPI_SUCCESS, i;
+ int is_builtin, old_is_contig;
+ MPI_Aint contig_count;
+ MPI_Aint el_sz;
+ MPI_Datatype el_type;
+ MPI_Aint old_lb, old_ub, old_extent, old_true_lb, old_true_ub;
+ MPI_Aint min_lb = 0, max_ub = 0, eff_disp;
+
+ MPIDU_Datatype *new_dtp;
+
+ if (count == 0) return MPIDU_Type_zerolen(newtype);
+
+ /* allocate new datatype object and handle */
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ /* --BEGIN ERROR HANDLING-- */
+ if (!new_dtp)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_vector", __LINE__,
+ MPI_ERR_OTHER, "**nomem", 0);
+ return mpi_errno;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 0;
+ new_dtp->is_committed = 0;
+ new_dtp->attributes = NULL;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = NULL;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
+
+ if (is_builtin)
+ {
+ el_sz = (MPI_Aint) MPIDU_Datatype_get_basic_size(oldtype);
+ el_type = oldtype;
+
+ old_lb = 0;
+ old_true_lb = 0;
+ old_ub = el_sz;
+ old_true_ub = el_sz;
+ old_extent = el_sz;
+ old_is_contig = 1;
+
+ new_dtp->size = (MPI_Aint) count *
+ (MPI_Aint) blocklength * el_sz;
+ new_dtp->has_sticky_lb = 0;
+ new_dtp->has_sticky_ub = 0;
+
+ new_dtp->alignsize = el_sz; /* ??? */
+ new_dtp->n_builtin_elements = count * blocklength;
+ new_dtp->builtin_element_size = el_sz;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->max_contig_blocks = count;
+ }
+ else
+ {
+ /* user-defined base type (oldtype) */
+ MPIDU_Datatype *old_dtp;
+
+ MPIDU_Datatype_get_ptr(oldtype, old_dtp);
+ el_sz = old_dtp->builtin_element_size;
+ el_type = old_dtp->basic_type;
+
+ old_lb = old_dtp->lb;
+ old_true_lb = old_dtp->true_lb;
+ old_ub = old_dtp->ub;
+ old_true_ub = old_dtp->true_ub;
+ old_extent = old_dtp->extent;
+ old_is_contig = old_dtp->is_contig;
+
+ new_dtp->size = (MPI_Aint) count *
+ (MPI_Aint) blocklength *
+ (MPI_Aint) old_dtp->size;
+ new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
+ new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
+
+ new_dtp->alignsize = old_dtp->alignsize;
+ new_dtp->n_builtin_elements = count * blocklength * old_dtp->n_builtin_elements;
+ new_dtp->builtin_element_size = el_sz;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->max_contig_blocks = old_dtp->max_contig_blocks * count * blocklength;
+ }
+
+ /* priming for loop */
+ eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[0] :
+ (((MPI_Aint) ((int *) displacement_array)[0]) * old_extent);
+ MPIDU_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength,
+ eff_disp,
+ old_lb,
+ old_ub,
+ old_extent,
+ min_lb,
+ max_ub);
+
+ /* determine new min lb and max ub */
+ for (i=1; i < count; i++)
+ {
+ MPI_Aint tmp_lb, tmp_ub;
+
+ eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[i] :
+ (((MPI_Aint) ((int *) displacement_array)[i]) * old_extent);
+ MPIDU_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength,
+ eff_disp,
+ old_lb,
+ old_ub,
+ old_extent,
+ tmp_lb,
+ tmp_ub);
+
+ if (tmp_lb < min_lb) min_lb = tmp_lb;
+ if (tmp_ub > max_ub) max_ub = tmp_ub;
+ }
+
+ new_dtp->lb = min_lb;
+ new_dtp->ub = max_ub;
+ new_dtp->true_lb = min_lb + (old_true_lb - old_lb);
+ new_dtp->true_ub = max_ub + (old_true_ub - old_ub);
+ new_dtp->extent = max_ub - min_lb;
+
+ /* new type is contig for N types if it is all one big block,
+ * its size and extent are the same, and the old type was also
+ * contiguous.
+ */
+ new_dtp->is_contig = 0;
+ if (old_is_contig)
+ {
+ contig_count = MPIDU_Type_blockindexed_count_contig(count,
+ blocklength,
+ displacement_array,
+ dispinbytes,
+ old_extent);
+ new_dtp->max_contig_blocks = contig_count;
+ if( (contig_count == 1) &&
+ ((MPI_Aint) new_dtp->size == new_dtp->extent) )
+ {
+ new_dtp->is_contig = 1;
+ }
+ }
+
+ *newtype = new_dtp->handle;
+ return mpi_errno;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_commit.c b/src/mpid/common/datatype/mpidu_type_commit.c
new file mode 100644
index 0000000..c40f9e7
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_commit.c
@@ -0,0 +1,73 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+/*@
+ MPIDU_Type_commit
+
+Input Parameters:
+. datatype_p - pointer to MPI datatype
+
+Output Parameters:
+
+ Return Value:
+ 0 on success, -1 on failure.
+@*/
+
+int MPIDU_Type_commit(MPI_Datatype *datatype_p)
+{
+ int mpi_errno=MPI_SUCCESS;
+ MPIDU_Datatype *datatype_ptr;
+
+ MPIR_Assert(HANDLE_GET_KIND(*datatype_p) != HANDLE_KIND_BUILTIN);
+
+ MPIDU_Datatype_get_ptr(*datatype_p, datatype_ptr);
+
+ if (datatype_ptr->is_committed == 0) {
+ datatype_ptr->is_committed = 1;
+
+#ifdef MPID_NEEDS_DLOOP_ALL_BYTES
+ /* If MPID implementation needs use to reduce everything to
+ a byte stream, do that. */
+ MPIDU_Dataloop_create(*datatype_p,
+ &datatype_ptr->dataloop,
+ &datatype_ptr->dataloop_size,
+ &datatype_ptr->dataloop_depth,
+ MPIDU_DATALOOP_ALL_BYTES);
+#else
+ MPIDU_Dataloop_create(*datatype_p,
+ &datatype_ptr->dataloop,
+ &datatype_ptr->dataloop_size,
+ &datatype_ptr->dataloop_depth,
+ MPIDU_DATALOOP_HOMOGENEOUS);
+#endif
+
+ /* create heterogeneous dataloop */
+ MPIDU_Dataloop_create(*datatype_p,
+ &datatype_ptr->hetero_dloop,
+ &datatype_ptr->hetero_dloop_size,
+ &datatype_ptr->hetero_dloop_depth,
+ MPIDU_DATALOOP_HETEROGENEOUS);
+
+ MPL_DBG_MSG_D(MPIR_DBG_DATATYPE,TERSE,"# contig blocks = %d\n",
+ (int) datatype_ptr->max_contig_blocks);
+
+#if 0
+ MPIDI_Dataloop_dot_printf(datatype_ptr->dataloop, 0, 1);
+#endif
+
+#ifdef MPID_Type_commit_hook
+ MPID_Type_commit_hook(datatype_ptr);
+#endif /* MPID_Type_commit_hook */
+
+ }
+ return mpi_errno;
+}
+
diff --git a/src/mpid/common/datatype/mpidu_type_contiguous.c b/src/mpid/common/datatype/mpidu_type_contiguous.c
new file mode 100644
index 0000000..d711159
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_contiguous.c
@@ -0,0 +1,138 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+/* #define MPID_TYPE_ALLOC_DEBUG */
+
+/*@
+ MPIDU_Type_contiguous - create a contiguous datatype
+
+Input Parameters:
++ count - number of elements in the contiguous block
+- oldtype - type (using handle) of datatype on which vector is based
+
+Output Parameters:
+. newtype - handle of new contiguous datatype
+
+ Return Value:
+ MPI_SUCCESS on success, MPI error code on failure.
+@*/
+int MPIDU_Type_contiguous(int count,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int is_builtin;
+ MPI_Aint el_sz;
+ MPI_Datatype el_type;
+ MPIDU_Datatype *new_dtp;
+
+ if (count == 0) return MPIDU_Type_zerolen(newtype);
+
+ /* allocate new datatype object and handle */
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ /* --BEGIN ERROR HANDLING-- */
+ if (!new_dtp)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_contiguous",
+ __LINE__, MPI_ERR_OTHER,
+ "**nomem", 0);
+ return mpi_errno;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 0;
+ new_dtp->is_committed = 0;
+ new_dtp->attributes = NULL;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = NULL;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
+
+ if (is_builtin)
+ {
+ el_sz = MPIDU_Datatype_get_basic_size(oldtype);
+ el_type = oldtype;
+
+ new_dtp->size = count * el_sz;
+ new_dtp->has_sticky_ub = 0;
+ new_dtp->has_sticky_lb = 0;
+ new_dtp->true_lb = 0;
+ new_dtp->lb = 0;
+ new_dtp->true_ub = count * el_sz;
+ new_dtp->ub = new_dtp->true_ub;
+ new_dtp->extent = new_dtp->ub - new_dtp->lb;
+
+ new_dtp->alignsize = el_sz;
+ new_dtp->n_builtin_elements = count;
+ new_dtp->builtin_element_size = el_sz;
+ new_dtp->basic_type = el_type;
+ new_dtp->is_contig = 1;
+ new_dtp->max_contig_blocks = 1;
+
+ }
+ else
+ {
+ /* user-defined base type (oldtype) */
+ MPIDU_Datatype *old_dtp;
+
+ MPIDU_Datatype_get_ptr(oldtype, old_dtp);
+ el_sz = old_dtp->builtin_element_size;
+ el_type = old_dtp->basic_type;
+
+ new_dtp->size = count * old_dtp->size;
+ new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
+ new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
+
+ MPIDU_DATATYPE_CONTIG_LB_UB((MPI_Aint) count,
+ old_dtp->lb,
+ old_dtp->ub,
+ old_dtp->extent,
+ new_dtp->lb,
+ new_dtp->ub);
+
+ /* easiest to calc true lb/ub relative to lb/ub; doesn't matter
+ * if there are sticky lb/ubs or not when doing this.
+ */
+ new_dtp->true_lb = new_dtp->lb + (old_dtp->true_lb - old_dtp->lb);
+ new_dtp->true_ub = new_dtp->ub + (old_dtp->true_ub - old_dtp->ub);
+ new_dtp->extent = new_dtp->ub - new_dtp->lb;
+
+ new_dtp->alignsize = old_dtp->alignsize;
+ new_dtp->n_builtin_elements = count * old_dtp->n_builtin_elements;
+ new_dtp->builtin_element_size = old_dtp->builtin_element_size;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->is_contig = old_dtp->is_contig;
+ if(old_dtp->is_contig)
+ new_dtp->max_contig_blocks = 1;
+ else
+ new_dtp->max_contig_blocks = count * old_dtp->max_contig_blocks;
+ }
+
+ *newtype = new_dtp->handle;
+
+ MPL_DBG_MSG_P(MPIR_DBG_DATATYPE,VERBOSE,"contig type %x created.",
+ new_dtp->handle);
+
+ return mpi_errno;
+}
+
diff --git a/src/mpid/common/datatype/mpidu_type_create_pairtype.c b/src/mpid/common/datatype/mpidu_type_create_pairtype.c
new file mode 100644
index 0000000..57dfdc2
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_create_pairtype.c
@@ -0,0 +1,225 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+#include <limits.h>
+
+/* PAIRTYPE_SIZE_EXTENT - calculates size, extent, etc. for pairtype by
+ * defining the appropriate C type.
+ */
+#define PAIRTYPE_SIZE_EXTENT(mt1_,ut1_,mt2_,ut2_, type_size_, type_extent_, \
+ el_size_, true_ub_, alignsize_) \
+ { \
+ struct { ut1_ a; ut2_ b; } foo; \
+ type_size_ = sizeof(foo.a) + sizeof(foo.b); \
+ type_extent_ = (MPI_Aint) sizeof(foo); \
+ el_size_ = (sizeof(foo.a) == sizeof(foo.b)) ? (int) sizeof(foo.a) : -1; \
+ true_ub_ = (MPIR_VOID_PTR_CAST_TO_MPI_AINT ((char *) &foo.b - \
+ (char *) &foo.a)) + \
+ (MPI_Aint) sizeof(foo.b); \
+ alignsize_ = MPL_MAX(MPIDU_Datatype_get_basic_size(mt1_), \
+ MPIDU_Datatype_get_basic_size(mt2_)); \
+ }
+
+/*@
+ MPIDU_Type_create_pairtype - create necessary data structures for certain
+ pair types (all but MPI_2INT etc., which never have the size != extent
+ issue).
+
+ This function is different from the other MPIDU_Type_create functions in that
+ it fills in an already- allocated MPIDU_Datatype. This is important for
+ allowing configure-time determination of the MPI type values (these types
+ are stored in the "direct" space, for those familiar with how MPICH deals
+ with type allocation).
+
+Input Parameters:
++ type - name of pair type (e.g. MPI_FLOAT_INT)
+- new_dtp - pointer to previously allocated datatype structure, which is
+ filled in by this function
+
+ Return Value:
+ MPI_SUCCESS on success, MPI errno on failure.
+
+ Note:
+ Section 4.9.3 (MINLOC and MAXLOC) of the MPI-1 standard specifies that
+ these types should be built as if by the following (e.g. MPI_FLOAT_INT):
+
+ type[0] = MPI_FLOAT
+ type[1] = MPI_INT
+ disp[0] = 0
+ disp[1] = sizeof(float) <---- questionable displacement!
+ block[0] = 1
+ block[1] = 1
+ MPI_TYPE_STRUCT(2, block, disp, type, MPI_FLOAT_INT)
+
+ However, this is a relatively naive approach that does not take struct
+ padding into account when setting the displacement of the second element.
+ Thus in our implementation we have chosen to instead use the actual
+ difference in starting locations of the two types in an actual struct.
+@*/
+int MPIDU_Type_create_pairtype(MPI_Datatype type,
+ MPIDU_Datatype *new_dtp)
+{
+ int err, mpi_errno = MPI_SUCCESS;
+ int type_size, alignsize;
+ MPI_Aint type_extent, true_ub, el_size;
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 1;
+ new_dtp->is_committed = 1; /* predefined types are pre-committed */
+ new_dtp->attributes = NULL;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = NULL;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ switch(type) {
+ case MPI_FLOAT_INT:
+ PAIRTYPE_SIZE_EXTENT(MPI_FLOAT, float, MPI_INT, int,
+ type_size, type_extent, el_size, true_ub, alignsize);
+ break;
+ case MPI_DOUBLE_INT:
+ PAIRTYPE_SIZE_EXTENT(MPI_DOUBLE, double, MPI_INT, int,
+ type_size, type_extent, el_size, true_ub, alignsize);
+ break;
+ case MPI_LONG_INT:
+ PAIRTYPE_SIZE_EXTENT(MPI_LONG, long, MPI_INT, int,
+ type_size, type_extent, el_size, true_ub, alignsize);
+ break;
+ case MPI_SHORT_INT:
+ PAIRTYPE_SIZE_EXTENT(MPI_SHORT, short, MPI_INT, int,
+ type_size, type_extent, el_size, true_ub, alignsize);
+ break;
+ case MPI_LONG_DOUBLE_INT:
+ PAIRTYPE_SIZE_EXTENT(MPI_LONG_DOUBLE, long double, MPI_INT, int,
+ type_size, type_extent, el_size, true_ub, alignsize);
+ break;
+ default:
+ /* --BEGIN ERROR HANDLING-- */
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_create_pairtype",
+ __LINE__,
+ MPI_ERR_OTHER,
+ "**dtype", 0);
+ return mpi_errno;
+ /* --END ERROR HANDLING-- */
+ }
+
+ new_dtp->n_builtin_elements = 2;
+ new_dtp->builtin_element_size = el_size;
+ new_dtp->basic_type = type;
+
+ new_dtp->has_sticky_lb = 0;
+ new_dtp->true_lb = 0;
+ new_dtp->lb = 0;
+
+ new_dtp->has_sticky_ub = 0;
+ new_dtp->true_ub = true_ub;
+
+ new_dtp->size = type_size;
+ new_dtp->ub = type_extent; /* possible padding */
+ new_dtp->extent = type_extent;
+ new_dtp->alignsize = alignsize;
+
+ /* place maximum on alignment based on padding rules */
+ /* There are some really wierd rules for structure alignment;
+ these capture the ones of which we are aware. */
+ switch(type) {
+ case MPI_SHORT_INT:
+ case MPI_LONG_INT:
+#ifdef HAVE_MAX_INTEGER_ALIGNMENT
+ new_dtp->alignsize = MPL_MIN(new_dtp->alignsize,
+ HAVE_MAX_INTEGER_ALIGNMENT);
+#endif
+ break;
+ case MPI_FLOAT_INT:
+#ifdef HAVE_MAX_FP_ALIGNMENT
+ new_dtp->alignsize = MPL_MIN(new_dtp->alignsize,
+ HAVE_MAX_FP_ALIGNMENT);
+#endif
+ break;
+ case MPI_DOUBLE_INT:
+#ifdef HAVE_MAX_DOUBLE_FP_ALIGNMENT
+ new_dtp->alignsize = MPL_MIN(new_dtp->alignsize,
+ HAVE_MAX_DOUBLE_FP_ALIGNMENT);
+#elif defined(HAVE_MAX_FP_ALIGNMENT)
+ new_dtp->alignsize = MPL_MIN(new_dtp->alignsize,
+ HAVE_MAX_FP_ALIGNMENT);
+#endif
+ break;
+ case MPI_LONG_DOUBLE_INT:
+#ifdef HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT
+ new_dtp->alignsize = MPL_MIN(new_dtp->alignsize,
+ HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT);
+#elif defined(HAVE_MAX_FP_ALIGNMENT)
+ new_dtp->alignsize = MPL_MIN(new_dtp->alignsize,
+ HAVE_MAX_FP_ALIGNMENT);
+#endif
+ break;
+ }
+
+ new_dtp->is_contig = (((MPI_Aint) type_size) == type_extent) ? 1 : 0;
+ new_dtp->max_contig_blocks = (((MPI_Aint) type_size) == type_extent) ? 1 : 2;
+
+ /* fill in dataloops -- only case where we precreate dataloops
+ *
+ * this is necessary because these types aren't committed by the
+ * user, which is the other place where we create dataloops. so
+ * if the user uses one of these w/out building some more complex
+ * type and then committing it, then the dataloop will be missing.
+ */
+
+#ifdef MPID_NEEDS_DLOOP_ALL_BYTES
+ /* If MPID implementation needs use to reduce everything to
+ a byte stream, do that. */
+ err = MPIDU_Dataloop_create_pairtype(type,
+ &(new_dtp->dataloop),
+ &(new_dtp->dataloop_size),
+ &(new_dtp->dataloop_depth),
+ MPIDU_DATALOOP_ALL_BYTES);
+#else
+ err = MPIDU_Dataloop_create_pairtype(type,
+ &(new_dtp->dataloop),
+ &(new_dtp->dataloop_size),
+ &(new_dtp->dataloop_depth),
+ MPIDU_DATALOOP_HOMOGENEOUS);
+#endif
+
+ if (!err) {
+ err = MPIDU_Dataloop_create_pairtype(type,
+ &(new_dtp->hetero_dloop),
+ &(new_dtp->hetero_dloop_size),
+ &(new_dtp->hetero_dloop_depth),
+ MPIDU_DATALOOP_HETEROGENEOUS);
+ }
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (err) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ "MPIDU_Dataloop_create_pairtype",
+ __LINE__,
+ MPI_ERR_OTHER,
+ "**nomem",
+ 0);
+ return mpi_errno;
+
+ }
+ /* --END ERROR HANDLING-- */
+
+ return mpi_errno;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_create_resized.c b/src/mpid/common/datatype/mpidu_type_create_resized.c
new file mode 100644
index 0000000..dc520d8
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_create_resized.c
@@ -0,0 +1,113 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+/* #define MPID_TYPE_ALLOC_DEBUG */
+
+static int MPIDI_Type_create_resized_memory_error(void);
+
+int MPIDU_Type_create_resized(MPI_Datatype oldtype,
+ MPI_Aint lb,
+ MPI_Aint extent,
+ MPI_Datatype *newtype_p)
+{
+ MPIDU_Datatype *new_dtp;
+
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ /* --BEGIN ERROR HANDLING-- */
+ if (!new_dtp) return MPIDI_Type_create_resized_memory_error();
+ /* --END ERROR HANDLING-- */
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 0;
+ new_dtp->is_committed = 0;
+ new_dtp->attributes = 0;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = 0;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ /* if oldtype is a basic, we build a contiguous dataloop of count = 1 */
+ if (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN)
+ {
+ int oldsize = MPIDU_Datatype_get_basic_size(oldtype);
+
+ new_dtp->size = oldsize;
+ new_dtp->has_sticky_ub = 0;
+ new_dtp->has_sticky_lb = 0;
+ new_dtp->dataloop_depth = 1;
+ new_dtp->true_lb = 0;
+ new_dtp->lb = lb;
+ new_dtp->true_ub = oldsize;
+ new_dtp->ub = lb + extent;
+ new_dtp->extent = extent;
+ new_dtp->alignsize = oldsize; /* FIXME ??? */
+ new_dtp->n_builtin_elements = 1;
+ new_dtp->builtin_element_size = oldsize;
+ new_dtp->is_contig = (extent == oldsize) ? 1 : 0;
+ new_dtp->basic_type = oldtype;
+ new_dtp->max_contig_blocks = 3; /* lb, data, ub */
+ }
+ else
+ {
+ /* user-defined base type */
+ MPIDU_Datatype *old_dtp;
+
+ MPIDU_Datatype_get_ptr(oldtype, old_dtp);
+
+ new_dtp->size = old_dtp->size;
+ new_dtp->has_sticky_ub = 0;
+ new_dtp->has_sticky_lb = 0;
+ new_dtp->dataloop_depth = old_dtp->dataloop_depth;
+ new_dtp->true_lb = old_dtp->true_lb;
+ new_dtp->lb = lb;
+ new_dtp->true_ub = old_dtp->true_ub;
+ new_dtp->ub = lb + extent;
+ new_dtp->extent = extent;
+ new_dtp->alignsize = old_dtp->alignsize;
+ new_dtp->n_builtin_elements = old_dtp->n_builtin_elements;
+ new_dtp->builtin_element_size = old_dtp->builtin_element_size;
+ new_dtp->basic_type = old_dtp->basic_type;
+
+ new_dtp->is_contig =
+ (extent == old_dtp->size) ? old_dtp->is_contig : 0;
+ new_dtp->max_contig_blocks = old_dtp->max_contig_blocks;
+ }
+
+ *newtype_p = new_dtp->handle;
+
+ MPL_DBG_MSG_P(MPIR_DBG_DATATYPE,VERBOSE,"resized type %x created.",
+ new_dtp->handle);
+
+ return MPI_SUCCESS;
+}
+
+/* --BEGIN ERROR HANDLING-- */
+static int MPIDI_Type_create_resized_memory_error(void)
+{
+ int mpi_errno;
+
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_create_resized",
+ __LINE__,
+ MPI_ERR_OTHER,
+ "**nomem",
+ 0);
+ return mpi_errno;
+}
+/* --END ERROR HANDLING-- */
diff --git a/src/mpid/common/datatype/mpidu_type_debug.c b/src/mpid/common/datatype/mpidu_type_debug.c
new file mode 100644
index 0000000..14ea56a
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_debug.c
@@ -0,0 +1,670 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpiimpl.h"
+#include "mpidu_dataloop.h"
+#include <stdlib.h>
+#include <limits.h>
+
+/* MPI datatype debugging helper routines.
+ *
+ * The one you want to call is:
+ * MPIDU_Datatype_debug(MPI_Datatype type, int array_ct)
+ *
+ * The "array_ct" value tells the call how many array values to print
+ * for struct, indexed, and blockindexed types.
+ *
+ */
+
+
+void MPIDI_Datatype_dot_printf(MPI_Datatype type, int depth, int header);
+void MPIDI_Dataloop_dot_printf(MPIDU_Dataloop *loop_p, int depth, int header);
+void MPIDI_Datatype_contents_printf(MPI_Datatype type, int depth, int acount);
+static char *MPIDI_Datatype_depth_spacing(int depth) ATTRIBUTE((unused));
+
+#define NR_TYPE_CUTOFF 6 /* Number of types to display before truncating
+ output. 6 picked as arbitrary cutoff */
+
+/* note: this isn't really "error handling" per se, but leave these comments
+ * because Bill uses them for coverage analysis.
+ */
+
+/* --BEGIN ERROR HANDLING-- */
+void MPIDI_Datatype_dot_printf(MPI_Datatype type,
+ int depth,
+ int header)
+{
+ if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,
+ "MPIDI_Datatype_dot_printf: type is a basic");
+ return;
+ }
+ else {
+ MPIDU_Datatype *dt_p;
+ MPIDU_Dataloop *loop_p;
+
+ MPIDU_Datatype_get_ptr(type, dt_p);
+ loop_p = dt_p->dataloop;
+
+ MPIDI_Dataloop_dot_printf(loop_p, depth, header);
+ return;
+ }
+}
+
+void MPIDI_Dataloop_dot_printf(MPIDU_Dataloop *loop_p,
+ int depth,
+ int header)
+{
+ int i;
+
+ if (loop_p == NULL) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"<null dataloop>\n"));
+ return;
+ }
+
+ if (header) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ /* graphviz does not like the 0xNNN format */
+ "digraph %lld { {", (long long int)loop_p));
+ }
+
+ switch (loop_p->kind & DLOOP_KIND_MASK) {
+ case DLOOP_KIND_CONTIG:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ " dl%d [shape = record, label = \"contig |{ ct = %d; el_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = " MPI_AINT_FMT_DEC_SPEC " }\"];",
+ depth,
+ (int) loop_p->loop_params.c_t.count,
+ (MPI_Aint) loop_p->el_size,
+ (MPI_Aint) loop_p->el_extent));
+ break;
+ case DLOOP_KIND_VECTOR:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ " dl%d [shape = record, label = \"vector |{ ct = %d; blk = %d; str = " MPI_AINT_FMT_DEC_SPEC "; el_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = "MPI_AINT_FMT_DEC_SPEC " }\"];",
+ depth,
+ (int) loop_p->loop_params.v_t.count,
+ (int) loop_p->loop_params.v_t.blocksize,
+ (MPI_Aint) loop_p->loop_params.v_t.stride,
+ (MPI_Aint) loop_p->el_size,
+ (MPI_Aint) loop_p->el_extent));
+ break;
+ case DLOOP_KIND_INDEXED:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ " dl%d [shape = record, label = \"indexed |{ ct = %d; tot_blks = %d; regions = ",
+ depth,
+ (int) loop_p->loop_params.i_t.count,
+ (int) loop_p->loop_params.i_t.total_blocks));
+
+ for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.i_t.count; i++) {
+ if (i + 1 < loop_p->loop_params.i_t.count) {
+ /* more regions after this one */
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "\\n(" MPI_AINT_FMT_DEC_SPEC ", %d), ",
+ (MPI_Aint) loop_p->loop_params.i_t.offset_array[i],
+ (int) loop_p->loop_params.i_t.blocksize_array[i]));
+ }
+ else {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "\\n(" MPI_AINT_FMT_DEC_SPEC ", %d); ",
+ (MPI_Aint) loop_p->loop_params.i_t.offset_array[i],
+ (int) loop_p->loop_params.i_t.blocksize_array[i]));
+ }
+ }
+ if (i < loop_p->loop_params.i_t.count) {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"\\n...; ");
+ }
+
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "\\nel_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = " MPI_AINT_FMT_DEC_SPEC " }\"];\n",
+ (MPI_Aint) loop_p->el_size,
+ (MPI_Aint) loop_p->el_extent));
+ break;
+ case DLOOP_KIND_BLOCKINDEXED:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ " dl%d [shape = record, label = \"blockindexed |{ ct = %d; blk = %d; disps = ",
+ depth,
+ (int) loop_p->loop_params.bi_t.count,
+ (int) loop_p->loop_params.bi_t.blocksize));
+
+ for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.bi_t.count; i++) {
+ if (i + 1 < loop_p->loop_params.bi_t.count) {
+ /* more regions after this one */
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ MPI_AINT_FMT_DEC_SPEC ",\\n ",
+ (MPI_Aint) loop_p->loop_params.bi_t.offset_array[i]));
+ }
+ else {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ MPI_AINT_FMT_DEC_SPEC "; ",
+ (MPI_Aint) loop_p->loop_params.bi_t.offset_array[i]));
+ }
+ }
+ if (i < loop_p->loop_params.bi_t.count) {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"...; ");
+ }
+
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "\\nel_sz = " MPI_AINT_FMT_DEC_SPEC "; el_ext = " MPI_AINT_FMT_DEC_SPEC " }\"];",
+ (MPI_Aint) loop_p->el_size,
+ (MPI_Aint) loop_p->el_extent));
+ break;
+ case DLOOP_KIND_STRUCT:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ " dl%d [shape = record, label = \"struct | {ct = %d; blks = ",
+ depth,
+ (int) loop_p->loop_params.s_t.count));
+ for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.s_t.count; i++) {
+ if (i + 1 < loop_p->loop_params.s_t.count) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"%d, ",
+ (int) loop_p->loop_params.s_t.blocksize_array[i]));
+ }
+ else {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"%d; ",
+ (int) loop_p->loop_params.s_t.blocksize_array[i]));
+ }
+ }
+ if (i < loop_p->loop_params.s_t.count) {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"...; disps = ");
+ }
+ else {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"disps = ");
+ }
+
+ for (i=0; i < NR_TYPE_CUTOFF && i < loop_p->loop_params.s_t.count; i++) {
+ if (i + 1 < loop_p->loop_params.s_t.count) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,MPI_AINT_FMT_DEC_SPEC ", ",
+ (MPI_Aint) loop_p->loop_params.s_t.offset_array[i]));
+ }
+ else {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,MPI_AINT_FMT_DEC_SPEC "; ",
+ (MPI_Aint) loop_p->loop_params.s_t.offset_array[i]));
+ }
+ }
+ if (i < loop_p->loop_params.s_t.count) {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"... }\"];");
+ }
+ else {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"}\"];");
+ }
+ break;
+ default:
+ MPIR_Assert(0);
+ }
+
+ if (!(loop_p->kind & DLOOP_FINAL_MASK)) {
+ /* more loops to go; recurse */
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ " dl%d -> dl%d;\n", depth, depth + 1));
+ switch (loop_p->kind & DLOOP_KIND_MASK) {
+ case DLOOP_KIND_CONTIG:
+ MPIDI_Dataloop_dot_printf(loop_p->loop_params.c_t.dataloop, depth + 1, 0);
+ break;
+ case DLOOP_KIND_VECTOR:
+ MPIDI_Dataloop_dot_printf(loop_p->loop_params.v_t.dataloop, depth + 1, 0);
+ break;
+ case DLOOP_KIND_INDEXED:
+ MPIDI_Dataloop_dot_printf(loop_p->loop_params.i_t.dataloop, depth + 1, 0);
+ break;
+ case DLOOP_KIND_BLOCKINDEXED:
+ MPIDI_Dataloop_dot_printf(loop_p->loop_params.bi_t.dataloop, depth + 1, 0);
+ break;
+ case DLOOP_KIND_STRUCT:
+ for (i=0; i < loop_p->loop_params.s_t.count; i++) {
+ MPIDI_Dataloop_dot_printf(loop_p->loop_params.s_t.dataloop_array[i],
+ depth + 1, 0);
+ }
+ break;
+ default:
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE," < unsupported type >");
+ }
+ }
+
+
+ if (header) {
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE," }\n}");
+ }
+ return;
+}
+
+void MPIDI_Datatype_printf(MPI_Datatype type,
+ int depth,
+ MPI_Aint displacement,
+ int blocklength,
+ int header)
+{
+#ifdef MPL_USE_DBG_LOGGING
+ char *string;
+ MPI_Aint size;
+ MPI_Aint extent, true_lb, true_ub, lb, ub, sticky_lb, sticky_ub;
+
+ if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
+ string = MPIDU_Datatype_builtin_to_string(type);
+ if (type == MPI_LB) sticky_lb = 1;
+ else sticky_lb = 0;
+ if (type == MPI_UB) sticky_ub = 1;
+ else sticky_ub = 0;
+ }
+ else {
+ MPIDU_Datatype *type_ptr;
+
+ MPIDU_Datatype_get_ptr(type, type_ptr);
+ string = MPIDU_Datatype_combiner_to_string(type_ptr->contents->combiner);
+ sticky_lb = type_ptr->has_sticky_lb;
+ sticky_ub = type_ptr->has_sticky_ub;
+ }
+
+ MPIDU_Datatype_get_size_macro(type, size);
+ MPIR_Type_get_true_extent_impl(type, &true_lb, &extent);
+ true_ub = extent + true_lb;
+ MPIR_Type_get_extent_impl(type, &lb, &extent);
+ ub = extent + lb;
+
+ if (header == 1) {
+ /* 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 */
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"------------------------------------------------------------------------------------------------------------------------------------------\n");
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"depth type size extent true_lb true_ub lb(s) ub(s) disp blklen\n");
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"------------------------------------------------------------------------------------------------------------------------------------------\n");
+ }
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"%5d %21s %11d " MPI_AINT_FMT_DEC_SPEC " " MPI_AINT_FMT_DEC_SPEC " " MPI_AINT_FMT_DEC_SPEC " " MPI_AINT_FMT_DEC_SPEC "(" MPI_AINT_FMT_DEC_SPEC ") " MPI_AINT_FMT_DEC_SPEC "(" MPI_AINT_FMT_DEC_SPEC ") " MPI_AINT_FMT_DEC_SPEC " %11d",
+ depth,
+ string,
+ (int) size,
+ (MPI_Aint) extent,
+ (MPI_Aint) true_lb,
+ (MPI_Aint) true_ub,
+ (MPI_Aint) lb,
+ (MPI_Aint) sticky_lb,
+ (MPI_Aint) ub,
+ (MPI_Aint) sticky_ub,
+ (MPI_Aint) displacement,
+ (int) blocklength));
+#endif
+ return;
+}
+/* --END ERROR HANDLING-- */
+
+/* longest string is 21 characters */
+char *MPIDU_Datatype_builtin_to_string(MPI_Datatype type)
+{
+ static char t_char[] = "MPI_CHAR";
+ static char t_uchar[] = "MPI_UNSIGNED_CHAR";
+ static char t_byte[] = "MPI_BYTE";
+ static char t_wchar_t[] = "MPI_WCHAR";
+ static char t_short[] = "MPI_SHORT";
+ static char t_ushort[] = "MPI_UNSIGNED_SHORT";
+ static char t_int[] = "MPI_INT";
+ static char t_uint[] = "MPI_UNSIGNED";
+ static char t_long[] = "MPI_LONG";
+ static char t_ulong[] = "MPI_UNSIGNED_LONG";
+ static char t_float[] = "MPI_FLOAT";
+ static char t_double[] = "MPI_DOUBLE";
+ static char t_longdouble[] = "MPI_LONG_DOUBLE";
+ static char t_longlongint[] = "MPI_LONG_LONG_INT";
+ static char t_longlong[] = "MPI_LONG_LONG";
+ static char t_ulonglong[] = "MPI_UNSIGNED_LONG_LONG";
+ static char t_schar[] = "MPI_SIGNED_CHAR";
+
+ static char t_packed[] = "MPI_PACKED";
+ static char t_lb[] = "MPI_LB";
+ static char t_ub[] = "MPI_UB";
+
+ static char t_floatint[] = "MPI_FLOAT_INT";
+ static char t_doubleint[] = "MPI_DOUBLE_INT";
+ static char t_longint[] = "MPI_LONG_INT";
+ static char t_shortint[] = "MPI_SHORT_INT";
+ static char t_2int[] = "MPI_2INT";
+ static char t_longdoubleint[] = "MPI_LONG_DOUBLE_INT";
+
+ static char t_complex[] = "MPI_COMPLEX";
+ static char t_doublecomplex[] = "MPI_DOUBLE_COMPLEX";
+ static char t_logical[] = "MPI_LOGICAL";
+ static char t_real[] = "MPI_REAL";
+ static char t_doubleprecision[] = "MPI_DOUBLE_PRECISION";
+ static char t_integer[] = "MPI_INTEGER";
+ static char t_2integer[] = "MPI_2INTEGER";
+#ifdef MPICH_DEFINE_2COMPLEX
+ static char t_2complex[] = "MPI_2COMPLEX";
+ static char t_2doublecomplex[] = "MPI_2DOUBLE_COMPLEX";
+#endif
+ static char t_2real[] = "MPI_2REAL";
+ static char t_2doubleprecision[] = "MPI_2DOUBLE_PRECISION";
+ static char t_character[] = "MPI_CHARACTER";
+
+ if (type == MPI_CHAR) return t_char;
+ if (type == MPI_UNSIGNED_CHAR) return t_uchar;
+ if (type == MPI_SIGNED_CHAR) return t_schar;
+ if (type == MPI_BYTE) return t_byte;
+ if (type == MPI_WCHAR) return t_wchar_t;
+ if (type == MPI_SHORT) return t_short;
+ if (type == MPI_UNSIGNED_SHORT) return t_ushort;
+ if (type == MPI_INT) return t_int;
+ if (type == MPI_UNSIGNED) return t_uint;
+ if (type == MPI_LONG) return t_long;
+ if (type == MPI_UNSIGNED_LONG) return t_ulong;
+ if (type == MPI_FLOAT) return t_float;
+ if (type == MPI_DOUBLE) return t_double;
+ if (type == MPI_LONG_DOUBLE) return t_longdouble;
+ if (type == MPI_LONG_LONG_INT) return t_longlongint;
+ if (type == MPI_LONG_LONG) return t_longlong;
+ if (type == MPI_UNSIGNED_LONG_LONG) return t_ulonglong;
+
+ if (type == MPI_PACKED) return t_packed;
+ if (type == MPI_LB) return t_lb;
+ if (type == MPI_UB) return t_ub;
+
+ if (type == MPI_FLOAT_INT) return t_floatint;
+ if (type == MPI_DOUBLE_INT) return t_doubleint;
+ if (type == MPI_LONG_INT) return t_longint;
+ if (type == MPI_SHORT_INT) return t_shortint;
+ if (type == MPI_2INT) return t_2int;
+ if (type == MPI_LONG_DOUBLE_INT) return t_longdoubleint;
+
+ if (type == MPI_COMPLEX) return t_complex;
+ if (type == MPI_DOUBLE_COMPLEX) return t_doublecomplex;
+ if (type == MPI_LOGICAL) return t_logical;
+ if (type == MPI_REAL) return t_real;
+ if (type == MPI_DOUBLE_PRECISION) return t_doubleprecision;
+ if (type == MPI_INTEGER) return t_integer;
+ if (type == MPI_2INTEGER) return t_2integer;
+#ifdef MPICH_DEFINE_2COMPLEX
+ if (type == MPI_2COMPLEX) return t_2complex;
+ if (type == MPI_2DOUBLE_COMPLEX) return t_2doublecomplex;
+#endif
+ if (type == MPI_2REAL) return t_2real;
+ if (type == MPI_2DOUBLE_PRECISION) return t_2doubleprecision;
+ if (type == MPI_CHARACTER) return t_character;
+
+ return NULL;
+}
+
+/* MPIDU_Datatype_combiner_to_string(combiner)
+ *
+ * Converts a numeric combiner into a pointer to a string used for printing.
+ *
+ * longest string is 16 characters.
+ */
+char *MPIDU_Datatype_combiner_to_string(int combiner)
+{
+ static char c_named[] = "named";
+ static char c_contig[] = "contig";
+ static char c_vector[] = "vector";
+ static char c_hvector[] = "hvector";
+ static char c_indexed[] = "indexed";
+ static char c_hindexed[] = "hindexed";
+ static char c_struct[] = "struct";
+ static char c_dup[] = "dup";
+ static char c_hvector_integer[] = "hvector_integer";
+ static char c_hindexed_integer[] = "hindexed_integer";
+ static char c_indexed_block[] = "indexed_block";
+ static char c_hindexed_block[] = "hindexed_block";
+ static char c_struct_integer[] = "struct_integer";
+ static char c_subarray[] = "subarray";
+ static char c_darray[] = "darray";
+ static char c_f90_real[] = "f90_real";
+ static char c_f90_complex[] = "f90_complex";
+ static char c_f90_integer[] = "f90_integer";
+ static char c_resized[] = "resized";
+
+ if (combiner == MPI_COMBINER_NAMED) return c_named;
+ if (combiner == MPI_COMBINER_CONTIGUOUS) return c_contig;
+ if (combiner == MPI_COMBINER_VECTOR) return c_vector;
+ if (combiner == MPI_COMBINER_HVECTOR) return c_hvector;
+ if (combiner == MPI_COMBINER_INDEXED) return c_indexed;
+ if (combiner == MPI_COMBINER_HINDEXED) return c_hindexed;
+ if (combiner == MPI_COMBINER_STRUCT) return c_struct;
+ if (combiner == MPI_COMBINER_DUP) return c_dup;
+ if (combiner == MPI_COMBINER_HVECTOR_INTEGER) return c_hvector_integer;
+ if (combiner == MPI_COMBINER_HINDEXED_INTEGER) return c_hindexed_integer;
+ if (combiner == MPI_COMBINER_INDEXED_BLOCK) return c_indexed_block;
+ if (combiner == MPI_COMBINER_HINDEXED_BLOCK) return c_hindexed_block;
+ if (combiner == MPI_COMBINER_STRUCT_INTEGER) return c_struct_integer;
+ if (combiner == MPI_COMBINER_SUBARRAY) return c_subarray;
+ if (combiner == MPI_COMBINER_DARRAY) return c_darray;
+ if (combiner == MPI_COMBINER_F90_REAL) return c_f90_real;
+ if (combiner == MPI_COMBINER_F90_COMPLEX) return c_f90_complex;
+ if (combiner == MPI_COMBINER_F90_INTEGER) return c_f90_integer;
+ if (combiner == MPI_COMBINER_RESIZED) return c_resized;
+
+ return NULL;
+}
+
+/* --BEGIN DEBUG-- */
+/*
+ * You must configure MPICH2 with the logging option enabled (--enable-g=log)
+ * for these routines to print - in which case, they use the same options
+ * as the logging code, including print to file and control by class (DATATYPE)
+ */
+void MPIDU_Datatype_debug(MPI_Datatype type,
+ int array_ct)
+{
+ int is_builtin;
+ MPIDU_Datatype *dtp ATTRIBUTE((unused));
+
+ is_builtin = (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN);
+
+ /* can get a NULL type a number of different ways, including not having
+ * fortran support included.
+ */
+ if (type == MPI_DATATYPE_NULL) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,
+ (MPL_DBG_FDEST,
+ "# MPIU_Datatype_debug: MPI_Datatype = MPI_DATATYPE_NULL"));
+ return;
+ }
+
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# MPIU_Datatype_debug: MPI_Datatype = 0x%0x (%s)", type,
+ (is_builtin) ? MPIDU_Datatype_builtin_to_string(type) :
+ "derived"));
+
+ if (is_builtin) return;
+
+ MPIDU_Datatype_get_ptr(type, dtp);
+ MPIR_Assert(dtp != NULL);
+
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# Size = " MPI_AINT_FMT_DEC_SPEC ", Extent = " MPI_AINT_FMT_DEC_SPEC ", LB = " MPI_AINT_FMT_DEC_SPEC "%s, UB = " MPI_AINT_FMT_DEC_SPEC "%s, Extent = " MPI_AINT_FMT_DEC_SPEC ", Element Size = " MPI_AINT_FMT_DEC_SPEC " (%s), %s",
+ (MPI_Aint) dtp->size,
+ (MPI_Aint) dtp->extent,
+ (MPI_Aint) dtp->lb,
+ (dtp->has_sticky_lb) ? "(sticky)" : "",
+ (MPI_Aint) dtp->ub,
+ (dtp->has_sticky_ub) ? "(sticky)" : "",
+ (MPI_Aint) dtp->extent,
+ (MPI_Aint) dtp->builtin_element_size,
+ dtp->builtin_element_size == -1 ? "multiple types" :
+ MPIDU_Datatype_builtin_to_string(dtp->basic_type),
+ dtp->is_contig ? "is N contig" : "is not N contig"));
+
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"# Contents:");
+ MPIDI_Datatype_contents_printf(type, 0, array_ct);
+
+ MPL_DBG_OUT(MPIR_DBG_DATATYPE,"# Dataloop:");
+ MPIDI_Datatype_dot_printf(type, 0, 1);
+}
+
+static char *MPIDI_Datatype_depth_spacing(int depth)
+{
+ static char d0[] = "";
+ static char d1[] = " ";
+ static char d2[] = " ";
+ static char d3[] = " ";
+ static char d4[] = " ";
+ static char d5[] = " ";
+
+ switch (depth) {
+ case 0: return d0;
+ case 1: return d1;
+ case 2: return d2;
+ case 3: return d3;
+ case 4: return d4;
+ default: return d5;
+ }
+}
+
+#define __mpidi_datatype_free_and_return { \
+ if (cp->nr_ints > 0) MPL_free(ints); \
+ if (cp->nr_aints > 0) MPL_free(aints); \
+ if (cp->nr_types > 0) MPL_free(types); \
+ return; }
+
+void MPIDI_Datatype_contents_printf(MPI_Datatype type,
+ int depth,
+ int acount)
+{
+ int i;
+ MPIDU_Datatype *dtp;
+ MPIDU_Datatype_contents *cp;
+
+ MPI_Aint *aints = NULL;
+ MPI_Datatype *types = NULL;
+ int *ints = NULL;
+
+ if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# %stype: %s\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ MPIDU_Datatype_builtin_to_string(type)));
+ return;
+ }
+
+ MPIDU_Datatype_get_ptr(type, dtp);
+ cp = dtp->contents;
+
+ if (cp == NULL) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# <NULL>\n"));
+ return;
+ }
+
+ if (cp->nr_ints > 0)
+ {
+ ints = (int *) MPL_malloc(cp->nr_ints * sizeof(int));
+ MPIDI_Datatype_get_contents_ints(cp, ints);
+ }
+
+ if (cp->nr_aints > 0) {
+ aints = (MPI_Aint *) MPL_malloc(cp->nr_aints * sizeof(MPI_Aint));
+ MPIDI_Datatype_get_contents_aints(cp, aints);
+ }
+
+ if (cp->nr_types > 0) {
+ types = (MPI_Datatype *) MPL_malloc(cp->nr_types * sizeof(MPI_Datatype));
+ MPIDI_Datatype_get_contents_types(cp, types);
+ }
+
+
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# %scombiner: %s",
+ MPIDI_Datatype_depth_spacing(depth),
+ MPIDU_Datatype_combiner_to_string(cp->combiner)));
+
+ switch (cp->combiner) {
+ case MPI_COMBINER_NAMED:
+ case MPI_COMBINER_DUP:
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_RESIZED:
+ /* not done */
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_CONTIGUOUS:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# %scontig ct = %d\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ *ints));
+ MPIDI_Datatype_contents_printf(*types,
+ depth + 1,
+ acount);
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_VECTOR:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# %svector ct = %d, blk = %d, str = %d\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ ints[0],
+ ints[1],
+ ints[2]));
+ MPIDI_Datatype_contents_printf(*types,
+ depth + 1,
+ acount);
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_HVECTOR:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# %shvector ct = %d, blk = %d, str = " MPI_AINT_FMT_DEC_SPEC "\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ ints[0],
+ ints[1],
+ (MPI_Aint) aints[0]));
+ MPIDI_Datatype_contents_printf(*types,
+ depth + 1,
+ acount);
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_INDEXED:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# %sindexed ct = %d:",
+ MPIDI_Datatype_depth_spacing(depth),
+ ints[0]));
+ for (i=0; i < acount && i < ints[0]; i++) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# %s indexed [%d]: blk = %d, disp = %d\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ i,
+ ints[i+1],
+ ints[i+(cp->nr_ints/2)+1]));
+ MPIDI_Datatype_contents_printf(*types,
+ depth + 1,
+ acount);
+ }
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_HINDEXED:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# %shindexed ct = %d:",
+ MPIDI_Datatype_depth_spacing(depth),
+ ints[0]));
+ for (i=0; i < acount && i < ints[0]; i++) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# %s hindexed [%d]: blk = %d, disp = " MPI_AINT_FMT_DEC_SPEC "\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ i,
+ (int) ints[i+1],
+ (MPI_Aint) aints[i]));
+ MPIDI_Datatype_contents_printf(*types,
+ depth + 1,
+ acount);
+ }
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_STRUCT:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# %sstruct ct = %d:",
+ MPIDI_Datatype_depth_spacing(depth),
+ (int) ints[0]));
+ for (i=0; i < acount && i < ints[0]; i++) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# %s struct[%d]: blk = %d, disp = " MPI_AINT_FMT_DEC_SPEC "\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ i,
+ (int) ints[i+1],
+ (MPI_Aint) aints[i]));
+ MPIDI_Datatype_contents_printf(types[i],
+ depth + 1,
+ acount);
+ }
+ __mpidi_datatype_free_and_return;
+ case MPI_COMBINER_SUBARRAY:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE, (MPL_DBG_FDEST,"# %ssubarray ct = %d:",
+ MPIDI_Datatype_depth_spacing(depth),
+ (int) ints[0]));
+ for (i=0; i< acount && i < ints[0]; i++) {
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,
+ "# %s sizes[%d] = %d subsizes[%d] = %d starts[%d] = %d\n",
+ MPIDI_Datatype_depth_spacing(depth),
+ i, (int)ints[i+1],
+ i, (int)ints[i+ ints[0]+1],
+ i, (int)ints[2*ints[0]+1]));
+ }
+ MPIDI_Datatype_contents_printf(*types,
+ depth + 1,
+ acount);
+ __mpidi_datatype_free_and_return;
+
+ default:
+ MPL_DBG_OUT_FMT(MPIR_DBG_DATATYPE,(MPL_DBG_FDEST,"# %sunhandled combiner",
+ MPIDI_Datatype_depth_spacing(depth)));
+ __mpidi_datatype_free_and_return;
+ }
+}
+/* --END DEBUG-- */
diff --git a/src/mpid/common/datatype/mpidu_type_dup.c b/src/mpid/common/datatype/mpidu_type_dup.c
new file mode 100644
index 0000000..baf7a5a
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_dup.c
@@ -0,0 +1,111 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+#undef FCNAME
+#define FCNAME "MPIDU_Type_dup"
+
+/* #define MPID_TYPE_ALLOC_DEBUG */
+
+/*@
+ MPIDU_Type_dup - create a copy of a datatype
+
+Input Parameters:
+- oldtype - handle of original datatype
+
+Output Parameters:
+. newtype - handle of newly created copy of datatype
+
+ Return Value:
+ 0 on success, MPI error code on failure.
+@*/
+int MPIDU_Type_dup(MPI_Datatype oldtype,
+ MPI_Datatype *newtype)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIDU_Datatype *new_dtp = 0, *old_dtp;
+
+ if (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN) {
+ /* create a new type and commit it. */
+ mpi_errno = MPIDU_Type_contiguous(1, oldtype, newtype);
+ if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
+ }
+ else {
+ /* allocate new datatype object and handle */
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ if (!new_dtp) {
+ /* --BEGIN ERROR HANDLING-- */
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_dup", __LINE__, MPI_ERR_OTHER,
+ "**nomem", 0);
+ goto fn_fail;
+ /* --END ERROR HANDLING-- */
+ }
+
+ MPIDU_Datatype_get_ptr(oldtype, old_dtp);
+
+ /* fill in datatype */
+ MPIR_Object_set_ref(new_dtp, 1);
+ /* new_dtp->handle is filled in by MPIR_Handle_obj_alloc() */
+ new_dtp->is_contig = old_dtp->is_contig;
+ new_dtp->size = old_dtp->size;
+ new_dtp->extent = old_dtp->extent;
+ new_dtp->ub = old_dtp->ub;
+ new_dtp->lb = old_dtp->lb;
+ new_dtp->true_ub = old_dtp->true_ub;
+ new_dtp->true_lb = old_dtp->true_lb;
+ new_dtp->alignsize = old_dtp->alignsize;
+ new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
+ new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
+ new_dtp->is_permanent = old_dtp->is_permanent;
+ new_dtp->is_committed = old_dtp->is_committed;
+
+ new_dtp->attributes = NULL; /* Attributes are copied in the
+ top-level MPI_Type_dup routine */
+ new_dtp->cache_id = -1; /* ??? */
+ new_dtp->name[0] = 0; /* The Object name is not copied on
+ a dup */
+ new_dtp->n_builtin_elements = old_dtp->n_builtin_elements;
+ new_dtp->builtin_element_size = old_dtp->builtin_element_size;
+ new_dtp->basic_type = old_dtp->basic_type;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = old_dtp->dataloop_size;
+ new_dtp->dataloop_depth = old_dtp->dataloop_depth;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = old_dtp->hetero_dloop_size;
+ new_dtp->hetero_dloop_depth = old_dtp->hetero_dloop_depth;
+ *newtype = new_dtp->handle;
+
+ if (old_dtp->is_committed) {
+ MPIR_Assert(old_dtp->dataloop != NULL);
+ MPIDU_Dataloop_dup(old_dtp->dataloop,
+ old_dtp->dataloop_size,
+ &new_dtp->dataloop);
+ if (old_dtp->hetero_dloop != NULL) {
+ /* at this time MPI_COMPLEX doesn't have this loop...
+ * -- RBR, 02/01/2007
+ */
+ MPIDU_Dataloop_dup(old_dtp->hetero_dloop,
+ old_dtp->hetero_dloop_size,
+ &new_dtp->hetero_dloop);
+ }
+
+#ifdef MPID_Type_commit_hook
+ MPID_Type_commit_hook(new_dtp);
+#endif /* MPID_Type_commit_hook */
+ }
+ }
+
+ MPL_DBG_MSG_D(MPIR_DBG_DATATYPE,VERBOSE, "dup type %x created.", *newtype);
+
+ fn_fail:
+ return mpi_errno;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_get_contents.c b/src/mpid/common/datatype/mpidu_type_get_contents.c
new file mode 100644
index 0000000..d16d7ea
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_get_contents.c
@@ -0,0 +1,91 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpi.h>
+#include <mpiimpl.h>
+#include <mpidu_datatype.h>
+#include <mpidu_dataloop.h>
+
+/*@
+ MPIDU_Type_get_contents - get content information from datatype
+
+Input Parameters:
++ datatype - MPI datatype
+. max_integers - size of array_of_integers
+. max_addresses - size of array_of_addresses
+- max_datatypes - size of array_of_datatypes
+
+Output Parameters:
++ array_of_integers - integers used in creating type
+. array_of_addresses - MPI_Aints used in creating type
+- array_of_datatypes - MPI_Datatypes used in creating type
+
+@*/
+int MPIDU_Type_get_contents(MPI_Datatype datatype,
+ int max_integers,
+ int max_addresses,
+ int max_datatypes,
+ int array_of_integers[],
+ MPI_Aint array_of_addresses[],
+ MPI_Datatype array_of_datatypes[])
+{
+ int i, mpi_errno;
+ MPIDU_Datatype *dtp;
+ MPIDU_Datatype_contents *cp;
+
+ /* --BEGIN ERROR HANDLING-- */
+ /* these are checked at the MPI layer, so I feel that asserts
+ * are appropriate.
+ */
+ MPIR_Assert(HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN);
+ MPIR_Assert(datatype != MPI_FLOAT_INT &&
+ datatype != MPI_DOUBLE_INT &&
+ datatype != MPI_LONG_INT &&
+ datatype != MPI_SHORT_INT &&
+ datatype != MPI_LONG_DOUBLE_INT);
+ /* --END ERROR HANDLING-- */
+
+ MPIDU_Datatype_get_ptr(datatype, dtp);
+ cp = dtp->contents;
+ MPIR_Assert(cp != NULL);
+
+ /* --BEGIN ERROR HANDLING-- */
+ if (max_integers < cp->nr_ints ||
+ max_addresses < cp->nr_aints ||
+ max_datatypes < cp->nr_types)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_get_contents", __LINE__,
+ MPI_ERR_OTHER, "**dtype", 0);
+ return mpi_errno;
+ }
+ /* --END ERROR HANDLING-- */
+
+ if (cp->nr_ints > 0)
+ {
+ MPIDI_Datatype_get_contents_ints(cp, array_of_integers);
+ }
+
+ if (cp->nr_aints > 0) {
+ MPIDI_Datatype_get_contents_aints(cp, array_of_addresses);
+ }
+
+ if (cp->nr_types > 0) {
+ MPIDI_Datatype_get_contents_types(cp, array_of_datatypes);
+ }
+
+ for (i=0; i < cp->nr_types; i++)
+ {
+ if (HANDLE_GET_KIND(array_of_datatypes[i]) != HANDLE_KIND_BUILTIN)
+ {
+ MPIDU_Datatype_get_ptr(array_of_datatypes[i], dtp);
+ MPIDU_Datatype_add_ref(dtp);
+ }
+ }
+
+ return MPI_SUCCESS;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_get_envelope.c b/src/mpid/common/datatype/mpidu_type_get_envelope.c
new file mode 100644
index 0000000..15adf6d
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_get_envelope.c
@@ -0,0 +1,56 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpi.h>
+#include <mpiimpl.h>
+#include <mpidu_datatype.h>
+#include <mpidu_dataloop.h>
+
+/*@
+ MPIDU_Type_get_envelope - get envelope information from datatype
+
+Input Parameters:
+. datatype - MPI datatype
+
+Output Parameters:
++ num_integers - number of integers used to create datatype
+. num_addresses - number of MPI_Aints used to create datatype
+. num_datatypes - number of MPI_Datatypes used to create datatype
+- combiner - function type used to create datatype
+@*/
+
+int MPIDU_Type_get_envelope(MPI_Datatype datatype,
+ int *num_integers,
+ int *num_addresses,
+ int *num_datatypes,
+ int *combiner)
+{
+ if (HANDLE_GET_KIND(datatype) == HANDLE_KIND_BUILTIN ||
+ datatype == MPI_FLOAT_INT ||
+ datatype == MPI_DOUBLE_INT ||
+ datatype == MPI_LONG_INT ||
+ datatype == MPI_SHORT_INT ||
+ datatype == MPI_LONG_DOUBLE_INT)
+ {
+ *combiner = MPI_COMBINER_NAMED;
+ *num_integers = 0;
+ *num_addresses = 0;
+ *num_datatypes = 0;
+ }
+ else {
+ MPIDU_Datatype *dtp;
+
+ MPIDU_Datatype_get_ptr(datatype, dtp);
+
+ *combiner = dtp->contents->combiner;
+ *num_integers = dtp->contents->nr_ints;
+ *num_addresses = dtp->contents->nr_aints;
+ *num_datatypes = dtp->contents->nr_types;
+ }
+
+ return MPI_SUCCESS;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_indexed.c b/src/mpid/common/datatype/mpidu_type_indexed.c
new file mode 100644
index 0000000..3a6649b
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_indexed.c
@@ -0,0 +1,238 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+#undef MPID_TYPE_ALLOC_DEBUG
+
+/*@
+ MPIDU_Type_indexed - create an indexed datatype
+
+Input Parameters:
++ count - number of blocks in type
+. blocklength_array - number of elements in each block
+. displacement_array - offsets of blocks from start of type (see next
+ parameter for units)
+. dispinbytes - if nonzero, then displacements are in bytes (the
+ displacement_array is an array of ints), otherwise they in terms of
+ extent of oldtype (the displacement_array is an array of MPI_Aints)
+- oldtype - type (using handle) of datatype on which new type is based
+
+Output Parameters:
+. newtype - handle of new indexed datatype
+
+ Return Value:
+ 0 on success, -1 on failure.
+@*/
+
+int MPIDU_Type_indexed(int count,
+ const int *blocklength_array,
+ const void *displacement_array,
+ int dispinbytes,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int is_builtin, old_is_contig;
+ int i;
+ MPI_Aint contig_count;
+ MPI_Aint el_sz, el_ct, old_ct, old_sz;
+ MPI_Aint old_lb, old_ub, old_extent, old_true_lb, old_true_ub;
+ MPI_Aint min_lb = 0, max_ub = 0, eff_disp;
+ MPI_Datatype el_type;
+
+ MPIDU_Datatype *new_dtp;
+
+ if (count == 0) return MPIDU_Type_zerolen(newtype);
+
+ /* sanity check that blocklens are all non-negative */
+ for (i = 0; i < count; ++i) {
+ DLOOP_Assert(blocklength_array[i] >= 0);
+ }
+
+ /* allocate new datatype object and handle */
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ /* --BEGIN ERROR HANDLING-- */
+ if (!new_dtp)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
+ MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_indexed",
+ __LINE__,
+ MPI_ERR_OTHER,
+ "**nomem",
+ 0);
+ return mpi_errno;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 0;
+ new_dtp->is_committed = 0;
+ new_dtp->attributes = NULL;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = NULL;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
+
+ if (is_builtin)
+ {
+ /* builtins are handled differently than user-defined types because
+ * they have no associated dataloop or datatype structure.
+ */
+ el_sz = MPIDU_Datatype_get_basic_size(oldtype);
+ old_sz = el_sz;
+ el_ct = 1;
+ el_type = oldtype;
+
+ old_lb = 0;
+ old_true_lb = 0;
+ old_ub = (MPI_Aint) el_sz;
+ old_true_ub = (MPI_Aint) el_sz;
+ old_extent = (MPI_Aint) el_sz;
+ old_is_contig = 1;
+
+ new_dtp->has_sticky_ub = 0;
+ new_dtp->has_sticky_lb = 0;
+
+ MPIR_Assign_trunc(new_dtp->alignsize, el_sz, MPI_Aint);
+ new_dtp->builtin_element_size = el_sz;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->max_contig_blocks = count;
+ }
+ else
+ {
+ /* user-defined base type (oldtype) */
+ MPIDU_Datatype *old_dtp;
+
+ MPIDU_Datatype_get_ptr(oldtype, old_dtp);
+
+ /* Ensure that "builtin_element_size" fits into an int datatype. */
+ MPIR_Ensure_Aint_fits_in_int(old_dtp->builtin_element_size);
+
+ el_sz = old_dtp->builtin_element_size;
+ old_sz = old_dtp->size;
+ el_ct = old_dtp->n_builtin_elements;
+ el_type = old_dtp->basic_type;
+
+ old_lb = old_dtp->lb;
+ old_true_lb = old_dtp->true_lb;
+ old_ub = old_dtp->ub;
+ old_true_ub = old_dtp->true_ub;
+ old_extent = old_dtp->extent;
+ old_is_contig = old_dtp->is_contig;
+
+ new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
+ new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
+ new_dtp->builtin_element_size = (MPI_Aint) el_sz;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->max_contig_blocks = 0;
+ for(i=0; i<count; i++)
+ new_dtp->max_contig_blocks
+ += old_dtp->max_contig_blocks
+ * ((MPI_Aint ) blocklength_array[i]);
+ }
+
+ /* find the first nonzero blocklength element */
+ i = 0;
+ while (i < count && blocklength_array[i] == 0) i++;
+
+ if (i == count) {
+ MPIR_Handle_obj_free(&MPIDU_Datatype_mem, new_dtp);
+ return MPIDU_Type_zerolen(newtype);
+ }
+
+ /* priming for loop */
+ old_ct = blocklength_array[i];
+ eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[i] :
+ (((MPI_Aint) ((int *) displacement_array)[i]) * old_extent);
+
+ MPIDU_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength_array[i],
+ eff_disp,
+ old_lb,
+ old_ub,
+ old_extent,
+ min_lb,
+ max_ub);
+
+ /* determine min lb, max ub, and count of old types in remaining
+ * nonzero size blocks
+ */
+ for (i++; i < count; i++)
+ {
+ MPI_Aint tmp_lb, tmp_ub;
+
+ if (blocklength_array[i] > 0) {
+ old_ct += blocklength_array[i]; /* add more oldtypes */
+
+ eff_disp = (dispinbytes) ? ((MPI_Aint *) displacement_array)[i] :
+ (((MPI_Aint) ((int *) displacement_array)[i]) * old_extent);
+
+ /* calculate ub and lb for this block */
+ MPIDU_DATATYPE_BLOCK_LB_UB((MPI_Aint)(blocklength_array[i]),
+ eff_disp,
+ old_lb,
+ old_ub,
+ old_extent,
+ tmp_lb,
+ tmp_ub);
+
+ if (tmp_lb < min_lb) min_lb = tmp_lb;
+ if (tmp_ub > max_ub) max_ub = tmp_ub;
+ }
+ }
+
+ new_dtp->size = old_ct * old_sz;
+
+ new_dtp->lb = min_lb;
+ new_dtp->ub = max_ub;
+ new_dtp->true_lb = min_lb + (old_true_lb - old_lb);
+ new_dtp->true_ub = max_ub + (old_true_ub - old_ub);
+ new_dtp->extent = max_ub - min_lb;
+
+ new_dtp->n_builtin_elements = old_ct * el_ct;
+
+ /* new type is only contig for N types if it's all one big
+ * block, its size and extent are the same, and the old type
+ * was also contiguous.
+ */
+ new_dtp->is_contig = 0;
+ if(old_is_contig)
+ {
+ MPI_Aint *blklens = MPL_malloc(count *sizeof(MPI_Aint));
+ for (i=0; i<count; i++)
+ blklens[i] = blocklength_array[i];
+ contig_count = MPIDU_Type_indexed_count_contig(count,
+ blklens,
+ displacement_array,
+ dispinbytes,
+ old_extent);
+ new_dtp->max_contig_blocks = contig_count;
+ if( (contig_count == 1) &&
+ ((MPI_Aint) new_dtp->size == new_dtp->extent))
+ {
+ new_dtp->is_contig = 1;
+ }
+ MPL_free(blklens);
+ }
+
+ *newtype = new_dtp->handle;
+ return mpi_errno;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_struct.c b/src/mpid/common/datatype/mpidu_type_struct.c
new file mode 100644
index 0000000..7cb560e
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_struct.c
@@ -0,0 +1,439 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#undef MPID_STRUCT_FLATTEN_DEBUG
+#undef MPID_STRUCT_DEBUG
+
+static MPI_Aint MPIDU_Type_struct_alignsize(int count,
+ const MPI_Datatype *oldtype_array,
+ const MPI_Aint *displacement_array);
+
+/* MPIDU_Type_struct_alignsize
+ *
+ * This function guesses at how the C compiler would align a structure
+ * with the given components.
+ *
+ * It uses these configure-time defines to do its magic:
+ * - HAVE_MAX_INTEGER_ALIGNMENT - maximum byte alignment of integers
+ * - HAVE_MAX_FP_ALIGNMENT - maximum byte alignment of floating points
+ * - HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT - maximum byte alignment with long
+ * doubles (if different from FP_ALIGNMENT)
+ * - HAVE_MAX_DOUBLE_FP_ALIGNMENT - maximum byte alignment with doubles (if
+ * long double is different from FP_ALIGNMENT)
+ * - HAVE_DOUBLE_POS_ALIGNMENT - indicates that structures with doubles
+ * are aligned differently if double isn't
+ * at displacement 0 (e.g. PPC32/64).
+ * - HAVE_LLINT_POS_ALIGNMENT - same as above, for MPI_LONG_LONG_INT
+ *
+ * The different FP, DOUBLE, LONG_DOUBLE alignment case are necessary for
+ * Cygwin on X86 (because long_double is 12 bytes, so double and long double
+ * have different natural alignments). Linux on X86, however, does not have
+ * different rules for this case.
+ */
+static MPI_Aint MPIDU_Type_struct_alignsize(int count,
+ const MPI_Datatype *oldtype_array,
+ const MPI_Aint *displacement_array)
+{
+ int i;
+ MPI_Aint max_alignsize = 0, tmp_alignsize, derived_alignsize = 0;
+
+ for (i=0; i < count; i++)
+ {
+ /* shouldn't be called with an LB or UB, but we'll handle it nicely */
+ if (oldtype_array[i] == MPI_LB || oldtype_array[i] == MPI_UB) continue;
+ else if (HANDLE_GET_KIND(oldtype_array[i]) == HANDLE_KIND_BUILTIN)
+ {
+ tmp_alignsize = MPIDU_Datatype_get_basic_size(oldtype_array[i]);
+
+#ifdef HAVE_DOUBLE_ALIGNMENT_EXCEPTION
+ if (oldtype_array[i] == MPI_DOUBLE) {
+ tmp_alignsize = HAVE_DOUBLE_ALIGNMENT_EXCEPTION;
+ }
+#endif
+
+ switch(oldtype_array[i])
+ {
+ case MPI_FLOAT:
+ case MPI_DOUBLE:
+ case MPI_LONG_DOUBLE:
+#if defined(HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT) && \
+ defined(HAVE_MAX_DOUBLE_FP_ALIGNMENT)
+ if (oldtype_array[i] == MPI_LONG_DOUBLE) {
+ if (tmp_alignsize > HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT)
+ tmp_alignsize = HAVE_MAX_LONG_DOUBLE_FP_ALIGNMENT;
+ }
+ else if (oldtype_array[i] == MPI_DOUBLE) {
+ if (tmp_alignsize > HAVE_MAX_DOUBLE_FP_ALIGNMENT)
+ tmp_alignsize = HAVE_MAX_DOUBLE_FP_ALIGNMENT;
+ }
+ else {
+ /* HAVE_MAX_FP_ALIGNMENT may not be defined, hence commented */
+ /*
+ if (tmp_alignsize > HAVE_MAX_FP_ALIGNMENT)
+ tmp_alignsize = HAVE_MAX_FP_ALIGNMENT;
+ */
+ }
+#elif defined(HAVE_MAX_FP_ALIGNMENT)
+ if (tmp_alignsize > HAVE_MAX_FP_ALIGNMENT)
+ tmp_alignsize = HAVE_MAX_FP_ALIGNMENT;
+#endif
+#ifdef HAVE_DOUBLE_POS_ALIGNMENT
+ /* sort of a hack, but so is this rule */
+ if (oldtype_array[i] == MPI_DOUBLE &&
+ displacement_array[i] != (MPI_Aint) 0)
+ {
+ tmp_alignsize = 4;
+ }
+#endif
+ break;
+ default:
+#ifdef HAVE_MAX_INTEGER_ALIGNMENT
+ if (tmp_alignsize > HAVE_MAX_INTEGER_ALIGNMENT)
+ tmp_alignsize = HAVE_MAX_INTEGER_ALIGNMENT;
+#endif
+ break;
+#ifdef HAVE_LLINT_POS_ALIGNMENT
+ if (oldtype_array[i] == MPI_LONG_LONG_INT &&
+ displacement_array[i] != (MPI_Aint) 0)
+ {
+ tmp_alignsize = 4;
+ }
+#endif
+ }
+ }
+ else
+ {
+ MPIDU_Datatype *dtp;
+
+ MPIDU_Datatype_get_ptr(oldtype_array[i], dtp);
+ tmp_alignsize = dtp->alignsize;
+ if (derived_alignsize < tmp_alignsize)
+ derived_alignsize = tmp_alignsize;
+ }
+ if (max_alignsize < tmp_alignsize) max_alignsize = tmp_alignsize;
+
+ }
+
+ return max_alignsize;
+}
+
+
+/*@
+ MPIDU_Type_struct - create a struct datatype
+
+Input Parameters:
++ count - number of blocks in vector
+. blocklength_array - number of elements in each block
+. displacement_array - offsets of blocks from start of type in bytes
+- oldtype_array - types (using handle) of datatypes on which vector is based
+
+Output Parameters:
+. newtype - handle of new struct datatype
+
+ Return Value:
+ MPI_SUCCESS on success, MPI errno on failure.
+@*/
+int MPIDU_Type_struct(int count,
+ const int *blocklength_array,
+ const MPI_Aint *displacement_array,
+ const MPI_Datatype *oldtype_array,
+ MPI_Datatype *newtype)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i, old_are_contig = 1, definitely_not_contig = 0;
+ int found_sticky_lb = 0, found_sticky_ub = 0, found_true_lb = 0,
+ found_true_ub = 0, found_el_type = 0, found_lb=0, found_ub=0;
+ MPI_Aint el_sz = 0;
+ MPI_Aint size = 0;
+ MPI_Datatype el_type = MPI_DATATYPE_NULL;
+ MPI_Aint true_lb_disp = 0, true_ub_disp = 0, sticky_lb_disp = 0,
+ sticky_ub_disp = 0, lb_disp = 0, ub_disp = 0;
+
+ MPIDU_Datatype *new_dtp;
+
+ if (count == 0) return MPIDU_Type_zerolen(newtype);
+
+#ifdef MPID_STRUCT_DEBUG
+ MPIDI_Datatype_printf(oldtype_array[0], 1, displacement_array[0],
+ blocklength_array[0], 1);
+ for (i=1; i < count; i++)
+ {
+ MPIDI_Datatype_printf(oldtype_array[i], 1, displacement_array[i],
+ blocklength_array[i], 0);
+ }
+#endif
+
+ /* allocate new datatype object and handle */
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ /* --BEGIN ERROR HANDLING-- */
+ if (!new_dtp)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_struct",
+ __LINE__, MPI_ERR_OTHER,
+ "**nomem", 0);
+ return mpi_errno;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 0;
+ new_dtp->is_committed = 0;
+ new_dtp->attributes = NULL;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = NULL;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ /* check for junk struct with all zero blocks */
+ for (i=0; i < count; i++) if (blocklength_array[i] != 0) break;
+
+ if (i == count)
+ {
+ MPIR_Handle_obj_free(&MPIDU_Datatype_mem, new_dtp);
+ return MPIDU_Type_zerolen(newtype);
+ }
+
+ new_dtp->max_contig_blocks = 0;
+ for (i=0; i < count; i++)
+ {
+ int is_builtin =
+ (HANDLE_GET_KIND(oldtype_array[i]) == HANDLE_KIND_BUILTIN);
+ MPI_Aint tmp_lb, tmp_ub, tmp_true_lb, tmp_true_ub;
+ MPI_Aint tmp_el_sz;
+ MPI_Datatype tmp_el_type;
+ MPIDU_Datatype *old_dtp = NULL;
+
+ /* Interpreting typemap to not include 0 blklen things, including
+ * MPI_LB and MPI_UB. -- Rob Ross, 10/31/2005
+ */
+ if (blocklength_array[i] == 0) continue;
+
+ if (is_builtin)
+ {
+ tmp_el_sz = MPIDU_Datatype_get_basic_size(oldtype_array[i]);
+ tmp_el_type = oldtype_array[i];
+
+ MPIDU_DATATYPE_BLOCK_LB_UB((MPI_Aint)(blocklength_array[i]),
+ displacement_array[i],
+ 0,
+ tmp_el_sz,
+ tmp_el_sz,
+ tmp_lb,
+ tmp_ub);
+ tmp_true_lb = tmp_lb;
+ tmp_true_ub = tmp_ub;
+
+ size += tmp_el_sz * blocklength_array[i];
+
+ new_dtp->max_contig_blocks++;
+ }
+ else
+ {
+ MPIDU_Datatype_get_ptr(oldtype_array[i], old_dtp);
+
+ /* Ensure that "builtin_element_size" fits into an int datatype. */
+ MPIR_Ensure_Aint_fits_in_int(old_dtp->builtin_element_size);
+
+ tmp_el_sz = old_dtp->builtin_element_size;
+ tmp_el_type = old_dtp->basic_type;
+
+ MPIDU_DATATYPE_BLOCK_LB_UB((MPI_Aint) blocklength_array[i],
+ displacement_array[i],
+ old_dtp->lb,
+ old_dtp->ub,
+ old_dtp->extent,
+ tmp_lb,
+ tmp_ub);
+ tmp_true_lb = tmp_lb + (old_dtp->true_lb - old_dtp->lb);
+ tmp_true_ub = tmp_ub + (old_dtp->true_ub - old_dtp->ub);
+
+ size += old_dtp->size * blocklength_array[i];
+
+ new_dtp->max_contig_blocks += old_dtp->max_contig_blocks;
+ }
+
+ /* element size and type */
+ if (oldtype_array[i] != MPI_LB && oldtype_array[i] != MPI_UB)
+ {
+ if (found_el_type == 0)
+ {
+ el_sz = tmp_el_sz;
+ el_type = tmp_el_type;
+ found_el_type = 1;
+ }
+ else if (el_sz != tmp_el_sz)
+ {
+ el_sz = -1;
+ el_type = MPI_DATATYPE_NULL;
+ }
+ else if (el_type != tmp_el_type)
+ {
+ /* Q: should we set el_sz = -1 even though the same? */
+ el_type = MPI_DATATYPE_NULL;
+ }
+ }
+
+ /* keep lowest sticky lb */
+ if ((oldtype_array[i] == MPI_LB) ||
+ (!is_builtin && old_dtp->has_sticky_lb))
+ {
+ if (!found_sticky_lb)
+ {
+ found_sticky_lb = 1;
+ sticky_lb_disp = tmp_lb;
+ }
+ else if (sticky_lb_disp > tmp_lb)
+ {
+ sticky_lb_disp = tmp_lb;
+ }
+ }
+
+ /* keep highest sticky ub */
+ if ((oldtype_array[i] == MPI_UB) ||
+ (!is_builtin && old_dtp->has_sticky_ub))
+ {
+ if (!found_sticky_ub)
+ {
+ found_sticky_ub = 1;
+ sticky_ub_disp = tmp_ub;
+ }
+ else if (sticky_ub_disp < tmp_ub)
+ {
+ sticky_ub_disp = tmp_ub;
+ }
+ }
+
+ /* keep lowest lb/true_lb and highest ub/true_ub
+ *
+ * note: checking for contiguity at the same time, to avoid
+ * yet another pass over the arrays
+ */
+ if (oldtype_array[i] != MPI_UB && oldtype_array[i] != MPI_LB)
+ {
+ if (!found_true_lb)
+ {
+ found_true_lb = 1;
+ true_lb_disp = tmp_true_lb;
+ }
+ else if (true_lb_disp > tmp_true_lb)
+ {
+ /* element starts before previous */
+ true_lb_disp = tmp_true_lb;
+ definitely_not_contig = 1;
+ }
+
+ if (!found_lb)
+ {
+ found_lb = 1;
+ lb_disp = tmp_lb;
+ }
+ else if (lb_disp > tmp_lb)
+ {
+ /* lb before previous */
+ lb_disp = tmp_lb;
+ definitely_not_contig = 1;
+ }
+
+ if (!found_true_ub)
+ {
+ found_true_ub = 1;
+ true_ub_disp = tmp_true_ub;
+ }
+ else if (true_ub_disp < tmp_true_ub)
+ {
+ true_ub_disp = tmp_true_ub;
+ }
+ else {
+ /* element ends before previous ended */
+ definitely_not_contig = 1;
+ }
+
+ if (!found_ub)
+ {
+ found_ub = 1;
+ ub_disp = tmp_ub;
+ }
+ else if (ub_disp < tmp_ub)
+ {
+ ub_disp = tmp_ub;
+ }
+ else {
+ /* ub before previous */
+ definitely_not_contig = 1;
+ }
+ }
+
+ if (!is_builtin && !old_dtp->is_contig)
+ {
+ old_are_contig = 0;
+ }
+ }
+
+ new_dtp->n_builtin_elements = -1; /* TODO */
+ new_dtp->builtin_element_size = el_sz;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->has_sticky_lb = found_sticky_lb;
+ new_dtp->true_lb = true_lb_disp;
+ new_dtp->lb = (found_sticky_lb) ? sticky_lb_disp : lb_disp;
+
+ new_dtp->has_sticky_ub = found_sticky_ub;
+ new_dtp->true_ub = true_ub_disp;
+ new_dtp->ub = (found_sticky_ub) ? sticky_ub_disp : ub_disp;
+
+ new_dtp->alignsize = MPIDU_Type_struct_alignsize(count,
+ oldtype_array,
+ displacement_array);
+
+ new_dtp->extent = new_dtp->ub - new_dtp->lb;
+ if ((!found_sticky_lb) && (!found_sticky_ub))
+ {
+ /* account for padding */
+ MPI_Aint epsilon = (new_dtp->alignsize > 0) ?
+ new_dtp->extent % ((MPI_Aint)(new_dtp->alignsize)) : 0;
+
+ if (epsilon)
+ {
+ new_dtp->ub += ((MPI_Aint)(new_dtp->alignsize) - epsilon);
+ new_dtp->extent = new_dtp->ub - new_dtp->lb;
+ }
+ }
+
+ new_dtp->size = size;
+
+ /* new type is contig for N types if its size and extent are the
+ * same, and the old type was also contiguous, and we didn't see
+ * something noncontiguous based on true ub/ub.
+ */
+ if (((MPI_Aint)(new_dtp->size) == new_dtp->extent) &&
+ old_are_contig && (! definitely_not_contig))
+ {
+ new_dtp->is_contig = 1;
+ }
+ else
+ {
+ new_dtp->is_contig = 0;
+ }
+
+ *newtype = new_dtp->handle;
+ return mpi_errno;
+}
+
+
diff --git a/src/mpid/common/datatype/mpidu_type_vector.c b/src/mpid/common/datatype/mpidu_type_vector.c
new file mode 100644
index 0000000..0eb4162
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_vector.c
@@ -0,0 +1,166 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+/* #define MPID_TYPE_ALLOC_DEBUG */
+
+/*@
+ MPIDU_Type_vector - create a vector datatype
+
+Input Parameters:
++ count - number of blocks in vector
+. blocklength - number of elements in each block
+. stride - distance from beginning of one block to the next (see next
+ parameter for units)
+. strideinbytes - if nonzero, then stride is in bytes, otherwise stride
+ is in terms of extent of oldtype
+- oldtype - type (using handle) of datatype on which vector is based
+
+Output Parameters:
+. newtype - handle of new vector datatype
+
+ Return Value:
+ 0 on success, MPI error code on failure.
+@*/
+int MPIDU_Type_vector(int count,
+ int blocklength,
+ MPI_Aint stride,
+ int strideinbytes,
+ MPI_Datatype oldtype,
+ MPI_Datatype *newtype)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int is_builtin, old_is_contig;
+ MPI_Aint el_sz, old_sz;
+ MPI_Datatype el_type;
+ MPI_Aint old_lb, old_ub, old_extent, old_true_lb, old_true_ub, eff_stride;
+
+ MPIDU_Datatype *new_dtp;
+
+ if (count == 0) return MPIDU_Type_zerolen(newtype);
+
+ /* allocate new datatype object and handle */
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ if (!new_dtp) {
+ /* --BEGIN ERROR HANDLING-- */
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_vector", __LINE__,
+ MPI_ERR_OTHER, "**nomem", 0);
+ return mpi_errno;
+ /* --END ERROR HANDLING-- */
+ }
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 0;
+ new_dtp->is_committed = 0;
+ new_dtp->attributes = NULL;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = NULL;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ is_builtin = (HANDLE_GET_KIND(oldtype) == HANDLE_KIND_BUILTIN);
+
+ if (is_builtin) {
+ el_sz = (MPI_Aint) MPIDU_Datatype_get_basic_size(oldtype);
+ el_type = oldtype;
+
+ old_lb = 0;
+ old_true_lb = 0;
+ old_ub = el_sz;
+ old_true_ub = el_sz;
+ old_sz = el_sz;
+ old_extent = el_sz;
+ old_is_contig = 1;
+
+ new_dtp->size = (MPI_Aint) count *
+ (MPI_Aint) blocklength * el_sz;
+ new_dtp->has_sticky_lb = 0;
+ new_dtp->has_sticky_ub = 0;
+
+ new_dtp->alignsize = el_sz; /* ??? */
+ new_dtp->n_builtin_elements = count * blocklength;
+ new_dtp->builtin_element_size = el_sz;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->max_contig_blocks = count;
+
+ eff_stride = (strideinbytes) ? stride : (stride * el_sz);
+ }
+ else /* user-defined base type (oldtype) */ {
+ MPIDU_Datatype *old_dtp;
+
+ MPIDU_Datatype_get_ptr(oldtype, old_dtp);
+ el_sz = old_dtp->builtin_element_size;
+ el_type = old_dtp->basic_type;
+
+ old_lb = old_dtp->lb;
+ old_true_lb = old_dtp->true_lb;
+ old_ub = old_dtp->ub;
+ old_true_ub = old_dtp->true_ub;
+ old_sz = old_dtp->size;
+ old_extent = old_dtp->extent;
+ old_is_contig = old_dtp->is_contig;
+
+ new_dtp->size = count * blocklength * old_dtp->size;
+ new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
+ new_dtp->has_sticky_ub = old_dtp->has_sticky_ub;
+
+ new_dtp->alignsize = old_dtp->alignsize;
+ new_dtp->n_builtin_elements = count * blocklength * old_dtp->n_builtin_elements;
+ new_dtp->builtin_element_size = el_sz;
+ new_dtp->basic_type = el_type;
+
+ new_dtp->max_contig_blocks = old_dtp->max_contig_blocks * count * blocklength;
+
+ eff_stride = (strideinbytes) ? stride : (stride * old_dtp->extent);
+ }
+
+ MPIDU_DATATYPE_VECTOR_LB_UB((MPI_Aint) count,
+ eff_stride,
+ (MPI_Aint) blocklength,
+ old_lb,
+ old_ub,
+ old_extent,
+ new_dtp->lb,
+ new_dtp->ub);
+ new_dtp->true_lb = new_dtp->lb + (old_true_lb - old_lb);
+ new_dtp->true_ub = new_dtp->ub + (old_true_ub - old_ub);
+ new_dtp->extent = new_dtp->ub - new_dtp->lb;
+
+ /* new type is only contig for N types if old one was, and
+ * size and extent of new type are equivalent, and stride is
+ * equal to blocklength * size of old type.
+ */
+ if ((MPI_Aint)(new_dtp->size) == new_dtp->extent &&
+ eff_stride == (MPI_Aint) blocklength * old_sz &&
+ old_is_contig)
+ {
+ new_dtp->is_contig = 1;
+ new_dtp->max_contig_blocks = 1;
+ }
+ else {
+ new_dtp->is_contig = 0;
+ }
+
+ *newtype = new_dtp->handle;
+
+ MPL_DBG_MSG_P(MPIR_DBG_DATATYPE,VERBOSE,"vector type %x created.",
+ new_dtp->handle);
+
+ return mpi_errno;
+}
diff --git a/src/mpid/common/datatype/mpidu_type_zerolen.c b/src/mpid/common/datatype/mpidu_type_zerolen.c
new file mode 100644
index 0000000..5c46058
--- /dev/null
+++ b/src/mpid/common/datatype/mpidu_type_zerolen.c
@@ -0,0 +1,78 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <mpiimpl.h>
+#include <mpidu_dataloop.h>
+#include <stdlib.h>
+
+/* #define MPID_TYPE_ALLOC_DEBUG */
+
+/*@
+ MPIDU_Type_zerolen - create an empty datatype
+
+Input Parameters:
+. none
+
+Output Parameters:
+. newtype - handle of new contiguous datatype
+
+ Return Value:
+ MPI_SUCCESS on success, MPI error code on failure.
+@*/
+
+int MPIDU_Type_zerolen(MPI_Datatype *newtype)
+{
+ int mpi_errno;
+ MPIDU_Datatype *new_dtp;
+
+ /* allocate new datatype object and handle */
+ new_dtp = (MPIDU_Datatype *) MPIR_Handle_obj_alloc(&MPIDU_Datatype_mem);
+ /* --BEGIN ERROR HANDLING-- */
+ if (!new_dtp)
+ {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ "MPIDU_Type_zerolen",
+ __LINE__, MPI_ERR_OTHER,
+ "**nomem", 0);
+ return mpi_errno;
+ }
+ /* --END ERROR HANDLING-- */
+
+ /* handle is filled in by MPIR_Handle_obj_alloc() */
+ MPIR_Object_set_ref(new_dtp, 1);
+ new_dtp->is_permanent = 0;
+ new_dtp->is_committed = 0;
+ new_dtp->attributes = NULL;
+ new_dtp->cache_id = 0;
+ new_dtp->name[0] = 0;
+ new_dtp->contents = NULL;
+
+ new_dtp->dataloop = NULL;
+ new_dtp->dataloop_size = -1;
+ new_dtp->dataloop_depth = -1;
+ new_dtp->hetero_dloop = NULL;
+ new_dtp->hetero_dloop_size = -1;
+ new_dtp->hetero_dloop_depth = -1;
+
+ new_dtp->size = 0;
+ new_dtp->has_sticky_ub = 0;
+ new_dtp->has_sticky_lb = 0;
+ new_dtp->lb = 0;
+ new_dtp->ub = 0;
+ new_dtp->true_lb = 0;
+ new_dtp->true_ub = 0;
+ new_dtp->extent = 0;
+
+ new_dtp->alignsize = 0;
+ new_dtp->builtin_element_size = 0;
+ new_dtp->basic_type = 0;
+ new_dtp->n_builtin_elements = 0;
+ new_dtp->is_contig = 1;
+
+ *newtype = new_dtp->handle;
+ return MPI_SUCCESS;
+}
diff --git a/src/mpid/common/datatype/mpir_type_flatten.c b/src/mpid/common/datatype/mpir_type_flatten.c
index 10cdab6..4c3f514 100644
--- a/src/mpid/common/datatype/mpir_type_flatten.c
+++ b/src/mpid/common/datatype/mpir_type_flatten.c
@@ -6,7 +6,7 @@
*/
#include <mpiimpl.h>
-#include <mpid_dataloop.h>
+#include <mpidu_dataloop.h>
#include <stdlib.h>
/*@
@@ -30,22 +30,22 @@ int MPIR_Type_flatten(MPI_Datatype type,
{
int err;
MPI_Aint first, last;
- MPID_Datatype *datatype_ptr ATTRIBUTE((unused));
- MPID_Segment *segp;
+ MPIDU_Datatype *datatype_ptr ATTRIBUTE((unused));
+ MPIDU_Segment *segp;
if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
off_array[0] = 0;
- MPID_Datatype_get_size_macro(type, size_array[0]);
+ MPIDU_Datatype_get_size_macro(type, size_array[0]);
*array_len_p = 1;
return 0;
}
- MPID_Datatype_get_ptr(type, datatype_ptr);
- MPIU_Assert(datatype_ptr->is_committed);
- MPIU_Assert(*array_len_p >= datatype_ptr->max_contig_blocks);
+ MPIDU_Datatype_get_ptr(type, datatype_ptr);
+ MPIR_Assert(datatype_ptr->is_committed);
+ MPIR_Assert(*array_len_p >= datatype_ptr->max_contig_blocks);
- segp = MPID_Segment_alloc();
- err = MPID_Segment_init(0, 1, type, segp, 0); /* first 0 is bufptr,
+ segp = MPIDU_Segment_alloc();
+ err = MPIDU_Segment_init(0, 1, type, segp, 0); /* first 0 is bufptr,
* 1 is count
* last 0 is homogeneous
*/
@@ -54,14 +54,14 @@ int MPIR_Type_flatten(MPI_Datatype type,
first = 0;
last = SEGMENT_IGNORE_LAST;
- MPID_Segment_flatten(segp,
+ MPIDU_Segment_flatten(segp,
first,
&last,
off_array,
size_array,
array_len_p);
- MPID_Segment_free(segp);
+ MPIDU_Segment_free(segp);
return 0;
}
diff --git a/src/mpid/common/hcoll/.state-cache b/src/mpid/common/hcoll/.state-cache
index cab620d..633283c 100644
--- a/src/mpid/common/hcoll/.state-cache
+++ b/src/mpid/common/hcoll/.state-cache
@@ -1,22 +1,22 @@
<dir>
-<file name="hcoll_ops.c" info="1447123141"/>
-<file name="hcollpre.h" info="1447123141"/>
-<file name="hcoll_rte.c" info="1447123141"/>
-<file name="hcoll.h" info="1447123141"/>
-<file name="hcoll_dtypes.h" info="1447123141"/>
-<file name="hcoll_init.c" info="1447123141"/>
+<file name="hcoll_init.c" info="1478973152"/>
+<file name="hcoll_rte.c" info="1478973152"/>
+<file name="hcollpre.h" info="1478973152"/>
+<file name="hcoll_ops.c" info="1478973152"/>
+<file name="hcoll.h" info="1478973152"/>
+<file name="hcoll_dtypes.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="hcoll_ops.c">
+<fileinfo name="hcoll_init.c">
+</fileinfo>
+<fileinfo name="hcoll_rte.c">
</fileinfo>
<fileinfo name="hcollpre.h">
</fileinfo>
-<fileinfo name="hcoll_rte.c">
+<fileinfo name="hcoll_ops.c">
</fileinfo>
<fileinfo name="hcoll.h">
</fileinfo>
<fileinfo name="hcoll_dtypes.h">
</fileinfo>
-<fileinfo name="hcoll_init.c">
-</fileinfo>
</data>
diff --git a/src/mpid/common/hcoll/hcoll.h b/src/mpid/common/hcoll/hcoll.h
index 16a9452..1bed92d 100644
--- a/src/mpid/common/hcoll/hcoll.h
+++ b/src/mpid/common/hcoll/hcoll.h
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#ifndef _HCOLL_H_
#define _HCOLL_H_
@@ -7,25 +13,29 @@
extern int world_comm_destroying;
-int hcoll_comm_create(MPID_Comm * comm, void *param);
-int hcoll_comm_destroy(MPID_Comm * comm, void *param);
+#if defined(MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIR_DBG_HCOLL;
+#endif /* MPL_USE_DBG_LOGGING */
+
+int hcoll_comm_create(MPIR_Comm * comm, void *param);
+int hcoll_comm_destroy(MPIR_Comm * comm, void *param);
-int hcoll_Barrier(MPID_Comm * comm_ptr, MPIR_Errflag_t *err);
+int hcoll_Barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t *err);
int hcoll_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,
- MPID_Comm * comm_ptr, MPIR_Errflag_t *err);
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t *err);
int hcoll_Allgather(const void *sbuf, int scount, MPI_Datatype sdtype,
- void *rbuf, int rcount, MPI_Datatype rdtype, MPID_Comm * comm_ptr, MPIR_Errflag_t *err);
+ void *rbuf, int rcount, MPI_Datatype rdtype, MPIR_Comm * comm_ptr, MPIR_Errflag_t *err);
int hcoll_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPIR_Errflag_t *err);
+ MPI_Op op, MPIR_Comm * comm_ptr, MPIR_Errflag_t *err);
-int hcoll_Ibarrier_req(MPID_Comm * comm_ptr, MPID_Request ** request);
+int hcoll_Ibarrier_req(MPIR_Comm * comm_ptr, MPIR_Request ** request);
int hcoll_Ibcast_req(void *buffer, int count, MPI_Datatype datatype, int root,
- MPID_Comm * comm_ptr, MPID_Request ** request);
+ MPIR_Comm * comm_ptr, MPIR_Request ** request);
int hcoll_Iallgather_req(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, MPID_Comm * comm_ptr,
- MPID_Request ** request);
+ int recvcount, MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Request ** request);
int hcoll_Iallreduce_req(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPID_Request ** request);
+ MPI_Op op, MPIR_Comm * comm_ptr, MPIR_Request ** request);
int hcoll_do_progress(int *made_progress);
#endif
diff --git a/src/mpid/common/hcoll/hcoll_dtypes.h b/src/mpid/common/hcoll/hcoll_dtypes.h
index 6c86ab6..9cfff68 100644
--- a/src/mpid/common/hcoll/hcoll_dtypes.h
+++ b/src/mpid/common/hcoll/hcoll_dtypes.h
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#ifndef _HCOLL_DTYPES_H_
#define _HCOLL_DTYPES_H_
#include "hcoll/api/hcoll_dte.h"
diff --git a/src/mpid/common/hcoll/hcoll_init.c b/src/mpid/common/hcoll/hcoll_init.c
index c04704a..f5ae9c3 100644
--- a/src/mpid/common/hcoll/hcoll_init.c
+++ b/src/mpid/common/hcoll/hcoll_init.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include "hcoll.h"
static int hcoll_initialized = 0;
@@ -16,6 +22,10 @@ int hcoll_enable_iallreduce = 1;
int hcoll_comm_attr_keyval = MPI_KEYVAL_INVALID;
int world_comm_destroying = 0;
+#if defined(MPL_USE_DBG_LOGGING)
+MPL_dbg_class MPIR_DBG_HCOLL;
+#endif /* MPL_USE_DBG_LOGGING */
+
#undef FUNCNAME
#define FUNCNAME hcoll_destroy
#undef FCNAME
@@ -47,7 +57,7 @@ static int hcoll_comm_attr_del_fn(MPI_Comm comm, int keyval, void *attr_val, voi
envar = getenv("HCOLL_ENABLE_" #nameEnv); \
if (NULL != envar) { \
hcoll_enable_##name = atoi(envar); \
- MPIU_DBG_MSG_D(CH3_OTHER, VERBOSE, "HCOLL_ENABLE_" #nameEnv " = %d\n", hcoll_enable_##name); \
+ MPL_DBG_MSG_D(MPIR_DBG_HCOLL, VERBOSE, "HCOLL_ENABLE_" #nameEnv " = %d\n", hcoll_enable_##name); \
} \
} while (0)
@@ -67,6 +77,11 @@ int hcoll_initialize(void)
if (0 == hcoll_enable) {
goto fn_exit;
}
+
+#if defined(MPL_USE_DBG_LOGGING)
+ MPIR_DBG_HCOLL = MPL_dbg_class_alloc("HCOLL", "hcoll");
+#endif /* MPL_USE_DBG_LOGGING */
+
hcoll_rte_fns_setup();
/*set INT_MAX/2 as tag_base here by the moment.
* Need to think more about it.
@@ -117,14 +132,14 @@ int hcoll_initialize(void)
#define INSTALL_COLL_WRAPPER(check_name, name) \
if (hcoll_enable_##check_name && (NULL != hcoll_collectives.coll_##check_name)) { \
comm_ptr->coll_fns->name = hcoll_##name; \
- MPIU_DBG_MSG(CH3_OTHER,VERBOSE, #name " wrapper installed"); \
+ MPL_DBG_MSG(MPIR_DBG_HCOLL,VERBOSE, #name " wrapper installed"); \
}
#undef FUNCNAME
#define FUNCNAME hcoll_comm_create
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int hcoll_comm_create(MPID_Comm * comm_ptr, void *param)
+int hcoll_comm_create(MPIR_Comm * comm_ptr, void *param)
{
int mpi_errno;
int num_ranks;
@@ -146,13 +161,13 @@ int hcoll_comm_create(MPID_Comm * comm_ptr, void *param)
goto fn_exit;
}
num_ranks = comm_ptr->local_size;
- if ((MPID_INTRACOMM != comm_ptr->comm_kind) || (2 > num_ranks)) {
+ if ((MPIR_COMM_KIND__INTRACOMM != comm_ptr->comm_kind) || (2 > num_ranks)) {
comm_ptr->hcoll_priv.is_hcoll_init = 0;
goto fn_exit;
}
comm_ptr->hcoll_priv.hcoll_context = hcoll_create_context((rte_grp_handle_t) comm_ptr);
if (NULL == comm_ptr->hcoll_priv.hcoll_context) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "Couldn't create hcoll context.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "Couldn't create hcoll context.");
goto fn_fail;
}
mpi_errno =
@@ -161,16 +176,16 @@ int hcoll_comm_create(MPID_Comm * comm_ptr, void *param)
if (mpi_errno) {
hcoll_destroy_context(comm_ptr->hcoll_priv.hcoll_context,
(rte_grp_handle_t) comm_ptr, &context_destroyed);
- MPIU_Assert(context_destroyed);
+ MPIR_Assert(context_destroyed);
comm_ptr->hcoll_priv.is_hcoll_init = 0;
MPIR_ERR_POP(mpi_errno);
}
comm_ptr->hcoll_priv.hcoll_origin_coll_fns = comm_ptr->coll_fns;
- comm_ptr->coll_fns = (MPID_Collops *) MPIU_Malloc(sizeof(MPID_Collops));
- memset(comm_ptr->coll_fns, 0, sizeof(MPID_Collops));
+ comm_ptr->coll_fns = (MPIR_Collops *) MPL_malloc(sizeof(MPIR_Collops));
+ memset(comm_ptr->coll_fns, 0, sizeof(MPIR_Collops));
if (comm_ptr->hcoll_priv.hcoll_origin_coll_fns != 0) {
memcpy(comm_ptr->coll_fns, comm_ptr->hcoll_priv.hcoll_origin_coll_fns,
- sizeof(MPID_Collops));
+ sizeof(MPIR_Collops));
}
INSTALL_COLL_WRAPPER(barrier, Barrier);
INSTALL_COLL_WRAPPER(bcast, Bcast);
@@ -192,7 +207,7 @@ int hcoll_comm_create(MPID_Comm * comm_ptr, void *param)
#define FUNCNAME hcoll_comm_destroy
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int hcoll_comm_destroy(MPID_Comm * comm_ptr, void *param)
+int hcoll_comm_destroy(MPIR_Comm * comm_ptr, void *param)
{
int mpi_errno;
int context_destroyed;
@@ -211,7 +226,7 @@ int hcoll_comm_destroy(MPID_Comm * comm_ptr, void *param)
context_destroyed = 0;
if ((NULL != comm_ptr) && (0 != comm_ptr->hcoll_priv.is_hcoll_init)) {
if (NULL != comm_ptr->coll_fns) {
- MPIU_Free(comm_ptr->coll_fns);
+ MPL_free(comm_ptr->coll_fns);
}
comm_ptr->coll_fns = comm_ptr->hcoll_priv.hcoll_origin_coll_fns;
hcoll_destroy_context(comm_ptr->hcoll_priv.hcoll_context,
diff --git a/src/mpid/common/hcoll/hcoll_ops.c b/src/mpid/common/hcoll/hcoll_ops.c
index db1dbd9..9a05622 100644
--- a/src/mpid/common/hcoll/hcoll_ops.c
+++ b/src/mpid/common/hcoll/hcoll_ops.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include "hcoll.h"
#include "hcoll_dtypes.h"
@@ -5,21 +11,21 @@
#define FUNCNAME hcoll_Barrier
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int hcoll_Barrier(MPID_Comm * comm_ptr, MPIR_Errflag_t *err)
+int hcoll_Barrier(MPIR_Comm * comm_ptr, MPIR_Errflag_t *err)
{
int rc;
MPI_Comm comm = comm_ptr->handle;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOL BARRIER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOL BARRIER.");
rc = hcoll_collectives.coll_barrier(comm_ptr->hcoll_priv.hcoll_context);
if (HCOLL_SUCCESS != rc) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK BARRIER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK BARRIER.");
void *ptr = comm_ptr->coll_fns->Barrier;
comm_ptr->coll_fns->Barrier =
(NULL != comm_ptr->hcoll_priv.hcoll_origin_coll_fns) ?
comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Barrier : NULL;
rc = MPI_Barrier(comm);
comm_ptr->coll_fns->Barrier = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK BARRIER - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK BARRIER - done.");
}
return rc;
}
@@ -29,11 +35,11 @@ int hcoll_Barrier(MPID_Comm * comm_ptr, MPIR_Errflag_t *err)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int hcoll_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,
- MPID_Comm * comm_ptr, MPIR_Errflag_t *err)
+ MPIR_Comm * comm_ptr, MPIR_Errflag_t *err)
{
dte_data_representation_t dtype;
int rc;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOLL BCAST.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOLL BCAST.");
dtype = mpi_dtype_2_dte_dtype(datatype);
int is_homogeneous = 1, use_fallback = 0;
MPI_Comm comm = comm_ptr->handle;
@@ -45,7 +51,7 @@ int hcoll_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,
/*If we are here then datatype is not simple predefined datatype */
/*In future we need to add more complex mapping to the dte_data_representation_t */
/* Now use fallback */
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "unsupported data layout, calling fallback bcast.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "unsupported data layout, calling fallback bcast.");
use_fallback = 1;
}
else {
@@ -56,14 +62,14 @@ int hcoll_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,
}
}
if (1 == use_fallback) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK BCAST - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK BCAST - done.");
void *ptr = comm_ptr->coll_fns->Bcast;
comm_ptr->coll_fns->Bcast =
(NULL != comm_ptr->hcoll_priv.hcoll_origin_coll_fns) ?
comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Bcast : NULL;
rc = MPI_Bcast(buffer, count, datatype, root, comm);
comm_ptr->coll_fns->Bcast = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK BCAST - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK BCAST - done.");
}
return rc;
}
@@ -73,7 +79,7 @@ int hcoll_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int hcoll_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPIR_Errflag_t *err)
+ MPI_Op op, MPIR_Comm * comm_ptr, MPIR_Errflag_t *err)
{
dte_data_representation_t Dtype;
hcoll_dte_op_t *Op;
@@ -85,7 +91,7 @@ int hcoll_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
is_homogeneous = 0;
#endif
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOL ALLREDUCE.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOL ALLREDUCE.");
Dtype = mpi_dtype_2_dte_dtype(datatype);
Op = mpi_op_2_dte_op(op);
if (MPI_IN_PLACE == sendbuf) {
@@ -93,7 +99,7 @@ int hcoll_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
}
if (HCOL_DTE_IS_COMPLEX(Dtype) || HCOL_DTE_IS_ZERO(Dtype) || (0 == is_homogeneous) ||
(HCOL_DTE_OP_NULL == Op->id)) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "unsupported data layout, calling fallback allreduce.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "unsupported data layout, calling fallback allreduce.");
use_fallback = 1;
}
else {
@@ -107,14 +113,14 @@ int hcoll_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
if (HCOLL_IN_PLACE == sendbuf) {
sendbuf = MPI_IN_PLACE;
}
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK ALLREDUCE.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK ALLREDUCE.");
void *ptr = comm_ptr->coll_fns->Allreduce;
comm_ptr->coll_fns->Allreduce =
(NULL != comm_ptr->hcoll_priv.hcoll_origin_coll_fns) ?
comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Allreduce : NULL;
rc = MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm);
comm_ptr->coll_fns->Allreduce = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK ALLREDUCE done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK ALLREDUCE done.");
}
return rc;
}
@@ -124,7 +130,7 @@ int hcoll_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int hcoll_Allgather(const void *sbuf, int scount, MPI_Datatype sdtype,
- void *rbuf, int rcount, MPI_Datatype rdtype, MPID_Comm * comm_ptr, MPIR_Errflag_t *err)
+ void *rbuf, int rcount, MPI_Datatype rdtype, MPIR_Comm * comm_ptr, MPIR_Errflag_t *err)
{
int is_homogeneous = 1, use_fallback = 0;
MPI_Comm comm = comm_ptr->handle;
@@ -137,7 +143,7 @@ int hcoll_Allgather(const void *sbuf, int scount, MPI_Datatype sdtype,
is_homogeneous = 0;
#endif
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOLL ALLGATHER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOLL ALLGATHER.");
stype = mpi_dtype_2_dte_dtype(sdtype);
rtype = mpi_dtype_2_dte_dtype(rdtype);
if (MPI_IN_PLACE == sbuf) {
@@ -145,7 +151,7 @@ int hcoll_Allgather(const void *sbuf, int scount, MPI_Datatype sdtype,
}
if (HCOL_DTE_IS_COMPLEX(stype) || HCOL_DTE_IS_ZERO(stype) || HCOL_DTE_IS_ZERO(rtype) ||
HCOL_DTE_IS_COMPLEX(rtype) || is_homogeneous == 0) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "unsupported data layout; calling fallback allgather.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "unsupported data layout; calling fallback allgather.");
use_fallback = 1;
}
else {
@@ -159,14 +165,14 @@ int hcoll_Allgather(const void *sbuf, int scount, MPI_Datatype sdtype,
if (HCOLL_IN_PLACE == sbuf) {
sbuf = MPI_IN_PLACE;
}
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK ALLGATHER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK ALLGATHER.");
void *ptr = comm_ptr->coll_fns->Allgather;
comm_ptr->coll_fns->Allgather =
(NULL != comm_ptr->hcoll_priv.hcoll_origin_coll_fns) ?
comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Allgather : NULL;
rc = MPI_Allgather(sbuf, scount, sdtype, rbuf, rcount, rdtype, comm);
comm_ptr->coll_fns->Allgather = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK ALLGATHER - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK ALLGATHER - done.");
}
return rc;
}
@@ -175,26 +181,26 @@ int hcoll_Allgather(const void *sbuf, int scount, MPI_Datatype sdtype,
#define FUNCNAME hcoll_Ibarrier_req
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int hcoll_Ibarrier_req(MPID_Comm * comm_ptr, MPID_Request ** request)
+int hcoll_Ibarrier_req(MPIR_Comm * comm_ptr, MPIR_Request ** request)
{
int rc;
void **rt_handle;
MPI_Comm comm;
MPI_Request req;
comm = comm_ptr->handle;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOL IBARRIER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOL IBARRIER.");
rt_handle = (void **) request;
rc = hcoll_collectives.coll_ibarrier(comm_ptr->hcoll_priv.hcoll_context, rt_handle);
if (HCOLL_SUCCESS != rc) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IBARRIER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IBARRIER.");
void *ptr = comm_ptr->coll_fns->Ibarrier_req;
comm_ptr->coll_fns->Ibarrier_req =
(comm_ptr->hcoll_priv.hcoll_origin_coll_fns !=
NULL) ? comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Ibarrier_req : NULL;
rc = MPI_Ibarrier(comm, &req);
- MPID_Request_get_ptr(req, *request);
+ MPIR_Request_get_ptr(req, *request);
comm_ptr->coll_fns->Ibarrier_req = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IBARRIER - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IBARRIER - done.");
}
return rc;
}
@@ -204,12 +210,12 @@ int hcoll_Ibarrier_req(MPID_Comm * comm_ptr, MPID_Request ** request)
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int hcoll_Ibcast_req(void *buffer, int count, MPI_Datatype datatype, int root,
- MPID_Comm * comm_ptr, MPID_Request ** request)
+ MPIR_Comm * comm_ptr, MPIR_Request ** request)
{
int rc;
void **rt_handle;
dte_data_representation_t dtype;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOLL IBCAST.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOLL IBCAST.");
dtype = mpi_dtype_2_dte_dtype(datatype);
int is_homogeneous = 1, use_fallback = 0;
MPI_Comm comm = comm_ptr->handle;
@@ -223,7 +229,7 @@ int hcoll_Ibcast_req(void *buffer, int count, MPI_Datatype datatype, int root,
/*If we are here then datatype is not simple predefined datatype */
/*In future we need to add more complex mapping to the dte_data_representation_t */
/* Now use fallback */
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "unsupported data layout, calling fallback ibcast.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "unsupported data layout, calling fallback ibcast.");
use_fallback = 1;
}
else {
@@ -234,15 +240,15 @@ int hcoll_Ibcast_req(void *buffer, int count, MPI_Datatype datatype, int root,
}
}
if (1 == use_fallback) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IBCAST - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IBCAST - done.");
void *ptr = comm_ptr->coll_fns->Ibcast_req;
comm_ptr->coll_fns->Ibcast_req =
(comm_ptr->hcoll_priv.hcoll_origin_coll_fns !=
NULL) ? comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Ibcast_req : NULL;
rc = MPI_Ibcast(buffer, count, datatype, root, comm, &req);
- MPID_Request_get_ptr(req, *request);
+ MPIR_Request_get_ptr(req, *request);
comm_ptr->coll_fns->Ibcast_req = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IBCAST - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IBCAST - done.");
}
return rc;
}
@@ -252,8 +258,8 @@ int hcoll_Ibcast_req(void *buffer, int count, MPI_Datatype datatype, int root,
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int hcoll_Iallgather_req(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, MPID_Comm * comm_ptr,
- MPID_Request ** request)
+ int recvcount, MPI_Datatype recvtype, MPIR_Comm * comm_ptr,
+ MPIR_Request ** request)
{
int is_homogeneous = 1, use_fallback = 0;
MPI_Comm comm = comm_ptr->handle;
@@ -270,7 +276,7 @@ int hcoll_Iallgather_req(const void *sendbuf, int sendcount, MPI_Datatype sendty
is_homogeneous = 0;
#endif
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOLL IALLGATHER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOLL IALLGATHER.");
stype = mpi_dtype_2_dte_dtype(sendtype);
rtype = mpi_dtype_2_dte_dtype(recvtype);
if (MPI_IN_PLACE == sendbuf) {
@@ -278,7 +284,7 @@ int hcoll_Iallgather_req(const void *sendbuf, int sendcount, MPI_Datatype sendty
}
if (HCOL_DTE_IS_COMPLEX(stype) || HCOL_DTE_IS_ZERO(stype) || HCOL_DTE_IS_ZERO(rtype) ||
HCOL_DTE_IS_COMPLEX(rtype) || is_homogeneous == 0) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "unsupported data layout; calling fallback iallgather.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "unsupported data layout; calling fallback iallgather.");
use_fallback = 1;
}
else {
@@ -292,15 +298,15 @@ int hcoll_Iallgather_req(const void *sendbuf, int sendcount, MPI_Datatype sendty
if (HCOLL_IN_PLACE == sendbuf) {
sendbuf = MPI_IN_PLACE;
}
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IALLGATHER.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IALLGATHER.");
void *ptr = comm_ptr->coll_fns->Iallgather_req;
comm_ptr->coll_fns->Iallgather_req =
(comm_ptr->hcoll_priv.hcoll_origin_coll_fns !=
NULL) ? comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Iallgather_req : NULL;
rc = MPI_Iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm, &req);
- MPID_Request_get_ptr(req, *request);
+ MPIR_Request_get_ptr(req, *request);
comm_ptr->coll_fns->Iallgather_req = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IALLGATHER - done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IALLGATHER - done.");
}
return rc;
}
@@ -310,7 +316,7 @@ int hcoll_Iallgather_req(const void *sendbuf, int sendcount, MPI_Datatype sendty
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int hcoll_Iallreduce_req(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPID_Request ** request)
+ MPI_Op op, MPIR_Comm * comm_ptr, MPIR_Request ** request)
{
dte_data_representation_t Dtype;
hcoll_dte_op_t *Op;
@@ -325,7 +331,7 @@ int hcoll_Iallreduce_req(const void *sendbuf, void *recvbuf, int count, MPI_Data
is_homogeneous = 0;
#endif
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING HCOL IALLREDUCE.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING HCOL IALLREDUCE.");
Dtype = mpi_dtype_2_dte_dtype(datatype);
Op = mpi_op_2_dte_op(op);
if (MPI_IN_PLACE == sendbuf) {
@@ -333,7 +339,7 @@ int hcoll_Iallreduce_req(const void *sendbuf, void *recvbuf, int count, MPI_Data
}
if (HCOL_DTE_IS_COMPLEX(Dtype) || HCOL_DTE_IS_ZERO(Dtype) || (0 == is_homogeneous) ||
(HCOL_DTE_OP_NULL == Op->id)) {
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "unsupported data layout, calling fallback iallreduce.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "unsupported data layout, calling fallback iallreduce.");
use_fallback = 1;
}
else {
@@ -347,15 +353,15 @@ int hcoll_Iallreduce_req(const void *sendbuf, void *recvbuf, int count, MPI_Data
if (HCOLL_IN_PLACE == sendbuf) {
sendbuf = MPI_IN_PLACE;
}
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IALLREDUCE.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IALLREDUCE.");
void *ptr = comm_ptr->coll_fns->Iallreduce_req;
comm_ptr->coll_fns->Iallreduce_req =
(comm_ptr->hcoll_priv.hcoll_origin_coll_fns !=
NULL) ? comm_ptr->hcoll_priv.hcoll_origin_coll_fns->Iallreduce_req : NULL;
rc = MPI_Iallreduce(sendbuf, recvbuf, count, datatype, op, comm, &req);
- MPID_Request_get_ptr(req, *request);
+ MPIR_Request_get_ptr(req, *request);
comm_ptr->coll_fns->Iallreduce_req = ptr;
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "RUNNING FALLBACK IALLREDUCE done.");
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "RUNNING FALLBACK IALLREDUCE done.");
}
return rc;
}
diff --git a/src/mpid/common/hcoll/hcoll_rte.c b/src/mpid/common/hcoll/hcoll_rte.c
index ea543fe..235e076 100644
--- a/src/mpid/common/hcoll/hcoll_rte.c
+++ b/src/mpid/common/hcoll/hcoll_rte.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include "hcoll.h"
#include "hcoll/api/hcoll_dte.h"
#include <assert.h>
@@ -120,13 +126,13 @@ static int recv_nb(struct dte_data_representation_t data,
{
int mpi_errno;
MPI_Datatype dtype;
- MPID_Request *request;
- MPID_Comm *comm;
+ MPIR_Request *request;
+ MPIR_Comm *comm;
int context_offset;
size_t size;
mpi_errno = MPI_SUCCESS;
- context_offset = MPID_CONTEXT_INTRA_COLL;
- comm = (MPID_Comm *) grp_h;
+ context_offset = MPIR_CONTEXT_INTRA_COLL;
+ comm = (MPIR_Comm *) grp_h;
if (!ec_h.handle) {
MPIR_ERR_SETANDJUMP2(mpi_errno, MPI_ERR_OTHER, "**hcoll_wrong_arg",
"**hcoll_wrong_arg %p %d", ec_h.handle, ec_h.rank);
@@ -154,7 +160,7 @@ static int recv_nb(struct dte_data_representation_t data,
/* We have a full data description & buffer pointer simultaneously.
* It is ambiguous. Throw a warning since the user might have made a
* mistake with data reps */
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "Warning: buffer_pointer != NULL for NON-inline data "
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "Warning: buffer_pointer != NULL for NON-inline data "
"representation: buffer_pointer is ignored");
}
total_entries_number = count_total_dte_repeat_entries(&data);
@@ -187,13 +193,13 @@ static int send_nb(dte_data_representation_t data,
{
int mpi_errno;
MPI_Datatype dtype;
- MPID_Request *request;
- MPID_Comm *comm;
+ MPIR_Request *request;
+ MPIR_Comm *comm;
int context_offset;
size_t size;
mpi_errno = MPI_SUCCESS;
- context_offset = MPID_CONTEXT_INTRA_COLL;
- comm = (MPID_Comm *) grp_h;
+ context_offset = MPIR_CONTEXT_INTRA_COLL;
+ comm = (MPIR_Comm *) grp_h;
if (!ec_h.handle) {
MPIR_ERR_SETANDJUMP2(mpi_errno, MPI_ERR_OTHER, "**hcoll_wrong_arg",
"**hcoll_wrong_arg %p %d", ec_h.handle, ec_h.rank);
@@ -221,7 +227,7 @@ static int send_nb(dte_data_representation_t data,
/* We have a full data description & buffer pointer simultaneously.
* It is ambiguous. Throw a warning since the user might have made a
* mistake with data reps */
- MPIU_DBG_MSG(CH3_OTHER, VERBOSE, "Warning: buffer_pointer != NULL for NON-inline data "
+ MPL_DBG_MSG(MPIR_DBG_HCOLL, VERBOSE, "Warning: buffer_pointer != NULL for NON-inline data "
"representation: buffer_pointer is ignored");
}
total_entries_number = count_total_dte_repeat_entries(&data);
@@ -248,16 +254,16 @@ static int send_nb(dte_data_representation_t data,
#define FCNAME MPL_QUOTE(FUNCNAME)
static int test(rte_request_handle_t * request, int *completed)
{
- MPID_Request *req;
- req = (MPID_Request *) request->data;
+ MPIR_Request *req;
+ req = (MPIR_Request *) request->data;
if (HCOLRTE_REQUEST_ACTIVE != request->status) {
*completed = true;
return HCOLL_SUCCESS;
}
- *completed = (int) MPID_Request_is_complete(req);
+ *completed = (int) MPIR_Request_is_complete(req);
if (*completed) {
- MPID_Request_release(req);
+ MPIR_Request_free(req);
request->status = HCOLRTE_REQUEST_DONE;
}
@@ -284,8 +290,8 @@ static int get_ec_handles(int num_ec,
int *ec_indexes, rte_grp_handle_t grp_h, rte_ec_handle_t * ec_handles)
{
int i;
- MPID_Comm *comm;
- comm = (MPID_Comm *) grp_h;
+ MPIR_Comm *comm;
+ comm = (MPIR_Comm *) grp_h;
for (i = 0; i < num_ec; i++) {
ec_handles[i].rank = ec_indexes[i];
ec_handles[i].handle = (void *) (comm->vcrt->vcr_table[ec_indexes[i]]);
@@ -299,8 +305,8 @@ static int get_ec_handles(int num_ec,
#define FCNAME MPL_QUOTE(FUNCNAME)
static int get_my_ec(rte_grp_handle_t grp_h, rte_ec_handle_t * ec_handle)
{
- MPID_Comm *comm;
- comm = (MPID_Comm *) grp_h;
+ MPIR_Comm *comm;
+ comm = (MPIR_Comm *) grp_h;
int my_rank = MPIR_Comm_rank(comm);
ec_handle->handle = (void *) (comm->vcrt->vcr_table[my_rank]);
ec_handle->rank = my_rank;
@@ -314,7 +320,7 @@ static int get_my_ec(rte_grp_handle_t grp_h, rte_ec_handle_t * ec_handle)
#define FCNAME MPL_QUOTE(FUNCNAME)
static int group_size(rte_grp_handle_t grp_h)
{
- return MPIR_Comm_size((MPID_Comm *) grp_h);
+ return MPIR_Comm_size((MPIR_Comm *) grp_h);
}
#undef FUNCNAME
@@ -323,7 +329,7 @@ static int group_size(rte_grp_handle_t grp_h)
#define FCNAME MPL_QUOTE(FUNCNAME)
static int my_rank(rte_grp_handle_t grp_h)
{
- return MPIR_Comm_rank((MPID_Comm *) grp_h);
+ return MPIR_Comm_rank((MPIR_Comm *) grp_h);
}
#undef FUNCNAME
@@ -332,10 +338,10 @@ static int my_rank(rte_grp_handle_t grp_h)
#define FCNAME MPL_QUOTE(FUNCNAME)
static int ec_on_local_node(rte_ec_handle_t ec, rte_grp_handle_t group)
{
- MPID_Comm *comm;
+ MPIR_Comm *comm;
MPID_Node_id_t nodeid, my_nodeid;
int my_rank;
- comm = (MPID_Comm *) group;
+ comm = (MPIR_Comm *) group;
MPID_Get_node_id(comm, ec.rank, &nodeid);
my_rank = MPIR_Comm_rank(comm);
MPID_Get_node_id(comm, my_rank, &my_nodeid);
@@ -368,8 +374,8 @@ static uint32_t jobid(void)
#define FCNAME MPL_QUOTE(FUNCNAME)
static int group_id(rte_grp_handle_t group)
{
- MPID_Comm *comm;
- comm = (MPID_Comm *) group;
+ MPIR_Comm *comm;
+ comm = (MPIR_Comm *) group;
return comm->context_id;
}
@@ -379,9 +385,8 @@ static int group_id(rte_grp_handle_t group)
#define FCNAME MPL_QUOTE(FUNCNAME)
static void *get_coll_handle(void)
{
- MPID_Request *req;
- req = MPID_Request_create();
- req->kind = MPID_COLL_REQUEST;
+ MPIR_Request *req;
+ req = MPIR_Request_create(MPIR_REQUEST_KIND__COLL);
return (void *) req;
}
@@ -392,9 +397,9 @@ static void *get_coll_handle(void)
static int coll_handle_test(void *handle)
{
int completed;
- MPID_Request *req;
- req = (MPID_Request *) handle;
- completed = (int) MPID_Request_is_complete(req);
+ MPIR_Request *req;
+ req = (MPIR_Request *) handle;
+ completed = (int) MPIR_Request_is_complete(req);
return completed;
}
@@ -404,10 +409,10 @@ static int coll_handle_test(void *handle)
#define FCNAME MPL_QUOTE(FUNCNAME)
static void coll_handle_free(void *handle)
{
- MPID_Request *req;
+ MPIR_Request *req;
if (NULL != handle) {
- req = (MPID_Request *) handle;
- MPID_Request_release(req);
+ req = (MPIR_Request *) handle;
+ MPIR_Request_free(req);
}
}
@@ -417,9 +422,9 @@ static void coll_handle_free(void *handle)
#define FCNAME MPL_QUOTE(FUNCNAME)
static void coll_handle_complete(void *handle)
{
- MPID_Request *req;
+ MPIR_Request *req;
if (NULL != handle) {
- req = (MPID_Request *) handle;
+ req = (MPIR_Request *) handle;
MPID_Request_complete(req);
}
}
diff --git a/src/mpid/common/hcoll/hcollpre.h b/src/mpid/common/hcoll/hcollpre.h
index 03ec11d..04c5e6b 100644
--- a/src/mpid/common/hcoll/hcollpre.h
+++ b/src/mpid/common/hcoll/hcollpre.h
@@ -1,9 +1,15 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#ifndef _HCOLLPRE_H_
#define _HCOLLPRE_H_
typedef struct {
int is_hcoll_init;
- struct MPID_Collops *hcoll_origin_coll_fns;
+ struct MPIR_Collops *hcoll_origin_coll_fns;
void *hcoll_context;
} hcoll_comm_priv_t;
diff --git a/src/mpid/common/hcoll/subconfigure.m4 b/src/mpid/common/hcoll/subconfigure.m4
index 8d7c624..644902a 100644
--- a/src/mpid/common/hcoll/subconfigure.m4
+++ b/src/mpid/common/hcoll/subconfigure.m4
@@ -6,6 +6,8 @@ AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
PAC_CHECK_HEADER_LIB([hcoll/api/hcoll_api.h],[hcoll],[hcoll_init],[have_hcoll=yes],[have_hcoll=no])
if test "$have_hcoll" = "yes" ; then
PAC_APPEND_FLAG([-lhcoll],[WRAPPER_LIBS])
+ elif test ! -z "${with_hcoll}" ; then
+ AC_MSG_ERROR(['hcoll/api/hcoll_api.h or libhcoll library not found.'])
fi
PAC_POP_FLAG(LIBS)
AM_CONDITIONAL([BUILD_HCOLL],[test "$have_hcoll" = "yes"])
diff --git a/src/mpid/common/sched/.state-cache b/src/mpid/common/sched/.state-cache
index 5d42e27..d847033 100644
--- a/src/mpid/common/sched/.state-cache
+++ b/src/mpid/common/sched/.state-cache
@@ -1,13 +1,10 @@
<dir>
-<file name="mpid_sched.h" info="1447123141"/>
-<file name="mpid_sched.c" info="1447123141"/>
-<file name="mpid_sched_pre.h" info="1447123141"/>
+<file name="mpidu_sched.h" info="1478973152"/>
+<file name="mpidu_sched.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpid_sched.h">
+<fileinfo name="mpidu_sched.h">
</fileinfo>
-<fileinfo name="mpid_sched.c">
-</fileinfo>
-<fileinfo name="mpid_sched_pre.h">
+<fileinfo name="mpidu_sched.c">
</fileinfo>
</data>
diff --git a/src/mpid/common/sched/Makefile.mk b/src/mpid/common/sched/Makefile.mk
index 3dbfe06..660bc78 100644
--- a/src/mpid/common/sched/Makefile.mk
+++ b/src/mpid/common/sched/Makefile.mk
@@ -8,15 +8,14 @@
if BUILD_MPID_COMMON_SCHED
mpi_core_sources += \
- src/mpid/common/sched/mpid_sched.c
+ src/mpid/common/sched/mpidu_sched.c
# so that the the device (e.g., ch3) can successfully include mpid_sched_pre.h
# There are no AC_OUTPUT_FILES, so the builddir path does not need to be added.
AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/common/sched
noinst_HEADERS += \
- src/mpid/common/sched/mpid_sched.h \
- src/mpid/common/sched/mpid_sched_pre.h
+ src/mpid/common/sched/mpidu_sched.h
endif BUILD_MPID_COMMON_SCHED
diff --git a/src/mpid/common/sched/mpid_sched.c b/src/mpid/common/sched/mpid_sched.c
deleted file mode 100644
index e3d7a76..0000000
--- a/src/mpid/common/sched/mpid_sched.c
+++ /dev/null
@@ -1,1018 +0,0 @@
-/* -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2011 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-#include "mpl_utlist.h"
-
-/* A random guess at an appropriate value, we can tune it later. It could also
- * be a real tunable parameter. */
-#define MPIDU_SCHED_INITIAL_ENTRIES (16)
-
-#if 0
-#define dprintf fprintf
-#else
-/* FIXME this requires VA_ARGS macros */
-#define dprintf(...) do{}while(0)
-#endif
-
-/* helper macros to improve code readability */
-/* we pessimistically assume that MPI_DATATYPE_NULL may be passed as a "valid" type
- * for send/recv when MPI_PROC_NULL is the destination/src */
-#define dtype_add_ref_if_not_builtin(datatype_) \
- do { \
- if ((datatype_) != MPI_DATATYPE_NULL && \
- HANDLE_GET_KIND((datatype_)) != HANDLE_KIND_BUILTIN) \
- { \
- MPID_Datatype *dtp_ = NULL; \
- MPID_Datatype_get_ptr((datatype_), dtp_); \
- MPID_Datatype_add_ref(dtp_); \
- } \
- } while (0)
-#define dtype_release_if_not_builtin(datatype_) \
- do { \
- if ((datatype_) != MPI_DATATYPE_NULL && \
- HANDLE_GET_KIND((datatype_)) != HANDLE_KIND_BUILTIN) \
- { \
- MPID_Datatype *dtp_ = NULL; \
- MPID_Datatype_get_ptr((datatype_), dtp_); \
- MPID_Datatype_release(dtp_); \
- } \
- } while (0)
-
-/* TODO move to a header somewhere? */
-void MPIDU_Sched_dump(struct MPIDU_Sched *s);
-void MPIDU_Sched_dump_fh(struct MPIDU_Sched *s, FILE *fh);
-
-struct MPIDU_Sched_state {
- struct MPIDU_Sched *head;
- /* no need for a tail with utlist */
-};
-
-/* holds on to all incomplete schedules on which progress should be made */
-struct MPIDU_Sched_state all_schedules = {NULL};
-
-static int nbc_progress_hook_id = 0;
-
-/* returns TRUE if any schedules are currently pending completion by the
- * progress engine, FALSE otherwise */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_are_pending
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sched_are_pending(void)
-{
- return (all_schedules.head != NULL);
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_next_tag
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Sched_next_tag(MPID_Comm *comm_ptr, int *tag)
-{
- int mpi_errno = MPI_SUCCESS;
- /* TODO there should be an internal accessor/utility macro for getting the
- * TAG_UB value that doesn't require using the attribute interface */
- int tag_ub = MPIR_Process.attrs.tag_ub;
-#if defined(HAVE_ERROR_CHECKING)
- int start = MPI_UNDEFINED;
- int end = MPI_UNDEFINED;
- struct MPIDU_Sched *elt = NULL;
-#endif
-
- *tag = comm_ptr->next_sched_tag;
- ++comm_ptr->next_sched_tag;
-
-#if defined(HAVE_ERROR_CHECKING)
- /* Upon entry into the second half of the tag space, ensure there are no
- * outstanding schedules still using the second half of the space. Check
- * the first half similarly on wraparound. */
- if (comm_ptr->next_sched_tag == (tag_ub / 2)) {
- start = tag_ub / 2;
- end = tag_ub;
- }
- else if (comm_ptr->next_sched_tag == (tag_ub)) {
- start = MPIR_FIRST_NBC_TAG;
- end = tag_ub / 2;
- }
- if (start != MPI_UNDEFINED) {
- MPL_DL_FOREACH(all_schedules.head, elt) {
- if (elt->tag >= start && elt->tag < end) {
- MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**toomanynbc");
- }
- }
- }
-#endif
-
- /* wrap the tag values around to the start, but don't allow it to conflict
- * with the tags used by the blocking collectives */
- if (comm_ptr->next_sched_tag == tag_ub) {
- comm_ptr->next_sched_tag = MPIR_FIRST_NBC_TAG;
- }
-
-fn_fail:
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_start_entry
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* initiates the schedule entry "e" in the NBC described by "s", where
- * "e" is at "idx" in "s". This means posting nonblocking sends/recvs,
- * performing reductions, calling callbacks, etc. */
-static int MPIDU_Sched_start_entry(struct MPIDU_Sched *s, size_t idx, struct MPIDU_Sched_entry *e)
-{
- int mpi_errno = MPI_SUCCESS, ret_errno = MPI_SUCCESS;
- MPID_Request *r = s->req;
- MPID_Comm *comm;
-
- MPIU_Assert(e->status == MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED);
-
- switch (e->type) {
- case MPIDU_SCHED_ENTRY_SEND:
- comm = e->u.send.comm;
- MPIU_DBG_MSG_D(COMM, VERBOSE, "starting SEND entry %d\n", (int) idx);
- if (e->u.send.count_p) {
- /* deferred send */
- /* originally there was no branch and send.count_p was set to
- * &send.count, but this requires patching up the pointers
- * during realloc of entries, so this is easier */
- ret_errno = MPIC_Isend(e->u.send.buf, *e->u.send.count_p, e->u.send.datatype,
- e->u.send.dest, s->tag, comm, &e->u.send.sreq, &r->errflag);
- }
- else {
- if (e->u.send.is_sync) {
- ret_errno = MPIC_Issend(e->u.send.buf, e->u.send.count, e->u.send.datatype,
- e->u.send.dest, s->tag, comm, &e->u.send.sreq, &r->errflag);
- }
- else {
- ret_errno = MPIC_Isend(e->u.send.buf, e->u.send.count, e->u.send.datatype,
- e->u.send.dest, s->tag, comm, &e->u.send.sreq, &r->errflag);
- }
- }
- /* Check if the error is actually fatal to the NBC or we can continue. */
- if (unlikely(ret_errno)) {
- if (MPIR_ERR_NONE == r->errflag) {
- if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
- r->errflag = MPIR_ERR_PROC_FAILED;
- } else {
- r->errflag = MPIR_ERR_OTHER;
- }
- }
- e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
- MPIU_DBG_MSG_D(COMM, VERBOSE, "Sched SEND failed. Errflag: %d\n", (int) r->errflag);
- } else {
- e->status = MPIDU_SCHED_ENTRY_STATUS_STARTED;
- }
- break;
- case MPIDU_SCHED_ENTRY_RECV:
- MPIU_DBG_MSG_D(COMM, VERBOSE, "starting RECV entry %d\n", (int) idx);
- comm = e->u.recv.comm;
- ret_errno = MPIC_Irecv(e->u.recv.buf, e->u.recv.count, e->u.recv.datatype,
- e->u.recv.src, s->tag, comm, &e->u.recv.rreq);
- /* Check if the error is actually fatal to the NBC or we can continue. */
- if (unlikely(ret_errno)) {
- if (MPIR_ERR_NONE == r->errflag) {
- if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
- r->errflag = MPIR_ERR_PROC_FAILED;
- } else {
- r->errflag = MPIR_ERR_OTHER;
- }
- }
- e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
- MPIU_DBG_MSG_D(COMM, VERBOSE, "Sched SEND failed. Errflag: %d\n", (int) r->errflag);
- } else {
- e->status = MPIDU_SCHED_ENTRY_STATUS_STARTED;
- }
- break;
- case MPIDU_SCHED_ENTRY_REDUCE:
- MPIU_DBG_MSG_D(COMM, VERBOSE, "starting REDUCE entry %d\n", (int) idx);
- mpi_errno = MPIR_Reduce_local_impl(e->u.reduce.inbuf, e->u.reduce.inoutbuf, e->u.reduce.count,
- e->u.reduce.datatype, e->u.reduce.op);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- if (HANDLE_GET_KIND(e->u.reduce.op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(e->u.reduce.op, op_ptr);
- MPIR_Op_release(op_ptr);
- }
- dtype_release_if_not_builtin(e->u.reduce.datatype);
- e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
- break;
- case MPIDU_SCHED_ENTRY_COPY:
- MPIU_DBG_MSG_D(COMM, VERBOSE, "starting COPY entry %d\n", (int) idx);
- mpi_errno = MPIR_Localcopy(e->u.copy.inbuf, e->u.copy.incount, e->u.copy.intype,
- e->u.copy.outbuf, e->u.copy.outcount, e->u.copy.outtype);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- dtype_release_if_not_builtin(e->u.copy.intype);
- dtype_release_if_not_builtin(e->u.copy.outtype);
- e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
- break;
- case MPIDU_SCHED_ENTRY_NOP:
- MPIU_DBG_MSG_D(COMM, VERBOSE, "starting NOOP entry %d\n", (int) idx);
- /* nothing to be done */
- break;
- case MPIDU_SCHED_ENTRY_CB:
- MPIU_DBG_MSG_D(COMM, VERBOSE, "starting CB entry %d\n", (int) idx);
- if (e->u.cb.cb_type == MPIDU_SCHED_CB_TYPE_1) {
- ret_errno = e->u.cb.u.cb_p(r->comm, s->tag, e->u.cb.cb_state);
- /* Sched entries list can be reallocated inside callback */
- e = &s->entries[idx];
- if (unlikely(ret_errno)) {
- if (MPIR_ERR_NONE == r->errflag) {
- if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
- r->errflag = MPIR_ERR_PROC_FAILED;
- } else {
- r->errflag = MPIR_ERR_OTHER;
- }
- }
- e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
- } else {
- e->status = MPIDU_SCHED_ENTRY_STATUS_STARTED;
- }
- }
- else if (e->u.cb.cb_type == MPIDU_SCHED_CB_TYPE_2) {
- ret_errno = e->u.cb.u.cb2_p(r->comm, s->tag, e->u.cb.cb_state, e->u.cb.cb_state2);
- /* Sched entries list can be reallocated inside callback */
- e = &s->entries[idx];
- if (unlikely(ret_errno)) {
- if (MPIR_ERR_NONE == r->errflag) {
- if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
- r->errflag = MPIR_ERR_PROC_FAILED;
- } else {
- r->errflag = MPIR_ERR_OTHER;
- }
- }
- e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
- } else {
- e->status = MPIDU_SCHED_ENTRY_STATUS_STARTED;
- }
- }
- else {
- MPIU_DBG_MSG_D(COMM, TYPICAL, "unknown callback type, e->u.cb.cb_type=%d", e->u.cb.cb_type);
- }
- e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
- break;
- default:
- MPIU_DBG_MSG_D(COMM, TYPICAL, "unknown entry type, e->type=%d", e->type);
- break;
- }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
- if (r)
- r->status.MPI_ERROR = mpi_errno;
- goto fn_exit;
-}
-
-/* Posts or performs any NOT_STARTED operations in the given schedule that are
- * permitted to be started. That is, this routine will respect schedule
- * barriers appropriately. */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_continue
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Sched_continue(struct MPIDU_Sched *s)
-{
- int mpi_errno = MPI_SUCCESS;
- size_t i;
-
- for (i = s->idx; i < s->num_entries; ++i) {
- struct MPIDU_Sched_entry *e = &s->entries[i];
-
- if (e->status == MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED) {
- mpi_errno = MPIDU_Sched_start_entry(s, i, e);
- /* Sched entries list can be reallocated inside callback */
- e = &s->entries[i];
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
-
- /* _start_entry may have completed the operation, but won't update s->idx */
- if (i == s->idx && e->status >= MPIDU_SCHED_ENTRY_STATUS_COMPLETE) {
- ++s->idx; /* this is valid even for barrier entries */
- }
-
- /* watch the indexing, s->idx might have been incremented above, so
- * ||-short-circuit matters here */
- if (e->is_barrier && (e->status < MPIDU_SCHED_ENTRY_STATUS_COMPLETE || (s->idx != i+1))) {
- /* we've hit a barrier but outstanding operations before this
- * barrier remain, so we cannot proceed past the barrier */
- break;
- }
- }
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_create
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* creates a new opaque schedule object and returns a handle to it in (*sp) */
-int MPID_Sched_create(MPID_Sched_t *sp)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched *s;
- MPIU_CHKPMEM_DECL(2);
-
- *sp = NULL;
-
- /* this mem will be freed by the progress engine when the request is completed */
- MPIU_CHKPMEM_MALLOC(s, struct MPIDU_Sched *, sizeof(struct MPIDU_Sched), mpi_errno, "schedule object");
-
- s->size = MPIDU_SCHED_INITIAL_ENTRIES;
- s->idx = 0;
- s->num_entries = 0;
- s->tag = -1;
- s->req = NULL;
- s->entries = NULL;
- s->next = NULL; /* only needed for sanity checks */
- s->prev = NULL; /* only needed for sanity checks */
-
- /* this mem will be freed by the progress engine when the request is completed */
- MPIU_CHKPMEM_MALLOC(s->entries, struct MPIDU_Sched_entry *, MPIDU_SCHED_INITIAL_ENTRIES*sizeof(struct MPIDU_Sched_entry), mpi_errno, "schedule entries vector");
-
- /* TODO in a debug build, defensively mark all entries as status=INVALID */
-
- MPIU_CHKPMEM_COMMIT();
- *sp = s;
-fn_exit:
- return mpi_errno;
-fn_fail:
- MPIU_CHKPMEM_REAP();
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_clone
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* clones orig and returns a handle to the new schedule in (*cloned) */
-int MPID_Sched_clone(MPID_Sched_t orig, MPID_Sched_t *cloned)
-{
- int mpi_errno = MPI_SUCCESS;
- /* TODO implement this function for real */
- MPIU_Assert_fmt_msg(FALSE, ("clone not yet implemented"));
- MPIU_Assertp(FALSE);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_start
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* sets (*sp) to MPID_SCHED_NULL and gives you back a request pointer in (*req).
- * The caller is giving up ownership of the opaque schedule object. */
-int MPID_Sched_start(MPID_Sched_t *sp, MPID_Comm *comm, int tag, MPID_Request **req)
-{
- int mpi_errno = MPI_SUCCESS;
- MPID_Request *r;
- struct MPIDU_Sched *s = *sp;
-
- *req = NULL;
- *sp = MPID_SCHED_NULL;
-
- /* sanity check the schedule */
- MPIU_Assert(s->num_entries <= s->size);
- MPIU_Assert(s->num_entries == 0 || s->idx < s->num_entries);
- MPIU_Assert(s->req == NULL);
- MPIU_Assert(s->next == NULL);
- MPIU_Assert(s->prev == NULL);
- MPIU_Assert(s->entries != NULL);
-
- /* now create and populate the request */
- r = MPID_Request_create();
- if (!r) MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
- r->kind = MPID_COLL_REQUEST;
- /* FIXME is this right when comm/datatype GC is used? */
- MPIR_Comm_add_ref(comm);
- r->comm = comm;
- /* req refcount is currently 1, for the user's request. Increment for the
- * schedule's reference */
- MPIR_Request_add_ref(r);
- s->req = r;
- *req = r;
- /* cc is 1, which is fine b/c we only use it as a signal, rather than
- * incr/decr on every constituent operation */
- s->tag = tag;
-
- /* Now kick off any initial operations. Do this before we tell the progress
- * engine about this req+sched, otherwise we have more MT issues to worry
- * about. Skipping this step will increase latency. */
- mpi_errno = MPIDU_Sched_continue(s);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- /* finally, enqueue in the list of all pending schedules so that the
- * progress engine can make progress on it */
- if (all_schedules.head == NULL) {
- mpi_errno = MPID_Progress_register_hook(MPIDU_Sched_progress,
- &nbc_progress_hook_id);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- MPID_Progress_activate_hook(nbc_progress_hook_id);
- }
- MPL_DL_APPEND(all_schedules.head, s);
-
- MPIU_DBG_MSG_P(COMM, TYPICAL, "started schedule s=%p\n", s);
- MPIDU_Sched_dump(s);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- if (*req)
- *req = NULL;
- if (r) {
- MPID_Request_release(r); /* the schedule's ref */
- MPID_Request_release(r); /* the user's ref */
- }
-
- goto fn_exit;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_add_entry
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* idx and e are permitted to be NULL */
-static int MPIDU_Sched_add_entry(struct MPIDU_Sched *s, int *idx, struct MPIDU_Sched_entry **e)
-{
- int mpi_errno = MPI_SUCCESS;
- int i;
- struct MPIDU_Sched_entry *ei;
-
- MPIU_Assert(s->entries != NULL);
- MPIU_Assert(s->size > 0);
-
- if (s->num_entries == s->size) {
- /* need to grow the entries array */
- s->entries = MPIU_Realloc(s->entries, 2*s->size*sizeof(struct MPIDU_Sched_entry));
- if (s->entries == NULL) MPIR_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
- s->size *= 2;
- }
-
- i = s->num_entries++;
- ei = &s->entries[i];
-
- if (idx != NULL)
- *idx = i;
- if (e != NULL)
- *e = ei;
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_send
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* do these ops need an entry handle returned? */
-int MPID_Sched_send(const void *buf, int count, MPI_Datatype datatype, int dest, MPID_Comm *comm, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_SEND;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
-
- e->u.send.buf = buf;
- e->u.send.count = count;
- e->u.send.count_p = NULL;
- e->u.send.datatype = datatype;
- e->u.send.dest = dest;
- e->u.send.sreq = NULL; /* will be populated by _start_entry */
- e->u.send.comm = comm;
- e->u.send.is_sync = FALSE;
-
- /* the user may free the comm & type after initiating but before the
- * underlying send is actually posted, so we must add a reference here and
- * release it at entry completion time */
- MPIR_Comm_add_ref(comm);
- dtype_add_ref_if_not_builtin(datatype);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_ssend
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Sched_ssend(const void *buf, int count, MPI_Datatype datatype, int dest, MPID_Comm *comm, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_SEND;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
-
- e->u.send.buf = buf;
- e->u.send.count = count;
- e->u.send.count_p = NULL;
- e->u.send.datatype = datatype;
- e->u.send.dest = dest;
- e->u.send.sreq = NULL; /* will be populated by _start_entry */
- e->u.send.comm = comm;
- e->u.send.is_sync = TRUE;
-
- /* the user may free the comm & type after initiating but before the
- * underlying send is actually posted, so we must add a reference here and
- * release it at entry completion time */
- MPIR_Comm_add_ref(comm);
- dtype_add_ref_if_not_builtin(datatype);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_send_defer
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Sched_send_defer(const void *buf, const int *count, MPI_Datatype datatype, int dest, MPID_Comm *comm, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_SEND;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
-
- e->u.send.buf = buf;
- e->u.send.count = MPI_UNDEFINED;
- e->u.send.count_p = count;
- e->u.send.datatype = datatype;
- e->u.send.dest = dest;
- e->u.send.sreq = NULL; /* will be populated by _start_entry */
- e->u.send.comm = comm;
- e->u.send.is_sync = FALSE;
-
- /* the user may free the comm & type after initiating but before the
- * underlying send is actually posted, so we must add a reference here and
- * release it at entry completion time */
- MPIR_Comm_add_ref(comm);
- dtype_add_ref_if_not_builtin(datatype);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_recv_status
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Sched_recv_status(void *buf, int count, MPI_Datatype datatype, int src, MPID_Comm *comm, MPI_Status *status, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_RECV;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
-
- e->u.recv.buf = buf;
- e->u.recv.count = count;
- e->u.recv.datatype = datatype;
- e->u.recv.src = src;
- e->u.recv.rreq = NULL; /* will be populated by _start_entry */
- e->u.recv.comm = comm;
- e->u.recv.status = status;
-
- MPIR_Comm_add_ref(comm);
- dtype_add_ref_if_not_builtin(datatype);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_recv
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Sched_recv(void *buf, int count, MPI_Datatype datatype, int src, MPID_Comm *comm, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_RECV;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
-
- e->u.recv.buf = buf;
- e->u.recv.count = count;
- e->u.recv.datatype = datatype;
- e->u.recv.src = src;
- e->u.recv.rreq = NULL; /* will be populated by _start_entry */
- e->u.recv.comm = comm;
- e->u.recv.status = MPI_STATUS_IGNORE;
-
- MPIR_Comm_add_ref(comm);
- dtype_add_ref_if_not_builtin(datatype);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_reduce
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_Sched_reduce(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
- struct MPIDU_Sched_reduce *reduce = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_REDUCE;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
- reduce = &e->u.reduce;
-
- reduce->inbuf = inbuf;
- reduce->inoutbuf = inoutbuf;
- reduce->count = count;
- reduce->datatype = datatype;
- reduce->op = op;
-
- dtype_add_ref_if_not_builtin(datatype);
- if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
- MPID_Op *op_ptr = NULL;
- MPID_Op_get_ptr(op, op_ptr);
- MPIR_Op_add_ref(op_ptr);
- }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_copy
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* Schedules a copy of "incount" copies of "intype" from "inbuf" to "outbuf" as
- * specified by "outcount" and "outtype". It is erroneous to attempt to copy
- * more data than will fit into the (outbuf,outcount,outtype)-triple. This
- * corresponds naturally with the buffer sizing rules for send-recv.
- *
- * Packing/unpacking can be accomplished by passing MPI_PACKED as either intype
- * or outtype. */
-int MPID_Sched_copy(const void *inbuf, int incount, MPI_Datatype intype,
- void *outbuf, int outcount, MPI_Datatype outtype, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
- struct MPIDU_Sched_copy *copy = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_COPY;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
- copy = &e->u.copy;
-
- copy->inbuf = inbuf;
- copy->incount = incount;
- copy->intype = intype;
- copy->outbuf = outbuf;
- copy->outcount = outcount;
- copy->outtype = outtype;
-
- dtype_add_ref_if_not_builtin(intype);
- dtype_add_ref_if_not_builtin(outtype);
-
- /* some sanity checking up front */
-#if defined(HAVE_ERROR_CHECKING) && !defined(NDEBUG)
- {
- MPI_Aint intype_size, outtype_size;
- MPID_Datatype_get_size_macro(intype, intype_size);
- MPID_Datatype_get_size_macro(outtype, outtype_size);
- if (incount * intype_size > outcount * outtype_size) {
- MPL_error_printf("truncation: intype=%#x, intype_size=%lld, incount=%d, outtype=%#x, outtype_size=%lld outcount=%d\n",
- intype, (long long)intype_size, incount, outtype, (long long)outtype_size, outcount);
- }
- }
-#endif
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_barrier
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* require that all previously added ops are complete before subsequent ops
- * may begin to execute */
-int MPID_Sched_barrier(MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
-
- /* mark the previous entry as a barrier unless we're at the beginning, which
- * would be a pointless barrier */
- if (s->num_entries > 0) {
- s->entries[s->num_entries-1].is_barrier = TRUE;
- }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_cb
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* buffer management, fancy reductions, etc */
-int MPID_Sched_cb(MPID_Sched_cb_t *cb_p, void *cb_state, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
- struct MPIDU_Sched_cb *cb = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_CB;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
- cb = &e->u.cb;
-
- cb->cb_type = MPIDU_SCHED_CB_TYPE_1;
- cb->u.cb_p = cb_p;
- cb->cb_state = cb_state;
- cb->cb_state2 = NULL;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Sched_cb2
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* buffer management, fancy reductions, etc */
-int MPID_Sched_cb2(MPID_Sched_cb2_t *cb_p, void *cb_state, void *cb_state2, MPID_Sched_t s)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDU_Sched_entry *e = NULL;
- struct MPIDU_Sched_cb *cb = NULL;
-
- mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
-
- e->type = MPIDU_SCHED_ENTRY_CB;
- e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
- e->is_barrier = FALSE;
- cb = &e->u.cb;
-
- cb->cb_type = MPIDU_SCHED_CB_TYPE_2;
- cb->u.cb2_p = cb_p;
- cb->cb_state = cb_state;
- cb->cb_state2 = cb_state2;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-
-/* returns TRUE in (*made_progress) if any of the outstanding schedules in state completed */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_progress_state
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Sched_progress_state(struct MPIDU_Sched_state *state, int *made_progress)
-{
- int mpi_errno = MPI_SUCCESS;
- size_t i;
- struct MPIDU_Sched *s;
- struct MPIDU_Sched *tmp;
-
- if (made_progress)
- *made_progress = FALSE;
-
- MPL_DL_FOREACH_SAFE(state->head, s, tmp) {
- /*MPIDU_Sched_dump(s);*/
-
- for (i = s->idx; i < s->num_entries; ++i) {
- struct MPIDU_Sched_entry *e = &s->entries[i];
-
- switch (e->type) {
- case MPIDU_SCHED_ENTRY_SEND:
- if (e->u.send.sreq != NULL && MPID_Request_is_complete(e->u.send.sreq)) {
- MPIU_DBG_MSG_FMT(COMM, VERBOSE, (MPIU_DBG_FDEST, "completed SEND entry %d, sreq=%p\n", (int) i, e->u.send.sreq));
- if (s->req->errflag != MPIR_ERR_NONE)
- e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
- else
- e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
- MPID_Request_release(e->u.send.sreq);
- e->u.send.sreq = NULL;
- MPIR_Comm_release(e->u.send.comm);
- dtype_release_if_not_builtin(e->u.send.datatype);
- }
- break;
- case MPIDU_SCHED_ENTRY_RECV:
- if (e->u.recv.rreq != NULL && MPID_Request_is_complete(e->u.recv.rreq)) {
- MPIU_DBG_MSG_FMT(COMM, VERBOSE, (MPIU_DBG_FDEST, "completed RECV entry %d, rreq=%p\n", (int) i, e->u.recv.rreq));
- MPIR_Process_status(&e->u.recv.rreq->status, &s->req->errflag);
- MPIR_Request_extract_status(e->u.recv.rreq, e->u.recv.status);
- if (s->req->errflag != MPIR_ERR_NONE)
- e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
- else
- e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
- MPID_Request_release(e->u.recv.rreq);
- e->u.recv.rreq = NULL;
- MPIR_Comm_release(e->u.recv.comm);
- dtype_release_if_not_builtin(e->u.recv.datatype);
- }
- break;
- default:
- /* all other entry types don't have any sub-requests that
- * need to be checked */
- break;
- }
-
- if (i == s->idx && e->status >= MPIDU_SCHED_ENTRY_STATUS_COMPLETE) {
- ++s->idx;
- MPIU_DBG_MSG_D(COMM, VERBOSE, "completed OTHER entry %d\n", (int) i);
- if (e->is_barrier) {
- /* post/perform the next round of operations */
- mpi_errno = MPIDU_Sched_continue(s);
- if (mpi_errno) MPIR_ERR_POP(mpi_errno);
- }
- }
- else if (e->is_barrier && e->status < MPIDU_SCHED_ENTRY_STATUS_COMPLETE) {
- /* don't process anything after this barrier entry */
- break;
- }
- }
-
- if (s->idx == s->num_entries) {
- MPIU_DBG_MSG_FMT(COMM, VERBOSE, (MPIU_DBG_FDEST, "completing and dequeuing s=%p r=%p\n", s, s->req));
-
- /* dequeue this schedule from the state, it's complete */
- MPL_DL_DELETE(state->head, s);
-
- /* TODO refactor into a sched_complete routine? */
- switch (s->req->errflag) {
- case MPIR_ERR_PROC_FAILED:
- MPIR_ERR_SET(s->req->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**comm");
- break;
- case MPIR_ERR_OTHER:
- MPIR_ERR_SET(s->req->status.MPI_ERROR, MPI_ERR_OTHER, "**comm");
- break;
- case MPIR_ERR_NONE:
- default:
- break;
- }
-
- mpi_errno = MPID_Request_complete(s->req);
- if (mpi_errno != MPI_SUCCESS) {
- MPIR_ERR_POP(mpi_errno);
- }
-
- s->req = NULL;
- MPIU_Free(s->entries);
- MPIU_Free(s);
-
- if (made_progress)
- *made_progress = TRUE;
- }
- }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* returns TRUE in (*made_progress) if any of the outstanding schedules completed */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_progress
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sched_progress(int *made_progress)
-{
- int mpi_errno;
-
- mpi_errno = MPIDU_Sched_progress_state(&all_schedules, made_progress);
- if (!mpi_errno && all_schedules.head == NULL) {
- MPID_Progress_deactivate_hook(nbc_progress_hook_id);
- MPID_Progress_deregister_hook(nbc_progress_hook_id);
- }
-
- return mpi_errno;
-}
-
-static const char *entry_to_str(enum MPIDU_Sched_entry_type type) ATTRIBUTE((unused,used));
-static const char *entry_to_str(enum MPIDU_Sched_entry_type type)
-{
- switch(type) {
- case MPIDU_SCHED_ENTRY_SEND:
- return "SEND";
- case MPIDU_SCHED_ENTRY_RECV:
- return "RECV";
- case MPIDU_SCHED_ENTRY_REDUCE:
- return "REDUCE";
- case MPIDU_SCHED_ENTRY_COPY:
- return "COPY";
- case MPIDU_SCHED_ENTRY_NOP:
- return "NOP";
- case MPIDU_SCHED_ENTRY_CB:
- return "CB";
- default:
- return "(out of range)";
- }
-}
-
-/* utility function for debugging, dumps the given schedule object to fh */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_dump_fh
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIDU_Sched_dump_fh(struct MPIDU_Sched *s, FILE *fh)
-{
- int i;
- dprintf(fh, "--------------------------------\n");
- dprintf(fh, "s=%p\n", s);
- if (s) {
- dprintf(fh, "s->size=%zd\n", s->size);
- dprintf(fh, "s->idx=%zd\n", s->idx);
- dprintf(fh, "s->num_entries=%d\n", s->num_entries);
- dprintf(fh, "s->tag=%d\n", s->tag);
- dprintf(fh, "s->req=%p\n", s->req);
- dprintf(fh, "s->entries=%p\n", s->entries);
- for (i = 0; i < s->num_entries; ++i) {
- dprintf(fh, "&s->entries[%d]=%p\n", i, &s->entries[i]);
- dprintf(fh, "s->entries[%d].type=%s\n", i, entry_to_str(s->entries[i].type));
- dprintf(fh, "s->entries[%d].status=%d\n", i, s->entries[i].status);
- dprintf(fh, "s->entries[%d].is_barrier=%s\n", i, (s->entries[i].is_barrier ? "TRUE" : "FALSE"));
- }
- }
- dprintf(fh, "--------------------------------\n");
- /*
- dprintf(fh, "s->next=%p\n", s->next);
- dprintf(fh, "s->prev=%p\n", s->prev);
- */
-}
-
-/* utility function for debugging, dumps the given schedule object to stderr */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sched_dump
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-void MPIDU_Sched_dump(struct MPIDU_Sched *s)
-{
- MPIDU_Sched_dump_fh(s, stderr);
-}
-
diff --git a/src/mpid/common/sched/mpid_sched.h b/src/mpid/common/sched/mpid_sched.h
deleted file mode 100644
index ef040e6..0000000
--- a/src/mpid/common/sched/mpid_sched.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2011 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* this file should be included by the using device's mpidimpl.h */
-
-#ifndef MPID_SCHED_H_INCLUDED
-#define MPID_SCHED_H_INCLUDED
-
-/* FIXME open questions:
- * - Should the schedule hold a pointer to the nbc request and the nbc request
- * hold a pointer to the schedule? This could cause MT issues.
- */
-
-
-enum MPIDU_Sched_entry_type {
- MPIDU_SCHED_ENTRY_INVALID_LB = 0,
- MPIDU_SCHED_ENTRY_SEND,
- /* _SEND_DEFER is easily implemented via _SEND */
- MPIDU_SCHED_ENTRY_RECV,
- /* _RECV_STATUS is easily implemented via _RECV */
- MPIDU_SCHED_ENTRY_REDUCE,
- MPIDU_SCHED_ENTRY_COPY,
- MPIDU_SCHED_ENTRY_NOP,
- MPIDU_SCHED_ENTRY_CB,
- MPIDU_SCHED_ENTRY_INVALID_UB
-};
-
-struct MPIDU_Sched_send {
- const void *buf;
- int count;
- const int *count_p;
- MPI_Datatype datatype;
- int dest;
- MPID_Comm *comm;
- MPID_Request *sreq;
- int is_sync; /* TRUE iff this send is an ssend */
-};
-
-struct MPIDU_Sched_recv {
- void *buf;
- int count;
- MPI_Datatype datatype;
- int src;
- MPID_Comm *comm;
- MPID_Request *rreq;
- MPI_Status *status;
-};
-
-struct MPIDU_Sched_reduce {
- const void *inbuf;
- void *inoutbuf;
- int count;
- MPI_Datatype datatype;
- MPI_Op op;
-};
-
-struct MPIDU_Sched_copy {
- const void *inbuf;
- int incount;
- MPI_Datatype intype;
- void *outbuf;
- int outcount;
- MPI_Datatype outtype;
-};
-
-/* nop entries have no args, so no structure is needed */
-
-enum MPIDU_Sched_cb_type {
- MPIDU_SCHED_CB_TYPE_1 = 0, /* single state arg type --> MPID_Sched_cb_t */
- MPIDU_SCHED_CB_TYPE_2 /* double state arg type --> MPID_Sched_cb2_t */
-};
-
-struct MPIDU_Sched_cb {
- enum MPIDU_Sched_cb_type cb_type;
- union {
- MPID_Sched_cb_t *cb_p;
- MPID_Sched_cb2_t *cb2_p;
- } u;
- void *cb_state;
- void *cb_state2; /* unused for single-param callbacks */
-};
-
-enum MPIDU_Sched_entry_status {
- MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED = 0,
- MPIDU_SCHED_ENTRY_STATUS_STARTED,
- MPIDU_SCHED_ENTRY_STATUS_COMPLETE,
- MPIDU_SCHED_ENTRY_STATUS_FAILED, /* indicates a failure occurred while executing the entry */
- MPIDU_SCHED_ENTRY_STATUS_INVALID /* indicates an invalid entry, or invalid status value */
-};
-
-/* Use a tagged union for schedule entries. Not always space optimal, but saves
- * lots of error-prone pointer arithmetic and makes scanning the schedule easy. */
-struct MPIDU_Sched_entry {
- enum MPIDU_Sched_entry_type type;
- enum MPIDU_Sched_entry_status status;
- int is_barrier;
- union {
- struct MPIDU_Sched_send send;
- struct MPIDU_Sched_recv recv;
- struct MPIDU_Sched_reduce reduce;
- struct MPIDU_Sched_copy copy;
- /* nop entries have no args */
- struct MPIDU_Sched_cb cb;
- } u;
-};
-
-struct MPIDU_Sched {
- size_t size; /* capacity (in entries) of the entries array */
- size_t idx; /* index into entries array of first yet-outstanding entry */
- int num_entries; /* number of populated entries, num_entries <= size */
- int tag;
- MPID_Request *req; /* really needed? could cause MT problems... */
- struct MPIDU_Sched_entry *entries;
-
- struct MPIDU_Sched *next; /* linked-list next pointer */
- struct MPIDU_Sched *prev; /* linked-list next pointer */
-};
-
-/* prototypes */
-int MPIDU_Sched_progress(int *made_progress);
-int MPIDU_Sched_are_pending(void);
-
-#endif /* !defined(MPID_SCHED_H_INCLUDED) */
diff --git a/src/mpid/common/sched/mpid_sched_pre.h b/src/mpid/common/sched/mpid_sched_pre.h
deleted file mode 100644
index 4fe5c7d..0000000
--- a/src/mpid/common/sched/mpid_sched_pre.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2011 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* this file should be included by the using device's mpidpre.h */
-
-#ifndef MPID_SCHED_PRE_H_INCLUDED
-#define MPID_SCHED_PRE_H_INCLUDED
-
-#define MPID_SCHED_NULL (NULL)
-struct MPIDU_Sched; /* forward decl, see mpidimpl.h for actual decl */
-typedef struct MPIDU_Sched * MPID_Sched_t;
-
-#endif /* !defined(MPID_SCHED_PRE_H_INCLUDED) */
diff --git a/src/mpid/common/sched/mpidu_sched.c b/src/mpid/common/sched/mpidu_sched.c
new file mode 100644
index 0000000..5225feb
--- /dev/null
+++ b/src/mpid/common/sched/mpidu_sched.c
@@ -0,0 +1,1067 @@
+/* -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2011 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpidimpl.h"
+#include "mpl_utlist.h"
+
+/* A random guess at an appropriate value, we can tune it later. It could also
+ * be a real tunable parameter. */
+#define MPIDU_SCHED_INITIAL_ENTRIES (16)
+
+#if 0
+#define dprintf fprintf
+#else
+/* FIXME this requires VA_ARGS macros */
+#define dprintf(...) do {} while (0)
+#endif
+
+/* helper macros to improve code readability */
+/* we pessimistically assume that MPI_DATATYPE_NULL may be passed as a "valid" type
+ * for send/recv when MPI_PROC_NULL is the destination/src */
+#ifndef dtype_add_ref_if_not_builtin
+#define dtype_add_ref_if_not_builtin(datatype_) \
+ do { \
+ if ((datatype_) != MPI_DATATYPE_NULL && \
+ HANDLE_GET_KIND((datatype_)) != HANDLE_KIND_BUILTIN) \
+ { \
+ MPIR_Datatype *dtp_ = NULL; \
+ MPID_Datatype_get_ptr((datatype_), dtp_); \
+ MPID_Datatype_add_ref(dtp_); \
+ } \
+ } while (0)
+#endif
+#ifndef dtype_release_if_not_builtin
+#define dtype_release_if_not_builtin(datatype_) \
+ do { \
+ if ((datatype_) != MPI_DATATYPE_NULL && \
+ HANDLE_GET_KIND((datatype_)) != HANDLE_KIND_BUILTIN) \
+ { \
+ MPIR_Datatype *dtp_ = NULL; \
+ MPID_Datatype_get_ptr((datatype_), dtp_); \
+ MPID_Datatype_release(dtp_); \
+ } \
+ } while (0)
+#endif
+
+/* TODO move to a header somewhere? */
+void MPIDU_Sched_dump(struct MPIDU_Sched *s);
+void MPIDU_Sched_dump_fh(struct MPIDU_Sched *s, FILE * fh);
+
+struct MPIDU_Sched_state {
+ struct MPIDU_Sched *head;
+ /* no need for a tail with utlist */
+};
+
+/* holds on to all incomplete schedules on which progress should be made */
+struct MPIDU_Sched_state all_schedules = { NULL };
+
+static int nbc_progress_hook_id = 0;
+
+/* returns TRUE if any schedules are currently pending completion by the
+ * progress engine, FALSE otherwise */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_are_pending
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_are_pending(void)
+{
+ return (all_schedules.head != NULL);
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_next_tag
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_next_tag(MPIR_Comm * comm_ptr, int *tag)
+{
+ int mpi_errno = MPI_SUCCESS;
+ /* TODO there should be an internal accessor/utility macro for getting the
+ * TAG_UB value that doesn't require using the attribute interface */
+ int tag_ub = MPIR_Process.attrs.tag_ub;
+#if defined(HAVE_ERROR_CHECKING)
+ int start = MPI_UNDEFINED;
+ int end = MPI_UNDEFINED;
+ struct MPIDU_Sched *elt = NULL;
+#endif
+
+ *tag = comm_ptr->next_sched_tag;
+ ++comm_ptr->next_sched_tag;
+
+#if defined(HAVE_ERROR_CHECKING)
+ /* Upon entry into the second half of the tag space, ensure there are no
+ * outstanding schedules still using the second half of the space. Check
+ * the first half similarly on wraparound. */
+ if (comm_ptr->next_sched_tag == (tag_ub / 2)) {
+ start = tag_ub / 2;
+ end = tag_ub;
+ }
+ else if (comm_ptr->next_sched_tag == (tag_ub)) {
+ start = MPIR_FIRST_NBC_TAG;
+ end = tag_ub / 2;
+ }
+ if (start != MPI_UNDEFINED) {
+ MPL_DL_FOREACH(all_schedules.head, elt) {
+ if (elt->tag >= start && elt->tag < end) {
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**toomanynbc");
+ }
+ }
+ }
+#endif
+
+ /* wrap the tag values around to the start, but don't allow it to conflict
+ * with the tags used by the blocking collectives */
+ if (comm_ptr->next_sched_tag == tag_ub) {
+ comm_ptr->next_sched_tag = MPIR_FIRST_NBC_TAG;
+ }
+
+ fn_fail:
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_start_entry
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* initiates the schedule entry "e" in the NBC described by "s", where
+ * "e" is at "idx" in "s". This means posting nonblocking sends/recvs,
+ * performing reductions, calling callbacks, etc. */
+static int MPIDU_Sched_start_entry(struct MPIDU_Sched *s, size_t idx, struct MPIDU_Sched_entry *e)
+{
+ int mpi_errno = MPI_SUCCESS, ret_errno = MPI_SUCCESS;
+ MPIR_Request *r = s->req;
+ MPIR_Comm *comm;
+
+ MPIR_Assert(e->status == MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED);
+
+ switch (e->type) {
+ case MPIDU_SCHED_ENTRY_SEND:
+ comm = e->u.send.comm;
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "starting SEND entry %d\n", (int) idx);
+ if (e->u.send.count_p) {
+ /* deferred send */
+ /* originally there was no branch and send.count_p was set to
+ * &send.count, but this requires patching up the pointers
+ * during realloc of entries, so this is easier */
+ ret_errno = MPIC_Isend(e->u.send.buf, *e->u.send.count_p, e->u.send.datatype,
+ e->u.send.dest, s->tag, comm, &e->u.send.sreq, &r->u.nbc.errflag);
+ }
+ else {
+ if (e->u.send.is_sync) {
+ ret_errno = MPIC_Issend(e->u.send.buf, e->u.send.count, e->u.send.datatype,
+ e->u.send.dest, s->tag, comm, &e->u.send.sreq, &r->u.nbc.errflag);
+ }
+ else {
+ ret_errno = MPIC_Isend(e->u.send.buf, e->u.send.count, e->u.send.datatype,
+ e->u.send.dest, s->tag, comm, &e->u.send.sreq, &r->u.nbc.errflag);
+ }
+ }
+ /* Check if the error is actually fatal to the NBC or we can continue. */
+ if (unlikely(ret_errno)) {
+ if (MPIR_ERR_NONE == r->u.nbc.errflag) {
+ if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
+ r->u.nbc.errflag = MPIR_ERR_PROC_FAILED;
+ }
+ else {
+ r->u.nbc.errflag = MPIR_ERR_OTHER;
+ }
+ }
+ e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "Sched SEND failed. Errflag: %d\n", (int) r->u.nbc.errflag);
+ }
+ else {
+ e->status = MPIDU_SCHED_ENTRY_STATUS_STARTED;
+ }
+ break;
+ case MPIDU_SCHED_ENTRY_RECV:
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "starting RECV entry %d\n", (int) idx);
+ comm = e->u.recv.comm;
+ ret_errno = MPIC_Irecv(e->u.recv.buf, e->u.recv.count, e->u.recv.datatype,
+ e->u.recv.src, s->tag, comm, &e->u.recv.rreq);
+ /* Check if the error is actually fatal to the NBC or we can continue. */
+ if (unlikely(ret_errno)) {
+ if (MPIR_ERR_NONE == r->u.nbc.errflag) {
+ if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
+ r->u.nbc.errflag = MPIR_ERR_PROC_FAILED;
+ }
+ else {
+ r->u.nbc.errflag = MPIR_ERR_OTHER;
+ }
+ }
+ /* We should set the status to failed here - since the request is not freed. this
+ * will be handled later in MPIDU_Sched_progress_state, so set to started here */
+ e->status = MPIDU_SCHED_ENTRY_STATUS_STARTED;
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "Sched RECV failed. Errflag: %d\n", (int) r->u.nbc.errflag);
+ }
+ else {
+ e->status = MPIDU_SCHED_ENTRY_STATUS_STARTED;
+ }
+ break;
+ case MPIDU_SCHED_ENTRY_REDUCE:
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "starting REDUCE entry %d\n", (int) idx);
+ mpi_errno =
+ MPIR_Reduce_local_impl(e->u.reduce.inbuf, e->u.reduce.inoutbuf, e->u.reduce.count,
+ e->u.reduce.datatype, e->u.reduce.op);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ if (HANDLE_GET_KIND(e->u.reduce.op) != HANDLE_KIND_BUILTIN) {
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(e->u.reduce.op, op_ptr);
+ MPIR_Op_release(op_ptr);
+ }
+ dtype_release_if_not_builtin(e->u.reduce.datatype);
+ e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
+ break;
+ case MPIDU_SCHED_ENTRY_COPY:
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "starting COPY entry %d\n", (int) idx);
+ mpi_errno = MPIR_Localcopy(e->u.copy.inbuf, e->u.copy.incount, e->u.copy.intype,
+ e->u.copy.outbuf, e->u.copy.outcount, e->u.copy.outtype);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ dtype_release_if_not_builtin(e->u.copy.intype);
+ dtype_release_if_not_builtin(e->u.copy.outtype);
+ e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
+ break;
+ case MPIDU_SCHED_ENTRY_NOP:
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "starting NOOP entry %d\n", (int) idx);
+ /* nothing to be done */
+ break;
+ case MPIDU_SCHED_ENTRY_CB:
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "starting CB entry %d\n", (int) idx);
+ if (e->u.cb.cb_type == MPIDU_SCHED_CB_TYPE_1) {
+ ret_errno = e->u.cb.u.cb_p(r->comm, s->tag, e->u.cb.cb_state);
+ /* Sched entries list can be reallocated inside callback */
+ e = &s->entries[idx];
+ if (unlikely(ret_errno)) {
+ if (MPIR_ERR_NONE == r->u.nbc.errflag) {
+ if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
+ r->u.nbc.errflag = MPIR_ERR_PROC_FAILED;
+ }
+ else {
+ r->u.nbc.errflag = MPIR_ERR_OTHER;
+ }
+ }
+ e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
+ }
+ else {
+ e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
+ }
+ }
+ else if (e->u.cb.cb_type == MPIDU_SCHED_CB_TYPE_2) {
+ ret_errno = e->u.cb.u.cb2_p(r->comm, s->tag, e->u.cb.cb_state, e->u.cb.cb_state2);
+ /* Sched entries list can be reallocated inside callback */
+ e = &s->entries[idx];
+ if (unlikely(ret_errno)) {
+ if (MPIR_ERR_NONE == r->u.nbc.errflag) {
+ if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(ret_errno)) {
+ r->u.nbc.errflag = MPIR_ERR_PROC_FAILED;
+ }
+ else {
+ r->u.nbc.errflag = MPIR_ERR_OTHER;
+ }
+ }
+ e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
+ }
+ else {
+ e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
+ }
+ }
+ else {
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, TYPICAL, "unknown callback type, e->u.cb.cb_type=%d",
+ e->u.cb.cb_type);
+ e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
+ }
+
+ break;
+ default:
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, TYPICAL, "unknown entry type, e->type=%d", e->type);
+ break;
+ }
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
+ if (r)
+ r->status.MPI_ERROR = mpi_errno;
+ goto fn_exit;
+}
+
+/* Posts or performs any NOT_STARTED operations in the given schedule that are
+ * permitted to be started. That is, this routine will respect schedule
+ * barriers appropriately. */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_continue
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDU_Sched_continue(struct MPIDU_Sched *s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t i;
+
+ for (i = s->idx; i < s->num_entries; ++i) {
+ struct MPIDU_Sched_entry *e = &s->entries[i];
+
+ if (e->status == MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED) {
+ mpi_errno = MPIDU_Sched_start_entry(s, i, e);
+ /* Sched entries list can be reallocated inside callback */
+ e = &s->entries[i];
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ /* _start_entry may have completed the operation, but won't update s->idx */
+ if (i == s->idx && e->status >= MPIDU_SCHED_ENTRY_STATUS_COMPLETE) {
+ ++s->idx; /* this is valid even for barrier entries */
+ }
+
+ /* watch the indexing, s->idx might have been incremented above, so
+ * ||-short-circuit matters here */
+ if (e->is_barrier && (e->status < MPIDU_SCHED_ENTRY_STATUS_COMPLETE || (s->idx != i + 1))) {
+ /* we've hit a barrier but outstanding operations before this
+ * barrier remain, so we cannot proceed past the barrier */
+ break;
+ }
+ }
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_create
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* creates a new opaque schedule object and returns a handle to it in (*sp) */
+int MPIDU_Sched_create(MPIR_Sched_t * sp)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched *s;
+ MPIR_CHKPMEM_DECL(2);
+
+ *sp = NULL;
+
+ /* this mem will be freed by the progress engine when the request is completed */
+ MPIR_CHKPMEM_MALLOC(s, struct MPIDU_Sched *, sizeof(struct MPIDU_Sched), mpi_errno,
+ "schedule object");
+
+ s->size = MPIDU_SCHED_INITIAL_ENTRIES;
+ s->idx = 0;
+ s->num_entries = 0;
+ s->tag = -1;
+ s->req = NULL;
+ s->entries = NULL;
+ s->next = NULL; /* only needed for sanity checks */
+ s->prev = NULL; /* only needed for sanity checks */
+
+ /* this mem will be freed by the progress engine when the request is completed */
+ MPIR_CHKPMEM_MALLOC(s->entries, struct MPIDU_Sched_entry *,
+ MPIDU_SCHED_INITIAL_ENTRIES * sizeof(struct MPIDU_Sched_entry), mpi_errno,
+ "schedule entries vector");
+
+ /* TODO in a debug build, defensively mark all entries as status=INVALID */
+
+ MPIR_CHKPMEM_COMMIT();
+ *sp = s;
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_clone
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* clones orig and returns a handle to the new schedule in (*cloned) */
+int MPIDU_Sched_clone(MPIR_Sched_t orig, MPIR_Sched_t * cloned)
+{
+ int mpi_errno = MPI_SUCCESS;
+ /* TODO implement this function for real */
+ MPIR_Assert_fmt_msg(FALSE, ("clone not yet implemented"));
+ MPIR_Assertp(FALSE);
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_start
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* sets (*sp) to MPIR_SCHED_NULL and gives you back a request pointer in (*req).
+ * The caller is giving up ownership of the opaque schedule object. */
+int MPIDU_Sched_start(MPIR_Sched_t * sp, MPIR_Comm * comm, int tag, MPIR_Request ** req)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_Request *r;
+ struct MPIDU_Sched *s = *sp;
+
+ *req = NULL;
+ *sp = MPIR_SCHED_NULL;
+
+ /* sanity check the schedule */
+ MPIR_Assert(s->num_entries <= s->size);
+ MPIR_Assert(s->num_entries == 0 || s->idx < s->num_entries);
+ MPIR_Assert(s->req == NULL);
+ MPIR_Assert(s->next == NULL);
+ MPIR_Assert(s->prev == NULL);
+ MPIR_Assert(s->entries != NULL);
+
+ /* now create and populate the request */
+ r = MPIR_Request_create(MPIR_REQUEST_KIND__COLL);
+ if (!r)
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
+ /* FIXME is this right when comm/datatype GC is used? */
+ MPIR_Comm_add_ref(comm);
+ r->comm = comm;
+ /* req refcount is currently 1, for the user's request. Increment for the
+ * schedule's reference */
+ MPIR_Request_add_ref(r);
+ s->req = r;
+ *req = r;
+ /* cc is 1, which is fine b/c we only use it as a signal, rather than
+ * incr/decr on every constituent operation */
+ s->tag = tag;
+
+ /* Now kick off any initial operations. Do this before we tell the progress
+ * engine about this req+sched, otherwise we have more MT issues to worry
+ * about. Skipping this step will increase latency. */
+ mpi_errno = MPIDU_Sched_continue(s);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ /* finally, enqueue in the list of all pending schedules so that the
+ * progress engine can make progress on it */
+ if (all_schedules.head == NULL) {
+ mpi_errno = MPID_Progress_register_hook(MPIDU_Sched_progress, &nbc_progress_hook_id);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ MPID_Progress_activate_hook(nbc_progress_hook_id);
+ }
+ MPL_DL_APPEND(all_schedules.head, s);
+
+ MPL_DBG_MSG_P(MPIR_DBG_COMM, TYPICAL, "started schedule s=%p\n", s);
+ MPIDU_Sched_dump(s);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ if (*req)
+ *req = NULL;
+ if (r) {
+ MPIR_Request_free(r); /* the schedule's ref */
+ MPIR_Request_free(r); /* the user's ref */
+ }
+
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_add_entry
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* idx and e are permitted to be NULL */
+static int MPIDU_Sched_add_entry(struct MPIDU_Sched *s, int *idx, struct MPIDU_Sched_entry **e)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int i;
+ struct MPIDU_Sched_entry *ei;
+
+ MPIR_Assert(s->entries != NULL);
+ MPIR_Assert(s->size > 0);
+
+ if (s->num_entries == s->size) {
+ /* need to grow the entries array */
+ s->entries = MPL_realloc(s->entries, 2 * s->size * sizeof(struct MPIDU_Sched_entry));
+ if (s->entries == NULL)
+ MPIR_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomem");
+ s->size *= 2;
+ }
+
+ i = s->num_entries++;
+ ei = &s->entries[i];
+
+ if (idx != NULL)
+ *idx = i;
+ if (e != NULL)
+ *e = ei;
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_send
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* do these ops need an entry handle returned? */
+int MPIDU_Sched_send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
+ MPIR_Comm * comm, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_SEND;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+
+ e->u.send.buf = buf;
+ e->u.send.count = count;
+ e->u.send.count_p = NULL;
+ e->u.send.datatype = datatype;
+ e->u.send.dest = dest;
+ e->u.send.sreq = NULL; /* will be populated by _start_entry */
+ e->u.send.comm = comm;
+ e->u.send.is_sync = FALSE;
+
+ /* the user may free the comm & type after initiating but before the
+ * underlying send is actually posted, so we must add a reference here and
+ * release it at entry completion time */
+ MPIR_Comm_add_ref(comm);
+ dtype_add_ref_if_not_builtin(datatype);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_ssend
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
+ MPIR_Comm * comm, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_SEND;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+
+ e->u.send.buf = buf;
+ e->u.send.count = count;
+ e->u.send.count_p = NULL;
+ e->u.send.datatype = datatype;
+ e->u.send.dest = dest;
+ e->u.send.sreq = NULL; /* will be populated by _start_entry */
+ e->u.send.comm = comm;
+ e->u.send.is_sync = TRUE;
+
+ /* the user may free the comm & type after initiating but before the
+ * underlying send is actually posted, so we must add a reference here and
+ * release it at entry completion time */
+ MPIR_Comm_add_ref(comm);
+ dtype_add_ref_if_not_builtin(datatype);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_send_defer
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_send_defer(const void *buf, const MPI_Aint * count, MPI_Datatype datatype, int dest,
+ MPIR_Comm * comm, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_SEND;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+
+ e->u.send.buf = buf;
+ e->u.send.count = MPI_UNDEFINED;
+ e->u.send.count_p = count;
+ e->u.send.datatype = datatype;
+ e->u.send.dest = dest;
+ e->u.send.sreq = NULL; /* will be populated by _start_entry */
+ e->u.send.comm = comm;
+ e->u.send.is_sync = FALSE;
+
+ /* the user may free the comm & type after initiating but before the
+ * underlying send is actually posted, so we must add a reference here and
+ * release it at entry completion time */
+ MPIR_Comm_add_ref(comm);
+ dtype_add_ref_if_not_builtin(datatype);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_recv_status
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_recv_status(void *buf, MPI_Aint count, MPI_Datatype datatype, int src,
+ MPIR_Comm * comm, MPI_Status * status, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_RECV;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+
+ e->u.recv.buf = buf;
+ e->u.recv.count = count;
+ e->u.recv.datatype = datatype;
+ e->u.recv.src = src;
+ e->u.recv.rreq = NULL; /* will be populated by _start_entry */
+ e->u.recv.comm = comm;
+ e->u.recv.status = status;
+ status->MPI_ERROR = MPI_SUCCESS;
+ MPIR_Comm_add_ref(comm);
+ dtype_add_ref_if_not_builtin(datatype);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_recv
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int src, MPIR_Comm * comm,
+ MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_RECV;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+
+ e->u.recv.buf = buf;
+ e->u.recv.count = count;
+ e->u.recv.datatype = datatype;
+ e->u.recv.src = src;
+ e->u.recv.rreq = NULL; /* will be populated by _start_entry */
+ e->u.recv.comm = comm;
+ e->u.recv.status = MPI_STATUS_IGNORE;
+
+ MPIR_Comm_add_ref(comm);
+ dtype_add_ref_if_not_builtin(datatype);
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_reduce
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_reduce(const void *inbuf, void *inoutbuf, MPI_Aint count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+ struct MPIDU_Sched_reduce *reduce = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_REDUCE;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+ reduce = &e->u.reduce;
+
+ reduce->inbuf = inbuf;
+ reduce->inoutbuf = inoutbuf;
+ reduce->count = count;
+ reduce->datatype = datatype;
+ reduce->op = op;
+
+ dtype_add_ref_if_not_builtin(datatype);
+ if (HANDLE_GET_KIND(op) != HANDLE_KIND_BUILTIN) {
+ MPIR_Op *op_ptr = NULL;
+ MPIR_Op_get_ptr(op, op_ptr);
+ MPIR_Op_add_ref(op_ptr);
+ }
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_copy
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* Schedules a copy of "incount" copies of "intype" from "inbuf" to "outbuf" as
+ * specified by "outcount" and "outtype". It is erroneous to attempt to copy
+ * more data than will fit into the (outbuf,outcount,outtype)-triple. This
+ * corresponds naturally with the buffer sizing rules for send-recv.
+ *
+ * Packing/unpacking can be accomplished by passing MPI_PACKED as either intype
+ * or outtype. */
+int MPIDU_Sched_copy(const void *inbuf, MPI_Aint incount, MPI_Datatype intype,
+ void *outbuf, MPI_Aint outcount, MPI_Datatype outtype, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+ struct MPIDU_Sched_copy *copy = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_COPY;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+ copy = &e->u.copy;
+
+ copy->inbuf = inbuf;
+ copy->incount = incount;
+ copy->intype = intype;
+ copy->outbuf = outbuf;
+ copy->outcount = outcount;
+ copy->outtype = outtype;
+
+ dtype_add_ref_if_not_builtin(intype);
+ dtype_add_ref_if_not_builtin(outtype);
+
+ /* some sanity checking up front */
+#if defined(HAVE_ERROR_CHECKING) && !defined(NDEBUG)
+ {
+ MPI_Aint intype_size, outtype_size;
+ MPID_Datatype_get_size_macro(intype, intype_size);
+ MPID_Datatype_get_size_macro(outtype, outtype_size);
+ if (incount * intype_size > outcount * outtype_size) {
+ MPL_error_printf("truncation: intype=%#x, intype_size=" MPI_AINT_FMT_DEC_SPEC ", incount=" MPI_AINT_FMT_DEC_SPEC ", outtype=%#x, outtype_size=" MPI_AINT_FMT_DEC_SPEC " outcount=" MPI_AINT_FMT_DEC_SPEC "\n",
+ intype, intype_size,
+ incount, outtype,
+ outtype_size, outcount);
+ }
+ }
+#endif
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* require that all previously added ops are complete before subsequent ops
+ * may begin to execute */
+int MPIDU_Sched_barrier(MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ /* mark the previous entry as a barrier unless we're at the beginning, which
+ * would be a pointless barrier */
+ if (s->num_entries > 0) {
+ s->entries[s->num_entries - 1].is_barrier = TRUE;
+ }
+
+ return mpi_errno;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_cb
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* buffer management, fancy reductions, etc */
+int MPIDU_Sched_cb(MPIR_Sched_cb_t * cb_p, void *cb_state, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+ struct MPIDU_Sched_cb *cb = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_CB;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+ cb = &e->u.cb;
+
+ cb->cb_type = MPIDU_SCHED_CB_TYPE_1;
+ cb->u.cb_p = cb_p;
+ cb->cb_state = cb_state;
+ cb->cb_state2 = NULL;
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_cb2
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* buffer management, fancy reductions, etc */
+int MPIDU_Sched_cb2(MPIR_Sched_cb2_t * cb_p, void *cb_state, void *cb_state2, MPIR_Sched_t s)
+{
+ int mpi_errno = MPI_SUCCESS;
+ struct MPIDU_Sched_entry *e = NULL;
+ struct MPIDU_Sched_cb *cb = NULL;
+
+ mpi_errno = MPIDU_Sched_add_entry(s, NULL, &e);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+
+ e->type = MPIDU_SCHED_ENTRY_CB;
+ e->status = MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED;
+ e->is_barrier = FALSE;
+ cb = &e->u.cb;
+
+ cb->cb_type = MPIDU_SCHED_CB_TYPE_2;
+ cb->u.cb2_p = cb_p;
+ cb->cb_state = cb_state;
+ cb->cb_state2 = cb_state2;
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+
+/* returns TRUE in (*made_progress) if any of the outstanding schedules in state completed */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_progress_state
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int MPIDU_Sched_progress_state(struct MPIDU_Sched_state *state, int *made_progress)
+{
+ int mpi_errno = MPI_SUCCESS;
+ size_t i;
+ struct MPIDU_Sched *s;
+ struct MPIDU_Sched *tmp;
+ if (made_progress)
+ *made_progress = FALSE;
+
+ MPL_DL_FOREACH_SAFE(state->head, s, tmp) {
+ /*MPIDU_Sched_dump(s); */
+
+ for (i = s->idx; i < s->num_entries; ++i) {
+ struct MPIDU_Sched_entry *e = &s->entries[i];
+
+ switch (e->type) {
+ case MPIDU_SCHED_ENTRY_SEND:
+ if (e->u.send.sreq != NULL && MPIR_Request_is_complete(e->u.send.sreq)) {
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST, "completed SEND entry %d, sreq=%p\n", (int) i,
+ e->u.send.sreq));
+ if (s->req->u.nbc.errflag != MPIR_ERR_NONE)
+ e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
+ else
+ e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
+ MPIR_Request_free(e->u.send.sreq);
+ e->u.send.sreq = NULL;
+ MPIR_Comm_release(e->u.send.comm);
+ dtype_release_if_not_builtin(e->u.send.datatype);
+ }
+ break;
+ case MPIDU_SCHED_ENTRY_RECV:
+ if (e->u.recv.rreq != NULL && MPIR_Request_is_complete(e->u.recv.rreq)) {
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST, "completed RECV entry %d, rreq=%p\n", (int) i,
+ e->u.recv.rreq));
+ MPIR_Process_status(&e->u.recv.rreq->status, &s->req->u.nbc.errflag);
+ if (e->u.recv.status != MPI_STATUS_IGNORE) {
+ int recvd;
+ e->u.recv.status->MPI_ERROR = e->u.recv.rreq->status.MPI_ERROR;
+ MPIR_Get_count_impl(&e->u.recv.rreq->status, MPI_BYTE, &recvd);
+ MPIR_STATUS_SET_COUNT(*(e->u.recv.status), recvd);
+ }
+ if (s->req->u.nbc.errflag != MPIR_ERR_NONE)
+ e->status = MPIDU_SCHED_ENTRY_STATUS_FAILED;
+ else
+ e->status = MPIDU_SCHED_ENTRY_STATUS_COMPLETE;
+ MPIR_Request_free(e->u.recv.rreq);
+ e->u.recv.rreq = NULL;
+ MPIR_Comm_release(e->u.recv.comm);
+ dtype_release_if_not_builtin(e->u.recv.datatype);
+ }
+ break;
+ default:
+ /* all other entry types don't have any sub-requests that
+ * need to be checked */
+ break;
+ }
+
+ if (i == s->idx && e->status >= MPIDU_SCHED_ENTRY_STATUS_COMPLETE) {
+ ++s->idx;
+ MPL_DBG_MSG_D(MPIR_DBG_COMM, VERBOSE, "completed OTHER entry %d\n", (int) i);
+ if (e->is_barrier) {
+ /* post/perform the next round of operations */
+ mpi_errno = MPIDU_Sched_continue(s);
+ if (mpi_errno)
+ MPIR_ERR_POP(mpi_errno);
+ }
+ }
+ else if (e->is_barrier && e->status < MPIDU_SCHED_ENTRY_STATUS_COMPLETE) {
+ /* don't process anything after this barrier entry */
+ break;
+ }
+ }
+
+ if (s->idx == s->num_entries) {
+ MPL_DBG_MSG_FMT(MPIR_DBG_COMM, VERBOSE,
+ (MPL_DBG_FDEST, "completing and dequeuing s=%p r=%p\n", s, s->req));
+
+ /* dequeue this schedule from the state, it's complete */
+ MPL_DL_DELETE(state->head, s);
+
+ /* TODO refactor into a sched_complete routine? */
+ switch (s->req->u.nbc.errflag) {
+ case MPIR_ERR_PROC_FAILED:
+ MPIR_ERR_SET(s->req->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**comm");
+ break;
+ case MPIR_ERR_OTHER:
+ MPIR_ERR_SET(s->req->status.MPI_ERROR, MPI_ERR_OTHER, "**comm");
+ break;
+ case MPIR_ERR_NONE:
+ default:
+ break;
+ }
+
+ mpi_errno = MPID_Request_complete(s->req);
+ if (mpi_errno != MPI_SUCCESS) {
+ MPIR_ERR_POP(mpi_errno);
+ }
+
+ s->req = NULL;
+ MPL_free(s->entries);
+ MPL_free(s);
+
+ if (made_progress)
+ *made_progress = TRUE;
+ }
+ }
+
+ fn_exit:
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+/* returns TRUE in (*made_progress) if any of the outstanding schedules completed */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_progress
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_Sched_progress(int *made_progress)
+{
+ int mpi_errno;
+
+ mpi_errno = MPIDU_Sched_progress_state(&all_schedules, made_progress);
+ if (!mpi_errno && all_schedules.head == NULL) {
+ MPID_Progress_deactivate_hook(nbc_progress_hook_id);
+ MPID_Progress_deregister_hook(nbc_progress_hook_id);
+ }
+
+ return mpi_errno;
+}
+
+static const char *entry_to_str(enum MPIDU_Sched_entry_type type) ATTRIBUTE((unused, used));
+static const char *entry_to_str(enum MPIDU_Sched_entry_type type)
+{
+ switch (type) {
+ case MPIDU_SCHED_ENTRY_SEND:
+ return "SEND";
+ case MPIDU_SCHED_ENTRY_RECV:
+ return "RECV";
+ case MPIDU_SCHED_ENTRY_REDUCE:
+ return "REDUCE";
+ case MPIDU_SCHED_ENTRY_COPY:
+ return "COPY";
+ case MPIDU_SCHED_ENTRY_NOP:
+ return "NOP";
+ case MPIDU_SCHED_ENTRY_CB:
+ return "CB";
+ default:
+ return "(out of range)";
+ }
+}
+
+/* utility function for debugging, dumps the given schedule object to fh */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_dump_fh
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+void MPIDU_Sched_dump_fh(struct MPIDU_Sched *s, FILE * fh)
+{
+ int i;
+ dprintf(fh, "--------------------------------\n");
+ dprintf(fh, "s=%p\n", s);
+ if (s) {
+ dprintf(fh, "s->size=%zd\n", s->size);
+ dprintf(fh, "s->idx=%zd\n", s->idx);
+ dprintf(fh, "s->num_entries=%d\n", s->num_entries);
+ dprintf(fh, "s->tag=%d\n", s->tag);
+ dprintf(fh, "s->req=%p\n", s->req);
+ dprintf(fh, "s->entries=%p\n", s->entries);
+ for (i = 0; i < s->num_entries; ++i) {
+ dprintf(fh, "&s->entries[%d]=%p\n", i, &s->entries[i]);
+ dprintf(fh, "s->entries[%d].type=%s\n", i, entry_to_str(s->entries[i].type));
+ dprintf(fh, "s->entries[%d].status=%d\n", i, s->entries[i].status);
+ dprintf(fh, "s->entries[%d].is_barrier=%s\n", i,
+ (s->entries[i].is_barrier ? "TRUE" : "FALSE"));
+ }
+ }
+ dprintf(fh, "--------------------------------\n");
+ /*
+ * dprintf(fh, "s->next=%p\n", s->next);
+ * dprintf(fh, "s->prev=%p\n", s->prev);
+ */
+}
+
+/* utility function for debugging, dumps the given schedule object to stderr */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_Sched_dump
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+void MPIDU_Sched_dump(struct MPIDU_Sched *s)
+{
+ MPIDU_Sched_dump_fh(s, stderr);
+}
diff --git a/src/mpid/common/sched/mpidu_sched.h b/src/mpid/common/sched/mpidu_sched.h
new file mode 100644
index 0000000..4673cc8
--- /dev/null
+++ b/src/mpid/common/sched/mpidu_sched.h
@@ -0,0 +1,141 @@
+/* -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2011 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIDU_SCHED_H_INCLUDED
+#define MPIDU_SCHED_H_INCLUDED
+
+//#include "mpidu_pre.h"
+/* FIXME open questions:
+ * - Should the schedule hold a pointer to the nbc request and the nbc request
+ * hold a pointer to the schedule? This could cause MT issues.
+ */
+#include "mpidu_pre.h"
+
+enum MPIDU_Sched_entry_type {
+ MPIDU_SCHED_ENTRY_INVALID_LB = 0,
+ MPIDU_SCHED_ENTRY_SEND,
+ /* _SEND_DEFER is easily implemented via _SEND */
+ MPIDU_SCHED_ENTRY_RECV,
+ /* _RECV_STATUS is easily implemented via _RECV */
+ MPIDU_SCHED_ENTRY_REDUCE,
+ MPIDU_SCHED_ENTRY_COPY,
+ MPIDU_SCHED_ENTRY_NOP,
+ MPIDU_SCHED_ENTRY_CB,
+ MPIDU_SCHED_ENTRY_INVALID_UB
+};
+
+struct MPIDU_Sched_send {
+ const void *buf;
+ MPI_Aint count;
+ const MPI_Aint *count_p;
+ MPI_Datatype datatype;
+ int dest;
+ struct MPIR_Comm *comm;
+ struct MPIR_Request *sreq;
+ int is_sync; /* TRUE iff this send is an ssend */
+};
+
+struct MPIDU_Sched_recv {
+ void *buf;
+ MPI_Aint count;
+ MPI_Datatype datatype;
+ int src;
+ struct MPIR_Comm *comm;
+ struct MPIR_Request *rreq;
+ MPI_Status *status;
+};
+
+struct MPIDU_Sched_reduce {
+ const void *inbuf;
+ void *inoutbuf;
+ MPI_Aint count;
+ MPI_Datatype datatype;
+ MPI_Op op;
+};
+
+struct MPIDU_Sched_copy {
+ const void *inbuf;
+ MPI_Aint incount;
+ MPI_Datatype intype;
+ void *outbuf;
+ MPI_Aint outcount;
+ MPI_Datatype outtype;
+};
+
+/* nop entries have no args, so no structure is needed */
+
+enum MPIDU_Sched_cb_type {
+ MPIDU_SCHED_CB_TYPE_1 = 0, /* single state arg type --> MPIR_Sched_cb_t */
+ MPIDU_SCHED_CB_TYPE_2 /* double state arg type --> MPIR_Sched_cb2_t */
+};
+
+struct MPIDU_Sched_cb {
+ enum MPIDU_Sched_cb_type cb_type;
+ union {
+ MPIR_Sched_cb_t *cb_p;
+ MPIR_Sched_cb2_t *cb2_p;
+ } u;
+ void *cb_state;
+ void *cb_state2; /* unused for single-param callbacks */
+};
+
+enum MPIDU_Sched_entry_status {
+ MPIDU_SCHED_ENTRY_STATUS_NOT_STARTED = 0,
+ MPIDU_SCHED_ENTRY_STATUS_STARTED,
+ MPIDU_SCHED_ENTRY_STATUS_COMPLETE,
+ MPIDU_SCHED_ENTRY_STATUS_FAILED, /* indicates a failure occurred while executing the entry */
+ MPIDU_SCHED_ENTRY_STATUS_INVALID /* indicates an invalid entry, or invalid status value */
+};
+
+/* Use a tagged union for schedule entries. Not always space optimal, but saves
+ * lots of error-prone pointer arithmetic and makes scanning the schedule easy. */
+struct MPIDU_Sched_entry {
+ enum MPIDU_Sched_entry_type type;
+ enum MPIDU_Sched_entry_status status;
+ int is_barrier;
+ union {
+ struct MPIDU_Sched_send send;
+ struct MPIDU_Sched_recv recv;
+ struct MPIDU_Sched_reduce reduce;
+ struct MPIDU_Sched_copy copy;
+ /* nop entries have no args */
+ struct MPIDU_Sched_cb cb;
+ } u;
+};
+
+struct MPIDU_Sched {
+ size_t size; /* capacity (in entries) of the entries array */
+ size_t idx; /* index into entries array of first yet-outstanding entry */
+ int num_entries; /* number of populated entries, num_entries <= size */
+ int tag;
+ struct MPIR_Request *req; /* really needed? could cause MT problems... */
+ struct MPIDU_Sched_entry *entries;
+
+ struct MPIDU_Sched *next; /* linked-list next pointer */
+ struct MPIDU_Sched *prev; /* linked-list next pointer */
+};
+
+/* prototypes */
+int MPIDU_Sched_progress(int *made_progress);
+int MPIDU_Sched_are_pending(void);
+int MPIDU_Sched_next_tag(struct MPIR_Comm *comm_ptr, int *tag);
+int MPIDU_Sched_create(MPIR_Sched_t * sp);
+int MPIDU_Sched_clone(MPIR_Sched_t orig, MPIR_Sched_t * cloned);
+int MPIDU_Sched_start(MPIR_Sched_t * sp, struct MPIR_Comm *comm, int tag,
+ struct MPIR_Request **req);
+int MPIDU_Sched_send(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
+ struct MPIR_Comm *comm, MPIR_Sched_t s);
+int MPIDU_Sched_recv(void *buf, MPI_Aint count, MPI_Datatype datatype, int src,
+ struct MPIR_Comm *comm, MPIR_Sched_t s);
+int MPIR_Sched_ssend(const void *buf, MPI_Aint count, MPI_Datatype datatype, int dest,
+ struct MPIR_Comm *comm, MPIR_Sched_t s);
+int MPIR_Sched_reduce(const void *inbuf, void *inoutbuf, MPI_Aint count, MPI_Datatype datatype,
+ MPI_Op op, MPIR_Sched_t s);
+int MPIDU_Sched_copy(const void *inbuf, MPI_Aint incount, MPI_Datatype intype, void *outbuf,
+ MPI_Aint outcount, MPI_Datatype outtype, MPIR_Sched_t s);
+int MPIDU_Sched_barrier(MPIR_Sched_t s);
+
+#endif /* !defined(MPIDU_SCHED_H_INCLUDED) */
diff --git a/src/mpid/common/shm/.state-cache b/src/mpid/common/shm/.state-cache
new file mode 100644
index 0000000..0e076c5
--- /dev/null
+++ b/src/mpid/common/shm/.state-cache
@@ -0,0 +1,28 @@
+<dir>
+<file name="mpidu_shm.h" info="1478973152"/>
+<file name="mpidu_generic_queue.h" info="1478973152"/>
+<file name="mpidu_shm_barrier.c" info="1478973152"/>
+<file name="mpidu_shm_impl.h" info="1478973152"/>
+<file name="mpidu_shm_states.h" info="1478973152"/>
+<file name="mpidu_shm_alloc.c" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="mpidu_shm.h">
+</fileinfo>
+<fileinfo name="mpidu_generic_queue.h">
+</fileinfo>
+<fileinfo name="mpidu_shm_barrier.c">
+MPID_STATE_MPIDU_SHM_BARRIER_INIT MPIDU_shm_barrier_init
+MPID_STATE_MPIDU_SHM_BARRIER MPIDU_shm_barrier
+</fileinfo>
+<fileinfo name="mpidu_shm_impl.h">
+</fileinfo>
+<fileinfo name="mpidu_shm_states.h">
+</fileinfo>
+<fileinfo name="mpidu_shm_alloc.c">
+MPID_STATE_MPIDU_SHM_SEG_ALLOC MPIDU_shm_seg_alloc
+MPID_STATE_MPIDU_SHM_SEG_COMMIT MPIDU_shm_seg_commit
+MPID_STATE_MPIDU_SHM_SEG_DESTROY MPIDU_shm_seg_destroy
+MPID_STATE_MPIDU_SHM_CHECK_ALLOC check_alloc
+</fileinfo>
+</data>
diff --git a/src/mpid/common/shm/Makefile.mk b/src/mpid/common/shm/Makefile.mk
new file mode 100644
index 0000000..8c044fd
--- /dev/null
+++ b/src/mpid/common/shm/Makefile.mk
@@ -0,0 +1,22 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+if BUILD_MPID_COMMON_SHM
+
+mpi_core_sources += \
+ src/mpid/common/shm/mpidu_shm_alloc.c \
+ src/mpid/common/shm/mpidu_shm_barrier.c
+
+# there are no AC_OUTPUT_FILES headers, so builddir is unnecessary
+AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/common/shm
+
+noinst_HEADERS += \
+ src/mpid/common/shm/mpidu_generic_queue.h \
+ src/mpid/common/shm/mpidu_shm_impl.h \
+ src/mpid/common/shm/mpidu_shm.h
+
+endif BUILD_MPID_COMMON_SHM
diff --git a/src/mpid/common/shm/mpidu_generic_queue.h b/src/mpid/common/shm/mpidu_generic_queue.h
new file mode 100644
index 0000000..9332214
--- /dev/null
+++ b/src/mpid/common/shm/mpidu_generic_queue.h
@@ -0,0 +1,339 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIDU_SHM_GENERIC_QUEUE_H
+#define MPIDU_SHM_GENERIC_QUEUE_H
+
+/* Generic queue macros -- "next_field" should be set to the name of
+ the next pointer field in the element (e.g., "ch.tcp_sendq_next") */
+
+#define PRINT_QUEUE(qp, next_field) do { \
+ } while(0)
+#define PRINTM_QUEUE(qp, next_field_macro, next_field) do { \
+ } while(0)
+
+#define GENERIC_Q_DECL(type) struct { type *head, *tail; }
+
+#define GENERIC_Q_EMPTY(q) ((q).head == NULL)
+
+#define GENERIC_Q_HEAD(q) ((q).head)
+
+#define GENERIC_Q_ENQUEUE_EMPTY(qp, ep, next_field) do { \
+ MPIR_Assert (GENERIC_Q_EMPTY (*(qp))); \
+ (qp)->head = (qp)->tail = ep; \
+ (ep)->next_field = NULL; \
+ PRINT_QUEUE (qp, next_field); \
+ } while (0)
+
+#define GENERIC_Q_ENQUEUE(qp, ep, next_field) do { \
+ if (GENERIC_Q_EMPTY (*(qp))) \
+ GENERIC_Q_ENQUEUE_EMPTY (qp, ep, next_field); \
+ else \
+ { \
+ (qp)->tail->next_field = ep; \
+ (qp)->tail = ep; \
+ (ep)->next_field = NULL; \
+ } \
+ PRINT_QUEUE (qp, next_field); \
+ } while (0)
+
+#define GENERIC_Q_ENQUEUE_AT_HEAD(qp, ep, next_field) do { \
+ if (GENERIC_Q_EMPTY (*(qp))) \
+ GENERIC_Q_ENQUEUE_EMPTY (qp, ep, next_field); \
+ else \
+ { \
+ (ep)->next_field = (qp)->head; \
+ (qp)->head = ep; \
+ } \
+ PRINT_QUEUE (qp, next_field); \
+ } while (0)
+
+/* the _MULTIPLE routines assume that ep0 is the head and ep1 is the
+ tail of a linked list of elements. The list is inserted on the end
+ of the queue. */
+#define GENERIC_Q_ENQUEUE_EMPTY_MULTIPLE(qp, ep0, ep1, next_field) do { \
+ MPIR_Assert (GENERIC_Q_EMPTY (*(qp))); \
+ (qp)->head = ep0; \
+ (qp)->tail = ep1; \
+ (ep1)->next_field = NULL; \
+ } while (0)
+
+#define GENERIC_Q_ENQUEUE_MULTIPLE(qp, ep0, ep1, next_field) do { \
+ if (GENERIC_Q_EMPTY (*(qp))) \
+ GENERIC_Q_ENQUEUE_EMPTY_MULTIPLE (qp, ep0, ep1, next_field); \
+ else \
+ { \
+ (qp)->tail->next_field = ep0; \
+ (qp)->tail = ep1; \
+ (ep1)->next_field = NULL; \
+ } \
+ } while (0)
+
+
+#define GENERIC_Q_DEQUEUE(qp, epp, next_field) do { \
+ MPIR_Assert (!GENERIC_Q_EMPTY (*(qp))); \
+ *(epp) = (qp)->head; \
+ (qp)->head = (*(epp))->next_field; \
+ if ((qp)->head == NULL) \
+ (qp)->tail = NULL; \
+ PRINT_QUEUE (qp, next_field); \
+ } while (0)
+
+/* remove the elements from the top of the queue starting with ep0 through ep1 */
+#define GENERIC_Q_REMOVE_ELEMENTS(qp, ep0, ep1, next_field) do { \
+ MPIR_Assert (GENERIC_Q_HEAD (*(qp)) == (ep0)); \
+ (qp)->head = (ep1)->next_field; \
+ if ((qp)->head == NULL) \
+ (qp)->tail = NULL; \
+ } while (0)
+
+/* search for element satisfying a predicate */
+/* the predicate "pred" is any legal c conditional */
+/* the current element can be accessed in the predicate with the _e
+ variable e.g.: "_e->foo == NULL" */
+#define GENERIC_Q_SEARCH(qp, pred, epp, el_type, next_field) do { \
+ el_type *_e; \
+ *(epp) = NULL; \
+ _e = GENERIC_Q_HEAD(*(qp)); \
+ while (_e) \
+ { \
+ if (pred) \
+ { \
+ *(epp) = _e; \
+ break; \
+ } \
+ _e = _e->next_field; \
+ } \
+} while (0)
+
+/* search for element satisfying a predicate and remove it from the queue */
+#define GENERIC_Q_SEARCH_REMOVE(qp, pred, epp, el_type, next_field) do { \
+ el_type *_e; \
+ el_type *_prev; \
+ if (GENERIC_Q_EMPTY(*(qp))) { \
+ *(epp) = NULL; \
+ break; \
+ } \
+ _e = GENERIC_Q_HEAD(*(qp)); \
+ if (pred) \
+ { \
+ GENERIC_Q_DEQUEUE(qp, epp, next_field); \
+ } \
+ else \
+ { \
+ while (1) \
+ { \
+ _prev = _e; \
+ _e = _e->next_field; \
+ \
+ if (_e == NULL) \
+ { \
+ *(epp) = NULL; \
+ break; \
+ } \
+ \
+ if (pred) \
+ { \
+ *(epp) = _e; \
+ _prev->next_field = _e->next_field; \
+ if ((qp)->tail == _e) \
+ (qp)->tail = _prev; \
+ break; \
+ } \
+ } \
+ } \
+} while (0)
+
+
+/* queue macros that use another macro to find the 'next' field, e.g.,
+ when the next field is in the channel private area of a request.
+ The macro is of the form "macro_name(element_ptr, next_field)"*/
+#define GENERICM_Q_DECL(type, q_name) typedef struct { type *head, *tail; } q_name;
+
+#define GENERICM_Q_EMPTY(q) ((q).head == NULL)
+
+#define GENERICM_Q_HEAD(q) ((q).head)
+
+#define GENERICM_Q_ENQUEUE_EMPTY(qp, ep, next_field_macro, next_field) do { \
+ MPIR_Assert (GENERICM_Q_EMPTY (*(qp))); \
+ (qp)->head = (qp)->tail = ep; \
+ next_field_macro(ep, next_field) = NULL; \
+ PRINTM_QUEUE (qp, next_field_macro, next_field); \
+ } while (0)
+
+#define GENERICM_Q_ENQUEUE(qp, ep, next_field_macro, next_field) do { \
+ if (GENERICM_Q_EMPTY (*(qp))) \
+ GENERICM_Q_ENQUEUE_EMPTY (qp, ep, next_field_macro, next_field); \
+ else \
+ { \
+ next_field_macro((qp)->tail, next_field) = ep; \
+ (qp)->tail = ep; \
+ next_field_macro(ep, next_field) = NULL; \
+ } \
+ PRINTM_QUEUE (qp, next_field_macro, next_field); \
+ } while (0)
+
+#define GENERICM_Q_ENQUEUE_AT_HEAD(qp, ep, next_field_macro, next_field) do { \
+ if (GENERICM_Q_EMPTY (*(qp))) \
+ GENERICM_Q_ENQUEUE_EMPTY (qp, ep, next_field_macro, next_field); \
+ else \
+ { \
+ next_field_macro(ep, next_field) = (qp)->head; \
+ (qp)->head = ep; \
+ } \
+ PRINTM_QUEUE (qp, next_field_macro, next_field); \
+ } while (0)
+
+/* the _MULTIPLE routines assume that ep0 is the head and ep1 is the
+ tail of a linked list of elements. The list is inserted on the end
+ of the queue. */
+#define GENERICM_Q_ENQUEUE_EMPTY_MULTIPLE(qp, ep0, ep1, next_field_macro, next_field) do { \
+ MPIR_Assert (GENERICM_Q_EMPTY (*(qp))); \
+ (qp)->head = ep0; \
+ (qp)->tail = ep1; \
+ next_field_macro(ep1, next_field) = NULL; \
+ } while (0)
+
+#define GENERICM_Q_ENQUEUE_MULTIPLE(qp, ep0, ep1, next_field_macro, next_field) do { \
+ if (GENERICM_Q_EMPTY (*(qp))) \
+ GENERICM_Q_ENQUEUE_EMPTY_MULTIPLE (qp, ep0, ep1, next_field_macro, next_field); \
+ else \
+ { \
+ next_field_macro((qp)->tail, next_field) = ep0; \
+ (qp)->tail = ep1; \
+ next_field_macro(ep1, next_field) = NULL; \
+ } \
+ } while (0)
+
+
+#define GENERICM_Q_DEQUEUE(qp, epp, next_field_macro, next_field) do { \
+ MPIR_Assert (!GENERICM_Q_EMPTY (*(qp))); \
+ *(epp) = (qp)->head; \
+ (qp)->head = next_field_macro(*(epp), next_field); \
+ if ((qp)->head == NULL) \
+ (qp)->tail = NULL; \
+ } while (0)
+
+/* remove the elements from the top of the queue starting with ep0 through ep1 */
+#define GENERICM_Q_REMOVE_ELEMENTS(qp, ep0, ep1, next_field_macro, next_field) do { \
+ MPIR_Assert (GENERICM_Q_HEAD (*(qp)) == (ep0)); \
+ (qp)->head = next_field_macro(ep1, next_field); \
+ if ((qp)->head == NULL) \
+ (qp)->tail = NULL; \
+ } while (0)
+
+/* search for element satisfying a predicate */
+/* the predicate "pred" is any legal c conditional */
+/* the current element can be accessed in the predicate with the _e
+ variable e.g.: "_e->foo == NULL" */
+#define GENERICM_Q_SEARCH(qp, pred, epp, el_type, next_field_macro, next_field) do { \
+ el_type *_e; \
+ *(epp) = NULL; \
+ _e = GENERICM_Q_HEAD(*(qp)); \
+ while (_e) \
+ { \
+ if (pred) \
+ { \
+ *(epp) = _e; \
+ break; \
+ } \
+ _e = next_field_macro(_e, next_field); \
+ } \
+ } while (0)
+
+/* search for element satisfying a predicate and remove it from the queue */
+#define GENERICM_Q_SEARCH_REMOVE(qp, pred, epp, el_type, next_field_macro, next_field) do { \
+ el_type *_e; \
+ el_type *_prev; \
+ if (GENERICM_Q_EMPTY(*(qp))) \
+ *(epp) = NULL; \
+ _e = GENERICM_Q_HEAD(*(qp)); \
+ if (pred) \
+ { \
+ GENERICM_Q_DEQUEUE(qp, epp, next_field_macro, next_field); \
+ } \
+ else \
+ { \
+ while (1) \
+ { \
+ _prev = _e; \
+ _e = next_field_macro(_e, next_field); \
+ \
+ if (_e == NULL) \
+ { \
+ *(epp) = NULL; \
+ break; \
+ } \
+ \
+ if (pred) \
+ { \
+ *(epp) = _e; \
+ _prev->next = _e->next; \
+ if ((qp)->tail == _e) \
+ (qp)->tail = _prev; \
+ break; \
+ } \
+ } \
+ } \
+ } while (0)
+
+
+/* Generic list macros */
+#define GENERIC_L_EMPTY(q) ((q).head == NULL)
+
+#define GENERIC_L_HEAD(q) ((q).head)
+
+#define GENERIC_L_ADD_EMPTY(qp, ep, next_field, prev_field) do { \
+ MPIR_Assert (GENERIC_L_EMPTY (*(qp))); \
+ (qp)->head = ep; \
+ (ep)->next_field = (ep)->prev_field = NULL; \
+ } while (0)
+
+#define GENERIC_L_ADD(qp, ep, next_field, prev_field) do { \
+ if (GENERIC_L_EMPTY (*(qp))) \
+ GENERIC_L_ADD_EMPTY (qp, ep, next_field, prev_field); \
+ else \
+ { \
+ (ep)->prev_field = NULL; \
+ (ep)->next_field = (qp)->head; \
+ (qp)->head->prev_field = ep; \
+ (qp)->head = ep; \
+ } \
+ } while (0)
+
+#define GENERIC_L_REMOVE(qp, ep, next_field, prev_field) do { \
+ MPIR_Assert (!GENERIC_L_EMPTY (*(qp))); \
+ if ((ep)->prev_field) \
+ ((ep)->prev_field)->next_field = (ep)->next_field; \
+ else \
+ (qp)->head = (ep)->next_field; \
+ if ((ep)->next_field) \
+ ((ep)->next_field)->prev_field = (ep)->prev_field; \
+ } while (0)
+
+
+/* Generic stack macros */
+#define GENERIC_S_EMPTY(s) ((s).top == NULL)
+
+#define GENERIC_S_TOP(s) ((s).top)
+
+#define GENERIC_S_PUSH(sp, ep, next_field) do { \
+ (ep)->next_field = (sp)->top; \
+ (sp)->top = ep; \
+ } while (0)
+
+/* PUSH_MULTIPLE pushes a linked list of elements onto the stack. It
+ assumes that ep0 is the head of the linked list and ep1 is at the tail */
+#define GENERIC_S_PUSH_MULTIPLE(sp, ep0, ep1, next_field) do { \
+ (ep1)->next_field = (sp)->top; \
+ (sp)->top = ep0; \
+ } while (0)
+
+#define GENERIC_S_POP(sp, epp, next_field) do { \
+ *(epp) = (sp)->top; \
+ (sp)->top = (*(epp))->next_field; \
+ } while (0)
+#endif /* MPIDU_SHM_GENERIC_QUEUE_H */
diff --git a/src/mpid/common/shm/mpidu_shm.h b/src/mpid/common/shm/mpidu_shm.h
new file mode 100644
index 0000000..0f42f06
--- /dev/null
+++ b/src/mpid/common/shm/mpidu_shm.h
@@ -0,0 +1,48 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIDU_SHM_H
+#define MPIDU_SHM_H
+
+#define MPIDU_SHM_MAX_FNAME_LEN 256
+#define MPIDU_SHM_CACHE_LINE_LEN 64
+
+typedef struct MPIDU_shm_barrier
+{
+ OPA_int_t val;
+ OPA_int_t wait;
+} MPIDU_shm_barrier_t, *MPIDU_shm_barrier_ptr_t;
+
+typedef struct MPIDU_shm_seg
+{
+ size_t segment_len;
+ /* Handle to shm seg */
+ MPL_shm_hnd_t hnd;
+ /* Pointers */
+ char *base_addr;
+ /* Misc */
+ char file_name[MPIDU_SHM_MAX_FNAME_LEN];
+ int base_descs;
+ int symmetrical;
+} MPIDU_shm_seg_t, *MPIDU_shm_seg_ptr_t;
+
+typedef struct MPIDU_shm_seg_info
+{
+ size_t size;
+ char *addr;
+} MPIDU_shm_seg_info_t, *MPIDU_shm_seg_info_ptr_t;
+
+int MPIDU_shm_seg_alloc(size_t len, void **ptr_p);
+int MPIDU_shm_seg_commit(MPIDU_shm_seg_ptr_t memory, MPIDU_shm_barrier_ptr_t *barrier,
+ int num_local, int local_rank, int local_procs_0, int rank);
+int MPIDU_shm_seg_destroy(MPIDU_shm_seg_ptr_t memory, int num_local);
+
+int MPIDU_shm_barrier_init(MPIDU_shm_barrier_t *barrier_region,
+ MPIDU_shm_barrier_ptr_t *barrier, int init_values);
+int MPIDU_shm_barrier(MPIDU_shm_barrier_t *barrier, int num_local);
+
+#endif /* MPIDU_SHM_H */
diff --git a/src/mpid/common/shm/mpidu_shm_alloc.c b/src/mpid/common/shm/mpidu_shm_alloc.c
new file mode 100644
index 0000000..f7bed7a
--- /dev/null
+++ b/src/mpid/common/shm/mpidu_shm_alloc.c
@@ -0,0 +1,526 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#include <mpidimpl.h>
+#include "mpl_shm.h"
+
+#ifdef USE_PMI2_API
+#include "pmi2.h"
+#else
+#include "pmi.h"
+#endif
+
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+#endif
+#include <errno.h>
+
+#if defined (HAVE_SYSV_SHARED_MEM)
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#endif
+
+#if defined( HAVE_MKSTEMP ) && defined( NEEDS_MKSTEMP_DECL )
+extern int mkstemp(char *t);
+#endif
+
+#include "mpidu_shm_impl.h"
+#include "mpidu_generic_queue.h"
+
+typedef struct alloc_elem {
+ struct alloc_elem *next;
+ void **ptr_p;
+ size_t len;
+} alloc_elem_t;
+
+static struct { alloc_elem_t *head, *tail; } allocq = {0};
+
+static int check_alloc(MPIDU_shm_seg_ptr_t memory, MPIDU_shm_barrier_ptr_t barrier,
+ int num_local, int local_rank);
+
+#define ALLOCQ_HEAD() GENERIC_Q_HEAD(allocq)
+#define ALLOCQ_EMPTY() GENERIC_Q_EMPTY(allocq)
+#define ALLOCQ_ENQUEUE(ep) GENERIC_Q_ENQUEUE(&allocq, ep, next)
+#define ALLOCQ_DEQUEUE(epp) GENERIC_Q_DEQUEUE(&allocq, epp, next)
+
+#define ROUND_UP_8(x) (((x) + (size_t)7) & ~(size_t)7) /* rounds up to multiple of 8 */
+
+static size_t segment_len = 0;
+
+typedef struct asym_check_region
+{
+ void *base_ptr;
+ OPA_int_t is_asym;
+} asym_check_region;
+
+static asym_check_region* asym_check_region_p = NULL;
+
+/* MPIDU_shm_seg_alloc(len, ptr_p)
+
+ This function is used to allow the caller to reserve a len sized
+ region in the shared memory segment. Once the shared memory
+ segment is actually allocated, when MPIDU_SHM_Seg_commit() is
+ called, the pointer *ptr_p will be set to point to the reserved
+ region in the shared memory segment.
+
+ Note that no shared memory is actually allocated by this function,
+ and the *ptr_p pointer will be valid only after
+ MPIDU_SHM_Seg_commit() is called.
+*/
+#undef FUNCNAME
+#define FUNCNAME MPIDU_shm_seg_alloc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_shm_seg_alloc(size_t len, void **ptr_p)
+{
+ int mpi_errno = MPI_SUCCESS;
+ alloc_elem_t *ep;
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_SHM_SEG_ALLOC);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_SHM_SEG_ALLOC);
+
+ /* round up to multiple of 8 to ensure the start of the next
+ region is 64-bit aligned. */
+ len = ROUND_UP_8(len);
+
+ MPIR_Assert(len);
+ MPIR_Assert(ptr_p);
+
+ MPIR_CHKPMEM_MALLOC(ep, alloc_elem_t *, sizeof(alloc_elem_t), mpi_errno, "el");
+
+ ep->ptr_p = ptr_p;
+ ep->len = len;
+
+ ALLOCQ_ENQUEUE(ep);
+
+ segment_len += len;
+
+ fn_exit:
+ MPIR_CHKPMEM_COMMIT();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_SHM_SEG_ALLOC);
+ return mpi_errno;
+ fn_fail:
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+}
+
+/* MPIDU_shm_seg_commit(memory, num_local, local_rank)
+
+ This function allocates a shared memory segment large enough to
+ hold all of the regions previously requested by calls to
+ MPIDU_shm_seg_alloc(). For each request, this function sets the
+ associated pointer to point to the reserved region in the allocated
+ shared memory segment.
+
+ If there is only one process local to this node, then a shared
+ memory region is not allocated. Instead, memory is allocated from
+ the heap.
+
+ At least one call to MPIDU_SHM_Seg_alloc() must be made before
+ calling MPIDU_SHM_Seg_commit().
+ */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_shm_seg_commit
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_shm_seg_commit(MPIDU_shm_seg_ptr_t memory, MPIDU_shm_barrier_ptr_t *barrier,
+ int num_local, int local_rank, int local_procs_0, int rank)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int pmi_errno;
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ int ret;
+ int ipc_lock_offset;
+ OPA_emulation_ipl_t *ipc_lock;
+#endif
+ int key_max_sz;
+ int val_max_sz;
+ char *key;
+ char *val;
+ char kvs_name[256];
+ char *serialized_hnd = NULL;
+ void *current_addr;
+ void *start_addr ATTRIBUTE((unused));
+ size_t size_left;
+ MPIR_CHKPMEM_DECL(1);
+ MPIR_CHKLMEM_DECL(2);
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_SHM_SEG_COMMIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_SHM_SEG_COMMIT);
+
+ /* MPIDU_shm_seg_alloc() needs to have been called before this function */
+ MPIR_Assert(!ALLOCQ_EMPTY());
+ MPIR_Assert(segment_len > 0);
+
+ /* allocate an area to check if the segment was allocated symmetrically */
+ mpi_errno = MPIDU_shm_seg_alloc(sizeof(asym_check_region), (void **) &asym_check_region_p);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPL_shm_hnd_init(&(memory->hnd));
+ if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
+
+ /* Shared memory barrier variables are in the front of the shared
+ memory region. We do this here explicitly, rather than use the
+ Seg_alloc() function because we need to use the barrier inside
+ this function, before we've assigned the variables to their
+ regions. To do this, we add extra space to the segment_len,
+ initialize the variables as soon as the shared memory region is
+ allocated/attached, then before we do the assignments of the
+ pointers provided in Seg_alloc(), we make sure to skip the
+ region containing the barrier vars. */
+
+ /* add space for local barrier region. Use a whole cacheline. */
+ MPIR_Assert(MPIDU_SHM_CACHE_LINE_LEN >= sizeof(MPIDU_shm_barrier_t));
+ segment_len += MPIDU_SHM_CACHE_LINE_LEN;
+
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ /* We have a similar bootstrapping problem when using OpenPA in
+ * lock-based emulation mode. We use OPA_* functions during the
+ * check_alloc function but we were previously initializing OpenPA
+ * after return from this function. So we put the emulation lock
+ * right after the barrier var space. */
+
+ /* offset from memory->base_addr to the start of ipc_lock */
+ ipc_lock_offset = MPIDU_SHM_CACHE_LINE_LEN;
+
+ MPIR_Assert(ipc_lock_offset >= sizeof(OPA_emulation_ipl_t));
+ segment_len += MPIDU_SHM_CACHE_LINE_LEN;
+#endif
+
+ memory->segment_len = segment_len;
+
+#ifdef USE_PMI2_API
+ /* if there is only one process on this processor, don't use shared memory */
+ if (num_local == 1)
+ {
+ char *addr;
+
+ MPIR_CHKPMEM_MALLOC(addr, char *, segment_len + MPIDU_SHM_CACHE_LINE_LEN, mpi_errno, "segment");
+
+ memory->base_addr = addr;
+ current_addr =
+ (char *) (((uintptr_t) addr + (uintptr_t) MPIDU_SHM_CACHE_LINE_LEN - 1) &
+ (~((uintptr_t) MPIDU_SHM_CACHE_LINE_LEN - 1)));
+ memory->symmetrical = 0;
+
+ /* must come before barrier_init since we use OPA in that function */
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
+ ret = OPA_Interprocess_lock_init(ipc_lock, TRUE/*isLeader*/);
+ MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
+#endif
+
+ mpi_errno = MPIDU_shm_barrier_init((MPIDU_shm_barrier_t *) memory->base_addr, barrier, TRUE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
+ else {
+
+ if (local_rank == 0) {
+ mpi_errno = MPL_shm_seg_create_and_attach(memory->hnd, memory->segment_len, &(memory->base_addr), 0);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* post name of shared file */
+ MPIR_Assert(local_procs_0 == rank);
+
+ mpi_errno = MPL_shm_hnd_get_serialized_by_ref(memory->hnd, &serialized_hnd);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* must come before barrier_init since we use OPA in that function */
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
+ ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
+ MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
+#endif
+
+ mpi_errno = MPIDU_shm_barrier_init((MPIDU_shm_barrier_t *) memory->base_addr, barrier, TRUE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* The opa and barrier initializations must come before we (the
+ * leader) put the sharedFilename attribute. Since this is a
+ * serializing operation with our peers on the local node this
+ * ensures that these initializations have occurred before any peer
+ * attempts to use the resources. */
+ mpi_errno = PMI2_Info_PutNodeAttr("sharedFilename", serialized_hnd);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ } else {
+ int found = FALSE;
+
+ /* Allocate space for pmi key and val */
+ MPIR_CHKLMEM_MALLOC(val, char *, PMI2_MAX_VALLEN, mpi_errno, "val");
+
+ /* get name of shared file */
+ mpi_errno = PMI2_Info_GetNodeAttr("sharedFilename", val, PMI2_MAX_VALLEN, &found, TRUE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_ERR_CHKINTERNAL(!found, mpi_errno, "nodeattr not found");
+
+ mpi_errno = MPL_shm_hnd_deserialize(memory->hnd, val, strlen(val));
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPL_shm_seg_attach(memory->hnd, memory->segment_len, (char **)&memory->base_addr, 0);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* must come before barrier_init since we use OPA in that function */
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
+ ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
+ MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
+
+ /* Right now we rely on the assumption that OPA_Interprocess_lock_init only
+ * needs to be called by the leader and the current process before use by the
+ * current process. That is, we don't assume that this collective call is
+ * synchronizing and we don't assume that it requires total external
+ * synchronization. In PMIv2 we don't have a PMI_Barrier operation so we need
+ * this behavior. */
+#endif
+
+ mpi_errno = MPIDU_shm_barrier_init((MPIDU_shm_barrier_t *) memory->base_addr, barrier, FALSE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
+
+ mpi_errno = MPIDU_shm_barrier(*barrier, num_local);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ if (local_rank == 0) {
+ mpi_errno = MPL_shm_seg_remove(memory->hnd);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
+ current_addr = memory->base_addr;
+ memory->symmetrical = 0 ;
+ }
+#else /* we are using PMIv1 */
+ /* if there is only one process on this processor, don't use shared memory */
+ if (num_local == 1)
+ {
+ char *addr;
+
+ MPIR_CHKPMEM_MALLOC(addr, char *, segment_len + MPIDU_SHM_CACHE_LINE_LEN, mpi_errno, "segment");
+
+ memory->base_addr = addr;
+ current_addr =
+ (char *) (((uintptr_t) addr + (uintptr_t) MPIDU_SHM_CACHE_LINE_LEN - 1) &
+ (~((uintptr_t) MPIDU_SHM_CACHE_LINE_LEN - 1)));
+ memory->symmetrical = 0;
+
+ /* we still need to call barrier */
+ pmi_errno = PMI_Barrier();
+ MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
+
+ /* must come before barrier_init since we use OPA in that function */
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
+ ret = OPA_Interprocess_lock_init(ipc_lock, TRUE/*isLeader*/);
+ MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
+#endif
+ mpi_errno = MPIDU_shm_barrier_init((MPIDU_shm_barrier_t *) memory->base_addr, barrier, TRUE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
+ else{
+ /* Allocate space for pmi key and val */
+ pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
+ MPIR_CHKLMEM_MALLOC(key, char *, key_max_sz, mpi_errno, "key");
+
+ pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
+ MPIR_CHKLMEM_MALLOC(val, char *, val_max_sz, mpi_errno, "val");
+
+ mpi_errno = PMI_KVS_Get_my_name(kvs_name, 256);
+ if (mpi_errno) MPIR_ERR_POP (mpi_errno);
+
+ if (local_rank == 0){
+ mpi_errno = MPL_shm_seg_create_and_attach(memory->hnd, memory->segment_len, &(memory->base_addr), 0);
+ if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
+
+ /* post name of shared file */
+ MPIR_Assert(local_procs_0 == rank);
+ MPL_snprintf(key, key_max_sz, "sharedFilename[%i]", rank);
+
+ mpi_errno = MPL_shm_hnd_get_serialized_by_ref(memory->hnd, &serialized_hnd);
+ if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
+
+ pmi_errno = PMI_KVS_Put (kvs_name, key, serialized_hnd);
+ MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_put", "**pmi_kvs_put %d", pmi_errno);
+
+ pmi_errno = PMI_KVS_Commit (kvs_name);
+ MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_commit", "**pmi_kvs_commit %d", pmi_errno);
+
+ /* must come before barrier_init since we use OPA in that function */
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
+ ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
+ MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
+#endif
+
+ mpi_errno = MPIDU_shm_barrier_init((MPIDU_shm_barrier_t *) memory->base_addr, barrier, TRUE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ pmi_errno = PMI_Barrier();
+ MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
+ }
+ else
+ {
+ pmi_errno = PMI_Barrier();
+ MPIR_ERR_CHKANDJUMP1 (pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
+
+ /* get name of shared file */
+ MPL_snprintf(key, key_max_sz, "sharedFilename[%i]", local_procs_0);
+ pmi_errno = PMI_KVS_Get(kvs_name, key, val, val_max_sz);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER,
+ "**pmi_kvs_get", "**pmi_kvs_get %d", pmi_errno);
+
+ mpi_errno = MPL_shm_hnd_deserialize(memory->hnd, val, strlen(val));
+ if(mpi_errno != MPI_SUCCESS) MPIR_ERR_POP(mpi_errno);
+
+ mpi_errno = MPL_shm_seg_attach(memory->hnd, memory->segment_len, (char **)&memory->base_addr, 0);
+ if (mpi_errno) MPIR_ERR_POP (mpi_errno);
+
+ /* must come before barrier_init since we use OPA in that function */
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ ipc_lock = (OPA_emulation_ipl_t *)((char *)memory->base_addr + ipc_lock_offset);
+ ret = OPA_Interprocess_lock_init(ipc_lock, local_rank == 0);
+ MPIR_ERR_CHKANDJUMP1(ret != 0, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", ret);
+#endif
+
+ mpi_errno = MPIDU_shm_barrier_init((MPIDU_shm_barrier_t *) memory->base_addr, barrier, FALSE);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ }
+
+ mpi_errno = MPIDU_shm_barrier(*barrier, num_local);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ if (local_rank == 0)
+ {
+ mpi_errno = MPL_shm_seg_remove(memory->hnd);
+ if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP (mpi_errno);
+ }
+ current_addr = memory->base_addr;
+ memory->symmetrical = 0 ;
+ }
+#endif
+ /* assign sections of the shared memory segment to their pointers */
+
+ start_addr = current_addr;
+ size_left = segment_len;
+
+ /* reserve room for shared mem barrier (We used a whole cacheline) */
+ current_addr = (char *) current_addr + MPIDU_SHM_CACHE_LINE_LEN;
+ MPIR_Assert(size_left >= MPIDU_SHM_CACHE_LINE_LEN);
+ size_left -= MPIDU_SHM_CACHE_LINE_LEN;
+
+#ifdef OPA_USE_LOCK_BASED_PRIMITIVES
+ /* reserve room for the opa emulation lock */
+ current_addr = (char *) current_addr + MPIDU_SHM_CACHE_LINE_LEN;
+ MPIR_Assert(size_left >= MPIDU_SHM_CACHE_LINE_LEN);
+ size_left -= MPIDU_SHM_CACHE_LINE_LEN;
+#endif
+
+ do
+ {
+ alloc_elem_t *ep;
+
+ ALLOCQ_DEQUEUE(&ep);
+
+ *(ep->ptr_p) = current_addr;
+ MPIR_Assert(size_left >= ep->len);
+ size_left -= ep->len;
+ current_addr = (char *)current_addr + ep->len;
+
+ MPL_free(ep);
+
+ MPIR_Assert((char *)current_addr <= (char *)start_addr + segment_len);
+ }
+ while (!ALLOCQ_EMPTY());
+
+ mpi_errno = check_alloc(memory, *barrier, num_local, local_rank);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ MPIR_CHKPMEM_COMMIT();
+ fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_SHM_SEG_COMMIT);
+ return mpi_errno;
+ fn_fail:
+ /* --BEGIN ERROR HANDLING-- */
+ MPL_shm_seg_remove(memory->hnd);
+ MPL_shm_hnd_finalize(&(memory->hnd));
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+
+/* MPIDU_SHM_Seg_destroy() free the shared memory segment */
+#undef FUNCNAME
+#define FUNCNAME MPIDU_shm_seg_destroy
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_shm_seg_destroy(MPIDU_shm_seg_ptr_t memory, int num_local)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_SHM_SEG_DESTROY);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_SHM_SEG_DESTROY);
+
+ if (num_local == 1)
+ MPL_free(memory->base_addr);
+ else
+ {
+ mpi_errno = MPL_shm_seg_detach(memory->hnd,
+ &(memory->base_addr), memory->segment_len);
+ if (mpi_errno) MPIR_ERR_POP (mpi_errno);
+ }
+
+ fn_exit:
+ MPL_shm_hnd_finalize(&(memory->hnd));
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_SHM_SEG_DESTROY);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
+
+/* check_alloc() checks to see whether the shared memory segment is
+ allocated at the same virtual memory address at each process.
+*/
+#undef FUNCNAME
+#define FUNCNAME check_alloc
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int check_alloc(MPIDU_shm_seg_ptr_t memory, MPIDU_shm_barrier_ptr_t barrier,
+ int num_local, int local_rank)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_SHM_CHECK_ALLOC);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_SHM_CHECK_ALLOC);
+
+ if (local_rank == 0) {
+ asym_check_region_p->base_ptr = memory->base_addr;
+ OPA_store_int(&asym_check_region_p->is_asym, 0);
+ }
+
+ mpi_errno = MPIDU_shm_barrier(barrier, num_local);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ if (asym_check_region_p->base_ptr != memory->base_addr)
+ OPA_store_int(&asym_check_region_p->is_asym, 1);
+
+ OPA_read_write_barrier();
+
+ mpi_errno = MPIDU_shm_barrier(barrier, num_local);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ if (OPA_load_int(&asym_check_region_p->is_asym)) {
+ memory->symmetrical = 0;
+ } else {
+ memory->symmetrical = 1;
+ }
+
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_SHM_CHECK_ALLOC);
+ return mpi_errno;
+ fn_fail:
+ goto fn_exit;
+}
diff --git a/src/mpid/common/shm/mpidu_shm_barrier.c b/src/mpid/common/shm/mpidu_shm_barrier.c
new file mode 100644
index 0000000..01d5e50
--- /dev/null
+++ b/src/mpid/common/shm/mpidu_shm_barrier.c
@@ -0,0 +1,72 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpidu_shm_impl.h"
+
+static int sense;
+static int barrier_init = 0;
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_shm_barrier_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIDU_shm_barrier_init(MPIDU_shm_barrier_t *barrier_region,
+ MPIDU_shm_barrier_ptr_t *barrier, int init_values)
+{
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_SHM_BARRIER_INIT);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_SHM_BARRIER_INIT);
+
+ *barrier = barrier_region;
+ if (init_values) {
+ OPA_store_int(&(*barrier)->val, 0);
+ OPA_store_int(&(*barrier)->wait, 0);
+ OPA_write_barrier();
+ }
+ sense = 0;
+ barrier_init = 1;
+
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_SHM_BARRIER_INIT);
+
+ return MPI_SUCCESS;
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIDU_shm_barrier
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+/* FIXME: this is not a scalable algorithm because everyone is polling on the same cacheline */
+int MPIDU_shm_barrier(MPIDU_shm_barrier_t *barrier, int num_local)
+{
+ int mpi_errno = MPI_SUCCESS;
+ MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_SHM_BARRIER);
+
+ MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_SHM_BARRIER);
+
+ if (num_local == 1)
+ goto fn_exit;
+
+ MPIR_ERR_CHKINTERNAL(!barrier_init, mpi_errno, "barrier not initialized");
+
+ if (OPA_fetch_and_incr_int(&barrier->val) == num_local - 1)
+ {
+ OPA_store_int(&barrier->val, 0);
+ OPA_store_int(&barrier->wait, 1 - sense);
+ OPA_write_barrier();
+ }
+ else
+ {
+ /* wait */
+ while (OPA_load_int(&barrier->wait) == sense)
+ MPL_sched_yield(); /* skip */
+ }
+ sense = 1 - sense;
+
+ fn_fail:
+ fn_exit:
+ MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_SHM_BARRIER);
+ return mpi_errno;
+}
diff --git a/src/mpid/common/shm/mpidu_shm_impl.h b/src/mpid/common/shm/mpidu_shm_impl.h
new file mode 100644
index 0000000..2b6877a
--- /dev/null
+++ b/src/mpid/common/shm/mpidu_shm_impl.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPIDU_SHM_IMPL_H
+#define MPIDU_SHM_IMPL_H
+
+#include "mpidimpl.h"
+
+#include "mpidu_shm.h"
+
+#endif /* ifndef MPIDU_SHM_IMPL_H */
+/* vim: ft=c */
diff --git a/src/mpid/common/shm/mpidu_shm_states.h b/src/mpid/common/shm/mpidu_shm_states.h
new file mode 100644
index 0000000..57dacb1
--- /dev/null
+++ b/src/mpid/common/shm/mpidu_shm_states.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIDU_SHM_STATES_H
+#define MPIDU_SHM_STATES_H
+
+#define MPID_STATE_LIST_MPIDU_SHM \
+MPID_STATE_MPIDU_SHM_BARRIER, \
+MPID_STATE_MPIDU_SHM_BARRIER_INIT, \
+MPID_STATE_MPIDU_SHM_SEG_ALLOC, \
+MPID_STATE_MPIDU_SHM_SEG_DESTROY, \
+MPID_STATE_MPIDU_SHM_SEG_COMMIT, \
+MPID_STATE_MPIDU_SHM_CHECK_ALLOC,
+
+#endif
+/* vim: ft=c */
diff --git a/src/mpid/common/shm/subconfigure.m4 b/src/mpid/common/shm/subconfigure.m4
new file mode 100644
index 0000000..e2fe593
--- /dev/null
+++ b/src/mpid/common/shm/subconfigure.m4
@@ -0,0 +1,21 @@
+[#] start of __file__
+
+dnl _PREREQ handles the former role of mpichprereq, setup_device, etc
+AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
+ AM_CONDITIONAL([BUILD_MPID_COMMON_SHM],[test "X$build_mpid_common_shm" = "Xyes"])
+])
+
+dnl _BODY handles the former role of configure in the subsystem
+AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
+
+dnl the code below is currently commented out because the common shm code
+dnl doesn't need to run any configure tests, it really just needs to emit the
+dnl AM_CONDITIONAL for the moment
+dnl
+dnl AM_COND_IF([BUILD_MPID_COMMON_SHM],[
+dnl AC_MSG_NOTICE([RUNNING CONFIGURE FOR src/mpid/common/shm])
+dnl
+dnl ])dnl end AM_COND_IF(BUILD_MPID_COMMON_SHM,...)
+])dnl end _BODY
+dnl
+[#] end of __file__
diff --git a/src/mpid/common/sock/.state-cache b/src/mpid/common/sock/.state-cache
deleted file mode 100644
index ae4256d..0000000
--- a/src/mpid/common/sock/.state-cache
+++ /dev/null
@@ -1,7 +0,0 @@
-<dir>
-<file name="mpidu_sock.h" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="mpidu_sock.h">
-</fileinfo>
-</data>
diff --git a/src/mpid/common/sock/Makefile.mk b/src/mpid/common/sock/Makefile.mk
deleted file mode 100644
index 86038c5..0000000
--- a/src/mpid/common/sock/Makefile.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-errnames_txt_files += src/mpid/common/sock/errnames.txt
-
-if BUILD_MPID_COMMON_SOCK
-
-# FIXME is top_builddir the right way to handle VPATH builds?
-AM_CPPFLAGS += \
- -I${top_srcdir}/src/mpid/common/sock \
- -I${top_builddir}/src/mpid/common/sock
-
-noinst_HEADERS += src/mpid/common/sock/mpidu_sock.h
-
-include $(top_srcdir)/src/mpid/common/sock/poll/Makefile.mk
-
-# we don't provide an automake Makefile.mk for the iocp directory because it is
-# a Windows-only subsystem and our Windows build does not use the autotools at
-# this time
-#include $(top_srcdir)/src/mpid/common/sock/iocp/Makefile.mk
-
-endif BUILD_MPID_COMMON_SOCK
-
diff --git a/src/mpid/common/sock/errnames.txt b/src/mpid/common/sock/errnames.txt
deleted file mode 100644
index 9a53a35..0000000
--- a/src/mpid/common/sock/errnames.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Sock
-#
-**sock|setalloc:unable to allocate a new sock set object
-**sock|sockalloc:unable to allocate a new sock object
-**sock|badbuf:the supplied buffer contains invalid memory
-**sock|badhandle:sock contains an invalid handle
-**sock|badhdbuf:a memory fault occurred while accessing the host description string
-**sock|badhdmax:the length of the host description string must be non-negative
-**sock|badhdlen:host description string to small to store description
-**sock|badiovn:size of iov is invalid
-**sock|badiovn %d %d %d:size of iov is invalid (set=%d,sock=%d,iov_n=%d)
-**sock|badlen:bad length parameter(s)
-**sock|badlen %d %d %d %d:bad length parameter(s) (set=%d,sock=%d,min=%d,max=%d)
-**sock|badport:port number is out of range
-**sock|badport %d:port number is out of range (sock=%d)
-**sock|badsock:supplied sock is corrupt
-**sock|connclosed:connection closed by peer
-**sock|connclosed %d %d:connection closed by peer (set=%d,sock=%d)
-**sock|connfailed:connection failure
-**sock|connrefused:connection refused
-**sock|close_cancel:operation cancelled because sock was closed locally
-**sock|close_cancel %d %d:operation cancelled because sock was closed locally (set=%d,sock=%d)
-**sock|closing:sock is in the process of being closed locally
-**sock|closing %d %d:sock is in the process of being closed locally (set=%d,sock=%d)
-**sock|closing_already:a close operation is already posted
-**sock|closing_already %d %d:a close operation is already post (set=%d,sock=%d)
-**sock|getport:failed to obtain port number of the listener
-**sock|listener_bad_sock:supplied sock is not a listener
-**sock|listener_bad_sock %d %d:supplied sock is not a listener (set=%d,sock=%d)
-**sock|listener_bad_state:supplied listener sock is in a bad state
-**sock|listener_bad_state %d %d %d:supplied listener sock is in a bad state (set=%d,sock=%d,state=%d)
-**sock|listener_read:read operation not allowed on a listener
-**sock|listener_read %d %d:read operation not allowed on a listener (set=%d,sock=%d)
-**sock|listener_write:write operation not allowed on a listener
-**sock|listener_write %d %d:write operation not allowed on a listener (set=%d,sock=%d)
-**sock|notconnected:sock is not connected
-**sock|notconnected %d %d:sock is not connected (set=%d,sock=%d)
-**sock|nosock:no new sock was available to accept
-**sock|oserror:unexpected operating system error
-**sock|osnomem:operating system routine failed due to lack of memory
-**sock|osnomem %s %d %d:operating system routine %s failed due to lack of memory (set=%d,sock=%d)
-**sock|reads:attempt to perform multiple simultaneous reads
-**sock|reads %d %d:attempt to perform multiple simultaneous reads (set=%d,sock=%d)
-**sock|uninit:Sock library has not been initialized
-**sock|writes:attempt to perform multiple simultaneous writes
-**sock|writes %d %d:attempt to perform multiple simultaneous writes (set=%d,sock=%d)
diff --git a/src/mpid/common/sock/iocp/.state-cache b/src/mpid/common/sock/iocp/.state-cache
deleted file mode 100644
index 8aa64f0..0000000
--- a/src/mpid/common/sock/iocp/.state-cache
+++ /dev/null
@@ -1,36 +0,0 @@
-<dir>
-<file name="sock.c" info="1447123141"/>
-<file name="mpidu_socki.h" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="sock.c">
-MPID_STATE_MPIDU_SOCK_INIT MPIDU_Sock_init
-MPID_STATE_MPIDU_SOCK_FINALIZE MPIDU_Sock_finalize
-MPID_STATE_MPIDU_SOCK_HOSTNAME_TO_HOST_DESCRIPTION MPIDU_Sock_hostname_to_host_description
-MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION MPIDU_Sock_get_host_description
-MPID_STATE_MPIDU_SOCK_CREATE_SET MPIDU_Sock_create_set
-MPID_STATE_MPIDU_SOCK_DESTROY_SET MPIDU_Sock_destroy_set
-MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK MPIDU_Sock_native_to_sock
-MPID_STATE_MPIDU_SOCK_LISTEN MPID_STATE_MPIDU_SOCK_ACCEPT
-MPID_STATE_MEMCPY memcpy
-MPID_STATE_MPIDU_SOCK_ACCEPT MPIDU_Sock_accept
-MPID_STATE_MPIDU_SOCK_POST_CONNECT MPIDU_Sock_post_connect
-MPID_STATE_MPIDU_SOCK_SET_USER_PTR MPIDU_Sock_set_user_ptr
-MPID_STATE_MPIDU_SOCK_POST_CLOSE MPIDU_Sock_post_close
-MPID_STATE_MPIDU_SOCK_POST_READ MPIDU_Sock_post_read
-MPID_STATE_MPIDU_SOCK_POST_READV MPIDU_Sock_post_readv
-MPID_STATE_MPIDU_SOCK_POST_WRITE MPIDU_Sock_post_write
-MPID_STATE_MPIDU_SOCK_POST_WRITEV MPIDU_Sock_post_writev
-MPID_STATE_MPIDU_SOCK_WAIT MPIDU_Sock_wait
-MPID_STATE_GETQUEUEDCOMPLETIONSTATUS GetQueuedCompletionStatus
-MPID_STATE_MPIDU_SOCK_READ MPIDU_Sock_read
-MPID_STATE_MPIDU_SOCK_READV MPIDU_Sock_readv
-MPID_STATE_MPIDU_SOCK_WRITE MPIDU_Sock_write
-MPID_STATE_MPIDU_SOCK_WRITEV MPIDU_Sock_writev
-MPID_STATE_MPIDU_SOCK_GET_SOCK_ID MPIDU_Sock_get_sock_id
-MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID MPIDU_Sock_get_sock_set_id
-MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING MPIDU_Sock_get_error_class_string
-</fileinfo>
-<fileinfo name="mpidu_socki.h">
-</fileinfo>
-</data>
diff --git a/src/mpid/common/sock/iocp/Makefile.sm b/src/mpid/common/sock/iocp/Makefile.sm
deleted file mode 100644
index baaa4a0..0000000
--- a/src/mpid/common/sock/iocp/Makefile.sm
+++ /dev/null
@@ -1,3 +0,0 @@
-INCLUDES = -I../../../../include -I${master_top_srcdir}/src/include
-lib${MPILIBNAME}_a_SOURCES = sock.c
-sock.o: sock.c mpidu_socki.h ../mpidu_sock.h
diff --git a/src/mpid/common/sock/iocp/mpidu_socki.h b/src/mpid/common/sock/iocp/mpidu_socki.h
deleted file mode 100644
index 6450360..0000000
--- a/src/mpid/common/sock/iocp/mpidu_socki.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIDU_SOCKI_H
-#define MPIDU_SOCKI_H
-
-#include <winsock2.h>
-#include <windows.h>
-#include <mswsock.h>
-
-/*
- ws2tcpip.h is a C++ header file. This header file,
- mpidu_socki.h, if included within a extern "C" {}
- block would give an error if ws2tcpip is not
- included in a extern "C++" {} block.
-
- */
-#ifdef __cplusplus
-extern "C++" {
-#endif
- #include <ws2tcpip.h>
-#ifdef __cplusplus
-}
-#endif
-
-#define MPIDU_SOCK_INVALID_SOCK NULL
-#define MPIDU_SOCK_INVALID_SET NULL
-#define MPIDU_SOCK_INFINITE_TIME INFINITE
-#define inline __inline
-
-typedef HANDLE MPIDU_SOCK_NATIVE_FD;
-typedef HANDLE MPIDU_Sock_set_t;
-typedef struct sock_state_t * MPIDU_Sock_t;
-typedef DWORD MPIDU_Sock_size_t;
-
-#include "mpl.h"
-#include "mpi.h"
-
-#endif
diff --git a/src/mpid/common/sock/iocp/sock.c b/src/mpid/common/sock/iocp/sock.c
deleted file mode 100644
index 2f3ff2c..0000000
--- a/src/mpid/common/sock/iocp/sock.c
+++ /dev/null
@@ -1,2919 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-#include "mpidu_sock.h"
-
-#define MPL_QUOTE(A) MPL_QUOTE2(A)
-#define MPL_QUOTE2(A) #A
-
-#define SOCKI_TCP_BUFFER_SIZE 32*1024
-#define SOCKI_DESCRIPTION_LENGTH 256
-#define SOCKI_NUM_PREPOSTED_ACCEPTS 32
-
-typedef enum SOCKI_TYPE { SOCKI_INVALID, SOCKI_LISTENER, SOCKI_SOCKET, SOCKI_WAKEUP } SOCKI_TYPE;
-
-typedef int SOCKI_STATE;
-#define SOCKI_ACCEPTING 0x0001
-#define SOCKI_CONNECTING 0x0004
-#define SOCKI_READING 0x0008
-#define SOCKI_WRITING 0x0010
-
-typedef struct sock_buffer
-{
- DWORD num_bytes;
- OVERLAPPED ovl;
- MPL_IOV tiov;
-#ifdef USE_SOCK_IOV_COPY
- MPL_IOV iov[MPL_IOV_MAXLEN];
-#else
- MPL_IOV *iov;
-#endif
- int iovlen;
- int index;
- MPIU_Size_t total;
- MPIDU_Sock_progress_update_func_t progress_update;
-} sock_buffer;
-
-typedef struct sock_state_t
-{
- SOCKI_TYPE type;
- SOCKI_STATE state;
- SOCKET sock;
- MPIDU_Sock_set_t set;
- int closing;
- int pending_operations;
- /* listener/accept structures */
- SOCKET listen_sock;
- char accept_buffer[sizeof(struct sockaddr_in)*2+32];
- /* read and write structures */
- sock_buffer read;
- sock_buffer write;
- /* connect structures */
- char *cur_host;
- char host_description[SOCKI_DESCRIPTION_LENGTH];
- /* user pointer */
- void *user_ptr;
- /* internal list */
- struct sock_state_t *list, *next;
- int accepted;
- int listener_closed;
- /* timing variables for completion notification */
- /*
- double rt1, rt2;
- double wt1, wt2;
- double ct1, ct2;
- */
- struct sock_state_t *next_sock;
-} sock_state_t;
-
-static int g_num_cp_threads = 2;
-static int g_socket_buffer_size = SOCKI_TCP_BUFFER_SIZE;
-static int g_socket_rbuffer_size = SOCKI_TCP_BUFFER_SIZE;
-static int g_socket_sbuffer_size = SOCKI_TCP_BUFFER_SIZE;
-static int g_init_called = 0;
-static int g_num_posted_accepts = SOCKI_NUM_PREPOSTED_ACCEPTS;
-
-static sock_state_t *g_sock_list = NULL;
-
-/* empty structure used to wake up a sock_wait call */
-sock_state_t g_wakeup_state;
-
-static void translate_error(int error, char *msg, char *prepend)
-{
- HLOCAL str;
- int num_bytes;
- num_bytes = FormatMessage(
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_ALLOCATE_BUFFER,
- 0,
- error,
- MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
- (LPTSTR) &str,
- 0,0);
- if (num_bytes == 0)
- {
- if (prepend != NULL)
- MPIU_Strncpy(msg, prepend, 1024);
- else
- *msg = '\0';
- }
- else
- {
- if (prepend == NULL)
- memcpy(msg, str, num_bytes+1);
- else
- MPL_snprintf(msg, 1024, "%s%s", prepend, (const char*)str);
- LocalFree(str);
- strtok(msg, "\r\n");
- }
-}
-
-static char *get_error_string(int error_code)
-{
- /* obviously not thread safe to store a message like this */
- static char error_msg[1024];
- translate_error(error_code, error_msg, NULL);
- return error_msg;
-}
-
-#undef FUNCNAME
-#define FUNCNAME easy_create
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int easy_create_ranged(SOCKET *sock, int port, unsigned long addr)
-{
- int mpi_errno=MPI_SUCCESS;
- /*struct linger linger;*/
- int optval, len;
- SOCKET temp_sock;
- SOCKADDR_IN sockAddr;
- int use_range = 0;
-
- /* create the non-blocking socket */
- temp_sock = WSASocket(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
- if (temp_sock == INVALID_SOCKET)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**socket", "**socket %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
-
- MPIR_ERR_CHKANDJUMP(MPIR_CVAR_CH3_PORT_RANGE.low < 0 || MPIR_CVAR_CH3_PORT_RANGE.low > MPIR_CVAR_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
- if (port == 0 && MPIR_CVAR_CH3_PORT_RANGE.low != 0 && MPIR_CVAR_CH3_PORT_RANGE.high != 0)
- {
- use_range = 1;
- port = MPIR_CVAR_CH3_PORT_RANGE.low;
- }
-
- memset(&sockAddr,0,sizeof(sockAddr));
-
- sockAddr.sin_family = AF_INET;
- sockAddr.sin_addr.s_addr = addr;
- sockAddr.sin_port = htons((unsigned short)port);
-
- for (;;)
- {
- if (bind(temp_sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR)
- {
- if (use_range)
- {
- port++;
- if (port > MPIR_CVAR_CH3_PORT_RANGE.high)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**socket", 0);
- return mpi_errno;
- }
- sockAddr.sin_port = htons((unsigned short)port);
- }
- else
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**socket", "**socket %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
- }
- else
- {
- break;
- }
- }
-
- /* Set the linger on close option */
- /*
- linger.l_onoff = 1 ;
- linger.l_linger = 60;
- setsockopt(temp_sock, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger));
- */
-
- /* set the socket to non-blocking */
- /*
- optval = TRUE;
- ioctlsocket(temp_sock, FIONBIO, &optval);
- */
-
- /* set the socket buffers */
- len = sizeof(int);
- if (!getsockopt(temp_sock, SOL_SOCKET, SO_RCVBUF, (char*)&optval, &len))
- {
- optval = g_socket_rbuffer_size;
- setsockopt(temp_sock, SOL_SOCKET, SO_RCVBUF, (char*)&optval, sizeof(int));
- }
- len = sizeof(int);
- if (!getsockopt(temp_sock, SOL_SOCKET, SO_SNDBUF, (char*)&optval, &len))
- {
- optval = g_socket_sbuffer_size;
- setsockopt(temp_sock, SOL_SOCKET, SO_SNDBUF, (char*)&optval, sizeof(int));
- }
-
- /* prevent the socket from being inherited by child processes */
- if (!DuplicateHandle(
- GetCurrentProcess(), (HANDLE)temp_sock,
- GetCurrentProcess(), (HANDLE*)sock,
- 0, FALSE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS))
- {
- mpi_errno = GetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**duphandle", "**duphandle %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
-
- /* Set the no-delay option */
- setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval));
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME easy_create
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int easy_create(SOCKET *sock, int port, unsigned long addr)
-{
- int mpi_errno;
- /*struct linger linger;*/
- int optval, len;
- SOCKET temp_sock;
- SOCKADDR_IN sockAddr;
-
- /* create the non-blocking socket */
- temp_sock = WSASocket(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
- if (temp_sock == INVALID_SOCKET)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**socket", "**socket %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
-
- memset(&sockAddr,0,sizeof(sockAddr));
-
- sockAddr.sin_family = AF_INET;
- sockAddr.sin_addr.s_addr = addr;
- sockAddr.sin_port = htons((unsigned short)port);
-
- if (bind(temp_sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**socket", "**socket %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
-
- /* Set the linger on close option */
- /*
- linger.l_onoff = 1 ;
- linger.l_linger = 60;
- setsockopt(temp_sock, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger));
- */
-
- /* set the socket to non-blocking */
- /*
- optval = TRUE;
- ioctlsocket(temp_sock, FIONBIO, &optval);
- */
-
- /* set the socket buffers */
- len = sizeof(int);
- if (!getsockopt(temp_sock, SOL_SOCKET, SO_RCVBUF, (char*)&optval, &len))
- {
- optval = g_socket_rbuffer_size;
- setsockopt(temp_sock, SOL_SOCKET, SO_RCVBUF, (char*)&optval, sizeof(int));
- }
- len = sizeof(int);
- if (!getsockopt(temp_sock, SOL_SOCKET, SO_SNDBUF, (char*)&optval, &len))
- {
- optval = g_socket_sbuffer_size;
- setsockopt(temp_sock, SOL_SOCKET, SO_SNDBUF, (char*)&optval, sizeof(int));
- }
-
- /* prevent the socket from being inherited by child processes */
- if (!DuplicateHandle(
- GetCurrentProcess(), (HANDLE)temp_sock,
- GetCurrentProcess(), (HANDLE*)sock,
- 0, FALSE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS))
- {
- mpi_errno = GetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**duphandle", "**duphandle %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
-
- /* Set the no-delay option */
- setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval));
-
- return MPI_SUCCESS;
-}
-
-static inline int easy_get_sock_info(SOCKET sock, char *name, int *port)
-{
- struct sockaddr_in addr;
- int name_len = sizeof(addr);
- DWORD len = 100;
-
- getsockname(sock, (struct sockaddr*)&addr, &name_len);
- *port = ntohs(addr.sin_port);
- /*GetComputerName(name, &len);*/
- GetComputerNameEx(ComputerNameDnsFullyQualified, name, &len);
- /*gethostname(name, 100);*/
-
- return 0;
-}
-
-static inline void init_state_struct(sock_state_t *p)
-{
- p->listen_sock = INVALID_SOCKET;
- p->sock = INVALID_SOCKET;
- p->set = INVALID_HANDLE_VALUE;
- p->user_ptr = NULL;
- p->type = 0;
- p->state = 0;
- p->closing = FALSE;
- p->pending_operations = 0;
- p->read.total = 0;
- p->read.num_bytes = 0;
- p->read.tiov.MPL_IOV_BUF = NULL;
-#ifndef USE_SOCK_IOV_COPY
- p->read.iov = NULL;
-#endif
- p->read.iovlen = 0;
- p->read.ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- p->read.ovl.Offset = 0;
- p->read.ovl.OffsetHigh = 0;
- p->read.progress_update = NULL;
- p->write.total = 0;
- p->write.num_bytes = 0;
- p->write.tiov.MPL_IOV_BUF = NULL;
-#ifndef USE_SOCK_IOV_COPY
- p->write.iov = NULL;
-#endif
- p->write.iovlen = 0;
- p->write.ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- p->write.ovl.Offset = 0;
- p->write.ovl.OffsetHigh = 0;
- p->write.progress_update = NULL;
- p->list = NULL;
- p->next = NULL;
- p->accepted = 0;
- p->listener_closed = 0;
- /*
- p->bogus_t1 = 0;
- p->bogus_t2 = 0;
- */
- p->next_sock = g_sock_list;
- g_sock_list = p;
-}
-
-#undef FUNCNAME
-#define FUNCNAME post_next_accept
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int post_next_accept(sock_state_t * context)
-{
- int mpi_errno;
- context->state = SOCKI_ACCEPTING;
- context->accepted = 0;
- /*printf("posting an accept.\n");fflush(stdout);*/
- context->sock = WSASocket(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
- if (context->sock == INVALID_SOCKET)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
- if (!AcceptEx(
- context->listen_sock,
- context->sock,
- context->accept_buffer,
- 0,
- sizeof(struct sockaddr_in)+16,
- sizeof(struct sockaddr_in)+16,
- &context->read.num_bytes,
- &context->read.ovl))
- {
- mpi_errno = WSAGetLastError();
- if (mpi_errno == ERROR_IO_PENDING)
- return MPI_SUCCESS;
- /*MPL_error_printf("AcceptEx failed with error %d\n", error);fflush(stdout);*/
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- return mpi_errno;
- }
- return MPI_SUCCESS;
-}
-
-/* sock functions */
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_init
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_init()
-{
- int mpi_errno;
- char *szNum, *szRange;
- WSADATA wsaData;
- int err;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_INIT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_INIT);
-
- if (g_init_called)
- {
- g_init_called++;
- /*printf("sock init %d\n", g_init_called);fflush(stdout);*/
- /*
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_INIT);
- return mpi_errno;
- */
- return MPI_SUCCESS;
- }
-
- /* Start the Winsock dll */
- if ((err = WSAStartup(MAKEWORD(2, 0), &wsaData)) != 0)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**wsasock", "**wsasock %s %d", get_error_string(err), err);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_INIT);
- return mpi_errno;
- }
-
- /* get the socket buffer size */
- szNum = getenv("MPICH_SOCKET_BUFFER_SIZE");
- if (szNum != NULL)
- {
- g_socket_buffer_size = atoi(szNum);
- if (g_socket_buffer_size < 0)
- g_socket_buffer_size = SOCKI_TCP_BUFFER_SIZE;
- }
-
- g_socket_rbuffer_size = g_socket_buffer_size;
- g_socket_sbuffer_size = g_socket_buffer_size;
-
- szNum = getenv("MPICH_SOCKET_RBUFFER_SIZE");
- if (szNum != NULL)
- {
- g_socket_rbuffer_size = atoi(szNum);
- if (g_socket_rbuffer_size < 0)
- g_socket_rbuffer_size = g_socket_buffer_size;
- }
-
- szNum = getenv("MPICH_SOCKET_SBUFFER_SIZE");
- if (szNum != NULL)
- {
- g_socket_sbuffer_size = atoi(szNum);
- if (g_socket_sbuffer_size < 0)
- g_socket_sbuffer_size = g_socket_buffer_size;
- }
-
- /* get the number of accepts to pre-post */
- szNum = getenv("MPICH_SOCKET_NUM_PREPOSTED_ACCEPTS");
- if (szNum != NULL)
- {
- g_num_posted_accepts = atoi(szNum);
- if (g_num_posted_accepts < 1)
- g_num_posted_accepts = SOCKI_NUM_PREPOSTED_ACCEPTS;
- }
-
- init_state_struct(&g_wakeup_state);
- g_wakeup_state.type = SOCKI_WAKEUP;
-
- g_init_called = 1;
- /*printf("sock init %d\n", g_init_called);fflush(stdout);*/
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_INIT);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_finalize
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_finalize()
-{
- int mpi_errno;
- sock_state_t *iter;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_FINALIZE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_FINALIZE);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_FINALIZE);
- return mpi_errno;
- }
- g_init_called--;
- if (g_init_called == 0)
- {
- iter = g_sock_list;
- while (iter)
- {
- if (iter->sock != INVALID_SOCKET)
- {
- /*printf("sock %d not closed before finalize\n", iter->sock);fflush(stdout);*/
- closesocket(iter->sock);
- iter->sock = INVALID_SOCKET;
- }
- iter = iter->next_sock;
- if (iter == g_sock_list)
- {
- /* catch loops */
- /*printf("sock list has a loop\n");fflush(stdout);*/
- break;
- }
- }
- WSACleanup();
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_FINALIZE);
- return MPI_SUCCESS;
-}
-
-typedef struct socki_host_name_t
-{
- char host[256];
- struct socki_host_name_t *next;
-} socki_host_name_t;
-
-static int already_used_or_add(char *host, socki_host_name_t **list)
-{
- socki_host_name_t *iter, *trailer;
-
- /* check if the host already has been used */
- iter = trailer = *list;
- while (iter)
- {
- if (strcmp(iter->host, host) == 0)
- {
- return 1;
- }
- if (trailer != iter)
- trailer = trailer->next;
- iter = iter->next;
- }
-
- /* the host has not been used so add a node for it */
- iter = (socki_host_name_t*)MPIU_Malloc(sizeof(socki_host_name_t));
- if (!iter)
- {
- /* if out of memory then treat it as not found */
- return 0;
- }
- MPIU_Strncpy(iter->host, host, 256);
-
- /* insert new hosts at the end of the list */
- if (trailer != NULL)
- {
- trailer->next = iter;
- iter->next = NULL;
- }
- else
- {
- iter->next = NULL;
- *list = iter;
- }
- /* insert new hosts at the beginning of the list
- iter->next = *list;
- *list = iter;
- */
-
- return 0;
-}
-
-static void socki_free_host_list(socki_host_name_t *list)
-{
- socki_host_name_t *iter;
- while (list)
- {
- iter = list;
- list = list->next;
- MPIU_Free(iter);
- }
-}
-
-static int socki_get_host_list(char *hostname, socki_host_name_t **listp)
-{
- int mpi_errno;
- struct addrinfo *res, *iter, hint;
- char host[256];
- socki_host_name_t *list = NULL;
-
- /* add the hostname to the beginning of the list */
- already_used_or_add(hostname, &list);
-
- hint.ai_flags = AI_PASSIVE | AI_CANONNAME;
- hint.ai_family = PF_UNSPEC;
- hint.ai_socktype = SOCK_STREAM;
- hint.ai_protocol = 0;
- hint.ai_addrlen = 0;
- hint.ai_canonname = NULL;
- hint.ai_addr = 0;
- hint.ai_next = NULL;
- if (getaddrinfo(hostname, NULL, NULL/*&hint*/, &res))
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**getinfo", "**getinfo %s %d", strerror(errno), errno);
- return mpi_errno;
- }
-
- /* add the host names */
- iter = res;
- while (iter)
- {
- if (iter->ai_canonname)
- {
- already_used_or_add(iter->ai_canonname, &list);
- }
- else
- {
- switch (iter->ai_family)
- {
- case PF_INET:
- case PF_INET6:
- if (getnameinfo(iter->ai_addr, (socklen_t)iter->ai_addrlen, host, 256, NULL, 0, 0) == 0)
- {
- already_used_or_add(host, &list);
- }
- break;
- }
- }
- iter = iter->ai_next;
- }
- /* add the names again, this time as ip addresses */
- iter = res;
- while (iter)
- {
- switch (iter->ai_family)
- {
- case PF_INET:
- case PF_INET6:
- if (getnameinfo(iter->ai_addr, (socklen_t)iter->ai_addrlen, host, 256, NULL, 0, NI_NUMERICHOST) == 0)
- {
- already_used_or_add(host, &list);
- }
- break;
- }
- iter = iter->ai_next;
- }
- if (res)
- {
- freeaddrinfo(res);
- }
-
- *listp = list;
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_hostname_to_host_description
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_hostname_to_host_description(char *hostname, char *host_description, int len)
-{
- int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
- socki_host_name_t *iter, *list = NULL;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_HOSTNAME_TO_HOST_DESCRIPTION);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_HOSTNAME_TO_HOST_DESCRIPTION);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_HOSTNAME_TO_HOST_DESCRIPTION);
- return mpi_errno;
- }
-
- mpi_errno = socki_get_host_list(hostname, &list);
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**fail", 0);
- goto fn_exit;
- }
-
- iter = list;
- while (iter)
- {
- MPIU_DBG_PRINTF(("adding host: %s\n", iter->host));
- str_errno = MPIU_Str_add_string(&host_description, &len, iter->host);
- MPIR_ERR_CHKANDJUMP(str_errno, mpi_errno, MPIDU_SOCK_ERR_NOMEM, "**desc_len");
-
- iter = iter->next;
- }
-
- fn_exit:
- socki_free_host_list(list);
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_HOSTNAME_TO_HOST_DESCRIPTION);
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_host_description
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_host_description(int myRank,
- char * host_description, int len)
-{
- int mpi_errno;
- char hostname[100];
- DWORD length = 100;
- char *env;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
-
- MPIU_UNREFERENCED_ARG(myRank);
-
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
- return mpi_errno;
- }
-
- env = getenv("MPICH_INTERFACE_HOSTNAME");
- if (env != NULL && *env != '\0')
- {
- MPIU_Strncpy(hostname, env, sizeof(hostname));
- }
- else
- {
- /*if (gethostname(hostname, 100) == SOCKET_ERROR)*/
- /*if (!GetComputerName(hostname, &length))*/
- if (!GetComputerNameEx(ComputerNameDnsFullyQualified, hostname, &length))
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock_gethost", "**sock_gethost %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
- return mpi_errno;
- }
- }
-
- mpi_errno = MPIDU_Sock_hostname_to_host_description(hostname, host_description, len);
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**fail", 0);
- }
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_create_set
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_create_set(MPIDU_Sock_set_t * set)
-{
- int mpi_errno;
- HANDLE port;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_CREATE_SET);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_CREATE_SET);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_CREATE_SET);
- return mpi_errno;
- }
- port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, g_num_cp_threads);
- if (port != NULL)
- {
- *set = port;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_CREATE_SET);
- return MPI_SUCCESS;
- }
- mpi_errno = GetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**iocp", "**iocp %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_CREATE_SET);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_destroy_set
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_destroy_set(MPIDU_Sock_set_t set)
-{
- int mpi_errno;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
- return mpi_errno;
- }
- if (!CloseHandle(set))
- {
- mpi_errno = GetLastError();
- if (mpi_errno == ERROR_INVALID_HANDLE)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SET, "**bad_set", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
- return mpi_errno;
- }
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
- return mpi_errno;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_native_to_sock
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_native_to_sock(MPIDU_Sock_set_t set, MPIDU_SOCK_NATIVE_FD fd, void *user_ptr, MPIDU_Sock_t *sock_ptr)
-{
- int mpi_errno;
- /*int ret_val;*/
- sock_state_t *sock_state;
- /*u_long optval;*/
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK);
- return mpi_errno;
- }
-
- /* setup the structures */
- sock_state = (sock_state_t*)MPIU_Malloc(sizeof(sock_state_t));
- if (sock_state == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM, "**nomem", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK);
- return mpi_errno;
- }
- init_state_struct(sock_state);
- sock_state->sock = (SOCKET)fd;
-
- /* set the socket to non-blocking */
- /* leave the native handle in the state passed in?
- optval = TRUE;
- ioctlsocket(sock_state->sock, FIONBIO, &optval);
- */
-
- sock_state->user_ptr = user_ptr;
- sock_state->type = SOCKI_SOCKET;
- sock_state->state = 0;
- sock_state->set = set;
-
- /* associate the socket with the completion port */
- /*printf("CreateIOCompletionPort(%d, %p, %p, %d)\n", sock_state->sock, set, sock_state, g_num_cp_threads);fflush(stdout);*/
- if (CreateIoCompletionPort((HANDLE)sock_state->sock, set, (ULONG_PTR)sock_state, g_num_cp_threads) == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM, "**nomem", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK);
- return mpi_errno;
- }
-
- *sock_ptr = sock_state;
-
- /*printf("native socket %d\n", sock_state->sock);fflush(stdout);*/
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_listen
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_listen(MPIDU_Sock_set_t set, void * user_ptr, int * port, MPIDU_Sock_t * sock)
-{
- int mpi_errno;
- char host[100];
- sock_state_t * listen_state, **listener_copies;
- int i;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_LISTEN);
- MPIDI_STATE_DECL(MPID_STATE_MEMCPY);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_LISTEN);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);
- return mpi_errno;
- }
-
- listen_state = (sock_state_t*)MPIU_Malloc(sizeof(sock_state_t));
- init_state_struct(listen_state);
- mpi_errno = easy_create_ranged(&listen_state->listen_sock, *port, INADDR_ANY);
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock_create", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);
- return mpi_errno;
- }
- if (listen(listen_state->listen_sock, SOMAXCONN) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**listen", "**listen %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);
- return mpi_errno;
- }
- if (CreateIoCompletionPort((HANDLE)listen_state->listen_sock, set, (ULONG_PTR)listen_state, g_num_cp_threads) == NULL)
- {
- mpi_errno = GetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**iocp", "**iocp %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);
- return mpi_errno;
- }
- easy_get_sock_info(listen_state->listen_sock, host, port);
- listen_state->user_ptr = user_ptr;
- listen_state->type = SOCKI_LISTENER;
- listen_state->set = set;
-
- /* post the accept(s) last to make sure the listener state structure is completely initialized before
- a completion thread has the chance to satisfy the AcceptEx call */
-
- listener_copies = (sock_state_t**)MPIU_Malloc(g_num_posted_accepts * sizeof(sock_state_t*));
- for (i=0; i<g_num_posted_accepts; i++)
- {
- listener_copies[i] = (sock_state_t*)MPIU_Malloc(sizeof(sock_state_t));
- MPIDI_FUNC_ENTER(MPID_STATE_MEMCPY);
- memcpy(listener_copies[i], listen_state, sizeof(*listen_state));
- MPIDI_FUNC_EXIT(MPID_STATE_MEMCPY);
- if (i > 0)
- {
- listener_copies[i]->next = listener_copies[i-1];
- }
- mpi_errno = post_next_accept(listener_copies[i]);
- if (mpi_errno != MPI_SUCCESS)
- {
- MPIU_Free(listener_copies);
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**post_accept", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);
- return mpi_errno;
- }
- }
- listen_state->list = listener_copies[g_num_posted_accepts-1];
- MPIU_Free(listener_copies);
-
- *sock = listen_state;
- /*printf("listening socket %d\n", listen_state->listen_sock);fflush(stdout);*/
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_accept
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_accept(MPIDU_Sock_t listener_sock, MPIDU_Sock_set_t set, void * user_ptr, MPIDU_Sock_t * sock)
-{
- int mpi_errno;
- BOOL b;
- /*struct linger linger;*/
- u_long optval;
- int len;
- sock_state_t *accept_state, *iter;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_ACCEPT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_ACCEPT);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_ACCEPT);
- return mpi_errno;
- }
-
- accept_state = MPIU_Malloc(sizeof(sock_state_t));
- if (accept_state == NULL)
- {
- *sock = NULL;
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM, "**nomem", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_ACCEPT);
- return mpi_errno;
- }
- init_state_struct(accept_state);
-
- accept_state->type = SOCKI_SOCKET;
-
- /* find the listener copy that satisfied the acceptex call and post another accept */
- iter = listener_sock->list;
- while (iter != NULL && iter->accepted == 0)
- iter = iter->next;
- if (iter == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock_nop_accept", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_ACCEPT);
- return mpi_errno;
- }
- accept_state->sock = iter->sock;
- mpi_errno = post_next_accept(iter);
- if (mpi_errno != MPI_SUCCESS)
- {
- *sock = NULL;
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**post_accept", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_ACCEPT);
- return mpi_errno;
- }
-
- /* finish the accept */
- setsockopt(accept_state->sock, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, (char *)&listener_sock->listen_sock, sizeof(listener_sock->listen_sock));
-
- /* set the socket to non-blocking */
- optval = TRUE;
- ioctlsocket(accept_state->sock, FIONBIO, &optval);
-
- /* set the linger option */
- /*
- linger.l_onoff = 1;
- linger.l_linger = 60;
- setsockopt(accept_state->sock, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger));
- */
-
- /* set the socket buffers */
- len = sizeof(int);
- if (!getsockopt(accept_state->sock, SOL_SOCKET, SO_RCVBUF, (char*)&optval, &len))
- {
- optval = g_socket_rbuffer_size;
- setsockopt(accept_state->sock, SOL_SOCKET, SO_RCVBUF, (char*)&optval, sizeof(int));
- }
- len = sizeof(int);
- if (!getsockopt(accept_state->sock, SOL_SOCKET, SO_SNDBUF, (char*)&optval, &len))
- {
- optval = g_socket_sbuffer_size;
- setsockopt(accept_state->sock, SOL_SOCKET, SO_SNDBUF, (char*)&optval, sizeof(int));
- }
-
- /* set the no-delay option */
- b = TRUE;
- setsockopt(accept_state->sock, IPPROTO_TCP, TCP_NODELAY, (char*)&b, sizeof(BOOL));
-
- /* prevent the socket from being inherited by child processes */
- DuplicateHandle(
- GetCurrentProcess(), (HANDLE)accept_state->sock,
- GetCurrentProcess(), (HANDLE*)&accept_state->sock,
- 0, FALSE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS);
-
- /* associate the socket with the completion port */
- if (CreateIoCompletionPort((HANDLE)accept_state->sock, set, (ULONG_PTR)accept_state, g_num_cp_threads) == NULL)
- {
- mpi_errno = GetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**iocp", "**iocp %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_ACCEPT);
- return mpi_errno;
- }
-
- accept_state->user_ptr = user_ptr;
- accept_state->set = set;
- *sock = accept_state;
-
- /*printf("accepted socket %d\n", accept_state->sock);fflush(stdout);*/
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_ACCEPT);
- return MPI_SUCCESS;
-}
-
-static unsigned int GetIP(char *pszIP)
-{
- unsigned int nIP;
- unsigned int a,b,c,d;
- if (pszIP == NULL)
- return 0;
- sscanf(pszIP, "%u.%u.%u.%u", &a, &b, &c, &d);
- /*printf("mask: %u.%u.%u.%u\n", a, b, c, d);fflush(stdout);*/
- nIP = (d << 24) | (c << 16) | (b << 8) | a;
- return nIP;
-}
-
-static unsigned int GetMask(char *pszMask)
-{
- int i, nBits;
- unsigned int nMask = 0;
- unsigned int a,b,c,d;
-
- if (pszMask == NULL)
- return 0;
-
- if (strstr(pszMask, "."))
- {
- sscanf(pszMask, "%u.%u.%u.%u", &a, &b, &c, &d);
- /*printf("mask: %u.%u.%u.%u\n", a, b, c, d);fflush(stdout);*/
- nMask = (d << 24) | (c << 16) | (b << 8) | a;
- }
- else
- {
- nBits = atoi(pszMask);
- for (i=0; i<nBits; i++)
- {
- nMask = nMask << 1;
- nMask = nMask | 0x1;
- }
- }
- /*
- unsigned int a, b, c, d;
- a = ((unsigned char *)(&nMask))[0];
- b = ((unsigned char *)(&nMask))[1];
- c = ((unsigned char *)(&nMask))[2];
- d = ((unsigned char *)(&nMask))[3];
- printf("mask: %u.%u.%u.%u\n", a, b, c, d);fflush(stdout);
- */
- return nMask;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_connect
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_connect(MPIDU_Sock_set_t set, void * user_ptr, char * host_description, int port, MPIDU_Sock_t * sock)
-{
- int mpi_errno;
- int str_errno = MPIU_STR_SUCCESS;
- struct hostent *lphost;
- struct sockaddr_in sockAddr;
- sock_state_t *connect_state;
- u_long optval;
- char host[100];
- int i;
- int connected = 0;
- int connect_errno = MPI_SUCCESS;
- char pszNetMask[50];
- char *pEnv, *token;
- unsigned int nNicNet=0, nNicMask=0;
- int use_subnet = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- }
- if (strlen(host_description) > SOCKI_DESCRIPTION_LENGTH)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM, "**nomem", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- }
-
- memset(&sockAddr,0,sizeof(sockAddr));
-
- /* setup the structures */
- connect_state = (sock_state_t*)MPIU_Malloc(sizeof(sock_state_t));
- init_state_struct(connect_state);
- connect_state->cur_host = connect_state->host_description;
- MPIU_Strncpy(connect_state->host_description, host_description, SOCKI_DESCRIPTION_LENGTH);
-
- /* create a socket */
- mpi_errno = easy_create(&connect_state->sock, ADDR_ANY, INADDR_ANY);
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_create", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- }
-
- /* check to see if a subnet was specified through the environment */
- pEnv = getenv("MPICH_NETMASK");
- if (pEnv != NULL)
- {
- MPIU_Strncpy(pszNetMask, pEnv, 50);
- token = strtok(pszNetMask, "/");
- if (token != NULL)
- {
- token = strtok(NULL, "\n");
- if (token != NULL)
- {
- nNicNet = GetIP(pszNetMask);
- nNicMask = GetMask(token);
- use_subnet = 1;
- }
- }
- }
-
- while (!connected)
- {
- host[0] = '\0';
- str_errno = MPIU_Str_get_string(&connect_state->cur_host, host, 100);
- /*printf("got <%s> out of <%s>\n", host, connect_state->host_description);fflush(stdout);*/
- if (str_errno != MPIU_STR_SUCCESS)
- {
- if (str_errno == MPIU_STR_NOMEM)
- mpi_errno = MPIR_Err_create_code(connect_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM, "**nomem", 0);
- else
- mpi_errno = MPIR_Err_create_code(connect_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %d", mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- }
- if (host[0] == '\0')
- {
- mpi_errno = MPIR_Err_create_code(connect_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock_connect", "**sock_connect %s %d %s %d", connect_state->host_description, port, "exhausted all endpoints", -1);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- }
-
- sockAddr.sin_family = AF_INET;
- sockAddr.sin_addr.s_addr = inet_addr(host);
-
- if (sockAddr.sin_addr.s_addr == INADDR_NONE || sockAddr.sin_addr.s_addr == 0)
- {
- lphost = gethostbyname(host);
- if (lphost != NULL)
- sockAddr.sin_addr.s_addr = ((struct in_addr *)lphost->h_addr)->s_addr;
- else
- {
- mpi_errno = WSAGetLastError();
- connect_errno = MPIR_Err_create_code(connect_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**gethostbyname", "**gethostbyname %s %d", get_error_string(mpi_errno), mpi_errno);
- /*
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- */
- continue;
- }
- }
-
- /* if a subnet was specified, make sure the currently extracted ip falls in the subnet */
- if (use_subnet)
- {
- if ((sockAddr.sin_addr.s_addr & nNicMask) != nNicNet)
- {
- /* this ip does not match, move to the next */
- continue;
- }
- }
-
- sockAddr.sin_port = htons((u_short)port);
-
- /* connect */
- for (i=0; i<5; i++)
- {
- /*printf("connecting to %s\n", host);fflush(stdout);*/
- if (connect(connect_state->sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR)
- {
- int random_time;
- int error = WSAGetLastError();
- if ((error != WSAECONNREFUSED && error != WSAETIMEDOUT) || i == 4)
- {
- connect_errno = MPIR_Err_create_code(connect_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_connect", "**sock_connect %s %d %s %d", host, port, get_error_string(error), error);
- /*
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- */
- /* This code assumes that all errors other than WSAECONNREFUSED and WSAETIMEDOUT should not cause a connection retry */
- /* FIXME: Is this correct for resource errors like WSAENOBUFS or an interrupted operation? */
- /* Should all errors cause a retry? or just WSAECONNREFUSED? or a subset of the possible errors? */
- /* The reason for not retrying on all errors is that it slows down connection time for multi-nic
- /* hosts that cannot be contacted on the first address listed. */
- break;
- }
- /* Close the socket with an error and create a new one */
- if (closesocket(connect_state->sock) == SOCKET_ERROR)
- {
- error = WSAGetLastError();
- connect_errno = MPIR_Err_create_code(connect_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_connect", "**sock_connect %s %d %s %d", host, port, get_error_string(error), error);
- /*
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- */
- break;
- }
- connect_state->sock = INVALID_SOCKET;
- mpi_errno = easy_create(&connect_state->sock, ADDR_ANY, INADDR_ANY);
- if (mpi_errno != MPI_SUCCESS)
- {
- /* Warning: Loss of information. We have two error stacks, one in connect_errno and the other in mpi_errno, that cannot be joined given the current error code interface. */
- /*connect_errno = MPIR_Err_create_code(connect_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_create", 0);*/
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_create", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- }
- random_time = (int)((double)rand() / (double)RAND_MAX * 250.0);
- Sleep(random_time);
- }
- else
- {
- /*printf("connect to %s:%d succeeded.\n", host, port);fflush(stdout);*/
- connected = 1;
- break;
- }
- }
- }
-
- /* set the socket to non-blocking */
- optval = TRUE;
- ioctlsocket(connect_state->sock, FIONBIO, &optval);
-
- connect_state->user_ptr = user_ptr;
- connect_state->type = SOCKI_SOCKET;
- connect_state->state = SOCKI_CONNECTING;
- connect_state->set = set;
-
- /* associate the socket with the completion port */
- if (CreateIoCompletionPort((HANDLE)connect_state->sock, set, (ULONG_PTR)connect_state, g_num_cp_threads) == NULL)
- {
- mpi_errno = GetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**iocp", "**iocp %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return mpi_errno;
- }
-
- connect_state->pending_operations++;
-
- /* post a completion event so the sock_post_connect can be notified through sock_wait */
- PostQueuedCompletionStatus(set, 0, (ULONG_PTR)connect_state, &connect_state->write.ovl);
-
- *sock = connect_state;
-
- /*printf("connected socket %d\n", connect_state->sock);fflush(stdout);*/
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_set_user_ptr
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_set_user_ptr(MPIDU_Sock_t sock, void * user_ptr)
-{
- int mpi_errno;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
- return mpi_errno;
- }
- if (sock == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**bad_sock", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
- return mpi_errno;
- }
- sock->user_ptr = user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_close
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_close(MPIDU_Sock_t sock)
-{
- int mpi_errno;
- SOCKET s, *sp;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
-
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
-
- if (sock == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**nullptr", "**nullptr %s", "sock");
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
- if (sock->closing)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**pctwice", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
-
- if (sock->type == SOCKI_LISTENER)
- {
- s = sock->listen_sock;
- sp = &sock->listen_sock;
- }
- else
- {
- s = sock->sock;
- sp = &sock->sock;
- }
- if (s == INVALID_SOCKET)
- {
- if (sock->type == SOCKI_LISTENER)
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**bad_listenersock", 0);
- else
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**bad_sock", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
-
- if (sock->pending_operations != 0)
- {
- /*MPIU_Assert(sock->state != 0);*/ /* The state can be 0 if the operation was aborted */
-#ifdef MPICH_DBG_OUTPUT
- if (sock->state & SOCKI_CONNECTING)
- MPIU_DBG_PRINTF(("sock_post_close(%d) called while sock is connecting.\n", MPIDU_Sock_get_sock_id(sock)));
- if (sock->state & SOCKI_READING)
- {
- int i, n = 0;
- for (i=0; i<sock->read.iovlen; i++)
- n += sock->read.iov[i].MPL_IOV_LEN;
- MPIU_DBG_PRINTF(("sock_post_close(%d) called while sock is reading: %d bytes out of %d, index %d, iovlen %d.\n",
- MPIDU_Sock_get_sock_id(sock), sock->read.total, n, sock->read.index, sock->read.iovlen));
- }
- if (sock->state & SOCKI_WRITING)
- {
- int i, n = 0;
- for (i=0; i<sock->write.iovlen; i++)
- n += sock->write.iov[i].MPL_IOV_LEN;
- MPIU_DBG_PRINTF(("sock_post_close(%d) called while sock is writing: %d bytes out of %d, index %d, iovlen %d.\n",
- MPIDU_Sock_get_sock_id(sock), sock->write.total, n, sock->write.index, sock->write.iovlen));
- }
- fflush(stdout);
-#endif
- /*
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return SOCK_ERR_OP_IN_PROGRESS;
- */
- /* posting a close cancels all outstanding operations */
- /* It would be nice to cancel the outstanding reads or writes and then close the socket after handling the cancelled operations */
- /* But it cannot be done because CancelIo only cancels operations started by the current thread. There is no way to cancel all operations. */
- /*CancelIo(sock->sock);*/
- }
-
- sock->closing = TRUE;
- /*sock->ct1 = PMPI_Wtime();*/
- if (sock->type != SOCKI_LISTENER) /* calling shutdown for a listening socket is not valid */
- {
- /* Mark the socket as non-writable */
- if (shutdown(s, SD_SEND) == SOCKET_ERROR)
- {
- sock->pending_operations = 0;
- /*printf("closing socket %d\n", s);fflush(stdout);*/
- if (closesocket(s) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
- *sp = INVALID_SOCKET;
- if (!PostQueuedCompletionStatus(sock->set, 0, (ULONG_PTR)sock, NULL))
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**fail", "**fail %d", GetLastError());
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return MPI_SUCCESS;
- }
- }
- /* Cancel any outstanding operations */
- sock->pending_operations = 0;
-
- if (sock->type == SOCKI_SOCKET)
- {
- static char ch;
- mpi_errno = MPI_SUCCESS;
- if (sock->state ^ SOCKI_READING)
- {
- /* If a read is not already posted, post a bogus one here. */
- mpi_errno = MPIDU_Sock_post_read(sock, &ch, 1, 1, NULL);
- /* ignore this posted read so wait will return an op_close */
- sock->pending_operations = 0;
- }
- if (mpi_errno == MPI_SUCCESS)
- {
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return MPI_SUCCESS;
- }
- }
-
- if (sock->type != SOCKI_LISTENER) /* calling shutdown for a listening socket is not valid */
- {
- /* Mark the socket as non-readable */
- if (shutdown(s, SD_RECEIVE) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
- }
- /* Close the socket and insert a completion status so wait will return an op_close */
- /*printf("closing socket %d\n", s);fflush(stdout);*/
- if (closesocket(s) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
-
- }
- *sp = INVALID_SOCKET;
- if (!PostQueuedCompletionStatus(sock->set, 0, (ULONG_PTR)sock, NULL))
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**fail", "**fail %d", GetLastError());
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_read
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_read(MPIDU_Sock_t sock, void * buf, MPIU_Size_t minbr, MPIU_Size_t maxbr,
- MPIDU_Sock_progress_update_func_t fn)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_READ);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_READ);
- MPIU_UNREFERENCED_ARG(maxbr);
- sock->read.tiov.MPL_IOV_BUF = (MPL_IOV_BUF_CAST)buf;
- sock->read.tiov.MPL_IOV_LEN = minbr;
- mpi_errno = MPIDU_Sock_post_readv(sock, &sock->read.tiov, 1, fn);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_READ);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_readv
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_readv(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn)
-{
- int iter;
- int mpi_errno = MPI_SUCCESS;
- int result;
-#ifdef MPICH_DBG_OUTPUT
- int i;
-#endif
- DWORD flags = 0;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_READV);
-#ifdef USE_SOCK_IOV_COPY
- MPIDI_STATE_DECL(MPID_STATE_MEMCPY);
-#endif
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_READV);
- if (!g_init_called)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, "**sock_init", 0);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_READV);
- return mpi_errno;
- }
- /*sock->rt1 = PMPI_Wtime();*/
- /* strip any trailing empty buffers */
- while (iov_n && iov[iov_n-1].MPL_IOV_LEN == 0)
- iov_n--;
- sock->read.total = 0;
-#ifdef USE_SOCK_IOV_COPY
- MPIDI_FUNC_ENTER(MPID_STATE_MEMCPY);
- memcpy(sock->read.iov, iov, sizeof(MPL_IOV) * n);
- MPIDI_FUNC_EXIT(MPID_STATE_MEMCPY);
-#else
- sock->read.iov = iov;
-#endif
- sock->read.iovlen = iov_n;
- sock->read.index = 0;
- sock->read.progress_update = fn;
- sock->state |= SOCKI_READING;
-#ifdef MPICH_DBG_OUTPUT
- for (i=0; i<iov_n; i++)
- {
- MPIU_DBG_PRINTF(("sock_post_readv - iov[%d].len = %d\n", i, iov[i].MPL_IOV_LEN));
- }
-#endif
- for (iter=0; iter<10; iter++)
- {
- if ((result = WSARecv(sock->sock, sock->read.iov, iov_n, &sock->read.num_bytes, &flags, &sock->read.ovl, NULL)) != SOCKET_ERROR)
- {
- break;
- }
-
- mpi_errno = WSAGetLastError();
- if (mpi_errno == WSA_IO_PENDING)
- {
- mpi_errno = MPI_SUCCESS;
- break;
- }
- if (mpi_errno == WSAENOBUFS)
- {
- WSABUF tmp;
- tmp.buf = sock->read.iov[0].buf;
- tmp.len = sock->read.iov[0].len;
- MPIU_Assert(tmp.len > 0);
- while (mpi_errno == WSAENOBUFS)
- {
- /*printf("[%d] receiving %d bytes\n", __LINE__, tmp.len);fflush(stdout);*/
- if ((result = WSARecv(sock->sock, &tmp, 1, &sock->read.num_bytes, &flags, &sock->read.ovl, NULL)) != SOCKET_ERROR)
- {
- mpi_errno = MPI_SUCCESS;
- break;
- }
- mpi_errno = WSAGetLastError();
- if (mpi_errno == WSA_IO_PENDING)
- {
- mpi_errno = MPI_SUCCESS;
- break;
- }
- /*printf("[%d] reducing recv length from %d to %d\n", __LINE__, tmp.len, tmp.len / 2);fflush(stdout);*/
- tmp.len = tmp.len / 2;
- if (tmp.len == 0 && mpi_errno == WSAENOBUFS)
- {
- break;
- }
- }
- if (mpi_errno == MPI_SUCCESS)
- {
- break;
- }
- }
- if (mpi_errno != WSAEWOULDBLOCK)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- break;
- }
- Sleep(200);
- }
- if (mpi_errno == MPI_SUCCESS)
- sock->pending_operations++;
- else
- sock->state &= ~SOCKI_READING;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_READV);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_write
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_write(MPIDU_Sock_t sock, void * buf, MPIU_Size_t min, MPIU_Size_t max, MPIDU_Sock_progress_update_func_t fn)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_WRITE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_WRITE);
- MPIU_UNREFERENCED_ARG(max);
- sock->write.tiov.MPL_IOV_BUF = (MPL_IOV_BUF_CAST)buf;
- sock->write.tiov.MPL_IOV_LEN = min;
- mpi_errno = MPIDU_Sock_post_writev(sock, &sock->write.tiov, 1, fn);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_WRITE);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_writev
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_writev(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn)
-{
- int mpi_errno = MPI_SUCCESS;
- int iter;
-#ifdef MPICH_DBG_OUTPUT
- int i;
-#endif
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_WRITEV);
-#ifdef USE_SOCK_IOV_COPY
- MPIDI_STATE_DECL(MPID_STATE_MEMCPY);
-#endif
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_WRITEV);
- /*sock->wt1 = PMPI_Wtime();*/
- sock->write.total = 0;
-#ifdef USE_SOCK_IOV_COPY
- MPIDI_FUNC_ENTER(MPID_STATE_MEMCPY);
- memcpy(sock->write.iov, iov, sizeof(MPL_IOV) * iov_n);
- MPIDI_FUNC_EXIT(MPID_STATE_MEMCPY);
-#else
- sock->write.iov = iov;
-#endif
- sock->write.iovlen = iov_n;
- sock->write.index = 0;
- sock->write.progress_update = fn;
- sock->state |= SOCKI_WRITING;
-#ifdef MPICH_DBG_OUTPUT
- for (i=0; i<iov_n; i++)
- {
- MPIU_DBG_PRINTF(("sock_post_writev - iov[%d].len = %d\n", i, iov[i].MPL_IOV_LEN));
- }
-#endif
- for (iter=0; iter<10; iter++)
- {
- if (WSASend(sock->sock, sock->write.iov, iov_n, &sock->write.num_bytes, 0, &sock->write.ovl, NULL) != SOCKET_ERROR)
- break;
-
- mpi_errno = WSAGetLastError();
- if (mpi_errno == WSA_IO_PENDING)
- {
- mpi_errno = MPI_SUCCESS;
- break;
- }
- if (mpi_errno == WSAENOBUFS)
- {
- WSABUF tmp;
- tmp.buf = sock->write.iov[0].buf;
- tmp.len = sock->write.iov[0].len;
- while (mpi_errno == WSAENOBUFS)
- {
- /*printf("[%d] sending %d bytes\n", __LINE__, tmp.len);fflush(stdout);*/
- if (WSASend(sock->sock, &tmp, 1, &sock->write.num_bytes, 0, &sock->write.ovl, NULL) != SOCKET_ERROR)
- {
- mpi_errno = MPI_SUCCESS;
- break;
- }
- mpi_errno = WSAGetLastError();
- if (mpi_errno == WSA_IO_PENDING)
- {
- mpi_errno = MPI_SUCCESS;
- break;
- }
- /*printf("[%d] reducing send length from %d to %d\n", __LINE__, tmp.len, tmp.len / 2);fflush(stdout);*/
- tmp.len = tmp.len / 2;
- if (tmp.len == 0)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", 0);
- break;
- }
- }
- if (mpi_errno == MPI_SUCCESS)
- {
- break;
- }
- }
- if (mpi_errno != WSAEWOULDBLOCK)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- break;
- }
- Sleep(200);
- }
- if (mpi_errno == MPI_SUCCESS)
- sock->pending_operations++;
- else
- sock->state &= ~SOCKI_WRITING;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_WRITEV);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_wait
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_wait(MPIDU_Sock_set_t set, int timeout, MPIDU_Sock_event_t * out)
-{
- /*double t1, t2;*/
- int mpi_errno;
- DWORD num_bytes;
- sock_state_t *sock, *iter;
- OVERLAPPED *ovl;
- DWORD dwFlags = 0;
- char error_msg[1024];
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_WAIT);
- MPIDI_STATE_DECL(MPID_STATE_GETQUEUEDCOMPLETIONSTATUS);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_WAIT);
-
- for (;;)
- {
-#if defined(MPICH_IS_THREADED)
-# if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
- {
- int err;
- /* Release the lock so that other threads may make progress while this thread waits for something to do */
- MPIU_DBG_MSG(THREAD,TYPICAL,"Exit global critical section");
- MPIU_THREAD_CHECK_BEGIN;
- MPID_Thread_mutex_unlock(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
- MPIU_THREAD_CHECK_END;
- }
-# else
-# error selected multi-threaded implementation is not supported
-# endif
-#endif
- MPIDI_FUNC_ENTER(MPID_STATE_GETQUEUEDCOMPLETIONSTATUS);
- /* initialize to NULL so we can compare the output of GetQueuedCompletionStatus */
- sock = NULL;
- ovl = NULL;
- num_bytes = 0;
- /*t1 = PMPI_Wtime();*/
- if (GetQueuedCompletionStatus(set, &num_bytes, (PULONG_PTR)&sock, &ovl, timeout))
- {
- /*t2 = PMPI_Wtime();*/
- /*printf("[%d] GetQueuedCompletionStatus took %.3f seconds for sock: %d\n", getpid(), t2-t1, sock->sock);*/
- MPIDI_FUNC_EXIT(MPID_STATE_GETQUEUEDCOMPLETIONSTATUS);
-#if defined(MPICH_IS_THREADED)
-# if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
- {
- int err;
- /* Reaquire the lock before processing any of the information returned from GetQueuedCompletionStatus */
- MPIU_DBG_MSG(THREAD,TYPICAL,"Enter global critical section");
- MPIU_THREAD_CHECK_BEGIN;
- MPID_Thread_mutex_lock(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
- MPIU_THREAD_CHECK_END;
- }
-# else
-# error selected multi-threaded implementation is not supported
-# endif
-#endif
- if (sock->type == SOCKI_SOCKET)
- {
- if (sock->closing && sock->pending_operations == 0)
- {
- /*sock->ct2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_close to op_close: %.3f - sock %d\n", getpid(), sock->ct2 - sock->ct1, sock->sock);*/
- /*printf("<1>");fflush(stdout);*/
- out->op_type = MPIDU_SOCK_OP_CLOSE;
- out->num_bytes = 0;
- out->error = MPI_SUCCESS;
- out->user_ptr = sock->user_ptr;
- CloseHandle(sock->read.ovl.hEvent);
- CloseHandle(sock->write.ovl.hEvent);
- sock->read.ovl.hEvent = NULL;
- sock->write.ovl.hEvent = NULL;
- if (sock->sock != INVALID_SOCKET)
- {
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- if (ovl == &sock->read.ovl)
- {
- if (num_bytes == 0)
- {
- /*sock->rt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_read to op_read : %.3f - sock %d\n", getpid(), sock->rt2 - sock->rt1, sock->sock);*/
- /* socket closed */
- MPIU_DBG_PRINTF(("sock_wait readv returning %d bytes and EOF\n", sock->read.total));
- /*printf("sock_wait readv returning %d bytes and EOF\n", sock->read.total);*/
- out->op_type = MPIDU_SOCK_OP_READ;
- out->num_bytes = sock->read.total;
- out->error = MPIDU_SOCK_ERR_CONN_CLOSED;
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_READING; /* remove the SOCKI_READING bit */
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov read completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- MPIU_DBG_PRINTF(("sock_wait readv update: %d bytes\n", num_bytes));
- sock->read.total += num_bytes;
- while (num_bytes)
- {
- if (sock->read.iov[sock->read.index].MPL_IOV_LEN <= num_bytes)
- {
- num_bytes -= sock->read.iov[sock->read.index].MPL_IOV_LEN;
- sock->read.index++;
- sock->read.iovlen--;
- }
- else
- {
- sock->read.iov[sock->read.index].MPL_IOV_LEN -= num_bytes;
- sock->read.iov[sock->read.index].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)(
- (char*)(sock->read.iov[sock->read.index].MPL_IOV_BUF) + num_bytes);
- num_bytes = 0;
- }
- }
- if (sock->read.iovlen == 0)
- {
- /*sock->rt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_read to op_read : %.3f - sock %d\n", getpid(), sock->rt2 - sock->rt1, sock->sock);*/
- MPIU_DBG_PRINTF(("sock_wait readv %d bytes\n", sock->read.total));
- out->op_type = MPIDU_SOCK_OP_READ;
- out->num_bytes = sock->read.total;
- out->error = MPI_SUCCESS;
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_READING; /* remove the SOCKI_READING bit */
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov read completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- /* make the user upcall */
- if (sock->read.progress_update != NULL)
- sock->read.progress_update(num_bytes, sock->user_ptr);
- /* post a read of the remaining data */
- /*WSARecv(sock->sock, sock->read.iov, sock->read.iovlen, &sock->read.num_bytes, &dwFlags, &sock->read.ovl, NULL);*/
- if (WSARecv(sock->sock, &sock->read.iov[sock->read.index], sock->read.iovlen, &sock->read.num_bytes, &dwFlags, &sock->read.ovl, NULL) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- if (mpi_errno == 0)
- {
- /*sock->rt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_read to op_read : %.3f - sock %d\n", getpid(), sock->rt2 - sock->rt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_READ;
- out->num_bytes = sock->read.total;
- /*printf("sock_wait returning %d bytes and socket closed\n", sock->read.total);*/
- out->error = MPIDU_SOCK_ERR_CONN_CLOSED;
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_READING;
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov read completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- if (mpi_errno == WSAENOBUFS)
- {
- WSABUF tmp;
- tmp.buf = sock->read.iov[sock->read.index].buf;
- tmp.len = sock->read.iov[sock->read.index].len;
- while (mpi_errno == WSAENOBUFS)
- {
- /*printf("[%d] receiving %d bytes\n", __LINE__, tmp.len);fflush(stdout);*/
- if (WSARecv(sock->sock, &tmp, 1, &sock->read.num_bytes, &dwFlags, &sock->read.ovl, NULL) != SOCKET_ERROR)
- {
- mpi_errno = WSA_IO_PENDING;
- break;
- }
- mpi_errno = WSAGetLastError();
- if (mpi_errno == WSA_IO_PENDING)
- {
- break;
- }
- /*printf("[%d] reducing recv length from %d to %d\n", __LINE__, tmp.len, tmp.len / 2);fflush(stdout);*/
- tmp.len = tmp.len / 2;
- if (tmp.len == 0 && mpi_errno == WSAENOBUFS)
- {
- break;
- }
- }
- }
- if (mpi_errno != WSA_IO_PENDING)
- {
- /*sock->rt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_read to op_read : %.3f - sock %d\n", getpid(), sock->rt2 - sock->rt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_READ;
- out->num_bytes = sock->read.total;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_READING;
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov read completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- }
- else if (ovl == &sock->write.ovl)
- {
- if (sock->state & SOCKI_CONNECTING)
- {
- /* insert code here to determine that the connect succeeded */
- /* ... */
- out->op_type = MPIDU_SOCK_OP_CONNECT;
- out->num_bytes = 0;
- out->error = MPI_SUCCESS;
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state ^= SOCKI_CONNECTING; /* remove the SOCKI_CONNECTING bit */
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after connect completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- else
- {
- if (num_bytes == 0)
- {
- /*sock->wt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_write to op_write: %.3f - sock %d\n", getpid(), sock->wt2 - sock->wt1, sock->sock);*/
- /* socket closed */
- MPIU_DBG_PRINTF(("sock_wait writev returning %d bytes and EOF\n", sock->write.total));
- out->op_type = MPIDU_SOCK_OP_WRITE;
- out->num_bytes = sock->write.total;
- /*printf("sock_wait writev returning %d bytes and EOF\n", sock->write.total);*/
- out->error = MPIDU_SOCK_ERR_CONN_CLOSED;
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_WRITING; /* remove the SOCKI_WRITING bit */
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov write completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- MPIU_DBG_PRINTF(("sock_wait: write update, total = %d + %d = %d\n", sock->write.total, num_bytes, sock->write.total + num_bytes));
- sock->write.total += num_bytes;
- while (num_bytes)
- {
- if (sock->write.iov[sock->write.index].MPL_IOV_LEN <= num_bytes)
- {
- /*MPIU_DBG_PRINTF(("sock_wait: write.index %d, len %d\n", sock->write.index,
- sock->write.iov[sock->write.index].MPL_IOV_LEN));*/
- num_bytes -= sock->write.iov[sock->write.index].MPL_IOV_LEN;
- sock->write.index++;
- sock->write.iovlen--;
- }
- else
- {
- /*MPIU_DBG_PRINTF(("sock_wait: partial data written [%d].len = %d, num_bytes = %d\n", sock->write.index,
- sock->write.iov[sock->write.index].MPL_IOV_LEN, num_bytes));*/
- sock->write.iov[sock->write.index].MPL_IOV_LEN -= num_bytes;
- sock->write.iov[sock->write.index].MPL_IOV_BUF = (MPL_IOV_BUF_CAST)(
- (char*)(sock->write.iov[sock->write.index].MPL_IOV_BUF) + num_bytes);
- num_bytes = 0;
- }
- }
- if (sock->write.iovlen == 0)
- {
- /*sock->wt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_write to op_write: %.3f - sock %d\n", getpid(), sock->wt2 - sock->wt1, sock->sock);*/
- if (sock->write.total > 0)
- {
- MPIU_DBG_PRINTF(("sock_wait wrotev %d bytes\n", sock->write.total));
- }
- out->op_type = MPIDU_SOCK_OP_WRITE;
- out->num_bytes = sock->write.total;
- out->error = MPI_SUCCESS;
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_WRITING; /* remove the SOCKI_WRITING bit */
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov write completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- /* make the user upcall */
- if (sock->write.progress_update != NULL)
- sock->write.progress_update(num_bytes, sock->user_ptr);
- /* post a write of the remaining data */
- MPIU_DBG_PRINTF(("sock_wait: posting write of the remaining data, vec size %d\n", sock->write.iovlen));
- if (WSASend(sock->sock, sock->write.iov, sock->write.iovlen, &sock->write.num_bytes, 0, &sock->write.ovl, NULL) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- if (mpi_errno == 0)
- {
- /*sock->wt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_write to op_write: %.3f - sock %d\n", getpid(), sock->wt2 - sock->wt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_WRITE;
- out->num_bytes = sock->write.total;
- /*printf("sock_wait returning %d bytes and socket closed\n", sock->write.total);*/
- out->error = MPIDU_SOCK_ERR_CONN_CLOSED;
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_WRITING;
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov read completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- if (mpi_errno == WSAENOBUFS)
- {
- WSABUF tmp;
- tmp.buf = sock->write.iov[0].buf;
- tmp.len = sock->write.iov[0].len;
- while (mpi_errno == WSAENOBUFS)
- {
- /*printf("[%d] sending %d bytes\n", __LINE__, tmp.len);fflush(stdout);*/
- if (WSASend(sock->sock, &tmp, 1, &sock->write.num_bytes, 0, &sock->write.ovl, NULL) != SOCKET_ERROR)
- {
- /* FIXME: does this data need to be handled immediately? */
- mpi_errno = WSA_IO_PENDING;
- break;
- }
- mpi_errno = WSAGetLastError();
- if (mpi_errno == WSA_IO_PENDING)
- {
- break;
- }
- /*printf("[%d] reducing send length from %d to %d\n", __LINE__, tmp.len, tmp.len / 2);fflush(stdout);*/
- tmp.len = tmp.len / 2;
- }
- }
- if (mpi_errno != WSA_IO_PENDING)
- {
- /*sock->wt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_write to op_write: %.3f - sock %d\n", getpid(), sock->wt2 - sock->wt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_WRITE;
- out->num_bytes = sock->write.total;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- out->user_ptr = sock->user_ptr;
- sock->pending_operations--;
- sock->state &= ~SOCKI_WRITING;
- if (sock->closing && sock->pending_operations == 0)
- {
- MPIU_DBG_PRINTF(("sock_wait: closing socket(%d) after iov read completed.\n", MPIDU_Sock_get_sock_id(sock)));
- FlushFileBuffers((HANDLE)sock->sock);
- if (shutdown(sock->sock, SD_BOTH) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**shutdown", "**shutdown %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- /*printf("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- }
- }
- else
- {
- if (num_bytes == 0)
- {
- if ((sock->state & SOCKI_READING))/* && sock-sock != INVALID_SOCKET) */
- {
- /*sock->rt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_read to op_read : %.3f - sock %d\n", getpid(), sock->rt2 - sock->rt1, sock->sock);*/
- MPIU_DBG_PRINTF(("EOF with posted read on sock %d\n", sock->sock));
- out->op_type = MPIDU_SOCK_OP_READ;
- out->num_bytes = sock->read.total;
- /*printf("sock_wait returning %d bytes and EOF\n", sock->read.total);*/
- out->error = MPIDU_SOCK_ERR_CONN_CLOSED;
- out->user_ptr = sock->user_ptr;
- sock->state &= ~SOCKI_READING;
- sock->pending_operations--;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- if ((sock->state & SOCKI_WRITING))/* && sock->sock != INVALID_SOCKET) */
- {
- /*sock->wt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_write to op_write: %.3f - sock %d\n", getpid(), sock->wt2 - sock->wt1, sock->sock);*/
- MPIU_DBG_PRINTF(("EOF with posted write on sock %d\n", sock->sock));
- out->op_type = MPIDU_SOCK_OP_WRITE;
- out->num_bytes = sock->write.total;
- /*printf("sock_wait returning %d bytes and EOF\n", sock->write.total);*/
- out->error = MPIDU_SOCK_ERR_CONN_CLOSED;
- out->user_ptr = sock->user_ptr;
- sock->state &= ~SOCKI_WRITING;
- sock->pending_operations--;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- MPIU_DBG_PRINTF(("ignoring EOF notification on unknown sock %d.\n", MPIDU_Sock_get_sock_id(sock)));
- }
-
- if (sock->sock != INVALID_SOCKET)
- {
- MPIU_DBG_PRINTF(("unmatched ovl: pending: %d, state = %d\n", sock->pending_operations, sock->state));
- /*MPL_error_printf("In sock_wait(), returned overlapped structure does not match the current read or write ovl: 0x%x\n", ovl);*/
- MPL_snprintf(error_msg, 1024, "In sock_wait(), returned overlapped structure does not match the current read or write ovl: 0x%p\n", ovl);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", error_msg);
- }
- else
- {
- MPIU_DBG_PRINTF(("ignoring notification on invalid sock.\n"));
- }
- }
- }
- else if (sock->type == SOCKI_WAKEUP)
- {
- out->op_type = MPIDU_SOCK_OP_WAKEUP;
- out->num_bytes = 0;
- out->error = MPI_SUCCESS;
- out->user_ptr = NULL;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- else if (sock->type == SOCKI_LISTENER)
- {
- if (sock->closing && sock->pending_operations == 0)
- {
- if (!sock->listener_closed)
- {
- /*sock->ct2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_close to op_close: %.3f - sock %d\n", getpid(), sock->ct2 - sock->ct1, sock->sock);*/
- /* signal that the listener has been closed and prevent further posted accept failures from returning extra close_ops */
- sock->listener_closed = 1;
- /*printf("<2>");fflush(stdout);*/
- out->op_type = MPIDU_SOCK_OP_CLOSE;
- out->num_bytes = 0;
- out->error = MPI_SUCCESS;
- out->user_ptr = sock->user_ptr;
- CloseHandle(sock->read.ovl.hEvent);
- CloseHandle(sock->write.ovl.hEvent);
- sock->read.ovl.hEvent = NULL;
- sock->write.ovl.hEvent = NULL;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- else
- {
- /* ignore multiple close operations caused by the outstanding accept operations */
- continue;
- }
- }
- iter = sock->list;
- while (iter && &iter->read.ovl != ovl)
- iter = iter->next;
- if (iter != NULL)
- iter->accepted = 1;
- out->op_type = MPIDU_SOCK_OP_ACCEPT;
- if (sock->listen_sock == INVALID_SOCKET)
- {
- MPL_error_printf("returning MPIDU_SOCK_OP_ACCEPT with an INVALID_SOCKET for the listener\n");
- }
- out->num_bytes = num_bytes;
- out->error = MPI_SUCCESS;
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- else
- {
- /*MPL_error_printf("sock type is not a SOCKET or a LISTENER, it's %d\n", sock->type);*/
- MPL_snprintf(error_msg, 1024, "sock type is not a SOCKET or a LISTENER, it's %d\n", sock->type);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", error_msg);
- }
- }
- else
- {
-#if defined(MPICH_IS_THREADED)
-# if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
- {
- int err;
- /* Reaquire the lock before processing any of the information returned from GetQueuedCompletionStatus */
- MPIU_DBG_MSG(THREAD,TYPICAL,"Enter global critical section");
- MPIU_THREAD_CHECK_BEGIN;
- MPID_Thread_mutex_lock(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
- MPIU_THREAD_CHECK_END;
- }
-# else
-# error selected multi-threaded implementation is not supported
-# endif
-#endif
- /*MPIDI_FUNC_EXIT(MPID_STATE_GETQUEUEDCOMPLETIONSTATUS);*/ /* Maybe the logging will reset the last error? */
- mpi_errno = GetLastError();
- /*t2 = PMPI_Wtime();*/
- /*printf("[%d] GetQueuedCompletionStatus took %.3f seconds for sock: %d\n", getpid(), t2-t1, sock != NULL ? sock->sock : 0);*/
- MPIDI_FUNC_EXIT(MPID_STATE_GETQUEUEDCOMPLETIONSTATUS);
- /* interpret error, return appropriate SOCK_ERR_... macro */
- if (mpi_errno == WAIT_TIMEOUT)
- {
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPIDU_SOCK_ERR_TIMEOUT;
- }
- if (mpi_errno == ERROR_OPERATION_ABORTED)
- {
- /* A thread exited causing GetQueuedCompletionStatus to return prematurely. */
- if (sock != NULL && !sock->closing)
- {
- /* re-post the aborted operation */
- if (sock->type == SOCKI_SOCKET)
- {
- if (ovl == &sock->read.ovl)
- {
- /*printf("repost readv of length %d\n", sock->read.iovlen);fflush(stdout);*/
- mpi_errno = MPIDU_Sock_post_readv(sock, sock->read.iov, sock->read.iovlen, NULL);
- if (mpi_errno != MPI_SUCCESS)
- {
- /*sock->rt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_read to op_read : %.3f - sock %d\n", getpid(), sock->rt2 - sock->rt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_READ;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", "Unable to re-post an aborted readv operation");
- out->user_ptr = sock->user_ptr;
- sock->state &= ~SOCKI_READING; /* remove the SOCKI_READING bit */
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- else if (ovl == &sock->write.ovl)
- {
- /*printf("repost writev of length %d\n", sock->write.iovlen);fflush(stdout);*/
- mpi_errno = MPIDU_Sock_post_writev(sock, sock->write.iov, sock->write.iovlen, NULL);
- if (mpi_errno != MPI_SUCCESS)
- {
- /*sock->wt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_write to op_write: %.3f - sock %d\n", getpid(), sock->wt2 - sock->wt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_WRITE;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", "Unable to re-post an aborted writev operation");
- out->user_ptr = sock->user_ptr;
- sock->state &= ~SOCKI_WRITING; /* remove the SOCKI_WRITING bit */
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- else
- {
- /*printf("aborted sock operation\n");fflush(stdout);*/
- out->op_type = -1;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", "Aborted socket operation");
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- else if (sock->type == SOCKI_WAKEUP)
- {
- /*printf("aborted wakeup operation\n");fflush(stdout);*/
- out->op_type = MPIDU_SOCK_OP_WAKEUP;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", "Aborted wakeup operation");
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- else if (sock->type == SOCKI_LISTENER)
- {
- /*printf("aborted listener operation\n");fflush(stdout);*/
- iter = sock->list;
- while (iter && &iter->read.ovl != ovl)
- iter = iter->next;
- if (iter != NULL)
- {
- mpi_errno = post_next_accept(iter);
- if (mpi_errno != MPI_SUCCESS)
- {
- out->op_type = MPIDU_SOCK_OP_ACCEPT;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", "Unable to re-post an aborted accept operation");
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- else
- {
- /*printf("aborted unknown listener socket operation\n");fflush(stdout);*/
- out->op_type = -1;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", "Aborted unknown listener socket operation");
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- else
- {
- /*printf("aborted unknown socket operation\n");fflush(stdout);*/
- out->op_type = -1;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s", "Aborted unknown socket operation");
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- continue;
- }
- }
- MPIU_DBG_PRINTF(("GetQueuedCompletionStatus failed, GetLastError: %d\n", mpi_errno));
- if (sock != NULL)
- {
- MPIU_DBG_PRINTF(("GetQueuedCompletionStatus failed, sock != null\n"));
- if (sock->type == SOCKI_SOCKET)
- {
- MPIU_DBG_PRINTF(("GetQueuedCompletionStatus failed, sock == SOCKI_SOCKET \n"));
- if (sock->closing)
- {
- /*sock->ct2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_close to op_close: %.3f - sock %d\n", getpid(), sock->ct2 - sock->ct1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_CLOSE;
- if (sock->sock != INVALID_SOCKET)
- {
- /*("closing socket %d\n", sock->sock);fflush(stdout);*/
- if (closesocket(sock->sock) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**closesocket", "**closesocket %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
- }
- sock->sock = INVALID_SOCKET;
- }
- }
- else
- {
- if (ovl == &sock->read.ovl)
- {
- /*sock->rt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_read to op_read : %.3f - sock %d\n", getpid(), sock->rt2 - sock->rt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_READ;
- sock->state &= ~SOCKI_READING; /* remove the SOCKI_READING bit */
- }
- else if (ovl == &sock->write.ovl)
- {
- /*sock->wt2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_write to op_write: %.3f - sock %d\n", getpid(), sock->wt2 - sock->wt1, sock->sock);*/
- out->op_type = MPIDU_SOCK_OP_WRITE;
- sock->state &= ~SOCKI_WRITING; /* remove the SOCKI_WRITING bit */
- }
- else
- {
- /* Shoud we reset the state bits? */
- sock->state &= ~SOCKI_READING; /* remove the SOCKI_READING bit */
- sock->state &= ~SOCKI_WRITING; /* remove the SOCKI_WRITING bit */
- out->op_type = -1;
- }
- }
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- if (sock->type == SOCKI_LISTENER)
- {
- MPIU_DBG_PRINTF(("GetQueuedCompletionStatus failed, sock == SOCKI_LISTENER \n"));
- /* this only works if the aborted operation is reported before the close is reported
- because the close will free the sock structure causing these dereferences bogus.
- I need to reference count the sock */
- if (sock->closing)
- {
- if (sock->listener_closed)
- {
- /* only return a close_op once for the main listener, not any of the copies */
- continue;
- }
- else
- {
- /*sock->ct2 = PMPI_Wtime();*/
- /*printf("[%d] time from post_close to op_close: %.3f - sock %d\n", getpid(), sock->ct2 - sock->ct1, sock->sock);*/
- sock->listener_closed = 1;
- /*printf("<3>");fflush(stdout);*/
- out->op_type = MPIDU_SOCK_OP_CLOSE;
- out->num_bytes = 0;
- if (mpi_errno == ERROR_OPERATION_ABORTED)
- out->error = MPI_SUCCESS;
- else
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- else
- {
- /* Should we return a SOCK_OP_ACCEPT with an error if there is a failure on the listener? */
- out->op_type = MPIDU_SOCK_OP_ACCEPT;
- out->num_bytes = 0;
- out->error = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- out->user_ptr = sock->user_ptr;
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- }
- }
- }
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- }
- }
- /* Unreachable code section - all sections exit/return before reaching this segment */
- /*
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return MPI_SUCCESS;
- */
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_wakeup
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_wakeup(MPIDU_Sock_set_t set)
-{
- /* post a completion event to wake up sock_wait */
- PostQueuedCompletionStatus(set, 0, (ULONG_PTR)&g_wakeup_state, &g_wakeup_state.write.ovl);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_read
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_read(MPIDU_Sock_t sock, void * buf, MPIU_Size_t len, MPIU_Size_t * num_read)
-{
- int mpi_errno = MPI_SUCCESS;
- MPL_IOV iov;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_READ);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_READ);
- iov.buf = buf;
- iov.len = len;
- mpi_errno = MPIDU_Sock_readv(sock, &iov, 1, num_read);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_READ);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_readv
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_readv(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIU_Size_t * num_read)
-{
- int mpi_errno = MPI_SUCCESS;
- DWORD nFlags = 0;
- DWORD num_read_local;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_READV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_READV);
-
- if (WSARecv(sock->sock, iov, iov_n, &num_read_local, &nFlags, NULL/*overlapped*/, NULL/*completion routine*/) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- *num_read = 0;
- if ((mpi_errno == WSAEWOULDBLOCK) || (mpi_errno == 0))
- {
- mpi_errno = MPI_SUCCESS;
- }
- else
- {
- if (mpi_errno == WSAENOBUFS)
- {
- WSABUF tmp;
- tmp.buf = iov[0].buf;
- tmp.len = iov[0].len;
- while (mpi_errno == WSAENOBUFS)
- {
- /*printf("[%d] receiving %d bytes\n", __LINE__, tmp.len);fflush(stdout);*/
- if (WSARecv(sock->sock, &tmp, 1, &num_read_local, &nFlags, NULL, NULL) != SOCKET_ERROR)
- {
- /*printf("[%d] read %d bytes\n", __LINE__, num_read_local);fflush(stdout);*/
- *num_read = num_read_local;
- mpi_errno = MPI_SUCCESS;
- break;
- }
- /*printf("[%d] reducing send length from %d to %d\n", __LINE__, tmp.len, tmp.len / 2);fflush(stdout);*/
- mpi_errno = WSAGetLastError();
- tmp.len = tmp.len / 2;
- }
- if (mpi_errno != MPI_SUCCESS)
- {
- if (mpi_errno == WSAEWOULDBLOCK)
- {
- mpi_errno = MPI_SUCCESS;
- }
- else
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- }
- }
- }
- else
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- }
- }
- }
- else
- {
- *num_read = num_read_local;
- }
- MPIU_DBG_PRINTF(("sock_readv %d bytes\n", *num_read));
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_READV);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_write
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_write(MPIDU_Sock_t sock, void * buf, MPIU_Size_t len, MPIU_Size_t * num_written)
-{
- int mpi_errno;
- MPL_IOV iov;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_WRITE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_WRITE);
- iov.len = len;
- iov.buf = buf;
- mpi_errno = MPIDU_Sock_writev(sock, &iov, 1, num_written);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WRITE);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_writev
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_writev(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIU_Size_t * num_written)
-{
- int mpi_errno;
- DWORD num_written_local;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_WRITEV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_WRITEV);
- if (WSASend(sock->sock, iov, iov_n, &num_written_local, 0, NULL/*overlapped*/, NULL/*completion routine*/) == SOCKET_ERROR)
- {
- mpi_errno = WSAGetLastError();
- *num_written = 0;
- if (mpi_errno == WSAENOBUFS)
- {
- WSABUF tmp;
- tmp.buf = iov[0].buf;
- tmp.len = iov[0].len;
- while (mpi_errno == WSAENOBUFS)
- {
- /*printf("[%d] sending %d bytes\n", __LINE__, tmp.len);fflush(stdout);*/
- if (WSASend(sock->sock, &tmp, 1, &num_written_local, 0, NULL, NULL) != SOCKET_ERROR)
- {
- /*printf("[%d] wrote %d bytes\n", __LINE__, num_written_local);fflush(stdout);*/
- *num_written = num_written_local;
- mpi_errno = MPI_SUCCESS;
- break;
- }
- mpi_errno = WSAGetLastError();
- /*printf("[%d] reducing send length from %d to %d\n", __LINE__, tmp.len, tmp.len / 2);fflush(stdout);*/
- tmp.len = tmp.len / 2;
- if (tmp.len == 0 && mpi_errno == WSAENOBUFS)
- {
- break;
- }
- }
- }
- if (mpi_errno && (mpi_errno != WSAEWOULDBLOCK))
- {
- MPIU_DBG_PRINTF(("WSASend failed: error %d\n", mpi_errno));
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**fail", "**fail %s %d", get_error_string(mpi_errno), mpi_errno);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WRITEV);
- return mpi_errno;
- }
- }
- else
- {
- *num_written = num_written_local;
- }
- MPIU_DBG_PRINTF(("sock_writev %d bytes\n", *num_written));
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WRITEV);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_sock_id
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_sock_id(MPIDU_Sock_t sock)
-{
- int ret_val;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_SOCK_ID);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_SOCK_ID);
- if (sock == MPIDU_SOCK_INVALID_SOCK)
- ret_val = -1;
- else
- {
- if (sock->type == SOCKI_LISTENER)
- ret_val = (int)sock->listen_sock;
- else
- ret_val = (int)sock->sock;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_SOCK_ID);
- return ret_val;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_sock_set_id
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_sock_set_id(MPIDU_Sock_set_t set)
-{
- int ret_val;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID);
- ret_val = PtrToInt(set);/*(int)set;*/
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID);
- return ret_val;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_error_class_string
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_error_class_string(int error, char *error_string, int length)
-{
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING);
- switch (MPIR_ERR_GET_CLASS(error))
- {
- case MPIDU_SOCK_ERR_FAIL:
- MPIU_Strncpy(error_string, "generic socket failure", length);
- break;
- case MPIDU_SOCK_ERR_INIT:
- MPIU_Strncpy(error_string, "socket module not initialized", length);
- break;
- case MPIDU_SOCK_ERR_NOMEM:
- MPIU_Strncpy(error_string, "not enough memory to complete the socket operation", length);
- break;
- case MPIDU_SOCK_ERR_BAD_SET:
- MPIU_Strncpy(error_string, "invalid socket set", length);
- break;
- case MPIDU_SOCK_ERR_BAD_SOCK:
- MPIU_Strncpy(error_string, "invalid socket", length);
- break;
- case MPIDU_SOCK_ERR_BAD_HOST:
- MPIU_Strncpy(error_string, "host description buffer not large enough", length);
- break;
- case MPIDU_SOCK_ERR_BAD_HOSTNAME:
- MPIU_Strncpy(error_string, "invalid host name", length);
- break;
- case MPIDU_SOCK_ERR_BAD_PORT:
- MPIU_Strncpy(error_string, "invalid port", length);
- break;
- case MPIDU_SOCK_ERR_BAD_BUF:
- MPIU_Strncpy(error_string, "invalid buffer", length);
- break;
- case MPIDU_SOCK_ERR_BAD_LEN:
- MPIU_Strncpy(error_string, "invalid length", length);
- break;
- case MPIDU_SOCK_ERR_SOCK_CLOSED:
- MPIU_Strncpy(error_string, "socket closed", length);
- break;
- case MPIDU_SOCK_ERR_CONN_CLOSED:
- MPIU_Strncpy(error_string, "socket connection closed", length);
- break;
- case MPIDU_SOCK_ERR_CONN_FAILED:
- MPIU_Strncpy(error_string, "socket connection failed", length);
- break;
- case MPIDU_SOCK_ERR_INPROGRESS:
- MPIU_Strncpy(error_string, "socket operation in progress", length);
- break;
- case MPIDU_SOCK_ERR_TIMEOUT:
- MPIU_Strncpy(error_string, "socket operation timed out", length);
- break;
- case MPIDU_SOCK_ERR_INTR:
- MPIU_Strncpy(error_string, "socket operation interrupted", length);
- break;
- case MPIDU_SOCK_ERR_NO_NEW_SOCK:
- MPIU_Strncpy(error_string, "no new connection available", length);
- break;
- default:
- MPL_snprintf(error_string, length, "unknown socket error %d", error);
- break;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING);
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/common/sock/mpidu_sock.h b/src/mpid/common/sock/mpidu_sock.h
deleted file mode 100644
index e061b88..0000000
--- a/src/mpid/common/sock/mpidu_sock.h
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIDU_SOCK_H_INCLUDED)
-#define MPIDU_SOCK_H_INCLUDED
-
-#if defined(__cplusplus)
-#if !defined(CPLUSPLUS_BEGIN)
-#define CPLUSPLUS_BEGIN extern "C" {
-#define CPLUSPLUS_END }
-#endif
-#else
-#define CPLUSPLUS_BEGIN
-#define CPLUSPLUS_END
-#endif
-
-CPLUSPLUS_BEGIN
-
-/* Load just the utility definitions that we need */
-#include "mpichconf.h"
-#include "mpl.h"
-#include "mpiutil.h"
-#include "mpich_cvars.h"
-/* implementation specific header file */
-#include "mpidu_socki.h"
-
-
-/*D
-MPIDU_SOCK_ERR - Extended error classes specific to the Sock module
-
-Notes:
-The actual meaning of these error classes is defined by each function.
-
-Module:
-Utility-Sock
-D*/
-/* FIXME: This is not the right way to add error values to an MPICH module.
- Note that (a) the last class values are not respected by the error handling
- code, (b) the entire point of codes and classes is to provide a
- natural grouping of codes to a class, (c) this approach can only be used
- by one module and hence breaks any component design, and (d) this is
- what the MPI dynamic error codes and classes was designed for. */
-#define MPIDU_SOCK_SUCCESS MPI_SUCCESS
-#define MPIDU_SOCK_ERR_FAIL MPICH_ERR_LAST_CLASS + 1
-#define MPIDU_SOCK_ERR_INIT MPICH_ERR_LAST_CLASS + 2
-#define MPIDU_SOCK_ERR_NOMEM MPICH_ERR_LAST_CLASS + 3
-#define MPIDU_SOCK_ERR_BAD_SET MPICH_ERR_LAST_CLASS + 4
-#define MPIDU_SOCK_ERR_BAD_SOCK MPICH_ERR_LAST_CLASS + 5
-#define MPIDU_SOCK_ERR_BAD_HOST MPICH_ERR_LAST_CLASS + 6
-#define MPIDU_SOCK_ERR_BAD_HOSTNAME MPICH_ERR_LAST_CLASS + 7
-#define MPIDU_SOCK_ERR_BAD_PORT MPICH_ERR_LAST_CLASS + 8
-#define MPIDU_SOCK_ERR_BAD_BUF MPICH_ERR_LAST_CLASS + 9
-#define MPIDU_SOCK_ERR_BAD_LEN MPICH_ERR_LAST_CLASS + 10
-#define MPIDU_SOCK_ERR_SOCK_CLOSED MPICH_ERR_LAST_CLASS + 11
-#define MPIDU_SOCK_ERR_CONN_CLOSED MPICH_ERR_LAST_CLASS + 12
-#define MPIDU_SOCK_ERR_CONN_FAILED MPICH_ERR_LAST_CLASS + 13
-#define MPIDU_SOCK_ERR_INPROGRESS MPICH_ERR_LAST_CLASS + 14
-#define MPIDU_SOCK_ERR_TIMEOUT MPICH_ERR_LAST_CLASS + 15
-#define MPIDU_SOCK_ERR_INTR MPICH_ERR_LAST_CLASS + 16
-#define MPIDU_SOCK_ERR_NO_NEW_SOCK MPICH_ERR_LAST_CLASS + 17
-
-
-/*E
-MPIDU_Sock_op_t - enumeration of posted operations that can be completed by the Sock module
-
-Notes:
-MPIDU_SOCK_OP_ACCEPT is different that the other operations. When returned by MPIDU_Sock_wait(), operations other than
-MPIDU_SOCK_OP_ACCEPT mark the completion of a previously posted operation. MPIDU_SOCK_OP_ACCEPT indicates that a new connection is
-being formed and that MPIDU_Sock_accept() should be called.
-
-Module:
-Utility-Sock
-E*/
-typedef enum MPIDU_Sock_op
-{
- MPIDU_SOCK_OP_READ,
- MPIDU_SOCK_OP_WRITE,
- MPIDU_SOCK_OP_ACCEPT,
- MPIDU_SOCK_OP_CONNECT,
- MPIDU_SOCK_OP_CLOSE,
- MPIDU_SOCK_OP_WAKEUP
-} MPIDU_Sock_op_t;
-
-
-/*S
-MPIDU_Sock_event_t - event structure returned by MPIDU_Sock_wait() describing the operation that completed
-
-Fields:
-+ op_type - type of operation that completed
-. num_bytes - number of bytes transferred (if appropriate)
-. user_ptr - user pointer associated with the sock on which this operation completed
-- error - a MPI error code with a Sock extended error class
-
-Notes:
-The num_bytes field is only used when a posted read or write operation completes.
-
-Module:
-Utility-Sock
-S*/
-typedef struct MPIDU_Sock_event
-{
- MPIDU_Sock_op_t op_type;
- MPIU_Size_t num_bytes;
- void * user_ptr;
- int error;
-} MPIDU_Sock_event_t;
-
-
-/*@
-MPIDU_Sock_init - initialize the Sock communication library
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - initialization completed successfully
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure; initialization failed
-
-Notes:
-The Sock module may be initialized multiple times. The implementation should perform reference counting if necessary.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_init(void);
-
-
-/*@
-MPIDU_Sock_finalize - shutdown the Sock communication library
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - shutdown completed successfully
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure; shutdown failed
-
-Notes:
-<BRT> What are the semantics of finalize? Is it responsible for releasing any resources (socks and sock sets) that the calling
-code(s) leaked? Should it block until all OS resources are released?
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_finalize(void);
-
-
-/*@
-MPIDU_Sock_get_host_description - obtain a description of the host's
-communication capabilities
-
-Input Parameters:
-+ myRank - Rank of this process in its MPI_COMM_WORLD. This can be used
- to find environment variables that are specific for this process.
-. host_description - character array in which the function can store a string
- describing the communication capabilities of the host
-- len - length of the character array
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - description successfully obtained and placed in host_description
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_LEN - len parameter is less than zero
-. MPIDU_SOCK_ERR_BAD_HOST - host_description parameter not big enough to
- store required information
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - unable to obtain network interface information from OS
-
-Notes:
-The host description string returned by the function is defined by the
-implementation and should not be interpreted by the
-application. This string is to be supplied to MPIDU_Sock_post_connect() when
-one wishes to form a connection with this host.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_get_host_description(int myRank, char * host_description, int len);
-
-
-/*@
-MPIDU_Sock_hostname_to_host_description - convert a host name to a description of the host's communication capabilities
-
-Input Parameters:
-+ hostname - host name string
-. host_description - character array in which the function can store a string describing the communication capabilities of the host
-- len - length of host_description
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - description successfully obtained and placed in host_description
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_LEN - len parameter is less than zero
-. MPIDU_SOCK_ERR_BAD_HOSTNAME - hostname parameter not valid
-. MPIDU_SOCK_ERR_BAD_HOST - host_description parameter not big enough to store required information
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - unable to obtain network interface information from OS
-
-Notes:
-The host description string returned by the function is defined by the implementation and should not be interpreted by the
-application. This string is to be supplied to MPIDU_Sock_post_connect() when one wishes to form a connection with the host
-specified by hostname.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_hostname_to_host_description(char *hostname, char * host_description, int len);
-
-/*@
-MPIDU_Sock_create_set - create a new sock set object
-
-Output Parameter:
-. set - pointer to the new sock set object
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - new sock set successfully create
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - pointer to the sock set object is bad
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure
-
-Notes:
-A sock set contains zero or more sock objects. Each sock object belongs to a single sock set and is bound to that set for the life
-of that object.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_create_set(MPIDU_Sock_set_t * set);
-
-
-/*@
-MPIDU_Sock_close_open_sockets - close the first open sockets of a sock_element
-
-Input Parameter:
-. set - set to be considered
-
-Output Parameter:
-. user_ptr - pointer to the user pointer pointer of a socket.
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - sock set successfully destroyed
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - unable to destroy the sock set (<BRT> because it still contained active sock objects?)
-
-
-Notes:
-This function only closes the first open socket of a sock_set and returns the
-user pointer of the sock-info structure. To close all sockets, the function must
-be called repeatedly, untiluser_ptr == NULL. The reason for this is
-that the overlying protocoll may need the user_ptr for further cleanup.
-
-@*/
-int MPIDU_Sock_close_open_sockets(struct MPIDU_Sock_set * sock_set, void** user_ptr );
-
-
-/*@
-MPIDU_Sock_destroy_set - destroy an existing sock set, releasing an internal resource associated with that set
-
-Input Parameter:
-. set - set to be destroyed
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - sock set successfully destroyed
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - unable to destroy the sock set (<BRT> because it still contained active sock objects?)
-
-Notes:
-<BRT> What are the semantics for destroying a sock set that still contains active sock objects? sock objects by definition
-cannot exist outside of a set.
-
-It is consider erroneous to destroy a set that still contains sock objects or is being operated upon with an of the Sock routines.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_destroy_set(MPIDU_Sock_set_t set);
-
-
-/*@
-MPIDU_Sock_native_to_sock - convert a native file descriptor/handle to a sock object
-
-Input Parameters:
-+ set - sock set to which the new sock should be added
-. fd - native file descriptor
-- user_ptr - user pointer to be associated with the new sock
-
-Output Parameter:
-. sock - new sock object
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - sock successfully created
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set
-. MPIDU_SOCK_ERR_BAD_NATIVE_FD - invalid native file descriptor
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure; listener sock could not be created
-
-Notes:
-The constraints on which file descriptors/handles may be converted to a sock object are defined by the implementation. The
-implementation may return MPIDU_SOCK_ERR_BAD_NATIVE_FD if the descriptor/handle cannot be used with the implementation. It is
-possible, however, that the conversion of an inappropriate descriptor/handle may complete successfully but the sock object may not
-function properly.
-
-Thread safety:
-The addition of a new sock object to the sock set may occur while other threads are performing operations on the same sock set.
-Thread safety of simultaneously operations on the same sock set must be guaranteed by the Sock implementation.
-
-@*/
-int MPIDU_Sock_native_to_sock(MPIDU_Sock_set_t set, MPIDU_SOCK_NATIVE_FD fd, void * user_ptr, MPIDU_Sock_t * sock);
-
-
-/*@
-MPIDU_Sock_listen - establish a listener sock
-
-Input Parameters:
-+ set - sock set to which the listening sock should be added
-. user_ptr - user pointer associated with the new sock object
-- port - desired port (or zero if a specific port is not desired)
-
-Output Parameters:
-+ port - port assigned to the listener
-- sock - new listener sock
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - listener sock successfully established
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set
-. MPIDU_SOCK_ERR_BAD_PORT - port number is out of range or pointer to port parameter is invalid
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure; listener sock could not be created
-
-Events generated:
-. MPIDU_SOCK_OP_ACCEPT - each time a new connection is being formed and needs to be accepted (with MPIDU_Sock_accept())
-
-Event errors:
-+ MPI_SUCCESS - new sock waiting to be accepted
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure?
-
-Notes:
-While not a post routine, this routine can generate events. In fact,
-unlike the post routine, many MPIDU_SOCK_OP_ACCEPT events can
-be generated from a listener (typically one per incoming connection attempt).
-
-The implementation may generate an event as soon it is notified that a
-new connection is forming. In such an implementation,
-MPIDU_Sock_accept() may be responsible for finalizing the connection.
-It is also possible that the connection may fail to
-complete, causing MPIDU_Sock_accept() to be unable to obtain a sock
-despite the event notification.
-
-The environment variable MPICH_PORT_RANGE=min:max may be used to
-restrict the ports mpich processes listen on.
-
-Thread safety:
-The addition of the listener sock object to the sock set may occur
-while other threads are performing operations on the same sock
-set. Thread safety of simultaneously operations on the same sock set
-must be guaranteed by the Sock implementation.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_listen(MPIDU_Sock_set_t set, void * user_ptr, int * port, MPIDU_Sock_t * sock);
-
-
-/*@
-MPIDU_Sock_accept - obtain the sock object associated with a new connection
-
-Input Parameters:
-+ listener_sock - listener sock object from which to obtain the new connection
-. set - sock set to which the new sock object should be added
-- user_ptr - user pointer associated with the new sock object
-
-Output Parameter:
-. sock - sock object for the new connection
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - new connection successfully established and associated with new sock objecta
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_NO_NEW_SOCK - no new connection was available
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid listener sock or bad pointer to new sock object
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - failed to acquire a new connection
-
-Notes:
-In the event of a connection failure, MPIDU_Sock_accept() may fail to acquire and return a new sock despite any
-MPIDU_SOCK_OP_ACCEPT event notification. On the other hand, MPIDU_Sock_accept() may return a sock for which the underlying
-connection has already failed. (The Sock implementation may be unaware of the failure until read/write operations are performed.)
-
-Thread safety:
-The addition of the new sock object to the sock set may occur while other threads are performing operations on the same sock set.
-Thread safety of simultaneously operations on the same sock set must be guaranteed by the Sock implementation.
-
-MPIDU_Sock_accept() may fail to return a new sock if multiple threads call MPIDU_Sock_accept() and queue of new connections is
-depleted. In this case, MPIDU_SOCK_ERR_NO_SOCK is returned.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_accept(MPIDU_Sock_t listener_sock, MPIDU_Sock_set_t set, void * user_ptr, MPIDU_Sock_t * sock);
-
-
-/*@
-MPIDU_Sock_post_connect - request that a new connection be formed
-
-Input Parameters:
-+ set - sock set to which the new sock object should be added
-. user_ptr - user pointer associated with the new sock object
-. host_description - string containing the communication capabilities of the listening host
-+ port - port number of listener sock on the listening host
-
-Output Parameter:
-. sock - new sock object associated with the connection request
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - request to form new connection successfully posted
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set
-. MPIDU_SOCK_ERR_BAD_HOST - host description string is not valid
-. MPIDU_SOCK_ERR_BAD_PORT - port number is out of range
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure attempting to post connection request
-
-Events generated:
-. MPIDU_SOCK_OP_CONNECT
-
-Event errors: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - successfully established
-. MPIDU_SOCK_ERR_CONN_FAILED - failed to connect to the remote host
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error?
-
-<BRT> Any other event errors? Does the sock channel require finer granularity?
-
-Notes:
-The host description of the listening host is supplied MPIDU_Sock_get_host_description(). The intention is that the description
-contain an enumeration of interface information so that the MPIDU_Sock_connect() can try each of the interfaces until it succeeds
-in forming a connection. Having a complete set of interface information also allows a particular interface be used selected by the
-user at runtime using the MPICH_NETMASK. <BRT> The name of the environment variable seems wrong. Perhaps MPICH_INTERFACE? We
-should ask the Systems group.
-
-Thread safety:
-The addition of the new sock object to the sock set may occur while other threads are performing operations on the same sock set.
-Thread safety of simultaneously operations on the same sock set must be guaranteed by the Sock implementation.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_post_connect(MPIDU_Sock_set_t set, void * user_ptr, char * host_description, int port, MPIDU_Sock_t * sock);
-
-/*S
- MPIDU_Sock_ifaddr_t - Structure to hold an Internet address.
-
-+ len - Length of the address. 4 for IPv4, 16 for IPv6.
-- ifaddr - Address bytes (as bytes, not characters)
-
-S*/
-typedef struct MPIDU_Sock_ifaddr_t {
- int len, type;
- unsigned char ifaddr[16];
-} MPIDU_Sock_ifaddr_t;
-
-/*@ MPIDU_Sock_post_connect_ifaddr - Post a connection given an interface
- address (bytes, not string).
-
- This is the basic routine. MPIDU_Sock_post_connect converts the
- host description into the ifaddr and calls this routine.
- @*/
-int MPIDU_Sock_post_connect_ifaddr( MPIDU_Sock_set_t sock_set,
- void * user_ptr,
- MPIDU_Sock_ifaddr_t *ifaddr, int port,
- MPIDU_Sock_t * sockp);
-
-
-/*@
-MPIDU_Sock_set_user_ptr - change the user pointer associated with a sock object
-
-Input Parameters:
-+ sock - sock object
-- user_ptr - new user pointer
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - user pointer successfully updated
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-- MPIDU_SOCK_ERR_FAIL - other failure?
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_set_user_ptr(MPIDU_Sock_t sock, void * user_ptr);
-
-
-/*@
-MPIDU_Sock_post_close - request that an existing connection be closed
-
-Input Parameter:
-. sock - sock object to be closed
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - request to close the connection was successfully posted
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object or close already posted
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other failure?
-
-Events generated:
-+ MPIDU_SOCK_OP_CLOSE
-. MPIDU_SOCK_OP_READ
-- MPIDU_SOCK_OP_WRITE
-
-Event errors: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - successfully established
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - an error occurred closing the sock; sock object is still destroyed
-
-Notes:
-If any other operations are posted on the specified sock, they will be terminated. An appropriate event will be generated for each
-terminated operation. All such events will be delivered by MPIDU_Sock_wait() prior to the delivery of the MPIDU_SOCK_OP_CLOSE
-event.
-
-The sock object is destroyed just prior to the MPIDU_SOCK_OP_CLOSE event being returned by MPIDU_Sock_wait(). Any oustanding
-references to the sock object held by the application should be considered invalid and not used again.
-
-Thread safety:
-MPIDU_Sock_post_close() may be called while another thread is calling or blocking in MPIDU_Sock_wait() specifying the same sock set
-to which this sock belongs. If another thread is blocking MPIDU_Sock_wait() and the close operation causes the sock set to become
-empty, then MPIDU_Sock_wait() will return with an error.
-
-Calling any of the immediate or post routines during or after the call to MPIDU_Sock_post_close() is consider an application error.
-The result of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads
-to ensure that simultaneous calls do not occur.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_post_close(MPIDU_Sock_t sock);
-
-
-/*E
-MPIDU_Sock_progress_update_func_t - progress update callback functions
-
-If a pointer to a function of this type is passed to one of the post read or write functions, the implementation must honor the
-following rules:
-
-1) The sock progress engine will call this function when partial data has been read or written for the posted operation.
-
-2) All progress_update calls must complete before completion notification is signalled. In other words, MPIDU_Sock_wait() will not
-return until all progress_update calls have completed.
-
-Notes:
-<BRT> We need to define ordering and delivery from multiple threads. Do the handlers have to be thread safe? If so, then the
-internal progress engine could block on an application routine.
-
-Module:
-Utility-Sock
-E*/
-typedef int (* MPIDU_Sock_progress_update_func_t)(MPIU_Size_t num_bytes, void * user_ptr);
-
-
-/*@
-MPIDU_Sock_post_read - request that data be read from a sock
-
-Input Parameters:
-+ sock - sock object from which data is to be read
-. buf - buffer into which the data should be placed
-. minlen - minimum number of bytes to read
-. maxlen - maximum number of bytes to read
-+ upate_fn - application progress update function (may be NULL)
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - request to read was successfully posted
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_LEN - length parameters must be greater than zero and maxlen must be greater than minlen
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-- MPIDU_SOCK_ERR_FAIL - other error attempting to post read
-
-Events generated:
-. MPIDU_SOCK_OP_READ
-
-Event errors: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - successfully established
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by buf and maxlen resulted in a memory fault
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error completing the read
-
-Notes:
-Only one read operation may be posted at a time. Furthermore, an immediate read may not be performed while a posted write is
-outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
-choose to catch the error and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-If MPIDU_Sock_post_close() is called before the posted read operation completes, the read operation will be terminated and a
-MPIDU_SOCK_OP_READ event containing a MPIDU_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
-MPIDU_Sock_wait() prior to the MPIDU_SOCK_OP_CLOSE event.
-
-Thread safety:
-MPIDU_Sock_post_read() may be called while another thread is attempting to perform an immediate write or post a write operation on
-the same sock. MPIDU_Sock_post_read() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the
-same sock set to which the specified sock belongs.
-
-MPIDU_Sock_post_write() may not be called while another thread is performing an immediate read on the same sock. This is
-considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
-and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_post_read() during or after the call to MPIDU_Sock_post_close() is consider an application error. The result of
-doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure that
-one thread is not attempting to post a new operation while another thread is attempting to close the sock.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_post_read(MPIDU_Sock_t sock, void * buf, MPIU_Size_t minbr, MPIU_Size_t maxbr,
- MPIDU_Sock_progress_update_func_t fn);
-
-
-/*@
-MPIDU_Sock_post_readv - request that a vector of data be read from a sock
-
-Input Parameters:
-+ sock - sock object from which the data is to read
-. iov - I/O vector describing buffers into which the data is placed
-. iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
-+ upate_fn - application progress update function (may be NULL)
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - request to read was successfully posted
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_LEN - iov_n is out of range
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-- MPIDU_SOCK_ERR_FAIL - other error attempting to post read
-
-Events generated:
-. MPIDU_SOCK_OP_READ
-
-Event errors: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - successfully established
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error completing the read
-
-Notes:
-Only one read operation may be posted at a time. Furthermore, an immediate read may not be performed while a posted write is
-outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
-choose to catch the error and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-If MPIDU_Sock_post_close() is called before the posted read operation completes, the read operation will be terminated and a
-MPIDU_SOCK_OP_READ event containing a MPIDU_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
-MPIDU_Sock_wait() prior to the MPIDU_SOCK_OP_CLOSE event.
-
-Thread safety:
-MPIDU_Sock_post_readv() may be called while another thread is attempting to perform an immediate write or post a write operation on
-the same sock. MPIDU_Sock_post_readv() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the
-same sock set to which the specified sock belongs.
-
-MPIDU_Sock_post_readv() may not be called while another thread is performing an immediate read on the same sock. This is
-considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
-and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_post_readv() during or after the call to MPIDU_Sock_post_close() is consider an application error. The result
-of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure
-that one thread is not attempting to post a new operation while another thread is attempting to close the sock.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_post_readv(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn);
-
-
-/*@
-MPIDU_Sock_post_write - request that data be written to a sock
-
-Input Parameters:
-+ sock - sock object which the data is to be written
-. buf - buffer containing the data
-. minlen - minimum number of bytes to write
-. maxlen - maximum number of bytes to write
-+ upate_fn - application progress aupdate function (may be NULL)
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - request to write was successfully posted
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_LEN - length parameters must be greater than zero and maxlen must be greater than minlen
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-- MPIDU_SOCK_ERR_FAIL - other error attempting to post write
-
-Events generated:
-. MPIDU_SOCK_OP_WRITE
-
-Event errors: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - successfully established
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by buf and maxlen resulted in a memory fault
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error completing the write
-
-Notes:
-Only one write operation may be posted at a time. Furthermore, an immediate write may not be performed while a posted write is
-outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
-choose to catch the error and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-If MPIDU_Sock_post_close() is called before the posted write operation completes, the write operation will be terminated and a
-MPIDU_SOCK_OP_WRITE event containing a MPIDU_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
-MPIDU_Sock_wait() prior to the MPIDU_SOCK_OP_CLOSE event.
-
-Thread safety:
-MPIDU_Sock_post_write() may be called while another thread is attempting to perform an immediate read or post a read operation on
-the same sock. MPIDU_Sock_post_write() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the
-same sock set to which the specified sock belongs.
-
-MPIDU_Sock_post_write() may not be called while another thread is performing an immediate write on the same sock. This is
-considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
-and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_post_write() during or after the call to MPIDU_Sock_post_close() is consider an application error. The result
-of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure
-that one thread is not attempting to post a new operation while another thread is attempting to close the sock. <BRT> Do we really
-need this flexibility?
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_post_write(MPIDU_Sock_t sock, void * buf, MPIU_Size_t min, MPIU_Size_t max,
- MPIDU_Sock_progress_update_func_t fn);
-
-
-/*@
-MPIDU_Sock_post_writev - request that a vector of data be written to a sock
-
-Input Parameters:
-+ sock - sock object which the data is to be written
-. iov - I/O vector describing buffers of data to be written
-. iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
-+ upate_fn - application progress update function (may be NULL)
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - request to write was successfully posted
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_LEN - iov_n is out of range
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-- MPIDU_SOCK_ERR_FAIL - other error attempting to post write
-
-Events generated:
-. MPIDU_SOCK_OP_WRITE
-
-Event errors: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - successfully established
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error completing the write
-
-Notes:
-Only one write operation may be posted at a time. Furthermore, an immediate write may not be performed while a posted write is
-outstanding. This is considered to be an application error, and the results of doing so are undefined. The implementation may
-choose to catch the error and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-If MPIDU_Sock_post_close() is called before the posted write operation completes, the write operation will be terminated and a
-MPIDU_SOCK_OP_WRITE event containing a MPIDU_SOCK_ERR_SOCK_CLOSED error will be generated. This event will be returned by
-MPIDU_Sock_wait() prior to the MPIDU_SOCK_OP_CLOSE event.
-
-Thread safety:
-MPIDU_Sock_post_writev() may be called while another thread is attempting to perform an immediate read or post a read operation on
-the same sock. MPIDU_Sock_post_writev() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the
-same sock set to which the specified sock belongs.
-
-MPIDU_Sock_post_writev() may not be called while another thread is performing an immediate write on the same sock. This is
-considered to be an application error, and the results of doing so are undefined. The implementation may choose to catch the error
-and return MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_post_writev() during or after the call to MPIDU_Sock_post_close() is consider an application error. The result
-of doing so is undefined. The application should coordinate the closing of a sock with the activities of other threads to ensure
-that one thread is not attempting to post a new operation while another thread is attempting to close the sock.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_post_writev(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn);
-
-
-/*@
-MPIDU_Sock_wait - wait for an event
-
-Input Parameters:
-+ set - sock set upon which to wait for an event
-- timeout - timeout in milliseconds (<0 for infinity)
-
-Output Parameter:
-. event - pointer to the event structure to be populated
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - a new event was returned
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set object
-. MPIDU_SOCK_ERR_TIMEOUT - a timeout occurred
-. MPIDU_SOCK_ERR_INTR - the routine was interrupted by a call to MPIDU_Sock_wakeup()
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error (are there any?)
-
-Notes:
-MPIDU_Sock_wakeup() can be called from another thread to force MPIDU_Sock_wait() to return with a MPIDU_SOCK_ERR_INTR error.
-MPIDU_Sock_wakeup() may not be called from within a progress update function or any function directly or indirectly called by a
-progress update function.
-
-Thread safety:
-New operations may be posted to sock contained in the specified sock set while another thread is calling or blocking in
-MPIDU_Sock_wait(). These operations should complete as though they were posted before MPIDU_Sock_wait() was called.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_wait(MPIDU_Sock_set_t set, int timeout, MPIDU_Sock_event_t * event);
-
-
-/*@
-MPIDU_Sock_wakeup - wakeup a MPIDU_Sock_wait blocking in another thread
-
-Input Parameter:
-. set - sock set upon which to wait for an event
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - wakeup request successfully processed
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SET - invalid sock set object
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory (is this possible?)
-- MPIDU_SOCK_ERR_FAIL - other error (are there any?)
-
-Notes:
-This routine forces a MPIDU_Sock_wait() blocking in another thread to wakeup and return a MPIDU_SOCK_ERR_INTR error.
-MPIDU_Sock_wakeup() may not be called from within a progress update function or any function directly or indirectly called by a
-progress update function.
-
-The implementation should strive to only wakeup a MPIDU_Sock_wait() that is already blocking; however, it is acceptable (although
-undesireable) for it wakeup a MPIDU_Sock_wait() that is called in the future.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_wakeup(MPIDU_Sock_set_t set);
-
-/*@
-MPIDU_Sock_read - perform an immediate read
-
-Input Parameters:
-+ sock - sock object from which data is to be read
-. buf - buffer into which the data should be placed
-- len - maximum number of bytes to read
-
-Output Parameter:
-. num_read - number of bytes actually read
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - no error encountered during the read operation
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by buf and len resulted in a memory fault
-. MPIDU_SOCK_ERR_BAD_LEN - length parameter must be greater than zero
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error attempting to post read
-
-Notes:
-
-An immediate read may not be performed while a posted read is outstanding on the same sock. This is considered to be an
-application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Thread safety:
-MPIDU_Sock_read() may be called while another thread is attempting to perform an immediate write or post a write operation on the
-same sock. MPIDU_Sock_read() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the same sock
-set to which the specified sock belongs.
-
-A immediate read may not be performed if another thread is performing an immediate read on the same sock. This is considered to be
-an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_read() during or after the call to MPIDU_Sock_post_close() is consider an application error. The result of
-doing so is undefined, although the implementation may choose to return MPIDU_SOCK_ERR_SOCK_CLOSED if it is able to catch the
-error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
-not attempting to perform an immediate read while another thread is attempting to close the sock.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_read(MPIDU_Sock_t sock, void * buf, MPIU_Size_t len, MPIU_Size_t * num_read);
-
-
-/*@
-MPIDU_Sock_readv - perform an immediate vector read
-
-Input Parameters:
-+ sock - sock object from which data is to be read
-. iov - I/O vector describing buffers into which the data is placed
-- iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
-
-Output Parameter:
-. num_read - number of bytes actually read
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - no error encountered during the read operation
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
-. MPIDU_SOCK_ERR_BAD_LEN - iov_n parameter must be greater than zero and not greater than MPL_IOV_LIMIT
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error attempting to post read
-
-Notes:
-
-An immediate read may not be performed while a posted read is outstanding on the same sock. This is considered to be an
-application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Thread safety:
-MPIDU_Sock_read() may be called while another thread is attempting to perform an immediate write or post a write operation on the
-same sock. MPIDU_Sock_read() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the same sock
-set to which the specified sock belongs.
-
-A immediate read may not be performed if another thread is performing an immediate read on the same sock. This is considered to be
-an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_read() during or after the call to MPIDU_Sock_post_close() is consider an application error. The result of
-doing so is undefined, although the implementation may choose to return MPIDU_SOCK_ERR_SOCK_CLOSED if it is able to catch the
-error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
-not attempting to perform an immediate read while another thread is attempting to close the sock.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_readv(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIU_Size_t * num_read);
-
-
-/*@
-MPIDU_Sock_write - perform an immediate write
-
-Input Parameters:
-+ sock - sock object to which data is to be written
-. buf - buffer containing the data to be written
-- len - maximum number of bytes to written
-
-Output Parameter:
-. num_written - actual number of bytes written
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - no error encountered during the write operation
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by buf and len resulted in a memory fault
-. MPIDU_SOCK_ERR_BAD_LEN - length parameter must be greater than zero
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error attempting to perform the write
-
-Notes:
-An immediate write may not be performed while a posted write is outstanding on the same sock. This is considered to be an
-application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Thread safety:
-MPIDU_Sock_write() may be called while another thread is attempting to perform an immediate read or post a read operation on the
-same sock. MPIDU_Sock_write() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the same sock
-set to which the specified sock belongs.
-
-A immediate write may not be performed if another thread is performing an immediate write on the same sock. This is considered to
-be an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_write() during or after the call to MPIDU_Sock_post_close() is consider to be an application error. The result
-of doing so is undefined, although the implementation may choose to return MPIDU_SOCK_ERR_SOCK_CLOSED if it is able to catch the
-error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
-not attempting to perform an immediate write while another thread is attempting to close the sock.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_write(MPIDU_Sock_t sock, void * buf, MPIU_Size_t len, MPIU_Size_t * num_written);
-
-
-/*@
-MPIDU_Sock_writev - perform an immediate vector write
-
-Input Parameters:
-+ sock - sock object to which data is to be written
-. iov - I/O vector describing buffers of data to be written
-- iov_n - number of elements in I/O vector (must be less than MPL_IOV_LIMIT)
-
-Output Parameter:
-. num_written - actual number of bytes written
-
-Return value: a MPI error code with a Sock extended error class
-+ MPI_SUCCESS - no error encountered during the write operation
-. MPIDU_SOCK_ERR_INIT - Sock module not initialized
-. MPIDU_SOCK_ERR_BAD_SOCK - invalid sock object
-. MPIDU_SOCK_ERR_BAD_BUF - using the buffer described by iov and iov_n resulted in a memory fault
-. MPIDU_SOCK_ERR_BAD_LEN - iov_n parameter must be greater than zero and not greater than MPL_IOV_LIMIT
-. MPIDU_SOCK_ERR_SOCK_CLOSED - the sock object was closed locally
-. MPIDU_SOCK_ERR_CONN_CLOSED - the connection was closed by the peer
-. MPIDU_SOCK_ERR_CONN_FAILED - the connection failed
-. MPIDU_SOCK_ERR_INPROGRESS - this operation overlapped with another like operation already in progress
-. MPIDU_SOCK_ERR_NOMEM - unable to allocate required memory
-- MPIDU_SOCK_ERR_FAIL - other error attempting to perform the write
-
-Notes:
-An immediate write may not be performed while a posted write is outstanding on the same sock. This is considered to be an
-application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Thread safety:
-MPIDU_Sock_write() may be called while another thread is attempting to perform an immediate read or post a read operation on the
-same sock. MPIDU_Sock_write() may also be called while another thread is calling or blocking in MPIDU_Sock_wait() on the same sock
-set to which the specified sock belongs.
-
-A immediate write may not be performed if another thread is performing an immediate write on the same sock. This is considered to
-be an application error, and the results of doing so are undefined. The implementation may choose to catch the error and return
-MPIDU_SOCK_ERR_INPROGRESS, but it is not required to do so.
-
-Calling MPIDU_Sock_write() during or after the call to MPIDU_Sock_post_close() is consider to be an application error. The result
-of doing so is undefined, although the implementation may choose to return MPIDU_SOCK_ERR_SOCK_CLOSED if it is able to catch the
-error. The application should coordinate the closing of a sock with the activities of other threads to ensure that one thread is
-not attempting to perform an immediate write while another thread is attempting to close the sock.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_writev(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIU_Size_t * num_written);
-
-
-/*@
-MPIDU_Sock_get_sock_id - get an integer identifier for a sock object
-
-Input Parameter:
-. sock - sock object
-
-Return value: an integer that uniquely identifies the sock object
-
-Notes:
-The integer is unique relative to all other open sock objects in the local process. The integer may later be reused for a
-different sock once the current object is closed and destroyed.
-
-This function does not return an error code. Passing in an invalid sock object has undefined results (garbage in, garbage out).
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_get_sock_id(MPIDU_Sock_t sock);
-
-
-/*@
-MPIDU_Sock_get_sock_set_id - get an integer identifier for a sock set object
-
-Input Parameter:
-. sock set - sock set object
-
-Return value: an integer that uniquely identifies the sock set object
-
-Notes:
-
-The integer is unique relative to all other sock set objects currently existing in the local process. The integer may later be
-reused for a different sock set once the current object destroyed.
-
-This function does not return an error code. Passing in an invalid sock set object has undefined results (garbage in, garbage
-out).
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_get_sock_set_id(MPIDU_Sock_set_t set);
-
-
-/*@
-MPIDU_Sock_get_error_class_string - get a generic error string from an error code
-
-Input Parameter:
-+ error - sock error
-- length - length of error string
-
-Output Parameter:
-. error_string - error string
-
-Return value: a string representation of the sock error
-
-Notes:
-
-The returned string is the generic error message for the supplied error code.
-
-Module:
-Utility-Sock
-@*/
-int MPIDU_Sock_get_error_class_string(int error, char *error_string, size_t length);
-
-
-CPLUSPLUS_END
-
-#endif /* !defined(MPIDU_SOCK_H_INCLUDED) */
diff --git a/src/mpid/common/sock/poll/.state-cache b/src/mpid/common/sock/poll/.state-cache
deleted file mode 100644
index 1324890..0000000
--- a/src/mpid/common/sock/poll/.state-cache
+++ /dev/null
@@ -1,76 +0,0 @@
-<dir>
-<file name="mpidu_socki.h" info="1447123141"/>
-<file name="socki_util.i" info="1447123141"/>
-<file name="sock_immed.i" info="1447123141"/>
-<file name="sock_post.i" info="1447123141"/>
-<file name="sock_init.i" info="1447123141"/>
-<file name="sock_set.i" info="1447123141"/>
-<file name="sock.c" info="1447123141"/>
-<file name="sock_wait.i" info="1447123141"/>
-<file name="sock_misc.i" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="mpidu_socki.h">
-</fileinfo>
-<fileinfo name="socki_util.i">
-MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET MPIDI_Sock_update_sock_set
-MPID_STATE_MPIDU_SOCKI_SOCK_ALLOC MPIDU_Socki_sock_alloc
-MPID_STATE_MPIDU_SOCKI_SOCK_FREE MPIDU_Socki_sock_free
-MPID_STATE_SOCKI_EVENT_ENQUEUE MPIDU_Socki_event_enqueue
-MPID_STATE_SOCKI_EVENT_DEQUEUE MPIDU_Socki_event_dequeue
-MPID_STATE_SOCKI_FREE_EVENTQ_MEM MPIDU_Socki_free_eventq_mem
-</fileinfo>
-<fileinfo name="sock_immed.i">
-MPID_STATE_MPIDU_SOCK_ACCEPT MPIDU_Sock_accept
-MPID_STATE_READ read
-MPID_STATE_MPIDU_SOCK_READ MPIDU_Sock_read
-MPID_STATE_READV readv
-MPID_STATE_MPIDU_SOCK_READV MPIDU_Sock_readv
-MPID_STATE_WRITE write
-MPID_STATE_MPIDU_SOCK_WRITE MPIDU_Sock_write
-MPID_STATE_WRITEV writev
-MPID_STATE_MPIDU_SOCK_WRITEV MPIDU_Sock_writev
-MPID_STATE_MPIDU_SOCK_WAKEUP MPIDU_Sock_wakeup
-</fileinfo>
-<fileinfo name="sock_post.i">
-MPID_STATE_MPIDU_SOCK_POST_CONNECT_IFADDR MPIDU_Sock_post_connect_ifaddr
-MPID_STATE_MPIDU_SOCK_LISTEN MPID_STATE_MPIDU_SOCK_ACCEPT
-MPID_STATE_MPIDU_SOCK_POST_READ MPIDU_Sock_post_read
-MPID_STATE_MPIDU_SOCK_POST_READV MPIDU_Sock_post_readv
-MPID_STATE_MPIDU_SOCK_POST_WRITE MPIDU_Sock_post_write
-MPID_STATE_MPIDU_SOCK_POST_WRITEV MPIDU_Sock_post_writev
-MPID_STATE_MPIDU_SOCK_POST_CLOSE MPIDU_Sock_post_close
-</fileinfo>
-<fileinfo name="sock_init.i">
-MPID_STATE_MPIDU_SOCK_INIT MPIDU_Sock_init
-MPID_STATE_MPIDU_SOCK_FINALIZE MPIDU_Sock_finalize
-</fileinfo>
-<fileinfo name="sock_set.i">
-MPID_STATE_MPIDU_SOCK_CREATE_SET MPIDU_Sock_create_set
-MPID_STATE_MPIDU_SOCK_CLOSE_OPEN_SOCKETS MPIDU_Sock_close_open_sockets
-MPID_STATE_MPIDU_SOCK_DESTROY_SET MPIDU_Sock_destroy_set
-</fileinfo>
-<fileinfo name="sock.c">
-</fileinfo>
-<fileinfo name="sock_wait.i">
-MPID_STATE_MPIDU_SOCK_WAIT MPIDU_Sock_wait
-MPID_STATE_POLL poll
-MPID_STATE_MPIDU_SOCKI_HANDLE_POLLHUP MPIDU_Socki_handle_pollhup
-MPID_STATE_MPIDU_SOCKI_HANDLE_POLLERR MPIDU_Socki_handle_pollerr
-MPID_STATE_READ read
-MPID_STATE_READV readv
-MPID_STATE_MPIDU_SOCKI_HANDLE_READ MPIDU_Socki_handle_read
-MPID_STATE_WRITE write
-MPID_STATE_WRITEV writev
-MPID_STATE_MPIDU_SOCKI_HANDLE_WRITE MPIDU_Socki_handle_write
-MPID_STATE_MPIDU_SOCKI_HANDLE_CONNECT MPIDU_Socki_handle_connect
-</fileinfo>
-<fileinfo name="sock_misc.i">
-MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION MPIDU_Sock_get_host_description
-MPID_STATE_SOCK_NATIVE_TO_SOCK MPIDU_Sock_native_to_sock
-MPID_STATE_MPIDU_SOCK_SET_USER_PTR MPIDU_Sock_set_user_ptr
-MPID_STATE_MPIDU_SOCK_GET_SOCK_ID MPIDU_Sock_get_sock_id
-MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID MPIDU_Sock_get_sock_set_id
-MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING MPIDU_Sock_get_error_class_string
-</fileinfo>
-</data>
diff --git a/src/mpid/common/sock/poll/Makefile.mk b/src/mpid/common/sock/poll/Makefile.mk
deleted file mode 100644
index 9d05f86..0000000
--- a/src/mpid/common/sock/poll/Makefile.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-errnames_txt_files += src/mpid/common/sock/poll/errnames.txt
-
-## this whole file is also already guarded by "if BUILD_MPID_COMMON_SOCK"
-if BUILD_MPID_COMMON_SOCK_POLL
-
-mpi_core_sources += \
- src/mpid/common/sock/poll/sock.c
-
-# FIXME these ".i" files are awful and should be fixed somehow. They are
-# cobbled together via "#include" into sock.c. They are not idempotent ".h"
-# files, but rather a giant ".c" file that has been split into several files
-# that should be compiled only once, and only together.
-noinst_HEADERS += \
- src/mpid/common/sock/poll/sock_init.i \
- src/mpid/common/sock/poll/sock_set.i \
- src/mpid/common/sock/poll/sock_post.i \
- src/mpid/common/sock/poll/sock_immed.i \
- src/mpid/common/sock/poll/sock_misc.i \
- src/mpid/common/sock/poll/sock_wait.i \
- src/mpid/common/sock/poll/socki_util.i \
- src/mpid/common/sock/poll/mpidu_socki.h
-
-# FIXME is top_builddir the right way to handle VPATH builds?
-AM_CPPFLAGS += \
- -I${top_srcdir}/src/mpid/common/sock/poll \
- -I${top_builddir}/src/mpid/common/sock/poll
-
-endif BUILD_MPID_COMMON_SOCK_POLL
-
diff --git a/src/mpid/common/sock/poll/errnames.txt b/src/mpid/common/sock/poll/errnames.txt
deleted file mode 100644
index 98bdc2f..0000000
--- a/src/mpid/common/sock/poll/errnames.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Sock:poll
-#
-**sock|poll|accept:accept failed to acquire a new socket
-**sock|poll|accept %d %s:accept failed to acquire a new socket (errno=%d:%s)
-**sock|poll|badbuf %d %d %d %s:the supplied buffer contains invalid memory (set=%d,sock=%d,errno=%d:%s)
-**sock|poll|badhandle %d %d %d:sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d)
-**sock|poll|badhandle %d %d %d %d:sock contains an invalid file descriptor (set=%d,sock=%d,fd=%d:%d)
-**sock|poll|bind:unable to bind socket to port
-**sock|poll|bind %d %d %s:unable to bind socket to port (port=%d,errno=%d:%s)
-**sock|poll|connclosed %d %d %d %s:connection closed by peer (set=%d,sock=%d,errno=%d:%s)
-**sock|poll|connfailed %d %d %d %s:connection failure (set=%d,sock=%d,errno=%d:%s)
-**sock|poll|connrefused %d %d %s:connection refused (set=%d,sock=%d,host=%s)
-**sock|poll|eqmalloc:MPIU_Malloc failed to allocate memory for an event queue structure
-**sock|poll|eqfail:fatal error: failed to enqueue an event; event was lost
-**sock|poll|eqfail %d %d %d:fatal error: failed to enqueue an event; event was lost (set=%d,sock=%d,op=%d)
-**sock|poll|getport %d %s:failed to obtain port number of listener (errno=%d:%s)
-**sock|poll|listen:listen() failed
-**sock|poll|listen %d %s:listen() failed (errno=%d:%s)
-**sock|poll|nodelay:unable to set TCP no delay attribute on socket
-**sock|poll|nodelay %d %s:unable to set TCP no delay attribute on socket (errno=%d:%s)
-**sock|poll|nonblock:unable to set socket to nonblocking
-**sock|poll|nonblock %d %s:unable to set socket to nonblocking (errno=%d:%s)
-**sock|poll|oserror %d %s:unexpected operating system error (errno=%d:%s)
-**sock|poll|oserror %d %d %d %s:unexpected operating system error (set=%d,sock=%d,errno=%d:%s)
-**sock|poll|oserror %s %d %d %d %s:unpected operating system error from %s (set=%d,sock=%d,errno=%d:%s)
-**sock|poll|osnomem %d %d %d %s:operating system routine failed due to lack of memory (set=%d,sock=%d,errno=%d:%s)
-**sock|poll|pipe:unable to allocate pipe to wakeup a blocking poll()
-**sock|poll|pipe %d %s:unable to allocate pipe to wakeup a blocking poll() (errno=%d:%s)
-**sock|poll|pipenonblock:unable to set wakeup pipe to nonblocking
-**sock|poll|pipenonblock %d %s:unable to set wakeup pipe to nonblocking (errno=%d:%s)
-**sock|poll|reuseaddr:unable to set reuseaddr attribute on socket
-**sock|poll|reuseaddr %d %s:unable to set reuseaddr attribute on socket (errno=%d:%s)
-**sock|poll|setrcvbufsz: unable to set the receive socket buffer size
-**sock|poll|setrcvbufsz %d %d %s: unable to set the receive socket buffer size (size=%d,errno=%d:%s)
-**sock|poll|setsndbufsz: unable to set the send socket buffer size
-**sock|poll|setsndbufsz %d %d %s: unable to set the send socket buffer size (size=%d,errno=%d:%s)
-**sock|poll|socket:unable to obtain new socket
-**sock|poll|socket %d %s:unable to obtain new socket (errno=%d:%s)
-**sock|poll|unhandledstate:encountered an unexpected state
-**sock|poll|unhandledstate %d:encountered an unexpected state (%d)
-**sock|poll|unhandledtype:encountered an unexpected sock type
-**sock|poll|unhandledtype %d:encountered an unexpected sock type (%d)
diff --git a/src/mpid/common/sock/poll/mpidu_socki.h b/src/mpid/common/sock/poll/mpidu_socki.h
deleted file mode 100644
index 5958dfe..0000000
--- a/src/mpid/common/sock/poll/mpidu_socki.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(SOCKI_H_INCLUDED)
-#define SOCKI_H_INCLUDED
-
-#include "mpichconf.h"
-
-#if defined(HAVE_SYS_UIO_H)
-#include <sys/uio.h>
-#endif
-#if defined(HAVE_LIMITS_H)
-#include <limits.h>
-#endif
-#if defined(HAVE_UNISTD_H)
-#include <unistd.h>
-#endif
-
-#if defined(HAVE_GETHOSTNAME) && defined(NEEDS_GETHOSTNAME_DECL) && !defined(gethostname)
-int gethostname(char *name, size_t len);
-# endif
-
-#ifndef SSIZE_MAX
-/* SSIZE_MAX is the maximum amount of data that we expect to be able
- to read from a socket at one time. If this is not defined, we
- guess that the value is 64k */
-/* FIXME!!! */
-#define SSIZE_MAX 65536
-#endif
-#define MPIDU_SOCK_INFINITE_TIME -1
-#define MPIDU_SOCK_INVALID_SOCK NULL
-#define MPIDU_SOCK_INVALID_SET NULL
-#define MPIDU_SOCK_SIZE_MAX SSIZE_MAX
-#define MPIDU_SOCK_NATIVE_FD int
-
-typedef struct MPIDU_Sock_set * MPIDU_Sock_set_t;
-typedef struct MPIDU_Sock * MPIDU_Sock_t;
-typedef size_t MPIDU_Sock_size_t;
-
-#define MPIDU_SOCKI_STATE_LIST \
-MPID_STATE_MPIDU_SOCKI_READ, \
-MPID_STATE_MPIDU_SOCKI_WRITE, \
-MPID_STATE_MPIDU_SOCKI_SOCK_ALLOC, \
-MPID_STATE_MPIDU_SOCKI_SOCK_FREE, \
-MPID_STATE_MPIDU_SOCKI_EVENT_ENQUEUE, \
-MPID_STATE_MPIDU_SOCKI_EVENT_DEQUEUE, \
-MPID_STATE_MPIDU_SOCKI_ADJUST_IOV, \
-MPID_STATE_READ, \
-MPID_STATE_READV, \
-MPID_STATE_WRITE, \
-MPID_STATE_WRITEV, \
-MPID_STATE_POLL,
-
-#endif /* !defined(SOCKI_H_INCLUDED) */
diff --git a/src/mpid/common/sock/poll/sock.c b/src/mpid/common/sock/poll/sock.c
deleted file mode 100644
index 9188ad2..0000000
--- a/src/mpid/common/sock/poll/sock.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpishared.h"
-
-#include "mpiimpl.h"
-#include "mpidu_sock.h"
-#ifdef HAVE_STRING_H
-/* Include for memcpy and memset */
-#include <string.h>
-#endif
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/uio.h>
-#include <netinet/tcp.h>
-#include <netinet/in.h>
-#include <fcntl.h>
-#if defined(HAVE_POLL_H)
-#include <sys/poll.h>
-#elif defined(HAVE_SYS_POLL_H)
-#include <sys/poll.h>
-#endif
-#include <netdb.h>
-#include <errno.h>
-#include <stdio.h>
-
-
-/* FIXME: What do these mean? Why is 32 a good size (e.g., is it because
- 32*32 = 1024 if these are bits in a 4-byte int? In that case, should
- these be related to a maximum processor count or an OS-defined fd limit? */
-#if !defined(MPIDU_SOCK_SET_DEFAULT_SIZE)
-#define MPIDU_SOCK_SET_DEFAULT_SIZE 32
-#endif
-
-#if !defined(MPIDU_SOCK_EVENTQ_POOL_SIZE)
-#define MPIDU_SOCK_EVENTQ_POOL_SIZE 32
-#endif
-
-
-enum MPIDU_Socki_state
-{
- MPIDU_SOCKI_STATE_FIRST = 0,
- MPIDU_SOCKI_STATE_CONNECTING,
- MPIDU_SOCKI_STATE_CONNECTED_RW,
- MPIDU_SOCKI_STATE_CONNECTED_RO,
- MPIDU_SOCKI_STATE_DISCONNECTED,
- MPIDU_SOCKI_STATE_CLOSING,
- MPIDU_SOCKI_STATE_LAST
-};
-
-enum MPIDU_Socki_type
-{
- MPIDU_SOCKI_TYPE_FIRST = 0,
- MPIDU_SOCKI_TYPE_COMMUNICATION,
- MPIDU_SOCKI_TYPE_LISTENER,
- MPIDU_SOCKI_TYPE_INTERRUPTER,
- MPIDU_SOCKI_TYPE_LAST
-};
-
-/*
- * struct pollinfo
- *
- * sock_id - an integer id comprised of the sock_set id and the element number
- * in the pollfd/info arrays
- *
- * sock_set - a pointer to the sock set to which this connection belongs
- *
- * elem - the element number of this connection in the pollfd/info arrays
- *
- * sock - at present this is only used to free the sock structure when the
- * close is completed by MPIDIU_Sock_wait()
- *
- * fd - this file descriptor is used whenever the file descriptor is needed.
- * this descriptor remains open until the sock, and
- * thus the socket, are actually closed. the fd in the pollfd structure
- * should only be used for telling poll() if it should
- * check for events on that descriptor.
- *
- * user_ptr - a user supplied pointer that is included with event associated
- * with this connection
- *
- * state - state of the connection
- *
- */
-struct pollinfo
-{
- int sock_id;
- struct MPIDU_Sock_set * sock_set;
- int elem;
- struct MPIDU_Sock * sock;
- int fd;
- void * user_ptr;
- enum MPIDU_Socki_type type;
- enum MPIDU_Socki_state state;
- int os_errno;
-# ifdef MPICH_IS_THREADED
- int pollfd_events;
-# endif
- union
- {
- struct
- {
- MPL_IOV * ptr;
- int count;
- int offset;
- } iov;
- struct
- {
- char * ptr;
- MPIU_Size_t min;
- MPIU_Size_t max;
- } buf;
- } read;
- int read_iov_flag;
- MPIU_Size_t read_nb;
- MPIDU_Sock_progress_update_func_t read_progress_update_fn;
- union
- {
- struct
- {
- MPL_IOV * ptr;
- int count;
- int offset;
- } iov;
- struct
- {
- char * ptr;
- MPIU_Size_t min;
- MPIU_Size_t max;
- } buf;
- } write;
- int write_iov_flag;
- MPIU_Size_t write_nb;
- MPIDU_Sock_progress_update_func_t write_progress_update_fn;
-};
-
-struct MPIDU_Socki_eventq_elem
-{
- struct MPIDU_Sock_event event;
- int set_elem;
- struct MPIDU_Socki_eventq_elem * next;
-};
-
-struct MPIDU_Sock_set
-{
- int id;
-
- /* when the pollfds array is scanned for activity, start with this element.
- this is used to prevent favoring a particular
- element, such as the first. */
- int starting_elem;
-
- /* pointers to the pollfd and pollinfo that make up the logical poll array,
- along with the current size of the array and last
- allocated element */
- int poll_array_sz;
- int poll_array_elems;
- struct pollfd * pollfds;
- struct pollinfo * pollinfos;
-
- /* head and tail pointers for the event queue */
- struct MPIDU_Socki_eventq_elem * eventq_head;
- struct MPIDU_Socki_eventq_elem * eventq_tail;
-
-# ifdef MPICH_IS_THREADED
- /* pointer to the pollfds array being actively used by a blocking poll();
- NULL if not blocking in poll() */
- struct pollfd * pollfds_active;
-
- /* flag indicating if updates were made to any pollfd entries while a
- thread was blocking in poll() */
- int pollfds_updated;
-
- /* flag indicating that a wakeup has already been posted on the
- interrupter socket */
- int wakeup_posted;
-
- /* sock and fds for the interrpter pipe */
- struct MPIDU_Sock * intr_sock;
- int intr_fds[2];
-# endif
-};
-
-struct MPIDU_Sock
-{
- struct MPIDU_Sock_set * sock_set;
- int elem;
-};
-
-/* FIXME: Why aren't these static */
-int MPIDU_Socki_initialized = 0;
-
-static struct MPIDU_Socki_eventq_elem * MPIDU_Socki_eventq_pool = NULL;
-
-/* MT: needs to be atomically incremented */
-static int MPIDU_Socki_set_next_id = 0;
-
-/* Prototypes for functions used only within the socket code. */
-
-/* Set the buffer size on the socket fd from the environment variable
- or other option; if "firm" is true, fail if the buffer size is not
- successfully set */
-int MPIDU_Sock_SetSockBufferSize( int fd, int firm );
-/* Get a string version of the address in ifaddr*/
-int MPIDU_Sock_AddrToStr( MPIDU_Sock_ifaddr_t *ifaddr, char *str, int maxlen );
-
-/* FIXME: Why are these files included in this way? Why not make them either
- separate files or simply part of (one admittedly large) source file? */
-#include "socki_util.i"
-
-#include "sock_init.i"
-#include "sock_set.i"
-#include "sock_post.i"
-#include "sock_immed.i"
-#include "sock_misc.i"
-#include "sock_wait.i"
diff --git a/src/mpid/common/sock/poll/sock_immed.i b/src/mpid/common/sock/poll/sock_immed.i
deleted file mode 100644
index 2a17dd5..0000000
--- a/src/mpid/common/sock/poll/sock_immed.i
+++ /dev/null
@@ -1,701 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-/* FIXME: Why is this the _immed file (what does immed stand for?) */
-
-/* FIXME: What do any of these routines do? What are the arguments?
- Special conditions (see the FIXME on len = SSIZE_MAX)? preconditions?
- postconditions? */
-
-/* FIXME: What does this function do? What are its arguments?
- It appears to execute a nonblocking accept call */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_accept
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_accept(struct MPIDU_Sock * listener,
- struct MPIDU_Sock_set * sock_set, void * user_ptr,
- struct MPIDU_Sock ** sockp)
-{
- struct MPIDU_Sock * sock;
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int fd = -1;
- struct sockaddr_in addr;
- socklen_t addr_len;
- long flags;
- int nodelay;
- int rc;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_ACCEPT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_ACCEPT);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(listener, mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK_SET(sock_set, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(listener);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(listener);
-
- /* --BEGIN ERROR HANDLING-- */
- if (pollinfo->type != MPIDU_SOCKI_TYPE_LISTENER)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK,
- "**sock|listener_bad_sock", "**sock|listener_bad_sock %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id);
- goto fn_exit;
- }
-
- if (pollinfo->state != MPIDU_SOCKI_STATE_CONNECTED_RO &&
- pollinfo->state != MPIDU_SOCKI_STATE_CLOSING)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK,
- "**sock|listener_bad_state", "**sock|listener_bad_state %d %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id, pollinfo->state);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Get a socket for the new connection from the operating system.
- * Make the socket nonblocking, and disable Nagle's
- * alogorithm (to minimize latency of small messages).
- */
- addr_len = sizeof(struct sockaddr_in);
- /* FIXME: Either use the syscall macro or correctly wrap this in a
- test for EINTR */
- fd = accept(pollinfo->fd, (struct sockaddr *) &addr, &addr_len);
-
- if (pollinfo->state != MPIDU_SOCKI_STATE_CLOSING)
- {
- /*
- * Unless the listener sock is being closed, add it back into the
- * poll list so that new connections will be detected.
- */
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (fd == -1)
- {
- if (errno == EAGAIN || errno == EWOULDBLOCK)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_NO_NEW_SOCK,
- "**sock|nosock", NULL);
- }
- else if (errno == ENOBUFS || errno == ENOMEM)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**sock|osnomem", NULL);
- }
- else if (errno == EBADF || errno == ENOTSOCK || errno == EOPNOTSUPP)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK,
- "**sock|badhandle", "**sock|poll|badhandle %d %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id,
- pollinfo->fd);
- }
- else
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_NO_NEW_SOCK,
- "**sock|poll|accept", "**sock|poll|accept %d %s",
- errno, MPIU_Strerror(errno));
- }
-
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- flags = fcntl(fd, F_GETFL, 0);
- /* FIXME: There should be a simpler macro for reporting errno messages */
- /* --BEGIN ERROR HANDLING-- */
- if (flags == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock", "**sock|poll|nonblock %d %s",
- errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
- rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock", "**sock|poll|nonblock %d %s",
- errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- nodelay = 1;
- rc = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
- /* --BEGIN ERROR HANDLING-- */
- if (rc != 0)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nodelay", "**sock|poll|nodelay %d %s",
- errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Verify that the socket buffer size is correct
- */
- /* FIXME: Who sets the socket buffer size? Why isn't the test
- made at that time? */
-#if 1
- mpi_errno = MPIDU_Sock_SetSockBufferSize( fd, 1 );
- if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
-#else
- if (MPIDU_Socki_socket_bufsz > 0)
- {
- int bufsz;
- socklen_t bufsz_len;
-
- bufsz_len = sizeof(bufsz);
- rc = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsz, &bufsz_len);
- /* FIXME: There's normally no need to check that the socket buffer
- size was set to the requested size. This should only be part of
- some more verbose diagnostic output, not a general action */
- /* --BEGIN ERROR HANDLING-- */
- if (rc == 0)
- {
- if (bufsz < MPIDU_Socki_socket_bufsz * 0.9 ||
- bufsz < MPIDU_Socki_socket_bufsz * 1.0)
- {
- MPL_msg_printf("WARNING: send socket buffer size differs from requested size (requested=%d, actual=%d)\n",
- MPIDU_Socki_socket_bufsz, bufsz);
- }
- }
- /* --END ERROR HANDLING-- */
-
- bufsz_len = sizeof(bufsz);
- rc = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsz, &bufsz_len);
- /* FIXME: There's normally no need to check that the socket buffer
- size was set to the requested size. This should only be part of
- some more verbose diagnostic output, not a general action */
- /* FIXME: Cut and paste code is a disaster waiting to happen.
- Particularly in any non-performance critical section,
- create a separate routine instead of using cut and paste. */
- /* --BEGIN ERROR HANDLING-- */
- if (rc == 0)
- {
- if (bufsz < MPIDU_Socki_socket_bufsz * 0.9 ||
- bufsz < MPIDU_Socki_socket_bufsz * 1.0)
- {
- MPL_msg_printf("WARNING: receive socket buffer size differs from requested size (requested=%d, actual=%d)\n",
- MPIDU_Socki_socket_bufsz, bufsz);
- }
- }
- /* --END ERROR HANDLING-- */
- }
-#endif
- /*
- * Allocate and initialize sock and poll structures.
- *
- * NOTE: pollfd->fd is initialized to -1. It is only set to the true fd
- * value when an operation is posted on the sock. This
- * (hopefully) eliminates a little overhead in the OS and avoids
- * repetitive POLLHUP events when the connection is closed by
- * the remote process.
- */
- mpi_errno = MPIDU_Socki_sock_alloc(sock_set, &sock);
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**sock|sockalloc", NULL);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- pollinfo->fd = fd;
- pollinfo->user_ptr = user_ptr;
- pollinfo->type = MPIDU_SOCKI_TYPE_COMMUNICATION;
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RW;
- pollinfo->os_errno = 0;
-
- *sockp = sock;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_ACCEPT);
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
- fn_fail:
- if (fd != -1)
- {
- close(fd);
- }
-
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-/* end MPIDU_Sock_accept() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_read
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_read(MPIDU_Sock_t sock, void * buf, MPIU_Size_t len,
- MPIU_Size_t * num_read)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- size_t nb;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_READ);
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_READ);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_READ);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /* FIXME: multiple passes should be made if
- len > SSIZE_MAX and nb == SSIZE_MAX */
- /* FIXME: This is a scary test/assignment. It needs an explanation
- (presumably that this routine will be called again if len is
- shortened. However, in that case, the description of the routine
- (which is also missing!!!!) needs to be very clear about this
- requirement. */
- if (len > SSIZE_MAX)
- {
- len = SSIZE_MAX;
- }
-
- do
- {
- MPIDI_FUNC_ENTER(MPID_STATE_READ);
- nb = read(pollinfo->fd, buf, len);
- MPIDI_FUNC_EXIT(MPID_STATE_READ);
- }
- while (nb == -1 && errno == EINTR);
-
- if (nb > 0)
- {
- *num_read = (MPIU_Size_t) nb;
- }
- /* --BEGIN ERROR HANDLING-- */
- else if (nb == 0)
- {
- *num_read = 0;
-
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
- MPIDU_SOCK_ERR_CONN_CLOSED,
- "**sock|connclosed", "**sock|connclosed %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id);
-
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
- {
- /* A write is posted on this connection. Enqueue an event for
- the write indicating the connection is closed. */
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE,
- pollinfo->write_nb, pollinfo->user_ptr,
- mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- }
-
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
- }
- else if (errno == EAGAIN || errno == EWOULDBLOCK)
- {
- *num_read = 0;
- }
- else
- {
- int disconnected;
-
- *num_read = 0;
-
- mpi_errno = MPIDU_Socki_os_to_mpi_errno(pollinfo, errno,
- FCNAME, __LINE__, &disconnected);
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- /*
- * A serious error occurred. There is no guarantee that the
- * data structures are still intact. Therefore, we avoid
- * modifying them.
- */
- goto fn_exit;
- }
-
- if (disconnected)
- {
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
- {
- /* A write is posted on this connection. Enqueue an event
- for the write indicating the connection is closed. */
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE,
- pollinfo->write_nb, pollinfo->user_ptr,
- mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- }
-
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
- }
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_READ);
- return mpi_errno;
-}
-/* end MPIDU_Sock_read() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_readv
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_readv(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n,
- MPIU_Size_t * num_read)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- ssize_t nb;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_READV);
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_READV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_READV);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /*
- * FIXME: The IEEE 1003.1 standard says that if the sum of the iov_len
- * fields exceeds SSIZE_MAX, an errno of EINVAL will be
- * returned. How do we handle this? Can we place an equivalent
- * limitation in the Sock interface?
- */
- do
- {
- MPIDI_FUNC_ENTER(MPID_STATE_READV);
- nb = MPL_large_readv(pollinfo->fd, iov, iov_n);
- MPIDI_FUNC_EXIT(MPID_STATE_READV);
- }
- while (nb == -1 && errno == EINTR);
-
- if (nb > 0)
- {
- *num_read = (MPIU_Size_t) nb;
- }
- /* --BEGIN ERROR HANDLING-- */
- else if (nb == 0)
- {
- *num_read = 0;
-
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__,
- MPIDU_SOCK_ERR_CONN_CLOSED,
- "**sock|connclosed", "**sock|connclosed %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id);
-
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
- {
-
- /* A write is posted on this connection. Enqueue an event
- for the write indicating the connection is closed. */
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE,
- pollinfo->write_nb, pollinfo->user_ptr,
- mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- }
-
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
- }
- else if (errno == EAGAIN || errno == EWOULDBLOCK)
- {
- *num_read = 0;
- }
- else
- {
- int disconnected;
-
- *num_read = 0;
-
- mpi_errno = MPIDU_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME,
- __LINE__, &disconnected);
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- /*
- * A serious error occurred. There is no guarantee that the
- * data structures are still intact. Therefore, we avoid
- * modifying them.
- */
- goto fn_exit;
- }
-
- if (disconnected)
- {
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
- {
- /* A write is posted on this connection. Enqueue an event
- for the write indicating the connection is closed. */
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE,
- pollinfo->write_nb, pollinfo->user_ptr,
- mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- }
-
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
- }
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_READV);
- return mpi_errno;
-}
-/* end MPIDU_Sock_readv() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_write
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_write(MPIDU_Sock_t sock, void * buf, MPIU_Size_t len,
- MPIU_Size_t * num_written)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- ssize_t nb;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_WRITE);
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_WRITE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_WRITE);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /* FIXME: multiple passes should be made if len > SSIZE_MAX and nb == SSIZE_MAX */
- if (len > SSIZE_MAX)
- {
- len = SSIZE_MAX;
- }
-
- do
- {
- MPIDI_FUNC_ENTER(MPID_STATE_WRITE);
- nb = write(pollinfo->fd, buf, len);
- MPIDI_FUNC_EXIT(MPID_STATE_WRITE);
- }
- while (nb == -1 && errno == EINTR);
-
- if (nb >= 0)
- {
- *num_written = nb;
- }
- /* --BEGIN ERROR HANDLING-- */
- else if (errno == EAGAIN || errno == EWOULDBLOCK)
- {
- *num_written = 0;
- }
- else
- {
- int disconnected;
-
- *num_written = 0;
-
- mpi_errno = MPIDU_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME,
- __LINE__, &disconnected);
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- /*
- * A serious error occurred. There is no guarantee that the data
- * structures are still intact. Therefore, we avoid
- * modifying them.
- */
- goto fn_exit;
- }
-
- if (disconnected)
- {
- /*
- * The connection is dead but data may still be in the socket
- * buffer; thus, we change the state and let
- * MPIDU_Sock_wait() clean things up.
- */
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;
- }
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WRITE);
- return mpi_errno;
-}
-/* end MPIDU_Sock_write() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_writev
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_writev(MPIDU_Sock_t sock, MPL_IOV * iov, int iov_n, MPIU_Size_t * num_written)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- ssize_t nb;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_WRITEV);
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_WRITEV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_WRITEV);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /*
- * FIXME: The IEEE 1003.1 standard says that if the sum of the iov_len
- * fields exceeds SSIZE_MAX, an errno of EINVAL will be
- * returned. How do we handle this? Can we place an equivalent
- * limitation in the Sock interface?
- */
- do
- {
- MPIDI_FUNC_ENTER(MPID_STATE_WRITEV);
- nb = MPL_large_writev(pollinfo->fd, iov, iov_n);
- MPIDI_FUNC_EXIT(MPID_STATE_WRITEV);
- }
- while (nb == -1 && errno == EINTR);
-
- if (nb >= 0)
- {
- *num_written = (MPIU_Size_t) nb;
- }
- /* --BEGIN ERROR HANDLING-- */
- else if (errno == EAGAIN || errno == EWOULDBLOCK)
- {
- *num_written = 0;
- }
- else
- {
- int disconnected;
-
- *num_written = 0;
-
- mpi_errno = MPIDU_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME,
- __LINE__, &disconnected);
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- /*
- * A serious error occurred. There is no guarantee that the
- * data structures are still intact. Therefore, we avoid
- * modifying them.
- */
- goto fn_exit;
- }
-
- if (disconnected)
- {
- /*
- * The connection is dead but data may still be in the socket
- * buffer; thus, we change the state and let
- * MPIDU_Sock_wait() clean things up.
- */
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;
- }
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WRITEV);
- return mpi_errno;
-}
-/* end MPIDU_Sock_writev() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_wakeup
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_wakeup(struct MPIDU_Sock_set * sock_set)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_WAKEUP);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_WAKEUP);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK_SET(sock_set, mpi_errno, fn_exit);
-
- /* FIXME: We need (1) a standardized test for including multithreaded
- code and (2) include support for user requests for a lower-level
- of thread safety. Finally, things like this should probably
- be implemented as an abstraction (e.g., wakeup_progress_threads?)
- rather than this specific code. */
-#ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
- {
- struct pollinfo * pollinfo;
-
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock_set->intr_sock);
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WAKEUP, 0, NULL,
- mpi_errno, mpi_errno, fn_exit);
- MPIDU_Socki_wakeup(sock_set);
- }
- MPIU_THREAD_CHECK_END;
-# endif
-
-#ifdef MPICH_IS_THREADED
- fn_exit:
-#endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAKEUP);
- return mpi_errno;
-}
-/* end MPIDU_Sock_wakeup() */
-
-
diff --git a/src/mpid/common/sock/poll/sock_init.i b/src/mpid/common/sock/poll/sock_init.i
deleted file mode 100644
index 26c0868..0000000
--- a/src/mpid/common/sock/poll/sock_init.i
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* FIXME: The usual missing documentation (what are these routines for?
- preconditions? who calls? post conditions? */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_init
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_init(void)
-{
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_INIT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_INIT);
-
- MPIDU_Socki_initialized++;
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_INIT);
- return MPI_SUCCESS;
-}
-
-/* FIXME: Who calls? When? Should this be a finalize handler instead? */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_finalize
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_finalize(void)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_FINALIZE);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_FINALIZE);
-
- MPIDU_Socki_initialized--;
-
- if (MPIDU_Socki_initialized == 0)
- {
- MPIDU_Socki_free_eventq_mem();
- }
-
-#ifdef USE_SOCK_VERIFY
- fn_exit:
-#endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_FINALIZE);
- return mpi_errno;
-}
diff --git a/src/mpid/common/sock/poll/sock_misc.i b/src/mpid/common/sock/poll/sock_misc.i
deleted file mode 100644
index b6f3d9d..0000000
--- a/src/mpid/common/sock/poll/sock_misc.i
+++ /dev/null
@@ -1,344 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* This routine is called in mpid/ch3/util/sock/ch3u_connect_sock.c */
-/* FIXME: This routine is misnamed; it is really get_interface_name (in the
- case where there are several networks available to the calling process,
- this picks one but even in the current code can pick a different
- interface if a particular environment variable is set) . */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_host_description
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_host_description(int myRank,
- char * host_description, int len)
-{
- char * env_hostname;
- int rc;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- /* --BEGIN ERROR HANDLING-- */
- if (len < 0)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,
- "**sock|badhdmax", NULL);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- /* FIXME: Is this documented? How does it work if the process manager
- cannot give each process a different value for an environment
- name? What if a different interface is needed? */
- /* Use hostname supplied in environment variable, if it exists */
- env_hostname = getenv("MPICH_INTERFACE_HOSTNAME");
-
- if (!env_hostname) {
- /* See if there is a per-process name for the interfaces (e.g.,
- the process manager only delievers the same values for the
- environment to each process */
- char namebuf[1024];
- MPL_snprintf( namebuf, sizeof(namebuf),
- "MPICH_INTERFACE_HOSTNAME_R_%d", myRank );
- env_hostname = getenv( namebuf );
- }
-
- if (env_hostname != NULL)
- {
- rc = MPIU_Strncpy(host_description, env_hostname, (size_t) len);
- /* --BEGIN ERROR HANDLING-- */
- if (rc != 0)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_HOST,
- "**sock|badhdlen", NULL);
- }
- /* --END ERROR HANDLING-- */
- }
- else {
- rc = gethostname(host_description, len);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- if (errno == EINVAL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_HOST,
- "**sock|badhdlen", NULL);
- }
- else if (errno == EFAULT)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_HOST,
- "**sock|badhdbuf", NULL);
- }
- else
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|oserror", "**sock|poll|oserror %d %s", errno, MPIU_Strerror(errno));
- }
- }
- /* --END ERROR HANDLING-- */
- }
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION);
- return mpi_errno;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_native_to_sock
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_native_to_sock(struct MPIDU_Sock_set * sock_set, MPIDU_SOCK_NATIVE_FD fd, void *user_ptr,
- struct MPIDU_Sock ** sockp)
-{
- struct MPIDU_Sock * sock = NULL;
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int rc;
- long flags;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_SOCK_NATIVE_TO_SOCK);
-
- MPIDI_FUNC_ENTER(MPID_STATE_SOCK_NATIVE_TO_SOCK);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
-
- /* allocate sock and poll structures */
- mpi_errno = MPIDU_Socki_sock_alloc(sock_set, &sock);
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**sock|sockalloc", NULL);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- /* set file descriptor to non-blocking */
- flags = fcntl(fd, F_GETFL, 0);
- /* --BEGIN ERROR HANDLING-- */
- if (flags == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
- rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /* initialize sock and poll structures */
- pollfd->fd = -1;
- pollfd->events = 0;
- pollfd->revents = 0;
-
- pollinfo->fd = fd;
- pollinfo->user_ptr = user_ptr;
- pollinfo->type = MPIDU_SOCKI_TYPE_COMMUNICATION;
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RW;
-
- *sockp = sock;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SOCK_NATIVE_TO_SOCK);
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
- fn_fail:
- if (sock != NULL)
- {
- MPIDU_Socki_sock_free(sock);
- }
-
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_set_user_ptr
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_set_user_ptr(struct MPIDU_Sock * sock, void * user_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
-
- if (sock != MPIDU_SOCK_INVALID_SOCK &&
- sock->sock_set != MPIDU_SOCK_INVALID_SET)
- {
- MPIDU_Socki_sock_get_pollinfo(sock)->user_ptr = user_ptr;
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK,
- "**sock|badsock", NULL);
- }
- /* --END ERROR HANDLING-- */
-
-#ifdef USE_SOCK_VERIFY
- fn_exit:
-#endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_SET_USER_PTR);
- return mpi_errno;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_sock_id
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_sock_id(struct MPIDU_Sock * sock)
-{
- int id;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_SOCK_ID);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_SOCK_ID);
-
- if (sock != MPIDU_SOCK_INVALID_SOCK)
- {
- if (sock->sock_set != MPIDU_SOCK_INVALID_SET)
- {
- id = MPIDU_Socki_sock_get_pollinfo(sock)->sock_id;
- }
- else
- {
- id = -1;
- }
- }
- else
- {
- id = -1;
- }
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_SOCK_ID);
- return id;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_sock_set_id
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_get_sock_set_id(struct MPIDU_Sock_set * sock_set)
-{
- int id;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID);
-
- if (sock_set != MPIDU_SOCK_INVALID_SET)
- {
- id = sock_set->id;
- }
- else
- {
- id = -1;
- }
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID);
- return id;
-}
-
-/* FIXME: This function violates the internationalization design by
- using English language strings rather than the error translation mechanism.
- This unnecessarily breaks the goal of allowing internationalization.
- Read the design documentation and if there is a problem, raise it rather
- than ignoring it.
-*/
-/* FIXME: It appears that this function was used instead of making use of the
- existing MPI-2 features to extend MPI error classes and code, of to export
- messages to non-MPI application */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_get_error_class_string
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* --BEGIN ERROR HANDLING-- */
-int MPIDU_Sock_get_error_class_string(int error, char *error_string, size_t length)
-{
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING);
- switch (MPIR_ERR_GET_CLASS(error))
- {
- case MPIDU_SOCK_ERR_FAIL:
- MPIU_Strncpy(error_string, "generic socket failure", length);
- break;
- case MPIDU_SOCK_ERR_INIT:
- MPIU_Strncpy(error_string, "socket module not initialized", length);
- break;
- case MPIDU_SOCK_ERR_NOMEM:
- MPIU_Strncpy(error_string, "not enough memory to complete the socket operation", length);
- break;
- case MPIDU_SOCK_ERR_BAD_SET:
- MPIU_Strncpy(error_string, "invalid socket set", length);
- break;
- case MPIDU_SOCK_ERR_BAD_SOCK:
- MPIU_Strncpy(error_string, "invalid socket", length);
- break;
- case MPIDU_SOCK_ERR_BAD_HOST:
- MPIU_Strncpy(error_string, "host description buffer not large enough", length);
- break;
- case MPIDU_SOCK_ERR_BAD_HOSTNAME:
- MPIU_Strncpy(error_string, "invalid host name", length);
- break;
- case MPIDU_SOCK_ERR_BAD_PORT:
- MPIU_Strncpy(error_string, "invalid port", length);
- break;
- case MPIDU_SOCK_ERR_BAD_BUF:
- MPIU_Strncpy(error_string, "invalid buffer", length);
- break;
- case MPIDU_SOCK_ERR_BAD_LEN:
- MPIU_Strncpy(error_string, "invalid length", length);
- break;
- case MPIDU_SOCK_ERR_SOCK_CLOSED:
- MPIU_Strncpy(error_string, "socket closed", length);
- break;
- case MPIDU_SOCK_ERR_CONN_CLOSED:
- MPIU_Strncpy(error_string, "socket connection closed", length);
- break;
- case MPIDU_SOCK_ERR_CONN_FAILED:
- MPIU_Strncpy(error_string, "socket connection failed", length);
- break;
- case MPIDU_SOCK_ERR_INPROGRESS:
- MPIU_Strncpy(error_string, "socket operation in progress", length);
- break;
- case MPIDU_SOCK_ERR_TIMEOUT:
- MPIU_Strncpy(error_string, "socket operation timed out", length);
- break;
- case MPIDU_SOCK_ERR_INTR:
- MPIU_Strncpy(error_string, "socket operation interrupted", length);
- break;
- case MPIDU_SOCK_ERR_NO_NEW_SOCK:
- MPIU_Strncpy(error_string, "no new connection available", length);
- break;
- default:
- MPL_snprintf(error_string, length, "unknown socket error %d", error);
- break;
- }
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING);
- return MPI_SUCCESS;
-}
-/* --END ERROR HANDLING-- */
diff --git a/src/mpid/common/sock/poll/sock_post.i b/src/mpid/common/sock/poll/sock_post.i
deleted file mode 100644
index c787d97..0000000
--- a/src/mpid/common/sock/poll/sock_post.i
+++ /dev/null
@@ -1,729 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* FIXME: Provide an overview for the functions in this file */
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_connect_ifaddr
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/*
- This routine connects to a particular address (in byte form; for ipv4,
- the address is four bytes, typically the value of h_addr_list[0] in
- struct hostent. By avoiding a character name for an interface (we *never*
- connect to a host; we are *always* connecting to a particular interface
- on a host), we avoid problems with DNS services, including lack of properly
- configured services and scalability problems. As this routine uses
- a four-byte field, it is currently restricted to ipv4. This routine should
- evolve to support ipv4 and ipv6 addresses.
-
- This routine was constructed from MPIDU_Sock_post_connect by removing the
- poorly placed use of gethostname within the middle of that routine and
- simply using the ifaddr field that is passed to this routine.
- MPIDU_Sock_post_connect simply uses the hostname field to get the canonical
- IP address. The original routine and its API was retained to allow backwards
- compatibility until it is determined that we can always use explicit addrs
- needed in setting up the socket instead of character strings.
- */
-int MPIDU_Sock_post_connect_ifaddr( struct MPIDU_Sock_set * sock_set,
- void * user_ptr,
- MPIDU_Sock_ifaddr_t *ifaddr, int port,
- struct MPIDU_Sock ** sockp)
-{
- struct MPIDU_Sock * sock = NULL;
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int fd = -1;
- struct sockaddr_in addr;
- long flags;
- int nodelay;
- int rc;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_CONNECT_IFADDR);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_CONNECT_IFADDR);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
-
- /*
- * Create a non-blocking socket with Nagle's algorithm disabled
- */
- fd = socket(PF_INET, SOCK_STREAM, 0);
- if (fd == -1) {
- /* FIXME: It would be better to include a special formatting
- clue for system error messages (e.g., %dSE; in the recommended
- revision for error reporting (that is, value (errno) is an int,
- but should be interpreted as an System Error string) */
- MPIR_ERR_SETANDJUMP2(mpi_errno,MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|socket",
- "**sock|poll|socket %d %s", errno, MPIU_Strerror(errno));
- }
-
- flags = fcntl(fd, F_GETFL, 0);
- if (flags == -1) {
- MPIR_ERR_SETANDJUMP2(mpi_errno,MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock",
- "**sock|poll|nonblock %d %s", errno, MPIU_Strerror(errno));
- }
- rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
- if (rc == -1) {
- MPIR_ERR_SETANDJUMP2( mpi_errno, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock",
- "**sock|poll|nonblock %d %s",
- errno, MPIU_Strerror(errno));
- }
-
- nodelay = 1;
- rc = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
- if (rc != 0) {
- MPIR_ERR_SETANDJUMP2(mpi_errno,MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nodelay",
- "**sock|poll|nodelay %d %s",
- errno, MPIU_Strerror(errno));
- }
-
- /*
- * Allocate and initialize sock and poll structures
- *
- * NOTE: pollfd->fd is initialized to -1. It is only set to the true fd
- * value when an operation is posted on the sock. This
- * (hopefully) eliminates a little overhead in the OS and avoids
- * repetitive POLLHUP events when the connection is closed by
- * the remote process.
- */
- mpi_errno = MPIDU_Socki_sock_alloc(sock_set, &sock);
- if (mpi_errno != MPI_SUCCESS) {
- MPIR_ERR_SETANDJUMP(mpi_errno,MPIDU_SOCK_ERR_NOMEM,
- "**sock|sockalloc");
- }
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- pollinfo->fd = fd;
- pollinfo->user_ptr = user_ptr;
- pollinfo->type = MPIDU_SOCKI_TYPE_COMMUNICATION;
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RW;
- pollinfo->os_errno = 0;
-
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- memcpy(&addr.sin_addr.s_addr, ifaddr->ifaddr,
- sizeof(addr.sin_addr.s_addr));
- addr.sin_port = htons( (unsigned short)port);
-
- /*
- * Set and verify the socket buffer size
- */
- mpi_errno = MPIDU_Sock_SetSockBufferSize( fd, 1 );
- if (mpi_errno) { MPIR_ERR_POP(mpi_errno); }
-
- /*
- * Attempt to establish the connection
- */
- MPIU_DBG_STMT(CH3_CONNECT,TYPICAL,{
- char addrString[64];
- MPIDU_Sock_AddrToStr( ifaddr, addrString, sizeof(addrString) );
- MPIU_DBG_MSG_FMT(CH3_CONNECT,TYPICAL,(MPIU_DBG_FDEST,
- "Connecting to %s:%d", addrString, port ));
- })
-
- do
- {
- rc = connect(fd, (struct sockaddr *) &addr, sizeof(addr));
- }
- while (rc == -1 && errno == EINTR);
-
- if (rc == 0)
- {
- /* connection succeeded */
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"Setting state to SOCKI_STATE_CONNECTED_RW for sock %p",sock);
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RW;
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_CONNECT, 0, user_ptr, MPI_SUCCESS, mpi_errno, fn_fail);
- }
- /* --BEGIN ERROR HANDLING-- */
- else if (errno == EINPROGRESS)
- {
- /* connection pending */
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"Setting state to SOCKI_STATE_CONNECTING for sock %p",sock);
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTING;
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);
- }
- else
- {
- MPIU_DBG_MSG_P(CH3_CONNECT,TYPICAL,"Setting state to SOCKI_STATE_DISCONNECTED (failure in connect) for sock %p",sock);
- pollinfo->os_errno = errno;
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
-
- if (errno == ECONNREFUSED)
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_CONNECT, 0, user_ptr, MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_FAILED,
- "**sock|connrefused", "**sock|poll|connrefused %d %d %s",
- pollinfo->sock_set->id, pollinfo->sock_id, ""), mpi_errno, fn_fail);
- }
- else
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_CONNECT, 0, user_ptr, MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_FAILED,
- "**sock|oserror", "**sock|poll|oserror %d %d %d %s", pollinfo->sock_set->id, pollinfo->sock_id, errno,
- MPIU_Strerror(errno)), mpi_errno, fn_fail);
- }
- }
- /* --END ERROR HANDLING-- */
-
- *sockp = sock;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CONNECT_IFADDR);
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
- fn_fail:
- if (fd != -1)
- {
- close(fd);
- }
-
- if (sock != NULL)
- {
- MPIDU_Socki_sock_free(sock);
- }
-
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-/* FIXME: What does this routine do? Why does it take a host description
- instead of an interface name or address? */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_connect
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_connect(struct MPIDU_Sock_set * sock_set, void * user_ptr,
- char * host_description, int port,
- struct MPIDU_Sock ** sockp)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDU_Sock_ifaddr_t ifaddr;
- struct hostent * hostent;
-
- /*
- * Convert hostname to IP address
- *
- * FIXME: this should handle failures caused by a backed up listener queue
- * at the remote process. It should also use a
- * specific interface if one is specified by the user.
- */
- /* FIXME: strtok may change the contents of host_description. Shouldn't
- the host description be a const char [] and not modified by this
- routine? */
- strtok(host_description, " ");
- /* FIXME: For ipv6, we should use getaddrinfo */
- hostent = gethostbyname(host_description);
- /* --BEGIN ERROR HANDLING-- */
- if (hostent == NULL || hostent->h_addrtype != AF_INET) {
- /* FIXME: Set error */
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- /* These are correct for IPv4 */
- memcpy( ifaddr.ifaddr, (unsigned char *)hostent->h_addr_list[0], 4 );
- ifaddr.len = 4;
- ifaddr.type = AF_INET;
- mpi_errno = MPIDU_Sock_post_connect_ifaddr( sock_set, user_ptr,
- &ifaddr, port, sockp );
- fn_exit:
- return mpi_errno;
-}
-/* end MPIDU_Sock_post_connect() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_listen
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-#ifndef USHRT_MAX
-#define USHRT_MAX 65535 /* 2^16-1 */
-#endif
-int MPIDU_Sock_listen(struct MPIDU_Sock_set * sock_set, void * user_ptr,
- int * port, struct MPIDU_Sock ** sockp)
-{
- struct MPIDU_Sock * sock;
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int fd = -1;
- long flags;
- int optval;
- struct sockaddr_in addr;
- socklen_t addr_len;
- int rc;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_LISTEN);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_LISTEN);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- /* --BEGIN ERROR HANDLING-- */
- if (*port < 0 || *port > USHRT_MAX)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_PORT,
- "**sock|badport", "**sock|badport %d", *port);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Create a non-blocking socket for the listener
- */
- fd = socket(PF_INET, SOCK_STREAM, 0);
- /* --BEGIN ERROR HANDLING-- */
- if (fd == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|socket", "**sock|poll|socket %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /* set SO_REUSEADDR to a prevent a fixed service port from being bound to during subsequent invocations */
- if (*port != 0)
- {
- optval = 1;
- rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int));
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|reuseaddr", "**sock|poll|reuseaddr %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
- }
-
- /* make the socket non-blocking so that accept() will return immediately if no new connection is available */
- flags = fcntl(fd, F_GETFL, 0);
- /* --BEGIN ERROR HANDLING-- */
- if (flags == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
- rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Bind the socket to all interfaces and the specified port. The port specified by the calling routine may be 0, indicating
- * that the operating system can select an available port in the ephemeral port range.
- */
- if (*port == 0) {
- int portnum;
- /* see if we actually want to find values within a range */
-
- MPIR_ERR_CHKANDJUMP(MPIR_CVAR_CH3_PORT_RANGE.low < 0 || MPIR_CVAR_CH3_PORT_RANGE.low > MPIR_CVAR_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
-
- /* default MPICH_PORT_RANGE is {0,0} so bind will use any available port */
- for (portnum = MPIR_CVAR_CH3_PORT_RANGE.low; portnum <= MPIR_CVAR_CH3_PORT_RANGE.high; ++portnum) {
- memset( (void *)&addr, 0, sizeof(addr) );
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
- addr.sin_port = htons( (unsigned short)portnum );
-
- rc = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
- if (rc < 0) {
- if (errno != EADDRINUSE && errno != EADDRNOTAVAIL) {
- close(fd);
- break;
- }
- }
- else
- break;
- }
- }
- else {
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
- addr.sin_port = htons((unsigned short) *port);
- rc = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
- }
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|bind", "**sock|poll|bind %d %d %s", *port, errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Set and verify the socket buffer size
- */
- mpi_errno = MPIDU_Sock_SetSockBufferSize( fd, 1 );
- if (mpi_errno) { MPIR_ERR_POP( mpi_errno ); }
-
- /*
- * Start listening for incoming connections...
- */
- rc = listen(fd, SOMAXCONN);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|listen", "**sock|poll|listen %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Get listener port. Techincally we don't need to do this if a port was
- * specified by the calling routine; but it adds an extra error check.
- */
- addr_len = sizeof(addr);
- rc = getsockname(fd, (struct sockaddr *) &addr, &addr_len);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|getport", "**sock|poll|getport %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
- *port = (unsigned int) ntohs(addr.sin_port);
-
- /*
- * Allocate and initialize sock and poll structures. If another thread is
- * blocking in poll(), that thread must be woke up
- * long enough to pick up the addition of the listener socket.
- */
- mpi_errno = MPIDU_Socki_sock_alloc(sock_set, &sock);
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**sock|sockalloc", NULL);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- pollinfo->fd = fd;
- pollinfo->user_ptr = user_ptr;
- pollinfo->type = MPIDU_SOCKI_TYPE_LISTENER;
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;
-
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
-
- *sockp = sock;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
- fn_fail:
- if (fd != -1)
- {
- close(fd);
- }
-
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-/* end MPIDU_Sock_listen() */
-
-
-/* FIXME: What does this function do? */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_read
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_read(struct MPIDU_Sock * sock, void * buf, MPIU_Size_t minlen, MPIU_Size_t maxlen,
- MPIDU_Sock_progress_update_func_t fn)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_READ);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_READ);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /* --BEGIN ERROR HANDLING-- */
- if (minlen < 1 || minlen > maxlen)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,
- "**sock|badlen", "**sock|badlen %d %d %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id, minlen, maxlen);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- pollinfo->read.buf.ptr = buf;
- pollinfo->read.buf.min = minlen;
- pollinfo->read.buf.max = maxlen;
- pollinfo->read_iov_flag = FALSE;
- pollinfo->read_nb = 0;
- pollinfo->read_progress_update_fn = fn;
-
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_READ);
- return mpi_errno;
-}
-/* end MPIDU_Sock_post_read() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_readv
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_readv(struct MPIDU_Sock * sock, MPL_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_READV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_READV);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /* --BEGIN ERROR HANDLING-- */
- if (iov_n < 1 || iov_n > MPL_IOV_LIMIT)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,
- "**sock|badiovn", "**sock|badiovn %d %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id, iov_n);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- pollinfo->read.iov.ptr = iov;
- pollinfo->read.iov.count = iov_n;
- pollinfo->read.iov.offset = 0;
- pollinfo->read_iov_flag = TRUE;
- pollinfo->read_nb = 0;
- pollinfo->read_progress_update_fn = fn;
-
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_READV);
- return mpi_errno;
-}
-/* end MPIDU_Sock_post_readv() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_write
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_write(struct MPIDU_Sock * sock, void * buf, MPIU_Size_t minlen, MPIU_Size_t maxlen,
- MPIDU_Sock_progress_update_func_t fn)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_WRITE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_WRITE);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /* --BEGIN ERROR HANDLING-- */
- if (minlen < 1 || minlen > maxlen)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,
- "**sock|badlen", "**sock|badlen %d %d %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id, minlen, maxlen);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- pollinfo->write.buf.ptr = buf;
- pollinfo->write.buf.min = minlen;
- pollinfo->write.buf.max = maxlen;
- pollinfo->write_iov_flag = FALSE;
- pollinfo->write_nb = 0;
- pollinfo->write_progress_update_fn = fn;
-
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_WRITE);
- return mpi_errno;
-}
-/* end MPIDU_Sock_post_write() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_writev
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_writev(struct MPIDU_Sock * sock, MPL_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_WRITEV);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_WRITEV);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);
- MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);
-
- /* --BEGIN ERROR HANDLING-- */
- if (iov_n < 1 || iov_n > MPL_IOV_LIMIT)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,
- "**sock|badiovn", "**sock|badiovn %d %d %d",
- pollinfo->sock_set->id, pollinfo->sock_id, iov_n);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- pollinfo->write.iov.ptr = iov;
- pollinfo->write.iov.count = iov_n;
- pollinfo->write.iov.offset = 0;
- pollinfo->write_iov_flag = TRUE;
- pollinfo->write_nb = 0;
- pollinfo->write_progress_update_fn = fn;
-
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_WRITEV);
- return mpi_errno;
-}
-/* end MPIDU_Sock_post_writev() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_post_close
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_post_close(struct MPIDU_Sock * sock)
-{
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
-
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);
-
- /* --BEGIN ERROR HANDLING-- */
- if (pollinfo->state == MPIDU_SOCKI_STATE_CLOSING)
- {
- mpi_errno = MPIR_Err_create_code(
- mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**sock|closing_already",
- "**sock|closing_already %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- if (pollinfo->type == MPIDU_SOCKI_TYPE_COMMUNICATION)
- {
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLIN | POLLOUT))
- {
- /* --BEGIN ERROR HANDLING-- */
- int event_mpi_errno;
-
- event_mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_SOCK_CLOSED, "**sock|close_cancel",
- "**sock|close_cancel %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
-
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLIN))
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
- MPI_SUCCESS, mpi_errno, fn_exit);
- }
-
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
- MPI_SUCCESS, mpi_errno, fn_exit);
- }
-
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN | POLLOUT);
- /* --END ERROR HANDLING-- */
- }
- }
- else /* if (pollinfo->type == MPIDU_SOCKI_TYPE_LISTENER) */
- {
- /*
- * The event queue may contain an accept event which means that
- * MPIDU_Sock_accept() may be legally called after
- * MPIDU_Sock_post_close(). However, MPIDU_Sock_accept() must be
- * called before the close event is return by
- * MPIDU_Sock_wait().
- */
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN);
- }
-
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_CLOSE, 0, pollinfo->user_ptr, MPI_SUCCESS, mpi_errno, fn_exit);
- pollinfo->state = MPIDU_SOCKI_STATE_CLOSING;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);
- return mpi_errno;
-}
-
-
diff --git a/src/mpid/common/sock/poll/sock_set.i b/src/mpid/common/sock/poll/sock_set.i
deleted file mode 100644
index 72e80f6..0000000
--- a/src/mpid/common/sock/poll/sock_set.i
+++ /dev/null
@@ -1,283 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_create_set
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_create_set(struct MPIDU_Sock_set ** sock_setp)
-{
- struct MPIDU_Sock_set * sock_set = NULL;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_CREATE_SET);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_CREATE_SET);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
-
- /*
- * Allocate and initialized a new sock set structure
- */
- sock_set = MPIU_Malloc(sizeof(struct MPIDU_Sock_set));
- /* --BEGIN ERROR HANDLING-- */
- if (sock_set == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**sock|setalloc", 0);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- sock_set->id = MPIDU_Socki_set_next_id++;
- sock_set->poll_array_sz = 0;
- sock_set->poll_array_elems = 0;
- sock_set->starting_elem = 0;
- sock_set->pollfds = NULL;
- sock_set->pollinfos = NULL;
- sock_set->eventq_head = NULL;
- sock_set->eventq_tail = NULL;
- /* FIXME: Move the thread-specific operations into thread-specific
- routines (to allow for alternative thread sync models and
- for runtime control of thread level) */
-# ifdef MPICH_IS_THREADED
- {
- sock_set->pollfds_active = NULL;
- sock_set->pollfds_updated = FALSE;
- sock_set->wakeup_posted = FALSE;
- sock_set->intr_fds[0] = -1;
- sock_set->intr_fds[1] = -1;
- sock_set->intr_sock = NULL;
- }
-# endif
-
-# ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
- {
- struct MPIDU_Sock * sock = NULL;
- struct pollfd * pollfd;
- struct pollinfo * pollinfo;
- long flags;
- int rc;
-
- /*
- * Acquire a pipe (the interrupter) to wake up a blocking poll should
- * it become necessary.
- *
- * Make the read descriptor nonblocking. The write descriptor is left
- * as a blocking descriptor. The write has to
- * succeed or the system will lock up. Should the blocking descriptor
- * prove to be a problem, then (1) copy the above
- * code, applying it to the write descriptor, and (2) update
- * MPIDU_Socki_wakeup() so that it loops while write returns 0,
- * performing a thread yield between iterations.
- */
- rc = pipe(sock_set->intr_fds);
- /* --BEGIN ERROR HANDLING-- */
- if (rc != 0)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|pipe", "**sock|poll|pipe %d %s", errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- flags = fcntl(sock_set->intr_fds[0], F_GETFL, 0);
- /* --BEGIN ERROR HANDLING-- */
- if (flags == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|pipenonblock", "**sock|poll|pipenonblock %d %s",
- errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- rc = fcntl(sock_set->intr_fds[0], F_SETFL, flags | O_NONBLOCK);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == -1)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|pipenonblock", "**sock|poll|pipenonblock %d %s",
- errno, MPIU_Strerror(errno));
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Allocate and initialize a sock structure for the interrupter pipe
- */
- mpi_errno = MPIDU_Socki_sock_alloc(sock_set, &sock);
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno != MPI_SUCCESS)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**sock|sockalloc", NULL);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- sock_set->intr_sock = sock;
-
- pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
-
- pollfd->fd = sock_set->intr_fds[0];
- pollinfo->fd = sock_set->intr_fds[0];
- pollinfo->user_ptr = NULL;
- pollinfo->type = MPIDU_SOCKI_TYPE_INTERRUPTER;
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;
- pollinfo->os_errno = 0;
-
- MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);
- }
- MPIU_THREAD_CHECK_END;
-# endif
-
- *sock_setp = sock_set;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_CREATE_SET);
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
- fn_fail:
- if (sock_set != NULL)
- {
-# ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
- {
- if (sock_set->intr_fds[0] != -1)
- {
- close(sock_set->intr_fds[0]);
- }
-
- if (sock_set->intr_fds[1] != -1)
- {
- close(sock_set->intr_fds[1]);
- }
- }
- MPIU_THREAD_CHECK_END;
-# endif
-
- MPIU_Free(sock_set);
- }
-
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_close_open_sockets
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_close_open_sockets(struct MPIDU_Sock_set * sock_set, void** user_ptr ){
-
- int i;
- int mpi_errno = MPI_SUCCESS;
- struct pollinfo * pollinfos = NULL;
- pollinfos = sock_set->pollinfos;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_CLOSE_OPEN_SOCKETS);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_CLOSE_OPEN_SOCKETS);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
- /* wakeup waiting socket if mullti-threades */
- *user_ptr = NULL;
- for (i = 0; i < sock_set->poll_array_elems; i++) {
- if(pollinfos[i].sock != NULL && pollinfos[i].type != MPIDU_SOCKI_TYPE_INTERRUPTER){
- close(pollinfos[i].fd);
- MPIDU_Socki_sock_free(pollinfos[i].sock);
- *user_ptr = pollinfos[i].user_ptr;
- break;
- }
- }
-#ifdef USE_SOCK_VERIFY
- fn_exit:
-#endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_CLOSE_OPEN_SOCKETS);
- return mpi_errno;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_destroy_set
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_destroy_set(struct MPIDU_Sock_set * sock_set)
-{
- int elem;
- struct MPIDU_Sock_event event;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
-
- MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);
-
- /*
- * FIXME: check for open socks and return an error if any are found
- */
-
- /*
- * FIXME: verify no other thread is blocked in poll(). wake it up and
- * get it to exit.
- */
-
- /*
- * Close pipe for interrupting a blocking poll()
- */
-# ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
- {
- close(sock_set->intr_fds[1]);
- close(sock_set->intr_fds[0]);
- MPIDU_Socki_sock_free(sock_set->intr_sock);
-
- sock_set->pollfds_updated = FALSE;
- sock_set->pollfds_active = NULL;
- sock_set->wakeup_posted = FALSE;
- sock_set->intr_fds[0] = -1;
- sock_set->intr_fds[1] = -1;
- sock_set->intr_sock = NULL;
- }
- MPIU_THREAD_CHECK_END;
-# endif
-
- /*
- * Clear the event queue to eliminate memory leaks
- */
- while (MPIDU_Socki_event_dequeue(sock_set, &elem, &event) == MPI_SUCCESS);
-
- /*
- * Free structures used by the sock set
- */
- MPIU_Free(sock_set->pollinfos);
- MPIU_Free(sock_set->pollfds);
-
- /*
- * Reset the sock set fields
- */
- sock_set->id = ~0;
- sock_set->poll_array_sz = 0;
- sock_set->poll_array_elems = 0;
- sock_set->starting_elem = 0;
- sock_set->pollfds = NULL;
- sock_set->pollinfos = NULL;
- sock_set->eventq_head = NULL;
- sock_set->eventq_tail = NULL;
-
- /*
- * Free the structure
- */
- MPIU_Free(sock_set);
-
-#ifdef USE_SOCK_VERIFY
- fn_exit:
-#endif
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_DESTROY_SET);
- return mpi_errno;
-}
diff --git a/src/mpid/common/sock/poll/sock_wait.i b/src/mpid/common/sock/poll/sock_wait.i
deleted file mode 100644
index eb7f6b8..0000000
--- a/src/mpid/common/sock/poll/sock_wait.i
+++ /dev/null
@@ -1,822 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* Make sure that we can properly ensure atomic access to the poll routine */
-#ifdef MPICH_IS_THREADED
-#if !(MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
-#error selected multi-threaded implementation is not supported
-#endif
-#endif
-
-
-static int MPIDU_Socki_handle_pollhup(struct pollfd * const pollfd,
- struct pollinfo * const pollinfo);
-static int MPIDU_Socki_handle_pollerr(struct pollfd * const pollfd,
- struct pollinfo * const pollinfo);
-static int MPIDU_Socki_handle_read(struct pollfd * const pollfd,
- struct pollinfo * const pollinfo);
-static int MPIDU_Socki_handle_write(struct pollfd * const pollfd,
- struct pollinfo * const pollinfo);
-static int MPIDU_Socki_handle_connect(struct pollfd * const pollfd,
- struct pollinfo * const pollinfo);
-
-/*
- * MPIDU_Sock_wait()
- *
- * NOTES:
- *
- * For fatal errors, the state of the connection progresses directly to the
- * failed state and the connection is marked inactive in
- * the poll array. Under normal conditions, the fatal error should result in
- * the termination of the process; but, if that
- * doesn't happen, we try to leave the implementation in a somewhat sane state.
- *
- * In the multithreaded case, only one routine at a time may call this routine
- * To permit progress by other threads, it will release any global lock or
- * coarse-grain critical section.
- */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Sock_wait
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDU_Sock_wait(struct MPIDU_Sock_set * sock_set, int millisecond_timeout,
- struct MPIDU_Sock_event * eventp)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_WAIT);
- MPIDI_STATE_DECL(MPID_STATE_POLL);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_WAIT);
-
- for (;;)
- {
- int elem=0; /* Keep compiler happy */
- int n_fds;
- int n_elems;
- int found_active_elem = FALSE;
-
- mpi_errno = MPIDU_Socki_event_dequeue(sock_set, &elem, eventp);
- if (mpi_errno == MPI_SUCCESS) {
- struct pollinfo * pollinfo;
- int flags;
-
- if (eventp->op_type != MPIDU_SOCK_OP_CLOSE)
- {
- break;
- }
-
- pollinfo = &sock_set->pollinfos[elem];
-
- /*
- * Attempt to set socket back to blocking. This *should* prevent
- * any data in the socket send buffer from being
- * discarded. Instead close() will block until the buffer is
- * flushed or the connection timeouts and is considered
- * lost. Theoretically, this could cause the MPIDU_Sock_wait() to
- * hang indefinitely; however, the calling code
- * should ensure this will not happen by going through a shutdown
- * protocol before posting a close operation.
- *
- * FIXME: If the attempt to set the socket back to blocking fails,
- * we presently ignore it. Should we return an
- * error? We need to define acceptible data loss at close time.
- * MS Windows has worse problems with this, so it
- * may not be possible to make any guarantees.
- */
- flags = fcntl(pollinfo->fd, F_GETFL, 0);
- if (flags != -1)
- {
- fcntl(pollinfo->fd, F_SETFL, flags & ~O_NONBLOCK);
- }
-
- /* FIXME: return code? If an error occurs do we return it
- instead of the error specified in the event? */
- close(pollinfo->fd);
-
- MPIDU_Socki_sock_free(pollinfo->sock);
-
- break;
- }
-
- for(;;)
- {
-# ifndef MPICH_IS_THREADED
- {
- MPIDI_FUNC_ENTER(MPID_STATE_POLL);
- n_fds = poll(sock_set->pollfds, sock_set->poll_array_elems,
- millisecond_timeout);
- MPIDI_FUNC_EXIT(MPID_STATE_POLL);
- }
-# else /* MPICH_IS_THREADED */
- {
- /* If we've enabled runtime checking of the thread level,
- then test for that and if we are *not* multithreaded,
- just use the same code as above. Otherwise, use
- multithreaded code (and we don't then need the
- MPIU_THREAD_CHECK_BEGIN/END macros) */
- if (!MPIR_ThreadInfo.isThreaded) {
- MPIDI_FUNC_ENTER(MPID_STATE_POLL);
- n_fds = poll(sock_set->pollfds, sock_set->poll_array_elems,
- millisecond_timeout);
- MPIDI_FUNC_EXIT(MPID_STATE_POLL);
- }
- else
- {
- /*
- * First try a non-blocking poll to see if any immediate
- * progress can be made. This avoids the lock manipulation
- * overhead.
- */
- MPIDI_FUNC_ENTER(MPID_STATE_POLL);
- n_fds = poll(sock_set->pollfds, sock_set->poll_array_elems, 0);
- MPIDI_FUNC_EXIT(MPID_STATE_POLL);
-
- if (n_fds == 0 && millisecond_timeout != 0)
- {
- int pollfds_active_elems = sock_set->poll_array_elems;
- int err;
-
- /* The abstraction here is a shared (blocking) resource that
- the threads must coordinate. That means not holding
- a lock across the blocking operation but also
- ensuring that only one thread at a time attempts
- to use this resource.
-
- What isn't yet clear in this where the test is made
- to ensure that two threads don't call the poll operation,
- even in a nonblocking sense.
- */
- sock_set->pollfds_active = sock_set->pollfds;
-
- /* Release the lock so that other threads may make
- progress while this thread waits for something to
- do */
- MPIU_DBG_MSG(THREAD,TYPICAL,"Exit global critical section (sock_wait)");
- /* MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX); */
- MPID_Thread_mutex_unlock(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
-
- MPIDI_FUNC_ENTER(MPID_STATE_POLL);
- n_fds = poll(sock_set->pollfds_active,
- pollfds_active_elems, millisecond_timeout);
- MPIDI_FUNC_EXIT(MPID_STATE_POLL);
-
- /* Reaquire the lock before processing any of the
- information returned from poll */
- MPIU_DBG_MSG(THREAD,TYPICAL,"Enter global critical section (sock_wait)");
- /* MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX); */
- MPID_Thread_mutex_lock(&MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX, &err);
-
- /*
- * Update pollfds array if changes were posted while we
- * were blocked in poll
- */
- if (sock_set->pollfds_updated) {
- mpi_errno = MPIDI_Sock_update_sock_set(
- sock_set, pollfds_active_elems );
- }
-
- sock_set->pollfds_active = NULL;
- sock_set->wakeup_posted = FALSE;
- }
- } /* else !MPIR_ThreadInfo.isThreaded */
- }
-# endif /* MPICH_IS_THREADED */
-
- if (n_fds > 0)
- {
- break;
- }
- else if (n_fds == 0)
- {
- mpi_errno = MPIDU_SOCK_ERR_TIMEOUT;
- goto fn_exit;
- }
- else if (errno == EINTR)
- {
- if (millisecond_timeout != MPIDU_SOCK_INFINITE_TIME)
- {
- mpi_errno = MPIDU_SOCK_ERR_TIMEOUT;
- goto fn_exit;
- }
-
- continue;
- }
- /* --BEGIN ERROR HANDLING-- */
- else if (errno == ENOMEM || errno == EAGAIN)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**sock|osnomem", NULL);
- goto fn_exit;
- }
- else
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,
- "**sock|oserror", "**sock|poll|oserror %d %s", errno, MPIU_Strerror(errno));
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- }
-
- elem = sock_set->starting_elem;
- n_elems = sock_set->poll_array_elems;
- while (n_fds > 0 && n_elems > 0)
- {
- /*
- * Acquire pointers to the pollfd and pollinfo structures for the next element
- *
- * NOTE: These pointers could become stale, if a new sock were to be allocated during the processing of the element.
- * At present, none of the handler routines allocate a sock, so the issue does not arise.
- */
- struct pollfd * const pollfd = &sock_set->pollfds[elem];
- struct pollinfo * const pollinfo = &sock_set->pollinfos[elem];
-
- MPIU_Assert((pollfd->events & (POLLIN | POLLOUT)) || pollfd->fd == -1);
- MPIU_Assert(pollfd->fd >= 0 || pollfd->fd == -1);
-
- if (pollfd->fd < 0 || pollfd->revents == 0)
- {
- /* This optimization assumes that most FDs will not have a pending event. */
- n_elems -= 1;
- elem = (elem + 1 < sock_set->poll_array_elems) ? elem + 1 : 0;
- continue;
- }
-
- if (found_active_elem == FALSE)
- {
- found_active_elem = TRUE;
- sock_set->starting_elem = (elem + 1 < sock_set->poll_array_elems) ? elem + 1 : 0;
- }
-
- if (pollfd->revents & POLLNVAL)
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|badhandle",
- "**sock|poll|badhandle %d %d %d %d", pollinfo->sock_set->id, pollinfo->sock_id, pollfd->fd, pollinfo->fd);
- goto fn_exit;
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (pollfd->revents & POLLHUP)
- {
- mpi_errno = MPIDU_Socki_handle_pollhup(pollfd, pollinfo);
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- goto fn_exit;
- }
- }
-
- /* According to Stevens, some errors are reported as normal data
- (POLLIN) and some are reported with POLLERR. */
- if (pollfd->revents & POLLERR)
- {
- mpi_errno = MPIDU_Socki_handle_pollerr(pollfd, pollinfo);
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- goto fn_exit;
- }
- }
- /* --END ERROR HANDLING-- */
-
- if (pollfd->revents & POLLIN)
- {
- if (pollinfo->type == MPIDU_SOCKI_TYPE_COMMUNICATION)
- {
- if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RW ||
- pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RO)
- {
- mpi_errno = MPIDU_Socki_handle_read(pollfd, pollinfo);
- /* --BEGIN ERROR HANDLING-- */
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
- "**sock|poll|unhandledstate %d", pollinfo->state);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- }
- else if (pollinfo->type == MPIDU_SOCKI_TYPE_LISTENER)
- {
- pollfd->events &= ~POLLIN;
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_ACCEPT, 0, pollinfo->user_ptr,
- MPI_SUCCESS, mpi_errno, fn_exit);
- }
- else if ((MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE) && pollinfo->type == MPIDU_SOCKI_TYPE_INTERRUPTER)
- {
- char c[16];
- ssize_t nb;
-
- do
- {
- nb = read(pollfd->fd, c, 16);
- }
- while (nb > 0 || (nb < 0 && errno == EINTR));
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|poll|unhandledtype",
- "**sock|poll|unhandledtype %d", pollinfo->type);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- }
-
- if (pollfd->revents & POLLOUT)
- {
- if (pollinfo->type == MPIDU_SOCKI_TYPE_COMMUNICATION)
- {
- if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RW)
- {
- mpi_errno = MPIDU_Socki_handle_write(pollfd, pollinfo);
- /* --BEGIN ERROR HANDLING-- */
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- }
- else if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTING)
- {
- mpi_errno = MPIDU_Socki_handle_connect(pollfd, pollinfo);
- /* --BEGIN ERROR HANDLING-- */
- if (MPIR_Err_is_fatal(mpi_errno))
- {
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
- "**sock|poll|unhandledstate %d", pollinfo->state);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|poll|unhandledtype",
- "**sock|poll|unhandledtype %d", pollinfo->type);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
- }
-
- n_fds -= 1;
- n_elems -= 1;
- elem = (elem + 1 < sock_set->poll_array_elems) ? elem + 1 : 0;
- }
- }
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_WAIT);
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_handle_pollhup
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_handle_pollhup(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCKI_HANDLE_POLLHUP);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCKI_HANDLE_POLLHUP);
-
- if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RW)
- {
- /*
- * If a write was posted then cancel it and generate an connection closed event. If a read is posted, it will be handled
- * by the POLLIN handler.
- */
- /* --BEGIN ERROR HANDLING-- */
- if (pollfd->events & POLLOUT)
- {
- int event_mpi_errno;
-
- event_mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_CLOSED,
- "**sock|connclosed", "**sock|connclosed %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
- event_mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;
- }
- /* --END ERROR HANDLING-- */
- }
- else if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RO)
- {
- /*
- * If we are in the read-only state, then we should only get an error if we are looking to read data. If we are not
- * reading data, then pollfd->fd should be set to -1 and we should not be getting a POLLHUP event.
- *
- * There may still be data in the socket buffer, so we will let the POLLIN handler deal with the error. Once all of the
- * data has been read, the POLLIN handler will change the connection state and remove the connection from the active poll
- * list.
- */
- MPIU_Assert(pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RO && (pollfd->events & POLLIN) && (pollfd->revents & POLLIN));
- }
- else if (pollinfo->state == MPIDU_SOCKI_STATE_DISCONNECTED)
- {
- /*
- * We should never reach this state because pollfd->fd should be set to -1 if we are in the disconnected state.
- */
- MPIU_Assert(pollinfo->state == MPIDU_SOCKI_STATE_DISCONNECTED && pollfd->fd == -1);
- }
- else if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTING)
- {
- /*
- * The process we were connecting to died. Let the POLLOUT handler deal with the error.
- */
- MPIU_Assert(pollinfo->state == MPIDU_SOCKI_STATE_CONNECTING && (pollfd->events & POLLOUT));
- pollfd->revents = POLLOUT;
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
- "**sock|poll|unhandledstate %d", pollinfo->state);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCKI_HANDLE_POLLHUP);
- return mpi_errno;
-}
-/* end MPIDU_Socki_handle_pollhup() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_handle_pollerr
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_handle_pollerr(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCKI_HANDLE_POLLERR);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCKI_HANDLE_POLLERR);
-
- /* --BEGIN ERROR HANDLING-- */
- if (pollinfo->type != MPIDU_SOCKI_TYPE_COMMUNICATION)
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|poll|unhandledtype",
- "**sock|poll|unhandledtype %d", pollinfo->type);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RW)
- {
- /*
- * Stevens suggests that some older version of UNIX did not properly reset so_error, which could allow POLLERR to be
- * continuously triggered. We remove the socket from the poll list (pollfd->fd = 1) in order to prevent this issue.
- * Here, we simple check that things are as we expect them to be.
- */
- MPIU_Assert((pollfd->events & (POLLIN | POLLOUT)) || pollfd->fd == -1);
-
- /* If a write was posted then cancel it and generate an write completion event */
- if (pollfd->events & POLLOUT)
- {
- int disconnected;
- int os_errno;
- int event_mpi_errno;
-
- MPIDU_SOCKI_GET_SOCKET_ERROR(pollinfo, os_errno, mpi_errno, fn_exit);
-
- event_mpi_errno = MPIDU_Socki_os_to_mpi_errno(pollinfo, os_errno, FCNAME, __LINE__, &disconnected);
- /* --BEGIN ERROR HANDLING-- */
- if (MPIR_Err_is_fatal(event_mpi_errno))
- {
- mpi_errno = event_mpi_errno;
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
- event_mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;
- }
- }
- else if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RO)
- {
- /*
- * If we are in the read-only state, then we should only get an error if we are looking to read data. If we are not
- * reading data, then pollfd->fd should be set to -1 and we should not be getting a POLLERR event.
- *
- * There may still be data in the socket buffer, so we will let the POLLIN handler deal with the error. Once all of the
- * data has been read, the POLLIN handler will change the connection state and remove the connection from the active poll
- * list.
- */
- MPIU_Assert(pollinfo->state == MPIDU_SOCKI_STATE_CONNECTED_RO && (pollfd->events & POLLIN) && (pollfd->revents & POLLIN));
- }
- else if (pollinfo->state == MPIDU_SOCKI_STATE_CONNECTING)
- {
- /*
- * The process we were connecting to died. Let the POLLOUT handler deal with the error.
- */
- MPIU_Assert(pollinfo->state == MPIDU_SOCKI_STATE_CONNECTING && (pollfd->events & POLLOUT));
- pollfd->revents = POLLOUT;
- }
- else if (pollinfo->state == MPIDU_SOCKI_STATE_DISCONNECTED)
- {
- /* We are already disconnected! Why are we handling an error? */
- MPIU_Assert(pollfd->fd == -1);
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|poll|unhandledstate",
- "**sock|poll|unhandledstate %d", pollinfo->state);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCKI_HANDLE_POLLERR);
- return mpi_errno;
-}
-/* end MPIDU_Socki_handle_pollerr() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_handle_read
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_handle_read(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
-{
- ssize_t nb;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_READ);
- MPIDI_STATE_DECL(MPID_STATE_READV);
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCKI_HANDLE_READ);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCKI_HANDLE_READ);
-
- do
- {
- if (pollinfo->read_iov_flag)
- {
- MPIDI_FUNC_ENTER(MPID_STATE_READV);
- nb = MPL_large_readv(pollinfo->fd, pollinfo->read.iov.ptr + pollinfo->read.iov.offset,
- pollinfo->read.iov.count - pollinfo->read.iov.offset);
- MPIDI_FUNC_EXIT(MPID_STATE_READV);
- }
- else
- {
- MPIDI_FUNC_ENTER(MPID_STATE_READ);
- nb = read(pollinfo->fd, pollinfo->read.buf.ptr + pollinfo->read_nb,
- pollinfo->read.buf.max - pollinfo->read_nb);
- MPIDI_FUNC_EXIT(MPID_STATE_READ);
- }
- }
- while (nb < 0 && errno == EINTR);
-
- if (nb > 0)
- {
- int done;
-
- pollinfo->read_nb += nb;
-
- done = pollinfo->read_iov_flag ?
- MPIDU_Socki_adjust_iov(nb, pollinfo->read.iov.ptr, pollinfo->read.iov.count, &pollinfo->read.iov.offset) :
- (pollinfo->read_nb >= pollinfo->read.buf.min);
-
- if (done)
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
- MPI_SUCCESS, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN);
- }
- }
- /* --BEGIN ERROR HANDLING-- */
- else if (nb == 0)
- {
- int event_mpi_errno;
-
- event_mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_CLOSED, "**sock|connclosed",
- "**sock|connclosed %d %d", pollinfo->sock_set->id, pollinfo->sock_id);
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
- event_mpi_errno, mpi_errno, fn_exit);
- }
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
- event_mpi_errno, mpi_errno, fn_exit);
-
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN | POLLOUT);
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
-
- }
- /* --END ERROR HANDLING-- */
- else if (errno == EAGAIN && errno == EWOULDBLOCK)
- {
- /* do nothing... */
- goto fn_exit;
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- int disconnected;
- int event_mpi_errno;
-
- event_mpi_errno = MPIDU_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME, __LINE__, &disconnected);
- if (MPIR_Err_is_fatal(event_mpi_errno))
- {
- /*
- * A serious error occurred. There is no guarantee that the data
- * structures are still intact. Therefore, we avoid
- * modifying them.
- */
- mpi_errno = event_mpi_errno;
- goto fn_exit;
- }
-
- if (disconnected)
- {
- if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
- event_mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- }
-
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
- }
-
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,
- event_mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN);
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCKI_HANDLE_READ);
- return mpi_errno;
-}
-/* end MPIDU_Socki_handle_read() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_handle_write
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_handle_write(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
-{
- ssize_t nb;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_WRITE);
- MPIDI_STATE_DECL(MPID_STATE_WRITEV);
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCKI_HANDLE_WRITE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCKI_HANDLE_WRITE);
-
- do
- {
- if (pollinfo->write_iov_flag)
- {
- MPIDI_FUNC_ENTER(MPID_STATE_WRITEV);
- nb = MPL_large_writev(pollinfo->fd, pollinfo->write.iov.ptr + pollinfo->write.iov.offset,
- pollinfo->write.iov.count - pollinfo->write.iov.offset);
- MPIDI_FUNC_EXIT(MPID_STATE_WRITEV);
- }
- else
- {
- MPIDI_FUNC_ENTER(MPID_STATE_WRITE);
- nb = write(pollinfo->fd, pollinfo->write.buf.ptr + pollinfo->write_nb,
- pollinfo->write.buf.max - pollinfo->write_nb);
- MPIDI_FUNC_EXIT(MPID_STATE_WRITE);
- }
- }
- while (nb < 0 && errno == EINTR);
-
- if (nb >= 0)
- {
- int done;
-
- pollinfo->write_nb += nb;
-
- done = pollinfo->write_iov_flag ?
- MPIDU_Socki_adjust_iov(nb, pollinfo->write.iov.ptr, pollinfo->write.iov.count, &pollinfo->write.iov.offset) :
- (pollinfo->write_nb >= pollinfo->write.buf.min);
-
- if (done)
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
- MPI_SUCCESS, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- }
- }
- else if (errno == EAGAIN || errno == EWOULDBLOCK)
- {
- /* do nothing... */
- goto fn_exit;
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- int disconnected;
- int event_mpi_errno;
-
- event_mpi_errno = MPIDU_Socki_os_to_mpi_errno(pollinfo, errno, FCNAME, __LINE__, &disconnected);
- if (MPIR_Err_is_fatal(event_mpi_errno))
- {
- /*
- * A serious error occurred. There is no guarantee that the data structures are still intact. Therefore, we avoid
- * modifying them.
- */
- mpi_errno = event_mpi_errno;
- goto fn_exit;
- }
-
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,
- event_mpi_errno, mpi_errno, fn_exit);
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
- if (disconnected)
- {
- /*
- * The connection is dead but data may still be in the socket buffer; thus, we change the state and let
- * MPIDU_Sock_wait() clean things up.
- */
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;
- }
- }
- /* --END ERROR HANDLING-- */
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCKI_HANDLE_WRITE);
- return mpi_errno;
-}
-/* end MPIDU_Socki_handle_write() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_handle_connect
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_handle_connect(struct pollfd * const pollfd, struct pollinfo * const pollinfo)
-{
- struct sockaddr_in addr;
- socklen_t addr_len;
- int rc;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCKI_HANDLE_CONNECT);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCKI_HANDLE_CONNECT);
-
- addr_len = sizeof(struct sockaddr_in);
- rc = getpeername(pollfd->fd, (struct sockaddr *) &addr, &addr_len);
- if (rc == 0)
- {
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_CONNECT, 0, pollinfo->user_ptr, MPI_SUCCESS, mpi_errno, fn_exit);
- pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RW;
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- int event_mpi_errno;
-
- MPIDU_SOCKI_GET_SOCKET_ERROR(pollinfo, pollinfo->os_errno, mpi_errno, fn_exit);
- event_mpi_errno = MPIR_Err_create_code(
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_FAILED, "**sock|connfailed",
- "**sock|poll|connfailed %d %d %d %s", pollinfo->sock_set->id, pollinfo->sock_id, pollinfo->os_errno,
- MPIU_Strerror(pollinfo->os_errno));
- MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_CONNECT, 0, pollinfo->user_ptr, event_mpi_errno, mpi_errno, fn_exit);
- pollinfo->state = MPIDU_SOCKI_STATE_DISCONNECTED;
- }
- /* --END ERROR HANDLING-- */
-
- MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLOUT);
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCKI_HANDLE_CONNECT);
- return mpi_errno;
-}
-/* end MPIDU_Socki_handle_connect() */
diff --git a/src/mpid/common/sock/poll/socki_util.i b/src/mpid/common/sock/poll/socki_util.i
deleted file mode 100644
index 20daf56..0000000
--- a/src/mpid/common/sock/poll/socki_util.i
+++ /dev/null
@@ -1,1059 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifdef MPICH_IS_THREADED
-static int MPIDU_Socki_wakeup(struct MPIDU_Sock_set * sock_set);
-int MPIDI_Sock_update_sock_set( struct MPIDU_Sock_set *, int );
-#endif
-
-static int MPIDU_Socki_os_to_mpi_errno(struct pollinfo * pollinfo,
- int os_errno, const char * fcname, int line, int * conn_failed);
-
-static int MPIDU_Socki_adjust_iov(ssize_t nb, MPL_IOV * const iov,
- const int count, int * const offsetp);
-
-static int MPIDU_Socki_sock_alloc(struct MPIDU_Sock_set * sock_set,
- struct MPIDU_Sock ** sockp);
-static void MPIDU_Socki_sock_free(struct MPIDU_Sock * sock);
-
-static int MPIDU_Socki_event_enqueue(struct pollinfo * pollinfo,
- enum MPIDU_Sock_op op,
- MPIU_Size_t num_bytes,
- void * user_ptr, int error);
-static inline int MPIDU_Socki_event_dequeue(struct MPIDU_Sock_set * sock_set,
- int * set_elem,
- struct MPIDU_Sock_event * eventp);
-
-static void MPIDU_Socki_free_eventq_mem(void);
-
-struct MPIDU_Socki_eventq_table
-{
- struct MPIDU_Socki_eventq_elem elems[MPIDU_SOCK_EVENTQ_POOL_SIZE];
- struct MPIDU_Socki_eventq_table * next;
-};
-
-static struct MPIDU_Socki_eventq_table *MPIDU_Socki_eventq_table_head=NULL;
-
-
-
-#define MPIDU_Socki_sock_get_pollfd(sock_) (&(sock_)->sock_set->pollfds[(sock_)->elem])
-#define MPIDU_Socki_sock_get_pollinfo(sock_) (&(sock_)->sock_set->pollinfos[(sock_)->elem])
-#define MPIDU_Socki_pollinfo_get_pollfd(pollinfo_) (&(pollinfo_)->sock_set->pollfds[(pollinfo_)->elem])
-
-
-/* Enqueue a new event. If the enqueue fails, generate an error and jump to
- the fail_label_ */
-#define MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo_, op_, nb_, user_ptr_, event_mpi_errno_, mpi_errno_, fail_label_) \
-{ \
- mpi_errno_ = MPIDU_Socki_event_enqueue((pollinfo_), (op_), (nb_), (user_ptr_), (event_mpi_errno_)); \
- if (mpi_errno_ != MPI_SUCCESS) \
- { \
- mpi_errno_ = MPIR_Err_create_code(mpi_errno, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, \
- "**sock|poll|eqfail", "**sock|poll|eqfail %d %d %d", \
- pollinfo->sock_set->id, pollinfo->sock_id, (op_)); \
- goto fail_label_; \
- } \
-}
-
-/* FIXME: These need to separate the operations from the thread-related
- synchronization to ensure that the code that is independent of
- threads is always the same. Also, the thread-level check needs
- to be identical to all others, and there should be an option,
- possibly embedded within special thread macros, to allow
- runtime control of the thread level */
-
-#ifndef MPICH_IS_THREADED
-# define MPIDU_SOCKI_POLLFD_OP_SET(pollfd_, pollinfo_, op_) \
- { \
- (pollfd_)->events |= (op_); \
- (pollfd_)->fd = (pollinfo_)->fd; \
- }
-# define MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd_, pollinfo_, op_) \
- { \
- (pollfd_)->events &= ~(op_); \
- (pollfd_)->revents &= ~(op_); \
- if (((pollfd_)->events & (POLLIN | POLLOUT)) == 0) \
- { \
- (pollfd_)->fd = -1; \
- } \
- }
-#else /* MPICH_IS_THREADED */
-/* FIXME: Does this need a runtime check on whether threads are in use? */
-# define MPIDU_SOCKI_POLLFD_OP_SET(pollfd_, pollinfo_, op_) \
- { \
- (pollinfo_)->pollfd_events |= (op_); \
- if ((pollinfo_)->sock_set->pollfds_active == NULL) \
- { \
- (pollfd_)->events |= (op_); \
- (pollfd_)->fd = (pollinfo_)->fd; \
- } \
- else \
- { \
- (pollinfo_)->sock_set->pollfds_updated = TRUE; \
- MPIDU_Socki_wakeup((pollinfo_)->sock_set); \
- } \
- }
-# define MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd_, pollinfo_, op_) \
- { \
- (pollinfo_)->pollfd_events &= ~(op_); \
- if ((pollinfo_)->sock_set->pollfds_active == NULL) \
- { \
- (pollfd_)->events &= ~(op_); \
- (pollfd_)->revents &= ~(op_); \
- if (((pollfd_)->events & (POLLIN | POLLOUT)) == 0) \
- { \
- (pollfd_)->fd = -1; \
- } \
- } \
- else \
- { \
- (pollinfo_)->sock_set->pollfds_updated = TRUE; \
- MPIDU_Socki_wakeup((pollinfo_)->sock_set); \
- } \
- }
-#endif
-
-#define MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd_, pollinfo_, op_) ((pollfd_)->events & (op_))
-
-/* FIXME: Low usage operations like this should be a function for
- better readability, modularity, and code size */
-#define MPIDU_SOCKI_GET_SOCKET_ERROR(pollinfo_, os_errno_, mpi_errno_, fail_label_) \
-{ \
- int rc__; \
- socklen_t sz__; \
- \
- sz__ = sizeof(os_errno_); \
- rc__ = getsockopt((pollinfo_)->fd, SOL_SOCKET, SO_ERROR, &(os_errno_), &sz__); \
- if (rc__ != 0) \
- { \
- if (errno == ENOMEM || errno == ENOBUFS) \
- { \
- mpi_errno_ = MPIR_Err_create_code( \
- MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM, "**sock|osnomem", \
- "**sock|osnomem %s %d %d", "getsockopt", pollinfo->sock_set->id, pollinfo->sock_id); \
- } \
- else \
- { \
- mpi_errno = MPIR_Err_create_code( \
- MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**sock|oserror", \
- "**sock|poll|oserror %s %d %d %d %s", "getsockopt", pollinfo->sock_set->id, pollinfo->sock_id, \
- (os_errno_), MPIU_Strerror(os_errno_)); \
- } \
- \
- goto fail_label_; \
- } \
-}
-
-
-/*
- * Validation tests
- */
-/* FIXME: Are these really optional? Based on their definitions, it looks
- like they should only be used when debugging the code. */
-#ifdef USE_SOCK_VERIFY
-#define MPIDU_SOCKI_VERIFY_INIT(mpi_errno_, fail_label_) \
-{ \
- if (MPIDU_Socki_initialized <= 0) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INIT, \
- "**sock|uninit", NULL); \
- goto fail_label_; \
- } \
-}
-
-
-#define MPIDU_SOCKI_VALIDATE_SOCK_SET(sock_set_, mpi_errno_, fail_label_)
-
-
-#define MPIDU_SOCKI_VALIDATE_SOCK(sock_, mpi_errno_, fail_label_) \
-{ \
- struct pollinfo * pollinfo__; \
- \
- if ((sock_) == NULL || (sock_)->sock_set == NULL || (sock_)->elem < 0 || \
- (sock_)->elem >= (sock_)->sock_set->poll_array_elems) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, \
- "**sock|badsock", NULL); \
- goto fail_label_; \
- } \
- \
- pollinfo__ = MPIDU_Socki_sock_get_pollinfo(sock_); \
- \
- if (pollinfo__->type <= MPIDU_SOCKI_TYPE_FIRST || pollinfo__->type >= MPIDU_SOCKI_TYPE_INTERRUPTER || \
- pollinfo__->state <= MPIDU_SOCKI_STATE_FIRST || pollinfo__->state >= MPIDU_SOCKI_STATE_LAST) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, \
- "**sock|badsock", NULL); \
- goto fail_label_; \
- } \
-}
-
-
-#define MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo_, mpi_errno_, fail_label_) \
-{ \
- if ((pollinfo_)->type == MPIDU_SOCKI_TYPE_COMMUNICATION) \
- { \
- if ((pollinfo_)->state == MPIDU_SOCKI_STATE_CONNECTING) \
- { \
- (mpi_errno_) = MPIR_Err_create_code( \
- (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**sock|notconnected", \
- "**sock|notconnected %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- goto fail_label_; \
- } \
- else if ((pollinfo_)->state == MPIDU_SOCKI_STATE_DISCONNECTED) \
- { \
- if ((pollinfo_)->os_errno == 0) \
- { \
- (mpi_errno_) = MPIR_Err_create_code( \
- (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_CLOSED, "**sock|connclosed", \
- "**sock|connclosed %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- } \
- else \
- { \
- (mpi_errno_) = MPIR_Err_create_code( \
- (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_FAILED, "**sock|connfailed", \
- "**sock|poll|connfailed %d %d %d %s", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id, \
- (pollinfo_)->os_errno, MPIU_Strerror((pollinfo_)->os_errno)); \
- } \
- goto fail_label_; \
- } \
- else if ((pollinfo_)->state == MPIDU_SOCKI_STATE_CLOSING) \
- { \
- (mpi_errno_) = MPIR_Err_create_code( \
- (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INPROGRESS, "**sock|closing", \
- "**sock|closing %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- \
- goto fail_label_; \
- } \
- else if ((pollinfo_)->state != MPIDU_SOCKI_STATE_CONNECTED_RW && (pollinfo_)->state != MPIDU_SOCKI_STATE_CONNECTED_RO) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, \
- "**sock|badsock", NULL); \
- goto fail_label_; \
- } \
- } \
- else if ((pollinfo_)->type == MPIDU_SOCKI_TYPE_LISTENER) \
- { \
- (mpi_errno_) = MPIR_Err_create_code( \
- (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**sock|listener_read", \
- "**sock|listener_read %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- \
- goto fail_label_; \
- } \
-}
-
-
-#define MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo_, mpi_errno_, fail_label_) \
-{ \
- if ((pollinfo_)->type == MPIDU_SOCKI_TYPE_COMMUNICATION) \
- { \
- if ((pollinfo_)->state == MPIDU_SOCKI_STATE_CONNECTING) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, \
- "**sock|notconnected", "**sock|notconnected %d %d", \
- (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- goto fail_label_; \
- } \
- else if ((pollinfo_)->state == MPIDU_SOCKI_STATE_DISCONNECTED || (pollinfo_)->state == MPIDU_SOCKI_STATE_CONNECTED_RO) \
- { \
- if ((pollinfo_)->os_errno == 0) \
- { \
- (mpi_errno_) = MPIR_Err_create_code( \
- (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_CLOSED, "**sock|connclosed", \
- "**sock|connclosed %d %d", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- } \
- else \
- { \
- (mpi_errno_) = MPIR_Err_create_code( \
- (mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_CONN_FAILED, "**sock|connfailed", \
- "**sock|poll|connfailed %d %d %d %s", (pollinfo_)->sock_set->id, (pollinfo_)->sock_id, \
- (pollinfo_)->os_errno, MPIU_Strerror((pollinfo_)->os_errno)); \
- } \
- goto fail_label_; \
- } \
- else if ((pollinfo_)->state == MPIDU_SOCKI_STATE_CLOSING) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INPROGRESS, \
- "**sock|closing", "**sock|closing %d %d", \
- (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- \
- goto fail_label_; \
- } \
- else if ((pollinfo_)->state != MPIDU_SOCKI_STATE_CONNECTED_RW) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, \
- "**sock|badsock", NULL); \
- goto fail_label_; \
- } \
- } \
- else if ((pollinfo_)->type == MPIDU_SOCKI_TYPE_LISTENER) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, \
- "**sock|listener_write", "**sock|listener_write %d %d", \
- (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- \
- goto fail_label_; \
- } \
-}
-
-
-#define MPIDU_SOCKI_VALIDATE_FD(pollinfo_, mpi_errno_, fail_label_) \
-{ \
- if ((pollinfo_)->fd < 0) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, \
- "**sock|badhandle", "**sock|poll|badhandle %d %d %d", \
- (pollinfo_)->sock_set->id, (pollinfo_)->sock_id, (pollinfo_)->fd); \
- goto fail_label_; \
- } \
-}
-
-
-#define MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd_, pollinfo_, mpi_errno_, fail_label_) \
-{ \
- if (MPIDU_SOCKI_POLLFD_OP_ISSET((pollfd_), (pollinfo_), POLLIN)) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INPROGRESS, \
- "**sock|reads", "**sock|reads %d %d", \
- (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- goto fail_label_; \
- } \
-}
-
-
-#define MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd_, pollinfo_, mpi_errno_, fail_label_) \
-{ \
- if (MPIDU_SOCKI_POLLFD_OP_ISSET((pollfd_), (pollinfo_), POLLOUT)) \
- { \
- (mpi_errno_) = MPIR_Err_create_code((mpi_errno_), MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_INPROGRESS, \
- "**sock|writes", "**sock|writes %d %d", \
- (pollinfo_)->sock_set->id, (pollinfo_)->sock_id); \
- goto fail_label_; \
- } \
-}
-#else
-/* Use minimal to no checking */
-#define MPIDU_SOCKI_VERIFY_INIT(mpi_errno_,fail_label_)
-#define MPIDU_SOCKI_VALIDATE_SOCK_SET(sock_set_,mpi_errno_,fail_label_)
-#define MPIDU_SOCKI_VALIDATE_SOCK(sock_,mpi_errno_,fail_label_)
-#define MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo_,mpi_errno_,fail_label_)
-#define MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo_,mpi_errno_,fail_label_)
-#define MPIDU_SOCKI_VALIDATE_FD(pollinfo_,mpi_errno_,fail_label_)
-#define MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd_,pollinfo_,mpi_errno,fail_label_)
-#define MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd_,pollinfo_,mpi_errno,fail_label_)
-
-#endif
-
-
-#ifdef MPICH_IS_THREADED
-
-/*
- * MPIDU_Socki_wakeup()
- */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_wakeup
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_wakeup(struct MPIDU_Sock_set * sock_set)
-{
- MPIU_THREAD_CHECK_BEGIN;
- if (sock_set->wakeup_posted == FALSE)
- {
- for(;;)
- {
- int nb;
- char c = 0;
-
- nb = write(sock_set->intr_fds[1], &c, 1);
- if (nb == 1)
- {
- break;
- }
-
- MPIU_Assertp(nb == 0 || errno == EINTR);
- }
-
- sock_set->wakeup_posted = TRUE;
- }
- MPIU_THREAD_CHECK_END;
- return MPIDU_SOCK_SUCCESS;
-}
-/* end MPIDU_Socki_wakeup() */
-
-#undef FUNCNAME
-#define FUNCNAME MPIDI_Sock_update_sock_set
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIDI_Sock_update_sock_set( struct MPIDU_Sock_set *sock_set,
- int pollfds_active_elems )
-{
- int mpi_errno = MPI_SUCCESS;
- int elem;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET);
- for (elem = 0; elem < sock_set->poll_array_elems; elem++) {
- sock_set->pollfds[elem].events = sock_set->pollinfos[elem].pollfd_events;
- if ((sock_set->pollfds[elem].events & (POLLIN | POLLOUT)) != 0) {
- sock_set->pollfds[elem].fd = sock_set->pollinfos[elem].fd;
- }
- else {
- sock_set->pollfds[elem].fd = -1;
- }
-
- if (elem < pollfds_active_elems) {
- if (sock_set->pollfds_active == sock_set->pollfds) {
- sock_set->pollfds[elem].revents &= ~(POLLIN | POLLOUT) | sock_set->pollfds[elem].events;
- }
- else {
- sock_set->pollfds[elem].revents = sock_set->pollfds_active[elem].revents &
- (~(POLLIN | POLLOUT) | sock_set->pollfds[elem].events);
- }
- }
- else {
- sock_set->pollfds[elem].revents = 0;
- }
- }
-
- if (sock_set->pollfds_active != sock_set->pollfds) {
- MPIU_Free(sock_set->pollfds_active);
- }
-
- sock_set->pollfds_updated = FALSE;
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET);
- return mpi_errno;
-
-}
-
-#endif /* (MPICH_IS_THREADED) */
-
-
-/*
- * MPIDU_Socki_os_to_mpi_errno()
- *
- * This routine assumes that no thread can change the state between state check before the nonblocking OS operation and the call
- * to this routine.
- */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_os_to_mpi_errno
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-/* --BEGIN ERROR HANDLING-- */
-static int MPIDU_Socki_os_to_mpi_errno(struct pollinfo * pollinfo, int os_errno, const char * fcname, int line, int * disconnected)
-{
- int mpi_errno;
-
- if (os_errno == ENOMEM || os_errno == ENOBUFS)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDU_SOCK_ERR_NOMEM,
- "**sock|osnomem", "**sock|poll|osnomem %d %d %d %s",
- pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIU_Strerror(os_errno));
- *disconnected = FALSE;
- }
- else if (os_errno == EFAULT || os_errno == EINVAL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDU_SOCK_ERR_BAD_BUF,
- "**sock|badbuf", "**sock|poll|badbuf %d %d %d %s",
- pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIU_Strerror(os_errno));
- *disconnected = FALSE;
- }
- else if (os_errno == EPIPE)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDU_SOCK_ERR_CONN_CLOSED,
- "**sock|connclosed", "**sock|poll|connclosed %d %d %d %s",
- pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIU_Strerror(os_errno));
- *disconnected = TRUE;
- }
- else if (os_errno == ECONNRESET || os_errno == ENOTCONN || os_errno == ETIMEDOUT)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, fcname, line, MPIDU_SOCK_ERR_CONN_FAILED,
- "**sock|connfailed", "**sock|poll|connfailed %d %d %d %s",
- pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIU_Strerror(os_errno));
- pollinfo->os_errno = os_errno;
- *disconnected = TRUE;
- }
- else if (os_errno == EBADF)
- {
- /*
- * If we have a bad file descriptor, then either the sock was bad to
- * start with and we didn't catch it in the preliminary
- * checks, or a sock closure was finalized after the preliminary
- * checks were performed. The latter should not happen if
- * the thread safety code is correctly implemented. In any case,
- * the data structures associated with the sock are no
- * longer valid and should not be modified. We indicate this by
- * returning a fatal error.
- */
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, fcname, line, MPIDU_SOCK_ERR_BAD_SOCK,
- "**sock|badsock", NULL);
- *disconnected = FALSE;
- }
- else
- {
- /*
- * Unexpected OS error.
- *
- * FIXME: technically we should never reach this section of code.
- * What's the right way to handle this situation? Should
- * we print an immediate message asking the user to report the errno
- * so that we can plug the hole?
- */
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, fcname, line, MPIDU_SOCK_ERR_CONN_FAILED,
- "**sock|oserror", "**sock|poll|oserror %d %d %d %s",
- pollinfo->sock_set->id, pollinfo->sock_id, os_errno, MPIU_Strerror(os_errno));
- pollinfo->os_errno = os_errno;
- *disconnected = TRUE;
- }
-
- return mpi_errno;
-}
-/* --END ERROR HANDLING-- */
-/* end MPIDU_Socki_os_to_mpi_errno() */
-
-
-/*
- * MPIDU_Socki_adjust_iov()
- *
- * Use the specified number of bytes (nb) to adjust the iovec and associated
- * values. If the iovec has been consumed, return
- * true; otherwise return false.
- *
- * The input is an iov (MPL_IOV is just an iov) and the offset into which
- * to start (start with entry iov[*offsetp]) and remove nb bytes from the iov.
- * The use of the offsetp term allows use to remove values from the iov without
- * making a copy to shift down elements when only part of the iov is
- * consumed.
- */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_adjust_iov
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_adjust_iov(ssize_t nb, MPL_IOV * const iov, const int count, int * const offsetp)
-{
- int offset = *offsetp;
-
- while (offset < count)
- {
- if (iov[offset].MPL_IOV_LEN <= nb)
- {
- nb -= iov[offset].MPL_IOV_LEN;
- offset++;
- }
- else
- {
- iov[offset].MPL_IOV_BUF = (char *) iov[offset].MPL_IOV_BUF + nb;
- iov[offset].MPL_IOV_LEN -= nb;
- *offsetp = offset;
- return FALSE;
- }
- }
-
- *offsetp = offset;
- return TRUE;
-}
-/* end MPIDU_Socki_adjust_iov() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_sock_alloc
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_sock_alloc(struct MPIDU_Sock_set * sock_set, struct MPIDU_Sock ** sockp)
-{
- struct MPIDU_Sock * sock = NULL;
- int avail_elem;
- struct pollfd * pollfds = NULL;
- struct pollinfo * pollinfos = NULL;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCKI_SOCK_ALLOC);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCKI_SOCK_ALLOC);
-
- /* FIXME: Should this use the CHKPMEM macros (perm malloc)? */
- sock = MPIU_Malloc(sizeof(struct MPIDU_Sock));
- /* --BEGIN ERROR HANDLING-- */
- if (sock == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM, "**nomem", 0);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- /*
- * Check existing poll structures for a free element.
- */
- for (avail_elem = 0; avail_elem < sock_set->poll_array_sz; avail_elem++)
- {
- if (sock_set->pollinfos[avail_elem].sock_id == -1)
- {
- if (avail_elem >= sock_set->poll_array_elems)
- {
- sock_set->poll_array_elems = avail_elem + 1;
- }
-
- break;
- }
- }
-
- /*
- * No free elements were found. Larger pollfd and pollinfo arrays need to
- * be allocated and the existing data transfered over.
- */
- if (avail_elem == sock_set->poll_array_sz)
- {
- int elem;
-
- pollfds = MPIU_Malloc((sock_set->poll_array_sz + MPIDU_SOCK_SET_DEFAULT_SIZE) * sizeof(struct pollfd));
- /* --BEGIN ERROR HANDLING-- */
- if (pollfds == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**nomem", 0);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
- pollinfos = MPIU_Malloc((sock_set->poll_array_sz + MPIDU_SOCK_SET_DEFAULT_SIZE) * sizeof(struct pollinfo));
- /* --BEGIN ERROR HANDLING-- */
- if (pollinfos == NULL)
- {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,
- "**nomem", 0);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
-
- if (sock_set->poll_array_sz > 0)
- {
- /*
- * Copy information from the old arrays and then free them.
- *
- * In the multi-threaded case, the pollfd array can only be copied
- * if another thread is not already blocking in poll()
- * and thus potentially modifying the array. Furthermore, the
- * pollfd array must not be freed if it is the one
- * actively being used by pol().
- */
-# ifndef MPICH_IS_THREADED
- {
- memcpy(pollfds, sock_set->pollfds, sock_set->poll_array_sz * sizeof(struct pollfd));
- MPIU_Free(sock_set->pollfds);
- }
-# else
- {
- if (sock_set->pollfds_active == NULL)
- {
- memcpy(pollfds, sock_set->pollfds, sock_set->poll_array_sz * sizeof(struct pollfd));
- }
- if (sock_set->pollfds_active != sock_set->pollfds)
- {
- MPIU_Free(sock_set->pollfds);
- }
- }
-# endif
-
- memcpy(pollinfos, sock_set->pollinfos, sock_set->poll_array_sz * sizeof(struct pollinfo));
- MPIU_Free(sock_set->pollinfos);
- }
-
- sock_set->poll_array_elems = avail_elem + 1;
- sock_set->poll_array_sz += MPIDU_SOCK_SET_DEFAULT_SIZE;
- sock_set->pollfds = pollfds;
- sock_set->pollinfos = pollinfos;
-
- /*
- * Initialize new elements
- */
- for (elem = avail_elem; elem < sock_set->poll_array_sz; elem++)
- {
- pollfds[elem].fd = -1;
- pollfds[elem].events = 0;
- pollfds[elem].revents = 0;
- }
- for (elem = avail_elem; elem < sock_set->poll_array_sz; elem++)
- {
- pollinfos[elem].fd = -1;
- pollinfos[elem].sock_set = sock_set;
- pollinfos[elem].elem = elem;
- pollinfos[elem].sock = NULL;
- pollinfos[elem].sock_id = -1;
- pollinfos[elem].type = MPIDU_SOCKI_TYPE_FIRST;
- pollinfos[elem].state = MPIDU_SOCKI_STATE_FIRST;
-# ifdef MPICH_IS_THREADED
- {
- pollinfos[elem].pollfd_events = 0;
- }
-# endif
- }
- }
-
- /*
- * Verify that memory hasn't been messed up.
- */
- MPIU_Assert(sock_set->pollinfos[avail_elem].sock_set == sock_set);
- MPIU_Assert(sock_set->pollinfos[avail_elem].elem == avail_elem);
- MPIU_Assert(sock_set->pollinfos[avail_elem].fd == -1);
- MPIU_Assert(sock_set->pollinfos[avail_elem].sock == NULL);
- MPIU_Assert(sock_set->pollinfos[avail_elem].sock_id == -1);
- MPIU_Assert(sock_set->pollinfos[avail_elem].type == MPIDU_SOCKI_TYPE_FIRST);
- MPIU_Assert(sock_set->pollinfos[avail_elem].state == MPIDU_SOCKI_STATE_FIRST);
-# ifdef MPICH_IS_THREADED
- {
- MPIU_Assert(sock_set->pollinfos[avail_elem].pollfd_events == 0);
- }
-# endif
-
- /*
- * Initialize newly allocated sock structure and associated poll structures
- */
- sock_set->pollinfos[avail_elem].sock_id = (sock_set->id << 24) | avail_elem;
- sock_set->pollinfos[avail_elem].sock = sock;
- sock->sock_set = sock_set;
- sock->elem = avail_elem;
-
- sock_set->pollfds[avail_elem].fd = -1;
- sock_set->pollfds[avail_elem].events = 0;
- sock_set->pollfds[avail_elem].revents = 0;
-
-# ifdef MPICH_IS_THREADED
- {
- MPIU_THREAD_CHECK_BEGIN;
- if (sock_set->pollfds_active != NULL)
- {
- sock_set->pollfds_updated = TRUE;
- }
- MPIU_THREAD_CHECK_END;
- }
-# endif
-
- *sockp = sock;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCKI_SOCK_ALLOC);
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
- fn_fail:
- if (pollinfos != NULL)
- {
- MPIU_Free(pollinfos);
- }
-
- if (pollfds != NULL)
- {
- MPIU_Free(pollfds);
- }
-
- if (sock != NULL)
- {
- MPIU_Free(sock);
- }
-
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-/* end MPIDU_Socki_sock_alloc() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_sock_free
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static void MPIDU_Socki_sock_free(struct MPIDU_Sock * sock)
-{
- struct pollfd * pollfd = MPIDU_Socki_sock_get_pollfd(sock);
- struct pollinfo * pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);
- struct MPIDU_Sock_set * sock_set = sock->sock_set;
- MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCKI_SOCK_FREE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCKI_SOCK_FREE);
-
- /* FIXME: We need an abstraction for the thread sync operations */
-# ifdef MPICH_IS_THREADED
- {
- /*
- * Freeing a sock while Sock_wait() is blocked in poll() is not supported
- */
- MPIU_Assert(sock_set->pollfds_active == NULL);
- }
-# endif
-
- /*
- * Compress poll array
- */
- /* FIXME: move last element into current position and update sock associated with last element.
- */
- if (sock->elem + 1 == sock_set->poll_array_elems)
- {
- sock_set->poll_array_elems -= 1;
- if (sock_set->starting_elem >= sock_set->poll_array_elems)
- {
- sock_set->starting_elem = 0;
- }
- }
-
- /*
- * Remove entry from the poll list and mark the entry as free
- */
- pollinfo->fd = -1;
- pollinfo->sock = NULL;
- pollinfo->sock_id = -1;
- pollinfo->type = MPIDU_SOCKI_TYPE_FIRST;
- pollinfo->state = MPIDU_SOCKI_STATE_FIRST;
-# ifdef MPICH_IS_THREADED
- {
- pollinfo->pollfd_events = 0;
- }
-# endif
-
- pollfd->fd = -1;
- pollfd->events = 0;
- pollfd->revents = 0;
-
- /*
- * Mark the sock as invalid so that any future use might be caught
- */
- sock->sock_set = NULL;
- sock->elem = -1;
-
- MPIU_Free(sock);
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCKI_SOCK_FREE);
-}
-/* end MPIDU_Socki_sock_free() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_event_enqueue
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIDU_Socki_event_enqueue(struct pollinfo * pollinfo, MPIDU_Sock_op_t op, MPIU_Size_t num_bytes,
- void * user_ptr, int error)
-{
- struct MPIDU_Sock_set * sock_set = pollinfo->sock_set;
- struct MPIDU_Socki_eventq_elem * eventq_elem;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_SOCKI_EVENT_ENQUEUE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_SOCKI_EVENT_ENQUEUE);
-
- if (MPIDU_Socki_eventq_pool != NULL)
- {
- eventq_elem = MPIDU_Socki_eventq_pool;
- MPIDU_Socki_eventq_pool = MPIDU_Socki_eventq_pool->next;
- }
- else
- {
- int i;
- struct MPIDU_Socki_eventq_table *eventq_table;
-
- eventq_table = MPIU_Malloc(sizeof(struct MPIDU_Socki_eventq_table));
- /* --BEGIN ERROR HANDLING-- */
- if (eventq_table == NULL)
- {
- mpi_errno = MPIR_Err_create_code(errno, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER,
- "**sock|poll|eqmalloc", 0);
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- eventq_elem = eventq_table->elems;
-
- eventq_table->next = MPIDU_Socki_eventq_table_head;
- MPIDU_Socki_eventq_table_head = eventq_table;
-
- if (MPIDU_SOCK_EVENTQ_POOL_SIZE > 1)
- {
- MPIDU_Socki_eventq_pool = &eventq_elem[1];
- for (i = 0; i < MPIDU_SOCK_EVENTQ_POOL_SIZE - 2; i++)
- {
- MPIDU_Socki_eventq_pool[i].next = &MPIDU_Socki_eventq_pool[i+1];
- }
- MPIDU_Socki_eventq_pool[MPIDU_SOCK_EVENTQ_POOL_SIZE - 2].next = NULL;
- }
- }
-
- eventq_elem->event.op_type = op;
- eventq_elem->event.num_bytes = num_bytes;
- eventq_elem->event.user_ptr = user_ptr;
- eventq_elem->event.error = error;
- eventq_elem->set_elem = pollinfo->elem;
- eventq_elem->next = NULL;
-
- if (sock_set->eventq_head == NULL)
- {
- sock_set->eventq_head = eventq_elem;
- }
- else
- {
- sock_set->eventq_tail->next = eventq_elem;
- }
- sock_set->eventq_tail = eventq_elem;
-fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_SOCKI_EVENT_ENQUEUE);
- return mpi_errno;
-}
-/* end MPIDU_Socki_event_enqueue() */
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_event_dequeue
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIDU_Socki_event_dequeue(struct MPIDU_Sock_set * sock_set, int * set_elem, struct MPIDU_Sock_event * eventp)
-{
- struct MPIDU_Socki_eventq_elem * eventq_elem;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_SOCKI_EVENT_DEQUEUE);
-
- MPIDI_FUNC_ENTER(MPID_STATE_SOCKI_EVENT_DEQUEUE);
-
- if (sock_set->eventq_head != NULL)
- {
- eventq_elem = sock_set->eventq_head;
-
- sock_set->eventq_head = eventq_elem->next;
- if (eventq_elem->next == NULL)
- {
- sock_set->eventq_tail = NULL;
- }
-
- *eventp = eventq_elem->event;
- *set_elem = eventq_elem->set_elem;
-
- eventq_elem->next = MPIDU_Socki_eventq_pool;
- MPIDU_Socki_eventq_pool = eventq_elem;
- }
- /* --BEGIN ERROR HANDLING-- */
- else
- {
- /* FIXME: Shouldn't this be an mpi error code? */
- mpi_errno = MPIDU_SOCK_ERR_FAIL;
- }
- /* --END ERROR HANDLING-- */
-
- MPIDI_FUNC_EXIT(MPID_STATE_SOCKI_EVENT_DEQUEUE);
- return mpi_errno;
-}
-/* end MPIDU_Socki_event_dequeue() */
-
-
-/* FIXME: Who allocates eventq tables? Should there be a check that these
- tables are empty first? */
-#undef FUNCNAME
-#define FUNCNAME MPIDU_Socki_free_eventq_mem
-#undef FCNAME
-#define FCNAME "MPIDU_Socki_free_eventq_mem"
-static void MPIDU_Socki_free_eventq_mem(void)
-{
- struct MPIDU_Socki_eventq_table *eventq_table, *eventq_table_next;
- MPIDI_STATE_DECL(MPID_STATE_SOCKI_FREE_EVENTQ_MEM);
-
- MPIDI_FUNC_ENTER(MPID_STATE_SOCKI_FREE_EVENTQ_MEM);
-
- eventq_table = MPIDU_Socki_eventq_table_head;
- while (eventq_table) {
- eventq_table_next = eventq_table->next;
- MPIU_Free(eventq_table);
- eventq_table = eventq_table_next;
- }
- MPIDU_Socki_eventq_table_head = NULL;
-
- MPIDI_FUNC_EXIT(MPID_STATE_SOCKI_FREE_EVENTQ_MEM);
-}
-
-/* Provide a standard mechanism for setting the socket buffer size.
- The value is -1 if the default size hasn't been set, 0 if no size
- should be set, and > 0 if that size should be used */
-static int sockBufSize = -1;
-
-/* Set the socket buffer sizes on fd to the standard values (this is controlled
- by the parameter MPICH_SOCK_BUFSIZE). If "firm" is true, require that the
- sockets actually accept that buffer size. */
-int MPIDU_Sock_SetSockBufferSize( int fd, int firm )
-{
- int mpi_errno = MPI_SUCCESS;
- int rc;
-
- /* Get the socket buffer size if we haven't yet acquired it */
- if (sockBufSize < 0) {
- /* FIXME: Is this the name that we want to use (this was chosen
- to match the original, undocumented name) */
- rc = MPL_env2int( "MPICH_SOCKET_BUFFER_SIZE", &sockBufSize );
- if (rc <= 0) {
- sockBufSize = 0;
- }
- MPIU_DBG_MSG_D(CH3_CONNECT,TYPICAL,"Sock buf size = %d",sockBufSize);
- }
-
- if (sockBufSize > 0) {
- int bufsz;
- socklen_t bufsz_len;
-
- bufsz = sockBufSize;
- bufsz_len = sizeof(bufsz);
- rc = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsz, bufsz_len);
- if (rc == -1) {
- MPIR_ERR_SETANDJUMP3(mpi_errno,MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|setsndbufsz",
- "**sock|poll|setsndbufsz %d %d %s",
- bufsz, errno, MPIU_Strerror(errno));
- }
- bufsz = sockBufSize;
- bufsz_len = sizeof(bufsz);
- rc = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsz, bufsz_len);
- if (rc == -1) {
- MPIR_ERR_SETANDJUMP3(mpi_errno,MPIDU_SOCK_ERR_FAIL,
- "**sock|poll|setrcvbufsz",
- "**sock|poll|setrcvbufsz %d %d %s",
- bufsz, errno, MPIU_Strerror(errno));
- }
- bufsz_len = sizeof(bufsz);
-
- if (firm) {
- rc = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsz, &bufsz_len);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == 0) {
- if (bufsz < sockBufSize * 0.9) {
- MPL_msg_printf("WARNING: send socket buffer size differs from requested size (requested=%d, actual=%d)\n",
- sockBufSize, bufsz);
- }
- }
- /* --END ERROR HANDLING-- */
-
- bufsz_len = sizeof(bufsz);
- rc = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsz, &bufsz_len);
- /* --BEGIN ERROR HANDLING-- */
- if (rc == 0) {
- if (bufsz < sockBufSize * 0.9) {
- MPL_msg_printf("WARNING: receive socket buffer size differs from requested size (requested=%d, actual=%d)\n",
- sockBufSize, bufsz);
- }
- }
- /* --END ERROR HANDLING-- */
- }
- }
- fn_fail:
- return mpi_errno;
-}
-
-/* This routine provides a string version of the address. */
-int MPIDU_Sock_AddrToStr( MPIDU_Sock_ifaddr_t *ifaddr, char *str, int maxlen )
-{
- int i;
- unsigned char *p = ifaddr->ifaddr;
- for (i=0; i<ifaddr->len && maxlen > 4; i++) {
- snprintf( str, maxlen, "%.3d.", *p++ );
- str += 4;
- maxlen -= 4;
- }
- /* Change the last period to a null; but be careful in case len was zero */
- if (i > 0) *--str = 0;
- else *str = 0;
- return 0;
-}
diff --git a/src/mpid/common/sock/poll/subconfigure.m4 b/src/mpid/common/sock/poll/subconfigure.m4
deleted file mode 100644
index 3617d3b..0000000
--- a/src/mpid/common/sock/poll/subconfigure.m4
+++ /dev/null
@@ -1,138 +0,0 @@
-[#] start of __file__
-dnl MPICH_SUBCFG_AFTER=src/mpid/common/sock
-
-AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
- AM_CONDITIONAL([BUILD_MPID_COMMON_SOCK_POLL],[test "X$build_mpid_common_sock_poll" = "Xyes"])
-])
-
-dnl _BODY handles the former role of configure in the subsystem
-AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
-AM_COND_IF([BUILD_MPID_COMMON_SOCK_POLL],[
-AC_MSG_NOTICE([RUNNING CONFIGURE FOR src/mpid/common/sock/poll])
-
-AC_ARG_ENABLE([sock-debug],
- [--enable-sock-debug - Turn on tests of the socket data structures],
- [],
- [enable_sock_debug=no])
-
-if test "$enable_sock_debug" = yes ; then
- AC_DEFINE(USE_SOCK_VERIFY,1,[Define it the socket verify macros should be enabled])
-fi
-
-AC_CHECK_FUNC([poll],[pac_cv_have_func_poll=yes],[pac_cv_have_func_poll=no])
-if test "X$pac_cv_have_func_poll" = "Xno" ; then
- if test -f /sw/include/sys/poll.h ; then
- dnl This is for Mac OSX (Darwin) which doesn't have a poll function is
- dnl the standard libraries. Instead we use a contributed library found
- dnl off in la la land (/sw).
- dnl
- dnl I don't think the above comment is true for modern Darwin (goodell@ 2010-06-01)
- CFLAGS="$CFLAGS -I/sw/include"
- LIBS="$LIBS -L/sw/lib -lpoll"
- else
- AC_MSG_ERROR([This device requires the poll function])
- fi
-fi
-
-AC_CHECK_HEADERS([assert.h errno.h fcntl.h limits.h netdb.h netinet/in.h netinet/tcp.h])
-AC_CHECK_HEADERS([poll.h stdlib.h sys/param.h sys/poll.h sys/types.h sys/uio.h unistd.h])
-
-AC_MSG_CHECKING([if struct poll is defined]);
-AC_TRY_COMPILE([
-#if defined(HAVE_POLL_H)
-#include <poll.h>
-#endif
-#if defined(HAVE_SYS_POLL_H)
-#include <sys/poll.h>
-#endif
-],[
-struct pollfd pollfd;
-pollfd.fd = -1;
-],[
-AC_MSG_RESULT([yes])
-],[
-AC_MSG_RESULT([no])
-AC_MSG_ERROR([This device requires the poll function])
-])
-
-AC_MSG_CHECKING([if a simple program using poll() can be compiled]);
-AC_TRY_COMPILE([
-#if defined(HAVE_POLL_H)
-#include <poll.h>
-#endif
-#if defined(HAVE_SYS_POLL_H)
-#include <sys/poll.h>
-#endif
-],[
-struct pollfd pollfds[2];
-int n_fds;
-pollfds[0].fd = -1;
-pollfds[1].fd = -1;
-n_fds = poll(pollfds, 2, -1);
-],[
-AC_MSG_RESULT([yes])
-],[
-AC_MSG_RESULT([no])
-AC_MSG_ERROR([This device requires the poll function])
-])
-
-dnl
-dnl needed on AIX
-dnl
-AC_MSG_CHECKING([whether bit fields work in ip.h]);
-AC_TRY_COMPILE([
-#include <netinet/tcp.h>
-],[
-int i;
-],[
-AC_MSG_RESULT([yes])
-bit_fields=yes
-],[
-AC_MSG_RESULT([no])
-bit_fields=no
-])
-if test "$bit_fields" = "no" ; then
- AC_MSG_RESULT([Adding -D_NO_BITFIELDS to CFLAGS])
- CFLAGS="$CFLAGS -D_NO_BITFIELDS"
-fi
-
-
-AC_CHECK_FUNCS([gethostname])
-if test "$ac_cv_func_gethostname" = "yes" ; then
- # Do we need to declare gethostname?
- PAC_FUNC_NEEDS_DECL([#include <unistd.h>],gethostname)
-fi
-
-AC_SEARCH_LIBS([socket],[socket])
-AC_SEARCH_LIBS([gethostbyname],[nsl])
-
-# Check first for sys/socket.h . We check not only for existence but whether
-# it can be compiled (!), as we have seen some problems with this.
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
-],[int a;],ac_cv_header_sys_socket_h=yes,ac_cv_header_sys_socket_h=no)
-if test "$ac_cv_header_sys_socket_h" = yes ; then
- AC_DEFINE(HAVE_SYS_SOCKET_H,1,[Define if you have the <sys/socket.h> header file.])
-fi
-# Check for socklen_t . If undefined, define it as int
-# (note the conditional inclusion of sys/socket.h)
-AC_CACHE_CHECK([whether socklen_t is defined (in sys/socket.h if present)],
-pac_cv_have_socklen_t,[
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-typedef struct { double a; int b; } socklen_t;],
-[socklen_t a;a.a=1.0;],
-[pac_cv_have_socklen_t=no],
-[pac_cv_have_socklen_t=yes])])
-if test "X$pac_cv_have_socklen_t" = Xno ; then
- AC_DEFINE([socklen_t],[int],[Define if socklen_t is not defined])
-fi
-
-])dnl end AM_COND_IF(BUILD_MPID_COMMON_SOCK_POLL,...)
-])dnl end _BODY
-dnl
-[#] end of __file__
diff --git a/src/mpid/common/sock/subconfigure.m4 b/src/mpid/common/sock/subconfigure.m4
deleted file mode 100644
index 1013d9a..0000000
--- a/src/mpid/common/sock/subconfigure.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-[#] start of __file__
-
-AC_DEFUN([PAC_SUBCFG_PREREQ_src_mpid_common_sock],[
- AM_CONDITIONAL([BUILD_MPID_COMMON_SOCK],[test "X$build_mpid_common_sock" = "Xyes"])
- AM_COND_IF([BUILD_MPID_COMMON_SOCK],[
- # we unconditionally enable the "poll" implementation because we don't
- # use this build system on windows right now
- build_mpid_common_sock_poll=yes
- ])
-])
-
-dnl _BODY handles the former role of configure in the subsystem
-AC_DEFUN([PAC_SUBCFG_BODY_src_mpid_common_sock],[
-AM_COND_IF([BUILD_MPID_COMMON_SOCK],[
-AC_MSG_NOTICE([RUNNING CONFIGURE FOR src/mpid/common/sock])
-
-# Adding this prevents the pesky "(strerror() not found)" problem, which can be
-# very frustrating in the sock code, the most likely to receive an error code
-# from the system. [goodell@ 2008-01-10]
-AC_CHECK_FUNCS([strerror])
-
-])dnl end AM_COND_IF(BUILD_MPID_COMMON_SOCK,...)
-])dnl end _BODY
-dnl
-[#] end of __file__
diff --git a/src/mpid/common/thread/.state-cache b/src/mpid/common/thread/.state-cache
index 339be6e..50c188f 100644
--- a/src/mpid/common/thread/.state-cache
+++ b/src/mpid/common/thread/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="mpidu_thread_fallback.h" info="1447123141"/>
+<file name="mpidu_thread_fallback.h" info="1478973152"/>
</dir>
<data>
<fileinfo name="mpidu_thread_fallback.h">
diff --git a/src/mpid/common/thread/mpidu_thread_fallback.h b/src/mpid/common/thread/mpidu_thread_fallback.h
index b7e65ca..b89c242 100644
--- a/src/mpid/common/thread/mpidu_thread_fallback.h
+++ b/src/mpid/common/thread/mpidu_thread_fallback.h
@@ -7,7 +7,7 @@
#if !defined(MPIDU_THREAD_H_INCLUDED)
#define MPIDU_THREAD_H_INCLUDED
-#include "mpiutil.h"
+#include "opa_primitives.h"
/* some important critical section names:
* GLOBAL - entered/exited at beginning/end of (nearly) every MPI_ function
@@ -58,31 +58,137 @@ g * MPI_FINALIZED, MPI_GET_COUNT, MPI_GET_ELEMENTS, MPI_GRAPH_GET,
* state. Such situations should be avoided where possible.
*/
-typedef MPIU_Thread_mutex_t MPIDU_Thread_mutex_t;
-typedef MPIU_Thread_cond_t MPIDU_Thread_cond_t;
-typedef MPIU_Thread_id_t MPIDU_Thread_id_t;
-typedef MPIU_Thread_tls_t MPIDU_Thread_tls_t;
-typedef MPIU_Thread_func_t MPIDU_Thread_func_t;
+typedef struct {
+ MPL_thread_mutex_t mutex;
+ OPA_int_t num_queued_threads;
+} MPIDU_Thread_mutex_t;
-/*M MPIU_THREAD_CS_ENTER - Enter a named critical section
+typedef MPL_thread_cond_t MPIDU_Thread_cond_t;
+typedef MPL_thread_id_t MPIDU_Thread_id_t;
+typedef MPL_thread_tls_t MPIDU_Thread_tls_t;
+typedef MPL_thread_func_t MPIDU_Thread_func_t;
+
+/*M MPIDU_THREAD_CS_ENTER - Enter a named critical section
Input Parameters:
+ _name - name of the critical section
- _context - A context (typically an object) of the critical section
M*/
-#define MPIDU_THREAD_CS_ENTER MPIU_THREAD_CS_ENTER
-
-/*M MPIU_THREAD_CS_EXIT - Exit a named critical section
+#define MPIDU_THREAD_CS_ENTER(name, mutex) MPIDUI_THREAD_CS_ENTER_##name(mutex)
+
+#if defined(MPICH_IS_THREADED)
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL
+
+#define MPIDUI_THREAD_CS_ENTER_GLOBAL(mutex) \
+ do { \
+ if (MPIR_ThreadInfo.isThreaded) { \
+ int rec_err_ = 0; \
+ MPIR_Per_thread_t *per_thread = NULL; \
+ \
+ MPL_DBG_MSG(MPIR_DBG_THREAD, TYPICAL, "recursive locking GLOBAL mutex"); \
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key, \
+ MPIR_Per_thread, per_thread, &rec_err_); \
+ MPIR_Assert(rec_err_ == 0); \
+ \
+ if (per_thread->lock_depth == 0) { \
+ int err_ = 0; \
+ MPIDU_Thread_mutex_lock(&mutex, &err_); \
+ MPIR_Assert(err_ == 0); \
+ } \
+ per_thread->lock_depth++; \
+ } \
+ } while (0)
+#define MPIDUI_THREAD_CS_ENTER_POBJ(mutex) do {} while (0)
+
+#else /* MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_POBJ */
+
+#define MPIDUI_THREAD_CS_ENTER_POBJ(mutex) \
+ do { \
+ if (MPIR_ThreadInfo.isThreaded) { \
+ int err_ = 0; \
+ MPL_DBG_MSG(MPIR_DBG_THREAD, TYPICAL, "non-recursive locking POBJ mutex"); \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,VERBOSE,"enter MPIDU_Thread_mutex_lock %p", &mutex); \
+ MPIDU_Thread_mutex_lock(&mutex, &err_); \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,VERBOSE,"exit MPIDU_Thread_mutex_lock %p", &mutex); \
+ MPIR_Assert(err_ == 0); \
+ } \
+ } while (0)
+#define MPIDUI_THREAD_CS_ENTER_GLOBAL(mutex) do {} while (0)
+
+#endif /* MPICH_THREAD_GRANULARITY */
+
+#else /* !defined(MPICH_IS_THREADED) */
+
+#define MPIDUI_THREAD_CS_ENTER_GLOBAL(mutex) do {} while (0)
+#define MPIDUI_THREAD_CS_ENTER_POBJ(mutex) do {} while (0)
+
+#endif /* MPICH_IS_THREADED */
+
+
+/*M MPIDU_THREAD_CS_EXIT - Exit a named critical section
Input Parameters:
+ _name - cname of the critical section
- _context - A context (typically an object) of the critical section
M*/
-#define MPIDU_THREAD_CS_EXIT MPIU_THREAD_CS_EXIT
-
-/*M MPIU_THREAD_CS_YIELD - Temporarily release a critical section and yield
+#define MPIDU_THREAD_CS_EXIT(name, mutex) MPIDUI_THREAD_CS_EXIT_##name(mutex)
+
+#if defined(MPICH_IS_THREADED)
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL
+
+#define MPIDUI_THREAD_CS_EXIT_GLOBAL(mutex) \
+ do { \
+ if (MPIR_ThreadInfo.isThreaded) { \
+ int rec_err_ = 0; \
+ MPIR_Per_thread_t *per_thread = NULL; \
+ \
+ MPL_DBG_MSG(MPIR_DBG_THREAD, TYPICAL, "recursive unlocking GLOBAL mutex"); \
+ MPIR_Assert(rec_err_ == 0); \
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key, \
+ MPIR_Per_thread, per_thread, &rec_err_); \
+ MPIR_Assert(rec_err_ == 0); \
+ \
+ if (per_thread->lock_depth == 1) { \
+ int err_ = 0; \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,VERBOSE,"MPIDU_Thread_mutex_unlock %p", &mutex); \
+ MPIDU_Thread_mutex_unlock(&mutex, &err_); \
+ MPIR_Assert(err_ == 0); \
+ } \
+ per_thread->lock_depth--; \
+ } \
+ } while (0)
+
+#define MPIDUI_THREAD_CS_EXIT_POBJ(mutex) do {} while (0)
+
+#else /* MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_POBJ */
+
+#define MPIDUI_THREAD_CS_EXIT_POBJ(mutex) \
+ do { \
+ if (MPIR_ThreadInfo.isThreaded) { \
+ int err_ = 0; \
+ MPL_DBG_MSG(MPIR_DBG_THREAD, TYPICAL, "non-recursive unlocking POBJ mutex"); \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,VERBOSE,"MPIDU_Thread_mutex_unlock %p", &mutex); \
+ MPIDU_Thread_mutex_unlock(&mutex, &err_); \
+ MPIR_Assert(err_ == 0); \
+ } \
+ } while (0)
+#define MPIDUI_THREAD_CS_EXIT_GLOBAL(mutex) do {} while (0)
+
+#endif /* MPICH_THREAD_GRANULARITY */
+
+#else /* !defined(MPICH_IS_THREADED) */
+
+#define MPIDUI_THREAD_CS_EXIT_GLOBAL(mutex) do {} while (0)
+#define MPIDUI_THREAD_CS_EXIT_POBJ(mutex) do {} while (0)
+
+#endif /* MPICH_IS_THREADED */
+
+
+/*M MPIDU_THREAD_CS_YIELD - Temporarily release a critical section and yield
to other threads
Input Parameters:
@@ -90,10 +196,49 @@ M*/
- _context - A context (typically an object) of the critical section
M*/
-#define MPIDU_THREAD_CS_YIELD MPIU_THREAD_CS_YIELD
+#define MPIDU_THREAD_CS_YIELD(name, mutex) MPIDUI_THREAD_CS_YIELD_##name(mutex)
+
+#if defined(MPICH_IS_THREADED)
+
+#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__GLOBAL
+
+#define MPIDUI_THREAD_CS_YIELD_GLOBAL(mutex) \
+ do { \
+ if (MPIR_ThreadInfo.isThreaded) { \
+ int err_ = 0; \
+ MPL_DBG_MSG(MPIR_DBG_THREAD, TYPICAL, "non-recursive yielding GLOBAL mutex"); \
+ MPL_DBG_MSG(MPIR_DBG_THREAD,VERBOSE,"enter MPIDU_Thread_yield"); \
+ MPIDU_Thread_yield(&mutex, &err_); \
+ MPL_DBG_MSG(MPIR_DBG_THREAD,VERBOSE,"exit MPIDU_Thread_yield"); \
+ MPIR_Assert(err_ == 0); \
+ } \
+ } while (0)
+#define MPIDUI_THREAD_CS_YIELD_POBJ(mutex) do {} while (0)
+
+#else /* MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_POBJ */
+
+#define MPIDUI_THREAD_CS_YIELD_POBJ(mutex) \
+ do { \
+ if (MPIR_ThreadInfo.isThreaded) { \
+ int err_ = 0; \
+ MPL_DBG_MSG(MPIR_DBG_THREAD, TYPICAL, "non-recursive yielding POBJ mutex"); \
+ MPIDU_Thread_yield(&mutex, &err_); \
+ MPIR_Assert(err_ == 0); \
+ } \
+ } while (0)
+#define MPIDUI_THREAD_CS_YIELD_GLOBAL(mutex) do {} while (0)
+
+#endif /* MPICH_THREAD_GRANULARITY */
+
+#else /* !defined(MPICH_IS_THREADED) */
+
+#define MPIDUI_THREAD_CS_YIELD_GLOBAL(mutex) do {} while (0)
+#define MPIDUI_THREAD_CS_YIELD_POBJ(mutex) do {} while (0)
+
+#endif /* MPICH_IS_THREADED */
+
+
-#define MPIDU_THREAD_CHECK_BEGIN MPIU_THREAD_CHECK_BEGIN
-#define MPIDU_THREAD_CHECK_END MPIU_THREAD_CHECK_END
/*@
MPIDU_Thread_create - create a new thread
@@ -110,12 +255,16 @@ M*/
The thread is created in a detach state, meaning that is may not be waited upon. If another thread needs to wait for this
thread to complete, the threads must provide their own synchronization mechanism.
@*/
-#define MPIDU_Thread_create MPIU_Thread_create
+#define MPIDU_Thread_create(func_, data_, id_, err_ptr_) \
+ do { \
+ MPL_thread_create(func_, data_, id_, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ } while (0)
/*@
MPIDU_Thread_exit - exit from the current thread
@*/
-#define MPIDU_Thread_exit MPIU_Thread_exit
+#define MPIDU_Thread_exit MPL_thread_exit
/*@
MPIDU_Thread_self - get the identifier of the current thread
@@ -123,7 +272,7 @@ M*/
Output Parameter:
. id - identifier of current thread
@*/
-#define MPIDU_Thread_self MPIU_Thread_self
+#define MPIDU_Thread_self MPL_thread_self
/*@
MPIDU_Thread_same - compare two threads identifiers to see if refer to the same thread
@@ -135,12 +284,21 @@ M*/
Output Parameter:
. same - TRUE if the two threads identifiers refer to the same thread; FALSE otherwise
@*/
-#define MPIDU_Thread_same MPIU_Thread_same
+#define MPIDU_Thread_same MPL_thread_same
/*@
MPIDU_Thread_yield - voluntarily relinquish the CPU, giving other threads an opportunity to run
@*/
-#define MPIDU_Thread_same MPIU_Thread_same
+#define MPIDU_Thread_yield(mutex_ptr_, err_ptr_) \
+ do { \
+ if (OPA_load_int(&(mutex_ptr_)->num_queued_threads) == 0) \
+ break; \
+ MPIDU_Thread_mutex_unlock(mutex_ptr_, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ MPL_thread_yield(); \
+ MPIDU_Thread_mutex_lock(mutex_ptr_, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ } while (0)
/*
* Mutexes
@@ -153,7 +311,13 @@ M*/
+ mutex - mutex
- err - error code (non-zero indicates an error has occurred)
@*/
-#define MPIDU_Thread_mutex_create MPIU_Thread_mutex_create
+#define MPIDU_Thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ OPA_store_int(&(mutex_ptr_)->num_queued_threads, 0); \
+ MPL_thread_mutex_create(&(mutex_ptr_)->mutex, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,TYPICAL,"Created MPL_thread_mutex %p", (mutex_ptr_)); \
+ } while (0)
/*@
MPIDU_Thread_mutex_destroy - destroy an existing mutex
@@ -164,7 +328,12 @@ M*/
Output Parameter:
. err - location to store the error code; pointer may be NULL; error is zero for success, non-zero if a failure occurred
@*/
-#define MPIDU_Thread_mutex_destroy MPIU_Thread_mutex_destroy
+#define MPIDU_Thread_mutex_destroy(mutex_ptr_, err_ptr_) \
+ do { \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,TYPICAL,"About to destroy MPL_thread_mutex %p", (mutex_ptr_)); \
+ MPL_thread_mutex_destroy(&(mutex_ptr_)->mutex, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ } while (0)
/*@
MPIDU_Thread_lock - acquire a mutex
@@ -172,7 +341,15 @@ M*/
Input Parameter:
. mutex - mutex
@*/
-#define MPIDU_Thread_mutex_lock MPIU_Thread_mutex_lock
+#define MPIDU_Thread_mutex_lock(mutex_ptr_, err_ptr_) \
+ do { \
+ OPA_incr_int(&(mutex_ptr_)->num_queued_threads); \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,VERBOSE,"enter MPL_thread_mutex_lock %p", &(mutex_ptr_)->mutex); \
+ MPL_thread_mutex_lock(&(mutex_ptr_)->mutex, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,VERBOSE,"exit MPL_thread_mutex_lock %p", &(mutex_ptr_)->mutex); \
+ OPA_decr_int(&(mutex_ptr_)->num_queued_threads); \
+ } while (0)
/*@
MPIDU_Thread_unlock - release a mutex
@@ -180,7 +357,11 @@ M*/
Input Parameter:
. mutex - mutex
@*/
-#define MPIDU_Thread_mutex_unlock MPIU_Thread_mutex_unlock
+#define MPIDU_Thread_mutex_unlock(mutex_ptr_, err_ptr_) \
+ do { \
+ MPL_thread_mutex_unlock(&(mutex_ptr_)->mutex, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ } while (0)
/*
* Condition Variables
@@ -193,7 +374,12 @@ M*/
+ cond - condition variable
- err - location to store the error code; pointer may be NULL; error is zero for success, non-zero if a failure occurred
@*/
-#define MPIDU_Thread_cond_create MPIU_Thread_cond_create
+#define MPIDU_Thread_cond_create(cond_ptr_, err_ptr_) \
+ do { \
+ MPL_thread_cond_create(cond_ptr_, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,TYPICAL,"Created MPL_thread_cond %p", (cond_ptr_)); \
+ } while (0)
/*@
MPIDU_Thread_cond_destroy - destroy an existinga condition variable
@@ -205,7 +391,12 @@ M*/
. err - location to store the error code; pointer may be NULL; error is zero
for success, non-zero if a failure occurred
@*/
-#define MPIDU_Thread_cond_destroy MPIU_Thread_cond_destroy
+#define MPIDU_Thread_cond_destroy(cond_ptr_, err_ptr_) \
+ do { \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,TYPICAL,"About to destroy MPL_thread_cond %p", (cond_ptr_)); \
+ MPL_thread_cond_destroy(cond_ptr_, err_ptr_); \
+ MPIR_Assert(*err_ptr_ == 0); \
+ } while (0)
/*@
MPIDU_Thread_cond_wait - wait (block) on a condition variable
@@ -221,7 +412,16 @@ M*/
has changed in a way that warrants letting the
thread proceed.
@*/
-#define MPIDU_Thread_cond_wait MPIU_Thread_cond_wait
+#define MPIDU_Thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
+ do { \
+ OPA_incr_int(&(mutex_ptr_)->num_queued_threads); \
+ MPL_DBG_MSG_FMT(MPIR_DBG_THREAD,TYPICAL,(MPL_DBG_FDEST,"Enter cond_wait on cond=%p mutex=%p",(cond_ptr_),&(mutex_ptr_)->mutex)); \
+ MPL_thread_cond_wait(cond_ptr_, &(mutex_ptr_)->mutex, err_ptr_); \
+ MPIR_Assert_fmt_msg(*((int *) err_ptr_) == 0, \
+ ("cond_wait failed, err=%d (%s)", *((int *) err_ptr_), strerror(*((int *) err_ptr_)))); \
+ MPL_DBG_MSG_FMT(MPIR_DBG_THREAD,TYPICAL,(MPL_DBG_FDEST,"Exit cond_wait on cond=%p mutex=%p",(cond_ptr_),&(mutex_ptr_)->mutex)); \
+ OPA_decr_int(&(mutex_ptr_)->num_queued_threads); \
+ } while (0)
/*@
MPIDU_Thread_cond_broadcast - release all threads currently waiting on a condition variable
@@ -229,7 +429,13 @@ M*/
Input Parameter:
. cond - condition variable
@*/
-#define MPIDU_Thread_cond_broadcast MPIU_Thread_cond_broadcast
+#define MPIDU_Thread_cond_broadcast(cond_ptr_, err_ptr_) \
+ do { \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,TYPICAL,"About to cond_broadcast on MPL_thread_cond %p", (cond_ptr_)); \
+ MPL_thread_cond_broadcast(cond_ptr_, err_ptr_); \
+ MPIR_Assert_fmt_msg(*((int *) err_ptr_) == 0, \
+ ("cond_broadcast failed, err=%d (%s)", *((int *) err_ptr_), strerror(*((int *) err_ptr_)))); \
+ } while (0)
/*@
MPIDU_Thread_cond_signal - release one thread currently waitng on a condition variable
@@ -237,7 +443,13 @@ M*/
Input Parameter:
. cond - condition variable
@*/
-#define MPIDU_Thread_cond_signal MPIU_Thread_cond_signal
+#define MPIDU_Thread_cond_signal(cond_ptr_, err_ptr_) \
+ do { \
+ MPL_DBG_MSG_P(MPIR_DBG_THREAD,TYPICAL,"About to cond_signal on MPL_thread_cond %p", (cond_ptr_)); \
+ MPL_thread_cond_signal(cond_ptr_, err_ptr_); \
+ MPIR_Assert_fmt_msg(*((int *) err_ptr_) == 0, \
+ ("cond_signal failed, err=%d (%s)", *((int *) err_ptr_), strerror(*((int *) err_ptr_)))); \
+ } while (0)
/*
* Thread Local Storage
@@ -254,7 +466,11 @@ M*/
- err - location to store the error code; pointer may be NULL; error is zero
for success, non-zero if a failure occurred
@*/
-#define MPIDU_Thread_tls_create MPIU_Thread_tls_create
+#define MPIDU_Thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_); \
+ MPIR_Assert(*(int *) err_ptr_ == 0); \
+ } while (0)
/*@
MPIDU_Thread_tls_destroy - destroy a thread local storage space
@@ -270,7 +486,11 @@ M*/
The destroy function associated with the thread local storage will not
called after the space has been destroyed.
@*/
-#define MPIDU_Thread_tls_destroy MPIU_Thread_tls_destroy
+#define MPIDU_Thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ MPL_thread_tls_destroy(tls_ptr_, err_ptr_); \
+ MPIR_Assert(*(int *) err_ptr_ == 0); \
+ } while (0)
/*@
MPIDU_Thread_tls_set - associate a value with the current thread in the
@@ -280,7 +500,12 @@ M*/
+ tls - thread local storage space
- value - value to associate with current thread
@*/
-#define MPIDU_Thread_tls_set MPIU_Thread_tls_set
+#define MPIDU_Thread_tls_set(tls_ptr_, value_, err_ptr_) \
+ do { \
+ MPL_thread_tls_set(tls_ptr_, value_, err_ptr_); \
+ MPIR_Assert_fmt_msg(*((int *) err_ptr_) == 0, \
+ ("tls_set failed, err=%d (%s)", *((int *) err_ptr_), strerror(*((int *) err_ptr_)))); \
+ } while (0)
/*@
MPIDU_Thread_tls_get - obtain the value associated with the current thread
@@ -292,24 +517,34 @@ M*/
Output Parameter:
. value - value associated with current thread
@*/
-#define MPIDU_Thread_tls_get MPIU_Thread_tls_get
-
-
-#define MPIDU_cc_t MPIU_cc_t
-#define MPIDU_cc_get MPIU_cc_get
-#define MPIDU_cc_set MPIU_cc_set
-#define MPIDU_cc_is_complete MPIU_cc_is_complete
-#define MPIDU_cc_incr MPIU_cc_incr
-#define MPIDU_cc_decr MPIU_cc_decr
-
-#define MPIDU_OBJ_PUBLISH_HANDLE MPIU_OBJ_PUBLISH_HANDLE
-
-#define MPIDU_THREADPRIV_INITKEY MPIU_THREADPRIV_INITKEY
-#define MPIDU_THREADPRIV_INIT MPIU_THREADPRIV_INIT
-#define MPIDU_THREADPRIV_GET MPIU_THREADPRIV_GET
-#define MPIDU_THREADPRIV_DECL MPIU_THREADPRIV_DECL
-#define MPIDU_THREADPRIV_FIELD MPIU_THREADPRIV_FIELD
-#define MPIDU_THREADPRIV_FINALIZE MPIU_THREADPRIV_FINALIZE
-
-
+#define MPIDU_Thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
+ do { \
+ MPL_thread_tls_get(tls_ptr_, value_ptr_, err_ptr_); \
+ MPIR_Assert_fmt_msg(*((int *) err_ptr_) == 0, \
+ ("tls_get failed, err=%d (%s)", *((int *) err_ptr_), strerror(*((int *) err_ptr_)))); \
+ } while (0)
+
+#if defined(MPICH_IS_THREADED)
+
+#define MPIDU_THREADPRIV_KEY_CREATE \
+ do { \
+ int err_ = 0; \
+ MPL_THREADPRIV_KEY_CREATE(MPIR_Per_thread_key, MPIR_Per_thread, &err_); \
+ MPIR_Assert(err_ == 0); \
+ } while (0)
+
+#define MPIDU_THREADPRIV_KEY_GET_ADDR MPL_THREADPRIV_KEY_GET_ADDR
+#define MPIDU_THREADPRIV_KEY_DESTROY \
+ do { \
+ int err_ = 0; \
+ MPL_THREADPRIV_KEY_DESTROY(MPIR_Per_thread_key, &err_); \
+ MPIR_Assert(err_ == 0); \
+ } while (0)
+#else /* !defined(MPICH_IS_THREADED) */
+
+#define MPIDU_THREADPRIV_KEY_CREATE(key, var, err_ptr_)
+#define MPIDU_THREADPRIV_KEY_GET_ADDR(is_threaded, key, var, addr, err_ptr_) \
+ MPL_THREADPRIV_KEY_GET_ADDR(0, key, var, addr, err_ptr_)
+#define MPIDU_THREADPRIV_KEY_DESTROY(key, err_ptr_)
+#endif /* MPICH_IS_THREADED */
#endif /* !defined(MPIDU_THREAD_H_INCLUDED) */
diff --git a/src/mpid/common/timers/.state-cache b/src/mpid/common/timers/.state-cache
index 86723d3..be7c842 100644
--- a/src/mpid/common/timers/.state-cache
+++ b/src/mpid/common/timers/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="mpid_timers_fallback.h" info="1447123141"/>
+<file name="mpid_timers_fallback.h" info="1478973152"/>
</dir>
<data>
<fileinfo name="mpid_timers_fallback.h">
diff --git a/src/mpid/common/timers/Makefile.mk b/src/mpid/common/timers/Makefile.mk
index 1261d3e..db74fc1 100644
--- a/src/mpid/common/timers/Makefile.mk
+++ b/src/mpid/common/timers/Makefile.mk
@@ -1,7 +1,7 @@
### -*- Mode: Makefile; -*-
### vim: set ft=automake :
###
-### (C) 2011 by Argonne National Laboratory.
+### (C) 2015 by Argonne National Laboratory.
### See COPYRIGHT in top-level directory.
###
AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/common/timers
diff --git a/src/mpid/common/timers/mpid_timers_fallback.h b/src/mpid/common/timers/mpid_timers_fallback.h
index cf8f321..a7aa292 100644
--- a/src/mpid/common/timers/mpid_timers_fallback.h
+++ b/src/mpid/common/timers/mpid_timers_fallback.h
@@ -7,12 +7,12 @@
#if !defined(MPID_TIMERS_FALLBACK_H_INCLUDED)
#define MPID_TIMERS_FALLBACK_H_INCLUDED
-#define MPID_Time_t MPIU_Time_t
-#define MPID_Wtime MPIU_Wtime
-#define MPID_Wtime_diff MPIU_Wtime_diff
-#define MPID_Wtime_acc MPIU_Wtime_acc
-#define MPID_Wtime_todouble MPIU_Wtime_todouble
-#define MPID_Wtick MPIU_Wtick
-#define MPID_Wtime_init MPIU_Wtime_init
+#define MPID_Time_t MPL_time_t
+#define MPID_Wtime MPL_wtime
+#define MPID_Wtime_diff MPL_wtime_diff
+#define MPID_Wtime_acc MPL_wtime_acc
+#define MPID_Wtime_todouble MPL_wtime_todouble
+#define MPID_Wtick MPL_wtick
+#define MPID_Wtime_init MPL_wtime_init
#endif /* !defined(MPID_TIMERS_FALLBACK_H_INCLUDED) */
diff --git a/src/mpid/include/mpidu_pre.h b/src/mpid/include/mpidu_pre.h
new file mode 100644
index 0000000..6903a0c
--- /dev/null
+++ b/src/mpid/include/mpidu_pre.h
@@ -0,0 +1,25 @@
+/* -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPIDU_PRE_H_INCLUDED
+#define MPIDU_PRE_H_INCLUDED
+
+
+
+/* some common MPI forward declarations */
+
+struct MPIR_Request;
+struct MPIR_Comm;
+
+/* Scheduling forward declarations */
+
+struct MPIDU_Sched;
+typedef struct MPIDU_Sched *MPIR_Sched_t;
+
+typedef int (MPIR_Sched_cb_t) (struct MPIR_Comm * comm, int tag, void *state);
+typedef int (MPIR_Sched_cb2_t) (struct MPIR_Comm * comm, int tag, void *state, void *state2);
+
+#endif
diff --git a/src/mpid/pamid/.gitattributes b/src/mpid/pamid/.gitattributes
deleted file mode 100644
index 3d45ef0..0000000
--- a/src/mpid/pamid/.gitattributes
+++ /dev/null
@@ -1,15 +0,0 @@
-* whitespace=trail-space,space-before-tab
-*.[ch] whitespace=trail-space,space-before-tab,cr-at-eol,tab-in-indent
-Makefile.sm whitespace=trail-space,space-before-tab,cr-at-eol
-
-
-# * `blank-at-eof` treats blank lines added at the end of file as an error (enabled by default).
-# * `blank-at-eol` treats trailing whitespaces at the end of the line as an error (enabled by default).
-# * `trailing-space` is a short-hand to cover both `blank-at-eol` and `blank-at-eof`.
-# * `space-before-tab` treats a space character that appears immediately before a tab character in the initial indent part of the line as an error (enabled by default).
-# * `cr-at-eol` treats a carriage-return at the end of line as part of the line terminator, i.e. with it, `trailing-space` does not trigger if the character before such a carriage-return is not a whitespace (not enabled by default).
-
-# * `indent-with-non-tab` treats a line that is indented with 8 or more space characters as an error (not enabled by default).
-# * `tab-in-indent` treats a tab character in the initial indent part of the line as an error (not enabled by default).
-
-# * `tabwidth=<n>` tells how many character positions a tab occupies; this is relevant for `indent-with-non-tab` and when git fixes `tab-in-indent` errors. The default tab width is 8. Allowed values are 1 to 63.
diff --git a/src/mpid/pamid/.gitignore b/src/mpid/pamid/.gitignore
deleted file mode 100644
index f6f157a..0000000
--- a/src/mpid/pamid/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/autom4te.cache
-/configure
-Makefile.in
diff --git a/src/mpid/pamid/Makefile.mk b/src/mpid/pamid/Makefile.mk
deleted file mode 100644
index f33946c..0000000
--- a/src/mpid/pamid/Makefile.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-noinst_HEADERS += \
- src/mpid/pamid/include/mpidi_thread.h \
- src/mpid/pamid/include/mpidimpl.h \
- src/mpid/pamid/include/mpidi_mutex.h \
- src/mpid/pamid/include/mpidpost.h \
- src/mpid/pamid/include/mpidi_constants.h \
- src/mpid/pamid/include/mpidi_externs.h \
- src/mpid/pamid/include/mpidi_util.h \
- src/mpid/pamid/include/mpidi_hooks.h \
- src/mpid/pamid/include/mpidi_macros.h \
- src/mpid/pamid/include/mpidi_datatypes.h \
- src/mpid/pamid/include/mpidi_prototypes.h \
- src/mpid/pamid/include/pamix.h \
- src/mpid/pamid/include/mpidpre.h \
- src/mpid/pamid/include/mpidi_platform.h
-
-include_HEADERS += src/mpid/pamid/include/mpix.h
-
-include $(top_srcdir)/src/mpid/pamid/src/Makefile.mk
-
-endif BUILD_PAMID
diff --git a/src/mpid/pamid/cross/bgq8 b/src/mpid/pamid/cross/bgq8
deleted file mode 100644
index 7cecbb1..0000000
--- a/src/mpid/pamid/cross/bgq8
+++ /dev/null
@@ -1,27 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-CROSS_F77_SIZEOF_INTEGER=4
-CROSS_F77_SIZEOF_REAL=4
-CROSS_F77_SIZEOF_DOUBLE_PRECISION=8
-CROSS_F90_ADDRESS_KIND=8
-CROSS_F90_OFFSET_KIND=8
-CROSS_F90_INTEGER_KIND=8
-CROSS_F90_REAL_MODEL=6,37
-CROSS_F90_DOUBLE_MODEL=15,307
-CROSS_F90_INTEGER_MODEL_MAP={9,4,4},
-CROSS_F77_TRUE_VALUE=1
-CROSS_F77_FALSE_VALUE=0
diff --git a/src/mpid/pamid/cross/pe4 b/src/mpid/pamid/cross/pe4
deleted file mode 100644
index 2fc1d9e..0000000
--- a/src/mpid/pamid/cross/pe4
+++ /dev/null
@@ -1,27 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-CROSS_F77_SIZEOF_INTEGER=4
-CROSS_F77_SIZEOF_REAL=4
-CROSS_F77_SIZEOF_DOUBLE_PRECISION=8
-CROSS_F90_ADDRESS_KIND=4
-CROSS_F90_OFFSET_KIND=8
-CROSS_F90_INTEGER_KIND=4
-CROSS_F90_REAL_MODEL=6,37
-CROSS_F90_DOUBLE_MODEL=15,307
-CROSS_F90_INTEGER_MODEL_MAP={9,4,4},
-CROSS_F77_TRUE_VALUE=1
-CROSS_F77_FALSE_VALUE=0
\ No newline at end of file
diff --git a/src/mpid/pamid/cross/pe4-aix b/src/mpid/pamid/cross/pe4-aix
deleted file mode 100644
index f3478d1..0000000
--- a/src/mpid/pamid/cross/pe4-aix
+++ /dev/null
@@ -1,28 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-CROSS_F77_SIZEOF_INTEGER=4
-CROSS_F77_SIZEOF_REAL=4
-CROSS_F77_SIZEOF_DOUBLE_PRECISION=8
-CROSS_F90_ADDRESS_KIND=4
-CROSS_F90_OFFSET_KIND=8
-CROSS_F90_INTEGER_KIND=4
-CROSS_F90_REAL_MODEL=6,37
-CROSS_F90_DOUBLE_MODEL=15,307
-CROSS_F90_INTEGER_MODEL_MAP={9,4,4},
-CROSS_F77_TRUE_VALUE=1
-CROSS_F77_FALSE_VALUE=0
-CROSS_ALIGN_DOUBLE_EXCEPTION="four"
diff --git a/src/mpid/pamid/cross/pe8 b/src/mpid/pamid/cross/pe8
deleted file mode 100644
index 866fdd1..0000000
--- a/src/mpid/pamid/cross/pe8
+++ /dev/null
@@ -1,27 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-CROSS_F77_SIZEOF_INTEGER=4
-CROSS_F77_SIZEOF_REAL=4
-CROSS_F77_SIZEOF_DOUBLE_PRECISION=8
-CROSS_F90_ADDRESS_KIND=8
-CROSS_F90_OFFSET_KIND=8
-CROSS_F90_INTEGER_KIND=8
-CROSS_F90_REAL_MODEL=6,37
-CROSS_F90_DOUBLE_MODEL=15,307
-CROSS_F90_INTEGER_MODEL_MAP={9,4,4},
-CROSS_F77_TRUE_VALUE=1
-CROSS_F77_FALSE_VALUE=0
\ No newline at end of file
diff --git a/src/mpid/pamid/cross/pe8-aix b/src/mpid/pamid/cross/pe8-aix
deleted file mode 100644
index 8380c89..0000000
--- a/src/mpid/pamid/cross/pe8-aix
+++ /dev/null
@@ -1,28 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-CROSS_F77_SIZEOF_INTEGER=4
-CROSS_F77_SIZEOF_REAL=4
-CROSS_F77_SIZEOF_DOUBLE_PRECISION=8
-CROSS_F90_ADDRESS_KIND=8
-CROSS_F90_OFFSET_KIND=8
-CROSS_F90_INTEGER_KIND=8
-CROSS_F90_REAL_MODEL=6,37
-CROSS_F90_DOUBLE_MODEL=15,307
-CROSS_F90_INTEGER_MODEL_MAP={9,4,4},
-CROSS_F77_TRUE_VALUE=1
-CROSS_F77_FALSE_VALUE=0
-CROSS_ALIGN_DOUBLE_EXCEPTION="four"
diff --git a/src/mpid/pamid/include/.gitignore b/src/mpid/pamid/include/.gitignore
deleted file mode 100644
index ea8dee9..0000000
--- a/src/mpid/pamid/include/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/mpid_config.h.in
diff --git a/src/mpid/pamid/include/mpidi_constants.h b/src/mpid/pamid/include/mpidi_constants.h
deleted file mode 100644
index 3fcb3b2..0000000
--- a/src/mpid/pamid/include/mpidi_constants.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_constants.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifndef __include_mpidi_constants_h__
-#define __include_mpidi_constants_h__
-
-enum
- {
- /* N is "number of operations" and P is number of ranks */
- MPIDI_VERBOSE_NONE = 0, /**< Do not print any verbose information */
- MPIDI_VERBOSE_SUMMARY_0 = 1, /**< Print summary information on rank 0. O(1) lines printed. */
- MPIDI_VERBOSE_SUMMARY_ALL = 2, /**< Print summary information on all ranks. O(P) lines printed. */
- MPIDI_VERBOSE_DETAILS_0 = 2, /**< Print detailed information on rank 0. O(N) lines printed. */
- MPIDI_VERBOSE_DETAILS_ALL = 3, /**< Print detailed information on all ranks. O(P*N) lines printed. */
- };
-
-
-/**
- * \defgroup Allgather(v) optimization datatype info
- * \{
- */
-enum
- {
- MPID_SEND_CONTIG = 0, /**< Contiguous send buffer */
- MPID_RECV_CONTIG = 1, /**< Contiguous recv buffer */
- MPID_RECV_CONTINUOUS = 2, /**< Continuous recv buffer */
- MPID_LARGECOUNT = 3, /**< Total send count is "large" */
- MPID_MEDIUMCOUNT = 4, /**< Total send count is "medium" */
- MPID_ALIGNEDBUFFER = 5, /**< Buffers are 16b aligned */
- };
-
-enum
- {
- MPID_ALLGATHER_PREALLREDUCE = 0,
- MPID_ALLGATHERV_PREALLREDUCE = 1,
- MPID_ALLREDUCE_PREALLREDUCE = 2,
- MPID_BCAST_PREALLREDUCE = 3,
- MPID_SCATTERV_PREALLREDUCE = 4,
- MPID_GATHER_PREALLREDUCE = 5,
- MPID_NUM_PREALLREDUCES = 6,
- };
-
-enum /* The type of protocol selected */
- {
- MPID_COLL_NOQUERY = 0,
- MPID_COLL_QUERY = 1,
- /* Can we cache stuff? If not set to ALWAYS_QUERY */
- MPID_COLL_ALWAYS_QUERY = 2,
- MPID_COLL_CHECK_FN_REQUIRED = 3,
- MPID_COLL_USE_MPICH = 4,
- MPID_COLL_NOSELECTION = 5,
- MPID_COLL_OPTIMIZED = 6,
- };
-
-enum
- {
- MPID_COLL_OFF = 0,
- MPID_COLL_ON = 1,
- MPID_COLL_FCA = 2, /* Selecting these is fairly easy so special case */
- MPID_COLL_CUDA = 3, /* This is used to enable PAMI geometry but sets default to MPICH */
- };
-/** \} */
-
-
-enum
-{
-MPID_EPOTYPE_NONE = 0, /**< No epoch in affect */
-MPID_EPOTYPE_LOCK = 1, /**< MPI_Win_lock access epoch */
-MPID_EPOTYPE_START = 2, /**< MPI_Win_start access epoch */
-MPID_EPOTYPE_POST = 3, /**< MPI_Win_post exposure epoch */
-MPID_EPOTYPE_FENCE = 4, /**< MPI_Win_fence access/exposure epoch */
-MPID_EPOTYPE_REFENCE = 5, /**< MPI_Win_fence possible access/exposure epoch */
-MPID_EPOTYPE_LOCK_ALL = 6, /**< MPI_Win_lock_all access epoch */
-};
-
-enum
-{
- MPID_AUTO_SELECT_COLLS_NONE = 0,
- MPID_AUTO_SELECT_COLLS_BARRIER = 1,
- MPID_AUTO_SELECT_COLLS_BCAST = ((int)((MPID_AUTO_SELECT_COLLS_BARRIER << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_ALLGATHER = ((int)((MPID_AUTO_SELECT_COLLS_BCAST << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_ALLGATHERV = ((int)((MPID_AUTO_SELECT_COLLS_ALLGATHER << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_ALLREDUCE = ((int)((MPID_AUTO_SELECT_COLLS_ALLGATHERV << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_ALLTOALL = ((int)((MPID_AUTO_SELECT_COLLS_ALLREDUCE << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_ALLTOALLV = ((int)((MPID_AUTO_SELECT_COLLS_ALLTOALL << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_EXSCAN = ((int)((MPID_AUTO_SELECT_COLLS_ALLTOALLV << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_GATHER = ((int)((MPID_AUTO_SELECT_COLLS_EXSCAN << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_GATHERV = ((int)((MPID_AUTO_SELECT_COLLS_GATHER << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_REDUCE_SCATTER = ((int)((MPID_AUTO_SELECT_COLLS_GATHERV << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_REDUCE = ((int)((MPID_AUTO_SELECT_COLLS_REDUCE_SCATTER << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_SCAN = ((int)((MPID_AUTO_SELECT_COLLS_REDUCE << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_SCATTER = ((int)((MPID_AUTO_SELECT_COLLS_SCAN << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_SCATTERV = ((int)((MPID_AUTO_SELECT_COLLS_SCATTER << 1) & 0xFFFFFFFF)),
- MPID_AUTO_SELECT_COLLS_TUNE = 0x80000000,
- MPID_AUTO_SELECT_COLLS_ALL = 0xFFFFFFFF,
-};
-
-enum /* PAMID_COLLECTIVES_MEMORY_OPTIMIZED levels */
-
-{
- MPID_OPT_LVL_IRREG = 1, /**< Do not optimize irregular communicators */
- MPID_OPT_LVL_NONCONTIG = 2, /**< Disable some non-contig collectives */
-};
-#endif
diff --git a/src/mpid/pamid/include/mpidi_datatypes.h b/src/mpid/pamid/include/mpidi_datatypes.h
deleted file mode 100644
index 11c07e2..0000000
--- a/src/mpid/pamid/include/mpidi_datatypes.h
+++ /dev/null
@@ -1,658 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_datatypes.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifndef __include_mpidi_datatypes_h__
-#define __include_mpidi_datatypes_h__
-
-#ifdef MPIDI_STATISTICS
-#include <pami_ext_pe.h>
-#endif
-#include "mpidi_constants.h"
-#include "mpidi_platform.h"
-#include "pami.h"
-#include "mpidi_trace.h"
-
-#include "opa_primitives.h"
-
-
-
-#if (MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_THREAD_LOCAL) && defined(__BGQ__)
-struct MPID_Request;
-typedef struct
-{
- struct MPID_Request * head;
- size_t count;
-} MPIDI_RequestHandle_t;
-#endif
-
-#define MPIDI_PT2PT_LIMIT_SET(is_internal,is_immediate,is_local,value) \
- MPIDI_Process.pt2pt.limits_lookup[is_internal][is_immediate][is_local] = value\
-
-typedef struct
-{
- unsigned remote;
- unsigned local;
-} MPIDI_remote_and_local_limits_t;
-
-typedef struct
-{
- MPIDI_remote_and_local_limits_t eager;
- MPIDI_remote_and_local_limits_t immediate;
-} MPIDI_immediate_and_eager_limits_t;
-
-typedef struct
-{
- MPIDI_immediate_and_eager_limits_t application;
- MPIDI_immediate_and_eager_limits_t internal;
-} MPIDI_pt2pt_limits_t;
-
-/**
- * \brief MPI Process descriptor
- *
- * This structure contains global configuration flags.
- */
-typedef struct
-{
- unsigned avail_contexts;
- union
- {
- unsigned limits_array[8];
- unsigned limits_lookup[2][2][2];
- MPIDI_pt2pt_limits_t limits;
- } pt2pt;
- unsigned disable_internal_eager_scale; /**< The number of tasks at which point eager will be disabled */
-#if TOKEN_FLOW_CONTROL
- unsigned long long mp_buf_mem;
- unsigned long long mp_buf_mem_max;
- unsigned is_token_flow_control_on;
-#endif
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- unsigned mp_infolevel;
- unsigned mp_statistics; /* print pamid statistcs data */
- unsigned mp_printenv; ; /* print env data */
- unsigned mp_interrupts; ; /* interrupts */
-#endif
-#ifdef RDMA_FAILOVER
- unsigned mp_s_use_pami_get; /* force the PAMI_Get path instead of PAMI_Rget */
-#endif
-
-#if (MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_THREAD_LOCAL) && defined(__BGQ__)
- MPIDI_RequestHandle_t request_handles[MPIDI_MAX_THREADS];
-#endif
-
-#if QUEUE_BINARY_SEARCH_SUPPORT
- unsigned queue_binary_search_support_on;
-#endif
-
-#if CUDA_AWARE_SUPPORT
- unsigned cuda_aware_support_on;
-#endif
-
- unsigned verbose; /**< The current level of verbosity for end-of-job stats. */
- unsigned statistics; /**< The current level of stats collection. */
- unsigned rma_pending; /**< The max num outstanding requests during an RMA op */
- unsigned shmem_pt2pt; /**< Enable optimized shared memory point-to-point functions. */
- unsigned smp_detect;
- pami_geometry_t world_geometry;
-
- struct
- {
- unsigned collectives; /**< Enable optimized collective functions. */
- unsigned subcomms; /**< Enable hardware optimized subcomm's */
- unsigned select_colls; /**< Enable collective selection */
- unsigned auto_select_colls; /**< Enable automatic collective selection */
- unsigned memory; /**< Enable memory optimized subcomm's - See MPID_OPT_LVL_xxxx */
- unsigned num_requests; /**< Number of requests between flow control barriers */
- }
- optimized;
-
- struct
- {
- volatile unsigned active; /**< Number of contexts with active async progress */
- unsigned mode; /**< 0 == 'disabled', 1 == 'locked', 2 == 'trigger' */
- }
- async_progress;
-
- struct
- {
- struct
- {
- unsigned requested; /**< 1 == application requests context post */
- unsigned active; /**< 1 == context post is currently required */
- } context_post;
- } perobj; /**< This structure is only used in the 'perobj' mpich lock mode. */
-
- unsigned mpir_nbc; /**< Enable MPIR_* non-blocking collectives implementations. */
- int numTasks; /* total number of tasks on a job */
- unsigned typed_onesided; /**< Enable typed PAMI calls for derived types within MPID_Put and MPID_Get. */
-#ifdef DYNAMIC_TASKING
- struct MPIDI_PG_t * my_pg; /**< Process group I belong to */
- int my_pg_rank; /**< Rank in process group */
-#endif
-} MPIDI_Process_t;
-
-
-enum
- {
- MPIDI_Protocols_Short,
- MPIDI_Protocols_ShortSync,
- MPIDI_Protocols_Eager,
- MPIDI_Protocols_RVZ,
- MPIDI_Protocols_Cancel,
- MPIDI_Protocols_Control,
- MPIDI_Protocols_WinCtrl,
- MPIDI_Protocols_WinAccum,
- MPIDI_Protocols_RVZ_zerobyte,
- MPIDI_Protocols_WinGetAccum,
- MPIDI_Protocols_WinGetAccumAck,
-#ifdef DYNAMIC_TASKING
- MPIDI_Protocols_Dyntask,
- MPIDI_Protocols_Dyntask_disconnect,
-#endif
- MPIDI_Protocols_WinAtomic,
- MPIDI_Protocols_WinAtomicAck,
- MPIDI_Protocols_COUNT,
- };
-
-
-/**
- * \brief This defines the type of message being sent/received
- * mpid_startall() invokes the correct start based on the type of the request
- */
-typedef enum
- {
- MPIDI_REQUEST_PTYPE_RECV,
- MPIDI_REQUEST_PTYPE_SEND,
- MPIDI_REQUEST_PTYPE_BSEND,
- MPIDI_REQUEST_PTYPE_SSEND,
- } MPIDI_REQUEST_PTYPE;
-
-
-typedef enum
- {
- MPIDI_CONTROL_SSEND_ACKNOWLEDGE,
- MPIDI_CONTROL_CANCEL_REQUEST,
- MPIDI_CONTROL_CANCEL_ACKNOWLEDGE,
- MPIDI_CONTROL_CANCEL_NOT_ACKNOWLEDGE,
- MPIDI_CONTROL_RENDEZVOUS_ACKNOWLEDGE,
- MPIDI_CONTROL_RETURN_TOKENS,
- } MPIDI_CONTROL;
-
-
-/** \brief Request completion actions */
-typedef enum
- {
- MPIDI_CA_COMPLETE,
- MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE, /**< Unpack uebuf, then complete. */
- } MPIDI_CA;
-
-
-/**
- * \brief MPIDI_Message_match contains enough information to match an
- * MPI message.
- */
-typedef struct
-{
- int tag; /**< match tag */
- int rank; /**< match rank */
- int context_id; /**< match context */
-#ifdef OUT_OF_ORDER_HANDLING
- int seqno; /**< match seqno */
-#endif
-} MPIDI_Message_match;
-
-
-/**
- * \brief MPID pt2pt message header
- */
-typedef struct
-{
- MPI_Request req; /**< peer's request handle */
- unsigned MPItag; /**< match tag */
- unsigned MPIrank; /**< match rank */
- uint16_t MPIctxt; /**< match context */
-
- union {
- uint16_t flags;
- struct {
- unsigned control:3; /**< message type for control protocols */
- unsigned isSync:1; /**< set for sync sends */
- unsigned isRzv :1; /**< use pt2pt rendezvous */
- unsigned noRDMA:1; /**< msg sent via shm or mem reg. fails */
- unsigned reserved:6; /**< unused bits */
- unsigned tokens:4; /** tokens need to be returned */
- } __attribute__ ((__packed__));
- };
-
-#ifdef OUT_OF_ORDER_HANDLING
- unsigned MPIseqno; /**< match seqno */
-#endif
-#if TOKEN_FLOW_CONTROL
- unsigned alltokens; /* control:MPIDI_CONTROL_RETURN_TOKENS */
-#endif
-} MPIDI_MsgInfo;
-
-/** \brief Full Rendezvous msg info to be set as two quads of unexpected data. */
-typedef struct
-{
- MPIDI_MsgInfo msginfo;
- pami_memregion_t memregion;
-#ifdef RDMA_FAILOVER
- uint32_t memregion_used;
-#endif
- void * data;
- size_t length;
-} MPIDI_MsgEnvelope;
-
-/** \brief This defines the portion of MPID_Request that is specific to the Device */
-struct MPIDI_Request
-{
- struct MPID_Request *next; /**< Link to next req. in queue */
- struct MPID_Datatype *datatype_ptr; /**< Info about the datatype */
- pami_work_t post_request; /**< */
-
- MPIDI_MsgEnvelope envelope;
-
- void *userbuf; /**< User buffer */
- MPI_Aint userbufcount; /**< Userbuf data count */
- MPI_Datatype datatype; /**< Data type of message */
- pami_task_t peer_pami; /**< The other guy's rank (in PAMI) */
- unsigned peer_comm; /**< The other guy's rank (in the orig communicator) */
- unsigned cancel_pending:16; /**< Cancel status */
- unsigned uebuf_malloc:16; /**< does uebuf require free() */
-
- unsigned uebuflen; /**< Length (bytes) of uebuf */
- void *uebuf; /**< Unexpected buffer */
-
- MPIDI_REQUEST_PTYPE ptype; /**< The persistent msg type */
- MPIDI_CA ca; /**< Completion action */
- pami_memregion_t memregion; /**< Rendezvous recv memregion */
-#ifdef OUT_OF_ORDER_HANDLING
- struct MPID_Request *prev; /**< Link to prev req. in queue */
- void *nextR; /** < pointer to next recv for the out-of-order list, the out-of-order list is a list per source */
- void *prevR; /** < pointer to prev recv for the out-of-order list, the out-of-order list is a list per source */
- struct MPID_Request *oo_peer; /** < pointer to the matched post recv request to complete in the out-of-order case */
-#endif
-#ifdef RDMA_FAILOVER
- uint32_t memregion_used:16;
- uint32_t shm:16;
-#endif
-#ifdef MPIDI_TRACE
- int partner_id;
- int idx;
- int PR_idx;
-#endif
- struct MPIDI_Win_request *win_req; /* anchor of request based rma handle so as to free it properly when wait is called */
-};
-
-typedef void* fast_query_t;
-/** \brief This defines the portion of MPID_Comm that is specific to the Device */
-struct MPIDI_Comm
-{
- pami_geometry_t geometry; /**< Geometry component for collectives */
- pami_geometry_t parent; /**< The parent geometry this communicator came from */
- pami_algorithm_t *coll_algorithm[PAMI_XFER_COUNT][2];
- pami_metadata_t *coll_metadata[PAMI_XFER_COUNT][2];
- char coll_count[PAMI_XFER_COUNT][2];
- pami_algorithm_t user_selected[PAMI_XFER_COUNT];
- /* no way to tell if user_selected[] is NULL */
- /* could probably union these two though? */
- char user_selected_type[PAMI_XFER_COUNT];
- pami_metadata_t user_metadata[PAMI_XFER_COUNT];
- char last_algorithm[100];
- char preallreduces[MPID_NUM_PREALLREDUCES];
- /* \todo Need to figure out how to deal with algorithms above the pami level */
- char allgathers[4];
- char allgathervs[4];
- char scattervs[2];
- char optgather, optscatter, optreduce;
- unsigned num_requests;
- /* These need to be freed at geom destroy, so we need to store them
- * inside the communicator struct until destroy time rather than
- * allocating pointers on the stack
- */
- /* For create_taskrange */
- pami_geometry_range_t range;
- /* For create_tasklist/endpoints if we ever use it */
- pami_task_t *tasks;
- pami_endpoint_t *endpoints;
- /* There are some protocols where the optimized protocol always works and
- * is the best performance */
- /* Assume we have small vs large cutoffs vs medium for some protocols */
- pami_algorithm_t opt_protocol[PAMI_XFER_COUNT][2];
- int must_query[PAMI_XFER_COUNT][2];
- pami_metadata_t opt_protocol_md[PAMI_XFER_COUNT][2];
- int cutoff_size[PAMI_XFER_COUNT][2];
- /* Our best allreduce protocol always works on
- * doubles and sum/min/max. Since that is a common
- * occurance let's cache that protocol and call
- * it without checking. Any other dt/op must be
- * checked */
- pami_algorithm_t cached_allreduce;
- pami_metadata_t cached_allreduce_md;
- int query_cached_allreduce;
-
- union tasks_descrip_t {
- /* For create_taskrange */
- pami_geometry_range_t *ranges;
- /* For create_tasklist/endpoints if we ever use it */
- pami_task_t *tasks;
- pami_endpoint_t *endpoints;
- } tasks_descriptor;
-#ifdef DYNAMIC_TASKING
- int local_leader;
- long long world_intercomm_cntr;
- int *world_ids; /* ids of worlds that composed this communicator (inter communicator created for dynamic tasking */
-#endif
- fast_query_t collsel_fast_query;
-};
-
-
-typedef struct
-{
- pami_work_t state;
- pami_xfer_t *coll_struct;
-} MPIDI_Post_coll_t;
-
-
-/** \brief Forward declaration of the MPID_Comm structure */
-struct MPID_Comm;
-/** \brief Forward declaration of the MPID_Win structure */
-struct MPID_Win;
-/** \brief Forward declaration of the MPID_Group structure */
-struct MPID_Group;
-
-typedef enum
- {
- MPIDI_REQUEST_LOCK,
- MPIDI_REQUEST_LOCKALL,
- } MPIDI_LOCK_TYPE_t;
-
-struct MPIDI_Win_lock
-{
- struct MPIDI_Win_lock *next;
- unsigned rank;
- MPIDI_LOCK_TYPE_t mtype; /* MPIDI_REQUEST_LOCK or MPIDI_REQUEST_LOCKALL */
- int type;
- void *flagAddr;
-};
-struct MPIDI_Win_queue
-{
- struct MPIDI_Win_lock *head;
- struct MPIDI_Win_lock *tail;
-};
-
-typedef enum {
- MPIDI_ACCU_ORDER_RAR = 1,
- MPIDI_ACCU_ORDER_RAW = 2,
- MPIDI_ACCU_ORDER_WAR = 4,
- MPIDI_ACCU_ORDER_WAW = 8
-} MPIDI_Win_info_accumulate_ordering;
-
-typedef enum {
- MPIDI_ACCU_SAME_OP,
- MPIDI_ACCU_SAME_OP_NO_OP
-} MPIDI_Win_info_accumulate_ops;
-
-typedef struct MPIDI_Win_info_args {
- int no_locks;
- MPIDI_Win_info_accumulate_ordering accumulate_ordering;
- MPIDI_Win_info_accumulate_ops accumulate_ops; /* default is same_op_no_op */
- int same_size;
- int alloc_shared_noncontig;
-} MPIDI_Win_info_args;
-
-typedef struct workQ_t {
- void *msgQ;
- int count;
-} workQ_t;
-
-
-/**
- * \brief Collective information related to a window
- *
- * This structure is used to share information about a local window with
- * all nodes in the window communicator. Part of that information includes
- * statistics about RMA operations during access/exposure epochs.
- *
- * The structure is allocated as an array sized for the window communicator.
- * Each entry in the array corresponds directly to the node of the same rank.
- */
-typedef struct MPIDI_Win_info
-{
- void * base_addr; /**< Node's exposure window base address */
- struct MPID_Win * win;
- uint32_t disp_unit; /**< Node's exposure window displacement units */
- pami_memregion_t memregion; /**< Memory region descriptor for each node */
- uint32_t memregion_used;
- MPI_Aint base_size; /**< Node's exposure window base size in bytes */
-} MPIDI_Win_info;
-
-typedef pthread_mutex_t MPIDI_SHM_MUTEX;
-
-typedef struct MPIDI_Win_shm_ctrl_t
-{
- MPIDI_SHM_MUTEX mutex_lock; /* shared memory windows -- lock for */
- /* accumulate/atomic operations */
- OPA_int_t active;
- int shm_count;
-} MPIDI_Win_shm_ctrl_t;
-
-typedef struct MPIDI_Win_shm_t
-{
- int allocated; /* flag: TRUE iff this window has a shared memory
- region associated with it */
- void *base_addr; /* base address of shared memory region */
- MPI_Aint segment_len; /* size of shared memory region */
- union
- {
- uint32_t shm_id; /* shared memory id - sysv */
- char shm_key[64]; /* shared memory key - posix */
- };
- MPIDI_Win_shm_ctrl_t *ctrl;
-} MPIDI_Win_shm_t;
-
-/**
- * \brief Structure of PAMI extensions to MPID_Win structure
- */
-struct MPIDI_Win
-{
- struct MPIDI_Win_info *info; /**< allocated array of collective info */
- MPIDI_Win_info_args info_args;
- void ** shm_base_addrs; /* base address shared by all process in comm */
- MPIDI_Win_shm_t *shm; /* shared memory info */
- workQ_t work;
- int max_ctrlsends;
- struct MPIDI_Win_sync
- {
-#if 0
- /** \todo optimize some of the synchronization assertion */
- uint32_t assert; /**< MPI_MODE_* bits asserted at epoch start */
-#endif
-
- volatile int origin_epoch_type; /**< curretn epoch type for origin */
- volatile int target_epoch_type; /**< curretn epoch type for target */
-
- /* These fields are reset by the sync functions */
- uint32_t total; /**< The number of PAMI requests that we know about (updated only by calling thread) */
- volatile uint32_t started; /**< The number of PAMI requests made (updated only in the context_post callback) */
- volatile uint32_t complete; /**< The number of completed PAMI requests (only updated by the done callbacks) */
-
- struct MPIDI_Win_sync_pscw
- {
- struct MPID_Group * group;
- volatile unsigned count;
- } sc, pw;
- struct MPIDI_Win_sync_lock
- {
- struct
- {
- volatile unsigned locked;
- volatile unsigned allLocked;
- } remote;
- struct
- {
- struct MPIDI_Win_queue requested;
- int type;
- unsigned count;
- } local;
- } lock;
- } sync;
- int request_based; /* flag for request based rma */
- struct MPID_Request *rreq; /* anchor of MPID_Request for request based rma */
-};
-
-/**
- * \brief Structures and typedefs for collective selection extensions in PAMI
- */
-
-typedef void* advisor_t;
-typedef void* advisor_table_t;
-typedef void* advisor_attribute_name_t;
-
-typedef union
-{
- size_t intval;
- double doubleval;
- const char * chararray;
- const size_t * intarray;
-} advisor_attribute_value_t;
-
-typedef struct
-{
- advisor_attribute_name_t name;
- advisor_attribute_value_t value;
-} advisor_configuration_t;
-
-typedef struct {
- pami_xfer_type_t *collectives;
- size_t num_collectives;
- size_t *procs_per_node;
- size_t num_procs_per_node;
- size_t *geometry_sizes;
- size_t num_geometry_sizes;
- size_t *message_sizes;
- size_t num_message_sizes;
- int iter;
- int verify;
- int verbose;
- int checkpoint;
-} advisor_params_t;
-
-typedef enum
-{
- COLLSEL_ALGO = 0, /* 'Always works' PAMI algorithm */
- COLLSEL_QUERY_ALGO, /* 'Must query' PAMI algorithm */
- COLLSEL_EXTERNAL_ALGO, /* External algorithm */
-} advisor_algorithm_type_t;
-
-/* External algorithm callback function */
-typedef pami_result_t (*external_algorithm_fn)(pami_xfer_t *, void *);
-
-typedef struct
-{
- external_algorithm_fn callback;
- void *cookie;
-} external_algorithm_t;
-
-typedef struct
-{
- union
- {
- pami_algorithm_t internal;/* PAMI Algorithm */
- external_algorithm_t external;/* External Algorithm */
- } algorithm;
- pami_metadata_t *metadata;
- advisor_algorithm_type_t algorithm_type;
-} advisor_algorithm_t;
-
-
-typedef pami_result_t (*pami_extension_collsel_init) (pami_client_t,
- advisor_configuration_t [],
- size_t,
- pami_context_t [],
- size_t,
- advisor_t *);
-
-typedef pami_result_t (*pami_extension_collsel_destroy) (advisor_t *);
-
-typedef int (*pami_extension_collsel_initialized) (pami_client_t, advisor_t *);
-
-typedef pami_result_t (*pami_extension_collsel_table_load) (advisor_t,
- char *,
- advisor_table_t *);
-
-typedef pami_result_t (*pami_extension_collsel_get_collectives) (advisor_table_t,
- pami_xfer_type_t **,
- unsigned *);
-
-typedef pami_result_t (*pami_extension_collsel_register_algorithms) (advisor_table_t,
- pami_geometry_t,
- pami_xfer_type_t,
- advisor_algorithm_t *,
- size_t);
-
-typedef pami_result_t (*external_geometry_create_fn)(pami_geometry_range_t* task_slices,
- size_t slice_count,
- pami_geometry_t *geometry,
- void **cookie);
-
-typedef pami_result_t (*external_geometry_destroy_fn)(void *cookie);
-
-typedef pami_result_t (*external_register_algorithms_fn)(void *cookie,
- pami_xfer_type_t collective,
- advisor_algorithm_t **algorithms,
- size_t *num_algorithms);
-
-typedef struct
-{
- external_geometry_create_fn geometry_create;
- external_geometry_destroy_fn geometry_destroy;
- external_register_algorithms_fn register_algorithms;
-} external_geometry_ops_t;
-
-typedef pami_result_t (*pami_extension_collsel_table_generate) (advisor_t,
- char *,
- advisor_params_t *,
- external_geometry_ops_t *,
- int);
-
-typedef pami_result_t (*pami_extension_collsel_query_create) (advisor_table_t advisor_table,
- pami_geometry_t geometry,
- fast_query_t *query);
-
-typedef pami_result_t (*pami_extension_collsel_query_destroy) (fast_query_t *query);
-
-typedef int (*pami_extension_collsel_advise) (fast_query_t fast_query,
- pami_xfer_type_t xfer_type,
- size_t message_size,
- advisor_algorithm_t algorithms_optimized[],
- size_t max_algorithms);
-
-
-
-#endif
diff --git a/src/mpid/pamid/include/mpidi_externs.h b/src/mpid/pamid/include/mpidi_externs.h
deleted file mode 100644
index 774e5c4..0000000
--- a/src/mpid/pamid/include/mpidi_externs.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_externs.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifndef __include_mpidi_externs_h__
-#define __include_mpidi_externs_h__
-
-
-extern pami_client_t MPIDI_Client;
-extern pami_context_t MPIDI_Context[];
-
-extern MPIDI_Process_t MPIDI_Process;
-
-extern advisor_table_t MPIDI_Collsel_advisor_table;
-extern pami_extension_t MPIDI_Collsel_extension;
-extern advisor_params_t MPIDI_Collsel_advisor_params;
-extern char *MPIDI_Collsel_output_file;
-extern pami_extension_collsel_advise MPIDI_Pamix_collsel_advise;
-
-#endif
diff --git a/src/mpid/pamid/include/mpidi_hooks.h b/src/mpid/pamid/include/mpidi_hooks.h
deleted file mode 100644
index b4228ca..0000000
--- a/src/mpid/pamid/include/mpidi_hooks.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_hooks.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifndef __include_mpidi_hooks_h__
-#define __include_mpidi_hooks_h__
-
-
-struct MPID_VCR_t {
- pami_task_t taskid;
-#ifdef DYNAMIC_TASKING
- int pg_rank; /** rank in process group **/
- struct MPIDI_PG *pg; /** process group **/
-#endif
-};
-typedef struct MPID_VCR_t * MPID_VCR ;
-typedef struct MPIDI_VCRT * MPID_VCRT;
-
-
-typedef size_t MPIDI_msg_sz_t;
-
-#define MPID_Irsend MPID_Isend
-#define MPID_Rsend MPID_Send
-#define MPID_Rsend_init MPID_Send_init
-
-
-/** \brief Our progress engine does not require state */
-#define MPID_PROGRESS_STATE_DECL
-
-/** \brief This defines the portion of MPID_Request that is specific to the Device */
-#define MPID_DEV_REQUEST_DECL struct MPIDI_Request mpid;
-
-/** \brief This defines the portion of MPID_Comm that is specific to the Device */
-#define MPID_DEV_COMM_DECL struct MPIDI_Comm mpid;
-
-/** \brief This defines the portion of MPID_Win that is specific to the Device */
-#define MPID_DEV_WIN_DECL struct MPIDI_Win mpid;
-
-#define HAVE_DEV_COMM_HOOK
-#define MPID_Dev_comm_create_hook(a) ({ int MPIDI_Comm_create (MPID_Comm *comm); MPIDI_Comm_create (a); })
-#define MPID_Dev_comm_destroy_hook(a) ({ int MPIDI_Comm_destroy(MPID_Comm *comm); MPIDI_Comm_destroy(a); })
-
-
-#endif
diff --git a/src/mpid/pamid/include/mpidi_macros.h b/src/mpid/pamid/include/mpidi_macros.h
deleted file mode 100644
index 24a5722..0000000
--- a/src/mpid/pamid/include/mpidi_macros.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_macros.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifndef __include_mpidi_macros_h__
-#define __include_mpidi_macros_h__
-
-#include "mpidi_datatypes.h"
-#include "mpidi_externs.h"
-
-#define TOKEN_FLOW_CONTROL_ON (TOKEN_FLOW_CONTROL && MPIU_Token_on())
-
-#ifdef TRACE_ON
-#ifdef __GNUC__
-#define TRACE_ALL(fd, format, ...) fprintf(fd, "%s:%u (%d) " format, __FILE__, __LINE__, MPIR_Process.comm_world->rank, ##__VA_ARGS__)
-#define TRACE_OUT(format, ...) TRACE_ALL(stdout, format, ##__VA_ARGS__)
-#define TRACE_ERR(format, ...) TRACE_ALL(stderr, format, ##__VA_ARGS__)
-#else
-#define TRACE_OUT(format...) fprintf(stdout, format)
-#define TRACE_ERR(format...) fprintf(stderr, format)
-#endif
-#else
-#define TRACE_OUT(format...)
-#define TRACE_ERR(format...)
-#endif
-
-#if TOKEN_FLOW_CONTROL
-#define MPIU_Token_on() (MPIDI_Process.is_token_flow_control_on)
-#else
-#define MPIU_Token_on() (0)
-#endif
-
-/**
- * \brief Gets significant info regarding the datatype
- * Used in mpid_send, mpidi_send.
- */
-#define MPIDI_Datatype_get_info(_count, _datatype, \
-_dt_contig_out, _data_sz_out, _dt_ptr, _dt_true_lb) \
-({ \
- if (HANDLE_GET_KIND(_datatype) == HANDLE_KIND_BUILTIN) \
- { \
- (_dt_ptr) = NULL; \
- (_dt_contig_out) = TRUE; \
- (_dt_true_lb) = 0; \
- (_data_sz_out) = (_count) * \
- MPID_Datatype_get_basic_size(_datatype); \
- } \
- else \
- { \
- MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
- (_dt_contig_out) = (_dt_ptr)->is_contig; \
- (_dt_true_lb) = (_dt_ptr)->true_lb; \
- (_data_sz_out) = (_count) * (_dt_ptr)->size; \
- } \
-})
-
-/**
- * \brief Gets data size of the datatype
- */
-#define MPIDI_Datatype_get_data_size(_count, _datatype, \
-_data_sz_out) \
-({ \
- if (HANDLE_GET_KIND(_datatype) == HANDLE_KIND_BUILTIN) \
- { \
- (_data_sz_out) = (_count) * \
- MPID_Datatype_get_basic_size(_datatype); \
- } \
- else \
- { \
- MPID_Datatype *_dt_ptr; \
- MPID_Datatype_get_ptr((_datatype), (_dt_ptr)); \
- (_data_sz_out) = (_count) * (_dt_ptr)->size; \
- } \
-})
-
-/* Add some error checking for size eventually */
-#define MPIDI_Update_last_algorithm(_comm, _name) \
-({ strncpy( (_comm)->mpid.last_algorithm, (_name), strlen((_name))+1); })
-
-
-/**
- * \brief Macro for allocating memory
- *
- * \param[in] count Number of elements to allocate
- * \param[in] type The type of the memory, excluding "*"
- * \return Address or NULL
- */
-#define MPIU_Calloc0(count, type) \
-({ \
- size_t __size = (count) * sizeof(type); \
- type* __p = MPIU_Malloc(__size); \
- MPID_assert(__p != NULL); \
- if (__p != NULL) \
- memset(__p, 0, __size); \
- __p; \
-})
-
-#define MPIU_TestFree(p) \
-({ \
- if (*(p) != NULL) \
- { \
- MPIU_Free(*(p)); \
- *(p) = NULL; \
- } \
-})
-
-
-#define MPID_VCR_GET_LPID(vcr, index) \
-({ \
- vcr[index]->taskid; \
-})
-
-#define MPID_VCR_GET_LPIDS(comm, taskids) \
-({ \
- int i; \
- taskids=MPIU_Malloc((comm->local_size)*sizeof(pami_task_t)); \
- MPID_assert(taskids != NULL); \
- for(i=0; i<comm->local_size; i++) \
- taskids[i] = comm->vcr[i]->taskid; \
-})
-#define MPID_VCR_FREE_LPIDS(taskids) MPIU_Free(taskids)
-
-#define MPID_GPID_Get(comm_ptr, rank, gpid) \
-({ \
- gpid[1] = MPID_VCR_GET_LPID(comm_ptr->vcr, rank); \
- gpid[0] = 0; \
- MPI_SUCCESS; /* return success from macro */ \
-})
-
-
-static inline void
-MPIDI_Context_post(pami_context_t context,
- pami_work_t * work,
- pami_work_function fn,
- void * cookie)
-{
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- /* It is possible that a work function posted to a context may attempt to
- * initiate a communication operation and, if context post were disabled, that
- * operation would be performed directly on the context BY TAKING A LOCK that
- * the is already held by the thread that is advancing the context. This will
- * result in a hang.
- *
- * A solution would be to identify all code flows where this situation might
- * occur and then change the code to avoid taking a lock that is already held.
- *
- * Another solution is to always disable the "non-context-post" configuration
- * when compiled with per-object locking. This would only occur if the
- * application requested !MPI_THREAD_MULTIPLE and the "pretend single threaded
- * by disabling async progress, context post, and multiple contexts" optimization
- * was in effect.
- */
- pami_result_t rc;
- rc = PAMI_Context_post(context, work, fn, cookie);
- MPID_assert(rc == PAMI_SUCCESS);
-#else /* (MPICH_THREAD_GRANULARITY != MPICH_THREAD_GRANULARITY_PER_OBJECT) */
- /*
- * It is not necessary to lock the context before access in the "global"
- * mpich lock mode because all threads, application and async progress,
- * must first acquire the global mpich lock upon entry into the library.
- */
- fn(context, cookie);
-#endif
-}
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
-#define MPIDI_Send_post(__func, __req) \
-({ \
- pami_context_t context = MPIDI_Context_local(__req); \
- \
- if (likely(MPIDI_Process.perobj.context_post.active > 0)) \
- { \
- pami_result_t rc; \
- rc = PAMI_Context_post(context, \
- &(__req)->mpid.post_request, \
- __func, \
- __req); \
- MPID_assert(rc == PAMI_SUCCESS); \
- } \
- else \
- { \
- PAMI_Context_lock(context); \
- __func(context, __req); \
- PAMI_Context_unlock(context); \
- } \
-})
-#else /* (MPICH_THREAD_GRANULARITY != MPICH_THREAD_GRANULARITY_PER_OBJECT) */
-#define MPIDI_Send_post(__func, __req) \
-({ \
- __func(MPIDI_Context[0], __req); \
-})
-#endif /* #if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT) */
-
-#endif
diff --git a/src/mpid/pamid/include/mpidi_mutex.h b/src/mpid/pamid/include/mpidi_mutex.h
deleted file mode 100644
index 396cdec..0000000
--- a/src/mpid/pamid/include/mpidi_mutex.h
+++ /dev/null
@@ -1,374 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_mutex.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef __include_mpidi_mutex_h__
-#define __include_mpidi_mutex_h__
-
-#include <opa_primitives.h>
-#include <mpiutil.h>
-#include <malloc.h>
-
-#define MPIDI_THREAD_ID() Kernel_ProcessorID()
-
-#if MPIDI_MUTEX_L2_ATOMIC
-
-
-
-#define MUTEX_FAIL 0x8000000000000000UL
-
-#include <spi/include/kernel/location.h>
-#include <spi/include/kernel/memory.h>
-#include <spi/include/l2/atomic.h>
-
-
-#define MPIDI_MAX_MUTEXES 16
-typedef struct
-{
- uint64_t counter;
- uint64_t bound;
-} MPIDI_Mutex_t;
-
-extern MPIDI_Mutex_t * MPIDI_Mutex_vector;
-extern uint32_t MPIDI_Mutex_counter[MPIDI_MAX_THREADS][MPIDI_MAX_MUTEXES];
-int MPIDI_Mutex_initialize();
-
-
-/**
- * \brief Try to acquire a mutex identified by an index.
- * \param[in] m Index of the mutex
- * \return 0 Lock successfully acquired
- * \return 1 Lock was not acquired
- */
-static inline int
-MPIDI_Mutex_try_acquire(unsigned m)
-{
-
-#if MPIDI_MUTEX_RECURSIVE
- size_t tid = MPIDI_THREAD_ID();
- MPID_assert(m < MPIDI_MAX_MUTEXES);
- if (MPIDI_Mutex_counter[tid][m] >= 1) {
- ++MPIDI_Mutex_counter[tid][m];
- return 0;
- }
-#endif
-
- MPIDI_Mutex_t *mutex = &(MPIDI_Mutex_vector[m]);
- size_t rc = L2_AtomicLoadIncrementBounded(&mutex->counter);
-
- if (rc == MUTEX_FAIL)
- return 1;
-
-#if MPIDI_MUTEX_RECURSIVE
- MPIDI_Mutex_counter[tid][m] = 1;
-#endif
- return 0; /* Lock succeeded */
-}
-
-
-/**
- * \brief Acquire a mutex identified by an index.
- * \param[in] m Index of the mutex
- * \return 0 Lock successfully acquired
- * \return 1 Fail
- */
-static inline int
-MPIDI_Mutex_acquire(unsigned m)
-{
-#if MPIDI_MUTEX_RECURSIVE
- size_t tid = MPIDI_THREAD_ID();
- MPID_assert(m < MPIDI_MAX_MUTEXES);
-
- if (unlikely(MPIDI_Mutex_counter[tid][m] >= 1)) {
- ++MPIDI_Mutex_counter[tid][m];
- return 0;
- }
-#endif
-
- MPIDI_Mutex_t *mutex = &(MPIDI_Mutex_vector[m]);
- size_t rc = 0;
- do {
- rc = L2_AtomicLoadIncrementBounded(&mutex->counter);
- } while (rc == MUTEX_FAIL);
-
-#if MPIDI_MUTEX_RECURSIVE
- MPIDI_Mutex_counter[tid][m] = 1;
-#endif
- return 0;
-}
-
-
-/**
- * \brief Release a mutex identified by an index.
- * \param[in] m Index of the mutex
- * \return 0 Lock successfully released
- * \return 1 Fail
- */
-static inline int
-MPIDI_Mutex_release(unsigned m)
-{
-#if MPIDI_MUTEX_RECURSIVE
- size_t tid = MPIDI_THREAD_ID();
- MPID_assert(m < MPIDI_MAX_MUTEXES);
- /* Verify this thread is the owner of this lock */
- MPID_assert(MPIDI_Mutex_counter[tid][m] > 0);
-
- --MPIDI_Mutex_counter[tid][m];
- MPID_assert(MPIDI_Mutex_counter[tid][m] >= 0);
- if (unlikely(MPIDI_Mutex_counter[tid][m] > 0))
- return 0; /* Future calls will release the lock to other threads */
-#endif
-
- /* Wait till all the writes in the critical sections from this
- thread have completed and invalidates have been delivered */
- //OPA_read_write_barrier();
-
- /* Release the lock */
- L2_AtomicStore(&(MPIDI_Mutex_vector[m].counter), 0);
-
- return 0;
-}
-
-
-#define MPIDI_Mutex_sync() OPA_read_write_barrier()
-
-
-
-#elif MPIDI_MUTEX_LLSC
-
-
-
-#include <spi/include/kernel/location.h>
-
-#define MPIDI_MAX_MUTEXES 16
-typedef OPA_int_t MPIDI_Mutex_t;
-extern MPIDI_Mutex_t MPIDI_Mutex_vector [MPIDI_MAX_MUTEXES];
-extern uint32_t MPIDI_Mutex_counter[MPIDI_MAX_THREADS][MPIDI_MAX_MUTEXES];
-
-/**
- * \brief Initialize a mutex.
- *
- * In this API, mutexes are acessed via indices from
- * 0..MPIDI_MAX_MUTEXES. The mutexes are recursive
- */
-static inline int
-MPIDI_Mutex_initialize()
-{
- size_t i, j;
- for (i=0; i<MPIDI_MAX_MUTEXES; ++i) {
- OPA_store_int(&(MPIDI_Mutex_vector[i]), 0);
- }
-
- for (i=0; i<MPIDI_MAX_MUTEXES; ++i) {
- for (j=0; j<MPIDI_MAX_THREADS; ++j) {
- MPIDI_Mutex_counter[j][i] = 0;
- }
- }
-
- return 0;
-}
-
-
-/**
- * \brief Try to acquire a mutex identified by an index.
- * \param[in] m Index of the mutex
- * \return 0 Lock successfully acquired
- * \return 1 Lock was not acquired
- */
-static inline int
-MPIDI_Mutex_try_acquire(unsigned m)
-{
- register int old_val;
- size_t tid = MPIDI_THREAD_ID();
-
- MPID_assert(m < MPIDI_MAX_MUTEXES);
-
- if (MPIDI_Mutex_counter[tid][m] >= 1) {
- ++MPIDI_Mutex_counter[tid][m];
- return 0;
- }
-
- MPIDI_Mutex_t *mutex = &(MPIDI_Mutex_vector[m]);
- old_val = OPA_LL_int(mutex);
- if (old_val != 0)
- return 1; /* Lock failed */
-
- int rc = OPA_SC_int(mutex, 1); /* returns 0 when SC fails */
-
- if (rc == 0)
- return 1; /* Lock failed */
-
- MPIDI_Mutex_counter[tid][m] = 1;
- return 0; /* Lock succeeded */
-}
-
-
-/**
- * \brief Acquire a mutex identified by an index.
- * \param[in] m Index of the mutex
- * \return 0 Lock successfully acquired
- * \return 1 Fail
- */
-static inline int
-MPIDI_Mutex_acquire(unsigned m)
-{
- register int old_val;
- size_t tid = MPIDI_THREAD_ID();
-
- MPID_assert(m < MPIDI_MAX_MUTEXES);
-
- if (unlikely(MPIDI_Mutex_counter[tid][m] >= 1)) {
- ++MPIDI_Mutex_counter[tid][m];
- return 0;
- }
-
- MPIDI_Mutex_t *mutex = &(MPIDI_Mutex_vector[m]);
- do {
- do {
- old_val = OPA_LL_int(mutex);
- } while (old_val != 0);
-
- } while (!OPA_SC_int(mutex, 1));
-
- MPIDI_Mutex_counter[tid][m] = 1;
- return 0;
-}
-
-
-/**
- * \brief Release a mutex identified by an index.
- * \param[in] m Index of the mutex
- * \return 0 Lock successfully released
- * \return 1 Fail
- */
-static inline int
-MPIDI_Mutex_release(unsigned m)
-{
- size_t tid = MPIDI_THREAD_ID();
- MPID_assert(m < MPIDI_MAX_MUTEXES);
- /* Verify this thread is the owner of this lock */
- MPID_assert(MPIDI_Mutex_counter[tid][m] > 0);
-
- --MPIDI_Mutex_counter[tid][m];
- MPID_assert(MPIDI_Mutex_counter[tid][m] >= 0);
- if (unlikely(MPIDI_Mutex_counter[tid][m] > 0))
- return 0; /* Future calls will release the lock to other threads */
-
- /* Wait till all the writes in the critical sections from this
- thread have completed and invalidates have been delivered */
- //OPA_read_write_barrier();
-
- /* Release the lock */
- OPA_store_int(&(MPIDI_Mutex_vector[m]), 0);
-
- return 0;
-}
-
-
-#define MPIDI_Mutex_sync() OPA_read_write_barrier()
-
-
-
-#else
-
-
-
-extern pthread_mutex_t MPIDI_Mutex_lock;
-
-static inline int
-MPIDI_Mutex_initialize()
-{
- int rc;
-
- pthread_mutexattr_t attr;
- rc = pthread_mutexattr_init(&attr);
- MPID_assert(rc == 0);
-#if !defined(__AIX__)
- extern int pthread_mutexattr_settype(pthread_mutexattr_t *__attr, int __kind) __THROW __nonnull ((1));
-#else
- extern int pthread_mutexattr_settype(pthread_mutexattr_t *__attr, int __kind);
-#endif
-#ifndef __PE__
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- rc = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
-#else /*(MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)*/
- rc = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK_NP);
-#endif /*(MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)*/
-#else /* __PE__ */
-#if !defined(__AIX__)
- rc = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
-#else
- rc = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-#endif
-#endif
- MPID_assert(rc == 0);
-
- rc = pthread_mutex_init(&MPIDI_Mutex_lock, &attr);
- MPID_assert(rc == 0);
-
- return 0;
-}
-
-
-static inline int
-MPIDI_Mutex_try_acquire(unsigned m)
-{
- int rc;
- rc = pthread_mutex_trylock(&MPIDI_Mutex_lock);
- MPID_assert( (rc == 0) || (rc == EBUSY) );
- /* fprintf(stderr, "%s:%u (rc=%d)\n", __FUNCTION__, __LINE__, rc); */
- return rc;
-}
-
-
-static inline int
-MPIDI_Mutex_acquire(unsigned m)
-{
- int rc;
- /* fprintf(stderr, "%s:%u\n", __FUNCTION__, __LINE__); */
- rc = pthread_mutex_lock(&MPIDI_Mutex_lock);
- /* fprintf(stderr, "%s:%u (rc=%d)\n", __FUNCTION__, __LINE__, rc); */
- MPID_assert(rc == 0);
- return rc;
-}
-
-
-static inline int
-MPIDI_Mutex_release(unsigned m)
-{
- int rc;
- rc = pthread_mutex_unlock(&MPIDI_Mutex_lock);
- /* fprintf(stderr, "%s:%u (rc=%d)\n", __FUNCTION__, __LINE__, rc); */
- MPID_assert(rc == 0);
- return rc;
-}
-
-
-#define MPIDI_Mutex_sync()
-
-
-#endif
-
-
-#endif
diff --git a/src/mpid/pamid/include/mpidi_platform.h b/src/mpid/pamid/include/mpidi_platform.h
deleted file mode 100644
index cd95e72..0000000
--- a/src/mpid/pamid/include/mpidi_platform.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_platform.h
- * \brief ???
- */
-
-
-#ifndef __include_mpidi_platform_h__
-#define __include_mpidi_platform_h__
-
-/* Allow MPICH to detect local tasks */
-#define MPID_USE_NODE_IDS
-typedef int32_t MPID_Node_id_t;
-
-/* Default values */
-
-#define MPIDI_MAX_CONTEXTS 64
-/** This is not the real value, but should default to something larger than PAMI_DISPATCH_SEND_IMMEDIATE_MAX */
-#define MPIDI_SHORT_LIMIT 555
-/** This is set to 4 BGQ torus packets (+1, because of the way it is compared) */
-#define MPIDI_EAGER_LIMIT 2049
-/** This is set to 0 which effectively disables the eager protocol for local transfers */
-#define MPIDI_EAGER_LIMIT_LOCAL 0
-/** This is set to 'max unsigned' which effectively never disables internal eager at scale */
-#define MPIDI_DISABLE_INTERNAL_EAGER_SCALE ((unsigned)-1)
-
-/* Default features */
-#define USE_PAMI_RDMA 1
-#define USE_PAMI_CONSISTENCY PAMI_HINT_ENABLE
-#undef OUT_OF_ORDER_HANDLING
-#undef DYNAMIC_TASKING
-#undef RDMA_FAILOVER
-#undef QUEUE_BINARY_SEARCH_SUPPORT
-
-#define ASYNC_PROGRESS_MODE_DEFAULT 0
-
-/*
- * The default behavior is to disable (ignore) the 'internal vs application' and
- * the 'local vs remote' point-to-point eager limits.
- */
-#define MPIDI_PT2PT_EAGER_LIMIT(is_internal,is_local) \
-({ \
- MPIDI_Process.pt2pt.limits_lookup[0][0][0]; \
-})
-
-/*
- * The default behavior is to disable (ignore) the 'internal vs application' and
- * the 'local vs remote' point-to-point short limits.
- */
-#define MPIDI_PT2PT_SHORT_LIMIT(is_internal,is_local) \
-({ \
- MPIDI_Process.pt2pt.limits_lookup[0][1][0]; \
-})
-
-
-
-#ifdef __BGQ__
-#undef MPIDI_EAGER_LIMIT_LOCAL
-#define MPIDI_EAGER_LIMIT_LOCAL 4097
-#undef MPIDI_EAGER_LIMIT
-#define MPIDI_EAGER_LIMIT 4097
-#undef MPIDI_DISABLE_INTERNAL_EAGER_SCALE
-#define MPIDI_DISABLE_INTERNAL_EAGER_SCALE (512*1024)
-#define MPIDI_MAX_THREADS 64
-#define MPIDI_MUTEX_L2_ATOMIC 1
-#define MPIDI_OPTIMIZED_COLLECTIVE_DEFAULT 1
-
-#define PAMIX_IS_LOCAL_TASK
-#define PAMIX_IS_LOCAL_TASK_STRIDE (4)
-#define PAMIX_IS_LOCAL_TASK_SHIFT (6)
-#define MPIDI_SMP_DETECT_DEFAULT 1
-#define TOKEN_FLOW_CONTROL 0
-#define CUDA_AWARE_SUPPORT 0
-
-/*
- * Enable both the 'internal vs application' and the 'local vs remote'
- * point-to-point eager limits.
- */
-#undef MPIDI_PT2PT_EAGER_LIMIT
-#define MPIDI_PT2PT_EAGER_LIMIT(is_internal,is_local) \
-({ \
- MPIDI_Process.pt2pt.limits_lookup[is_internal][0][is_local]; \
-})
-
-/*
- * Enable both the 'internal vs application' and the 'local vs remote'
- * point-to-point short limits.
- */
-#undef MPIDI_PT2PT_SHORT_LIMIT
-#define MPIDI_PT2PT_SHORT_LIMIT(is_internal,is_local) \
-({ \
- MPIDI_Process.pt2pt.limits_lookup[is_internal][1][is_local]; \
-})
-
-
-#undef ASYNC_PROGRESS_MODE_DEFAULT
-#define ASYNC_PROGRESS_MODE_DEFAULT 1
-
-static const char _ibm_release_version_[] = "V1R2M0";
-#endif
-
-#ifdef __PE__
-
-/*
- * This 'maximum contexts' define needs to be changed when mpich on PE
- * will support multiple contexts. Currently the PE PAMI allows multiple
- * contexts, but the PE mpich code is not set up to use them.
- */
-#undef MPIDI_MAX_CONTEXTS
-#define MPIDI_MAX_CONTEXTS 1
-
-#undef USE_PAMI_CONSISTENCY
-#define USE_PAMI_CONSISTENCY PAMI_HINT_DISABLE
-#undef MPIDI_SHORT_LIMIT
-#define MPIDI_SHORT_LIMIT 256 - sizeof(MPIDI_MsgInfo)
-#undef MPIDI_EAGER_LIMIT
-#define MPIDI_EAGER_LIMIT 65536
-#undef MPIDI_EAGER_LIMIT_LOCAL
-#define MPIDI_EAGER_LIMIT_LOCAL 1048576
-#define OUT_OF_ORDER_HANDLING 1
-#define MPIDI_STATISTICS 1
-#define MPIDI_PRINTENV 1
-#define MPIDI_OPTIMIZED_COLLECTIVE_DEFAULT 0
-#undef USE_PAMI_RDMA
-#define RDMA_FAILOVER
-#define MPIDI_BANNER 1
-#define MPIDI_NO_ASSERT 1
-#define TOKEN_FLOW_CONTROL 1
-#define DYNAMIC_TASKING 1
-#define CUDA_AWARE_SUPPORT 1
-
-/* 'is local task' extension and limits */
-#define PAMIX_IS_LOCAL_TASK
-#define PAMIX_IS_LOCAL_TASK_STRIDE (1)
-#define PAMIX_IS_LOCAL_TASK_SHIFT (0)
-#define MPIDI_SMP_DETECT_DEFAULT 1
-/*
- * Enable only the 'local vs remote' point-to-point eager limits.
- */
-#undef MPIDI_PT2PT_EAGER_LIMIT
-#define MPIDI_PT2PT_EAGER_LIMIT(is_internal,is_local) \
-({ \
- MPIDI_Process.pt2pt.limits_lookup[0][0][is_local]; \
-})
-
-/*
- * Enable only the 'local vs remote' point-to-point short limits.
- */
-#undef MPIDI_PT2PT_SHORT_LIMIT
-#define MPIDI_PT2PT_SHORT_LIMIT(is_internal,is_local) \
-({ \
- MPIDI_Process.pt2pt.limits_lookup[0][1][is_local]; \
-})
-
-
-#undef ASYNC_PROGRESS_MODE_DEFAULT
-#define ASYNC_PROGRESS_MODE_DEFAULT 2
-
-/* When the Pok build team extracts this file from CMVC, %W% will expand to */
-/* a string with the current release, for example ppe_rbarlx. */
-/* If this file is cloned from GIT then %W% will not be expanded. The */
-/* banner code has accounted for this situation. */
-static const char _ibm_release_version_[] = "%W%";
-
-#endif
-
-#if TOKEN_FLOW_CONTROL
-#define BUFFER_MEM_DEFAULT (1<<26) /* 64MB */
-#define BUFFER_MEM_MAX (1<<26) /* 64MB */
-#define ONE_SHARED_SEGMENT (1<<28) /* 256MB */
-#define EAGER_LIMIT_DEFAULT 65536
-#define MAX_BUF_BKT_SIZE (1<<18) /* Max eager_limit is 256K */
-#define MIN_BUF_BKT_SIZE (64)
-#define TOKENS_BIT (4) /* 4 bits piggy back to sender */
- /* should be consistent with tokens
- defined in MPIDI_MsgInfo */
-#define TOKENS_BITMASK ((1 << TOKENS_BIT)-1)
-#endif
-
-#endif
diff --git a/src/mpid/pamid/include/mpidi_prototypes.h b/src/mpid/pamid/include/mpidi_prototypes.h
deleted file mode 100644
index d12f241..0000000
--- a/src/mpid/pamid/include/mpidi_prototypes.h
+++ /dev/null
@@ -1,460 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_prototypes.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifndef __include_mpidi_prototypes_h__
-#define __include_mpidi_prototypes_h__
-
-#if CUDA_AWARE_SUPPORT
-#include <cuda_runtime_api.h>
-#endif
-
-
-/**
- * \addtogroup MPID_RECVQ
- * \{
- */
-void MPIDI_Recvq_init();
-void MPIDI_Recvq_finalize();
-int MPIDI_Recvq_FU (int s, int t, int c, MPI_Status * status);
-MPID_Request * MPIDI_Recvq_FDUR (MPI_Request req, int source, int tag, int context_id);
-int MPIDI_Recvq_FDPR (MPID_Request * req);
-#ifndef OUT_OF_ORDER_HANDLING
-MPID_Request * MPIDI_Recvq_FDP_or_AEU(MPID_Request *newreq, int s, int t, int c, int * foundp);
-MPID_Request * MPIDI_Recvq_FDU (int source, int tag, int context_id, int * foundp);
-MPID_Request * MPIDI_Recvq_AEU (MPID_Request *newreq, int source, int tag, int context_id);
-#else
-MPID_Request * MPIDI_Recvq_FDP_or_AEU(MPID_Request *newreq, int s, pami_task_t ps, int t, int c, int sq, int * foundp);
-MPID_Request * MPIDI_Recvq_FDU (int source, pami_task_t pami_source, int tag, int context_id, int * foundp);
-MPID_Request * MPIDI_Recvq_AEU (MPID_Request *newreq, int source, pami_task_t pami_source, int tag, int context_id, int msg_seqno);
-#endif
-void MPIDI_Recvq_DumpQueues (int verbose);
-#ifdef OUT_OF_ORDER_HANDLING
-void MPIDI_Recvq_enqueue_ool (pami_task_t s, MPID_Request * r);
-void MPIDI_Recvq_insert_ool (MPID_Request *q,MPID_Request *e);
-#endif
-/** \} */
-
-void MPIDI_Buffer_copy(const void * const sbuf,
- MPI_Aint scount,
- MPI_Datatype sdt,
- int * smpi_errno,
- void * const rbuf,
- MPI_Aint rcount,
- MPI_Datatype rdt,
- MPIDI_msg_sz_t * rsz,
- int * rmpi_errno);
-
-pami_result_t MPIDI_Send_handoff (pami_context_t context, void * sreq);
-pami_result_t MPIDI_Ssend_handoff(pami_context_t context, void * sreq);
-pami_result_t MPIDI_Isend_handoff(pami_context_t context, void * sreq);
-pami_result_t MPIDI_Isend_handoff_internal(pami_context_t context, void * sreq);
-
-void MPIDI_RecvMsg_procnull(MPID_Comm * comm,
- unsigned is_blocking,
- MPI_Status * status,
- MPID_Request ** request);
-void MPIDI_RecvMsg_Unexp(MPID_Request * rreq, void * buf, MPI_Aint count, MPI_Datatype datatype);
-
-/**
- * \defgroup MPID_CALLBACKS MPID callbacks for communication
- *
- * These calls are used to manage message asynchronous start and completion
- *
- * \addtogroup MPID_CALLBACKS
- * \{
- */
-void MPIDI_SendDoneCB (pami_context_t context,
- void * clientdata,
- pami_result_t result);
-
-void MPIDI_RecvShortAsyncCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void MPIDI_RecvShortSyncCB (pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void MPIDI_RecvCB (pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void MPIDI_RecvRzvCB (pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void MPIDI_RecvRzvCB_zerobyte (pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void MPIDI_RecvDoneCB (pami_context_t context,
- void * clientdata,
- pami_result_t result);
-void MPIDI_RecvDoneCB_mutexed(pami_context_t context,
- void * clientdata,
- pami_result_t result);
-void MPIDI_RecvRzvDoneCB (pami_context_t context,
- void * cookie,
- pami_result_t result);
-void MPIDI_RecvRzvDoneCB_zerobyte (pami_context_t context,
- void * cookie,
- pami_result_t result);
-#ifdef DYNAMIC_TASKING
-void MPIDI_Recvfrom_remote_world (pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void MPIDI_Recvfrom_remote_world_disconnect (pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-#endif
-#ifdef OUT_OF_ORDER_HANDLING
-void MPIDI_Recvq_process_out_of_order_msgs(pami_task_t src, pami_context_t context);
-int MPIDI_Recvq_search_recv_posting_queue(int src, int tag, int context_id,
- MPID_Request **handleptr );
-#endif
-
-void MPIDI_Callback_process_unexp(MPID_Request *newreq,
- pami_context_t context,
- const MPIDI_MsgInfo * msginfo,
- size_t sndlen,
- pami_endpoint_t senderendpoint,
- const void * sndbuf,
- pami_recv_t * recv,
- unsigned isSync);
-void MPIDI_Callback_process_trunc(pami_context_t context,
- MPID_Request *rreq,
- pami_recv_t *recv,
- const void *sndbuf);
-void MPIDI_Callback_process_userdefined_dt(pami_context_t context,
- const void * sndbuf,
- size_t sndlen,
- MPID_Request * rreq);
-/** \} */
-
-
-/** \brief Acknowledge an MPI_Ssend() */
-void MPIDI_SyncAck_post(pami_context_t context, MPID_Request * req, unsigned rank);
-pami_result_t MPIDI_SyncAck_handoff(pami_context_t context, void * inputReq);
-/** \brief This is the general PT2PT control message call-back */
-void MPIDI_ControlCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void
-MPIDI_WinControlCB(pami_context_t context,
- void * cookie,
- const void * _control,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void
-MPIDI_WinAtomicCB(pami_context_t context,
- void * cookie,
- const void * _control,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void
-MPIDI_WinAtomicAckCB(pami_context_t context,
- void * cookie,
- const void * _control,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-
-
-void
-MPIDI_WinGetAccumCB(pami_context_t context,
- void * cookie,
- const void * _control,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-void
-MPIDI_WinGetAccumAckCB(pami_context_t context,
- void * cookie,
- const void * _control,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-
-/** \brief Helper function to complete a rendevous transfer */
-pami_result_t MPIDI_RendezvousTransfer(pami_context_t context, void* rreq);
-pami_result_t MPIDI_RendezvousTransfer_SyncAck(pami_context_t context, void* rreq);
-pami_result_t MPIDI_RendezvousTransfer_zerobyte(pami_context_t context, void* rreq);
-
-
-int MPIDI_Comm_create (MPID_Comm *comm);
-int MPIDI_Comm_destroy (MPID_Comm *comm);
-void MPIDI_Coll_comm_create (MPID_Comm *comm);
-void MPIDI_Coll_comm_destroy (MPID_Comm *comm);
-void MPIDI_Env_setup ();
-void MPIDI_Comm_world_setup ();
-
-pami_result_t MPIDI_Comm_create_from_pami_geom(pami_geometry_range_t *task_slices,
- size_t slice_count,
- pami_geometry_t *geometry,
- void **cookie);
-pami_result_t MPIDI_Comm_destroy_external(void *comm_ext);
-pami_result_t MPIDI_Register_algorithms_ext(void *cookie,
- pami_xfer_type_t collective,
- advisor_algorithm_t **algorithms,
- size_t *num_algorithms);
-int MPIDI_collsel_pami_tune_parse_params(int argc, char ** argv);
-void MPIDI_collsel_pami_tune_cleanup();
-#if CUDA_AWARE_SUPPORT
-int CudaMemcpy( void* dst, const void* src, size_t count, int kind );
-int CudaPointerGetAttributes( struct cudaPointerAttributes* attributes, const void* ptr );
-const char * CudaGetErrorString( int error);
-#endif
-inline bool MPIDI_enable_cuda();
-inline bool MPIDI_cuda_is_device_buf(const void* ptr);
-void MPIDI_Coll_Comm_create (MPID_Comm *comm);
-void MPIDI_Coll_Comm_destroy(MPID_Comm *comm);
-void MPIDI_Comm_coll_query (MPID_Comm *comm);
-void MPIDI_Comm_coll_envvars(MPID_Comm *comm);
-void MPIDI_Comm_coll_select(MPID_Comm *comm);
-void MPIDI_Coll_register (void);
-
-int MPIDO_Bcast(void *buffer, int count, MPI_Datatype dt, int root, MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_Bcast_simple(void *buffer, int count, MPI_Datatype dt, int root, MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_bcast(pami_xfer_t *bcast, void *comm);
-int MPIDO_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Request **request);
-int MPIDO_Barrier(MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_Barrier_simple(MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_barrier(pami_xfer_t *barrier, void *comm);
-int MPIDO_Ibarrier(MPID_Comm *comm_ptr, MPID_Request **request);
-
-int MPIDO_Allreduce(const void *sbuffer, void *rbuffer, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_Allreduce_simple(const void *sbuffer, void *rbuffer, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_allreduce(pami_xfer_t *allreduce, void *comm);
-int MPIDO_Iallreduce(const void *sbuffer, void *rbuffer, int count,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Request ** request);
-int MPIDO_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_Reduce_simple(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_reduce(pami_xfer_t *reduce, void *comm);
-int MPIDO_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Request **request);
-int MPIDO_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_Allgather_simple(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_allgather(pami_xfer_t *allgather, void *comm);
-int MPIDO_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
- int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
- MPID_Request **request);
-
-int MPIDO_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Allgatherv_simple(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_allgatherv(pami_xfer_t *allgatherv, void *comm);
-int MPIDO_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs,
- MPI_Datatype recvtype, MPID_Comm * comm_ptr,
- MPID_Request ** request);
-
-int MPIDO_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Gather_simple(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_gather(pami_xfer_t *gather, void *comm);
-int MPIDO_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, MPID_Request **request);
-
-int MPIDO_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Gatherv_simple(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_gatherv(pami_xfer_t *gatherv, void *comm);
-int MPIDO_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, MPID_Request **request);
-
-int MPIDO_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Scan_simple(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_scan(pami_xfer_t *scan, void *comm);
-int MPIDO_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request);
-
-int MPIDO_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Exscan_simple(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request);
-
-int MPIDO_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Scatter_simple(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_scatter(pami_xfer_t *scatter, void *comm);
-int MPIDO_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, MPID_Request **request);
-
-int MPIDO_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
- MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_Scatterv_simple(const void *sendbuf, const int *sendcounts, const int *displs,
- MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_scatterv(pami_xfer_t *scatterv, void *comm);
-int MPIDO_Iscatterv(const void *sendbuf, const int *sendcounts, const int *displs,
- MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- int root, MPID_Comm * comm_ptr, MPID_Request **request);
-
-int MPIDO_Alltoallv(const void *sendbuf, const int *sendcounts, const int *senddispls,
- MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *recvdispls,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_Alltoallv_simple(const void *sendbuf, const int *sendcounts, const int *senddispls,
- MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *recvdispls,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_alltoallv(pami_xfer_t *alltoallv, void *comm);
-int MPIDO_Ialltoallv(const void *sendbuf, const int *sendcounts, const int *senddispls,
- MPI_Datatype sendtype,
- void *recvbuf, const int *recvcounts, const int *recvdispls,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPID_Request **request);
-
-int MPIDO_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_Alltoall_simple(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, int *mpierrno);
-int MPIDO_CSWrapper_alltoall(pami_xfer_t *alltoall, void *comm);
-int MPIDO_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
- void *recvbuf, int recvcount, MPI_Datatype recvtype,
- MPID_Comm *comm_ptr, MPID_Request **request);
-
-int MPIDO_Ialltoallw(const void *sendbuf, const int *sendcounts, const int *senddispls,
- const MPI_Datatype * sendtypes,
- void *recvbuf, const int *recvcounts, const int *recvdispls,
- const MPI_Datatype * recvtypes,
- MPID_Comm *comm_ptr, MPID_Request **request);
-
-int MPIDO_Reduce_scatter(const void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm *comm_ptr, int *mpierrno);
-
-int MPIDO_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, int *mpierrno);
-
-int MPIDO_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
- MPID_Request **request);
-
-int MPIDO_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int *recvcounts,
- MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
-
-int MPIDI_Datatype_to_pami(MPI_Datatype dt,
- pami_type_t *pdt,
- MPI_Op op,
- pami_data_function *pop,
- int *musupport);
-
-int MPIDI_Dtpami_to_dtmpi(pami_type_t pdt,
- MPI_Datatype *dt,
- pami_data_function pop,
- MPI_Op *op);
-void MPIDI_Op_to_string(MPI_Op op, char *string);
-pami_result_t MPIDI_Pami_post_wrapper(pami_context_t context, void *cookie);
-
-
-void MPIDI_NBC_init ();
-
-
-#endif
diff --git a/src/mpid/pamid/include/mpidi_thread.h b/src/mpid/pamid/include/mpidi_thread.h
deleted file mode 100644
index d279f27..0000000
--- a/src/mpid/pamid/include/mpidi_thread.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_thread.h
- * \brief ???
- *
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#include "mpidi_mutex.h"
-
-
-#ifndef __include_mpidi_thread_h__
-#define __include_mpidi_thread_h__
-
-
-/**
- * ******************************************************************
- * \brief Mutexes for thread/interrupt safety
- * ******************************************************************
- */
-
-/* This file is included by mpidpre.h, so it is included before mpiimplthread.h.
- * This is intentional because it lets us override the critical section macros */
-
-#define MPID_DEVICE_DEFINES_THREAD_CS 1
-
-
-#if (MPICH_THREAD_LEVEL != MPI_THREAD_MULTIPLE)
-#error MPICH_THREAD_LEVEL should be MPI_THREAD_MULTIPLE
-#endif
-
-#define MPIU_THREAD_CS_INIT ({ MPIDI_Mutex_initialize(); })
-#define MPIU_THREAD_CS_FINALIZE
-
-#define MPIU_THREADSAFE_INIT_DECL(_var) static volatile int _var=1
-#define MPIU_THREADSAFE_INIT_BLOCK_BEGIN(_var) \
- MPIU_THREAD_CS_ENTER(INITFLAG,); \
- if (_var) \
- {
-#define MPIU_THREADSAFE_INIT_CLEAR(_var) _var=0
-#define MPIU_THREADSAFE_INIT_BLOCK_END(_var) \
- } \
- MPIU_THREAD_CS_EXIT(INITFLAG,)
-
-
-#define MPIU_THREAD_CS_ENTER(name,_context) MPIU_THREAD_CS_##name##_ENTER(_context)
-#define MPIU_THREAD_CS_EXIT(name,_context) MPIU_THREAD_CS_##name##_EXIT (_context)
-#define MPIU_THREAD_CS_YIELD(name,_context) MPIU_THREAD_CS_##name##_YIELD(_context)
-#define MPIU_THREAD_CS_SCHED_YIELD(name,_context) MPIU_THREAD_CS_##name##_SCHED_YIELD(_context)
-#define MPIU_THREAD_CS_TRY(name,_context) MPIU_THREAD_CS_##name##_TRY(_context)
-
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL
-
-#define MPIDI_CS_ENTER(m) ({ if (MPIR_ThreadInfo.isThreaded) { MPIDI_Mutex_acquire(m); } })
-#define MPIDI_CS_EXIT(m) ({ if (MPIR_ThreadInfo.isThreaded) { MPIDI_Mutex_sync(); MPIDI_Mutex_release(m); } })
-#define MPIDI_CS_YIELD(m) ({ if (MPIR_ThreadInfo.isThreaded) { MPIDI_Mutex_sync(); MPIDI_Mutex_release(m); MPIDI_Mutex_acquire(m); } })
-#define MPIDI_CS_TRY(m) ({ (0==MPIDI_Mutex_try_acquire(m)); })
-#define MPIDI_CS_SCHED_YIELD(m) ({ if (MPIR_ThreadInfo.isThreaded) { MPIDI_Mutex_sync(); MPIDI_Mutex_release(m); sched_yield(); MPIDI_Mutex_acquire(m); } })
-
-/* There is a single, global lock, held for the duration of an MPI call */
-#define MPIU_THREAD_CS_ALLFUNC_ENTER(_context) MPIDI_CS_ENTER(0)
-#define MPIU_THREAD_CS_ALLFUNC_EXIT(_context) MPIDI_CS_EXIT (0)
-#define MPIU_THREAD_CS_ALLFUNC_YIELD(_context) MPIDI_CS_YIELD(0)
-#define MPIU_THREAD_CS_ALLFUNC_SCHED_YIELD(_context) MPIDI_CS_SCHED_YIELD(0)
-#define MPIU_THREAD_CS_ALLFUNC_TRY(_context) MPIDI_CS_TRY(0)
-#define MPIU_THREAD_CS_INIT_ENTER(_context) MPIDI_Mutex_acquire(0)
-#define MPIU_THREAD_CS_INIT_EXIT(_context) MPIDI_Mutex_release(0)
-
-#define MPIU_THREAD_CS_CONTEXTID_ENTER(_context)
-#define MPIU_THREAD_CS_CONTEXTID_EXIT(_context)
-#define MPIU_THREAD_CS_CONTEXTID_YIELD(_context) MPIDI_CS_YIELD(0)
-#define MPIU_THREAD_CS_CONTEXTID_SCHED_YIELD(_context) MPIDI_CS_SCHED_YIELD(0)
-#define MPIU_THREAD_CS_HANDLEALLOC_ENTER(_context)
-#define MPIU_THREAD_CS_HANDLEALLOC_EXIT(_context)
-#define MPIU_THREAD_CS_HANDLE_ENTER(_context)
-#define MPIU_THREAD_CS_HANDLE_EXIT(_context)
-#define MPIU_THREAD_CS_INITFLAG_ENTER(_context)
-#define MPIU_THREAD_CS_INITFLAG_EXIT(_context)
-#define MPIU_THREAD_CS_MEMALLOC_ENTER(_context)
-#define MPIU_THREAD_CS_MEMALLOC_EXIT(_context)
-#define MPIU_THREAD_CS_MPI_OBJ_ENTER(_context) MPIDI_CS_ENTER(5)
-#define MPIU_THREAD_CS_MPI_OBJ_EXIT(_context) MPIDI_CS_EXIT(5)
-#define MPIU_THREAD_CS_MSGQUEUE_ENTER(_context)
-#define MPIU_THREAD_CS_MSGQUEUE_EXIT(_context)
-#define MPIU_THREAD_CS_PAMI_ENTER(_context)
-#define MPIU_THREAD_CS_PAMI_EXIT(_context)
-#define MPIU_THREAD_CS_ASYNC_ENTER(_context) MPIDI_CS_ENTER(8)
-#define MPIU_THREAD_CS_ASYNC_EXIT(_context) MPIDI_CS_EXIT (8)
-
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT
-
-#define MPIDI_CS_ENTER(m) \
- do { \
- if (likely(MPIR_ThreadInfo.isThreaded)) { \
- MPIDI_Mutex_acquire(m); \
- } \
- } while (0)
-
-#define MPIDI_CS_EXIT(m) \
- do { \
- if (likely(MPIR_ThreadInfo.isThreaded)) { \
- MPIDI_Mutex_sync(); \
- MPIDI_Mutex_release(m); \
- } \
- } while (0)
-
-#define MPIDI_CS_YIELD(m) \
- do { \
- if (likely(MPIR_ThreadInfo.isThreaded)) { \
- MPIDI_Mutex_sync(); \
- MPIDI_Mutex_release(m); \
- MPIDI_Mutex_acquire(m); \
- } \
- } while (0)
-
-#define MPIDI_CS_TRY(m) \
- do { \
- if (likely(MPIR_ThreadInfo.isThreaded)) { \
- MPIDI_Mutex_try_acquire(m); \
- } \
- } while (0)
-
-#define MPIDI_CS_SCHED_YIELD(m) \
- do { \
- if (likely(MPIR_ThreadInfo.isThreaded)) { \
- MPIDI_Mutex_sync(); \
- MPIDI_Mutex_release(m); \
- sched_yield(); \
- MPIDI_Mutex_acquire(m); \
- } \
- } while (0)
-
-#define MPIU_THREAD_CS_ALLFUNC_ENTER(_context)
-#define MPIU_THREAD_CS_ALLFUNC_EXIT(_context)
-#define MPIU_THREAD_CS_ALLFUNC_YIELD(_context)
-#define MPIU_THREAD_CS_ALLFUNC_SCHED_YIELD(_context)
-#define MPIU_THREAD_CS_ALLFUNC_TRY(_context) (0)
-
-#define MPIU_THREAD_CS_INIT_ENTER(_context) MPIDI_CS_ENTER(0)
-#define MPIU_THREAD_CS_INIT_EXIT(_context) MPIDI_CS_EXIT(0)
-
-#define MPIU_THREAD_CS_CONTEXTID_ENTER(_context) MPIDI_CS_ENTER(0)
-#define MPIU_THREAD_CS_CONTEXTID_EXIT(_context) MPIDI_CS_EXIT (0)
-#define MPIU_THREAD_CS_CONTEXTID_YIELD(_context) MPIDI_CS_YIELD(0)
-#define MPIU_THREAD_CS_CONTEXTID_SCHED_YIELD(_context) MPIDI_CS_SCHED_YIELD(0)
-#define MPIU_THREAD_CS_HANDLEALLOC_ENTER(_context) MPIDI_CS_ENTER(1)
-#define MPIU_THREAD_CS_HANDLEALLOC_EXIT(_context) MPIDI_CS_EXIT (1)
-#define MPIU_THREAD_CS_HANDLE_ENTER(_context) MPIDI_CS_ENTER(2)
-#define MPIU_THREAD_CS_HANDLE_EXIT(_context) MPIDI_CS_EXIT (2)
-#define MPIU_THREAD_CS_INITFLAG_ENTER(_context) MPIDI_CS_ENTER(3)
-#define MPIU_THREAD_CS_INITFLAG_EXIT(_context) MPIDI_CS_EXIT (3)
-#define MPIU_THREAD_CS_MEMALLOC_ENTER(_context) MPIDI_CS_ENTER(4)
-#define MPIU_THREAD_CS_MEMALLOC_EXIT(_context) MPIDI_CS_EXIT (4)
-#define MPIU_THREAD_CS_MPI_OBJ_ENTER(context_) MPIDI_CS_ENTER(5)
-#define MPIU_THREAD_CS_MPI_OBJ_EXIT(context_) MPIDI_CS_EXIT (5)
-#define MPIU_THREAD_CS_MSGQUEUE_ENTER(_context) MPIDI_CS_ENTER(6)
-#define MPIU_THREAD_CS_MSGQUEUE_EXIT(_context) MPIDI_CS_EXIT (6)
-#define MPIU_THREAD_CS_PAMI_ENTER(_context) MPIDI_CS_ENTER(7)
-#define MPIU_THREAD_CS_PAMI_EXIT(_context) MPIDI_CS_EXIT (7)
-#define MPIU_THREAD_CS_ASYNC_ENTER(_context) MPIDI_CS_ENTER(8)
-#define MPIU_THREAD_CS_ASYNC_EXIT(_context) MPIDI_CS_EXIT (8)
-
-#endif /* MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL */
-
-
-#endif /* !MPICH_MPIDTHREAD_H_INCLUDED */
diff --git a/src/mpid/pamid/include/mpidi_trace.h b/src/mpid/pamid/include/mpidi_trace.h
deleted file mode 100644
index a921e68..0000000
--- a/src/mpid/pamid/include/mpidi_trace.h
+++ /dev/null
@@ -1,266 +0,0 @@
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_trace.h
- * \brief record trace info. for pt2pt comm.
- */
-/*
- *
- *
- */
-
-
-#ifndef __include_mpidi_trace_h__
-#define __include_mpidi_trace_h__
-
-#include <sys/time.h>
-#include <sys/param.h>
-
-#ifdef MPIDI_TRACE
-#define N_MSGS 1024
-#define SEQMASK N_MSGS-1
-typedef struct {
- void *req; /* address of request */
- void *bufadd; /* user's receive buffer address */
- uint msgid; /* msg seqno. */
- unsigned short ctx; /* mpi context id */
- unsigned short dummy; /* reserved */
- uint nMsgs; /* highest msg seqno that arrived in order */
- int tag;
- int len;
- int rsource; /* source of the message arrived */
- int rtag; /* tag of a received message */
- int rlen; /* len of a received message */
- int rctx; /* context of a received message */
- void * matchedHandle; /* a message with multiple handles */
- union {
- uint flags;
- struct {
-#ifdef __BIG_ENDIAN__
- uint posted:1; /* has the receive posted */
- uint rzv:1; /* rendezvous message ? */
- uint sync:1; /* synchronous message? */
- uint sendAck:1; /* send ack? */
- uint sendFin:1; /* send complete info? */
- uint HH:1; /* header handler */
- uint ool:1; /* the msg arrived out of order */
- uint matchedInOOL:1;/* found a match in out of order list */
- uint comp_in_HH:4; /* the msg completed in header handler */
- uint comp_in_HHV_noMatch:1;/* no matched in header handler EA */
- uint sync_com_in_HH:1; /* sync msg completed in header handler*/
- uint matchedInHH:1; /* found a match in header haldner */
- uint matchedInComp:1;/* found a match in completion handler */
- uint matchedInUQ:2; /* found a match in unexpected queue */
- uint matchedInUQ2:2;/* found a match in unexpected queue */
- uint matchedInWait:1;/* found a match in MPI_Wait() etc. */
- uint ReadySend:1; /* a ready send messsage */
- uint persist:1; /* persist communication */
- uint reserve:1;
- uint reserve1:8;
-#else
- uint reserve1:8;
- uint reserve:1;
- uint persist:1; /* persist communication */
- uint ReadySend:1; /* a ready send messsage */
- uint matchedInWait:1;/* found a match in MPI_Wait() etc. */
- uint matchedInUQ2:2;/* found a match in unexpected queue */
- uint matchedInUQ:2; /* found a match in unexpected queue */
- uint matchedInComp:1;/* found a match in completion handler */
- uint matchedInHH:1; /* found a match in header haldner */
- uint sync_com_in_HH:1; /* sync msg completed in header handler*/
- uint comp_in_HHV_noMatch:1;/* no matched in header handler EA */
- uint comp_in_HH:4; /* the msg completed in header handler */
- uint matchedInOOL:1;/* found a match in out of order list */
- uint ool:1; /* the msg arrived out of order */
- uint HH:1; /* header handler */
- uint sendFin:1; /* send complete info? */
- uint sendAck:1; /* send ack? */
- uint sync:1; /* synchronous message? */
- uint rzv:1; /* rendezvous message ? */
- uint posted:1; /* has the receive posted */
-#endif
- }f;
- }fl;
-} recv_status;
-
-typedef struct {
- void *req; /* address of request */
- void *bufaddr; /* address of user's send buffer */
- int dest; /* destination of a message */
- int rank; /* rank in a communicator */
- int mode; /* protocol used */
- uint msgid; /* message sequence no. */
- unsigned short sctx; /* context id */
- unsigned short dummy;
- int tag; /* tag of a message */
- int len; /* lengh of a message */
- union {
- uint flags;
- struct {
-#ifdef __BIG_ENDIAN__
- uint blocking:1; /* blocking send ? */
- uint sync:1; /* sync message */
- uint sendEnvelop:1; /* envelop send? */
- uint sendShort:1; /* send immediate */
- uint sendEager:1; /* eager send */
- uint sendRzv:1; /* send via renzdvous protocol */
- uint memRegion:1; /* memory is registered */
- uint use_pami_get:1;/* use only PAMI_Get() */
- uint NoComp:4; /* no completion handler */
- uint sendComp:1; /* send complete */
- uint recvAck:1; /* recv an ack from the receiver */
- uint recvFin:1; /* recv complete information */
- uint complSync:1; /* complete sync */
- uint ReadySend:1; /* ready send */
- uint reqXfer:1; /* request message transfer */
- uint persist:1; /* persistent communiation */
- uint reserve:5;
- uint reserve1:8;
-#else
- uint reserve1:8;
- uint reserve:5;
- uint persist:1; /* persistent communiation */
- uint reqXfer:1; /* request message transfer */
- uint ReadySend:1; /* ready send */
- uint complSync:1; /* complete sync */
- uint recvFin:1; /* recv complete information */
- uint recvAck:1; /* recv an ack from the receiver */
- uint sendComp:1; /* send complete */
- uint NoComp:4; /* no completion handler */
- uint use_pami_get:1;/* use only PAMI_Get() */
- uint memRegion:1; /* memory is registered */
- uint sendRzv:1; /* send via renzdvous protocol */
- uint sendEager:1; /* eager send */
- uint sendShort:1; /* send immediate */
- uint sendEnvelop:1; /* envelop send? */
- uint sync:1; /* sync message */
- uint blocking:1; /* blocking send ? */
-#endif
- }f;
- }fl;
-} send_status;
-
-typedef struct {
- void *req; /* address of a request */
- void *bufadd; /* address of user receive buffer */
- int src_task; /* source PAMI task id */
- int rank; /* rank in a communicator */
- int tag; /* tag of a posted recv */
- int count; /* count of a specified datattype */
- int datatype;
- int len; /* length of a receive message */
- uint nMsgs; /* no. of messages have been received */
- uint msgid; /* msg seqno of the matched message */
-#ifdef __BIG_ENDIAN__
- uint sendCtx:16; /* context of incoming msg */
- uint recvCtx:16; /* context of a posted receive */
-#else
- uint recvCtx:16; /* context of a posted receive */
- uint sendCtx:16; /* context of incoming msg */
-#endif
- union {
- uint flags;
- struct {
-#ifdef __BIG_ENDIAN__
- uint lw:4; /* use lw protocol immediate send */
- uint persist:4; /* persistent communication */
- uint blocking:2; /* blocking receive */
- uint reserve:6;
- uint reserve1:16;
-#else
- uint reserve1:16;
- uint reserve:6;
- uint blocking:2; /* blocking receive */
- uint persist:4; /* persistent communication */
- uint lw:4; /* use lw protocol immediate send */
-#endif
- }f;
- }fl;
-} posted_recv;
-
-
-typedef struct MPIDI_Trace_buf {
- recv_status *R; /* record incoming messages */
- posted_recv *PR; /* record posted receive */
- send_status *S; /* send messages */
- int totPR; /* total no. of poste receive */
-} MPIDI_Trace_buf_t;
-
-MPIDI_Trace_buf_t *MPIDI_Trace_buf;
-
-
-
-#define MPIDI_SET_PR_REC(rreq,buf,ct,dt,pami_id,rank,tag,comm,is_blk) { \
- int idx,src,seqNo,x; \
- if (pami_id != MPI_ANY_SOURCE) \
- src=pami_id; \
- else { \
- src= MPIR_Process.comm_world->rank; \
- } \
- MPIDI_Trace_buf[src].totPR++ ; \
- seqNo=MPIDI_Trace_buf[src].totPR; \
- idx = (seqNo & SEQMASK); \
- memset(&MPIDI_Trace_buf[src].PR[idx],0,sizeof(posted_recv)); \
- MPIDI_Trace_buf[src].PR[idx].src_task= pami_id; \
- MPIDI_Trace_buf[src].PR[idx].rank = rank; \
- MPIDI_Trace_buf[src].PR[idx].bufadd = buf; \
- MPIDI_Trace_buf[src].PR[idx].msgid = seqNo; \
- MPIDI_Trace_buf[src].PR[idx].count = ct; \
- MPIDI_Trace_buf[src].PR[idx].datatype = dt; \
- MPIDI_Trace_buf[src].PR[idx].tag=tag; \
- MPIDI_Trace_buf[src].PR[idx].sendCtx=comm->context_id; \
- MPIDI_Trace_buf[src].PR[idx].recvCtx=comm->recvcontext_id;\
- MPIDI_Trace_buf[src].PR[idx].fl.f.blocking=is_blk; \
- rreq->mpid.PR_idx=idx; \
-}
-
-#define MPIDI_GET_S_REC(dd,sreq,ctx,isSync,dataSize) { \
- send_status *sstatus; \
- int seqNo=sreq->mpid.envelope.msginfo.MPIseqno; \
- int idx = (seqNo & SEQMASK); \
- sreq->mpid.partner_id=dd; \
- memset(&MPIDI_Trace_buf[dd].S[idx],0,sizeof(send_status));\
- sstatus=&MPIDI_Trace_buf[dd].S[idx]; \
- sstatus->req = (void *)sreq; \
- sstatus->tag = sreq->mpid.envelope.msginfo.MPItag; \
- sstatus->dest = sreq->mpid.peer_pami; \
- sstatus->rank = sreq->mpid.peer_comm; \
- sstatus->msgid = seqNo; \
- sstatus->fl.f.sync = isSync; \
- sstatus->sctx = ctx; \
- sstatus->tag = sreq->mpid.envelope.msginfo.MPItag; \
- sstatus->len= dataSize; \
- sreq->mpid.idx=idx; \
-}
-
-
-#define TRACE_SET_S_BIT(dd,ii,mbr) MPIDI_Trace_buf[(dd)].S[(ii)].mbr=1;
-#define TRACE_SET_R_BIT(dd,ii,mbr) MPIDI_Trace_buf[(dd)].R[(ii)].mbr=1;
-#define TRACE_SET_S_VAL(dd,ii,mbr,val) MPIDI_Trace_buf[(dd)].S[(ii)].mbr=val;
-#define TRACE_SET_R_VALX(dd,rr,mbr,val) { \
- pami_task_t dd1; \
- if (dd < 0) \
- dd1=rr->mpid.partner_id; \
- else \
- dd1=dd; \
- MPIDI_Trace_buf[(dd1)].R[(rr->mpid.PR_idx)].mbr=val; \
-}
-#define TRACE_SET_R_VAL(dd,ii,mbr,val) MPIDI_Trace_buf[(dd)].R[(ii)].mbr=val;
-#define TRACE_SET_REQ_VAL(ww,val1) ww=val1;
-#define TRACE_MEMSET_R(tt,nbr,str) (memset(&MPIDI_Trace_buf[tt].R[(nbr & SEQMASK)],0,sizeof(str)));
-#define TRACE_MEMSET_S(tt,nbr,str) (memset(&MPIDI_Trace_buf[tt].S[(nbr & SEQMASK)],0,sizeof(str)));
-#else
-int recv_status;
-int send_status;
-int posted_recv;
-#define MPIDI_SET_PR_REC(rreq,buf,ct,dt,pami_id,rank,tag,comm,is_blk)
-#define MPIDI_GET_S_REC(dest,sreq,ctx,isSync,dataSize)
-#define TRACE_SET_S_BIT(dd,ii,mbr)
-#define TRACE_SET_R_BIT(dd,ii,mbr)
-#define TRACE_SET_S_VAL(dd,ii,mbr,val)
-#define TRACE_SET_R_VALX(dd,rr,mbr,val)
-#define TRACE_SET_R_VAL(dd,ii,mbr,val)
-#define TRACE_SET_REQ_VAL(ww,val1)
-#define TRACE_MEMSET_R(tt,nbr,str)
-
-#endif /* MPIDI_TRACE */
-#endif /* include_mpidi_trace_h */
diff --git a/src/mpid/pamid/include/mpidi_util.h b/src/mpid/pamid/include/mpidi_util.h
deleted file mode 100644
index 5a010c4..0000000
--- a/src/mpid/pamid/include/mpidi_util.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidi_util.h
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-
-#ifndef __include_mpidi_util_h__
-#define __include_mpidi_util_h__
-
-
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV || MPIDI_BANNER)
-#include <pami_ext_pe.h>
-#include <sys/time.h>
-#include <sys/param.h>
-
-#ifndef MAXHOSTNAMELEN
-#ifdef LINUX
-#define MAXHOSTNAMELEN 64
-#else
-#define MAXHOSTNAMELEN 256
-#endif
-#endif
-
-extern int MPIDI_atoi(char* , unsigned int* );
-extern int MPIDI_Banner(char *);
-typedef enum {IS_IP, IS_US} MPIDI_TransportType;
-typedef enum {NO_STRIPING=0, IS_PACKET_STRIPING} MPIDI_StripingType;
-
-typedef struct {
- char version[128]; /* M19 */
- char hostname[MAXHOSTNAMELEN+1];
-/* Start job info */
- unsigned int partition;
- int pid;
- int this_task;
- int nprocs;
- int mp_statistics;
- char nnodes[8];
- char tasks_node[8];
- char euilib[8];
- char window_id[128];
- char network_id[32];
- char adapter_type[32];
- char device[8];
- char protocol[16];
- char libpath[MAXPATHLEN]; /* size=BUFSIZE (pm_common.c) */
- char directory[FILENAME_MAX+1]; /* size = 256 */
- int mode_64;
- int threaded;
- int copySendBufSize:16;
- char thread_scope[8];
- char cpu_use[10];
- char adapter_use[10];
- char clock_source[8];
- char priority[24];
- MPIDI_TransportType transport_type;
- MPIDI_StripingType strip_type;
- int use_rdma;
- char *network_string;
- int max_pkts_out;
- long rdma_min_msg_size;
- int timeout;
- int interrupts;
- uint polling_interval;
- unsigned long buffer_mem;
- long long buffer_mem_max;
- int eager_limit;
- int use_token_flow_control;
- char wait_mode[8];
- int use_shmem;
- uint retransmit_interval;
- int shmem_pt2pt;
- int shared_mem_pg_size;
- char mem_affinity[8];
- int single_thread;
- char checkpoint[8]; /* NA */
- char gang_scheduler[10]; /* NA */
- int instances;
- char striping_type[40];
- int ack_thresh;
- int recv_fifo_sz;
- int max_pkt_size;
- int rexmit_buf_size;
- int rexmit_buf_cnt;
- int max_atom_size;
- char bulk_min_msg_size[16];
- char use_bulk_xfer[8];
- char user_rdma_avail[16];
- char user_rdma_total[16];
- char debug_notimeout[8];
- char develop[16];
- char stdinmode[12];
- char stdoutmode[12];
- int statistics;
- int service_variables;
- int rc_max_qp; /* M32 */
- char rc_qp_use_lmc[8]; /* M32 */
- char rc_qp_use_lru[8]; /* M32 */
- char rc_qp_init_setup[8]; /* M32 */
-} MPIDI_printenv_t;
-
-
-
-typedef struct {
- long sends; /* Count of sends initiated */
- long sendsComplete; /* Count of sends completed (msg sent) */
- long sendWaitsComplete; /* Count of send waits completed
- (blocking & nonblocking) */
- long recvs; /* Count of recvs initiated */
- long recvWaitsComplete; /* Count of recv waits complete */
- long earlyArrivals; /* Count of msgs received for which
- no receive was posted */
- long earlyArrivalsMatched; /* Count of early arrivals for which
- a posted receive has been found */
- long lateArrivals; /* Count of msgs received for which a recv
- was posted */
- long unorderedMsgs; /* Total number of out of order msgs */
- long buffer_mem_hwmark;
- long pamid_reserve_10;
- long pamid_reserve_9;
- long pamid_reserve_8;
- long pamid_reserve_7;
- long pamid_reserve_6;
- long pamid_reserve_5;
- long pamid_reserve_4;
- long pamid_reserve_3;
- long pamid_reserve_2;
- long pamid_reserve_1;
-} MPIX_stats_t;
-
-extern MPIDI_printenv_t *mpich_env;
-extern MPIX_stats_t *mpid_statp;
-extern int prtStat;
-extern int prtEnv;
-extern void set_mpich_env(int *,int*);
-extern void MPIDI_open_pe_extension();
-extern void MPIDI_close_pe_extension();
-extern MPIDI_Statistics_write(FILE *);
-
-#if CUDA_AWARE_SUPPORT
-int (*pamidCudaMemcpy)( void* dst, const void* src, size_t count, int kind );
-int (*pamidCudaPointerGetAttributes)( struct cudaPointerAttributes* attributes, const void* ptr );
-const char* (*pamidCudaGetErrorString)( int error );
-extern void * pamidCudaPtr;
-#endif
-/*************************************************************
- * MPIDI_STATISTICS
- *************************************************************/
-/* It is not necessary to do fetch_and_and. Statistics */
-/* should be taken when holding a lock. */
-#ifdef MPIDI_STATISTICS
- #ifdef _AIX_
- #ifndef __64BIT__
- #define MPID_NSTAT(cmd) if (prtStat) fetch_and_add(&(cmd),1);
- #else
- #define MPID_NSTAT(cmd) if (prtStat) fetch_and_addlp(&(cmd),1);
- #endif
- #else /* Linux */
- #define MPID_NSTAT(cmd) if (prtStat) (cmd)++;
- #endif /* End Linux */
-#else /* MPIDI_STATISTICS not set*/
- #define MPID_NSTAT(cmd)
-#endif /* MPIDI_STATISTICS */
-#endif /* MPIDI_PRINTENV || MPIDI_STATISTICS */
-
-#endif /* __include_mpidi_util_h__ */
diff --git a/src/mpid/pamid/include/mpidimpl.h b/src/mpid/pamid/include/mpidimpl.h
deleted file mode 100644
index 3e131e4..0000000
--- a/src/mpid/pamid/include/mpidimpl.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidimpl.h
- * \brief API MPID additions to MPI functions and structures
- */
-
-#ifndef __include_mpidimpl_h__
-#define __include_mpidimpl_h__
-
-#include <mpiimpl.h>
-#include "mpid_sched.h"
-#include "pamix.h"
-#include <mpix.h>
-
-
-
-static inline void MPIDI_coll_check_in_place(void* src, void** dst)
-{
- if(MPI_IN_PLACE == PAMI_IN_PLACE)
- *dst = src;
- else
- {
- if(src == PAMI_IN_PLACE)
- *dst = MPI_IN_PLACE;
- else
- *dst = src;
- }
-}
-
-#ifdef DYNAMIC_TASKING
-
-#define MPIDI_MAX_KVS_VALUE_LEN 4096
-
-typedef struct MPIDI_PG
-{
- /* MPIU_Object field. MPIDI_PG_t objects are not allocated using the
- MPIU_Object system, but we do use the associated reference counting
- routines. Therefore, handle must be present, but is not used
- except by debugging routines */
- MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
-
- /* Next pointer used to maintain a list of all process groups known to
- this process */
- struct MPIDI_PG * next;
-
- /* Number of processes in the process group */
- int size;
-
- /* VC table. At present this is a pointer to an array of VC structures.
- Someday we may want make this a pointer to an array
- of VC references. Thus, it is important to use MPIDI_PG_Get_vc()
- instead of directly referencing this field. */
- MPID_VCR vct;
-
- /* Pointer to the process group ID. The actual ID is defined and
- allocated by the process group. The pointer is kept in the
- device space because it is necessary for the device to be able to
- find a particular process group. */
- void * id;
-
- /* Replacement abstraction for connection information */
- /* Connection information needed to access processes in this process
- group and to share the data with other processes. The items are
- connData - pointer for data used to implement these functions
- (e.g., a pointer to an array of process group info)
- getConnInfo( rank, buf, bufsize, self ) - function to store into
- buf the connection information for rank in this process
- group
- connInfoToString( buf_p, size, self ) - return in buf_p a string
- that can be sent to another process to recreate the
- connection information (the info needed to support
- getConnInfo)
- connInfoFromString( buf, self ) - setup the information needed
- to implement getConnInfo
- freeConnInfo( self ) - free any storage or resources associated
- with the connection information.
-
- See ch3/src/mpidi_pg.c
- */
- void *connData;
- int (*getConnInfo)( int, char *, int, struct MPIDI_PG * );
- int (*connInfoToString)( char **, int *, struct MPIDI_PG * );
- int (*connInfoFromString)( const char *, struct MPIDI_PG * );
- int (*freeConnInfo)( struct MPIDI_PG * );
-}
-MPIDI_PG_t;
-
-typedef int (*MPIDI_PG_Compare_ids_fn_t)(void * id1, void * id2);
-typedef int (*MPIDI_PG_Destroy_fn_t)(MPIDI_PG_t * pg);
-
-
-typedef MPIDI_PG_t * MPIDI_PG_iterator;
-
-typedef struct conn_info {
- int rem_world_id;
- int ref_count;
- int *rem_taskids; /* The last member of this array is -1 */
- struct conn_info *next;
-}conn_info;
-
-/* link list of transaciton id for all active remote connections in my world */
-typedef struct transactionID_struct {
- long long tranid;
- int *cntr_for_AM; /* Array size = TOTAL_AM */
- struct transactionID_struct *next;
-}transactionID_struct;
-
-/*--------------------------
- BEGIN MPI PORT SECTION
- --------------------------*/
-/* These are the default functions */
-int MPIDI_Comm_connect(const char *, struct MPID_Info *, int, struct MPID_Comm *, struct MPID_Comm **);
-int MPIDI_Comm_accept(const char *, struct MPID_Info *, int, struct MPID_Comm *, struct MPID_Comm **);
-
-int MPIDI_Comm_spawn_multiple(int, char **, char ***, int *, struct MPID_Info **,
- int, struct MPID_Comm *, struct MPID_Comm **, int *);
-
-
-typedef struct MPIDI_Port_Ops {
- int (*OpenPort)( struct MPID_Info *, char *);
- int (*ClosePort)( const char * );
- int (*CommAccept)( const char *, struct MPID_Info *, int, struct MPID_Comm *,
- struct MPID_Comm ** );
- int (*CommConnect)( const char *, struct MPID_Info *, int, struct MPID_Comm *,
- struct MPID_Comm ** );
-} MPIDI_PortFns;
-
-
-#define MPIDI_VC_add_ref( _vc ) \
- do { MPIU_Object_add_ref( _vc ); } while (0)
-
-#define MPIDI_PG_add_ref(pg_) \
-do { \
- MPIU_Object_add_ref(pg_); \
-} while (0)
-#define MPIDI_PG_release_ref(pg_, inuse_) \
-do { \
- MPIU_Object_release_ref(pg_, inuse_); \
-} while (0)
-
-#define MPIDI_VC_release_ref( _vc, _inuse ) \
- do { MPIU_Object_release_ref( _vc, _inuse ); } while (0)
-
-
-/* Initialize a new VC */
-int MPIDI_PG_Create_from_string(const char * str, MPIDI_PG_t ** pg_pptr,
- int *flag);
-int MPIDI_PG_Get_size(MPIDI_PG_t * pg);
-#define MPIDI_PG_Get_size(pg_) ((pg_)->size)
-#endif /** DYNAMIC_TASKING **/
-
-
-static inline pami_endpoint_t MPIDI_Task_to_endpoint(pami_task_t task, size_t offset)
-{
- pami_endpoint_t ep;
- pami_result_t rc;
- rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &ep);
-#if ASSERT_LEVEL > 0
- if(rc != PAMI_SUCCESS)
- MPID_Abort (NULL, 0, 1, "MPIDI_Task_to_endpoint: Invalid task/offset. No endpoint found");
-#endif
- return ep;
-}
-
-int
-MPIDI_Win_set_info(MPID_Win *win,
- MPID_Info *info);
-
-MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp);
-MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
-
-int MPIDI_Progress_register_hook(int (*progress_fn)(int*), int *id);
-int MPIDI_Progress_deregister_hook(int id);
-int MPIDI_Progress_activate_hook(int id);
-int MPIDI_Progress_deactivate_hook(int id);
-
-#define MPID_Progress_register_hook(fn_, id_) MPIDI_Progress_register_hook(fn_, id_)
-#define MPID_Progress_deregister_hook(id_) MPIDI_Progress_deregister_hook(id_)
-#define MPID_Progress_activate_hook(id_) MPIDI_Progress_activate_hook(id_)
-#define MPID_Progress_deactivate_hook(id_) MPIDI_Progress_deactivate_hook(id_)
-#endif
diff --git a/src/mpid/pamid/include/mpidpost.h b/src/mpid/pamid/include/mpidpost.h
deleted file mode 100644
index b0fdbfe..0000000
--- a/src/mpid/pamid/include/mpidpost.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidpost.h
- * \brief The trailing device header
- *
- * This file is included after the rest of the headers
- * (mpidimpl.h, mpidpre.h, and mpiimpl.h)
- */
-
-#ifndef __include_mpidpost_h__
-#define __include_mpidpost_h__
-
-#include <mpid_datatype.h>
-#include "mpidi_prototypes.h"
-#include "mpidi_macros.h"
-
-#include "../src/mpid_progress.h"
-#include "../src/mpid_request.h"
-#include "../src/mpid_recvq.h"
-#include "../src/pt2pt/mpid_isend.h"
-#include "../src/pt2pt/mpid_send.h"
-#include "../src/pt2pt/mpid_irecv.h"
-
-#ifdef DYNAMIC_TASKING
-#define MPID_ICCREATE_REMOTECOMM_HOOK(_p,_c,_np,_gp,_r) \
- MPID_PG_ForwardPGInfo(_p,_c,_np,_gp,_r)
-#else /* ! DYNAMIC_TASKING */
-/* If DYNAMIC_TASKING is not defined, PAMID does not provide its own GPID routines,
- so provide one here. **/
-
-/* FIXME: A temporary version for lpids within my comm world */
-static inline int MPID_GPID_GetAllInComm( MPID_Comm *comm_ptr, int local_size,
- int local_gpids[], int *singlePG )
-{
- int i;
- int *gpid = local_gpids;
-
- for (i=0; i<comm_ptr->local_size; i++) {
- *gpid++ = 0;
- (void)MPID_VCR_Get_lpid( comm_ptr->vcr[i], gpid );
- gpid++;
- }
- *singlePG = 1;
- return 0;
-}
-
-/* FIXME: A temp for lpids within my comm world */
-static inline int MPID_GPID_ToLpidArray( int size, int gpid[], int lpid[] )
-{
- int i;
-
- for (i=0; i<size; i++) {
- lpid[i] = *++gpid; gpid++;
- }
- return 0;
-}
-/* FIXME: for MPI1, all process ids are relative to MPI_COMM_WORLD.
- For MPI2, we'll need to do something more complex */
-static inline int MPID_VCR_CommFromLpids( MPID_Comm *newcomm_ptr,
- int size, const int lpids[] )
-{
- MPID_Comm *commworld_ptr;
- int i;
-
- commworld_ptr = MPIR_Process.comm_world;
- /* Setup the communicator's vc table: remote group */
- MPID_VCRT_Create( size, &newcomm_ptr->vcrt );
- MPID_VCRT_Get_ptr( newcomm_ptr->vcrt, &newcomm_ptr->vcr );
- for (i=0; i<size; i++) {
- /* For rank i in the new communicator, find the corresponding
- rank in the comm world (FIXME FOR MPI2) */
- /* printf( "[%d] Remote rank %d has lpid %d\n",
- MPIR_Process.comm_world->rank, i, lpids[i] ); */
- if (lpids[i] < commworld_ptr->remote_size) {
- MPID_VCR_Dup( commworld_ptr->vcr[lpids[i]],
- &newcomm_ptr->vcr[i] );
- }
- else {
- /* We must find the corresponding vcr for a given lpid */
- /* FIXME: Error */
- return 1;
- /* MPID_VCR_Dup( ???, &newcomm_ptr->vcr[i] ); */
- }
- }
- return 0;
-}
-#endif /* DYNAMIC_TASKING */
-#endif
diff --git a/src/mpid/pamid/include/mpidpre.h b/src/mpid/pamid/include/mpidpre.h
deleted file mode 100644
index 25e1bab..0000000
--- a/src/mpid/pamid/include/mpidpre.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpidpre.h
- * \brief The leading device header
- *
- * This file is included at the start of the other headers
- * (mpidimpl.h, mpidpost.h, and mpiimpl.h). It generally contains
- * additions to MPI objects.
- */
-
-#ifndef __include_mpidpre_h__
-#define __include_mpidpre_h__
-
-#include <errno.h>
-#include <stdio.h>
-#include <assert.h>
-#include <pthread.h>
-#include <unistd.h>
-
-#include "mpiimpl.h"
-#include "mpid_dataloop.h"
-#include <pami.h>
-
-/* provides "pre" typedefs and such for NBC scheduling mechanism */
-#include "mpid_sched_pre.h"
-
-/** \brief Creates a compile error if the condition is false. */
-#define MPID_assert_static(expr) ({ switch(0){case 0:case expr:;} })
-#define MPID_assert_always(x) assert(x) /**< \brief Tests for likely problems--always active */
-#define MPID_abort() assert(0) /**< \brief Always exit--usually implies missing functionality */
-#if ASSERT_LEVEL==0
-#define MPID_assert(x)
-#else
-#define MPID_assert(x) assert(x) /**< \brief Tests for likely problems--may not be active in performance code */
-#endif
-
-
-#include "mpidi_platform.h"
-
-#include "mpidi_constants.h"
-#include "mpidi_datatypes.h"
-#include "mpidi_externs.h"
-#include "mpidi_hooks.h"
-#include "mpidi_thread.h"
-#include "mpidi_util.h"
-
-#ifdef __BGQ__
-#define MPID_HANDLE_NUM_INDICES 256
-#endif /* __BGQ__ */
-
-#define MPID_MAX_SMP_BCAST_MSG_SIZE (16384)
-#define MPID_MAX_SMP_REDUCE_MSG_SIZE (16384)
-#define MPID_MAX_SMP_ALLREDUCE_MSG_SIZE (16384)
-#ifdef MPID_DEV_DATATYPE_DECL
-#error 'Conflicting definitions of MPID_DEV_DATATYPE_DECL'
-#else
-#define MPID_DEV_DATATYPE_DECL void *device_datatype;
-#endif
-#define MPID_Dev_datatype_commit_hook(ptr) MPIDI_PAMI_datatype_commit_hook(ptr)
-#define MPID_Dev_datatype_destroy_hook(ptr) MPIDI_PAMI_datatype_destroy_hook(ptr)
-#define MPID_Dev_datatype_dup_hook(ptr) MPIDI_PAMI_datatype_dup_hook(ptr)
-
-#endif
diff --git a/src/mpid/pamid/include/mpix.h b/src/mpid/pamid/include/mpix.h
deleted file mode 100644
index 6940ad9..0000000
--- a/src/mpid/pamid/include/mpix.h
+++ /dev/null
@@ -1,298 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/mpix.h
- * \brief PAMI device extensions to the MPI Spec
- *
- * These functions generally use MPI functions and internal APIs to
- * expose extra information relating to the specific system on which
- * the job is running. This may allow certain hardware specific
- * optimizations to be made.
- */
-
-#ifndef __include_mpix_h__
-#define __include_mpix_h__
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-
- /**
- * \brief Print the current system stack
- *
- * The first frame (this function) is discarded to make the trace look nicer.
- */
- void MPIX_Dump_stacks();
-
- void MPIX_Progress_poke();
-
- /**
- * \brief Wait for network to quiesce
- *
- * \praram[in] timeout Maximum time, Seconds, to wait. 0 for internal default
- * \retval MPI_SUCCESS Network appears to be quiesced
- * \retval MPI_ERR_PENDING Network did not quiesce
- * \retval MPI_ERR_OTHER Encounter error(s), network state unknown
- */
- int MPIX_Progress_quiesce(double timeout);
-
-#define MPIX_TORUS_MAX_DIMS 5 /* This is the maximum physical size of the torus */
- typedef struct
- {
-/* These fields will be used on all platforms. */
- unsigned prank; /**< Physical rank of the node (irrespective of mapping) */
- unsigned psize; /**< Size of the partition (irrespective of mapping) */
- unsigned ppn; /**< Processes per node */
- unsigned coreID; /**< Process id; values monotonically increase from 0..63 */
-
- unsigned clockMHz; /**< Frequency in MegaHertz */
- unsigned memSize; /**< Size of the core memory in MB */
-
-/* These fields are only set on torus platforms (i.e. Blue Gene) */
- unsigned torus_dimension; /**< Actual dimension for the torus */
- unsigned Size[MPIX_TORUS_MAX_DIMS]; /**< Max coordinates on the torus */
- unsigned Coords[MPIX_TORUS_MAX_DIMS]; /**< This node's coordinates */
- unsigned isTorus[MPIX_TORUS_MAX_DIMS]; /**< Do we have wraparound links? */
-
-/* These fields are only set on systems using Blue Gene IO psets. */
- unsigned rankInPset;
- unsigned sizeOfPset;
- unsigned idOfPset;
- } MPIX_Hardware_t;
-
- /**
- * \brief Determine the rank-in-COMM_WORLD of the process associated with rank-in-comm
- *
- * Fortran interface:
- * MPIX_COMM_RANK2GLOBAL (INTEGER comm, INTEGER crank, INTEGER grank, INTEGER ierr)
- *
- * \param[in] comm The communicator associated with the input rank
- * \param[in] crank The rank-in-comm
- * \param[out] grank The rank-in-COMM_WORLD (AKA Global rank)
- * \return MPI_SUCCESS on success, an error on failure detection.
- */
- int MPIX_Comm_rank2global(MPI_Comm comm, int crank, int *grank);
-
- /**
- * \brief Fill in an MPIX_Hardware_t structure
- * \param[in] hw A pointer to an MPIX_Hardware_t structure to be filled in
- */
- int MPIX_Hardware(MPIX_Hardware_t *hw);
-
-
- /* These functions only exist on torus platforms (i.e. Blue Gene) */
-
- /**
- * \brief Determine the number of physical hardware dimensions
- * \param[out] numdimensions The number of torus dimensions
- * \note This does NOT include the core+thread ID, so if you plan on
- * allocating an array based on this information, you'll need to
- * add 1 to the value returned here
- */
- int MPIX_Torus_ndims(int *numdim);
- /**
- * \brief Convert an MPI rank into physical coordinates plus core ID
- * \param[in] rank The MPI Rank
- * \param[out] coords An array of size hw.torus_dimensions+1. The last
- * element of the returned array is the core+thread ID
- */
- int MPIX_Rank2torus(int rank, int *coords);
- /**
- * \brief Convert a set of coordinates (physical+core/thread) to an MPI rank
- * \param[in] coords An array of size hw.torus_dimensions+1. The last element
- * should be the core+thread ID (0..63).
- * \param[out] rank The MPI rank cooresponding to the coords array passed in
- */
- int MPIX_Torus2rank(int *coords, int *rank);
-
- /**
- * \brief Optimize/deoptimize a communicator by adding/stripping
- * platform specific optimizations (i.e. class routes support
- * for efficient bcast/reductions).
- * \param[in] comm MPI communicator
- * \param[in] optimize Optimize(1) or deoptimize(0) the communicator
- */
- int MPIX_Comm_update(MPI_Comm comm, int optimize);
-
- /**
- * \brief Return the most recently used collective protocol name
- * param[in] comm The communicator that collective was issued on
- * param[out] protocol Storage space for the string name
- * param[in] length Length available for the string name.
- * Note: Max internal length is 100
- */
- int MPIX_Get_last_algorithm_name(MPI_Comm comm, char *protocol, int length);
-
- /**
- * \brief Create a communicator such that all nodes in the same
- * communicator are served by the same I/O node
- *
- * Fortran interface:
- * MPIX_PSET_SAME_COMM_CREATE(INTEGER pset_comm, INTEGER ierr)
- *
- * \note This is a collective operation on MPI_COMM_WORLD
- *
- * \param [out] pset_comm The new communicator
- *
- * \return MPI status code
- */
- int MPIX_Pset_same_comm_create (MPI_Comm *pset_comm);
-
- /**
- * \brief Create a communicator such that all nodes in the same
- * communicator are served by a different I/O node
- *
- * Fortran interface:
- * MPIX_PSET_DIFF_COMM_CREATE(INTEGER pset_comm, INTEGER ierr)
- *
- * \note This is a collective operation on MPI_COMM_WORLD
- *
- * \param [out] pset_comm The new communicator
- *
- * \return MPI status code
- */
- int MPIX_Pset_diff_comm_create (MPI_Comm *pset_comm);
-
- /**
- * \brief Create a communicator such that all nodes in the same
- * communicator are served by the same I/O node
- *
- * Fortran interface:
- * MPIX_PSET_SAME_COMM_CREATE (INTEGER parent_comm, INTEGER pset_comm, INTEGER ierr)
- *
- * \note This is a collective operation on the parent communicator.
- *
- * \param [in] parent_comm The parent communicator
- * \param [out] pset_comm The new communicator
- *
- * \return MPI status code
- */
- int MPIX_Pset_same_comm_create_from_parent (MPI_Comm parent_comm, MPI_Comm *pset_comm);
-
- /**
- * \brief Create a communicator such that all nodes in the same
- * communicator are served by a different I/O node
- *
- * Fortran interface:
- * MPIX_PSET_DIFF_COMM_CREATE (INTEGER parent_comm, INTEGER pset_comm, INTEGER ierr)
- *
- * \note This is a collective operation on the parent communicator
- *
- * \param [in] parent_comm The parent communicator
- * \param [out] pset_comm The new communicator
- *
- * \return MPI status code
- */
- int MPIX_Pset_diff_comm_create_from_parent (MPI_Comm parent_comm, MPI_Comm *pset_comm);
-
- /**
- * \brief Retrieve the identifier of the io node associated with the local compute node.
- *
- * The I/O node identifier is a unique number, yet it is not a monotonically
- * increasing integer; such as a rank in a communicator. Multiple ranks, and
- * multiple compute nodes, can be associated with the same I/O link.
- *
- * Fortran interface:
- * MPIX_IO_NODE_ID (INTEGER io_node_id)
- *
- * \note On BG/Q two 'bridge' compute nodes are connected to each io node;
- * each unique io node identifier will be associated with at most two
- * different io link identifiers.
- *
- * \return I/O node identifier
- */
- int MPIX_IO_node_id ();
-
- /**
- * \brief Retrieve the identifier of the io link associated with the local compute node.
- *
- * The I/O link identifier is a unique number, yet it is not a monotonically
- * increasing integer; such as a rank in a communicator. Multiple ranks, and
- * multiple compute nodes, can be associated with the same I/O link.
- *
- * Fortran interface:
- * MPIX_IO_LINK_ID (INTEGER io_link_id)
- *
- * \return I/O link identifier
- */
- int MPIX_IO_link_id ();
-
- /**
- * \brief Retrieve the number of hops to the io node associated with the local compute node.
- *
- * The distance to the I/O node is the number of hops on the torus from the
- * local compute node to the associated I/O node. The 'torus' vs 'mesh'
- * attribute of each dimention is considered when determining the distance.
- *
- * Fortran interface:
- * MPIX_IO_DISTANCE (INTEGER io_distance)
- *
- * \note On BG/Q the 'bridge' compute nodes are those nodes that are closest
- * to the I/O node and will have a distance of '1'.
- *
- * \return number of hops to the I/O node
- */
- int MPIX_IO_distance ();
-
- /**
- * \brief Retrieve information about the I/O node associated with the
- * local compute node.
- *
- * \deprecated This function has been replaced with MPIX_IO_link_id() and
- * MPIX_IO_distance()
- *
- * \see MPIX_IO_link_id
- * \see MPIX_IO_distance
- * \see MPIX_IO_node_id
- *
- * \param [out] io_node_route_id The unique I/O node route identifier
- * \param [out] distance_to_io_node The number of hops to the I/O node
- */
- void MPIX_Pset_io_node (int *io_node_route_id, int *distance_to_io_node);
-
- /**
- * \brief Create a Cartesian communicator that exactly matches the partition
- *
- * This is a collective operation on MPI_COMM_WORLD, and will only run
- * successfully on a full partition job (no -np)
- *
- * The communicator is created to match the size of each dimension, the
- * physical coords on each node, and the torus/mesh link status.
- *
- * Because of MPICH dimension ordering, the associated arrays (i.e. coords,
- * sizes, and periods) are in [a, b, c, d, e, t] order. Consequently, when
- * using the default ABCDET mapping, the rank in cart_comm will match the rank
- * in MPI_COMM_WORLD. However, when using a non-default mapping or a mapfile
- * the ranks will be different.
- *
- * Fortran interface:
- * MPIX_CART_COMM_CREATE (INTEGER cart_comm, INTEGER ierr)
- *
- * \param [out] cart_comm The new Cartesian communicator
- *
- * \return MPI_SUCCESS or MPI_ERR_TOPOLOGY
- */
- int MPIX_Cart_comm_create (MPI_Comm *cart_comm);
-
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
diff --git a/src/mpid/pamid/include/pamix.h b/src/mpid/pamid/include/pamix.h
deleted file mode 100644
index 80ef77a..0000000
--- a/src/mpid/pamid/include/pamix.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file include/pamix.h
- * \brief Extensions to PAMI
- */
-
-
-#ifndef __include_pamix_h__
-#define __include_pamix_h__
-
-#include <pami.h>
-#include <mpidi_platform.h>
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-typedef pami_result_t (*node_info_fn)(pami_task_t task,
- uint32_t *node_id,
- uint32_t *offset,
- uint32_t *max_nodes);
-typedef struct
-{
- pami_extension_t progress;
-
- struct
- {
- pami_extension_t extension;
- pami_result_t status;
- uint8_t * base;
- uintptr_t stride;
- uintptr_t bitmask;
- node_info_fn node_info;
- } is_local_task;
-
-#if defined(__BGQ__)
- pami_extension_t torus;
-#endif
-} pamix_extension_info_t;
-
-extern pamix_extension_info_t PAMIX_Extensions;
-
-void
-PAMIX_Initialize(pami_client_t client);
-
-void
-PAMIX_Finalize(pami_client_t client);
-
-pami_configuration_t
-PAMIX_Client_query(pami_client_t client,
- pami_attribute_name_t name);
-
-void
-PAMIX_Dispatch_set(pami_context_t context[],
- size_t num_contexts,
- size_t dispatch,
- pami_dispatch_callback_function fn,
- pami_dispatch_hint_t options,
- size_t * immediate_max);
-
-pami_task_t
-PAMIX_Endpoint_query(pami_endpoint_t endpoint);
-
-
-typedef void (*pamix_progress_function) (pami_context_t context, void *cookie);
-#define PAMIX_CLIENT_ASYNC_GUARANTEE 1016
-#define ASYNC_PROGRESS_ALL 0x1111
-typedef enum
-{
- PAMIX_PROGRESS_ALL = 0,
- PAMIX_PROGRESS_RECV_INTERRUPT = 1,
- PAMIX_PROGRESS_TIMER = 2,
- PAMIX_PROGRESS_EXT = 1000
-} pamix_progress_t;
-
-void
-PAMIX_Progress_register(pami_context_t context,
- pamix_progress_function progress_fn,
- pamix_progress_function suspend_fn,
- pamix_progress_function resume_fn,
- void * cookie);
-void
-PAMIX_Progress_enable(pami_context_t context,
- pamix_progress_t event_type);
-
-void
-PAMIX_Progress_disable(pami_context_t context,
- pamix_progress_t event_type);
-
-pami_result_t
-PAMIX_is_local_task_get_node_info(pami_task_t task,
- uint32_t *node_id,
- uint32_t *offset,
- uint32_t *max_nodes);
-
-#ifdef __BGQ__
-
-typedef struct
-{
- size_t dims;
- size_t *coord;
- size_t *size;
- size_t *torus;
-} pamix_torus_info_t;
-
-const pamix_torus_info_t * PAMIX_Torus_info();
-int PAMIX_Task2torus(pami_task_t task_id, size_t coords[]);
-int PAMIX_Torus2task(size_t coords[], pami_task_t* task_id);
-
-#endif
-
-#ifdef PAMIX_IS_LOCAL_TASK
-#if defined(PAMIX_IS_LOCAL_TASK_STRIDE) && defined(PAMIX_IS_LOCAL_TASK_SHIFT)
-#define PAMIX_Task_is_local(task_id) \
- (((1UL << PAMIX_IS_LOCAL_TASK_SHIFT) & \
- *(PAMIX_Extensions.is_local_task.base + \
- task_id * PAMIX_IS_LOCAL_TASK_STRIDE)) >> PAMIX_IS_LOCAL_TASK_SHIFT)
-#else
-#define PAMIX_Task_is_local(task_id) \
- ((PAMIX_Extensions.is_local_task.base && \
- (PAMIX_Extensions.is_local_task.bitmask & \
- *(PAMIX_Extensions.is_local_task.base + \
- task_id * PAMIX_Extensions.is_local_task.stride))) > 0)
-#endif /* PAMIX_IS_LOCAL_TASK_STRIDE && PAMIX_IS_LOCAL_TASK_SHIFT */
-#else
-#define PAMIX_Task_is_local(task_id) (0)
-#endif /* PAMIX_IS_LOCAL_TASK */
-
-#if defined(__cplusplus)
-}
-#endif
-#endif
diff --git a/src/mpid/pamid/src/Makefile.mk b/src/mpid/pamid/src/Makefile.mk
deleted file mode 100644
index e2468f3..0000000
--- a/src/mpid/pamid/src/Makefile.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-#AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/pamid/src/include \
-# -I$(top_builddir)/src/mpid/pamid/src/include
-
-noinst_HEADERS += \
- src/mpid/pamid/src/mpid_request.h \
- src/mpid/pamid/src/mpid_progress.h \
- src/mpid/pamid/src/mpid_recvq.h
-
-
-include $(top_srcdir)/src/mpid/pamid/src/coll/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/comm/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/misc/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/mpix/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/onesided/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/pamix/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/pt2pt/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/dyntask/Makefile.mk
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/mpid_buffer.c \
- src/mpid/pamid/src/mpidi_bufmm.c \
- src/mpid/pamid/src/mpid_finalize.c \
- src/mpid/pamid/src/mpid_init.c \
- src/mpid/pamid/src/mpid_iprobe.c \
- src/mpid/pamid/src/mpid_probe.c \
- src/mpid/pamid/src/mpid_progress.c \
- src/mpid/pamid/src/mpid_recvq.c \
- src/mpid/pamid/src/mpid_request.c \
- src/mpid/pamid/src/mpid_time.c \
- src/mpid/pamid/src/mpid_vc.c \
- src/mpid/pamid/src/mpidi_env.c \
- src/mpid/pamid/src/mpidi_util.c \
- src/mpid/pamid/src/mpidi_mutex.c \
- src/mpid/pamid/src/mpid_mrecv.c \
- src/mpid/pamid/src/mpid_mprobe.c \
- src/mpid/pamid/src/mpid_imrecv.c \
- src/mpid/pamid/src/mpid_improbe.c \
- src/mpid/pamid/src/mpid_aint.c \
- src/mpid/pamid/src/mpidi_nbc_sched.c \
- src/mpid/pamid/src/mpidi_pami_datatype.c
-
-if QUEUE_BINARY_SEARCH_SUPPORT
-mpi_core_sources += \
- src/mpid/pamid/src/mpid_recvq_mmap.cpp
-endif QUEUE_BINARY_SEARCH_SUPPORT
-
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/Makefile.mk b/src/mpid/pamid/src/coll/Makefile.mk
deleted file mode 100644
index adf7131..0000000
--- a/src/mpid/pamid/src/coll/Makefile.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-include $(top_srcdir)/src/mpid/pamid/src/coll/barrier/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/bcast/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/allreduce/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/allgather/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/allgatherv/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/scatterv/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/scatter/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/gather/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/alltoall/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/alltoallv/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/gatherv/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/scan/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/reduce/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/alltoallw/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/exscan/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/ired_scat/Makefile.mk
-include $(top_srcdir)/src/mpid/pamid/src/coll/red_scat/Makefile.mk
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/coll_utils.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/allgather/Makefile.mk b/src/mpid/pamid/src/coll/allgather/Makefile.mk
deleted file mode 100644
index db3c098..0000000
--- a/src/mpid/pamid/src/coll/allgather/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/allgather/mpido_allgather.c \
- src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/allgather/mpido_allgather.c b/src/mpid/pamid/src/coll/allgather/mpido_allgather.c
deleted file mode 100644
index 8ef7b66..0000000
--- a/src/mpid/pamid/src/coll/allgather/mpido_allgather.c
+++ /dev/null
@@ -1,820 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/allgather/mpido_allgather.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-#include <mpidimpl.h>
-
-
-static void allred_cb_done(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *)clientdata;
- (*active)--;
-}
-
-static void allgather_cb_done(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *)clientdata;
- (*active)--;
-}
-
-
-/* ****************************************************************** */
-/**
- * \brief Use (tree) MPIDO_Allreduce() to do a fast Allgather operation
- *
- * \note This function requires that:
- * - The send/recv data types are contiguous
- * - Tree allreduce is availible (for max performance)
- * - The datatype parameters needed added to the function signature
- */
-/* ****************************************************************** */
-
-#define MAX_ALLGATHER_ALLREDUCE_BUFFER_SIZE (1024*1024*2)
-
-int MPIDO_Allgather_allreduce(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPI_Aint send_true_lb,
- MPI_Aint recv_true_lb,
- size_t send_size,
- size_t recv_size,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-
-{
- int rc, i;
- char *startbuf = NULL;
- char *destbuf = NULL;
- const int rank = comm_ptr->rank;
-
- startbuf = (char *) recvbuf + recv_true_lb;
- destbuf = startbuf + rank * send_size;
-
- if (sendbuf != MPI_IN_PLACE)
- {
- char *outputbuf = (char *) sendbuf + send_true_lb;
- memcpy(destbuf, outputbuf, send_size);
- }
-
- /* TODO: Change to PAMI */
- /*Do a convert and then do the allreudce*/
- if ( recv_size <= MAX_ALLGATHER_ALLREDUCE_BUFFER_SIZE &&
- (send_size & 0x3)==0 && /*integer/long allgathers only*/
- (sendtype != MPI_DOUBLE || recvtype != MPI_DOUBLE))
- {
- double *tmprbuf = (double *)MPIU_Malloc(recv_size*2);
- if (tmprbuf == NULL)
- goto direct_algo; /*skip int to fp conversion and go to direct
- algo*/
-
- double *tmpsbuf = tmprbuf + (rank*send_size)/sizeof(int);
- int *sibuf = (int *) destbuf;
-
- memset(tmprbuf, 0, rank*send_size*2);
- memset(tmpsbuf + send_size/sizeof(int), 0,
- (recv_size - (rank + 1)*send_size)*2);
-
- for(i = 0; i < (send_size/sizeof(int)); ++i)
- tmpsbuf[i] = (double)sibuf[i];
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Allreduce(MPI_IN_PLACE,
- tmprbuf,
- recv_size/sizeof(int),
- MPI_DOUBLE,
- MPI_SUM,
- comm_ptr,
- mpierrno);
-
- sibuf = (int *) startbuf;
- for(i = 0; i < (rank*send_size/sizeof(int)); ++i)
- sibuf[i] = (int)tmprbuf[i];
-
- for(i = (rank+1)*send_size/sizeof(int); i < recv_size/sizeof(int); ++i)
- sibuf[i] = (int)tmprbuf[i];
-
- MPIU_Free(tmprbuf);
- return rc;
- }
-
- direct_algo:
-
- memset(startbuf, 0, rank * send_size);
- memset(destbuf + send_size, 0, recv_size - (rank + 1) * send_size);
-
- if (sendtype == MPI_DOUBLE && recvtype == MPI_DOUBLE)
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Allreduce(MPI_IN_PLACE,
- startbuf,
- recv_size/sizeof(double),
- MPI_DOUBLE,
- MPI_SUM,
- comm_ptr,
- mpierrno);
- else
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Allreduce(MPI_IN_PLACE,
- startbuf,
- recv_size/sizeof(int),
- MPI_UNSIGNED,
- MPI_BOR,
- comm_ptr,
- mpierrno);
-
- return rc;
-}
-
-
-/* ****************************************************************** */
-/**
- * \brief Use (tree/rect) MPIDO_Bcast() to do a fast Allgather operation
- *
- * \note This function requires one of these (for max performance):
- * - Tree broadcast
- */
-/* ****************************************************************** */
-int MPIDO_Allgather_bcast(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPI_Aint send_true_lb,
- MPI_Aint recv_true_lb,
- size_t send_size,
- size_t recv_size,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
- int i, np, rc = 0;
- MPI_Aint extent;
- const int rank = comm_ptr->rank;
-
- np = comm_ptr ->local_size;
- MPID_Datatype_get_extent_macro(recvtype, extent);
-
- MPIU_Ensure_Aint_fits_in_pointer ((MPIU_VOID_PTR_CAST_TO_MPI_AINT recvbuf +
- np * recvcount * extent));
- if (sendbuf != MPI_IN_PLACE)
- {
- void *destbuf = recvbuf + rank * recvcount * extent;
- MPIR_Localcopy(sendbuf,
- sendcount,
- sendtype,
- destbuf,
- recvcount,
- recvtype);
- }
-
-/* this code should either abort on first error or somehow aggregate
- * error codes, esp since it calls internal routines */
- for (i = 0; i < np; i++)
- {
- void *destbuf = recvbuf + i * recvcount * extent;
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Bcast(destbuf,
- recvcount,
- recvtype,
- i,
- comm_ptr,
- mpierrno);
- }
-
- return rc;
-}
-
-/* ****************************************************************** */
-/**
- * \brief Use (tree/rect) MPIDO_Alltoall() to do a fast Allgather operation
- *
- * \note This function requires that:
- * - The send/recv data types are contiguous
- * - DMA alltoallv is availible (for max performance)
- * - The datatype parameters needed added to the function signature
- */
-/* ****************************************************************** */
-int MPIDO_Allgather_alltoall(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPI_Aint send_true_lb,
- MPI_Aint recv_true_lb,
- size_t send_size,
- size_t recv_size,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
- int i, rc;
- void *a2a_sendbuf = NULL;
- char *destbuf=NULL;
- char *startbuf=NULL;
- const int size = comm_ptr->local_size;
- const int rank = comm_ptr->rank;
-
- int a2a_sendcounts[size];
- int a2a_senddispls[size];
- int a2a_recvcounts[size];
- int a2a_recvdispls[size];
-
- for (i = 0; i < size; ++i)
- {
- a2a_sendcounts[i] = send_size;
- a2a_senddispls[i] = 0;
- a2a_recvcounts[i] = recvcount;
- a2a_recvdispls[i] = recvcount * i;
- }
- if (sendbuf != MPI_IN_PLACE)
- {
- a2a_sendbuf = (char *)sendbuf + send_true_lb;
- }
- else
- {
- startbuf = (char *) recvbuf + recv_true_lb;
- destbuf = startbuf + rank * send_size;
- a2a_sendbuf = destbuf;
- a2a_sendcounts[rank] = 0;
-
- a2a_recvcounts[rank] = 0;
- }
-
-
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Alltoallv((const void *)a2a_sendbuf,
- a2a_sendcounts,
- a2a_senddispls,
- MPI_CHAR,
- recvbuf,
- a2a_recvcounts,
- a2a_recvdispls,
- recvtype,
- comm_ptr,
- mpierrno);
-
- return rc;
-}
-
-
-
-
-int
-MPIDO_Allgather(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- /* *********************************
- * Check the nature of the buffers
- * *********************************
- */
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- int config[6], i;
- MPID_Datatype * dt_null = NULL;
- MPI_Aint send_true_lb = 0;
- MPI_Aint recv_true_lb = 0;
- int comm_size = comm_ptr->local_size;
- size_t send_bytes = 0;
- size_t recv_bytes = 0;
- volatile unsigned allred_active = 1;
- volatile unsigned allgather_active = 1;
- pami_xfer_t allred;
- const int rank = comm_ptr->rank;
- int queryreq = 0;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const int selected_type = mpid->user_selected_type[PAMI_XFER_ALLGATHER];
-
- for (i=0;i<6;i++) config[i] = 1;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
-
-
- allred.cb_done = allred_cb_done;
- allred.cookie = (void *)&allred_active;
- /* Pick an algorithm that is guaranteed to work for the pre-allreduce */
- /* TODO: This needs selection for fast(er|est) allreduce protocol */
- allred.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLREDUCE][0][0];
- allred.cmd.xfer_allreduce.sndbuf = (void *)config;
- allred.cmd.xfer_allreduce.stype = PAMI_TYPE_SIGNED_INT;
- allred.cmd.xfer_allreduce.rcvbuf = (void *)config;
- allred.cmd.xfer_allreduce.rtype = PAMI_TYPE_SIGNED_INT;
- allred.cmd.xfer_allreduce.stypecount = 6;
- allred.cmd.xfer_allreduce.rtypecount = 6;
- allred.cmd.xfer_allreduce.op = PAMI_DATA_BAND;
-
- char use_tree_reduce, use_alltoall, use_bcast, use_pami, use_opt;
- char *rbuf = NULL, *sbuf = NULL;
-
- const char * const allgathers = mpid->allgathers;
- use_alltoall = allgathers[2];
- use_tree_reduce = allgathers[0];
- use_bcast = allgathers[1];
- use_pami = (selected_type == MPID_COLL_USE_MPICH) ? 0 : 1;
- use_opt = use_alltoall || use_tree_reduce || use_bcast || use_pami;
-
-
- TRACE_ERR("flags before: b: %d a: %d t: %d p: %d\n", use_bcast, use_alltoall, use_tree_reduce, use_pami);
- if(!use_opt)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH allgather algorithm\n");
- TRACE_ERR("No options set/available; using MPICH for allgather\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHER_MPICH");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint sdt_extent,rdt_extent;
- MPID_Datatype_get_extent_macro(sendtype, sdt_extent);
- MPID_Datatype_get_extent_macro(recvtype, rdt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(sdt_extent * sendcount);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, sdt_extent * sendcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(rdt_extent * recvcount);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, rdt_extent * recvcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, rdt_extent * recvcount);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Allgather(scbuf, sendcount, sendtype, rcbuf, recvcount, recvtype, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, rdt_extent * recvcount, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Allgather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
- }
- if ((sendcount < 1 && sendbuf != MPI_IN_PLACE) || recvcount < 1)
- return MPI_SUCCESS;
-
- /* Gather datatype information */
- MPIDI_Datatype_get_info(recvcount,
- recvtype,
- config[MPID_RECV_CONTIG],
- recv_bytes,
- dt_null,
- recv_true_lb);
-
- send_bytes = recv_bytes;
- rbuf = (char *)recvbuf+recv_true_lb;
-
- sbuf = PAMI_IN_PLACE;
- if(sendbuf != MPI_IN_PLACE)
- {
- MPIDI_Datatype_get_info(sendcount,
- sendtype,
- config[MPID_SEND_CONTIG],
- send_bytes,
- dt_null,
- send_true_lb);
- sbuf = (char *)sendbuf+send_true_lb;
- }
- else
- if(unlikely(verbose))
- fprintf(stderr,"allgather MPI_IN_PLACE buffering\n");
-
-
- /* verify everyone's datatype contiguity */
- /* Check buffer alignment now, since we're pre-allreducing anyway */
- /* Only do this if one of the glue protocols is likely to be used */
- if(use_alltoall || use_tree_reduce || use_bcast)
- {
- config[MPID_ALIGNEDBUFFER] =
- !((long)sendbuf & 0x0F) && !((long)recvbuf & 0x0F);
-
- /* #warning need to determine best allreduce for short messages */
- if(mpid->preallreduces[MPID_ALLGATHER_PREALLREDUCE])
- {
- TRACE_ERR("Preallreducing in allgather\n");
- MPIDI_Post_coll_t allred_post;
- MPIDI_Context_post(MPIDI_Context[0], &allred_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allred);
-
- MPID_PROGRESS_WAIT_WHILE(allred_active);
- }
-
-
- use_alltoall = allgathers[2] &&
- config[MPID_RECV_CONTIG] && config[MPID_SEND_CONTIG];;
-
- /* Note: some of the glue protocols use recv_bytes*comm_size rather than
- * recv_bytes so we use that for comparison here, plus we pass that in
- * to those protocols. */
- use_tree_reduce = allgathers[0] &&
- config[MPID_RECV_CONTIG] && config[MPID_SEND_CONTIG] &&
- config[MPID_RECV_CONTINUOUS] && (recv_bytes*comm_size%sizeof(unsigned)) == 0;
-
- use_bcast = allgathers[1];
-
- TRACE_ERR("flags after: b: %d a: %d t: %d p: %d\n", use_bcast, use_alltoall, use_tree_reduce, use_pami);
- }
- if(use_pami)
- {
- TRACE_ERR("Using PAMI-level allgather protocol\n");
- pami_xfer_t allgather;
- allgather.cb_done = allgather_cb_done;
- allgather.cookie = (void *)&allgather_active;
- allgather.cmd.xfer_allgather.rcvbuf = rbuf;
- allgather.cmd.xfer_allgather.sndbuf = sbuf;
- allgather.cmd.xfer_allgather.stype = PAMI_TYPE_BYTE;
- allgather.cmd.xfer_allgather.rtype = PAMI_TYPE_BYTE;
- allgather.cmd.xfer_allgather.stypecount = send_bytes;
- allgather.cmd.xfer_allgather.rtypecount = recv_bytes;
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- if((mpid->cutoff_size[PAMI_XFER_ALLGATHER][0] == 0) ||
- (mpid->cutoff_size[PAMI_XFER_ALLGATHER][0] > 0 && mpid->cutoff_size[PAMI_XFER_ALLGATHER][0] >= send_bytes))
- {
- allgather.algorithm = mpid->opt_protocol[PAMI_XFER_ALLGATHER][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLGATHER][0];
- queryreq = mpid->must_query[PAMI_XFER_ALLGATHER][0];
- }
- else
- {
- return MPIR_Allgather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
- }
- }
- else
- {
- allgather.algorithm = mpid->user_selected[PAMI_XFER_ALLGATHER];
- my_md = &mpid->user_metadata[PAMI_XFER_ALLGATHER];
- queryreq = selected_type;
- }
-
- if(unlikely( queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("Querying allgather protocol %s, type was: %d\n",
- my_md->name,
- selected_type);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
- if(my_md->check_correct.values.rangeminmax)
- {
- if((my_md->range_lo <= recv_bytes) &&
- (my_md->range_hi >= recv_bytes))
- ; /* ok, algorithm selected */
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%zu) outside range (%zu<->%zu) for %s.\n",
- recv_bytes,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&allgather);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH allgather\n",
- my_md->name);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHER_MPICH");
- return MPIR_Allgather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for allgather on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
- TRACE_ERR("Calling PAMI_Collective with allgather structure\n");
- MPIDI_Post_coll_t allgather_post;
- MPIDI_Context_post(MPIDI_Context[0], &allgather_post.state, MPIDI_Pami_post_wrapper, (void *)&allgather);
-
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
- MPID_PROGRESS_WAIT_WHILE(allgather_active);
- TRACE_ERR("Allgather done\n");
- return PAMI_SUCCESS;
- }
-
- if(use_tree_reduce)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using protocol GLUE_ALLREDUCE for allgather\n");
- TRACE_ERR("Using allgather via allreduce\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHER_OPT_ALLREDUCE");
- return MPIDO_Allgather_allreduce(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- send_true_lb, recv_true_lb, send_bytes, recv_bytes*comm_size, comm_ptr, mpierrno);
- }
- if(use_alltoall)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using protocol GLUE_BCAST for allgather\n");
- TRACE_ERR("Using allgather via alltoall\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHER_OPT_ALLTOALL");
- return MPIDO_Allgather_alltoall(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- send_true_lb, recv_true_lb, send_bytes, recv_bytes*comm_size, comm_ptr, mpierrno);
- }
-
- if(use_bcast)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using protocol GLUE_ALLTOALL for allgather\n");
- TRACE_ERR("Using allgather via bcast\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHER_OPT_BCAST");
- return MPIDO_Allgather_bcast(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- send_true_lb, recv_true_lb, send_bytes, recv_bytes*comm_size, comm_ptr, mpierrno);
- }
-
- /* Nothing used yet; dump to MPICH */
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH allgather algorithm\n");
- TRACE_ERR("Using allgather via mpich\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHER_MPICH");
- return MPIR_Allgather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
-}
-
-
-int
-MPIDO_Allgather_simple(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- /* *********************************
- * Check the nature of the buffers
- * *********************************
- */
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- MPID_Datatype * dt_null = NULL;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- MPI_Aint send_true_lb = 0;
- MPI_Aint recv_true_lb = 0;
- int snd_data_contig = 1, rcv_data_contig = 1;
- size_t send_size = 0;
- size_t recv_size = 0;
- MPID_Segment segment;
- volatile unsigned allgather_active = 1;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- const pami_metadata_t *my_md;
-
- char *rbuf = NULL, *sbuf = NULL;
-
-
- if ((sendcount < 1 && sendbuf != MPI_IN_PLACE) || recvcount < 1)
- return MPI_SUCCESS;
-
- /* Gather datatype information */
- MPIDI_Datatype_get_info(recvcount,
- recvtype,
- rcv_data_contig,
- recv_size,
- dt_null,
- recv_true_lb);
-
- send_size = recv_size;
-
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_ALLGATHER, send_size, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Allgather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- rbuf = (char *)recvbuf+recv_true_lb;
-
- if(!rcv_data_contig)
- {
- rcv_noncontig_buff = MPIU_Malloc(recv_size * size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendbuf == MPI_IN_PLACE)
- {
- sbuf = PAMI_IN_PLACE;
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- MPIR_Localcopy(recvbuf + (rank*recvcount*extent), recvcount, recvtype,
- rcv_noncontig_buff + (rank*recv_size), recv_size,MPI_CHAR);
- }
- }
-
- if(sendbuf != MPI_IN_PLACE)
- {
- MPIDI_Datatype_get_info(sendcount,
- sendtype,
- snd_data_contig,
- send_size,
- dt_null,
- send_true_lb);
-
- sbuf = (char *)sendbuf+send_true_lb;
-
- if(!snd_data_contig)
- {
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- DLOOP_Offset last = send_size;
- MPID_Segment_init(sendbuf, sendcount, sendtype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, snd_noncontig_buff);
- }
- }
- else
- sbuf = PAMI_IN_PLACE;
-
- TRACE_ERR("Using PAMI-level allgather protocol\n");
- pami_xfer_t allgather;
- allgather.cb_done = allgather_cb_done;
- allgather.cookie = (void *)&allgather_active;
- allgather.cmd.xfer_allgather.rcvbuf = rbuf;
- allgather.cmd.xfer_allgather.sndbuf = sbuf;
- allgather.cmd.xfer_allgather.stype = PAMI_TYPE_BYTE;/* stype is ignored when sndbuf == PAMI_IN_PLACE */
- allgather.cmd.xfer_allgather.rtype = PAMI_TYPE_BYTE;
- allgather.cmd.xfer_allgather.stypecount = send_size;
- allgather.cmd.xfer_allgather.rtypecount = recv_size;
- allgather.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLGATHER][0][0];
- my_md = &mpid->coll_metadata[PAMI_XFER_ALLGATHER][0][0];
-
- TRACE_ERR("Calling PAMI_Collective with allgather structure\n");
- MPIDI_Post_coll_t allgather_post;
- MPIDI_Context_post(MPIDI_Context[0], &allgather_post.state, MPIDI_Pami_post_wrapper, (void *)&allgather);
- TRACE_ERR("Allgather %s\n", MPIDI_Process.context_post.active>0?"posted":"invoked");
-
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
- MPID_PROGRESS_WAIT_WHILE(allgather_active);
- if(!rcv_data_contig)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size * size, MPI_CHAR,
- recvbuf, recvcount, recvtype);
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_data_contig) MPIU_Free(snd_noncontig_buff);
- TRACE_ERR("Allgather done\n");
- return MPI_SUCCESS;
-}
-
-
-int
-MPIDO_CSWrapper_allgather(pami_xfer_t *allgather,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *sbuf;
- MPIDI_coll_check_in_place(allgather->cmd.xfer_allgather.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( allgather->cmd.xfer_allgather.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIDI_Dtpami_to_dtmpi( allgather->cmd.xfer_allgather.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Allgather(sbuf,
- allgather->cmd.xfer_allgather.stypecount, sendtype,
- allgather->cmd.xfer_allgather.rcvbuf,
- allgather->cmd.xfer_allgather.rtypecount, recvtype,
- comm_ptr, &mpierrno);
- if(allgather->cb_done && rc == 0)
- allgather->cb_done(NULL, allgather->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/allgather/mpido_iallgather.c b/src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
deleted file mode 100644
index 82b7e97..0000000
--- a/src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/allgather/mpido_iallgather.c
- * \brief ???
- */
-
-/*#define TRACE_ON */
-#include <mpidimpl.h>
-
-int
-MPIDO_Iallgather(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPID_Comm * comm_ptr,
- MPID_Request ** request)
-{
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Iallgather_impl() function to invoke the mpich nbc implementation
- * of MPI_Iallgather().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Iallgather() with a blocking MPIR_Allgather().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH iallgather algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Allgather_impl(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, &mpierrno);
-
- /*
- * The blocking allgather has completed - create and complete a
- * MPID_Request object so the MPIR_Iallgather_impl() function does not
- * perform an additional iallgather.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/allgatherv/Makefile.mk b/src/mpid/pamid/src/coll/allgatherv/Makefile.mk
deleted file mode 100644
index c8895ca..0000000
--- a/src/mpid/pamid/src/coll/allgatherv/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c \
- src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c b/src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
deleted file mode 100644
index c930edf..0000000
--- a/src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/allgatherv/mpido_allgatherv.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-#include <mpidimpl.h>
-
-static void allgatherv_cb_done(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *)clientdata;
- (*active)--;
-}
-
-static void allred_cb_done(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *)clientdata;
- (*active)--;
-}
-
-
-/* ****************************************************************** */
-/**
- * \brief Use (tree) MPIDO_Allreduce() to do a fast Allgatherv operation
- *
- * \note This function requires that:
- * - The send/recv data types are contiguous
- * - The recv buffer is continuous
- * - Tree allreduce is availible (for max performance)
- */
-/* ****************************************************************** */
-#define MAX_ALLGATHERV_ALLREDUCE_BUFFER_SIZE (1024*1024*2)
-int MPIDO_Allgatherv_allreduce(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- int buffer_sum,
- const int *displs,
- MPI_Datatype recvtype,
- MPI_Aint send_true_lb,
- MPI_Aint recv_true_lb,
- size_t send_size,
- size_t recv_size,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
- int start, rc, i;
- int length;
- char *startbuf = NULL;
- char *destbuf = NULL;
- const int rank = comm_ptr->rank;
- TRACE_ERR("Entering MPIDO_Allgatherv_allreduce\n");
-
- startbuf = (char *) recvbuf + recv_true_lb;
- destbuf = startbuf + displs[rank] * recv_size;
-
- if (sendbuf != MPI_IN_PLACE)
- {
- char *outputbuf = (char *) sendbuf + send_true_lb;
- memcpy(destbuf, outputbuf, send_size);
- }
-
- //printf("buffer_sum %d, send_size %d recv_size %d\n", buffer_sum,
- // (int)send_size, (int)recv_size);
-
- /* TODO: Change to PAMI */
- /*integer/long/double allgathers only*/
- /*Do a convert and then do the allreudce*/
- if ( buffer_sum <= MAX_ALLGATHERV_ALLREDUCE_BUFFER_SIZE &&
- (send_size & 0x3)==0 && (recv_size & 0x3)==0)
- {
- double *tmprbuf = (double *)MPIU_Malloc(buffer_sum*2);
- if (tmprbuf == NULL)
- goto direct_algo; /*skip int to fp conversion and go to direct
- algo*/
-
- double *tmpsbuf = tmprbuf + (displs[rank]*recv_size)/sizeof(int);
- int *sibuf = (int *) destbuf;
-
- memset(tmprbuf, 0, displs[rank]*recv_size*2);
- start = (displs[rank] + recvcounts[rank]) * recv_size;
- length = buffer_sum - (displs[rank] + recvcounts[rank]) * recv_size;
- memset(tmprbuf + start/sizeof(int), 0, length*2);
-
- for(i = 0; i < (send_size/sizeof(int)); ++i)
- tmpsbuf[i] = (double)sibuf[i];
-
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Allreduce(MPI_IN_PLACE,
- tmprbuf,
- buffer_sum/sizeof(int),
- MPI_DOUBLE,
- MPI_SUM,
- comm_ptr,
- mpierrno);
-
- sibuf = (int *) startbuf;
- for(i = 0; i < (displs[rank]*recv_size/sizeof(int)); ++i)
- sibuf[i] = (int)tmprbuf[i];
-
- for(i = start/sizeof(int); i < buffer_sum/sizeof(int); ++i)
- sibuf[i] = (int)tmprbuf[i];
-
- MPIU_Free(tmprbuf);
- return rc;
- }
-
- direct_algo:
-
- start = 0;
- length = displs[rank] * recv_size;
- memset(startbuf + start, 0, length);
-
- start = (displs[rank] +
- recvcounts[rank]) * recv_size;
- length = buffer_sum - (displs[rank] +
- recvcounts[rank]) * recv_size;
- memset(startbuf + start, 0, length);
-
- TRACE_ERR("Calling MPIDO_Allreduce from MPIDO_Allgatherv_allreduce\n");
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Allreduce(MPI_IN_PLACE,
- startbuf,
- buffer_sum/sizeof(unsigned),
- MPI_UNSIGNED,
- MPI_BOR,
- comm_ptr,
- mpierrno);
-
- TRACE_ERR("Leaving MPIDO_Allgatherv_allreduce\n");
- return rc;
-}
-
-/* ****************************************************************** */
-/**
- * \brief Use (tree/rect) MPIDO_Bcast() to do a fast Allgatherv operation
- *
- * \note This function requires one of these (for max performance):
- * - Tree broadcast
- * - Rect broadcast
- * ? Binomial broadcast
- */
-/* ****************************************************************** */
-int MPIDO_Allgatherv_bcast(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- int buffer_sum,
- const int *displs,
- MPI_Datatype recvtype,
- MPI_Aint send_true_lb,
- MPI_Aint recv_true_lb,
- size_t send_size,
- size_t recv_size,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
- const int rank = comm_ptr->rank;
- TRACE_ERR("Entering MPIDO_Allgatherv_bcast\n");
- int i, rc=MPI_ERR_INTERN;
- MPI_Aint extent;
- MPID_Datatype_get_extent_macro(recvtype, extent);
-
- if (sendbuf != MPI_IN_PLACE)
- {
- void *destbuffer = recvbuf + displs[rank] * extent;
- MPIR_Localcopy(sendbuf,
- sendcount,
- sendtype,
- destbuffer,
- recvcounts[rank],
- recvtype);
- }
-
- TRACE_ERR("Calling MPIDO_Bcasts in MPIDO_Allgatherv_bcast\n");
- for (i = 0; i < comm_ptr->local_size; i++)
- {
- void *destbuffer = recvbuf + displs[i] * extent;
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Bcast(destbuffer,
- recvcounts[i],
- recvtype,
- i,
- comm_ptr,
- mpierrno);
- }
- TRACE_ERR("Leaving MPIDO_Allgatherv_bcast\n");
-
- return rc;
-}
-
-/* ****************************************************************** */
-/**
- * \brief Use (tree/rect) MPIDO_Alltoall() to do a fast Allgatherv operation
- *
- * \note This function requires that:
- * - The send/recv data types are contiguous
- * - DMA alltoallv is availible (for max performance)
- */
-/* ****************************************************************** */
-
-int MPIDO_Allgatherv_alltoall(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int *recvcounts,
- int buffer_sum,
- const int *displs,
- MPI_Datatype recvtype,
- MPI_Aint send_true_lb,
- MPI_Aint recv_true_lb,
- size_t send_size,
- size_t recv_size,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
- TRACE_ERR("Entering MPIDO_Allgatherv_alltoallv\n");
- size_t total_send_size;
- char *startbuf;
- char *destbuf;
- int i, rc;
- int my_recvcounts = -1;
- void *a2a_sendbuf = NULL;
- const int size = comm_ptr->local_size;
- int a2a_sendcounts[size];
- int a2a_senddispls[size];
- const int rank = comm_ptr->rank;
-
- total_send_size = recvcounts[rank] * recv_size;
- for (i = 0; i < size; ++i)
- {
- a2a_sendcounts[i] = total_send_size;
- a2a_senddispls[i] = 0;
- }
- if (sendbuf != MPI_IN_PLACE)
- {
- a2a_sendbuf = (char *)sendbuf + send_true_lb;
- }
- else
- {
- startbuf = (char *) recvbuf + recv_true_lb;
- destbuf = startbuf + displs[rank] * recv_size;
- a2a_sendbuf = destbuf;
- a2a_sendcounts[rank] = 0;
- my_recvcounts = recvcounts[rank];
- recvcounts[rank] = 0;
- }
-
- TRACE_ERR("Calling alltoallv in MPIDO_Allgatherv_alltoallv\n");
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Alltoallv(a2a_sendbuf,
- a2a_sendcounts,
- a2a_senddispls,
- MPI_CHAR,
- recvbuf,
- recvcounts,
- displs,
- recvtype,
- comm_ptr,
- mpierrno);
- if (sendbuf == MPI_IN_PLACE)
- recvcounts[rank] = my_recvcounts;
-
- TRACE_ERR("Leaving MPIDO_Allgatherv_alltoallv\n");
- return rc;
-}
-
-
-int
-MPIDO_Allgatherv(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *displs,
- MPI_Datatype recvtype,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Allgatherv\n");
- /* function pointer to be used to point to approperiate algorithm */
-
- /* Check the nature of the buffers */
- MPID_Datatype *dt_null = NULL;
- MPI_Aint send_true_lb = 0;
- MPI_Aint recv_true_lb = 0;
- size_t send_size = 0;
- size_t recv_size = 0;
- int config[6];
- int scount=sendcount;
-
- int i, rc, buffer_sum = 0;
- const int size = comm_ptr->local_size;
- char use_tree_reduce, use_alltoall, use_bcast, use_pami, use_opt;
- char *sbuf, *rbuf;
- const int rank = comm_ptr->rank;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- int queryreq = 0;
-
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const int selected_type = mpid->user_selected_type[PAMI_XFER_ALLGATHERV_INT];
-
- pami_xfer_t allred;
- volatile unsigned allred_active = 1;
- volatile unsigned allgatherv_active = 1;
- pami_type_t stype, rtype;
- int tmp;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
-
- for(i=0;i<6;i++) config[i] = 1;
-
- allred.cb_done = allred_cb_done;
- allred.cookie = (void *)&allred_active;
- allred.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLREDUCE][0][0];
- allred.cmd.xfer_allreduce.sndbuf = (void *)config;
- allred.cmd.xfer_allreduce.stype = PAMI_TYPE_SIGNED_INT;
- allred.cmd.xfer_allreduce.rcvbuf = (void *)config;
- allred.cmd.xfer_allreduce.rtype = PAMI_TYPE_SIGNED_INT;
- allred.cmd.xfer_allreduce.stypecount = 6;
- allred.cmd.xfer_allreduce.rtypecount = 6;
- allred.cmd.xfer_allreduce.op = PAMI_DATA_BAND;
-
- use_alltoall = mpid->allgathervs[2];
- use_tree_reduce = mpid->allgathervs[0];
- use_bcast = mpid->allgathervs[1];
- use_pami = selected_type != MPID_COLL_USE_MPICH;
-
- if((sendbuf != MPI_IN_PLACE) && (MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS))
- use_pami = 0;
- if(MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS)
- use_pami = 0;
-
- use_opt = use_alltoall || use_tree_reduce || use_bcast || use_pami;
-
- if(!use_opt) /* back to MPICH */
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH allgatherv type %u.\n",
- selected_type);
- TRACE_ERR("Using MPICH Allgatherv\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHERV_MPICH");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint sdt_extent,rdt_extent;
- MPID_Datatype_get_extent_macro(sendtype, sdt_extent);
- MPID_Datatype_get_extent_macro(recvtype, rdt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(sdt_extent * sendcount);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, sdt_extent * sendcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- size_t rtotal_buf;
- if(is_recv_dev_buf)
- {
- //Since displs can be non-continous, we need to calculate max buffer size
- int highest_displs = displs[size - 1];
- int highest_recvcount = recvcounts[size - 1];
- for(i = 0; i < size; i++)
- {
- if(displs[i]+recvcounts[i] > highest_displs+highest_recvcount)
- {
- highest_displs = displs[i];
- highest_recvcount = recvcounts[i];
- }
- }
- rtotal_buf = (highest_displs+highest_recvcount)*rdt_extent;
- rcbuf = MPIU_Malloc(rtotal_buf);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, rtotal_buf, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, rtotal_buf);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Allgatherv(scbuf, sendcount, sendtype, rcbuf, recvcounts, displs, recvtype, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, rtotal_buf, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
- }
-
- MPIDI_Datatype_get_info(1,
- recvtype,
- config[MPID_RECV_CONTIG],
- recv_size,
- dt_null,
- recv_true_lb);
-
- if(sendbuf == MPI_IN_PLACE)
- {
- sbuf = PAMI_IN_PLACE;
- if(unlikely(verbose))
- fprintf(stderr,"allgatherv MPI_IN_PLACE buffering\n");
- stype = rtype;
- scount = recvcounts[rank];
- send_size = recv_size * scount;
- }
- else
- {
- MPIDI_Datatype_get_info(sendcount,
- sendtype,
- config[MPID_SEND_CONTIG],
- send_size,
- dt_null,
- send_true_lb);
- sbuf = (char *)sendbuf+send_true_lb;
- }
-
- rbuf = (char *)recvbuf+recv_true_lb;
-
- if(use_alltoall || use_bcast || use_tree_reduce)
- {
- if (displs[0])
- config[MPID_RECV_CONTINUOUS] = 0;
-
- for (i = 1; i < size; i++)
- {
- buffer_sum += recvcounts[i - 1];
- if (buffer_sum != displs[i])
- {
- config[MPID_RECV_CONTINUOUS] = 0;
- break;
- }
- }
-
- buffer_sum += recvcounts[size - 1];
-
- buffer_sum *= recv_size;
-
- /* disable with "safe allgatherv" env var */
- if(mpid->preallreduces[MPID_ALLGATHERV_PREALLREDUCE])
- {
- MPIDI_Post_coll_t allred_post;
- MPIDI_Context_post(MPIDI_Context[0], &allred_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allred);
-
- MPID_PROGRESS_WAIT_WHILE(allred_active);
- }
-
- use_tree_reduce = mpid->allgathervs[0] &&
- config[MPID_RECV_CONTIG] && config[MPID_SEND_CONTIG] &&
- config[MPID_RECV_CONTINUOUS] && buffer_sum % sizeof(unsigned) == 0;
-
- use_alltoall = mpid->allgathervs[2] &&
- config[MPID_RECV_CONTIG] && config[MPID_SEND_CONTIG];
-
- use_bcast = mpid->allgathervs[1];
- }
-
- if(use_pami)
- {
- pami_xfer_t allgatherv;
- allgatherv.cb_done = allgatherv_cb_done;
- allgatherv.cookie = (void *)&allgatherv_active;
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- if((mpid->cutoff_size[PAMI_XFER_ALLGATHERV_INT][0] == 0) ||
- (mpid->cutoff_size[PAMI_XFER_ALLGATHERV_INT][0] > 0 && mpid->cutoff_size[PAMI_XFER_ALLGATHERV_INT][0] >= send_size))
- {
- allgatherv.algorithm = mpid->opt_protocol[PAMI_XFER_ALLGATHERV_INT][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLGATHERV_INT][0];
- queryreq = mpid->must_query[PAMI_XFER_ALLGATHERV_INT][0];
- }
- else
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
- }
- else
- {
- allgatherv.algorithm = mpid->user_selected[PAMI_XFER_ALLGATHERV_INT];
- my_md = &mpid->user_metadata[PAMI_XFER_ALLGATHERV_INT];
- queryreq = selected_type;
- }
-
- allgatherv.cmd.xfer_allgatherv_int.sndbuf = sbuf;
- allgatherv.cmd.xfer_allgatherv_int.rcvbuf = rbuf;
-
- allgatherv.cmd.xfer_allgatherv_int.stype = stype;
- allgatherv.cmd.xfer_allgatherv_int.rtype = rtype;
- allgatherv.cmd.xfer_allgatherv_int.stypecount = scount;
- allgatherv.cmd.xfer_allgatherv_int.rtypecounts = (int *) recvcounts;
- allgatherv.cmd.xfer_allgatherv_int.rdispls = (int *) displs;
-
- if(unlikely (queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("Querying allgatherv_int protocol %s, type was %d\n", my_md->name,
- selected_type);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
-/* Can't check ranges like this. Non-local. Comment out for now.
- if(my_md->check_correct.values.rangeminmax)
- {
- MPI_Aint data_true_lb;
- MPID_Datatype *data_ptr;
- int data_size, data_contig;
- MPIDI_Datatype_get_info(sendcount, sendtype, data_contig, data_size, data_ptr, data_true_lb);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ;
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- */
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&allgatherv);
- TRACE_ERR("Allgatherv bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH allgatherv.\n", my_md->name);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHERV_MPICH");
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for allgatherv on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
- MPIDI_Post_coll_t allgatherv_post;
- MPIDI_Context_post(MPIDI_Context[0], &allgatherv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allgatherv);
-
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
-
- TRACE_ERR("Rank %d waiting on active %d\n", rank, allgatherv_active);
- MPID_PROGRESS_WAIT_WHILE(allgatherv_active);
-
- return PAMI_SUCCESS;
- }
-
- /* TODO These need ordered in speed-order */
- if(use_tree_reduce)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using tree reduce allgatherv type %u.\n",
- selected_type);
- rc = MPIDO_Allgatherv_allreduce(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, buffer_sum, displs, recvtype,
- send_true_lb, recv_true_lb, send_size, recv_size,
- comm_ptr, mpierrno);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHERV_OPT_ALLREDUCE");
- return rc;
- }
-
- if(use_bcast)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using bcast allgatherv type %u.\n",
- selected_type);
- rc = MPIDO_Allgatherv_bcast(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, buffer_sum, displs, recvtype,
- send_true_lb, recv_true_lb, send_size, recv_size,
- comm_ptr, mpierrno);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHERV_OPT_BCAST");
- return rc;
- }
-
- if(use_alltoall)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using alltoall allgatherv type %u.\n",
- selected_type);
- rc = MPIDO_Allgatherv_alltoall(sendbuf, sendcount, sendtype,
- recvbuf, (int *)recvcounts, buffer_sum, displs, recvtype,
- send_true_lb, recv_true_lb, send_size, recv_size,
- comm_ptr, mpierrno);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHERV_OPT_ALLTOALL");
- return rc;
- }
-
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH allgatherv type %u.\n",
- selected_type);
- TRACE_ERR("Using MPICH for Allgatherv\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLGATHERV_MPICH");
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
-}
-
-int
-MPIDO_Allgatherv_simple(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *displs,
- MPI_Datatype recvtype,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Allgatherv_optimized\n");
- /* function pointer to be used to point to approperiate algorithm */
- /* Check the nature of the buffers */
- MPID_Datatype *dt_null = NULL;
- MPI_Aint send_true_lb = 0;
- MPI_Aint recv_true_lb = 0;
- size_t send_size = 0;
- size_t recv_size = 0;
- size_t rcvtypelen = 0;
- int snd_data_contig = 0, rcv_data_contig = 0;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- int scount=sendcount;
-
- char *sbuf, *rbuf;
- pami_type_t stype = NULL, rtype;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- int recvcontinuous=0;
- size_t totalrecvcount=0;
- int *lrecvdispls = NULL; /* possible local displs calculated for noncontinous */
- int *lrecvcounts = NULL;/* possible local counts calculated for noncontinous */
- const int *precvdispls = displs; /* pointer to displs to use as pami parmi */
- const int *precvcounts = recvcounts; /* pointer to counts to use as pami parmi */
- int inplace = sendbuf == MPI_IN_PLACE? 1 : 0;
-
-
- volatile unsigned allgatherv_active = 1;
- int recvok=PAMI_SUCCESS, sendok=PAMI_SUCCESS;
- int tmp;
- const pami_metadata_t *my_md;
-
-
- MPIDI_Datatype_get_info(1,
- recvtype,
- rcv_data_contig,
- rcvtypelen,
- dt_null,
- recv_true_lb);
-
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_ALLGATHERV_INT, rcvtypelen * recvcounts[0], advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
-
- if(!inplace)
- {
- sendok = MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp);
- MPIDI_Datatype_get_info(sendcount, sendtype, snd_data_contig, send_size, dt_null, send_true_lb);
- sbuf = (char *)sendbuf + send_true_lb;
- if(!snd_data_contig || (sendok != PAMI_SUCCESS))
- {
- stype = PAMI_TYPE_UNSIGNED_CHAR;
- scount = send_size;
- if(!snd_data_contig)
- {
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- MPIR_Localcopy(sendbuf, sendcount, sendtype,
- snd_noncontig_buff, send_size,MPI_CHAR);
- }
- }
- }
- else
- sbuf = PAMI_IN_PLACE;
-
- recvok = MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp);
- rbuf = (char *)recvbuf+recv_true_lb;
- if(!rcv_data_contig || (recvok != PAMI_SUCCESS))
- {
- rtype = PAMI_TYPE_UNSIGNED_CHAR;
- totalrecvcount = recvcounts[0];
- recvcontinuous = displs[0] == 0? 1 : 0 ;
- int i;
- precvdispls = lrecvdispls = MPIU_Malloc(size*sizeof(int));
- precvcounts = lrecvcounts = MPIU_Malloc(size*sizeof(int));
- lrecvdispls[0]= 0;
- lrecvcounts[0]= rcvtypelen * recvcounts[0];
- for(i=1; i<size; ++i)
- {
- lrecvdispls[i]= rcvtypelen * totalrecvcount;
- totalrecvcount += recvcounts[i];
- if(displs[i] != (displs[i-1] + recvcounts[i-1]))
- recvcontinuous = 0;
- lrecvcounts[i]= rcvtypelen * recvcounts[i];
- }
- recv_size = rcvtypelen * totalrecvcount;
- TRACE_ERR("Pack receive rcv_contig %zu, recvok %zd, totalrecvcount %zu, recvcontinuous %zu, rcvtypelen %zu, recv_size %zu\n",
- (size_t)rcv_data_contig, (size_t)recvok, (size_t)totalrecvcount, (size_t)recvcontinuous,(size_t)rcvtypelen, (size_t)recv_size);
-
- rcv_noncontig_buff = MPIU_Malloc(recv_size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(inplace)
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- MPIR_Localcopy(recvbuf + displs[rank]*extent, recvcounts[rank], recvtype,
- rcv_noncontig_buff + precvdispls[rank], precvcounts[rank],MPI_CHAR);
- scount = precvcounts[rank];
- stype = PAMI_TYPE_UNSIGNED_CHAR;
- sbuf = PAMI_IN_PLACE;
- }
- }
-
-
- pami_xfer_t allgatherv;
- allgatherv.cb_done = allgatherv_cb_done;
- allgatherv.cookie = (void *)&allgatherv_active;
- allgatherv.cmd.xfer_allgatherv_int.sndbuf = sbuf;
- allgatherv.cmd.xfer_allgatherv_int.rcvbuf = rbuf;
- allgatherv.cmd.xfer_allgatherv_int.stype = stype;/* stype is ignored when sndbuf == PAMI_IN_PLACE */
- allgatherv.cmd.xfer_allgatherv_int.rtype = rtype;
- allgatherv.cmd.xfer_allgatherv_int.stypecount = scount;
- allgatherv.cmd.xfer_allgatherv_int.rtypecounts = (int *) precvcounts;
- allgatherv.cmd.xfer_allgatherv_int.rdispls = (int *) precvdispls;
- allgatherv.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLGATHERV_INT][0][0];
- my_md = &mpid->coll_metadata[PAMI_XFER_ALLGATHERV_INT][0][0];
-
- TRACE_ERR("Calling allgatherv via %s()\n", MPIDI_Process.context_post.active>0?"PAMI_Collective":"PAMI_Context_post");
- MPIDI_Post_coll_t allgatherv_post;
- MPIDI_Context_post(MPIDI_Context[0], &allgatherv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allgatherv);
-
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
-
- TRACE_ERR("Rank %d waiting on active %d\n", rank, allgatherv_active);
- MPID_PROGRESS_WAIT_WHILE(allgatherv_active);
-
- if(!rcv_data_contig || (recvok != PAMI_SUCCESS))
- {
- if(recvcontinuous)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size,MPI_CHAR,
- recvbuf, totalrecvcount, recvtype);
- }
- else
- {
- size_t extent;
- int i;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)rcv_noncontig_buff+ precvdispls[i];
- char* rcbuf = (char*)recvbuf + displs[i]*extent;
- MPIR_Localcopy(scbuf, precvcounts[i], MPI_CHAR,
- rcbuf, recvcounts[i], recvtype);
- TRACE_ERR("Pack recv src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)precvdispls[i],(size_t)i,(size_t)precvcounts[i],(size_t)precvdispls[i], *(int*)scbuf);
- TRACE_ERR("Pack recv dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)displs[i],(size_t)i,(size_t)recvcounts[i],(size_t)displs[i], *(int*)rcbuf);
- }
- }
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_data_contig) MPIU_Free(snd_noncontig_buff);
- if(lrecvdispls) MPIU_Free(lrecvdispls);
- if(lrecvcounts) MPIU_Free(lrecvcounts);
-
- return MPI_SUCCESS;
-}
-
-
-int
-MPIDO_CSWrapper_allgatherv(pami_xfer_t *allgatherv,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *sbuf;
- MPIDI_coll_check_in_place(allgatherv->cmd.xfer_allgatherv_int.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( allgatherv->cmd.xfer_allgatherv_int.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIDI_Dtpami_to_dtmpi( allgatherv->cmd.xfer_allgatherv_int.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Allgatherv(sbuf,
- allgatherv->cmd.xfer_allgatherv_int.stypecount, sendtype,
- allgatherv->cmd.xfer_allgatherv_int.rcvbuf,
- allgatherv->cmd.xfer_allgatherv_int.rtypecounts,
- allgatherv->cmd.xfer_allgatherv_int.rdispls, recvtype,
- comm_ptr, &mpierrno);
- if(allgatherv->cb_done && rc == 0)
- allgatherv->cb_done(NULL, allgatherv->cookie, PAMI_SUCCESS);
- return rc;
-
-
-}
-
diff --git a/src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c b/src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
deleted file mode 100644
index 68d47c7..0000000
--- a/src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/allgatherv/mpido_iallgatherv.c
- * \brief ???
- */
-
-/*#define TRACE_ON */
-#include <mpidimpl.h>
-
-int
-MPIDO_Iallgatherv(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *displs,
- MPI_Datatype recvtype,
- MPID_Comm * comm_ptr,
- MPID_Request ** request)
-{
- TRACE_ERR("Entering MPIDO_Iallgatherv\n");
-
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Iallgather_impl() function to invoke the mpich nbc implementation
- * of MPI_Iallgather().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Iallgather() with a blocking MPIR_Allgather().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH iallgather algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Allgatherv_impl(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, &mpierrno);
-
- /*
- * The blocking allgather has completed - create and complete a
- * MPID_Request object so the MPIR_Iallgather_impl() function does not
- * perform an additional iallgather.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/allreduce/Makefile.mk b/src/mpid/pamid/src/coll/allreduce/Makefile.mk
deleted file mode 100644
index 875e2d9..0000000
--- a/src/mpid/pamid/src/coll/allreduce/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c \
- src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c b/src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c
deleted file mode 100644
index a569ba1..0000000
--- a/src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c
+++ /dev/null
@@ -1,562 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/allreduce/mpido_allreduce.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-
-#include <mpidimpl.h>
-/*
-#undef TRACE_ERR
-#define TRACE_ERR(format, ...) fprintf(stderr, format, ##__VA_ARGS__)
-*/
-static void cb_allreduce(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *) clientdata;
- TRACE_ERR("callback enter, active: %d\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-
-int MPIDO_Allreduce(const void *sendbuf,
- void *recvbuf,
- int count,
- MPI_Datatype dt,
- MPI_Op op,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- void *sbuf;
- TRACE_ERR("Entering mpido_allreduce\n");
- pami_type_t pdt;
- pami_data_function pop;
- int mu;
- int rc;
-#ifdef TRACE_ON
- int len;
- char op_str[255];
- char dt_str[255];
- MPIDI_Op_to_string(op, op_str);
- PMPI_Type_get_name(dt, dt_str, &len);
-#endif
- volatile unsigned active = 1;
- pami_xfer_t allred;
- pami_algorithm_t my_allred = 0;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int alg_selected = 0;
- const int rank = comm_ptr->rank;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_ALLREDUCE];
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- int queryreq = 0;
- if(likely(dt == MPI_DOUBLE || dt == MPI_DOUBLE_PRECISION))
- {
- rc = MPI_SUCCESS;
- pdt = PAMI_TYPE_DOUBLE;
- if(likely(selected_type == MPID_COLL_OPTIMIZED) &&
- (mpid->query_cached_allreduce != MPID_COLL_USE_MPICH))
- {
- /* double protocol works on all message sizes */
- my_allred = mpid->cached_allreduce;
- my_md = &mpid->cached_allreduce_md;
- alg_selected = 1;
- }
- if(likely(op == MPI_SUM))
- pop = PAMI_DATA_SUM;
- else if(likely(op == MPI_MAX))
- pop = PAMI_DATA_MAX;
- else if(likely(op == MPI_MIN))
- pop = PAMI_DATA_MIN;
- else
- {
- alg_selected = 0;
- rc = MPIDI_Datatype_to_pami(dt, &pdt, op, &pop, &mu);
- }
- }
- else rc = MPIDI_Datatype_to_pami(dt, &pdt, op, &pop, &mu);
-
- if(unlikely(verbose))
- fprintf(stderr,"allred rc %u,count %d, Datatype %p, op %p, mu %u, selectedvar %u != %u, sendbuf %p, recvbuf %p\n",
- rc, count, pdt, pop, mu,
- (unsigned)selected_type,MPID_COLL_USE_MPICH, sendbuf, recvbuf);
- /* convert to metadata query */
- /* Punt count 0 allreduce to MPICH. Let them do whatever's 'right' */
- if(unlikely(rc != MPI_SUCCESS || (count==0) ||
- selected_type == MPID_COLL_USE_MPICH))
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH allreduce type %u.\n",
- selected_type);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLREDUCE_MPICH");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint dt_extent;
- MPID_Datatype_get_extent_macro(dt, dt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(dt_extent * count);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, dt_extent * count, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(dt_extent * count);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, dt_extent * count, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, dt_extent * count);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Allreduce(scbuf, rcbuf, count, dt, op, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, dt_extent * count, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Allreduce(sendbuf, recvbuf, count, dt, op, comm_ptr, mpierrno);
- }
-
- sbuf = (void *)sendbuf;
- if(unlikely(sendbuf == MPI_IN_PLACE))
- {
- if(unlikely(verbose))
- fprintf(stderr,"allreduce MPI_IN_PLACE buffering\n");
- sbuf = PAMI_IN_PLACE;
- }
-
- allred.cb_done = cb_allreduce;
- allred.cookie = (void *)&active;
- allred.cmd.xfer_allreduce.sndbuf = sbuf;
- allred.cmd.xfer_allreduce.stype = pdt;
- allred.cmd.xfer_allreduce.rcvbuf = recvbuf;
- allred.cmd.xfer_allreduce.rtype = pdt;
- allred.cmd.xfer_allreduce.stypecount = count;
- allred.cmd.xfer_allreduce.rtypecount = count;
- allred.cmd.xfer_allreduce.op = pop;
-
- TRACE_ERR("Allreduce - Basic Collective Selection\n");
-
- if(unlikely(!alg_selected)) /* Cached double algorithm not selected above */
- {
- if(likely(selected_type == MPID_COLL_OPTIMIZED))
- {
- if(mpid->query_cached_allreduce != MPID_COLL_USE_MPICH)
- { /* try the cached algorithm first, assume it's always a query algorithm so query now */
- my_allred = mpid->cached_allreduce;
- my_md = &mpid->cached_allreduce_md;
- alg_selected = 1;
- if(my_md->check_fn != NULL)/*This should always be the case in FCA.. Otherwise punt to mpich*/
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying allreduce algorithm %s\n",
- my_md->name);
- result = my_md->check_fn(&allred);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- /* \todo Ignore check_correct.values.nonlocal until we implement the
- 'pre-allreduce allreduce' or the 'safe' environment flag.
- We will basically assume 'safe' -- that all ranks are aligned (or not).
- */
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(!result.bitmask)
- ; /* ok, algorithm selected */
- else
- {
- alg_selected = 0;
- if(unlikely(verbose))
- fprintf(stderr,"check_fn failed for %s.\n", my_md->name);
- }
- }
- else /* no check_fn, manually look at the metadata fields */
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- /* Check if the message range if restricted */
- if(my_md->check_correct.values.rangeminmax)
- {
- int data_size;
- MPIDI_Datatype_get_data_size(count, dt, data_size);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ; /* ok, algorithm selected */
- else
- {
- if(unlikely(verbose))
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- alg_selected = 0;
- }
- }
- /* \todo check the rest of the metadata */
- }
- }
- /* If we didn't use the cached protocol above (query failed?) then check regular optimized protocol fields */
- if(!alg_selected)
- {
- const int queryreq0 = mpid->must_query[PAMI_XFER_ALLREDUCE][0];
- const int queryreq1 = mpid->must_query[PAMI_XFER_ALLREDUCE][1];
- /* TODO this really needs to be cleaned up for BGQ and fca */
- if(queryreq0 == MPID_COLL_NOQUERY &&
- count <= mpid->cutoff_size[PAMI_XFER_ALLREDUCE][0])
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- my_allred = mpid->opt_protocol[PAMI_XFER_ALLREDUCE][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLREDUCE][0];
- alg_selected = 1;
- }
- else if(queryreq1 == MPID_COLL_NOQUERY &&
- count > mpid->cutoff_size[PAMI_XFER_ALLREDUCE][0])
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- my_allred = mpid->opt_protocol[PAMI_XFER_ALLREDUCE][1];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLREDUCE][1];
- alg_selected = 1;
- }
- else if(((queryreq0 == MPID_COLL_CHECK_FN_REQUIRED) ||
- (queryreq0 == MPID_COLL_QUERY) ||
- (queryreq0 == MPID_COLL_ALWAYS_QUERY)) &&
- ((mpid->cutoff_size[PAMI_XFER_ALLREDUCE][0] == 0) ||
- (count <= mpid->cutoff_size[PAMI_XFER_ALLREDUCE][0] && mpid->cutoff_size[PAMI_XFER_ALLREDUCE][0] > 0)))
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- my_allred = mpid->opt_protocol[PAMI_XFER_ALLREDUCE][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLREDUCE][0];
- alg_selected = 1;
- queryreq = queryreq0;
- }
- else if((queryreq1 == MPID_COLL_CHECK_FN_REQUIRED) ||
- (queryreq1 == MPID_COLL_QUERY) ||
- (queryreq1 == MPID_COLL_ALWAYS_QUERY))
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- my_allred = mpid->opt_protocol[PAMI_XFER_ALLREDUCE][1];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLREDUCE][1];
- alg_selected = 1;
- queryreq = queryreq1;
- }
- TRACE_ERR("Alg selected: %d\n", alg_selected);
- if(likely(alg_selected))
- {
- if(unlikely((queryreq == MPID_COLL_CHECK_FN_REQUIRED) ||
- (queryreq == MPID_COLL_QUERY) ||
- (queryreq == MPID_COLL_ALWAYS_QUERY)))
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- if(my_md->check_fn != NULL)/*This should always be the case in FCA.. Otherwise punt to mpich*/
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying allreduce algorithm %s\n",
- my_md->name);
- result = my_md->check_fn(&allred);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- /* \todo Ignore check_correct.values.nonlocal until we implement the
- 'pre-allreduce allreduce' or the 'safe' environment flag.
- We will basically assume 'safe' -- that all ranks are aligned (or not).
- */
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(!result.bitmask)
- ; /* ok, algorithm selected */
- else
- {
- alg_selected = 0;
- if(unlikely(verbose))
- fprintf(stderr,"check_fn failed for %s.\n", my_md->name);
- }
- }
- else /* no check_fn, manually look at the metadata fields */
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- /* Check if the message range if restricted */
- if(my_md->check_correct.values.rangeminmax)
- {
- int data_size;
- MPIDI_Datatype_get_data_size(count, dt, data_size);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ; /* ok, algorithm selected */
- else
- {
- if(unlikely(verbose))
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- alg_selected = 0;
- }
- }
- /* \todo check the rest of the metadata */
- }
- }
- else
- {
- TRACE_ERR("Using %s for allreduce\n", my_md->name);
- }
- }
- }
- }
- else
- {
- TRACE_ERR("Non-Optimzed selection line %d\n",__LINE__);
- my_allred = mpid->user_selected[PAMI_XFER_ALLREDUCE];
- my_md = &mpid->user_metadata[PAMI_XFER_ALLREDUCE];
- if(selected_type == MPID_COLL_QUERY ||
- selected_type == MPID_COLL_ALWAYS_QUERY ||
- selected_type == MPID_COLL_CHECK_FN_REQUIRED)
- {
- TRACE_ERR("Non-Optimzed selection line %d\n",__LINE__);
- if(my_md->check_fn != NULL)
- {
- /* For now, we don't distinguish between MPID_COLL_ALWAYS_QUERY &
- MPID_COLL_CHECK_FN_REQUIRED, we just call the fn */
- metadata_result_t result = {0};
- TRACE_ERR("querying allreduce algorithm %s, type was %d\n",
- my_md->name,
- selected_type);
- result = mpid->user_metadata[PAMI_XFER_ALLREDUCE].check_fn(&allred);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- /* \todo Ignore check_correct.values.nonlocal until we implement the
- 'pre-allreduce allreduce' or the 'safe' environment flag.
- We will basically assume 'safe' -- that all ranks are aligned (or not).
- */
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(!result.bitmask)
- alg_selected = 1; /* query algorithm successfully selected */
- else
- if(unlikely(verbose))
- fprintf(stderr,"check_fn failed for %s.\n", my_md->name);
- }
- else /* no check_fn, manually look at the metadata fields */
- {
- TRACE_ERR("Non-Optimzed selection line %d\n",__LINE__);
- /* Check if the message range if restricted */
- if(my_md->check_correct.values.rangeminmax)
- {
- int data_size;
- MPIDI_Datatype_get_data_size(count, dt, data_size);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- alg_selected = 1; /* query algorithm successfully selected */
- else
- if(unlikely(verbose))
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- /* \todo check the rest of the metadata */
- }
- }
- else alg_selected = 1; /* non-query algorithm selected */
-
- }
- }
-
- if(unlikely(!alg_selected)) /* must be fallback to MPICH */
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH allreduce\n");
- MPIDI_Update_last_algorithm(comm_ptr, "ALLREDUCE_MPICH");
- return MPIR_Allreduce(sendbuf, recvbuf, count, dt, op, comm_ptr, mpierrno);
- }
- allred.algorithm = my_allred;
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for allreduce on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
-
- MPIDI_Post_coll_t allred_post;
- MPIDI_Context_post(MPIDI_Context[0], &allred_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allred);
-
- MPID_assert(rc == PAMI_SUCCESS);
- MPIDI_Update_last_algorithm(comm_ptr,my_md->name);
- MPID_PROGRESS_WAIT_WHILE(active);
- TRACE_ERR("allreduce done\n");
- return MPI_SUCCESS;
-}
-
-int MPIDO_Allreduce_simple(const void *sendbuf,
- void *recvbuf,
- int count,
- MPI_Datatype dt,
- MPI_Op op,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- void *sbuf;
- TRACE_ERR("Entering MPIDO_Allreduce_optimized\n");
- pami_type_t pdt;
- pami_data_function pop;
- int mu;
- int rc;
-#ifdef TRACE_ON
- int len;
- char op_str[255];
- char dt_str[255];
- MPIDI_Op_to_string(op, op_str);
- PMPI_Type_get_name(dt, dt_str, &len);
-#endif
- volatile unsigned active = 1;
- pami_xfer_t allred;
- const pami_metadata_t *my_allred_md = (pami_metadata_t *)NULL;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- MPID_Datatype *data_ptr;
- MPI_Aint data_true_lb = 0;
- int data_size, data_contig;
-
- MPIDI_Datatype_get_info(1, dt,
- data_contig, data_size, data_ptr, data_true_lb);
-
-
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_ALLREDUCE, data_size * count, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Allreduce(sendbuf, recvbuf, count, dt, op, comm_ptr, mpierrno);
- }
- }
- }
-
-
- rc = MPIDI_Datatype_to_pami(dt, &pdt, op, &pop, &mu);
-
- /* convert to metadata query */
- /* Punt count 0 allreduce to MPICH. Let them do whatever's 'right' */
- if(unlikely(rc != MPI_SUCCESS || (count==0)))
- {
- MPIDI_Update_last_algorithm(comm_ptr, "ALLREDUCE_MPICH");
- return MPIR_Allreduce(sendbuf, recvbuf, count, dt, op, comm_ptr, mpierrno);
- }
-
- if(!data_contig)
- {
- MPIDI_Update_last_algorithm(comm_ptr, "ALLREDUCE_MPICH");
- return MPIR_Allreduce(sendbuf, recvbuf, count, dt, op, comm_ptr, mpierrno);
- }
-
- sbuf = (void *)sendbuf;
- if(unlikely(sendbuf == MPI_IN_PLACE))
- {
- sbuf = PAMI_IN_PLACE;
- }
-
- allred.cb_done = cb_allreduce;
- allred.cookie = (void *)&active;
- allred.cmd.xfer_allreduce.sndbuf = sbuf;
- allred.cmd.xfer_allreduce.stype = pdt;
- allred.cmd.xfer_allreduce.rcvbuf = recvbuf;
- allred.cmd.xfer_allreduce.rtype = pdt;
- allred.cmd.xfer_allreduce.stypecount = count;
- allred.cmd.xfer_allreduce.rtypecount = count;
- allred.cmd.xfer_allreduce.op = pop;
- allred.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLREDUCE][0][0];
- my_allred_md = &mpid->coll_metadata[PAMI_XFER_ALLREDUCE][0][0];
-
- MPIDI_Post_coll_t allred_post;
- MPIDI_Context_post(MPIDI_Context[0], &allred_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allred);
-
- MPID_assert(rc == PAMI_SUCCESS);
- MPIDI_Update_last_algorithm(comm_ptr,my_allred_md->name);
- MPID_PROGRESS_WAIT_WHILE(active);
- TRACE_ERR("Allreduce done\n");
- return MPI_SUCCESS;
-}
-
-int
-MPIDO_CSWrapper_allreduce(pami_xfer_t *allreduce,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype type;
- MPI_Op op;
- void *sbuf;
- MPIDI_coll_check_in_place(allreduce->cmd.xfer_allreduce.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( allreduce->cmd.xfer_allreduce.stype,
- &type,
- allreduce->cmd.xfer_allreduce.op,
- &op);
- if(rc == -1) return rc;
-
- rc = MPIR_Allreduce(sbuf,
- allreduce->cmd.xfer_allreduce.rcvbuf,
- allreduce->cmd.xfer_allreduce.rtypecount,
- type, op, comm_ptr, &mpierrno);
- if(allreduce->cb_done && rc == 0)
- allreduce->cb_done(NULL, allreduce->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c b/src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
deleted file mode 100644
index 6446db7..0000000
--- a/src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/allreduce/mpido_iallreduce.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-
-#include <mpidimpl.h>
-
-int MPIDO_Iallreduce(const void *sendbuf,
- void *recvbuf,
- int count,
- MPI_Datatype dt,
- MPI_Op op,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- TRACE_ERR("Entering mpido_iallreduce\n");
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Iallreduce_impl() function to invoke the mpich nbc implementation
- * of MPI_Iallreduce().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Iallreduce() with a blocking MPIR_Allreduce().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH iallreduce algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Allreduce_impl(sendbuf, recvbuf, count, dt, op,
- comm_ptr, &mpierrno);
-
- /*
- * The blocking allreduce has completed - create and complete a
- * MPID_Request object so the MPIR_Iallreduce_impl() function does not
- * perform an additional iallreduce.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/alltoall/Makefile.mk b/src/mpid/pamid/src/coll/alltoall/Makefile.mk
deleted file mode 100644
index f82f25e..0000000
--- a/src/mpid/pamid/src/coll/alltoall/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c \
- src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c b/src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
deleted file mode 100644
index ee25766..0000000
--- a/src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/alltoall/mpido_alltoall.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-
-#include <mpidimpl.h>
-
-static void cb_alltoall(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *)clientdata;
- TRACE_ERR("alltoall callback enter, active: %d\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-
-
-int MPIDO_Alltoall(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Alltoall\n");
- volatile unsigned active = 1;
- MPID_Datatype *sdt, *rdt;
- pami_type_t stype, rtype;
- MPI_Aint sdt_true_lb=0, rdt_true_lb;
- MPIDI_Post_coll_t alltoall_post;
- int snd_contig, rcv_contig, pamidt=1;
- int sndlen ATTRIBUTE((unused)), rcvlen ATTRIBUTE((unused));
- int tmp;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (comm_ptr->rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_ALLTOALL];
-
- if(sendbuf != MPI_IN_PLACE)
- {
- MPIDI_Datatype_get_info(1, sendtype, snd_contig, sndlen, sdt, sdt_true_lb);
- if(!snd_contig) pamidt = 0;
- }
- MPIDI_Datatype_get_info(1, recvtype, rcv_contig, rcvlen, rdt, rdt_true_lb);
- if(!rcv_contig) pamidt = 0;
-
- /* Alltoall is much simpler if bytes are required because we don't need to
- * malloc displ/count arrays and copy things
- */
-
-
- /* Is it a built in type? If not, send to MPICH */
- if(sendbuf != MPI_IN_PLACE && (MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS))
- pamidt = 0;
- if(MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS)
- pamidt = 0;
-
- if((selected_type == MPID_COLL_USE_MPICH) ||
- pamidt == 0)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH alltoall algorithm\n");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint sdt_extent,rdt_extent;
- MPID_Datatype_get_extent_macro(sendtype, sdt_extent);
- MPID_Datatype_get_extent_macro(recvtype, rdt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(sdt_extent * sendcount);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, sdt_extent * sendcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(recvcount * rdt_extent);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, recvcount * rdt_extent, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, recvcount * rdt_extent);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Alltoall_intra(scbuf, sendcount, sendtype, rcbuf, recvcount, recvtype, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, recvcount * rdt_extent, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Alltoall_intra(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
-
- }
-
- pami_xfer_t alltoall;
- pami_algorithm_t my_alltoall;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- TRACE_ERR("Optimized alltoall was pre-selected\n");
- my_alltoall = mpid->opt_protocol[PAMI_XFER_ALLTOALL][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLTOALL][0];
- queryreq = mpid->must_query[PAMI_XFER_ALLTOALL][0];
- }
- else
- {
- TRACE_ERR("Alltoall was specified by user\n");
- my_alltoall = mpid->user_selected[PAMI_XFER_ALLTOALL];
- my_md = &mpid->user_metadata[PAMI_XFER_ALLTOALL];
- queryreq = selected_type;
- }
- char *pname = my_md->name;
- TRACE_ERR("Using alltoall protocol %s\n", pname);
-
- alltoall.cb_done = cb_alltoall;
- alltoall.cookie = (void *)&active;
- alltoall.algorithm = my_alltoall;
- if(sendbuf == MPI_IN_PLACE)
- {
- if(unlikely(verbose))
- fprintf(stderr,"alltoall MPI_IN_PLACE buffering\n");
- alltoall.cmd.xfer_alltoall.stype = rtype;
- alltoall.cmd.xfer_alltoall.stypecount = recvcount;
- alltoall.cmd.xfer_alltoall.sndbuf = PAMI_IN_PLACE;
- }
- else
- {
- alltoall.cmd.xfer_alltoall.stype = stype;
- alltoall.cmd.xfer_alltoall.stypecount = sendcount;
- alltoall.cmd.xfer_alltoall.sndbuf = (char *)sendbuf + sdt_true_lb;
- }
- alltoall.cmd.xfer_alltoall.rcvbuf = (char *)recvbuf + rdt_true_lb;
-
- alltoall.cmd.xfer_alltoall.rtypecount = recvcount;
- alltoall.cmd.xfer_alltoall.rtype = rtype;
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying alltoall protocol %s, query level was %d\n", pname,
- queryreq);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
- if(my_md->check_correct.values.rangeminmax)
- {
- MPI_Aint data_true_lb ATTRIBUTE((unused));
- MPID_Datatype *data_ptr;
- int data_size, data_contig ATTRIBUTE((unused));
- MPIDI_Datatype_get_info(sendcount, sendtype, data_contig, data_size, data_ptr, data_true_lb);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ; /* ok, algorithm selected */
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&alltoall);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH alltoall.\n", pname);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLTOALL_MPICH");
- return MPIR_Alltoall_intra(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for alltoall on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
-
- MPIDI_Context_post(MPIDI_Context[0], &alltoall_post.state,
- MPIDI_Pami_post_wrapper, (void *)&alltoall);
-
- TRACE_ERR("Waiting on active\n");
- MPID_PROGRESS_WAIT_WHILE(active);
-
- TRACE_ERR("Leaving alltoall\n");
- return PAMI_SUCCESS;
-}
-
-
-int MPIDO_Alltoall_simple(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Alltoall_optimized\n");
- volatile unsigned active = 1;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- void *sbuf = NULL, *rbuf = NULL;
- size_t send_size = 0;
- size_t recv_size = 0;
- MPID_Segment segment;
- MPID_Datatype *sdt, *rdt;
- MPI_Aint sdt_true_lb=0, rdt_true_lb;
- MPIDI_Post_coll_t alltoall_post;
- int sndlen, rcvlen, snd_contig = 1, rcv_contig = 1;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (comm_ptr->rank == 0);
-#endif
-
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-
- MPIDI_Datatype_get_info(1, recvtype, rcv_contig, rcvlen, rdt, rdt_true_lb);
- rbuf = (char *)recvbuf + rdt_true_lb;
- recv_size = rcvlen * recvcount;
-
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_ALLTOALL, recv_size, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Alltoall_intra(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- if(sendbuf != MPI_IN_PLACE)
- {
- MPIDI_Datatype_get_info(1, sendtype, snd_contig, sndlen, sdt, sdt_true_lb);
- sbuf = (char *)sendbuf + sdt_true_lb;
- send_size = sndlen * sendcount;
- if(!snd_contig)
- {
- snd_noncontig_buff = MPIU_Malloc(send_size*size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- DLOOP_Offset last = send_size*size;
- MPID_Segment_init(sendbuf, sendcount*size, sendtype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, snd_noncontig_buff);
-
- }
- }
-
- if(!rcv_contig)
- {
- rcv_noncontig_buff = MPIU_Malloc(recv_size*size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendbuf == MPI_IN_PLACE)
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- MPIR_Localcopy(recvbuf + (rank*recvcount*extent), recvcount, recvtype,
- rcv_noncontig_buff + (rank*recv_size), recv_size,MPI_CHAR);
- }
- }
-
- /* Alltoall is much simpler if bytes are required because we don't need to
- * malloc displ/count arrays and copy things
- */
-
-
- pami_xfer_t alltoall;
-#ifdef TRACE_ON
- const pami_metadata_t *my_alltoall_md;
- my_alltoall_md = &mpid->coll_metadata[PAMI_XFER_ALLTOALL][0][0];
- TRACE_ERR("Using alltoall protocol %s\n", my_alltoall_md->name);
-#endif
- alltoall.cb_done = cb_alltoall;
- alltoall.cookie = (void *)&active;
- alltoall.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLTOALL][0][0];
- alltoall.cmd.xfer_alltoall.stype = PAMI_TYPE_BYTE;/* stype is ignored when sndbuf == PAMI_IN_PLACE */
- alltoall.cmd.xfer_alltoall.stypecount = send_size;
- alltoall.cmd.xfer_alltoall.sndbuf = sbuf;
-
- if(sendbuf == MPI_IN_PLACE)
- {
- alltoall.cmd.xfer_alltoall.sndbuf = PAMI_IN_PLACE;
- }
- alltoall.cmd.xfer_alltoall.rcvbuf = rbuf;
- alltoall.cmd.xfer_alltoall.rtypecount = recv_size;
- alltoall.cmd.xfer_alltoall.rtype = PAMI_TYPE_BYTE;
-
- MPIDI_Context_post(MPIDI_Context[0], &alltoall_post.state,
- MPIDI_Pami_post_wrapper, (void *)&alltoall);
-
- TRACE_ERR("Waiting on active\n");
- MPID_PROGRESS_WAIT_WHILE(active);
-
- if(!rcv_contig)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size*size, MPI_CHAR,
- recvbuf, recvcount*size, recvtype);
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_contig) MPIU_Free(snd_noncontig_buff);
-
- TRACE_ERR("Leaving MPIDO_Alltoall_optimized\n");
- return MPI_SUCCESS;
-}
-
-
-int
-MPIDO_CSWrapper_alltoall(pami_xfer_t *alltoall,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *sbuf;
- MPIDI_coll_check_in_place(alltoall->cmd.xfer_alltoall.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( alltoall->cmd.xfer_alltoall.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIDI_Dtpami_to_dtmpi( alltoall->cmd.xfer_alltoall.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Alltoall_intra(sbuf,
- alltoall->cmd.xfer_alltoall.stypecount, sendtype,
- alltoall->cmd.xfer_alltoall.rcvbuf,
- alltoall->cmd.xfer_alltoall.rtypecount, recvtype,
- comm_ptr, &mpierrno);
- if(alltoall->cb_done && rc == 0)
- alltoall->cb_done(NULL, alltoall->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c b/src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
deleted file mode 100644
index 2d1a2c5..0000000
--- a/src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/alltoall/mpido_ialltoall.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-
-#include <mpidimpl.h>
-
-int MPIDO_Ialltoall(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- TRACE_ERR("Entering MPIDO_Ialltoall\n");
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Ialltoall_impl() function to invoke the mpich nbc implementation
- * of MPI_Ialltoall().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ialltoall() with a blocking MPIR_Alltoall().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking alltoall algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Alltoall_impl(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- comm_ptr, &mpierrno);
-
- /*
- * The blocking allitoall has completed - create and complete a
- * MPID_Request object so the MPIR_Ialltoall_impl() function does not
- * perform an additional ialltoall.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- TRACE_ERR("Leaving MPIDO_Ialltoall\n");
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/alltoallv/Makefile.mk b/src/mpid/pamid/src/coll/alltoallv/Makefile.mk
deleted file mode 100644
index 4e95a3c..0000000
--- a/src/mpid/pamid/src/coll/alltoallv/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c \
- src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c b/src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
deleted file mode 100644
index 9648dd2..0000000
--- a/src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
+++ /dev/null
@@ -1,734 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/alltoallv/mpido_alltoallv.c
- * \brief ???
- */
-/* #define TRACE_ON */
-
-#include <mpidimpl.h>
-
-static void cb_alltoallv(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *)clientdata;
- TRACE_ERR("alltoallv callback enter, active: %d\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-
-
-int MPIDO_Alltoallv(const void *sendbuf,
- const int *sendcounts,
- const int *senddispls,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *recvdispls,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Alltoallv\n");
- volatile unsigned active = 1;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- void *sbuf = NULL, *rbuf = NULL;
- int recvok=PAMI_SUCCESS, sendok=PAMI_SUCCESS;
- int sndtypelen, rcvtypelen, snd_contig=0, rcv_contig=0;
- MPID_Datatype *sdt, *rdt;
- pami_type_t stype, rtype;
- MPI_Aint sdt_true_lb, rdt_true_lb;
- MPIDI_Post_coll_t alltoallv_post;
- int tmp;
- const int rank = comm_ptr->rank;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_ALLTOALLV_INT];
- const int size = comm_ptr->local_size;
- int sendcontinuous , recvcontinuous=0;
- size_t recv_size=0, send_size=0;
- size_t totalrecvcount=0;
- int *lrecvdispls = NULL; /* possible local displs calculated for noncontinous */
- int *lsenddispls = NULL;/* possible local displs calculated for noncontinous */
- int *lrecvcounts = NULL;/* possible local counts calculated for noncontinous */
- int *lsendcounts = NULL;/* possible local counts calculated for noncontinous */
- const int *precvdispls = recvdispls; /* pointer to displs to use as pami parmi */
- const int *psenddispls = senddispls; /* pointer to displs to use as pami parmi */
- const int *precvcounts = recvcounts; /* pointer to counts to use as pami parmi */
- const int *psendcounts = sendcounts; /* pointer to counts to use as pami parmi */
- int inplace = sendbuf == MPI_IN_PLACE? 1 : 0;
- if(selected_type == MPID_COLL_USE_MPICH)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH alltoallv algorithm\n");
- return MPIR_Alltoallv(sendbuf, sendcounts, senddispls, sendtype,
- recvbuf, recvcounts, recvdispls, recvtype,
- comm_ptr, mpierrno);
- }
-
- if(!inplace)
- {
- sendok = MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp);
- MPIDI_Datatype_get_info(1, sendtype, snd_contig, sndtypelen, sdt, sdt_true_lb);
- sbuf = (char *)sendbuf + sdt_true_lb;
- if(!snd_contig || (sendok != PAMI_SUCCESS))
- {
- stype = PAMI_TYPE_UNSIGNED_CHAR;
- size_t totalsendcount = sendcounts[0];
- sendcontinuous = senddispls[0] == 0? 1 : 0 ;
- int i;
- psenddispls = lsenddispls = MPIU_Malloc(size*sizeof(int));
- psendcounts = lsendcounts = MPIU_Malloc(size*sizeof(int));
- lsenddispls[0]= 0;
- lsendcounts[0]= sndtypelen * sendcounts[0];
- for(i=1; i<size; ++i)
- {
- lsenddispls[i]= sndtypelen * totalsendcount;
- totalsendcount += sendcounts[i];
- if(senddispls[i] != (senddispls[i-1] + (sendcounts[i-1]*sndtypelen)))
- sendcontinuous = 0;
- lsendcounts[i]= sndtypelen * sendcounts[i];
- }
- send_size = sndtypelen * totalsendcount;
- TRACE_ERR("Pack receive sndv_contig %zu, sendok %zd, totalsendcount %zu, sendcontinuous %zu, sndtypelen %zu, send_size %zu\n",
- (size_t)snd_contig, (size_t)sendok, (size_t)totalsendcount, (size_t)sendcontinuous, (size_t) sndtypelen, (size_t)send_size);
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendcontinuous)
- {
- MPIR_Localcopy(sendbuf, totalsendcount, sendtype,
- snd_noncontig_buff, send_size,MPI_CHAR);
- }
- else
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(sendtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)sendbuf + senddispls[i]*extent;
- char* rcbuf = (char*)snd_noncontig_buff + psenddispls[i];
- MPIR_Localcopy(scbuf, sendcounts[i], sendtype,
- rcbuf, psendcounts[i], MPI_CHAR);
- TRACE_ERR("Pack send src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)senddispls[i],(size_t)i,(size_t)sendcounts[i],(size_t)senddispls[i], *(int*)scbuf);
- TRACE_ERR("Pack send dest displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)i,(size_t)psenddispls[i],(size_t)i,(size_t)psendcounts[i],(size_t)psenddispls[i], *(int*)rcbuf);
- }
- }
- }
- }
- MPIDI_Datatype_get_info(1, recvtype, rcv_contig, rcvtypelen, rdt, rdt_true_lb);
- recvok = MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp);
- rbuf = (char *)recvbuf + rdt_true_lb;
- if(!rcv_contig || (recvok != PAMI_SUCCESS))
- {
- rtype = PAMI_TYPE_UNSIGNED_CHAR;
- totalrecvcount = recvcounts[0];
- recvcontinuous = recvdispls[0] == 0? 1 : 0 ;
- int i;
- precvdispls = lrecvdispls = MPIU_Malloc(size*sizeof(int));
- precvcounts = lrecvcounts = MPIU_Malloc(size*sizeof(int));
- lrecvdispls[0]= 0;
- lrecvcounts[0]= rcvtypelen * recvcounts[0];
- for(i=1; i<size; ++i)
- {
- lrecvdispls[i]= rcvtypelen * totalrecvcount;
- totalrecvcount += recvcounts[i];
- if(recvdispls[i] != (recvdispls[i-1] + (recvcounts[i-1]*rcvtypelen)))
- recvcontinuous = 0;
- lrecvcounts[i]= rcvtypelen * recvcounts[i];
- }
- recv_size = rcvtypelen * totalrecvcount;
- TRACE_ERR("Pack receive rcv_contig %zu, recvok %zd, totalrecvcount %zu, recvcontinuous %zu, rcvtypelen %zu, recv_size %zu\n",
- (size_t)rcv_contig, (size_t)recvok, (size_t)totalrecvcount, (size_t)recvcontinuous,(size_t)rcvtypelen, (size_t)recv_size);
- rcv_noncontig_buff = MPIU_Malloc(recv_size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- /* need to copy it now if it's used for the send buffer and then do not do in place */
- if(inplace)
- {
- inplace = 0;
- stype = PAMI_TYPE_UNSIGNED_CHAR;
- size_t totalsendcount = recvcounts[0];
- sendcontinuous = recvdispls[0] == 0? 1 : 0 ;
- int i;
- psenddispls = lsenddispls = MPIU_Malloc(size*sizeof(int));
- psendcounts = lsendcounts = MPIU_Malloc(size*sizeof(int));
- lsenddispls[0]= 0;
- lsendcounts[0]= rcvtypelen * recvcounts[0];
- for(i=1; i<size; ++i)
- {
- lsenddispls[i]= rcvtypelen * totalsendcount;
- totalsendcount += recvcounts[i];
- if(recvdispls[i] != (recvdispls[i-1] + (recvcounts[i-1]*rcvtypelen)))
- sendcontinuous = 0;
- lsendcounts[i]= rcvtypelen * recvcounts[i];
- }
- send_size = rcvtypelen * totalsendcount;
- TRACE_ERR("Pack MPI_IN_PLACE receive sndv_contig %zu, sendok %zd, totalsendcount %zu, sendcontinuous %zu, rcvtypelen %zu, send_size %zu\n",
- (size_t)snd_contig, (size_t)sendok, (size_t)totalsendcount, (size_t)sendcontinuous, (size_t) rcvtypelen, (size_t)send_size);
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendcontinuous)
- {
- MPIR_Localcopy(recvbuf, totalsendcount, recvtype,
- snd_noncontig_buff, send_size,MPI_CHAR);
- }
- else
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)recvbuf + recvdispls[i]*extent;
- char* rcbuf = (char*)snd_noncontig_buff + psenddispls[i];
- MPIR_Localcopy(scbuf, recvcounts[i], recvtype,
- rcbuf, psendcounts[i], MPI_CHAR);
- TRACE_ERR("Pack send src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)recvdispls[i],(size_t)i,(size_t)recvcounts[i],(size_t)recvdispls[i], *(int*)scbuf);
- TRACE_ERR("Pack send dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)psenddispls[i],(size_t)i,(size_t)psendcounts[i],(size_t)psenddispls[i], *(int*)rcbuf);
- }
- }
- }
- }
-
-
- pami_xfer_t alltoallv;
- pami_algorithm_t my_alltoallv;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
-
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- TRACE_ERR("Optimized alltoallv was selected\n");
- my_alltoallv = mpid->opt_protocol[PAMI_XFER_ALLTOALLV_INT][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_ALLTOALLV_INT][0];
- queryreq = mpid->must_query[PAMI_XFER_ALLTOALLV_INT][0];
- }
- else
- { /* is this purely an else? or do i need to check for some other selectedvar... */
- TRACE_ERR("Alltoallv specified by user\n");
- my_alltoallv = mpid->user_selected[PAMI_XFER_ALLTOALLV_INT];
- my_md = &mpid->user_metadata[PAMI_XFER_ALLTOALLV_INT];
- queryreq = selected_type;
- }
- alltoallv.algorithm = my_alltoallv;
- char *pname = my_md->name;
-
-
- alltoallv.cb_done = cb_alltoallv;
- alltoallv.cookie = (void *)&active;
- /* We won't bother with alltoallv since MPI is always going to be ints. */
- if(inplace)
- {
- if(unlikely(verbose))
- fprintf(stderr,"alltoallv MPI_IN_PLACE buffering\n");
- alltoallv.cmd.xfer_alltoallv_int.stype = rtype;
- alltoallv.cmd.xfer_alltoallv_int.sdispls = (int *) precvdispls;
- alltoallv.cmd.xfer_alltoallv_int.stypecounts = (int *) precvcounts;
- alltoallv.cmd.xfer_alltoallv_int.sndbuf = PAMI_IN_PLACE;
- }
- else
- {
- alltoallv.cmd.xfer_alltoallv_int.stype = stype;
- alltoallv.cmd.xfer_alltoallv_int.sdispls = (int *) psenddispls;
- alltoallv.cmd.xfer_alltoallv_int.stypecounts = (int *) psendcounts;
- alltoallv.cmd.xfer_alltoallv_int.sndbuf = sbuf;
- }
- alltoallv.cmd.xfer_alltoallv_int.rcvbuf = rbuf;
-
- alltoallv.cmd.xfer_alltoallv_int.rdispls = (int *) precvdispls;
- alltoallv.cmd.xfer_alltoallv_int.rtypecounts = (int *) precvcounts;
- alltoallv.cmd.xfer_alltoallv_int.rtype = rtype;
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying alltoallv protocol %s, type was %d\n", pname, queryreq);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
-/* Can't check ranges like this. Non-local. Comment out for now.
- if(my_md->check_correct.values.rangeminmax)
- {
- MPI_Aint data_true_lb;
- MPID_Datatype *data_ptr;
- int data_size, data_contig;
- MPIDI_Datatype_get_info(??, sendtype, data_contig, data_size, data_ptr, data_true_lb);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ;
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
-*/
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&alltoallv);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH alltoallv\n", pname);
- MPIDI_Update_last_algorithm(comm_ptr, "ALLTOALLV_MPICH");
- return MPIR_Alltoallv(sendbuf, sendcounts, senddispls, sendtype,
- recvbuf, recvcounts, recvdispls, recvtype,
- comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", pname);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for alltoallv on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
-
- MPIDI_Context_post(MPIDI_Context[0], &alltoallv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&alltoallv);
-
- TRACE_ERR("%d waiting on active %d\n", rank, active);
- MPID_PROGRESS_WAIT_WHILE(active);
-
- if(!rcv_contig || (recvok != PAMI_SUCCESS))
- {
- if(recvcontinuous)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size,MPI_CHAR,
- recvbuf, totalrecvcount, recvtype);
- }
- else
- {
- size_t extent;
- int i;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)rcv_noncontig_buff+ precvdispls[i];
- char* rcbuf = (char*)recvbuf + recvdispls[i]*extent;
- MPIR_Localcopy(scbuf, precvcounts[i], MPI_CHAR,
- rcbuf, recvcounts[i], recvtype);
- TRACE_ERR("Pack recv src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)precvdispls[i],(size_t)i,(size_t)precvcounts[i],(size_t)precvdispls[i], *(int*)scbuf);
- TRACE_ERR("Pack recv dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)recvdispls[i],(size_t)i,(size_t)recvcounts[i],(size_t)recvdispls[i], *(int*)rcbuf);
- }
- }
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_contig || (sendok != PAMI_SUCCESS)) MPIU_Free(snd_noncontig_buff);
- if(lrecvdispls) MPIU_Free(lrecvdispls);
- if(lsenddispls) MPIU_Free(lsenddispls);
- if(lrecvcounts) MPIU_Free(lrecvcounts);
- if(lsendcounts) MPIU_Free(lsendcounts);
-
- TRACE_ERR("Leaving alltoallv\n");
-
-
- return 0;
-}
-
-
-int MPIDO_Alltoallv_simple(const void *sendbuf,
- const int *sendcounts,
- const int *senddispls,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *recvdispls,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Alltoallv_optimized\n");
- volatile unsigned active = 1;
- int sndtypelen, rcvtypelen, snd_contig = 1, rcv_contig = 1;
- MPID_Datatype *sdt, *rdt;
- pami_type_t stype = NULL, rtype;
- MPI_Aint sdt_true_lb = 0, rdt_true_lb;
- MPIDI_Post_coll_t alltoallv_post;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- void *sbuf = NULL, *rbuf = NULL;
- int recvok=PAMI_SUCCESS, sendok=PAMI_SUCCESS;
- int tmp;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- int sendcontinuous , recvcontinuous=0;
- size_t recv_size=0, send_size=0;
- size_t totalrecvcount=0;
- int *lrecvdispls = NULL; /* possible local displs calculated for noncontinous */
- int *lsenddispls = NULL;/* possible local displs calculated for noncontinous */
- int *lrecvcounts = NULL;/* possible local counts calculated for noncontinous */
- int *lsendcounts = NULL;/* possible local counts calculated for noncontinous */
- const int *precvdispls = recvdispls; /* pointer to displs to use as pami parmi */
- const int *psenddispls = senddispls; /* pointer to displs to use as pami parmi */
- const int *precvcounts = recvcounts; /* pointer to counts to use as pami parmi */
- const int *psendcounts = sendcounts; /* pointer to counts to use as pami parmi */
- int inplace = sendbuf == MPI_IN_PLACE? 1 : 0;
-
-
-
-
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- /* We don't pack and unpack in alltoallv as we do in alltoall because alltoallv has
- more overhead of book keeping for sendcounts/displs and recvcounts/displs. Since,
- alltoallv is non-rooted and all tasks has type info, decision to punt to mpich
- will be the same on all tasks */
-
-
- /* Check if collsel has MPICH algorithm as the best performing one, if so, call MPICH now w/o doing any conversions */
- MPIDI_Datatype_get_info(1, recvtype, rcv_contig, rcvtypelen, rdt, rdt_true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_ALLTOALLV_INT, rcvtypelen * recvcounts[0], advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Alltoallv(sendbuf, sendcounts, senddispls, sendtype,
- recvbuf, recvcounts, recvdispls, recvtype,
- comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- /* Now do checks on send data and datatypes (contig and contin) and do necessary conversions */
- if(!inplace)
- {
- sendok = MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp);
- MPIDI_Datatype_get_info(1, sendtype, snd_contig, sndtypelen, sdt, sdt_true_lb);
- sbuf = (char *)sendbuf + sdt_true_lb;
- if(!snd_contig || (sendok != PAMI_SUCCESS))
- {
- stype = PAMI_TYPE_UNSIGNED_CHAR;
- size_t totalsendcount = sendcounts[0];
- sendcontinuous = senddispls[0] == 0? 1 : 0 ;
- int i;
- psenddispls = lsenddispls = MPIU_Malloc(size*sizeof(int));
- psendcounts = lsendcounts = MPIU_Malloc(size*sizeof(int));
- lsenddispls[0]= 0;
- lsendcounts[0]= sndtypelen * sendcounts[0];
- for(i=1; i<size; ++i)
- {
- lsenddispls[i]= sndtypelen * totalsendcount;
- totalsendcount += sendcounts[i];
- if(senddispls[i] != (senddispls[i-1] + (sendcounts[i-1])))
- sendcontinuous = 0;
- lsendcounts[i]= sndtypelen * sendcounts[i];
- }
- send_size = sndtypelen * totalsendcount;
- TRACE_ERR("Pack receive sndv_contig %zu, sendok %zd, totalsendcount %zu, sendcontinuous %zu, sndtypelen %zu, send_size %zu\n",
- (size_t)snd_contig, (size_t)sendok, (size_t)totalsendcount, (size_t)sendcontinuous, (size_t) sndtypelen, (size_t)send_size);
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendcontinuous)
- {
- MPIR_Localcopy(sendbuf, totalsendcount, sendtype,
- snd_noncontig_buff, send_size,MPI_CHAR);
- }
- else
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(sendtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)sendbuf + senddispls[i]*extent;
- char* rcbuf = (char*)snd_noncontig_buff + psenddispls[i];
- MPIR_Localcopy(scbuf, sendcounts[i], sendtype,
- rcbuf, psendcounts[i], MPI_CHAR);
- TRACE_ERR("Pack send src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)senddispls[i],(size_t)i,(size_t)sendcounts[i],(size_t)senddispls[i], *(int*)scbuf);
- TRACE_ERR("Pack send dest displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)i,(size_t)psenddispls[i],(size_t)i,(size_t)psendcounts[i],(size_t)psenddispls[i], *(int*)rcbuf);
- }
- }
- }
- }
-
- recvok = MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp);
- rbuf = (char *)recvbuf + rdt_true_lb;
- if(!rcv_contig || (recvok != PAMI_SUCCESS))
- {
- rtype = PAMI_TYPE_UNSIGNED_CHAR;
- totalrecvcount = recvcounts[0];
- recvcontinuous = recvdispls[0] == 0? 1 : 0 ;
- int i;
- precvdispls = lrecvdispls = MPIU_Malloc(size*sizeof(int));
- precvcounts = lrecvcounts = MPIU_Malloc(size*sizeof(int));
- lrecvdispls[0]= 0;
- lrecvcounts[0]= rcvtypelen * recvcounts[0];
- for(i=1; i<size; ++i)
- {
- lrecvdispls[i]= rcvtypelen * totalrecvcount;
- totalrecvcount += recvcounts[i];
- if(recvdispls[i] != (recvdispls[i-1] + (recvcounts[i-1])))
- recvcontinuous = 0;
- lrecvcounts[i]= rcvtypelen * recvcounts[i];
- }
- recv_size = rcvtypelen * totalrecvcount;
- TRACE_ERR("Pack receive rcv_contig %zu, recvok %zd, totalrecvcount %zu, recvcontinuous %zu, rcvtypelen %zu, recv_size %zu\n",
- (size_t)rcv_contig, (size_t)recvok, (size_t)totalrecvcount, (size_t)recvcontinuous,(size_t)rcvtypelen, (size_t)recv_size);
- rcv_noncontig_buff = MPIU_Malloc(recv_size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- /* need to copy it now if it's used for the send buffer and then do not do in place */
- if(inplace)
- {
- inplace = 0;
- stype = PAMI_TYPE_UNSIGNED_CHAR;
- size_t totalsendcount = recvcounts[0];
- sendcontinuous = recvdispls[0] == 0? 1 : 0 ;
- int i;
- psenddispls = lsenddispls = MPIU_Malloc(size*sizeof(int));
- psendcounts = lsendcounts = MPIU_Malloc(size*sizeof(int));
- lsenddispls[0]= 0;
- lsendcounts[0]= rcvtypelen * recvcounts[0];
- for(i=1; i<size; ++i)
- {
- lsenddispls[i]= rcvtypelen * totalsendcount;
- totalsendcount += recvcounts[i];
- if(recvdispls[i] != (recvdispls[i-1] + (recvcounts[i-1])))
- sendcontinuous = 0;
- lsendcounts[i]= rcvtypelen * recvcounts[i];
- }
- send_size = rcvtypelen * totalsendcount;
- TRACE_ERR("Pack MPI_IN_PLACE receive sndv_contig %zu, sendok %zd, totalsendcount %zu, sendcontinuous %zu, rcvtypelen %zu, send_size %zu\n",
- (size_t)snd_contig, (size_t)sendok, (size_t)totalsendcount, (size_t)sendcontinuous, (size_t) rcvtypelen, (size_t)send_size);
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendcontinuous)
- {
- MPIR_Localcopy(recvbuf, totalsendcount, recvtype,
- snd_noncontig_buff, send_size,MPI_CHAR);
- }
- else
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)recvbuf + recvdispls[i]*extent;
- char* rcbuf = (char*)snd_noncontig_buff + psenddispls[i];
- MPIR_Localcopy(scbuf, recvcounts[i], recvtype,
- rcbuf, psendcounts[i], MPI_CHAR);
- TRACE_ERR("Pack send src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)recvdispls[i],(size_t)i,(size_t)recvcounts[i],(size_t)recvdispls[i], *(int*)scbuf);
- TRACE_ERR("Pack send dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)psenddispls[i],(size_t)i,(size_t)psendcounts[i],(size_t)psenddispls[i], *(int*)rcbuf);
- }
- }
- }
- }
-
-
-
- pami_xfer_t alltoallv;
- alltoallv.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLTOALLV_INT][0][0];
-
- alltoallv.cb_done = cb_alltoallv;
- alltoallv.cookie = (void *)&active;
- if(inplace)
- {
- alltoallv.cmd.xfer_alltoallv_int.stype = rtype;
- alltoallv.cmd.xfer_alltoallv_int.sdispls = (int *) precvdispls;
- alltoallv.cmd.xfer_alltoallv_int.stypecounts = (int *) precvcounts;
- alltoallv.cmd.xfer_alltoallv_int.sndbuf = PAMI_IN_PLACE;
- }
- else
- {
- alltoallv.cmd.xfer_alltoallv_int.stype = stype;
- alltoallv.cmd.xfer_alltoallv_int.sdispls = (int *) psenddispls;
- alltoallv.cmd.xfer_alltoallv_int.stypecounts = (int *) psendcounts;
- alltoallv.cmd.xfer_alltoallv_int.sndbuf = sbuf;
- }
- alltoallv.cmd.xfer_alltoallv_int.rcvbuf = rbuf;
-
- alltoallv.cmd.xfer_alltoallv_int.rdispls = (int *) precvdispls;
- alltoallv.cmd.xfer_alltoallv_int.rtypecounts = (int *) precvcounts;
- alltoallv.cmd.xfer_alltoallv_int.rtype = rtype;
-
-
- MPIDI_Context_post(MPIDI_Context[0], &alltoallv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&alltoallv);
-
- TRACE_ERR("%d waiting on active %d\n", rank, active);
- MPID_PROGRESS_WAIT_WHILE(active);
-
- if(!rcv_contig || (recvok != PAMI_SUCCESS))
- {
- if(recvcontinuous)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size,MPI_CHAR,
- recvbuf, totalrecvcount, recvtype);
- }
- else
- {
- size_t extent;
- int i;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)rcv_noncontig_buff+ precvdispls[i];
- char* rcbuf = (char*)recvbuf + recvdispls[i]*extent;
- MPIR_Localcopy(scbuf, precvcounts[i], MPI_CHAR,
- rcbuf, recvcounts[i], recvtype);
- TRACE_ERR("Pack recv src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)precvdispls[i],(size_t)i,(size_t)precvcounts[i],(size_t)precvdispls[i], *(int*)scbuf);
- TRACE_ERR("Pack recv dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)recvdispls[i],(size_t)i,(size_t)recvcounts[i],(size_t)recvdispls[i], *(int*)rcbuf);
- }
- }
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_contig || (sendok != PAMI_SUCCESS)) MPIU_Free(snd_noncontig_buff);
- if(lrecvdispls) MPIU_Free(lrecvdispls);
- if(lsenddispls) MPIU_Free(lsenddispls);
- if(lrecvcounts) MPIU_Free(lrecvcounts);
- if(lsendcounts) MPIU_Free(lsendcounts);
-
-
- TRACE_ERR("Leaving alltoallv\n");
-
-
- return MPI_SUCCESS;
-}
-
-int
-MPIDO_CSWrapper_alltoallv(pami_xfer_t *alltoallv,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *sbuf;
- MPIDI_coll_check_in_place(alltoallv->cmd.xfer_alltoallv_int.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( alltoallv->cmd.xfer_alltoallv_int.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIDI_Dtpami_to_dtmpi( alltoallv->cmd.xfer_alltoallv_int.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Alltoallv(sbuf,
- alltoallv->cmd.xfer_alltoallv_int.stypecounts,
- alltoallv->cmd.xfer_alltoallv_int.sdispls, sendtype,
- alltoallv->cmd.xfer_alltoallv_int.rcvbuf,
- alltoallv->cmd.xfer_alltoallv_int.rtypecounts,
- alltoallv->cmd.xfer_alltoallv_int.rdispls, recvtype,
- comm_ptr, &mpierrno);
- if(alltoallv->cb_done && rc == 0)
- alltoallv->cb_done(NULL, alltoallv->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c b/src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
deleted file mode 100644
index 14ee4d0..0000000
--- a/src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/alltoallv/mpido_alltoallv.c
- * \brief ???
- */
-/*#define TRACE_ON*/
-
-#include <mpidimpl.h>
-
-int MPIDO_Ialltoallv(const void *sendbuf,
- const int *sendcounts,
- const int *senddispls,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *recvdispls,
- MPI_Datatype recvtype,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- if(comm_ptr->rank == 0)
- TRACE_ERR("Entering MPIDO_Ialltoallv\n");
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Ialltoalliv_impl() function to invoke the mpich nbc implementation
- * of MPI_Ialltoallv().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ialltoallv() with a blocking MPIR_Alltoallv().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking alltoallv algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Alltoallv_impl(sendbuf, sendcounts, senddispls, sendtype,
- recvbuf, recvcounts, recvdispls, recvtype,
- comm_ptr, &mpierrno);
-
- /*
- * The blocking alltoallv has completed - create and complete a
- * MPID_Request object so the MPIR_Ialltoallv_impl() function does not
- * perform an additional ialltoallv.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
-
- TRACE_ERR("Leaving ialltoallv\n");
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/alltoallw/Makefile.mk b/src/mpid/pamid/src/coll/alltoallw/Makefile.mk
deleted file mode 100644
index 4393952..0000000
--- a/src/mpid/pamid/src/coll/alltoallw/Makefile.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
-
-
-endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c b/src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
deleted file mode 100644
index 0a82baf..0000000
--- a/src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/alltoallv/mpido_alltoallw.c
- * \brief ???
- */
-/*#define TRACE_ON*/
-
-#include <mpidimpl.h>
-
-int MPIDO_Ialltoallw(const void *sendbuf,
- const int *sendcounts,
- const int *senddispls,
- const MPI_Datatype *sendtypes,
- void *recvbuf,
- const int *recvcounts,
- const int *recvdispls,
- const MPI_Datatype *recvtypes,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- if(comm_ptr->rank == 0)
- TRACE_ERR("Entering MPIDO_Ialltoallw\n");
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Ialltoallw_impl() function to invoke the mpich nbc implementation
- * of MPI_Ialltoallw().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ialltoallw() with a blocking MPIR_Alltoallw().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking alltoallw algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Alltoallw_impl(sendbuf, sendcounts, senddispls, sendtypes,
- recvbuf, recvcounts, recvdispls, recvtypes,
- comm_ptr, &mpierrno);
-
- /*
- * The blocking alltoallw has completed - create and complete a
- * MPID_Request object so the MPIR_Ialltoallw_impl() function does not
- * perform an additional ialltoallw.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
-
- TRACE_ERR("Leaving ialltoallw\n");
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/barrier/Makefile.mk b/src/mpid/pamid/src/coll/barrier/Makefile.mk
deleted file mode 100644
index 3d49921..0000000
--- a/src/mpid/pamid/src/coll/barrier/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/barrier/mpido_barrier.c \
- src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/barrier/mpido_barrier.c b/src/mpid/pamid/src/coll/barrier/mpido_barrier.c
deleted file mode 100644
index e4df53d..0000000
--- a/src/mpid/pamid/src/coll/barrier/mpido_barrier.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/barrier/mpido_barrier.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-
-#include <mpidimpl.h>
-
-static void cb_barrier(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *) clientdata;
- TRACE_ERR("callback. enter: %d\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-
-int MPIDO_Barrier(MPID_Comm *comm_ptr, int *mpierrno)
-{
- TRACE_ERR("Entering MPIDO_Barrier\n");
- volatile unsigned active=1;
- MPIDI_Post_coll_t barrier_post;
- pami_xfer_t barrier;
- pami_algorithm_t my_barrier;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_BARRIER];
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (comm_ptr->rank == 0);
-#endif
-
- if(unlikely(selected_type == MPID_COLL_USE_MPICH))
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH barrier\n");
- TRACE_ERR("Using MPICH Barrier\n");
- return MPIR_Barrier(comm_ptr, mpierrno);
- }
-
- barrier.cb_done = cb_barrier;
- barrier.cookie = (void *)&active;
- if(likely(selected_type == MPID_COLL_OPTIMIZED))
- {
- TRACE_ERR("Optimized barrier (%s) was pre-selected\n", mpid->opt_protocol_md[PAMI_XFER_BARRIER][0].name);
- my_barrier = mpid->opt_protocol[PAMI_XFER_BARRIER][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_BARRIER][0];
- queryreq = mpid->must_query[PAMI_XFER_BARRIER][0];
- }
- else
- {
- TRACE_ERR("Barrier (%s) was specified by user\n", mpid->user_metadata[PAMI_XFER_BARRIER].name);
- my_barrier = mpid->user_selected[PAMI_XFER_BARRIER];
- my_md = &mpid->user_metadata[PAMI_XFER_BARRIER];
- queryreq = selected_type;
- }
-
- barrier.algorithm = my_barrier;
- /* There is no support for query-required barrier protocols here */
- MPID_assert(queryreq != MPID_COLL_ALWAYS_QUERY);
- MPID_assert(queryreq != MPID_COLL_CHECK_FN_REQUIRED);
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for barrier on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
- MPIDI_Context_post(MPIDI_Context[0], &barrier_post.state,
- MPIDI_Pami_post_wrapper, (void *)&barrier);
-
- TRACE_ERR("advance spinning\n");
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
- MPID_PROGRESS_WAIT_WHILE(active);
- TRACE_ERR("exiting mpido_barrier\n");
- return 0;
-}
-
-
-int MPIDO_Barrier_simple(MPID_Comm *comm_ptr, int *mpierrno)
-{
- TRACE_ERR("Entering MPIDO_Barrier_optimized\n");
- volatile unsigned active=1;
- MPIDI_Post_coll_t barrier_post;
- pami_xfer_t barrier;
- pami_algorithm_t my_barrier;
- const pami_metadata_t *my_barrier_md;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-
- barrier.cb_done = cb_barrier;
- barrier.cookie = (void *)&active;
- my_barrier = mpid->coll_algorithm[PAMI_XFER_BARRIER][0][0];
- my_barrier_md = &mpid->coll_metadata[PAMI_XFER_BARRIER][0][0];
- barrier.algorithm = my_barrier;
-
-
- TRACE_ERR("%s barrier\n", MPIDI_Process.context_post.active>0?"posting":"invoking");
- MPIDI_Context_post(MPIDI_Context[0], &barrier_post.state,
- MPIDI_Pami_post_wrapper, (void *)&barrier);
- TRACE_ERR("barrier %s rc: %d\n", MPIDI_Process.context_post.active>0?"posted":"invoked", rc);
-
- TRACE_ERR("advance spinning\n");
- MPIDI_Update_last_algorithm(comm_ptr, my_barrier_md->name);
- MPID_PROGRESS_WAIT_WHILE(active);
- TRACE_ERR("Exiting MPIDO_Barrier_optimized\n");
- return 0;
-}
-
-int
-MPIDO_CSWrapper_barrier(pami_xfer_t *barrier,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- int rc = MPIR_Barrier(comm_ptr, &mpierrno);
- if(barrier->cb_done && rc == 0)
- barrier->cb_done(NULL, barrier->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c b/src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
deleted file mode 100644
index fd33193..0000000
--- a/src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/barrier/mpido_ibarrier.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-
-#include <mpidimpl.h>
-
-static void cb_ibarrier(void *ctxt, void *clientdata, pami_result_t err)
-{
- MPID_Request *mpid_request = (MPID_Request *) clientdata;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-}
-
-int MPIDO_Ibarrier(MPID_Comm *comm_ptr, MPID_Request **request)
-{
- TRACE_ERR("Entering MPIDO_Ibarrier\n");
-
- /*
- * There is actually no current pami optimization for this
- * so just kick it back to MPICH if mpir_nbc is set, otherwise
- * call the blocking MPIR_Barrier().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ibarrier() with a blocking MPIR_Barrier().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH barrier\n");
- TRACE_ERR("Using MPICH Barrier\n");
-
- int mpierrno = 0;
- int rc = MPIR_Barrier(comm_ptr, &mpierrno);
-
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
-}
diff --git a/src/mpid/pamid/src/coll/bcast/Makefile.mk b/src/mpid/pamid/src/coll/bcast/Makefile.mk
deleted file mode 100644
index 3988631..0000000
--- a/src/mpid/pamid/src/coll/bcast/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/bcast/mpido_bcast.c \
- src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/bcast/mpido_bcast.c b/src/mpid/pamid/src/coll/bcast/mpido_bcast.c
deleted file mode 100644
index 1e995ff..0000000
--- a/src/mpid/pamid/src/coll/bcast/mpido_bcast.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/bcast/mpido_bcast.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-
-#include <mpidimpl.h>
-
-static void cb_bcast(void *ctxt, void *clientdata, pami_result_t err)
-{
- int *active = (int *) clientdata;
- TRACE_ERR("callback enter, active: %d\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-
-int MPIDO_Bcast(void *buffer,
- int count,
- MPI_Datatype datatype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
- TRACE_ERR("in mpido_bcast\n");
- const size_t BCAST_LIMIT = 0x40000000;
- int data_contig, rc;
- void *data_buffer = NULL,
- *noncontig_buff = NULL;
- volatile unsigned active = 1;
- MPI_Aint data_true_lb = 0;
- MPID_Datatype *data_ptr;
- MPID_Segment segment;
- MPIDI_Post_coll_t bcast_post;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int rank = comm_ptr->rank;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const int selected_type = mpid->user_selected_type[PAMI_XFER_BROADCAST];
-
- /* Must calculate data_size based on count=1 in case it's total size is > integer */
- int data_size_one;
- MPIDI_Datatype_get_info(1, datatype,
- data_contig, data_size_one, data_ptr, data_true_lb);
- /* do this calculation once and use twice */
- const size_t data_size_sz = (size_t)data_size_one*(size_t)count;
- if(unlikely(verbose))
- fprintf(stderr,"bcast count %d, size %d (%#zX), root %d, buffer %p\n",
- count,data_size_one, (size_t)data_size_one*(size_t)count, root,buffer);
- if(unlikely( data_size_sz > BCAST_LIMIT) )
- {
- void *new_buffer=buffer;
- int c, new_count = (int)BCAST_LIMIT/data_size_one;
- MPID_assert(new_count > 0);
-
- for(c=1; ((size_t)c*(size_t)new_count) <= (size_t)count; ++c)
- {
- if ((rc = MPIDO_Bcast(new_buffer,
- new_count,
- datatype,
- root,
- comm_ptr,
- mpierrno)) != MPI_SUCCESS)
- return rc;
- new_buffer = (char*)new_buffer + (size_t)data_size_one*(size_t)new_count;
- }
- new_count = count % new_count; /* 0 is ok, just returns no-op */
- return MPIDO_Bcast(new_buffer,
- new_count,
- datatype,
- root,
- comm_ptr,
- mpierrno);
- }
-
- /* Must use data_size based on count for byte bcast processing.
- Previously calculated as a size_t but large data_sizes were
- handled above so this cast to int should be fine here.
- */
- const int data_size = (int)data_size_sz;
-
- if(selected_type == MPID_COLL_USE_MPICH || data_size == 0)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH bcast algorithm\n");
- MPIDI_Update_last_algorithm(comm_ptr,"BCAST_MPICH");
- return MPIR_Bcast_intra(buffer, count, datatype, root, comm_ptr, mpierrno);
- }
-
- data_buffer = (char *)buffer + data_true_lb;
-
- if(!data_contig)
- {
- noncontig_buff = MPIU_Malloc(data_size);
- data_buffer = noncontig_buff;
- if(noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(rank == root)
- {
- DLOOP_Offset last = data_size;
- MPID_Segment_init(buffer, count, datatype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, noncontig_buff);
- }
- }
-
- pami_xfer_t bcast;
- pami_algorithm_t my_bcast;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
-
- bcast.cb_done = cb_bcast;
- bcast.cookie = (void *)&active;
- bcast.cmd.xfer_broadcast.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- bcast.algorithm = mpid->user_selected[PAMI_XFER_BROADCAST];
- bcast.cmd.xfer_broadcast.buf = data_buffer;
- bcast.cmd.xfer_broadcast.type = PAMI_TYPE_BYTE;
- /* Needs to be sizeof(type)*count since we are using bytes as * the generic type */
- bcast.cmd.xfer_broadcast.typecount = data_size;
-
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- TRACE_ERR("Optimized bcast (%s) and (%s) were pre-selected\n",
- mpid->opt_protocol_md[PAMI_XFER_BROADCAST][0].name,
- mpid->opt_protocol_md[PAMI_XFER_BROADCAST][1].name);
-
- if(mpid->cutoff_size[PAMI_XFER_BROADCAST][1] != 0)/* SSS: There is FCA cutoff (FCA only sets cutoff for [PAMI_XFER_BROADCAST][1]) */
- {
- if(data_size <= mpid->cutoff_size[PAMI_XFER_BROADCAST][1])
- {
- my_bcast = mpid->opt_protocol[PAMI_XFER_BROADCAST][1];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_BROADCAST][1];
- queryreq = mpid->must_query[PAMI_XFER_BROADCAST][1];
- }
- else
- {
- return MPIR_Bcast_intra(buffer, count, datatype, root, comm_ptr, mpierrno);
- }
- }
-
- if(data_size > mpid->cutoff_size[PAMI_XFER_BROADCAST][0])
- {
- my_bcast = mpid->opt_protocol[PAMI_XFER_BROADCAST][1];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_BROADCAST][1];
- queryreq = mpid->must_query[PAMI_XFER_BROADCAST][1];
- }
- else
- {
- my_bcast = mpid->opt_protocol[PAMI_XFER_BROADCAST][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_BROADCAST][0];
- queryreq = mpid->must_query[PAMI_XFER_BROADCAST][0];
- }
- }
- else
- {
- TRACE_ERR("Bcast (%s) was specified by user\n",
- mpid->user_metadata[PAMI_XFER_BROADCAST].name);
- my_bcast = mpid->user_selected[PAMI_XFER_BROADCAST];
- my_md = &mpid->user_metadata[PAMI_XFER_BROADCAST];
- queryreq = selected_type;
- }
-
- bcast.algorithm = my_bcast;
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying bcast protocol %s, type was: %d\n",
- my_md->name, queryreq);
- if(my_md->check_fn != NULL) /* calling the check fn is sufficient */
- {
- result = my_md->check_fn(&bcast);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- }
- else /* no check_fn, manually look at the metadata fields */
- {
- TRACE_ERR("Optimzed selection line %d\n",__LINE__);
- /* Check if the message range if restricted */
- if(my_md->check_correct.values.rangeminmax)
- {
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ; /* ok, algorithm selected */
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- /* \todo check the rest of the metadata */
- }
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH bcast algorithm - query fn failed\n");
- MPIDI_Update_last_algorithm(comm_ptr,"BCAST_MPICH");
- return MPIR_Bcast_intra(buffer, count, datatype, root, comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for bcast on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
-
- MPIDI_Context_post(MPIDI_Context[0], &bcast_post.state, MPIDI_Pami_post_wrapper, (void *)&bcast);
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
- MPID_PROGRESS_WAIT_WHILE(active);
- TRACE_ERR("bcast done\n");
-
- if(!data_contig)
- {
- if(rank != root)
- MPIR_Localcopy(noncontig_buff, data_size, MPI_CHAR,
- buffer, count, datatype);
- MPIU_Free(noncontig_buff);
- }
-
- TRACE_ERR("leaving bcast\n");
- return 0;
-}
-
-
-int MPIDO_Bcast_simple(void *buffer,
- int count,
- MPI_Datatype datatype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
- TRACE_ERR("Entering MPIDO_Bcast_optimized\n");
-
- int data_contig;
- void *data_buffer = NULL,
- *noncontig_buff = NULL;
- volatile unsigned active = 1;
- MPI_Aint data_true_lb = 0;
- MPID_Datatype *data_ptr;
- MPID_Segment segment;
- MPIDI_Post_coll_t bcast_post;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int rank = comm_ptr->rank;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- /* Must calculate data_size based on count=1 in case it's total size is > integer */
- int data_size_one;
- MPIDI_Datatype_get_info(1, datatype,
- data_contig, data_size_one, data_ptr, data_true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_BROADCAST, data_size_one * count, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Bcast_intra(buffer, count, datatype, root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- const int data_size = data_size_one*(size_t)count;
-
- data_buffer = (char *)buffer + data_true_lb;
-
- if(!data_contig)
- {
- noncontig_buff = MPIU_Malloc(data_size);
- data_buffer = noncontig_buff;
- if(noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(rank == root)
- {
- DLOOP_Offset last = data_size;
- MPID_Segment_init(buffer, count, datatype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, noncontig_buff);
- }
- }
-
- pami_xfer_t bcast;
- const pami_metadata_t *my_bcast_md;
-
- bcast.cb_done = cb_bcast;
- bcast.cookie = (void *)&active;
- bcast.cmd.xfer_broadcast.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- bcast.algorithm = mpid->coll_algorithm[PAMI_XFER_BROADCAST][0][0];
- bcast.cmd.xfer_broadcast.buf = data_buffer;
- bcast.cmd.xfer_broadcast.type = PAMI_TYPE_BYTE;
- /* Needs to be sizeof(type)*count since we are using bytes as * the generic type */
- bcast.cmd.xfer_broadcast.typecount = data_size;
- my_bcast_md = &mpid->coll_metadata[PAMI_XFER_BROADCAST][0][0];
-
- MPIDI_Context_post(MPIDI_Context[0], &bcast_post.state, MPIDI_Pami_post_wrapper, (void *)&bcast);
- MPIDI_Update_last_algorithm(comm_ptr, my_bcast_md->name);
- MPID_PROGRESS_WAIT_WHILE(active);
- TRACE_ERR("bcast done\n");
-
- if(!data_contig)
- {
- if(rank != root)
- MPIR_Localcopy(noncontig_buff, data_size, MPI_CHAR,
- buffer, count, datatype);
- MPIU_Free(noncontig_buff);
- }
-
- TRACE_ERR("Exiting MPIDO_Bcast_optimized\n");
- return 0;
-}
-
-
-int
-MPIDO_CSWrapper_bcast(pami_xfer_t *bcast,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype type;
- int rc = MPIDI_Dtpami_to_dtmpi( bcast->cmd.xfer_broadcast.type,
- &type,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Bcast_intra(bcast->cmd.xfer_broadcast.buf,
- bcast->cmd.xfer_broadcast.typecount, type,
- bcast->cmd.xfer_broadcast.root, comm_ptr, &mpierrno);
- if(bcast->cb_done && rc == 0)
- bcast->cb_done(NULL, bcast->cookie, PAMI_SUCCESS);
- return rc;
-}
-
diff --git a/src/mpid/pamid/src/coll/bcast/mpido_ibcast.c b/src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
deleted file mode 100644
index 836ccfe..0000000
--- a/src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/bcast/mpido_ibcast.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-
-#include <mpidimpl.h>
-
-int MPIDO_Ibcast(void *buffer,
- int count,
- MPI_Datatype datatype,
- int root,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- TRACE_ERR("in mpido_ibcast\n");
-
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to MPIR_Ibcast_impl
- * to invoke the mpich nbc implementation of MPI_Ibcast().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ibcast() with a blocking MPIR_Bcast().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH bcast algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Bcast_intra(buffer, count, datatype, root, comm_ptr, &mpierrno);
-
- /*
- * The blocking bcast has completed - create and complete a MPID_Request
- * object so the MPIR_Ibcast_impl() function does not perform the bcast.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
-
- TRACE_ERR("leaving ibcast\n");
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/coll_utils.c b/src/mpid/pamid/src/coll/coll_utils.c
deleted file mode 100644
index 50a3d55..0000000
--- a/src/mpid/pamid/src/coll/coll_utils.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/coll_utils.c
- * \brief ???
- */
-
-//#define TRACE_ON
-
-#include <mpidimpl.h>
-
-pami_result_t MPIDI_Pami_post_wrapper(pami_context_t context, void *cookie)
-{
- TRACE_ERR("In post wrapper\n");
- TRACE_ERR("About to call collecive\n");
- PAMI_Collective(context, (pami_xfer_t *)cookie);
- TRACE_ERR("Done calling collective\n");
- return PAMI_SUCCESS;
-}
-
-/* some useful macros to make the comparisons less icky, esp given the */
-/* explosion of datatypes in MPI2.2 */
-#define isS_INT(x) ( (x)==MPI_INTEGER || \
- (x) == MPI_INT32_T || (x) == MPI_INTEGER4 || \
- (x) == MPI_INT)
-
-#define isUS_INT(x) ( (x) == MPI_UINT32_T || (x) == MPI_UNSIGNED)
-
-#define isS_SHORT(x) ( (x) == MPI_SHORT || (x) == MPI_INT16_T || \
- (x) == MPI_INTEGER2)
-
-#define isUS_SHORT(x) ( (x) == MPI_UNSIGNED_SHORT || (x) == MPI_UINT16_T)
-
-#define isS_CHAR(x) ( (x) == MPI_SIGNED_CHAR || (x) == MPI_INT8_T || \
- (x) == MPI_INTEGER1 || (x) == MPI_CHAR)
-
-#define isUS_CHAR(x) ( (x) == MPI_BYTE || \
- (x) == MPI_UNSIGNED_CHAR || (x) == MPI_UINT8_T )
-
-/* sizeof(longlong) == sizeof(long) == sizeof(uint64) on bgq */
-#define isS_LONG(x) ( (x) == MPI_LONG || (x) == MPI_AINT )
-
-#define isUS_LONG(x) ( (x) == MPI_UNSIGNED_LONG )
-
-#define isS_LONG_LONG(x) ( (x) == MPI_INT64_T || (x) == MPI_OFFSET || \
- (x) == MPI_INTEGER8 || (x) == MPI_LONG_LONG || \
- (x) == MPI_LONG_LONG_INT )
-
-#define isUS_LONG_LONG(x) ( (x) == MPI_UINT64_T || (x) == MPI_UNSIGNED_LONG_LONG )
-
-
-
-#define isFLOAT(x) ( (x) == MPI_FLOAT || (x) == MPI_REAL)
-
-#define isDOUBLE(x) ( (x) == MPI_DOUBLE || (x) == MPI_DOUBLE_PRECISION)
-
-#define isLONG_DOUBLE(x) ( (x) == MPI_LONG_DOUBLE )
-
-#define isLOC_TYPE(x) ( (x) == MPI_2REAL || (x) == MPI_2DOUBLE_PRECISION || \
- (x) == MPI_2INTEGER || (x) == MPI_FLOAT_INT || \
- (x) == MPI_DOUBLE_INT || (x) == MPI_LONG_INT || \
- (x) == MPI_2INT || (x) == MPI_SHORT_INT || \
- (x) == MPI_LONG_DOUBLE_INT )
-
-#define isPAMI_LOC_TYPE(x) ( (x) == PAMI_TYPE_LOC_2INT || (x) == PAMI_TYPE_LOC_FLOAT_INT || \
- (x) == PAMI_TYPE_LOC_DOUBLE_INT || (x) == PAMI_TYPE_LOC_SHORT_INT || \
- (x) == PAMI_TYPE_LOC_LONG_INT || (x) == PAMI_TYPE_LOC_LONGDOUBLE_INT || \
- (x) == PAMI_TYPE_LOC_2FLOAT || (x) == PAMI_TYPE_LOC_2DOUBLE )
-
-#define isBOOL(x) ( (x) == MPI_C_BOOL )
-
-#define isLOGICAL(x) ( (x) == MPI_LOGICAL )
-
-#define isSINGLE_COMPLEX(x) ( (x) == MPI_COMPLEX || (x) == MPI_C_FLOAT_COMPLEX)
-
-#define isDOUBLE_COMPLEX(x) ( (x) == MPI_DOUBLE_COMPLEX || (x) == MPI_COMPLEX8 ||\
- (x) == MPI_C_DOUBLE_COMPLEX)
-
-/* known missing types: MPI_C_LONG_DOUBLE_COMPLEX */
-
-
-#define MUSUPPORTED 1
-#define MUUNSUPPORTED 0
-
-/* for easier debug */
-void MPIDI_Op_to_string(MPI_Op op, char *string)
-{
- switch(op)
- {
- case MPI_SUM: strcpy(string, "MPI_SUM"); break;
- case MPI_PROD: strcpy(string, "MPI_PROD"); break;
- case MPI_LAND: strcpy(string, "MPI_LAND"); break;
- case MPI_LOR: strcpy(string, "MPI_LOR"); break;
- case MPI_LXOR: strcpy(string, "MPI_LXOR"); break;
- case MPI_BAND: strcpy(string, "MPI_BAND"); break;
- case MPI_BOR: strcpy(string, "MPI_BOR"); break;
- case MPI_BXOR: strcpy(string, "MPI_BXOR"); break;
- case MPI_MAX: strcpy(string, "MPI_MAX"); break;
- case MPI_MIN: strcpy(string, "MPI_MIN"); break;
- case MPI_MINLOC: strcpy(string, "MPI_MINLOC"); break;
- case MPI_MAXLOC: strcpy(string, "MPI_MAXLOC"); break;
- default: strcpy(string, "Other"); break;
- }
-}
-
-
-int MPIDI_Datatype_to_pami(MPI_Datatype dt,
- pami_type_t *pdt,
- MPI_Op op,
- pami_data_function *pop,
- int *musupport)
-{
- *musupport = MUSUPPORTED;
- *pdt = PAMI_TYPE_NULL;
- if(op != -1)
- *pop = PAMI_DATA_NOOP;
- if(isS_INT(dt)) *pdt = PAMI_TYPE_SIGNED_INT;
- else if(isUS_INT(dt)) *pdt = PAMI_TYPE_UNSIGNED_INT;
- else if(isFLOAT(dt)) *pdt = PAMI_TYPE_FLOAT;
- else if(isDOUBLE(dt)) *pdt = PAMI_TYPE_DOUBLE;
- else if(isLONG_DOUBLE(dt)) *pdt = PAMI_TYPE_LONG_DOUBLE;
- else
- {
- *musupport = MUUNSUPPORTED;
- if(isS_CHAR(dt)) *pdt = PAMI_TYPE_SIGNED_CHAR;
- else if(isUS_CHAR(dt)) *pdt = PAMI_TYPE_UNSIGNED_CHAR;
- else if(isS_SHORT(dt)) *pdt = PAMI_TYPE_SIGNED_SHORT;
- else if(isUS_SHORT(dt)) *pdt = PAMI_TYPE_UNSIGNED_SHORT;
- else if(isS_LONG(dt)) *pdt = PAMI_TYPE_SIGNED_LONG;
- else if(isUS_LONG(dt)) *pdt = PAMI_TYPE_UNSIGNED_LONG;
- else if(isS_LONG_LONG(dt)) *pdt = PAMI_TYPE_SIGNED_LONG_LONG;
- else if(isUS_LONG_LONG(dt)) *pdt = PAMI_TYPE_UNSIGNED_LONG_LONG;
- else if(isSINGLE_COMPLEX(dt)) *pdt = PAMI_TYPE_SINGLE_COMPLEX;
- else if(isDOUBLE_COMPLEX(dt)) *pdt = PAMI_TYPE_DOUBLE_COMPLEX;
- else if(isLOC_TYPE(dt))
- {
- switch(dt)
- {
- case MPI_2INT: *pdt = PAMI_TYPE_LOC_2INT; break;
- case MPI_FLOAT_INT: *pdt = PAMI_TYPE_LOC_FLOAT_INT; break;
- case MPI_DOUBLE_INT: *pdt = PAMI_TYPE_LOC_DOUBLE_INT; break;
- case MPI_SHORT_INT: *pdt = PAMI_TYPE_LOC_SHORT_INT; break;
-
- case MPI_LONG_INT: *pdt = PAMI_TYPE_LOC_LONG_INT; break;
- case MPI_LONG_DOUBLE_INT: *pdt = PAMI_TYPE_LOC_LONGDOUBLE_INT; break;
- default:
- /* The following is needed to catch missing fortran bindings */
- if (dt == MPI_2REAL)
- *pdt = PAMI_TYPE_LOC_2FLOAT;
- else if (dt == MPI_2DOUBLE_PRECISION)
- *pdt = PAMI_TYPE_LOC_2DOUBLE;
- else if (dt == MPI_2INTEGER)
- *pdt = PAMI_TYPE_LOC_2INT;
- }
- /*
- * There are some 2-element types that PAMI doesn't support, so we
- * need to bail on anything that's left of the LOC_TYPEs
- */
- if(*pdt == PAMI_TYPE_NULL) return -1;
-
- if(op == -1) return MPI_SUCCESS;
- if(op == MPI_MINLOC)
- {
- *pop = PAMI_DATA_MINLOC;
- return MPI_SUCCESS;
- }
- if(op == MPI_MAXLOC)
- {
- *pop = PAMI_DATA_MAXLOC;
- return MPI_SUCCESS;
- }
- if(op == MPI_REPLACE)
- {
- *pop = PAMI_DATA_COPY;
- return MPI_SUCCESS;
- }
- else return -1;
- }
- else if(isLOGICAL(dt))
- {
- *pdt = PAMI_TYPE_LOGICAL4;
- if(op == -1) return MPI_SUCCESS;
- if(op == MPI_LOR)
- {
- *pop = PAMI_DATA_LOR;
- return MPI_SUCCESS;
- }
- if(op == MPI_LAND)
- {
- *pop = PAMI_DATA_LAND;
- return MPI_SUCCESS;
- }
- if(op == MPI_LXOR)
- {
- *pop = PAMI_DATA_LXOR;
- return MPI_SUCCESS;
- }
- if(op == MPI_REPLACE)
- {
- *pop = PAMI_DATA_COPY;
- return MPI_SUCCESS;
- }
- return -1;
- }
- else if(isBOOL(dt))
- {
- *pdt = PAMI_TYPE_LOGICAL1;
- if(op == -1) return MPI_SUCCESS;
- if(op == MPI_LOR)
- {
- *pop = PAMI_DATA_LOR;
- return MPI_SUCCESS;
- }
- if(op == MPI_LAND)
- {
- *pop = PAMI_DATA_LAND;
- return MPI_SUCCESS;
- }
- if(op == MPI_LXOR)
- {
- *pop = PAMI_DATA_LXOR;
- return MPI_SUCCESS;
- }
- if(op == MPI_REPLACE)
- {
- *pop = PAMI_DATA_COPY;
- return MPI_SUCCESS;
- }
- return -1;
- }
- }
-
- if(*pdt == PAMI_TYPE_NULL) return -1;
-
- if(op == -1) return MPI_SUCCESS; /* just doing DT conversion */
-
- *pop = PAMI_DATA_NOOP;
- switch(op)
- {
- case MPI_SUM: *pop = PAMI_DATA_SUM; return MPI_SUCCESS; break;
- case MPI_PROD: *pop = PAMI_DATA_PROD; return MPI_SUCCESS; break;
- case MPI_MAX: *pop = PAMI_DATA_MAX; return MPI_SUCCESS; break;
- case MPI_MIN: *pop = PAMI_DATA_MIN; return MPI_SUCCESS; break;
- case MPI_BAND: *pop = PAMI_DATA_BAND; return MPI_SUCCESS; break;
- case MPI_BOR: *pop = PAMI_DATA_BOR; return MPI_SUCCESS; break;
- case MPI_BXOR: *pop = PAMI_DATA_BXOR; return MPI_SUCCESS; break;
- case MPI_LAND:
- if(isLONG_DOUBLE(dt)) return -1;
- *pop = PAMI_DATA_LAND; return MPI_SUCCESS; break;
- case MPI_LOR:
- if(isLONG_DOUBLE(dt)) return -1;
- *pop = PAMI_DATA_LOR; return MPI_SUCCESS; break;
- case MPI_LXOR:
- if(isLONG_DOUBLE(dt)) return -1;
- *pop = PAMI_DATA_LXOR; return MPI_SUCCESS; break;
- case MPI_REPLACE: *pop = PAMI_DATA_COPY; return MPI_SUCCESS; break;
- }
- if(*pop == PAMI_DATA_NOOP) return -1;
-
- return MPI_SUCCESS;
-}
-
-int MPIDI_Dtpami_to_dtmpi( pami_type_t pdt,
- MPI_Datatype *dt,
- pami_data_function pop,
- MPI_Op *op)
-{
- *dt = MPI_DATATYPE_NULL;
- if(pop != NULL)
- *op = MPI_OP_NULL;
-
- if(pdt == PAMI_TYPE_SIGNED_INT) *dt = MPI_INT;
- else if(pdt == PAMI_TYPE_UNSIGNED_INT) *dt = MPI_UNSIGNED;
- else if(pdt == PAMI_TYPE_FLOAT) *dt = MPI_FLOAT;
- else if(pdt == PAMI_TYPE_DOUBLE) *dt = MPI_DOUBLE;
- else if(pdt == PAMI_TYPE_LONG_DOUBLE) *dt = MPI_LONG_DOUBLE;
- else if(pdt == PAMI_TYPE_SIGNED_CHAR) *dt = MPI_CHAR;
- else if(pdt == PAMI_TYPE_UNSIGNED_CHAR) *dt = MPI_UNSIGNED_CHAR;
- else if(pdt == PAMI_TYPE_BYTE) *dt = MPI_BYTE;
- else if(pdt == PAMI_TYPE_SIGNED_SHORT) *dt = MPI_SHORT;
- else if(pdt == PAMI_TYPE_UNSIGNED_SHORT) *dt = MPI_UNSIGNED_SHORT;
- else if(pdt == PAMI_TYPE_SIGNED_LONG_LONG) *dt = MPI_LONG_LONG;
- else if(pdt == PAMI_TYPE_UNSIGNED_LONG_LONG) *dt = MPI_UNSIGNED_LONG_LONG;
- else if(pdt == PAMI_TYPE_SINGLE_COMPLEX) *dt = MPI_C_FLOAT_COMPLEX;
- else if(pdt == PAMI_TYPE_DOUBLE_COMPLEX) *dt = MPI_C_DOUBLE_COMPLEX;
- else if(isPAMI_LOC_TYPE(pdt))
- {
- if(pdt == PAMI_TYPE_LOC_2INT) *dt = MPI_2INT;
- else if(pdt == PAMI_TYPE_LOC_FLOAT_INT) *dt = MPI_FLOAT_INT;
- else if(pdt == PAMI_TYPE_LOC_DOUBLE_INT) *dt = MPI_DOUBLE_INT;
- else if(pdt == PAMI_TYPE_LOC_SHORT_INT) *dt = MPI_SHORT_INT;
- else if(pdt == PAMI_TYPE_LOC_LONG_INT) *dt = MPI_LONG_INT;
- else if(pdt == PAMI_TYPE_LOC_LONGDOUBLE_INT)*dt = MPI_LONG_DOUBLE_INT;
- else if(pdt == PAMI_TYPE_LOC_2FLOAT) *dt = MPI_2REAL;
- else if(pdt == PAMI_TYPE_LOC_2DOUBLE) *dt = MPI_2DOUBLE_PRECISION;
-
- if(pop == NULL) return MPI_SUCCESS;
- if(pop == PAMI_DATA_MINLOC)
- {
- *op = MPI_MINLOC;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_MAXLOC)
- {
- *op = MPI_MAXLOC;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_COPY)
- {
- *op = MPI_REPLACE;
- return MPI_SUCCESS;
- }
- else return -1;
- }
- else if(pdt == PAMI_TYPE_LOGICAL4)
- {
- *dt = MPI_LOGICAL;
- if(pop == NULL) return MPI_SUCCESS;
- if(pop == PAMI_DATA_LOR)
- {
- *op = MPI_LOR;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_LAND)
- {
- *op = MPI_LAND;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_LXOR)
- {
- *op = MPI_LXOR;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_COPY)
- {
- *op = MPI_REPLACE;
- return MPI_SUCCESS;
- }
- return -1;
- }
- else if(pdt == PAMI_TYPE_LOGICAL1)
- {
- *dt = MPI_C_BOOL;
- if(pop == NULL) return MPI_SUCCESS;
- if(pop == PAMI_DATA_LOR)
- {
- *op = MPI_LOR;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_LAND)
- {
- *op = MPI_LAND;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_LXOR)
- {
- *op = MPI_LXOR;
- return MPI_SUCCESS;
- }
- if(pop == PAMI_DATA_COPY)
- {
- *op = MPI_REPLACE;
- return MPI_SUCCESS;
- }
- return -1;
- }
-
-
- if(*dt == MPI_DATATYPE_NULL) return -1;
-
- if(pop == NULL) return MPI_SUCCESS; /* just doing DT conversion */
-
- *op = MPI_OP_NULL;
- if(pop == PAMI_DATA_SUM) *op = MPI_SUM;
- else if(pop ==PAMI_DATA_PROD) *op = MPI_PROD;
- else if(pop ==PAMI_DATA_MAX) *op = MPI_MAX;
- else if(pop ==PAMI_DATA_MIN) *op = MPI_MIN;
- else if(pop ==PAMI_DATA_BAND) *op = MPI_BAND;
- else if(pop ==PAMI_DATA_BOR) *op = MPI_BOR;
- else if(pop ==PAMI_DATA_BXOR) *op = MPI_BXOR;
- else if(pop ==PAMI_DATA_LAND) *op = MPI_LAND;
- else if(pop ==PAMI_DATA_LOR) *op = MPI_LOR;
- else if(pop ==PAMI_DATA_LXOR) *op = MPI_LXOR;
- else if(pop ==PAMI_DATA_COPY) *op = MPI_REPLACE;
-
- if(*op == MPI_OP_NULL) return -1;
-
- return MPI_SUCCESS;
-}
-
diff --git a/src/mpid/pamid/src/coll/exscan/Makefile.mk b/src/mpid/pamid/src/coll/exscan/Makefile.mk
deleted file mode 100644
index 511bc9d..0000000
--- a/src/mpid/pamid/src/coll/exscan/Makefile.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
-
-
-endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/exscan/mpido_iexscan.c b/src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
deleted file mode 100644
index a45dc41..0000000
--- a/src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/exscan/mpido_iexscan.c
- * \brief ???
- */
-
-/*#define TRACE_ON */
-#include <mpidimpl.h>
-
-int MPIDO_Iexscan(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request)
-{
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Iexscan_impl() function to invoke the mpich nbc implementation
- * of MPI_Iexscan().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Iexscan() with a blocking MPIR_Exscan().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking exscan algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Exscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, &mpierrno);
-
- /*
- * The blocking exscan has completed - create and complete a
- * MPID_Request object so the MPIR_Iexscan_impl() function does not
- * perform an additional iexscan.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/gather/Makefile.mk b/src/mpid/pamid/src/coll/gather/Makefile.mk
deleted file mode 100644
index 7b95dee..0000000
--- a/src/mpid/pamid/src/coll/gather/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/gather/mpido_gather.c \
- src/mpid/pamid/src/coll/gather/mpido_igather.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/gather/mpido_gather.c b/src/mpid/pamid/src/coll/gather/mpido_gather.c
deleted file mode 100644
index 13d3332..0000000
--- a/src/mpid/pamid/src/coll/gather/mpido_gather.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/gather/mpido_gather.c
- * \brief ???
- */
-
-#include <mpidimpl.h>
-
-static void cb_gather(void *ctxt, void *clientdata, pami_result_t err)
-{
- unsigned *active = (unsigned *)clientdata;
- TRACE_ERR("cb_gather enter, active: %u\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-
-static void cb_allred(void *ctxt, void *clientdata, pami_result_t err)
-{
- unsigned *active = (unsigned *)clientdata;
- TRACE_ERR("cb_allred preallred enter, active: %u\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-int MPIDO_Gather_reduce(void * sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
- MPID_Datatype * data_ptr;
- MPI_Aint true_lb ATTRIBUTE((unused));
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
- int rc, sbytes, rbytes;
- int contig ATTRIBUTE((unused));
- char *tempbuf = NULL;
- char *inplacetemp = NULL;
-
- MPIDI_Datatype_get_info(sendcount, sendtype, contig,
- sbytes, data_ptr, true_lb);
-
- MPIDI_Datatype_get_info(recvcount, recvtype, contig,
- rbytes, data_ptr, true_lb);
-
- if(rank == root)
- {
- tempbuf = recvbuf;
- /* zero the buffer if we aren't in place */
- if(sendbuf != MPI_IN_PLACE)
- {
- memset(tempbuf, 0, sbytes * size * sizeof(char));
- memcpy(tempbuf+(rank * sbytes), sendbuf, sbytes);
- }
- /* copy our contribution temporarily, zero the buffer, put it back */
- /* this will likely suck */
- else
- {
- inplacetemp = MPIU_Malloc(rbytes * sizeof(char));
- memcpy(inplacetemp, recvbuf+(rank * rbytes), rbytes);
- memset(tempbuf, 0, sbytes * size * sizeof(char));
- memcpy(tempbuf+(rank * rbytes), inplacetemp, rbytes);
- MPIU_Free(inplacetemp);
- }
- }
- /* everyone might need to speciifcally allocate a tempbuf, or
- * we might need to make sure we don't end up at mpich in the
- * mpido_() functions - seems to be a problem?
- */
-
- /* If we aren't root, malloc tempbuf and zero it,
- * then copy our contribution to the right spot in the big buffer */
- else
- {
- tempbuf = MPIU_Malloc(sbytes * size * sizeof(char));
- if(!tempbuf)
- return MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- __FUNCTION__,
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem", 0);
-
- memset(tempbuf, 0, sbytes * size * sizeof(char));
- memcpy(tempbuf+(rank*sbytes), sendbuf, sbytes);
- }
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Reduce(MPI_IN_PLACE,
- tempbuf,
- (sbytes * size)/4,
- MPI_INT,
- MPI_BOR,
- root,
- comm_ptr,
- mpierrno);
-
- if(rank != root)
- MPIU_Free(tempbuf);
-
- return rc;
-}
-
-/* works for simple data types, assumes fast reduce is available */
-
-int MPIDO_Gather(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype * data_ptr;
- MPI_Aint true_lb ATTRIBUTE((unused));
- pami_xfer_t gather;
- MPIDI_Post_coll_t gather_post;
- int use_opt = 1, contig=0, send_bytes=-1, recv_bytes = 0;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_GATHER];
-
- if (rank == root)
- {
- if (recvtype != MPI_DATATYPE_NULL && recvcount >= 0)
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, contig,
- recv_bytes, data_ptr, true_lb);
- if (!contig || ((recv_bytes * size) % sizeof(int))) /* ? */
- use_opt = 0;
- }
- else
- use_opt = 0;
- }
-
- if ((sendbuf != MPI_IN_PLACE) && sendtype != MPI_DATATYPE_NULL && sendcount >= 0)
- {
- MPIDI_Datatype_get_info(sendcount, sendtype, contig,
- send_bytes, data_ptr, true_lb);
- if (!contig || ((send_bytes * size) % sizeof(int)))
- use_opt = 0;
- }
- else
- {
- if(sendbuf == MPI_IN_PLACE)
- send_bytes = recv_bytes;
- if (sendtype == MPI_DATATYPE_NULL || sendcount == 0)
- {
- send_bytes = 0;
- use_opt = 0;
- }
- }
-
- if(!mpid->optgather &&
- selected_type == MPID_COLL_USE_MPICH)
- {
- MPIDI_Update_last_algorithm(comm_ptr, "GATHER_MPICH");
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH gather algorithm (01) opt %x, selected type %d\n",mpid->optgather,selected_type);
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint sdt_extent,rdt_extent;
- MPID_Datatype_get_extent_macro(sendtype, sdt_extent);
- MPID_Datatype_get_extent_macro(recvtype, rdt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = (rank == root) ? MPIDI_cuda_is_device_buf(recvbuf) : 0;
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(sdt_extent * sendcount);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, sdt_extent * sendcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(rdt_extent * recvcount);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, rdt_extent * recvcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, rdt_extent * recvcount);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Gather(scbuf, sendcount, sendtype, rcbuf, recvcount, recvtype, root, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, rdt_extent * recvcount, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Gather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- if(mpid->preallreduces[MPID_GATHER_PREALLREDUCE])
- {
- if(unlikely(verbose))
- fprintf(stderr,"MPID_GATHER_PREALLREDUCE opt %x, selected type %d, use_opt %d\n",mpid->optgather,selected_type, use_opt);
- volatile unsigned allred_active = 1;
- pami_xfer_t allred;
- MPIDI_Post_coll_t allred_post;
- allred.cb_done = cb_allred;
- allred.cookie = (void *)&allred_active;
- /* Guaranteed to work allreduce */
- allred.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLREDUCE][0][0];
- allred.cmd.xfer_allreduce.sndbuf = (void *)PAMI_IN_PLACE;
- allred.cmd.xfer_allreduce.stype = PAMI_TYPE_SIGNED_INT;
- allred.cmd.xfer_allreduce.rcvbuf = (void *)&use_opt;
- allred.cmd.xfer_allreduce.rtype = PAMI_TYPE_SIGNED_INT;
- allred.cmd.xfer_allreduce.stypecount = 1;
- allred.cmd.xfer_allreduce.rtypecount = 1;
- allred.cmd.xfer_allreduce.op = PAMI_DATA_BAND;
-
- MPIDI_Context_post(MPIDI_Context[0], &allred_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allred);
- MPID_PROGRESS_WAIT_WHILE(allred_active);
- if(unlikely(verbose))
- fprintf(stderr,"MPID_GATHER_PREALLREDUCE opt %x, selected type %d, use_opt %d\n",mpid->optgather,selected_type, use_opt);
- }
-
- if(mpid->optgather)
- {
- if(use_opt)
- {
- MPIDI_Update_last_algorithm(comm_ptr, "GLUE_REDUCDE");
- abort();
- /* GLUE_REDUCE ? */
- }
- else
- {
- MPIDI_Update_last_algorithm(comm_ptr, "GATHER_MPICH");
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH gather algorithm (02) opt %x, selected type %d, use_opt %d\n",mpid->optgather,selected_type, use_opt);
- return MPIR_Gather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- }
-
-
- pami_algorithm_t my_gather;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
- volatile unsigned active = 1;
-
- gather.cb_done = cb_gather;
- gather.cookie = (void *)&active;
- gather.cmd.xfer_gather.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- if(sendbuf == MPI_IN_PLACE)
- {
- if(unlikely(verbose))
- fprintf(stderr,"gather MPI_IN_PLACE buffering\n");
- gather.cmd.xfer_gather.stypecount = recv_bytes;
- gather.cmd.xfer_gather.sndbuf = PAMI_IN_PLACE;
- }
- else
- {
- gather.cmd.xfer_gather.stypecount = send_bytes;
- gather.cmd.xfer_gather.sndbuf = (void *)sendbuf;
- }
- gather.cmd.xfer_gather.stype = PAMI_TYPE_BYTE;
- gather.cmd.xfer_gather.rcvbuf = (void *)recvbuf;
- gather.cmd.xfer_gather.rtype = PAMI_TYPE_BYTE;
- gather.cmd.xfer_gather.rtypecount = recv_bytes;
-
- /* If glue-level protocols are good, this will require some changes */
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- TRACE_ERR("Optimized gather (%s) was pre-selected\n",
- mpid->opt_protocol_md[PAMI_XFER_GATHER][0].name);
- my_gather = mpid->opt_protocol[PAMI_XFER_GATHER][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_GATHER][0];
- queryreq = mpid->must_query[PAMI_XFER_GATHER][0];
- }
- else
- {
- TRACE_ERR("Optimized gather (%s) was specified by user\n",
- mpid->user_metadata[PAMI_XFER_GATHER].name);
- my_gather = mpid->user_selected[PAMI_XFER_GATHER];
- my_md = &mpid->user_metadata[PAMI_XFER_GATHER];
- queryreq = selected_type;
- }
-
- gather.algorithm = my_gather;
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying gather protocol %s, type was %d\n",
- my_md->name, queryreq);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
- if(my_md->check_correct.values.rangeminmax)
- {
- /* Non-local decision? */
- if(((rank == root) &&
- (my_md->range_lo <= recv_bytes) &&
- (my_md->range_hi >= recv_bytes)
- ) &&
- ((rank != root) &&
- (my_md->range_lo <= send_bytes) &&
- (my_md->range_hi >= send_bytes)
- )
- )
- ; /* ok, algorithm selected */
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- recv_bytes,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&gather);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"query failed for %s\n", my_md->name);
- MPIDI_Update_last_algorithm(comm_ptr, "GATHER_MPICH");
- return MPIR_Gather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- MPIDI_Update_last_algorithm(comm_ptr,
- mpid->user_metadata[PAMI_XFER_GATHER].name);
-
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for gather on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
-
- MPIDI_Context_post(MPIDI_Context[0], &gather_post.state,
- MPIDI_Pami_post_wrapper, (void *)&gather);
-
- TRACE_ERR("Waiting on active: %d\n", active);
- MPID_PROGRESS_WAIT_WHILE(active);
-
- TRACE_ERR("Leaving MPIDO_Gather\n");
- return 0;
-}
-
-
-int MPIDO_Gather_simple(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype * data_ptr;
- MPI_Aint true_lb = 0;
- pami_xfer_t gather;
- MPIDI_Post_coll_t gather_post;
- int success = 1, snd_contig = 1, rcv_contig = 1;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- void *sbuf = NULL, *rbuf = NULL;
- int send_size = 0;
- int recv_size = 0;
- MPID_Segment segment;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- if(sendbuf != MPI_IN_PLACE)
- {
- MPIDI_Datatype_get_info(sendcount, sendtype, snd_contig,
- send_size, data_ptr, true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_GATHER, send_size, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Gather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- sbuf = (char *)sendbuf + true_lb;
- if (!snd_contig)
- {
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- DLOOP_Offset last = send_size;
- MPID_Segment_init(sendbuf, sendcount, sendtype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, snd_noncontig_buff);
- }
- }
- else
- {
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, rcv_contig,
- recv_size, data_ptr, true_lb);
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_GATHER, recv_size, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Gather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
-
- }
- }
- }
-
- rbuf = (char *)recvbuf + true_lb;
- if (rank == root)
- {
- if (recvtype != MPI_DATATYPE_NULL && recvcount >= 0)
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, rcv_contig,
- recv_size, data_ptr, true_lb);
- rbuf = (char *)recvbuf + true_lb;
- if (!rcv_contig)
- {
- rcv_noncontig_buff = MPIU_Malloc(recv_size * size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendbuf == MPI_IN_PLACE)
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- MPIR_Localcopy(recvbuf + (rank*recvcount*extent), recvcount, recvtype,
- rcv_noncontig_buff + (rank*recv_size), recv_size,MPI_CHAR);
- }
- }
- }
- else
- success = 0;
- }
-
- if(!success)
- {
- MPIDI_Update_last_algorithm(comm_ptr, "GATHER_MPICH");
- return MPIR_Gather(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
-
-
- const pami_metadata_t *my_gather_md;
- volatile unsigned active = 1;
-
- gather.cb_done = cb_gather;
- gather.cookie = (void *)&active;
- gather.cmd.xfer_gather.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- gather.cmd.xfer_gather.stypecount = send_size;/* stypecount is ignored when sndbuf == PAMI_IN_PLACE */
- gather.cmd.xfer_gather.sndbuf = (void *)sbuf;
- if(sendbuf == MPI_IN_PLACE)
- {
- gather.cmd.xfer_gather.sndbuf = PAMI_IN_PLACE;
- }
- gather.cmd.xfer_gather.stype = PAMI_TYPE_BYTE;/* stype is ignored when sndbuf == PAMI_IN_PLACE */
- gather.cmd.xfer_gather.rcvbuf = (void *)rbuf;
- gather.cmd.xfer_gather.rtype = PAMI_TYPE_BYTE;
- gather.cmd.xfer_gather.rtypecount = recv_size;
- gather.algorithm = mpid->coll_algorithm[PAMI_XFER_GATHER][0][0];
- my_gather_md = &mpid->coll_metadata[PAMI_XFER_GATHER][0][0];
-
- MPIDI_Update_last_algorithm(comm_ptr,
- my_gather_md->name);
-
- TRACE_ERR("%s gather\n", MPIDI_Process.context_post.active>0?"Posting":"Invoking");
- MPIDI_Context_post(MPIDI_Context[0], &gather_post.state,
- MPIDI_Pami_post_wrapper, (void *)&gather);
-
- TRACE_ERR("Waiting on active: %d\n", active);
- MPID_PROGRESS_WAIT_WHILE(active);
-
- if(!rcv_contig)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size*size, MPI_CHAR,
- recvbuf, recvcount*size, recvtype);
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_contig) MPIU_Free(snd_noncontig_buff);
-
- TRACE_ERR("Leaving MPIDO_Gather_optimized\n");
- return MPI_SUCCESS;
-}
-
-int
-MPIDO_CSWrapper_gather(pami_xfer_t *gather,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *sbuf;
- MPIDI_coll_check_in_place(gather->cmd.xfer_gather.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( gather->cmd.xfer_gather.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIDI_Dtpami_to_dtmpi( gather->cmd.xfer_gather.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Gather(sbuf,
- gather->cmd.xfer_gather.stypecount, sendtype,
- gather->cmd.xfer_gather.rcvbuf,
- gather->cmd.xfer_gather.rtypecount, recvtype,
- gather->cmd.xfer_gather.root, comm_ptr, &mpierrno);
-
- if(gather->cb_done && rc == 0)
- gather->cb_done(NULL, gather->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/gather/mpido_igather.c b/src/mpid/pamid/src/coll/gather/mpido_igather.c
deleted file mode 100644
index dfaa8fa..0000000
--- a/src/mpid/pamid/src/coll/gather/mpido_igather.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/gather/mpido_igather.c
- * \brief ???
- */
-
-#include <mpidimpl.h>
-
-int MPIDO_Igather(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Igather_impl() function to invoke the mpich nbc implementation
- * of MPI_Igather().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Igather() with a blocking MPIR_Gather().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking gather algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Gather_impl(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, &mpierrno);
-
- /*
- * The blocking gather has completed - create and complete a
- * MPID_Request object so the MPIR_Igather_impl() function does not
- * perform an additional igather.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/gatherv/Makefile.mk b/src/mpid/pamid/src/coll/gatherv/Makefile.mk
deleted file mode 100644
index ee401df..0000000
--- a/src/mpid/pamid/src/coll/gatherv/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c \
- src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c b/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
deleted file mode 100644
index 4213e95..0000000
--- a/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
+++ /dev/null
@@ -1,573 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/gather/mpido_gatherv.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-#include <mpidimpl.h>
-
-static void cb_gatherv(void *ctxt, void *clientdata, pami_result_t err)
-{
- unsigned *active = (unsigned *)clientdata;
- TRACE_ERR("cb_gatherv enter, active: %u\n", (*active));
- (*active)--;
-}
-
-int MPIDO_Gatherv(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *displs,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Gatherv\n");
- int i;
- int contig ATTRIBUTE((unused)), rsize ATTRIBUTE((unused)), ssize ATTRIBUTE((unused));
- int pamidt = 1;
- MPID_Datatype *dt_ptr = NULL;
- MPI_Aint send_true_lb, recv_true_lb;
- char *sbuf, *rbuf;
- pami_type_t stype, rtype;
- int tmp;
- volatile unsigned gatherv_active = 1;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_GATHERV_INT];
-
- /* Check for native PAMI types and MPI_IN_PLACE on sendbuf */
- /* MPI_IN_PLACE is a nonlocal decision. We will need a preallreduce if we ever have
- * multiple "good" gathervs that work on different counts for example */
- if((sendbuf != MPI_IN_PLACE) && (MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS))
- pamidt = 0;
- if(MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS)
- pamidt = 0;
-
- if(pamidt == 0 || selected_type == MPID_COLL_USE_MPICH)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH gatherv algorithm\n");
- TRACE_ERR("GATHERV using MPICH\n");
- MPIDI_Update_last_algorithm(comm_ptr, "GATHERV_MPICH");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint sdt_extent,rdt_extent;
- MPID_Datatype_get_extent_macro(sendtype, sdt_extent);
- MPID_Datatype_get_extent_macro(recvtype, rdt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = (rank == root) ? MPIDI_cuda_is_device_buf(recvbuf) : 0;
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(sdt_extent * sendcount);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, sdt_extent * sendcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- size_t rtotal_buf;
- if(is_recv_dev_buf)
- {
- //Since displs can be non-continous, we need to calculate max buffer size
- int highest_displs = displs[size - 1];
- int highest_recvcount = recvcounts[size - 1];
- for(i = 0; i < size; i++)
- {
- if(displs[i]+recvcounts[i] > highest_displs+highest_recvcount)
- {
- highest_displs = displs[i];
- highest_recvcount = recvcounts[i];
- }
- }
- rtotal_buf = (highest_displs+highest_recvcount)*rdt_extent;
- rcbuf = MPIU_Malloc(rtotal_buf);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, rtotal_buf, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, rtotal_buf);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Gatherv(scbuf, sendcount, sendtype, rcbuf, recvcounts, displs, recvtype, root, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, rtotal_buf, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Gatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- root, comm_ptr, mpierrno);
- }
-
- MPIDI_Datatype_get_info(1, recvtype, contig, rsize, dt_ptr, recv_true_lb);
- rbuf = (char *)recvbuf + recv_true_lb;
- sbuf = (void *) sendbuf;
-
- pami_xfer_t gatherv;
-
- gatherv.cb_done = cb_gatherv;
- gatherv.cookie = (void *)&gatherv_active;
- gatherv.cmd.xfer_gatherv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- gatherv.cmd.xfer_gatherv_int.rcvbuf = rbuf;
- gatherv.cmd.xfer_gatherv_int.rtype = rtype;
- gatherv.cmd.xfer_gatherv_int.rtypecounts = (int *) recvcounts;
- gatherv.cmd.xfer_gatherv_int.rdispls = (int *) displs;
-
- gatherv.cmd.xfer_gatherv_int.sndbuf = NULL;
- gatherv.cmd.xfer_gatherv_int.stype = stype;
- gatherv.cmd.xfer_gatherv_int.stypecount = sendcount;
-
- if(rank == root)
- {
- if(sendbuf == MPI_IN_PLACE)
- {
- if(unlikely(verbose))
- fprintf(stderr,"gatherv MPI_IN_PLACE buffering\n");
- sbuf = PAMI_IN_PLACE;
- gatherv.cmd.xfer_gatherv_int.stype = rtype;
- gatherv.cmd.xfer_gatherv_int.stypecount = recvcounts[rank];
- }
- else
- {
- MPIDI_Datatype_get_info(1, sendtype, contig, ssize, dt_ptr, send_true_lb);
- sbuf = (char *)sbuf + send_true_lb;
- }
- }
- gatherv.cmd.xfer_gatherv_int.sndbuf = sbuf;
-
- pami_algorithm_t my_gatherv;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
-
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- TRACE_ERR("Optimized gatherv %s was selected\n",
- mpid->opt_protocol_md[PAMI_XFER_GATHERV_INT][0].name);
- my_gatherv = mpid->opt_protocol[PAMI_XFER_GATHERV_INT][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_GATHERV_INT][0];
- queryreq = mpid->must_query[PAMI_XFER_GATHERV_INT][0];
- }
- else
- {
- TRACE_ERR("Optimized gatherv %s was set by user\n",
- mpid->user_metadata[PAMI_XFER_GATHERV_INT].name);
- my_gatherv = mpid->user_selected[PAMI_XFER_GATHERV_INT];
- my_md = &mpid->user_metadata[PAMI_XFER_GATHERV_INT];
- queryreq = selected_type;
- }
-
- gatherv.algorithm = my_gatherv;
-
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying gatherv protocol %s, type was %d\n",
- my_md->name, queryreq);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
-/* Can't check ranges like this. Non-local. Comment out for now.
- if(my_md->check_correct.values.rangeminmax)
- {
- MPI_Aint data_true_lb;
- MPID_Datatype *data_ptr;
- int data_size, data_contig;
- MPIDI_Datatype_get_info(sendcount, sendtype, data_contig, data_size, data_ptr, data_true_lb);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ;
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- */
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&gatherv);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH gatherv.\n", my_md->name);
- MPIDI_Update_last_algorithm(comm_ptr, "GATHERV_MPICH");
- return MPIR_Gatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- root, comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for gatherv on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
-
- MPIDI_Post_coll_t gatherv_post;
- MPIDI_Context_post(MPIDI_Context[0], &gatherv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&gatherv);
-
- TRACE_ERR("Waiting on active %d\n", gatherv_active);
- MPID_PROGRESS_WAIT_WHILE(gatherv_active);
-
- TRACE_ERR("Leaving MPIDO_Gatherv\n");
- return 0;
-}
-
-
-int MPIDO_Gatherv_simple(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *displs,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- TRACE_ERR("Entering MPIDO_Gatherv_optimized\n");
- int snd_contig = 1, rcv_contig = 1;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- void *sbuf = NULL, *rbuf = NULL;
- int *rcounts = NULL;
- int *rdispls = NULL;
- int send_size = 0;
- int recv_size = 0;
- int rcvlen = 0;
- int totalrecvcount = 0;
- pami_type_t rtype = PAMI_TYPE_NULL;
- MPID_Segment segment;
- MPID_Datatype *data_ptr = NULL;
- int send_true_lb, recv_true_lb = 0;
- int i, tmp;
- volatile unsigned gatherv_active = 1;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- int recvok=PAMI_SUCCESS, recvcontinuous=0;
-
- if(sendbuf != MPI_IN_PLACE)
- {
- MPIDI_Datatype_get_info(sendcount, sendtype, snd_contig,
- send_size, data_ptr, send_true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_GATHERV_INT, 64, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Gatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- sbuf = (char *)sendbuf + send_true_lb;
- if(!snd_contig)
- {
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- DLOOP_Offset last = send_size;
- MPID_Segment_init(sendbuf, sendcount, sendtype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, snd_noncontig_buff);
- }
- }
- else
- {
- MPIDI_Datatype_get_info(1, recvtype, rcv_contig,
- rcvlen, data_ptr, recv_true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_GATHERV_INT, 64, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Gatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
- }
-
- pami_xfer_t gatherv;
- rbuf = (char *)recvbuf + recv_true_lb;
- rcounts = (int*)recvcounts;
- rdispls = (int*)displs;
- if(rank == root)
- {
- if((recvok = MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp)) != MPI_SUCCESS)
- {
- MPIDI_Datatype_get_info(1, recvtype, rcv_contig,
- rcvlen, data_ptr, recv_true_lb);
- totalrecvcount = recvcounts[0];
- recvcontinuous = displs[0] == 0? 1 : 0 ;
- rcounts = (int*)MPIU_Malloc(size);
- rdispls = (int*)MPIU_Malloc(size);
- rdispls[0] = 0;
- rcounts[0] = rcvlen * recvcounts[0];
- for(i = 1; i < size; i++)
- {
- rdispls[i]= rcvlen * totalrecvcount;
- totalrecvcount += recvcounts[i];
- if(displs[i] != (displs[i-1] + recvcounts[i-1]))
- recvcontinuous = 0;
- rcounts[i] = rcvlen * recvcounts[i];
- }
- recv_size = rcvlen * totalrecvcount;
-
- rcv_noncontig_buff = MPIU_Malloc(recv_size);
- rbuf = rcv_noncontig_buff;
- rtype = PAMI_TYPE_BYTE;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- if(sendbuf == MPI_IN_PLACE)
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- MPIR_Localcopy(recvbuf + displs[rank]*extent, recvcounts[rank], recvtype,
- rcv_noncontig_buff + rdispls[rank], rcounts[rank],MPI_CHAR);
- }
- }
- if(sendbuf == MPI_IN_PLACE)
- {
- gatherv.cmd.xfer_gatherv_int.sndbuf = PAMI_IN_PLACE;
- }
- else
- {
- gatherv.cmd.xfer_gatherv_int.sndbuf = sbuf;
- }
- gatherv.cmd.xfer_gatherv_int.stype = PAMI_TYPE_BYTE;/* stype is ignored when sndbuf == PAMI_IN_PLACE */
- gatherv.cmd.xfer_gatherv_int.stypecount = send_size;
-
- }
- else
- {
- gatherv.cmd.xfer_gatherv_int.sndbuf = sbuf;
- gatherv.cmd.xfer_gatherv_int.stype = PAMI_TYPE_BYTE;
- gatherv.cmd.xfer_gatherv_int.stypecount = send_size;
- }
-
-
- gatherv.cb_done = cb_gatherv;
- gatherv.cookie = (void *)&gatherv_active;
- gatherv.cmd.xfer_gatherv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- gatherv.cmd.xfer_gatherv_int.rcvbuf = rbuf;
- gatherv.cmd.xfer_gatherv_int.rtype = rtype;
- gatherv.cmd.xfer_gatherv_int.rtypecounts = (int *) rcounts;
- gatherv.cmd.xfer_gatherv_int.rdispls = (int *) rdispls;
-
-
- const pami_metadata_t *my_gatherv_md;
-
- gatherv.algorithm = mpid->coll_algorithm[PAMI_XFER_GATHERV_INT][0][0];
- my_gatherv_md = &mpid->coll_metadata[PAMI_XFER_GATHERV_INT][0][0];
-
- MPIDI_Update_last_algorithm(comm_ptr, my_gatherv_md->name);
-
- MPIDI_Post_coll_t gatherv_post;
- TRACE_ERR("%s gatherv\n", MPIDI_Process.context_post.active>0?"Posting":"Invoking");
- MPIDI_Context_post(MPIDI_Context[0], &gatherv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&gatherv);
- TRACE_ERR("Gatherv %s\n", MPIDI_Process.context_post.active>0?"posted":"invoked");
-
- TRACE_ERR("Waiting on active %d\n", gatherv_active);
- MPID_PROGRESS_WAIT_WHILE(gatherv_active);
-
- if(!rcv_contig || recvok != PAMI_SUCCESS)
- {
- if(recvcontinuous)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size, MPI_CHAR,
- recvbuf, totalrecvcount, recvtype);
- }
- else
- {
- size_t extent;
- MPID_Datatype_get_extent_macro(recvtype,extent);
- for(i=0; i<size; ++i)
- {
- char* scbuf = (char*)rcv_noncontig_buff+ rdispls[i];
- char* rcbuf = (char*)recvbuf + displs[i]*extent;
- MPIR_Localcopy(scbuf, rcounts[i], MPI_CHAR,
- rcbuf, recvcounts[i], recvtype);
- TRACE_ERR("Pack recv src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)precvdispls[i],(size_t)i,(size_t)precvcounts[i],(size_t)precvdispls[i], *(int*)scbuf);
- TRACE_ERR("Pack recv dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
- (size_t)extent, (size_t)i,(size_t)displs[i],(size_t)i,(size_t)recvcounts[i],(size_t)displs[i], *(int*)rcbuf);
- }
-
- }
- MPIU_Free(rcv_noncontig_buff);
- if(rank == root)
- {
- MPIU_Free(rcounts);
- MPIU_Free(rdispls);
- }
- }
- if(!snd_contig) MPIU_Free(snd_noncontig_buff);
-
-
- TRACE_ERR("Leaving MPIDO_Gatherv_optimized\n");
- return MPI_SUCCESS;
-}
-
-int
-MPIDO_CSWrapper_gatherv(pami_xfer_t *gatherv,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *sbuf;
- MPIDI_coll_check_in_place(gatherv->cmd.xfer_gatherv_int.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( gatherv->cmd.xfer_gatherv_int.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- if(gatherv->cmd.xfer_gatherv_int.rtype == PAMI_TYPE_NULL)
- recvtype = MPI_DATATYPE_NULL;
- else
- rc = MPIDI_Dtpami_to_dtmpi( gatherv->cmd.xfer_gatherv_int.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Gatherv(sbuf,
- gatherv->cmd.xfer_gatherv_int.stypecount, sendtype,
- gatherv->cmd.xfer_gatherv_int.rcvbuf,
- gatherv->cmd.xfer_gatherv_int.rtypecounts,
- gatherv->cmd.xfer_gatherv_int.rdispls, recvtype,
- gatherv->cmd.xfer_gatherv_int.root, comm_ptr, &mpierrno);
- if(gatherv->cb_done && rc == 0)
- gatherv->cb_done(NULL, gatherv->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c b/src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
deleted file mode 100644
index 6b8bdce..0000000
--- a/src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/gatherv/mpido_igatherv.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-#include <mpidimpl.h>
-
-int MPIDO_Igatherv(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- const int *recvcounts,
- const int *displs,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm * comm_ptr,
- MPID_Request **request)
-
-{
- TRACE_ERR("Entering MPIDO_Igatherv\n");
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Igatherv_impl() function to invoke the mpich nbc implementation
- * of MPI_Igatherv().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Igatherv() with a blocking MPIR_Gatherv().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking gatherv algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- root, comm_ptr, &mpierrno);
-
- /*
- * The blocking gather has completed - create and complete a
- * MPID_Request object so the MPIR_Igatherv_impl() function does not
- * perform an additional igatherv.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/ired_scat/Makefile.mk b/src/mpid/pamid/src/coll/ired_scat/Makefile.mk
deleted file mode 100644
index b975ffd..0000000
--- a/src/mpid/pamid/src/coll/ired_scat/Makefile.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
-
-
-endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c b/src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
deleted file mode 100644
index d67f2d4..0000000
--- a/src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/ired_scat/mpido_ired_scat.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-#include <mpidimpl.h>
-
-int MPIDO_Ireduce_scatter(const void *sendbuf,
- void *recvbuf,
- const int *recvcounts,
- MPI_Datatype datatype,
- MPI_Op op,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- TRACE_ERR("Entering MPIDO_Ireduce_scatter\n");
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Ireduce_scatter_impl() function to invoke the mpich nbc
- * implementation of MPI_Ireduce_scatter().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ireduce_scatter() with a blocking MPIR_Reduce_scatter_block().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking reduce_scatter algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Reduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype,
- op, comm_ptr, &mpierrno);
-
- /*
- * The blocking gather has completed - create and complete a
- * MPID_Request object so the MPIR_Ireduce_scatter_impl() function
- * does not perform an additional ireduce_scatter.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk b/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk
deleted file mode 100644
index 562c719..0000000
--- a/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
-
-
-endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c b/src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
deleted file mode 100644
index a0a4fdc..0000000
--- a/src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/ired_scat_block/mpido_ired_scat_block.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-#include <mpidimpl.h>
-
-int MPIDO_Ireduce_scatter_block(const void *sendbuf,
- void *recvbuf,
- int recvcount,
- MPI_Datatype datatype,
- MPI_Op op,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- TRACE_ERR("Entering MPIDO_Ireduce_scatter_block\n");
-
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Ireduce_scatter_block_impl() function to invoke the mpich nbc
- * implementation of MPI_Ireduce_scatter_block().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ireduce_scatter_block() with a blocking MPIR_Reduce_scatter_block().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking reduce_scatter_block algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Reduce_scatter_block_impl(sendbuf, recvbuf, recvcount, datatype,
- op, comm_ptr, &mpierrno);
-
- /*
- * The blocking gather has completed - create and complete a
- * MPID_Request object so the MPIR_Ireduce_scatter_block_impl() function
- * does not perform an additional ireduce_scatter_block.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/red_scat/Makefile.mk b/src/mpid/pamid/src/coll/red_scat/Makefile.mk
deleted file mode 100644
index a95beaf..0000000
--- a/src/mpid/pamid/src/coll/red_scat/Makefile.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c b/src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c
deleted file mode 100644
index 55870a8..0000000
--- a/src/mpid/pamid/src/coll/red_scat/mpido_red_scat.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/red_scat/mpido_red_scat.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-#include <mpidimpl.h>
-
-
-int MPIDO_Reduce_scatter(const void *sendbuf,
- void *recvbuf,
- int *recvcounts,
- MPI_Datatype datatype,
- MPI_Op op,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-
-{
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH reduce_scatter algorithm\n");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint dt_extent;
- MPID_Datatype_get_extent_macro(datatype, dt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- int i;
- size_t total_buf = 0;
- for(i = 0; i < size; i++)
- {
- total_buf += recvcounts[i];
- }
-
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(dt_extent * total_buf);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, dt_extent * total_buf, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
-
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(total_buf * dt_extent);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, dt_extent * total_buf, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, total_buf * dt_extent);
- }
- else
- rcbuf = recvbuf;
-
- int cuda_res = MPIR_Reduce_scatter(scbuf, rcbuf, recvcounts, datatype, op, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, dt_extent * total_buf, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, mpierrno);
-
-}
-
-
-
-int MPIDO_Reduce_scatter_block(const void *sendbuf,
- void *recvbuf,
- int recvcount,
- MPI_Datatype datatype,
- MPI_Op op,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-
-{
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH reduce_scatter algorithm\n");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint dt_extent;
- MPID_Datatype_get_extent_macro(datatype, dt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- int i;
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(dt_extent * recvcount * size);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, dt_extent * recvcount * size, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s recvbuf: %p scbuf: %p is_send_dev_buf: %d is_recv_dev_buf: %p sendbuf: %p\n", CudaGetErrorString(cudaerr), recvbuf, scbuf, is_send_dev_buf,is_recv_dev_buf, sendbuf );
- }
- else
- scbuf = sendbuf;
-
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(dt_extent * recvcount * size);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, dt_extent * recvcount * size, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, recvcount * size * dt_extent);
- }
- else
- rcbuf = recvbuf;
-
- int cuda_res;
- if(comm_ptr->comm_kind == MPID_INTRACOMM)
- cuda_res = MPIR_Reduce_scatter_block_intra(scbuf, rcbuf, recvcount, datatype, op, comm_ptr, mpierrno);
- else
- cuda_res = MPIR_Reduce_scatter_block_inter(scbuf, rcbuf, recvcount, datatype, op, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, dt_extent * recvcount * size, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s recvbuf: %p rcbuf: %p is_send_dev_buf: %d is_recv_dev_buf: %p sendbuf: %p\n", CudaGetErrorString(cudaerr), recvbuf, rcbuf, is_send_dev_buf,is_recv_dev_buf, sendbuf );
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- if(comm_ptr->comm_kind == MPID_INTRACOMM)
- return MPIR_Reduce_scatter_block_intra(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, mpierrno);
- else
- return MPIR_Reduce_scatter_block_inter(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, mpierrno);
-
-}
-
-
diff --git a/src/mpid/pamid/src/coll/reduce/Makefile.mk b/src/mpid/pamid/src/coll/reduce/Makefile.mk
deleted file mode 100644
index c962c91..0000000
--- a/src/mpid/pamid/src/coll/reduce/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/reduce/mpido_reduce.c \
- src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/reduce/mpido_ireduce.c b/src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
deleted file mode 100644
index 63e178d..0000000
--- a/src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/gather/mpido_ireduce.c
- * \brief ???
- */
-
-/*#define TRACE_ON*/
-#include <mpidimpl.h>
-
-int MPIDO_Ireduce(const void *sendbuf,
- void *recvbuf,
- int count,
- MPI_Datatype datatype,
- MPI_Op op,
- int root,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-
-{
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Ireduce_impl() function to invoke the mpich nbc
- * implementation of MPI_Ireduce().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Ireduce() with a blocking MPIR_Reduce().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking reduce_algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype,
- op, root, comm_ptr, &mpierrno);
-
- /*
- * The blocking reduce has completed - create and complete a
- * MPID_Request object so the MPIR_Ireduce_impl() function
- * does not perform an additional ireduce.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/reduce/mpido_reduce.c b/src/mpid/pamid/src/coll/reduce/mpido_reduce.c
deleted file mode 100644
index 1ef45fb..0000000
--- a/src/mpid/pamid/src/coll/reduce/mpido_reduce.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/gather/mpido_reduce.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-#include <mpidimpl.h>
-
-static void reduce_cb_done(void *ctxt, void *clientdata, pami_result_t err)
-{
- unsigned *active = (unsigned *)clientdata;
- TRACE_ERR("cb_reduce enter, active: %u\n", (*active));
- (*active)--;
-}
-
-int MPIDO_Reduce(const void *sendbuf,
- void *recvbuf,
- int count,
- MPI_Datatype datatype,
- MPI_Op op,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype *dt_null = NULL;
- MPI_Aint true_lb = 0;
- int dt_contig ATTRIBUTE((unused)), tsize;
- int mu;
- char *sbuf, *rbuf;
- pami_data_function pop;
- pami_type_t pdt;
- int rc;
- int alg_selected = 0;
- const int rank = comm_ptr->rank;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_REDUCE];
-
- rc = MPIDI_Datatype_to_pami(datatype, &pdt, op, &pop, &mu);
- if(unlikely(verbose))
- fprintf(stderr,"reduce - rc %u, root %u, count %d, dt: %p, op: %p, mu: %u, selectedvar %u != %u (MPICH) sendbuf %p, recvbuf %p\n",
- rc, root, count, pdt, pop, mu,
- (unsigned)selected_type, MPID_COLL_USE_MPICH,sendbuf, recvbuf);
-
- pami_xfer_t reduce;
- pami_algorithm_t my_reduce=0;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
- volatile unsigned reduce_active = 1;
-
- MPIDI_Datatype_get_info(count, datatype, dt_contig, tsize, dt_null, true_lb);
- rbuf = (char *)recvbuf + true_lb;
- sbuf = (char *)sendbuf + true_lb;
- if(sendbuf == MPI_IN_PLACE)
- {
- if(unlikely(verbose))
- fprintf(stderr,"reduce MPI_IN_PLACE send buffering (%d,%d)\n",count,tsize);
- sbuf = PAMI_IN_PLACE;
- }
-
- reduce.cb_done = reduce_cb_done;
- reduce.cookie = (void *)&reduce_active;
- if(mpid->optreduce) /* GLUE_ALLREDUCE */
- {
- char* tbuf = NULL;
- if(unlikely(verbose))
- fprintf(stderr,"Using protocol GLUE_ALLREDUCE for reduce (%d,%d)\n",count,tsize);
- MPIDI_Update_last_algorithm(comm_ptr, "REDUCE_OPT_ALLREDUCE");
- void *destbuf = recvbuf;
- if(rank != root) /* temp buffer for non-root destbuf */
- {
- tbuf = destbuf = MPIU_Malloc(tsize);
- }
- /* Switch to comm->coll_fns->fn() */
- MPIDO_Allreduce(sendbuf,
- destbuf,
- count,
- datatype,
- op,
- comm_ptr,
- mpierrno);
- if(tbuf)
- MPIU_Free(tbuf);
- return 0;
- }
- if(selected_type == MPID_COLL_USE_MPICH || rc != MPI_SUCCESS)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH reduce algorithm\n");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint dt_extent;
- MPID_Datatype_get_extent_macro(datatype, dt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(dt_extent * count);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, dt_extent * count, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(dt_extent * count);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, dt_extent * count, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, dt_extent * count);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Reduce(scbuf, rcbuf, count, datatype, op, root, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, dt_extent * count, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, mpierrno);
- }
-
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- if((mpid->cutoff_size[PAMI_XFER_REDUCE][0] == 0) ||
- (mpid->cutoff_size[PAMI_XFER_REDUCE][0] >= tsize && mpid->cutoff_size[PAMI_XFER_REDUCE][0] > 0))
- {
- TRACE_ERR("Optimized Reduce (%s) was pre-selected\n",
- mpid->opt_protocol_md[PAMI_XFER_REDUCE][0].name);
- my_reduce = mpid->opt_protocol[PAMI_XFER_REDUCE][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_REDUCE][0];
- queryreq = mpid->must_query[PAMI_XFER_REDUCE][0];
- }
-
- }
- else
- {
- TRACE_ERR("Optimized reduce (%s) was specified by user\n",
- mpid->user_metadata[PAMI_XFER_REDUCE].name);
- my_reduce = mpid->user_selected[PAMI_XFER_REDUCE];
- my_md = &mpid->user_metadata[PAMI_XFER_REDUCE];
- queryreq = selected_type;
- }
- reduce.algorithm = my_reduce;
- reduce.cmd.xfer_reduce.sndbuf = sbuf;
- reduce.cmd.xfer_reduce.rcvbuf = rbuf;
- reduce.cmd.xfer_reduce.stype = pdt;
- reduce.cmd.xfer_reduce.rtype = pdt;
- reduce.cmd.xfer_reduce.stypecount = count;
- reduce.cmd.xfer_reduce.rtypecount = count;
- reduce.cmd.xfer_reduce.op = pop;
- reduce.cmd.xfer_reduce.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
-
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("Querying reduce protocol %s, type was %d\n",
- my_md->name,
- queryreq);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
- if(my_md->check_correct.values.rangeminmax)
- {
- MPI_Aint data_true_lb ATTRIBUTE((unused));
- MPID_Datatype *data_ptr;
- int data_size, data_contig ATTRIBUTE((unused));
- MPIDI_Datatype_get_info(count, datatype, data_contig, data_size, data_ptr, data_true_lb);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ; /* ok, algorithm selected */
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&reduce);
- TRACE_ERR("Bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH reduce.\n",
- my_md->name);
- }
- else
- {
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- alg_selected = 1;
- }
- }
-
- if(alg_selected)
- {
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for reduce on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
- MPIDI_Post_coll_t reduce_post;
- MPIDI_Context_post(MPIDI_Context[0], &reduce_post.state,
- MPIDI_Pami_post_wrapper, (void *)&reduce);
- }
- else
- {
- MPIDI_Update_last_algorithm(comm_ptr, "REDUCE_MPICH");
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH reduce algorithm\n");
- return MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, mpierrno);
- }
-
- MPIDI_Update_last_algorithm(comm_ptr,
- my_md->name);
- MPID_PROGRESS_WAIT_WHILE(reduce_active);
- TRACE_ERR("Reduce done\n");
- return 0;
-}
-
-
-int MPIDO_Reduce_simple(const void *sendbuf,
- void *recvbuf,
- int count,
- MPI_Datatype datatype,
- MPI_Op op,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype *dt_null = NULL;
- MPI_Aint true_lb = 0;
- int dt_contig, tsize;
- int mu;
- char *sbuf, *rbuf;
- pami_data_function pop;
- pami_type_t pdt;
- int rc;
- const int rank = comm_ptr->rank;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
-
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-
- MPIDI_Datatype_get_info(count, datatype, dt_contig, tsize, dt_null, true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_REDUCE, tsize, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", advisor_algorithms[0].metadata->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- rc = MPIDI_Datatype_to_pami(datatype, &pdt, op, &pop, &mu);
-
- pami_xfer_t reduce;
- const pami_metadata_t *my_reduce_md=NULL;
- volatile unsigned reduce_active = 1;
-
- if(rc != MPI_SUCCESS || !dt_contig)
- {
- return MPIR_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, mpierrno);
- }
-
-
- rbuf = (char *)recvbuf + true_lb;
- sbuf = (char *)sendbuf + true_lb;
- if(sendbuf == MPI_IN_PLACE)
- {
- sbuf = PAMI_IN_PLACE;
- }
-
- reduce.cb_done = reduce_cb_done;
- reduce.cookie = (void *)&reduce_active;
- reduce.algorithm = mpid->coll_algorithm[PAMI_XFER_REDUCE][0][0];
- reduce.cmd.xfer_reduce.sndbuf = sbuf;
- reduce.cmd.xfer_reduce.rcvbuf = rbuf;
- reduce.cmd.xfer_reduce.stype = pdt;
- reduce.cmd.xfer_reduce.rtype = pdt;
- reduce.cmd.xfer_reduce.stypecount = count;
- reduce.cmd.xfer_reduce.rtypecount = count;
- reduce.cmd.xfer_reduce.op = pop;
- reduce.cmd.xfer_reduce.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- my_reduce_md = &mpid->coll_metadata[PAMI_XFER_REDUCE][0][0];
-
- TRACE_ERR("%s reduce, context %d, algoname: %s, exflag: %d\n", MPIDI_Process.context_post.active>0?"Posting":"Invoking", 0,
- my_reduce_md->name, exflag);
- MPIDI_Post_coll_t reduce_post;
- MPIDI_Context_post(MPIDI_Context[0], &reduce_post.state,
- MPIDI_Pami_post_wrapper, (void *)&reduce);
- TRACE_ERR("Reduce %s\n", MPIDI_Process.context_post.active>0?"posted":"invoked");
-
- MPIDI_Update_last_algorithm(comm_ptr,
- my_reduce_md->name);
- MPID_PROGRESS_WAIT_WHILE(reduce_active);
- TRACE_ERR("Reduce done\n");
- return MPI_SUCCESS;
-}
-
-
-int
-MPIDO_CSWrapper_reduce(pami_xfer_t *reduce,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype type;
- MPI_Op op;
- void *sbuf;
- MPIDI_coll_check_in_place(reduce->cmd.xfer_reduce.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( reduce->cmd.xfer_reduce.stype,
- &type,
- reduce->cmd.xfer_reduce.op,
- &op);
- if(rc == -1) return rc;
-
-
- rc = MPIR_Reduce(sbuf,
- reduce->cmd.xfer_reduce.rcvbuf,
- reduce->cmd.xfer_reduce.rtypecount, type, op,
- reduce->cmd.xfer_reduce.root, comm_ptr, &mpierrno);
- if(reduce->cb_done && rc == 0)
- reduce->cb_done(NULL, reduce->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/scan/Makefile.mk b/src/mpid/pamid/src/coll/scan/Makefile.mk
deleted file mode 100644
index 88a44e0..0000000
--- a/src/mpid/pamid/src/coll/scan/Makefile.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/scan/mpido_scan.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/scan/mpido_scan.c b/src/mpid/pamid/src/coll/scan/mpido_scan.c
deleted file mode 100644
index 40c56ea..0000000
--- a/src/mpid/pamid/src/coll/scan/mpido_scan.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/gather/mpido_scan.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-#include <mpidimpl.h>
-
-static void scan_cb_done(void *ctxt, void *clientdata, pami_result_t err)
-{
- unsigned *active = (unsigned *)clientdata;
- TRACE_ERR("cb_scan enter, active: %u\n", (*active));
- (*active)--;
-}
-int MPIDO_Doscan(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno, int exflag);
-
-
-int MPIDO_Scan(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno)
-{
- return MPIDO_Doscan(sendbuf, recvbuf, count, datatype,
- op, comm_ptr, mpierrno, 0);
-}
-
-int MPIDO_Iscan(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request)
-{
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Iscan_impl() function to invoke the mpich nbc
- * implementation of MPI_Iscan().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Iscan() with a blocking MPIR_Scan().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking scan_algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Scan_impl(sendbuf, recvbuf, count, datatype,
- op, comm_ptr, &mpierrno);
-
- /*
- * The blocking scan has completed - create and complete a
- * MPID_Request object so the MPIR_Iscan_impl() function
- * does not perform an additional iscan.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
-
-int MPIDO_Exscan(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno)
-{
- return MPIDO_Doscan(sendbuf, recvbuf, count, datatype,
- op, comm_ptr, mpierrno, 1);
-}
-
-int MPIDO_Doscan(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno, int exflag)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype *dt_null = NULL;
- MPI_Aint true_lb = 0;
- int dt_contig ATTRIBUTE((unused)), tsize ATTRIBUTE((unused));
- int mu;
- char *sbuf, *rbuf;
- pami_data_function pop;
- pami_type_t pdt;
- int rc;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- int queryreq = 0;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (comm_ptr->rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_SCAN];
-
- rc = MPIDI_Datatype_to_pami(datatype, &pdt, op, &pop, &mu);
- if(unlikely(verbose))
- fprintf(stderr,"rc %u, dt: %p, op: %p, mu: %u, selectedvar %u != %u (MPICH)\n",
- rc, pdt, pop, mu,
- (unsigned)selected_type, MPID_COLL_USE_MPICH);
-
- pami_xfer_t scan;
- volatile unsigned scan_active = 1;
-
- if((selected_type == MPID_COLL_USE_MPICH || rc != MPI_SUCCESS))
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH scan algorithm (exflag %d)\n",exflag);
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint dt_extent;
- MPID_Datatype_get_extent_macro(datatype, dt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = MPIDI_cuda_is_device_buf(sendbuf);
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(dt_extent * count);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, dt_extent * count, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(dt_extent * count);
- if(sendbuf == MPI_IN_PLACE)
- {
- cudaError_t cudaerr = CudaMemcpy(rcbuf, recvbuf, dt_extent * count, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- memset(rcbuf, 0, dt_extent * count);
- }
- else
- rcbuf = recvbuf;
- int cuda_res;
- if(exflag)
- cuda_res = MPIR_Exscan(scbuf, rcbuf, count, datatype, op, comm_ptr, mpierrno);
- else
- cuda_res = MPIR_Scan(scbuf, rcbuf, count, datatype, op, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, dt_extent * count, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- if(exflag)
- return MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- else
- return MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- }
-
- MPIDI_Datatype_get_info(count, datatype, dt_contig, tsize, dt_null, true_lb);
- rbuf = (char *)recvbuf + true_lb;
- if(sendbuf == MPI_IN_PLACE)
- {
- if(unlikely(verbose))
- fprintf(stderr,"scan MPI_IN_PLACE buffering\n");
- sbuf = PAMI_IN_PLACE;
- }
- else
- {
- sbuf = (char *)sendbuf + true_lb;
- }
-
- scan.cb_done = scan_cb_done;
- scan.cookie = (void *)&scan_active;
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- scan.algorithm = mpid->opt_protocol[PAMI_XFER_SCAN][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_SCAN][0];
- queryreq = mpid->must_query[PAMI_XFER_SCAN][0];
- }
- else
- {
- scan.algorithm = mpid->user_selected[PAMI_XFER_SCAN];
- my_md = &mpid->user_metadata[PAMI_XFER_SCAN];
- queryreq = selected_type;
- }
- scan.cmd.xfer_scan.sndbuf = sbuf;
- scan.cmd.xfer_scan.rcvbuf = rbuf;
- scan.cmd.xfer_scan.stype = pdt;
- scan.cmd.xfer_scan.rtype = pdt;
- scan.cmd.xfer_scan.stypecount = count;
- scan.cmd.xfer_scan.rtypecount = count;
- scan.cmd.xfer_scan.op = pop;
- scan.cmd.xfer_scan.exclusive = exflag;
-
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("Querying scan protocol %s, type was %d\n",
- my_md->name,
- selected_type);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (sendbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
- if(my_md->check_correct.values.rangeminmax)
- {
- MPI_Aint data_true_lb ATTRIBUTE((unused));
- MPID_Datatype *data_ptr;
- int data_size ATTRIBUTE((unused)), data_contig ATTRIBUTE((unused));
- MPIDI_Datatype_get_info(count, datatype, data_contig, data_size, data_ptr, data_true_lb);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ; /* ok, algorithm selected */
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&scan);
- TRACE_ERR("Bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH scan\n",
- my_md->name);
- MPIDI_Update_last_algorithm(comm_ptr, "SCAN_MPICH");
- if(exflag)
- return MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- else
- return MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for scan on %u (exflag %d)\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id,
- exflag);
- }
- MPIDI_Post_coll_t scan_post;
- MPIDI_Context_post(MPIDI_Context[0], &scan_post.state,
- MPIDI_Pami_post_wrapper, (void *)&scan);
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
- MPID_PROGRESS_WAIT_WHILE(scan_active);
- TRACE_ERR("Scan done\n");
- return rc;
-}
-
-
-int MPIDO_Doscan_simple(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno, int exflag)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype *dt_null = NULL;
- MPI_Aint true_lb = 0;
- int dt_contig, tsize;
- int mu;
- char *sbuf, *rbuf;
- pami_data_function pop;
- pami_type_t pdt;
- int rc;
- const pami_metadata_t *my_md;
-
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-
- pami_xfer_t scan;
- volatile unsigned scan_active = 1;
- MPIDI_Datatype_get_info(count, datatype, dt_contig, tsize, dt_null, true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_SCAN, tsize, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- if(exflag)
- return MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- else
- return MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
- }
-
- rc = MPIDI_Datatype_to_pami(datatype, &pdt, op, &pop, &mu);
-
- if(rc != MPI_SUCCESS || !dt_contig)
- {
- if(exflag)
- return MPIR_Exscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- else
- return MPIR_Scan(sendbuf, recvbuf, count, datatype, op, comm_ptr, mpierrno);
- }
-
-
- rbuf = (char *)recvbuf + true_lb;
- if(sendbuf == MPI_IN_PLACE)
- {
- sbuf = PAMI_IN_PLACE;
- }
- else
- {
- sbuf = (char *)sendbuf + true_lb;
- }
-
- scan.cb_done = scan_cb_done;
- scan.cookie = (void *)&scan_active;
- scan.algorithm = mpid->coll_algorithm[PAMI_XFER_SCAN][0][0];
- my_md = &mpid->coll_metadata[PAMI_XFER_SCAN][0][0];
- scan.cmd.xfer_scan.sndbuf = sbuf;
- scan.cmd.xfer_scan.rcvbuf = rbuf;
- scan.cmd.xfer_scan.stype = pdt;
- scan.cmd.xfer_scan.rtype = pdt;
- scan.cmd.xfer_scan.stypecount = count;
- scan.cmd.xfer_scan.rtypecount = count;
- scan.cmd.xfer_scan.op = pop;
- scan.cmd.xfer_scan.exclusive = exflag;
-
- MPIDI_Post_coll_t scan_post;
- MPIDI_Context_post(MPIDI_Context[0], &scan_post.state,
- MPIDI_Pami_post_wrapper, (void *)&scan);
- TRACE_ERR("Scan %s\n", MPIDI_Process.context_post.active>0?"posted":"invoked");
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
- MPID_PROGRESS_WAIT_WHILE(scan_active);
- TRACE_ERR("Scan done\n");
- return rc;
-}
-
-
-int MPIDO_Exscan_simple(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno)
-{
- return MPIDO_Doscan_simple(sendbuf, recvbuf, count, datatype,
- op, comm_ptr, mpierrno, 1);
-}
-
-int MPIDO_Scan_simple(const void *sendbuf, void *recvbuf,
- int count, MPI_Datatype datatype,
- MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno)
-{
- return MPIDO_Doscan_simple(sendbuf, recvbuf, count, datatype,
- op, comm_ptr, mpierrno, 0);
-}
-
-int
-MPIDO_CSWrapper_scan(pami_xfer_t *scan,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype type;
- MPI_Op op;
- void *sbuf;
- MPIDI_coll_check_in_place(scan->cmd.xfer_scan.sndbuf, &sbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( scan->cmd.xfer_scan.stype,
- &type,
- scan->cmd.xfer_scan.op,
- &op);
- if(rc == -1) return rc;
-
- if(scan->cmd.xfer_scan.exclusive)
- rc = MPIR_Exscan(sbuf,
- scan->cmd.xfer_scan.rcvbuf,
- scan->cmd.xfer_scan.rtypecount, type, op,
- comm_ptr, &mpierrno);
- else
- rc = MPIR_Scan(sbuf,
- scan->cmd.xfer_scan.rcvbuf,
- scan->cmd.xfer_scan.rtypecount, type, op,
- comm_ptr, &mpierrno);
- if(scan->cb_done && rc == 0)
- scan->cb_done(NULL, scan->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
diff --git a/src/mpid/pamid/src/coll/scatter/Makefile.mk b/src/mpid/pamid/src/coll/scatter/Makefile.mk
deleted file mode 100644
index 9cf6067..0000000
--- a/src/mpid/pamid/src/coll/scatter/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/scatter/mpido_scatter.c \
- src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/scatter/mpido_iscatter.c b/src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
deleted file mode 100644
index f13a192..0000000
--- a/src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/scatter/mpido_iscatter.c
- * \brief ???
- */
-
-/*#define TRACE_ON */
-
-#include <mpidimpl.h>
-
-int MPIDO_Iscatter(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Iscatter_impl() function to invoke the mpich nbc
- * implementation of MPI_Iscatter().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Iscatter() with a blocking MPIR_Scatter().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking scatter_algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Scatter_impl(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, &mpierrno);
-
- /*
- * The blocking scatter has completed - create and complete a
- * MPID_Request object so the MPIR_Iscatter_impl() function
- * does not perform an additional iscatter.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/scatter/mpido_scatter.c b/src/mpid/pamid/src/coll/scatter/mpido_scatter.c
deleted file mode 100644
index e36ea27..0000000
--- a/src/mpid/pamid/src/coll/scatter/mpido_scatter.c
+++ /dev/null
@@ -1,591 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/scatter/mpido_scatter.c
- * \brief ???
- */
-
-/* #define TRACE_ON */
-
-#include <mpidimpl.h>
-
-static void cb_scatter(void *ctxt, void *clientdata, pami_result_t err)
-{
- unsigned *active = (unsigned *)clientdata;
- TRACE_ERR("cb_scatter enter, active: %u\n", (*active));
- MPIDI_Progress_signal();
- (*active)--;
-}
-
-/* works for simple data types, assumes fast bcast is available */
-int MPIDO_Scatter_bcast(void * sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
- /* Pretty simple - bcast a temp buffer and copy our little chunk out */
- int nbytes, rc;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
- char *tempbuf = NULL;
-
- if(rank == root)
- {
- MPIDI_Datatype_get_data_size(sendcount,
- sendtype,
- nbytes);
- tempbuf = sendbuf;
- }
- else
- {
- MPIDI_Datatype_get_data_size(recvcount,
- recvtype,
- nbytes);
-
- tempbuf = MPIU_Malloc(nbytes * size);
- if(!tempbuf)
- {
- return MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- __FUNCTION__,
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem", 0);
- }
- }
-
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Bcast(tempbuf, nbytes*size, MPI_CHAR, root, comm_ptr, mpierrno);
-
- if(rank == root && recvbuf == MPI_IN_PLACE)
- return rc;
- else
- memcpy(recvbuf, tempbuf+(rank*nbytes), nbytes);
-
- if (rank!=root)
- MPIU_Free(tempbuf);
-
- return rc;
-}
-
-
-int MPIDO_Scatter(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype * data_ptr;
- MPI_Aint true_lb ATTRIBUTE((unused));
- int contig, nbytes ATTRIBUTE((unused));
- const int rank = comm_ptr->rank;
- int success = 1;
- pami_type_t stype, rtype;
- int tmp;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_SCATTER];
- char use_pami = !(selected_type == MPID_COLL_USE_MPICH);
-
- /* if (rank == root)
- We can't decide on just the root to use MPICH. Really need a pre-allreduce.
- For now check sendtype on non-roots too and hope it matches? I think that's what
- scatterv does... */
- {
- if(MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS)
- use_pami = 0;
- }
- if(recvbuf != MPI_IN_PLACE && (MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS))
- use_pami = 0;
-
- if(!use_pami)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH scatter algorithm\n");
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTER_MPICH");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint sdt_extent,rdt_extent;
- MPID_Datatype_get_extent_macro(sendtype, sdt_extent);
- MPID_Datatype_get_extent_macro(recvtype, rdt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = (rank == root) ? MPIDI_cuda_is_device_buf(sendbuf) : 0;
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- scbuf = MPIU_Malloc(sdt_extent * sendcount);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, sdt_extent * sendcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(rdt_extent * recvcount);
- CudaMemcpy(rcbuf, recvbuf, rdt_extent * recvcount, cudaMemcpyDeviceToHost);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Scatter(scbuf, sendcount, sendtype, rcbuf, recvcount, recvtype, root, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, rdt_extent * recvcount, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Scatter(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
-
- if (rank == root)
- {
- if (recvtype != MPI_DATATYPE_NULL && recvcount >= 0)/* Should this be send or recv? */
- {
- MPIDI_Datatype_get_info(sendcount, sendtype, contig,
- nbytes, data_ptr, true_lb);
- if (!contig) success = 0;
- }
- else
- success = 0;
-
- if (success)
- {
- if (recvtype != MPI_DATATYPE_NULL && recvcount >= 0)
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, contig,
- nbytes, data_ptr, true_lb);
- if (!contig) success = 0;
- }
- else success = 0;
- }
- }
-
- else
- {
- if (sendtype != MPI_DATATYPE_NULL && sendcount >= 0)/* Should this be send or recv? */
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, contig,
- nbytes, data_ptr, true_lb);
- if (!contig) success = 0;
- }
- else
- success = 0;
- }
-
-
- pami_xfer_t scatter;
- MPIDI_Post_coll_t scatter_post;
- pami_algorithm_t my_scatter;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- volatile unsigned scatter_active = 1;
- int queryreq = 0;
-
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- TRACE_ERR("Optimized scatter %s was selected\n",
- mpid->opt_protocol_md[PAMI_XFER_SCATTER][0].name);
- my_scatter = mpid->opt_protocol[PAMI_XFER_SCATTER][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_SCATTER][0];
- queryreq = mpid->must_query[PAMI_XFER_SCATTER][0];
- }
- else
- {
- TRACE_ERR("Optimized scatter %s was set by user\n",
- mpid->user_metadata[PAMI_XFER_SCATTER].name);
- my_scatter = mpid->user_selected[PAMI_XFER_SCATTER];
- my_md = &mpid->user_metadata[PAMI_XFER_SCATTER];
- queryreq = selected_type;
- }
-
- scatter.algorithm = my_scatter;
- scatter.cb_done = cb_scatter;
- scatter.cookie = (void *)&scatter_active;
- scatter.cmd.xfer_scatter.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- scatter.cmd.xfer_scatter.sndbuf = (void *)sendbuf;
- scatter.cmd.xfer_scatter.stype = stype;
- scatter.cmd.xfer_scatter.stypecount = sendcount;
- if(recvbuf == MPI_IN_PLACE)
- {
- if(unlikely(verbose))
- fprintf(stderr,"scatter MPI_IN_PLACE buffering\n");
- MPIDI_Datatype_get_info(sendcount, sendtype, contig,
- nbytes, data_ptr, true_lb);
- scatter.cmd.xfer_scatter.rcvbuf = PAMI_IN_PLACE;
- scatter.cmd.xfer_scatter.rtype = stype;
- scatter.cmd.xfer_scatter.rtypecount = sendcount;
- }
- else
- {
- scatter.cmd.xfer_scatter.rcvbuf = (void *)recvbuf;
- scatter.cmd.xfer_scatter.rtype = rtype;
- scatter.cmd.xfer_scatter.rtypecount = recvcount;
- }
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying scatter protoocl %s, type was %d\n",
- my_md->name, queryreq);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (recvbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
- if(my_md->check_correct.values.rangeminmax)
- {
- int data_size;
- if(rank == root)
- MPIDI_Datatype_get_data_size(sendcount, sendtype, data_size);
- else
- MPIDI_Datatype_get_data_size(recvcount, recvtype, data_size);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ; /* ok, algorithm selected */
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&scatter);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"query failed for %s\n", my_md->name);
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTER_MPICH");
- return MPIR_Scatter(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for scatter on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
- MPIDI_Context_post(MPIDI_Context[0], &scatter_post.state,
- MPIDI_Pami_post_wrapper, (void *)&scatter);
- TRACE_ERR("Waiting on active %d\n", scatter_active);
- MPID_PROGRESS_WAIT_WHILE(scatter_active);
-
-
- TRACE_ERR("Leaving MPIDO_Scatter\n");
-
- return 0;
-}
-
-
-int MPIDO_Scatter_simple(const void *sendbuf,
- int sendcount,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- MPID_Datatype * data_ptr;
- const int rank = comm_ptr->rank;
- int success = 1, snd_contig = 1, rcv_contig = 1;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- void *sbuf = NULL, *rbuf = NULL;
- size_t send_size = 0, recv_size = 0, data_size = 0;
- MPI_Aint snd_true_lb = 0, rcv_true_lb = 0;
- MPID_Segment segment;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int size = comm_ptr->local_size;
- advisor_algorithm_t advisor_algorithms[1];
-
- if (rank == root)
- {
- MPIDI_Datatype_get_info(sendcount, sendtype, snd_contig,
- send_size, data_ptr, snd_true_lb);
-
- if (recvbuf != MPI_IN_PLACE && recvtype != MPI_DATATYPE_NULL && recvcount >= 0)
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, rcv_contig,
- recv_size, data_ptr, rcv_true_lb);
- }
- data_size = send_size;
- }
- else if (recvtype != MPI_DATATYPE_NULL && recvcount >= 0)
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, rcv_contig,
- recv_size, data_ptr, rcv_true_lb);
- data_size = recv_size;
- }
-
- advisor_algorithms[0].metadata = NULL;/* We check for NULL further down */
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query,
- PAMI_XFER_SCATTER, data_size, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Scatter(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- }
- }
- sbuf = (char *)sendbuf + snd_true_lb;
- rbuf = (char *)recvbuf + rcv_true_lb;
- if (rank == root)
- {
- if (send_size)
- {
- if (!snd_contig)
- {
- snd_noncontig_buff = MPIU_Malloc(send_size * size);
- sbuf = snd_noncontig_buff;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- DLOOP_Offset last = send_size * size;
- MPID_Segment_init(sendbuf, sendcount * size, sendtype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, snd_noncontig_buff);
- }
- }
- else
- success = 0;
-
- if (success && recvbuf != MPI_IN_PLACE)
- {
- if (recv_size)
- {
- if (!rcv_contig)
- {
- rcv_noncontig_buff = MPIU_Malloc(recv_size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- }
- }
- else success = 0;
- }
- }
- else
- {
- if (recv_size)/* Should this be send or recv? */
- {
- if (!rcv_contig)
- {
- rcv_noncontig_buff = MPIU_Malloc(recv_size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- }
- }
- else
- success = 0;
- }
-
- if(!success)
- {
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTER_MPICH");
- return MPIR_Scatter(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
-
- if(advisor_algorithms[0].metadata &&
- advisor_algorithms[0].metadata->check_correct.values.asyncflowctl &&
- !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
-
- pami_xfer_t scatter;
- MPIDI_Post_coll_t scatter_post;
- volatile unsigned scatter_active = 1;
-
-
- scatter.algorithm = mpid->coll_algorithm[PAMI_XFER_SCATTER][0][0];
-
- scatter.cb_done = cb_scatter;
- scatter.cookie = (void *)&scatter_active;
- scatter.cmd.xfer_scatter.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
- scatter.cmd.xfer_scatter.sndbuf = (void *)sbuf;
- scatter.cmd.xfer_scatter.stype = PAMI_TYPE_BYTE;
- scatter.cmd.xfer_scatter.stypecount = send_size;
- scatter.cmd.xfer_scatter.rcvbuf = (void *)rbuf;
- scatter.cmd.xfer_scatter.rtype = PAMI_TYPE_BYTE;/* rtype is ignored when rcvbuf == PAMI_IN_PLACE */
- scatter.cmd.xfer_scatter.rtypecount = recv_size;
-
- if(recvbuf == MPI_IN_PLACE)
- {
- scatter.cmd.xfer_scatter.rcvbuf = PAMI_IN_PLACE;
- }
-
- TRACE_ERR("%s scatter\n", MPIDI_Process.context_post.active>0?"Posting":"Invoking");
- MPIDI_Context_post(MPIDI_Context[0], &scatter_post.state,
- MPIDI_Pami_post_wrapper, (void *)&scatter);
- TRACE_ERR("Waiting on active %d\n", scatter_active);
- MPID_PROGRESS_WAIT_WHILE(scatter_active);
-
- if(!rcv_contig && rcv_noncontig_buff)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size, MPI_CHAR,
- recvbuf, recvcount, recvtype);
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_contig) MPIU_Free(snd_noncontig_buff);
-
-
- TRACE_ERR("Leaving MPIDO_Scatter_optimized\n");
-
- return MPI_SUCCESS;
-}
-
-
-int
-MPIDO_CSWrapper_scatter(pami_xfer_t *scatter,
- void *comm)
-{
- int mpierrno = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *rbuf;
- MPIDI_coll_check_in_place(scatter->cmd.xfer_scatter.rcvbuf, &rbuf);
- int rc = MPIDI_Dtpami_to_dtmpi( scatter->cmd.xfer_scatter.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIDI_Dtpami_to_dtmpi( scatter->cmd.xfer_scatter.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Scatter(scatter->cmd.xfer_scatter.sndbuf,
- scatter->cmd.xfer_scatter.stypecount, sendtype,
- rbuf,
- scatter->cmd.xfer_scatter.rtypecount, recvtype,
- scatter->cmd.xfer_scatter.root, comm_ptr, &mpierrno);
- if(scatter->cb_done && rc == 0)
- scatter->cb_done(NULL, scatter->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
-#if 0 /* old glue-based scatter-via-bcast */
-
- /* Assume glue protocol sucks for now.... Needs work if not or to enable */
-
-
-
- /* see if we all agree to use bcast scatter */
- MPIDO_Allreduce(MPI_IN_PLACE, &success, 1, MPI_INT, MPI_BAND, comm_ptr, mpierrno);
-
- if (!success)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH scatter algorithm\n");
- return MPIR_Scatter(sendbuf, sendcount, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
-
- sbuf = (char *)sendbuf+true_lb;
- rbuf = (char *)recvbuf+true_lb;
-
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTER_OPT_BCAST");
- return MPIDO_Scatter_bcast(sbuf, sendcount, sendtype,
- rbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
-#endif
diff --git a/src/mpid/pamid/src/coll/scatterv/Makefile.mk b/src/mpid/pamid/src/coll/scatterv/Makefile.mk
deleted file mode 100644
index 7e00f99..0000000
--- a/src/mpid/pamid/src/coll/scatterv/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c \
- src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c b/src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
deleted file mode 100644
index 847ac7e..0000000
--- a/src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/scatterv/mpido_iscatterv.c
- * \brief ???
- */
-
-#include <mpidimpl.h>
-
-int MPIDO_Iscatterv(const void *sendbuf,
- const int *sendcounts,
- const int *displs,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- MPID_Request **request)
-{
- /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
- {
- /*
- * If the mpich mpir non-blocking collectives are enabled, return without
- * first constructing the MPID_Request. This signals to the
- * MPIR_Iscatterv_impl() function to invoke the mpich nbc
- * implementation of MPI_Iscatterv().
- */
- if (MPIDI_Process.mpir_nbc != 0)
- return 0;
-
- /*
- * MPIR_* nbc implementation is not enabled. Fake a non-blocking
- * MPIR_Iscatterv() with a blocking MPIR_Scatterv().
- */
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
- fprintf(stderr,"Using MPICH blocking scatterv_algorithm\n");
-
- int mpierrno = 0;
- int rc = MPIR_Scatterv_impl(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, &mpierrno);
-
- /*
- * The blocking scatterv has completed - create and complete a
- * MPID_Request object so the MPIR_Iscatterv_impl() function
- * does not perform an additional iscatterv.
- */
- MPID_Request * mpid_request = MPID_Request_create_inline();
- mpid_request->kind = MPID_COLL_REQUEST;
- *request = mpid_request;
- MPIDI_Request_complete_norelease_inline(mpid_request);
-
- return rc;
- }
-
- return 0;
-}
diff --git a/src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c b/src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
deleted file mode 100644
index 213b298..0000000
--- a/src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
+++ /dev/null
@@ -1,812 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/coll/scatterv/mpido_scatterv.c
- * \brief ???
- */
-
-#include <mpidimpl.h>
-
-
-/* basically, everyone receives recvcount via bcast */
-/* requires a contiguous/continous buffer on root though */
-int MPIDO_Scatterv_bcast(void *sendbuf,
- int *sendcounts,
- int *displs,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
- char *tempbuf;
- int i, sum = 0, dtsize, rc=0;
-
- for (i = 0; i < size; i++)
- if (sendcounts > 0)
- sum += sendcounts[i];
-
- MPIDI_Datatype_get_data_size(1,
- recvtype,
- dtsize);
-
- if (rank != root)
- {
- tempbuf = MPIU_Malloc(dtsize * sum);
- if (!tempbuf)
- return MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- __FUNCTION__,
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem", 0);
- }
- else
- tempbuf = sendbuf;
-
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Bcast(tempbuf, sum, sendtype, root, comm_ptr, mpierrno);
-
- if(rank == root && recvbuf == MPI_IN_PLACE)
- return rc;
-
- memcpy(recvbuf, tempbuf + displs[rank], sendcounts[rank] * dtsize);
-
- if (rank != root)
- MPIU_Free(tempbuf);
-
- return rc;
-}
-
-/* this guy requires quite a few buffers. maybe
- * we should somehow "steal" the comm_ptr alltoall ones? */
-int MPIDO_Scatterv_alltoallv(void * sendbuf,
- int * sendcounts,
- int * displs,
- MPI_Datatype sendtype,
- void * recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm * comm_ptr,
- int *mpierrno)
-{
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-
- int *sdispls, *scounts;
- int *rdispls, *rcounts;
- char *sbuf, *rbuf;
- int rbytes;
- int rc;
-
- MPIDI_Datatype_get_data_size(recvcount,
- recvtype,
- rbytes);
-
- rbuf = MPIU_Malloc(size * rbytes * sizeof(char));
- if(!rbuf)
- {
- return MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- __FUNCTION__,
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem", 0);
- }
-
- if(rank == root)
- {
- sdispls = displs;
- scounts = sendcounts;
- sbuf = sendbuf;
- }
- else
- {
- sdispls = MPIU_Malloc(size * sizeof(int));
- scounts = MPIU_Malloc(size * sizeof(int));
- sbuf = MPIU_Malloc(rbytes * sizeof(char));
- if(!sdispls || !scounts || !sbuf)
- {
- if(sdispls)
- MPIU_Free(sdispls);
- if(scounts)
- MPIU_Free(scounts);
- return MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- __FUNCTION__,
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem", 0);
- }
- memset(sdispls, 0, size*sizeof(int));
- memset(scounts, 0, size*sizeof(int));
- }
-
- rdispls = MPIU_Malloc(size * sizeof(int));
- rcounts = MPIU_Malloc(size * sizeof(int));
- if(!rdispls || !rcounts)
- {
- if(rdispls)
- MPIU_Free(rdispls);
- return MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_RECOVERABLE,
- __FUNCTION__,
- __LINE__,
- MPI_ERR_OTHER,
- "**nomem", 0);
- }
-
- memset(rdispls, 0, size*sizeof(unsigned));
- memset(rcounts, 0, size*sizeof(unsigned));
-
- rcounts[root] = rbytes;
-
- /* Switch to comm->coll_fns->fn() */
- rc = MPIDO_Alltoallv(sbuf,
- scounts,
- sdispls,
- sendtype,
- rbuf,
- rcounts,
- rdispls,
- MPI_CHAR,
- comm_ptr,
- mpierrno);
-
- if(rank == root && recvbuf == MPI_IN_PLACE)
- {
- MPIU_Free(rbuf);
- MPIU_Free(rdispls);
- MPIU_Free(rcounts);
- return rc;
- }
- else
- {
- memcpy(recvbuf, rbuf, rbytes);
- MPIU_Free(rbuf);
- MPIU_Free(rdispls);
- MPIU_Free(rcounts);
- if(rank != root)
- {
- MPIU_Free(sbuf);
- MPIU_Free(sdispls);
- MPIU_Free(scounts);
- }
- }
-
- return rc;
-}
-
-static void cb_scatterv(void *ctxt, void *clientdata, pami_result_t err)
-{
- unsigned *active = (unsigned *)clientdata;
- TRACE_ERR("cb_scatterv enter, active: %u\n", (*active));
- (*active)--;
-}
-
-int MPIDO_Scatterv(const void *sendbuf,
- const int *sendcounts,
- const int *displs,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- int tmp, i, pamidt = 1;
- int contig ATTRIBUTE((unused));
- int ssize ATTRIBUTE((unused));
- int rsize ATTRIBUTE((unused));
- MPID_Datatype *dt_ptr = NULL;
- MPI_Aint send_true_lb=0, recv_true_lb;
- char *sbuf, *rbuf;
- pami_type_t stype, rtype;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
-#if ASSERT_LEVEL==0
- /* We can't afford the tracing in ndebug/performance libraries */
- const unsigned verbose = 0;
-#else
- const unsigned verbose = (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL) && (rank == 0);
-#endif
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
- const int selected_type = mpid->user_selected_type[PAMI_XFER_SCATTERV_INT];
-
- if(selected_type == MPID_COLL_USE_MPICH)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH scatterv algorithm\n");
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTERV_MPICH");
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- MPI_Aint sdt_extent,rdt_extent;
- MPID_Datatype_get_extent_macro(sendtype, sdt_extent);
- MPID_Datatype_get_extent_macro(recvtype, rdt_extent);
- char *scbuf = NULL;
- char *rcbuf = NULL;
- int is_send_dev_buf = (rank == root) ? MPIDI_cuda_is_device_buf(sendbuf) : 0;
- int is_recv_dev_buf = MPIDI_cuda_is_device_buf(recvbuf);
- if(is_send_dev_buf)
- {
- //Since displs can be non-continous, we need to calculate max buffer size
- int highest_displs = displs[size - 1];
- int highest_sendcount = sendcounts[size - 1];
- size_t stotal_buf;
- for(i = 0; i < size; i++)
- {
- if(displs[i]+sendcounts[i] > highest_displs+highest_sendcount)
- {
- highest_displs = displs[i];
- highest_sendcount = sendcounts[i];
- }
- }
- stotal_buf = (highest_displs+highest_sendcount)*sdt_extent;
- scbuf = MPIU_Malloc(stotal_buf);
- cudaError_t cudaerr = CudaMemcpy(scbuf, sendbuf, stotal_buf, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- }
- else
- scbuf = sendbuf;
- if(is_recv_dev_buf)
- {
- rcbuf = MPIU_Malloc(recvcount * rdt_extent);
- CudaMemcpy(rcbuf, recvbuf, recvcount * rdt_extent, cudaMemcpyDeviceToHost);
- }
- else
- rcbuf = recvbuf;
- int cuda_res = MPIR_Scatterv(scbuf, sendcounts, displs, sendtype, rcbuf, recvcount, recvtype, root, comm_ptr, mpierrno);
- if(is_send_dev_buf)MPIU_Free(scbuf);
- if(is_recv_dev_buf)
- {
- cudaError_t cudaerr = CudaMemcpy(recvbuf, rcbuf, recvcount * rdt_extent, cudaMemcpyHostToDevice);
- if (cudaSuccess != cudaerr)
- fprintf(stderr, "cudaMemcpy failed: %s\n", CudaGetErrorString(cudaerr));
- MPIU_Free(rcbuf);
- }
- return cuda_res;
- }
- else
-#endif
- return MPIR_Scatterv(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
-
-
- pami_xfer_t scatterv;
- pami_algorithm_t my_scatterv;
- const pami_metadata_t *my_md = (pami_metadata_t *)NULL;
- volatile unsigned scatterv_active = 1;
- int queryreq = 0;
-
- if(selected_type == MPID_COLL_OPTIMIZED)
- {
- TRACE_ERR("Optimized scatterv %s was selected\n",
- mpid->opt_protocol_md[PAMI_XFER_SCATTERV_INT][0].name);
- my_scatterv = mpid->opt_protocol[PAMI_XFER_SCATTERV_INT][0];
- my_md = &mpid->opt_protocol_md[PAMI_XFER_SCATTERV_INT][0];
- queryreq = mpid->must_query[PAMI_XFER_SCATTERV_INT][0];
- }
- else
- {
- TRACE_ERR("User selected %s for scatterv\n",
- mpid->user_selected[PAMI_XFER_SCATTERV_INT]);
- my_scatterv = mpid->user_selected[PAMI_XFER_SCATTERV_INT];
- my_md = &mpid->user_metadata[PAMI_XFER_SCATTERV_INT];
- queryreq = selected_type;
- }
-
- if((recvbuf != MPI_IN_PLACE) && MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS)
- pamidt = 0;
-
- if(MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS)
- pamidt = 0;
-
- if(pamidt == 0 || selected_type == MPID_COLL_USE_MPICH)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH scatterv algorithm\n");
- TRACE_ERR("Scatterv using MPICH\n");
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTERV_MPICH");
- return MPIR_Scatterv(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
-
- MPIDI_Datatype_get_info(1, sendtype, contig, ssize, dt_ptr, send_true_lb);
- sbuf = (char *)sendbuf + send_true_lb;
- rbuf = recvbuf;
-
- if(rank == root)
- {
- if(recvbuf == MPI_IN_PLACE)
- {
- if(unlikely(verbose))
- fprintf(stderr,"scatterv MPI_IN_PLACE buffering\n");
- rbuf = PAMI_IN_PLACE;
- }
- else
- {
- MPIDI_Datatype_get_info(1, recvtype, contig, rsize, dt_ptr, recv_true_lb);
- rbuf = (char *)recvbuf + recv_true_lb;
- }
- }
-
- scatterv.cb_done = cb_scatterv;
- scatterv.cookie = (void *)&scatterv_active;
- scatterv.cmd.xfer_scatterv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
-
- scatterv.algorithm = my_scatterv;
-
- scatterv.cmd.xfer_scatterv_int.rcvbuf = rbuf;
- scatterv.cmd.xfer_scatterv_int.sndbuf = sbuf;
- scatterv.cmd.xfer_scatterv_int.stype = stype;
- scatterv.cmd.xfer_scatterv_int.rtype = rtype;
- scatterv.cmd.xfer_scatterv_int.stypecounts = (int *) sendcounts;
- scatterv.cmd.xfer_scatterv_int.rtypecount = recvcount;
- scatterv.cmd.xfer_scatterv_int.sdispls = (int *) displs;
-
- if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
- queryreq == MPID_COLL_CHECK_FN_REQUIRED))
- {
- metadata_result_t result = {0};
- TRACE_ERR("querying scatterv protocol %s, type was %d\n",
- my_md->name, queryreq);
- if(my_md->check_fn == NULL)
- {
- /* process metadata bits */
- if((!my_md->check_correct.values.inplace) && (recvbuf == MPI_IN_PLACE))
- result.check.unspecified = 1;
-/* Can't check ranges like this. Non-local. Comment out for now.
- if(my_md->check_correct.values.rangeminmax)
- {
- MPI_Aint data_true_lb;
- MPID_Datatype *data_ptr;
- int data_size, data_contig;
- MPIDI_Datatype_get_info(recvcount, recvtype, data_contig, data_size, data_ptr, data_true_lb);
- if((my_md->range_lo <= data_size) &&
- (my_md->range_hi >= data_size))
- ;
- else
- {
- result.check.range = 1;
- if(unlikely(verbose))
- {
- fprintf(stderr,"message size (%u) outside range (%zu<->%zu) for %s.\n",
- data_size,
- my_md->range_lo,
- my_md->range_hi,
- my_md->name);
- }
- }
- }
- */
- }
- else /* calling the check fn is sufficient */
- result = my_md->check_fn(&scatterv);
- TRACE_ERR("bitmask: %#X\n", result.bitmask);
- result.check.nonlocal = 0; /* #warning REMOVE THIS WHEN IMPLEMENTED */
- if(result.bitmask)
- {
- if(unlikely(verbose))
- fprintf(stderr,"Query failed for %s. Using MPICH scatterv.\n", my_md->name);
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTERV_MPICH");
- return MPIR_Scatterv(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- if(my_md->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- if(unlikely(verbose))
- fprintf(stderr,"Query barrier required for %s\n", my_md->name);
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
- }
-
- MPIDI_Update_last_algorithm(comm_ptr, my_md->name);
-
- if(unlikely(verbose))
- {
- unsigned long long int threadID;
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- fprintf(stderr,"<%llx> Using protocol %s for scatterv on %u\n",
- threadID,
- my_md->name,
- (unsigned) comm_ptr->context_id);
- }
- MPIDI_Post_coll_t scatterv_post;
- MPIDI_Context_post(MPIDI_Context[0], &scatterv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&scatterv);
-
- TRACE_ERR("Waiting on active %d\n", scatterv_active);
- MPID_PROGRESS_WAIT_WHILE(scatterv_active);
-
- TRACE_ERR("Leaving MPIDO_Scatterv\n");
- return 0;
-}
-
-int MPIDO_Scatterv_simple(const void *sendbuf,
- const int *sendcounts,
- const int *displs,
- MPI_Datatype sendtype,
- void *recvbuf,
- int recvcount,
- MPI_Datatype recvtype,
- int root,
- MPID_Comm *comm_ptr,
- int *mpierrno)
-{
-#ifndef HAVE_PAMI_IN_PLACE
- if (sendbuf == MPI_IN_PLACE)
- {
- MPID_Abort (NULL, 0, 1, "'MPI_IN_PLACE' requries support for `PAMI_IN_PLACE`");
- return -1;
- }
-#endif
- int snd_contig = 1;
- int rcv_contig = 1;
- int send_size = 0, recv_size = 0;
- int ssize = 0;
- MPID_Datatype *dt_ptr = NULL;
- MPI_Aint send_true_lb=0, recv_true_lb=0;
- void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
- void *sbuf = NULL, *rbuf = NULL;
- int *sdispls = NULL, *scounts = NULL;
- int sndcount = 0;
- MPID_Segment segment;
- int tmp, i;
- pami_type_t stype = PAMI_TYPE_NULL;
- const int rank = comm_ptr->rank;
- const int size = comm_ptr->local_size;
- const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-
- if (rank == root && sendtype != MPI_DATATYPE_NULL && sendcounts[0] >= 0)
- {
- MPIDI_Datatype_get_info(1, sendtype, snd_contig, ssize, dt_ptr, send_true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_SCATTERV_INT, 64, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Scatterv(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
-
- }
- }
- }
-
- if (recvtype != MPI_DATATYPE_NULL && recvcount >= 0)
- {
- MPIDI_Datatype_get_info(recvcount, recvtype, rcv_contig,
- recv_size, dt_ptr, recv_true_lb);
- if(MPIDI_Pamix_collsel_advise != NULL && mpid->collsel_fast_query != NULL)
- {
- advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_SCATTERV_INT, 64, advisor_algorithms, 1);
- if(num_algorithms)
- {
- if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
- {
- return MPIR_Scatterv(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
- else if(advisor_algorithms[0].metadata && advisor_algorithms[0].metadata->check_correct.values.asyncflowctl && !(--(comm_ptr->mpid.num_requests)))
- {
- comm_ptr->mpid.num_requests = MPIDI_Process.optimized.num_requests;
- int tmpmpierrno;
- MPIDO_Barrier(comm_ptr, &tmpmpierrno);
- }
-
- }
- }
- }
-
- pami_xfer_t scatterv;
- const pami_metadata_t *my_scatterv_md;
- volatile unsigned scatterv_active = 1;
-
- sbuf = (char *)sendbuf + send_true_lb;
- rbuf = (char *)recvbuf + recv_true_lb;
- scounts = (int*)sendcounts;
- sdispls = (int*)displs;
- if(rank == root)
- {
- if(MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS)
- {
- if (!snd_contig)
- {
- scounts = (int*)MPIU_Malloc(size);
- sdispls = (int*)MPIU_Malloc(size);
- for(i = 0; i < size; i++)
- {
- scounts[i] = ssize * sendcounts[i];
- sdispls[i] = ssize * displs[i];
- send_size += scounts[i];
- sndcount += sendcounts[i];
- }
- snd_noncontig_buff = MPIU_Malloc(send_size);
- sbuf = snd_noncontig_buff;
- stype = PAMI_TYPE_BYTE;
- if(snd_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- DLOOP_Offset last = send_size;
- MPID_Segment_init(sendbuf, sndcount, sendtype, &segment, 0);
- MPID_Segment_pack(&segment, 0, &last, snd_noncontig_buff);
- }
- }
- if(recvbuf == MPI_IN_PLACE)
- {
- rbuf = PAMI_IN_PLACE;
- }
- }
-
- if(recvbuf != MPI_IN_PLACE)
- {
- if (!rcv_contig)
- {
- rcv_noncontig_buff = MPIU_Malloc(recv_size);
- rbuf = rcv_noncontig_buff;
- if(rcv_noncontig_buff == NULL)
- {
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
- "Fatal: Cannot allocate pack buffer");
- }
- }
- }
-
- scatterv.cb_done = cb_scatterv;
- scatterv.cookie = (void *)&scatterv_active;
- scatterv.cmd.xfer_scatterv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
-
- scatterv.algorithm = mpid->coll_algorithm[PAMI_XFER_SCATTERV_INT][0][0];
- my_scatterv_md = &mpid->coll_metadata[PAMI_XFER_SCATTERV_INT][0][0];
-
- scatterv.cmd.xfer_scatterv_int.rcvbuf = rbuf;
- scatterv.cmd.xfer_scatterv_int.sndbuf = sbuf;
- scatterv.cmd.xfer_scatterv_int.stype = stype;
- scatterv.cmd.xfer_scatterv_int.rtype = PAMI_TYPE_BYTE;/* rtype is ignored when rcvbuf == PAMI_IN_PLACE */
- scatterv.cmd.xfer_scatterv_int.stypecounts = (int *) scounts;
- scatterv.cmd.xfer_scatterv_int.rtypecount = recv_size;
- scatterv.cmd.xfer_scatterv_int.sdispls = (int *) sdispls;
-
-
- MPIDI_Update_last_algorithm(comm_ptr, my_scatterv_md->name);
-
-
- MPIDI_Post_coll_t scatterv_post;
- TRACE_ERR("%s scatterv\n", MPIDI_Process.context_post.active>0?"Posting":"Invoking");
- MPIDI_Context_post(MPIDI_Context[0], &scatterv_post.state,
- MPIDI_Pami_post_wrapper, (void *)&scatterv);
-
- TRACE_ERR("Waiting on active %d\n", scatterv_active);
- MPID_PROGRESS_WAIT_WHILE(scatterv_active);
-
- if(!rcv_contig)
- {
- MPIR_Localcopy(rcv_noncontig_buff, recv_size, MPI_CHAR,
- recvbuf, recvcount, recvtype);
- MPIU_Free(rcv_noncontig_buff);
- }
- if(!snd_contig)
- {
- MPIU_Free(snd_noncontig_buff);
- MPIU_Free(scounts);
- MPIU_Free(sdispls);
- }
-
- TRACE_ERR("Leaving MPIDO_Scatterv_optimized\n");
- return MPI_SUCCESS;
-}
-
-
-int
-MPIDO_CSWrapper_scatterv(pami_xfer_t *scatterv,
- void *comm)
-{
- int mpierrno = 0, rc = 0;
- MPID_Comm *comm_ptr = (MPID_Comm*)comm;
- MPI_Datatype sendtype, recvtype;
- void *rbuf;
- MPIDI_coll_check_in_place(scatterv->cmd.xfer_scatterv_int.rcvbuf, &rbuf);
- /* Since collective selection in PAMI fixes message size when selecting the
- algorithm, this wrapper function may be called back from PAMI */
- if(PAMI_TYPE_NULL == scatterv->cmd.xfer_scatterv_int.stype)
- sendtype = MPI_DATATYPE_NULL;
- else
- rc = MPIDI_Dtpami_to_dtmpi( scatterv->cmd.xfer_scatterv_int.stype,
- &sendtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIDI_Dtpami_to_dtmpi( scatterv->cmd.xfer_scatterv_int.rtype,
- &recvtype,
- NULL,
- NULL);
- if(rc == -1) return rc;
-
- rc = MPIR_Scatterv(scatterv->cmd.xfer_scatterv_int.sndbuf,
- scatterv->cmd.xfer_scatterv_int.stypecounts,
- scatterv->cmd.xfer_scatterv_int.sdispls, sendtype,
- rbuf,
- scatterv->cmd.xfer_scatterv_int.rtypecount, recvtype,
- scatterv->cmd.xfer_scatterv_int.root, comm_ptr, &mpierrno);
- if(scatterv->cb_done && rc == 0)
- scatterv->cb_done(NULL, scatterv->cookie, PAMI_SUCCESS);
- return rc;
-
-}
-
-
-#if 0
-/* remove the glue-based optimized scattervs for now. */
-
-
- /* we can't call scatterv-via-bcast unless we know all nodes have
- * valid sendcount arrays. so the user must explicitly ask for it.
- */
-
- /* optscatterv[0] == optscatterv bcast?
- * optscatterv[1] == optscatterv alltoall?
- * (having both allows cutoff agreement)
- * optscatterv[2] == sum of sendcounts
- */
-
- optscatterv[0] = !mpid->scattervs[0];
- optscatterv[1] = !mpid->scattervs[1];
- optscatterv[2] = 1;
-
- if(rank == root)
- {
- if(!optscatterv[1])
- {
- if(sendcounts)
- {
- for(i=0;i<size;i++)
- sum+=sendcounts[i];
- }
- optscatterv[2] = sum;
- }
-
- MPIDI_Datatype_get_info(1,
- sendtype,
- contig,
- nbytes,
- dt_ptr,
- true_lb);
- if(recvtype == MPI_DATATYPE_NULL || recvcount <= 0 || !contig)
- {
- optscatterv[0] = 1;
- optscatterv[1] = 1;
- }
- }
- else
- {
- MPIDI_Datatype_get_info(1,
- recvtype,
- contig,
- nbytes,
- dt_ptr,
- true_lb);
- if(sendtype == MPI_DATATYPE_NULL || !contig)
- {
- optscatterv[0] = 1;
- optscatterv[1] = 1;
- }
- }
-
- /* Make sure parameters are the same on all the nodes */
- /* specifically, noncontig on the receive */
- /* set the internal control flow to disable internal star tuning */
- if(mpid->preallreduces[MPID_SCATTERV_PREALLREDUCE])
- {
- MPIDI_Post_coll_t allred_post;
- rc = MPIDI_Context_post(MPIDI_Context[0], &allred_post.state,
- MPIDI_Pami_post_wrapper, (void *)&allred);
-
- MPID_PROGRESS_WAIT_WHILE(allred_active);
- }
- /* reset flag */
-
- if(!optscatterv[0] || (!optscatterv[1]))
- {
- char *newrecvbuf = recvbuf;
- char *newsendbuf = sendbuf;
- if(rank == root)
- {
- newsendbuf = (char *)sendbuf + true_lb;
- }
- else
- {
- newrecvbuf = (char *)recvbuf + true_lb;
- }
- if(!optscatterv[0])
- {
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTERV_OPT_ALLTOALL");
- return MPIDO_Scatterv_alltoallv(newsendbuf,
- sendcounts,
- displs,
- sendtype,
- newrecvbuf,
- recvcount,
- recvtype,
- root,
- comm_ptr,
- mpierrno);
-
- }
- else
- {
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTERV_OPT_BCAST");
- return MPIDO_Scatterv_bcast(newsendbuf,
- sendcounts,
- displs,
- sendtype,
- newrecvbuf,
- recvcount,
- recvtype,
- root,
- comm_ptr,
- mpierrno);
- }
- } /* nothing valid to try, go to mpich */
- else
- {
- if(unlikely(verbose))
- fprintf(stderr,"Using MPICH scatterv algorithm\n");
- MPIDI_Update_last_algorithm(comm_ptr, "SCATTERV_MPICH");
- return MPIR_Scatterv(sendbuf, sendcounts, displs, sendtype,
- recvbuf, recvcount, recvtype,
- root, comm_ptr, mpierrno);
- }
-#endif
diff --git a/src/mpid/pamid/src/comm/Makefile.mk b/src/mpid/pamid/src/comm/Makefile.mk
deleted file mode 100644
index de786c7..0000000
--- a/src/mpid/pamid/src/comm/Makefile.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/comm/mpid_comm.c \
- src/mpid/pamid/src/comm/mpid_selectcolls.c \
- src/mpid/pamid/src/comm/mpid_optcolls.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/comm/mpid_comm.c b/src/mpid/pamid/src/comm/mpid_comm.c
deleted file mode 100644
index 5359da8..0000000
--- a/src/mpid/pamid/src/comm/mpid_comm.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/comm/mpid_comm.c
- * \brief ???
- */
-
-/*#define TRACE_ON */
-
-#include <mpidimpl.h>
-extern void MPIDI_Comm_coll_query(MPID_Comm *);
-extern void MPIDI_Comm_coll_envvars(MPID_Comm *);
-
-void geom_create_cb_done(void *ctxt, void *data, pami_result_t err)
-{
- int *active = (int *)data;
- (*active)--;
-}
-
-void geom_destroy_cb_done(void *ctxt, void *data, pami_result_t err)
-{
- int *active = (int *)data;
- (*active)--;
-}
-
-int MPIDI_Comm_create (MPID_Comm *comm)
-{
- MPIDI_Coll_comm_create(comm);
- return MPI_SUCCESS;
-}
-
-int MPIDI_Comm_destroy (MPID_Comm *comm)
-{
- MPIDI_Coll_comm_destroy(comm);
- return MPI_SUCCESS;
-}
-
-pami_result_t MPIDI_Comm_create_from_pami_geom(pami_geometry_range_t *task_slices,
- size_t slice_count,
- pami_geometry_t *geometry,
- void **cookie)
-{
- int mpi_errno = MPI_SUCCESS;
- int num_tasks = 0;
- int *ranks = NULL;
- MPID_Comm *comm_ptr = NULL, *new_comm_ptr = NULL;
- MPID_Group *group_ptr = NULL, *new_group_ptr = NULL;
- int i = 0, j = 0;
-
- /* Get comm_ptr for MPI_COMM_WORLD and get the group_ptr for it */
- MPID_Comm_get_ptr( MPI_COMM_WORLD, comm_ptr );
- mpi_errno = MPIR_Comm_group_impl(comm_ptr, &group_ptr);
- if (mpi_errno)
- {
- TRACE_ERR("Error while creating group_ptr from MPI_COMM_WORLD in MPIDI_Comm_create_from_pami_geom\n");
- return PAMI_ERROR;
- }
-
- /* Create the ranks list from the pami_geometry_range_t array */
- for(i = 0; i < slice_count; i++)
- {
- num_tasks += (task_slices[i].hi - task_slices[i].lo) + 1;
- }
- ranks = MPIU_Calloc0(num_tasks, int);
- for(i = 0; i < slice_count; i++)
- {
- int slice_sz = (task_slices[i].hi - task_slices[i].lo) + 1;
- int k = 0;
- for(k = 0; k < slice_sz; k++)
- {
- ranks[j] = task_slices[i].lo + k;
- j++;
- }
- }
-
- /* Now we have all we need to create the new group. Create it */
- mpi_errno = MPIR_Group_incl_impl(group_ptr, num_tasks, ranks, &new_group_ptr);
- if (mpi_errno)
- {
- TRACE_ERR("Error while creating new_group_ptr from group_ptr in MPIDI_Comm_create_from_pami_geom\n");
- return PAMI_ERROR;
- }
-
- /* Now create the communicator using the new_group_ptr */
- mpi_errno = MPIR_Comm_create_intra(comm_ptr, new_group_ptr, &new_comm_ptr);
- if (mpi_errno)
- {
- TRACE_ERR("Error while creating new_comm_ptr from group_ptr in MPIDI_Comm_create_from_pami_geom\n");
- return PAMI_ERROR;
- }
-
- if(new_comm_ptr)
- {
- /* Get the geometry from the communicator and set the out parameters */
- *geometry = new_comm_ptr->mpid.geometry;
- *cookie = new_comm_ptr;
- }
- else
- {
- *geometry = PAMI_GEOMETRY_NULL;
- *cookie = NULL;
- }
-
- /* Cleanup */
- MPIU_TestFree(&ranks);
-
- return PAMI_SUCCESS;
-}
-
-pami_result_t MPIDI_Comm_destroy_external(void *comm_ext)
-{
- int mpi_errno = 0;
- MPID_Comm* comm_ptr = (MPID_Comm*)comm_ext;
- mpi_errno = MPIR_Comm_free_impl(comm_ptr);
- if (mpi_errno)
- {
- TRACE_ERR("Error while destroying comm_ptr in MPIDI_Comm_destroy_external\n");
- return PAMI_ERROR;
- }
- return PAMI_SUCCESS;
-}
-
-typedef struct MPIDI_Post_geom_create
-{
- pami_work_t state;
- size_t context_offset;
- pami_client_t client;
- pami_configuration_t *configs;
- size_t num_configs;
- pami_geometry_t newgeom;
- pami_geometry_t parent;
- unsigned id;
- pami_geometry_range_t *ranges;
- pami_task_t *tasks;
- size_t count; /* count of ranges or tasks */
- pami_event_function fn;
- void* cookie;
-} MPIDI_Post_geom_create_t;
-
-typedef struct MPIDI_Post_geom_destroy
-{
- pami_work_t state;
- pami_client_t client;
- pami_geometry_t *geom;
- pami_event_function fn;
- void *cookie;
-} MPIDI_Post_geom_destroy_t;
-
-static pami_result_t geom_rangelist_create_wrapper(pami_context_t context, void *cookie)
-{
- /* I'll need one of these per geometry creation function..... */
- MPIDI_Post_geom_create_t *geom_struct = (MPIDI_Post_geom_create_t *)cookie;
- TRACE_ERR("In geom create wrapper\n");
- return PAMI_Geometry_create_taskrange(
- geom_struct->client,
- geom_struct->context_offset,
- geom_struct->configs,
- geom_struct->num_configs,
- geom_struct->newgeom,
- geom_struct->parent,
- geom_struct->id,
- geom_struct->ranges,
- geom_struct->count,
- context,
- geom_struct->fn,
- geom_struct->cookie);
- TRACE_ERR("Done in geom create wrapper\n");
-}
-static pami_result_t geom_tasklist_create_wrapper(pami_context_t context, void *cookie)
-{
- /* I'll need one of these per geometry creation function..... */
- MPIDI_Post_geom_create_t *geom_struct = (MPIDI_Post_geom_create_t *)cookie;
- TRACE_ERR("In geom create wrapper\n");
- return PAMI_Geometry_create_tasklist(
- geom_struct->client,
- geom_struct->context_offset,
- geom_struct->configs,
- geom_struct->num_configs,
- geom_struct->newgeom,
- geom_struct->parent,
- geom_struct->id,
- geom_struct->tasks,
- geom_struct->count,
- context,
- geom_struct->fn,
- geom_struct->cookie);
- TRACE_ERR("Done in geom create wrapper\n");
-}
-
-static pami_result_t geom_destroy_wrapper(pami_context_t context, void *cookie)
-{
- MPIDI_Post_geom_destroy_t *geom_destroy_struct = (MPIDI_Post_geom_destroy_t *)cookie;
- TRACE_ERR("In geom destroy wrapper\n");
- return PAMI_Geometry_destroy(
- geom_destroy_struct->client,
- geom_destroy_struct->geom,
- context,
- geom_destroy_struct->fn,
- geom_destroy_struct->cookie);
- TRACE_ERR("Done in geom destroy wrapper\n");
-}
-
-
-
-void MPIDI_Coll_comm_create(MPID_Comm *comm)
-{
- volatile int geom_init = 1;
- int i;
- MPIDI_Post_geom_create_t geom_post;
-
- TRACE_ERR("MPIDI_Coll_comm_create enter\n");
- if (!MPIDI_Process.optimized.collectives)
- return;
-
- if(comm->comm_kind != MPID_INTRACOMM) return;
- /* Create a geometry */
-
- comm->coll_fns = MPIU_Calloc0(1, MPID_Collops);
- MPID_assert(comm->coll_fns != NULL);
-
- if(comm->mpid.geometry != MPIDI_Process.world_geometry)
- {
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0))
- fprintf(stderr,"world geom: %p parent geom: %p\n", MPIDI_Process.world_geometry, comm->mpid.parent);
- TRACE_ERR("Creating subgeom\n");
- /* Change to this at some point */
-
- comm->mpid.tasks = NULL;
- for(i=1;i<comm->local_size;i++)
- {
- /* only if sequential tasks should we use a (single) range.
- Multi or reordered ranges are inefficient */
- if(MPID_VCR_GET_LPID(comm->vcr, i) != (MPID_VCR_GET_LPID(comm->vcr, i-1) + 1)) {
- /* not sequential, use tasklist */
- MPID_VCR_GET_LPIDS(comm, comm->mpid.tasks);
- break;
- }
- }
- /* Should we use a range? (no task list set) */
- if(comm->mpid.tasks == NULL)
- {
- /* one range, {first rank ... last rank} */
- comm->mpid.range.lo = MPID_VCR_GET_LPID(comm->vcr, 0);
- comm->mpid.range.hi = MPID_VCR_GET_LPID(comm->vcr, comm->local_size-1);
- }
-
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0))
- fprintf(stderr,"create geometry tasks %p {%u..%u}\n", comm->mpid.tasks, MPID_VCR_GET_LPID(comm->vcr, 0),MPID_VCR_GET_LPID(comm->vcr, comm->local_size-1));
-
- pami_configuration_t config[3];
- size_t numconfigs = 0;
-#ifdef HAVE_PAMI_GEOMETRY_NONCONTIG
- config[0].name = PAMI_GEOMETRY_NONCONTIG;
- if(MPIDI_Process.optimized.memory & MPID_OPT_LVL_NONCONTIG)
- config[0].value.intval = 0; // Disable non-contig, pamid doesn't use pami for non-contig data collectives
- else
- config[0].value.intval = 1; // Enable non-contig even though pamid doesn't use pami for non-contig data collectives,
- // we still possibly want those collectives for other reasons.
- ++numconfigs;
-#endif
- if(MPIDI_Process.optimized.subcomms)
- {
- config[numconfigs].name = PAMI_GEOMETRY_OPTIMIZE;
- config[numconfigs].value.intval = 1;
- ++numconfigs;
- }
-#ifdef HAVE_PAMI_GEOMETRY_MEMORY_OPTIMIZE
- if(MPIDI_Process.optimized.memory)
- {
- config[numconfigs].name = PAMI_GEOMETRY_MEMORY_OPTIMIZE;
- config[numconfigs].value.intval = MPIDI_Process.optimized.memory; /* level of optimization */
- ++numconfigs;
- }
-#endif
-
- if((MPIDI_Process.optimized.memory & MPID_OPT_LVL_IRREG) && (comm->local_size & (comm->local_size-1)))
- {
- /* Don't create irregular geometries. Fallback to MPICH only collectives */
- geom_init = 0;
- comm->mpid.geometry = PAMI_GEOMETRY_NULL;
- }
- else if(comm->mpid.tasks == NULL)
- {
- geom_post.client = MPIDI_Client;
- geom_post.configs = config;
- geom_post.context_offset = 0; /* TODO BES investigate */
- geom_post.num_configs = numconfigs;
- geom_post.newgeom = &comm->mpid.geometry,
- geom_post.parent = PAMI_GEOMETRY_NULL;
- geom_post.id = comm->context_id;
- geom_post.ranges = &comm->mpid.range;
- geom_post.tasks = NULL;;
- geom_post.count = (size_t)1;
- geom_post.fn = geom_create_cb_done;
- geom_post.cookie = (void*)&geom_init;
-
- TRACE_ERR("%s geom_rangelist_create\n", MPIDI_Process.context_post>0?"Posting":"Invoking");
- MPIDI_Context_post(MPIDI_Context[0], &geom_post.state,
- geom_rangelist_create_wrapper, (void *)&geom_post);
- }
- else
- {
- geom_post.client = MPIDI_Client;
- geom_post.configs = config;
- geom_post.context_offset = 0; /* TODO BES investigate */
- geom_post.num_configs = numconfigs;
- geom_post.newgeom = &comm->mpid.geometry,
- geom_post.parent = PAMI_GEOMETRY_NULL;
- geom_post.id = comm->context_id;
- geom_post.ranges = NULL;
- geom_post.tasks = comm->mpid.tasks;
- geom_post.count = (size_t)comm->local_size;
- geom_post.fn = geom_create_cb_done;
- geom_post.cookie = (void*)&geom_init;
-
- TRACE_ERR("%s geom_tasklist_create\n", MPIDI_Process.context_post>0?"Posting":"Invoking");
- MPIDI_Context_post(MPIDI_Context[0], &geom_post.state,
- geom_tasklist_create_wrapper, (void *)&geom_post);
- }
-
- TRACE_ERR("Waiting for geom create to finish\n");
- MPID_PROGRESS_WAIT_WHILE(geom_init);
-
- if(comm->mpid.geometry == PAMI_GEOMETRY_NULL)
- {
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0))
- fprintf(stderr,"Created unoptimized communicator id=%u, size=%u\n", (unsigned) comm->context_id,comm->local_size);
- MPIU_TestFree(&comm->coll_fns);
- return;
- }
- }
- /* Initialize the async flow control in case it will be used. */
- comm->mpid.num_requests = MPIDI_Process.optimized.num_requests;
-
- TRACE_ERR("Querying protocols\n");
- /* Determine what protocols are available for this comm/geom */
- /* These two functions moved to mpid_collselect.c */
- MPIDI_Comm_coll_query(comm);
- MPIDI_Comm_coll_envvars(comm);
- if(MPIDI_Process.optimized.select_colls)
- MPIDI_Comm_coll_select(comm);
- TRACE_ERR("mpir barrier\n");
- int mpierrno = FALSE;
- /* Switch to comm->coll_fns->fn() */
- MPIDO_Barrier(comm, &mpierrno);
-
-
- TRACE_ERR("MPIDI_Coll_comm_create exit\n");
-}
-
-void MPIDI_Coll_comm_destroy(MPID_Comm *comm)
-{
- TRACE_ERR("MPIDI_Coll_comm_destroy enter\n");
- int i;
- volatile int geom_destroy = 1;
- MPIDI_Post_geom_destroy_t geom_destroy_post;
- if (!MPIDI_Process.optimized.collectives)
- return;
-
- if(comm->comm_kind != MPID_INTRACOMM)
- return;
-
- /* It's possible (MPIR_Setup_intercomm_localcomm) to have an intracomm
- without a geometry even when using optimized collectives */
- if(comm->mpid.geometry == PAMI_GEOMETRY_NULL)
- return;
-
- MPIU_TestFree(&comm->coll_fns);
- for(i=0;i<PAMI_XFER_COUNT;i++)
- {
- TRACE_ERR("Freeing algo/meta %d\n", i);
- /* When allocating comm->mpid.coll_algorithm, we skip allocations for
- AM collectives. Also there is no explicit initialization of
- comm->mpid.coll_algorithm to NULLs. This may cause MPIU_TestFree to
- cause problems when freeing. We skip AM collectives here as we skip
- allocating them in MPIDI_Comm_coll_query */
- if(i == PAMI_XFER_AMBROADCAST || i == PAMI_XFER_AMSCATTER ||
- i == PAMI_XFER_AMGATHER || i == PAMI_XFER_AMREDUCE)
- continue;
-
- MPIU_TestFree(&comm->mpid.coll_algorithm[i][0]);
- MPIU_TestFree(&comm->mpid.coll_algorithm[i][1]);
- MPIU_TestFree(&comm->mpid.coll_metadata[i][0]);
- MPIU_TestFree(&comm->mpid.coll_metadata[i][1]);
- }
-
-
- if(MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_NONE && MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_TUNE && comm->local_size > 1)
- {
- /* Destroy the fast query object. */
- pami_extension_collsel_query_destroy pamix_collsel_query_destroy =
- (pami_extension_collsel_query_destroy) PAMI_Extension_symbol(MPIDI_Collsel_extension,
- "Collsel_query_destroy");
- if(pamix_collsel_query_destroy != NULL)
- {
- pamix_collsel_query_destroy(&(comm->mpid.collsel_fast_query));
- }
- }
-
- TRACE_ERR("Destroying geometry\n");
-
- geom_destroy_post.client = MPIDI_Client;
- geom_destroy_post.geom = &comm->mpid.geometry;
- geom_destroy_post.fn = geom_destroy_cb_done;
- geom_destroy_post.cookie = (void *)&geom_destroy;
- TRACE_ERR("%s geom_destroy\n", MPIDI_Process.context_post>0?"Posting":"Invoking");
- MPIDI_Context_post(MPIDI_Context[0], &geom_destroy_post.state,
- geom_destroy_wrapper, (void *)&geom_destroy_post);
-
- TRACE_ERR("Waiting for geom destroy to finish\n");
- MPID_PROGRESS_WAIT_WHILE(geom_destroy);
- MPID_VCR_FREE_LPIDS(comm->mpid.tasks);
-/* TRACE_ERR("Freeing geometry ranges\n");
- MPIU_TestFree(&comm->mpid.tasks_descriptor.ranges);
-*/
- TRACE_ERR("MPIDI_Coll_comm_destroy exit\n");
-}
diff --git a/src/mpid/pamid/src/comm/mpid_optcolls.c b/src/mpid/pamid/src/comm/mpid_optcolls.c
deleted file mode 100644
index 03192f3..0000000
--- a/src/mpid/pamid/src/comm/mpid_optcolls.c
+++ /dev/null
@@ -1,1047 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/comm/mpid_optcolls.c
- * \brief Code for setting up optimized collectives per geometry/communicator
- * \brief currently uses strcmp and known protocol performance
- */
-
-
-
-/*#define TRACE_ON */
-
-#include <mpidimpl.h>
-
-
-static int MPIDI_Check_FCA_envvar(char *string, int *user_range_hi)
-{
- char *env = getenv("MP_MPI_PAMI_FOR");
- if(env != NULL)
- {
- if(strcasecmp(env, "ALL") == 0)
- return 1;
- int len = strlen(env);
- len++;
- char *temp = MPIU_Malloc(sizeof(char) * len);
- char *ptrToFree = temp;
- strcpy(temp, env);
- char *sepptr;
- for(sepptr = temp; (sepptr = strsep(&temp, ",")) != NULL ; )
- {
- char *subsepptr, *temp_sepptr;
- temp_sepptr = sepptr;
- subsepptr = strsep(&temp_sepptr, ":");
- if(temp_sepptr != NULL)/* SSS: There is a a colon for this collective */
- {
- if(strcasecmp(subsepptr, string) == 0)
- {
- *user_range_hi = atoi(temp_sepptr);
- MPIU_Free(ptrToFree);
- return 1;
- }
- else
- sepptr++;
- }
- else
- {
- if(strcasecmp(sepptr, string) == 0)
- {
- *user_range_hi = -1;
- MPIU_Free(ptrToFree);
- return 1;
- }
- else
- sepptr++;
- }
- }
- /* We didn't find it, but the end var was set, so return 0 */
- MPIU_Free(ptrToFree);
- return 0;
- }
- if(MPIDI_Process.optimized.collectives == MPID_COLL_FCA)
- return 1; /* To have gotten this far, opt colls are on. If the env doesn't exist,
- we should use the FCA protocol for "string" */
- else
- return -1; /* we don't have any FCA things */
-}
-
-static inline void
-MPIDI_Coll_comm_check_FCA(char *coll_name,
- char *protocol_name,
- int pami_xfer,
- int query_type,
- int proto_num,
- MPID_Comm *comm_ptr)
-{
- int opt_proto = -1;
- int i;
- int user_range_hi = -1;/* SSS: By default we assume user hasn't defined a range_hi (cutoff_size) */
-#ifdef TRACE_ON
- char *envstring = getenv("MP_MPI_PAMI_FOR");
-#endif
- TRACE_ERR("Checking for %s in %s\n", coll_name, envstring);
- int check_var = MPIDI_Check_FCA_envvar(coll_name, &user_range_hi);
- if(check_var == 1)
- {
- TRACE_ERR("Found %s\n",coll_name);
- /* Look for protocol_name in the "always works list */
- for(i = 0; i <comm_ptr->mpid.coll_count[pami_xfer][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[pami_xfer][0][i].name, protocol_name) == 0)
- {
- opt_proto = i;
- break;
- }
- }
- if(opt_proto != -1) /* we found it, so copy it to the optimized var */
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimized protocol\n",
- pami_xfer, opt_proto,
- comm_ptr->mpid.coll_metadata[pami_xfer][0][opt_proto].name);
- comm_ptr->mpid.opt_protocol[pami_xfer][proto_num] =
- comm_ptr->mpid.coll_algorithm[pami_xfer][0][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[pami_xfer][proto_num],
- &comm_ptr->mpid.coll_metadata[pami_xfer][0][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[pami_xfer][proto_num] = query_type;
- if(user_range_hi != -1)
- comm_ptr->mpid.cutoff_size[pami_xfer][proto_num] = user_range_hi;
- else
- comm_ptr->mpid.cutoff_size[pami_xfer][proto_num] = 0;
- comm_ptr->mpid.user_selected_type[pami_xfer] = MPID_COLL_OPTIMIZED;
- }
- else /* see if it is in the must query list instead */
- {
- for(i = 0; i <comm_ptr->mpid.coll_count[pami_xfer][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[pami_xfer][1][i].name, protocol_name) == 0)
- {
- opt_proto = i;
- break;
- }
- }
- if(opt_proto != -1) /* ok, it was in the must query list */
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimized protocol\n",
- pami_xfer, opt_proto,
- comm_ptr->mpid.coll_metadata[pami_xfer][1][opt_proto].name);
- comm_ptr->mpid.opt_protocol[pami_xfer][proto_num] =
- comm_ptr->mpid.coll_algorithm[pami_xfer][1][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[pami_xfer][proto_num],
- &comm_ptr->mpid.coll_metadata[pami_xfer][1][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[pami_xfer][proto_num] = query_type;
- if(user_range_hi != -1)
- comm_ptr->mpid.cutoff_size[pami_xfer][proto_num] = user_range_hi;
- else
- comm_ptr->mpid.cutoff_size[pami_xfer][proto_num] = 0;
- comm_ptr->mpid.user_selected_type[pami_xfer] = MPID_COLL_OPTIMIZED;
- }
- else /* that protocol doesn't exist */
- {
- TRACE_ERR("Couldn't find %s in the list for %s, reverting to MPICH\n",protocol_name,coll_name);
- comm_ptr->mpid.user_selected_type[pami_xfer] = MPID_COLL_USE_MPICH;
- }
- }
- }
- else if(check_var == 0)/* The env var was set, but wasn't set for coll_name */
- {
- TRACE_ERR("Couldn't find any optimal %s protocols or user chose not to set it. Selecting MPICH\n",coll_name);
- comm_ptr->mpid.user_selected_type[pami_xfer] = MPID_COLL_USE_MPICH;
- }
- else
- return;
-}
-
-
-void MPIDI_Comm_coll_select(MPID_Comm *comm_ptr)
-{
- TRACE_ERR("Entering MPIDI_Comm_coll_select\n");
- int opt_proto = -1;
- int mustquery = 0;
- int i;
- int use_threaded_collectives = 1;
-
- /* Some highly optimized protocols (limited resource) do not
- support MPI_THREAD_MULTIPLE semantics so do not enable them
- except on COMM_WORLD.
- NOTE: we are not checking metadata because these are known,
- hardcoded optimized protocols.
- */
- if((MPIR_ThreadInfo.thread_provided == MPI_THREAD_MULTIPLE) &&
- (comm_ptr != MPIR_Process.comm_world)) use_threaded_collectives = 0;
- if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm_ptr->rank == 0))
- fprintf(stderr, "thread_provided=%s, %scomm_world, use_threaded_collectives %u\n",
- MPIR_ThreadInfo.thread_provided == MPI_THREAD_MULTIPLE? "MPI_THREAD_MULTIPLE":
- MPIR_ThreadInfo.thread_provided == MPI_THREAD_SINGLE?"MPI_THREAD_SINGLE":
- MPIR_ThreadInfo.thread_provided == MPI_THREAD_FUNNELED?"MPI_THREAD_FUNNELED":
- MPIR_ThreadInfo.thread_provided == MPI_THREAD_SERIALIZED?"MPI_THREAD_SERIALIZED":
- "??",
- (comm_ptr != MPIR_Process.comm_world)?"!":"",
- use_threaded_collectives);
-
- /* First, setup the (easy, allreduce is complicated) FCA collectives if there
- * are any because they are always usable when they are on */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_REDUCE] == MPID_COLL_NOSELECTION)
- {
- MPIDI_Coll_comm_check_FCA("REDUCE","I1:Reduce:FCA:FCA",PAMI_XFER_REDUCE,MPID_COLL_CHECK_FN_REQUIRED, 0, comm_ptr);
- }
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLGATHER] == MPID_COLL_NOSELECTION)
- {
- MPIDI_Coll_comm_check_FCA("ALLGATHER","I1:Allgather:FCA:FCA",PAMI_XFER_ALLGATHER,MPID_COLL_NOQUERY, 0, comm_ptr);
- }
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLGATHERV_INT] == MPID_COLL_NOSELECTION)
- {
- MPIDI_Coll_comm_check_FCA("ALLGATHERV","I1:AllgathervInt:FCA:FCA",PAMI_XFER_ALLGATHERV_INT,MPID_COLL_NOQUERY, 0, comm_ptr);
- }
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST] == MPID_COLL_NOSELECTION)
- {
- MPIDI_Coll_comm_check_FCA("BCAST", "I1:Broadcast:FCA:FCA", PAMI_XFER_BROADCAST, MPID_COLL_NOQUERY, 0, comm_ptr);
- MPIDI_Coll_comm_check_FCA("BCAST", "I1:Broadcast:FCA:FCA", PAMI_XFER_BROADCAST, MPID_COLL_NOQUERY, 1, comm_ptr);
- }
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER] == MPID_COLL_NOSELECTION)
- {
- MPIDI_Coll_comm_check_FCA("BARRIER","I1:Barrier:FCA:FCA",PAMI_XFER_BARRIER,MPID_COLL_NOQUERY, 0, comm_ptr);
- }
- /* SSS: There isn't really an FCA Gatherv protocol. We do this call to force the use of MPICH for gatherv
- * when FCA is enabled so we don't have to use PAMI protocol. */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_GATHERV_INT] == MPID_COLL_NOSELECTION)
- {
- MPIDI_Coll_comm_check_FCA("GATHERV","I1:GathervInt:FCA:FCA",PAMI_XFER_GATHERV_INT,MPID_COLL_NOQUERY, 0, comm_ptr);
- }
-
- opt_proto = -1;
- mustquery = 0;
- /* So, several protocols are really easy. Tackle them first. */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLGATHERV_INT] == MPID_COLL_NOSELECTION)
- {
- TRACE_ERR("No allgatherv[int] env var, so setting optimized allgatherv[int]\n");
- /* Use I0:RectangleDput */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_ALLGATHERV_INT][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLGATHERV_INT][1][i].name, "I0:RectangleDput:SHMEM:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- }
- if(opt_proto != -1)
- {
- TRACE_ERR("Memcpy protocol type %d number %d (%s) to optimized protocol\n",
- PAMI_XFER_ALLGATHERV_INT, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLGATHERV_INT][mustquery][opt_proto].name);
- comm_ptr->mpid.opt_protocol[PAMI_XFER_ALLGATHERV_INT][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_ALLGATHERV_INT][mustquery][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLGATHERV_INT][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLGATHERV_INT][mustquery][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_ALLGATHERV_INT][0] = mustquery?MPID_COLL_ALWAYS_QUERY:MPID_COLL_NOQUERY;
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLGATHERV_INT] = MPID_COLL_OPTIMIZED;
- }
- else /* no optimized allgatherv? */
- {
- TRACE_ERR("Couldn't find optimial allgatherv[int] protocol\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLGATHERV_INT] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_ALLGATHERV_INT][0] = 0;
- comm_ptr->mpid.allgathervs[0] = 1; /* Use GLUE_ALLREDUCE */
- }
- TRACE_ERR("Done setting optimized allgatherv[int]\n");
- }
-
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_GATHER] == MPID_COLL_NOSELECTION)
- {
- TRACE_ERR("Default gather to MPICH\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_GATHER] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_GATHER][0] = 0;
- }
-
- opt_proto = -1;
- mustquery = 0;
- /* Scatter */
- /* If the user has forced a selection, don't bother setting it here */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTER] == MPID_COLL_NOSELECTION)
- {
- TRACE_ERR("No scatter env var, so setting optimized scatter\n");
- /* The best scatter seems to be I0:Binomial (at least better than I0:Flat) */
- /* Loop over the protocols until we find the one we want */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_SCATTER][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTER][0][i].name, "I0:Binomial:-:MU") == 0)
- {
- opt_proto = i;
- break;
- }
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTER][0][i].name, "I0:Binomial:SHMEM:MU") == 0)
- {
- opt_proto = i;
- break;
- }
- }
- if(opt_proto == -1) /* check other list */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_SCATTER][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTER][1][i].name, "I0:Binomial:-:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTER][1][i].name, "I0:Binomial:SHMEM:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- }
- /* Actually, MPICH looks better right now, so use MPICH
- if(opt_proto != -1)
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimized protocol\n",
- PAMI_XFER_SCATTER, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTER][mustquery][opt_proto].name);
- comm_ptr->mpid.opt_protocol[PAMI_XFER_SCATTER][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_SCATTER][mustquery][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_SCATTER][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTER][mustquery][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_SCATTER][0] = mustquery?MPID_COLL_ALWAYS_QUERY:MPID_COLL_NOQUERY;
- comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTER] = MPID_COLL_OPTIMIZED;
- }
- else
- */
- {
- TRACE_ERR("Scatter reverting to MPICH\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTER] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_SCATTER][0] = 0;
- }
- TRACE_ERR("Done setting optimized scatter\n");
- }
- opt_proto = -1;
- mustquery = 0;
- /* Scatterv */
- /* If the user has forced a selection, don't bother setting it here */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTERV_INT] == MPID_COLL_NOSELECTION)
- {
- TRACE_ERR("No scatterv env var, so setting optimized scatterv\n");
- /* The best scatterv seems to be I0:SoftwareTree: */
- /* Loop over the protocols until we find the one we want */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_SCATTERV_INT][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTERV_INT][0][i].name, "I0:SoftwareTree:-:MU") == 0)
- {
- opt_proto = i;
- break;
- }
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTERV_INT][0][i].name, "I0:SoftwareTree:SHMEM:MU") == 0)
- {
- opt_proto = i;
- break;
- }
- }
- if(opt_proto == -1) /* check other list */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_SCATTERV_INT][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTERV_INT][1][i].name, "I0:SoftwareTree:-:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTERV_INT][1][i].name, "I0:SoftwareTree:SHMEM:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- }
- if(opt_proto != -1)
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimized protocol\n",
- PAMI_XFER_SCATTERV_INT, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTERV_INT][mustquery][opt_proto].name);
- comm_ptr->mpid.opt_protocol[PAMI_XFER_SCATTERV_INT][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_SCATTERV_INT][mustquery][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_SCATTERV_INT][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_SCATTERV_INT][mustquery][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_SCATTERV_INT][0] = mustquery?MPID_COLL_ALWAYS_QUERY:MPID_COLL_NOQUERY;
- comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTERV_INT] = MPID_COLL_OPTIMIZED;
- }
- else
- {
- TRACE_ERR("Scatterv reverting to MPICH\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTERV_INT] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_SCATTERV_INT][0] = 0;
- }
- TRACE_ERR("Done setting optimized scatterv\n");
- }
-
-
- opt_proto = -1;
- mustquery = 0;
- /* Alltoall */
- /* If the user has forced a selection, don't bother setting it here */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALL] == MPID_COLL_NOSELECTION)
- {
- TRACE_ERR("No alltoall env var, so setting optimized alltoall\n");
- /* The best alltoall is always I0:M2MComposite:MU:MU */
- /* Loop over the protocols until we find the one we want */
- if(use_threaded_collectives)
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_ALLTOALL][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALL][0][i].name, "I0:M2MComposite:MU:MU") == 0)
- {
- opt_proto = i;
- break;
- }
- }
- if(use_threaded_collectives && (opt_proto == -1)) /* check other list */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_ALLTOALL][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALL][1][i].name, "I0:M2MComposite:MU:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- }
- if(opt_proto != -1)
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimized protocol\n",
- PAMI_XFER_ALLTOALL, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALL][mustquery][opt_proto].name);
- comm_ptr->mpid.opt_protocol[PAMI_XFER_ALLTOALL][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_ALLTOALL][mustquery][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLTOALL][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALL][mustquery][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_ALLTOALL][0] = mustquery?MPID_COLL_ALWAYS_QUERY:MPID_COLL_NOQUERY;
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALL] = MPID_COLL_OPTIMIZED;
- }
- else
- {
- TRACE_ERR("Couldn't find I0:M2MComposite:MU:MU in the list for alltoall, reverting to MPICH\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALL] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_ALLTOALL][0] = 0;
- }
- TRACE_ERR("Done setting optimized alltoall\n");
- }
-
-
- opt_proto = -1;
- mustquery = 0;
- /* Alltoallv */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALLV_INT] == MPID_COLL_NOSELECTION)
- {
- TRACE_ERR("No alltoallv env var, so setting optimized alltoallv\n");
- /* The best alltoall is always I0:M2MComposite:MU:MU */
- /* Loop over the protocols until we find the one we want */
- if(use_threaded_collectives)
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_ALLTOALLV_INT][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALLV_INT][0][i].name, "I0:M2MComposite:MU:MU") == 0)
- {
- opt_proto = i;
- break;
- }
- }
- if(use_threaded_collectives && (opt_proto == -1)) /* check other list */
- for(i = 0; i <comm_ptr->mpid.coll_count[PAMI_XFER_ALLTOALLV_INT][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALLV_INT][1][i].name, "I0:M2MComposite:MU:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- }
- if(opt_proto != -1)
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimized protocol\n",
- PAMI_XFER_ALLTOALLV_INT, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALLV_INT][mustquery][opt_proto].name);
- comm_ptr->mpid.opt_protocol[PAMI_XFER_ALLTOALLV_INT][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_ALLTOALLV_INT][mustquery][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLTOALLV_INT][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLTOALLV_INT][mustquery][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_ALLTOALLV_INT][0] = mustquery?MPID_COLL_ALWAYS_QUERY:MPID_COLL_NOQUERY;
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALLV_INT] = MPID_COLL_OPTIMIZED;
- }
- else
- {
- TRACE_ERR("Couldn't find I0:M2MComposite:MU:MU in the list for alltoallv, reverting to MPICH\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALLV_INT] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_ALLTOALLV_INT][0] = 0;
- }
- TRACE_ERR("Done setting optimized alltoallv\n");
- }
-
- opt_proto = -1;
- mustquery = 0;
- /* Barrier */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER] == MPID_COLL_NOSELECTION)
- {
- TRACE_ERR("No barrier env var, so setting optimized barrier\n");
- /* For 1ppn, I0:MultiSync:-:GI is best, followed by
- * I0:RectangleMultiSync:-:MU, followed by
- * I0:OptBinomial:P2P:P2P
- */
- /* For 16 and 64 ppn, I0:MultiSync2Device:SHMEM:GI (which doesn't exist at 1ppn)
- * is best, followed by
- * I0:RectangleMultiSync2Device:SHMEM:MU for rectangles, followed by
- * I0:OptBinomial:P2P:P2P */
- /* So we basically check for the protocols in reverse-optimal order */
-
-
- /* In order, >1ppn we use
- * I0:MultiSync2Device:SHMEM:GI
- * I0:RectangleMultiSync2Device:SHMEM:MU
- * I0:OptBinomial:P2P:P2P
- * MPICH
- *
- * In order 1ppn we use
- * I0:MultiSync:-:GI
- * I0:RectangleMultiSync:-:MU
- * I0:OptBinomial:P2P:P2P
- * MPICH
- */
- if(use_threaded_collectives)
- for(i = 0 ; i < comm_ptr->mpid.coll_count[PAMI_XFER_BARRIER][0]; i++)
- {
- /* These two are mutually exclusive */
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BARRIER][0][i].name, "I0:MultiSync2Device:SHMEM:GI") == 0)
- {
- opt_proto = i;
- }
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BARRIER][0][i].name, "I0:MultiSync:-:GI") == 0)
- {
- opt_proto = i;
- }
- }
- /* Next best rectangular to check */
- if(opt_proto == -1)
- {
- if(use_threaded_collectives)
- for(i = 0 ; i < comm_ptr->mpid.coll_count[PAMI_XFER_BARRIER][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BARRIER][0][i].name, "I0:RectangleMultiSync2Device:SHMEM:MU") == 0)
- opt_proto = i;
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BARRIER][0][i].name, "I0:RectangleMultiSync:-:MU") == 0)
- opt_proto = i;
- }
- }
- /* Finally, see if we have opt binomial */
- if(opt_proto == -1)
- {
- for(i = 0 ; i < comm_ptr->mpid.coll_count[PAMI_XFER_BARRIER][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BARRIER][0][i].name, "I0:OptBinomial:P2P:P2P") == 0)
- opt_proto = i;
- }
- }
-
- if(opt_proto != -1)
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimize protocol\n",
- PAMI_XFER_BARRIER, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_BARRIER][0][opt_proto].name);
-
- comm_ptr->mpid.opt_protocol[PAMI_XFER_BARRIER][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_BARRIER][0][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BARRIER][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_BARRIER][0][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_BARRIER][0] = MPID_COLL_NOQUERY;
- comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER] = MPID_COLL_OPTIMIZED;
- }
- else
- {
- TRACE_ERR("Couldn't find any optimal barrier protocols. Selecting MPICH\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_BARRIER][0] = 0;
- }
-
- TRACE_ERR("Done setting optimized barrier\n");
- }
-
- opt_proto = -1;
- mustquery = 0;
-
- /* This becomes messy when we have to message sizes. If we were gutting the
- * existing framework, it might be easier, but I think the existing framework
- * is useful for future collective selection libraries/mechanisms, so I'd
- * rather leave it in place and deal with it here instead.... */
-
- /* Broadcast */
- /* 1ppn */
- /* small messages: I0:MulticastDput:-:MU
- * if it exists, I0:RectangleDput:MU:MU for >64k */
-
- /* 16ppn */
- /* small messages: I0:MultiCastDput:SHMEM:MU
- * for 16ppn/1node: I0:MultiCastDput:SHMEM:- perhaps
- * I0:RectangleDput:SHMEM:MU for >128k */
- /* nonrect(?): I0:MultiCast2DeviceDput:SHMEM:MU
- * no hw: I0:Sync2-nary:Shmem:MUDput */
- /* 64ppn */
- /* all sizes: I0:MultiCastDput:SHMEM:MU */
- /* otherwise, I0:2-nomial:SHMEM:MU */
-
-
-
- /* First, set up small message bcasts */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST] == MPID_COLL_NOSELECTION)
- {
- /* Complicated exceptions: */
- /* I0:RankBased_Binomial:-:ShortMU is good on irregular for <256 bytes */
- /* I0:MultiCast:SHMEM:- is good at 1 node/16ppn, which is a SOW point */
- TRACE_ERR("No bcast env var, so setting optimized bcast\n");
-
- if(use_threaded_collectives)
- for(i = 0 ; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- /* These two are mutually exclusive */
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:MultiCastDput:-:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:MultiCastDput:SHMEM:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- }
- /* Next best MU 2 device to check */
- if(use_threaded_collectives)
- if(opt_proto == -1)
- {
- if(use_threaded_collectives)
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:MultiCast2DeviceDput:SHMEM:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- break;
- }
- }
- }
- /* Check for rectangle */
- if(use_threaded_collectives)
- if(opt_proto == -1)
- {
- unsigned len = strlen("I0:RectangleDput:");
- if(use_threaded_collectives)
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- if(strcasecmp (comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:RectangleDput:SHMEM:MU") == 0)
- { /* Prefer the :SHMEM:MU so break when it's found */
- opt_proto = i;
- mustquery = 1;
- break;
- }
- /* Otherwise any RectangleDput is better than nothing. */
- if(strncasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:RectangleDput:",len) == 0)
- {
- opt_proto = i;
- mustquery = 1;
- }
- }
- }
- if(opt_proto == -1)
- {
- /* this protocol is sometimes query, sometimes always works so check both lists but prefer always works */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][0]; i++)
- {
- /* This is a good choice for small messages only */
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][0][i].name, "I0:SequenceBased_Binomial:SHMEM:MU") == 0)
- {
- opt_proto = i;
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0] = 256;
- break;
- }
- }
- if(opt_proto == -1) for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- /* This is a good choice for small messages only */
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:SequenceBased_Binomial:SHMEM:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0] = 256;
- break;
- }
- }
- }
- /* Next best to check */
- if(opt_proto == -1)
- {
- /* this protocol is sometimes query, sometimes always works so check both lists but prefer always works */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][0][i].name, "I0:2-nomial:SHMEM:MU") == 0)
- opt_proto = i;
- }
- if(opt_proto == -1) for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:2-nomial:SHMEM:MU") == 0)
- opt_proto = i;
- mustquery = 1;
- }
- }
-
- /* These protocols are good for most message sizes, but there are some
- * better choices for larger messages */
- /* Set opt_proto for bcast[0] right now */
- if(opt_proto != -1)
- {
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimize protocol 0\n",
- PAMI_XFER_BROADCAST, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][mustquery][opt_proto].name);
-
- comm_ptr->mpid.opt_protocol[PAMI_XFER_BROADCAST][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_BROADCAST][mustquery][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][mustquery][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_BROADCAST][0] = mustquery?MPID_COLL_ALWAYS_QUERY:MPID_COLL_NOQUERY;
- comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST] = MPID_COLL_OPTIMIZED;
- }
- else
- {
- TRACE_ERR("Couldn't find any optimal bcast protocols. Selecting MPICH\n");
- comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.opt_protocol[PAMI_XFER_BROADCAST][0] = 0;
- }
-
- TRACE_ERR("Done setting optimized bcast 0\n");
-
- /* Now, look into large message bcasts */
- opt_proto = -1;
- mustquery = 0;
- /* If bcast0 is I0:MultiCastDput:-:MU, and I0:RectangleDput:MU:MU is available, use
- * it for 64k messages */
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST] != MPID_COLL_USE_MPICH)
- {
- if(use_threaded_collectives)
- if(strcasecmp(comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][0].name, "I0:MultiCastDput:-:MU") == 0)
- {
- /* See if I0:RectangleDput:MU:MU is available */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:RectangleDput:MU:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0] = 65536;
- break;
- }
- }
- }
- /* small messages: I0:MultiCastDput:SHMEM:MU*/
- /* I0:RectangleDput:SHMEM:MU for >128k */
- if(use_threaded_collectives)
- if(strcasecmp(comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][0].name, "I0:MultiCastDput:SHMEM:MU") == 0)
- {
- /* See if I0:RectangleDput:SHMEM:MU is available */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:RectangleDput:SHMEM:MU") == 0)
- {
- opt_proto = i;
- mustquery = 1;
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0] = 131072;
- break;
- }
- }
- }
- if(strcasecmp(comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][0].name, "I0:SequenceBased_Binomial:SHMEM:MU") == 0)
- {
- /* This protocol was only good for up to 256, and it was an irregular, so let's set
- * 2-nomial for larger message sizes. Cutoff should have already been set to 256 too */
- /* this protocol is sometimes query, sometimes always works so check both lists but prefer always works */
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][0]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][0][i].name, "I0:2-nomial:SHMEM:MU") == 0)
- opt_proto = i;
- }
- if(opt_proto == -1) for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_BROADCAST][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][1][i].name, "I0:2-nomial:SHMEM:MU") == 0)
- opt_proto = i;
- mustquery = 1;
- }
- }
-
- if(opt_proto != -1)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm_ptr->rank == 0)
- {
- fprintf(stderr,"Selecting %s as optimal broadcast 1 (above %d)\n",
- comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][mustquery][opt_proto].name,
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0]);
- }
- TRACE_ERR("Memcpy protocol type %d, number %d (%s) to optimize protocol 1 (above %d)\n",
- PAMI_XFER_BROADCAST, opt_proto,
- comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][mustquery][opt_proto].name,
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0]);
-
- comm_ptr->mpid.opt_protocol[PAMI_XFER_BROADCAST][1] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_BROADCAST][mustquery][opt_proto];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][1],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_BROADCAST][mustquery][opt_proto],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_BROADCAST][1] = mustquery?MPID_COLL_ALWAYS_QUERY:MPID_COLL_NOQUERY;
- /* This should already be set... */
- /* comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST] = MPID_COLL_OPTIMIZED; */
- }
- else
- {
- TRACE_ERR("Secondary bcast protocols unavilable; using primary for all sizes\n");
-
- TRACE_ERR("Duplicating protocol type %d, number %d (%s) to optimize protocol 1 (above %d)\n",
- PAMI_XFER_BROADCAST, 0,
- comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][0].name,
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0]);
-
- comm_ptr->mpid.opt_protocol[PAMI_XFER_BROADCAST][1] =
- comm_ptr->mpid.opt_protocol[PAMI_XFER_BROADCAST][0];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][1],
- &comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][0],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.must_query[PAMI_XFER_BROADCAST][1] = comm_ptr->mpid.must_query[PAMI_XFER_BROADCAST][0];
- }
- }
- TRACE_ERR("Done with bcast protocol selection\n");
- }
-
- opt_proto = -1;
- mustquery = 0;
- /* The most fun... allreduce */
- /* 512-way data: */
- /* For starters, Amith's protocol works on doubles on sum/min/max. Because
- * those are targetted types/ops, we will pre-cache it.
- * That protocol works on ints, up to 8k/ppn max message size. We'll precache
- * it too
- */
-
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLREDUCE] == MPID_COLL_NOSELECTION)
- {
- /* the user hasn't selected a protocol, so we can NULL the protocol/metadatas */
- comm_ptr->mpid.query_cached_allreduce = MPID_COLL_USE_MPICH;
-
- comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0] = 0;
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][0] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][1] = MPID_COLL_USE_MPICH;
- /* For BGQ */
- /* 1ppn: I0:MultiCombineDput:-:MU if it is available, but it has a check_fn
- * since it is MU-based*/
- /* Next best is I1:ShortAllreduce:P2P:P2P for short messages, then MPICH is best*/
- /* I0:MultiCombineDput:-:MU could be used in the i/dsmm cached protocols, so we'll do that */
- /* First, look in the 'must query' list and see i I0:MultiCombine:Dput:-:MU is there */
-
- char *pname="...none...";
- int user_range_hi = -1;
- int fca_enabled = 0;
- if((fca_enabled = MPIDI_Check_FCA_envvar("ALLREDUCE", &user_range_hi)) == 1)
- pname = "I1:Allreduce:FCA:FCA";
- else if(use_threaded_collectives)
- pname = "I0:MultiCombineDput:-:MU";
- /*SSS: Any "MU" protocol will not be available on non-BG systems. I just need to check for FCA in the
- first if only. No need to do another check since the second if will never succeed for PE systems*/
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_ALLREDUCE][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLREDUCE][1][i].name, pname) == 0)
- {
- /* So, this should be fine for the i/dsmm protocols. everything else needs to call the check function */
- /* This also works for all message sizes, so no need to deal with it specially for query */
- comm_ptr->mpid.cached_allreduce =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_ALLREDUCE][1][i];
- memcpy(&comm_ptr->mpid.cached_allreduce_md,
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLREDUCE][1][i],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.query_cached_allreduce = MPID_COLL_QUERY;
-
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLREDUCE] = MPID_COLL_OPTIMIZED;
- if(fca_enabled && user_range_hi != -1)
- comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0] = user_range_hi;
- opt_proto = i;
-
- }
- if(use_threaded_collectives)
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLREDUCE][1][i].name, "I0:MultiCombineDput:SHMEM:MU") == 0)
- {
- /* This works well for doubles sum/min/max but has trouble with int > 8k/ppn */
- comm_ptr->mpid.cached_allreduce =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_ALLREDUCE][1][i];
- memcpy(&comm_ptr->mpid.cached_allreduce_md,
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLREDUCE][1][i],
- sizeof(pami_metadata_t));
- comm_ptr->mpid.query_cached_allreduce = MPID_COLL_CHECK_FN_REQUIRED;
-
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLREDUCE] = MPID_COLL_OPTIMIZED;
- opt_proto = i;
- }
- }
- /* At this point, if opt_proto != -1, we have must-query protocols in the i/dsmm caches */
- /* We should pick a backup, non-must query */
- /* I0:ShortAllreduce:P2P:P2P < 128, then mpich*/
-
- /*SSS: ShortAllreduce is available on both BG and PE. I have to pick just one to check for in this case.
- However, I need to add FCA for both opt_protocol[0]and[1] to cover all data sizes*/
- if(fca_enabled == 1)
- pname = "I1:Allreduce:FCA:FCA";
- else
- pname = "I1:ShortAllreduce:P2P:P2P";
-
- for(i = 0; i < comm_ptr->mpid.coll_count[PAMI_XFER_ALLREDUCE][1]; i++)
- {
- if(strcasecmp(comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLREDUCE][1][i].name, pname) == 0)
- {
- comm_ptr->mpid.opt_protocol[PAMI_XFER_ALLREDUCE][0] =
- comm_ptr->mpid.coll_algorithm[PAMI_XFER_ALLREDUCE][1][i];
- memcpy(&comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLREDUCE][0],
- &comm_ptr->mpid.coll_metadata[PAMI_XFER_ALLREDUCE][1][i],
- sizeof(pami_metadata_t));
- if(fca_enabled == 1)
- {
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][0] = MPID_COLL_CHECK_FN_REQUIRED;
- if(user_range_hi != -1)
- comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0] = user_range_hi;
- /*SSS: Otherwise another protocol may get selected in mpido_allreduce if we don't set this flag here*/
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][1] = MPID_COLL_CHECK_FN_REQUIRED;
- }
- else
- {
- /* Short is good for up to 512 bytes... but it's a query protocol */
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][0] = MPID_COLL_QUERY;
- /* MPICH above that ... when short query fails */
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][1] = MPID_COLL_USE_MPICH;
- }
- comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLREDUCE] = MPID_COLL_OPTIMIZED;
-
- opt_proto = i;
- }
- }
- if(opt_proto == -1)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm_ptr->rank == 0)
- fprintf(stderr,"Optimized allreduce falls back to MPICH\n");
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][0] = MPID_COLL_USE_MPICH;
- comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][1] = MPID_COLL_USE_MPICH;
- }
- TRACE_ERR("Done setting optimized allreduce protocols\n");
- }
-
-
- if(MPIDI_Process.optimized.select_colls != 2)
- {
- for(i = 0; i < PAMI_XFER_COUNT; i++)
- {
- if(i == PAMI_XFER_AMBROADCAST || i == PAMI_XFER_AMSCATTER ||
- i == PAMI_XFER_AMGATHER || i == PAMI_XFER_AMREDUCE)
- continue;
- if(comm_ptr->mpid.user_selected_type[i] != MPID_COLL_OPTIMIZED)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm_ptr->rank == 0)
- fprintf(stderr, "Collective wasn't selected for type %d,using MPICH (comm %p)\n", i, comm_ptr);
- comm_ptr->mpid.user_selected_type[i] = MPID_COLL_USE_MPICH;
- }
- }
- }
-
-
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm_ptr->rank == 0)
- {
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER] == MPID_COLL_OPTIMIZED)
- fprintf(stderr,"Selecting %s for opt barrier comm %p\n", comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BARRIER][0].name, comm_ptr);
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLGATHERV_INT] == MPID_COLL_OPTIMIZED)
- fprintf(stderr,"Selecting %s for opt allgatherv comm %p\n", comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLGATHERV_INT][0].name, comm_ptr);
- if(comm_ptr->mpid.must_query[PAMI_XFER_ALLGATHERV_INT][0] == MPID_COLL_USE_MPICH)
- fprintf(stderr,"Selecting MPICH for allgatherv below %d size comm %p\n", comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLGATHERV_INT][0], comm_ptr);
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_GATHER] == MPID_COLL_USE_MPICH)
- fprintf(stderr,"Selecting MPICH for gather comm %p\n", comm_ptr);
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTER] == MPID_COLL_USE_MPICH)
- fprintf(stderr,"Selecting MPICH for scatter comm %p\n", comm_ptr);
- else if(comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTER] == MPID_COLL_OPTIMIZED)
- fprintf(stderr,"Selecting %s for scatter comm %p\n",
- comm_ptr->mpid.opt_protocol_md[PAMI_XFER_SCATTER][0].name,
- comm_ptr);
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTERV_INT] == MPID_COLL_USE_MPICH)
- fprintf(stderr,"Selecting MPICH for scatterv comm %p\n", comm_ptr);
- else if(comm_ptr->mpid.user_selected_type[PAMI_XFER_SCATTERV_INT] == MPID_COLL_OPTIMIZED)
- fprintf(stderr,"Selecting %s for scatterv comm %p\n",
- comm_ptr->mpid.opt_protocol_md[PAMI_XFER_SCATTERV_INT][0].name,
- comm_ptr);
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST] == MPID_COLL_OPTIMIZED)
- fprintf(stderr,"Selecting %s for opt bcast up to size %d comm %p\n", comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][0].name,
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0], comm_ptr);
- if((comm_ptr->mpid.must_query[PAMI_XFER_BROADCAST][1] == MPID_COLL_NOQUERY) ||
- (comm_ptr->mpid.must_query[PAMI_XFER_BROADCAST][1] == MPID_COLL_ALWAYS_QUERY))
- fprintf(stderr,"Selecting %s (mustquery=%d) for opt bcast above size %d comm %p\n",
- comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BROADCAST][1].name,
- comm_ptr->mpid.must_query[PAMI_XFER_BROADCAST][1],
- comm_ptr->mpid.cutoff_size[PAMI_XFER_BROADCAST][0], comm_ptr);
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALLV_INT] == MPID_COLL_OPTIMIZED)
- fprintf(stderr,"Selecting %s for opt alltoallv comm %p\n", comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLTOALLV_INT][0].name, comm_ptr);
- if(comm_ptr->mpid.user_selected_type[PAMI_XFER_ALLTOALL] == MPID_COLL_OPTIMIZED)
- fprintf(stderr,"Selecting %s for opt alltoall comm %p\n", comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLTOALL][0].name, comm_ptr);
- if(comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][0] == MPID_COLL_USE_MPICH)
- fprintf(stderr,"Selecting MPICH for allreduce below %d size comm %p\n", comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0], comm_ptr);
- else
- {
- if(comm_ptr->mpid.query_cached_allreduce != MPID_COLL_USE_MPICH)
- {
- fprintf(stderr,"Selecting %s for double sum/min/max ops allreduce, query: %d comm %p\n",
- comm_ptr->mpid.cached_allreduce_md.name, comm_ptr->mpid.query_cached_allreduce, comm_ptr);
- }
- fprintf(stderr,"Selecting %s for other operations allreduce up to %d comm %p\n",
- comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLREDUCE][0].name,
- comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0], comm_ptr);
- }
- if(comm_ptr->mpid.must_query[PAMI_XFER_ALLREDUCE][1] == MPID_COLL_USE_MPICH)
- fprintf(stderr,"Selecting MPICH for allreduce above %d size comm %p\n", comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0], comm_ptr);
- else
- {
- if(comm_ptr->mpid.query_cached_allreduce != MPID_COLL_USE_MPICH)
- {
- fprintf(stderr,"Selecting %s for double sum/min/max ops allreduce, above %d query: %d comm %p\n",
- comm_ptr->mpid.cached_allreduce_md.name,
- comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0],
- comm_ptr->mpid.query_cached_allreduce, comm_ptr);
- }
- else
- {
- fprintf(stderr,"Selecting MPICH for double sum/min/max ops allreduce, above %d size comm %p\n",
- comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0], comm_ptr);
- }
- fprintf(stderr,"Selecting %s for other operations allreduce over %d comm %p\n",
- comm_ptr->mpid.opt_protocol_md[PAMI_XFER_ALLREDUCE][1].name,
- comm_ptr->mpid.cutoff_size[PAMI_XFER_ALLREDUCE][0], comm_ptr);
- }
- }
-
- TRACE_ERR("Leaving MPIDI_Comm_coll_select\n");
-
-}
-
diff --git a/src/mpid/pamid/src/comm/mpid_selectcolls.c b/src/mpid/pamid/src/comm/mpid_selectcolls.c
deleted file mode 100644
index db4ac0c..0000000
--- a/src/mpid/pamid/src/comm/mpid_selectcolls.c
+++ /dev/null
@@ -1,746 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/comm/mpid_collselect.c
- * \brief Code for setting up collectives per geometry/communicator
- */
-
-/*#define TRACE_ON */
-
-#include <mpidimpl.h>
-
-pami_metadata_t ext_metadata;
-advisor_algorithm_t ext_algorithms[1];
-external_algorithm_t ext_algorithm;
-
-#define MPIDI_UPDATE_COLLSEL_EXT_ALGO(cb,nm,xfer_type) { \
- ext_algorithm.callback = cb; \
- ext_algorithm.cookie = comm; \
- ext_metadata.name = nm; \
- ext_algorithms[0].algorithm.external = ext_algorithm; \
- ext_algorithms[0].metadata = &ext_metadata; \
- ext_algorithms[0].algorithm_type = COLLSEL_EXTERNAL_ALGO; \
- pamix_collsel_register_algorithms(MPIDI_Collsel_advisor_table, \
- comm->mpid.geometry, \
- xfer_type, \
- &ext_algorithms[0], \
- 1); \
-}
-
-
-pami_result_t MPIDI_Register_algorithms_ext(void *cookie,
- pami_xfer_type_t collective,
- advisor_algorithm_t **algorithms,
- size_t *num_algorithms)
-{
- external_algorithm_fn callback;
- char *algoname;
-
- switch(collective)
- {
- case PAMI_XFER_BROADCAST: callback = MPIDO_CSWrapper_bcast; algoname = "EXT:Bcast:P2P:P2P"; break;
- case PAMI_XFER_ALLREDUCE: callback = MPIDO_CSWrapper_allreduce; algoname = "EXT:Allreduce:P2P:P2P"; break;
- case PAMI_XFER_REDUCE: callback = MPIDO_CSWrapper_reduce; algoname = "EXT:Reduce:P2P:P2P"; break;
- case PAMI_XFER_ALLGATHER: callback = MPIDO_CSWrapper_allgather; algoname = "EXT:Allgather:P2P:P2P"; break;
- case PAMI_XFER_ALLGATHERV_INT: callback = MPIDO_CSWrapper_allgatherv; algoname = "EXT:Allgatherv:P2P:P2P"; break;
- case PAMI_XFER_SCATTER: callback = MPIDO_CSWrapper_scatter; algoname = "EXT:Scatter:P2P:P2P"; break;
- case PAMI_XFER_SCATTERV_INT: callback = MPIDO_CSWrapper_scatterv; algoname = "EXT:Scatterv:P2P:P2P"; break;
- case PAMI_XFER_GATHER: callback = MPIDO_CSWrapper_gather; algoname = "EXT:Gather:P2P:P2P"; break;
- case PAMI_XFER_GATHERV_INT: callback = MPIDO_CSWrapper_gatherv; algoname = "EXT:Gatherv:P2P:P2P"; break;
- case PAMI_XFER_BARRIER: callback = MPIDO_CSWrapper_barrier; algoname = "EXT:Barrier:P2P:P2P"; break;
- case PAMI_XFER_ALLTOALL: callback = MPIDO_CSWrapper_alltoall; algoname = "EXT:Alltoall:P2P:P2P"; break;
- case PAMI_XFER_ALLTOALLV_INT: callback = MPIDO_CSWrapper_alltoallv; algoname = "EXT:Alltoallv:P2P:P2P"; break;
- case PAMI_XFER_SCAN: callback = MPIDO_CSWrapper_scan; algoname = "EXT:Scan:P2P:P2P"; break;
- case PAMI_XFER_ALLGATHERV:
- case PAMI_XFER_SCATTERV:
- case PAMI_XFER_GATHERV:
- case PAMI_XFER_ALLTOALLV:
- case PAMI_XFER_REDUCE_SCATTER:
- *num_algorithms = 0;
- return PAMI_SUCCESS;
- default: return -1;
- }
- *num_algorithms = 1;
- ext_algorithm.callback = callback;
- ext_algorithm.cookie = cookie;
- ext_metadata.name = algoname;
- ext_algorithms[0].algorithm.external = ext_algorithm;
- ext_algorithms[0].metadata = &ext_metadata;
- ext_algorithms[0].algorithm_type = COLLSEL_EXTERNAL_ALGO;
- *algorithms = &ext_algorithms[0];
- return PAMI_SUCCESS;
-}
-
-static char* MPIDI_Coll_type_name(int i)
-{
- switch(i)
- {
- case 0: return("Broadcast");
- case 1: return("Allreduce");
- case 2: return("Reduce");
- case 3: return("Allgather");
- case 4: return("Allgatherv");
- case 5: return("Allgatherv_int");
- case 6: return("Scatter");
- case 7: return("Scatterv");
- case 8: return("Scatterv_int");
- case 9: return("Gather");
- case 10: return("Gatherv");
- case 11: return("Gatherv_int");
- case 12: return("Barrier");
- case 13: return("Alltoall");
- case 14: return("Alltoallv");
- case 15: return("Alltoallv_int");
- case 16: return("Scan");
- case 17: return("Reduce_scatter");
- default: return("AM Collective");
- }
-}
-static void MPIDI_Update_coll(pami_algorithm_t coll,
- int type,
- int index,
- MPID_Comm *comm);
-
-static void MPIDI_Update_coll(pami_algorithm_t coll,
- int type, /* must query vs always works */
- int index,
- MPID_Comm *comm)
-{
-
- comm->mpid.user_selected_type[coll] = type;
- TRACE_ERR("Update_coll for protocol %s, type: %d index: %d\n",
- comm->mpid.coll_metadata[coll][type][index].name, type, index);
-
- /* Are we in the 'must query' list? If so determine how "bad" it is */
- if(type == MPID_COLL_QUERY)
- {
- /* First, is a check always required? */
- if(comm->mpid.coll_metadata[coll][type][index].check_correct.values.checkrequired)
- {
- TRACE_ERR("Protocol %s check_fn required always\n", comm->mpid.coll_metadata[coll][type][index].name);
- /* We must have a check_fn */
- MPID_assert_always(comm->mpid.coll_metadata[coll][type][index].check_fn !=NULL);
- comm->mpid.user_selected_type[coll] = MPID_COLL_CHECK_FN_REQUIRED;
- }
- else if(comm->mpid.coll_metadata[coll][type][index].check_fn != NULL)
- {
- /* For now, if there's a check_fn we will always call it and not cache.
- We *could* be smarter about this eventually. */
- TRACE_ERR("Protocol %s setting to always query/call check_fn\n", comm->mpid.coll_metadata[coll][type][index].name);
- comm->mpid.user_selected_type[coll] = MPID_COLL_CHECK_FN_REQUIRED;
- }
- else /* No check fn but we still need to check metadata bits (query protocol) */
- {
- TRACE_ERR("Protocol %s setting to always query/no check_fn\n", comm->mpid.coll_metadata[coll][type][index].name);
- comm->mpid.user_selected_type[coll] = MPID_COLL_ALWAYS_QUERY;
- }
-
- }
-
- comm->mpid.user_selected[coll] =
- comm->mpid.coll_algorithm[coll][type][index];
-
- memcpy(&comm->mpid.user_metadata[coll],
- &comm->mpid.coll_metadata[coll][type][index],
- sizeof(pami_metadata_t));
-}
-
-static void MPIDI_Check_preallreduce(char *env, MPID_Comm *comm, char *name, int constant)
-{
- /* If a given protocol only requires a check for nonlocal conditions and preallreduce
- * is turned off, we can consider it a always works protocol instead
- */
- char *envopts = getenv(env);
- if(envopts != NULL)
- {
- if(strncasecmp(env, "N", 1) == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Bypassing breallreduce for %s\n", name);
- comm->mpid.preallreduces[constant] = 0;
- }
- }
-}
-static int MPIDI_Check_protocols(char *names[], MPID_Comm *comm, char *name, int constant)
-{
- int i = 0;
- char *envopts;
- for(;; ++i)
- {
- if(names[i] == NULL)
- return 0;
- envopts = getenv(names[i]);
- if(envopts != NULL)
- break;
- }
- /* Now, change it if we have a match */
- if(envopts != NULL)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Checking %s against known %s protocols\n", envopts, name);
- /* Check if MPICH was specifically requested */
- if(strcasecmp(envopts, "MPICH") == 0)
- {
- TRACE_ERR("Selecting MPICH for %s\n", name);
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting MPICH for %d (%s)\n", constant, name);
- comm->mpid.user_selected_type[constant] = MPID_COLL_USE_MPICH;
- comm->mpid.user_selected[constant] = 0;
- return 0;
- }
-
- for(i=0; i < comm->mpid.coll_count[constant][0];i++)
- {
- if(strncasecmp(envopts, comm->mpid.coll_metadata[constant][0][i].name,strlen(envopts)) == 0)
- {
- MPIDI_Update_coll(constant, MPID_COLL_NOQUERY, i, comm);
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"setting %s as default %s for comm %p\n", comm->mpid.coll_metadata[constant][0][i].name, name, comm);
- return 0;
- }
- }
- for(i=0; i < comm->mpid.coll_count[constant][1];i++)
- {
- if(strncasecmp(envopts, comm->mpid.coll_metadata[constant][1][i].name,strlen(envopts)) == 0)
- {
- TRACE_ERR("Calling updatecoll...\n");
- MPIDI_Update_coll(constant, MPID_COLL_QUERY, i, comm);
- TRACE_ERR("Done calling update coll\n");
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"setting (query required protocol) %s as default %s for comm %p\n", comm->mpid.coll_metadata[constant][1][i].name, name, comm);
- return 0;
- }
- }
- /* An envvar was specified, so we should probably use MPICH of we can't find
- * the specified protocol */
- TRACE_ERR("Specified protocol %s was unavailable; using MPICH for %s\n", envopts, name);
- comm->mpid.user_selected_type[constant] = MPID_COLL_USE_MPICH;
- comm->mpid.user_selected[constant] = 0;
- return 0;
- }
- /* Looks like we didn't get anything, set NOSELECTION so automated selection can pick something */
- comm->mpid.user_selected_type[constant] = MPID_COLL_NOSELECTION;
- comm->mpid.user_selected[constant] = 0;
- return 0;
-}
-
-void MPIDI_Comm_coll_envvars(MPID_Comm *comm)
-{
- char *envopts;
- int i;
- MPID_assert_always(comm!=NULL);
- TRACE_ERR("MPIDI_Comm_coll_envvars enter\n");
-
- /* Set up always-works defaults */
- for(i = 0; i < PAMI_XFER_COUNT; i++)
- {
- if(i == PAMI_XFER_AMBROADCAST || i == PAMI_XFER_AMSCATTER ||
- i == PAMI_XFER_AMGATHER || i == PAMI_XFER_AMREDUCE)
- continue;
-
- /* Initialize to noselection instead of noquery for PE/FCA stuff. Is this the right answer? */
- comm->mpid.user_selected_type[i] = MPID_COLL_NOSELECTION;
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Setting up collective %d on comm %p\n", i, comm);
- if(((comm->mpid.coll_count[i][0] == 0) && (comm->mpid.coll_count[i][1] == 0)) || MPIDI_Process.optimized.collectives == MPID_COLL_CUDA)
- {
- comm->mpid.user_selected_type[i] = MPID_COLL_USE_MPICH;
- comm->mpid.user_selected[i] = 0;
- }
- else if(comm->mpid.coll_count[i][0] != 0)
- {
- comm->mpid.user_selected[i] = comm->mpid.coll_algorithm[i][0][0];
- memcpy(&comm->mpid.user_metadata[i], &comm->mpid.coll_metadata[i][0][0],
- sizeof(pami_metadata_t));
- }
- else
- {
- MPIDI_Update_coll(i, MPID_COLL_QUERY, 0, comm);
- /* even though it's a query protocol, say NOSELECTION
- so the optcoll selection will override (maybe) */
- comm->mpid.user_selected_type[i] = MPID_COLL_NOSELECTION;
- }
- }
-
-
- TRACE_ERR("Checking env vars\n");
-
- MPIDI_Check_preallreduce("PAMID_COLLECTIVE_ALLGATHER_PREALLREDUCE", comm, "allgather",
- MPID_ALLGATHER_PREALLREDUCE);
-
- MPIDI_Check_preallreduce("PAMID_COLLECTIVE_ALLGATHERV_PREALLREDUCE", comm, "allgatherv",
- MPID_ALLGATHERV_PREALLREDUCE);
-
- MPIDI_Check_preallreduce("PAMID_COLLECTIVE_ALLREDUCE_PREALLREDUCE", comm, "allreduce",
- MPID_ALLREDUCE_PREALLREDUCE);
-
- MPIDI_Check_preallreduce("PAMID_COLLECTIVE_BCAST_PREALLREDUCE", comm, "broadcast",
- MPID_BCAST_PREALLREDUCE);
-
- MPIDI_Check_preallreduce("PAMID_COLLECTIVE_SCATTERV_PREALLREDUCE", comm, "scatterv",
- MPID_SCATTERV_PREALLREDUCE);
-
- {
- TRACE_ERR("Checking bcast\n");
- char* names[] = {"PAMID_COLLECTIVE_BCAST", "MP_S_MPI_BCAST", NULL};
- MPIDI_Check_protocols(names, comm, "broadcast", PAMI_XFER_BROADCAST);
- }
- {
- TRACE_ERR("Checking allreduce\n");
- char* names[] = {"PAMID_COLLECTIVE_ALLREDUCE", "MP_S_MPI_ALLREDUCE", NULL};
- MPIDI_Check_protocols(names, comm, "allreduce", PAMI_XFER_ALLREDUCE);
- }
- {
- TRACE_ERR("Checking barrier\n");
- char* names[] = {"PAMID_COLLECTIVE_BARRIER", "MP_S_MPI_BARRIER", NULL};
- MPIDI_Check_protocols(names, comm, "barrier", PAMI_XFER_BARRIER);
- }
- {
- TRACE_ERR("Checking alltaoll\n");
- char* names[] = {"PAMID_COLLECTIVE_ALLTOALL", "MP_S_MPI_ALLTOALL", NULL};
- MPIDI_Check_protocols(names, comm, "alltoall", PAMI_XFER_ALLTOALL);
- }
- comm->mpid.optreduce = 0;
- envopts = getenv("PAMID_COLLECTIVE_REDUCE");
- if(envopts != NULL)
- {
- if(strcasecmp(envopts, "GLUE_ALLREDUCE") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue allreduce for reduce\n");
- comm->mpid.optreduce = 1;
- }
- }
- /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- {
- TRACE_ERR("Checking reduce\n");
- char* names[] = {"PAMID_COLLECTIVE_REDUCE", "MP_S_MPI_REDUCE", NULL};
- MPIDI_Check_protocols(names, comm, "reduce", PAMI_XFER_REDUCE);
- }
- {
- TRACE_ERR("Checking alltoallv\n");
- char* names[] = {"PAMID_COLLECTIVE_ALLTOALLV", "MP_S_MPI_ALLTOALLV", NULL};
- MPIDI_Check_protocols(names, comm, "alltoallv", PAMI_XFER_ALLTOALLV_INT);
- }
- {
- TRACE_ERR("Checking gatherv\n");
- char* names[] = {"PAMID_COLLECTIVE_GATHERV", "MP_S_MPI_GATHERV", NULL};
- MPIDI_Check_protocols(names, comm, "gatherv", PAMI_XFER_GATHERV_INT);
- }
- {
- TRACE_ERR("Checking scan\n");
- char* names[] = {"PAMID_COLLECTIVE_SCAN", "MP_S_MPI_SCAN", NULL};
- MPIDI_Check_protocols(names, comm, "scan", PAMI_XFER_SCAN);
- }
-
- comm->mpid.scattervs[0] = comm->mpid.scattervs[1] = 0;
-
- TRACE_ERR("Checking scatterv\n");
- envopts = getenv("PAMID_COLLECTIVE_SCATTERV");
- if(envopts != NULL)
- {
- if(strcasecmp(envopts, "GLUE_BCAST") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue bcast for scatterv\n");
- comm->mpid.scattervs[0] = 1;
- }
- else if(strcasecmp(envopts, "GLUE_ALLTOALLV") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue alltoallv for scatterv\n");
- comm->mpid.scattervs[1] = 1;
- }
- }
- { /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_SCATTERV", "MP_S_MPI_SCATTERV", NULL};
- MPIDI_Check_protocols(names, comm, "scatterv", PAMI_XFER_SCATTERV_INT);
- }
-
- TRACE_ERR("Checking scatter\n");
- comm->mpid.optscatter = 0;
- envopts = getenv("PAMID_COLLECTIVE_SCATTER");
- if(envopts != NULL)
- {
- if(strcasecmp(envopts, "GLUE_BCAST") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue_bcast for scatter\n");
- comm->mpid.optscatter = 1;
- }
- }
- { /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_SCATTER", "MP_S_MPI_SCATTER", NULL};
- MPIDI_Check_protocols(names, comm, "scatter", PAMI_XFER_SCATTER);
- }
-
- TRACE_ERR("Checking allgather\n");
- comm->mpid.allgathers[0] = comm->mpid.allgathers[1] = comm->mpid.allgathers[2] = 0;
- envopts = getenv("PAMID_COLLECTIVE_ALLGATHER");
- if(envopts != NULL)
- {
- if(strcasecmp(envopts, "GLUE_ALLREDUCE") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue_allreduce for allgather\n");
- comm->mpid.allgathers[0] = 1;
- }
-
- else if(strcasecmp(envopts, "GLUE_BCAST") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue_bcast for allgather\n");
- comm->mpid.allgathers[1] = 1;
- }
-
- else if(strcasecmp(envopts, "GLUE_ALLTOALL") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue_alltoall for allgather\n");
- comm->mpid.allgathers[2] = 1;
- }
- }
- { /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_ALLGATHER", "MP_S_MPI_ALLGATHER", NULL};
- MPIDI_Check_protocols(names, comm, "allgather", PAMI_XFER_ALLGATHER);
- }
-
- TRACE_ERR("Checking allgatherv\n");
- comm->mpid.allgathervs[0] = comm->mpid.allgathervs[1] = comm->mpid.allgathervs[2] = 0;
- envopts = getenv("PAMID_COLLECTIVE_ALLGATHERV");
- if(envopts != NULL)
- {
- if(strcasecmp(envopts, "GLUE_ALLREDUCE") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue_allreduce for allgatherv\n");
- comm->mpid.allgathervs[0] = 1;
- }
-
- else if(strcasecmp(envopts, "GLUE_BCAST") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue_bcast for allgatherv\n");
- comm->mpid.allgathervs[1] = 1;
- }
-
- else if(strcasecmp(envopts, "GLUE_ALLTOALL") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue_alltoall for allgatherv\n");
- comm->mpid.allgathervs[2] = 1;
- }
- }
- { /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_ALLGATHERV", "MP_S_MPI_ALLGATHERV", NULL};
- MPIDI_Check_protocols(names, comm, "allgatherv", PAMI_XFER_ALLGATHERV_INT);
- }
-
- TRACE_ERR("CHecking gather\n");
- comm->mpid.optgather = 0;
- envopts = getenv("PAMID_COLLECTIVE_GATHER");
- if(envopts != NULL)
- {
- if(strcasecmp(envopts, "GLUE_REDUCE") == 0)
- {
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- fprintf(stderr,"Selecting glue reduce for gather\n");
- comm->mpid.optgather = 1;
- }
- }
- { /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_GATHER", "MP_S_MPI_GATHER", NULL};
- MPIDI_Check_protocols(names, comm, "gather", PAMI_XFER_GATHER);
- }
-
- /* If automatic collective selection is enabled and user didn't specifically overwrite
- it, then use auto coll sel.. Otherwise, go through the manual coll sel code path. */
- comm->mpid.collsel_fast_query = NULL; /* Init to NULL.. Should only have a value if we create query */
- if(MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_NONE && MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_TUNE && comm->local_size > 1)
- {
- /* Create a fast query object, cache it on the comm/geometry and use it in each collective */
- pami_extension_collsel_query_create pamix_collsel_query_create =
- (pami_extension_collsel_query_create) PAMI_Extension_symbol(MPIDI_Collsel_extension,
- "Collsel_query_create");
- if(pamix_collsel_query_create != NULL)
- {
- pamix_collsel_query_create(MPIDI_Collsel_advisor_table, comm->mpid.geometry, &(comm->mpid.collsel_fast_query));
- }
-
- MPIDI_Pamix_collsel_advise = /* Get the function pointer and cache it */
- (pami_extension_collsel_advise) PAMI_Extension_symbol(MPIDI_Collsel_extension,
- "Collsel_advise");
-
- pami_extension_collsel_register_algorithms pamix_collsel_register_algorithms =
- (pami_extension_collsel_register_algorithms) PAMI_Extension_symbol(MPIDI_Collsel_extension,
- "Collsel_register_algorithms");
- if(pamix_collsel_register_algorithms != NULL)
- {
-
- /* ************ Barrier ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_BARRIER) &&
- comm->mpid.user_selected_type[PAMI_XFER_BARRIER] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Barrier = MPIDO_Barrier_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_barrier,"EXT:Barrier:P2P:P2P",PAMI_XFER_BARRIER);
- }
- /* ************ Bcast ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_BCAST) &&
- comm->mpid.user_selected_type[PAMI_XFER_BROADCAST] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Bcast = MPIDO_Bcast_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_bcast,"EXT:Bcast:P2P:P2P",PAMI_XFER_BROADCAST);
- }
- /* ************ Allreduce ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_ALLREDUCE) &&
- comm->mpid.user_selected_type[PAMI_XFER_ALLREDUCE] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Allreduce = MPIDO_Allreduce_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_allreduce,"EXT:Allreduce:P2P:P2P",PAMI_XFER_ALLREDUCE);
- }
- /* ************ Allgather ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_ALLGATHER) &&
- comm->mpid.user_selected_type[PAMI_XFER_ALLGATHER] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Allgather = MPIDO_Allgather_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_allgather,"EXT:Allgather:P2P:P2P",PAMI_XFER_ALLGATHER);
- }
- /* ************ Allgatherv ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_ALLGATHERV) &&
- comm->mpid.user_selected_type[PAMI_XFER_ALLGATHERV_INT] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Allgatherv = MPIDO_Allgatherv_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_allgatherv,"EXT:Allgatherv:P2P:P2P",PAMI_XFER_ALLGATHERV_INT);
- }
- /* ************ Scatterv ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_SCATTERV) &&
- comm->mpid.user_selected_type[PAMI_XFER_SCATTERV_INT] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Scatterv = MPIDO_Scatterv_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_scatterv,"EXT:Scatterv:P2P:P2P",PAMI_XFER_SCATTERV_INT);
- }
- /* ************ Scatter ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_SCATTER) &&
- comm->mpid.user_selected_type[PAMI_XFER_SCATTER] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Scatter = MPIDO_Scatter_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_scatter,"EXT:Scatter:P2P:P2P",PAMI_XFER_SCATTER);
- }
- /* ************ Gather ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_GATHER) &&
- comm->mpid.user_selected_type[PAMI_XFER_GATHER] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Gather = MPIDO_Gather_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_gather,"EXT:Gather:P2P:P2P",PAMI_XFER_GATHER);
- }
- /* ************ Alltoallv ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_ALLTOALLV) &&
- comm->mpid.user_selected_type[PAMI_XFER_ALLTOALLV_INT] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Alltoallv = MPIDO_Alltoallv_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_alltoallv,"EXT:Alltoallv:P2P:P2P",PAMI_XFER_ALLTOALLV_INT);
- }
- /* ************ Alltoall ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_ALLTOALL) &&
- comm->mpid.user_selected_type[PAMI_XFER_ALLTOALL] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Alltoall = MPIDO_Alltoall_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_alltoall,"EXT:Alltoall:P2P:P2P",PAMI_XFER_ALLTOALL);
- }
- /* ************ Gatherv ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_GATHERV) &&
- comm->mpid.user_selected_type[PAMI_XFER_GATHERV_INT] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Gatherv = MPIDO_Gatherv_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_gatherv,"EXT:Gatherv:P2P:P2P",PAMI_XFER_GATHERV_INT);
- }
- /* ************ Reduce ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_REDUCE) &&
- comm->mpid.user_selected_type[PAMI_XFER_REDUCE] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Reduce = MPIDO_Reduce_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_reduce,"EXT:Reduce:P2P:P2P",PAMI_XFER_REDUCE);
- }
- /* ************ Scan ************ */
- if((MPIDI_Process.optimized.auto_select_colls & MPID_AUTO_SELECT_COLLS_SCAN) &&
- comm->mpid.user_selected_type[PAMI_XFER_SCAN] == MPID_COLL_NOSELECTION)
- {
- comm->coll_fns->Scan = MPIDO_Scan_simple;
- MPIDI_UPDATE_COLLSEL_EXT_ALGO(MPIDO_CSWrapper_scan,"EXT:Scan:P2P:P2P",PAMI_XFER_SCAN);
- }
- }
- }
- TRACE_ERR("MPIDI_Comm_coll_envvars exit\n");
-}
-
-
-/* Determine how many of each collective type this communicator supports */
-void MPIDI_Comm_coll_query(MPID_Comm *comm)
-{
- TRACE_ERR("MPIDI_Comm_coll_query enter\n");
- int rc = 0, i, j;
- size_t num_algorithms[2];
- TRACE_ERR("Getting geometry from comm %p\n", comm);
- pami_geometry_t *geom = comm->mpid.geometry;;
- for(i = 0; i < PAMI_XFER_COUNT; i++)
- {
- if(i == PAMI_XFER_AMBROADCAST || i == PAMI_XFER_AMSCATTER ||
- i == PAMI_XFER_AMGATHER || i == PAMI_XFER_AMREDUCE)
- continue;
- rc = PAMI_Geometry_algorithms_num(geom,
- i,
- num_algorithms);
- TRACE_ERR("Num algorithms of type %d: %zd %zd\n", i, num_algorithms[0], num_algorithms[1]);
- if(rc != PAMI_SUCCESS)
- {
- fprintf(stderr,"PAMI_Geometry_algorithms_num returned %d for type %d\n", rc, i);
- continue;
- }
-
- comm->mpid.coll_count[i][0] = 0;
- comm->mpid.coll_count[i][1] = 0;
- if(num_algorithms[0] || num_algorithms[1])
- {
- comm->mpid.coll_algorithm[i][0] = (pami_algorithm_t *)
- MPIU_Malloc(sizeof(pami_algorithm_t) * num_algorithms[0]);
- comm->mpid.coll_metadata[i][0] = (pami_metadata_t *)
- MPIU_Malloc(sizeof(pami_metadata_t) * num_algorithms[0]);
- comm->mpid.coll_algorithm[i][1] = (pami_algorithm_t *)
- MPIU_Malloc(sizeof(pami_algorithm_t) * num_algorithms[1]);
- comm->mpid.coll_metadata[i][1] = (pami_metadata_t *)
- MPIU_Malloc(sizeof(pami_metadata_t) * num_algorithms[1]);
- comm->mpid.coll_count[i][0] = num_algorithms[0];
- comm->mpid.coll_count[i][1] = num_algorithms[1];
-
- /* Despite the bad name, this looks at algorithms associated with
- * the geometry, NOT inherent physical properties of the geometry*/
-
- /* BES TODO I am assuming all contexts have the same algorithms. Probably
- * need to investigate that assumption
- */
- rc = PAMI_Geometry_algorithms_query(geom,
- i,
- comm->mpid.coll_algorithm[i][0],
- comm->mpid.coll_metadata[i][0],
- num_algorithms[0],
- comm->mpid.coll_algorithm[i][1],
- comm->mpid.coll_metadata[i][1],
- num_algorithms[1]);
- if(rc != PAMI_SUCCESS)
- {
- fprintf(stderr,"PAMI_Geometry_algorithms_query returned %d for type %d\n", rc, i);
- continue;
- }
-
- if(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_0 && comm->rank == 0)
- {
- for(j = 0; j < num_algorithms[0]; j++)
- fprintf(stderr,"comm[%p] coll type %d (%s), algorithm %d 0: %s\n", comm, i, MPIDI_Coll_type_name(i), j, comm->mpid.coll_metadata[i][0][j].name);
- for(j = 0; j < num_algorithms[1]; j++)
- fprintf(stderr,"comm[%p] coll type %d (%s), algorithm %d 1: %s\n", comm, i, MPIDI_Coll_type_name(i), j, comm->mpid.coll_metadata[i][1][j].name);
- if(i == PAMI_XFER_ALLGATHERV_INT || i == PAMI_XFER_ALLGATHER)
- {
- fprintf(stderr,"comm[%p] coll type %d (%s), \"glue\" algorithm: GLUE_ALLREDUCE\n", comm, i, MPIDI_Coll_type_name(i));
- fprintf(stderr,"comm[%p] coll type %d (%s), \"glue\" algorithm: GLUE_BCAST\n", comm, i, MPIDI_Coll_type_name(i));
- fprintf(stderr,"comm[%p] coll type %d (%s), \"glue\" algorithm: GLUE_ALLTOALL\n", comm, i, MPIDI_Coll_type_name(i));
- }
- if(i == PAMI_XFER_SCATTERV_INT)
- {
- fprintf(stderr,"comm[%p] coll type %d (%s), \"glue\" algorithm: GLUE_BCAST\n", comm, i, MPIDI_Coll_type_name(i));
- fprintf(stderr,"comm[%p] coll type %d (%s), \"glue\" algorithm: GLUE_ALLTOALLV\n", comm, i, MPIDI_Coll_type_name(i));
- }
- if(i == PAMI_XFER_SCATTER)
- {
- fprintf(stderr,"comm[%p] coll type %d (%s), \"glue\" algorithm: GLUE_BCAST\n", comm, i, MPIDI_Coll_type_name(i));
- }
- if(i == PAMI_XFER_REDUCE)
- {
- fprintf(stderr,"comm[%p] coll type %d (%s), \"glue\" algorithm: GLUE_ALLREDUCE\n", comm, i, MPIDI_Coll_type_name(i));
- }
- }
- }
- }
- /* Determine if we have protocols for these maybe, rather than just setting them? */
- comm->coll_fns->Barrier = MPIDO_Barrier;
- comm->coll_fns->Bcast = MPIDO_Bcast;
- comm->coll_fns->Allreduce = MPIDO_Allreduce;
- comm->coll_fns->Allgather = MPIDO_Allgather;
- comm->coll_fns->Allgatherv = MPIDO_Allgatherv;
- comm->coll_fns->Scatterv = MPIDO_Scatterv;
- comm->coll_fns->Scatter = MPIDO_Scatter;
- comm->coll_fns->Gather = MPIDO_Gather;
- comm->coll_fns->Alltoallv = MPIDO_Alltoallv;
- comm->coll_fns->Alltoall = MPIDO_Alltoall;
- comm->coll_fns->Gatherv = MPIDO_Gatherv;
- comm->coll_fns->Reduce = MPIDO_Reduce;
- comm->coll_fns->Scan = MPIDO_Scan;
- comm->coll_fns->Exscan = MPIDO_Exscan;
- comm->coll_fns->Reduce_scatter_block = MPIDO_Reduce_scatter_block;
- comm->coll_fns->Reduce_scatter = MPIDO_Reduce_scatter;
-
- /* MPI-3 Support, no optimized collectives hooked in yet */
- comm->coll_fns->Ibarrier_sched = MPIR_Ibarrier_intra;
- comm->coll_fns->Ibcast_sched = MPIR_Ibcast_intra;
- comm->coll_fns->Igather_sched = MPIR_Igather_intra;
- comm->coll_fns->Igatherv_sched = MPIR_Igatherv;
- comm->coll_fns->Iscatter_sched = MPIR_Iscatter_intra;
- comm->coll_fns->Iscatterv_sched = MPIR_Iscatterv;
- comm->coll_fns->Iallgather_sched = MPIR_Iallgather_intra;
- comm->coll_fns->Iallgatherv_sched = MPIR_Iallgatherv_intra;
- comm->coll_fns->Ialltoall_sched = MPIR_Ialltoall_intra;
- comm->coll_fns->Ialltoallv_sched = MPIR_Ialltoallv_intra;
- comm->coll_fns->Ialltoallw_sched = MPIR_Ialltoallw_intra;
- comm->coll_fns->Iallreduce_sched = MPIR_Iallreduce_intra;
- comm->coll_fns->Ireduce_sched = MPIR_Ireduce_intra;
- comm->coll_fns->Ireduce_scatter_sched = MPIR_Ireduce_scatter_intra;
- comm->coll_fns->Ireduce_scatter_block_sched = MPIR_Ireduce_scatter_block_intra;
- comm->coll_fns->Iscan_sched = MPIR_Iscan_rec_dbl;
- comm->coll_fns->Iexscan_sched = MPIR_Iexscan;
- comm->coll_fns->Neighbor_allgather = MPIR_Neighbor_allgather_default;
- comm->coll_fns->Neighbor_allgatherv = MPIR_Neighbor_allgatherv_default;
- comm->coll_fns->Neighbor_alltoall = MPIR_Neighbor_alltoall_default;
- comm->coll_fns->Neighbor_alltoallv = MPIR_Neighbor_alltoallv_default;
- comm->coll_fns->Neighbor_alltoallw = MPIR_Neighbor_alltoallw_default;
- comm->coll_fns->Ineighbor_allgather = MPIR_Ineighbor_allgather_default;
- comm->coll_fns->Ineighbor_allgatherv = MPIR_Ineighbor_allgatherv_default;
- comm->coll_fns->Ineighbor_alltoall = MPIR_Ineighbor_alltoall_default;
- comm->coll_fns->Ineighbor_alltoallv = MPIR_Ineighbor_alltoallv_default;
- comm->coll_fns->Ineighbor_alltoallw = MPIR_Ineighbor_alltoallw_default;
-
- /* MPI-3 Support, optimized collectives hooked in */
- comm->coll_fns->Ibarrier_req = MPIDO_Ibarrier;
- comm->coll_fns->Ibcast_req = MPIDO_Ibcast;
- comm->coll_fns->Iallgather_req = MPIDO_Iallgather;
- comm->coll_fns->Iallgatherv_req = MPIDO_Iallgatherv;
- comm->coll_fns->Iallreduce_req = MPIDO_Iallreduce;
- comm->coll_fns->Ialltoall_req = MPIDO_Ialltoall;
- comm->coll_fns->Ialltoallv_req = MPIDO_Ialltoallv;
- comm->coll_fns->Ialltoallw_req = MPIDO_Ialltoallw;
- comm->coll_fns->Iexscan_req = MPIDO_Iexscan;
- comm->coll_fns->Igather_req = MPIDO_Igather;
- comm->coll_fns->Igatherv_req = MPIDO_Igatherv;
- comm->coll_fns->Ireduce_scatter_block_req = MPIDO_Ireduce_scatter_block;
- comm->coll_fns->Ireduce_scatter_req = MPIDO_Ireduce_scatter;
- comm->coll_fns->Ireduce_req = MPIDO_Ireduce;
- comm->coll_fns->Iscan_req = MPIDO_Iscan;
- comm->coll_fns->Iscatter_req = MPIDO_Iscatter;
- comm->coll_fns->Iscatterv_req = MPIDO_Iscatterv;
-
- TRACE_ERR("MPIDI_Comm_coll_query exit\n");
-}
-
diff --git a/src/mpid/pamid/src/dyntask/Makefile.mk b/src/mpid/pamid/src/dyntask/Makefile.mk
deleted file mode 100644
index 508de5d..0000000
--- a/src/mpid/pamid/src/dyntask/Makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c \
- src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c \
- src/mpid/pamid/src/dyntask/mpid_port.c \
- src/mpid/pamid/src/dyntask/mpidi_pg.c \
- src/mpid/pamid/src/dyntask/mpidi_port.c
-
-
-endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c b/src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
deleted file mode 100644
index acf9d47..0000000
--- a/src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-#include "mpidimpl.h"
-
-#ifdef DYNAMIC_TASKING
-
-extern conn_info *_conn_info_list;
-
-#define DISCONNECT_LAPI_XFER_TIMEOUT 5*60*1000000
-#define TOTAL_AM 3
-#define FIRST_AM 0
-#define SECOND_AM 1
-#define LAST_AM 2
-
-/* Returns time in micro seconds "double ticks" */
-#define CURTIME(ticks) { \
- struct timeval tp; \
- struct timezone tzp; \
- gettimeofday(&tp,&tzp); \
- ticks = (double) tp.tv_sec * 1000000 + (double) tp.tv_usec; \
-}
-
-
-/* Used inside termination message send by smaller task to larger task in discon
-nect */
-typedef struct {
- long long tranid;
- int whichAM;
-}AM_struct2;
-
-
-extern transactionID_struct *_transactionID_list;
-void MPIDI_get_allremote_leaders(int *tid_arr, MPID_Comm *comm_ptr);
-
-void MPIDI_send_AM_to_remote_leader_on_disconnect(int taskid, long long comm_cntr, int whichAM)
-{
- pami_send_immediate_t xferP;
-
- int rc, current_val;
- AM_struct2 AM_data;
- pami_endpoint_t dest;
-
- AM_data.tranid = comm_cntr;
- AM_data.whichAM = whichAM;
-
- memset(&xferP, 0, sizeof(pami_send_immediate_t));
- xferP.header.iov_base = (void*)&AM_data;
- xferP.header.iov_len = sizeof(AM_struct2);
- xferP.dispatch = (size_t)MPIDI_Protocols_Dyntask_disconnect;
-
- rc = PAMI_Endpoint_create(MPIDI_Client, taskid, 0, &dest);
- TRACE_ERR("PAMI_Resume to taskid=%d\n", taskid);
- PAMI_Resume(MPIDI_Context[0],
- &dest, 1);
-
- if(rc != 0)
- TRACE_ERR("PAMI_Endpoint_create failed\n");
-
- xferP.dest = dest;
-
- rc = PAMI_Send_immediate(MPIDI_Context[0], &xferP);
-}
-
-void MPIDI_Recvfrom_remote_world_disconnect(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- AM_struct2 *AM_data;
- long long tranid;
- int whichAM;
-
- AM_data = ((AM_struct2 *)_msginfo);
- tranid = AM_data->tranid;
- whichAM = AM_data->whichAM;
- MPIDI_increment_AM_cntr_for_tranid(tranid, whichAM);
-
- TRACE_ERR("MPIDI_Recvfrom_remote_world_disconnect: invoked for tranid = %lld, whichAM = %d \n",tranid, whichAM);
-
- return;
-}
-
-
-/**
- * Function to retreive the active message counter for a particular trasaction id.
- * This function is used inside disconnect routine.
- * whichAM = FIRST_AM/SECOND_AM/LAST_AM
- */
-int MPIDI_get_AM_cntr_for_tranid(long long tranid, int whichAM)
-{
- transactionID_struct *tridtmp;
-
- if(_transactionID_list == NULL)
- TRACE_ERR("MPIDI_get_AM_cntr_for_tranid - _transactionID_list is NULL\n");
-
- tridtmp = _transactionID_list;
-
- while(tridtmp != NULL) {
- if(tridtmp->tranid == tranid) {
- return tridtmp->cntr_for_AM[whichAM];
- }
- tridtmp = tridtmp->next;
- }
-
- return -1;
-}
-
-
-/**
- * Function used to gurantee the delivery of LAPI active message at the
- * destination. Called at the destination taskid and returns only whe
- * the expected LAPI active message is recived. If the sequence number
- * of the LAPI active message is LAST_AM, the other condition under which
- * this function may exit is if DISCONNECT_LAPI_XFER_TIMEOUT happens.
- */
-void MPIDI_wait_for_AM(long long tranid, int expected_AM, int whichAM)
-{
- double starttime, currtime, elapsetime;
- int rc, curr_AMcntr;
-
- rc = PAMI_Context_advance(MPIDI_Context[0], (size_t)100);
- if(whichAM == LAST_AM) {
- CURTIME(starttime)
- do {
- CURTIME(currtime)
- elapsetime = currtime - starttime;
-
- rc = PAMI_Context_advance(MPIDI_Context[0], (size_t)100);
- curr_AMcntr = MPIDI_get_AM_cntr_for_tranid(tranid, whichAM);
- /*TRACE_ERR("_try_to_disconnect: Looping in timer for TranID %lld, whichAM %d expected_AM = %d, Current AM = %d\n",tranid,whichAM,expected_AM,curr_AMcntr); */
- }while(curr_AMcntr != expected_AM && elapsetime < DISCONNECT_LAPI_XFER_TIMEOUT);
- }
- else {
- do {
- rc = PAMI_Context_advance(MPIDI_Context[0], (size_t)100);
- curr_AMcntr = MPIDI_get_AM_cntr_for_tranid(tranid, whichAM);
- /*TRACE_ERR("_try_to_disconnect: Looping in timer for TranID %lld, whichAM %d expected_AM = %d, Current AM = %d\n",tranid,whichAM,expected_AM,curr_AMcntr);*/
- }while(curr_AMcntr != expected_AM);
- }
-}
-
-/* function to swap two integers. Used inside function _qsort_dyntask below */
-static void _swap_dyntask(int t[],int i,int j)
-{
- int tmp;
-
- tmp = t[i];
- t[i] = t[j];
- t[j] = tmp;
-}
-
-/* qsort sorting function which is used only in this file */
-static void _qsort_dyntask(int t[],int left,int right)
-{
- int i,last;
-
- if(left >= right) return;
- last = left;
- for(i=left+1;i<=right;i++)
- if(t[i] < t[left])
- _swap_dyntask(t,++last,i);
- _swap_dyntask(t,left,last);
- _qsort_dyntask(t,left,last-1);
- _qsort_dyntask(t,last+1,right);
-}
-
-
-
-/*@
- MPID_Comm_disconnect - Disconnect a communicator
-
- Arguments:
-. comm_ptr - communicator
-
- Notes:
-
-.N Errors
-.N MPI_SUCCESS
-@*/
-int MPID_Comm_disconnect(MPID_Comm *comm_ptr)
-{
- int rc, i,j, k, ref_count,mpi_errno=0, probe_flag=0;
- pami_task_t *local_list;
- MPI_Status status;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIDI_PG_t *pg;
- int total_leaders=0, gsize;
- pami_task_t *leader_tids;
- int expected_firstAM=0, expected_secondAM=0, expected_lastAM=0;
- MPID_Comm *commworld_ptr;
- MPID_Group *group_ptr = NULL, *new_group_ptr = NULL;
- MPID_VCR *glist;
- MPID_Comm *lcomm;
- int *ranks;
- int local_tasks=0, localtasks_in_remglist=0;
- int jobIdSize=64;
- char jobId[jobIdSize];
- int MY_TASKID = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_TASK_ID ).value.intval;
-
- /*if( (comm_ptr->comm_kind == MPID_INTERCOMM) && (comm_ptr->mpid.world_ids != NULL)) { */
- if(comm_ptr->mpid.world_ids != NULL) {
- rc = MPID_Iprobe(comm_ptr->rank, MPI_ANY_TAG, comm_ptr, MPID_CONTEXT_INTER_PT2PT, &probe_flag, &status);
- if(rc || probe_flag) {
- TRACE_ERR("PENDING_PTP");
- exit(1);
- }
-
- /* make commSubWorld */
- {
- /* MPID_Comm_get_ptr( MPI_COMM_WORLD, commworld_ptr ); */
- commworld_ptr = MPIR_Process.comm_world;
- mpi_errno = MPIR_Comm_group_impl(commworld_ptr, &group_ptr);
- if (mpi_errno)
- {
- TRACE_ERR("Error while creating group_ptr from MPI_COMM_WORLD in MPIDI_Comm_create_from_pami_geom\n");
- return PAMI_ERROR;
- }
-
-
- glist = commworld_ptr->vcr;
- gsize = commworld_ptr->local_size;
- for(i=0;i<comm_ptr->local_size;i++) {
- for(j=0;j<gsize;j++) {
- if(comm_ptr->local_vcr[i]->taskid == glist[j]->taskid)
- local_tasks++;
- }
- }
-
- /**
- * Tasks belonging to the same local world may also be part of
- * the GROUPREMLIST, so these tasks will have to be use in addition
- * to the tasks in GROUPLIST to construct lcomm
- **/
- if(comm_ptr->comm_kind == MPID_INTERCOMM) {
- for(i=0;i<comm_ptr->remote_size;i++) {
- for(j=0;j<gsize;j++) {
- if(comm_ptr->vcr[i]->taskid == glist[j]->taskid) {
- local_tasks++;
- localtasks_in_remglist++;
- }
- }
- }
- }
- k=0;
- /* local_list = MPIU_Malloc(local_tasks*sizeof(pami_task_t)); */
- ranks = MPIU_Malloc(local_tasks*sizeof(int));
-
- for(i=0;i<comm_ptr->local_size;i++) {
- for(j=0;j<gsize;j++) {
- if(comm_ptr->local_vcr[i]->taskid == glist[j]->taskid)
- /* local_list[k] = glist[j]->taskid; */
- ranks[k++] = j;
- }
- }
- if((comm_ptr->comm_kind == MPID_INTERCOMM) && localtasks_in_remglist) {
- for(i=0;i<comm_ptr->remote_size;i++) {
- for(j=0;j<gsize;j++) {
- if(comm_ptr->vcr[i]->taskid == glist[j]->taskid)
- /* local_list[k] = glist[j]->taskid; */
- ranks[k++] = j;
- }
- }
- /* Sort the local_list when there are localtasks_in_remglist */
-/* _qsort_dyntask(local_list, 0, local_tasks-1); */
- _qsort_dyntask(ranks, 0, local_tasks-1);
- }
-
- /* Now we have all we need to create the new group. Create it */
- /* mpi_errno = MPIR_Group_incl_impl(group_ptr, local_tasks, ranks, &new_group_ptr); */
- mpi_errno = MPIR_Group_incl_impl(group_ptr, local_tasks, ranks, &new_group_ptr);
- if (mpi_errno)
- {
- TRACE_ERR("Error while creating new_group_ptr from group_ptr in MPIDI_Comm_create_from_pami_geom\n");
- return PAMI_ERROR;
- }
-
- /* Now create the communicator using the new_group_ptr */
- mpi_errno = MPIR_Comm_create_group(commworld_ptr, new_group_ptr, 0, &lcomm);
- /* mpi_errno = MPIR_Comm_create_intra(commworld_ptr, new_group_ptr, &lcomm); */
- if (mpi_errno)
- {
- TRACE_ERR("Error while creating new_comm_ptr from group_ptr in MPIDI_Comm_create_from_pami_geom\n");
- return PAMI_ERROR;
- }
-
-#if 0
- mpi_errno = MPIR_Comm_create(&lcomm);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Comm_create returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* fill in all the fields of lcomm. */
- if(localtasks_in_remglist==0) {
- lcomm->context_id = MPID_CONTEXT_SET_FIELD(DYNAMIC_PROC, comm_ptr->recvcontext_id, 1);
- lcomm->recvcontext_id = lcomm->context_id;
- } else {
- lcomm->context_id = MPID_CONTEXT_SET_FIELD(DYNAMIC_PROC, comm_ptr->recvcontext_id, 1);
- lcomm->recvcontext_id = MPID_CONTEXT_SET_FIELD(DYNAMIC_PROC, comm_ptr->context_id, 1);
- }
- TRACE_ERR("lcomm->context_id =%d\n", lcomm->context_id);
-
- /* sanity: the INVALID context ID value could potentially conflict with the
- * dynamic proccess space */
- MPIU_Assert(lcomm->context_id != MPIU_INVALID_CONTEXT_ID);
- MPIU_Assert(lcomm->recvcontext_id != MPIU_INVALID_CONTEXT_ID);
-
- /* FIXME - we probably need a unique context_id. */
-
- /* Fill in new intercomm */
- lcomm->comm_kind = MPID_INTRACOMM;
- lcomm->remote_size = lcomm->local_size = local_tasks;
-
- /* Set up VC reference table */
- mpi_errno = MPID_VCRT_Create(lcomm->remote_size, &lcomm->vcrt);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPID_VCRT_Create returned with mpi_errno=%d", mpi_errno);
- }
- MPID_VCRT_Add_ref(lcomm->vcrt);
- mpi_errno = MPID_VCRT_Get_ptr(lcomm->vcrt, &lcomm->vcr);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPID_VCRT_Get_ptr returned with mpi_errno=%d", mpi_errno);
- }
-
- for(i=0; i<local_tasks; i++) {
- if(MY_TASKID == local_list[i]) lcomm->rank = i;
- lcomm->vcr[i]->taskid = local_list[i];
- }
-#endif
-
- }
-
- TRACE_ERR("subcomm for disconnect is established local_tasks=%d calling MPIR_Barrier_intra\n", local_tasks);
- mpi_errno = MPIR_Barrier_intra(lcomm, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Barrier_intra returned with mpi_errno=%d\n", mpi_errno);
- }
- TRACE_ERR("after barrier in disconnect\n");
-
- if(MY_TASKID != comm_ptr->mpid.local_leader) {
- for(i=0; comm_ptr->mpid.world_ids[i] != -1; i++) {
- ref_count = MPIDI_Decrement_ref_count(comm_ptr->mpid.world_ids[i]);
- TRACE_ERR("ref_count=%d with world=%d comm_ptr=%x\n", ref_count, comm_ptr->mpid.world_ids[i], comm_ptr);
- if(ref_count == -1)
- TRACE_ERR("something is wrong\n");
- }
- }
-
- if(MY_TASKID == comm_ptr->mpid.local_leader) {
- PMI2_Job_GetId(jobId, jobIdSize);
- for(i=0;comm_ptr->mpid.world_ids[i]!=-1;i++) {
- if(atoi(jobId) != comm_ptr->mpid.world_ids[i])
- total_leaders++;
- }
- TRACE_ERR("total_leaders=%d\n", total_leaders);
- leader_tids = MPIU_Malloc(total_leaders*sizeof(int));
- MPIDI_get_allremote_leaders(leader_tids, comm_ptr);
-
- { /* First Pair of Send / Recv -- All smaller task send to all larger tasks */
- for(i=0;i<total_leaders;i++) {
- MPID_assert(leader_tids[i] != -1);
- if(MY_TASKID < leader_tids[i]) {
- TRACE_ERR("_try_to_disconnect: FIRST: comm_ptr->mpid.world_intercomm_cntr %lld, toTaskid %d\n",comm_ptr->mpid.world_intercomm_cntr,leader_tids[i]);
- expected_firstAM++;
- MPIDI_send_AM_to_remote_leader_on_disconnect(leader_tids[i], comm_ptr->mpid.world_intercomm_cntr, FIRST_AM);
- }
- else {
- expected_secondAM++;
- }
- }
- if(expected_secondAM) {
- MPIDI_wait_for_AM(comm_ptr->mpid.world_intercomm_cntr, expected_secondAM, FIRST_AM);
- }
- }
-
- { /* Second Pair of Send / Recv -- All larger tasks send to all smaller tasks */
- for(i=0;i<total_leaders;i++) {
- MPID_assert(leader_tids[i] != -1);
- if(MY_TASKID > leader_tids[i]) {
- TRACE_ERR("_try_to_disconnect: SECOND: comm_ptr->mpid.world_intercomm_cntr %lld, toTaskid %d\n",comm_ptr->mpid.world_intercomm_cntr,leader_tids[i]);
- MPIDI_send_AM_to_remote_leader_on_disconnect(leader_tids[i], comm_ptr->mpid.world_intercomm_cntr, SECOND_AM);
- }
- }
- if(expected_firstAM) {
- MPIDI_wait_for_AM(comm_ptr->mpid.world_intercomm_cntr, expected_firstAM, SECOND_AM);
- }
- }
-
- for(i=0; comm_ptr->mpid.world_ids[i] != -1; i++) {
- ref_count = MPIDI_Decrement_ref_count(comm_ptr->mpid.world_ids[i]);
- TRACE_ERR("ref_count=%d with world=%d comm_ptr=%x\n", ref_count, comm_ptr->mpid.world_ids[i], comm_ptr);
- if(ref_count == -1)
- TRACE_ERR("something is wrong\n");
- }
-
- for(i=0;i<total_leaders;i++) {
- MPID_assert(leader_tids[i] != -1);
- if(MY_TASKID < leader_tids[i]) {
- TRACE_ERR("_try_to_disconnect: LAST: comm_ptr->mpid.world_intercomm_cntr %lld, toTaskid %d\n",comm_ptr->mpid.world_intercomm_cntr,leader_tids[i]);
- MPIDI_send_AM_to_remote_leader_on_disconnect(leader_tids[i], comm_ptr->mpid.world_intercomm_cntr, LAST_AM);
- }
- else {
- expected_lastAM++;
- }
- }
- if(expected_lastAM) {
- MPIDI_wait_for_AM(comm_ptr->mpid.world_intercomm_cntr, expected_lastAM,
- LAST_AM);
- }
- MPIU_Free(leader_tids);
- }
-
- TRACE_ERR("_try_to_disconnect: Going inside final barrier for tranid %lld\n",comm_ptr->mpid.world_intercomm_cntr);
- mpi_errno = MPIR_Barrier_intra(lcomm, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Barrier_intra returned with mpi_errno=%d\n", mpi_errno);
- }
- mpi_errno = MPIR_Comm_release(lcomm,0);
- if (mpi_errno) TRACE_ERR("MPIR_Comm_release returned with mpi_errno=%d\n", mpi_errno);
-
- MPIDI_free_tranid_node(comm_ptr->mpid.world_intercomm_cntr);
- mpi_errno = MPIR_Comm_release(comm_ptr,1);
- if (mpi_errno) TRACE_ERR("MPIR_Comm_release returned with mpi_errno=%d\n", mpi_errno);
- /* MPIU_Free(local_list); */
- MPIU_Free(ranks);
- }
- return mpi_errno;
-}
-
-
-int MPIDI_Decrement_ref_count(int wid) {
- conn_info *tmp_node;
- int ref_count=-1;
-
- tmp_node = _conn_info_list;
- while(tmp_node != NULL) {
- if(tmp_node->rem_world_id == wid) {
- ref_count = --tmp_node->ref_count;
- TRACE_ERR("decrement_ref_count: ref_count decremented to %d for remote world %d\n",ref_count,wid);
- break;
- }
- tmp_node = tmp_node->next;
- }
- return ref_count;
-}
-
-void MPIDI_get_allremote_leaders(int *tid_arr, MPID_Comm *comm_ptr)
-{
- conn_info *tmp_node;
- int i,j,k,arr_len,gsize, found=0;
- int leader1=-1, leader2=-1;
- MPID_VCR *glist;
-
- for(i=0;comm_ptr->mpid.world_ids[i] != -1;i++)
- {
- TRACE_ERR("i=%d comm_ptr->mpid.world_ids[i]=%d\n", i, comm_ptr->mpid.world_ids[i]);
- tmp_node = _conn_info_list;
- found=0;
- if(tmp_node==NULL) {TRACE_ERR("_conn_info_list is NULL\n");}
- while(tmp_node != NULL) {
- if(tmp_node->rem_world_id == comm_ptr->mpid.world_ids[i]) {
- if(comm_ptr->comm_kind == MPID_INTRACOMM) {
- glist = comm_ptr->local_vcr;
- gsize = comm_ptr->local_size;
- }
- else {
- glist = comm_ptr->vcr;
- gsize = comm_ptr->remote_size;
- }
- for(j=0;j<gsize;j++) {
- for(k=0;tmp_node->rem_taskids[k]!=-1;k++) {
- TRACE_ERR("j=%d k=%d glist[j]->taskid=%d tmp_node->rem_taskids[k]=%d\n", j, k,glist[j]->taskid, tmp_node->rem_taskids[k]);
- if(glist[j]->taskid == tmp_node->rem_taskids[k]) {
- leader1 = glist[j]->taskid;
- found = 1;
- break;
- }
- }
- if(found) break;
- }
- /*
- * There may be the case where my local_comm's GROUPLIST contains tasks
- * fro remote world-x and GROUPREMLIST contains other remaining tasks of world-x
- * If the smallest task of world-x is in my GROUPLIST then the above iteration
- * will give the leader as smallest task from world-x in my GROUPREMLIST.
- * But this will not be the correct leader_taskid. I should find the smallest task
- * of world-x in my GROUPLIST and then see which of the two leaders is the
- * smallest one. The smallest one is the one in which I am interested.
- **/
- if(comm_ptr->comm_kind == MPID_INTERCOMM) {
- found=0;
- glist = comm_ptr->local_vcr;
- gsize = comm_ptr->local_size;
- for(j=0;j<gsize;j++) {
- for(k=0;tmp_node->rem_taskids[k]!=-1;k++) {
- TRACE_ERR("j=%d k=%d glist[j]->taskid=%d tmp_node->rem_taskids[k]=%d\n", j, k, glist[j]->taskid, tmp_node->rem_taskids[k]);
- if(glist[j]->taskid == tmp_node->rem_taskids[k]) {
- leader2 = glist[j]->taskid;
- found = 1;
- break;
- }
- }
- if(found) break;
- }
- }
- if(found) {
- break;
- }
- } else {TRACE_ERR("world id is different tmp_node->rem_world_id =%d comm_ptr=%x comm_ptr->mpid.world_ids[i]=%d\n", tmp_node->rem_world_id, comm_ptr, comm_ptr->mpid.world_ids[i]);}
- tmp_node = tmp_node->next;
- }
-
- TRACE_ERR("comm_ptr=%x leader1=%d leader2=%d\n", comm_ptr, leader1, leader2);
- if(leader1 == -1)
- *(tid_arr+i) = leader2;
- else if(leader2 == -1)
- *(tid_arr+i) = leader1;
- else
- *(tid_arr+i) = leader1 < leader2 ? leader1 : leader2;
- }
-}
-
-#endif
diff --git a/src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c b/src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c
deleted file mode 100644
index 6e4a8c8..0000000
--- a/src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-#ifdef USE_PMI2_API
-#include "pmi2.h"
-#else
-#include "pmi.h"
-#endif
-
-#ifdef DYNAMIC_TASKING
-
-extern mpidi_dynamic_tasking;
-
-/* Define the name of the kvs key used to provide the port name to the
- children */
-#define MPIDI_PARENT_PORT_KVSKEY "PARENT_ROOT_PORT_NAME"
-
-/* FIXME: We can avoid these two routines if we define PMI as using
- MPI info values */
-/* Turn a SINGLE MPI_Info into an array of PMI_keyvals (return the pointer
- to the array of PMI keyvals) */
-static int MPIDI_mpi_to_pmi_keyvals( MPID_Info *info_ptr, PMI_keyval_t **kv_ptr, int *nkeys_ptr )
-{
- char key[MPI_MAX_INFO_KEY];
- PMI_keyval_t *kv = 0;
- int i, nkeys = 0, vallen, flag, mpi_errno=MPI_SUCCESS;
-
- if (!info_ptr || info_ptr->handle == MPI_INFO_NULL) {
- goto fn_exit;
- }
-
- MPIR_Info_get_nkeys_impl( info_ptr, &nkeys );
- if (nkeys == 0) {
- goto fn_exit;
- }
- kv = (PMI_keyval_t *)MPIU_Malloc( nkeys * sizeof(PMI_keyval_t) );
-
- for (i=0; i<nkeys; i++) {
- mpi_errno = MPIR_Info_get_nthkey_impl( info_ptr, i, key );
- if (mpi_errno)
- TRACE_ERR("MPIR_Info_get_nthkey_impl returned with mpi_errno=%d\n", mpi_errno);
- MPIR_Info_get_valuelen_impl( info_ptr, key, &vallen, &flag );
-
- kv[i].key = MPIU_Strdup(key);
- kv[i].val = MPIU_Malloc( vallen + 1 );
- MPIR_Info_get_impl( info_ptr, key, vallen+1, kv[i].val, &flag );
- TRACE_OUT("key: <%s>, value: <%s>\n", kv[i].key, kv[i].val);
- }
-
- fn_fail:
- fn_exit:
- *kv_ptr = kv;
- *nkeys_ptr = nkeys;
- return mpi_errno;
-}
-
-
-/* Free the entire array of PMI keyvals */
-static void MPIDI_free_pmi_keyvals(PMI_keyval_t **kv, int size, int *counts)
-{
- int i,j;
-
- for (i=0; i<size; i++)
- {
- for (j=0; j<counts[i]; j++)
- {
- if (kv[i][j].key != NULL)
- MPIU_Free((char *)kv[i][j].key);
- if (kv[i][j].val != NULL)
- MPIU_Free(kv[i][j].val);
- }
- if (kv[i] != NULL)
- {
- MPIU_Free(kv[i]);
- }
- }
-}
-
-/*@
- MPID_Comm_spawn_multiple -
-
- Input Arguments:
-+ int count - count
-. char *array_of_commands[] - commands
-. char* *array_of_argv[] - arguments
-. int array_of_maxprocs[] - maxprocs
-. MPI_Info array_of_info[] - infos
-. int root - root
-- MPI_Comm comm - communicator
-
- Output Arguments:
-+ MPI_Comm *intercomm - intercommunicator
-- int array_of_errcodes[] - error codes
-
- Notes:
-
-.N Errors
-.N MPI_SUCCESS
-@*/
-#undef FUNCNAME
-#define FUNCNAME MPID_Comm_spawn_multiple
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Comm_spawn_multiple(int count, char *array_of_commands[],
- char ** array_of_argv[], const int array_of_maxprocs[],
- MPID_Info * array_of_info_ptrs[], int root,
- MPID_Comm * comm_ptr, MPID_Comm ** intercomm,
- int array_of_errcodes[])
-{
- int mpi_errno = MPI_SUCCESS;
-
- if(mpidi_dynamic_tasking == 0) {
- fprintf(stderr, "Received spawn request for non-dynamic jobs\n");
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_SPAWN,
- return mpi_errno, "**spawn");
- }
-
- /* We allow an empty implementation of this function to
- simplify building MPICH on systems that have difficulty
- supporing process creation */
- mpi_errno = MPIDI_Comm_spawn_multiple(count, array_of_commands,
- array_of_argv, array_of_maxprocs,
- array_of_info_ptrs,
- root, comm_ptr, intercomm,
- array_of_errcodes);
- return mpi_errno;
-}
-
-
-/*
- * MPIDI_Comm_spawn_multiple()
- */
-int MPIDI_Comm_spawn_multiple(int count, char **commands,
- char ***argvs, int *maxprocs,
- MPID_Info **info_ptrs, int root,
- MPID_Comm *comm_ptr, MPID_Comm
- **intercomm, int *errcodes)
-{
- char port_name[MPI_MAX_PORT_NAME];
- char jobId[64];
- char ctxid_str[16];
- int jobIdSize = 64;
- int len=0;
- int *info_keyval_sizes=0, i, mpi_errno=MPI_SUCCESS;
- PMI_keyval_t **info_keyval_vectors=0, preput_keyval_vector;
- int *pmi_errcodes = 0, pmi_errno=0;
- int total_num_processes, should_accept = 1;
- MPID_Info tmp_info_ptr;
- char *tmp;
- int tmp_ret = 0;
-
- if (comm_ptr->rank == root) {
- /* create an array for the pmi error codes */
- total_num_processes = 0;
- for (i=0; i<count; i++) {
- total_num_processes += maxprocs[i];
- }
- pmi_errcodes = (int*)MPIU_Malloc(sizeof(int) * total_num_processes);
-
- /* initialize them to 0 */
- for (i=0; i<total_num_processes; i++)
- pmi_errcodes[i] = 0;
-
- /* Open a port for the spawned processes to connect to */
- /* FIXME: info may be needed for port name */
- mpi_errno = MPID_Open_port(NULL, port_name);
- TRACE_ERR("mpi_errno from MPID_Open_port=%d\n", mpi_errno);
-
- /* Spawn the processes */
-#ifdef USE_PMI2_API
- MPIU_Assert(count > 0);
- {
- int *argcs = MPIU_Malloc(count*sizeof(int));
- struct MPID_Info preput;
- struct MPID_Info *preput_p[2] = { &preput, &tmp_info_ptr };
-
- MPIU_Assert(argcs);
-
- info_keyval_sizes = MPIU_Malloc(count * sizeof(int));
-
- /* FIXME cheating on constness */
- preput.key = (char *)MPIDI_PARENT_PORT_KVSKEY;
- preput.value = port_name;
- preput.next = &tmp_info_ptr;
-
- tmp_info_ptr.key = "COMMCTX";
- len=sprintf(ctxid_str, "%d", comm_ptr->context_id);
- TRACE_ERR("COMMCTX=%d\n", comm_ptr->context_id);
- ctxid_str[len]='\0';
- tmp_info_ptr.value = ctxid_str;
- tmp_info_ptr.next = NULL;
-
- /* compute argcs array */
- for (i = 0; i < count; ++i) {
- argcs[i] = 0;
- if (argvs != NULL && argvs[i] != NULL) {
- while (argvs[i][argcs[i]]) {
- ++argcs[i];
- }
- }
- }
-
- /*MPIU_THREAD_CS_ENTER(PMI,);*/
- /* release the global CS for spawn PMI calls */
- MPIU_THREAD_CS_EXIT(ALLFUNC,);
- pmi_errno = PMI2_Job_Spawn(count, (const char **)commands,
- argcs, (const char ***)argvs,
- maxprocs,
- info_keyval_sizes, (const MPID_Info **)info_ptrs,
- 2, (const struct MPID_Info **)preput_p,
- jobId, jobIdSize,
- pmi_errcodes);
- TRACE_ERR("after PMI2_Job_Spawn - pmi_errno=%d jobId=%s\n", pmi_errno, jobId);
- MPIU_THREAD_CS_ENTER(ALLFUNC,);
-
- tmp=MPIU_Strdup(jobId);
- tmp_ret = atoi(strtok(tmp, ";"));
-
- if( (pmi_errno == PMI2_SUCCESS) && (tmp_ret != -1) ) {
- pami_task_t leader_taskid = atoi(strtok(NULL, ";"));
- pami_endpoint_t ldest;
-
- PAMI_Endpoint_create(MPIDI_Client, leader_taskid, 0, &ldest);
- TRACE_ERR("PAMI_Resume to taskid=%d\n", leader_taskid);
- PAMI_Resume(MPIDI_Context[0], &ldest, 1);
- }
-
- MPIU_Free(tmp);
-
- MPIU_Free(argcs);
- if (pmi_errno != PMI2_SUCCESS) {
- TRACE_ERR("PMI2_Job_Spawn returned with pmi_errno=%d\n", pmi_errno);
- }
- }
-#else
- /* FIXME: This is *really* awkward. We should either
- Fix on MPI-style info data structures for PMI (avoid unnecessary
- duplication) or add an MPIU_Info_getall(...) that creates
- the necessary arrays of key/value pairs */
-
- /* convert the infos into PMI keyvals */
- info_keyval_sizes = (int *) MPIU_Malloc(count * sizeof(int));
- info_keyval_vectors =
- (PMI_keyval_t**) MPIU_Malloc(count * sizeof(PMI_keyval_t*));
-
- if (!info_ptrs) {
- for (i=0; i<count; i++) {
- info_keyval_vectors[i] = 0;
- info_keyval_sizes[i] = 0;
- }
- }
- else {
- for (i=0; i<count; i++) {
- mpi_errno = MPIDI_mpi_to_pmi_keyvals( info_ptrs[i],
- &info_keyval_vectors[i],
- &info_keyval_sizes[i] );
- if (mpi_errno) { TRACE_ERR("MPIDI_mpi_to_pmi_keyvals returned with mpi_errno=%d\n", mpi_errno); }
- }
- }
-
- preput_keyval_vector.key = MPIDI_PARENT_PORT_KVSKEY;
- preput_keyval_vector.val = port_name;
-
- pmi_errno = PMI_Spawn_multiple(count, (const char **)
- commands,
- (const char ***) argvs,
- maxprocs, info_keyval_sizes,
- (const PMI_keyval_t **)
- info_keyval_vectors, 1,
- &preput_keyval_vector,
- pmi_errcodes);
- TRACE_ERR("pmi_errno from PMI_Spawn_multiple=%d\n", pmi_errno);
-#endif
-
- if (errcodes != MPI_ERRCODES_IGNORE) {
- for (i=0; i<total_num_processes; i++) {
- /* FIXME: translate the pmi error codes here */
- errcodes[i] = pmi_errcodes[0];
- /* We want to accept if any of the spawns succeeded.
- Alternatively, this is the same as we want to NOT accept if
- all of them failed. should_accept = NAND(e_0, ..., e_n)
- Remember, success equals false (0). */
- should_accept = should_accept && errcodes[i];
- }
- should_accept = !should_accept; /* the `N' in NAND */
- }
-
-#ifdef USE_PMI2_API
- if( (pmi_errno == PMI2_SUCCESS) && (tmp_ret == -1) )
-#else
- if( (pmi_errno == PMI_SUCCESS) && (tmp_ret == -1) )
-#endif
- should_accept = 0;
- }
-
- if (errcodes != MPI_ERRCODES_IGNORE) {
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- mpi_errno = MPIR_Bcast_impl(&should_accept, 1, MPI_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_impl returned with mpi_errno=%d\n", mpi_errno);
-
- mpi_errno = MPIR_Bcast_impl(&pmi_errno, 1, MPI_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_impl returned with mpi_errno=%d\n", mpi_errno);
-
- mpi_errno = MPIR_Bcast_impl(&total_num_processes, 1, MPI_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_impl returned with mpi_errno=%d\n", mpi_errno);
-
- mpi_errno = MPIR_Bcast_impl(errcodes, total_num_processes, MPI_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_impl returned with mpi_errno=%d\n", mpi_errno);
- }
-
- if (should_accept) {
- mpi_errno = MPID_Comm_accept(port_name, NULL, root, comm_ptr, intercomm);
- TRACE_ERR("mpi_errno from MPID_Comm_accept=%d\n", mpi_errno);
- } else {
- if( (pmi_errno == PMI2_SUCCESS) && (errcodes[0] != 0) ) {
- MPIR_Comm_create(intercomm);
- }
- }
-
- if (comm_ptr->rank == root) {
- /* Close the port opened for the spawned processes to connect to */
- mpi_errno = MPID_Close_port(port_name);
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno != MPI_SUCCESS)
- TRACE_ERR("MPID_Close_port returned with mpi_errno=%d\n", mpi_errno);
- /* --END ERROR HANDLING-- */
- }
-
- if(pmi_errno) {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, __FILE__, __LINE__, MPI_ERR_SPAWN,
- "**mpi_comm_spawn", 0);
- }
-
- fn_exit:
- if (info_keyval_vectors) {
- MPIDI_free_pmi_keyvals(info_keyval_vectors, count, info_keyval_sizes);
- MPIU_Free(info_keyval_vectors);
- }
- if (info_keyval_sizes) {
- MPIU_Free(info_keyval_sizes);
- }
- if (pmi_errcodes) {
- MPIU_Free(pmi_errcodes);
- }
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-
-/* This function is used only with mpid_init to set up the parent communicator
- if there is one. The routine should be in this file because the parent
- port name is setup with the "preput" arguments to PMI_Spawn_multiple */
-static char *parent_port_name = 0; /* Name of parent port if this
- process was spawned (and is root
- of comm world) or null */
-#undef FUNCNAME
-#define FUNCNAME MPIDI_GetParentPort
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIDI_GetParentPort(char ** parent_port)
-{
- int mpi_errno = MPI_SUCCESS;
- int pmi_errno;
- char val[MPIDI_MAX_KVS_VALUE_LEN];
-
- if (parent_port_name == NULL)
- {
- char *kvsname = NULL;
- /* We can always use PMI_KVS_Get on our own process group */
- MPIDI_PG_GetConnKVSname( &kvsname );
-#ifdef USE_PMI2_API
- {
- int vallen = 0;
- pmi_errno = PMI2_KVS_Get(kvsname, PMI2_ID_NULL, MPIDI_PARENT_PORT_KVSKEY, val, sizeof(val), &vallen);
- TRACE_ERR("PMI2_KVS_Get - val=%s\n", val);
- if (pmi_errno)
- TRACE_ERR("PMI2_KVS_Get returned with pmi_errno=%d\n", pmi_errno);
- }
-#else
- /*MPIU_THREAD_CS_ENTER(PMI,);*/
- pmi_errno = PMI_KVS_Get( kvsname, MPIDI_PARENT_PORT_KVSKEY, val, sizeof(val));
-/* MPIU_THREAD_CS_EXIT(PMI,);*/
- if (pmi_errno) {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**pmi_kvsget", "**pmi_kvsget %d", pmi_errno);
- goto fn_exit;
- }
-#endif
- parent_port_name = MPIU_Strdup(val);
- }
-
- *parent_port = parent_port_name;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-
-void MPIDI_FreeParentPort(void)
-{
- if (parent_port_name) {
- MPIU_Free( parent_port_name );
- parent_port_name = 0;
- }
-}
-
-
-#endif
diff --git a/src/mpid/pamid/src/dyntask/mpid_port.c b/src/mpid/pamid/src/dyntask/mpid_port.c
deleted file mode 100644
index e6f8810..0000000
--- a/src/mpid/pamid/src/dyntask/mpid_port.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-#include "netdb.h"
-#include <net/if.h>
-
-
-#ifdef DYNAMIC_TASKING
-
-#define MAX_HOST_DESCRIPTION_LEN 128
-#define NUM_IFREQS 10
-#define MPI_MAX_TASKID_NAME 8
-#define MPIDI_TASKID_TAG_KEY "taskid"
-
-extern mpidi_dynamic_tasking;
-
-static int MPIDI_Open_port(MPID_Info *, char *);
-static int MPIDI_Close_port(const char *);
-
-
-/* Define the functions that are used to implement the port
- * operations */
-static MPIDI_PortFns portFns = { MPIDI_Open_port,
- MPIDI_Close_port,
- MPIDI_Comm_accept,
- MPIDI_Comm_connect };
-
-/*@
- MPID_Open_port - Open an MPI Port
-
- Input Arguments:
-. MPI_Info info - info
-
- Output Arguments:
-. char *port_name - port name
-
- Notes:
-
-
-.N Errors
-.N MPI_SUCCESS
-.N MPI_ERR_OTHER
-@*/
-int MPID_Open_port(MPID_Info *info_ptr, char *port_name)
-{
- int mpi_errno=MPI_SUCCESS;
-
- if (portFns.OpenPort) {
- mpi_errno = portFns.OpenPort( info_ptr, port_name );
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("OpenPort returned with mpi_errno=%d\n", mpi_errno);
- }
- }
-
- fn_fail:
- return mpi_errno;
-}
-
-
-
-/*@
- MPID_Close_port - Close port
-
- Input Parameter:
-. port_name - Name of MPI port to close
-
- Notes:
-
-.N Errors
-.N MPI_SUCCESS
-.N MPI_ERR_OTHER
-
-@*/
-int MPID_Close_port(const char *port_name)
-{
- int mpi_errno=MPI_SUCCESS;
-
- if (portFns.ClosePort) {
- mpi_errno = portFns.ClosePort( port_name );
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("ClosePort returned with mpi_errno=%d\n", mpi_errno);
- }
- }
-
- fn_fail:
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Comm_accept
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Comm_accept(const char * port_name, MPID_Info * info, int root,
- MPID_Comm * comm, MPID_Comm ** newcomm_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
-
- if(mpidi_dynamic_tasking == 0) {
- fprintf(stderr, "Dynamic tasking API is called on non-dynamic jobs\n");
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_SPAWN,
- return mpi_errno, "**spawn");
-
- }
-
- if (portFns.CommAccept) {
- mpi_errno = portFns.CommAccept( port_name, info, root, comm,
- newcomm_ptr );
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("CommAccept returned with mpi_errno=%d\n", mpi_errno);
- }
- }
-
- fn_fail:
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Comm_connect
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Comm_connect(const char * port_name, MPID_Info * info, int root,
- MPID_Comm * comm, MPID_Comm ** newcomm_ptr)
-{
- int mpi_errno=MPI_SUCCESS;
-
- if(mpidi_dynamic_tasking == 0) {
- fprintf(stderr, "Dynamic tasking API is called on non-dynamic jobs\n");
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_SPAWN,
- return mpi_errno, "**spawn");
-
- }
-
- if (portFns.CommConnect) {
- mpi_errno = portFns.CommConnect( port_name, info, root, comm,
- newcomm_ptr );
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("CommConnect returned with mpi_errno=%d\n", mpi_errno);
- }
- }
-
- fn_fail:
- return mpi_errno;
-}
-
-
-/*
- * Here are the routines that provide some of the default implementations
- * for the Port routines.
- *
- * MPIDI_Open_port - creates a port "name" that includes a tag value that
- * is used to separate different MPI Port values. That tag value is
- * extracted with MPIDI_GetTagFromPort
- * MPIDI_GetTagFromPort - Routine to return the tag associated with a port.
- *
- * The port_name_tag is used in the connect and accept messages that
- * are used in the connect/accept protocol.
- */
-
-#define MPIDI_PORT_NAME_TAG_KEY "tag"
-#define MPIDI_TASKID_TAG_KEY "taskid"
-
-/* Though the port_name_tag_mask itself is an int, we can only have as
- * many tags as the context_id space can support. */
-static int port_name_tag_mask[MPIR_MAX_CONTEXT_MASK] = { 0 };
-
-static int MPIDI_get_port_name_tag(int * port_name_tag)
-{
- int i, j;
- int mpi_errno = MPI_SUCCESS;
-
-
- for (i = 0; i < MPIR_MAX_CONTEXT_MASK; i++)
- if (port_name_tag_mask[i] != ~0)
- break;
-
- TRACE_ERR("MPIDI_get_port_name_tag - i=%d MPIR_MAX_CONTEXT_MASK=%d", i, MPIR_MAX_CONTEXT_MASK);
- if (i < MPIR_MAX_CONTEXT_MASK) {
- /* Found a free tag. port_name_tag_mask[i] is not fully used
- * up. */
-
- /* OR the mask value with powers of two. If the OR value is
- * the same as the original value, then it means that the
- * OR'ed bit was originally 1 (used); otherwise, it was
- * originally 0 (free). */
- for (j = 0; j < (8 * sizeof(int)); j++) {
- if ((port_name_tag_mask[i] | (1 << ((8 * sizeof(int)) - j - 1))) !=
- port_name_tag_mask[i]) {
- /* Mark the appropriate bit as used and return that */
- port_name_tag_mask[i] |= (1 << ((8 * sizeof(int)) - j - 1));
- *port_name_tag = ((i * 8 * sizeof(int)) + j);
- goto fn_exit;
- }
- }
- }
- else {
- goto fn_fail;
- }
-
-fn_exit:
- return mpi_errno;
-
-fn_fail:
- /* Everything is used up */
- *port_name_tag = -1;
- mpi_errno = MPI_ERR_OTHER;
- goto fn_exit;
-}
-
-static void MPIDI_free_port_name_tag(int tag)
-{
- int index, rem_tag;
-
- index = tag / (sizeof(int) * 8);
- rem_tag = tag - (index * sizeof(int) * 8);
-
- port_name_tag_mask[index] &= ~(1 << ((8 * sizeof(int)) - 1 - rem_tag));
-}
-
-
-/*
- * MPIDI_Open_port()
- */
-static int MPIDI_Open_port(MPID_Info *info_ptr, char *port_name)
-{
- int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
- int len;
- int port_name_tag = 0; /* this tag is added to the business card,
- which is then returned as the port name */
- int taskid_tag;
- int myRank = MPIR_Process.comm_world->rank;
-
- mpi_errno = MPIDI_get_port_name_tag(&port_name_tag);
- TRACE_ERR("MPIDI_get_port_name_tag - port_name_tag=%d mpi_errno=%d\n", port_name_tag, mpi_errno);
-
- len = MPI_MAX_PORT_NAME;
- str_errno = MPIU_Str_add_int_arg(&port_name, &len,
- MPIDI_PORT_NAME_TAG_KEY, port_name_tag);
- /*len = MPI_MAX_TASKID_NAME;*/
- taskid_tag = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_TASK_ID ).value.intval;
- str_errno = MPIU_Str_add_int_arg(&port_name, &len,
- MPIDI_TASKID_TAG_KEY, taskid_tag);
- TRACE_ERR("MPIU_Str_add_int_arg - port_name=%s str_errno=%d\n", port_name, str_errno);
-
- /* This works because Get_business_card uses the same MPIU_Str_xxx
- functions as above to add the business card to the input string */
- /* FIXME: We should instead ask the mpid_pg routines to give us
- a connection string. There may need to be a separate step to
- restrict us to a connection information that is only valid for
- connections between processes that are started separately (e.g.,
- may not use shared memory). We may need a channel-specific
- function to create an exportable connection string. */
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/*
- * MPIDI_Close_port()
- */
-static int MPIDI_Close_port(const char *port_name)
-{
- int mpi_errno = MPI_SUCCESS;
- int port_name_tag;
-
- mpi_errno = MPIDI_GetTagFromPort(port_name, &port_name_tag);
-
- MPIDI_free_port_name_tag(port_name_tag);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/*
- * The connect and accept routines use this routine to get the port tag
- * from the port name.
- */
-int MPIDI_GetTagFromPort( const char *port_name, int *port_name_tag )
-{
- int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
-
- str_errno = MPIU_Str_get_int_arg(port_name, MPIDI_PORT_NAME_TAG_KEY,
- port_name_tag);
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-/*
- * The connect and accept routines use this routine to get the port tag
- * from the port name.
- */
-int MPIDI_GetTaskidFromPort( const char *port_name, int *taskid_tag )
-{
- int mpi_errno = MPI_SUCCESS;
- int str_errno = MPIU_STR_SUCCESS;
-
- str_errno = MPIU_Str_get_int_arg(port_name, MPIDI_TASKID_TAG_KEY,
- taskid_tag);
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-#endif
diff --git a/src/mpid/pamid/src/dyntask/mpidi_pg.c b/src/mpid/pamid/src/dyntask/mpidi_pg.c
deleted file mode 100644
index bb69e10..0000000
--- a/src/mpid/pamid/src/dyntask/mpidi_pg.c
+++ /dev/null
@@ -1,1063 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#include <mpidimpl.h>
-#ifdef USE_PMI2_API
-#include "pmi2.h"
-#else
-#include "pmi.h"
-#endif
-
-#ifdef DYNAMIC_TASKING
-
-extern int mpidi_dynamic_tasking;
-int mpidi_sync_done=0;
-
-
-#define MAX_JOBID_LEN 1024
-
-/* FIXME: These routines need a description. What is their purpose? Who
- calls them and why? What does each one do?
-*/
-static MPIDI_PG_t * MPIDI_PG_list = NULL;
-static MPIDI_PG_t * MPIDI_PG_iterator_next = NULL;
-static MPIDI_PG_Compare_ids_fn_t MPIDI_PG_Compare_ids_fn;
-static MPIDI_PG_Destroy_fn_t MPIDI_PG_Destroy_fn;
-
-/* Set verbose to 1 to record changes to the process group structure. */
-static int verbose = 0;
-
-/* Key track of the process group corresponding to the MPI_COMM_WORLD
- of this process */
-MPIDI_PG_t *pg_world = NULL;
-
-#define MPIDI_MAX_KVS_KEY_LEN 256
-
-extern conn_info *_conn_info_list;
-
-int MPIDI_PG_Init(int *argc_p, char ***argv_p,
- MPIDI_PG_Compare_ids_fn_t compare_ids_fn,
- MPIDI_PG_Destroy_fn_t destroy_fn)
-{
- int mpi_errno = MPI_SUCCESS;
- char *p;
-
- MPIDI_PG_Compare_ids_fn = compare_ids_fn;
- MPIDI_PG_Destroy_fn = destroy_fn;
-
- /* Check for debugging options. We use MPICHD_DBG and -mpichd-dbg
- to avoid confusion with the code in src/util/dbg/dbg_printf.c */
- p = getenv( "MPICHD_DBG_PG" );
- if (p && ( strcmp( p, "YES" ) == 0 || strcmp( p, "yes" ) == 0) )
- verbose = 1;
- if (argc_p && argv_p) {
- int argc = *argc_p, i;
- char **argv = *argv_p;
- /* applied patch from Juha Jeronen, req #3920 */
- for (i=1; i<argc && argv[i]; i++) {
- if (strcmp( "-mpichd-dbg-pg", argv[i] ) == 0) {
- int j;
- verbose = 1;
- for (j=i; j<argc-1; j++) {
- argv[j] = argv[j+1];
- }
- argv[argc-1] = NULL;
- *argc_p = argc - 1;
- break;
- }
- }
- }
-
- return mpi_errno;
-}
-
-void *mpidi_finalize_req(void *arg) {
- PMI2_Finalize();
- mpidi_sync_done=1;
-}
-
-/*@
- MPIDI_PG_Finalize - Finalize the process groups, including freeing all
- process group structures
- @*/
-int MPIDI_PG_Finalize(void)
-{
- int mpi_errno = MPI_SUCCESS;
- conn_info *conn_node;
- int my_max_worldid, world_max_worldid;
- int wid_bit_array_size=0, wid;
- unsigned char *wid_bit_array=NULL, *root_wid_barray=NULL;
- MPIDI_PG_t *pg, *pgNext;
- char key[PMI2_MAX_KEYLEN];
- char value[PMI2_MAX_VALLEN];
- pthread_t finalize_req_thread;
-
- /* Print the state of the process groups */
- if (verbose) {
- MPIU_PG_Printall( stdout );
- }
-
- /* FIXME - straighten out the use of PMI_Finalize - no use after
- PG_Finalize */
- conn_node = _conn_info_list;
- my_max_worldid = -1;
-
- while(NULL != conn_node) {
- if(conn_node->rem_world_id>my_max_worldid && conn_node->ref_count>0) {
- TRACE_ERR("conn_node->rem_world_id=%d conn_node->ref_count=%d\n", conn_node->rem_world_id, conn_node->ref_count);
- my_max_worldid = conn_node->rem_world_id;
- } else {
- TRACE_ERR("conn_node->rem_world_id=%d conn_node->ref_count=%d\n", conn_node->rem_world_id, conn_node->ref_count);
- }
- conn_node = conn_node->next;
- }
- MPIR_Allreduce_impl( &my_max_worldid, &world_max_worldid, 1, MPI_INT, MPI_MAX, MPIR_Process.comm_world, &mpi_errno);
-
- /* create bit array of size = world_max_worldid + 1
- * We add 1 to world_max_worldid because suppose my world
- * is only connected to world_id 0 then world_max_worldid=0
- * and if we do not add 1, then size of bite array will be 0.
- * Also suppose in my world world_max_worldid is 8. Then if we
- * dont add 1, then the bit array will be size 1 byte, and when
- * we try to set bit in position 8, we will get segfault.
- */
- TRACE_ERR("my_max_worldid=%d world_max_worldid=%d\n", my_max_worldid, world_max_worldid);
- if(world_max_worldid != -1) {
- world_max_worldid++;
- wid_bit_array_size = (world_max_worldid + CHAR_BIT -1) / CHAR_BIT;
- wid_bit_array = MPIU_Malloc(wid_bit_array_size*sizeof(unsigned char));
- memset(wid_bit_array, 0, wid_bit_array_size*sizeof(unsigned char));
- root_wid_barray = MPIU_Malloc(wid_bit_array_size*sizeof(unsigned char));
-
- memset(root_wid_barray, 0, wid_bit_array_size*sizeof(unsigned char));
- conn_node = _conn_info_list;
- while(NULL != conn_node) {
- if(conn_node->ref_count >0) {
- wid = conn_node->rem_world_id;
- wid_bit_array[wid/CHAR_BIT] |= 1 << (wid%CHAR_BIT);
- TRACE_ERR("wid=%d wid_bit_array[%d]=%x\n", wid, wid/CHAR_BIT, 1 << (wid%CHAR_BIT));
- }
- conn_node = conn_node->next;
-
- }
- /* Let root of my world know about this bit array */
- MPIR_Reduce_impl(wid_bit_array,root_wid_barray,wid_bit_array_size,
- MPI_UNSIGNED_CHAR,MPI_BOR,0,MPIR_Process.comm_world,&mpi_errno);
-
- MPIU_Free(wid_bit_array);
- }
-
- if(MPIR_Process.comm_world->rank == 0) {
-
- MPL_snprintf(key, PMI2_MAX_KEYLEN-1, "%s", "ROOTWIDARRAY");
- MPL_snprintf(value, PMI2_MAX_VALLEN-1, "%s", root_wid_barray);
- TRACE_ERR("root_wid_barray=%s\n", value);
- mpi_errno = PMI2_KVS_Put(key, value);
- TRACE_ERR("PMI2_KVS_Put returned with mpi_errno=%d\n", mpi_errno);
-
- MPL_snprintf(key, PMI2_MAX_KEYLEN-1, "%s", "WIDBITARRAYSZ");
- MPL_snprintf(value, PMI2_MAX_VALLEN-1, "%x", wid_bit_array_size);
- key[strlen(key)+1]='\0';
- value[strlen(value)+1]='\0';
- mpi_errno = PMI2_KVS_Put(key, value);
- TRACE_ERR("PMI2_KVS_Put returned with mpi_errno=%d\n", mpi_errno);
-
- }
- mpi_errno = PMI2_KVS_Fence();
- TRACE_ERR("PMI2_KVS_Fence returned with mpi_errno=%d\n", mpi_errno);
-
- MPIU_Free(root_wid_barray); /* root_wid_barray is now NULL for non-root */
-
-#if 0
- pthread_create(&finalize_req_thread, NULL, mpidi_finalize_req, NULL);
- /*MPIU_THREAD_CS_EXIT(ALLFUNC,); */
- while (mpidi_sync_done !=1) {
- mpi_errno=PAMI_Context_advance(MPIDI_Context[0], 1000);
- if (mpi_errno == PAMI_EAGAIN) {
- usleep(1);
- }
- }
-
- if (mpi_errno = pthread_join(finalize_req_thread, NULL) ) {
- TRACE_ERR("error returned from pthread_join() mpi_errno=%d\n",mpi_errno);
- }
-#endif
- MPIU_THREAD_CS_EXIT(ALLFUNC,);
- PMI2_Finalize();
- MPIU_THREAD_CS_ENTER(ALLFUNC,);
-
- if(_conn_info_list) {
- if(_conn_info_list->rem_taskids)
- MPIU_Free(_conn_info_list->rem_taskids);
- else
- MPIU_Free(_conn_info_list);
- }
- /* Free the storage associated with the process groups */
- pg = MPIDI_PG_list;
- while (pg) {
- pgNext = pg->next;
-
- /* In finalize, we free all process group information, even if
- the ref count is not zero. This can happen if the user
- fails to use MPI_Comm_disconnect on communicators that
- were created with the dynamic process routines.*/
- /* XXX DJG FIXME-MT should we be checking this? */
- if (MPIU_Object_get_ref(pg) == 0 ) {
- if (pg == MPIDI_Process.my_pg)
- MPIDI_Process.my_pg = NULL;
- MPIU_Object_set_ref(pg, 0); /* satisfy assertions in PG_Destroy */
- MPIDI_PG_Destroy( pg );
- }
- pg = pgNext;
- }
-
- /* If COMM_WORLD is still around (it normally should be),
- try to free it here. The reason that we need to free it at this
- point is that comm_world (and comm_self) still exist, and
- hence the usual process to free the related VC structures will
- not be invoked. */
-
- /* The process group associated with MPI_COMM_WORLD will be
- freed when MPI_COMM_WORLD is freed */
-
- return mpi_errno;
-}
-
-
-/* This routine creates a new process group description and appends it to
- the list of the known process groups. The pg_id is saved, not copied.
- The PG_Destroy routine that was set with MPIDI_PG_Init is responsible for
- freeing any storage associated with the pg_id.
-
- The new process group is returned in pg_ptr
-*/
-int MPIDI_PG_Create(int vct_sz, void * pg_id, MPIDI_PG_t ** pg_ptr)
-{
- MPIDI_PG_t * pg = NULL, *pgnext;
- int p, i, j;
- int mpi_errno = MPI_SUCCESS;
- char *cp, *world_tasks, *cp1;
-
- pg = MPIU_Malloc(sizeof(MPIDI_PG_t));
- pg->vct = MPIU_Malloc(sizeof(struct MPID_VCR_t)*vct_sz);
-
- pg->handle = 0;
- /* The reference count indicates the number of vc's that are or
- have been in use and not disconnected. It starts at zero,
- except for MPI_COMM_WORLD. */
- MPIU_Object_set_ref(pg, 0);
- pg->size = vct_sz;
- pg->id = MPIU_Strdup(pg_id);
- TRACE_ERR("PG_Create - pg=%x pg->id=%s pg->vct=%x\n", pg, pg->id, pg->vct);
- /* Initialize the connection information to null. Use
- the appropriate MPIDI_PG_InitConnXXX routine to set up these
- fields */
-
- pg->connData = 0;
- pg->getConnInfo = 0;
- pg->connInfoToString = 0;
- pg->connInfoFromString = 0;
- pg->freeConnInfo = 0;
-
- for (p = 0; p < vct_sz; p++)
- {
- /* Initialize device fields in the VC object */
- MPIDI_VC_Init(&pg->vct[p], pg,p);
- }
-
- /* The first process group is always the world group */
- if (!pg_world) { pg_world = pg; }
-
- /* Add pg's at the tail so that comm world is always the first pg */
- pg->next = 0;
- if (!MPIDI_PG_list)
- {
- MPIDI_PG_list = pg;
- }
- else
- {
- pgnext = MPIDI_PG_list;
- while (pgnext->next)
- {
- pgnext = pgnext->next;
- }
- pgnext->next = pg;
- }
- /* These are now done in MPIDI_VC_Init */
- *pg_ptr = pg;
-
- fn_exit:
- return mpi_errno;
-
- fn_fail:
- goto fn_exit;
-}
-
-int MPIDI_PG_Destroy(MPIDI_PG_t * pg)
-{
- MPIDI_PG_t * pg_prev;
- MPIDI_PG_t * pg_cur;
- int i;
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(MPIU_Object_get_ref(pg) == 0);
-
- pg_prev = NULL;
- pg_cur = MPIDI_PG_list;
-
- while(pg_cur != NULL)
- {
- if (pg_cur == pg)
- {
- if (MPIDI_PG_iterator_next == pg)
- {
- MPIDI_PG_iterator_next = MPIDI_PG_iterator_next->next;
- }
-
- if (pg_prev == NULL)
- MPIDI_PG_list = pg->next;
- else
- pg_prev->next = pg->next;
-
- TRACE_ERR("destroying pg=%p pg->id=%s\n", pg, (char *)pg->id);
-
- for (i = 0; i < pg->size; ++i) {
- /* FIXME it would be good if we could make this assertion.
- Unfortunately, either:
- 1) We're not being disciplined and some caller of this
- function doesn't bother to manage all the refcounts
- because he thinks he knows better. Annoying, but not
- strictly a bug.
- (wdg - actually, that is a bug - managing the ref
- counts IS required and missing one is a bug.)
- 2) There is a real bug lurking out there somewhere and we
- just haven't hit it in the tests yet. */
-
- /* This used to be handled in MPID_VCRT_Release, but that was
- not the right place to do this. The VC should only be freed
- when the PG that it belongs to is freed, not just when the
- VC's refcount drops to zero. [goodell@ 2008-06-13] */
- /* In that case, the fact that the VC is in the PG should
- increment the ref count - reflecting the fact that the
- use in the PG constitutes a reference-count-incrementing
- use. Alternately, if the PG is able to recreate a VC,
- and can thus free unused (or idle) VCs, it should be allowed
- to do so. [wdg 2008-08-31] */
- }
-
- MPIDI_PG_Destroy_fn(pg);
- TRACE_ERR("destroying pg->vct=%x\n", pg->vct);
- MPIU_Free(pg->vct);
- TRACE_ERR("after destroying pg->vct=%x\n", pg->vct);
-
- if (pg->connData) {
- if (pg->freeConnInfo) {
- TRACE_ERR("calling freeConnInfo on pg\n");
- (*pg->freeConnInfo)( pg );
- }
- else {
- TRACE_ERR("free pg->connData\n");
- MPIU_Free(pg->connData);
- }
- }
-
- TRACE_ERR("final destroying pg\n");
- MPIU_Free(pg);
-
- goto fn_exit;
- }
-
- pg_prev = pg_cur;
- pg_cur = pg_cur->next;
- }
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-int MPIDI_PG_Find(void * id, MPIDI_PG_t ** pg_ptr)
-{
- MPIDI_PG_t * pg;
- int mpi_errno = MPI_SUCCESS;
-
- pg = MPIDI_PG_list;
-
- while (pg != NULL)
- {
- if (MPIDI_PG_Compare_ids_fn(id, pg->id) != FALSE)
- {
- *pg_ptr = pg;
- goto fn_exit;
- }
-
- pg = pg->next;
- }
-
- *pg_ptr = NULL;
-
- fn_exit:
- return mpi_errno;
-}
-
-
-int MPIDI_PG_Id_compare(void * id1, void *id2)
-{
- return MPIDI_PG_Compare_ids_fn(id1, id2);
-}
-
-/* iter always points at the next element */
-int MPIDI_PG_Get_next(MPIDI_PG_iterator *iter, MPIDI_PG_t ** pg_ptr)
-{
- *pg_ptr = (*iter);
- if ((*iter) != NULL) {
- (*iter) = (*iter)->next;
- }
-
- return MPI_SUCCESS;
-}
-
-int MPIDI_PG_Has_next(MPIDI_PG_iterator *iter)
-{
- return (*iter != NULL);
-}
-
-int MPIDI_PG_Get_iterator(MPIDI_PG_iterator *iter)
-{
- *iter = MPIDI_PG_list;
- return MPI_SUCCESS;
-}
-
-/* FIXME: What does DEV_IMPLEMENTS_KVS mean? Why is it used? Who uses
- PG_To_string and why? */
-
-/* PG_To_string is used in the implementation of connect/accept (and
- hence in spawn) */
-/* Note: Allocated memory that is returned in str_ptr. The user of
- this routine must free that data */
-int MPIDI_PG_To_string(MPIDI_PG_t *pg_ptr, char **str_ptr, int *lenStr)
-{
- int mpi_errno = MPI_SUCCESS;
-
- /* Replace this with the new string */
- MPIDI_connToStringKVS( str_ptr, lenStr, pg_ptr );
-#if 0
- if (pg_ptr->connInfoToString) {
- (*pg_ptr->connInfoToString)( str_ptr, lenStr, pg_ptr );
- }
- else {
- MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_INTERN,"**noConnInfoToString");
- }
-#endif
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* This routine takes a string description of a process group (created with
- MPIDI_PG_To_string, usually on a different process) and returns a pointer to
- the matching process group. If the group already exists, flag is set to
- false. If the group does not exist, it is created with MPIDI_PG_Create (and
- hence is added to the list of active process groups) and flag is set to
- true. In addition, the connection information is set up using the
- information in the input string.
-*/
-int MPIDI_PG_Create_from_string(const char * str, MPIDI_PG_t ** pg_pptr,
- int *flag)
-{
- int mpi_errno = MPI_SUCCESS;
- const char *p;
- char *pg_id, *pg_id2, *cp2, *cp3,*str2, *str3;
- int vct_sz, i;
- MPIDI_PG_t *existing_pg, *pg_ptr=0;
-
- TRACE_ERR("MPIDI_PG_Create_from_string - str=%s\n", str);
- /* The pg_id is at the beginning of the string, so we can just pass
- it to the find routine */
- /* printf( "Looking for pg with id %s\n", str );fflush(stdout); */
- mpi_errno = MPIDI_PG_Find((void *)str, &existing_pg);
- if (mpi_errno) TRACE_ERR("MPIDI_PG_Find returned with mpi_errno=%d\n", mpi_errno);
-
- if (existing_pg != NULL) {
- /* return the existing PG */
- *pg_pptr = existing_pg;
- *flag = 0;
- /* Note that the memory for the pg_id is freed in the exit */
- goto fn_exit;
- }
- *flag = 1;
-
- /* Get the size from the string */
- p = str;
- while (*p) p++; p++;
- vct_sz = atoi(p);
-
- while (*p) p++;p++;
- char *p_tmp = MPIU_Strdup(p);
- TRACE_ERR("before MPIDI_PG_Create - p=%s p_tmp=%s vct_sz=%d\n", p, p_tmp, vct_sz);
- mpi_errno = MPIDI_PG_Create(vct_sz, (void *)str, pg_pptr);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_PG_Create returned with mpi_errno=%d\n", mpi_errno);
- }
-
- pg_ptr = *pg_pptr;
- pg_ptr->vct[0].taskid=atoi(strtok(p_tmp,":"));
- for(i=1; i<vct_sz; i++) {
- pg_ptr->vct[i].taskid=atoi(strtok(NULL,":"));
- }
- TRACE_ERR("pg_ptr->id = %s\n",(*pg_pptr)->id);
- MPIU_Free(p_tmp);
-
- if(verbose)
- MPIU_PG_Printall(stderr);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#ifdef HAVE_CTYPE_H
-/* Needed for isdigit */
-#include <ctype.h>
-#endif
-
-
-/* For all of these routines, the format of the process group description
- that is created and used by the connTo/FromString routines is this:
- (All items are strings, terminated by null)
-
- process group id string
- sizeof process group (as string)
- conninfo for rank 0
- conninfo for rank 1
- ...
-
- The "conninfo for rank 0" etc. for the original (MPI_COMM_WORLD)
- process group are stored in the PMI_KVS space with the keys
- p<rank>-businesscard .
-
- Fixme: Add a routine to publish the connection info to this file so that
- the key for the businesscard is defined in just this one file.
-*/
-
-
-/* The "KVS" versions are for the process group to which the calling
- process belongs. These use the PMI_KVS routines to access the
- process information */
-static int MPIDI_getConnInfoKVS( int rank, char *buf, int bufsize, MPIDI_PG_t *pg )
-{
-#ifdef USE_PMI2_API
- char key[MPIDI_MAX_KVS_KEY_LEN];
- int mpi_errno = MPI_SUCCESS, rc;
- int vallen;
-
- rc = MPL_snprintf(key, MPIDI_MAX_KVS_KEY_LEN, "P%d-businesscard", rank );
-
- mpi_errno = PMI2_KVS_Get(pg->connData, PMI2_ID_NULL, key, buf, bufsize, &vallen);
- if (mpi_errno) {
- TRACE_ERR("PMI2_KVS_Get returned with mpi_errno=%d\n", mpi_errno);
- }
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-#else
- char key[MPIDI_MAX_KVS_KEY_LEN];
- int mpi_errno = MPI_SUCCESS, rc, pmi_errno;
-
- rc = MPL_snprintf(key, MPIDI_MAX_KVS_KEY_LEN, "P%d-businesscard", rank );
- if (rc < 0 || rc > MPIDI_MAX_KVS_KEY_LEN) {
- MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
- }
-
-/* MPIU_THREAD_CS_ENTER(PMI,);*/
- pmi_errno = PMI_KVS_Get(pg->connData, key, buf, bufsize );
- if (pmi_errno) {
- MPIDI_PG_CheckForSingleton();
- pmi_errno = PMI_KVS_Get(pg->connData, key, buf, bufsize );
- }
-/* MPIU_THREAD_CS_EXIT(PMI,);*/
- if (pmi_errno) {
- MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**pmi_kvs_get");
- }
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-#endif
-}
-
-/* *slen is the length of the string, including the null terminator. So if the
- resulting string is |foo\0bar\0|, then *slen == 8. */
-int MPIDI_connToStringKVS( char **buf_p, int *slen, MPIDI_PG_t *pg )
-{
- char *string = 0;
- char *pg_idStr = (char *)pg->id; /* In the PMI/KVS space,
- the pg id is a string */
- char buf[MPIDI_MAX_KVS_VALUE_LEN];
- int i, j, vallen, rc, mpi_errno = MPI_SUCCESS, len;
- int curSlen, nChars;
-
- /* Make an initial allocation of a string with an estimate of the
- needed space */
- len = 0;
- curSlen = 10 + pg->size * 128;
- string = (char *)MPIU_Malloc( curSlen );
-
- /* Start with the id of the pg */
- while (*pg_idStr && len < curSlen)
- string[len++] = *pg_idStr++;
- string[len++] = 0;
-
- /* Add the size of the pg */
- MPL_snprintf( &string[len], curSlen - len, "%d", pg->size );
- while (string[len]) len++;
- string[len++] = 0;
-
- /* add the taskids of the pg */
- for(i = 0; i < pg->size; i++) {
- MPL_snprintf(buf, MPIDI_MAX_KVS_VALUE_LEN, "%d:", pg->vct[i].taskid);
- vallen = strlen(buf);
- if (len+vallen+1 >= curSlen) {
- char *nstring = 0;
- curSlen += (pg->size - i) * (vallen + 1 );
- nstring = MPIU_Realloc( string, curSlen);
- MPID_assert(nstring != NULL);
- string = nstring;
- }
- /* Append to string */
- nChars = MPL_snprintf(&string[len], curSlen - len, "%d:", pg->vct[i].taskid);
- len+=nChars;
- }
-
-#if 0
- for (i=0; i<pg->size; i++) {
- rc = getConnInfoKVS( i, buf, MPIDI_MAX_KVS_VALUE_LEN, pg );
- if (rc) {
- MPL_internal_error_printf(
- "Panic: getConnInfoKVS failed for %s (rc=%d)\n",
- (char *)pg->id, rc );
- }
-#ifndef USE_PERSISTENT_SHARED_MEMORY
- /* FIXME: This is a hack to avoid including shared-memory
- queue names in the business card that may be used
- by processes that were not part of the same COMM_WORLD.
- To fix this, the shared memory channels should look at the
- returned connection info and decide whether to use
- sockets or shared memory by determining whether the
- process is in the same MPI_COMM_WORLD. */
- /* FIXME: The more general problem is that the connection information
- needs to include some information on the range of validity (e.g.,
- all processes, same comm world, particular ranks), and that
- representation needs to be scalable */
-/* printf( "Adding key %s value %s\n", key, val ); */
- {
- char *p = strstr( buf, "$shm_host" );
- if (p) p[1] = 0;
- /* printf( "(fixed) Adding key %s value %s\n", key, val ); */
- }
-#endif
- /* Add the information to the output buffer */
- vallen = strlen(buf);
- /* Check that this will fix in the remaining space */
- if (len + vallen + 1 >= curSlen) {
- char *nstring = 0;
- curSlen += (pg->size - i) * (vallen + 1 );
- nstring = MPIU_Realloc( string, curSlen);
- if (!nstring) {
- MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomem");
- }
- string = nstring;
- }
- /* Append to string */
- for (j=0; j<vallen+1; j++) {
- string[len++] = buf[j];
- }
- }
-#endif
-
- MPIU_Assert(len <= curSlen);
-
- *buf_p = string;
- *slen = len;
- fn_exit:
- return mpi_errno;
- fn_fail:
- if (string) MPIU_Free(string);
- goto fn_exit;
-}
-
-static int MPIDI_connFromStringKVS( const char *buf ATTRIBUTE((unused)),
- MPIDI_PG_t *pg ATTRIBUTE((unused)) )
-{
- /* Fixme: this should be a failure to call this routine */
- return MPI_SUCCESS;
-}
-static int MPIDI_connFreeKVS( MPIDI_PG_t *pg )
-{
- if (pg->connData) {
- MPIU_Free( pg->connData );
- }
- return MPI_SUCCESS;
-}
-
-
-int MPIDI_PG_InitConnKVS( MPIDI_PG_t *pg )
-{
-#ifdef USE_PMI2_API
- int mpi_errno = MPI_SUCCESS;
-
- pg->connData = (char *)MPIU_Malloc(MAX_JOBID_LEN);
- if (pg->connData == NULL) {
- TRACE_ERR("MPIDI_PG_InitConnKVS - MPIU_Malloc failure\n");
- }
-
- mpi_errno = PMI2_Job_GetId(pg->connData, MAX_JOBID_LEN);
- if (mpi_errno) TRACE_ERR("PMI2_Job_GetId returned with mpi_errno=%d\n", mpi_errno);
-#else
- int pmi_errno, kvs_name_sz;
- int mpi_errno = MPI_SUCCESS;
-
- pmi_errno = PMI_KVS_Get_name_length_max( &kvs_name_sz );
- if (pmi_errno != PMI_SUCCESS) {
- MPIU_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER,
- "**pmi_kvs_get_name_length_max",
- "**pmi_kvs_get_name_length_max %d", pmi_errno);
- }
-
- pg->connData = (char *)MPIU_Malloc(kvs_name_sz + 1);
- if (pg->connData == NULL) {
- MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**nomem");
- }
-
- pmi_errno = PMI_KVS_Get_my_name(pg->connData, kvs_name_sz);
- if (pmi_errno != PMI_SUCCESS) {
- MPIU_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER,
- "**pmi_kvs_get_my_name",
- "**pmi_kvs_get_my_name %d", pmi_errno);
- }
-#endif
- pg->getConnInfo = MPIDI_getConnInfoKVS;
- pg->connInfoToString = MPIDI_connToStringKVS;
- pg->connInfoFromString = MPIDI_connFromStringKVS;
- pg->freeConnInfo = MPIDI_connFreeKVS;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- if (pg->connData) { MPIU_Free(pg->connData); }
- goto fn_exit;
-}
-
-/* Return the kvsname associated with the MPI_COMM_WORLD of this process. */
-int MPIDI_PG_GetConnKVSname( char ** kvsname )
-{
- *kvsname = pg_world->connData;
- return MPI_SUCCESS;
-}
-
-/* For process groups that are not our MPI_COMM_WORLD, store the connection
- information in an array of strings. These routines and structure
- implement the access to this information. */
-typedef struct {
- int toStringLen; /* Length needed to encode this connection info */
- char ** connStrings; /* pointer to an array, indexed by rank, containing
- connection information */
-} MPIDI_ConnInfo;
-
-
-static int MPIDI_getConnInfo( int rank, char *buf, int bufsize, MPIDI_PG_t *pg )
-{
- MPIDI_ConnInfo *connInfo = (MPIDI_ConnInfo *)pg->connData;
-
- /* printf( "Entering getConnInfo\n" ); fflush(stdout); */
- if (!connInfo || !connInfo->connStrings || !connInfo->connStrings[rank]) {
- /* FIXME: Turn this into a valid error code create/return */
- /*printf( "Fatal error in getConnInfo (rank = %d)\n", rank );
- printf( "connInfo = %p\n", connInfo );fflush(stdout); */
- if (connInfo) {
-/* printf( "connInfo->connStrings = %p\n", connInfo->connStrings ); */
- }
- /* Fatal error. Connection information missing */
- fflush(stdout);
- }
-
- /* printf( "Copying %s to buf\n", connInfo->connStrings[rank] ); fflush(stdout); */
-
- MPIU_Strncpy( buf, connInfo->connStrings[rank], bufsize );
- return MPI_SUCCESS;
-}
-
-
-static int MPIDI_connToString( char **buf_p, int *slen, MPIDI_PG_t *pg )
-{
- int mpi_errno = MPI_SUCCESS;
- char *str = NULL, *pg_id;
- int i, len=0;
- MPIDI_ConnInfo *connInfo = (MPIDI_ConnInfo *)pg->connData;
-
- /* Create this from the string array */
- str = (char *)MPIU_Malloc(connInfo->toStringLen);
-
-#if defined(MPICH_DEBUG_MEMINIT)
- memset(str, 0, connInfo->toStringLen);
-#endif
-
- pg_id = pg->id;
- /* FIXME: This is a hack, and it doesn't even work */
- /* MPIDI_PrintConnStrToFile( stdout, __FILE__, __LINE__,
- "connToString: pg id is", (char *)pg_id );*/
- /* This is intended to cause a process to transition from a singleton
- to a non-singleton. */
- /* XXX DJG TODO figure out what this little bit is all about. */
- if (strstr( pg_id, "singinit_kvs" ) == pg_id) {
-#ifdef USE_PMI2_API
- MPIU_Assertp(0); /* don't know what to do here for pmi2 yet. DARIUS */
-#else
- PMI_KVS_Get_my_name( pg->id, 256 );
-#endif
- }
-
- while (*pg_id) str[len++] = *pg_id++;
- str[len++] = 0;
-
- MPL_snprintf( &str[len], 20, "%d", pg->size);
- /* Skip over the length */
- while (str[len++]);
-
- /* Copy each connection string */
- for (i=0; i<pg->size; i++) {
- char *p = connInfo->connStrings[i];
- while (*p) { str[len++] = *p++; }
- str[len++] = 0;
- }
-
- if (len > connInfo->toStringLen) {
- *buf_p = 0;
- *slen = 0;
- TRACE_ERR("len > connInfo->toStringLen");
- }
-
- *buf_p = str;
- *slen = len;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-
-}
-
-
-static int MPIDI_connFromString( const char *buf, MPIDI_PG_t *pg )
-{
- MPIDI_ConnInfo *conninfo = 0;
- int i, mpi_errno = MPI_SUCCESS;
- const char *buf0 = buf; /* save the start of buf */
-
- /* printf( "Starting with buf = %s\n", buf );fflush(stdout); */
-
- /* Skip the pg id */
- while (*buf) buf++; buf++;
-
- /* Determine the size of the pg */
- pg->size = atoi( buf );
- while (*buf) buf++; buf++;
-
- conninfo = (MPIDI_ConnInfo *)MPIU_Malloc( sizeof(MPIDI_ConnInfo) );
- conninfo->connStrings = (char **)MPIU_Malloc( pg->size * sizeof(char *));
-
- /* For now, make a copy of each item */
- for (i=0; i<pg->size; i++) {
- /* printf( "Adding conn[%d] = %s\n", i, buf );fflush(stdout); */
- conninfo->connStrings[i] = MPIU_Strdup( buf );
- while (*buf) buf++;
- buf++;
- }
- pg->connData = conninfo;
-
- /* Save the length of the string needed to encode the connection
- information */
- conninfo->toStringLen = (int)(buf - buf0) + 1;
-
- return mpi_errno;
-}
-
-
-static int MPIDI_connFree( MPIDI_PG_t *pg )
-{
- MPIDI_ConnInfo *conninfo = (MPIDI_ConnInfo *)pg->connData;
- int i;
-
- for (i=0; i<pg->size; i++) {
- MPIU_Free( conninfo->connStrings[i] );
- }
- MPIU_Free( conninfo->connStrings );
- MPIU_Free( conninfo );
-
- return MPI_SUCCESS;
-}
-
-
-/*@
- MPIDI_PG_Dup_vcr - Duplicate a virtual connection from a process group
-
- Notes:
- This routine provides a dup of a virtual connection given a process group
- and a rank in that group. This routine is used only in initializing
- the MPI-1 communicators 'MPI_COMM_WORLD' and 'MPI_COMM_SELF', and in creating
- the initial intercommunicator after an 'MPI_Comm_spawn',
- 'MPI_Comm_spawn_multiple', or 'MPI_Comm_connect/MPI_Comm_accept'.
-
- In addition to returning a dup of the virtual connection, it manages the
- reference count of the process group, which is always the number of inuse
- virtual connections.
- @*/
-int MPIDI_PG_Dup_vcr( MPIDI_PG_t *pg, int rank, pami_task_t taskid, MPID_VCR *vcr_p )
-{
- int inuse;
- MPID_VCR vcr;
-
- TRACE_ERR("ENTER MPIDI_PG_Dup_vcr - pg->id=%s rank=%d taskid=%d\n", pg->id, rank, taskid);
- pg->vct[rank].taskid = taskid;
-
- vcr = MPIU_Malloc(sizeof(struct MPID_VCR_t));
- TRACE_ERR("MPIDI_PG_Dup_vcr- pg->vct[%d].pg=%x pg=%x vcr=%x vcr->pg=%x\n", rank, pg->vct[rank].pg, pg, vcr, vcr->pg);
- vcr->pg = pg;
- vcr->pg_rank = rank;
- vcr->taskid = taskid;
- /* Increase the reference count of the vc. If the reference count
- increases from 0 to 1, increase the reference count of the
- process group *and* the reference count of the vc (this
- allows us to distinquish between Comm_free and Comm_disconnect) */
- /* FIXME-MT: This should be a fetch and increment for thread-safety */
- /*if (MPIU_Object_get_ref(vcr_p) == 0) { */
- TRACE_ERR("MPIDI_PG_add_ref on pg=%s pg=%x\n", pg->id, pg);
- MPIDI_PG_add_ref(pg);
- inuse=MPIU_Object_get_ref(pg);
- TRACE_ERR("after MPIDI_PG_add_ref on pg=%s inuse=%d\n", pg->id, inuse);
-/* MPIDI_VC_add_ref(vcr_p);
- }
- MPIDI_VC_add_ref(vcr_p);*/
- *vcr_p = vcr;
-
- return MPI_SUCCESS;
-}
-
-
-/*
- * This routine may be called to print the contents (including states and
- * reference counts) for process groups.
- */
-int MPIU_PG_Printall( FILE *fp )
-{
- MPIDI_PG_t *pg;
- int i;
-
- pg = MPIDI_PG_list;
-
- fprintf( fp, "Process groups:\n" );
- while (pg) {
- /* XXX DJG FIXME-MT should we be checking this? */
- fprintf( fp, "size = %d, refcount = %d, id = %s\n",
- pg->size, MPIU_Object_get_ref(pg), (char *)pg->id );
- for (i=0; i<pg->size; i++) {
- fprintf( fp, "\tVCT rank = %d, refcount = %d, taskid = %d\n",
- pg->vct[i].pg_rank, MPIU_Object_get_ref(pg),
- pg->vct[i].taskid );
- }
- fflush(fp);
- pg = pg->next;
- }
-
- return 0;
-}
-
-#ifdef HAVE_CTYPE_H
-/* Needed for isdigit */
-#include <ctype.h>
-#endif
-/* Convert a process group id into a number. This is a hash-based approach,
- * which has the potential for some collisions. This is an alternative to the
- * previous approach that caused req#3930, which was to sum up the values of the
- * characters. The summing approach worked OK when the id's were all similar
- * but with an incrementing prefix or suffix, but terrible for a 32 hex-character
- * UUID type of id.
- *
- * FIXME It would really be best if the PM could give us this value.
- */
-/* FIXME: This is a temporary hack for devices that do not define
- MPIDI_DEV_IMPLEMENTS_KVS
- FIXME: MPIDI_DEV_IMPLEMENTS_KVS should be removed
- */
-void MPIDI_PG_IdToNum( MPIDI_PG_t *pg, int *id )
-{
- *id = atoi((char *)pg->id);
-}
-
-
-int MPID_PG_ForwardPGInfo( MPID_Comm *peer_ptr, MPID_Comm *comm_ptr,
- int nPGids, const int gpids[],
- int root )
-{
- int mpi_errno = MPI_SUCCESS;
- int i, allfound = 1, pgid, pgidWorld;
- MPIDI_PG_t *pg = 0;
- MPIDI_PG_iterator iter;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
-
- if(mpidi_dynamic_tasking) {
- /* Get the pgid for CommWorld (always attached to the first process
- group) */
- MPIDI_PG_Get_iterator(&iter);
- MPIDI_PG_Get_next( &iter, &pg );
- MPIDI_PG_IdToNum( pg, &pgidWorld );
-
- /* Extract the unique process groups */
- for (i=0; i<nPGids && allfound; i++) {
- if (gpids[0] != pgidWorld) {
- /* Add this gpid to the list of values to check */
- /* FIXME: For testing, we just test in place */
- MPIDI_PG_Get_iterator(&iter);
- do {
- MPIDI_PG_Get_next( &iter, &pg );
- if (!pg) {
- /* We don't know this pgid */
- allfound = 0;
- break;
- }
- MPIDI_PG_IdToNum( pg, &pgid );
- } while (pgid != gpids[0]);
- }
- gpids += 2;
- }
-
- /* See if everyone is happy */
- mpi_errno = MPIR_Allreduce_impl( MPI_IN_PLACE, &allfound, 1, MPI_INT, MPI_LAND, comm_ptr, &errflag );
-
- if (allfound) return MPI_SUCCESS;
-
- /* FIXME: We need a cleaner way to handle this case than using an ifdef.
- We could have an empty version of MPID_PG_BCast in ch3u_port.c, but
- that's a rather crude way of addressing this problem. Better is to
- make the handling of local and remote PIDS for the dynamic process
- case part of the dynamic process "module"; devices that don't support
- dynamic processes (and hence have only COMM_WORLD) could optimize for
- that case */
- /* We need to share the process groups. We use routines
- from ch3u_port.c */
- MPID_PG_BCast( peer_ptr, comm_ptr, root );
- }
- fn_exit:
- return MPI_SUCCESS;
- fn_fail:
- goto fn_exit;
-}
-#endif
diff --git a/src/mpid/pamid/src/dyntask/mpidi_port.c b/src/mpid/pamid/src/dyntask/mpidi_port.c
deleted file mode 100644
index fe69aca..0000000
--- a/src/mpid/pamid/src/dyntask/mpidi_port.c
+++ /dev/null
@@ -1,1766 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-
-#include <mpidimpl.h>
-
-#ifdef DYNAMIC_TASKING
-#define MAX_HOST_DESCRIPTION_LEN 256
-#define WORLDINTCOMMCNTR _global_world_intercomm_cntr
-#ifdef USE_PMI2_API
-#define MPID_MAX_JOBID_LEN 256
-#define TOTAL_AM 3
-#endif
-
-transactionID_struct *_transactionID_list = NULL;
-
-typedef struct {
- MPID_VCR vcr;
- int port_name_tag;
-}AM_struct;
-
-conn_info *_conn_info_list = NULL;
-extern int mpidi_dynamic_tasking;
-long long _global_world_intercomm_cntr = 0;
-
-typedef struct MPIDI_Acceptq
-{
- int port_name_tag;
- MPID_VCR vcr;
- struct MPIDI_Acceptq *next;
-}
-MPIDI_Acceptq_t;
-
-static MPIDI_Acceptq_t * acceptq_head=0;
-static int maxAcceptQueueSize = 0;
-static int AcceptQueueSize = 0;
-
-pthread_mutex_t rem_connlist_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-/* FIXME: If dynamic processes are not supported, this file will contain
- no code and some compilers may warn about an "empty translation unit" */
-
-/* FIXME: pg_translation is used for ? */
-typedef struct pg_translation {
- int pg_index; /* index of a process group (index in pg_node) */
- int pg_rank; /* rank in that process group */
- pami_task_t pg_taskid; /* rank in that process group */
-} pg_translation;
-
-
-typedef struct pg_node {
- int index; /* Internal index of process group
- (see pg_translation) */
- char *pg_id;
- char *str; /* String describing connection info for pg */
- int lenStr; /* Length of this string (including the null terminator(s)) */
- struct pg_node *next;
-} pg_node;
-
-
-void MPIDI_Recvfrom_remote_world(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- AM_struct *AM_data;
- MPID_VCR *new_vcr;
- int port_name_tag;
- MPIDI_Acceptq_t *q_item;
- pami_endpoint_t dest;
-
-
- q_item = MPIU_Malloc(sizeof(MPIDI_Acceptq_t));
- q_item->vcr = MPIU_Malloc(sizeof(struct MPID_VCR_t));
- q_item->vcr->pg = MPIU_Malloc(sizeof(MPIDI_PG_t));
- MPIU_Object_set_ref(q_item->vcr->pg, 0);
- TRACE_ERR("ENTER MPIDI_Acceptq_enqueue-1 q_item=%llx _msginfo=%llx (AM_struct *)_msginfo=%llx ((AM_struct *)_msginfo)->vcr=%llx\n", q_item, _msginfo, (AM_struct *)_msginfo, ((AM_struct *)_msginfo)->vcr);
- q_item->port_name_tag = ((AM_struct *)_msginfo)->port_name_tag;
- q_item->vcr->taskid = PAMIX_Endpoint_query(sender);
- TRACE_ERR("MPIDI_Recvfrom_remote_world INVOKED with new_vcr->taskid=%d\n",sender);
-
- /* Keep some statistics on the accept queue */
- AcceptQueueSize++;
- if (AcceptQueueSize > maxAcceptQueueSize)
- maxAcceptQueueSize = AcceptQueueSize;
-
- q_item->next = acceptq_head;
- acceptq_head = q_item;
- return;
-}
-
-
-/* These functions help implement the connect/accept algorithm */
-static int MPIDI_ExtractLocalPGInfo( struct MPID_Comm *, pg_translation [],
- pg_node **, int * );
-static int MPIDI_ReceivePGAndDistribute( struct MPID_Comm *, struct MPID_Comm *, int, int *,
- int, MPIDI_PG_t *[] );
-static int MPIDI_SendPGtoPeerAndFree( struct MPID_Comm *, int *, pg_node * );
-static int MPIDI_SetupNewIntercomm( struct MPID_Comm *comm_ptr, int remote_comm_size,
- pg_translation remote_translation[],
- int n_remote_pgs, MPIDI_PG_t **remote_pg,
- struct MPID_Comm *intercomm );
-static int MPIDI_Initialize_tmp_comm(struct MPID_Comm **comm_pptr,
- struct MPID_VCR_t *vcr_ptr, int is_low_group, int context_id_offset);
-
-
-/* ------------------------------------------------------------------------- */
-/*
- * Structure of this file and the connect/accept algorithm:
- *
- * Here are the steps involved in implementating MPI_Comm_connect and
- * MPI_Comm_accept. These same steps are used withing MPI_Comm_spawn
- * and MPI_Comm_spawn_multiple.
- *
- * First, the connecting process establishes a connection (not a virtual
- * connection!) to the designated accepting process.
- * This makes use of the usual (channel-specific) connection code.
- * Once this connection is established, the connecting process sends a packet
- * to the accepting process.
- * This packet contains a "port_tag_name", which is a value that
- * is used to separate different MPI port names (values from MPI_Open_port)
- * on the same process (this is a way to multiplex many MPI port names on
- * a single communication connection port).
- *
- * On the accepting side, the process waits until the progress engine
- * inserts the connect request into the accept queue (this is done with the
- * routine MPIDI_Acceptq_dequeue). This routine returns the matched
- * virtual connection (VC).
- *
- * Once both sides have established there VC, they both invoke
- * MPIDI_Initialize_tmp_comm to create a temporary intercommunicator.
- * A temporary intercommunicator is constructed so that we can use
- * MPI routines to send the other information that we need to complete
- * the connect/accept operation (described below).
- *
- * The above is implemented with the routines
- * MPIDI_Create_inter_root_communicator_connect
- * MPIDI_Create_inter_root_communicator_accept
- * MPIDI_Initialize_tmp_comm
- *
- * At this point, the two "root" processes of the communicators that are
- * connecting can use MPI communication. They must then exchange the
- * following information:
- *
- * The size of the "remote" communicator
- * Description of all process groups; that is, all of the MPI_COMM_WORLDs
- * that they know.
- * The shared context id that will be used
- *
- *
- */
-/* ------------------------------------------------------------------------- */
-
-int MPIDU_send_AM_to_leader(MPID_VCR new_vcr, int port_name_tag, pami_task_t taskid)
-{
- pami_send_t xferP;
- pami_endpoint_t dest;
- int rc, current_val;
-
- AM_struct AM_data;
-
- AM_data.vcr = new_vcr;
- TRACE_ERR("MPIDU_send_AM_to_leader - new_vcr->taskid=%d\n", new_vcr->taskid);
- AM_data.port_name_tag = port_name_tag;
- TRACE_ERR("send - %p %d %p %d\n", AM_data.vcr, AM_data.port_name_tag, AM_data.vcr, AM_data.vcr->taskid);
-
-
- memset(&xferP, 0, sizeof(pami_send_t));
- xferP.send.header.iov_base = (void*)&AM_data;
- xferP.send.header.iov_len = sizeof(AM_struct);
- xferP.send.dispatch = MPIDI_Protocols_Dyntask;
- /*xferP.hints.use_rdma = mpci_enviro.use_shmem;
- xferP.hints.use_shmem = mpci_enviro.use_shmem;*/
- rc = PAMI_Endpoint_create(MPIDI_Client, taskid, 0, &dest);
- TRACE_ERR("PAMI_Resume to taskid=%d\n", taskid);
- PAMI_Resume(MPIDI_Context[0],
- &dest, 1);
-
- if(rc != 0)
- TRACE_ERR("PAMI_Endpoint_create failed\n");
-
- xferP.send.dest = dest;
-
- rc = PAMI_Send(MPIDI_Context[0], &xferP);
-
-}
-
-
-/*
- * These next two routines are used to create a virtual connection
- * (VC) and a temporary intercommunicator that can be used to
- * communicate between the two "root" processes for the
- * connect and accept.
- */
-
-/* FIXME: Describe the algorithm for the connection logic */
-int MPIDI_Connect_to_root(const char * port_name,
- MPID_VCR * new_vc)
-{
- int mpi_errno = MPI_SUCCESS;
- MPID_VCR vc;
- char host_description[MAX_HOST_DESCRIPTION_LEN];
- int port, port_name_tag; pami_task_t taskid_tag;
- int hasIfaddr = 0;
- AM_struct *conn;
-
- /* First, create a new vc (we may use this to pass to a generic
- connection routine) */
- vc = MPIU_Malloc(sizeof(struct MPID_VCR_t));
- vc->pg = MPIU_Malloc(sizeof(MPIDI_PG_t));
- MPIU_Object_set_ref(vc->pg, 0);
- TRACE_ERR("vc from MPIDI_Connect_to_root=%llx vc->pg=%llx\n", vc, vc->pg);
- /* FIXME - where does this vc get freed? */
-
- *new_vc = vc;
-
- /* FIXME: There may need to be an additional routine here, to ensure that the
- channel is initialized for this pair of process groups (this process
- and the remote process to which the vc will connect). */
-/* MPIDI_VC_Init(vc->vc, NULL, 0); */
- vc->taskid = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_TASK_ID ).value.intval;
- TRACE_ERR("MPIDI_Connect_to_root - vc->taskid=%d\n", vc->taskid);
-
- mpi_errno = MPIDI_GetTagFromPort(port_name, &port_name_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
- TRACE_ERR("MPIDI_GetTagFromPort returned with mpi_errno=%d", mpi_errno);
- }
- mpi_errno = MPIDI_GetTaskidFromPort(port_name, &taskid_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
- TRACE_ERR("MPIDI_GetTaskidFromPort returned with mpi_errno=%d", mpi_errno);
- }
-
- TRACE_ERR("posting connect to host %s, port %d task %d vc %p\n",
- host_description, port, taskid_tag, vc );
- mpi_errno = MPIDU_send_AM_to_leader(vc, port_name_tag, taskid_tag);
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-
-/* ------------------------------------------------------------------------- */
-/* Business card management. These routines insert or extract connection
- information when using sockets from the business card */
-/* ------------------------------------------------------------------------- */
-
-/* FIXME: These are small routines; we may want to bring them together
- into a more specific post-connection-for-sock */
-
-/* The host_description should be of length MAX_HOST_DESCRIPTION_LEN */
-
-
-static int MPIDI_Create_inter_root_communicator_connect(const char *port_name,
- struct MPID_Comm **comm_pptr,
- MPID_VCR *vc_pptr)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPID_Comm *tmp_comm;
- struct MPID_VCR_t *connect_vc= NULL;
- int port_name_tag, taskid_tag;
- /* Connect to the root on the other side. Create a
- temporary intercommunicator between the two roots so that
- we can use MPI functions to communicate data between them. */
-
- MPIDI_Connect_to_root(port_name, &(connect_vc));
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_Connect_to_root returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* extract the tag from the port_name */
- mpi_errno = MPIDI_GetTagFromPort( port_name, &port_name_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
- TRACE_ERR("MPIDI_GetTagFromPort returned with mpi_errno=%d\n", mpi_errno);
- }
-
- mpi_errno = MPIDI_GetTaskidFromPort(port_name, &taskid_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
- TRACE_ERR("MPIDI_GetTaskidFromPort returned with mpi_errno=%d\n", mpi_errno);
- }
- connect_vc->taskid=taskid_tag;
- mpi_errno = MPIDI_Initialize_tmp_comm(&tmp_comm, connect_vc, 1, port_name_tag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_Initialize_tmp_comm returned with mpi_errno=%d\n", mpi_errno);
- }
-
- *comm_pptr = tmp_comm;
- *vc_pptr = connect_vc;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-/* Creates a communicator for the purpose of communicating with one other
- process (the root of the other group). It also returns the virtual
- connection */
-static int MPIDI_Create_inter_root_communicator_accept(const char *port_name,
- struct MPID_Comm **comm_pptr,
- MPID_VCR *vc_pptr)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPID_Comm *tmp_comm;
- MPID_VCR new_vc;
-
- MPID_Progress_state progress_state;
- int port_name_tag;
-
- /* extract the tag from the port_name */
- mpi_errno = MPIDI_GetTagFromPort( port_name, &port_name_tag);
- if (mpi_errno != MPIU_STR_SUCCESS) {
- TRACE_ERR("MPIDI_GetTagFromPort returned with mpi_errnp=%d\n", mpi_errno);
- }
-
- /* FIXME: Describe the algorithm used here, and what routine
- is user on the other side of this connection */
- /* dequeue the accept queue to see if a connection with the
- root on the connect side has been formed in the progress
- engine (the connection is returned in the form of a vc). If
- not, poke the progress engine. */
-
- for(;;)
- {
- MPIDI_Acceptq_dequeue(&new_vc, port_name_tag);
- if (new_vc != NULL)
- {
- break;
- }
-
- mpi_errno = MPID_Progress_wait(100);
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno)
- {
- TRACE_ERR("MPID_Progress_wait returned with mpi_errno=%d\n", mpi_errno);
- }
- /* --END ERROR HANDLING-- */
- }
-
- mpi_errno = MPIDI_Initialize_tmp_comm(&tmp_comm, new_vc, 0, port_name_tag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_Initialize_tmp_comm returned with mpi_errno=%d\n", mpi_errno);
- }
-
- *comm_pptr = tmp_comm;
- *vc_pptr = new_vc;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* This is a utility routine used to initialize temporary communicators
- used in connect/accept operations, and is only used in the above two
- routines */
-static int MPIDI_Initialize_tmp_comm(struct MPID_Comm **comm_pptr,
- struct MPID_VCR_t *vc_ptr, int is_low_group, int context_id_offset)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPID_Comm *tmp_comm, *commself_ptr;
-
- MPID_Comm_get_ptr( MPI_COMM_SELF, commself_ptr );
-
- /* WDG-old code allocated a context id that was then discarded */
- mpi_errno = MPIR_Comm_create(&tmp_comm);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Comm_create returned with mpi_errno=%d\n", mpi_errno);
- }
- /* fill in all the fields of tmp_comm. */
-
- /* We use the second half of the context ID bits for dynamic
- * processes. This assumes that the context ID mask array is made
- * up of uint32_t's. */
- /* FIXME: This code is still broken for the following case:
- * If the same process opens connections to the multiple
- * processes, this context ID might get out of sync.
- */
- tmp_comm->context_id = MPID_CONTEXT_SET_FIELD(DYNAMIC_PROC, context_id_offset, 1);
- tmp_comm->recvcontext_id = tmp_comm->context_id;
-
- /* sanity: the INVALID context ID value could potentially conflict with the
- * dynamic proccess space */
- MPIU_Assert(tmp_comm->context_id != MPIU_INVALID_CONTEXT_ID);
- MPIU_Assert(tmp_comm->recvcontext_id != MPIU_INVALID_CONTEXT_ID);
-
- /* FIXME - we probably need a unique context_id. */
- tmp_comm->remote_size = 1;
-
- /* Fill in new intercomm */
- tmp_comm->local_size = 1;
- tmp_comm->rank = 0;
- tmp_comm->comm_kind = MPID_INTERCOMM;
- tmp_comm->local_comm = NULL;
- tmp_comm->is_low_group = is_low_group;
-
- /* No pg structure needed since vc has already been set up
- (connection has been established). */
-
- /* Point local vcr, vcrt at those of commself_ptr */
- /* FIXME: Explain why */
- tmp_comm->local_vcrt = commself_ptr->vcrt;
- MPID_VCRT_Add_ref(commself_ptr->vcrt);
- tmp_comm->local_vcr = commself_ptr->vcr;
-
- /* No pg needed since connection has already been formed.
- FIXME - ensure that the comm_release code does not try to
- free an unallocated pg */
-
- /* Set up VC reference table */
- mpi_errno = MPID_VCRT_Create(tmp_comm->remote_size, &tmp_comm->vcrt);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPID_VCRT_Create returned with mpi_errno=%d", mpi_errno);
- }
- mpi_errno = MPID_VCRT_Get_ptr(tmp_comm->vcrt, &tmp_comm->vcr);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPID_VCRT_Get_ptr returned with mpi_errno=%d", mpi_errno);
- }
-
- /* FIXME: Why do we do a dup here? */
- MPID_VCR_Dup(vc_ptr, tmp_comm->vcr);
-
- *comm_pptr = tmp_comm;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-
-/**
- * * Function to add a new trasaction id in the transaction id list. This function
- * * gets called only when a new connection is made with remote tasks.
- * */
-void MPIDI_add_new_tranid(long long tranid)
-{
- int i;
- transactionID_struct *tridtmp=NULL;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- if(_transactionID_list == NULL) {
- _transactionID_list = (transactionID_struct*) MPIU_Malloc(sizeof(transactionID_struct));
- _transactionID_list->cntr_for_AM = MPIU_Malloc(TOTAL_AM*sizeof(int));
- _transactionID_list->tranid = tranid;
- for(i=0;i<TOTAL_AM;i++)
- _transactionID_list->cntr_for_AM[i] = 0;
- _transactionID_list->next = NULL;
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- return;
- }
-
- tridtmp = _transactionID_list;
- while(tridtmp->next != NULL)
- tridtmp = tridtmp->next;
-
- tridtmp->next = (transactionID_struct*) MPIU_Malloc(sizeof(transactionID_struct));
- tridtmp = tridtmp->next;
- tridtmp->tranid = tranid;
- tridtmp->cntr_for_AM = MPIU_Malloc(TOTAL_AM*sizeof(int));
- for(i=0;i<TOTAL_AM;i++)
- tridtmp->cntr_for_AM[i] = 0;
- tridtmp->next = NULL;
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-}
-
-
-/* ------------------------------------------------------------------------- */
-/*
- MPIDI_Comm_connect()
-
- Algorithm: First create a connection (vc) between this root and the
- root on the accept side. Using this vc, create a temporary
- intercomm between the two roots. Use MPI functions to communicate
- the other information needed to create the real intercommunicator
- between the processes on the two sides. Then free the
- intercommunicator between the roots. Most of the complexity is
- because there can be multiple process groups on each side.
-*/
-int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
- struct MPID_Comm *comm_ptr, struct MPID_Comm **newcomm)
-{
- int mpi_errno=MPI_SUCCESS;
- int j, i, rank, recv_ints[3], send_ints[3], context_id;
- int remote_comm_size=0;
- struct MPID_Comm *tmp_comm = NULL;
- MPID_VCR new_vc= NULL;
- int sendtag=100, recvtag=100, n_remote_pgs;
- int n_local_pgs=1, local_comm_size;
- pg_translation *local_translation = NULL, *remote_translation = NULL;
- pg_node *pg_list = NULL;
- MPIDI_PG_t **remote_pg = NULL;
- MPIU_Context_id_t recvcontext_id = MPIU_INVALID_CONTEXT_ID;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- long long comm_cntr, lcomm_cntr;
-
- /* Get the context ID here because we need to send it to the remote side */
- mpi_errno = MPIR_Get_contextid( comm_ptr, &recvcontext_id );
- TRACE_ERR("MPIDI_Comm_connect calling MPIR_Get_contextid = %d\n", recvcontext_id);
- if (mpi_errno) TRACE_ERR("MPIR_Get_contextid returned with mpi_errno=%d\n", mpi_errno);
-
- rank = comm_ptr->rank;
- local_comm_size = comm_ptr->local_size;
- TRACE_ERR("In MPIDI_Comm_connect - port_name=%s rank=%d root=%d\n", port_name, rank, root);
-
- WORLDINTCOMMCNTR += 1;
- comm_cntr = WORLDINTCOMMCNTR;
- lcomm_cntr = WORLDINTCOMMCNTR;
-
- if (rank == root)
- {
- /* Establish a communicator to communicate with the root on the
- other side. */
- mpi_errno = MPIDI_Create_inter_root_communicator_connect(
- port_name, &tmp_comm, &new_vc);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_Create_inter_root_communicator_connect returned mpi_errno=%d\n", mpi_errno);
- }
- TRACE_ERR("after MPIDI_Create_inter_root_communicator_connect - tmp_comm=%p new_vc=%p mpi_errno=%d\n", tmp_comm, new_vc, mpi_errno);
-
- /* Make an array to translate local ranks to process group index
- and rank */
- local_translation = MPIU_Malloc(local_comm_size*sizeof(pg_translation));
-/* MPIU_CHKLMEM_MALLOC(local_translation,pg_translation*,
- local_comm_size*sizeof(pg_translation),
- mpi_errno,"local_translation"); */
-
- /* Make a list of the local communicator's process groups and encode
- them in strings to be sent to the other side.
- The encoded string for each process group contains the process
- group id, size and all its KVS values */
- mpi_errno = MPIDI_ExtractLocalPGInfo( comm_ptr, local_translation,
- &pg_list, &n_local_pgs );
-
- /* Send the remote root: n_local_pgs, local_comm_size,
- Recv from the remote root: n_remote_pgs, remote_comm_size,
- recvcontext_id for newcomm */
-
- send_ints[0] = n_local_pgs;
- send_ints[1] = local_comm_size;
- send_ints[2] = recvcontext_id;
-
- TRACE_ERR("connect:sending 3 ints, %d, %d, %d, and receiving 2 ints with sendtag=%d recvtag=%d\n", send_ints[0], send_ints[1], send_ints[2], sendtag, recvtag);
- mpi_errno = MPIC_Sendrecv(send_ints, 3, MPI_INT, 0,
- sendtag++, recv_ints, 3, MPI_INT,
- 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- /* this is a no_port error because we may fail to connect
- on the send if the port name is invalid */
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
-
- mpi_errno = MPIC_Sendrecv_replace(&comm_cntr, 1, MPI_LONG_LONG_INT, 0,
- sendtag++, 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- /* this is a no_port error because we may fail to connect
- on the send if the port name is invalid */
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
- }
-
- /* broadcast the received info to local processes */
- TRACE_ERR("accept:broadcasting 2 ints - %d and %d\n", recv_ints[0], recv_ints[1]);
- mpi_errno = MPIR_Bcast_intra(recv_ints, 3, MPI_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
-
- mpi_errno = MPIR_Bcast_intra(&comm_cntr, 1, MPI_LONG_LONG_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
-
- if(lcomm_cntr > comm_cntr) comm_cntr = lcomm_cntr;
-
- /* check if root was unable to connect to the port */
-
- n_remote_pgs = recv_ints[0];
- remote_comm_size = recv_ints[1];
- context_id = recv_ints[2];
-
- TRACE_ERR("MPIDI_Comm_connect - n_remote_pgs=%d remote_comm_size=%d context_id=%d\n", n_remote_pgs,
- remote_comm_size, context_id);
- remote_pg = MPIU_Malloc(n_remote_pgs * sizeof(MPIDI_PG_t*));
- remote_translation = MPIU_Malloc(remote_comm_size * sizeof(pg_translation));
- /* Exchange the process groups and their corresponding KVSes */
- if (rank == root)
- {
- mpi_errno = MPIDI_SendPGtoPeerAndFree( tmp_comm, &sendtag, pg_list );
- mpi_errno = MPIDI_ReceivePGAndDistribute( tmp_comm, comm_ptr, root, &recvtag,
- n_remote_pgs, remote_pg );
- /* Receive the translations from remote process rank to process group
- index */
- mpi_errno = MPIC_Sendrecv(local_translation, local_comm_size * 3,
- MPI_INT, 0, sendtag++,
- remote_translation, remote_comm_size * 3,
- MPI_INT, 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno) {
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
-
- for (i=0; i<remote_comm_size; i++)
- {
- TRACE_ERR(" remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
- i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank);
- }
- }
- else
- {
- mpi_errno = MPIDI_ReceivePGAndDistribute( tmp_comm, comm_ptr, root, &recvtag,
- n_remote_pgs, remote_pg );
- }
-
- /* Broadcast out the remote rank translation array */
- mpi_errno = MPIR_Bcast_intra(remote_translation, remote_comm_size * 3, MPI_INT,
- root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
-
- char *pginfo = MPIU_Malloc(256*sizeof(char));
- memset(pginfo, 0, 256);
- char cp[20];
- for (i=0; i<remote_comm_size; i++)
- {
- TRACE_ERR(" remote_translation[%d].pg_index = %d remote_translation[%d].pg_rank = %d remote_translation[%d].pg_taskid=%d\n",
- i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank, i, remote_translation[i].pg_taskid);
- TRACE_ERR("remote_pg[remote_translation[%d].pg_index]->id=%s\n",i, (char *)(remote_pg[remote_translation[i].pg_index]->id));
- strcat(pginfo, (char *)(remote_pg[remote_translation[i].pg_index]->id));
- sprintf(cp, ":%d ", remote_translation[i].pg_taskid);
- strcat(pginfo, cp);
-
-
- }
- pginfo[strlen(pginfo)]='\0';
- TRACE_ERR("connection info %s\n", pginfo);
- /*MPIDI_Parse_connection_info(n_remote_pgs, remote_pg);*/
- MPIU_Free(pginfo);
-
- mpi_errno = MPIR_Comm_create(newcomm);
- if (mpi_errno) TRACE_ERR("MPIR_Comm_create returned with mpi_errno=%d\n", mpi_errno);
-
- (*newcomm)->context_id = context_id;
- (*newcomm)->recvcontext_id = recvcontext_id;
- (*newcomm)->is_low_group = 1;
-
- mpi_errno = MPIDI_SetupNewIntercomm( comm_ptr, remote_comm_size,
- remote_translation, n_remote_pgs, remote_pg, *newcomm );
- (*newcomm)->mpid.world_intercomm_cntr = comm_cntr;
- WORLDINTCOMMCNTR = comm_cntr;
- MPIDI_add_new_tranid(comm_cntr);
-
-/* MPIDI_Parse_connection_info(n_remote_pgs, remote_pg); */
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_SetupNewIntercomm returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* synchronize with remote root */
- if (rank == root)
- {
- mpi_errno = MPIC_Sendrecv(&i, 0, MPI_INT, 0,
- sendtag++, &j, 0, MPI_INT,
- 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* All communication with remote root done. Release the communicator. */
- MPIR_Comm_release(tmp_comm,0);
- }
-
- TRACE_ERR("connect:barrier\n");
- mpi_errno = MPIR_Barrier_intra(comm_ptr, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Barrier_intra returned with mpi_errno=%d\n", mpi_errno);
- }
-
- TRACE_ERR("connect:free new vc\n");
-
-fn_exit:
- if(local_translation) MPIU_Free(local_translation);
- return mpi_errno;
-
-fn_fail:
- goto fn_exit;
-}
-
-/*
- * Extract all of the process groups from the given communicator and
- * form a list (returned in pg_list) of those process groups.
- * Also returned is an array (local_translation) that contains tuples mapping
- * rank in process group to rank in that communicator (local translation
- * must be allocated before this routine is called). The number of
- * distinct process groups is returned in n_local_pgs_p .
- *
- * This allows an intercomm_create to exchange the full description of
- * all of the process groups that have made up the communicator that
- * will define the "remote group".
- */
-static int MPIDI_ExtractLocalPGInfo( struct MPID_Comm *comm_p,
- pg_translation local_translation[],
- pg_node **pg_list_p,
- int *n_local_pgs_p )
-{
- pg_node *pg_list = 0, *pg_iter, *pg_trailer;
- int i, cur_index = 0, local_comm_size, mpi_errno = 0;
- char *pg_id;
-
- local_comm_size = comm_p->local_size;
-
- /* Make a list of the local communicator's process groups and encode
- them in strings to be sent to the other side.
- The encoded string for each process group contains the process
- group id, size and all its KVS values */
-
- cur_index = 0;
- pg_list = MPIU_Malloc(sizeof(pg_node));
-
- pg_list->pg_id = MPIU_Strdup(comm_p->vcr[0]->pg->id);
- pg_list->index = cur_index++;
- pg_list->next = NULL;
- /* XXX DJG FIXME-MT should we be checking this? the add/release macros already check this */
- TRACE_ERR("MPIU_Object_get_ref(comm_p->vcr[0]->pg) comm_p=%x vsr=%x pg=%x %d\n", comm_p, comm_p->vcr[0], comm_p->vcr[0]->pg, MPIU_Object_get_ref(comm_p->vcr[0]->pg));
- MPIU_Assert( MPIU_Object_get_ref(comm_p->vcr[0]->pg));
- mpi_errno = MPIDI_PG_To_string(comm_p->vcr[0]->pg, &pg_list->str,
- &pg_list->lenStr );
- TRACE_ERR("pg_list->str=%s pg_list->lenStr=%d\n", pg_list->str, pg_list->lenStr);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_PG_To_string returned with mpi_errno=%d\n", mpi_errno);
- }
- TRACE_ERR("PG as string is %s\n", pg_list->str );
- local_translation[0].pg_index = 0;
- local_translation[0].pg_rank = comm_p->vcr[0]->pg_rank;
- local_translation[0].pg_taskid = comm_p->vcr[0]->taskid;
- TRACE_ERR("local_translation[0].pg_index=%d local_translation[0].pg_rank=%d\n", local_translation[0].pg_index, local_translation[0].pg_rank);
- pg_iter = pg_list;
- for (i=1; i<local_comm_size; i++) {
- pg_iter = pg_list;
- pg_trailer = pg_list;
- while (pg_iter != NULL) {
- /* Check to ensure pg is (probably) valid */
- /* XXX DJG FIXME-MT should we be checking this? the add/release macros already check this */
- MPIU_Assert(MPIU_Object_get_ref(comm_p->vcr[i]->pg) != 0);
- if (MPIDI_PG_Id_compare(comm_p->vcr[i]->pg->id, pg_iter->pg_id)) {
- local_translation[i].pg_index = pg_iter->index;
- local_translation[i].pg_rank = comm_p->vcr[i]->pg_rank;
- local_translation[i].pg_taskid = comm_p->vcr[i]->taskid;
- TRACE_ERR("local_translation[%d].pg_index=%d local_translation[%d].pg_rank=%d\n", i, local_translation[i].pg_index, i,local_translation[i].pg_rank);
- break;
- }
- if (pg_trailer != pg_iter)
- pg_trailer = pg_trailer->next;
- pg_iter = pg_iter->next;
- }
- if (pg_iter == NULL) {
- /* We use MPIU_Malloc directly because we do not know in
- advance how many nodes we may allocate */
- pg_iter = (pg_node*)MPIU_Malloc(sizeof(pg_node));
- pg_iter->pg_id = MPIU_Strdup(comm_p->vcr[i]->pg->id);
- pg_iter->index = cur_index++;
- pg_iter->next = NULL;
- mpi_errno = MPIDI_PG_To_string(comm_p->vcr[i]->pg, &pg_iter->str,
- &pg_iter->lenStr );
-
- TRACE_ERR("cur_index=%d pg_iter->str=%s pg_iter->lenStr=%d\n", cur_index, pg_iter->str, pg_iter->lenStr);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_PG_To_string returned with mpi_errno=%d\n", mpi_errno);
- }
- local_translation[i].pg_index = pg_iter->index;
- local_translation[i].pg_rank = comm_p->vcr[i]->pg_rank;
- local_translation[i].pg_taskid = comm_p->vcr[i]->taskid;
- pg_trailer->next = pg_iter;
- }
- }
-
- *n_local_pgs_p = cur_index;
- *pg_list_p = pg_list;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-
-
-/* The root process in comm_ptr receives strings describing the
- process groups and then distributes them to the other processes
- in comm_ptr.
- See SendPGToPeer for the routine that sends the descriptions */
-static int MPIDI_ReceivePGAndDistribute( struct MPID_Comm *tmp_comm, struct MPID_Comm *comm_ptr,
- int root, int *recvtag_p,
- int n_remote_pgs, MPIDI_PG_t *remote_pg[] )
-{
- char *pg_str = 0;
- char *pginfo = 0;
- int i, j, flag;
- int rank = comm_ptr->rank;
- int mpi_errno = 0;
- int recvtag = *recvtag_p;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
-
- TRACE_ERR("MPIDI_ReceivePGAndDistribute - n_remote_pgs=%d\n", n_remote_pgs);
- for (i=0; i<n_remote_pgs; i++) {
-
- if (rank == root) {
- /* First, receive the pg description from the partner */
- mpi_errno = MPIC_Recv(&j, 1, MPI_INT, 0, recvtag++,
- tmp_comm, MPI_STATUS_IGNORE, &errflag);
- *recvtag_p = recvtag;
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Recv returned with mpi_errno=%d\n", mpi_errno);
- }
- pg_str = (char*)MPIU_Malloc(j);
- mpi_errno = MPIC_Recv(pg_str, j, MPI_CHAR, 0, recvtag++,
- tmp_comm, MPI_STATUS_IGNORE, &errflag);
- *recvtag_p = recvtag;
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Recv returned with mpi_errno=%d\n", mpi_errno);
- }
- }
-
- /* Broadcast the size and data to the local communicator */
- TRACE_ERR("accept:broadcasting 1 int\n");
- mpi_errno = MPIR_Bcast_intra(&j, 1, MPI_INT, root, comm_ptr, &errflag);
- if (mpi_errno != MPI_SUCCESS) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
-
- if (rank != root) {
- /* The root has already allocated this string */
- pg_str = (char*)MPIU_Malloc(j);
- }
- TRACE_ERR("accept:broadcasting string of length %d\n", j);
- pg_str[j-1]='\0';
- mpi_errno = MPIR_Bcast_intra(pg_str, j, MPI_CHAR, root, comm_ptr, &errflag);
- if (mpi_errno != MPI_SUCCESS)
- TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
- /* Then reconstruct the received process group. This step
- also initializes the created process group */
-
- TRACE_ERR("Adding connection information - pg_str=%s\n", pg_str);
- TRACE_ERR("Creating pg from string %s flag=%d\n", pg_str, flag);
- mpi_errno = MPIDI_PG_Create_from_string(pg_str, &remote_pg[i], &flag);
- TRACE_ERR("remote_pg[%d]->id=%s\n", i, (char*)(remote_pg[i]->id));
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_PG_Create_from_string returned with mpi_errno=%d\n", mpi_errno);
- }
-
- MPIU_Free(pg_str);
- }
- /*MPIDI_Parse_connection_info(pg_str); */
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-
-void MPIDI_Add_connection_info(int wid, int wsize, pami_task_t *taskids) {
- int jobIdSize=64;
- char jobId[jobIdSize];
- int ref_count, i;
- conn_info *tmp_node1=NULL, *tmp_node2=NULL;
-
- TRACE_ERR("MPIDI_Add_connection_info ENTER wid=%d wsize=%d\n", wid, wsize);
- PMI2_Job_GetId(jobId, jobIdSize);
- if(atoi(jobId) == wid)
- return;
-
- /* FIXME: check the lock */
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- if(_conn_info_list == NULL) { /* Connection list is not yet created */
- _conn_info_list = (conn_info*) MPIU_Malloc(sizeof(conn_info));
- _conn_info_list->rem_world_id = wid;
- _conn_info_list->ref_count = 1;
-
- ref_count = _conn_info_list->ref_count;
- if(taskids != NULL) {
- _conn_info_list->rem_taskids = MPIU_Malloc((wsize+1)*sizeof(int));
- for(i=0;i<wsize;i++) {
- _conn_info_list->rem_taskids[i] = taskids[i];
- }
- _conn_info_list->rem_taskids[i] = -1;
- }
- else
- _conn_info_list->rem_taskids = NULL;
- _conn_info_list->next = NULL;
- }
- else {
- tmp_node1 = _conn_info_list;
- while(tmp_node1) {
- tmp_node2 = tmp_node1;
- if(tmp_node1->rem_world_id == wid)
- break;
- tmp_node1 = tmp_node1->next;
- }
- if(tmp_node1) { /* Connection already exists. Increment reference count */
- if(tmp_node1->ref_count == 0) {
- if(taskids != NULL) {
- tmp_node1->rem_taskids = MPIU_Malloc((wsize+1)*sizeof(int));
- for(i=0;i<wsize;i++) {
- tmp_node1->rem_taskids[i] = taskids[i];
- }
- tmp_node1->rem_taskids[i] = -1;
- }
- tmp_node1->rem_world_id = wid;
- }
- tmp_node1->ref_count++;
- ref_count = tmp_node1->ref_count;
- }
- else { /* Connection do not exists. Create a new connection */
- tmp_node2->next = (conn_info*) MPIU_Malloc(sizeof(conn_info));
- tmp_node2 = tmp_node2->next;
- tmp_node2->rem_world_id = wid;
- tmp_node2->ref_count = 1;
-
- ref_count = tmp_node2->ref_count;
- if(taskids != NULL) {
- tmp_node2->rem_taskids = MPIU_Malloc((wsize+1)*sizeof(int));
- for(i=0;i<wsize;i++) {
- tmp_node2->rem_taskids[i] = taskids[i];
- }
- tmp_node2->rem_taskids[i] = -1;
- }
- else
- tmp_node2->rem_taskids = NULL;
- tmp_node2->next = NULL;
- }
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-
- tmp_node1 = _conn_info_list;
- while(tmp_node1) {
- TRACE_ERR("REM WORLD=%d ref_count=%d", tmp_node1->rem_world_id,tmp_node1->ref_count);
-
- tmp_node1 = tmp_node1->next;
- }
-}
-
-
-/**
- * This routine adds the remote world (wid) to local known world linked list
- * if there is no record of it before, or increment the reference count
- * associated with world (wid) if it is known before
- */
-void MPIDI_Parse_connection_info(int n_remote_pgs, MPIDI_PG_t **remote_pg) {
- int i, p, ref_count=0;
- int jobIdSize=8;
- char jobId[jobIdSize];
- char *pginfo_sav, *pgid_taskid_sav, *pgid, *pgid_taskid[20], *pginfo_tmp, *cp3, *cp2;
- pami_task_t *taskids;
- int n_rem_wids=0;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_PG_t *existing_pg;
-
- for(p=0; p<n_remote_pgs; p++) {
- TRACE_ERR("call MPIDI_PG_Find to find %s\n", (char*)(remote_pg[p]->id));
- mpi_errno = MPIDI_PG_Find(remote_pg[p]->id, &existing_pg);
- if (mpi_errno) TRACE_ERR("MPIDI_PG_Find failed\n");
-
- if (existing_pg != NULL) {
- taskids = MPIU_Malloc((existing_pg->size)*sizeof(pami_task_t));
- for(i=0; i<existing_pg->size; i++) {
- taskids[i]=existing_pg->vct[i].taskid;
- TRACE_ERR("id=%s taskids[%d]=%d\n", (char*)(remote_pg[p]->id), i, taskids[i]);
- }
- MPIDI_Add_connection_info(atoi((char*)(remote_pg[p]->id)), existing_pg->size, taskids);
- MPIU_Free(taskids);
- }
- }
-}
-
-
-
-/**
- * Function to increment the active message counter for a particular trasaction id.
- * This function is used inside disconnect routine
- * whichAM = FIRST_AM/SECOND_AM/LAST_AM
- */
-void MPIDI_increment_AM_cntr_for_tranid(long long tranid, int whichAM)
-{
- transactionID_struct *tridtmp;
-
- /* No error thrown here if tranid not found. This is for the case where timout
- * happened in MPI_Comm_disconnect and tasks have freed the tranid list node
- * and now after this the Active message is received.
- */
-
- tridtmp = _transactionID_list;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- while(tridtmp != NULL) {
- if(tridtmp->tranid == tranid) {
- tridtmp->cntr_for_AM[whichAM]++;
- break;
- }
- tridtmp = tridtmp->next;
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-
- TRACE_ERR("MPIDI_increment_AM_cntr_for_tranid - tridtmp->cntr_for_AM[%d]=%d\n",
- whichAM, tridtmp->cntr_for_AM[whichAM]);
-}
-
-/**
- * Function to free a partucular trasaction id node from the trasaction id list.
- * This function is called inside disconnect routine once the remote connection is
- * terminated
- */
-void MPIDI_free_tranid_node(long long tranid)
-{
- transactionID_struct *tridtmp, *tridtmp2;
-
- MPID_assert(_transactionID_list != NULL);
-
- tridtmp = tridtmp2 = _transactionID_list;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- while(tridtmp != NULL) {
- if(tridtmp->tranid == tranid) {
- /* If there is only one node */
- if(_transactionID_list->next == NULL) {
- MPIU_Free(_transactionID_list->cntr_for_AM);
- MPIU_Free(_transactionID_list);
- _transactionID_list = NULL;
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- return;
- }
- /* If more than one node and if this is the first node of the list */
- if(tridtmp == _transactionID_list && tridtmp->next != NULL) {
- _transactionID_list = _transactionID_list->next;
- MPIU_Free(tridtmp->cntr_for_AM);
- MPIU_Free(tridtmp);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- return;
- }
- /* For rest all other nodes position of the list */
- tridtmp2->next = tridtmp->next;
- MPIU_Free(tridtmp->cntr_for_AM);
- MPIU_Free(tridtmp);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- return;
- }
- tridtmp2 = tridtmp;
- tridtmp = tridtmp->next;
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-}
-
-/** This routine is used inside finalize to free all the nodes
- * if the disconnect call has not been called
- */
-void MPIDI_free_all_tranid_node()
-{
- transactionID_struct *tridtmp;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- while(_transactionID_list != NULL) {
- tridtmp = _transactionID_list;
- _transactionID_list = _transactionID_list->next;
- MPIU_Free(tridtmp->cntr_for_AM);
- MPIU_Free(tridtmp);
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-}
-
-/* Sends the process group information to the peer and frees the
- pg_list */
-static int MPIDI_SendPGtoPeerAndFree( struct MPID_Comm *tmp_comm, int *sendtag_p,
- pg_node *pg_list )
-{
- int mpi_errno = 0;
- int sendtag = *sendtag_p, i;
- pg_node *pg_iter;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
-
- while (pg_list != NULL) {
- pg_iter = pg_list;
- i = pg_iter->lenStr;
- TRACE_ERR("connect:sending 1 int: %d\n", i);
- mpi_errno = MPIC_Send(&i, 1, MPI_INT, 0, sendtag++, tmp_comm, &errflag);
- *sendtag_p = sendtag;
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Send returned with mpi_errno=%d\n", mpi_errno);
- }
-
- TRACE_ERR("connect:sending string length %d\n", i);
- mpi_errno = MPIC_Send(pg_iter->str, i, MPI_CHAR, 0, sendtag++,
- tmp_comm, &errflag);
- *sendtag_p = sendtag;
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Send returned with mpi_errno=%d\n", mpi_errno);
- }
-
- pg_list = pg_list->next;
- MPIU_Free(pg_iter->str);
- MPIU_Free(pg_iter->pg_id);
- MPIU_Free(pg_iter);
- }
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-/* ---------------------------------------------------------------------- */
-/*
- * MPIDI_Comm_accept()
-
- Algorithm: First dequeue the vc from the accept queue (it was
- enqueued by the progress engine in response to a connect request
- from the root process that is attempting the connection on
- the connect side). Use this vc to create an
- intercommunicator between this root and the root on the connect
- side. Use this intercomm. to communicate the other information
- needed to create the real intercommunicator between the processes
- on the two sides. Then free the intercommunicator between the
- roots. Most of the complexity is because there can be multiple
- process groups on each side.
-
- */
-int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
- struct MPID_Comm *comm_ptr, struct MPID_Comm **newcomm)
-{
- int mpi_errno=MPI_SUCCESS;
- int i, j, rank, recv_ints[3], send_ints[3], context_id;
- int remote_comm_size=0;
- struct MPID_Comm *tmp_comm = NULL, *intercomm;
- MPID_VCR new_vc = NULL;
- int sendtag=100, recvtag=100, local_comm_size;
- int n_local_pgs=1, n_remote_pgs;
- pg_translation *local_translation = NULL, *remote_translation = NULL;
- pg_node *pg_list = NULL;
- MPIDI_PG_t **remote_pg = NULL;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- char send_char[16], recv_char[16], remote_taskids[16];
- long long comm_cntr, lcomm_cntr;
- int leader_taskid;
-
- /* Create the new intercommunicator here. We need to send the
- context id to the other side. */
- mpi_errno = MPIR_Comm_create(newcomm);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Comm_create returned with mpi_errno=%d\n", mpi_errno);
- }
- mpi_errno = MPIR_Get_contextid( comm_ptr, &(*newcomm)->recvcontext_id );
- TRACE_ERR("In MPIDI_Comm_accept - MPIR_Get_contextid=%d\n", (*newcomm)->recvcontext_id);
- if (mpi_errno) TRACE_ERR("MPIR_Get_contextid returned with mpi_errno=%d\n", mpi_errno);
- /* FIXME why is this commented out? */
- /* (*newcomm)->context_id = (*newcomm)->recvcontext_id; */
-
- rank = comm_ptr->rank;
- local_comm_size = comm_ptr->local_size;
-
- WORLDINTCOMMCNTR += 1;
- comm_cntr = WORLDINTCOMMCNTR;
- lcomm_cntr = WORLDINTCOMMCNTR;
-
- if (rank == root)
- {
- /* Establish a communicator to communicate with the root on the
- other side. */
- mpi_errno = MPIDI_Create_inter_root_communicator_accept(port_name,
- &tmp_comm, &new_vc);
- TRACE_ERR("done MPIDI_Create_inter_root_communicator_accept mpi_errno=%d tmp_comm=%p new_vc=%p \n", mpi_errno, tmp_comm, new_vc);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_Create_inter_root_communicator_accept returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* Make an array to translate local ranks to process group index and
- rank */
- local_translation = MPIU_Malloc(local_comm_size*sizeof(pg_translation));
-/* MPIU_CHKLMEM_MALLOC(local_translation,pg_translation*,
- local_comm_size*sizeof(pg_translation),
- mpi_errno,"local_translation"); */
-
- /* Make a list of the local communicator's process groups and encode
- them in strings to be sent to the other side.
- The encoded string for each process group contains the process
- group id, size and all its KVS values */
- mpi_errno = MPIDI_ExtractLocalPGInfo( comm_ptr, local_translation,
- &pg_list, &n_local_pgs );
- /* Send the remote root: n_local_pgs, local_comm_size, context_id for
- newcomm.
- Recv from the remote root: n_remote_pgs, remote_comm_size */
-
- send_ints[0] = n_local_pgs;
- send_ints[1] = local_comm_size;
- send_ints[2] = (*newcomm)->recvcontext_id;
-
- TRACE_ERR("accept:sending 3 ints, %d, %d, %d, and receiving 2 ints with sendtag=%d recvtag=%d\n", send_ints[0], send_ints[1], send_ints[2], sendtag, recvtag);
- mpi_errno = MPIC_Sendrecv(send_ints, 3, MPI_INT, 0,
- sendtag++, recv_ints, 3, MPI_INT,
- 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
-#if 0
- send_char = pg_list->str;
- TRACE_ERR("accept:sending 1 string and receiving 1 string\n", send_char, recv_char);
- mpi_errno = MPIC_Sendrecv(send_char, 1, MPI_CHAR, 0,
- sendtag++, recv_char, 3, MPI_CHAR,
- 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
-#endif
- mpi_errno = MPIC_Sendrecv_replace(&comm_cntr, 1, MPI_LONG_LONG_INT, 0,
- sendtag++, 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- /* this is a no_port error because we may fail to connect
- on the send if the port name is invalid */
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
-
- }
-
- /* broadcast the received info to local processes */
- TRACE_ERR("accept:broadcasting 2 ints - %d and %d\n", recv_ints[0], recv_ints[1]);
- mpi_errno = MPIR_Bcast_intra(recv_ints, 3, MPI_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
-
- mpi_errno = MPIR_Bcast_intra(&comm_cntr, 1, MPI_LONG_LONG_INT, root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
-
- if(lcomm_cntr > comm_cntr) comm_cntr = lcomm_cntr;
- n_remote_pgs = recv_ints[0];
- remote_comm_size = recv_ints[1];
- context_id = recv_ints[2];
- remote_pg = MPIU_Malloc(n_remote_pgs * sizeof(MPIDI_PG_t*));
- remote_translation = MPIU_Malloc(remote_comm_size * sizeof(pg_translation));
- TRACE_ERR("[%d]accept:remote process groups: %d\nremote comm size: %d\nrecv_char: %s\n", rank, n_remote_pgs, remote_comm_size, remote_taskids);
-
- /* Exchange the process groups and their corresponding KVSes */
- if (rank == root)
- {
- /* The root receives the PG from the peer (in tmp_comm) and
- distributes them to the processes in comm_ptr */
- mpi_errno = MPIDI_ReceivePGAndDistribute( tmp_comm, comm_ptr, root, &recvtag,
- n_remote_pgs, remote_pg );
-
- mpi_errno = MPIDI_SendPGtoPeerAndFree( tmp_comm, &sendtag, pg_list );
-
- /* Receive the translations from remote process rank to process group index */
- TRACE_ERR("accept:sending %d ints and receiving %d ints\n", local_comm_size * 2, remote_comm_size * 2);
- mpi_errno = MPIC_Sendrecv(local_translation, local_comm_size * 3,
- MPI_INT, 0, sendtag++,
- remote_translation, remote_comm_size * 3,
- MPI_INT, 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- for (i=0; i<remote_comm_size; i++)
- {
- TRACE_ERR(" remote_translation[%d].pg_index = %d\n remote_translation[%d].pg_rank = %d\n",
- i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank);
- }
- }
- else
- {
- mpi_errno = MPIDI_ReceivePGAndDistribute( tmp_comm, comm_ptr, root, &recvtag,
- n_remote_pgs, remote_pg );
- }
- for(i=0; i<n_remote_pgs; i++)
- {
- TRACE_ERR("after calling MPIDI_ReceivePGAndDistribute - remote_pg[%d]->id=%s\n",i, (char *)(remote_pg[i]->id));
- }
-
-
- /* Broadcast out the remote rank translation array */
- TRACE_ERR("Broadcast remote_translation");
- mpi_errno = MPIR_Bcast_intra(remote_translation, remote_comm_size * 3, MPI_INT,
- root, comm_ptr, &errflag);
- if (mpi_errno) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
- TRACE_ERR("[%d]accept:Received remote_translation after broadcast:\n", rank);
- char *pginfo = MPIU_Malloc(256*sizeof(char));
- memset(pginfo, 0, 256);
- char cp[20];
- for (i=0; i<remote_comm_size; i++)
- {
- TRACE_ERR(" remote_translation[%d].pg_index = %d remote_translation[%d].pg_rank = %d remote_translation[%d].pg_taskid=%d\n",
- i, remote_translation[i].pg_index, i, remote_translation[i].pg_rank, i, remote_translation[i].pg_taskid);
- TRACE_ERR("remote_pg[remote_translation[%d].pg_index]->id=%s\n",i, (char *)(remote_pg[remote_translation[i].pg_index]->id));
- strcat(pginfo, (char *)(remote_pg[remote_translation[i].pg_index]->id));
- sprintf(cp, ":%d ", remote_translation[i].pg_taskid);
- strcat(pginfo, cp);
-
-
- }
- pginfo[strlen(pginfo)]='\0';
- TRACE_ERR("connection info %s\n", pginfo);
-/* MPIDI_Parse_connection_info(n_remote_pgs, remote_pg); */
- MPIU_Free(pginfo);
-
-
- /* Now fill in newcomm */
- intercomm = *newcomm;
- intercomm->context_id = context_id;
- intercomm->is_low_group = 0;
-
- mpi_errno = MPIDI_SetupNewIntercomm( comm_ptr, remote_comm_size,
- remote_translation, n_remote_pgs, remote_pg, intercomm );
- intercomm->mpid.world_intercomm_cntr = comm_cntr;
- WORLDINTCOMMCNTR = comm_cntr;
- MPIDI_add_new_tranid(comm_cntr);
-
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_SetupNewIntercomm returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* synchronize with remote root */
- if (rank == root)
- {
- mpi_errno = MPIC_Sendrecv(&i, 0, MPI_INT, 0,
- sendtag++, &j, 0, MPI_INT,
- 0, recvtag++, tmp_comm,
- MPI_STATUS_IGNORE, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIC_Sendrecv returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* All communication with remote root done. Release the communicator. */
- MPIR_Comm_release(tmp_comm,0);
- }
-
- mpi_errno = MPIR_Barrier_intra(comm_ptr, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Barrier_intra returned with mpi_errno=%d\n", mpi_errno);
- }
-
-fn_exit:
- if(local_translation) MPIU_Free(local_translation);
- return mpi_errno;
-
-fn_fail:
- goto fn_exit;
-}
-
-/* ------------------------------------------------------------------------- */
-
-/* This routine initializes the new intercomm, setting up the
- VCRT and other common structures. The is_low_group and context_id
- fields are NOT set because they differ in the use of this
- routine in Comm_accept and Comm_connect. The virtual connections
- are initialized from a collection of process groups.
-
- Input parameters:
-+ comm_ptr - communicator that gives the group for the "local" group on the
- new intercommnicator
-. remote_comm_size - size of remote group
-. remote_translation - array that specifies the process group and rank in
- that group for each of the processes to include in the remote group of the
- new intercommunicator
-- remote_pg - array of remote process groups
-
- Input/Output Parameter:
-. intercomm - New intercommunicator. The intercommunicator must already
- have been allocated; this routine initializes many of the fields
-
- Note:
- This routine performance a barrier over 'comm_ptr'. Why?
-*/
-static int MPIDI_SetupNewIntercomm( struct MPID_Comm *comm_ptr, int remote_comm_size,
- pg_translation remote_translation[],
- int n_remote_pgs, MPIDI_PG_t **remote_pg,
- struct MPID_Comm *intercomm )
-{
- int mpi_errno = MPI_SUCCESS, i, j, index=0;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- int total_rem_world_cnts, p=0;
- char *world_tasks, *cp1;
- conn_info *tmp_node;
- int conn_world_ids[64];
- MPID_VCR *worldlist;
- int worldsize;
- pami_endpoint_t dest;
- MPID_Comm *comm;
- pami_task_t leader1=-1, leader2=-1, leader_taskid=-1;
- long long comm_cntr=0, lcomm_cntr=-1;
- int jobIdSize=64;
- char jobId[jobIdSize];
-
- TRACE_ERR("MPIDI_SetupNewIntercomm - remote_comm_size=%d\n", remote_comm_size);
- /* FIXME: How much of this could/should be common with the
- upper level (src/mpi/comm/ *.c) code? For best robustness,
- this should use the same routine (not copy/paste code) as
- in the upper level code. */
- intercomm->attributes = NULL;
- intercomm->remote_size = remote_comm_size;
- intercomm->local_size = comm_ptr->local_size;
- intercomm->rank = comm_ptr->rank;
- intercomm->local_group = NULL;
- intercomm->remote_group = NULL;
- intercomm->comm_kind = MPID_INTERCOMM;
- intercomm->local_comm = NULL;
- intercomm->coll_fns = NULL;
- intercomm->mpid.world_ids = NULL; /*FIXME*/
-
- /* Point local vcr, vcrt at those of incoming intracommunicator */
- intercomm->local_vcrt = comm_ptr->vcrt;
- MPID_VCRT_Add_ref(comm_ptr->vcrt);
- intercomm->local_vcr = comm_ptr->vcr;
- for(i=0; i<comm_ptr->local_size; i++)
- TRACE_ERR("intercomm->local_vcr[%d]->pg_rank=%d comm_ptr->vcr[%d].pg_rank=%d intercomm->local_vcr[%d]->taskid=%d comm_ptr->vcr[%d]->taskid=%d\n", i, intercomm->local_vcr[i]->pg_rank, i, comm_ptr->vcr[i]->pg_rank, i, intercomm->local_vcr[i]->taskid, i, comm_ptr->vcr[i]->taskid);
-
- /* Set up VC reference table */
- mpi_errno = MPID_VCRT_Create(intercomm->remote_size, &intercomm->vcrt);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPID_VCRT_Create returned with mpi_errno=%d\n", mpi_errno);
- }
- mpi_errno = MPID_VCRT_Get_ptr(intercomm->vcrt, &intercomm->vcr);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPID_VCRT_Get_ptr returned with mpi_errno=%d\n", mpi_errno);
- }
-
- for (i=0; i < intercomm->remote_size; i++) {
- MPIDI_PG_Dup_vcr(remote_pg[remote_translation[i].pg_index],
- remote_translation[i].pg_rank, remote_translation[i].pg_taskid,&intercomm->vcr[i]);
- TRACE_ERR("MPIDI_SetupNewIntercomm - pg_id=%s pg_rank=%d pg_taskid=%d intercomm->vcr[%d]->taskid=%d intercomm->vcr[%d]->pg=%x\n ", remote_pg[remote_translation[i].pg_index]->id, remote_translation[i].pg_rank, remote_translation[i].pg_taskid, i, intercomm->vcr[i]->taskid, i, intercomm->vcr[i]->pg);
- PAMI_Endpoint_create(MPIDI_Client, remote_translation[i].pg_taskid, 0, &dest);
- PAMI_Resume(MPIDI_Context[0],
- &dest, 1);
- }
-
- MPIDI_Parse_connection_info(n_remote_pgs, remote_pg);
-
- /* anchor connection information in mpid */
- total_rem_world_cnts = 0;
- tmp_node = _conn_info_list;
- p=0;
- while(tmp_node != NULL) {
- total_rem_world_cnts++;
- conn_world_ids[p++]=tmp_node->rem_world_id;
- tmp_node = tmp_node->next;
- }
- if(intercomm->mpid.world_ids) { /* need to look at other places that may populate world id list for this communicator */
- for(i=0;intercomm->mpid.world_ids[i]!=-1;i++)
- {
- for(j=0;j<total_rem_world_cnts;j++) {
- if(intercomm->mpid.world_ids[i] == conn_world_ids[j]) {
- conn_world_ids[j] = -1;
- }
- }
- }
- /* Now Total world_ids inside intercomm->world_ids = i, excluding last entry of ' -1' */
- index = 0;
- for(j=0;j<total_rem_world_cnts;j++) {
- if(conn_world_ids[j] != -1)
- index++;
- }
- if(index) {
- intercomm->mpid.world_ids = MPIU_Malloc((index+i+1)*sizeof(int));
- /* Current index i inside intercomm->mpid.world_ids is
- * the place where next world_id can be added
- */
- for(j=0;j<total_rem_world_cnts;j++) {
- if(conn_world_ids[j] != -1) {
- intercomm->mpid.world_ids[i++] = conn_world_ids[j];
- }
- }
- intercomm->mpid.world_ids[i] = -1;
- }
- }
- else {
- index=0;
- intercomm->mpid.world_ids = MPIU_Malloc((n_remote_pgs+1)*sizeof(int));
- PMI2_Job_GetId(jobId, jobIdSize);
- for(i=0;i<n_remote_pgs;i++) {
- if(atoi(jobId) != atoi((char *)remote_pg[i]->id) )
- intercomm->mpid.world_ids[index++] = atoi((char *)remote_pg[i]->id);
- }
- intercomm->mpid.world_ids[index++] = -1;
- }
- for(i=0; intercomm->mpid.world_ids[i] != -1; i++)
- TRACE_ERR("intercomm=%x intercomm->mpid.world_ids[%d]=%d\n", intercomm, i, intercomm->mpid.world_ids[i]);
-
- leader_taskid = comm_ptr->vcr[0]->taskid;
-
- MPID_Comm *comm_world_ptr = MPIR_Process.comm_world;
- worldlist = comm_world_ptr->vcr;
- worldsize = comm_world_ptr->local_size;
- comm = intercomm;
- for(i=0;i<intercomm->local_size;i++)
- {
- for(j=0;j<comm_world_ptr->local_size;j++)
- {
- if(intercomm->local_vcr[i]->taskid == comm_world_ptr->vcr[j]->taskid) {
- leader1 = comm_world_ptr->vcr[j]->taskid;
- break;
- }
- }
- if(leader1 != -1)
- break;
- }
- for(i=0;i<intercomm->remote_size;i++)
- {
- for(j=0;j<comm_world_ptr->local_size;j++)
- {
- if(intercomm->vcr[i]->taskid == comm_world_ptr->vcr[j]->taskid) {
- leader2 = comm_world_ptr->vcr[j]->taskid;
- break;
- }
- }
- if(leader2 != -1)
- break;
- }
-
- if(leader1 == -1)
- leader_taskid = leader2;
- else if(leader2 == -1)
- leader_taskid = leader1;
- else
- leader_taskid = leader1 < leader2 ? leader1 : leader2;
- intercomm->mpid.local_leader = leader_taskid;
-
- mpi_errno = MPIR_Comm_commit(intercomm);
- if (mpi_errno) TRACE_ERR("MPIR_Comm_commit returned with mpi_errno=%d\n", mpi_errno);
-
- mpi_errno = MPIR_Barrier_intra(comm_ptr, &errflag);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIR_Barrier_intra returned with mpi_errno=%d\n", mpi_errno);
- }
-
- fn_exit:
- if(remote_pg) MPIU_Free(remote_pg);
- if(remote_translation) MPIU_Free(remote_translation);
- return mpi_errno;
-
- fn_fail:
- goto fn_exit;
-}
-
-
-/* Attempt to dequeue a vc from the accept queue. If the queue is
- empty or the port_name_tag doesn't match, return a NULL vc. */
-int MPIDI_Acceptq_dequeue(MPID_VCR * vcr, int port_name_tag)
-{
- int mpi_errno=MPI_SUCCESS;
- MPIDI_Acceptq_t *q_item, *prev;
- *vcr = NULL;
- q_item = acceptq_head;
- prev = q_item;
-
- while (q_item != NULL)
- {
- if (q_item->port_name_tag == port_name_tag)
- {
- *vcr = q_item->vcr;
-
- if ( q_item == acceptq_head )
- acceptq_head = q_item->next;
- else
- prev->next = q_item->next;
-
- MPIU_Free(q_item);
- AcceptQueueSize--;
- break;;
- }
- else
- {
- prev = q_item;
- q_item = q_item->next;
- }
- }
-
- return mpi_errno;
-}
-
-
-/**
- * This routine return the list of taskids associated with world (wid)
- */
-int* MPIDI_get_taskids_in_world_id(int wid) {
- conn_info *tmp_node;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- tmp_node = _conn_info_list;
- while(tmp_node != NULL) {
- if(tmp_node->rem_world_id == wid) {
- break;
- }
- tmp_node = tmp_node->next;
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- if(tmp_node == NULL)
- return NULL;
- else
- return (tmp_node->rem_taskids);
-}
-
-void MPIDI_IpState_reset(int dest)
-{
- MPIDI_In_cntr_t *in_cntr;
- in_cntr=&MPIDI_In_cntr[dest];
-
- in_cntr->n_OutOfOrderMsgs = 0;
- in_cntr->nMsgs = 0;
- in_cntr->OutOfOrderList = NULL;
-}
-
-
-void MPIDI_OpState_reset(int dest)
-{
- MPIDI_Out_cntr_t *out_cntr;
- out_cntr=&MPIDI_Out_cntr[dest];
-
- out_cntr->nMsgs = 0;
- out_cntr->unmatched = 0;
-}
-
-
-/**
- * This routine return the connection reference count associated with the
- * remote world identified by wid
- */
-int MPIDI_get_refcnt_of_world(int wid) {
- conn_info *tmp_node;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- tmp_node = _conn_info_list;
- while(tmp_node != NULL) {
- if(tmp_node->rem_world_id == wid) {
- break;
- }
- tmp_node = tmp_node->next;
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- if(tmp_node == NULL)
- return 0;
- else
- return (tmp_node->ref_count);
-}
-
-/**
- * This routine delete world (wid) from linked list of known world descriptors
- */
-void MPIDI_delete_conn_record(int wid) {
- conn_info *tmp_node1, *tmp_node2;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- tmp_node1 = tmp_node2 = _conn_info_list;
- while(tmp_node1) {
- if(tmp_node1->rem_world_id == wid) {
- if(tmp_node1 == tmp_node2) {
- _conn_info_list = tmp_node1->next;
- }
- else {
- tmp_node2->next = tmp_node1->next;
- }
- if(tmp_node1->rem_taskids != NULL)
- MPIU_Free(tmp_node1->rem_taskids);
- MPIU_Free(tmp_node1);
- break;
- }
- tmp_node2 = tmp_node1;
- tmp_node1 = tmp_node1->next;
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-}
-
-
-int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root )
-{
- int n_local_pgs=0, mpi_errno = MPI_SUCCESS;
- pg_translation *local_translation = 0;
- pg_node *pg_list, *pg_next, *pg_head = 0;
- int rank, i, peer_comm_size;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPIU_CHKLMEM_DECL(1);
-
- peer_comm_size = comm_p->local_size;
- rank = comm_p->rank;
-
- local_translation = (pg_translation*)MPIU_Malloc(peer_comm_size*sizeof(pg_translation));
- if (rank == root) {
- /* Get the process groups known to the *peercomm* */
- MPIDI_ExtractLocalPGInfo( peercomm_p, local_translation, &pg_head,
- &n_local_pgs );
- }
-
- /* Now, broadcast the number of local pgs */
- mpi_errno = MPIR_Bcast_impl( &n_local_pgs, 1, MPI_INT, root, comm_p, &errflag);
-
- pg_list = pg_head;
- for (i=0; i<n_local_pgs; i++) {
- int len, flag;
- char *pg_str=0;
- MPIDI_PG_t *pgptr;
-
- if (rank == root) {
- if (!pg_list) {
- /* FIXME: Error, the pg_list is broken */
- printf( "Unexpected end of pg_list\n" ); fflush(stdout);
- break;
- }
- pg_str = pg_list->str;
- len = pg_list->lenStr;
- pg_list = pg_list->next;
- }
- mpi_errno = MPIR_Bcast_impl( &len, 1, MPI_INT, root, comm_p, &errflag);
- if (rank != root) {
- pg_str = (char *)MPIU_Malloc(len);
- if (!pg_str) {
- goto fn_exit;
- }
- }
- mpi_errno = MPIR_Bcast_impl( pg_str, len, MPI_CHAR, root, comm_p, &errflag);
- if (mpi_errno) {
- if (rank != root)
- MPIU_Free( pg_str );
- }
-
- if (rank != root) {
- /* flag is true if the pg was created, false if it
- already existed. This step
- also initializes the created process group */
- MPIDI_PG_Create_from_string( pg_str, &pgptr, &flag );
- if (flag) {
- /*printf( "[%d]Added pg named %s to list\n", rank,
- (char *)pgptr->id );
- fflush(stdout); */
- }
- MPIU_Free( pg_str );
- }
- }
-
- /* Free pg_list */
- pg_list = pg_head;
-
- /* FIXME: We should use the PG destroy function for this, and ensure that
- the PG fields are valid for that function */
- while (pg_list) {
- pg_next = pg_list->next;
- MPIU_Free( pg_list->str );
- if (pg_list->pg_id ) {
- MPIU_Free( pg_list->pg_id );
- }
- MPIU_Free( pg_list );
- pg_list = pg_next;
- }
-
- fn_exit:
- MPIU_Free(local_translation);
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-#endif
diff --git a/src/mpid/pamid/src/misc/Makefile.mk b/src/mpid/pamid/src/misc/Makefile.mk
deleted file mode 100644
index 10f6587..0000000
--- a/src/mpid/pamid/src/misc/Makefile.mk
+++ /dev/null
@@ -1,33 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/misc/mpid_abort.c \
- src/mpid/pamid/src/misc/mpid_get_universe_size.c \
- src/mpid/pamid/src/misc/mpid_getpname.c \
- src/mpid/pamid/src/misc/mpid_mem.c \
- src/mpid/pamid/src/misc/mpid_unimpl.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/misc/mpid_abort.c b/src/mpid/pamid/src/misc/mpid_abort.c
deleted file mode 100644
index 79842c2..0000000
--- a/src/mpid/pamid/src/misc/mpid_abort.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/misc/mpid_abort.c
- * \brief Handle general operations assosicated with erroneous job termination
- */
-#include <mpidimpl.h>
-#include <mpix.h>
-
-/**
- * \brief The central parts of the MPID_Abort() call
- *
- * \param[in] comm The communicator associated with the failure (can be null).
- * \param[in] mpi_errno The MPI error associated with the failure (can be zero).
- * \param[in] exit_code The requested exit code.
- * \param[in] error_msg The message to display (may be NULL)
- *
- * This is the majority of the call to MPID_Abort(). The only
- * difference is that it does not call exit. That allows it to be
- * used as a test function to ensure that the output is what you would
- * expect.
- *
- * MPIDI_Abort_core() simply uses the same params from MPID_Abort().
- */
-void MPIDI_Abort_core(MPID_Comm * comm, int mpi_errno, int exit_code, const char *user_str)
-{
- char sys_str[MPI_MAX_ERROR_STRING+5] = "";
- char comm_str[MPI_MAX_ERROR_STRING] = "";
- char world_str[MPI_MAX_ERROR_STRING] = "";
- char error_str[2*MPI_MAX_ERROR_STRING + 128];
-
- if (MPIR_Process.comm_world)
- {
- int rank = MPIR_Process.comm_world->rank;
- snprintf(world_str, sizeof(world_str), " on node %d", rank);
- }
- if (comm)
- {
- int rank = comm->rank;
- int handle = comm->handle;
- snprintf(comm_str, sizeof(comm_str), " (rank %d in comm %d)", rank, handle);
- }
- if (!user_str)
- user_str = "Internal error";
- if (mpi_errno != MPI_SUCCESS)
- {
- char msg[MPI_MAX_ERROR_STRING] = "";
- MPIR_Err_get_string(mpi_errno, msg, MPI_MAX_ERROR_STRING, NULL);
- snprintf(sys_str, sizeof(msg), " (%s)", msg);
- }
-
- snprintf(error_str, sizeof(error_str), "Abort(%d)%s%s: %s%s\n", exit_code, world_str, comm_str, user_str, sys_str);
- MPL_error_printf("%s", error_str);
-
- fflush(stderr); fflush(stdout);
-}
-
-/**
- * \brief The central parts of the MPID_Abort call
- * \param[in] comm The communicator associated with the failure (can be null).
- * \param[in] mpi_errno The MPI error associated with the failure (can be zero).
- * \param[in] exit_code The requested exit code.
- * \param[in] error_msg The message to display (may be NULL)
- * \return MPI_ERR_INTERN
- *
- * This function MUST NEVER return.
- */
-int MPID_Abort(MPID_Comm * comm, int mpi_errno, int exit_code, const char *error_msg)
-{
- MPIDI_Abort_core(comm, mpi_errno, exit_code, error_msg);
-
-#ifdef DYNAMIC_TASKING
- extern int mpidi_dynamic_tasking;
- if (mpidi_dynamic_tasking)
- return PMI2_Abort(1,error_msg);
-#endif
-
- /* The POE and BGQ control systems both catch the exit value for additional
- * processing. If a process exits with '1' then all processes in the job
- * are terminated. The requested error code is lost in this process however
- * this is acceptable, but not desirable, behavior according to the MPI
- * standard.
- *
- * On BGQ, the user may force the process (rank) that exited with '1' to core
- * dump by setting the environment variable 'BG_COREDUMPONERROR=1'.
- */
- exit(1);
-}
diff --git a/src/mpid/pamid/src/misc/mpid_get_universe_size.c b/src/mpid/pamid/src/misc/mpid_get_universe_size.c
deleted file mode 100644
index 87049bb..0000000
--- a/src/mpid/pamid/src/misc/mpid_get_universe_size.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/misc/mpid_get_universe_size.c
- * \brief ???
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpidimpl.h>
-
-#ifdef DYNAMIC_TASKING
-#ifdef USE_PMI2_API
-#include "pmi2.h"
-#else
-#include "pmi.h"
-#endif /* USE_PMI2_API */
-#endif /* DYNAMIC_TASKING */
-
-extern int mpidi_dynamic_tasking;
-
-/*
- * MPID_Get_universe_size - Get the universe size from the process manager
- *
- * Notes: This requires that the PMI routines are used to
- * communicate with the process manager.
- */
-int MPID_Get_universe_size(int * universe_size)
-{
- int mpi_errno = MPI_SUCCESS;
-#ifdef DYNAMIC_TASKING
-#ifdef USE_PMI2_API
- if(mpidi_dynamic_tasking) {
- char val[PMI2_MAX_VALLEN];
- int found = 0;
- char *endptr;
-
- mpi_errno = PMI2_Info_GetJobAttr("universeSize", val, sizeof(val), &found);
- TRACE_ERR("mpi_errno from PMI2_Info_GetJobAttr=%d\n", mpi_errno);
-
- if (!found) {
- TRACE_ERR("PMI2_Info_GetJobAttr not found\n");
- *universe_size = MPIR_UNIVERSE_SIZE_NOT_AVAILABLE;
- }
- else {
- *universe_size = strtol(val, &endptr, 0);
- TRACE_ERR("PMI2_Info_GetJobAttr found universe_size=%d\n", *universe_size);
- }
-#else
- int pmi_errno = PMI_SUCCESS;
-
- pmi_errno = PMI_Get_universe_size(universe_size);
- if (pmi_errno != PMI_SUCCESS) {
- MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER,
- "**pmi_get_universe_size",
- "**pmi_get_universe_size %d", pmi_errno);
- }
- if (*universe_size < 0)
- {
- *universe_size = MPIR_UNIVERSE_SIZE_NOT_AVAILABLE;
- }
-#endif /*USE_PMI2_API*/
- } else {
- *universe_size = MPIR_UNIVERSE_SIZE_NOT_AVAILABLE;
- }
-#else
- *universe_size = MPIR_UNIVERSE_SIZE_NOT_AVAILABLE;
-#endif /*DYNAMIC_TASKING*/
-
-
-fn_exit:
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
-fn_fail:
- *universe_size = MPIR_UNIVERSE_SIZE_NOT_AVAILABLE;
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
diff --git a/src/mpid/pamid/src/misc/mpid_getpname.c b/src/mpid/pamid/src/misc/mpid_getpname.c
deleted file mode 100644
index c0fbf26..0000000
--- a/src/mpid/pamid/src/misc/mpid_getpname.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/misc/mpid_getpname.c
- * \brief Device interface to MPI_Get_processor_name()
- */
-#include <mpidimpl.h>
-
-/**
- * \brief Device interface to MPI_Get_processor_name()
- * \param[out] name Storage for the name as a string
- * \param[in] namelen The maximum allowed length
- * \param[out] resultlen The actual length written
- * \returns MPI_SUCCESS
- *
- * All this does is convert the rank to a string and return the data
- */
-int MPID_Get_processor_name(char * name, int namelen, int * resultlen)
-{
- /* Get the name from PAMI */
- const char* pami_name = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_PROCESSOR_NAME).value.chararray;
- /* Copy to the destination */
- strncpy(name, pami_name, namelen);
- /* Ensure that there is a trailing NULL */
- if (namelen > 0)
- name[namelen - 1]= '\0';
- /* Get the size of the name */
- *resultlen = strlen(name);
-
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/misc/mpid_mem.c b/src/mpid/pamid/src/misc/mpid_mem.c
deleted file mode 100644
index 8b7a685..0000000
--- a/src/mpid/pamid/src/misc/mpid_mem.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/misc/mpid_mem.c
- * \brief ???
- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpidimpl.h>
-
-void *MPID_Alloc_mem( size_t size, MPID_Info *info_ptr )
-{
- void *ap;
- ap = MPIU_Malloc(size);
- return ap;
-}
-
-int MPID_Free_mem( void *ptr )
-{
- int mpi_errno = MPI_SUCCESS;
- MPIU_Free(ptr);
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/misc/mpid_unimpl.c b/src/mpid/pamid/src/misc/mpid_unimpl.c
deleted file mode 100644
index 63c4c7c..0000000
--- a/src/mpid/pamid/src/misc/mpid_unimpl.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/misc/mpid_unimpl.c
- * \brief These are functions that are not supported
- */
-#include <mpidimpl.h>
-
-#ifndef DYNAMIC_TASKING
-int MPID_Close_port(const char *port_name)
-{
- MPID_abort();
- return 0;
-}
-int MPID_Open_port(MPID_Info *info_ptr,
- char *port_name)
-{
- MPID_abort();
- return 0;
-}
-
-int MPID_Comm_accept(const char *port_name,
- MPID_Info *info_ptr,
- int root,
- MPID_Comm *comm_ptr,
- MPID_Comm **newcomm)
-{
- MPID_abort();
- return 0;
-}
-int MPID_Comm_connect(const char *port_name,
- MPID_Info *info_ptr,
- int root,
- MPID_Comm *comm_ptr,
- MPID_Comm **newcomm)
-{
- MPID_abort();
- return 0;
-}
-int MPID_Comm_disconnect(MPID_Comm *comm_ptr)
-{
- MPID_abort();
- return 0;
-}
-int MPID_Comm_spawn_multiple(int count,
- char *array_of_commands[],
- char* *array_of_argv[],
- const int array_of_maxprocs[],
- MPID_Info *array_of_info[],
- int root,
- MPID_Comm *comm_ptr,
- MPID_Comm **intercomm,
- int array_of_errcodes[])
-{
- MPID_abort();
- return 0;
-}
-#endif
-
-int MPID_Comm_failure_ack(MPID_Comm *comm_ptr)
-{
- MPID_abort();
- return 0;
-}
-
-int MPID_Comm_failure_get_acked(MPID_Comm *comm_ptr, MPID_Group **failed_group_ptr)
-{
- MPID_abort();
- return 0;
-}
-
-int MPID_Comm_get_all_failed_procs(MPID_Comm *comm_ptr, MPID_Group **failed_group, int tag)
-{
- MPID_abort();
- return 0;
-}
-
-int MPID_Comm_revoke(MPID_Comm *comm_ptr, int is_remote)
-{
- MPID_abort();
- return 0;
-}
-
-int MPID_Comm_AS_enabled(MPID_Comm *comm_ptr)
-{
- /* This function must return 1 in the default case and should not be ignored
- * by the implementation. */
- return 1;
-}
-
-int MPID_Request_is_anysource(MPID_Request *request_ptr)
-{
- /* This function must not abort in the default case since it is used in many
- * MPI functions. As long as the device does not implement FT, it doesn't
- * matter what this function returns. */
- return 0;
-}
diff --git a/src/mpid/pamid/src/mpid_aint.c b/src/mpid/pamid/src/mpid_aint.c
deleted file mode 100644
index 39c50b9..0000000
--- a/src/mpid/pamid/src/mpid_aint.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2014 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-
-/*
- Input Parameters:
-+ base - base address (integer)
-- disp - displacement (integer)
-
- Return value:
- A new MPI_Aint value that is equivalent to the sum of the base and disp
- arguments, where base represents a base address returned by a call
- to MPI_GET_ADDRESS and disp represents a signed integer displacement.
-*/
-#undef FUNCNAME
-#define FUNCNAME MPID_Aint_add
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp)
-{
- MPI_Aint result;
-
- MPIDI_STATE_DECL(MPID_STATE_MPID_AINT_ADD);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_AINT_ADD);
-
- result = MPIU_VOID_PTR_CAST_TO_MPI_AINT ((char*)MPIU_AINT_CAST_TO_VOID_PTR(base) + disp);
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_AINT_ADD);
- return result;
-}
-
-/*
- Input Parameters:
-+ addr1 - minuend address (integer)
-- addr2 - subtrahend address (integer)
-
- Return value:
- A new MPI_Aint value that is equivalent to the difference between addr1 and
- addr2 arguments, where addr1 and addr2 represent addresses returned by calls
- to MPI_GET_ADDRESS.
-*/
-#undef FUNCNAME
-#define FUNCNAME MPID_Aint_diff
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
-{
- MPI_Aint result;
-
- MPIDI_STATE_DECL(MPID_STATE_MPID_AINT_DIFF);
- MPIDI_FUNC_ENTER(MPID_STATE_MPID_AINT_DIFF);
-
- result = MPIU_PTR_DISP_CAST_TO_MPI_AINT ((char*)MPIU_AINT_CAST_TO_VOID_PTR(addr1) - (char*)MPIU_AINT_CAST_TO_VOID_PTR(addr2));
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPID_AINT_DIFF);
- return result;
-}
diff --git a/src/mpid/pamid/src/mpid_buffer.c b/src/mpid/pamid/src/mpid_buffer.c
deleted file mode 100644
index 9c21293..0000000
--- a/src/mpid/pamid/src/mpid_buffer.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_buffer.c
- * \brief MPID buffer copy
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpidimpl.h>
-
-#ifndef MPIDI_COPY_BUFFER_SZ
-#define MPIDI_COPY_BUFFER_SZ 16384
-#endif
-
-/**
- * \brief MPID buffer copy
- *
- * Implements non-contiguous buffers correctly.
- *
- * \param[in] sbuf The address of the input buffer
- * \param[in] scount The number of elements in that buffer
- * \param[in] sdt The datatype of those elements
- * \param[out] smpi_errno Returns errors
- * \param[in] rbuf The address of the output buffer
- * \param[out] rcount The number of elements in that buffer
- * \param[in] rdt The datatype of those elements
- * \param[out] rsz The size of the ouput data
- * \param[out] rmpi_errno Returns errors
- */
-void MPIDI_Buffer_copy(
- const void * const sbuf, MPI_Aint scount, MPI_Datatype sdt, int * smpi_errno,
- void * const rbuf, MPI_Aint rcount, MPI_Datatype rdt, MPIDI_msg_sz_t * rsz, int * rmpi_errno)
-{
- int sdt_contig;
- int rdt_contig;
- MPI_Aint sdt_true_lb, rdt_true_lb;
- MPIDI_msg_sz_t sdata_sz;
- MPIDI_msg_sz_t rdata_sz;
- MPID_Datatype * sdt_ptr;
- MPID_Datatype * rdt_ptr;
-
- MPI_Aint sdt_extent;
- MPI_Aint rdt_extent;
-
- *smpi_errno = MPI_SUCCESS;
- *rmpi_errno = MPI_SUCCESS;
-
- /* printf("bufcopy: src count=%d dt=%d\n", scount, sdt); */
- /* printf("bufcopy: dst count=%d dt=%d\n", rcount, rdt); */
-
- MPIDI_Datatype_get_info(scount, sdt, sdt_contig, sdata_sz, sdt_ptr, sdt_true_lb);
- MPIDI_Datatype_get_info(rcount, rdt, rdt_contig, rdata_sz, rdt_ptr, rdt_true_lb);
-
- /* --BEGIN ERROR HANDLING-- */
- if (sdata_sz > rdata_sz)
- {
- *rmpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, __FUNCTION__, __LINE__, MPI_ERR_TRUNCATE, "**truncate", "**truncate %d %d", sdata_sz, rdata_sz );
- sdata_sz = rdata_sz;
- }
- /* --END ERROR HANDLING-- */
-
- if (sdata_sz == 0)
- {
- *rsz = 0;
- goto fn_exit;
- }
-
- if (sdt_contig && rdt_contig)
- {
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on && MPIDI_cuda_is_device_buf(rbuf))
- {
- cudaError_t cudaerr = CudaMemcpy(rbuf + rdt_true_lb, sbuf + sdt_true_lb, sdata_sz, cudaMemcpyHostToDevice);
- }
- else
-#endif
- memcpy((char*)rbuf + rdt_true_lb, (const char *)sbuf + sdt_true_lb, sdata_sz);
- *rsz = sdata_sz;
- }
- else if (sdt_contig)
- {
-#if CUDA_AWARE_SUPPORT
- // This will need to be done in two steps:
- // 1 - Allocate a temp buffer which is the same size as user buffer and unpack in it.
- // 2 - Copy unpacked data into user buffer from temp buffer.
- if(MPIDI_Process.cuda_aware_support_on && MPIDI_cuda_is_device_buf(rbuf))
- {
- MPID_Datatype_get_extent_macro(rdt, rdt_extent);
- char *buf = MPIU_Malloc(rdt_extent * rcount);
- memset(buf, 0, rdt_extent * rcount);
- MPID_Segment seg;
- DLOOP_Offset last;
-
- MPID_Segment_init(buf, rcount, rdt, &seg, 0);
- last = sdata_sz;
- MPID_Segment_unpack(&seg, 0, &last, (char*)sbuf + sdt_true_lb);
- /* --BEGIN ERROR HANDLING-- */
- if (last != sdata_sz)
- {
- *rmpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, __FUNCTION__, __LINE__, MPI_ERR_TYPE, "**dtypemismatch", 0);
- }
- /* --END ERROR HANDLING-- */
-
- *rsz = last;
-
-
- cudaError_t cudaerr = CudaMemcpy(rbuf + rdt_true_lb, buf, rdt_extent * rcount, cudaMemcpyHostToDevice);
-
- MPIU_Free(buf);
-
- goto fn_exit;
-
- }
-#endif
-
- MPID_Segment seg;
- DLOOP_Offset last;
-
- MPID_Segment_init(rbuf, rcount, rdt, &seg, 0);
- last = sdata_sz;
- MPID_Segment_unpack(&seg, 0, &last, (char*)sbuf + sdt_true_lb);
- /* --BEGIN ERROR HANDLING-- */
- if (last != sdata_sz)
- {
- *rmpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, __FUNCTION__, __LINE__, MPI_ERR_TYPE, "**dtypemismatch", 0);
- }
- /* --END ERROR HANDLING-- */
-
- *rsz = last;
- }
- else if (rdt_contig)
- {
- MPID_Segment seg;
- DLOOP_Offset last;
-
- MPID_Segment_init(sbuf, scount, sdt, &seg, 0);
- last = sdata_sz;
- MPID_Segment_pack(&seg, 0, &last, (char*)rbuf + rdt_true_lb);
- /* --BEGIN ERROR HANDLING-- */
- if (last != sdata_sz)
- {
- *rmpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, __FUNCTION__, __LINE__, MPI_ERR_TYPE, "**dtypemismatch", 0);
- }
- /* --END ERROR HANDLING-- */
-
- *rsz = last;
- }
- else
- {
- char * buf;
- MPIDI_msg_sz_t buf_off;
- MPID_Segment sseg;
- MPIDI_msg_sz_t sfirst;
- MPID_Segment rseg;
- MPIDI_msg_sz_t rfirst;
-
- buf = MPIU_Malloc(MPIDI_COPY_BUFFER_SZ);
- /* --BEGIN ERROR HANDLING-- */
- if (buf == NULL)
- {
- *smpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, __FUNCTION__, __LINE__, MPI_ERR_OTHER, "**nomem", 0);
- *rmpi_errno = *smpi_errno;
- *rsz = 0;
- goto fn_exit;
- }
- /* --END ERROR HANDLING-- */
-
- MPID_Segment_init(sbuf, scount, sdt, &sseg, 0);
- MPID_Segment_init(rbuf, rcount, rdt, &rseg, 0);
-
- sfirst = 0;
- rfirst = 0;
- buf_off = 0;
-
- for(;;)
- {
- DLOOP_Offset last;
- char * buf_end;
-
- if (sdata_sz - sfirst > MPIDI_COPY_BUFFER_SZ - buf_off)
- {
- last = sfirst + (MPIDI_COPY_BUFFER_SZ - buf_off);
- }
- else
- {
- last = sdata_sz;
- }
-
- MPID_Segment_pack(&sseg, sfirst, &last, buf + buf_off);
- /* --BEGIN ERROR HANDLING-- */
- MPID_assert(last > sfirst);
- /* --END ERROR HANDLING-- */
-
- buf_end = buf + buf_off + (last - sfirst);
- sfirst = last;
-
- MPID_Segment_unpack(&rseg, rfirst, &last, buf);
- /* --BEGIN ERROR HANDLING-- */
- MPID_assert(last > rfirst);
- /* --END ERROR HANDLING-- */
-
- rfirst = last;
-
- if (rfirst == sdata_sz)
- {
- /* successful completion */
- break;
- }
-
- /* --BEGIN ERROR HANDLING-- */
- if (sfirst == sdata_sz)
- {
- /* datatype mismatch -- remaining bytes could not be unpacked */
- *rmpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, __FUNCTION__, __LINE__, MPI_ERR_TYPE, "**dtypemismatch", 0);
- break;
- }
- /* --END ERROR HANDLING-- */
-
- buf_off = sfirst - rfirst;
- if (buf_off > 0)
- {
- memmove(buf, buf_end - buf_off, buf_off);
- }
- }
-
- *rsz = rfirst;
- MPIU_Free(buf);
- }
-
- fn_exit:
- return;
-}
diff --git a/src/mpid/pamid/src/mpid_finalize.c b/src/mpid/pamid/src/mpid_finalize.c
deleted file mode 100644
index bdee91a..0000000
--- a/src/mpid/pamid/src/mpid_finalize.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_finalize.c
- * \brief Normal job termination code
- */
-#include <mpidimpl.h>
-
-
-#if TOKEN_FLOW_CONTROL
-extern void MPIDI_close_mm();
-#endif
-
-#ifdef MPIDI_STATISTICS
-extern pami_extension_t pe_extension;
-
-extern int mpidi_dynamic_tasking;
-int mpidi_finalized = 0;
-#ifdef DYNAMIC_TASKING
-extern conn_info *_conn_info_list;
-#endif
-
-
-void MPIDI_close_pe_extension() {
- extern MPIDI_printenv_t *mpich_env;
- extern MPIX_stats_t *mpid_statp;
- int rc;
- /* PAMI_Extension_open in pami_init */
- rc = PAMI_Extension_close (pe_extension);
- if (rc != PAMI_SUCCESS) {
- TRACE_ERR("ERROR close PAMI_Extension failed rc %d", rc);
- }
- if (mpich_env)
- MPIU_Free(mpich_env);
- if (mpid_statp)
- MPIU_Free(mpid_statp);
-
-}
-#endif
-
-/**
- * \brief Shut down the system
- *
- * At this time, no attempt is made to free memory being used for MPI structures.
- * \return MPI_SUCCESS
-*/
-int MPID_Finalize()
-{
- pami_result_t rc;
- int mpierrno = MPI_SUCCESS;
- MPIR_Errflag_t errflag=MPIR_ERR_NONE;
- MPIR_Barrier_impl(MPIR_Process.comm_world, &errflag);
-
-#ifdef MPIDI_STATISTICS
- if (MPIDI_Process.mp_statistics) {
- MPIDI_print_statistics();
- }
- MPIDI_close_pe_extension();
-#endif
-
-#ifdef DYNAMIC_TASKING
- mpidi_finalized = 1;
- if(mpidi_dynamic_tasking) {
- /* Tell the process group code that we're done with the process groups.
- This will notify PMI (with PMI_Finalize) if necessary. It
- also frees all PG structures, including the PG for COMM_WORLD, whose
- pointer is also saved in MPIDI_Process.my_pg */
- mpierrno = MPIDI_PG_Finalize();
- if (mpierrno) {
- TRACE_ERR("MPIDI_PG_Finalize returned with mpierrno=%d\n", mpierrno);
- }
-
- MPIDI_FreeParentPort();
- }
- if(_conn_info_list)
- MPIU_Free(_conn_info_list);
- MPIDI_free_all_tranid_node();
-#endif
-
-
- /* ------------------------- */
- /* shutdown request queues */
- /* ------------------------- */
- MPIDI_Recvq_finalize();
-
- PAMIX_Finalize(MPIDI_Client);
-
-#ifdef MPID_NEEDS_ICOMM_WORLD
- MPIR_Comm_release_always(MPIR_Process.icomm_world, 0);
-#endif
-
- MPIR_Comm_release_always(MPIR_Process.comm_self,0);
- MPIR_Comm_release_always(MPIR_Process.comm_world,0);
-
- rc = PAMI_Context_destroyv(MPIDI_Context, MPIDI_Process.avail_contexts);
- MPID_assert_always(rc == PAMI_SUCCESS);
-
- rc = PAMI_Client_destroy(&MPIDI_Client);
- MPID_assert_always(rc == PAMI_SUCCESS);
-
-#ifdef MPIDI_TRACE
- { int i;
- for (i=0; i< MPIDI_Process.numTasks; i++) {
- if (MPIDI_Trace_buf[i].R)
- MPIU_Free(MPIDI_Trace_buf[i].R);
- if (MPIDI_Trace_buf[i].PR)
- MPIU_Free(MPIDI_Trace_buf[i].PR);
- if (MPIDI_Trace_buf[i].S)
- MPIU_Free(MPIDI_Trace_buf[i].S);
- }
- }
- MPIU_Free(MPIDI_Trace_buf);
-#endif
-
-#ifdef OUT_OF_ORDER_HANDLING
- MPIU_Free(MPIDI_In_cntr);
- MPIU_Free(MPIDI_Out_cntr);
-#endif
-
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- extern char *EagerLimit;
-
- if (EagerLimit) MPIU_Free(EagerLimit);
- MPIU_Free(MPIDI_Token_cntr);
- MPIDI_close_mm();
- #else
- MPID_assert_always(0);
- #endif
- }
-
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/mpid_improbe.c b/src/mpid/pamid/src/mpid_improbe.c
deleted file mode 100644
index dc101fa..0000000
--- a/src/mpid/pamid/src/mpid_improbe.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2012 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-
-int MPID_Improbe(int source, int tag, MPID_Comm *comm, int context_offset,
- int *flag, MPID_Request **message, MPI_Status *status)
-{
- const int context = comm->recvcontext_id + context_offset;
- int foundp = FALSE;
- MPID_Request * rreq = NULL;
-
- if (source == MPI_PROC_NULL)
- {
- MPIR_Status_set_procnull(status);
- /* We set the flag to true because an MPI_Recv with this rank will
- * return immediately */
- *flag = TRUE;
- *message = NULL;
- return MPI_SUCCESS;
- }
-
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDU(source, tag, context, &foundp);
-#else
- int pami_source;
- if(source != MPI_ANY_SOURCE) {
- pami_source = MPID_VCR_GET_LPID(comm->vcr, source);
- } else {
- pami_source = MPI_ANY_SOURCE;
- }
- rreq = MPIDI_Recvq_FDU(source, pami_source, tag, context, &foundp);
-#endif
- if (rreq==NULL) {
- MPID_Progress_poke();
- }
- else {
- rreq->kind = MPID_REQUEST_MPROBE;
- MPIR_Request_extract_status(rreq, status);
- }
-
- *message = rreq;
- *flag = foundp;
- return MPI_SUCCESS;
-}
-
diff --git a/src/mpid/pamid/src/mpid_imrecv.c b/src/mpid/pamid/src/mpid_imrecv.c
deleted file mode 100644
index 68a011a..0000000
--- a/src/mpid/pamid/src/mpid_imrecv.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2012 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-
-int MPID_Imrecv(void *buf, int count, MPI_Datatype datatype,
- MPID_Request *message, MPID_Request **rreqp)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPID_Request * rreq;
-
- /* ---------------------------------------- */
- /* NULL rank means empty request */
- /* ---------------------------------------- */
- if (unlikely(message == NULL))
- {
- rreq = MPIDI_Request_create2();
- MPIR_Status_set_procnull(&rreq->status);
- rreq->kind = MPID_REQUEST_RECV;
- MPIDI_Request_complete(rreq);
- *rreqp = rreq;
- return MPI_SUCCESS;
-
- }
-
- MPIU_Assert(message != NULL);
- MPIU_Assert(message->kind == MPID_REQUEST_MPROBE);
-
- /* promote the request object to be a "real" recv request */
- message->kind = MPID_REQUEST_RECV;
-
- *rreqp = rreq = message;
-
-#ifdef OUT_OF_ORDER_HANDLING
- if ((MPIDI_In_cntr[rreq->mpid.peer_pami].n_OutOfOrderMsgs>0))
- MPIDI_Recvq_process_out_of_order_msgs(rreq->mpid.peer_pami, MPIDI_Context[0]);
-#endif
-
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->recvs);
-#endif
-
-#ifdef MPIDI_TRACE
-{
- size_t ll;
- ll = count * MPID_Datatype_get_basic_size(datatype);
- /*MPIDI_SET_PR_REC(rreq,buf,count,ll,datatype,pami_source,rank,tag,comm,is_blocking); */
-}
-#endif
-
- /* ----------------------------------------------------------------- */
- /* populate request with our data */
- /* We can do this because this is not a multithreaded implementation */
- /* ----------------------------------------------------------------- */
-
- rreq->mpid.userbuf = buf;
- rreq->mpid.userbufcount = count;
- rreq->mpid.datatype = datatype;
- MPIDI_RecvMsg_Unexp(rreq, buf, count, datatype);
- mpi_errno = rreq->status.MPI_ERROR;
- if (TOKEN_FLOW_CONTROL_ON) {
- #if TOKEN_FLOW_CONTROL
- if ((rreq->mpid.uebuflen) && (!(rreq->mpid.envelope.msginfo.isRzv))) {
- MPIDI_Token_cntr[(rreq->mpid.peer_pami)].unmatched--;
- MPIDI_Update_rettoks(rreq->mpid.peer_pami);
- }
- MPIDI_Must_return_tokens(MPIDI_Context[0],(rreq->mpid.peer_pami));
- #else
- MPID_assert_always(0);
- #endif
- }
-
-#ifdef OUT_OF_ORDER_HANDLING
- if ((MPIDI_In_cntr[rreq->mpid.peer_pami].n_OutOfOrderMsgs>0))
- MPIDI_Recvq_process_out_of_order_msgs(rreq->mpid.peer_pami, MPIDI_Context[0]);
-#endif
-
-#ifdef MPIDI_STATISTICS
- if (!(MPID_cc_is_complete(&rreq->cc)))
- {
- MPID_NSTAT(mpid_statp->recvWaitsComplete);
- }
-#endif
-
- return mpi_errno;
-}
-
diff --git a/src/mpid/pamid/src/mpid_init.c b/src/mpid/pamid/src/mpid_init.c
deleted file mode 100644
index 1ea26bb..0000000
--- a/src/mpid/pamid/src/mpid_init.c
+++ /dev/null
@@ -1,1704 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_init.c
- * \brief Normal job startup code
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <mpidimpl.h>
-#include "mpidi_platform.h"
-#include "onesided/mpidi_onesided.h"
-
-#include "mpidi_util.h"
-
-#ifdef DYNAMIC_TASKING
-#define PAMIX_CLIENT_DYNAMIC_TASKING 1032
-#define PAMIX_CLIENT_WORLD_TASKS 1033
-#define MAX_JOBID_LEN 1024
-int world_rank;
-int world_size;
-extern int (*mp_world_exiting_handler)(int);
-extern int _mpi_world_exiting_handler(int);
-#endif
-int mpidi_dynamic_tasking = 0;
-
-#if TOKEN_FLOW_CONTROL
- extern int MPIDI_mm_init(int,uint *,unsigned long *);
- extern int MPIDI_tfctrl_enabled;
-#endif
-
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- pami_extension_t pe_extension;
-#endif
-
-pami_client_t MPIDI_Client;
-pami_context_t MPIDI_Context[MPIDI_MAX_CONTEXTS];
-
-MPIDI_Process_t MPIDI_Process = {
- .verbose = 0,
- .statistics = 0,
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- .avail_contexts = MPIDI_MAX_CONTEXTS,
- .async_progress = {
- .active = 0,
- .mode = ASYNC_PROGRESS_MODE_DEFAULT,
- },
- .perobj = {
- .context_post = {
- .requested = (ASYNC_PROGRESS_MODE_DEFAULT == ASYNC_PROGRESS_MODE_LOCKED),
- .active = 0,
- },
- },
-#else
- .avail_contexts = 1,
- .async_progress = {
- .active = 0,
- .mode = ASYNC_PROGRESS_MODE_DISABLED,
- },
- .perobj = {
- .context_post = {
- .requested = 0,
- .active = 0,
- },
- },
-#endif
- .pt2pt = {
- .limits = {
- .application = {
- .eager = {
- .remote = MPIDI_EAGER_LIMIT,
- .local = MPIDI_EAGER_LIMIT_LOCAL,
- },
- .immediate = {
- .remote = MPIDI_SHORT_LIMIT,
- .local = MPIDI_SHORT_LIMIT,
- },
- },
- .internal = {
- .eager = {
- .remote = MPIDI_EAGER_LIMIT,
- .local = MPIDI_EAGER_LIMIT_LOCAL,
- },
- .immediate = {
- .remote = MPIDI_SHORT_LIMIT,
- .local = MPIDI_SHORT_LIMIT,
- },
- },
- },
- },
- .disable_internal_eager_scale = MPIDI_DISABLE_INTERNAL_EAGER_SCALE,
-#if TOKEN_FLOW_CONTROL
- .mp_buf_mem = BUFFER_MEM_DEFAULT,
- .mp_buf_mem_max = BUFFER_MEM_DEFAULT,
- .is_token_flow_control_on = 0,
-#endif
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- .mp_infolevel = 0,
- .mp_statistics = 0,
- .mp_printenv = 0,
-#endif
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- .queue_binary_search_support_on = 0,
-#endif
-#if CUDA_AWARE_SUPPORT
- .cuda_aware_support_on = 0,
-#endif
- .rma_pending = 1000,
- .shmem_pt2pt = 1,
- .smp_detect = MPIDI_SMP_DETECT_DEFAULT,
- .optimized = {
- .collectives = MPIDI_OPTIMIZED_COLLECTIVE_DEFAULT,
- .subcomms = 1,
- .select_colls = 2,
- .memory = 0,
- .num_requests = 16,
- },
-
- .mpir_nbc = 1,
- .numTasks = 0,
- .typed_onesided = 0,
-};
-
-
-struct protocol_t
-{
- pami_dispatch_p2p_function func;
- size_t dispatch;
- size_t immediate_min;
- pami_dispatch_hint_t options;
-};
-static struct
-{
- struct protocol_t Short;
- struct protocol_t ShortSync;
- struct protocol_t Eager;
- struct protocol_t RVZ;
- struct protocol_t Cancel;
- struct protocol_t Control;
- struct protocol_t WinCtrl;
- struct protocol_t WinAccum;
- struct protocol_t RVZ_zerobyte;
- struct protocol_t WinGetAccum;
- struct protocol_t WinGetAccumAck;
- struct protocol_t WinAtomic;
- struct protocol_t WinAtomicAck;
-#ifdef DYNAMIC_TASKING
- struct protocol_t Dyntask;
- struct protocol_t Dyntask_disconnect;
-#endif
-} proto_list = {
- .Short = {
- .func = MPIDI_RecvShortAsyncCB,
- .dispatch = MPIDI_Protocols_Short,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
- .ShortSync = {
- .func = MPIDI_RecvShortSyncCB,
- .dispatch = MPIDI_Protocols_ShortSync,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
- .Eager = {
- .func = MPIDI_RecvCB,
- .dispatch = MPIDI_Protocols_Eager,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_contiguous = PAMI_HINT_ENABLE,
- .recv_copy = PAMI_HINT_ENABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
- .RVZ = {
- .func = MPIDI_RecvRzvCB,
- .dispatch = MPIDI_Protocols_RVZ,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgEnvelope),
- },
- .Cancel = {
- .func = MPIDI_ControlCB,
- .dispatch = MPIDI_Protocols_Cancel,
- .options = {
- .consistency = PAMI_HINT_ENABLE,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
- .Control = {
- .func = MPIDI_ControlCB,
- .dispatch = MPIDI_Protocols_Control,
- .options = {
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
- .WinCtrl = {
- .func = MPIDI_WinControlCB,
- .dispatch = MPIDI_Protocols_WinCtrl,
- .options = {
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_Win_control_t),
- },
- .WinAccum = {
- .func = MPIDI_WinAccumCB,
- .dispatch = MPIDI_Protocols_WinAccum,
- .options = {
- .consistency = PAMI_HINT_ENABLE,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
- .RVZ_zerobyte = {
- .func = MPIDI_RecvRzvCB_zerobyte,
- .dispatch = MPIDI_Protocols_RVZ_zerobyte,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgEnvelope),
- },
- .WinGetAccum = {
- .func = MPIDI_WinGetAccumCB,
- .dispatch = MPIDI_Protocols_WinGetAccum,
- .options = {
- .consistency = PAMI_HINT_ENABLE,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_Win_GetAccMsgInfo),
- },
- .WinGetAccumAck = {
- .func = MPIDI_WinGetAccumAckCB,
- .dispatch = MPIDI_Protocols_WinGetAccumAck,
- .options = {
- .consistency = PAMI_HINT_ENABLE,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_Win_GetAccMsgInfo),
- },
- .WinAtomic = {
- .func = MPIDI_WinAtomicCB,
- .dispatch = MPIDI_Protocols_WinAtomic,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_AtomicHeader_t),
- },
- .WinAtomicAck = {
- .func = MPIDI_WinAtomicAckCB,
- .dispatch = MPIDI_Protocols_WinAtomicAck,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_AtomicHeader_t),
- },
-#ifdef DYNAMIC_TASKING
- .Dyntask = {
- .func = MPIDI_Recvfrom_remote_world,
- .dispatch = MPIDI_Protocols_Dyntask,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
- .Dyntask_disconnect = {
- .func = MPIDI_Recvfrom_remote_world_disconnect,
- .dispatch = MPIDI_Protocols_Dyntask_disconnect,
- .options = {
- .consistency = USE_PAMI_CONSISTENCY,
- .long_header = PAMI_HINT_DISABLE,
- .recv_immediate = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_DISABLE,
- },
- .immediate_min = sizeof(MPIDI_MsgInfo),
- },
-#endif
-};
-
-
-#undef FUNCNAME
-#define FUNCNAME split_type
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-static int split_type(MPID_Comm * comm_ptr, int stype, int key,
- MPID_Info *info_ptr, MPID_Comm ** newcomm_ptr)
-{
- MPID_Node_id_t id;
- int nid;
- int mpi_errno = MPI_SUCCESS;
-
- mpi_errno = MPID_Get_node_id(comm_ptr, comm_ptr->rank, &id);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
- nid = (stype == MPI_COMM_TYPE_SHARED) ? id : MPI_UNDEFINED;
- mpi_errno = MPIR_Comm_split_impl(comm_ptr, nid, key, newcomm_ptr);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
- fn_exit:
- return mpi_errno;
-
- /* --BEGIN ERROR HANDLING-- */
- fn_fail:
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-static MPID_CommOps comm_fns = {
- split_type
-};
-
-
-/* ------------------------------ */
-/* Collective selection extension */
-/* ------------------------------ */
-pami_extension_t MPIDI_Collsel_extension;
-advisor_t MPIDI_Collsel_advisor;
-advisor_table_t MPIDI_Collsel_advisor_table;
-advisor_params_t MPIDI_Collsel_advisor_params;
-char *MPIDI_Collsel_output_file;
-pami_extension_collsel_advise MPIDI_Pamix_collsel_advise;
-static void
-MPIDI_PAMI_client_init(int* rank, int* size, int* mpidi_dynamic_tasking, char **world_tasks)
-{
- /* ------------------------------------ */
- /* Initialize the MPICH->PAMI Client */
- /* ------------------------------------ */
- pami_result_t rc = PAMI_ERROR;
-
- pami_configuration_t config[2];
- size_t numconfigs = 0;
-
- /* Set the status for memory optimized collectives */
- {
- char* env = getenv("PAMID_COLLECTIVES_MEMORY_OPTIMIZED");
- if (env != NULL)
- MPIDI_atoi(env,&MPIDI_Process.optimized.memory);
- }
-
-#ifdef HAVE_PAMI_CLIENT_NONCONTIG
- config[0].name = PAMI_CLIENT_NONCONTIG;
- if(MPIDI_Process.optimized.memory & MPID_OPT_LVL_NONCONTIG)
- config[0].value.intval = 0; // Disable non-contig, pamid doesn't use pami for non-contig data collectives so save memory
- else
- config[0].value.intval = 1; // Enable non-contig even though pamid doesn't use pami for non-contig data collectives,
- // we still possibly want those collectives for other reasons.
- ++numconfigs;
-#endif
-#ifdef HAVE_PAMI_CLIENT_MEMORY_OPTIMIZE
- if(MPIDI_Process.optimized.memory)
- {
- config[numconfigs].name = PAMI_CLIENT_MEMORY_OPTIMIZE;
- config[numconfigs].value.intval = MPIDI_Process.optimized.memory;
- ++numconfigs;
- }
-#endif
-
- rc = PAMI_Client_create("MPI", &MPIDI_Client, config, numconfigs);
- MPID_assert_always(rc == PAMI_SUCCESS);
- PAMIX_Initialize(MPIDI_Client);
-
-
- *mpidi_dynamic_tasking=0;
-#ifdef DYNAMIC_TASKING
- *world_tasks = NULL;
- pami_result_t status = PAMI_ERROR;
-
- typedef pami_result_t (*dyn_task_query_fn) (
- pami_client_t client,
- pami_configuration_t config[],
- size_t num_configs);
- dyn_task_query_fn dyn_task_query = NULL;
-
- pami_extension_t extension;
- status = PAMI_Extension_open (MPIDI_Client, "PE_dyn_task", &extension);
- if(status != PAMI_SUCCESS)
- {
- TRACE_ERR("Error. The PE_dyn_task extension is not implemented. result = %d\n", status);
- }
-
- dyn_task_query = (dyn_task_query_fn) PAMI_Extension_symbol(extension, "query");
- if (dyn_task_query == (void*)NULL) {
- TRACE_ERR("Err: the Dynamic Tasking extension function dyn_task_query is not implememted.\n");
-
- } else {
- pami_configuration_t config2[] =
- {
- {PAMI_CLIENT_TASK_ID, -1},
- {PAMI_CLIENT_NUM_TASKS, -1},
- {(pami_attribute_name_t)PAMIX_CLIENT_DYNAMIC_TASKING},
- {(pami_attribute_name_t)PAMIX_CLIENT_WORLD_TASKS},
- };
-
- dyn_task_query(MPIDI_Client, config2, 4);
- TRACE_ERR("dyn_task_query: task_id %d num_tasks %d dynamic_tasking %d world_tasks %s\n",
- config2[0].value.intval,
- config2[1].value.intval,
- config2[2].value.intval,
- config2[3].value.chararray);
- *rank = world_rank = config2[0].value.intval;
- *size = world_size = config2[1].value.intval;
- *mpidi_dynamic_tasking = config2[2].value.intval;
- *world_tasks = config2[3].value.chararray;
- }
-
- status = PAMI_Extension_close (extension);
- if(status != PAMI_SUCCESS)
- {
- TRACE_ERR("Error. The PE_dyn_task extension could not be closed. result = %d\n", status);
- }
-#endif
-
- if(*mpidi_dynamic_tasking == 0) {
- /* ---------------------------------- */
- /* Get my rank and the process size */
- /* ---------------------------------- */
- *rank = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_TASK_ID ).value.intval;
- MPIR_Process.comm_world->rank = *rank; /* Set the rank early to make tracing better */
- *size = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_NUM_TASKS).value.intval;
- }
-
- /* --------------------------------------------------------------- */
- /* Determine if the eager point-to-point protocol for internal mpi */
- /* operations should be disabled. */
- /* --------------------------------------------------------------- */
- {
- char * env = getenv("PAMID_DISABLE_INTERNAL_EAGER_TASK_LIMIT");
- if (env != NULL)
- {
- size_t n = strlen(env);
- char * tmp = (char *) MPIU_Malloc(n+1);
- strncpy(tmp,env,n);
- if (n>0) tmp[n]=0;
-
- MPIDI_atoi(tmp, &MPIDI_Process.disable_internal_eager_scale);
-
- MPIU_Free(tmp);
- }
-
- if (MPIDI_Process.disable_internal_eager_scale <= *size)
- {
- MPIDI_Process.pt2pt.limits.internal.eager.remote = 0;
- MPIDI_Process.pt2pt.limits.internal.eager.local = 0;
- MPIDI_Process.pt2pt.limits.internal.immediate.remote = 0;
- MPIDI_Process.pt2pt.limits.internal.immediate.local = 0;
- }
- }
-}
-
-void MPIDI_Init_collsel_extension()
-{
- pami_result_t status = PAMI_ERROR;
- status = PAMI_Extension_open (MPIDI_Client, "EXT_collsel", &MPIDI_Collsel_extension);
- if(status == PAMI_SUCCESS)
- {
- if(MPIDI_Process.optimized.auto_select_colls == MPID_AUTO_SELECT_COLLS_TUNE)
- {
- advisor_configuration_t configuration[1];
- pami_extension_collsel_init pamix_collsel_init =
- (pami_extension_collsel_init) PAMI_Extension_symbol (MPIDI_Collsel_extension, "Collsel_init");
- status = pamix_collsel_init (MPIDI_Client, configuration, 1, &MPIDI_Context[0], 1, &MPIDI_Collsel_advisor);
- if(status != PAMI_SUCCESS)
- {
- fprintf (stderr, "Error. The collsel_init failed. result = %d\n", status);
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
- }
-
- }
- else if(MPIDI_Process.optimized.auto_select_colls == MPID_AUTO_SELECT_COLLS_ALL)
- {
- pami_extension_collsel_initialized pamix_collsel_initialized =
- (pami_extension_collsel_initialized) PAMI_Extension_symbol(MPIDI_Collsel_extension,
- "Collsel_initialized");
- if(pamix_collsel_initialized(MPIDI_Client, &MPIDI_Collsel_advisor) == 1)
- {
- char *collselfile;
- collselfile = getenv("MP_COLLECTIVE_SELECTION_FILE");
- pami_extension_collsel_table_load pamix_collsel_table_load =
- (pami_extension_collsel_table_load) PAMI_Extension_symbol(MPIDI_Collsel_extension,
- "Collsel_table_load");
- if(collselfile != NULL)
- status = pamix_collsel_table_load(MPIDI_Collsel_advisor, collselfile, &MPIDI_Collsel_advisor_table);
- else
- status = pamix_collsel_table_load(MPIDI_Collsel_advisor, "pami_tune_results.xml", &MPIDI_Collsel_advisor_table);
- if (status == PAMI_SUCCESS)
- {
- pami_xfer_type_t *collsel_collectives = NULL;
- unsigned num_collectives;
- pami_extension_collsel_get_collectives pamix_collsel_get_collectives =
- (pami_extension_collsel_get_collectives) PAMI_Extension_symbol(MPIDI_Collsel_extension,
- "Collsel_get_collectives");
- status = pamix_collsel_get_collectives(MPIDI_Collsel_advisor_table, &collsel_collectives, &num_collectives);
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
- if(collsel_collectives != NULL)
- {
- unsigned i = 0;
- for(i = 0; i < num_collectives; i++)
- {
- switch(collsel_collectives[i])
- {
- case PAMI_XFER_BROADCAST:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_BCAST;
- break;
- case PAMI_XFER_ALLREDUCE:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_ALLREDUCE;
- break;
- case PAMI_XFER_REDUCE:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_REDUCE;
- break;
- case PAMI_XFER_ALLGATHER:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_ALLGATHER;
- break;
- case PAMI_XFER_ALLGATHERV:
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- if(MPIDI_Process.mp_infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (collective selection) doesn't support ALLGATHERV, only ALLGATHERV_INT is supported\n");
-#endif
- break;
- case PAMI_XFER_ALLGATHERV_INT:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_ALLGATHERV;
- break;
- case PAMI_XFER_SCATTER:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_SCATTER;
- break;
- case PAMI_XFER_SCATTERV:
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- if(MPIDI_Process.mp_infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (collective selection) doesn't support SCATTERV, only SCATTERV_INT is supported\n");
-#endif
- break;
- case PAMI_XFER_SCATTERV_INT:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_SCATTERV;
- break;
- case PAMI_XFER_GATHER:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_GATHER;
- break;
- case PAMI_XFER_GATHERV:
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- if(MPIDI_Process.mp_infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (collective selection) doesn't support GATHERV, only GATHERV_INT is supported\n");
-#endif
- break;
- case PAMI_XFER_GATHERV_INT:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_GATHERV;
- break;
- case PAMI_XFER_BARRIER:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_BARRIER;
- break;
- case PAMI_XFER_ALLTOALL:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_ALLTOALL;
- break;
- case PAMI_XFER_ALLTOALLV:
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- if(MPIDI_Process.mp_infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (collective selection) doesn't support ALLTOALLV, only ALLTOALLV_INT is supported\n");
-#endif
- break;
- case PAMI_XFER_ALLTOALLV_INT:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_ALLTOALLV;
- break;
- case PAMI_XFER_SCAN:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_SCAN;
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_EXSCAN;
- break;
- case PAMI_XFER_REDUCE_SCATTER:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_REDUCE_SCATTER;
- break;
- default:
- MPIDI_Process.optimized.auto_select_colls |= MPID_AUTO_SELECT_COLLS_NONE;
- }
- }
- MPIU_Free(collsel_collectives);
- }
- }
- else
- {
- fprintf (stderr, "Error. Collsel_table_load failed. result = %d\n", status);
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
- }
- }
- else
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
- }
- else
- PAMI_Extension_close(MPIDI_Collsel_extension);
- }
- else
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
-
-#ifndef __BGQ__
- //If collective selection will be disabled, check on fca and CUDA if both not required, disable pami alltogether
- if(MPIDI_Process.optimized.auto_select_colls == MPID_AUTO_SELECT_COLLS_NONE && MPIDI_Process.optimized.collectives != MPID_COLL_FCA && MPIDI_Process.optimized.collectives != MPID_COLL_CUDA)
- MPIDI_Process.optimized.collectives = MPID_COLL_OFF;
-#endif
-}
-
-void MPIDI_Collsel_table_generate()
-{
- external_geometry_ops_t external_ops;
- external_ops.geometry_create = MPIDI_Comm_create_from_pami_geom;
- external_ops.geometry_destroy = MPIDI_Comm_destroy_external;
- external_ops.register_algorithms = MPIDI_Register_algorithms_ext;
- pami_result_t status = PAMI_SUCCESS;
- pami_extension_collsel_table_generate pamix_collsel_table_generate =
- (pami_extension_collsel_table_generate) PAMI_Extension_symbol (MPIDI_Collsel_extension, "Collsel_table_generate");
-
- status = pamix_collsel_table_generate (MPIDI_Collsel_advisor, MPIDI_Collsel_output_file, &MPIDI_Collsel_advisor_params, &external_ops, 1);
- if(status != PAMI_SUCCESS)
- {
- fprintf (stderr, "Error. The collsel_table_generate failed. result = %d\n", status);
- }
-
-}
-
-
-static void
-MPIDI_PAMI_context_init(int* threading, int *size)
-{
-#ifdef TRACE_ON
- int requested_thread_level;
- requested_thread_level = *threading;
-#endif
- int numTasks;
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- /*
- * ASYNC_PROGRESS_MODE_LOCKED requires context post because the async thread
- * will hold the context lock indefinitely; the only option for an application
- * thread to interact with the context is to use context post. See discussion
- * in src/mpid/pamid/src/mpid_progress.h for more information.
- *
- * There are three possible resolutions for the situation when context post is
- * disabled and async progess mode is 'locked':
- * 1. abort
- * 2. silently enable context post
- * 3. silently demote async progress mode to ASYNC_PROGRESS_MODE_TRIGGER
- *
- * For now this configuration is considered erroneous and mpi will abort.
- */
- if (MPIDI_Process.async_progress.mode == ASYNC_PROGRESS_MODE_LOCKED &&
- MPIDI_Process.perobj.context_post.requested == 0)
- MPID_Abort (NULL, 0, 1, "'locking' async progress requires context post");
-
-#else /* MPICH_THREAD_GRANULARITY != MPICH_THREAD_GRANULARITY_PER_OBJECT */
- /*
- * ASYNC_PROGRESS_MODE_LOCKED is not applicable in the "global lock" thread
- * mode. See discussion in src/mpid/pamid/src/mpid_progress.h for more
- * information.
- *
- * This configuration is considered erroneous and mpi will abort.
- */
- if (MPIDI_Process.async_progress.mode == ASYNC_PROGRESS_MODE_LOCKED)
- MPID_Abort (NULL, 0, 1, "'locking' async progress not applicable");
-#endif
-
- /* ----------------------------------
- * Figure out the context situation
- * ---------------------------------- */
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
-
- /* Limit the number of requested contexts by the maximum number of contexts
- * allowed. The default number of requested contexts depends on the mpich
- * lock mode, 'global' or 'perobj', and may be changed before this point
- * by an environment variables.
- */
- if (MPIDI_Process.avail_contexts > MPIDI_MAX_CONTEXTS)
- MPIDI_Process.avail_contexts = MPIDI_MAX_CONTEXTS;
-
- unsigned same = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_CONST_CONTEXTS).value.intval;
- if (same)
- {
- /* Determine the maximum number of contexts supported; limit the number of
- * requested contexts by this value.
- */
- unsigned possible_contexts = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_NUM_CONTEXTS).value.intval;
- TRACE_ERR("PAMI allows up to %u contexts; MPICH allows up to %u\n",
- possible_contexts, MPIDI_Process.avail_contexts);
- if (MPIDI_Process.avail_contexts > possible_contexts)
- MPIDI_Process.avail_contexts = possible_contexts;
- }
- else
- {
- /* If PAMI didn't give all nodes the same number of contexts, all bets
- * are off for now */
- MPIDI_Process.avail_contexts = 1;
- }
-
- /* The number of contexts must be a power-of-two, as required by the
- * MPIDI_Context_hash() function. Decrement until we hit a power-of-two */
- while(MPIDI_Process.avail_contexts & (MPIDI_Process.avail_contexts-1))
- --MPIDI_Process.avail_contexts;
- MPID_assert_always(MPIDI_Process.avail_contexts);
-
-#else /* (MPICH_THREAD_GRANULARITY != MPICH_THREAD_GRANULARITY_PER_OBJECT) */
-
- /* Only a single context is supported in the 'global' mpich lock mode.
- *
- * A multi-context application will always perform better with the
- * 'per object' mpich lock mode - regardless of whether async progress is
- * enabled or not. This is because all threads, application and async
- * progress, must acquire the single global lock which effectively serializes
- * the threads and negates any benefit of multiple contexts.
- *
- * This single context limitation removes code and greatly simplifies logic.
- */
- MPIDI_Process.avail_contexts = 1;
-
-#endif
-
- TRACE_ERR ("Thread-level=%d, requested=%d\n", *threading, requested_thread_level);
-
- MPIDI_Process.numTasks= numTasks = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_NUM_TASKS).value.intval;
-#ifdef OUT_OF_ORDER_HANDLING
- MPIDI_In_cntr = MPIU_Calloc0(numTasks, MPIDI_In_cntr_t);
- if(MPIDI_In_cntr == NULL)
- MPID_abort();
- MPIDI_Out_cntr = MPIU_Calloc0(numTasks, MPIDI_Out_cntr_t);
- if(MPIDI_Out_cntr == NULL)
- MPID_abort();
- memset((void *) MPIDI_In_cntr,0, sizeof(MPIDI_In_cntr_t));
- memset((void *) MPIDI_Out_cntr,0, sizeof(MPIDI_Out_cntr_t));
-#endif
-
-
-#ifdef MPIDI_TRACE
- int i;
- MPIDI_Trace_buf = MPIU_Calloc0(numTasks, MPIDI_Trace_buf_t);
- if(MPIDI_Trace_buf == NULL) MPID_abort();
- memset((void *) MPIDI_Trace_buf,0, sizeof(MPIDI_Trace_buf_t));
- for (i=0; i < numTasks; i++) {
- MPIDI_Trace_buf[i].R=MPIU_Calloc0(N_MSGS, recv_status);
- if (MPIDI_Trace_buf[i].R==NULL) MPID_abort();
- MPIDI_Trace_buf[i].PR=MPIU_Calloc0(N_MSGS, posted_recv);
- if (MPIDI_Trace_buf[i].PR ==NULL) MPID_abort();
- MPIDI_Trace_buf[i].S=MPIU_Calloc0(N_MSGS, send_status);
- if (MPIDI_Trace_buf[i].S ==NULL) MPID_abort();
- }
-#endif
-
- /* ----------------------------------- */
- /* Create the communication contexts */
- /* ----------------------------------- */
- TRACE_ERR("Creating %d contexts\n", MPIDI_Process.avail_contexts);
- pami_result_t rc = PAMI_ERROR;
- pami_configuration_t config[3];
- int cfgval=0;
- config[cfgval].name = PAMI_CLIENT_CONST_CONTEXTS,
- config[cfgval].value.intval = 1;
- cfgval++;
-#ifndef HAVE_ERROR_CHECKING
-#ifdef OUT_OF_ORDER_HANDLING
- /* disable parameter checking in PAMI - fast library only */
- config[cfgval].name = PAMI_CONTEXT_CHECK_PARAM;
- config[cfgval].value.intval = 0;
- cfgval++;
-#endif
-#endif
- rc = PAMI_Context_createv(MPIDI_Client, config, cfgval, MPIDI_Context, MPIDI_Process.avail_contexts);
-
- MPID_assert_always(rc == PAMI_SUCCESS);
-
- /* --------------------------------------------- */
- /* Get collective selection advisor and cache it */
- /* --------------------------------------------- */
- /* Context is created, i.e. collective selection extension is initialized in PAMI. Now I can get the
- advisor if I am not in TUNE mode. If in TUNE mode, I can init collsel and generate the table.
- This is not supported on BGQ.
- */
-#ifndef __BGQ_
- MPIDI_Init_collsel_extension();
-#endif
-
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- MPIDI_open_pe_extension();
-#endif
-}
-
-
-static void
-MPIDI_PAMI_dispath_set(size_t dispatch,
- struct protocol_t * proto,
- unsigned * immediate_max)
-{
- size_t im_max = 0;
- pami_dispatch_callback_function Recv = {.p2p = proto->func};
- MPID_assert_always(dispatch == proto->dispatch);
-
- if (MPIDI_Process.shmem_pt2pt == 0)
- proto->options.use_shmem = PAMI_HINT_DISABLE;
-
- PAMIX_Dispatch_set(MPIDI_Context,
- MPIDI_Process.avail_contexts,
- proto->dispatch,
- Recv,
- proto->options,
- &im_max);
- TRACE_ERR("Immediate-max query: dispatch=%zu got=%zu required=%zu\n",
- dispatch, im_max, proto->immediate_min);
- MPID_assert_always(proto->immediate_min <= im_max);
- if ((immediate_max != NULL) && (im_max < *immediate_max))
- *immediate_max = im_max;
-}
-
-
-static void
-MPIDI_PAMI_dispath_init()
-{
-#ifdef OUT_OF_ORDER_HANDLING
- {
- pami_configuration_t config;
- pami_result_t rc = PAMI_ERROR;
-
- memset(&config, 0, sizeof(config));
- config.name = PAMI_DISPATCH_SEND_IMMEDIATE_MAX;
- rc = PAMI_Dispatch_query(MPIDI_Context[0], (size_t)0, &config, 1);
- if ( rc == PAMI_SUCCESS )
- {
- TRACE_ERR("PAMI_DISPATCH_SEND_IMMEDIATE_MAX=%d.\n", config.value.intval, rc);
- MPIDI_Process.pt2pt.limits_array[2] = config.value.intval;
- }
- else
- {
- TRACE_ERR(" Attention: PAMI_Client_query(DISPATCH_SEND_IMMEDIATE_MAX=%d) rc=%d\n", config.name, rc);
- MPIDI_Process.pt2pt.limits_array[2] = 256;
- }
-
- MPIDI_Process.pt2pt.limits_array[3] = MPIDI_Process.pt2pt.limits_array[2];
- MPIDI_Process.pt2pt.limits_array[6] = MPIDI_Process.pt2pt.limits_array[2];
- MPIDI_Process.pt2pt.limits_array[7] = MPIDI_Process.pt2pt.limits_array[2];
- }
-#endif
- /* ------------------------------------ */
- /* Set up the communication protocols */
- /* ------------------------------------ */
- unsigned send_immediate_max_bytes = (unsigned) -1;
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_Short, &proto_list.Short, &send_immediate_max_bytes);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_ShortSync, &proto_list.ShortSync, &send_immediate_max_bytes);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_Eager, &proto_list.Eager, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_RVZ, &proto_list.RVZ, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_Cancel, &proto_list.Cancel, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_Control, &proto_list.Control, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_WinCtrl, &proto_list.WinCtrl, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_WinAccum, &proto_list.WinAccum, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_RVZ_zerobyte, &proto_list.RVZ_zerobyte, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_WinGetAccum, &proto_list.WinGetAccum, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_WinGetAccumAck, &proto_list.WinGetAccumAck, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_WinAtomic, &proto_list.WinAtomic, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_WinAtomicAck, &proto_list.WinAtomicAck, NULL);
-
-#ifdef DYNAMIC_TASKING
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_Dyntask, &proto_list.Dyntask, NULL);
- MPIDI_PAMI_dispath_set(MPIDI_Protocols_Dyntask_disconnect, &proto_list.Dyntask_disconnect, NULL);
-#endif
-
- /*
- * The first two protocols are our short protocols: they use
- * PAMI_Send_immediate() exclusively. We get the short limit twice
- * because they could be different.
- *
- * - The returned value is the max amount of header+data. We have
- * to remove the header size.
- *
- * - We need to add one back, since we don't use "=" in the
- * comparison. We use "if (size < short_limit) ...".
- *
- * - We use the min of the results just to be safe.
- */
- send_immediate_max_bytes -= (sizeof(MPIDI_MsgInfo) - 1);
-
- if (MPIDI_Process.pt2pt.limits.application.immediate.remote > send_immediate_max_bytes)
- MPIDI_Process.pt2pt.limits.application.immediate.remote = send_immediate_max_bytes;
-
- if (MPIDI_Process.pt2pt.limits.application.immediate.local > send_immediate_max_bytes)
- MPIDI_Process.pt2pt.limits.application.immediate.local = send_immediate_max_bytes;
-
- if (MPIDI_Process.pt2pt.limits.internal.immediate.remote > send_immediate_max_bytes)
- MPIDI_Process.pt2pt.limits.internal.immediate.remote = send_immediate_max_bytes;
-
- if (MPIDI_Process.pt2pt.limits.internal.immediate.local > send_immediate_max_bytes)
- MPIDI_Process.pt2pt.limits.internal.immediate.local = send_immediate_max_bytes;
-
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- int i;
- MPIDI_mm_init(MPIDI_Process.numTasks,&MPIDI_Process.pt2pt.limits.application.eager.remote,&MPIDI_Process.mp_buf_mem);
- MPIDI_Token_cntr = MPIU_Calloc0(MPIDI_Process.numTasks, MPIDI_Token_cntr_t);
- memset((void *) MPIDI_Token_cntr,0, (sizeof(MPIDI_Token_cntr_t) * MPIDI_Process.numTasks));
- for (i=0; i < MPIDI_Process.numTasks; i++)
- {
- MPIDI_Token_cntr[i].tokens=MPIDI_tfctrl_enabled;
- }
- #else
- MPID_assert_always(0);
- #endif
- }
-}
-
-
-
-extern char **environ;
-static void
-printEnvVars(char *type)
-{
- printf("The following %s* environment variables were specified:\n", type);
- char **env;
- for(env = environ; *env != 0 ; env++)
- {
- if(!strncasecmp(*env, type, strlen(type)))
- printf(" %s\n", *env);
- }
-}
-
-
-static void
-MPIDI_PAMI_init(int* rank, int* size, int* threading)
-{
- MPIDI_PAMI_context_init(threading, size);
-
-
- MPIDI_PAMI_dispath_init();
-
-
- if ( (*rank == 0) && (MPIDI_Process.verbose >= MPIDI_VERBOSE_SUMMARY_0) )
- {
- printf("MPIDI_Process.*\n"
- " verbose : %u\n"
- " statistics : %u\n"
- " contexts : %u\n"
- " async_progress : %u\n"
- " context_post : %u\n"
- " pt2pt.limits\n"
- " application\n"
- " eager\n"
- " remote, local : %u, %u\n"
- " short\n"
- " remote, local : %u, %u\n"
- " internal\n"
- " eager\n"
- " remote, local : %u, %u\n"
- " short\n"
- " remote, local : %u, %u\n"
- " rma_pending : %u\n"
- " shmem_pt2pt : %u\n"
- " disable_internal_eager_scale : %u\n"
-#if TOKEN_FLOW_CONTROL
- " mp_buf_mem : %u\n"
- " mp_buf_mem_max : %u\n"
- " is_token_flow_control_on : %u\n"
-#endif
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- " mp_infolevel : %u\n"
- " mp_statistics: %u\n"
- " mp_printenv : %u\n"
- " mp_interrupts: %u\n"
-#endif
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- " queue_binary_search_support_on : %u\n"
-#endif
- " optimized.collectives : %u\n"
- " optimized.select_colls: %u\n"
- " optimized.subcomms : %u\n"
- " optimized.memory : %u\n"
- " optimized.num_requests: %u\n"
- " mpir_nbc : %u\n"
- " numTasks : %u\n",
- " typed_onesided : %u\n",
- MPIDI_Process.verbose,
- MPIDI_Process.statistics,
- MPIDI_Process.avail_contexts,
- MPIDI_Process.async_progress.mode,
- MPIDI_Process.perobj.context_post.requested,
- MPIDI_Process.pt2pt.limits_array[0],
- MPIDI_Process.pt2pt.limits_array[1],
- MPIDI_Process.pt2pt.limits_array[2],
- MPIDI_Process.pt2pt.limits_array[3],
- MPIDI_Process.pt2pt.limits_array[4],
- MPIDI_Process.pt2pt.limits_array[5],
- MPIDI_Process.pt2pt.limits_array[6],
- MPIDI_Process.pt2pt.limits_array[7],
- MPIDI_Process.rma_pending,
- MPIDI_Process.shmem_pt2pt,
- MPIDI_Process.disable_internal_eager_scale,
-#if TOKEN_FLOW_CONTROL
- MPIDI_Process.mp_buf_mem,
- MPIDI_Process.mp_buf_mem_max,
- MPIDI_Process.is_token_flow_control_on,
-#endif
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- MPIDI_Process.mp_infolevel,
- MPIDI_Process.mp_statistics,
- MPIDI_Process.mp_printenv,
- (MPIDI_Process.async_progress.mode != ASYNC_PROGRESS_MODE_DISABLED),
-#endif
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- MPIDI_Process.queue_binary_search_support_on,
-#endif
- MPIDI_Process.optimized.collectives,
- MPIDI_Process.optimized.select_colls,
- MPIDI_Process.optimized.subcomms,
- MPIDI_Process.optimized.memory,
- MPIDI_Process.optimized.num_requests,
- MPIDI_Process.mpir_nbc,
- MPIDI_Process.numTasks,
- MPIDI_Process.typed_onesided);
- switch (*threading)
- {
- case MPI_THREAD_MULTIPLE:
- printf("mpi thread level : 'MPI_THREAD_MULTIPLE'\n");
- break;
- case MPI_THREAD_SERIALIZED:
- printf("mpi thread level : 'MPI_THREAD_SERIALIZED'\n");
- break;
- case MPI_THREAD_FUNNELED:
- printf("mpi thread level : 'MPI_THREAD_FUNNELED'\n");
- break;
- case MPI_THREAD_SINGLE:
- printf("mpi thread level : 'MPI_THREAD_SINGLE'\n");
- break;
- }
- printf("MPICH_THREAD_GRANULARITY : '%s'\n",
- (MPICH_THREAD_GRANULARITY==MPICH_THREAD_GRANULARITY_PER_OBJECT)?"per object":"global");
-#ifdef ASSERT_LEVEL
- printf("ASSERT_LEVEL : %d\n", ASSERT_LEVEL);
-#else
- printf("ASSERT_LEVEL : not defined\n");
-#endif
-#ifdef MPICH_LIBDIR
- printf("MPICH_LIBDIR : %s\n", MPICH_LIBDIR);
-#else
- printf("MPICH_LIBDIR : not defined\n");
-#endif
- printEnvVars("MPICH_");
- printEnvVars("PAMID_");
- printEnvVars("PAMI_");
- printEnvVars("COMMAGENT_");
- printEnvVars("MUSPI_");
- printEnvVars("BG_");
- }
-#ifdef MPIDI_BANNER
- if ((*rank == 0) && (MPIDI_Process.mp_infolevel >=1)) {
- char* buf = (char *) MPIU_Malloc(160);
- int rc = MPIDI_Banner(buf);
- if ( rc == 0 )
- fprintf(stderr, "%s\n", buf);
- else
- TRACE_ERR("mpid_banner() return code=%d task %d",rc,*rank);
- MPIU_Free(buf);
- }
-#endif
-}
-
-#ifndef DYNAMIC_TASKING
-static void
-MPIDI_VCRT_init(int rank, int size)
-#else
-static void
-MPIDI_VCRT_init(int rank, int size, char *world_tasks, MPIDI_PG_t *pg)
-#endif
-{
- int i, rc;
- MPID_Comm * comm;
-#ifdef DYNAMIC_TASKING
- int p, mpi_errno=0;
- char *world_tasks_save,*cp;
- char *pg_id;
-#endif
-
- /* ------------------------------- */
- /* Initialize MPI_COMM_SELF object */
- /* ------------------------------- */
- comm = MPIR_Process.comm_self;
- comm->rank = 0;
- comm->remote_size = comm->local_size = 1;
- rc = MPID_VCRT_Create(comm->remote_size, &comm->vcrt);
- MPID_assert_always(rc == MPI_SUCCESS);
- rc = MPID_VCRT_Get_ptr(comm->vcrt, &comm->vcr);
- MPID_assert_always(rc == MPI_SUCCESS);
- comm->vcr[0]->taskid= PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_TASK_ID ).value.intval;
-
-#ifdef DYNAMIC_TASKING
- if(mpidi_dynamic_tasking) {
- comm->vcr[0]->pg=pg->vct[rank].pg;
- comm->vcr[0]->pg_rank=pg->vct[rank].pg_rank;
- pg->vct[rank].taskid = comm->vcr[0]->taskid;
- if(comm->vcr[0]->pg) {
- TRACE_ERR("Adding ref for comm=%x vcr=%x pg=%x\n", comm, comm->vcr[0], comm->vcr[0]->pg);
- MPIDI_PG_add_ref(comm->vcr[0]->pg);
- }
- comm->local_vcr = comm->vcr;
- }
-
-#endif
-
- /* -------------------------------- */
- /* Initialize MPI_COMM_WORLD object */
- /* -------------------------------- */
- comm = MPIR_Process.comm_world;
- comm->rank = rank;
- comm->remote_size = comm->local_size = size;
- rc = MPID_VCRT_Create(comm->remote_size, &comm->vcrt);
- MPID_assert_always(rc == MPI_SUCCESS);
- rc = MPID_VCRT_Get_ptr(comm->vcrt, &comm->vcr);
- MPID_assert_always(rc == MPI_SUCCESS);
-
-#ifdef DYNAMIC_TASKING
- if(mpidi_dynamic_tasking) {
- i=0;
- world_tasks_save = MPIU_Strdup(world_tasks);
- if(world_tasks != NULL) {
- comm->vcr[0]->taskid = atoi(strtok(world_tasks, ":"));
- while( (cp=strtok(NULL, ":")) != NULL) {
- comm->vcr[++i]->taskid= atoi(cp);
- }
- }
- MPIU_Free(world_tasks_save);
-
- /* This memory will be freed by the PG_Destroy if there is an error */
- pg_id = MPIU_Malloc(MAX_JOBID_LEN);
-
- mpi_errno = PMI2_Job_GetId(pg_id, MAX_JOBID_LEN);
- TRACE_ERR("PMI2_Job_GetId - pg_id=%s\n", pg_id);
-
- /* Initialize the connection table on COMM_WORLD from the process group's
- connection table */
- for (p = 0; p < comm->local_size; p++)
- {
- comm->vcr[p]->pg=pg->vct[p].pg;
- comm->vcr[p]->pg_rank=pg->vct[p].pg_rank;
- pg->vct[p].taskid = comm->vcr[p]->taskid;
- if(comm->vcr[p]->pg) {
- TRACE_ERR("Adding ref for comm=%x vcr=%x pg=%x\n", comm, comm->vcr[p], comm->vcr[p]->pg);
- MPIDI_PG_add_ref(comm->vcr[p]->pg);
- }
- /* MPID_VCR_Dup(&pg->vct[p], &(comm->vcr[p]));*/
- TRACE_ERR("comm->vcr[%d]->pg->id=%s comm->vcr[%d]->pg_rank=%d\n", p, comm->vcr[p]->pg->id, p, comm->vcr[p]->pg_rank);
- TRACE_ERR("TASKID -- comm->vcr[%d]=%d\n", p, comm->vcr[p]->taskid);
- }
-
- comm->local_vcr = comm->vcr;
- }else {
- for (i=0; i<size; i++) {
- comm->vcr[i]->taskid = i;
- TRACE_ERR("comm->vcr[%d]=%d\n", i, comm->vcr[i]->taskid);
- }
- TRACE_ERR("MP_I_WORLD_TASKS not SET\n");
- }
-#else
- for (i=0; i<size; i++) {
- comm->vcr[i]->taskid = i;
- TRACE_ERR("comm->vcr[%d]=%d\n", i, comm->vcr[i]->taskid);
- }
-#endif
-}
-
-
-/**
- * \brief Initialize MPICH at ADI level.
- * \param[in,out] argc Unused
- * \param[in,out] argv Unused
- * \param[in] requested The thread model requested by the user.
- * \param[out] provided The thread model provided to user. It is the same as requested, except in VNM.
- * \param[out] has_args Set to TRUE
- * \param[out] has_env Set to TRUE
- * \return MPI_SUCCESS
- */
-int MPID_Init(int * argc,
- char *** argv,
- int requested,
- int * provided,
- int * has_args,
- int * has_env)
-{
- int rank, size;
-#ifdef DYNAMIC_TASKING
- int has_parent=0;
- MPIDI_PG_t * pg=NULL;
- int pg_rank=-1;
- int pg_size;
- int appnum,mpi_errno;
- MPID_Comm * comm;
- int i,j;
- pami_configuration_t config;
- int world_size;
-#endif
- char *world_tasks;
- pami_result_t rc;
-
- /* Override split_type */
- MPID_Comm_fns = &comm_fns;
-
- /* ------------------------------------------------------------------------------- */
- /* Initialize the pami client to get the process rank; needed for env var output. */
- /* ------------------------------------------------------------------------------- */
- MPIDI_PAMI_client_init(&rank, &size, &mpidi_dynamic_tasking, &world_tasks);
- TRACE_OUT("after MPIDI_PAMI_client_init rank=%d size=%d mpidi_dynamic_tasking=%d\n", rank, size, mpidi_dynamic_tasking);
-
- /* ------------------------------------ */
- /* Get new defaults from the Env Vars */
- /* ------------------------------------ */
- MPIDI_Env_setup(rank, requested);
-
- /* ----------------------------- */
- /* Initialize messager */
- /* ----------------------------- */
- if ( (MPIDI_Process.async_progress.mode == ASYNC_PROGRESS_MODE_TRIGGER) || mpidi_dynamic_tasking)
- {
- /* The 'trigger' async progress mode requires MPI_THREAD_MULTIPLE.
- * Silently promote the thread level.
- *
- * See discussion in src/mpid/pamid/src/mpid_progress.h for more
- * information.
- */
- *provided = MPI_THREAD_MULTIPLE;
- }
- else
- {
- *provided = requested;
- }
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- if (requested != MPI_THREAD_MULTIPLE)
- mpich_env->single_thread=1;
-#endif
- MPIDI_PAMI_init(&rank, &size, provided);
-
-#ifdef DYNAMIC_TASKING
- if (mpidi_dynamic_tasking) {
-
- /*
- * Perform PMI initialization
- */
- mpi_errno = MPIDI_InitPG( argc, argv,
- has_args, has_env, &has_parent, &pg_rank, &pg );
- if (mpi_errno) {
- TRACE_ERR("MPIDI_InitPG returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* FIXME: Why are pg_size and pg_rank handled differently? */
- pg_size = MPIDI_PG_Get_size(pg);
-
- TRACE_ERR("MPID_Init - pg_size=%d\n", pg_size);
- MPIDI_Process.my_pg = pg; /* brad : this is rework for shared memories
- * because they need this set earlier
- * for getting the business card
- */
- MPIDI_Process.my_pg_rank = pg_rank;
-
- }
-#endif
-
- /* ------------------------- */
- /* initialize request queues */
- /* ------------------------- */
- MPIDI_Recvq_init();
-
- /* -------------------------------------- */
- /* Fill in some hardware structure fields */
- /* -------------------------------------- */
- extern void MPIX_Init();
- MPIX_Init();
-
- /* ------------------------------- */
- /* Set process attributes */
- /* ------------------------------- */
- MPIR_Process.attrs.tag_ub = INT_MAX;
- MPIR_Process.attrs.wtime_is_global = 1;
- MPIR_Process.attrs.io = MPI_ANY_SOURCE;
-
-
- /* ------------------------------- */
- /* Initialize communicator objects */
- /* ------------------------------- */
-#ifndef DYNAMIC_TASKING
- MPIDI_VCRT_init(rank, size);
-#else
- MPIDI_VCRT_init(rank, size, world_tasks, pg);
-#endif
-
- /* ------------------------------- */
- /* Setup optimized communicators */
- /* ------------------------------- */
- TRACE_ERR("creating world geometry\n");
- rc = PAMI_Geometry_world(MPIDI_Client, &MPIDI_Process.world_geometry);
- MPID_assert_always(rc == PAMI_SUCCESS);
- TRACE_ERR("calling comm_create on comm world %p\n", MPIR_Process.comm_world);
- MPIR_Process.comm_world->mpid.geometry = MPIDI_Process.world_geometry;
- MPIR_Process.comm_world->mpid.parent = PAMI_GEOMETRY_NULL;
- MPIR_Comm_commit(MPIR_Process.comm_world);
-
-#ifdef DYNAMIC_TASKING
- if (has_parent) {
- char * parent_port;
-
- /* FIXME: To allow just the "root" process to
- request the port and then use MPIR_Bcast_intra to
- distribute it to the rest of the processes,
- we need to perform the Bcast after MPI is
- otherwise initialized. We could do this
- by adding another MPID call that the MPI_Init(_thread)
- routine would make after the rest of MPI is
- initialized, but before MPI_Init returns.
- In fact, such a routine could be used to
- perform various checks, including parameter
- consistency value (e.g., all processes have the
- same environment variable values). Alternately,
- we could allow a few routines to operate with
- predefined parameter choices (e.g., bcast, allreduce)
- for the purposes of initialization. */
- mpi_errno = MPIDI_GetParentPort(&parent_port);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_GetParentPort returned with mpi_errno=%d\n", mpi_errno);
- }
-
- mpi_errno = MPID_Comm_connect(parent_port, NULL, 0,
- MPIR_Process.comm_world, &comm);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("mpi_errno from Comm_connect=%d\n", mpi_errno);
- }
-
- MPIR_Process.comm_parent = comm;
- MPIU_Assert(MPIR_Process.comm_parent != NULL);
- MPIU_Strncpy(comm->name, "MPI_COMM_PARENT", MPI_MAX_OBJECT_NAME);
-
- /* FIXME: Check that this intercommunicator gets freed in MPI_Finalize
- if not already freed. */
- }
- mp_world_exiting_handler = &(_mpi_world_exiting_handler);
-#endif
- /* ------------------------------- */
- /* Initialize timer data */
- /* ------------------------------- */
- MPID_Wtime_init();
-
-
- /* ------------------------------- */
- /* ??? */
- /* ------------------------------- */
- *has_args = TRUE;
- *has_env = TRUE;
-#ifdef MPIDI_PRINTENV
- if (MPIDI_Process.mp_printenv) {
- MPIDI_Print_mpenv(rank,size);
- }
-#endif
- /* ----------------------------------------------- */
- /* parse params for pami_tune if in benchmark mode */
- /* ----------------------------------------------- */
- if(MPIDI_Process.optimized.auto_select_colls == MPID_AUTO_SELECT_COLLS_TUNE)
- {
- if(argc != NULL && argv != NULL)
- {
- if(MPIDI_collsel_pami_tune_parse_params(*argc, *argv) != PAMI_SUCCESS)
- {
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
- }
- }
- else
- {
- if(MPIDI_collsel_pami_tune_parse_params(0, NULL) != PAMI_SUCCESS)
- {
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
- }
- }
- }
- return MPI_SUCCESS;
-}
-
-
-/*
- * \brief This is called by MPI to let us know that MPI_Init is done.
- */
-int MPID_InitCompleted()
-{
- MPIDI_NBC_init();
- MPIDI_Progress_init();
- /* ----------------------------------------------- */
- /* Now all is ready.. call table generate */
- /* ----------------------------------------------- */
- if(MPIDI_Process.optimized.auto_select_colls == MPID_AUTO_SELECT_COLLS_TUNE)
- {
- MPIDI_Collsel_table_generate();
- MPIDI_collsel_pami_tune_cleanup();
- }
- return MPI_SUCCESS;
-}
-
-#if (MPIDI_PRINTENV || MPIDI_STATISTICS || MPIDI_BANNER)
-void MPIDI_open_pe_extension() {
- int rc;
- /* open PE extension */
- memset(&pe_extension,0, sizeof(pami_extension_t));
- rc = PAMI_Extension_open (MPIDI_Client, "EXT_pe_extension", &pe_extension);
- TRACE_ERR("PAMI_Extension_open: rc %d\n", rc);
- if (rc != PAMI_SUCCESS) {
- TRACE_ERR("ERROR open PAMI_Extension_open failed rc %d", rc);
- MPID_assert_always(rc == PAMI_SUCCESS);
- }
-}
-
-
-int MPIDI_Banner(char * bufPtr) {
- char *cp, *level=NULL;
- char buf[30];
- char *ASC_time;
- time_t ltime;
- char msgBuf[60];
- char type[64], ver_buf[64];
- struct tm *tmx,*tm1;
-
- /* Note: The _ibm_release_version will be expanded to a full string */
- /* ONLY IF this file is extracted from CMVC. */
- /* If this file is cloned from GIT the the string will be just */
- /* "%W%. */
- if ( strncmp(_ibm_release_version_, "%W", 2) ) {
- /* IBMPE's expanded version string has release name like ppe_rbarlx */
- /* and that '_' in the name is what we are looking for. */
- /* BGQ's version string does not have a '_' in it. */
- level = strrchr(_ibm_release_version_, '_');
- if ( level ) {
- level -=3;
-
- /* The version string generated by CMVC during weekly build has a */
- /* date which is the time when the mpidi_platform.h file is last */
- /* updated. This date can be quite old and is better removed. */
- memset(ver_buf, 0, sizeof(ver_buf));
- strncpy(ver_buf, level, sizeof(ver_buf)-1);
- if ( cp = strchr(ver_buf, ',') ) *cp = '\0';
- }
- }
-
- if(sizeof(void*) == 8)
- strcpy(type, "64bit (MPI over PAMI)");
- else if(sizeof(int) == 4)
- strcpy(type, "32bit (MPI over PAMI)");
- else
- strcpy(type, "UNKNOWN-bit (MPI over PAMI)");
-
- sprintf(msgBuf,"MPICH library was compiled on");
-
- tmx=MPIU_Malloc(sizeof(struct tm));
- sprintf(buf,__DATE__" "__TIME__);
-
- if ((void *) NULL == strptime(buf, "%B %d %Y %T", tmx))
- return(1);
-
- /* update isdst in tmx structure */
- ltime=0;
- time(<ime);
- tm1 = localtime(<ime);
- tmx->tm_isdst=tm1->tm_isdst;
-
- /* localtime updates tm_wday in tmx structure */
- ltime=mktime(tmx);
- tm1 = localtime(<ime);
- tmx->tm_wday = tm1->tm_wday;
- ASC_time = asctime(tmx);
-
- if (level) {
- sprintf(bufPtr, "%s %s %s %s ", type, ver_buf, msgBuf, ASC_time);
- } else {
- sprintf(bufPtr, "%s %s %s ", type, msgBuf, ASC_time);
-
- }
-
- MPIU_Free(tmx);
- return MPI_SUCCESS;
-}
-#endif
-
-
-static inline void
-static_assertions()
-{
- MPID_assert_static(sizeof(void*) == sizeof(size_t));
- MPID_assert_static(sizeof(uintptr_t) == sizeof(size_t));
-#ifdef __BGQ__
- /* MPID_VCR_GET_LPIDS relies on the VCR being a simple task list */
- MPID_VCR vcr=NULL;
- MPID_assert_static(sizeof(*vcr) == sizeof(pami_task_t));/* VCR is a simple task list */
- MPID_assert_static(sizeof(vcr->taskid) == sizeof(*vcr));/* VCR is a simple task list */
-
- MPID_assert_static(sizeof(MPIDI_MsgInfo) == 16);
- MPID_assert_static(sizeof(uint64_t) == sizeof(size_t));
-#endif
-}
-
-#ifdef DYNAMIC_TASKING
-/* FIXME: The PG code should supply these, since it knows how the
- pg_ids and other data are represented */
-int MPIDI_PG_Compare_ids(void * id1, void * id2)
-{
- return (strcmp((char *) id1, (char *) id2) == 0) ? TRUE : FALSE;
-}
-
-int MPIDI_PG_Destroy_id(MPIDI_PG_t * pg)
-{
- if (pg->id != NULL)
- {
- TRACE_ERR("free pg id =%p pg=%p\n", pg->id, pg);
- MPIU_Free(pg->id);
- TRACE_ERR("done free pg id \n");
- }
-
- return MPI_SUCCESS;
-}
-
-
-int MPIDI_InitPG( int *argc, char ***argv,
- int *has_args, int *has_env, int *has_parent,
- int *pg_rank_p, MPIDI_PG_t **pg_p )
-{
- int pmi_errno;
- int mpi_errno = MPI_SUCCESS;
- int pg_rank, pg_size, appnum, pg_id_sz;
- int usePMI=1;
- char *pg_id;
- MPIDI_PG_t *pg = 0;
-
- /* If we use PMI here, make the PMI calls to get the
- basic values. Note that systems that return setvals == true
- do not make use of PMI for the KVS routines either (it is
- assumed that the discover connection information through some
- other mechanism */
- /* FIXME: We may want to allow the channel to ifdef out the use
- of PMI calls, or ask the channel to provide stubs that
- return errors if the routines are in fact used */
- if (usePMI) {
- /*
- * Initialize the process manangement interface (PMI),
- * and get rank and size information about our process group
- */
-
-#ifdef USE_PMI2_API
- TRACE_ERR("Calling PMI2_Init\n");
- mpi_errno = PMI2_Init(has_parent, &pg_size, &pg_rank, &appnum);
- TRACE_ERR("PMI2_Init - pg_size=%d pg_rank=%d\n", pg_size, pg_rank);
- /*if (mpi_errno) MPIU_ERR_POP(mpi_errno);*/
-#else
- TRACE_ERR("Calling PMI_Init\n");
- pmi_errno = PMI_Init(has_parent);
- if (pmi_errno != PMI_SUCCESS) {
- /* MPIU_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**pmi_init",
- "**pmi_init %d", pmi_errno); */
- }
-
- pmi_errno = PMI_Get_rank(&pg_rank);
- if (pmi_errno != PMI_SUCCESS) {
- /*MPIU_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**pmi_get_rank",
- "**pmi_get_rank %d", pmi_errno); */
- }
-
- pmi_errno = PMI_Get_size(&pg_size);
- if (pmi_errno != 0) {
- /*MPIU_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**pmi_get_size",
- "**pmi_get_size %d", pmi_errno);*/
- }
-
- pmi_errno = PMI_Get_appnum(&appnum);
- if (pmi_errno != PMI_SUCCESS) {
-/* MPIU_ERR_SETANDJUMP1(mpi_errno,MPI_ERR_OTHER, "**pmi_get_appnum",
- "**pmi_get_appnum %d", pmi_errno); */
- }
-#endif
- /* Note that if pmi is not availble, the value of MPI_APPNUM is
- not set */
- if (appnum != -1) {
- MPIR_Process.attrs.appnum = appnum;
- }
-
-#ifdef USE_PMI2_API
-
- /* This memory will be freed by the PG_Destroy if there is an error */
- pg_id = MPIU_Malloc(MAX_JOBID_LEN);
-
- mpi_errno = PMI2_Job_GetId(pg_id, MAX_JOBID_LEN);
- TRACE_ERR("PMI2_Job_GetId - pg_id=%s\n", pg_id);
-#else
- /* Now, initialize the process group information with PMI calls */
- /*
- * Get the process group id
- */
- pmi_errno = PMI_KVS_Get_name_length_max(&pg_id_sz);
- if (pmi_errno != PMI_SUCCESS) {
- TRACE_ERR("PMI_KVS_Get_name_length_max returned with pmi_errno=%d\n", pmi_errno);
- }
-
- /* This memory will be freed by the PG_Destroy if there is an error */
- pg_id = MPIU_Malloc(pg_id_sz + 1);
-
- /* Note in the singleton init case, the pg_id is a dummy.
- We'll want to replace this value if we join an
- Process manager */
- pmi_errno = PMI_KVS_Get_my_name(pg_id, pg_id_sz);
- if (pmi_errno != PMI_SUCCESS) {
- TRACE_ERR("PMI_KVS_Get_my_name returned with pmi_errno=%d\n", pmi_errno);
- }
-#endif
- }
- else {
- /* Create a default pg id */
- pg_id = MPIU_Malloc(2);
- MPIU_Strncpy( pg_id, "0", 2 );
- }
-
- TRACE_ERR("pg_size=%d pg_id=%s\n", pg_size, pg_id);
- /*
- * Initialize the process group tracking subsystem
- */
- mpi_errno = MPIDI_PG_Init(argc, argv,
- MPIDI_PG_Compare_ids, MPIDI_PG_Destroy_id);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_PG_Init returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /*
- * Create a new structure to track the process group for our MPI_COMM_WORLD
- */
- TRACE_ERR("pg_size=%d pg_id=%p pg_id=%s\n", pg_size, pg_id, pg_id);
- mpi_errno = MPIDI_PG_Create(pg_size, pg_id, &pg);
- MPIU_Free(pg_id);
- if (mpi_errno != MPI_SUCCESS) {
- TRACE_ERR("MPIDI_PG_Create returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* FIXME: We can allow the channels to tell the PG how to get
- connection information by passing the pg to the channel init routine */
- if (usePMI) {
- /* Tell the process group how to get connection information */
- mpi_errno = MPIDI_PG_InitConnKVS( pg );
- if (mpi_errno)
- TRACE_ERR("MPIDI_PG_InitConnKVS returned with mpi_errno=%d\n", mpi_errno);
- }
-
- /* FIXME: has_args and has_env need to come from PMI eventually... */
- *has_args = TRUE;
- *has_env = TRUE;
-
- *pg_p = pg;
- *pg_rank_p = pg_rank;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- /* --BEGIN ERROR HANDLING-- */
- if (pg) {
- MPIDI_PG_Destroy( pg );
- }
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-#endif
diff --git a/src/mpid/pamid/src/mpid_iprobe.c b/src/mpid/pamid/src/mpid_iprobe.c
deleted file mode 100644
index ebdc093..0000000
--- a/src/mpid/pamid/src/mpid_iprobe.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_iprobe.c
- * \brief ???
- */
-#include <mpidimpl.h>
-
-
-int
-MPID_Iprobe(int source,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- int *flag,
- MPI_Status * status)
-{
- const int context = comm->recvcontext_id + context_offset;
-
- if (source == MPI_PROC_NULL)
- {
- MPIR_Status_set_procnull(status);
- /* We set the flag to true because an MPI_Recv with this rank will
- * return immediately */
- *flag = TRUE;
- return MPI_SUCCESS;
- }
- *flag = MPIDI_Recvq_FU_r(source, tag, context, status);
- if (!(*flag))
- MPID_Progress_poke();
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/mpid_mprobe.c b/src/mpid/pamid/src/mpid_mprobe.c
deleted file mode 100644
index 81e0690..0000000
--- a/src/mpid/pamid/src/mpid_mprobe.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2012 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-
-int MPID_Mprobe(int source, int tag, MPID_Comm *comm, int context_offset,
- MPID_Request **message, MPI_Status *status)
-{
- const int context = comm->recvcontext_id + context_offset;
- int foundp;
- MPID_Request * rreq = NULL;
-
- if (source == MPI_PROC_NULL)
- {
- MPIR_Status_set_procnull(status);
- return MPI_SUCCESS;
- }
-
-#ifndef OUT_OF_ORDER_HANDLING
- MPID_PROGRESS_WAIT_WHILE((rreq=MPIDI_Recvq_FDU(source, tag, context, &foundp) ) == NULL );
-#else
- int pami_source;
- if(source != MPI_ANY_SOURCE) {
- pami_source = MPID_VCR_GET_LPID(comm->vcr, source);
- } else {
- pami_source = MPI_ANY_SOURCE;
- }
- MPID_PROGRESS_WAIT_WHILE((rreq=MPIDI_Recvq_FDU(source, pami_source, tag, context, &foundp) ) == NULL );
-#endif
-
- if (rreq) {
- rreq->kind = MPID_REQUEST_MPROBE;
- MPIR_Request_extract_status(rreq, status);
- }
- *message = rreq;
- return MPI_SUCCESS;
-}
-
diff --git a/src/mpid/pamid/src/mpid_mrecv.c b/src/mpid/pamid/src/mpid_mrecv.c
deleted file mode 100644
index fdd2b70..0000000
--- a/src/mpid/pamid/src/mpid_mrecv.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2012 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpidimpl.h"
-
-int MPID_Mrecv(void *buf, int count, MPI_Datatype datatype,
- MPID_Request *message, MPI_Status *status)
-{
- int mpi_errno = MPI_SUCCESS;
- MPI_Request req_handle; /* dummy for MPIR_Request_complete */
- int active_flag; /* dummy for MPIR_Request_complete */
- MPID_Request *rreq = NULL;
-
- if (message == NULL) {
- /* treat as though MPI_MESSAGE_NO_PROC was passed */
- MPIR_Status_set_procnull(status);
- return mpi_errno;
- }
-
- /* There is no optimized MPID_Mrecv at this time because there is no real
- * optimization potential in that case. MPID_Recv exists to prevent
- * creating a request unnecessarily for messages that are already present
- * and eligible for immediate completion. */
- mpi_errno = MPID_Imrecv(buf, count, datatype, message, &rreq);
-
- MPID_PROGRESS_WAIT_WHILE(!MPID_Request_is_complete(rreq));
-
- mpi_errno = MPIR_Request_complete(&req_handle, rreq, status, &active_flag);
- return mpi_errno;
-}
-
diff --git a/src/mpid/pamid/src/mpid_probe.c b/src/mpid/pamid/src/mpid_probe.c
deleted file mode 100644
index f0f1549..0000000
--- a/src/mpid/pamid/src/mpid_probe.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_probe.c
- * \brief ???
- */
-#include <mpidimpl.h>
-
-
-int
-MPID_Probe(int source,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPI_Status * status)
-{
- const int context = comm->recvcontext_id + context_offset;
-
- if (source == MPI_PROC_NULL)
- {
- MPIR_Status_set_procnull(status);
- return MPI_SUCCESS;
- }
- MPID_PROGRESS_WAIT_WHILE(!MPIDI_Recvq_FU_r(source, tag, context, status));
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/mpid_progress.c b/src/mpid/pamid/src/mpid_progress.c
deleted file mode 100644
index 4a93f95..0000000
--- a/src/mpid/pamid/src/mpid_progress.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_progress.c
- * \brief Maintain the state and rules of the MPI progress semantics
- */
-#include <mpidimpl.h>
-
-#define MAX_PROGRESS_HOOKS 4
-typedef int (*progress_func_ptr_t) (int* made_progress);
-
-typedef struct progress_hook_slot {
- progress_func_ptr_t func_ptr;
- int active;
-} progress_hook_slot_t;
-
-static progress_hook_slot_t progress_hooks[MAX_PROGRESS_HOOKS];
-
-#undef FUNCNAME
-#define FUNCNAME MPIDI_Progress_register_hook
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIDI_Progress_register_hook(int (*progress_fn)(int*), int *id)
-{
- int mpi_errno = MPI_SUCCESS;
- int i;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_REGISTER_HOOK);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PROGRESS_REGISTER_HOOK);
- MPIU_THREAD_CS_ENTER(ASYNC,);
-
- for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
- if (progress_hooks[i].func_ptr == NULL) {
- progress_hooks[i].func_ptr = progress_fn;
- progress_hooks[i].active = FALSE;
- break;
- }
- }
-
- if (i >= MAX_PROGRESS_HOOKS) {
- return MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- "MPIDI_Progress_register_hook", __LINE__,
- MPI_ERR_INTERN, "**progresshookstoomany", 0 );
- }
-
- (*id) = i;
-
- fn_exit:
- MPIU_THREAD_CS_EXIT(ASYNC,);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PROGRESS_REGISTER_HOOK);
- return mpi_errno;
-
- fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDI_Progress_deregister_hook
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIDI_Progress_deregister_hook(int id)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_PROGRESS_DEREGISTER_HOOK);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_PROGRESS_DEREGISTER_HOOK);
- MPIU_THREAD_CS_ENTER(ASYNC,);
-
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS && progress_hooks[id].func_ptr != NULL);
-
- progress_hooks[id].func_ptr = NULL;
- progress_hooks[id].active = FALSE;
-
- fn_exit:
- MPIU_THREAD_CS_EXIT(ASYNC,);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_PROGRESS_DEREGISTER_HOOK);
- return mpi_errno;
-
- fn_fail:
- goto fn_exit;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3I_Progress_activate_hook
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Progress_activate_hook(int id)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
- MPIU_THREAD_CS_ENTER(MPIDCOMM,);
-
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
- progress_hooks[id].active == FALSE && progress_hooks[id].func_ptr != NULL);
- progress_hooks[id].active = TRUE;
-
- fn_exit:
- MPIU_THREAD_CS_EXIT(MPIDCOMM,);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_ACTIVATE_HOOK);
- return mpi_errno;
-
- fn_fail:
- goto fn_exit;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3I_Progress_deactivate_hook
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIDI_CH3I_Progress_deactivate_hook(int id)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
- MPIU_THREAD_CS_ENTER(MPIDCOMM,);
-
- MPIU_Assert(id >= 0 && id < MAX_PROGRESS_HOOKS &&
- progress_hooks[id].active == TRUE && progress_hooks[id].func_ptr != NULL);
- progress_hooks[id].active = FALSE;
-
- fn_exit:
- MPIU_THREAD_CS_EXIT(MPIDCOMM,);
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_PROGRESS_DEACTIVATE_HOOK);
- return mpi_errno;
-
- fn_fail:
- goto fn_exit;
-}
-
-void
-MPIDI_Progress_init()
-{
- MPIDI_Process.async_progress.active = 0;
- pamix_progress_t async_progress_type=0;
-
- /* In the "global" mpich lock mode the only possible progress function
- * is the "global mpich lock" trigger progress function. This progress
- * function is ignored if async progress is disabled.
- */
- pamix_progress_function progress_fn = MPIDI_Progress_async_poll;
- uintptr_t i;
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- /* In the "per object" mpich lock mode the only possible progress functions
- * are the "context lock" trigger progress function and the 'NULL' progress
- * function.
- */
- if (MPIDI_Process.async_progress.mode == ASYNC_PROGRESS_MODE_LOCKED)
- progress_fn = NULL;
- else
- progress_fn = MPIDI_Progress_async_poll_perobj;
-
- MPIDI_Process.perobj.context_post.active =
- MPIDI_Process.perobj.context_post.requested;
-#endif
-
- async_progress_type = PAMIX_PROGRESS_ALL;
-
-#ifdef __PE__
- if (MPIDI_Process.mp_interrupts)
- {
- /* PAMIX_PROGRESS_TIMER, PAMIX_PROGRESS_RECV_INTERRUPT or */
- /* ASYNC_PROGRESS_ALL */
- /* mp_interrupts=0 indicates the interrupts is disabled */
- /* which is the same definition as that of PAMIX_PROGRESS_ALL. */
- /* ASYNC_PROGRESS_ALL is an internal variable which is defined */
- /* as 0x1111 and needs to be converted to corresponding pami */
- /* type PAMIX_PROGRESS_ALL */
- async_progress_type = MPIDI_Process.mp_interrupts;
- if (MPIDI_Process.mp_interrupts == ASYNC_PROGRESS_ALL)
- async_progress_type = PAMIX_PROGRESS_ALL;
- }
-#endif
-
-
- if (MPIDI_Process.async_progress.mode != ASYNC_PROGRESS_MODE_DISABLED)
- {
- TRACE_ERR("Async advance beginning...\n");
-
- /* Enable async progress on all contexts.*/
- for (i=0; i<MPIDI_Process.avail_contexts; ++i)
- {
- PAMIX_Progress_register(MPIDI_Context[i],
- progress_fn,
- MPIDI_Progress_async_end,
- MPIDI_Progress_async_start,
- (void *) i);
- PAMIX_Progress_enable(MPIDI_Context[i], async_progress_type);
- }
- TRACE_ERR("Async advance enabled\n");
- }
-
- /* Initialize progress hook slots */
- for (i = 0; i < MAX_PROGRESS_HOOKS; i++)
- {
- progress_hooks[i].func_ptr = NULL;
- progress_hooks[i].active = FALSE;
- }
-}
-
-void
-MPIDI_Progress_async_start(pami_context_t context, void *cookie)
-{
- /* This special async progress critical section is required for both 'global'
- * and 'perobj' mpich lock modes because, regardless of the lock mode, if
- * more than one context is enabled for async progress then multiple threads
- * could attempt to update the shared variables at the same time.
- */
- MPIU_THREAD_CS_ENTER(ASYNC,);
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- if (MPIDI_Process.async_progress.active == 0)
- {
- /* Asynchronous progress was completely disabled and now async progress
- * is enabled for one context. Because one context is in async progress
- * mode the configuration state must be updated as if all contexts were in
- * async rogress mode.
- */
- MPIDI_Process.perobj.context_post.active =
- MPIDI_Process.perobj.context_post.requested;
- }
-#endif
-
- MPIDI_Process.async_progress.active += 1;
-
- MPIDI_Mutex_sync();
-
- /* Required for both 'global' and 'perobj' mpich lock modes. */
- MPIU_THREAD_CS_EXIT(ASYNC,);
-}
-
-void
-MPIDI_Progress_async_end (pami_context_t context, void *cookie)
-{
- /* This special async progress critical section is required for both 'global'
- * and 'perobj' mpich lock modes because, regardless of the lock mode, if
- * more than one context is enabled for async progress then multiple threads
- * could attempt to update the shared variables at the same time.
- */
- MPIU_THREAD_CS_ENTER(ASYNC,);
-
- MPIDI_Process.async_progress.active -= 1;
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- if (MPIDI_Process.async_progress.active == 0)
- {
- /* Asynchronous progress is now completely disabled on all contexts. */
- if (MPIR_ThreadInfo.thread_provided != MPI_THREAD_MULTIPLE)
- {
- /* The runtime is, currently, completely single threaded - there are
- * no async progress threads and only one application thread. In this
- * environment the context post is simply overhead and can be safely
- * avoided.
- */
- MPIDI_Process.perobj.context_post.active = 0;
- }
- }
-#endif
- MPIDI_Mutex_sync();
-
- /* Required for both 'global' and 'perobj' mpich lock modes. */
- MPIU_THREAD_CS_EXIT(ASYNC,);
-}
-
-void
-MPIDI_Progress_async_poll (pami_context_t context, void *cookie)
-{
- pami_result_t rc;
- int loop_count=100;
- int i, made_progress;
-
- /* In the "global" mpich lock mode all application threads must acquire the
- * ALLFUNC global lock upon entry to the API. The async progress thread
- * invoking this progress function also must first acquire the ALLFUNC
- * global lock as it enters the API and before invoking advance as mpich
- * callbacks invoked during advance will not take any additional locks.
- */
- if (MPIU_THREAD_CS_TRY(ALLFUNC,)) /* (0==try_acquire(0)) */
- {
- for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
- if (progress_hooks[i].active == TRUE) {
- MPIU_Assert(progress_hooks[i].func_ptr != NULL);
- progress_hooks[i].func_ptr(&made_progress);
- }
- }
-
- /* There is a simplifying assertion when in the 'global' mpich lock mode
- * that only a single context is supported. See the discussion in
- * mpich/src/mpid/pamid/src/mpid_init.c for more information.
- */
- rc = PAMI_Context_advancev (MPIDI_Context, 1, loop_count);
- MPID_assert( (rc == PAMI_SUCCESS) || (rc == PAMI_EAGAIN) );
-
- MPIDI_Mutex_sync(); /* is this needed ? */
- MPIU_THREAD_CS_EXIT(ALLFUNC,); /* release(0) */
-#ifdef __PE__
- if (rc == PAMI_EAGAIN)
- sched_yield();
-#endif
- }
-
- return;
-}
-
-void
-MPIDI_Progress_async_poll_perobj (pami_context_t context, void *cookie)
-{
- pami_result_t rc;
- int loop_count=100;
- int i, made_progress;
-
- for (i = 0; i < MAX_PROGRESS_HOOKS; i++) {
- if (progress_hooks[i].active == TRUE) {
- MPIU_Assert(progress_hooks[i].func_ptr != NULL);
- progress_hooks[i].func_ptr(&made_progress);
- }
- }
-
- /* In the "per object" mpich lock mode multiple application threads could be
- * active within the API interacting with contexts and multiple async progress
- * threads could be polling contexts in this function. The only way to force a
- * serialized access to the contexts is to use the pami context locks.
- */
- rc = PAMI_Context_trylock_advancev(MPIDI_Context, MPIDI_Process.avail_contexts, loop_count);
- MPID_assert( (rc == PAMI_SUCCESS) || (rc == PAMI_EAGAIN) );
-#ifdef __PE__
- if (rc == PAMI_EAGAIN)
- {
- MPIDI_Mutex_sync(); /* is this needed ? */
- sched_yield();
- }
-#endif
-
- return;
-}
-
diff --git a/src/mpid/pamid/src/mpid_progress.h b/src/mpid/pamid/src/mpid_progress.h
deleted file mode 100644
index aace473..0000000
--- a/src/mpid/pamid/src/mpid_progress.h
+++ /dev/null
@@ -1,297 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_progress.h
- * \brief ???
- */
-
-#ifndef __src_mpid_progress_h__
-#define __src_mpid_progress_h__
-
-
-/**
- * \defgroup MPID_PROGRESS MPID Progress engine
- *
- * Maintain the state and rules of the MPI progress semantics.
- *
- * The behavior of asynchronous progress depends on many configurable variables,
- * and the requirements and/or effects of several combinations may not be
- * obvious. There are certain truths and simplifying assertions that, once
- * identified, can eliminate many configurations from consideration which
- * greatly reduces code complexity.
- *
- * 1. Asynchronous progress with a NULL progress function requires context post.
- *
- * When a NULL progress function is specified for async progress, in some
- * implementations, the context lock will be internally acquired and held
- * until async progress is disabled or suspended. As such, any application
- * thread that waits to acquire a context lock will block indefinitely. This
- * is considered an invalid configuration.
- *
- * 2. Asynchronous progress with a NULL progress function requires "per object"
- * mpich locks.
- *
- * When compiled using the "global lock" mpich thread mode the individual
- * "per object" lock macros are defined as noops, yet all mpich callbacks
- * that could be invoked from within a context advance only use the
- * "per object" lock macros and *not* the "global" lock macros. This is
- * because the async progress thread never actually leaves the API, but
- * remains within the library. As designed, the mpich "global" locks are only
- * acquired and released at the very top API entry and exit points.
- *
- * If noop "per object" lock macros are ever used the async progress threads
- * will cause data corruption of mpich data structures.
- *
- * 3. Asynchronous progress with a non-NULL progress function using the "global"
- * mpich locks requires 'MPI_THREAD_MULTIPLE'.
- *
- * The "global" mpich lock macros, as defined, include a check of the thread
- * mode and only performs the mutex operations if the thread mode is
- * 'MPI_THREAD_MULTIPLE'. When using a non-NULL progress function for async
- * progress the thread that invokes the progress function is essentially
- * 'outside' of the mpich library. Consequently, similar to the other API
- * entry points, the "global" mpich lock must be acquired in the progress
- * function before any mpich data structures may be accessed.
- *
- * If acquiring the "global" lock is attempted in any thread mode other
- * than 'MPI_THREAD_MULTIPLE' the async progress threads will cause data
- * corruption of mpich data structures. To avoid this data corruption
- * problem the mpi thread mode is promoted to 'MPI_THREAD_MULTIPLE' when
- * async progress with a non-NULL progress function is enabled in the
- * "global" mpich lock mode.
- *
- * 4. Only a single context is supported in the "global" mpich lock mode.
- *
- * A multi-context application will always perform better with the
- * "per object" mpich lock mode - regardless of whether async progress is
- * enabled or not. This is because in the "global" mpich lock mode all
- * threads, application and async progress, must acquire the single global
- * lock which effectively serializes the threads and negates any benefit
- * of multiple contexts.
- *
- * Asserting this single context limitation removes code, improves
- * performance, and greatly simplifies logic.
- *
- * 5. The "global" mpich lock mode does not support context post.
- *
- * As the "global" mpich lock mode only supports a single context, and all
- * threads, application and async progress, must first acquire the global
- * lock before accessing the mpich data structures or the single context,
- * it is detrimental to performance to invoke context post instead of
- * directly operating on the context.
- *
- * Asserting this context post limitation further removes code, improves
- * performance, and simplifies logic.
- *
- * 6. The "global" mpich lock mode does not require context lock.
- *
- * Access to all internal mpich data structures, including the single
- * context, for all application and async progress threads, is protected by
- * the "global" mpich lock upon entry to the API. This makes the context
- * lock redundant.
- *
- * 7. The "per object" mpich lock mode assumes active asynchronous progress and
- * mpi thread mode 'MPI_THREAD_MULTIPLE'.
- *
- * Strictly defined, the context lock is NOT required in the "per object"
- * mpich lock mode if asyncronous progress is not active and the mpi thread
- * level is not 'MPI_THREAD_MULTIPLE'. This means that the run environment
- * is completely single threaded.
- *
- * An application running completely single threaded using the "per object"
- * mpich lock mode will always perform worse than the same completely single
- * threaded application using the "global" mpich lock mode. This is because
- * a "per object" single thread will take more locks than a "global" single
- * thread.
- *
- * Therefore, a simplifying assertion is made that, as the "per object"
- * completely single threaded configuration is always worse than the "global"
- * completely single threaded configuration, the "per object" mpich lock mode
- * will assume the application is running a multi-threaded configuration and
- * optimize the code logic accordingly.
- *
- * \addtogroup MPID_PROGRESS
- * \{
- */
-
-typedef enum
-{
- ASYNC_PROGRESS_MODE_DISABLED = 0, /**< async progress is disabled */
- ASYNC_PROGRESS_MODE_LOCKED, /**< async progress uses a \c NULL progress_fn */
- ASYNC_PROGRESS_MODE_TRIGGER, /**< async progress uses a 'trigger' progress_fn */
- ASYNC_PROGRESS_MODE_COUNT /**< number of sync progress modes */
-} async_progress_mode_t;
-
-
-/** \brief The same as MPID_Progress_wait(), since it does not block */
-#define MPID_Progress_test() MPID_Progress_wait_inline(1)
-/** \brief The same as MPID_Progress_wait(), since it does not block */
-#define MPID_Progress_poke() MPID_Progress_wait_inline(1)
-
-
-/**
- * \brief A macro to easily implement advancing until a specific
- * condition becomes false.
- *
- * \param[in] COND This is not a true parameter. It is *specifically*
- * designed to be evaluated several times, allowing for the result to
- * change. The condition would generally look something like
- * "(cb.client == 0)". This would be used as the condition on a while
- * loop.
- *
- * \returns MPI_SUCCESS
- *
- * This correctly checks the condition before attempting to loop,
- * since the call to MPID_Progress_wait() may not return if the event
- * is already complete. Any system *not* using this macro *must* use
- * a similar check before waiting.
- */
-#define MPID_PROGRESS_WAIT_WHILE(COND) \
-({ \
- while (COND) \
- MPID_Progress_wait(&__state); \
- MPI_SUCCESS; \
-})
-
-
-/**
- * \brief A macro to easily implement advancing until a specific
- * condition becomes false.
- *
- * \param[in] COND This is not a true parameter. It is *specifically*
- * designed to be evaluated several times, allowing for the result to
- * change. The condition would generally look something like
- * "(cb.client == 0)". This would be used as the condition on a while
- * loop.
- *
- * \returns MPI_SUCCESS
- *
- * This macro makes one pami advance regardless of the state of the COND.
- */
-#define MPID_PROGRESS_WAIT_DO_WHILE(COND) \
-({ \
- do { \
- MPID_Progress_wait(&__state); \
- } while(COND); \
- MPI_SUCCESS; \
-})
-
-
-/**
- * \brief Unused, provided since MPI calls it.
- * \param[in] state The previously seen state of advance
- */
-#define MPID_Progress_start(state)
-
-/**
- * \brief Unused, provided since MPI calls it.
- * \param[in] state The previously seen state of advance
- */
-#define MPID_Progress_end(state)
-
-/**
- * \brief Signal MPID_Progress_wait() that something is done/changed
- *
- * It is therefore important that the ADI layer include a call to
- * MPIDI_Progress_signal() whenever something occurs that a node might
- * be waiting on.
- */
-#define MPIDI_Progress_signal()
-
-
-#define MPID_Progress_wait(state) MPID_Progress_wait_inline(100)
-
-
-void MPIDI_Progress_init();
-void MPIDI_Progress_async_start(pami_context_t context, void *cookie);
-void MPIDI_Progress_async_end (pami_context_t context, void *cookie);
-void MPIDI_Progress_async_poll ();
-void MPIDI_Progress_async_poll_perobj ();
-
-/**
- * \brief This function blocks until a request completes
- * \param[in] state The previously seen state of advance
- *
- * It does not check what has completed, only that the counter
- * changes. That happens whenever there is a call to
- * MPIDI_Progress_signal(). It is therefore important that the ADI
- * layer include a call to MPIDI_Progress_signal() whenever something
- * occurs that a node might be waiting on.
- *
- */
-static inline int
-MPID_Progress_wait_inline(unsigned loop_count)
-{
- pami_result_t rc = 0;
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- /*
- * In the "per object" thread mode the "global" lock is defined as a noop and
- * therefore no locks are held at this point.
- */
- if (unlikely(MPIDI_Process.async_progress.active == 0))
- {
- /*
- * Asynchronous progress is currently inactive; therefore this application
- * thread must drive progress.
- *
- * It is not actually neccesary to lock the context when async progress is
- * disabled and only a single context is being used and the mpi thread
- * mode is not mpi thread multiple. This is unlikely to be true in the
- * mpich "per obj" thread granularity compile. As an optimization, do not
- * check for this condition and simply always perform the context lock.
- */
- rc = PAMI_Context_trylock_advancev(MPIDI_Context, MPIDI_Process.avail_contexts, 1);
- MPID_assert( (rc == PAMI_SUCCESS) || (rc == PAMI_EAGAIN) );
- }
-#else
- /*
- * In the "global lock" thread mode the single mpich lock has already been
- * acquired at this point. Any other application thread or asynchronous
- * progress execution resource must also acquire this global lock and will
- * block until the global lock is cycled or released.
- *
- * Because only one thread will enter this code at any time, including any
- * async progress threads if async progress is enabled, it is unneccesary
- * to acquire any context locks before the context advance operation.
- *
- * NOTE: The 'NULL' progress function configuation for async progress is not
- * valid in the 'global' mpich lock mode. See discussion above for more
- * information.
- *
- * NOTE: There is a simplifying assertion for the "global" mpich lock mode
- * that only a single context is supported. See discussion in above for
- * more information.
- */
- rc = PAMI_Context_advance(MPIDI_Context[0], 1);
- MPID_assert( (rc == PAMI_SUCCESS) || (rc == PAMI_EAGAIN) );
-#ifdef __PE__
- if (rc == PAMI_EAGAIN) {
- MPIU_THREAD_CS_SCHED_YIELD(ALLFUNC,); /* sync, release(0), yield, acquire(0) */
- } else
-#endif
- MPIU_THREAD_CS_YIELD(ALLFUNC,); /* sync, release(0), acquire(0) */
-#endif
-
- return MPI_SUCCESS;
-}
-
-/** \} */
-
-
-#endif
diff --git a/src/mpid/pamid/src/mpid_recvq.c b/src/mpid/pamid/src/mpid_recvq.c
deleted file mode 100644
index b62d8f0..0000000
--- a/src/mpid/pamid/src/mpid_recvq.c
+++ /dev/null
@@ -1,945 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_recvq.c
- * \brief Functions to manage the Receive Queues
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpidimpl.h>
-#include "mpid_recvq.h"
-
-/**
- * \defgroup MPID_RECVQ MPID Receive Queue management
- *
- * Functions to manage the Receive Queues
- */
-
-
-/** \brief Structure to group the common recvq pointers */
-struct MPIDI_Recvq_t MPIDI_Recvq;
-
-#ifdef HAVE_DEBUGGER_SUPPORT
-struct MPID_Request ** const MPID_Recvq_posted_head_ptr =
- &MPIDI_Recvq.posted_head;
-struct MPID_Request ** const MPID_Recvq_unexpected_head_ptr =
- &MPIDI_Recvq.unexpected_head;
-#endif /* HAVE_DEBUGGER_SUPPORT */
-
-
-/**
- * \brief Set up the request queues
- */
-void
-MPIDI_Recvq_init()
-{
- MPIDI_Recvq.posted_head = NULL;
- MPIDI_Recvq.posted_tail = NULL;
- MPIDI_Recvq.unexpected_head = NULL;
- MPIDI_Recvq.unexpected_tail = NULL;
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- MPIDI_Recvq_init_queues();
-#endif
-}
-
-
-/**
- * \brief Tear down the request queues
- */
-void
-MPIDI_Recvq_finalize()
-{
- if(MPIDI_Process.statistics) MPIDI_Recvq_DumpQueues(MPIDI_Process.verbose);
-}
-
-
-/**
- * \brief Find a request in the unexpected queue
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \return 1/0 if the matching UE request was found or not
- */
-int
-MPIDI_Recvq_FU(int source, int tag, int context_id, MPI_Status * status)
-{
- MPID_Request * rreq;
- int found = FALSE;
- void * it;
-#ifdef USE_STATISTICS
- unsigned search_length = 0;
-#endif
-#ifdef OUT_OF_ORDER_HANDLING
- MPIDI_In_cntr_t *in_cntr;
- uint nMsgs=0;
- pami_task_t pami_source;
-#endif
-
- if (tag != MPI_ANY_TAG && source != MPI_ANY_SOURCE)
- {
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
-#ifndef OUT_OF_ORDER_HANDLING
- MPIDI_Recvq_find_in_uexp(source, tag, context_id, &rreq, &it);
-#else
- MPIDI_Recvq_find_in_uexp(source, tag, context_id, -1, &rreq, &it);
-#endif
- if (rreq != NULL) {
- #ifdef OUT_OF_ORDER_HANDLING
- pami_source= MPIDI_Request_getPeerRank_pami(rreq);
- in_cntr=&MPIDI_In_cntr[pami_source];
- nMsgs = in_cntr->nMsgs + 1;
- if( ((int)(nMsgs-MPIDI_Request_getMatchSeq(rreq))) >= 0 )
- {
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs) {
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
- }
- #endif
- found = TRUE;
- if(status != MPI_STATUS_IGNORE)
- *status = (rreq->status);
-#ifdef OUT_OF_ORDER_HANDLING
- }
- else
- {
- MPIDI_Recvq_find_in_uexp(source, tag, context_id, nMsgs, &rreq, &it);
- if (rreq != NULL) {
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
- found = TRUE;
- if(status != MPI_STATUS_IGNORE)
- *status = (rreq->status);
- }
- }
-#endif /* OUT_OF_ORDER_HANDLING */
- }
- }
- else
- {
-#endif /* QUEUE_BINARY_SEARCH_SUPPORT */
- rreq = MPIDI_Recvq.unexpected_head;
- while (rreq != NULL) {
-#ifdef USE_STATISTICS
- ++search_length;
-#endif
- if ( (MPIDI_Request_getMatchCtxt(rreq) == context_id) &&
- (MPIDI_Request_getMatchRank(rreq) == source ) &&
- (MPIDI_Request_getMatchTag(rreq) == tag )
- )
- {
- #ifdef OUT_OF_ORDER_HANDLING
- pami_source= MPIDI_Request_getPeerRank_pami(rreq);
- in_cntr=&MPIDI_In_cntr[pami_source];
- nMsgs = in_cntr->nMsgs + 1;
- if( ((int)(nMsgs-MPIDI_Request_getMatchSeq(rreq))) >= 0 )
- {
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs) {
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
- }
- #endif
- found = TRUE;
- if(status != MPI_STATUS_IGNORE)
- *status = (rreq->status);
- break;
-#ifdef OUT_OF_ORDER_HANDLING
- }
-#endif
- }
- rreq = rreq->mpid.next;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif /* QUEUE_BINARY_SEARCH_SUPPORT */
- }
- else
- {
- MPIDI_Message_match match;
- MPIDI_Message_match mask;
-
- match.context_id = context_id;
- mask.context_id = ~0;
- if (tag == MPI_ANY_TAG)
- {
- match.tag = 0;
- mask.tag = 0;
- }
- else
- {
- match.tag = tag;
- mask.tag = ~0;
- }
- if (source == MPI_ANY_SOURCE)
- {
- match.rank = 0;
- mask.rank = 0;
- }
- else
- {
- match.rank = source;
- mask.rank = ~0;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
-#ifndef OUT_OF_ORDER_HANDLING
- MPIDI_Recvq_find_in_uexp(source, tag, match.context_id, &rreq, &it);
-#else
- MPIDI_Recvq_find_in_uexp(source, tag, match.context_id, -1, &rreq, &it);
-#endif
- if (rreq != NULL) {
-#ifdef OUT_OF_ORDER_HANDLING
- pami_source= MPIDI_Request_getPeerRank_pami(rreq);
- in_cntr=&MPIDI_In_cntr[pami_source];
- nMsgs = in_cntr->nMsgs + 1;
- if(( ( (int)(nMsgs-MPIDI_Request_getMatchSeq(rreq))) >= 0) || (source == MPI_ANY_SOURCE)) {
- if(source == MPI_ANY_SOURCE) {
- if((int) (nMsgs-MPIDI_Request_getMatchSeq(rreq)) < 0 )
- goto NEXT_MSG2;
- }
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs)
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
-#endif
- found = TRUE;
- if(status != MPI_STATUS_IGNORE)
- *status = (rreq->status);
-#ifdef OUT_OF_ORDER_HANDLING
- }
- else
- {
- NEXT_MSG2: MPIDI_Recvq_find_in_uexp(source, tag, match.context_id, nMsgs, &rreq, &it);
- if (rreq != NULL) {
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
- found = TRUE;
- if(status != MPI_STATUS_IGNORE)
- *status = (rreq->status);
- }
- }
-#endif /* OUT_OF_ORDER_HANDLING */
- }
- }
- else
- {
-#endif /* QUEUE_BINARY_SEARCH_SUPPORT */
- rreq = MPIDI_Recvq.unexpected_head;
- while (rreq != NULL) {
-#ifdef USE_STATISTICS
- ++search_length;
-#endif
- if ( ( MPIDI_Request_getMatchCtxt(rreq) == match.context_id) &&
- ( (MPIDI_Request_getMatchRank(rreq) & mask.rank) == match.rank ) &&
- ( (MPIDI_Request_getMatchTag(rreq) & mask.tag ) == match.tag )
- )
- {
-#ifdef OUT_OF_ORDER_HANDLING
- pami_source= MPIDI_Request_getPeerRank_pami(rreq);
- in_cntr=&MPIDI_In_cntr[pami_source];
- nMsgs = in_cntr->nMsgs + 1;
- if(( ( (int)(nMsgs-MPIDI_Request_getMatchSeq(rreq))) >= 0) || (source == MPI_ANY_SOURCE)) {
- if(source == MPI_ANY_SOURCE) {
- if((int) (nMsgs-MPIDI_Request_getMatchSeq(rreq)) < 0 )
- goto NEXT_MSG;
- }
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs)
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
-#endif
- found = TRUE;
- if(status != MPI_STATUS_IGNORE)
- *status = (rreq->status);
- break;
-#ifdef OUT_OF_ORDER_HANDLING
- }
-#endif
- }
- NEXT_MSG:
- rreq = rreq->mpid.next;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
- }
-
-#ifdef USE_STATISTICS
- MPIDI_Statistics_time(MPIDI_Statistics.recvq.unexpected_search, search_length);
-#endif
-
- return found;
-}
-
-
-/**
- * \brief Find a request in the unexpected queue and dequeue it
- * \param[in] req Find by address of request object on sender
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \return The matching UE request or NULL
- */
-MPID_Request *
-MPIDI_Recvq_FDUR(MPI_Request req, int source, int tag, int context_id)
-{
- MPID_Request * prev_rreq = NULL; /* previous request in queue */
- MPID_Request * cur_rreq = NULL; /* current request in queue */
- MPID_Request * matching_cur_rreq = NULL; /* matching request in queue */
- MPID_Request * matching_prev_rreq = NULL; /* previous in queue to match */
- void * it = NULL;
-#ifdef USE_STATISTICS
- unsigned search_length = 0;
-#endif
-
- /* ----------------------- */
- /* first we do the finding */
- /* ----------------------- */
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
-#ifndef OUT_OF_ORDER_HANDLING
- MPIDI_Recvq_find_in_uexp(source, tag, context_id, &cur_rreq, &it);
-#else
- /* Passing -1 for seqno because I don't care about it here */
- MPIDI_Recvq_find_in_uexp(source, tag, context_id, -1, &cur_rreq, &it);
-#endif
- if (cur_rreq != NULL) {
- if (MPIDI_Request_getPeerRequestH(cur_rreq) == req)
- {
- matching_prev_rreq = prev_rreq;
- matching_cur_rreq = cur_rreq;
- }
- }
- }
- else
- {
-#endif
- cur_rreq = MPIDI_Recvq.unexpected_head;
- while (cur_rreq != NULL) {
-#ifdef USE_STATISTICS
- ++search_length;
-#endif
- if (MPIDI_Request_getPeerRequestH(cur_rreq) == req &&
- MPIDI_Request_getMatchCtxt(cur_rreq) == context_id &&
- MPIDI_Request_getMatchRank(cur_rreq) == source &&
- MPIDI_Request_getMatchTag(cur_rreq) == tag)
- {
- matching_prev_rreq = prev_rreq;
- matching_cur_rreq = cur_rreq;
- break;
- }
- prev_rreq = cur_rreq;
- cur_rreq = cur_rreq->mpid.next;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
-
- /* ----------------------- */
- /* found nothing; return */
- /* ----------------------- */
- if (matching_cur_rreq == NULL)
- goto fn_exit;
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
-#ifndef OUT_OF_ORDER_HANDLING
- MPIDI_Recvq_remove_uexp(source, tag, context_id, it);
-#else
- MPIDI_Recvq_remove_uexp(source, tag, context_id, MPIDI_Request_getMatchSeq(cur_rreq),it);
-#endif
- }
- else
-#endif
- MPIDI_Recvq_remove(MPIDI_Recvq.unexpected, matching_cur_rreq, matching_prev_rreq);
-
- fn_exit:
-#ifdef USE_STATISTICS
- MPIDI_Statistics_time(MPIDI_Statistics.recvq.unexpected_search, search_length);
-#endif
-
- return matching_cur_rreq;
-}
-
-
-/**
- * \brief Out of band part of find a request in the unexpected queue and dequeue it, or allocate a new request and enqueue it in the posted queue
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \param[out] foundp TRUE iff the request was found
- * \return The matching UE request or the new posted request
- */
-#ifndef OUT_OF_ORDER_HANDLING
-MPID_Request *
-MPIDI_Recvq_FDU(int source, int tag, int context_id, int * foundp)
-#else
-MPID_Request *
-MPIDI_Recvq_FDU(int source, pami_task_t pami_source, int tag, int context_id, int * foundp)
-#endif
-{
- int found = FALSE;
- MPID_Request * rreq = NULL;
- MPID_Request * prev_rreq;
- void * it;
-#ifdef USE_STATISTICS
- unsigned search_length = 0;
-#endif
-#ifdef OUT_OF_ORDER_HANDLING
- MPIDI_In_cntr_t *in_cntr;
- uint nMsgs=0;
-
- if(pami_source != MPI_ANY_SOURCE) {
- in_cntr=&MPIDI_In_cntr[pami_source];
- nMsgs = in_cntr->nMsgs + 1;
- }
-#endif
-
- //This function is typically called when there are unexp recvs
- if (tag != MPI_ANY_TAG && source != MPI_ANY_SOURCE)
- {
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
-#ifdef OUT_OF_ORDER_HANDLING
- MPIDI_Recvq_find_in_uexp(source, tag, context_id, nMsgs, &rreq, &it);
-#else
- MPIDI_Recvq_find_in_uexp(source, tag, context_id, &rreq, &it);
-#endif
- if (rreq != NULL) {
-#ifdef OUT_OF_ORDER_HANDLING
- if(rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs) {
- in_cntr->nMsgs=nMsgs;
- }
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
- MPIDI_Recvq_remove_uexp(source, tag, context_id, MPIDI_Request_getMatchSeq(rreq),it);
-#else
- MPIDI_Recvq_remove_uexp(source, tag, context_id, it);
-#endif
- found = TRUE;
-#ifdef MPIDI_TRACE
- MPIDI_Trace_buf[(rreq->mpid.partner_id)].R[(rreq->mpid.idx)].matchedInUQ2=1;
-#endif
- }
- }
- else
- {
-#endif
- prev_rreq = NULL;
- rreq = MPIDI_Recvq.unexpected_head;
- while (rreq != NULL) {
-#ifdef USE_STATISTICS
- ++search_length;
-#endif
-#ifdef OUT_OF_ORDER_HANDLING
- if( ((int)(nMsgs-MPIDI_Request_getMatchSeq(rreq))) >= 0 ) {
-#endif
- if ( (MPIDI_Request_getMatchCtxt(rreq) == context_id) &&
- (MPIDI_Request_getMatchRank(rreq) == source ) &&
- (MPIDI_Request_getMatchTag(rreq) == tag )
- )
- {
-#ifdef OUT_OF_ORDER_HANDLING
- if(rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs) {
- in_cntr->nMsgs=nMsgs;
- }
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
-#endif
- MPIDI_Recvq_remove(MPIDI_Recvq.unexpected, rreq, prev_rreq);
- found = TRUE;
- TRACE_SET_R_BIT((rreq->mpid.partner_id),(rreq->mpid.idx),fl.f.matchedInUQ2);
- goto fn_exit;
- }
-#ifdef OUT_OF_ORDER_HANDLING
- }
-#endif
-
- prev_rreq = rreq;
- rreq = rreq->mpid.next;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
- }
- else
- {
- MPIDI_Message_match match;
- MPIDI_Message_match mask;
-
- match.context_id = context_id;
- mask.context_id = ~0;
- if (tag == MPI_ANY_TAG)
- {
- match.tag = 0;
- mask.tag = 0;
- }
- else
- {
- match.tag = tag;
- mask.tag = ~0;
- }
- if (source == MPI_ANY_SOURCE)
- {
- match.rank = 0;
- mask.rank = 0;
- }
- else
- {
- match.rank = source;
- mask.rank = ~0;
- }
-
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
-#ifndef OUT_OF_ORDER_HANDLING
- MPIDI_Recvq_find_in_uexp(source, tag, match.context_id, &rreq, &it);
-#else
- MPIDI_Recvq_find_in_uexp(source, tag, match.context_id, -1, &rreq, &it);
-#endif
- if (rreq != NULL) {
-#ifdef OUT_OF_ORDER_HANDLING
- if(( ( (int)(nMsgs-MPIDI_Request_getMatchSeq(rreq))) >= 0) || (source == MPI_ANY_SOURCE)) {
- if(source == MPI_ANY_SOURCE) {
- in_cntr = &MPIDI_In_cntr[MPIDI_Request_getPeerRank_pami(rreq)];
- nMsgs = in_cntr->nMsgs+1;
- if((int) (nMsgs-MPIDI_Request_getMatchSeq(rreq)) < 0 )
- goto NEXT_MSG2;
- }
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs)
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
- MPIDI_Recvq_remove_uexp(MPIDI_Request_getMatchRank(rreq), MPIDI_Request_getMatchTag(rreq), match.context_id, MPIDI_Request_getMatchSeq(rreq),it);
-#else /* OUT_OF_ORDER_HANDLING */
- MPIDI_Recvq_remove_uexp(MPIDI_Request_getMatchRank(rreq), MPIDI_Request_getMatchTag(rreq), match.context_id, it);
-#endif/* OUT_OF_ORDER_HANDLING */
- found = TRUE;
- goto fn_exit;
-#ifdef OUT_OF_ORDER_HANDLING
- }
- NEXT_MSG2:
- MPIDI_Recvq_find_in_uexp(source, tag, match.context_id, nMsgs, &rreq, &it);
- if (rreq != NULL) {
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs)
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
- MPIDI_Recvq_remove_uexp(MPIDI_Request_getMatchRank(rreq), MPIDI_Request_getMatchTag(rreq), match.context_id, MPIDI_Request_getMatchSeq(rreq),it);
- }
-#endif /* OUT_OF_ORDER_HANDLING */
-
- }
- }
- else
- {
-#endif
- prev_rreq = NULL;
- rreq = MPIDI_Recvq.unexpected_head;
- while (rreq != NULL) {
-#ifdef USE_STATISTICS
- ++search_length;
-#endif
-#ifdef OUT_OF_ORDER_HANDLING
- if(( ( (int)(nMsgs-MPIDI_Request_getMatchSeq(rreq))) >= 0) || (source == MPI_ANY_SOURCE)) {
-#endif
- if ( ( MPIDI_Request_getMatchCtxt(rreq) == match.context_id) &&
- ( (MPIDI_Request_getMatchRank(rreq) & mask.rank) == match.rank ) &&
- ( (MPIDI_Request_getMatchTag(rreq) & mask.tag ) == match.tag )
- )
- {
-#ifdef OUT_OF_ORDER_HANDLING
- if(source == MPI_ANY_SOURCE) {
- in_cntr = &MPIDI_In_cntr[MPIDI_Request_getPeerRank_pami(rreq)];
- nMsgs = in_cntr->nMsgs+1;
- if((int) (nMsgs-MPIDI_Request_getMatchSeq(rreq)) < 0 )
- goto NEXT_MSG;
- }
- if (rreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- if (MPIDI_Request_getMatchSeq(rreq) == nMsgs)
- in_cntr->nMsgs=nMsgs;
- MPIDI_Recvq_remove_req_from_ool(rreq,in_cntr);
- }
-#endif
- MPIDI_Recvq_remove(MPIDI_Recvq.unexpected, rreq, prev_rreq);
- found = TRUE;
- goto fn_exit;
- }
-#ifdef OUT_OF_ORDER_HANDLING
- }
- NEXT_MSG:
-#endif
- prev_rreq = rreq;
- rreq = rreq->mpid.next;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
- }
-
- fn_exit:
-#ifdef USE_STATISTICS
- MPIDI_Statistics_time(MPIDI_Statistics.recvq.unexpected_search, search_length);
-#endif
-
- *foundp = found;
- return rreq;
-}
-
-
-/**
- * \brief Find a request in the posted queue and dequeue it
- * \param[in] req Find by address of request object on sender
- * \return The matching posted request or NULL
- */
-int
-MPIDI_Recvq_FDPR(MPID_Request * req)
-{
- MPID_Request * cur_rreq = NULL;
- MPID_Request * prev_rreq = NULL;
- int found = FALSE;
-#ifdef USE_STATISTICS
- unsigned search_length = 0;
-#endif
-
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- void * it;
- if(MPIDI_Process.queue_binary_search_support_on)
- {
- MPIDI_Recvq_find_in_post(MPIDI_Request_getMatchRank(req), MPIDI_Request_getMatchTag(req), MPIDI_Request_getMatchCtxt(req), &cur_rreq, &it);
- if (cur_rreq != NULL) {
- if (cur_rreq == req)
- {
- MPIDI_Recvq_remove_post(MPIDI_Request_getMatchRank(req), MPIDI_Request_getMatchTag(req), MPIDI_Request_getMatchCtxt(req),it);
- found = TRUE;
- }
- }
- }
- else
- {
-#endif /* QUEUE_BINARY_SEARCH_SUPPORT */
- cur_rreq = MPIDI_Recvq.posted_head;
-
- while (cur_rreq != NULL) {
-#ifdef USE_STATISTICS
- ++search_length;
-#endif
- if (cur_rreq == req)
- {
- MPIDI_Recvq_remove(MPIDI_Recvq.posted, cur_rreq, prev_rreq);
- found = TRUE;
- break;
- }
-
- prev_rreq = cur_rreq;
- cur_rreq = cur_rreq->mpid.next;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
-#ifdef USE_STATISTICS
- MPIDI_Statistics_time(MPIDI_Statistics.recvq.posted_search, search_length);
-#endif
-
- return found;
-}
-
-
-/**
- * \brief Find a request in the posted queue and dequeue it, or allocate a new request and enqueue it in the unexpected queue
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \param[out] foundp TRUE iff the request was found
- * \return The matching posted request or the new UE request
- */
-#ifndef OUT_OF_ORDER_HANDLING
-MPID_Request *
-MPIDI_Recvq_FDP_or_AEU(MPID_Request *newreq, int source, int tag, int context_id, int * foundp)
-#else
-MPID_Request *
-MPIDI_Recvq_FDP_or_AEU(MPID_Request *newreq, int source, pami_task_t pami_source, int tag, int context_id, int msg_seqno, int * foundp)
-#endif
-{
- MPID_Request * rreq;
- int found = FALSE;
-
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDP(source, tag, context_id);
-#else
- rreq = MPIDI_Recvq_FDP(source, pami_source, tag, context_id, msg_seqno);
-#endif
-
- if (rreq != NULL) {
- found = TRUE;
- } else {
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_AEU(newreq, source, tag, context_id);
-#else
- rreq = MPIDI_Recvq_AEU(newreq, source, pami_source, tag, context_id, msg_seqno);
-#endif
- }
- *foundp = found;
- return rreq;
-}
-
-
-/**
- * \brief Allocate a new request and enqueue it in the unexpected queue
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \return The matching posted request or the new UE request
- */
-#ifndef OUT_OF_ORDER_HANDLING
-MPID_Request *
-MPIDI_Recvq_AEU(MPID_Request *newreq, int source, int tag, int context_id)
-#else
-MPID_Request *
-MPIDI_Recvq_AEU(MPID_Request *newreq, int source, pami_task_t pami_source, int tag, int context_id, int msg_seqno)
-#endif
-{
- /* A matching request was not found in the posted queue, so we
- need to allocate a new request and add it to the unexpected
- queue */
- MPID_Request *rreq;
- rreq = newreq;
- rreq->kind = MPID_REQUEST_RECV;
- TRACE_MEMSET_R(pami_source,msg_seqno,recv_status);
- TRACE_SET_REQ_VAL(rreq->mpid.envelope.msginfo.MPIseqno,-1);
- TRACE_SET_REQ_VAL(rreq->mpid.envelope.length,-1);
- TRACE_SET_REQ_VAL(rreq->mpid.envelope.data,(void *) 0);
-#ifndef OUT_OF_ORDER_HANDLING
- MPIDI_Request_setMatch(rreq, tag, source, context_id);
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- MPIDI_Recvq_insert_uexp((void*)rreq, source, tag, context_id);
- else
-#endif
- MPIDI_Recvq_append(MPIDI_Recvq.unexpected, rreq);
-#else /* OUT_OF_ORDER_HANDLING */
- MPID_Request *q;
- MPIDI_In_cntr_t *in_cntr;
- int insert, i;
-
- in_cntr = &MPIDI_In_cntr[pami_source];
- MPIDI_Request_setMatch(rreq, tag, source, context_id); /* mpi rank needed */
- MPIDI_Request_setPeerRank_pami(rreq, pami_source);
- MPIDI_Request_setPeerRank_comm(rreq, source);
- MPIDI_Request_setMatchSeq(rreq, msg_seqno);
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
- MPIDI_Recvq_insert_uexp((void*)rreq, source, tag, context_id, msg_seqno);
- }
- else
- {
-#endif
- if (!in_cntr->n_OutOfOrderMsgs) {
- MPIDI_Recvq_append(MPIDI_Recvq.unexpected, rreq);
- } else {
- q=in_cntr->OutOfOrderList;
- insert=0;
- for (i=1; i<=in_cntr->n_OutOfOrderMsgs; i++) {
- if ( context_id == MPIDI_Request_getMatchCtxt(q)) {
- if (((int)(msg_seqno - MPIDI_Request_getMatchSeq(q))) < 0) {
- MPIDI_Recvq_insert(MPIDI_Recvq.unexpected, q, rreq);
- insert=1;
- break;
- }
- }
- q=q->mpid.nextR;
- }
- if (!insert) {
- MPIDI_Recvq_append(MPIDI_Recvq.unexpected, rreq);
- }
- }
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),req,rreq);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),msgid,msg_seqno);
- TRACE_SET_R_BIT(pami_source,(msg_seqno & SEQMASK),fl.f.ool);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),rtag,tag);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),rctx,context_id);
- TRACE_SET_REQ_VAL(rreq->mpid.idx,(msg_seqno & SEQMASK));
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),rsource,pami_source);
- TRACE_SET_REQ_VAL(rreq->mpid.partner_id,pami_source);
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
-
- if (((int)(in_cntr->nMsgs - msg_seqno)) < 0) { /* seqno > nMsgs, out of order */
- MPIDI_Recvq_enqueue_ool(pami_source,rreq);
- }
-#endif/* OUT_OF_ORDER_HANDLING */
-
- return rreq;
-}
-
-
-/**
- * \brief Dump the queues
- */
-void
-MPIDI_Recvq_DumpQueues(int verbose)
-{
- if(verbose < MPIDI_VERBOSE_SUMMARY_ALL)
- return;
-
- MPID_Request * rreq = MPIDI_Recvq.posted_head;
- unsigned i=0, numposted=0, numue=0;
- unsigned postedbytes=0, uebytes=0;
-
- if(verbose >= MPIDI_VERBOSE_DETAILS_ALL)
- fprintf(stderr,"Posted Queue:\n-------------\n");
- while (rreq != NULL) {
- if(verbose >= MPIDI_VERBOSE_DETAILS_ALL)
- fprintf(stderr, "P %d: MPItag=%d MPIrank=%d ctxt=%d count=%d\n",
- i++,
- MPIDI_Request_getMatchTag(rreq),
- MPIDI_Request_getMatchRank(rreq),
- MPIDI_Request_getMatchCtxt(rreq),
- rreq->mpid.userbufcount
- );
- numposted++;
- postedbytes+=rreq->mpid.userbufcount;
- rreq = rreq->mpid.next;
- }
- fprintf(stderr, "Posted Requests %d, Total Mem: %d bytes\n",
- numposted, postedbytes);
-
-
- i=0;
- rreq = MPIDI_Recvq.unexpected_head;
- if(verbose >= MPIDI_VERBOSE_DETAILS_ALL)
- fprintf(stderr, "Unexpected Queue:\n-----------------\n");
- while (rreq != NULL) {
- if(verbose >= MPIDI_VERBOSE_DETAILS_ALL)
-#ifndef OUT_OF_ORDER_HANDLING
- fprintf(stderr, "UE %d: MPItag=%d MPIrank=%d ctxt=%d uebuf=%p uebuflen=%u\n",
- i++,
- MPIDI_Request_getMatchTag(rreq),
- MPIDI_Request_getMatchRank(rreq),
- MPIDI_Request_getMatchCtxt(rreq),
- rreq->mpid.uebuf,
- rreq->mpid.uebuflen);
-#else
- fprintf(stderr, "UE %d: MPItag=%d MPIrank=%d pami_task_id=%d MPIseq=%d ctxt=%d uebuf=%p uebuflen=%u\n",
- i++,
- MPIDI_Request_getMatchTag(rreq),
- MPIDI_Request_getMatchRank(rreq),
- MPIDI_Request_getPeerRank_pami(rreq),
- MPIDI_Request_getMatchSeq(rreq),
- MPIDI_Request_getMatchCtxt(rreq),
- rreq->mpid.uebuf,
- rreq->mpid.uebuflen);
-#endif
- numue++;
- uebytes+=rreq->mpid.uebuflen;
- rreq = rreq->mpid.next;
- }
- fprintf(stderr, "Unexpected Requests %d, Total Mem: %d bytes\n",
- numue, uebytes);
-}
-
-
-#ifdef OUT_OF_ORDER_HANDLING
-/**
- * Insert a request in the OutOfOrderList, make sure this list is
- * arranged in the ascending order.
- */
-void MPIDI_Recvq_enqueue_ool(pami_task_t src, MPID_Request *req)
-{
- MPID_Request *q;
- void *head;
- int insert,i;
- MPIDI_In_cntr_t *in_cntr;
-
- in_cntr=&MPIDI_In_cntr[src];
- if (in_cntr->n_OutOfOrderMsgs != 0) {
- head=in_cntr->OutOfOrderList;
- q=in_cntr->OutOfOrderList;
- insert=0;
- MPID_assert(q->mpid.nextR != NULL);
- while(q->mpid.nextR != head) {
- if (((int)(MPIDI_Request_getMatchSeq(q) - MPIDI_Request_getMatchSeq(req))) > 0) {
- insert=1;
- break;
- }
- q=q->mpid.nextR;
- }
- if (insert) {
- MPIDI_Recvq_insert_ool(q,req);
- if (q == head) { /* 1st element in the list */
- in_cntr->OutOfOrderList=req;
- }
- } else {
- if (((int)(MPIDI_Request_getMatchSeq(q) - MPIDI_Request_getMatchSeq(req))) > 0) {
- MPIDI_Recvq_insert_ool(q,req);
- if (q == head) { /* 1st element in the list */
- in_cntr->OutOfOrderList=req;
- }
- } else {
- MPIDI_Recvq_insert_ool((MPID_Request *)q->mpid.nextR,req);
- }
- }
- } else { /* empty list */
- in_cntr->OutOfOrderList=req;
- req->mpid.prevR=req;
- req->mpid.nextR=req;
- }
- in_cntr->n_OutOfOrderMsgs++;
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->unorderedMsgs);
-#endif
-} /* void MPIDI_Recvq_insert_ool(pami_task_t src, MPID_Request *N) */
-
-
-/**
- * MPIDI_Recvq_insert_ool: place e between q and q->prevR
- *
- */
-void MPIDI_Recvq_insert_ool(MPID_Request *q,MPID_Request *e)
-{
- (e)->mpid.prevR = (q)->mpid.prevR;
- ((MPID_Request *)((q)->mpid.prevR))->mpid.nextR = (e);
- (e)->mpid.nextR = (q);
- (q)->mpid.prevR = (e);
-}
-#endif
diff --git a/src/mpid/pamid/src/mpid_recvq.h b/src/mpid/pamid/src/mpid_recvq.h
deleted file mode 100644
index 739bc7f..0000000
--- a/src/mpid/pamid/src/mpid_recvq.h
+++ /dev/null
@@ -1,425 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_recvq.h
- * \brief Accessors and actors for MPID Requests
- */
-#ifndef __src_pt2pt_mpidi_recvq_h__
-#define __src_pt2pt_mpidi_recvq_h__
-
-
-struct MPIDI_Recvq_t
-{
- struct MPID_Request * posted_head; /**< \brief The Head of the Posted queue */
- struct MPID_Request * posted_tail; /**< \brief The Tail of the Posted queue */
- struct MPID_Request * unexpected_head; /**< \brief The Head of the Unexpected queue */
- struct MPID_Request * unexpected_tail; /**< \brief The Tail of the Unexpected queue */
-};
-extern struct MPIDI_Recvq_t MPIDI_Recvq;
-
-
-#ifndef OUT_OF_ORDER_HANDLING
-#define MPIDI_Recvq_append(__Q, __req) \
-({ \
- /* ---------------------------------------------- */ \
- /* The tail request should point to the new one */ \
- /* ---------------------------------------------- */ \
- if (__Q ## _tail != NULL) \
- __Q ## _tail->mpid.next = __req; \
- else \
- __Q ## _head = __req; \
- /* ------------------------------------------ */ \
- /* The tail should point to the new request */ \
- /* ------------------------------------------ */ \
- __Q ## _tail = __req; \
-})
-#else
-#define MPIDI_Recvq_append(__Q, __req) \
-({ \
- /* ---------------------------------------------- */ \
- /* The tail request should point to the new one */ \
- /* ---------------------------------------------- */ \
- if (__Q ## _tail != NULL) { \
- __Q ## _tail->mpid.next = __req; \
- __req->mpid.prev = __Q ## _tail; \
- } \
- else { \
- __Q ## _head = __req; \
- __req->mpid.prev = NULL; \
- } \
- /* ------------------------------------------ */ \
- /* The tail should point to the new request */ \
- /* ------------------------------------------ */ \
- __Q ## _tail = __req; \
-})
-#endif
-
-
-#ifndef OUT_OF_ORDER_HANDLING
-#define MPIDI_Recvq_remove(__Q, __req, __prev) \
-({ \
- /* --------------------------------------------- */ \
- /* Patch the next pointers to skip the request */ \
- /* --------------------------------------------- */ \
- if (__prev != NULL) \
- __prev->mpid.next = __req->mpid.next; \
- else \
- __Q ## _head = __req->mpid.next; \
- /* ------------------------------------------- */ \
- /* Set tail pointer if removing the last one */ \
- /* ------------------------------------------- */ \
- if (__req->mpid.next == NULL) \
- __Q ## _tail = __prev; \
-})
-#else
-#define MPIDI_Recvq_remove(__Q, __req, __prev) \
-({ \
- /* --------------------------------------------- */ \
- /* Patch the next pointers to skip the request */ \
- /* --------------------------------------------- */ \
- if (__prev != NULL) { \
- __prev->mpid.next = __req->mpid.next; \
- } \
- else \
- __Q ## _head = __req->mpid.next; \
- /* ------------------------------------------- */ \
- /* Set tail pointer if removing the last one */ \
- /* ------------------------------------------- */ \
- if (__req->mpid.next == NULL) \
- __Q ## _tail = __prev; \
- else \
- (__req->mpid.next)->mpid.prev = __prev; \
-})
-#endif
-
-
-/**
- * \brief A thread-safe version of MPIDI_Recvq_FU
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \return 1/0 if the matching UE request was found or not
- */
-static inline int
-MPIDI_Recvq_FU_r(int source, int tag, int context, MPI_Status * status)
-{
- int rc = FALSE;
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
- if (likely(!MPIDI_Recvq_empty_uexp()))
- {
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- rc = MPIDI_Recvq_FU(source, tag, context, status);
- MPIU_THREAD_CS_EXIT(MSGQUEUE, 0);
- }
- }
- else
- {
-#endif
- if (likely(MPIDI_Recvq.unexpected_head != NULL))
- {
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- rc = MPIDI_Recvq_FU(source, tag, context, status);
- MPIU_THREAD_CS_EXIT(MSGQUEUE, 0);
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
- return rc;
-}
-
-
-/**
- * \brief Find a request in the unexpected queue and dequeue it, or allocate a new request and enqueue it in the posted queue
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \param[out] foundp TRUE iff the request was found
- * \return The matching UE request or the new posted request
- */
-#ifndef OUT_OF_ORDER_HANDLING
-static inline MPID_Request *
-MPIDI_Recvq_FDU_or_AEP(MPID_Request *newreq, int source, int tag, int context_id, int * foundp)
-#else
-static inline MPID_Request *
-MPIDI_Recvq_FDU_or_AEP(MPID_Request *newreq, int source, pami_task_t pami_source, int tag, int context_id, int * foundp)
-#endif
-{
- MPID_Request * rreq = NULL;
- /* We have unexpected messages, so search unexpected queue */
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
- if (unlikely(!MPIDI_Recvq_empty_uexp()))
- {
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDU(source, tag, context_id, foundp);
-#else
- rreq = MPIDI_Recvq_FDU(source, pami_source, tag, context_id, foundp);
-#endif
- if (*foundp == TRUE)
- return rreq;
-#if (MPIDI_STATISTICS)
- else {
- MPID_NSTAT(mpid_statp->lateArrivals);
- }
-#endif
- }
- }
- else
- {
-#endif
- if (unlikely(MPIDI_Recvq.unexpected_head != NULL)) {
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDU(source, tag, context_id, foundp);
-#else
- rreq = MPIDI_Recvq_FDU(source, pami_source, tag, context_id, foundp);
-#endif
- if (*foundp == TRUE)
- return rreq;
-#if (MPIDI_STATISTICS)
- else {
- MPID_NSTAT(mpid_statp->lateArrivals);
- }
-#endif
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
- /* A matching request was not found in the unexpected queue,
- so we need to allocate a new request and add it to the
- posted queue */
- rreq = newreq;
- TRACE_SET_REQ_VAL(rreq->mpid.envelope.msginfo.MPIseqno,-1);
- TRACE_SET_REQ_VAL(rreq->mpid.envelope.length,-1);
- TRACE_SET_REQ_VAL(rreq->mpid.envelope.data,(void *) 0);
- rreq->kind = MPID_REQUEST_RECV;
- MPIDI_Request_setMatch(rreq, tag, source, context_id);
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- MPIDI_Recvq_insert_post(rreq, source, tag, context_id);
- else
-#endif
- MPIDI_Recvq_append(MPIDI_Recvq.posted, rreq);
- *foundp = FALSE;
-
- return rreq;
-}
-
-#if TOKEN_FLOW_CONTROL
-typedef struct MPIDI_Token_cntr {
- uint16_t unmatched; /* no. of unmatched EA messages */
- uint16_t rettoks; /* no. of tokens to be returned */
- int tokens; /* no. of tokens available-pairwise */
- int n_tokenStarved; /* no. of times token starvation occured */
-} MPIDI_Token_cntr_t;
-
-MPIDI_Token_cntr_t *MPIDI_Token_cntr;
-#endif
-
-#ifdef OUT_OF_ORDER_HANDLING
-
-/**
- * data structures that tracks pair-wise in-coming communication.
- */
-typedef struct MPIDI_In_cntr {
- uint n_OutOfOrderMsgs:16; /* the number of out-of-order messages received */
- uint nMsgs; /* the number of received messages */
- MPID_Request *OutOfOrderList; /* link list of out-of-order messages */
-} MPIDI_In_cntr_t;
-
-/**
- * data structures that tracks pair-wise Out-going communication.
- */
-typedef struct MPIDI_Out_cntr {
- uint unmatched:16; /* the number of un-matched messages */
- uint nMsgs; /* the number of out-going messages */
-} MPIDI_Out_cntr_t;
-
-/* global data to keep track of pair-wise communication, storage malloced
-during initialization time */
-MPIDI_In_cntr_t *MPIDI_In_cntr;
-MPIDI_Out_cntr_t *MPIDI_Out_cntr;
-
-#endif
-
-
-/**
- * \brief Find a request in the posted queue and dequeue it
- * \param[in] source Find by Sender
- * \param[in] tag Find by Tag
- * \param[in] context_id Find by Context ID (communicator)
- * \return The matching posted request or the new UE request
- */
-#ifndef OUT_OF_ORDER_HANDLING
-static inline MPID_Request *
-MPIDI_Recvq_FDP(size_t source, size_t tag, size_t context_id)
-#else
-static inline MPID_Request *
-MPIDI_Recvq_FDP(size_t source, pami_task_t pami_source, int tag, int context_id, int msg_seqno)
-#endif
-{
- MPID_Request * rreq;
- MPID_Request * prev_rreq = NULL;
-#ifdef USE_STATISTICS
- unsigned search_length = 0;
-#endif
- TRACE_MEMSET_R(pami_source,msg_seqno,recv_status);
-
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- void * it;
- if(MPIDI_Process.queue_binary_search_support_on)
- {
- MPIDI_Recvq_find_in_post(source, tag, context_id, &rreq, &it);
- if(rreq == NULL)
- {
- MPIDI_Recvq_find_in_post(source, MPI_ANY_TAG, context_id, &rreq, &it);
- if(rreq == NULL)
- {
- MPIDI_Recvq_find_in_post(MPI_ANY_SOURCE, tag, context_id, &rreq, &it);
- if(rreq == NULL)
- MPIDI_Recvq_find_in_post(MPI_ANY_SOURCE, MPI_ANY_TAG, context_id, &rreq, &it);
- }
- }
- }
- else
-#endif
- rreq = MPIDI_Recvq.posted_head;
-
-#ifdef OUT_OF_ORDER_HANDLING
- MPIDI_In_cntr_t *in_cntr = &MPIDI_In_cntr[pami_source];
- int nMsgs=(in_cntr->nMsgs+1);
-
- if(msg_seqno == nMsgs) {
- in_cntr->nMsgs = msg_seqno;
- }
-
- if( ((int)(in_cntr->nMsgs - msg_seqno)) >= 0) {
-#endif
- while (rreq != NULL) {
-#ifdef USE_STATISTICS
- ++search_length;
-#endif
-
- int match_src = MPIDI_Request_getMatchRank(rreq);
- int match_tag = MPIDI_Request_getMatchTag(rreq);
- int match_ctx = MPIDI_Request_getMatchCtxt(rreq);
-
- int flag0 = (source == match_src);
- flag0 |= (match_src == MPI_ANY_SOURCE);
- int flag1 = (context_id == match_ctx);
- int flag2 = (tag == match_tag);
- flag2 |= (match_tag == MPI_ANY_TAG);
- int flag = flag0 & flag1 & flag2;
-
-#if 0
- if ((MPIDI_Request_getMatchRank(rreq)==source || MPIDI_Request_getMatchRank(rreq)==MPI_ANY_SOURCE) &&
- (MPIDI_Request_getMatchCtxt(rreq)==context_id) &&
- (MPIDI_Request_getMatchTag(rreq) == tag || MPIDI_Request_getMatchTag(rreq) == MPI_ANY_TAG)
- )
-#else
- if (flag)
-#endif
- {
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),req,rreq);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),msgid,msg_seqno);
- TRACE_SET_R_BIT(pami_source,(msg_seqno & SEQMASK),fl.f.posted);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),bufadd,rreq->mpid.userbuf);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),len,rreq->mpid.envelope.length);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),rtag,tag);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),rctx,context_id);
- TRACE_SET_R_VAL(pami_source,(msg_seqno & SEQMASK),rsource,pami_source);
- TRACE_SET_R_BIT(pami_source,(msg_seqno & SEQMASK),fl.f.matchedInHH);
- TRACE_SET_REQ_VAL(rreq->mpid.idx,(msg_seqno & SEQMASK));
- TRACE_SET_REQ_VAL(rreq->mpid.partner_id,pami_source);
-#ifdef OUT_OF_ORDER_HANDLING
- MPIDI_Request_setPeerRank_pami(rreq, pami_source);
-#endif
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- MPIDI_Recvq_remove_post(match_src, match_tag, match_ctx, it);
- else
-#endif
- MPIDI_Recvq_remove(MPIDI_Recvq.posted, rreq, prev_rreq);
-#ifdef USE_STATISTICS
- MPIDI_Statistics_time(MPIDI_Statistics.recvq.unexpected_search, search_length);
-#endif
- return rreq;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- break;
- else
- {
-#endif
- prev_rreq = rreq;
- rreq = rreq->mpid.next;
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
- }
-#ifdef OUT_OF_ORDER_HANDLING
- }
-#endif
-
-#ifdef USE_STATISTICS
- MPIDI_Statistics_time(MPIDI_Statistics.recvq.unexpected_search, search_length);
-#endif
- return NULL;
-}
-
-
-#ifdef OUT_OF_ORDER_HANDLING
-/**
- * insert a request _req2 before _req1
- */
-#define MPIDI_Recvq_insert(__Q, __req1, __req2) \
-({ \
- (__req2)->mpid.next = __req1; \
- if((__req1)->mpid.prev != NULL) \
- ((__req1)->mpid.prev)->mpid.next = (__req2); \
- else \
- __Q ## _head = __req2; \
- (__req2)->mpid.prev = (__req1)->mpid.prev; \
- (__req1)->mpid.prev = (__req2); \
-})
-
-/**
- * remove a request from out of order list
- */
-#define MPIDI_Recvq_remove_req_from_ool(req,in_cntr) \
-({ \
- in_cntr->n_OutOfOrderMsgs--; \
- if (in_cntr->n_OutOfOrderMsgs == 0) { \
- in_cntr->OutOfOrderList=NULL; \
- req->mpid.nextR=NULL; \
- req->mpid.prevR=NULL; \
- } else if (in_cntr->n_OutOfOrderMsgs > 0) { \
- in_cntr->OutOfOrderList=req->mpid.nextR; \
- /* remove req from out of order list */ \
- ((MPID_Request *)(req)->mpid.prevR)->mpid.nextR = (req)->mpid.nextR; \
- ((MPID_Request *)(req)->mpid.nextR)->mpid.prevR = (req)->mpid.prevR; \
- (req)->mpid.nextR=NULL; \
- (req)->mpid.prevR=NULL; \
- } \
-})
-#endif
-
-
-#endif
diff --git a/src/mpid/pamid/src/mpid_recvq_mmap.cpp b/src/mpid/pamid/src/mpid_recvq_mmap.cpp
deleted file mode 100644
index c565fed..0000000
--- a/src/mpid/pamid/src/mpid_recvq_mmap.cpp
+++ /dev/null
@@ -1,419 +0,0 @@
-#include <map>
-#include <stdio.h>
-#include <cstdlib>
-#include "mpidi_platform.h"
-
-
-extern "C" {
-
-struct MPID_Queue_map_key_t
-{
- int context_id;
- int source;
- int tag;
- inline bool operator< (const MPID_Queue_map_key_t& qmk) const
- {
- if(context_id < qmk.context_id)
- return true;
- else if(context_id == qmk.context_id)
- {
- if(source < qmk.source)
- return true;
- else if(source == qmk.source)
- {
- if(tag < qmk.tag)
- return true;
- else
- return false;
- }
- else
- return false;
- }
- else
- return false;
- }
-};
-
-struct MPID_Queue_map_value_t
-{
- void* rreq;
-#ifdef OUT_OF_ORDER_HANDLING
- int seqno;
-#endif
-};
-
-typedef std::multimap<MPID_Queue_map_key_t,MPID_Queue_map_value_t> MPID_Req_queue_map_t;
-typedef std::multimap<MPID_Queue_map_key_t,MPID_Queue_map_value_t>::iterator MPID_Req_queue_map_iterator_t;
-
-MPID_Req_queue_map_t MPID_Unexp_queue;
-MPID_Req_queue_map_t MPID_Posted_queue;
-
-MPID_Req_queue_map_iterator_t itp;
-MPID_Req_queue_map_iterator_t itu;
-
-void MPIDI_Recvq_init_queues();
-int MPIDI_Recvq_empty_uexp();
-int MPIDI_Recvq_empty_post();
-
-#ifndef OUT_OF_ORDER_HANDLING
-void MPIDI_Recvq_insert_uexp(void * rreq, int source, int tag, int context_id);
-void MPIDI_Recvq_insert_post(void * rreq, int source, int tag, int context_id);
-void MPIDI_Recvq_insrt(MPID_Req_queue_map_t* queue, void * rreq, int source, int tag, int context_id);
-
-void MPIDI_Recvq_remove_uexp(int source, int tag, int context_id, void* it_req);
-void MPIDI_Recvq_remove_post(int source, int tag, int context_id, void* it_req);
-void MPIDI_Recvq_rm(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, void* it_req);
-
-void MPIDI_Recvq_find_in_uexp(int source, int tag, int context_id, void** req, void** it_req);
-void MPIDI_Recvq_find_in_post(int source, int tag, int context_id, void** req, void** it_req);
-void MPIDI_Recvq_find(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, void** req, void** it_req);
-
-#else
-void MPIDI_Recvq_insert_uexp(void * rreq, int source, int tag, int context_id, int seqno);
-void MPIDI_Recvq_insert_post(void * rreq, int source, int tag, int context_id);
-void MPIDI_Recvq_insrt(MPID_Req_queue_map_t* queue, void * rreq, int source, int tag, int context_id, int seqno);
-
-void MPIDI_Recvq_remove_uexp(int source, int tag, int context_id, int seqno, void* it_req);
-void MPIDI_Recvq_remove_uexp_noit(int source, int tag, int context_id, int seqno);
-void MPIDI_Recvq_remove_post(int source, int tag, int context_id, void* it_req);
-void MPIDI_Recvq_rm(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, int seqno, void* it_req);
-
-void MPIDI_Recvq_find_in_uexp(int source, int tag, int context_id, int seqno, void** req, void** it_req);
-void MPIDI_Recvq_find_in_post(int source, int tag, int context_id, void** req, void** it_req);
-void MPIDI_Recvq_find(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, int seqno, void** req, void** it_req);
-
-#endif
-
-
-
-
-void MPIDI_Recvq_init_queues()
-{
- MPID_Unexp_queue.clear();
- MPID_Posted_queue.clear();
-}
-
-int MPIDI_Recvq_empty_uexp()
-{
- return MPID_Unexp_queue.empty();
-}
-
-int MPIDI_Recvq_empty_post()
-{
- return MPID_Posted_queue.empty();
-}
-
-#ifndef OUT_OF_ORDER_HANDLING
-void MPIDI_Recvq_insert_uexp(void * rreq, int source, int tag, int context_id)
-{
- MPIDI_Recvq_insrt(&MPID_Unexp_queue, rreq, source, tag, context_id);
-}
-
-
-void MPIDI_Recvq_insert_post(void * rreq, int source, int tag, int context_id)
-{
- MPIDI_Recvq_insrt(&MPID_Posted_queue, rreq, source, tag, context_id);
-}
-
-
-void MPIDI_Recvq_insrt(MPID_Req_queue_map_t* queue, void * rreq, int source, int tag, int context_id)
-{
- MPID_Queue_map_key_t key;
- MPID_Queue_map_value_t value;
- key.context_id = context_id;
- key.source = source;
- key.tag = tag;
- value.rreq = rreq;
- queue->insert(std::make_pair(key,value));
-}
-
-
-void MPIDI_Recvq_remove_uexp(int source, int tag, int context_id, void* it_req)
-{
- MPIDI_Recvq_rm(&MPID_Unexp_queue, source, tag, context_id, it_req);
-}
-
-
-void MPIDI_Recvq_remove_post(int source, int tag, int context_id, void* it_req)
-{
- MPIDI_Recvq_rm(&MPID_Posted_queue, source, tag, context_id, it_req);
-}
-
-
-void MPIDI_Recvq_rm(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, void* it_req)
-{
- MPID_Req_queue_map_iterator_t it = *((MPID_Req_queue_map_iterator_t*)it_req);
- queue->erase(it);
-}
-
-
-void MPIDI_Recvq_find_in_uexp(int source, int tag, int context_id, void** req, void** it_req)
-{
- return MPIDI_Recvq_find(&MPID_Unexp_queue, source, tag, context_id, req, it_req);
-}
-
-void MPIDI_Recvq_find_in_post(int source, int tag, int context_id, void** req, void** it_req)
-{
- MPID_Queue_map_key_t key;
- key.context_id = context_id;
- key.source = source;
- key.tag = tag;
- *it_req = NULL;
- *req = NULL;
- itp = MPID_Posted_queue.find(key);
- if(itp != MPID_Posted_queue.end())
- {
- *it_req = &itp;
- *req = ((MPID_Queue_map_value_t)(itp->second)).rreq;
- }
-}
-
-void MPIDI_Recvq_find(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, void** req, void** it_req)
-{
- MPID_Queue_map_key_t key;
- key.context_id = context_id;
- key.source = source;
- key.tag = tag;
- *req = NULL;
- *it_req = NULL;
- itu = queue->find(key);
- if(itu != queue->end())
- {
- *req = ((MPID_Queue_map_value_t)(itu->second)).rreq;
- *it_req = &itu;
- return;
- }
-
- if(source < 0 && tag >= 0)
- {
- for(itu = queue->begin(); itu != queue->end(); itu++)
- {
- if(((MPID_Queue_map_key_t)itu->first).tag == tag && ((MPID_Queue_map_key_t)itu->first).context_id == context_id)
- {
- *it_req = &itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- }
- }
- else if(source >= 0 && tag < 0)
- {
- for(itu = queue->begin(); itu != queue->end(); itu++)
- {
- if(((MPID_Queue_map_key_t)itu->first).source == source && ((MPID_Queue_map_key_t)itu->first).context_id == context_id)
- {
- *it_req = &itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- }
- }
- else if(source < 0 && tag < 0)
- {
- for(itu = queue->begin(); itu != queue->end(); itu++)
- {
- if(((MPID_Queue_map_key_t)itu->first).context_id == context_id)
- {
- *it_req = &itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- }
- }
-
-}
-
-#else
-void MPIDI_Recvq_insert_uexp(void * rreq, int source, int tag, int context_id, int seqno)
-{
- MPIDI_Recvq_insrt(&MPID_Unexp_queue, rreq, source, tag, context_id, seqno);
-
-}
-
-
-void MPIDI_Recvq_insert_post(void * rreq, int source, int tag, int context_id)
-{
- MPIDI_Recvq_insrt(&MPID_Posted_queue, rreq, source, tag, context_id, -1);
-}
-
-
-void MPIDI_Recvq_insrt(MPID_Req_queue_map_t* queue, void * rreq, int source, int tag, int context_id, int seqno)
-{
- MPID_Queue_map_key_t key;
- MPID_Queue_map_value_t value;
- key.context_id = context_id;
- key.source = source;
- key.tag = tag;
- value.seqno = seqno;
- value.rreq = rreq;
- queue->insert(std::make_pair(key,value));
-}
-
-
-void MPIDI_Recvq_remove_uexp(int source, int tag, int context_id, int seqno, void* it_req)
-{
- MPIDI_Recvq_rm(&MPID_Unexp_queue, source, tag, context_id, seqno, it_req);
-}
-
-void MPIDI_Recvq_remove_uexp_noit(int source, int tag, int context_id, int seqno)
-{
- MPID_Queue_map_key_t key;
- key.context_id = context_id;
- key.source = source;
- key.tag = tag;
- MPID_Req_queue_map_iterator_t it;
- std::pair <MPID_Req_queue_map_iterator_t, MPID_Req_queue_map_iterator_t > itpair;
- itpair = MPID_Unexp_queue.equal_range(key);
- for(it = itpair.first; itu != itpair.second; ++it)
- if(((MPID_Queue_map_value_t)it->second).seqno == seqno)
- {
- MPID_Unexp_queue.erase(it);
- break;
- }
-}
-
-void MPIDI_Recvq_remove_post(int source, int tag, int context_id, void* it_req)
-{
- MPIDI_Recvq_rm(&MPID_Posted_queue, source, tag, context_id, -1, it_req);
-}
-
-
-void MPIDI_Recvq_rm(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, int seqno, void* it_req)
-{
- MPID_Req_queue_map_iterator_t it = *((MPID_Req_queue_map_iterator_t*)it_req);
- queue->erase(it);
-}
-
-
-void MPIDI_Recvq_find_in_uexp(int source, int tag, int context_id, int seqno, void** req, void** it_req)
-{
- return MPIDI_Recvq_find(&MPID_Unexp_queue, source, tag, context_id, seqno, req, it_req);
-}
-
-void MPIDI_Recvq_find_in_post(int source, int tag, int context_id, void** req, void** it_req)
-{
- MPID_Queue_map_key_t key;
- key.context_id = context_id;
- key.source = source;
- key.tag = tag;
- *req = NULL;
- *it_req = NULL;
- itp = MPID_Posted_queue.find(key);
- if(itp!=MPID_Posted_queue.end())
- {
- *it_req = (void*)&itp;
- *req = ((MPID_Queue_map_value_t)(itp->second)).rreq;
- }
-}
-
-
-void MPIDI_Recvq_find(MPID_Req_queue_map_t* queue, int source, int tag, int context_id, int seqno, void** req, void** it_req)
-{
- MPID_Queue_map_key_t key;
- key.context_id = context_id;
- key.source = source;
- key.tag = tag;
-
- *req = NULL;
- *it_req = NULL;
- if(seqno == -1)
- {
- itu = queue->find(key);
- if(itu != queue->end())
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- }
- }
- else
- {
- std::pair <MPID_Req_queue_map_iterator_t, MPID_Req_queue_map_iterator_t > itpair;
- itpair = queue->equal_range(key);
- for(itu = itpair.first; itu != itpair.second; ++itu)
- if(((MPID_Queue_map_value_t)itu->second).seqno <= seqno)
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- break;
- }
- }
- if(*req != NULL)
- return;
-
- if(source < 0 && tag >= 0)
- {
- for(itu = queue->begin(); itu != queue->end(); itu++)
- {
- if(((MPID_Queue_map_key_t)itu->first).tag == tag && ((MPID_Queue_map_key_t)itu->first).context_id == context_id)
- {
- if(seqno == -1)
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- else
- {
- if(((MPID_Queue_map_value_t)itu->second).seqno <= seqno)
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- }
- }
- }
- }
- else if(source >= 0 && tag < 0)
- {
- for(itu = queue->begin(); itu != queue->end(); itu++)
- {
- if(((MPID_Queue_map_key_t)itu->first).source == source && ((MPID_Queue_map_key_t)itu->first).context_id == context_id)
- {
- if(seqno == -1)
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- else
- {
- if(((MPID_Queue_map_value_t)itu->second).seqno <= seqno)
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- }
- }
- }
- }
- else if(source < 0 && tag < 0)
- {
- for(itu = queue->begin(); itu != queue->end(); itu++)
- {
- if(((MPID_Queue_map_key_t)itu->first).context_id == context_id)
- {
- if(seqno == -1)
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- else
- {
- if(((MPID_Queue_map_value_t)itu->second).seqno <= seqno)
- {
- *it_req = (void*)&itu;
- *req = ((MPID_Queue_map_value_t)itu->second).rreq;
- return;
- }
- }
- }
- }
- }
-}
-
-#endif
-
-}
diff --git a/src/mpid/pamid/src/mpid_request.c b/src/mpid/pamid/src/mpid_request.c
deleted file mode 100644
index 19d2c6c..0000000
--- a/src/mpid/pamid/src/mpid_request.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_request.c
- * \brief Accessors and actors for MPID Requests
- */
-#include <mpidimpl.h>
-
-#ifndef MPID_REQUEST_PREALLOC
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL)
-#define MPID_REQUEST_PREALLOC 16
-#elif (MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_THREAD_LOCAL)
-#define MPID_REQUEST_PREALLOC 512 //Have direct more reqyests for all threads
-#else
-#define MPID_REQUEST_PREALLOC 8
-#endif
-#endif
-
-/**
- * \defgroup MPID_REQUEST MPID Request object management
- *
- * Accessors and actors for MPID Requests
- */
-
-
-/* these are referenced by src/mpi/pt2pt/wait.c in PMPI_Wait! */
-MPID_Request MPID_Request_direct[MPID_REQUEST_PREALLOC] __attribute__((__aligned__(64)));
-MPIU_Object_alloc_t MPID_Request_mem =
- {
- 0, 0, 0, 0, MPID_REQUEST, sizeof(MPID_Request),
- MPID_Request_direct,
- MPID_REQUEST_PREALLOC
- };
-
-
-#if (MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_THREAD_LOCAL) && defined(__BGQ__)
-void MPIDI_Request_allocate_pool()
-{
- int i;
- MPID_Request *prev, *cur;
- /* batch allocate a linked list of requests */
- MPIU_THREAD_CS_ENTER(HANDLEALLOC,);
- prev = MPIU_Handle_obj_alloc_unsafe(&MPID_Request_mem);
- MPID_assert(prev != NULL);
- prev->mpid.next = NULL;
- for (i = 1; i < MPID_REQUEST_TLS_MAX; ++i) {
- cur = MPIU_Handle_obj_alloc_unsafe(&MPID_Request_mem);
- MPID_assert(cur != NULL);
- cur->mpid.next = prev;
- prev = cur;
- }
- MPIU_THREAD_CS_EXIT(HANDLEALLOC,);
- MPIDI_Process.request_handles[MPIDI_THREAD_ID()].head = cur;
- MPIDI_Process.request_handles[MPIDI_THREAD_ID()].count += MPID_REQUEST_TLS_MAX;
-}
-#endif
-
-
-void
-MPIDI_Request_uncomplete(MPID_Request *req)
-{
- int count;
- MPIU_Object_add_ref(req);
- MPID_cc_incr(req->cc_ptr, &count);
-}
-
-
-void
-MPID_Request_set_completed(MPID_Request *req)
-{
- MPID_cc_set(&req->cc, 0);
- MPIDI_Progress_signal();
-}
diff --git a/src/mpid/pamid/src/mpid_request.h b/src/mpid/pamid/src/mpid_request.h
deleted file mode 100644
index a9fb6de..0000000
--- a/src/mpid/pamid/src/mpid_request.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_request.h
- * \brief ???
- */
-
-#ifndef __src_mpid_request_h__
-#define __src_mpid_request_h__
-
-#include "mpid_datatype.h"
-
-/**
- * \addtogroup MPID_REQUEST
- * \{
- */
-
-#define MPID_Request_create MPID_Request_create_inline
-#define MPID_Request_release MPID_Request_release_inline
-#define MPIDI_Request_complete MPIDI_Request_complete_inline
-#define MPIDI_Request_complete_norelease MPIDI_Request_complete_norelease_inline
-#define MPID_Request_discard MPID_Request_discard_inline
-
-
-extern MPIU_Object_alloc_t MPID_Request_mem;
-#if TOKEN_FLOW_CONTROL
-extern void MPIDI_mm_free(void *,size_t);
-#endif
-typedef enum {mpiuMalloc=1,mpidiBufMM} MPIDI_mallocType;
-
-void MPIDI_Request_uncomplete(MPID_Request *req);
-#if (MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_THREAD_LOCAL) && defined(__BGQ__)
-void MPIDI_Request_allocate_pool();
-#endif
-
-#define MPIDI_Request_getCA(_req) ({ (_req)->mpid.ca; })
-#define MPIDI_Request_getPeerRank_pami(_req) ({ (_req)->mpid.peer_pami; })
-#define MPIDI_Request_getPeerRank_comm(_req) ({ (_req)->mpid.peer_comm; })
-#define MPIDI_Request_getPType(_req) ({ (_req)->mpid.ptype; })
-#define MPIDI_Request_getControl(_req) ({ (_req)->mpid.envelope.msginfo.control; })
-#define MPIDI_Request_isSync(_req) ({ (_req)->mpid.envelope.msginfo.isSync; })
-#define MPIDI_Request_isRzv(_req) ({ (_req)->mpid.envelope.msginfo.isRzv; })
-#define MPIDI_Request_getMatchTag(_req) ({ (_req)->mpid.envelope.msginfo.MPItag; })
-#define MPIDI_Request_getMatchRank(_req) ({ (_req)->mpid.envelope.msginfo.MPIrank; })
-#define MPIDI_Request_getMatchCtxt(_req) ({ (_req)->mpid.envelope.msginfo.MPIctxt; })
-
-#define MPIDI_Request_setCA(_req, _ca) ({ (_req)->mpid.ca = (_ca); })
-#define MPIDI_Request_setPeerRank_pami(_req,_r) ({ (_req)->mpid.peer_pami = (_r); })
-#define MPIDI_Request_setPeerRank_comm(_req,_r) ({ (_req)->mpid.peer_comm = (_r); })
-#define MPIDI_Request_setPType(_req,_t) ({ (_req)->mpid.ptype = (_t); })
-#define MPIDI_Request_setControl(_req,_t) ({ (_req)->mpid.envelope.msginfo.control = (_t); })
-#define MPIDI_Request_setSync(_req,_t) ({ (_req)->mpid.envelope.msginfo.isSync = (_t); })
-#define MPIDI_Request_setRzv(_req,_t) ({ (_req)->mpid.envelope.msginfo.isRzv = (_t); })
-#ifdef OUT_OF_ORDER_HANDLING
-#define MPIDI_Request_getMatchSeq(_req) ({ (_req)->mpid.envelope.msginfo.MPIseqno; })
-#define MPIDI_Request_setMatchSeq(_req,_sq) ({ (_req)->mpid.envelope.msginfo.MPIseqno = (_sq); })
-#endif
-#define MPIDI_Request_setMatch(_req,_tag,_rank,_ctxtid) \
-({ \
- (_req)->mpid.envelope.msginfo.MPItag=(_tag); \
- (_req)->mpid.envelope.msginfo.MPIrank=(_rank); \
- (_req)->mpid.envelope.msginfo.MPIctxt=(_ctxtid); \
-})
-
-#define MPIDI_Msginfo_getPeerRequest(_msg) ({ MPID_Request *req=NULL; MPID_Request_get_ptr((_msg)->req, req); MPID_assert(req != NULL); req; })
-#define MPIDI_Msginfo_getPeerRequestH(_msg) ({ (_msg)->req; })
-#define MPIDI_Msginfo_cpyPeerRequestH(_dst,_src) ({ (_dst)->req = (_src)->req; MPI_SUCCESS; })
-#define MPIDI_Request_getPeerRequest(_req) MPIDI_Msginfo_getPeerRequest(&(_req)->mpid.envelope.msginfo)
-#define MPIDI_Request_getPeerRequestH(_req) ({ (_req)->mpid.envelope.msginfo.req; })
-#define MPIDI_Request_setPeerRequestH(_req) ({ (_req)->mpid.envelope.msginfo.req = (_req)->handle; MPI_SUCCESS; })
-#define MPIDI_Request_cpyPeerRequestH(_dst,_src) MPIDI_Msginfo_cpyPeerRequestH(&(_dst)->mpid.envelope.msginfo,_src)
-
-
-#define MPIU_HANDLE_ALLOCATION_MUTEX 0
-#define MPIU_HANDLE_ALLOCATION_THREAD_LOCAL 1
-
-/* XXX DJG for TLS hack */
-#define MPID_REQUEST_TLS_MAX 128
-
-#if (MPIU_HANDLE_ALLOCATION_METHOD == MPIU_HANDLE_ALLOCATION_THREAD_LOCAL) && defined(__BGQ__)
-
-# define MPIDI_Request_tls_alloc(req) \
-({ \
- size_t tid = MPIDI_THREAD_ID(); \
- MPIDI_RequestHandle_t *rh = &MPIDI_Process.request_handles[tid]; \
- if (unlikely(rh->head == NULL)) \
- MPIDI_Request_allocate_pool(); \
- (req) = rh->head; \
- rh->head = req->mpid.next; \
- rh->count --; \
-})
-
-# define MPIDI_Request_tls_free(req) \
-({ \
- size_t tid = MPIDI_THREAD_ID(); \
- MPIDI_RequestHandle_t *rh = &MPIDI_Process.request_handles[tid]; \
- if (likely(rh->count < MPID_REQUEST_TLS_MAX)) \
- { \
- /* push request onto the top of the stack */ \
- req->mpid.next = rh->head; \
- rh->head = req; \
- rh->count ++; \
- } \
- else \
- { \
- MPIU_Handle_obj_free(&MPID_Request_mem, req); \
- } \
-})
-
-#else
-
-# define MPIDI_Request_tls_alloc(req) \
-({ \
- (req) = MPIU_Handle_obj_alloc(&MPID_Request_mem); \
- if (req == NULL) \
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, -1, "Cannot allocate Request"); \
-})
-
-# define MPIDI_Request_tls_free(req) MPIU_Handle_obj_free(&MPID_Request_mem, (req))
-
-#endif
-
-#ifdef HAVE_DEBUGGER_SUPPORT
-#define MPIDI_Request_clear_dbg(req_) ((req_)->dbg_next = NULL)
-#else
-#define MPIDI_Request_clear_dbg(req_)
-#endif
-
-/**
- * \brief Create a very generic request
- * \note This should only ever be called by more specific allocators
- */
-static inline MPID_Request *
-MPIDI_Request_create_basic()
-{
- MPID_Request * req = NULL;
-
- MPIDI_Request_tls_alloc(req);
- MPID_assert(req != NULL);
- MPID_assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST);
- MPID_cc_set(&req->cc, 1);
- req->cc_ptr = &req->cc;
-
-#if 0
- /* This will destroy the MPID part of the request. Use this to
- check for fields that are not being correctly initialized. */
- memset(&req->mpid, 0xFFFFFFFF, sizeof(struct MPIDI_Request));
-#endif
- req->mpid.next = NULL;
- MPIDI_Request_clear_dbg(req);
-
- return req;
-}
-
-
-/**
- * \brief Create new request without initalizing
- */
-static inline MPID_Request *
-MPIDI_Request_create2_fast()
-{
- MPID_Request * req;
- req = MPIDI_Request_create_basic();
- MPIU_Object_set_ref(req, 2);
-
- return req;
-}
-
-
-/**
- * \brief Create and initialize a new request
- */
-static inline void
-MPIDI_Request_initialize(MPID_Request * req)
-{
- req->greq_fns = NULL;
-
- MPIR_STATUS_SET_COUNT(req->status, 0);
- MPIR_STATUS_SET_CANCEL_BIT(req->status, FALSE);
- req->status.MPI_SOURCE = MPI_UNDEFINED;
- req->status.MPI_TAG = MPI_UNDEFINED;
- req->status.MPI_ERROR = MPI_SUCCESS;
-
- struct MPIDI_Request* mpid = &req->mpid;
- mpid->envelope.msginfo.flags = 0;
- mpid->cancel_pending = FALSE;
- mpid->datatype_ptr = NULL;
- mpid->uebuf = NULL;
- mpid->uebuflen = 0;
- mpid->uebuf_malloc = 0;
-#ifdef OUT_OF_ORDER_HANDLING
- mpid->prev = NULL;
- mpid->prevR = NULL;
- mpid->nextR = NULL;
- mpid->oo_peer = NULL;
-#endif
- mpid->win_req = NULL;
- MPIDI_Request_setCA(req, MPIDI_CA_COMPLETE);
-}
-
-
-/**
- * \brief Create and initialize a new request
- */
-static inline MPID_Request *
-MPID_Request_create_inline()
-{
- MPID_Request * req;
- req = MPIDI_Request_create_basic();
- MPIU_Object_set_ref(req, 1);
-
- MPIDI_Request_initialize(req);
- req->comm=NULL;
-
- return req;
-}
-
-
-/**
- * \brief Create and initialize a new request
- */
-static inline MPID_Request *
-MPIDI_Request_create2()
-{
- MPID_Request * req;
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 2);
-
- return req;
-}
-
-static inline MPID_Request *
-MPIDI_Request_create1()
-{
- MPID_Request * req;
- req = MPID_Request_create();
- MPIU_Object_set_ref(req, 1);
-
- return req;
-}
-
-/**
- * \brief Mark a request as cancel-pending
- * \param[in] _req The request to cancel
- * \return The previous state
- */
-#define MPIDI_Request_cancel_pending(_req) \
-({ \
- int _flag = (_req)->mpid.cancel_pending; \
- (_req)->mpid.cancel_pending = TRUE; \
- _flag; \
-})
-
-
-static inline void
-MPID_Request_release_inline(MPID_Request *req)
-{
- int count;
- MPID_assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST);
- MPIU_Object_release_ref(req, &count);
- MPID_assert(count >= 0);
-
-
- if (count == 0)
- {
- MPID_assert(MPID_cc_is_complete(&req->cc));
-
- if (req->comm) MPIR_Comm_release(req->comm, 0);
- if (req->greq_fns) MPIU_Free(req->greq_fns);
- if (req->mpid.datatype_ptr) MPID_Datatype_release(req->mpid.datatype_ptr);
- if (req->mpid.uebuf_malloc== mpiuMalloc) {
- MPIU_Free(req->mpid.uebuf);
- }
- if(req->mpid.win_req) MPIU_Free(req->mpid.win_req);
-#if TOKEN_FLOW_CONTROL
- else if (req->mpid.uebuf_malloc == mpidiBufMM) {
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- MPIDI_mm_free(req->mpid.uebuf,req->mpid.uebuflen);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
-#endif
- MPIDI_Request_tls_free(req);
- }
-}
-
-
-/* This request was never used, at most had uebuf allocated. */
-static inline void
-MPID_Request_discard_inline(MPID_Request *req)
-{
- if (req->mpid.uebuf_malloc == mpiuMalloc) {
- MPIU_Free(req->mpid.uebuf);
- }
-#if TOKEN_FLOW_CONTROL
- else if (req->mpid.uebuf_malloc == mpidiBufMM) {
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- MPIDI_mm_free(req->mpid.uebuf,req->mpid.uebuflen);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
-#endif
- MPIDI_Request_tls_free(req);
-}
-
-#define MPID_REQUEST_SET_COMPLETED(req_) \
- MPIDI_Request_complete_norelease_inline(req_)
-
-static inline void
-MPIDI_Request_complete_inline(MPID_Request *req)
-{
- int count;
- MPID_cc_decr(req->cc_ptr, &count);
- MPID_assert(count >= 0);
-
- MPID_Request_release(req);
- if (count == 0) /* decrement completion count; if 0, signal progress engine */
- {
- MPIDI_Progress_signal();
- }
-}
-
-
-static inline void
-MPIDI_Request_complete_norelease_inline(MPID_Request *req)
-{
- int count;
- MPID_cc_decr(req->cc_ptr, &count);
- MPID_assert(count >= 0);
-
- if (count == 0) /* decrement completion count; if 0, signal progress engine */
- {
- MPIDI_Progress_signal();
- }
-}
-
-
-/** \} */
-
-
-#endif
diff --git a/src/mpid/pamid/src/mpid_time.c b/src/mpid/pamid/src/mpid_time.c
deleted file mode 100644
index db687f4..0000000
--- a/src/mpid/pamid/src/mpid_time.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_time.c
- * \brief Devince interface between MPI_Wtime() and PAMI_Wtime()
- */
-#include <mpidimpl.h>
-
-#if MPICH_TIMER_KIND == USE_GETTIMEOFDAY
-#warning Compiling mpid/pamid/src/mpid_time.c when MPICH_TIMER_KIND == USE_GETTIMEOFDAY
-#elif MPICH_TIMER_KIND != USE_DEVICE
-#error "Not using DEVICE TIMEBASE"
-#else
-
-
-void MPID_Wtime( MPID_Time_t *tval )
-{
- *tval = PAMI_Wtime(MPIDI_Client);
-}
-double MPID_Wtick()
-{
- return PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_WTICK).value.doubleval;
-}
-void MPID_Wtime_diff( MPID_Time_t *t1, MPID_Time_t *t2, double *diff )
-{
- *diff = *t2 - *t1;
-}
-void MPID_Wtime_todouble( MPID_Time_t *t, double *val )
-{
- *val = *t;
-}
-void MPID_Wtime_acc( MPID_Time_t *t1, MPID_Time_t *t2, MPID_Time_t *t3 )
-{
- *t3 += *t1 - *t2;
-}
-/*
- Return Values:
- 0 on success. -1 on Failure. 1 means that the timer may not be used
- until after MPID_Init completes. This allows the device to set up the
- timer (first needed for Blue Gene support).
-*/
-int MPID_Wtime_init( void )
-{
- return 1;
-}
-
-#endif
diff --git a/src/mpid/pamid/src/mpid_vc.c b/src/mpid/pamid/src/mpid_vc.c
deleted file mode 100644
index 454c360..0000000
--- a/src/mpid/pamid/src/mpid_vc.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_vc.c
- * \brief Maintain the virtual connection reference table
- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <mpidimpl.h>
-
-extern int mpidi_dynamic_tasking;
-/**
- * \brief Virtual connection reference table
- */
-struct MPIDI_VCRT
-{
- MPIU_OBJECT_HEADER;
- unsigned size; /**< Number of entries in the table */
- MPID_VCR *vcr_table; /**< Array of virtual connection references */
-};
-
-
-int MPID_VCR_Dup(MPID_VCR orig_vcr, MPID_VCR * new_vcr)
-{
-#ifdef DYNAMIC_TASKING
- if(mpidi_dynamic_tasking) {
- if (orig_vcr->pg) {
- MPIDI_PG_add_ref( orig_vcr->pg );
- }
- }
-#endif
-
- (*new_vcr)->taskid = orig_vcr->taskid;
-#ifdef DYNAMIC_TASKING
- (*new_vcr)->pg_rank = orig_vcr->pg_rank;
- (*new_vcr)->pg = orig_vcr->pg;
-#endif
- return MPI_SUCCESS;
-}
-
-int MPID_VCR_Get_lpid(MPID_VCR vcr, int * lpid_ptr)
-{
- *lpid_ptr = (int)(vcr->taskid);
- return MPI_SUCCESS;
-}
-
-int MPID_VCRT_Create(int size, MPID_VCRT *vcrt_ptr)
-{
- struct MPIDI_VCRT * vcrt;
- int i,result;
-
- vcrt = MPIU_Malloc(sizeof(struct MPIDI_VCRT));
- vcrt->vcr_table = MPIU_Malloc(size*sizeof(MPID_VCR));
-
- for(i = 0; i < size; i++) {
- vcrt->vcr_table[i] = MPIU_Malloc(sizeof(struct MPID_VCR_t));
- }
- if (vcrt != NULL)
- {
- MPIU_Object_set_ref(vcrt, 1);
- vcrt->size = size;
- *vcrt_ptr = vcrt;
- result = MPI_SUCCESS;
- }
- else
- {
- result = MPIR_ERR_MEMALLOCFAILED;
- }
- return result;
-}
-
-int MPID_VCRT_Add_ref(MPID_VCRT vcrt)
-{
- MPIU_Object_add_ref(vcrt);
- return MPI_SUCCESS;
-}
-
-int MPID_VCRT_Release(MPID_VCRT vcrt, int isDisconnect)
-{
- int count, i;
-
- MPIU_Object_release_ref(vcrt, &count);
-
- if (count == 0) {
-#ifdef DYNAMIC_TASKING
- int inuse;
- if(mpidi_dynamic_tasking) {
- for (i = 0; i < vcrt->size; i++)
- {
- MPID_VCR const vcr = vcrt->vcr_table[i];
-
- if (vcr->pg == MPIDI_Process.my_pg &&
- vcr->pg_rank == MPIDI_Process.my_pg_rank)
- {
- TRACE_ERR("before MPIDI_PG_release_ref on vcr=%x pg=%x pg=%s inuse=%d\n", vcr, vcr->pg, (vcr->pg)->id, inuse);
- inuse=MPIU_Object_get_ref(vcr->pg);
- MPIDI_PG_release_ref(vcr->pg, &inuse);
- if (inuse == 0)
- {
- MPIDI_PG_Destroy(vcr->pg);
- MPIU_Free(vcr);
- }
- continue;
- }
- inuse=MPIU_Object_get_ref(vcr->pg);
-
- MPIDI_PG_release_ref(vcr->pg, &inuse);
- if (inuse == 0)
- MPIDI_PG_Destroy(vcr->pg);
- if(vcr) MPIU_Free(vcr);
- }
- MPIU_Free(vcrt->vcr_table);
- } /** CHECK */
- else {
- for (i = 0; i < vcrt->size; i++)
- MPIU_Free(vcrt->vcr_table[i]);
- MPIU_Free(vcrt->vcr_table);vcrt->vcr_table=NULL;
- }
-#else
- for (i = 0; i < vcrt->size; i++)
- MPIU_Free(vcrt->vcr_table[i]);
- MPIU_Free(vcrt->vcr_table);vcrt->vcr_table=NULL;
-#endif
- MPIU_Free(vcrt);vcrt=NULL;
- }
- return MPI_SUCCESS;
-}
-
-int MPID_VCRT_Get_ptr(MPID_VCRT vcrt, MPID_VCR **vc_pptr)
-{
- *vc_pptr = vcrt->vcr_table;
- return MPI_SUCCESS;
-}
-
-#ifdef DYNAMIC_TASKING
-int MPID_VCR_CommFromLpids( MPID_Comm *newcomm_ptr,
- int size, const int lpids[] )
-{
- int mpi_errno = MPI_SUCCESS;
- MPID_Comm *commworld_ptr;
- int i;
- MPIDI_PG_iterator iter;
-
- commworld_ptr = MPIR_Process.comm_world;
- /* Setup the communicator's vc table: remote group */
- MPID_VCRT_Create( size, &newcomm_ptr->vcrt );
- MPID_VCRT_Get_ptr( newcomm_ptr->vcrt, &newcomm_ptr->vcr );
- if(mpidi_dynamic_tasking) {
- for (i=0; i<size; i++) {
- MPID_VCR vc = 0;
-
- /* For rank i in the new communicator, find the corresponding
- virtual connection. For lpids less than the size of comm_world,
- we can just take the corresponding entry from comm_world.
- Otherwise, we need to search through the process groups.
- */
- /* printf( "[%d] Remote rank %d has lpid %d\n",
- MPIR_Process.comm_world->rank, i, lpids[i] ); */
-#if 0
- if (lpids[i] < commworld_ptr->remote_size) {
- vc = commworld_ptr->vcr[lpids[i]];
- }
- else {
-#endif
- /* We must find the corresponding vcr for a given lpid */
- /* For now, this means iterating through the process groups */
- MPIDI_PG_t *pg = 0;
- int j;
-
- MPIDI_PG_Get_iterator(&iter);
- /* Skip comm_world */
- /*MPIDI_PG_Get_next( &iter, &pg ); */
- do {
- MPIDI_PG_Get_next( &iter, &pg );
- /*MPIU_ERR_CHKINTERNAL(!pg, mpi_errno, "no pg"); */
- /* FIXME: a quick check on the min/max values of the lpid
- for this process group could help speed this search */
- for (j=0; j<pg->size; j++) {
- /*printf( "Checking lpid %d against %d in pg %s\n",
- lpids[i], pg->vct[j].taskid, (char *)pg->id );
- fflush(stdout); */
- if (pg->vct[j].taskid == lpids[i]) {
- vc = &pg->vct[j];
- /*printf( "found vc %x for lpid = %d in another pg\n",
- (int)vc, lpids[i] );*/
- break;
- }
- }
- } while (!vc);
-#if 0
- }
-#endif
-
- /* printf( "about to dup vc %x for lpid = %d in another pg\n",
- (int)vc, lpids[i] ); */
- /* Note that his will increment the ref count for the associate
- PG if necessary. */
- MPID_VCR_Dup( vc, &newcomm_ptr->vcr[i] );
- }
- } else {
- for (i=0; i<size; i++) {
- /* For rank i in the new communicator, find the corresponding
- rank in the comm world (FIXME FOR MPI2) */
- /* printf( "[%d] Remote rank %d has lpid %d\n",
- MPIR_Process.comm_world->rank, i, lpids[i] ); */
- if (lpids[i] < commworld_ptr->remote_size) {
- MPID_VCR_Dup( commworld_ptr->vcr[lpids[i]],
- &newcomm_ptr->vcr[i] );
- }
- else {
- /* We must find the corresponding vcr for a given lpid */
- /* FIXME: Error */
- return 1;
- /* MPID_VCR_Dup( ???, &newcomm_ptr->vcr[i] ); */
- }
- }
-
- }
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/*
- * The following is a very simple code for looping through
- * the GPIDs. Note that this code requires that all processes
- * have information on the process groups.
- */
-int MPID_GPID_ToLpidArray( int size, int gpid[], int lpid[] )
-{
- int i, mpi_errno = MPI_SUCCESS;
- int pgid;
- MPIDI_PG_t *pg = 0;
- MPIDI_PG_iterator iter;
-
- if(mpidi_dynamic_tasking) {
- for (i=0; i<size; i++) {
- MPIDI_PG_Get_iterator(&iter);
- do {
- MPIDI_PG_Get_next( &iter, &pg );
- if (!pg) {
- /* Internal error. This gpid is unknown on this process */
- TRACE_ERR("No matching pg foung for id = %d\n", pgid );
- lpid[i] = -1;
- /*MPIU_ERR_SET2(mpi_errno,MPI_ERR_INTERN, "**unknowngpid",
- "**unknowngpid %d %d", gpid[0], gpid[1] ); */
- return mpi_errno;
- }
- MPIDI_PG_IdToNum( pg, &pgid );
-
- if (pgid == gpid[0]) {
- /* found the process group. gpid[1] is the rank in
- this process group */
- /* Sanity check on size */
- TRACE_ERR("found the progress group for id = %d\n", pgid );
- TRACE_ERR("pg->size = %d gpid[1]=%d\n", pg->size, gpid[1] );
- if (pg->size > gpid[1]) {
- TRACE_ERR("pg->vct[gpid[1]].taskid = %d\n", pg->vct[gpid[1]].taskid );
- lpid[i] = pg->vct[gpid[1]].taskid;
- }
- else {
- lpid[i] = -1;
- /*MPIU_ERR_SET2(mpi_errno,MPI_ERR_INTERN, "**unknowngpid",
- "**unknowngpid %d %d", gpid[0], gpid[1] ); */
- return mpi_errno;
- }
- /* printf( "lpid[%d] = %d for gpid = (%d)%d\n", i, lpid[i],
- gpid[0], gpid[1] ); */
- break;
- }
- } while (1);
- gpid += 2;
- }
- } else {
- for (i=0; i<size; i++) {
- lpid[i] = *++gpid; gpid++;
- }
- return 0;
-
- }
-
- return mpi_errno;
-}
-/*
- * The following routines convert to/from the global pids, which are
- * represented as pairs of ints (process group id, rank in that process group)
- */
-
-/* FIXME: These routines belong in a different place */
-int MPID_GPID_GetAllInComm( MPID_Comm *comm_ptr, int local_size,
- int local_gpids[], int *singlePG )
-{
- int mpi_errno = MPI_SUCCESS;
- int i;
- int *gpid = local_gpids;
- int lastPGID = -1, pgid;
- MPID_VCR vc;
-
- MPIU_Assert(comm_ptr->local_size == local_size);
-
- if(mpidi_dynamic_tasking) {
- *singlePG = 1;
- for (i=0; i<comm_ptr->local_size; i++) {
- vc = comm_ptr->vcr[i];
-
- /* Get the process group id as an int */
- MPIDI_PG_IdToNum( vc->pg, &pgid );
-
- *gpid++ = pgid;
- if (lastPGID != pgid) {
- if (lastPGID != -1)
- *singlePG = 0;
- lastPGID = pgid;
- }
- *gpid++ = vc->pg_rank;
-
- MPIU_DBG_MSG_FMT(COMM,VERBOSE, (MPIU_DBG_FDEST,
- "pgid=%d vc->pg_rank=%d",
- pgid, vc->pg_rank));
- }
- } else {
- for (i=0; i<comm_ptr->local_size; i++) {
- *gpid++ = 0;
- (void)MPID_VCR_Get_lpid( comm_ptr->vcr[i], gpid );
- gpid++;
- }
- *singlePG = 1;
- }
-
- return mpi_errno;
-}
-
-
-int MPIDI_VC_Init( MPID_VCR vcr, MPIDI_PG_t *pg, int rank )
-{
- vcr->pg = pg;
- vcr->pg_rank = rank;
-}
-
-
-#endif
diff --git a/src/mpid/pamid/src/mpidi_bufmm.c b/src/mpid/pamid/src/mpidi_bufmm.c
deleted file mode 100644
index 0134556..0000000
--- a/src/mpid/pamid/src/mpidi_bufmm.c
+++ /dev/null
@@ -1,716 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpidi_bufmm.c
- * \brief Memory management for early arrivals
- */
-
- /*******************************************************************/
- /* DESCRIPTION: */
- /* Dynamic memory manager which allows allocation and */
- /* deallocation for earl arrivals sent via eager protocol. */
- /* */
- /* The basic method is for buffers of size between MIN_SIZE */
- /* and MAX_SIZE. The allocation scheme is a modified version */
- /* of Knuth's buddy algorithm. Regardless of what size buffer */
- /* is requested the size is rounded up to the nearest power of 2.*/
- /* Note that there is a buddy_header overhead per buffer (8 bytes*/
- /* in 32 bit and 16 bytes in 64 bit). So, for example, if a */
- /* 256 byte buffer is requested that would require 512 bytes */
- /* of memory. A 248-byte buffer needs 256 bytes of space. */
- /* Only for the maxsize buffers, it is guaranteed that the */
- /* allocation is a power of two, since typically applications */
- /* have such requirements. */
- /* */
- /* To speed up the buddy algorithm there are some preallocated */
- /* buffers. There are FLEX_NUM number of buffers from the */
- /* FLEX_COUNT number of smallest buffers. So, for example, if */
- /* MIN_SIZE is 16, FLEX_COUNT is 4, and FLEX_NUM is 256 then */
- /* there are buffers of size 16, 32, 64, and 128 preallocted */
- /* (256 buffers each). These buffers are arranged into stacks. */
- /* */
- /* If the system runs out of preallocated buffers or the size */
- /* is bigger than the biggest preallocated one then the buddy */
- /* algorithm is applied. Originally there is a list of MAX_SIZE */
- /* buffers. (The size is MAX_SIZE + the 8 or 16 byte overhead.) */
- /* These are not merged as the traditional buddy system would */
- /* require, since we never need bigger buffers than these. */
- /* Originally, the lists of smaller size buffers are empty. When */
- /* there is an allocation request the program searches for the */
- /* smallest free buffer available in the lists. If it is bigger */
- /* than the requested one then it is repeatedly split into half. */
- /* The other halves are inserted into the appropriate list of */
- /* free buffers. At deallocation the program attempts to merge */
- /* the buffer with it's buddy repeatedly to get the largest */
- /* buffer possible. */
- /*******************************************************************/
-
-#include <mpidimpl.h>
-
-#define NO 0
-#define YES 1
-int application_set_eager_limit=0;
-
-#if TOKEN_FLOW_CONTROL
-#define BUFFER_MEM_MAX (1<<26) /* 64MB */
-#define MAX_BUF_BKT_SIZE (1<<18) /* Max eager_limit is 256K */
-#define MIN_BUF_BKT_SIZE (64)
-#define MIN_LOG2SIZE 6 /* minimum buffer size log-2 */
-#define MIN_SIZE 64 /* minimum buffer size */
-#define MAX_BUCKET 13 /* log of maximum buffer size/MIN_SIZE */
-#define MAX_SIZE (MIN_SIZE<<(MAX_BUCKET-1)) /* maximum buffer size */
-#define FLEX_COUNT 5 /* num of buf types to preallocate */
-#define FLEX_NUM 32 /* num of preallocated buffers */
- /* overhead for each buffer */
-#define MAX_BUDDIES 50 /* absolutely maximum number of buddies */
-#define BUDDY 1
-#define FLEX 0
-#define MAX_MALLOCS 10
-
-#define OVERHEAD (sizeof(buddy_header) - 2 * sizeof (void *))
-#define TAB_SIZE (MAX_BUCKET+1)
-#define ALIGN8(x) ((((unsigned long)(x)) + 0x7) & ~0x7L)
-#ifndef max
-#define max(a,b) ((a) > (b) ? (a) : (b))
-#endif
-#ifndef min
-#define min(a,b) (a>b ? b : a)
-#endif
-
-/* normalize the size to number of MIN_SIZE blocks required to hold */
-/* required size. This includes the OVERHEAD */
-#define NORMSIZE(sz) (((sz)+MIN_SIZE+OVERHEAD-1) >> MIN_LOG2SIZE)
-
-typedef struct bhdr_struct{
- char buddy; /* buddy or flex alloc */
- char free; /* available or not */
- char bucket; /* log of buffer size */
- char *base_buddy; /* addr of max size buddy */
- struct bhdr_struct *next; /* list ptr, used if free */
- struct bhdr_struct *prev; /* list bptr, used if free */
-} buddy_header;
-
-typedef struct fhdr_struct{
- char buddy; /* buddy or flex alloc */
- char ind; /* which stack */
- /* bucket - min_bucket */
-} flex_header;
-
-typedef struct{
- void *ptr; /* malloc ptr need to be freed */
- int size; /* space allocted */
- int type; /* FLEX or BUDDY */
-} malloc_list_t;
-malloc_list_t *malloc_list;
-
-static int nMallocs, maxMallocs; /* no. of malloc() issued */
-static int maxMallocs; /* max. no. of malloc() allowed */
-static int max_bucket; /* max. number of "buddy" bucket*/
-static int flex_count; /* pre-allocated bucket */
-static size_t max_size; /* max. size for each msg */
-static size_t flex_size; /* size for flex slot */
-static char *buddy_heap_ptr; /* ptr points to beg. of buddy */
-static char *end_heap_ptr; /* ptr points to end of buddy */
-static char *heap; /* begin. address of flex stack */
-static long mem_inuse; /* memory in use */
-long mem_hwmark; /* highest memory usage */
-
-
-static int sizetable[TAB_SIZE + 1]; /* from bucket to size */
-static int sizetrans[(1<<(MAX_BUCKET-1))+2];/* from size to power of 2 size*/
-
-static char** flex_stack[TAB_SIZE]; /* for flex size alloc */
-static int flex_sp [TAB_SIZE]; /* flex stack pointer */
-
-static buddy_header *free_buddy[TAB_SIZE];/* for buddy alloc */
-
-int MPIDI_tfctrl_enabled=0; /* token flow control enabled */
-int MPIDI_tfctrl_hwmark=0; /* high water mark for tfc */
-int application_set_buf_mem=0; /* MP_BUFFER_MEM set by the user? */
-char *EagerLimit=NULL; /* export MP_EAGER_LIMIT if the */
- /* number is adjusted */
-
-/***************************************************************************/
-/* calculate number of tokens available for each pair-wise communication. */
-/***************************************************************************/
-
-void MPIDI_calc_tokens(int nTasks,uint *eager_limit_in, unsigned long *buf_mem_in )
-{
- char *cp;
- unsigned long new_buf_mem_max,buf_mem_max;
- int val;
- int rc;
- int i;
-
- /* Round up passed eager limit to power of 2 */
- if (MPIDI_Process.mp_buf_mem_max > *buf_mem_in)
- buf_mem_max = MPIDI_Process.mp_buf_mem_max;
- else
- buf_mem_max= *buf_mem_in;
-
- if (*eager_limit_in != 0) {
- for (val=1 ; val < *eager_limit_in ; val *= 2);
- if (val > MAX_BUF_BKT_SIZE) { /* Maximum eager_limit is 256K */
- val = MAX_BUF_BKT_SIZE;
- }
- if (val < MIN_BUF_BKT_SIZE) { /* Minimum eager_limit is 64 */
- val = MIN_BUF_BKT_SIZE;
- }
- MPIDI_tfctrl_enabled = buf_mem_max / ((long)nTasks * val);
-
- /* We need to have a minimum of 2 tokens. If number of tokens is
- * less than 2, re-calculate by reducing the eager-limit.
- * If the number of tokens is still less than 2 then suggest a
- * new minimum buf_mem.
- */
- if (MPIDI_tfctrl_enabled < 2) {
- for (val ; val>=MIN_BUF_BKT_SIZE; val/=2) {
- MPIDI_tfctrl_enabled = (buf_mem_max) / ((long)nTasks * val);
- if (MPIDI_tfctrl_enabled >= 2) {
- break;
- }
- }
- /* If the number of flow control tokens is still less than two */
- /* even with the eager_limit being reduced to 64, calculate a */
- /* new buf_mem value for 2 tokens and eager_limit = 64. */
- /* This will only happen if tasks>4K and original buf_mem=1M. */
- if (MPIDI_tfctrl_enabled < 2) {
- /* Sometimes we are off by 1 - due to integer arithmetic. */
- new_buf_mem_max = (2 * nTasks * MIN_BUF_BKT_SIZE);
- if ( (new_buf_mem_max <= BUFFER_MEM_MAX) && (!application_set_buf_mem) ) {
- MPIDI_tfctrl_enabled = 2;
- /* Reset val to mini (64) because the for loop above */
- /* would have changed it to 32. */
- val = MIN_BUF_BKT_SIZE;
- buf_mem_max = new_buf_mem_max;
- if ( application_set_buf_mem ) {
- TRACE_ERR("informational messge \n");
- }
- }
- else {
- /* Still not enough ...... Turn off eager send protocol */
- MPIDI_tfctrl_enabled = 0;
- val = 0;
- if (((MPIDI_Process.verbose >= MPIDI_VERBOSE_SUMMARY_0)|| (MPIDI_Process.mp_infolevel > 0))
- && (MPIR_Process.comm_world->rank == 0)) {
- if ( application_set_buf_mem ) {
- printf("ATTENTION: MP_BUFFER_MEM=%d was set too low, eager send protocol is disabled\n",
- *buf_mem_in);
- }
- }
- }
- }
- }
- MPIDI_tfctrl_hwmark = (MPIDI_tfctrl_enabled+1) / 2; /* high water mark */
- /* Eager_limit may have been changed -- either rounded up or reduced */
- if ( *eager_limit_in != val ) {
- if ( application_set_eager_limit && (*eager_limit_in > val)) {
- /* Only give warning on reduce. */
- printf("ATTENTION: eager limit is reduced from %d to %d \n",*eager_limit_in,val); fflush(stdout);
- }
- *eager_limit_in = val;
-
- /* putenv MP_EAGER_LIMIT if it is changed */
- /* MP_EAGER_LIMIT always has a value. */
- /* need to check whether MP_EAGER_LIMIT has been export */
- EagerLimit = (char*)MPIU_Malloc(32 * sizeof(char));
- sprintf(EagerLimit, "MP_EAGER_LIMIT=%d",val);
- rc = putenv(EagerLimit);
- if (rc !=0) {
- TRACE_ERR("PUTENV with Eager Limit failed \n");
- }
- }
- }
- else {
- /* Eager_limit = 0, all messages will be sent using rendezvous protocol */
- MPIDI_tfctrl_enabled = 0;
- MPIDI_tfctrl_hwmark = 0;
- }
- /* user may want to set MP_EAGER_LIMIT to 0 or less than 256 */
- if (*eager_limit_in < MPIDI_Process.pt2pt.limits.application.immediate.remote)
- MPIDI_Process.pt2pt.limits.application.immediate.remote= *eager_limit_in;
- if (*eager_limit_in < MPIDI_Process.pt2pt.limits.application.eager.remote)
- MPIDI_Process.pt2pt.limits.application.eager.remote= *eager_limit_in;
-# ifdef DUMP_MM
- printf("MPIDI_tfctrl_enabled=%d eager_limit=%d buf_mem=%d buf_mem_max=%d\n",
- MPIDI_tfctrl_enabled,*eager_limit_in,*buf_mem_in,buf_mem_max); fflush(stdout);
-# endif
-
-}
-
-
-
-/***************************************************************************/
-/* Initialize flex stack and stack pointers for each of FLEX_NUM slots */
-/***************************************************************************/
-
-static char *MPIDI_init_flex(char *hp)
-{
- int i,j,fcount;
- char** area;
- char *temp;
- int size;
- int kk;
-
- fcount = flex_count;
- if ((fcount = flex_count) == 0) {
- flex_size = 0;
- return hp;
- }
-# ifdef DUMP_MM
- printf("fcount=%d sizetable[fcount+1]=%d sizetable[1]=%d FLEX_NUM=%d overhead=%d\n",
- fcount,sizetable[fcount+1],sizetable[1],FLEX_NUM,OVERHEAD); fflush(stdout);
-# endif
- flex_size = (sizetable[fcount+1] - sizetable[1]) *FLEX_NUM +
- OVERHEAD * fcount * FLEX_NUM;
- kk=fcount *FLEX_NUM *sizeof(char *);
- size = ALIGN8(kk);
- area = (char **) MPIU_Malloc(size);
- malloc_list[nMallocs].ptr=(void *) area;
- malloc_list[nMallocs].size=size;
- malloc_list[nMallocs].type=FLEX;
- nMallocs++;
-
-
- flex_stack[0] = NULL;
- for(i =1; i <=fcount; hp +=FLEX_NUM *(OVERHEAD +sizetable[i]), i++) {
-# ifdef DEBUG
- flex_heap[i] =hp;
-# endif
- flex_stack[i] =area;
- area += FLEX_NUM;
- flex_sp[i] =0;
-# ifdef DUMP_MM
- printf("MPIDI_init_flex() i=%d FLEX_NUM=%d fcount=%d i=%d flex_stack[i]=%p OVERHEAD=%d\n",
- i,FLEX_NUM,fcount,i,flex_stack[i],OVERHEAD); fflush(stdout);
-# endif
- for(j =0; j <FLEX_NUM; j++){
- flex_stack[i][j] =hp +j *(OVERHEAD +sizetable[i]);
-# ifdef DUMP_MM
- printf("j=%d hp=%p advance =%d final=%x\n", j,(int *)hp,j *(OVERHEAD +sizetable[i]),
- (int *) (hp +j *(OVERHEAD +sizetable[i])));
- fflush(stdout);
-# endif
- ((flex_header *)flex_stack[i][j])->buddy =FLEX;
- ((flex_header *)flex_stack[i][j])->ind =i;
-# ifdef DUMP_MM
- printf("j=%d flex_stack[%02d][%02d] = %p advance=%d flag buddy=0x%x ind=0x%x\n",
- j,i,j,((int *)(flex_stack[i][j])),(sizetable[i]+OVERHEAD),
- ((flex_header *)flex_stack[i][j])->buddy,
- ((flex_header *)flex_stack[i][j])->ind); fflush(stdout);
-#endif
- }
- }
- return hp;
-}
-
-/***************************************************************************/
-/* Initialize buddy heap for each of MAX_BUDDIES slots */
-/***************************************************************************/
-
-
-static void MPIDI_alloc_buddies(int nums, int *space)
-{
- int i;
- uint size;
- char *buddy,*prev;
-
- size = nums * (max_size +OVERHEAD);
- buddy = buddy_heap_ptr;
- if ((buddy_heap_ptr + size) > end_heap_ptr) {
- /* preallocated space is exhausted, the caller needs to make */
- /* a malloc() call for storing the message */
- *space=NO;
- return;
- }
- buddy_heap_ptr += size;
- free_buddy[max_bucket] = (buddy_header *)buddy;
- for(i =0, prev =NULL; i <nums; i++){
- ((buddy_header *)buddy)->buddy =BUDDY;
- ((buddy_header *)buddy)->free =1;
- ((buddy_header *)buddy)->bucket =max_bucket;
- ((buddy_header *)buddy)->base_buddy =buddy;
- ((buddy_header *)buddy)->prev =(buddy_header *)prev;
- prev =buddy;
-# ifdef DUMP_MM
- printf("ALLOC_BUDDY i=%2d buddy=%d free=%d bucket=%d base_buddy=%p prev=%p next=%p max_size=%d \n",
- i,(int)((buddy_header *)buddy)->buddy,(int)((buddy_header *)buddy)->free,
- (int)((buddy_header *)buddy)->bucket,(int *) ((buddy_header *)buddy)->base_buddy,
- (int *)((buddy_header *)buddy)->prev,(int *)(buddy + max_size +OVERHEAD),max_size);
- fflush(stdout);
-# endif
- buddy +=max_size +OVERHEAD;
- ((buddy_header *)prev)->next =(buddy_header *)buddy;
- }
- ((buddy_header *)prev)->next =NULL;
-}
-
-/***************************************************************************/
-/* Initialize each of buddy slot */
-/***************************************************************************/
-
-static void MPIDI_init_buddy(unsigned long buf_mem)
-{
- int i;
- int buddy_num;
- size_t size;
- int space=YES;
-
-# ifdef DEBUG
- buddy_heap =buddy_heap_ptr;
-# endif
- for(i =0; i <= max_bucket; i++)
- free_buddy[i] =NULL;
-
- /* figure out how many buddies we wanna preallocate
- * size = BUFFER_MEM_SIZE >> 2;
- * size -= flex_size;
- */
- size = buf_mem;
- size = size / (max_size + OVERHEAD);
- size = (size == 0) ? 1 : (size > MAX_BUDDIES) ? MAX_BUDDIES : size;
- MPIDI_alloc_buddies(size,&space);
- if ( space == NO ) {
- TRACE_ERR("out of memory %s(%d)\n",__FILE__,__LINE__);
- MPID_abort();
- }
-}
-
-
-/***************************************************************************/
-/* initializ memory buffer for eager messages */
-/***************************************************************************/
-
-int MPIDI_mm_init(int nTasks,uint *eager_limit_in,unsigned long *buf_mem_in)
-{
- int i, bucket;
- size_t size;
- unsigned int eager_limit;
- unsigned long buf_mem;
- unsigned long buf_mem_max;
- int need_allocation = 1;
-
- MPIDI_calc_tokens(nTasks,eager_limit_in, buf_mem_in);
- buf_mem = *buf_mem_in;
- eager_limit = *eager_limit_in;
-# ifdef DEBUG
- printf("Eager Limit=%d buf_mem=%ld tokens=%d hwmark=%d\n",
- eager_limit,buf_mem, MPIDI_tfctrl_enabled,MPIDI_tfctrl_hwmark);
- fflush(stdout);
-# endif
- if (eager_limit_in == 0) return 0; /* no EA buffer is needed */
- maxMallocs=MAX_MALLOCS;
- malloc_list=(malloc_list_t *) MPIU_Malloc(maxMallocs * sizeof(malloc_list_t));
- if (malloc_list == NULL) return errno;
- nMallocs=0;
- mem_inuse=0;
- mem_hwmark=0;
-
-
- for (max_bucket=0,size=1 ; size < eager_limit ; max_bucket++,size *= 2);
- max_size = 1 << max_bucket;
- max_bucket -= (MIN_LOG2SIZE - 1);
- flex_count = min(FLEX_COUNT,max_bucket);
- for(i =1, size =MIN_SIZE; i <=MAX_BUCKET+1; i++, size =size << 1)
- sizetable[i] =size;
- sizetable[0] = 0;
-
- for (bucket=1, size = 1, i=1 ; bucket <= max_bucket; ) {
- sizetrans[i++] = bucket;
- if (i > size) {
- size *= 2;
- bucket++;
- }
- }
- sizetrans[i] = sizetrans[i-1];
- /* 65536 is for flex stack which is not part of buf_mem_size */
- heap = MPIU_Malloc(buf_mem + 65536);
- if (heap == NULL) return errno;
- malloc_list[nMallocs].ptr=(void *) heap;
- malloc_list[nMallocs].size=buf_mem + 65536;
- malloc_list[nMallocs].type=BUDDY;
- buddy_heap_ptr = heap;
- end_heap_ptr = heap + buf_mem + 65536;
-# ifdef DUMP_MM
- printf("OVERHEAD=%d MAX_BUCKET=%d TAB_SIZE=%d buddy_header size=%d mem_size=%ld\n",
- OVERHEAD,MAX_BUCKET,TAB_SIZE,sizeof(buddy_header),buf_mem); fflush(stdout);
-# endif
-# ifdef DEBUG
- printf("nMallocs=%d ptr=%p size=%d type=%d bPtr=%p ePtr=%p\n",
- nMallocs,(void *)malloc_list[nMallocs].ptr,malloc_list[nMallocs].size,
- malloc_list[nMallocs].type,buddy_heap_ptr,end_heap_ptr);
- fflush(stdout);
-# endif
- nMallocs++;
-
- buddy_heap_ptr = MPIDI_init_flex(heap);
- MPIDI_init_buddy(buf_mem);
-# ifdef MPIMM_DEBUG
- if (mpimm_std_debug) {
- printf("DevMemMgr uses\n");
- printf("\tmem-size=%d, maxbufsize=%ld\n",mem_size,max_size);
- printf("\tfcount=%d fsize=%ld, max_bucket=%d\n",
- flex_count,flex_size,max_bucket);
- fflush(stdout);
- }
-# endif
- return 0;
-}
-
-
-void MPIDI_close_mm()
-{
- int i;
-
- if (nMallocs != 0) {
- for (i=0; i< nMallocs; i++) {
- MPIU_Free((void *) (malloc_list[i].ptr));
- }
- MPIU_Free(malloc_list);
- }
-}
-
-/****************************************************************************/
-/* macros for MPIDI_mm_alloc() and MPIDI_mm_free() */
-/****************************************************************************/
-
-#define MPIDI_flex_alloc(bucket) ((flex_sp[bucket] >=FLEX_NUM) ? \
- NULL : (char *)(flex_stack[bucket] \
- [flex_sp[bucket]++]) +OVERHEAD)
-
-#define MPIDI_flex_free(ptr) \
- int n; \
- ptr =(char *)ptr -OVERHEAD; \
- n =((flex_header *)ptr)->ind; \
- flex_stack[n][--flex_sp[n]] =(char *)ptr;
-
-
-#define MPIDI_remove_head(ind) \
- { \
- if((free_buddy[ind] = \
- free_buddy[ind]->next) !=NULL) \
- free_buddy[ind]->prev =NULL; \
- }
-
-#define MPIDI_remove(bud) \
- { \
- if(bud->prev !=NULL) \
- bud->prev->next =bud->next; \
- else \
- free_buddy[bud->bucket] =bud->next; \
- if(bud->next !=NULL) \
- bud->next->prev =bud->prev; \
- }
-
-#define MPIDI_add_head(bud,ind) \
- { \
- if((bud->next =free_buddy[ind]) !=NULL)\
- free_buddy[ind]->prev =bud; \
- free_buddy[ind] =bud; \
- bud->prev =NULL; \
- }
-
-#define MPIDI_fill_header(bud,ind,base) \
- { \
- bud->buddy =BUDDY; \
- bud->free =1; \
- bud->bucket =ind; \
- bud->base_buddy =base; \
- }
-
-#define MPIDI_pair(bud,size) (((char*)(bud) - (bud)->base_buddy) & (size) ? \
- (buddy_header *)((char*)(bud) - (size)) : \
- (buddy_header *)((char*)(bud) + (size)))
-
-static buddy_header *MPIDI_split_buddy(int big,int bucket)
-{
- buddy_header *bud,*buddy;
- char *base;
- int i;
-
- bud =free_buddy[big];
- MPIDI_remove_head(big);
- base =bud->base_buddy;
- for(i =big -1; i >=bucket; i--){
- buddy =(buddy_header *)((char*)bud +sizetable[i]);
- MPIDI_fill_header(buddy,i,base);
- MPIDI_add_head(buddy,i);
- }
- bud->bucket =bucket;
- bud->free =0;
- return bud;
-}
-
-static void *MPIDI_buddy_alloc(int bucket)
-{
- int i;
- buddy_header *bud;
- int space=YES;
-
-# ifdef TRACE
- printf("(buddy) ");
-# endif
- if((bud =free_buddy[i =bucket]) ==NULL){
- i++;
- do {
- for(; i <=max_bucket; i++)
- if(free_buddy[i] !=NULL){
- bud =MPIDI_split_buddy(i,bucket);
- return (char *)bud +OVERHEAD;
- }
- MPIDI_alloc_buddies(1,&space);
- if (space == NO)
- return NULL;
- i = max_bucket;
- } while (1);
- }
- else{
- MPIDI_remove_head(bucket);
- bud->free =0;
- return (char *)bud +OVERHEAD;
- }
-}
-
-static buddy_header *MPIDI_merge_buddy(buddy_header *bud)
-{
- buddy_header *buddy;
- int size;
-
- while( (bud->bucket <max_bucket) &&
- (size = sizetable[bud->bucket]) &&
- ((buddy =MPIDI_pair(bud,size))->free) &&
- (buddy->bucket ==bud->bucket) )
- {
- MPIDI_remove(buddy);
- bud =min(bud,buddy);
- bud->bucket++;
- }
- return bud;
-}
-
-static void MPIDI_buddy_free(void *ptr)
-{
- buddy_header *bud;
-
-# ifdef TRACE
- printf("(buddy) ");
-# endif
- bud =(buddy_header *)((char *)ptr -OVERHEAD);
- if(bud->bucket <max_bucket)
- bud =MPIDI_merge_buddy(bud);
- bud->free =1;
- MPIDI_add_head(bud,bud->bucket);
-}
-# ifdef TRACE
- int nAllocs =0; /* number of times MPIDI_mm_alloc() is called */
- int nFree =0; /* number of times MPIDI_mm_free() is called */
- int nM=0; /* number of times MPIU_Malloc() is called */
- int nF=0; /* number of times MPIU_Free() is called */
-# endif
-void *MPIDI_mm_alloc(size_t size)
-{
- void *pt;
- int bucket,tmp;
-
- MPID_assert(size <= max_size);
- tmp = NORMSIZE(size);
- tmp =bucket =sizetrans[tmp];
- if(bucket >flex_count || (pt =MPIDI_flex_alloc(tmp)) ==NULL) {
- pt =MPIDI_buddy_alloc(bucket);
- if (MPIDI_Process.mp_statistics) {
- mem_inuse = mem_inuse + sizetable[tmp];
- if (mem_inuse > mem_hwmark) {
- mem_hwmark = mem_inuse;
- }
- }
- }
- if (pt == NULL) {
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- pt=MPIU_Malloc(size);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- if (MPIDI_Process.mp_statistics) {
- mem_inuse = mem_inuse + sizetable[tmp];
- if (mem_inuse > mem_hwmark) {
- mem_hwmark = mem_inuse;
- }
- }
-# ifdef TRACE
- nM++;
- if (pt == NULL) {
- printf("ERROR line=%d\n",__LINE__); fflush(stdout);
- } else {
- printf("malloc nM=%d size=%d pt=0x%p \n",nM,size,pt); fflush(stdout);
- }
-# endif
- }
-# ifdef TRACE
- printf("MPIDI_mm_alloc(%4d): %p\n",size,pt);
- nAllocs++;
-# endif
- return pt;
-}
-
-void MPIDI_mm_free(void *ptr, size_t size)
-{
- int tmp,bucket;
-
- if (size > MAX_SIZE) {
- TRACE_ERR("Out of memory in %s(%d)\n",__FILE__,__LINE__);
- MPID_abort();
- }
- if ((ptr >= (void *) heap) && (ptr < (void *)end_heap_ptr)) {
- if(*((char *)ptr -OVERHEAD) ==FLEX){
- MPIDI_flex_free(ptr);
- }
- else
- MPIDI_buddy_free(ptr);
- if (MPIDI_Process.mp_statistics) {
- tmp = NORMSIZE(size);
- bucket =sizetrans[tmp];
- mem_inuse = mem_inuse - sizetable[bucket];
- if (mem_inuse > mem_hwmark) {
- mem_hwmark = mem_inuse;
- }
- }
- } else {
- if (!ptr) {
- TRACE_ERR("NULL ptr passed MPIDI_mm_free() in %s(%d)\n",__FILE__,__LINE__);
- MPID_abort();
- }
- if (MPIDI_Process.mp_statistics) {
- tmp = NORMSIZE(size);
- bucket =sizetrans[tmp];
- mem_inuse = mem_inuse - sizetable[bucket];
- if (mem_inuse > mem_hwmark) {
- mem_hwmark = mem_inuse;
- }
- }
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
-# ifdef TRACE
- nF++;
- printf("free nF=%d size=%d ptr=0x%p \n",nF,sizetable[bucket],ptr); fflush(stdout);
-# endif
- MPIU_Free(ptr);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
-# ifdef TRACE
- nFrees++;
- printf("MPIDI_mm_free: %p \n",ptr);
-# endif
-}
-#endif /* #if TOKEN_FLOW_CONTROL */
diff --git a/src/mpid/pamid/src/mpidi_env.c b/src/mpid/pamid/src/mpidi_env.c
deleted file mode 100644
index 09d7764..0000000
--- a/src/mpid/pamid/src/mpidi_env.c
+++ /dev/null
@@ -1,1314 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpidi_env.c
- * \brief Read Env Vars
- */
-
-#include <mpidimpl.h>
-
-#include "mpidi_util.h"
-
-/** \page env_vars Environment Variables
- ***************************************************************************
- * Pt2Pt Options *
- ***************************************************************************
- *
- * - PAMID_EAGER -
- * - PAMID_RZV - Sets the cutoff for the switch to the rendezvous protocol.
- * The two options are identical. This takes an argument, in bytes,
- * to switch from the eager protocol to the rendezvous protocol for point-to-point
- * messaging. Increasing the limit might help for larger partitions
- * and if most of the communication is nearest neighbor.
- * - Default is 2049 bytes.
- *
- * - PAMID_EAGER_LOCAL -
- * - PAMID_RZV_LOCAL - Sets the cutoff for the switch to the rendezvous protocol
- * when the destination rank is local. The two options are identical. This
- * takes an argument, in bytes, to switch from the eager protocol to the
- * rendezvous protocol for point-to-point messaging. The default value
- * effectively disables the eager protocol for local transfers.
- * - Default is 0 bytes.
- *
- * - PAMID_RMA_PENDING - Maximum outstanding RMA requests.
- * Limits number of PAMI_Request objects allocated by MPI Onesided operations.
- * - Default is 1000.
- *
- * - PAMID_SHMEM_PT2PT - Determines if intranode point-to-point communication will
- * use the optimized shared memory protocols.
- * - Default is 1.
- ***************************************************************************
- * High-level Options *
- ***************************************************************************
- *
- * - PAMID_THREAD_MULTIPLE - Specifies the messaging execution environment.
- * It specifically selects whether there can be multiple independent
- * communications occurring in parallel, driven by internal communications
- * threads.
- * - 0: The application threads drive the communications. No additional
- * internal communications threads are used.
- * - 1: There can be multiple independent communications occurring in
- * parallel, driven by internal communications threads.
- * Defaults to 0 when the application is linked with one of the "legacy"
- * MPICH libraries (gcc.legacy, xl.legacy, xl.legacy.ndebug), or when
- * MPI_Init_thread() is called without MPI_THREAD_MULTIPLE, and defaults
- * to 1 when the application is linked with one of the "non-legacy" MPICH
- * libraries (gcc, xl, xl.ndebug) and MPI_Init_thread() is called with
- * MPI_THREAD_MULTIPLE.
- * - NOTE: This environment variable has the same effect as setting
- * MPIR_CVAR_DEFAULT_THREAD_LEVEL=multiple
- *
- * - PAMID_CONTEXT_MAX - This variable sets the maximum allowable number
- * of contexts. Contexts are a method of dividing hardware resources
- * among a parallel active messaging interface (PAMI) client (for example,
- * MPI) to set how many parallel operations can occur at one time. Contexts
- * are similar to channels in a communications system. The practical
- * maximum is usually 64 processes per node. The default depends on the
- * processes per node.
- *
- * - PAMID_CONTEXT_POST - This variable is required to take advantage of
- * the parallelism of multiple contexts. This variable can increase
- * latency, but it is the only way to allow parallelism among contexts.
- * - 0: Only one parallel communications context can be used. Each
- * operation runs in the application thread.
- * - 1: Multiple parallel communications contexts can be used. An
- * operation is posted to one of the contexts, and communications
- * for that context are driven by communications threads.
- * The default value is 1 when using the gcc, xl, and xl.ndebug libraries
- * and MPI_Init_thread(... MPI_THREAD_MULTIPLE ...), and 0 otherwise.
- *
- * - PAMID_ASYNC_PROGRESS - This variable enables or disables the async
- * progress extension.
- *
- * - PAMID_COLLECTIVES - Controls whether optimized collectives are used.
- * Possible values:
- * - 0 - Optimized collectives are not used.
- * - 1 - Optimized collectives are used.
- * If this is set to 0, only MPICH point-to-point based collectives will be used.
- *
- * - PAMID_COLLECTIVES_SELECTION - Turns on optimized collective selection. If this
- * is not on, only the generic PGAS "always works" algorithms will be selected. This
- * can still be better than PAMID_COLLECTIVES=0. Additionally, setting this off
- * still allows environment variable selection of individual collectives protocols.
- * - 0 - Optimized collective selection is not used.
- * - 1 - Optimized collective selection is used. (default)
- *
- * - PAMID_COLLECTIVES_MEMORY_OPTIMIZED - Controls whether collectives are
- * optimized to reduce memory usage. This may disable some PAMI collectives.
- * Possible values:
- * - 0 - Collectives are not memory optimized.
- * - n - Collectives are memory optimized. Levels are bitwise values :
- * MPID_OPT_LVL_IRREG = 1, Do not optimize irregular communicators
- * MPID_OPT_LVL_NONCONTIG = 2, Disable some non-contig collectives
- *
- * PAMID_OPTIMIZED_SUBCOMMS - Use PAMI 'optimized' collectives. Defaullt is 1.
- * - 0 - Some optimized protocols may be disabled.
- * - 1 - All performance optimized protocols will be enabled when available
- *
- * - PAMID_VERBOSE - Increases the amount of information dumped during an
- * MPI_Abort() call and during varoius MPI function calls. Possible values:
- * - 0 - No additional information is dumped.
- * - 1 - Useful information is printed from MPI_Init(). This option does
- * NOT impact performance (other than a tiny bit during MPI_Init()) and
- * is highly recommended for all applications. It will display which PAMID_
- * and BG_ env vars were used. However, it does NOT guarantee you typed the
- * env vars in correctly :)
- * - 2 - This turns on a lot of verbose output for collective selection,
- * including a list of which protocols are viable for each communicator
- * creation. This can be a lot of output, but typically only at
- * communicator creation. Additionally, if PAMID_STATISTICS are on,
- * queue depths for point-to-point operations will be printed for each node
- * during MPI_Finalize();
- * - 3 - This turns on a lot of per-node information (plus everything
- * at the verbose=2 level). This can be a lot of information and is
- * rarely recommended.
- * - Default is 0. However, setting to 1 is recommended.
- *
- * - PAMID_STATISTICS - Turns on statistics printing for the message layer
- * such as the maximum receive queue depth. Possible values:
- * - 0 - No statistics are printedcmf_bcas.
- * - 1 - Statistics are printed.
- * - Default is 0.
- *
- ***************************************************************************
- ***************************************************************************
- ** Collective Options **
- ***************************************************************************
- ***************************************************************************
- *
- ***************************************************************************
- * General Collectives Options *
- ***************************************************************************
- *
- * - PAMID_NUMREQUESTS - Sets the number of outstanding asynchronous
- * collectives to have before a barrier is called. This is used when
- * the PAMI collective metadata indicates 'asyncflowctl' may be needed
- * to avoid 'flooding' other participants with unexpected data.
- * Higher numbers can help on larger partitions and larger message sizes.
- *
- * After every {PAMID_NUMREQUESTS} async collectives, the "glue" will call
- * a barrier.
- * - Default is 1 (guaranteed functionality)
- * - N>1may used to tune performance
- *
- ***************************************************************************
- * "Safety" Options *
- ***************************************************************************
- *
- * - PAMID_SAFEALLGATHER - Some optimized allgather protocols require
- * contiguous datatypes and similar datatypes on all nodes. To verify
- * this is true, we must do an allreduce at the beginning of the
- * allgather call. If the application uses "well behaved" datatypes, you can
- * set this option to skip over the allreduce. This is most useful in
- * irregular subcommunicators where the allreduce can be expensive and in
- * applications calling MPI_Allgather() with simple/regular datatypes.
- * Datatypes must also be 16-byte aligned to use the optimized
- * broadcast-based allgather for larger allgather sendcounts. See
- * PAMID_PREALLREDUCE for more options
- * Possible values:
- * - N - Perform the preallreduce.
- * - Y - Skip the preallreduce. Setting this with "unsafe" datatypes will
- * yield unpredictable results, usually hangs.
- * - Default is N.
- *
- * - PAMID_SAFEALLGATHERV - The optimized allgatherv protocols require
- * contiguous datatypes and similar datatypes on all nodes. Allgatherv
- * also requires continuous displacements. To verify
- * this is true, we must do an allreduce at the beginning of the
- * allgatherv call. If the application uses "well behaved" datatypes and
- * displacements, you can set this option to skip over the allreduce.
- * This is most useful in irregular subcommunicators where the allreduce
- * can be expensive and in applications calling MPI_Allgatherv() with
- * simple/regular datatypes.
- * Datatypes must also be 16-byte aligned to use the optimized
- * broadcast-based allgather for larger allgather sendcounts. See
- * PAMID_PREALLREDUCE for more options
- * Possible values:
- * - N - Perform the allreduce.
- * - Y - Skip the allreduce. Setting this with "unsafe" datatypes will
- * yield unpredictable results, usually hangs.
- * - Default is N.
- *
- * - PAMID_SAFESCATTERV - The optimized scatterv protocol requires
- * contiguous datatypes and similar datatypes on all nodes. It
- * also requires continuous displacements. To verify
- * this is true, we must do an allreduce at the beginning of the
- * scatterv call. If the application uses "well behaved" datatypes and
- * displacements, you can set this option to skip over the allreduce.
- * This is most useful in irregular subcommunicators where the allreduce
- * can be expensive. We have seen more applications with strange datatypes
- * passed to scatterv than allgather/allgatherv/bcast/allreduce, so it is
- * more likely you need to leave this at the default setting. However, we
- * encourage you to try turning this off and seeing if your application
- * completes successfully.
- * Possible values:
- * - N - Perform the allreduce.
- * - Y - Skip the allreduce. Setting this with "unsafe" datatypes will
- * yield unpredictable results, usually hangs.
- * - Default is N.
- *
- * - PAMID_PREALLREDUCE - Controls the protocol used for the pre-allreducing
- * employed by allgather(v), and scatterv. This option
- * is independant from PAMID_ALLREDUCE. The available protocols can be
- * determined with PAMID_VERBOSE=2. If collective selection is on, we will
- * attempt to use the fastest protocol for the given communicator.
- *
- ***************************************************************************
- * Specific Collectives Switches *
- ***************************************************************************
- *
- * - PAMID_ALLGATHER - Controls the protocol used for allgather.
- * Possible values:
- * - MPICH - Turn off all optimizations for allgather and use the MPICH
- * point-to-point protocol. This can be very bad on larger partitions.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_ALLGATHER=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_ALLGATHERV - Controls the protocol used for allgatherv.
- * Possible values:
- * - MPICH - Turn off all optimizations for allgather and use the MPICH
- * point-to-point protocol. This can be very bad on larger partitions.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_ALLGATHERV=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_ALLREDUCE - Controls the protocol used for allreduce.
- * Possible values:
- * - MPICH - Turn off all optimizations for allreduce and use the MPICH
- * point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * Note: Many allreduce algorithms are in the "must query" category and
- * might or might not be available for a specific callsite.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_ALLREDUCE=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_ALLTOALL -
- * - PAMID_ALLTOALLV - Controls the protocol used for
- * alltoall/alltoallv Possible values:
- * - MPICH - Turn off all optimizations and use the MPICH
- * point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_ALLTOALL=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- *
- * - PAMID_BARRIER - Controls the protocol used for barriers.
- * Possible values:
- * - MPICH - Turn off optimized barriers and use the MPICH
- * point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_BARRIER=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_BCAST - Controls the protocol used for broadcast. Possible values:
- * - MPICH - Turn off all optimizations for broadcast and use the MPICH
- * point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_BCAST=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_GATHER - Controls the protocol used for gather.
- * Possible values:
- * - MPICH - Use the MPICH point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_GATHER=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_REDUCE - Controls the protocol used for reduce.
- * Possible values:
- * - MPICH - Turn off all optimizations and use the MPICH point-to-point
- * protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_REDUCE=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_REDUCE_SCATTER - Controls the protocol used for reduce_scatter
- * operations. The options for PAMID_SCATTERV and PAMID_REDUCE can change the
- * behavior of reduce_scatter. Possible values:
- * - MPICH - Use the MPICH point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_REDUCESCATTER=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_SCATTER - Controls the protocol used for scatter.
- * Possible values:
- * - MPICH - Use the MPICH point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_SCATTER=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- * - PAMID_SCATTERV - Controls the protocol used for scatterv.
- * Possible values:
- * - MPICH - Use the MPICH point-to-point protocol.
- * - Other options can be determined by running with PAMID_VERBOSE=2.
- * TODO: Implement the NO options
- * NOTE: Individual options may be turned off by prefixing them with "NO".
- * For example, PAMID_SCATTERV=NO{specific protocol name} will prevent the
- * use of the specified protocol.
- *
- *
- */
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
-int prtStat=0;
-int prtEnv=0;
-
-MPIX_stats_t *mpid_statp=NULL;
-extern MPIDI_printenv_t *mpich_env;
-#endif
-
-#define ENV_Deprecated(a, b, c, d, e) ENV_Deprecated__(a, b, c, d, e)
-
-#ifdef TOKEN_FLOW_CONTORL
- extern int MPIDI_get_buf_mem(unsigned long *);
- extern int MPIDI_atoi(char* , int* );
-#endif
- extern int application_set_eager_limit;
-
-static inline void
-ENV_Deprecated__(char* name[], unsigned num_supported, unsigned* deprecated, int rank, int NA)
-{
- if (name == NULL) return;
-
- unsigned i;
- char * env;
-
- for (i=0; i<num_supported; ++i)
- {
- if (name[i] == NULL) return;
-
- if (NA)
- {
- env = getenv(name[i]);
- if (env != NULL)
- {
- if (rank == 0)
- {
- if (*deprecated == 0)
- fprintf (stderr, "\n");
-
- fprintf (stderr, "The environment variable \"%s\" is not applicable.\n", name[i]);
- }
- *deprecated = 1;
- }
- }
- }
-
- for (i=num_supported; name[i] != NULL; ++i)
- {
- env = getenv(name[i]);
- if (env != NULL)
- {
- if (rank == 0)
- {
- if (*deprecated == 0)
- fprintf (stderr, "\n");
-
- if (NA)
- fprintf (stderr, "The environment variable \"%s\" is deprecated.\n", name[i]);
- else
- {
- char supported[10240];
- int n, index = 0;
- index += snprintf(&supported[index], 10240-index-1, "\"%s\"", name[0]);
- for (n=1; n<num_supported; ++n)
- index += snprintf(&supported[index], 10240-index-1, " or \"%s\"", name[n]);
-
- fprintf (stderr, "The environment variable \"%s\" is deprecated. Consider using %s instead.\n", name[i], supported);
- }
- }
- *deprecated = 1;
- }
- }
-}
-
-#define ENV_Unsigned(a, b, c, d, e) ENV_Unsigned__(a, b, #b, c, d, e, 0)
-
-#define ENV_Unsigned_NA(a, b, c, d, e) ENV_Unsigned__(a, b, #b, c, d, e, 1)
-
-static inline void
-ENV_Unsigned__(char* name[], unsigned* val, char* string, unsigned num_supported, unsigned* deprecated, int rank, int NA)
-{
- /* Check for deprecated environment variables. */
- if (deprecated != NULL)
- ENV_Deprecated(name, num_supported, deprecated, rank, NA);
-
- char * env;
- int rc;
-
- unsigned i=0;
- for (;; ++i) {
- if (name[i] == NULL)
- return;
- env = getenv(name[i]);
- if (env != NULL)
- break;
- }
-
- unsigned oldval = *val;
- rc=MPIDI_atoi(env,val);
- if(rc != 0)
- {
- /* Something went wrong with the processing this integer
- * Print a warning, and restore the original value */
- *val = oldval;
- fprintf(stderr, "Warning: Environment variable: %s should be an integer value: defaulting to %d", string, *val);
- return;
- }
-
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && rank == 0)
- fprintf(stderr, "%s = %u\n", string, *val);
-}
-
-
-#define ENV_Char(a, b) ENV_Char__(a, b, #b)
-static inline void
-ENV_Char__(char* name[], unsigned* val, char* string)
-{
- char * env;
- unsigned i=0;
- for (;; ++i) {
- if (name[i] == NULL)
- return;
- env = getenv(name[i]);
- if (env != NULL)
- break;
- }
-
- if ( (env[0]=='y')|| (env[0]=='Y')
- || (env[0]=='p')|| (env[0]=='P')
- || (env[0]=='t')|| (env[0]=='T')
- || (env[0]=='r')|| (env[0]=='R')
- || (env[0]=='F')|| (env[0]=='f'))
- *val = 1;
- /*This may seem redundant; however,
- in some cases we need to force val=0 if value = no/none*/
- if ((env[0]=='n')|| (env[0]=='N'))
- *val = 0;
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL)
- fprintf(stderr, "%s = %u\n", string, *val);
-}
-
-#define ENV_Char2(a, b) ENV_Char2__(a, b, #b)
-static inline void
-ENV_Char2__(char* name[], char** val, char* string)
-{
- unsigned i=0;
- for (;; ++i) {
- if (name[i] == NULL)
- return;
- *val = getenv(name[i]);
- if (*val != NULL)
- break;
- }
-
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL)
- fprintf(stderr, "%s = %s\n", string, *val);
-}
-
-/** \brief Checks the Environment variables at initialization and stores the results.
- *
- * \param [in] rank The process rank; used to limit output
- * \param [in] requested The thread model requested by the user
- */
-void
-MPIDI_Env_setup(int rank, int requested)
-{
- unsigned found_deprecated_env_var = 0;
-
- /* Set defaults for various environment variables */
-
- /* Set the verbosity level. When set, this will print information at finalize. */
- {
- char* names[] = {"PAMID_VERBOSE", "PAMI_VERBOSE", NULL};
- ENV_Unsigned(names, &MPIDI_Process.verbose, 1, &found_deprecated_env_var, rank);
- }
-
- /* Enable statistics collection. */
- {
- char* names[] = {"PAMID_STATISTICS", "PAMI_STATISTICS", NULL};
- ENV_Unsigned(names, &MPIDI_Process.statistics, 1, &found_deprecated_env_var, rank);
- }
-
- /* Set async flow control - number of collectives between barriers */
- {
- char* names[] = {"PAMID_NUMREQUESTS", NULL};
- ENV_Unsigned(names, &MPIDI_Process.optimized.num_requests, 1, &found_deprecated_env_var, rank);
- TRACE_ERR("MPIDI_Process.optimized.num_requests=%u\n", MPIDI_Process.optimized.num_requests);
- }
-
- /* "Globally" set the optimization flag for low-level collectives in geometry creation.
- * This is probably temporary. metadata should set this flag likely.
- */
- {
- /* THIS ENVIRONMENT VARIABLE NEEDS TO BE DOCUMENTED ABOVE */
- char *names[] = {"PAMID_OPTIMIZED_SUBCOMMS", "PAMI_OPTIMIZED_SUBCOMMS", NULL};
- ENV_Unsigned(names, &MPIDI_Process.optimized.subcomms, 1, &found_deprecated_env_var, rank);
- TRACE_ERR("MPIDI_Process.optimized.subcomms=%u\n", MPIDI_Process.optimized.subcomms);
- }
-
- /* Set the threads values from a single override. */
- {
- unsigned value = (unsigned)-1;
- char* names[] = {"PAMID_THREAD_MULTIPLE", NULL};
- ENV_Unsigned(names, &value, 1, &found_deprecated_env_var, rank);
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- /* Any mpich work function posted to a context that eventually initiates
- * other communcation transfers will hang on a lock attempt if the
- * 'context post' feature is not enabled. Until this code flow is fixed
- * the context post must not be disabled.
- *
- * See discussion in src/mpid/pamid/include/mpidi_macros.h
- * -> MPIDI_Context_post()
- */
- MPIDI_Process.perobj.context_post.requested = 1;
- if (value == 1) /* force on */
- {
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_DEFAULT;
- MPIDI_Process.avail_contexts = MPIDI_MAX_CONTEXTS;
- }
- else if (value == 0) /* force off */
- {
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_DISABLED;
- MPIDI_Process.avail_contexts = 1;
- }
- else if (requested != MPI_THREAD_MULTIPLE)
- {
-#ifdef BGQ_SUPPORTS_TRIGGER_ASYNC_PROGRESS
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_TRIGGER;
- MPIDI_Process.avail_contexts = MPIDI_MAX_CONTEXTS;
-#else
- /* BGQ does not support the 'trigger' style of async progress. Until
- * this is implemented, set the async progress configuration to the
- * 'single threaded' defaults.
- */
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_DISABLED;
- MPIDI_Process.avail_contexts = 1;
-#endif
- }
-#else
- /* The only valid async progress mode when using the 'global' mpich lock
- * mode is the 'trigger' async progress mode. Also, the 'global' mpich lock
- * mode only supports a single context.
- *
- * See discussions in mpich/src/mpid/pamid/src/mpid_init.c and
- * src/mpid/pamid/src/mpid_progress.h for more information.
- */
- if (value == 1) /* force on */
- {
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_TRIGGER;
- MPIDI_Process.avail_contexts = 1;
- }
- else if (value == 0) /* force off */
- {
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_DISABLED;
- MPIDI_Process.avail_contexts = 1;
- }
-#endif
- }
-
- /* Set the upper-limit of number of PAMI Contexts. */
- {
- unsigned value = (unsigned)-1;
- char *names[] = {"PAMID_CONTEXT_MAX", "PAMI_MAXCONTEXT", "PAMI_MAXCONTEXTS", "PAMI_MAX_CONTEXT", "PAMI_MAX_CONTEXTS", NULL};
- ENV_Unsigned(names, &value, 1, &found_deprecated_env_var, rank);
-
- if (value != -1)
- {
-#if (MPICH_THREAD_GRANULARITY != MPICH_THREAD_GRANULARITY_PER_OBJECT)
- /* The 'global' mpich lock mode only supports a single context.
- * See discussion in mpich/src/mpid/pamid/src/mpid_init.c for more
- * information.
- */
- if (value > 1)
- {
- found_deprecated_env_var++;
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_SUMMARY_0 && rank == 0)
- fprintf(stderr, "The environment variable \"PAMID_CONTEXT_MAX\" is invalid as this mpich library was configured.\n");
- }
-#endif
- if (value == 0)
- {
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_SUMMARY_0 && rank == 0)
- fprintf(stderr, "The environment variable \"PAMID_CONTEXT_MAX\" must specify a value > 0. The number of contexts will be set to 1\n");
-
- value=1;
- }
-
- MPIDI_Process.avail_contexts=value;
- }
-
- TRACE_ERR("MPIDI_Process.avail_contexts=%u\n", MPIDI_Process.avail_contexts);
- }
-
- /* Enable context post. */
- {
- unsigned value = (unsigned)-1;
- char *names[] = {"PAMID_CONTEXT_POST", "PAMI_CONTEXT_POST", NULL};
- ENV_Unsigned(names, &value, 1, &found_deprecated_env_var, rank);
- if (value != -1)
- {
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- MPIDI_Process.perobj.context_post.requested = (value > 0);
-#else
- found_deprecated_env_var++;
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_SUMMARY_0 && rank == 0)
- fprintf(stderr, "The environment variable \"PAMID_CONTEXT_POST\" is invalid as this mpich library was configured.\n");
-#endif
- }
- TRACE_ERR("MPIDI_Process.perobj.context_post.requested=%u\n", MPIDI_Process.perobj.context_post.requested);
- }
-
- /* Enable/Disable asynchronous progress. */
- {
- /* THIS ENVIRONMENT VARIABLE NEEDS TO BE DOCUMENTED ABOVE */
- unsigned value = (unsigned)-1;
- char *names[] = {"PAMID_ASYNC_PROGRESS", "PAMID_COMMTHREADS", "PAMI_COMMTHREAD", "PAMI_COMMTHREADS", "PAMI_COMM_THREAD", "PAMI_COMM_THREADS", NULL};
- ENV_Unsigned(names, &value, 1, &found_deprecated_env_var, rank);
-
- if (value != (unsigned)-1)
- {
- if (value != ASYNC_PROGRESS_MODE_DISABLED)
- {
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- if (value == ASYNC_PROGRESS_MODE_LOCKED &&
- MPIDI_Process.perobj.context_post.requested == 0)
- {
- /* The 'locked' async progress mode requires context post.
- *
- * See discussion in src/mpid/pamid/src/mpid_progress.h for more
- * information.
- */
- found_deprecated_env_var++;
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_SUMMARY_0 && rank == 0)
- fprintf(stderr, "The environment variable \"PAMID_ASYNC_PROGRESS=1\" requires \"PAMID_CONTEXT_POST=1\".\n");
- }
-
-#else /* (MPICH_THREAD_GRANULARITY != MPICH_THREAD_GRANULARITY_PER_OBJECT) */
- if (value == ASYNC_PROGRESS_MODE_LOCKED)
- {
- /* The only valid async progress mode when using the 'global' mpich
- * lock mode is the 'trigger' async progress mode.
- *
- * See discussion in src/mpid/pamid/src/mpid_progress.h for more
- * information.
- */
- found_deprecated_env_var++;
- if (MPIDI_Process.verbose >= MPIDI_VERBOSE_SUMMARY_0 && rank == 0)
- fprintf(stderr, "The environment variable \"PAMID_ASYNC_PROGRESS=1\" is invalid as this mpich library was configured.\n");
-
- }
-#endif
- }
-
- MPIDI_Process.async_progress.mode = value;
- }
- TRACE_ERR("MPIDI_Process.async_progress.mode=%u\n", MPIDI_Process.async_progress.mode);
- }
-
- /*
- * Determine 'short' limit
- * - sets both the 'local' and 'remote' short limit, and
- * - sets both the 'application' and 'internal' short limit
- *
- * Identical to setting the PAMID_PT2PT_LIMITS environment variable as:
- *
- * PAMID_PT2PT_LIMITS="::x:x:::x:x"
- */
- {
- /* THIS ENVIRONMENT VARIABLE NEEDS TO BE DOCUMENTED ABOVE */
- char* names[] = {"PAMID_SHORT", "MP_S_SHORT_LIMIT", "PAMI_SHORT", NULL};
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.application.immediate.remote, 2, &found_deprecated_env_var, rank);
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.application.immediate.local, 2, NULL, rank);
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.internal.immediate.remote, 2, NULL, rank);
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.internal.immediate.local, 2, NULL, rank);
- }
-
- /*
- * Determine 'remote' eager limit
- * - sets both the 'application' and 'internal' remote eager limit
- *
- * Identical to setting the PAMID_PT2PT_LIMITS environment variable as:
- *
- * PAMID_PT2PT_LIMITS="x::::x:::"
- * -- or --
- * PAMID_PT2PT_LIMITS="x::::x"
- */
- {
- char* names[] = {"PAMID_EAGER", "PAMID_RZV", "MP_EAGER_LIMIT", "PAMI_RVZ", "PAMI_RZV", "PAMI_EAGER", NULL};
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.application.eager.remote, 3, &found_deprecated_env_var, rank);
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.internal.eager.remote, 3, NULL, rank);
- }
-#if TOKEN_FLOW_CONTROL
- /* Determine if users set eager limit */
- {
- MPIDI_set_eager_limit(&MPIDI_Process.pt2pt.limits.application.eager.remote);
- }
- /* Determine buffer memory for early arrivals */
- {
- int rc;
- rc=MPIDI_get_buf_mem(&MPIDI_Process.mp_buf_mem,&MPIDI_Process.mp_buf_mem_max);
- MPID_assert_always(rc == MPI_SUCCESS);
- }
-#endif
-
- /*
- * Determine 'local' eager limit
- * - sets both the 'application' and 'internal' local eager limit
- *
- * Identical to setting the PAMID_PT2PT_LIMITS environment variable as:
- *
- * PAMID_PT2PT_LIMITS=":x::::x::"
- * -- or --
- * PAMID_PT2PT_LIMITS=":x::::x"
- */
- {
- char* names[] = {"PAMID_RZV_LOCAL", "PAMID_EAGER_LOCAL", "MP_EAGER_LIMIT_LOCAL", "PAMI_RVZ_LOCAL", "PAMI_RZV_LOCAL", "PAMI_EAGER_LOCAL", NULL};
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.application.eager.local, 3, &found_deprecated_env_var, rank);
- ENV_Unsigned(names, &MPIDI_Process.pt2pt.limits.internal.eager.local, 3, NULL, rank);
- }
-
- /*
- * Determine *all* point-to-point limit overrides.
- *
- * The entire point-to-point limit set is determined by three boolean
- * configuration values:
- * - 'is non-local limit' vs 'is local limit'
- * - 'is eager limit' vs 'is immediate limit'
- * - 'is application limit' vs 'is internal limit'
- *
- * The point-to-point configuration limit values are specified in order and
- * are delimited by ':' characters. If a value is not specified for a given
- * configuration then the limit is not changed. All eight configuration
- * values are not required to be specified, although in order to set the
- * last (eighth) configuration value the previous seven configurations must
- * be listed. For example:
- *
- * PAMID_PT2PT_LIMITS=":::::::10240"
- *
- * The configuration entries can be described as:
- * 0 - remote eager application limit
- * 1 - local eager application limit
- * 2 - remote immediate application limit
- * 3 - local immediate application limit
- * 4 - remote eager internal limit
- * 5 - local eager internal limit
- * 6 - remote immediate internal limit
- * 7 - local immediate internal limit
- *
- * Examples:
- *
- * "10240"
- * - sets the application internode eager (the "normal" eager limit)
- *
- * "10240::64"
- * - sets the application internode eager and immediate limits
- *
- * "::::0:0:0:0"
- * - disables 'eager' and 'immediate' for all internal point-to-point
- */
- {
- char * env = getenv("PAMID_PT2PT_LIMITS");
- if (env != NULL)
- {
- size_t i, n = strlen(env);
- char * tmp = (char *) MPIU_Malloc(n+1);
- strncpy(tmp,env,n);
- if (n>0) tmp[n]=0;
-
- char * tail = tmp;
- char * token = tail;
- for (i = 0; token == tail; i++)
- {
- while (*tail != 0 && *tail != ':') tail++;
- if (*tail == ':')
- {
- *tail = 0;
- if (token != tail)
- MPIDI_atoi(token, &MPIDI_Process.pt2pt.limits_array[i]);
- tail++;
- token = tail;
- }
- else
- {
- if (token != tail)
- MPIDI_atoi(token, &MPIDI_Process.pt2pt.limits_array[i]);
- }
- }
-
- MPIU_Free (tmp);
- }
- }
-
- /* Set the maximum number of outstanding RDMA requests */
- {
- char* names[] = {"PAMID_RMA_PENDING", "MP_RMA_PENDING", "PAMI_RMA_PENDING", NULL};
- ENV_Unsigned(names, &MPIDI_Process.rma_pending, 2, &found_deprecated_env_var, rank);
- }
-
- /* Set the status of the optimized collectives */
- {
- char* names[] = {"PAMID_COLLECTIVES", "PAMI_COLLECTIVE", "PAMI_COLLECTIVES", NULL};
- ENV_Unsigned(names, &MPIDI_Process.optimized.collectives, 1, &found_deprecated_env_var, rank);
- TRACE_ERR("MPIDI_Process.optimized.collectives=%u\n", MPIDI_Process.optimized.collectives);
- }
-
- /* First, if MP_COLLECTIVE_OFFLOAD is "on", then we want PE (FCA) collectives */
- {
- unsigned temp;
- temp = 0;
- char* names[] = {"MP_COLLECTIVE_OFFLOAD", NULL};
- ENV_Char(names, &temp);
- if(temp)
- MPIDI_Process.optimized.collectives = MPID_COLL_FCA;
- }
-
- /* However, MP_MP_PAMI_FOR can be set to "none" in which case we don't want PE (FCA) collectives */
- {
- char *env = getenv("MP_MPI_PAMI_FOR");
- if(env != NULL)
- {
- if(strncasecmp(env, "N", 1) == 1)
- MPIDI_Process.optimized.collectives = MPID_COLL_OFF;
- }
- }
-
- /* Set the status for optimized selection of collectives */
- {
- char* names[] = {"PAMID_COLLECTIVES_SELECTION", NULL};
- ENV_Unsigned(names, &MPIDI_Process.optimized.select_colls, 1, &found_deprecated_env_var, rank);
- TRACE_ERR("MPIDI_Process.optimized.select_colls=%u\n", MPIDI_Process.optimized.select_colls);
- }
-
- /* Finally, if MP_COLLECTIVE_SELECTION is "on", then we want to overwrite any other setting */
- {
- char *env = getenv("MP_COLLECTIVE_SELECTION");
- if(env != NULL)
- {
- pami_extension_t extension;
- pami_result_t status = PAMI_ERROR;
- status = PAMI_Extension_open (MPIDI_Client, "EXT_collsel", &extension);
- if(status == PAMI_SUCCESS)
- {
- char *env = getenv("MP_COLLECTIVE_SELECTION");
- if(env != NULL)
- {
- if(strncasecmp(env, "TUN", 3) == 0)
- {
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_TUNE;
- if(MPIDI_Process.optimized.collectives != MPID_COLL_FCA)
- MPIDI_Process.optimized.collectives = MPID_COLL_ON;
- }
- else if(strncasecmp(env, "YES", 3) == 0)
- {
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_ALL; /* All collectives will be using auto coll sel.
- We will check later on each individual coll. */
- if(MPIDI_Process.optimized.collectives != MPID_COLL_FCA)
- MPIDI_Process.optimized.collectives = MPID_COLL_ON;
- }
- else
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;
-
- }
- }
- else
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;/* Auto coll sel is disabled for all */
- }
- else
- MPIDI_Process.optimized.auto_select_colls = MPID_AUTO_SELECT_COLLS_NONE;/* Auto coll sel is disabled for all */
- }
-
- /* Set the status for memory optimized collectives */
- {
- char* names[] = {"PAMID_COLLECTIVES_MEMORY_OPTIMIZED", NULL};
- ENV_Unsigned(names, &MPIDI_Process.optimized.memory, 1, &found_deprecated_env_var, rank);
- TRACE_ERR("MPIDI_Process.optimized.memory=%u\n", MPIDI_Process.optimized.memory);
- }
-
- /* Set the status of the optimized shared memory point-to-point functions */
- {
- char* names[] = {"PAMID_SHMEM_PT2PT", "PAMI_SHMEM_PT2PT", NULL};
- ENV_Unsigned(names, &MPIDI_Process.shmem_pt2pt, 2, &found_deprecated_env_var, rank);
- }
-
- /* MP_SHMEM_PT2PT = yes or no */
- {
- char* names[] = {"MP_SHMEM_PT2PT", NULL};
- ENV_Char(names, &MPIDI_Process.shmem_pt2pt);
- }
-
- /* Enable MPIR_* implementations of non-blocking collectives */
- {
- char* names[] = {"PAMID_MPIR_NBC", NULL};
- ENV_Unsigned(names, &MPIDI_Process.mpir_nbc, 1, &found_deprecated_env_var, rank);
- }
-
- /* Enable typed PAMI calls for derived types within MPID_Put and MPID_Get. */
- {
- char* names[] = {"PAMID_TYPED_ONESIDED", NULL};
- ENV_Unsigned(names, &MPIDI_Process.typed_onesided, 1, &found_deprecated_env_var, rank);
- }
- /* Check for deprecated collectives environment variables. These variables are
- * used in src/mpid/pamid/src/comm/mpid_selectcolls.c */
- {
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLGATHER", "PAMI_ALLGATHER", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLGATHER_PREALLREDUCE", "PAMI_ALLGATHER_PREALLREDUCE", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLGATHERV", "PAMI_ALLGATHERV", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLGATHERV_PREALLREDUCE", "PAMI_ALLGATHERV_PREALLREDUCE", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLREDUCE", "PAMI_ALLREDUCE", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLREDUCE_PREALLREDUCE", "PAMI_ALLREDUCE_PREALLREDUCE", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLTOALL", "PAMI_ALLTOALL", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLTOALLV", "PAMI_ALLTOALLV", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_ALLTOALLV_INT", "PAMI_ALLTOALLV_INT", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_BARRIER", "PAMI_BARRIER", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_BCAST", "PAMI_BCAST", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_BCAST_PREALLREDUCE", "PAMI_BCAST_PREALLREDUCE", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_GATHER", "PAMI_GATHER", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_GATHERV", "PAMI_GATHERV", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_REDUCE", "PAMI_REDUCE", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_SCAN", "PAMI_SCAN", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_SCATTER", "PAMI_SCATTER", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_SCATTERV", "PAMI_SCATTERV", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_COLLECTIVE_SCATTERV_PREALLREDUCE", "PAMI_SCATTERV_PREALLREDUCE", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
- {
- char* names[] = {"PAMID_CORE_ON_ABORT", "PAMI_COREONABORT", "PAMI_COREONMPIABORT", "PAMI_COREONMPIDABORT", NULL};
- ENV_Deprecated(names, 1, &found_deprecated_env_var, rank, 0);
- }
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- mpich_env=(MPIDI_printenv_t *) MPIU_Malloc(sizeof(MPIDI_printenv_t)+1);
- mpid_statp=(MPIX_stats_t *) MPIU_Malloc(sizeof(MPIX_stats_t)+1);
- memset((void *)mpich_env,0,sizeof(MPIDI_printenv_t));
- memset((void *)mpid_statp,0,sizeof(MPIX_stats_t));
- /* If MP_STATISTICS is set, each task prints statistics data at the end of an MPI jobs */
- {
- char* names[] = {"MP_STATISTICS", NULL};
- ENV_Char(names, &MPIDI_Process.mp_statistics);
- if (MPIDI_Process.mp_statistics) {
- prtStat=1;
- }
- }
- /* if MP_INFOLEVEL is greater than or equal to 1, the library will display the banner */
- {
- char* names[] = {"MP_INFOLEVEL", NULL};
- ENV_Unsigned(names, &MPIDI_Process.mp_infolevel, 1, &found_deprecated_env_var, rank);
- }
- /* If MP_PRINTENV is set, task 0 prints out the env. info after MPI_Init */
- {
- char* names[] = {"MP_PRINTENV", NULL};
- ENV_Char(names, &MPIDI_Process.mp_printenv);
- if (MPIDI_Process.mp_printenv) {
- prtEnv=1;
- }
- }
- /* MP_CSS_INTERRUPT */
- {
- char *cp=NULL, *cp1=NULL;
- int user_interrupts=0;
- char* names[] = {"MP_CSS_INTERRUPT", NULL};
- ENV_Char(names, &mpich_env->interrupts);
- if (mpich_env->interrupts == 1) /* force on */
- {
- cp = getenv("MP_CSS_INTERRUPT");
- if (*cp=='Y' || *cp=='y')
- {
- user_interrupts = ASYNC_PROGRESS_ALL;
- }
- else
- {
- char delimiter='+';
- cp1 = strchr(cp,delimiter);
- if (!cp1) /* timer or receive */
- {
- if ( (*cp == 't') || (*cp == 'T') )
- user_interrupts = PAMIX_PROGRESS_TIMER;
- else if ( (*cp == 'r') || (*cp == 'R') )
- user_interrupts = PAMIX_PROGRESS_RECV_INTERRUPT;
- }
- else /* timer + receive */
- {
- if ((( *cp == 't' || *cp == 'T') && ( *(cp1+1) == 'r' || *(cp1+1) == 'R')) ||
- (( *cp == 'r' || *cp == 'R') && ( *(cp1+1) == 't' || *(cp1+1) == 'T')))
- user_interrupts = ASYNC_PROGRESS_ALL;
- else
- {
- TRACE_ERR("ERROR in MP_CSS_INTERRUPT %s(%d)\n",__FILE__,__LINE__);
- exit(1);
- }
- }
- }
- MPIDI_Process.mp_interrupts=user_interrupts;
- MPIDI_Process.perobj.context_post.requested = 0;
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_TRIGGER;
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- MPIDI_Process.avail_contexts = MPIDI_MAX_CONTEXTS;
-#else
- MPIDI_Process.avail_contexts = 1;
-#endif
- }
- else if (mpich_env->interrupts == 0) /* force off */
- {
- MPIDI_Process.perobj.context_post.requested = 0;
- MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_DISABLED;
- MPIDI_Process.avail_contexts = 1;
- }
- }
- /* MP_POLLING_INTERVAL */
- {
- char* names[] = {"MP_POLLING_INTERVAL", NULL};
- ENV_Unsigned(names,(unsigned int *) &mpich_env->polling_interval,1, &found_deprecated_env_var, rank);
- }
-
- /* MP_RETRANSMIT_INTERVAL */
- {
- char* names[] = {"MP_RETRANSMIT_INTERVAL", NULL};
- ENV_Unsigned(names, &mpich_env->retransmit_interval,1, &found_deprecated_env_var, rank);
- }
-
- /* MP_S_USE_PAMI_GET */
- {
- char* names[] = {"MP_S_USE_PAMI_GET", NULL};
- ENV_Char(names, &MPIDI_Process.mp_s_use_pami_get);
- }
-#endif
- /* MP_S_SMP_DETECT */
- {
- char* names[] = {"MP_S_SMP_DETECT", "PAMID_SMP_DIRECT", NULL};
- ENV_Char(names, &MPIDI_Process.smp_detect);
- if(!MPIDI_Process.smp_detect)
- PAMIX_Extensions.is_local_task.node_info=NULL;
- }
-
- }
- {
-#if TOKEN_FLOW_CONTROL
- char* names[] = {"MP_USE_TOKEN_FLOW_CONTROL", NULL};
- ENV_Char(names, &MPIDI_Process.is_token_flow_control_on);
- if (!MPIDI_Process.is_token_flow_control_on)
- MPIDI_Process.mp_buf_mem=0;
-#endif
- }
-
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- char* names[] = {"MP_S_USE_QUEUE_BINARY_SEARCH_SUPPORT", NULL};
- ENV_Char(names, &MPIDI_Process.queue_binary_search_support_on);
-#endif
-
-#if CUDA_AWARE_SUPPORT
- char* names[] = {"MP_CUDA_AWARE", NULL};
- ENV_Char(names, &MPIDI_Process.cuda_aware_support_on);
- if(MPIDI_Process.cuda_aware_support_on && MPIDI_enable_cuda() == false)
- {
- MPIDI_Process.cuda_aware_support_on = false;
- if(rank == 0)
- {
- fprintf(stderr, "Error loading libcudart\n");fflush(stderr);sleep(1);exit(1);
- }
- }
- else if(MPIDI_Process.cuda_aware_support_on)
- {
- if(MPIDI_Process.optimized.collectives == MPID_COLL_FCA)
- if(rank == 0)
- {
- fprintf(stderr, "Warning: FCA is not supported with CUDA Aware support\n");fflush(stderr);
- }
-
- MPIDI_Process.optimized.collectives = MPID_COLL_CUDA;
- MPIDI_Process.optimized.select_colls = 0;
- }
-#endif
-
- /* Exit if any deprecated environment variables were specified. */
- if (found_deprecated_env_var)
- {
- if (rank == 0)
- {
- // Only rank 0 prints and exits. sleep to make sure message is sent before exiting.
- // Other ranks will proceed, but will be waiting in a barrier in context create
- // when the exit occurs.
- fprintf (stderr, "\n"); fflush(stderr); sleep(1);
- exit(1);
- }
- }
-}
-
-#if TOKEN_FLOW_CONTROL
-int MPIDI_set_eager_limit(unsigned int *eager_limit)
-{
- char *cp;
- int val;
- int numTasks=MPIDI_Process.numTasks;
- cp = getenv("MP_EAGER_LIMIT");
- if (cp)
- {
- application_set_eager_limit=1;
- if ( MPIDI_atoi(cp, &val) == 0 )
- *eager_limit=val;
- }
- else
- {
- /* set default
- * Number of tasks MP_EAGER_LIMIT
- * ----------------- --------------
- * 1 - 256 32768
- * 257 - 512 16384
- * 513 - 1024 8192
- * 1025 - 2048 4096
- * 2049 - 4096 2048
- * 4097 & above 1024
- */
- if (numTasks < 257) *eager_limit = 32768;
- else if (numTasks < 513) *eager_limit = 16384;
- else if (numTasks < 1025) *eager_limit = 8192;
- else if (numTasks < 2049) *eager_limit = 4096;
- else if (numTasks < 4097) *eager_limit = 2048;
- else *eager_limit = 1024;
-
- }
- return 0;
-}
-
- /******************************************************************/
- /* */
- /* Check for MP_BUFFER_MEM, if the value is not set by the user, */
- /* then set the value with the default of 64 MB. */
- /* MP_BUFFER_MEM supports the following format: */
- /* MP_BUFFER_MEM=xxM */
- /* MP_BUFFER_MEM=xxM,yyyM */
- /* MP_BUFFER_MEM=xxM,yyyG */
- /* MP_BUFFER_MEM=,yyyM */
- /* xx: pre allocated size the max. allowable value is 256 MB */
- /* the space is allocated during the initialization. */
- /* the default is 64 MB */
- /* yyy: maximum size - the maximum size to which the early arrival*/
- /* buffer can temporarily grow when the preallocated portion */
- /* of the EA buffer has been filled. */
- /* */
- /******************************************************************/
-int MPIDI_get_buf_mem(unsigned long *buf_mem,unsigned long *buf_mem_max)
- {
- char *cp;
- int i;
- int args_in_error=0;
- char pre_alloc_buf[25], buf_max[25];
- char *buf_max_cp;
- int pre_alloc_val=0;
- unsigned long buf_max_val;
- int has_error = 0;
- extern int application_set_buf_mem;
-
- if (cp = getenv("MP_BUFFER_MEM")) {
- pre_alloc_buf[24] = '\0';
- buf_max[24] = '\0';
- application_set_buf_mem=1;
- if ( (buf_max_cp = strchr(cp, ',')) ) {
- if ( *(++buf_max_cp) == '\0' ) {
- /* Error: missing buffer_mem_max */
- has_error = 1;
- }
- else if ( cp[0] == ',' ) {
- /* Pre_alloc value is default -- use default */
- pre_alloc_val = -1;
- strncpy(buf_max, buf_max_cp, 24);
- if ( MPIDI_atoll(buf_max, &buf_max_val) != 0 )
- has_error = 1;
- }
- else {
- /* both values are present */
- for (i=0; ; i++ ) {
- if ( (cp[i] != ',') && (i<24) )
- pre_alloc_buf[i] = cp[i];
- else {
- pre_alloc_buf[i] = '\0';
- break;
- }
- }
- strncpy(buf_max, buf_max_cp, 24);
- if ( MPIDI_atoi(pre_alloc_buf, &pre_alloc_val) == 0 ) {
- if ( MPIDI_atoll(buf_max, &buf_max_val) != 0 )
- has_error = 1;
- }
- else
- has_error = 1;
- }
- }
- else
- {
- /* Old single value format */
- if ( MPIDI_atoi(cp, &pre_alloc_val) == 0 )
- buf_max_val = (unsigned long)pre_alloc_val;
- else
- has_error = 1;
- }
- if ( has_error == 0) {
- if ((int) pre_alloc_val != -1) /* MP_BUFFER_MEM=,128MB */
- *buf_mem = (int) pre_alloc_val;
- if (buf_max_val > ONE_SHARED_SEGMENT)
- *buf_mem = ONE_SHARED_SEGMENT;
- if (buf_max_val != *buf_mem_max)
- *buf_mem_max = buf_max_val;
- } else {
- args_in_error += 1;
- TRACE_ERR("ERROR in MP_BUFFER_MEM %s(%d)\n",__FILE__,__LINE__);
- return 1;
- }
- return 0;
- } else {
- /* MP_BUFFER_MEM is not specified by the user*/
- *buf_mem = BUFFER_MEM_DEFAULT;
- TRACE_ERR("buffer_mem=%d buffer_mem_max=%d\n",*buf_mem,*buf_mem_max);
- return 0;
- }
-}
-#endif
diff --git a/src/mpid/pamid/src/mpidi_mutex.c b/src/mpid/pamid/src/mpidi_mutex.c
deleted file mode 100644
index 8411848..0000000
--- a/src/mpid/pamid/src/mpidi_mutex.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpidi_mutex.c
- * \brief ???
- */
-#include <mpidimpl.h>
-
-
-#if MPIDI_MUTEX_L2_ATOMIC
-
-static inline void*
-MPIDI_Mutex_initialize_l2atomics(size_t size)
-{
- typedef pami_result_t (*pamix_proc_memalign_fn) (void**, size_t, size_t, const char*);
-
- pami_result_t rc;
- pami_extension_t l2;
- pamix_proc_memalign_fn PAMIX_L2_proc_memalign;
- void* l2atomics = NULL;
-
- rc = PAMI_Extension_open(NULL, "EXT_bgq_l2atomic", &l2);
- MPID_assert_always(rc == PAMI_SUCCESS);
- PAMIX_L2_proc_memalign = (pamix_proc_memalign_fn)PAMI_Extension_symbol(l2, "proc_memalign");
- MPID_assert_always(PAMIX_L2_proc_memalign != NULL);
- rc = PAMIX_L2_proc_memalign(&l2atomics, 64, size, NULL);
- MPID_assert_always(rc == PAMI_SUCCESS);
- MPID_assert_always(l2atomics != NULL);
- /* printf("MPID L2 space: virt=%p HW=%p L2BaseAddress=%"PRIu64"\n", l2atomics, __l2_op_ptr(l2atomics, 0), Kernel_L2AtomicsBaseAddress()); */
-
- return l2atomics;
-}
-
-MPIDI_Mutex_t * MPIDI_Mutex_vector;
-uint32_t MPIDI_Mutex_counter[MPIDI_MAX_THREADS][MPIDI_MAX_MUTEXES];
-
-/**
- * \brief Initialize a mutex.
- *
- * In this API, mutexes are acessed via indices from
- * 0..MPIDI_MAX_MUTEXES. The mutexes are recursive
- */
-int
-MPIDI_Mutex_initialize()
-{
- size_t i, j;
-
- MPIDI_Mutex_vector = (MPIDI_Mutex_t*)MPIDI_Mutex_initialize_l2atomics(sizeof (MPIDI_Mutex_t) * MPIDI_MAX_MUTEXES);
-
- for (i=0; i<MPIDI_MAX_MUTEXES; ++i) {
- L2_AtomicStore(&(MPIDI_Mutex_vector[i].counter), 0);
- L2_AtomicStore(&(MPIDI_Mutex_vector[i].bound), 1);
- }
-
- for (i=0; i<MPIDI_MAX_MUTEXES; ++i) {
- for (j=0; j<MPIDI_MAX_THREADS; ++j) {
- MPIDI_Mutex_counter[j][i] = 0;
- }
- }
-
- return 0;
-}
-
-#elif MPIDI_MUTEX_LLSC
-
-MPIDI_Mutex_t MPIDI_Mutex_vector [MPIDI_MAX_MUTEXES];
-uint32_t MPIDI_Mutex_counter[MPIDI_MAX_THREADS][MPIDI_MAX_MUTEXES];
-
-#else
-
-pthread_mutex_t MPIDI_Mutex_lock;
-
-#endif
diff --git a/src/mpid/pamid/src/mpidi_nbc_sched.c b/src/mpid/pamid/src/mpidi_nbc_sched.c
deleted file mode 100644
index 998d03e..0000000
--- a/src/mpid/pamid/src/mpidi_nbc_sched.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpidi_nbc_sched.c
- * \brief Non-blocking collectives hooks
- */
-
-#include <pami.h>
-#include <mpidimpl.h>
-
-/**
- * work object for persistent advance of nbc schedules
- */
-pami_work_t mpidi_nbc_work_object;
-
-/**
- * \brief Persistent work function for nbc schedule progress
- */
-pami_result_t mpidi_nbc_work_function (pami_context_t context, void *cookie)
-{
- int made_progress = 0;
- MPIDU_Sched_progress (&made_progress);
-
- return PAMI_EAGAIN;
-}
-
-/**
- * \brief Initialize support for MPIR_* nbc implementation.
- *
- * The MPIR_* non-blocking collectives only work if the schedule is advanced.
- * This is done by posting a work function to context 0 that invokes the
- * schedule progress function.
- *
- * Because this is a persistent work function and will negatively impact the
- * performance of all other MPI operations - even when mpir non-blocking
- * collectives are not used - the work function is only posted if explicitly
- * requested.
- */
-void MPIDI_NBC_init ()
-{
- if (MPIDI_Process.mpir_nbc != 0)
- {
- PAMI_Context_post(MPIDI_Context[0],
- &mpidi_nbc_work_object,
- mpidi_nbc_work_function,
- NULL);
- }
-
- return;
-}
diff --git a/src/mpid/pamid/src/mpidi_pami_datatype.c b/src/mpid/pamid/src/mpidi_pami_datatype.c
deleted file mode 100644
index b700ea0..0000000
--- a/src/mpid/pamid/src/mpidi_pami_datatype.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpidi_pami_datatype.c
- * \brief pami_type_t datatype hooks
- */
-
-#include <pami.h>
-#include <mpidimpl.h>
-
-/**
- * \brief Create PAMI datatype representation of MPI Datatype during commit.
- *
- * Signifcant performance improvements can be realized for one-sided communication
- * utilizing the PAMI_Rput_typed and PAMI_Rget_typed interface which requires a
- * PAMI representation of the MPI Datatype.
- */
-void MPIDI_PAMI_datatype_commit_hook (MPI_Datatype *ptr)
-{
-
- /* If the PAMID optimization to utilize the PAMI_Rput_typed / PAMI_Rget_typed call for
- * one-sided comm for derived types is enabled then we need to create the PAMI datatype.
- */
- if (MPIDI_Process.typed_onesided == 1) {
-
- MPID_Datatype *datatype_ptr;
- MPID_Datatype_get_ptr(*ptr, datatype_ptr);
-
- pami_result_t pami_dtop_result;
- datatype_ptr->device_datatype = (pami_type_t *) MPIU_Malloc(sizeof(pami_type_t));
- pami_dtop_result = PAMI_Type_create ((pami_type_t *)datatype_ptr->device_datatype);
- MPIU_Assert(pami_dtop_result == PAMI_SUCCESS);
-
- /* Flatten the non-contiguous data type into arrays describing the contiguous chunks.
- */
- MPI_Aint *dt_offset_array = (MPI_Aint *) MPIU_Malloc(datatype_ptr->max_contig_blocks * sizeof(MPI_Aint));
- MPI_Aint *dt_size_array = (MPI_Aint *) MPIU_Malloc(datatype_ptr->max_contig_blocks * sizeof(MPI_Aint));
- MPI_Aint dt_array_len = datatype_ptr->max_contig_blocks;
- int rc = MPIR_Type_flatten(*ptr, dt_offset_array, dt_size_array, &dt_array_len);
-
- /* Build the PAMI datatype adding one contiguous chunk at a time with the PAMI_Type_add_simple
- * interface.
- */
- int i;
-
- for (i=0;i<dt_array_len;i++) {
- size_t num_bytes_this_entry = dt_size_array[i];
- size_t cursor_offset;
- if (i == 0)
- cursor_offset = (size_t) dt_offset_array[i];
- else
- cursor_offset = (size_t) dt_offset_array[i] - (size_t)dt_offset_array[i-1];
- pami_dtop_result = PAMI_Type_add_simple (*(pami_type_t*)(datatype_ptr->device_datatype), num_bytes_this_entry, cursor_offset, 1, 0);
- MPIU_Assert(pami_dtop_result == PAMI_SUCCESS);
- }
-
- /* Complete the PAMI datatype and free arrays.
- */
- pami_dtop_result = PAMI_Type_complete (*(pami_type_t*)(datatype_ptr->device_datatype),1);
- MPIU_Assert(pami_dtop_result == PAMI_SUCCESS);
- MPIU_Free(dt_offset_array);
- MPIU_Free(dt_size_array);
- }
- return;
-}
-
-/**
- * \brief Destroy PAMI datatype representation of MPI Datatype.
- *
- */
-void MPIDI_PAMI_datatype_destroy_hook (MPID_Datatype *ptr)
-{
- /* If a PAMI datatype was created, destroy it if this is the
- * last reference to the MPID_Datatype ptr.
- */
- if ((MPIDI_Process.typed_onesided == 1) && (ptr->is_committed)) {
- if (ptr->device_datatype) {
- pami_result_t pami_dtop_result;
- pami_dtop_result = PAMI_Type_destroy ((pami_type_t *)ptr->device_datatype);
- MPIU_Assert(pami_dtop_result == PAMI_SUCCESS);
- MPIU_Free(ptr->device_datatype);
- }
- }
-}
-
-/**
- * \brief Create PAMI datatype representation of MPI Datatype during dup.
- *
- * Signifcant performance improvements can be realized for one-sided communication
- * utilizing the PAMI_Rput_typed and PAMI_Rget_typed interface which requires a
- * PAMI representation of the MPI Datatype.
- */
-void MPIDI_PAMI_datatype_dup_hook (MPI_Datatype *ptr)
-{
-
- /* If the PAMID optimization to utilize the PAMI_Rput_typed / PAMI_Rget_typed call for
- * one-sided comm for derived types is enabled then we need to create the PAMI datatype.
- */
- if (MPIDI_Process.typed_onesided == 1) {
-
- MPID_Datatype *datatype_ptr;
- MPID_Datatype_get_ptr(*ptr, datatype_ptr);
-
- pami_result_t pami_dtop_result;
- datatype_ptr->device_datatype = (pami_type_t *) MPIU_Malloc(sizeof(pami_type_t));
- pami_dtop_result = PAMI_Type_create ((pami_type_t *)datatype_ptr->device_datatype);
- MPIU_Assert(pami_dtop_result == PAMI_SUCCESS);
-
- /* Flatten the non-contiguous data type into arrays describing the contiguous chunks.
- */
- MPI_Aint *dt_offset_array = (MPI_Aint *) MPIU_Malloc(datatype_ptr->max_contig_blocks * sizeof(MPI_Aint));
- MPI_Aint *dt_size_array = (MPI_Aint *) MPIU_Malloc(datatype_ptr->max_contig_blocks * sizeof(MPI_Aint));
- MPI_Aint dt_array_len = datatype_ptr->max_contig_blocks;
- int rc = MPIR_Type_flatten(*ptr, dt_offset_array, dt_size_array, &dt_array_len);
-
- /* Build the PAMI datatype adding one contiguous chunk at a time with the PAMI_Type_add_simple
- * interface.
- */
- int i;
-
- for (i=0;i<dt_array_len;i++) {
- size_t num_bytes_this_entry = dt_size_array[i];
- size_t cursor_offset;
- if (i == 0)
- cursor_offset = (size_t) dt_offset_array[i];
- else
- cursor_offset = (size_t) dt_offset_array[i] - (size_t)dt_offset_array[i-1];
- pami_dtop_result = PAMI_Type_add_simple (*(pami_type_t*)(datatype_ptr->device_datatype), num_bytes_this_entry, cursor_offset, 1, 0);
- MPIU_Assert(pami_dtop_result == PAMI_SUCCESS);
- }
-
- /* Complete the PAMI datatype and free arrays.
- */
- pami_dtop_result = PAMI_Type_complete (*(pami_type_t*)(datatype_ptr->device_datatype),1);
- MPIU_Assert(pami_dtop_result == PAMI_SUCCESS);
- MPIU_Free(dt_offset_array);
- MPIU_Free(dt_size_array);
- }
- return;
-}
diff --git a/src/mpid/pamid/src/mpidi_util.c b/src/mpid/pamid/src/mpidi_util.c
deleted file mode 100644
index e5fc834..0000000
--- a/src/mpid/pamid/src/mpidi_util.c
+++ /dev/null
@@ -1,2057 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpid_util.c
- * \brief Normal job startup code
- */
-
-
-/*
- * \brief
- */
-#include <dlfcn.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <limits.h>
-#include <nl_types.h>
-#include <mpidimpl.h>
-#include "mpidi_util.h"
-
-#define PAMI_TUNE_MAX_ITER 2000
-/* Short hand for sizes */
-#define ONE (1)
-#define ONEK (1<<10)
-#define ONEM (1<<20)
-#define ONEG (1<<30)
-
-#define PAMI_ASYNC_EXT_ATTR 2000
-
-#if CUDA_AWARE_SUPPORT
-void * pamidCudaPtr = NULL;
-#endif
-#if (MPIDI_PRINTENV || MPIDI_STATISTICS || MPIDI_BANNER)
-MPIDI_printenv_t *mpich_env=NULL;
-extern char* mp_euilib;
-char mp_euidevice[20];
-extern pami_extension_t pe_extension;
-extern pamix_extension_info_t PAMIX_Extensions;
- typedef enum {
- /* Attribute usage : type : default : description */
- PAMI_ASYNC_ATTR
- = PAMI_ASYNC_EXT_ATTR,
- PAMI_CONTEXT_TIMER_INTERVAL, /**< U: size_t : N/A : current timer interval in PAMI context */
- } pamix_attribute_name_async_t;
-
-
-void MPIDI_Set_mpich_env(int rank, int size) {
- static char polling_buf[32]="";
- int rc;
- pami_configuration_t config;
-
- mpich_env->this_task = rank;
- mpich_env->nprocs = size;
- mpich_env->eager_limit=MPIDI_Process.pt2pt.limits.application.eager.remote;
- mpich_env->use_token_flow_control=MPIDI_Process.is_token_flow_control_on;
- mpich_env->mp_statistics=MPIDI_Process.mp_statistics;
- if (mpich_env->polling_interval == 0) {
- memset(&config, 0, sizeof(config));
- config.name = (pami_attribute_name_t)PAMI_CONTEXT_TIMER_INTERVAL;
- rc= PAMI_Context_query(MPIDI_Context[0], &config, 1);
- mpich_env->polling_interval = config.value.intval;;
- sprintf(polling_buf, "MP_POLLING_INTERVAL=%d",
- mpich_env->polling_interval); /* microseconds */
- rc = putenv(polling_buf);
- }
- if (mpich_env->retransmit_interval == 0) {
- memset(&config, 0, sizeof(config));
- config.name = (pami_attribute_name_ext_t)PAMI_CONTEXT_RETRANSMIT_INTERVAL;
- rc= PAMI_Context_query(MPIDI_Context[0], &config, 1);
- mpich_env->retransmit_interval = config.value.intval;
- sprintf(polling_buf, "MP_RETRANSMIT_INTERVAL=%d",
- mpich_env->retransmit_interval); /* microseconds */
- rc = putenv(polling_buf);
- }
- mpich_env->buffer_mem=MPIDI_Process.mp_buf_mem;
- mpich_env->buffer_mem_max=MPIDI_Process.mp_buf_mem_max;
-}
-
-
-
-void MPIDI_Setup_networkenv()
-{
- char *network;
- char delimiter;
- int rc;
- pami_configuration_t config;
-
-
- delimiter=':';
- mpich_env->instances = 1;
- mpich_env->strip_type = NO_STRIPING;
- mpich_env->transport_type = IS_IP;
- mpich_env->network_string = NULL;
-
-/*
- * Always try the MPI environment variables first
- * then the PAMI env variable
- * then query the PAMI network environment string
- */
- if ((network = getenv("MP_CHILD_INET_ADDR")) != NULL ) {
- mpich_env->transport_type = IS_IP;
- } else if ((network = getenv("MP_MPI_NETWORK")) != NULL) {
- mpich_env->transport_type = IS_US;
- } else {
- network=NULL;
- memset(&config,0, sizeof(config));
- config.name = (pami_attribute_name_t)PAMI_CONTEXT_NETWORK;
- rc= PAMI_Context_query(MPIDI_Context[0], &config, 1);
- network=(char *) config.value.chararray;
- if ((rc != PAMI_SUCCESS) || (network== NULL)) {
- TRACE_ERR("PAMI network query returns %d", rc);
- network=NULL;
- return;
- } else {
- if ( strchr(network, ':') ||
- strchr(network, '.')) {
- mpich_env->transport_type = IS_IP;
- } else {
- mpich_env->transport_type = IS_US;
- }
- }
- }
-
- if ( NULL != network ) {
- mpich_env->network_string = (char *) MPIU_Malloc(strlen(network)+1);
- if( NULL != mpich_env->network_string ) {
- memcpy(mpich_env->network_string,network,strlen(network)+1);
- }
- mpich_env->instances = atoi(network+1);
- if (mpich_env->instances > 1 ) {
- mpich_env->strip_type = IS_PACKET_STRIPING;
- }
- }
- /*
- * These should match the PAMI defaults. They are provided so that the
- * mpi_printenv variable can print them out.
- */
- if ( mpich_env->retransmit_interval == 0 ) {
- memset(&config, 0, sizeof(config));
- config.name = (pami_attribute_name_t)PAMI_CONTEXT_RETRANSMIT_INTERVAL;
- rc= PAMI_Context_query(MPIDI_Context[0], &config, 1);
- mpich_env->retransmit_interval = config.value.intval;
- }
-
-}
-
-
-int MPIDI_Update_mpenv()
-{
- char *buf;
- int rc=0;
- int i, val; /* for loop index */
- long bdfrsize;
- int SendBufSize;
- int CopySendBufSize;
- char *cp,*p;
- int infolevel, max_pkt_size;
- uint tmp_val;
- size_t bulkXfer=0;
- pami_configuration_t *pami_config,config;
-
- MPIDI_Setup_networkenv();
- memset(&config,0, sizeof(config));
- config.name = PAMI_DISPATCH_SEND_IMMEDIATE_MAX;
- rc = PAMI_Dispatch_query(MPIDI_Context[0], (size_t)0, &config, 1);
- if ( rc == PAMI_SUCCESS ) {
- TRACE_ERR("PAMI_DISPATCH_SEND_IMMEDIATE_MAX=%d.\n", config.value.intval, rc);
- SendBufSize = config.value.intval;
- } else {
- TRACE_ERR((" Attention: PAMI_Client_query(DISPATCH_SEND_IMMEDIATE_MAX=%d) rc=%d\n",
- config.name, rc));
- SendBufSize = 256; /* This is PAMI SendBufSize. */
- }
- CopySendBufSize = SendBufSize - sizeof(MPIDI_MsgInfo);
- mpich_env->copySendBufSize = CopySendBufSize;
-
- pami_config = (pami_configuration_t *) MPIU_Malloc(10 * sizeof(pami_configuration_t));
- memset((void *) pami_config,0, sizeof(pami_config));
- pami_config[0].name = (pami_attribute_name_t)PAMI_CONTEXT_MAX_PKT_SZ;
- pami_config[1].name = (pami_attribute_name_t)PAMI_CONTEXT_RFIFO_SZ;
- pami_config[2].name = (pami_attribute_name_t)PAMI_CONTEXT_SHM_ENABLED;
- pami_config[3].name = (pami_attribute_name_t)PAMI_CONTEXT_BULK_XFER;
- pami_config[4].name = (pami_attribute_name_t)PAMI_CONTEXT_BULK_MIN_MSG_SZ;
- rc= PAMI_Context_query(MPIDI_Context[0], pami_config, 5);
- if (rc != PAMI_SUCCESS) {
- printf("ERROR PAMI_Context_query() failed rc=%d\n",rc); fflush(stdout);
- return rc;
- }
- max_pkt_size = pami_config[0].value.intval;
- mpich_env->recv_fifo_sz = pami_config[1].value.intval;
- mpich_env->max_pkt_size = max_pkt_size;
- mpich_env->max_pkts_out = 31;
- mpich_env->use_shmem = pami_config[2].value.intval;
- bulkXfer=pami_config[3].value.intval;
- if (bulkXfer) {
- mpich_env->use_rdma=PAMI_HINT_ENABLE;
- } else {
- /* No bulk xfer in PAMI */
- if (mpich_env->this_task == 0) {
- TRACE_ERR("MPI-PAMI: Attention: No bulk xfer for the job\n");
- }
- mpich_env->use_rdma=PAMI_HINT_DISABLE; /* in sync with PAMI */
- }
- /* obtain minimum message size for bulk xfer (rdma) */
- mpich_env->rdma_min_msg_size = (long) pami_config[4].value.intval;
- MPIU_Free(pami_config);
-}
-
-
-/* Print Environment */
-/* _mpidi_printenv collects the relevant MPI and internal variables to task 0 */
-/* and then prints out the differences */
-/* Returns: 0 - OK; possibly some ATTENTION messages issued; */
-/* 1 - ERROR; user must call exit(1), or risk the application hanging */
-
-
-
-
-#define MATCHI(x,y) { \
- first = 0; last = task_count-1; cflag = ' '; \
- for (i=1;i<=task_count;i++) { \
- if ((i==task_count) || (gatherer[i].x != gatherer[first].x)) { \
- last = i-1; \
- if (last != task_count-1) cflag = '*'; \
- printf("Task %1c%4d-%4d:%s %d\n", cflag,first, last, y, \
- gatherer[first].x); \
- first = i; \
- } \
- } \
- }
-#define MATCHLL(x,y) { \
- first = 0; last = task_count-1; cflag = ' '; \
- for (i=1;i<=task_count;i++) { \
- if ((i==task_count) || (gatherer[i].x != gatherer[first].x)) { \
- last = i-1; \
- if (last != task_count-1) cflag = '*'; \
- printf("Task %1c%4d-%4d:%s %lld\n", cflag,first, last, \
- y, gatherer[first].x); \
- first = i; \
- } \
- } \
- }
-#define MATCHD(x,y) { \
- first = 0; last = task_count-1; cflag = ' '; \
- for (i=1;i<=task_count;i++) { \
- if ((i==task_count) || (gatherer[i].x != gatherer[first].x)) { \
- last = i-1; \
- if (last != task_count-1) cflag = '*'; \
- printf("Task %1c%4d-%4d:%s %lf\n", cflag, first, last, \
- y, gatherer[first].x); \
- first = i; \
- } \
- } \
- }
-
-#define MATCHC(x,y,m) { \
- first = 0; last = task_count-1; cflag = ' '; \
- gatherer[first].x[m-1]='\0'; \
- for (i=1;i<=task_count;i++) { \
- if (i<task_count) gatherer[i].x[m-1]='\0'; \
- if ((i==task_count) || strncmp(gatherer[i].x, gatherer[first].x, m)) {\
- last = i-1; \
- if (last != task_count-1) cflag = '*'; \
- printf("Task %1c%4d-%4d:%s %s\n", cflag, first, last, y, \
- gatherer[first].x); \
- first = i; \
- } \
- } \
- }
-#define MATCHB(x,y) { \
- first = 0; last = task_count-1; cflag = ' '; \
- for (i=1;i<=task_count;i++) { \
- if ((i==task_count) || (gatherer[i].x != gatherer[first].x)) { \
- last = i-1; \
- if (last != task_count-1) cflag = '*'; \
- if (gatherer[first].x > 0) { \
- printf("Task %1c%4d-%4d:%s %s\n", cflag, first, last, \
- y, "YES"); \
- } else if (gatherer[first].x == 0) { \
- printf("Task %1c%4d-%4d:%s %s\n", cflag, first, \
- last, y, "NO"); \
- } else { \
- printf("Task %1c%4d-%4d:%s %d\n", cflag, first, last, \
- y, gatherer[first].x); \
- } \
- first = i; \
- } \
- } \
- }
-/* A modification on MATCHB, it is used to check the environment variables
- * that take one of YES, NO or CONFIRM, This is used in particular for checking the value
- * passed to MP_SINGLE_THREAD */
-#define MATCHT(x,y) { \
- first = 0; last = task_count-1; cflag = ' '; \
- for (i=1;i<=task_count;i++) { \
- if ((i==task_count) || (gatherer[i].x != gatherer[first].x)) { \
- last = i-1; \
- if (last != task_count-1) cflag = '*'; \
- if (gatherer[first].x == 0) { \
- printf("Task %1c%4d-%4d:%s %s\n", cflag, first, last, y, \
- "NO"); \
- } else if (gatherer[first].x == 1) { \
- printf("Task %1c%4d-%4d:%s %s\n", cflag, first, last, \
- y, "YES"); \
- } else { \
- printf("Task %1c%4d-%4d:%s %d\n", cflag, first, last, y, \
- gatherer[first].x); \
- } \
- first = i; \
- } \
- } \
- }
-
-#define NOTAPPLICABLE(y) { \
- printf("Task %4d-%4d:%s NA\n", 0, task_count-1, y); \
- }
-
-
-
-/*
- * Parse Network string value
- * Format = @instance_number:netAddr,adapter_type:.....
- * or
- * Format = @instance_number;netAddr,adapter_type;.....
- * netAddr is for either Inet address (IP) or window ID (US)
- * adapter is for adapter type
- *
- * Newwork_ID is exported by POE
- *
- * This function will fill in the given buffers as much as possible
- * will start to drop the (whole) info when the buffers are getting
- * full.
- */
-void MPIDI_Get_net_param(char *cp, int MPI_only, int my_taskid, int total_task,
- char *netAddr, long addrSize,
- char *adapter, long adptSize,
- char *networkId, long networkIdSize)
-{
- /* parse Network string, works with either user space or IP */
- /* removing the window numbers but keeping the device names */
- char *cp1, *cp2, *cp3, *dummy1, *dummy2, *dummy3;
- long nc, addrSpace=addrSize, addrLen=0, adptSpace=adptSize, adptLen=0;
- int taskid, inst, i, n_comma;
- char delimiter = ':';
- char msgBuf[80];
-
- *netAddr = '\0'; /* Make sure strcat starts */
- *adapter = '\0'; /* from the beginning. */
-
- if ( strchr(cp, ';') ) {
- delimiter = ';';
- }
-
-
- if ( *cp == '@' ) {
- /* PE 4.1: MP_MPI_NETWORK = @inst:addr,adapter:...,... */
- /* Skip the instance number and get to the first colon */
- cp1 = strchr(cp,delimiter);
-
- while (cp1) {
- cp1++; /* Next address */
- cp2 = strchr(cp1,',') + 1; /* Address ends at a comma */
- nc = cp2 - cp1; /* Add 1 to pick up the comma */
- if ( nc <= addrSpace ) { /* Yes test nc <= addrSpace */
- strncat(netAddr, cp1, nc); /* We will take care of the */
- addrLen += nc; /* last 'comma' later. */
- addrSpace -= nc;
- }
- else
- break;
- if ( (cp1 = strchr(cp2,delimiter)) != NULL ) { /* Adapter ends at a colon */
- nc = cp1 - cp2 + 1; /* Add 1 to pick up colon */
- if ( nc < adptSpace ) {
- strncat(adapter, cp2, nc);
- adptLen += nc;
- adptSpace -= nc;
- }
- else {
- strncat(adapter, cp2, adptSpace-1);
- adptLen += (adptSpace-1);
- break;
- }
- }
- else {
- /* Last one */
- nc = strlen(cp2);
- if ( nc < adptSpace ) {
- strcat(adapter, cp2);
- adptLen += nc;
- }
- else {
- strncat(adapter, cp2, adptSpace-1);
- adptLen += (adptSpace-1);
- }
- }
- }
- /* Terminate netAddr and adapter with NULL */
- if ( addrLen > 1 ) netAddr[addrLen-1] = '\0'; /* get rid of the last comma */
- if ( adptLen > 0 ) {
- if ( adapter[adptLen-1] == delimiter ) adapter[adptLen-1] = '\0';
- else adapter[adptLen] = '\0';
- }
- } else {
- /* MP_MPI_NETWORK = window_number:device_number */
- cp1 = strchr(cp,':');
- nc = cp1 - cp; /* Don't include ':' */
- strncpy(netAddr, cp, nc);
- netAddr[nc] = '\0';
- strcpy(adapter, cp1+1);
- }
-}
-
-
-int MPIDI_Print_mpenv(int rank,int size)
-{
- MPI_Comm comm = MPI_COMM_WORLD;
- MPID_Comm *comm_ptr;
- MPIDI_printenv_t sender;
- MPIDI_printenv_t *gatherer = NULL;
- int mytask;
- int task_count;
- MPIDI_TransportType transport_type;
- MPIDI_StripingType striping_type;
- int instances;
- int is_mpi=1;
- char *cp;
- char *cp1;
- int i, j, k;
- int first, last;
- int len, tmp_val;
- char *userbuf = NULL;
- int *recvcount = NULL, *recvdispl = NULL;
- char **recvwork = NULL;
- int max_output_size = 0;
- FILE *fd;
- char *ts;
- char *ck;
- int ssi = 0;
- int current_size;
- int increment;
- int m, m1;
- char cflag;
- int rc;
- pami_configuration_t *pami_config, config;
- char *p;
- char popenstr[]={ "/bin/ksh -c " };
- char *popenptr;
- char tempstr[128];
- int mpi_errno;
- int errflag=0;
-
- MPIDI_Set_mpich_env(rank,size);
- memset(&sender,0,sizeof(MPIDI_printenv_t));
- MPIDI_Update_mpenv();
- /* decoding strings */
- char *clock_string[] = {
-#ifndef __LINUX__
- "AIX",
-#else
- "OS",
-#endif
- "Switch" };
- char *develop_string[] = {
- "Minimum",
- "Normal",
- "Debug",
- "Develop" };
- char *transport_type_string[] = {
- "ip",
- "us" };
- char *striping_type_set[] = {
- "Striping off",
- "Packet striping on" };
-
- /* Get MPI Library Version */
- MPIDI_Banner((char*)&sender.version);
- /* Remove the trailing newline character */
- for (i=strlen(sender.version);i>0;i--) {
- if (sender.version[i-1] == '\n') sender.version[i-1] = '\0'; }
-
- gethostname(sender.hostname, MAXHOSTNAMELEN+1);
- /* Get task geometry information */
- cp = getenv("MP_PARTITION"); /* MP_PARTITION is always there */
- sender.partition = atol(cp); /* Checking is not needed. */
- sender.pid = getpid();
- mytask = mpich_env->this_task;
- sender.nprocs = mpich_env->nprocs;
- sender.single_thread = mpich_env->single_thread;
- sender.max_pkts_out = mpich_env->max_pkts_out;
- sender.recv_fifo_sz = mpich_env->recv_fifo_sz;
- task_count = sender.nprocs;
- strcpy(sender.wait_mode,"NOT SET"); /* will be updated in the future */
- strcpy(sender.clock_source,"OS");
- cp = getenv("MP_NODES");
- if (cp) strncpy(sender.nnodes, cp, 8);
- else strcpy(sender.nnodes, "NOT SET");
- cp = getenv("MP_TASKS_PER_NODE");
- if (cp) strncpy(sender.tasks_node, cp, 8);
- else strcpy(sender.tasks_node, "NOT SET");
-
- if(cp=getenv("MP_EUIDEVELOP")) {
- strcpy((void *) &sender.develop,(void *)cp);
- } else
- memcpy(&sender.develop,"NOT SET ",8);
-
- if(cp=getenv("MP_EUIDEVICE")) {
- strcpy((void *) &mp_euidevice,(void *)cp);
- } else
- memcpy(&mp_euidevice,"NOT SET ",8);
- strncpy(sender.device, mp_euidevice, 8);
-
- /* Get protocol info */
- transport_type = mpich_env->transport_type;
- switch (transport_type)
- {
- case IS_IP:
- strcpy(sender.euilib, transport_type_string[transport_type]);
- cp = NULL;
- cp = (char *) mpich_env->network_string;
- if (cp) {
- strcpy(sender.window_id, "NA");
- MPIDI_Get_net_param(cp, is_mpi, mytask, task_count,
- tempstr, sizeof(tempstr),
- sender.adapter_type, sizeof(sender.adapter_type),
- sender.network_id, sizeof(sender.network_id));
- /* Override network_id when network device is en0 or ml0 */
- if ( !strcasecmp(sender.device, "en0") ||
- !strcasecmp(sender.device, "ml0") ) {
- strcpy(sender.network_id, "NA");
- }
- } else {
- strcpy(sender.window_id, "NOT_SET");
- strcpy(sender.adapter_type, "NOT SET");
- strcpy(sender.network_id, "NOT SET");
- }
- break;
- case IS_US:
- strcpy(sender.euilib, transport_type_string[transport_type]);
- cp = NULL;
- cp = (char *) mpich_env->network_string;
- if (cp) {
- MPIDI_Get_net_param(cp, is_mpi, mytask, task_count,
- sender.window_id, sizeof(sender.window_id),
- sender.adapter_type, sizeof(sender.adapter_type),
- sender.network_id, sizeof(sender.network_id));
- } else {
- strcpy(sender.window_id, "NOT SET");
- strcpy(sender.adapter_type, "NOT SET");
- strcpy(sender.network_id, "NOT SET");
- }
- break;
- default:
- sprintf(tempstr, "_mpi_printenv: Get unknown transport type [%d]!\n", transport_type);
- TRACE_ERR("%s \n",tempstr);
- strcpy(sender.euilib, "UNKNOWN");
- strcpy(sender.window_id, "UNKNOWN");
- strcpy(sender.adapter_type, "UNKNOWN");
- strcpy(sender.network_id, "UNKNOWN");
- break;
- }
- /* Get run time setup */
- cp = getenv("MP_MSG_API");
- if (cp) strncpy(sender.protocol, cp, 16);
- else strcpy(sender.protocol, "MPI");
- cp = getenv("LIBPATH");
- if (cp) strncpy(sender.libpath, cp, MAXPATHLEN-1);
- else strcpy(sender.libpath, "NOT SET");
- getcwd(sender.directory, FILENAME_MAX+1);
-
- if(sizeof(void*) == 4)
- sender.mode_64 = 0;
- else
- sender.mode_64 = 1;
-
- sender.threaded = 1; /* Always 1 */
- cp = getenv("AIXTHREAD_SCOPE");
- if (cp) strncpy(sender.thread_scope, cp, 8);
- else strcpy(sender.thread_scope,"NOT SET");
-
- cp = getenv("MP_CPU_USE");
- if (cp) strncpy(sender.cpu_use, cp, 10);
- else strcpy(sender.cpu_use, "NOT SET");
- cp = getenv("MP_ADAPTER_USE");
- if (cp) strncpy(sender.adapter_use, cp, 10);
- else strcpy(sender.adapter_use, "NOT SET");
-#ifndef LINUX
- cp = getenv("MP_PRIORITY");
- if (cp) strncpy(sender.priority, cp, 24);
- else strcpy(sender.priority, "NOT SET");
-#else
- strcpy(sender.priority, "NA");
-#endif
- cp = getenv("MP_TIMEOUT");
- if (cp) {
- sender.timeout = atoi(cp);
- if(sender.timeout <= 0) {
- sender.timeout = 150; /* default MP_TIMEOUT is 150s */
- }
- } else {
- sender.timeout = 150;
- }
-
- sender.interrupts = mpich_env->interrupts;
- sender.mp_statistics = mpich_env->mp_statistics;
- sender.polling_interval = mpich_env->polling_interval;
- sender.eager_limit = mpich_env->eager_limit;
- sender.use_token_flow_control=MPIDI_Process.is_token_flow_control_on;
- sender.retransmit_interval = mpich_env->retransmit_interval;
- sender.buffer_mem = mpich_env->buffer_mem;
- sender.buffer_mem_max = mpich_env->buffer_mem_max;
-
- /* Get shared memory */
- sender.shmem_pt2pt = MPIDI_Process.shmem_pt2pt;
- sender.use_shmem = mpich_env->use_shmem;
-#ifndef LINUX
- cp = getenv("MEMORY_AFFINITY");
- if ( cp ) strncpy(sender.mem_affinity, cp, 8);
- else strcpy(sender.mem_affinity, "NOT SET");
-#else
- strcpy(sender.mem_affinity, "NA");
-#endif
- sender.instances = mpich_env->instances;
- strcpy(sender.striping_type, striping_type_set[(mpich_env->strip_type)]);
-
-
- pami_config = (pami_configuration_t *) MPIU_Malloc(10 * sizeof(pami_configuration_t));
- memset((void *) pami_config,0, sizeof(pami_config));
- pami_config[0].name = (pami_attribute_name_t)PAMI_CONTEXT_ACK_THRESH;
- pami_config[1].name = (pami_attribute_name_t)PAMI_CONTEXT_REXMIT_BUF_CNT;
- pami_config[2].name = (pami_attribute_name_t)PAMI_CONTEXT_REXMIT_BUF_SZ;
- pami_config[3].name = (pami_attribute_name_t)PAMI_CONTEXT_RC_MAX_QP;
- pami_config[4].name = (pami_attribute_name_t)PAMI_CONTEXT_RC_USE_LMC;
- rc= PAMI_Context_query(MPIDI_Context[0], pami_config, 5);
- if (rc != PAMI_SUCCESS) {
- printf("mp_printenv ERROR PAMI_Context_query() failed rc=%d\n",rc); fflush(stdout);
- return rc;
- }
- sender.ack_thresh = pami_config[0].value.intval;
- sender.rexmit_buf_cnt = pami_config[1].value.intval;
- sender.rexmit_buf_size = pami_config[2].value.intval;
- sender.rc_max_qp = pami_config[3].value.intval;
- if (pami_config[4].value.intval)
- strcpy(sender.rc_qp_use_lmc, "YES");
- else
- strcpy(sender.rc_qp_use_lmc, "NO");
- MPIU_Free(pami_config);
-
- /* - Begin Bulk transfer/RDMA & IB settings */
- if ( mpich_env->use_rdma == PAMI_HINT_DISABLE )
- strcpy(sender.use_bulk_xfer, "NO");
- else
- strcpy(sender.use_bulk_xfer, "YES");
-
- sprintf(sender.bulk_min_msg_size, "%d", mpich_env->bulk_min_msg_size);
-
-
- /* M28,M32 -- End Bulk transfer/RDMA & IB settings */
-
- if ( cp = getenv("MP_DEBUG_NOTIMEOUT") )
- strcpy(sender.debug_notimeout, cp);
- else
- strcpy(sender.debug_notimeout, "NOT_SET");
-
- sender.statistics = mpich_env->statistics;
- cp = getenv("MP_STDINMODE");
- if ( cp ) strncpy(sender.stdinmode, cp, 10);
- else strcpy(sender.stdinmode, "NOT SET");
- cp = getenv("MP_STDOUTMODE");
- if ( cp ) strncpy(sender.stdoutmode, cp, 10);
- else strcpy(sender.stdoutmode, "NOT SET");
-
-
- /* Check if there are any environment variables of the form MP_S_, and count them */
- {
- extern char **environ;
- char **envp = environ;
- int env_count = 0;
- while (*envp) {
- if (!strncmp(*envp, "MP_S_",5)) env_count++;
- if (!strncmp(*envp, "MP_CCL_",7)) env_count++; /* MP_CCL_TIMING is also service */
- envp++;
- }
- sender.service_variables = env_count;
- }
-
- if (mytask == 0) { /* allocate a receive buffer for the gather of the base structure */
- gatherer = (MPIDI_printenv_t*) MPIU_Malloc(task_count * sizeof(MPIDI_printenv_t));
- if (!gatherer) {
- TRACE_ERR("_mpi_printenv gatherer MPIU_Malloc failed rc=%d\n",rc);
- return 1;
- }
- memset(gatherer,0,task_count*sizeof(MPIDI_printenv_t));
- }
-
-
- mpi_errno = MPI_SUCCESS;
- MPID_Comm_get_ptr( comm, comm_ptr );
- mpi_errno = MPIR_Gather_impl(&sender, sizeof(MPIDI_printenv_t), MPI_BYTE, gatherer,
- sizeof(MPIDI_printenv_t),MPI_BYTE, 0,comm_ptr,
- (int *) &errflag);
- if (mpi_errno) {
- /* for communication errors, just record the error but continue */
- errflag = TRUE;
- }
-
- /* work through results and compare */
-
- if (mytask == 0) {
- MATCHC(version,"Library:",128);
- MATCHC(hostname,"Hostname:",MAXHOSTNAMELEN+1);
- MATCHI(partition,"Job ID (MP_PARTITION):");
- MATCHI(nprocs,"Number of Tasks (MP_PROCS):");
- MATCHC(nnodes,"Number of Nodes (MP_NODES):",8);
- MATCHC(tasks_node,"Number of Tasks per Node (MP_TASKS_PER_NODE):",8);
- MATCHC(euilib,"Library Specifier (MP_EUILIB):",8);
- MATCHC(adapter_type,"Adapter Name:",32);
- MATCHC(window_id,"Window ID:",128);
- if ( getenv("MP_S_STRIPING_DBG") ) MATCHC(network_id,"Network ID:",32);
- MATCHC(device,"Device Name (MP_EUIDEVICE):",8);
-#ifndef LINUX /* M27 */
- MATCHI(instances,"Window Instances (MP_INSTANCES * # of networks):");
- MATCHC(striping_type,"Striping Setup:",40);
-#endif
- MATCHC(protocol,"Protocols in Use (MP_MSG_API):",16);
- MATCHC(libpath,"Effective Libpath (LIBPATH):",MAXPATHLEN);
- MATCHC(directory,"Current Directory:",FILENAME_MAX+1);
- MATCHB(mode_64,"64 Bit Mode:");
-#ifndef LINUX /* M27 */
- MATCHB(threaded,"Threaded Library:");
- MATCHC(thread_scope,"Requested Thread Scope (AIXTHREAD_SCOPE):",8);
-#endif
- MATCHC(cpu_use,"CPU Use (MP_CPU_USE):",10);
- MATCHC(adapter_use,"Adapter Use (MP_ADAPTER_USE):",10);
- MATCHC(clock_source,"Clock Source (MP_CLOCK_SOURCE):",8);
- MATCHC(priority,"Priority Class (MP_PRIORITY):",24);
- MATCHI(timeout,"Connection Timeout (MP_TIMEOUT/sec):");
- MATCHB(interrupts,"Adapter Interrupts Enabled (MP_CSS_INTERRUPT):");
- MATCHI(polling_interval,"Polling Interval (MP_POLLING_INTERVAL/usec):");
- MATCHI(buffer_mem,"Buffer Memory (MP_BUFFER_MEM/Bytes):");
- MATCHLL(buffer_mem_max,"Max. Buffer Memory (MP_BUFFER_MEM_MAX/Bytes):");
- MATCHI(eager_limit,"Message Eager Limit (MP_EAGER_LIMIT/Bytes):");
- MATCHI(use_token_flow_control,"Use token flow control:");
- MATCHC(wait_mode,"Message Wait Mode(MP_WAIT_MODE):",8);
- MATCHI(retransmit_interval,"Retransmit Interval (MP_RETRANSMIT_INTERVAL/count):");
- MATCHB(use_shmem,"Shared Memory Enabled (MP_SHARED_MEMORY):");
- MATCHB(shmem_pt2pt,"Intranode pt2pt Shared Memory Enabled (MP_SHMEM_PT2PT):");
- MATCHB(mp_statistics,"Statistics Collection Enabled (MP_STATISTICS):");
- MATCHC(mem_affinity,"MEMORY_AFFINITY:",8);
- MATCHT(single_thread,"Single Thread Usage(MP_SINGLE_THREAD):");
- MATCHI(recv_fifo_sz,"DMA Receive FIFO Size (Bytes):");
- MATCHI(max_pkts_out,"Max outstanding packets:");
- MATCHC(develop,"Develop Mode (MP_EUIDEVELOP):",16);
- MATCHC(stdinmode,"Standard Input Mode (MP_STDINMODE):",12);
- MATCHC(stdoutmode,"Standard Output Mode (MP_STDOUTMODE):",12);
- MATCHI(service_variables,"Number of Service Variables set (MP_S_*):");
- printf("--------------------End of MPI Environment Report-------------------------\n");
- fflush(stdout);
- } /* task 0 specific stuff */
-
-
- if (mytask == 0) {
- MPIU_Free(gatherer);
- }
-
- return 0;
-}
-
- /* ------------------------- */
- /* if (MP_STATISTICS==yes) */
- /* print statistics data */
- /* ------------------------- */
-void MPIDI_print_statistics() {
- if ((MPIDI_Process.mp_statistics) ||
- (MPIDI_Process.mp_printenv)) {
- if (MPIDI_Process.mp_statistics) {
- MPIDI_Statistics_write(stdout);
- if (mpid_statp) {
- MPIU_Free(mpid_statp);
- mpid_statp=NULL;
- }
- }
- if (MPIDI_Process.mp_printenv) {
- if (mpich_env) {
- MPIU_Free(mpich_env);
- mpich_env=NULL;
- }
- }
- }
-}
-
-#endif /* MPIDI_PRINTENV || MPIDI_STATISTICS */
-
-/**
- * \brief validate whether a lpid is in a given group
- *
- * Searches the group lpid list for a match.
- *
- * \param[in] lpid World rank of the node in question
- * \param[in] grp Group to validate against
- * \return TRUE is lpid is in group
- */
-
-int MPIDI_valid_group_rank(int lpid, MPID_Group *grp) {
- int size = grp->size;
- int z;
-
- for (z = 0; z < size &&
- lpid != grp->lrank_to_lpid[z].lpid; ++z);
- return (z < size);
-}
-
-/****************************************************************/
-/* function MPIDI_uppers converts a passed string to upper case */
-/****************************************************************/
-void MPIDI_toupper(char *s)
-{
- int i;
- if (s != NULL) {
- for(i=0;i<strlen(s);i++) s[i] = toupper(s[i]);
- }
-}
-
-/*
- -----------------------------------------------------------------
- Name: MPID_scan_str()
-
- Function: Scan a flag string for 2 out of 3 possible
- characters (K, M, G). Return a 1 if neither
- character is found otherwise return the character
- along with a buffer containing the string without
- the character.
- value are valid. If they are valid, the
- multiplication of the number and the units
- will be returned as an unsigned int. If the
- number and units are invalid, a 1 will be returned.
-
- Description: search string for character or end of string
- if string contains either entered character
- check which char it is, set multiplier
- if no chars found, return error
-
- Parameters: A0 = MPIDI_scan_str(A1, A2, A3, A4, A5)
-
- A1 string to scan char *
- A2 first char to scan for char
- A3 second char to scan for char
- A4 multiplier char *
- A5 returned string char *
-
- A0 Return Code int
-
-
- Return Codes: 0 OK
- 1 input chars not found
- ------------------------------------------------------------
-*/
-int MPIDI_scan_str(char *my_str, char fir_c, char sec_c, char *multiplier, char *tempbuf)
-{
- int str_ptr; /*index counter into string*/
- int found; /*indicates whether one of input chars found*/
- int len_my_str; /*length of string with size and units*/
-
- str_ptr = 0; /*start at beginning of string*/
- found = 0; /*no chars found yet*/
-
- len_my_str = strlen(my_str);
-
- /* first check if all 'characters' of *my_str are digits, */
- /* str_ptr points to the first occurrence of a character */
- for (str_ptr=0; str_ptr<len_my_str; str_ptr++) {
- if (str_ptr == 0) { /* there can be a '+' or a '-' in the first position */
- /* but I do not allow a negative value because there's */
- /* no negative amount of memory... */
- if (my_str[0] == '+') {
- tempbuf[0] = my_str[0]; /* copy sign */
- /* this is ok but a digit MUST follow */
- str_ptr++;
- /* If only a '+' was entered the next character is '\0'. */
- /* This is not a digit so the error message shows up */
- }
- }
- if (!isdigit(my_str[str_ptr])) {
- break;
- }
- tempbuf[str_ptr] = my_str[str_ptr]; /* copy to return string */
- } /* endfor */
-
- tempbuf[str_ptr] = 0x00; /* terminate return string, this was NOT done before this modification! */
-
- if((my_str[str_ptr] == fir_c) || (my_str[str_ptr] == sec_c)) {
- /*check which char it is, then set multiplier and indicate char found*/
- switch(my_str[str_ptr]) {
- case 'K':
- *multiplier = 'K';
- found++;
- break;
- case 'M':
- *multiplier = 'M';
- found++;
- break;
- case 'G':
- *multiplier = 'G';
- found++;
- break;
- }
- /* my_str[str_ptr] = 0; */ /*change char in string to end of string char*/
- }
- if (found == 0) { /*if input chars not found, indicate error*/
- return(1); }
- else {
- /* K, M or G should be the last character, something like 64M55 is invalid */
- if (str_ptr == len_my_str-1) {
- return(0); /*if input chars found, return good status*/
- } else {
- /* I only allow a 'B' to follow. This is not documented but reflects the */
- /* behaviour of earlier poe parsing. 64MB is valid, but after 'B' the */
- /* string must end */
- if (my_str[str_ptr+1] == 'B' && (str_ptr+1) == (len_my_str-1)) {
- return(0); /*if input chars found, return good status*/
- } else {
- return(1);
- } /* endif */
- } /* endif */
- }
-}
-/*
- -----------------------------------------------------------------
- Name: MPIDI_scan_str3()
-
- Function: Scan a flag string for 3 out of 3 possible
- characters (K, M, G). Return a 1 if neither
- character is found otherwise return the character
- along with a buffer containing the string without
- the character.
- value are valid. If they are valid, the
- multiplication of the number and the units
- will be returned as an unsigned int. If the
- number and units are invalid, a 1 will be returned.
-
- Description: search string for character or end of string
- if string contains either entered character
- check which char it is, set multiplier
- if no chars found, return error
-
- Parameters: A0 = MPIDI_scan_str(A1, A2, A3, A4, A5, A6)
-
- A1 string to scan char *
- A2 first char to scan for char
- A3 second char to scan for char
- A4 third char to scan for char
- A5 multiplier char *
- A6 returned string char *
-
- A0 Return Code int
-
- Return Codes: 0 OK
- 1 input chars not found
- ------------------------------------------------------------
-*/
-int MPIDI_scan_str3(char *my_str, char fir_c, char sec_c, char thr_c, char *multiplier, char *tempbuf)
-{
-
- int str_ptr; /*index counter into string*/
- int found; /*indicates whether one of input chars found*/
- int len_my_str; /*length of string with size and units*/
-
- str_ptr = 0; /*start at beginning of string*/
- found = 0; /*no chars found yet*/
-
- len_my_str = strlen(my_str);
-
- /* first check if all 'characters' of *my_str are digits, */
- /* str_ptr points to the first occurrence of a character */
- for (str_ptr=0; str_ptr<len_my_str; str_ptr++) {
- if (str_ptr == 0) { /* there can be a '+' or a '-' in the first position */
- /* but I do not allow a negative value because there's */
- /* no negative amount of memory... */
- if (my_str[0] == '+') {
- tempbuf[0] = my_str[0]; /* copy sign */
- /* this is ok but a digit MUST follow */
- str_ptr++;
- /* If only a '+' was entered the next character is '\0'. */
- /* This is not a digit so the error message shows up */
- }
- }
- if (!isdigit(my_str[str_ptr])) {
- break;
- }
- tempbuf[str_ptr] = my_str[str_ptr]; /* copy to return string */
- } /* endfor */
-
- tempbuf[str_ptr] = 0x00; /* terminate return string, this was NOT done before this modification! */
-
- if((my_str[str_ptr] == fir_c) || (my_str[str_ptr] == sec_c) || (my_str[str_ptr] == thr_c)) {
- /*check which char it is, then set multiplier and indicate char found*/
- switch(my_str[str_ptr]) {
- case 'K':
- *multiplier = 'K';
- found++;
- break;
- case 'M':
- *multiplier = 'M';
- found++;
- break;
- case 'G':
- *multiplier = 'G';
- found++;
- break;
- }
- /* my_str[str_ptr] = 0; */ /*change char in string to end of string char*/
- }
- if (found == 0) { /*if input chars not found, indicate error*/
- return(1); }
- else {
- /* K, M or G should be the last character, something like 64M55 is invalid */
- if (str_ptr == len_my_str-1) {
- return(0); /*if input chars found, return good status*/
- } else {
- /* I only allow a 'B' to follow. This is not documented but reflects the */
- /* behaviour of earlier poe parsing. 64MB is valid, but after 'B' the */
- /* string must end */
- if (my_str[str_ptr+1] == 'B' && (str_ptr+1) == (len_my_str-1)) {
- return(0); /*if input chars found, return good status*/
- } else {
- return(1);
- } /* endif */
- } /* endif */
- }
-}
-
-/*
- -----------------------------------------------------------------
- Name: MPIDI_checkit()
-
- Function: Determine whether a given number and units
- value are valid. If they are valid, the
- multiplication of the number and the units
- will be returned as an unsigned int. If the
- number and units are invalid, a 1 will be returned.
-
- Description: if units is G
- if value is > 4 return error
- else multiplier is 1G
- else if units is M
- if value is > 4K return error
- else multiplier is 1M
- else if units is K
- if value is > 4M return error
- else multiplier is 1K
- if value < 1 return error
- else
- multiply value by multiplier
- return result
-
- Parameters: A0 = MPIDI_checkit(A1, A2, A3)
-
- A1 given value int
- A2 given units char *
- A3 result unsigned int *
-
- A0 Return Code int
-
- Return Codes: 0 OK
- 1 bad value
- ------------------------------------------------------------
-*/
-int MPIDI_checkit(int myval, char myunits, unsigned int *mygoodval)
-{
- int multiplier = ONE; /*units multiplier for entered value*/
-
- if (myunits == 'G') { /*if units is G*/
- if (myval>4) return 1; /*entered value can't be greater than 4*/
- else multiplier = ONEG; /*if OK, mult value by units*/
- }
- else if (myunits == 'M') { /*if units is M*/
- if (myval > (4*ONEK)) return 1; /*value can't be > 4096*/
- else multiplier = ONEM; /*if OK, mult value by units*/
- }
- else if (myunits == 'K') { /*if units is K*/
- if (myval > (4*ONEM)) return 1; /*value can't be > 4M*/
- else multiplier = ONEK; /*if OK, mult value by units*/
- }
- if (myval < 1) return 1; /*value can't be less than 1*/
-
- *mygoodval = myval * multiplier; /*do multiplication*/
- return 0; /*good return*/
-
-}
-
-
-
- /***************************************************************************
- Function Name: MPIDI_atoi
-
- Description: Convert a string into an interger. The string can be all
- digits or includes symbols 'K', 'M'.
-
- Parameters: char * -- string to be converted
- unsigned int * -- result val (caller to cast to int* or long*)
-
- Return: int 0 if AOK
- number of errors.
- ***************************************************************************/
-int MPIDI_atoi(char* str_in, unsigned int* val)
-{
- char tempbuf[256];
- char size_mult; /* multiplier for size strings */
- int i, tempval;
- int letter=0, retval=0;
-
- /***********************************/
- /* Check for letter */
- /***********************************/
- for (i=0; i<strlen(str_in); i++) {
- if (!isdigit(str_in[i])) {
- letter = 1;
- break;
- }
- }
- if (!letter) { /* only digits */
- errno = 0; /* should set errno to 0 before atoi() call */
- *val = atoi(str_in);
- if (errno) { /* no check for negative integer, there's no '-' in the string */
- retval = errno;
- }
- }
- else {
- /***********************************/
- /* Check for K or M. */
- /***********************************/
- MPIDI_toupper(str_in);
- retval = MPIDI_scan_str(str_in, 'M', 'K', &size_mult, tempbuf);
-
- if ( retval == 0) {
- tempval = atoi(tempbuf);
-
- /***********************************/
- /* If 0 K or 0 M entered, set to 0 */
- /* otherwise, do conversion. */
- /***********************************/
- if (tempval != 0)
- retval = MPIDI_checkit(tempval, size_mult, (unsigned int*)val);
- else
- *val = 0;
- }
-
- if (retval == 0) {
- tempval = atoi(tempbuf);
- retval = MPIDI_checkit(tempval, size_mult, (unsigned int*)val);
- }
- else
- *val = 0;
- }
-
- return retval;
-}
-
- /***************************************************************************
- Name: MPIDI_checkll()
-
- Function: Determine whether a given number and units
- value are valid. If they are valid, the
- multiplication of the number and the units
- will be returned as an unsigned int. If the
- number and units are invalid, a 1 will be returned.
-
- Description: if units is G
- multiplier is 1G
- else if units is M
- multiplier is 1M
- else if units is K
- multiplier is 1K
- else
- return error
-
- multiply value by multiplier
- return result
- Parameters: A0 = MPIDI_checkll(A1, A2, A3)
-
- A1 given value int
- A2 given units char *
- A3 result long long *
-
- A0 Return Code int
-
- Return Codes: 0 OK
- 1 bad value
- ***************************************************************************/
-
-int MPIDI_checkll(int myval, char myunits, long long *mygoodval)
-{
- int multiplier; /* units multiplier for entered value */
-
- if (myunits == 'G') { /* if units is G */
- multiplier = ONEG;
- }
- else if (myunits == 'M') { /* if units is M */
- multiplier = ONEM;
- }
- else if (myunits == 'K') { /* if units is K */
- multiplier = ONEK;
- }
- else
- return 1; /* Unkonwn unit */
-
- *mygoodval = (long long) myval * multiplier; /* do multiplication */
- return 0; /* good return */
-}
-
-
-int MPIDI_atoll(char* str_in, long long* val)
-{
- char tempbuf[256];
- char size_mult; /* multiplier for size strings */
- int i, tempval;
- int letter=0, retval=0;
-
- /*****************************************/
- /* Check for letter, if none, MPIDI_atoi */
- /*****************************************/
- for (i=0; i<strlen(str_in); i++) {
- if (!isdigit(str_in[i])) {
- letter = 1;
- break;
- }
- }
- if (!letter) { /* only digits */
- errno = 0;
- *val = atoll(str_in);
- if (errno) {
- retval = errno;
- }
- }
- else {
- /***********************************/
- /* Check for K or M. */
- /***********************************/
- MPIDI_toupper(str_in);
- retval= MPIDI_scan_str3(str_in, 'G', 'M', 'K', &size_mult, tempbuf);
-
- if ( retval == 0) {
- tempval = atoi(tempbuf);
-
- /***********************************/
- /* If 0 K or 0 M entered, set to 0 */
- /* otherwise, do conversion. */
- /***********************************/
- if (tempval != 0)
- retval = MPIDI_checkll(tempval, size_mult, val);
- else
- *val = 0;
- }
- }
-
- return retval;
-}
-
-
-
-/****************************************************/
-/* Collective Selection Benchmarking utils */
-/****************************************************/
-
-const char * xfer_array_str[PAMI_XFER_COUNT];
-int task_id;
-int num_tasks;
-
-static int MPIDI_collsel_print_usage()
-{
- if(!task_id)
- fputs("Usage: pami_tune (MPICH) [options]\n\
-Options:\n\
- -c Comma separated list of collectives to benchmark\n\
- Valid options are: \n\
- allgather, allgatherv_int, allreduce, alltoall,\n\
- alltoallv_int, ambroadcast, amgather, amreduce,\n\
- amscatter, barrier, broadcast, gather, gatherv_int,\n\
- reduce, reduce_scatter, scan, scatter, scatterv_int\n\
- (Default: all collectives)\n\n\
- -m Comma separated list of message sizes to benchmark\n\
- (Default: 1 to 2^k, where k <= 20)\n\n\
- -g Comma separated list of geometry sizes to benchmark\n\
- (Default: Powers of 2 (plus and minus one as well))\n\n\
- -i Number of benchmark iterations per algorithm\n\
- (Default: 1000. Maximum is 2000)\n\n\
- -f <file> Input INI file containing benchmark parameters\n\
- You can override a parameter with a command line argument\n\n\
- -o <file> Output XML file containing benchmark results\n\
- (Default: pami_tune_results.xml)\n\n\
- -d Diagnostics mode. Verify correctness of collective algorithms\n\
- (Default: Disabled)\n\n\
- -p Print the Collective Algorithm performance data to standard output\n\
- (Default: Disabled)\n\n\
- -h Print this help message\n\n", stdout);
-
- return 0;
-}
-
-
-static void MPIDI_collsel_init_advisor_params(advisor_params_t *params)
-{
- params->num_collectives = 0;
- params->num_procs_per_node = 0;
- params->num_geometry_sizes = 0;
- params->num_message_sizes = 0;
- params->collectives = NULL;
- params->procs_per_node = NULL;
- params->geometry_sizes = NULL;
- params->message_sizes = NULL;
- /* Set the following to -1, so that we can
- check if the user has set them or not */
- params->iter = -1;
- params->verify = -1;
- params->verbose = -1;
- params->checkpoint = -1;
-}
-
-
-static void MPIDI_collsel_free_advisor_params(advisor_params_t *params)
-{
- if(params->collectives) MPIU_Free(params->collectives);
- if(params->procs_per_node) MPIU_Free(params->procs_per_node);
- if(params->geometry_sizes) MPIU_Free(params->geometry_sizes);
- if(params->message_sizes) MPIU_Free(params->message_sizes);
-}
-
-
-static void MPIDI_collsel_init_xfer_tables()
-{
- xfer_array_str[PAMI_XFER_BROADCAST] ="broadcast";
- xfer_array_str[PAMI_XFER_ALLREDUCE] ="allreduce";
- xfer_array_str[PAMI_XFER_REDUCE] ="reduce";
- xfer_array_str[PAMI_XFER_ALLGATHER] ="allgather";
- xfer_array_str[PAMI_XFER_ALLGATHERV] ="allgatherv";
- xfer_array_str[PAMI_XFER_ALLGATHERV_INT]="allgatherv_int";
- xfer_array_str[PAMI_XFER_SCATTER] ="scatter";
- xfer_array_str[PAMI_XFER_SCATTERV] ="scatterv";
- xfer_array_str[PAMI_XFER_SCATTERV_INT] ="scatterv_int";
- xfer_array_str[PAMI_XFER_GATHER] ="gather";
- xfer_array_str[PAMI_XFER_GATHERV] ="gatherv";
- xfer_array_str[PAMI_XFER_GATHERV_INT] ="gatherv_int";
- xfer_array_str[PAMI_XFER_BARRIER] ="barrier";
- xfer_array_str[PAMI_XFER_ALLTOALL] ="alltoall";
- xfer_array_str[PAMI_XFER_ALLTOALLV] ="alltoallv";
- xfer_array_str[PAMI_XFER_ALLTOALLV_INT] ="alltoallv_int";
- xfer_array_str[PAMI_XFER_SCAN] ="scan";
- xfer_array_str[PAMI_XFER_REDUCE_SCATTER]="reduce_scatter";
- xfer_array_str[PAMI_XFER_AMBROADCAST] ="ambroadcast";
- xfer_array_str[PAMI_XFER_AMSCATTER] ="amscatter";
- xfer_array_str[PAMI_XFER_AMGATHER] ="amgather";
- xfer_array_str[PAMI_XFER_AMREDUCE] ="amreduce";
-}
-
-static int MPIDI_collsel_process_collectives(char *coll_arg, advisor_params_t *params)
-{
- int i, ret = 0, arg_len = strlen(coll_arg);
- char *collectives = (char *) MPIU_Malloc(arg_len + 1);
- char *coll;
- int infolevel = 0;
-#if (MPIDI_STATISTICS || MPIDI_PRINTENV)
- if(MPIDI_Process.mp_infolevel >= 1)
- infolevel = 1;
-#endif
- /* if already set via config file, free it */
- if(params->collectives)
- {
- MPIU_Free(params->collectives);
- params->num_collectives = 0;
- }
- /* Allocating some extra space should be fine */
- params->collectives = (pami_xfer_type_t *)MPIU_Malloc(sizeof(pami_xfer_type_t)*PAMI_XFER_COUNT);
-
- strcpy(collectives, coll_arg);
- coll = strtok(collectives,",");
- while (coll != NULL)
- {
- int invalid_collective = 0;
- for(i=0; i<PAMI_XFER_COUNT; i++)
- {
- if(strcmp(coll, xfer_array_str[i]) == 0)
- {
- if(i == 4)
- {
- if(infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (pami_tune) doesn't support tuning for ALLGATHERV. ALLGATHERV tuning will be skipped.\nTune for ALLGATHERV_INT instead\n");
- invalid_collective = 1;
- break;
- }
- else if(i == 7)
- {
- if(infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (pami_tune) doesn't support tuning for SCATTERV. SCATTERV tuning will be skipped.\nTune for SCATTERV_INT instead\n");
- invalid_collective = 1;
- break;
- }
- else if(i == 10)
- {
- if(infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (pami_tune) doesn't support tuning for GATHERV. GATHERV tuning will be skipped.\nTune for GATHERV_INT instead\n");
- invalid_collective = 1;
- break;
- }
- else if(i == 14)
- {
- if(infolevel >= 1)
- fprintf(stderr,"WARNING: MPICH (pami_tune) doesn't support tuning for ALLTOALLV. ALLTOALLV tuning will be skipped.\nTune for ALLTOALLV_INT instead\n");
- invalid_collective = 1;
- break;
- }
- else
- {
- params->collectives[params->num_collectives++] = i;
- break;
- }
- }
- }
- /* arg did not match any collective */
- if(i == PAMI_XFER_COUNT || invalid_collective)
- {
- if(!task_id)
- {
- fprintf(stderr, "Invalid collective: %s\n", coll);
- }
- break;
- }
- coll = strtok(NULL,",");
- }
- if(params->num_collectives == 0)
- {
- MPIU_Free(params->collectives);
- params->collectives = NULL;
- ret = 1;
- }
-
- MPIU_Free(collectives);
- return ret;
-}
-
-
-static int MPIDI_collsel_process_msg_sizes(char *msg_sizes_arg, advisor_params_t *params)
-{
- int ret = 0, arg_len = strlen(msg_sizes_arg);
- char *msg_sizes = (char *) MPIU_Malloc(arg_len + 1);
- char *msg_sz;
- size_t tmp;
- size_t array_size = 50;
- /* if already set via config file, free it */
- if(params->message_sizes)
- {
- MPIU_Free(params->message_sizes);
- params->num_message_sizes = 0;
- }
- /* Allocating some extra space should be fine */
- params->message_sizes = (size_t *)MPIU_Malloc(sizeof(size_t) * array_size);
-
- strcpy(msg_sizes, msg_sizes_arg);
- msg_sz = strtok(msg_sizes,",");
- while (msg_sz != NULL)
- {
- tmp = strtol(msg_sz, NULL, 10);
- if(tmp == 0)
- {
- MPIU_Free(params->message_sizes);
- params->message_sizes = NULL;
- if(!task_id)
- {
- fprintf(stderr, "Invalid message size: %s\n", msg_sz);
- }
- ret = 1;
- break;
- }
-
- if(params->num_message_sizes >= array_size)
- {
- array_size *= 2;
- params->message_sizes = (size_t *) MPIU_Realloc(params->message_sizes,
- sizeof(size_t) * array_size);
- }
- params->message_sizes[params->num_message_sizes++] = tmp;
- msg_sz = strtok(NULL,",");
- }
- MPIU_Free(msg_sizes);
- return ret;
-}
-
-
-static int MPIDI_collsel_process_geo_sizes(char *geo_sizes_arg, advisor_params_t *params)
-{
- int ret = 0, arg_len = strlen(geo_sizes_arg);
- char *geo_sizes = (char *) MPIU_Malloc(arg_len + 1);
- char *geo_sz;
- size_t tmp;
- size_t array_size = 50;
- /* if already set via config file, free it */
- if(params->geometry_sizes)
- {
- MPIU_Free(params->geometry_sizes);
- params->num_geometry_sizes = 0;
- }
- /* Allocating some extra space should be fine */
- params->geometry_sizes = (size_t *)MPIU_Malloc(sizeof(size_t) * array_size);
-
- strcpy(geo_sizes, geo_sizes_arg);
- geo_sz = strtok(geo_sizes,",");
- while (geo_sz != NULL)
- {
- tmp = strtol(geo_sz, NULL, 10);
- if(tmp < 2 || tmp > num_tasks)
- {
- MPIU_Free(params->geometry_sizes);
- params->geometry_sizes = NULL;
- if(!task_id)
- {
- fprintf(stderr, "Invalid geometry size: %s\n", geo_sz);
- }
- ret = 1;
- break;
- }
-
- if(params->num_geometry_sizes >= array_size)
- {
- array_size *= 2;
- params->geometry_sizes = (size_t *) MPIU_Realloc(params->geometry_sizes,
- sizeof(size_t) * array_size);
- }
- params->geometry_sizes[params->num_geometry_sizes++] = tmp;
- geo_sz = strtok(NULL,",");
- }
- MPIU_Free(geo_sizes);
- return ret;
-}
-
-
-static int MPIDI_collsel_process_output_file(char *filename, char **out_file)
-{
- char *newname;
- int i, filename_len, ret = 0;
- struct stat ost;
-
- filename_len = strlen(filename);
-
- /* Check if file already exists */
- if(stat(filename, &ost) == 0)
- {
- if(!S_ISREG(ost.st_mode))
- {
- fprintf(stderr, "Error: %s exists and is not a regular file\n", filename);
- return 1;
- }
- fprintf(stderr, "File %s already exists, renaming existing file\n", filename);
-
- newname = (char *) MPIU_Malloc(filename_len + 5);
- for (i = 0; i < 500; ++i)
- {
- sprintf(newname,"%s.%d", filename, i);
- if(!(access(newname, F_OK) == 0))
- {
- ret = rename(filename, newname);
- break;
- }
- }
- MPIU_Free(newname);
- if(i == 500 || ret != 0)
- {
- fprintf(stderr, "Error renaming file\n");
- return 1;
- }
- }
- /* if file name is already set via config file, free it */
- if(*out_file) MPIU_Free(*out_file);
- *out_file = (char *)MPIU_Malloc(filename_len + 1);
- strcpy(*out_file, filename);
-
- return ret;
-}
-
-
-static char* MPIDI_collsel_ltrim(char *line)
-{
- while(*line && isspace(*line))
- ++line;
-
- return line;
-}
-
-static char* MPIDI_collsel_rtrim(char *line)
-{
- char *end = line + strlen(line);
- while(end > line && isspace(*--end))
- *end = '\0';
-
- return line;
-}
-
-static int MPIDI_collsel_checkvalue(char *name, char *value, const char *filename, int *ival)
-{
- int ret = 0;
- char *tmp;
- *ival = (int)strtol(value, &tmp, 10);
- if(*ival != 1)
- {
- if((*ival == 0 && value == tmp)|| *ival != 0)
- {
- if(!task_id)
- fprintf(stderr, "Invalid value for %s parameter: %s in file: %s\n", name, value, filename);
- ret = 1;
- }
- }
- return ret;
-}
-
-
-static int MPIDI_collsel_process_ini_file(const char *filename, advisor_params_t *params, char **out_file)
-{
- char *line, *start, *name, *value;
- int ret = 0;
- struct stat ist;
-
- if(stat(filename, &ist) == 0)
- {
- if(!S_ISREG(ist.st_mode))
- {
- fprintf(stderr, "Error: %s is not a regular file\n", filename);
- return 1;
- }
- }
-
- FILE *file = fopen(filename, "r");
- if(!file)
- {
- fprintf(stderr, "Error: Cannot open file %s: %s\n",
- filename, strerror(errno));
- return 1;
- }
- line = (char *) MPIU_Malloc(2000);
-
- while (fgets(line, 2000, file) != NULL)
- {
- start = MPIDI_collsel_ltrim(MPIDI_collsel_rtrim(line));
- /* Skip comments and sections */
- if(*start == ';' || *start == '[' || *start == '#')
- continue;
- name = strtok(line, "=");
- if(name == NULL) continue;
- value = strtok(NULL, "=");
- if(value == NULL) continue;
- name = MPIDI_collsel_rtrim(name);
- value = MPIDI_collsel_ltrim(value);
- /* Do not override command line values if they are set */
- if(strcmp(name, "collectives") == 0)
- {
- if(!params->collectives)
- ret = MPIDI_collsel_process_collectives(value, params);
- }
- else if(strcmp(name, "message_sizes") == 0)
- {
- if(!params->message_sizes)
- ret = MPIDI_collsel_process_msg_sizes(value, params);
- }
- else if(strcmp(name, "geometry_sizes") == 0)
- {
- if(!params->geometry_sizes)
- ret = MPIDI_collsel_process_geo_sizes(value, params);
- }
- else if(strcmp(name, "output_file") == 0)
- {
- if(!*out_file && !task_id) /* Only task 0 creates o/p file */
- ret = MPIDI_collsel_process_output_file(value, out_file);
- }
- else if(strcmp(name, "iterations") == 0)
- {
- if(params->iter == -1)
- {
- params->iter = atoi(value);
- if(params->iter <= 0 || params->iter > PAMI_TUNE_MAX_ITER)
- {
- if(!task_id)
- fprintf(stderr, "Invalid iteration count: %s in file: %s\n", value, filename);
- ret = 1;
- }
- }
- }
- else if(strcmp(name, "verbose") == 0)
- {
- if(params->verbose == -1)
- ret = MPIDI_collsel_checkvalue(name, value, filename, ¶ms->verbose);
- }
- else if(strcmp(name, "diagnostics") == 0)
- {
- if(params->verify == -1)
- ret = MPIDI_collsel_checkvalue(name, value, filename, ¶ms->verify);
- }
- /*else if(strcmp(name, "checkpoint") == 0)
- {
- if(params->checkpoint == -1)
- ret = MPIDI_collsel_checkvalue(name, value, filename, ¶ms->checkpoint);
- }*/
- else
- {
- fprintf(stderr, "Invalid parameter: %s in file: %s\n", name, filename);
- ret = 1;
- }
- if(ret) break;
- }
- MPIU_Free(line);
- fclose(file);
-
- return ret;
-}
-
-
-static int MPIDI_collsel_process_arg(int argc, char *argv[], advisor_params_t *params, char ** out_file)
-{
- int i,c,ret = 0;
- char *in_file = NULL;
-
- MPIDI_collsel_init_xfer_tables();
- params->verify = 0;
-
- opterr = 0;
- while ((c = getopt (argc, argv, "c:m:g:f:o:i:p::d::x::h::")) != -1)
- {
- switch (c)
- {
- case 'c':
- ret = MPIDI_collsel_process_collectives(optarg, params);
- break;
- case 'm':
- ret = MPIDI_collsel_process_msg_sizes(optarg, params);
- break;
- case 'g':
- ret = MPIDI_collsel_process_geo_sizes(optarg, params);
- break;
- case 'f':
- in_file = (char *) optarg;
- break;
- case 'o':
- if(!task_id) /* Only task 0 creates o/p file */
- ret = MPIDI_collsel_process_output_file(optarg, out_file);
- break;
- case 'i':
- params->iter = atoi(optarg);
- if(params->iter <= 0 || params->iter > PAMI_TUNE_MAX_ITER)
- {
- if(!task_id)
- fprintf(stderr, "Invalid iteration count %s\n", optarg);
- ret = 1;
- }
- break;
- case 'd':
- params->verify = 1;
- break;
- case 'p':
- params->verbose = 1;
- break;
- case 'x':
- /*params->checkpoint = 1;*/
- break;
- case 'h':
- ret = 2;
- break;
- case '?':
- if(!task_id)
- {
- if (optopt == 'c' || optopt == 'm' || optopt == 'g' ||
- optopt == 'f' || optopt == 'o' || optopt == 'i')
- {
- fprintf (stderr, "Option -%c requires an argument.\n", optopt);
- }
- else if (isprint (optopt))
- {
- fprintf (stderr, "Unknown option `-%c'.\n", optopt);
- }
- else
- {
- fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt);
- }
- }
- ret = 1;
- break;
- default:
- abort();
- break;
- }
- if(ret) return ret;
- }
- /* INI file is processed last as we don't wan't to override
- * command line parameters. Also any invalid value in the INI
- * file if overriden by a command line flag should not generate
- * an error
- */
- if(in_file != NULL)
- {
- ret = MPIDI_collsel_process_ini_file(in_file, params, out_file);
- if(ret) return ret;
- }
-
- if(!task_id)
- {
- if (optind < argc)
- {
- printf ("Non-option arguments: ");
- while (optind < argc)
- printf ("%s ", argv[optind++]);
- printf ("\n");
- }
- }
-
- /* If user did not specify any collectives, benchmark all */
- if(params->num_collectives == 0)
- {
- params->collectives = (pami_xfer_type_t *)MPIU_Malloc(sizeof(pami_xfer_type_t)*PAMI_XFER_COUNT);
- for(i = 0; i < PAMI_XFER_COUNT; i++)
- {
- if(i == 4 || i == 7 || i == 10 || i == 14)
- i++;
- params->collectives[params->num_collectives++] = i;
- }
- }
- /* If user did not set any of the following parameters, set default value */
- if(params->iter == -1) params->iter = 1000;
- if(params->verbose == -1) params->verbose = 0;
- if(params->verify == -1) params->verify = 0;
- if(params->checkpoint == -1) params->checkpoint = 0;
- return 0;
-}
-
-
-static void MPIDI_collsel_print_params(advisor_params_t *params, char *output_file)
-{
- size_t i;
- printf(" Benchmark Parameters\n");
- printf(" --------------------\n");
-
- printf(" Collectives:\n ");
- for(i=0; i<params->num_collectives; i++){
- printf(" %s", xfer_array_str[params->collectives[i]]);
- }
- printf("\n Geometry sizes:\n ");
- for(i=0; i<params->num_geometry_sizes; i++){
- printf(" %zu", params->geometry_sizes[i]);
- }
- printf("\n Message sizes:\n ");
- for(i=0; i<params->num_message_sizes; i++){
- printf(" %zu", params->message_sizes[i]);
- }
- printf("\n Iterations : %d\n", params->iter);
- printf(" Output file : %s\n", output_file);
-/* printf(" Checkpoint mode : %d\n", params->checkpoint); */
- printf(" Diagnostics mode : %d\n", params->verify);
- printf(" Verbose mode : %d\n", params->verbose);
-}
-
-
-int MPIDI_collsel_pami_tune_parse_params(int argc, char ** argv)
-{
- MPIDI_Collsel_output_file = NULL;
- num_tasks = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_NUM_TASKS).value.intval;
- task_id = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_TASK_ID ).value.intval;
- MPIDI_collsel_init_advisor_params(&MPIDI_Collsel_advisor_params);
- if(num_tasks < 2)
- {
- fprintf (stderr, "Error: pami_tune must be run with more than one task\n");
- fflush(stderr);
- MPIDI_collsel_print_usage();
- return PAMI_ERROR;
- }
- MPIDI_Collsel_advisor_params.procs_per_node = (size_t*)MPIU_Malloc(1 * sizeof(size_t));
- MPIDI_Collsel_advisor_params.num_procs_per_node = 1;
- MPIDI_Collsel_advisor_params.procs_per_node[0] = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_NUM_LOCAL_TASKS ).value.intval;
-
- int result = MPIDI_collsel_process_arg(argc, argv, &MPIDI_Collsel_advisor_params, &MPIDI_Collsel_output_file);
- if(result)
- {
- MPIDI_collsel_print_usage();
- return PAMI_ERROR;
- }
-
- if(MPIDI_Collsel_output_file == NULL && !task_id)
- {
- if(MPIDI_collsel_process_output_file("pami_tune_results.xml", &MPIDI_Collsel_output_file))
- {
- return PAMI_ERROR;
- }
- }
- if(MPIDI_Collsel_advisor_params.verbose && !task_id)
- MPIDI_collsel_print_params(&MPIDI_Collsel_advisor_params, MPIDI_Collsel_output_file);
-
- return PAMI_SUCCESS;
-
-}
-
-void MPIDI_collsel_pami_tune_cleanup()
-{
- MPIDI_collsel_free_advisor_params(&MPIDI_Collsel_advisor_params);
-}
-
-
-
-/**********************************************************/
-/* CUDA Utilities */
-/**********************************************************/
-#if CUDA_AWARE_SUPPORT
-int CudaMemcpy(void* dst, const void* src, size_t count, int kind)
-{
- return (*pamidCudaMemcpy)(dst, src, count, kind);
-}
-int CudaPointerGetAttributes(struct cudaPointerAttributes* attributes, const void* ptr)
-{
- return (*pamidCudaPointerGetAttributes)(attributes, ptr);
-}
-const char* CudaGetErrorString( int error)
-{
- return (*pamidCudaGetErrorString)(error);
-}
-#endif
-
-inline bool MPIDI_enable_cuda()
-{
- bool result = false;
-#if CUDA_AWARE_SUPPORT
- pamidCudaPtr = dlopen("libcudart.so", RTLD_NOW|RTLD_GLOBAL);
- if(pamidCudaPtr == NULL)
- {
- TRACE_ERR("failed to open libcudart.so error=%s\n", dlerror());
- return result;
- }
- else
- {
- pamidCudaMemcpy = (int (*)())dlsym(pamidCudaPtr, "cudaMemcpy");
- if(pamidCudaMemcpy == NULL)
- {
- dlclose(pamidCudaPtr);
- return result;
- }
- pamidCudaPointerGetAttributes = (int (*)())dlsym(pamidCudaPtr, "cudaPointerGetAttributes");
- if(pamidCudaPointerGetAttributes == NULL)
- {
- dlclose(pamidCudaPtr);
- return result;
- }
- pamidCudaGetErrorString = (const char* (*)())dlsym(pamidCudaPtr, "cudaGetErrorString");
- if(pamidCudaGetErrorString == NULL)
- {
- dlclose(pamidCudaPtr);
- return result;
- }
- result = true;
- }
-#endif
- return result;
-}
-
-inline bool MPIDI_cuda_is_device_buf(const void* ptr)
-{
- bool result = false;
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on)
- {
- if(ptr != MPI_IN_PLACE)
- {
- struct cudaPointerAttributes cuda_attr;
- cudaError_t e= CudaPointerGetAttributes ( & cuda_attr, ptr);
-
- if (e != cudaSuccess)
- result = false;
- else if (cuda_attr.memoryType == cudaMemoryTypeDevice)
- result = true;
- else
- result = false;
- }
- }
-#endif
- return result;
-}
-
-
-/**********************************************************/
-/* End CUDA Utilities */
-/**********************************************************/
-
-#if defined(MPID_USE_NODE_IDS)
-#undef FUNCNAME
-#define FUNCNAME MPID_Get_node_id
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-static int _g_max_node_id = -1;
-int MPID_Get_node_id(MPID_Comm *comm, int rank, MPID_Node_id_t *id_p)
-{
- int mpi_errno = MPI_SUCCESS;
- uint32_t node_id;
- uint32_t offset;
- uint32_t max_nodes;
-
- if(!PAMIX_Extensions.is_local_task.node_info)
- {
- *id_p = rank;
- }
- else
- {
- pami_result_t rc = PAMIX_Extensions.is_local_task.node_info(comm->vcr[rank]->taskid,
- &node_id,&offset,&max_nodes);
- if(rc != PAMI_SUCCESS)
- *id_p = rank;
- else
- *id_p = node_id;
- }
-
- fn_fail:
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Get_max_node_id
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Get_max_node_id(MPID_Comm *comm, MPID_Node_id_t *max_id_p)
-{
- int mpi_errno = MPI_SUCCESS;
- uint32_t node_id;
- uint32_t offset;
- uint32_t max_nodes;
- if(_g_max_node_id == -1)
- {
- if(!PAMIX_Extensions.is_local_task.node_info)
- MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**notimpl");
-
- pami_result_t rc = PAMIX_Extensions.is_local_task.node_info(comm->vcr[0]->taskid,
- &node_id,&offset,&max_nodes);
- if(rc != PAMI_SUCCESS) MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**notimpl");
- *max_id_p = max_nodes;
- _g_max_node_id = max_nodes;
- }
- else
- *max_id_p = _g_max_node_id;
-
- fn_fail:
- return mpi_errno;
-}
-#endif
-#undef FUNCNAME
diff --git a/src/mpid/pamid/src/mpix/Makefile.mk b/src/mpid/pamid/src/mpix/Makefile.mk
deleted file mode 100644
index 8f4b990..0000000
--- a/src/mpid/pamid/src/mpix/Makefile.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/mpix/mpix.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/mpix/mpix.c b/src/mpid/pamid/src/mpix/mpix.c
deleted file mode 100644
index fdb2d28..0000000
--- a/src/mpid/pamid/src/mpix/mpix.c
+++ /dev/null
@@ -1,1210 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/mpix/mpix.c
- * \brief This file is for MPI extensions that MPI apps are likely to use.
- */
-
-#include <mpidimpl.h>
-
-#ifdef __BGQ__
-#include <stdlib.h>
-#include <spi/include/kernel/location.h>
-#endif /* __BGQ__ */
-
-MPIX_Hardware_t MPIDI_HW;
-
-/* Determine the number of torus dimensions. Implemented to keep this code
- * architecture-neutral. do we already have this cached somewhere?
- * this call is non-destructive (no asserts), however future calls are
- * destructive so the user needs to verify numdimensions != -1
- */
-
-
-static void
-MPIX_Init_hw(MPIX_Hardware_t *hw)
-{
- memset(hw, 0, sizeof(MPIX_Hardware_t));
-
- hw->clockMHz = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_CLOCK_MHZ).value.intval;
- hw->memSize = PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_MEM_SIZE).value.intval;
-
-#ifdef __BGQ__
- int i=0;
- const pamix_torus_info_t *info = PAMIX_Torus_info();
- /* The extension returns a "T" dimension */
- hw->torus_dimension = info->dims-1;
-
- hw->psize = info->size[info->dims-1];
- for(i=0;i<info->dims-1;i++)
- {
- hw->Size[i] = info->size[i];
- hw->Coords[i] = info->coord[i];
- hw->isTorus[i] = info->torus[i];
- hw->psize = hw->psize * info->size[i];
- }
-
- hw->prank = info->coord[0];
- for(i=1;i<info->dims;i++)
- {
- hw->prank = (hw->prank * info->size[i] + info->coord[i]);
- }
-
- /* The torus extension returns "T" as the last element */
- hw->coreID = info->coord[info->dims-1];
- hw->ppn = info->size[info->dims-1];
-#endif
-}
-
-
-void
-MPIX_Init()
-{
- MPIX_Init_hw(&MPIDI_HW);
-}
-
-
-#if !defined(__AIX__)
-extern int backtrace(void **buffer, int size); /**< GlibC backtrace support */
-extern char **backtrace_symbols(void *const *buffer, int size); /**< GlibC backtrace support */
-void MPIX_Dump_stacks()
-{
- const size_t SIZE=32;
- void *array[SIZE];
- size_t i;
- size_t size = backtrace(array, SIZE);
- char **bt_strings = backtrace_symbols(array, size);
- fprintf(stderr, "Dumping %zd frames:\n", size - 1);
- for (i = 1; i < size; i++)
- {
- if (bt_strings != NULL)
- fprintf(stderr, "\tFrame %zd: %p: %s\n", i, array[i], bt_strings[i]);
- else
- fprintf(stderr, "\tFrame %zd: %p\n", i, array[i]);
- }
- /* This is #ifdef'd out: In debug libraries, it causes a compile error. */
-#if 0
- free(bt_strings); /* Since this is not allocated by MPIU_Malloc, do not use MPIU_Free */
-#endif
-}
-#else
-void MPIX_Dump_stacks(){}
-#endif
-
-
-void
-MPIX_Progress_poke()
-{
- MPID_Progress_poke();
-}
-
-
-int
-MPIX_Progress_quiesce(double timeout)
-{
- int rc;
- timeout *= 1.0e6; /* convert to uSec */
- unsigned long long cycles = timeout; /* convert to long long */
- /* default to 10mS */
- cycles = (cycles ? cycles : 10000) * MPIDI_HW.clockMHz;
- unsigned long long t0;
- t0 = PAMI_Wtimebase(MPIDI_Client);
- while (PAMI_Wtimebase(MPIDI_Client) - t0 < cycles) {
- rc = MPID_Progress_wait_inline(1);
- if (rc != MPI_SUCCESS) return rc;
- }
- return MPI_SUCCESS;
-}
-
-
-int
-MPIX_Comm_rank2global(MPI_Comm comm, int crank, int *grank)
-{
- if (grank == NULL)
- return MPI_ERR_ARG;
-
- MPID_Comm *comm_ptr = NULL;
- MPID_Comm_get_ptr(comm, comm_ptr);
- if (comm_ptr == NULL)
- return MPI_ERR_COMM;
-
- if (crank >= comm_ptr->local_size)
- return MPI_ERR_RANK;
-
- *grank = MPID_VCR_GET_LPID(comm_ptr->vcr, crank);
- return MPI_SUCCESS;
-}
-
-
-int
-MPIX_Hardware(MPIX_Hardware_t *hw)
-{
- if (hw == NULL)
- return MPI_ERR_ARG;
-
- /*
- * We've already initialized the hw structure in MPID_Init,
- * so just copy it to the users buffer
- */
- memcpy(hw, &MPIDI_HW, sizeof(MPIX_Hardware_t));
- return MPI_SUCCESS;
-}
-
-#if (MPIDI_PRINTENV || MPIDI_STATISTICS || MPIDI_BANNER)
-void mpc_statistics_write() __attribute__ ((alias("MPIX_statistics_write")));
-void mp_statistics_write() __attribute__ ((alias("MPIXF_statistics_write")));
-void mp_statistics_write_() __attribute__ ((alias("MPIXF_statistics_write")));
-void mp_statistics_write__() __attribute__ ((alias("MPIXF_statistics_write")));
-void mpc_statistics_zero() __attribute__ ((alias("MPIX_statistics_zero")));
-void mp_statistics_zero() __attribute__ ((alias("MPIXF_statistics_zero")));
-void mp_statistics_zero_() __attribute__ ((alias("MPIXF_statistics_zero")));
-void mp_statistics_zero__() __attribute__ ((alias("MPIXF_statistics_zero")));
-
- /* ------------------------------------------- */
- /* - MPIDI_Statistics_zero and -------- */
- /* - MPIDI_Statistics_write can be -------- */
- /* - called during init and finalize -------- */
- /* - PE utiliti routines -------- */
- /* -------------------------------------------- */
-
-int
-MPIDI_Statistics_zero(void)
-{
- int rc=0;
-
- mpid_statp->sends = 0;
- mpid_statp->sendsComplete = 0;
- mpid_statp->sendWaitsComplete = 0;
- mpid_statp->recvs = 0;
- mpid_statp->recvWaitsComplete = 0;
- mpid_statp->earlyArrivals = 0;
- mpid_statp->earlyArrivalsMatched = 0;
- mpid_statp->lateArrivals = 0;
- mpid_statp->unorderedMsgs = 0;
-
- return (rc); /* to map with current PE support */
-}
- /***************************************************************************
- Function Name: _MPIX_statistics_zero
-
- Description: Call the corresponding MPIDI_statistics_zero function to initialize/clear
- statistics counter.
-
- Parameters:
- Name Type I/O
- void
- int >0 Success
- <0 statistics not enable
- ***************************************************************************/
-
-int _MPIX_statistics_zero (void)
-{
- int rc = MPIDI_Statistics_zero();
- if (rc < 0) {
- MPID_assert(rc == PAMI_SUCCESS);
- }
- return(rc);
-}
-
-int MPIX_statistics_zero(void)
-{
- return(_MPIX_statistics_zero());
-}
-
-void MPIXF_statistics_zero(int *rc)
-{
- *rc = _MPIX_statistics_zero();
-}
-
-
-int
-MPIDI_Statistics_write(FILE *statfile) {
-
- int rc=-1;
- int i;
- char time_buf[201];
- extern pami_extension_t extension;
- pami_configuration_t query_stat;
- pami_statistics_t *pami_stat;
- pami_counter_t *pami_counters;
- long long Tot_dup_pkt_cnt=0;
- long long Tot_retrans_pkt_cnt=0;
- long long Tot_gho_pkt_cnt=0;
- long long Tot_pkt_sent_cnt=0;
- long long Tot_pkt_recv_cnt=0;
- long long Tot_data_sent=0;
- long long Tot_data_recv=0;
- extern long mem_hwmark;
-
- memset(&time_buf,0, 201);
- sprintf(time_buf, __DATE__" "__TIME__);
- mpid_statp->buffer_mem_hwmark = mem_hwmark;
- mpid_statp->sendWaitsComplete = mpid_statp->sends - mpid_statp->sendsComplete;
- fprintf(statfile,"Start of task (pid=%d) statistics at %s \n", getpid(), time_buf);
- fprintf(statfile, "MPICH: sends = %ld\n", mpid_statp->sends);
- fprintf(statfile, "MPICH: sendsComplete = %ld\n", mpid_statp->sendsComplete);
- fprintf(statfile, "MPICH: sendWaitsComplete = %ld\n", mpid_statp->sendWaitsComplete);
- fprintf(statfile, "MPICH: recvs = %ld\n", mpid_statp->recvs);
- fprintf(statfile, "MPICH: recvWaitsComplete = %ld\n", mpid_statp->recvWaitsComplete);
- fprintf(statfile, "MPICH: earlyArrivals = %ld\n", mpid_statp->earlyArrivals);
- fprintf(statfile, "MPICH: earlyArrivalsMatched = %ld\n", mpid_statp->earlyArrivalsMatched);
- fprintf(statfile, "MPICH: lateArrivals = %ld\n", mpid_statp->lateArrivals);
- fprintf(statfile, "MPICH: unorderedMsgs = %ld\n", mpid_statp->unorderedMsgs);
- fprintf(statfile, "MPICH: buffer_mem_hwmark = %ld\n", mpid_statp->buffer_mem_hwmark);
- fflush(statfile);
- memset(&query_stat,0, sizeof(query_stat));
- query_stat.name = (pami_attribute_name_t)PAMI_CONTEXT_STATISTICS ;
- rc = PAMI_Context_query(MPIDI_Context[0], &query_stat, 1);
- pami_stat = (pami_statistics_t*)query_stat.value.chararray;
- pami_counters = pami_stat->counters;
- if (!rc) {
- for (i = 0; i < pami_stat->count; i ++) {
- printf("+++%s:%llu\n", pami_counters[i].name, pami_counters[i].value);
- if (!strncasecmp("Duplicate Pkt Count",pami_counters[i].name,19)) {
- Tot_dup_pkt_cnt=pami_counters[i].value;
- } else if (!strncasecmp("Retransmit Pkt Count",pami_counters[i].name,20)) {
- Tot_retrans_pkt_cnt=pami_counters[i].value;
- } else if (!strncasecmp("Ghost Pkt Count",pami_counters[i].name,15)) {
- Tot_gho_pkt_cnt=pami_counters[i].value;
- } else if (!strncasecmp("Packets Sent",pami_counters[i].name,12) &&
- (!(strchr(pami_counters[i].name, 'v')))) {
- /* Packets Sent, not Packets Sent via SHM */
- Tot_pkt_sent_cnt=pami_counters[i].value;
- } else if (!strncasecmp("Packets Received",pami_counters[i].name,16) &&
- (!(strchr(pami_counters[i].name, 'S')))) {
- /* Packets Received, not Packets Received via SHM */
- Tot_pkt_recv_cnt=pami_counters[i].value;
- } else if (!strncasecmp("Data Sent",pami_counters[i].name,9) &&
- (!(strchr(pami_counters[i].name, 'v')))) {
- /* Data Sent, not Data Sent via SHM */
- Tot_data_sent=pami_counters[i].value;
- } else if (!strncasecmp("Data Received",pami_counters[i].name,13) &&
- (!(strchr(pami_counters[i].name, 'S')))) {
- /* Data Received, not Data Received via SHM */
- Tot_data_recv=pami_counters[i].value;
- }
- }
- fprintf(statfile, "PAMI: Tot_dup_pkt_cnt=%lld\n", Tot_dup_pkt_cnt);
- fprintf(statfile, "PAMI: Tot_retrans_pkt_cnt=%lld\n", Tot_retrans_pkt_cnt);
- fprintf(statfile, "PAMI: Tot_gho_pkt_cnt=%lld\n", Tot_gho_pkt_cnt);
- fprintf(statfile, "PAMI: Tot_pkt_sent_cnt=%lld\n", Tot_pkt_sent_cnt);
- fprintf(statfile, "PAMI: Tot_pkt_recv_cnt=%lld\n", Tot_pkt_recv_cnt);
- fprintf(statfile, "PAMI: Tot_data_sent=%lld\n", Tot_data_sent);
- fprintf(statfile, "PAMI: Tot_data_recv=%lld\n", Tot_data_recv);
- fflush(statfile);
- } else {
- TRACE_ERR("PAMID: PAMI_Context_query() with PAMI_CONTEXT_STATISTICS failed rc =%d\
-n",rc);
- }
- return (rc);
-}
- /***************************************************************************
- Function Name: _MPIX_statistics_write
- Description: Call MPIDI_Statistics_write to write statistical
- information to specified file descriptor.
- Parameters:
- Name Type I/O
- fptr FILE* I File pointer, can be stdout or stderr.
- If it is to a file, user has to open
- the file.
- rc (Fortran only) int 0 Return sum from MPIDI_Statistics_write calls
- <returns> (C only) 0 Both MPICH and PAMI statistics
- ***************************************************************************/
-int _MPIX_statistics_write(FILE* fptr)
-{
- int rc = MPIDI_Statistics_write(fptr);
- if (rc < 0) {
- MPID_assert(rc == PAMI_SUCCESS);
- }
- return(rc);
-}
-
-int MPIX_statistics_write(FILE* fptr)
-{
- return(_MPIX_statistics_write(fptr));
-}
-
-/* Fortran: fdes is pointer to a file descriptor.
- * rc is pointer to buffer for storing return code.
- *
- * Note: Fortran app. will convert a Fortran I/O unit to a file
- * descriptor by calling Fortran utilities, flush_ and getfd.
- * When fdes=1, output is to STDOUT. When fdes=2, output is to STDERR.
- */
-
-void MPIXF_statistics_write(int *fdes, int *rc)
-{
- FILE *fp;
- int dup_fd;
- int closefp=0;
-
- /* Convert the DUP file descriptor to a FILE pointer */
- dup_fd = dup(*fdes);
- if ( (fp = fdopen(dup_fd, "a")) != NULL )
- closefp = 1;
- else
- fp = stdout; /* If fdopen failed then default to stdout */
-
- *rc = _MPIX_statistics_write(fp);
-
- /* The check is because I don't want to close stdout. */
- if ( closefp ) fclose(fp);
-}
-
-void MPIXF_statistics_write_(int *fdes, int *rc)
-{
- FILE *fp;
- int dup_fd;
- int closefp=0;
-
- /* Convert the DUP file descriptor to a FILE pointer */
- dup_fd = dup(*fdes);
- if ( (fp = fdopen(dup_fd, "a")) != NULL )
- closefp = 1;
- else
- fp = stdout; /* If fdopen failed then default to stdout */
-
- *rc = _MPIX_statistics_write(fp);
-
- /* The check is because I don't want to close stdout. */
- if ( closefp ) fclose(fp);
-}
-#endif
-
-
-#ifdef __BGQ__
-
-int
-MPIX_Torus_ndims(int *numdimensions)
-{
- const pamix_torus_info_t *info = PAMIX_Torus_info();
- *numdimensions = info->dims - 1;
- return MPI_SUCCESS;
-}
-
-
-int
-MPIX_Rank2torus(int rank, int *coords)
-{
- size_t coord_array[MPIDI_HW.torus_dimension+1];
-
- PAMIX_Task2torus(rank, coord_array);
-
- unsigned i;
- for(i=0; i<MPIDI_HW.torus_dimension+1; ++i)
- coords[i] = coord_array[i];
-
- return MPI_SUCCESS;
-}
-
-
-int
-MPIX_Torus2rank(int *coords, int *rank)
-{
- size_t coord_array[MPIDI_HW.torus_dimension+1];
- pami_task_t task;
-
- unsigned i;
- for(i=0; i<MPIDI_HW.torus_dimension+1; ++i)
- coord_array[i] = coords[i];
-
- PAMIX_Torus2task(coord_array, &task);
- *rank = task;
-
- return MPI_SUCCESS;
-}
-
-
-typedef struct
-{
- pami_geometry_t geometry;
- pami_work_t state;
- pami_configuration_t config;
- size_t num_configs;
- pami_event_function fn;
- void* cookie;
-} MPIX_Comm_update_data_t;
-
-static void
-MPIX_Comm_update_done(void *ctxt, void *data, pami_result_t err)
-{
- int *active = (int *)data;
- (*active)--;
-}
-
-static pami_result_t
-MPIX_Comm_update_post(pami_context_t context, void *cookie)
-{
- MPIX_Comm_update_data_t *data = (MPIX_Comm_update_data_t *)cookie;
-
- return PAMI_Geometry_update(data->geometry,
- &data->config,
- data->num_configs,
- context,
- data->fn,
- data->cookie);
-}
-
-int
-MPIX_Comm_update(MPI_Comm comm, int optimize)
-{
- MPID_Comm * comm_ptr;
- volatile int geom_update = 1;
- MPIX_Comm_update_data_t data;
- pami_configuration_t config;
-
- MPID_Comm_get_ptr(comm, comm_ptr);
- if (!comm_ptr || comm == MPI_COMM_NULL)
- return MPI_ERR_COMM;
-
- /* First, check if there is a geometry. When optimized collectives
- * are disabled, no geometry is created */
- if(comm_ptr->mpid.geometry == NULL)
- return MPI_ERR_COMM;
-
- config.name = PAMI_GEOMETRY_OPTIMIZE;
- config.value.intval = !!optimize;
-
- TRACE_ERR("About to %s geometry update function\n", MPIDI_Process.context_post.active>0?"post":"invoke");
- data.num_configs = 1;
- data.config.name = config.name;
- data.config.value.intval = config.value.intval;
- data.fn = MPIX_Comm_update_done;
- data.cookie = (void *)&geom_update;
- data.geometry = comm_ptr->mpid.geometry;
- MPIDI_Context_post(MPIDI_Context[0],
- &data.state,
- MPIX_Comm_update_post,
- &data);
- TRACE_ERR("Geometry update function %s\n", MPIDI_Process.context_post.active>0?"posted":"invoked");
-
- TRACE_ERR("Waiting for geometry update to finish\n");
-
- MPID_PROGRESS_WAIT_WHILE(geom_update);
-
- MPIDI_Comm_coll_query(comm_ptr);
- MPIDI_Comm_coll_envvars(comm_ptr);
- if(MPIDI_Process.optimized.select_colls)
- MPIDI_Comm_coll_select(comm_ptr);
-
- return MPI_SUCCESS;
-}
-
-int
-MPIX_Get_last_algorithm_name(MPI_Comm comm, char *protocol, int length)
-{
- MPID_Comm *comm_ptr;
- MPID_Comm_get_ptr(comm, comm_ptr);
-
- if(!comm_ptr || comm == MPI_COMM_NULL)
- return MPI_ERR_COMM;
- if(!protocol || length <= 0)
- return MPI_ERR_ARG;
- strncpy(protocol, comm_ptr->mpid.last_algorithm, length);
- return MPI_SUCCESS;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_IO_node_id
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIX_IO_node_id ()
-{
- static unsigned long IO_node_id = ULONG_MAX;
-
- if (IO_node_id != ULONG_MAX)
- return (int)(IO_node_id>>32);
-
- int rc;
- int fd;
- char* uci_str;
- char buffer[4096];
-
- fd = open("/dev/bgpers", O_RDONLY, 0);
- assert(fd>=0);
- rc = read(fd, buffer, sizeof(buffer));
- assert(rc>0);
- close(fd);
-
- uci_str = strstr(buffer, "BG_UCI=");
- assert(uci_str);
- uci_str += sizeof("BG_UCI=")-1;
-
- IO_node_id = strtoul(uci_str, NULL, 16);
- return (int)(IO_node_id>>32);
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_IO_link_id
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIX_IO_link_id ()
-{
- int nB, nC, nD, nE; /* Size of each torus dimension */
- int brA, brB, brC, brD, brE; /* The bridge node's coordinates */
-
- Personality_t personality;
-
- Kernel_GetPersonality(&personality, sizeof(personality));
-
- nB = personality.Network_Config.Bnodes;
- nC = personality.Network_Config.Cnodes;
- nD = personality.Network_Config.Dnodes;
- nE = personality.Network_Config.Enodes;
-
- brA = personality.Network_Config.cnBridge_A;
- brB = personality.Network_Config.cnBridge_B;
- brC = personality.Network_Config.cnBridge_C;
- brD = personality.Network_Config.cnBridge_D;
- brE = personality.Network_Config.cnBridge_E;
-
- /*
- * This is the bridge node, numbered in ABCDE order, E increments first.
- * It is considered the unique "io node route identifer" because each
- * bridge node only has one torus link to one io node.
- */
- return brE + brD*nE + brC*nD*nE + brB*nC*nD*nE + brA*nB*nC*nD*nE;
-};
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_IO_distance
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIX_IO_distance ()
-{
- int iA, iB, iC, iD, iE; /* The local node's coordinates */
- int nA, nB, nC, nD, nE; /* Size of each torus dimension */
- int brA, brB, brC, brD, brE; /* The bridge node's coordinates */
- int Nflags;
- int d1, d2;
- int dA, dB, dC, dD, dE; /* distance from local node to bridge node */
-
- Personality_t personality;
-
- Kernel_GetPersonality(&personality, sizeof(personality));
-
- iA = personality.Network_Config.Acoord;
- iB = personality.Network_Config.Bcoord;
- iC = personality.Network_Config.Ccoord;
- iD = personality.Network_Config.Dcoord;
- iE = personality.Network_Config.Ecoord;
-
- nA = personality.Network_Config.Anodes;
- nB = personality.Network_Config.Bnodes;
- nC = personality.Network_Config.Cnodes;
- nD = personality.Network_Config.Dnodes;
- nE = personality.Network_Config.Enodes;
-
- brA = personality.Network_Config.cnBridge_A;
- brB = personality.Network_Config.cnBridge_B;
- brC = personality.Network_Config.cnBridge_C;
- brD = personality.Network_Config.cnBridge_D;
- brE = personality.Network_Config.cnBridge_E;
-
- Nflags = personality.Network_Config.NetFlags;
-
- dA = abs(iA - brA);
- if (Nflags & ND_ENABLE_TORUS_DIM_A)
- {
- d1 = dA;
- d2 = nA - d1;
- dA = (d1 < d2) ? d1 : d2;
- }
-
- dB = abs(iB - brB);
- if (Nflags & ND_ENABLE_TORUS_DIM_B)
- {
- d1 = dB;
- d2 = nB - d1;
- dB = (d1 < d2) ? d1 : d2;
- }
-
- dC = abs(iC - brC);
- if (Nflags & ND_ENABLE_TORUS_DIM_C)
- {
- d1 = dC;
- d2 = nC - d1;
- dC = (d1 < d2) ? d1 : d2;
- }
-
- dD = abs(iD - brD);
- if (Nflags & ND_ENABLE_TORUS_DIM_D)
- {
- d1 = dD;
- d2 = nD - d1;
- dD = (d1 < d2) ? d1 : d2;
- }
-
- dE = abs(iE - brE);
- if (Nflags & ND_ENABLE_TORUS_DIM_E)
- {
- d1 = dE;
- d2 = nE - d1;
- dE = (d1 < d2) ? d1 : d2;
- }
-
- /* This is the number of hops to the io node */
- return dA + dB + dC + dD + dE + 1;
-};
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_Pset_io_node
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-void
-MPIX_Pset_io_node (int *io_node_route_id, int *distance_to_io_node)
-{
- *io_node_route_id = MPIX_IO_link_id ();
- *distance_to_io_node = MPIX_IO_distance ();
-
- return;
-};
-
-/**
- * \brief Create a communicator of ranks that have a common bridge node.
- *
- * \note This function is private to this source file.
- *
- * \param [in] parent_comm_ptr Pointer to the parent communicator
- * \param [out] pset_comm_ptr Pointer to the new 'MPID' communicator
- *
- * \return MPI status
- */
-int _MPIX_Pset_same_comm_create (MPID_Comm *parent_comm_ptr, MPID_Comm **pset_comm_ptr)
-{
- int color, key;
- int mpi_errno;
-
- color = MPIX_IO_link_id ();
- key = MPIX_IO_distance ();
-
- /*
- * Use MPIR_Comm_split_impl to make a communicator of all ranks in the parent
- * communicator that share the same bridge node; i.e. the 'color' is the
- * 'io node route identifer', which is unique to each BGQ bridge node.
- *
- * Setting the 'key' to the 'distance to io node' ensures that rank 0 in
- * the new communicator is on the bridge node, or as close to the bridge node
- * as possible.
- */
-
- *pset_comm_ptr = NULL;
- mpi_errno = MPI_SUCCESS;
- mpi_errno = MPIR_Comm_split_impl(parent_comm_ptr, color, key, pset_comm_ptr);
-
- return mpi_errno;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_Pset_same_comm_create_from_parent
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPIX_Pset_same_comm_create_from_parent (MPI_Comm parent_comm, MPI_Comm *pset_comm)
-{
- int mpi_errno;
- MPID_Comm *parent_comm_ptr, *pset_comm_ptr;
-
- *pset_comm = MPI_COMM_NULL;
-
- /*
- * Convert the parent communicator object handle to an object pointer;
- * needed by the error handling code.
- */
- parent_comm_ptr = NULL;
- MPID_Comm_get_ptr(parent_comm, parent_comm_ptr);
-
- mpi_errno = MPI_SUCCESS;
- mpi_errno = _MPIX_Pset_same_comm_create (parent_comm_ptr, &pset_comm_ptr);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- if (pset_comm_ptr)
- MPIU_OBJ_PUBLISH_HANDLE(*pset_comm, pset_comm_ptr->handle);
- else
- goto fn_fail;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- mpi_errno = MPIR_Err_return_comm( parent_comm_ptr, FCNAME, mpi_errno );
- goto fn_exit;
-};
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_Pset_same_comm_create
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPIX_Pset_same_comm_create (MPI_Comm *pset_comm)
-{
- return MPIX_Pset_same_comm_create_from_parent (MPI_COMM_WORLD, pset_comm);
-};
-
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_Pset_diff_comm_create_from_parent
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPIX_Pset_diff_comm_create_from_parent (MPI_Comm parent_comm, MPI_Comm *pset_comm)
-{
- MPID_Comm *parent_comm_ptr, *pset_same_comm_ptr, *pset_diff_comm_ptr;
- int color, key;
- int mpi_errno;
-
- *pset_comm = MPI_COMM_NULL;
-
- /*
- * Convert the parent communicator object handle to an object pointer;
- * needed by the error handling code.
- */
- parent_comm_ptr = NULL;
- MPID_Comm_get_ptr(parent_comm, parent_comm_ptr);
-
- /*
- * Determine the 'color' of this rank to create the new communicator - which
- * is the rank in a (transient) communicator where all ranks share a common
- * bridge node.
- */
- mpi_errno = MPI_SUCCESS;
- mpi_errno = _MPIX_Pset_same_comm_create (parent_comm_ptr, &pset_same_comm_ptr);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- if (pset_same_comm_ptr == NULL)
- goto fn_fail;
-
- color = MPIR_Comm_rank(pset_same_comm_ptr) * MPIDI_HW.ppn + MPIDI_HW.coreID;
-
- /* Discard the 'pset_same_comm_ptr' .. it is no longer needed. */
- mpi_errno = MPIR_Comm_free_impl(pset_same_comm_ptr);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
- /* Set the 'key' for this rank to order the ranks in the new communicator. */
- key = MPIR_Comm_rank(parent_comm_ptr);
-
- pset_diff_comm_ptr = NULL;
- mpi_errno = MPI_SUCCESS;
- mpi_errno = MPIR_Comm_split_impl(parent_comm_ptr, color, key, &pset_diff_comm_ptr);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- if (pset_diff_comm_ptr)
- MPIU_OBJ_PUBLISH_HANDLE(*pset_comm, pset_diff_comm_ptr->handle);
- else
- goto fn_fail;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- mpi_errno = MPIR_Err_return_comm( parent_comm_ptr, FCNAME, mpi_errno );
- goto fn_exit;
-};
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_Pset_diff_comm_create
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPIX_Pset_diff_comm_create (MPI_Comm *pset_comm)
-{
- return MPIX_Pset_diff_comm_create_from_parent (MPI_COMM_WORLD, pset_comm);
-};
-
-
-
-/**
- * \brief Compare each elemt of two six-element arrays
- * \param [in] A The first array
- * \param [in] B The first array
- * \return MPI_SUCCESS (does not return on failure)
- */
-#define CMP_6(A,B) \
-({ \
- assert(A[0] == B[0]); \
- assert(A[1] == B[1]); \
- assert(A[2] == B[2]); \
- assert(A[3] == B[3]); \
- assert(A[4] == B[4]); \
- assert(A[5] == B[5]); \
- MPI_SUCCESS; \
-})
-
-#undef FUNCNAME
-#define FUNCNAME MPIX_Cart_comm_create
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPIX_Cart_comm_create (MPI_Comm *cart_comm)
-{
- int result;
- int rank, numprocs,
- dims[6],
- wrap[6],
- coords[6];
- int new_rank1, new_rank2;
- MPI_Comm new_comm = MPI_COMM_NULL;
- int cart_rank,
- cart_dims[6],
- cart_wrap[6],
- cart_coords[6];
- int Nflags;
-
- *cart_comm = MPI_COMM_NULL;
- PMPI_Comm_rank(MPI_COMM_WORLD, &rank);
- PMPI_Comm_size(MPI_COMM_WORLD, &numprocs);
-
- Personality_t personality;
-
- Kernel_GetPersonality(&personality, sizeof(personality));
-
- dims[0] = personality.Network_Config.Anodes;
- dims[1] = personality.Network_Config.Bnodes;
- dims[2] = personality.Network_Config.Cnodes;
- dims[3] = personality.Network_Config.Dnodes;
- dims[4] = personality.Network_Config.Enodes;
- dims[5] = Kernel_ProcessCount();
-
- /* This only works if MPI_COMM_WORLD is the full partition */
- if (dims[5] * dims[4] * dims[3] * dims[2] * dims[1] * dims[0] != numprocs)
- return MPI_ERR_TOPOLOGY;
-
- Nflags = personality.Network_Config.NetFlags;
- wrap[0] = ((Nflags & ND_ENABLE_TORUS_DIM_A) != 0);
- wrap[1] = ((Nflags & ND_ENABLE_TORUS_DIM_B) != 0);
- wrap[2] = ((Nflags & ND_ENABLE_TORUS_DIM_C) != 0);
- wrap[3] = ((Nflags & ND_ENABLE_TORUS_DIM_D) != 0);
- wrap[4] = ((Nflags & ND_ENABLE_TORUS_DIM_E) != 0);
- wrap[5] = 1;
-
- coords[0] = personality.Network_Config.Acoord;
- coords[1] = personality.Network_Config.Bcoord;
- coords[2] = personality.Network_Config.Ccoord;
- coords[3] = personality.Network_Config.Dcoord;
- coords[4] = personality.Network_Config.Ecoord;
- coords[5] = Kernel_MyTcoord();
-
- new_rank1 = coords[5] +
- dims[5] * coords[4] +
- dims[5] * dims[4] * coords[3] +
- dims[5] * dims[4] * dims[3] * coords[2] +
- dims[5] * dims[4] * dims[3] * dims[2] * coords[1] +
- dims[5] * dims[4] * dims[3] * dims[2] * dims[1] * coords[0];
-
- result = PMPI_Comm_split(MPI_COMM_WORLD, 0, new_rank1, &new_comm);
- if (result != MPI_SUCCESS)
- {
- PMPI_Comm_free(&new_comm);
- return result;
- }
- PMPI_Comm_rank(new_comm, &new_rank2);
- assert(new_rank1 == new_rank2);
-
- result = PMPI_Cart_create(new_comm,
- 6,
- dims,
- wrap,
- 0,
- cart_comm);
- if (result != MPI_SUCCESS)
- return result;
-
- PMPI_Comm_rank(*cart_comm, &cart_rank);
- PMPI_Cart_get (*cart_comm, 6, cart_dims, cart_wrap, cart_coords);
-
- CMP_6(dims, cart_dims);
- CMP_6(wrap, cart_wrap);
- CMP_6(coords, cart_coords);
-
- PMPI_Comm_free(&new_comm);
- return MPI_SUCCESS;
-};
-
-/**
- * \brief FORTRAN interface to MPIX_Comm_rank2global
- *
- * \param [in] comm Communicator
- * \param [in] crank Pointer to the rank in the communicator variable
- * \param [out] grank Pointer tot he global rank variable
- *
- * \return status
- */
-int mpix_comm_rank2global (MPI_Comm *comm, int *crank, int *grank)
-{
- return MPIX_Comm_rank2global (*comm, *crank, grank);
-}
-
-/**
- * \brief FORTRAN interface to MPIX_Pset_same_comm_create
- *
- * \param [out] pset_comm Communicator
- *
- * \return status
- */
-int mpix_pset_same_comm_create (MPI_Comm *pset_comm)
-{
- return MPIX_Pset_same_comm_create (pset_comm);
-}
-
-/**
- * \brief FORTRAN interface to MPIX_Pset_diff_comm_create
- *
- * \param [out] pset_comm Communicator
- *
- * \return status
- */
-int mpix_pset_diff_comm_create (MPI_Comm *pset_comm)
-{
- return MPIX_Pset_diff_comm_create (pset_comm);
-}
-
-/**
- * \brief FORTRAN interface to MPIX_Pset_same_comm_create_from_parent
- *
- * \param [in] parent_comm Parent communicator
- * \param [out] pset_comm New pset communicator
- *
- * \return status
- */
-int mpix_pset_same_comm_create_from_parent (MPI_Comm *parent_comm, MPI_Comm *pset_comm)
-{
- return MPIX_Pset_same_comm_create_from_parent (*parent_comm, pset_comm);
-}
-
-/**
- * \brief FORTRAN interface to MPIX_Pset_diff_comm_create_from_parent
- *
- * \param [in] parent_comm Parent communicator
- * \param [out] pset_comm New pset communicator
- *
- * \return status
- */
-int mpix_pset_diff_comm_create_from_parent (MPI_Comm *parent_comm, MPI_Comm *pset_comm)
-{
- return MPIX_Pset_diff_comm_create_from_parent (*parent_comm, pset_comm);
-}
-
-/**
- * \brief FORTRAN interface to MPIX_IO_node_id
- *
- * \param [out] io_node_id This rank's io node id
- */
-void mpix_io_node_id (int *io_node_id) { *io_node_id = MPIX_IO_node_id(); }
-
-/**
- * \brief FORTRAN interface to MPIX_IO_link_id
- *
- * \param [out] io_link_id This rank's io link id
- */
-void mpix_io_link_id (int *io_link_id) { *io_link_id = MPIX_IO_link_id(); }
-
-/**
- * \brief FORTRAN interface to MPIX_IO_distance
- *
- * \param [out] io_distance This rank's distance to the io node
- */
-void mpix_io_distance (int *io_distance) { *io_distance = MPIX_IO_distance(); }
-
-/**
- * \brief FORTRAN interface to MPIX_Cart_comm_create
- *
- * \param [out] cart_comm Communicator to create
- *
- * \return status
- */
-int mpix_cart_comm_create (MPI_Comm *cart_comm)
-{
- return MPIX_Cart_comm_create (cart_comm);
-}
-
-
-
-#endif
-
-#ifdef __PE__
-void mpc_disableintr() __attribute__ ((alias("MPIX_disableintr")));
-void mp_disableintr() __attribute__ ((alias("MPIXF_disableintr")));
-void mp_disableintr_() __attribute__ ((alias("MPIXF_disableintr")));
-void mp_disableintr__() __attribute__ ((alias("MPIXF_disableintr")));
-void mpc_enableintr() __attribute__ ((alias("MPIX_enableintr")));
-void mp_enableintr() __attribute__ ((alias("MPIXF_enableintr")));
-void mp_enableintr_() __attribute__ ((alias("MPIXF_enableintr")));
-void mp_enableintr__() __attribute__ ((alias("MPIXF_enableintr")));
-void mpc_queryintr() __attribute__ ((weak,alias("MPIX_queryintr")));
-void mp_queryintr() __attribute__ ((alias("MPIXF_queryintr")));
-void mp_queryintr_() __attribute__ ((alias("MPIXF_queryintr")));
-void mp_queryintr__() __attribute__ ((alias("MPIXF_queryintr")));
-
- /***************************************************************************
- Function Name: MPIX_disableintr
-
- Description: Call the pamid layer to disable interrupts.
- (Similar to setting MP_CSS_INTERRUPT to "no")
-
- Parameters: The Fortran versions have an int* parameter used to pass the
- return code to the calling program.
-
- Returns: 0 Success
- <0 Failure
- ***************************************************************************/
-
-int
-_MPIDI_disableintr()
-{
- return(MPIDI_disableintr());
-}
-
-int
-MPIX_disableintr()
-{
- return(_MPIDI_disableintr());
-}
-
-void
-MPIXF_disableintr(int *rc)
-{
- *rc = _MPIDI_disableintr();
-}
-
-void
-MPIXF_disableintr_(int *rc)
-{
- *rc = _MPIDI_disableintr();
-}
-
-/*
- ** Called by: _mp_disableintr
- ** Purpose : Disables interrupts
- */
-int
-MPIDI_disableintr()
-{
- pami_result_t rc=0;
- int i;
-
- MPIR_ERRTEST_INITIALIZED_ORDIE();
- if (MPIDI_Process.mp_interrupts!= 0)
- {
- TRACE_ERR("Async advance beginning...\n");
- /* Enable async progress on all contexts.*/
- for (i=0; i<MPIDI_Process.avail_contexts; ++i)
- {
- PAMIX_Progress_disable(MPIDI_Context[i], PAMIX_PROGRESS_ALL);
- }
- TRACE_ERR("Async advance disabled\n");
- MPIDI_Process.mp_interrupts=0;
- }
- return(rc);
-}
- /***************************************************************************
- Function Name: MPIX_enableintr
-
- Description: Call the pamid-layer function to enable interrupts.
- (Similar to setting MP_CSS_INTERRUPT to "yes")
-
- Parameters: The Fortran versions have an int* parameter used to pass the
- return code to the calling program.
-
- Returns: 0 Success
- <0 Failure
- ***************************************************************************/
-int
-_MPIDI_enableintr()
-{
- return(MPIDI_enableintr());
-}
-
-/* C callable version */
-int
-MPIX_enableintr()
-{
- return(_MPIDI_enableintr());
-}
-
-/* Fortran callable version */
-void
-MPIXF_enableintr(int *rc)
-{
- *rc = _MPIDI_enableintr();
-}
-
-/* Fortran callable version for -qEXTNAME support */
-void
-MPIXF_enableintr_(int *rc)
-{
- *rc = _MPIDI_enableintr();
-}
-
-int
-MPIDI_enableintr()
-{
- pami_result_t rc=0;
- int i;
-
- MPIR_ERRTEST_INITIALIZED_ORDIE();
- if (MPIDI_Process.mp_interrupts == 0)
- {
- /* Enable async progress on all contexts.*/
- for (i=0; i<MPIDI_Process.avail_contexts; ++i)
- {
- PAMIX_Progress_enable(MPIDI_Context[i], PAMIX_PROGRESS_ALL);
- }
- TRACE_ERR("Async advance enabled\n");
- MPIDI_Process.mp_interrupts=1;
- }
- MPID_assert(rc == PAMI_SUCCESS);
- return(rc);
-}
-
- /***************************************************************************
- Function Name: MPIX_queryintr
-
- Description: Call the pamid-layer function to determine if
- interrupts are currently on or off.
-
- Parameters: The Fortran versions have an int* parameter used to pass the
- current interrupt setting to the calling program.
- Returns: 0 Indicates interrupts are currently off
- 1 Indicates interrupts are currently on
- <0 Failure
- ***************************************************************************/
-int
-MPIDI_queryintr()
-{
- return(MPIDI_Process.mp_interrupts);
-}
-
-int
-_MPIDI_queryintr()
-{
- return(MPIDI_queryintr());
-}
-
-int
-MPIX_queryintr()
-{
- return(_MPIDI_queryintr());
-}
-
-void
-MPIXF_queryintr(int *rc)
-{
- *rc = _MPIDI_queryintr();
-}
-
-void
-MPIXF_queryintr_(int *rc)
-{
- *rc = _MPIDI_queryintr();
-}
-#endif
diff --git a/src/mpid/pamid/src/onesided/Makefile.mk b/src/mpid/pamid/src/onesided/Makefile.mk
deleted file mode 100644
index c58ca32..0000000
--- a/src/mpid/pamid/src/onesided/Makefile.mk
+++ /dev/null
@@ -1,57 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-noinst_HEADERS += \
- src/mpid/pamid/src/onesided/mpidi_onesided.h
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/onesided/mpid_1s.c \
- src/mpid/pamid/src/onesided/mpid_win_accumulate.c \
- src/mpid/pamid/src/onesided/mpid_win_create.c \
- src/mpid/pamid/src/onesided/mpid_win_fence.c \
- src/mpid/pamid/src/onesided/mpid_win_free.c \
- src/mpid/pamid/src/onesided/mpid_win_get.c \
- src/mpid/pamid/src/onesided/mpid_win_lock.c \
- src/mpid/pamid/src/onesided/mpid_win_lock_all.c \
- src/mpid/pamid/src/onesided/mpid_win_pscw.c \
- src/mpid/pamid/src/onesided/mpid_win_put.c \
- src/mpid/pamid/src/onesided/mpid_win_shared_query.c \
- src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c \
- src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c \
- src/mpid/pamid/src/onesided/mpid_win_flush.c \
- src/mpid/pamid/src/onesided/mpid_win_allocate.c \
- src/mpid/pamid/src/onesided/mpid_win_sync.c \
- src/mpid/pamid/src/onesided/mpid_win_attach.c \
- src/mpid/pamid/src/onesided/mpid_win_detach.c \
- src/mpid/pamid/src/onesided/mpid_win_get_info.c \
- src/mpid/pamid/src/onesided/mpid_win_set_info.c \
- src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c \
- src/mpid/pamid/src/onesided/mpid_win_reqops.c \
- src/mpid/pamid/src/onesided/mpidi_win_control.c \
- src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c \
- src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/onesided/mpid_1s.c b/src/mpid/pamid/src/onesided/mpid_1s.c
deleted file mode 100644
index f46c0ba..0000000
--- a/src/mpid/pamid/src/onesided/mpid_1s.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_1s.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-
-void
-MPIDI_Win_DoneCB(pami_context_t context,
- void * cookie,
- pami_result_t result)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)cookie;
- ++req->win->mpid.sync.complete;
- ++req->origin.completed;
-
- if ((req->buffer_free) && (req->type == MPIDI_WIN_REQUEST_GET))
- {
- if (req->origin.completed == req->target.dt.num_contig)
- {
- int mpi_errno;
- mpi_errno = MPIR_Localcopy(req->buffer,
- req->origin.dt.size,
- MPI_CHAR,
- req->origin.addr,
- req->origin.count,
- req->origin.datatype);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- MPID_Datatype_release(req->origin.dt.pointer);
- MPIU_Free(req->buffer);
- MPIU_Free(req->user_buffer);
- req->buffer_free = 0;
- }
- }
-
-
- if ((req->origin.completed == req->target.dt.num_contig) ||
- ((req->type >= MPIDI_WIN_REQUEST_COMPARE_AND_SWAP) &&
- (req->origin.completed == req->origin.dt.num_contig)))
- {
- MPID_Request * req_handle = req->req_handle;
-
- if (req->buffer_free) {
- MPIU_Free(req->buffer);
- MPIU_Free(req->user_buffer);
- req->buffer_free = 0;
- }
- MPIDI_Win_datatype_unmap(&req->target.dt);
- if (req->accum_headers)
- MPIU_Free(req->accum_headers);
-
- if (!((req->type > MPIDI_WIN_REQUEST_GET_ACCUMULATE) && (req->type <=MPIDI_WIN_REQUEST_RGET_ACCUMULATE)))
- MPIU_Free(req);
-
- if(req_handle) {
-
- /* The instant this completion counter is set to zero another thread
- * may notice the change and begin freeing request resources. The
- * thread executing the code in this function must not touch any
- * portion of the request structure after decrementing the completion
- * counter.
- *
- * See MPID_Request_release_inline()
- */
- MPID_cc_set(req_handle->cc_ptr, 0);
- }
- }
- if ((MPIDI_Process.typed_onesided == 1) && (!req->target.dt.contig || !req->origin.dt.contig)) {
- /* We used the PAMI_Rput/Rget_typed call and added a ref so any MPI_Type_free before the context
- * executes the put/get would not free the MPID_Datatype, which would also free the associated PAMI datatype
- * which was still needed for communication -- that communication has completed, so now release the ref
- * in the callback to allow the MPID_Datatype to be freed.
- */
- MPID_Datatype_release(req->origin.dt.pointer);
- MPID_Datatype_release(req->target.dt.pointer);
- }
- MPIDI_Progress_signal();
-}
-
-
-void
-MPIDI_Win_datatype_basic(int count,
- MPI_Datatype datatype,
- MPIDI_Datatype * dt)
-{
- MPIDI_Datatype_get_info(dt->count = count,
- dt->type = datatype,
- dt->contig,
- dt->size,
- dt->pointer,
- dt->true_lb);
- TRACE_ERR("DT=%08x DTp=%p count=%d contig=%d size=%zu true_lb=%zu\n",
- dt->type, dt->pointer, dt->count, dt->contig, (size_t)dt->size, (size_t)dt->true_lb);
-}
-
-
-void
-MPIDI_Win_datatype_map(MPIDI_Datatype * dt)
-{
- if (dt->contig)
- {
- dt->num_contig = 1;
- dt->map = &dt->__map;
- dt->map[0].DLOOP_VECTOR_BUF = (void*)(size_t)dt->true_lb;
- dt->map[0].DLOOP_VECTOR_LEN = dt->size;
- }
- else
- {
- unsigned map_size = dt->pointer->max_contig_blocks*dt->count + 1;
- dt->num_contig = map_size;
- dt->map = (DLOOP_VECTOR*)MPIU_Malloc(map_size * sizeof(DLOOP_VECTOR));
- MPID_assert(dt->map != NULL);
-
- DLOOP_Offset last = dt->pointer->size*dt->count;
- MPID_Segment seg;
- MPID_Segment_init(NULL, dt->count, dt->type, &seg, 0);
- MPID_Segment_pack_vector(&seg, 0, &last, dt->map, &dt->num_contig);
- MPID_assert((unsigned)dt->num_contig <= map_size);
-#ifdef TRACE_ON
- TRACE_ERR("dt->pointer->size=%d num_contig: orig=%u new=%d\n", dt->pointer->size, map_size, dt->num_contig);
- int i;
- for(i=0; i<dt->num_contig; ++i)
- TRACE_ERR(" %d: BUF=%zu LEN=%zu\n", i, (size_t)dt->map[i].DLOOP_VECTOR_BUF, (size_t)dt->map[i].DLOOP_VECTOR_LEN);
-#endif
- }
-}
-
-
-void
-MPIDI_Win_datatype_unmap(MPIDI_Datatype * dt)
-{
- if (dt->map != &dt->__map)
- MPIU_Free(dt->map);;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_accumulate.c b/src/mpid/pamid/src/onesided/mpid_win_accumulate.c
deleted file mode 100644
index 26ed220..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_accumulate.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_accumulate.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-#include "mpidi_util.h"
-
-
-void
-MPIDI_WinAccumCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv != NULL);
- MPID_assert(sndbuf == NULL);
- MPID_assert(msginfo_size == sizeof(MPIDI_Win_MsgInfo));
- MPID_assert(_msginfo != NULL);
- const MPIDI_Win_MsgInfo * msginfo = (const MPIDI_Win_MsgInfo*)_msginfo;
-
- int null=0;
- pami_type_t pami_type;
- pami_data_function pami_op;
- MPIDI_Datatype_to_pami(msginfo->type, &pami_type, msginfo->op, &pami_op, &null);
-
-#ifdef TRACE_ON
- void * buf = msginfo->addr;
- unsigned* ibuf = (unsigned*)buf;
- double * dbuf = (double *)buf;
- TRACE_ERR("New accum msg: len=%zu type=%x op=%x l-buf=%p *(int*)buf=0x%08x *(double*)buf=%g\n", sndlen, msginfo->type, msginfo->op, buf, *ibuf, *dbuf);
- TRACE_ERR(" PAMI: type=%p op=%p\n", pami_type, pami_op);
-#endif
-
- MPID_assert(recv != NULL);
- *recv = zero_recv_parms;
- recv->cookie = NULL;
- recv->local_fn = NULL;
- recv->addr = msginfo->addr;
- recv->type = pami_type;
- recv->offset = 0;
- recv->data_fn = pami_op;
- recv->data_cookie = NULL;
-}
-
-
-static pami_result_t
-MPIDI_Accumulate(pami_context_t context,
- void * _req)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)_req;
- pami_result_t rc;
- void *map;
- pami_send_t params;
-
- params = zero_send_parms;
- params.send.header.iov_len = sizeof(MPIDI_Win_MsgInfo);
- params.send.dispatch = MPIDI_Protocols_WinAccum;
- params.send.dest = req->dest;
- params.events.cookie = req;
- params.events.remote_fn = MPIDI_Win_DoneCB;
-
- struct MPIDI_Win_sync* sync = &req->win->mpid.sync;
- TRACE_ERR("Start index=%u/%d l-addr=%p r-base=%p r-offset=%zu (sync->started=%u sync->complete=%u)\n",
- req->state.index, req->target.dt.num_contig, req->buffer, req->win->mpid.info[req->target.rank].base_addr, req->offset, sync->started, sync->complete);
- while (req->state.index < req->target.dt.num_contig) {
- if (sync->started > sync->complete + MPIDI_Process.rma_pending)
- {
- TRACE_ERR("Bailing out; index=%u/%d sync->started=%u sync->complete=%u\n",
- req->state.index, req->target.dt.num_contig, sync->started, sync->complete);
- return PAMI_EAGAIN;
- }
- ++sync->started;
-
-
- params.send.header.iov_base = &(((MPIDI_Win_MsgInfo *)req->accum_headers)[req->state.index]);
- params.send.data.iov_len = req->target.dt.map[req->state.index].DLOOP_VECTOR_LEN;
- params.send.data.iov_base = req->buffer + req->state.local_offset;
-
-#ifdef TRACE_ON
- void * buf = params.send.data.iov_base;
- unsigned* ibuf = (unsigned*)buf;
- double * dbuf = (double *)buf;
- TRACE_ERR(" Sub index=%u bytes=%zu l-offset=%zu r-addr=%p l-buf=%p *(int*)buf=0x%08x *(double*)buf=%g\n",
- req->state.index, params.send.data.iov_len, req->state.local_offset, req->accum_headers[req->state.index].addr, buf, *ibuf, *dbuf);
-#endif
- /** sync->total will be updated with every RMA and the complete
- will not change till that RMA has completed. In the meanwhile
- the rest of the RMAs will have memory leaks */
- if (req->target.dt.num_contig - req->state.index == 1) {
- rc = PAMI_Send(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return PAMI_SUCCESS;
- } else {
- rc = PAMI_Send(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- req->state.local_offset += params.send.data.iov_len;
- ++req->state.index;
- }
- }
-
-
- return PAMI_SUCCESS;
-}
-
-
-/**
- * \brief MPI-PAMI glue for MPI_ACCUMULATE function
- *
- * According to the MPI Specification:
- *
- * Each datatype argument must be a predefined datatype or
- * a derived datatype, where all basic components are of the
- * same predefined datatype. Both datatype arguments must be
- * constructed from the same predefined datatype.
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] op Operand to perform
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Accumulate
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Accumulate(const void *origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPI_Op op,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- int shm_locked = 0;
- MPIDI_Win_request *req = MPIU_Calloc0(1, MPIDI_Win_request);
- req->win = win;
- if(win->mpid.request_based != 1)
- req->type = MPIDI_WIN_REQUEST_ACCUMULATE;
- else {
- req->type = MPIDI_WIN_REQUEST_RACCUMULATE;
- req->req_handle = win->mpid.rreq;
- req->req_handle->mpid.win_req = req;
- }
-
- if(win->mpid.sync.origin_epoch_type == win->mpid.sync.target_epoch_type &&
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_FENCE;
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_FENCE;
- }
-
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_NONE ||
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- req->offset = target_disp * win->mpid.info[target_rank].disp_unit;
-#ifdef __BGQ__
- /* PAMI limitation as it doesnt permit VA of 0 to be passed into
- * memregion create, so we must pass base_va of heap computed from
- * an SPI call instead. So the target offset must be adjusted */
- if (req->win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC)
- req->offset -= (size_t)req->win->mpid.info[target_rank].base_addr;
-#endif
-
- if (origin_datatype == MPI_DOUBLE_INT)
- {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_DOUBLE,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_DOUBLE,
- &req->target.dt);
- }
- else if (origin_datatype == MPI_LONG_DOUBLE_INT)
- {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_LONG_DOUBLE,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_LONG_DOUBLE,
- &req->target.dt);
- }
- else if (origin_datatype == MPI_LONG_INT)
- {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_LONG,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_LONG,
- &req->target.dt);
- }
- else if (origin_datatype == MPI_SHORT_INT)
- {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_INT,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_INT,
- &req->target.dt);
- }
- else
- {
- MPIDI_Win_datatype_basic(origin_count,
- origin_datatype,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count,
- target_datatype,
- &req->target.dt);
- }
-
- MPID_assert(req->origin.dt.size == req->target.dt.size);
-
- if ( (req->origin.dt.size == 0) ||
- (target_rank == MPI_PROC_NULL))
- {
- if(req->req_handle)
- MPID_cc_set(req->req_handle->cc_ptr, 0);
- else
- MPIU_Free(req);
- return MPI_SUCCESS;
- }
-
- req->target.rank = target_rank;
-
-
- if (req->origin.dt.contig)
- {
- req->buffer_free = 0;
- req->buffer = (void *) ((uintptr_t) origin_addr + req->origin.dt.true_lb);
- }
- else
- {
- req->buffer_free = 1;
- req->buffer = MPIU_Malloc(req->origin.dt.size);
- MPID_assert(req->buffer != NULL);
- int mpi_errno = 0;
- mpi_errno = MPIR_Localcopy(origin_addr,
- origin_count,
- origin_datatype,
- req->buffer,
- req->origin.dt.size,
- MPI_CHAR);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- }
-
-
- pami_result_t rc;
- pami_task_t task = MPID_VCR_GET_LPID(win->comm_ptr->vcr, target_rank);
- if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_START &&
- !MPIDI_valid_group_rank(task, win->mpid.sync.sc.group))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &req->dest);
- MPID_assert(rc == PAMI_SUCCESS);
-
-
- MPIDI_Win_datatype_map(&req->target.dt);
-
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED)
- {
- MPI_User_function *uop;
- void *base, *dest_addr;
- int disp_unit;
- int len, one;
-
- ++win->mpid.sync.total;
- base = win->mpid.info[target_rank].base_addr;
- disp_unit = win->mpid.info[target_rank].disp_unit;
- dest_addr = (char *) base + disp_unit * target_disp;
-
- MPID_Datatype_get_size_macro(origin_datatype, len);
-
- uop = MPIR_OP_HDL_TO_FN(op);
- one = 1;
-
- (*uop)((void *) origin_addr, dest_addr, &one, &origin_datatype);
-
-
- MPIU_Free(req);
- ++win->mpid.sync.complete;
-
- } else { /* non-shared */
- {
- win->mpid.sync.total += req->target.dt.num_contig;
- MPI_Datatype basic_type = MPI_DATATYPE_NULL;
- MPID_Datatype_get_basic_type(origin_datatype, basic_type);
- /* MPID_Datatype_get_basic_type() doesn't handle the struct types */
- if ((origin_datatype == MPI_FLOAT_INT) ||
- (origin_datatype == MPI_DOUBLE_INT) ||
- (origin_datatype == MPI_LONG_INT) ||
- (origin_datatype == MPI_SHORT_INT) ||
- (origin_datatype == MPI_LONG_DOUBLE_INT))
- {
- MPID_assert(basic_type == MPI_DATATYPE_NULL);
- basic_type = origin_datatype;
- }
- MPID_assert(basic_type != MPI_DATATYPE_NULL);
-
- unsigned index;
- MPIDI_Win_MsgInfo * headers = MPIU_Calloc0(req->target.dt.num_contig, MPIDI_Win_MsgInfo);
- req->accum_headers = headers;
- for (index=0; index < req->target.dt.num_contig; ++index) {
- headers[index].addr = win->mpid.info[target_rank].base_addr + req->offset +
- (size_t)req->target.dt.map[index].DLOOP_VECTOR_BUF;
- headers[index].req = req;
- headers[index].win = win;
- headers[index].type = basic_type;
- headers[index].op = op;
- }
-
- }
-
- /* The pamid one-sided design requires context post in order to handle the
- * case where the number of pending rma operation exceeds the
- * 'PAMID_RMA_PENDING' threshold. When there are too many pending requests the
- * work function remains on the context post queue (by returning PAMI_EAGAIN)
- * so that the next time the context is advanced the work function will be
- * invoked again.
- *
- * TODO - When context post is not required it would be better to attempt a
- * direct context operation and then fail over to using context post if
- * the rma pending threshold has been reached. This would result in
- * better latency for one-sided operations.
- */
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Accumulate, req);
-
- }
-fn_fail:
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_allocate.c b/src/mpid/pamid/src/onesided/mpid_win_allocate.c
deleted file mode 100644
index 1e73675..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_create.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_allocate function
- *
- * Create a window object. Allocates a MPID_Win object and initializes it,
- * then allocates the collective info array, initalizes our entry, and
- * performs an Allgather to distribute/collect the rest of the array entries.
- * On each process, it allocates memory of at least size bytes, returns a
- * pointer to it, and returns a window object that can be used by all processes
- * in comm to * perform RMA operations. The returned memory consists of size
- * bytes local to each process, starting at address base_ptr and is associated
- * with the window as if the user called 'MPI_Win_create' on existing memory.
- * The size argument may be different at each process and size = 0 is valid;
- * however, a library might allocate and expose more memory in order to create
- * a fast, globally symmetric allocation.
- * Input Parameters:
- * \param[in] size size of window in bytes (nonnegative integer)
- * \param[in] disp_unit local unit size for displacements, in bytes (positive integer)
- * \param[in] info info argument (handle))
- * \param[in] comm_ptr Communicator (handle)
- * \param[out] base_ptr - base address of the window in local memory
- * \param[out] win_ptr window object returned by the call (handle)
- * \return MPI_SUCCESS, MPI_ERR_ARG, MPI_ERR_COMM, MPI_ERR_INFO. MPI_ERR_OTHER,
- * MPI_ERR_SIZE
- */
-int
-MPID_Win_allocate(MPI_Aint size,
- int disp_unit,
- MPID_Info * info,
- MPID_Comm * comm_ptr,
- void *base_ptr,
- MPID_Win ** win_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- void *baseP;
- static char FCNAME[] = "MPID_Win_allocate";
- MPIDI_Win_info *winfo;
- MPID_Win *win;
- int rank;
-
- rc=MPIDI_Win_init(size,disp_unit,win_ptr, info, comm_ptr, MPI_WIN_FLAVOR_ALLOCATE, MPI_WIN_UNIFIED);
- win = *win_ptr;
-
- if (size > 0) {
- baseP = MPIU_Malloc(size);
- #ifndef MPIDI_NO_ASSERT
- MPID_assert(baseP != NULL);
- #else
- MPIU_ERR_CHKANDJUMP((baseP == NULL), mpi_errno, MPI_ERR_BUFFER, "**bufnull");
- #endif
-
- } else if (size == 0) {
- baseP = NULL;
- } else {
- MPIU_ERR_CHKANDSTMT(size >=0 , mpi_errno, MPI_ERR_SIZE,
- return mpi_errno, "**rmasize");
- }
-
- win->base = baseP;
- rank = comm_ptr->rank;
- winfo = &win->mpid.info[rank];
- winfo->base_addr = baseP;
- winfo->win = win;
- winfo->disp_unit = disp_unit;
-
- rc= MPIDI_Win_allgather(size,win_ptr);
- if (rc != MPI_SUCCESS)
- return rc;
- *(void**) base_ptr = (void *) win->base;
- mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
-
- fn_fail:
- return mpi_errno;
-}
-
diff --git a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
deleted file mode 100644
index 416e358..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
+++ /dev/null
@@ -1,561 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_allocate_shared.c
- * \brief
- */
-#include "mpidi_onesided.h"
-#include <sys/shm.h>
-#include <sys/ipc.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#undef FUNCNAME
-#define FUNCNAME MPID_Win_allocate_shared
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-
-#define SHM_KEY_TAIL 0xfdbc /* If this value is changed, change */
- /* in PMD (mp_pmd.c) as well. */
-
-extern int mpidi_dynamic_tasking;
-#define MPIDI_PAGESIZE_MASK(y) (~(((MPI_Aint)y)-1))
-#define MPIDI_ROUND_UP_PAGESIZE(x,y) ((((MPI_Aint)x)+(~MPIDI_PAGESIZE_MASK(y))) & MPIDI_PAGESIZE_MASK(y))
-#define ALIGN_BOUNDARY 128 /* Align data structures to cache line */
-#define PAD_SIZE(s) (ALIGN_BOUNDARY - (sizeof(s) & (ALIGN_BOUNDARY-1)))
-
-int CheckRankOnNode(MPID_Comm * comm_ptr,int *onNode ) {
- int comm_size, i;
- int mpi_errno = PAMI_SUCCESS;
-
- comm_size = comm_ptr->local_size;
-
- *onNode = 1;
-
- for (i = 0; i < comm_size; i++) {
- if (comm_ptr->intranode_table[i] == -1) {
- *onNode = 0;
- break;
- }
- }
-
- if (*onNode== 0) {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_CONFLICT,
- return mpi_errno, "**rmaconflict");
- }
-
- return mpi_errno;
-}
-
-int CheckSpaceType(MPID_Win **win_ptr, MPID_Info *info,int *noncontig) {
- int mpi_errno=MPI_SUCCESS;
- /* Check if we are allowed to allocate space non-contiguously */
- if (info != NULL) {
- int alloc_shared_nctg_flag = 0;
- char alloc_shared_nctg_value[MPI_MAX_INFO_VAL+1];
- MPIR_Info_get_impl(info, "alloc_shared_noncontig", MPI_MAX_INFO_VAL,
- alloc_shared_nctg_value, &alloc_shared_nctg_flag);
- if (alloc_shared_nctg_flag == 1) {
- if (!strncmp(alloc_shared_nctg_value, "true", strlen("true")))
- (*win_ptr)->mpid.info_args.alloc_shared_noncontig = 1;
- if (!strncmp(alloc_shared_nctg_value, "false", strlen("false")))
- (*win_ptr)->mpid.info_args.alloc_shared_noncontig = 0;
- }
- }
- *noncontig = (*win_ptr)->mpid.info_args.alloc_shared_noncontig;
- return mpi_errno;
-}
-
-int GetPageSize(void *addr, ulong *pageSize)
-{
- pid_t pid;
- FILE *fp;
- char Line[201],A1[50],A2[50];
- char fileName[100];
- char A3[50],A4[50];
- int i=0;
- char *t1,*t2;
- #ifndef REDHAT
- char a='-';
- char *search = &a;
- #endif
- void *beg, *end;
- int found=0;
- int ps;
- int j,k;
-
- *pageSize = 0;
- pid = getpid();
- sprintf(fileName,"/proc/%d/smaps",pid);
- /* linux-2.6.29 or greater, KernelPageSize in /proc/pid/smaps includes 4K, 16 MB */
- TRACE_ERR("fileName = %s addr=%p\n",fileName,addr);
- fp = fopen(fileName,"r");
- if (fp == NULL) {
- TRACE_ERR("fileName = %s open failed errno=%d\n",fileName,errno);
- return errno;
- }
- while(fgets(Line,200,fp)) {
- i++;
- sscanf(Line,"%s %s %s %s \n",A1,A2,A3,A4);
- if ((found == 1) && (memcmp(A1,"KernelPageSize",14)==0)) {
- j=atoi(A2);
- if ((A3[0]=='k') || (A3[0]=='K'))
- k=1024;
- else if ((A3[0]=='m') || (A3[0]=='M'))
- k=1048576;
- else if ((A3[0]=='g') || (A3[0]=='G'))
- k=0x40000000; /* 1 GB */
- else {
- TRACE_ERR("ERROR unrecognized unit A3=%s\n",A3);
- break;
- }
- *pageSize = (ulong)(j * k);
- TRACE_ERR(" addr=%p pageSize=%ld %s(%d)\n", addr,*pageSize,__FILE__,__LINE__);
- break;
- }
- if ((strlen(A2) == 4) && ((A2[0]=='r') || (A2[3]=='p'))) {
- #ifndef REDHAT
- t1=strtok(A1,search);
- #else
- t1=strtok(A1,"-");
- #endif
- t2 = A1+strlen(t1)+1;
- sscanf(t1,"%p \n",&beg);
- sscanf(t2,"%p \n",&end);
- if (((ulong) addr >= (ulong)beg) && ((ulong)addr <= (ulong)end)) {
- found=1;
- TRACE_ERR("found addr=%p i=%d between beg=%p and end=%p in %s\n",
- addr,i,beg,end,fileName);
- }
- }
- }
- fclose(fp);
- if (*pageSize == 0) {
- ps = getpagesize();
- *pageSize = (ulong) ps;
- TRACE_ERR("LinuxPageSize %p not in %s getpagesize=%ld\n", addr,fileName,*pageSize);
- }
- return 0;
-}
-
-int
-MPID_getSharedSegment_mmap(MPID_Win * win)
-{
- int rank, rc, fd;
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- int first = 0;
-
- snprintf (win->mpid.shm->shm_key, 63, "/mpich.comm-%d.win_shared", win->comm_ptr->context_id);
- rc = shm_open (win->mpid.shm->shm_key, O_RDWR | O_CREAT | O_EXCL, 0600);
- if (0 == rc)
- {
- first = 1;
- } else {
- rc = shm_open (win->mpid.shm->shm_key, O_RDWR, 0);
- MPIU_ERR_CHKANDJUMP((rc == -1), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
- }
-
- fd = rc;
- rc = ftruncate (fd, win->mpid.shm->segment_len);
- MPIU_ERR_CHKANDJUMP((rc == -1), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
-
- win->mpid.shm->base_addr = mmap (NULL, win->mpid.shm->segment_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- MPIU_ERR_CHKANDJUMP((win->mpid.shm->base_addr == MAP_FAILED), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
-
- close (fd); /* no longer needed */
-
- /* set mutex_lock address and initialize it */
- win->mpid.shm->ctrl = (MPIDI_Win_shm_ctrl_t *) win->mpid.shm->base_addr;
- if (1 == first) {
- MPIDI_SHM_MUTEX_INIT(win);
- }
-
- mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
- MPIU_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
-
- win->mpid.shm->allocated = 1;
-
-fn_exit:
- return mpi_errno;
- /* --BEGIN ERROR HANDLING-- */
-fn_fail:
- shm_unlink (win->mpid.shm->shm_key);
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-int
-MPID_getSharedSegment_sysv(MPID_Win * win)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- uint32_t shm_key;
- int rank;
- char *cp;
- int shm_flag = IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR;
-
- shm_key = (uint32_t) -1;
-
- rank = win->comm_ptr->rank;
-
- if (rank == 0) {
-#ifdef DYNAMIC_TASKING
- /* generate an appropriate key */
- if (!mpidi_dynamic_tasking) {
- cp = getenv("MP_I_PMD_PID");
- if (cp) {
- shm_key = atoi(cp);
- shm_key = shm_key & 0x07ffffff;
- shm_key = shm_key | 0x80000000;
- } else {
- cp = getenv("MP_PARTITION");
- if (cp ) {
- shm_key = atol(cp);
- shm_key = (shm_key << 16) + SHM_KEY_TAIL;
- } else {
- TRACE_ERR("ERROR MP_PARTITION not set \n");
- }
- }
- } else {
- cp = getenv("MP_I_KEY_RANGE");
- if (cp) {
- sscanf(cp, "0x%x", &shm_key);
- shm_key = shm_key | 0x80;
- } else {
- TRACE_ERR("ERROR MP_I_KEY_RANGE not set \n");
- }
- }
-#else
- cp = getenv("MP_I_PMD_PID");
- if (cp) {
- shm_key = atoi(cp);
- shm_key = shm_key & 0x07ffffff;
- shm_key = shm_key | 0x80000000;
- } else {
- cp = getenv("MP_PARTITION");
- if (cp ) {
- shm_key = atol(cp);
- shm_key = (shm_key << 16);
-#ifdef SHMCC_KEY_TAIL
- shm_key += SHMCC_KEY_TAIL;
-#endif
- } else {
- TRACE_ERR("ERROR MP_PARTITION not set \n");
- }
- }
-#endif
-
- MPID_assert(shm_key != -1);
-
- win->mpid.shm->shm_id = shmget(shm_key, win->mpid.shm->segment_len, shm_flag);
- MPIU_ERR_CHKANDJUMP((win->mpid.shm->shm_id == -1), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
-
- win->mpid.shm->base_addr = (void *) shmat(win->mpid.shm->shm_id,0,0);
- MPIU_ERR_CHKANDJUMP((win->mpid.shm->base_addr == (void*) -1), mpi_errno,MPI_ERR_BUFFER, "**bufnull");
-
- /* set mutex_lock address and initialize it */
- win->mpid.shm->ctrl = (MPIDI_Win_shm_ctrl_t *) win->mpid.shm->base_addr;
- MPIDI_SHM_MUTEX_INIT(win);
-
- /* successfully created shm segment - shared the key with other tasks */
- mpi_errno = MPIR_Bcast_impl((void *) &shm_key, sizeof(int), MPI_CHAR, 0, win->comm_ptr, &errflag);
-
- } else { /* task other than task 0 */
- mpi_errno = MPIR_Bcast_impl((void *) &shm_key, sizeof(int), MPI_CHAR, 0, win->comm_ptr, &errflag);
- MPIU_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
-
- win->mpid.shm->shm_id = shmget(shm_key, 0, 0);
- if (win->mpid.shm->shm_id != -1) { /* shm segment is available */
- win->mpid.shm->base_addr = (void *) shmat(win->mpid.shm->shm_id,0,0);
- }
- win->mpid.shm->ctrl = (MPIDI_Win_shm_ctrl_t *) win->mpid.shm->base_addr;
- }
-
- win->mpid.shm->allocated = 1;
-
-fn_exit:
- return mpi_errno;
- /* --BEGIN ERROR HANDLING-- */
-fn_fail:
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-}
-
-int
-MPID_getSharedSegment(MPI_Aint size,
- int disp_unit,
- MPID_Comm * comm_ptr,
- MPID_Win **win_ptr,
- MPI_Aint * pSize,
- int * noncontig)
-{
- int mpi_errno = MPI_SUCCESS;
- int i, comm_size, rank;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- MPI_Aint pageSize,pageSize2, len,new_size;
- MPID_Win *win;
- int padSize;
- void *base_pp;
-
- win = *win_ptr;
- comm_size = win->comm_ptr->local_size;
- rank = win->comm_ptr->rank;
-
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
- GetPageSize((void *) win_ptr, (ulong *) &pageSize);
- *pSize = pageSize;
- win->mpid.shm->segment_len = 0;
-
- if (comm_size == 1) {
- /* Do not use shared memory when there is only one rank on the node */
-
- /* 'size' must not be < 0 */
- MPIU_ERR_CHKANDSTMT(size < 0 , mpi_errno, MPI_ERR_SIZE,return mpi_errno, "**rmasize");
-
- /* The beginning of the heap allocation contains a control block
- * before the data begins.
- */
- new_size = MPIDI_ROUND_UP_PAGESIZE((sizeof(MPIDI_Win_shm_ctrl_t)+ ((comm_size+1) * sizeof(void *))),pageSize);
-
- if (size > 0) {
- if (*noncontig)
- new_size += MPIDI_ROUND_UP_PAGESIZE(size,pageSize);
- else
- new_size += size;
- }
-
- base_pp = MPIU_Malloc(new_size);
- MPID_assert(base_pp !=NULL);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
- win->mpid.shm->segment_len = new_size;
- win->mpid.shm->base_addr = base_pp;
- if (size !=0) {
- win->mpid.info[rank].base_addr = (void *)((MPI_Aint) base_pp + MPIDI_ROUND_UP_PAGESIZE((sizeof(MPIDI_Win_shm_ctrl_t) + ((comm_size+1) * sizeof(void *))),pageSize));
- } else {
- win->mpid.info[rank].base_addr = NULL;
- }
- win->base = win->mpid.info[rank].base_addr;
- win->mpid.info[rank].base_size = size;
-
- /* set mutex_lock address and initialize it */
- win->mpid.shm->ctrl = (MPIDI_Win_shm_ctrl_t *) win->mpid.shm->base_addr;
- MPIDI_SHM_MUTEX_INIT(win);
- OPA_fetch_and_add_int((OPA_int_t *) &win->mpid.shm->ctrl->shm_count,(int) 1);
-
- } else {
- /* allocate a temporary buffer to gather the 'size' of each buffer on
- * the node to determine the amount of shared memory to allocate
- */
- MPI_Aint * size_array;
- size_array = MPIU_Malloc (2*comm_size*sizeof(MPI_Aint));
- size_array[rank] = (MPI_Aint) size;
- mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL,
- size_array, 1 * sizeof(MPI_Aint), MPI_BYTE,
- (*win_ptr)->comm_ptr, &errflag);
- if (mpi_errno) {
- MPIU_Free(size_array);
- MPIU_ERR_POP(mpi_errno);
- }
-
- /* calculate total number of bytes needed */
- MPI_Aint actual_size;
- win->mpid.info[0].base_addr = NULL;
- for (i = 0; i < comm_size; ++i) {
- win->mpid.info[i].base_size = size_array[i];
-
- actual_size = (*noncontig)?MPIDI_ROUND_UP_PAGESIZE(size_array[i],pageSize):size_array[i];
-
- win->mpid.shm->segment_len += actual_size;
-
- /* Save the OFFSET to each rank's private shared memory area. This
- * will be added to the BASE ADDRESS of the entire shared memory
- * allocation to determine the virtual address.
- */
- if (i < comm_size-1)
- win->mpid.info[i+1].base_addr =
- (void *) ((uintptr_t)win->mpid.info[i].base_addr + actual_size);
- }
-
- /* The beginning of the shared memory allocation contains a control
- * block before the data begins.
- */
- win->mpid.shm->segment_len += MPIDI_ROUND_UP_PAGESIZE((sizeof(MPIDI_Win_shm_ctrl_t) + ((comm_size+1) * sizeof(void *))),pageSize);
-
- /* Get the shared segment which includes the control block header and
- * data buffer - possibly padded if non-contiguous.
- */
-#ifdef USE_SYSV_SHM
- mpi_errno = MPID_getSharedSegment_sysv(win);
-#elif USE_MMAP_SHM
- mpi_errno = MPID_getSharedSegment_mmap(win);
-#else
- MPID_Abort(NULL, MPI_ERR_RMA_SHARED, -1, "RMA shared segment error");
-#endif
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
- /* assign base address here */
- /* compute the base addresses of each process within the shared memory segment */
- /* will be done after MPI_Allgather in MID_Win_allocate_shared */
- win->base = (void *) ((long) win->mpid.shm->base_addr + (long ) MPIDI_ROUND_UP_PAGESIZE((sizeof(MPIDI_Win_shm_ctrl_t) + ((comm_size+1) * sizeof(void *))),pageSize));
-
-
- MPIU_Free(size_array);
-
- /* increment the shared counter */
- OPA_fetch_and_add_int((OPA_int_t *) &win->mpid.shm->ctrl->shm_count,(int) 1);
-
- /* wait for all ranks complete */
- while((int) win->mpid.shm->ctrl->shm_count != comm_size) MPIDI_QUICKSLEEP;
- }
-
-fn_exit:
- return mpi_errno;
- /* --BEGIN ERROR HANDLING-- */
-fn_fail:
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-
-}
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_allocate_shared function
- *
- * Create a window object. Allocates a MPID_Win object and initializes it,
- * then allocates the collective info array, initalizes our entry, and
- * performs an Allgather to distribute/collect the rest of the array entries.
- * On each process, it allocates memory of at least size bytes that is shared
- * among all processes in comm, and returns a pointer to the locally allocated
- * segment in base_ptr that can be used for load/store accesses on the calling
- * process. The locally allocated memory can be the target of load/store accessses
- * by remote processes; the base pointers for other processes can be queried using
- * the function 'MPI_Win_shared_query'.
- *
- * The call also returns a window object that can be used by all processes in comm
- * to perform RMA operations. The size argument may be different at each process
- * and size = 0 is valid. It is the user''s responsibility to ensure that the
- * communicator comm represents a group of processes that can create a shared
- * memory segment that can be accessed by all processes in the group. The
- * allocated memory is contiguous across process ranks unless the info key
- * alloc_shared_noncontig is specified. Contiguous across process ranks means that
- * the first address in the memory segment of process i is consecutive with the
- * last address in the memory segment of process i - 1. This may enable the user
- * to calculate remote address offsets with local information only.
- *
- * Input Parameters:
- * \param[in] size size of window in bytes (nonnegative integer)
- * \param[in] disp_unit local unit size for displacements, in bytes (positive integer)
- * \param[in] info info argument (handle))
- * \param[in] comm_ptr intra-Communicator (handle)
- * \param[out] base_ptr address of local allocated window segment
- * \param[out] win_ptr window object returned by the call (handle)
- * \return MPI_SUCCESS, MPI_ERR_ARG, MPI_ERR_COMM, MPI_ERR_INFO. MPI_ERR_OTHER,
- * MPI_ERR_SIZE
- *
- * win->mpid.shm->base_addr \* return address from shmat *\
- * win->base \* address for data starts here == win->mpid.shm->base_addr *\
- * \* + space for mutex_lock and shm_count *\
- *
- */
-int
-MPID_Win_allocate_shared(MPI_Aint size,
- int disp_unit,
- MPID_Info * info,
- MPID_Comm * comm_ptr,
- void *base_ptr,
- MPID_Win ** win_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- int onNode = 0;
- MPID_Win *win = NULL;
- int rank, prev_size;
-
- MPIDI_Win_info *winfo;
- int comm_size,i;
- int noncontig=FALSE;
- MPI_Aint pageSize=0;
-
- /* Verify all ranks are on-node */
- mpi_errno=CheckRankOnNode(comm_ptr,&onNode);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_ERR_CHKANDJUMP((onNode == 0), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
-
- /* Initialize the window */
- mpi_errno =MPIDI_Win_init(size,disp_unit,win_ptr, info, comm_ptr, MPI_WIN_FLAVOR_SHARED, MPI_WIN_UNIFIED);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- win = *win_ptr;
- win->mpid.shm = MPIU_Malloc(sizeof(MPIDI_Win_shm_t));
- MPID_assert(win->mpid.shm != NULL);
- memset(win->mpid.shm, 0, sizeof(MPIDI_Win_shm_t));
-
- rank = comm_ptr->rank;
- win->mpid.info[rank].win = win;
- win->mpid.info[rank].disp_unit = disp_unit;
-
- mpi_errno=CheckSpaceType(win_ptr,info,&noncontig);
- comm_size = (*win_ptr)->comm_ptr->local_size;
- mpi_errno = MPID_getSharedSegment(size, disp_unit,comm_ptr, win_ptr, &pageSize, &noncontig);
- if (mpi_errno != MPI_SUCCESS)
- return mpi_errno;
-
- mpi_errno = MPIDI_Win_allgather(size,win_ptr);
- if (mpi_errno != MPI_SUCCESS)
- return mpi_errno;
-
- win->mpid.info[0].base_addr = win->base;
- char *cur_base = win->base;
- prev_size=win->mpid.info[0].base_size;
- for (i = 1; i < comm_size; ++i) {
- if (win->mpid.info[i].base_size) {
- if (prev_size) {
- if (noncontig) {
- /* Round up to next page size */
- win->mpid.info[i].base_addr =
- (void *) ((MPI_Aint) cur_base + (MPI_Aint) MPIDI_ROUND_UP_PAGESIZE(prev_size,pageSize));
- } else {
- win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base + (MPI_Aint) prev_size);
- }
- } else
- win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base);
- prev_size=win->mpid.info[i].base_size;
- cur_base = win->mpid.info[i].base_addr;
- } else {
- win->mpid.info[i].base_addr = NULL;
- }
- }
-
-
- *(void**) base_ptr = (void *) win->mpid.info[rank].base_addr;
-
- mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
-fn_exit:
- return mpi_errno;
- /* --BEGIN ERROR HANDLING-- */
-fn_fail:
- if (win != NULL)
- if (win->mpid.shm != NULL)
- MPIU_Free(win->mpid.shm);
- goto fn_exit;
- /* --END ERROR HANDLING-- */
-
-}
-
diff --git a/src/mpid/pamid/src/onesided/mpid_win_attach.c b/src/mpid/pamid/src/onesided/mpid_win_attach.c
deleted file mode 100644
index 233c12b..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_attach.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_attach.c
- * \brief attaches a local memory region beginning at base for remote
- * access within the given window.
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_attach function
- *
- * Attaches a local memory region beginning at base for remote access
- * within the given window.
- *
- * \param[in] win shared memory window object
- * \param[in] base initial address of memory to be attached
- * \param[in] length length of memory to be attached in bytes
- * \return MPI_SUCCESS, MPI_ERR_RMA_FLAVOR
- *
- */
-
-int
-MPID_Win_attach(MPID_Win *win, void *base, MPI_Aint size)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_attach";
- MPIU_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_DYNAMIC), mpi_errno,
- MPI_ERR_RMA_FLAVOR, return mpi_errno, "**rmaflavor");
-
-
- /* no op, all memory is exposed, the user is responsible for */
- /* ensuring that MPI_WIN_ATTACH at the target has returned */
- /* before a process attempts to target that memory with an */
- /* RMA call */
-
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
diff --git a/src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c b/src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
deleted file mode 100644
index eddd15f..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_compare_and_swap.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-extern pami_result_t
-MPIDI_Atomic (pami_context_t context,
- void * _req);
-
-#ifndef __BGQ__
-static pami_result_t
-MPIDI_Compare_and_swap_using_pami_rmw(pami_context_t context,
- void * _req)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)_req;
- pami_result_t rc;
- int target_rank;
-
- MPID_assert(req != NULL);
- target_rank = req->target.rank;
-
- pami_rmw_t params;
- params=zero_rmw_parms;
- params.dest=req->dest;
- params.cookie=(void *)req;
- params.done_fn=MPIDI_Win_DoneCB;
- params.type = req->pami_datatype;
- params.operation = PAMI_ATOMIC_FETCH_COMPARE_SET;
- params.local=req->user_buffer; /*result*/
- params.remote=req->win->mpid.info[target_rank].base_addr + req->offset + (size_t)req->origin.dt.map[0].DLOOP_VECTOR_BUF;
- params.value=req->buffer; /* replaced value with origin */
- params.test=req->compare_buffer;
-
- rc = PAMI_Rmw(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return rc;
-}
-#endif
-
-#undef FUNCNAME
-#define FUNCNAME MPIDI_Compare_and_swap
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
- void *result_addr, MPI_Datatype datatype, int target_rank,
- MPI_Aint target_disp, MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_Win_request *req;
- int shm_locked=0;
-
- if(win->mpid.sync.origin_epoch_type == win->mpid.sync.target_epoch_type &&
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_FENCE;
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_FENCE;
- }
-
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_NONE ||
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- if (target_rank == MPI_PROC_NULL)
- {
- return MPI_SUCCESS;
- }
- /* Check if datatype is a C integer, Fortran Integer,
- logical, or byte, per the classes given on page 165. */
- MPIR_ERRTEST_TYPE_RMA_ATOMIC(datatype, mpi_errno);
-
- req = (MPIDI_Win_request *) MPIU_Calloc0(1, MPIDI_Win_request);
- req->win = win;
- req->type = MPIDI_WIN_REQUEST_COMPARE_AND_SWAP;
-
- req->offset = target_disp * win->mpid.info[target_rank].disp_unit;
-#ifdef __BGQ__
- /* PAMI limitation as it doesnt permit VA of 0 to be passed into
- * memregion create, so we must pass base_va of heap computed from
- * an SPI call instead. So the target offset must be adjusted */
- if (req->win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC)
- req->offset -= (size_t)req->win->mpid.info[target_rank].base_addr;
-#endif
-
- MPIDI_Win_datatype_basic(1, datatype, &req->origin.dt);
-
- if (req->origin.dt.size == 0)
- {
- MPIU_Free(req);
- return MPI_SUCCESS;
- }
-
- req->target.rank = target_rank;
- req->buffer = (void *) ((uintptr_t) origin_addr + req->origin.dt.true_lb);
- req->user_buffer = result_addr + req->origin.dt.true_lb;
- req->compare_buffer = (void *) ((uintptr_t) compare_addr + req->origin.dt.true_lb);
-
- pami_result_t rc;
- pami_task_t task = MPID_VCR_GET_LPID(win->comm_ptr->vcr, target_rank);
- if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_START &&
- !MPIDI_valid_group_rank(task, win->mpid.sync.sc.group))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &req->dest);
- MPID_assert(rc == PAMI_SUCCESS);
-
- MPIDI_Win_datatype_map(&req->origin.dt);
- win->mpid.sync.total += 1;
-
- MPI_Datatype basic_type = MPI_DATATYPE_NULL;
- MPID_Datatype_get_basic_type(datatype, basic_type);
- MPID_assert(basic_type != MPI_DATATYPE_NULL);
- req->origin.datatype=basic_type;
-
- /* The pamid one-sided design requires context post in order to handle the
- * case where the number of pending rma operation exceeds the
- * 'PAMID_RMA_PENDING' threshold. When there are too many pending requests the
- * work function remains on the context post queue (by returning PAMI_EAGAIN)
- * so that the next time the context is advanced the work function will be
- * invoked again.
- *
- * TODO - When context post is not required it would be better to attempt a
- * direct context operation and then fail over to using context post if
- * the rma pending threshold has been reached. This would result in
- * better latency for one-sided operations.
- */
-
-#ifndef __BGQ__
- MPI_Op null_op=0;
- pami_data_function pami_op;
- pami_type_t pami_type;
- if(MPIDI_Datatype_is_pami_rmw_supported(basic_type, &pami_type, null_op, &pami_op) ) {
- req->pami_datatype = pami_type;
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Compare_and_swap_using_pami_rmw, req);
- } else
-#endif
- {
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Atomic, req);
- }
-
-fn_fail:
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_create.c b/src/mpid/pamid/src/onesided/mpid_win_create.c
deleted file mode 100644
index a907189..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_create.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_create.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-/***************************************************************************/
-/* */
-/* allocate win_ptr (MPIDI_Win) */
-/* update win structure except for base address */
-/* */
-/***************************************************************************/
-
-int
-MPIDI_Win_init( MPI_Aint length,
- int disp_unit,
- MPID_Win **win_ptr,
- MPID_Info *info,
- MPID_Comm *comm_ptr,
- int create_flavor,
- int model)
-{
- int mpi_errno=MPI_SUCCESS;
- size_t rank, size;
- MPIDI_Win_info *winfo;
- static char FCNAME[] = "MPIDI_Win_init";
-
- /* ----------------------------------------- */
- /* Setup the common sections of the window */
- /* ----------------------------------------- */
- MPID_Win *win = (MPID_Win*)MPIU_Handle_obj_alloc(&MPID_Win_mem);
-
- MPIU_ERR_CHKANDSTMT(win == NULL, mpi_errno, MPI_ERR_NO_MEM,
- return mpi_errno, "**nomem");
-
- *win_ptr = win;
- memset(&win->mpid, 0, sizeof(struct MPIDI_Win));
- win->comm_ptr = comm_ptr; MPIR_Comm_add_ref(comm_ptr);
- size = comm_ptr->local_size;
- rank = comm_ptr->rank;
-
- win->mpid.info = MPIU_Malloc(size * sizeof(struct MPIDI_Win_info));
- MPID_assert(win->mpid.info != NULL);
- memset((void *) win->mpid.info,0,(size * sizeof(struct MPIDI_Win_info)));
- winfo = &win->mpid.info[rank];
- win->errhandler = NULL;
- win->base = NULL;
- win->size = length;
- win->disp_unit = disp_unit;
- win->create_flavor = create_flavor;
- win->model = model;
- win->copyCreateFlavor = 0;
- win->copyModel = 0;
- win->attributes = NULL;
- win->comm_ptr = comm_ptr;
- if ((info != NULL) && ((int *)info != (int *) MPI_INFO_NULL)) {
- mpi_errno= MPIDI_Win_set_info(win, info);
- MPID_assert(mpi_errno == 0);
- }
- MPID_assert(mpi_errno == 0);
-
-
- /* Initialize the info (hint) flags per window */
- win->mpid.info_args.no_locks = 0;
- win->mpid.info_args.accumulate_ordering =
- (MPIDI_ACCU_ORDER_RAR | MPIDI_ACCU_ORDER_RAW | MPIDI_ACCU_ORDER_WAR | MPIDI_ACCU_ORDER_WAW);
- win->mpid.info_args.accumulate_ops = MPIDI_ACCU_SAME_OP_NO_OP; /*default */
- win->mpid.info_args.same_size = 0;
- win->mpid.info_args.alloc_shared_noncontig = 0;
-
- win->copyDispUnit=0;
- win->copySize=0;
- winfo->memregion_used = 0;
- winfo->disp_unit = disp_unit;
-
- return mpi_errno;
-}
-
-/***************************************************************************/
-/* */
-/* MPIDI_Win_allgather */
-/* */
-/* registers memory with PAMI if possible */
-/* calls Allgather to gather the information from all members in win. */
-/* */
-/***************************************************************************/
-int
-MPIDI_Win_allgather( MPI_Aint size, MPID_Win **win_ptr )
-{
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag=MPIR_ERR_NONE;
- MPID_Win *win;
- int rank;
- MPID_Comm *comm_ptr;
- size_t length_out = 0;
- pami_result_t rc;
- MPIDI_Win_info *winfo;
- static char FCNAME[] = "MPIDI_Win_allgather";
-
- win = *win_ptr;
- comm_ptr = win->comm_ptr;
- rank = comm_ptr->rank;
- winfo = &win->mpid.info[rank];
-
- if (size != 0 && win->create_flavor != MPI_WIN_FLAVOR_SHARED)
- {
-#ifndef USE_PAMI_RDMA
- if (!MPIDI_Process.mp_s_use_pami_get)
- {
-#endif
- /* --------------------------------------- */
- /* Setup the PAMI sections of the window */
- /* --------------------------------------- */
- rc = PAMI_Memregion_create(MPIDI_Context[0], win->mpid.info[rank].base_addr, win->size, &length_out, &winfo->memregion);
-#ifdef USE_PAMI_RDMA
- MPIU_ERR_CHKANDJUMP((rc != PAMI_SUCCESS), mpi_errno, MPI_ERR_OTHER, "**nomem");
- MPIU_ERR_CHKANDJUMP((win->size < length_out), mpi_errno, MPI_ERR_OTHER, "**nomem");
-#else
- if (rc == PAMI_SUCCESS)
- {
- winfo->memregion_used = 1;
- MPID_assert(win->size == length_out);
- }
- }
-#endif
- }
-
- mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE,
- 0,
- MPI_DATATYPE_NULL,
- win->mpid.info,
- sizeof(struct MPIDI_Win_info),
- MPI_BYTE,
- comm_ptr,
- &errflag);
-
-fn_fail:
- return mpi_errno;
-}
-
-
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_create function
- *
- * Create a window object. Allocates a MPID_Win object and initializes it,
- * then allocates the collective info array, initalizes our entry, and
- * performs an Allgather to distribute/collect the rest of the array entries.
- *
- * ON first call, initializes (registers) protocol objects for locking,
- * get, and send operations to message layer. Also creates datatype to
- * represent the rma_sends element of the collective info array,
- * used later to synchronize epoch end events.
- *
- * \param[in] base Local window buffer
- * \param[in] size Local window size
- * \param[in] disp_unit Displacement unit size
- * \param[in] info Window hints (not used)
- * \param[in] comm_ptr Communicator
- * \param[out] win_ptr Window
- * \return MPI_SUCCESS, MPI_ERR_OTHER, or error returned from
- * MPI_Comm_dup or MPI_Allgather.
- */
-int
-MPID_Win_create(void * base,
- MPI_Aint size,
- int disp_unit,
- MPID_Info * info,
- MPID_Comm * comm_ptr,
- MPID_Win ** win_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- int rc = MPI_SUCCESS;
- MPID_Win *win;
- size_t rank;
- MPIDI_Win_info *winfo;
-
- rc=MPIDI_Win_init(size,disp_unit,win_ptr, info, comm_ptr, MPI_WIN_FLAVOR_CREATE, MPI_WIN_UNIFIED);
- win = *win_ptr;
- win->base = base;
- rank = comm_ptr->rank;
- winfo = &win->mpid.info[rank];
- winfo->base_addr = base;
- winfo->win = win;
- winfo->disp_unit = disp_unit;
-
- rc= MPIDI_Win_allgather(size,win_ptr);
- if (rc != MPI_SUCCESS)
- return rc;
-
-
- mpi_errno = MPIR_Barrier_impl(comm_ptr, (MPIR_Errflag_t *) &errflag);
-
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c b/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
deleted file mode 100644
index b3897c3..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_create.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_create_dynamic function
- *
- * Create a window object. Allocates a MPID_Win object and initializes it,
- * then allocates the collective info array, initalizes our entry, and
- * performs an Allgather to distribute/collect the rest of the array entries.
- * The function returns a window win without memory attached.
- *
- * Input Parameters:
- * \param[in] info info argument
- * \param[in] comm intra-Communicator (handle)
- * \param[out] win_ptr window object returned by the call (handle)
- * \return MPI_SUCCESS, MPI_ERR_ARG, MPI_ERR_COMM, MPI_ERR_INFO. MPI_ERR_OTHER,
- * MPI_ERR_SIZE
- */
-
-int
-MPID_Win_create_dynamic( MPID_Info * info,
- MPID_Comm * comm_ptr,
- MPID_Win ** win_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- int rc = MPI_SUCCESS;
- MPIDI_Win_info *winfo;
- MPID_Win *win;
- int rank;
-
- rc=MPIDI_Win_init(0,1,win_ptr, info, comm_ptr, MPI_WIN_FLAVOR_DYNAMIC, MPI_WIN_UNIFIED);
- win = *win_ptr;
-
- rank = comm_ptr->rank;
- win->base = MPI_BOTTOM;
- winfo = &win->mpid.info[rank];
- winfo->win = win;
-
-#ifdef __BGQ__
- void *base = NULL;
- size_t length = 0;
- Kernel_MemoryRegion_t memregion;
- void *tmpbuf = MPIU_Malloc(sizeof(int));
- Kernel_CreateMemoryRegion(&memregion, tmpbuf, sizeof(int));
- //Reset base to base VA of local heap
- base = memregion.BaseVa;
- length = memregion.Bytes;
- MPIU_Free(tmpbuf);
-
- if (length != 0)
- {
- size_t length_out = 0;
- pami_result_t rc;
- rc = PAMI_Memregion_create(MPIDI_Context[0], base, length, &length_out, &winfo->memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- MPID_assert(length == length_out);
- }
- win->base = base;
- winfo->base_addr = base;
-#endif
-
- rc= MPIDI_Win_allgather(0,win_ptr);
- if (rc != MPI_SUCCESS)
- return rc;
-
- mpi_errno = MPIR_Barrier_impl(comm_ptr, (MPIR_Errflag_t *) &errflag);
-
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_detach.c b/src/mpid/pamid/src/onesided/mpid_win_detach.c
deleted file mode 100644
index c4fc618..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_detach.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_detach.c
- * \brief detaches a previously attached memory region beginning at
- * base
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_detach function
- *
- * Detaches a previously attached memory beginning at base.
- * The arguments base and win must match the arguments passed
- * to a previous call to MPI_Win_attach.
- * \param[in] win window object
- * \param[in] base initial address of emmory to be detached
- * \return MPI_SUCCESS, MPI_ERR_RMA_FLAVOR
- *
- */
-
-int
-MPID_Win_detach(MPID_Win *win, const void *base)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_detach";
- MPIU_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_DYNAMIC), mpi_errno,
- MPI_ERR_RMA_FLAVOR, return mpi_errno, "**rmaflavor");
-
-
- /* no op, all memory is exposed */
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
diff --git a/src/mpid/pamid/src/onesided/mpid_win_fence.c b/src/mpid/pamid/src/onesided/mpid_win_fence.c
deleted file mode 100644
index dcb1139..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_fence.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_fence.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-
-int
-MPID_Win_fence(int assert,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
- static char FCNAME[] = "MPID_Win_fence";
-
- if(win->mpid.sync.origin_epoch_type != win->mpid.sync.target_epoch_type){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- if (!(assert & MPI_MODE_NOPRECEDE) &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_FENCE &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_REFENCE &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_NONE) {
- /* --BEGIN ERROR HANDLING-- */
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- /* --END ERROR HANDLING-- */
- }
-
-
- struct MPIDI_Win_sync* sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
-
- if(assert & MPI_MODE_NOSUCCEED)
- {
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_NONE;
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_NONE;
- }
- else{
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_REFENCE;
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_REFENCE;
- }
-
- if (!(assert & MPI_MODE_NOPRECEDE))
- {
- mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
- }
-
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c b/src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
deleted file mode 100644
index 826afab..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_fetch_and_op.c.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-static pami_result_t
-MPIDI_Fetch_and_op_using_pami_rmw(pami_context_t context,
- void * _req)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)_req;
- pami_result_t rc;
- int target_rank;
-
- MPID_assert(req != NULL);
- target_rank = req->target.rank;
-
- pami_rmw_t params;
- params=zero_rmw_parms;
- params.dest=req->dest;
- params.cookie=(void *)req;
- params.done_fn=MPIDI_Win_DoneCB;
- params.type = req->pami_datatype;
- params.operation = req->pami_op;
- params.local=req->user_buffer; /*result*/
- params.remote=req->win->mpid.info[target_rank].base_addr + req->offset + (size_t)req->origin.dt.map[0].DLOOP_VECTOR_BUF;
- params.value=req->buffer; /* replaced value with origin */
-
- rc = PAMI_Rmw(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return rc;
-}
-
-
-void
-MPIDI_WinAtomicCB(pami_context_t context,
- void * cookie,
- const void * _hdr,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPIDI_AtomicHeader_t *ahdr = (MPIDI_AtomicHeader_t *) _hdr;
- MPID_assert (ahdr != NULL);
- MPID_assert (sizeof(MPIDI_AtomicHeader_t) == size);
- MPIDI_AtomicHeader_t ack_hdr = *ahdr;
-
- void *dest_addr = ahdr->remote_addr;
- int len;
- len = MPID_Datatype_get_basic_size (ahdr->datatype);
-
- if (ahdr->atomic_type == MPIDI_WIN_REQUEST_COMPARE_AND_SWAP) {
-
- //overwrite value with result in ack_hdr
- MPIU_Memcpy(ack_hdr.buf, dest_addr, len);
-
- if (MPIR_Compare_equal (&ahdr->test, dest_addr, ahdr->datatype))
- MPIU_Memcpy(dest_addr, ahdr->buf, len);
- }
- else if (ahdr->atomic_type == MPIDI_WIN_REQUEST_FETCH_AND_OP) {
- //overwrite value with result
- MPIU_Memcpy(ack_hdr.buf, dest_addr, len);
-
- MPI_User_function *uop;
- int one = 1;
- uop = MPIR_OP_HDL_TO_FN(ahdr->op);
-
- if (ahdr->op == MPI_REPLACE)
- MPIU_Memcpy(dest_addr, ahdr->buf, len);
- else if (ahdr->op == MPI_NO_OP);
- else
- (*uop) ((void *)ahdr->buf, dest_addr, &one, &ahdr->datatype);
- }
- else
- MPID_abort();
-
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_WinAtomicAck,
- .dest = sender,
- .header = {
- .iov_base = &ack_hdr,
- .iov_len = sizeof(MPIDI_AtomicHeader_t),
- },
- .data = {
- .iov_base = NULL,
- .iov_len = 0,
- },
- .hints = {0},
- };
-
- pami_result_t rc = PAMI_Send_immediate(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
-}
-
-void
-MPIDI_WinAtomicAckCB(pami_context_t context,
- void * cookie,
- const void * _hdr,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- int len;
- MPIDI_AtomicHeader_t *ahdr = (MPIDI_AtomicHeader_t *) _hdr;
- //We have a valid result addr
- if (ahdr->result_addr != NULL) {
- len = MPID_Datatype_get_basic_size (ahdr->datatype);
- MPIU_Memcpy(ahdr->result_addr, ahdr->buf, len);
- }
-
- MPIDI_Win_DoneCB(context, ahdr->request_addr, PAMI_SUCCESS);
-}
-
-
-pami_result_t
-MPIDI_Atomic (pami_context_t context,
- void * _req)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)_req;
- pami_result_t rc;
- MPIDI_AtomicHeader_t atomic_hdr;
- int len;
-
- len = MPID_Datatype_get_basic_size (req->origin.datatype);
- assert(len <= MAX_ATOMIC_TYPE_SIZE);
- if (req->buffer)
- MPIU_Memcpy(atomic_hdr.buf, req->buffer, len);
- if (req->type == MPIDI_WIN_REQUEST_COMPARE_AND_SWAP)
- MPIU_Memcpy(atomic_hdr.test, req->compare_buffer, len);
-
- atomic_hdr.result_addr = req->user_buffer;
- atomic_hdr.remote_addr = req->win->mpid.info[req->target.rank].base_addr + req->offset;
- atomic_hdr.request_addr = req;
- atomic_hdr.datatype = req->origin.datatype;
- atomic_hdr.atomic_type = req->type;
- atomic_hdr.op = req->op;
-
- struct MPIDI_Win_sync* sync = &req->win->mpid.sync;
- MPID_assert (req->origin.dt.num_contig == 1);
- ++sync->started;
-
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_WinAtomic,
- .dest = req->dest,
- .header = {
- .iov_base = &atomic_hdr,
- .iov_len = sizeof(MPIDI_AtomicHeader_t),
- },
- .data = {
- .iov_base = NULL,
- .iov_len = 0,
- },
- .hints = {0},
- };
-
- rc = PAMI_Send_immediate(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return PAMI_SUCCESS;
-}
-
-
-#define FUNCNAME MPIDI_Fetch_and_op
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
- MPI_Datatype datatype, int target_rank,
- MPI_Aint target_disp, MPI_Op op, MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIDI_Win_request *req;
- int good_for_rmw=0;
- int count = 1;
- int shm_locked = 0;
-
- if(win->mpid.sync.origin_epoch_type == win->mpid.sync.target_epoch_type &&
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_FENCE; win->mpid.sync.target_epoch_type = MPID_EPOTYPE_FENCE;
- }
-
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_NONE ||
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- pami_type_t pami_type;
- pami_atomic_t pami_op;
-
- if (target_rank == MPI_PROC_NULL)
- return MPI_SUCCESS;
-
- MPI_Datatype basic_type = MPI_DATATYPE_NULL;
- MPID_Datatype_get_basic_type(datatype, basic_type);
- if ((datatype == MPI_FLOAT_INT) ||
- (datatype == MPI_DOUBLE_INT) ||
- (datatype == MPI_LONG_INT) ||
- (datatype == MPI_SHORT_INT) ||
- (datatype == MPI_LONG_DOUBLE_INT))
- {
- MPID_assert(basic_type == MPI_DATATYPE_NULL);
- basic_type = datatype;
- }
- MPID_assert(basic_type != MPI_DATATYPE_NULL);
-
- if(MPIDI_Datatype_is_pami_rmw_supported(basic_type, &pami_type, op, &pami_op) ) {
-#ifndef __BGQ__
- good_for_rmw = 1;
-#endif
- } else {
- if((op == MPI_NO_OP) && (origin_addr == NULL) && (win->create_flavor != MPI_WIN_FLAVOR_SHARED) ) {
- /* essentially a MPI_Get to result buffer */
- MPID_Get(result_addr, 1, datatype, target_rank,
- target_disp, 1, datatype, win);
- return 0;
- }
- }
-
- req = (MPIDI_Win_request *) MPIU_Calloc0(1, MPIDI_Win_request);
- req->win = win;
- req->type = MPIDI_WIN_REQUEST_FETCH_AND_OP;
-
- req->offset = target_disp * win->mpid.info[target_rank].disp_unit;
-#ifdef __BGQ__
- /* PAMI limitation as it doesnt permit VA of 0 to be passed into
- * memregion create, so we must pass base_va of heap computed from
- * an SPI call instead. So the target offset must be adjusted */
- if (req->win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC)
- req->offset -= (size_t)req->win->mpid.info[target_rank].base_addr;
-#endif
-
- if (datatype == MPI_DOUBLE_INT)
- {
- MPIDI_Win_datatype_basic(count*2,
- MPI_DOUBLE,
- &req->origin.dt);
- }
- else if (datatype == MPI_LONG_DOUBLE_INT)
- {
- MPIDI_Win_datatype_basic(count*2,
- MPI_LONG_DOUBLE,
- &req->origin.dt);
- }
- else if (datatype == MPI_LONG_INT)
- {
- MPIDI_Win_datatype_basic(count*2,
- MPI_LONG,
- &req->origin.dt);
- }
- else if (datatype == MPI_SHORT_INT)
- {
- MPIDI_Win_datatype_basic(count*2,
- MPI_INT,
- &req->origin.dt);
- }
- else
- {
- MPIDI_Win_datatype_basic(count,
- datatype,
- &req->origin.dt);
- }
-
-
- if (req->origin.dt.size == 0)
- {
- MPIU_Free(req);
- return MPI_SUCCESS;
- }
-
- req->target.rank = target_rank;
-
- req->compare_buffer = NULL;
- req->pami_op = pami_op;
- req->op = op;
- req->pami_datatype = pami_type;
- /* MPI_Fetch_and_op only supports predefined datatype */
- req->buffer = (void *) ((uintptr_t) origin_addr + req->origin.dt.true_lb);
- req->user_buffer = result_addr + req->origin.dt.true_lb;
-
- pami_result_t rc;
- pami_task_t task = MPID_VCR_GET_LPID(win->comm_ptr->vcr, target_rank);
- if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_START &&
- !MPIDI_valid_group_rank(task, win->mpid.sync.sc.group))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &req->dest);
- MPID_assert(rc == PAMI_SUCCESS);
-
- MPIDI_Win_datatype_map(&req->origin.dt);
- win->mpid.sync.total += req->origin.dt.num_contig;
- req->origin.datatype= basic_type;
-
- /* The pamid one-sided design requires context post in order to handle the
- * case where the number of pending rma operation exceeds the
- * 'PAMID_RMA_PENDING' threshold. When there are too many pending requests the
- * work function remains on the context post queue (by returning PAMI_EAGAIN)
- * so that the next time the context is advanced the work function will be
- * invoked again.
- *
- * TODO - When context post is not required it would be better to attempt a
- * direct context operation and then fail over to using context post if
- * the rma pending threshold has been reached. This would result in
- * better latency for one-sided operations.
- */
- if(good_for_rmw) {
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Fetch_and_op_using_pami_rmw, req);
- } else {
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Atomic, req);
-
- }
-
-fn_fail:
- return mpi_errno;
-}
-
-
-int MPIDI_Datatype_is_pami_rmw_supported(MPI_Datatype datatype, pami_type_t *pami_type, MPI_Op op, pami_atomic_t *pami_op)
-{
- int null=0;
- MPI_Op null_op=0;
- int rc = FALSE;
- pami_data_function pami_data_fn;
-
- MPIDI_Datatype_to_pami(datatype, pami_type, op, &pami_data_fn, &null);
-
- if(*pami_type == PAMI_TYPE_SIGNED_INT ||
- *pami_type == PAMI_TYPE_UNSIGNED_INT ||
- *pami_type == PAMI_TYPE_SIGNED_LONG ||
- *pami_type == PAMI_TYPE_UNSIGNED_LONG ||
- *pami_type == PAMI_TYPE_SIGNED_LONG_LONG ||
- *pami_type == PAMI_TYPE_SIGNED_LONG_LONG) {
- if(op == null_op) {
- rc = TRUE;
- } else if (op == MPI_SUM) {
- *pami_op = PAMI_ATOMIC_FETCH_ADD;
- rc = TRUE;
- } else if (op == MPI_BOR) {
- *pami_op = PAMI_ATOMIC_FETCH_OR;
- rc = TRUE;
- } else if (op == MPI_BAND) {
- *pami_op = PAMI_ATOMIC_FETCH_AND;
- rc = TRUE;
- } else if (op == MPI_BXOR) {
- *pami_op = PAMI_ATOMIC_FETCH_XOR;
- rc = TRUE;
- } else if (op == MPI_REPLACE) {
- *pami_op = PAMI_ATOMIC_FETCH_SET;
- rc = TRUE;
- } else if (op == MPI_NO_OP) {
- *pami_op = PAMI_ATOMIC_FETCH;
- rc = TRUE;
- }
- }
- return rc;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_flush.c b/src/mpid/pamid/src/onesided/mpid_win_flush.c
deleted file mode 100644
index 310d059..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_flush.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_flush.c
- * \brief returns a new info object containing the hints of the window
- * associated with win.
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_flush function
- *
- * The funcion can be called only within passive target epochs such as
- * MPI_Win_lock, MPI_Win_unlock, MPI_Win_lock_all and MPI_Win_unlock_all.
- *
- * The function completes all outstanding RMA operations initialized by
- * the calling process to a specified target rank on the given window.
- * The operations are completed both at the origin and the target.
- *
- * \param[in] rank rank of target window
- * \param[in] win window object
- * \return MPI_SUCCESS, MPI_ERR_OTHER
- */
-
-
-int
-MPID_Win_flush(int rank,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDI_Win_sync* sync;
- static char FCNAME[] = "MPID_Win_flush";
-
- if((win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK) &&
- (win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
- sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_DO_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
-
- return mpi_errno;
-}
-/**
- * \brief MPI-PAMI glue for MPI_Win_flush_all function
- *
- * The funcion can be called only within passive target epochs such as
- * MPI_Win_lock, MPI_Win_unlock, MPI_Win_lock_all and MPI_Win_unlock_all.
- *
- * All RMA opertions issued by the calling process to any target on the
- * given window prior to this call and in the given window will have
- * completed both at the origin and the target when the call returns.
- *
- * \param[in] win window object
- * \return MPI_SUCCESS, MPI_ERR_OTHER
- */
-
-
-int
-MPID_Win_flush_all(MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDI_Win_sync* sync;
- static char FCNAME[] = "MPID_Win_flush_all";
-
- if((win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK) &&
- (win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
- return mpi_errno;
-
-}
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_flush_local function
- *
- * The funcion can be called only within passive target epochs such as
- * MPI_Win_lock, MPI_Win_unlock, MPI_Win_lock_all and MPI_Win_unlock_all.
- *
- * Locally completes at the origin all outstanding RMA operations initiated
- * the cng process to the target rank on the given window. The user may
- * reuse any buffers after this routine returns.
- *
- * It has been determined that the routine uses only counters for each window
- * and not for each rank because the overhead of tracking each rank could be great
- * if a window group contains a large number of ranks.
- *
- * \param[in] rank rank of target window
- * \param[in] win window object
- * \return MPI_SUCCESS, MPI_ERR_OTHER
- */
-
-int
-MPID_Win_flush_local(int rank, MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDI_Win_sync* sync;
- static char FCNAME[] = "MPID_Win_flush_local";
-
- if((win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK) &&
- (win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
- sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
-
- return mpi_errno;
-}
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_flush_local_all function
- *
- * The funcion can be called only within passive target epochs such as
- * MPI_Win_lock, MPI_Win_unlock, MPI_Win_lock_all and MPI_Win_unlock_all.
- *
- * All RMA operations issued to any target prior to this call in this window
- * will have copleted at the origin when this function returns.
- *
- * \param[in] win window object
- * \return MPI_SUCCESS, MPI_ERR_OTHER
- */
-
-int
-MPID_Win_flush_local_all(MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDI_Win_sync* sync;
- static char FCNAME[] = "MPID_Win_flush";
-
- if((win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK) &&
- (win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
- sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
-
- return mpi_errno;
-}
-
-
-
-
-
diff --git a/src/mpid/pamid/src/onesided/mpid_win_free.c b/src/mpid/pamid/src/onesided/mpid_win_free.c
deleted file mode 100644
index 1db090d..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_free.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_free.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-#include <sys/shm.h>
-#include <sys/ipc.h>
-#include <sys/stat.h>
-#ifdef USE_MMAP_SHM
-#include <sys/mman.h>
-#endif
-
-
-int MPIDI_SHM_Win_free(MPID_Win **win_ptr)
-{
- static char FCNAME[] = "MPID_SHM_Win_free";
- int rc;
- int mpi_errno = MPI_SUCCESS;
-
- /* Free shared memory region */
- /* free shm_base_addrs that's only used for shared memory windows */
- if ((*win_ptr)->mpid.shm->allocated) {
- OPA_fetch_and_add_int((OPA_int_t *) &((*win_ptr)->mpid.shm->ctrl->shm_count),-1);
- while((*win_ptr)->mpid.shm->ctrl->shm_count !=0) MPIDI_QUICKSLEEP;
- if ((*win_ptr)->comm_ptr->rank == 0) {
- MPIDI_SHM_MUTEX_DESTROY(*win_ptr);
- }
-#ifdef USE_SYSV_SHM
- mpi_errno = shmdt((*win_ptr)->mpid.shm->base_addr);
- if ((*win_ptr)->comm_ptr->rank == 0) {
- rc=shmctl((*win_ptr)->mpid.shm->shm_id,IPC_RMID,NULL);
- MPIU_ERR_CHKANDJUMP((rc == -1), errno,MPI_ERR_RMA_SHARED, "**shmctl");
- }
-#elif USE_MMAP_SHM
- munmap ((*win_ptr)->mpid.shm->base_addr, (*win_ptr)->mpid.shm->segment_len);
- if (0 == (*win_ptr)->comm_ptr->rank) shm_unlink ((*win_ptr)->mpid.shm->shm_key);
-#else
- MPID_Abort(NULL, MPI_ERR_RMA_SHARED, -1, "MPI_Win_free error");
-#endif
- } else {/* one task on a node */
- MPIU_Free((*win_ptr)->mpid.shm->base_addr);
- }
- MPIU_Free((*win_ptr)->mpid.shm);
- (*win_ptr)->mpid.shm = NULL;
-
- fn_fail:
- return mpi_errno;
-}
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_free function
- *
- * Release all references and free memory associated with window.
- *
- * \param[in,out] win Window
- * \return MPI_SUCCESS or error returned from MPI_Barrier.
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Win_free
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Win_free(MPID_Win **win_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPID_Win *win = *win_ptr;
- size_t rank = win->comm_ptr->rank;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
-
- if(win->mpid.sync.origin_epoch_type != win->mpid.sync.target_epoch_type ||
- (win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_NONE &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_REFENCE)){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, return mpi_errno, "**rmasync");
- }
-
- mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
- MPIU_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**mpi_bcast");
-
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED)
- mpi_errno=MPIDI_SHM_Win_free(win_ptr);
-
-
-
- if (win->create_flavor == MPI_WIN_FLAVOR_ALLOCATE)
- MPIU_Free(win->base);
-
- struct MPIDI_Win_info *winfo = &win->mpid.info[rank];
-#ifdef USE_PAMI_RDMA
- if (win->size != 0)
- {
- pami_result_t rc;
- rc = PAMI_Memregion_destroy(MPIDI_Context[0], &winfo->memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- }
-#else
- if ( (!MPIDI_Process.mp_s_use_pami_get) && (win->size != 0) && (winfo->memregion_used) )
- {
- pami_result_t rc;
- rc = PAMI_Memregion_destroy(MPIDI_Context[0], &winfo->memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- }
-#endif
-
- MPIU_Free(win->mpid.info);
- if (win->mpid.work.msgQ)
- MPIU_Free(win->mpid.work.msgQ);
-
- MPIR_Comm_release(win->comm_ptr, 0);
-
- MPIU_Handle_obj_free(&MPID_Win_mem, win);
-
-fn_fail:
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_get.c b/src/mpid/pamid/src/onesided/mpid_win_get.c
deleted file mode 100644
index 338c4ab..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_get.c
+++ /dev/null
@@ -1,434 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_get.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-#include "mpidi_util.h"
-
-static inline int
-MPIDI_Get_use_pami_rget(pami_context_t context, MPIDI_Win_request * req)
-__attribute__((__always_inline__));
-#ifdef RDMA_FAILOVER
-static inline int
-MPIDI_Get_use_pami_get(pami_context_t context, MPIDI_Win_request * req)
-__attribute__((__always_inline__));
-#endif
-
-static pami_result_t
-MPIDI_Get(pami_context_t context,
- void * _req)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)_req;
- pami_result_t rc;
-
-#ifdef USE_PAMI_RDMA
- rc = MPIDI_Get_use_pami_rget(context,req);
-#else
- if( (req->origin.memregion_used) &&
- (req->win->mpid.info[req->target.rank].memregion_used) )
- {
- rc = MPIDI_Get_use_pami_rget(context,req);
- } else {
- rc = MPIDI_Get_use_pami_get(context,req);
- }
-#endif
- if(rc == PAMI_EAGAIN)
- return rc;
-
- return PAMI_SUCCESS;
-}
-
-
-static inline int
-MPIDI_Get_use_pami_rget(pami_context_t context, MPIDI_Win_request * req)
-{
- int use_typed_rdma = 0;
-
- if (!req->target.dt.contig || !req->origin.dt.contig) {
- use_typed_rdma = 0;
- if (MPIDI_Process.typed_onesided == 1)
- use_typed_rdma = 1;
- }
-
- if (use_typed_rdma) {
- pami_result_t rc;
- pami_rget_typed_t params;
- /* params need to zero out to avoid passing garbage to PAMI */
- params=zero_rget_typed_parms;
-
- params.rma.dest=req->dest;
- params.rma.hints.buffer_registered = PAMI_HINT_ENABLE;
- params.rma.hints.use_rdma = PAMI_HINT_ENABLE;
- params.rma.bytes = req->target.dt.size;
- params.rma.cookie = req;
- params.rma.done_fn = MPIDI_Win_DoneCB;
- params.rdma.local.mr=&req->origin.memregion;
- params.rdma.remote.mr=&req->win->mpid.info[req->target.rank].memregion;
- params.rdma.remote.offset= req->offset;
- params.rdma.local.offset = req->state.local_offset;
-
- params.type.local = *(pami_type_t *)(req->origin.dt.pointer->device_datatype);
- params.type.remote = *(pami_type_t *)(req->target.dt.pointer->device_datatype);
-
-
- rc = PAMI_Rget_typed(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- }
- else {
- pami_result_t rc;
- pami_rget_simple_t params;
-
- params=zero_rget_parms;
-
- params.rma.dest=req->dest;
- params.rma.hints.buffer_registered = PAMI_HINT_ENABLE;
- params.rma.hints.use_rdma = PAMI_HINT_ENABLE;
- params.rma.bytes = 0;
- params.rma.cookie = req;
- params.rma.done_fn = MPIDI_Win_DoneCB;
- params.rdma.local.mr=&req->origin.memregion;
- params.rdma.remote.mr=&req->win->mpid.info[req->target.rank].memregion;
- params.rdma.remote.offset= req->offset;
-
- struct MPIDI_Win_sync* sync = &req->win->mpid.sync;
- TRACE_ERR("Start index=%u/%d l-addr=%p r-base=%p r-offset=%zu (sync->started=%u sync->complete=%u)\n",
- req->state.index, req->target.dt.num_contig, req->buffer, req->win->mpid.info[req->target.rank].base_addr, req->offset, sync->started, sync->complete);
- while (req->state.index < req->target.dt.num_contig) {
- if (sync->started > sync->complete + MPIDI_Process.rma_pending)
- {
- TRACE_ERR("Bailing out; index=%u/%d sync->started=%u sync->complete=%u\n",
- req->state.index, req->target.dt.num_contig, sync->started, sync->complete);
- return PAMI_EAGAIN;
- }
- ++sync->started;
-
- params.rma.bytes = req->target.dt.map[req->state.index].DLOOP_VECTOR_LEN;
- params.rdma.remote.offset = req->offset + (size_t)req->target.dt.map[req->state.index].DLOOP_VECTOR_BUF;
- params.rdma.local.offset = req->state.local_offset;
-
-#ifdef TRACE_ON
- unsigned* buf = (unsigned*)(req->buffer + params.rdma.local.offset);
-#endif
- TRACE_ERR(" Sub index=%u bytes=%zu l-offset=%zu r-offset=%zu buf=%p *(int*)buf=0x%08x\n", req->state.index, params.rma.bytes, params.rdma.local.offset, params.rdma.remote.offset, buf, *buf);
-
- /** sync->total will be updated with every RMA and the complete
- will not change till that RMA has completed. In the meanwhile
- the rest of the RMAs will have memory leaks */
- if (req->target.dt.num_contig - req->state.index == 1) {
- rc = PAMI_Rget(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return PAMI_SUCCESS;
- } else {
- rc = PAMI_Rget(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- req->state.local_offset += params.rma.bytes;
- ++req->state.index;
- }
- }
- }
- return PAMI_SUCCESS;
-}
-
-
-#ifdef RDMA_FAILOVER
-static inline int
-MPIDI_Get_use_pami_get(pami_context_t context, MPIDI_Win_request * req)
-{
- pami_result_t rc;
- pami_get_simple_t params;
-
- params=zero_get_parms;
-
- params.rma.dest=req->dest;
- params.rma.hints.use_rdma = PAMI_HINT_DEFAULT;
-#ifndef OUT_OF_ORDER_HANDLING
- params.rma.hints.no_long_header= 1,
-#endif
- params.rma.bytes = 0;
- params.rma.cookie = req;
- params.rma.done_fn = MPIDI_Win_DoneCB;
- params.addr.local=req->buffer;
- params.addr.remote= req->win->mpid.info[req->target.rank].base_addr;
-
- struct MPIDI_Win_sync* sync = &req->win->mpid.sync;
- TRACE_ERR("Start index=%u/%d l-addr=%p r-base=%p r-offset=%zu (sync->started=%u sync->complete=%u)\n",
- req->state.index, req->target.dt.num_contig, req->buffer, req->win->mpid.info[req->target.rank].base_addr, req->offset, sync->started, sync->complete);
- while (req->state.index < req->target.dt.num_contig) {
- if (sync->started > sync->complete + MPIDI_Process.rma_pending)
- {
- TRACE_ERR("Bailing out; index=%u/%d sync->started=%u sync->complete=%u\n",
- req->state.index, req->target.dt.num_contig, sync->started, sync->complete);
- return PAMI_EAGAIN;
- }
- ++sync->started;
-
-
- params.rma.bytes = req->target.dt.map[req->state.index].DLOOP_VECTOR_LEN;
- params.addr.local = req->buffer+req->state.local_offset;
- params.addr.remote = req->win->mpid.info[req->target.rank].base_addr+ req->offset + (size_t)req->target.dt.map[req->state.index].DLOOP_VECTOR_BUF;
-
-#ifdef TRACE_ON
- unsigned* buf = (unsigned*)(req->buffer + params.rdma.local.offset);
-#endif
- TRACE_ERR(" Sub index=%u bytes=%zu l-offset=%zu r-offset=%zu buf=%p *(int*)buf=0x%08x\n",
- req->state.index, params.rma.bytes, params.rdma.local.offset, params.rdma.remote.offset, buf, *buf);
-
- /** sync->total will be updated with every RMA and the complete
- will not change till that RMA has completed. In the meanwhile
- the rest of the RMAs will have memory leaks */
- if (req->target.dt.num_contig - req->state.index == 1) {
- rc = PAMI_Get(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return PAMI_SUCCESS;
- } else {
- rc = PAMI_Get(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- req->state.local_offset += params.rma.bytes;
- ++req->state.index;
- }
- }
- return PAMI_SUCCESS;
-}
-#endif
-
-
-/**
- * \brief MPI-PAMI glue for MPI_GET function
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Get
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Get(void *origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPID_Win *win)
-{
-
- int mpi_errno = MPI_SUCCESS;
- int shm_locked=0;
- void *target_addr;
- MPIDI_Win_request *req = MPIU_Calloc0(1, MPIDI_Win_request);
- req->win = win;
- if(win->mpid.request_based != 1)
- req->type = MPIDI_WIN_REQUEST_GET;
- else {
- req->req_handle = win->mpid.rreq;
- req->type = MPIDI_WIN_REQUEST_RGET;
- req->req_handle->mpid.win_req = req;
- }
-
- if(win->mpid.sync.origin_epoch_type == win->mpid.sync.target_epoch_type &&
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_FENCE;
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_FENCE;
- }
-
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_NONE ||
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- req->offset = target_disp * win->mpid.info[target_rank].disp_unit;
-#ifdef __BGQ__
- /* PAMI limitation as it doesnt permit VA of 0 to be passed into
- * memregion create, so we must pass base_va of heap computed from
- * an SPI call instead. So the target offset must be adjusted */
- if (req->win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC)
- req->offset -= (size_t)req->win->mpid.info[target_rank].base_addr;
-#endif
-
- MPIDI_Win_datatype_basic(origin_count,
- origin_datatype,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count,
- target_datatype,
- &req->target.dt);
- #ifndef MPIDI_NO_ASSERT
- MPID_assert(req->origin.dt.size == req->target.dt.size);
- #else
- MPIU_ERR_CHKANDJUMP((req->origin.dt.size != req->target.dt.size), mpi_errno, MPI_ERR_SIZE, "**rmasize");
- #endif
-
- if ( (req->origin.dt.size == 0) ||
- (target_rank == MPI_PROC_NULL))
- {
- if(req->req_handle)
- MPID_cc_set(req->req_handle->cc_ptr, 0);
- else
- MPIU_Free(req);
- return MPI_SUCCESS;
- }
-
- /* If the get is a local operation,or shared window do it here */
- if ((target_rank == win->comm_ptr->rank) || (win->create_flavor == MPI_WIN_FLAVOR_SHARED))
- {
- if (target_rank == win->comm_ptr->rank)
- target_addr = win->base + req->offset;
- else
- target_addr = win->mpid.info[target_rank].base_addr + req->offset;
-
-
- /* The operation is not complete until the local copy is performed */
- mpi_errno = MPIR_Localcopy(target_addr,
- target_count,
- target_datatype,
- origin_addr,
- origin_count,
- origin_datatype);
-
- /* The instant this completion counter is set to zero another thread
- * may notice the change and begin freeing request resources. The
- * thread executing the code in this function must not touch any
- * portion of the request structure after decrementing the completion
- * counter.
- *
- * See MPID_Request_release_inline()
- */
- if(req->req_handle)
- MPID_cc_set(req->req_handle->cc_ptr, 0);
- else
- MPIU_Free(req);
- return mpi_errno;
- }
- req->target.rank = target_rank;
-
-
- /* Only pack the origin data if the origin is non-contiguous and we are using the simple PAMI_Rget.
- * If we are using the typed PAMI_Rget_typed use the origin address as is, if we are using the simple
- * PAMI_Rget with contiguous data use the origin address with the lower-bound adjustment.
- */
- if (req->origin.dt.contig || (!req->origin.dt.contig && (MPIDI_Process.typed_onesided == 1)))
- {
- req->buffer_free = 0;
- if ((req->origin.dt.contig && req->target.dt.contig && (MPIDI_Process.typed_onesided == 1)) || (!(MPIDI_Process.typed_onesided == 1))) // use simple rput
- req->buffer = (void *) ((uintptr_t) origin_addr + req->origin.dt.true_lb);
- else
- req->buffer = (void *) ((uintptr_t) origin_addr);
- }
- else
- {
- req->buffer_free = 1;
- req->buffer = MPIU_Malloc(req->origin.dt.size);
- MPID_assert(req->buffer != NULL);
-
- MPID_Datatype_add_ref(req->origin.dt.pointer);
- req->origin.addr = origin_addr;
- req->origin.count = origin_count;
- req->origin.datatype = origin_datatype;
- req->origin.completed = 0;
-
-
-
-
- }
-
-
- pami_result_t rc;
- pami_task_t task = MPID_VCR_GET_LPID(win->comm_ptr->vcr, target_rank);
- if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_START &&
- !MPIDI_valid_group_rank(task, win->mpid.sync.sc.group))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &req->dest);
- MPID_assert(rc == PAMI_SUCCESS);
-
-#ifdef USE_PAMI_RDMA
- size_t length_out;
- rc = PAMI_Memregion_create(MPIDI_Context[0],
- req->buffer,
- req->origin.dt.size,
- &length_out,
- &req->origin.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- MPID_assert(req->origin.dt.size == length_out);
-#else
- if(!MPIDI_Process.mp_s_use_pami_get)
- {
- size_t length_out;
- rc = PAMI_Memregion_create(MPIDI_Context[0],
- req->buffer,
- req->origin.dt.size,
- &length_out,
- &req->origin.memregion);
- if(rc == PAMI_SUCCESS)
- {
- req->origin.memregion_used = 1;
- MPID_assert(req->origin.dt.size == length_out);
- }
- }
-#endif
-
-
- if ((!req->target.dt.contig || !req->origin.dt.contig) && (MPIDI_Process.typed_onesided == 1))
- /* If the datatype is non-contiguous and the PAMID typed_onesided optimization
- * is enabled then we will be using the typed interface and will only make 1 call.
- */
- win->mpid.sync.total = 1;
- else {
- MPIDI_Win_datatype_map(&req->target.dt);
- win->mpid.sync.total += req->target.dt.num_contig;
- }
-
- if ((MPIDI_Process.typed_onesided == 1) && (!req->target.dt.contig || !req->origin.dt.contig)) {
- /* We will use the PAMI_Rget_typed call so we need to make sure any MPI_Type_free before the context
- * executes the get does not free the MPID_Datatype, which would also free the associated PAMI datatype which
- * is still needed for communication -- decrement the ref in the callback to allow the MPID_Datatype
- * to be freed once the PAMI communication has completed.
- */
- MPID_Datatype_add_ref(req->origin.dt.pointer);
- MPID_Datatype_add_ref(req->target.dt.pointer);
- }
- /* The pamid one-sided design requires context post in order to handle the
- * case where the number of pending rma operation exceeds the
- * 'PAMID_RMA_PENDING' threshold. When there are too many pending requests the
- * work function remains on the context post queue (by returning PAMI_EAGAIN)
- * so that the next time the context is advanced the work function will be
- * invoked again.
- *
- * TODO - When context post is not required it would be better to attempt a
- * direct context operation and then fail over to using context post if
- * the rma pending threshold has been reached. This would result in
- * better latency for one-sided operations.
- */
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Get, req);
-
-fn_fail:
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c b/src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
deleted file mode 100644
index f57eddb..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
+++ /dev/null
@@ -1,586 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_accumulate.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-static void
-MPIDI_Fetch_data_op(const void * origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- void * result_addr,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPI_Op op,
- MPID_Win *win)
-{
- static char FCNAME[] = "MPIDI_Fetch_data_op";
- int shm_locked=0;
- MPI_User_function *uop;
- void *base, *dest_addr;
- int disp_unit;
- int len, one;
-
- base = win->mpid.info[target_rank].base_addr;
- disp_unit = win->mpid.info[target_rank].disp_unit;
- dest_addr = (char *) base + disp_unit * target_disp;
-
- MPID_Datatype_get_size_macro(origin_datatype, len);
- MPIU_Memcpy(result_addr, dest_addr, len);
- if (op != MPI_NO_OP) {
- uop = MPIR_OP_HDL_TO_FN(op);
- one = 1;
- (*uop)((void *) origin_addr, dest_addr, &one, &origin_datatype);
- }
-
- fn_fail: return;
-}
-
-
-static void
-MPIDI_Win_GetAccSendAckDoneCB(pami_context_t context,
- void * _info,
- pami_result_t result)
-{
- MPIDI_Win_GetAccMsgInfo *msginfo = (MPIDI_Win_GetAccMsgInfo *) _info;
- MPIU_Free(msginfo->tptr);
- MPIU_Free(msginfo);
-}
-
-static void
-MPIDI_Win_GetAccumSendAck(pami_context_t context,
- void * _info,
- pami_result_t result)
-{
- static char FCNAME[] = "MPID_Win_GetAccumSendAck";
- MPIDI_Win_GetAccMsgInfo *msginfo = (MPIDI_Win_GetAccMsgInfo *) _info;
- pami_result_t rc = PAMI_SUCCESS;
-
- //Copy from msginfo->addr to a contiguous buffer
- char *buffer = NULL;
-
- buffer = MPIU_Malloc(msginfo->size);
- MPID_assert(buffer != NULL);
-
- if (msginfo->num_contig == 1)
- memcpy(buffer, msginfo->addr, msginfo->size);
- else
- {
- int mpi_errno = 0;
- mpi_errno = MPIR_Localcopy(msginfo->addr,
- msginfo->count,
- msginfo->type,
- buffer,
- msginfo->size,
- MPI_CHAR);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- }
- //Schedule sends to source to result buffer and trigger completion
- //callback there
- pami_send_t params = {
- .send = {
- .header = {
- .iov_base = msginfo,
- .iov_len = sizeof(MPIDI_Win_GetAccMsgInfo),
- },
- .dispatch = MPIDI_Protocols_WinGetAccumAck,
- .dest = msginfo->src_endpoint,
- },
- .events = {
- .cookie = msginfo,
- .local_fn = MPIDI_Win_GetAccSendAckDoneCB, //cleanup buffer
- },
- };
-
- msginfo->tptr = buffer;
-
- params.send.data.iov_len = msginfo->size;
- params.send.data.iov_base = buffer;
-
- rc = PAMI_Send(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- fn_fail: return;
-}
-
-void
-MPIDI_WinGetAccumCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv != NULL);
- MPID_assert(sndbuf == NULL);
- MPID_assert(msginfo_size == sizeof(MPIDI_Win_GetAccMsgInfo));
- MPID_assert(_msginfo != NULL);
- MPIDI_Win_GetAccMsgInfo * msginfo = (MPIDI_Win_GetAccMsgInfo *)
- MPIU_Malloc(sizeof(MPIDI_Win_GetAccMsgInfo));
-
- *msginfo = *(MPIDI_Win_GetAccMsgInfo *)_msginfo;
- msginfo->src_endpoint = sender;
-
- int null=0;
- pami_type_t pami_type;
- pami_data_function pami_op;
- MPI_Op op = msginfo->op;
-
- MPIDI_Datatype_to_pami(msginfo->type, &pami_type, op, &pami_op, &null);
-
- recv->addr = msginfo->addr;
- recv->type = pami_type;
- recv->offset = 0;
- recv->data_fn = pami_op;
- recv->data_cookie = NULL;
- recv->local_fn = NULL;
- recv->cookie = NULL;
-
- if (msginfo->counter == 0)
- //We will now allocate a tempbuf, copy local contents and start a
- //send
- MPIDI_Win_GetAccumSendAck (context, msginfo, PAMI_SUCCESS);
- else
- MPIU_Free(msginfo);
-}
-
-static void
-MPIDI_Win_GetAccDoneCB(pami_context_t context,
- void * cookie,
- pami_result_t result)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)cookie;
- ++req->win->mpid.sync.complete;
- ++req->origin.completed;
-
- if (req->origin.completed == req->target.dt.num_contig + 1)
- {
- MPID_Request * req_handle = req->req_handle;
-
- if (req->buffer_free) {
- MPIU_Free(req->buffer);
- req->buffer_free = 0;
- }
- if (req->accum_headers)
- MPIU_Free(req->accum_headers);
-
- MPIDI_Win_datatype_unmap(&req->target.dt);
- MPIDI_Win_datatype_unmap(&req->result.dt);
-
- if( req->type != MPIDI_WIN_REQUEST_RGET_ACCUMULATE ) {
- if (req_handle) {
- req_handle->mpid.win_req = NULL;
- }
- MPIU_Free(req);
- }
- /* The instant this completion counter is set to zero another thread
- * may notice the change and begin freeing request resources. The
- * thread executing the code in this function must not touch any
- * portion of the request structure after decrementing the completion
- * counter.
- *
- * See MPID_Request_release_inline()
- */
- if(req_handle)
- MPID_cc_set(req_handle->cc_ptr, 0);
- }
- MPIDI_Progress_signal();
-}
-
-void
-MPIDI_Win_GetAccAckDoneCB(pami_context_t context,
- void * _msginfo,
- pami_result_t result)
-{
- MPIDI_Win_GetAccMsgInfo * msginfo =(MPIDI_Win_GetAccMsgInfo *)_msginfo;
- MPIDI_Win_request *req = (MPIDI_Win_request *) msginfo->request;
-
- if (req->result_num_contig > 1) {
- MPIR_Localcopy(req->result.addr,
- req->result.count,
- req->result.datatype,
- msginfo->tptr,
- msginfo->size,
- MPI_CHAR);
- MPIU_Free(msginfo->tptr);
- }
- MPIU_Free(msginfo);
-
- MPIDI_Win_GetAccDoneCB(context, req, result);
-}
-
-
-void
-MPIDI_WinGetAccumAckCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv != NULL);
- MPID_assert(sndbuf == NULL);
- MPID_assert(_msginfo != NULL);
- MPIDI_Win_GetAccMsgInfo * msginfo =MPIU_Malloc(sizeof(MPIDI_Win_GetAccMsgInfo));
- *msginfo = *(const MPIDI_Win_GetAccMsgInfo *)_msginfo;
- MPIDI_Win_request *req = (MPIDI_Win_request *) msginfo->request;
-
- msginfo->tptr = NULL;
- recv->addr = req->result.addr;
- if (req->result_num_contig > 1)
- recv->addr = msginfo->tptr = MPIU_Malloc(msginfo->size);
-
- recv->type = PAMI_TYPE_BYTE;
- recv->offset = 0;
- recv->data_fn = PAMI_DATA_COPY;
- recv->data_cookie = NULL;
- recv->local_fn = MPIDI_Win_GetAccAckDoneCB;
- recv->cookie = msginfo;
-}
-
-static pami_result_t
-MPIDI_Get_accumulate(pami_context_t context,
- void * _req)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)_req;
- pami_result_t rc;
-
- pami_send_t params = {
- .send = {
- .header = {
- .iov_len = sizeof(MPIDI_Win_GetAccMsgInfo),
- },
- .dispatch = MPIDI_Protocols_WinGetAccum,
- .dest = req->dest,
- },
- .events = {
- .cookie = req,
- .remote_fn = MPIDI_Win_GetAccDoneCB, //When all accumulates have
- //completed remotely
- //complete accumulate
- },
- };
-
- struct MPIDI_Win_sync* sync = &req->win->mpid.sync;
- TRACE_ERR("Start index=%u/%d l-addr=%p r-base=%p r-offset=%zu (sync->started=%u sync->complete=%u)\n",
- req->state.index, req->target.dt.num_contig, req->buffer, req->win->mpid.info[req->target.rank].base_addr, req->offset, sync->started, sync->complete);
- while (req->state.index < req->target.dt.num_contig) {
- if (sync->started > sync->complete + MPIDI_Process.rma_pending)
- {
- TRACE_ERR("Bailing out; index=%u/%d sync->started=%u sync->complete=%u\n",
- req->state.index, req->target.dt.num_contig, sync->started, sync->complete);
- return PAMI_EAGAIN;
- }
- ++sync->started;
-
- params.send.header.iov_base = &(((MPIDI_Win_GetAccMsgInfo *)req->accum_headers)[req->state.index]);
- params.send.data.iov_len = req->target.dt.map[req->state.index].DLOOP_VECTOR_LEN;
- params.send.data.iov_base = req->buffer + req->state.local_offset;
-
- if (req->target.dt.num_contig - req->state.index == 1) {
- rc = PAMI_Send(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return PAMI_SUCCESS;
- } else {
- rc = PAMI_Send(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- req->state.local_offset += params.send.data.iov_len;
- ++req->state.index;
- }
- }
- return PAMI_SUCCESS;
-}
-
-
-/**
- * \brief MPI-PAMI glue for MPI_GET_ACCUMULATE function
- *
- * According to the MPI Specification:
- *
- * Each datatype argument must be a predefined datatype or
- * a derived datatype, where all basic components are of the
- * same predefined datatype. Both datatype arguments must be
- * constructed from the same predefined datatype.
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] op Operand to perform
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Get_accumulate
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Get_accumulate(const void * origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- void * result_addr,
- int result_count,
- MPI_Datatype result_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPI_Op op,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
-
- if (op == MPI_NO_OP) {//we just need to fetch data
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
- win->mpid.sync.total++;
- MPIDI_Fetch_data_op(origin_addr, origin_count, origin_datatype,
- result_addr, target_rank, target_disp,
- target_count, target_datatype, op, win);
- ++win->mpid.sync.complete;
- } else {
- mpi_errno = MPID_Get(result_addr,
- result_count,
- result_datatype,
- target_rank,
- target_disp,
- target_count,
- target_datatype,
- win);
- }
- return mpi_errno;
- }
-
- MPIDI_Win_request *req;
- req = MPIU_Calloc0(1, MPIDI_Win_request);
- req->win = win;
- if(win->mpid.request_based != 1)
- req->type = MPIDI_WIN_REQUEST_GET_ACCUMULATE;
- else {
- req->req_handle = win->mpid.rreq;
- req->type = MPIDI_WIN_REQUEST_RGET_ACCUMULATE;
- req->req_handle->mpid.win_req = req;
- }
- req->offset = target_disp*win->mpid.info[target_rank].disp_unit;
-#ifdef __BGQ__
- /* PAMI limitation as it doesnt permit VA of 0 to be passed into
- * memregion create, so we must pass base_va of heap computed from
- * an SPI call instead. So the target offset must be adjusted */
- if (req->win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC)
- req->offset -= (size_t)req->win->mpid.info[target_rank].base_addr;
-#endif
-
- if(win->mpid.sync.origin_epoch_type == win->mpid.sync.target_epoch_type &&
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_FENCE;
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_FENCE;
- }
-
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_NONE ||
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- req->offset = target_disp * win->mpid.info[target_rank].disp_unit;
-
- if (origin_datatype == MPI_DOUBLE_INT) {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_DOUBLE,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_DOUBLE,
- &req->target.dt);
- }
- else if (origin_datatype == MPI_LONG_DOUBLE_INT)
- {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_LONG_DOUBLE,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_LONG_DOUBLE,
- &req->target.dt);
- }
- else if (origin_datatype == MPI_LONG_INT)
- {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_LONG,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_LONG,
- &req->target.dt);
- }
- else if (origin_datatype == MPI_SHORT_INT)
- {
- MPIDI_Win_datatype_basic(origin_count*2,
- MPI_INT,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count*2,
- MPI_INT,
- &req->target.dt);
- }
- else
- {
- MPIDI_Win_datatype_basic(origin_count,
- origin_datatype,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count,
- target_datatype,
- &req->target.dt);
- }
-
- MPID_assert(req->origin.dt.size == req->target.dt.size);
-
- if ( (req->origin.dt.size == 0) ||
- (target_rank == MPI_PROC_NULL))
- {
- if(req->req_handle)
- MPID_cc_set(req->req_handle->cc_ptr, 0);
- else
- MPIU_Free(req);
- return MPI_SUCCESS;
- }
-
- req->target.rank = target_rank;
-
-
- if (req->origin.dt.contig)
- {
- req->buffer_free = 0;
- req->buffer = (char*)origin_addr + req->origin.dt.true_lb;
- }
- else
- {
- req->buffer_free = 1;
- req->buffer = MPIU_Malloc(req->origin.dt.size);
- MPID_assert(req->buffer != NULL);
-
- int mpi_errno = 0;
- mpi_errno = MPIR_Localcopy(origin_addr,
- origin_count,
- origin_datatype,
- req->buffer,
- req->origin.dt.size,
- MPI_CHAR);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- }
-
- pami_result_t rc;
- pami_task_t task = MPID_VCR_GET_LPID(win->comm_ptr->vcr, target_rank);
- if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_START &&
- !MPIDI_valid_group_rank(task, win->mpid.sync.sc.group))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &req->dest);
- MPID_assert(rc == PAMI_SUCCESS);
-
-
- MPIDI_Win_datatype_map(&req->target.dt);
- req->result.addr = result_addr;
- req->result.count = result_count;
- req->result.datatype = result_datatype;
- MPIDI_Win_datatype_basic(result_count, result_datatype, &req->result.dt);
- MPIDI_Win_datatype_map(&req->result.dt);
- req->result_num_contig = req->result.dt.num_contig;
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED)
- {
- win->mpid.sync.total++;
- MPIDI_Fetch_data_op(origin_addr, origin_count, origin_datatype,
- result_addr, target_rank, target_disp,
- target_count, target_datatype, op, win);
- ++win->mpid.sync.complete;
-
- if (req->buffer_free) {
- MPIU_Free(req->buffer);
- MPIU_Free(req->user_buffer);
- req->buffer_free = 0;
- }
- MPIDI_Win_datatype_unmap(&req->target.dt);
- MPIDI_Win_datatype_unmap(&req->result.dt);
-
- if(req->req_handle) {
- MPID_cc_set(req->req_handle->cc_ptr, 0);
- } else {
- MPIU_Free(req);
- }
- } else { /* non-shared */
- //We wait for #messages depending on target and result_datatype
- win->mpid.sync.total += (1 + req->target.dt.num_contig);
- {
- MPI_Datatype basic_type = MPI_DATATYPE_NULL;
- MPID_Datatype_get_basic_type(origin_datatype, basic_type);
- /* MPID_Datatype_get_basic_type() doesn't handle the struct types */
- if ((origin_datatype == MPI_FLOAT_INT) ||
- (origin_datatype == MPI_DOUBLE_INT) ||
- (origin_datatype == MPI_LONG_INT) ||
- (origin_datatype == MPI_SHORT_INT) ||
- (origin_datatype == MPI_LONG_DOUBLE_INT))
- {
- MPID_assert(basic_type == MPI_DATATYPE_NULL);
- basic_type = origin_datatype;
- }
- MPID_assert(basic_type != MPI_DATATYPE_NULL);
-
- unsigned index;
- MPIDI_Win_GetAccMsgInfo * headers = MPIU_Calloc0(req->target.dt.num_contig, MPIDI_Win_GetAccMsgInfo);
- req->accum_headers = headers;
- for (index=0; index < req->target.dt.num_contig; ++index) {
- headers[index].addr = win->mpid.info[target_rank].base_addr + req->offset +
- (size_t)req->target.dt.map[index].DLOOP_VECTOR_BUF;
- headers[index].req = req;
- headers[index].win = win;
- headers[index].type = basic_type;
- headers[index].op = op;
- headers[index].count = target_count;
- headers[index].counter = index;
- headers[index].num_contig = req->target.dt.num_contig;
- headers[index].size = req->target.dt.size;
- headers[index].request = req;
- }
-
- }
-
- /* The pamid one-sided design requires context post in order to handle the
- * case where the number of pending rma operation exceeds the
- * 'PAMID_RMA_PENDING' threshold. When there are too many pending requests the
- * work function remains on the context post queue (by returning PAMI_EAGAIN)
- * so that the next time the context is advanced the work function will be
- * invoked again.
- *
- * TODO - When context post is not required it would be better to attempt a
- * direct context operation and then fail over to using context post if
- * the rma pending threshold has been reached. This would result in
- * better latency for one-sided operations.
- */
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Get_accumulate, req);
- }
-fn_fail:
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_get_info.c b/src/mpid/pamid/src/onesided/mpid_win_get_info.c
deleted file mode 100644
index 08c4d03..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_get_info.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_get_info.c
- * \brief returns a new info object containing the hints of the window
- * associated with win.
- */
-#include "mpidi_onesided.h"
-#include "mpiinfo.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_WIN_GET_INFO function
- *
- * \param[in] win Window
- * \param[in] info_p_p Info hint
- * \return MPI_SUCCESS
- */
-int MPIDI_Win_get_info(MPID_Win *win, MPID_Info **info_used)
-{
- int mpi_errno = MPI_SUCCESS;
-
-
- /* Populate the predefined info keys */
- if (win->mpid.info_args.no_locks)
- mpi_errno = MPIR_Info_set_impl(*info_used, "no_locks", "true");
- else
- mpi_errno = MPIR_Info_set_impl(*info_used, "no_locks", "false");
- MPID_assert(mpi_errno == MPI_SUCCESS);
-
- {
-#define BUFSIZE 32
- char buf[BUFSIZE];
- int c = 0;
- if (win->mpid.info_args.accumulate_ordering & MPIDI_ACCU_ORDER_RAR)
- c += snprintf(buf+c, BUFSIZE-c, "%srar", (c > 0) ? "," : "");
- if (win->mpid.info_args.accumulate_ordering & MPIDI_ACCU_ORDER_RAW)
- c += snprintf(buf+c, BUFSIZE-c, "%sraw", (c > 0) ? "," : "");
- if (win->mpid.info_args.accumulate_ordering & MPIDI_ACCU_ORDER_WAR)
- c += snprintf(buf+c, BUFSIZE-c, "%swar", (c > 0) ? "," : "");
- if (win->mpid.info_args.accumulate_ordering & MPIDI_ACCU_ORDER_WAW)
- c += snprintf(buf+c, BUFSIZE-c, "%swaw", (c > 0) ? "," : "");
-
- if (c == 0) {
- memcpy(&buf[0],"not set ",10);
- }
- MPIR_Info_set_impl(*info_used, "accumulate_ordering", buf);
- MPID_assert(mpi_errno == MPI_SUCCESS);
-#undef BUFSIZE
- }
- if (win->mpid.info_args.accumulate_ops == (unsigned) MPIDI_ACCU_OPS_SAME_OP)
- mpi_errno = MPIR_Info_set_impl(*info_used, "accumulate_ops", "same_op");
- else
- mpi_errno = MPIR_Info_set_impl(*info_used, "accumulate_ops", "same_op_no_op");
-
- MPID_assert(mpi_errno == MPI_SUCCESS);
-
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
- if (win->mpid.info_args.alloc_shared_noncontig)
- mpi_errno = MPIR_Info_set_impl(*info_used, "alloc_shared_noncontig", "true");
- else
- mpi_errno = MPIR_Info_set_impl(*info_used, "alloc_shared_noncontig", "false");
-
- MPID_assert(mpi_errno == MPI_SUCCESS);
- }
- else if (win->create_flavor == MPI_WIN_FLAVOR_ALLOCATE) {
- if (win->mpid.info_args.same_size)
- mpi_errno = MPIR_Info_set_impl(*info_used, "same_size", "true");
- else
- mpi_errno = MPIR_Info_set_impl(*info_used, "same_size", "false");
-
- MPID_assert(mpi_errno == MPI_SUCCESS);
- }
- return mpi_errno;
-}
-
-
-int
-MPID_Win_get_info(MPID_Win *win,
- MPID_Info **info_p)
-{
- int mpi_errno = MPI_SUCCESS;
-
- /* Allocate an empty info object */
- mpi_errno = MPIU_Info_alloc(info_p);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- mpi_errno = MPIDI_Win_get_info(win, info_p);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_lock.c b/src/mpid/pamid/src/onesided/mpid_win_lock.c
deleted file mode 100644
index e9b4d5b..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_lock.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_lock.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-void
-MPIDI_WinLockAck_post(pami_context_t context,
- unsigned peer,
- MPID_Win * win);
-
-
-void
-MPIDI_WinLockAdvance(pami_context_t context,
- MPID_Win * win)
-{
- struct MPIDI_Win_sync_lock* slock = &win->mpid.sync.lock;
- struct MPIDI_Win_queue* q = &slock->local.requested;
-
- if (
- (q->head != NULL ) &&
- ( (slock->local.count == 0) ||
- (
- (slock->local.type == MPI_LOCK_SHARED) &&
- (q->head->type == MPI_LOCK_SHARED)
- )
- )
- )
- {
- struct MPIDI_Win_lock* lock = q->head;
- q->head = lock->next;
- if (q->head == NULL)
- q->tail = NULL;
-
- ++slock->local.count;
- slock->local.type = lock->type;
- if (lock->mtype == MPIDI_REQUEST_LOCK)
- MPIDI_WinLockAck_post(context, lock->rank, win);
- else if (lock->mtype == MPIDI_REQUEST_LOCKALL)
- MPIDI_WinLockAllAck_post(context, lock->rank, win);
- else
- MPID_assert_always(0);
- MPIU_Free(lock);
- MPIDI_WinLockAdvance(context, win);
- }
-}
-
-
-static pami_result_t
-MPIDI_WinLockReq_post(pami_context_t context,
- void * _info)
-{
- MPIDI_WinLock_info* info = (MPIDI_WinLock_info*)_info;
- MPIDI_Win_control_t msg = {
- .type = MPIDI_WIN_MSGTYPE_LOCKREQ,
- .data = {
- .lock = {
- .type = info->lock_type,
- },
- },
- };
-
- MPIDI_WinCtrlSend(context, &msg, info->peer, info->win);
- return PAMI_SUCCESS;
-}
-
-
-void
-MPIDI_WinLockReq_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer)
-{
- MPID_Win * win = info->win;
- struct MPIDI_Win_lock* lock = MPIU_Calloc0(1, struct MPIDI_Win_lock);
- if (info->type == MPIDI_WIN_MSGTYPE_LOCKREQ)
- lock->mtype = MPIDI_REQUEST_LOCK;
- else if (info->type == MPIDI_WIN_MSGTYPE_LOCKALLREQ) {
- lock->mtype = MPIDI_REQUEST_LOCKALL;
- lock->flagAddr = (void *) info->flagAddr;
- }
- lock->rank = info->rank;
- lock->type = info->data.lock.type;
-
- struct MPIDI_Win_queue* q = &win->mpid.sync.lock.local.requested;
- MPID_assert( (q->head != NULL) ^ (q->tail == NULL) );
- if (q->tail == NULL)
- q->head = lock;
- else
- q->tail->next = lock;
- q->tail = lock;
-
- MPIDI_WinLockAdvance(context, win);
-}
-
-
-void
-MPIDI_WinLockAck_post(pami_context_t context,
- unsigned peer,
- MPID_Win * win)
-{
- MPIDI_Win_control_t info = {
- .type = MPIDI_WIN_MSGTYPE_LOCKACK,
- };
- MPIDI_WinCtrlSend(context, &info, peer, win);
-}
-
-
-void
-MPIDI_WinLockAck_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer)
-{
- if (info->type == MPIDI_WIN_MSGTYPE_LOCKACK)
- info->win->mpid.sync.lock.remote.locked = 1;
- else if (info->type == MPIDI_WIN_MSGTYPE_LOCKALLACK)
- info->win->mpid.sync.lock.remote.allLocked += 1;
-
-}
-
-
-static pami_result_t
-MPIDI_WinUnlock_post(pami_context_t context,
- void * _info)
-{
- MPIDI_WinLock_info* info = (MPIDI_WinLock_info*)_info;
- MPIDI_Win_control_t msg = {
- .type = MPIDI_WIN_MSGTYPE_UNLOCK,
- };
- MPIDI_WinCtrlSend(context, &msg, info->peer, info->win);
- info->done = 1;
- return PAMI_SUCCESS;
-}
-
-
-void
-MPIDI_WinUnlock_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer)
-{
- MPID_Win *win = info->win;
- --win->mpid.sync.lock.local.count;
- MPID_assert((int)win->mpid.sync.lock.local.count >= 0);
- MPIDI_WinLockAdvance(context, win);
-}
-
-
-int
-MPID_Win_lock(int lock_type,
- int rank,
- int assert,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- struct MPIDI_Win_sync_lock* slock = &win->mpid.sync.lock;
- static char FCNAME[] = "MPID_Win_lock";
-
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_NONE &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_REFENCE){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
- if (rank == MPI_PROC_NULL) goto fn_exit;
-
- MPIDI_WinLock_info info = {
- .done = 0,
- .peer = rank,
- .win = win,
- .lock_type = lock_type
- };
-
- MPIDI_Context_post(MPIDI_Context[0], &info.work, MPIDI_WinLockReq_post, &info);
- MPID_PROGRESS_WAIT_WHILE(!slock->remote.locked);
-fn_exit:
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_LOCK;
-
- return mpi_errno;
-}
-
-
-int
-MPID_Win_unlock(int rank,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_unlock";
-
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
- if (rank == MPI_PROC_NULL) goto fn_exit;
- struct MPIDI_Win_sync* sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_DO_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
-
- MPIDI_WinLock_info info = {
- .done = 0,
- .peer = rank,
- .win = win,
- };
- MPIDI_Context_post(MPIDI_Context[0], &info.work, MPIDI_WinUnlock_post, &info);
- MPID_PROGRESS_WAIT_WHILE(sync->lock.remote.locked);
-fn_exit:
- if(win->mpid.sync.target_epoch_type == MPID_EPOTYPE_REFENCE)
- {
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_REFENCE;
- }else{
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_NONE;
- }
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_lock_all.c b/src/mpid/pamid/src/onesided/mpid_win_lock_all.c
deleted file mode 100644
index 1ab8657..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_lock_all.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_lock_all.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-
-static pami_result_t
-MPIDI_WinLockAllReq_post(pami_context_t context,
- void * _info)
-{
- MPIDI_WinLock_info* info = (MPIDI_WinLock_info*)_info;
- MPIDI_Win_control_t msg = {
- .type = MPIDI_WIN_MSGTYPE_LOCKALLREQ,
- .flagAddr = info,
- .data = {
- .lock = {
- .type = info->lock_type,
- },
- },
- };
-
- MPIDI_WinCtrlSend(context, &msg, info->peer, info->win);
- return PAMI_SUCCESS;
-}
-
-
-static pami_result_t
-MPIDI_WinUnlockAllReq_post(pami_context_t context,
- void * _info)
-{
- MPIDI_WinLock_info* info = (MPIDI_WinLock_info*)_info;
- MPIDI_Win_control_t msg = {
- .type = MPIDI_WIN_MSGTYPE_UNLOCKALL,
- .flagAddr = info,
- };
- MPIDI_WinCtrlSend(context, &msg, info->peer, info->win);
- return PAMI_SUCCESS;
-}
-
-void
-MPIDI_WinUnlockAll_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer)
-{
- MPID_Win *win = info->win;
- --win->mpid.sync.lock.local.count;
- MPID_assert((int)win->mpid.sync.lock.local.count >= 0);
- MPIDI_WinLockAdvance(context, win);
-}
-
-void
-MPIDI_WinLockAllAck_post(pami_context_t context,
- unsigned peer,
- MPID_Win * win)
-{
- MPIDI_Win_control_t info = {
- .type = MPIDI_WIN_MSGTYPE_LOCKALLACK,
- };
- MPIDI_WinCtrlSend(context, &info, peer, win);
-}
-
-
-int
-MPID_Win_lock_all(int assert,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- int i,size;
- MPIDI_WinLock_info *lockQ;
- char *cp=NULL;
- int nMask,index;
- struct MPIDI_Win_sync_lock* slock = &win->mpid.sync.lock;
- static char FCNAME[] = "MPID_Win_lock_all";
-
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_NONE &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_REFENCE){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
- size = (MPIR_Comm_size(win->comm_ptr));
- win->mpid.max_ctrlsends = MAX_NUM_CTRLSEND;
- nMask= win->mpid.max_ctrlsends - 1;
- if ( (cp=getenv("MP_MAX_NUM_CTRLSEND")) ) {
- win->mpid.max_ctrlsends = atoi(cp);
- }
- nMask=(win->mpid.max_ctrlsends - 1);
- if (!win->mpid.work.msgQ) {
- if (size < (win->mpid.max_ctrlsends)) {
- win->mpid.work.msgQ = (void *) MPIU_Calloc0(size, MPIDI_WinLock_info);
- } else {
- win->mpid.work.msgQ = (void *) MPIU_Calloc0((win->mpid.max_ctrlsends), MPIDI_WinLock_info);
- }
- MPID_assert(win->mpid.work.msgQ != NULL);
- win->mpid.work.count=0;
- }
- lockQ = (MPIDI_WinLock_info *) win->mpid.work.msgQ;
- if (size < win->mpid.max_ctrlsends) {
- for (i = 0; i < size; i++) {
- lockQ[i].done=0;
- lockQ[i].peer=i;
- lockQ[i].win=win;
- lockQ[i].lock_type=MPI_LOCK_SHARED;
- MPIDI_Context_post(MPIDI_Context[0], &lockQ[i].work, MPIDI_WinLockAllReq_post, &lockQ[i]);
- }
- } else {
- for (i = 0; i < size; i++) {
- if (i < win->mpid.max_ctrlsends)
- index=i;
- else {
- index = i & nMask;
- if (!lockQ[index].done) {
- MPID_PROGRESS_WAIT_WHILE(lockQ[index].done == 0);
- }
- }
- lockQ[index].done=0;
- lockQ[index].peer=i;
- lockQ[index].win=win;
- lockQ[index].lock_type=MPI_LOCK_SHARED;
- MPIDI_Context_post(MPIDI_Context[0], &lockQ[index].work, MPIDI_WinLockAllReq_post, &lockQ[index]);
- }
- }
- /* wait for the lock is granted for all tasks in the window */
- MPID_PROGRESS_WAIT_WHILE(size != slock->remote.allLocked);
-
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_LOCK_ALL;
-
- return mpi_errno;
-}
-
-
-int
-MPID_Win_unlock_all(MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- int i,size;
- MPIDI_WinLock_info *lockQ;
- int nMask,index;
- struct MPIDI_Win_sync* sync;
- static char FCNAME[] = "MPID_Win_unlock_all";
-
- if (win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL) {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
- MPID_assert(win->mpid.work.msgQ != NULL);
- lockQ = (MPIDI_WinLock_info *) win->mpid.work.msgQ;
- size = MPIR_Comm_size(win->comm_ptr);
- nMask = (win->mpid.max_ctrlsends - 1);
- if (size < win->mpid.max_ctrlsends) {
- for (i = 0; i < size; i++) {
- lockQ[i].done=0;
- lockQ[i].peer=i;
- lockQ[i].win=win;
- MPIDI_Context_post(MPIDI_Context[0], &lockQ[i].work, MPIDI_WinUnlockAllReq_post, &lockQ[i]);
- }
- } else {
- for (i = 0; i < size; i++) {
- if (i < win->mpid.max_ctrlsends)
- index=i;
- else {
- index = (i & nMask);
- if (!lockQ[index].done) {
- MPID_PROGRESS_WAIT_WHILE(lockQ[index].done == 0);
- }
- }
- lockQ[index].done=0;
- lockQ[index].peer=i;
- lockQ[index].win=win;
- MPIDI_Context_post(MPIDI_Context[0], &lockQ[index].work, MPIDI_WinUnlockAllReq_post, &lockQ[index]);
- }
- }
-
- MPID_PROGRESS_WAIT_WHILE(sync->lock.remote.allLocked);
-
- if(win->mpid.sync.target_epoch_type == MPID_EPOTYPE_REFENCE)
- {
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_REFENCE;
- }else{
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_NONE;
- }
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_pscw.c b/src/mpid/pamid/src/onesided/mpid_win_pscw.c
deleted file mode 100644
index b2cc6a4..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_pscw.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_pscw.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-
-typedef struct
-{
- MPID_Win * win;
-
- volatile unsigned done;
- pami_work_t work;
-} MPIDI_WinPSCW_info;
-
-
-static pami_result_t
-MPIDI_WinPost_post(pami_context_t context,
- void * _info)
-{
- MPIDI_WinPSCW_info * info = (MPIDI_WinPSCW_info*)_info;
- unsigned peer, index, pid,i;
- MPID_Group *group = info->win->mpid.sync.pw.group;
- MPID_assert(group != NULL);
- MPIDI_Win_control_t msg = {
- .type = MPIDI_WIN_MSGTYPE_POST,
- };
-
- for (index=0; index < group->size; ++index) {
- pid = group->lrank_to_lpid[index].lpid;
- for (i=0;i < ((info->win)->comm_ptr->local_size); i++) {
- if ((info->win)->comm_ptr->local_group->lrank_to_lpid[i].lpid == pid) {
- peer = ((info->win)->comm_ptr->local_group->lrank_to_lpid[i].lrank);
- break;
- }
- }
- MPIDI_WinCtrlSend(context, &msg, peer, info->win);
- }
-
- info->done = 1;
- return PAMI_SUCCESS;
-}
-
-
-void
-MPIDI_WinPost_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer)
-{
- ++info->win->mpid.sync.pw.count;
-}
-
-
-static pami_result_t
-MPIDI_WinComplete_post(pami_context_t context,
- void * _info)
-{
- MPIDI_WinPSCW_info * info = (MPIDI_WinPSCW_info*)_info;
- unsigned peer, index,pid,i;
- MPID_Group *group = info->win->mpid.sync.sc.group;
- MPID_assert(group != NULL);
- MPIDI_Win_control_t msg = {
- .type = MPIDI_WIN_MSGTYPE_COMPLETE,
- };
-
- for (index=0; index < group->size; ++index) {
- pid = group->lrank_to_lpid[index].lpid;
- for (i=0;i < ((info->win)->comm_ptr->local_size); i++) {
- if ((info->win)->comm_ptr->local_group->lrank_to_lpid[i].lpid == pid) {
- peer = ((info->win)->comm_ptr->local_group->lrank_to_lpid[i].lrank);
- break;
- }
- }
- MPIDI_WinCtrlSend(context, &msg, peer, info->win);
- }
-
- info->done = 1;
- return PAMI_SUCCESS;
-}
-
-
-void
-MPIDI_WinComplete_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer)
-{
- ++info->win->mpid.sync.sc.count;
-}
-
-
-int
-MPID_Win_start(MPID_Group *group,
- int assert,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_start";
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_NONE &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_REFENCE)
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPIR_Group_add_ref(group);
-
- struct MPIDI_Win_sync* sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_WHILE(group->size != sync->pw.count);
- sync->pw.count = 0;
-
- MPIU_ERR_CHKANDJUMP((win->mpid.sync.sc.group != NULL), mpi_errno, MPI_ERR_GROUP, "**group");
-
- win->mpid.sync.sc.group = group;
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_START;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-
-int
-MPID_Win_complete(MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_complete";
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_START){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- struct MPIDI_Win_sync* sync = &win->mpid.sync;
- MPID_PROGRESS_WAIT_WHILE(sync->total != sync->complete);
- sync->total = 0;
- sync->started = 0;
- sync->complete = 0;
-
- MPIDI_WinPSCW_info info = {
- .done = 0,
- .win = win,
- };
- MPIDI_Context_post(MPIDI_Context[0], &info.work, MPIDI_WinComplete_post, &info);
- MPID_PROGRESS_WAIT_WHILE(!info.done);
-
- if(win->mpid.sync.target_epoch_type == MPID_EPOTYPE_REFENCE)
- {
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_REFENCE;
- }else{
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_NONE;
- }
-
- MPIR_Group_release(sync->sc.group);
- sync->sc.group = NULL;
- return mpi_errno;
-}
-
-
-int
-MPID_Win_post(MPID_Group *group,
- int assert,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_post";
- if(win->mpid.sync.target_epoch_type != MPID_EPOTYPE_NONE &&
- win->mpid.sync.target_epoch_type != MPID_EPOTYPE_REFENCE){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPIR_Group_add_ref(group);
-
- MPIU_ERR_CHKANDJUMP((win->mpid.sync.pw.group != NULL), mpi_errno, MPI_ERR_GROUP, "**group");
-
- win->mpid.sync.pw.group = group;
-
- MPIDI_WinPSCW_info info = {
- .done = 0,
- .win = win,
- };
- MPIDI_Context_post(MPIDI_Context[0], &info.work, MPIDI_WinPost_post, &info);
- MPID_PROGRESS_WAIT_WHILE(!info.done);
-
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_POST;
-
-fn_fail:
- return mpi_errno;
-}
-
-
-int
-MPID_Win_wait(MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_wait";
- struct MPIDI_Win_sync* sync = &win->mpid.sync;
-
- if(win->mpid.sync.target_epoch_type != MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPID_Group *group = sync->pw.group;
- MPID_PROGRESS_WAIT_WHILE(group->size != sync->sc.count);
- sync->sc.count = 0;
- sync->pw.group = NULL;
-
- MPIR_Group_release(group);
-
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_REFENCE;
- }else{
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_NONE;
- }
- return mpi_errno;
-}
-
-
-int
-MPID_Win_test(MPID_Win *win,
- int *flag)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_test";
- struct MPIDI_Win_sync* sync = &win->mpid.sync;
-
- if(win->mpid.sync.target_epoch_type != MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPID_Group *group = sync->pw.group;
- if (group->size == sync->sc.count)
- {
- sync->sc.count = 0;
- sync->pw.group = NULL;
- *flag = 1;
- MPIR_Group_release(group);
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_REFENCE;
- }else{
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_NONE;
- }
- }
- else
- {
- *flag = 0;
- MPID_Progress_poke();
- }
-
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_put.c b/src/mpid/pamid/src/onesided/mpid_win_put.c
deleted file mode 100644
index 625676e..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_put.c
+++ /dev/null
@@ -1,434 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_put.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-#include "mpidi_util.h"
-
-
-static inline int
-MPIDI_Put_use_pami_rput(pami_context_t context, MPIDI_Win_request * req)
-__attribute__((__always_inline__));
-#ifdef RDMA_FAILOVER
-static inline int
-MPIDI_Put_use_pami_put(pami_context_t context, MPIDI_Win_request * req)
-__attribute__((__always_inline__));
-#endif
-
-
-static pami_result_t
-MPIDI_Put(pami_context_t context,
- void * _req)
-{
- MPIDI_Win_request *req = (MPIDI_Win_request*)_req;
- pami_result_t rc;
-
-#ifdef USE_PAMI_RDMA
- rc = MPIDI_Put_use_pami_rput(context, req);
-#else
- if( (req->origin.memregion_used) && (req->win->mpid.info[req->target.rank].memregion_used) )
- {
- rc = MPIDI_Put_use_pami_rput(context, req);
- } else {
- rc = MPIDI_Put_use_pami_put(context, req);
- }
-#endif
- if( rc == PAMI_EAGAIN)
- return rc;
-
-
- return PAMI_SUCCESS;
-}
-
-
-static inline int
-MPIDI_Put_use_pami_rput(pami_context_t context, MPIDI_Win_request * req)
-{
- int use_typed_rdma = 0;
- if (!req->target.dt.contig || !req->origin.dt.contig) {
- use_typed_rdma = 0;
- if (MPIDI_Process.typed_onesided == 1)
- use_typed_rdma = 1;
- }
-
- if (use_typed_rdma) {
- pami_result_t rc;
- pami_rput_typed_t params;
- /* params need to zero out to avoid passing garbage to PAMI */
- params=zero_rput_typed_parms;
-
- params.rma.dest=req->dest;
- params.rma.hints.buffer_registered = PAMI_HINT_ENABLE;
- params.rma.hints.use_rdma = PAMI_HINT_ENABLE;
- params.rma.bytes = req->target.dt.size;
- params.rma.cookie = req;
- params.rma.done_fn = NULL;
- params.rdma.local.mr=&req->origin.memregion;
- params.rdma.remote.mr=&req->win->mpid.info[req->target.rank].memregion;
- params.rdma.remote.offset= req->offset;
- params.rdma.local.offset = req->state.local_offset;
- params.put.rdone_fn= MPIDI_Win_DoneCB;
-
- params.type.local = *(pami_type_t *)(req->origin.dt.pointer->device_datatype);
- params.type.remote = *(pami_type_t *)(req->target.dt.pointer->device_datatype);
-
- rc = PAMI_Rput_typed(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
-
- }
- else {
- pami_result_t rc;
- pami_rput_simple_t params;
- /* params need to zero out to avoid passing garbage to PAMI */
- params=zero_rput_parms;
-
- params.rma.dest=req->dest;
- params.rma.hints.buffer_registered = PAMI_HINT_ENABLE;
- params.rma.hints.use_rdma = PAMI_HINT_ENABLE;
- params.rma.bytes = 0;
- params.rma.cookie = req;
- params.rma.done_fn = NULL;
- params.rdma.local.mr=&req->origin.memregion;
- params.rdma.remote.mr=&req->win->mpid.info[req->target.rank].memregion;
- params.rdma.remote.offset= req->offset;
- params.put.rdone_fn= MPIDI_Win_DoneCB;
-
- struct MPIDI_Win_sync* sync = &req->win->mpid.sync;
- TRACE_ERR("Start index=%u/%d l-addr=%p r-base=%p r-offset=%zu (sync->started=%u sync->complete=%u)\n",
- req->state.index, req->target.dt.num_contig, req->buffer, req->win->mpid.info[req->target.rank].base_addr, req->offset, sync->started, sync->complete);
- while (req->state.index < req->target.dt.num_contig) {
- if (sync->started > sync->complete + MPIDI_Process.rma_pending)
- {
- TRACE_ERR("Bailing out; index=%u/%d sync->started=%u sync->complete=%u\n",
- req->state.index, req->target.dt.num_contig, sync->started, sync->complete);
- return PAMI_EAGAIN;
- }
- ++sync->started;
-
-
- params.rma.bytes = req->target.dt.map[req->state.index].DLOOP_VECTOR_LEN;
- params.rdma.remote.offset = req->offset + (size_t)req->target.dt.map[req->state.index].DLOOP_VECTOR_BUF;
- params.rdma.local.offset = req->state.local_offset;
-#ifdef TRACE_ON
- unsigned* buf = (unsigned*)(req->buffer + params.rdma.local.offset);
-#endif
- TRACE_ERR(" Sub index=%u bytes=%zu l-offset=%zu r-offset=%zu buf=%p *(int*)buf=0x%08x\n",
- req->state.index, params.rma.bytes, params.rdma.local.offset, params.rdma.remote.offset, buf, *buf);
-
- /** sync->total will be updated with every RMA and the complete
- will not change till that RMA has completed. In the meanwhile
- the rest of the RMAs will have memory leaks */
- if (req->target.dt.num_contig - req->state.index == 1) {
- rc = PAMI_Rput(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return PAMI_SUCCESS;
- } else {
- rc = PAMI_Rput(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- req->state.local_offset += params.rma.bytes;
- ++req->state.index;
- }
- }
- }
- return PAMI_SUCCESS;
-}
-
-#ifdef RDMA_FAILOVER
-static inline int
-MPIDI_Put_use_pami_put(pami_context_t context, MPIDI_Win_request * req)
-{
- pami_result_t rc;
- pami_put_simple_t params;
-
- params = zero_put_parms;
-
- params.rma.dest=req->dest;
- params.rma.hints.use_rdma = PAMI_HINT_DEFAULT;
-#ifndef OUT_OF_ORDER_HANDLING
- params.rma.hints.no_long_header= 1,
-#endif
- params.rma.bytes = 0;
- params.rma.cookie = req;
- params.rma.done_fn = NULL;
- params.addr.local=req->buffer;
- params.addr.remote=req->win->mpid.info[req->target.rank].base_addr;
- params.put.rdone_fn= MPIDI_Win_DoneCB;
-
- struct MPIDI_Win_sync* sync = &req->win->mpid.sync;
- TRACE_ERR("Start index=%u/%d l-addr=%p r-base=%p r-offset=%zu (sync->started=%u sync->complete=%u)\n",
- req->state.index, req->target.dt.num_contig, req->buffer, req->win->mpid.info[req->target.rank].base_addr, req->offset, sync->started, sync->complete);
- while (req->state.index < req->target.dt.num_contig) {
- if (sync->started > sync->complete + MPIDI_Process.rma_pending)
- {
- TRACE_ERR("Bailing out; index=%u/%d sync->started=%u sync->complete=%u\n",
- req->state.index, req->target.dt.num_contig, sync->started, sync->complete);
- return PAMI_EAGAIN;
- }
- ++sync->started;
-
-
- params.rma.bytes = req->target.dt.map[req->state.index].DLOOP_VECTOR_LEN;
- params.addr.local = req->buffer+req->state.local_offset;
- params.addr.remote = req->win->mpid.info[req->target.rank].base_addr+ req->offset + (size_t)req->target.dt.map[req->state.index].DLOOP_VECTOR_BUF;
-#ifdef TRACE_ON
- unsigned* buf = (unsigned*)(req->buffer + req->state.local_offset);
-#endif
- TRACE_ERR(" Sub index=%u bytes=%zu l-offset=%zu r-offset=%zu buf=%p *(int*)buf=0x%08x\n",
- req->state.index, params.rma.bytes, params.addr.local, params.addr.remote, buf, *buf);
-
- /** sync->total will be updated with every RMA and the complete
- will not change till that RMA has completed. In the meanwhile
- the rest of the RMAs will have memory leaks */
- if (req->target.dt.num_contig - req->state.index == 1) {
- rc = PAMI_Put(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- return PAMI_SUCCESS;
- } else {
- rc = PAMI_Put(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- req->state.local_offset += params.rma.bytes;
- ++req->state.index;
- }
- }
- return PAMI_SUCCESS;
-}
-#endif
-
-
-/**
- * \brief MPI-PAMI glue for MPI_PUT function
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Put
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Put(const void *origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- int shm_locked=0;
- void * target_addr;
- MPIDI_Win_request *req = MPIU_Calloc0(1, MPIDI_Win_request);
- req->win = win;
- if(win->mpid.request_based != 1)
- req->type = MPIDI_WIN_REQUEST_PUT;
- else {
- req->req_handle = win->mpid.rreq;
- req->type = MPIDI_WIN_REQUEST_RPUT;
- req->req_handle->mpid.win_req = req;
- }
-
- if(win->mpid.sync.origin_epoch_type == win->mpid.sync.target_epoch_type &&
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_REFENCE){
- win->mpid.sync.origin_epoch_type = MPID_EPOTYPE_FENCE;
- win->mpid.sync.target_epoch_type = MPID_EPOTYPE_FENCE;
- }
-
- if(win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_NONE ||
- win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_POST){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- req->offset = target_disp * win->mpid.info[target_rank].disp_unit;
-#ifdef __BGQ__
- /* PAMI limitation as it doesnt permit VA of 0 to be passed into
- * memregion create, so we must pass base_va of heap computed from
- * an SPI call instead. So the target offset must be adjusted */
- if (req->win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC)
- req->offset -= (size_t)req->win->mpid.info[target_rank].base_addr;
-#endif
-
- MPIDI_Win_datatype_basic(origin_count,
- origin_datatype,
- &req->origin.dt);
- MPIDI_Win_datatype_basic(target_count,
- target_datatype,
- &req->target.dt);
- #ifndef MPIDI_NO_ASSERT
- MPID_assert(req->origin.dt.size == req->target.dt.size);
- #else
- MPIU_ERR_CHKANDJUMP((req->origin.dt.size != req->target.dt.size), mpi_errno, MPI_ERR_SIZE, "**rmasize");
- #endif
-
-
-
- if ( (req->origin.dt.size == 0) ||
- (target_rank == MPI_PROC_NULL))
- {
- if(req->req_handle)
- MPID_cc_set(req->req_handle->cc_ptr, 0);
- else
- MPIU_Free(req);
- return MPI_SUCCESS;
- }
-
-
- if ((target_rank == win->comm_ptr->rank) || (win->create_flavor == MPI_WIN_FLAVOR_SHARED))
- {
- size_t offset = req->offset;
- if (target_rank == win->comm_ptr->rank)
- target_addr = win->base + req->offset;
- else
- target_addr = win->mpid.info[target_rank].base_addr + req->offset;
-
- mpi_errno = MPIR_Localcopy(origin_addr,
- origin_count,
- origin_datatype,
- target_addr,
- target_count,
- target_datatype);
-
- /* The instant this completion counter is set to zero another thread
- * may notice the change and begin freeing request resources. The
- * thread executing the code in this function must not touch any
- * portion of the request structure after decrementing the completion
- * counter.
- *
- * See MPID_Request_release_inline()
- */
- if(req->req_handle)
- MPID_cc_set(req->req_handle->cc_ptr, 0);
- else
- MPIU_Free(req);
- return mpi_errno;
- }
- req->target.rank = target_rank;
-
-
- /* Only pack the origin data if the origin is non-contiguous and we are using the simple PAMI_Rput.
- * If we are using the typed PAMI_Rput_typed use the origin address as-is, if we are using the simple
- * PAMI_Rput with contiguous data use the origin address with the lower-bound adjustment.
- */
- if (req->origin.dt.contig || (!req->origin.dt.contig && (MPIDI_Process.typed_onesided == 1)))
- {
- req->buffer_free = 0;
- if ((req->origin.dt.contig && req->target.dt.contig && (MPIDI_Process.typed_onesided == 1)) || (!(MPIDI_Process.typed_onesided == 1)))
- req->buffer = (void *) ((uintptr_t) origin_addr + req->origin.dt.true_lb);
- else
- req->buffer = (void *) ((uintptr_t) origin_addr);
- }
- else
- {
- req->buffer_free = 1;
- req->buffer = MPIU_Malloc(req->origin.dt.size);
- MPID_assert(req->buffer != NULL);
-
- int mpi_errno = 0;
- mpi_errno = MPIR_Localcopy(origin_addr,
- origin_count,
- origin_datatype,
- req->buffer,
- req->origin.dt.size,
- MPI_CHAR);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- }
-
-
- pami_result_t rc;
- pami_task_t task = MPID_VCR_GET_LPID(win->comm_ptr->vcr, target_rank);
- if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_START &&
- !MPIDI_valid_group_rank(task, win->mpid.sync.sc.group))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &req->dest);
- MPID_assert(rc == PAMI_SUCCESS);
-
-#ifdef USE_PAMI_RDMA
- size_t length_out;
- rc = PAMI_Memregion_create(MPIDI_Context[0],
- req->buffer,
- req->origin.dt.size,
- &length_out,
- &req->origin.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- MPID_assert(req->origin.dt.size == length_out);
-#else
- if(!MPIDI_Process.mp_s_use_pami_get)
- {
- size_t length_out;
- rc = PAMI_Memregion_create(MPIDI_Context[0],
- req->buffer,
- req->origin.dt.size,
- &length_out,
- &req->origin.memregion);
- if(rc == PAMI_SUCCESS) {
- MPID_assert(req->origin.dt.size == length_out);
- req->origin.memregion_used = 1;
- }
- }
-#endif
-
-
- if ((!req->target.dt.contig || !req->origin.dt.contig) && (MPIDI_Process.typed_onesided == 1))
- /* If the datatype is non-contiguous and the PAMID typed_onesided optimization
- * is enabled then we will be using the typed interface and will only make 1 call.
- */
- win->mpid.sync.total = 1;
- else {
- MPIDI_Win_datatype_map(&req->target.dt);
- win->mpid.sync.total += req->target.dt.num_contig;
- }
- if ((MPIDI_Process.typed_onesided == 1) && (!req->target.dt.contig || !req->origin.dt.contig)) {
- /* We will use the PAMI_Rput_typed call so we need to make sure any MPI_Type_free before the context
- * executes the put does not free the MPID_Datatype, which would also free the associated PAMI datatype which
- * is still needed for communication -- decrement the ref in the callback to allow the MPID_Datatype
- * to be freed once the PAMI communication has completed.
- */
- MPID_Datatype_add_ref(req->origin.dt.pointer);
- MPID_Datatype_add_ref(req->target.dt.pointer);
- }
- /* The pamid one-sided design requires context post in order to handle the
- * case where the number of pending rma operation exceeds the
- * 'PAMID_RMA_PENDING' threshold. When there are too many pending requests the
- * work function remains on the context post queue (by returning PAMI_EAGAIN)
- * so that the next time the context is advanced the work function will be
- * invoked again.
- *
- * TODO - When context post is not required it would be better to attempt a
- * direct context operation and then fail over to using context post if
- * the rma pending threshold has been reached. This would result in
- * better latency for one-sided operations.
- */
- PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Put, req);
-
-fn_fail:
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_reqops.c b/src/mpid/pamid/src/onesided/mpid_win_reqops.c
deleted file mode 100644
index 6e597c5..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_reqops.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_reqops.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-
-/**
- * \brief MPI-PAMI glue for MPI_PUT function
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Rput
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Rput(const void *origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPID_Win *win,
- MPID_Request **request)
-{
- int mpi_errno = MPI_SUCCESS;
-
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPID_Request *rreq = MPIDI_Request_create1();
- *request = rreq;
- rreq->kind = MPID_WIN_REQUEST;
- win->mpid.rreq = rreq;
- win->mpid.request_based = 1;
-
- /* Enqueue or perform the RMA operation */
- mpi_errno = MPID_Put(origin_addr, origin_count,
- origin_datatype, target_rank,
- target_disp, target_count,
- target_datatype, win);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- return (mpi_errno);
-}
-
-
-/**
- * \brief MPI-PAMI glue for MPI_GET function
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Rget
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Rget(void *origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPID_Win *win,
- MPID_Request **request)
-{
- int mpi_errno = MPI_SUCCESS;
-
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPID_Request *rreq = MPIDI_Request_create1();
- rreq->kind = MPID_WIN_REQUEST;
- *request = rreq;
- win->mpid.rreq = rreq;
- win->mpid.request_based = 1;
-
- mpi_errno = MPID_Get(origin_addr, origin_count,
- origin_datatype, target_rank,
- target_disp, target_count,
- target_datatype, win);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- return(mpi_errno);
-}
-
-/**
- * \brief MPI-PAMI glue for MPI_ACCUMULATE function
- *
- * According to the MPI Specification:
- *
- * Each datatype argument must be a predefined datatype or
- * a derived datatype, where all basic components are of the
- * same predefined datatype. Both datatype arguments must be
- * constructed from the same predefined datatype.
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] op Operand to perform
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Raccumulate
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Raccumulate(const void *origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPI_Op op,
- MPID_Win *win,
- MPID_Request **request)
-{
- int mpi_errno = MPI_SUCCESS;
-
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPID_Request *rreq = MPIDI_Request_create1();
- rreq->kind = MPID_WIN_REQUEST;
- *request = rreq;
- win->mpid.rreq = rreq;
- win->mpid.request_based = 1;
-
- /* Enqueue or perform the RMA operation */
- mpi_errno = MPID_Accumulate(origin_addr, origin_count,
- origin_datatype, target_rank,
- target_disp, target_count,
- target_datatype, op, win);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- return(mpi_errno);
-}
-
-
-/**
- * \brief MPI-PAMI glue for MPI_ACCUMULATE function
- *
- * According to the MPI Specification:
- *
- * Each datatype argument must be a predefined datatype or
- * a derived datatype, where all basic components are of the
- * same predefined datatype. Both datatype arguments must be
- * constructed from the same predefined datatype.
- *
- * \param[in] origin_addr Source buffer
- * \param[in] origin_count Number of datatype elements
- * \param[in] origin_datatype Source datatype
- * \param[in] target_rank Destination rank (target)
- * \param[in] target_disp Displacement factor in target buffer
- * \param[in] target_count Number of target datatype elements
- * \param[in] target_datatype Destination datatype
- * \param[in] op Operand to perform
- * \param[in] win Window
- * \return MPI_SUCCESS
- */
-#undef FUNCNAME
-#define FUNCNAME MPID_Rget_accumulate
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int
-MPID_Rget_accumulate(const void *origin_addr,
- int origin_count,
- MPI_Datatype origin_datatype,
- void *result_addr,
- int result_count,
- MPI_Datatype result_datatype,
- int target_rank,
- MPI_Aint target_disp,
- int target_count,
- MPI_Datatype target_datatype,
- MPI_Op op,
- MPID_Win *win,
- MPID_Request **request)
-{
-
- int mpi_errno = MPI_SUCCESS;
-
- if(win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK &&
- win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL){
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
-
- MPID_Request *rreq = MPIDI_Request_create1();
- rreq->kind = MPID_WIN_REQUEST;
- *request = rreq;
- win->mpid.rreq = rreq;
- win->mpid.request_based = 1;
-
- /* Enqueue or perform the RMA operation */
- mpi_errno = MPID_Get_accumulate(origin_addr, origin_count,
- origin_datatype, result_addr,
- result_count, result_datatype,
- target_rank, target_disp,
- target_count, target_datatype,
- op, win);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- return (mpi_errno);
-}
-
diff --git a/src/mpid/pamid/src/onesided/mpid_win_set_info.c b/src/mpid/pamid/src/onesided/mpid_win_set_info.c
deleted file mode 100644
index 6857668..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_set_info.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_set_info.c
- * \brief sets new values for the hints of the window of the window
- * associated with win.
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_WIN_SET_INFO function
- *
- * \param[in] win Window
- * \param[in] info Info hint
- * \return MPI_SUCCESS
- */
-
-int MPIDI_Win_set_info(MPID_Win *win, MPID_Info *info)
-{
-
- int mpi_errno = MPI_SUCCESS;
- MPID_Info *curr_ptr;
- char *value, *token;
- char *savePtr;
- curr_ptr = info->next;
- uint save_ordering;
-
- while (curr_ptr) {
- if (!strcmp(curr_ptr->key,"no_locks")) {
- if (!strcmp(curr_ptr->value,"true")) {
- win->mpid.info_args.no_locks=1;
- } else
- win->mpid.info_args.no_locks=0;
- } else if (!strcmp(curr_ptr->key,"accumulate_ordering"))
- {
- save_ordering=(uint) win->mpid.info_args.accumulate_ordering;
- win->mpid.info_args.accumulate_ordering=0;
- value = curr_ptr->value;
- token = (char *) strtok_r(value,"," , &savePtr);
- while (token) {
- if (!memcmp(token,"rar",3))
- {
- win->mpid.info_args.accumulate_ordering =
- (win->mpid.info_args.accumulate_ordering | MPIDI_ACCU_ORDER_RAR);
- } else if (!memcmp(token,"raw",3))
- {
- win->mpid.info_args.accumulate_ordering =
- (win->mpid.info_args.accumulate_ordering | MPIDI_ACCU_ORDER_RAW);
- } else if (!memcmp(token,"war",3))
- {
- win->mpid.info_args.accumulate_ordering =
- (win->mpid.info_args.accumulate_ordering | MPIDI_ACCU_ORDER_WAR);
- } else if (!memcmp(token,"waw",3))
- {
- win->mpid.info_args.accumulate_ordering =
- (win->mpid.info_args.accumulate_ordering | MPIDI_ACCU_ORDER_WAW);
- } else
- MPID_assert_always(0);
- token = (char *) strtok_r(NULL,"," , &savePtr);
- }
- if (win->mpid.info_args.accumulate_ordering == 0) {
- win->mpid.info_args.accumulate_ordering=
- (MPIDI_Win_info_accumulate_ordering) save_ordering;
- }
- } else if (!strcmp(curr_ptr->key,"accumulate_ops"))
- {
- /* the default setting is MPIDI_ACCU_SAME_OP_NO_OP */
- if (!strcmp(curr_ptr->value,"same_op"))
- win->mpid.info_args.accumulate_ops = MPIDI_ACCU_SAME_OP;
- }
- curr_ptr = curr_ptr->next;
- }
-
- return mpi_errno;
-}
-
-int
-MPID_Win_set_info(MPID_Win *win, MPID_Info *info)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
-
- mpi_errno = MPIDI_Win_set_info(win, info);
- MPID_assert(mpi_errno == MPI_SUCCESS);
- mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
- return mpi_errno;
-}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_shared_query.c b/src/mpid/pamid/src/onesided/mpid_win_shared_query.c
deleted file mode 100644
index bfcea9f..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_shared_query.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_shared_query.c
- * \brief queries the process-local address for remote memory segments
- * created with MPI_Win_allocate_shared.
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_shared_query function
- *
- * Query the size and base pointer for a patch of a shared memory window
- *
- * \param[in] win shared memory window object
- * \param[in] rank rank in the group of window win or MPI_PROC_NULL
- * \param[out] size size of the window segment (non-negative integer)
- * \param[out] disp_unit local unit size for displacements, in bytes
- * \param[out] base_ptr address for load/store access to window segment
- * \return MPI_SUCCESS, MPI_ERR_OTHER, or error returned from
- */
-
-int
-MPID_Win_shared_query(MPID_Win *win, int rank, MPI_Aint *size,
- int *disp_unit, void *base_ptr)
-{
- int i, mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_shared_query";
- MPIU_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_SHARED), mpi_errno,
- MPI_ERR_RMA_FLAVOR, return mpi_errno, "**rmaflavor");
-
- if (rank == MPI_PROC_NULL) {
- for (i=0; i<win->comm_ptr->local_size; ++i) {
- if (win->mpid.info[i].base_size != 0) {
- *size = win->mpid.info[i].base_size;
- *disp_unit = win->mpid.info[i].disp_unit;
- break;
- }
- }
- *((void **) base_ptr) = win->base; /* return the begin. address of shared segment */
- } else {
- *((void **) base_ptr) = win->mpid.info[rank].base_addr; /* return the begin. address of the rank */
- *size = win->mpid.info[rank].base_size;
- *disp_unit = win->mpid.info[rank].disp_unit;
- }
-
-
- return mpi_errno;
-}
-
diff --git a/src/mpid/pamid/src/onesided/mpid_win_sync.c b/src/mpid/pamid/src/onesided/mpid_win_sync.c
deleted file mode 100644
index 9c1b877..0000000
--- a/src/mpid/pamid/src/onesided/mpid_win_sync.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpid_win_sync.c
- * \brief returns a new info object containing the hints of the window
- * associated with win.
- */
-#include "mpidi_onesided.h"
-
-/**
- * \brief MPI-PAMI glue for MPI_Win_sync function
- *
- * The funcion synchronizes the private and public window copies of win.
- * For the purpose of synchronizing the private and public window,
- * MPI_Win_sync has the effect of ending and reopening an access and
- * exposure epoch on the window. (note that it does not actually end an
- * epoch or complete any pending MPI RMA operations).
- *
- * \param[in] win window object
- * \return MPI_SUCCESS, MPI_ERR_RMA_SYNC
- */
-
-
-int
-MPID_Win_sync(MPID_Win *win)
-{
- int mpi_errno = MPI_SUCCESS;
- static char FCNAME[] = "MPID_Win_flush";
-
- if((win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK) &&
- (win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_LOCK_ALL))
- {
- MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC,
- return mpi_errno, "**rmasync");
- }
- OPA_read_write_barrier();
- return mpi_errno;
-}
-
diff --git a/src/mpid/pamid/src/onesided/mpidi_onesided.h b/src/mpid/pamid/src/onesided/mpidi_onesided.h
deleted file mode 100644
index 23e2cf8..0000000
--- a/src/mpid/pamid/src/onesided/mpidi_onesided.h
+++ /dev/null
@@ -1,389 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpidi_onesided.h
- * \brief ???
- */
-#include <mpidimpl.h>
-#include "opa_primitives.h"
-
-#ifndef __src_onesided_mpidi_onesided_h__
-#define __src_onesided_mpidi_onesided_h__
-
-pami_rget_simple_t zero_rget_parms;
-pami_get_simple_t zero_get_parms;
-pami_rput_simple_t zero_rput_parms;
-pami_put_simple_t zero_put_parms;
-pami_rput_typed_t zero_rput_typed_parms;
-pami_rget_typed_t zero_rget_typed_parms;
-pami_send_t zero_send_parms;
-pami_send_immediate_t zero_send_immediate_parms;
-pami_recv_t zero_recv_parms;
-pami_rmw_t zero_rmw_parms;
-
-#define MPIDI_QUICKSLEEP usleep(1);
-#define MAX_NUM_CTRLSEND 1024 /* no more than 1024 outstanding control sends */
-
-#define MPIDI_SHM_MUTEX_LOCK(win) { \
- int mpi_errno=0; \
- do { \
- pthread_mutex_t *shm_mutex = (pthread_mutex_t *) &win->mpid.shm->ctrl->mutex_lock; \
- int rval = pthread_mutex_lock(shm_mutex); \
- MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_lock", \
- "**pthread_lock %s", strerror(rval)); \
- } while (0); }
-
-
-#define MPIDI_SHM_MUTEX_UNLOCK(win) { \
- int mpi_errno=0; \
- do { \
- pthread_mutex_t *shm_mutex = (pthread_mutex_t *) &win->mpid.shm->ctrl->mutex_lock; \
- int rval = pthread_mutex_unlock(shm_mutex); \
- MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_unlock", \
- "**pthread_unlock %s", strerror(rval)); \
- } while (0); }
-
-
-#define MPIDI_SHM_MUTEX_INIT(win) \
- do { \
- int rval=0; \
- int mpi_errno=0; \
- pthread_mutexattr_t attr; \
- pthread_mutex_t *shm_mutex = (pthread_mutex_t *) &win->mpid.shm->ctrl->mutex_lock; \
- \
- rval = pthread_mutexattr_init(&attr); \
- MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_mutex", \
- "**pthread_mutex %s", strerror(rval)); \
- rval = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); \
- MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_mutex", \
- "**pthread_mutex %s", strerror(rval)); \
- rval = pthread_mutex_init(shm_mutex, &attr); \
- MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_mutex", \
- "**pthread_mutex %s", strerror(rval)); \
- rval = pthread_mutexattr_destroy(&attr); \
- MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_mutex", \
- "**pthread_mutex %s", strerror(rval)); \
- } while (0);
-
-#define MPIDI_SHM_MUTEX_DESTROY(win) { \
- int mpi_errno=0; \
- do { \
- pthread_mutex_t *shm_mutex = (pthread_mutex_t *) &(win)->mpid.shm->ctrl->mutex_lock;\
- int rval = pthread_mutex_destroy(shm_mutex); \
- MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_mutex", \
- "**pthread_mutex %s", strerror(rval)); \
- } while (0); }
-
-#define MPIDI_ACQUIRE_SHARED_LOCK(win) { \
- MPIDI_SHM_MUTEX_LOCK(win); \
- OPA_fetch_and_add_int((OPA_int_t *)&win->mpid.shm->ctrl->active,(int) 1); \
-}
-
-#define MPIDI_RELEASE_SHARED_LOCK(win) { \
- MPIDI_SHM_MUTEX_UNLOCK(win); \
- OPA_fetch_and_add_int((OPA_int_t *)&(win->mpid.shm->ctrl->active),(int) -1); \
-}
-
-
-
-
-/**
- * \brief One-sided Message Types
- */
-typedef enum
- {
- MPIDI_WIN_MSGTYPE_LOCKACK, /**< Lock acknowledge */
- MPIDI_WIN_MSGTYPE_LOCKALLACK, /**< Lock all acknowledge */
- MPIDI_WIN_MSGTYPE_LOCKREQ, /**< Lock window */
- MPIDI_WIN_MSGTYPE_LOCKALLREQ, /**< Lock all window */
- MPIDI_WIN_MSGTYPE_UNLOCK, /**< Unlock window */
- MPIDI_WIN_MSGTYPE_UNLOCKALL, /**< Unlock window */
-
- MPIDI_WIN_MSGTYPE_COMPLETE, /**< End a START epoch */
- MPIDI_WIN_MSGTYPE_POST, /**< Begin POST epoch */
- } MPIDI_Win_msgtype_t;
-
-typedef enum
- {
- MPIDI_WIN_REQUEST_ACCUMULATE,
- MPIDI_WIN_REQUEST_GET,
- MPIDI_WIN_REQUEST_PUT,
- MPIDI_WIN_REQUEST_GET_ACCUMULATE,
- MPIDI_WIN_REQUEST_RACCUMULATE,
- MPIDI_WIN_REQUEST_RGET,
- MPIDI_WIN_REQUEST_RPUT,
- MPIDI_WIN_REQUEST_RGET_ACCUMULATE,
- MPIDI_WIN_REQUEST_COMPARE_AND_SWAP,
- MPIDI_WIN_REQUEST_FETCH_AND_OP,
- } MPIDI_Win_requesttype_t;
-
-typedef enum
- {
- MPIDI_ACCU_OPS_SAME_OP,
- MPIDI_ACCU_OPS_SAME_OP_NO_OP
- } MPIDI_Win_info_arg_vals_accumulate_ops;
-
-
-typedef struct
-{
- MPIDI_Win_msgtype_t type;
- MPID_Win *win;
- int rank; /* MPI rank */
- void *flagAddr;
- union
- {
- struct
- {
- int type;
- } lock;
- } data;
-} MPIDI_Win_control_t;
-
-
-#define MAX_ATOMIC_TYPE_SIZE 32
-typedef struct
-{
- char buf[MAX_ATOMIC_TYPE_SIZE]; //Origin value or ack result value
- char test[MAX_ATOMIC_TYPE_SIZE]; //Test element for CAS
- void * result_addr; //Address on source to store output
- void * remote_addr; //Address of target on destination
- void * request_addr; //Address of the request object
- MPI_Datatype datatype;
- MPI_Op op;
- int atomic_type;
-} MPIDI_AtomicHeader_t;
-
-
-typedef struct MPIDI_WinLock_info
-{
- unsigned peer;
- int lock_type;
- struct MPID_Win * win;
- void *flagAddr;
- volatile unsigned done;
- pami_work_t work;
-} MPIDI_WinLock_info;
-
-
-
-typedef struct
-{
- MPID_Datatype * pointer;
- MPI_Datatype type;
- int count;
- int contig;
- MPI_Aint true_lb;
- MPIDI_msg_sz_t size;
-
- int num_contig;
- DLOOP_VECTOR * map;
- DLOOP_VECTOR __map;
-} MPIDI_Datatype;
-
-
-typedef struct
-{
- void * addr;
- void * result_addr; /* anchor the result buffer address*/
- void * req;
- MPID_Win * win;
- MPI_Datatype type;
- MPI_Op op;
- pami_endpoint_t origin_endpoint; /* needed for returning the result */
- /* for MPI_Get_accumulate */
- size_t len; /* length of the send data */
-} MPIDI_Win_MsgInfo;
-
-typedef struct
-{
- void * addr;
- void * req;
- MPID_Win * win;
- MPI_Datatype type;
- MPI_Op op;
- int count;
- int counter;
- int num_contig;
- int size;
- void * request;
- void * tptr;
- pami_endpoint_t src_endpoint;
-} MPIDI_Win_GetAccMsgInfo;
-
-
-/** \todo make sure that the extra fields are removed */
-typedef struct MPIDI_Win_request
-{
- MPID_Win *win;
- MPIDI_Win_requesttype_t type;
- pami_endpoint_t dest;
- size_t offset;
- pami_work_t post_request;
-
- struct
- {
- unsigned index;
- size_t local_offset;
- } state;
-
- void * accum_headers;
-
- struct
- {
- pami_memregion_t memregion;
-#ifdef RDMA_FAILOVER
- uint32_t memregion_used; /**< memory region registered or not */
-#endif
- void *addr;
- void *result_addr; /** result buffer that holds target buffer data */
- int count;
- MPI_Datatype datatype;
- MPIDI_Datatype dt;
- int completed;
- } origin;
-
- struct
- {
- pami_task_t rank; /**< Comm-local rank */
- MPIDI_Datatype dt;
- } target;
-
- struct
- {
- void *addr;
- int count;
- MPI_Datatype datatype;
- MPIDI_Datatype dt;
- } result;
-
- void *user_buffer;
- void *compare_buffer; /* anchor of compare buffer for compare and swap */
- uint32_t buffer_free;
- void *buffer;
- struct MPIDI_Win_request *next;
- MPI_Op op;
- int result_num_contig;
-
-
- /* for RMA atomic functions */
-
- pami_atomic_t pami_op;
- pami_type_t pami_datatype;
-
- int request_based; /* flag for request based rma */
- MPID_Request *req_handle; /* anchor of MPID_Request struc for request based rma*/
-} MPIDI_Win_request;
-
-MPIDI_Win_request zero_req; /* used for init. request structure to 0 */
-
-void
-MPIDI_Win_datatype_basic(int count,
- MPI_Datatype datatype,
- MPIDI_Datatype * dt);
-void
-MPIDI_Win_datatype_map (MPIDI_Datatype * dt);
-void
-MPIDI_Win_datatype_unmap(MPIDI_Datatype * dt);
-
-void
-MPIDI_WinCtrlSend(pami_context_t context,
- MPIDI_Win_control_t *control,
- int rank,
- MPID_Win *win);
-
-void
-MPIDI_WinLockReq_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer);
-void
-MPIDI_WinLockAck_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer);
-void
-MPIDI_WinUnlock_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer);
-
-void
-MPIDI_WinComplete_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer);
-void
-MPIDI_WinPost_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer);
-
-void
-MPIDI_Win_DoneCB(pami_context_t context,
- void * cookie,
- pami_result_t result);
-void
-MPIDI_WinUnlockDoneCB(pami_context_t context,
- void * cookie,
- pami_result_t result);
-
-void
-MPIDI_WinAccumCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv);
-int
-MPIDI_Win_init( MPI_Aint length,
- int disp_unit,
- MPID_Win **win_ptr,
- MPID_Info *info,
- MPID_Comm *comm_ptr,
- int create_flavor,
- int model);
-int
-MPIDI_Win_allgather(MPI_Aint size,
- MPID_Win **win_ptr);
-
-void
-MPIDI_WinLockAdvance(pami_context_t context,
- MPID_Win * win);
-void
-MPIDI_WinLockAck_post(pami_context_t context,
- unsigned peer,
- MPID_Win *win);
-
-void
-MPIDI_WinLockReq_proc(pami_context_t context,
- const MPIDI_Win_control_t * info,
- unsigned peer);
-
-int
-MPIDI_Datatype_is_pami_rmw_supported(MPI_Datatype datatype,
- pami_type_t *pami_type,
- MPI_Op op,
- pami_atomic_t *pami_op);
-
-int
-MPIDI_valid_group_rank(int lpid,
- MPID_Group *grp);
-void
-MPIDI_WinLockAllAck_post(pami_context_t context,
- unsigned peer,
- MPID_Win * win);
-
-
-#endif
diff --git a/src/mpid/pamid/src/onesided/mpidi_win_control.c b/src/mpid/pamid/src/onesided/mpidi_win_control.c
deleted file mode 100644
index 56016be..0000000
--- a/src/mpid/pamid/src/onesided/mpidi_win_control.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/onesided/mpidi_win_control.c
- * \brief ???
- */
-#include "mpidi_onesided.h"
-
-
-void
-MPIDI_WinCtrlSend(pami_context_t context,
- MPIDI_Win_control_t *control,
- int rank,
- MPID_Win *win)
-{
- pami_task_t taskid;
- MPIDI_WinLock_info *winLock;
- control->win = win->mpid.info[rank].win;
- control->rank = win->comm_ptr->rank;
- taskid=MPID_VCR_GET_LPID(win->comm_ptr->vcr,rank);
-
- pami_endpoint_t dest;
- pami_result_t rc;
- taskid=MPID_VCR_GET_LPID(win->comm_ptr->vcr,rank);
- rc = PAMI_Endpoint_create(MPIDI_Client,taskid, 0, &dest);
- MPID_assert(rc == PAMI_SUCCESS);
-
- if ((control->type == MPIDI_WIN_MSGTYPE_UNLOCK) ||
- (control->type == MPIDI_WIN_MSGTYPE_UNLOCKALL)) {
- pami_send_t params = {
- .send = {
- .dispatch = MPIDI_Protocols_WinCtrl,
- .dest = dest,
- .header = {
- .iov_base = control,
- .iov_len = sizeof(MPIDI_Win_control_t),
- },
- },
- .events = {
- .cookie = win,
- .local_fn = NULL,
- .remote_fn= MPIDI_WinUnlockDoneCB,
- },
- };
- rc = PAMI_Send(context, ¶ms);
- } else {
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_WinCtrl,
- .dest = dest,
- .header = {
- .iov_base = control,
- .iov_len = sizeof(MPIDI_Win_control_t),
- },
- .data = {
- .iov_base = NULL,
- .iov_len = 0,
- },
- };
- rc = PAMI_Send_immediate(context, ¶ms);
- }
- if ((control->type == MPIDI_WIN_MSGTYPE_LOCKALLREQ) || (control->type == MPIDI_WIN_MSGTYPE_UNLOCKALL)) {
- winLock = (MPIDI_WinLock_info *) control->flagAddr;
- winLock->done = 1;
- }
- MPID_assert(rc == PAMI_SUCCESS);
-
-}
-
-void
-MPIDI_WinUnlockDoneCB(pami_context_t context,
- void * cookie,
- pami_result_t result)
-{
- MPID_Win *win = (MPID_Win *)cookie;
- if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_LOCK) {
- win->mpid.sync.lock.remote.locked = 0;
- }
- else if (win->mpid.sync.origin_epoch_type == MPID_EPOTYPE_LOCK_ALL)
- {
- MPID_assert((int)win->mpid.sync.lock.remote.allLocked > 0);
- win->mpid.sync.lock.remote.allLocked -= 1;
- }
- else
- MPID_assert_always(0);
-}
-
-
-void
-MPIDI_WinControlCB(pami_context_t context,
- void * cookie,
- const void * _control,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv == NULL);
- MPID_assert(sndlen == 0);
- MPID_assert(_control != NULL);
- MPID_assert(size == sizeof(MPIDI_Win_control_t));
- const MPIDI_Win_control_t *control = (const MPIDI_Win_control_t *)_control;
- pami_task_t senderrank = PAMIX_Endpoint_query(sender);
-
- switch (control->type)
- {
- case MPIDI_WIN_MSGTYPE_LOCKREQ:
- case MPIDI_WIN_MSGTYPE_LOCKALLREQ:
- MPIDI_WinLockReq_proc(context, control, senderrank);
- break;
- case MPIDI_WIN_MSGTYPE_LOCKACK:
- case MPIDI_WIN_MSGTYPE_LOCKALLACK:
- MPIDI_WinLockAck_proc(context, control, senderrank);
- break;
- case MPIDI_WIN_MSGTYPE_UNLOCK:
- case MPIDI_WIN_MSGTYPE_UNLOCKALL:
- MPIDI_WinUnlock_proc(context, control, senderrank);
- break;
- case MPIDI_WIN_MSGTYPE_COMPLETE:
- MPIDI_WinComplete_proc(context, control, senderrank);
- break;
- case MPIDI_WIN_MSGTYPE_POST:
- MPIDI_WinPost_proc(context, control, senderrank);
- break;
-
- default:
- fprintf(stderr, "Bad win-control type: 0x%08x %d\n",
- control->type,
- control->type);
- MPID_abort();
- }
-
- MPIDI_Progress_signal();
-}
diff --git a/src/mpid/pamid/src/pamix/Makefile.mk b/src/mpid/pamid/src/pamix/Makefile.mk
deleted file mode 100644
index 0ab3a81..0000000
--- a/src/mpid/pamid/src/pamix/Makefile.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/pamix/pamix.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/pamix/pamix.c b/src/mpid/pamid/src/pamix/pamix.c
deleted file mode 100644
index a24b59f..0000000
--- a/src/mpid/pamid/src/pamix/pamix.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pamix/pamix.c
- * \brief This file contains routines to make the PAMI API usable for MPI internals. It is less likely that
- * MPI apps will use these routines.
- */
-
-#include <assert.h>
-#include <limits.h>
-#include "mpidimpl.h"
-#include <pamix.h>
-
-#define PAMIX_assert_always(x) assert(x)
-#if ASSERT_LEVEL==0
-#define PAMIX_assert(x)
-#elif ASSERT_LEVEL>=1
-#define PAMIX_assert(x) assert(x)
-#endif
-
-#ifndef MIN
-#define MIN(a,b) (((a)<(b))?(a):(b))
-#endif
-
-#ifdef __BGQ__
-#define __BG__
-#include <spi/include/kernel/location.h>
-#endif
-
-typedef pami_result_t (*pamix_progress_register_fn) (pami_context_t context,
- pamix_progress_function progress_fn,
- pamix_progress_function suspend_fn,
- pamix_progress_function resume_fn,
- void * cookie);
-typedef pami_result_t (*pamix_progress_enable_fn) (pami_context_t context,
- pamix_progress_t event_type);
-typedef pami_result_t (*pamix_progress_disable_fn) (pami_context_t context,
- pamix_progress_t event_type);
-
-#if defined(__BG__)
-typedef const pamix_torus_info_t* (*pamix_torus_info_fn) ();
-typedef pami_result_t (*pamix_task2torus_fn) (pami_task_t, size_t[]);
-typedef pami_result_t (*pamix_torus2task_fn) (size_t[], pami_task_t *);
-#endif
-
-
-static struct
-{
- pamix_progress_register_fn progress_register;
- pamix_progress_enable_fn progress_enable;
- pamix_progress_disable_fn progress_disable;
-
-#if defined(__BG__)
- pamix_torus_info_fn torus_info;
- pamix_task2torus_fn task2torus;
- pamix_torus2task_fn torus2task;
-#endif
-} PAMIX_Functions = {0};
-
-pamix_extension_info_t PAMIX_Extensions;
-
-
-#define PAMI_EXTENSION_OPEN(client, name, ext) \
-({ \
- pami_result_t rc; \
- rc = PAMI_Extension_open(client, name, ext); \
- PAMIX_assert_always(rc == PAMI_SUCCESS); \
-})
-#define PAMI_EXTENSION_FUNCTION(type, name, ext) \
-({ \
- void* fn; \
- fn = PAMI_Extension_symbol(ext, name); \
- (type)fn; \
-})
-void
-PAMIX_Initialize(pami_client_t client)
-{
- PAMI_EXTENSION_OPEN(client, "EXT_async_progress", &PAMIX_Extensions.progress);
- PAMIX_Functions.progress_register = PAMI_EXTENSION_FUNCTION(pamix_progress_register_fn, "register", PAMIX_Extensions.progress);
- PAMIX_Functions.progress_enable = PAMI_EXTENSION_FUNCTION(pamix_progress_enable_fn, "enable", PAMIX_Extensions.progress);
- PAMIX_Functions.progress_disable = PAMI_EXTENSION_FUNCTION(pamix_progress_disable_fn, "disable", PAMIX_Extensions.progress);
-
-#if defined(__BG__)
- PAMI_EXTENSION_OPEN(client, "EXT_torus_network", &PAMIX_Extensions.torus);
- PAMIX_Functions.torus_info = PAMI_EXTENSION_FUNCTION(pamix_torus_info_fn, "information", PAMIX_Extensions.torus);
- PAMIX_Functions.task2torus = PAMI_EXTENSION_FUNCTION(pamix_task2torus_fn, "task2torus", PAMIX_Extensions.torus);
- PAMIX_Functions.torus2task = PAMI_EXTENSION_FUNCTION(pamix_torus2task_fn, "torus2task", PAMIX_Extensions.torus);
-#endif
-
-#ifdef PAMIX_IS_LOCAL_TASK
- {
- PAMIX_Extensions.is_local_task.base = NULL;
- PAMIX_Extensions.is_local_task.stride = 0;
- PAMIX_Extensions.is_local_task.bitmask = 0;
- PAMIX_Extensions.is_local_task.node_info = NULL;
- PAMIX_Extensions.is_local_task.status = PAMI_Extension_open(client, "EXT_is_local_task",
- &PAMIX_Extensions.is_local_task.extension);
-
- if (PAMIX_Extensions.is_local_task.status == PAMI_SUCCESS)
- {
- PAMIX_Extensions.is_local_task.base = PAMI_EXTENSION_FUNCTION(uint8_t *, "base", PAMIX_Extensions.is_local_task.extension);
- PAMIX_Extensions.is_local_task.stride = PAMI_EXTENSION_FUNCTION(uintptr_t, "stride", PAMIX_Extensions.is_local_task.extension);
- PAMIX_Extensions.is_local_task.bitmask = PAMI_EXTENSION_FUNCTION(uintptr_t, "bitmask", PAMIX_Extensions.is_local_task.extension);
-#if defined(MPID_USE_NODE_IDS)
- PAMIX_Extensions.is_local_task.node_info = PAMI_EXTENSION_FUNCTION(node_info_fn, "get_node_info", PAMIX_Extensions.is_local_task.extension);
- if (PAMIX_Extensions.is_local_task.node_info == NULL)
- {
- /* The "node information" is not available via the "is_local_task"
- * extension to pami - possibly due to a downlevel version of pami.
- * */
- PAMIX_Extensions.is_local_task.node_info = (node_info_fn) PAMIX_is_local_task_get_node_info;
- }
-#endif
- }
-
-#if defined(PAMIX_IS_LOCAL_TASK_STRIDE) && defined(PAMIX_IS_LOCAL_TASK_BITMASK)
- /*
- * If the compile-time stride and bitmask values are defined, then assert
- * that the extension was open successfully and the base pointer is valid to
- * avoid a null dereference in the PAMIX_Task_is_local macro and assert that
- * the compile-time values match the values specified by the extension.
- */
- PAMIX_assert_always(PAMIX_Extensions.is_local_task.status == PAMI_SUCCESS);
- PAMIX_assert_always(PAMIX_Extensions.is_local_task.base != NULL);
- PAMIX_assert_always(PAMIX_IS_LOCAL_TASK_STRIDE == PAMIX_Extensions.is_local_task.stride);
- PAMIX_assert_always(PAMIX_IS_LOCAL_TASK_BITMASK == PAMIX_Extensions.is_local_task.bitmask);
-#endif
- }
-#endif /* PAMIX_IS_LOCAL_TASK */
-}
-
-
-void
-PAMIX_Finalize(pami_client_t client)
-{
- pami_result_t rc;
- rc = PAMI_Extension_close(PAMIX_Extensions.progress);
- PAMIX_assert_always(rc == PAMI_SUCCESS);
-
- if (PAMIX_Extensions.is_local_task.status == PAMI_SUCCESS)
- {
- rc = PAMI_Extension_close(PAMIX_Extensions.is_local_task.extension);
- PAMIX_assert_always(rc == PAMI_SUCCESS);
-
- PAMIX_Extensions.is_local_task.base = NULL;
- PAMIX_Extensions.is_local_task.stride = 0;
- PAMIX_Extensions.is_local_task.bitmask = 0;
- PAMIX_Extensions.is_local_task.status = PAMI_ERROR;
- }
-
-#if defined(__BG__)
- rc = PAMI_Extension_close(PAMIX_Extensions.torus);
- PAMIX_assert_always(rc == PAMI_SUCCESS);
-#endif
-}
-
-
-pami_configuration_t
-PAMIX_Client_query(pami_client_t client,
- pami_attribute_name_t name)
-{
- pami_result_t rc;
- pami_configuration_t query;
- query.name = name;
- rc = PAMI_Client_query(client, &query, 1);
- PAMIX_assert_always(rc == PAMI_SUCCESS);
- return query;
-}
-
-
-static inline pami_configuration_t
-PAMIX_Dispatch_query(pami_context_t context,
- size_t dispatch,
- pami_attribute_name_t name)
-{
- pami_result_t rc;
- pami_configuration_t query;
- query.name = name;
- rc = PAMI_Dispatch_query(context, dispatch, &query, 1);
- PAMIX_assert_always(rc == PAMI_SUCCESS);
- return query;
-}
-
-
-void
-PAMIX_Dispatch_set(pami_context_t context[],
- size_t num_contexts,
- size_t dispatch,
- pami_dispatch_callback_function fn,
- pami_dispatch_hint_t options,
- size_t * immediate_max)
-{
- pami_result_t rc;
- size_t i;
- size_t last_immediate_max = (size_t)-1;
- for (i=0; i<num_contexts; ++i) {
- rc = PAMI_Dispatch_set(context[i],
- dispatch,
- fn,
- (void*)i,
- options);
- PAMIX_assert_always(rc == PAMI_SUCCESS);
-
- size_t size;
- size = PAMIX_Dispatch_query(context[i], dispatch, PAMI_DISPATCH_SEND_IMMEDIATE_MAX).value.intval;
- last_immediate_max = MIN(size, last_immediate_max);
- size = PAMIX_Dispatch_query(context[i], dispatch, PAMI_DISPATCH_RECV_IMMEDIATE_MAX).value.intval;
- last_immediate_max = MIN(size, last_immediate_max);
- }
-
- if (immediate_max != NULL)
- *immediate_max = last_immediate_max;
-}
-
-
-pami_task_t
-PAMIX_Endpoint_query(pami_endpoint_t endpoint)
-{
- pami_task_t rank;
- size_t offset;
-
- pami_result_t rc;
- rc = PAMI_Endpoint_query(endpoint, &rank, &offset);
- PAMIX_assert(rc == PAMI_SUCCESS);
-
- return rank;
-}
-
-
-void
-PAMIX_Progress_register(pami_context_t context,
- pamix_progress_function progress_fn,
- pamix_progress_function suspend_fn,
- pamix_progress_function resume_fn,
- void * cookie)
-{
- PAMIX_assert_always(PAMIX_Functions.progress_register != NULL);
- pami_result_t rc;
- rc = PAMIX_Functions.progress_register(context, progress_fn,suspend_fn, resume_fn, cookie);
- PAMIX_assert_always(rc == PAMI_SUCCESS);
-}
-
-
-void
-PAMIX_Progress_enable(pami_context_t context,
- pamix_progress_t event_type)
-{
- PAMIX_assert(PAMIX_Functions.progress_enable != NULL);
- pami_result_t rc;
- rc = PAMIX_Functions.progress_enable(context, event_type);
- PAMIX_assert(rc == PAMI_SUCCESS);
-}
-
-
-void
-PAMIX_Progress_disable(pami_context_t context,
- pamix_progress_t event_type)
-{
- PAMIX_assert(PAMIX_Functions.progress_disable != NULL);
- pami_result_t rc;
- rc = PAMIX_Functions.progress_disable(context, event_type);
- PAMIX_assert(rc == PAMI_SUCCESS);
-}
-
-
-pami_result_t
-PAMIX_is_local_task_get_node_info(pami_task_t task,
- uint32_t *node_id,
- uint32_t *offset,
- uint32_t *max_nodes)
-{
-#if defined(__BG__)
- size_t coords[5];
- if (PAMI_SUCCESS == PAMIX_Task2torus(task, coords))
- {
- const pamix_torus_info_t * info = PAMIX_Torus_info();
-
- *node_id =
- coords[0] +
- coords[1] * info->size[0] +
- coords[2] * info->size[0] * info->size[1] +
- coords[3] * info->size[0] * info->size[1] * info->size[2] +
- coords[4] * info->size[0] * info->size[1] * info->size[2] * info->size[3];
-
- *max_nodes = info->size[0] * info->size[1] * info->size[2] * info->size[3] * info->size[4];
-
- *offset = 0; /* ???????????????????????????????? */
- }
-#else
- MPID_abort(); /* Other platforms should not need a fallback implementation */
-#endif
-
- return PAMI_SUCCESS;
-}
-
-#if defined(__BG__)
-
-const pamix_torus_info_t *
-PAMIX_Torus_info()
-{
- PAMIX_assert(PAMIX_Functions.torus_info != NULL);
- return PAMIX_Functions.torus_info();
-}
-
-
-int
-PAMIX_Task2torus(pami_task_t task_id,
- size_t coords[])
-{
- PAMIX_assert(PAMIX_Functions.task2torus != NULL);
- pami_result_t rc;
- rc = PAMIX_Functions.task2torus(task_id, coords);
- return rc;
-}
-
-
-#include <stdio.h>
-int
-PAMIX_Torus2task(size_t coords[],
- pami_task_t * task_id)
-{
- PAMIX_assert(PAMIX_Functions.torus2task != NULL);
- pami_result_t rc;
- rc = PAMIX_Functions.torus2task(coords, task_id);
- return rc;
-#if 0
- if(rc != PAMI_SUCCESS)
- {
- fprintf(stderr,"coords in: %zu %zu %zu %zu %zu, rc: %d\n", coords[0], coords[1], coords[2],coords[3],coords[4], rc);
- PAMIX_assert(rc == PAMI_SUCCESS);
- }
- else return rc;
-#endif
-}
-
-#endif
diff --git a/src/mpid/pamid/src/pt2pt/Makefile.mk b/src/mpid/pamid/src/pt2pt/Makefile.mk
deleted file mode 100644
index c8dc0e4..0000000
--- a/src/mpid/pamid/src/pt2pt/Makefile.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-noinst_HEADERS += \
- src/mpid/pamid/src/pt2pt/mpid_send.h \
- src/mpid/pamid/src/pt2pt/mpidi_recv.h \
- src/mpid/pamid/src/pt2pt/mpidi_send.h \
- src/mpid/pamid/src/pt2pt/mpid_irecv.h \
- src/mpid/pamid/src/pt2pt/mpid_isend.h
-
-include $(top_srcdir)/src/mpid/pamid/src/pt2pt/persistent/Makefile.mk
-
-mpi_core_sources += \
- src/mpid/pamid/src/pt2pt/mpid_cancel.c \
- src/mpid/pamid/src/pt2pt/mpid_issend.c \
- src/mpid/pamid/src/pt2pt/mpid_recv.c \
- src/mpid/pamid/src/pt2pt/mpid_ssend.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_short.c \
- src/mpid/pamid/src/pt2pt/mpidi_callback_util.c \
- src/mpid/pamid/src/pt2pt/mpidi_control.c \
- src/mpid/pamid/src/pt2pt/mpidi_done.c \
- src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c \
- src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c \
- src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c
-
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/pt2pt/mpid_cancel.c b/src/mpid/pamid/src/pt2pt/mpid_cancel.c
deleted file mode 100644
index a7c2b8d..0000000
--- a/src/mpid/pamid/src/pt2pt/mpid_cancel.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpid_cancel.c
- * \brief Device interface for canceling an MPI Recv
- */
-#include <mpidimpl.h>
-
-
-int
-MPID_Cancel_recv(MPID_Request * rreq)
-{
- MPID_assert(rreq->kind == MPID_REQUEST_RECV);
- if (MPIDI_Recvq_FDPR(rreq))
- {
- MPIR_STATUS_SET_CANCEL_BIT(rreq->status, TRUE);
- MPIR_STATUS_SET_COUNT(rreq->status, 0);
- MPIDI_Request_complete(rreq);
- }
- /* This is successful, even if the recv isn't cancelled */
- return MPI_SUCCESS;
-}
-
-
-/**
- * \brief Cancel an MPI_Isend()
- *
- * \param[in] req The request element to cancel
- *
- * \return The same as MPIDI_CtrlSend()
- */
-static inline pami_result_t
-MPIDI_CancelReq_post(pami_context_t context, void * _req)
-{
- MPID_Request * req = (MPID_Request*)_req;
- MPID_assert(req != NULL);
-
- /* ------------------------------------------------- */
- /* Check if we already have a cancel request pending */
- /* ------------------------------------------------- */
- if (MPIDI_Request_cancel_pending(req))
- {
- MPIDI_Request_complete(req);
- return PAMI_SUCCESS;
- }
-
- MPIDI_MsgInfo cancel = {
- .MPItag = MPIDI_Request_getMatchTag(req),
- .MPIrank = MPIDI_Request_getMatchRank(req),
- .MPIctxt = MPIDI_Request_getMatchCtxt(req),
- .req = req->handle,
- };
- cancel.control = MPIDI_CONTROL_CANCEL_REQUEST;
-
- pami_endpoint_t dest;
- MPIDI_Context_endpoint(req, &dest);
-
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_Cancel,
- .dest = dest,
- .header = {
- .iov_base= &cancel,
- .iov_len= sizeof(MPIDI_MsgInfo),
- },
- };
-
- TRACE_ERR("Running posted cancel for request=%p local=%u remote=%u\n",
- req, MPIR_Process.comm_world->rank, MPIDI_Request_getPeerRank_pami(req));
- pami_result_t rc;
- rc = PAMI_Send_immediate(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
-
- return PAMI_SUCCESS;
-}
-
-
-int
-MPID_Cancel_send(MPID_Request * sreq)
-{
- MPID_assert(sreq != NULL);
-
- if(!sreq->comm)
- return MPI_SUCCESS;
-
- MPIDI_Request_uncomplete(sreq);
- /* TRACE_ERR("Posting cancel for request=%p cc(curr)=%d ref(curr)=%d\n", sreq, val+1, MPIU_Object_get_ref(sreq)); */
-
- pami_context_t context = MPIDI_Context_local(sreq);
-
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- if (likely(MPIDI_Process.perobj.context_post.active > 0))
- {
- /* This leaks intentionally. At this time, the amount of work
- * required to avoid a leak here just isn't worth it.
- * Hopefully people aren't cancelling sends too much.
- */
- pami_work_t * work = MPIU_Malloc(sizeof(pami_work_t));
- PAMI_Context_post(context, work, MPIDI_CancelReq_post, sreq);
- }
- else
- {
- /* Lock access to the context. For more information see discussion of the
- * simplifying assumption that the "per object" mpich lock mode does not
- * expect a completely single threaded run environment in the file
- * src/mpid/pamid/src/mpid_progress.h
- */
- PAMI_Context_lock(context);
- MPIDI_CancelReq_post(context, sreq);
- PAMI_Context_unlock(context);
- }
-#else /* (MPICH_THREAD_GRANULARITY != MPICH_THREAD_GRANULARITY_PER_OBJECT) */
- /*
- * It is not necessary to lock the context before access in the "global" mpich
- * lock mode because all application threads must first acquire the global
- * mpich lock upon entry into the library, and any active async threads must
- * first acquire the global mpich lock before accessing internal mpich data
- * structures or accessing pami objects. This makes the context lock redundant.
- */
- MPIDI_CancelReq_post(context, sreq);
-#endif
-
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpid_irecv.h b/src/mpid/pamid/src/pt2pt/mpid_irecv.h
deleted file mode 100644
index 1f8d4bc..0000000
--- a/src/mpid/pamid/src/pt2pt/mpid_irecv.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpid_irecv.h
- * \brief ADI level implemenation of MPI_Irecv()
- */
-#ifndef __src_pt2pt_mpid_irecv_h__
-#define __src_pt2pt_mpid_irecv_h__
-
-#include <mpidimpl.h>
-#include "mpidi_recv.h"
-
-#define MPID_Irecv MPID_Irecv_inline
-
-/**
- * \brief ADI level implemenation of MPI_Irecv()
- *
- * \param[in] buf The buffer to receive into
- * \param[in] count Number of expected elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The sending rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- *
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- */
-static inline int
-MPID_Irecv_inline(void * buf,
- MPI_Aint count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- return MPIDI_Recv(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- 0,
- MPI_STATUS_IGNORE,
- request);
-}
-
-#endif
diff --git a/src/mpid/pamid/src/pt2pt/mpid_isend.h b/src/mpid/pamid/src/pt2pt/mpid_isend.h
deleted file mode 100644
index 82046be..0000000
--- a/src/mpid/pamid/src/pt2pt/mpid_isend.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpid_isend.h
- * \brief ???
- */
-
-#ifndef __src_pt2pt_mpid_isend_h__
-#define __src_pt2pt_mpid_isend_h__
-
-
-#define MPID_Isend MPID_Isend_inline
-
-
-static inline unsigned
-MPIDI_Context_hash(pami_task_t rank, unsigned ctxt, unsigned bias, unsigned ncontexts)
-{
-#if (MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT)
- return (( rank + ctxt + bias ) & (ncontexts-1));
-#else
- /* The 'global' mpich lock mode only supports a single context. See
- * discussion in mpich/src/mpid/pamid/src/mpid_init.c for more information.
- */
- return 0;
-#endif
-}
-static inline void
-MPIDI_Context_endpoint(MPID_Request * req, pami_endpoint_t * e)
-{
- pami_task_t remote = MPIDI_Request_getPeerRank_pami(req);
- pami_task_t local = MPIR_Process.comm_world->rank;
- unsigned rctxt = MPIDI_Context_hash(local, req->comm->context_id, MPIDI_Process.avail_contexts>>1, MPIDI_Process.avail_contexts);
-
- pami_result_t rc;
- rc = PAMI_Endpoint_create(MPIDI_Client, remote, rctxt, e);
- MPID_assert(rc == PAMI_SUCCESS);
-}
-static inline pami_context_t
-MPIDI_Context_local(MPID_Request * req)
-{
- pami_task_t remote = MPIDI_Request_getPeerRank_comm(req);
- unsigned lctxt = MPIDI_Context_hash(remote, req->comm->context_id, 0, MPIDI_Process.avail_contexts);
- MPID_assert(lctxt < MPIDI_Process.avail_contexts);
- return MPIDI_Context[lctxt];
-}
-
-
-/**
- * \brief ADI level implemenation of MPI_Isend()
- *
- * \param[in] buf The buffer to send
- * \param[in] count Number of elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The destination rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- *
- * This is a slight variation on mpid_send.c - basically, we *always*
- * want to return a send request even if the request is already
- * complete (as is in the case of sending to a NULL rank).
- */
-static inline int
-MPID_Isend_inline(const void * buf,
- MPI_Aint count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- /* ---------------------------------------------------- */
- /* special case: PROC null handled by handoff function */
- /* ---------------------------------------------------- */
-
- /* --------------------- */
- /* create a send request */
- /* --------------------- */
- MPID_Request * sreq = *request = MPIDI_Request_create2_fast();
-
- unsigned context_id = comm->context_id;
- /* match info */
- MPIDI_Request_setMatch(sreq, tag, comm->rank, context_id+context_offset);
-
- /* data buffer info */
- sreq->mpid.userbuf = (void*)buf;
- sreq->mpid.userbufcount = count;
- sreq->mpid.datatype = datatype;
-
- /* Enable passing in MPI_PROC_NULL, do the translation in the
- handoff function */
- MPIDI_Request_setPeerRank_comm(sreq, rank);
-
- unsigned ncontexts = MPIDI_Process.avail_contexts;
- /* communicator & destination info */
- sreq->comm = comm;
- sreq->kind = MPID_REQUEST_SEND;
- MPIR_Comm_add_ref(comm);
-
- pami_context_t context = MPIDI_Context[MPIDI_Context_hash(rank, context_id, 0, ncontexts)];
- if (context_offset == 0)
- MPIDI_Context_post(context, &sreq->mpid.post_request, MPIDI_Isend_handoff, sreq);
- else
- MPIDI_Context_post(context, &sreq->mpid.post_request, MPIDI_Isend_handoff_internal, sreq);
-
- return MPI_SUCCESS;
-}
-
-
-#endif
diff --git a/src/mpid/pamid/src/pt2pt/mpid_issend.c b/src/mpid/pamid/src/pt2pt/mpid_issend.c
deleted file mode 100644
index 201e450..0000000
--- a/src/mpid/pamid/src/pt2pt/mpid_issend.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpid_issend.c
- * \brief ADI level implemenation of MPI_Issend()
- */
-#include <mpidimpl.h>
-#include "mpidi_send.h"
-
-/**
- * \brief ADI level implemenation of MPI_Issend()
- *
- * \param[in] buf The buffer to send
- * \param[in] count Number of elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The destination rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- *
- * This is a slight variation on mpid_ssend.c - basically, we *always*
- * want to return a send request even if the request is already
- * complete (as is in the case of sending to a NULL rank).
- */
-int MPID_Issend(const void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- return MPIDI_Send(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- 0,
- 1,
- request);
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpid_recv.c b/src/mpid/pamid/src/pt2pt/mpid_recv.c
deleted file mode 100644
index 4dd15b6..0000000
--- a/src/mpid/pamid/src/pt2pt/mpid_recv.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpid_recv.c
- * \brief ADI level implemenation of MPI_Recv()
- */
-#include <mpidimpl.h>
-#include "mpidi_recv.h"
-
-/**
- * \brief ADI level implemenation of MPI_Recv()
- *
- * \param[in] buf The buffer to receive into
- * \param[in] count Number of expected elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The sending rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- * \param[out] status Update the status structure
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- */
-int MPID_Recv(void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPI_Status * status,
- MPID_Request ** request)
-{
- return MPIDI_Recv(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- 0,
- status,
- request);
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpid_send.h b/src/mpid/pamid/src/pt2pt/mpid_send.h
deleted file mode 100644
index ce2f8f0..0000000
--- a/src/mpid/pamid/src/pt2pt/mpid_send.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpid_send.h
- * \brief ADI level implemenation of MPI_Send()
- */
-#ifndef __src_pt2pt_mpid_send_h__
-#define __src_pt2pt_mpid_send_h__
-
-#include <mpidimpl.h>
-#include "mpidi_send.h"
-
-#define MPID_Send MPID_Send_inline
-
-/**
- * \brief ADI level implemenation of MPI_Send()
- *
- * \param[in] buf The buffer to send
- * \param[in] count Number of elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The destination rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- */
-static inline int
-MPID_Send_inline(const void * buf,
- MPI_Aint count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- return MPIDI_Send(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- 1,
- 0,
- request);
-}
-
-
-#endif
diff --git a/src/mpid/pamid/src/pt2pt/mpid_ssend.c b/src/mpid/pamid/src/pt2pt/mpid_ssend.c
deleted file mode 100644
index 84fc8e8..0000000
--- a/src/mpid/pamid/src/pt2pt/mpid_ssend.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpid_ssend.c
- * \brief ADI level implemenation of MPI_Ssend()
- */
-#include <mpidimpl.h>
-#include "mpidi_send.h"
-
-/**
- * \brief ADI level implemenation of MPI_Ssend()
- *
- * \param[in] buf The buffer to send
- * \param[in] count Number of elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The destination rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- */
-int MPID_Ssend(const void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- return MPIDI_Send(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- 1,
- 1,
- request);
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c b/src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
deleted file mode 100644
index 9484e43..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_callback_eager.c
- * \brief The callback for a new eager message
- */
-#include <mpidimpl.h>
-
-
-/**
- * \brief The standard callback for a new message
- *
- * \param[in] context The context on which the message is being received.
- * \param[in] cookie Unused
- * \param[in] _msginfo The header information
- * \param[in] msginfo_size The size of the header information
- * \param[in] sndbuf If the message is short, this is the data
- * \param[in] sndlen The size of the incoming data
- * \param[out] recv If the message is long, this tells the message layer how to handle the data.
- */
-void
-MPIDI_RecvCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- const MPIDI_MsgInfo *msginfo = (const MPIDI_MsgInfo *)_msginfo;
-#if TOKEN_FLOW_CONTROL
- int rettoks=0;
- void *uebuf;
-#endif
- pami_task_t source;
- if (recv == NULL)
- {
- if (msginfo->isSync)
- MPIDI_RecvShortSyncCB(context,
- cookie,
- _msginfo,
- msginfo_size,
- sndbuf,
- sndlen,
- sender,
- recv);
- else
- MPIDI_RecvShortAsyncCB(context,
- cookie,
- _msginfo,
- msginfo_size,
- sndbuf,
- sndlen,
- sender,
- recv);
- return;
- }
-
- MPID_assert(sndbuf == NULL);
- MPID_assert(_msginfo != NULL);
- MPID_assert(msginfo_size == sizeof(MPIDI_MsgInfo));
-
- MPID_Request * rreq = NULL;
- source=PAMIX_Endpoint_query(sender);
-
- /* -------------------- */
- /* Match the request. */
- /* -------------------- */
- unsigned rank = msginfo->MPIrank;
- unsigned tag = msginfo->MPItag;
- unsigned context_id = msginfo->MPIctxt;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- MPIDI_Receive_tokens(msginfo,source);
- #else
- MPID_assert_always(0);
- #endif
- }
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDP(rank, tag, context_id);
-#else
- rreq = MPIDI_Recvq_FDP(rank, source, tag, context_id, msginfo->MPIseqno);
-#endif
-
- /* Match not found */
- if (unlikely(rreq == NULL))
- {
- /* No request was found and hence no sync needed */
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivals);
-#endif
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPID_Request *newreq = MPIDI_Request_create2();
- MPID_assert(newreq != NULL);
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- #else
- MPID_assert_always(0);
- #endif
- }
-
- if (sndlen)
- {
- newreq->mpid.uebuflen = sndlen;
- if (!(TOKEN_FLOW_CONTROL_ON))
- {
- newreq->mpid.uebuf = MPIU_Malloc(sndlen);
- newreq->mpid.uebuf_malloc = mpiuMalloc ;
- }
- else
- {
- #if TOKEN_FLOW_CONTROL
- newreq->mpid.uebuf = MPIDI_mm_alloc(sndlen);
- newreq->mpid.uebuf_malloc = mpidiBufMM;
- #else
- MPID_assert_always(0);
- #endif
- }
- MPID_assert(newreq->mpid.uebuf != NULL);
- }
- if (!TOKEN_FLOW_CONTROL_ON)
- {
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- }
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDP(rank, tag, context_id);
-#else
- rreq = MPIDI_Recvq_FDP(rank, source, tag, context_id, msginfo->MPIseqno);
-#endif
-
- if (unlikely(rreq == NULL))
- {
- MPIDI_Callback_process_unexp(newreq, context, msginfo, sndlen, sender, sndbuf, recv, msginfo->isSync);
- int completed = MPID_Request_is_complete(newreq);
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- MPIDI_Token_cntr[sender].unmatched++;
- #else
- MPID_assert_always(0);
- #endif
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- if (completed) MPID_Request_release(newreq);
- goto fn_exit_eager;
- }
- else
- {
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPID_Request_discard(newreq);
- }
- }
- else
- {
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivalsMatched);
-#endif
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- MPIDI_Update_rettoks(source);
- MPIDI_Must_return_tokens(context,source);
- #else
- MPID_assert_always(0);
- #endif
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
-
- /* -------------------------------------------- */
- /* Figure out target buffer for request data. */
- /* -------------------------------------------- */
-
- /* ---------------------- */
- /* Copy in information. */
- /* ---------------------- */
- rreq->status.MPI_SOURCE = rank;
- rreq->status.MPI_TAG = tag;
- MPIR_STATUS_SET_COUNT(rreq->status, sndlen);
- MPIDI_Request_setCA (rreq, MPIDI_CA_COMPLETE);
- MPIDI_Request_cpyPeerRequestH(rreq, msginfo);
- MPIDI_Request_setSync (rreq, msginfo->isSync);
- MPIDI_Request_setRzv (rreq, 0);
- TRACE_SET_R_VAL(source,(rreq->mpid.PR_idx),len,sndlen);
- /* --------------------------------------- */
- /* We have to fill in the callback info. */
- /* --------------------------------------- */
- recv->local_fn = MPIDI_RecvDoneCB_mutexed;
- recv->cookie = rreq;
-#if ASSERT_LEVEL > 0
- /* This ensures that the value is set, even to something impossible */
- recv->addr = NULL;
-#endif
-
- /* ----------------------------- */
- /* Request was already posted. */
- /* ----------------------------- */
-
- if (unlikely(msginfo->isSync))
- MPIDI_SyncAck_post(context, rreq, source);
-
- /* ----------------------------------------- */
- /* Calculate message length for reception. */
- /* ----------------------------------------- */
- unsigned dt_contig, dt_size;
- MPID_Datatype *dt_ptr;
- MPI_Aint dt_true_lb;
- MPIDI_Datatype_get_info(rreq->mpid.userbufcount,
- rreq->mpid.datatype,
- dt_contig,
- dt_size,
- dt_ptr,
- dt_true_lb);
-
- /* ----------------------------- */
- /* Test for truncated message. */
- /* ----------------------------- */
- if (unlikely(sndlen > dt_size))
- {
- MPIDI_Callback_process_trunc(context, rreq, recv, sndbuf);
- goto fn_exit_eager;
- }
-
- /* --------------------------------------- */
- /* If buffer is contiguous, we are done. */
- /* --------------------------------------- */
- if (likely(dt_contig))
- {
- /*
- * This is to test that the fields don't need to be
- * initialized. Remove after this doesn't fail for a while.
- */
- MPID_assert(rreq->mpid.uebuf == NULL);
- MPID_assert(rreq->mpid.uebuflen == 0);
- /* rreq->mpid.uebuf = NULL; */
- /* rreq->mpid.uebuflen = 0; */
- void* rcvbuf = rreq->mpid.userbuf + dt_true_lb;
-
- recv->addr = rcvbuf;
- }
-
- /* ----------------------------------------------- */
- /* Buffer is non-contiguous. we need to allocate */
- /* a temporary buffer, and unpack later. */
- /* ----------------------------------------------- */
- else
- {
- /* ----------------------------------------------- */
- /* Buffer is non-contiguous. the data is already */
- /* available, so we can just unpack it now. */
- /* ----------------------------------------------- */
- MPIDI_Request_setCA(rreq, MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE);
- rreq->mpid.uebuflen = sndlen;
- if (sndlen)
- {
- if (!TOKEN_FLOW_CONTROL_ON)
- {
- rreq->mpid.uebuf = MPIU_Malloc(sndlen);
- rreq->mpid.uebuf_malloc = mpiuMalloc;
- }
- else
- {
- #if TOKEN_FLOW_CONTROL
- MPIDI_Alloc_lock(&rreq->mpid.uebuf,sndlen);
- rreq->mpid.uebuf_malloc = mpidiBufMM;
- #else
- MPID_assert_always(0);
- #endif
- }
- MPID_assert(rreq->mpid.uebuf != NULL);
- }
- /* -------------------------------------------------- */
- /* Let PAMI know where to put the rest of the data. */
- /* -------------------------------------------------- */
- recv->addr = rreq->mpid.uebuf;
- }
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),fl.f.comp_in_HH,2);
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),bufadd,rreq->mpid.userbuf);
-
- fn_exit_eager:
-#ifdef OUT_OF_ORDER_HANDLING
- if (MPIDI_In_cntr[source].n_OutOfOrderMsgs > 0) {
- MPIDI_Recvq_process_out_of_order_msgs(source, context);
- }
-#endif
-
- /* ---------------------------------------- */
- /* Signal that the recv has been started. */
- /* ---------------------------------------- */
- MPIDI_Progress_signal();
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c b/src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
deleted file mode 100644
index b0922fe..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_callback_rzv.c
- * \brief The callback for a new RZV RTS
- */
-#include <mpidimpl.h>
-
-
-/**
- * \brief The callback for a new RZV RTS
- * \note Because this is a short message, the data is already received
- * \param[in] context The context on which the message is being received.
- * \param[in] sender The origin endpoint
- * \param[in] _msginfo The extended header information
- * \param[in] msginfo_size The size of the extended header information
- * \param[in] is_zero_byte The rendezvous message is zero bytes in length.
- */
-void
-MPIDI_RecvRzvCB_impl(pami_context_t context,
- pami_endpoint_t sender,
- const void * _msginfo,
- size_t msginfo_size,
- const unsigned is_zero_byte)
-{
- MPID_assert(_msginfo != NULL);
- MPID_assert(msginfo_size == sizeof(MPIDI_MsgEnvelope));
- const MPIDI_MsgEnvelope * envelope = (const MPIDI_MsgEnvelope *)_msginfo;
- const MPIDI_MsgInfo * msginfo = (const MPIDI_MsgInfo *)&envelope->msginfo;
-
- MPID_Request * rreq = NULL;
- int found;
- pami_task_t source;
-#if TOKEN_FLOW_CONTROL
- int rettoks=0;
-#endif
-
- /* -------------------- */
- /* Match the request. */
- /* -------------------- */
- unsigned rank = msginfo->MPIrank;
- unsigned tag = msginfo->MPItag;
- unsigned context_id = msginfo->MPIctxt;
-
- MPID_Request *newreq = MPIDI_Request_create2();
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- source = PAMIX_Endpoint_query(sender);
- MPIDI_Receive_tokens(msginfo,source);
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDP_or_AEU(newreq, rank, tag, context_id, &found);
-#else
- rreq = MPIDI_Recvq_FDP_or_AEU(newreq, rank, source, tag, context_id, msginfo->MPIseqno, &found);
-#endif
- TRACE_ERR("RZV CB for req=%p remote-mr=0x%llx bytes=%zu (%sfound)\n",
- rreq,
- *(unsigned long long*)&envelope->envelope.memregion,
- envelope->envelope.length,
- found?"":"not ");
-
- /* ---------------------- */
- /* Copy in information. */
- /* ---------------------- */
- rreq->status.MPI_SOURCE = rank;
- rreq->status.MPI_TAG = tag;
- MPIR_STATUS_SET_COUNT(rreq->status, envelope->length);
- MPIDI_Request_setPeerRank_comm(rreq, rank);
- MPIDI_Request_setPeerRank_pami(rreq, source);
- MPIDI_Request_cpyPeerRequestH (rreq, msginfo);
- MPIDI_Request_setSync (rreq, msginfo->isSync);
- MPIDI_Request_setRzv (rreq, 1);
-
- /* ----------------------------------------------------- */
- /* Save the rendezvous information for when the target */
- /* node calls a receive function and the data is */
- /* retreived from the origin node. */
- /* ----------------------------------------------------- */
- if (is_zero_byte)
- {
- rreq->mpid.envelope.length = 0;
- rreq->mpid.envelope.data = NULL;
- }
- else
- {
-#ifdef USE_PAMI_RDMA
- memcpy(&rreq->mpid.envelope.memregion,
- &envelope->memregion,
- sizeof(pami_memregion_t));
-#else
- rreq->mpid.envelope.memregion_used = envelope->memregion_used;
- if(envelope->memregion_used)
- {
- memcpy(&rreq->mpid.envelope.memregion,
- &envelope->memregion,
- sizeof(pami_memregion_t));
- }
- rreq->mpid.envelope.data = envelope->data;
-#endif
- rreq->mpid.envelope.length = envelope->length;
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),req,rreq);
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),rlen,envelope->length);
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),fl.f.sync,msginfo->isSync);
- TRACE_SET_R_BIT(source,(rreq->mpid.idx),fl.f.rzv);
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- MPIDI_Must_return_tokens(context,source);
- #else
- MPID_assert_always(0);
- #endif
- }
- }
- /* ----------------------------------------- */
- /* figure out target buffer for request data */
- /* ----------------------------------------- */
- if (found)
- {
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivalsMatched);
-#endif
- /* --------------------------- */
- /* if synchronized, post ack. */
- /* --------------------------- */
- if (unlikely(MPIDI_Request_isSync(rreq)))
- MPIDI_SyncAck_post(context, rreq, MPIDI_Request_getPeerRank_pami(rreq));
-
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-
- if (is_zero_byte)
- MPIDI_RecvRzvDoneCB_zerobyte(context, rreq, PAMI_SUCCESS);
- else
- {
- MPIDI_RendezvousTransfer(context, rreq);
- TRACE_SET_R_BIT(source,(rreq->mpid.idx),fl.f.sync_com_in_HH);
- TRACE_SET_R_BIT(source,(rreq->mpid.idx),fl.f.matchedInHH);
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),bufadd,rreq->mpid.userbuf);
- }
- MPID_Request_discard(newreq);
- }
-
- /* ------------------------------------------------------------- */
- /* Request was not posted. */
- /* ------------------------------------------------------------- */
- else
- {
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivals);
-#endif
- /*
- * This is to test that the fields don't need to be
- * initialized. Remove after this doesn't fail for a while.
- */
- MPID_assert(rreq->mpid.uebuf == NULL);
- MPID_assert(rreq->mpid.uebuflen == 0);
- /* rreq->mpid.uebuf = NULL; */
- /* rreq->mpid.uebuflen = 0; */
-#ifdef OUT_OF_ORDER_HANDLING
- if (MPIDI_In_cntr[source].n_OutOfOrderMsgs > 0) {
- MPIDI_Recvq_process_out_of_order_msgs(source, context);
- }
-#endif
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
- /* ---------------------------------------- */
- /* Signal that the recv has been started. */
- /* ---------------------------------------- */
- MPIDI_Progress_signal();
-}
-
-/**
- * \brief The callback for a new RZV RTS
- * \param[in] context The context on which the message is being received.
- * \param[in] cookie Unused
- * \param[in] _msginfo The extended header information
- * \param[in] msginfo_size The size of the extended header information
- * \param[in] sndbuf Unused
- * \param[in] sndlen Unused
- * \param[in] sender The origin endpoint
- * \param[out] recv Unused
- */
-void
-MPIDI_RecvRzvCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv == NULL);
- MPID_assert(sndlen == 0);
- MPIDI_RecvRzvCB_impl (context, sender, _msginfo, msginfo_size, 0);
-}
-
-/**
- * \brief The callback for a new "zero byte" RZV RTS
- * \param[in] context The context on which the message is being received.
- * \param[in] cookie Unused
- * \param[in] _msginfo The extended header information
- * \param[in] msginfo_size The size of the extended header information
- * \param[in] sndbuf Unused
- * \param[in] sndlen Unused
- * \param[in] sender The origin endpoint
- * \param[out] recv Unused
- */
-void
-MPIDI_RecvRzvCB_zerobyte(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv == NULL);
- MPID_assert(sndlen == 0);
- MPIDI_RecvRzvCB_impl (context, sender, _msginfo, msginfo_size, 1);
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_callback_short.c b/src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
deleted file mode 100644
index 063fe1d..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_callback_short.c
- * \brief The callback for a new short message
- */
-#include <mpidimpl.h>
-
-
-/**
- * \brief The standard callback for a new message
- *
- * \param[in] context The context on which the message is being received.
- * \param[in] cookie Unused
- * \param[in] _msginfo The header information
- * \param[in] msginfo_size The size of the header information
- * \param[in] sndbuf If the message is short, this is the data
- * \param[in] sndlen The size of the incoming data
- * \param[out] recv If the message is long, this tells the message layer how to handle the data.
- */
-static inline void
-MPIDI_RecvShortCB(pami_context_t context,
- const void * _msginfo,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- unsigned isSync)
- __attribute__((__always_inline__));
-static inline void
-MPIDI_RecvShortCB(pami_context_t context,
- const void * _msginfo,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- unsigned isSync)
-{
- MPID_assert(_msginfo != NULL);
-
- const MPIDI_MsgInfo *msginfo = (const MPIDI_MsgInfo *)_msginfo;
- MPID_Request * rreq = NULL;
- pami_task_t source;
-#if TOKEN_FLOW_CONTROL
- int rettoks=0;
-#endif
-
- /* -------------------- */
- /* Match the request. */
- /* -------------------- */
- unsigned rank = msginfo->MPIrank;
- unsigned tag = msginfo->MPItag;
- unsigned context_id = msginfo->MPIctxt;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- source = PAMIX_Endpoint_query(sender);
- MPIDI_Receive_tokens(msginfo,source);
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDP(rank, tag, context_id);
-#else
- rreq = MPIDI_Recvq_FDP(rank, source, tag, context_id, msginfo->MPIseqno);
-#endif
-
- /* Match not found */
- if (unlikely(rreq == NULL))
- {
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivals);
-#endif
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPID_Request *newreq = MPIDI_Request_create2();
- MPID_assert(newreq != NULL);
- if (sndlen)
- {
- newreq->mpid.uebuflen = sndlen;
- if (!TOKEN_FLOW_CONTROL_ON)
- {
- newreq->mpid.uebuf = MPIU_Malloc(sndlen);
- newreq->mpid.uebuf_malloc = mpiuMalloc;
- }
- else
- {
- #if TOKEN_FLOW_CONTROL
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- newreq->mpid.uebuf = MPIDI_mm_alloc(sndlen);
- newreq->mpid.uebuf_malloc = mpidiBufMM;
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- #else
- MPID_assert_always(0);
- #endif
- }
- MPID_assert(newreq->mpid.uebuf != NULL);
- }
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDP(rank, tag, context_id);
-#else
- rreq = MPIDI_Recvq_FDP(rank, PAMIX_Endpoint_query(sender), tag, context_id, msginfo->MPIseqno);
-#endif
-
- if (unlikely(rreq == NULL))
- {
- MPIDI_Callback_process_unexp(newreq, context, msginfo, sndlen, sender, sndbuf, NULL, isSync);
- /* request is always complete now */
- if (TOKEN_FLOW_CONTROL_ON && sndlen)
- {
- #if TOKEN_FLOW_CONTROL
- MPIDI_Token_cntr[source].unmatched++;
- #else
- MPID_assert_always(0);
- #endif
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPID_Request_release(newreq);
- goto fn_exit_short;
- }
- else
- {
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPID_Request_discard(newreq);
- }
- }
- else
- {
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivalsMatched);
-#endif
- if (TOKEN_FLOW_CONTROL_ON && sndlen)
- {
- #if TOKEN_FLOW_CONTROL
- MPIDI_Update_rettoks(source);
- MPIDI_Must_return_tokens(context,source);
- #else
- MPID_assert_always(0);
- #endif
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
-
- /* the receive queue processing has been completed and we found match*/
-
- /* ---------------------- */
- /* Copy in information. */
- /* ---------------------- */
- rreq->status.MPI_SOURCE = rank;
- rreq->status.MPI_TAG = tag;
- MPIR_STATUS_SET_COUNT(rreq->status, sndlen);
- MPIDI_Request_setCA (rreq, MPIDI_CA_COMPLETE);
- MPIDI_Request_cpyPeerRequestH(rreq, msginfo);
- MPIDI_Request_setSync (rreq, isSync);
- MPIDI_Request_setRzv (rreq, 0);
-
- /* ----------------------------- */
- /* Request was already posted. */
- /* ----------------------------- */
- if (unlikely(isSync))
- MPIDI_SyncAck_post(context, rreq, PAMIX_Endpoint_query(sender));
-
- if (unlikely(HANDLE_GET_KIND(rreq->mpid.datatype) != HANDLE_KIND_BUILTIN))
- {
- MPIDI_Callback_process_userdefined_dt(context, sndbuf, sndlen, rreq);
- goto fn_exit_short;
- }
-
- size_t dt_size = rreq->mpid.userbufcount * MPID_Datatype_get_basic_size(rreq->mpid.datatype);
-
- /* ----------------------------- */
- /* Test for truncated message. */
- /* ----------------------------- */
- if (unlikely(sndlen > dt_size))
- {
-#if ASSERT_LEVEL > 0
- MPIDI_Callback_process_trunc(context, rreq, NULL, sndbuf);
- goto fn_exit_short;
-#else
- sndlen = dt_size;
-#endif
- }
-
- MPID_assert(rreq->mpid.uebuf == NULL);
- MPID_assert(rreq->mpid.uebuflen == 0);
- void* rcvbuf = rreq->mpid.userbuf;
-
- if (sndlen > 0)
- {
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on && MPIDI_cuda_is_device_buf(rcvbuf))
- {
- cudaError_t cudaerr = CudaMemcpy(rcvbuf, sndbuf, (size_t)sndlen, cudaMemcpyHostToDevice);
- }
- else
-#endif
- memcpy(rcvbuf, sndbuf, sndlen);
- }
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),rlen,sndlen);
- TRACE_SET_R_BIT(source,(rreq->mpid.idx),fl.f.comp_in_HH);
- TRACE_SET_R_VAL(source,(rreq->mpid.idx),bufadd,rreq->mpid.userbuf);
- MPIDI_Request_complete(rreq);
-
- fn_exit_short:
-#ifdef OUT_OF_ORDER_HANDLING
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- if (MPIDI_In_cntr[source].n_OutOfOrderMsgs>0) {
- MPIDI_Recvq_process_out_of_order_msgs(source, context);
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
-#endif
-
- /* ---------------------------------------- */
- /* Signal that the recv has been started. */
- /* ---------------------------------------- */
- MPIDI_Progress_signal();
-}
-
-
-void
-MPIDI_RecvShortAsyncCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv == NULL);
- MPID_assert(msginfo_size == sizeof(MPIDI_MsgInfo));
- MPIDI_RecvShortCB(context,
- _msginfo,
- sndbuf,
- sndlen,
- sender,
- 0);
-}
-
-
-void
-MPIDI_RecvShortSyncCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t msginfo_size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv == NULL);
- MPID_assert(msginfo_size == sizeof(MPIDI_MsgInfo));
- MPIDI_RecvShortCB(context,
- _msginfo,
- sndbuf,
- sndlen,
- sender,
- 1);
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_callback_util.c b/src/mpid/pamid/src/pt2pt/mpidi_callback_util.c
deleted file mode 100644
index 8bc98d1..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_callback_util.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_callback_util.c
- * \brief Utility functions to help uncommon cases in the new-message callbacks
- */
-#include <mpidimpl.h>
-
-
-/* MSGQUEUE lock must be held by caller */
-void
-MPIDI_Callback_process_unexp(MPID_Request *newreq,
- pami_context_t context,
- const MPIDI_MsgInfo * msginfo,
- size_t sndlen,
- pami_endpoint_t sender,
- const void * sndbuf,
- pami_recv_t * recv,
- unsigned isSync)
-{
- MPID_Request *rreq = NULL;
-
- /* ---------------------------------------------------- */
- /* Fallback position: */
- /* + Request was not posted, or */
- /* + Request was long & not contiguous. */
- /* We must allocate enough space to hold the message. */
- /* The temporary buffer will be unpacked later. */
- /* ---------------------------------------------------- */
- unsigned rank = msginfo->MPIrank;
- unsigned tag = msginfo->MPItag;
- unsigned context_id = msginfo->MPIctxt;
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_AEU(newreq, rank, tag, context_id);
-#else
- unsigned msg_seqno = msginfo->MPIseqno;
- rreq = MPIDI_Recvq_AEU(newreq, rank, PAMIX_Endpoint_query(sender), tag, context_id, msg_seqno);
-#endif
- /* ---------------------- */
- /* Copy in information. */
- /* ---------------------- */
- rreq->status.MPI_SOURCE = rank;
- rreq->status.MPI_TAG = tag;
- MPIR_STATUS_SET_COUNT(rreq->status, sndlen);
- MPIDI_Request_setCA (rreq, MPIDI_CA_COMPLETE);
- MPIDI_Request_cpyPeerRequestH(rreq, msginfo);
- MPIDI_Request_setSync (rreq, isSync);
-
- /* Set the rank of the sender if a sync msg. */
-#ifndef OUT_OF_ORDER_HANDLING
- if (isSync)
- {
-#endif
- MPIDI_Request_setPeerRank_comm(rreq, rank);
- MPIDI_Request_setPeerRank_pami(rreq, PAMIX_Endpoint_query(sender));
-#ifndef OUT_OF_ORDER_HANDLING
- }
-#endif
-
- MPID_assert(!sndlen || rreq->mpid.uebuf != NULL);
- TRACE_MEMSET_R(PAMIX_Endpoint_query(sender),msg_seqno,recv_status);
- TRACE_SET_R_VAL(PAMIX_Endpoint_query(sender),(msginfo->MPIseqno & SEQMASK),msgid,msginfo->MPIseqno);
- TRACE_SET_R_VAL(PAMIX_Endpoint_query(sender),(msginfo->MPIseqno & SEQMASK),rtag,tag);
- TRACE_SET_R_VAL(PAMIX_Endpoint_query(sender),(msginfo->MPIseqno & SEQMASK),rctx,msginfo->MPIctxt);
- TRACE_SET_R_VAL(PAMIX_Endpoint_query(sender),(msginfo->MPIseqno & SEQMASK),rlen,sndlen);
- TRACE_SET_R_VAL(PAMIX_Endpoint_query(sender),(msginfo->MPIseqno & SEQMASK),fl.f.sync,isSync);
- TRACE_SET_R_VAL(PAMIX_Endpoint_query(sender),(msginfo->MPIseqno & SEQMASK),rsource,PAMIX_Endpoint_query(sender));
- TRACE_SET_REQ_VAL(rreq->mpid.idx,(msginfo->MPIseqno & SEQMASK));
-
- if (recv != NULL)
- {
- recv->local_fn = MPIDI_RecvDoneCB_mutexed;
- recv->cookie = rreq;
- /* -------------------------------------------------- */
- /* Let PAMI know where to put the rest of the data. */
- /* -------------------------------------------------- */
- recv->addr = rreq->mpid.uebuf;
- }
- else
- {
- /* ------------------------------------------------- */
- /* We have the data; copy it and complete the msg. */
- /* ------------------------------------------------- */
- memcpy(rreq->mpid.uebuf, sndbuf, sndlen);
- MPIDI_RecvDoneCB(context, rreq, PAMI_SUCCESS);
- /* caller must release rreq, after unlocking MSGQUEUE */
- }
-}
-
-
-/* MSGQUEUE lock is not held */
-void
-MPIDI_Callback_process_trunc(pami_context_t context,
- MPID_Request *rreq,
- pami_recv_t *recv,
- const void *sndbuf)
-{
- rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
-
- /* -------------------------------------------------------------- */
- /* The data is already available, so we can just unpack it now. */
- /* -------------------------------------------------------------- */
- if (recv)
- {
- MPIDI_Request_setCA(rreq, MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE);
- rreq->mpid.uebuflen = MPIR_STATUS_GET_COUNT(rreq->status);
- rreq->mpid.uebuf = MPIU_Malloc(MPIR_STATUS_GET_COUNT(rreq->status));
- MPID_assert(rreq->mpid.uebuf != NULL);
- rreq->mpid.uebuf_malloc = mpiuMalloc;
-
- recv->addr = rreq->mpid.uebuf;
- }
- else
- {
- MPIDI_Request_setCA(rreq, MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE);
- rreq->mpid.uebuflen = MPIR_STATUS_GET_COUNT(rreq->status);
- rreq->mpid.uebuf = (void*)sndbuf;
- MPIDI_RecvDoneCB(context, rreq, PAMI_SUCCESS);
- MPID_Request_release(rreq);
- }
-}
-
-
-/* MSGQUEUE lock is not held */
-void
-MPIDI_Callback_process_userdefined_dt(pami_context_t context,
- const void * sndbuf,
- size_t sndlen,
- MPID_Request * rreq)
-{
- unsigned dt_contig, dt_size;
- MPID_Datatype *dt_ptr;
- MPI_Aint dt_true_lb;
- MPIDI_Datatype_get_info(rreq->mpid.userbufcount,
- rreq->mpid.datatype,
- dt_contig,
- dt_size,
- dt_ptr,
- dt_true_lb);
-
- /* ----------------------------- */
- /* Test for truncated message. */
- /* ----------------------------- */
- if (unlikely(sndlen > dt_size))
- {
-#if ASSERT_LEVEL > 0
- MPIDI_Callback_process_trunc(context, rreq, NULL, sndbuf);
- return;
-#else
- sndlen = dt_size;
-#endif
- }
-
- /*
- * This is to test that the fields don't need to be
- * initialized. Remove after this doesn't fail for a while.
- */
- if (likely (dt_contig))
- {
- MPID_assert(rreq->mpid.uebuf == NULL);
- MPID_assert(rreq->mpid.uebuflen == 0);
- void* rcvbuf = rreq->mpid.userbuf + dt_true_lb;;
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on && MPIDI_cuda_is_device_buf(rcvbuf))
- {
- cudaError_t cudaerr = CudaMemcpy(rcvbuf, sndbuf, (size_t)sndlen, cudaMemcpyHostToDevice);
- }
- else
-#endif
- memcpy(rcvbuf, sndbuf, sndlen);
- MPIDI_Request_complete(rreq);
- return;
- }
-
- MPIDI_Request_setCA(rreq, MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE);
- rreq->mpid.uebuflen = sndlen;
- rreq->mpid.uebuf = (void*)sndbuf;
- MPIDI_RecvDoneCB(context, rreq, PAMI_SUCCESS);
- MPID_Request_release(rreq);
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_control.c b/src/mpid/pamid/src/pt2pt/mpidi_control.c
deleted file mode 100644
index 9710ca4..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_control.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_control.c
- * \brief Interface to the control protocols used by MPID pt2pt
- */
-#include <mpidimpl.h>
-
-
-/**
- * \brief Send a high-priority msginfo struct (control data)
- *
- * \param[in] control The pointer to the msginfo structure
- * \param[in] peerrank The node to whom the control message is to be sent
- */
-static inline void
-MPIDI_CtrlSend(pami_context_t context,
- MPIDI_MsgInfo * msginfo,
- pami_task_t peerrank)
-{
- pami_endpoint_t dest;
- PAMI_Endpoint_create(MPIDI_Client, peerrank, 0, &dest);
-
- TRACE_ERR("CtrlSend: type=%d local=%u remote=%u\n", msginfo->control, MPIR_Process.comm_world->rank, peerrank);
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_Control,
- .dest = dest,
- .header = {
- .iov_base = msginfo,
- .iov_len = sizeof(MPIDI_MsgInfo),
- },
- .data = {
- .iov_base = NULL,
- .iov_len = 0,
- },
- };
-
- pami_result_t rc;
- rc = PAMI_Send_immediate(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
-}
-
-
-/**
- * \brief Message layer callback which is invoked on the target node
- * of a flow-control rendezvous operation.
- *
- * This callback is invoked when the data buffer on the origin node
- * has been completely transfered to the target node. The target node
- * must acknowledge the completion of the transfer to the origin node
- * with a control message and then complete the receive by releasing
- * the request object.
- *
- * \param[in,out] rreq MPI receive request object
- */
-void
-MPIDI_RecvRzvDoneCB(pami_context_t context,
- void * cookie,
- pami_result_t result)
-{
- MPID_Request * rreq = (MPID_Request*)cookie;
- MPID_assert(rreq != NULL);
-
- TRACE_ERR("RZV Done for req=%p addr=%p *addr[0]=%#016llx *addr[1]=%#016llx\n",
- rreq,
- rreq->mpid.userbuf,
- *(((unsigned long long*)rreq->mpid.userbuf)+0),
- *(((unsigned long long*)rreq->mpid.userbuf)+1));
-
- /* Is it neccesary to save the original value of the 'type' field ?? */
- unsigned original_value = MPIDI_Request_getControl(rreq);
- MPIDI_Request_setControl(rreq, MPIDI_CONTROL_RENDEZVOUS_ACKNOWLEDGE);
- MPIDI_CtrlSend(context,
- &rreq->mpid.envelope.msginfo,
- MPIDI_Request_getPeerRank_pami(rreq));
- MPIDI_Request_setControl(rreq, original_value);
-
-#ifdef USE_PAMI_RDMA
- pami_result_t rc;
- rc = PAMI_Memregion_destroy(context, &rreq->mpid.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
-#else
- if( (!MPIDI_Process.mp_s_use_pami_get) && (rreq->mpid.memregion_used) )
- {
- pami_result_t rc;
- rc = PAMI_Memregion_destroy(context, &rreq->mpid.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- }
-#endif
-
- MPIDI_RecvDoneCB(context, rreq, PAMI_SUCCESS);
- MPID_Request_release(rreq);
-}
-
-/**
- * \brief Message layer callback which is invoked on the target node
- * of a 'zero-byte' flow-control rendezvous operation.
- *
- * \param[in] context Communication context
- * \param[in] cookie Completion callback cookie - MPI receive request object
- * \param[in] result Status
- */
-void
-MPIDI_RecvRzvDoneCB_zerobyte(pami_context_t context,
- void * cookie,
- pami_result_t result)
-{
- MPID_Request * rreq = (MPID_Request*)cookie;
- MPID_assert(rreq != NULL);
-
- /* Is it neccesary to save the original value of the 'type' field ?? */
- unsigned original_value = MPIDI_Request_getControl(rreq);
- MPIDI_Request_setControl(rreq, MPIDI_CONTROL_RENDEZVOUS_ACKNOWLEDGE);
- MPIDI_CtrlSend(context,
- &rreq->mpid.envelope.msginfo,
- MPIDI_Request_getPeerRank_pami(rreq));
- MPIDI_Request_setControl(rreq, original_value);
-
- MPIDI_RecvDoneCB(context, rreq, PAMI_SUCCESS);
- TRACE_SET_R_BIT(MPIDI_Request_getPeerRank_pami(rreq),(rreq->mpid.idx),fl.f.sync_com_in_HH);
- TRACE_SET_R_BIT(MPIDI_Request_getPeerRank_pami(rreq),(rreq->mpid.idx),fl.f.matchedInHH);
- TRACE_SET_R_VAL(MPIDI_Request_getPeerRank_pami(rreq),(rreq->mpid.idx),bufadd,rreq->mpid.userbuf);
- MPID_Request_release(rreq);
-}
-
-/**
- * \brief Acknowledge an MPI_Ssend()
- *
- * \param[in] req The request element to acknowledge
- *
- * \return The same as MPIDI_CtrlSend()
- */
-void
-MPIDI_SyncAck_post(pami_context_t context,
- MPID_Request * req,
- unsigned peer)
-{
- MPIDI_Request_setControl(req, MPIDI_CONTROL_SSEND_ACKNOWLEDGE);
- MPIDI_MsgInfo * info = &req->mpid.envelope.msginfo;
- MPIDI_CtrlSend(context, info, peer);
-}
-
-
-/**
- * \brief Acknowledge an MPI_Ssend()
- *
- * This is the handoff side, executing in advance().
- * The send is performed, and then the request is
- * completed. The send is "immediate" so the payload
- * has been copied upon return from MPIDI_CtrlSend(),
- * so it is safe to complete the request.
- *
- * \param[in] context The PAMI context
- * \param[in] req The request element to acknowledge
- *
- * \returns The PAMI return code
- */
-pami_result_t
-MPIDI_SyncAck_handoff(pami_context_t context,
- void * inputReq)
-{
- MPID_Request *req = inputReq;
- MPIDI_Request_setControl(req, MPIDI_CONTROL_SSEND_ACKNOWLEDGE);
- MPIDI_MsgInfo * info = &req->mpid.envelope.msginfo;
- unsigned peer = MPIDI_Request_getPeerRank_pami(req);
- MPIDI_CtrlSend(context, info, peer);
- MPIDI_Request_complete(req);
- return PAMI_SUCCESS;
-}
-
-
-/**
- * \brief Process an incoming MPI_Ssend() acknowledgment
- *
- * \param[in] info The contents of the control message as a MPIDI_MsgInfo struct
- * \param[in] peer The rank of the node sending the data
- */
-static inline void
-MPIDI_SyncAck_proc(pami_context_t context,
- const MPIDI_MsgInfo * info,
- unsigned peer)
-{
- MPID_assert(info != NULL);
- MPID_Request *req = MPIDI_Msginfo_getPeerRequest(info);
- MPID_assert(req != NULL);
- MPIDI_Request_complete(req);
-}
-
-
-/**
- * \brief
- *
- * \param[in] context
- * \param[in] req
- */
-static inline void
-MPIDI_RzvAck_proc_req(pami_context_t context,
- MPID_Request * req)
-{
-#ifdef USE_PAMI_RDMA
- pami_result_t rc;
- rc = PAMI_Memregion_destroy(context, &req->mpid.envelope.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
-#else
- if( (!MPIDI_Process.mp_s_use_pami_get) && (req->mpid.envelope.memregion_used) )
- {
- pami_result_t rc;
- rc = PAMI_Memregion_destroy(context, &req->mpid.envelope.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- }
-#endif
- TRACE_SET_S_BIT(req->mpid.partner_id,(req->mpid.idx),fl.f.recvAck);
- MPIDI_SendDoneCB(context, req, PAMI_SUCCESS);
-}
-
-
-/**
- * \brief Process an incoming rendezvous acknowledgment from the
- * target (remote) node and complete the MPI_Send() on the origin
- * (local) node.
- *
- * \param[in] context
- * \param[in] info The contents of the control message as a MPIDI_MsgInfo struct
- * \param[in] peer The rank of the node sending the data
- */
-static inline void
-MPIDI_RzvAck_proc(pami_context_t context,
- const MPIDI_MsgInfo * info,
- pami_task_t peer)
-{
- MPID_assert(info != NULL);
- MPID_Request *req = MPIDI_Msginfo_getPeerRequest(info);
- MPID_assert(req != NULL);
- MPIDI_RzvAck_proc_req(context, req);
-}
-
-
-/**
- * \brief Process an incoming MPI_Send() cancelation
- *
- * \param[in] info The contents of the control message as a MPIDI_MsgInfo struct
- * \param[in] peer The rank of the node sending the data
- */
-static inline void
-MPIDI_CancelReq_proc(pami_context_t context,
- const MPIDI_MsgInfo * info,
- pami_task_t peer)
-{
- MPIDI_CONTROL type;
- MPIDI_MsgInfo ackinfo;
- MPID_Request * sreq;
-
- MPID_assert(info != NULL);
-
- sreq=MPIDI_Recvq_FDUR(MPIDI_Msginfo_getPeerRequestH(info),
- info->MPIrank,
- info->MPItag,
- info->MPIctxt);
- if(sreq)
- {
- MPID_Request_release(sreq);
- type = MPIDI_CONTROL_CANCEL_ACKNOWLEDGE;
- }
- else
- {
- type = MPIDI_CONTROL_CANCEL_NOT_ACKNOWLEDGE;
- }
-
- TRACE_ERR("Cancel search: {rank=%d:tag=%d:ctxt=%d:req=%d} my_request=%p result=%s\n",
- info->MPIrank,
- info->MPItag,
- info->MPIctxt,
- MPIDI_Msginfo_getPeerRequestH(info),
- sreq,
- (type==MPIDI_CONTROL_CANCEL_ACKNOWLEDGE) ? "ACK" : "NAK");
-
- ackinfo.control = type;
- MPIDI_Msginfo_cpyPeerRequestH(&ackinfo, info);
- MPIDI_CtrlSend(context, &ackinfo, peer);
-}
-
-
-/**
- * \brief Process an incoming MPI_Send() cancelation result
- *
- * \param[in] info The contents of the control message as a MPIDI_MsgInfo struct
- * \param[in] peer The rank of the node sending the data
- */
-static inline void
-MPIDI_CancelAck_proc(pami_context_t context,
- const MPIDI_MsgInfo * info,
- pami_task_t peer)
-{
- MPID_assert(info != NULL);
- MPID_Request *req = MPIDI_Msginfo_getPeerRequest(info);
- MPID_assert(req != NULL);
-
- TRACE_ERR("Cancel result: my_request=%p result=%s\n",
- req,
- (info->control==MPIDI_CONTROL_CANCEL_ACKNOWLEDGE) ? "ACK" : "NAK");
-
- if(info->control == MPIDI_CONTROL_CANCEL_NOT_ACKNOWLEDGE)
- {
- req->mpid.cancel_pending = FALSE;
- }
- else
- {
- MPID_assert(info->control == MPIDI_CONTROL_CANCEL_ACKNOWLEDGE);
- MPID_assert(req->mpid.cancel_pending == TRUE);
-
- MPIR_STATUS_SET_CANCEL_BIT(req->status, TRUE);
-
- /*
- * Rendezvous-Sends wait until a rzv ack is received to complete
- * the send. Since this request was canceled, no rzv ack will be
- * sent from the target node; fake the response here.
- */
- if (MPIDI_Request_isRzv(req))
- {
- TRACE_ERR("RZV\n");
- MPIDI_RzvAck_proc_req(context, req);
- }
- /*
- * A canceled Sync-Send hasn't been ACKed (and now will never be
- * acked). We call complete now to simulate an ACKed message.
- * This is the entirety of the sync-ack processing, so it hasn't
- * been made into a new function.
- */
- if (MPIDI_Request_isSync(req))
- {
- TRACE_ERR("Sync\n");
- MPIDI_Request_complete(req);
- }
-
- /*
- * Finally, this request has been faux-Sync-ACKed and
- * faux-RZV-ACKed. We just do a normal completion. The user
- * can call MPI_Wait()/MPI_Test() to finish it off (unless the
- * message hasn't finished sending, in which case the done
- * callback will finish it off).
- */
- }
-
- TRACE_ERR("Completing request\n");
- MPIDI_Request_complete(req);
-}
-
-
-/**
- * \brief This is the general PT2PT control message call-back
- */
-void
-MPIDI_ControlCB(pami_context_t context,
- void * cookie,
- const void * _msginfo,
- size_t size,
- const void * sndbuf,
- size_t sndlen,
- pami_endpoint_t sender,
- pami_recv_t * recv)
-{
- MPID_assert(recv == NULL);
- MPID_assert(sndlen == 0);
- MPID_assert(_msginfo != NULL);
- MPID_assert(size == sizeof(MPIDI_MsgInfo));
- const MPIDI_MsgInfo *msginfo = (const MPIDI_MsgInfo *)_msginfo;
- pami_task_t senderrank = PAMIX_Endpoint_query(sender);
-
- TRACE_ERR("CtrlRecv: type=%d local=%u remote=%u\n", msginfo->control, MPIR_Process.comm_world->rank, senderrank);
- switch (msginfo->control)
- {
- case MPIDI_CONTROL_SSEND_ACKNOWLEDGE:
- MPIDI_SyncAck_proc(context, msginfo, senderrank);
- break;
- case MPIDI_CONTROL_CANCEL_REQUEST:
- MPIDI_CancelReq_proc(context, msginfo, senderrank);
- break;
- case MPIDI_CONTROL_CANCEL_ACKNOWLEDGE:
- case MPIDI_CONTROL_CANCEL_NOT_ACKNOWLEDGE:
- MPIDI_CancelAck_proc(context, msginfo, senderrank);
- break;
- case MPIDI_CONTROL_RENDEZVOUS_ACKNOWLEDGE:
- MPIDI_RzvAck_proc(context, msginfo, senderrank);
- break;
-#if TOKEN_FLOW_CONTROL
- case MPIDI_CONTROL_RETURN_TOKENS:
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- MPIDI_Token_cntr[sender].tokens += msginfo->alltokens;
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- break;
-#endif
- default:
- fprintf(stderr, "Bad msginfo type: 0x%08x %d\n",
- msginfo->control,
- msginfo->control);
- MPID_abort();
- }
- MPIDI_Progress_signal();
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_done.c b/src/mpid/pamid/src/pt2pt/mpidi_done.c
deleted file mode 100644
index 7636448..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_done.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_done.c
- * \brief "Done" call-backs provided to the message layer for signaling completion
- */
-#include <mpidimpl.h>
-
-
-/**
- * \brief Message layer callback which is invoked on the origin node
- * when the send of the message is done
- *
- * \param[in,out] sreq MPI receive request object
- */
-void
-MPIDI_SendDoneCB(pami_context_t context,
- void * clientdata,
- pami_result_t result)
-{
- TRACE_SET_S_BIT((((MPID_Request *) clientdata)->mpid.partner_id),(((MPID_Request *) clientdata)->mpid.idx),fl.f.sendComp);
- MPIDI_SendDoneCB_inline(context,
- clientdata,
- result);
-}
-
-
-static inline void
-MPIDI_RecvDoneCB_copy(MPID_Request * rreq)
-{
- int smpi_errno;
- MPID_assert(rreq->mpid.uebuf != NULL);
- MPIDI_msg_sz_t _count=0;
- MPIDI_Buffer_copy(rreq->mpid.uebuf, /* source buffer */
- rreq->mpid.uebuflen,
- MPI_CHAR,
- &smpi_errno,
- rreq->mpid.userbuf, /* dest buffer */
- rreq->mpid.userbufcount, /* dest count */
- rreq->mpid.datatype, /* dest type */
- &_count,
- &rreq->status.MPI_ERROR);
- MPIR_STATUS_SET_COUNT(rreq->status, _count);
-}
-
-
-/**
- * \brief Message layer callback which is invoked on the target node
- * when the incoming message is complete.
- *
- * The MSGQUEUE lock may or may not be held.
- *
- * \param[in,out] rreq MPI receive request object
- */
-void
-MPIDI_RecvDoneCB(pami_context_t context,
- void * clientdata,
- pami_result_t result)
-{
- MPID_Request * rreq = (MPID_Request*)clientdata;
- MPID_assert(rreq != NULL);
- switch (MPIDI_Request_getCA(rreq))
- {
- case MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE:
- {
- MPIDI_RecvDoneCB_copy(rreq);
- /* free the unexpected data buffer later */
- break;
- }
- case MPIDI_CA_COMPLETE:
- {
- break;
- }
- default:
- {
- MPID_Abort(NULL, MPI_ERR_OTHER, -1, "Internal: unknown CA");
- break;
- }
- }
-#ifdef OUT_OF_ORDER_HANDLING
- MPID_Request * oo_peer = rreq->mpid.oo_peer;
- if (oo_peer) {
- MPIR_STATUS_SET_COUNT(oo_peer->status, MPIR_STATUS_GET_COUNT(rreq->status));
- MPIDI_Request_complete(oo_peer);
- }
-#endif
- MPIDI_Request_complete_norelease(rreq);
- /* caller must release rreq, after unlocking MSGQUEUE (if held) */
-#ifdef OUT_OF_ORDER_HANDLING
- pami_task_t source;
- source = MPIDI_Request_getPeerRank_pami(rreq);
- if (MPIDI_In_cntr[source].n_OutOfOrderMsgs > 0) {
- MPIDI_Recvq_process_out_of_order_msgs(source, context);
- }
-#endif
-}
-
-
-/**
- * \brief Thread-safe message layer callback which is invoked on the
- * target node when the incoming message is complete.
- *
- * \param[in,out] rreq MPI receive request object
- */
-void
-MPIDI_RecvDoneCB_mutexed(pami_context_t context,
- void * clientdata,
- pami_result_t result)
-{
- MPID_Request * rreq = (MPID_Request*)clientdata;
- MPIU_THREAD_CS_ENTER(MSGQUEUE, 0);
-
- MPIDI_RecvDoneCB(context, clientdata, result);
-
- MPIU_THREAD_CS_EXIT(MSGQUEUE, 0);
- MPID_Request_release(rreq);
-}
-
-
-#ifdef OUT_OF_ORDER_HANDLING
-/**
- * \brief Checks if any of the messages in the out of order list is ready
- * to be processed, if so, process it
- */
-void MPIDI_Recvq_process_out_of_order_msgs(pami_task_t src, pami_context_t context)
-{
- /*******************************************************/
- /* If the next message to be processed in the */
- /* a recv is posted, then process the message. */
- /*******************************************************/
- MPIDI_In_cntr_t *in_cntr;
- MPID_Request *ooreq, *rreq, *prev_rreq;
- pami_get_simple_t xferP;
- MPIDI_msg_sz_t _count=0;
- int matched;
- void * it;
-
- in_cntr = &MPIDI_In_cntr[src];
- prev_rreq = NULL;
- ooreq = in_cntr->OutOfOrderList;
- while((in_cntr->n_OutOfOrderMsgs !=0) && ((MPIDI_Request_getMatchSeq(ooreq) == (in_cntr->nMsgs+1)) || (MPIDI_Request_getMatchSeq(ooreq) == in_cntr->nMsgs)))
- {
- matched=0;
- matched=MPIDI_Search_recv_posting_queue(MPIDI_Request_getMatchRank(ooreq),MPIDI_Request_getMatchTag(ooreq),MPIDI_Request_getMatchCtxt(ooreq),&rreq, &it);
-
- if (matched) {
- /* process a completed message i.e. data is in EA */
- if (TOKEN_FLOW_CONTROL_ON) {
- #if TOKEN_FLOW_CONTROL
- if ((ooreq->mpid.uebuflen) && (!(ooreq->mpid.envelope.msginfo.isRzv))) {
- MPIDI_Token_cntr[src].unmatched--;
- MPIDI_Update_rettoks(src);
- }
- MPIDI_Must_return_tokens(context,src);
- #else
- MPID_assert_always(0);
- #endif
- }
- if (MPIDI_Request_getMatchSeq(ooreq) == (in_cntr->nMsgs+ 1))
- in_cntr->nMsgs++;
-
- if (ooreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- MPIDI_Recvq_remove_req_from_ool(ooreq,in_cntr);
- }
-
- /* ----------------------------------------- */
- /* Calculate message length for reception. */
- /* ----------------------------------------- */
- unsigned dt_contig, dt_size;
- MPID_Datatype *dt_ptr;
- MPI_Aint dt_true_lb;
- MPIDI_Datatype_get_info(rreq->mpid.userbufcount,
- rreq->mpid.datatype,
- dt_contig,
- dt_size,
- dt_ptr,
- dt_true_lb);
- if (unlikely(ooreq->mpid.uebuflen > dt_size))
- {
- MPIR_STATUS_SET_COUNT(rreq->status, dt_size);
- rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
- }
-
- TRACE_SET_REQ_VAL(rreq->mpid.idx,ooreq->mpid.idx);
- TRACE_SET_R_BIT(src,(rreq->mpid.idx),fl.f.matchedInOOL);
- TRACE_SET_R_VAL(src,(rreq->mpid.idx),rlen,dt_size);
- ooreq->comm = rreq->comm;
- MPIR_Comm_add_ref(ooreq->comm);
- ooreq->mpid.userbuf = rreq->mpid.userbuf;
- ooreq->mpid.userbufcount = rreq->mpid.userbufcount;
- ooreq->mpid.datatype = rreq->mpid.datatype;
- if (HANDLE_GET_KIND(ooreq->mpid.datatype) != HANDLE_KIND_BUILTIN)
- {
- MPID_Datatype_get_ptr(ooreq->mpid.datatype, ooreq->mpid.datatype_ptr);
- MPID_Datatype_add_ref(ooreq->mpid.datatype_ptr);
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- MPIDI_Recvq_remove_uexp_noit(MPIDI_Request_getMatchRank(ooreq),MPIDI_Request_getMatchTag(ooreq),MPIDI_Request_getMatchCtxt(ooreq), MPIDI_Request_getMatchSeq(ooreq));
- else
-#endif
- MPIDI_Recvq_remove(MPIDI_Recvq.unexpected, ooreq, ooreq->mpid.prev);
- if (!MPID_cc_is_complete(&ooreq->cc)) {
- ooreq->mpid.oo_peer = rreq;
- MPIDI_RecvMsg_Unexp(ooreq, rreq->mpid.userbuf, rreq->mpid.userbufcount, rreq->mpid.datatype);
- } else {
- MPIDI_RecvMsg_Unexp(ooreq, rreq->mpid.userbuf, rreq->mpid.userbufcount, rreq->mpid.datatype);
- MPIR_STATUS_SET_COUNT(rreq->status, MPIR_STATUS_GET_COUNT(ooreq->status));
- rreq->status.MPI_SOURCE = ooreq->status.MPI_SOURCE;
- rreq->status.MPI_TAG = ooreq->status.MPI_TAG;
- rreq->mpid.envelope.msginfo.MPIseqno = ooreq->mpid.envelope.msginfo.MPIseqno;
- MPIDI_Request_complete(rreq);
- }
- MPID_Request_release(ooreq);
-
- } else {
- if (MPIDI_Request_getMatchSeq(ooreq) == (in_cntr->nMsgs+ 1))
- in_cntr->nMsgs++;
- if (ooreq->mpid.nextR != NULL) { /* recv is in the out of order list */
- MPIDI_Recvq_remove_req_from_ool(ooreq,in_cntr);
- }
- }
- if (in_cntr->n_OutOfOrderMsgs > 0)
- ooreq = in_cntr->OutOfOrderList;
- } /* while */
-}
-
-
-/**
- * \brief search the posted recv queue and if found eliminate the
- * element from the queue and return in *request; else return NULL
- */
-int MPIDI_Search_recv_posting_queue(int src, int tag, int context_id,
- MPID_Request **request, void** it )
-{
- MPID_Request * rreq;
- MPID_Request * prev_rreq = NULL;
-
- *request = NULL;
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- if(MPIDI_Process.queue_binary_search_support_on)
- {
- MPIDI_Recvq_find_in_post(src, tag, context_id, &rreq, it);
- if (rreq != NULL)
- {
- /* The communicator test is not yet correct */
- MPIDI_Recvq_remove_post(src, tag, context_id, *it);
- *request = rreq;
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivalsMatched);
-#endif
- return 1;
- }
- else
- {
- MPIDI_Recvq_find_in_post(src, MPI_ANY_TAG, context_id, &rreq, it);
- if (rreq == NULL)
- {
- MPIDI_Recvq_find_in_post(MPI_ANY_SOURCE, tag, context_id, &rreq, it);
- if (rreq == NULL)
- MPIDI_Recvq_find_in_post(MPI_ANY_SOURCE, MPI_ANY_TAG, context_id, &rreq, it);
- }
- if (rreq != NULL)
- {
- /* The communicator test is not yet correct */
- MPIDI_Recvq_remove_post(MPIDI_Request_getMatchRank(rreq), MPIDI_Request_getMatchTag(rreq), context_id, *it);
- *request = rreq;
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivalsMatched);
-#endif
- return 1;
- }
- }
- }
- else
- {
-#endif
- rreq = MPIDI_Recvq.posted_head;
- while (rreq != NULL)
- {
- /* The communicator test is not yet correct */
- if ((MPIDI_Request_getMatchRank(rreq)==src || MPIDI_Request_getMatchRank(rreq)==MPI_ANY_SOURCE) &&
- (MPIDI_Request_getMatchCtxt(rreq)==context_id) &&
- (MPIDI_Request_getMatchTag(rreq) == tag || MPIDI_Request_getMatchTag(rreq) == MPI_ANY_TAG)
- ) {
- MPIDI_Recvq_remove(MPIDI_Recvq.posted, rreq, prev_rreq);
- *request = rreq;
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->earlyArrivalsMatched);
-#endif
- return 1;
- }
- prev_rreq = rreq;
- rreq = rreq->mpid.next;
- }
-#ifdef QUEUE_BINARY_SEARCH_SUPPORT
- }
-#endif
- return 0;
-}
-#endif
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_recv.h b/src/mpid/pamid/src/pt2pt/mpidi_recv.h
deleted file mode 100644
index 211fbc3..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_recv.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_recv.h
- * \brief ADI level implemenation of MPI_Irecv()
- */
-
-#ifndef __src_pt2pt_mpidi_recv_h__
-#define __src_pt2pt_mpidi_recv_h__
-
-#include <mpidimpl.h>
-#include "../mpid_recvq.h"
-#include "mpid_datatype.h"
-/*#ifdef MPIDI_STATISTICS
- #include "../../include/mpidi_datatypes.h"
-#endif*/
-
-
-#if TOKEN_FLOW_CONTROL
-extern MPIDI_Out_cntr_t *MPIDI_Out_cntr;
-extern int MPIDI_tfctrl_hwmark;
-extern void *MPIDI_mm_alloc(size_t);
-extern void MPIDI_mm_free(void *, size_t);
-extern int tfctrl_enabled;
-extern char *EagerLimit;
-#define MPIDI_Return_tokens MPIDI_Return_tokens_inline
-#define MPIDI_Receive_tokens MPIDI_Receive_tokens_inline
-#define MPIDI_Update_rettoks MPIDI_Update_rettoks_inline
-#define MPIDI_Alloc_lock MPIDI_Alloc_lock_inline
-#define MPIDI_Must_return_tokens MPIDI_Must_return_tokens_inline
-
-static inline void *
-MPIDI_Return_tokens_inline(pami_context_t context, int dest, int tokens)
-{
- MPIDI_MsgInfo tokenInfo;
- if (tokens) {
- memset(&tokenInfo,0, sizeof(MPIDI_MsgInfo));
- tokenInfo.control=MPIDI_CONTROL_RETURN_TOKENS;
- tokenInfo.alltokens=tokens;
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_Control,
- .dest = dest,
- .header = {
- .iov_base = &tokenInfo,
- .iov_len = sizeof(MPIDI_MsgInfo),
- },
- .data = {
- .iov_base = NULL,
- .iov_len = 0,
- },
- };
- pami_result_t rc;
- rc = PAMI_Send_immediate(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- }
-}
-
-
-static inline void *
-MPIDI_Must_return_tokens_inline(pami_context_t context,int dest)
-{
- int rettoks=0;
-
- if (MPIDI_Token_cntr[dest].rettoks
- && (MPIDI_Token_cntr[dest].rettoks + MPIDI_Token_cntr[dest].unmatched
- >= MPIDI_tfctrl_hwmark))
- {
- rettoks=MPIDI_Token_cntr[dest].rettoks;
- MPIDI_Token_cntr[dest].rettoks=0;
- MPIDI_Return_tokens_inline(context,dest,rettoks);
-
- }
-}
-
-static inline void *
-MPIDI_Receive_tokens_inline(const MPIDI_MsgInfo *m, int dest)
- {
- if ((m)->tokens)
- {
- MPIDI_Token_cntr[dest].tokens += (m)->tokens;
- }
- }
-
-static inline void *
-MPIDI_Update_rettoks_inline(int source)
- {
- MPIDI_Token_cntr[source].rettoks++;
- }
-
-static inline void *
-MPIDI_Alloc_lock_inline(void **buf,size_t size)
- {
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- (*buf) = (void *) MPIDI_mm_alloc(size);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
-
-#else
-#define MPIDI_Return_tokens(x,y,z)
-#define MPIDI_Receive_tokens(x,y)
-#define MPIDI_Update_rettoks(x)
-#define MPIDI_Must_return_tokens(x,y) (0)
-#define MPIDI_Alloc_lock(x,y)
-#endif
-
-/**
- * \brief ADI level implemenation of MPI_(I)Recv()
- *
- * \param[in] buf The buffer to receive into
- * \param[in] count Number of expected elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The sending rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- * \param[out] status Update the status structure
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- */
-static inline int
-MPIDI_Recv(void * buf,
- MPI_Aint count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- unsigned is_blocking,
- MPI_Status * status,
- MPID_Request ** request)
-{
- MPID_Request * rreq;
- int found;
- int mpi_errno = MPI_SUCCESS;
-
- /* ---------------------------------------- */
- /* NULL rank means empty request */
- /* ---------------------------------------- */
- if (unlikely(rank == MPI_PROC_NULL))
- {
- MPIDI_RecvMsg_procnull(comm, is_blocking, status, request);
- return MPI_SUCCESS;
- }
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->recvs);
-#endif
- MPIR_Comm_add_ref(comm);
-
- /* ---------------------------------------- */
- /* find our request in the unexpected queue */
- /* or allocate one in the posted queue */
- /* ---------------------------------------- */
- MPID_Request *newreq = MPIDI_Request_create2();
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
-#ifndef OUT_OF_ORDER_HANDLING
- rreq = MPIDI_Recvq_FDU_or_AEP(newreq, rank,
- tag,
- comm->recvcontext_id + context_offset,
- &found);
-#else
- int pami_source;
- if(rank != MPI_ANY_SOURCE) {
- pami_source = MPID_VCR_GET_LPID(comm->vcr, rank);
- } else {
- pami_source = MPI_ANY_SOURCE;
- }
- if ((pami_source != MPI_ANY_SOURCE) && (MPIDI_In_cntr[pami_source].n_OutOfOrderMsgs>0)) {
- /* returns unlock */
- MPIDI_Recvq_process_out_of_order_msgs(pami_source, MPIDI_Context[0]);
- }
- rreq = MPIDI_Recvq_FDU_or_AEP(newreq, rank,
- pami_source,
- tag,
- comm->recvcontext_id + context_offset,
- &found);
-#endif
- MPIDI_SET_PR_REC(rreq,buf,count,datatype,pami_source,rank,tag,comm,is_blocking);
-
- /* ----------------------------------------------------------------- */
- /* populate request with our data */
- /* We can do this because this is not a multithreaded implementation */
- /* ----------------------------------------------------------------- */
-
- rreq->comm = comm;
- rreq->mpid.userbuf = buf;
- rreq->mpid.userbufcount = count;
- rreq->mpid.datatype = datatype;
- /* We don't need this because MPIDI_CA_COMPLETE is the initialized default */
- /* MPIDI_Request_setCA(rreq, MPIDI_CA_COMPLETE); */
-
- if (unlikely(found))
- {
- TRACE_SET_R_VALX(pami_source,rreq,len,rreq->mpid.uebuflen);
- MPIDI_RecvMsg_Unexp(rreq, buf, count, datatype);
- mpi_errno = rreq->status.MPI_ERROR;
- if (TOKEN_FLOW_CONTROL_ON) {
- #if TOKEN_FLOW_CONTROL
- if ((rreq->mpid.uebuflen) && (!(rreq->mpid.envelope.msginfo.isRzv))) {
- MPIDI_Token_cntr[(rreq->mpid.peer_pami)].unmatched--;
- MPIDI_Update_rettoks(rreq->mpid.peer_pami);
- }
- MPIDI_Must_return_tokens(MPIDI_Context[0],(rreq->mpid.peer_pami));
- #else
- MPID_assert_always(0);
- #endif
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPID_Request_discard(newreq);
-#ifdef OUT_OF_ORDER_HANDLING
- if ((MPIDI_In_cntr[rreq->mpid.peer_pami].n_OutOfOrderMsgs>0))
- MPIDI_Recvq_process_out_of_order_msgs(rreq->mpid.peer_pami, MPIDI_Context[0]);
-#endif
- }
- else
- {
- /* ----------------------------------------------------------- */
- /* request not found in unexpected queue, allocated and posted */
- /* ----------------------------------------------------------- */
- if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
- {
- MPID_Datatype_get_ptr(datatype, rreq->mpid.datatype_ptr);
- MPID_Datatype_add_ref(rreq->mpid.datatype_ptr);
- }
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- }
-
- /* mutex has been dropped... */
- *request = rreq;
- if (status != MPI_STATUS_IGNORE)
- *status = rreq->status;
-#ifdef MPIDI_STATISTICS
- if (!(MPID_cc_is_complete(&rreq->cc)))
- {
- MPID_NSTAT(mpid_statp->recvWaitsComplete);
- }
-#endif
-
- return mpi_errno;
-}
-
-#endif
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c b/src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c
deleted file mode 100644
index 7bdbfba..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_recvmsg.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_recvmsg.c
- * \brief ADI level implemenation of common recv code.
- */
-#include <mpidimpl.h>
-#include <mpidi_macros.h>
-
-
-void
-MPIDI_RecvMsg_Unexp(MPID_Request * rreq,
- void * buf,
- MPI_Aint count,
- MPI_Datatype datatype)
-{
- /* ------------------------------------------------------------ */
- /* message was found in unexpected queue */
- /* ------------------------------------------------------------ */
- /* We must acknowledge synchronous send requests */
- /* The recvnew callback will acknowledge the posted messages */
- /* Recv functions will ack the messages that are unexpected */
- /* ------------------------------------------------------------ */
- TRACE_SET_R_BIT((rreq->mpid.partner_id),(rreq->mpid.idx),fl.f.matchedInUQ);
-
- if (MPIDI_Request_isRzv(rreq))
- {
- const unsigned is_sync = MPIDI_Request_isSync(rreq);
- const unsigned is_zero = (rreq->mpid.envelope.length==0);
-
- /* -------------------------------------------------------- */
- /* Received an expected flow-control rendezvous RTS. */
- /* This is very similar to the found/incomplete case */
- /* -------------------------------------------------------- */
- if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
- {
- MPID_Datatype_get_ptr(datatype, rreq->mpid.datatype_ptr);
- MPID_Datatype_add_ref(rreq->mpid.datatype_ptr);
- }
-
- if (likely((is_sync+is_zero) == 0))
- MPIDI_Context_post(MPIDI_Context_local(rreq), &rreq->mpid.post_request, MPIDI_RendezvousTransfer, rreq);
- else if (is_sync != 0)
- MPIDI_Context_post(MPIDI_Context_local(rreq), &rreq->mpid.post_request, MPIDI_RendezvousTransfer_SyncAck, rreq);
- else
- MPIDI_Context_post(MPIDI_Context_local(rreq), &rreq->mpid.post_request, MPIDI_RendezvousTransfer_zerobyte, rreq);
- }
- else
- {
- if (MPID_cc_is_complete(&rreq->cc))
- {
- if (unlikely(MPIDI_Request_isSync(rreq)))
- {
- /* Post this to the context for asynchronous progresss. We cannot do
- * the send-immediate inline here because we may not have the
- * context locked (its is being asynchrously advanced).
- * Must "uncomplete" the message (increment the ref and completion counts) so we
- * hold onto this request object until this send has completed. When MPIDI_SyncAck_handoff
- * finishes sending the ack, it will complete the request, decrementing the ref and
- * completion counts.
- */
- MPIDI_Request_uncomplete(rreq);
- MPIDI_Send_post(MPIDI_SyncAck_handoff, rreq);
- }
- /* -------------------------------- */
- /* request is complete */
- /* -------------------------------- */
- if (rreq->mpid.uebuf != NULL)
- {
- if (likely(MPIR_STATUS_GET_CANCEL_BIT(rreq->status) == FALSE))
- {
- MPIDI_msg_sz_t _count=0;
- MPIDI_Buffer_copy(rreq->mpid.uebuf,
- rreq->mpid.uebuflen,
- MPI_CHAR,
- &rreq->status.MPI_ERROR,
- buf,
- count,
- datatype,
- &_count,
- &rreq->status.MPI_ERROR);
- MPIR_STATUS_SET_COUNT(rreq->status, _count);
- }
- }
- else
- {
- MPID_assert(rreq->mpid.uebuflen == 0);
- MPIR_STATUS_SET_COUNT(rreq->status, 0);
- }
- }
- else
- {
- /* -------------------------------- */
- /* request is incomplete */
- /* -------------------------------- */
- if (unlikely(MPIDI_Request_isSync(rreq)))
- {
- /* Post this to the context for asynchronous progresss. We cannot do
- * the send-immediate inline here because we may not have the
- * context locked (its is being asynchrously advanced).
- * Must "uncomplete" the message (increment the ref and completion counts) so we
- * hold onto this request object until this send has completed. When MPIDI_SyncAck_handoff
- * finishes sending the ack, it will complete the request, decrementing the ref and
- * completion counts.
- */
- MPIDI_Request_uncomplete(rreq);
- MPIDI_Send_post(MPIDI_SyncAck_handoff, rreq);
- }
- if (MPIR_STATUS_GET_CANCEL_BIT(rreq->status) == FALSE)
- {
- MPIDI_Request_setCA(rreq, MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE);
- }
- if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
- {
- MPID_Datatype_get_ptr(datatype, rreq->mpid.datatype_ptr);
- MPID_Datatype_add_ref(rreq->mpid.datatype_ptr);
- }
- }
- }
-}
-
-
-
-void
-MPIDI_RecvMsg_procnull(MPID_Comm * comm,
- unsigned is_blocking,
- MPI_Status * status,
- MPID_Request ** request)
-{
- if (is_blocking)
- {
- MPIR_Status_set_procnull(status);
- *request = NULL;
- }
- else
- {
- MPID_Request * rreq;
- rreq = MPIDI_Request_create2();
- MPIR_Status_set_procnull(&rreq->status);
- rreq->kind = MPID_REQUEST_RECV;
- rreq->comm = comm;
- MPIR_Comm_add_ref(comm);
- MPIDI_Request_complete(rreq);
- *request = rreq;
- }
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c b/src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c
deleted file mode 100644
index d7f0a0c..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_rendezvous.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_rendezvous.c
- * \brief Provide for a flow-control rendezvous-based send
- */
-#include <mpidimpl.h>
-
-inline void
-MPIDI_RendezvousTransfer_use_pami_rget(pami_context_t context,
- pami_endpoint_t dest,
- MPID_Request *rreq)
-__attribute__((__always_inline__));
-#ifdef RDMA_FAILOVER
-inline void
-MPIDI_RendezvousTransfer_use_pami_get(pami_context_t context,
- pami_endpoint_t dest,
- void *rcvbuf,
- MPID_Request *rreq)
-__attribute__((__always_inline__));
-#endif
-
-
-pami_result_t
-MPIDI_RendezvousTransfer(pami_context_t context,
- void * _rreq)
-{
- MPID_Request * rreq = (MPID_Request*) _rreq;
-
- void *rcvbuf;
- size_t rcvlen;
-
- /* -------------------------------------- */
- /* calculate message length for reception */
- /* calculate receive message "count" */
- /* -------------------------------------- */
- unsigned dt_contig;
- size_t dt_size;
- MPID_Datatype *dt_ptr;
- MPI_Aint dt_true_lb;
- MPIDI_Datatype_get_info(rreq->mpid.userbufcount,
- rreq->mpid.datatype,
- dt_contig,
- dt_size,
- dt_ptr,
- dt_true_lb);
-
- /* -------------------------------------- */
- /* test for truncated message. */
- /* -------------------------------------- */
- if (rreq->mpid.envelope.length > dt_size)
- {
- rcvlen = dt_size;
- rreq->status.MPI_ERROR = MPI_ERR_TRUNCATE;
- MPIR_STATUS_SET_COUNT(rreq->status, rcvlen);
- }
- else
- {
- rcvlen = rreq->mpid.envelope.length;
- }
-
- /* -------------------------------------- */
- /* if buffer is contiguous ... */
- /* -------------------------------------- */
- if (dt_contig)
- {
- MPIDI_Request_setCA(rreq, MPIDI_CA_COMPLETE);
- rreq->mpid.uebuf = NULL;
- rreq->mpid.uebuflen = 0;
- rcvbuf = rreq->mpid.userbuf + dt_true_lb;
- }
-
- /* --------------------------------------------- */
- /* buffer is non-contiguous. we need to allocate */
- /* a temporary buffer, and unpack later. */
- /* --------------------------------------------- */
- else
- {
- MPIDI_Request_setCA(rreq, MPIDI_CA_UNPACK_UEBUF_AND_COMPLETE);
- rcvbuf = MPIU_Malloc(rcvlen);
- MPID_assert(rcvbuf != NULL);
- rreq->mpid.uebuf = rcvbuf;
- rreq->mpid.uebuflen = rcvlen;
- rreq->mpid.uebuf_malloc = mpiuMalloc;
- }
-
- /* ---------------------------------------------------------------- */
- /* Get the data from the origin node. */
- /* ---------------------------------------------------------------- */
-
- pami_result_t rc;
- pami_endpoint_t dest;
- MPIDI_Context_endpoint(rreq, &dest);
-
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on && MPIDI_cuda_is_device_buf(rcvbuf))
- {
- MPIDI_RendezvousTransfer_use_pami_get(context,dest,rcvbuf,rreq);
- }
- else
- {
-#endif
-
-
-#ifdef USE_PAMI_RDMA
- size_t rcvlen_out;
- rc = PAMI_Memregion_create(context,
- rcvbuf,
- rcvlen,
- &rcvlen_out,
- &rreq->mpid.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- MPID_assert(rcvlen == rcvlen_out);
-
- TRACE_ERR("RZV Xfer for req=%p addr=%p *addr[0]=%#016llx *addr[1]=%#016llx\n",
- rreq,
- rcvbuf,
- *(((unsigned long long*)rcvbuf)+0),
- *(((unsigned long long*)rcvbuf)+1));
-
- MPIDI_RendezvousTransfer_use_pami_rget(context,dest,rreq);
-#else
- rreq->mpid.memregion_used=0;
- if( (!MPIDI_Process.mp_s_use_pami_get) && (rreq->mpid.envelope.memregion_used) )
- {
- size_t rcvlen_out;
- rc = PAMI_Memregion_create(context,
- rcvbuf,
- rcvlen,
- &rcvlen_out,
- &rreq->mpid.memregion);
- if (rc == PAMI_SUCCESS)
- {
- rreq->mpid.memregion_used=1;
- MPID_assert(rcvlen == rcvlen_out);
-
- TRACE_ERR("RZV Xfer for req=%p addr=%p *addr[0]=%#016llx *addr[1]=%#016llx\n",
- rreq,
- rcvbuf,
- *(((unsigned long long*)rcvbuf)+0),
- *(((unsigned long long*)rcvbuf)+1));
- MPIDI_RendezvousTransfer_use_pami_rget(context,dest,rreq);
- } else {
- MPIDI_RendezvousTransfer_use_pami_get(context,dest,rcvbuf,rreq);
- }
- } else {
- MPIDI_RendezvousTransfer_use_pami_get(context,dest,rcvbuf,rreq);
- }
-#endif
-
-#if CUDA_AWARE_SUPPORT
- }
-#endif
-
- return PAMI_SUCCESS;
-}
-
-
-inline void
-MPIDI_RendezvousTransfer_use_pami_rget(pami_context_t context,
- pami_endpoint_t dest,
- MPID_Request *rreq)
-{
- pami_result_t rc;
- pami_rget_simple_t params = {
- .rma = {
- .dest = dest,
- .hints = {
- .buffer_registered = PAMI_HINT_ENABLE,
- .use_rdma = PAMI_HINT_ENABLE,
- .remote_async_progress = PAMI_HINT_DEFAULT,
- .use_shmem = PAMI_HINT_DEFAULT,
- },
- .bytes = rreq->mpid.envelope.length,
- .cookie = rreq,
- .done_fn = MPIDI_RecvRzvDoneCB,
- },
- .rdma = {
- .local = {
- .mr = &rreq->mpid.memregion,
- .offset = 0,
- },
- .remote = {
- .mr = &rreq->mpid.envelope.memregion,
- .offset = 0,
- },
- },
- };
-
- rc = PAMI_Rget(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
-}
-
-
-#ifdef RDMA_FAILOVER
-inline void
-MPIDI_RendezvousTransfer_use_pami_get(pami_context_t context,
- pami_endpoint_t dest,
- void *rcvbuf,
- MPID_Request *rreq)
-{
- pami_result_t rc;
- int val=0;
-
- if (MPIDI_Process.mp_s_use_pami_get)
- val=PAMI_HINT_DEFAULT;
- else
- val=PAMI_HINT_DISABLE;
- pami_get_simple_t params = {
- .rma = {
- .dest = dest,
- .hints = {
- .buffer_registered = PAMI_HINT_DEFAULT,
- .use_rdma = val,
- .remote_async_progress = PAMI_HINT_DEFAULT,
- .use_shmem = PAMI_HINT_DEFAULT,
-#ifndef OUT_OF_ORDER_HANDLING
- .no_long_header= 1,
-#endif
- },
- .bytes = rreq->mpid.envelope.length,
- .cookie = rreq,
- .done_fn = MPIDI_RecvRzvDoneCB,
- },
- .addr = {
- .local = rcvbuf,
- .remote = rreq->mpid.envelope.data,
- },
- };
-
- rc = PAMI_Get(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
-}
-#endif
-
-pami_result_t MPIDI_RendezvousTransfer_SyncAck (pami_context_t context, void * _rreq)
-{
- MPID_Request *rreq = (MPID_Request*)_rreq;
-
- // Do the sync ack transfer here.
- MPIDI_SyncAck_post (context, rreq, MPIDI_Request_getPeerRank_pami(rreq));
-
- // Continue on to the rendezvous transfer part.
- return MPIDI_RendezvousTransfer(context, _rreq);
-}
-
-pami_result_t MPIDI_RendezvousTransfer_zerobyte (pami_context_t context, void * _rreq)
-{
- MPIDI_RecvRzvDoneCB_zerobyte (context, _rreq, PAMI_SUCCESS);
- return PAMI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_send.h b/src/mpid/pamid/src/pt2pt/mpidi_send.h
deleted file mode 100644
index b7ed74d..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_send.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_send.h
- *
- * This is a generic inline send operator. It groups code previous
- * found in mpid_{,i}{,s}send.c. The hope is that the common code
- * will be easier to maintain, and that the inline nature of the flags
- * will ensure high performance.
- */
-#include <mpidimpl.h>
-
-#ifndef __src_pt2pt_mpidi_send_h__
-#define __src_pt2pt_mpidi_send_h__
-
-#include <mpidi_macros.h>
-
-static inline void
-MPIDI_SendDoneCB_inline(pami_context_t context,
- void * clientdata,
- pami_result_t result)
-{
- MPID_Request * sreq = (MPID_Request*)clientdata;
- MPID_assert(sreq != NULL);
- MPIDI_Request_complete(sreq);
-}
-
-
-/**
- * \brief This is a generic inline verion of the various send functions.
- *
- * This is the same function prototype as MPID_{,I}{,S}send.c, but it
- * inludes two inline flags: is_blocking and is_sync. These are not
- * meant to be truely variable, but are expected to be known at
- * compile time. That *should* allow the compiler to remove any extra
- * code from this function that won't be used in the specific inlined
- * version.
- *
- * The PAMI_Context_post function may queue this send operation for
- * later handling and then return to the user. Therefore, this
- * function has only two goals:
- *
- * + Fill in the request oject with all relevant information, and
- * + Do any reference counting that must be done before the function returns.
- *
- *
- * \param[in] buf The buffer to send
- * \param[in] count Number of elements in the buffer
- * \param[in] datatype The datatype of each element
- * \param[in] rank The destination rank
- * \param[in] tag The message tag
- * \param[in] comm Pointer to the communicator
- * \param[in] context_offset Offset from the communicator context ID
- * \param[in] is_blocking Is this a blocking request? (i.e. one of MPI_Send or MPI_Ssend)
- * \param[in] is_sync Is this a synchronous request? (i.e. of of MPI_Ssend or MPI_Issend)
- * \param[out] request Return a pointer to the new request object
- *
- * \returns An MPI Error code
- */
-static inline int
-MPIDI_Send(const void * buf,
- MPI_Aint count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- unsigned is_blocking,
- unsigned is_sync,
- MPID_Request ** request)
-{
- MPID_Request * sreq = NULL;
-
- /* --------------------- */
- /* create a send request */
- /* --------------------- */
-
- sreq = MPIDI_Request_create2();
- *request = sreq;
-
- /* match info */
- MPIDI_Request_setMatch(sreq, tag, comm->rank, comm->context_id+context_offset);
-
- /* data buffer info */
- sreq->mpid.userbuf = (void*)buf;
- sreq->mpid.userbufcount = count;
- sreq->mpid.datatype = datatype;
-
- /* communicator & destination info */
- sreq->comm = comm; MPIR_Comm_add_ref(comm);
- MPIDI_Request_setPeerRank_comm(sreq, rank);
-
- /* message type info */
- sreq->kind = MPID_REQUEST_SEND;
- /* ----------------------------------------- */
- /* start the message */
- /* ----------------------------------------- */
- if (is_sync)
- {
- MPIDI_Request_uncomplete(sreq);
- MPIDI_Send_post(MPIDI_Ssend_handoff, sreq);
- }
- else
- {
- MPIDI_Send_post(MPIDI_Send_handoff, sreq);
- }
-
- return MPI_SUCCESS;
-}
-
-
-
-#endif
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c b/src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c
deleted file mode 100644
index ec61b77..0000000
--- a/src/mpid/pamid/src/pt2pt/mpidi_sendmsg.c
+++ /dev/null
@@ -1,743 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/mpidi_sendmsg.c
- * \brief Funnel point for starting all MPI messages
- */
-#include <mpidimpl.h>
-#ifndef min
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
-#if TOKEN_FLOW_CONTROL
-#define MPIDI_Piggy_back_tokens MPIDI_Piggy_back_tokens_inline
-static inline void *
-MPIDI_Piggy_back_tokens_inline(int dest,MPID_Request *shd,size_t len)
- {
- int rettoks=0;
- if (MPIDI_Token_cntr[dest].rettoks)
- {
- rettoks=min(MPIDI_Token_cntr[dest].rettoks, TOKENS_BITMASK);
- MPIDI_Token_cntr[dest].rettoks -= rettoks;
- shd->mpid.envelope.msginfo.tokens = rettoks;
- }
- }
-#endif
-
-static inline void
-MPIDI_SendMsg_short(pami_context_t context,
- MPID_Request * sreq,
- pami_endpoint_t dest,
- void * sndbuf,
- unsigned sndlen,
- unsigned isSync)
-{
- MPIDI_MsgInfo * msginfo = &sreq->mpid.envelope.msginfo;
-
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_Short,
- .dest = dest,
- .header = {
- .iov_base = msginfo,
- .iov_len = sizeof(MPIDI_MsgInfo),
- },
- .data = {
- .iov_base = sndbuf,
- .iov_len = sndlen,
- },
- };
- if (isSync)
- params.dispatch = MPIDI_Protocols_ShortSync;
-
- pami_result_t rc;
- rc = PAMI_Send_immediate(context, ¶ms);
-#ifdef TRACE_ON
- if (rc)
- {
- TRACE_ERR("sizeof(msginfo)=%zu sizeof(data)=%u\n", sizeof(MPIDI_MsgInfo), sndlen);
- }
-#endif
- MPID_assert(rc == PAMI_SUCCESS);
- TRACE_SET_S_VAL(dest,(sreq->mpid.envelope.msginfo.MPIseqno & SEQMASK),mode,params.dispatch);
- if (!isSync) {
- TRACE_SET_S_BIT(dest,(sreq->mpid.envelope.msginfo.MPIseqno & SEQMASK),fl.f.NoComp);
- TRACE_SET_S_BIT(dest,(sreq->mpid.envelope.msginfo.MPIseqno & SEQMASK),fl.f.sendShort);
- } else {
- TRACE_SET_S_BIT(dest,(sreq->mpid.envelope.msginfo.MPIseqno & SEQMASK),fl.f.sendEnvelop);
- }
-
- MPIDI_SendDoneCB_inline(context, sreq, PAMI_SUCCESS);
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->sendsComplete);
-#endif
-}
-
-static void
-MPIDI_SendMsg_eager(pami_context_t context,
- MPID_Request * sreq,
- pami_endpoint_t dest,
- void * sndbuf,
- unsigned sndlen)
- __attribute__((__noinline__));
-static void
-MPIDI_SendMsg_eager(pami_context_t context,
- MPID_Request * sreq,
- pami_endpoint_t dest,
- void * sndbuf,
- unsigned sndlen)
-{
- MPIDI_MsgInfo * msginfo = &sreq->mpid.envelope.msginfo;
-
- pami_send_t params = {
- .send = {
- .dispatch = MPIDI_Protocols_Eager,
- .dest = dest,
- .header = {
- .iov_base = msginfo,
- .iov_len = sizeof(MPIDI_MsgInfo),
- },
- .data = {
- .iov_base = sndbuf,
- .iov_len = sndlen,
- },
- },
- .events = {
- .cookie = sreq,
- .local_fn = MPIDI_SendDoneCB,
- .remote_fn= NULL,
- },
- };
-
- pami_result_t rc;
- rc = PAMI_Send(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),mode,MPIDI_Protocols_Eager);
- TRACE_SET_S_BIT(dest,(sreq->mpid.idx),fl.f.sendEager);
-}
-
-
-static void
-MPIDI_SendMsg_rzv(pami_context_t context,
- MPID_Request * sreq,
- pami_endpoint_t dest,
- void * sndbuf,
- size_t sndlen)
- __attribute__((__noinline__));
-static void
-MPIDI_SendMsg_rzv(pami_context_t context,
- MPID_Request * sreq,
- pami_endpoint_t dest,
- void * sndbuf,
- size_t sndlen)
-{
- pami_result_t rc;
-
- /* Set the isRzv bit in the SEND request. This is important for
- * canceling requests.
- */
- MPIDI_Request_setRzv(sreq, 1);
-
- /* The rendezvous information, such as the origin/local/sender
- * node's send buffer and the number of bytes the origin node wishes
- * to send, is sent as the payload of the request-to-send (RTS)
- * message.
- */
-#ifdef USE_PAMI_RDMA
- size_t sndlen_out;
- rc = PAMI_Memregion_create(context,
- sndbuf,
- sndlen,
- &sndlen_out,
- &sreq->mpid.envelope.memregion);
- MPID_assert(rc == PAMI_SUCCESS);
- MPID_assert(sndlen == sndlen_out);
- TRACE_ERR("RZV send for mr=%#llx addr=%p *addr[0]=%#016llx *addr[1]=%#016llx bytes=%zu\n",
- *(unsigned long long*)&sreq->mpid.envelope.memregion,
- sndbuf,
- *(((unsigned long long*)sndbuf)+0),
- *(((unsigned long long*)sndbuf)+1),
- sndlen);
-#else
- sreq->mpid.envelope.memregion_used = 0;
-#ifdef OUT_OF_ORDER_HANDLING
- if ((!MPIDI_Process.mp_s_use_pami_get) && (!sreq->mpid.envelope.msginfo.noRDMA))
-#else
- if (!MPIDI_Process.mp_s_use_pami_get)
-#endif
- {
- size_t sndlen_out;
- rc = PAMI_Memregion_create(context,
- sndbuf,
- sndlen,
- &sndlen_out,
- &sreq->mpid.envelope.memregion);
- if(rc == PAMI_SUCCESS)
- {
- MPID_assert(sndlen == sndlen_out);
- TRACE_ERR("RZV send for mr=%#llx addr=%p *addr[0]=%#016llx *addr[1]=%#016llx bytes=%zu\n",
- *(unsigned long long*)&sreq->mpid.envelope.memregion,
- sndbuf,
- *(((unsigned long long*)sndbuf)+0),
- *(((unsigned long long*)sndbuf)+1),
- sndlen);
- sreq->mpid.envelope.memregion_used = 1;
- }
- sreq->mpid.envelope.data = sndbuf;
- }
- else
- {
- TRACE_ERR("RZV send (failed registration for sreq=%p addr=%p *addr[0]=%#016llx *addr[1]=%#016llx bytes=%zu\n",
- sreq,sndbuf,
- *(((unsigned long long*)sndbuf)+0),
- *(((unsigned long long*)sndbuf)+1),
- sndlen);
- sreq->mpid.envelope.data = sndbuf;
- }
-#endif
- sreq->mpid.envelope.length = sndlen;
-
- /* Do not specify a callback function to be invoked when the RTS
- * message has been sent. The MPI_Send is completed only when the
- * target/remote/receiver node has completed an PAMI_Get from the
- * origin node and has then sent a rendezvous acknowledgement (ACK)
- * to the origin node to signify the end of the transfer. When the
- * ACK message is received by the origin node the same callback
- * function is used to complete the MPI_Send as the non-rendezvous
- * case.
- */
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_RVZ,
- .dest = dest,
- .header = {
- .iov_base = &sreq->mpid.envelope,
- .iov_len = sizeof(MPIDI_MsgEnvelope),
- },
- .data = {
- .iov_base = NULL,
- .iov_len = 0,
- },
- };
-
- rc = PAMI_Send_immediate(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),bufaddr,sreq->mpid.envelope.data);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),mode,MPIDI_Protocols_RVZ);
- TRACE_SET_S_BIT(dest,(sreq->mpid.idx),fl.f.sendRzv);
- TRACE_SET_S_BIT(dest,(sreq->mpid.idx),fl.f.sendEnvelop);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),fl.f.memRegion,sreq->mpid.envelope.memregion_used);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),fl.f.use_pami_get,MPIDI_Process.mp_s_use_pami_get);
-}
-
-
-static void
-MPIDI_SendMsg_rzv_zerobyte(pami_context_t context,
- MPID_Request * sreq,
- pami_endpoint_t dest)
- __attribute__((__noinline__));
-static void
-MPIDI_SendMsg_rzv_zerobyte(pami_context_t context,
- MPID_Request * sreq,
- pami_endpoint_t dest)
-{
- pami_result_t rc;
-
- /* Set the isRzv bit in the SEND request. This is important for
- * canceling requests.
- */
- MPIDI_Request_setRzv(sreq, 1);
-
- /* The rendezvous information, such as the origin/local/sender
- * node's send buffer and the number of bytes the origin node wishes
- * to send, is sent as the payload of the request-to-send (RTS)
- * message.
- */
-
- sreq->mpid.envelope.data = NULL;
- sreq->mpid.envelope.length = 0;
-
- /* Do not specify a callback function to be invoked when the RTS
- * message has been sent. The MPI_Send is completed only when the
- * target/remote/receiver node has matched the receive and has then
- * sent a rendezvous acknowledgement (ACK) to the origin node to
- * signify the end of the transfer. When the ACK message is received
- * by the origin node the same callback function is used to complete
- * the MPI_Send as the non-rendezvous case.
- */
- pami_send_immediate_t params = {
- .dispatch = MPIDI_Protocols_RVZ_zerobyte,
- .dest = dest,
- .header = {
- .iov_base = &sreq->mpid.envelope,
- .iov_len = sizeof(MPIDI_MsgEnvelope),
- },
- .data = {
- .iov_base = NULL,
- .iov_len = 0,
- },
- };
-
- rc = PAMI_Send_immediate(context, ¶ms);
- MPID_assert(rc == PAMI_SUCCESS);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),bufaddr,sreq->mpid.envelope.data);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),mode,MPIDI_Protocols_RVZ_zerobyte);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),fl.f.memRegion,sreq->mpid.envelope.memregion_used);
- TRACE_SET_S_VAL(dest,(sreq->mpid.idx),fl.f.use_pami_get,MPIDI_Process.mp_s_use_pami_get);
- TRACE_SET_S_BIT(dest,(sreq->mpid.idx),fl.f.sendRzv);
- TRACE_SET_S_BIT(dest,(sreq->mpid.idx),fl.f.sendEnvelop);
-}
-
-
-
-static void
-MPIDI_SendMsg_process_userdefined_dt(MPID_Request * sreq,
- void ** sndbuf,
- size_t * data_sz)
- __attribute__((__noinline__));
-static void
-MPIDI_SendMsg_process_userdefined_dt(MPID_Request * sreq,
- void ** _sndbuf,
- size_t * _data_sz)
-{
- size_t data_sz;
- int dt_contig;
- MPI_Aint dt_true_lb;
- MPID_Datatype * dt_ptr;
- void * sndbuf;
-
- /*
- * Get the datatype info
- */
- MPIDI_Datatype_get_info(sreq->mpid.userbufcount,
- sreq->mpid.datatype,
- dt_contig,
- data_sz,
- dt_ptr,
- dt_true_lb);
-
- MPID_assert(sreq->mpid.uebuf == NULL);
-
- /*
- * Contiguous data type
- */
- if (likely(dt_contig))
- {
- sndbuf = sreq->mpid.userbuf + dt_true_lb;
- }
-
- /*
- * Non-contiguous data type; allocate and populate temporary send
- * buffer
- */
- else
- {
- char *buf = NULL;
-#if CUDA_AWARE_SUPPORT
- // This will need to be done in two steps:
- // 1 - Allocate a temp buffer which is the same size as user buffer and copy in it.
- // 2 - Pack data into ue buffer from temp buffer.
- int on_device = MPIDI_cuda_is_device_buf(sreq->mpid.userbuf);
- if(MPIDI_Process.cuda_aware_support_on && on_device)
- {
- MPI_Aint dt_extent;
- MPID_Datatype_get_extent_macro(sreq->mpid.datatype, dt_extent);
- buf = MPIU_Malloc(dt_extent * sreq->mpid.userbufcount);
-
- cudaError_t cudaerr = CudaMemcpy(buf, sreq->mpid.userbuf, dt_extent * sreq->mpid.userbufcount, cudaMemcpyDeviceToHost);
- if (cudaSuccess != cudaerr) {
- fprintf(stderr, "cudaMalloc failed: %s\n", CudaGetErrorString(cudaerr));
- }
-
- }
-#endif
-
- MPID_Segment segment;
-
- if(data_sz != 0) {
- sreq->mpid.uebuf = sndbuf = MPIU_Malloc(data_sz);
- if (unlikely(sndbuf == NULL))
- {
- sreq->status.MPI_ERROR = MPI_ERR_NO_SPACE;
- MPIR_STATUS_SET_COUNT(sreq->status, 0);
- MPID_Abort(NULL, MPI_ERR_NO_SPACE, -1,
- "Unable to allocate non-contiguous buffer");
- }
- sreq->mpid.uebuf_malloc = mpiuMalloc;
-
- DLOOP_Offset last = data_sz;
-#if CUDA_AWARE_SUPPORT
- if(!MPIDI_Process.cuda_aware_support_on || !on_device)
- buf = sreq->mpid.userbuf;
-#else
- buf = sreq->mpid.userbuf;
-#endif
- MPID_assert(buf != NULL);
-
- MPID_Segment_init(buf,
- sreq->mpid.userbufcount,
- sreq->mpid.datatype,
- &segment,
- 0);
- MPID_Segment_pack(&segment, 0, &last, sndbuf);
- MPID_assert(last == data_sz);
-#if CUDA_AWARE_SUPPORT
- if(MPIDI_Process.cuda_aware_support_on && on_device)
- MPIU_Free(buf);
-#endif
- } else {
- sndbuf = NULL;
- }
- }
-
- *_sndbuf = sndbuf;
- *_data_sz = data_sz;
-}
-
-
-static inline void
-MPIDI_SendMsg(pami_context_t context,
- MPID_Request * sreq,
- unsigned isSync,
- const unsigned isInternal)
-{
- /* ------------------------------ */
- /* special case: NULL destination */
- /* ------------------------------ */
- int rank = MPIDI_Request_getPeerRank_comm(sreq);
- if (unlikely(rank == MPI_PROC_NULL))
- {
- if (isSync)
- MPIDI_Request_complete(sreq);
- MPIDI_Request_complete(sreq);
- return;
- }
- else
- {
- MPIDI_Request_setPeerRank_pami(sreq, MPID_VCR_GET_LPID(sreq->comm->vcr, rank));
- }
-
- MPIDI_Request_setSync(sreq, isSync);
- MPIDI_Request_setPeerRequestH(sreq);
-
- /*
- * Create the destination endpoint
- */
- pami_endpoint_t dest;
- MPIDI_Context_endpoint(sreq, &dest);
- pami_task_t dest_tid;
- dest_tid=sreq->comm->vcr[rank]->taskid;
-#if (MPIDI_STATISTICS)
- MPID_NSTAT(mpid_statp->sends);
-#endif
-#ifdef OUT_OF_ORDER_HANDLING
- MPIDI_Out_cntr_t *out_cntr;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- out_cntr = &MPIDI_Out_cntr[dest_tid];
- out_cntr->nMsgs++;
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPIDI_Request_setMatchSeq(sreq, out_cntr->nMsgs);
-#endif
-if (!TOKEN_FLOW_CONTROL_ON) {
- size_t data_sz;
- void * sndbuf;
- if (likely(HANDLE_GET_KIND(sreq->mpid.datatype) == HANDLE_KIND_BUILTIN))
- {
- sndbuf = sreq->mpid.userbuf;
- data_sz = sreq->mpid.userbufcount * MPID_Datatype_get_basic_size(sreq->mpid.datatype);
- }
- else
- {
- MPIDI_SendMsg_process_userdefined_dt(sreq, &sndbuf, &data_sz);
- }
- MPIDI_GET_S_REC(dest_tid,sreq,context,isSync,data_sz);
-
-#ifdef OUT_OF_ORDER_HANDLING
- sreq->mpid.envelope.msginfo.noRDMA=0;
-#endif
-
- const unsigned isLocal = PAMIX_Task_is_local(dest_tid);
- const size_t data_sz_limit = isSync?ULONG_MAX:data_sz;
-
- /*
- * Always use the short protocol when data_sz is small.
- */
- if (likely(data_sz < MPIDI_PT2PT_SHORT_LIMIT(isInternal,isLocal)))
- {
- TRACE_ERR("Sending(short%s%s) bytes=%zu (short_limit=%u)\n", isInternal==1?",internal":"", isLocal==1?",intranode":"", data_sz, MPIDI_PT2PT_SHORT_LIMIT(isInternal,isLocal));
- MPIDI_SendMsg_short(context,
- sreq,
- dest,
- sndbuf,
- data_sz,
- isSync);
- }
- /*
- * Use the eager protocol when data_sz is less than the eager limit.
- */
- else if (data_sz_limit < MPIDI_PT2PT_EAGER_LIMIT(isInternal,isLocal))
- {
- TRACE_ERR("Sending(eager%s%s) bytes=%zu (eager_limit=%u)\n", isInternal==1?",internal":"", isLocal==1?",intranode":"", data_sz, MPIDI_PT2PT_EAGER_LIMIT(isInternal,isLocal));
- MPIDI_SendMsg_eager(context,
- sreq,
- dest,
- sndbuf,
- data_sz);
-#ifdef MPIDI_STATISTICS
- if (!isLocal && MPID_cc_is_complete(&sreq->cc))
- {
- MPID_NSTAT(mpid_statp->sendsComplete);
- }
-#endif
- }
- /*
- * Use the default rendezvous protocol implementation that guarantees
- * no unexpected data and does not complete the send until the remote
- * receive is posted.
- */
- else
- {
- TRACE_ERR("Sending(rendezvous%s%s) bytes=%zu (eager_limit=%u)\n", isInternal==1?",internal":"", isLocal==1?",intranode":"", data_sz, MPIDI_PT2PT_EAGER_LIMIT(isInternal,isLocal));
-#ifdef OUT_OF_ORDER_HANDLING
- sreq->mpid.envelope.msginfo.noRDMA=isLocal;
-#endif
- if (likely(data_sz > 0))
- {
- MPIDI_SendMsg_rzv(context,
- sreq,
- dest,
- sndbuf,
- data_sz);
- }
- else
- {
- MPIDI_SendMsg_rzv_zerobyte(context, sreq, dest);
- }
-
-#ifdef MPIDI_STATISTICS
- if (!isLocal && MPID_cc_is_complete(&sreq->cc))
- {
- MPID_NSTAT(mpid_statp->sendsComplete);
- }
-#endif
- }
- }
- else
- { /* TOKEN_FLOW_CONTROL_ON */
- #if TOKEN_FLOW_CONTROL
- if (!(sreq->mpid.userbufcount))
- {
- MPIDI_GET_S_REC(dest_tid,sreq,context,isSync,0);
- TRACE_ERR("Sending(short,intranode) bytes=%u (short_limit=%u)\n", data_sz, MPIDI_Process.short_limit);
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- MPIDI_Piggy_back_tokens(dest,sreq,0);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPIDI_SendMsg_short(context,
- sreq,
- dest,
- sreq->mpid.userbuf,
- 0,
- isSync);
- }
- else
- {
- size_t data_sz;
- void * sndbuf;
- int noRDMA=0;
- if (likely(HANDLE_GET_KIND(sreq->mpid.datatype) == HANDLE_KIND_BUILTIN))
- {
- sndbuf = sreq->mpid.userbuf;
- data_sz = sreq->mpid.userbufcount * MPID_Datatype_get_basic_size(sreq->mpid.datatype);
- }
- else
- {
- MPIDI_SendMsg_process_userdefined_dt(sreq, &sndbuf, &data_sz);
- }
- MPIDI_GET_S_REC(dest_tid,sreq,context,isSync,data_sz);
- if (unlikely(PAMIX_Task_is_local(dest_tid) != 0)) noRDMA=1;
-
- MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- if ((!isSync) && MPIDI_Token_cntr[dest].tokens >= 1)
- {
- if (data_sz <= MPIDI_Process.pt2pt.limits.application.immediate.remote)
- {
- TRACE_ERR("Sending(short,intranode) bytes=%u (short_limit=%u)\n", data_sz,MPIDI_Process.pt2pt.limits.application.immediate.remote);
- --MPIDI_Token_cntr[dest].tokens;
- MPIDI_Piggy_back_tokens(dest,sreq,data_sz);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPIDI_SendMsg_short(context,
- sreq,
- dest,
- sndbuf,
- data_sz,
- isSync);
- }
- else if (data_sz <= MPIDI_Process.pt2pt.limits.application.eager.remote)
- {
- TRACE_ERR("Sending(eager) bytes=%u (eager_limit=%u)\n", data_sz, MPIDI_Process.pt2pt.limits.application.eager.remote);
- --MPIDI_Token_cntr[dest].tokens;
- MPIDI_Piggy_back_tokens(dest,sreq,data_sz);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- MPIDI_SendMsg_eager(context,
- sreq,
- dest,
- sndbuf,
- data_sz);
-#ifdef MPIDI_STATISTICS
- if (MPID_cc_is_complete(&sreq->cc)) {
- MPID_NSTAT(mpid_statp->sendsComplete);
- }
-#endif
-
- }
- else /* rendezvous message */
- {
- TRACE_ERR("Sending(RZV) bytes=%u (eager_limit=%u)\n", data_sz, MPIDI_Process.pt2pt.limits.application.eager.remote);
- MPIDI_Piggy_back_tokens(dest,sreq,data_sz);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- sreq->mpid.envelope.msginfo.noRDMA=noRDMA;
- MPIDI_SendMsg_rzv(context,
- sreq,
- dest,
- sndbuf,
- data_sz);
-#ifdef MPIDI_STATISTICS
- if (MPID_cc_is_complete(&sreq->cc))
- {
- MPID_NSTAT(mpid_statp->sendsComplete);
- }
-#endif
- }
- }
- else
- { /* no tokens, all messages use rendezvous protocol */
- if ((data_sz <= MPIDI_Process.pt2pt.limits.application.eager.remote) && (!isSync)) {
- ++MPIDI_Token_cntr[dest].n_tokenStarved;
- sreq->mpid.envelope.msginfo.noRDMA=1;
- }
- else sreq->mpid.envelope.msginfo.noRDMA=noRDMA;
- MPIDI_Piggy_back_tokens(dest,sreq,data_sz);
- MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
- TRACE_ERR("Sending(RZV) bytes=%u (eager_limit=%u)\n", data_sz, MPIDI_Process.pt2pt.limits.application.eager.remote);
- if (likely(data_sz > 0))
- {
- MPIDI_SendMsg_rzv(context,
- sreq,
- dest,
- sndbuf,
- data_sz);
- }
- else
- {
- MPIDI_SendMsg_rzv_zerobyte(context, sreq, dest);
- }
-#ifdef MPIDI_STATISTICS
- if (MPID_cc_is_complete(&sreq->cc))
- {
- MPID_NSTAT(mpid_statp->sendsComplete);
- }
-#endif
- }
- }
- #else
- MPID_assert_always(0);
- #endif /* TOKEN_FLOW_CONTROL */
- }
-}
-
-
-/*
- * \brief Central function for all low-level sends.
- *
- * This is assumed to have been posted to a context, and is now being
- * called from inside advance. This has (unspecified) locking
- * implications.
- *
- * Prerequisites:
- * + Not sending to a NULL rank
- * + Request already allocated
- *
- * \param[in] context The PAMI context on which to do the send operation
- * \param[in,out] sreq Structure containing all relevant info about the message.
- */
-pami_result_t
-MPIDI_Send_handoff(pami_context_t context,
- void * _sreq)
-{
- MPID_Request * sreq = (MPID_Request*)_sreq;
- MPID_assert(sreq != NULL);
-
- MPIDI_SendMsg(context, sreq, 0, 0);
- return PAMI_SUCCESS;
-}
-
-
-pami_result_t
-MPIDI_Ssend_handoff(pami_context_t context,
- void * _sreq)
-{
- MPID_Request * sreq = (MPID_Request*)_sreq;
- MPID_assert(sreq != NULL);
-
- MPIDI_SendMsg(context, sreq, 1, 0);
- return PAMI_SUCCESS;
-}
-
-
-/*
- * \brief Central function for all low-level sends.
- *
- * This is assumed to have been posted to a context, and is now being
- * called from inside advance. This has (unspecified) locking
- * implications.
- *
- * Prerequisites:
- * + Not sending to a NULL rank
- * + Request already allocated
- *
- * \param[in] context The PAMI context on which to do the send operation
- * \param[in,out] sreq Structure containing all relevant info about the message.
- */
-pami_result_t
-MPIDI_Isend_handoff(pami_context_t context,
- void * _sreq)
-{
- MPID_Request * sreq = (MPID_Request*)_sreq;
- MPID_assert(sreq != NULL);
-
- /* This initializes all the fields not set in MPI_Isend() */
- MPIDI_Request_initialize(sreq);
-
- /* Since this is only called from MPI_Isend(), it is not synchronous */
- MPIDI_SendMsg(context, sreq, 0, 0);
- return PAMI_SUCCESS;
-}
-
-pami_result_t
-MPIDI_Isend_handoff_internal(pami_context_t context,
- void * _sreq)
-{
- MPID_Request * sreq = (MPID_Request*)_sreq;
- MPID_assert(sreq != NULL);
-
- /* This initializes all the fields not set in MPI_Isend() */
- MPIDI_Request_initialize(sreq);
-
- /* Since this is only called from MPI_Isend(), it is not synchronous */
- MPIDI_SendMsg(context, sreq, 0, 1);
- return PAMI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/pt2pt/persistent/Makefile.mk b/src/mpid/pamid/src/pt2pt/persistent/Makefile.mk
deleted file mode 100644
index e2894a6..0000000
--- a/src/mpid/pamid/src/pt2pt/persistent/Makefile.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# begin_generated_IBM_copyright_prolog
-#
-# This is an automatically generated copyright prolog.
-# After initializing, DO NOT MODIFY OR MOVE
-# ---------------------------------------------------------------
-# Licensed Materials - Property of IBM
-# Blue Gene/Q 5765-PER 5765-PRP
-#
-# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-# US Government Users Restricted Rights -
-# Use, duplication, or disclosure restricted
-# by GSA ADP Schedule Contract with IBM Corp.
-#
-# ---------------------------------------------------------------
-#
-# end_generated_IBM_copyright_prolog
-# -*- mode: makefile-gmake; -*-
-
-# note that the includes always happen but the effects of their contents are
-# affected by "if BUILD_PAMID"
-if BUILD_PAMID
-
-
-mpi_core_sources += \
- src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c \
- src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c
-
-endif BUILD_PAMID
-
diff --git a/src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c b/src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c
deleted file mode 100644
index e3acd41..0000000
--- a/src/mpid/pamid/src/pt2pt/persistent/mpid_recv_init.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/persistent/mpid_recv_init.c
- * \brief ???
- */
-
-/* This creates and initializes a persistent recv request */
-
-#include <mpidimpl.h>
-
-int MPID_Recv_init(void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- MPID_Request * rreq = *request = MPIDI_Request_create2();
-
- rreq->kind = MPID_PREQUEST_RECV;
- rreq->comm = comm;
- MPIR_Comm_add_ref(comm);
- MPIDI_Request_setMatch(rreq, tag, rank, comm->recvcontext_id+context_offset);
- rreq->mpid.userbuf = buf;
- rreq->mpid.userbufcount = count;
- rreq->mpid.datatype = datatype;
- rreq->partner_request = NULL;
- MPIDI_Request_complete(rreq);
-
- MPIDI_Request_setPType(rreq, MPIDI_REQUEST_PTYPE_RECV);
- if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
- {
- MPID_Datatype_get_ptr(datatype, rreq->mpid.datatype_ptr);
- MPID_Datatype_add_ref(rreq->mpid.datatype_ptr);
- }
-
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c b/src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c
deleted file mode 100644
index 5bf50f2..0000000
--- a/src/mpid/pamid/src/pt2pt/persistent/mpid_send_init.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/persistent/mpid_send_init.c
- * \brief ???
- */
-/* This creates and initializes a persistent send request */
-
-#include <mpidimpl.h>
-
-/**
- * ***************************************************************************
- * create a persistent send template
- * ***************************************************************************
- */
-
-static inline int
-MPID_PSendRequest(const void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- MPID_Request* sreq = *request = MPIDI_Request_create2();
-
- sreq->kind = MPID_PREQUEST_SEND;
- sreq->comm = comm;
- MPIR_Comm_add_ref(comm);
- MPIDI_Request_setMatch(sreq, tag, rank, comm->context_id+context_offset);
- sreq->mpid.userbuf = (void*)buf;
- sreq->mpid.userbufcount = count;
- sreq->mpid.datatype = datatype;
- sreq->partner_request = NULL;
- MPIDI_Request_complete(sreq);
-
- if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN)
- {
- MPID_Datatype_get_ptr(datatype, sreq->mpid.datatype_ptr);
- MPID_Datatype_add_ref(sreq->mpid.datatype_ptr);
- }
-
- return MPI_SUCCESS;
-}
-
-/**
- * ***************************************************************************
- * simple persistent send
- * ***************************************************************************
- */
-
-int MPID_Send_init(const void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- int mpi_errno = MPID_PSendRequest(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- request);
- if (mpi_errno != MPI_SUCCESS)
- return mpi_errno;
- MPIDI_Request_setPType((*request), MPIDI_REQUEST_PTYPE_SEND);
- return MPI_SUCCESS;
-}
-
-/**
- * ***************************************************************************
- * persistent synchronous send
- * ***************************************************************************
- */
-
-int MPID_Ssend_init(const void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- int mpi_errno = MPID_PSendRequest(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- request);
- if (mpi_errno != MPI_SUCCESS)
- return mpi_errno;
- MPIDI_Request_setPType((*request), MPIDI_REQUEST_PTYPE_SSEND);
- return MPI_SUCCESS;
-}
-
-/**
- * ***************************************************************************
- * persistent buffered send
- * ***************************************************************************
- */
-
-int MPID_Bsend_init(const void * buf,
- int count,
- MPI_Datatype datatype,
- int rank,
- int tag,
- MPID_Comm * comm,
- int context_offset,
- MPID_Request ** request)
-{
- int mpi_errno = MPID_PSendRequest(buf,
- count,
- datatype,
- rank,
- tag,
- comm,
- context_offset,
- request);
- if (mpi_errno != MPI_SUCCESS)
- return mpi_errno;
- MPIDI_Request_setPType((*request), MPIDI_REQUEST_PTYPE_BSEND);
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c b/src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c
deleted file mode 100644
index a8fac4b..0000000
--- a/src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* begin_generated_IBM_copyright_prolog */
-/* */
-/* This is an automatically generated copyright prolog. */
-/* After initializing, DO NOT MODIFY OR MOVE */
-/* --------------------------------------------------------------- */
-/* Licensed Materials - Property of IBM */
-/* Blue Gene/Q 5765-PER 5765-PRP */
-/* */
-/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
-/* US Government Users Restricted Rights - */
-/* Use, duplication, or disclosure restricted */
-/* by GSA ADP Schedule Contract with IBM Corp. */
-/* */
-/* --------------------------------------------------------------- */
-/* */
-/* end_generated_IBM_copyright_prolog */
-/* (C)Copyright IBM Corp. 2007, 2011 */
-/**
- * \file src/pt2pt/persistent/mpid_startall.c
- * \brief ???
- */
-#include <mpidimpl.h>
-#include <../mpi/pt2pt/bsendutil.h>
-
-int MPID_Startall(int count, MPID_Request * requests[])
-{
- int rc=MPI_SUCCESS, i;
- for (i = 0; i < count; i++)
- {
- MPID_Request * const preq = requests[i];
- switch(MPIDI_Request_getPType(preq))
- {
- case MPIDI_REQUEST_PTYPE_RECV:
- {
- rc = MPID_Irecv(preq->mpid.userbuf,
- preq->mpid.userbufcount,
- preq->mpid.datatype,
- MPIDI_Request_getMatchRank(preq),
- MPIDI_Request_getMatchTag(preq),
- preq->comm,
- MPIDI_Request_getMatchCtxt(preq) - preq->comm->recvcontext_id,
- &preq->partner_request);
- break;
- }
- case MPIDI_REQUEST_PTYPE_SEND:
- {
- rc = MPID_Isend(preq->mpid.userbuf,
- preq->mpid.userbufcount,
- preq->mpid.datatype,
- MPIDI_Request_getMatchRank(preq),
- MPIDI_Request_getMatchTag(preq),
- preq->comm,
- MPIDI_Request_getMatchCtxt(preq) - preq->comm->context_id,
- &preq->partner_request);
- break;
- }
- case MPIDI_REQUEST_PTYPE_SSEND:
- {
- rc = MPID_Issend(preq->mpid.userbuf,
- preq->mpid.userbufcount,
- preq->mpid.datatype,
- MPIDI_Request_getMatchRank(preq),
- MPIDI_Request_getMatchTag(preq),
- preq->comm,
- MPIDI_Request_getMatchCtxt(preq) - preq->comm->context_id,
- &preq->partner_request);
- break;
- }
- case MPIDI_REQUEST_PTYPE_BSEND:
- {
- rc = MPIR_Bsend_isend(preq->mpid.userbuf,
- preq->mpid.userbufcount,
- preq->mpid.datatype,
- MPIDI_Request_getMatchRank(preq),
- MPIDI_Request_getMatchTag(preq),
- preq->comm,
- BSEND_INIT,
- &preq->partner_request);
- /*
- * MPICH maintains an independant reference to the child,
- * but doesn't refcount it. Since they actually call
- * MPI_Test() on the child request (which will release a
- * ref iff the request is complete), we have to increment
- * the ref_count so that it doesn't get freed from under
- * us.
- */
- if (preq->partner_request != NULL)
- MPIU_Object_add_ref(preq->partner_request);
- break;
- }
-
- default:
- {
- rc = MPIR_Err_create_code(MPI_SUCCESS,
- MPIR_ERR_FATAL,
- __FUNCTION__,
- __LINE__,
- MPI_ERR_INTERN,
- "**ch3|badreqtype",
- "**ch3|badreqtype %d",
- MPIDI_Request_getPType(preq));
- }
-
- } /* switch should end here, bug fixed. */
-
- if (rc == MPI_SUCCESS)
- {
- preq->status.MPI_ERROR = MPI_SUCCESS;
- if (MPIDI_Request_getPType(preq) == MPIDI_REQUEST_PTYPE_BSEND)
- {
- /*
- * Complete a persistent Bsend immediately.
- *
- * Because the child of a persistent Bsend is just a
- * normal Isend on a temp buffer, we don't need to wait on
- * the child when the user calls MPI_Wait on the parent.
- * Therefore, disconnect the cc_ptr link to the child and
- * mark the parent complete.
- */
- preq->cc_ptr = &preq->cc;
- MPID_Request_set_completed(preq);
- }
- else
- preq->cc_ptr = &preq->partner_request->cc;
- }
- else
- {
- /* If a failure occurs attempting to start the request,
- then we assume that partner request was not created,
- and stuff the error code in the persistent request.
- The wait and test routines will look at the error code
- in the persistent request if a partner request is not present. */
- preq->partner_request = NULL;
- preq->status.MPI_ERROR = rc;
- preq->cc_ptr = &preq->cc;
- MPID_Request_set_completed(preq);
- }
- } /* for */
- return rc;
-}
diff --git a/src/mpid/pamid/subconfigure.m4 b/src/mpid/pamid/subconfigure.m4
deleted file mode 100644
index f67f86e..0000000
--- a/src/mpid/pamid/subconfigure.m4
+++ /dev/null
@@ -1,350 +0,0 @@
-[#] start of __file__
-dnl begin_generated_IBM_copyright_prolog
-dnl
-dnl This is an automatically generated copyright prolog.
-dnl After initializing, DO NOT MODIFY OR MOVE
-dnl ---------------------------------------------------------------
-dnl Licensed Materials - Property of IBM
-dnl Blue Gene/Q 5765-PER 5765-PRP
-dnl
-dnl (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
-dnl US Government Users Restricted Rights -
-dnl Use, duplication, or disclosure restricted
-dnl by GSA ADP Schedule Contract with IBM Corp.
-dnl
-dnl ---------------------------------------------------------------
-dnl
-dnl end_generated_IBM_copyright_prolog
-dnl -*- mode: makefile-gmake; -*-
-
-dnl MPICH_SUBCFG_BEFORE=src/mpid/common/sched
-dnl MPICH_SUBCFG_BEFORE=src/mpid/common/datatype
-dnl MPICH_SUBCFG_BEFORE=src/mpid/common/thread
-
-dnl _PREREQ handles the former role of mpichprereq, setup_device, etc
-[#] expansion is: PAC_SUBCFG_PREREQ_[]PAC_SUBCFG_AUTO_SUFFIX
-AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
-AM_CONDITIONAL([BUILD_PAMID],[test "$device_name" = "pamid"])
-AM_CONDITIONAL([QUEUE_BINARY_SEARCH_SUPPORT],[test "$enable_queue_binary_search" = "yes"])
-
-AC_ARG_VAR([PAMILIBNAME],[can be used to override the name of the PAMI library (default: "pami")])
-original_PAMILIBNAME=${PAMILIBNAME}
-PAMILIBNAME=${PAMILIBNAME:-"pami"}
-AC_SUBST(PAMILIBNAME)
-export PAMILIBNAME
-
-dnl this subconfigure.m4 handles the configure work for the ftb subdir too
-dnl this AM_CONDITIONAL only works because enable_ftb is set very early on by
-dnl autoconf's argument parsing code. The "action-if-given" from the
-dnl AC_ARG_ENABLE has not yet run
-dnl AM_CONDITIONAL([BUILD_CH3_UTIL_FTB],[test "x$enable_ftb" = "xyes"])
-
-AM_COND_IF([BUILD_PAMID],[
-
-pamid_platform=${device_args}
-if test x"$pamid_platform" == "x"; then
- AS_CASE([$host],
- [*-bgq-*],[pamid_platform=BGQ])
-fi
-
-AC_MSG_NOTICE([Using the pamid platform '$pamid_platform'])
-
-
-dnl Set a value for the maximum processor name.
-MPID_MAX_PROCESSOR_NAME=128
-PM_REQUIRES_PMI=pmi2
-if test "${pamid_platform}" = "PE" ; then
- with_shared_memory=sysv
- PM_REQUIRES_PMI=pmi2/poe
-elif test "${pamid_platform}" = "BGQ" ; then
- with_shared_memory=mmap
- MPID_DEFAULT_CROSS_FILE=${master_top_srcdir}/src/mpid/pamid/cross/bgq8
- MPID_DEFAULT_PM=no
-fi
-
-MPID_DEVICE_TIMER_TYPE=double
-MPID_MAX_THREAD_LEVEL=MPI_THREAD_MULTIPLE
-
-dnl the PAMID device depends on the common NBC scheduler code
-build_mpid_common_sched=yes
-build_mpid_common_datatype=yes
-build_mpid_common_thread=yes
-
-
-])dnl end AM_COND_IF(BUILD_PAMID,...)
-])dnl end PREREQ
-AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
-AM_COND_IF([BUILD_PAMID],[
-AC_MSG_NOTICE([RUNNING CONFIGURE FOR PAMI DEVICE])
-
-
-ASSERT_LEVEL=2
-AC_ARG_WITH(assert-level,
- AS_HELP_STRING([--with-assert-level={0 1 2}],[pamid build assert-level (default: 2)]),
- [ ASSERT_LEVEL=$withval ])
-AC_SUBST(ASSERT_LEVEL)
-AC_DEFINE_UNQUOTED([ASSERT_LEVEL], $ASSERT_LEVEL, [The pamid assert level])
-
-dnl
-dnl This macro adds the -I to CPPFLAGS and/or the -L to LDFLAGS
-dnl
-PAC_SET_HEADER_LIB_PATH(pami)
-
-dnl
-dnl Set the pamid platform define.
-dnl
-PAC_APPEND_FLAG([-D__${pamid_platform}__], [CPPFLAGS])
-
-dnl Check for available shared memory functions
-PAC_ARG_SHARED_MEMORY
-if test "$with_shared_memory" != "mmap" -a "$with_shared_memory" != "sysv"; then
- AC_MSG_ERROR([cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory])
-fi
-
-dnl
-dnl The default is to enable the use of the recv queue binary search
-dnl ... except on BGQ
-dnl
-enable_queue_binary_search=yes
-if test "${pamid_platform}" = "BGQ" ; then
- enable_queue_binary_search=no
-fi
-
-AM_CONDITIONAL([QUEUE_BINARY_SEARCH_SUPPORT],[test "$enable_queue_binary_search" = "yes"])
-
-dnl
-dnl This configure option allows "sandbox" bgq system software to be used.
-dnl
-AC_ARG_WITH(bgq-install-dir,
- AS_HELP_STRING([--with-bgq-install-dir=PATH],[specify path where bgq system software can be found;
- may also be specified with the 'BGQ_INSTALL_DIR'
- environment variable]),
- [ BGQ_INSTALL_DIR=$withval ])
-AC_SUBST(BGQ_INSTALL_DIR)
-
-dnl
-dnl Add bgq-specific build options.
-dnl
-if test "${pamid_platform}" = "BGQ" ; then
-
- AC_MSG_CHECKING([for BGQ system software directory])
-
- dnl
- dnl Specify the default bgq system software paths
- dnl
- bgq_driver_search_path="${BGQ_INSTALL_DIR} "
- for bgq_version in `echo 4 3 2 1`; do
- for bgq_release in `echo 4 3 2 1`; do
- for bgq_mod in `echo 4 3 2 1 0`; do
- bgq_driver_search_path+="/bgsys/drivers/V${bgq_version}R${bgq_release}M${bgq_mod}/ppc64 "
- done
- done
- done
-
- dnl Look for a bgq driver to use.
- for bgq_driver in $bgq_driver_search_path ; do
- if test -d ${bgq_driver}/spi/include ; then
-
- found_bgq_driver=yes
-
- PAC_APPEND_FLAG([-I${bgq_driver}], [CPPFLAGS])
- PAC_APPEND_FLAG([-I${bgq_driver}/spi/include/kernel/cnk], [CPPFLAGS])
- PAC_APPEND_FLAG([-L${bgq_driver}/spi/lib], [LDFLAGS])
- PAC_APPEND_FLAG([-L${bgq_driver}/spi/lib], [WRAPPER_LDFLAGS])
-
- dnl If the '--with-pami' and the '--with-pami-include' configure options
- dnl were NOT specified then test for a V1R2M1+ comm include directory.
- dnl
- AS_IF([test "x${with_pami_include}" = "x" ],
- [AS_IF([test "x${with_pami}" = "x" ],
- [AS_IF([test -d ${bgq_driver}/comm/include ],
- [PAC_APPEND_FLAG([-I${bgq_driver}/comm/include], [CPPFLAGS])],
- [PAC_APPEND_FLAG([-I${bgq_driver}/comm/sys/include],[CPPFLAGS])])])])
-
- dnl If the '--with-pami' and the '--with-pami-lib' configure options were
- dnl NOT specified then
- dnl
- dnl if a custom pami library name was NOT specified then test for a
- dnl V1R2M1+ pami lib in a V1R2M1+ comm lib directory then test for a
- dnl pre-V1R2M1 pami lib in a pre-V1R2M1 comm lib directory; otherwise
- dnl
- dnl if a custom pami library name WAS specified then test for a custom
- dnl pami lib in a V1R2M1+ comm lib directory then test for a custom
- dnl pami lib in a pre-V1R2M1 comm lib directory
- dnl
- AS_IF([test "x${with_pami_lib}" = "x" ],
- [AS_IF([test "x${with_pami}" = "x" ],
- [AS_IF([test "x${original_PAMILIBNAME}" = "x" ],
- [AS_IF([test -f ${bgq_driver}/comm/lib/libpami-gcc.a ],
- [PAMILIBNAME=pami-gcc
- PAC_APPEND_FLAG([-L${bgq_driver}/comm/lib], [LDFLAGS])
- PAC_APPEND_FLAG([-L${bgq_driver}/comm/lib], [WRAPPER_LDFLAGS])],
- [AS_IF([test -f ${bgq_driver}/comm/sys/lib/libpami.a ],
- [PAC_APPEND_FLAG([-L${bgq_driver}/comm/sys/lib],[LDFLAGS])
- PAC_APPEND_FLAG([-L${bgq_driver}/comm/sys/lib],[WRAPPER_LDFLAGS])])])],
- [AS_IF([test -f ${bgq_driver}/comm/lib/lib${PAMILIBNAME}.a ],
- [PAC_APPEND_FLAG([-L${bgq_driver}/comm/lib], [LDFLAGS])
- PAC_APPEND_FLAG([-L${bgq_driver}/comm/lib], [WRAPPER_LDFLAGS])],
- [AS_IF([test -f ${bgq_driver}/comm/sys/lib/lib${PAMILIBNAME}.a ],
- [PAC_APPEND_FLAG([-L${bgq_driver}/comm/sys/lib],[LDFLAGS])
- PAC_APPEND_FLAG([-L${bgq_driver}/comm/sys/lib],[WRAPPER_LDFLAGS])])])])])])
-
- break
- fi
- done
-
- if test "x${found_bgq_driver}" = "xyes"; then
- AC_MSG_RESULT('$bgq_driver')
- else
- AC_MSG_RESULT('no')
- fi
-
- dnl
- dnl The bgq compile requires these libraries.
- dnl
- PAC_APPEND_FLAG([-lSPI], [LIBS])
- PAC_APPEND_FLAG([-lSPI_cnk], [LIBS])
- PAC_APPEND_FLAG([-lrt], [LIBS])
- PAC_APPEND_FLAG([-lpthread], [LIBS])
- PAC_APPEND_FLAG([-lstdc++], [LIBS])
-
- dnl
- dnl The wrapper scripts require these libraries.
- dnl
- PAC_APPEND_FLAG([-l${PAMILIBNAME}], [WRAPPER_LIBS])
- PAC_APPEND_FLAG([-lSPI], [WRAPPER_LIBS])
- PAC_APPEND_FLAG([-lSPI_cnk], [WRAPPER_LIBS])
- PAC_APPEND_FLAG([-lrt], [WRAPPER_LIBS])
- PAC_APPEND_FLAG([-lpthread], [WRAPPER_LIBS])
- PAC_APPEND_FLAG([-lstdc++], [WRAPPER_LIBS])
-
-
- AC_SEARCH_LIBS([PAMI_Send], [${PAMILIBNAME} pami-gcc])
-
-
- dnl For some reason, on bgq, libtool will incorrectly attempt a static link
- dnl of libstdc++.so unless this '-all-static' option is used. This seems to
- dnl be a problem specific to libstdc++.
- dnl
- dnl Only the 'cpi', 'mpivars', and 'mpichversion' executables have this problem.
- MPID_LIBTOOL_STATIC_FLAG="-all-static"
-
- dnl Another bgq special case. The default linker behavior is to use static versions
- dnl of libraries. This makes supporting interlibrary dependencies difficult. Just
- dnl disable them to make our lives easier.
- if test "$INTERLIB_DEPS" = "yes"; then
- INTERLIB_DEPS="no"
- fi
-fi
-
-if test "${pamid_platform}" = "PE" ; then
- MPID_MAX_ERROR_STRING=512
-fi
-
-PAC_APPEND_FLAG([-I${master_top_srcdir}/src/include], [CPPFLAGS])
-PAC_APPEND_FLAG([-I${master_top_srcdir}/src/util/wrappers], [CPPFLAGS])
-PAC_APPEND_FLAG([-I${master_top_srcdir}/src/mpid/pamid/include], [CPPFLAGS])
-PAC_APPEND_FLAG([-I${master_top_srcdir}/src/mpid/common/datatype], [CPPFLAGS])
-PAC_APPEND_FLAG([-I${master_top_srcdir}/src/mpid/common/locks], [CPPFLAGS])
-PAC_APPEND_FLAG([-I${master_top_srcdir}/src/mpid/common/thread], [CPPFLAGS])
-PAC_APPEND_FLAG([-I${master_top_srcdir}/src/mpid/common/sched], [CPPFLAGS])
-
-dnl
-dnl Check for PAMI_IN_PLACE
-dnl
-AC_MSG_CHECKING([for PAMI_IN_PLACE support])
-have_pami_in_place=0
-AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include "pami.h"]],
- [[void * foo = PAMI_IN_PLACE;]])],
- have_pami_in_place=1
-)
-if test "$have_pami_in_place" != "0"; then
- AC_DEFINE(HAVE_PAMI_IN_PLACE,1,[Define if PAMI_IN_PLACE is defined in pami.h])
- AC_MSG_RESULT('yes')
-else
- AC_DEFINE(PAMI_IN_PLACE,((void *) -1L),[Define if PAMI_IN_PLACE is not defined in pami.h])
- AC_MSG_RESULT('no')
-fi
-
-dnl
-dnl Check for PAMI_CLIENT_NONCONTIG
-dnl
-AC_MSG_CHECKING([for PAMI_CLIENT_NONCONTIG support])
-have_pami_client_noncontig=0
-AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include "pami.h"]],
- [[int foo = PAMI_CLIENT_NONCONTIG;]])],
- have_pami_client_noncontig=1
-)
-if test "$have_pami_client_noncontig" != "0"; then
- AC_DEFINE(HAVE_PAMI_CLIENT_NONCONTIG,1,[Define if PAMI_CLIENT_NONCONTIG is defined in pami.h])
- AC_MSG_RESULT('yes')
-else
- AC_MSG_RESULT('no')
-fi
-
-dnl
-dnl Check for PAMI_CLIENT_MEMORY_OPTIMIZE
-dnl
-AC_MSG_CHECKING([for PAMI_CLIENT_MEMORY_OPTIMIZE support])
-have_pami_client_memory_optimize=0
-AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include "pami.h"]],
- [[int foo = PAMI_CLIENT_MEMORY_OPTIMIZE;]])],
- have_pami_client_memory_optimize=1
-)
-if test "$have_pami_client_memory_optimize" != "0"; then
- AC_DEFINE(HAVE_PAMI_CLIENT_MEMORY_OPTIMIZE,1,[Define if PAMI_CLIENT_MEMORY_OPTIMIZE is defined in pami.h])
- AC_MSG_RESULT('yes')
-else
- AC_MSG_RESULT('no')
-fi
-
-dnl
-dnl Check for PAMI_GEOMETRY_NONCONTIG
-dnl
-AC_MSG_CHECKING([for PAMI_GEOMETRY_NONCONTIG support])
-have_pami_geometry_noncontig=0
-AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include "pami.h"]],
- [[int foo = PAMI_GEOMETRY_NONCONTIG;]])],
- have_pami_geometry_noncontig=1
-)
-if test "$have_pami_geometry_noncontig" != "0"; then
- AC_DEFINE(HAVE_PAMI_GEOMETRY_NONCONTIG,1,[Define if PAMI_GEOMETRY_NONCONTIG is defined in pami.h])
- AC_MSG_RESULT('yes')
-else
- AC_MSG_RESULT('no')
-fi
-
-dnl
-dnl Check for PAMI_GEOMETRY_MEMORY_OPTIMIZE
-dnl
-AC_MSG_CHECKING([for PAMI_GEOMETRY_MEMORY_OPTIMIZE support])
-have_pami_geometry_memory_optimize=0
-AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include "pami.h"]],
- [[int foo = PAMI_GEOMETRY_MEMORY_OPTIMIZE;]])],
- have_pami_geometry_memory_optimize=1
-)
-if test "$have_pami_geometry_memory_optimize" != "0"; then
- AC_DEFINE(HAVE_PAMI_GEOMETRY_MEMORY_OPTIMIZE,1,[Define if PAMI_GEOMETRY_MEMORY_OPTIMIZE is defined in pami.h])
- AC_MSG_RESULT('yes')
-else
- AC_MSG_RESULT('no')
-fi
-
-
-
-
-
-
-
-
-
-
-])dnl end AM_COND_IF(BUILD_PAMID,...)
-])dnl end _BODY
-
-[#] end of __file__
diff --git a/src/mpl/Makefile.am b/src/mpl/Makefile.am
index d4a8675..eb73cca 100644
--- a/src/mpl/Makefile.am
+++ b/src/mpl/Makefile.am
@@ -7,37 +7,38 @@
ACLOCAL_AMFLAGS = -I confdb
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
-noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
-lib at MPLLIBNAME@_la_SOURCES = \
- src/mplstr.c \
- src/mpltrmem.c \
- src/mplenv.c \
- src/mplmsg.c \
- src/mplsock.c
+lib at MPLLIBNAME@_la_SOURCES =
lib at MPLLIBNAME@_la_LDFLAGS = ${lib at MPLLIBNAME@_so_versionflags}
+include src/Makefile.mk
+
MPL_TESTS = strsep
TESTS = $(MPL_TESTS)
check_PROGRAMS = $(MPL_TESTS)
strsep_SOURCES = test/strsep.c
strsep_LDADD = lib at MPLLIBNAME@.la
-mpl_headers = \
- include/mpl.h \
- include/mpl_utlist.h \
- include/mpl_valgrind.h \
- include/mplconfig.h \
- include/mplenv.h \
- include/mplstr.h \
- include/mpltrmem.h \
- include/mplmsg.h \
- include/mpliov.h \
- include/mplsock.h
+mpl_headers = \
+ include/mpl.h \
+ include/mpl_base.h \
+ include/mplconfig.h \
+ include/mpl_utlist.h \
+ include/mpl_valgrind.h \
+ include/mpl_env.h \
+ include/mpl_str.h \
+ include/mpl_trmem.h \
+ include/mpl_msg.h \
+ include/mpl_sock.h \
+ include/mpl_iov.h \
+ include/mpl_bt.h \
+ include/mpl_shm.h
if MPL_EMBEDDED_MODE
noinst_HEADERS = $(mpl_headers)
+noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
else !MPL_EMBEDDED_MODE
include_HEADERS = $(mpl_headers)
+lib_LTLIBRARIES = lib at MPLLIBNAME@.la
endif !MPL_EMBEDDED_MODE
# --------------------------------------------------------------------------
diff --git a/src/mpl/Makefile.in b/src/mpl/Makefile.in
index b4b243b..b9a1275 100644
--- a/src/mpl/Makefile.in
+++ b/src/mpl/Makefile.in
@@ -20,6 +20,48 @@
# See COPYRIGHT in top-level directory.
#
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -101,9 +143,10 @@ subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cc.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
+ $(top_srcdir)/confdb/aclocal_shm.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
$(top_srcdir)/confdb/ax_prefix_config_h.m4 \
- $(top_srcdir)/confdb/libtool.m4 \
+ $(top_srcdir)/confdb/ax_tls.m4 $(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
$(top_srcdir)/confdb/ltsugar.m4 \
$(top_srcdir)/confdb/ltversion.m4 \
@@ -117,13 +160,57 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES = localdefs
+CONFIG_CLEAN_FILES = localdefs include/mpl_timer.h
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
lib at MPLLIBNAME@_la_LIBADD =
am__dirstamp = $(am__leading_dot)dirstamp
-am_lib at MPLLIBNAME@_la_OBJECTS = src/mplstr.lo src/mpltrmem.lo \
- src/mplenv.lo src/mplmsg.lo src/mplsock.lo
+am_lib at MPLLIBNAME@_la_OBJECTS = src/bt/mpl_bt.lo src/dbg/mpl_dbg.lo \
+ src/env/mpl_env.lo src/mem/mpl_trmem.lo src/msg/mpl_msg.lo \
+ src/sock/mpl_sock.lo src/str/mpl_str.lo src/str/mpl_argstr.lo \
+ src/thread/mpl_thread.lo src/thread/mpl_thread_win.lo \
+ src/thread/mpl_thread_solaris.lo \
+ src/thread/mpl_thread_posix.lo \
+ src/timer/mpl_timer_clock_gettime.lo \
+ src/timer/mpl_timer_gcc_ia64_cycle.lo \
+ src/timer/mpl_timer_gethrtime.lo \
+ src/timer/mpl_timer_gettimeofday.lo \
+ src/timer/mpl_timer_linux86_cycle.lo \
+ src/timer/mpl_timer_ppc64_cycle.lo \
+ src/timer/mpl_timer_mach_absolute_time.lo \
+ src/timer/mpl_timer_query_performance_counter.lo \
+ src/timer/mpl_timer_win86_cycle.lo \
+ src/timer/mpl_timer_device.lo src/shm/mpl_shm.lo \
+ src/shm/mpl_shm_sysv.lo src/shm/mpl_shm_mmap.lo \
+ src/shm/mpl_shm_win.lo
lib at MPLLIBNAME@_la_OBJECTS = $(am_lib at MPLLIBNAME@_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -133,6 +220,9 @@ lib at MPLLIBNAME@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(lib at MPLLIBNAME@_la_LDFLAGS) \
$(LDFLAGS) -o $@
+ at MPL_EMBEDDED_MODE_FALSE@am_lib at MPLLIBNAME@_la_rpath = -rpath \
+ at MPL_EMBEDDED_MODE_FALSE@ $(libdir)
+ at MPL_EMBEDDED_MODE_TRUE@am_lib at MPLLIBNAME@_la_rpath =
am__EXEEXT_1 = strsep$(EXEEXT)
am_strsep_OBJECTS = test/strsep.$(OBJEXT)
strsep_OBJECTS = $(am_strsep_OBJECTS)
@@ -178,42 +268,16 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
-am__include_HEADERS_DIST = include/mpl.h include/mpl_utlist.h \
- include/mpl_valgrind.h include/mplconfig.h include/mplenv.h \
- include/mplstr.h include/mpltrmem.h include/mplmsg.h \
- include/mpliov.h include/mplsock.h
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
- test -z "$$files" \
- || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
- || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
- $(am__cd) "$$dir" && rm -f $$files; }; \
- }
-am__installdirs = "$(DESTDIR)$(includedir)"
-am__noinst_HEADERS_DIST = include/mpl.h include/mpl_utlist.h \
- include/mpl_valgrind.h include/mplconfig.h include/mplenv.h \
- include/mplstr.h include/mpltrmem.h include/mplmsg.h \
- include/mpliov.h include/mplsock.h
+am__include_HEADERS_DIST = include/mpl.h include/mpl_base.h \
+ include/mplconfig.h include/mpl_utlist.h \
+ include/mpl_valgrind.h include/mpl_env.h include/mpl_str.h \
+ include/mpl_trmem.h include/mpl_msg.h include/mpl_sock.h \
+ include/mpl_iov.h include/mpl_bt.h include/mpl_shm.h
+am__noinst_HEADERS_DIST = include/mpl.h include/mpl_base.h \
+ include/mplconfig.h include/mpl_utlist.h \
+ include/mpl_valgrind.h include/mpl_env.h include/mpl_str.h \
+ include/mpl_trmem.h include/mpl_msg.h include/mpl_sock.h \
+ include/mpl_iov.h include/mpl_bt.h include/mpl_shm.h
HEADERS = $(include_HEADERS) $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
@@ -413,15 +477,21 @@ TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/confdb/test-driver
TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
$(TEST_LOG_FLAGS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/localdefs.in \
- $(top_srcdir)/confdb/ar-lib $(top_srcdir)/confdb/compile \
- $(top_srcdir)/confdb/config.guess \
+ $(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk \
+ $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk \
+ $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk \
+ $(srcdir)/src/shm/Makefile.mk $(srcdir)/src/sock/Makefile.mk \
+ $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk \
+ $(srcdir)/src/timer/Makefile.mk $(top_srcdir)/confdb/ar-lib \
+ $(top_srcdir)/confdb/compile $(top_srcdir)/confdb/config.guess \
$(top_srcdir)/confdb/config.sub $(top_srcdir)/confdb/depcomp \
$(top_srcdir)/confdb/install-sh $(top_srcdir)/confdb/ltmain.sh \
$(top_srcdir)/confdb/missing $(top_srcdir)/confdb/test-driver \
- $(top_srcdir)/include/config.h.in confdb/ar-lib confdb/compile \
- confdb/config.guess confdb/config.rpath confdb/config.sub \
- confdb/depcomp confdb/install-sh confdb/ltmain.sh \
- confdb/missing
+ $(top_srcdir)/include/config.h.in \
+ $(top_srcdir)/include/mpl_timer.h.in confdb/ar-lib \
+ confdb/compile confdb/config.guess confdb/config.rpath \
+ confdb/config.sub confdb/depcomp confdb/install-sh \
+ confdb/ltmain.sh confdb/missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -464,7 +534,6 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-FROM_MPICH = @FROM_MPICH@
GCOV = @GCOV@
GREP = @GREP@
INSTALL = @INSTALL@
@@ -485,6 +554,8 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPLLIBNAME = @MPLLIBNAME@
+MPL_TIMER_KIND = @MPL_TIMER_KIND@
+MPL_TIMER_TYPE = @MPL_TIMER_TYPE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -551,6 +622,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -561,32 +633,45 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I confdb
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
-noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
-lib at MPLLIBNAME@_la_SOURCES = \
- src/mplstr.c \
- src/mpltrmem.c \
- src/mplenv.c \
- src/mplmsg.c \
- src/mplsock.c
-
+lib at MPLLIBNAME@_la_SOURCES = src/bt/mpl_bt.c src/dbg/mpl_dbg.c \
+ src/env/mpl_env.c src/mem/mpl_trmem.c src/msg/mpl_msg.c \
+ src/sock/mpl_sock.c src/str/mpl_str.c src/str/mpl_argstr.c \
+ src/thread/mpl_thread.c src/thread/mpl_thread_win.c \
+ src/thread/mpl_thread_solaris.c src/thread/mpl_thread_posix.c \
+ src/timer/mpl_timer_clock_gettime.c \
+ src/timer/mpl_timer_gcc_ia64_cycle.c \
+ src/timer/mpl_timer_gethrtime.c \
+ src/timer/mpl_timer_gettimeofday.c \
+ src/timer/mpl_timer_linux86_cycle.c \
+ src/timer/mpl_timer_ppc64_cycle.c \
+ src/timer/mpl_timer_mach_absolute_time.c \
+ src/timer/mpl_timer_query_performance_counter.c \
+ src/timer/mpl_timer_win86_cycle.c src/timer/mpl_timer_device.c \
+ src/shm/mpl_shm.c src/shm/mpl_shm_sysv.c \
+ src/shm/mpl_shm_mmap.c src/shm/mpl_shm_win.c
lib at MPLLIBNAME@_la_LDFLAGS = ${lib at MPLLIBNAME@_so_versionflags}
MPL_TESTS = strsep
strsep_SOURCES = test/strsep.c
strsep_LDADD = lib at MPLLIBNAME@.la
mpl_headers = \
- include/mpl.h \
- include/mpl_utlist.h \
- include/mpl_valgrind.h \
- include/mplconfig.h \
- include/mplenv.h \
- include/mplstr.h \
- include/mpltrmem.h \
- include/mplmsg.h \
- include/mpliov.h \
- include/mplsock.h
+ include/mpl.h \
+ include/mpl_base.h \
+ include/mplconfig.h \
+ include/mpl_utlist.h \
+ include/mpl_valgrind.h \
+ include/mpl_env.h \
+ include/mpl_str.h \
+ include/mpl_trmem.h \
+ include/mpl_msg.h \
+ include/mpl_sock.h \
+ include/mpl_iov.h \
+ include/mpl_bt.h \
+ include/mpl_shm.h
@MPL_EMBEDDED_MODE_TRUE at noinst_HEADERS = $(mpl_headers)
+ at MPL_EMBEDDED_MODE_TRUE@noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
@MPL_EMBEDDED_MODE_FALSE at include_HEADERS = $(mpl_headers)
+ at MPL_EMBEDDED_MODE_FALSE@lib_LTLIBRARIES = lib at MPLLIBNAME@.la
gcov_sources = $(libmpl_la_SOURCES)
# --------------------------------------------------------------------------
@@ -600,7 +685,7 @@ all: all-am
.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk $(srcdir)/src/sock/Makefile.mk $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk $(srcdir)/src/timer/Makefile.mk $(srcdir)/src/shm/Makefile.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -622,6 +707,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
+$(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk $(srcdir)/src/sock/Makefile.mk $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk $(srcdir)/src/timer/Makefile.mk $(srcdir)/src/shm/Makefile.mk $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -648,6 +734,43 @@ distclean-hdr:
-rm -f include/config.h include/stamp-h1
localdefs: $(top_builddir)/config.status $(srcdir)/localdefs.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+include/mpl_timer.h: $(top_builddir)/config.status $(top_srcdir)/include/mpl_timer.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@@ -659,20 +782,121 @@ clean-noinstLTLIBRARIES:
echo rm -f $${locs}; \
rm -f $${locs}; \
}
-src/$(am__dirstamp):
- @$(MKDIR_P) src
- @: > src/$(am__dirstamp)
-src/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/$(DEPDIR)
- @: > src/$(DEPDIR)/$(am__dirstamp)
-src/mplstr.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mpltrmem.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mplenv.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mplmsg.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mplsock.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/bt/$(am__dirstamp):
+ @$(MKDIR_P) src/bt
+ @: > src/bt/$(am__dirstamp)
+src/bt/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/bt/$(DEPDIR)
+ @: > src/bt/$(DEPDIR)/$(am__dirstamp)
+src/bt/mpl_bt.lo: src/bt/$(am__dirstamp) \
+ src/bt/$(DEPDIR)/$(am__dirstamp)
+src/dbg/$(am__dirstamp):
+ @$(MKDIR_P) src/dbg
+ @: > src/dbg/$(am__dirstamp)
+src/dbg/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/dbg/$(DEPDIR)
+ @: > src/dbg/$(DEPDIR)/$(am__dirstamp)
+src/dbg/mpl_dbg.lo: src/dbg/$(am__dirstamp) \
+ src/dbg/$(DEPDIR)/$(am__dirstamp)
+src/env/$(am__dirstamp):
+ @$(MKDIR_P) src/env
+ @: > src/env/$(am__dirstamp)
+src/env/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/env/$(DEPDIR)
+ @: > src/env/$(DEPDIR)/$(am__dirstamp)
+src/env/mpl_env.lo: src/env/$(am__dirstamp) \
+ src/env/$(DEPDIR)/$(am__dirstamp)
+src/mem/$(am__dirstamp):
+ @$(MKDIR_P) src/mem
+ @: > src/mem/$(am__dirstamp)
+src/mem/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mem/$(DEPDIR)
+ @: > src/mem/$(DEPDIR)/$(am__dirstamp)
+src/mem/mpl_trmem.lo: src/mem/$(am__dirstamp) \
+ src/mem/$(DEPDIR)/$(am__dirstamp)
+src/msg/$(am__dirstamp):
+ @$(MKDIR_P) src/msg
+ @: > src/msg/$(am__dirstamp)
+src/msg/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/msg/$(DEPDIR)
+ @: > src/msg/$(DEPDIR)/$(am__dirstamp)
+src/msg/mpl_msg.lo: src/msg/$(am__dirstamp) \
+ src/msg/$(DEPDIR)/$(am__dirstamp)
+src/sock/$(am__dirstamp):
+ @$(MKDIR_P) src/sock
+ @: > src/sock/$(am__dirstamp)
+src/sock/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/sock/$(DEPDIR)
+ @: > src/sock/$(DEPDIR)/$(am__dirstamp)
+src/sock/mpl_sock.lo: src/sock/$(am__dirstamp) \
+ src/sock/$(DEPDIR)/$(am__dirstamp)
+src/str/$(am__dirstamp):
+ @$(MKDIR_P) src/str
+ @: > src/str/$(am__dirstamp)
+src/str/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/str/$(DEPDIR)
+ @: > src/str/$(DEPDIR)/$(am__dirstamp)
+src/str/mpl_str.lo: src/str/$(am__dirstamp) \
+ src/str/$(DEPDIR)/$(am__dirstamp)
+src/str/mpl_argstr.lo: src/str/$(am__dirstamp) \
+ src/str/$(DEPDIR)/$(am__dirstamp)
+src/thread/$(am__dirstamp):
+ @$(MKDIR_P) src/thread
+ @: > src/thread/$(am__dirstamp)
+src/thread/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/thread/$(DEPDIR)
+ @: > src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_win.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_solaris.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_posix.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/timer/$(am__dirstamp):
+ @$(MKDIR_P) src/timer
+ @: > src/timer/$(am__dirstamp)
+src/timer/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/timer/$(DEPDIR)
+ @: > src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_clock_gettime.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gcc_ia64_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gethrtime.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gettimeofday.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_linux86_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_ppc64_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_mach_absolute_time.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_query_performance_counter.lo: \
+ src/timer/$(am__dirstamp) src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_win86_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_device.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/shm/$(am__dirstamp):
+ @$(MKDIR_P) src/shm
+ @: > src/shm/$(am__dirstamp)
+src/shm/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/shm/$(DEPDIR)
+ @: > src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_sysv.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_mmap.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_win.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
lib at MPLLIBNAME@.la: $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_DEPENDENCIES) $(EXTRA_lib at MPLLIBNAME@_la_DEPENDENCIES)
- $(AM_V_CCLD)$(lib at MPLLIBNAME@_la_LINK) $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(lib at MPLLIBNAME@_la_LINK) $(am_lib at MPLLIBNAME@_la_rpath) $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_LIBADD) $(LIBS)
clean-checkPROGRAMS:
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
@@ -697,18 +921,57 @@ strsep$(EXEEXT): $(strsep_OBJECTS) $(strsep_DEPENDENCIES) $(EXTRA_strsep_DEPENDE
mostlyclean-compile:
-rm -f *.$(OBJEXT)
- -rm -f src/*.$(OBJEXT)
- -rm -f src/*.lo
+ -rm -f src/bt/*.$(OBJEXT)
+ -rm -f src/bt/*.lo
+ -rm -f src/dbg/*.$(OBJEXT)
+ -rm -f src/dbg/*.lo
+ -rm -f src/env/*.$(OBJEXT)
+ -rm -f src/env/*.lo
+ -rm -f src/mem/*.$(OBJEXT)
+ -rm -f src/mem/*.lo
+ -rm -f src/msg/*.$(OBJEXT)
+ -rm -f src/msg/*.lo
+ -rm -f src/shm/*.$(OBJEXT)
+ -rm -f src/shm/*.lo
+ -rm -f src/sock/*.$(OBJEXT)
+ -rm -f src/sock/*.lo
+ -rm -f src/str/*.$(OBJEXT)
+ -rm -f src/str/*.lo
+ -rm -f src/thread/*.$(OBJEXT)
+ -rm -f src/thread/*.lo
+ -rm -f src/timer/*.$(OBJEXT)
+ -rm -f src/timer/*.lo
-rm -f test/*.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplenv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplmsg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplsock.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplstr.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mpltrmem.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/bt/$(DEPDIR)/mpl_bt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/dbg/$(DEPDIR)/mpl_dbg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/env/$(DEPDIR)/mpl_env.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mem/$(DEPDIR)/mpl_trmem.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/msg/$(DEPDIR)/mpl_msg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_mmap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_sysv.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_win.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/sock/$(DEPDIR)/mpl_sock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/str/$(DEPDIR)/mpl_argstr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/str/$(DEPDIR)/mpl_str.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_posix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_solaris.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_win.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_clock_gettime.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_device.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gcc_ia64_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gethrtime.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gettimeofday.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_linux86_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_mach_absolute_time.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_ppc64_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_query_performance_counter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_win86_cycle.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at test/$(DEPDIR)/strsep.Po at am__quote@
.c.o:
@@ -740,7 +1003,16 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
- -rm -rf src/.libs src/_libs
+ -rm -rf src/bt/.libs src/bt/_libs
+ -rm -rf src/dbg/.libs src/dbg/_libs
+ -rm -rf src/env/.libs src/env/_libs
+ -rm -rf src/mem/.libs src/mem/_libs
+ -rm -rf src/msg/.libs src/msg/_libs
+ -rm -rf src/shm/.libs src/shm/_libs
+ -rm -rf src/sock/.libs src/sock/_libs
+ -rm -rf src/str/.libs src/str/_libs
+ -rm -rf src/thread/.libs src/thread/_libs
+ -rm -rf src/timer/.libs src/timer/_libs
distclean-libtool:
-rm -f libtool config.lt
@@ -1157,7 +1429,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(includedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -1189,8 +1461,26 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
- -rm -f src/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/$(am__dirstamp)
+ -rm -f src/bt/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/bt/$(am__dirstamp)
+ -rm -f src/dbg/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/dbg/$(am__dirstamp)
+ -rm -f src/env/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/env/$(am__dirstamp)
+ -rm -f src/mem/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mem/$(am__dirstamp)
+ -rm -f src/msg/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/msg/$(am__dirstamp)
+ -rm -f src/shm/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/shm/$(am__dirstamp)
+ -rm -f src/sock/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/sock/$(am__dirstamp)
+ -rm -f src/str/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/str/$(am__dirstamp)
+ -rm -f src/thread/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/thread/$(am__dirstamp)
+ -rm -f src/timer/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/timer/$(am__dirstamp)
-rm -f test/$(DEPDIR)/$(am__dirstamp)
-rm -f test/$(am__dirstamp)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
@@ -1200,12 +1490,12 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
- clean-noinstLTLIBRARIES mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf src/$(DEPDIR) test/$(DEPDIR)
+ -rm -rf src/bt/$(DEPDIR) src/dbg/$(DEPDIR) src/env/$(DEPDIR) src/mem/$(DEPDIR) src/msg/$(DEPDIR) src/shm/$(DEPDIR) src/sock/$(DEPDIR) src/str/$(DEPDIR) src/thread/$(DEPDIR) src/timer/$(DEPDIR) test/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags
@@ -1228,7 +1518,7 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am:
+install-exec-am: install-libLTLIBRARIES
install-html: install-html-am
@@ -1253,7 +1543,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf src/$(DEPDIR) test/$(DEPDIR)
+ -rm -rf src/bt/$(DEPDIR) src/dbg/$(DEPDIR) src/env/$(DEPDIR) src/mem/$(DEPDIR) src/msg/$(DEPDIR) src/shm/$(DEPDIR) src/sock/$(DEPDIR) src/str/$(DEPDIR) src/thread/$(DEPDIR) src/timer/$(DEPDIR) test/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1270,28 +1560,29 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-includeHEADERS
+uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \
check-am clean clean-checkPROGRAMS clean-cscope clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscope cscopelist-am \
- ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
- dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
- distclean-compile distclean-generic distclean-hdr \
- distclean-libtool distclean-tags distcleancheck distdir \
- distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-includeHEADERS install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- recheck tags tags-am uninstall uninstall-am \
- uninstall-includeHEADERS
+ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
+ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-includeHEADERS \
+ install-info install-info-am install-libLTLIBRARIES \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
+ uninstall uninstall-am uninstall-includeHEADERS \
+ uninstall-libLTLIBRARIES
.PRECIOUS: Makefile
diff --git a/src/mpl/aclocal.m4 b/src/mpl/aclocal.m4
index 68cfa1e..abd5f4b 100644
--- a/src/mpl/aclocal.m4
+++ b/src/mpl/aclocal.m4
@@ -1212,8 +1212,10 @@ AC_SUBST([am__untar])
m4_include([confdb/aclocal_cc.m4])
m4_include([confdb/aclocal_coverage.m4])
+m4_include([confdb/aclocal_shm.m4])
m4_include([confdb/aclocal_util.m4])
m4_include([confdb/ax_prefix_config_h.m4])
+m4_include([confdb/ax_tls.m4])
m4_include([confdb/libtool.m4])
m4_include([confdb/ltoptions.m4])
m4_include([confdb/ltsugar.m4])
diff --git a/src/mpl/confdb/aclocal_cc.m4 b/src/mpl/confdb/aclocal_cc.m4
index 92e7ee1..23d7365 100644
--- a/src/mpl/confdb/aclocal_cc.m4
+++ b/src/mpl/confdb/aclocal_cc.m4
@@ -521,7 +521,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -626,13 +626,6 @@ if test "$enable_strict_done" != "yes" ; then
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
- 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
- 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
- *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -645,6 +638,16 @@ if test "$enable_strict_done" != "yes" ; then
PAC_APPEND_FLAG([-std=c89],[pac_cc_strict_flags])
PAC_APPEND_FLAG([-Wdeclaration-after-statement],[pac_cc_strict_flags])
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
+ 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
+ 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
+ *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
+ esac
fi
# See if the above options work with the compiler
diff --git a/src/mpl/confdb/aclocal_check_visibility.m4 b/src/mpl/confdb/aclocal_check_visibility.m4
new file mode 100644
index 0000000..1ea85ba
--- /dev/null
+++ b/src/mpl/confdb/aclocal_check_visibility.m4
@@ -0,0 +1,123 @@
+# This macro set originally copied from hwloc.
+# MPICH modifications:
+# - renamed macro to PAC_CHECK_VISIBILITY
+# - removed C compiler vendor check
+# - sed -e 's/HWLOC/MPICH/gI'
+#
+# Copyright © 2004-2005 The Trustees of Indiana University and Indiana
+# University Research and Technology
+# Corporation. All rights reserved.
+# Copyright © 2004-2005 The University of Tennessee and The University
+# of Tennessee Research Foundation. All rights
+# reserved.
+# Copyright © 2004-2007 High Performance Computing Center Stuttgart,
+# University of Stuttgart. All rights reserved.
+# Copyright © 2004-2005 The Regents of the University of California.
+# All rights reserved.
+# Copyright © 2006-2007 Cisco Systems, Inc. All rights reserved.
+# and renamed/modified for hwloc:
+# Copyright © 2009 Inria. All rights reserved.
+# Copyright © 2009-2010 Université Bordeaux
+# Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer listed
+# in this license in the documentation and/or other materials
+# provided with the distribution.
+#
+# - Neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties. The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# PAC_CHECK_VISIBILITY
+# --------------------------------------------------------
+AC_DEFUN([PAC_CHECK_VISIBILITY],[
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
+ m4_ifdef([AC_PROG_GREP],
+ [AC_REQUIRE([AC_PROG_GREP])],
+ [GREP=grep])
+
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ AC_ARG_ENABLE(visibility,
+ AC_HELP_STRING([--enable-visibility],
+ [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
+
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (disabled)])
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+
+ AC_MSG_CHECKING([if $CC supports $mpich_add])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+ ]],[[fprintf(stderr, "Hello, world\n");]])],
+ [AS_IF([test -s conftest.err],
+ [$GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ AS_IF([test "$?" = "0"], [mpich_add=])])
+ ], [mpich_add=])
+ AS_IF([test "$mpich_add" = ""],
+ [AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes])])
+
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([yes (via $mpich_add)])
+ elif test "$enable_visibility" = "yes"; then
+ AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting])
+ else
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (unsupported)])
+ fi
+ unset mpich_add
+ fi
+
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$mpich_visibility_define],
+ [Whether C compiler supports symbol visibility or not])
+])
diff --git a/src/mpl/confdb/aclocal_fc.m4 b/src/mpl/confdb/aclocal_fc.m4
index b844009..4318e38 100644
--- a/src/mpl/confdb/aclocal_fc.m4
+++ b/src/mpl/confdb/aclocal_fc.m4
@@ -439,7 +439,7 @@ AC_COMPILE_IFELSE([],[
# module tests do not always use the module output flag. See
# FC_MODULE_EXT , where this is determined.
# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
# f90 -moddir=${dir} ## the Sun f90 compiler
# g95 -fmod=${dir}
#
@@ -448,7 +448,7 @@ AC_COMPILE_IFELSE([],[
# users to use. Alternatively they can use an older version of MPICH.
pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
rm -f conftestdir/NONEXISTENT conftestdir/*
PAC_PUSH_FLAG([FCFLAGS])
FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
diff --git a/src/mpl/confdb/aclocal_libs.m4 b/src/mpl/confdb/aclocal_libs.m4
index 09e9c4c..8868e99 100644
--- a/src/mpl/confdb/aclocal_libs.m4
+++ b/src/mpl/confdb/aclocal_libs.m4
@@ -48,7 +48,7 @@ AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
dnl is adding lib64 by default really the right thing to do? What if
dnl we are on a 32-bit host that happens to have both lib dirs available?
[PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
- AS_IF([test -d "${with_$1}/lib64}"],
+ AS_IF([test -d "${with_$1}/lib64"],
[PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
])
])
diff --git a/src/mpl/confdb/aclocal_romio.m4 b/src/mpl/confdb/aclocal_romio.m4
index af80d3c..94f4e2e 100644
--- a/src/mpl/confdb/aclocal_romio.m4
+++ b/src/mpl/confdb/aclocal_romio.m4
@@ -786,28 +786,6 @@ EOF
fi
rm -f conftest$EXEEXT mpitest.c
])dnl
-define(PAC_TEST_MPIU_FUNCS,[
- AC_MSG_CHECKING(support for MPICH memory macros)
- rm -f mpitest.c
- cat > mpitest.c <<EOF
-#include "mpi.h"
-#include "stdio.h"
- main(Int argc, char **argv)
- {
- MPIU_Free(NULL);
- }
-EOF
- rm -f conftest$EXEEXT
- $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
- if test -x conftest$EXEEXT ; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
- else
- AC_MSG_RESULT(no)
- fi
- rm -f conftest$EXEEXT mpitest.c
-])dnl
-dnl
define(PAC_TEST_MPI_GREQUEST,[
AC_MSG_CHECKING(support for generalized requests)
rm -f mpitest.c
diff --git a/src/mpl/confdb/ax_tls.m4 b/src/mpl/confdb/ax_tls.m4
index 3f6a0ac..60657fa 100644
--- a/src/mpl/confdb/ax_tls.m4
+++ b/src/mpl/confdb/ax_tls.m4
@@ -46,7 +46,7 @@
AC_DEFUN([AX_TLS], [
AC_MSG_CHECKING(for thread local storage specifier)
AC_CACHE_VAL(ac_cv_tls, [
- ax_tls_keywords="__thread __declspec(thread) none"
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
for ax_tls_keyword in $ax_tls_keywords; do
case $ax_tls_keyword in
none) ac_cv_tls=none ; break ;;
@@ -69,7 +69,11 @@ AC_DEFUN([AX_TLS], [
PAC_APPEND_FLAG([-shared],[LIBS])
if test "$ac_cv_tls" != "none" ; then
AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([extern $ax_tls_keyword int bar;],[++bar;])],
+ [AC_LANG_PROGRAM(
+ [
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+ ],[++bar;])],
[ac_cv_tls=$ax_tls_keyword],
[ac_cv_tls=none])
fi
@@ -81,10 +85,7 @@ AC_DEFUN([AX_TLS], [
])
if test "$ac_cv_tls" != "none"; then
- # MPICH modification: this was "TLS" before instead of
- # "MPICH_TLS_SPECIFIER", but TLS had a reasonably high chance of conflicting
- # with a system library.
- AC_DEFINE_UNQUOTED([MPICH_TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+ AC_DEFINE_UNQUOTED([TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
fi
AC_MSG_RESULT($ac_cv_tls)
])
diff --git a/src/mpl/confdb/config.guess b/src/mpl/confdb/config.guess
index 6c32c86..1659250 100755
--- a/src/mpl/confdb/config.guess
+++ b/src/mpl/confdb/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/src/mpl/confdb/config.sub b/src/mpl/confdb/config.sub
index 7ffe373..1acc966 100755
--- a/src/mpl/confdb/config.sub
+++ b/src/mpl/confdb/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/src/mpl/confdb/install-sh b/src/mpl/confdb/install-sh
index 0b0fdcb..59990a1 100755
--- a/src/mpl/confdb/install-sh
+++ b/src/mpl/confdb/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/src/mpl/confdb/libtool.m4 b/src/mpl/confdb/libtool.m4
index 86ff5d9..2579f49 100644
--- a/src/mpl/confdb/libtool.m4
+++ b/src/mpl/confdb/libtool.m4
@@ -2890,6 +2890,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3549,7 +3561,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
@@ -4427,7 +4439,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4939,6 +4951,9 @@ m4_if([$1], [CXX], [
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -5001,6 +5016,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5255,7 +5273,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -5776,6 +5794,7 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5797,7 +5816,7 @@ _LT_EOF
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
diff --git a/src/mpl/confdb/ltmain.sh b/src/mpl/confdb/ltmain.sh
index 0f0a2da..147d758 100644
--- a/src/mpl/confdb/ltmain.sh
+++ b/src/mpl/confdb/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,10 +7272,13 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
continue
fi # $pass = conv
@@ -8823,6 +8829,9 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
esac
;;
no)
diff --git a/src/mpl/confdb/random_r.m4 b/src/mpl/confdb/random_r.m4
new file mode 100644
index 0000000..8d04a27
--- /dev/null
+++ b/src/mpl/confdb/random_r.m4
@@ -0,0 +1,43 @@
+# serial 5
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RANDOM_R],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
+ if test $ac_cv_header_random_h = no; then
+ HAVE_RANDOM_H=0
+ fi
+
+ AC_CHECK_TYPES([struct random_data],
+ [], [HAVE_STRUCT_RANDOM_DATA=0],
+ [[#include <stdlib.h>
+ #if HAVE_RANDOM_H
+ # include <random.h>
+ #endif
+ ]])
+
+ dnl On AIX and OSF/1, these functions exist, but with different declarations.
+ dnl Override them all.
+ case "$host_os" in
+ aix* | osf*)
+ REPLACE_RANDOM_R=1
+ ;;
+ *)
+ AC_CHECK_FUNCS([random_r])
+ if test $ac_cv_func_random_r = no; then
+ HAVE_RANDOM_R=0
+ fi
+ ;;
+ esac
+])
+
+# Prerequisites of lib/random_r.c.
+AC_DEFUN([gl_PREREQ_RANDOM_R], [
+ :
+])
diff --git a/src/mpl/confdb/stdlib_h.m4 b/src/mpl/confdb/stdlib_h.m4
new file mode 100644
index 0000000..19107c4
--- /dev/null
+++ b/src/mpl/confdb/stdlib_h.m4
@@ -0,0 +1,119 @@
+# stdlib_h.m4 serial 42
+dnl Copyright (C) 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_NEXT_HEADERS([stdlib.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+ ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
+ initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
+ posix_openpt ptsname ptsname_r random random_r realpath rpmatch
+ secure_getenv setenv setstate setstate_r srandom srandom_r
+ strtod strtoll strtoull unlockpt unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT])
+ GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
+ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
+ GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+ GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
+ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
+ GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT])
+ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
+ GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC])
+ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
+ GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP])
+ GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS])
+ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
+ GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS])
+ GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT])
+ GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME])
+ GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R])
+ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
+ GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
+ GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
+ GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
+ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+ GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
+ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
+ GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
+ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
+ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
+ GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
+ GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
+ GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX])
+ GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT])
+ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
+ GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
+ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
+ HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP])
+ HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS])
+ HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP])
+ HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS])
+ HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT])
+ HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME])
+ HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R])
+ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
+ HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
+ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
+ HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
+ HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
+ HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
+ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
+ REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC])
+ REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+ REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
+ REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
+ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
+ REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
+ REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC])
+ REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
+ REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
+ REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/src/mpl/configure b/src/mpl/configure
index 3c6ee8c..d8a1687 100755
--- a/src/mpl/configure
+++ b/src/mpl/configure
@@ -592,7 +592,7 @@ PACKAGE_STRING='MPL 0.1'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
-ac_unique_file="src/mplstr.c"
+ac_unique_file="src/str/mpl_str.c"
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
@@ -634,12 +634,13 @@ am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
libmpl_so_versionflags
+MPL_TIMER_TYPE
+MPL_TIMER_KIND
BUILD_COVERAGE_FALSE
BUILD_COVERAGE_TRUE
GCOV
MPL_EMBEDDED_MODE_FALSE
MPL_EMBEDDED_MODE_TRUE
-FROM_MPICH
libmpl_so_version
MPLLIBNAME
CPP
@@ -736,6 +737,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -768,8 +770,14 @@ with_aix_soname
with_gnu_ld
with_sysroot
enable_libtool_lock
+enable_embedded
+enable_g
enable_coverage
with_valgrind
+enable_timer_type
+enable_yield
+with_thread_package
+with_shared_memory
enable_versioning
'
ac_precious_vars='build_alias
@@ -783,7 +791,6 @@ CPPFLAGS
LT_SYS_LIBRARY_PATH
CPP
MPLLIBNAME
-FROM_MPICH
GCOV'
@@ -823,6 +830,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1075,6 +1083,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1212,7 +1229,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1365,6 +1382,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1414,7 +1432,33 @@ Optional Features:
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-embedded Build MPL in embedded mode (default is no)
+ --enable-g=option Control the level of debugging support in MPL.
+ "option" is a list of comma separated names. Default
+ is "all". none|no - No debugging log - Enable debug
+ event logging mem - Enable memory tracing yes|all -
+ All of the above choices (except "none", obviously)
--enable-coverage Turn on coverage analysis using gcc and gcov
+ --enable-timer-type=name - Select the timer to use for MPI_Wtime and
+ internal timestamps.
+ ppc64_cycle - Powerpc-64bit; returns cycle counts using timebase register
+ gethrtime - Solaris timer (Solaris systems only)
+ clock_gettime - Posix timer (where available)
+ gettimeofday - Most Unix systems
+ linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
+ gcc_ia64_cycle - IPF ar.itc timer*
+ mach_absolute_time - Mach absolute time (alternative to clock_gettime
+ for OSX)
+ device - The timer is provided by the device
+
+ *Note that the cycle timers are intended to be used by
+ developers for internal low-level timing. Normal users should
+ not use these as they are not guaranteed to be accurate in
+ certain situations.
+
+ --enable-yield choose a method to yield the processor in busy
+ loops. Available methods are: sched_yield, yield,
+ select, usleep, sleep, nothing
--enable-versioning Enable library versioning
Optional Packages:
@@ -1432,6 +1476,15 @@ Optional Packages:
version issues)
--with-valgrind=PATH use valgrind headers installed in PATH (default is
"yes", use no special path)
+ --with-thread-package=package Thread package to use. Supported thread packages include:
+ posix or pthreads - POSIX threads (default, if required)
+ solaris - Solaris threads (Solaris OS only)
+ win - windows threads
+ none - no threads
+
+ --with-shared-memory=auto|sysv|mmap
+ create shared memory using sysv or mmap (default is
+ auto)
Some influential environment variables:
CC C compiler command
@@ -1446,7 +1499,6 @@ Some influential environment variables:
CPP C preprocessor
MPLLIBNAME can be used to override the name of the MPL library (default:
"mpl")
- FROM_MPICH set to "yes" if building MPL inside of MPICH
GCOV name/path for the gcov utility
Use these variables to override the choices made by `configure' or to help
@@ -1876,6 +1928,52 @@ fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
@@ -5198,7 +5296,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
@@ -8890,6 +8988,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
esac
ld_shlibs=yes
@@ -9144,7 +9245,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -9817,6 +9918,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -9838,7 +9940,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -10953,6 +11055,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -12227,9 +12341,52 @@ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-# TODO: could add a --enable-embedded or similar to also control this
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports __builtin_expect" >&5
+$as_echo_n "checking if C compiler supports __builtin_expect... " >&6; }
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ return __builtin_expect(1, 1) ? 1 : 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ have_builtin_expect=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ have_builtin_expect=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test x$have_builtin_expect = xyes ; then
+
+$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
+
+fi
+
+
+# Check whether --enable-embedded was given.
+if test "${enable_embedded+set}" = set; then :
+ enableval=$enable_embedded; embedded=yes
+else
+ embedded=no
+fi
- if test "x${FROM_MPICH}" = "xyes"; then
+ if test "x${embedded}" = "xyes"; then
MPL_EMBEDDED_MODE_TRUE=
MPL_EMBEDDED_MODE_FALSE='#'
else
@@ -12238,6 +12395,67 @@ else
fi
+# Check whether --enable-g was given.
+if test "${enable_g+set}" = set; then :
+ enableval=$enable_g;
+else
+ enable_g=none
+fi
+
+
+# enable-g
+# strip off multiple options, separated by commas
+
+ if test -z "${pac_save_IFS_nesting}" ; then
+ pac_save_IFS_nesting=0
+ fi
+ eval pac_save_IFS_${pac_save_IFS_nesting}='"$IFS"'
+ pac_save_IFS_nesting=`expr ${pac_save_IFS_nesting} + 1`
+
+IFS=","
+for option in $enable_g ; do
+ case "$option" in
+ log)
+ enable_g_log=yes
+ ;;
+
+ mem)
+ enable_g_mem=yes
+ ;;
+
+ all|yes)
+ enable_g_log=yes
+ enable_g_mem=yes
+ ;;
+
+ no|none)
+ ;;
+
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $option for enable-g" >&5
+$as_echo "$as_me: WARNING: Unknown value $option for enable-g" >&2;}
+ ;;
+ esac
+done
+
+ pac_save_IFS_nesting=`expr ${pac_save_IFS_nesting} - 1`
+ eval IFS="\$pac_save_IFS_${pac_save_IFS_nesting}"
+ eval pac_save_IFS_${pac_save_IFS_nesting}=""
+
+
+if test "$enable_g_log" = "yes" ; then
+
+$as_echo "#define USE_DBG_LOGGING 1" >>confdefs.h
+
+fi
+
+if test "$enable_g_mem" = "yes" ; then
+
+$as_echo "#define USE_MEMORY_TRACING 1" >>confdefs.h
+
+fi
+
+
# support gcov test coverage information
@@ -12426,7 +12644,7 @@ $as_echo "#define HAVE___TYPEOF 1" >>confdefs.h
fi
-for ac_header in stdio.h stdlib.h string.h stdarg.h ctype.h search.h sys/types.h sys/uio.h
+for ac_header in stdio.h stdlib.h string.h stdarg.h ctype.h sys/types.h sys/uio.h execinfo.h backtrace.h libunwind.h unistd.h errno.h windows.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -12600,183 +12818,1846 @@ $as_echo "#define HAVE_BROKEN_VALGRIND 1" >>confdefs.h
fi
fi
-## Enable creation of libtool-style versioning or no versioning
-# Check whether --enable-versioning was given.
-if test "${enable_versioning+set}" = set; then :
- enableval=$enable_versioning;
-else
- enable_versioning=yes
-fi
-
-if test "$enable_versioning" = "yes" ; then
- libmpl_so_versionflags="-version-info \$(libmpl_so_version)"
-else
- libmpl_so_versionflags="-avoid-version"
-fi
-export libmpl_so_versionflags
+#######################################################################
+## TIMER CODE
+#######################################################################
+# ----------------------------------------------------------------------------
+# Support for timers. The following code processes the
+# --enable-timer-type=name argument and selects the timer based on
+# both that field and what configure is able to determine is available.
+# The file src/include/mpl_timer.h is also created.
+# ----------------------------------------------------------------------------
-#######################################################################
+# clock_gettime is the POSIX gettimeofday
+# gethrtime is the Solaris high-resolution timer
+# Check whether --enable-timer-type was given.
+if test "${enable_timer_type+set}" = set; then :
+ enableval=$enable_timer_type; timer_type=$enable_timer_type
+fi
-# Check for strdup
-for ac_func in strdup
+## The user did not specify a timer type. Try to find a sane option
+## that is supported by the platform.
+if test -z "$timer_type" ; then
+ # Try to pick a timer based on what is available
+ for ac_func in clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday
do :
- ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
-if test "x$ac_cv_func_strdup" = xyes; then :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_STRDUP 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
-if test "$ac_cv_func_strdup" = "yes" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
-$as_echo_n "checking whether strdup needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strdup+:} false; then :
+ if test "$ac_cv_func_gethrtime" = "yes" ; then
+ # Sigh. The Solaris include files do not define hrtime_t
+ # Before we accept this choice, make sure that we can
+ # do arithmetic with hrtime_t .
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that hrtime_t is properly defined for gethrtime" >&5
+$as_echo_n "checking that hrtime_t is properly defined for gethrtime... " >&6; }
+if ${pac_cv_hrtime_works+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h>
-void (*fptr)(void) = (void(*)(void))strdup;
+
+#include <sys/time.h>
+
int
main ()
{
-
+hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strdup=no
+ pac_cv_hrtime_works=yes
else
- pac_cv_func_decl_strdup=yes
+ pac_cv_hrtime_works=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
-$as_echo "$pac_cv_func_decl_strdup" >&6; }
-if test "$pac_cv_func_decl_strdup" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRDUP_DECL 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_hrtime_works" >&5
+$as_echo "$pac_cv_hrtime_works" >&6; }
+ # A more ambitious test would look to see if casting an
+ # hrtime_t to int64_t works, and even more ambitious
+ # would check whether long or long long was 64 bits (or even
+ # better, the sizeof hrtime_t).
+ # AC_CHECK_FUNCS has false positive when checking whether gethrtime is
+ # available on Solaris with strict configuration. We must use
+ # AC_CHECK_DECL to confirm it.
+ ac_fn_c_check_decl "$LINENO" "gethrtime" "ac_cv_have_decl_gethrtime" "$ac_includes_default"
+if test "x$ac_cv_have_decl_gethrtime" = xyes; then :
fi
+ fi
+ if test "$ac_cv_func_gethrtime" = "yes" -a \
+ "$ac_cv_has_decl_gethrtime" = "yes" -a \
+ "$pac_cv_hrtime_works" = "yes" ; then
+ timer_type=gethrtime
+ elif test "$ac_cv_func_clock_gettime" = "yes" -a \
+ "$ac_cv_func_clock_getres" = "yes" ; then
+ # Test on both because some systems (e.g., cygwin) provide
+ # clock_gettime but not clock_getres
+ timer_type=clock_gettime
+ elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
+ timer_type=mach_absolute_time
+ elif test "$ac_cv_func_gettimeofday" = "yes" ; then
+ timer_type=gettimeofday
+ fi
+fi
+if test -z "$timer_type" ; then
+ as_fn_error $? "No timer found" "$LINENO" 5
fi
-# Check for snprintf
-for ac_func in snprintf
-do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
-_ACEOF
+# Check for valid timer and select datatypes for the time stamp
+case "$timer_type" in
+
+ gethrtime)
+ MPL_TIMER_TYPE=hrtime_t
+ ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes; then :
+
+else
+
+ as_fn_error $? "Requested timer gethrtime is not available" "$LINENO" 5
fi
-done
-if test "$ac_cv_func_snprintf" = "yes" ; then
+ ;;
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
+ clock_gettime)
+ missing_function=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
$as_echo_n "(cached) " >&6
else
-
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime ();
int
main ()
{
-
+return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
-else
- pac_cv_func_decl_snprintf=yes
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_clock_gettime=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_clock_gettime+:} false; then :
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
-_ACEOF
-
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+else
+ ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+else
+ as_fn_error $? "clock_gettime is not available" "$LINENO" 5
fi
-# Check for strncmp
-for ac_func in strncmp
-do :
- ac_fn_c_check_func "$LINENO" "strncmp" "ac_cv_func_strncmp"
-if test "x$ac_cv_func_strncmp" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRNCMP 1
-_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_getres" >&5
+$as_echo_n "checking for library containing clock_getres... " >&6; }
+if ${ac_cv_search_clock_getres+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_getres ();
+int
+main ()
+{
+return clock_getres ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_clock_getres=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_clock_getres+:} false; then :
+ break
fi
done
+if ${ac_cv_search_clock_getres+:} false; then :
-if test "$ac_cv_func_strncmp" = "yes" ; then
+else
+ ac_cv_search_clock_getres=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_getres" >&5
+$as_echo "$ac_cv_search_clock_getres" >&6; }
+ac_res=$ac_cv_search_clock_getres
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strncmp needs a declaration" >&5
-$as_echo_n "checking whether strncmp needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strncmp+:} false; then :
+else
+ as_fn_error $? "clock_getres is not available" "$LINENO" 5
+fi
+
+ MPL_TIMER_TYPE="struct timespec"
+ # AIX does not always define struct timespec (!)
+ # Make sure that we can use struct timespec
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h" >&5
+$as_echo_n "checking whether struct timespec is defined in time.h... " >&6; }
+if ${pac_cv_struct_timespec_defined+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h>
-void (*fptr)(void) = (void(*)(void))strncmp;
+
+#include <time.h>
int
main ()
{
+ struct timespec t;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strncmp=no
+ pac_cv_struct_timespec_defined=yes
else
- pac_cv_func_decl_strncmp=yes
+ pac_cv_struct_timespec_defined=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strncmp" >&5
-$as_echo "$pac_cv_func_decl_strncmp" >&6; }
-if test "$pac_cv_func_decl_strncmp" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRNCMP_DECL 1
-_ACEOF
-
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined" >&5
+$as_echo "$pac_cv_struct_timespec_defined" >&6; }
+ if test "$pac_cv_struct_timespec_defined" != "yes" ; then
+ # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500" >&5
+$as_echo_n "checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500... " >&6; }
+if ${pac_cv_struct_timespec_defined_with_xopen500+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Check for putenv
+#define _XOPEN_SOURCE 500
+#include <time.h>
+int
+main ()
+{
+
+ struct timespec t;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_struct_timespec_defined_with_xopen500=yes
+else
+ pac_cv_struct_timespec_defined_with_xopen500=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined_with_xopen500" >&5
+$as_echo "$pac_cv_struct_timespec_defined_with_xopen500" >&6; }
+ if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
+ # We need to define _XOPEN_SOURCE=500, but we need to ensure that
+ # this is done before any include files are loaded. At
+ # this point it is really too late to add this definition,
+ # since it may make other tests incompatible.
+ as_fn_error $? "The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure" "$LINENO" 5
+ fi
+ fi
+ #
+ # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
+ # time.h is required (see pages 45 and 46 in the POSIX standard).
+ # See if we can compile
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLOCK_REALTIME defined in time.h" >&5
+$as_echo_n "checking for CLOCK_REALTIME defined in time.h... " >&6; }
+if ${pac_cv_posix_clock_realtime+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <time.h>
+int
+main ()
+{
+
+ clockid_t cid = CLOCK_REALTIME;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_posix_clock_realtime=yes
+else
+ pac_cv_posix_clock_realtime=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_posix_clock_realtime" >&5
+$as_echo "$pac_cv_posix_clock_realtime" >&6; }
+ if test "$pac_cv_posix_clock_realtime" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: POSIX timer requires definitions in time.h" >&5
+$as_echo "$as_me: WARNING: POSIX timer requires definitions in time.h" >&2;}
+ # Check for the definition in sys/time.h, which is where
+ # OpenBSD and FreeBSD have put it by mistake
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <time.h>
+#include <sys/time.h>
+int
+main ()
+{
+
+ clockid_t cid = CLOCK_REALTIME;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_posix_clock_realtime=yes
+else
+ pac_cv_posix_clock_realtime=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$pac_cv_posix_clock_realtime" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sys/time.h required for POSIX timer" >&5
+$as_echo "$as_me: WARNING: sys/time.h required for POSIX timer" >&2;}
+
+$as_echo "#define NEEDS_SYS_TIME_H 1" >>confdefs.h
+
+ else
+ as_fn_error $? "Cannot find the definition of CLOCK_REALTIME for the POSIX timer" "$LINENO" 5
+ fi
+ fi
+ ;;
+
+ gettimeofday)
+ MPL_TIMER_TYPE="struct timeval"
+ # We may have already tested for gettimeofday. If we got a "yes",
+ # we're good to go
+ if test "$ac_cv_func_gettimeofday" != "yes" ; then
+ ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes; then :
+
+else
+
+ as_fn_error $? "Requested timer gettimeofday is not available" "$LINENO" 5
+
+fi
+
+ fi
+ ;;
+
+ linux86_cycle|linux86_cycle_2)
+
+# The following AC_TRY_RUN statements are needed because x86_64 compilers
+# usually know about rdtscp but the cpu may or may not actually implement the
+# feature. This is not cross-compile safe, unfortunately. In the long run we
+# should allow the user to override this with a configure flag.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that linux86 cycle counter is available" >&5
+$as_echo_n "checking that linux86 cycle counter is available... " >&6; }
+if ${pac_cv_linux86_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtscp
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc64
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc32
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtsc
+else
+ pac_cv_linux86_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* rdtscp */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtscp
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* cpuid 64 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc64
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* cpuid 32 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc32
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* simple */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtsc
+else
+ pac_cv_linux86_cycle=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_linux86_cycle" >&5
+$as_echo "$pac_cv_linux86_cycle" >&6; }
+
+ case "$pac_cv_linux86_cycle" in
+ "rdtscp")
+
+$as_echo "#define LINUX86_CYCLE_RDTSCP 1" >>confdefs.h
+
+ ;;
+ "cpuid_rdtsc64")
+
+$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC64 1" >>confdefs.h
+
+ ;;
+ "cpuid_rdtsc32")
+
+$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC32 1" >>confdefs.h
+
+ ;;
+ "rdtsc")
+
+$as_echo "#define LINUX86_CYCLE_RDTSC 1" >>confdefs.h
+
+ ;;
+ *)
+ cpu_gcc_x86_cycle=no
+ ;;
+ esac
+
+ if test "$cpu_gcc_x86_cycle" = "no" ; then
+ as_fn_error $? "Linux86 cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="long long"
+ ;;
+
+ gcc_ia64_cycle)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that IPF timer is available" >&5
+$as_echo_n "checking that IPF timer is available... " >&6; }
+if ${pac_cv_ia64_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long var, *var_ptr=&var;
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ var=__getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gcc_ia64_cycle=yes
+else
+ pac_cv_gcc_ia64_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_ia64_cycle" >&5
+$as_echo "$pac_cv_ia64_cycle" >&6; }
+ if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
+ as_fn_error $? "IPF cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="long"
+ ;;
+
+ mach_absolute_time)
+ ac_fn_c_check_func "$LINENO" "mach_absolute_time" "ac_cv_func_mach_absolute_time"
+if test "x$ac_cv_func_mach_absolute_time" = xyes; then :
+
+else
+ as_fn_error $? "mach_absolute_time is not available" "$LINENO" 5
+fi
+
+ ac_fn_c_check_func "$LINENO" "mach_timebase_info" "ac_cv_func_mach_timebase_info"
+if test "x$ac_cv_func_mach_timebase_info" = xyes; then :
+
+else
+ as_fn_error $? "mach_timebase_info is not available" "$LINENO" 5
+fi
+
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+
+ device)
+ # The device selected should export the datatype for the timer
+ MPL_TIMER_TYPE="void *"
+ ;;
+
+ ppc64_cycle)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that ppc64 timebase cycle counter is available" >&5
+$as_echo_n "checking that ppc64 timebase cycle counter is available... " >&6; }
+if ${pac_cv_ppc64_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+
+ unsigned temp;
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (0x10D));
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_ppc64_cycle=yes
+else
+ pac_cv_ppc64_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_ppc64_cycle" >&5
+$as_echo "$pac_cv_ppc64_cycle" >&6; }
+ if test "pac_cv_ppc64_cycle" != "yes" ; then
+ as_fn_error $? "The PPC64 cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+ *)
+ as_fn_error $? "Invalid timer type $timer_type" "$LINENO" 5
+ ;;
+esac
+# Convert timer type to upper case
+timer_type=`echo $timer_type | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+MPL_TIMER_KIND=MPL_TIMER_KIND__$timer_type
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Timer type selected is $timer_type" >&5
+$as_echo "$as_me: Timer type selected is $timer_type" >&6;}
+
+#######################################################################
+## END OF TIMER CODE
+#######################################################################
+
+
+#######################################################################
+## START OF PROCESSOR YIELD CODE
+#######################################################################
+# If the user specified a method to use, we check if it's available.
+# If a method was not specified, we make a guess based on the OS. The
+# default is to use sched_yield() or yield() if one is available,
+# otherwise, default to nothing. After that we define the appropriate
+# macro.
+
+for ac_header in sched.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
+if test "x$ac_cv_header_sched_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHED_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in unistd.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_UNISTD_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in sys/select.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SELECT_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in sched_yield yield usleep sleep select
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep needs a declaration" >&5
+$as_echo_n "checking whether usleep needs a declaration... " >&6; }
+if ${pac_cv_func_decl_usleep+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))usleep;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_usleep=no
+else
+ pac_cv_func_decl_usleep=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_usleep" >&5
+$as_echo "$pac_cv_func_decl_usleep" >&6; }
+if test "$pac_cv_func_decl_usleep" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_USLEEP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check whether --enable-yield was given.
+if test "${enable_yield+set}" = set; then :
+ enableval=$enable_yield; case $enableval in #(
+ sched_yield) :
+ if test "x$ac_cv_func_sched_yield" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ yield) :
+ if test "x$ac_cv_func_yield" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ select) :
+ if test "x$ac_cv_func_select" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ usleep) :
+ if test "x$ac_cv_func_usleep" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ sleep) :
+ if test "x$ac_cv_func_sleep" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ nothing|no|none) :
+ ;; #(
+ *) :
+ as_fn_error $? "Invalid option $enableval for --enable-yield" "$LINENO" 5 ;;
+esac
+
+ if test "x$enable_yield" = "xunavail"; then :
+ as_fn_error $? "Yield method $enableval is not available on this platform." "$LINENO" 5
+fi
+
+else
+ # none specified by user; make a guess based on os
+ case $host in #(
+ *-*-darwin*) :
+ # In Lion, sched_yield worked but none of the other options had any effect
+ if test "x$ac_cv_func_sched_yield" = "xyes"; then :
+ enable_yield=sched_yield
+else
+ enable_yield=nothing
+fi ;; #(
+ *-*-linux*) :
+ # sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
+ enable_yield=nothing ;; #(
+ *) :
+ # default: just use sched_yield() or yield()
+ if test "x$ac_cv_func_sched_yield" = "xyes"; then :
+ enable_yield=sched_yield
+elif test "x$ac_cv_func_yield" = "xyes"; then :
+ enable_yield=yield
+else
+ enable_yield=nothing
+fi ;;
+esac
+
+
+fi
+
+
+# set the appropriate macro
+case $enable_yield in #(
+ sched_yield) :
+
+$as_echo "#define USE_SCHED_YIELD_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ yield) :
+
+$as_echo "#define USE_YIELD_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ select) :
+
+$as_echo "#define USE_SELECT_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ usleep) :
+
+$as_echo "#define USE_USLEEP_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ sleep) :
+
+$as_echo "#define USE_SLEEP_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ nothing|no|none) :
+
+$as_echo "#define USE_NOTHING_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ *) :
+ as_fn_error $? "Invalid value $enable_yield for enable_yield." "$LINENO" 5
+ ;;
+esac
+
+#######################################################################
+## END OF PROCESSOR YIELD CODE
+#######################################################################
+
+
+#######################################################################
+## START OF THREADS CODE
+#######################################################################
+
+# Check whether --with-thread-package was given.
+if test "${with_thread_package+set}" = set; then :
+ withval=$with_thread_package;
+else
+ with_thread_package=posix
+fi
+
+
+if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
+ with_thread_package=none
+fi
+
+if test "${with_thread_package}" = "yes" ; then
+ with_thread_package=posix
+fi
+
+if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
+ as_fn_error $? "if no thread package is available, use --enable-threads=single or funneled" "$LINENO" 5
+fi
+
+THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_INVALID
+case $with_thread_package in
+ posix|pthreads)
+ with_thread_package=posix
+ for ac_header in pthread.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_H 1
+_ACEOF
+
+fi
+
+done
+
+
+ # If pthreads library is found, just include it on the link line. We don't try
+ # to test if the C compiler needs it or not, since the C++ or Fortran
+ # compilers might need it even if the C compiler doesn't
+ # (nvcc with gfortran, for example).
+ #
+ # OSF1 has __pthread_create but not pthread_create (because of
+ # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_key_create in -lpthread" >&5
+$as_echo_n "checking for pthread_key_create in -lpthread... " >&6; }
+if ${ac_cv_lib_pthread_pthread_key_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_key_create ();
+int
+main ()
+{
+return pthread_key_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthread_pthread_key_create=yes
+else
+ ac_cv_lib_pthread_pthread_key_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_key_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_key_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_key_create" = xyes; then :
+ have_pthreads=yes
+fi
+
+ if test "$have_pthreads" = "yes" ; then
+
+
+ if echo "$LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-lpthread', not prepending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-lpthread', prepending" >&5
+ LIBS="-lpthread $LIBS"
+
+fi
+
+ fi
+
+ for ac_func in pthread_yield
+do :
+ ac_fn_c_check_func "$LINENO" "pthread_yield" "ac_cv_func_pthread_yield"
+if test "x$ac_cv_func_pthread_yield" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_YIELD 1
+_ACEOF
+
+fi
+done
+
+
+ # this check should come after the AC_CHECK_LIB for -lpthread
+ ac_fn_c_check_func "$LINENO" "pthread_key_create" "ac_cv_func_pthread_key_create"
+if test "x$ac_cv_func_pthread_key_create" = xyes; then :
+
+else
+ as_fn_error $? "unable to find pthreads library" "$LINENO" 5
+fi
+
+
+ # Check for a routine that specify a routine to call on
+ # thread exit. We can use this to release memory that may
+ # be allocated by the MPL library in the thread.
+ # A complication: pthread_cleanup_push may be a macro; in that
+ # case, check_funcs will fail to find it.
+ # Under OSX, pthread_cleanup_push and pop are macros that must
+ # appear together in the same lexical scope, and hence are
+ # really useless in libraries that may allocate data within
+ # a user-managed thread.
+ for ac_func in pthread_cleanup_push
+do :
+ ac_fn_c_check_func "$LINENO" "pthread_cleanup_push" "ac_cv_func_pthread_cleanup_push"
+if test "x$ac_cv_func_pthread_cleanup_push" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_CLEANUP_PUSH 1
+_ACEOF
+
+fi
+done
+
+ if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_cleanup_push is available (may be a macro in pthread.h)" >&5
+$as_echo_n "checking whether pthread_cleanup_push is available (may be a macro in pthread.h)... " >&6; }
+if ${pac_cv_func_pthread_cleanup_push+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <pthread.h>
+void f1(void *a) { return; }
+int
+main ()
+{
+pthread_cleanup_push( f1, (void *)0 );
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_func_pthread_cleanup_push=yes
+else
+ pac_cv_func_pthread_cleanup_push=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_pthread_cleanup_push" >&5
+$as_echo "$pac_cv_func_pthread_cleanup_push" >&6; }
+ if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
+
+$as_echo "#define HAVE_PTHREAD_CLEANUP_PUSH_MACRO 1" >>confdefs.h
+
+ fi
+
+ fi
+
+ # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP" >&5
+$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP... " >&6; }
+if ${pac_cv_has_pthread_mutex_errorcheck_np+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int a=PTHREAD_MUTEX_ERRORCHECK_NP;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_has_pthread_mutex_errorcheck_np=yes
+else
+ pac_cv_has_pthread_mutex_errorcheck_np=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck_np" >&5
+$as_echo "$pac_cv_has_pthread_mutex_errorcheck_np" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK" >&5
+$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK... " >&6; }
+if ${pac_cv_has_pthread_mutex_errorcheck+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int a=PTHREAD_MUTEX_ERRORCHECK;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_has_pthread_mutex_errorcheck=yes
+else
+ pac_cv_has_pthread_mutex_errorcheck=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck" >&5
+$as_echo "$pac_cv_has_pthread_mutex_errorcheck" >&6; }
+
+ if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
+
+$as_echo "#define PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK" >>confdefs.h
+
+ elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
+
+$as_echo "#define PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK_NP" >>confdefs.h
+
+ fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_mutexattr_settype needs a declaration" >&5
+$as_echo_n "checking whether pthread_mutexattr_settype needs a declaration... " >&6; }
+if ${pac_cv_func_decl_pthread_mutexattr_settype+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+void (*fptr)(void) = (void(*)(void))pthread_mutexattr_settype;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_pthread_mutexattr_settype=no
+else
+ pac_cv_func_decl_pthread_mutexattr_settype=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_pthread_mutexattr_settype" >&5
+$as_echo "$pac_cv_func_decl_pthread_mutexattr_settype" >&6; }
+if test "$pac_cv_func_decl_pthread_mutexattr_settype" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL 1
+_ACEOF
+
+
+fi
+
+
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_POSIX
+ ;;
+ solaris)
+ for ac_header in thread.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "thread.h" "ac_cv_header_thread_h" "$ac_includes_default"
+if test "x$ac_cv_header_thread_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_THREAD_H 1
+_ACEOF
+
+fi
+
+done
+
+ for ac_func in thr_yield
+do :
+ ac_fn_c_check_func "$LINENO" "thr_yield" "ac_cv_func_thr_yield"
+if test "x$ac_cv_func_thr_yield" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_THR_YIELD 1
+_ACEOF
+
+fi
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing thr_create" >&5
+$as_echo_n "checking for library containing thr_create... " >&6; }
+if ${ac_cv_search_thr_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char thr_create ();
+int
+main ()
+{
+return thr_create ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' thread; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_thr_create=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_thr_create+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_thr_create+:} false; then :
+
+else
+ ac_cv_search_thr_create=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_thr_create" >&5
+$as_echo "$ac_cv_search_thr_create" >&6; }
+ac_res=$ac_cv_search_thr_create
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ found=yes
+else
+ found=no
+fi
+
+ if test "$found" != "yes" ; then
+ as_fn_error $? "unable to find Solaris threads library" "$LINENO" 5
+ fi
+ # FIXME: need to add -mt if using solaris compilers
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_SOLARIS
+ ;;
+ win|windows)
+ with_thread_package=win
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_WIN
+ as_fn_error $? "The 'win' thread package is not supported via autoconf builds at this time." "$LINENO" 5
+ ;;
+ no|none)
+ with_thread_package=none
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_NONE
+ ;;
+ *)
+ as_fn_error $? "The specified thread package, $with_thread_package, is not supported." "$LINENO" 5
+ ;;
+esac
+
+# Define and export the selected thread library so that other packages
+# know what's used in MPL
+
+cat >>confdefs.h <<_ACEOF
+#define THREAD_PACKAGE_NAME $THREAD_PACKAGE_NAME
+_ACEOF
+
+
+# check for compiler-support for thread-local storage (MPL_TLS_SPECIFIER)
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage specifier" >&5
+$as_echo_n "checking for thread local storage specifier... " >&6; }
+ if ${ac_cv_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
+ for ax_tls_keyword in $ax_tls_keywords; do
+ case $ax_tls_keyword in
+ none) ac_cv_tls=none ; break ;;
+ *)
+ # MPICH modification: This was an AC_TRY_COMPILE before, but
+ # Darwin with non-standard compilers will accept __thread at
+ # compile time but fail to link due to an undefined
+ # "__emutls_get_address" symbol unless -lgcc_eh is added to the
+ # link line.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ax_tls_keyword int bar = 5;
+int
+main ()
+{
+++bar;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_tls=$ax_tls_keyword
+else
+ ac_cv_tls=none
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ # MPICH modification: Also test with the extern keyword.
+ # The intel compiler on Darwin (at least as of 15.0.1)
+ # seems to break with the above error when the extern
+ # keyword is specified in shared library builds.
+
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+
+
+
+ if echo "$LIBS" | $FGREP -e "\<-shared\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-shared', not appending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-shared', appending" >&5
+ LIBS="$LIBS -shared"
+
+fi
+
+ if test "$ac_cv_tls" != "none" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+
+int
+main ()
+{
+++bar;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_tls=$ax_tls_keyword
+else
+ ac_cv_tls=none
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+
+
+ if test "$ac_cv_tls" != "none" ; then break ; fi
+ esac
+ done
+
+fi
+
+
+ if test "$ac_cv_tls" != "none"; then
+
+cat >>confdefs.h <<_ACEOF
+#define TLS_SPECIFIER $ac_cv_tls
+_ACEOF
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
+$as_echo "$ac_cv_tls" >&6; }
+
+
+#######################################################################
+## END OF THREADS CODE
+#######################################################################
+
+
+#######################################################################
+## START OF DBG CODE
+#######################################################################
+
+# mkstemp() is a better replacement for mktemp()
+for ac_func in mkstemp
+do :
+ ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_MKSTEMP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_mkstemp" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkstemp needs a declaration" >&5
+$as_echo_n "checking whether mkstemp needs a declaration... " >&6; }
+if ${pac_cv_func_decl_mkstemp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))mkstemp;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_mkstemp=no
+else
+ pac_cv_func_decl_mkstemp=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_mkstemp" >&5
+$as_echo "$pac_cv_func_decl_mkstemp" >&6; }
+if test "$pac_cv_func_decl_mkstemp" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_MKSTEMP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+# fdopen() converts from an fd to a FILE*
+for ac_func in fdopen
+do :
+ ac_fn_c_check_func "$LINENO" "fdopen" "ac_cv_func_fdopen"
+if test "x$ac_cv_func_fdopen" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_FDOPEN 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_fdopen" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fdopen needs a declaration" >&5
+$as_echo_n "checking whether fdopen needs a declaration... " >&6; }
+if ${pac_cv_func_decl_fdopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))fdopen;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_fdopen=no
+else
+ pac_cv_func_decl_fdopen=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_fdopen" >&5
+$as_echo "$pac_cv_func_decl_fdopen" >&6; }
+if test "$pac_cv_func_decl_fdopen" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_FDOPEN_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+for ac_func in getpid
+do :
+ ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid"
+if test "x$ac_cv_func_getpid" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GETPID 1
+_ACEOF
+
+fi
+done
+
+
+#######################################################################
+## END OF DBG CODE
+#######################################################################
+
+#######################################################################
+## START OF SHM CODE
+#######################################################################
+
+
+
+# check how to allocate shared memory
+
+# Check whether --with-shared-memory was given.
+if test "${with_shared_memory+set}" = set; then :
+ withval=$with_shared_memory;
+else
+ with_shared_memory=auto
+fi
+
+
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
+ found_mmap_funcs=yes
+ for ac_func in mmap munmap
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ found_mmap_funcs=no
+fi
+done
+
+ if test "$found_mmap_funcs" = yes ; then
+ with_shared_memory=mmap
+
+$as_echo "#define USE_MMAP_SHM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using a memory-mapped file for shared memory" >&5
+$as_echo "$as_me: Using a memory-mapped file for shared memory" >&6;}
+ elif test "$with_shared_memory" = mmap ; then
+ as_fn_error $? "cannot support shared memory: mmap() or munmap() not found" "$LINENO" 5
+ fi
+fi
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
+ found_sysv_shm_funcs=yes
+ for ac_func in shmget shmat shmctl shmdt
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ found_sysv_shm_funcs=no
+fi
+done
+
+ if test "$found_sysv_shm_funcs" = yes ; then
+ with_shared_memory=sysv
+
+$as_echo "#define USE_SYSV_SHM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using SYSV shared memory" >&5
+$as_echo "$as_me: Using SYSV shared memory" >&6;}
+ elif test "$with_shared_memory" = sysv ; then
+ as_fn_error $? "cannot support shared memory: sysv shared memory functions functions not found" "$LINENO" 5
+ fi
+fi
+
+
+case $with_shared_memory in
+ sysv)
+
+$as_echo "#define MPL_USE_SYSV_SHM 1" >>confdefs.h
+
+ ;;
+ mmap)
+
+$as_echo "#define MPL_USE_MMAP_SHM 1" >>confdefs.h
+
+ ;;
+ nt)
+
+$as_echo "#define MPL_USE_NT_SHM 1" >>confdefs.h
+
+ ;;
+ *)
+ as_fn_error $? "cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory" "$LINENO" 5
+esac
+
+
+#######################################################################
+## END OF SHM CODE
+#######################################################################
+
+## Enable creation of libtool-style versioning or no versioning
+# Check whether --enable-versioning was given.
+if test "${enable_versioning+set}" = set; then :
+ enableval=$enable_versioning;
+else
+ enable_versioning=yes
+fi
+
+
+if test "$enable_versioning" = "yes" ; then
+ libmpl_so_versionflags="-version-info \$(libmpl_so_version)"
+else
+ libmpl_so_versionflags="-avoid-version"
+fi
+export libmpl_so_versionflags
+
+
+#######################################################################
+
+
+# Check for strdup
+for ac_func in strdup
+do :
+ ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRDUP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strdup" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
+$as_echo_n "checking whether strdup needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strdup+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strdup;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strdup=no
+else
+ pac_cv_func_decl_strdup=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
+$as_echo "$pac_cv_func_decl_strdup" >&6; }
+if test "$pac_cv_func_decl_strdup" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRDUP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for snprintf
+for ac_func in snprintf
+do :
+ ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_snprintf" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
+$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_snprintf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+void (*fptr)(void) = (void(*)(void))snprintf;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_snprintf=no
+else
+ pac_cv_func_decl_snprintf=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
+$as_echo "$pac_cv_func_decl_snprintf" >&6; }
+if test "$pac_cv_func_decl_snprintf" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_SNPRINTF_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for strncmp
+for ac_func in strncmp
+do :
+ ac_fn_c_check_func "$LINENO" "strncmp" "ac_cv_func_strncmp"
+if test "x$ac_cv_func_strncmp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCMP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strncmp" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strncmp needs a declaration" >&5
+$as_echo_n "checking whether strncmp needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strncmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strncmp;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strncmp=no
+else
+ pac_cv_func_decl_strncmp=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strncmp" >&5
+$as_echo "$pac_cv_func_decl_strncmp" >&6; }
+if test "$pac_cv_func_decl_strncmp" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRNCMP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for putenv
for ac_func in putenv
do :
ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
@@ -12880,6 +14761,182 @@ fi
fi
+# Check for usleep
+for ac_func in usleep
+do :
+ ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
+if test "x$ac_cv_func_usleep" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_USLEEP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep needs a declaration" >&5
+$as_echo_n "checking whether usleep needs a declaration... " >&6; }
+if ${pac_cv_func_decl_usleep+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))usleep;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_usleep=no
+else
+ pac_cv_func_decl_usleep=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_usleep" >&5
+$as_echo "$pac_cv_func_decl_usleep" >&6; }
+if test "$pac_cv_func_decl_usleep" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_USLEEP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+for ac_func in backtrace_symbols
+do :
+ ac_fn_c_check_func "$LINENO" "backtrace_symbols" "ac_cv_func_backtrace_symbols"
+if test "x$ac_cv_func_backtrace_symbols" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_BACKTRACE_SYMBOLS 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for backtrace_create_state in -lbacktrace" >&5
+$as_echo_n "checking for backtrace_create_state in -lbacktrace... " >&6; }
+if ${ac_cv_lib_backtrace_backtrace_create_state+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbacktrace $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char backtrace_create_state ();
+int
+main ()
+{
+return backtrace_create_state ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_backtrace_backtrace_create_state=yes
+else
+ ac_cv_lib_backtrace_backtrace_create_state=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_backtrace_backtrace_create_state" >&5
+$as_echo "$ac_cv_lib_backtrace_backtrace_create_state" >&6; }
+if test "x$ac_cv_lib_backtrace_backtrace_create_state" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBBACKTRACE 1
+_ACEOF
+
+ LIBS="-lbacktrace $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unw_backtrace in -lunwind" >&5
+$as_echo_n "checking for unw_backtrace in -lunwind... " >&6; }
+if ${ac_cv_lib_unwind_unw_backtrace+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lunwind $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char unw_backtrace ();
+int
+main ()
+{
+return unw_backtrace ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_unwind_unw_backtrace=yes
+else
+ ac_cv_lib_unwind_unw_backtrace=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_unwind_unw_backtrace" >&5
+$as_echo "$ac_cv_lib_unwind_unw_backtrace" >&6; }
+if test "x$ac_cv_lib_unwind_unw_backtrace" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUNWIND 1
+_ACEOF
+
+ LIBS="-lunwind $LIBS"
+
+fi
+
+
+ac_fn_c_check_decl "$LINENO" "backtrace_create_state" "ac_cv_have_decl_backtrace_create_state" "$ac_includes_default"
+if test "x$ac_cv_have_decl_backtrace_create_state" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BACKTRACE_CREATE_STATE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "backtrace_print" "ac_cv_have_decl_backtrace_print" "$ac_includes_default"
+if test "x$ac_cv_have_decl_backtrace_print" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BACKTRACE_PRINT $ac_have_decl
+_ACEOF
+
+
@@ -12944,7 +15001,7 @@ $as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
fi
-ac_config_files="$ac_config_files Makefile localdefs"
+ac_config_files="$ac_config_files Makefile localdefs include/mpl_timer.h"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -13969,6 +16026,7 @@ do
"include/mplconfig.h") CONFIG_COMMANDS="$CONFIG_COMMANDS include/mplconfig.h" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"localdefs") CONFIG_FILES="$CONFIG_FILES localdefs" ;;
+ "include/mpl_timer.h") CONFIG_FILES="$CONFIG_FILES include/mpl_timer.h" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
diff --git a/src/mpl/configure.ac b/src/mpl/configure.ac
index c4e798c..efff75b 100644
--- a/src/mpl/configure.ac
+++ b/src/mpl/configure.ac
@@ -7,7 +7,7 @@ AC_PREREQ(2.63)
AC_INIT([MPL], [0.1])
# sanity check that --srcdir was specified correctly
-AC_CONFIG_SRCDIR([src/mplstr.c])
+AC_CONFIG_SRCDIR([src/str/mpl_str.c])
AC_CONFIG_AUX_DIR(confdb)
AC_CONFIG_MACRO_DIR(confdb)
@@ -51,10 +51,64 @@ AC_C_RESTRICT
AC_C_INLINE
PAC_C_MACRO_VA_ARGS
+PAC_C_BUILTIN_EXPECT
+
+AC_ARG_ENABLE(embedded,
+ AC_HELP_STRING([--enable-embedded], [Build MPL in embedded mode (default is no)]),
+ [embedded=yes],
+ [embedded=no])
+AM_CONDITIONAL([MPL_EMBEDDED_MODE],[test "x${embedded}" = "xyes"])
+
+AC_ARG_ENABLE(g,
+ AC_HELP_STRING([--enable-g=option],
+ [
+ Control the level of debugging support in MPL.
+ "option" is a list of comma separated names. Default
+ is "all".
+
+ none|no - No debugging
+ log - Enable debug event logging
+ mem - Enable memory tracing
+ yes|all - All of the above choices (except "none", obviously)
+ ]),,[enable_g=none])
+
+# enable-g
+# strip off multiple options, separated by commas
+PAC_PUSH_FLAG(IFS)
+IFS=","
+for option in $enable_g ; do
+ case "$option" in
+ log)
+ enable_g_log=yes
+ ;;
+
+ mem)
+ enable_g_mem=yes
+ ;;
+
+ all|yes)
+ enable_g_log=yes
+ enable_g_mem=yes
+ ;;
+
+ no|none)
+ ;;
+
+ *)
+ AC_MSG_WARN([Unknown value $option for enable-g])
+ ;;
+ esac
+done
+PAC_POP_FLAG(IFS)
+
+if test "$enable_g_log" = "yes" ; then
+ AC_DEFINE([USE_DBG_LOGGING],[1],[Define to enable logging macros])
+fi
+
+if test "$enable_g_mem" = "yes" ; then
+ AC_DEFINE([USE_MEMORY_TRACING],[1],[Define to enable memory tracing])
+fi
-# TODO: could add a --enable-embedded or similar to also control this
-AC_ARG_VAR([FROM_MPICH],[set to "yes" if building MPL inside of MPICH])
-AM_CONDITIONAL([MPL_EMBEDDED_MODE],[test "x${FROM_MPICH}" = "xyes"])
# support gcov test coverage information
PAC_ENABLE_COVERAGE
@@ -71,7 +125,7 @@ if test "$pac_cv_have___typeof" = "yes" ; then
fi
dnl Check if the necessary headers are available
-AC_CHECK_HEADERS(stdio.h stdlib.h string.h stdarg.h ctype.h search.h sys/types.h sys/uio.h)
+AC_CHECK_HEADERS(stdio.h stdlib.h string.h stdarg.h ctype.h sys/types.h sys/uio.h execinfo.h backtrace.h libunwind.h unistd.h errno.h windows.h)
# A C99 compliant compiler should have inttypes.h for fixed-size int types
AC_CHECK_HEADERS(inttypes.h stdint.h)
@@ -154,6 +208,585 @@ char mempool_obj;
fi
fi
+
+#######################################################################
+## TIMER CODE
+#######################################################################
+
+# ----------------------------------------------------------------------------
+# Support for timers. The following code processes the
+# --enable-timer-type=name argument and selects the timer based on
+# both that field and what configure is able to determine is available.
+# The file src/include/mpl_timer.h is also created.
+# ----------------------------------------------------------------------------
+
+# clock_gettime is the POSIX gettimeofday
+# gethrtime is the Solaris high-resolution timer
+dnl
+dnl Specific checks that a function works correctly
+dnl
+dnl Now that we know what the options are, choose the timer to use
+dnl
+dnl The default preference is
+dnl Solaris gethrtime
+dnl Posix clock_gettime
+dnl Unix gettimeofday (one of two versions)
+dnl
+dnl Also available are various hardware time stamps
+dnl Linux-x86 cycle counter
+dnl Powerpc-64bit timebase cycle counter
+dnl
+dnl We also allow --enable-timer-type=name to select a timer type
+AC_ARG_ENABLE(timer-type,
+[ --enable-timer-type=name - Select the timer to use for MPI_Wtime and
+ internal timestamps.
+ ppc64_cycle - Powerpc-64bit; returns cycle counts using timebase register
+ gethrtime - Solaris timer (Solaris systems only)
+ clock_gettime - Posix timer (where available)
+ gettimeofday - Most Unix systems
+ linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
+ gcc_ia64_cycle - IPF ar.itc timer*
+ mach_absolute_time - Mach absolute time (alternative to clock_gettime
+ for OSX)
+ device - The timer is provided by the device
+
+ *Note that the cycle timers are intended to be used by
+ developers for internal low-level timing. Normal users should
+ not use these as they are not guaranteed to be accurate in
+ certain situations.
+],timer_type=$enable_timer_type)
+
+## The user did not specify a timer type. Try to find a sane option
+## that is supported by the platform.
+if test -z "$timer_type" ; then
+ # Try to pick a timer based on what is available
+ AC_CHECK_FUNCS(clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday)
+ if test "$ac_cv_func_gethrtime" = "yes" ; then
+ # Sigh. The Solaris include files do not define hrtime_t
+ # Before we accept this choice, make sure that we can
+ # do arithmetic with hrtime_t .
+ AC_CACHE_CHECK([that hrtime_t is properly defined for gethrtime],
+ pac_cv_hrtime_works,[
+ AC_TRY_COMPILE([
+#include <sys/time.h>
+],[hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;],
+pac_cv_hrtime_works=yes,pac_cv_hrtime_works=no)])
+ # A more ambitious test would look to see if casting an
+ # hrtime_t to int64_t works, and even more ambitious
+ # would check whether long or long long was 64 bits (or even
+ # better, the sizeof hrtime_t).
+
+ # AC_CHECK_FUNCS has false positive when checking whether gethrtime is
+ # available on Solaris with strict configuration. We must use
+ # AC_CHECK_DECL to confirm it.
+ AC_CHECK_DECL(gethrtime)
+ fi
+ if test "$ac_cv_func_gethrtime" = "yes" -a \
+ "$ac_cv_has_decl_gethrtime" = "yes" -a \
+ "$pac_cv_hrtime_works" = "yes" ; then
+ timer_type=gethrtime
+ elif test "$ac_cv_func_clock_gettime" = "yes" -a \
+ "$ac_cv_func_clock_getres" = "yes" ; then
+ # Test on both because some systems (e.g., cygwin) provide
+ # clock_gettime but not clock_getres
+ timer_type=clock_gettime
+ elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
+ timer_type=mach_absolute_time
+ elif test "$ac_cv_func_gettimeofday" = "yes" ; then
+ timer_type=gettimeofday
+ fi
+fi
+if test -z "$timer_type" ; then
+ AC_MSG_ERROR([No timer found])
+fi
+
+# Check for valid timer and select datatypes for the time stamp
+case "$timer_type" in
+
+ gethrtime)
+ MPL_TIMER_TYPE=hrtime_t
+ AC_CHECK_FUNC(gethrtime,,[
+ AC_MSG_ERROR([Requested timer gethrtime is not available])
+])
+ ;;
+
+ clock_gettime)
+ missing_function=no
+ AC_SEARCH_LIBS([clock_gettime],[rt],,AC_MSG_ERROR([clock_gettime is not available]))
+ AC_SEARCH_LIBS([clock_getres],[rt],,AC_MSG_ERROR([clock_getres is not available]))
+ MPL_TIMER_TYPE="struct timespec"
+ # AIX does not always define struct timespec (!)
+ # Make sure that we can use struct timespec
+ AC_CACHE_CHECK([whether struct timespec is defined in time.h],
+ pac_cv_struct_timespec_defined,[
+ AC_TRY_COMPILE([
+#include <time.h>],[
+ struct timespec t;],pac_cv_struct_timespec_defined=yes,
+ pac_cv_struct_timespec_defined=no)
+])
+ if test "$pac_cv_struct_timespec_defined" != "yes" ; then
+ # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
+ AC_CACHE_CHECK([whether struct timespec is defined in time.h with _XOPEN_SOURCE=500],
+ pac_cv_struct_timespec_defined_with_xopen500,[
+ AC_TRY_COMPILE([
+#define _XOPEN_SOURCE 500
+#include <time.h>],[
+ struct timespec t;],pac_cv_struct_timespec_defined_with_xopen500=yes,
+ pac_cv_struct_timespec_defined_with_xopen500=no)
+])
+ if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
+ # We need to define _XOPEN_SOURCE=500, but we need to ensure that
+ # this is done before any include files are loaded. At
+ # this point it is really too late to add this definition,
+ # since it may make other tests incompatible.
+ AC_MSG_ERROR([The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure])
+ fi
+ fi
+ #
+ # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
+ # time.h is required (see pages 45 and 46 in the POSIX standard).
+ # See if we can compile
+ AC_CACHE_CHECK([for CLOCK_REALTIME defined in time.h],pac_cv_posix_clock_realtime,[
+ AC_TRY_COMPILE([
+#include <time.h>],[
+ clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
+pac_cv_posix_clock_realtime=no)])
+ if test "$pac_cv_posix_clock_realtime" = "no" ; then
+ AC_MSG_WARN([POSIX timer requires definitions in time.h])
+ # Check for the definition in sys/time.h, which is where
+ # OpenBSD and FreeBSD have put it by mistake
+ AC_TRY_COMPILE([
+#include <time.h>
+#include <sys/time.h>],[
+ clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
+pac_cv_posix_clock_realtime=no)
+ if test "$pac_cv_posix_clock_realtime" = yes ; then
+ AC_MSG_WARN([sys/time.h required for POSIX timer])
+ AC_DEFINE(NEEDS_SYS_TIME_H,1,[Define if sys/time.h is required to get timer definitions])
+ else
+ AC_MSG_ERROR([Cannot find the definition of CLOCK_REALTIME for the POSIX timer])
+ fi
+ fi
+ ;;
+
+ gettimeofday)
+ MPL_TIMER_TYPE="struct timeval"
+ # We may have already tested for gettimeofday. If we got a "yes",
+ # we're good to go
+ if test "$ac_cv_func_gettimeofday" != "yes" ; then
+ AC_CHECK_FUNC(gettimeofday,,[
+ AC_MSG_ERROR([Requested timer gettimeofday is not available])
+])
+ fi
+ ;;
+
+ linux86_cycle|linux86_cycle_2)
+
+# The following AC_TRY_RUN statements are needed because x86_64 compilers
+# usually know about rdtscp but the cpu may or may not actually implement the
+# feature. This is not cross-compile safe, unfortunately. In the long run we
+# should allow the user to override this with a configure flag.
+ AC_CACHE_CHECK([that linux86 cycle counter is available],
+ pac_cv_linux86_cycle,
+ AC_TRY_RUN([
+int main()
+{
+ /* rdtscp */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+ ],pac_cv_linux86_cycle=rdtscp,
+ AC_TRY_RUN([[
+int main()
+{
+ /* cpuid 64 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+ ]],pac_cv_linux86_cycle=cpuid_rdtsc64,
+ AC_TRY_RUN([[[
+int main()
+{
+ /* cpuid 32 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ return 0;
+}
+ ]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
+ AC_TRY_RUN([[[[
+int main()
+{
+ /* simple */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ return 0;
+}
+ ]]]],pac_cv_linux86_cycle=rdtsc,
+ pac_cv_linux86_cycle=no)
+ )
+ ),
+dnl The if-cross-compiling clause from the first AC_TRY_RUN. Hope that if the
+dnl compiler knows about the instruction then it's supported by the target
+dnl platform.
+ AC_TRY_COMPILE(,[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ ]],pac_cv_linux86_cycle=rdtscp,
+ AC_TRY_COMPILE(,[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ ]]],pac_cv_linux86_cycle=cpuid_rdtsc64,
+ AC_TRY_COMPILE(,[[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ ]]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
+ AC_TRY_COMPILE(,[[[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ ]]]]],pac_cv_linux86_cycle=rdtsc,
+ pac_cv_linux86_cycle=no)
+ )
+ )
+ )
+ )
+ )
+
+ case "$pac_cv_linux86_cycle" in
+ "rdtscp")
+ AC_DEFINE(LINUX86_CYCLE_RDTSCP,1,[Define which x86 cycle counter to use])
+ ;;
+ "cpuid_rdtsc64")
+ AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC64,1,[Define which x86 cycle counter to use])
+ ;;
+ "cpuid_rdtsc32")
+ AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC32,1,[Define which x86 cycle counter to use])
+ ;;
+ "rdtsc")
+ AC_DEFINE(LINUX86_CYCLE_RDTSC,1,[Define which x86 cycle counter to use])
+ ;;
+ *)
+ cpu_gcc_x86_cycle=no
+ ;;
+ esac
+
+ if test "$cpu_gcc_x86_cycle" = "no" ; then
+ AC_MSG_ERROR([Linux86 cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="long long"
+ ;;
+
+ gcc_ia64_cycle)
+ AC_CACHE_CHECK([that IPF timer is available],
+pac_cv_ia64_cycle,[
+ AC_TRY_COMPILE(,[
+ long var, *var_ptr=&var;
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ var=__getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
+#endif
+],pac_cv_gcc_ia64_cycle=yes,pac_cv_gcc_ia64_cycle=no)])
+ if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
+ AC_MSG_ERROR([IPF cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="long"
+ ;;
+
+ mach_absolute_time)
+ AC_CHECK_FUNC(mach_absolute_time,,[AC_MSG_ERROR([mach_absolute_time is not available])])
+ AC_CHECK_FUNC(mach_timebase_info,,[AC_MSG_ERROR([mach_timebase_info is not available])])
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+
+ device)
+ # The device selected should export the datatype for the timer
+ MPL_TIMER_TYPE="void *"
+ ;;
+
+ ppc64_cycle)
+ AC_CACHE_CHECK([that ppc64 timebase cycle counter is available],
+ pac_cv_ppc64_cycle,[
+ AC_TRY_COMPILE([
+ ],[
+ unsigned temp;
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (0x10D));
+ ],pac_cv_ppc64_cycle=yes,
+ pac_cv_ppc64_cycle=no)
+ ])
+ if test "pac_cv_ppc64_cycle" != "yes" ; then
+ AC_MSG_ERROR([The PPC64 cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+ *)
+ AC_MSG_ERROR([Invalid timer type $timer_type])
+ ;;
+esac
+# Convert timer type to upper case
+timer_type=`echo $timer_type | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+MPL_TIMER_KIND=MPL_TIMER_KIND__$timer_type
+AC_SUBST(MPL_TIMER_KIND)
+AC_SUBST(MPL_TIMER_TYPE)
+AC_MSG_NOTICE([Timer type selected is $timer_type])
+
+#######################################################################
+## END OF TIMER CODE
+#######################################################################
+
+
+#######################################################################
+## START OF PROCESSOR YIELD CODE
+#######################################################################
+# If the user specified a method to use, we check if it's available.
+# If a method was not specified, we make a guess based on the OS. The
+# default is to use sched_yield() or yield() if one is available,
+# otherwise, default to nothing. After that we define the appropriate
+# macro.
+
+AC_CHECK_HEADERS(sched.h)
+AC_CHECK_HEADERS(unistd.h)
+AC_CHECK_HEADERS(sys/select.h)
+AC_CHECK_FUNCS(sched_yield yield usleep sleep select)
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <unistd.h>],usleep)
+fi
+
+AC_ARG_ENABLE([yield],
+ [AS_HELP_STRING([--enable-yield], [choose a method to yield the processor in busy loops. Available methods are: sched_yield, yield, select, usleep, sleep, nothing])],
+ [AS_CASE([$enableval],
+ [sched_yield], [AS_IF([test "x$ac_cv_func_sched_yield" != "xyes"], [enable_yield=unavail])],
+ [yield], [AS_IF([test "x$ac_cv_func_yield" != "xyes"], [enable_yield=unavail])],
+ [select], [AS_IF([test "x$ac_cv_func_select" != "xyes"], [enable_yield=unavail])],
+ [usleep], [AS_IF([test "x$ac_cv_func_usleep" != "xyes"], [enable_yield=unavail])],
+ [sleep], [AS_IF([test "x$ac_cv_func_sleep" != "xyes"], [enable_yield=unavail])],
+ [nothing|no|none], [],
+ [AC_MSG_ERROR([Invalid option $enableval for --enable-yield])])
+
+ AS_IF([test "x$enable_yield" = "xunavail"],
+ [AC_MSG_ERROR([Yield method $enableval is not available on this platform.])])
+ ],
+ [# none specified by user; make a guess based on os
+ AS_CASE([$host],
+ [*-*-darwin*],
+ [# In Lion, sched_yield worked but none of the other options had any effect
+ AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
+ [enable_yield=nothing])],
+ [*-*-linux*],
+ [# sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
+ enable_yield=nothing],
+ [# default: just use sched_yield() or yield()
+ AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
+ [test "x$ac_cv_func_yield" = "xyes"], [enable_yield=yield],
+ [enable_yield=nothing])])
+ ]
+)
+
+# set the appropriate macro
+AS_CASE([$enable_yield],
+ [sched_yield],
+ [AC_DEFINE(USE_SCHED_YIELD_FOR_YIELD,1,[Define to use sched_yield to yield processor])],
+ [yield],
+ [AC_DEFINE(USE_YIELD_FOR_YIELD,1,[Define to use yield to yield processor])],
+ [select],
+ [AC_DEFINE(USE_SELECT_FOR_YIELD,1,[Define to use select to yield processor])],
+ [usleep],
+ [AC_DEFINE(USE_USLEEP_FOR_YIELD,1,[Define to use usleep to yield processor])],
+ [sleep],
+ [AC_DEFINE(USE_SLEEP_FOR_YIELD,1,[Define to use sleep to yield processor])],
+ [nothing|no|none],
+ [AC_DEFINE(USE_NOTHING_FOR_YIELD,1,[Define to use nothing to yield processor])],
+ [AC_MSG_ERROR([Invalid value $enable_yield for enable_yield.])]
+)
+
+#######################################################################
+## END OF PROCESSOR YIELD CODE
+#######################################################################
+
+
+#######################################################################
+## START OF THREADS CODE
+#######################################################################
+AC_ARG_WITH([thread-package],
+[ --with-thread-package=package Thread package to use. Supported thread packages include:
+ posix or pthreads - POSIX threads (default, if required)
+ solaris - Solaris threads (Solaris OS only)
+ win - windows threads
+ none - no threads
+],,with_thread_package=posix)
+
+if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
+ with_thread_package=none
+fi
+
+if test "${with_thread_package}" = "yes" ; then
+ with_thread_package=posix
+fi
+
+if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
+ AC_ERROR([if no thread package is available, use --enable-threads=single or funneled])
+fi
+
+THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_INVALID
+case $with_thread_package in
+ posix|pthreads)
+ with_thread_package=posix
+ AC_CHECK_HEADERS(pthread.h)
+
+ # If pthreads library is found, just include it on the link line. We don't try
+ # to test if the C compiler needs it or not, since the C++ or Fortran
+ # compilers might need it even if the C compiler doesn't
+ # (nvcc with gfortran, for example).
+ #
+ # OSF1 has __pthread_create but not pthread_create (because of
+ # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
+ AC_CHECK_LIB([pthread],[pthread_key_create],have_pthreads=yes)
+ if test "$have_pthreads" = "yes" ; then
+ PAC_PREPEND_FLAG([-lpthread],[LIBS])
+ fi
+
+ AC_CHECK_FUNCS(pthread_yield)
+
+ # this check should come after the AC_CHECK_LIB for -lpthread
+ AC_CHECK_FUNC([pthread_key_create],[],[AC_MSG_ERROR([unable to find pthreads library])])
+
+ # Check for a routine that specify a routine to call on
+ # thread exit. We can use this to release memory that may
+ # be allocated by the MPL library in the thread.
+ # A complication: pthread_cleanup_push may be a macro; in that
+ # case, check_funcs will fail to find it.
+ # Under OSX, pthread_cleanup_push and pop are macros that must
+ # appear together in the same lexical scope, and hence are
+ # really useless in libraries that may allocate data within
+ # a user-managed thread.
+ AC_CHECK_FUNCS(pthread_cleanup_push)
+ if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
+ AC_CACHE_CHECK([whether pthread_cleanup_push is available (may be a macro in pthread.h)],pac_cv_func_pthread_cleanup_push,[
+ AC_TRY_LINK([
+#include <pthread.h>
+void f1(void *a) { return; }],
+[pthread_cleanup_push( f1, (void *)0 );],
+ pac_cv_func_pthread_cleanup_push=yes,
+ pac_cv_func_pthread_cleanup_push=no)])
+ if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
+ AC_DEFINE(HAVE_PTHREAD_CLEANUP_PUSH_MACRO,1,[Define if pthread_cleanup_push is available, even as a macro])
+ fi
+
+ fi
+
+ # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
+ AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP],
+ pac_cv_has_pthread_mutex_errorcheck_np,[
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [int a=PTHREAD_MUTEX_ERRORCHECK_NP;],
+ pac_cv_has_pthread_mutex_errorcheck_np=yes,
+ pac_cv_has_pthread_mutex_errorcheck_np=no)])
+ AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK],
+ pac_cv_has_pthread_mutex_errorcheck,[
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [int a=PTHREAD_MUTEX_ERRORCHECK;],
+ pac_cv_has_pthread_mutex_errorcheck=yes,
+ pac_cv_has_pthread_mutex_errorcheck=no)])
+
+ if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
+ AC_DEFINE(PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK,
+ [Define to an expression that will result in an error checking mutex type.])
+ elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
+ AC_DEFINE(PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK_NP,
+ [Define to an expression that will result in an error checking mutex type.])
+ fi
+
+ PAC_FUNC_NEEDS_DECL([#include <pthread.h>],pthread_mutexattr_settype)
+
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_POSIX
+ ;;
+ solaris)
+ AC_CHECK_HEADERS(thread.h)
+ AC_CHECK_FUNCS(thr_yield)
+ AC_SEARCH_LIBS(thr_create,thread,found=yes,found=no)
+ if test "$found" != "yes" ; then
+ AC_MSG_ERROR([unable to find Solaris threads library])
+ fi
+ # FIXME: need to add -mt if using solaris compilers
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_SOLARIS
+ ;;
+ win|windows)
+ with_thread_package=win
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_WIN
+ AC_MSG_ERROR([The 'win' thread package is not supported via autoconf builds at this time.])
+ ;;
+ no|none)
+ with_thread_package=none
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_NONE
+ ;;
+ *)
+ AC_MSG_ERROR([The specified thread package, $with_thread_package, is not supported.])
+ ;;
+esac
+
+# Define and export the selected thread library so that other packages
+# know what's used in MPL
+AC_DEFINE_UNQUOTED([THREAD_PACKAGE_NAME],[$THREAD_PACKAGE_NAME],[set to the name of the thread package])
+
+# check for compiler-support for thread-local storage (MPL_TLS_SPECIFIER)
+AX_TLS
+
+#######################################################################
+## END OF THREADS CODE
+#######################################################################
+
+
+#######################################################################
+## START OF DBG CODE
+#######################################################################
+
+# mkstemp() is a better replacement for mktemp()
+AC_HAVE_FUNCS(mkstemp)
+if test "$ac_cv_func_mkstemp" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],mkstemp)
+fi
+# fdopen() converts from an fd to a FILE*
+AC_HAVE_FUNCS(fdopen)
+if test "$ac_cv_func_fdopen" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],fdopen)
+fi
+
+AC_CHECK_FUNCS(getpid)
+
+#######################################################################
+## END OF DBG CODE
+#######################################################################
+
+#######################################################################
+## START OF SHM CODE
+#######################################################################
+
+dnl Check for shm
+PAC_ARG_SHARED_MEMORY
+
+case $with_shared_memory in
+ sysv)
+ AC_DEFINE(MPL_USE_SYSV_SHM,1,[Define if use SYSV shared memory])
+ ;;
+ mmap)
+ AC_DEFINE(MPL_USE_MMAP_SHM,1,[Define if use MMAP shared memory])
+ ;;
+ nt)
+ AC_DEFINE(MPL_USE_NT_SHM,1,[Define if use Windows shared memory])
+ ;;
+ *)
+ AC_MSG_ERROR([cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory])
+esac
+
+
+#######################################################################
+## END OF SHM CODE
+#######################################################################
+
## Enable creation of libtool-style versioning or no versioning
AC_ARG_ENABLE(versioning,
[AC_HELP_STRING([--enable-versioning],[Enable library versioning])],,
@@ -200,9 +833,21 @@ if test "$ac_cv_func_strerror" = "yes" ; then
PAC_FUNC_NEEDS_DECL([#include <string.h>],strerror)
fi
+# Check for usleep
+AC_CHECK_FUNCS(usleep)
+if test "$ac_cv_func_usleep" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <unistd.h>],usleep)
+fi
+
+AC_CHECK_FUNCS(backtrace_symbols)
+AC_CHECK_LIB(backtrace, backtrace_create_state)
+AC_CHECK_LIB(unwind, unw_backtrace)
+
+AC_CHECK_DECLS([backtrace_create_state, backtrace_print])
+
dnl Check for ATTRIBUTE
PAC_C_GNU_ATTRIBUTE
dnl Final output
-AC_CONFIG_FILES([Makefile localdefs])
+AC_CONFIG_FILES([Makefile localdefs include/mpl_timer.h])
AC_OUTPUT
diff --git a/src/mpl/include/config.h.in b/src/mpl/include/config.h.in
index 7ae7fc2..3571be6 100644
--- a/src/mpl/include/config.h.in
+++ b/src/mpl/include/config.h.in
@@ -1,27 +1,80 @@
/* include/config.h.in. Generated from configure.ac by autoheader. */
+/* Define to 1 if you have the <backtrace.h> header file. */
+#undef HAVE_BACKTRACE_H
+
+/* Define to 1 if you have the `backtrace_symbols' function. */
+#undef HAVE_BACKTRACE_SYMBOLS
+
/* define if valgrind is old and/or broken compared to what we are expecting
*/
#undef HAVE_BROKEN_VALGRIND
+/* Define to 1 if the compiler supports __builtin_expect. */
+#undef HAVE_BUILTIN_EXPECT
+
+/* Define to 1 if you have the `clock_getres' function. */
+#undef HAVE_CLOCK_GETRES
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
/* Define to 1 if you have the <ctype.h> header file. */
#undef HAVE_CTYPE_H
+/* Define to 1 if you have the declaration of `backtrace_create_state', and to
+ 0 if you don't. */
+#undef HAVE_DECL_BACKTRACE_CREATE_STATE
+
+/* Define to 1 if you have the declaration of `backtrace_print', and to 0 if
+ you don't. */
+#undef HAVE_DECL_BACKTRACE_PRINT
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <drd.h> header file. */
#undef HAVE_DRD_H
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
+/* Define to 1 if you have the `fdopen' function. */
+#undef HAVE_FDOPEN
+
/* Define if GNU __attribute__ is supported */
#undef HAVE_GCC_ATTRIBUTE
+/* Define to 1 if you have the `gethrtime' function. */
+#undef HAVE_GETHRTIME
+
+/* Define to 1 if you have the `getpid' function. */
+#undef HAVE_GETPID
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
/* Define to 1 if you have the <helgrind.h> header file. */
#undef HAVE_HELGRIND_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
+/* Define to 1 if you have the `backtrace' library (-lbacktrace). */
+#undef HAVE_LIBBACKTRACE
+
+/* Define to 1 if you have the `unwind' library (-lunwind). */
+#undef HAVE_LIBUNWIND
+
+/* Define to 1 if you have the <libunwind.h> header file. */
+#undef HAVE_LIBUNWIND_H
+
+/* Define to 1 if you have the `mach_absolute_time' function. */
+#undef HAVE_MACH_ABSOLUTE_TIME
+
/* Define if C99-style variable argument list macro functionality */
#undef HAVE_MACRO_VA_ARGS
@@ -31,11 +84,53 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Define to 1 if you have the `mkstemp' function. */
+#undef HAVE_MKSTEMP
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define to 1 if you have the `pthread_cleanup_push' function. */
+#undef HAVE_PTHREAD_CLEANUP_PUSH
+
+/* Define if pthread_cleanup_push is available, even as a macro */
+#undef HAVE_PTHREAD_CLEANUP_PUSH_MACRO
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the `pthread_yield' function. */
+#undef HAVE_PTHREAD_YIELD
+
/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV
-/* Define to 1 if you have the <search.h> header file. */
-#undef HAVE_SEARCH_H
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the `sched_yield' function. */
+#undef HAVE_SCHED_YIELD
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if you have the `shmat' function. */
+#undef HAVE_SHMAT
+
+/* Define to 1 if you have the `shmctl' function. */
+#undef HAVE_SHMCTL
+
+/* Define to 1 if you have the `shmdt' function. */
+#undef HAVE_SHMDT
+
+/* Define to 1 if you have the `shmget' function. */
+#undef HAVE_SHMGET
+
+/* Define to 1 if you have the `sleep' function. */
+#undef HAVE_SLEEP
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
@@ -67,6 +162,9 @@
/* Define to 1 if you have the `strncmp' function. */
#undef HAVE_STRNCMP
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
@@ -76,6 +174,12 @@
/* Define to 1 if you have the <sys/uio.h> header file. */
#undef HAVE_SYS_UIO_H
+/* Define to 1 if you have the <thread.h> header file. */
+#undef HAVE_THREAD_H
+
+/* Define to 1 if you have the `thr_yield' function. */
+#undef HAVE_THR_YIELD
+
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
@@ -97,12 +201,48 @@
/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
#undef HAVE_VALGRIND_VALGRIND_H
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
+/* Define to 1 if you have the `yield' function. */
+#undef HAVE_YIELD
+
/* defined if the C compiler supports __typeof(variable) */
#undef HAVE___TYPEOF
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_CPUID_RDTSC32
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_CPUID_RDTSC64
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_RDTSC
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_RDTSCP
+
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#undef LT_OBJDIR
+/* Define if use MMAP shared memory */
+#undef MPL_USE_MMAP_SHM
+
+/* Define if use Windows shared memory */
+#undef MPL_USE_NT_SHM
+
+/* Define if use SYSV shared memory */
+#undef MPL_USE_SYSV_SHM
+
+/* Define if fdopen needs a declaration */
+#undef NEEDS_FDOPEN_DECL
+
+/* Define if mkstemp needs a declaration */
+#undef NEEDS_MKSTEMP_DECL
+
+/* Define if pthread_mutexattr_settype needs a declaration */
+#undef NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL
+
/* Define if putenv needs a declaration */
#undef NEEDS_PUTENV_DECL
@@ -118,6 +258,12 @@
/* Define if strncmp needs a declaration */
#undef NEEDS_STRNCMP_DECL
+/* Define if sys/time.h is required to get timer definitions */
+#undef NEEDS_SYS_TIME_H
+
+/* Define if usleep needs a declaration */
+#undef NEEDS_USLEEP_DECL
+
/* Name of package */
#undef PACKAGE
@@ -139,12 +285,52 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
+/* Define to an expression that will result in an error checking mutex type.
+ */
+#undef PTHREAD_MUTEX_ERRORCHECK_VALUE
+
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
+/* set to the name of the thread package */
+#undef THREAD_PACKAGE_NAME
+
+/* If the compiler supports a TLS storage class define it to that here */
+#undef TLS_SPECIFIER
+
/* Define if performing coverage tests */
#undef USE_COVERAGE
+/* Define to enable logging macros */
+#undef USE_DBG_LOGGING
+
+/* Define to enable memory tracing */
+#undef USE_MEMORY_TRACING
+
+/* Define if we have sysv shared memory */
+#undef USE_MMAP_SHM
+
+/* Define to use nothing to yield processor */
+#undef USE_NOTHING_FOR_YIELD
+
+/* Define to use sched_yield to yield processor */
+#undef USE_SCHED_YIELD_FOR_YIELD
+
+/* Define to use select to yield processor */
+#undef USE_SELECT_FOR_YIELD
+
+/* Define to use sleep to yield processor */
+#undef USE_SLEEP_FOR_YIELD
+
+/* Define if we have sysv shared memory */
+#undef USE_SYSV_SHM
+
+/* Define to use usleep to yield processor */
+#undef USE_USLEEP_FOR_YIELD
+
+/* Define to use yield to yield processor */
+#undef USE_YIELD_FOR_YIELD
+
/* Version number of package */
#undef VERSION
diff --git a/src/mpl/include/mpl.h b/src/mpl/include/mpl.h
index 4885750..d9d6dd1 100644
--- a/src/mpl/include/mpl.h
+++ b/src/mpl/include/mpl.h
@@ -4,115 +4,24 @@
* See COPYRIGHT in top-level directory.
*/
-#ifndef MPL_H_INCLUDED
+#if !defined(MPL_H_INCLUDED)
#define MPL_H_INCLUDED
-#include "mplconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-
-#if defined _mpl_restrict
-#define mpl_restrict _mpl_restrict
-#else
-#define mpl_restrict restrict
-#endif /* _mpl_restrict */
-
-#if defined _mpl_const
-#define mpl_const _mpl_const
-#else
-#define mpl_const const
-#endif /* _mpl_const */
-
-#if defined _mpl_inline
-#define mpl_inline _mpl_inline
-#else
-#define mpl_inline inline
-#endif /* _mpl_inline */
-
-#if defined MPL_HAVE_CTYPE_H
-#include <ctype.h>
-#endif /* MPL_HAVE_CTYPE_H */
-
-#if defined(MPL_HAVE_INTTYPES_H)
-#include <inttypes.h>
-#endif /* MPL_HAVE_INTTYPES_H */
-
-#if !defined ATTRIBUTE
-# if defined MPL_HAVE_GCC_ATTRIBUTE
-# define ATTRIBUTE(a_) __attribute__(a_)
-# else /* MPL_HAVE_GCC_ATTRIBUTE */
-# define ATTRIBUTE(a_)
-# endif /* MPL_HAVE_GCC_ATTRIBUTE */
-#endif /* ATTRIBUTE */
-
-#if defined(MPL_HAVE_MACRO_VA_ARGS)
-#define MPL_error_printf(...) fprintf(stderr,__VA_ARGS__)
-#else
-#define MPL_error_printf printf
-#endif
-
-/* These likely/unlikely macros provide static branch prediction hints to the
- * compiler, if such hints are available. Simply wrap the relevant expression in
- * the macro, like this:
- *
- * if (unlikely(ptr == NULL)) {
- * // ... some unlikely code path ...
- * }
- *
- * They should be used sparingly, especially in upper-level code. It's easy to
- * incorrectly estimate branching likelihood, while the compiler can often do a
- * decent job if left to its own devices.
- *
- * These macros are not namespaced because the namespacing is cumbersome.
- */
-#ifdef HAVE_BUILTIN_EXPECT
-# define unlikely(x_) __builtin_expect(!!(x_),0)
-# define likely(x_) __builtin_expect(!!(x_),1)
-#else
-# define unlikely(x_) (x_)
-# define likely(x_) (x_)
-#endif
-
-
-/* -------------------------------------------------------------------------- */
-/*
- * Basic utility macros
- */
-#define MPL_QUOTE(A) MPL_QUOTE2(A)
-#define MPL_QUOTE2(A) #A
-
-/* This macro is used to silence warnings from the Mac OS X linker when
- * an object file "has no symbols". The unused attribute prevents a
- * warning about the unused dummy variable while the used attribute
- * prevents the compiler from discarding the symbol altogether. This
- * macro should be used at the top of any file that might not define any
- * other variables or functions (perhaps due to conditional compilation
- * via the preprocessor). A semicolon is expected after each invocation
- * of this macro. */
-#define MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING \
- static int MPL_UNIQUE_SYMBOL_NAME(dummy) ATTRIBUTE((unused,used)) = 0
-
-/* we jump through a couple of extra macro hoops to append the line
- * number to the variable name in order to reduce the chance of a name
- * collision with headers that might be included in the translation
- * unit */
-#define MPL_UNIQUE_SYMBOL_NAME(prefix_) MPL_UNIQUE_IMPL1_(prefix_##_unique_L,__LINE__)
-#define MPL_UNIQUE_IMPL1_(prefix_,line_) MPL_UNIQUE_IMPL2_(prefix_,line_)
-#define MPL_UNIQUE_IMPL2_(prefix_,line_) MPL_UNIQUE_IMPL3_(prefix_,line_)
-#define MPL_UNIQUE_IMPL3_(prefix_,line_) prefix_##line_
-
-
+#include "mpl_base.h"
/* must come before mpltrmem.h */
#include "mpl_valgrind.h"
-#include "mplstr.h"
-#include "mpltrmem.h"
-#include "mplenv.h"
-#include "mplsock.h"
-#include "mplmsg.h"
-#include "mpliov.h"
-
-#endif /* MPL_H_INCLUDED */
+#include "mpl_argstr.h"
+#include "mpl_str.h"
+#include "mpl_trmem.h"
+#include "mpl_env.h"
+#include "mpl_sock.h"
+#include "mpl_msg.h"
+#include "mpl_iov.h"
+#include "mpl_bt.h"
+#include "mpl_thread.h"
+#include "mpl_timer.h"
+#include "mpl_yield.h"
+#include "mpl_dbg.h"
+#include "mpl_shm.h"
+
+#endif /* !defined(MPL_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_argstr.h b/src/mpl/include/mpl_argstr.h
new file mode 100644
index 0000000..3943043
--- /dev/null
+++ b/src/mpl/include/mpl_argstr.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_ARGSTR_H_INCLUDED
+#define MPL_ARGSTR_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* Make sure that we have the definitions for the malloc routines and size_t */
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpl_dbg.h"
+
+#if defined (MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIR_DBG_STRING;
+#endif /* MPL_USE_DBG_LOGGING */
+
+#define MPL_STR_SUCCESS 0
+#define MPL_STR_FAIL 1
+#define MPL_STR_NOMEM 2
+#define MPL_STR_TRUNCATED 3
+
+#define MPL_STR_QUOTE_CHAR '\"'
+#define MPL_STR_QUOTE_STR "\""
+#define MPL_STR_DELIM_CHAR '#'
+#define MPL_STR_DELIM_STR "#"
+#define MPL_STR_ESCAPE_CHAR '\\'
+#define MPL_STR_HIDE_CHAR '*'
+#define MPL_STR_SEPAR_CHAR '$'
+#define MPL_STR_SEPAR_STR "$"
+
+int MPL_str_get_string_arg(const char *str, const char *key, char *val,
+ int maxlen);
+int MPL_str_get_binary_arg(const char *str, const char *key, char *buffer,
+ int maxlen, int *out_length);
+int MPL_str_get_int_arg(const char *str, const char *key, int *val_ptr);
+int MPL_str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ const char *val);
+int MPL_str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ const char *buffer, int length);
+int MPL_str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ int val);
+int MPL_str_add_string(char **str_ptr, int *maxlen_ptr, const char *val);
+int MPL_str_get_string(char **str_ptr, char *val, int maxlen);
+
+#endif
diff --git a/src/mpl/include/mpl_base.h b/src/mpl/include/mpl_base.h
new file mode 100644
index 0000000..9194a10
--- /dev/null
+++ b/src/mpl/include/mpl_base.h
@@ -0,0 +1,119 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_BASE_H_INCLUDED)
+#define MPL_BASE_H_INCLUDED
+
+/* this file splits off the base functionality in MPL, which does not
+ * depend on any of the exposed features. */
+
+#include "mplconfig.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+#if defined _mpl_restrict
+#define mpl_restrict _mpl_restrict
+#else
+#define mpl_restrict restrict
+#endif /* _mpl_restrict */
+
+#if defined _mpl_const
+#define mpl_const _mpl_const
+#else
+#define mpl_const const
+#endif /* _mpl_const */
+
+#if defined _mpl_inline
+#define mpl_inline _mpl_inline
+#else
+#define mpl_inline inline
+#endif /* _mpl_inline */
+
+#if defined MPL_HAVE_CTYPE_H
+#include <ctype.h>
+#endif /* MPL_HAVE_CTYPE_H */
+
+#if defined(MPL_HAVE_INTTYPES_H)
+#include <inttypes.h>
+#endif /* MPL_HAVE_INTTYPES_H */
+
+#if !defined ATTRIBUTE
+# if defined MPL_HAVE_GCC_ATTRIBUTE
+# define ATTRIBUTE(a_) __attribute__(a_)
+# else /* MPL_HAVE_GCC_ATTRIBUTE */
+# define ATTRIBUTE(a_)
+# endif /* MPL_HAVE_GCC_ATTRIBUTE */
+#endif /* ATTRIBUTE */
+
+#define MPL_STATIC_INLINE_PREFIX ATTRIBUTE((always_inline)) static inline
+#define MPL_STATIC_INLINE_SUFFIX ATTRIBUTE((always_inline))
+
+/* These likely/unlikely macros provide static branch prediction hints to the
+ * compiler, if such hints are available. Simply wrap the relevant expression in
+ * the macro, like this:
+ *
+ * if (unlikely(ptr == NULL)) {
+ * // ... some unlikely code path ...
+ * }
+ *
+ * They should be used sparingly, especially in upper-level code. It's easy to
+ * incorrectly estimate branching likelihood, while the compiler can often do a
+ * decent job if left to its own devices.
+ *
+ * These macros are not namespaced because the namespacing is cumbersome.
+ */
+#ifdef MPL_HAVE_BUILTIN_EXPECT
+# define unlikely(x_) __builtin_expect(!!(x_),0)
+# define likely(x_) __builtin_expect(!!(x_),1)
+#else
+# define unlikely(x_) (x_)
+# define likely(x_) (x_)
+#endif
+
+#define MPL_QUOTE(A) MPL_QUOTE2(A)
+#define MPL_QUOTE2(A) #A
+
+#define MPL_MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define MPL_MIN(a,b) (((a) < (b)) ? (a) : (b))
+
+/* Use this macro for each parameter to a function that is not referenced in
+ the body of the function */
+#ifdef MPL_HAVE_WINDOWS_H
+#define MPL_UNREFERENCED_ARG(a) a
+#else
+#define MPL_UNREFERENCED_ARG(a)
+#endif
+
+/* macro for finding the enclosing structure of an element */
+#define MPL_container_of(ptr, type, member) (type *)((char *)(ptr) - offsetof(type,member))
+
+/* This macro is used to silence warnings from the Mac OS X linker when
+ * an object file "has no symbols". The unused attribute prevents a
+ * warning about the unused dummy variable while the used attribute
+ * prevents the compiler from discarding the symbol altogether. This
+ * macro should be used at the top of any file that might not define any
+ * other variables or functions (perhaps due to conditional compilation
+ * via the preprocessor). A semicolon is expected after each invocation
+ * of this macro. */
+#define MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING \
+ static int MPL_UNIQUE_SYMBOL_NAME(dummy) ATTRIBUTE((unused,used)) = 0
+
+/* we jump through a couple of extra macro hoops to append the line
+ * number to the variable name in order to reduce the chance of a name
+ * collision with headers that might be included in the translation
+ * unit */
+#define MPL_UNIQUE_SYMBOL_NAME(prefix_) MPL_UNIQUE_IMPL1_(prefix_##_unique_L,__LINE__)
+#define MPL_UNIQUE_IMPL1_(prefix_,line_) MPL_UNIQUE_IMPL2_(prefix_,line_)
+#define MPL_UNIQUE_IMPL2_(prefix_,line_) MPL_UNIQUE_IMPL3_(prefix_,line_)
+#define MPL_UNIQUE_IMPL3_(prefix_,line_) prefix_##line_
+
+typedef int MPL_bool;
+
+#endif /* !defined(MPL_BASE_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_bt.h b/src/mpl/include/mpl_bt.h
new file mode 100644
index 0000000..7021067
--- /dev/null
+++ b/src/mpl/include/mpl_bt.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+
+#if !defined(MPL_BT_H_INCLUDED)
+#define MPL_BT_H_INCLUDED
+
+#include "mplconfig.h"
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#if !MPL_HAVE_DECL_BACKTRACE_CREATE_STATE
+struct backtrace_state;
+typedef void (*backtrace_error_callback)(void *data, const char *msg,
+ int errnum);
+
+extern struct backtrace_state *backtrace_create_state(
+ const char *filename, int threaded,
+ backtrace_error_callback error_callback, void *data);
+#endif
+#if !MPL_HAVE_DECL_BACKTRACE_PRINT
+extern void backtrace_print(struct backtrace_state *state, int skip, FILE *);
+#endif
+
+#define MPL_BACKTRACE_BUFFER_LEN 1024
+#define MPL_MAX_TRACE_DEPTH 32
+void MPL_backtrace_show(FILE *output);
+
+#if defined(__cplusplus)
+
+}
+#endif
+
+#endif /* !defined(MPL_BT_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_dbg.h b/src/mpl/include/mpl_dbg.h
new file mode 100644
index 0000000..f8881d1
--- /dev/null
+++ b/src/mpl/include/mpl_dbg.h
@@ -0,0 +1,148 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2005 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_DBG_H_INCLUDED
+#define MPL_DBG_H_INCLUDED
+
+#include "mplconfig.h"
+
+/*
+ * Multilevel debugging and tracing macros.
+ * The design is discussed at
+ * http://wiki.mpich.org/mpich/index.php/Debug_Event_Logging
+ *
+ * Basically, this provide a way to place debugging messages into
+ * groups (called *classes*), with levels of detail, and arbitrary
+ * messages. The messages can be turned on and off using environment
+ * variables and/or command-line options.
+ */
+
+#ifdef MPL_USE_DBG_LOGGING
+
+#define MPL_DBG_SELECTED(_class, _level) \
+ ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level)
+
+#define MPL_DBG_MSG(_class, _level, _string) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _string); \
+ } \
+ }
+
+#define MPL_DBG_MSG_S(_class, _level, _fmat, _string) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 1, _fmat, _string); \
+ } \
+ }
+
+#define MPL_DBG_MSG_D(_class, _level, _fmat, _int) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 2, _fmat, _int); \
+ } \
+ }
+
+#define MPL_DBG_MSG_P(_class, _level, _fmat, _pointer) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 3, _fmat, _pointer); \
+ } \
+ }
+
+#define MPL_DBG_MAXLINE 256
+#define MPL_DBG_FDEST _s,(size_t)MPL_DBG_MAXLINE
+/*M
+ MPL_DBG_MSG_FMT - General debugging output macro
+
+ Notes:
+ To use this macro, the third argument should be an "sprintf" - style
+ argument, using MPL_DBG_FDEST as the buffer argument. For example,
+.vb
+ MPL_DBG_MSG_FMT(CMM,VERBOSE,(MPL_DBG_FDEST,"fmat",args...));
+.ve
+ M*/
+
+#define MPL_DBG_MSG_FMT(_class, _level, _fmatargs) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ char _s[MPL_DBG_MAXLINE]; \
+ MPL_snprintf _fmatargs ; \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _s); \
+ } \
+ }
+
+#define MPL_DBG_STMT(_class, _level, _stmt) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ _stmt; \
+ } \
+ }
+
+#define MPL_DBG_OUT(_class, _msg) \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _msg)
+
+#define MPL_DBG_OUT_FMT(_class,_fmatargs) \
+ { \
+ char _s[MPL_DBG_MAXLINE]; \
+ MPL_snprintf _fmatargs ; \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _s); \
+ }
+
+#else
+#define MPL_DBG_SELECTED(_class,_level) 0
+#define MPL_DBG_MSG(_class,_level,_string)
+#define MPL_DBG_MSG_S(_class,_level,_fmat,_string)
+#define MPL_DBG_MSG_D(_class,_level,_fmat,_int)
+#define MPL_DBG_MSG_P(_class,_level,_fmat,_int)
+#define MPL_DBG_MSG_FMT(_class,_level,_fmatargs)
+#define MPL_DBG_STMT(_class,_level,_stmt)
+#define MPL_DBG_OUT(_class,_msg)
+#define MPL_DBG_OUT_FMT(_class,_fmtargs)
+#endif
+
+#define MPL_DBG_SUCCESS 0
+#define MPL_DBG_ERR_INTERN 1
+#define MPL_DBG_ERR_OTHER 2
+
+typedef unsigned int MPL_dbg_class;
+
+/* Special constants */
+enum MPL_DBG_LEVEL {
+ MPL_DBG_TERSE = 0,
+ MPL_DBG_TYPICAL = 50,
+ MPL_DBG_VERBOSE = 99
+};
+
+extern int MPL_dbg_active_classes;
+extern int MPL_dbg_max_level;
+
+extern MPL_dbg_class MPL_DBG_ROUTINE_ENTER;
+extern MPL_dbg_class MPL_DBG_ROUTINE_EXIT;
+extern MPL_dbg_class MPL_DBG_ROUTINE;
+extern MPL_dbg_class MPL_DBG_ALL;
+
+MPL_dbg_class MPL_dbg_class_alloc(const char *ucname, const char *lcname);
+void MPL_dbg_class_register(MPL_dbg_class cls, const char *ucname, const char *lcname);
+
+#define MPL_DBG_CLASS_CLR(cls) \
+ do { \
+ (cls) = 0; \
+ } while (0)
+
+#define MPL_DBG_CLASS_APPEND(out_class, in_class) \
+ do { \
+ (out_class) |= (in_class); \
+ } while (0)
+
+/* *INDENT-OFF* */
+int MPL_dbg_outevent(const char *, int, int, int, const char *, ...) ATTRIBUTE((format(printf, 5, 6)));
+/* *INDENT-ON* */
+
+int MPL_dbg_init(int *, char ***, int, int, int, int, int);
+int MPL_dbg_pre_init(int *, char ***, int);
+
+#endif
diff --git a/src/mpl/include/mpl_env.h b/src/mpl/include/mpl_env.h
new file mode 100644
index 0000000..1fce2bd
--- /dev/null
+++ b/src/mpl/include/mpl_env.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_ENV_H_INCLUDED)
+#define MPL_ENV_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+#if defined(MPL_HAVE_PUTENV) && defined(MPL_NEEDS_PUTENV_DECL)
+extern int putenv(char *string);
+#endif
+
+/* Prototypes for the functions to provide uniform access to the environment */
+int MPL_env2int(const char *envName, int *val);
+int MPL_env2range(const char *envName, int *lowPtr, int *highPtr);
+int MPL_env2bool(const char *envName, int *val);
+int MPL_env2str(const char *envName, const char **val);
+int MPL_env2double(const char *envName, double *val);
+int MPL_putenv(char *name_val);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_ENV_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_iov.h b/src/mpl/include/mpl_iov.h
new file mode 100644
index 0000000..ae25f6f
--- /dev/null
+++ b/src/mpl/include/mpl_iov.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_IOV_H_INCLUDED)
+#define MPL_IOV_H_INCLUDED
+
+#include <stdio.h>
+
+/* IOVs */
+/* The basic channel interface uses IOVs */
+#ifdef MPL_HAVE_WINDOWS_H
+ #define MPL_IOV_BUF_CAST char *
+#else
+ #define MPL_IOV_BUF_CAST void *
+#endif
+#ifdef MPL_HAVE_WINDOWS_H
+#include <winsock2.h>
+#define MPL_IOV WSABUF
+#define MPL_IOV_LEN len
+#define MPL_IOV_BUF buf
+#else
+#ifdef MPL_HAVE_SYS_TYPES_H
+#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
+#endif
+#ifdef MPL_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+#define MPL_IOV struct iovec
+#define MPL_IOV_LEN iov_len
+#define MPL_IOV_BUF iov_base
+#endif
+/* FIXME: How is IOV_LIMIT chosen? */
+#define MPL_IOV_LIMIT 16
+
+#endif /* !defined(MPL_IOV_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_msg.h b/src/mpl/include/mpl_msg.h
new file mode 100644
index 0000000..598e153
--- /dev/null
+++ b/src/mpl/include/mpl_msg.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2005 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_MSG_H_INCLUDED)
+#define MPL_MSG_H_INCLUDED
+
+#include "mpl.h"
+
+#if defined(MPL_HAVE_MACRO_VA_ARGS)
+#define MPL_error_printf(...) fprintf(stderr,__VA_ARGS__)
+#else
+#define MPL_error_printf printf
+#endif
+
+/* These routines are used to ensure that messages are sent to the
+ * appropriate output and (eventually) are properly
+ * internationalized */
+int MPL_usage_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_msg_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_internal_error_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_internal_sys_error_printf(mpl_const char *, int, mpl_const char *str,
+ ...) ATTRIBUTE((format(printf, 3, 4)));
+void MPL_exit(int);
+
+#endif /* !defined(MPL_MSG_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_shm.h b/src/mpl/include/mpl_shm.h
new file mode 100644
index 0000000..df078b7
--- /dev/null
+++ b/src/mpl/include/mpl_shm.h
@@ -0,0 +1,160 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* This file contains "pre" definitions and declarations for the OS wrappers.
+ * That is, things that shouldn't depend on much more than the mpichconf.h
+ * values. */
+
+#ifndef MPL_SHM_H_INCLUDED
+#define MPL_SHM_H_INCLUDED
+
+#include "mplconfig.h"
+
+#ifdef MPL_USE_SYSV_SHM
+#include "mpl_shm_sysv.h"
+#elif defined MPL_USE_MMAP_SHM
+#include "mpl_shm_mmap.h"
+#elif defined MPL_USE_NT_SHM
+#include "mpl_shm_win.h"
+#endif
+
+#define MPLI_SHM_FLAG_CLR 0x0
+#define MPLI_SHM_FLAG_SHM_CREATE 0x1
+#define MPLI_SHM_FLAG_SHM_ATTACH 0x10
+#define MPLI_SHM_FLAG_GHND_STATIC 0x100
+
+#define MPL_SHM_HND_INVALID NULL
+#define MPLI_SHM_GHND_INVALID NULL
+#define MPLI_SHM_GHND_INIT_VAL '\0'
+#define MPL_SHM_HND_SZ (sizeof(MPLI_shm_lghnd_t))
+#define MPL_SHM_GHND_SZ MPLI_SHM_GHND_SZ
+
+/* A Handle is valid if it is initialized/init and has a value
+ * different from the default/invalid value assigned during init
+ */
+#define MPLI_shm_hnd_is_valid(hnd) ( \
+ ((hnd) && \
+ MPLI_shm_lhnd_is_valid(hnd) && \
+ MPLI_shm_ghnd_is_valid(hnd)) \
+)
+
+/* With MMAP_SHM, NT_SHM & SYSV_SHM local handle is always init'ed */
+#define MPLI_shm_hnd_is_init(hnd) ( \
+ ((hnd) && /* MPL_shm_lhnd_is_init(hnd) && */ \
+ MPLI_shm_ghnd_is_init(hnd)) \
+)
+
+/* These macros are the setters/getters for the shm handle */
+#define MPLI_shm_lhnd_get(hnd) ((hnd)->lhnd)
+#define MPLI_shm_lhnd_set(hnd, val) ((hnd)->lhnd=val)
+#define MPLI_shm_lhnd_is_valid(hnd) (((hnd)->lhnd != MPLI_SHM_LHND_INVALID))
+#define MPLI_shm_lhnd_is_init(hnd) 1
+
+/* Allocate mem for references within the handle */
+/* Returns 0 on success, -1 on error */
+#define MPL_shm_hnd_ref_alloc(hnd)( \
+ ((hnd)->ghnd = (MPLI_shm_ghnd_t) \
+ MPL_malloc(MPLI_SHM_GHND_SZ)) ? 0 : -1 \
+)
+
+
+/* These macros are the setters/getters for the shm handle */
+#define MPLI_shm_ghnd_get_by_ref(hnd) ((hnd)->ghnd)
+
+/* Returns -1 on error, 0 on success */
+#define MPLI_shm_ghnd_get_by_val(hnd, str, strlen) ( \
+ (MPL_snprintf(str, strlen, "%s", \
+ MPLI_shm_ghnd_get_by_ref(hnd))) ? 0 : -1 \
+)
+#define MPLI_shm_ghnd_set_by_ref(hnd, val) ((hnd)->ghnd = val)
+/* Returns -1 on error, 0 on success */
+/* FIXME: What if val is a non-null terminated string ? */
+#define MPLI_shm_ghnd_set_by_val(hnd, fmt, val) ( \
+ (MPL_snprintf(MPLI_shm_ghnd_get_by_ref(hnd), \
+ MPLI_SHM_GHND_SZ, fmt, val)) ? 0 : -1 \
+)
+
+#define MPLI_shm_ghnd_is_valid(hnd) ( \
+ (((hnd)->ghnd == MPLI_SHM_GHND_INVALID) || \
+ (strlen((hnd)->ghnd) == 0)) ? 0 : 1 \
+)
+#define MPLI_shm_ghnd_is_init(hnd) ( \
+ ((hnd)->flag & MPLI_SHM_FLAG_GHND_STATIC) ? \
+ 1 : \
+ (((hnd)->ghnd != MPLI_SHM_GHND_INVALID) ? 1 : 0) \
+)
+
+/* Allocate mem for global handle.
+ * Returns 0 on success, -1 on failure
+ */
+static inline int MPLI_shm_ghnd_alloc(MPL_shm_hnd_t hnd)
+{
+ if(!(hnd->ghnd)){
+ hnd->ghnd = (MPLI_shm_ghnd_t)MPL_malloc(MPLI_SHM_GHND_SZ);
+ if(!(hnd->ghnd)){ return -1; }
+ }
+ /* Global handle is no longer static */
+ hnd->flag &= ~MPLI_SHM_FLAG_GHND_STATIC;
+ return 0;
+}
+
+
+/* Allocate mem for handle. Lazy allocation for global handle */
+/* Returns 0 on success, -1 on error */
+static inline int MPLI_shm_hnd_alloc(MPL_shm_hnd_t *hnd_ptr)
+{
+ *hnd_ptr = (MPL_shm_hnd_t) MPL_malloc(MPL_SHM_HND_SZ);
+ if(*hnd_ptr){
+ (*hnd_ptr)->flag = MPLI_SHM_FLAG_GHND_STATIC;
+ }
+ else{
+ return -1;
+ }
+ return 0;
+}
+
+/* Close Handle */
+#define MPLI_shm_hnd_close(hnd) MPLI_shm_lhnd_close(hnd)
+
+static inline void MPLI_shm_hnd_reset_val(MPL_shm_hnd_t hnd)
+{
+ MPLI_shm_lhnd_set(hnd, MPLI_SHM_LHND_INIT_VAL);
+ if(hnd->flag & MPLI_SHM_FLAG_GHND_STATIC){
+ hnd->ghnd = MPLI_SHM_GHND_INVALID;
+ }
+ else{
+ (hnd->ghnd)[0] = MPLI_SHM_GHND_INIT_VAL;
+ }
+}
+
+static inline void MPLI_shm_hnd_free(MPL_shm_hnd_t hnd)
+{
+ if(MPLI_shm_hnd_is_init(hnd)){
+ if(!(hnd->flag & MPLI_SHM_FLAG_GHND_STATIC)){
+ MPL_free(hnd->ghnd);
+ }
+ MPL_free(hnd);
+ }
+}
+
+/* interfaces */
+int MPL_shm_hnd_serialize(char *str, MPL_shm_hnd_t hnd, int str_len);
+int MPL_shm_hnd_deserialize(MPL_shm_hnd_t hnd, const char *str_hnd, size_t str_hnd_len);
+int MPL_shm_hnd_get_serialized_by_ref(MPL_shm_hnd_t hnd, char **str_ptr);
+int MPL_shm_hnd_deserialize_by_ref(MPL_shm_hnd_t hnd, char **ser_hnd_ptr);
+int MPL_shm_hnd_init(MPL_shm_hnd_t *hnd_ptr);
+int MPL_shm_hnd_finalize(MPL_shm_hnd_t *hnd_ptr);
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz);
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz);
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset);
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset);
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz);
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd);
+
+#endif /* MPL_SHM_H_INCLUDED */
diff --git a/src/mpl/include/mpl_shm_mmap.h b/src/mpl/include/mpl_shm_mmap.h
new file mode 100644
index 0000000..a2a91c9
--- /dev/null
+++ b/src/mpl/include/mpl_shm_mmap.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_MMAP_H_INCLUDED
+#define MPL_SHM_MMAP_H_INCLUDED
+
+typedef intptr_t MPLI_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_FNAME_LEN 50
+#define MPLI_SHM_GHND_SZ MPL_SHM_FNAME_LEN
+#define MPLI_SHM_LHND_INVALID (-1)
+#define MPLI_SHM_LHND_INIT_VAL (-1)
+
+#define MPLI_SHM_SEG_ALREADY_EXISTS EEXIST
+
+/* Returns 0 on success, -1 on error */
+int MPLI_shm_lhnd_close(MPL_shm_hnd_t hnd);
+
+#endif /* ifndef MPL_SHM_MMAP_H_INCLUDED */
diff --git a/src/mpl/include/mpl_shm_sysv.h b/src/mpl/include/mpl_shm_sysv.h
new file mode 100644
index 0000000..babae48
--- /dev/null
+++ b/src/mpl/include/mpl_shm_sysv.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_SYSV_H_INCLUDED
+#define MPL_SHM_SYSV_H_INCLUDED
+
+typedef int MPLI_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_MAX_INT_STR_LEN 20
+#define MPL_SHM_SEG_KEY_LEN MPL_SHM_MAX_INT_STR_LEN
+#define MPLI_SHM_GHND_SZ MPL_SHM_SEG_KEY_LEN
+#define MPLI_SHM_LHND_INVALID (-1)
+#define MPLI_SHM_LHND_INIT_VAL (-1)
+#define MPL_SHM_SER_HND_SZ MPLI_SHM_GHND_SZ
+
+#define MPL_SHM_SEG_ALREADY_EXISTS EEXIST
+
+/* Nothing to be done at close */
+#define MPLI_shm_lhnd_close(hnd) 0
+
+#endif /* ifndef MPL_SHM_SYSV_H_INCLUDED */
diff --git a/src/mpl/include/mpl_shm_win.h b/src/mpl/include/mpl_shm_win.h
new file mode 100644
index 0000000..02bfaf6
--- /dev/null
+++ b/src/mpl/include/mpl_shm_win.h
@@ -0,0 +1,70 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_WIN_INCLUDED
+#define MPL_SHM_WIN_INCLUDED
+
+typedef HANDLE MPL_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_SEG_NAME_LEN 70
+#define MPLI_SHM_GHND_SZ MPL_SHM_SEG_NAME_LEN
+#define MPLI_SHM_LHND_INVALID INVALID_HANDLE_VALUE
+#define MPLI_SHM_LHND_INIT_VAL INVALID_HANDLE_VALUE
+
+#define MPL_shm_SEG_ALREADY_EXISTS ERROR_ALREADY_EXISTS
+
+/* Returns 0 on success, -1 on error */
+#define MPLI_shm_lhnd_close(hnd)( \
+ (CloseHandle(MPLI_shm_lhnd_get(hnd)) != 0) ? 0 : -1 \
+)
+
+#if defined (HAVE_QUERYPERFORMANCECOUNTER)
+/*
+ * Returns size of uniqStr, 0 on error
+ */
+static inline int MPL_shm_get_uniq_str(char *str, int strlen)
+{
+ LARGE_INTEGER perfCnt;
+ QueryPerformanceCounter(&perfCnt);
+ return(MPL_snprintf(str, strlen, "MPICH_NEM_%d_%I64d",
+ GetCurrentThreadId(), (perfCnt.QuadPart)));
+}
+#endif
+
+/* Returns 0 on success, -1 on error */
+static inline int MPLI_shm_ghnd_set_uniq(MPL_shm_hnd_t hnd)
+{
+ if (MPL_shm_hnd_ref_alloc(hnd) == 0) {
+ if (MPLI_shm_get_uniq_str(hnd->ghnd, MPLI_SHM_GHND_SZ) != 0) {
+ return -1;
+ }
+ } else {
+ return -1;
+ }
+ return 0;
+}
+
+/* Nothing to be done when removing an SHM segment */
+static inline int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ return MPI_SUCCESS;
+}
+
+#endif /* ifndef MPL_SHM_WIN_INCLUDED */
diff --git a/src/mpl/include/mpl_sock.h b/src/mpl/include/mpl_sock.h
new file mode 100644
index 0000000..470b2bd
--- /dev/null
+++ b/src/mpl/include/mpl_sock.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_SOCK_H_INCLUDED)
+#define MPL_SOCK_H_INCLUDED
+
+#include "mplconfig.h"
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <errno.h>
+#include <netinet/tcp.h>
+#include <netdb.h>
+#include <limits.h>
+
+#ifdef MPL_HAVE_SYS_TYPES_H
+#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
+#endif
+#ifdef MPL_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
+#if !defined(MPL_HAVE_SYS_UIO_H)
+struct iovec;
+#endif
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+ssize_t MPL_large_writev(int fd, const struct iovec *iov, int iovcnt);
+ssize_t MPL_large_readv(int fd, const struct iovec *iov, int iovcnt);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_SOCK_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_str.h b/src/mpl/include/mpl_str.h
new file mode 100644
index 0000000..57861f2
--- /dev/null
+++ b/src/mpl/include/mpl_str.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_STR_H_INCLUDED)
+#define MPL_STR_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+#if defined MPL_NEEDS_SNPRINTF_DECL
+extern int snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
+#endif
+
+#if defined MPL_HAVE_SNPRINTF
+#define MPL_snprintf snprintf
+#else
+int MPL_snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
+#endif /* MPL_HAVE_SNPRINTF */
+
+int MPL_strncpy(char *dest, const char *src, size_t n);
+char *MPL_strsep(char **stringp, const char *delim);
+
+#if defined MPL_NEEDS_STRNCMP_DECL
+extern int strncmp(const char *s1, const char *s2, size_t n);
+#endif
+
+#if defined MPL_HAVE_STRNCMP
+#define MPL_strncmp strncmp
+#else
+#error "strncmp is required"
+#endif /* MPL_HAVE_STRNCMP */
+
+#if defined MPL_NEEDS_STRERROR_DECL
+extern char *strerror(int errnum);
+#endif
+#if defined MPL_HAVE_STRERROR
+#define MPL_strerror strerror
+#else
+char *MPL_strerror(int errnum);
+#endif /* MPL_HAVE_STRERROR */
+
+int MPL_strnapp(char *dest, const char *src, size_t n);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_STR_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_thread.h b/src/mpl/include/mpl_thread.h
new file mode 100644
index 0000000..8b0aad9
--- /dev/null
+++ b/src/mpl/include/mpl_thread.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_THREAD_H_INCLUDED)
+#define MPL_THREAD_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* _INVALID exists to avoid accidental macro evaluations to 0 */
+#define MPL_THREAD_PACKAGE_INVALID 0
+#define MPL_THREAD_PACKAGE_NONE 1
+#define MPL_THREAD_PACKAGE_POSIX 2
+#define MPL_THREAD_PACKAGE_SOLARIS 3
+#define MPL_THREAD_PACKAGE_WIN 4
+
+#if defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_POSIX)
+# include "mpl_thread_posix.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_SOLARIS)
+# include "mpl_thread_solaris.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_WIN)
+# include "mpl_thread_win.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE)
+typedef int MPL_thread_mutex_t;
+typedef int MPL_thread_cond_t;
+typedef int MPL_thread_id_t;
+typedef int MPL_thread_tls_t;
+typedef void (*MPL_thread_func_t) (void *data);
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
+#else
+# error "thread package not defined or unknown"
+#endif
+
+/* Error values */
+#define MPL_THREAD_SUCCESS 0
+#define MPL_THREAD_ERROR 1
+/* FIXME: Define other error codes. For now, any non-zero value is an error. */
+
+#include "mpl_thread_priv.h"
+
+#endif /* !defined(MPL_THREAD_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_thread_posix.h b/src/mpl/include/mpl_thread_posix.h
new file mode 100644
index 0000000..a073521
--- /dev/null
+++ b/src/mpl/include/mpl_thread_posix.h
@@ -0,0 +1,246 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/*
+ * Threads
+ */
+#ifndef MPL_THREAD_POSIX_H_INCLUDED
+#define MPL_THREAD_POSIX_H_INCLUDED
+
+#include "mpl.h" /* for MPL_sched_yield */
+
+#include <errno.h>
+#include <pthread.h>
+
+typedef pthread_mutex_t MPL_thread_mutex_t;
+typedef pthread_cond_t MPL_thread_cond_t;
+typedef pthread_t MPL_thread_id_t;
+typedef pthread_key_t MPL_thread_tls_t;
+
+#if defined(MPL_NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL)
+int pthread_mutexattr_settype(pthread_mutexattr_t * attr, int kind);
+#endif /* MPL_NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL */
+
+typedef void (*MPL_thread_func_t) (void *data);
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+
+#define MPL_thread_exit() \
+ do { \
+ pthread_exit(NULL); \
+ } while (0)
+
+#define MPL_thread_self(id_) \
+ do { \
+ *(id_) = pthread_self(); \
+ } while (0)
+
+#define MPL_thread_same(id1_, id2_, same_) \
+ do { \
+ *(same_) = pthread_equal(*(id1_), *(id2_)) ? TRUE : FALSE; \
+ } while (0)
+
+#define MPL_thread_yield MPL_sched_yield
+
+
+/*
+ * Mutexes
+ */
+
+/* FIXME: mutex creation and destruction should be implemented as routines
+ because there is no reason to use macros (these are not on the performance
+ critical path). Making these macros requires that any code that might use
+ these must load all of the pthread.h (or other thread library) support.
+ */
+
+/* FIXME: using constant initializer if available */
+
+/* FIXME: convert errors to an MPL_THREAD_ERR value */
+
+#if !defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE)
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_init(mutex_ptr_, NULL); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#else /* defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ pthread_mutexattr_t attr__; \
+ \
+ pthread_mutexattr_init(&attr__); \
+ pthread_mutexattr_settype(&attr__, MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE); \
+ err__ = pthread_mutex_init(mutex_ptr_, &attr__); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#endif /* defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
+
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_destroy(mutex_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_destroy", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+#define MPL_thread_mutex_lock(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ err__ = pthread_mutex_lock(mutex_ptr_); \
+ if (unlikely(err__)) { \
+ MPL_internal_sys_error_printf("pthread_mutex_lock", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ } \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+#define MPL_thread_mutex_unlock(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_unlock(mutex_ptr_); \
+ if (unlikely(err__)) { \
+ MPL_internal_sys_error_printf("pthread_mutex_unlock", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ } \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+/*
+ * Condition Variables
+ */
+
+#define MPL_thread_cond_create(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_init((cond_ptr_), NULL); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_destroy(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_destroy(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_destroy", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ /* The latest pthread specification says that cond_wait \
+ * routines aren't allowed to return EINTR, but some of the \
+ * older implementations still do. */ \
+ do { \
+ err__ = pthread_cond_wait((cond_ptr_), mutex_ptr_); \
+ } while (err__ == EINTR); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_wait", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_broadcast(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_broadcast(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_broadcast", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_signal(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_signal(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_signal", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+/*
+ * Thread Local Storage
+ */
+
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_key_create((tls_ptr_), (exit_func_ptr_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_key_create", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_key_delete(*(tls_ptr_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_key_delete", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr_, value_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_setspecific(*(tls_ptr_), (value_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_setspecific", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
+ do { \
+ *(value_ptr_) = pthread_getspecific(*(tls_ptr_)); \
+ \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } while (0)
+
+#endif /* MPL_THREAD_POSIX_H_INCLUDED */
diff --git a/src/mpl/include/mpl_thread_priv.h b/src/mpl/include/mpl_thread_priv.h
new file mode 100644
index 0000000..034cff9
--- /dev/null
+++ b/src/mpl/include/mpl_thread_priv.h
@@ -0,0 +1,98 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_THREAD_PRIV_H_INCLUDED)
+#define MPL_THREAD_PRIV_H_INCLUDED
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE && !defined(MPL_TLS_SPECIFIER)
+/* We need to provide a function that will cleanup the storage attached
+ * to the key. */
+void MPLI_cleanup_tls(void *a);
+
+/* In the case where the thread level is set in MPI_Init_thread, we
+ need a blended version of the non-threaded and the thread-multiple
+ definitions.
+
+ The approach is to have TWO MPLI_per_thread_t pointers. One is local
+ (The MPL_THREADPRIV_DECL is used in the routines local definitions),
+ as in the threaded version of these macros. This is set by using a routine
+ to get thread-private storage. The second is a preallocated, extern
+ MPLI_per_thread_t struct, as in the single threaded case. Based on
+ whether MPL is initialized with thread safety, one or the other is used.
+ */
+
+#define MPL_THREADPRIV_KEY_CREATE(key, var, err_ptr_) \
+ do { \
+ void *thread_ptr; \
+ \
+ MPL_thread_tls_create(MPLI_cleanup_tls, &(key) , err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ thread_ptr = MPL_calloc(1, sizeof(var)); \
+ if (unlikely(!thread_ptr)) { \
+ *((int *) err_ptr_) = MPL_THREAD_ERROR; \
+ break; \
+ } \
+ MPL_thread_tls_set(&(key), thread_ptr, err_ptr_); \
+ } while (0)
+
+#define MPL_THREADPRIV_KEY_GET_ADDR(is_threaded, key, var, addr, err_ptr_) \
+ do { \
+ if (is_threaded) { \
+ void *thread_ptr; \
+ MPL_thread_tls_get(&(key), &thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ if (!thread_ptr) { \
+ thread_ptr = MPL_calloc(1, sizeof(var)); \
+ if (unlikely(!thread_ptr)) { \
+ *((int *) err_ptr_) = MPL_THREAD_ERROR; \
+ break; \
+ } \
+ MPL_thread_tls_set(&(key), thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ } \
+ addr = thread_ptr; \
+ } \
+ else { \
+ addr = &(var); \
+ } \
+ } while (0)
+
+#define MPL_THREADPRIV_KEY_DESTROY(key, err_ptr_) \
+ do { \
+ void *thread_ptr; \
+ \
+ MPL_thread_tls_get(&(key), &thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ \
+ if (thread_ptr) \
+ MPL_free(thread_ptr); \
+ \
+ MPL_thread_tls_set(&(key), NULL, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ \
+ MPL_thread_tls_destroy(&(key), err_ptr_); \
+ } while (0)
+
+#else /* MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE || defined(MPL_TLS_SPECIFIER) */
+
+/* We have proper thread-local storage (TLS) support from the compiler, which
+ * should yield the best performance and simplest code, so we'll use that. */
+#define MPL_THREADPRIV_KEY_CREATE(...)
+#define MPL_THREADPRIV_KEY_GET_ADDR(is_threaded, key, var, addr, err_ptr_) \
+ do { \
+ addr = &(var); \
+ *((int *) err_ptr_) = MPL_THREAD_SUCCESS; \
+ } while (0)
+#define MPL_THREADPRIV_KEY_DESTROY(...)
+
+#endif
+
+#endif /* !defined(MPL_THREAD_PRIV_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_thread_solaris.h b/src/mpl/include/mpl_thread_solaris.h
new file mode 100644
index 0000000..83fe099
--- /dev/null
+++ b/src/mpl/include/mpl_thread_solaris.h
@@ -0,0 +1,195 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_THREAD_SOLARIS_H_INCLUDED
+#define MPL_THREAD_SOLARIS_H_INCLUDED
+
+#include <thread.h>
+#include <synch.h>
+
+typedef mutex_t MPL_thread_mutex_t;
+typedef cond_t MPL_thread_cond_t;
+typedef thread_t MPL_thread_id_t;
+
+typedef void (*MPL_thread_func_t) (void *data);
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+
+/*
+ * Threads
+ */
+
+#define MPL_thread_exit() \
+ do { \
+ thr_exit(NULL); \
+ } while (0)
+
+#define MPL_thread_self(id_ptr_) \
+ do { \
+ *(id_ptr_) = thr_self(); \
+ } while (0)
+
+#define MPL_thread_same(id1_ptr_, id2_ptr_, same_ptr_) \
+ do { \
+ *(same_ptr_) = (*(id1_ptr_) == *(id2_ptr_)) ? TRUE : FALSE; \
+ } while (0)
+
+#define MPL_thread_yield thr_yield
+
+
+/*
+ * Mutexes
+ */
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ *(mutex_ptr_) = DEFAULTMUTEX; \
+ if ((err_ptr_) == NULL) { \
+ *(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_destroy(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_destroy(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_lock(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_lock(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_lock(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_unlock(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_unlock(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_unlock(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+
+/*
+ * Condition Variables
+ */
+
+#define MPL_thread_cond_create(cond_ptr_, err_ptr_) \
+ do { \
+ *(cond_ptr_) = DEFAULTCV; \
+ if ((err_ptr_) == NULL) { \
+ *(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_destroy(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_destroy(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_destroy(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_wait((cond_ptr_), (mutex_ptr_)); \
+ } \
+ else { \
+ *(err_ptr_) = cond_wait((cond_ptr_), (mutex_ptr_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_broadcast(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_broadcast(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_broadcast(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_signal(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_signal(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_signal(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+
+/*
+ * Thread Local Storage
+ */
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_keycreate((tls_ptr), (exit_func_ptr)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_keycreate((tls_ptr), (exit_func_ptr)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ /* \
+ * FIXME: Solaris threads does not have a key destroy. We \
+ * need to create equivalent functionality to prevent a \
+ * callback from occuring when a thread exits after the TLS is \
+ * destroyed. This is the only way to prevent subsystems that \
+ * have shutdown from continuing to receive callbacks. \
+ */ \
+ if ((err_ptr_) != NULL) { \
+ *(err_ptr) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr, value_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_setspecific(*(tls_ptr), (value_)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr, value_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_setspecific(*(tls_ptr), (value_ptr_)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_ptr_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#endif /* MPL_THREAD_SOLARIS_H_INCLUDED */
diff --git a/src/mpl/include/mpl_thread_win.h b/src/mpl/include/mpl_thread_win.h
new file mode 100644
index 0000000..3c6f9f9
--- /dev/null
+++ b/src/mpl/include/mpl_thread_win.h
@@ -0,0 +1,106 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_THREAD_WIN_H_INCLUDED
+#define MPL_THREAD_WIN_H_INCLUDED
+
+#define WIN32_LEAN_AND_MEAN
+
+#include <windows.h>
+
+typedef HANDLE MPL_thread_mutex_t;
+typedef HANDLE MPL_thread_id_t;
+typedef DWORD MPL_thread_tls_t;
+
+typedef struct MPLI_win_thread_cond_fifo_t {
+ HANDLE event;
+ struct MPLI_win_thread_cond_fifo_t *next;
+} MPLI_win_thread_cond_fifo_t;
+typedef struct MPL_thread_cond_t {
+ MPL_thread_tls_t tls;
+ MPL_thread_mutex_t fifo_mutex;
+ MPLI_win_thread_cond_fifo_t *fifo_head, *fifo_tail;
+} MPL_thread_cond_t;
+
+typedef void (*MPL_thread_func_t) (void *data);
+
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+void MPL_thread_exit(void);
+void MPL_thread_self(MPL_thread_id_t * id);
+void MPL_thread_same(MPL_thread_id_t * id1, MPL_thread_id_t * id2, int *same);
+void MPL_thread_yield();
+
+void MPL_thread_mutex_create(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_destroy(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_lock(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_unlock(MPL_thread_mutex_t * mutex, int *err);
+
+void MPL_thread_cond_create(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_destroy(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_wait(MPL_thread_cond_t * cond, MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_cond_broadcast(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_signal(MPL_thread_cond_t * cond, int *err);
+
+/*
+ * Thread Local Storage
+ */
+
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ *(tls_ptr_) = TlsAlloc(); \
+ if ((err_ptr_) != NULL) { \
+ if (*(tls_ptr_) == TLS_OUT_OF_INDEXES) { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ else { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ BOOL result__; \
+ result__ = TlsFree(*(tls_ptr_)); \
+ if ((err_ptr_) != NULL) { \
+ if (result__) { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ else { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr_, value_, err_ptr_) \
+ do { \
+ BOOL result__; \
+ result__ = TlsSetValue(*(tls_ptr_), (value_)); \
+ if ((err_ptr_) != NULL) { \
+ if (result__) { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ else { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
+ do { \
+ *((void **)value_ptr_) = TlsGetValue(*(tls_ptr_)); \
+ if ((err_ptr_) != NULL) { \
+ if (*(value_ptr_) == 0 && GetLastError() != NO_ERROR) { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ else { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } \
+ } while (0)
+
+#endif /* MPL_THREAD_WIN_H_INCLUDED */
diff --git a/src/mpl/include/mpl_timer.h.in b/src/mpl/include/mpl_timer.h.in
new file mode 100644
index 0000000..dcc24c3
--- /dev/null
+++ b/src/mpl/include/mpl_timer.h.in
@@ -0,0 +1,247 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_TIMER_H_INCLUDED)
+#define MPL_TIMER_H_INCLUDED
+
+#include "mplconfig.h"
+
+#if defined (MPL_HAVE_UNISTD_H)
+#include <unistd.h>
+#if defined (MPL_NEEDS_USLEEP_DECL)
+int usleep(useconds_t usec);
+#endif
+#endif
+
+/*
+ * This include file provide the definitions that are necessary to use the
+ * timer calls, including the definition of the time stamp type and
+ * any inlined timer calls.
+ *
+ * The include file timerconf.h (created by autoheader from configure.ac)
+ * is needed only to build the function versions of the timers.
+ */
+/* Include the appropriate files */
+#define MPL_TIMER_KIND__GETHRTIME 1
+#define MPL_TIMER_KIND__CLOCK_GETTIME 2
+#define MPL_TIMER_KIND__GETTIMEOFDAY 3
+#define MPL_TIMER_KIND__LINUX86_CYCLE 4
+#define MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER 6
+#define MPL_TIMER_KIND__WIN86_CYCLE 7
+#define MPL_TIMER_KIND__GCC_IA64_CYCLE 8
+/* The value "MPL_TIMER_KIND__DEVICE" means that the ADI device provides the timer */
+#define MPL_TIMER_KIND__DEVICE 9
+#define MPL_TIMER_KIND__WIN64_CYCLE 10
+#define MPL_TIMER_KIND__MACH_ABSOLUTE_TIME 11
+#define MPL_TIMER_KIND__PPC64_CYCLE 12
+#define MPL_TIMER_KIND @MPL_TIMER_KIND@
+
+/* Define a time stamp */
+typedef @MPL_TIMER_TYPE@ MPL_time_t;
+
+/* The timer code is allowed to return "NOT_INITIALIZED" before the
+ * device is initialized. Once the device is initialized, it must
+ * always return SUCCESS, so the upper layers do not need to check for
+ * the return code. */
+#define MPL_TIMER_SUCCESS 0
+#define MPL_TIMER_ERR_NOT_INITIALIZED 1
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETHRTIME
+#include "mpl_timer_gethrtime.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__CLOCK_GETTIME
+#include "mpl_timer_clock_gettime.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__GETTIMEOFDAY
+#include "mpl_timer_gettimeofday.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__LINUX86_CYCLE
+#include "mpl_timer_linux86_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER
+#include "mpl_timer_query_performance_counter.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__WIN86_CYCLE || MPL_TIMER_KIND == MPL_TIMER_KIND__WIN64_CYCLE
+#include "mpl_timer_win86_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__GCC_IA64_CYCLE
+#include "mpl_timer_gcc_ia64_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__DEVICE
+#include "mpl_timer_device.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__MACH_ABSOLUTE_TIME
+#include "mpl_timer_mach_absolute_time.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__PPC64_CYCLE
+#include "mpl_timer_ppc64_cycle.h"
+#endif
+
+/*
+ * Prototypes. These are defined here so that inlined timer calls can
+ * use them, as well as any profiling and timing code that is built into
+ * MPL
+ */
+
+#if defined MPLI_WTIME_IS_A_FUNCTION
+
+/*@
+ MPL_wtime - Return a time stamp
+
+ Output Parameter:
+. timeval - A pointer to an 'MPL_wtime_t' variable.
+
+ Notes:
+ This routine returns an `opaque` time value. This difference between two
+ time values returned by 'MPL_wtime' can be converted into an elapsed time
+ in seconds with the routine 'MPL_wtime_diff'.
+
+ This routine is defined this way to simplify its implementation as a macro.
+ For example, the for Intel x86 and gcc,
+.vb
+#define MPL_wtime(timeval) \
+ __asm__ __volatile__("rdtsc" : "=A" (*timeval))
+.ve
+
+ For some purposes, it is important
+ that the timer calls change the timing of the code as little as possible.
+ This form of a timer routine provides for a very fast timer that has
+ minimal impact on the rest of the code.
+
+ From a semantic standpoint, this format emphasizes that any particular
+ timer value has no meaning; only the difference between two values is
+ meaningful.
+
+ Module:
+ Timer
+
+ Question:
+ MPI-2 allows 'MPI_Wtime' to be a macro. We should make that easy; this
+ version does not accomplish that.
+ @*/
+int MPL_wtime(MPL_time_t * timeval);
+#endif /* MPLI_WTIME_IS_A_FUNCTION */
+
+/*@
+ MPL_wtime_diff - Compute the difference between two time stamps
+
+ Input Parameters:
+. t1, t2 - Two time values set by 'MPL_wtime' on this process.
+
+
+ Output Parameter:
+. diff - The different in time between t2 and t1, measured in seconds.
+
+ Note:
+ If 't1' is null, then 't2' is assumed to be differences accumulated with
+ 'MPL_wtime_acc', and the output value gives the number of seconds that
+ were accumulated.
+
+ Question:
+ Instead of handling a null value of 't1', should we have a separate
+ routine 'MPL_wtime_todouble' that converts a single timestamp to a
+ double value?
+
+ Module:
+ Timer
+ @*/
+int MPL_wtime_diff( MPL_time_t *t1, MPL_time_t *t2, double *diff );
+
+/*@
+ MPL_wtime_acc - Accumulate time values
+
+ Input Parameters:
+. t1,t2,t3 - Three time values. 't3' is updated with the difference between
+ 't2' and 't1': '*t3 += (t2 - t1)'.
+
+ Notes:
+ This routine is used to accumulate the time spent with a block of code
+ without first converting the time stamps into a particular arithmetic
+ type such as a 'double'. For example, if the 'MPL_wtime' routine accesses
+ a cycle counter, this routine (or macro) can perform the accumulation using
+ integer arithmetic.
+
+ To convert a time value accumulated with this routine, use 'MPL_wtime_diff'
+ with a 't1' of zero.
+
+ Module:
+ Timer
+ @*/
+int MPL_wtime_acc( MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3 );
+
+/*@
+ MPL_wtime_todouble - Converts a timestamp to a double
+
+ Input Parameter:
+. timeval - 'MPL_time_t' time stamp
+
+ Output Parameter:
+. seconds - Time in seconds from an arbitrary (but fixed) time in the past
+
+ Notes:
+ This routine may be used to change a timestamp into a number of seconds,
+ suitable for 'MPI_Wtime'.
+
+ @*/
+int MPL_wtime_todouble( MPL_time_t *timeval, double *seconds );
+
+/*@
+ MPL_wtick - Provide the resolution of the 'MPL_wtime' timer
+
+ Return value:
+ Resolution of the timer in seconds. In many cases, this is the
+ time between ticks of the clock that 'MPL_wtime' returns. In other
+ words, the minimum significant difference that can be computed by
+ 'MPL_wtime_diff'.
+
+ Note that in some cases, the resolution may be estimated. No application
+ should expect either the same estimate in different runs or the same
+ value on different processes.
+
+ Module:
+ Timer
+ @*/
+int MPL_wtick(double *);
+
+/*@
+ MPL_wtime_init - Initialize the timer
+
+ Note:
+ This routine should perform any steps needed to initialize the timer.
+ In addition, it should set the value of the attribute 'MPI_WTIME_IS_GLOBAL'
+ if the timer is known to be the same for all processes in 'MPI_COMM_WORLD'
+ (the value is zero by default).
+
+ Module:
+ Timer
+
+ @*/
+int MPL_wtime_init(void);
+
+/*
+ * For timers that do not have defined resolutions, compute the resolution
+ * by sampling the clock itself.
+ *
+ */
+static double tickval = -1.0;
+
+static void init_wtick(void) ATTRIBUTE((unused));
+static void init_wtick(void)
+{
+ double timediff;
+ MPL_time_t t1, t2;
+ int cnt;
+ int icnt;
+
+ tickval = 1.0e6;
+ for (icnt = 0; icnt < 10; icnt++) {
+ cnt = 1000;
+ MPL_wtime(&t1);
+ do {
+ MPL_wtime(&t2);
+ MPL_wtime_diff(&t1, &t2, &timediff);
+ if (timediff > 0)
+ break;
+ }
+ while (cnt--);
+ if (cnt && timediff > 0.0 && timediff < tickval) {
+ MPL_wtime_diff(&t1, &t2, &tickval);
+ }
+ }
+}
+
+#endif /* !defined(MPL_TIMER_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_timer_clock_gettime.h b/src/mpl/include/mpl_timer_clock_gettime.h
new file mode 100644
index 0000000..6e0aa79
--- /dev/null
+++ b/src/mpl/include/mpl_timer_clock_gettime.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_CLOCK_GETTIME_H_INCLUDED
+#define MPL_TIMER_CLOCK_GETTIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <time.h>
+#ifdef MPL_NEEDS_SYS_TIME_H
+/* Some OS'es mistakenly require sys/time.h to get the definition of
+ CLOCK_REALTIME (POSIX requires the definition to be in time.h) */
+#include <sys/time.h>
+#endif
+
+#endif
diff --git a/src/mpl/include/mpl_timer_device.h b/src/mpl/include/mpl_timer_device.h
new file mode 100644
index 0000000..5b6f599
--- /dev/null
+++ b/src/mpl/include/mpl_timer_device.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_DEVICE_H_INCLUDED
+#define MPL_TIMER_DEVICE_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+/*
+ * If the timer capability is provided by the device, it would need to
+ * expose it in two ways:
+ *
+ * 1. It would expose it through the MPID_ functionality. This
+ * model would be used by the MPICH internal code, and would
+ * give fast access to the timers.
+ *
+ * 2. It would expose it through the MPL_timer_ function pointers.
+ * This model would be used by "external" code segments (such as
+ * MPL) which do not have direct access to the MPICH devices.
+ * This model might be slightly slower, but would give the same
+ * functionality.
+ */
+extern int (*MPL_wtime_fn)(MPL_time_t *timeval);
+extern int (*MPL_wtime_diff_fn)(MPL_time_t *t1, MPL_time_t *t2, double *diff);
+extern int (*MPL_wtime_acc_fn)(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3);
+extern int (*MPL_wtime_todouble_fn)(MPL_time_t *timeval, double *seconds);
+extern int (*MPL_wtick_fn)(double *tick);
+
+#endif
diff --git a/src/mpl/include/mpl_timer_gcc_ia64_cycle.h b/src/mpl/include/mpl_timer_gcc_ia64_cycle.h
new file mode 100644
index 0000000..32ac6c4
--- /dev/null
+++ b/src/mpl/include/mpl_timer_gcc_ia64_cycle.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GCC_IA64_CYCLE_H_INCLUDED
+#define MPL_TIMER_GCC_IA64_CYCLE_H_INCLUDED
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ MPL_time_t t_val;
+
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ t_val = __getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (t_val));
+#endif
+
+ *timeval = t_val;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/include/mpl_timer_gethrtime.h b/src/mpl/include/mpl_timer_gethrtime.h
new file mode 100644
index 0000000..3662795
--- /dev/null
+++ b/src/mpl/include/mpl_timer_gethrtime.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GETHRTIME_H_INCLUDED
+#define MPL_TIMER_GETHRTIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <sys/time.h>
+
+#endif
diff --git a/src/mpl/include/mpl_timer_gettimeofday.h b/src/mpl/include/mpl_timer_gettimeofday.h
new file mode 100644
index 0000000..5afdb57
--- /dev/null
+++ b/src/mpl/include/mpl_timer_gettimeofday.h
@@ -0,0 +1,15 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GETTIMEOFDAY_H_INCLUDED
+#define MPL_TIMER_GETTIMEOFDAY_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+#endif
diff --git a/src/mpl/include/mpl_timer_linux86_cycle.h b/src/mpl/include/mpl_timer_linux86_cycle.h
new file mode 100644
index 0000000..f43f5f2
--- /dev/null
+++ b/src/mpl/include/mpl_timer_linux86_cycle.h
@@ -0,0 +1,42 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_LINUX86_CYCLE_H_INCLUDED
+#define MPL_TIMER_LINUX86_CYCLE_H_INCLUDED
+
+static inline int MPL_wtime(MPL_time_t *timeval)
+{
+/* The rdtsc instruction is not a "serializing" instruction, so the
+ processor is free to reorder it. In order to get more accurate
+ timing numbers with rdtsc, we need to put a serializing
+ instruction, like cpuid, before rdtsc. X86_64 architectures have
+ the rdtscp instruction which is synchronizing, we use this when we
+ can. */
+#ifdef MPL_LINUX86_CYCLE_RDTSCP
+ unsigned long long lower,upper,extra;
+ __asm__ __volatile__ ("rdtscp\n" : "=a" (lower), "=d" (upper), "=c" (extra));
+ *timeval = (upper << 32) + lower;
+
+#elif defined(MPL_LINUX86_CYCLE_CPUID_RDTSC64)
+ unsigned long long lower, upper;
+ __asm__ __volatile__("cpuid ; rdtsc" : "=a" (lower), "=d" (upper) : : "ebx", "ecx");
+ *timeval = (upper << 32) + lower;
+
+#elif defined(MPL_LINUX86_CYCLE_CPUID_RDTSC32)
+ __asm__ __volatile__("cpuid ; rdtsc" : "=A" (*timeval) : : "ebx", "ecx");
+
+#elif defined(MPL_LINUX86_CYCLE_RDTSC)
+/* The configure test using cpuid must have failed, try just rdtsc by itself */
+ __asm__ __volatile__("rdtsc" : "=A" (*timeval));
+
+#else
+#error Dont know which Linux timer to use
+#endif
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/include/mpl_timer_mach_absolute_time.h b/src/mpl/include/mpl_timer_mach_absolute_time.h
new file mode 100644
index 0000000..e520f4f
--- /dev/null
+++ b/src/mpl/include/mpl_timer_mach_absolute_time.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_MACH_ABSOLUTE_TIME_H_INCLUDED
+#define MPL_TIMER_MACH_ABSOLUTE_TIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <mach/mach_time.h>
+
+#endif
diff --git a/src/mpl/include/mpl_timer_ppc64_cycle.h b/src/mpl/include/mpl_timer_ppc64_cycle.h
new file mode 100644
index 0000000..8b63933
--- /dev/null
+++ b/src/mpl/include/mpl_timer_ppc64_cycle.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_PPC64_CYCLE_H_INCLUDED
+#define MPL_TIMER_PPC64_CYCLE_H_INCLUDED
+
+#define SPRN_TBRU 0x10D
+#define SPRN_TBRL 0x10C
+
+static inline uint64_t tb()
+{
+ unsigned temp;
+ union
+ {
+ struct { unsigned hi, lo; } w;
+ uint64_t d;
+ } result;
+
+ do
+ {
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (SPRN_TBRU));
+ asm volatile ("mfspr %0,%1" : "=r" (result.w.lo) : "i" (SPRN_TBRL));
+ asm volatile ("mfspr %0,%1" : "=r" (result.w.hi) : "i" (SPRN_TBRU));
+ }
+ while (temp != result.w.hi);
+
+ return result.d;
+}
+
+static inline int MPL_wtime(MPL_time_t *timeval)
+{
+ *timeval = tb();
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/include/mpl_timer_query_performance_counter.h b/src/mpl/include/mpl_timer_query_performance_counter.h
new file mode 100644
index 0000000..0638c13
--- /dev/null
+++ b/src/mpl/include/mpl_timer_query_performance_counter.h
@@ -0,0 +1,20 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_QUERY_PERFORMANCE_COUNTER_H_INCLUDED
+#define MPL_TIMER_QUERY_PERFORMANCE_COUNTER_H_INCLUDED
+
+#include <winsock2.h>
+#include <windows.h>
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ QueryPerformanceCounter(timeval);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/include/mpl_timer_win86_cycle.h b/src/mpl/include/mpl_timer_win86_cycle.h
new file mode 100644
index 0000000..ad670ed
--- /dev/null
+++ b/src/mpl/include/mpl_timer_win86_cycle.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_WIN86_CYCLE_H_INCLUDED
+#define MPL_TIMER_WIN86_CYCLE_H_INCLUDED
+
+#include <winsock2.h>
+#include <windows.h>
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ register int *f1 = (int*)var_ptr;
+ __asm cpuid;
+ __asm rdtsc;
+ __asm mov ecx, f1;
+ __asm mov [ecx], eax;
+ __asm mov [ecx + TYPE int], edx;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/include/mpl_trmem.h b/src/mpl/include/mpl_trmem.h
new file mode 100644
index 0000000..7b32df5
--- /dev/null
+++ b/src/mpl/include/mpl_trmem.h
@@ -0,0 +1,199 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_TRMEM_H_INCLUDED)
+#define MPL_TRMEM_H_INCLUDED
+
+#if defined MPL_NEEDS_STRDUP_DECL && !defined strdup
+extern char *strdup(const char *);
+#endif /* MPL_NEEDS_STRDUP_DECL */
+
+#if defined(MPL_USE_MEMORY_TRACING)
+#define MPL_strdup(a) MPL_trstrdup(a,__LINE__,__FILE__)
+#elif defined(MPL_HAVE_STRDUP)
+#define MPL_strdup strdup
+#else
+char *MPL_strdup(const char *str);
+#endif /* defined(MPL_USE_MEMORY_TRACING) || defined(MPL_HAVE_STRDUP) */
+
+#ifdef MPL_USE_MEMORY_TRACING
+/*M
+ MPL_malloc - Allocate memory
+
+ Synopsis:
+.vb
+ void *MPL_malloc( size_t len )
+.ve
+
+ Input Parameter:
+. len - Length of memory to allocate in bytes
+
+ Return Value:
+ Pointer to allocated memory, or null if memory could not be allocated.
+
+ Notes:
+ This routine will often be implemented as the simple macro
+.vb
+ #define MPL_malloc(n) malloc(n)
+.ve
+ However, it can also be defined as
+.vb
+ #define MPL_malloc(n) MPL_trmalloc(n,__LINE__,__FILE__)
+.ve
+ where 'MPL_trmalloc' is a tracing version of 'malloc' that is included with
+ MPICH.
+
+ Module:
+ Utility
+ M*/
+#define MPL_malloc(a) MPL_trmalloc((a),__LINE__,__FILE__)
+
+/*M
+ MPL_calloc - Allocate memory that is initialized to zero.
+
+ Synopsis:
+.vb
+ void *MPL_calloc( size_t nelm, size_t elsize )
+.ve
+
+ Input Parameters:
++ nelm - Number of elements to allocate
+- elsize - Size of each element.
+
+ Notes:
+ Like 'MPL_malloc' and 'MPL_free', this will often be implemented as a
+ macro but may use 'MPL_trcalloc' to provide a tracing version.
+
+ Module:
+ Utility
+ M*/
+#define MPL_calloc(a,b) MPL_trcalloc((a),(b),__LINE__,__FILE__)
+
+/*M
+ MPL_free - Free memory
+
+ Synopsis:
+.vb
+ void MPL_free( void *ptr )
+.ve
+
+ Input Parameter:
+. ptr - Pointer to memory to be freed. This memory must have been allocated
+ with 'MPL_malloc'.
+
+ Notes:
+ This routine will often be implemented as the simple macro
+.vb
+ #define MPL_free(n) free(n)
+.ve
+ However, it can also be defined as
+.vb
+ #define MPL_free(n) MPL_trfree(n,__LINE__,__FILE__)
+.ve
+ where 'MPL_trfree' is a tracing version of 'free' that is included with
+ MPICH.
+
+ Module:
+ Utility
+ M*/
+#define MPL_free(a) MPL_trfree(a,__LINE__,__FILE__)
+
+#define MPL_realloc(a,b) MPL_trrealloc((a),(b),__LINE__,__FILE__)
+
+#else /* MPL_USE_MEMORY_TRACING */
+/* No memory tracing; just use native functions */
+#define MPL_malloc(a) malloc((size_t)(a))
+#define MPL_calloc(a,b) calloc((size_t)(a),(size_t)(b))
+#define MPL_free(a) free((void *)(a))
+#define MPL_realloc(a,b) realloc((void *)(a),(size_t)(b))
+
+#endif /* MPL_USE_MEMORY_TRACING */
+
+
+/* --------------------------------------------------------------------
+ * MPL memory alignment union
+ * The MPL_mem_alignment_t union is used to help internal structures or buffers
+ * follow the alignment rules for all predefined datatypes. */
+
+#if 0 /* sample usage : wrap up sample_t structure. */
+typedef union {
+ sample_t var;
+ MPL_mem_alignment_t alignment;
+} aligned_sample_t;
+#endif
+
+/* Union including all C types that possibly require the largest alignment bytes.
+ * Note that we do not need other Fortran/CXX predefined types because all of them
+ * are internally translated to appropriate C types. */
+typedef union {
+ /* Integer types.
+ * We only list signed types here, because an unsigned type always require
+ * the same alignment as its signed version. Fix me if this theory is wrong.*/
+ long long_align;
+#ifdef HAVE_LONG_LONG
+ long long ll_align;
+#endif
+#ifdef HAVE_INT32_T
+ int32_t int32_t_align;
+#endif
+#ifdef HAVE_INT64_T
+ int64_t int64_t_align;
+#endif
+
+ /* Logical type */
+#ifdef HAVE__BOOL
+ _Bool bool_align;
+#endif
+
+ /* Floating-point types */
+ double double_align;
+#ifdef HAVE_LONG_DOUBLE
+ long double ld_align;
+#endif
+
+ /* Complex types */
+#ifdef HAVE_DOUBLE__COMPLEX
+ double _Complex d_complex_align;
+#endif
+#ifdef HAVE_LONG_DOUBLE__COMPLEX
+ long double _Complex ld_complex_align;
+#endif
+ /* MPICH handles Fortran/CXX complex types as structure (see src/include/oputil.h).
+ * Because some platform may have special alignment rule for structures,
+ * we include them as well. */
+ struct {
+ double re;
+ double im;
+ } mpl_d_complex_align;
+#ifdef HAVE_LONG_DOUBLE
+ struct {
+ long double re;
+ long double im;
+ } mpl_ld_complex_align;
+#endif
+} MPL_mem_alignment_t;
+
+/* END of MPL memory alignment union
+ * -------------------------------------------------------------------- */
+
+/* FIXME: Consider an option of specifying __attribute__((malloc)) for
+ gcc - this lets gcc-style compilers know that the returned pointer
+ does not alias any pointer prior to the call.
+ */
+void MPL_trinit(int, int);
+void *MPL_trmalloc(size_t, int, const char[]);
+void MPL_trfree(void *, int, const char[]);
+int MPL_trvalid(const char[]);
+int MPL_trvalid2(const char[],int,const char[]);
+void *MPL_trcalloc(size_t, size_t, int, const char[]);
+void *MPL_trrealloc(void *, size_t, int, const char[]);
+void *MPL_trstrdup(const char *, int, const char[]);
+
+/* Make sure that FILE is defined */
+#include <stdio.h>
+void MPL_trdump(FILE *, int);
+
+#endif /* !defined(MPL_TRMEM_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_uthash.h b/src/mpl/include/mpl_uthash.h
new file mode 100755
index 0000000..ba46af1
--- /dev/null
+++ b/src/mpl/include/mpl_uthash.h
@@ -0,0 +1,980 @@
+/* MPICH changes:
+ *
+ * - The file name has been changed to avoid conflicts with any system-installed
+ * "uthash.h" header files.
+ * - some configure-time checking for __typeof() support was added
+ * - intentionally omitted from "mpl.h" in order to require using code to opt-in
+ * - override malloc/free/realloc to call MPL routines
+ */
+/*
+Copyright (c) 2003-2014, Troy D. Hanson http://troydhanson.github.com/uthash/
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef MPL_UTHASH_H
+#define MPL_UTHASH_H
+
+#include <string.h> /* memcmp,strlen */
+#include <stddef.h> /* ptrdiff_t */
+#include <stdlib.h> /* exit() */
+
+#ifdef MPL_HAVE___TYPEOF /* MPICH modification */
+/* These macros use decltype or the earlier __typeof GNU extension.
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+ when compiling c++ source) this code uses whatever method is needed
+ or, for VS2008 where neither is available, uses casting workarounds. */
+#if defined(_MSC_VER) /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+#define MPL_DECLTYPE(x) (decltype(x))
+#else /* VS2008 or older (or VS2010 in C mode) */
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#endif
+#elif defined(__BORLANDC__) || defined(__LCC__) || defined(__WATCOMC__)
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#else /* GNU, Sun and other compilers */
+#define MPL_DECLTYPE(x) (__typeof(x))
+#endif
+#else /* !MPL_HAVE___TYPEOF */
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#endif /* !MPL_HAVE__TYPEOF */
+
+
+#ifdef MPL_NO_DECLTYPE
+#define MPL_DECLTYPE_ASSIGN(dst,src) \
+do { \
+ char **_da_dst = (char**)(&(dst)); \
+ *_da_dst = (char*)(src); \
+} while(0)
+#else
+#define MPL_DECLTYPE_ASSIGN(dst,src) \
+do { \
+ (dst) = MPL_DECLTYPE(dst)(src); \
+} while(0)
+#endif
+
+/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */
+#if defined(_WIN32)
+#if defined(_MSC_VER) && _MSC_VER >= 1600
+#include <stdint.h>
+#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+#elif defined(__GNUC__) && !defined(__VXWORKS__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+
+#define MPL_UTHASH_VERSION 1.9.9
+
+#ifndef MPL_uthash_fatal
+#define MPL_uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */
+#endif
+#ifndef MPL_uthash_malloc
+#define MPL_uthash_malloc(sz) MPL_malloc(sz) /* malloc fcn */
+#endif
+#ifndef MPL_uthash_free
+#define MPL_uthash_free(ptr,sz) MPL_free(ptr) /* free fcn */
+#endif
+
+#ifndef MPL_uthash_noexpand_fyi
+#define MPL_uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
+#endif
+#ifndef MPL_uthash_expand_fyi
+#define MPL_uthash_expand_fyi(tbl) /* can be defined to log expands */
+#endif
+
+/* initial number of buckets */
+#define MPL_HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */
+#define MPL_HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */
+#define MPL_HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */
+
+/* calculate the element whose hash handle address is hhe */
+#define MPL_ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+
+#define MPL_HASH_FIND(hh,head,keyptr,keylen,out) \
+do { \
+ out=NULL; \
+ if (head != NULL) { \
+ unsigned _hf_bkt,_hf_hashv; \
+ MPL_HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \
+ if (MPL_HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv) != 0) { \
+ MPL_HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \
+ keyptr,keylen,out); \
+ } \
+ } \
+} while (0)
+
+#ifdef MPL_HASH_BLOOM
+#define MPL_HASH_BLOOM_BITLEN (1UL << MPL_HASH_BLOOM)
+#define MPL_HASH_BLOOM_BYTELEN (MPL_HASH_BLOOM_BITLEN/8UL) + (((MPL_HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL)
+#define MPL_HASH_BLOOM_MAKE(tbl) \
+do { \
+ (tbl)->bloom_nbits = MPL_HASH_BLOOM; \
+ (tbl)->bloom_bv = (uint8_t*)MPL_uthash_malloc(MPL_HASH_BLOOM_BYTELEN); \
+ if (!((tbl)->bloom_bv)) { MPL_uthash_fatal( "out of memory"); } \
+ memset((tbl)->bloom_bv, 0, MPL_HASH_BLOOM_BYTELEN); \
+ (tbl)->bloom_sig = MPL_HASH_BLOOM_SIGNATURE; \
+} while (0)
+
+#define MPL_HASH_BLOOM_FREE(tbl) \
+do { \
+ MPL_uthash_free((tbl)->bloom_bv, MPL_HASH_BLOOM_BYTELEN); \
+} while (0)
+
+#define MPL_HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U)))
+#define MPL_HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U)))
+
+#define MPL_HASH_BLOOM_ADD(tbl,hashv) \
+ MPL_HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U)))
+
+#define MPL_HASH_BLOOM_TEST(tbl,hashv) \
+ MPL_HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U)))
+
+#else
+#define MPL_HASH_BLOOM_MAKE(tbl)
+#define MPL_HASH_BLOOM_FREE(tbl)
+#define MPL_HASH_BLOOM_ADD(tbl,hashv)
+#define MPL_HASH_BLOOM_TEST(tbl,hashv) (1)
+#define MPL_HASH_BLOOM_BYTELEN 0U
+#endif
+
+#define MPL_HASH_MAKE_TABLE(hh,head) \
+do { \
+ (head)->hh.tbl = (MPL_UT_hash_table*)MPL_uthash_malloc( \
+ sizeof(MPL_UT_hash_table)); \
+ if (!((head)->hh.tbl)) { MPL_uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl, 0, sizeof(MPL_UT_hash_table)); \
+ (head)->hh.tbl->tail = &((head)->hh); \
+ (head)->hh.tbl->num_buckets = MPL_HASH_INITIAL_NUM_BUCKETS; \
+ (head)->hh.tbl->log2_num_buckets = MPL_HASH_INITIAL_NUM_BUCKETS_LOG2; \
+ (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
+ (head)->hh.tbl->buckets = (MPL_UT_hash_bucket*)MPL_uthash_malloc( \
+ MPL_HASH_INITIAL_NUM_BUCKETS*sizeof(struct MPL_UT_hash_bucket)); \
+ if (! (head)->hh.tbl->buckets) { MPL_uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl->buckets, 0, \
+ MPL_HASH_INITIAL_NUM_BUCKETS*sizeof(struct MPL_UT_hash_bucket)); \
+ MPL_HASH_BLOOM_MAKE((head)->hh.tbl); \
+ (head)->hh.tbl->signature = MPL_HASH_SIGNATURE; \
+} while(0)
+
+#define MPL_HASH_ADD(hh,head,fieldname,keylen_in,add) \
+ MPL_HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add)
+
+#define MPL_HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \
+do { \
+ replaced=NULL; \
+ MPL_HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \
+ if (replaced!=NULL) { \
+ MPL_HASH_DELETE(hh,head,replaced); \
+ } \
+ MPL_HASH_ADD(hh,head,fieldname,keylen_in,add); \
+} while(0)
+
+#define MPL_HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
+do { \
+ unsigned _ha_bkt; \
+ (add)->hh.next = NULL; \
+ (add)->hh.key = (char*)(keyptr); \
+ (add)->hh.keylen = (unsigned)(keylen_in); \
+ if (!(head)) { \
+ head = (add); \
+ (head)->hh.prev = NULL; \
+ MPL_HASH_MAKE_TABLE(hh,head); \
+ } else { \
+ (head)->hh.tbl->tail->next = (add); \
+ (add)->hh.prev = MPL_ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
+ (head)->hh.tbl->tail = &((add)->hh); \
+ } \
+ (head)->hh.tbl->num_items++; \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ MPL_HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \
+ (add)->hh.hashv, _ha_bkt); \
+ MPL_HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \
+ MPL_HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \
+ MPL_HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \
+ MPL_HASH_FSCK(hh,head); \
+} while(0)
+
+#define MPL_HASH_TO_BKT( hashv, num_bkts, bkt ) \
+do { \
+ bkt = ((hashv) & ((num_bkts) - 1U)); \
+} while(0)
+
+/* delete "delptr" from the hash table.
+ * "the usual" patch-up process for the app-order doubly-linked-list.
+ * The use of _hd_hh_del below deserves special explanation.
+ * These used to be expressed using (delptr) but that led to a bug
+ * if someone used the same symbol for the head and deletee, like
+ * HASH_DELETE(hh,users,users);
+ * We want that to work, but by changing the head (users) below
+ * we were forfeiting our ability to further refer to the deletee (users)
+ * in the patch-up process. Solution: use scratch space to
+ * copy the deletee pointer, then the latter references are via that
+ * scratch pointer rather than through the repointed (users) symbol.
+ */
+#define MPL_HASH_DELETE(hh,head,delptr) \
+do { \
+ struct MPL_UT_hash_handle *_hd_hh_del; \
+ if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \
+ MPL_uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket) ); \
+ MPL_HASH_BLOOM_FREE((head)->hh.tbl); \
+ MPL_uthash_free((head)->hh.tbl, sizeof(MPL_UT_hash_table)); \
+ head = NULL; \
+ } else { \
+ unsigned _hd_bkt; \
+ _hd_hh_del = (MPL_UT_hash_handle*)&((delptr)->hh); \
+ if ((delptr) == MPL_ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \
+ (head)->hh.tbl->tail = \
+ (MPL_UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho); \
+ } \
+ if ((delptr)->hh.prev != NULL) { \
+ ((MPL_UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho))->next = (delptr)->hh.next; \
+ } else { \
+ MPL_DECLTYPE_ASSIGN(head,(delptr)->hh.next); \
+ } \
+ if (_hd_hh_del->next != NULL) { \
+ ((MPL_UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \
+ (head)->hh.tbl->hho))->prev = \
+ _hd_hh_del->prev; \
+ } \
+ MPL_HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ MPL_HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
+ (head)->hh.tbl->num_items--; \
+ } \
+ MPL_HASH_FSCK(hh,head); \
+} while (0)
+
+
+/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+#define MPL_HASH_FIND_STR(head,findstr,out) \
+ MPL_HASH_FIND(hh,head,findstr,(unsigned)strlen(findstr),out)
+#define MPL_HASH_ADD_STR(head,strfield,add) \
+ MPL_HASH_ADD(hh,head,strfield[0],(unsigned int)strlen(add->strfield),add)
+#define MPL_HASH_REPLACE_STR(head,strfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,strfield[0],(unsigned)strlen(add->strfield),add,replaced)
+#define MPL_HASH_FIND_INT(head,findint,out) \
+ MPL_HASH_FIND(hh,head,findint,sizeof(int),out)
+#define MPL_HASH_ADD_INT(head,intfield,add) \
+ MPL_HASH_ADD(hh,head,intfield,sizeof(int),add)
+#define MPL_HASH_REPLACE_INT(head,intfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
+#define MPL_HASH_FIND_PTR(head,findptr,out) \
+ MPL_HASH_FIND(hh,head,findptr,sizeof(void *),out)
+#define MPL_HASH_ADD_PTR(head,ptrfield,add) \
+ MPL_HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+#define MPL_HASH_REPLACE_PTR(head,ptrfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
+#define MPL_HASH_DEL(head,delptr) \
+ MPL_HASH_DELETE(hh,head,delptr)
+
+/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+ * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+ */
+#ifdef MPL_HASH_DEBUG
+#define MPL_HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+#define MPL_HASH_FSCK(hh,head) \
+do { \
+ struct MPL_UT_hash_handle *_thh; \
+ if (head) { \
+ unsigned _bkt_i; \
+ unsigned _count; \
+ char *_prev; \
+ _count = 0; \
+ for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \
+ unsigned _bkt_count = 0; \
+ _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
+ _prev = NULL; \
+ while (_thh) { \
+ if (_prev != (char*)(_thh->hh_prev)) { \
+ MPL_HASH_OOPS("invalid hh_prev %p, actual %p\n", \
+ _thh->hh_prev, _prev ); \
+ } \
+ _bkt_count++; \
+ _prev = (char*)(_thh); \
+ _thh = _thh->hh_next; \
+ } \
+ _count += _bkt_count; \
+ if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
+ MPL_HASH_OOPS("invalid bucket count %u, actual %u\n", \
+ (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
+ } \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ MPL_HASH_OOPS("invalid hh item count %u, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ /* traverse hh in app order; check next/prev integrity, count */ \
+ _count = 0; \
+ _prev = NULL; \
+ _thh = &(head)->hh; \
+ while (_thh) { \
+ _count++; \
+ if (_prev !=(char*)(_thh->prev)) { \
+ MPL_HASH_OOPS("invalid prev %p, actual %p\n", \
+ _thh->prev, _prev ); \
+ } \
+ _prev = (char*)MPL_ELMT_FROM_HH((head)->hh.tbl, _thh); \
+ _thh = ( _thh->next ? (MPL_UT_hash_handle*)((char*)(_thh->next) + \
+ (head)->hh.tbl->hho) : NULL ); \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ MPL_HASH_OOPS("invalid app item count %u, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ } \
+} while (0)
+#else
+#define MPL_HASH_FSCK(hh,head)
+#endif
+
+/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+ * the descriptor to which this macro is defined for tuning the hash function.
+ * The app can #include <unistd.h> to get the prototype for write(2). */
+#ifdef MPL_HASH_EMIT_KEYS
+#define MPL_HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
+do { \
+ unsigned _klen = fieldlen; \
+ write(MPL_HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
+ write(MPL_HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \
+} while (0)
+#else
+#define MPL_HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+#endif
+
+/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+#ifdef MPL_HASH_FUNCTION
+#define MPL_HASH_FCN MPL_HASH_FUNCTION
+#else
+#define MPL_HASH_FCN MPL_HASH_JEN
+#endif
+
+/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
+#define MPL_HASH_BER(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hb_keylen=(unsigned)keylen; \
+ const unsigned char *_hb_key=(const unsigned char*)(key); \
+ (hashv) = 0; \
+ while (_hb_keylen-- != 0U) { \
+ (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \
+ } \
+ bkt = (hashv) & (num_bkts-1U); \
+} while (0)
+
+
+/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+ * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+#define MPL_HASH_SAX(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _sx_i; \
+ const unsigned char *_hs_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_sx_i=0; _sx_i < keylen; _sx_i++) { \
+ hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
+ } \
+ bkt = hashv & (num_bkts-1U); \
+} while (0)
+/* FNV-1a variation */
+#define MPL_HASH_FNV(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _fn_i; \
+ const unsigned char *_hf_key=(const unsigned char*)(key); \
+ hashv = 2166136261U; \
+ for(_fn_i=0; _fn_i < keylen; _fn_i++) { \
+ hashv = hashv ^ _hf_key[_fn_i]; \
+ hashv = hashv * 16777619U; \
+ } \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#define MPL_HASH_OAT(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _ho_i; \
+ const unsigned char *_ho_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
+ hashv += _ho_key[_ho_i]; \
+ hashv += (hashv << 10); \
+ hashv ^= (hashv >> 6); \
+ } \
+ hashv += (hashv << 3); \
+ hashv ^= (hashv >> 11); \
+ hashv += (hashv << 15); \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#define MPL_HASH_JEN_MIX(a,b,c) \
+do { \
+ a -= b; a -= c; a ^= ( c >> 13 ); \
+ b -= c; b -= a; b ^= ( a << 8 ); \
+ c -= a; c -= b; c ^= ( b >> 13 ); \
+ a -= b; a -= c; a ^= ( c >> 12 ); \
+ b -= c; b -= a; b ^= ( a << 16 ); \
+ c -= a; c -= b; c ^= ( b >> 5 ); \
+ a -= b; a -= c; a ^= ( c >> 3 ); \
+ b -= c; b -= a; b ^= ( a << 10 ); \
+ c -= a; c -= b; c ^= ( b >> 15 ); \
+} while (0)
+
+#define MPL_HASH_JEN(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hj_i,_hj_j,_hj_k; \
+ unsigned const char *_hj_key=(unsigned const char*)(key); \
+ hashv = 0xfeedbeefu; \
+ _hj_i = _hj_j = 0x9e3779b9u; \
+ _hj_k = (unsigned)(keylen); \
+ while (_hj_k >= 12U) { \
+ _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
+ + ( (unsigned)_hj_key[2] << 16 ) \
+ + ( (unsigned)_hj_key[3] << 24 ) ); \
+ _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
+ + ( (unsigned)_hj_key[6] << 16 ) \
+ + ( (unsigned)_hj_key[7] << 24 ) ); \
+ hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
+ + ( (unsigned)_hj_key[10] << 16 ) \
+ + ( (unsigned)_hj_key[11] << 24 ) ); \
+ \
+ MPL_HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ \
+ _hj_key += 12; \
+ _hj_k -= 12U; \
+ } \
+ hashv += (unsigned)(keylen); \
+ switch ( _hj_k ) { \
+ case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \
+ case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \
+ case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \
+ case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \
+ case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \
+ case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \
+ case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \
+ case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \
+ case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \
+ case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \
+ case 1: _hj_i += _hj_key[0]; \
+ } \
+ MPL_HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+/* The Paul Hsieh hash function */
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+ || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
+ +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+#define MPL_HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned const char *_sfh_key=(unsigned const char*)(key); \
+ uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \
+ \
+ unsigned _sfh_rem = _sfh_len & 3U; \
+ _sfh_len >>= 2; \
+ hashv = 0xcafebabeu; \
+ \
+ /* Main loop */ \
+ for (;_sfh_len > 0U; _sfh_len--) { \
+ hashv += get16bits (_sfh_key); \
+ _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \
+ hashv = (hashv << 16) ^ _sfh_tmp; \
+ _sfh_key += 2U*sizeof (uint16_t); \
+ hashv += hashv >> 11; \
+ } \
+ \
+ /* Handle end cases */ \
+ switch (_sfh_rem) { \
+ case 3: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 16; \
+ hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \
+ hashv += hashv >> 11; \
+ break; \
+ case 2: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 11; \
+ hashv += hashv >> 17; \
+ break; \
+ case 1: hashv += *_sfh_key; \
+ hashv ^= hashv << 10; \
+ hashv += hashv >> 1; \
+ } \
+ \
+ /* Force "avalanching" of final 127 bits */ \
+ hashv ^= hashv << 3; \
+ hashv += hashv >> 5; \
+ hashv ^= hashv << 4; \
+ hashv += hashv >> 17; \
+ hashv ^= hashv << 25; \
+ hashv += hashv >> 6; \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#ifdef MPL_HASH_USING_NO_STRICT_ALIASING
+/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
+ * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+ * MurmurHash uses the faster approach only on CPU's where we know it's safe.
+ *
+ * Note the preprocessor built-in defines can be emitted using:
+ *
+ * gcc -m64 -dM -E - < /dev/null (on gcc)
+ * cc -## a.c (where a.c is a simple test file) (Sun Studio)
+ */
+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))
+#define MPL_MUR_GETBLOCK(p,i) p[i]
+#else /* non intel */
+#define MPL_MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL)
+#define MPL_MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL)
+#define MPL_MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL)
+#define MPL_MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL)
+#define MPL_WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
+#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
+#define MPL_MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
+#define MPL_MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
+#define MPL_MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8))
+#else /* assume little endian non-intel */
+#define MPL_MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
+#define MPL_MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
+#define MPL_MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8))
+#endif
+#define MPL_MUR_GETBLOCK(p,i) (MPL_MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \
+ (MPL_MUR_PLUS1_ALIGNED(p) ? MPL_MUR_THREE_ONE(p) : \
+ (MPL_MUR_PLUS2_ALIGNED(p) ? MPL_MUR_TWO_TWO(p) : \
+ MPL_MUR_ONE_THREE(p))))
+#endif
+#define MPL_MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+#define MPL_MUR_FMIX(_h) \
+do { \
+ _h ^= _h >> 16; \
+ _h *= 0x85ebca6bu; \
+ _h ^= _h >> 13; \
+ _h *= 0xc2b2ae35u; \
+ _h ^= _h >> 16; \
+} while(0)
+
+#define MPL_HASH_MUR(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ const uint8_t *_mur_data = (const uint8_t*)(key); \
+ const int _mur_nblocks = (int)(keylen) / 4; \
+ uint32_t _mur_h1 = 0xf88D5353u; \
+ uint32_t _mur_c1 = 0xcc9e2d51u; \
+ uint32_t _mur_c2 = 0x1b873593u; \
+ uint32_t _mur_k1 = 0; \
+ const uint8_t *_mur_tail; \
+ const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \
+ int _mur_i; \
+ for(_mur_i = -_mur_nblocks; _mur_i!=0; _mur_i++) { \
+ _mur_k1 = MPL_MUR_GETBLOCK(_mur_blocks,_mur_i); \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MPL_MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ \
+ _mur_h1 ^= _mur_k1; \
+ _mur_h1 = MPL_MUR_ROTL32(_mur_h1,13); \
+ _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \
+ } \
+ _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \
+ _mur_k1=0; \
+ switch((keylen) & 3U) { \
+ case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \
+ case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \
+ case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MPL_MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ _mur_h1 ^= _mur_k1; \
+ } \
+ _mur_h1 ^= (uint32_t)(keylen); \
+ MPL_MUR_FMIX(_mur_h1); \
+ hashv = _mur_h1; \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+#endif /* HASH_USING_NO_STRICT_ALIASING */
+
+/* key comparison function; return 0 if keys equal */
+#define MPL_HASH_KEYCMP(a,b,len) memcmp(a,b,(unsigned long)(len))
+
+/* iterate over items in a known bucket to find desired item */
+#define MPL_HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \
+do { \
+ if (head.hh_head != NULL) { MPL_DECLTYPE_ASSIGN(out,MPL_ELMT_FROM_HH(tbl,head.hh_head)); } \
+ else { out=NULL; } \
+ while (out != NULL) { \
+ if ((out)->hh.keylen == (keylen_in)) { \
+ if ((MPL_HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) { break; } \
+ } \
+ if ((out)->hh.hh_next != NULL) { MPL_DECLTYPE_ASSIGN(out,MPL_ELMT_FROM_HH(tbl,(out)->hh.hh_next)); } \
+ else { out = NULL; } \
+ } \
+} while(0)
+
+/* add an item to a bucket */
+#define MPL_HASH_ADD_TO_BKT(head,addhh) \
+do { \
+ head.count++; \
+ (addhh)->hh_next = head.hh_head; \
+ (addhh)->hh_prev = NULL; \
+ if (head.hh_head != NULL) { (head).hh_head->hh_prev = (addhh); } \
+ (head).hh_head=addhh; \
+ if ((head.count >= ((head.expand_mult+1U) * MPL_HASH_BKT_CAPACITY_THRESH)) \
+ && ((addhh)->tbl->noexpand != 1U)) { \
+ MPL_HASH_EXPAND_BUCKETS((addhh)->tbl); \
+ } \
+} while(0)
+
+/* remove an item from a given bucket */
+#define MPL_HASH_DEL_IN_BKT(hh,head,hh_del) \
+ (head).count--; \
+ if ((head).hh_head == (MPL_UT_hash_handle*)hh_del) { \
+ (head).hh_head = (MPL_UT_hash_handle*)hh_del->hh_next; \
+ } \
+ if (hh_del->hh_prev) { \
+ hh_del->hh_prev->hh_next = hh_del->hh_next; \
+ } \
+ if (hh_del->hh_next) { \
+ hh_del->hh_next->hh_prev = hh_del->hh_prev; \
+ }
+
+/* Bucket expansion has the effect of doubling the number of buckets
+ * and redistributing the items into the new buckets. Ideally the
+ * items will distribute more or less evenly into the new buckets
+ * (the extent to which this is true is a measure of the quality of
+ * the hash function as it applies to the key domain).
+ *
+ * With the items distributed into more buckets, the chain length
+ * (item count) in each bucket is reduced. Thus by expanding buckets
+ * the hash keeps a bound on the chain length. This bounded chain
+ * length is the essence of how a hash provides constant time lookup.
+ *
+ * The calculation of tbl->ideal_chain_maxlen below deserves some
+ * explanation. First, keep in mind that we're calculating the ideal
+ * maximum chain length based on the *new* (doubled) bucket count.
+ * In fractions this is just n/b (n=number of items,b=new num buckets).
+ * Since the ideal chain length is an integer, we want to calculate
+ * ceil(n/b). We don't depend on floating point arithmetic in this
+ * hash, so to calculate ceil(n/b) with integers we could write
+ *
+ * ceil(n/b) = (n/b) + ((n%b)?1:0)
+ *
+ * and in fact a previous version of this hash did just that.
+ * But now we have improved things a bit by recognizing that b is
+ * always a power of two. We keep its base 2 log handy (call it lb),
+ * so now we can write this with a bit shift and logical AND:
+ *
+ * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+ *
+ */
+#define MPL_HASH_EXPAND_BUCKETS(tbl) \
+do { \
+ unsigned _he_bkt; \
+ unsigned _he_bkt_i; \
+ struct MPL_UT_hash_handle *_he_thh, *_he_hh_nxt; \
+ MPL_UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
+ _he_new_buckets = (MPL_UT_hash_bucket*)MPL_uthash_malloc( \
+ 2UL * tbl->num_buckets * sizeof(struct MPL_UT_hash_bucket)); \
+ if (!_he_new_buckets) { MPL_uthash_fatal( "out of memory"); } \
+ memset(_he_new_buckets, 0, \
+ 2UL * tbl->num_buckets * sizeof(struct MPL_UT_hash_bucket)); \
+ tbl->ideal_chain_maxlen = \
+ (tbl->num_items >> (tbl->log2_num_buckets+1U)) + \
+ (((tbl->num_items & ((tbl->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
+ tbl->nonideal_items = 0; \
+ for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \
+ { \
+ _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \
+ while (_he_thh != NULL) { \
+ _he_hh_nxt = _he_thh->hh_next; \
+ MPL_HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2U, _he_bkt); \
+ _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \
+ if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \
+ tbl->nonideal_items++; \
+ _he_newbkt->expand_mult = _he_newbkt->count / \
+ tbl->ideal_chain_maxlen; \
+ } \
+ _he_thh->hh_prev = NULL; \
+ _he_thh->hh_next = _he_newbkt->hh_head; \
+ if (_he_newbkt->hh_head != NULL) { _he_newbkt->hh_head->hh_prev = \
+ _he_thh; } \
+ _he_newbkt->hh_head = _he_thh; \
+ _he_thh = _he_hh_nxt; \
+ } \
+ } \
+ MPL_uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket) ); \
+ tbl->num_buckets *= 2U; \
+ tbl->log2_num_buckets++; \
+ tbl->buckets = _he_new_buckets; \
+ tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \
+ (tbl->ineff_expands+1U) : 0U; \
+ if (tbl->ineff_expands > 1U) { \
+ tbl->noexpand=1; \
+ MPL_uthash_noexpand_fyi(tbl); \
+ } \
+ MPL_uthash_expand_fyi(tbl); \
+} while(0)
+
+
+/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+/* Note that HASH_SORT assumes the hash handle name to be hh.
+ * HASH_SRT was added to allow the hash handle name to be passed in. */
+#define MPL_HASH_SORT(head,cmpfcn) MPL_HASH_SRT(hh,head,cmpfcn)
+#define MPL_HASH_SRT(hh,head,cmpfcn) \
+do { \
+ unsigned _hs_i; \
+ unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
+ struct MPL_UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
+ if (head != NULL) { \
+ _hs_insize = 1; \
+ _hs_looping = 1; \
+ _hs_list = &((head)->hh); \
+ while (_hs_looping != 0U) { \
+ _hs_p = _hs_list; \
+ _hs_list = NULL; \
+ _hs_tail = NULL; \
+ _hs_nmerges = 0; \
+ while (_hs_p != NULL) { \
+ _hs_nmerges++; \
+ _hs_q = _hs_p; \
+ _hs_psize = 0; \
+ for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \
+ _hs_psize++; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ if (! (_hs_q) ) { break; } \
+ } \
+ _hs_qsize = _hs_insize; \
+ while ((_hs_psize > 0U) || ((_hs_qsize > 0U) && (_hs_q != NULL))) {\
+ if (_hs_psize == 0U) { \
+ _hs_e = _hs_q; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } else if ( (_hs_qsize == 0U) || (_hs_q == NULL) ) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL){ \
+ _hs_p = (MPL_UT_hash_handle*)((_hs_p->next != NULL) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ } \
+ _hs_psize--; \
+ } else if (( \
+ cmpfcn(MPL_DECLTYPE(head)(MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \
+ MPL_DECLTYPE(head)(MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \
+ ) <= 0) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL){ \
+ _hs_p = (MPL_UT_hash_handle*)((_hs_p->next != NULL) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ } \
+ _hs_psize--; \
+ } else { \
+ _hs_e = _hs_q; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } \
+ if ( _hs_tail != NULL ) { \
+ _hs_tail->next = ((_hs_e != NULL) ? \
+ MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \
+ } else { \
+ _hs_list = _hs_e; \
+ } \
+ if (_hs_e != NULL) { \
+ _hs_e->prev = ((_hs_tail != NULL) ? \
+ MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \
+ } \
+ _hs_tail = _hs_e; \
+ } \
+ _hs_p = _hs_q; \
+ } \
+ if (_hs_tail != NULL){ \
+ _hs_tail->next = NULL; \
+ } \
+ if ( _hs_nmerges <= 1U ) { \
+ _hs_looping=0; \
+ (head)->hh.tbl->tail = _hs_tail; \
+ MPL_DECLTYPE_ASSIGN(head,MPL_ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
+ } \
+ _hs_insize *= 2U; \
+ } \
+ MPL_HASH_FSCK(hh,head); \
+ } \
+} while (0)
+
+/* This function selects items from one hash into another hash.
+ * The end result is that the selected items have dual presence
+ * in both hashes. There is no copy of the items made; rather
+ * they are added into the new hash through a secondary hash
+ * hash handle that must be present in the structure. */
+#define MPL_HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
+do { \
+ unsigned _src_bkt, _dst_bkt; \
+ void *_last_elt=NULL, *_elt; \
+ MPL_UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
+ ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
+ if (src != NULL) { \
+ for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
+ for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
+ _src_hh != NULL; \
+ _src_hh = _src_hh->hh_next) { \
+ _elt = MPL_ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
+ if (cond(_elt)) { \
+ _dst_hh = (MPL_UT_hash_handle*)(((char*)_elt) + _dst_hho); \
+ _dst_hh->key = _src_hh->key; \
+ _dst_hh->keylen = _src_hh->keylen; \
+ _dst_hh->hashv = _src_hh->hashv; \
+ _dst_hh->prev = _last_elt; \
+ _dst_hh->next = NULL; \
+ if (_last_elt_hh != NULL) { _last_elt_hh->next = _elt; } \
+ if (dst == NULL) { \
+ MPL_DECLTYPE_ASSIGN(dst,_elt); \
+ MPL_HASH_MAKE_TABLE(hh_dst,dst); \
+ } else { \
+ _dst_hh->tbl = (dst)->hh_dst.tbl; \
+ } \
+ MPL_HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
+ MPL_HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \
+ (dst)->hh_dst.tbl->num_items++; \
+ _last_elt = _elt; \
+ _last_elt_hh = _dst_hh; \
+ } \
+ } \
+ } \
+ } \
+ MPL_HASH_FSCK(hh_dst,dst); \
+} while (0)
+
+#define MPL_HASH_CLEAR(hh,head) \
+do { \
+ if (head != NULL) { \
+ MPL_uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket)); \
+ MPL_HASH_BLOOM_FREE((head)->hh.tbl); \
+ MPL_uthash_free((head)->hh.tbl, sizeof(MPL_UT_hash_table)); \
+ (head)=NULL; \
+ } \
+} while(0)
+
+#define MPL_HASH_OVERHEAD(hh,head) \
+ ((head != NULL) ? ( \
+ (size_t)(((head)->hh.tbl->num_items * sizeof(MPL_UT_hash_handle)) + \
+ ((head)->hh.tbl->num_buckets * sizeof(MPL_UT_hash_bucket)) + \
+ sizeof(MPL_UT_hash_table) + \
+ (MPL_HASH_BLOOM_BYTELEN))) : 0U)
+
+#ifdef MPL_NO_DECLTYPE
+#define MPL_HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#else
+#define MPL_HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((tmp)=MPL_DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((tmp)=MPL_DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#endif
+
+/* obtain a count of items in the hash */
+#define MPL_HASH_COUNT(head) MPL_HASH_CNT(hh,head)
+#define MPL_HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U)
+
+typedef struct MPL_UT_hash_bucket {
+ struct MPL_UT_hash_handle *hh_head;
+ unsigned count;
+
+ /* expand_mult is normally set to 0. In this situation, the max chain length
+ * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+ * the bucket's chain exceeds this length, bucket expansion is triggered).
+ * However, setting expand_mult to a non-zero value delays bucket expansion
+ * (that would be triggered by additions to this particular bucket)
+ * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+ * (The multiplier is simply expand_mult+1). The whole idea of this
+ * multiplier is to reduce bucket expansions, since they are expensive, in
+ * situations where we know that a particular bucket tends to be overused.
+ * It is better to let its chain length grow to a longer yet-still-bounded
+ * value, than to do an O(n) bucket expansion too often.
+ */
+ unsigned expand_mult;
+
+} MPL_UT_hash_bucket;
+
+/* random signature used only to find hash tables in external analysis */
+#define MPL_HASH_SIGNATURE 0xa0111fe1u
+#define MPL_HASH_BLOOM_SIGNATURE 0xb12220f2u
+
+typedef struct MPL_UT_hash_table {
+ MPL_UT_hash_bucket *buckets;
+ unsigned num_buckets, log2_num_buckets;
+ unsigned num_items;
+ struct MPL_UT_hash_handle *tail; /* tail hh in app order, for fast append */
+ ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+
+ /* in an ideal situation (all buckets used equally), no bucket would have
+ * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+ unsigned ideal_chain_maxlen;
+
+ /* nonideal_items is the number of items in the hash whose chain position
+ * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+ * hash distribution; reaching them in a chain traversal takes >ideal steps */
+ unsigned nonideal_items;
+
+ /* ineffective expands occur when a bucket doubling was performed, but
+ * afterward, more than half the items in the hash had nonideal chain
+ * positions. If this happens on two consecutive expansions we inhibit any
+ * further expansion, as it's not helping; this happens when the hash
+ * function isn't a good fit for the key domain. When expansion is inhibited
+ * the hash will still work, albeit no longer in constant time. */
+ unsigned ineff_expands, noexpand;
+
+ uint32_t signature; /* used only to find hash tables in external analysis */
+#ifdef MPL_HASH_BLOOM
+ uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+ uint8_t *bloom_bv;
+ uint8_t bloom_nbits;
+#endif
+
+} MPL_UT_hash_table;
+
+typedef struct MPL_UT_hash_handle {
+ struct MPL_UT_hash_table *tbl;
+ void *prev; /* prev element in app order */
+ void *next; /* next element in app order */
+ struct MPL_UT_hash_handle *hh_prev; /* previous hh in bucket order */
+ struct MPL_UT_hash_handle *hh_next; /* next hh in bucket order */
+ void *key; /* ptr to enclosing struct's key */
+ unsigned keylen; /* enclosing struct's key len */
+ unsigned hashv; /* result of hash-fcn(key) */
+} MPL_UT_hash_handle;
+
+#endif /* MPL_UTHASH_H */
diff --git a/src/mpl/include/mpl_utlist.h b/src/mpl/include/mpl_utlist.h
index eb5ea0c..7035fd5 100644
--- a/src/mpl/include/mpl_utlist.h
+++ b/src/mpl/include/mpl_utlist.h
@@ -53,8 +53,8 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef MPL_UTLIST_H
-#define MPL_UTLIST_H
+#if !defined(MPL_UTLIST_H_INCLUDED)
+#define MPL_UTLIST_H_INCLUDED
#define MPL_UTLIST_VERSION 1.9.5
@@ -573,5 +573,5 @@ do {
} \
} while(0)
-#endif /* MPL_UTLIST_H */
+#endif /* !defined(MPL_UTLIST_H_INCLUDED) */
diff --git a/src/mpl/include/mpl_valgrind.h b/src/mpl/include/mpl_valgrind.h
index 2006ada..b902b5c 100644
--- a/src/mpl/include/mpl_valgrind.h
+++ b/src/mpl/include/mpl_valgrind.h
@@ -27,7 +27,7 @@
preprocessor token "MPL_VG_AVAILABLE".
*/
-#ifndef MPL_VALGRIND_H_INCLUDED
+#if !defined(MPL_VALGRIND_H_INCLUDED)
#define MPL_VALGRIND_H_INCLUDED
#undef MPL_VG_AVAILABLE
@@ -138,6 +138,14 @@
# define MPL_VG_CREATE_BLOCK(addr_,len_,desc_) do { (void) VALGRIND_CREATE_BLOCK((addr_),(len_),(desc_)); } while (0)
# define MPL_VG_RUNNING_ON_VALGRIND() RUNNING_ON_VALGRIND
# define MPL_VG_PRINTF_BACKTRACE VALGRIND_PRINTF_BACKTRACE
+/* Valgrind has a bug
+ * (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=524488) that
+ * causes it to report a warning when the compiler adds padding to
+ * structures. Even when we initialize all the fields in the
+ * structure, the padding bytes are not initialized. The idea here is
+ * to detect when we are in "valgrind mode" and in such cases
+ * initialize all bytes of the structure. */
+# define MPL_VG_MEM_INIT(addr_,len_) do { memset(addr_, 0, len_); } while (0)
/* custom allocator client requests, you probably shouldn't use these unless you
* really know what you are doing */
@@ -154,6 +162,7 @@
# define MPL_VG_CHECK_MEM_IS_ADDRESSABLE(addr_,len_) do {} while (0)
# define MPL_VG_CREATE_BLOCK(addr_,len_,desc_) do {} while (0)
# define MPL_VG_RUNNING_ON_VALGRIND() (0) /*always false */
+# define MPL_VG_MEM_INIT(addr_,len_) do {} while (0)
# if defined(MPL_HAVE_MACRO_VA_ARGS)
# define MPL_VG_PRINTF_BACKTRACE(...) do {} while (0)
# else
diff --git a/src/mpl/include/mpl_yield.h b/src/mpl/include/mpl_yield.h
new file mode 100644
index 0000000..925be66
--- /dev/null
+++ b/src/mpl/include/mpl_yield.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_PROCESS_WRAPPERS_H_INCLUDED
+#define MPL_PROCESS_WRAPPERS_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* MPL_SCHED_YIELD() - Yield the processor to OS scheduler */
+/* On a typical Linux system (verified with kernels 3.2 and 3.5),
+ * usleep has a resolution of more than 1000 cycles. This makes
+ * it impractical if the desired sleeping period is shorter. On
+ * the other hand, sleep(0) returns immediately without going to
+ * the kernel. This means that there is no actual yielding, which
+ * is equivalent to doing nothing. Thus, usleep and sleep are not
+ * recommended as ways to yield the CPU, and sched_yield would be
+ * preferred if available.
+ * Note that nanosleep has the same shortcomings as usleep.*/
+
+#if defined(MPL_USE_SWITCHTOTHREAD_FOR_YIELD)
+ #include <winsock2.h>
+ #include <windows.h>
+ #define MPL_sched_yield() SwitchToThread()
+#elif defined(MPL_USE_WIN32_SLEEP_FOR_YIELD)
+ #include <winsock2.h>
+ #include <windows.h>
+ #define MPL_sched_yield() Sleep(0)
+#elif defined(MPL_USE_SCHED_YIELD_FOR_YIELD)
+ #ifdef MPL_HAVE_SCHED_H
+ #include <sched.h>
+ #endif
+ #define MPL_sched_yield() sched_yield()
+#elif defined(MPL_USE_YIELD_FOR_YIELD)
+ #ifdef MPL_HAVE_SCHED_H
+ #include <sched.h>
+ #endif
+ #define MPL_sched_yield() yield()
+#elif defined (MPL_USE_SELECT_FOR_YIELD)
+ #ifdef MPL_HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+ #define MPL_sched_yield() do { struct timeval t; t.tv_sec = 0; t.tv_usec = 0; select(0,0,0,0,&t); } while (0)
+#elif defined (MPL_USE_USLEEP_FOR_YIELD)
+ #ifdef MPL_HAVE_UNISTD_H
+ #include <unistd.h>
+ #if defined (MPL_NEEDS_USLEEP_DECL)
+ int usleep(useconds_t usec);
+ #endif
+ #endif
+ #define MPL_sched_yield() usleep(0)
+#elif defined (MPL_USE_SLEEP_FOR_YIELD)
+ #ifdef MPL_HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+ #define MPL_sched_yield() sleep(0)
+#elif defined (MPL_USE_NOTHING_FOR_YIELD)
+ #define MPL_sched_yield() do {} while (0)
+#else
+ #error "No mechanism available to yield"
+#endif
+
+#endif /* MPL_PROCESS_WRAPPERS_H_INCLUDED */
diff --git a/src/mpl/include/mplenv.h b/src/mpl/include/mplenv.h
deleted file mode 100644
index 8021fc1..0000000
--- a/src/mpl/include/mplenv.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLENV_H_INCLUDED
-#define MPLENV_H_INCLUDED
-
-#include "mplconfig.h"
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-/* *INDENT-OFF* */
-
-#if defined(MPL_HAVE_PUTENV) && defined(MPL_NEEDS_PUTENV_DECL)
-extern int putenv(char *string);
-#endif
-
-/* Prototypes for the functions to provide uniform access to the environment */
-int MPL_env2int(const char *envName, int *val);
-int MPL_env2range(const char *envName, int *lowPtr, int *highPtr);
-int MPL_env2bool(const char *envName, int *val);
-int MPL_env2str(const char *envName, const char **val);
-int MPL_env2double(const char *envName, double *val);
-int MPL_putenv(char *name_val);
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-}
-#endif
-/* *INDENT-OFF* */
-
-#endif /* MPLENV_H_INCLUDED */
diff --git a/src/mpl/include/mpliov.h b/src/mpl/include/mpliov.h
deleted file mode 100644
index da3f250..0000000
--- a/src/mpl/include/mpliov.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLIOV_H_INCLUDED
-#define MPLIOV_H_INCLUDED
-
-#include <stdio.h>
-
-/* IOVs */
-/* The basic channel interface uses IOVs */
-#ifdef HAVE_WINDOWS_H
- #define MPL_IOV_BUF_CAST char *
-#else
- #define MPL_IOV_BUF_CAST void *
-#endif
-#ifdef HAVE_WINDOWS_H
-#include <winsock2.h>
-#define MPL_IOV WSABUF
-#define MPL_IOV_LEN len
-#define MPL_IOV_BUF buf
-#else
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
-#endif
-#ifdef HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-#define MPL_IOV struct iovec
-#define MPL_IOV_LEN iov_len
-#define MPL_IOV_BUF iov_base
-#endif
-/* FIXME: How is IOV_LIMIT chosen? */
-#define MPL_IOV_LIMIT 16
-
-#endif /* MPLIOV_H_INCLUDED */
diff --git a/src/mpl/include/mplmsg.h b/src/mpl/include/mplmsg.h
deleted file mode 100644
index 650b6e8..0000000
--- a/src/mpl/include/mplmsg.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2005 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLMSG_H_INCLUDED
-#define MPLMSG_H_INCLUDED
-
-#include "mpl.h"
-
-/* These macros can be used to prevent inlining for utility functions
- * where it might make debugging easier. */
-#if defined(HAVE_ERROR_CHECKING)
-#define MPL_DBG_ATTRIBUTE_NOINLINE ATTRIBUTE((__noinline__))
-#define MPL_DBG_INLINE_KEYWORD
-#else
-#define MPL_DBG_ATTRIBUTE_NOINLINE
-#define MPL_DBG_INLINE_KEYWORD inline
-#endif
-
-/* These routines are used to ensure that messages are sent to the
- * appropriate output and (eventually) are properly
- * internationalized */
-int MPL_usage_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
-int MPL_msg_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
-int MPL_internal_error_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
-int MPL_internal_sys_error_printf(mpl_const char *, int, mpl_const char *str,
- ...) ATTRIBUTE((format(printf, 3, 4)));
-void MPL_exit(int);
-
-#endif /* MPLMSG_H_INCLUDED */
diff --git a/src/mpl/include/mplsock.h b/src/mpl/include/mplsock.h
deleted file mode 100644
index fc4155f..0000000
--- a/src/mpl/include/mplsock.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLSOCK_H_INCLUDED
-#define MPLSOCK_H_INCLUDED
-
-#include "mplconfig.h"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <errno.h>
-#include <netinet/tcp.h>
-#include <netdb.h>
-#include <limits.h>
-
-#ifdef MPL_HAVE_SYS_TYPES_H
-#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
-#endif
-#ifdef MPL_HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-
-#if !defined(MPL_HAVE_SYS_UIO_H)
-struct iovec;
-#endif
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-/* *INDENT-OFF* */
-
-ssize_t MPL_large_writev(int fd, const struct iovec *iov, int iovcnt);
-ssize_t MPL_large_readv(int fd, const struct iovec *iov, int iovcnt);
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-}
-#endif
-/* *INDENT-OFF* */
-
-#endif /* MPLSOCK_H_INCLUDED */
diff --git a/src/mpl/include/mplstr.h b/src/mpl/include/mplstr.h
deleted file mode 100644
index 26cecb6..0000000
--- a/src/mpl/include/mplstr.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLSTR_H_INCLUDED
-#define MPLSTR_H_INCLUDED
-
-#include "mplconfig.h"
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-/* *INDENT-OFF* */
-
-#if defined MPL_NEEDS_SNPRINTF_DECL
-extern int snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
-#endif
-
-#if defined MPL_HAVE_SNPRINTF
-#define MPL_snprintf snprintf
-#else
-int MPL_snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
-#endif /* MPL_HAVE_SNPRINTF */
-
-#if defined MPL_NEEDS_STRDUP_DECL && !defined strdup
-extern char *strdup(const char *);
-#endif /* MPL_NEEDS_STRDUP_DECL */
-
-#if defined MPL_HAVE_STRDUP
-#define MPL_strdup strdup
-#else
-char *MPL_strdup(const char *str);
-#endif /* MPL_HAVE_STRDUP */
-
-int MPL_strncpy(char *dest, const char *src, size_t n);
-char *MPL_strsep(char **stringp, const char *delim);
-
-#if defined MPL_NEEDS_STRNCMP_DECL
-extern int strncmp(const char *s1, const char *s2, size_t n);
-#endif
-
-#if defined MPL_HAVE_STRNCMP
-#define MPL_strncmp strncmp
-#else
-#error "strncmp is required"
-#endif /* MPL_HAVE_STRNCMP */
-
-#if defined MPL_NEEDS_STRERROR_DECL
-extern char *strerror(int errnum);
-#endif
-#if defined MPL_HAVE_STRERROR
-#define MPL_strerror strerror
-#else
-char *MPL_strerror(int errnum);
-#endif /* MPL_HAVE_STRERROR */
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-}
-#endif
-/* *INDENT-OFF* */
-
-#endif /* MPLSTR_H_INCLUDED */
diff --git a/src/mpl/include/mpltrmem.h b/src/mpl/include/mpltrmem.h
deleted file mode 100644
index 4253bac..0000000
--- a/src/mpl/include/mpltrmem.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLTRMEM_H_INCLUDED
-#define MPLTRMEM_H_INCLUDED
-
-/* FIXME: Consider an option of specifying __attribute__((malloc)) for
- gcc - this lets gcc-style compilers know that the returned pointer
- does not alias any pointer prior to the call.
- */
-void MPL_trinit(int);
-void *MPL_trmalloc(size_t, int, const char[]);
-void MPL_trfree(void *, int, const char[]);
-int MPL_trvalid(const char[]);
-int MPL_trvalid2(const char[],int,const char[]);
-void MPL_trspace(size_t *, size_t *);
-void MPL_trid(int);
-void MPL_trlevel(int);
-void MPL_trDebugLevel(int);
-void *MPL_trcalloc(size_t, size_t, int, const char[]);
-void *MPL_trrealloc(void *, size_t, int, const char[]);
-void *MPL_trstrdup(const char *, int, const char[]);
-void MPL_TrSetMaxMem(size_t);
-
-/* Make sure that FILE is defined */
-#include <stdio.h>
-void MPL_trdump(FILE *, int);
-void MPL_trSummary(FILE *, int);
-void MPL_trdumpGrouped(FILE *, int);
-
-#endif /* !defined(MPLTRMEM_H_INCLUDED) */
diff --git a/src/mpl/localdefs.in b/src/mpl/localdefs.in
index da49463..cdc1ff2 100644
--- a/src/mpl/localdefs.in
+++ b/src/mpl/localdefs.in
@@ -4,4 +4,4 @@
# back upstream.
CPPFLAGS="@CPPFLAGS@"
-
+WRAPPER_LIBS="$WRAPPER_LIBS @LIBS@"
diff --git a/src/mpl/src/Makefile.mk b/src/mpl/src/Makefile.mk
new file mode 100644
index 0000000..acd613e
--- /dev/null
+++ b/src/mpl/src/Makefile.mk
@@ -0,0 +1,16 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+include src/bt/Makefile.mk
+include src/dbg/Makefile.mk
+include src/env/Makefile.mk
+include src/mem/Makefile.mk
+include src/msg/Makefile.mk
+include src/sock/Makefile.mk
+include src/str/Makefile.mk
+include src/thread/Makefile.mk
+include src/timer/Makefile.mk
+include src/shm/Makefile.mk
diff --git a/src/mpl/src/bt/Makefile.mk b/src/mpl/src/bt/Makefile.mk
new file mode 100644
index 0000000..5d11de7
--- /dev/null
+++ b/src/mpl/src/bt/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/bt/mpl_bt.c
diff --git a/src/mpl/src/bt/mpl_bt.c b/src/mpl/src/bt/mpl_bt.c
new file mode 100644
index 0000000..ef10a59
--- /dev/null
+++ b/src/mpl/src/bt/mpl_bt.c
@@ -0,0 +1,134 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+#ifdef MPL_HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif
+
+#ifdef MPL_HAVE_BACKTRACE_H
+#include <backtrace.h>
+#endif
+
+#ifdef MPL_HAVE_LIBUNWIND_H
+#define UNW_LOCAL_ONLY
+#include <libunwind.h>
+#endif
+
+
+/* freebsd and linux have slightly different backtrace routines.
+ * solaris uses something totally different: a 'walkcontext' routine
+ * which takes a function pointer. solaris 'walkcontext' is simliar to
+ * libbacktrace, shipped with gcc-4.8 and newer. both share features
+ * with libunwind.
+ *
+ * For the case of "display the call stack to this point" the various
+ * approaches share a common pattern:
+ * - initialize the library
+ * - get the stack
+ * - decode the stack
+ *
+ * but for now we'll simply dispatch to one of several appraoches
+ * depending on what configure found
+ *
+ */
+
+#ifdef MPL_HAVE_LIBBACKTRACE
+
+static inline void backtrace_libback(FILE *output)
+{
+ struct backtrace_state *btstate;
+ btstate = backtrace_create_state(NULL, 1, NULL, NULL);
+ backtrace_print(btstate, 0, output);
+}
+/* we need not only the symbols but the header file too (for the cursor and
+ * context), so tighten up when we take the libunwind path. Thanks
+ * Siegmar.Gross at informatik.hs-fulda.de for the bug report about systems with
+ * libunwind libraries but no libunwind development headers */
+#elif defined MPL_HAVE_LIBUNWIND && defined(MPL_HAVE_LIBUNWIND_H)
+static inline void backtrace_libunwind(FILE *output)
+{
+ unw_cursor_t cursor;
+ unw_context_t uc;
+ unw_word_t ip, offset;
+ int ret, chars = 0;
+ char buffer[MPL_BACKTRACE_BUFFER_LEN];
+ char backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN];
+
+ unw_getcontext(&uc);
+ unw_init_local(&cursor, &uc);
+ while (unw_step(&cursor) > 0) {
+ unw_get_reg(&cursor, UNW_REG_IP, &ip);
+ unw_get_proc_name(&cursor, buffer,
+ MPL_BACKTRACE_BUFFER_LEN, &offset);
+ ret = MPL_snprintf(backtrace_buffer + chars,
+ MPL_BACKTRACE_BUFFER_LEN - chars,
+ "0x%lx %s() + 0x%lx\n",
+ (long)ip, buffer, (long)offset);
+ if (ret + chars >= MPL_BACKTRACE_BUFFER_LEN) {
+ /* the extra new line will be more readable than a merely
+ * truncated string */
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 2] = '\n';
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 1] = '\0';
+ break;
+ }
+ chars += ret;
+ }
+ fprintf(output, "%s", backtrace_buffer);
+}
+
+#elif defined MPL_HAVE_BACKTRACE_SYMBOLS
+static inline void backtrace_libc(FILE *output)
+{
+#ifndef MPL_MAX_TRACE_DEPTH
+#define MPL_MAX_TRACE_DEPTH 32
+#endif
+ void *trace[MPL_MAX_TRACE_DEPTH];
+ char **stack_strs;
+ char backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN];
+ int frames, i, ret, chars = 0;
+
+ frames = backtrace(trace, MPL_MAX_TRACE_DEPTH);
+ stack_strs = backtrace_symbols(trace, frames);
+
+ for (i = 0; i < frames; i++) {
+ ret = MPL_snprintf(backtrace_buffer + chars,
+ MPL_BACKTRACE_BUFFER_LEN - chars,
+ "%s\n", stack_strs[i]);
+ if (ret + chars >= MPL_BACKTRACE_BUFFER_LEN) {
+ /* the extra new line will be more readable than a merely
+ * truncated string */
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 2] = '\n';
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 1] = '\0';
+ break;
+ }
+ chars += ret;
+ }
+ fprintf(output, "%s", backtrace_buffer);
+ free(stack_strs);
+}
+#else
+static inline void backtrace_unsupported(FILE *output)
+{
+ fprintf(output, "No backtrace info available\n");
+}
+#endif
+
+/* Pick one of the many ways one could dump out a call stack*/
+void MPL_backtrace_show(FILE *output)
+{
+#ifdef MPL_HAVE_LIBBACKTRACE
+ backtrace_libback(output);
+#elif defined MPL_HAVE_LIBUNWIND && defined(MPL_HAVE_LIBUNWIND_H)
+ /* libunwind is not able to get line numbers without forking off to
+ * addr2line (?)*/
+ backtrace_libunwind(output);
+#elif defined MPL_HAVE_BACKTRACE_SYMBOLS
+ backtrace_libc(output);
+#else
+ backtrace_unsupported(output);
+#endif
+}
diff --git a/src/mpl/src/dbg/Makefile.mk b/src/mpl/src/dbg/Makefile.mk
new file mode 100644
index 0000000..427ac75
--- /dev/null
+++ b/src/mpl/src/dbg/Makefile.mk
@@ -0,0 +1,8 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2011 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += src/dbg/mpl_dbg.c
diff --git a/src/mpl/src/dbg/mpl_dbg.c b/src/mpl/src/dbg/mpl_dbg.c
new file mode 100644
index 0000000..b5cf17d
--- /dev/null
+++ b/src/mpl/src/dbg/mpl_dbg.c
@@ -0,0 +1,964 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/*
+ * This file provides a set of routines that can be used to record debug
+ * messages in a ring so that the may be dumped at a later time. For example,
+ * this can be used to record debug messages without printing them.
+ */
+
+#include "mpl.h"
+
+#ifdef MPL_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef MPL_HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#if defined(MPL_HAVE_MKSTEMP) && defined(MPL_NEEDS_MKSTEMP_DECL)
+extern int mkstemp(char *t);
+#endif
+
+#if defined(MPL_HAVE_FDOPEN) && defined(MPL_NEEDS_FDOPEN_DECL)
+extern FILE *fdopen(int fd, const char *mode);
+#endif
+
+#ifdef MPL_USE_DBG_LOGGING
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+int MPL_dbg_active_classes = 0;
+int MPL_dbg_max_level = MPL_DBG_TYPICAL;
+
+static enum {
+ DBG_UNINIT,
+ DBG_PREINIT,
+ DBG_INITIALIZED,
+ DBG_ERROR
+} dbg_initialized = DBG_UNINIT;
+
+static char file_pattern_buf[MAXPATHLEN] = "";
+static const char *file_pattern = "-stdout-"; /* "log%d.log"; */
+static const char *default_file_pattern = "dbg at W%w-@%d at T-%t at .log";
+static char temp_filename[MAXPATHLEN] = "";
+static int world_num = 0;
+static int world_rank = -1;
+static int which_rank = -1; /* all ranks */
+static int reset_time_origin = 1;
+static double time_origin = 0.0;
+
+/* This variable is initialized to the appropriate threading level in
+ * the DBG_Init call. Before the debug init, the application cannot
+ * be threaded, anyway. So it is safe to statically set it to "0"
+ * here. */
+static int is_threaded = 0;
+
+static int dbg_usage(const char *, const char *);
+static int dbg_openfile(FILE ** dbg_fp);
+static int dbg_set_class(const char *);
+static int dbg_set_level(const char *, const char *(names[]));
+static int dbg_get_filename(char *filename, int len);
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+static MPL_thread_tls_t dbg_tls_key;
+#endif
+
+static FILE *dbg_static_fp = 0;
+
+/*
+ * This function finds the basename in a path (ala "man 1 basename").
+ * *basename will point to an element in path.
+ * More formally: This function sets basename to the character just
+ * after the last '/' in path.
+*/
+static void find_basename(char *path, char **basename) ATTRIBUTE((unused));
+static void find_basename(char *path, char **basename)
+{
+ char *c;
+
+ c = *basename = path;
+ while (*c) {
+ if (*c == '/')
+ *basename = c + 1;
+ ++c;
+ }
+}
+
+static int dbg_init_tls(void)
+{
+ int err = 0;
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ MPL_thread_tls_create(NULL, &dbg_tls_key, &err);
+#endif
+
+ return err;
+}
+
+static FILE *get_fp(void)
+{
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ int err;
+ /* if we're not initialized, use the static fp, since there should
+ * only be one thread in here until then */
+ if (is_threaded) {
+ if (dbg_initialized == DBG_INITIALIZED) {
+ FILE *fp;
+ MPL_thread_tls_get(&dbg_tls_key, (void **) &fp, &err);
+ return fp;
+ }
+ }
+#endif
+
+ return dbg_static_fp;
+}
+
+static void set_fp(FILE * fp)
+{
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ int err;
+ /* if we're not initialized, use the static fp, since there should
+ * only be one thread in here until then */
+ if (is_threaded) {
+ if (dbg_initialized == DBG_INITIALIZED) {
+ MPL_thread_tls_set(&dbg_tls_key, (void *) fp, &err);
+ return;
+ }
+ }
+#endif
+
+ dbg_static_fp = fp;
+}
+
+int MPL_dbg_outevent(const char *file, int line, int class, int kind, const char *fmat, ...)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ va_list list;
+ char *str, stmp[MPL_DBG_MAXLINE];
+ int i;
+ void *p;
+ MPL_time_t t;
+ double curtime;
+ unsigned long long int threadID = 0;
+ int pid = -1;
+ FILE *dbg_fp = NULL;
+
+ if (dbg_initialized == DBG_UNINIT || dbg_initialized == DBG_ERROR)
+ goto fn_exit;
+
+ dbg_fp = get_fp();
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ {
+ /* the thread ID is not necessarily unique between processes, so a
+ * (pid,tid) pair should be used to uniquely identify output from
+ * particular threads on a system */
+ MPL_thread_id_t tid;
+ MPL_thread_self(&tid);
+ threadID = (unsigned long long int) tid;
+ }
+#endif
+#if defined(MPL_HAVE_GETPID)
+ pid = (int) getpid();
+#endif /* MPL_HAVE_GETPID */
+
+ if (!dbg_fp) {
+ mpl_errno = dbg_openfile(&dbg_fp);
+ if (mpl_errno)
+ goto fn_fail;
+ set_fp(dbg_fp);
+ }
+
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &curtime);
+ curtime = curtime - time_origin;
+
+ /* The kind values are used with the macros to simplify these cases */
+ switch (kind) {
+ case 0:
+ va_start(list, fmat);
+ str = va_arg(list, char *);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, str);
+ va_end(list);
+ break;
+ case 1:
+ va_start(list, fmat);
+ str = va_arg(list, char *);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, str);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ case 2:
+ va_start(list, fmat);
+ i = va_arg(list, int);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, i);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ case 3:
+ va_start(list, fmat);
+ p = va_arg(list, void *);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, p);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ default:
+ break;
+ }
+ fflush(dbg_fp);
+
+ fn_exit:
+ fn_fail:
+ return 0;
+}
+
+/* These are used to simplify the handling of options.
+ To add a new name, add an dbg_classname element to the array
+ classnames. The "classbits" values are defined by MPL_DBG_CLASS
+ in mpl_dbg.h
+ */
+
+typedef struct dbg_classname {
+ int classbits;
+ const char *ucname, *lcname;
+} dbg_classname;
+
+#define MAX_DBG_CLASSNAMES (sizeof(unsigned int) * 8)
+
+static dbg_classname classnames[MAX_DBG_CLASSNAMES];
+static int num_classnames = 0;
+
+static const char *unregistered_classes[MAX_DBG_CLASSNAMES];
+static int num_unregistered_classes = 0;
+
+/* Because the level values are simpler and are rarely changed, these
+ * use a simple set of parallel arrays */
+static const int level_values[] = {
+ MPL_DBG_TERSE,
+ MPL_DBG_TYPICAL,
+ MPL_DBG_VERBOSE,
+ 100
+};
+static const char *level_name[] = { "TERSE", "TYPICAL", "VERBOSE", 0 };
+static const char *lc_level_name[] = { "terse", "typical", "verbose", 0 };
+
+void MPL_dbg_class_register(MPL_dbg_class class, const char *ucname, const char *lcname)
+{
+ int i, j;
+
+ classnames[num_classnames].classbits = class;
+ classnames[num_classnames].ucname = ucname;
+ classnames[num_classnames].lcname = lcname;
+ num_classnames++;
+
+ if (num_unregistered_classes) {
+ /* there are some unregistered classes. look through to see
+ * if any of them match this class. */
+ size_t len = strlen(lcname);
+
+ for (i = 0; i < num_unregistered_classes; i++) {
+ size_t slen = strlen(unregistered_classes[i]);
+ if (len == slen && (strncmp(unregistered_classes[i], lcname, len) ||
+ strncmp(unregistered_classes[i], ucname, len))) {
+ /* got a match */
+ MPL_dbg_active_classes |= class;
+ for (j = i; j < num_unregistered_classes - 1; j++)
+ unregistered_classes[j] = unregistered_classes[j + 1];
+ num_unregistered_classes--;
+ break;
+ }
+ }
+ }
+}
+
+MPL_dbg_class MPL_dbg_class_alloc(const char *ucname, const char *lcname)
+{
+ static unsigned int class = 1;
+
+ /* create a user handle for this class */
+ MPL_dbg_class_register(class, ucname, lcname);
+
+ class <<= 1;
+
+ return (class >> 1);
+}
+
+/*
+ * Initialize the DBG_MSG system. This is called during the job
+ * initialization to process command-line arguments as well as
+ * checking either the MPICH_DBG or MPL_DBG environment variables.
+ * The initialization
+ * is split into two steps: a preinit and an init. This makes it
+ * possible to enable most of the features before the full
+ * initialization, where a significant amount of the initialization
+ * takes place.
+ */
+
+static int dbg_process_args(int *argc_p, char ***argv_p)
+{
+ int i, rc;
+
+ /* Here's where we do the same thing with the command-line options */
+ if (argc_p) {
+ for (i = 1; i < *argc_p; i++) {
+ if (strncmp((*argv_p)[i], "-mpich-dbg", 10) == 0) {
+ char *s = (*argv_p)[i] + 10;
+ /* Found a command */
+ if (*s == 0) {
+ /* Just -mpich-dbg */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ }
+ else if (*s == '=') {
+ /* look for file */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ s++;
+ if (strncmp(s, "file", 4) == 0) {
+ file_pattern = default_file_pattern;
+ }
+ }
+ else if (strncmp(s, "-level", 6) == 0) {
+ char *p = s + 6;
+ if (*p == '=') {
+ p++;
+ rc = dbg_set_level(p, lc_level_name);
+ if (rc)
+ dbg_usage("-mpich-dbg-level", "terse, typical, verbose");
+ }
+ }
+ else if (strncmp(s, "-class", 6) == 0) {
+ char *p = s + 6;
+ if (*p == '=') {
+ p++;
+ rc = dbg_set_class(p);
+ if (rc)
+ dbg_usage("-mpich-dbg-class", 0);
+ }
+ }
+ else if (strncmp(s, "-filename", 9) == 0) {
+ char *p = s + 9;
+ if (*p == '=') {
+ p++;
+ /* A special case for a filepattern of "-default",
+ * use the predefined default pattern */
+ if (strcmp(p, "-default") == 0) {
+ file_pattern = default_file_pattern;
+ }
+ else {
+ strncpy(file_pattern_buf, p, sizeof(file_pattern_buf));
+ file_pattern = file_pattern_buf;
+ }
+ }
+ }
+ else if (strncmp(s, "-rank", 5) == 0) {
+ char *p = s + 5;
+ if (*p == '=' && p[1] != 0) {
+ char *sOut;
+ p++;
+ which_rank = (int) strtol(p, &sOut, 10);
+ if (p == sOut) {
+ dbg_usage("-mpich-dbg-rank", 0);
+ which_rank = -1;
+ }
+ }
+ }
+ else {
+ dbg_usage((*argv_p)[i], 0);
+ }
+
+ /* Eventually, should null it out and reduce argc value */
+ }
+ }
+ }
+ return MPL_DBG_SUCCESS;
+}
+
+/* could two different environment variables control the same thing? sure they
+ * could! consider MPICH: we moved all our logging code into MPL, so it should
+ * have an MPL_ prefix, but all the documentation assumes an "MPICH_" prefix.
+ * So we'll look for both. */
+static char *getenv_either(const char *env_a, const char *env_b)
+{
+ char *s;
+ if ( (s = getenv(env_a)) == NULL)
+ s = getenv(env_b);
+
+ return s;
+}
+
+
+static int dbg_process_env(void)
+{
+ char *s;
+ int rc;
+
+ s = getenv_either("MPICH_DBG", "MPL_DBG");
+ if (s) {
+ /* Set the defaults */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ if (strncmp(s, "FILE", 4) == 0) {
+ file_pattern = default_file_pattern;
+ }
+ }
+ s = getenv_either("MPICH_DBG_LEVEL", "MPL_DBG_LEVEL");
+ if (s) {
+ rc = dbg_set_level(s, level_name);
+ if (rc)
+ dbg_usage("MPL_DBG_LEVEL", "TERSE, TYPICAL, VERBOSE");
+ }
+
+ s = getenv_either("MPICH_DBG_CLASS", "MPL_DBG_CLASS");
+ if (s) {
+ rc = dbg_set_class(s);
+ if (rc)
+ dbg_usage("MPL_DBG_CLASS", 0);
+ }
+
+ s = getenv_either("MPICH_DBG_FILENAME", "MPL_DBG_FILENAME");
+ if (s) {
+ strncpy(file_pattern_buf, s, sizeof(file_pattern_buf));
+ file_pattern = file_pattern_buf;
+ }
+
+ s = getenv_either("MPICH_DBG_RANK", "MPL_DBG_RANK");
+ if (s) {
+ char *sOut;
+ which_rank = (int) strtol(s, &sOut, 10);
+ if (s == sOut) {
+ dbg_usage("MPL_DBG_RANK", 0);
+ which_rank = -1;
+ }
+ }
+ return MPL_DBG_SUCCESS;
+}
+
+MPL_dbg_class MPL_DBG_ROUTINE_ENTER;
+MPL_dbg_class MPL_DBG_ROUTINE_EXIT;
+MPL_dbg_class MPL_DBG_ROUTINE;
+MPL_dbg_class MPL_DBG_ALL = ~(0); /* pre-initialize the ALL class */
+
+/*
+ * Attempt to initialize the logging system. This works only if the
+ * full initialization is not required for updating the environment
+ * and/or command-line arguments.
+ */
+int MPL_dbg_pre_init(int *argc_p, char ***argv_p, int wtimeNotReady)
+{
+ MPL_time_t t;
+
+ /* if the DBG_MSG system was already initialized, say by the
+ * device, then return immediately */
+ if (dbg_initialized != DBG_UNINIT)
+ return MPL_DBG_SUCCESS;
+
+ if (dbg_init_tls())
+ return MPL_DBG_ERR_OTHER;
+
+ /* Check to see if any debugging was selected. The order of these
+ * tests is important, as they allow general defaults to be set,
+ * followed by more specific modifications */
+ /* First, the environment variables */
+ dbg_process_env();
+
+ dbg_process_args(argc_p, argv_p);
+
+ if (wtimeNotReady == 0) {
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &time_origin);
+ reset_time_origin = 0;
+ }
+
+ /* Allocate the predefined classes */
+ MPL_DBG_ROUTINE_ENTER = MPL_dbg_class_alloc("ROUTINE_ENTER", "routine_enter");
+ MPL_DBG_ROUTINE_EXIT = MPL_dbg_class_alloc("ROUTINE_EXIT", "routine_exit");
+
+ MPL_DBG_CLASS_CLR(MPL_DBG_ROUTINE);
+ MPL_DBG_CLASS_APPEND(MPL_DBG_ROUTINE, MPL_DBG_ROUTINE_ENTER);
+ MPL_DBG_CLASS_APPEND(MPL_DBG_ROUTINE, MPL_DBG_ROUTINE_EXIT);
+ MPL_dbg_class_register(MPL_DBG_ROUTINE, "ROUTINE", "routine");
+
+ MPL_dbg_class_register(MPL_DBG_ALL, "ALL", "all");
+
+ dbg_initialized = DBG_PREINIT;
+
+ return MPL_DBG_SUCCESS;
+}
+
+int MPL_dbg_init(int *argc_p, char ***argv_p, int has_args, int has_env,
+ int wnum, int wrank, int threaded)
+{
+ int ret;
+ FILE *dbg_fp = NULL;
+
+ /* if the DBG_MSG system was already initialized, say by the
+ * device, then return immediately. Note that the device is then
+ * responsible for handling the file mode (e.g., reopen when the
+ * rank become available) */
+ if (dbg_initialized == DBG_INITIALIZED || dbg_initialized == DBG_ERROR)
+ return MPL_DBG_SUCCESS;
+
+ if (dbg_initialized != DBG_PREINIT) {
+ if (dbg_init_tls())
+ return MPL_DBG_ERR_OTHER;
+ }
+
+ dbg_fp = get_fp();
+
+ /* We may need to wait until the device is set up to initialize
+ * the timer */
+ if (reset_time_origin) {
+ MPL_time_t t;
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &time_origin);
+ reset_time_origin = 0;
+ }
+ /* Check to see if any debugging was selected. The order of these
+ * tests is important, as they allow general defaults to be set,
+ * followed by more specific modifications. */
+ /* Both of these may have already been set in the PreInit call; if
+ * the command line and/or environment variables are set before
+ * the full initialization, then don't call the routines to check
+ * those values (as they were already handled in DBG_PreInit) */
+ /* First, the environment variables */
+ if (!has_env)
+ dbg_process_env();
+ /* Now the command-line arguments */
+ if (!has_args)
+ dbg_process_args(argc_p, argv_p);
+
+ world_num = wnum;
+ world_rank = wrank;
+ is_threaded = threaded;
+
+ if (which_rank >= 0 && which_rank != wrank) {
+ /* Turn off logging on this process */
+ MPL_dbg_active_classes = 0;
+ }
+
+ /* If the file has already been opened with a temp filename,
+ * rename it. */
+ if (dbg_fp && dbg_fp != stdout && dbg_fp != stderr) {
+ char filename[MAXPATHLEN] = "";
+
+ dbg_get_filename(filename, MAXPATHLEN);
+ ret = rename(temp_filename, filename);
+ if (ret) {
+ /* Retry renaming file after closing it */
+ fclose(dbg_fp);
+ ret = rename(temp_filename, filename);
+ if (ret) {
+ MPL_error_printf("Could not rename temp log file to %s\n", filename);
+ goto fn_fail;
+ }
+ else {
+ dbg_fp = fopen(filename, "a+");
+ set_fp(dbg_fp);
+ if (dbg_fp == NULL) {
+ MPL_error_printf("Error re-opening log file, %s\n", filename);
+ goto fn_fail;
+ }
+ }
+ }
+ }
+
+ dbg_initialized = DBG_INITIALIZED;
+
+ fn_exit:
+ return MPL_DBG_SUCCESS;
+ fn_fail:
+ dbg_initialized = DBG_ERROR;
+ goto fn_exit;
+}
+
+/* Print the usage statement to stderr */
+static int dbg_usage(const char *cmd, const char *vals)
+{
+ if (vals) {
+ fprintf(stderr, "Incorrect value for %s, should be one of %s\n", cmd, vals);
+ }
+ else {
+ fprintf(stderr, "Incorrect value for %s\n", cmd);
+ }
+ fprintf(stderr, "Command line for debug switches\n\
+ -mpich-dbg-class=name[,name,...]\n\
+ -mpich-dbg-level=name (one of terse, typical, verbose)\n\
+ -mpich-dbg-filename=pattern (includes %%d for world rank, %%t for thread id\n\
+ -mpich-dbg-rank=val (only this rank in COMM_WORLD will be logged)\n\
+ -mpich-dbg (shorthand for -mpich-dbg-class=all -mpich-dbg-level=typical)\n\
+ -mpich-dbg=file (shorthand for -mpich-dbg -mpich-dbg-filename=%s)\n\
+Environment variables\n\
+ MPICH_DBG_CLASS=NAME[,NAME...]\n\
+ MPICH_DBG_LEVEL=NAME\n\
+ MPICH_DBG_FILENAME=pattern\n\
+ MPICH_DBG_RANK=val\n\
+ MPICH_DBG=YES or FILE\n", default_file_pattern);
+
+ fflush(stderr);
+
+ return 0;
+}
+
+#if defined (MPL_HAVE_MKSTEMP) && defined (MPL_HAVE_FDOPEN)
+
+/* creates a temporary file in the same directory the user specified
+ * for the log file */
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ const char temp_pattern[] = "templogXXXXXX";
+ int fd;
+ char *basename;
+ int ret;
+
+ ret = MPL_strncpy(temp_filename, file_pattern, MAXPATHLEN);
+ if (ret)
+ goto fn_fail;
+
+ find_basename(temp_filename, &basename);
+
+ /* make sure there's enough room in temp_filename to store temp_pattern */
+ if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern))
+ goto fn_fail;
+
+ MPL_strncpy(basename, temp_pattern, sizeof(temp_pattern));
+
+ fd = mkstemp(temp_filename);
+ if (fd == -1)
+ goto fn_fail;
+
+ *dbg_fp = fdopen(fd, "a+");
+ if (*dbg_fp == NULL)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#elif defined(MPL_HAVE__MKTEMP_S) && defined(MPL_HAVE_FOPEN_S)
+
+/* creates a temporary file in the same directory the user specified
+ * for the log file */
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ const char temp_pattern[] = "templogXXXXXX";
+ int fd;
+ char *basename;
+ int ret;
+ errno_t ret_errno;
+
+ ret = MPL_strncpy(temp_filename, file_pattern, MAXPATHLEN);
+ if (ret)
+ goto fn_fail;
+
+ find_basename(temp_filename, &basename);
+
+ /* make sure there's enough room in temp_filename to store temp_pattern */
+ if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern))
+ goto fn_fail;
+
+ MPL_strncpy(basename, temp_pattern, sizeof(temp_pattern));
+
+ ret_errno = _mktemp_s(temp_filename, MAXPATHLEN);
+ if (ret_errno != 0)
+ goto fn_fail;
+
+ ret_errno = fopen_s(dbg_fp, temp_filename, "a+");
+ if (ret_errno != 0)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#else
+
+/* creates a temporary file in some directory, which may not be where
+ * the user wants the log file. When the file is renamed later, it
+ * may require a copy.
+ *
+ * Note that this is not safe: By the time we call fopen(), another
+ * file with the same name may exist. That file would get clobbered.
+*/
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ char *cret;
+
+ cret = tmpnam(temp_filename);
+ if (cret == NULL)
+ goto fn_fail;
+
+ *dbg_fp = fopen(temp_filename, "w");
+ if (*dbg_fp == NULL)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#endif
+
+/* This routine can make no MPI calls, since it may be logging those
+ * calls. */
+static int dbg_get_filename(char *filename, int len)
+{
+ int withinMworld = 0, /* True if within an @W...@ */
+ withinMthread = 0; /* True if within an @T...@ */
+ /* FIXME: Need to know how many process groups are known */
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ unsigned long long int threadID = 0;
+ int nThread = 2;
+#else
+ int nThread = 1;
+#endif
+ static char world_numAsChar[10] = "0";
+ char *pDest;
+ const char *p;
+
+ if (world_num == 1) {
+ world_numAsChar[0] = '1';
+ world_numAsChar[1] = '\0';
+ }
+
+ p = file_pattern;
+ pDest = filename;
+ *filename = 0;
+ while (*p && (pDest - filename) < len - 1) {
+ /* There are two special cases that allow text to
+ * be optionally included. Those patterns are
+ * @T...@ (only if multi-threaded) and
+ * @W...@ (only if more than one process group)
+ * UNIMPLEMENTED/UNTESTED */
+ if (*p == '@') {
+ /* Escaped @? */
+ if (p[1] == '@') {
+ *pDest++ = *++p;
+ continue;
+ }
+ /* If within an @...@, terminate it */
+ if (withinMworld) {
+ withinMworld = 0;
+ p++;
+ }
+ else if (withinMthread) {
+ withinMthread = 0;
+ p++;
+ }
+ else {
+ /* Look for command */
+ p++;
+ if (*p == 'W') {
+ p++;
+ withinMworld = 1;
+ }
+ else if (*p == 'T') {
+ p++;
+ withinMthread = 1;
+ }
+ else {
+ /* Unrecognized char */
+ *pDest++ = *p++;
+ }
+ }
+ }
+ else if ((withinMworld && world_num == 0) || (withinMthread && nThread == 1)) {
+ /* Simply skip this character since we're not showing
+ * this string */
+ p++;
+ }
+ else if (*p == '%') {
+ p++;
+ if (*p == 'd') {
+ char rankAsChar[20];
+ MPL_snprintf(rankAsChar, sizeof(rankAsChar), "%d", world_rank);
+ *pDest = 0;
+ MPL_strnapp(filename, rankAsChar, len);
+ pDest += strlen(rankAsChar);
+ }
+ else if (*p == 't') {
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ char threadIDAsChar[30];
+ MPL_thread_id_t tid;
+ MPL_thread_self(&tid);
+ threadID = (unsigned long long int) tid;
+
+ MPL_snprintf(threadIDAsChar, sizeof(threadIDAsChar), "%llx", threadID);
+ *pDest = 0;
+ MPL_strnapp(filename, threadIDAsChar, len);
+ pDest += strlen(threadIDAsChar);
+#else
+ *pDest++ = '0';
+#endif /* MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE */
+ }
+ else if (*p == 'w') {
+ /* *pDest++ = '0'; */
+ *pDest = 0;
+ MPL_strnapp(filename, world_numAsChar, len);
+ pDest += strlen(world_numAsChar);
+ }
+ else if (*p == 'p') {
+ /* Appends the pid of the proceess to the file name. */
+ char pidAsChar[20];
+#if defined(MPL_HAVE_GETPID)
+ pid_t pid = getpid();
+#else
+ int pid = -1;
+#endif /* MPL_HAVE_GETPID */
+ MPL_snprintf(pidAsChar, sizeof(pidAsChar), "%d", (int) pid);
+ *pDest = 0;
+ MPL_strnapp(filename, pidAsChar, len);
+ pDest += strlen(pidAsChar);
+ }
+ else {
+ *pDest++ = '%';
+ *pDest++ = *p;
+ }
+ p++;
+ }
+ else {
+ *pDest++ = *p++;
+ }
+ }
+ *pDest = 0;
+
+ return 0;
+}
+
+/* This routine can make no MPI calls, since it may be logging those
+ * calls. */
+static int dbg_openfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ if (!file_pattern || *file_pattern == 0 || strcmp(file_pattern, "-stdout-") == 0) {
+ *dbg_fp = stdout;
+ }
+ else if (strcmp(file_pattern, "-stderr-") == 0) {
+ *dbg_fp = stderr;
+ }
+ else {
+ char filename[MAXPATHLEN];
+
+ /* if we're not at DBG_INITIALIZED, we don't know our
+ * rank yet, so we create a temp file, to be renamed later */
+ if (dbg_initialized != DBG_INITIALIZED) {
+ mpl_errno = dbg_open_tmpfile(dbg_fp);
+ if (mpl_errno)
+ goto fn_fail;
+ }
+ else {
+ mpl_errno = dbg_get_filename(filename, MAXPATHLEN);
+ if (mpl_errno)
+ goto fn_fail;
+
+ *dbg_fp = fopen(filename, "w");
+ if (!*dbg_fp) {
+ MPL_error_printf("Could not open log file %s\n", filename);
+ if (mpl_errno)
+ goto fn_fail;
+ }
+ }
+ }
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+/* Support routines for processing mpich-dbg values */
+/* Update the GLOBAL variable MPL_dbg_active_classes with the bits
+ * corresponding to this name */
+static int dbg_set_class(const char *s)
+{
+ int i, found_match;
+ size_t slen = 0;
+ char *str;
+
+ if (s && *s)
+ slen = strlen(s);
+
+ str = strtok((char *) s, ",");
+ while (str) {
+ found_match = 0;
+ for (i = 0; i < num_classnames; i++) {
+ size_t len = strlen(classnames[i].lcname);
+
+ if (slen == len && (strncmp(str, classnames[i].lcname, len) ||
+ strncmp(str, classnames[i].ucname, len))) {
+ /* we have a match */
+ MPL_dbg_active_classes |= classnames[i].classbits;
+ found_match = 1;
+ break;
+ }
+ }
+
+ if (!found_match) {
+ /* no match was found. the component might not have
+ * registered yet. store the user string for later
+ * access. */
+ unregistered_classes[num_unregistered_classes] = str;
+ num_unregistered_classes++;
+ }
+
+ str = strtok(NULL, ",");
+ }
+
+ return 0;
+}
+
+/* Set the global MPL_dbg_max_level if there is a match with the known
+ * level names */
+static int dbg_set_level(const char *s, const char *(names[]))
+{
+ int i;
+
+ for (i = 0; names[i]; i++) {
+ if (strcmp(names[i], s) == 0) {
+ MPL_dbg_max_level = level_values[i];
+ return 0;
+ }
+ }
+ return 1;
+}
+#endif /* MPL_USE_DBG_LOGGING */
diff --git a/src/mpl/src/env/Makefile.mk b/src/mpl/src/env/Makefile.mk
new file mode 100644
index 0000000..3a11aaa
--- /dev/null
+++ b/src/mpl/src/env/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/env/mpl_env.c
diff --git a/src/pm/hydra/mpl/src/mplenv.c b/src/mpl/src/env/mpl_env.c
similarity index 100%
rename from src/pm/hydra/mpl/src/mplenv.c
rename to src/mpl/src/env/mpl_env.c
diff --git a/src/mpl/src/mem/Makefile.mk b/src/mpl/src/mem/Makefile.mk
new file mode 100644
index 0000000..912d096
--- /dev/null
+++ b/src/mpl/src/mem/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/mem/mpl_trmem.c
diff --git a/src/mpl/src/mem/mpl_trmem.c b/src/mpl/src/mem/mpl_trmem.c
new file mode 100644
index 0000000..16c37bf
--- /dev/null
+++ b/src/mpl/src/mem/mpl_trmem.c
@@ -0,0 +1,825 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* Always enable valgrind macros (if possible) in this file. If these functions
+ * are used, the caller is concerned about correctness, not performance. */
+#define MPL_VG_ENABLED 1
+
+/* style: allow:calloc:1 sig:0 */
+/* style: allow:free:2 sig:0 */
+/* style: allow:malloc:2 sig:0 */
+/* style: allow:strdup:1 sig:0 */
+
+#include "mpl.h"
+
+#ifdef malloc
+/* Undefine these in case they were set to 'error' */
+#undef malloc
+#undef calloc
+#undef free
+#undef strdup
+/* Some GNU implementations use __strdup for strdup */
+#if defined(__strdup)
+#define strdup(s) __strdup(s)
+#endif
+#endif
+
+#define TR_ALIGN_BYTES 8
+#define TR_ALIGN_MASK 0x7
+#define TR_FNAME_LEN 48
+
+#define COOKIE_VALUE 0xf0e0d0c9
+#define ALREADY_FREED 0x0f0e0d9c
+
+typedef struct TRSPACE {
+ size_t size;
+ int id;
+ int lineno;
+ int freed_lineno;
+ char freed_fname[TR_FNAME_LEN];
+ char fname[TR_FNAME_LEN];
+ struct TRSPACE *volatile next, *prev;
+ unsigned long cookie; /* Cookie is always the last element
+ * inorder to catch the off-by-one
+ * errors */
+} TRSPACE;
+/* This union is used to ensure that the block passed to the user is
+ aligned on a double boundary */
+typedef union TrSPACE {
+ TRSPACE sp;
+ /* Ensure trSPACE header follows the alignment rules for all predefined types.
+ * Because any internal buffer is allocated as (TrSPACE)header + (void*)buffer.*/
+ MPL_mem_alignment_t alignment;
+} TrSPACE;
+
+/*
+ * This package maintains some state about itself. These globals hold
+ * this information.
+ */
+#define TRHEAD_PRESENTINAL ((TRSPACE *)0xbacdef01)
+#define TRHEAD_POSTSENTINAL ((TRSPACE *)0x10fedcba)
+static int world_rank = -1;
+static volatile size_t allocated = 0;
+static volatile long frags = 0;
+static TRSPACE *volatile TRhead[3] =
+ { TRHEAD_PRESENTINAL, 0, TRHEAD_POSTSENTINAL };
+static volatile int TRid = 0;
+static volatile int TRidSet = 0;
+static volatile int TRlevel = 0;
+static unsigned char TRDefaultByte = 0xda;
+static unsigned char TRFreedByte = 0xfc;
+static int TRdebugLevel = 0;
+static int TRSetBytes = 0;
+#define TR_MALLOC 0x1
+#define TR_FREE 0x2
+
+/* Used to keep track of allocations */
+static volatile size_t TRMaxMem = 0;
+static volatile int TRMaxMemId = 0;
+static volatile size_t TRCurOverhead = 0;
+static volatile size_t TRMaxOverhead = 314572800;
+/* Used to limit allocation */
+static volatile size_t TRMaxMemAllow = 0;
+
+static int TR_is_threaded = 0;
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE
+
+static MPL_thread_mutex_t memalloc_mutex;
+
+#define TR_THREAD_CS_ENTER \
+ do { \
+ if (TR_is_threaded) { \
+ int err; \
+ MPL_thread_mutex_lock(&memalloc_mutex, &err); \
+ if (err) \
+ MPL_error_printf("Error acquiring memalloc mutex lock\n"); \
+ } \
+ } while (0)
+
+#define TR_THREAD_CS_EXIT \
+ do { \
+ if (TR_is_threaded) { \
+ int err; \
+ MPL_thread_mutex_unlock(&memalloc_mutex, &err); \
+ if (err) \
+ MPL_error_printf("Error releasing memalloc mutex lock\n"); \
+ } \
+ } while (0)
+
+#else /* MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE */
+
+#define TR_THREAD_CS_ENTER
+#define TR_THREAD_CS_EXIT
+
+#endif /* MPL_THREAD_PACKAGE_NAME */
+
+/*
+ * Printing of addresses.
+ *
+ * This is particularly difficult because there isn't a C integer type that is
+ * known in advance to be the same size as an address, so we need some
+ * way to convert a pointer into the characters the represent the address in
+ * hex. We can't simply use %x or %lx since the size of an address might not
+ * be an int or a long (e.g., it might be a long long).
+ *
+ * In order to handle this, we have our own routine to convert
+ * an address to hex digits. For thread safety, the character
+ * string is allocated within the calling routine (rather than returning
+ * a static string from the conversion routine).
+ */
+
+/* 8 bytes = 16 hex chars + 0x (2 chars) + the null is 19 */
+#define MAX_ADDRESS_CHARS 19
+
+static void addrToHex(void *addr, char string[MAX_ADDRESS_CHARS])
+{
+ int i;
+ static char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+ };
+ /* The following construction is used to keep compilers from issuing
+ * a warning message about casting a pointer to an integer type */
+ intptr_t iaddr = (intptr_t) ((char *) addr - (char *) 0);
+
+ /* Initial location */
+ i = sizeof(void *) * 2;
+ string[i + 2] = 0;
+ while (i) {
+ string[i + 1] = hex[iaddr & 0xF];
+ iaddr >>= 4;
+ i--;
+ }
+ string[0] = '0';
+ string[1] = 'x';
+}
+
+/*+C
+ MPL_trinit - Setup the space package. Only needed for
+ error messages and flags.
++*/
+void MPL_trinit(int rank, int need_thread_safety)
+{
+ char *s;
+
+ world_rank = rank;
+
+ /* FIXME: We should use generalized parameter handling here
+ * to allow use of the command line as well as environment
+ * variables */
+ s = getenv("MPL_TRMEM_INIT");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRSetBytes = 1;
+ }
+ s = getenv("MPL_TRMEM_VALIDATE");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRdebugLevel = 1;
+ }
+ s = getenv("MPL_TRMEM_INITZERO");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRDefaultByte = 0;
+ TRFreedByte = 0;
+ }
+ s = getenv("MPL_TRMEM_TRACELEVEL");
+ if (s && *s) {
+ int l = atoi(s);
+ TRlevel = l;
+ }
+ s = getenv("MPL_TRMEM_MAX_OVERHEAD");
+ if (s && *s) {
+ long l = atol(s);
+ TRMaxOverhead = (size_t)l;
+ }
+
+ /* If the upper layer asked for thread safety and there's no
+ * threading package available, we need to return an error. */
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE
+ if (need_thread_safety)
+ MPL_error_printf("No thread package to provide thread-safe memory allocation\n");
+#endif
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE
+ if (need_thread_safety) {
+ int err;
+
+ MPL_thread_mutex_create(&memalloc_mutex, &err);
+ if (err) {
+ MPL_error_printf("Error creating memalloc mutex\n");
+ }
+
+ TR_is_threaded = 1;
+ }
+#endif
+}
+
+/*+C
+ MPL_trmalloc - Malloc with tracing
+
+Input Parameters:
++ a - number of bytes to allocate
+. lineno - line number where used. Use __LINE__ for this
+- fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ double aligned pointer to requested storage, or null if not
+ available.
+ +*/
+static void *trmalloc(size_t a, int lineno, const char fname[])
+{
+ TRSPACE *head;
+ char *new = NULL;
+ unsigned long *nend;
+ size_t nsize;
+ int l;
+
+ if (TRdebugLevel > 0) {
+ if (MPL_trvalid2( "Invalid MALLOC arena detected at line %d in %s\n",
+ lineno, fname))
+ goto fn_exit;
+ }
+
+ nsize = a;
+ if (nsize & TR_ALIGN_MASK)
+ nsize += (TR_ALIGN_BYTES - (nsize & TR_ALIGN_MASK));
+ if ((allocated + nsize > TRMaxMemAllow) && TRMaxMemAllow) {
+ /* Return a null when memory would be exhausted */
+ /* This is only called when additional debugging is enabled,
+ * so the fact that this does not go through the regular error
+ * message system is not a problem. */
+ MPL_error_printf("Exceeded allowed memory!\n");
+ goto fn_exit;
+ }
+
+ new = (char *)malloc(nsize + sizeof(TrSPACE) + sizeof(unsigned long));
+ if (!new)
+ goto fn_exit;
+
+ if(TRSetBytes)
+ memset(new, TRDefaultByte, nsize + sizeof(TrSPACE) + sizeof(unsigned long));
+
+ /* Cast to (void*) to avoid false warnings about alignment issues */
+ head = (TRSPACE *) (void *)new;
+ new += sizeof(TrSPACE);
+
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ goto fn_exit;
+ }
+ if (TRhead[1]) {
+ MPL_VG_MAKE_MEM_DEFINED(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
+ TRhead[1]->prev = head;
+ MPL_VG_MAKE_MEM_NOACCESS(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
+ }
+ head->next = TRhead[1];
+ TRhead[1] = head;
+ head->prev = 0;
+ head->size = nsize;
+ head->id = TRid;
+ head->lineno = lineno;
+ if ((l = (int) strlen(fname)) > TR_FNAME_LEN - 1)
+ fname += (l - (TR_FNAME_LEN - 1));
+ MPL_strncpy(head->fname, fname, TR_FNAME_LEN);
+ head->fname[TR_FNAME_LEN - 1] = 0;
+ head->cookie = COOKIE_VALUE;
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *) (new + nsize);
+ nend[0] = COOKIE_VALUE;
+
+ allocated += nsize;
+ if (allocated > TRMaxMem) {
+ TRMaxMem = allocated;
+ TRMaxMemId = TRid;
+ }
+ frags++;
+
+ if (TRlevel & TR_MALLOC) {
+ /* Note that %08p (what we'd like to use) isn't accepted by
+ * all compilers */
+ MPL_error_printf("[%d] Allocating %ld(%ld) bytes at %8p in %s[%d]\n",
+ world_rank, (long)a, (long)nsize, new, fname, lineno);
+ }
+
+ /* Warn the user about tracing overhead if the total memory overhead for
+ * tracing is larger than the threshold, TRMaxOverhead. */
+ TRCurOverhead += sizeof(TrSPACE);
+ if ((TRCurOverhead > TRMaxOverhead) && TRMaxOverhead) {
+ MPL_error_printf("[%d] %.1lf MB was used for memory usage tracing!\n",
+ world_rank, (double)TRCurOverhead / 1024 / 1024);
+ TRMaxOverhead = TRMaxOverhead * 2;
+ }
+
+ /* Without these macros valgrind actually catches far fewer errors when
+ * using --enable-g=mem. Note that it would be nice to use
+ * MPL_VG_MALLOCLIKE_BLOCK and friends, but they don't work when the
+ * underlying source of the memory is malloc/free. */
+ MPL_VG_MAKE_MEM_UNDEFINED(new, nsize);
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(TrSPACE));
+ MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(unsigned long));
+ fn_exit:
+ return (void *) new;
+}
+
+void *MPL_trmalloc(size_t a, int lineno, const char fname[])
+{
+ void *retval;
+
+ TR_THREAD_CS_ENTER;
+ retval = trmalloc(a, lineno, fname);
+ TR_THREAD_CS_EXIT;
+
+ return retval;
+}
+
+/*+C
+ MPL_trfree - Free with tracing
+
+Input Parameters:
++ a - pointer to a block allocated with trmalloc
+. line - line in file where called
+- file - Name of file where called
+ +*/
+static void trfree(void *a_ptr, int line, const char file[])
+{
+ TRSPACE *head;
+ unsigned long *nend;
+ size_t nset;
+ int l;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+/* Don't try to handle empty blocks */
+ if (!a_ptr)
+ return;
+
+ if (TRdebugLevel > 0) {
+ if (MPL_trvalid2("Invalid MALLOC arena detected by FREE at line %d in %s\n", line, file ))
+ return;
+ }
+
+ /* Alignment guaranteed by the way a_ptr was allocated. Use
+ (void *) cast to suppress false warning about alignment issues */
+ head = (TRSPACE *) (void *) ( ((char *)a_ptr) - sizeof(TrSPACE) );
+
+ /* We need to mark the memory as defined before performing our own error
+ * checks or valgrind will flag the trfree function as erroneous. The real
+ * free() at the end of this function will mark the whole block as NOACCESS
+ * again. See the corresponding block in the trmalloc function for more
+ * info. */
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(TrSPACE));
+
+ if (head->cookie != COOKIE_VALUE) {
+ /* Damaged header */
+ /* Note that %08p (what we'd like to use) isn't accepted by
+ * all compilers */
+ addrToHex( a_ptr, hexstring );
+ MPL_error_printf("[%d] Block at address %s is corrupted; cannot free;\n"
+ "may be block not allocated with MPL_trmalloc or MALLOC\n"
+ "called in %s at line %d\n", world_rank, hexstring, file, line);
+ return;
+ }
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *) ((char *)a_ptr + head->size);
+/* Check that nend is properly aligned */
+ if ((sizeof(long) == 4 && ((long) nend & 0x3) != 0) ||
+ (sizeof(long) == 8 && ((long) nend & 0x7) != 0)) {
+ addrToHex( a_ptr, hexstring );
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (invalid address or header)\n"
+ "called in %s at line %d\n", world_rank, hexstring, file, line);
+ return;
+ }
+
+ MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
+ if (*nend != COOKIE_VALUE) {
+ if (*nend == ALREADY_FREED) {
+ addrToHex(a_ptr, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s was already freed\n", world_rank,
+ head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf("[%d] Block at address %s was already freed\n",
+ world_rank, hexstring);
+ }
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ head->freed_fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ MPL_error_printf("[%d] Block freed in %s[%d]\n",
+ world_rank, head->freed_fname, head->freed_lineno);
+ MPL_error_printf("[%d] Block allocated at %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ return;
+ }
+ else {
+ /* Damaged tail */
+ addrToHex(a_ptr, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
+ world_rank, head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (probably write past end)\n",
+ world_rank, hexstring);
+ }
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ MPL_error_printf("[%d] Block being freed allocated in %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
+ world_rank, (long)COOKIE_VALUE, *nend );
+ }
+ }
+/* Mark the location freed */
+ *nend = ALREADY_FREED;
+ head->freed_lineno = line;
+ if ((l = (int) strlen(file)) > TR_FNAME_LEN - 1)
+ file += (l - (TR_FNAME_LEN - 1));
+ MPL_strncpy(head->freed_fname, file, TR_FNAME_LEN);
+
+ allocated -= head->size;
+ frags--;
+ if (head->prev) {
+ MPL_VG_MAKE_MEM_DEFINED(&head->prev->next, sizeof(head->prev->next));
+ head->prev->next = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(&head->prev->next, sizeof(head->prev->next));
+ }
+ else {
+ TRhead[1] = head->next;
+ }
+
+ if (head->next) {
+ MPL_VG_MAKE_MEM_DEFINED(&head->next->prev, sizeof(head->next->prev));
+ head->next->prev = head->prev;
+ MPL_VG_MAKE_MEM_NOACCESS(&head->next->prev, sizeof(head->next->prev));
+ }
+
+ if (TRlevel & TR_FREE) {
+ addrToHex(a_ptr, hexstring);
+ MPL_error_printf("[%d] Freeing %lu bytes at %s in %s[%d]\n",
+ world_rank, (unsigned long)head->size, hexstring,
+ file, line);
+ }
+
+ TRCurOverhead -= sizeof(TrSPACE);
+
+ /*
+ * Now, scrub the data (except possibly the first few ints) to
+ * help catch access to already freed data
+ */
+ /* FIXME why do we skip the first few ints? [goodell@] */
+ /* Answer lost in time. Probably because in some case, the
+ first few bytes provided useful information in tracking down
+ a problem. */
+ if (head->size > 2*sizeof(int)) {
+ /* Now that nset is size_t, it might be defined as unsigned,
+ so we can't compare nset - 2*sizeof(int) against zero */
+ nset = head->size - 2 * sizeof(int);
+ /* If an upper layer (like the handle allocation code) ever used the
+ * MPL_VG_MAKE_MEM_NOACCESS macro on part/all of the data we gave
+ * them then our memset will elicit "invalid write" errors from
+ * valgrind. Mark it as accessible but undefined here to prevent this. */
+ MPL_VG_MAKE_MEM_UNDEFINED((char *)a_ptr + 2 * sizeof(int), nset);
+ if(TRSetBytes)
+ memset((char *)a_ptr + 2 * sizeof(int), TRFreedByte, nset);
+ }
+ free(head);
+}
+
+void MPL_trfree(void *a_ptr, int line, const char fname[])
+{
+ TR_THREAD_CS_ENTER;
+ trfree(a_ptr, line, fname);
+ TR_THREAD_CS_EXIT;
+}
+
+/*+C
+ MPL_trvalid - test the allocated blocks for validity. This can be used to
+ check for memory overwrites.
+
+Input Parameters:
+. str - string to write out only if an error is detected.
+
+ Return value:
+ The number of errors detected.
+
+ Output Effect:
+ Error messages are written to stdout. These have the form of either
+
+$ Block [id=%d(%d)] at address %lx is corrupted (probably write past end)
+$ Block allocated in <filename>[<linenumber>]
+
+ if the sentinal at the end of the block has been corrupted, and
+
+$ Block at address %lx is corrupted
+
+ if the sentinal at the begining of the block has been corrupted.
+
+ The address is the actual address of the block. The id is the
+ value of TRID.
+
+ No output is generated if there are no problems detected.
++*/
+static int trvalid( const char str[] )
+{
+ return MPL_trvalid2( str, -1, (const char *)0 );
+}
+
+int MPL_trvalid2(const char str[], int line, const char file[] )
+{
+ TRSPACE *head;
+ TRSPACE *next;
+ char *a;
+ unsigned long *nend;
+ int errs = 0;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ errs++;
+ goto fn_exit;
+ }
+ head = TRhead[1];
+ while (head) {
+ /* mark defined before accessing head contents */
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
+ if (head->cookie != COOKIE_VALUE) {
+ if (!errs) {
+ if (line > 0)
+ MPL_error_printf(str, line, file);
+ else
+ MPL_error_printf( "%s\n", str );
+ }
+ errs++;
+ addrToHex(head+1, hexstring);
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (invalid cookie in head)\n",
+ world_rank, hexstring);
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ /* Must stop because if head is invalid, then the data in the
+ * head is probably also invalid, and using could lead to
+ * SEGV or BUS */
+ goto fn_exit;
+ }
+ /* Get the address of the first byte of the memory, which begins
+ just after the end of the header. We must use the full header
+ (TrSPACE) rather than the struct with the data (TRSPACE) because
+ the full header is padded to ensure correct byte alignment with
+ the data */
+ a = (char *)( (TrSPACE *)head + 1 );
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *)(a + head->size);
+
+ /* mark defined before accessing nend contents */
+ MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
+
+ if (nend[0] != COOKIE_VALUE) {
+ if (!errs) {
+ if (line > 0)
+ MPL_error_printf(str, line, file);
+ else
+ MPL_error_printf( "%s\n", str );
+ }
+ errs++;
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ addrToHex(a, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
+ world_rank, head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (probably write past end)\n",
+ world_rank, hexstring);
+ }
+ MPL_error_printf("[%d] Block allocated in %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
+ world_rank, (long)COOKIE_VALUE, *nend );
+ }
+
+ /* set both regions back to NOACCESS */
+ next = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(*nend));
+ head = next;
+ }
+ fn_exit:
+ return errs;
+}
+
+int MPL_trvalid(const char str[])
+{
+ int retval;
+ TR_THREAD_CS_ENTER;
+ retval = trvalid(str);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trdump - Dump the allocated memory blocks to a file
+
+Input Parameters:
++ fp - file pointer. If fp is NULL, stderr is assumed.
+- minid - Only print allocated memory blocks whose id is at least 'minid'
+
+ +*/
+static void trdump(FILE * fp, int minid)
+{
+ TRSPACE *head;
+#ifdef VALGRIND_MAKE_MEM_NOACCESS
+ TRSPACE *old_head;
+#endif
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ if (fp == 0)
+ fp = stderr;
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ return;
+ }
+ head = TRhead[1];
+ while (head) {
+ /* these "rank and size" strings are supposed to be small: enough to
+ * hold an mpi rank, a size, and a hexadecimal address. */
+#define ADDRESS_STR_BUFLEN 256
+
+ char address_str[ADDRESS_STR_BUFLEN];
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
+ if (head->id >= minid) {
+ addrToHex((char *) head + sizeof(TrSPACE), hexstring);
+ address_str[ADDRESS_STR_BUFLEN-1] = 0;
+ snprintf(address_str, ADDRESS_STR_BUFLEN-1, "[%d] %lu at [%s],", world_rank,
+ (unsigned long)head->size, hexstring);
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Be extra careful */
+ if (TRidSet) {
+ /* For head->id >= 0, we can add code to map the id to
+ * the name of a package, rather than using a raw number */
+ fprintf(fp, "%s id = %d %s[%d]\n", address_str, head->id, head->fname, head->lineno);
+ }
+ else {
+ fprintf(fp, "%s %s[%d]\n", address_str, head->fname, head->lineno);
+ }
+ }
+#ifdef VALGRIND_MAKE_MEM_NOACCESS
+ old_head = head;
+#endif
+ head = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(old_head, sizeof(*old_head));
+ }
+/*
+ msg_fprintf(fp, "# [%d] The maximum space allocated was %ld bytes [%ld]\n",
+ world_rank, TRMaxMem, TRMaxMemId);
+ */
+}
+
+void MPL_trdump(FILE *fp, int minid)
+{
+ TR_THREAD_CS_ENTER;
+ trdump(fp, minid);
+ TR_THREAD_CS_EXIT;
+}
+
+/*+C
+ MPL_trcalloc - Calloc with tracing
+
+Input Parameters:
+. nelem - number of elements to allocate
+. elsize - size of each element
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Double aligned pointer to requested storage, or null if not
+ available.
+ +*/
+static void *trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
+{
+ void *p;
+
+ p = trmalloc(nelem * elsize, lineno, fname);
+ if (p) {
+ memset(p, 0, nelem * elsize);
+ }
+ return p;
+}
+
+void *MPL_trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trcalloc(nelem, elsize, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trrealloc - Realloc with tracing
+
+Input Parameters:
+. p - pointer to old storage
+. size - number of bytes to allocate
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Double aligned pointer to requested storage, or null if not
+ available. This implementation ALWAYS allocates new space and copies
+ the contents into the new space.
+ +*/
+static void *trrealloc(void *p, size_t size, int lineno, const char fname[])
+{
+ void *pnew;
+ size_t nsize;
+ TRSPACE *head = 0;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ /* We should really use the size of the old block... */
+ if (p) {
+ head = (TRSPACE *) (void*) ((char *)p - sizeof(TrSPACE));
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head)); /* mark defined before accessing contents */
+ if (head->cookie != COOKIE_VALUE) {
+ /* Damaged header */
+ addrToHex(p, hexstring);
+ MPL_error_printf("[%d] Block at address %s is corrupted; cannot realloc;\n"
+ "may be block not allocated with MPL_trmalloc or MALLOC\n",
+ world_rank, hexstring);
+ return 0;
+ }
+ }
+
+ /* Per the POSIX Standard, realloc() with zero size has two possible
+ * results. In both cases the given pointer (p) is freed, and the function
+ * will either return NULL or a unique value that can safely be passed to
+ * free(). We return NULL here because that is more likely to catch
+ * programming errors at higher levels. */
+ if (!size) {
+ trfree(p, lineno, fname);
+ return NULL;
+ }
+
+ pnew = trmalloc(size, lineno, fname);
+
+ if (p && pnew) {
+ nsize = size;
+ if (head->size < nsize)
+ nsize = head->size;
+ memcpy(pnew, p, nsize);
+ trfree(p, lineno, fname);
+ }
+
+ /* Re-mark the head as NOACCESS before returning. */
+ /* FIXME: Note head is no longer valid after MPL_trfree above */
+ if (head) {
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ }
+
+ /* If the MPL_trmalloc failed above pnew will be NULL, just like a
+ * regular realloc failure. */
+ return pnew;
+}
+
+void *MPL_trrealloc(void *p, size_t size, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trrealloc(p, size, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trstrdup - Strdup with tracing
+
+Input Parameters:
+. str - string to duplicate
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Pointer to copy of the input string.
+ +*/
+static void *trstrdup(const char *str, int lineno, const char fname[])
+{
+ void *p;
+ size_t len = strlen(str) + 1;
+
+ p = trmalloc(len, lineno, fname);
+ if (p) {
+ memcpy(p, str, len);
+ }
+ return p;
+}
+
+void *MPL_trstrdup(const char *str, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trstrdup(str, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
diff --git a/src/mpl/src/mplstr.c b/src/mpl/src/mplstr.c
deleted file mode 100644
index 941493b..0000000
--- a/src/mpl/src/mplstr.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpl.h"
-
-#if !defined MPL_HAVE_SNPRINTF
-int MPL_snprintf(char *str, size_t size, mpl_const char *format, ...)
-{
- int n;
- mpl_const char *p;
- char *out_str = str;
- va_list list;
-
- va_start(list, format);
-
- p = format;
- while (*p && size > 0) {
- char *nf;
-
- nf = strchr(p, '%');
- if (!nf) {
- /* No more format characters */
- while (size-- > 0 && *p) {
- *out_str++ = *p++;
- }
- }
- else {
- int nc;
- int width = -1;
-
- /* Copy until nf */
- while (p < nf && size-- > 0) {
- *out_str++ = *p++;
- }
- /* p now points at nf */
- /* Handle the format character */
- nc = nf[1];
- if (isdigit(nc)) {
- /* Get the field width */
- /* FIXME : Assumes ASCII */
- width = nc - '0';
- p = nf + 2;
- while (*p && isdigit(*p)) {
- width = 10 * width + (*p++ - '0');
- }
- /* When there is no longer a digit, get the format
- * character */
- nc = *p++;
- }
- else {
- /* Skip over the format string */
- p += 2;
- }
-
- switch (nc) {
- case '%':
- *out_str++ = '%';
- size--;
- break;
-
- case 'd':
- {
- int val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of integer type */
- val = va_arg(list, int);
- sprintf(tmp, "%d", val);
- if (width > 0) {
- size_t tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- * left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 'x':
- {
- int val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of integer type */
- val = va_arg(list, int);
- sprintf(tmp, "%x", val);
- if (width > 0) {
- size_t tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- * left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 'p':
- {
- void *val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of pointer type */
- val = va_arg(list, void *);
- sprintf(tmp, "%p", val);
- if (width > 0) {
- size_t tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- * left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 's':
- {
- char *s_arg;
- /* Get the argument, of pointer to char type */
- s_arg = va_arg(list, char *);
- while (size-- > 0 && s_arg && *s_arg) {
- *out_str++ = *s_arg++;
- }
- }
- break;
-
- default:
- /* Error, unknown case */
- return -1;
- break;
- }
- }
- }
-
- va_end(list);
-
- if (size-- > 0)
- *out_str++ = '\0';
-
- n = (int) (out_str - str);
- return n;
-}
-#endif /* MPL_HAVE_SNPRINTF */
-
-/*@
- MPL_strdup - Duplicate a string
-
- Synopsis:
-.vb
- char *MPL_strdup(mpl_const char *str)
-.ve
-
-Input Parameters:
-. str - null-terminated string to duplicate
-
- Return value:
- A pointer to a copy of the string, including the terminating null. A
- null pointer is returned on error, such as out-of-memory.
-
- Module:
- Utility
- @*/
-#if !defined MPL_HAVE_STRDUP
-char *MPL_strdup(mpl_const char *str)
-{
- char *mpl_restrict p = (char *) malloc(strlen(str) + 1);
- mpl_const char *mpl_restrict in_p = str;
- char *save_p;
-
- save_p = p;
- if (p) {
- while (*in_p) {
- *p++ = *in_p++;
- }
- *p = 0;
- }
- return save_p;
-}
-#endif /* MPL_HAVE_STRDUP */
-
-/*
- * MPL_strncpy - Copy at most n characters. Stop once a null is reached.
- *
- * This is different from strncpy, which null pads so that exactly
- * n characters are copied. The strncpy behavior is correct for many
- * applications because it guarantees that the string has no uninitialized
- * data.
- *
- * If n characters are copied without reaching a null, return an error.
- * Otherwise, return 0.
- *
- * Question: should we provide a way to request the length of the string,
- * since we know it?
- */
-/*@ MPL_strncpy - Copy a string with a maximum length
-
-Input Parameters:
-+ instr - String to copy
-- maxlen - Maximum total length of 'outstr'
-
-Output Parameters:
-. outstr - String to copy into
-
- Notes:
- This routine is the routine that you wish 'strncpy' was. In copying
- 'instr' to 'outstr', it stops when either the end of 'outstr' (the
- null character) is seen or the maximum length 'maxlen' is reached.
- Unlike 'strncpy', it does not add enough nulls to 'outstr' after
- copying 'instr' in order to move precisely 'maxlen' characters.
- Thus, this routine may be used anywhere 'strcpy' is used, without any
- performance cost related to large values of 'maxlen'.
-
- If there is insufficient space in the destination, the destination is
- still null-terminated, to avoid potential failures in routines that neglect
- to check the error code return from this routine.
-
- Module:
- Utility
- @*/
-int MPL_strncpy(char *dest, const char *src, size_t n)
-{
- char *mpl_restrict d_ptr = dest;
- const char *mpl_restrict s_ptr = src;
- register int i;
-
- if (n == 0)
- return 0;
-
- i = (int) n;
- while (*s_ptr && i-- > 0) {
- *d_ptr++ = *s_ptr++;
- }
-
- if (i > 0) {
- *d_ptr = 0;
- return 0;
- }
- else {
- /* Force a null at the end of the string (gives better safety
- * in case the user fails to check the error code) */
- dest[n - 1] = 0;
- /* We may want to force an error message here, at least in the
- * debugging version */
- /*printf("failure in copying %s with length %d\n", src, n); */
- return 1;
- }
-}
-
-/* replacement for strsep. Conforms to the following description (from the OS X
- * 10.6 man page):
- *
- * The strsep() function locates, in the string referenced by *stringp, the first occur-
- * rence of any character in the string delim (or the terminating `\0' character) and
- * replaces it with a `\0'. The location of the next character after the delimiter
- * character (or NULL, if the end of the string was reached) is stored in *stringp. The
- * original value of *stringp is returned.
- *
- * An ``empty'' field (i.e., a character in the string delim occurs as the first charac-
- * ter of *stringp) can be detected by comparing the location referenced by the returned
- * pointer to `\0'.
- *
- * If *stringp is initially NULL, strsep() returns NULL.
- */
-char *MPL_strsep(char **stringp, const char *delim)
-{
- int i, j;
- char *ret;
-
- if (!*stringp)
- return NULL;
-
- ret = *stringp;
- i = 0;
- while (1) {
- if (!ret[i]) {
- *stringp = NULL;
- return ret;
- }
- for (j = 0; delim[j] != '\0'; ++j) {
- if (ret[i] == delim[j]) {
- ret[i] = '\0';
- *stringp = &ret[i+1];
- return ret;
- }
- }
- ++i;
- }
-}
-
-
-/* there's no standard portable way to convert error codes to human readable
- * strings. The standard way to do that is via strerror() but if for some
- * resason we don't have it, then we'll merely output the error code seen */
-#if !defined MPL_HAVE_STRERROR
-char *MPL_strerror(int errnum)
-{
-#define STRERROR_SIZE 256
- static char msgbuf[STRERROR_SIZE];
- snprintf(msgbuf, STRERROR_SIZE, "errno = %d", errnum);
-#undef STRERROR_SIZE
- return msgbuf;
-}
-#endif /* MPL_HAVE_STRERROR */
diff --git a/src/mpl/src/mpltrmem.c b/src/mpl/src/mpltrmem.c
deleted file mode 100644
index 3c9686f..0000000
--- a/src/mpl/src/mpltrmem.c
+++ /dev/null
@@ -1,1072 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* Always enable valgrind macros (if possible) in this file. If these functions
- * are used, the caller is concerned about correctness, not performance. */
-#define MPL_VG_ENABLED 1
-
-/* style: allow:calloc:1 sig:0 */
-/* style: allow:free:2 sig:0 */
-/* style: allow:malloc:2 sig:0 */
-/* style: allow:strdup:1 sig:0 */
-
-#include "mpl.h"
-
-#ifdef malloc
-/* Undefine these in case they were set to 'error' */
-#undef malloc
-#undef calloc
-#undef free
-#undef strdup
-/* Some GNU implementations use __strdup for strdup */
-#if defined(__strdup)
-#define strdup(s) __strdup(s)
-#endif
-#endif
-
-#if defined(MPL_HAVE_STDLIB_H) || defined(MPL_STDC_HEADERS)
-#include <stdlib.h>
-#else
-/* We should test to see if these will work */
-extern void *malloc(size_t);
-extern void *calloc(size_t, size_t);
-extern int free(void *);
-#endif
-
-/*D
- MPL_trspace - Routines for tracing space usage
-
- Description:
- MPL_trmalloc replaces malloc and MPL_trfree replaces free.
- These routines
- have the same syntax and semantics as the routines that they replace,
- In addition, there are routines to report statistics on the memory
- usage, and to report the currently allocated space. These routines
- are built on top of malloc and free, and can be used together with
- them as long as any space allocated with MPL_trmalloc is only freed with
- MPL_trfree.
-
- Note that the malloced data is scrubbed each time; you don't get
- random trash (or fortuitous zeros). What you get is fc (bytes);
- this will usually create a "bad" value.
-
- As an aid in developing codes, a maximum memory threshold can
- be set with MPL_TrSetMaxMem.
- D*/
-
-/* HEADER_DOUBLES is the number of doubles in a trSPACE header */
-/* We have to be careful about alignment rules here */
-#define USE_LONG_NAMES_IN_TRMEM
-#ifdef USE_LONG_NAMES_IN_TRMEM
-/* Assume worst case and align on 8 bytes */
-#define TR_ALIGN_BYTES 8
-#define TR_ALIGN_MASK 0x7
-#define TR_FNAME_LEN 48
-#define HEADER_DOUBLES 19
-#else
-#if SIZEOF_VOID_P > 4
-#define TR_ALIGN_BYTES 8
-#define TR_ALIGN_MASK 0x7
-#define TR_FNAME_LEN 16
-#define HEADER_DOUBLES 12
-#else
-#define TR_ALIGN_BYTES 4
-#define TR_ALIGN_MASK 0x3
-#define TR_FNAME_LEN 12
-#define HEADER_DOUBLES 8
-#endif
-#endif
-
-#define COOKIE_VALUE 0xf0e0d0c9
-#define ALREADY_FREED 0x0f0e0d9c
-
-typedef struct TRSPACE {
- size_t size;
- int id;
- int lineno;
- int freed_lineno;
- char freed_fname[TR_FNAME_LEN];
- char fname[TR_FNAME_LEN];
- struct TRSPACE *volatile next, *prev;
- unsigned long cookie; /* Cookie is always the last element
- * inorder to catch the off-by-one
- * errors */
-} TRSPACE;
-/* This union is used to ensure that the block passed to the user is
- aligned on a double boundary */
-typedef union TrSPACE {
- TRSPACE sp;
- double v[HEADER_DOUBLES];
-} TrSPACE;
-
-/*
- * This package maintains some state about itself. These globals hold
- * this information.
- */
-#define TRHEAD_PRESENTINAL ((TRSPACE *)0xbacdef01)
-#define TRHEAD_POSTSENTINAL ((TRSPACE *)0x10fedcba)
-static int world_rank = -1;
-static volatile size_t allocated = 0;
-static volatile long frags = 0;
-static TRSPACE *volatile TRhead[3] =
- { TRHEAD_PRESENTINAL, 0, TRHEAD_POSTSENTINAL };
-static volatile int TRid = 0;
-static volatile int TRidSet = 0;
-static volatile int TRlevel = 0;
-static unsigned char TRDefaultByte = 0xda;
-static unsigned char TRFreedByte = 0xfc;
-#define MAX_TR_STACK 20
-static int TRdebugLevel = 0;
-static int TRSetBytes = 0;
-#define TR_MALLOC 0x1
-#define TR_FREE 0x2
-
-/* Used to keep track of allocations */
-static volatile size_t TRMaxMem = 0;
-static volatile int TRMaxMemId = 0;
-static volatile size_t TRCurOverhead = 0;
-static volatile size_t TRMaxOverhead = 314572800;
-/* Used to limit allocation */
-static volatile size_t TRMaxMemAllow = 0;
-
-/*
- * Printing of addresses.
- *
- * This is particularly difficult because there isn't a C integer type that is
- * known in advance to be the same size as an address, so we need some
- * way to convert a pointer into the characters the represent the address in
- * hex. We can't simply use %x or %lx since the size of an address might not
- * be an int or a long (e.g., it might be a long long).
- *
- * In order to handle this, we have our own routine to convert
- * an address to hex digits. For thread safety, the character
- * string is allocated within the calling routine (rather than returning
- * a static string from the conversion routine).
- */
-
-/* 8 bytes = 16 hex chars + 0x (2 chars) + the null is 19 */
-#define MAX_ADDRESS_CHARS 19
-
-static void addrToHex(void *addr, char string[MAX_ADDRESS_CHARS]);
-
-/*+C
- MPL_trinit - Setup the space package. Only needed for
- error messages and flags.
-+*/
-void MPL_trinit(int rank)
-{
- char *s;
-
- world_rank = rank;
-
- /* FIXME: We should use generalized parameter handling here
- * to allow use of the command line as well as environment
- * variables */
- /* these should properly only be "MPL_" parameters, but for backwards
- * compatibility we also support "MPICH_" parameters. */
- s = getenv("MPICH_TRMEM_INIT");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRSetBytes = 1;
- }
- s = getenv("MPICH_TRMEM_VALIDATE");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRdebugLevel = 1;
- }
- s = getenv("MPICH_TRMEM_INITZERO");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRDefaultByte = 0;
- TRFreedByte = 0;
- }
- s = getenv("MPICH_TRMEM_MAX_OVERHEAD");
- if (s && *s) {
- long l = atol(s);
- TRMaxOverhead = (size_t)l;
- }
- s = getenv("MPL_TRMEM_INIT");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRSetBytes = 1;
- }
- s = getenv("MPL_TRMEM_VALIDATE");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRdebugLevel = 1;
- }
- s = getenv("MPL_TRMEM_INITZERO");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRDefaultByte = 0;
- TRFreedByte = 0;
- }
- s = getenv("MPL_TRMEM_TRACELEVEL");
- if (s && *s) {
- int l = atoi(s);
- TRlevel = l;
- }
- s = getenv("MPL_TRMEM_MAX_OVERHEAD");
- if (s && *s) {
- long l = atol(s);
- TRMaxOverhead = (size_t)l;
- }
-
-}
-
-/*+C
- MPL_trmalloc - Malloc with tracing
-
-Input Parameters:
-+ a - number of bytes to allocate
-. lineno - line number where used. Use __LINE__ for this
-- fname - file name where used. Use __FILE__ for this
-
- Returns:
- double aligned pointer to requested storage, or null if not
- available.
- +*/
-void *MPL_trmalloc(size_t a, int lineno, const char fname[])
-{
- TRSPACE *head;
- char *new = NULL;
- unsigned long *nend;
- size_t nsize;
- int l;
-
- if (TRdebugLevel > 0) {
- if (MPL_trvalid2( "Invalid MALLOC arena detected at line %d in %s\n",
- lineno, fname))
- goto fn_exit;
- }
-
- nsize = a;
- if (nsize & TR_ALIGN_MASK)
- nsize += (TR_ALIGN_BYTES - (nsize & TR_ALIGN_MASK));
- if ((allocated + nsize > TRMaxMemAllow) && TRMaxMemAllow) {
- /* Return a null when memory would be exhausted */
- /* This is only called when additional debugging is enabled,
- * so the fact that this does not go through the regular error
- * message system is not a problem. */
- MPL_error_printf("Exceeded allowed memory!\n");
- goto fn_exit;
- }
-
- new = (char *)malloc(nsize + sizeof(TrSPACE) + sizeof(unsigned long));
- if (!new)
- goto fn_exit;
-
- if(TRSetBytes)
- memset(new, TRDefaultByte, nsize + sizeof(TrSPACE) + sizeof(unsigned long));
-
- /* Cast to (void*) to avoid false warnings about alignment issues */
- head = (TRSPACE *) (void *)new;
- new += sizeof(TrSPACE);
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- goto fn_exit;
- }
- if (TRhead[1]) {
- MPL_VG_MAKE_MEM_DEFINED(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
- TRhead[1]->prev = head;
- MPL_VG_MAKE_MEM_NOACCESS(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
- }
- head->next = TRhead[1];
- TRhead[1] = head;
- head->prev = 0;
- head->size = nsize;
- head->id = TRid;
- head->lineno = lineno;
- if ((l = (int) strlen(fname)) > TR_FNAME_LEN - 1)
- fname += (l - (TR_FNAME_LEN - 1));
- MPL_strncpy(head->fname, fname, TR_FNAME_LEN);
- head->fname[TR_FNAME_LEN - 1] = 0;
- head->cookie = COOKIE_VALUE;
- /* Cast to (void*) to avoid false warning about alignment */
- nend = (unsigned long *) (void *) (new + nsize);
- nend[0] = COOKIE_VALUE;
-
- allocated += nsize;
- if (allocated > TRMaxMem) {
- TRMaxMem = allocated;
- TRMaxMemId = TRid;
- }
- frags++;
-
- if (TRlevel & TR_MALLOC) {
- /* Note that %08p (what we'd like to use) isn't accepted by
- * all compilers */
- MPL_error_printf("[%d] Allocating %ld(%ld) bytes at %8p in %s[%d]\n",
- world_rank, (long)a, (long)nsize, new, fname, lineno);
- }
-
- /* Warn the user about tracing overhead if the total memory overhead for
- * tracing is larger than the threshold, TRMaxOverhead. */
- TRCurOverhead += sizeof(TrSPACE);
- if ((TRCurOverhead > TRMaxOverhead) && TRMaxOverhead) {
- MPL_error_printf("[%d] %.1lf MB was used for memory usage tracing!\n",
- world_rank, (double)TRCurOverhead / 1024 / 1024);
- TRMaxOverhead = TRMaxOverhead * 2;
- }
-
- /* Without these macros valgrind actually catches far fewer errors when
- * using --enable-g=mem. Note that it would be nice to use
- * MPL_VG_MALLOCLIKE_BLOCK and friends, but they don't work when the
- * underlying source of the memory is malloc/free. */
- MPL_VG_MAKE_MEM_UNDEFINED(new, nsize);
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(TrSPACE));
- MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(unsigned long));
- fn_exit:
- return (void *) new;
-}
-
-/*+C
- MPL_trfree - Free with tracing
-
-Input Parameters:
-+ a - pointer to a block allocated with trmalloc
-. line - line in file where called
-- file - Name of file where called
- +*/
-void MPL_trfree(void *a_ptr, int line, const char file[])
-{
- TRSPACE *head;
- unsigned long *nend;
- size_t nset;
- int l;
- char hexstring[MAX_ADDRESS_CHARS];
-
-/* Don't try to handle empty blocks */
- if (!a_ptr)
- return;
-
- if (TRdebugLevel > 0) {
- if (MPL_trvalid2("Invalid MALLOC arena detected by FREE at line %d in %s\n", line, file ))
- return;
- }
-
- /* Alignment guaranteed by the way a_ptr was allocated. Use
- (void *) cast to suppress false warning about alignment issues */
- head = (TRSPACE *) (void *) ( ((char *)a_ptr) - sizeof(TrSPACE) );
-
- /* We need to mark the memory as defined before performing our own error
- * checks or valgrind will flag the trfree function as erroneous. The real
- * free() at the end of this function will mark the whole block as NOACCESS
- * again. See the corresponding block in the trmalloc function for more
- * info. */
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(TrSPACE));
-
- if (head->cookie != COOKIE_VALUE) {
- /* Damaged header */
- /* Note that %08p (what we'd like to use) isn't accepted by
- * all compilers */
- addrToHex( a_ptr, hexstring );
- MPL_error_printf("[%d] Block at address %s is corrupted; cannot free;\n"
- "may be block not allocated with MPL_trmalloc or MALLOC\n"
- "called in %s at line %d\n", world_rank, hexstring, file, line);
- return;
- }
- /* Cast to (void*) to avoid false warning about alignment */
- nend = (unsigned long *) (void *) ((char *)a_ptr + head->size);
-/* Check that nend is properly aligned */
- if ((sizeof(long) == 4 && ((long) nend & 0x3) != 0) ||
- (sizeof(long) == 8 && ((long) nend & 0x7) != 0)) {
- addrToHex( a_ptr, hexstring );
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (invalid address or header)\n"
- "called in %s at line %d\n", world_rank, hexstring, file, line);
- return;
- }
-
- MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
- if (*nend != COOKIE_VALUE) {
- if (*nend == ALREADY_FREED) {
- addrToHex(a_ptr, hexstring);
- if (TRidSet) {
- MPL_error_printf
- ("[%d] Block [id=%d(%lu)] at address %s was already freed\n", world_rank,
- head->id, (unsigned long)head->size, hexstring);
- }
- else {
- MPL_error_printf("[%d] Block at address %s was already freed\n",
- world_rank, hexstring);
- }
- head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- head->freed_fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- MPL_error_printf("[%d] Block freed in %s[%d]\n",
- world_rank, head->freed_fname, head->freed_lineno);
- MPL_error_printf("[%d] Block allocated at %s[%d]\n",
- world_rank, head->fname, head->lineno);
- return;
- }
- else {
- /* Damaged tail */
- addrToHex(a_ptr, hexstring);
- if (TRidSet) {
- MPL_error_printf
- ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
- world_rank, head->id, (unsigned long)head->size, hexstring);
- }
- else {
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (probably write past end)\n",
- world_rank, hexstring);
- }
- head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- MPL_error_printf("[%d] Block being freed allocated in %s[%d]\n",
- world_rank, head->fname, head->lineno);
- MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
- world_rank, (long)COOKIE_VALUE, *nend );
- }
- }
-/* Mark the location freed */
- *nend = ALREADY_FREED;
- head->freed_lineno = line;
- if ((l = (int) strlen(file)) > TR_FNAME_LEN - 1)
- file += (l - (TR_FNAME_LEN - 1));
- MPL_strncpy(head->freed_fname, file, TR_FNAME_LEN);
-
- allocated -= head->size;
- frags--;
- if (head->prev) {
- MPL_VG_MAKE_MEM_DEFINED(&head->prev->next, sizeof(head->prev->next));
- head->prev->next = head->next;
- MPL_VG_MAKE_MEM_NOACCESS(&head->prev->next, sizeof(head->prev->next));
- }
- else {
- TRhead[1] = head->next;
- }
-
- if (head->next) {
- MPL_VG_MAKE_MEM_DEFINED(&head->next->prev, sizeof(head->next->prev));
- head->next->prev = head->prev;
- MPL_VG_MAKE_MEM_NOACCESS(&head->next->prev, sizeof(head->next->prev));
- }
-
- if (TRlevel & TR_FREE) {
- addrToHex(a_ptr, hexstring);
- MPL_error_printf("[%d] Freeing %lu bytes at %s in %s[%d]\n",
- world_rank, (unsigned long)head->size, hexstring,
- file, line);
- }
-
- TRCurOverhead -= sizeof(TrSPACE);
-
- /*
- * Now, scrub the data (except possibly the first few ints) to
- * help catch access to already freed data
- */
- /* FIXME why do we skip the first few ints? [goodell@] */
- /* Answer lost in time. Probably because in some case, the
- first few bytes provided useful information in tracking down
- a problem. */
- if (head->size > 2*sizeof(int)) {
- /* Now that nset is size_t, it might be defined as unsigned,
- so we can't compare nset - 2*sizeof(int) against zero */
- nset = head->size - 2 * sizeof(int);
- /* If an upper layer (like the handle allocation code) ever used the
- * MPL_VG_MAKE_MEM_NOACCESS macro on part/all of the data we gave
- * them then our memset will elicit "invalid write" errors from
- * valgrind. Mark it as accessible but undefined here to prevent this. */
- MPL_VG_MAKE_MEM_UNDEFINED((char *)a_ptr + 2 * sizeof(int), nset);
- if(TRSetBytes)
- memset((char *)a_ptr + 2 * sizeof(int), TRFreedByte, nset);
- }
- free(head);
-}
-
-/*+C
- MPL_trvalid - test the allocated blocks for validity. This can be used to
- check for memory overwrites.
-
-Input Parameters:
-. str - string to write out only if an error is detected.
-
- Return value:
- The number of errors detected.
-
- Output Effect:
- Error messages are written to stdout. These have the form of either
-
-$ Block [id=%d(%d)] at address %lx is corrupted (probably write past end)
-$ Block allocated in <filename>[<linenumber>]
-
- if the sentinal at the end of the block has been corrupted, and
-
-$ Block at address %lx is corrupted
-
- if the sentinal at the begining of the block has been corrupted.
-
- The address is the actual address of the block. The id is the
- value of TRID.
-
- No output is generated if there are no problems detected.
-+*/
-int MPL_trvalid( const char str[] )
-{
- return MPL_trvalid2( str, -1, (const char *)0 );
-}
-
-int MPL_trvalid2(const char str[], int line, const char file[] )
-{
- TRSPACE *head;
- TRSPACE *next;
- char *a;
- unsigned long *nend;
- int errs = 0;
- char hexstring[MAX_ADDRESS_CHARS];
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- errs++;
- goto fn_exit;
- }
- head = TRhead[1];
- while (head) {
- /* mark defined before accessing head contents */
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
- if (head->cookie != COOKIE_VALUE) {
- if (!errs) {
- if (line > 0)
- MPL_error_printf(str, line, file);
- else
- MPL_error_printf( "%s\n", str );
- }
- errs++;
- addrToHex(head+1, hexstring);
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (invalid cookie in head)\n",
- world_rank, hexstring);
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
- /* Must stop because if head is invalid, then the data in the
- * head is probably also invalid, and using could lead to
- * SEGV or BUS */
- goto fn_exit;
- }
- /* Get the address of the first byte of the memory, which begins
- just after the end of the header. We must use the full header
- (TrSPACE) rather than the struct with the data (TRSPACE) because
- the full header is padded to ensure correct byte alignment with
- the data */
- a = (char *)( (TrSPACE *)head + 1 );
- /* Cast to (void*) to avoid false warning about alignment */
- nend = (unsigned long *) (void *)(a + head->size);
-
- /* mark defined before accessing nend contents */
- MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
-
- if (nend[0] != COOKIE_VALUE) {
- if (!errs) {
- if (line > 0)
- MPL_error_printf(str, line, file);
- else
- MPL_error_printf( "%s\n", str );
- }
- errs++;
- head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- addrToHex(a, hexstring);
- if (TRidSet) {
- MPL_error_printf
- ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
- world_rank, head->id, (unsigned long)head->size, hexstring);
- }
- else {
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (probably write past end)\n",
- world_rank, hexstring);
- }
- MPL_error_printf("[%d] Block allocated in %s[%d]\n",
- world_rank, head->fname, head->lineno);
- MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
- world_rank, (long)COOKIE_VALUE, *nend );
- }
-
- /* set both regions back to NOACCESS */
- next = head->next;
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
- MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(*nend));
- head = next;
- }
- fn_exit:
- return errs;
-}
-
-/*+C
- MPL_trspace - Return space statistics
-
- Output parameters:
-. space - number of bytes currently allocated
-. frags - number of blocks currently allocated
- +*/
-void MPL_trspace(size_t *space, size_t *fr)
-{
- /* We use ints because systems without prototypes will usually
- * allow calls with ints instead of longs, leading to unexpected
- * behavior */
- *space = allocated;
- *fr = frags;
-}
-
-/*+C
- MPL_trdump - Dump the allocated memory blocks to a file
-
-Input Parameters:
-+ fp - file pointer. If fp is NULL, stderr is assumed.
-- minid - Only print allocated memory blocks whose id is at least 'minid'
-
- +*/
-void MPL_trdump(FILE * fp, int minid)
-{
- TRSPACE *head;
-#ifdef VALGRIND_MAKE_MEM_NOACCESS
- TRSPACE *old_head;
-#endif
- char hexstring[MAX_ADDRESS_CHARS];
-
- if (fp == 0)
- fp = stderr;
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
- head = TRhead[1];
- while (head) {
- /* these "rank and size" strings are supposed to be small: enough to
- * hold an mpi rank, a size, and a hexadecimal address. */
-#define ADDRESS_STR_BUFLEN 256
-
- char address_str[ADDRESS_STR_BUFLEN];
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
- if (head->id >= minid) {
- addrToHex((char *) head + sizeof(TrSPACE), hexstring);
- address_str[ADDRESS_STR_BUFLEN-1] = 0;
- snprintf(address_str, ADDRESS_STR_BUFLEN-1, "[%d] %lu at [%s],", world_rank,
- (unsigned long)head->size, hexstring);
- head->fname[TR_FNAME_LEN - 1] = 0; /* Be extra careful */
- if (TRidSet) {
- /* For head->id >= 0, we can add code to map the id to
- * the name of a package, rather than using a raw number */
- fprintf(fp, "%s id = %d %s[%d]\n", address_str, head->id, head->fname, head->lineno);
- }
- else {
- fprintf(fp, "%s %s[%d]\n", address_str, head->fname, head->lineno);
- }
- }
-#ifdef VALGRIND_MAKE_MEM_NOACCESS
- old_head = head;
-#endif
- head = head->next;
- MPL_VG_MAKE_MEM_NOACCESS(old_head, sizeof(*old_head));
- }
-/*
- msg_fprintf(fp, "# [%d] The maximum space allocated was %ld bytes [%ld]\n",
- world_rank, TRMaxMem, TRMaxMemId);
- */
-}
-
-/* Configure will set HAVE_SEARCH for these systems. We assume that
- the system does NOT have search.h unless otherwise noted.
- The otherwise noted lets the non-configure approach work on our
- two major systems */
-#if defined(HAVE_SEARCH_H)
-
-/* The following routine uses the tsearch routines to summarize the
- memory heap by id */
-
-#include <search.h>
-typedef struct TRINFO {
- int id, size, lineno;
- char *fname;
-} TRINFO;
-
-static int IntCompare(TRINFO * a, TRINFO * b)
-{
- return a->id - b->id;
-}
-
-static volatile FILE *TRFP = 0;
-static void PrintSum(TRINFO ** a, VISIT order, int level)
-{
- if (order == postorder || order == leaf)
- fprintf(TRFP, "[%d]%s[%d] has %d\n", (*a)->id, (*a)->fname, (*a)->lineno, (*a)->size);
-}
-
-/*+C
- MPL_trSummary - Summarize the allocate memory blocks by id
-
-Input Parameters:
-+ fp - file pointer. If fp is NULL, stderr is assumed.
-- minid - Only print allocated memory blocks whose id is at least 'minid'
-
- Note:
- This routine is the same as MPL_trDump on those systems that do not include
- /usr/include/search.h .
- +*/
-void MPL_trSummary(FILE * fp, int minid)
-{
- TRSPACE *head;
- TRINFO *root, *key, **fnd;
- TRINFO nspace[1000];
-
- if (fp == 0)
- fp = stderr;
- root = 0;
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
- head = TRhead[1];
- key = nspace;
- while (head) {
- if (head->id >= minid) {
- key->id = head->id;
- key->size = 0;
- key->lineno = head->lineno;
- key->fname = head->fname;
-#if defined(USE_TSEARCH_WITH_CHARP)
- fnd = (TRINFO **) tsearch((char *) key, (char **) &root, IntCompare);
-#else
- fnd = (TRINFO **) tsearch((void *) key, (void **) &root, (int (*)()) IntCompare);
-#endif
- if (*fnd == key) {
- key->size = 0;
- key++;
- }
- (*fnd)->size += head->size;
- }
- head = head->next;
- }
-
- /* Print the data */
- TRFP = fp;
- twalk((char *) root, (void (*)()) PrintSum);
- /*
- * msg_fprintf(fp, "# [%d] The maximum space allocated was %d bytes [%d]\n",
- * world_rank, TRMaxMem, TRMaxMemId);
- */
-}
-#else
-void MPL_trSummary(FILE * fp, int minid)
-{
- if (fp == 0)
- fp = stderr;
- fprintf(fp, "# [%d] The maximum space allocated was %lu bytes [%d]\n",
- world_rank, (unsigned long)TRMaxMem, TRMaxMemId);
-}
-#endif
-
-/*+
- MPL_trid - set an "id" field to be used with each fragment
- +*/
-void MPL_trid(int id)
-{
- TRid = id;
- TRidSet = 1; /* Recall whether we ever use this feature to
- * help clean up output */
-}
-
-/*+C
- MPL_trlevel - Set the level of output to be used by the tracing routines
-
-Input Parameters:
-. level = 0 - notracing
-. level = 1 - trace mallocs
-. level = 2 - trace frees
-
- Note:
- You can add levels together to get combined tracing.
- +*/
-void MPL_trlevel(int level)
-{
- TRlevel = level;
-}
-
-
-/*+C
- MPL_trDebugLevel - set the level of debugging for the space management
- routines
-
-Input Parameters:
-. level - level of debugging. Currently, either 0 (no checking) or 1
- (use MPL_trvalid at each MPL_trmalloc or MPL_trfree).
-+*/
-void MPL_trDebugLevel(int level)
-{
- TRdebugLevel = level;
-}
-
-/*+C
- MPL_trcalloc - Calloc with tracing
-
-Input Parameters:
-. nelem - number of elements to allocate
-. elsize - size of each element
-. lineno - line number where used. Use __LINE__ for this
-. fname - file name where used. Use __FILE__ for this
-
- Returns:
- Double aligned pointer to requested storage, or null if not
- available.
- +*/
-void *MPL_trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
-{
- void *p;
-
- p = MPL_trmalloc(nelem * elsize, lineno, fname);
- if (p) {
- memset(p, 0, nelem * elsize);
- }
- return p;
-}
-
-/*+C
- MPL_trrealloc - Realloc with tracing
-
-Input Parameters:
-. p - pointer to old storage
-. size - number of bytes to allocate
-. lineno - line number where used. Use __LINE__ for this
-. fname - file name where used. Use __FILE__ for this
-
- Returns:
- Double aligned pointer to requested storage, or null if not
- available. This implementation ALWAYS allocates new space and copies
- the contents into the new space.
- +*/
-void *MPL_trrealloc(void *p, size_t size, int lineno, const char fname[])
-{
- void *pnew;
- size_t nsize;
- TRSPACE *head = 0;
- char hexstring[MAX_ADDRESS_CHARS];
-
- /* We should really use the size of the old block... */
- if (p) {
- head = (TRSPACE *) (void*) ((char *)p - sizeof(TrSPACE));
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head)); /* mark defined before accessing contents */
- if (head->cookie != COOKIE_VALUE) {
- /* Damaged header */
- addrToHex(p, hexstring);
- MPL_error_printf("[%d] Block at address %s is corrupted; cannot realloc;\n"
- "may be block not allocated with MPL_trmalloc or MALLOC\n",
- world_rank, hexstring);
- return 0;
- }
- }
-
- /* Per the POSIX Standard, realloc() with zero size has two possible
- * results. In both cases the given pointer (p) is freed, and the function
- * will either return NULL or a unique value that can safely be passed to
- * free(). We return NULL here because that is more likely to catch
- * programming errors at higher levels. */
- if (!size) {
- MPL_trfree(p, lineno, fname);
- return NULL;
- }
-
- pnew = MPL_trmalloc(size, lineno, fname);
-
- if (p && pnew) {
- nsize = size;
- if (head->size < nsize)
- nsize = head->size;
- memcpy(pnew, p, nsize);
- MPL_trfree(p, lineno, fname);
- }
-
- /* Re-mark the head as NOACCESS before returning. */
- /* FIXME: Note head is no longer valid after MPL_trfree above */
- if (head) {
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
- }
-
- /* If the MPL_trmalloc failed above pnew will be NULL, just like a
- * regular realloc failure. */
- return pnew;
-}
-
-/*+C
- MPL_trstrdup - Strdup with tracing
-
-Input Parameters:
-. str - string to duplicate
-. lineno - line number where used. Use __LINE__ for this
-. fname - file name where used. Use __FILE__ for this
-
- Returns:
- Pointer to copy of the input string.
- +*/
-void *MPL_trstrdup(const char *str, int lineno, const char fname[])
-{
- void *p;
- size_t len = strlen(str) + 1;
-
- p = MPL_trmalloc(len, lineno, fname);
- if (p) {
- memcpy(p, str, len);
- }
- return p;
-}
-
-#define TR_MAX_DUMP 100
-/*
- The following routine attempts to give useful information about the
- memory usage when an "out-of-memory" error is encountered. The rules are:
- If there are less than TR_MAX_DUMP blocks, output those.
- Otherwise, try to find multiple instances of the same routine/line #, and
- print a summary by number:
- file line number-of-blocks total-number-of-blocks
-
- We have to do a sort-in-place for this
- */
-
-/*
- Sort by file/line number. Do this without calling a system routine or
- allocating ANY space (space is being optimized here).
-
- We do this by first recursively sorting halves of the list and then
- merging them.
- */
-/* Forward refs for these local (hence static) routines */
-static TRSPACE *MPL_trImerge(TRSPACE *, TRSPACE *);
-static TRSPACE *MPL_trIsort(TRSPACE *, int);
-static void MPL_trSortBlocks(void);
-
-/* Merge two lists, returning the head of the merged list */
-static TRSPACE *MPL_trImerge(TRSPACE * l1, TRSPACE * l2)
-{
- TRSPACE *head = 0, *tail = 0;
- int sign;
- while (l1 && l2) {
- sign = strncmp(l1->fname, l2->fname, TR_FNAME_LEN - 1);
- if (sign > 0 || (sign == 0 && l1->lineno >= l2->lineno)) {
- if (head)
- tail->next = l1;
- else
- head = tail = l1;
- tail = l1;
- l1 = l1->next;
- }
- else {
- if (head)
- tail->next = l2;
- else
- head = tail = l2;
- tail = l2;
- l2 = l2->next;
- }
- }
- /* Add the remaining elements to the end */
- if (l1)
- tail->next = l1;
- if (l2)
- tail->next = l2;
-
- return head;
-}
-
-/* Sort head with n elements, returning the head */
-/* assumes that the MEMALLOC critical section is currently held */
-static TRSPACE *MPL_trIsort(TRSPACE * head, int n)
-{
- TRSPACE *p, *l1, *l2;
- int m, i;
-
- if (n <= 1)
- return head;
-
- /* This guarentees that m, n are both > 0 */
- m = n / 2;
- p = head;
- for (i = 0; i < m - 1; i++)
- p = p->next;
- /* p now points to the END of the first list */
- l2 = p->next;
- p->next = 0;
- l1 = MPL_trIsort(head, m);
- l2 = MPL_trIsort(l2, n - m);
- return MPL_trImerge(l1, l2);
-}
-
-/* assumes that the MEMALLOC critical section is currently held */
-static void MPL_trSortBlocks(void)
-{
- TRSPACE *head;
- int cnt;
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
- head = TRhead[1];
- cnt = 0;
- while (head) {
- cnt++;
- head = head->next;
- }
- TRhead[1] = MPL_trIsort(TRhead[1], cnt);
-}
-
-/* Takes sorted input and dumps as an aggregate */
-void MPL_trdumpGrouped(FILE * fp, int minid)
-{
- TRSPACE *head, *cur;
- int nblocks, nbytes;
-
- if (fp == 0)
- fp = stderr;
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
-
- MPL_trSortBlocks();
- head = TRhead[1];
- cur = 0;
- while (head) {
- cur = head->next;
- if (head->id >= minid) {
- nblocks = 1;
- nbytes = (int) head->size;
- while (cur &&
- strncmp(cur->fname, head->fname, TR_FNAME_LEN - 1) == 0 &&
- cur->lineno == head->lineno) {
- nblocks++;
- nbytes += (int) cur->size;
- cur = cur->next;
- }
- fprintf(fp,
- "[%d] File %13s line %5d: %d bytes in %d allocation%c\n",
- world_rank, head->fname, head->lineno, nbytes, nblocks,
- (nblocks > 1) ? 's' : ' ');
- }
- head = cur;
- }
- fflush(fp);
-}
-
-void MPL_TrSetMaxMem(size_t size)
-{
- TRMaxMemAllow = size;
-}
-
-static void addrToHex(void *addr, char string[MAX_ADDRESS_CHARS])
-{
- int i;
- static char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
- };
- /* The following construction is used to keep compilers from issuing
- * a warning message about casting a pointer to an integer type */
- intptr_t iaddr = (intptr_t) ((char *) addr - (char *) 0);
-
- /* Initial location */
- i = sizeof(void *) * 2;
- string[i + 2] = 0;
- while (i) {
- string[i + 1] = hex[iaddr & 0xF];
- iaddr >>= 4;
- i--;
- }
- string[0] = '0';
- string[1] = 'x';
-}
diff --git a/src/mpl/src/msg/Makefile.mk b/src/mpl/src/msg/Makefile.mk
new file mode 100644
index 0000000..129fb7a
--- /dev/null
+++ b/src/mpl/src/msg/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/msg/mpl_msg.c
diff --git a/src/pm/hydra/mpl/src/mplmsg.c b/src/mpl/src/msg/mpl_msg.c
similarity index 100%
rename from src/pm/hydra/mpl/src/mplmsg.c
rename to src/mpl/src/msg/mpl_msg.c
diff --git a/src/mpl/src/shm/Makefile.mk b/src/mpl/src/shm/Makefile.mk
new file mode 100644
index 0000000..a0c1bf0
--- /dev/null
+++ b/src/mpl/src/shm/Makefile.mk
@@ -0,0 +1,12 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/shm/mpl_shm.c \
+ src/shm/mpl_shm_sysv.c \
+ src/shm/mpl_shm_mmap.c \
+ src/shm/mpl_shm_win.c
diff --git a/src/mpl/src/shm/mpl_shm.c b/src/mpl/src/shm/mpl_shm.c
new file mode 100644
index 0000000..0b18921
--- /dev/null
+++ b/src/mpl/src/shm/mpl_shm.c
@@ -0,0 +1,112 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+/* Serialize a handle. A serialized handle is a string of
+ * characters that can be persisted by the caller. The serialized
+ * handle can be used to create another ref to the shared mem seg
+ * by deserializing it.
+ * str : A string of chars of len, str_len.
+ * If the function succeeds the serialized handle is copied
+ * into this user buffer
+ * hnd : Handle to shared memory
+ */
+int MPL_shm_hnd_serialize(char *str, MPL_shm_hnd_t hnd, int str_len)
+{
+ int rc = -1;
+ rc = MPLI_shm_ghnd_get_by_val(hnd, str, str_len);
+ return rc;
+}
+
+/* Deserialize a handle.
+ * str_hnd : A null-terminated string of len str_hnd_len that
+ * contains the serialized handle.
+ * hnd : If the call succeeds the user gets back a handle,hnd, to
+ * shared mem - deserialized from strhnd. This handle
+ * will refer to the shm seg referred by the serialized
+ * handle.
+ */
+int MPL_shm_hnd_deserialize(MPL_shm_hnd_t hnd, const char *str_hnd, size_t str_hnd_len)
+{
+ int rc = -1;
+ MPLI_shm_hnd_reset_val(hnd);
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%s", str_hnd);
+ rc = MPL_shm_seg_open(hnd, 0);
+ return rc;
+}
+
+/* Get a serialized handle by reference.
+ * Rationale: The user might only want to read the serialized view
+ * of the handle & hence not want to allocate a buffer for the ser view
+ * of the handle.
+ * str_ptr : Pointer to a string of chars to hold the serialized handle
+ * If the function succeeds, the pointer points to a
+ * serialized view of the handle.
+ * hnd : Handle to shm seg which has to be serialized
+ */
+
+int MPL_shm_hnd_get_serialized_by_ref(MPL_shm_hnd_t hnd, char **str_ptr)
+{
+ int mpi_errno = 0;
+ *str_ptr = (char *)MPLI_shm_ghnd_get_by_ref(hnd);
+ return mpi_errno;
+}
+
+/* Deserialize a handle by reference.
+ * Rationale : The user already has a serialized view of the handle.
+ * The user does not want to manage the view buffer any more
+ * & also needs to deserialize from the buffer.
+ * ser_hnd_ptr : Pointer to a serialized view of the handle. The user
+ * no longer needs to take care of this buffer.
+ * hnd : If the function succeeds this points to the deserialized
+ * handle.
+ */
+int MPL_shm_hnd_deserialize_by_ref(MPL_shm_hnd_t hnd, char **ser_hnd_ptr)
+{
+ int mpi_errno = 0;
+
+ MPLI_shm_hnd_reset_val(hnd);
+ MPLI_shm_ghnd_set_by_ref(hnd, *ser_hnd_ptr);
+
+ mpi_errno = MPL_shm_seg_open(hnd, 0);
+
+ return mpi_errno;
+}
+
+/* Initialize a shared memory handle
+ * hnd_ptr : A pointer to the shared memory handle
+ */
+
+int MPL_shm_hnd_init(MPL_shm_hnd_t *hnd_ptr)
+{
+ int rc = -1;
+ rc = MPLI_shm_hnd_alloc(hnd_ptr);
+ MPLI_shm_hnd_reset_val(*hnd_ptr);
+ return rc;
+}
+
+/* Finalize a shared memory handle.
+ * hnd_ptr : A pointer to the shm handle to be finalized.
+ * Any handle that is init has to be finalized.
+ */
+int MPL_shm_hnd_finalize(MPL_shm_hnd_t *hnd_ptr)
+{
+ int mpi_errno = 0;
+
+ /* A finalize can/should be called on an invalid handle
+ * Don't assert if we fail here ...
+ */
+ MPLI_shm_hnd_close(*hnd_ptr);
+ MPLI_shm_hnd_free(*hnd_ptr);
+
+ *hnd_ptr = MPL_SHM_HND_INVALID;
+
+ return mpi_errno;
+}
+
diff --git a/src/mpl/src/shm/mpl_shm_mmap.c b/src/mpl/src/shm/mpl_shm_mmap.c
new file mode 100644
index 0000000..84b787f
--- /dev/null
+++ b/src/mpl/src/shm/mpl_shm_mmap.c
@@ -0,0 +1,181 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_MMAP_SHM
+
+#include <fcntl.h>
+#include <sys/mman.h>
+#if defined (MPL_HAVE_MKSTEMP) && defined (MPL_NEEDS_MKSTEMP_DECL)
+extern int mkstemp(char *template);
+#endif
+
+inline int MPLI_shm_lhnd_close(MPL_shm_hnd_t hnd)
+{
+ MPLI_shm_lhnd_t lhnd = MPLI_SHM_LHND_INVALID;
+ lhnd = MPLI_shm_lhnd_get(hnd);
+ if (lhnd != MPLI_SHM_LHND_INVALID) {
+ if (close(lhnd) == 0) {
+ MPLI_shm_lhnd_set(hnd, MPLI_SHM_LHND_INIT_VAL);
+ } else {
+ /* close() failed */
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+/* FIXME: Pass (void **)shm_addr_ptr instead of (char **) shm_addr_ptr
+ * since a util func should be generic
+ * Currently not passing (void **) to reduce warning in nemesis
+ * code which passes (char **) ptrs to be attached to a seg
+ */
+
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ MPLI_shm_lhnd_t lhnd = -1, rc = -1;
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ char dev_shm_fname[] = "/dev/shm/mpich_shar_tmpXXXXXX";
+ char tmp_fname[] = "/tmp/mpich_shar_tmpXXXXXX";
+ char *chosen_fname = NULL;
+
+ chosen_fname = dev_shm_fname;
+ lhnd = mkstemp(chosen_fname);
+ if(lhnd == -1){
+ chosen_fname = tmp_fname;
+ lhnd = mkstemp(chosen_fname);
+ }
+
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ rc = (MPLI_shm_lhnd_t)lseek(lhnd, seg_sz - 1, SEEK_SET);
+ do{
+ rc = (int) write(lhnd, "", 1);
+ }while((rc == -1) && (errno == EINTR));
+
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%s", chosen_fname);
+ }
+ else{
+ /* Open an existing shared memory seg */
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ lhnd = open(MPLI_shm_ghnd_get_by_ref(hnd), O_RDWR);
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ void *buf_ptr = NULL;
+ buf_ptr = mmap(NULL, seg_sz, PROT_READ | PROT_WRITE,
+ MAP_SHARED, MPLI_shm_lhnd_get(hnd), 0);
+ *shm_addr_ptr = (char*)buf_ptr;
+ }
+
+ /* FIXME: Close local handle only when closing the shm handle */
+ if(MPLI_shm_lhnd_is_valid(hnd)){
+ rc = MPLI_shm_lhnd_close(hnd);
+ }
+ return rc;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = munmap(*shm_addr_ptr, seg_sz);
+ *shm_addr_ptr = NULL;
+
+ return rc;
+}
+
+/* Remove an existing SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_remove
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ int rc = -1;
+
+ rc = unlink(MPLI_shm_ghnd_get_by_ref(hnd));
+
+ return rc;
+}
+
+#endif /* MPL_USE_MMAP_SHM */
diff --git a/src/mpl/src/shm/mpl_shm_sysv.c b/src/mpl/src/shm/mpl_shm_sysv.c
new file mode 100644
index 0000000..2213416
--- /dev/null
+++ b/src/mpl/src/shm/mpl_shm_sysv.c
@@ -0,0 +1,154 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_SYSV_SHM
+
+#include <sys/stat.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ int rc = -1;
+ int lhnd = -1;
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ lhnd = shmget(IPC_PRIVATE, seg_sz, IPC_CREAT | S_IRWXU);
+ MPL_shm_lhnd_set(hnd, lhnd);
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%d", lhnd);
+ }
+ else{
+ /* Open an existing shared memory seg */
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ lhnd = atoi(MPLI_shm_ghnd_get_by_ref(hnd));
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ /* Attach to shared mem seg */
+ *shm_addr_ptr = shmat(MPLI_shm_lhnd_get(hnd), NULL, 0x0);
+ }
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment
+ * hnd : Handle to the shm segment
+ * shm_addr_ptr : Pointer to the shm address to detach
+ * seg_sz : Size of shm segment
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = shmdt(*shm_addr_ptr);
+ *shm_addr_ptr = NULL;
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Remove a shared memory segment
+ * hnd : Handle to the shared memory segment to be removed
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_remove
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ struct shmid_ds ds;
+ int rc = -1;
+
+ rc = shmctl(MPL_shm_lhnd_get(hnd), IPC_RMID, &ds);
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+#endif /* MPL_USE_SYSV_SHM */
diff --git a/src/mpl/src/shm/mpl_shm_win.c b/src/mpl/src/shm/mpl_shm_win.c
new file mode 100644
index 0000000..e41556e
--- /dev/null
+++ b/src/mpl/src/shm/mpl_shm_win.c
@@ -0,0 +1,139 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_NT_SHM
+
+#include<winsock2.h>
+#include<windows.h>
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ HANDLE lhnd = INVALID_HANDLE_VALUE;
+ int rc = -1;
+ ULARGE_INTEGER seg_sz_large;
+ seg_sz_large.QuadPart = seg_sz;
+
+ if(!MPLI_shm_ghnd_is_valid(hnd)){
+ rc = MPLI_shm_ghnd_set_uniq(hnd);
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ lhnd = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
+ PAGE_READWRITE, seg_sz_large.HighPart, seg_sz_large.LowPart,
+ MPLI_shm_ghnd_get_by_ref(hnd));
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ else{
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ /* Strangely OpenFileMapping() returns NULL on error! */
+ lhnd = OpenFileMapping(FILE_MAP_WRITE, FALSE,
+ MPLI_shm_ghnd_get_by_ref(hnd));
+
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ *shm_addr_ptr = (char *)MapViewOfFile(MPLI_shm_lhnd_get(hnd),
+ FILE_MAP_WRITE, 0, offset, 0);
+ }
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_detach(
+ MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = UnmapViewOfFile(*shm_addr_ptr);
+ *shm_addr_ptr = NULL;
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#endif /* MPL_USE_NT_SHM */
diff --git a/src/mpl/src/sock/Makefile.mk b/src/mpl/src/sock/Makefile.mk
new file mode 100644
index 0000000..3e5d340
--- /dev/null
+++ b/src/mpl/src/sock/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/sock/mpl_sock.c
diff --git a/src/pm/hydra/mpl/src/mplsock.c b/src/mpl/src/sock/mpl_sock.c
similarity index 100%
rename from src/pm/hydra/mpl/src/mplsock.c
rename to src/mpl/src/sock/mpl_sock.c
diff --git a/src/mpl/src/str/Makefile.mk b/src/mpl/src/str/Makefile.mk
new file mode 100644
index 0000000..48492b1
--- /dev/null
+++ b/src/mpl/src/str/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/str/mpl_str.c src/str/mpl_argstr.c
diff --git a/src/mpl/src/str/mpl_argstr.c b/src/mpl/src/str/mpl_argstr.c
new file mode 100644
index 0000000..96366fa
--- /dev/null
+++ b/src/mpl/src/str/mpl_argstr.c
@@ -0,0 +1,880 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
+ *
+ * Copyright (C) 1997 University of Chicago.
+ * See COPYRIGHT notice in top-level directory.
+ */
+
+#include "mpl.h"
+
+#ifdef MPL_HAVE_MATH_H
+#include <math.h>
+#endif
+/* ctype is needed for isspace and isascii (isspace is only defined for
+ values on which isascii returns true). */
+#include <ctype.h>
+
+static int encode_buffer(char *dest, int dest_length, const char *src,
+ int src_length, int *num_encoded)
+{
+ int num_used;
+ int n = 0;
+ if (src_length == 0)
+ {
+ if (dest_length > 2)
+ {
+ *dest = MPL_STR_QUOTE_CHAR;
+ dest++;
+ *dest = MPL_STR_QUOTE_CHAR;
+ dest++;
+ *dest = '\0';
+ *num_encoded = 0;
+ return MPL_STR_SUCCESS;
+ }
+ else
+ {
+ return MPL_STR_TRUNCATED;
+ }
+ }
+ while (src_length && dest_length)
+ {
+ num_used = MPL_snprintf(dest, dest_length, "%02X",
+ (unsigned char)*src);
+ if (num_used < 0)
+ {
+ *num_encoded = n;
+ return MPL_STR_TRUNCATED;
+ }
+ /*MPL_DBG_MSG_FMT(STRING,VERBOSE,(MPL_DBG_FDEST," %c = %c%c",
+ ch, dest[0], dest[1]));*/
+ dest += num_used;
+ dest_length -= num_used;
+ src++;
+ n++;
+ src_length--;
+ }
+ *num_encoded = n;
+ return src_length ? MPL_STR_TRUNCATED : MPL_STR_SUCCESS;
+}
+
+static int decode_buffer(const char *str, char *dest, int length,
+ int *num_decoded)
+{
+ char hex[3];
+ int value;
+ int n = 0;
+
+ if (str == NULL || dest == NULL || num_decoded == NULL)
+ return MPL_STR_FAIL;
+ if (length < 1)
+ {
+ *num_decoded = 0;
+ if (*str == '\0')
+ return MPL_STR_SUCCESS;
+ return MPL_STR_TRUNCATED;
+ }
+ if (*str == MPL_STR_QUOTE_CHAR)
+ str++;
+ hex[2] = '\0';
+ while (*str != '\0' &&
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_QUOTE_CHAR &&
+ length)
+ {
+ hex[0] = *str;
+ str++;
+ hex[1] = *str;
+ str++;
+ sscanf(hex, "%X", &value);
+ *dest = (char)value;
+ /*MPL_DBG_MSG_FMT(STRING,VERBOSE,(MPL_DBG_FDEST," %s = %c",
+ hex, *dest));*/
+ dest++;
+ n++;
+ length--;
+ }
+ *num_decoded = n;
+ if (length == 0)
+ {
+ if (*str != '\0' &&
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_QUOTE_CHAR)
+ return MPL_STR_TRUNCATED;
+ }
+ return MPL_STR_SUCCESS;
+}
+
+static const char * first_token(const char *str)
+{
+ if (str == NULL)
+ return NULL;
+ /* isspace is defined only if isascii is true */
+ while (/*isascii(*str) && isspace(*str)*/ *str == MPL_STR_SEPAR_CHAR)
+ str++;
+ if (*str == '\0')
+ return NULL;
+ return str;
+}
+
+static const char * next_token(const char *str)
+{
+ if (str == NULL)
+ return NULL;
+ str = first_token(str);
+ if (str == NULL)
+ return NULL;
+ if (*str == MPL_STR_QUOTE_CHAR)
+ {
+ /* move over string */
+ str++; /* move over the first quote */
+ if (*str == '\0')
+ return NULL;
+ while (*str != MPL_STR_QUOTE_CHAR)
+ {
+ /* move until the last quote, ignoring escaped quotes */
+ if (*str == MPL_STR_ESCAPE_CHAR)
+ {
+ str++;
+ if (*str == MPL_STR_QUOTE_CHAR)
+ str++;
+ }
+ else
+ {
+ str++;
+ }
+ if (*str == '\0')
+ return NULL;
+ }
+ str++; /* move over the last quote */
+ }
+ else
+ {
+ if (*str == MPL_STR_DELIM_CHAR)
+ {
+ /* move over the DELIM token */
+ str++;
+ }
+ else
+ {
+ /* move over literal */
+ while (/*(isascii(*str) &&
+ !isspace(*str)) &&*/
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_DELIM_CHAR &&
+ *str != '\0')
+ str++;
+ }
+ }
+ return first_token(str);
+}
+
+static int compare_token(const char *token, const char *str)
+{
+ if (token == NULL || str == NULL)
+ return -1;
+
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ /* compare quoted strings */
+ token++; /* move over the first quote */
+ /* compare characters until reaching the end of the string or the
+ end quote character */
+ for(;;)
+ {
+ if (*token == MPL_STR_ESCAPE_CHAR)
+ {
+ if (*(token+1) == MPL_STR_QUOTE_CHAR)
+ {
+ /* move over the escape character if the next character
+ is a quote character */
+ token++;
+ }
+ if (*token != *str)
+ break;
+ }
+ else
+ {
+ if (*token != *str || *token == MPL_STR_QUOTE_CHAR)
+ break;
+ }
+ if (*str == '\0')
+ break;
+ token++;
+ str++;
+ }
+ if (*str == '\0' && *token == MPL_STR_QUOTE_CHAR)
+ return 0;
+ if (*token == MPL_STR_QUOTE_CHAR)
+ return 1;
+ if (*str < *token)
+ return -1;
+ return 1;
+ }
+
+ /* compare DELIM token */
+ if (*token == MPL_STR_DELIM_CHAR)
+ {
+ if (*str == MPL_STR_DELIM_CHAR)
+ {
+ str++;
+ if (*str == '\0')
+ return 0;
+ return 1;
+ }
+ if (*token < *str)
+ return -1;
+ return 1;
+ }
+
+ /* compare literals */
+ while (*token == *str &&
+ *str != '\0' &&
+ *token != MPL_STR_DELIM_CHAR &&
+ (*token != MPL_STR_SEPAR_CHAR) )
+ {
+ token++;
+ str++;
+ }
+ if ( (*str == '\0') &&
+ (*token == MPL_STR_DELIM_CHAR ||
+ (*token == MPL_STR_SEPAR_CHAR) || *token == '\0') )
+ return 0;
+ if (*token == MPL_STR_DELIM_CHAR ||
+ (*token == MPL_STR_SEPAR_CHAR) || *token < *str)
+ return -1;
+ return 1;
+}
+
+
+static int token_copy(const char *token, char *str, int maxlen)
+{
+ /* check parameters */
+ if (token == NULL || str == NULL)
+ return MPL_STR_FAIL;
+
+ /* check special buffer lengths */
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+ if (maxlen == 1)
+ {
+ *str = '\0';
+ return (str[0] == '\0') ? MPL_STR_SUCCESS : MPL_STR_TRUNCATED;
+ }
+
+ /* cosy up to the token */
+ token = first_token(token);
+ if (token == NULL)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+
+ if (*token == MPL_STR_DELIM_CHAR)
+ {
+ /* copy the special deliminator token */
+ str[0] = MPL_STR_DELIM_CHAR;
+ str[1] = '\0';
+ return MPL_STR_SUCCESS;
+ }
+
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ /* quoted copy */
+ token++; /* move over the first quote */
+ do
+ {
+ if (*token == MPL_STR_ESCAPE_CHAR)
+ {
+ if (*(token+1) == MPL_STR_QUOTE_CHAR)
+ token++;
+ *str = *token;
+ }
+ else
+ {
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+ *str = *token;
+ }
+ str++;
+ token++;
+ maxlen--;
+ } while (maxlen);
+ /* we've run out of destination characters so back up and null
+ terminate the string */
+ str--;
+ *str = '\0';
+ return MPL_STR_TRUNCATED;
+ }
+
+ /* literal copy */
+ while (*token != MPL_STR_DELIM_CHAR &&
+ (*token != MPL_STR_SEPAR_CHAR) && *token != '\0' && maxlen)
+ {
+ *str = *token;
+ str++;
+ token++;
+ maxlen--;
+ }
+ if (maxlen)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+ str--;
+ *str = '\0';
+ return MPL_STR_TRUNCATED;
+}
+
+/*@ MPL_str_get_string_arg - Extract an option from a string with a
+ maximum length
+
+Input Parameters:
++ str - Source string
+. key - key
+- maxlen - Maximum total length of 'val'
+
+Output Parameters:
+. val - output string
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_string_arg(const char *str, const char *flag, char *val,
+ int maxlen)
+{
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+
+ /* line up with the first token */
+ str = first_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+
+ /* This loop will match the first instance of "flag = value" in the string. */
+ do
+ {
+ if (compare_token(str, flag) == 0)
+ {
+ str = next_token(str);
+ if (compare_token(str, MPL_STR_DELIM_STR) == 0)
+ {
+ str = next_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+ return token_copy(str, val, maxlen);
+ }
+ }
+ else
+ {
+ str = next_token(str);
+ }
+ } while (str);
+ return MPL_STR_FAIL;
+}
+
+/*@ MPL_str_get_binary_arg - Extract an option from a string with a maximum
+ length
+
+Input Parameters:
++ str - Source string
+. key - key
+- maxlen - Maximum total length of 'buffer'
+
+Output Parameters:
++ buffer - output buffer
+- out_length - output length
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string and decodes
+ the value
+ back to binary data. The data must have been encoded with
+ MPL_str_add_binary_arg.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_binary_arg(const char *str, const char *flag, char *buffer,
+ int maxlen, int *out_length)
+{
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+
+ /* line up with the first token */
+ str = first_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+
+ /* This loop will match the first instance of "flag = value" in the string. */
+ do
+ {
+ if (compare_token(str, flag) == 0)
+ {
+ str = next_token(str);
+ if (compare_token(str, MPL_STR_DELIM_STR) == 0)
+ {
+ str = next_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+ return decode_buffer(str, buffer, maxlen, out_length);
+ }
+ }
+ else
+ {
+ str = next_token(str);
+ }
+ } while (str);
+ return MPL_STR_FAIL;
+}
+
+/*@ MPL_str_get_int_arg - Extract an option from a string
+
+Input Parameters:
++ str - Source string
+- key - key
+
+Output Parameters:
+. val_ptr - pointer to the output integer
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string and decodes the value
+ back to an int.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_int_arg(const char *str, const char *flag, int *val_ptr)
+{
+ int result;
+ char int_str[12];
+
+ result = MPL_str_get_string_arg(str, flag, int_str, 12);
+ if (result == MPL_STR_SUCCESS)
+ {
+ *val_ptr = atoi(int_str);
+ return MPL_STR_SUCCESS;
+ }
+ return result;
+}
+
+/* quoted_printf does not NULL terminate the string if maxlen is reached */
+static int quoted_printf(char *str, int maxlen, const char *val)
+{
+ int count = 0;
+ if (maxlen < 1)
+ return 0;
+ *str = MPL_STR_QUOTE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ while (maxlen)
+ {
+ if (*val == '\0')
+ break;
+ if (*val == MPL_STR_QUOTE_CHAR)
+ {
+ *str = MPL_STR_ESCAPE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ if (maxlen == 0)
+ return count;
+ }
+ *str = *val;
+ str++;
+ maxlen--;
+ count++;
+ val++;
+ }
+ if (maxlen)
+ {
+ *str = MPL_STR_QUOTE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ if (maxlen == 0)
+ return count;
+ *str = '\0';
+ }
+ return count;
+}
+
+/*@ MPL_str_add_string - Add a string to a string
+
+Input Parameters:
++ str_ptr - pointer to the destination string
+. maxlen_ptr - pointer to the maximum length of '*str_ptr'
+- val - string to add
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is decremented by the amount str_ptr is incremented
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds a string to a string in such a way that
+ MPL_str_get_string can
+ retreive the same string back. It takes into account spaces and quote
+ characters.
+ The string pointer is updated to the start of the next string in the
+ string and maxlen is updated accordingly.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_string(char **str_ptr, int *maxlen_ptr, const char *val)
+{
+ int num_chars;
+ char *str;
+ int maxlen;
+
+ str = *str_ptr;
+ maxlen = *maxlen_ptr;
+
+ if (strchr(val, MPL_STR_SEPAR_CHAR) ||
+ strchr(val, MPL_STR_QUOTE_CHAR) ||
+ strchr(val, MPL_STR_DELIM_CHAR))
+ {
+ num_chars = quoted_printf(str, maxlen, val);
+ if (num_chars == maxlen)
+ {
+ /* truncation, cleanup string */
+ *str = '\0';
+ return -1;
+ }
+ if (num_chars < maxlen - 1)
+ {
+ str[num_chars] = MPL_STR_SEPAR_CHAR;
+ str[num_chars+1] = '\0';
+ num_chars++;
+ }
+ else
+ {
+ str[num_chars] = '\0';
+ }
+ }
+ else
+ {
+ if (*val == '\0')
+ {
+ num_chars = MPL_snprintf(str, maxlen,
+ MPL_STR_QUOTE_STR MPL_STR_QUOTE_STR/*"\"\""*/);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(str, maxlen, "%s%c", val,
+ MPL_STR_SEPAR_CHAR);
+ }
+ if (num_chars == maxlen)
+ {
+ *str = '\0';
+ return -1;
+ }
+ }
+ *str_ptr += num_chars;
+ *maxlen_ptr -= num_chars;
+ return 0;
+}
+
+/*@ MPL_str_get_string - Get the next string from a string
+
+Input Parameters:
++ str_ptr - pointer to the destination string
+- maxlen_ptr - pointer to the maximum length of '*str_ptr'
+
+Output Parameters:
++ str_ptr - location of the next string
+- val - location to store the string
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Return Value:
+ The return value is 0 for success, -1 for insufficient buffer space, and
+ 1 for failure.
+
+ Notes:
+ This routine gets a string that was previously added by
+ MPL_str_add_string.
+ It takes into account spaces and quote characters. The string pointer is
+ updated to the start of the next string in the string.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_string(char **str_ptr, char *val, int maxlen)
+{
+ int result;
+ char *str;
+
+ if (str_ptr == NULL)
+ {
+ return -2;
+ }
+
+ str = *str_ptr;
+
+ if (maxlen < 1)
+ {
+ return 0;
+ }
+
+ /* line up with the first token */
+ str = (char*)first_token(str);
+ if (str == NULL)
+ {
+ return 0;
+ }
+
+ /* copy the token */
+ result = token_copy(str, val, maxlen);
+ if (result == MPL_STR_SUCCESS)
+ {
+ str = (char*)next_token(str);
+ *str_ptr = str;
+ return 0;
+ }
+ else if (result == MPL_STR_TRUNCATED)
+ {
+ return -1;
+ }
+
+ /* failure */
+ return -2;
+}
+
+/*@ MPL_str_add_string_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+- val - input string
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds a string option to a string in the form "key = value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ const char *val)
+{
+ int num_chars;
+ char **orig_str_ptr;
+
+ if (maxlen_ptr == NULL)
+ return MPL_STR_FAIL;
+
+ orig_str_ptr = str_ptr;
+
+ if (*maxlen_ptr < 1)
+ return MPL_STR_FAIL;
+
+ /* add the flag */
+ if (strstr(flag, MPL_STR_SEPAR_STR) || strstr(flag, MPL_STR_DELIM_STR) ||
+ flag[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
+ }
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 1)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+ *str_ptr = *str_ptr + num_chars;
+
+ /* add the deliminator character */
+ **str_ptr = MPL_STR_DELIM_CHAR;
+ *str_ptr = *str_ptr + 1;
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ /* add the value string */
+ if (strstr(val, MPL_STR_SEPAR_STR) || strstr(val, MPL_STR_DELIM_STR) ||
+ val[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, val);
+ }
+ else
+ {
+ if (*val == '\0')
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr,
+ MPL_STR_QUOTE_STR MPL_STR_QUOTE_STR/*"\"\""*/);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", val);
+ }
+ }
+ *str_ptr = *str_ptr + num_chars;
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 2)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **orig_str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+
+ /* add the trailing space */
+ **str_ptr = MPL_STR_SEPAR_CHAR;
+ *str_ptr = *str_ptr + 1;
+ **str_ptr = '\0';
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ return MPL_STR_SUCCESS;
+}
+
+/*@ MPL_str_add_int_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+- val - input integer
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds an integer option to a string in the form "key = value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ int val)
+{
+ char val_str[12];
+ MPL_snprintf(val_str, 12, "%d", val);
+ return MPL_str_add_string_arg(str_ptr, maxlen_ptr, flag, val_str);
+}
+
+/*@ MPL_str_add_binary_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+. val - input data
+- length - length of the input data
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine encodes binary data into a string option in the form
+ "key = encoded_value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ const char *buffer, int length)
+{
+ int result;
+ int num_chars;
+ char **orig_str_ptr;
+
+ if (maxlen_ptr == NULL)
+ return MPL_STR_FAIL;
+
+ orig_str_ptr = str_ptr;
+
+ if (*maxlen_ptr < 1)
+ return MPL_STR_FAIL;
+
+ /* add the flag */
+ if (strstr(flag, MPL_STR_SEPAR_STR) || strstr(flag, MPL_STR_DELIM_STR) ||
+ flag[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
+ }
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 1)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+ *str_ptr = *str_ptr + num_chars;
+
+ /* add the deliminator character */
+ **str_ptr = MPL_STR_DELIM_CHAR;
+ *str_ptr = *str_ptr + 1;
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ /* add the value string */
+ result = encode_buffer(*str_ptr, *maxlen_ptr, buffer, length, &num_chars);
+ if (result != MPL_STR_SUCCESS)
+ {
+ **orig_str_ptr = '\0';
+ return result;
+ }
+ num_chars = num_chars * 2; /* the encoding function turns one source
+ character into two destination characters */
+ *str_ptr = *str_ptr + num_chars;
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 2)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **orig_str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+
+ /* add the trailing space */
+ **str_ptr = MPL_STR_SEPAR_CHAR;
+ *str_ptr = *str_ptr + 1;
+ **str_ptr = '\0';
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ return MPL_STR_SUCCESS;
+}
diff --git a/src/mpl/src/str/mpl_str.c b/src/mpl/src/str/mpl_str.c
new file mode 100644
index 0000000..0595b95
--- /dev/null
+++ b/src/mpl/src/str/mpl_str.c
@@ -0,0 +1,366 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+#if !defined MPL_HAVE_SNPRINTF
+int MPL_snprintf(char *str, size_t size, mpl_const char *format, ...)
+{
+ int n;
+ mpl_const char *p;
+ char *out_str = str;
+ va_list list;
+
+ va_start(list, format);
+
+ p = format;
+ while (*p && size > 0) {
+ char *nf;
+
+ nf = strchr(p, '%');
+ if (!nf) {
+ /* No more format characters */
+ while (size-- > 0 && *p) {
+ *out_str++ = *p++;
+ }
+ }
+ else {
+ int nc;
+ int width = -1;
+
+ /* Copy until nf */
+ while (p < nf && size-- > 0) {
+ *out_str++ = *p++;
+ }
+ /* p now points at nf */
+ /* Handle the format character */
+ nc = nf[1];
+ if (isdigit(nc)) {
+ /* Get the field width */
+ /* FIXME : Assumes ASCII */
+ width = nc - '0';
+ p = nf + 2;
+ while (*p && isdigit(*p)) {
+ width = 10 * width + (*p++ - '0');
+ }
+ /* When there is no longer a digit, get the format
+ * character */
+ nc = *p++;
+ }
+ else {
+ /* Skip over the format string */
+ p += 2;
+ }
+
+ switch (nc) {
+ case '%':
+ *out_str++ = '%';
+ size--;
+ break;
+
+ case 'd':
+ {
+ int val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of integer type */
+ val = va_arg(list, int);
+ sprintf(tmp, "%d", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 'x':
+ {
+ int val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of integer type */
+ val = va_arg(list, int);
+ sprintf(tmp, "%x", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 'p':
+ {
+ void *val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of pointer type */
+ val = va_arg(list, void *);
+ sprintf(tmp, "%p", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 's':
+ {
+ char *s_arg;
+ /* Get the argument, of pointer to char type */
+ s_arg = va_arg(list, char *);
+ while (size-- > 0 && s_arg && *s_arg) {
+ *out_str++ = *s_arg++;
+ }
+ }
+ break;
+
+ default:
+ /* Error, unknown case */
+ return -1;
+ break;
+ }
+ }
+ }
+
+ va_end(list);
+
+ if (size-- > 0)
+ *out_str++ = '\0';
+
+ n = (int) (out_str - str);
+ return n;
+}
+#endif /* MPL_HAVE_SNPRINTF */
+
+/*@
+ MPL_strdup - Duplicate a string
+
+ Synopsis:
+.vb
+ char *MPL_strdup(mpl_const char *str)
+.ve
+
+Input Parameters:
+. str - null-terminated string to duplicate
+
+ Return value:
+ A pointer to a copy of the string, including the terminating null. A
+ null pointer is returned on error, such as out-of-memory.
+
+ Module:
+ Utility
+ @*/
+#if !defined MPL_HAVE_STRDUP
+char *MPL_strdup(mpl_const char *str)
+{
+ char *mpl_restrict p = (char *) malloc(strlen(str) + 1);
+ mpl_const char *mpl_restrict in_p = str;
+ char *save_p;
+
+ save_p = p;
+ if (p) {
+ while (*in_p) {
+ *p++ = *in_p++;
+ }
+ *p = 0;
+ }
+ return save_p;
+}
+#endif /* MPL_HAVE_STRDUP */
+
+/*
+ * MPL_strncpy - Copy at most n characters. Stop once a null is reached.
+ *
+ * This is different from strncpy, which null pads so that exactly
+ * n characters are copied. The strncpy behavior is correct for many
+ * applications because it guarantees that the string has no uninitialized
+ * data.
+ *
+ * If n characters are copied without reaching a null, return an error.
+ * Otherwise, return 0.
+ *
+ * Question: should we provide a way to request the length of the string,
+ * since we know it?
+ */
+/*@ MPL_strncpy - Copy a string with a maximum length
+
+Input Parameters:
++ instr - String to copy
+- maxlen - Maximum total length of 'outstr'
+
+Output Parameters:
+. outstr - String to copy into
+
+ Notes:
+ This routine is the routine that you wish 'strncpy' was. In copying
+ 'instr' to 'outstr', it stops when either the end of 'outstr' (the
+ null character) is seen or the maximum length 'maxlen' is reached.
+ Unlike 'strncpy', it does not add enough nulls to 'outstr' after
+ copying 'instr' in order to move precisely 'maxlen' characters.
+ Thus, this routine may be used anywhere 'strcpy' is used, without any
+ performance cost related to large values of 'maxlen'.
+
+ If there is insufficient space in the destination, the destination is
+ still null-terminated, to avoid potential failures in routines that neglect
+ to check the error code return from this routine.
+
+ Module:
+ Utility
+ @*/
+int MPL_strncpy(char *dest, const char *src, size_t n)
+{
+ char *mpl_restrict d_ptr = dest;
+ const char *mpl_restrict s_ptr = src;
+ register int i;
+
+ if (n == 0)
+ return 0;
+
+ i = (int) n;
+ while (*s_ptr && i-- > 0) {
+ *d_ptr++ = *s_ptr++;
+ }
+
+ if (i > 0) {
+ *d_ptr = 0;
+ return 0;
+ }
+ else {
+ /* Force a null at the end of the string (gives better safety
+ * in case the user fails to check the error code) */
+ dest[n - 1] = 0;
+ /* We may want to force an error message here, at least in the
+ * debugging version */
+ /*printf("failure in copying %s with length %d\n", src, n); */
+ return 1;
+ }
+}
+
+/* replacement for strsep. Conforms to the following description (from the OS X
+ * 10.6 man page):
+ *
+ * The strsep() function locates, in the string referenced by *stringp, the first occur-
+ * rence of any character in the string delim (or the terminating `\0' character) and
+ * replaces it with a `\0'. The location of the next character after the delimiter
+ * character (or NULL, if the end of the string was reached) is stored in *stringp. The
+ * original value of *stringp is returned.
+ *
+ * An ``empty'' field (i.e., a character in the string delim occurs as the first charac-
+ * ter of *stringp) can be detected by comparing the location referenced by the returned
+ * pointer to `\0'.
+ *
+ * If *stringp is initially NULL, strsep() returns NULL.
+ */
+char *MPL_strsep(char **stringp, const char *delim)
+{
+ int i, j;
+ char *ret;
+
+ if (!*stringp)
+ return NULL;
+
+ ret = *stringp;
+ i = 0;
+ while (1) {
+ if (!ret[i]) {
+ *stringp = NULL;
+ return ret;
+ }
+ for (j = 0; delim[j] != '\0'; ++j) {
+ if (ret[i] == delim[j]) {
+ ret[i] = '\0';
+ *stringp = &ret[i+1];
+ return ret;
+ }
+ }
+ ++i;
+ }
+}
+
+
+/* there's no standard portable way to convert error codes to human readable
+ * strings. The standard way to do that is via strerror() but if for some
+ * resason we don't have it, then we'll merely output the error code seen */
+#if !defined MPL_HAVE_STRERROR
+char *MPL_strerror(int errnum)
+{
+#define STRERROR_SIZE 256
+ static char msgbuf[STRERROR_SIZE];
+ snprintf(msgbuf, STRERROR_SIZE, "errno = %d", errnum);
+#undef STRERROR_SIZE
+ return msgbuf;
+}
+#endif /* MPL_HAVE_STRERROR */
+
+/*@ MPL_strnapp - Append to a string with a maximum length
+
+Input Parameters:
++ instr - String to copy
+- maxlen - Maximum total length of 'outstr'
+
+Output Parameters:
+. outstr - String to copy into
+
+ Notes:
+ This routine is similar to 'strncat' except that the 'maxlen' argument
+ is the maximum total length of 'outstr', rather than the maximum
+ number of characters to move from 'instr'. Thus, this routine is
+ easier to use when the declared size of 'instr' is known.
+
+ Module:
+ Utility
+ @*/
+int MPL_strnapp(char *dest, const char *src, size_t n)
+{
+ char *mpl_restrict d_ptr = dest;
+ const char *mpl_restrict s_ptr = src;
+ register int i;
+
+ /* Get to the end of dest */
+ i = (int) n;
+ while (i-- > 0 && *d_ptr)
+ d_ptr++;
+ if (i <= 0)
+ return 1;
+
+ /* Append. d_ptr points at first null and i is remaining space. */
+ while (*s_ptr && i-- > 0) {
+ *d_ptr++ = *s_ptr++;
+ }
+
+ /* We allow i >= (not just >) here because the first while decrements
+ * i by one more than there are characters, leaving room for the null */
+ if (i >= 0) {
+ *d_ptr = 0;
+ return 0;
+ }
+ else {
+ /* Force the null at the end */
+ *--d_ptr = 0;
+
+ /* We may want to force an error message here, at least in the
+ * debugging version */
+ return 1;
+ }
+}
diff --git a/src/mpl/src/thread/Makefile.mk b/src/mpl/src/thread/Makefile.mk
new file mode 100644
index 0000000..1861200
--- /dev/null
+++ b/src/mpl/src/thread/Makefile.mk
@@ -0,0 +1,12 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/thread/mpl_thread.c \
+ src/thread/mpl_thread_win.c \
+ src/thread/mpl_thread_solaris.c \
+ src/thread/mpl_thread_posix.c
diff --git a/src/mpl/src/thread/mpl_thread.c b/src/mpl/src/thread/mpl_thread.c
new file mode 100644
index 0000000..f1e95b5
--- /dev/null
+++ b/src/mpl/src/thread/mpl_thread.c
@@ -0,0 +1,22 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2002 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE) && !defined(MPL_TLS_SPECIFIER)
+
+/* This routine is called when a thread exits; it is passed the value
+ * associated with the key. In our case, this is simply storage
+ * allocated with MPL_calloc */
+void MPLI_cleanup_tls(void *a)
+{
+ if (a)
+ MPL_free(a);
+}
+
+#endif
diff --git a/src/mpl/src/thread/mpl_thread_posix.c b/src/mpl/src/thread/mpl_thread_posix.c
new file mode 100644
index 0000000..89efc25
--- /dev/null
+++ b/src/mpl/src/thread/mpl_thread_posix.c
@@ -0,0 +1,92 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_POSIX
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate
+ * function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+void *MPLI_thread_start(void *arg);
+
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ /* FIXME: faster allocation, or avoid it all together? */
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ pthread_attr_t attr;
+
+ thread_info->func = func;
+ thread_info->data = data;
+
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+ err = pthread_create(idp, &attr, MPLI_thread_start, thread_info);
+ /* FIXME: convert error to an MPL_THREAD_ERR value */
+
+ pthread_attr_destroy(&attr);
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in pthreads are expected to return a void pointer. Since
+ * our start functions do not return a value we must
+ * use an intermediate function to perform call to the user's start function
+ * and then return a value of NULL.
+ */
+void *MPLI_thread_start(void *arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return NULL;
+}
+
+#endif
diff --git a/src/mpl/src/thread/mpl_thread_solaris.c b/src/mpl/src/thread/mpl_thread_solaris.c
new file mode 100644
index 0000000..15aaec0
--- /dev/null
+++ b/src/mpl/src/thread/mpl_thread_solaris.c
@@ -0,0 +1,83 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_SOLARIS
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+void *MPLI_thread_start(void *arg);
+
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ /* FIXME: faster allocation, or avoid it all together? */
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ thread_info->func = func;
+ thread_info->data = data;
+
+ err = thr_create(NULL, 0, MPLI_thread_start, thread_info, THR_DETACHED, idp);
+ /* FIXME: convert error to an MPL_THREAD_ERR value */
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in Solaris threads are expected to return a void pointer. Since our start functions do not return a value we
+ * must use an intermediate function to perform call to the user's start function and then return a value of NULL.
+ */
+void *MPLI_thread_start(void *arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return NULL;
+}
+
+#endif
diff --git a/src/mpl/src/thread/mpl_thread_win.c b/src/mpl/src/thread/mpl_thread_win.c
new file mode 100644
index 0000000..d501654
--- /dev/null
+++ b/src/mpl/src/thread/mpl_thread_win.c
@@ -0,0 +1,352 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_WIN
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+DWORD WINAPI MPLI_thread_start(LPVOID arg);
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ thread_info->func = func;
+ thread_info->data = data;
+ *idp = CreateThread(NULL, 0, MPLI_thread_start, thread_info, 0, NULL);
+ if (*idp == NULL) {
+ err = GetLastError();
+ }
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in Windows are expected to return a DWORD. Since our start functions do not return a value we must
+ * use an intermediate function to perform the call to the user's start function and then return a value of 0.
+ */
+DWORD WINAPI MPLI_thread_start(LPVOID arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return 0;
+}
+
+void MPL_thread_exit()
+{
+ ExitThread(0);
+}
+
+void MPL_thread_self(MPL_thread_id_t * id)
+{
+ *id = GetCurrentThread();
+}
+
+void MPL_thread_same(MPL_thread_id_t * id1, MPL_thread_id_t * id2, int *same)
+{
+ *same = (*id1 == *id2) ? TRUE : FALSE;
+}
+
+void MPL_thread_yield(void)
+{
+ Sleep(0);
+}
+
+/*
+ * Mutexes
+ */
+
+void MPL_thread_mutex_create(MPL_thread_mutex_t * mutex, int *err)
+{
+ *mutex = CreateMutex(NULL, FALSE, NULL);
+ if (err != NULL) {
+ if (*mutex == NULL) {
+ *err = GetLastError();
+ }
+ else {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ }
+}
+
+void MPL_thread_mutex_destroy(MPL_thread_mutex_t * mutex, int *err)
+{
+ BOOL result;
+
+ result = CloseHandle(*mutex);
+ if (err != NULL) {
+ if (result) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ *err = GetLastError();
+ }
+ }
+}
+
+void MPL_thread_mutex_lock(MPL_thread_mutex_t * mutex, int *err)
+{
+ DWORD result;
+
+ result = WaitForSingleObject(*mutex, INFINITE);
+ if (err != NULL) {
+ if (result == WAIT_OBJECT_0) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ if (result == WAIT_FAILED) {
+ *err = GetLastError();
+ }
+ else {
+ *err = result;
+ }
+ }
+ }
+}
+
+void MPL_thread_mutex_unlock(MPL_thread_mutex_t * mutex, int *err)
+{
+ BOOL result;
+
+ result = ReleaseMutex(*mutex);
+ if (err != NULL) {
+ if (result) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ *err = GetLastError();
+ }
+ }
+}
+
+
+/*
+ * Condition Variables
+ */
+
+void MPL_thread_cond_create(MPL_thread_cond_t * cond, int *err)
+{
+ /* Create a tls slot to store the events used to wakeup each thread in cond_bcast or cond_signal */
+ MPL_thread_tls_create(NULL, &cond->tls, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* Create a mutex to protect the fifo queue. This is required because the mutex passed in to the
+ * cond functions need not be the same in each thread. */
+ MPL_thread_mutex_create(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ cond->fifo_head = NULL;
+ cond->fifo_tail = NULL;
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+void MPL_thread_cond_destroy(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *iter;
+
+ while (cond->fifo_head) {
+ iter = cond->fifo_head;
+ cond->fifo_head = cond->fifo_head->next;
+ MPL_free(iter);
+ }
+ MPL_thread_mutex_destroy(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ MPL_thread_tls_destroy(&cond->tls, err);
+ /*
+ * if (err != NULL)
+ * {
+ * *err = MPL_THREAD_SUCCESS;
+ * }
+ */
+}
+
+void MPL_thread_cond_wait(MPL_thread_cond_t * cond, MPL_thread_mutex_t * mutex, int *err)
+{
+ HANDLE event;
+ DWORD result;
+ MPL_thread_tls_get(&cond->tls, &event, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (event == NULL) {
+ event = CreateEvent(NULL, TRUE, FALSE, NULL);
+ if (event == NULL) {
+ if (err != NULL) {
+ *err = GetLastError();
+ }
+ return;
+ }
+ MPL_thread_tls_set(&cond->tls, event, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ }
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (cond->fifo_tail == NULL) {
+ cond->fifo_tail = (MPLI_win_thread_cond_fifo_t *) MPL_malloc(sizeof(MPLI_win_thread_cond_fifo_t));
+ cond->fifo_head = cond->fifo_tail;
+ }
+ else {
+ cond->fifo_tail->next =
+ (MPLI_win_thread_cond_fifo_t *) MPL_malloc(sizeof(MPLI_win_thread_cond_fifo_t));
+ cond->fifo_tail = cond->fifo_tail->next;
+ }
+ if (cond->fifo_tail == NULL) {
+ if (err != NULL) {
+ *err = -1;
+ }
+ return;
+ }
+ cond->fifo_tail->event = event;
+ cond->fifo_tail->next = NULL;
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ MPL_thread_mutex_unlock(mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ result = WaitForSingleObject(event, INFINITE);
+ if (err != NULL) {
+ if (result != WAIT_OBJECT_0) {
+ if (result == WAIT_FAILED) {
+ *err = GetLastError();
+ }
+ else {
+ *err = result;
+ }
+ return;
+ }
+ }
+ result = ResetEvent(event);
+ if (!result && err != NULL) {
+ *err = GetLastError();
+ return;
+ }
+ MPL_thread_mutex_lock(mutex, err);
+ /*
+ * if (err != NULL)
+ * {
+ * *err = MPL_THREAD_SUCCESS;
+ * }
+ */
+}
+
+void MPL_thread_cond_broadcast(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *fifo, *temp;
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* remove the fifo queue from the cond variable */
+ fifo = cond->fifo_head;
+ cond->fifo_head = cond->fifo_tail = NULL;
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* signal each event in the fifo queue */
+ while (fifo) {
+ if (!SetEvent(fifo->event) && err != NULL) {
+ *err = GetLastError();
+ /* lost memory */
+ return;
+ }
+ temp = fifo;
+ fifo = fifo->next;
+ MPL_free(temp);
+ }
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+void MPL_thread_cond_signal(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *fifo;
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ fifo = cond->fifo_head;
+ if (fifo) {
+ cond->fifo_head = cond->fifo_head->next;
+ if (cond->fifo_head == NULL)
+ cond->fifo_tail = NULL;
+ }
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (fifo) {
+ if (!SetEvent(fifo->event) && err != NULL) {
+ *err = GetLastError();
+ MPL_free(fifo);
+ return;
+ }
+ MPL_free(fifo);
+ }
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+#endif
diff --git a/src/mpl/src/timer/Makefile.mk b/src/mpl/src/timer/Makefile.mk
new file mode 100644
index 0000000..b2495fb
--- /dev/null
+++ b/src/mpl/src/timer/Makefile.mk
@@ -0,0 +1,18 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/timer/mpl_timer_clock_gettime.c \
+ src/timer/mpl_timer_gcc_ia64_cycle.c \
+ src/timer/mpl_timer_gethrtime.c \
+ src/timer/mpl_timer_gettimeofday.c \
+ src/timer/mpl_timer_linux86_cycle.c \
+ src/timer/mpl_timer_ppc64_cycle.c \
+ src/timer/mpl_timer_mach_absolute_time.c \
+ src/timer/mpl_timer_query_performance_counter.c \
+ src/timer/mpl_timer_win86_cycle.c \
+ src/timer/mpl_timer_device.c
diff --git a/src/mpl/src/timer/mpl_timer_clock_gettime.c b/src/mpl/src/timer/mpl_timer_clock_gettime.c
new file mode 100644
index 0000000..6c081fa
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_clock_gettime.c
@@ -0,0 +1,76 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__CLOCK_GETTIME
+
+int MPL_wtime(MPL_time_t * timeval)
+{
+ /* POSIX timer (14.2.1, page 311) */
+ clock_gettime(CLOCK_REALTIME, timeval);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = ((double) (t2->tv_sec - t1->tv_sec) + 1.0e-9 * (double) (t2->tv_nsec - t1->tv_nsec));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = ((double) t->tv_sec + 1.0e-9 * (double) t->tv_nsec);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ long nsec, sec;
+
+ nsec = t2->tv_nsec - t1->tv_nsec;
+ sec = t2->tv_sec - t1->tv_sec;
+
+ t3->tv_sec += sec;
+ t3->tv_nsec += nsec;
+ while (t3->tv_nsec > 1000000000) {
+ t3->tv_nsec -= 1000000000;
+ t3->tv_sec++;
+ }
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ struct timespec res;
+ int rc;
+
+ rc = clock_getres(CLOCK_REALTIME, &res);
+ if (!rc)
+ /* May return -1 for unimplemented ! */
+ *wtick = res.tv_sec + 1.0e-9 * res.tv_nsec;
+
+ /* Sigh. If not implemented (POSIX allows that),
+ * then we need to return the generic tick value */
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_device.c b/src/mpl/src/timer/mpl_timer_device.c
new file mode 100644
index 0000000..1f2e6f1
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_device.c
@@ -0,0 +1,54 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__DEVICE
+
+int (*MPL_wtime_fn)(MPL_time_t *timeval) = NULL;
+int (*MPL_wtime_diff_fn)(MPL_time_t *t1, MPL_time_t *t2, double *diff) = NULL;
+int (*MPL_wtime_acc_fn)(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3) = NULL;
+int (*MPL_wtime_todouble_fn)(MPL_time_t *timeval, double *seconds) = NULL;
+int (*MPL_wtick_fn)(double *tick) = NULL;
+
+int MPL_wtime(MPL_time_t *timeval)
+{
+ if (MPL_wtime_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_fn(timeval);
+}
+
+int MPL_wtime_diff(MPL_time_t *t1, MPL_time_t *t2, double *diff)
+{
+ if (MPL_wtime_diff_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_diff_fn(t1, t2, diff);
+}
+
+int MPL_wtime_todouble(MPL_time_t *t, double *val)
+{
+ if (MPL_wtime_todouble_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_todouble_fn(t, val);
+}
+
+int MPL_wtime_acc(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3)
+{
+ if (MPL_wtime_acc_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_acc_fn(t1, t2, t3);
+}
+
+int MPL_wtick(double *wtick)
+{
+ if (MPL_wtick_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtick_fn(wtick);
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c b/src/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c
new file mode 100644
index 0000000..99c5643
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GCC_IA64_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ unsigned long long t1, t2;
+ struct timeval tv1, tv2;
+ double td1, td2;
+
+ gettimeofday(&tv1, NULL);
+ MPL_wtime(&t1);
+ usleep(250000);
+ gettimeofday(&tv2, NULL);
+ MPL_wtime(&t2);
+
+ td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
+ td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
+
+ seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+/* Time stamps created by a macro */
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ /* This returns the number of cycles as the "time". This isn't correct
+ * for implementing MPI_Wtime, but it does allow us to insert cycle
+ * counters into test programs */
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_gethrtime.c b/src/mpl/src/timer/mpl_timer_gethrtime.c
new file mode 100644
index 0000000..ad69fe4
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_gethrtime.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETHRTIME
+
+/*
+ * MPL_time_t is hrtime_t, which under Solaris is defined as a 64bit
+ * longlong_t . However, the Solaris header files will define
+ * longlong_t as a structure in some circumstances, making arithmetic
+ * with hrtime_t invalid. FIXME.
+ * To fix this, we'll need to test hrtime_t arithmetic in the configure
+ * program, and if it fails, check for the Solaris defintions (
+ * union { double _d; int32_t _l[2]; }. Alternately, we may decide that
+ * if hrtime_t is not supported, then neither is gethrtime.
+ *
+ * Note that the Solaris sys/types.h file *assumes* that no other compiler
+ * supports an 8 byte long long. We can also cast hrtime_t to long long
+ * if long long is available and 8 bytes.
+ */
+int MPL_wtime(MPL_time_t * timeval)
+{
+ *timeval = gethrtime();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = 1.0e-9 * (double) (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = 1.0e-9 * (*t);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += ((*t2) - (*t1));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ /* According to the documentation, ticks should be in nanoseconds. This
+ * is untested */
+ *wtick = 1.0e-9;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_gettimeofday.c b/src/mpl/src/timer/mpl_timer_gettimeofday.c
new file mode 100644
index 0000000..a211fe7
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_gettimeofday.c
@@ -0,0 +1,72 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETTIMEOFDAY
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int MPL_wtime(MPL_time_t * tval)
+{
+ gettimeofday(tval, NULL);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = ((double) (t2->tv_sec - t1->tv_sec) + .000001 * (double) (t2->tv_usec - t1->tv_usec));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) t->tv_sec + .000001 * (double) t->tv_usec;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ int usec, sec;
+
+ usec = t2->tv_usec - t1->tv_usec;
+ sec = t2->tv_sec - t1->tv_sec;
+ t3->tv_usec += usec;
+ t3->tv_sec += sec;
+ /* Handle carry to the integer seconds field */
+ while (t3->tv_usec > 1000000) {
+ t3->tv_usec -= 1000000;
+ t3->tv_sec++;
+ }
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_linux86_cycle.c b/src/mpl/src/timer/mpl_timer_linux86_cycle.c
new file mode 100644
index 0000000..5b14a57
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_linux86_cycle.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__LINUX86_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ MPL_time_t t1, t2;
+ struct timeval tv1, tv2;
+ double td1, td2;
+
+ gettimeofday(&tv1, NULL);
+ MPL_wtime(&t1);
+ usleep(250000);
+ gettimeofday(&tv2, NULL);
+ MPL_wtime(&t2);
+
+ td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
+ td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
+
+ seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+/* Time stamps created by a macro */
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ /* This returns the number of cycles as the "time". This isn't correct
+ * for implementing MPI_Wtime, but it does allow us to insert cycle
+ * counters into test programs */
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_mach_absolute_time.c b/src/mpl/src/timer/mpl_timer_mach_absolute_time.c
new file mode 100644
index 0000000..31afaef
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_mach_absolute_time.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__MACH_ABSOLUTE_TIME
+
+static double MPIR_Wtime_mult;
+
+int MPL_wtime_init(void)
+{
+ mach_timebase_info_data_t info;
+ mach_timebase_info(&info);
+ MPIR_Wtime_mult = 1.0e-9 * ((double) info.numer / (double) info.denom);
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime(MPL_time_t * timeval)
+{
+ *timeval = mach_absolute_time();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (*t2 - *t1) * MPIR_Wtime_mult;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = *t * MPIR_Wtime_mult;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += *t2 - *t1;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_ppc64_cycle.c b/src/mpl/src/timer/mpl_timer_ppc64_cycle.c
new file mode 100644
index 0000000..439aafc
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_ppc64_cycle.c
@@ -0,0 +1,128 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__PPC64_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+static uint64_t clockMHz = 0;
+
+static uint64_t timeGetTime( void )
+{
+ struct timeval tv;
+ gettimeofday( &tv, 0 );
+ return tv.tv_sec * 1000000ULL + tv.tv_usec;
+}
+
+static inline uint64_t getClockMHz()
+{
+ if (clockMHz == 0)
+ {
+ uint64_t sampleTime = 100ULL; //sample time in usec
+ uint64_t timeStart = 0ULL, timeStop = 0ULL;
+ uint64_t startBase = 0ULL, endBase = 0ULL;
+ uint64_t overhead = 0ULL, tbf = 0ULL, tbi = 0ULL;
+ uint64_t ticks = 0ULL;
+ int iter = 0ULL;
+
+ do
+ {
+ tbi = tb();
+ tbf = tb();
+ tbi = tb();
+ tbf = tb();
+
+ overhead = tbf - tbi;
+ timeStart = timeGetTime();
+
+ while (timeGetTime() == timeStart)
+ timeStart = timeGetTime();
+
+ while (1)
+ {
+ timeStop = timeGetTime();
+
+ if ((timeStop - timeStart) > 1)
+ {
+ startBase = tb();
+ break;
+ }
+ }
+
+ timeStart = timeStop;
+
+ while (1)
+ {
+ timeStop = timeGetTime();
+
+ if ((timeStop - timeStart) > sampleTime)
+ {
+ endBase = tb();
+ break;
+ }
+ }
+
+ ticks = ((endBase - startBase) + (overhead));
+ iter++;
+
+ if (iter == 10ULL)
+ {
+ fprintf(stderr, "Warning: unable to initialize high resolution timer.\n");
+ return -1;
+ }
+ }
+ while (endBase <= startBase);
+
+ return (uint64_t) (ticks / sampleTime);
+ }
+ else
+ return clockMHz;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ clockMHz = getClockMHz();
+ seconds_per_tick = 1.0 / ((double)clockMHz * 1000000.0);
+ if (clockMHz == -1ULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ else
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_query_performance_counter.c b/src/mpl/src/timer/mpl_timer_query_performance_counter.c
new file mode 100644
index 0000000..67dec5f
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_query_performance_counter.c
@@ -0,0 +1,45 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER
+
+static double seconds_per_tick = 0.0; /* High performance counter frequency */
+
+int MPL_wtime_init(void)
+{
+ LARGE_INTEGER n;
+ QueryPerformanceFrequency(&n);
+ seconds_per_tick = 1.0 / (double) n.QuadPart;
+ return 0;
+}
+
+double MPL_wtick(void)
+{
+ return seconds_per_tick;
+}
+
+void MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) t->QuadPart * seconds_per_tick;
+}
+
+void MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ LARGE_INTEGER n;
+ n.QuadPart = t2->QuadPart - t1->QuadPart;
+ *diff = (double) n.QuadPart * seconds_per_tick;
+}
+
+void MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ t3->QuadPart += ((t2->QuadPart) - (t1->QuadPart));
+}
+
+#endif
diff --git a/src/mpl/src/timer/mpl_timer_win86_cycle.c b/src/mpl/src/timer/mpl_timer_win86_cycle.c
new file mode 100644
index 0000000..4943f12
--- /dev/null
+++ b/src/mpl/src/timer/mpl_timer_win86_cycle.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if (MPL_TIMER_KIND == MPL_TIMER_KIND__WIN86_CYCLE) || (MPL_TIMER_KIND == MPL_TIMER_KIND__WIN64_CYCLE)
+
+static double seconds_per_tick = 0.0;
+
+double MPL_wtick(void)
+{
+ return seconds_per_tick;
+}
+
+void MPL_wtime_todouble(MPL_time_t * t, double *d)
+{
+ *d = (double) (__int64) * t * seconds_per_tick;
+}
+
+void MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) ((__int64) (*t2 - *t1)) * seconds_per_tick;
+}
+
+int MPL_wtime_init(void)
+{
+ MPL_time_t t1, t2;
+ DWORD s1, s2;
+ double d;
+ int i;
+
+ MPL_wtime(&t1);
+ MPL_wtime(&t1);
+
+ /* time an interval using both timers */
+ s1 = GetTickCount();
+ MPL_wtime(&t1);
+ /*Sleep(250); *//* Sleep causes power saving cpu's to stop which stops the counter */
+ while (GetTickCount() - s1 < 200) {
+ for (i = 2; i < 1000; i++)
+ d = (double) i / (double) (i - 1);
+ }
+ s2 = GetTickCount();
+ MPL_wtime(&t2);
+
+ /* calculate the frequency of the assembly cycle counter */
+ seconds_per_tick = ((double) (s2 - s1) / 1000.0) / (double) ((__int64) (t2 - t1));
+ /*
+ * printf("t2-t1 %10d\nsystime diff %d\nfrequency %g\n CPU MHz %g\n",
+ * (int)(t2-t1), (int)(s2 - s1), seconds_per_tick, seconds_per_tick * 1.0e6);
+ */
+ return 0;
+}
+
+#endif
diff --git a/src/nameserv/file/.state-cache b/src/nameserv/file/.state-cache
index 6fc843e..f19cae7 100644
--- a/src/nameserv/file/.state-cache
+++ b/src/nameserv/file/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="file_nameserv.c" info="1447123141"/>
+<file name="file_nameserv.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="file_nameserv.c">
diff --git a/src/nameserv/file/file_nameserv.c b/src/nameserv/file/file_nameserv.c
index 5cb4233..3738a35 100644
--- a/src/nameserv/file/file_nameserv.c
+++ b/src/nameserv/file/file_nameserv.c
@@ -64,14 +64,14 @@ struct MPID_NS_Handle {
publishing. */
#undef FUNCNAME
#define FUNCNAME MPID_NS_Create
-int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
+int MPID_NS_Create( const MPIR_Info *info_ptr, MPID_NS_Handle *handle_ptr )
{
static const char FCNAME[] = "MPID_NS_Create";
const char *dirname;
struct stat st;
int err, ret;
- *handle_ptr = (MPID_NS_Handle)MPIU_Malloc( sizeof(struct MPID_NS_Handle) );
+ *handle_ptr = (MPID_NS_Handle)MPL_malloc( sizeof(struct MPID_NS_Handle) );
/* --BEGIN ERROR HANDLING-- */
if (!*handle_ptr) {
err = MPIR_Err_create_code( MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", 0 );
@@ -92,8 +92,8 @@ int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
}
}
- MPIU_Strncpy( (*handle_ptr)->dirname, dirname, MAXPATHLEN );
- MPIU_Strnapp( (*handle_ptr)->dirname, "/.mpinamepub/", MAXPATHLEN );
+ MPL_strncpy( (*handle_ptr)->dirname, dirname, MAXPATHLEN );
+ MPL_strnapp( (*handle_ptr)->dirname, "/.mpinamepub/", MAXPATHLEN );
/* Make the directory if necessary */
/* FIXME : Determine if the directory exists before trying to create it */
@@ -112,7 +112,7 @@ int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
#undef FUNCNAME
#define FUNCNAME MPID_NS_Publish
-int MPID_NS_Publish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Publish( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[], const char port[] )
{
static const char FCNAME[] = "MPID_NS_Publish";
@@ -122,13 +122,13 @@ int MPID_NS_Publish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
/* Determine file and directory name. The file name is from
the service name */
- MPIU_Strncpy( filename, handle->dirname, MAXPATHLEN );
- MPIU_Strnapp( filename, service_name, MAXPATHLEN );
+ MPL_strncpy( filename, handle->dirname, MAXPATHLEN );
+ MPL_strnapp( filename, service_name, MAXPATHLEN );
/* Add the file name to the known files now, in case there is
a failure during open or writing */
if (handle->nactive < MPID_MAX_NAMEPUB) {
- handle->filenames[handle->nactive++] = MPIU_Strdup( filename );
+ handle->filenames[handle->nactive++] = MPL_strdup( filename );
}
else {
/* --BEGIN ERROR HANDLING-- */
@@ -194,7 +194,7 @@ int MPID_NS_Publish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
#undef FUNCNAME
#define FUNCNAME MPID_NS_Lookup
-int MPID_NS_Lookup( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Lookup( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[], char port[] )
{
FILE *fp;
@@ -206,8 +206,8 @@ int MPID_NS_Lookup( MPID_NS_Handle handle, const MPID_Info *info_ptr,
/* Determine file and directory name. The file name is from
the service name */
- MPIU_Strncpy( filename, handle->dirname, MAXPATHLEN );
- MPIU_Strnapp( filename, service_name, MAXPATHLEN );
+ MPL_strncpy( filename, handle->dirname, MAXPATHLEN );
+ MPL_strnapp( filename, service_name, MAXPATHLEN );
fp = fopen( filename, "r" );
if (!fp) {
@@ -243,7 +243,7 @@ int MPID_NS_Lookup( MPID_NS_Handle handle, const MPID_Info *info_ptr,
#undef FUNCNAME
#define FUNCNAME MPID_NS_Unpublish
-int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[] )
{
static const char FCNAME[] = "MPID_NS_Unpublish";
@@ -254,8 +254,8 @@ int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
/* Remove the file corresponding to the service name */
/* Determine file and directory name. The file name is from
the service name */
- MPIU_Strncpy( filename, handle->dirname, MAXPATHLEN );
- MPIU_Strnapp( filename, service_name, MAXPATHLEN );
+ MPL_strncpy( filename, handle->dirname, MAXPATHLEN );
+ MPL_strnapp( filename, service_name, MAXPATHLEN );
/* Find the filename from the list of published files */
for (i=0; i<handle->nactive; i++) {
@@ -263,7 +263,7 @@ int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
strcmp( filename, handle->filenames[i] ) == 0) {
/* unlink the file only if we find it */
unlink( filename );
- MPIU_Free( handle->filenames[i] );
+ MPL_free( handle->filenames[i] );
handle->filenames[i] = 0;
break;
}
@@ -296,10 +296,10 @@ int MPID_NS_Free( MPID_NS_Handle *handle_ptr )
if (handle->filenames[i]) {
/* Remove the file if it still exists */
unlink( handle->filenames[i] );
- MPIU_Free( handle->filenames[i] );
+ MPL_free( handle->filenames[i] );
}
}
- MPIU_Free( *handle_ptr );
+ MPL_free( *handle_ptr );
*handle_ptr = 0;
return 0;
diff --git a/src/nameserv/pmi/.state-cache b/src/nameserv/pmi/.state-cache
index 6d92604..12f9d2f 100644
--- a/src/nameserv/pmi/.state-cache
+++ b/src/nameserv/pmi/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="pmi_nameserv.c" info="1447123141"/>
+<file name="pmi_nameserv.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="pmi_nameserv.c">
diff --git a/src/nameserv/pmi/pmi_nameserv.c b/src/nameserv/pmi/pmi_nameserv.c
index 9805ba2..7e45c81 100644
--- a/src/nameserv/pmi/pmi_nameserv.c
+++ b/src/nameserv/pmi/pmi_nameserv.c
@@ -26,11 +26,11 @@ struct MPID_NS_Handle { int dummy; }; /* unused for now */
#define FUNCNAME MPID_NS_Create
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
+int MPID_NS_Create( const MPIR_Info *info_ptr, MPID_NS_Handle *handle_ptr )
{
static struct MPID_NS_Handle nsHandleWithNoData;
- MPIU_UNREFERENCED_ARG(info_ptr);
+ MPL_UNREFERENCED_ARG(info_ptr);
/* MPID_NS_Create() should always create a valid handle */
*handle_ptr = &nsHandleWithNoData; /* The name service needs no local data */
return 0;
@@ -40,13 +40,13 @@ int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
#define FUNCNAME MPID_NS_Publish
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_NS_Publish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Publish( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[], const char port[] )
{
int mpi_errno = MPI_SUCCESS;
int rc;
- MPIU_UNREFERENCED_ARG(info_ptr);
- MPIU_UNREFERENCED_ARG(handle);
+ MPL_UNREFERENCED_ARG(info_ptr);
+ MPL_UNREFERENCED_ARG(handle);
#ifdef USE_PMI2_API
/* release the global CS for PMI calls */
@@ -66,13 +66,13 @@ fn_fail:
#define FUNCNAME MPID_NS_Lookup
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_NS_Lookup( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Lookup( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[], char port[] )
{
int mpi_errno = MPI_SUCCESS;
int rc;
- MPIU_UNREFERENCED_ARG(info_ptr);
- MPIU_UNREFERENCED_ARG(handle);
+ MPL_UNREFERENCED_ARG(info_ptr);
+ MPL_UNREFERENCED_ARG(handle);
#ifdef USE_PMI2_API
/* release the global CS for PMI calls */
@@ -92,13 +92,13 @@ fn_fail:
#define FUNCNAME MPID_NS_Unpublish
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[] )
{
int mpi_errno = MPI_SUCCESS;
int rc;
- MPIU_UNREFERENCED_ARG(info_ptr);
- MPIU_UNREFERENCED_ARG(handle);
+ MPL_UNREFERENCED_ARG(info_ptr);
+ MPL_UNREFERENCED_ARG(handle);
#ifdef USE_PMI2_API
/* release the global CS for PMI calls */
@@ -119,7 +119,7 @@ fn_fail:
int MPID_NS_Free( MPID_NS_Handle *handle_ptr )
{
/* MPID_NS_Handle is Null */
- MPIU_UNREFERENCED_ARG(handle_ptr);
+ MPL_UNREFERENCED_ARG(handle_ptr);
return 0;
}
@@ -148,14 +148,14 @@ struct MPID_NS_Handle
#undef FUNCNAME
#define FUNCNAME MPID_NS_Create
-int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
+int MPID_NS_Create( const MPIR_Info *info_ptr, MPID_NS_Handle *handle_ptr )
{
static const char FCNAME[] = "MPID_NS_Create";
int err;
int length;
char *pmi_namepub_kvs;
- *handle_ptr = (MPID_NS_Handle)MPIU_Malloc( sizeof(struct MPID_NS_Handle) );
+ *handle_ptr = (MPID_NS_Handle)MPL_malloc( sizeof(struct MPID_NS_Handle) );
/* --BEGIN ERROR HANDLING-- */
if (!*handle_ptr)
{
@@ -172,7 +172,7 @@ int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
}
/* --END ERROR HANDLING-- */
- (*handle_ptr)->kvsname = (char*)MPIU_Malloc(length);
+ (*handle_ptr)->kvsname = (char*)MPL_malloc(length);
/* --BEGIN ERROR HANDLING-- */
if (!(*handle_ptr)->kvsname)
{
@@ -184,7 +184,7 @@ int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
pmi_namepub_kvs = getenv("PMI_NAMEPUB_KVS");
if (pmi_namepub_kvs)
{
- MPIU_Strncpy((*handle_ptr)->kvsname, pmi_namepub_kvs, length);
+ MPL_strncpy((*handle_ptr)->kvsname, pmi_namepub_kvs, length);
}
else
{
@@ -203,7 +203,7 @@ int MPID_NS_Create( const MPID_Info *info_ptr, MPID_NS_Handle *handle_ptr )
#undef FUNCNAME
#define FUNCNAME MPID_NS_Publish
-int MPID_NS_Publish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Publish( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[], const char port[] )
{
static const char FCNAME[] = "MPID_NS_Publish";
@@ -232,7 +232,7 @@ int MPID_NS_Publish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
#undef FUNCNAME
#define FUNCNAME MPID_NS_Lookup
-int MPID_NS_Lookup( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Lookup( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[], char port[] )
{
static const char FCNAME[] = "MPID_NS_Lookup";
@@ -257,7 +257,7 @@ int MPID_NS_Lookup( MPID_NS_Handle handle, const MPID_Info *info_ptr,
#undef FUNCNAME
#define FUNCNAME MPID_NS_Unpublish
-int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPID_Info *info_ptr,
+int MPID_NS_Unpublish( MPID_NS_Handle handle, const MPIR_Info *info_ptr,
const char service_name[] )
{
static const char FCNAME[] = "MPID_NS_Unpublish";
@@ -292,8 +292,8 @@ int MPID_NS_Free( MPID_NS_Handle *handle_ptr )
static const char FCNAME[] = "MPID_NS_Free";
int err;
- MPIU_Free( (*handle_ptr)->kvsname );
- MPIU_Free( *handle_ptr );
+ MPL_free( (*handle_ptr)->kvsname );
+ MPL_free( *handle_ptr );
*handle_ptr = 0;
return 0;
diff --git a/src/nameserv/test/.state-cache b/src/nameserv/test/.state-cache
index b2321e1..cb5d6c6 100644
--- a/src/nameserv/test/.state-cache
+++ b/src/nameserv/test/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="testnd.c" info="1447123141"/>
+<file name="testnd.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="testnd.c">
diff --git a/src/nameserv/test/testnd.c b/src/nameserv/test/testnd.c
index ee53f51..5f910c7 100644
--- a/src/nameserv/test/testnd.c
+++ b/src/nameserv/test/testnd.c
@@ -12,8 +12,8 @@
#include <stdio.h>
#include <stdarg.h>
/* This is incomplete for the purposes of testing */
-typedef struct { int handle; } MPID_Info;
-#define MPID_INFO_NULL ((MPID_Info *)0)
+typedef struct { int handle; } MPIR_Info;
+#define MPIR_INFO_NULL ((MPIR_Info *)0)
#include "namepub.h"
void Error( const char *fmat, ... );
@@ -27,26 +27,26 @@ int main( int argc, char *argv[] )
int rc;
/* Create a name service */
- rc = MPID_NS_Create( MPID_INFO_NULL, &ns );
+ rc = MPID_NS_Create( MPIR_INFO_NULL, &ns );
if (rc) {
Error( "Could not create name service; rc = %d\n", rc );
}
/* publish several names */
- rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "name1", "foo$$12" );
+ rc = MPID_NS_Publish( ns, MPIR_INFO_NULL, "name1", "foo$$12" );
if (rc) {
Error( "Could not publish name1; rc = %d\n", rc );
}
- rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "namea", "bar--14" );
+ rc = MPID_NS_Publish( ns, MPIR_INFO_NULL, "namea", "bar--14" );
if (rc) {
Error( "Could not publish namea; rc = %d\n", rc );
}
- rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "1-2-3", "testname" );
+ rc = MPID_NS_Publish( ns, MPIR_INFO_NULL, "1-2-3", "testname" );
if (rc) {
Error( "Could not publish 1-2-3; rc = %d\n", rc );
}
/* Try look ups */
- rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name1", port );
+ rc = MPID_NS_Lookup( ns, MPIR_INFO_NULL, "name1", port );
if (rc) {
Error( "Could not lookup name1; rc = %d\n", rc );
}
@@ -56,7 +56,7 @@ int main( int argc, char *argv[] )
}
}
- rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "namea", port );
+ rc = MPID_NS_Lookup( ns, MPIR_INFO_NULL, "namea", port );
if (rc) {
Error( "Could not lookup namea; rc = %d\n", rc );
}
@@ -66,7 +66,7 @@ int main( int argc, char *argv[] )
}
}
- rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "1-2-3", port );
+ rc = MPID_NS_Lookup( ns, MPIR_INFO_NULL, "1-2-3", port );
if (rc) {
Error( "Could not lookup 1-2-3; rc = %d\n", rc );
}
@@ -78,16 +78,16 @@ int main( int argc, char *argv[] )
/* Try a name that isn't published */
port[0] = 0;
- rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name", port );
+ rc = MPID_NS_Lookup( ns, MPIR_INFO_NULL, "name", port );
if (!rc) {
Error( "Found port (%s) for unpublished name\n", port );
}
- rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "name 1", "foo 12" );
+ rc = MPID_NS_Publish( ns, MPIR_INFO_NULL, "name 1", "foo 12" );
if (rc) {
Error( "Could not publish \"name 1\"; rc = %d\n", rc );
}
- rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name 1", port );
+ rc = MPID_NS_Lookup( ns, MPIR_INFO_NULL, "name 1", port );
if (rc) {
Error( "Could not lookup \"name 1\"; rc = %d\n", rc );
}
@@ -98,13 +98,13 @@ int main( int argc, char *argv[] )
}
/* Note that there are some restrictions in the file-based version */
- rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "name/1", "foo/12a" );
+ rc = MPID_NS_Publish( ns, MPIR_INFO_NULL, "name/1", "foo/12a" );
if (rc) {
/* Allow publish to fail with some names */
;
}
else {
- rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name/1", port );
+ rc = MPID_NS_Lookup( ns, MPIR_INFO_NULL, "name/1", port );
if (rc) {
Error( "Could not lookup name/1; rc = %d\n", rc );
}
@@ -113,26 +113,26 @@ int main( int argc, char *argv[] )
Error( "Wrong value for port, got %s\n", port );
}
}
- rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "name/1" );
+ rc = MPID_NS_Unpublish( ns, MPIR_INFO_NULL, "name/1" );
if (rc) {
Error( "Could not unpublish name/1; rc = %d\n", rc );
}
}
/* Try to unpublish the names */
- rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "name1" );
+ rc = MPID_NS_Unpublish( ns, MPIR_INFO_NULL, "name1" );
if (rc) {
Error( "Could not unpublish name1; rc = %d\n", rc );
}
- rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "name 1" );
+ rc = MPID_NS_Unpublish( ns, MPIR_INFO_NULL, "name 1" );
if (rc) {
Error( "Could not unpublish \"name 1\"; rc = %d\n", rc );
}
- rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "namea" );
+ rc = MPID_NS_Unpublish( ns, MPIR_INFO_NULL, "namea" );
if (rc) {
Error( "Could not unpublish namea; rc = %d\n", rc );
}
- rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "1-2-3" );
+ rc = MPID_NS_Unpublish( ns, MPIR_INFO_NULL, "1-2-3" );
if (rc) {
Error( "Could not unpublish 1-2-3; rc = %d\n", rc );
}
diff --git a/src/openpa/Makefile.in b/src/openpa/Makefile.in
index a11604d..814cae7 100644
--- a/src/openpa/Makefile.in
+++ b/src/openpa/Makefile.in
@@ -362,6 +362,7 @@ pkgconfigdir = @pkgconfigdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/openpa/confdb/config.guess b/src/openpa/confdb/config.guess
index 6c32c86..1659250 100755
--- a/src/openpa/confdb/config.guess
+++ b/src/openpa/confdb/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/src/openpa/confdb/config.sub b/src/openpa/confdb/config.sub
index 7ffe373..1acc966 100755
--- a/src/openpa/confdb/config.sub
+++ b/src/openpa/confdb/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/src/openpa/confdb/install-sh b/src/openpa/confdb/install-sh
index 0b0fdcb..59990a1 100755
--- a/src/openpa/confdb/install-sh
+++ b/src/openpa/confdb/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/src/openpa/confdb/libtool.m4 b/src/openpa/confdb/libtool.m4
index a3bc337..10ab284 100644
--- a/src/openpa/confdb/libtool.m4
+++ b/src/openpa/confdb/libtool.m4
@@ -2887,6 +2887,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3546,7 +3558,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
@@ -4424,7 +4436,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4936,6 +4948,9 @@ m4_if([$1], [CXX], [
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -4998,6 +5013,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5252,7 +5270,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -5773,6 +5791,7 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5794,7 +5813,7 @@ _LT_EOF
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
diff --git a/src/openpa/confdb/ltmain.sh b/src/openpa/confdb/ltmain.sh
index 0f0a2da..147d758 100644
--- a/src/openpa/confdb/ltmain.sh
+++ b/src/openpa/confdb/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,10 +7272,13 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
continue
fi # $pass = conv
@@ -8823,6 +8829,9 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
esac
;;
no)
diff --git a/src/openpa/configure b/src/openpa/configure
index cb92c0c..20b517a 100755
--- a/src/openpa/configure
+++ b/src/openpa/configure
@@ -737,6 +737,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -823,6 +824,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1075,6 +1077,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1212,7 +1223,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1365,6 +1376,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -5565,7 +5577,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
@@ -9257,6 +9269,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
esac
ld_shlibs=yes
@@ -9511,7 +9526,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -10181,6 +10196,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -10202,7 +10218,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -11317,6 +11333,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
diff --git a/src/openpa/src/Makefile.in b/src/openpa/src/Makefile.in
index 26af473..34352ee 100644
--- a/src/openpa/src/Makefile.in
+++ b/src/openpa/src/Makefile.in
@@ -331,6 +331,7 @@ pkgconfigdir = @pkgconfigdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/openpa/src/opa_primitives.h b/src/openpa/src/opa_primitives.h
index 8e5d40b..1e48845 100644
--- a/src/openpa/src/opa_primitives.h
+++ b/src/openpa/src/opa_primitives.h
@@ -123,7 +123,7 @@
#endif
/*
- This routine is needed because the MPIU_THREAD_XXX_CS_{ENTER,EXIT} macros do
+ This routine is needed because the MPID_THREAD_XXX_CS_{ENTER,EXIT} macros do
not provide synchronization across multiple processes, only across multiple
threads within a process. In order to safely emulate atomic operations on a
shared memory region, we need a shared memory backed lock mechanism.
diff --git a/src/openpa/test/Makefile.in b/src/openpa/test/Makefile.in
index 8721025..4324e71 100644
--- a/src/openpa/test/Makefile.in
+++ b/src/openpa/test/Makefile.in
@@ -515,6 +515,7 @@ pkgconfigdir = @pkgconfigdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/pm/gforker/Makefile.mk b/src/pm/gforker/Makefile.mk
index 3a15605..3b3d032 100644
--- a/src/pm/gforker/Makefile.mk
+++ b/src/pm/gforker/Makefile.mk
@@ -16,13 +16,17 @@ if BUILD_PM_GFORKER
if PRIMARY_PM_GFORKER
bin_PROGRAMS += src/pm/gforker/mpiexec
src_pm_gforker_mpiexec_SOURCES = src/pm/gforker/mpiexec.c
-src_pm_gforker_mpiexec_LDADD = src/pm/util/libmpiexec.a $(mpllib)
+src_pm_gforker_mpiexec_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+src_pm_gforker_mpiexec_LDFLAGS = $(mpllibdir)
+EXTRA_src_pm_gforker_mpiexec_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
src_pm_gforker_mpiexec_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
else !PRIMARY_PM_GFORKER
bin_PROGRAMS += src/pm/gforker/mpiexec.gforker
src_pm_gforker_mpiexec_gforker_SOURCES = src/pm/gforker/mpiexec.c
-src_pm_gforker_mpiexec_gforker_LDADD = src/pm/util/libmpiexec.a
+src_pm_gforker_mpiexec_gforker_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+src_pm_gforker_mpiexec_gforker_LDFLAGS = $(mpllibdir)
+EXTRA_src_pm_gforker_mpiexec_gforker_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
src_pm_gforker_mpiexec_gforker_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
endif !PRIMARY_PM_GFORKER
diff --git a/src/pm/gforker/mpiexec.c b/src/pm/gforker/mpiexec.c
index 378f4c4..09e83a3 100644
--- a/src/pm/gforker/mpiexec.c
+++ b/src/pm/gforker/mpiexec.c
@@ -84,11 +84,11 @@
#include "env.h"
#include "simple_pmiutil.h"
-/* We can't use mpimem.h, because the memory routines are no longer available
+/* We can't use mpir_mem.h, because the memory routines are no longer available
as utility routines, and instead now import properties from the device
and other parts of the code */
-/* mpimem.h contains prototypes for MPIU_Strncpy etc. */
-/* #include "mpimem.h" */
+/* mpir_mem.h contains prototypes for MPL_strncpy etc. */
+/* #include "mpir_mem.h" */
typedef struct { PMISetup pmiinfo; IOLabelSetup labelinfo; } SetupInfo;
@@ -161,7 +161,7 @@ int main( int argc, char *argv[], char *envp[] )
init, allowing an MPI process to contact a waiting mpiexec that
would serve as a process manager. This option is not implemented */
if (getenv("MPIEXEC_USE_PORT")) {
- s.pmiinfo.portName = (char *)MPIU_Malloc( 1024 );
+ s.pmiinfo.portName = (char *)MPL_malloc( 1024 );
if (!s.pmiinfo.portName) {
MPL_error_printf( "Failed to allocate storage for portName" );
}
@@ -310,7 +310,7 @@ int mypreamble( void *data, ProcessState *pState )
ranks[0] = 0;
for (i=0; i<size; i++) {
MPL_snprintf( digits, sizeof(digits), "%d,", i );
- MPIU_Strnapp( ranks, digits, sizeof(ranks) );
+ MPL_strnapp( ranks, digits, sizeof(ranks) );
}
/* Remove the trailing comma */
if (size > 0)
diff --git a/src/pm/gforker/subconfigure.m4 b/src/pm/gforker/subconfigure.m4
index 096e14b..171e3b9 100644
--- a/src/pm/gforker/subconfigure.m4
+++ b/src/pm/gforker/subconfigure.m4
@@ -41,19 +41,6 @@ AC_ARG_ENABLE([allowport],
[],
[enable_allowport=yes])
-dnl check for library functions
-
-dnl [goodell@] the following functions are already checked by the top level configure
-dnl AC_CHECK_FUNCS(snprintf)
-dnl if test "$ac_cv_func_snprintf" = "yes" ; then
-dnl PAC_FUNC_NEEDS_DECL([#include <stdio.h>],snprintf)
-dnl fi
-dnl AC_CHECK_FUNCS(strdup)
-dnl if test "$ac_cv_func_strdup" = "yes" ; then
-dnl # Do we need to declare strdup?
-dnl PAC_FUNC_NEEDS_DECL([#include <string.h>],strdup)
-dnl fi
-
dnl
dnl Check for special compile characteristics
dnl
diff --git a/src/pm/hydra/Makefile.am b/src/pm/hydra/Makefile.am
index 5a0b91b..88c161c 100644
--- a/src/pm/hydra/Makefile.am
+++ b/src/pm/hydra/Makefile.am
@@ -6,8 +6,9 @@
external_subdirs = @mpl_srcdir@
external_dist_subdirs = @mpl_dist_srcdir@
-external_ldflags = -L$(top_builddir)/@mpl_srcdir@
-external_libs = -lmpl @WRAPPER_LIBS@
+external_includes = @mpl_includedir@
+external_ldflags = @mpl_libdir@
+external_libs = @mpl_lib@ @WRAPPER_LIBS@
bin_PROGRAMS =
noinst_HEADERS =
@@ -17,8 +18,7 @@ SUFFIXES =
doc1_src_txt =
ACLOCAL_AMFLAGS = -I confdb
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/@mpl_srcdir@/include \
- -I$(top_builddir)/@mpl_srcdir@/include
+AM_CPPFLAGS = -I$(top_srcdir)/include $(external_includes)
noinst_HEADERS += include/hydra.h include/hydra_server.h
diff --git a/src/pm/hydra/Makefile.in b/src/pm/hydra/Makefile.in
index 3646eec..35e0559 100644
--- a/src/pm/hydra/Makefile.in
+++ b/src/pm/hydra/Makefile.in
@@ -180,10 +180,8 @@ bin_PROGRAMS = $(am__EXEEXT_1) hydra_nameserver$(EXEEXT) \
@hydra_have_blcr_TRUE at am__append_16 = tools/ckpoint/blcr/ckpoint_blcr.h
@hydra_have_poll_TRUE at am__append_17 = tools/demux/demux_poll.c
@hydra_have_select_TRUE at am__append_18 = tools/demux/demux_select.c
- at hydra_have_ftb_TRUE@am__append_19 = tools/ftb/hydt_ftb.c
- at hydra_have_ftb_FALSE@am__append_20 = tools/ftb/hydt_ftb_dummy.c
- at hydra_pm_pmiserv_TRUE@am__append_21 = -I$(top_srcdir)/pm/utils
- at hydra_pm_pmiserv_TRUE@am__append_22 = \
+ at hydra_pm_pmiserv_TRUE@am__append_19 = -I$(top_srcdir)/pm/utils
+ at hydra_pm_pmiserv_TRUE@am__append_20 = \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/common.h \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmi_v2_common.h \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmip.h \
@@ -192,8 +190,8 @@ bin_PROGRAMS = $(am__EXEEXT_1) hydra_nameserver$(EXEEXT) \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_pmi.h \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_utils.h
- at hydra_pm_pmiserv_TRUE@am__append_23 = hydra_pmi_proxy
- at hydra_pm_pmiserv_TRUE@am__append_24 = pm/pmiserv/pmiserv_pmi.c \
+ at hydra_pm_pmiserv_TRUE@am__append_21 = hydra_pmi_proxy
+ at hydra_pm_pmiserv_TRUE@am__append_22 = pm/pmiserv/pmiserv_pmi.c \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_pmi_v1.c \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_pmi_v2.c \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_pmci.c \
@@ -202,10 +200,10 @@ bin_PROGRAMS = $(am__EXEEXT_1) hydra_nameserver$(EXEEXT) \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/common.c \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmi_v2_common.c
- at hydra_pm_pmiserv_TRUE@am__append_25 = pm/pmiserv/hydra_pmi_proxy.txt
- at hydra_ui_mpich_TRUE@am__append_26 = -I$(top_srcdir)/ui/utils -DHYDRA_CONF_FILE=\"@sysconfdir@/mpiexec.hydra.conf\"
- at hydra_ui_mpich_TRUE@am__append_27 = ui/mpich/mpiexec.h
- at hydra_ui_mpich_TRUE@am__append_28 = mpiexec.hydra
+ at hydra_pm_pmiserv_TRUE@am__append_23 = pm/pmiserv/hydra_pmi_proxy.txt
+ at hydra_ui_mpich_TRUE@am__append_24 = -I$(top_srcdir)/ui/utils -DHYDRA_CONF_FILE=\"@sysconfdir@/mpiexec.hydra.conf\"
+ at hydra_ui_mpich_TRUE@am__append_25 = ui/mpich/mpiexec.h
+ at hydra_ui_mpich_TRUE@am__append_26 = mpiexec.hydra
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cache.m4 \
@@ -301,8 +299,7 @@ am__libhydra_la_SOURCES_DIST = utils/alloc/alloc.c utils/args/args.c \
tools/bootstrap/persist/persist_wait.c tools/ckpoint/ckpoint.c \
tools/ckpoint/blcr/ckpoint_blcr.c tools/demux/demux.c \
tools/demux/demux_poll.c tools/demux/demux_select.c \
- tools/debugger/debugger.c tools/ftb/hydt_ftb.c \
- tools/ftb/hydt_ftb_dummy.c ui/utils/uiu.c
+ tools/debugger/debugger.c ui/utils/uiu.c
am__dirstamp = $(am__leading_dot)dirstamp
@hydra_have_hwloc_TRUE at am__objects_1 = tools/topo/hwloc/topo_hwloc.lo
@hydra_bss_external_TRUE at am__objects_2 = tools/bootstrap/external/external_common.lo \
@@ -353,8 +350,6 @@ am__dirstamp = $(am__leading_dot)dirstamp
@hydra_have_blcr_TRUE@ tools/ckpoint/blcr/ckpoint_blcr.lo
@hydra_have_poll_TRUE at am__objects_6 = tools/demux/demux_poll.lo
@hydra_have_select_TRUE at am__objects_7 = tools/demux/demux_select.lo
- at hydra_have_ftb_TRUE@am__objects_8 = tools/ftb/hydt_ftb.lo
- at hydra_have_ftb_FALSE@am__objects_9 = tools/ftb/hydt_ftb_dummy.lo
am_libhydra_la_OBJECTS = utils/alloc/alloc.lo utils/args/args.lo \
utils/dbg/dbg.lo utils/env/env.lo utils/launch/launch.lo \
utils/others/others.lo utils/signals/signals.lo \
@@ -371,8 +366,7 @@ am_libhydra_la_OBJECTS = utils/alloc/alloc.lo utils/args/args.lo \
tools/bootstrap/utils/bscu_cb.lo $(am__objects_2) \
$(am__objects_3) $(am__objects_4) tools/ckpoint/ckpoint.lo \
$(am__objects_5) tools/demux/demux.lo $(am__objects_6) \
- $(am__objects_7) tools/debugger/debugger.lo $(am__objects_8) \
- $(am__objects_9) ui/utils/uiu.lo
+ $(am__objects_7) tools/debugger/debugger.lo ui/utils/uiu.lo
libhydra_la_OBJECTS = $(am_libhydra_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -384,7 +378,7 @@ am__libpm_la_SOURCES_DIST = pm/pmiserv/pmiserv_pmi.c \
pm/pmiserv/pmiserv_pmci.c pm/pmiserv/pmiserv_cb.c \
pm/pmiserv/pmiserv_utils.c pm/pmiserv/common.c \
pm/pmiserv/pmi_v2_common.c
- at hydra_pm_pmiserv_TRUE@am__objects_10 = pm/pmiserv/pmiserv_pmi.lo \
+ at hydra_pm_pmiserv_TRUE@am__objects_8 = pm/pmiserv/pmiserv_pmi.lo \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_pmi_v1.lo \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_pmi_v2.lo \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_pmci.lo \
@@ -392,7 +386,7 @@ am__libpm_la_SOURCES_DIST = pm/pmiserv/pmiserv_pmi.c \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmiserv_utils.lo \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/common.lo \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmi_v2_common.lo
-am_libpm_la_OBJECTS = $(am__objects_10)
+am_libpm_la_OBJECTS = $(am__objects_8)
libpm_la_OBJECTS = $(am_libpm_la_OBJECTS)
@hydra_bss_persist_TRUE at am__EXEEXT_1 = hydra_persist$(EXEEXT)
@hydra_pm_pmiserv_TRUE at am__EXEEXT_2 = hydra_pmi_proxy$(EXEEXT)
@@ -509,10 +503,9 @@ am__noinst_HEADERS_DIST = include/hydra.h include/hydra_server.h \
tools/bootstrap/persist/persist_server.h \
tools/ckpoint/ckpoint.h tools/ckpoint/blcr/ckpoint_blcr.h \
tools/demux/demux.h tools/demux/demux_internal.h \
- tools/debugger/debugger.h tools/ftb/hydt_ftb.h \
- pm/include/pmci.h pm/pmiserv/common.h \
- pm/pmiserv/pmi_v2_common.h pm/pmiserv/pmip.h \
- pm/pmiserv/pmip_pmi.h pm/pmiserv/pmiserv.h \
+ tools/debugger/debugger.h pm/include/pmci.h \
+ pm/pmiserv/common.h pm/pmiserv/pmi_v2_common.h \
+ pm/pmiserv/pmip.h pm/pmiserv/pmip_pmi.h pm/pmiserv/pmiserv.h \
pm/pmiserv/pmiserv_pmi.h pm/pmiserv/pmiserv_utils.h \
ui/include/ui.h ui/utils/uiu.h ui/mpich/mpiexec.h
HEADERS = $(noinst_HEADERS)
@@ -556,7 +549,6 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/hydra-doxygen.cfg.in \
$(srcdir)/tools/ckpoint/blcr/Makefile.mk \
$(srcdir)/tools/debugger/Makefile.mk \
$(srcdir)/tools/demux/Makefile.mk \
- $(srcdir)/tools/ftb/Makefile.mk \
$(srcdir)/tools/nameserver/Makefile.mk \
$(srcdir)/tools/topo/Makefile.mk \
$(srcdir)/tools/topo/hwloc/Makefile.mk \
@@ -684,6 +676,7 @@ HWLOC_PLUGINS_PATH = @HWLOC_PLUGINS_PATH@
HWLOC_RELEASE_DATE = @HWLOC_RELEASE_DATE@
HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_VERSION = @HWLOC_VERSION@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
@@ -709,6 +702,7 @@ MKDIR_P = @MKDIR_P@
MPIEXEC_HYDRA_NAME = @MPIEXEC_HYDRA_NAME@
MPIEXEC_NAME = @MPIEXEC_NAME@
MPIRUN_NAME = @MPIRUN_NAME@
+MPLLIBNAME = @MPLLIBNAME@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -783,12 +777,16 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mpl_dist_srcdir = @mpl_dist_srcdir@
+mpl_includedir = @mpl_includedir@
+mpl_lib = @mpl_lib@
+mpl_libdir = @mpl_libdir@
mpl_srcdir = @mpl_srcdir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -803,16 +801,17 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
external_subdirs = @mpl_srcdir@ $(am__append_4)
external_dist_subdirs = @mpl_dist_srcdir@ $(am__append_5)
-external_ldflags = -L$(top_builddir)/@mpl_srcdir@ $(am__append_6)
-external_libs = -lmpl @WRAPPER_LIBS@ $(am__append_7)
+external_includes = @mpl_includedir@
+external_ldflags = @mpl_libdir@ $(am__append_6)
+external_libs = @mpl_lib@ @WRAPPER_LIBS@ $(am__append_7)
noinst_HEADERS = include/hydra.h include/hydra_server.h \
tools/topo/topo.h $(am__append_2) \
tools/bootstrap/include/bsci.h tools/bootstrap/utils/bscu.h \
$(am__append_8) $(am__append_12) tools/ckpoint/ckpoint.h \
$(am__append_16) tools/demux/demux.h \
tools/demux/demux_internal.h tools/debugger/debugger.h \
- tools/ftb/hydt_ftb.h pm/include/pmci.h $(am__append_22) \
- ui/include/ui.h ui/utils/uiu.h $(am__append_27)
+ pm/include/pmci.h $(am__append_20) ui/include/ui.h \
+ ui/utils/uiu.h $(am__append_25)
# created by confdb/aclocal_cache.m4
DISTCLEANFILES = config.system
@@ -822,18 +821,15 @@ EXTRA_DIST = autogen.sh
#.PHONY: mandoc mandoc-local htmldoc htmldoc-local
SUFFIXES = .man-phony .html-phony .man1-phony .html1-phony .txt
doc1_src_txt = $(am__append_14) tools/nameserver/hydra_nameserver.txt \
- $(am__append_25)
+ $(am__append_23)
ACLOCAL_AMFLAGS = -I confdb
-AM_CPPFLAGS = -I$(top_srcdir)/include \
- -I$(top_srcdir)/@mpl_srcdir@/include \
- -I$(top_builddir)/@mpl_srcdir@/include \
+AM_CPPFLAGS = -I$(top_srcdir)/include $(external_includes) \
-I$(top_srcdir)/tools/topo $(am__append_3) \
-I$(top_srcdir)/tools/bootstrap/include \
-I$(top_srcdir)/tools/bootstrap/utils \
-I$(top_srcdir)/tools/ckpoint -I$(top_srcdir)/tools/demux \
- -I$(top_srcdir)/tools/debugger -I$(top_srcdir)/tools/ftb \
- -I$(top_srcdir)/pm/include $(am__append_21) \
- -I$(top_srcdir)/ui/include $(am__append_26)
+ -I$(top_srcdir)/tools/debugger -I$(top_srcdir)/pm/include \
+ $(am__append_19) -I$(top_srcdir)/ui/include $(am__append_24)
noinst_LTLIBRARIES = libhydra.la libpm.la
libhydra_la_SOURCES = utils/alloc/alloc.c utils/args/args.c \
utils/dbg/dbg.c utils/env/env.c utils/launch/launch.c \
@@ -850,8 +846,7 @@ libhydra_la_SOURCES = utils/alloc/alloc.c utils/args/args.c \
tools/bootstrap/utils/bscu_cb.c $(am__append_9) \
$(am__append_10) $(am__append_13) tools/ckpoint/ckpoint.c \
$(am__append_15) tools/demux/demux.c $(am__append_17) \
- $(am__append_18) tools/debugger/debugger.c $(am__append_19) \
- $(am__append_20) ui/utils/uiu.c
+ $(am__append_18) tools/debugger/debugger.c ui/utils/uiu.c
tools_libs =
@hydra_bss_persist_TRUE at hydra_persist_SOURCES = tools/bootstrap/persist/persist_server.c
@hydra_bss_persist_TRUE at hydra_persist_CFLAGS = $(AM_CFLAGS)
@@ -863,7 +858,7 @@ hydra_nameserver_CFLAGS = $(AM_CFLAGS)
hydra_nameserver_LDFLAGS = $(external_ldflags)
hydra_nameserver_LDADD = -lhydra $(external_libs)
hydra_nameserver_DEPENDENCIES = libhydra.la
-libpm_la_SOURCES = $(am__append_24)
+libpm_la_SOURCES = $(am__append_22)
@hydra_pm_pmiserv_TRUE at hydra_pmi_proxy_SOURCES = pm/pmiserv/pmip.c \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmip_cb.c \
@hydra_pm_pmiserv_TRUE@ pm/pmiserv/pmip_utils.c \
@@ -910,7 +905,7 @@ all: all-recursive
.SUFFIXES: .man-phony .html-phony .man1-phony .html1-phony .txt .c .lo .o .obj
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/utils/Makefile.mk $(srcdir)/utils/alloc/Makefile.mk $(srcdir)/utils/args/Makefile.mk $(srcdir)/utils/dbg/Makefile.mk $(srcdir)/utils/env/Makefile.mk $(srcdir)/utils/launch/Makefile.mk $(srcdir)/utils/others/Makefile.mk $(srcdir)/utils/signals/Makefile.mk $(srcdir)/utils/sock/Makefile.mk $(srcdir)/utils/string/Makefile.mk $(srcdir)/tools/Makefile.mk $(srcdir)/tools/topo/Makefile.mk $(srcdir)/tools/topo/hwloc/Makefile.mk $(srcdir)/too [...]
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/utils/Makefile.mk $(srcdir)/utils/alloc/Makefile.mk $(srcdir)/utils/args/Makefile.mk $(srcdir)/utils/dbg/Makefile.mk $(srcdir)/utils/env/Makefile.mk $(srcdir)/utils/launch/Makefile.mk $(srcdir)/utils/others/Makefile.mk $(srcdir)/utils/signals/Makefile.mk $(srcdir)/utils/sock/Makefile.mk $(srcdir)/utils/string/Makefile.mk $(srcdir)/tools/Makefile.mk $(srcdir)/tools/topo/Makefile.mk $(srcdir)/tools/topo/hwloc/Makefile.mk $(srcdir)/too [...]
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -932,7 +927,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
-$(srcdir)/utils/Makefile.mk $(srcdir)/utils/alloc/Makefile.mk $(srcdir)/utils/args/Makefile.mk $(srcdir)/utils/dbg/Makefile.mk $(srcdir)/utils/env/Makefile.mk $(srcdir)/utils/launch/Makefile.mk $(srcdir)/utils/others/Makefile.mk $(srcdir)/utils/signals/Makefile.mk $(srcdir)/utils/sock/Makefile.mk $(srcdir)/utils/string/Makefile.mk $(srcdir)/tools/Makefile.mk $(srcdir)/tools/topo/Makefile.mk $(srcdir)/tools/topo/hwloc/Makefile.mk $(srcdir)/tools/bootstrap/Makefile.mk $(srcdir)/tools/boots [...]
+$(srcdir)/utils/Makefile.mk $(srcdir)/utils/alloc/Makefile.mk $(srcdir)/utils/args/Makefile.mk $(srcdir)/utils/dbg/Makefile.mk $(srcdir)/utils/env/Makefile.mk $(srcdir)/utils/launch/Makefile.mk $(srcdir)/utils/others/Makefile.mk $(srcdir)/utils/signals/Makefile.mk $(srcdir)/utils/sock/Makefile.mk $(srcdir)/utils/string/Makefile.mk $(srcdir)/tools/Makefile.mk $(srcdir)/tools/topo/Makefile.mk $(srcdir)/tools/topo/hwloc/Makefile.mk $(srcdir)/tools/bootstrap/Makefile.mk $(srcdir)/tools/boots [...]
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -1296,16 +1291,6 @@ tools/debugger/$(DEPDIR)/$(am__dirstamp):
@: > tools/debugger/$(DEPDIR)/$(am__dirstamp)
tools/debugger/debugger.lo: tools/debugger/$(am__dirstamp) \
tools/debugger/$(DEPDIR)/$(am__dirstamp)
-tools/ftb/$(am__dirstamp):
- @$(MKDIR_P) tools/ftb
- @: > tools/ftb/$(am__dirstamp)
-tools/ftb/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) tools/ftb/$(DEPDIR)
- @: > tools/ftb/$(DEPDIR)/$(am__dirstamp)
-tools/ftb/hydt_ftb.lo: tools/ftb/$(am__dirstamp) \
- tools/ftb/$(DEPDIR)/$(am__dirstamp)
-tools/ftb/hydt_ftb_dummy.lo: tools/ftb/$(am__dirstamp) \
- tools/ftb/$(DEPDIR)/$(am__dirstamp)
ui/utils/$(am__dirstamp):
@$(MKDIR_P) ui/utils
@: > ui/utils/$(am__dirstamp)
@@ -1470,8 +1455,6 @@ mostlyclean-compile:
-rm -f tools/debugger/*.lo
-rm -f tools/demux/*.$(OBJEXT)
-rm -f tools/demux/*.lo
- -rm -f tools/ftb/*.$(OBJEXT)
- -rm -f tools/ftb/*.lo
-rm -f tools/nameserver/*.$(OBJEXT)
-rm -f tools/topo/*.$(OBJEXT)
-rm -f tools/topo/*.lo
@@ -1578,8 +1561,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at tools/demux/$(DEPDIR)/demux.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at tools/demux/$(DEPDIR)/demux_poll.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at tools/demux/$(DEPDIR)/demux_select.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at tools/ftb/$(DEPDIR)/hydt_ftb.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at tools/ftb/$(DEPDIR)/hydt_ftb_dummy.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at tools/nameserver/$(DEPDIR)/hydra_nameserver-hydra_nameserver.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at tools/topo/$(DEPDIR)/topo.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at tools/topo/hwloc/$(DEPDIR)/topo_hwloc.Plo at am__quote@
@@ -1760,7 +1741,6 @@ clean-libtool:
-rm -rf tools/ckpoint/blcr/.libs tools/ckpoint/blcr/_libs
-rm -rf tools/debugger/.libs tools/debugger/_libs
-rm -rf tools/demux/.libs tools/demux/_libs
- -rm -rf tools/ftb/.libs tools/ftb/_libs
-rm -rf tools/topo/.libs tools/topo/_libs
-rm -rf tools/topo/hwloc/.libs tools/topo/hwloc/_libs
-rm -rf ui/utils/.libs ui/utils/_libs
@@ -2123,8 +2103,6 @@ distclean-generic:
-rm -f tools/debugger/$(am__dirstamp)
-rm -f tools/demux/$(DEPDIR)/$(am__dirstamp)
-rm -f tools/demux/$(am__dirstamp)
- -rm -f tools/ftb/$(DEPDIR)/$(am__dirstamp)
- -rm -f tools/ftb/$(am__dirstamp)
-rm -f tools/nameserver/$(DEPDIR)/$(am__dirstamp)
-rm -f tools/nameserver/$(am__dirstamp)
-rm -f tools/topo/$(DEPDIR)/$(am__dirstamp)
@@ -2165,7 +2143,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libtool \
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf pm/pmiserv/$(DEPDIR) tools/bootstrap/external/$(DEPDIR) tools/bootstrap/persist/$(DEPDIR) tools/bootstrap/src/$(DEPDIR) tools/bootstrap/utils/$(DEPDIR) tools/ckpoint/$(DEPDIR) tools/ckpoint/blcr/$(DEPDIR) tools/debugger/$(DEPDIR) tools/demux/$(DEPDIR) tools/ftb/$(DEPDIR) tools/nameserver/$(DEPDIR) tools/topo/$(DEPDIR) tools/topo/hwloc/$(DEPDIR) ui/mpich/$(DEPDIR) ui/utils/$(DEPDIR) utils/alloc/$(DEPDIR) utils/args/$(DEPDIR) utils/dbg/$(DEPDIR) utils/env/$(DEPDIR) utils/launch/$( [...]
+ -rm -rf pm/pmiserv/$(DEPDIR) tools/bootstrap/external/$(DEPDIR) tools/bootstrap/persist/$(DEPDIR) tools/bootstrap/src/$(DEPDIR) tools/bootstrap/utils/$(DEPDIR) tools/ckpoint/$(DEPDIR) tools/ckpoint/blcr/$(DEPDIR) tools/debugger/$(DEPDIR) tools/demux/$(DEPDIR) tools/nameserver/$(DEPDIR) tools/topo/$(DEPDIR) tools/topo/hwloc/$(DEPDIR) ui/mpich/$(DEPDIR) ui/utils/$(DEPDIR) utils/alloc/$(DEPDIR) utils/args/$(DEPDIR) utils/dbg/$(DEPDIR) utils/env/$(DEPDIR) utils/launch/$(DEPDIR) utils/others [...]
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags
@@ -2214,7 +2192,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf pm/pmiserv/$(DEPDIR) tools/bootstrap/external/$(DEPDIR) tools/bootstrap/persist/$(DEPDIR) tools/bootstrap/src/$(DEPDIR) tools/bootstrap/utils/$(DEPDIR) tools/ckpoint/$(DEPDIR) tools/ckpoint/blcr/$(DEPDIR) tools/debugger/$(DEPDIR) tools/demux/$(DEPDIR) tools/ftb/$(DEPDIR) tools/nameserver/$(DEPDIR) tools/topo/$(DEPDIR) tools/topo/hwloc/$(DEPDIR) ui/mpich/$(DEPDIR) ui/utils/$(DEPDIR) utils/alloc/$(DEPDIR) utils/args/$(DEPDIR) utils/dbg/$(DEPDIR) utils/env/$(DEPDIR) utils/launch/$( [...]
+ -rm -rf pm/pmiserv/$(DEPDIR) tools/bootstrap/external/$(DEPDIR) tools/bootstrap/persist/$(DEPDIR) tools/bootstrap/src/$(DEPDIR) tools/bootstrap/utils/$(DEPDIR) tools/ckpoint/$(DEPDIR) tools/ckpoint/blcr/$(DEPDIR) tools/debugger/$(DEPDIR) tools/demux/$(DEPDIR) tools/nameserver/$(DEPDIR) tools/topo/$(DEPDIR) tools/topo/hwloc/$(DEPDIR) ui/mpich/$(DEPDIR) ui/utils/$(DEPDIR) utils/alloc/$(DEPDIR) utils/args/$(DEPDIR) utils/dbg/$(DEPDIR) utils/env/$(DEPDIR) utils/launch/$(DEPDIR) utils/others [...]
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
diff --git a/src/pm/hydra/confdb/aclocal_cc.m4 b/src/pm/hydra/confdb/aclocal_cc.m4
index 92e7ee1..23d7365 100644
--- a/src/pm/hydra/confdb/aclocal_cc.m4
+++ b/src/pm/hydra/confdb/aclocal_cc.m4
@@ -521,7 +521,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -626,13 +626,6 @@ if test "$enable_strict_done" != "yes" ; then
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
- 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
- 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
- *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -645,6 +638,16 @@ if test "$enable_strict_done" != "yes" ; then
PAC_APPEND_FLAG([-std=c89],[pac_cc_strict_flags])
PAC_APPEND_FLAG([-Wdeclaration-after-statement],[pac_cc_strict_flags])
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
+ 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
+ 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
+ *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
+ esac
fi
# See if the above options work with the compiler
diff --git a/src/pm/hydra/confdb/aclocal_check_visibility.m4 b/src/pm/hydra/confdb/aclocal_check_visibility.m4
new file mode 100644
index 0000000..1ea85ba
--- /dev/null
+++ b/src/pm/hydra/confdb/aclocal_check_visibility.m4
@@ -0,0 +1,123 @@
+# This macro set originally copied from hwloc.
+# MPICH modifications:
+# - renamed macro to PAC_CHECK_VISIBILITY
+# - removed C compiler vendor check
+# - sed -e 's/HWLOC/MPICH/gI'
+#
+# Copyright © 2004-2005 The Trustees of Indiana University and Indiana
+# University Research and Technology
+# Corporation. All rights reserved.
+# Copyright © 2004-2005 The University of Tennessee and The University
+# of Tennessee Research Foundation. All rights
+# reserved.
+# Copyright © 2004-2007 High Performance Computing Center Stuttgart,
+# University of Stuttgart. All rights reserved.
+# Copyright © 2004-2005 The Regents of the University of California.
+# All rights reserved.
+# Copyright © 2006-2007 Cisco Systems, Inc. All rights reserved.
+# and renamed/modified for hwloc:
+# Copyright © 2009 Inria. All rights reserved.
+# Copyright © 2009-2010 Université Bordeaux
+# Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer listed
+# in this license in the documentation and/or other materials
+# provided with the distribution.
+#
+# - Neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties. The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# PAC_CHECK_VISIBILITY
+# --------------------------------------------------------
+AC_DEFUN([PAC_CHECK_VISIBILITY],[
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
+ m4_ifdef([AC_PROG_GREP],
+ [AC_REQUIRE([AC_PROG_GREP])],
+ [GREP=grep])
+
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ AC_ARG_ENABLE(visibility,
+ AC_HELP_STRING([--enable-visibility],
+ [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
+
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (disabled)])
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+
+ AC_MSG_CHECKING([if $CC supports $mpich_add])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+ ]],[[fprintf(stderr, "Hello, world\n");]])],
+ [AS_IF([test -s conftest.err],
+ [$GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ AS_IF([test "$?" = "0"], [mpich_add=])])
+ ], [mpich_add=])
+ AS_IF([test "$mpich_add" = ""],
+ [AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes])])
+
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([yes (via $mpich_add)])
+ elif test "$enable_visibility" = "yes"; then
+ AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting])
+ else
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (unsupported)])
+ fi
+ unset mpich_add
+ fi
+
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$mpich_visibility_define],
+ [Whether C compiler supports symbol visibility or not])
+])
diff --git a/src/pm/hydra/confdb/aclocal_fc.m4 b/src/pm/hydra/confdb/aclocal_fc.m4
index b844009..4318e38 100644
--- a/src/pm/hydra/confdb/aclocal_fc.m4
+++ b/src/pm/hydra/confdb/aclocal_fc.m4
@@ -439,7 +439,7 @@ AC_COMPILE_IFELSE([],[
# module tests do not always use the module output flag. See
# FC_MODULE_EXT , where this is determined.
# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
# f90 -moddir=${dir} ## the Sun f90 compiler
# g95 -fmod=${dir}
#
@@ -448,7 +448,7 @@ AC_COMPILE_IFELSE([],[
# users to use. Alternatively they can use an older version of MPICH.
pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
rm -f conftestdir/NONEXISTENT conftestdir/*
PAC_PUSH_FLAG([FCFLAGS])
FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
diff --git a/src/pm/hydra/confdb/aclocal_libs.m4 b/src/pm/hydra/confdb/aclocal_libs.m4
index 09e9c4c..8868e99 100644
--- a/src/pm/hydra/confdb/aclocal_libs.m4
+++ b/src/pm/hydra/confdb/aclocal_libs.m4
@@ -48,7 +48,7 @@ AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
dnl is adding lib64 by default really the right thing to do? What if
dnl we are on a 32-bit host that happens to have both lib dirs available?
[PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
- AS_IF([test -d "${with_$1}/lib64}"],
+ AS_IF([test -d "${with_$1}/lib64"],
[PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
])
])
diff --git a/src/pm/hydra/confdb/aclocal_romio.m4 b/src/pm/hydra/confdb/aclocal_romio.m4
index af80d3c..94f4e2e 100644
--- a/src/pm/hydra/confdb/aclocal_romio.m4
+++ b/src/pm/hydra/confdb/aclocal_romio.m4
@@ -786,28 +786,6 @@ EOF
fi
rm -f conftest$EXEEXT mpitest.c
])dnl
-define(PAC_TEST_MPIU_FUNCS,[
- AC_MSG_CHECKING(support for MPICH memory macros)
- rm -f mpitest.c
- cat > mpitest.c <<EOF
-#include "mpi.h"
-#include "stdio.h"
- main(Int argc, char **argv)
- {
- MPIU_Free(NULL);
- }
-EOF
- rm -f conftest$EXEEXT
- $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
- if test -x conftest$EXEEXT ; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
- else
- AC_MSG_RESULT(no)
- fi
- rm -f conftest$EXEEXT mpitest.c
-])dnl
-dnl
define(PAC_TEST_MPI_GREQUEST,[
AC_MSG_CHECKING(support for generalized requests)
rm -f mpitest.c
diff --git a/src/pm/hydra/confdb/ax_tls.m4 b/src/pm/hydra/confdb/ax_tls.m4
index 3f6a0ac..60657fa 100644
--- a/src/pm/hydra/confdb/ax_tls.m4
+++ b/src/pm/hydra/confdb/ax_tls.m4
@@ -46,7 +46,7 @@
AC_DEFUN([AX_TLS], [
AC_MSG_CHECKING(for thread local storage specifier)
AC_CACHE_VAL(ac_cv_tls, [
- ax_tls_keywords="__thread __declspec(thread) none"
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
for ax_tls_keyword in $ax_tls_keywords; do
case $ax_tls_keyword in
none) ac_cv_tls=none ; break ;;
@@ -69,7 +69,11 @@ AC_DEFUN([AX_TLS], [
PAC_APPEND_FLAG([-shared],[LIBS])
if test "$ac_cv_tls" != "none" ; then
AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([extern $ax_tls_keyword int bar;],[++bar;])],
+ [AC_LANG_PROGRAM(
+ [
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+ ],[++bar;])],
[ac_cv_tls=$ax_tls_keyword],
[ac_cv_tls=none])
fi
@@ -81,10 +85,7 @@ AC_DEFUN([AX_TLS], [
])
if test "$ac_cv_tls" != "none"; then
- # MPICH modification: this was "TLS" before instead of
- # "MPICH_TLS_SPECIFIER", but TLS had a reasonably high chance of conflicting
- # with a system library.
- AC_DEFINE_UNQUOTED([MPICH_TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+ AC_DEFINE_UNQUOTED([TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
fi
AC_MSG_RESULT($ac_cv_tls)
])
diff --git a/src/pm/hydra/confdb/config.guess b/src/pm/hydra/confdb/config.guess
index 6c32c86..1659250 100755
--- a/src/pm/hydra/confdb/config.guess
+++ b/src/pm/hydra/confdb/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/src/pm/hydra/confdb/config.sub b/src/pm/hydra/confdb/config.sub
index 7ffe373..1acc966 100755
--- a/src/pm/hydra/confdb/config.sub
+++ b/src/pm/hydra/confdb/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/src/pm/hydra/confdb/install-sh b/src/pm/hydra/confdb/install-sh
index 0b0fdcb..59990a1 100755
--- a/src/pm/hydra/confdb/install-sh
+++ b/src/pm/hydra/confdb/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/src/pm/hydra/confdb/libtool.m4 b/src/pm/hydra/confdb/libtool.m4
index a3bc337..10ab284 100644
--- a/src/pm/hydra/confdb/libtool.m4
+++ b/src/pm/hydra/confdb/libtool.m4
@@ -2887,6 +2887,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3546,7 +3558,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
@@ -4424,7 +4436,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4936,6 +4948,9 @@ m4_if([$1], [CXX], [
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -4998,6 +5013,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5252,7 +5270,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -5773,6 +5791,7 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5794,7 +5813,7 @@ _LT_EOF
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
diff --git a/src/pm/hydra/confdb/ltmain.sh b/src/pm/hydra/confdb/ltmain.sh
index 0f0a2da..147d758 100644
--- a/src/pm/hydra/confdb/ltmain.sh
+++ b/src/pm/hydra/confdb/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,10 +7272,13 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
continue
fi # $pass = conv
@@ -8823,6 +8829,9 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
esac
;;
no)
diff --git a/src/pm/hydra/confdb/random_r.m4 b/src/pm/hydra/confdb/random_r.m4
new file mode 100644
index 0000000..8d04a27
--- /dev/null
+++ b/src/pm/hydra/confdb/random_r.m4
@@ -0,0 +1,43 @@
+# serial 5
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RANDOM_R],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
+ if test $ac_cv_header_random_h = no; then
+ HAVE_RANDOM_H=0
+ fi
+
+ AC_CHECK_TYPES([struct random_data],
+ [], [HAVE_STRUCT_RANDOM_DATA=0],
+ [[#include <stdlib.h>
+ #if HAVE_RANDOM_H
+ # include <random.h>
+ #endif
+ ]])
+
+ dnl On AIX and OSF/1, these functions exist, but with different declarations.
+ dnl Override them all.
+ case "$host_os" in
+ aix* | osf*)
+ REPLACE_RANDOM_R=1
+ ;;
+ *)
+ AC_CHECK_FUNCS([random_r])
+ if test $ac_cv_func_random_r = no; then
+ HAVE_RANDOM_R=0
+ fi
+ ;;
+ esac
+])
+
+# Prerequisites of lib/random_r.c.
+AC_DEFUN([gl_PREREQ_RANDOM_R], [
+ :
+])
diff --git a/src/pm/hydra/confdb/stdlib_h.m4 b/src/pm/hydra/confdb/stdlib_h.m4
new file mode 100644
index 0000000..19107c4
--- /dev/null
+++ b/src/pm/hydra/confdb/stdlib_h.m4
@@ -0,0 +1,119 @@
+# stdlib_h.m4 serial 42
+dnl Copyright (C) 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_NEXT_HEADERS([stdlib.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+ ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
+ initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
+ posix_openpt ptsname ptsname_r random random_r realpath rpmatch
+ secure_getenv setenv setstate setstate_r srandom srandom_r
+ strtod strtoll strtoull unlockpt unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT])
+ GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
+ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
+ GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+ GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
+ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
+ GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT])
+ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
+ GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC])
+ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
+ GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP])
+ GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS])
+ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
+ GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS])
+ GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT])
+ GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME])
+ GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R])
+ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
+ GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
+ GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
+ GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
+ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+ GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
+ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
+ GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
+ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
+ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
+ GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
+ GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
+ GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX])
+ GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT])
+ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
+ GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
+ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
+ HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP])
+ HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS])
+ HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP])
+ HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS])
+ HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT])
+ HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME])
+ HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R])
+ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
+ HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
+ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
+ HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
+ HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
+ HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
+ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
+ REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC])
+ REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+ REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
+ REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
+ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
+ REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
+ REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC])
+ REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
+ REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
+ REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/src/pm/hydra/configure b/src/pm/hydra/configure
index 1452036..bfcdaac 100755
--- a/src/pm/hydra/configure
+++ b/src/pm/hydra/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Hydra 3.2.
+# Generated by GNU Autoconf 2.69 for Hydra 3.3a2.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Hydra'
PACKAGE_TARNAME='hydra'
-PACKAGE_VERSION='3.2'
-PACKAGE_STRING='Hydra 3.2'
+PACKAGE_VERSION='3.3a2'
+PACKAGE_STRING='Hydra 3.3a2'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -632,8 +632,6 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
-hydra_have_ftb_FALSE
-hydra_have_ftb_TRUE
hydra_have_port_FALSE
hydra_have_port_TRUE
hydra_have_select_FALSE
@@ -668,6 +666,8 @@ HWLOC_HAVE_X86_64_FALSE
HWLOC_HAVE_X86_64_TRUE
HWLOC_HAVE_X86_32_FALSE
HWLOC_HAVE_X86_32_TRUE
+HWLOC_HAVE_X86_FALSE
+HWLOC_HAVE_X86_TRUE
HWLOC_HAVE_MINGW32_FALSE
HWLOC_HAVE_MINGW32_TRUE
HWLOC_HAVE_WINDOWS_FALSE
@@ -698,6 +698,8 @@ HWLOC_BUILD_README_FALSE
HWLOC_BUILD_README_TRUE
HWLOC_BUILD_DOXYGEN_FALSE
HWLOC_BUILD_DOXYGEN_TRUE
+HWLOC_HAVE_USER32_FALSE
+HWLOC_HAVE_USER32_TRUE
HWLOC_HAVE_BUNZIPP_FALSE
HWLOC_HAVE_BUNZIPP_TRUE
HWLOC_HAVE_MBIND_FALSE
@@ -755,6 +757,7 @@ HWLOC_LIBXML2_LIBS
HWLOC_LIBXML2_CFLAGS
HWLOC_GL_LIBS
HWLOC_X11_LIBS
+HWLOC_X11_CPPFLAGS
X_EXTRA_LIBS
X_LIBS
X_PRE_LIBS
@@ -801,8 +804,12 @@ BUILD_COVERAGE_TRUE
GCOV
top_srcdir
DOXYGEN
+mpl_lib
+mpl_libdir
+mpl_includedir
mpl_dist_srcdir
mpl_srcdir
+MPLLIBNAME
MPIRUN_NAME
MPIEXEC_HYDRA_NAME
MPIEXEC_NAME
@@ -909,6 +916,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -943,6 +951,7 @@ with_gnu_ld
with_sysroot
enable_libtool_lock
enable_cache
+with_mpl_prefix
enable_coverage
with_hydra_bss
with_pbs
@@ -964,9 +973,6 @@ enable_g
enable_error_checking
enable_warnings
enable_profiling
-with_ftb
-with_ftb_include
-with_ftb_lib
'
ac_precious_vars='build_alias
host_alias
@@ -978,6 +984,7 @@ LIBS
CPPFLAGS
CPP
LT_SYS_LIBRARY_PATH
+MPLLIBNAME
GCOV
PKG_CONFIG
HWLOC_KERRIGHED_CFLAGS
@@ -1026,6 +1033,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1278,6 +1286,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1415,7 +1432,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1528,7 +1545,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Hydra 3.2 to adapt to many kinds of systems.
+\`configure' configures Hydra 3.3a2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1568,6 +1585,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1603,7 +1621,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Hydra 3.2:";;
+ short | recursive ) echo "Configuration of Hydra 3.3a2:";;
esac
cat <<\_ACEOF
@@ -1649,6 +1667,9 @@ Optional Packages:
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-sysroot[=DIR] Search for dependent libraries within DIR (or the
compiler's sysroot if not specified).
+ --with-mpl-prefix[=DIR] use the MPL library installed in DIR. Pass
+ "embedded" to force usage of the MPL source
+ distributed with Hydra.
--with-hydra-bss=name Bootstrap Server
(user,ssh,rsh,fork,slurm,ll,lsf,sge,pbs,cobalt,manual,persist)
--with-pbs=PATH specify path where pbs include directory and lib
@@ -1678,11 +1699,6 @@ Optional Packages:
found
--with-blcr-lib=PATH specify path where blcr lib directory can be found
--with-hydra-demux=name - Demux engine (poll, select, port)
- --with-ftb=PATH specify path where ftb include directory and lib
- directory can be found
- --with-ftb-include=PATH specify path where ftb include directory can be
- found
- --with-ftb-lib=PATH specify path where ftb lib directory can be found
Some influential environment variables:
CC C compiler command
@@ -1695,6 +1711,8 @@ Some influential environment variables:
CPP C preprocessor
LT_SYS_LIBRARY_PATH
User-defined run-time library search path.
+ MPLLIBNAME can be used to override the name of the MPL library (default:
+ "mpl")
GCOV name/path for the gcov utility
PKG_CONFIG path to pkg-config utility
HWLOC_KERRIGHED_CFLAGS
@@ -1779,7 +1797,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Hydra configure 3.2
+Hydra configure 3.3a2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2427,7 +2445,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Hydra $as_me 3.2, which was
+It was created by Hydra $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4792,7 +4810,7 @@ fi
# Define the identity of the package.
PACKAGE='hydra'
- VERSION='3.2'
+ VERSION='3.3a2'
cat >>confdefs.h <<_ACEOF
@@ -5312,7 +5330,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -5418,40 +5436,6 @@ $as_echo "$as_me: WARNING: Unrecognized value for enable-strict:$flag" >&2;}
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=199506L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=199506L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=199506L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=199506L"
-
-fi
- ;;
- 2001)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200112L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200112L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200112L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200112L"
-
-fi
- ;;
- 2008)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200809L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200809L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200809L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200809L"
-
-fi
- ;;
- *) as_fn_error $? "internal error, unexpected POSIX version: '$enable_posix'" "$LINENO" 5 ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -5500,6 +5484,43 @@ else
fi
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=199506L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=199506L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=199506L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=199506L"
+
+fi
+ ;;
+ 2001)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200112L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200112L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200112L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200112L"
+
+fi
+ ;;
+ 2008)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200809L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200809L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200809L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200809L"
+
+fi
+ ;;
+ *) as_fn_error $? "internal error, unexpected POSIX version: '$enable_posix'" "$LINENO" 5 ;;
+ esac
fi
# See if the above options work with the compiler
@@ -7532,7 +7553,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
@@ -10957,6 +10978,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
esac
ld_shlibs=yes
@@ -11211,7 +11235,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -11881,6 +11905,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -11902,7 +11927,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -13017,6 +13042,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -14353,8 +14390,8 @@ fi
# Build information
# these values come from the m4_include above
-HYDRA_VERSION="3.2"
-HYDRA_RELEASE_DATE="Wed Nov 11 22:06:48 CST 2015"
+HYDRA_VERSION="3.3a2"
+HYDRA_RELEASE_DATE="Sun Nov 13 09:12:11 MST 2016"
if test -z "$HYDRA_VERSION" ; then
as_fn_error $? "Version information not found. Configuration aborted." "$LINENO" 5
fi
@@ -14576,15 +14613,35 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
-# Dirty hack -- If we are compiling within MPICH, use the MPL in the
-# src/mpl directory. If not, use the one we checked out separately for
-# Hydra.
-if test "$FROM_MPICH" = "yes" ; then
- mpl_srcdir="../../mpl"
- mpl_dist_srcdir=
+# MPL
+
+MPLLIBNAME=${MPLLIBNAME:-"mpl"}
+export MPLLIBNAME
+
+
+# Check whether --with-mpl-prefix was given.
+if test "${with_mpl_prefix+set}" = set; then :
+ withval=$with_mpl_prefix;
else
- mpl_srcdir="mpl"
- mpl_dist_srcdir="mpl"
+ with_mpl_prefix=embedded
+fi
+ mpl_srcdir=""
+
+# Controls whether we recurse into the MPL dir when running "dist" rules like
+# "make distclean". Technically we are cheating whenever DIST_SUBDIRS is not a
+# superset of SUBDIRS, but we don't want to double-distclean and similar.
+
+mpl_includedir=""
+
+mpl_libdir=""
+
+mpl_lib=""
+
+if test "$with_mpl_prefix" = "embedded" ; then
+ mpl_srcdir="mpl"
+ mpl_dist_srcdir="mpl"
+ mpl_lib="mpl/lib${MPLLIBNAME}.la"
+ mpl_subdir_args="--disable-versioning --enable-embedded"
pac_dir="mpl"
{ $as_echo "$as_me:${as_lineno-$LINENO}: ===== configuring mpl =====" >&5
@@ -14605,7 +14662,7 @@ $as_echo "$as_me: sourcing $pac_abs_srcdir/mpl/setup" >&6;}
# Remove --cache-file, --srcdir, and --disable-option-checking arguments
# so they do not pile up. Otherwise relative paths (like --srcdir=.. from
# make distcheck) will be incorrect.
- pac_sub_configure_args=""
+ pac_sub_configure_args="$mpl_subdir_args"
pac_prev=
eval "set x $ac_configure_args"
shift
@@ -14787,12 +14844,19 @@ $as_echo "$as_me: sourcing $pac_abs_srcdir/mpl/localdefs" >&6;}
. $pac_abs_srcdir/mpl/localdefs
fi
+ mpl_includedir='-I$(top_builddir)/mpl/include -I$(top_srcdir)/mpl/include'
+else
+ # The user specified an already-installed MPL; just sanity check, don't
+ # subconfigure it
+ if test -s "${with_mpl_prefix}/include/mplconfig.h"; then :
+ :
+else
+ as_fn_error $? "the MPL installation in \"${with_mpl_prefix}\" appears broken" "$LINENO" 5
+fi
+ mpl_includedir="-I${with_mpl_prefix}/include"
+ mpl_libdir="-L${with_mpl_prefix}/lib"
+ mpl_lib="-l${MPLLIBNAME}"
fi
-
-# Controls whether we recurse into the MPL dir when running "dist" rules like
-# "make distclean". Technically we are cheating whenever DIST_SUBDIRS is not a
-# superset of SUBDIRS, but we don't want to double-distclean and similar.
-
# Documentation
# Extract the first word of "doxygen", so it can be a program name with args.
@@ -15294,8 +15358,8 @@ fi
# Check for necessary functions
-for ac_func in gettimeofday time strdup sigaction signal usleep alloca unsetenv \
- strerror strsignal stat fcntl alarm isatty inet_ntop getpgid \
+for ac_func in gettimeofday time sigaction signal usleep alloca unsetenv \
+ strsignal stat fcntl alarm isatty inet_ntop getpgid \
setsid killpg hstrerror
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -15719,7 +15783,7 @@ else
fi
- if test -d "${with_pbs}/lib64}"; then :
+ if test -d "${with_pbs}/lib64"; then :
if echo "$LDFLAGS" | $FGREP -e "\<-L${with_pbs}/lib64\>" >/dev/null 2>&1; then :
@@ -18879,6 +18943,7 @@ $as_echo "no" >&6; }
# Attribute may_alias: No suitable cross-check available, that works for non-supporting compilers
# Ignored by intel-9.1.045 -- turn off with -wd1292
# Ignored by PGI-6.2.5; ignore not detected due to missing cross-check
+ # The test case is chosen to match our only use in topology-xml-*.c, and reproduces an xlc-13.1.0 bug.
#
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(may_alias)" >&5
@@ -18892,7 +18957,7 @@ else
#
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int * p_value __attribute__ ((__may_alias__));
+struct { int i; } __attribute__ ((__may_alias__)) * p_value;
int
main ()
{
@@ -20551,13 +20616,16 @@ if test "x$ac_cv_func_strncasecmp" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function strncasecmp is declared" >&5
-$as_echo_n "checking whether function strncasecmp is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strncasecmp" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function strncasecmp has a complete prototype" >&5
+$as_echo_n "checking whether function strncasecmp has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * strncasecmp;
+ strncasecmp(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -20581,6 +20649,8 @@ $as_echo "#define HWLOC_HAVE_DECL_STRNCASECMP 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
fi
@@ -20785,6 +20855,16 @@ _ACEOF
fi
+ac_fn_c_check_type "$LINENO" "PROCESSOR_NUMBER" "ac_cv_type_PROCESSOR_NUMBER" "#include <windows.h>
+"
+if test "x$ac_cv_type_PROCESSOR_NUMBER" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PROCESSOR_NUMBER 1
+_ACEOF
+
+
+fi
CPPFLAGS="$old_CPPFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgdi32" >&5
@@ -20824,6 +20904,46 @@ $as_echo "#define HAVE_LIBGDI32 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PostQuitMessage in -luser32" >&5
+$as_echo_n "checking for PostQuitMessage in -luser32... " >&6; }
+if ${ac_cv_lib_user32_PostQuitMessage+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-luser32 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char PostQuitMessage ();
+int
+main ()
+{
+return PostQuitMessage ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_user32_PostQuitMessage=yes
+else
+ ac_cv_lib_user32_PostQuitMessage=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_user32_PostQuitMessage" >&5
+$as_echo "$ac_cv_lib_user32_PostQuitMessage" >&6; }
+if test "x$ac_cv_lib_user32_PostQuitMessage" = xyes; then :
+ hwloc_have_user32="yes"
+fi
+
ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
if test "x$ac_cv_header_windows_h" = xyes; then :
@@ -21280,7 +21400,84 @@ fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRTOULL $ac_have_decl
_ACEOF
+if test $ac_have_decl = 1; then :
+
+else
+ for ac_func in strtoull
+do :
+ ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull"
+if test "x$ac_cv_func_strtoull" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRTOULL 1
+_ACEOF
+
+fi
+done
+
+fi
+
+
+ # Needed for Windows in private/misc.h
+ ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
+if test "x$ac_cv_type_ssize_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SSIZE_T 1
+_ACEOF
+
+
+fi
+
+ ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl_snprintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF $ac_have_decl
+_ACEOF
+ ac_fn_c_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl_strcasecmp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRCASECMP $ac_have_decl
+_ACEOF
+
+ # strdup and putenv are declared in windows headers but marked deprecated
+ ac_fn_c_check_decl "$LINENO" "_strdup" "ac_cv_have_decl__strdup" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl__strdup" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__STRDUP $ac_have_decl
+_ACEOF
+
+ ac_fn_c_check_decl "$LINENO" "_putenv" "ac_cv_have_decl__putenv" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl__putenv" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__PUTENV $ac_have_decl
+_ACEOF
+
+ # Could add mkdir and access for hwloc-gather-cpuid.c on Windows
# Do a full link test instead of just using AC_CHECK_FUNCS, which
# just checks to see if the symbol exists or not. For example,
@@ -21376,7 +21573,9 @@ $as_echo_n "checking for program_invocation_name... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- #define _GNU_SOURCE
+ #ifndef _GNU_SOURCE
+ # define _GNU_SOURCE
+ #endif
#include <errno.h>
#include <stdio.h>
extern char *program_invocation_name;
@@ -21472,17 +21671,29 @@ _ACEOF
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function sched_setaffinity is declared" >&5
-$as_echo_n "checking whether function sched_setaffinity is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "sched_setaffinity" "ac_cv_have_decl_sched_setaffinity" "
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+#include <sched.h>
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+"
+if test "x$ac_cv_have_decl_sched_setaffinity" = xyes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function sched_setaffinity has a complete prototype" >&5
+$as_echo_n "checking whether function sched_setaffinity has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#define _GNU_SOURCE
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
#include <sched.h>
- void * sched_setaffinity;
+ sched_setaffinity(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -21519,7 +21730,9 @@ $as_echo_n "checking for old prototype of sched_setaffinity... " >&6; }
/* end confdefs.h. */
- #define _GNU_SOURCE
+ #ifndef _GNU_SOURCE
+ # define _GNU_SOURCE
+ #endif
#include <sched.h>
static unsigned long mask;
@@ -21547,6 +21760,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working CPU_SET" >&5
@@ -21614,28 +21829,26 @@ fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working _syscall3" >&5
-$as_echo_n "checking for working _syscall3... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working syscall" >&5
+$as_echo_n "checking for working syscall... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- #include <linux/unistd.h>
- #include <errno.h>
- #define __NR_hwloc_test 123
- _syscall3(int, hwloc_test, int, param1, int, param2, int, param3);
+ #include <unistd.h>
+ #include <sys/syscall.h>
int
main ()
{
- hwloc_test(1, 2, 3);
+syscall(1, 2, 3);
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
-$as_echo "#define HWLOC_HAVE__SYSCALL3 1" >>confdefs.h
+$as_echo "#define HWLOC_HAVE_SYSCALL 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -21873,13 +22086,16 @@ if test "x$ac_cv_func_ffs" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffs is declared" >&5
-$as_echo_n "checking whether function ffs is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ffs" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffs has a complete prototype" >&5
+$as_echo_n "checking whether function ffs has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * ffs;
+ ffs(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -21903,6 +22119,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FFS 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FFS 1" >>confdefs.h
@@ -21925,13 +22143,16 @@ if test "x$ac_cv_func_ffsl" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffsl is declared" >&5
-$as_echo_n "checking whether function ffsl is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "ffsl" "ac_cv_have_decl_ffsl" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ffsl" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffsl has a complete prototype" >&5
+$as_echo_n "checking whether function ffsl has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * ffsl;
+ ffsl(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -21955,6 +22176,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FFSL 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FFSL 1" >>confdefs.h
@@ -21973,13 +22196,16 @@ if test "x$ac_cv_func_fls" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function fls is declared" >&5
-$as_echo_n "checking whether function fls is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "fls" "ac_cv_have_decl_fls" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fls" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function fls has a complete prototype" >&5
+$as_echo_n "checking whether function fls has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * fls;
+ fls(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -22003,6 +22229,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FLS 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FLS 1" >>confdefs.h
@@ -22020,13 +22248,16 @@ if test "x$ac_cv_func_flsl" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function flsl is declared" >&5
-$as_echo_n "checking whether function flsl is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "flsl" "ac_cv_have_decl_flsl" "$ac_includes_default"
+if test "x$ac_cv_have_decl_flsl" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function flsl has a complete prototype" >&5
+$as_echo_n "checking whether function flsl has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * flsl;
+ flsl(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -22050,6 +22281,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FLSL 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FLSL 1" >>confdefs.h
@@ -22068,13 +22301,16 @@ if test "x$ac_cv_func_clz" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clz is declared" >&5
-$as_echo_n "checking whether function clz is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "clz" "ac_cv_have_decl_clz" "$ac_includes_default"
+if test "x$ac_cv_have_decl_clz" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clz has a complete prototype" >&5
+$as_echo_n "checking whether function clz has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * clz;
+ clz(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -22098,6 +22334,8 @@ $as_echo "#define HWLOC_HAVE_DECL_CLZ 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_CLZ 1" >>confdefs.h
@@ -22115,13 +22353,16 @@ if test "x$ac_cv_func_clzl" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clzl is declared" >&5
-$as_echo_n "checking whether function clzl is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "clzl" "ac_cv_have_decl_clzl" "$ac_includes_default"
+if test "x$ac_cv_have_decl_clzl" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clzl has a complete prototype" >&5
+$as_echo_n "checking whether function clzl has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * clzl;
+ clzl(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -22145,6 +22386,8 @@ $as_echo "#define HWLOC_HAVE_DECL_CLZL 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_CLZL 1" >>confdefs.h
@@ -22215,6 +22458,45 @@ fi
done
+ if test "$hwloc_mode" != "embedded"; then :
+ for ac_header in valgrind/valgrind.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default"
+if test "x$ac_cv_header_valgrind_valgrind_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_VALGRIND_VALGRIND_H 1
+_ACEOF
+
+fi
+
+done
+
+ ac_fn_c_check_decl "$LINENO" "RUNNING_ON_VALGRIND" "ac_cv_have_decl_RUNNING_ON_VALGRIND" "#include <valgrind/valgrind.h>
+"
+if test "x$ac_cv_have_decl_RUNNING_ON_VALGRIND" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RUNNING_ON_VALGRIND $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+
+else
+ :
+fi
+
+
+else
+
+
+$as_echo "#define HAVE_DECL_RUNNING_ON_VALGRIND 0" >>confdefs.h
+
+
+fi
+
for ac_header in pthread_np.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "pthread_np.h" "ac_cv_header_pthread_np_h" "$ac_includes_default"
@@ -22582,6 +22864,50 @@ $as_echo "#define HWLOC_HAVE_MIGRATE_PAGES 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for move_pages in -lnuma" >&5
+$as_echo_n "checking for move_pages in -lnuma... " >&6; }
+if ${ac_cv_lib_numa_move_pages+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnuma $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char move_pages ();
+int
+main ()
+{
+return move_pages ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_numa_move_pages=yes
+else
+ ac_cv_lib_numa_move_pages=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_move_pages" >&5
+$as_echo "$ac_cv_lib_numa_move_pages" >&6; }
+if test "x$ac_cv_lib_numa_move_pages" = xyes; then :
+
+
+$as_echo "#define HWLOC_HAVE_MOVE_PAGES 1" >>confdefs.h
+
+
+fi
+
LIBS="$tmp_save_LIBS"
fi
@@ -22633,7 +22959,12 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&5
$as_echo "$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&6; }
if test "x$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" = xyes; then :
- HWLOC_LIBS="$HWLOC_LIBS -ludev"
+
+ HWLOC_LIBS="$HWLOC_LIBS -ludev"
+
+$as_echo "#define HWLOC_HAVE_LIBUDEV 1" >>confdefs.h
+
+
fi
@@ -23819,12 +24150,14 @@ _ACEOF
$as_echo "#define HWLOC_HAVE_X11_KEYSYM 1" >>confdefs.h
+ HWLOC_X11_CPPFLAGS="$X_CFLAGS"
+
+ HWLOC_X11_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+
fi
done
- HWLOC_X11_LIBS="-lX11"
-
fi
@@ -25005,6 +25338,14 @@ else
HWLOC_HAVE_BUNZIPP_FALSE=
fi
+ if test "x$hwloc_have_user32" = "xyes"; then
+ HWLOC_HAVE_USER32_TRUE=
+ HWLOC_HAVE_USER32_FALSE='#'
+else
+ HWLOC_HAVE_USER32_TRUE='#'
+ HWLOC_HAVE_USER32_FALSE=
+fi
+
if test "x$hwloc_generate_doxs" = "xyes"; then
HWLOC_BUILD_DOXYGEN_TRUE=
@@ -25128,6 +25469,14 @@ else
fi
+ if test "x$hwloc_x86_32" = "xyes" -o "x$hwloc_x86_64" = "xyes"; then
+ HWLOC_HAVE_X86_TRUE=
+ HWLOC_HAVE_X86_FALSE='#'
+else
+ HWLOC_HAVE_X86_TRUE='#'
+ HWLOC_HAVE_X86_FALSE=
+fi
+
if test "x$hwloc_x86_32" = "xyes"; then
HWLOC_HAVE_X86_32_TRUE=
HWLOC_HAVE_X86_32_FALSE='#'
@@ -25438,7 +25787,7 @@ else
fi
- if test -d "${with_blcr}/lib64}"; then :
+ if test -d "${with_blcr}/lib64"; then :
if echo "$LDFLAGS" | $FGREP -e "\<-L${with_blcr}/lib64\>" >/dev/null 2>&1; then :
@@ -25828,245 +26177,6 @@ fi
#########################################################################
-# FTB integration
-#########################################################################
-# FTB requires pthreads support; add pthreads to LIBS before trying to
-# find FTB
-
- if test -z "${pac_save_LIBS_nesting}" ; then
- pac_save_LIBS_nesting=0
- fi
- eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
-
-
-
- if echo "$LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lpthread', not prepending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-lpthread', prepending" >&5
- LIBS="-lpthread $LIBS"
-
-fi
-
-
-
-# Check whether --with-ftb was given.
-if test "${with_ftb+set}" = set; then :
- withval=$with_ftb; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ftb=PATH expects a valid PATH" >&2;}
- with_ftb="" ;; #(
- *) :
- ;;
-esac
-else
- with_ftb=
-fi
-
-
-# Check whether --with-ftb-include was given.
-if test "${with_ftb_include+set}" = set; then :
- withval=$with_ftb_include; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb-include=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ftb-include=PATH expects a valid PATH" >&2;}
- with_ftb_include="" ;; #(
- *) :
- ;;
-esac
-fi
-
-
-# Check whether --with-ftb-lib was given.
-if test "${with_ftb_lib+set}" = set; then :
- withval=$with_ftb_lib; case "$withval" in #(
- yes|no|'') :
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --without-ftb-lib=PATH expects a valid PATH" >&5
-$as_echo "$as_me: WARNING: --without-ftb-lib=PATH expects a valid PATH" >&2;}
- with_ftb_lib="" ;; #(
- *) :
- ;;
-esac
-fi
-
-
- # The args have been sanitized into empty/non-empty values above.
- # Now append -I/-L args to CPPFLAGS/LDFLAGS, with more specific options
- # taking priority
-
- if test -n "${with_ftb_include}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ftb_include}\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ftb_include}', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ftb_include}', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ftb_include}"
-
-fi
-
-else
- if test -n "${with_ftb}"; then :
-
-
- if echo "$CPPFLAGS" | $FGREP -e "\<-I${with_ftb}/include\>" >/dev/null 2>&1; then :
- echo "CPPFLAGS(='$CPPFLAGS') contains '-I${with_ftb}/include', not appending" >&5
-else
- echo "CPPFLAGS(='$CPPFLAGS') does not contain '-I${with_ftb}/include', appending" >&5
- CPPFLAGS="$CPPFLAGS -I${with_ftb}/include"
-
-fi
-
-fi
-fi
-
- if test -n "${with_ftb_lib}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb_lib}\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb_lib}', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb_lib}', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ftb_lib}"
-
-fi
-
-else
- if test -n "${with_ftb}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb}/lib\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb}/lib', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb}/lib', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ftb}/lib"
-
-fi
-
- if test -d "${with_ftb}/lib64}"; then :
-
-
- if echo "$LDFLAGS" | $FGREP -e "\<-L${with_ftb}/lib64\>" >/dev/null 2>&1; then :
- echo "LDFLAGS(='$LDFLAGS') contains '-L${with_ftb}/lib64', not appending" >&5
-else
- echo "LDFLAGS(='$LDFLAGS') does not contain '-L${with_ftb}/lib64', appending" >&5
- LDFLAGS="$LDFLAGS -L${with_ftb}/lib64"
-
-fi
-
-fi
-
-fi
-
-fi
-
-
- failure=no
- ac_fn_c_check_header_mongrel "$LINENO" "libftb.h" "ac_cv_header_libftb_h" "$ac_includes_default"
-if test "x$ac_cv_header_libftb_h" = xyes; then :
-
-else
- failure=yes
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FTB_Connect in -lftb" >&5
-$as_echo_n "checking for FTB_Connect in -lftb... " >&6; }
-if ${ac_cv_lib_ftb_FTB_Connect+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lftb $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char FTB_Connect ();
-int
-main ()
-{
-return FTB_Connect ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_ftb_FTB_Connect=yes
-else
- ac_cv_lib_ftb_FTB_Connect=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ftb_FTB_Connect" >&5
-$as_echo "$ac_cv_lib_ftb_FTB_Connect" >&6; }
-if test "x$ac_cv_lib_ftb_FTB_Connect" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBFTB 1
-_ACEOF
-
- LIBS="-lftb $LIBS"
-
-else
- failure=yes
-fi
-
- if test "$failure" = "no" ; then
- have_ftb=yes
- else
- have_ftb=no
- fi
-
-
- pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
- eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
- eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
-
-if test "$have_ftb" = "yes" ; then
- # FIXME: We need to test to make sure FTB works correctly
-
-
- if echo "$LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
- echo "LIBS(='$LIBS') contains '-lpthread', not appending" >&5
-else
- echo "LIBS(='$LIBS') does not contain '-lpthread', appending" >&5
- LIBS="$LIBS -lpthread"
-
-fi
-
-
-$as_echo "#define ENABLE_FTB 1" >>confdefs.h
-
-
-
- if echo "$WRAPPER_LIBS" | $FGREP -e "\<-lftb\>" >/dev/null 2>&1; then :
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') contains '-lftb', not appending" >&5
-else
- echo "WRAPPER_LIBS(='$WRAPPER_LIBS') does not contain '-lftb', appending" >&5
- WRAPPER_LIBS="$WRAPPER_LIBS -lftb"
-
-fi
-
-fi
- if test "${have_ftb}" = "yes"; then
- hydra_have_ftb_TRUE=
- hydra_have_ftb_FALSE='#'
-else
- hydra_have_ftb_TRUE='#'
- hydra_have_ftb_FALSE=
-fi
-
-
-
-#########################################################################
# Signals and friends
#########################################################################
for ac_func in strsignal
@@ -26510,6 +26620,10 @@ if test -z "${HWLOC_HAVE_BUNZIPP_TRUE}" && test -z "${HWLOC_HAVE_BUNZIPP_FALSE}"
as_fn_error $? "conditional \"HWLOC_HAVE_BUNZIPP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HWLOC_HAVE_USER32_TRUE}" && test -z "${HWLOC_HAVE_USER32_FALSE}"; then
+ as_fn_error $? "conditional \"HWLOC_HAVE_USER32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HWLOC_BUILD_DOXYGEN_TRUE}" && test -z "${HWLOC_BUILD_DOXYGEN_FALSE}"; then
as_fn_error $? "conditional \"HWLOC_BUILD_DOXYGEN\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -26570,6 +26684,10 @@ if test -z "${HWLOC_HAVE_MINGW32_TRUE}" && test -z "${HWLOC_HAVE_MINGW32_FALSE}"
as_fn_error $? "conditional \"HWLOC_HAVE_MINGW32\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HWLOC_HAVE_X86_TRUE}" && test -z "${HWLOC_HAVE_X86_FALSE}"; then
+ as_fn_error $? "conditional \"HWLOC_HAVE_X86\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HWLOC_HAVE_X86_32_TRUE}" && test -z "${HWLOC_HAVE_X86_32_FALSE}"; then
as_fn_error $? "conditional \"HWLOC_HAVE_X86_32\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -26638,10 +26756,6 @@ if test -z "${hydra_have_port_TRUE}" && test -z "${hydra_have_port_FALSE}"; then
as_fn_error $? "conditional \"hydra_have_port\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${hydra_have_ftb_TRUE}" && test -z "${hydra_have_ftb_FALSE}"; then
- as_fn_error $? "conditional \"hydra_have_ftb\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
@@ -27039,7 +27153,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Hydra $as_me 3.2, which was
+This file was extended by Hydra $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -27105,7 +27219,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-Hydra config.status 3.2
+Hydra config.status 3.3a2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/src/pm/hydra/configure.ac b/src/pm/hydra/configure.ac
index d994d4b..89e2812 100644
--- a/src/pm/hydra/configure.ac
+++ b/src/pm/hydra/configure.ac
@@ -132,22 +132,46 @@ PAC_POP_ALL_FLAGS
AC_DEFINE_UNQUOTED(HYDRA_CONFIGURE_ARGS_CLEAN,"`echo $ac_configure_args`",[Configure arguments])
-# Dirty hack -- If we are compiling within MPICH, use the MPL in the
-# src/mpl directory. If not, use the one we checked out separately for
-# Hydra.
-if test "$FROM_MPICH" = "yes" ; then
- mpl_srcdir="../../mpl"
- mpl_dist_srcdir=
-else
- mpl_srcdir="mpl"
- mpl_dist_srcdir="mpl"
- PAC_CONFIG_SUBDIR(mpl,,AC_ERROR(MPL configure failed))
-fi
-AC_SUBST(mpl_srcdir)
+# MPL
+AC_ARG_VAR([MPLLIBNAME],[can be used to override the name of the MPL library (default: "mpl")])
+MPLLIBNAME=${MPLLIBNAME:-"mpl"}
+export MPLLIBNAME
+AC_SUBST(MPLLIBNAME)
+AC_ARG_WITH([mpl-prefix],
+ [AS_HELP_STRING([[--with-mpl-prefix[=DIR]]],
+ [use the MPL library installed in DIR. Pass
+ "embedded" to force usage of the MPL source
+ distributed with Hydra.])],
+ [],dnl action-if-given
+ [with_mpl_prefix=embedded]) dnl action-if-not-given
+mpl_srcdir=""
+AC_SUBST([mpl_srcdir])
# Controls whether we recurse into the MPL dir when running "dist" rules like
# "make distclean". Technically we are cheating whenever DIST_SUBDIRS is not a
# superset of SUBDIRS, but we don't want to double-distclean and similar.
AC_SUBST(mpl_dist_srcdir)
+mpl_includedir=""
+AC_SUBST([mpl_includedir])
+mpl_libdir=""
+AC_SUBST([mpl_libdir])
+mpl_lib=""
+AC_SUBST([mpl_lib])
+if test "$with_mpl_prefix" = "embedded" ; then
+ mpl_srcdir="mpl"
+ mpl_dist_srcdir="mpl"
+ mpl_lib="mpl/lib${MPLLIBNAME}.la"
+ mpl_subdir_args="--disable-versioning --enable-embedded"
+ PAC_CONFIG_SUBDIR_ARGS([mpl],[$mpl_subdir_args],[],[AC_MSG_ERROR(MPL configure failed)])
+ mpl_includedir='-I$(top_builddir)/mpl/include -I$(top_srcdir)/mpl/include'
+else
+ # The user specified an already-installed MPL; just sanity check, don't
+ # subconfigure it
+ AS_IF([test -s "${with_mpl_prefix}/include/mplconfig.h"],
+ [:],[AC_MSG_ERROR([the MPL installation in "${with_mpl_prefix}" appears broken])])
+ mpl_includedir="-I${with_mpl_prefix}/include"
+ mpl_libdir="-L${with_mpl_prefix}/lib"
+ mpl_lib="-l${MPLLIBNAME}"
+fi
# Documentation
AC_PATH_PROG([DOXYGEN],[doxygen],,$PATH)
@@ -170,8 +194,8 @@ AC_SEARCH_LIBS(gethostbyname,nsl,)
AC_SEARCH_LIBS(hstrerror, resolv,)
# Check for necessary functions
-AC_CHECK_FUNCS(gettimeofday time strdup sigaction signal usleep alloca unsetenv \
- strerror strsignal stat fcntl alarm isatty inet_ntop getpgid \
+AC_CHECK_FUNCS(gettimeofday time sigaction signal usleep alloca unsetenv \
+ strsignal stat fcntl alarm isatty inet_ntop getpgid \
setsid killpg hstrerror)
if test "$ac_cv_func_hstrerror" = "yes" ; then
@@ -681,25 +705,6 @@ fi
#########################################################################
-# FTB integration
-#########################################################################
-# FTB requires pthreads support; add pthreads to LIBS before trying to
-# find FTB
-PAC_PUSH_FLAG([LIBS])
-PAC_PREPEND_FLAG([-lpthread],[LIBS])
-PAC_SET_HEADER_LIB_PATH(ftb)
-PAC_CHECK_HEADER_LIB(libftb.h, ftb, FTB_Connect, have_ftb=yes, have_ftb=no)
-PAC_POP_FLAG([LIBS])
-if test "$have_ftb" = "yes" ; then
- # FIXME: We need to test to make sure FTB works correctly
- PAC_APPEND_FLAG([-lpthread],[LIBS])
- AC_DEFINE(ENABLE_FTB,1,[Define if FTB is enabled])
- PAC_APPEND_FLAG([-lftb],[WRAPPER_LIBS])
-fi
-AM_CONDITIONAL([hydra_have_ftb], [test "${have_ftb}" = "yes"])
-
-
-#########################################################################
# Signals and friends
#########################################################################
AC_CHECK_FUNCS(strsignal)
diff --git a/src/pm/hydra/include/hydra.h b/src/pm/hydra/include/hydra.h
index 393c1de..13735e7 100644
--- a/src/pm/hydra/include/hydra.h
+++ b/src/pm/hydra/include/hydra.h
@@ -141,14 +141,14 @@ extern char *HYD_dbg_prefix;
printf("\n"); \
}
-#define HYD_CONVERT_FALSE_TO_NULL(x) \
+#define HYD_CONVERT_FALSE_TO_NULL(x) \
{ \
if (!(x)) { \
} \
else if (!strcasecmp((x), "none") || !strcasecmp((x), "no") || \
!strcasecmp((x), "dummy") || !strcasecmp((x), "null") || \
!strcasecmp((x), "nil") || !strcasecmp((x), "false")) { \
- HYDU_FREE((x)); \
+ MPL_free((x)); \
(x) = NULL; \
} \
}
@@ -158,7 +158,7 @@ extern char **environ;
#endif /* MANUAL_EXTERN_ENVIRON */
#if defined NEEDS_HSTRERROR_DECL
-const char * hstrerror(int err);
+const char *hstrerror(int err);
#endif /* NEEDS_HSTRERROR_DECL */
#if defined NEEDS_GETTIMEOFDAY_DECL
@@ -193,9 +193,9 @@ struct HYD_string_stash {
#define HYD_STRING_STASH(stash, str, status) \
do { \
if ((stash).cur_count >= (stash).max_count - 1) { \
- HYDU_REALLOC((stash).strlist, char **, \
- ((stash).max_count + HYD_NUM_TMP_STRINGS) * sizeof(char *), \
- (status)); \
+ HYDU_REALLOC_OR_JUMP((stash).strlist, char **, \
+ ((stash).max_count + HYD_NUM_TMP_STRINGS) * sizeof(char *), \
+ (status)); \
(stash).max_count += HYD_NUM_TMP_STRINGS; \
} \
(stash).strlist[(stash).cur_count++] = (str); \
@@ -205,13 +205,13 @@ struct HYD_string_stash {
#define HYD_STRING_SPIT(stash, str, status) \
do { \
if ((stash).cur_count == 0) { \
- (str) = HYDU_strdup(""); \
+ (str) = MPL_strdup(""); \
} \
else { \
(status) = HYDU_str_alloc_and_join((stash).strlist, &(str)); \
HYDU_ERR_POP((status), "unable to join strings\n"); \
HYDU_free_strlist((stash).strlist); \
- HYDU_FREE((stash).strlist); \
+ MPL_free((stash).strlist); \
HYD_STRING_STASH_INIT((stash)); \
} \
} while (0)
@@ -221,7 +221,7 @@ struct HYD_string_stash {
if ((stash).strlist == NULL) \
break; \
HYDU_free_strlist((stash).strlist); \
- HYDU_FREE((stash).strlist); \
+ MPL_free((stash).strlist); \
(stash).max_count = 0; \
(stash).cur_count = 0; \
} while (0)
@@ -273,8 +273,8 @@ struct HYD_arg_match_table {
/* Environment information */
struct HYD_env {
- const char *env_name;
- const char *env_value;
+ char *env_name;
+ char *env_value;
struct HYD_env *next;
};
@@ -441,26 +441,26 @@ struct HYD_user_global {
HYDU_dump_noprefix(stderr, __VA_ARGS__); \
}
#elif defined __FILE__
-#define HYDU_error_printf(...) \
- { \
+#define HYDU_error_printf(...) \
+ { \
HYDU_dump_prefix(stderr); \
HYDU_dump_noprefix(stderr, "%s (%d): ", __FILE__, __LINE__); \
HYDU_dump_noprefix(stderr, __VA_ARGS__); \
}
#else
-#define HYDU_error_printf(...) \
- { \
- HYDU_dump_prefix(stderr); \
- HYDU_dump_noprefix(stderr, __VA_ARGS__); \
+#define HYDU_error_printf(...) \
+ { \
+ HYDU_dump_prefix(stderr); \
+ HYDU_dump_noprefix(stderr, __VA_ARGS__); \
}
#endif
-#define HYDU_ASSERT(x, status) \
- { \
- if (!(x)) { \
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, \
- "assert (%s) failed\n", #x); \
- } \
+#define HYDU_ASSERT(x, status) \
+ { \
+ if (!(x)) { \
+ HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, \
+ "assert (%s) failed\n", #x); \
+ } \
}
#define HYDU_IGNORE_TIMEOUT(status) \
@@ -469,27 +469,27 @@ struct HYD_user_global {
(status) = HYD_SUCCESS; \
}
-#define HYDU_ERR_POP(status, ...) \
- { \
- if (status && !HYD_SILENT_ERROR(status)) { \
- HYDU_error_printf(__VA_ARGS__); \
- goto fn_fail; \
- } \
- else if (HYD_SILENT_ERROR(status)) { \
- goto fn_exit; \
- } \
+#define HYDU_ERR_POP(status, ...) \
+ { \
+ if (status && !HYD_SILENT_ERROR(status)) { \
+ HYDU_error_printf(__VA_ARGS__); \
+ goto fn_fail; \
+ } \
+ else if (HYD_SILENT_ERROR(status)) { \
+ goto fn_exit; \
+ } \
}
-#define HYDU_ERR_SETANDJUMP(status, error, ...) \
- { \
- status = error; \
- HYDU_ERR_POP(status, __VA_ARGS__); \
+#define HYDU_ERR_SETANDJUMP(status, error, ...) \
+ { \
+ status = error; \
+ HYDU_ERR_POP(status, __VA_ARGS__); \
}
-#define HYDU_ERR_CHKANDJUMP(status, chk, error, ...) \
- { \
- if ((chk)) \
- HYDU_ERR_SETANDJUMP(status, error, __VA_ARGS__); \
+#define HYDU_ERR_CHKANDJUMP(status, chk, error, ...) \
+ { \
+ if ((chk)) \
+ HYDU_ERR_SETANDJUMP(status, error, __VA_ARGS__); \
}
#if defined ENABLE_WARNINGS
@@ -598,6 +598,7 @@ HYD_status HYDU_sock_write(int fd, const void *buf, int maxlen, int *sent, int *
enum HYDU_sock_comm_flag flag);
HYD_status HYDU_sock_set_nonblock(int fd);
HYD_status HYDU_sock_forward_stdio(int in, int out, int *closed);
+void HYDU_sock_finalize(void);
HYD_status HYDU_sock_get_iface_ip(char *iface, char **ip);
HYD_status HYDU_sock_is_local(char *host, int *is_local);
HYD_status
@@ -611,63 +612,27 @@ HYD_status HYDU_sock_cloexec(int fd);
/* Memory utilities */
#include <ctype.h>
-#if defined USE_MEMORY_TRACING
-
-#define HYDU_mem_init() MPL_trinit(0)
-
-#define HYDU_strdup(a) MPL_trstrdup(a,__LINE__,__FILE__)
-#ifdef strdup
-#undef strdup
-#endif
-#define strdup(a) 'Error use HYDU_strdup' :::
-
-#define HYDU_malloc(a) MPL_trmalloc((unsigned)(a),__LINE__,__FILE__)
-#define malloc(a) 'Error use HYDU_malloc' :::
-
-#define HYDU_realloc(a,b) MPL_trrealloc((void *)(a),(unsigned)(b),__LINE__,__FILE__)
-#define realloc(a) 'Error use HYDU_realloc' :::
-
-#define HYDU_free(a) MPL_trfree(a,__LINE__,__FILE__)
-#define free(a) 'Error use HYDU_free' :::
-
-#else /* if !defined USE_MEMORY_TRACING */
-
-#define HYDU_mem_init()
-#define HYDU_strdup MPL_strdup
-#define HYDU_malloc malloc
-#define HYDU_realloc realloc
-#define HYDU_free free
-
-#endif /* USE_MEMORY_TRACING */
-
-#define HYDU_snprintf MPL_snprintf
-
-#define HYDU_MALLOC(p, type, size, status) \
+#define HYDU_MALLOC_OR_JUMP(p, type, size, status) \
{ \
(p) = NULL; /* initialize p in case assert fails */ \
HYDU_ASSERT(size, status); \
- (p) = (type) HYDU_malloc((size)); \
+ (p) = (type) MPL_malloc((size)); \
if ((p) == NULL) \
HYDU_ERR_SETANDJUMP((status), HYD_NO_MEM, \
"failed to allocate %d bytes\n", \
(int) (size)); \
}
-#define HYDU_REALLOC(p, type, size, status) \
+#define HYDU_REALLOC_OR_JUMP(p, type, size, status) \
{ \
HYDU_ASSERT(size, status); \
- (p) = (type) HYDU_realloc((p),(size)); \
+ (p) = (type) MPL_realloc((p),(size)); \
if ((p) == NULL) \
HYDU_ERR_SETANDJUMP((status), HYD_NO_MEM, \
"failed to allocate %d bytes\n", \
(int) (size)); \
}
-#define HYDU_FREE(p) \
- { \
- HYDU_free((void *) p); \
- }
-
HYD_status HYDU_list_append_strlist(char **exec, char **client_arg);
HYD_status HYDU_print_strlist(char **args);
void HYDU_free_strlist(char **args);
@@ -678,12 +643,6 @@ char *HYDU_size_t_to_str(size_t x);
char *HYDU_int_to_str(int x);
char *HYDU_int_to_str_pad(int x, int maxlen);
-#if defined HAVE_STRERROR
-#define HYDU_strerror strerror
-#else
-#define HYDU_strerror HYDU_int_to_str
-#endif /* HAVE_STRERROR */
-
#if defined HAVE_HERROR
#define HYDU_herror herror
#else
diff --git a/src/pm/hydra/include/hydra_config.h.in b/src/pm/hydra/include/hydra_config.h.in
index 64a2f74..7776ee3 100644
--- a/src/pm/hydra/include/hydra_config.h.in
+++ b/src/pm/hydra/include/hydra_config.h.in
@@ -1,8 +1,5 @@
/* include/hydra_config.h.in. Generated from configure.ac by autoheader. */
-/* Define if FTB is enabled */
-#undef ENABLE_FTB
-
/* Define if profiling enabled */
#undef ENABLE_PROFILING
@@ -103,10 +100,25 @@
0 if you don't. */
#undef HAVE_DECL_PTHREAD_SETAFFINITY_NP
+/* Embedded mode; just assume we do not have Valgrind support */
+#undef HAVE_DECL_RUNNING_ON_VALGRIND
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SNPRINTF
+
+/* Define to 1 if you have the declaration of `strcasecmp', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRCASECMP
+
/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
don't. */
#undef HAVE_DECL_STRTOULL
+/* Define to 1 if you have the declaration of `_putenv', and to 0 if you
+ don't. */
+#undef HAVE_DECL__PUTENV
+
/* Define to 1 if you have the declaration of `_SC_LARGE_PAGESIZE', and to 0
if you don't. */
#undef HAVE_DECL__SC_LARGE_PAGESIZE
@@ -135,6 +147,10 @@
don't. */
#undef HAVE_DECL__SC_PAGE_SIZE
+/* Define to 1 if you have the declaration of `_strdup', and to 0 if you
+ don't. */
+#undef HAVE_DECL__STRDUP
+
/* Define to 1 if you have the <dirent.h> header file. */
#undef HAVE_DIRENT_H
@@ -225,9 +241,6 @@
/* Define to 1 if you have the `cr' library (-lcr). */
#undef HAVE_LIBCR
-/* Define to 1 if you have the `ftb' library (-lftb). */
-#undef HAVE_LIBFTB
-
/* Define to 1 if we have -lgdi32 */
#undef HAVE_LIBGDI32
@@ -309,6 +322,9 @@
/* Define to 1 if the system has the type `PROCESSOR_GROUP_INFO'. */
#undef HAVE_PROCESSOR_GROUP_INFO
+/* Define to 1 if the system has the type `PROCESSOR_NUMBER'. */
+#undef HAVE_PROCESSOR_NUMBER
+
/* Define to 1 if the system has the type `PROCESSOR_RELATIONSHIP'. */
#undef HAVE_PROCESSOR_RELATIONSHIP
@@ -358,6 +374,9 @@
/* Define to 1 if you have the `sigset' function. */
#undef HAVE_SIGSET
+/* Define to 1 if the system has the type `ssize_t'. */
+#undef HAVE_SSIZE_T
+
/* Define to 1 if you have the `stat' function. */
#undef HAVE_STAT
@@ -367,12 +386,6 @@
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
/* Define to 1 if you have the `strftime' function. */
#undef HAVE_STRFTIME
@@ -388,6 +401,9 @@
/* Define to 1 if you have the `strsignal' function. */
#undef HAVE_STRSIGNAL
+/* Define to 1 if you have the `strtoull' function. */
+#undef HAVE_STRTOULL
+
/* Define to '1' if sysctl is present and usable */
#undef HAVE_SYSCTL
@@ -456,6 +472,9 @@
/* Define to 1 if you have the `usleep' function. */
#undef HAVE_USLEEP
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+#undef HAVE_VALGRIND_VALGRIND_H
+
/* Define to 1 if you have the <windows.h> header file. */
#undef HAVE_WINDOWS_H
@@ -609,6 +628,9 @@
/* Define to 1 if you have the GL module components. */
#undef HWLOC_HAVE_GL
+/* Define to 1 if you have libudev. */
+#undef HWLOC_HAVE_LIBUDEV
+
/* Define to 1 if you have the `libxml2' library. */
#undef HWLOC_HAVE_LIBXML2
@@ -621,6 +643,9 @@
/* Define to 1 if migrate_pages is available. */
#undef HWLOC_HAVE_MIGRATE_PAGES
+/* Define to 1 if move_pages is available. */
+#undef HWLOC_HAVE_MOVE_PAGES
+
/* Define to 1 if you have the `NVML' library. */
#undef HWLOC_HAVE_NVML
@@ -650,6 +675,9 @@
/* Define to 1 if you have the <stdint.h> header file. */
#undef HWLOC_HAVE_STDINT_H
+/* Define to 1 if function `syscall' is available */
+#undef HWLOC_HAVE_SYSCALL
+
/* Define to 1 if you have the `windows.h' header. */
#undef HWLOC_HAVE_WINDOWS_H
@@ -659,9 +687,6 @@
/* Define to 1 if you have x86 cpuid */
#undef HWLOC_HAVE_X86_CPUID
-/* Define to 1 if the _syscall3 macro works */
-#undef HWLOC_HAVE__SYSCALL3
-
/* Define to 1 on HP-UX */
#undef HWLOC_HPUX_SYS
diff --git a/src/pm/hydra/mpichprereq b/src/pm/hydra/mpichprereq
index bfbf778..d6aa9f6 100755
--- a/src/pm/hydra/mpichprereq
+++ b/src/pm/hydra/mpichprereq
@@ -10,7 +10,7 @@ if test -z "$PM_REQUIRES_PMI" ; then
else
PM_REQUIRES_PMI=simple
fi
-elif test "$PM_REQUIRES_PMI" != "simple" -a "$PM_REQUIRES_PMI" != "pmi2/simple" -a "$PM_REQUIRES_PMI" != "pmi2/poe"; then
+elif test "$PM_REQUIRES_PMI" != "simple" -a "$PM_REQUIRES_PMI" != "pmi2/simple" ; then
echo "hydra requires the \"simple\" or \"pmi2\" PMI implementation; \"$PM_REQUIRES_PMI\" has already been selected"
exit 1
fi
diff --git a/src/pm/hydra/mpl/Makefile.am b/src/pm/hydra/mpl/Makefile.am
index d4a8675..eb73cca 100644
--- a/src/pm/hydra/mpl/Makefile.am
+++ b/src/pm/hydra/mpl/Makefile.am
@@ -7,37 +7,38 @@
ACLOCAL_AMFLAGS = -I confdb
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
-noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
-lib at MPLLIBNAME@_la_SOURCES = \
- src/mplstr.c \
- src/mpltrmem.c \
- src/mplenv.c \
- src/mplmsg.c \
- src/mplsock.c
+lib at MPLLIBNAME@_la_SOURCES =
lib at MPLLIBNAME@_la_LDFLAGS = ${lib at MPLLIBNAME@_so_versionflags}
+include src/Makefile.mk
+
MPL_TESTS = strsep
TESTS = $(MPL_TESTS)
check_PROGRAMS = $(MPL_TESTS)
strsep_SOURCES = test/strsep.c
strsep_LDADD = lib at MPLLIBNAME@.la
-mpl_headers = \
- include/mpl.h \
- include/mpl_utlist.h \
- include/mpl_valgrind.h \
- include/mplconfig.h \
- include/mplenv.h \
- include/mplstr.h \
- include/mpltrmem.h \
- include/mplmsg.h \
- include/mpliov.h \
- include/mplsock.h
+mpl_headers = \
+ include/mpl.h \
+ include/mpl_base.h \
+ include/mplconfig.h \
+ include/mpl_utlist.h \
+ include/mpl_valgrind.h \
+ include/mpl_env.h \
+ include/mpl_str.h \
+ include/mpl_trmem.h \
+ include/mpl_msg.h \
+ include/mpl_sock.h \
+ include/mpl_iov.h \
+ include/mpl_bt.h \
+ include/mpl_shm.h
if MPL_EMBEDDED_MODE
noinst_HEADERS = $(mpl_headers)
+noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
else !MPL_EMBEDDED_MODE
include_HEADERS = $(mpl_headers)
+lib_LTLIBRARIES = lib at MPLLIBNAME@.la
endif !MPL_EMBEDDED_MODE
# --------------------------------------------------------------------------
diff --git a/src/pm/hydra/mpl/Makefile.in b/src/pm/hydra/mpl/Makefile.in
index b4b243b..b9a1275 100644
--- a/src/pm/hydra/mpl/Makefile.in
+++ b/src/pm/hydra/mpl/Makefile.in
@@ -20,6 +20,48 @@
# See COPYRIGHT in top-level directory.
#
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -101,9 +143,10 @@ subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cc.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
+ $(top_srcdir)/confdb/aclocal_shm.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
$(top_srcdir)/confdb/ax_prefix_config_h.m4 \
- $(top_srcdir)/confdb/libtool.m4 \
+ $(top_srcdir)/confdb/ax_tls.m4 $(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
$(top_srcdir)/confdb/ltsugar.m4 \
$(top_srcdir)/confdb/ltversion.m4 \
@@ -117,13 +160,57 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES = localdefs
+CONFIG_CLEAN_FILES = localdefs include/mpl_timer.h
CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
lib at MPLLIBNAME@_la_LIBADD =
am__dirstamp = $(am__leading_dot)dirstamp
-am_lib at MPLLIBNAME@_la_OBJECTS = src/mplstr.lo src/mpltrmem.lo \
- src/mplenv.lo src/mplmsg.lo src/mplsock.lo
+am_lib at MPLLIBNAME@_la_OBJECTS = src/bt/mpl_bt.lo src/dbg/mpl_dbg.lo \
+ src/env/mpl_env.lo src/mem/mpl_trmem.lo src/msg/mpl_msg.lo \
+ src/sock/mpl_sock.lo src/str/mpl_str.lo src/str/mpl_argstr.lo \
+ src/thread/mpl_thread.lo src/thread/mpl_thread_win.lo \
+ src/thread/mpl_thread_solaris.lo \
+ src/thread/mpl_thread_posix.lo \
+ src/timer/mpl_timer_clock_gettime.lo \
+ src/timer/mpl_timer_gcc_ia64_cycle.lo \
+ src/timer/mpl_timer_gethrtime.lo \
+ src/timer/mpl_timer_gettimeofday.lo \
+ src/timer/mpl_timer_linux86_cycle.lo \
+ src/timer/mpl_timer_ppc64_cycle.lo \
+ src/timer/mpl_timer_mach_absolute_time.lo \
+ src/timer/mpl_timer_query_performance_counter.lo \
+ src/timer/mpl_timer_win86_cycle.lo \
+ src/timer/mpl_timer_device.lo src/shm/mpl_shm.lo \
+ src/shm/mpl_shm_sysv.lo src/shm/mpl_shm_mmap.lo \
+ src/shm/mpl_shm_win.lo
lib at MPLLIBNAME@_la_OBJECTS = $(am_lib at MPLLIBNAME@_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -133,6 +220,9 @@ lib at MPLLIBNAME@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(lib at MPLLIBNAME@_la_LDFLAGS) \
$(LDFLAGS) -o $@
+ at MPL_EMBEDDED_MODE_FALSE@am_lib at MPLLIBNAME@_la_rpath = -rpath \
+ at MPL_EMBEDDED_MODE_FALSE@ $(libdir)
+ at MPL_EMBEDDED_MODE_TRUE@am_lib at MPLLIBNAME@_la_rpath =
am__EXEEXT_1 = strsep$(EXEEXT)
am_strsep_OBJECTS = test/strsep.$(OBJEXT)
strsep_OBJECTS = $(am_strsep_OBJECTS)
@@ -178,42 +268,16 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
-am__include_HEADERS_DIST = include/mpl.h include/mpl_utlist.h \
- include/mpl_valgrind.h include/mplconfig.h include/mplenv.h \
- include/mplstr.h include/mpltrmem.h include/mplmsg.h \
- include/mpliov.h include/mplsock.h
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
- test -z "$$files" \
- || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
- || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
- $(am__cd) "$$dir" && rm -f $$files; }; \
- }
-am__installdirs = "$(DESTDIR)$(includedir)"
-am__noinst_HEADERS_DIST = include/mpl.h include/mpl_utlist.h \
- include/mpl_valgrind.h include/mplconfig.h include/mplenv.h \
- include/mplstr.h include/mpltrmem.h include/mplmsg.h \
- include/mpliov.h include/mplsock.h
+am__include_HEADERS_DIST = include/mpl.h include/mpl_base.h \
+ include/mplconfig.h include/mpl_utlist.h \
+ include/mpl_valgrind.h include/mpl_env.h include/mpl_str.h \
+ include/mpl_trmem.h include/mpl_msg.h include/mpl_sock.h \
+ include/mpl_iov.h include/mpl_bt.h include/mpl_shm.h
+am__noinst_HEADERS_DIST = include/mpl.h include/mpl_base.h \
+ include/mplconfig.h include/mpl_utlist.h \
+ include/mpl_valgrind.h include/mpl_env.h include/mpl_str.h \
+ include/mpl_trmem.h include/mpl_msg.h include/mpl_sock.h \
+ include/mpl_iov.h include/mpl_bt.h include/mpl_shm.h
HEADERS = $(include_HEADERS) $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
@@ -413,15 +477,21 @@ TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/confdb/test-driver
TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
$(TEST_LOG_FLAGS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/localdefs.in \
- $(top_srcdir)/confdb/ar-lib $(top_srcdir)/confdb/compile \
- $(top_srcdir)/confdb/config.guess \
+ $(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk \
+ $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk \
+ $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk \
+ $(srcdir)/src/shm/Makefile.mk $(srcdir)/src/sock/Makefile.mk \
+ $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk \
+ $(srcdir)/src/timer/Makefile.mk $(top_srcdir)/confdb/ar-lib \
+ $(top_srcdir)/confdb/compile $(top_srcdir)/confdb/config.guess \
$(top_srcdir)/confdb/config.sub $(top_srcdir)/confdb/depcomp \
$(top_srcdir)/confdb/install-sh $(top_srcdir)/confdb/ltmain.sh \
$(top_srcdir)/confdb/missing $(top_srcdir)/confdb/test-driver \
- $(top_srcdir)/include/config.h.in confdb/ar-lib confdb/compile \
- confdb/config.guess confdb/config.rpath confdb/config.sub \
- confdb/depcomp confdb/install-sh confdb/ltmain.sh \
- confdb/missing
+ $(top_srcdir)/include/config.h.in \
+ $(top_srcdir)/include/mpl_timer.h.in confdb/ar-lib \
+ confdb/compile confdb/config.guess confdb/config.rpath \
+ confdb/config.sub confdb/depcomp confdb/install-sh \
+ confdb/ltmain.sh confdb/missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -464,7 +534,6 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-FROM_MPICH = @FROM_MPICH@
GCOV = @GCOV@
GREP = @GREP@
INSTALL = @INSTALL@
@@ -485,6 +554,8 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPLLIBNAME = @MPLLIBNAME@
+MPL_TIMER_KIND = @MPL_TIMER_KIND@
+MPL_TIMER_TYPE = @MPL_TIMER_TYPE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -551,6 +622,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -561,32 +633,45 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I confdb
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
-noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
-lib at MPLLIBNAME@_la_SOURCES = \
- src/mplstr.c \
- src/mpltrmem.c \
- src/mplenv.c \
- src/mplmsg.c \
- src/mplsock.c
-
+lib at MPLLIBNAME@_la_SOURCES = src/bt/mpl_bt.c src/dbg/mpl_dbg.c \
+ src/env/mpl_env.c src/mem/mpl_trmem.c src/msg/mpl_msg.c \
+ src/sock/mpl_sock.c src/str/mpl_str.c src/str/mpl_argstr.c \
+ src/thread/mpl_thread.c src/thread/mpl_thread_win.c \
+ src/thread/mpl_thread_solaris.c src/thread/mpl_thread_posix.c \
+ src/timer/mpl_timer_clock_gettime.c \
+ src/timer/mpl_timer_gcc_ia64_cycle.c \
+ src/timer/mpl_timer_gethrtime.c \
+ src/timer/mpl_timer_gettimeofday.c \
+ src/timer/mpl_timer_linux86_cycle.c \
+ src/timer/mpl_timer_ppc64_cycle.c \
+ src/timer/mpl_timer_mach_absolute_time.c \
+ src/timer/mpl_timer_query_performance_counter.c \
+ src/timer/mpl_timer_win86_cycle.c src/timer/mpl_timer_device.c \
+ src/shm/mpl_shm.c src/shm/mpl_shm_sysv.c \
+ src/shm/mpl_shm_mmap.c src/shm/mpl_shm_win.c
lib at MPLLIBNAME@_la_LDFLAGS = ${lib at MPLLIBNAME@_so_versionflags}
MPL_TESTS = strsep
strsep_SOURCES = test/strsep.c
strsep_LDADD = lib at MPLLIBNAME@.la
mpl_headers = \
- include/mpl.h \
- include/mpl_utlist.h \
- include/mpl_valgrind.h \
- include/mplconfig.h \
- include/mplenv.h \
- include/mplstr.h \
- include/mpltrmem.h \
- include/mplmsg.h \
- include/mpliov.h \
- include/mplsock.h
+ include/mpl.h \
+ include/mpl_base.h \
+ include/mplconfig.h \
+ include/mpl_utlist.h \
+ include/mpl_valgrind.h \
+ include/mpl_env.h \
+ include/mpl_str.h \
+ include/mpl_trmem.h \
+ include/mpl_msg.h \
+ include/mpl_sock.h \
+ include/mpl_iov.h \
+ include/mpl_bt.h \
+ include/mpl_shm.h
@MPL_EMBEDDED_MODE_TRUE at noinst_HEADERS = $(mpl_headers)
+ at MPL_EMBEDDED_MODE_TRUE@noinst_LTLIBRARIES = lib at MPLLIBNAME@.la
@MPL_EMBEDDED_MODE_FALSE at include_HEADERS = $(mpl_headers)
+ at MPL_EMBEDDED_MODE_FALSE@lib_LTLIBRARIES = lib at MPLLIBNAME@.la
gcov_sources = $(libmpl_la_SOURCES)
# --------------------------------------------------------------------------
@@ -600,7 +685,7 @@ all: all-am
.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk $(srcdir)/src/sock/Makefile.mk $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk $(srcdir)/src/timer/Makefile.mk $(srcdir)/src/shm/Makefile.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -622,6 +707,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
+$(srcdir)/src/Makefile.mk $(srcdir)/src/bt/Makefile.mk $(srcdir)/src/dbg/Makefile.mk $(srcdir)/src/env/Makefile.mk $(srcdir)/src/mem/Makefile.mk $(srcdir)/src/msg/Makefile.mk $(srcdir)/src/sock/Makefile.mk $(srcdir)/src/str/Makefile.mk $(srcdir)/src/thread/Makefile.mk $(srcdir)/src/timer/Makefile.mk $(srcdir)/src/shm/Makefile.mk $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -648,6 +734,43 @@ distclean-hdr:
-rm -f include/config.h include/stamp-h1
localdefs: $(top_builddir)/config.status $(srcdir)/localdefs.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+include/mpl_timer.h: $(top_builddir)/config.status $(top_srcdir)/include/mpl_timer.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@@ -659,20 +782,121 @@ clean-noinstLTLIBRARIES:
echo rm -f $${locs}; \
rm -f $${locs}; \
}
-src/$(am__dirstamp):
- @$(MKDIR_P) src
- @: > src/$(am__dirstamp)
-src/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/$(DEPDIR)
- @: > src/$(DEPDIR)/$(am__dirstamp)
-src/mplstr.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mpltrmem.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mplenv.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mplmsg.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
-src/mplsock.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/bt/$(am__dirstamp):
+ @$(MKDIR_P) src/bt
+ @: > src/bt/$(am__dirstamp)
+src/bt/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/bt/$(DEPDIR)
+ @: > src/bt/$(DEPDIR)/$(am__dirstamp)
+src/bt/mpl_bt.lo: src/bt/$(am__dirstamp) \
+ src/bt/$(DEPDIR)/$(am__dirstamp)
+src/dbg/$(am__dirstamp):
+ @$(MKDIR_P) src/dbg
+ @: > src/dbg/$(am__dirstamp)
+src/dbg/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/dbg/$(DEPDIR)
+ @: > src/dbg/$(DEPDIR)/$(am__dirstamp)
+src/dbg/mpl_dbg.lo: src/dbg/$(am__dirstamp) \
+ src/dbg/$(DEPDIR)/$(am__dirstamp)
+src/env/$(am__dirstamp):
+ @$(MKDIR_P) src/env
+ @: > src/env/$(am__dirstamp)
+src/env/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/env/$(DEPDIR)
+ @: > src/env/$(DEPDIR)/$(am__dirstamp)
+src/env/mpl_env.lo: src/env/$(am__dirstamp) \
+ src/env/$(DEPDIR)/$(am__dirstamp)
+src/mem/$(am__dirstamp):
+ @$(MKDIR_P) src/mem
+ @: > src/mem/$(am__dirstamp)
+src/mem/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/mem/$(DEPDIR)
+ @: > src/mem/$(DEPDIR)/$(am__dirstamp)
+src/mem/mpl_trmem.lo: src/mem/$(am__dirstamp) \
+ src/mem/$(DEPDIR)/$(am__dirstamp)
+src/msg/$(am__dirstamp):
+ @$(MKDIR_P) src/msg
+ @: > src/msg/$(am__dirstamp)
+src/msg/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/msg/$(DEPDIR)
+ @: > src/msg/$(DEPDIR)/$(am__dirstamp)
+src/msg/mpl_msg.lo: src/msg/$(am__dirstamp) \
+ src/msg/$(DEPDIR)/$(am__dirstamp)
+src/sock/$(am__dirstamp):
+ @$(MKDIR_P) src/sock
+ @: > src/sock/$(am__dirstamp)
+src/sock/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/sock/$(DEPDIR)
+ @: > src/sock/$(DEPDIR)/$(am__dirstamp)
+src/sock/mpl_sock.lo: src/sock/$(am__dirstamp) \
+ src/sock/$(DEPDIR)/$(am__dirstamp)
+src/str/$(am__dirstamp):
+ @$(MKDIR_P) src/str
+ @: > src/str/$(am__dirstamp)
+src/str/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/str/$(DEPDIR)
+ @: > src/str/$(DEPDIR)/$(am__dirstamp)
+src/str/mpl_str.lo: src/str/$(am__dirstamp) \
+ src/str/$(DEPDIR)/$(am__dirstamp)
+src/str/mpl_argstr.lo: src/str/$(am__dirstamp) \
+ src/str/$(DEPDIR)/$(am__dirstamp)
+src/thread/$(am__dirstamp):
+ @$(MKDIR_P) src/thread
+ @: > src/thread/$(am__dirstamp)
+src/thread/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/thread/$(DEPDIR)
+ @: > src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_win.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_solaris.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/thread/mpl_thread_posix.lo: src/thread/$(am__dirstamp) \
+ src/thread/$(DEPDIR)/$(am__dirstamp)
+src/timer/$(am__dirstamp):
+ @$(MKDIR_P) src/timer
+ @: > src/timer/$(am__dirstamp)
+src/timer/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/timer/$(DEPDIR)
+ @: > src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_clock_gettime.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gcc_ia64_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gethrtime.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_gettimeofday.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_linux86_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_ppc64_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_mach_absolute_time.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_query_performance_counter.lo: \
+ src/timer/$(am__dirstamp) src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_win86_cycle.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/timer/mpl_timer_device.lo: src/timer/$(am__dirstamp) \
+ src/timer/$(DEPDIR)/$(am__dirstamp)
+src/shm/$(am__dirstamp):
+ @$(MKDIR_P) src/shm
+ @: > src/shm/$(am__dirstamp)
+src/shm/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/shm/$(DEPDIR)
+ @: > src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_sysv.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_mmap.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
+src/shm/mpl_shm_win.lo: src/shm/$(am__dirstamp) \
+ src/shm/$(DEPDIR)/$(am__dirstamp)
lib at MPLLIBNAME@.la: $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_DEPENDENCIES) $(EXTRA_lib at MPLLIBNAME@_la_DEPENDENCIES)
- $(AM_V_CCLD)$(lib at MPLLIBNAME@_la_LINK) $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(lib at MPLLIBNAME@_la_LINK) $(am_lib at MPLLIBNAME@_la_rpath) $(lib at MPLLIBNAME@_la_OBJECTS) $(lib at MPLLIBNAME@_la_LIBADD) $(LIBS)
clean-checkPROGRAMS:
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
@@ -697,18 +921,57 @@ strsep$(EXEEXT): $(strsep_OBJECTS) $(strsep_DEPENDENCIES) $(EXTRA_strsep_DEPENDE
mostlyclean-compile:
-rm -f *.$(OBJEXT)
- -rm -f src/*.$(OBJEXT)
- -rm -f src/*.lo
+ -rm -f src/bt/*.$(OBJEXT)
+ -rm -f src/bt/*.lo
+ -rm -f src/dbg/*.$(OBJEXT)
+ -rm -f src/dbg/*.lo
+ -rm -f src/env/*.$(OBJEXT)
+ -rm -f src/env/*.lo
+ -rm -f src/mem/*.$(OBJEXT)
+ -rm -f src/mem/*.lo
+ -rm -f src/msg/*.$(OBJEXT)
+ -rm -f src/msg/*.lo
+ -rm -f src/shm/*.$(OBJEXT)
+ -rm -f src/shm/*.lo
+ -rm -f src/sock/*.$(OBJEXT)
+ -rm -f src/sock/*.lo
+ -rm -f src/str/*.$(OBJEXT)
+ -rm -f src/str/*.lo
+ -rm -f src/thread/*.$(OBJEXT)
+ -rm -f src/thread/*.lo
+ -rm -f src/timer/*.$(OBJEXT)
+ -rm -f src/timer/*.lo
-rm -f test/*.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplenv.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplmsg.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplsock.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mplstr.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/mpltrmem.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/bt/$(DEPDIR)/mpl_bt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/dbg/$(DEPDIR)/mpl_dbg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/env/$(DEPDIR)/mpl_env.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/mem/$(DEPDIR)/mpl_trmem.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/msg/$(DEPDIR)/mpl_msg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_mmap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_sysv.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/shm/$(DEPDIR)/mpl_shm_win.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/sock/$(DEPDIR)/mpl_sock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/str/$(DEPDIR)/mpl_argstr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/str/$(DEPDIR)/mpl_str.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_posix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_solaris.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/thread/$(DEPDIR)/mpl_thread_win.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_clock_gettime.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_device.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gcc_ia64_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gethrtime.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_gettimeofday.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_linux86_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_mach_absolute_time.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_ppc64_cycle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_query_performance_counter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/timer/$(DEPDIR)/mpl_timer_win86_cycle.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at test/$(DEPDIR)/strsep.Po at am__quote@
.c.o:
@@ -740,7 +1003,16 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
- -rm -rf src/.libs src/_libs
+ -rm -rf src/bt/.libs src/bt/_libs
+ -rm -rf src/dbg/.libs src/dbg/_libs
+ -rm -rf src/env/.libs src/env/_libs
+ -rm -rf src/mem/.libs src/mem/_libs
+ -rm -rf src/msg/.libs src/msg/_libs
+ -rm -rf src/shm/.libs src/shm/_libs
+ -rm -rf src/sock/.libs src/sock/_libs
+ -rm -rf src/str/.libs src/str/_libs
+ -rm -rf src/thread/.libs src/thread/_libs
+ -rm -rf src/timer/.libs src/timer/_libs
distclean-libtool:
-rm -f libtool config.lt
@@ -1157,7 +1429,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(includedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -1189,8 +1461,26 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
- -rm -f src/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/$(am__dirstamp)
+ -rm -f src/bt/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/bt/$(am__dirstamp)
+ -rm -f src/dbg/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/dbg/$(am__dirstamp)
+ -rm -f src/env/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/env/$(am__dirstamp)
+ -rm -f src/mem/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/mem/$(am__dirstamp)
+ -rm -f src/msg/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/msg/$(am__dirstamp)
+ -rm -f src/shm/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/shm/$(am__dirstamp)
+ -rm -f src/sock/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/sock/$(am__dirstamp)
+ -rm -f src/str/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/str/$(am__dirstamp)
+ -rm -f src/thread/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/thread/$(am__dirstamp)
+ -rm -f src/timer/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/timer/$(am__dirstamp)
-rm -f test/$(DEPDIR)/$(am__dirstamp)
-rm -f test/$(am__dirstamp)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
@@ -1200,12 +1490,12 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
- clean-noinstLTLIBRARIES mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf src/$(DEPDIR) test/$(DEPDIR)
+ -rm -rf src/bt/$(DEPDIR) src/dbg/$(DEPDIR) src/env/$(DEPDIR) src/mem/$(DEPDIR) src/msg/$(DEPDIR) src/shm/$(DEPDIR) src/sock/$(DEPDIR) src/str/$(DEPDIR) src/thread/$(DEPDIR) src/timer/$(DEPDIR) test/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags
@@ -1228,7 +1518,7 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am:
+install-exec-am: install-libLTLIBRARIES
install-html: install-html-am
@@ -1253,7 +1543,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf src/$(DEPDIR) test/$(DEPDIR)
+ -rm -rf src/bt/$(DEPDIR) src/dbg/$(DEPDIR) src/env/$(DEPDIR) src/mem/$(DEPDIR) src/msg/$(DEPDIR) src/shm/$(DEPDIR) src/sock/$(DEPDIR) src/str/$(DEPDIR) src/thread/$(DEPDIR) src/timer/$(DEPDIR) test/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1270,28 +1560,29 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-includeHEADERS
+uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
.MAKE: check-am install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \
check-am clean clean-checkPROGRAMS clean-cscope clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscope cscopelist-am \
- ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
- dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
- distclean-compile distclean-generic distclean-hdr \
- distclean-libtool distclean-tags distcleancheck distdir \
- distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-includeHEADERS install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- recheck tags tags-am uninstall uninstall-am \
- uninstall-includeHEADERS
+ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
+ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-includeHEADERS \
+ install-info install-info-am install-libLTLIBRARIES \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
+ uninstall uninstall-am uninstall-includeHEADERS \
+ uninstall-libLTLIBRARIES
.PRECIOUS: Makefile
diff --git a/src/pm/hydra/mpl/aclocal.m4 b/src/pm/hydra/mpl/aclocal.m4
index 68cfa1e..abd5f4b 100644
--- a/src/pm/hydra/mpl/aclocal.m4
+++ b/src/pm/hydra/mpl/aclocal.m4
@@ -1212,8 +1212,10 @@ AC_SUBST([am__untar])
m4_include([confdb/aclocal_cc.m4])
m4_include([confdb/aclocal_coverage.m4])
+m4_include([confdb/aclocal_shm.m4])
m4_include([confdb/aclocal_util.m4])
m4_include([confdb/ax_prefix_config_h.m4])
+m4_include([confdb/ax_tls.m4])
m4_include([confdb/libtool.m4])
m4_include([confdb/ltoptions.m4])
m4_include([confdb/ltsugar.m4])
diff --git a/src/pm/hydra/mpl/confdb/aclocal_cc.m4 b/src/pm/hydra/mpl/confdb/aclocal_cc.m4
index 92e7ee1..23d7365 100644
--- a/src/pm/hydra/mpl/confdb/aclocal_cc.m4
+++ b/src/pm/hydra/mpl/confdb/aclocal_cc.m4
@@ -521,7 +521,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -626,13 +626,6 @@ if test "$enable_strict_done" != "yes" ; then
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
- 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
- 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
- *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -645,6 +638,16 @@ if test "$enable_strict_done" != "yes" ; then
PAC_APPEND_FLAG([-std=c89],[pac_cc_strict_flags])
PAC_APPEND_FLAG([-Wdeclaration-after-statement],[pac_cc_strict_flags])
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
+ 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
+ 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
+ *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
+ esac
fi
# See if the above options work with the compiler
diff --git a/src/pm/hydra/mpl/confdb/aclocal_check_visibility.m4 b/src/pm/hydra/mpl/confdb/aclocal_check_visibility.m4
new file mode 100644
index 0000000..1ea85ba
--- /dev/null
+++ b/src/pm/hydra/mpl/confdb/aclocal_check_visibility.m4
@@ -0,0 +1,123 @@
+# This macro set originally copied from hwloc.
+# MPICH modifications:
+# - renamed macro to PAC_CHECK_VISIBILITY
+# - removed C compiler vendor check
+# - sed -e 's/HWLOC/MPICH/gI'
+#
+# Copyright © 2004-2005 The Trustees of Indiana University and Indiana
+# University Research and Technology
+# Corporation. All rights reserved.
+# Copyright © 2004-2005 The University of Tennessee and The University
+# of Tennessee Research Foundation. All rights
+# reserved.
+# Copyright © 2004-2007 High Performance Computing Center Stuttgart,
+# University of Stuttgart. All rights reserved.
+# Copyright © 2004-2005 The Regents of the University of California.
+# All rights reserved.
+# Copyright © 2006-2007 Cisco Systems, Inc. All rights reserved.
+# and renamed/modified for hwloc:
+# Copyright © 2009 Inria. All rights reserved.
+# Copyright © 2009-2010 Université Bordeaux
+# Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer listed
+# in this license in the documentation and/or other materials
+# provided with the distribution.
+#
+# - Neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties. The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# PAC_CHECK_VISIBILITY
+# --------------------------------------------------------
+AC_DEFUN([PAC_CHECK_VISIBILITY],[
+ # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
+ m4_ifdef([AC_PROG_GREP],
+ [AC_REQUIRE([AC_PROG_GREP])],
+ [GREP=grep])
+
+ # Check if the compiler has support for visibility, like some
+ # versions of gcc, icc, Sun Studio cc.
+ AC_ARG_ENABLE(visibility,
+ AC_HELP_STRING([--enable-visibility],
+ [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
+
+ case ${target} in
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
+ esac
+
+ mpich_visibility_define=0
+ mpich_msg="whether to enable symbol visibility"
+ if test "$enable_visibility" = "no"; then
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (disabled)])
+ else
+ CFLAGS_orig=$CFLAGS
+ mpich_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $mpich_add -Werror"
+
+ AC_MSG_CHECKING([if $CC supports $mpich_add])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+ ]],[[fprintf(stderr, "Hello, world\n");]])],
+ [AS_IF([test -s conftest.err],
+ [$GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ AS_IF([test "$?" = "0"], [mpich_add=])])
+ ], [mpich_add=])
+ AS_IF([test "$mpich_add" = ""],
+ [AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes])])
+
+ CFLAGS=$CFLAGS_orig
+ VISIBILITY_CFLAGS=$mpich_add
+
+ if test "$mpich_add" != "" ; then
+ mpich_visibility_define=1
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([yes (via $mpich_add)])
+ elif test "$enable_visibility" = "yes"; then
+ AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting])
+ else
+ AC_MSG_CHECKING([$mpich_msg])
+ AC_MSG_RESULT([no (unsupported)])
+ fi
+ unset mpich_add
+ fi
+
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$mpich_visibility_define],
+ [Whether C compiler supports symbol visibility or not])
+])
diff --git a/src/pm/hydra/mpl/confdb/aclocal_fc.m4 b/src/pm/hydra/mpl/confdb/aclocal_fc.m4
index b844009..4318e38 100644
--- a/src/pm/hydra/mpl/confdb/aclocal_fc.m4
+++ b/src/pm/hydra/mpl/confdb/aclocal_fc.m4
@@ -439,7 +439,7 @@ AC_COMPILE_IFELSE([],[
# module tests do not always use the module output flag. See
# FC_MODULE_EXT , where this is determined.
# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
# f90 -moddir=${dir} ## the Sun f90 compiler
# g95 -fmod=${dir}
#
@@ -448,7 +448,7 @@ AC_COMPILE_IFELSE([],[
# users to use. Alternatively they can use an older version of MPICH.
pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
rm -f conftestdir/NONEXISTENT conftestdir/*
PAC_PUSH_FLAG([FCFLAGS])
FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
diff --git a/src/pm/hydra/mpl/confdb/aclocal_libs.m4 b/src/pm/hydra/mpl/confdb/aclocal_libs.m4
index 09e9c4c..8868e99 100644
--- a/src/pm/hydra/mpl/confdb/aclocal_libs.m4
+++ b/src/pm/hydra/mpl/confdb/aclocal_libs.m4
@@ -48,7 +48,7 @@ AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
dnl is adding lib64 by default really the right thing to do? What if
dnl we are on a 32-bit host that happens to have both lib dirs available?
[PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
- AS_IF([test -d "${with_$1}/lib64}"],
+ AS_IF([test -d "${with_$1}/lib64"],
[PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
])
])
diff --git a/src/pm/hydra/mpl/confdb/aclocal_romio.m4 b/src/pm/hydra/mpl/confdb/aclocal_romio.m4
index af80d3c..94f4e2e 100644
--- a/src/pm/hydra/mpl/confdb/aclocal_romio.m4
+++ b/src/pm/hydra/mpl/confdb/aclocal_romio.m4
@@ -786,28 +786,6 @@ EOF
fi
rm -f conftest$EXEEXT mpitest.c
])dnl
-define(PAC_TEST_MPIU_FUNCS,[
- AC_MSG_CHECKING(support for MPICH memory macros)
- rm -f mpitest.c
- cat > mpitest.c <<EOF
-#include "mpi.h"
-#include "stdio.h"
- main(Int argc, char **argv)
- {
- MPIU_Free(NULL);
- }
-EOF
- rm -f conftest$EXEEXT
- $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
- if test -x conftest$EXEEXT ; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
- else
- AC_MSG_RESULT(no)
- fi
- rm -f conftest$EXEEXT mpitest.c
-])dnl
-dnl
define(PAC_TEST_MPI_GREQUEST,[
AC_MSG_CHECKING(support for generalized requests)
rm -f mpitest.c
diff --git a/src/pm/hydra/mpl/confdb/ax_tls.m4 b/src/pm/hydra/mpl/confdb/ax_tls.m4
index 3f6a0ac..60657fa 100644
--- a/src/pm/hydra/mpl/confdb/ax_tls.m4
+++ b/src/pm/hydra/mpl/confdb/ax_tls.m4
@@ -46,7 +46,7 @@
AC_DEFUN([AX_TLS], [
AC_MSG_CHECKING(for thread local storage specifier)
AC_CACHE_VAL(ac_cv_tls, [
- ax_tls_keywords="__thread __declspec(thread) none"
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
for ax_tls_keyword in $ax_tls_keywords; do
case $ax_tls_keyword in
none) ac_cv_tls=none ; break ;;
@@ -69,7 +69,11 @@ AC_DEFUN([AX_TLS], [
PAC_APPEND_FLAG([-shared],[LIBS])
if test "$ac_cv_tls" != "none" ; then
AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([extern $ax_tls_keyword int bar;],[++bar;])],
+ [AC_LANG_PROGRAM(
+ [
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+ ],[++bar;])],
[ac_cv_tls=$ax_tls_keyword],
[ac_cv_tls=none])
fi
@@ -81,10 +85,7 @@ AC_DEFUN([AX_TLS], [
])
if test "$ac_cv_tls" != "none"; then
- # MPICH modification: this was "TLS" before instead of
- # "MPICH_TLS_SPECIFIER", but TLS had a reasonably high chance of conflicting
- # with a system library.
- AC_DEFINE_UNQUOTED([MPICH_TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+ AC_DEFINE_UNQUOTED([TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
fi
AC_MSG_RESULT($ac_cv_tls)
])
diff --git a/src/pm/hydra/mpl/confdb/config.guess b/src/pm/hydra/mpl/confdb/config.guess
index 6c32c86..1659250 100755
--- a/src/pm/hydra/mpl/confdb/config.guess
+++ b/src/pm/hydra/mpl/confdb/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/src/pm/hydra/mpl/confdb/config.sub b/src/pm/hydra/mpl/confdb/config.sub
index 7ffe373..1acc966 100755
--- a/src/pm/hydra/mpl/confdb/config.sub
+++ b/src/pm/hydra/mpl/confdb/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/src/pm/hydra/mpl/confdb/install-sh b/src/pm/hydra/mpl/confdb/install-sh
index 0b0fdcb..59990a1 100755
--- a/src/pm/hydra/mpl/confdb/install-sh
+++ b/src/pm/hydra/mpl/confdb/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/src/pm/hydra/mpl/confdb/libtool.m4 b/src/pm/hydra/mpl/confdb/libtool.m4
index a3bc337..10ab284 100644
--- a/src/pm/hydra/mpl/confdb/libtool.m4
+++ b/src/pm/hydra/mpl/confdb/libtool.m4
@@ -2887,6 +2887,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3546,7 +3558,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
@@ -4424,7 +4436,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4936,6 +4948,9 @@ m4_if([$1], [CXX], [
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -4998,6 +5013,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5252,7 +5270,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -5773,6 +5791,7 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5794,7 +5813,7 @@ _LT_EOF
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
diff --git a/src/pm/hydra/mpl/confdb/ltmain.sh b/src/pm/hydra/mpl/confdb/ltmain.sh
index 0f0a2da..147d758 100644
--- a/src/pm/hydra/mpl/confdb/ltmain.sh
+++ b/src/pm/hydra/mpl/confdb/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,10 +7272,13 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
continue
fi # $pass = conv
@@ -8823,6 +8829,9 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
esac
;;
no)
diff --git a/src/pm/hydra/mpl/confdb/random_r.m4 b/src/pm/hydra/mpl/confdb/random_r.m4
new file mode 100644
index 0000000..8d04a27
--- /dev/null
+++ b/src/pm/hydra/mpl/confdb/random_r.m4
@@ -0,0 +1,43 @@
+# serial 5
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RANDOM_R],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
+ if test $ac_cv_header_random_h = no; then
+ HAVE_RANDOM_H=0
+ fi
+
+ AC_CHECK_TYPES([struct random_data],
+ [], [HAVE_STRUCT_RANDOM_DATA=0],
+ [[#include <stdlib.h>
+ #if HAVE_RANDOM_H
+ # include <random.h>
+ #endif
+ ]])
+
+ dnl On AIX and OSF/1, these functions exist, but with different declarations.
+ dnl Override them all.
+ case "$host_os" in
+ aix* | osf*)
+ REPLACE_RANDOM_R=1
+ ;;
+ *)
+ AC_CHECK_FUNCS([random_r])
+ if test $ac_cv_func_random_r = no; then
+ HAVE_RANDOM_R=0
+ fi
+ ;;
+ esac
+])
+
+# Prerequisites of lib/random_r.c.
+AC_DEFUN([gl_PREREQ_RANDOM_R], [
+ :
+])
diff --git a/src/pm/hydra/mpl/confdb/stdlib_h.m4 b/src/pm/hydra/mpl/confdb/stdlib_h.m4
new file mode 100644
index 0000000..19107c4
--- /dev/null
+++ b/src/pm/hydra/mpl/confdb/stdlib_h.m4
@@ -0,0 +1,119 @@
+# stdlib_h.m4 serial 42
+dnl Copyright (C) 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_NEXT_HEADERS([stdlib.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+ ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
+ initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
+ posix_openpt ptsname ptsname_r random random_r realpath rpmatch
+ secure_getenv setenv setstate setstate_r srandom srandom_r
+ strtod strtoll strtoull unlockpt unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT])
+ GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL])
+ GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
+ GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+ GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG])
+ GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
+ GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT])
+ GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
+ GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC])
+ GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
+ GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP])
+ GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS])
+ GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
+ GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS])
+ GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT])
+ GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME])
+ GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R])
+ GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV])
+ GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
+ GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
+ GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
+ GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+ GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
+ GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
+ GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
+ GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV])
+ GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD])
+ GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL])
+ GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL])
+ GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX])
+ GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT])
+ GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV])
+ GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
+ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
+ HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP])
+ HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS])
+ HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP])
+ HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS])
+ HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT])
+ HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME])
+ HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R])
+ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
+ HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
+ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
+ HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
+ HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
+ HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
+ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
+ REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC])
+ REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+ REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC])
+ REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
+ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
+ REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
+ REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC])
+ REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
+ REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
+ REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/src/pm/hydra/mpl/configure b/src/pm/hydra/mpl/configure
index 4ad87c4..7619b5f 100755
--- a/src/pm/hydra/mpl/configure
+++ b/src/pm/hydra/mpl/configure
@@ -592,7 +592,7 @@ PACKAGE_STRING='MPL 0.1'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
-ac_unique_file="src/mplstr.c"
+ac_unique_file="src/str/mpl_str.c"
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
@@ -634,12 +634,13 @@ am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
libmpl_so_versionflags
+MPL_TIMER_TYPE
+MPL_TIMER_KIND
BUILD_COVERAGE_FALSE
BUILD_COVERAGE_TRUE
GCOV
MPL_EMBEDDED_MODE_FALSE
MPL_EMBEDDED_MODE_TRUE
-FROM_MPICH
libmpl_so_version
MPLLIBNAME
CPP
@@ -736,6 +737,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -768,8 +770,14 @@ with_aix_soname
with_gnu_ld
with_sysroot
enable_libtool_lock
+enable_embedded
+enable_g
enable_coverage
with_valgrind
+enable_timer_type
+enable_yield
+with_thread_package
+with_shared_memory
enable_versioning
'
ac_precious_vars='build_alias
@@ -783,7 +791,6 @@ CPPFLAGS
LT_SYS_LIBRARY_PATH
CPP
MPLLIBNAME
-FROM_MPICH
GCOV'
@@ -823,6 +830,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1075,6 +1083,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1212,7 +1229,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1365,6 +1382,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1414,7 +1432,33 @@ Optional Features:
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-embedded Build MPL in embedded mode (default is no)
+ --enable-g=option Control the level of debugging support in MPL.
+ "option" is a list of comma separated names. Default
+ is "all". none|no - No debugging log - Enable debug
+ event logging mem - Enable memory tracing yes|all -
+ All of the above choices (except "none", obviously)
--enable-coverage Turn on coverage analysis using gcc and gcov
+ --enable-timer-type=name - Select the timer to use for MPI_Wtime and
+ internal timestamps.
+ ppc64_cycle - Powerpc-64bit; returns cycle counts using timebase register
+ gethrtime - Solaris timer (Solaris systems only)
+ clock_gettime - Posix timer (where available)
+ gettimeofday - Most Unix systems
+ linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
+ gcc_ia64_cycle - IPF ar.itc timer*
+ mach_absolute_time - Mach absolute time (alternative to clock_gettime
+ for OSX)
+ device - The timer is provided by the device
+
+ *Note that the cycle timers are intended to be used by
+ developers for internal low-level timing. Normal users should
+ not use these as they are not guaranteed to be accurate in
+ certain situations.
+
+ --enable-yield choose a method to yield the processor in busy
+ loops. Available methods are: sched_yield, yield,
+ select, usleep, sleep, nothing
--enable-versioning Enable library versioning
Optional Packages:
@@ -1432,6 +1476,15 @@ Optional Packages:
version issues)
--with-valgrind=PATH use valgrind headers installed in PATH (default is
"yes", use no special path)
+ --with-thread-package=package Thread package to use. Supported thread packages include:
+ posix or pthreads - POSIX threads (default, if required)
+ solaris - Solaris threads (Solaris OS only)
+ win - windows threads
+ none - no threads
+
+ --with-shared-memory=auto|sysv|mmap
+ create shared memory using sysv or mmap (default is
+ auto)
Some influential environment variables:
CC C compiler command
@@ -1446,7 +1499,6 @@ Some influential environment variables:
CPP C preprocessor
MPLLIBNAME can be used to override the name of the MPL library (default:
"mpl")
- FROM_MPICH set to "yes" if building MPL inside of MPICH
GCOV name/path for the gcov utility
Use these variables to override the choices made by `configure' or to help
@@ -1876,6 +1928,52 @@ fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
@@ -5198,7 +5296,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
@@ -8890,6 +8988,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
esac
ld_shlibs=yes
@@ -9144,7 +9245,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -9814,6 +9915,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -9835,7 +9937,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -10950,6 +11052,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -12224,9 +12338,52 @@ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-# TODO: could add a --enable-embedded or similar to also control this
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler supports __builtin_expect" >&5
+$as_echo_n "checking if C compiler supports __builtin_expect... " >&6; }
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ return __builtin_expect(1, 1) ? 1 : 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ have_builtin_expect=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ have_builtin_expect=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test x$have_builtin_expect = xyes ; then
+
+$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
+
+fi
+
+
+# Check whether --enable-embedded was given.
+if test "${enable_embedded+set}" = set; then :
+ enableval=$enable_embedded; embedded=yes
+else
+ embedded=no
+fi
- if test "x${FROM_MPICH}" = "xyes"; then
+ if test "x${embedded}" = "xyes"; then
MPL_EMBEDDED_MODE_TRUE=
MPL_EMBEDDED_MODE_FALSE='#'
else
@@ -12235,6 +12392,67 @@ else
fi
+# Check whether --enable-g was given.
+if test "${enable_g+set}" = set; then :
+ enableval=$enable_g;
+else
+ enable_g=none
+fi
+
+
+# enable-g
+# strip off multiple options, separated by commas
+
+ if test -z "${pac_save_IFS_nesting}" ; then
+ pac_save_IFS_nesting=0
+ fi
+ eval pac_save_IFS_${pac_save_IFS_nesting}='"$IFS"'
+ pac_save_IFS_nesting=`expr ${pac_save_IFS_nesting} + 1`
+
+IFS=","
+for option in $enable_g ; do
+ case "$option" in
+ log)
+ enable_g_log=yes
+ ;;
+
+ mem)
+ enable_g_mem=yes
+ ;;
+
+ all|yes)
+ enable_g_log=yes
+ enable_g_mem=yes
+ ;;
+
+ no|none)
+ ;;
+
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown value $option for enable-g" >&5
+$as_echo "$as_me: WARNING: Unknown value $option for enable-g" >&2;}
+ ;;
+ esac
+done
+
+ pac_save_IFS_nesting=`expr ${pac_save_IFS_nesting} - 1`
+ eval IFS="\$pac_save_IFS_${pac_save_IFS_nesting}"
+ eval pac_save_IFS_${pac_save_IFS_nesting}=""
+
+
+if test "$enable_g_log" = "yes" ; then
+
+$as_echo "#define USE_DBG_LOGGING 1" >>confdefs.h
+
+fi
+
+if test "$enable_g_mem" = "yes" ; then
+
+$as_echo "#define USE_MEMORY_TRACING 1" >>confdefs.h
+
+fi
+
+
# support gcov test coverage information
@@ -12423,7 +12641,7 @@ $as_echo "#define HAVE___TYPEOF 1" >>confdefs.h
fi
-for ac_header in stdio.h stdlib.h string.h stdarg.h ctype.h search.h sys/types.h sys/uio.h
+for ac_header in stdio.h stdlib.h string.h stdarg.h ctype.h sys/types.h sys/uio.h execinfo.h backtrace.h libunwind.h unistd.h errno.h windows.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -12597,183 +12815,1846 @@ $as_echo "#define HAVE_BROKEN_VALGRIND 1" >>confdefs.h
fi
fi
-## Enable creation of libtool-style versioning or no versioning
-# Check whether --enable-versioning was given.
-if test "${enable_versioning+set}" = set; then :
- enableval=$enable_versioning;
-else
- enable_versioning=yes
-fi
-
-if test "$enable_versioning" = "yes" ; then
- libmpl_so_versionflags="-version-info \$(libmpl_so_version)"
-else
- libmpl_so_versionflags="-avoid-version"
-fi
-export libmpl_so_versionflags
+#######################################################################
+## TIMER CODE
+#######################################################################
+# ----------------------------------------------------------------------------
+# Support for timers. The following code processes the
+# --enable-timer-type=name argument and selects the timer based on
+# both that field and what configure is able to determine is available.
+# The file src/include/mpl_timer.h is also created.
+# ----------------------------------------------------------------------------
-#######################################################################
+# clock_gettime is the POSIX gettimeofday
+# gethrtime is the Solaris high-resolution timer
+# Check whether --enable-timer-type was given.
+if test "${enable_timer_type+set}" = set; then :
+ enableval=$enable_timer_type; timer_type=$enable_timer_type
+fi
-# Check for strdup
-for ac_func in strdup
+## The user did not specify a timer type. Try to find a sane option
+## that is supported by the platform.
+if test -z "$timer_type" ; then
+ # Try to pick a timer based on what is available
+ for ac_func in clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday
do :
- ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
-if test "x$ac_cv_func_strdup" = xyes; then :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_STRDUP 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
-if test "$ac_cv_func_strdup" = "yes" ; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
-$as_echo_n "checking whether strdup needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strdup+:} false; then :
+ if test "$ac_cv_func_gethrtime" = "yes" ; then
+ # Sigh. The Solaris include files do not define hrtime_t
+ # Before we accept this choice, make sure that we can
+ # do arithmetic with hrtime_t .
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that hrtime_t is properly defined for gethrtime" >&5
+$as_echo_n "checking that hrtime_t is properly defined for gethrtime... " >&6; }
+if ${pac_cv_hrtime_works+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h>
-void (*fptr)(void) = (void(*)(void))strdup;
+
+#include <sys/time.h>
+
int
main ()
{
-
+hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strdup=no
+ pac_cv_hrtime_works=yes
else
- pac_cv_func_decl_strdup=yes
+ pac_cv_hrtime_works=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
-$as_echo "$pac_cv_func_decl_strdup" >&6; }
-if test "$pac_cv_func_decl_strdup" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRDUP_DECL 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_hrtime_works" >&5
+$as_echo "$pac_cv_hrtime_works" >&6; }
+ # A more ambitious test would look to see if casting an
+ # hrtime_t to int64_t works, and even more ambitious
+ # would check whether long or long long was 64 bits (or even
+ # better, the sizeof hrtime_t).
+ # AC_CHECK_FUNCS has false positive when checking whether gethrtime is
+ # available on Solaris with strict configuration. We must use
+ # AC_CHECK_DECL to confirm it.
+ ac_fn_c_check_decl "$LINENO" "gethrtime" "ac_cv_have_decl_gethrtime" "$ac_includes_default"
+if test "x$ac_cv_have_decl_gethrtime" = xyes; then :
fi
+ fi
+ if test "$ac_cv_func_gethrtime" = "yes" -a \
+ "$ac_cv_has_decl_gethrtime" = "yes" -a \
+ "$pac_cv_hrtime_works" = "yes" ; then
+ timer_type=gethrtime
+ elif test "$ac_cv_func_clock_gettime" = "yes" -a \
+ "$ac_cv_func_clock_getres" = "yes" ; then
+ # Test on both because some systems (e.g., cygwin) provide
+ # clock_gettime but not clock_getres
+ timer_type=clock_gettime
+ elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
+ timer_type=mach_absolute_time
+ elif test "$ac_cv_func_gettimeofday" = "yes" ; then
+ timer_type=gettimeofday
+ fi
+fi
+if test -z "$timer_type" ; then
+ as_fn_error $? "No timer found" "$LINENO" 5
fi
-# Check for snprintf
-for ac_func in snprintf
-do :
- ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SNPRINTF 1
-_ACEOF
+# Check for valid timer and select datatypes for the time stamp
+case "$timer_type" in
+
+ gethrtime)
+ MPL_TIMER_TYPE=hrtime_t
+ ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes; then :
+
+else
+
+ as_fn_error $? "Requested timer gethrtime is not available" "$LINENO" 5
fi
-done
-if test "$ac_cv_func_snprintf" = "yes" ; then
+ ;;
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
-$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
-if ${pac_cv_func_decl_snprintf+:} false; then :
+ clock_gettime)
+ missing_function=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
$as_echo_n "(cached) " >&6
else
-
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdio.h>
-void (*fptr)(void) = (void(*)(void))snprintf;
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime ();
int
main ()
{
-
+return clock_gettime ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_snprintf=no
-else
- pac_cv_func_decl_snprintf=yes
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_clock_gettime=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_clock_gettime+:} false; then :
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
-$as_echo "$pac_cv_func_decl_snprintf" >&6; }
-if test "$pac_cv_func_decl_snprintf" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_SNPRINTF_DECL 1
-_ACEOF
-
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+else
+ ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+else
+ as_fn_error $? "clock_gettime is not available" "$LINENO" 5
fi
-# Check for strncmp
-for ac_func in strncmp
-do :
- ac_fn_c_check_func "$LINENO" "strncmp" "ac_cv_func_strncmp"
-if test "x$ac_cv_func_strncmp" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRNCMP 1
-_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_getres" >&5
+$as_echo_n "checking for library containing clock_getres... " >&6; }
+if ${ac_cv_search_clock_getres+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_getres ();
+int
+main ()
+{
+return clock_getres ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_clock_getres=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_clock_getres+:} false; then :
+ break
fi
done
+if ${ac_cv_search_clock_getres+:} false; then :
-if test "$ac_cv_func_strncmp" = "yes" ; then
+else
+ ac_cv_search_clock_getres=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_getres" >&5
+$as_echo "$ac_cv_search_clock_getres" >&6; }
+ac_res=$ac_cv_search_clock_getres
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strncmp needs a declaration" >&5
-$as_echo_n "checking whether strncmp needs a declaration... " >&6; }
-if ${pac_cv_func_decl_strncmp+:} false; then :
+else
+ as_fn_error $? "clock_getres is not available" "$LINENO" 5
+fi
+
+ MPL_TIMER_TYPE="struct timespec"
+ # AIX does not always define struct timespec (!)
+ # Make sure that we can use struct timespec
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h" >&5
+$as_echo_n "checking whether struct timespec is defined in time.h... " >&6; }
+if ${pac_cv_struct_timespec_defined+:} false; then :
$as_echo_n "(cached) " >&6
else
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <string.h>
-void (*fptr)(void) = (void(*)(void))strncmp;
+
+#include <time.h>
int
main ()
{
+ struct timespec t;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- pac_cv_func_decl_strncmp=no
+ pac_cv_struct_timespec_defined=yes
else
- pac_cv_func_decl_strncmp=yes
+ pac_cv_struct_timespec_defined=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strncmp" >&5
-$as_echo "$pac_cv_func_decl_strncmp" >&6; }
-if test "$pac_cv_func_decl_strncmp" = "yes" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define NEEDS_STRNCMP_DECL 1
-_ACEOF
-
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined" >&5
+$as_echo "$pac_cv_struct_timespec_defined" >&6; }
+ if test "$pac_cv_struct_timespec_defined" != "yes" ; then
+ # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500" >&5
+$as_echo_n "checking whether struct timespec is defined in time.h with _XOPEN_SOURCE=500... " >&6; }
+if ${pac_cv_struct_timespec_defined_with_xopen500+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Check for putenv
+#define _XOPEN_SOURCE 500
+#include <time.h>
+int
+main ()
+{
+
+ struct timespec t;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_struct_timespec_defined_with_xopen500=yes
+else
+ pac_cv_struct_timespec_defined_with_xopen500=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_struct_timespec_defined_with_xopen500" >&5
+$as_echo "$pac_cv_struct_timespec_defined_with_xopen500" >&6; }
+ if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
+ # We need to define _XOPEN_SOURCE=500, but we need to ensure that
+ # this is done before any include files are loaded. At
+ # this point it is really too late to add this definition,
+ # since it may make other tests incompatible.
+ as_fn_error $? "The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure" "$LINENO" 5
+ fi
+ fi
+ #
+ # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
+ # time.h is required (see pages 45 and 46 in the POSIX standard).
+ # See if we can compile
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CLOCK_REALTIME defined in time.h" >&5
+$as_echo_n "checking for CLOCK_REALTIME defined in time.h... " >&6; }
+if ${pac_cv_posix_clock_realtime+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <time.h>
+int
+main ()
+{
+
+ clockid_t cid = CLOCK_REALTIME;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_posix_clock_realtime=yes
+else
+ pac_cv_posix_clock_realtime=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_posix_clock_realtime" >&5
+$as_echo "$pac_cv_posix_clock_realtime" >&6; }
+ if test "$pac_cv_posix_clock_realtime" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: POSIX timer requires definitions in time.h" >&5
+$as_echo "$as_me: WARNING: POSIX timer requires definitions in time.h" >&2;}
+ # Check for the definition in sys/time.h, which is where
+ # OpenBSD and FreeBSD have put it by mistake
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <time.h>
+#include <sys/time.h>
+int
+main ()
+{
+
+ clockid_t cid = CLOCK_REALTIME;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_posix_clock_realtime=yes
+else
+ pac_cv_posix_clock_realtime=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$pac_cv_posix_clock_realtime" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sys/time.h required for POSIX timer" >&5
+$as_echo "$as_me: WARNING: sys/time.h required for POSIX timer" >&2;}
+
+$as_echo "#define NEEDS_SYS_TIME_H 1" >>confdefs.h
+
+ else
+ as_fn_error $? "Cannot find the definition of CLOCK_REALTIME for the POSIX timer" "$LINENO" 5
+ fi
+ fi
+ ;;
+
+ gettimeofday)
+ MPL_TIMER_TYPE="struct timeval"
+ # We may have already tested for gettimeofday. If we got a "yes",
+ # we're good to go
+ if test "$ac_cv_func_gettimeofday" != "yes" ; then
+ ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes; then :
+
+else
+
+ as_fn_error $? "Requested timer gettimeofday is not available" "$LINENO" 5
+
+fi
+
+ fi
+ ;;
+
+ linux86_cycle|linux86_cycle_2)
+
+# The following AC_TRY_RUN statements are needed because x86_64 compilers
+# usually know about rdtscp but the cpu may or may not actually implement the
+# feature. This is not cross-compile safe, unfortunately. In the long run we
+# should allow the user to override this with a configure flag.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that linux86 cycle counter is available" >&5
+$as_echo_n "checking that linux86 cycle counter is available... " >&6; }
+if ${pac_cv_linux86_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtscp
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc64
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc32
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtsc
+else
+ pac_cv_linux86_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* rdtscp */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtscp
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* cpuid 64 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc64
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* cpuid 32 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=cpuid_rdtsc32
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main()
+{
+ /* simple */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ pac_cv_linux86_cycle=rdtsc
+else
+ pac_cv_linux86_cycle=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_linux86_cycle" >&5
+$as_echo "$pac_cv_linux86_cycle" >&6; }
+
+ case "$pac_cv_linux86_cycle" in
+ "rdtscp")
+
+$as_echo "#define LINUX86_CYCLE_RDTSCP 1" >>confdefs.h
+
+ ;;
+ "cpuid_rdtsc64")
+
+$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC64 1" >>confdefs.h
+
+ ;;
+ "cpuid_rdtsc32")
+
+$as_echo "#define LINUX86_CYCLE_CPUID_RDTSC32 1" >>confdefs.h
+
+ ;;
+ "rdtsc")
+
+$as_echo "#define LINUX86_CYCLE_RDTSC 1" >>confdefs.h
+
+ ;;
+ *)
+ cpu_gcc_x86_cycle=no
+ ;;
+ esac
+
+ if test "$cpu_gcc_x86_cycle" = "no" ; then
+ as_fn_error $? "Linux86 cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="long long"
+ ;;
+
+ gcc_ia64_cycle)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that IPF timer is available" >&5
+$as_echo_n "checking that IPF timer is available... " >&6; }
+if ${pac_cv_ia64_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ long var, *var_ptr=&var;
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ var=__getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_gcc_ia64_cycle=yes
+else
+ pac_cv_gcc_ia64_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_ia64_cycle" >&5
+$as_echo "$pac_cv_ia64_cycle" >&6; }
+ if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
+ as_fn_error $? "IPF cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="long"
+ ;;
+
+ mach_absolute_time)
+ ac_fn_c_check_func "$LINENO" "mach_absolute_time" "ac_cv_func_mach_absolute_time"
+if test "x$ac_cv_func_mach_absolute_time" = xyes; then :
+
+else
+ as_fn_error $? "mach_absolute_time is not available" "$LINENO" 5
+fi
+
+ ac_fn_c_check_func "$LINENO" "mach_timebase_info" "ac_cv_func_mach_timebase_info"
+if test "x$ac_cv_func_mach_timebase_info" = xyes; then :
+
+else
+ as_fn_error $? "mach_timebase_info is not available" "$LINENO" 5
+fi
+
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+
+ device)
+ # The device selected should export the datatype for the timer
+ MPL_TIMER_TYPE="void *"
+ ;;
+
+ ppc64_cycle)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that ppc64 timebase cycle counter is available" >&5
+$as_echo_n "checking that ppc64 timebase cycle counter is available... " >&6; }
+if ${pac_cv_ppc64_cycle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+
+ unsigned temp;
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (0x10D));
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_ppc64_cycle=yes
+else
+ pac_cv_ppc64_cycle=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_ppc64_cycle" >&5
+$as_echo "$pac_cv_ppc64_cycle" >&6; }
+ if test "pac_cv_ppc64_cycle" != "yes" ; then
+ as_fn_error $? "The PPC64 cycle counter is not available on this system and or with the $CC compiler" "$LINENO" 5
+ fi
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+ *)
+ as_fn_error $? "Invalid timer type $timer_type" "$LINENO" 5
+ ;;
+esac
+# Convert timer type to upper case
+timer_type=`echo $timer_type | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+MPL_TIMER_KIND=MPL_TIMER_KIND__$timer_type
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Timer type selected is $timer_type" >&5
+$as_echo "$as_me: Timer type selected is $timer_type" >&6;}
+
+#######################################################################
+## END OF TIMER CODE
+#######################################################################
+
+
+#######################################################################
+## START OF PROCESSOR YIELD CODE
+#######################################################################
+# If the user specified a method to use, we check if it's available.
+# If a method was not specified, we make a guess based on the OS. The
+# default is to use sched_yield() or yield() if one is available,
+# otherwise, default to nothing. After that we define the appropriate
+# macro.
+
+for ac_header in sched.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sched.h" "ac_cv_header_sched_h" "$ac_includes_default"
+if test "x$ac_cv_header_sched_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHED_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in unistd.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_UNISTD_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in sys/select.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SELECT_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in sched_yield yield usleep sleep select
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep needs a declaration" >&5
+$as_echo_n "checking whether usleep needs a declaration... " >&6; }
+if ${pac_cv_func_decl_usleep+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))usleep;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_usleep=no
+else
+ pac_cv_func_decl_usleep=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_usleep" >&5
+$as_echo "$pac_cv_func_decl_usleep" >&6; }
+if test "$pac_cv_func_decl_usleep" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_USLEEP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check whether --enable-yield was given.
+if test "${enable_yield+set}" = set; then :
+ enableval=$enable_yield; case $enableval in #(
+ sched_yield) :
+ if test "x$ac_cv_func_sched_yield" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ yield) :
+ if test "x$ac_cv_func_yield" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ select) :
+ if test "x$ac_cv_func_select" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ usleep) :
+ if test "x$ac_cv_func_usleep" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ sleep) :
+ if test "x$ac_cv_func_sleep" != "xyes"; then :
+ enable_yield=unavail
+fi ;; #(
+ nothing|no|none) :
+ ;; #(
+ *) :
+ as_fn_error $? "Invalid option $enableval for --enable-yield" "$LINENO" 5 ;;
+esac
+
+ if test "x$enable_yield" = "xunavail"; then :
+ as_fn_error $? "Yield method $enableval is not available on this platform." "$LINENO" 5
+fi
+
+else
+ # none specified by user; make a guess based on os
+ case $host in #(
+ *-*-darwin*) :
+ # In Lion, sched_yield worked but none of the other options had any effect
+ if test "x$ac_cv_func_sched_yield" = "xyes"; then :
+ enable_yield=sched_yield
+else
+ enable_yield=nothing
+fi ;; #(
+ *-*-linux*) :
+ # sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
+ enable_yield=nothing ;; #(
+ *) :
+ # default: just use sched_yield() or yield()
+ if test "x$ac_cv_func_sched_yield" = "xyes"; then :
+ enable_yield=sched_yield
+elif test "x$ac_cv_func_yield" = "xyes"; then :
+ enable_yield=yield
+else
+ enable_yield=nothing
+fi ;;
+esac
+
+
+fi
+
+
+# set the appropriate macro
+case $enable_yield in #(
+ sched_yield) :
+
+$as_echo "#define USE_SCHED_YIELD_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ yield) :
+
+$as_echo "#define USE_YIELD_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ select) :
+
+$as_echo "#define USE_SELECT_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ usleep) :
+
+$as_echo "#define USE_USLEEP_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ sleep) :
+
+$as_echo "#define USE_SLEEP_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ nothing|no|none) :
+
+$as_echo "#define USE_NOTHING_FOR_YIELD 1" >>confdefs.h
+ ;; #(
+ *) :
+ as_fn_error $? "Invalid value $enable_yield for enable_yield." "$LINENO" 5
+ ;;
+esac
+
+#######################################################################
+## END OF PROCESSOR YIELD CODE
+#######################################################################
+
+
+#######################################################################
+## START OF THREADS CODE
+#######################################################################
+
+# Check whether --with-thread-package was given.
+if test "${with_thread_package+set}" = set; then :
+ withval=$with_thread_package;
+else
+ with_thread_package=posix
+fi
+
+
+if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
+ with_thread_package=none
+fi
+
+if test "${with_thread_package}" = "yes" ; then
+ with_thread_package=posix
+fi
+
+if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
+ as_fn_error $? "if no thread package is available, use --enable-threads=single or funneled" "$LINENO" 5
+fi
+
+THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_INVALID
+case $with_thread_package in
+ posix|pthreads)
+ with_thread_package=posix
+ for ac_header in pthread.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_H 1
+_ACEOF
+
+fi
+
+done
+
+
+ # If pthreads library is found, just include it on the link line. We don't try
+ # to test if the C compiler needs it or not, since the C++ or Fortran
+ # compilers might need it even if the C compiler doesn't
+ # (nvcc with gfortran, for example).
+ #
+ # OSF1 has __pthread_create but not pthread_create (because of
+ # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_key_create in -lpthread" >&5
+$as_echo_n "checking for pthread_key_create in -lpthread... " >&6; }
+if ${ac_cv_lib_pthread_pthread_key_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_key_create ();
+int
+main ()
+{
+return pthread_key_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthread_pthread_key_create=yes
+else
+ ac_cv_lib_pthread_pthread_key_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_key_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_key_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_key_create" = xyes; then :
+ have_pthreads=yes
+fi
+
+ if test "$have_pthreads" = "yes" ; then
+
+
+ if echo "$LIBS" | $FGREP -e "\<-lpthread\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-lpthread', not prepending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-lpthread', prepending" >&5
+ LIBS="-lpthread $LIBS"
+
+fi
+
+ fi
+
+ for ac_func in pthread_yield
+do :
+ ac_fn_c_check_func "$LINENO" "pthread_yield" "ac_cv_func_pthread_yield"
+if test "x$ac_cv_func_pthread_yield" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_YIELD 1
+_ACEOF
+
+fi
+done
+
+
+ # this check should come after the AC_CHECK_LIB for -lpthread
+ ac_fn_c_check_func "$LINENO" "pthread_key_create" "ac_cv_func_pthread_key_create"
+if test "x$ac_cv_func_pthread_key_create" = xyes; then :
+
+else
+ as_fn_error $? "unable to find pthreads library" "$LINENO" 5
+fi
+
+
+ # Check for a routine that specify a routine to call on
+ # thread exit. We can use this to release memory that may
+ # be allocated by the MPL library in the thread.
+ # A complication: pthread_cleanup_push may be a macro; in that
+ # case, check_funcs will fail to find it.
+ # Under OSX, pthread_cleanup_push and pop are macros that must
+ # appear together in the same lexical scope, and hence are
+ # really useless in libraries that may allocate data within
+ # a user-managed thread.
+ for ac_func in pthread_cleanup_push
+do :
+ ac_fn_c_check_func "$LINENO" "pthread_cleanup_push" "ac_cv_func_pthread_cleanup_push"
+if test "x$ac_cv_func_pthread_cleanup_push" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_CLEANUP_PUSH 1
+_ACEOF
+
+fi
+done
+
+ if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_cleanup_push is available (may be a macro in pthread.h)" >&5
+$as_echo_n "checking whether pthread_cleanup_push is available (may be a macro in pthread.h)... " >&6; }
+if ${pac_cv_func_pthread_cleanup_push+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <pthread.h>
+void f1(void *a) { return; }
+int
+main ()
+{
+pthread_cleanup_push( f1, (void *)0 );
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pac_cv_func_pthread_cleanup_push=yes
+else
+ pac_cv_func_pthread_cleanup_push=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_pthread_cleanup_push" >&5
+$as_echo "$pac_cv_func_pthread_cleanup_push" >&6; }
+ if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
+
+$as_echo "#define HAVE_PTHREAD_CLEANUP_PUSH_MACRO 1" >>confdefs.h
+
+ fi
+
+ fi
+
+ # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP" >&5
+$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP... " >&6; }
+if ${pac_cv_has_pthread_mutex_errorcheck_np+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int a=PTHREAD_MUTEX_ERRORCHECK_NP;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_has_pthread_mutex_errorcheck_np=yes
+else
+ pac_cv_has_pthread_mutex_errorcheck_np=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck_np" >&5
+$as_echo "$pac_cv_has_pthread_mutex_errorcheck_np" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK" >&5
+$as_echo_n "checking whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK... " >&6; }
+if ${pac_cv_has_pthread_mutex_errorcheck+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int a=PTHREAD_MUTEX_ERRORCHECK;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_has_pthread_mutex_errorcheck=yes
+else
+ pac_cv_has_pthread_mutex_errorcheck=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_has_pthread_mutex_errorcheck" >&5
+$as_echo "$pac_cv_has_pthread_mutex_errorcheck" >&6; }
+
+ if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
+
+$as_echo "#define PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK" >>confdefs.h
+
+ elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
+
+$as_echo "#define PTHREAD_MUTEX_ERRORCHECK_VALUE PTHREAD_MUTEX_ERRORCHECK_NP" >>confdefs.h
+
+ fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_mutexattr_settype needs a declaration" >&5
+$as_echo_n "checking whether pthread_mutexattr_settype needs a declaration... " >&6; }
+if ${pac_cv_func_decl_pthread_mutexattr_settype+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+void (*fptr)(void) = (void(*)(void))pthread_mutexattr_settype;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_pthread_mutexattr_settype=no
+else
+ pac_cv_func_decl_pthread_mutexattr_settype=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_pthread_mutexattr_settype" >&5
+$as_echo "$pac_cv_func_decl_pthread_mutexattr_settype" >&6; }
+if test "$pac_cv_func_decl_pthread_mutexattr_settype" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL 1
+_ACEOF
+
+
+fi
+
+
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_POSIX
+ ;;
+ solaris)
+ for ac_header in thread.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "thread.h" "ac_cv_header_thread_h" "$ac_includes_default"
+if test "x$ac_cv_header_thread_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_THREAD_H 1
+_ACEOF
+
+fi
+
+done
+
+ for ac_func in thr_yield
+do :
+ ac_fn_c_check_func "$LINENO" "thr_yield" "ac_cv_func_thr_yield"
+if test "x$ac_cv_func_thr_yield" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_THR_YIELD 1
+_ACEOF
+
+fi
+done
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing thr_create" >&5
+$as_echo_n "checking for library containing thr_create... " >&6; }
+if ${ac_cv_search_thr_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char thr_create ();
+int
+main ()
+{
+return thr_create ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' thread; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_thr_create=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_thr_create+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_thr_create+:} false; then :
+
+else
+ ac_cv_search_thr_create=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_thr_create" >&5
+$as_echo "$ac_cv_search_thr_create" >&6; }
+ac_res=$ac_cv_search_thr_create
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ found=yes
+else
+ found=no
+fi
+
+ if test "$found" != "yes" ; then
+ as_fn_error $? "unable to find Solaris threads library" "$LINENO" 5
+ fi
+ # FIXME: need to add -mt if using solaris compilers
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_SOLARIS
+ ;;
+ win|windows)
+ with_thread_package=win
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_WIN
+ as_fn_error $? "The 'win' thread package is not supported via autoconf builds at this time." "$LINENO" 5
+ ;;
+ no|none)
+ with_thread_package=none
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_NONE
+ ;;
+ *)
+ as_fn_error $? "The specified thread package, $with_thread_package, is not supported." "$LINENO" 5
+ ;;
+esac
+
+# Define and export the selected thread library so that other packages
+# know what's used in MPL
+
+cat >>confdefs.h <<_ACEOF
+#define THREAD_PACKAGE_NAME $THREAD_PACKAGE_NAME
+_ACEOF
+
+
+# check for compiler-support for thread-local storage (MPL_TLS_SPECIFIER)
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage specifier" >&5
+$as_echo_n "checking for thread local storage specifier... " >&6; }
+ if ${ac_cv_tls+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
+ for ax_tls_keyword in $ax_tls_keywords; do
+ case $ax_tls_keyword in
+ none) ac_cv_tls=none ; break ;;
+ *)
+ # MPICH modification: This was an AC_TRY_COMPILE before, but
+ # Darwin with non-standard compilers will accept __thread at
+ # compile time but fail to link due to an undefined
+ # "__emutls_get_address" symbol unless -lgcc_eh is added to the
+ # link line.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ax_tls_keyword int bar = 5;
+int
+main ()
+{
+++bar;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_tls=$ax_tls_keyword
+else
+ ac_cv_tls=none
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ # MPICH modification: Also test with the extern keyword.
+ # The intel compiler on Darwin (at least as of 15.0.1)
+ # seems to break with the above error when the extern
+ # keyword is specified in shared library builds.
+
+ if test -z "${pac_save_LIBS_nesting}" ; then
+ pac_save_LIBS_nesting=0
+ fi
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}='"$LIBS"'
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} + 1`
+
+
+
+ if echo "$LIBS" | $FGREP -e "\<-shared\>" >/dev/null 2>&1; then :
+ echo "LIBS(='$LIBS') contains '-shared', not appending" >&5
+else
+ echo "LIBS(='$LIBS') does not contain '-shared', appending" >&5
+ LIBS="$LIBS -shared"
+
+fi
+
+ if test "$ac_cv_tls" != "none" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+
+int
+main ()
+{
+++bar;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_tls=$ax_tls_keyword
+else
+ ac_cv_tls=none
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+
+ pac_save_LIBS_nesting=`expr ${pac_save_LIBS_nesting} - 1`
+ eval LIBS="\$pac_save_LIBS_${pac_save_LIBS_nesting}"
+ eval pac_save_LIBS_${pac_save_LIBS_nesting}=""
+
+
+ if test "$ac_cv_tls" != "none" ; then break ; fi
+ esac
+ done
+
+fi
+
+
+ if test "$ac_cv_tls" != "none"; then
+
+cat >>confdefs.h <<_ACEOF
+#define TLS_SPECIFIER $ac_cv_tls
+_ACEOF
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
+$as_echo "$ac_cv_tls" >&6; }
+
+
+#######################################################################
+## END OF THREADS CODE
+#######################################################################
+
+
+#######################################################################
+## START OF DBG CODE
+#######################################################################
+
+# mkstemp() is a better replacement for mktemp()
+for ac_func in mkstemp
+do :
+ ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_MKSTEMP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_mkstemp" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkstemp needs a declaration" >&5
+$as_echo_n "checking whether mkstemp needs a declaration... " >&6; }
+if ${pac_cv_func_decl_mkstemp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))mkstemp;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_mkstemp=no
+else
+ pac_cv_func_decl_mkstemp=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_mkstemp" >&5
+$as_echo "$pac_cv_func_decl_mkstemp" >&6; }
+if test "$pac_cv_func_decl_mkstemp" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_MKSTEMP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+# fdopen() converts from an fd to a FILE*
+for ac_func in fdopen
+do :
+ ac_fn_c_check_func "$LINENO" "fdopen" "ac_cv_func_fdopen"
+if test "x$ac_cv_func_fdopen" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_FDOPEN 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_fdopen" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fdopen needs a declaration" >&5
+$as_echo_n "checking whether fdopen needs a declaration... " >&6; }
+if ${pac_cv_func_decl_fdopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+void (*fptr)(void) = (void(*)(void))fdopen;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_fdopen=no
+else
+ pac_cv_func_decl_fdopen=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_fdopen" >&5
+$as_echo "$pac_cv_func_decl_fdopen" >&6; }
+if test "$pac_cv_func_decl_fdopen" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_FDOPEN_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+for ac_func in getpid
+do :
+ ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid"
+if test "x$ac_cv_func_getpid" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_GETPID 1
+_ACEOF
+
+fi
+done
+
+
+#######################################################################
+## END OF DBG CODE
+#######################################################################
+
+#######################################################################
+## START OF SHM CODE
+#######################################################################
+
+
+
+# check how to allocate shared memory
+
+# Check whether --with-shared-memory was given.
+if test "${with_shared_memory+set}" = set; then :
+ withval=$with_shared_memory;
+else
+ with_shared_memory=auto
+fi
+
+
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = mmap; then
+ found_mmap_funcs=yes
+ for ac_func in mmap munmap
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ found_mmap_funcs=no
+fi
+done
+
+ if test "$found_mmap_funcs" = yes ; then
+ with_shared_memory=mmap
+
+$as_echo "#define USE_MMAP_SHM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using a memory-mapped file for shared memory" >&5
+$as_echo "$as_me: Using a memory-mapped file for shared memory" >&6;}
+ elif test "$with_shared_memory" = mmap ; then
+ as_fn_error $? "cannot support shared memory: mmap() or munmap() not found" "$LINENO" 5
+ fi
+fi
+if test "$with_shared_memory" = auto -o "$with_shared_memory" = sysv; then
+ found_sysv_shm_funcs=yes
+ for ac_func in shmget shmat shmctl shmdt
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ found_sysv_shm_funcs=no
+fi
+done
+
+ if test "$found_sysv_shm_funcs" = yes ; then
+ with_shared_memory=sysv
+
+$as_echo "#define USE_SYSV_SHM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using SYSV shared memory" >&5
+$as_echo "$as_me: Using SYSV shared memory" >&6;}
+ elif test "$with_shared_memory" = sysv ; then
+ as_fn_error $? "cannot support shared memory: sysv shared memory functions functions not found" "$LINENO" 5
+ fi
+fi
+
+
+case $with_shared_memory in
+ sysv)
+
+$as_echo "#define MPL_USE_SYSV_SHM 1" >>confdefs.h
+
+ ;;
+ mmap)
+
+$as_echo "#define MPL_USE_MMAP_SHM 1" >>confdefs.h
+
+ ;;
+ nt)
+
+$as_echo "#define MPL_USE_NT_SHM 1" >>confdefs.h
+
+ ;;
+ *)
+ as_fn_error $? "cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory" "$LINENO" 5
+esac
+
+
+#######################################################################
+## END OF SHM CODE
+#######################################################################
+
+## Enable creation of libtool-style versioning or no versioning
+# Check whether --enable-versioning was given.
+if test "${enable_versioning+set}" = set; then :
+ enableval=$enable_versioning;
+else
+ enable_versioning=yes
+fi
+
+
+if test "$enable_versioning" = "yes" ; then
+ libmpl_so_versionflags="-version-info \$(libmpl_so_version)"
+else
+ libmpl_so_versionflags="-avoid-version"
+fi
+export libmpl_so_versionflags
+
+
+#######################################################################
+
+
+# Check for strdup
+for ac_func in strdup
+do :
+ ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRDUP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strdup" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strdup needs a declaration" >&5
+$as_echo_n "checking whether strdup needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strdup+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strdup;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strdup=no
+else
+ pac_cv_func_decl_strdup=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strdup" >&5
+$as_echo "$pac_cv_func_decl_strdup" >&6; }
+if test "$pac_cv_func_decl_strdup" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRDUP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for snprintf
+for ac_func in snprintf
+do :
+ ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_snprintf" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf needs a declaration" >&5
+$as_echo_n "checking whether snprintf needs a declaration... " >&6; }
+if ${pac_cv_func_decl_snprintf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+void (*fptr)(void) = (void(*)(void))snprintf;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_snprintf=no
+else
+ pac_cv_func_decl_snprintf=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_snprintf" >&5
+$as_echo "$pac_cv_func_decl_snprintf" >&6; }
+if test "$pac_cv_func_decl_snprintf" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_SNPRINTF_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for strncmp
+for ac_func in strncmp
+do :
+ ac_fn_c_check_func "$LINENO" "strncmp" "ac_cv_func_strncmp"
+if test "x$ac_cv_func_strncmp" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNCMP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_strncmp" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strncmp needs a declaration" >&5
+$as_echo_n "checking whether strncmp needs a declaration... " >&6; }
+if ${pac_cv_func_decl_strncmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+void (*fptr)(void) = (void(*)(void))strncmp;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_strncmp=no
+else
+ pac_cv_func_decl_strncmp=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_strncmp" >&5
+$as_echo "$pac_cv_func_decl_strncmp" >&6; }
+if test "$pac_cv_func_decl_strncmp" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_STRNCMP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+# Check for putenv
for ac_func in putenv
do :
ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
@@ -12877,6 +14758,182 @@ fi
fi
+# Check for usleep
+for ac_func in usleep
+do :
+ ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
+if test "x$ac_cv_func_usleep" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_USLEEP 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep needs a declaration" >&5
+$as_echo_n "checking whether usleep needs a declaration... " >&6; }
+if ${pac_cv_func_decl_usleep+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+void (*fptr)(void) = (void(*)(void))usleep;
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pac_cv_func_decl_usleep=no
+else
+ pac_cv_func_decl_usleep=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_cv_func_decl_usleep" >&5
+$as_echo "$pac_cv_func_decl_usleep" >&6; }
+if test "$pac_cv_func_decl_usleep" = "yes" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define NEEDS_USLEEP_DECL 1
+_ACEOF
+
+
+fi
+
+fi
+
+for ac_func in backtrace_symbols
+do :
+ ac_fn_c_check_func "$LINENO" "backtrace_symbols" "ac_cv_func_backtrace_symbols"
+if test "x$ac_cv_func_backtrace_symbols" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_BACKTRACE_SYMBOLS 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for backtrace_create_state in -lbacktrace" >&5
+$as_echo_n "checking for backtrace_create_state in -lbacktrace... " >&6; }
+if ${ac_cv_lib_backtrace_backtrace_create_state+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbacktrace $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char backtrace_create_state ();
+int
+main ()
+{
+return backtrace_create_state ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_backtrace_backtrace_create_state=yes
+else
+ ac_cv_lib_backtrace_backtrace_create_state=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_backtrace_backtrace_create_state" >&5
+$as_echo "$ac_cv_lib_backtrace_backtrace_create_state" >&6; }
+if test "x$ac_cv_lib_backtrace_backtrace_create_state" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBBACKTRACE 1
+_ACEOF
+
+ LIBS="-lbacktrace $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unw_backtrace in -lunwind" >&5
+$as_echo_n "checking for unw_backtrace in -lunwind... " >&6; }
+if ${ac_cv_lib_unwind_unw_backtrace+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lunwind $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char unw_backtrace ();
+int
+main ()
+{
+return unw_backtrace ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_unwind_unw_backtrace=yes
+else
+ ac_cv_lib_unwind_unw_backtrace=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_unwind_unw_backtrace" >&5
+$as_echo "$ac_cv_lib_unwind_unw_backtrace" >&6; }
+if test "x$ac_cv_lib_unwind_unw_backtrace" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUNWIND 1
+_ACEOF
+
+ LIBS="-lunwind $LIBS"
+
+fi
+
+
+ac_fn_c_check_decl "$LINENO" "backtrace_create_state" "ac_cv_have_decl_backtrace_create_state" "$ac_includes_default"
+if test "x$ac_cv_have_decl_backtrace_create_state" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BACKTRACE_CREATE_STATE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "backtrace_print" "ac_cv_have_decl_backtrace_print" "$ac_includes_default"
+if test "x$ac_cv_have_decl_backtrace_print" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BACKTRACE_PRINT $ac_have_decl
+_ACEOF
+
+
@@ -12941,7 +14998,7 @@ $as_echo "#define HAVE_GCC_ATTRIBUTE 1" >>confdefs.h
fi
-ac_config_files="$ac_config_files Makefile localdefs"
+ac_config_files="$ac_config_files Makefile localdefs include/mpl_timer.h"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -13966,6 +16023,7 @@ do
"include/mplconfig.h") CONFIG_COMMANDS="$CONFIG_COMMANDS include/mplconfig.h" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"localdefs") CONFIG_FILES="$CONFIG_FILES localdefs" ;;
+ "include/mpl_timer.h") CONFIG_FILES="$CONFIG_FILES include/mpl_timer.h" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
diff --git a/src/pm/hydra/mpl/configure.ac b/src/pm/hydra/mpl/configure.ac
index c4e798c..efff75b 100644
--- a/src/pm/hydra/mpl/configure.ac
+++ b/src/pm/hydra/mpl/configure.ac
@@ -7,7 +7,7 @@ AC_PREREQ(2.63)
AC_INIT([MPL], [0.1])
# sanity check that --srcdir was specified correctly
-AC_CONFIG_SRCDIR([src/mplstr.c])
+AC_CONFIG_SRCDIR([src/str/mpl_str.c])
AC_CONFIG_AUX_DIR(confdb)
AC_CONFIG_MACRO_DIR(confdb)
@@ -51,10 +51,64 @@ AC_C_RESTRICT
AC_C_INLINE
PAC_C_MACRO_VA_ARGS
+PAC_C_BUILTIN_EXPECT
+
+AC_ARG_ENABLE(embedded,
+ AC_HELP_STRING([--enable-embedded], [Build MPL in embedded mode (default is no)]),
+ [embedded=yes],
+ [embedded=no])
+AM_CONDITIONAL([MPL_EMBEDDED_MODE],[test "x${embedded}" = "xyes"])
+
+AC_ARG_ENABLE(g,
+ AC_HELP_STRING([--enable-g=option],
+ [
+ Control the level of debugging support in MPL.
+ "option" is a list of comma separated names. Default
+ is "all".
+
+ none|no - No debugging
+ log - Enable debug event logging
+ mem - Enable memory tracing
+ yes|all - All of the above choices (except "none", obviously)
+ ]),,[enable_g=none])
+
+# enable-g
+# strip off multiple options, separated by commas
+PAC_PUSH_FLAG(IFS)
+IFS=","
+for option in $enable_g ; do
+ case "$option" in
+ log)
+ enable_g_log=yes
+ ;;
+
+ mem)
+ enable_g_mem=yes
+ ;;
+
+ all|yes)
+ enable_g_log=yes
+ enable_g_mem=yes
+ ;;
+
+ no|none)
+ ;;
+
+ *)
+ AC_MSG_WARN([Unknown value $option for enable-g])
+ ;;
+ esac
+done
+PAC_POP_FLAG(IFS)
+
+if test "$enable_g_log" = "yes" ; then
+ AC_DEFINE([USE_DBG_LOGGING],[1],[Define to enable logging macros])
+fi
+
+if test "$enable_g_mem" = "yes" ; then
+ AC_DEFINE([USE_MEMORY_TRACING],[1],[Define to enable memory tracing])
+fi
-# TODO: could add a --enable-embedded or similar to also control this
-AC_ARG_VAR([FROM_MPICH],[set to "yes" if building MPL inside of MPICH])
-AM_CONDITIONAL([MPL_EMBEDDED_MODE],[test "x${FROM_MPICH}" = "xyes"])
# support gcov test coverage information
PAC_ENABLE_COVERAGE
@@ -71,7 +125,7 @@ if test "$pac_cv_have___typeof" = "yes" ; then
fi
dnl Check if the necessary headers are available
-AC_CHECK_HEADERS(stdio.h stdlib.h string.h stdarg.h ctype.h search.h sys/types.h sys/uio.h)
+AC_CHECK_HEADERS(stdio.h stdlib.h string.h stdarg.h ctype.h sys/types.h sys/uio.h execinfo.h backtrace.h libunwind.h unistd.h errno.h windows.h)
# A C99 compliant compiler should have inttypes.h for fixed-size int types
AC_CHECK_HEADERS(inttypes.h stdint.h)
@@ -154,6 +208,585 @@ char mempool_obj;
fi
fi
+
+#######################################################################
+## TIMER CODE
+#######################################################################
+
+# ----------------------------------------------------------------------------
+# Support for timers. The following code processes the
+# --enable-timer-type=name argument and selects the timer based on
+# both that field and what configure is able to determine is available.
+# The file src/include/mpl_timer.h is also created.
+# ----------------------------------------------------------------------------
+
+# clock_gettime is the POSIX gettimeofday
+# gethrtime is the Solaris high-resolution timer
+dnl
+dnl Specific checks that a function works correctly
+dnl
+dnl Now that we know what the options are, choose the timer to use
+dnl
+dnl The default preference is
+dnl Solaris gethrtime
+dnl Posix clock_gettime
+dnl Unix gettimeofday (one of two versions)
+dnl
+dnl Also available are various hardware time stamps
+dnl Linux-x86 cycle counter
+dnl Powerpc-64bit timebase cycle counter
+dnl
+dnl We also allow --enable-timer-type=name to select a timer type
+AC_ARG_ENABLE(timer-type,
+[ --enable-timer-type=name - Select the timer to use for MPI_Wtime and
+ internal timestamps.
+ ppc64_cycle - Powerpc-64bit; returns cycle counts using timebase register
+ gethrtime - Solaris timer (Solaris systems only)
+ clock_gettime - Posix timer (where available)
+ gettimeofday - Most Unix systems
+ linux86_cycle - Linux x86; returns cycle counts, not time in seconds*
+ gcc_ia64_cycle - IPF ar.itc timer*
+ mach_absolute_time - Mach absolute time (alternative to clock_gettime
+ for OSX)
+ device - The timer is provided by the device
+
+ *Note that the cycle timers are intended to be used by
+ developers for internal low-level timing. Normal users should
+ not use these as they are not guaranteed to be accurate in
+ certain situations.
+],timer_type=$enable_timer_type)
+
+## The user did not specify a timer type. Try to find a sane option
+## that is supported by the platform.
+if test -z "$timer_type" ; then
+ # Try to pick a timer based on what is available
+ AC_CHECK_FUNCS(clock_gettime clock_getres gethrtime mach_absolute_time gettimeofday)
+ if test "$ac_cv_func_gethrtime" = "yes" ; then
+ # Sigh. The Solaris include files do not define hrtime_t
+ # Before we accept this choice, make sure that we can
+ # do arithmetic with hrtime_t .
+ AC_CACHE_CHECK([that hrtime_t is properly defined for gethrtime],
+ pac_cv_hrtime_works,[
+ AC_TRY_COMPILE([
+#include <sys/time.h>
+],[hrtime_t t1, t2; t1 = 1; t2 = 2; t1 = t1 + t2;],
+pac_cv_hrtime_works=yes,pac_cv_hrtime_works=no)])
+ # A more ambitious test would look to see if casting an
+ # hrtime_t to int64_t works, and even more ambitious
+ # would check whether long or long long was 64 bits (or even
+ # better, the sizeof hrtime_t).
+
+ # AC_CHECK_FUNCS has false positive when checking whether gethrtime is
+ # available on Solaris with strict configuration. We must use
+ # AC_CHECK_DECL to confirm it.
+ AC_CHECK_DECL(gethrtime)
+ fi
+ if test "$ac_cv_func_gethrtime" = "yes" -a \
+ "$ac_cv_has_decl_gethrtime" = "yes" -a \
+ "$pac_cv_hrtime_works" = "yes" ; then
+ timer_type=gethrtime
+ elif test "$ac_cv_func_clock_gettime" = "yes" -a \
+ "$ac_cv_func_clock_getres" = "yes" ; then
+ # Test on both because some systems (e.g., cygwin) provide
+ # clock_gettime but not clock_getres
+ timer_type=clock_gettime
+ elif test "$ac_cv_func_mach_absolute_time" = "yes" ; then
+ timer_type=mach_absolute_time
+ elif test "$ac_cv_func_gettimeofday" = "yes" ; then
+ timer_type=gettimeofday
+ fi
+fi
+if test -z "$timer_type" ; then
+ AC_MSG_ERROR([No timer found])
+fi
+
+# Check for valid timer and select datatypes for the time stamp
+case "$timer_type" in
+
+ gethrtime)
+ MPL_TIMER_TYPE=hrtime_t
+ AC_CHECK_FUNC(gethrtime,,[
+ AC_MSG_ERROR([Requested timer gethrtime is not available])
+])
+ ;;
+
+ clock_gettime)
+ missing_function=no
+ AC_SEARCH_LIBS([clock_gettime],[rt],,AC_MSG_ERROR([clock_gettime is not available]))
+ AC_SEARCH_LIBS([clock_getres],[rt],,AC_MSG_ERROR([clock_getres is not available]))
+ MPL_TIMER_TYPE="struct timespec"
+ # AIX does not always define struct timespec (!)
+ # Make sure that we can use struct timespec
+ AC_CACHE_CHECK([whether struct timespec is defined in time.h],
+ pac_cv_struct_timespec_defined,[
+ AC_TRY_COMPILE([
+#include <time.h>],[
+ struct timespec t;],pac_cv_struct_timespec_defined=yes,
+ pac_cv_struct_timespec_defined=no)
+])
+ if test "$pac_cv_struct_timespec_defined" != "yes" ; then
+ # Try again, but with -D_XOPEN_SOURCE=500 (works for AIX)
+ AC_CACHE_CHECK([whether struct timespec is defined in time.h with _XOPEN_SOURCE=500],
+ pac_cv_struct_timespec_defined_with_xopen500,[
+ AC_TRY_COMPILE([
+#define _XOPEN_SOURCE 500
+#include <time.h>],[
+ struct timespec t;],pac_cv_struct_timespec_defined_with_xopen500=yes,
+ pac_cv_struct_timespec_defined_with_xopen500=no)
+])
+ if test "$pac_cv_struct_timespec_defined_with_xopen500" = "yes" ; then
+ # We need to define _XOPEN_SOURCE=500, but we need to ensure that
+ # this is done before any include files are loaded. At
+ # this point it is really too late to add this definition,
+ # since it may make other tests incompatible.
+ AC_MSG_ERROR([The available timer requires _XOPEN_SOURCE=500. Add -D_XOPEN_SOURCE=500 to CFLAGS and rerun configure])
+ fi
+ fi
+ #
+ # FreeBSD 4.3 incorrectly puts the header into sys/time.h;
+ # time.h is required (see pages 45 and 46 in the POSIX standard).
+ # See if we can compile
+ AC_CACHE_CHECK([for CLOCK_REALTIME defined in time.h],pac_cv_posix_clock_realtime,[
+ AC_TRY_COMPILE([
+#include <time.h>],[
+ clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
+pac_cv_posix_clock_realtime=no)])
+ if test "$pac_cv_posix_clock_realtime" = "no" ; then
+ AC_MSG_WARN([POSIX timer requires definitions in time.h])
+ # Check for the definition in sys/time.h, which is where
+ # OpenBSD and FreeBSD have put it by mistake
+ AC_TRY_COMPILE([
+#include <time.h>
+#include <sys/time.h>],[
+ clockid_t cid = CLOCK_REALTIME;],pac_cv_posix_clock_realtime=yes,
+pac_cv_posix_clock_realtime=no)
+ if test "$pac_cv_posix_clock_realtime" = yes ; then
+ AC_MSG_WARN([sys/time.h required for POSIX timer])
+ AC_DEFINE(NEEDS_SYS_TIME_H,1,[Define if sys/time.h is required to get timer definitions])
+ else
+ AC_MSG_ERROR([Cannot find the definition of CLOCK_REALTIME for the POSIX timer])
+ fi
+ fi
+ ;;
+
+ gettimeofday)
+ MPL_TIMER_TYPE="struct timeval"
+ # We may have already tested for gettimeofday. If we got a "yes",
+ # we're good to go
+ if test "$ac_cv_func_gettimeofday" != "yes" ; then
+ AC_CHECK_FUNC(gettimeofday,,[
+ AC_MSG_ERROR([Requested timer gettimeofday is not available])
+])
+ fi
+ ;;
+
+ linux86_cycle|linux86_cycle_2)
+
+# The following AC_TRY_RUN statements are needed because x86_64 compilers
+# usually know about rdtscp but the cpu may or may not actually implement the
+# feature. This is not cross-compile safe, unfortunately. In the long run we
+# should allow the user to override this with a configure flag.
+ AC_CACHE_CHECK([that linux86 cycle counter is available],
+ pac_cv_linux86_cycle,
+ AC_TRY_RUN([
+int main()
+{
+ /* rdtscp */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+ ],pac_cv_linux86_cycle=rdtscp,
+ AC_TRY_RUN([[
+int main()
+{
+ /* cpuid 64 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ return 0;
+}
+ ]],pac_cv_linux86_cycle=cpuid_rdtsc64,
+ AC_TRY_RUN([[[
+int main()
+{
+ /* cpuid 32 */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ return 0;
+}
+ ]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
+ AC_TRY_RUN([[[[
+int main()
+{
+ /* simple */
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ return 0;
+}
+ ]]]],pac_cv_linux86_cycle=rdtsc,
+ pac_cv_linux86_cycle=no)
+ )
+ ),
+dnl The if-cross-compiling clause from the first AC_TRY_RUN. Hope that if the
+dnl compiler knows about the instruction then it's supported by the target
+dnl platform.
+ AC_TRY_COMPILE(,[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtscp; shl \$32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ ]],pac_cv_linux86_cycle=rdtscp,
+ AC_TRY_COMPILE(,[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx");
+ ]]],pac_cv_linux86_cycle=cpuid_rdtsc64,
+ AC_TRY_COMPILE(,[[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx");
+ ]]]],pac_cv_linux86_cycle=cpuid_rdtsc32,
+ AC_TRY_COMPILE(,[[[[[
+ long long var, *var_ptr=&var;
+ __asm__ __volatile__("rdtsc" : "=A" (*var_ptr));
+ ]]]]],pac_cv_linux86_cycle=rdtsc,
+ pac_cv_linux86_cycle=no)
+ )
+ )
+ )
+ )
+ )
+
+ case "$pac_cv_linux86_cycle" in
+ "rdtscp")
+ AC_DEFINE(LINUX86_CYCLE_RDTSCP,1,[Define which x86 cycle counter to use])
+ ;;
+ "cpuid_rdtsc64")
+ AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC64,1,[Define which x86 cycle counter to use])
+ ;;
+ "cpuid_rdtsc32")
+ AC_DEFINE(LINUX86_CYCLE_CPUID_RDTSC32,1,[Define which x86 cycle counter to use])
+ ;;
+ "rdtsc")
+ AC_DEFINE(LINUX86_CYCLE_RDTSC,1,[Define which x86 cycle counter to use])
+ ;;
+ *)
+ cpu_gcc_x86_cycle=no
+ ;;
+ esac
+
+ if test "$cpu_gcc_x86_cycle" = "no" ; then
+ AC_MSG_ERROR([Linux86 cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="long long"
+ ;;
+
+ gcc_ia64_cycle)
+ AC_CACHE_CHECK([that IPF timer is available],
+pac_cv_ia64_cycle,[
+ AC_TRY_COMPILE(,[
+ long var, *var_ptr=&var;
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ var=__getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (var_ptr));
+#endif
+],pac_cv_gcc_ia64_cycle=yes,pac_cv_gcc_ia64_cycle=no)])
+ if test "$pac_cv_gcc_ia64_cycle" != "yes" ; then
+ AC_MSG_ERROR([IPF cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="long"
+ ;;
+
+ mach_absolute_time)
+ AC_CHECK_FUNC(mach_absolute_time,,[AC_MSG_ERROR([mach_absolute_time is not available])])
+ AC_CHECK_FUNC(mach_timebase_info,,[AC_MSG_ERROR([mach_timebase_info is not available])])
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+
+ device)
+ # The device selected should export the datatype for the timer
+ MPL_TIMER_TYPE="void *"
+ ;;
+
+ ppc64_cycle)
+ AC_CACHE_CHECK([that ppc64 timebase cycle counter is available],
+ pac_cv_ppc64_cycle,[
+ AC_TRY_COMPILE([
+ ],[
+ unsigned temp;
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (0x10D));
+ ],pac_cv_ppc64_cycle=yes,
+ pac_cv_ppc64_cycle=no)
+ ])
+ if test "pac_cv_ppc64_cycle" != "yes" ; then
+ AC_MSG_ERROR([The PPC64 cycle counter is not available on this system and or with the $CC compiler])
+ fi
+ MPL_TIMER_TYPE="uint64_t"
+ ;;
+ *)
+ AC_MSG_ERROR([Invalid timer type $timer_type])
+ ;;
+esac
+# Convert timer type to upper case
+timer_type=`echo $timer_type | \
+ tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+MPL_TIMER_KIND=MPL_TIMER_KIND__$timer_type
+AC_SUBST(MPL_TIMER_KIND)
+AC_SUBST(MPL_TIMER_TYPE)
+AC_MSG_NOTICE([Timer type selected is $timer_type])
+
+#######################################################################
+## END OF TIMER CODE
+#######################################################################
+
+
+#######################################################################
+## START OF PROCESSOR YIELD CODE
+#######################################################################
+# If the user specified a method to use, we check if it's available.
+# If a method was not specified, we make a guess based on the OS. The
+# default is to use sched_yield() or yield() if one is available,
+# otherwise, default to nothing. After that we define the appropriate
+# macro.
+
+AC_CHECK_HEADERS(sched.h)
+AC_CHECK_HEADERS(unistd.h)
+AC_CHECK_HEADERS(sys/select.h)
+AC_CHECK_FUNCS(sched_yield yield usleep sleep select)
+
+if test "$ac_cv_func_usleep" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <unistd.h>],usleep)
+fi
+
+AC_ARG_ENABLE([yield],
+ [AS_HELP_STRING([--enable-yield], [choose a method to yield the processor in busy loops. Available methods are: sched_yield, yield, select, usleep, sleep, nothing])],
+ [AS_CASE([$enableval],
+ [sched_yield], [AS_IF([test "x$ac_cv_func_sched_yield" != "xyes"], [enable_yield=unavail])],
+ [yield], [AS_IF([test "x$ac_cv_func_yield" != "xyes"], [enable_yield=unavail])],
+ [select], [AS_IF([test "x$ac_cv_func_select" != "xyes"], [enable_yield=unavail])],
+ [usleep], [AS_IF([test "x$ac_cv_func_usleep" != "xyes"], [enable_yield=unavail])],
+ [sleep], [AS_IF([test "x$ac_cv_func_sleep" != "xyes"], [enable_yield=unavail])],
+ [nothing|no|none], [],
+ [AC_MSG_ERROR([Invalid option $enableval for --enable-yield])])
+
+ AS_IF([test "x$enable_yield" = "xunavail"],
+ [AC_MSG_ERROR([Yield method $enableval is not available on this platform.])])
+ ],
+ [# none specified by user; make a guess based on os
+ AS_CASE([$host],
+ [*-*-darwin*],
+ [# In Lion, sched_yield worked but none of the other options had any effect
+ AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
+ [enable_yield=nothing])],
+ [*-*-linux*],
+ [# sched_yield() has been broken in linux since 2.6.23, and no good alternative exists.
+ enable_yield=nothing],
+ [# default: just use sched_yield() or yield()
+ AS_IF([test "x$ac_cv_func_sched_yield" = "xyes"], [enable_yield=sched_yield],
+ [test "x$ac_cv_func_yield" = "xyes"], [enable_yield=yield],
+ [enable_yield=nothing])])
+ ]
+)
+
+# set the appropriate macro
+AS_CASE([$enable_yield],
+ [sched_yield],
+ [AC_DEFINE(USE_SCHED_YIELD_FOR_YIELD,1,[Define to use sched_yield to yield processor])],
+ [yield],
+ [AC_DEFINE(USE_YIELD_FOR_YIELD,1,[Define to use yield to yield processor])],
+ [select],
+ [AC_DEFINE(USE_SELECT_FOR_YIELD,1,[Define to use select to yield processor])],
+ [usleep],
+ [AC_DEFINE(USE_USLEEP_FOR_YIELD,1,[Define to use usleep to yield processor])],
+ [sleep],
+ [AC_DEFINE(USE_SLEEP_FOR_YIELD,1,[Define to use sleep to yield processor])],
+ [nothing|no|none],
+ [AC_DEFINE(USE_NOTHING_FOR_YIELD,1,[Define to use nothing to yield processor])],
+ [AC_MSG_ERROR([Invalid value $enable_yield for enable_yield.])]
+)
+
+#######################################################################
+## END OF PROCESSOR YIELD CODE
+#######################################################################
+
+
+#######################################################################
+## START OF THREADS CODE
+#######################################################################
+AC_ARG_WITH([thread-package],
+[ --with-thread-package=package Thread package to use. Supported thread packages include:
+ posix or pthreads - POSIX threads (default, if required)
+ solaris - Solaris threads (Solaris OS only)
+ win - windows threads
+ none - no threads
+],,with_thread_package=posix)
+
+if test "${thread_pkg_required}" = "no" -o "${with_thread_package}" = "no" ; then
+ with_thread_package=none
+fi
+
+if test "${with_thread_package}" = "yes" ; then
+ with_thread_package=posix
+fi
+
+if test "${thread_pkg_required}" = "yes" -a "${with_thread_package}" = "none" ; then
+ AC_ERROR([if no thread package is available, use --enable-threads=single or funneled])
+fi
+
+THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_INVALID
+case $with_thread_package in
+ posix|pthreads)
+ with_thread_package=posix
+ AC_CHECK_HEADERS(pthread.h)
+
+ # If pthreads library is found, just include it on the link line. We don't try
+ # to test if the C compiler needs it or not, since the C++ or Fortran
+ # compilers might need it even if the C compiler doesn't
+ # (nvcc with gfortran, for example).
+ #
+ # OSF1 has __pthread_create but not pthread_create (because of
+ # inconsistencies in the pthread spec). Thus, we look for pthread_key_create
+ AC_CHECK_LIB([pthread],[pthread_key_create],have_pthreads=yes)
+ if test "$have_pthreads" = "yes" ; then
+ PAC_PREPEND_FLAG([-lpthread],[LIBS])
+ fi
+
+ AC_CHECK_FUNCS(pthread_yield)
+
+ # this check should come after the AC_CHECK_LIB for -lpthread
+ AC_CHECK_FUNC([pthread_key_create],[],[AC_MSG_ERROR([unable to find pthreads library])])
+
+ # Check for a routine that specify a routine to call on
+ # thread exit. We can use this to release memory that may
+ # be allocated by the MPL library in the thread.
+ # A complication: pthread_cleanup_push may be a macro; in that
+ # case, check_funcs will fail to find it.
+ # Under OSX, pthread_cleanup_push and pop are macros that must
+ # appear together in the same lexical scope, and hence are
+ # really useless in libraries that may allocate data within
+ # a user-managed thread.
+ AC_CHECK_FUNCS(pthread_cleanup_push)
+ if test "$ac_cv_func_pthread_cleanup_push" = "no" ; then
+ AC_CACHE_CHECK([whether pthread_cleanup_push is available (may be a macro in pthread.h)],pac_cv_func_pthread_cleanup_push,[
+ AC_TRY_LINK([
+#include <pthread.h>
+void f1(void *a) { return; }],
+[pthread_cleanup_push( f1, (void *)0 );],
+ pac_cv_func_pthread_cleanup_push=yes,
+ pac_cv_func_pthread_cleanup_push=no)])
+ if test "$pac_cv_func_pthread_cleanup_push" = yes ; then
+ AC_DEFINE(HAVE_PTHREAD_CLEANUP_PUSH_MACRO,1,[Define if pthread_cleanup_push is available, even as a macro])
+ fi
+
+ fi
+
+ # Check for PTHREAD_MUTEX_ERRORCHECK_NP and PTHREAD_MUTEX_ERRORCHECK
+ AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK_NP],
+ pac_cv_has_pthread_mutex_errorcheck_np,[
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [int a=PTHREAD_MUTEX_ERRORCHECK_NP;],
+ pac_cv_has_pthread_mutex_errorcheck_np=yes,
+ pac_cv_has_pthread_mutex_errorcheck_np=no)])
+ AC_CACHE_CHECK([whether pthread.h defines PTHREAD_MUTEX_ERRORCHECK],
+ pac_cv_has_pthread_mutex_errorcheck,[
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [int a=PTHREAD_MUTEX_ERRORCHECK;],
+ pac_cv_has_pthread_mutex_errorcheck=yes,
+ pac_cv_has_pthread_mutex_errorcheck=no)])
+
+ if test "$pac_cv_has_pthread_mutex_errorcheck" = yes ; then
+ AC_DEFINE(PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK,
+ [Define to an expression that will result in an error checking mutex type.])
+ elif test "$pac_cv_has_pthread_mutex_errorcheck_np" = yes ; then
+ AC_DEFINE(PTHREAD_MUTEX_ERRORCHECK_VALUE,PTHREAD_MUTEX_ERRORCHECK_NP,
+ [Define to an expression that will result in an error checking mutex type.])
+ fi
+
+ PAC_FUNC_NEEDS_DECL([#include <pthread.h>],pthread_mutexattr_settype)
+
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_POSIX
+ ;;
+ solaris)
+ AC_CHECK_HEADERS(thread.h)
+ AC_CHECK_FUNCS(thr_yield)
+ AC_SEARCH_LIBS(thr_create,thread,found=yes,found=no)
+ if test "$found" != "yes" ; then
+ AC_MSG_ERROR([unable to find Solaris threads library])
+ fi
+ # FIXME: need to add -mt if using solaris compilers
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_SOLARIS
+ ;;
+ win|windows)
+ with_thread_package=win
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_WIN
+ AC_MSG_ERROR([The 'win' thread package is not supported via autoconf builds at this time.])
+ ;;
+ no|none)
+ with_thread_package=none
+ THREAD_PACKAGE_NAME=MPL_THREAD_PACKAGE_NONE
+ ;;
+ *)
+ AC_MSG_ERROR([The specified thread package, $with_thread_package, is not supported.])
+ ;;
+esac
+
+# Define and export the selected thread library so that other packages
+# know what's used in MPL
+AC_DEFINE_UNQUOTED([THREAD_PACKAGE_NAME],[$THREAD_PACKAGE_NAME],[set to the name of the thread package])
+
+# check for compiler-support for thread-local storage (MPL_TLS_SPECIFIER)
+AX_TLS
+
+#######################################################################
+## END OF THREADS CODE
+#######################################################################
+
+
+#######################################################################
+## START OF DBG CODE
+#######################################################################
+
+# mkstemp() is a better replacement for mktemp()
+AC_HAVE_FUNCS(mkstemp)
+if test "$ac_cv_func_mkstemp" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],mkstemp)
+fi
+# fdopen() converts from an fd to a FILE*
+AC_HAVE_FUNCS(fdopen)
+if test "$ac_cv_func_fdopen" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <stdlib.h>],fdopen)
+fi
+
+AC_CHECK_FUNCS(getpid)
+
+#######################################################################
+## END OF DBG CODE
+#######################################################################
+
+#######################################################################
+## START OF SHM CODE
+#######################################################################
+
+dnl Check for shm
+PAC_ARG_SHARED_MEMORY
+
+case $with_shared_memory in
+ sysv)
+ AC_DEFINE(MPL_USE_SYSV_SHM,1,[Define if use SYSV shared memory])
+ ;;
+ mmap)
+ AC_DEFINE(MPL_USE_MMAP_SHM,1,[Define if use MMAP shared memory])
+ ;;
+ nt)
+ AC_DEFINE(MPL_USE_NT_SHM,1,[Define if use Windows shared memory])
+ ;;
+ *)
+ AC_MSG_ERROR([cannot support shared memory: need either sysv shared memory functions or mmap in order to support shared memory])
+esac
+
+
+#######################################################################
+## END OF SHM CODE
+#######################################################################
+
## Enable creation of libtool-style versioning or no versioning
AC_ARG_ENABLE(versioning,
[AC_HELP_STRING([--enable-versioning],[Enable library versioning])],,
@@ -200,9 +833,21 @@ if test "$ac_cv_func_strerror" = "yes" ; then
PAC_FUNC_NEEDS_DECL([#include <string.h>],strerror)
fi
+# Check for usleep
+AC_CHECK_FUNCS(usleep)
+if test "$ac_cv_func_usleep" = "yes" ; then
+ PAC_FUNC_NEEDS_DECL([#include <unistd.h>],usleep)
+fi
+
+AC_CHECK_FUNCS(backtrace_symbols)
+AC_CHECK_LIB(backtrace, backtrace_create_state)
+AC_CHECK_LIB(unwind, unw_backtrace)
+
+AC_CHECK_DECLS([backtrace_create_state, backtrace_print])
+
dnl Check for ATTRIBUTE
PAC_C_GNU_ATTRIBUTE
dnl Final output
-AC_CONFIG_FILES([Makefile localdefs])
+AC_CONFIG_FILES([Makefile localdefs include/mpl_timer.h])
AC_OUTPUT
diff --git a/src/pm/hydra/mpl/include/config.h.in b/src/pm/hydra/mpl/include/config.h.in
index 7ae7fc2..3571be6 100644
--- a/src/pm/hydra/mpl/include/config.h.in
+++ b/src/pm/hydra/mpl/include/config.h.in
@@ -1,27 +1,80 @@
/* include/config.h.in. Generated from configure.ac by autoheader. */
+/* Define to 1 if you have the <backtrace.h> header file. */
+#undef HAVE_BACKTRACE_H
+
+/* Define to 1 if you have the `backtrace_symbols' function. */
+#undef HAVE_BACKTRACE_SYMBOLS
+
/* define if valgrind is old and/or broken compared to what we are expecting
*/
#undef HAVE_BROKEN_VALGRIND
+/* Define to 1 if the compiler supports __builtin_expect. */
+#undef HAVE_BUILTIN_EXPECT
+
+/* Define to 1 if you have the `clock_getres' function. */
+#undef HAVE_CLOCK_GETRES
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
/* Define to 1 if you have the <ctype.h> header file. */
#undef HAVE_CTYPE_H
+/* Define to 1 if you have the declaration of `backtrace_create_state', and to
+ 0 if you don't. */
+#undef HAVE_DECL_BACKTRACE_CREATE_STATE
+
+/* Define to 1 if you have the declaration of `backtrace_print', and to 0 if
+ you don't. */
+#undef HAVE_DECL_BACKTRACE_PRINT
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <drd.h> header file. */
#undef HAVE_DRD_H
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
+/* Define to 1 if you have the `fdopen' function. */
+#undef HAVE_FDOPEN
+
/* Define if GNU __attribute__ is supported */
#undef HAVE_GCC_ATTRIBUTE
+/* Define to 1 if you have the `gethrtime' function. */
+#undef HAVE_GETHRTIME
+
+/* Define to 1 if you have the `getpid' function. */
+#undef HAVE_GETPID
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
/* Define to 1 if you have the <helgrind.h> header file. */
#undef HAVE_HELGRIND_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
+/* Define to 1 if you have the `backtrace' library (-lbacktrace). */
+#undef HAVE_LIBBACKTRACE
+
+/* Define to 1 if you have the `unwind' library (-lunwind). */
+#undef HAVE_LIBUNWIND
+
+/* Define to 1 if you have the <libunwind.h> header file. */
+#undef HAVE_LIBUNWIND_H
+
+/* Define to 1 if you have the `mach_absolute_time' function. */
+#undef HAVE_MACH_ABSOLUTE_TIME
+
/* Define if C99-style variable argument list macro functionality */
#undef HAVE_MACRO_VA_ARGS
@@ -31,11 +84,53 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Define to 1 if you have the `mkstemp' function. */
+#undef HAVE_MKSTEMP
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define to 1 if you have the `pthread_cleanup_push' function. */
+#undef HAVE_PTHREAD_CLEANUP_PUSH
+
+/* Define if pthread_cleanup_push is available, even as a macro */
+#undef HAVE_PTHREAD_CLEANUP_PUSH_MACRO
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the `pthread_yield' function. */
+#undef HAVE_PTHREAD_YIELD
+
/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV
-/* Define to 1 if you have the <search.h> header file. */
-#undef HAVE_SEARCH_H
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the `sched_yield' function. */
+#undef HAVE_SCHED_YIELD
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if you have the `shmat' function. */
+#undef HAVE_SHMAT
+
+/* Define to 1 if you have the `shmctl' function. */
+#undef HAVE_SHMCTL
+
+/* Define to 1 if you have the `shmdt' function. */
+#undef HAVE_SHMDT
+
+/* Define to 1 if you have the `shmget' function. */
+#undef HAVE_SHMGET
+
+/* Define to 1 if you have the `sleep' function. */
+#undef HAVE_SLEEP
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
@@ -67,6 +162,9 @@
/* Define to 1 if you have the `strncmp' function. */
#undef HAVE_STRNCMP
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
@@ -76,6 +174,12 @@
/* Define to 1 if you have the <sys/uio.h> header file. */
#undef HAVE_SYS_UIO_H
+/* Define to 1 if you have the <thread.h> header file. */
+#undef HAVE_THREAD_H
+
+/* Define to 1 if you have the `thr_yield' function. */
+#undef HAVE_THR_YIELD
+
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
@@ -97,12 +201,48 @@
/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
#undef HAVE_VALGRIND_VALGRIND_H
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
+/* Define to 1 if you have the `yield' function. */
+#undef HAVE_YIELD
+
/* defined if the C compiler supports __typeof(variable) */
#undef HAVE___TYPEOF
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_CPUID_RDTSC32
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_CPUID_RDTSC64
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_RDTSC
+
+/* Define which x86 cycle counter to use */
+#undef LINUX86_CYCLE_RDTSCP
+
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#undef LT_OBJDIR
+/* Define if use MMAP shared memory */
+#undef MPL_USE_MMAP_SHM
+
+/* Define if use Windows shared memory */
+#undef MPL_USE_NT_SHM
+
+/* Define if use SYSV shared memory */
+#undef MPL_USE_SYSV_SHM
+
+/* Define if fdopen needs a declaration */
+#undef NEEDS_FDOPEN_DECL
+
+/* Define if mkstemp needs a declaration */
+#undef NEEDS_MKSTEMP_DECL
+
+/* Define if pthread_mutexattr_settype needs a declaration */
+#undef NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL
+
/* Define if putenv needs a declaration */
#undef NEEDS_PUTENV_DECL
@@ -118,6 +258,12 @@
/* Define if strncmp needs a declaration */
#undef NEEDS_STRNCMP_DECL
+/* Define if sys/time.h is required to get timer definitions */
+#undef NEEDS_SYS_TIME_H
+
+/* Define if usleep needs a declaration */
+#undef NEEDS_USLEEP_DECL
+
/* Name of package */
#undef PACKAGE
@@ -139,12 +285,52 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
+/* Define to an expression that will result in an error checking mutex type.
+ */
+#undef PTHREAD_MUTEX_ERRORCHECK_VALUE
+
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
+/* set to the name of the thread package */
+#undef THREAD_PACKAGE_NAME
+
+/* If the compiler supports a TLS storage class define it to that here */
+#undef TLS_SPECIFIER
+
/* Define if performing coverage tests */
#undef USE_COVERAGE
+/* Define to enable logging macros */
+#undef USE_DBG_LOGGING
+
+/* Define to enable memory tracing */
+#undef USE_MEMORY_TRACING
+
+/* Define if we have sysv shared memory */
+#undef USE_MMAP_SHM
+
+/* Define to use nothing to yield processor */
+#undef USE_NOTHING_FOR_YIELD
+
+/* Define to use sched_yield to yield processor */
+#undef USE_SCHED_YIELD_FOR_YIELD
+
+/* Define to use select to yield processor */
+#undef USE_SELECT_FOR_YIELD
+
+/* Define to use sleep to yield processor */
+#undef USE_SLEEP_FOR_YIELD
+
+/* Define if we have sysv shared memory */
+#undef USE_SYSV_SHM
+
+/* Define to use usleep to yield processor */
+#undef USE_USLEEP_FOR_YIELD
+
+/* Define to use yield to yield processor */
+#undef USE_YIELD_FOR_YIELD
+
/* Version number of package */
#undef VERSION
diff --git a/src/pm/hydra/mpl/include/mpl.h b/src/pm/hydra/mpl/include/mpl.h
index 4885750..d9d6dd1 100644
--- a/src/pm/hydra/mpl/include/mpl.h
+++ b/src/pm/hydra/mpl/include/mpl.h
@@ -4,115 +4,24 @@
* See COPYRIGHT in top-level directory.
*/
-#ifndef MPL_H_INCLUDED
+#if !defined(MPL_H_INCLUDED)
#define MPL_H_INCLUDED
-#include "mplconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdint.h>
-
-#if defined _mpl_restrict
-#define mpl_restrict _mpl_restrict
-#else
-#define mpl_restrict restrict
-#endif /* _mpl_restrict */
-
-#if defined _mpl_const
-#define mpl_const _mpl_const
-#else
-#define mpl_const const
-#endif /* _mpl_const */
-
-#if defined _mpl_inline
-#define mpl_inline _mpl_inline
-#else
-#define mpl_inline inline
-#endif /* _mpl_inline */
-
-#if defined MPL_HAVE_CTYPE_H
-#include <ctype.h>
-#endif /* MPL_HAVE_CTYPE_H */
-
-#if defined(MPL_HAVE_INTTYPES_H)
-#include <inttypes.h>
-#endif /* MPL_HAVE_INTTYPES_H */
-
-#if !defined ATTRIBUTE
-# if defined MPL_HAVE_GCC_ATTRIBUTE
-# define ATTRIBUTE(a_) __attribute__(a_)
-# else /* MPL_HAVE_GCC_ATTRIBUTE */
-# define ATTRIBUTE(a_)
-# endif /* MPL_HAVE_GCC_ATTRIBUTE */
-#endif /* ATTRIBUTE */
-
-#if defined(MPL_HAVE_MACRO_VA_ARGS)
-#define MPL_error_printf(...) fprintf(stderr,__VA_ARGS__)
-#else
-#define MPL_error_printf printf
-#endif
-
-/* These likely/unlikely macros provide static branch prediction hints to the
- * compiler, if such hints are available. Simply wrap the relevant expression in
- * the macro, like this:
- *
- * if (unlikely(ptr == NULL)) {
- * // ... some unlikely code path ...
- * }
- *
- * They should be used sparingly, especially in upper-level code. It's easy to
- * incorrectly estimate branching likelihood, while the compiler can often do a
- * decent job if left to its own devices.
- *
- * These macros are not namespaced because the namespacing is cumbersome.
- */
-#ifdef HAVE_BUILTIN_EXPECT
-# define unlikely(x_) __builtin_expect(!!(x_),0)
-# define likely(x_) __builtin_expect(!!(x_),1)
-#else
-# define unlikely(x_) (x_)
-# define likely(x_) (x_)
-#endif
-
-
-/* -------------------------------------------------------------------------- */
-/*
- * Basic utility macros
- */
-#define MPL_QUOTE(A) MPL_QUOTE2(A)
-#define MPL_QUOTE2(A) #A
-
-/* This macro is used to silence warnings from the Mac OS X linker when
- * an object file "has no symbols". The unused attribute prevents a
- * warning about the unused dummy variable while the used attribute
- * prevents the compiler from discarding the symbol altogether. This
- * macro should be used at the top of any file that might not define any
- * other variables or functions (perhaps due to conditional compilation
- * via the preprocessor). A semicolon is expected after each invocation
- * of this macro. */
-#define MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING \
- static int MPL_UNIQUE_SYMBOL_NAME(dummy) ATTRIBUTE((unused,used)) = 0
-
-/* we jump through a couple of extra macro hoops to append the line
- * number to the variable name in order to reduce the chance of a name
- * collision with headers that might be included in the translation
- * unit */
-#define MPL_UNIQUE_SYMBOL_NAME(prefix_) MPL_UNIQUE_IMPL1_(prefix_##_unique_L,__LINE__)
-#define MPL_UNIQUE_IMPL1_(prefix_,line_) MPL_UNIQUE_IMPL2_(prefix_,line_)
-#define MPL_UNIQUE_IMPL2_(prefix_,line_) MPL_UNIQUE_IMPL3_(prefix_,line_)
-#define MPL_UNIQUE_IMPL3_(prefix_,line_) prefix_##line_
-
-
+#include "mpl_base.h"
/* must come before mpltrmem.h */
#include "mpl_valgrind.h"
-#include "mplstr.h"
-#include "mpltrmem.h"
-#include "mplenv.h"
-#include "mplsock.h"
-#include "mplmsg.h"
-#include "mpliov.h"
-
-#endif /* MPL_H_INCLUDED */
+#include "mpl_argstr.h"
+#include "mpl_str.h"
+#include "mpl_trmem.h"
+#include "mpl_env.h"
+#include "mpl_sock.h"
+#include "mpl_msg.h"
+#include "mpl_iov.h"
+#include "mpl_bt.h"
+#include "mpl_thread.h"
+#include "mpl_timer.h"
+#include "mpl_yield.h"
+#include "mpl_dbg.h"
+#include "mpl_shm.h"
+
+#endif /* !defined(MPL_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_argstr.h b/src/pm/hydra/mpl/include/mpl_argstr.h
new file mode 100644
index 0000000..3943043
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_argstr.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_ARGSTR_H_INCLUDED
+#define MPL_ARGSTR_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* Make sure that we have the definitions for the malloc routines and size_t */
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpl_dbg.h"
+
+#if defined (MPL_USE_DBG_LOGGING)
+extern MPL_dbg_class MPIR_DBG_STRING;
+#endif /* MPL_USE_DBG_LOGGING */
+
+#define MPL_STR_SUCCESS 0
+#define MPL_STR_FAIL 1
+#define MPL_STR_NOMEM 2
+#define MPL_STR_TRUNCATED 3
+
+#define MPL_STR_QUOTE_CHAR '\"'
+#define MPL_STR_QUOTE_STR "\""
+#define MPL_STR_DELIM_CHAR '#'
+#define MPL_STR_DELIM_STR "#"
+#define MPL_STR_ESCAPE_CHAR '\\'
+#define MPL_STR_HIDE_CHAR '*'
+#define MPL_STR_SEPAR_CHAR '$'
+#define MPL_STR_SEPAR_STR "$"
+
+int MPL_str_get_string_arg(const char *str, const char *key, char *val,
+ int maxlen);
+int MPL_str_get_binary_arg(const char *str, const char *key, char *buffer,
+ int maxlen, int *out_length);
+int MPL_str_get_int_arg(const char *str, const char *key, int *val_ptr);
+int MPL_str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ const char *val);
+int MPL_str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ const char *buffer, int length);
+int MPL_str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *key,
+ int val);
+int MPL_str_add_string(char **str_ptr, int *maxlen_ptr, const char *val);
+int MPL_str_get_string(char **str_ptr, char *val, int maxlen);
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_base.h b/src/pm/hydra/mpl/include/mpl_base.h
new file mode 100644
index 0000000..9194a10
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_base.h
@@ -0,0 +1,119 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_BASE_H_INCLUDED)
+#define MPL_BASE_H_INCLUDED
+
+/* this file splits off the base functionality in MPL, which does not
+ * depend on any of the exposed features. */
+
+#include "mplconfig.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+#if defined _mpl_restrict
+#define mpl_restrict _mpl_restrict
+#else
+#define mpl_restrict restrict
+#endif /* _mpl_restrict */
+
+#if defined _mpl_const
+#define mpl_const _mpl_const
+#else
+#define mpl_const const
+#endif /* _mpl_const */
+
+#if defined _mpl_inline
+#define mpl_inline _mpl_inline
+#else
+#define mpl_inline inline
+#endif /* _mpl_inline */
+
+#if defined MPL_HAVE_CTYPE_H
+#include <ctype.h>
+#endif /* MPL_HAVE_CTYPE_H */
+
+#if defined(MPL_HAVE_INTTYPES_H)
+#include <inttypes.h>
+#endif /* MPL_HAVE_INTTYPES_H */
+
+#if !defined ATTRIBUTE
+# if defined MPL_HAVE_GCC_ATTRIBUTE
+# define ATTRIBUTE(a_) __attribute__(a_)
+# else /* MPL_HAVE_GCC_ATTRIBUTE */
+# define ATTRIBUTE(a_)
+# endif /* MPL_HAVE_GCC_ATTRIBUTE */
+#endif /* ATTRIBUTE */
+
+#define MPL_STATIC_INLINE_PREFIX ATTRIBUTE((always_inline)) static inline
+#define MPL_STATIC_INLINE_SUFFIX ATTRIBUTE((always_inline))
+
+/* These likely/unlikely macros provide static branch prediction hints to the
+ * compiler, if such hints are available. Simply wrap the relevant expression in
+ * the macro, like this:
+ *
+ * if (unlikely(ptr == NULL)) {
+ * // ... some unlikely code path ...
+ * }
+ *
+ * They should be used sparingly, especially in upper-level code. It's easy to
+ * incorrectly estimate branching likelihood, while the compiler can often do a
+ * decent job if left to its own devices.
+ *
+ * These macros are not namespaced because the namespacing is cumbersome.
+ */
+#ifdef MPL_HAVE_BUILTIN_EXPECT
+# define unlikely(x_) __builtin_expect(!!(x_),0)
+# define likely(x_) __builtin_expect(!!(x_),1)
+#else
+# define unlikely(x_) (x_)
+# define likely(x_) (x_)
+#endif
+
+#define MPL_QUOTE(A) MPL_QUOTE2(A)
+#define MPL_QUOTE2(A) #A
+
+#define MPL_MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define MPL_MIN(a,b) (((a) < (b)) ? (a) : (b))
+
+/* Use this macro for each parameter to a function that is not referenced in
+ the body of the function */
+#ifdef MPL_HAVE_WINDOWS_H
+#define MPL_UNREFERENCED_ARG(a) a
+#else
+#define MPL_UNREFERENCED_ARG(a)
+#endif
+
+/* macro for finding the enclosing structure of an element */
+#define MPL_container_of(ptr, type, member) (type *)((char *)(ptr) - offsetof(type,member))
+
+/* This macro is used to silence warnings from the Mac OS X linker when
+ * an object file "has no symbols". The unused attribute prevents a
+ * warning about the unused dummy variable while the used attribute
+ * prevents the compiler from discarding the symbol altogether. This
+ * macro should be used at the top of any file that might not define any
+ * other variables or functions (perhaps due to conditional compilation
+ * via the preprocessor). A semicolon is expected after each invocation
+ * of this macro. */
+#define MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING \
+ static int MPL_UNIQUE_SYMBOL_NAME(dummy) ATTRIBUTE((unused,used)) = 0
+
+/* we jump through a couple of extra macro hoops to append the line
+ * number to the variable name in order to reduce the chance of a name
+ * collision with headers that might be included in the translation
+ * unit */
+#define MPL_UNIQUE_SYMBOL_NAME(prefix_) MPL_UNIQUE_IMPL1_(prefix_##_unique_L,__LINE__)
+#define MPL_UNIQUE_IMPL1_(prefix_,line_) MPL_UNIQUE_IMPL2_(prefix_,line_)
+#define MPL_UNIQUE_IMPL2_(prefix_,line_) MPL_UNIQUE_IMPL3_(prefix_,line_)
+#define MPL_UNIQUE_IMPL3_(prefix_,line_) prefix_##line_
+
+typedef int MPL_bool;
+
+#endif /* !defined(MPL_BASE_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_bt.h b/src/pm/hydra/mpl/include/mpl_bt.h
new file mode 100644
index 0000000..7021067
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_bt.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+
+#if !defined(MPL_BT_H_INCLUDED)
+#define MPL_BT_H_INCLUDED
+
+#include "mplconfig.h"
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#if !MPL_HAVE_DECL_BACKTRACE_CREATE_STATE
+struct backtrace_state;
+typedef void (*backtrace_error_callback)(void *data, const char *msg,
+ int errnum);
+
+extern struct backtrace_state *backtrace_create_state(
+ const char *filename, int threaded,
+ backtrace_error_callback error_callback, void *data);
+#endif
+#if !MPL_HAVE_DECL_BACKTRACE_PRINT
+extern void backtrace_print(struct backtrace_state *state, int skip, FILE *);
+#endif
+
+#define MPL_BACKTRACE_BUFFER_LEN 1024
+#define MPL_MAX_TRACE_DEPTH 32
+void MPL_backtrace_show(FILE *output);
+
+#if defined(__cplusplus)
+
+}
+#endif
+
+#endif /* !defined(MPL_BT_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_dbg.h b/src/pm/hydra/mpl/include/mpl_dbg.h
new file mode 100644
index 0000000..f8881d1
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_dbg.h
@@ -0,0 +1,148 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2005 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_DBG_H_INCLUDED
+#define MPL_DBG_H_INCLUDED
+
+#include "mplconfig.h"
+
+/*
+ * Multilevel debugging and tracing macros.
+ * The design is discussed at
+ * http://wiki.mpich.org/mpich/index.php/Debug_Event_Logging
+ *
+ * Basically, this provide a way to place debugging messages into
+ * groups (called *classes*), with levels of detail, and arbitrary
+ * messages. The messages can be turned on and off using environment
+ * variables and/or command-line options.
+ */
+
+#ifdef MPL_USE_DBG_LOGGING
+
+#define MPL_DBG_SELECTED(_class, _level) \
+ ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level)
+
+#define MPL_DBG_MSG(_class, _level, _string) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _string); \
+ } \
+ }
+
+#define MPL_DBG_MSG_S(_class, _level, _fmat, _string) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 1, _fmat, _string); \
+ } \
+ }
+
+#define MPL_DBG_MSG_D(_class, _level, _fmat, _int) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 2, _fmat, _int); \
+ } \
+ }
+
+#define MPL_DBG_MSG_P(_class, _level, _fmat, _pointer) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 3, _fmat, _pointer); \
+ } \
+ }
+
+#define MPL_DBG_MAXLINE 256
+#define MPL_DBG_FDEST _s,(size_t)MPL_DBG_MAXLINE
+/*M
+ MPL_DBG_MSG_FMT - General debugging output macro
+
+ Notes:
+ To use this macro, the third argument should be an "sprintf" - style
+ argument, using MPL_DBG_FDEST as the buffer argument. For example,
+.vb
+ MPL_DBG_MSG_FMT(CMM,VERBOSE,(MPL_DBG_FDEST,"fmat",args...));
+.ve
+ M*/
+
+#define MPL_DBG_MSG_FMT(_class, _level, _fmatargs) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ char _s[MPL_DBG_MAXLINE]; \
+ MPL_snprintf _fmatargs ; \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _s); \
+ } \
+ }
+
+#define MPL_DBG_STMT(_class, _level, _stmt) \
+ { \
+ if ((_class & MPL_dbg_active_classes) && MPL_DBG_##_level <= MPL_dbg_max_level) { \
+ _stmt; \
+ } \
+ }
+
+#define MPL_DBG_OUT(_class, _msg) \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _msg)
+
+#define MPL_DBG_OUT_FMT(_class,_fmatargs) \
+ { \
+ char _s[MPL_DBG_MAXLINE]; \
+ MPL_snprintf _fmatargs ; \
+ MPL_dbg_outevent(__FILE__, __LINE__, _class, 0, "%s", _s); \
+ }
+
+#else
+#define MPL_DBG_SELECTED(_class,_level) 0
+#define MPL_DBG_MSG(_class,_level,_string)
+#define MPL_DBG_MSG_S(_class,_level,_fmat,_string)
+#define MPL_DBG_MSG_D(_class,_level,_fmat,_int)
+#define MPL_DBG_MSG_P(_class,_level,_fmat,_int)
+#define MPL_DBG_MSG_FMT(_class,_level,_fmatargs)
+#define MPL_DBG_STMT(_class,_level,_stmt)
+#define MPL_DBG_OUT(_class,_msg)
+#define MPL_DBG_OUT_FMT(_class,_fmtargs)
+#endif
+
+#define MPL_DBG_SUCCESS 0
+#define MPL_DBG_ERR_INTERN 1
+#define MPL_DBG_ERR_OTHER 2
+
+typedef unsigned int MPL_dbg_class;
+
+/* Special constants */
+enum MPL_DBG_LEVEL {
+ MPL_DBG_TERSE = 0,
+ MPL_DBG_TYPICAL = 50,
+ MPL_DBG_VERBOSE = 99
+};
+
+extern int MPL_dbg_active_classes;
+extern int MPL_dbg_max_level;
+
+extern MPL_dbg_class MPL_DBG_ROUTINE_ENTER;
+extern MPL_dbg_class MPL_DBG_ROUTINE_EXIT;
+extern MPL_dbg_class MPL_DBG_ROUTINE;
+extern MPL_dbg_class MPL_DBG_ALL;
+
+MPL_dbg_class MPL_dbg_class_alloc(const char *ucname, const char *lcname);
+void MPL_dbg_class_register(MPL_dbg_class cls, const char *ucname, const char *lcname);
+
+#define MPL_DBG_CLASS_CLR(cls) \
+ do { \
+ (cls) = 0; \
+ } while (0)
+
+#define MPL_DBG_CLASS_APPEND(out_class, in_class) \
+ do { \
+ (out_class) |= (in_class); \
+ } while (0)
+
+/* *INDENT-OFF* */
+int MPL_dbg_outevent(const char *, int, int, int, const char *, ...) ATTRIBUTE((format(printf, 5, 6)));
+/* *INDENT-ON* */
+
+int MPL_dbg_init(int *, char ***, int, int, int, int, int);
+int MPL_dbg_pre_init(int *, char ***, int);
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_env.h b/src/pm/hydra/mpl/include/mpl_env.h
new file mode 100644
index 0000000..1fce2bd
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_env.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_ENV_H_INCLUDED)
+#define MPL_ENV_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+#if defined(MPL_HAVE_PUTENV) && defined(MPL_NEEDS_PUTENV_DECL)
+extern int putenv(char *string);
+#endif
+
+/* Prototypes for the functions to provide uniform access to the environment */
+int MPL_env2int(const char *envName, int *val);
+int MPL_env2range(const char *envName, int *lowPtr, int *highPtr);
+int MPL_env2bool(const char *envName, int *val);
+int MPL_env2str(const char *envName, const char **val);
+int MPL_env2double(const char *envName, double *val);
+int MPL_putenv(char *name_val);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_ENV_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_iov.h b/src/pm/hydra/mpl/include/mpl_iov.h
new file mode 100644
index 0000000..ae25f6f
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_iov.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_IOV_H_INCLUDED)
+#define MPL_IOV_H_INCLUDED
+
+#include <stdio.h>
+
+/* IOVs */
+/* The basic channel interface uses IOVs */
+#ifdef MPL_HAVE_WINDOWS_H
+ #define MPL_IOV_BUF_CAST char *
+#else
+ #define MPL_IOV_BUF_CAST void *
+#endif
+#ifdef MPL_HAVE_WINDOWS_H
+#include <winsock2.h>
+#define MPL_IOV WSABUF
+#define MPL_IOV_LEN len
+#define MPL_IOV_BUF buf
+#else
+#ifdef MPL_HAVE_SYS_TYPES_H
+#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
+#endif
+#ifdef MPL_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+#define MPL_IOV struct iovec
+#define MPL_IOV_LEN iov_len
+#define MPL_IOV_BUF iov_base
+#endif
+/* FIXME: How is IOV_LIMIT chosen? */
+#define MPL_IOV_LIMIT 16
+
+#endif /* !defined(MPL_IOV_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_msg.h b/src/pm/hydra/mpl/include/mpl_msg.h
new file mode 100644
index 0000000..598e153
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_msg.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2005 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_MSG_H_INCLUDED)
+#define MPL_MSG_H_INCLUDED
+
+#include "mpl.h"
+
+#if defined(MPL_HAVE_MACRO_VA_ARGS)
+#define MPL_error_printf(...) fprintf(stderr,__VA_ARGS__)
+#else
+#define MPL_error_printf printf
+#endif
+
+/* These routines are used to ensure that messages are sent to the
+ * appropriate output and (eventually) are properly
+ * internationalized */
+int MPL_usage_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_msg_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_internal_error_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
+int MPL_internal_sys_error_printf(mpl_const char *, int, mpl_const char *str,
+ ...) ATTRIBUTE((format(printf, 3, 4)));
+void MPL_exit(int);
+
+#endif /* !defined(MPL_MSG_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_shm.h b/src/pm/hydra/mpl/include/mpl_shm.h
new file mode 100644
index 0000000..df078b7
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_shm.h
@@ -0,0 +1,160 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* This file contains "pre" definitions and declarations for the OS wrappers.
+ * That is, things that shouldn't depend on much more than the mpichconf.h
+ * values. */
+
+#ifndef MPL_SHM_H_INCLUDED
+#define MPL_SHM_H_INCLUDED
+
+#include "mplconfig.h"
+
+#ifdef MPL_USE_SYSV_SHM
+#include "mpl_shm_sysv.h"
+#elif defined MPL_USE_MMAP_SHM
+#include "mpl_shm_mmap.h"
+#elif defined MPL_USE_NT_SHM
+#include "mpl_shm_win.h"
+#endif
+
+#define MPLI_SHM_FLAG_CLR 0x0
+#define MPLI_SHM_FLAG_SHM_CREATE 0x1
+#define MPLI_SHM_FLAG_SHM_ATTACH 0x10
+#define MPLI_SHM_FLAG_GHND_STATIC 0x100
+
+#define MPL_SHM_HND_INVALID NULL
+#define MPLI_SHM_GHND_INVALID NULL
+#define MPLI_SHM_GHND_INIT_VAL '\0'
+#define MPL_SHM_HND_SZ (sizeof(MPLI_shm_lghnd_t))
+#define MPL_SHM_GHND_SZ MPLI_SHM_GHND_SZ
+
+/* A Handle is valid if it is initialized/init and has a value
+ * different from the default/invalid value assigned during init
+ */
+#define MPLI_shm_hnd_is_valid(hnd) ( \
+ ((hnd) && \
+ MPLI_shm_lhnd_is_valid(hnd) && \
+ MPLI_shm_ghnd_is_valid(hnd)) \
+)
+
+/* With MMAP_SHM, NT_SHM & SYSV_SHM local handle is always init'ed */
+#define MPLI_shm_hnd_is_init(hnd) ( \
+ ((hnd) && /* MPL_shm_lhnd_is_init(hnd) && */ \
+ MPLI_shm_ghnd_is_init(hnd)) \
+)
+
+/* These macros are the setters/getters for the shm handle */
+#define MPLI_shm_lhnd_get(hnd) ((hnd)->lhnd)
+#define MPLI_shm_lhnd_set(hnd, val) ((hnd)->lhnd=val)
+#define MPLI_shm_lhnd_is_valid(hnd) (((hnd)->lhnd != MPLI_SHM_LHND_INVALID))
+#define MPLI_shm_lhnd_is_init(hnd) 1
+
+/* Allocate mem for references within the handle */
+/* Returns 0 on success, -1 on error */
+#define MPL_shm_hnd_ref_alloc(hnd)( \
+ ((hnd)->ghnd = (MPLI_shm_ghnd_t) \
+ MPL_malloc(MPLI_SHM_GHND_SZ)) ? 0 : -1 \
+)
+
+
+/* These macros are the setters/getters for the shm handle */
+#define MPLI_shm_ghnd_get_by_ref(hnd) ((hnd)->ghnd)
+
+/* Returns -1 on error, 0 on success */
+#define MPLI_shm_ghnd_get_by_val(hnd, str, strlen) ( \
+ (MPL_snprintf(str, strlen, "%s", \
+ MPLI_shm_ghnd_get_by_ref(hnd))) ? 0 : -1 \
+)
+#define MPLI_shm_ghnd_set_by_ref(hnd, val) ((hnd)->ghnd = val)
+/* Returns -1 on error, 0 on success */
+/* FIXME: What if val is a non-null terminated string ? */
+#define MPLI_shm_ghnd_set_by_val(hnd, fmt, val) ( \
+ (MPL_snprintf(MPLI_shm_ghnd_get_by_ref(hnd), \
+ MPLI_SHM_GHND_SZ, fmt, val)) ? 0 : -1 \
+)
+
+#define MPLI_shm_ghnd_is_valid(hnd) ( \
+ (((hnd)->ghnd == MPLI_SHM_GHND_INVALID) || \
+ (strlen((hnd)->ghnd) == 0)) ? 0 : 1 \
+)
+#define MPLI_shm_ghnd_is_init(hnd) ( \
+ ((hnd)->flag & MPLI_SHM_FLAG_GHND_STATIC) ? \
+ 1 : \
+ (((hnd)->ghnd != MPLI_SHM_GHND_INVALID) ? 1 : 0) \
+)
+
+/* Allocate mem for global handle.
+ * Returns 0 on success, -1 on failure
+ */
+static inline int MPLI_shm_ghnd_alloc(MPL_shm_hnd_t hnd)
+{
+ if(!(hnd->ghnd)){
+ hnd->ghnd = (MPLI_shm_ghnd_t)MPL_malloc(MPLI_SHM_GHND_SZ);
+ if(!(hnd->ghnd)){ return -1; }
+ }
+ /* Global handle is no longer static */
+ hnd->flag &= ~MPLI_SHM_FLAG_GHND_STATIC;
+ return 0;
+}
+
+
+/* Allocate mem for handle. Lazy allocation for global handle */
+/* Returns 0 on success, -1 on error */
+static inline int MPLI_shm_hnd_alloc(MPL_shm_hnd_t *hnd_ptr)
+{
+ *hnd_ptr = (MPL_shm_hnd_t) MPL_malloc(MPL_SHM_HND_SZ);
+ if(*hnd_ptr){
+ (*hnd_ptr)->flag = MPLI_SHM_FLAG_GHND_STATIC;
+ }
+ else{
+ return -1;
+ }
+ return 0;
+}
+
+/* Close Handle */
+#define MPLI_shm_hnd_close(hnd) MPLI_shm_lhnd_close(hnd)
+
+static inline void MPLI_shm_hnd_reset_val(MPL_shm_hnd_t hnd)
+{
+ MPLI_shm_lhnd_set(hnd, MPLI_SHM_LHND_INIT_VAL);
+ if(hnd->flag & MPLI_SHM_FLAG_GHND_STATIC){
+ hnd->ghnd = MPLI_SHM_GHND_INVALID;
+ }
+ else{
+ (hnd->ghnd)[0] = MPLI_SHM_GHND_INIT_VAL;
+ }
+}
+
+static inline void MPLI_shm_hnd_free(MPL_shm_hnd_t hnd)
+{
+ if(MPLI_shm_hnd_is_init(hnd)){
+ if(!(hnd->flag & MPLI_SHM_FLAG_GHND_STATIC)){
+ MPL_free(hnd->ghnd);
+ }
+ MPL_free(hnd);
+ }
+}
+
+/* interfaces */
+int MPL_shm_hnd_serialize(char *str, MPL_shm_hnd_t hnd, int str_len);
+int MPL_shm_hnd_deserialize(MPL_shm_hnd_t hnd, const char *str_hnd, size_t str_hnd_len);
+int MPL_shm_hnd_get_serialized_by_ref(MPL_shm_hnd_t hnd, char **str_ptr);
+int MPL_shm_hnd_deserialize_by_ref(MPL_shm_hnd_t hnd, char **ser_hnd_ptr);
+int MPL_shm_hnd_init(MPL_shm_hnd_t *hnd_ptr);
+int MPL_shm_hnd_finalize(MPL_shm_hnd_t *hnd_ptr);
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz);
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz);
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset);
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset);
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz);
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd);
+
+#endif /* MPL_SHM_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpl_shm_mmap.h b/src/pm/hydra/mpl/include/mpl_shm_mmap.h
new file mode 100644
index 0000000..a2a91c9
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_shm_mmap.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_MMAP_H_INCLUDED
+#define MPL_SHM_MMAP_H_INCLUDED
+
+typedef intptr_t MPLI_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_FNAME_LEN 50
+#define MPLI_SHM_GHND_SZ MPL_SHM_FNAME_LEN
+#define MPLI_SHM_LHND_INVALID (-1)
+#define MPLI_SHM_LHND_INIT_VAL (-1)
+
+#define MPLI_SHM_SEG_ALREADY_EXISTS EEXIST
+
+/* Returns 0 on success, -1 on error */
+int MPLI_shm_lhnd_close(MPL_shm_hnd_t hnd);
+
+#endif /* ifndef MPL_SHM_MMAP_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpl_shm_sysv.h b/src/pm/hydra/mpl/include/mpl_shm_sysv.h
new file mode 100644
index 0000000..babae48
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_shm_sysv.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_SYSV_H_INCLUDED
+#define MPL_SHM_SYSV_H_INCLUDED
+
+typedef int MPLI_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_MAX_INT_STR_LEN 20
+#define MPL_SHM_SEG_KEY_LEN MPL_SHM_MAX_INT_STR_LEN
+#define MPLI_SHM_GHND_SZ MPL_SHM_SEG_KEY_LEN
+#define MPLI_SHM_LHND_INVALID (-1)
+#define MPLI_SHM_LHND_INIT_VAL (-1)
+#define MPL_SHM_SER_HND_SZ MPLI_SHM_GHND_SZ
+
+#define MPL_SHM_SEG_ALREADY_EXISTS EEXIST
+
+/* Nothing to be done at close */
+#define MPLI_shm_lhnd_close(hnd) 0
+
+#endif /* ifndef MPL_SHM_SYSV_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpl_shm_win.h b/src/pm/hydra/mpl/include/mpl_shm_win.h
new file mode 100644
index 0000000..02bfaf6
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_shm_win.h
@@ -0,0 +1,70 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_SHM_WIN_INCLUDED
+#define MPL_SHM_WIN_INCLUDED
+
+typedef HANDLE MPL_shm_lhnd_t;
+
+typedef char * MPLI_shm_ghnd_t;
+/* The local handle, lhnd, is valid only for the current process,
+ * The global handle, ghnd, is valid across multiple processes
+ * The handle flag, flag, is used to set various attributes of the
+ * handle.
+ */
+typedef struct MPLI_shm_lghnd_t {
+ MPLI_shm_lhnd_t lhnd;
+ MPLI_shm_ghnd_t ghnd;
+ int flag;
+} MPLI_shm_lghnd_t;
+
+typedef MPLI_shm_lghnd_t *MPL_shm_hnd_t;
+
+#define MPL_SHM_SEG_NAME_LEN 70
+#define MPLI_SHM_GHND_SZ MPL_SHM_SEG_NAME_LEN
+#define MPLI_SHM_LHND_INVALID INVALID_HANDLE_VALUE
+#define MPLI_SHM_LHND_INIT_VAL INVALID_HANDLE_VALUE
+
+#define MPL_shm_SEG_ALREADY_EXISTS ERROR_ALREADY_EXISTS
+
+/* Returns 0 on success, -1 on error */
+#define MPLI_shm_lhnd_close(hnd)( \
+ (CloseHandle(MPLI_shm_lhnd_get(hnd)) != 0) ? 0 : -1 \
+)
+
+#if defined (HAVE_QUERYPERFORMANCECOUNTER)
+/*
+ * Returns size of uniqStr, 0 on error
+ */
+static inline int MPL_shm_get_uniq_str(char *str, int strlen)
+{
+ LARGE_INTEGER perfCnt;
+ QueryPerformanceCounter(&perfCnt);
+ return(MPL_snprintf(str, strlen, "MPICH_NEM_%d_%I64d",
+ GetCurrentThreadId(), (perfCnt.QuadPart)));
+}
+#endif
+
+/* Returns 0 on success, -1 on error */
+static inline int MPLI_shm_ghnd_set_uniq(MPL_shm_hnd_t hnd)
+{
+ if (MPL_shm_hnd_ref_alloc(hnd) == 0) {
+ if (MPLI_shm_get_uniq_str(hnd->ghnd, MPLI_SHM_GHND_SZ) != 0) {
+ return -1;
+ }
+ } else {
+ return -1;
+ }
+ return 0;
+}
+
+/* Nothing to be done when removing an SHM segment */
+static inline int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ return MPI_SUCCESS;
+}
+
+#endif /* ifndef MPL_SHM_WIN_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpl_sock.h b/src/pm/hydra/mpl/include/mpl_sock.h
new file mode 100644
index 0000000..470b2bd
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_sock.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_SOCK_H_INCLUDED)
+#define MPL_SOCK_H_INCLUDED
+
+#include "mplconfig.h"
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <errno.h>
+#include <netinet/tcp.h>
+#include <netdb.h>
+#include <limits.h>
+
+#ifdef MPL_HAVE_SYS_TYPES_H
+#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
+#endif
+#ifdef MPL_HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
+#if !defined(MPL_HAVE_SYS_UIO_H)
+struct iovec;
+#endif
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+ssize_t MPL_large_writev(int fd, const struct iovec *iov, int iovcnt);
+ssize_t MPL_large_readv(int fd, const struct iovec *iov, int iovcnt);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_SOCK_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_str.h b/src/pm/hydra/mpl/include/mpl_str.h
new file mode 100644
index 0000000..57861f2
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_str.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_STR_H_INCLUDED)
+#define MPL_STR_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+/* *INDENT-OFF* */
+
+#if defined MPL_NEEDS_SNPRINTF_DECL
+extern int snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
+#endif
+
+#if defined MPL_HAVE_SNPRINTF
+#define MPL_snprintf snprintf
+#else
+int MPL_snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
+#endif /* MPL_HAVE_SNPRINTF */
+
+int MPL_strncpy(char *dest, const char *src, size_t n);
+char *MPL_strsep(char **stringp, const char *delim);
+
+#if defined MPL_NEEDS_STRNCMP_DECL
+extern int strncmp(const char *s1, const char *s2, size_t n);
+#endif
+
+#if defined MPL_HAVE_STRNCMP
+#define MPL_strncmp strncmp
+#else
+#error "strncmp is required"
+#endif /* MPL_HAVE_STRNCMP */
+
+#if defined MPL_NEEDS_STRERROR_DECL
+extern char *strerror(int errnum);
+#endif
+#if defined MPL_HAVE_STRERROR
+#define MPL_strerror strerror
+#else
+char *MPL_strerror(int errnum);
+#endif /* MPL_HAVE_STRERROR */
+
+int MPL_strnapp(char *dest, const char *src, size_t n);
+
+/* *INDENT-ON* */
+#if defined(__cplusplus)
+}
+#endif
+/* *INDENT-OFF* */
+
+#endif /* !defined(MPL_STR_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_thread.h b/src/pm/hydra/mpl/include/mpl_thread.h
new file mode 100644
index 0000000..8b0aad9
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_thread.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_THREAD_H_INCLUDED)
+#define MPL_THREAD_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* _INVALID exists to avoid accidental macro evaluations to 0 */
+#define MPL_THREAD_PACKAGE_INVALID 0
+#define MPL_THREAD_PACKAGE_NONE 1
+#define MPL_THREAD_PACKAGE_POSIX 2
+#define MPL_THREAD_PACKAGE_SOLARIS 3
+#define MPL_THREAD_PACKAGE_WIN 4
+
+#if defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_POSIX)
+# include "mpl_thread_posix.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_SOLARIS)
+# include "mpl_thread_solaris.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_WIN)
+# include "mpl_thread_win.h"
+#elif defined(MPL_THREAD_PACKAGE_NAME) && (MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE)
+typedef int MPL_thread_mutex_t;
+typedef int MPL_thread_cond_t;
+typedef int MPL_thread_id_t;
+typedef int MPL_thread_tls_t;
+typedef void (*MPL_thread_func_t) (void *data);
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
+#else
+# error "thread package not defined or unknown"
+#endif
+
+/* Error values */
+#define MPL_THREAD_SUCCESS 0
+#define MPL_THREAD_ERROR 1
+/* FIXME: Define other error codes. For now, any non-zero value is an error. */
+
+#include "mpl_thread_priv.h"
+
+#endif /* !defined(MPL_THREAD_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_thread_posix.h b/src/pm/hydra/mpl/include/mpl_thread_posix.h
new file mode 100644
index 0000000..a073521
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_thread_posix.h
@@ -0,0 +1,246 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/*
+ * Threads
+ */
+#ifndef MPL_THREAD_POSIX_H_INCLUDED
+#define MPL_THREAD_POSIX_H_INCLUDED
+
+#include "mpl.h" /* for MPL_sched_yield */
+
+#include <errno.h>
+#include <pthread.h>
+
+typedef pthread_mutex_t MPL_thread_mutex_t;
+typedef pthread_cond_t MPL_thread_cond_t;
+typedef pthread_t MPL_thread_id_t;
+typedef pthread_key_t MPL_thread_tls_t;
+
+#if defined(MPL_NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL)
+int pthread_mutexattr_settype(pthread_mutexattr_t * attr, int kind);
+#endif /* MPL_NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL */
+
+typedef void (*MPL_thread_func_t) (void *data);
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+
+#define MPL_thread_exit() \
+ do { \
+ pthread_exit(NULL); \
+ } while (0)
+
+#define MPL_thread_self(id_) \
+ do { \
+ *(id_) = pthread_self(); \
+ } while (0)
+
+#define MPL_thread_same(id1_, id2_, same_) \
+ do { \
+ *(same_) = pthread_equal(*(id1_), *(id2_)) ? TRUE : FALSE; \
+ } while (0)
+
+#define MPL_thread_yield MPL_sched_yield
+
+
+/*
+ * Mutexes
+ */
+
+/* FIXME: mutex creation and destruction should be implemented as routines
+ because there is no reason to use macros (these are not on the performance
+ critical path). Making these macros requires that any code that might use
+ these must load all of the pthread.h (or other thread library) support.
+ */
+
+/* FIXME: using constant initializer if available */
+
+/* FIXME: convert errors to an MPL_THREAD_ERR value */
+
+#if !defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE)
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_init(mutex_ptr_, NULL); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#else /* defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ pthread_mutexattr_t attr__; \
+ \
+ pthread_mutexattr_init(&attr__); \
+ pthread_mutexattr_settype(&attr__, MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE); \
+ err__ = pthread_mutex_init(mutex_ptr_, &attr__); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#endif /* defined(MPL_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
+
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_destroy(mutex_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_mutex_destroy", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+#define MPL_thread_mutex_lock(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ err__ = pthread_mutex_lock(mutex_ptr_); \
+ if (unlikely(err__)) { \
+ MPL_internal_sys_error_printf("pthread_mutex_lock", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ } \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+#define MPL_thread_mutex_unlock(mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_mutex_unlock(mutex_ptr_); \
+ if (unlikely(err__)) { \
+ MPL_internal_sys_error_printf("pthread_mutex_unlock", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ } \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+/*
+ * Condition Variables
+ */
+
+#define MPL_thread_cond_create(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_init((cond_ptr_), NULL); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_init", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_destroy(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_destroy(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_destroy", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ /* The latest pthread specification says that cond_wait \
+ * routines aren't allowed to return EINTR, but some of the \
+ * older implementations still do. */ \
+ do { \
+ err__ = pthread_cond_wait((cond_ptr_), mutex_ptr_); \
+ } while (err__ == EINTR); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_wait", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_broadcast(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_broadcast(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_broadcast", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_cond_signal(cond_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_cond_signal(cond_ptr_); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_cond_signal", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+
+/*
+ * Thread Local Storage
+ */
+
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_key_create((tls_ptr_), (exit_func_ptr_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_key_create", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_key_delete(*(tls_ptr_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_key_delete", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr_, value_, err_ptr_) \
+ do { \
+ int err__; \
+ \
+ err__ = pthread_setspecific(*(tls_ptr_), (value_)); \
+ if (unlikely(err__)) \
+ MPL_internal_sys_error_printf("pthread_setspecific", err__, \
+ " %s:%d\n", __FILE__, __LINE__); \
+ \
+ *(int *)(err_ptr_) = err__; \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
+ do { \
+ *(value_ptr_) = pthread_getspecific(*(tls_ptr_)); \
+ \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } while (0)
+
+#endif /* MPL_THREAD_POSIX_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpl_thread_priv.h b/src/pm/hydra/mpl/include/mpl_thread_priv.h
new file mode 100644
index 0000000..034cff9
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_thread_priv.h
@@ -0,0 +1,98 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_THREAD_PRIV_H_INCLUDED)
+#define MPL_THREAD_PRIV_H_INCLUDED
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE && !defined(MPL_TLS_SPECIFIER)
+/* We need to provide a function that will cleanup the storage attached
+ * to the key. */
+void MPLI_cleanup_tls(void *a);
+
+/* In the case where the thread level is set in MPI_Init_thread, we
+ need a blended version of the non-threaded and the thread-multiple
+ definitions.
+
+ The approach is to have TWO MPLI_per_thread_t pointers. One is local
+ (The MPL_THREADPRIV_DECL is used in the routines local definitions),
+ as in the threaded version of these macros. This is set by using a routine
+ to get thread-private storage. The second is a preallocated, extern
+ MPLI_per_thread_t struct, as in the single threaded case. Based on
+ whether MPL is initialized with thread safety, one or the other is used.
+ */
+
+#define MPL_THREADPRIV_KEY_CREATE(key, var, err_ptr_) \
+ do { \
+ void *thread_ptr; \
+ \
+ MPL_thread_tls_create(MPLI_cleanup_tls, &(key) , err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ thread_ptr = MPL_calloc(1, sizeof(var)); \
+ if (unlikely(!thread_ptr)) { \
+ *((int *) err_ptr_) = MPL_THREAD_ERROR; \
+ break; \
+ } \
+ MPL_thread_tls_set(&(key), thread_ptr, err_ptr_); \
+ } while (0)
+
+#define MPL_THREADPRIV_KEY_GET_ADDR(is_threaded, key, var, addr, err_ptr_) \
+ do { \
+ if (is_threaded) { \
+ void *thread_ptr; \
+ MPL_thread_tls_get(&(key), &thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ if (!thread_ptr) { \
+ thread_ptr = MPL_calloc(1, sizeof(var)); \
+ if (unlikely(!thread_ptr)) { \
+ *((int *) err_ptr_) = MPL_THREAD_ERROR; \
+ break; \
+ } \
+ MPL_thread_tls_set(&(key), thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ } \
+ addr = thread_ptr; \
+ } \
+ else { \
+ addr = &(var); \
+ } \
+ } while (0)
+
+#define MPL_THREADPRIV_KEY_DESTROY(key, err_ptr_) \
+ do { \
+ void *thread_ptr; \
+ \
+ MPL_thread_tls_get(&(key), &thread_ptr, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ \
+ if (thread_ptr) \
+ MPL_free(thread_ptr); \
+ \
+ MPL_thread_tls_set(&(key), NULL, err_ptr_); \
+ if (unlikely(*((int *) err_ptr_))) \
+ break; \
+ \
+ MPL_thread_tls_destroy(&(key), err_ptr_); \
+ } while (0)
+
+#else /* MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE || defined(MPL_TLS_SPECIFIER) */
+
+/* We have proper thread-local storage (TLS) support from the compiler, which
+ * should yield the best performance and simplest code, so we'll use that. */
+#define MPL_THREADPRIV_KEY_CREATE(...)
+#define MPL_THREADPRIV_KEY_GET_ADDR(is_threaded, key, var, addr, err_ptr_) \
+ do { \
+ addr = &(var); \
+ *((int *) err_ptr_) = MPL_THREAD_SUCCESS; \
+ } while (0)
+#define MPL_THREADPRIV_KEY_DESTROY(...)
+
+#endif
+
+#endif /* !defined(MPL_THREAD_PRIV_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_thread_solaris.h b/src/pm/hydra/mpl/include/mpl_thread_solaris.h
new file mode 100644
index 0000000..83fe099
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_thread_solaris.h
@@ -0,0 +1,195 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_THREAD_SOLARIS_H_INCLUDED
+#define MPL_THREAD_SOLARIS_H_INCLUDED
+
+#include <thread.h>
+#include <synch.h>
+
+typedef mutex_t MPL_thread_mutex_t;
+typedef cond_t MPL_thread_cond_t;
+typedef thread_t MPL_thread_id_t;
+
+typedef void (*MPL_thread_func_t) (void *data);
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+
+/*
+ * Threads
+ */
+
+#define MPL_thread_exit() \
+ do { \
+ thr_exit(NULL); \
+ } while (0)
+
+#define MPL_thread_self(id_ptr_) \
+ do { \
+ *(id_ptr_) = thr_self(); \
+ } while (0)
+
+#define MPL_thread_same(id1_ptr_, id2_ptr_, same_ptr_) \
+ do { \
+ *(same_ptr_) = (*(id1_ptr_) == *(id2_ptr_)) ? TRUE : FALSE; \
+ } while (0)
+
+#define MPL_thread_yield thr_yield
+
+
+/*
+ * Mutexes
+ */
+
+#define MPL_thread_mutex_create(mutex_ptr_, err_ptr_) \
+ do { \
+ *(mutex_ptr_) = DEFAULTMUTEX; \
+ if ((err_ptr_) == NULL) { \
+ *(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_destroy(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_destroy(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_destroy(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_lock(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_lock(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_lock(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_mutex_unlock(mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ mutex_unlock(mutex_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = mutex_unlock(mutex_ptr_); \
+ /* FIXME: convert error to an MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+
+/*
+ * Condition Variables
+ */
+
+#define MPL_thread_cond_create(cond_ptr_, err_ptr_) \
+ do { \
+ *(cond_ptr_) = DEFAULTCV; \
+ if ((err_ptr_) == NULL) { \
+ *(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_destroy(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_destroy(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_destroy(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_wait((cond_ptr_), (mutex_ptr_)); \
+ } \
+ else { \
+ *(err_ptr_) = cond_wait((cond_ptr_), (mutex_ptr_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_broadcast(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_broadcast(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_broadcast(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_cond_signal(cond_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ cond_signal(cond_ptr_); \
+ } \
+ else { \
+ *(err_ptr_) = cond_signal(cond_ptr_); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+
+/*
+ * Thread Local Storage
+ */
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_keycreate((tls_ptr), (exit_func_ptr)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_keycreate((tls_ptr), (exit_func_ptr)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ /* \
+ * FIXME: Solaris threads does not have a key destroy. We \
+ * need to create equivalent functionality to prevent a \
+ * callback from occuring when a thread exits after the TLS is \
+ * destroyed. This is the only way to prevent subsystems that \
+ * have shutdown from continuing to receive callbacks. \
+ */ \
+ if ((err_ptr_) != NULL) { \
+ *(err_ptr) = MPL_THREAD_SUCCESS; \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr, value_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_setspecific(*(tls_ptr), (value_)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr, value_ptr_) \
+ do { \
+ if ((err_ptr_) == NULL) { \
+ thr_setspecific(*(tls_ptr), (value_ptr_)); \
+ } \
+ else { \
+ *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_ptr_)); \
+ /* FIXME: convert error to a MPL_THREAD_ERR value */ \
+ } \
+ } while (0)
+
+#endif /* MPL_THREAD_SOLARIS_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpl_thread_win.h b/src/pm/hydra/mpl/include/mpl_thread_win.h
new file mode 100644
index 0000000..3c6f9f9
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_thread_win.h
@@ -0,0 +1,106 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_THREAD_WIN_H_INCLUDED
+#define MPL_THREAD_WIN_H_INCLUDED
+
+#define WIN32_LEAN_AND_MEAN
+
+#include <windows.h>
+
+typedef HANDLE MPL_thread_mutex_t;
+typedef HANDLE MPL_thread_id_t;
+typedef DWORD MPL_thread_tls_t;
+
+typedef struct MPLI_win_thread_cond_fifo_t {
+ HANDLE event;
+ struct MPLI_win_thread_cond_fifo_t *next;
+} MPLI_win_thread_cond_fifo_t;
+typedef struct MPL_thread_cond_t {
+ MPL_thread_tls_t tls;
+ MPL_thread_mutex_t fifo_mutex;
+ MPLI_win_thread_cond_fifo_t *fifo_head, *fifo_tail;
+} MPL_thread_cond_t;
+
+typedef void (*MPL_thread_func_t) (void *data);
+
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * id, int *err);
+void MPL_thread_exit(void);
+void MPL_thread_self(MPL_thread_id_t * id);
+void MPL_thread_same(MPL_thread_id_t * id1, MPL_thread_id_t * id2, int *same);
+void MPL_thread_yield();
+
+void MPL_thread_mutex_create(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_destroy(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_lock(MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_mutex_unlock(MPL_thread_mutex_t * mutex, int *err);
+
+void MPL_thread_cond_create(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_destroy(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_wait(MPL_thread_cond_t * cond, MPL_thread_mutex_t * mutex, int *err);
+void MPL_thread_cond_broadcast(MPL_thread_cond_t * cond, int *err);
+void MPL_thread_cond_signal(MPL_thread_cond_t * cond, int *err);
+
+/*
+ * Thread Local Storage
+ */
+
+#define MPL_thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
+ do { \
+ *(tls_ptr_) = TlsAlloc(); \
+ if ((err_ptr_) != NULL) { \
+ if (*(tls_ptr_) == TLS_OUT_OF_INDEXES) { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ else { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_destroy(tls_ptr_, err_ptr_) \
+ do { \
+ BOOL result__; \
+ result__ = TlsFree(*(tls_ptr_)); \
+ if ((err_ptr_) != NULL) { \
+ if (result__) { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ else { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_set(tls_ptr_, value_, err_ptr_) \
+ do { \
+ BOOL result__; \
+ result__ = TlsSetValue(*(tls_ptr_), (value_)); \
+ if ((err_ptr_) != NULL) { \
+ if (result__) { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ else { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ } \
+ } while (0)
+
+#define MPL_thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
+ do { \
+ *((void **)value_ptr_) = TlsGetValue(*(tls_ptr_)); \
+ if ((err_ptr_) != NULL) { \
+ if (*(value_ptr_) == 0 && GetLastError() != NO_ERROR) { \
+ *(int *)(err_ptr_) = GetLastError(); \
+ } \
+ else { \
+ *(int *)(err_ptr_) = MPL_THREAD_SUCCESS; \
+ } \
+ } \
+ } while (0)
+
+#endif /* MPL_THREAD_WIN_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpl_timer.h.in b/src/pm/hydra/mpl/include/mpl_timer.h.in
new file mode 100644
index 0000000..dcc24c3
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer.h.in
@@ -0,0 +1,247 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_TIMER_H_INCLUDED)
+#define MPL_TIMER_H_INCLUDED
+
+#include "mplconfig.h"
+
+#if defined (MPL_HAVE_UNISTD_H)
+#include <unistd.h>
+#if defined (MPL_NEEDS_USLEEP_DECL)
+int usleep(useconds_t usec);
+#endif
+#endif
+
+/*
+ * This include file provide the definitions that are necessary to use the
+ * timer calls, including the definition of the time stamp type and
+ * any inlined timer calls.
+ *
+ * The include file timerconf.h (created by autoheader from configure.ac)
+ * is needed only to build the function versions of the timers.
+ */
+/* Include the appropriate files */
+#define MPL_TIMER_KIND__GETHRTIME 1
+#define MPL_TIMER_KIND__CLOCK_GETTIME 2
+#define MPL_TIMER_KIND__GETTIMEOFDAY 3
+#define MPL_TIMER_KIND__LINUX86_CYCLE 4
+#define MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER 6
+#define MPL_TIMER_KIND__WIN86_CYCLE 7
+#define MPL_TIMER_KIND__GCC_IA64_CYCLE 8
+/* The value "MPL_TIMER_KIND__DEVICE" means that the ADI device provides the timer */
+#define MPL_TIMER_KIND__DEVICE 9
+#define MPL_TIMER_KIND__WIN64_CYCLE 10
+#define MPL_TIMER_KIND__MACH_ABSOLUTE_TIME 11
+#define MPL_TIMER_KIND__PPC64_CYCLE 12
+#define MPL_TIMER_KIND @MPL_TIMER_KIND@
+
+/* Define a time stamp */
+typedef @MPL_TIMER_TYPE@ MPL_time_t;
+
+/* The timer code is allowed to return "NOT_INITIALIZED" before the
+ * device is initialized. Once the device is initialized, it must
+ * always return SUCCESS, so the upper layers do not need to check for
+ * the return code. */
+#define MPL_TIMER_SUCCESS 0
+#define MPL_TIMER_ERR_NOT_INITIALIZED 1
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETHRTIME
+#include "mpl_timer_gethrtime.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__CLOCK_GETTIME
+#include "mpl_timer_clock_gettime.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__GETTIMEOFDAY
+#include "mpl_timer_gettimeofday.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__LINUX86_CYCLE
+#include "mpl_timer_linux86_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER
+#include "mpl_timer_query_performance_counter.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__WIN86_CYCLE || MPL_TIMER_KIND == MPL_TIMER_KIND__WIN64_CYCLE
+#include "mpl_timer_win86_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__GCC_IA64_CYCLE
+#include "mpl_timer_gcc_ia64_cycle.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__DEVICE
+#include "mpl_timer_device.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__MACH_ABSOLUTE_TIME
+#include "mpl_timer_mach_absolute_time.h"
+#elif MPL_TIMER_KIND == MPL_TIMER_KIND__PPC64_CYCLE
+#include "mpl_timer_ppc64_cycle.h"
+#endif
+
+/*
+ * Prototypes. These are defined here so that inlined timer calls can
+ * use them, as well as any profiling and timing code that is built into
+ * MPL
+ */
+
+#if defined MPLI_WTIME_IS_A_FUNCTION
+
+/*@
+ MPL_wtime - Return a time stamp
+
+ Output Parameter:
+. timeval - A pointer to an 'MPL_wtime_t' variable.
+
+ Notes:
+ This routine returns an `opaque` time value. This difference between two
+ time values returned by 'MPL_wtime' can be converted into an elapsed time
+ in seconds with the routine 'MPL_wtime_diff'.
+
+ This routine is defined this way to simplify its implementation as a macro.
+ For example, the for Intel x86 and gcc,
+.vb
+#define MPL_wtime(timeval) \
+ __asm__ __volatile__("rdtsc" : "=A" (*timeval))
+.ve
+
+ For some purposes, it is important
+ that the timer calls change the timing of the code as little as possible.
+ This form of a timer routine provides for a very fast timer that has
+ minimal impact on the rest of the code.
+
+ From a semantic standpoint, this format emphasizes that any particular
+ timer value has no meaning; only the difference between two values is
+ meaningful.
+
+ Module:
+ Timer
+
+ Question:
+ MPI-2 allows 'MPI_Wtime' to be a macro. We should make that easy; this
+ version does not accomplish that.
+ @*/
+int MPL_wtime(MPL_time_t * timeval);
+#endif /* MPLI_WTIME_IS_A_FUNCTION */
+
+/*@
+ MPL_wtime_diff - Compute the difference between two time stamps
+
+ Input Parameters:
+. t1, t2 - Two time values set by 'MPL_wtime' on this process.
+
+
+ Output Parameter:
+. diff - The different in time between t2 and t1, measured in seconds.
+
+ Note:
+ If 't1' is null, then 't2' is assumed to be differences accumulated with
+ 'MPL_wtime_acc', and the output value gives the number of seconds that
+ were accumulated.
+
+ Question:
+ Instead of handling a null value of 't1', should we have a separate
+ routine 'MPL_wtime_todouble' that converts a single timestamp to a
+ double value?
+
+ Module:
+ Timer
+ @*/
+int MPL_wtime_diff( MPL_time_t *t1, MPL_time_t *t2, double *diff );
+
+/*@
+ MPL_wtime_acc - Accumulate time values
+
+ Input Parameters:
+. t1,t2,t3 - Three time values. 't3' is updated with the difference between
+ 't2' and 't1': '*t3 += (t2 - t1)'.
+
+ Notes:
+ This routine is used to accumulate the time spent with a block of code
+ without first converting the time stamps into a particular arithmetic
+ type such as a 'double'. For example, if the 'MPL_wtime' routine accesses
+ a cycle counter, this routine (or macro) can perform the accumulation using
+ integer arithmetic.
+
+ To convert a time value accumulated with this routine, use 'MPL_wtime_diff'
+ with a 't1' of zero.
+
+ Module:
+ Timer
+ @*/
+int MPL_wtime_acc( MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3 );
+
+/*@
+ MPL_wtime_todouble - Converts a timestamp to a double
+
+ Input Parameter:
+. timeval - 'MPL_time_t' time stamp
+
+ Output Parameter:
+. seconds - Time in seconds from an arbitrary (but fixed) time in the past
+
+ Notes:
+ This routine may be used to change a timestamp into a number of seconds,
+ suitable for 'MPI_Wtime'.
+
+ @*/
+int MPL_wtime_todouble( MPL_time_t *timeval, double *seconds );
+
+/*@
+ MPL_wtick - Provide the resolution of the 'MPL_wtime' timer
+
+ Return value:
+ Resolution of the timer in seconds. In many cases, this is the
+ time between ticks of the clock that 'MPL_wtime' returns. In other
+ words, the minimum significant difference that can be computed by
+ 'MPL_wtime_diff'.
+
+ Note that in some cases, the resolution may be estimated. No application
+ should expect either the same estimate in different runs or the same
+ value on different processes.
+
+ Module:
+ Timer
+ @*/
+int MPL_wtick(double *);
+
+/*@
+ MPL_wtime_init - Initialize the timer
+
+ Note:
+ This routine should perform any steps needed to initialize the timer.
+ In addition, it should set the value of the attribute 'MPI_WTIME_IS_GLOBAL'
+ if the timer is known to be the same for all processes in 'MPI_COMM_WORLD'
+ (the value is zero by default).
+
+ Module:
+ Timer
+
+ @*/
+int MPL_wtime_init(void);
+
+/*
+ * For timers that do not have defined resolutions, compute the resolution
+ * by sampling the clock itself.
+ *
+ */
+static double tickval = -1.0;
+
+static void init_wtick(void) ATTRIBUTE((unused));
+static void init_wtick(void)
+{
+ double timediff;
+ MPL_time_t t1, t2;
+ int cnt;
+ int icnt;
+
+ tickval = 1.0e6;
+ for (icnt = 0; icnt < 10; icnt++) {
+ cnt = 1000;
+ MPL_wtime(&t1);
+ do {
+ MPL_wtime(&t2);
+ MPL_wtime_diff(&t1, &t2, &timediff);
+ if (timediff > 0)
+ break;
+ }
+ while (cnt--);
+ if (cnt && timediff > 0.0 && timediff < tickval) {
+ MPL_wtime_diff(&t1, &t2, &tickval);
+ }
+ }
+}
+
+#endif /* !defined(MPL_TIMER_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_timer_clock_gettime.h b/src/pm/hydra/mpl/include/mpl_timer_clock_gettime.h
new file mode 100644
index 0000000..6e0aa79
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_clock_gettime.h
@@ -0,0 +1,19 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_CLOCK_GETTIME_H_INCLUDED
+#define MPL_TIMER_CLOCK_GETTIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <time.h>
+#ifdef MPL_NEEDS_SYS_TIME_H
+/* Some OS'es mistakenly require sys/time.h to get the definition of
+ CLOCK_REALTIME (POSIX requires the definition to be in time.h) */
+#include <sys/time.h>
+#endif
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_device.h b/src/pm/hydra/mpl/include/mpl_timer_device.h
new file mode 100644
index 0000000..5b6f599
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_device.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_DEVICE_H_INCLUDED
+#define MPL_TIMER_DEVICE_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+/*
+ * If the timer capability is provided by the device, it would need to
+ * expose it in two ways:
+ *
+ * 1. It would expose it through the MPID_ functionality. This
+ * model would be used by the MPICH internal code, and would
+ * give fast access to the timers.
+ *
+ * 2. It would expose it through the MPL_timer_ function pointers.
+ * This model would be used by "external" code segments (such as
+ * MPL) which do not have direct access to the MPICH devices.
+ * This model might be slightly slower, but would give the same
+ * functionality.
+ */
+extern int (*MPL_wtime_fn)(MPL_time_t *timeval);
+extern int (*MPL_wtime_diff_fn)(MPL_time_t *t1, MPL_time_t *t2, double *diff);
+extern int (*MPL_wtime_acc_fn)(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3);
+extern int (*MPL_wtime_todouble_fn)(MPL_time_t *timeval, double *seconds);
+extern int (*MPL_wtick_fn)(double *tick);
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_gcc_ia64_cycle.h b/src/pm/hydra/mpl/include/mpl_timer_gcc_ia64_cycle.h
new file mode 100644
index 0000000..32ac6c4
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_gcc_ia64_cycle.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GCC_IA64_CYCLE_H_INCLUDED
+#define MPL_TIMER_GCC_IA64_CYCLE_H_INCLUDED
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ MPL_time_t t_val;
+
+#ifdef __INTEL_COMPILER
+#include "ia64regs.h"
+ t_val = __getReg(_IA64_REG_AR_ITC);
+#else
+ __asm__ __volatile__("mov %0=ar.itc" : "=r" (t_val));
+#endif
+
+ *timeval = t_val;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_gethrtime.h b/src/pm/hydra/mpl/include/mpl_timer_gethrtime.h
new file mode 100644
index 0000000..3662795
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_gethrtime.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GETHRTIME_H_INCLUDED
+#define MPL_TIMER_GETHRTIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <sys/time.h>
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_gettimeofday.h b/src/pm/hydra/mpl/include/mpl_timer_gettimeofday.h
new file mode 100644
index 0000000..5afdb57
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_gettimeofday.h
@@ -0,0 +1,15 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_GETTIMEOFDAY_H_INCLUDED
+#define MPL_TIMER_GETTIMEOFDAY_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_linux86_cycle.h b/src/pm/hydra/mpl/include/mpl_timer_linux86_cycle.h
new file mode 100644
index 0000000..f43f5f2
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_linux86_cycle.h
@@ -0,0 +1,42 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_LINUX86_CYCLE_H_INCLUDED
+#define MPL_TIMER_LINUX86_CYCLE_H_INCLUDED
+
+static inline int MPL_wtime(MPL_time_t *timeval)
+{
+/* The rdtsc instruction is not a "serializing" instruction, so the
+ processor is free to reorder it. In order to get more accurate
+ timing numbers with rdtsc, we need to put a serializing
+ instruction, like cpuid, before rdtsc. X86_64 architectures have
+ the rdtscp instruction which is synchronizing, we use this when we
+ can. */
+#ifdef MPL_LINUX86_CYCLE_RDTSCP
+ unsigned long long lower,upper,extra;
+ __asm__ __volatile__ ("rdtscp\n" : "=a" (lower), "=d" (upper), "=c" (extra));
+ *timeval = (upper << 32) + lower;
+
+#elif defined(MPL_LINUX86_CYCLE_CPUID_RDTSC64)
+ unsigned long long lower, upper;
+ __asm__ __volatile__("cpuid ; rdtsc" : "=a" (lower), "=d" (upper) : : "ebx", "ecx");
+ *timeval = (upper << 32) + lower;
+
+#elif defined(MPL_LINUX86_CYCLE_CPUID_RDTSC32)
+ __asm__ __volatile__("cpuid ; rdtsc" : "=A" (*timeval) : : "ebx", "ecx");
+
+#elif defined(MPL_LINUX86_CYCLE_RDTSC)
+/* The configure test using cpuid must have failed, try just rdtsc by itself */
+ __asm__ __volatile__("rdtsc" : "=A" (*timeval));
+
+#else
+#error Dont know which Linux timer to use
+#endif
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_mach_absolute_time.h b/src/pm/hydra/mpl/include/mpl_timer_mach_absolute_time.h
new file mode 100644
index 0000000..e520f4f
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_mach_absolute_time.h
@@ -0,0 +1,14 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_MACH_ABSOLUTE_TIME_H_INCLUDED
+#define MPL_TIMER_MACH_ABSOLUTE_TIME_H_INCLUDED
+
+#define MPLI_WTIME_IS_A_FUNCTION
+
+#include <mach/mach_time.h>
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_ppc64_cycle.h b/src/pm/hydra/mpl/include/mpl_timer_ppc64_cycle.h
new file mode 100644
index 0000000..8b63933
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_ppc64_cycle.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_PPC64_CYCLE_H_INCLUDED
+#define MPL_TIMER_PPC64_CYCLE_H_INCLUDED
+
+#define SPRN_TBRU 0x10D
+#define SPRN_TBRL 0x10C
+
+static inline uint64_t tb()
+{
+ unsigned temp;
+ union
+ {
+ struct { unsigned hi, lo; } w;
+ uint64_t d;
+ } result;
+
+ do
+ {
+ asm volatile ("mfspr %0,%1" : "=r" (temp) : "i" (SPRN_TBRU));
+ asm volatile ("mfspr %0,%1" : "=r" (result.w.lo) : "i" (SPRN_TBRL));
+ asm volatile ("mfspr %0,%1" : "=r" (result.w.hi) : "i" (SPRN_TBRU));
+ }
+ while (temp != result.w.hi);
+
+ return result.d;
+}
+
+static inline int MPL_wtime(MPL_time_t *timeval)
+{
+ *timeval = tb();
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_query_performance_counter.h b/src/pm/hydra/mpl/include/mpl_timer_query_performance_counter.h
new file mode 100644
index 0000000..0638c13
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_query_performance_counter.h
@@ -0,0 +1,20 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_QUERY_PERFORMANCE_COUNTER_H_INCLUDED
+#define MPL_TIMER_QUERY_PERFORMANCE_COUNTER_H_INCLUDED
+
+#include <winsock2.h>
+#include <windows.h>
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ QueryPerformanceCounter(timeval);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_timer_win86_cycle.h b/src/pm/hydra/mpl/include/mpl_timer_win86_cycle.h
new file mode 100644
index 0000000..ad670ed
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_timer_win86_cycle.h
@@ -0,0 +1,25 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef MPL_TIMER_WIN86_CYCLE_H_INCLUDED
+#define MPL_TIMER_WIN86_CYCLE_H_INCLUDED
+
+#include <winsock2.h>
+#include <windows.h>
+
+static inline void MPL_wtime(MPL_time_t *timeval)
+{
+ register int *f1 = (int*)var_ptr;
+ __asm cpuid;
+ __asm rdtsc;
+ __asm mov ecx, f1;
+ __asm mov [ecx], eax;
+ __asm mov [ecx + TYPE int], edx;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/include/mpl_trmem.h b/src/pm/hydra/mpl/include/mpl_trmem.h
new file mode 100644
index 0000000..7b32df5
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_trmem.h
@@ -0,0 +1,199 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#if !defined(MPL_TRMEM_H_INCLUDED)
+#define MPL_TRMEM_H_INCLUDED
+
+#if defined MPL_NEEDS_STRDUP_DECL && !defined strdup
+extern char *strdup(const char *);
+#endif /* MPL_NEEDS_STRDUP_DECL */
+
+#if defined(MPL_USE_MEMORY_TRACING)
+#define MPL_strdup(a) MPL_trstrdup(a,__LINE__,__FILE__)
+#elif defined(MPL_HAVE_STRDUP)
+#define MPL_strdup strdup
+#else
+char *MPL_strdup(const char *str);
+#endif /* defined(MPL_USE_MEMORY_TRACING) || defined(MPL_HAVE_STRDUP) */
+
+#ifdef MPL_USE_MEMORY_TRACING
+/*M
+ MPL_malloc - Allocate memory
+
+ Synopsis:
+.vb
+ void *MPL_malloc( size_t len )
+.ve
+
+ Input Parameter:
+. len - Length of memory to allocate in bytes
+
+ Return Value:
+ Pointer to allocated memory, or null if memory could not be allocated.
+
+ Notes:
+ This routine will often be implemented as the simple macro
+.vb
+ #define MPL_malloc(n) malloc(n)
+.ve
+ However, it can also be defined as
+.vb
+ #define MPL_malloc(n) MPL_trmalloc(n,__LINE__,__FILE__)
+.ve
+ where 'MPL_trmalloc' is a tracing version of 'malloc' that is included with
+ MPICH.
+
+ Module:
+ Utility
+ M*/
+#define MPL_malloc(a) MPL_trmalloc((a),__LINE__,__FILE__)
+
+/*M
+ MPL_calloc - Allocate memory that is initialized to zero.
+
+ Synopsis:
+.vb
+ void *MPL_calloc( size_t nelm, size_t elsize )
+.ve
+
+ Input Parameters:
++ nelm - Number of elements to allocate
+- elsize - Size of each element.
+
+ Notes:
+ Like 'MPL_malloc' and 'MPL_free', this will often be implemented as a
+ macro but may use 'MPL_trcalloc' to provide a tracing version.
+
+ Module:
+ Utility
+ M*/
+#define MPL_calloc(a,b) MPL_trcalloc((a),(b),__LINE__,__FILE__)
+
+/*M
+ MPL_free - Free memory
+
+ Synopsis:
+.vb
+ void MPL_free( void *ptr )
+.ve
+
+ Input Parameter:
+. ptr - Pointer to memory to be freed. This memory must have been allocated
+ with 'MPL_malloc'.
+
+ Notes:
+ This routine will often be implemented as the simple macro
+.vb
+ #define MPL_free(n) free(n)
+.ve
+ However, it can also be defined as
+.vb
+ #define MPL_free(n) MPL_trfree(n,__LINE__,__FILE__)
+.ve
+ where 'MPL_trfree' is a tracing version of 'free' that is included with
+ MPICH.
+
+ Module:
+ Utility
+ M*/
+#define MPL_free(a) MPL_trfree(a,__LINE__,__FILE__)
+
+#define MPL_realloc(a,b) MPL_trrealloc((a),(b),__LINE__,__FILE__)
+
+#else /* MPL_USE_MEMORY_TRACING */
+/* No memory tracing; just use native functions */
+#define MPL_malloc(a) malloc((size_t)(a))
+#define MPL_calloc(a,b) calloc((size_t)(a),(size_t)(b))
+#define MPL_free(a) free((void *)(a))
+#define MPL_realloc(a,b) realloc((void *)(a),(size_t)(b))
+
+#endif /* MPL_USE_MEMORY_TRACING */
+
+
+/* --------------------------------------------------------------------
+ * MPL memory alignment union
+ * The MPL_mem_alignment_t union is used to help internal structures or buffers
+ * follow the alignment rules for all predefined datatypes. */
+
+#if 0 /* sample usage : wrap up sample_t structure. */
+typedef union {
+ sample_t var;
+ MPL_mem_alignment_t alignment;
+} aligned_sample_t;
+#endif
+
+/* Union including all C types that possibly require the largest alignment bytes.
+ * Note that we do not need other Fortran/CXX predefined types because all of them
+ * are internally translated to appropriate C types. */
+typedef union {
+ /* Integer types.
+ * We only list signed types here, because an unsigned type always require
+ * the same alignment as its signed version. Fix me if this theory is wrong.*/
+ long long_align;
+#ifdef HAVE_LONG_LONG
+ long long ll_align;
+#endif
+#ifdef HAVE_INT32_T
+ int32_t int32_t_align;
+#endif
+#ifdef HAVE_INT64_T
+ int64_t int64_t_align;
+#endif
+
+ /* Logical type */
+#ifdef HAVE__BOOL
+ _Bool bool_align;
+#endif
+
+ /* Floating-point types */
+ double double_align;
+#ifdef HAVE_LONG_DOUBLE
+ long double ld_align;
+#endif
+
+ /* Complex types */
+#ifdef HAVE_DOUBLE__COMPLEX
+ double _Complex d_complex_align;
+#endif
+#ifdef HAVE_LONG_DOUBLE__COMPLEX
+ long double _Complex ld_complex_align;
+#endif
+ /* MPICH handles Fortran/CXX complex types as structure (see src/include/oputil.h).
+ * Because some platform may have special alignment rule for structures,
+ * we include them as well. */
+ struct {
+ double re;
+ double im;
+ } mpl_d_complex_align;
+#ifdef HAVE_LONG_DOUBLE
+ struct {
+ long double re;
+ long double im;
+ } mpl_ld_complex_align;
+#endif
+} MPL_mem_alignment_t;
+
+/* END of MPL memory alignment union
+ * -------------------------------------------------------------------- */
+
+/* FIXME: Consider an option of specifying __attribute__((malloc)) for
+ gcc - this lets gcc-style compilers know that the returned pointer
+ does not alias any pointer prior to the call.
+ */
+void MPL_trinit(int, int);
+void *MPL_trmalloc(size_t, int, const char[]);
+void MPL_trfree(void *, int, const char[]);
+int MPL_trvalid(const char[]);
+int MPL_trvalid2(const char[],int,const char[]);
+void *MPL_trcalloc(size_t, size_t, int, const char[]);
+void *MPL_trrealloc(void *, size_t, int, const char[]);
+void *MPL_trstrdup(const char *, int, const char[]);
+
+/* Make sure that FILE is defined */
+#include <stdio.h>
+void MPL_trdump(FILE *, int);
+
+#endif /* !defined(MPL_TRMEM_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_uthash.h b/src/pm/hydra/mpl/include/mpl_uthash.h
new file mode 100755
index 0000000..ba46af1
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_uthash.h
@@ -0,0 +1,980 @@
+/* MPICH changes:
+ *
+ * - The file name has been changed to avoid conflicts with any system-installed
+ * "uthash.h" header files.
+ * - some configure-time checking for __typeof() support was added
+ * - intentionally omitted from "mpl.h" in order to require using code to opt-in
+ * - override malloc/free/realloc to call MPL routines
+ */
+/*
+Copyright (c) 2003-2014, Troy D. Hanson http://troydhanson.github.com/uthash/
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef MPL_UTHASH_H
+#define MPL_UTHASH_H
+
+#include <string.h> /* memcmp,strlen */
+#include <stddef.h> /* ptrdiff_t */
+#include <stdlib.h> /* exit() */
+
+#ifdef MPL_HAVE___TYPEOF /* MPICH modification */
+/* These macros use decltype or the earlier __typeof GNU extension.
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+ when compiling c++ source) this code uses whatever method is needed
+ or, for VS2008 where neither is available, uses casting workarounds. */
+#if defined(_MSC_VER) /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+#define MPL_DECLTYPE(x) (decltype(x))
+#else /* VS2008 or older (or VS2010 in C mode) */
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#endif
+#elif defined(__BORLANDC__) || defined(__LCC__) || defined(__WATCOMC__)
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#else /* GNU, Sun and other compilers */
+#define MPL_DECLTYPE(x) (__typeof(x))
+#endif
+#else /* !MPL_HAVE___TYPEOF */
+#define MPL_NO_DECLTYPE
+#define MPL_DECLTYPE(x)
+#endif /* !MPL_HAVE__TYPEOF */
+
+
+#ifdef MPL_NO_DECLTYPE
+#define MPL_DECLTYPE_ASSIGN(dst,src) \
+do { \
+ char **_da_dst = (char**)(&(dst)); \
+ *_da_dst = (char*)(src); \
+} while(0)
+#else
+#define MPL_DECLTYPE_ASSIGN(dst,src) \
+do { \
+ (dst) = MPL_DECLTYPE(dst)(src); \
+} while(0)
+#endif
+
+/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */
+#if defined(_WIN32)
+#if defined(_MSC_VER) && _MSC_VER >= 1600
+#include <stdint.h>
+#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+#elif defined(__GNUC__) && !defined(__VXWORKS__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+
+#define MPL_UTHASH_VERSION 1.9.9
+
+#ifndef MPL_uthash_fatal
+#define MPL_uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */
+#endif
+#ifndef MPL_uthash_malloc
+#define MPL_uthash_malloc(sz) MPL_malloc(sz) /* malloc fcn */
+#endif
+#ifndef MPL_uthash_free
+#define MPL_uthash_free(ptr,sz) MPL_free(ptr) /* free fcn */
+#endif
+
+#ifndef MPL_uthash_noexpand_fyi
+#define MPL_uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
+#endif
+#ifndef MPL_uthash_expand_fyi
+#define MPL_uthash_expand_fyi(tbl) /* can be defined to log expands */
+#endif
+
+/* initial number of buckets */
+#define MPL_HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */
+#define MPL_HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */
+#define MPL_HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */
+
+/* calculate the element whose hash handle address is hhe */
+#define MPL_ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+
+#define MPL_HASH_FIND(hh,head,keyptr,keylen,out) \
+do { \
+ out=NULL; \
+ if (head != NULL) { \
+ unsigned _hf_bkt,_hf_hashv; \
+ MPL_HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \
+ if (MPL_HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv) != 0) { \
+ MPL_HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \
+ keyptr,keylen,out); \
+ } \
+ } \
+} while (0)
+
+#ifdef MPL_HASH_BLOOM
+#define MPL_HASH_BLOOM_BITLEN (1UL << MPL_HASH_BLOOM)
+#define MPL_HASH_BLOOM_BYTELEN (MPL_HASH_BLOOM_BITLEN/8UL) + (((MPL_HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL)
+#define MPL_HASH_BLOOM_MAKE(tbl) \
+do { \
+ (tbl)->bloom_nbits = MPL_HASH_BLOOM; \
+ (tbl)->bloom_bv = (uint8_t*)MPL_uthash_malloc(MPL_HASH_BLOOM_BYTELEN); \
+ if (!((tbl)->bloom_bv)) { MPL_uthash_fatal( "out of memory"); } \
+ memset((tbl)->bloom_bv, 0, MPL_HASH_BLOOM_BYTELEN); \
+ (tbl)->bloom_sig = MPL_HASH_BLOOM_SIGNATURE; \
+} while (0)
+
+#define MPL_HASH_BLOOM_FREE(tbl) \
+do { \
+ MPL_uthash_free((tbl)->bloom_bv, MPL_HASH_BLOOM_BYTELEN); \
+} while (0)
+
+#define MPL_HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U)))
+#define MPL_HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U)))
+
+#define MPL_HASH_BLOOM_ADD(tbl,hashv) \
+ MPL_HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U)))
+
+#define MPL_HASH_BLOOM_TEST(tbl,hashv) \
+ MPL_HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U)))
+
+#else
+#define MPL_HASH_BLOOM_MAKE(tbl)
+#define MPL_HASH_BLOOM_FREE(tbl)
+#define MPL_HASH_BLOOM_ADD(tbl,hashv)
+#define MPL_HASH_BLOOM_TEST(tbl,hashv) (1)
+#define MPL_HASH_BLOOM_BYTELEN 0U
+#endif
+
+#define MPL_HASH_MAKE_TABLE(hh,head) \
+do { \
+ (head)->hh.tbl = (MPL_UT_hash_table*)MPL_uthash_malloc( \
+ sizeof(MPL_UT_hash_table)); \
+ if (!((head)->hh.tbl)) { MPL_uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl, 0, sizeof(MPL_UT_hash_table)); \
+ (head)->hh.tbl->tail = &((head)->hh); \
+ (head)->hh.tbl->num_buckets = MPL_HASH_INITIAL_NUM_BUCKETS; \
+ (head)->hh.tbl->log2_num_buckets = MPL_HASH_INITIAL_NUM_BUCKETS_LOG2; \
+ (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
+ (head)->hh.tbl->buckets = (MPL_UT_hash_bucket*)MPL_uthash_malloc( \
+ MPL_HASH_INITIAL_NUM_BUCKETS*sizeof(struct MPL_UT_hash_bucket)); \
+ if (! (head)->hh.tbl->buckets) { MPL_uthash_fatal( "out of memory"); } \
+ memset((head)->hh.tbl->buckets, 0, \
+ MPL_HASH_INITIAL_NUM_BUCKETS*sizeof(struct MPL_UT_hash_bucket)); \
+ MPL_HASH_BLOOM_MAKE((head)->hh.tbl); \
+ (head)->hh.tbl->signature = MPL_HASH_SIGNATURE; \
+} while(0)
+
+#define MPL_HASH_ADD(hh,head,fieldname,keylen_in,add) \
+ MPL_HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add)
+
+#define MPL_HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \
+do { \
+ replaced=NULL; \
+ MPL_HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \
+ if (replaced!=NULL) { \
+ MPL_HASH_DELETE(hh,head,replaced); \
+ } \
+ MPL_HASH_ADD(hh,head,fieldname,keylen_in,add); \
+} while(0)
+
+#define MPL_HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
+do { \
+ unsigned _ha_bkt; \
+ (add)->hh.next = NULL; \
+ (add)->hh.key = (char*)(keyptr); \
+ (add)->hh.keylen = (unsigned)(keylen_in); \
+ if (!(head)) { \
+ head = (add); \
+ (head)->hh.prev = NULL; \
+ MPL_HASH_MAKE_TABLE(hh,head); \
+ } else { \
+ (head)->hh.tbl->tail->next = (add); \
+ (add)->hh.prev = MPL_ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
+ (head)->hh.tbl->tail = &((add)->hh); \
+ } \
+ (head)->hh.tbl->num_items++; \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ MPL_HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \
+ (add)->hh.hashv, _ha_bkt); \
+ MPL_HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \
+ MPL_HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \
+ MPL_HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \
+ MPL_HASH_FSCK(hh,head); \
+} while(0)
+
+#define MPL_HASH_TO_BKT( hashv, num_bkts, bkt ) \
+do { \
+ bkt = ((hashv) & ((num_bkts) - 1U)); \
+} while(0)
+
+/* delete "delptr" from the hash table.
+ * "the usual" patch-up process for the app-order doubly-linked-list.
+ * The use of _hd_hh_del below deserves special explanation.
+ * These used to be expressed using (delptr) but that led to a bug
+ * if someone used the same symbol for the head and deletee, like
+ * HASH_DELETE(hh,users,users);
+ * We want that to work, but by changing the head (users) below
+ * we were forfeiting our ability to further refer to the deletee (users)
+ * in the patch-up process. Solution: use scratch space to
+ * copy the deletee pointer, then the latter references are via that
+ * scratch pointer rather than through the repointed (users) symbol.
+ */
+#define MPL_HASH_DELETE(hh,head,delptr) \
+do { \
+ struct MPL_UT_hash_handle *_hd_hh_del; \
+ if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \
+ MPL_uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket) ); \
+ MPL_HASH_BLOOM_FREE((head)->hh.tbl); \
+ MPL_uthash_free((head)->hh.tbl, sizeof(MPL_UT_hash_table)); \
+ head = NULL; \
+ } else { \
+ unsigned _hd_bkt; \
+ _hd_hh_del = (MPL_UT_hash_handle*)&((delptr)->hh); \
+ if ((delptr) == MPL_ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \
+ (head)->hh.tbl->tail = \
+ (MPL_UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho); \
+ } \
+ if ((delptr)->hh.prev != NULL) { \
+ ((MPL_UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \
+ (head)->hh.tbl->hho))->next = (delptr)->hh.next; \
+ } else { \
+ MPL_DECLTYPE_ASSIGN(head,(delptr)->hh.next); \
+ } \
+ if (_hd_hh_del->next != NULL) { \
+ ((MPL_UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \
+ (head)->hh.tbl->hho))->prev = \
+ _hd_hh_del->prev; \
+ } \
+ MPL_HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ MPL_HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
+ (head)->hh.tbl->num_items--; \
+ } \
+ MPL_HASH_FSCK(hh,head); \
+} while (0)
+
+
+/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+#define MPL_HASH_FIND_STR(head,findstr,out) \
+ MPL_HASH_FIND(hh,head,findstr,(unsigned)strlen(findstr),out)
+#define MPL_HASH_ADD_STR(head,strfield,add) \
+ MPL_HASH_ADD(hh,head,strfield[0],(unsigned int)strlen(add->strfield),add)
+#define MPL_HASH_REPLACE_STR(head,strfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,strfield[0],(unsigned)strlen(add->strfield),add,replaced)
+#define MPL_HASH_FIND_INT(head,findint,out) \
+ MPL_HASH_FIND(hh,head,findint,sizeof(int),out)
+#define MPL_HASH_ADD_INT(head,intfield,add) \
+ MPL_HASH_ADD(hh,head,intfield,sizeof(int),add)
+#define MPL_HASH_REPLACE_INT(head,intfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
+#define MPL_HASH_FIND_PTR(head,findptr,out) \
+ MPL_HASH_FIND(hh,head,findptr,sizeof(void *),out)
+#define MPL_HASH_ADD_PTR(head,ptrfield,add) \
+ MPL_HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+#define MPL_HASH_REPLACE_PTR(head,ptrfield,add,replaced) \
+ MPL_HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
+#define MPL_HASH_DEL(head,delptr) \
+ MPL_HASH_DELETE(hh,head,delptr)
+
+/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+ * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+ */
+#ifdef MPL_HASH_DEBUG
+#define MPL_HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+#define MPL_HASH_FSCK(hh,head) \
+do { \
+ struct MPL_UT_hash_handle *_thh; \
+ if (head) { \
+ unsigned _bkt_i; \
+ unsigned _count; \
+ char *_prev; \
+ _count = 0; \
+ for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \
+ unsigned _bkt_count = 0; \
+ _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
+ _prev = NULL; \
+ while (_thh) { \
+ if (_prev != (char*)(_thh->hh_prev)) { \
+ MPL_HASH_OOPS("invalid hh_prev %p, actual %p\n", \
+ _thh->hh_prev, _prev ); \
+ } \
+ _bkt_count++; \
+ _prev = (char*)(_thh); \
+ _thh = _thh->hh_next; \
+ } \
+ _count += _bkt_count; \
+ if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
+ MPL_HASH_OOPS("invalid bucket count %u, actual %u\n", \
+ (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
+ } \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ MPL_HASH_OOPS("invalid hh item count %u, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ /* traverse hh in app order; check next/prev integrity, count */ \
+ _count = 0; \
+ _prev = NULL; \
+ _thh = &(head)->hh; \
+ while (_thh) { \
+ _count++; \
+ if (_prev !=(char*)(_thh->prev)) { \
+ MPL_HASH_OOPS("invalid prev %p, actual %p\n", \
+ _thh->prev, _prev ); \
+ } \
+ _prev = (char*)MPL_ELMT_FROM_HH((head)->hh.tbl, _thh); \
+ _thh = ( _thh->next ? (MPL_UT_hash_handle*)((char*)(_thh->next) + \
+ (head)->hh.tbl->hho) : NULL ); \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ MPL_HASH_OOPS("invalid app item count %u, actual %u\n", \
+ (head)->hh.tbl->num_items, _count ); \
+ } \
+ } \
+} while (0)
+#else
+#define MPL_HASH_FSCK(hh,head)
+#endif
+
+/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+ * the descriptor to which this macro is defined for tuning the hash function.
+ * The app can #include <unistd.h> to get the prototype for write(2). */
+#ifdef MPL_HASH_EMIT_KEYS
+#define MPL_HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
+do { \
+ unsigned _klen = fieldlen; \
+ write(MPL_HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
+ write(MPL_HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \
+} while (0)
+#else
+#define MPL_HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+#endif
+
+/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+#ifdef MPL_HASH_FUNCTION
+#define MPL_HASH_FCN MPL_HASH_FUNCTION
+#else
+#define MPL_HASH_FCN MPL_HASH_JEN
+#endif
+
+/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
+#define MPL_HASH_BER(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hb_keylen=(unsigned)keylen; \
+ const unsigned char *_hb_key=(const unsigned char*)(key); \
+ (hashv) = 0; \
+ while (_hb_keylen-- != 0U) { \
+ (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \
+ } \
+ bkt = (hashv) & (num_bkts-1U); \
+} while (0)
+
+
+/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+ * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+#define MPL_HASH_SAX(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _sx_i; \
+ const unsigned char *_hs_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_sx_i=0; _sx_i < keylen; _sx_i++) { \
+ hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
+ } \
+ bkt = hashv & (num_bkts-1U); \
+} while (0)
+/* FNV-1a variation */
+#define MPL_HASH_FNV(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _fn_i; \
+ const unsigned char *_hf_key=(const unsigned char*)(key); \
+ hashv = 2166136261U; \
+ for(_fn_i=0; _fn_i < keylen; _fn_i++) { \
+ hashv = hashv ^ _hf_key[_fn_i]; \
+ hashv = hashv * 16777619U; \
+ } \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#define MPL_HASH_OAT(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _ho_i; \
+ const unsigned char *_ho_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
+ hashv += _ho_key[_ho_i]; \
+ hashv += (hashv << 10); \
+ hashv ^= (hashv >> 6); \
+ } \
+ hashv += (hashv << 3); \
+ hashv ^= (hashv >> 11); \
+ hashv += (hashv << 15); \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#define MPL_HASH_JEN_MIX(a,b,c) \
+do { \
+ a -= b; a -= c; a ^= ( c >> 13 ); \
+ b -= c; b -= a; b ^= ( a << 8 ); \
+ c -= a; c -= b; c ^= ( b >> 13 ); \
+ a -= b; a -= c; a ^= ( c >> 12 ); \
+ b -= c; b -= a; b ^= ( a << 16 ); \
+ c -= a; c -= b; c ^= ( b >> 5 ); \
+ a -= b; a -= c; a ^= ( c >> 3 ); \
+ b -= c; b -= a; b ^= ( a << 10 ); \
+ c -= a; c -= b; c ^= ( b >> 15 ); \
+} while (0)
+
+#define MPL_HASH_JEN(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned _hj_i,_hj_j,_hj_k; \
+ unsigned const char *_hj_key=(unsigned const char*)(key); \
+ hashv = 0xfeedbeefu; \
+ _hj_i = _hj_j = 0x9e3779b9u; \
+ _hj_k = (unsigned)(keylen); \
+ while (_hj_k >= 12U) { \
+ _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
+ + ( (unsigned)_hj_key[2] << 16 ) \
+ + ( (unsigned)_hj_key[3] << 24 ) ); \
+ _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
+ + ( (unsigned)_hj_key[6] << 16 ) \
+ + ( (unsigned)_hj_key[7] << 24 ) ); \
+ hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
+ + ( (unsigned)_hj_key[10] << 16 ) \
+ + ( (unsigned)_hj_key[11] << 24 ) ); \
+ \
+ MPL_HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ \
+ _hj_key += 12; \
+ _hj_k -= 12U; \
+ } \
+ hashv += (unsigned)(keylen); \
+ switch ( _hj_k ) { \
+ case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \
+ case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \
+ case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \
+ case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \
+ case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \
+ case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \
+ case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \
+ case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \
+ case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \
+ case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \
+ case 1: _hj_i += _hj_key[0]; \
+ } \
+ MPL_HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+/* The Paul Hsieh hash function */
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+ || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
+ +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+#define MPL_HASH_SFH(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ unsigned const char *_sfh_key=(unsigned const char*)(key); \
+ uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \
+ \
+ unsigned _sfh_rem = _sfh_len & 3U; \
+ _sfh_len >>= 2; \
+ hashv = 0xcafebabeu; \
+ \
+ /* Main loop */ \
+ for (;_sfh_len > 0U; _sfh_len--) { \
+ hashv += get16bits (_sfh_key); \
+ _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \
+ hashv = (hashv << 16) ^ _sfh_tmp; \
+ _sfh_key += 2U*sizeof (uint16_t); \
+ hashv += hashv >> 11; \
+ } \
+ \
+ /* Handle end cases */ \
+ switch (_sfh_rem) { \
+ case 3: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 16; \
+ hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \
+ hashv += hashv >> 11; \
+ break; \
+ case 2: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 11; \
+ hashv += hashv >> 17; \
+ break; \
+ case 1: hashv += *_sfh_key; \
+ hashv ^= hashv << 10; \
+ hashv += hashv >> 1; \
+ } \
+ \
+ /* Force "avalanching" of final 127 bits */ \
+ hashv ^= hashv << 3; \
+ hashv += hashv >> 5; \
+ hashv ^= hashv << 4; \
+ hashv += hashv >> 17; \
+ hashv ^= hashv << 25; \
+ hashv += hashv >> 6; \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+
+#ifdef MPL_HASH_USING_NO_STRICT_ALIASING
+/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
+ * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+ * MurmurHash uses the faster approach only on CPU's where we know it's safe.
+ *
+ * Note the preprocessor built-in defines can be emitted using:
+ *
+ * gcc -m64 -dM -E - < /dev/null (on gcc)
+ * cc -## a.c (where a.c is a simple test file) (Sun Studio)
+ */
+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))
+#define MPL_MUR_GETBLOCK(p,i) p[i]
+#else /* non intel */
+#define MPL_MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL)
+#define MPL_MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL)
+#define MPL_MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL)
+#define MPL_MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL)
+#define MPL_WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
+#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
+#define MPL_MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
+#define MPL_MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
+#define MPL_MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8))
+#else /* assume little endian non-intel */
+#define MPL_MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
+#define MPL_MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
+#define MPL_MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8))
+#endif
+#define MPL_MUR_GETBLOCK(p,i) (MPL_MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \
+ (MPL_MUR_PLUS1_ALIGNED(p) ? MPL_MUR_THREE_ONE(p) : \
+ (MPL_MUR_PLUS2_ALIGNED(p) ? MPL_MUR_TWO_TWO(p) : \
+ MPL_MUR_ONE_THREE(p))))
+#endif
+#define MPL_MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+#define MPL_MUR_FMIX(_h) \
+do { \
+ _h ^= _h >> 16; \
+ _h *= 0x85ebca6bu; \
+ _h ^= _h >> 13; \
+ _h *= 0xc2b2ae35u; \
+ _h ^= _h >> 16; \
+} while(0)
+
+#define MPL_HASH_MUR(key,keylen,num_bkts,hashv,bkt) \
+do { \
+ const uint8_t *_mur_data = (const uint8_t*)(key); \
+ const int _mur_nblocks = (int)(keylen) / 4; \
+ uint32_t _mur_h1 = 0xf88D5353u; \
+ uint32_t _mur_c1 = 0xcc9e2d51u; \
+ uint32_t _mur_c2 = 0x1b873593u; \
+ uint32_t _mur_k1 = 0; \
+ const uint8_t *_mur_tail; \
+ const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \
+ int _mur_i; \
+ for(_mur_i = -_mur_nblocks; _mur_i!=0; _mur_i++) { \
+ _mur_k1 = MPL_MUR_GETBLOCK(_mur_blocks,_mur_i); \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MPL_MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ \
+ _mur_h1 ^= _mur_k1; \
+ _mur_h1 = MPL_MUR_ROTL32(_mur_h1,13); \
+ _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \
+ } \
+ _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \
+ _mur_k1=0; \
+ switch((keylen) & 3U) { \
+ case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \
+ case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \
+ case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MPL_MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ _mur_h1 ^= _mur_k1; \
+ } \
+ _mur_h1 ^= (uint32_t)(keylen); \
+ MPL_MUR_FMIX(_mur_h1); \
+ hashv = _mur_h1; \
+ bkt = hashv & (num_bkts-1U); \
+} while(0)
+#endif /* HASH_USING_NO_STRICT_ALIASING */
+
+/* key comparison function; return 0 if keys equal */
+#define MPL_HASH_KEYCMP(a,b,len) memcmp(a,b,(unsigned long)(len))
+
+/* iterate over items in a known bucket to find desired item */
+#define MPL_HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \
+do { \
+ if (head.hh_head != NULL) { MPL_DECLTYPE_ASSIGN(out,MPL_ELMT_FROM_HH(tbl,head.hh_head)); } \
+ else { out=NULL; } \
+ while (out != NULL) { \
+ if ((out)->hh.keylen == (keylen_in)) { \
+ if ((MPL_HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) { break; } \
+ } \
+ if ((out)->hh.hh_next != NULL) { MPL_DECLTYPE_ASSIGN(out,MPL_ELMT_FROM_HH(tbl,(out)->hh.hh_next)); } \
+ else { out = NULL; } \
+ } \
+} while(0)
+
+/* add an item to a bucket */
+#define MPL_HASH_ADD_TO_BKT(head,addhh) \
+do { \
+ head.count++; \
+ (addhh)->hh_next = head.hh_head; \
+ (addhh)->hh_prev = NULL; \
+ if (head.hh_head != NULL) { (head).hh_head->hh_prev = (addhh); } \
+ (head).hh_head=addhh; \
+ if ((head.count >= ((head.expand_mult+1U) * MPL_HASH_BKT_CAPACITY_THRESH)) \
+ && ((addhh)->tbl->noexpand != 1U)) { \
+ MPL_HASH_EXPAND_BUCKETS((addhh)->tbl); \
+ } \
+} while(0)
+
+/* remove an item from a given bucket */
+#define MPL_HASH_DEL_IN_BKT(hh,head,hh_del) \
+ (head).count--; \
+ if ((head).hh_head == (MPL_UT_hash_handle*)hh_del) { \
+ (head).hh_head = (MPL_UT_hash_handle*)hh_del->hh_next; \
+ } \
+ if (hh_del->hh_prev) { \
+ hh_del->hh_prev->hh_next = hh_del->hh_next; \
+ } \
+ if (hh_del->hh_next) { \
+ hh_del->hh_next->hh_prev = hh_del->hh_prev; \
+ }
+
+/* Bucket expansion has the effect of doubling the number of buckets
+ * and redistributing the items into the new buckets. Ideally the
+ * items will distribute more or less evenly into the new buckets
+ * (the extent to which this is true is a measure of the quality of
+ * the hash function as it applies to the key domain).
+ *
+ * With the items distributed into more buckets, the chain length
+ * (item count) in each bucket is reduced. Thus by expanding buckets
+ * the hash keeps a bound on the chain length. This bounded chain
+ * length is the essence of how a hash provides constant time lookup.
+ *
+ * The calculation of tbl->ideal_chain_maxlen below deserves some
+ * explanation. First, keep in mind that we're calculating the ideal
+ * maximum chain length based on the *new* (doubled) bucket count.
+ * In fractions this is just n/b (n=number of items,b=new num buckets).
+ * Since the ideal chain length is an integer, we want to calculate
+ * ceil(n/b). We don't depend on floating point arithmetic in this
+ * hash, so to calculate ceil(n/b) with integers we could write
+ *
+ * ceil(n/b) = (n/b) + ((n%b)?1:0)
+ *
+ * and in fact a previous version of this hash did just that.
+ * But now we have improved things a bit by recognizing that b is
+ * always a power of two. We keep its base 2 log handy (call it lb),
+ * so now we can write this with a bit shift and logical AND:
+ *
+ * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+ *
+ */
+#define MPL_HASH_EXPAND_BUCKETS(tbl) \
+do { \
+ unsigned _he_bkt; \
+ unsigned _he_bkt_i; \
+ struct MPL_UT_hash_handle *_he_thh, *_he_hh_nxt; \
+ MPL_UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
+ _he_new_buckets = (MPL_UT_hash_bucket*)MPL_uthash_malloc( \
+ 2UL * tbl->num_buckets * sizeof(struct MPL_UT_hash_bucket)); \
+ if (!_he_new_buckets) { MPL_uthash_fatal( "out of memory"); } \
+ memset(_he_new_buckets, 0, \
+ 2UL * tbl->num_buckets * sizeof(struct MPL_UT_hash_bucket)); \
+ tbl->ideal_chain_maxlen = \
+ (tbl->num_items >> (tbl->log2_num_buckets+1U)) + \
+ (((tbl->num_items & ((tbl->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
+ tbl->nonideal_items = 0; \
+ for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \
+ { \
+ _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \
+ while (_he_thh != NULL) { \
+ _he_hh_nxt = _he_thh->hh_next; \
+ MPL_HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2U, _he_bkt); \
+ _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \
+ if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \
+ tbl->nonideal_items++; \
+ _he_newbkt->expand_mult = _he_newbkt->count / \
+ tbl->ideal_chain_maxlen; \
+ } \
+ _he_thh->hh_prev = NULL; \
+ _he_thh->hh_next = _he_newbkt->hh_head; \
+ if (_he_newbkt->hh_head != NULL) { _he_newbkt->hh_head->hh_prev = \
+ _he_thh; } \
+ _he_newbkt->hh_head = _he_thh; \
+ _he_thh = _he_hh_nxt; \
+ } \
+ } \
+ MPL_uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket) ); \
+ tbl->num_buckets *= 2U; \
+ tbl->log2_num_buckets++; \
+ tbl->buckets = _he_new_buckets; \
+ tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \
+ (tbl->ineff_expands+1U) : 0U; \
+ if (tbl->ineff_expands > 1U) { \
+ tbl->noexpand=1; \
+ MPL_uthash_noexpand_fyi(tbl); \
+ } \
+ MPL_uthash_expand_fyi(tbl); \
+} while(0)
+
+
+/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+/* Note that HASH_SORT assumes the hash handle name to be hh.
+ * HASH_SRT was added to allow the hash handle name to be passed in. */
+#define MPL_HASH_SORT(head,cmpfcn) MPL_HASH_SRT(hh,head,cmpfcn)
+#define MPL_HASH_SRT(hh,head,cmpfcn) \
+do { \
+ unsigned _hs_i; \
+ unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
+ struct MPL_UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
+ if (head != NULL) { \
+ _hs_insize = 1; \
+ _hs_looping = 1; \
+ _hs_list = &((head)->hh); \
+ while (_hs_looping != 0U) { \
+ _hs_p = _hs_list; \
+ _hs_list = NULL; \
+ _hs_tail = NULL; \
+ _hs_nmerges = 0; \
+ while (_hs_p != NULL) { \
+ _hs_nmerges++; \
+ _hs_q = _hs_p; \
+ _hs_psize = 0; \
+ for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \
+ _hs_psize++; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ if (! (_hs_q) ) { break; } \
+ } \
+ _hs_qsize = _hs_insize; \
+ while ((_hs_psize > 0U) || ((_hs_qsize > 0U) && (_hs_q != NULL))) {\
+ if (_hs_psize == 0U) { \
+ _hs_e = _hs_q; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } else if ( (_hs_qsize == 0U) || (_hs_q == NULL) ) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL){ \
+ _hs_p = (MPL_UT_hash_handle*)((_hs_p->next != NULL) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ } \
+ _hs_psize--; \
+ } else if (( \
+ cmpfcn(MPL_DECLTYPE(head)(MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \
+ MPL_DECLTYPE(head)(MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \
+ ) <= 0) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL){ \
+ _hs_p = (MPL_UT_hash_handle*)((_hs_p->next != NULL) ? \
+ ((void*)((char*)(_hs_p->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ } \
+ _hs_psize--; \
+ } else { \
+ _hs_e = _hs_q; \
+ _hs_q = (MPL_UT_hash_handle*)((_hs_q->next != NULL) ? \
+ ((void*)((char*)(_hs_q->next) + \
+ (head)->hh.tbl->hho)) : NULL); \
+ _hs_qsize--; \
+ } \
+ if ( _hs_tail != NULL ) { \
+ _hs_tail->next = ((_hs_e != NULL) ? \
+ MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \
+ } else { \
+ _hs_list = _hs_e; \
+ } \
+ if (_hs_e != NULL) { \
+ _hs_e->prev = ((_hs_tail != NULL) ? \
+ MPL_ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \
+ } \
+ _hs_tail = _hs_e; \
+ } \
+ _hs_p = _hs_q; \
+ } \
+ if (_hs_tail != NULL){ \
+ _hs_tail->next = NULL; \
+ } \
+ if ( _hs_nmerges <= 1U ) { \
+ _hs_looping=0; \
+ (head)->hh.tbl->tail = _hs_tail; \
+ MPL_DECLTYPE_ASSIGN(head,MPL_ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
+ } \
+ _hs_insize *= 2U; \
+ } \
+ MPL_HASH_FSCK(hh,head); \
+ } \
+} while (0)
+
+/* This function selects items from one hash into another hash.
+ * The end result is that the selected items have dual presence
+ * in both hashes. There is no copy of the items made; rather
+ * they are added into the new hash through a secondary hash
+ * hash handle that must be present in the structure. */
+#define MPL_HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
+do { \
+ unsigned _src_bkt, _dst_bkt; \
+ void *_last_elt=NULL, *_elt; \
+ MPL_UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
+ ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
+ if (src != NULL) { \
+ for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
+ for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
+ _src_hh != NULL; \
+ _src_hh = _src_hh->hh_next) { \
+ _elt = MPL_ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
+ if (cond(_elt)) { \
+ _dst_hh = (MPL_UT_hash_handle*)(((char*)_elt) + _dst_hho); \
+ _dst_hh->key = _src_hh->key; \
+ _dst_hh->keylen = _src_hh->keylen; \
+ _dst_hh->hashv = _src_hh->hashv; \
+ _dst_hh->prev = _last_elt; \
+ _dst_hh->next = NULL; \
+ if (_last_elt_hh != NULL) { _last_elt_hh->next = _elt; } \
+ if (dst == NULL) { \
+ MPL_DECLTYPE_ASSIGN(dst,_elt); \
+ MPL_HASH_MAKE_TABLE(hh_dst,dst); \
+ } else { \
+ _dst_hh->tbl = (dst)->hh_dst.tbl; \
+ } \
+ MPL_HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
+ MPL_HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \
+ (dst)->hh_dst.tbl->num_items++; \
+ _last_elt = _elt; \
+ _last_elt_hh = _dst_hh; \
+ } \
+ } \
+ } \
+ } \
+ MPL_HASH_FSCK(hh_dst,dst); \
+} while (0)
+
+#define MPL_HASH_CLEAR(hh,head) \
+do { \
+ if (head != NULL) { \
+ MPL_uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct MPL_UT_hash_bucket)); \
+ MPL_HASH_BLOOM_FREE((head)->hh.tbl); \
+ MPL_uthash_free((head)->hh.tbl, sizeof(MPL_UT_hash_table)); \
+ (head)=NULL; \
+ } \
+} while(0)
+
+#define MPL_HASH_OVERHEAD(hh,head) \
+ ((head != NULL) ? ( \
+ (size_t)(((head)->hh.tbl->num_items * sizeof(MPL_UT_hash_handle)) + \
+ ((head)->hh.tbl->num_buckets * sizeof(MPL_UT_hash_bucket)) + \
+ sizeof(MPL_UT_hash_table) + \
+ (MPL_HASH_BLOOM_BYTELEN))) : 0U)
+
+#ifdef MPL_NO_DECLTYPE
+#define MPL_HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#else
+#define MPL_HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((tmp)=MPL_DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((tmp)=MPL_DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#endif
+
+/* obtain a count of items in the hash */
+#define MPL_HASH_COUNT(head) MPL_HASH_CNT(hh,head)
+#define MPL_HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U)
+
+typedef struct MPL_UT_hash_bucket {
+ struct MPL_UT_hash_handle *hh_head;
+ unsigned count;
+
+ /* expand_mult is normally set to 0. In this situation, the max chain length
+ * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+ * the bucket's chain exceeds this length, bucket expansion is triggered).
+ * However, setting expand_mult to a non-zero value delays bucket expansion
+ * (that would be triggered by additions to this particular bucket)
+ * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+ * (The multiplier is simply expand_mult+1). The whole idea of this
+ * multiplier is to reduce bucket expansions, since they are expensive, in
+ * situations where we know that a particular bucket tends to be overused.
+ * It is better to let its chain length grow to a longer yet-still-bounded
+ * value, than to do an O(n) bucket expansion too often.
+ */
+ unsigned expand_mult;
+
+} MPL_UT_hash_bucket;
+
+/* random signature used only to find hash tables in external analysis */
+#define MPL_HASH_SIGNATURE 0xa0111fe1u
+#define MPL_HASH_BLOOM_SIGNATURE 0xb12220f2u
+
+typedef struct MPL_UT_hash_table {
+ MPL_UT_hash_bucket *buckets;
+ unsigned num_buckets, log2_num_buckets;
+ unsigned num_items;
+ struct MPL_UT_hash_handle *tail; /* tail hh in app order, for fast append */
+ ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+
+ /* in an ideal situation (all buckets used equally), no bucket would have
+ * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+ unsigned ideal_chain_maxlen;
+
+ /* nonideal_items is the number of items in the hash whose chain position
+ * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+ * hash distribution; reaching them in a chain traversal takes >ideal steps */
+ unsigned nonideal_items;
+
+ /* ineffective expands occur when a bucket doubling was performed, but
+ * afterward, more than half the items in the hash had nonideal chain
+ * positions. If this happens on two consecutive expansions we inhibit any
+ * further expansion, as it's not helping; this happens when the hash
+ * function isn't a good fit for the key domain. When expansion is inhibited
+ * the hash will still work, albeit no longer in constant time. */
+ unsigned ineff_expands, noexpand;
+
+ uint32_t signature; /* used only to find hash tables in external analysis */
+#ifdef MPL_HASH_BLOOM
+ uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+ uint8_t *bloom_bv;
+ uint8_t bloom_nbits;
+#endif
+
+} MPL_UT_hash_table;
+
+typedef struct MPL_UT_hash_handle {
+ struct MPL_UT_hash_table *tbl;
+ void *prev; /* prev element in app order */
+ void *next; /* next element in app order */
+ struct MPL_UT_hash_handle *hh_prev; /* previous hh in bucket order */
+ struct MPL_UT_hash_handle *hh_next; /* next hh in bucket order */
+ void *key; /* ptr to enclosing struct's key */
+ unsigned keylen; /* enclosing struct's key len */
+ unsigned hashv; /* result of hash-fcn(key) */
+} MPL_UT_hash_handle;
+
+#endif /* MPL_UTHASH_H */
diff --git a/src/pm/hydra/mpl/include/mpl_utlist.h b/src/pm/hydra/mpl/include/mpl_utlist.h
index eb5ea0c..7035fd5 100644
--- a/src/pm/hydra/mpl/include/mpl_utlist.h
+++ b/src/pm/hydra/mpl/include/mpl_utlist.h
@@ -53,8 +53,8 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef MPL_UTLIST_H
-#define MPL_UTLIST_H
+#if !defined(MPL_UTLIST_H_INCLUDED)
+#define MPL_UTLIST_H_INCLUDED
#define MPL_UTLIST_VERSION 1.9.5
@@ -573,5 +573,5 @@ do {
} \
} while(0)
-#endif /* MPL_UTLIST_H */
+#endif /* !defined(MPL_UTLIST_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/include/mpl_valgrind.h b/src/pm/hydra/mpl/include/mpl_valgrind.h
index 2006ada..b902b5c 100644
--- a/src/pm/hydra/mpl/include/mpl_valgrind.h
+++ b/src/pm/hydra/mpl/include/mpl_valgrind.h
@@ -27,7 +27,7 @@
preprocessor token "MPL_VG_AVAILABLE".
*/
-#ifndef MPL_VALGRIND_H_INCLUDED
+#if !defined(MPL_VALGRIND_H_INCLUDED)
#define MPL_VALGRIND_H_INCLUDED
#undef MPL_VG_AVAILABLE
@@ -138,6 +138,14 @@
# define MPL_VG_CREATE_BLOCK(addr_,len_,desc_) do { (void) VALGRIND_CREATE_BLOCK((addr_),(len_),(desc_)); } while (0)
# define MPL_VG_RUNNING_ON_VALGRIND() RUNNING_ON_VALGRIND
# define MPL_VG_PRINTF_BACKTRACE VALGRIND_PRINTF_BACKTRACE
+/* Valgrind has a bug
+ * (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=524488) that
+ * causes it to report a warning when the compiler adds padding to
+ * structures. Even when we initialize all the fields in the
+ * structure, the padding bytes are not initialized. The idea here is
+ * to detect when we are in "valgrind mode" and in such cases
+ * initialize all bytes of the structure. */
+# define MPL_VG_MEM_INIT(addr_,len_) do { memset(addr_, 0, len_); } while (0)
/* custom allocator client requests, you probably shouldn't use these unless you
* really know what you are doing */
@@ -154,6 +162,7 @@
# define MPL_VG_CHECK_MEM_IS_ADDRESSABLE(addr_,len_) do {} while (0)
# define MPL_VG_CREATE_BLOCK(addr_,len_,desc_) do {} while (0)
# define MPL_VG_RUNNING_ON_VALGRIND() (0) /*always false */
+# define MPL_VG_MEM_INIT(addr_,len_) do {} while (0)
# if defined(MPL_HAVE_MACRO_VA_ARGS)
# define MPL_VG_PRINTF_BACKTRACE(...) do {} while (0)
# else
diff --git a/src/pm/hydra/mpl/include/mpl_yield.h b/src/pm/hydra/mpl/include/mpl_yield.h
new file mode 100644
index 0000000..925be66
--- /dev/null
+++ b/src/pm/hydra/mpl/include/mpl_yield.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#ifndef MPL_PROCESS_WRAPPERS_H_INCLUDED
+#define MPL_PROCESS_WRAPPERS_H_INCLUDED
+
+#include "mplconfig.h"
+
+/* MPL_SCHED_YIELD() - Yield the processor to OS scheduler */
+/* On a typical Linux system (verified with kernels 3.2 and 3.5),
+ * usleep has a resolution of more than 1000 cycles. This makes
+ * it impractical if the desired sleeping period is shorter. On
+ * the other hand, sleep(0) returns immediately without going to
+ * the kernel. This means that there is no actual yielding, which
+ * is equivalent to doing nothing. Thus, usleep and sleep are not
+ * recommended as ways to yield the CPU, and sched_yield would be
+ * preferred if available.
+ * Note that nanosleep has the same shortcomings as usleep.*/
+
+#if defined(MPL_USE_SWITCHTOTHREAD_FOR_YIELD)
+ #include <winsock2.h>
+ #include <windows.h>
+ #define MPL_sched_yield() SwitchToThread()
+#elif defined(MPL_USE_WIN32_SLEEP_FOR_YIELD)
+ #include <winsock2.h>
+ #include <windows.h>
+ #define MPL_sched_yield() Sleep(0)
+#elif defined(MPL_USE_SCHED_YIELD_FOR_YIELD)
+ #ifdef MPL_HAVE_SCHED_H
+ #include <sched.h>
+ #endif
+ #define MPL_sched_yield() sched_yield()
+#elif defined(MPL_USE_YIELD_FOR_YIELD)
+ #ifdef MPL_HAVE_SCHED_H
+ #include <sched.h>
+ #endif
+ #define MPL_sched_yield() yield()
+#elif defined (MPL_USE_SELECT_FOR_YIELD)
+ #ifdef MPL_HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+ #define MPL_sched_yield() do { struct timeval t; t.tv_sec = 0; t.tv_usec = 0; select(0,0,0,0,&t); } while (0)
+#elif defined (MPL_USE_USLEEP_FOR_YIELD)
+ #ifdef MPL_HAVE_UNISTD_H
+ #include <unistd.h>
+ #if defined (MPL_NEEDS_USLEEP_DECL)
+ int usleep(useconds_t usec);
+ #endif
+ #endif
+ #define MPL_sched_yield() usleep(0)
+#elif defined (MPL_USE_SLEEP_FOR_YIELD)
+ #ifdef MPL_HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+ #define MPL_sched_yield() sleep(0)
+#elif defined (MPL_USE_NOTHING_FOR_YIELD)
+ #define MPL_sched_yield() do {} while (0)
+#else
+ #error "No mechanism available to yield"
+#endif
+
+#endif /* MPL_PROCESS_WRAPPERS_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mplenv.h b/src/pm/hydra/mpl/include/mplenv.h
deleted file mode 100644
index 8021fc1..0000000
--- a/src/pm/hydra/mpl/include/mplenv.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLENV_H_INCLUDED
-#define MPLENV_H_INCLUDED
-
-#include "mplconfig.h"
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-/* *INDENT-OFF* */
-
-#if defined(MPL_HAVE_PUTENV) && defined(MPL_NEEDS_PUTENV_DECL)
-extern int putenv(char *string);
-#endif
-
-/* Prototypes for the functions to provide uniform access to the environment */
-int MPL_env2int(const char *envName, int *val);
-int MPL_env2range(const char *envName, int *lowPtr, int *highPtr);
-int MPL_env2bool(const char *envName, int *val);
-int MPL_env2str(const char *envName, const char **val);
-int MPL_env2double(const char *envName, double *val);
-int MPL_putenv(char *name_val);
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-}
-#endif
-/* *INDENT-OFF* */
-
-#endif /* MPLENV_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpliov.h b/src/pm/hydra/mpl/include/mpliov.h
deleted file mode 100644
index da3f250..0000000
--- a/src/pm/hydra/mpl/include/mpliov.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLIOV_H_INCLUDED
-#define MPLIOV_H_INCLUDED
-
-#include <stdio.h>
-
-/* IOVs */
-/* The basic channel interface uses IOVs */
-#ifdef HAVE_WINDOWS_H
- #define MPL_IOV_BUF_CAST char *
-#else
- #define MPL_IOV_BUF_CAST void *
-#endif
-#ifdef HAVE_WINDOWS_H
-#include <winsock2.h>
-#define MPL_IOV WSABUF
-#define MPL_IOV_LEN len
-#define MPL_IOV_BUF buf
-#else
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
-#endif
-#ifdef HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-#define MPL_IOV struct iovec
-#define MPL_IOV_LEN iov_len
-#define MPL_IOV_BUF iov_base
-#endif
-/* FIXME: How is IOV_LIMIT chosen? */
-#define MPL_IOV_LIMIT 16
-
-#endif /* MPLIOV_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mplmsg.h b/src/pm/hydra/mpl/include/mplmsg.h
deleted file mode 100644
index 650b6e8..0000000
--- a/src/pm/hydra/mpl/include/mplmsg.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2005 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLMSG_H_INCLUDED
-#define MPLMSG_H_INCLUDED
-
-#include "mpl.h"
-
-/* These macros can be used to prevent inlining for utility functions
- * where it might make debugging easier. */
-#if defined(HAVE_ERROR_CHECKING)
-#define MPL_DBG_ATTRIBUTE_NOINLINE ATTRIBUTE((__noinline__))
-#define MPL_DBG_INLINE_KEYWORD
-#else
-#define MPL_DBG_ATTRIBUTE_NOINLINE
-#define MPL_DBG_INLINE_KEYWORD inline
-#endif
-
-/* These routines are used to ensure that messages are sent to the
- * appropriate output and (eventually) are properly
- * internationalized */
-int MPL_usage_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
-int MPL_msg_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
-int MPL_internal_error_printf(mpl_const char *str, ...) ATTRIBUTE((format(printf, 1, 2)));
-int MPL_internal_sys_error_printf(mpl_const char *, int, mpl_const char *str,
- ...) ATTRIBUTE((format(printf, 3, 4)));
-void MPL_exit(int);
-
-#endif /* MPLMSG_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mplsock.h b/src/pm/hydra/mpl/include/mplsock.h
deleted file mode 100644
index fc4155f..0000000
--- a/src/pm/hydra/mpl/include/mplsock.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLSOCK_H_INCLUDED
-#define MPLSOCK_H_INCLUDED
-
-#include "mplconfig.h"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <errno.h>
-#include <netinet/tcp.h>
-#include <netdb.h>
-#include <limits.h>
-
-#ifdef MPL_HAVE_SYS_TYPES_H
-#include <sys/types.h> /* macs need sys/types.h before uio.h can be included */
-#endif
-#ifdef MPL_HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-
-#if !defined(MPL_HAVE_SYS_UIO_H)
-struct iovec;
-#endif
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-/* *INDENT-OFF* */
-
-ssize_t MPL_large_writev(int fd, const struct iovec *iov, int iovcnt);
-ssize_t MPL_large_readv(int fd, const struct iovec *iov, int iovcnt);
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-}
-#endif
-/* *INDENT-OFF* */
-
-#endif /* MPLSOCK_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mplstr.h b/src/pm/hydra/mpl/include/mplstr.h
deleted file mode 100644
index 26cecb6..0000000
--- a/src/pm/hydra/mpl/include/mplstr.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLSTR_H_INCLUDED
-#define MPLSTR_H_INCLUDED
-
-#include "mplconfig.h"
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-/* *INDENT-OFF* */
-
-#if defined MPL_NEEDS_SNPRINTF_DECL
-extern int snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
-#endif
-
-#if defined MPL_HAVE_SNPRINTF
-#define MPL_snprintf snprintf
-#else
-int MPL_snprintf(char *, size_t, const char *, ...) ATTRIBUTE((format(printf,3,4)));
-#endif /* MPL_HAVE_SNPRINTF */
-
-#if defined MPL_NEEDS_STRDUP_DECL && !defined strdup
-extern char *strdup(const char *);
-#endif /* MPL_NEEDS_STRDUP_DECL */
-
-#if defined MPL_HAVE_STRDUP
-#define MPL_strdup strdup
-#else
-char *MPL_strdup(const char *str);
-#endif /* MPL_HAVE_STRDUP */
-
-int MPL_strncpy(char *dest, const char *src, size_t n);
-char *MPL_strsep(char **stringp, const char *delim);
-
-#if defined MPL_NEEDS_STRNCMP_DECL
-extern int strncmp(const char *s1, const char *s2, size_t n);
-#endif
-
-#if defined MPL_HAVE_STRNCMP
-#define MPL_strncmp strncmp
-#else
-#error "strncmp is required"
-#endif /* MPL_HAVE_STRNCMP */
-
-#if defined MPL_NEEDS_STRERROR_DECL
-extern char *strerror(int errnum);
-#endif
-#if defined MPL_HAVE_STRERROR
-#define MPL_strerror strerror
-#else
-char *MPL_strerror(int errnum);
-#endif /* MPL_HAVE_STRERROR */
-
-/* *INDENT-ON* */
-#if defined(__cplusplus)
-}
-#endif
-/* *INDENT-OFF* */
-
-#endif /* MPLSTR_H_INCLUDED */
diff --git a/src/pm/hydra/mpl/include/mpltrmem.h b/src/pm/hydra/mpl/include/mpltrmem.h
deleted file mode 100644
index 4253bac..0000000
--- a/src/pm/hydra/mpl/include/mpltrmem.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPLTRMEM_H_INCLUDED
-#define MPLTRMEM_H_INCLUDED
-
-/* FIXME: Consider an option of specifying __attribute__((malloc)) for
- gcc - this lets gcc-style compilers know that the returned pointer
- does not alias any pointer prior to the call.
- */
-void MPL_trinit(int);
-void *MPL_trmalloc(size_t, int, const char[]);
-void MPL_trfree(void *, int, const char[]);
-int MPL_trvalid(const char[]);
-int MPL_trvalid2(const char[],int,const char[]);
-void MPL_trspace(size_t *, size_t *);
-void MPL_trid(int);
-void MPL_trlevel(int);
-void MPL_trDebugLevel(int);
-void *MPL_trcalloc(size_t, size_t, int, const char[]);
-void *MPL_trrealloc(void *, size_t, int, const char[]);
-void *MPL_trstrdup(const char *, int, const char[]);
-void MPL_TrSetMaxMem(size_t);
-
-/* Make sure that FILE is defined */
-#include <stdio.h>
-void MPL_trdump(FILE *, int);
-void MPL_trSummary(FILE *, int);
-void MPL_trdumpGrouped(FILE *, int);
-
-#endif /* !defined(MPLTRMEM_H_INCLUDED) */
diff --git a/src/pm/hydra/mpl/localdefs.in b/src/pm/hydra/mpl/localdefs.in
index da49463..cdc1ff2 100644
--- a/src/pm/hydra/mpl/localdefs.in
+++ b/src/pm/hydra/mpl/localdefs.in
@@ -4,4 +4,4 @@
# back upstream.
CPPFLAGS="@CPPFLAGS@"
-
+WRAPPER_LIBS="$WRAPPER_LIBS @LIBS@"
diff --git a/src/pm/hydra/mpl/src/Makefile.mk b/src/pm/hydra/mpl/src/Makefile.mk
new file mode 100644
index 0000000..acd613e
--- /dev/null
+++ b/src/pm/hydra/mpl/src/Makefile.mk
@@ -0,0 +1,16 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+include src/bt/Makefile.mk
+include src/dbg/Makefile.mk
+include src/env/Makefile.mk
+include src/mem/Makefile.mk
+include src/msg/Makefile.mk
+include src/sock/Makefile.mk
+include src/str/Makefile.mk
+include src/thread/Makefile.mk
+include src/timer/Makefile.mk
+include src/shm/Makefile.mk
diff --git a/src/pm/hydra/mpl/src/bt/Makefile.mk b/src/pm/hydra/mpl/src/bt/Makefile.mk
new file mode 100644
index 0000000..5d11de7
--- /dev/null
+++ b/src/pm/hydra/mpl/src/bt/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/bt/mpl_bt.c
diff --git a/src/pm/hydra/mpl/src/bt/mpl_bt.c b/src/pm/hydra/mpl/src/bt/mpl_bt.c
new file mode 100644
index 0000000..ef10a59
--- /dev/null
+++ b/src/pm/hydra/mpl/src/bt/mpl_bt.c
@@ -0,0 +1,134 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+#ifdef MPL_HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif
+
+#ifdef MPL_HAVE_BACKTRACE_H
+#include <backtrace.h>
+#endif
+
+#ifdef MPL_HAVE_LIBUNWIND_H
+#define UNW_LOCAL_ONLY
+#include <libunwind.h>
+#endif
+
+
+/* freebsd and linux have slightly different backtrace routines.
+ * solaris uses something totally different: a 'walkcontext' routine
+ * which takes a function pointer. solaris 'walkcontext' is simliar to
+ * libbacktrace, shipped with gcc-4.8 and newer. both share features
+ * with libunwind.
+ *
+ * For the case of "display the call stack to this point" the various
+ * approaches share a common pattern:
+ * - initialize the library
+ * - get the stack
+ * - decode the stack
+ *
+ * but for now we'll simply dispatch to one of several appraoches
+ * depending on what configure found
+ *
+ */
+
+#ifdef MPL_HAVE_LIBBACKTRACE
+
+static inline void backtrace_libback(FILE *output)
+{
+ struct backtrace_state *btstate;
+ btstate = backtrace_create_state(NULL, 1, NULL, NULL);
+ backtrace_print(btstate, 0, output);
+}
+/* we need not only the symbols but the header file too (for the cursor and
+ * context), so tighten up when we take the libunwind path. Thanks
+ * Siegmar.Gross at informatik.hs-fulda.de for the bug report about systems with
+ * libunwind libraries but no libunwind development headers */
+#elif defined MPL_HAVE_LIBUNWIND && defined(MPL_HAVE_LIBUNWIND_H)
+static inline void backtrace_libunwind(FILE *output)
+{
+ unw_cursor_t cursor;
+ unw_context_t uc;
+ unw_word_t ip, offset;
+ int ret, chars = 0;
+ char buffer[MPL_BACKTRACE_BUFFER_LEN];
+ char backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN];
+
+ unw_getcontext(&uc);
+ unw_init_local(&cursor, &uc);
+ while (unw_step(&cursor) > 0) {
+ unw_get_reg(&cursor, UNW_REG_IP, &ip);
+ unw_get_proc_name(&cursor, buffer,
+ MPL_BACKTRACE_BUFFER_LEN, &offset);
+ ret = MPL_snprintf(backtrace_buffer + chars,
+ MPL_BACKTRACE_BUFFER_LEN - chars,
+ "0x%lx %s() + 0x%lx\n",
+ (long)ip, buffer, (long)offset);
+ if (ret + chars >= MPL_BACKTRACE_BUFFER_LEN) {
+ /* the extra new line will be more readable than a merely
+ * truncated string */
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 2] = '\n';
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 1] = '\0';
+ break;
+ }
+ chars += ret;
+ }
+ fprintf(output, "%s", backtrace_buffer);
+}
+
+#elif defined MPL_HAVE_BACKTRACE_SYMBOLS
+static inline void backtrace_libc(FILE *output)
+{
+#ifndef MPL_MAX_TRACE_DEPTH
+#define MPL_MAX_TRACE_DEPTH 32
+#endif
+ void *trace[MPL_MAX_TRACE_DEPTH];
+ char **stack_strs;
+ char backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN];
+ int frames, i, ret, chars = 0;
+
+ frames = backtrace(trace, MPL_MAX_TRACE_DEPTH);
+ stack_strs = backtrace_symbols(trace, frames);
+
+ for (i = 0; i < frames; i++) {
+ ret = MPL_snprintf(backtrace_buffer + chars,
+ MPL_BACKTRACE_BUFFER_LEN - chars,
+ "%s\n", stack_strs[i]);
+ if (ret + chars >= MPL_BACKTRACE_BUFFER_LEN) {
+ /* the extra new line will be more readable than a merely
+ * truncated string */
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 2] = '\n';
+ backtrace_buffer[MPL_BACKTRACE_BUFFER_LEN - 1] = '\0';
+ break;
+ }
+ chars += ret;
+ }
+ fprintf(output, "%s", backtrace_buffer);
+ free(stack_strs);
+}
+#else
+static inline void backtrace_unsupported(FILE *output)
+{
+ fprintf(output, "No backtrace info available\n");
+}
+#endif
+
+/* Pick one of the many ways one could dump out a call stack*/
+void MPL_backtrace_show(FILE *output)
+{
+#ifdef MPL_HAVE_LIBBACKTRACE
+ backtrace_libback(output);
+#elif defined MPL_HAVE_LIBUNWIND && defined(MPL_HAVE_LIBUNWIND_H)
+ /* libunwind is not able to get line numbers without forking off to
+ * addr2line (?)*/
+ backtrace_libunwind(output);
+#elif defined MPL_HAVE_BACKTRACE_SYMBOLS
+ backtrace_libc(output);
+#else
+ backtrace_unsupported(output);
+#endif
+}
diff --git a/src/pm/hydra/mpl/src/dbg/Makefile.mk b/src/pm/hydra/mpl/src/dbg/Makefile.mk
new file mode 100644
index 0000000..427ac75
--- /dev/null
+++ b/src/pm/hydra/mpl/src/dbg/Makefile.mk
@@ -0,0 +1,8 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2011 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += src/dbg/mpl_dbg.c
diff --git a/src/pm/hydra/mpl/src/dbg/mpl_dbg.c b/src/pm/hydra/mpl/src/dbg/mpl_dbg.c
new file mode 100644
index 0000000..b5cf17d
--- /dev/null
+++ b/src/pm/hydra/mpl/src/dbg/mpl_dbg.c
@@ -0,0 +1,964 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/*
+ * This file provides a set of routines that can be used to record debug
+ * messages in a ring so that the may be dumped at a later time. For example,
+ * this can be used to record debug messages without printing them.
+ */
+
+#include "mpl.h"
+
+#ifdef MPL_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef MPL_HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#if defined(MPL_HAVE_MKSTEMP) && defined(MPL_NEEDS_MKSTEMP_DECL)
+extern int mkstemp(char *t);
+#endif
+
+#if defined(MPL_HAVE_FDOPEN) && defined(MPL_NEEDS_FDOPEN_DECL)
+extern FILE *fdopen(int fd, const char *mode);
+#endif
+
+#ifdef MPL_USE_DBG_LOGGING
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+int MPL_dbg_active_classes = 0;
+int MPL_dbg_max_level = MPL_DBG_TYPICAL;
+
+static enum {
+ DBG_UNINIT,
+ DBG_PREINIT,
+ DBG_INITIALIZED,
+ DBG_ERROR
+} dbg_initialized = DBG_UNINIT;
+
+static char file_pattern_buf[MAXPATHLEN] = "";
+static const char *file_pattern = "-stdout-"; /* "log%d.log"; */
+static const char *default_file_pattern = "dbg at W%w-@%d at T-%t at .log";
+static char temp_filename[MAXPATHLEN] = "";
+static int world_num = 0;
+static int world_rank = -1;
+static int which_rank = -1; /* all ranks */
+static int reset_time_origin = 1;
+static double time_origin = 0.0;
+
+/* This variable is initialized to the appropriate threading level in
+ * the DBG_Init call. Before the debug init, the application cannot
+ * be threaded, anyway. So it is safe to statically set it to "0"
+ * here. */
+static int is_threaded = 0;
+
+static int dbg_usage(const char *, const char *);
+static int dbg_openfile(FILE ** dbg_fp);
+static int dbg_set_class(const char *);
+static int dbg_set_level(const char *, const char *(names[]));
+static int dbg_get_filename(char *filename, int len);
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+static MPL_thread_tls_t dbg_tls_key;
+#endif
+
+static FILE *dbg_static_fp = 0;
+
+/*
+ * This function finds the basename in a path (ala "man 1 basename").
+ * *basename will point to an element in path.
+ * More formally: This function sets basename to the character just
+ * after the last '/' in path.
+*/
+static void find_basename(char *path, char **basename) ATTRIBUTE((unused));
+static void find_basename(char *path, char **basename)
+{
+ char *c;
+
+ c = *basename = path;
+ while (*c) {
+ if (*c == '/')
+ *basename = c + 1;
+ ++c;
+ }
+}
+
+static int dbg_init_tls(void)
+{
+ int err = 0;
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ MPL_thread_tls_create(NULL, &dbg_tls_key, &err);
+#endif
+
+ return err;
+}
+
+static FILE *get_fp(void)
+{
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ int err;
+ /* if we're not initialized, use the static fp, since there should
+ * only be one thread in here until then */
+ if (is_threaded) {
+ if (dbg_initialized == DBG_INITIALIZED) {
+ FILE *fp;
+ MPL_thread_tls_get(&dbg_tls_key, (void **) &fp, &err);
+ return fp;
+ }
+ }
+#endif
+
+ return dbg_static_fp;
+}
+
+static void set_fp(FILE * fp)
+{
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ int err;
+ /* if we're not initialized, use the static fp, since there should
+ * only be one thread in here until then */
+ if (is_threaded) {
+ if (dbg_initialized == DBG_INITIALIZED) {
+ MPL_thread_tls_set(&dbg_tls_key, (void *) fp, &err);
+ return;
+ }
+ }
+#endif
+
+ dbg_static_fp = fp;
+}
+
+int MPL_dbg_outevent(const char *file, int line, int class, int kind, const char *fmat, ...)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ va_list list;
+ char *str, stmp[MPL_DBG_MAXLINE];
+ int i;
+ void *p;
+ MPL_time_t t;
+ double curtime;
+ unsigned long long int threadID = 0;
+ int pid = -1;
+ FILE *dbg_fp = NULL;
+
+ if (dbg_initialized == DBG_UNINIT || dbg_initialized == DBG_ERROR)
+ goto fn_exit;
+
+ dbg_fp = get_fp();
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ {
+ /* the thread ID is not necessarily unique between processes, so a
+ * (pid,tid) pair should be used to uniquely identify output from
+ * particular threads on a system */
+ MPL_thread_id_t tid;
+ MPL_thread_self(&tid);
+ threadID = (unsigned long long int) tid;
+ }
+#endif
+#if defined(MPL_HAVE_GETPID)
+ pid = (int) getpid();
+#endif /* MPL_HAVE_GETPID */
+
+ if (!dbg_fp) {
+ mpl_errno = dbg_openfile(&dbg_fp);
+ if (mpl_errno)
+ goto fn_fail;
+ set_fp(dbg_fp);
+ }
+
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &curtime);
+ curtime = curtime - time_origin;
+
+ /* The kind values are used with the macros to simplify these cases */
+ switch (kind) {
+ case 0:
+ va_start(list, fmat);
+ str = va_arg(list, char *);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, str);
+ va_end(list);
+ break;
+ case 1:
+ va_start(list, fmat);
+ str = va_arg(list, char *);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, str);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ case 2:
+ va_start(list, fmat);
+ i = va_arg(list, int);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, i);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ case 3:
+ va_start(list, fmat);
+ p = va_arg(list, void *);
+ MPL_snprintf(stmp, sizeof(stmp), fmat, p);
+ va_end(list);
+ fprintf(dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
+ world_num, world_rank, threadID, pid, class, curtime, file, line, stmp);
+ break;
+ default:
+ break;
+ }
+ fflush(dbg_fp);
+
+ fn_exit:
+ fn_fail:
+ return 0;
+}
+
+/* These are used to simplify the handling of options.
+ To add a new name, add an dbg_classname element to the array
+ classnames. The "classbits" values are defined by MPL_DBG_CLASS
+ in mpl_dbg.h
+ */
+
+typedef struct dbg_classname {
+ int classbits;
+ const char *ucname, *lcname;
+} dbg_classname;
+
+#define MAX_DBG_CLASSNAMES (sizeof(unsigned int) * 8)
+
+static dbg_classname classnames[MAX_DBG_CLASSNAMES];
+static int num_classnames = 0;
+
+static const char *unregistered_classes[MAX_DBG_CLASSNAMES];
+static int num_unregistered_classes = 0;
+
+/* Because the level values are simpler and are rarely changed, these
+ * use a simple set of parallel arrays */
+static const int level_values[] = {
+ MPL_DBG_TERSE,
+ MPL_DBG_TYPICAL,
+ MPL_DBG_VERBOSE,
+ 100
+};
+static const char *level_name[] = { "TERSE", "TYPICAL", "VERBOSE", 0 };
+static const char *lc_level_name[] = { "terse", "typical", "verbose", 0 };
+
+void MPL_dbg_class_register(MPL_dbg_class class, const char *ucname, const char *lcname)
+{
+ int i, j;
+
+ classnames[num_classnames].classbits = class;
+ classnames[num_classnames].ucname = ucname;
+ classnames[num_classnames].lcname = lcname;
+ num_classnames++;
+
+ if (num_unregistered_classes) {
+ /* there are some unregistered classes. look through to see
+ * if any of them match this class. */
+ size_t len = strlen(lcname);
+
+ for (i = 0; i < num_unregistered_classes; i++) {
+ size_t slen = strlen(unregistered_classes[i]);
+ if (len == slen && (strncmp(unregistered_classes[i], lcname, len) ||
+ strncmp(unregistered_classes[i], ucname, len))) {
+ /* got a match */
+ MPL_dbg_active_classes |= class;
+ for (j = i; j < num_unregistered_classes - 1; j++)
+ unregistered_classes[j] = unregistered_classes[j + 1];
+ num_unregistered_classes--;
+ break;
+ }
+ }
+ }
+}
+
+MPL_dbg_class MPL_dbg_class_alloc(const char *ucname, const char *lcname)
+{
+ static unsigned int class = 1;
+
+ /* create a user handle for this class */
+ MPL_dbg_class_register(class, ucname, lcname);
+
+ class <<= 1;
+
+ return (class >> 1);
+}
+
+/*
+ * Initialize the DBG_MSG system. This is called during the job
+ * initialization to process command-line arguments as well as
+ * checking either the MPICH_DBG or MPL_DBG environment variables.
+ * The initialization
+ * is split into two steps: a preinit and an init. This makes it
+ * possible to enable most of the features before the full
+ * initialization, where a significant amount of the initialization
+ * takes place.
+ */
+
+static int dbg_process_args(int *argc_p, char ***argv_p)
+{
+ int i, rc;
+
+ /* Here's where we do the same thing with the command-line options */
+ if (argc_p) {
+ for (i = 1; i < *argc_p; i++) {
+ if (strncmp((*argv_p)[i], "-mpich-dbg", 10) == 0) {
+ char *s = (*argv_p)[i] + 10;
+ /* Found a command */
+ if (*s == 0) {
+ /* Just -mpich-dbg */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ }
+ else if (*s == '=') {
+ /* look for file */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ s++;
+ if (strncmp(s, "file", 4) == 0) {
+ file_pattern = default_file_pattern;
+ }
+ }
+ else if (strncmp(s, "-level", 6) == 0) {
+ char *p = s + 6;
+ if (*p == '=') {
+ p++;
+ rc = dbg_set_level(p, lc_level_name);
+ if (rc)
+ dbg_usage("-mpich-dbg-level", "terse, typical, verbose");
+ }
+ }
+ else if (strncmp(s, "-class", 6) == 0) {
+ char *p = s + 6;
+ if (*p == '=') {
+ p++;
+ rc = dbg_set_class(p);
+ if (rc)
+ dbg_usage("-mpich-dbg-class", 0);
+ }
+ }
+ else if (strncmp(s, "-filename", 9) == 0) {
+ char *p = s + 9;
+ if (*p == '=') {
+ p++;
+ /* A special case for a filepattern of "-default",
+ * use the predefined default pattern */
+ if (strcmp(p, "-default") == 0) {
+ file_pattern = default_file_pattern;
+ }
+ else {
+ strncpy(file_pattern_buf, p, sizeof(file_pattern_buf));
+ file_pattern = file_pattern_buf;
+ }
+ }
+ }
+ else if (strncmp(s, "-rank", 5) == 0) {
+ char *p = s + 5;
+ if (*p == '=' && p[1] != 0) {
+ char *sOut;
+ p++;
+ which_rank = (int) strtol(p, &sOut, 10);
+ if (p == sOut) {
+ dbg_usage("-mpich-dbg-rank", 0);
+ which_rank = -1;
+ }
+ }
+ }
+ else {
+ dbg_usage((*argv_p)[i], 0);
+ }
+
+ /* Eventually, should null it out and reduce argc value */
+ }
+ }
+ }
+ return MPL_DBG_SUCCESS;
+}
+
+/* could two different environment variables control the same thing? sure they
+ * could! consider MPICH: we moved all our logging code into MPL, so it should
+ * have an MPL_ prefix, but all the documentation assumes an "MPICH_" prefix.
+ * So we'll look for both. */
+static char *getenv_either(const char *env_a, const char *env_b)
+{
+ char *s;
+ if ( (s = getenv(env_a)) == NULL)
+ s = getenv(env_b);
+
+ return s;
+}
+
+
+static int dbg_process_env(void)
+{
+ char *s;
+ int rc;
+
+ s = getenv_either("MPICH_DBG", "MPL_DBG");
+ if (s) {
+ /* Set the defaults */
+ MPL_dbg_max_level = MPL_DBG_TYPICAL;
+ MPL_dbg_active_classes = MPL_DBG_ALL;
+ if (strncmp(s, "FILE", 4) == 0) {
+ file_pattern = default_file_pattern;
+ }
+ }
+ s = getenv_either("MPICH_DBG_LEVEL", "MPL_DBG_LEVEL");
+ if (s) {
+ rc = dbg_set_level(s, level_name);
+ if (rc)
+ dbg_usage("MPL_DBG_LEVEL", "TERSE, TYPICAL, VERBOSE");
+ }
+
+ s = getenv_either("MPICH_DBG_CLASS", "MPL_DBG_CLASS");
+ if (s) {
+ rc = dbg_set_class(s);
+ if (rc)
+ dbg_usage("MPL_DBG_CLASS", 0);
+ }
+
+ s = getenv_either("MPICH_DBG_FILENAME", "MPL_DBG_FILENAME");
+ if (s) {
+ strncpy(file_pattern_buf, s, sizeof(file_pattern_buf));
+ file_pattern = file_pattern_buf;
+ }
+
+ s = getenv_either("MPICH_DBG_RANK", "MPL_DBG_RANK");
+ if (s) {
+ char *sOut;
+ which_rank = (int) strtol(s, &sOut, 10);
+ if (s == sOut) {
+ dbg_usage("MPL_DBG_RANK", 0);
+ which_rank = -1;
+ }
+ }
+ return MPL_DBG_SUCCESS;
+}
+
+MPL_dbg_class MPL_DBG_ROUTINE_ENTER;
+MPL_dbg_class MPL_DBG_ROUTINE_EXIT;
+MPL_dbg_class MPL_DBG_ROUTINE;
+MPL_dbg_class MPL_DBG_ALL = ~(0); /* pre-initialize the ALL class */
+
+/*
+ * Attempt to initialize the logging system. This works only if the
+ * full initialization is not required for updating the environment
+ * and/or command-line arguments.
+ */
+int MPL_dbg_pre_init(int *argc_p, char ***argv_p, int wtimeNotReady)
+{
+ MPL_time_t t;
+
+ /* if the DBG_MSG system was already initialized, say by the
+ * device, then return immediately */
+ if (dbg_initialized != DBG_UNINIT)
+ return MPL_DBG_SUCCESS;
+
+ if (dbg_init_tls())
+ return MPL_DBG_ERR_OTHER;
+
+ /* Check to see if any debugging was selected. The order of these
+ * tests is important, as they allow general defaults to be set,
+ * followed by more specific modifications */
+ /* First, the environment variables */
+ dbg_process_env();
+
+ dbg_process_args(argc_p, argv_p);
+
+ if (wtimeNotReady == 0) {
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &time_origin);
+ reset_time_origin = 0;
+ }
+
+ /* Allocate the predefined classes */
+ MPL_DBG_ROUTINE_ENTER = MPL_dbg_class_alloc("ROUTINE_ENTER", "routine_enter");
+ MPL_DBG_ROUTINE_EXIT = MPL_dbg_class_alloc("ROUTINE_EXIT", "routine_exit");
+
+ MPL_DBG_CLASS_CLR(MPL_DBG_ROUTINE);
+ MPL_DBG_CLASS_APPEND(MPL_DBG_ROUTINE, MPL_DBG_ROUTINE_ENTER);
+ MPL_DBG_CLASS_APPEND(MPL_DBG_ROUTINE, MPL_DBG_ROUTINE_EXIT);
+ MPL_dbg_class_register(MPL_DBG_ROUTINE, "ROUTINE", "routine");
+
+ MPL_dbg_class_register(MPL_DBG_ALL, "ALL", "all");
+
+ dbg_initialized = DBG_PREINIT;
+
+ return MPL_DBG_SUCCESS;
+}
+
+int MPL_dbg_init(int *argc_p, char ***argv_p, int has_args, int has_env,
+ int wnum, int wrank, int threaded)
+{
+ int ret;
+ FILE *dbg_fp = NULL;
+
+ /* if the DBG_MSG system was already initialized, say by the
+ * device, then return immediately. Note that the device is then
+ * responsible for handling the file mode (e.g., reopen when the
+ * rank become available) */
+ if (dbg_initialized == DBG_INITIALIZED || dbg_initialized == DBG_ERROR)
+ return MPL_DBG_SUCCESS;
+
+ if (dbg_initialized != DBG_PREINIT) {
+ if (dbg_init_tls())
+ return MPL_DBG_ERR_OTHER;
+ }
+
+ dbg_fp = get_fp();
+
+ /* We may need to wait until the device is set up to initialize
+ * the timer */
+ if (reset_time_origin) {
+ MPL_time_t t;
+ MPL_wtime(&t);
+ MPL_wtime_todouble(&t, &time_origin);
+ reset_time_origin = 0;
+ }
+ /* Check to see if any debugging was selected. The order of these
+ * tests is important, as they allow general defaults to be set,
+ * followed by more specific modifications. */
+ /* Both of these may have already been set in the PreInit call; if
+ * the command line and/or environment variables are set before
+ * the full initialization, then don't call the routines to check
+ * those values (as they were already handled in DBG_PreInit) */
+ /* First, the environment variables */
+ if (!has_env)
+ dbg_process_env();
+ /* Now the command-line arguments */
+ if (!has_args)
+ dbg_process_args(argc_p, argv_p);
+
+ world_num = wnum;
+ world_rank = wrank;
+ is_threaded = threaded;
+
+ if (which_rank >= 0 && which_rank != wrank) {
+ /* Turn off logging on this process */
+ MPL_dbg_active_classes = 0;
+ }
+
+ /* If the file has already been opened with a temp filename,
+ * rename it. */
+ if (dbg_fp && dbg_fp != stdout && dbg_fp != stderr) {
+ char filename[MAXPATHLEN] = "";
+
+ dbg_get_filename(filename, MAXPATHLEN);
+ ret = rename(temp_filename, filename);
+ if (ret) {
+ /* Retry renaming file after closing it */
+ fclose(dbg_fp);
+ ret = rename(temp_filename, filename);
+ if (ret) {
+ MPL_error_printf("Could not rename temp log file to %s\n", filename);
+ goto fn_fail;
+ }
+ else {
+ dbg_fp = fopen(filename, "a+");
+ set_fp(dbg_fp);
+ if (dbg_fp == NULL) {
+ MPL_error_printf("Error re-opening log file, %s\n", filename);
+ goto fn_fail;
+ }
+ }
+ }
+ }
+
+ dbg_initialized = DBG_INITIALIZED;
+
+ fn_exit:
+ return MPL_DBG_SUCCESS;
+ fn_fail:
+ dbg_initialized = DBG_ERROR;
+ goto fn_exit;
+}
+
+/* Print the usage statement to stderr */
+static int dbg_usage(const char *cmd, const char *vals)
+{
+ if (vals) {
+ fprintf(stderr, "Incorrect value for %s, should be one of %s\n", cmd, vals);
+ }
+ else {
+ fprintf(stderr, "Incorrect value for %s\n", cmd);
+ }
+ fprintf(stderr, "Command line for debug switches\n\
+ -mpich-dbg-class=name[,name,...]\n\
+ -mpich-dbg-level=name (one of terse, typical, verbose)\n\
+ -mpich-dbg-filename=pattern (includes %%d for world rank, %%t for thread id\n\
+ -mpich-dbg-rank=val (only this rank in COMM_WORLD will be logged)\n\
+ -mpich-dbg (shorthand for -mpich-dbg-class=all -mpich-dbg-level=typical)\n\
+ -mpich-dbg=file (shorthand for -mpich-dbg -mpich-dbg-filename=%s)\n\
+Environment variables\n\
+ MPICH_DBG_CLASS=NAME[,NAME...]\n\
+ MPICH_DBG_LEVEL=NAME\n\
+ MPICH_DBG_FILENAME=pattern\n\
+ MPICH_DBG_RANK=val\n\
+ MPICH_DBG=YES or FILE\n", default_file_pattern);
+
+ fflush(stderr);
+
+ return 0;
+}
+
+#if defined (MPL_HAVE_MKSTEMP) && defined (MPL_HAVE_FDOPEN)
+
+/* creates a temporary file in the same directory the user specified
+ * for the log file */
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ const char temp_pattern[] = "templogXXXXXX";
+ int fd;
+ char *basename;
+ int ret;
+
+ ret = MPL_strncpy(temp_filename, file_pattern, MAXPATHLEN);
+ if (ret)
+ goto fn_fail;
+
+ find_basename(temp_filename, &basename);
+
+ /* make sure there's enough room in temp_filename to store temp_pattern */
+ if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern))
+ goto fn_fail;
+
+ MPL_strncpy(basename, temp_pattern, sizeof(temp_pattern));
+
+ fd = mkstemp(temp_filename);
+ if (fd == -1)
+ goto fn_fail;
+
+ *dbg_fp = fdopen(fd, "a+");
+ if (*dbg_fp == NULL)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#elif defined(MPL_HAVE__MKTEMP_S) && defined(MPL_HAVE_FOPEN_S)
+
+/* creates a temporary file in the same directory the user specified
+ * for the log file */
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ const char temp_pattern[] = "templogXXXXXX";
+ int fd;
+ char *basename;
+ int ret;
+ errno_t ret_errno;
+
+ ret = MPL_strncpy(temp_filename, file_pattern, MAXPATHLEN);
+ if (ret)
+ goto fn_fail;
+
+ find_basename(temp_filename, &basename);
+
+ /* make sure there's enough room in temp_filename to store temp_pattern */
+ if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern))
+ goto fn_fail;
+
+ MPL_strncpy(basename, temp_pattern, sizeof(temp_pattern));
+
+ ret_errno = _mktemp_s(temp_filename, MAXPATHLEN);
+ if (ret_errno != 0)
+ goto fn_fail;
+
+ ret_errno = fopen_s(dbg_fp, temp_filename, "a+");
+ if (ret_errno != 0)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#else
+
+/* creates a temporary file in some directory, which may not be where
+ * the user wants the log file. When the file is renamed later, it
+ * may require a copy.
+ *
+ * Note that this is not safe: By the time we call fopen(), another
+ * file with the same name may exist. That file would get clobbered.
+*/
+#undef FUNCNAME
+#define FUNCNAME dbg_open_tmpfile
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static int dbg_open_tmpfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ char *cret;
+
+ cret = tmpnam(temp_filename);
+ if (cret == NULL)
+ goto fn_fail;
+
+ *dbg_fp = fopen(temp_filename, "w");
+ if (*dbg_fp == NULL)
+ goto fn_fail;
+
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ MPL_error_printf("Could not open log file %s\n", temp_filename);
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+#endif
+
+/* This routine can make no MPI calls, since it may be logging those
+ * calls. */
+static int dbg_get_filename(char *filename, int len)
+{
+ int withinMworld = 0, /* True if within an @W...@ */
+ withinMthread = 0; /* True if within an @T...@ */
+ /* FIXME: Need to know how many process groups are known */
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ unsigned long long int threadID = 0;
+ int nThread = 2;
+#else
+ int nThread = 1;
+#endif
+ static char world_numAsChar[10] = "0";
+ char *pDest;
+ const char *p;
+
+ if (world_num == 1) {
+ world_numAsChar[0] = '1';
+ world_numAsChar[1] = '\0';
+ }
+
+ p = file_pattern;
+ pDest = filename;
+ *filename = 0;
+ while (*p && (pDest - filename) < len - 1) {
+ /* There are two special cases that allow text to
+ * be optionally included. Those patterns are
+ * @T...@ (only if multi-threaded) and
+ * @W...@ (only if more than one process group)
+ * UNIMPLEMENTED/UNTESTED */
+ if (*p == '@') {
+ /* Escaped @? */
+ if (p[1] == '@') {
+ *pDest++ = *++p;
+ continue;
+ }
+ /* If within an @...@, terminate it */
+ if (withinMworld) {
+ withinMworld = 0;
+ p++;
+ }
+ else if (withinMthread) {
+ withinMthread = 0;
+ p++;
+ }
+ else {
+ /* Look for command */
+ p++;
+ if (*p == 'W') {
+ p++;
+ withinMworld = 1;
+ }
+ else if (*p == 'T') {
+ p++;
+ withinMthread = 1;
+ }
+ else {
+ /* Unrecognized char */
+ *pDest++ = *p++;
+ }
+ }
+ }
+ else if ((withinMworld && world_num == 0) || (withinMthread && nThread == 1)) {
+ /* Simply skip this character since we're not showing
+ * this string */
+ p++;
+ }
+ else if (*p == '%') {
+ p++;
+ if (*p == 'd') {
+ char rankAsChar[20];
+ MPL_snprintf(rankAsChar, sizeof(rankAsChar), "%d", world_rank);
+ *pDest = 0;
+ MPL_strnapp(filename, rankAsChar, len);
+ pDest += strlen(rankAsChar);
+ }
+ else if (*p == 't') {
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE)
+ char threadIDAsChar[30];
+ MPL_thread_id_t tid;
+ MPL_thread_self(&tid);
+ threadID = (unsigned long long int) tid;
+
+ MPL_snprintf(threadIDAsChar, sizeof(threadIDAsChar), "%llx", threadID);
+ *pDest = 0;
+ MPL_strnapp(filename, threadIDAsChar, len);
+ pDest += strlen(threadIDAsChar);
+#else
+ *pDest++ = '0';
+#endif /* MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE */
+ }
+ else if (*p == 'w') {
+ /* *pDest++ = '0'; */
+ *pDest = 0;
+ MPL_strnapp(filename, world_numAsChar, len);
+ pDest += strlen(world_numAsChar);
+ }
+ else if (*p == 'p') {
+ /* Appends the pid of the proceess to the file name. */
+ char pidAsChar[20];
+#if defined(MPL_HAVE_GETPID)
+ pid_t pid = getpid();
+#else
+ int pid = -1;
+#endif /* MPL_HAVE_GETPID */
+ MPL_snprintf(pidAsChar, sizeof(pidAsChar), "%d", (int) pid);
+ *pDest = 0;
+ MPL_strnapp(filename, pidAsChar, len);
+ pDest += strlen(pidAsChar);
+ }
+ else {
+ *pDest++ = '%';
+ *pDest++ = *p;
+ }
+ p++;
+ }
+ else {
+ *pDest++ = *p++;
+ }
+ }
+ *pDest = 0;
+
+ return 0;
+}
+
+/* This routine can make no MPI calls, since it may be logging those
+ * calls. */
+static int dbg_openfile(FILE ** dbg_fp)
+{
+ int mpl_errno = MPL_DBG_SUCCESS;
+ if (!file_pattern || *file_pattern == 0 || strcmp(file_pattern, "-stdout-") == 0) {
+ *dbg_fp = stdout;
+ }
+ else if (strcmp(file_pattern, "-stderr-") == 0) {
+ *dbg_fp = stderr;
+ }
+ else {
+ char filename[MAXPATHLEN];
+
+ /* if we're not at DBG_INITIALIZED, we don't know our
+ * rank yet, so we create a temp file, to be renamed later */
+ if (dbg_initialized != DBG_INITIALIZED) {
+ mpl_errno = dbg_open_tmpfile(dbg_fp);
+ if (mpl_errno)
+ goto fn_fail;
+ }
+ else {
+ mpl_errno = dbg_get_filename(filename, MAXPATHLEN);
+ if (mpl_errno)
+ goto fn_fail;
+
+ *dbg_fp = fopen(filename, "w");
+ if (!*dbg_fp) {
+ MPL_error_printf("Could not open log file %s\n", filename);
+ if (mpl_errno)
+ goto fn_fail;
+ }
+ }
+ }
+ fn_exit:
+ return mpl_errno;
+ fn_fail:
+ dbg_initialized = DBG_ERROR;
+ mpl_errno = MPL_DBG_ERR_INTERN;
+ goto fn_exit;
+}
+
+/* Support routines for processing mpich-dbg values */
+/* Update the GLOBAL variable MPL_dbg_active_classes with the bits
+ * corresponding to this name */
+static int dbg_set_class(const char *s)
+{
+ int i, found_match;
+ size_t slen = 0;
+ char *str;
+
+ if (s && *s)
+ slen = strlen(s);
+
+ str = strtok((char *) s, ",");
+ while (str) {
+ found_match = 0;
+ for (i = 0; i < num_classnames; i++) {
+ size_t len = strlen(classnames[i].lcname);
+
+ if (slen == len && (strncmp(str, classnames[i].lcname, len) ||
+ strncmp(str, classnames[i].ucname, len))) {
+ /* we have a match */
+ MPL_dbg_active_classes |= classnames[i].classbits;
+ found_match = 1;
+ break;
+ }
+ }
+
+ if (!found_match) {
+ /* no match was found. the component might not have
+ * registered yet. store the user string for later
+ * access. */
+ unregistered_classes[num_unregistered_classes] = str;
+ num_unregistered_classes++;
+ }
+
+ str = strtok(NULL, ",");
+ }
+
+ return 0;
+}
+
+/* Set the global MPL_dbg_max_level if there is a match with the known
+ * level names */
+static int dbg_set_level(const char *s, const char *(names[]))
+{
+ int i;
+
+ for (i = 0; names[i]; i++) {
+ if (strcmp(names[i], s) == 0) {
+ MPL_dbg_max_level = level_values[i];
+ return 0;
+ }
+ }
+ return 1;
+}
+#endif /* MPL_USE_DBG_LOGGING */
diff --git a/src/pm/hydra/mpl/src/env/Makefile.mk b/src/pm/hydra/mpl/src/env/Makefile.mk
new file mode 100644
index 0000000..3a11aaa
--- /dev/null
+++ b/src/pm/hydra/mpl/src/env/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/env/mpl_env.c
diff --git a/src/mpl/src/mplenv.c b/src/pm/hydra/mpl/src/env/mpl_env.c
similarity index 100%
rename from src/mpl/src/mplenv.c
rename to src/pm/hydra/mpl/src/env/mpl_env.c
diff --git a/src/pm/hydra/mpl/src/mem/Makefile.mk b/src/pm/hydra/mpl/src/mem/Makefile.mk
new file mode 100644
index 0000000..912d096
--- /dev/null
+++ b/src/pm/hydra/mpl/src/mem/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/mem/mpl_trmem.c
diff --git a/src/pm/hydra/mpl/src/mem/mpl_trmem.c b/src/pm/hydra/mpl/src/mem/mpl_trmem.c
new file mode 100644
index 0000000..16c37bf
--- /dev/null
+++ b/src/pm/hydra/mpl/src/mem/mpl_trmem.c
@@ -0,0 +1,825 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* Always enable valgrind macros (if possible) in this file. If these functions
+ * are used, the caller is concerned about correctness, not performance. */
+#define MPL_VG_ENABLED 1
+
+/* style: allow:calloc:1 sig:0 */
+/* style: allow:free:2 sig:0 */
+/* style: allow:malloc:2 sig:0 */
+/* style: allow:strdup:1 sig:0 */
+
+#include "mpl.h"
+
+#ifdef malloc
+/* Undefine these in case they were set to 'error' */
+#undef malloc
+#undef calloc
+#undef free
+#undef strdup
+/* Some GNU implementations use __strdup for strdup */
+#if defined(__strdup)
+#define strdup(s) __strdup(s)
+#endif
+#endif
+
+#define TR_ALIGN_BYTES 8
+#define TR_ALIGN_MASK 0x7
+#define TR_FNAME_LEN 48
+
+#define COOKIE_VALUE 0xf0e0d0c9
+#define ALREADY_FREED 0x0f0e0d9c
+
+typedef struct TRSPACE {
+ size_t size;
+ int id;
+ int lineno;
+ int freed_lineno;
+ char freed_fname[TR_FNAME_LEN];
+ char fname[TR_FNAME_LEN];
+ struct TRSPACE *volatile next, *prev;
+ unsigned long cookie; /* Cookie is always the last element
+ * inorder to catch the off-by-one
+ * errors */
+} TRSPACE;
+/* This union is used to ensure that the block passed to the user is
+ aligned on a double boundary */
+typedef union TrSPACE {
+ TRSPACE sp;
+ /* Ensure trSPACE header follows the alignment rules for all predefined types.
+ * Because any internal buffer is allocated as (TrSPACE)header + (void*)buffer.*/
+ MPL_mem_alignment_t alignment;
+} TrSPACE;
+
+/*
+ * This package maintains some state about itself. These globals hold
+ * this information.
+ */
+#define TRHEAD_PRESENTINAL ((TRSPACE *)0xbacdef01)
+#define TRHEAD_POSTSENTINAL ((TRSPACE *)0x10fedcba)
+static int world_rank = -1;
+static volatile size_t allocated = 0;
+static volatile long frags = 0;
+static TRSPACE *volatile TRhead[3] =
+ { TRHEAD_PRESENTINAL, 0, TRHEAD_POSTSENTINAL };
+static volatile int TRid = 0;
+static volatile int TRidSet = 0;
+static volatile int TRlevel = 0;
+static unsigned char TRDefaultByte = 0xda;
+static unsigned char TRFreedByte = 0xfc;
+static int TRdebugLevel = 0;
+static int TRSetBytes = 0;
+#define TR_MALLOC 0x1
+#define TR_FREE 0x2
+
+/* Used to keep track of allocations */
+static volatile size_t TRMaxMem = 0;
+static volatile int TRMaxMemId = 0;
+static volatile size_t TRCurOverhead = 0;
+static volatile size_t TRMaxOverhead = 314572800;
+/* Used to limit allocation */
+static volatile size_t TRMaxMemAllow = 0;
+
+static int TR_is_threaded = 0;
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE
+
+static MPL_thread_mutex_t memalloc_mutex;
+
+#define TR_THREAD_CS_ENTER \
+ do { \
+ if (TR_is_threaded) { \
+ int err; \
+ MPL_thread_mutex_lock(&memalloc_mutex, &err); \
+ if (err) \
+ MPL_error_printf("Error acquiring memalloc mutex lock\n"); \
+ } \
+ } while (0)
+
+#define TR_THREAD_CS_EXIT \
+ do { \
+ if (TR_is_threaded) { \
+ int err; \
+ MPL_thread_mutex_unlock(&memalloc_mutex, &err); \
+ if (err) \
+ MPL_error_printf("Error releasing memalloc mutex lock\n"); \
+ } \
+ } while (0)
+
+#else /* MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE */
+
+#define TR_THREAD_CS_ENTER
+#define TR_THREAD_CS_EXIT
+
+#endif /* MPL_THREAD_PACKAGE_NAME */
+
+/*
+ * Printing of addresses.
+ *
+ * This is particularly difficult because there isn't a C integer type that is
+ * known in advance to be the same size as an address, so we need some
+ * way to convert a pointer into the characters the represent the address in
+ * hex. We can't simply use %x or %lx since the size of an address might not
+ * be an int or a long (e.g., it might be a long long).
+ *
+ * In order to handle this, we have our own routine to convert
+ * an address to hex digits. For thread safety, the character
+ * string is allocated within the calling routine (rather than returning
+ * a static string from the conversion routine).
+ */
+
+/* 8 bytes = 16 hex chars + 0x (2 chars) + the null is 19 */
+#define MAX_ADDRESS_CHARS 19
+
+static void addrToHex(void *addr, char string[MAX_ADDRESS_CHARS])
+{
+ int i;
+ static char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+ };
+ /* The following construction is used to keep compilers from issuing
+ * a warning message about casting a pointer to an integer type */
+ intptr_t iaddr = (intptr_t) ((char *) addr - (char *) 0);
+
+ /* Initial location */
+ i = sizeof(void *) * 2;
+ string[i + 2] = 0;
+ while (i) {
+ string[i + 1] = hex[iaddr & 0xF];
+ iaddr >>= 4;
+ i--;
+ }
+ string[0] = '0';
+ string[1] = 'x';
+}
+
+/*+C
+ MPL_trinit - Setup the space package. Only needed for
+ error messages and flags.
++*/
+void MPL_trinit(int rank, int need_thread_safety)
+{
+ char *s;
+
+ world_rank = rank;
+
+ /* FIXME: We should use generalized parameter handling here
+ * to allow use of the command line as well as environment
+ * variables */
+ s = getenv("MPL_TRMEM_INIT");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRSetBytes = 1;
+ }
+ s = getenv("MPL_TRMEM_VALIDATE");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRdebugLevel = 1;
+ }
+ s = getenv("MPL_TRMEM_INITZERO");
+ if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
+ TRDefaultByte = 0;
+ TRFreedByte = 0;
+ }
+ s = getenv("MPL_TRMEM_TRACELEVEL");
+ if (s && *s) {
+ int l = atoi(s);
+ TRlevel = l;
+ }
+ s = getenv("MPL_TRMEM_MAX_OVERHEAD");
+ if (s && *s) {
+ long l = atol(s);
+ TRMaxOverhead = (size_t)l;
+ }
+
+ /* If the upper layer asked for thread safety and there's no
+ * threading package available, we need to return an error. */
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_NONE
+ if (need_thread_safety)
+ MPL_error_printf("No thread package to provide thread-safe memory allocation\n");
+#endif
+
+#if MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE
+ if (need_thread_safety) {
+ int err;
+
+ MPL_thread_mutex_create(&memalloc_mutex, &err);
+ if (err) {
+ MPL_error_printf("Error creating memalloc mutex\n");
+ }
+
+ TR_is_threaded = 1;
+ }
+#endif
+}
+
+/*+C
+ MPL_trmalloc - Malloc with tracing
+
+Input Parameters:
++ a - number of bytes to allocate
+. lineno - line number where used. Use __LINE__ for this
+- fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ double aligned pointer to requested storage, or null if not
+ available.
+ +*/
+static void *trmalloc(size_t a, int lineno, const char fname[])
+{
+ TRSPACE *head;
+ char *new = NULL;
+ unsigned long *nend;
+ size_t nsize;
+ int l;
+
+ if (TRdebugLevel > 0) {
+ if (MPL_trvalid2( "Invalid MALLOC arena detected at line %d in %s\n",
+ lineno, fname))
+ goto fn_exit;
+ }
+
+ nsize = a;
+ if (nsize & TR_ALIGN_MASK)
+ nsize += (TR_ALIGN_BYTES - (nsize & TR_ALIGN_MASK));
+ if ((allocated + nsize > TRMaxMemAllow) && TRMaxMemAllow) {
+ /* Return a null when memory would be exhausted */
+ /* This is only called when additional debugging is enabled,
+ * so the fact that this does not go through the regular error
+ * message system is not a problem. */
+ MPL_error_printf("Exceeded allowed memory!\n");
+ goto fn_exit;
+ }
+
+ new = (char *)malloc(nsize + sizeof(TrSPACE) + sizeof(unsigned long));
+ if (!new)
+ goto fn_exit;
+
+ if(TRSetBytes)
+ memset(new, TRDefaultByte, nsize + sizeof(TrSPACE) + sizeof(unsigned long));
+
+ /* Cast to (void*) to avoid false warnings about alignment issues */
+ head = (TRSPACE *) (void *)new;
+ new += sizeof(TrSPACE);
+
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ goto fn_exit;
+ }
+ if (TRhead[1]) {
+ MPL_VG_MAKE_MEM_DEFINED(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
+ TRhead[1]->prev = head;
+ MPL_VG_MAKE_MEM_NOACCESS(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
+ }
+ head->next = TRhead[1];
+ TRhead[1] = head;
+ head->prev = 0;
+ head->size = nsize;
+ head->id = TRid;
+ head->lineno = lineno;
+ if ((l = (int) strlen(fname)) > TR_FNAME_LEN - 1)
+ fname += (l - (TR_FNAME_LEN - 1));
+ MPL_strncpy(head->fname, fname, TR_FNAME_LEN);
+ head->fname[TR_FNAME_LEN - 1] = 0;
+ head->cookie = COOKIE_VALUE;
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *) (new + nsize);
+ nend[0] = COOKIE_VALUE;
+
+ allocated += nsize;
+ if (allocated > TRMaxMem) {
+ TRMaxMem = allocated;
+ TRMaxMemId = TRid;
+ }
+ frags++;
+
+ if (TRlevel & TR_MALLOC) {
+ /* Note that %08p (what we'd like to use) isn't accepted by
+ * all compilers */
+ MPL_error_printf("[%d] Allocating %ld(%ld) bytes at %8p in %s[%d]\n",
+ world_rank, (long)a, (long)nsize, new, fname, lineno);
+ }
+
+ /* Warn the user about tracing overhead if the total memory overhead for
+ * tracing is larger than the threshold, TRMaxOverhead. */
+ TRCurOverhead += sizeof(TrSPACE);
+ if ((TRCurOverhead > TRMaxOverhead) && TRMaxOverhead) {
+ MPL_error_printf("[%d] %.1lf MB was used for memory usage tracing!\n",
+ world_rank, (double)TRCurOverhead / 1024 / 1024);
+ TRMaxOverhead = TRMaxOverhead * 2;
+ }
+
+ /* Without these macros valgrind actually catches far fewer errors when
+ * using --enable-g=mem. Note that it would be nice to use
+ * MPL_VG_MALLOCLIKE_BLOCK and friends, but they don't work when the
+ * underlying source of the memory is malloc/free. */
+ MPL_VG_MAKE_MEM_UNDEFINED(new, nsize);
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(TrSPACE));
+ MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(unsigned long));
+ fn_exit:
+ return (void *) new;
+}
+
+void *MPL_trmalloc(size_t a, int lineno, const char fname[])
+{
+ void *retval;
+
+ TR_THREAD_CS_ENTER;
+ retval = trmalloc(a, lineno, fname);
+ TR_THREAD_CS_EXIT;
+
+ return retval;
+}
+
+/*+C
+ MPL_trfree - Free with tracing
+
+Input Parameters:
++ a - pointer to a block allocated with trmalloc
+. line - line in file where called
+- file - Name of file where called
+ +*/
+static void trfree(void *a_ptr, int line, const char file[])
+{
+ TRSPACE *head;
+ unsigned long *nend;
+ size_t nset;
+ int l;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+/* Don't try to handle empty blocks */
+ if (!a_ptr)
+ return;
+
+ if (TRdebugLevel > 0) {
+ if (MPL_trvalid2("Invalid MALLOC arena detected by FREE at line %d in %s\n", line, file ))
+ return;
+ }
+
+ /* Alignment guaranteed by the way a_ptr was allocated. Use
+ (void *) cast to suppress false warning about alignment issues */
+ head = (TRSPACE *) (void *) ( ((char *)a_ptr) - sizeof(TrSPACE) );
+
+ /* We need to mark the memory as defined before performing our own error
+ * checks or valgrind will flag the trfree function as erroneous. The real
+ * free() at the end of this function will mark the whole block as NOACCESS
+ * again. See the corresponding block in the trmalloc function for more
+ * info. */
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(TrSPACE));
+
+ if (head->cookie != COOKIE_VALUE) {
+ /* Damaged header */
+ /* Note that %08p (what we'd like to use) isn't accepted by
+ * all compilers */
+ addrToHex( a_ptr, hexstring );
+ MPL_error_printf("[%d] Block at address %s is corrupted; cannot free;\n"
+ "may be block not allocated with MPL_trmalloc or MALLOC\n"
+ "called in %s at line %d\n", world_rank, hexstring, file, line);
+ return;
+ }
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *) ((char *)a_ptr + head->size);
+/* Check that nend is properly aligned */
+ if ((sizeof(long) == 4 && ((long) nend & 0x3) != 0) ||
+ (sizeof(long) == 8 && ((long) nend & 0x7) != 0)) {
+ addrToHex( a_ptr, hexstring );
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (invalid address or header)\n"
+ "called in %s at line %d\n", world_rank, hexstring, file, line);
+ return;
+ }
+
+ MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
+ if (*nend != COOKIE_VALUE) {
+ if (*nend == ALREADY_FREED) {
+ addrToHex(a_ptr, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s was already freed\n", world_rank,
+ head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf("[%d] Block at address %s was already freed\n",
+ world_rank, hexstring);
+ }
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ head->freed_fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ MPL_error_printf("[%d] Block freed in %s[%d]\n",
+ world_rank, head->freed_fname, head->freed_lineno);
+ MPL_error_printf("[%d] Block allocated at %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ return;
+ }
+ else {
+ /* Damaged tail */
+ addrToHex(a_ptr, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
+ world_rank, head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (probably write past end)\n",
+ world_rank, hexstring);
+ }
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ MPL_error_printf("[%d] Block being freed allocated in %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
+ world_rank, (long)COOKIE_VALUE, *nend );
+ }
+ }
+/* Mark the location freed */
+ *nend = ALREADY_FREED;
+ head->freed_lineno = line;
+ if ((l = (int) strlen(file)) > TR_FNAME_LEN - 1)
+ file += (l - (TR_FNAME_LEN - 1));
+ MPL_strncpy(head->freed_fname, file, TR_FNAME_LEN);
+
+ allocated -= head->size;
+ frags--;
+ if (head->prev) {
+ MPL_VG_MAKE_MEM_DEFINED(&head->prev->next, sizeof(head->prev->next));
+ head->prev->next = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(&head->prev->next, sizeof(head->prev->next));
+ }
+ else {
+ TRhead[1] = head->next;
+ }
+
+ if (head->next) {
+ MPL_VG_MAKE_MEM_DEFINED(&head->next->prev, sizeof(head->next->prev));
+ head->next->prev = head->prev;
+ MPL_VG_MAKE_MEM_NOACCESS(&head->next->prev, sizeof(head->next->prev));
+ }
+
+ if (TRlevel & TR_FREE) {
+ addrToHex(a_ptr, hexstring);
+ MPL_error_printf("[%d] Freeing %lu bytes at %s in %s[%d]\n",
+ world_rank, (unsigned long)head->size, hexstring,
+ file, line);
+ }
+
+ TRCurOverhead -= sizeof(TrSPACE);
+
+ /*
+ * Now, scrub the data (except possibly the first few ints) to
+ * help catch access to already freed data
+ */
+ /* FIXME why do we skip the first few ints? [goodell@] */
+ /* Answer lost in time. Probably because in some case, the
+ first few bytes provided useful information in tracking down
+ a problem. */
+ if (head->size > 2*sizeof(int)) {
+ /* Now that nset is size_t, it might be defined as unsigned,
+ so we can't compare nset - 2*sizeof(int) against zero */
+ nset = head->size - 2 * sizeof(int);
+ /* If an upper layer (like the handle allocation code) ever used the
+ * MPL_VG_MAKE_MEM_NOACCESS macro on part/all of the data we gave
+ * them then our memset will elicit "invalid write" errors from
+ * valgrind. Mark it as accessible but undefined here to prevent this. */
+ MPL_VG_MAKE_MEM_UNDEFINED((char *)a_ptr + 2 * sizeof(int), nset);
+ if(TRSetBytes)
+ memset((char *)a_ptr + 2 * sizeof(int), TRFreedByte, nset);
+ }
+ free(head);
+}
+
+void MPL_trfree(void *a_ptr, int line, const char fname[])
+{
+ TR_THREAD_CS_ENTER;
+ trfree(a_ptr, line, fname);
+ TR_THREAD_CS_EXIT;
+}
+
+/*+C
+ MPL_trvalid - test the allocated blocks for validity. This can be used to
+ check for memory overwrites.
+
+Input Parameters:
+. str - string to write out only if an error is detected.
+
+ Return value:
+ The number of errors detected.
+
+ Output Effect:
+ Error messages are written to stdout. These have the form of either
+
+$ Block [id=%d(%d)] at address %lx is corrupted (probably write past end)
+$ Block allocated in <filename>[<linenumber>]
+
+ if the sentinal at the end of the block has been corrupted, and
+
+$ Block at address %lx is corrupted
+
+ if the sentinal at the begining of the block has been corrupted.
+
+ The address is the actual address of the block. The id is the
+ value of TRID.
+
+ No output is generated if there are no problems detected.
++*/
+static int trvalid( const char str[] )
+{
+ return MPL_trvalid2( str, -1, (const char *)0 );
+}
+
+int MPL_trvalid2(const char str[], int line, const char file[] )
+{
+ TRSPACE *head;
+ TRSPACE *next;
+ char *a;
+ unsigned long *nend;
+ int errs = 0;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ errs++;
+ goto fn_exit;
+ }
+ head = TRhead[1];
+ while (head) {
+ /* mark defined before accessing head contents */
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
+ if (head->cookie != COOKIE_VALUE) {
+ if (!errs) {
+ if (line > 0)
+ MPL_error_printf(str, line, file);
+ else
+ MPL_error_printf( "%s\n", str );
+ }
+ errs++;
+ addrToHex(head+1, hexstring);
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (invalid cookie in head)\n",
+ world_rank, hexstring);
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ /* Must stop because if head is invalid, then the data in the
+ * head is probably also invalid, and using could lead to
+ * SEGV or BUS */
+ goto fn_exit;
+ }
+ /* Get the address of the first byte of the memory, which begins
+ just after the end of the header. We must use the full header
+ (TrSPACE) rather than the struct with the data (TRSPACE) because
+ the full header is padded to ensure correct byte alignment with
+ the data */
+ a = (char *)( (TrSPACE *)head + 1 );
+ /* Cast to (void*) to avoid false warning about alignment */
+ nend = (unsigned long *) (void *)(a + head->size);
+
+ /* mark defined before accessing nend contents */
+ MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
+
+ if (nend[0] != COOKIE_VALUE) {
+ if (!errs) {
+ if (line > 0)
+ MPL_error_printf(str, line, file);
+ else
+ MPL_error_printf( "%s\n", str );
+ }
+ errs++;
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
+ addrToHex(a, hexstring);
+ if (TRidSet) {
+ MPL_error_printf
+ ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
+ world_rank, head->id, (unsigned long)head->size, hexstring);
+ }
+ else {
+ MPL_error_printf
+ ("[%d] Block at address %s is corrupted (probably write past end)\n",
+ world_rank, hexstring);
+ }
+ MPL_error_printf("[%d] Block allocated in %s[%d]\n",
+ world_rank, head->fname, head->lineno);
+ MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
+ world_rank, (long)COOKIE_VALUE, *nend );
+ }
+
+ /* set both regions back to NOACCESS */
+ next = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(*nend));
+ head = next;
+ }
+ fn_exit:
+ return errs;
+}
+
+int MPL_trvalid(const char str[])
+{
+ int retval;
+ TR_THREAD_CS_ENTER;
+ retval = trvalid(str);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trdump - Dump the allocated memory blocks to a file
+
+Input Parameters:
++ fp - file pointer. If fp is NULL, stderr is assumed.
+- minid - Only print allocated memory blocks whose id is at least 'minid'
+
+ +*/
+static void trdump(FILE * fp, int minid)
+{
+ TRSPACE *head;
+#ifdef VALGRIND_MAKE_MEM_NOACCESS
+ TRSPACE *old_head;
+#endif
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ if (fp == 0)
+ fp = stderr;
+ if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
+ MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
+ return;
+ }
+ head = TRhead[1];
+ while (head) {
+ /* these "rank and size" strings are supposed to be small: enough to
+ * hold an mpi rank, a size, and a hexadecimal address. */
+#define ADDRESS_STR_BUFLEN 256
+
+ char address_str[ADDRESS_STR_BUFLEN];
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
+ if (head->id >= minid) {
+ addrToHex((char *) head + sizeof(TrSPACE), hexstring);
+ address_str[ADDRESS_STR_BUFLEN-1] = 0;
+ snprintf(address_str, ADDRESS_STR_BUFLEN-1, "[%d] %lu at [%s],", world_rank,
+ (unsigned long)head->size, hexstring);
+ head->fname[TR_FNAME_LEN - 1] = 0; /* Be extra careful */
+ if (TRidSet) {
+ /* For head->id >= 0, we can add code to map the id to
+ * the name of a package, rather than using a raw number */
+ fprintf(fp, "%s id = %d %s[%d]\n", address_str, head->id, head->fname, head->lineno);
+ }
+ else {
+ fprintf(fp, "%s %s[%d]\n", address_str, head->fname, head->lineno);
+ }
+ }
+#ifdef VALGRIND_MAKE_MEM_NOACCESS
+ old_head = head;
+#endif
+ head = head->next;
+ MPL_VG_MAKE_MEM_NOACCESS(old_head, sizeof(*old_head));
+ }
+/*
+ msg_fprintf(fp, "# [%d] The maximum space allocated was %ld bytes [%ld]\n",
+ world_rank, TRMaxMem, TRMaxMemId);
+ */
+}
+
+void MPL_trdump(FILE *fp, int minid)
+{
+ TR_THREAD_CS_ENTER;
+ trdump(fp, minid);
+ TR_THREAD_CS_EXIT;
+}
+
+/*+C
+ MPL_trcalloc - Calloc with tracing
+
+Input Parameters:
+. nelem - number of elements to allocate
+. elsize - size of each element
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Double aligned pointer to requested storage, or null if not
+ available.
+ +*/
+static void *trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
+{
+ void *p;
+
+ p = trmalloc(nelem * elsize, lineno, fname);
+ if (p) {
+ memset(p, 0, nelem * elsize);
+ }
+ return p;
+}
+
+void *MPL_trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trcalloc(nelem, elsize, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trrealloc - Realloc with tracing
+
+Input Parameters:
+. p - pointer to old storage
+. size - number of bytes to allocate
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Double aligned pointer to requested storage, or null if not
+ available. This implementation ALWAYS allocates new space and copies
+ the contents into the new space.
+ +*/
+static void *trrealloc(void *p, size_t size, int lineno, const char fname[])
+{
+ void *pnew;
+ size_t nsize;
+ TRSPACE *head = 0;
+ char hexstring[MAX_ADDRESS_CHARS];
+
+ /* We should really use the size of the old block... */
+ if (p) {
+ head = (TRSPACE *) (void*) ((char *)p - sizeof(TrSPACE));
+ MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head)); /* mark defined before accessing contents */
+ if (head->cookie != COOKIE_VALUE) {
+ /* Damaged header */
+ addrToHex(p, hexstring);
+ MPL_error_printf("[%d] Block at address %s is corrupted; cannot realloc;\n"
+ "may be block not allocated with MPL_trmalloc or MALLOC\n",
+ world_rank, hexstring);
+ return 0;
+ }
+ }
+
+ /* Per the POSIX Standard, realloc() with zero size has two possible
+ * results. In both cases the given pointer (p) is freed, and the function
+ * will either return NULL or a unique value that can safely be passed to
+ * free(). We return NULL here because that is more likely to catch
+ * programming errors at higher levels. */
+ if (!size) {
+ trfree(p, lineno, fname);
+ return NULL;
+ }
+
+ pnew = trmalloc(size, lineno, fname);
+
+ if (p && pnew) {
+ nsize = size;
+ if (head->size < nsize)
+ nsize = head->size;
+ memcpy(pnew, p, nsize);
+ trfree(p, lineno, fname);
+ }
+
+ /* Re-mark the head as NOACCESS before returning. */
+ /* FIXME: Note head is no longer valid after MPL_trfree above */
+ if (head) {
+ MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
+ }
+
+ /* If the MPL_trmalloc failed above pnew will be NULL, just like a
+ * regular realloc failure. */
+ return pnew;
+}
+
+void *MPL_trrealloc(void *p, size_t size, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trrealloc(p, size, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
+
+/*+C
+ MPL_trstrdup - Strdup with tracing
+
+Input Parameters:
+. str - string to duplicate
+. lineno - line number where used. Use __LINE__ for this
+. fname - file name where used. Use __FILE__ for this
+
+ Returns:
+ Pointer to copy of the input string.
+ +*/
+static void *trstrdup(const char *str, int lineno, const char fname[])
+{
+ void *p;
+ size_t len = strlen(str) + 1;
+
+ p = trmalloc(len, lineno, fname);
+ if (p) {
+ memcpy(p, str, len);
+ }
+ return p;
+}
+
+void *MPL_trstrdup(const char *str, int lineno, const char fname[])
+{
+ void *retval;
+ TR_THREAD_CS_ENTER;
+ retval = trstrdup(str, lineno, fname);
+ TR_THREAD_CS_EXIT;
+ return retval;
+}
diff --git a/src/pm/hydra/mpl/src/mplstr.c b/src/pm/hydra/mpl/src/mplstr.c
deleted file mode 100644
index 941493b..0000000
--- a/src/pm/hydra/mpl/src/mplstr.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpl.h"
-
-#if !defined MPL_HAVE_SNPRINTF
-int MPL_snprintf(char *str, size_t size, mpl_const char *format, ...)
-{
- int n;
- mpl_const char *p;
- char *out_str = str;
- va_list list;
-
- va_start(list, format);
-
- p = format;
- while (*p && size > 0) {
- char *nf;
-
- nf = strchr(p, '%');
- if (!nf) {
- /* No more format characters */
- while (size-- > 0 && *p) {
- *out_str++ = *p++;
- }
- }
- else {
- int nc;
- int width = -1;
-
- /* Copy until nf */
- while (p < nf && size-- > 0) {
- *out_str++ = *p++;
- }
- /* p now points at nf */
- /* Handle the format character */
- nc = nf[1];
- if (isdigit(nc)) {
- /* Get the field width */
- /* FIXME : Assumes ASCII */
- width = nc - '0';
- p = nf + 2;
- while (*p && isdigit(*p)) {
- width = 10 * width + (*p++ - '0');
- }
- /* When there is no longer a digit, get the format
- * character */
- nc = *p++;
- }
- else {
- /* Skip over the format string */
- p += 2;
- }
-
- switch (nc) {
- case '%':
- *out_str++ = '%';
- size--;
- break;
-
- case 'd':
- {
- int val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of integer type */
- val = va_arg(list, int);
- sprintf(tmp, "%d", val);
- if (width > 0) {
- size_t tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- * left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 'x':
- {
- int val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of integer type */
- val = va_arg(list, int);
- sprintf(tmp, "%x", val);
- if (width > 0) {
- size_t tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- * left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 'p':
- {
- void *val;
- char tmp[20];
- char *t = tmp;
- /* Get the argument, of pointer type */
- val = va_arg(list, void *);
- sprintf(tmp, "%p", val);
- if (width > 0) {
- size_t tmplen = strlen(tmp);
- /* If a width was specified, pad with spaces on the
- * left (on the right if %-3d given; not implemented yet */
- while (size-- > 0 && width-- > tmplen)
- *out_str++ = ' ';
- }
- while (size-- > 0 && *t) {
- *out_str++ = *t++;
- }
- }
- break;
-
- case 's':
- {
- char *s_arg;
- /* Get the argument, of pointer to char type */
- s_arg = va_arg(list, char *);
- while (size-- > 0 && s_arg && *s_arg) {
- *out_str++ = *s_arg++;
- }
- }
- break;
-
- default:
- /* Error, unknown case */
- return -1;
- break;
- }
- }
- }
-
- va_end(list);
-
- if (size-- > 0)
- *out_str++ = '\0';
-
- n = (int) (out_str - str);
- return n;
-}
-#endif /* MPL_HAVE_SNPRINTF */
-
-/*@
- MPL_strdup - Duplicate a string
-
- Synopsis:
-.vb
- char *MPL_strdup(mpl_const char *str)
-.ve
-
-Input Parameters:
-. str - null-terminated string to duplicate
-
- Return value:
- A pointer to a copy of the string, including the terminating null. A
- null pointer is returned on error, such as out-of-memory.
-
- Module:
- Utility
- @*/
-#if !defined MPL_HAVE_STRDUP
-char *MPL_strdup(mpl_const char *str)
-{
- char *mpl_restrict p = (char *) malloc(strlen(str) + 1);
- mpl_const char *mpl_restrict in_p = str;
- char *save_p;
-
- save_p = p;
- if (p) {
- while (*in_p) {
- *p++ = *in_p++;
- }
- *p = 0;
- }
- return save_p;
-}
-#endif /* MPL_HAVE_STRDUP */
-
-/*
- * MPL_strncpy - Copy at most n characters. Stop once a null is reached.
- *
- * This is different from strncpy, which null pads so that exactly
- * n characters are copied. The strncpy behavior is correct for many
- * applications because it guarantees that the string has no uninitialized
- * data.
- *
- * If n characters are copied without reaching a null, return an error.
- * Otherwise, return 0.
- *
- * Question: should we provide a way to request the length of the string,
- * since we know it?
- */
-/*@ MPL_strncpy - Copy a string with a maximum length
-
-Input Parameters:
-+ instr - String to copy
-- maxlen - Maximum total length of 'outstr'
-
-Output Parameters:
-. outstr - String to copy into
-
- Notes:
- This routine is the routine that you wish 'strncpy' was. In copying
- 'instr' to 'outstr', it stops when either the end of 'outstr' (the
- null character) is seen or the maximum length 'maxlen' is reached.
- Unlike 'strncpy', it does not add enough nulls to 'outstr' after
- copying 'instr' in order to move precisely 'maxlen' characters.
- Thus, this routine may be used anywhere 'strcpy' is used, without any
- performance cost related to large values of 'maxlen'.
-
- If there is insufficient space in the destination, the destination is
- still null-terminated, to avoid potential failures in routines that neglect
- to check the error code return from this routine.
-
- Module:
- Utility
- @*/
-int MPL_strncpy(char *dest, const char *src, size_t n)
-{
- char *mpl_restrict d_ptr = dest;
- const char *mpl_restrict s_ptr = src;
- register int i;
-
- if (n == 0)
- return 0;
-
- i = (int) n;
- while (*s_ptr && i-- > 0) {
- *d_ptr++ = *s_ptr++;
- }
-
- if (i > 0) {
- *d_ptr = 0;
- return 0;
- }
- else {
- /* Force a null at the end of the string (gives better safety
- * in case the user fails to check the error code) */
- dest[n - 1] = 0;
- /* We may want to force an error message here, at least in the
- * debugging version */
- /*printf("failure in copying %s with length %d\n", src, n); */
- return 1;
- }
-}
-
-/* replacement for strsep. Conforms to the following description (from the OS X
- * 10.6 man page):
- *
- * The strsep() function locates, in the string referenced by *stringp, the first occur-
- * rence of any character in the string delim (or the terminating `\0' character) and
- * replaces it with a `\0'. The location of the next character after the delimiter
- * character (or NULL, if the end of the string was reached) is stored in *stringp. The
- * original value of *stringp is returned.
- *
- * An ``empty'' field (i.e., a character in the string delim occurs as the first charac-
- * ter of *stringp) can be detected by comparing the location referenced by the returned
- * pointer to `\0'.
- *
- * If *stringp is initially NULL, strsep() returns NULL.
- */
-char *MPL_strsep(char **stringp, const char *delim)
-{
- int i, j;
- char *ret;
-
- if (!*stringp)
- return NULL;
-
- ret = *stringp;
- i = 0;
- while (1) {
- if (!ret[i]) {
- *stringp = NULL;
- return ret;
- }
- for (j = 0; delim[j] != '\0'; ++j) {
- if (ret[i] == delim[j]) {
- ret[i] = '\0';
- *stringp = &ret[i+1];
- return ret;
- }
- }
- ++i;
- }
-}
-
-
-/* there's no standard portable way to convert error codes to human readable
- * strings. The standard way to do that is via strerror() but if for some
- * resason we don't have it, then we'll merely output the error code seen */
-#if !defined MPL_HAVE_STRERROR
-char *MPL_strerror(int errnum)
-{
-#define STRERROR_SIZE 256
- static char msgbuf[STRERROR_SIZE];
- snprintf(msgbuf, STRERROR_SIZE, "errno = %d", errnum);
-#undef STRERROR_SIZE
- return msgbuf;
-}
-#endif /* MPL_HAVE_STRERROR */
diff --git a/src/pm/hydra/mpl/src/mpltrmem.c b/src/pm/hydra/mpl/src/mpltrmem.c
deleted file mode 100644
index 3c9686f..0000000
--- a/src/pm/hydra/mpl/src/mpltrmem.c
+++ /dev/null
@@ -1,1072 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* Always enable valgrind macros (if possible) in this file. If these functions
- * are used, the caller is concerned about correctness, not performance. */
-#define MPL_VG_ENABLED 1
-
-/* style: allow:calloc:1 sig:0 */
-/* style: allow:free:2 sig:0 */
-/* style: allow:malloc:2 sig:0 */
-/* style: allow:strdup:1 sig:0 */
-
-#include "mpl.h"
-
-#ifdef malloc
-/* Undefine these in case they were set to 'error' */
-#undef malloc
-#undef calloc
-#undef free
-#undef strdup
-/* Some GNU implementations use __strdup for strdup */
-#if defined(__strdup)
-#define strdup(s) __strdup(s)
-#endif
-#endif
-
-#if defined(MPL_HAVE_STDLIB_H) || defined(MPL_STDC_HEADERS)
-#include <stdlib.h>
-#else
-/* We should test to see if these will work */
-extern void *malloc(size_t);
-extern void *calloc(size_t, size_t);
-extern int free(void *);
-#endif
-
-/*D
- MPL_trspace - Routines for tracing space usage
-
- Description:
- MPL_trmalloc replaces malloc and MPL_trfree replaces free.
- These routines
- have the same syntax and semantics as the routines that they replace,
- In addition, there are routines to report statistics on the memory
- usage, and to report the currently allocated space. These routines
- are built on top of malloc and free, and can be used together with
- them as long as any space allocated with MPL_trmalloc is only freed with
- MPL_trfree.
-
- Note that the malloced data is scrubbed each time; you don't get
- random trash (or fortuitous zeros). What you get is fc (bytes);
- this will usually create a "bad" value.
-
- As an aid in developing codes, a maximum memory threshold can
- be set with MPL_TrSetMaxMem.
- D*/
-
-/* HEADER_DOUBLES is the number of doubles in a trSPACE header */
-/* We have to be careful about alignment rules here */
-#define USE_LONG_NAMES_IN_TRMEM
-#ifdef USE_LONG_NAMES_IN_TRMEM
-/* Assume worst case and align on 8 bytes */
-#define TR_ALIGN_BYTES 8
-#define TR_ALIGN_MASK 0x7
-#define TR_FNAME_LEN 48
-#define HEADER_DOUBLES 19
-#else
-#if SIZEOF_VOID_P > 4
-#define TR_ALIGN_BYTES 8
-#define TR_ALIGN_MASK 0x7
-#define TR_FNAME_LEN 16
-#define HEADER_DOUBLES 12
-#else
-#define TR_ALIGN_BYTES 4
-#define TR_ALIGN_MASK 0x3
-#define TR_FNAME_LEN 12
-#define HEADER_DOUBLES 8
-#endif
-#endif
-
-#define COOKIE_VALUE 0xf0e0d0c9
-#define ALREADY_FREED 0x0f0e0d9c
-
-typedef struct TRSPACE {
- size_t size;
- int id;
- int lineno;
- int freed_lineno;
- char freed_fname[TR_FNAME_LEN];
- char fname[TR_FNAME_LEN];
- struct TRSPACE *volatile next, *prev;
- unsigned long cookie; /* Cookie is always the last element
- * inorder to catch the off-by-one
- * errors */
-} TRSPACE;
-/* This union is used to ensure that the block passed to the user is
- aligned on a double boundary */
-typedef union TrSPACE {
- TRSPACE sp;
- double v[HEADER_DOUBLES];
-} TrSPACE;
-
-/*
- * This package maintains some state about itself. These globals hold
- * this information.
- */
-#define TRHEAD_PRESENTINAL ((TRSPACE *)0xbacdef01)
-#define TRHEAD_POSTSENTINAL ((TRSPACE *)0x10fedcba)
-static int world_rank = -1;
-static volatile size_t allocated = 0;
-static volatile long frags = 0;
-static TRSPACE *volatile TRhead[3] =
- { TRHEAD_PRESENTINAL, 0, TRHEAD_POSTSENTINAL };
-static volatile int TRid = 0;
-static volatile int TRidSet = 0;
-static volatile int TRlevel = 0;
-static unsigned char TRDefaultByte = 0xda;
-static unsigned char TRFreedByte = 0xfc;
-#define MAX_TR_STACK 20
-static int TRdebugLevel = 0;
-static int TRSetBytes = 0;
-#define TR_MALLOC 0x1
-#define TR_FREE 0x2
-
-/* Used to keep track of allocations */
-static volatile size_t TRMaxMem = 0;
-static volatile int TRMaxMemId = 0;
-static volatile size_t TRCurOverhead = 0;
-static volatile size_t TRMaxOverhead = 314572800;
-/* Used to limit allocation */
-static volatile size_t TRMaxMemAllow = 0;
-
-/*
- * Printing of addresses.
- *
- * This is particularly difficult because there isn't a C integer type that is
- * known in advance to be the same size as an address, so we need some
- * way to convert a pointer into the characters the represent the address in
- * hex. We can't simply use %x or %lx since the size of an address might not
- * be an int or a long (e.g., it might be a long long).
- *
- * In order to handle this, we have our own routine to convert
- * an address to hex digits. For thread safety, the character
- * string is allocated within the calling routine (rather than returning
- * a static string from the conversion routine).
- */
-
-/* 8 bytes = 16 hex chars + 0x (2 chars) + the null is 19 */
-#define MAX_ADDRESS_CHARS 19
-
-static void addrToHex(void *addr, char string[MAX_ADDRESS_CHARS]);
-
-/*+C
- MPL_trinit - Setup the space package. Only needed for
- error messages and flags.
-+*/
-void MPL_trinit(int rank)
-{
- char *s;
-
- world_rank = rank;
-
- /* FIXME: We should use generalized parameter handling here
- * to allow use of the command line as well as environment
- * variables */
- /* these should properly only be "MPL_" parameters, but for backwards
- * compatibility we also support "MPICH_" parameters. */
- s = getenv("MPICH_TRMEM_INIT");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRSetBytes = 1;
- }
- s = getenv("MPICH_TRMEM_VALIDATE");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRdebugLevel = 1;
- }
- s = getenv("MPICH_TRMEM_INITZERO");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRDefaultByte = 0;
- TRFreedByte = 0;
- }
- s = getenv("MPICH_TRMEM_MAX_OVERHEAD");
- if (s && *s) {
- long l = atol(s);
- TRMaxOverhead = (size_t)l;
- }
- s = getenv("MPL_TRMEM_INIT");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRSetBytes = 1;
- }
- s = getenv("MPL_TRMEM_VALIDATE");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRdebugLevel = 1;
- }
- s = getenv("MPL_TRMEM_INITZERO");
- if (s && *s && (strcmp(s, "YES") == 0 || strcmp(s, "yes") == 0)) {
- TRDefaultByte = 0;
- TRFreedByte = 0;
- }
- s = getenv("MPL_TRMEM_TRACELEVEL");
- if (s && *s) {
- int l = atoi(s);
- TRlevel = l;
- }
- s = getenv("MPL_TRMEM_MAX_OVERHEAD");
- if (s && *s) {
- long l = atol(s);
- TRMaxOverhead = (size_t)l;
- }
-
-}
-
-/*+C
- MPL_trmalloc - Malloc with tracing
-
-Input Parameters:
-+ a - number of bytes to allocate
-. lineno - line number where used. Use __LINE__ for this
-- fname - file name where used. Use __FILE__ for this
-
- Returns:
- double aligned pointer to requested storage, or null if not
- available.
- +*/
-void *MPL_trmalloc(size_t a, int lineno, const char fname[])
-{
- TRSPACE *head;
- char *new = NULL;
- unsigned long *nend;
- size_t nsize;
- int l;
-
- if (TRdebugLevel > 0) {
- if (MPL_trvalid2( "Invalid MALLOC arena detected at line %d in %s\n",
- lineno, fname))
- goto fn_exit;
- }
-
- nsize = a;
- if (nsize & TR_ALIGN_MASK)
- nsize += (TR_ALIGN_BYTES - (nsize & TR_ALIGN_MASK));
- if ((allocated + nsize > TRMaxMemAllow) && TRMaxMemAllow) {
- /* Return a null when memory would be exhausted */
- /* This is only called when additional debugging is enabled,
- * so the fact that this does not go through the regular error
- * message system is not a problem. */
- MPL_error_printf("Exceeded allowed memory!\n");
- goto fn_exit;
- }
-
- new = (char *)malloc(nsize + sizeof(TrSPACE) + sizeof(unsigned long));
- if (!new)
- goto fn_exit;
-
- if(TRSetBytes)
- memset(new, TRDefaultByte, nsize + sizeof(TrSPACE) + sizeof(unsigned long));
-
- /* Cast to (void*) to avoid false warnings about alignment issues */
- head = (TRSPACE *) (void *)new;
- new += sizeof(TrSPACE);
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- goto fn_exit;
- }
- if (TRhead[1]) {
- MPL_VG_MAKE_MEM_DEFINED(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
- TRhead[1]->prev = head;
- MPL_VG_MAKE_MEM_NOACCESS(&TRhead[1]->prev, sizeof(TRhead[1]->prev));
- }
- head->next = TRhead[1];
- TRhead[1] = head;
- head->prev = 0;
- head->size = nsize;
- head->id = TRid;
- head->lineno = lineno;
- if ((l = (int) strlen(fname)) > TR_FNAME_LEN - 1)
- fname += (l - (TR_FNAME_LEN - 1));
- MPL_strncpy(head->fname, fname, TR_FNAME_LEN);
- head->fname[TR_FNAME_LEN - 1] = 0;
- head->cookie = COOKIE_VALUE;
- /* Cast to (void*) to avoid false warning about alignment */
- nend = (unsigned long *) (void *) (new + nsize);
- nend[0] = COOKIE_VALUE;
-
- allocated += nsize;
- if (allocated > TRMaxMem) {
- TRMaxMem = allocated;
- TRMaxMemId = TRid;
- }
- frags++;
-
- if (TRlevel & TR_MALLOC) {
- /* Note that %08p (what we'd like to use) isn't accepted by
- * all compilers */
- MPL_error_printf("[%d] Allocating %ld(%ld) bytes at %8p in %s[%d]\n",
- world_rank, (long)a, (long)nsize, new, fname, lineno);
- }
-
- /* Warn the user about tracing overhead if the total memory overhead for
- * tracing is larger than the threshold, TRMaxOverhead. */
- TRCurOverhead += sizeof(TrSPACE);
- if ((TRCurOverhead > TRMaxOverhead) && TRMaxOverhead) {
- MPL_error_printf("[%d] %.1lf MB was used for memory usage tracing!\n",
- world_rank, (double)TRCurOverhead / 1024 / 1024);
- TRMaxOverhead = TRMaxOverhead * 2;
- }
-
- /* Without these macros valgrind actually catches far fewer errors when
- * using --enable-g=mem. Note that it would be nice to use
- * MPL_VG_MALLOCLIKE_BLOCK and friends, but they don't work when the
- * underlying source of the memory is malloc/free. */
- MPL_VG_MAKE_MEM_UNDEFINED(new, nsize);
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(TrSPACE));
- MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(unsigned long));
- fn_exit:
- return (void *) new;
-}
-
-/*+C
- MPL_trfree - Free with tracing
-
-Input Parameters:
-+ a - pointer to a block allocated with trmalloc
-. line - line in file where called
-- file - Name of file where called
- +*/
-void MPL_trfree(void *a_ptr, int line, const char file[])
-{
- TRSPACE *head;
- unsigned long *nend;
- size_t nset;
- int l;
- char hexstring[MAX_ADDRESS_CHARS];
-
-/* Don't try to handle empty blocks */
- if (!a_ptr)
- return;
-
- if (TRdebugLevel > 0) {
- if (MPL_trvalid2("Invalid MALLOC arena detected by FREE at line %d in %s\n", line, file ))
- return;
- }
-
- /* Alignment guaranteed by the way a_ptr was allocated. Use
- (void *) cast to suppress false warning about alignment issues */
- head = (TRSPACE *) (void *) ( ((char *)a_ptr) - sizeof(TrSPACE) );
-
- /* We need to mark the memory as defined before performing our own error
- * checks or valgrind will flag the trfree function as erroneous. The real
- * free() at the end of this function will mark the whole block as NOACCESS
- * again. See the corresponding block in the trmalloc function for more
- * info. */
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(TrSPACE));
-
- if (head->cookie != COOKIE_VALUE) {
- /* Damaged header */
- /* Note that %08p (what we'd like to use) isn't accepted by
- * all compilers */
- addrToHex( a_ptr, hexstring );
- MPL_error_printf("[%d] Block at address %s is corrupted; cannot free;\n"
- "may be block not allocated with MPL_trmalloc or MALLOC\n"
- "called in %s at line %d\n", world_rank, hexstring, file, line);
- return;
- }
- /* Cast to (void*) to avoid false warning about alignment */
- nend = (unsigned long *) (void *) ((char *)a_ptr + head->size);
-/* Check that nend is properly aligned */
- if ((sizeof(long) == 4 && ((long) nend & 0x3) != 0) ||
- (sizeof(long) == 8 && ((long) nend & 0x7) != 0)) {
- addrToHex( a_ptr, hexstring );
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (invalid address or header)\n"
- "called in %s at line %d\n", world_rank, hexstring, file, line);
- return;
- }
-
- MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
- if (*nend != COOKIE_VALUE) {
- if (*nend == ALREADY_FREED) {
- addrToHex(a_ptr, hexstring);
- if (TRidSet) {
- MPL_error_printf
- ("[%d] Block [id=%d(%lu)] at address %s was already freed\n", world_rank,
- head->id, (unsigned long)head->size, hexstring);
- }
- else {
- MPL_error_printf("[%d] Block at address %s was already freed\n",
- world_rank, hexstring);
- }
- head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- head->freed_fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- MPL_error_printf("[%d] Block freed in %s[%d]\n",
- world_rank, head->freed_fname, head->freed_lineno);
- MPL_error_printf("[%d] Block allocated at %s[%d]\n",
- world_rank, head->fname, head->lineno);
- return;
- }
- else {
- /* Damaged tail */
- addrToHex(a_ptr, hexstring);
- if (TRidSet) {
- MPL_error_printf
- ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
- world_rank, head->id, (unsigned long)head->size, hexstring);
- }
- else {
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (probably write past end)\n",
- world_rank, hexstring);
- }
- head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- MPL_error_printf("[%d] Block being freed allocated in %s[%d]\n",
- world_rank, head->fname, head->lineno);
- MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
- world_rank, (long)COOKIE_VALUE, *nend );
- }
- }
-/* Mark the location freed */
- *nend = ALREADY_FREED;
- head->freed_lineno = line;
- if ((l = (int) strlen(file)) > TR_FNAME_LEN - 1)
- file += (l - (TR_FNAME_LEN - 1));
- MPL_strncpy(head->freed_fname, file, TR_FNAME_LEN);
-
- allocated -= head->size;
- frags--;
- if (head->prev) {
- MPL_VG_MAKE_MEM_DEFINED(&head->prev->next, sizeof(head->prev->next));
- head->prev->next = head->next;
- MPL_VG_MAKE_MEM_NOACCESS(&head->prev->next, sizeof(head->prev->next));
- }
- else {
- TRhead[1] = head->next;
- }
-
- if (head->next) {
- MPL_VG_MAKE_MEM_DEFINED(&head->next->prev, sizeof(head->next->prev));
- head->next->prev = head->prev;
- MPL_VG_MAKE_MEM_NOACCESS(&head->next->prev, sizeof(head->next->prev));
- }
-
- if (TRlevel & TR_FREE) {
- addrToHex(a_ptr, hexstring);
- MPL_error_printf("[%d] Freeing %lu bytes at %s in %s[%d]\n",
- world_rank, (unsigned long)head->size, hexstring,
- file, line);
- }
-
- TRCurOverhead -= sizeof(TrSPACE);
-
- /*
- * Now, scrub the data (except possibly the first few ints) to
- * help catch access to already freed data
- */
- /* FIXME why do we skip the first few ints? [goodell@] */
- /* Answer lost in time. Probably because in some case, the
- first few bytes provided useful information in tracking down
- a problem. */
- if (head->size > 2*sizeof(int)) {
- /* Now that nset is size_t, it might be defined as unsigned,
- so we can't compare nset - 2*sizeof(int) against zero */
- nset = head->size - 2 * sizeof(int);
- /* If an upper layer (like the handle allocation code) ever used the
- * MPL_VG_MAKE_MEM_NOACCESS macro on part/all of the data we gave
- * them then our memset will elicit "invalid write" errors from
- * valgrind. Mark it as accessible but undefined here to prevent this. */
- MPL_VG_MAKE_MEM_UNDEFINED((char *)a_ptr + 2 * sizeof(int), nset);
- if(TRSetBytes)
- memset((char *)a_ptr + 2 * sizeof(int), TRFreedByte, nset);
- }
- free(head);
-}
-
-/*+C
- MPL_trvalid - test the allocated blocks for validity. This can be used to
- check for memory overwrites.
-
-Input Parameters:
-. str - string to write out only if an error is detected.
-
- Return value:
- The number of errors detected.
-
- Output Effect:
- Error messages are written to stdout. These have the form of either
-
-$ Block [id=%d(%d)] at address %lx is corrupted (probably write past end)
-$ Block allocated in <filename>[<linenumber>]
-
- if the sentinal at the end of the block has been corrupted, and
-
-$ Block at address %lx is corrupted
-
- if the sentinal at the begining of the block has been corrupted.
-
- The address is the actual address of the block. The id is the
- value of TRID.
-
- No output is generated if there are no problems detected.
-+*/
-int MPL_trvalid( const char str[] )
-{
- return MPL_trvalid2( str, -1, (const char *)0 );
-}
-
-int MPL_trvalid2(const char str[], int line, const char file[] )
-{
- TRSPACE *head;
- TRSPACE *next;
- char *a;
- unsigned long *nend;
- int errs = 0;
- char hexstring[MAX_ADDRESS_CHARS];
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- errs++;
- goto fn_exit;
- }
- head = TRhead[1];
- while (head) {
- /* mark defined before accessing head contents */
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
- if (head->cookie != COOKIE_VALUE) {
- if (!errs) {
- if (line > 0)
- MPL_error_printf(str, line, file);
- else
- MPL_error_printf( "%s\n", str );
- }
- errs++;
- addrToHex(head+1, hexstring);
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (invalid cookie in head)\n",
- world_rank, hexstring);
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
- /* Must stop because if head is invalid, then the data in the
- * head is probably also invalid, and using could lead to
- * SEGV or BUS */
- goto fn_exit;
- }
- /* Get the address of the first byte of the memory, which begins
- just after the end of the header. We must use the full header
- (TrSPACE) rather than the struct with the data (TRSPACE) because
- the full header is padded to ensure correct byte alignment with
- the data */
- a = (char *)( (TrSPACE *)head + 1 );
- /* Cast to (void*) to avoid false warning about alignment */
- nend = (unsigned long *) (void *)(a + head->size);
-
- /* mark defined before accessing nend contents */
- MPL_VG_MAKE_MEM_DEFINED(nend, sizeof(*nend));
-
- if (nend[0] != COOKIE_VALUE) {
- if (!errs) {
- if (line > 0)
- MPL_error_printf(str, line, file);
- else
- MPL_error_printf( "%s\n", str );
- }
- errs++;
- head->fname[TR_FNAME_LEN - 1] = 0; /* Just in case */
- addrToHex(a, hexstring);
- if (TRidSet) {
- MPL_error_printf
- ("[%d] Block [id=%d(%lu)] at address %s is corrupted (probably write past end)\n",
- world_rank, head->id, (unsigned long)head->size, hexstring);
- }
- else {
- MPL_error_printf
- ("[%d] Block at address %s is corrupted (probably write past end)\n",
- world_rank, hexstring);
- }
- MPL_error_printf("[%d] Block allocated in %s[%d]\n",
- world_rank, head->fname, head->lineno);
- MPL_error_printf("[%d] Block cookie should be %lx but was %lx\n",
- world_rank, (long)COOKIE_VALUE, *nend );
- }
-
- /* set both regions back to NOACCESS */
- next = head->next;
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
- MPL_VG_MAKE_MEM_NOACCESS(nend, sizeof(*nend));
- head = next;
- }
- fn_exit:
- return errs;
-}
-
-/*+C
- MPL_trspace - Return space statistics
-
- Output parameters:
-. space - number of bytes currently allocated
-. frags - number of blocks currently allocated
- +*/
-void MPL_trspace(size_t *space, size_t *fr)
-{
- /* We use ints because systems without prototypes will usually
- * allow calls with ints instead of longs, leading to unexpected
- * behavior */
- *space = allocated;
- *fr = frags;
-}
-
-/*+C
- MPL_trdump - Dump the allocated memory blocks to a file
-
-Input Parameters:
-+ fp - file pointer. If fp is NULL, stderr is assumed.
-- minid - Only print allocated memory blocks whose id is at least 'minid'
-
- +*/
-void MPL_trdump(FILE * fp, int minid)
-{
- TRSPACE *head;
-#ifdef VALGRIND_MAKE_MEM_NOACCESS
- TRSPACE *old_head;
-#endif
- char hexstring[MAX_ADDRESS_CHARS];
-
- if (fp == 0)
- fp = stderr;
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
- head = TRhead[1];
- while (head) {
- /* these "rank and size" strings are supposed to be small: enough to
- * hold an mpi rank, a size, and a hexadecimal address. */
-#define ADDRESS_STR_BUFLEN 256
-
- char address_str[ADDRESS_STR_BUFLEN];
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head));
- if (head->id >= minid) {
- addrToHex((char *) head + sizeof(TrSPACE), hexstring);
- address_str[ADDRESS_STR_BUFLEN-1] = 0;
- snprintf(address_str, ADDRESS_STR_BUFLEN-1, "[%d] %lu at [%s],", world_rank,
- (unsigned long)head->size, hexstring);
- head->fname[TR_FNAME_LEN - 1] = 0; /* Be extra careful */
- if (TRidSet) {
- /* For head->id >= 0, we can add code to map the id to
- * the name of a package, rather than using a raw number */
- fprintf(fp, "%s id = %d %s[%d]\n", address_str, head->id, head->fname, head->lineno);
- }
- else {
- fprintf(fp, "%s %s[%d]\n", address_str, head->fname, head->lineno);
- }
- }
-#ifdef VALGRIND_MAKE_MEM_NOACCESS
- old_head = head;
-#endif
- head = head->next;
- MPL_VG_MAKE_MEM_NOACCESS(old_head, sizeof(*old_head));
- }
-/*
- msg_fprintf(fp, "# [%d] The maximum space allocated was %ld bytes [%ld]\n",
- world_rank, TRMaxMem, TRMaxMemId);
- */
-}
-
-/* Configure will set HAVE_SEARCH for these systems. We assume that
- the system does NOT have search.h unless otherwise noted.
- The otherwise noted lets the non-configure approach work on our
- two major systems */
-#if defined(HAVE_SEARCH_H)
-
-/* The following routine uses the tsearch routines to summarize the
- memory heap by id */
-
-#include <search.h>
-typedef struct TRINFO {
- int id, size, lineno;
- char *fname;
-} TRINFO;
-
-static int IntCompare(TRINFO * a, TRINFO * b)
-{
- return a->id - b->id;
-}
-
-static volatile FILE *TRFP = 0;
-static void PrintSum(TRINFO ** a, VISIT order, int level)
-{
- if (order == postorder || order == leaf)
- fprintf(TRFP, "[%d]%s[%d] has %d\n", (*a)->id, (*a)->fname, (*a)->lineno, (*a)->size);
-}
-
-/*+C
- MPL_trSummary - Summarize the allocate memory blocks by id
-
-Input Parameters:
-+ fp - file pointer. If fp is NULL, stderr is assumed.
-- minid - Only print allocated memory blocks whose id is at least 'minid'
-
- Note:
- This routine is the same as MPL_trDump on those systems that do not include
- /usr/include/search.h .
- +*/
-void MPL_trSummary(FILE * fp, int minid)
-{
- TRSPACE *head;
- TRINFO *root, *key, **fnd;
- TRINFO nspace[1000];
-
- if (fp == 0)
- fp = stderr;
- root = 0;
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
- head = TRhead[1];
- key = nspace;
- while (head) {
- if (head->id >= minid) {
- key->id = head->id;
- key->size = 0;
- key->lineno = head->lineno;
- key->fname = head->fname;
-#if defined(USE_TSEARCH_WITH_CHARP)
- fnd = (TRINFO **) tsearch((char *) key, (char **) &root, IntCompare);
-#else
- fnd = (TRINFO **) tsearch((void *) key, (void **) &root, (int (*)()) IntCompare);
-#endif
- if (*fnd == key) {
- key->size = 0;
- key++;
- }
- (*fnd)->size += head->size;
- }
- head = head->next;
- }
-
- /* Print the data */
- TRFP = fp;
- twalk((char *) root, (void (*)()) PrintSum);
- /*
- * msg_fprintf(fp, "# [%d] The maximum space allocated was %d bytes [%d]\n",
- * world_rank, TRMaxMem, TRMaxMemId);
- */
-}
-#else
-void MPL_trSummary(FILE * fp, int minid)
-{
- if (fp == 0)
- fp = stderr;
- fprintf(fp, "# [%d] The maximum space allocated was %lu bytes [%d]\n",
- world_rank, (unsigned long)TRMaxMem, TRMaxMemId);
-}
-#endif
-
-/*+
- MPL_trid - set an "id" field to be used with each fragment
- +*/
-void MPL_trid(int id)
-{
- TRid = id;
- TRidSet = 1; /* Recall whether we ever use this feature to
- * help clean up output */
-}
-
-/*+C
- MPL_trlevel - Set the level of output to be used by the tracing routines
-
-Input Parameters:
-. level = 0 - notracing
-. level = 1 - trace mallocs
-. level = 2 - trace frees
-
- Note:
- You can add levels together to get combined tracing.
- +*/
-void MPL_trlevel(int level)
-{
- TRlevel = level;
-}
-
-
-/*+C
- MPL_trDebugLevel - set the level of debugging for the space management
- routines
-
-Input Parameters:
-. level - level of debugging. Currently, either 0 (no checking) or 1
- (use MPL_trvalid at each MPL_trmalloc or MPL_trfree).
-+*/
-void MPL_trDebugLevel(int level)
-{
- TRdebugLevel = level;
-}
-
-/*+C
- MPL_trcalloc - Calloc with tracing
-
-Input Parameters:
-. nelem - number of elements to allocate
-. elsize - size of each element
-. lineno - line number where used. Use __LINE__ for this
-. fname - file name where used. Use __FILE__ for this
-
- Returns:
- Double aligned pointer to requested storage, or null if not
- available.
- +*/
-void *MPL_trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
-{
- void *p;
-
- p = MPL_trmalloc(nelem * elsize, lineno, fname);
- if (p) {
- memset(p, 0, nelem * elsize);
- }
- return p;
-}
-
-/*+C
- MPL_trrealloc - Realloc with tracing
-
-Input Parameters:
-. p - pointer to old storage
-. size - number of bytes to allocate
-. lineno - line number where used. Use __LINE__ for this
-. fname - file name where used. Use __FILE__ for this
-
- Returns:
- Double aligned pointer to requested storage, or null if not
- available. This implementation ALWAYS allocates new space and copies
- the contents into the new space.
- +*/
-void *MPL_trrealloc(void *p, size_t size, int lineno, const char fname[])
-{
- void *pnew;
- size_t nsize;
- TRSPACE *head = 0;
- char hexstring[MAX_ADDRESS_CHARS];
-
- /* We should really use the size of the old block... */
- if (p) {
- head = (TRSPACE *) (void*) ((char *)p - sizeof(TrSPACE));
- MPL_VG_MAKE_MEM_DEFINED(head, sizeof(*head)); /* mark defined before accessing contents */
- if (head->cookie != COOKIE_VALUE) {
- /* Damaged header */
- addrToHex(p, hexstring);
- MPL_error_printf("[%d] Block at address %s is corrupted; cannot realloc;\n"
- "may be block not allocated with MPL_trmalloc or MALLOC\n",
- world_rank, hexstring);
- return 0;
- }
- }
-
- /* Per the POSIX Standard, realloc() with zero size has two possible
- * results. In both cases the given pointer (p) is freed, and the function
- * will either return NULL or a unique value that can safely be passed to
- * free(). We return NULL here because that is more likely to catch
- * programming errors at higher levels. */
- if (!size) {
- MPL_trfree(p, lineno, fname);
- return NULL;
- }
-
- pnew = MPL_trmalloc(size, lineno, fname);
-
- if (p && pnew) {
- nsize = size;
- if (head->size < nsize)
- nsize = head->size;
- memcpy(pnew, p, nsize);
- MPL_trfree(p, lineno, fname);
- }
-
- /* Re-mark the head as NOACCESS before returning. */
- /* FIXME: Note head is no longer valid after MPL_trfree above */
- if (head) {
- MPL_VG_MAKE_MEM_NOACCESS(head, sizeof(*head));
- }
-
- /* If the MPL_trmalloc failed above pnew will be NULL, just like a
- * regular realloc failure. */
- return pnew;
-}
-
-/*+C
- MPL_trstrdup - Strdup with tracing
-
-Input Parameters:
-. str - string to duplicate
-. lineno - line number where used. Use __LINE__ for this
-. fname - file name where used. Use __FILE__ for this
-
- Returns:
- Pointer to copy of the input string.
- +*/
-void *MPL_trstrdup(const char *str, int lineno, const char fname[])
-{
- void *p;
- size_t len = strlen(str) + 1;
-
- p = MPL_trmalloc(len, lineno, fname);
- if (p) {
- memcpy(p, str, len);
- }
- return p;
-}
-
-#define TR_MAX_DUMP 100
-/*
- The following routine attempts to give useful information about the
- memory usage when an "out-of-memory" error is encountered. The rules are:
- If there are less than TR_MAX_DUMP blocks, output those.
- Otherwise, try to find multiple instances of the same routine/line #, and
- print a summary by number:
- file line number-of-blocks total-number-of-blocks
-
- We have to do a sort-in-place for this
- */
-
-/*
- Sort by file/line number. Do this without calling a system routine or
- allocating ANY space (space is being optimized here).
-
- We do this by first recursively sorting halves of the list and then
- merging them.
- */
-/* Forward refs for these local (hence static) routines */
-static TRSPACE *MPL_trImerge(TRSPACE *, TRSPACE *);
-static TRSPACE *MPL_trIsort(TRSPACE *, int);
-static void MPL_trSortBlocks(void);
-
-/* Merge two lists, returning the head of the merged list */
-static TRSPACE *MPL_trImerge(TRSPACE * l1, TRSPACE * l2)
-{
- TRSPACE *head = 0, *tail = 0;
- int sign;
- while (l1 && l2) {
- sign = strncmp(l1->fname, l2->fname, TR_FNAME_LEN - 1);
- if (sign > 0 || (sign == 0 && l1->lineno >= l2->lineno)) {
- if (head)
- tail->next = l1;
- else
- head = tail = l1;
- tail = l1;
- l1 = l1->next;
- }
- else {
- if (head)
- tail->next = l2;
- else
- head = tail = l2;
- tail = l2;
- l2 = l2->next;
- }
- }
- /* Add the remaining elements to the end */
- if (l1)
- tail->next = l1;
- if (l2)
- tail->next = l2;
-
- return head;
-}
-
-/* Sort head with n elements, returning the head */
-/* assumes that the MEMALLOC critical section is currently held */
-static TRSPACE *MPL_trIsort(TRSPACE * head, int n)
-{
- TRSPACE *p, *l1, *l2;
- int m, i;
-
- if (n <= 1)
- return head;
-
- /* This guarentees that m, n are both > 0 */
- m = n / 2;
- p = head;
- for (i = 0; i < m - 1; i++)
- p = p->next;
- /* p now points to the END of the first list */
- l2 = p->next;
- p->next = 0;
- l1 = MPL_trIsort(head, m);
- l2 = MPL_trIsort(l2, n - m);
- return MPL_trImerge(l1, l2);
-}
-
-/* assumes that the MEMALLOC critical section is currently held */
-static void MPL_trSortBlocks(void)
-{
- TRSPACE *head;
- int cnt;
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
- head = TRhead[1];
- cnt = 0;
- while (head) {
- cnt++;
- head = head->next;
- }
- TRhead[1] = MPL_trIsort(TRhead[1], cnt);
-}
-
-/* Takes sorted input and dumps as an aggregate */
-void MPL_trdumpGrouped(FILE * fp, int minid)
-{
- TRSPACE *head, *cur;
- int nblocks, nbytes;
-
- if (fp == 0)
- fp = stderr;
-
- if (TRhead[0] != TRHEAD_PRESENTINAL || TRhead[2] != TRHEAD_POSTSENTINAL) {
- MPL_error_printf("TRhead corrupted - likely memory overwrite.\n");
- return;
- }
-
- MPL_trSortBlocks();
- head = TRhead[1];
- cur = 0;
- while (head) {
- cur = head->next;
- if (head->id >= minid) {
- nblocks = 1;
- nbytes = (int) head->size;
- while (cur &&
- strncmp(cur->fname, head->fname, TR_FNAME_LEN - 1) == 0 &&
- cur->lineno == head->lineno) {
- nblocks++;
- nbytes += (int) cur->size;
- cur = cur->next;
- }
- fprintf(fp,
- "[%d] File %13s line %5d: %d bytes in %d allocation%c\n",
- world_rank, head->fname, head->lineno, nbytes, nblocks,
- (nblocks > 1) ? 's' : ' ');
- }
- head = cur;
- }
- fflush(fp);
-}
-
-void MPL_TrSetMaxMem(size_t size)
-{
- TRMaxMemAllow = size;
-}
-
-static void addrToHex(void *addr, char string[MAX_ADDRESS_CHARS])
-{
- int i;
- static char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
- };
- /* The following construction is used to keep compilers from issuing
- * a warning message about casting a pointer to an integer type */
- intptr_t iaddr = (intptr_t) ((char *) addr - (char *) 0);
-
- /* Initial location */
- i = sizeof(void *) * 2;
- string[i + 2] = 0;
- while (i) {
- string[i + 1] = hex[iaddr & 0xF];
- iaddr >>= 4;
- i--;
- }
- string[0] = '0';
- string[1] = 'x';
-}
diff --git a/src/pm/hydra/mpl/src/msg/Makefile.mk b/src/pm/hydra/mpl/src/msg/Makefile.mk
new file mode 100644
index 0000000..129fb7a
--- /dev/null
+++ b/src/pm/hydra/mpl/src/msg/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/msg/mpl_msg.c
diff --git a/src/mpl/src/mplmsg.c b/src/pm/hydra/mpl/src/msg/mpl_msg.c
similarity index 100%
rename from src/mpl/src/mplmsg.c
rename to src/pm/hydra/mpl/src/msg/mpl_msg.c
diff --git a/src/pm/hydra/mpl/src/shm/Makefile.mk b/src/pm/hydra/mpl/src/shm/Makefile.mk
new file mode 100644
index 0000000..a0c1bf0
--- /dev/null
+++ b/src/pm/hydra/mpl/src/shm/Makefile.mk
@@ -0,0 +1,12 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/shm/mpl_shm.c \
+ src/shm/mpl_shm_sysv.c \
+ src/shm/mpl_shm_mmap.c \
+ src/shm/mpl_shm_win.c
diff --git a/src/pm/hydra/mpl/src/shm/mpl_shm.c b/src/pm/hydra/mpl/src/shm/mpl_shm.c
new file mode 100644
index 0000000..0b18921
--- /dev/null
+++ b/src/pm/hydra/mpl/src/shm/mpl_shm.c
@@ -0,0 +1,112 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2006 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+/* Serialize a handle. A serialized handle is a string of
+ * characters that can be persisted by the caller. The serialized
+ * handle can be used to create another ref to the shared mem seg
+ * by deserializing it.
+ * str : A string of chars of len, str_len.
+ * If the function succeeds the serialized handle is copied
+ * into this user buffer
+ * hnd : Handle to shared memory
+ */
+int MPL_shm_hnd_serialize(char *str, MPL_shm_hnd_t hnd, int str_len)
+{
+ int rc = -1;
+ rc = MPLI_shm_ghnd_get_by_val(hnd, str, str_len);
+ return rc;
+}
+
+/* Deserialize a handle.
+ * str_hnd : A null-terminated string of len str_hnd_len that
+ * contains the serialized handle.
+ * hnd : If the call succeeds the user gets back a handle,hnd, to
+ * shared mem - deserialized from strhnd. This handle
+ * will refer to the shm seg referred by the serialized
+ * handle.
+ */
+int MPL_shm_hnd_deserialize(MPL_shm_hnd_t hnd, const char *str_hnd, size_t str_hnd_len)
+{
+ int rc = -1;
+ MPLI_shm_hnd_reset_val(hnd);
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%s", str_hnd);
+ rc = MPL_shm_seg_open(hnd, 0);
+ return rc;
+}
+
+/* Get a serialized handle by reference.
+ * Rationale: The user might only want to read the serialized view
+ * of the handle & hence not want to allocate a buffer for the ser view
+ * of the handle.
+ * str_ptr : Pointer to a string of chars to hold the serialized handle
+ * If the function succeeds, the pointer points to a
+ * serialized view of the handle.
+ * hnd : Handle to shm seg which has to be serialized
+ */
+
+int MPL_shm_hnd_get_serialized_by_ref(MPL_shm_hnd_t hnd, char **str_ptr)
+{
+ int mpi_errno = 0;
+ *str_ptr = (char *)MPLI_shm_ghnd_get_by_ref(hnd);
+ return mpi_errno;
+}
+
+/* Deserialize a handle by reference.
+ * Rationale : The user already has a serialized view of the handle.
+ * The user does not want to manage the view buffer any more
+ * & also needs to deserialize from the buffer.
+ * ser_hnd_ptr : Pointer to a serialized view of the handle. The user
+ * no longer needs to take care of this buffer.
+ * hnd : If the function succeeds this points to the deserialized
+ * handle.
+ */
+int MPL_shm_hnd_deserialize_by_ref(MPL_shm_hnd_t hnd, char **ser_hnd_ptr)
+{
+ int mpi_errno = 0;
+
+ MPLI_shm_hnd_reset_val(hnd);
+ MPLI_shm_ghnd_set_by_ref(hnd, *ser_hnd_ptr);
+
+ mpi_errno = MPL_shm_seg_open(hnd, 0);
+
+ return mpi_errno;
+}
+
+/* Initialize a shared memory handle
+ * hnd_ptr : A pointer to the shared memory handle
+ */
+
+int MPL_shm_hnd_init(MPL_shm_hnd_t *hnd_ptr)
+{
+ int rc = -1;
+ rc = MPLI_shm_hnd_alloc(hnd_ptr);
+ MPLI_shm_hnd_reset_val(*hnd_ptr);
+ return rc;
+}
+
+/* Finalize a shared memory handle.
+ * hnd_ptr : A pointer to the shm handle to be finalized.
+ * Any handle that is init has to be finalized.
+ */
+int MPL_shm_hnd_finalize(MPL_shm_hnd_t *hnd_ptr)
+{
+ int mpi_errno = 0;
+
+ /* A finalize can/should be called on an invalid handle
+ * Don't assert if we fail here ...
+ */
+ MPLI_shm_hnd_close(*hnd_ptr);
+ MPLI_shm_hnd_free(*hnd_ptr);
+
+ *hnd_ptr = MPL_SHM_HND_INVALID;
+
+ return mpi_errno;
+}
+
diff --git a/src/pm/hydra/mpl/src/shm/mpl_shm_mmap.c b/src/pm/hydra/mpl/src/shm/mpl_shm_mmap.c
new file mode 100644
index 0000000..84b787f
--- /dev/null
+++ b/src/pm/hydra/mpl/src/shm/mpl_shm_mmap.c
@@ -0,0 +1,181 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_MMAP_SHM
+
+#include <fcntl.h>
+#include <sys/mman.h>
+#if defined (MPL_HAVE_MKSTEMP) && defined (MPL_NEEDS_MKSTEMP_DECL)
+extern int mkstemp(char *template);
+#endif
+
+inline int MPLI_shm_lhnd_close(MPL_shm_hnd_t hnd)
+{
+ MPLI_shm_lhnd_t lhnd = MPLI_SHM_LHND_INVALID;
+ lhnd = MPLI_shm_lhnd_get(hnd);
+ if (lhnd != MPLI_SHM_LHND_INVALID) {
+ if (close(lhnd) == 0) {
+ MPLI_shm_lhnd_set(hnd, MPLI_SHM_LHND_INIT_VAL);
+ } else {
+ /* close() failed */
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+/* FIXME: Pass (void **)shm_addr_ptr instead of (char **) shm_addr_ptr
+ * since a util func should be generic
+ * Currently not passing (void **) to reduce warning in nemesis
+ * code which passes (char **) ptrs to be attached to a seg
+ */
+
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ MPLI_shm_lhnd_t lhnd = -1, rc = -1;
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ char dev_shm_fname[] = "/dev/shm/mpich_shar_tmpXXXXXX";
+ char tmp_fname[] = "/tmp/mpich_shar_tmpXXXXXX";
+ char *chosen_fname = NULL;
+
+ chosen_fname = dev_shm_fname;
+ lhnd = mkstemp(chosen_fname);
+ if(lhnd == -1){
+ chosen_fname = tmp_fname;
+ lhnd = mkstemp(chosen_fname);
+ }
+
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ rc = (MPLI_shm_lhnd_t)lseek(lhnd, seg_sz - 1, SEEK_SET);
+ do{
+ rc = (int) write(lhnd, "", 1);
+ }while((rc == -1) && (errno == EINTR));
+
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%s", chosen_fname);
+ }
+ else{
+ /* Open an existing shared memory seg */
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ lhnd = open(MPLI_shm_ghnd_get_by_ref(hnd), O_RDWR);
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ void *buf_ptr = NULL;
+ buf_ptr = mmap(NULL, seg_sz, PROT_READ | PROT_WRITE,
+ MAP_SHARED, MPLI_shm_lhnd_get(hnd), 0);
+ *shm_addr_ptr = (char*)buf_ptr;
+ }
+
+ /* FIXME: Close local handle only when closing the shm handle */
+ if(MPLI_shm_lhnd_is_valid(hnd)){
+ rc = MPLI_shm_lhnd_close(hnd);
+ }
+ return rc;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = munmap(*shm_addr_ptr, seg_sz);
+ *shm_addr_ptr = NULL;
+
+ return rc;
+}
+
+/* Remove an existing SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_remove
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ int rc = -1;
+
+ rc = unlink(MPLI_shm_ghnd_get_by_ref(hnd));
+
+ return rc;
+}
+
+#endif /* MPL_USE_MMAP_SHM */
diff --git a/src/pm/hydra/mpl/src/shm/mpl_shm_sysv.c b/src/pm/hydra/mpl/src/shm/mpl_shm_sysv.c
new file mode 100644
index 0000000..2213416
--- /dev/null
+++ b/src/pm/hydra/mpl/src/shm/mpl_shm_sysv.c
@@ -0,0 +1,154 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_SYSV_SHM
+
+#include <sys/stat.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ int rc = -1;
+ int lhnd = -1;
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ lhnd = shmget(IPC_PRIVATE, seg_sz, IPC_CREAT | S_IRWXU);
+ MPL_shm_lhnd_set(hnd, lhnd);
+ rc = MPLI_shm_ghnd_alloc(hnd);
+ rc = MPLI_shm_ghnd_set_by_val(hnd, "%d", lhnd);
+ }
+ else{
+ /* Open an existing shared memory seg */
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ lhnd = atoi(MPLI_shm_ghnd_get_by_ref(hnd));
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ /* Attach to shared mem seg */
+ *shm_addr_ptr = shmat(MPLI_shm_lhnd_get(hnd), NULL, 0x0);
+ }
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment
+ * hnd : Handle to the shm segment
+ * shm_addr_ptr : Pointer to the shm address to detach
+ * seg_sz : Size of shm segment
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_detach(MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = shmdt(*shm_addr_ptr);
+ *shm_addr_ptr = NULL;
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Remove a shared memory segment
+ * hnd : Handle to the shared memory segment to be removed
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_remove
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPL_shm_seg_remove(MPL_shm_hnd_t hnd)
+{
+ struct shmid_ds ds;
+ int rc = -1;
+
+ rc = shmctl(MPL_shm_lhnd_get(hnd), IPC_RMID, &ds);
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+#endif /* MPL_USE_SYSV_SHM */
diff --git a/src/pm/hydra/mpl/src/shm/mpl_shm_win.c b/src/pm/hydra/mpl/src/shm/mpl_shm_win.c
new file mode 100644
index 0000000..e41556e
--- /dev/null
+++ b/src/pm/hydra/mpl/src/shm/mpl_shm_win.c
@@ -0,0 +1,139 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/* vim: set ft=c.mpich : */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#ifdef MPL_USE_NT_SHM
+
+#include<winsock2.h>
+#include<windows.h>
+
+/* A template function which creates/attaches shm seg handle
+ * to the shared memory. Used by user-exposed functions below
+ */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_create_attach_templ
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_create_attach_templ(
+ MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset, int flag)
+{
+ HANDLE lhnd = INVALID_HANDLE_VALUE;
+ int rc = -1;
+ ULARGE_INTEGER seg_sz_large;
+ seg_sz_large.QuadPart = seg_sz;
+
+ if(!MPLI_shm_ghnd_is_valid(hnd)){
+ rc = MPLI_shm_ghnd_set_uniq(hnd);
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_CREATE){
+ lhnd = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
+ PAGE_READWRITE, seg_sz_large.HighPart, seg_sz_large.LowPart,
+ MPLI_shm_ghnd_get_by_ref(hnd));
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ else{
+ if(!MPLI_shm_lhnd_is_valid(hnd)){
+ /* Strangely OpenFileMapping() returns NULL on error! */
+ lhnd = OpenFileMapping(FILE_MAP_WRITE, FALSE,
+ MPLI_shm_ghnd_get_by_ref(hnd));
+
+ MPLI_shm_lhnd_set(hnd, lhnd);
+ }
+ }
+
+ if(flag & MPLI_SHM_FLAG_SHM_ATTACH){
+ *shm_addr_ptr = (char *)MapViewOfFile(MPLI_shm_lhnd_get(hnd),
+ FILE_MAP_WRITE, 0, offset, 0);
+ }
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+/* Create new SHM segment
+ * hnd : A "init"ed shared memory handle
+ * seg_sz : Size of shared memory segment to be created
+ */
+int MPL_shm_seg_create(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0,
+ MPLI_SHM_FLAG_SHM_CREATE);
+ return rc;
+}
+
+/* Open an existing SHM segment
+ * hnd : A shm handle with a valid global handle
+ * seg_sz : Size of shared memory segment to open
+ * Currently only using internally within wrapper funcs
+ */
+int MPL_shm_seg_open(MPL_shm_hnd_t hnd, intptr_t seg_sz)
+{
+ int rc = -1;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, NULL, 0, MPLI_SHM_FLAG_CLR);
+ return rc;
+}
+
+/* Create new SHM segment and attach to it
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_create_and_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz,
+ char **shm_addr_ptr, int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_CREATE | MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+
+/* Attach to an existing SHM segment
+ * hnd : A "init"ed shared mem handle
+ * seg_sz: Size of shared mem segment
+ * shm_addr_ptr : Pointer to shared memory address to attach
+ * the shared mem segment
+ * offset : Offset to attach the shared memory address to
+ */
+int MPL_shm_seg_attach(MPL_shm_hnd_t hnd, intptr_t seg_sz, char **shm_addr_ptr,
+ int offset)
+{
+ int rc = 0;
+ rc = MPL_shm_seg_create_attach_templ(hnd, seg_sz, shm_addr_ptr, offset,
+ MPLI_SHM_FLAG_SHM_ATTACH);
+ return rc;
+}
+/* Detach from an attached SHM segment */
+#undef FUNCNAME
+#define FUNCNAME MPL_shm_seg_detach
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPL_shm_seg_detach(
+ MPL_shm_hnd_t hnd, char **shm_addr_ptr, intptr_t seg_sz)
+{
+ int rc = -1;
+
+ rc = UnmapViewOfFile(*shm_addr_ptr);
+ *shm_addr_ptr = NULL;
+
+fn_exit:
+ return rc;
+fn_fail:
+ goto fn_exit;
+}
+
+
+#endif /* MPL_USE_NT_SHM */
diff --git a/src/pm/hydra/mpl/src/sock/Makefile.mk b/src/pm/hydra/mpl/src/sock/Makefile.mk
new file mode 100644
index 0000000..3e5d340
--- /dev/null
+++ b/src/pm/hydra/mpl/src/sock/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/sock/mpl_sock.c
diff --git a/src/mpl/src/mplsock.c b/src/pm/hydra/mpl/src/sock/mpl_sock.c
similarity index 100%
rename from src/mpl/src/mplsock.c
rename to src/pm/hydra/mpl/src/sock/mpl_sock.c
diff --git a/src/pm/hydra/mpl/src/str/Makefile.mk b/src/pm/hydra/mpl/src/str/Makefile.mk
new file mode 100644
index 0000000..48492b1
--- /dev/null
+++ b/src/pm/hydra/mpl/src/str/Makefile.mk
@@ -0,0 +1,7 @@
+# -*- Mode: Makefile; -*-
+#
+# (C) 2016 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+lib at MPLLIBNAME@_la_SOURCES += src/str/mpl_str.c src/str/mpl_argstr.c
diff --git a/src/pm/hydra/mpl/src/str/mpl_argstr.c b/src/pm/hydra/mpl/src/str/mpl_argstr.c
new file mode 100644
index 0000000..96366fa
--- /dev/null
+++ b/src/pm/hydra/mpl/src/str/mpl_argstr.c
@@ -0,0 +1,880 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
+ *
+ * Copyright (C) 1997 University of Chicago.
+ * See COPYRIGHT notice in top-level directory.
+ */
+
+#include "mpl.h"
+
+#ifdef MPL_HAVE_MATH_H
+#include <math.h>
+#endif
+/* ctype is needed for isspace and isascii (isspace is only defined for
+ values on which isascii returns true). */
+#include <ctype.h>
+
+static int encode_buffer(char *dest, int dest_length, const char *src,
+ int src_length, int *num_encoded)
+{
+ int num_used;
+ int n = 0;
+ if (src_length == 0)
+ {
+ if (dest_length > 2)
+ {
+ *dest = MPL_STR_QUOTE_CHAR;
+ dest++;
+ *dest = MPL_STR_QUOTE_CHAR;
+ dest++;
+ *dest = '\0';
+ *num_encoded = 0;
+ return MPL_STR_SUCCESS;
+ }
+ else
+ {
+ return MPL_STR_TRUNCATED;
+ }
+ }
+ while (src_length && dest_length)
+ {
+ num_used = MPL_snprintf(dest, dest_length, "%02X",
+ (unsigned char)*src);
+ if (num_used < 0)
+ {
+ *num_encoded = n;
+ return MPL_STR_TRUNCATED;
+ }
+ /*MPL_DBG_MSG_FMT(STRING,VERBOSE,(MPL_DBG_FDEST," %c = %c%c",
+ ch, dest[0], dest[1]));*/
+ dest += num_used;
+ dest_length -= num_used;
+ src++;
+ n++;
+ src_length--;
+ }
+ *num_encoded = n;
+ return src_length ? MPL_STR_TRUNCATED : MPL_STR_SUCCESS;
+}
+
+static int decode_buffer(const char *str, char *dest, int length,
+ int *num_decoded)
+{
+ char hex[3];
+ int value;
+ int n = 0;
+
+ if (str == NULL || dest == NULL || num_decoded == NULL)
+ return MPL_STR_FAIL;
+ if (length < 1)
+ {
+ *num_decoded = 0;
+ if (*str == '\0')
+ return MPL_STR_SUCCESS;
+ return MPL_STR_TRUNCATED;
+ }
+ if (*str == MPL_STR_QUOTE_CHAR)
+ str++;
+ hex[2] = '\0';
+ while (*str != '\0' &&
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_QUOTE_CHAR &&
+ length)
+ {
+ hex[0] = *str;
+ str++;
+ hex[1] = *str;
+ str++;
+ sscanf(hex, "%X", &value);
+ *dest = (char)value;
+ /*MPL_DBG_MSG_FMT(STRING,VERBOSE,(MPL_DBG_FDEST," %s = %c",
+ hex, *dest));*/
+ dest++;
+ n++;
+ length--;
+ }
+ *num_decoded = n;
+ if (length == 0)
+ {
+ if (*str != '\0' &&
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_QUOTE_CHAR)
+ return MPL_STR_TRUNCATED;
+ }
+ return MPL_STR_SUCCESS;
+}
+
+static const char * first_token(const char *str)
+{
+ if (str == NULL)
+ return NULL;
+ /* isspace is defined only if isascii is true */
+ while (/*isascii(*str) && isspace(*str)*/ *str == MPL_STR_SEPAR_CHAR)
+ str++;
+ if (*str == '\0')
+ return NULL;
+ return str;
+}
+
+static const char * next_token(const char *str)
+{
+ if (str == NULL)
+ return NULL;
+ str = first_token(str);
+ if (str == NULL)
+ return NULL;
+ if (*str == MPL_STR_QUOTE_CHAR)
+ {
+ /* move over string */
+ str++; /* move over the first quote */
+ if (*str == '\0')
+ return NULL;
+ while (*str != MPL_STR_QUOTE_CHAR)
+ {
+ /* move until the last quote, ignoring escaped quotes */
+ if (*str == MPL_STR_ESCAPE_CHAR)
+ {
+ str++;
+ if (*str == MPL_STR_QUOTE_CHAR)
+ str++;
+ }
+ else
+ {
+ str++;
+ }
+ if (*str == '\0')
+ return NULL;
+ }
+ str++; /* move over the last quote */
+ }
+ else
+ {
+ if (*str == MPL_STR_DELIM_CHAR)
+ {
+ /* move over the DELIM token */
+ str++;
+ }
+ else
+ {
+ /* move over literal */
+ while (/*(isascii(*str) &&
+ !isspace(*str)) &&*/
+ *str != MPL_STR_SEPAR_CHAR &&
+ *str != MPL_STR_DELIM_CHAR &&
+ *str != '\0')
+ str++;
+ }
+ }
+ return first_token(str);
+}
+
+static int compare_token(const char *token, const char *str)
+{
+ if (token == NULL || str == NULL)
+ return -1;
+
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ /* compare quoted strings */
+ token++; /* move over the first quote */
+ /* compare characters until reaching the end of the string or the
+ end quote character */
+ for(;;)
+ {
+ if (*token == MPL_STR_ESCAPE_CHAR)
+ {
+ if (*(token+1) == MPL_STR_QUOTE_CHAR)
+ {
+ /* move over the escape character if the next character
+ is a quote character */
+ token++;
+ }
+ if (*token != *str)
+ break;
+ }
+ else
+ {
+ if (*token != *str || *token == MPL_STR_QUOTE_CHAR)
+ break;
+ }
+ if (*str == '\0')
+ break;
+ token++;
+ str++;
+ }
+ if (*str == '\0' && *token == MPL_STR_QUOTE_CHAR)
+ return 0;
+ if (*token == MPL_STR_QUOTE_CHAR)
+ return 1;
+ if (*str < *token)
+ return -1;
+ return 1;
+ }
+
+ /* compare DELIM token */
+ if (*token == MPL_STR_DELIM_CHAR)
+ {
+ if (*str == MPL_STR_DELIM_CHAR)
+ {
+ str++;
+ if (*str == '\0')
+ return 0;
+ return 1;
+ }
+ if (*token < *str)
+ return -1;
+ return 1;
+ }
+
+ /* compare literals */
+ while (*token == *str &&
+ *str != '\0' &&
+ *token != MPL_STR_DELIM_CHAR &&
+ (*token != MPL_STR_SEPAR_CHAR) )
+ {
+ token++;
+ str++;
+ }
+ if ( (*str == '\0') &&
+ (*token == MPL_STR_DELIM_CHAR ||
+ (*token == MPL_STR_SEPAR_CHAR) || *token == '\0') )
+ return 0;
+ if (*token == MPL_STR_DELIM_CHAR ||
+ (*token == MPL_STR_SEPAR_CHAR) || *token < *str)
+ return -1;
+ return 1;
+}
+
+
+static int token_copy(const char *token, char *str, int maxlen)
+{
+ /* check parameters */
+ if (token == NULL || str == NULL)
+ return MPL_STR_FAIL;
+
+ /* check special buffer lengths */
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+ if (maxlen == 1)
+ {
+ *str = '\0';
+ return (str[0] == '\0') ? MPL_STR_SUCCESS : MPL_STR_TRUNCATED;
+ }
+
+ /* cosy up to the token */
+ token = first_token(token);
+ if (token == NULL)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+
+ if (*token == MPL_STR_DELIM_CHAR)
+ {
+ /* copy the special deliminator token */
+ str[0] = MPL_STR_DELIM_CHAR;
+ str[1] = '\0';
+ return MPL_STR_SUCCESS;
+ }
+
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ /* quoted copy */
+ token++; /* move over the first quote */
+ do
+ {
+ if (*token == MPL_STR_ESCAPE_CHAR)
+ {
+ if (*(token+1) == MPL_STR_QUOTE_CHAR)
+ token++;
+ *str = *token;
+ }
+ else
+ {
+ if (*token == MPL_STR_QUOTE_CHAR)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+ *str = *token;
+ }
+ str++;
+ token++;
+ maxlen--;
+ } while (maxlen);
+ /* we've run out of destination characters so back up and null
+ terminate the string */
+ str--;
+ *str = '\0';
+ return MPL_STR_TRUNCATED;
+ }
+
+ /* literal copy */
+ while (*token != MPL_STR_DELIM_CHAR &&
+ (*token != MPL_STR_SEPAR_CHAR) && *token != '\0' && maxlen)
+ {
+ *str = *token;
+ str++;
+ token++;
+ maxlen--;
+ }
+ if (maxlen)
+ {
+ *str = '\0';
+ return MPL_STR_SUCCESS;
+ }
+ str--;
+ *str = '\0';
+ return MPL_STR_TRUNCATED;
+}
+
+/*@ MPL_str_get_string_arg - Extract an option from a string with a
+ maximum length
+
+Input Parameters:
++ str - Source string
+. key - key
+- maxlen - Maximum total length of 'val'
+
+Output Parameters:
+. val - output string
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_string_arg(const char *str, const char *flag, char *val,
+ int maxlen)
+{
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+
+ /* line up with the first token */
+ str = first_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+
+ /* This loop will match the first instance of "flag = value" in the string. */
+ do
+ {
+ if (compare_token(str, flag) == 0)
+ {
+ str = next_token(str);
+ if (compare_token(str, MPL_STR_DELIM_STR) == 0)
+ {
+ str = next_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+ return token_copy(str, val, maxlen);
+ }
+ }
+ else
+ {
+ str = next_token(str);
+ }
+ } while (str);
+ return MPL_STR_FAIL;
+}
+
+/*@ MPL_str_get_binary_arg - Extract an option from a string with a maximum
+ length
+
+Input Parameters:
++ str - Source string
+. key - key
+- maxlen - Maximum total length of 'buffer'
+
+Output Parameters:
++ buffer - output buffer
+- out_length - output length
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string and decodes
+ the value
+ back to binary data. The data must have been encoded with
+ MPL_str_add_binary_arg.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_binary_arg(const char *str, const char *flag, char *buffer,
+ int maxlen, int *out_length)
+{
+ if (maxlen < 1)
+ return MPL_STR_FAIL;
+
+ /* line up with the first token */
+ str = first_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+
+ /* This loop will match the first instance of "flag = value" in the string. */
+ do
+ {
+ if (compare_token(str, flag) == 0)
+ {
+ str = next_token(str);
+ if (compare_token(str, MPL_STR_DELIM_STR) == 0)
+ {
+ str = next_token(str);
+ if (str == NULL)
+ return MPL_STR_FAIL;
+ return decode_buffer(str, buffer, maxlen, out_length);
+ }
+ }
+ else
+ {
+ str = next_token(str);
+ }
+ } while (str);
+ return MPL_STR_FAIL;
+}
+
+/*@ MPL_str_get_int_arg - Extract an option from a string
+
+Input Parameters:
++ str - Source string
+- key - key
+
+Output Parameters:
+. val_ptr - pointer to the output integer
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine searches for a "key = value" entry in a string and decodes the value
+ back to an int.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_int_arg(const char *str, const char *flag, int *val_ptr)
+{
+ int result;
+ char int_str[12];
+
+ result = MPL_str_get_string_arg(str, flag, int_str, 12);
+ if (result == MPL_STR_SUCCESS)
+ {
+ *val_ptr = atoi(int_str);
+ return MPL_STR_SUCCESS;
+ }
+ return result;
+}
+
+/* quoted_printf does not NULL terminate the string if maxlen is reached */
+static int quoted_printf(char *str, int maxlen, const char *val)
+{
+ int count = 0;
+ if (maxlen < 1)
+ return 0;
+ *str = MPL_STR_QUOTE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ while (maxlen)
+ {
+ if (*val == '\0')
+ break;
+ if (*val == MPL_STR_QUOTE_CHAR)
+ {
+ *str = MPL_STR_ESCAPE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ if (maxlen == 0)
+ return count;
+ }
+ *str = *val;
+ str++;
+ maxlen--;
+ count++;
+ val++;
+ }
+ if (maxlen)
+ {
+ *str = MPL_STR_QUOTE_CHAR;
+ str++;
+ maxlen--;
+ count++;
+ if (maxlen == 0)
+ return count;
+ *str = '\0';
+ }
+ return count;
+}
+
+/*@ MPL_str_add_string - Add a string to a string
+
+Input Parameters:
++ str_ptr - pointer to the destination string
+. maxlen_ptr - pointer to the maximum length of '*str_ptr'
+- val - string to add
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is decremented by the amount str_ptr is incremented
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds a string to a string in such a way that
+ MPL_str_get_string can
+ retreive the same string back. It takes into account spaces and quote
+ characters.
+ The string pointer is updated to the start of the next string in the
+ string and maxlen is updated accordingly.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_string(char **str_ptr, int *maxlen_ptr, const char *val)
+{
+ int num_chars;
+ char *str;
+ int maxlen;
+
+ str = *str_ptr;
+ maxlen = *maxlen_ptr;
+
+ if (strchr(val, MPL_STR_SEPAR_CHAR) ||
+ strchr(val, MPL_STR_QUOTE_CHAR) ||
+ strchr(val, MPL_STR_DELIM_CHAR))
+ {
+ num_chars = quoted_printf(str, maxlen, val);
+ if (num_chars == maxlen)
+ {
+ /* truncation, cleanup string */
+ *str = '\0';
+ return -1;
+ }
+ if (num_chars < maxlen - 1)
+ {
+ str[num_chars] = MPL_STR_SEPAR_CHAR;
+ str[num_chars+1] = '\0';
+ num_chars++;
+ }
+ else
+ {
+ str[num_chars] = '\0';
+ }
+ }
+ else
+ {
+ if (*val == '\0')
+ {
+ num_chars = MPL_snprintf(str, maxlen,
+ MPL_STR_QUOTE_STR MPL_STR_QUOTE_STR/*"\"\""*/);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(str, maxlen, "%s%c", val,
+ MPL_STR_SEPAR_CHAR);
+ }
+ if (num_chars == maxlen)
+ {
+ *str = '\0';
+ return -1;
+ }
+ }
+ *str_ptr += num_chars;
+ *maxlen_ptr -= num_chars;
+ return 0;
+}
+
+/*@ MPL_str_get_string - Get the next string from a string
+
+Input Parameters:
++ str_ptr - pointer to the destination string
+- maxlen_ptr - pointer to the maximum length of '*str_ptr'
+
+Output Parameters:
++ str_ptr - location of the next string
+- val - location to store the string
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Return Value:
+ The return value is 0 for success, -1 for insufficient buffer space, and
+ 1 for failure.
+
+ Notes:
+ This routine gets a string that was previously added by
+ MPL_str_add_string.
+ It takes into account spaces and quote characters. The string pointer is
+ updated to the start of the next string in the string.
+
+ Module:
+ Utility
+ @*/
+int MPL_str_get_string(char **str_ptr, char *val, int maxlen)
+{
+ int result;
+ char *str;
+
+ if (str_ptr == NULL)
+ {
+ return -2;
+ }
+
+ str = *str_ptr;
+
+ if (maxlen < 1)
+ {
+ return 0;
+ }
+
+ /* line up with the first token */
+ str = (char*)first_token(str);
+ if (str == NULL)
+ {
+ return 0;
+ }
+
+ /* copy the token */
+ result = token_copy(str, val, maxlen);
+ if (result == MPL_STR_SUCCESS)
+ {
+ str = (char*)next_token(str);
+ *str_ptr = str;
+ return 0;
+ }
+ else if (result == MPL_STR_TRUNCATED)
+ {
+ return -1;
+ }
+
+ /* failure */
+ return -2;
+}
+
+/*@ MPL_str_add_string_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+- val - input string
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds a string option to a string in the form "key = value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ const char *val)
+{
+ int num_chars;
+ char **orig_str_ptr;
+
+ if (maxlen_ptr == NULL)
+ return MPL_STR_FAIL;
+
+ orig_str_ptr = str_ptr;
+
+ if (*maxlen_ptr < 1)
+ return MPL_STR_FAIL;
+
+ /* add the flag */
+ if (strstr(flag, MPL_STR_SEPAR_STR) || strstr(flag, MPL_STR_DELIM_STR) ||
+ flag[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
+ }
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 1)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+ *str_ptr = *str_ptr + num_chars;
+
+ /* add the deliminator character */
+ **str_ptr = MPL_STR_DELIM_CHAR;
+ *str_ptr = *str_ptr + 1;
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ /* add the value string */
+ if (strstr(val, MPL_STR_SEPAR_STR) || strstr(val, MPL_STR_DELIM_STR) ||
+ val[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, val);
+ }
+ else
+ {
+ if (*val == '\0')
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr,
+ MPL_STR_QUOTE_STR MPL_STR_QUOTE_STR/*"\"\""*/);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", val);
+ }
+ }
+ *str_ptr = *str_ptr + num_chars;
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 2)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **orig_str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+
+ /* add the trailing space */
+ **str_ptr = MPL_STR_SEPAR_CHAR;
+ *str_ptr = *str_ptr + 1;
+ **str_ptr = '\0';
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ return MPL_STR_SUCCESS;
+}
+
+/*@ MPL_str_add_int_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+- val - input integer
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine adds an integer option to a string in the form "key = value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ int val)
+{
+ char val_str[12];
+ MPL_snprintf(val_str, 12, "%d", val);
+ return MPL_str_add_string_arg(str_ptr, maxlen_ptr, flag, val_str);
+}
+
+/*@ MPL_str_add_binary_arg - Add an option to a string with a maximum length
+
+Input Parameters:
++ str_ptr - Pointer to the destination string
+. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
+. key - key
+. val - input data
+- length - length of the input data
+
+Output Parameters:
++ str_ptr - The string pointer is updated to the next available location in
+ the string
+- maxlen_ptr - maxlen is reduced by the number of characters written
+
+ Return value:
+ MPL_STR_SUCCESS, MPL_STR_NOMEM, MPL_STR_FAIL
+
+ Notes:
+ This routine encodes binary data into a string option in the form
+ "key = encoded_value".
+
+ Module:
+ Utility
+ @*/
+int MPL_str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
+ const char *buffer, int length)
+{
+ int result;
+ int num_chars;
+ char **orig_str_ptr;
+
+ if (maxlen_ptr == NULL)
+ return MPL_STR_FAIL;
+
+ orig_str_ptr = str_ptr;
+
+ if (*maxlen_ptr < 1)
+ return MPL_STR_FAIL;
+
+ /* add the flag */
+ if (strstr(flag, MPL_STR_SEPAR_STR) || strstr(flag, MPL_STR_DELIM_STR) ||
+ flag[0] == MPL_STR_QUOTE_CHAR)
+ {
+ num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
+ }
+ else
+ {
+ num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
+ }
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 1)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+ *str_ptr = *str_ptr + num_chars;
+
+ /* add the deliminator character */
+ **str_ptr = MPL_STR_DELIM_CHAR;
+ *str_ptr = *str_ptr + 1;
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ /* add the value string */
+ result = encode_buffer(*str_ptr, *maxlen_ptr, buffer, length, &num_chars);
+ if (result != MPL_STR_SUCCESS)
+ {
+ **orig_str_ptr = '\0';
+ return result;
+ }
+ num_chars = num_chars * 2; /* the encoding function turns one source
+ character into two destination characters */
+ *str_ptr = *str_ptr + num_chars;
+ *maxlen_ptr = *maxlen_ptr - num_chars;
+ if (*maxlen_ptr < 2)
+ {
+ MPL_DBG_MSG_S(MPIR_DBG_STRING,VERBOSE,
+ "partial argument added to string: '%s'", *str_ptr);
+ **orig_str_ptr = '\0';
+ return MPL_STR_NOMEM;
+ }
+
+ /* add the trailing space */
+ **str_ptr = MPL_STR_SEPAR_CHAR;
+ *str_ptr = *str_ptr + 1;
+ **str_ptr = '\0';
+ *maxlen_ptr = *maxlen_ptr - 1;
+
+ return MPL_STR_SUCCESS;
+}
diff --git a/src/pm/hydra/mpl/src/str/mpl_str.c b/src/pm/hydra/mpl/src/str/mpl_str.c
new file mode 100644
index 0000000..0595b95
--- /dev/null
+++ b/src/pm/hydra/mpl/src/str/mpl_str.c
@@ -0,0 +1,366 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+#if !defined MPL_HAVE_SNPRINTF
+int MPL_snprintf(char *str, size_t size, mpl_const char *format, ...)
+{
+ int n;
+ mpl_const char *p;
+ char *out_str = str;
+ va_list list;
+
+ va_start(list, format);
+
+ p = format;
+ while (*p && size > 0) {
+ char *nf;
+
+ nf = strchr(p, '%');
+ if (!nf) {
+ /* No more format characters */
+ while (size-- > 0 && *p) {
+ *out_str++ = *p++;
+ }
+ }
+ else {
+ int nc;
+ int width = -1;
+
+ /* Copy until nf */
+ while (p < nf && size-- > 0) {
+ *out_str++ = *p++;
+ }
+ /* p now points at nf */
+ /* Handle the format character */
+ nc = nf[1];
+ if (isdigit(nc)) {
+ /* Get the field width */
+ /* FIXME : Assumes ASCII */
+ width = nc - '0';
+ p = nf + 2;
+ while (*p && isdigit(*p)) {
+ width = 10 * width + (*p++ - '0');
+ }
+ /* When there is no longer a digit, get the format
+ * character */
+ nc = *p++;
+ }
+ else {
+ /* Skip over the format string */
+ p += 2;
+ }
+
+ switch (nc) {
+ case '%':
+ *out_str++ = '%';
+ size--;
+ break;
+
+ case 'd':
+ {
+ int val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of integer type */
+ val = va_arg(list, int);
+ sprintf(tmp, "%d", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 'x':
+ {
+ int val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of integer type */
+ val = va_arg(list, int);
+ sprintf(tmp, "%x", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 'p':
+ {
+ void *val;
+ char tmp[20];
+ char *t = tmp;
+ /* Get the argument, of pointer type */
+ val = va_arg(list, void *);
+ sprintf(tmp, "%p", val);
+ if (width > 0) {
+ size_t tmplen = strlen(tmp);
+ /* If a width was specified, pad with spaces on the
+ * left (on the right if %-3d given; not implemented yet */
+ while (size-- > 0 && width-- > tmplen)
+ *out_str++ = ' ';
+ }
+ while (size-- > 0 && *t) {
+ *out_str++ = *t++;
+ }
+ }
+ break;
+
+ case 's':
+ {
+ char *s_arg;
+ /* Get the argument, of pointer to char type */
+ s_arg = va_arg(list, char *);
+ while (size-- > 0 && s_arg && *s_arg) {
+ *out_str++ = *s_arg++;
+ }
+ }
+ break;
+
+ default:
+ /* Error, unknown case */
+ return -1;
+ break;
+ }
+ }
+ }
+
+ va_end(list);
+
+ if (size-- > 0)
+ *out_str++ = '\0';
+
+ n = (int) (out_str - str);
+ return n;
+}
+#endif /* MPL_HAVE_SNPRINTF */
+
+/*@
+ MPL_strdup - Duplicate a string
+
+ Synopsis:
+.vb
+ char *MPL_strdup(mpl_const char *str)
+.ve
+
+Input Parameters:
+. str - null-terminated string to duplicate
+
+ Return value:
+ A pointer to a copy of the string, including the terminating null. A
+ null pointer is returned on error, such as out-of-memory.
+
+ Module:
+ Utility
+ @*/
+#if !defined MPL_HAVE_STRDUP
+char *MPL_strdup(mpl_const char *str)
+{
+ char *mpl_restrict p = (char *) malloc(strlen(str) + 1);
+ mpl_const char *mpl_restrict in_p = str;
+ char *save_p;
+
+ save_p = p;
+ if (p) {
+ while (*in_p) {
+ *p++ = *in_p++;
+ }
+ *p = 0;
+ }
+ return save_p;
+}
+#endif /* MPL_HAVE_STRDUP */
+
+/*
+ * MPL_strncpy - Copy at most n characters. Stop once a null is reached.
+ *
+ * This is different from strncpy, which null pads so that exactly
+ * n characters are copied. The strncpy behavior is correct for many
+ * applications because it guarantees that the string has no uninitialized
+ * data.
+ *
+ * If n characters are copied without reaching a null, return an error.
+ * Otherwise, return 0.
+ *
+ * Question: should we provide a way to request the length of the string,
+ * since we know it?
+ */
+/*@ MPL_strncpy - Copy a string with a maximum length
+
+Input Parameters:
++ instr - String to copy
+- maxlen - Maximum total length of 'outstr'
+
+Output Parameters:
+. outstr - String to copy into
+
+ Notes:
+ This routine is the routine that you wish 'strncpy' was. In copying
+ 'instr' to 'outstr', it stops when either the end of 'outstr' (the
+ null character) is seen or the maximum length 'maxlen' is reached.
+ Unlike 'strncpy', it does not add enough nulls to 'outstr' after
+ copying 'instr' in order to move precisely 'maxlen' characters.
+ Thus, this routine may be used anywhere 'strcpy' is used, without any
+ performance cost related to large values of 'maxlen'.
+
+ If there is insufficient space in the destination, the destination is
+ still null-terminated, to avoid potential failures in routines that neglect
+ to check the error code return from this routine.
+
+ Module:
+ Utility
+ @*/
+int MPL_strncpy(char *dest, const char *src, size_t n)
+{
+ char *mpl_restrict d_ptr = dest;
+ const char *mpl_restrict s_ptr = src;
+ register int i;
+
+ if (n == 0)
+ return 0;
+
+ i = (int) n;
+ while (*s_ptr && i-- > 0) {
+ *d_ptr++ = *s_ptr++;
+ }
+
+ if (i > 0) {
+ *d_ptr = 0;
+ return 0;
+ }
+ else {
+ /* Force a null at the end of the string (gives better safety
+ * in case the user fails to check the error code) */
+ dest[n - 1] = 0;
+ /* We may want to force an error message here, at least in the
+ * debugging version */
+ /*printf("failure in copying %s with length %d\n", src, n); */
+ return 1;
+ }
+}
+
+/* replacement for strsep. Conforms to the following description (from the OS X
+ * 10.6 man page):
+ *
+ * The strsep() function locates, in the string referenced by *stringp, the first occur-
+ * rence of any character in the string delim (or the terminating `\0' character) and
+ * replaces it with a `\0'. The location of the next character after the delimiter
+ * character (or NULL, if the end of the string was reached) is stored in *stringp. The
+ * original value of *stringp is returned.
+ *
+ * An ``empty'' field (i.e., a character in the string delim occurs as the first charac-
+ * ter of *stringp) can be detected by comparing the location referenced by the returned
+ * pointer to `\0'.
+ *
+ * If *stringp is initially NULL, strsep() returns NULL.
+ */
+char *MPL_strsep(char **stringp, const char *delim)
+{
+ int i, j;
+ char *ret;
+
+ if (!*stringp)
+ return NULL;
+
+ ret = *stringp;
+ i = 0;
+ while (1) {
+ if (!ret[i]) {
+ *stringp = NULL;
+ return ret;
+ }
+ for (j = 0; delim[j] != '\0'; ++j) {
+ if (ret[i] == delim[j]) {
+ ret[i] = '\0';
+ *stringp = &ret[i+1];
+ return ret;
+ }
+ }
+ ++i;
+ }
+}
+
+
+/* there's no standard portable way to convert error codes to human readable
+ * strings. The standard way to do that is via strerror() but if for some
+ * resason we don't have it, then we'll merely output the error code seen */
+#if !defined MPL_HAVE_STRERROR
+char *MPL_strerror(int errnum)
+{
+#define STRERROR_SIZE 256
+ static char msgbuf[STRERROR_SIZE];
+ snprintf(msgbuf, STRERROR_SIZE, "errno = %d", errnum);
+#undef STRERROR_SIZE
+ return msgbuf;
+}
+#endif /* MPL_HAVE_STRERROR */
+
+/*@ MPL_strnapp - Append to a string with a maximum length
+
+Input Parameters:
++ instr - String to copy
+- maxlen - Maximum total length of 'outstr'
+
+Output Parameters:
+. outstr - String to copy into
+
+ Notes:
+ This routine is similar to 'strncat' except that the 'maxlen' argument
+ is the maximum total length of 'outstr', rather than the maximum
+ number of characters to move from 'instr'. Thus, this routine is
+ easier to use when the declared size of 'instr' is known.
+
+ Module:
+ Utility
+ @*/
+int MPL_strnapp(char *dest, const char *src, size_t n)
+{
+ char *mpl_restrict d_ptr = dest;
+ const char *mpl_restrict s_ptr = src;
+ register int i;
+
+ /* Get to the end of dest */
+ i = (int) n;
+ while (i-- > 0 && *d_ptr)
+ d_ptr++;
+ if (i <= 0)
+ return 1;
+
+ /* Append. d_ptr points at first null and i is remaining space. */
+ while (*s_ptr && i-- > 0) {
+ *d_ptr++ = *s_ptr++;
+ }
+
+ /* We allow i >= (not just >) here because the first while decrements
+ * i by one more than there are characters, leaving room for the null */
+ if (i >= 0) {
+ *d_ptr = 0;
+ return 0;
+ }
+ else {
+ /* Force the null at the end */
+ *--d_ptr = 0;
+
+ /* We may want to force an error message here, at least in the
+ * debugging version */
+ return 1;
+ }
+}
diff --git a/src/pm/hydra/mpl/src/thread/Makefile.mk b/src/pm/hydra/mpl/src/thread/Makefile.mk
new file mode 100644
index 0000000..1861200
--- /dev/null
+++ b/src/pm/hydra/mpl/src/thread/Makefile.mk
@@ -0,0 +1,12 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/thread/mpl_thread.c \
+ src/thread/mpl_thread_win.c \
+ src/thread/mpl_thread_solaris.c \
+ src/thread/mpl_thread_posix.c
diff --git a/src/pm/hydra/mpl/src/thread/mpl_thread.c b/src/pm/hydra/mpl/src/thread/mpl_thread.c
new file mode 100644
index 0000000..f1e95b5
--- /dev/null
+++ b/src/pm/hydra/mpl/src/thread/mpl_thread.c
@@ -0,0 +1,22 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2002 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if (MPL_THREAD_PACKAGE_NAME != MPL_THREAD_PACKAGE_NONE) && !defined(MPL_TLS_SPECIFIER)
+
+/* This routine is called when a thread exits; it is passed the value
+ * associated with the key. In our case, this is simply storage
+ * allocated with MPL_calloc */
+void MPLI_cleanup_tls(void *a)
+{
+ if (a)
+ MPL_free(a);
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/thread/mpl_thread_posix.c b/src/pm/hydra/mpl/src/thread/mpl_thread_posix.c
new file mode 100644
index 0000000..89efc25
--- /dev/null
+++ b/src/pm/hydra/mpl/src/thread/mpl_thread_posix.c
@@ -0,0 +1,92 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_POSIX
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate
+ * function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+void *MPLI_thread_start(void *arg);
+
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ /* FIXME: faster allocation, or avoid it all together? */
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ pthread_attr_t attr;
+
+ thread_info->func = func;
+ thread_info->data = data;
+
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+ err = pthread_create(idp, &attr, MPLI_thread_start, thread_info);
+ /* FIXME: convert error to an MPL_THREAD_ERR value */
+
+ pthread_attr_destroy(&attr);
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in pthreads are expected to return a void pointer. Since
+ * our start functions do not return a value we must
+ * use an intermediate function to perform call to the user's start function
+ * and then return a value of NULL.
+ */
+void *MPLI_thread_start(void *arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return NULL;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/thread/mpl_thread_solaris.c b/src/pm/hydra/mpl/src/thread/mpl_thread_solaris.c
new file mode 100644
index 0000000..15aaec0
--- /dev/null
+++ b/src/pm/hydra/mpl/src/thread/mpl_thread_solaris.c
@@ -0,0 +1,83 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_SOLARIS
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+void *MPLI_thread_start(void *arg);
+
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ /* FIXME: faster allocation, or avoid it all together? */
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ thread_info->func = func;
+ thread_info->data = data;
+
+ err = thr_create(NULL, 0, MPLI_thread_start, thread_info, THR_DETACHED, idp);
+ /* FIXME: convert error to an MPL_THREAD_ERR value */
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in Solaris threads are expected to return a void pointer. Since our start functions do not return a value we
+ * must use an intermediate function to perform call to the user's start function and then return a value of NULL.
+ */
+void *MPLI_thread_start(void *arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return NULL;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/thread/mpl_thread_win.c b/src/pm/hydra/mpl/src/thread/mpl_thread_win.c
new file mode 100644
index 0000000..d501654
--- /dev/null
+++ b/src/pm/hydra/mpl/src/thread/mpl_thread_win.c
@@ -0,0 +1,352 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+/* This file currently implements these as a preprocessor if/elif/else sequence.
+ * This has the upside of not doing #includes for .c files or (poorly
+ * named) .i files. It has the downside of making this file large-ish
+ * and a little harder to read in some cases. If this becomes
+ * unmanagable at some point these should be separated back out into
+ * header files and included as needed. [goodell@ 2009-06-24] */
+
+/* Implementation specific function definitions (usually in the form of macros) */
+
+#if MPL_THREAD_PACKAGE_NAME == MPL_THREAD_PACKAGE_WIN
+
+/*
+ * struct MPLI_thread_info
+ *
+ * Structure used to pass the user function and data to the intermediate function, MPLI_thread_start. See comment in
+ * MPLI_thread_start() header for more information.
+ */
+struct MPLI_thread_info {
+ MPL_thread_func_t func;
+ void *data;
+};
+
+
+DWORD WINAPI MPLI_thread_start(LPVOID arg);
+
+/*
+ * MPL_thread_create()
+ */
+void MPL_thread_create(MPL_thread_func_t func, void *data, MPL_thread_id_t * idp, int *errp)
+{
+ struct MPLI_thread_info *thread_info;
+ int err = MPL_THREAD_SUCCESS;
+
+ thread_info = (struct MPLI_thread_info *) MPL_malloc(sizeof(struct MPLI_thread_info));
+ if (thread_info != NULL) {
+ thread_info->func = func;
+ thread_info->data = data;
+ *idp = CreateThread(NULL, 0, MPLI_thread_start, thread_info, 0, NULL);
+ if (*idp == NULL) {
+ err = GetLastError();
+ }
+ }
+ else {
+ err = 1000000000;
+ }
+
+ if (errp != NULL) {
+ *errp = err;
+ }
+}
+
+
+/*
+ * MPLI_thread_start()
+ *
+ * Start functions in Windows are expected to return a DWORD. Since our start functions do not return a value we must
+ * use an intermediate function to perform the call to the user's start function and then return a value of 0.
+ */
+DWORD WINAPI MPLI_thread_start(LPVOID arg)
+{
+ struct MPLI_thread_info *thread_info = (struct MPLI_thread_info *) arg;
+ MPL_thread_func_t func = thread_info->func;
+ void *data = thread_info->data;
+
+ MPL_free(arg);
+
+ func(data);
+
+ return 0;
+}
+
+void MPL_thread_exit()
+{
+ ExitThread(0);
+}
+
+void MPL_thread_self(MPL_thread_id_t * id)
+{
+ *id = GetCurrentThread();
+}
+
+void MPL_thread_same(MPL_thread_id_t * id1, MPL_thread_id_t * id2, int *same)
+{
+ *same = (*id1 == *id2) ? TRUE : FALSE;
+}
+
+void MPL_thread_yield(void)
+{
+ Sleep(0);
+}
+
+/*
+ * Mutexes
+ */
+
+void MPL_thread_mutex_create(MPL_thread_mutex_t * mutex, int *err)
+{
+ *mutex = CreateMutex(NULL, FALSE, NULL);
+ if (err != NULL) {
+ if (*mutex == NULL) {
+ *err = GetLastError();
+ }
+ else {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ }
+}
+
+void MPL_thread_mutex_destroy(MPL_thread_mutex_t * mutex, int *err)
+{
+ BOOL result;
+
+ result = CloseHandle(*mutex);
+ if (err != NULL) {
+ if (result) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ *err = GetLastError();
+ }
+ }
+}
+
+void MPL_thread_mutex_lock(MPL_thread_mutex_t * mutex, int *err)
+{
+ DWORD result;
+
+ result = WaitForSingleObject(*mutex, INFINITE);
+ if (err != NULL) {
+ if (result == WAIT_OBJECT_0) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ if (result == WAIT_FAILED) {
+ *err = GetLastError();
+ }
+ else {
+ *err = result;
+ }
+ }
+ }
+}
+
+void MPL_thread_mutex_unlock(MPL_thread_mutex_t * mutex, int *err)
+{
+ BOOL result;
+
+ result = ReleaseMutex(*mutex);
+ if (err != NULL) {
+ if (result) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+ else {
+ *err = GetLastError();
+ }
+ }
+}
+
+
+/*
+ * Condition Variables
+ */
+
+void MPL_thread_cond_create(MPL_thread_cond_t * cond, int *err)
+{
+ /* Create a tls slot to store the events used to wakeup each thread in cond_bcast or cond_signal */
+ MPL_thread_tls_create(NULL, &cond->tls, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* Create a mutex to protect the fifo queue. This is required because the mutex passed in to the
+ * cond functions need not be the same in each thread. */
+ MPL_thread_mutex_create(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ cond->fifo_head = NULL;
+ cond->fifo_tail = NULL;
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+void MPL_thread_cond_destroy(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *iter;
+
+ while (cond->fifo_head) {
+ iter = cond->fifo_head;
+ cond->fifo_head = cond->fifo_head->next;
+ MPL_free(iter);
+ }
+ MPL_thread_mutex_destroy(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ MPL_thread_tls_destroy(&cond->tls, err);
+ /*
+ * if (err != NULL)
+ * {
+ * *err = MPL_THREAD_SUCCESS;
+ * }
+ */
+}
+
+void MPL_thread_cond_wait(MPL_thread_cond_t * cond, MPL_thread_mutex_t * mutex, int *err)
+{
+ HANDLE event;
+ DWORD result;
+ MPL_thread_tls_get(&cond->tls, &event, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (event == NULL) {
+ event = CreateEvent(NULL, TRUE, FALSE, NULL);
+ if (event == NULL) {
+ if (err != NULL) {
+ *err = GetLastError();
+ }
+ return;
+ }
+ MPL_thread_tls_set(&cond->tls, event, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ }
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (cond->fifo_tail == NULL) {
+ cond->fifo_tail = (MPLI_win_thread_cond_fifo_t *) MPL_malloc(sizeof(MPLI_win_thread_cond_fifo_t));
+ cond->fifo_head = cond->fifo_tail;
+ }
+ else {
+ cond->fifo_tail->next =
+ (MPLI_win_thread_cond_fifo_t *) MPL_malloc(sizeof(MPLI_win_thread_cond_fifo_t));
+ cond->fifo_tail = cond->fifo_tail->next;
+ }
+ if (cond->fifo_tail == NULL) {
+ if (err != NULL) {
+ *err = -1;
+ }
+ return;
+ }
+ cond->fifo_tail->event = event;
+ cond->fifo_tail->next = NULL;
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ MPL_thread_mutex_unlock(mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ result = WaitForSingleObject(event, INFINITE);
+ if (err != NULL) {
+ if (result != WAIT_OBJECT_0) {
+ if (result == WAIT_FAILED) {
+ *err = GetLastError();
+ }
+ else {
+ *err = result;
+ }
+ return;
+ }
+ }
+ result = ResetEvent(event);
+ if (!result && err != NULL) {
+ *err = GetLastError();
+ return;
+ }
+ MPL_thread_mutex_lock(mutex, err);
+ /*
+ * if (err != NULL)
+ * {
+ * *err = MPL_THREAD_SUCCESS;
+ * }
+ */
+}
+
+void MPL_thread_cond_broadcast(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *fifo, *temp;
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* remove the fifo queue from the cond variable */
+ fifo = cond->fifo_head;
+ cond->fifo_head = cond->fifo_tail = NULL;
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ /* signal each event in the fifo queue */
+ while (fifo) {
+ if (!SetEvent(fifo->event) && err != NULL) {
+ *err = GetLastError();
+ /* lost memory */
+ return;
+ }
+ temp = fifo;
+ fifo = fifo->next;
+ MPL_free(temp);
+ }
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+void MPL_thread_cond_signal(MPL_thread_cond_t * cond, int *err)
+{
+ MPLI_win_thread_cond_fifo_t *fifo;
+ MPL_thread_mutex_lock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ fifo = cond->fifo_head;
+ if (fifo) {
+ cond->fifo_head = cond->fifo_head->next;
+ if (cond->fifo_head == NULL)
+ cond->fifo_tail = NULL;
+ }
+ MPL_thread_mutex_unlock(&cond->fifo_mutex, err);
+ if (err != NULL && *err != MPL_THREAD_SUCCESS) {
+ return;
+ }
+ if (fifo) {
+ if (!SetEvent(fifo->event) && err != NULL) {
+ *err = GetLastError();
+ MPL_free(fifo);
+ return;
+ }
+ MPL_free(fifo);
+ }
+ if (err != NULL) {
+ *err = MPL_THREAD_SUCCESS;
+ }
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/Makefile.mk b/src/pm/hydra/mpl/src/timer/Makefile.mk
new file mode 100644
index 0000000..b2495fb
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/Makefile.mk
@@ -0,0 +1,18 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+lib at MPLLIBNAME@_la_SOURCES += \
+ src/timer/mpl_timer_clock_gettime.c \
+ src/timer/mpl_timer_gcc_ia64_cycle.c \
+ src/timer/mpl_timer_gethrtime.c \
+ src/timer/mpl_timer_gettimeofday.c \
+ src/timer/mpl_timer_linux86_cycle.c \
+ src/timer/mpl_timer_ppc64_cycle.c \
+ src/timer/mpl_timer_mach_absolute_time.c \
+ src/timer/mpl_timer_query_performance_counter.c \
+ src/timer/mpl_timer_win86_cycle.c \
+ src/timer/mpl_timer_device.c
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_clock_gettime.c b/src/pm/hydra/mpl/src/timer/mpl_timer_clock_gettime.c
new file mode 100644
index 0000000..6c081fa
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_clock_gettime.c
@@ -0,0 +1,76 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__CLOCK_GETTIME
+
+int MPL_wtime(MPL_time_t * timeval)
+{
+ /* POSIX timer (14.2.1, page 311) */
+ clock_gettime(CLOCK_REALTIME, timeval);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = ((double) (t2->tv_sec - t1->tv_sec) + 1.0e-9 * (double) (t2->tv_nsec - t1->tv_nsec));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = ((double) t->tv_sec + 1.0e-9 * (double) t->tv_nsec);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ long nsec, sec;
+
+ nsec = t2->tv_nsec - t1->tv_nsec;
+ sec = t2->tv_sec - t1->tv_sec;
+
+ t3->tv_sec += sec;
+ t3->tv_nsec += nsec;
+ while (t3->tv_nsec > 1000000000) {
+ t3->tv_nsec -= 1000000000;
+ t3->tv_sec++;
+ }
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ struct timespec res;
+ int rc;
+
+ rc = clock_getres(CLOCK_REALTIME, &res);
+ if (!rc)
+ /* May return -1 for unimplemented ! */
+ *wtick = res.tv_sec + 1.0e-9 * res.tv_nsec;
+
+ /* Sigh. If not implemented (POSIX allows that),
+ * then we need to return the generic tick value */
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_device.c b/src/pm/hydra/mpl/src/timer/mpl_timer_device.c
new file mode 100644
index 0000000..1f2e6f1
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_device.c
@@ -0,0 +1,54 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__DEVICE
+
+int (*MPL_wtime_fn)(MPL_time_t *timeval) = NULL;
+int (*MPL_wtime_diff_fn)(MPL_time_t *t1, MPL_time_t *t2, double *diff) = NULL;
+int (*MPL_wtime_acc_fn)(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3) = NULL;
+int (*MPL_wtime_todouble_fn)(MPL_time_t *timeval, double *seconds) = NULL;
+int (*MPL_wtick_fn)(double *tick) = NULL;
+
+int MPL_wtime(MPL_time_t *timeval)
+{
+ if (MPL_wtime_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_fn(timeval);
+}
+
+int MPL_wtime_diff(MPL_time_t *t1, MPL_time_t *t2, double *diff)
+{
+ if (MPL_wtime_diff_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_diff_fn(t1, t2, diff);
+}
+
+int MPL_wtime_todouble(MPL_time_t *t, double *val)
+{
+ if (MPL_wtime_todouble_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_todouble_fn(t, val);
+}
+
+int MPL_wtime_acc(MPL_time_t *t1, MPL_time_t *t2, MPL_time_t *t3)
+{
+ if (MPL_wtime_acc_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtime_acc_fn(t1, t2, t3);
+}
+
+int MPL_wtick(double *wtick)
+{
+ if (MPL_wtick_fn == NULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ return MPL_wtick_fn(wtick);
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c b/src/pm/hydra/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c
new file mode 100644
index 0000000..99c5643
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_gcc_ia64_cycle.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GCC_IA64_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ unsigned long long t1, t2;
+ struct timeval tv1, tv2;
+ double td1, td2;
+
+ gettimeofday(&tv1, NULL);
+ MPL_wtime(&t1);
+ usleep(250000);
+ gettimeofday(&tv2, NULL);
+ MPL_wtime(&t2);
+
+ td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
+ td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
+
+ seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+/* Time stamps created by a macro */
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ /* This returns the number of cycles as the "time". This isn't correct
+ * for implementing MPI_Wtime, but it does allow us to insert cycle
+ * counters into test programs */
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_gethrtime.c b/src/pm/hydra/mpl/src/timer/mpl_timer_gethrtime.c
new file mode 100644
index 0000000..ad69fe4
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_gethrtime.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETHRTIME
+
+/*
+ * MPL_time_t is hrtime_t, which under Solaris is defined as a 64bit
+ * longlong_t . However, the Solaris header files will define
+ * longlong_t as a structure in some circumstances, making arithmetic
+ * with hrtime_t invalid. FIXME.
+ * To fix this, we'll need to test hrtime_t arithmetic in the configure
+ * program, and if it fails, check for the Solaris defintions (
+ * union { double _d; int32_t _l[2]; }. Alternately, we may decide that
+ * if hrtime_t is not supported, then neither is gethrtime.
+ *
+ * Note that the Solaris sys/types.h file *assumes* that no other compiler
+ * supports an 8 byte long long. We can also cast hrtime_t to long long
+ * if long long is available and 8 bytes.
+ */
+int MPL_wtime(MPL_time_t * timeval)
+{
+ *timeval = gethrtime();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = 1.0e-9 * (double) (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = 1.0e-9 * (*t);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += ((*t2) - (*t1));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ /* According to the documentation, ticks should be in nanoseconds. This
+ * is untested */
+ *wtick = 1.0e-9;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_gettimeofday.c b/src/pm/hydra/mpl/src/timer/mpl_timer_gettimeofday.c
new file mode 100644
index 0000000..a211fe7
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_gettimeofday.c
@@ -0,0 +1,72 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__GETTIMEOFDAY
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int MPL_wtime(MPL_time_t * tval)
+{
+ gettimeofday(tval, NULL);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = ((double) (t2->tv_sec - t1->tv_sec) + .000001 * (double) (t2->tv_usec - t1->tv_usec));
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) t->tv_sec + .000001 * (double) t->tv_usec;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ int usec, sec;
+
+ usec = t2->tv_usec - t1->tv_usec;
+ sec = t2->tv_sec - t1->tv_sec;
+ t3->tv_usec += usec;
+ t3->tv_sec += sec;
+ /* Handle carry to the integer seconds field */
+ while (t3->tv_usec > 1000000) {
+ t3->tv_usec -= 1000000;
+ t3->tv_sec++;
+ }
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_linux86_cycle.c b/src/pm/hydra/mpl/src/timer/mpl_timer_linux86_cycle.c
new file mode 100644
index 0000000..5b14a57
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_linux86_cycle.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__LINUX86_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ MPL_time_t t1, t2;
+ struct timeval tv1, tv2;
+ double td1, td2;
+
+ gettimeofday(&tv1, NULL);
+ MPL_wtime(&t1);
+ usleep(250000);
+ gettimeofday(&tv2, NULL);
+ MPL_wtime(&t2);
+
+ td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
+ td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
+
+ seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+/* Time stamps created by a macro */
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ /* This returns the number of cycles as the "time". This isn't correct
+ * for implementing MPI_Wtime, but it does allow us to insert cycle
+ * counters into test programs */
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_mach_absolute_time.c b/src/pm/hydra/mpl/src/timer/mpl_timer_mach_absolute_time.c
new file mode 100644
index 0000000..31afaef
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_mach_absolute_time.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__MACH_ABSOLUTE_TIME
+
+static double MPIR_Wtime_mult;
+
+int MPL_wtime_init(void)
+{
+ mach_timebase_info_data_t info;
+ mach_timebase_info(&info);
+ MPIR_Wtime_mult = 1.0e-9 * ((double) info.numer / (double) info.denom);
+ init_wtick();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime(MPL_time_t * timeval)
+{
+ *timeval = mach_absolute_time();
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (*t2 - *t1) * MPIR_Wtime_mult;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = *t * MPIR_Wtime_mult;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += *t2 - *t1;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = tickval;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_ppc64_cycle.c b/src/pm/hydra/mpl/src/timer/mpl_timer_ppc64_cycle.c
new file mode 100644
index 0000000..439aafc
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_ppc64_cycle.c
@@ -0,0 +1,128 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__PPC64_CYCLE
+
+#include <sys/time.h>
+
+static double seconds_per_tick = 0.0;
+static uint64_t clockMHz = 0;
+
+static uint64_t timeGetTime( void )
+{
+ struct timeval tv;
+ gettimeofday( &tv, 0 );
+ return tv.tv_sec * 1000000ULL + tv.tv_usec;
+}
+
+static inline uint64_t getClockMHz()
+{
+ if (clockMHz == 0)
+ {
+ uint64_t sampleTime = 100ULL; //sample time in usec
+ uint64_t timeStart = 0ULL, timeStop = 0ULL;
+ uint64_t startBase = 0ULL, endBase = 0ULL;
+ uint64_t overhead = 0ULL, tbf = 0ULL, tbi = 0ULL;
+ uint64_t ticks = 0ULL;
+ int iter = 0ULL;
+
+ do
+ {
+ tbi = tb();
+ tbf = tb();
+ tbi = tb();
+ tbf = tb();
+
+ overhead = tbf - tbi;
+ timeStart = timeGetTime();
+
+ while (timeGetTime() == timeStart)
+ timeStart = timeGetTime();
+
+ while (1)
+ {
+ timeStop = timeGetTime();
+
+ if ((timeStop - timeStart) > 1)
+ {
+ startBase = tb();
+ break;
+ }
+ }
+
+ timeStart = timeStop;
+
+ while (1)
+ {
+ timeStop = timeGetTime();
+
+ if ((timeStop - timeStart) > sampleTime)
+ {
+ endBase = tb();
+ break;
+ }
+ }
+
+ ticks = ((endBase - startBase) + (overhead));
+ iter++;
+
+ if (iter == 10ULL)
+ {
+ fprintf(stderr, "Warning: unable to initialize high resolution timer.\n");
+ return -1;
+ }
+ }
+ while (endBase <= startBase);
+
+ return (uint64_t) (ticks / sampleTime);
+ }
+ else
+ return clockMHz;
+}
+
+int MPL_wtick(double *wtick)
+{
+ *wtick = seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_init(void)
+{
+ clockMHz = getClockMHz();
+ seconds_per_tick = 1.0 / ((double)clockMHz * 1000000.0);
+ if (clockMHz == -1ULL)
+ return MPL_TIMER_ERR_NOT_INITIALIZED;
+ else
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) (*t2 - *t1) * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) *t * seconds_per_tick;
+
+ return MPL_TIMER_SUCCESS;
+}
+
+int MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ *t3 += (*t2 - *t1);
+
+ return MPL_TIMER_SUCCESS;
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_query_performance_counter.c b/src/pm/hydra/mpl/src/timer/mpl_timer_query_performance_counter.c
new file mode 100644
index 0000000..67dec5f
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_query_performance_counter.c
@@ -0,0 +1,45 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if MPL_TIMER_KIND == MPL_TIMER_KIND__QUERYPERFORMANCECOUNTER
+
+static double seconds_per_tick = 0.0; /* High performance counter frequency */
+
+int MPL_wtime_init(void)
+{
+ LARGE_INTEGER n;
+ QueryPerformanceFrequency(&n);
+ seconds_per_tick = 1.0 / (double) n.QuadPart;
+ return 0;
+}
+
+double MPL_wtick(void)
+{
+ return seconds_per_tick;
+}
+
+void MPL_wtime_todouble(MPL_time_t * t, double *val)
+{
+ *val = (double) t->QuadPart * seconds_per_tick;
+}
+
+void MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ LARGE_INTEGER n;
+ n.QuadPart = t2->QuadPart - t1->QuadPart;
+ *diff = (double) n.QuadPart * seconds_per_tick;
+}
+
+void MPL_wtime_acc(MPL_time_t * t1, MPL_time_t * t2, MPL_time_t * t3)
+{
+ t3->QuadPart += ((t2->QuadPart) - (t1->QuadPart));
+}
+
+#endif
diff --git a/src/pm/hydra/mpl/src/timer/mpl_timer_win86_cycle.c b/src/pm/hydra/mpl/src/timer/mpl_timer_win86_cycle.c
new file mode 100644
index 0000000..4943f12
--- /dev/null
+++ b/src/pm/hydra/mpl/src/timer/mpl_timer_win86_cycle.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2001 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpl.h"
+
+MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
+
+#if (MPL_TIMER_KIND == MPL_TIMER_KIND__WIN86_CYCLE) || (MPL_TIMER_KIND == MPL_TIMER_KIND__WIN64_CYCLE)
+
+static double seconds_per_tick = 0.0;
+
+double MPL_wtick(void)
+{
+ return seconds_per_tick;
+}
+
+void MPL_wtime_todouble(MPL_time_t * t, double *d)
+{
+ *d = (double) (__int64) * t * seconds_per_tick;
+}
+
+void MPL_wtime_diff(MPL_time_t * t1, MPL_time_t * t2, double *diff)
+{
+ *diff = (double) ((__int64) (*t2 - *t1)) * seconds_per_tick;
+}
+
+int MPL_wtime_init(void)
+{
+ MPL_time_t t1, t2;
+ DWORD s1, s2;
+ double d;
+ int i;
+
+ MPL_wtime(&t1);
+ MPL_wtime(&t1);
+
+ /* time an interval using both timers */
+ s1 = GetTickCount();
+ MPL_wtime(&t1);
+ /*Sleep(250); *//* Sleep causes power saving cpu's to stop which stops the counter */
+ while (GetTickCount() - s1 < 200) {
+ for (i = 2; i < 1000; i++)
+ d = (double) i / (double) (i - 1);
+ }
+ s2 = GetTickCount();
+ MPL_wtime(&t2);
+
+ /* calculate the frequency of the assembly cycle counter */
+ seconds_per_tick = ((double) (s2 - s1) / 1000.0) / (double) ((__int64) (t2 - t1));
+ /*
+ * printf("t2-t1 %10d\nsystime diff %d\nfrequency %g\n CPU MHz %g\n",
+ * (int)(t2-t1), (int)(s2 - s1), seconds_per_tick, seconds_per_tick * 1.0e6);
+ */
+ return 0;
+}
+
+#endif
diff --git a/src/pm/hydra/pm/pmiserv/common.c b/src/pm/hydra/pm/pmiserv/common.c
index f80d28b..7ec397a 100644
--- a/src/pm/hydra/pm/pmiserv/common.c
+++ b/src/pm/hydra/pm/pmiserv/common.c
@@ -30,7 +30,7 @@ HYD_status HYD_pmcd_pmi_parse_pmi_cmd(char *obuf, int pmi_version, char **pmi_cm
HYDU_FUNC_ENTER();
/* Make a copy of the original buffer */
- buf = HYDU_strdup(obuf);
+ buf = MPL_strdup(obuf);
if (buf[strlen(obuf) - 1] == '\n')
buf[strlen(obuf) - 1] = '\0';
@@ -49,7 +49,7 @@ HYD_status HYD_pmcd_pmi_parse_pmi_cmd(char *obuf, int pmi_version, char **pmi_cm
args[i] = strtok(NULL, delim);
if (args[i] == NULL)
break;
- args[i] = HYDU_strdup(args[i]);
+ args[i] = MPL_strdup(args[i]);
}
/* Search for the PMI command in our table */
@@ -57,9 +57,9 @@ HYD_status HYD_pmcd_pmi_parse_pmi_cmd(char *obuf, int pmi_version, char **pmi_cm
HYDU_ERR_POP(status, "string split returned error\n");
fn_exit:
- HYDU_FREE(buf);
+ MPL_free(buf);
if (str1)
- HYDU_FREE(str1);
+ MPL_free(str1);
HYDU_FUNC_EXIT();
return status;
@@ -75,10 +75,11 @@ HYD_status HYD_pmcd_pmi_args_to_tokens(char *args[], struct HYD_pmcd_token **tok
for (i = 0; args[i]; i++);
*count = i;
- HYDU_MALLOC(*tokens, struct HYD_pmcd_token *, *count * sizeof(struct HYD_pmcd_token), status);
+ HYDU_MALLOC_OR_JUMP(*tokens, struct HYD_pmcd_token *, *count * sizeof(struct HYD_pmcd_token),
+ status);
for (i = 0; args[i]; i++) {
- arg = HYDU_strdup(args[i]);
+ arg = MPL_strdup(args[i]);
(*tokens)[i].key = arg;
for (j = 0; arg[j] && arg[j] != '='; j++);
if (!arg[j]) {
@@ -102,8 +103,8 @@ void HYD_pmcd_pmi_free_tokens(struct HYD_pmcd_token *tokens, int token_count)
int i;
for (i = 0; i < token_count; i++)
- HYDU_FREE(tokens[i].key);
- HYDU_FREE(tokens);
+ MPL_free(tokens[i].key);
+ MPL_free(tokens);
}
char *HYD_pmcd_pmi_find_token_keyval(struct HYD_pmcd_token *tokens, int count, const char *key)
@@ -124,8 +125,8 @@ HYD_status HYD_pmcd_pmi_allocate_kvs(struct HYD_pmcd_pmi_kvs ** kvs, int pgid)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(*kvs, struct HYD_pmcd_pmi_kvs *, sizeof(struct HYD_pmcd_pmi_kvs), status);
- HYDU_snprintf((*kvs)->kvsname, PMI_MAXKVSLEN, "kvs_%d_%d", (int) getpid(), pgid);
+ HYDU_MALLOC_OR_JUMP(*kvs, struct HYD_pmcd_pmi_kvs *, sizeof(struct HYD_pmcd_pmi_kvs), status);
+ MPL_snprintf((*kvs)->kvsname, PMI_MAXKVSLEN, "kvs_%d_%d", (int) getpid(), pgid);
(*kvs)->key_pair = NULL;
fn_exit:
@@ -145,10 +146,10 @@ void HYD_pmcd_free_pmi_kvs_list(struct HYD_pmcd_pmi_kvs *kvs_list)
key_pair = kvs_list->key_pair;
while (key_pair) {
tmp = key_pair->next;
- HYDU_FREE(key_pair);
+ MPL_free(key_pair);
key_pair = tmp;
}
- HYDU_FREE(kvs_list);
+ MPL_free(kvs_list);
HYDU_FUNC_EXIT();
}
@@ -160,10 +161,10 @@ HYD_status HYD_pmcd_pmi_add_kvs(const char *key, char *val, struct HYD_pmcd_pmi_
HYDU_FUNC_ENTER();
- HYDU_MALLOC(key_pair, struct HYD_pmcd_pmi_kvs_pair *, sizeof(struct HYD_pmcd_pmi_kvs_pair),
- status);
- HYDU_snprintf(key_pair->key, PMI_MAXKEYLEN, "%s", key);
- HYDU_snprintf(key_pair->val, PMI_MAXVALLEN, "%s", val);
+ HYDU_MALLOC_OR_JUMP(key_pair, struct HYD_pmcd_pmi_kvs_pair *,
+ sizeof(struct HYD_pmcd_pmi_kvs_pair), status);
+ MPL_snprintf(key_pair->key, PMI_MAXKEYLEN, "%s", key);
+ MPL_snprintf(key_pair->val, PMI_MAXVALLEN, "%s", val);
key_pair->next = NULL;
*ret = 0;
@@ -189,6 +190,6 @@ HYD_status HYD_pmcd_pmi_add_kvs(const char *key, char *val, struct HYD_pmcd_pmi_
return status;
fn_fail:
- HYDU_FREE(key_pair);
+ MPL_free(key_pair);
goto fn_exit;
}
diff --git a/src/pm/hydra/pm/pmiserv/common.h b/src/pm/hydra/pm/pmiserv/common.h
index d0c249e..5423fb9 100644
--- a/src/pm/hydra/pm/pmiserv/common.h
+++ b/src/pm/hydra/pm/pmiserv/common.h
@@ -14,7 +14,7 @@
#define PMI_MAXVALLEN (1024) /* max length of value in keyval space */
#define PMI_MAXKVSLEN (256) /* max length of various names */
-#define MAX_PMI_ARGS (65536) /* number of arguments in a PMI command */
+#define MAX_PMI_ARGS (65536) /* number of arguments in a PMI command */
#define MAX_PMI_INTERNAL_ARGS (65536) /* number of arguments in internal communication */
struct HYD_pmcd_pmi_kvs_pair {
diff --git a/src/pm/hydra/pm/pmiserv/pmi_v2_common.c b/src/pm/hydra/pm/pmiserv/pmi_v2_common.c
index 4913ddd..f5ef263 100644
--- a/src/pm/hydra/pm/pmiserv/pmi_v2_common.c
+++ b/src/pm/hydra/pm/pmiserv/pmi_v2_common.c
@@ -15,7 +15,8 @@ HYD_status HYD_pmcd_pmi_v2_queue_req(int fd, int pid, int pgid, char *args[], ch
struct HYD_pmcd_pmi_v2_reqs *req, *tmp;
HYD_status status = HYD_SUCCESS;
- HYDU_MALLOC(req, struct HYD_pmcd_pmi_v2_reqs *, sizeof(struct HYD_pmcd_pmi_v2_reqs), status);
+ HYDU_MALLOC_OR_JUMP(req, struct HYD_pmcd_pmi_v2_reqs *, sizeof(struct HYD_pmcd_pmi_v2_reqs),
+ status);
req->fd = fd;
req->pid = pid;
req->pgid = pgid;
@@ -25,7 +26,7 @@ HYD_status HYD_pmcd_pmi_v2_queue_req(int fd, int pid, int pgid, char *args[], ch
status = HYDU_strdup_list(args, &req->args);
HYDU_ERR_POP(status, "unable to dup args\n");
- req->key = HYDU_strdup(key);
+ req->key = MPL_strdup(key);
if (*pending_reqs == NULL)
*pending_reqs = req;
diff --git a/src/pm/hydra/pm/pmiserv/pmip.c b/src/pm/hydra/pm/pmiserv/pmip.c
index 32c15e4..70d31d0 100644
--- a/src/pm/hydra/pm/pmiserv/pmip.c
+++ b/src/pm/hydra/pm/pmiserv/pmip.c
@@ -9,7 +9,6 @@
#include "demux.h"
#include "bsci.h"
#include "topo.h"
-#include "hydt_ftb.h"
struct HYD_pmcd_pmip_s HYD_pmcd_pmip;
@@ -68,54 +67,54 @@ static void cleanup_params(void)
/* System global */
if (HYD_pmcd_pmip.system_global.pmi_fd)
- HYDU_FREE(HYD_pmcd_pmip.system_global.pmi_fd);
+ MPL_free(HYD_pmcd_pmip.system_global.pmi_fd);
if (HYD_pmcd_pmip.system_global.pmi_process_mapping)
- HYDU_FREE(HYD_pmcd_pmip.system_global.pmi_process_mapping);
+ MPL_free(HYD_pmcd_pmip.system_global.pmi_process_mapping);
/* Upstream */
if (HYD_pmcd_pmip.upstream.server_name)
- HYDU_FREE(HYD_pmcd_pmip.upstream.server_name);
+ MPL_free(HYD_pmcd_pmip.upstream.server_name);
/* Downstream */
if (HYD_pmcd_pmip.downstream.out)
- HYDU_FREE(HYD_pmcd_pmip.downstream.out);
+ MPL_free(HYD_pmcd_pmip.downstream.out);
if (HYD_pmcd_pmip.downstream.err)
- HYDU_FREE(HYD_pmcd_pmip.downstream.err);
+ MPL_free(HYD_pmcd_pmip.downstream.err);
if (HYD_pmcd_pmip.downstream.pid)
- HYDU_FREE(HYD_pmcd_pmip.downstream.pid);
+ MPL_free(HYD_pmcd_pmip.downstream.pid);
if (HYD_pmcd_pmip.downstream.exit_status)
- HYDU_FREE(HYD_pmcd_pmip.downstream.exit_status);
+ MPL_free(HYD_pmcd_pmip.downstream.exit_status);
if (HYD_pmcd_pmip.downstream.pmi_rank)
- HYDU_FREE(HYD_pmcd_pmip.downstream.pmi_rank);
+ MPL_free(HYD_pmcd_pmip.downstream.pmi_rank);
if (HYD_pmcd_pmip.downstream.pmi_fd)
- HYDU_FREE(HYD_pmcd_pmip.downstream.pmi_fd);
+ MPL_free(HYD_pmcd_pmip.downstream.pmi_fd);
if (HYD_pmcd_pmip.downstream.pmi_fd_active)
- HYDU_FREE(HYD_pmcd_pmip.downstream.pmi_fd_active);
+ MPL_free(HYD_pmcd_pmip.downstream.pmi_fd_active);
/* Local */
if (HYD_pmcd_pmip.local.iface_ip_env_name)
- HYDU_FREE(HYD_pmcd_pmip.local.iface_ip_env_name);
+ MPL_free(HYD_pmcd_pmip.local.iface_ip_env_name);
if (HYD_pmcd_pmip.local.hostname)
- HYDU_FREE(HYD_pmcd_pmip.local.hostname);
+ MPL_free(HYD_pmcd_pmip.local.hostname);
if (HYD_pmcd_pmip.local.spawner_kvsname)
- HYDU_FREE(HYD_pmcd_pmip.local.spawner_kvsname);
+ MPL_free(HYD_pmcd_pmip.local.spawner_kvsname);
if (HYD_pmcd_pmip.local.ckpoint_prefix_list) {
for (i = 0; HYD_pmcd_pmip.local.ckpoint_prefix_list[i]; i++)
- HYDU_FREE(HYD_pmcd_pmip.local.ckpoint_prefix_list[i]);
- HYDU_FREE(HYD_pmcd_pmip.local.ckpoint_prefix_list);
+ MPL_free(HYD_pmcd_pmip.local.ckpoint_prefix_list[i]);
+ MPL_free(HYD_pmcd_pmip.local.ckpoint_prefix_list);
}
HYD_pmcd_free_pmi_kvs_list(HYD_pmcd_pmip.local.kvs);
@@ -171,9 +170,6 @@ int main(int argc, char **argv)
status = HYDT_dmx_init(&HYD_pmcd_pmip.user_global.demux);
HYDU_ERR_POP(status, "unable to initialize the demux engine\n");
- status = HYDT_ftb_init();
- HYDU_ERR_POP(status, "unable to initialize FTB\n");
-
/* See if HYDI_CONTROL_FD is set before trying to connect upstream */
ret = MPL_env2int("HYDI_CONTROL_FD", &HYD_pmcd_pmip.upstream.control);
if (ret < 0) {
@@ -279,9 +275,6 @@ int main(int argc, char **argv)
status = HYDT_dmx_finalize();
HYDU_ERR_POP(status, "error returned from demux finalize\n");
- status = HYDT_ftb_finalize();
- HYDU_ERR_POP(status, "unable to finalize FTB\n");
-
status = HYDT_bsci_finalize();
HYDU_ERR_POP(status, "unable to finalize the bootstrap device\n");
diff --git a/src/pm/hydra/pm/pmiserv/pmip_cb.c b/src/pm/hydra/pm/pmiserv/pmip_cb.c
index 906fdcd..50cf38e 100644
--- a/src/pm/hydra/pm/pmiserv/pmip_cb.c
+++ b/src/pm/hydra/pm/pmiserv/pmip_cb.c
@@ -10,7 +10,6 @@
#include "ckpoint.h"
#include "demux.h"
#include "topo.h"
-#include "hydt_ftb.h"
struct HYD_pmcd_pmip_pmi_handle *HYD_pmcd_pmip_pmi_handle = { 0 };
@@ -169,7 +168,7 @@ static HYD_status check_pmi_cmd(char **buf, int *pmi_version, int *repeat)
if (full_command) {
/* We have a full command */
buflen = bufptr - sptr + 1;
- HYDU_MALLOC(*buf, char *, buflen, status);
+ HYDU_MALLOC_OR_JUMP(*buf, char *, buflen, status);
memcpy(*buf, sptr, buflen);
sptr += buflen;
pmi_storage_len -= buflen;
@@ -205,26 +204,16 @@ static HYD_status check_pmi_cmd(char **buf, int *pmi_version, int *repeat)
static HYD_status pmi_cb(int fd, HYD_event_t events, void *userp)
{
- char *buf = NULL, *pmi_cmd = NULL, *args[MAX_PMI_ARGS] = { 0 };
+ char *buf = NULL, *pmi_cmd = NULL, **args = NULL;
int closed, repeat, sent, i = -1, linelen, pid = -1;
struct HYD_pmcd_hdr hdr;
struct HYD_pmcd_pmip_pmi_handle *h;
- char ftb_event_payload[HYDT_FTB_MAX_PAYLOAD_DATA];
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
HYD_pmcd_init_header(&hdr);
- /* PMI-1 does not tell us how much to read. We read how much ever
- * we can, parse out full PMI commands from it, and process
- * them. When we don't have a full PMI command, we store the
- * rest. */
- status =
- HYDU_sock_read(fd, pmi_storage + pmi_storage_len, HYD_TMPBUF_SIZE - pmi_storage_len,
- &linelen, &closed, HYDU_SOCK_COMM_NONE);
- HYDU_ERR_POP(status, "unable to read PMI command\n");
-
/* Try to find the PMI FD */
for (i = 0; i < HYD_pmcd_pmip.local.proxy_process_count; i++) {
if (HYD_pmcd_pmip.downstream.pmi_fd[i] == fd) {
@@ -233,6 +222,17 @@ static HYD_status pmi_cb(int fd, HYD_event_t events, void *userp)
}
}
+ read_cmd:
+ /* PMI-1 does not tell us how much to read. We read how much ever
+ * we can, parse out full PMI commands from it, and process
+ * them. When we don't have a full PMI command, we go back and
+ * read from the same FD until we do. PMI clients (1 and 2) always
+ * send full commands, then wait for response. */
+ status =
+ HYDU_sock_read(fd, pmi_storage + pmi_storage_len, HYD_TMPBUF_SIZE - pmi_storage_len,
+ &linelen, &closed, HYDU_SOCK_COMM_NONE);
+ HYDU_ERR_POP(status, "unable to read PMI command\n");
+
if (closed) {
/* If a PMI application terminates, we clean up the remaining
* processes. For a correct PMI application, we should never
@@ -245,12 +245,6 @@ static HYD_status pmi_cb(int fd, HYD_event_t events, void *userp)
* active" (which means that this is an MPI application).
*/
if (pid != -1 && HYD_pmcd_pmip.downstream.pmi_fd_active[pid]) {
- MPL_snprintf(ftb_event_payload, HYDT_FTB_MAX_PAYLOAD_DATA,
- "pgid:%d rank:%d",
- HYD_pmcd_pmip.local.pgid, HYD_pmcd_pmip.downstream.pmi_rank[pid]);
- status = HYDT_ftb_publish("FTB_MPI_PROCS_DEAD", ftb_event_payload);
- HYDU_ERR_POP(status, "FTB publish failed\n");
-
/* If this is not a forced cleanup, store a temporary
* erroneous exit status. In case the application does not
* return a non-zero exit status, we will use this. */
@@ -290,6 +284,14 @@ static HYD_status pmi_cb(int fd, HYD_event_t events, void *userp)
pmi_storage[pmi_storage_len] = 0;
}
+ check_cmd:
+ status = check_pmi_cmd(&buf, &hdr.pmi_version, &repeat);
+ HYDU_ERR_POP(status, "error checking the PMI command\n");
+
+ if (buf == NULL)
+ /* read more to get a full command. */
+ goto read_cmd;
+
/* We were able to read the PMI command correctly. If we were able
* to identify what PMI FD this is, activate it. If we were not
* able to identify the PMI FD, we will activate it when we get
@@ -297,65 +299,66 @@ static HYD_status pmi_cb(int fd, HYD_event_t events, void *userp)
if (pid != -1 && !HYD_pmcd_pmip.downstream.pmi_fd_active[pid])
HYD_pmcd_pmip.downstream.pmi_fd_active[pid] = 1;
- do {
- status = check_pmi_cmd(&buf, &hdr.pmi_version, &repeat);
- HYDU_ERR_POP(status, "error checking the PMI command\n");
+ if (hdr.pmi_version == 1)
+ HYD_pmcd_pmip_pmi_handle = HYD_pmcd_pmip_pmi_v1;
+ else
+ HYD_pmcd_pmip_pmi_handle = HYD_pmcd_pmip_pmi_v2;
- if (buf == NULL)
- break;
-
- if (hdr.pmi_version == 1)
- HYD_pmcd_pmip_pmi_handle = HYD_pmcd_pmip_pmi_v1;
- else
- HYD_pmcd_pmip_pmi_handle = HYD_pmcd_pmip_pmi_v2;
+ HYDU_MALLOC_OR_JUMP(args, char **, MAX_PMI_ARGS * sizeof(char *), status);
+ for (i = 0; i < MAX_PMI_ARGS; i++)
+ args[i] = NULL;
- status = HYD_pmcd_pmi_parse_pmi_cmd(buf, hdr.pmi_version, &pmi_cmd, args);
- HYDU_ERR_POP(status, "unable to parse PMI command\n");
+ status = HYD_pmcd_pmi_parse_pmi_cmd(buf, hdr.pmi_version, &pmi_cmd, args);
+ HYDU_ERR_POP(status, "unable to parse PMI command\n");
- if (HYD_pmcd_pmip.user_global.debug) {
- HYDU_dump(stdout, "got pmi command (from %d): %s\n", fd, pmi_cmd);
- HYDU_print_strlist(args);
- }
+ if (HYD_pmcd_pmip.user_global.debug) {
+ HYDU_dump(stdout, "got pmi command (from %d): %s\n", fd, pmi_cmd);
+ HYDU_print_strlist(args);
+ }
- h = HYD_pmcd_pmip_pmi_handle;
- while (h->handler) {
- if (!strcmp(pmi_cmd, h->cmd)) {
- status = h->handler(fd, args);
- HYDU_ERR_POP(status, "PMI handler returned error\n");
- goto fn_exit;
- }
- h++;
+ h = HYD_pmcd_pmip_pmi_handle;
+ while (h->handler) {
+ if (!strcmp(pmi_cmd, h->cmd)) {
+ status = h->handler(fd, args);
+ HYDU_ERR_POP(status, "PMI handler returned error\n");
+ goto fn_exit;
}
+ h++;
+ }
- if (HYD_pmcd_pmip.user_global.debug) {
- HYDU_dump(stdout, "we don't understand this command %s; forwarding upstream\n",
- pmi_cmd);
- }
+ if (HYD_pmcd_pmip.user_global.debug) {
+ HYDU_dump(stdout, "we don't understand this command %s; forwarding upstream\n", pmi_cmd);
+ }
- /* We don't understand the command; forward it upstream */
- hdr.cmd = PMI_CMD;
- hdr.pid = fd;
- hdr.buflen = strlen(buf);
- status =
- HYDU_sock_write(HYD_pmcd_pmip.upstream.control, &hdr, sizeof(hdr), &sent, &closed,
- HYDU_SOCK_COMM_MSGWAIT);
- HYDU_ERR_POP(status, "unable to send PMI header upstream\n");
- HYDU_ASSERT(!closed, status);
+ /* We don't understand the command; forward it upstream */
+ hdr.cmd = PMI_CMD;
+ hdr.pid = fd;
+ hdr.buflen = strlen(buf);
+ status =
+ HYDU_sock_write(HYD_pmcd_pmip.upstream.control, &hdr, sizeof(hdr), &sent, &closed,
+ HYDU_SOCK_COMM_MSGWAIT);
+ HYDU_ERR_POP(status, "unable to send PMI header upstream\n");
+ HYDU_ASSERT(!closed, status);
- status =
- HYDU_sock_write(HYD_pmcd_pmip.upstream.control, buf, hdr.buflen, &sent, &closed,
- HYDU_SOCK_COMM_MSGWAIT);
- HYDU_ERR_POP(status, "unable to send PMI command upstream\n");
- HYDU_ASSERT(!closed, status);
+ status =
+ HYDU_sock_write(HYD_pmcd_pmip.upstream.control, buf, hdr.buflen, &sent, &closed,
+ HYDU_SOCK_COMM_MSGWAIT);
+ HYDU_ERR_POP(status, "unable to send PMI command upstream\n");
+ HYDU_ASSERT(!closed, status);
- } while (repeat);
+ if (repeat)
+ /* there are more commands to process. */
+ goto check_cmd;
fn_exit:
if (pmi_cmd)
- HYDU_FREE(pmi_cmd);
- HYDU_free_strlist(args);
+ MPL_free(pmi_cmd);
+ if (args) {
+ HYDU_free_strlist(args);
+ MPL_free(args);
+ }
if (buf)
- HYDU_FREE(buf);
+ MPL_free(buf);
HYDU_FUNC_EXIT();
return status;
@@ -365,14 +368,14 @@ static HYD_status pmi_cb(int fd, HYD_event_t events, void *userp)
static HYD_status handle_pmi_response(int fd, struct HYD_pmcd_hdr hdr)
{
- int count, closed, sent;
- char *buf = NULL, *pmi_cmd = NULL, *args[MAX_PMI_INTERNAL_ARGS] = { 0 };
+ int count, closed, sent, i;
+ char *buf = NULL, *pmi_cmd = NULL, **args = NULL;
struct HYD_pmcd_pmip_pmi_handle *h;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
- HYDU_MALLOC(buf, char *, hdr.buflen + 1, status);
+ HYDU_MALLOC_OR_JUMP(buf, char *, hdr.buflen + 1, status);
status = HYDU_sock_read(fd, buf, hdr.buflen, &count, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "unable to read PMI response from proxy\n");
@@ -380,6 +383,10 @@ static HYD_status handle_pmi_response(int fd, struct HYD_pmcd_hdr hdr)
buf[hdr.buflen] = 0;
+ HYDU_MALLOC_OR_JUMP(args, char **, MAX_PMI_INTERNAL_ARGS * sizeof(char *), status);
+ for (i = 0; i < MAX_PMI_INTERNAL_ARGS; i++)
+ args[i] = NULL;
+
status = HYD_pmcd_pmi_parse_pmi_cmd(buf, hdr.pmi_version, &pmi_cmd, args);
HYDU_ERR_POP(status, "unable to parse PMI command\n");
@@ -409,10 +416,13 @@ static HYD_status handle_pmi_response(int fd, struct HYD_pmcd_hdr hdr)
fn_exit:
if (pmi_cmd)
- HYDU_FREE(pmi_cmd);
- HYDU_free_strlist(args);
+ MPL_free(pmi_cmd);
+ if (args) {
+ HYDU_free_strlist(args);
+ MPL_free(args);
+ }
if (buf)
- HYDU_FREE(buf);
+ MPL_free(buf);
HYDU_FUNC_EXIT();
return status;
@@ -469,7 +479,6 @@ static HYD_status launch_procs(void)
struct HYD_exec *exec;
struct HYD_pmcd_hdr hdr;
int sent, closed, pmi_fds[2] = { HYD_FD_UNSET, HYD_FD_UNSET };
- char ftb_event_payload[HYDT_FTB_MAX_PAYLOAD_DATA];
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -478,20 +487,20 @@ static HYD_status launch_procs(void)
for (exec = HYD_pmcd_pmip.exec_list; exec; exec = exec->next)
HYD_pmcd_pmip.local.proxy_process_count += exec->proc_count;
- HYDU_MALLOC(HYD_pmcd_pmip.downstream.out, int *,
- HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
- HYDU_MALLOC(HYD_pmcd_pmip.downstream.err, int *,
- HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
- HYDU_MALLOC(HYD_pmcd_pmip.downstream.pid, int *,
- HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
- HYDU_MALLOC(HYD_pmcd_pmip.downstream.exit_status, int *,
- HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
- HYDU_MALLOC(HYD_pmcd_pmip.downstream.pmi_rank, int *,
- HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
- HYDU_MALLOC(HYD_pmcd_pmip.downstream.pmi_fd, int *,
- HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
- HYDU_MALLOC(HYD_pmcd_pmip.downstream.pmi_fd_active, int *,
- HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.downstream.out, int *,
+ HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.downstream.err, int *,
+ HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.downstream.pid, int *,
+ HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.downstream.exit_status, int *,
+ HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.downstream.pmi_rank, int *,
+ HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.downstream.pmi_fd, int *,
+ HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.downstream.pmi_fd_active, int *,
+ HYD_pmcd_pmip.local.proxy_process_count * sizeof(int), status);
/* Initialize the PMI_FD and PMI FD active state, and exit status */
for (i = 0; i < HYD_pmcd_pmip.local.proxy_process_count; i++) {
@@ -530,10 +539,6 @@ static HYD_status launch_procs(void)
HYDU_ERR_POP(status, "unable to create env\n");
/* Restart the proxy -- we use the first prefix in the list */
- MPL_snprintf(ftb_event_payload, HYDT_FTB_MAX_PAYLOAD_DATA, "pgid:%d ranks:%d-%d",
- HYD_pmcd_pmip.local.pgid, HYD_pmcd_pmip.downstream.pmi_rank[0],
- HYD_pmcd_pmip.downstream.pmi_rank
- [HYD_pmcd_pmip.local.proxy_process_count - 1]);
status = HYDT_ckpoint_restart(HYD_pmcd_pmip.local.pgid, HYD_pmcd_pmip.local.id,
env, HYD_pmcd_pmip.local.proxy_process_count,
HYD_pmcd_pmip.downstream.pmi_rank,
@@ -543,11 +548,8 @@ static HYD_status launch_procs(void)
HYD_pmcd_pmip.downstream.err,
HYD_pmcd_pmip.downstream.pid,
HYD_pmcd_pmip.local.ckpoint_prefix_list[0]);
- if (status)
- status = HYDT_ftb_publish("FTB_MPI_PROCS_RESTART_FAIL", ftb_event_payload);
- else
- status = HYDT_ftb_publish("FTB_MPI_PROCS_RESTARTED", ftb_event_payload);
- HYDU_ERR_POP(status, "checkpoint restart FTB publishing failure\n");
+ HYDU_ERR_POP(status, "unable to restart from checkpoint\n");
+
goto fn_spawn_complete;
}
@@ -561,7 +563,7 @@ static HYD_status launch_procs(void)
* written value if needed. */
if (!exec->env_prop && HYD_pmcd_pmip.user_global.global_env.prop)
- exec->env_prop = HYDU_strdup(HYD_pmcd_pmip.user_global.global_env.prop);
+ exec->env_prop = MPL_strdup(HYD_pmcd_pmip.user_global.global_env.prop);
if (!exec->env_prop) {
/* user didn't specify anything; add inherited env to optional env */
@@ -579,9 +581,9 @@ static HYD_status launch_procs(void)
}
else if (!strncmp(exec->env_prop, "list", strlen("list"))) {
if (exec->env_prop)
- list = HYDU_strdup(exec->env_prop + strlen("list:"));
+ list = MPL_strdup(exec->env_prop + strlen("list:"));
else
- list = HYDU_strdup(HYD_pmcd_pmip.user_global.global_env.prop + strlen("list:"));
+ list = MPL_strdup(HYD_pmcd_pmip.user_global.global_env.prop + strlen("list:"));
envstr = strtok(list, ",");
while (envstr) {
@@ -637,7 +639,7 @@ static HYD_status launch_procs(void)
if (exec->wdir && chdir(exec->wdir) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
"unable to change wdir to %s (%s)\n", exec->wdir,
- HYDU_strerror(errno));
+ MPL_strerror(errno));
for (i = 0; i < exec->proc_count; i++) {
if (using_pmi_port) {
@@ -651,14 +653,14 @@ static HYD_status launch_procs(void)
str = HYDU_int_to_str(HYD_pmcd_pmip.downstream.pmi_rank[process_id]);
status = HYDU_append_env_to_list("PMI_ID", str, &force_env);
HYDU_ERR_POP(status, "unable to add env to list\n");
- HYDU_FREE(str);
+ MPL_free(str);
}
else {
/* PMI_RANK */
str = HYDU_int_to_str(HYD_pmcd_pmip.downstream.pmi_rank[process_id]);
status = HYDU_append_env_to_list("PMI_RANK", str, &force_env);
HYDU_ERR_POP(status, "unable to add env to list\n");
- HYDU_FREE(str);
+ MPL_free(str);
if (socketpair(AF_UNIX, SOCK_STREAM, 0, pmi_fds) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "pipe error\n");
@@ -674,18 +676,18 @@ static HYD_status launch_procs(void)
status = HYDU_append_env_to_list("PMI_FD", str, &force_env);
HYDU_ERR_POP(status, "unable to add env to list\n");
- HYDU_FREE(str);
+ MPL_free(str);
/* PMI_SIZE */
str = HYDU_int_to_str(HYD_pmcd_pmip.system_global.global_process_count);
status = HYDU_append_env_to_list("PMI_SIZE", str, &force_env);
HYDU_ERR_POP(status, "unable to add env to list\n");
- HYDU_FREE(str);
+ MPL_free(str);
}
HYD_STRING_STASH_INIT(stash);
for (j = 0; exec->exec[j]; j++)
- HYD_STRING_STASH(stash, HYDU_strdup(exec->exec[j]), status);
+ HYD_STRING_STASH(stash, MPL_strdup(exec->exec[j]), status);
/* For non rank-0 processes, store the stdin socket in a
* dummy variable instead of passing NULL. Passing NULL
@@ -801,15 +803,12 @@ static HYD_status parse_exec_params(char **t_argv)
"no executable given and doesn't look like a restart either\n");
/* Set default values */
- if (HYD_pmcd_pmip.user_global.binding == NULL)
- HYD_pmcd_pmip.user_global.binding = HYDU_strdup("none");
-
if (HYD_pmcd_pmip.user_global.topolib == NULL && HYDRA_DEFAULT_TOPOLIB)
- HYD_pmcd_pmip.user_global.topolib = HYDU_strdup(HYDRA_DEFAULT_TOPOLIB);
+ HYD_pmcd_pmip.user_global.topolib = MPL_strdup(HYDRA_DEFAULT_TOPOLIB);
#ifdef HYDRA_DEFAULT_CKPOINTLIB
if (HYD_pmcd_pmip.user_global.ckpointlib == NULL)
- HYD_pmcd_pmip.user_global.ckpointlib = HYDU_strdup(HYDRA_DEFAULT_CKPOINTLIB);
+ HYD_pmcd_pmip.user_global.ckpointlib = MPL_strdup(HYDRA_DEFAULT_CKPOINTLIB);
#endif
fn_exit:
@@ -835,14 +834,14 @@ static HYD_status procinfo(int fd)
HYDU_ERR_POP(status, "error reading data from upstream\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(arglist, char **, (num_strings + 1) * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(arglist, char **, (num_strings + 1) * sizeof(char *), status);
for (i = 0; i < num_strings; i++) {
status = HYDU_sock_read(fd, &str_len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data from upstream\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(arglist[i], char *, str_len, status);
+ HYDU_MALLOC_OR_JUMP(arglist[i], char *, str_len, status);
status = HYDU_sock_read(fd, arglist[i], str_len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data from upstream\n");
@@ -855,7 +854,7 @@ static HYD_status procinfo(int fd)
HYDU_ERR_POP(status, "unable to parse argument list\n");
HYDU_free_strlist(arglist);
- HYDU_FREE(arglist);
+ MPL_free(arglist);
/* Save this fd as we need to send back the exit status on
* this. */
@@ -873,7 +872,6 @@ HYD_status HYD_pmcd_pmip_control_cmd_cb(int fd, HYD_event_t events, void *userp)
{
int cmd_len, closed;
struct HYD_pmcd_hdr hdr;
- char ftb_event_payload[HYDT_FTB_MAX_PAYLOAD_DATA];
char *buf;
HYD_status status = HYD_SUCCESS;
@@ -894,10 +892,6 @@ HYD_status HYD_pmcd_pmip_control_cmd_cb(int fd, HYD_event_t events, void *userp)
else if (hdr.cmd == CKPOINT) {
HYDU_dump(stdout, "requesting checkpoint\n");
- MPL_snprintf(ftb_event_payload, HYDT_FTB_MAX_PAYLOAD_DATA, "pgid:%d ranks:%d-%d",
- HYD_pmcd_pmip.local.pgid, HYD_pmcd_pmip.downstream.pmi_rank[0],
- HYD_pmcd_pmip.downstream.pmi_rank
- [HYD_pmcd_pmip.local.proxy_process_count - 1]);
status = HYDT_ckpoint_checkpoint(HYD_pmcd_pmip.local.pgid, HYD_pmcd_pmip.local.id,
HYD_pmcd_pmip.local.ckpoint_prefix_list[0]);
@@ -917,7 +911,7 @@ HYD_status HYD_pmcd_pmip_control_cmd_cb(int fd, HYD_event_t events, void *userp)
int count;
if (hdr.buflen) {
- HYDU_MALLOC(buf, char *, hdr.buflen, status);
+ HYDU_MALLOC_OR_JUMP(buf, char *, hdr.buflen, status);
HYDU_ERR_POP(status, "unable to allocate memory\n");
status = HYDU_sock_read(fd, buf, hdr.buflen, &count, &closed, HYDU_SOCK_COMM_MSGWAIT);
@@ -925,7 +919,7 @@ HYD_status HYD_pmcd_pmip_control_cmd_cb(int fd, HYD_event_t events, void *userp)
HYDU_ASSERT(!closed, status);
if (HYD_pmcd_pmip.downstream.in == HYD_FD_CLOSED) {
- HYDU_FREE(buf);
+ MPL_free(buf);
goto fn_exit;
}
@@ -946,7 +940,7 @@ HYD_status HYD_pmcd_pmip_control_cmd_cb(int fd, HYD_event_t events, void *userp)
HYD_pmcd_pmip.downstream.in = HYD_FD_CLOSED;
}
- HYDU_FREE(buf);
+ MPL_free(buf);
}
else {
close(HYD_pmcd_pmip.downstream.in);
diff --git a/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c b/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
index 8694f74..a18806d 100644
--- a/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
+++ b/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
@@ -9,7 +9,6 @@
#include "bsci.h"
#include "demux.h"
#include "topo.h"
-#include "hydt_ftb.h"
#define debug(...) \
{ \
@@ -47,21 +46,21 @@ static HYD_status send_cmd_upstream(const char *start, int fd, int num_args, cha
/* We need two slots for each argument (one for the argument
* itself and one for a space character), one slot for the
* command, and one for the NULL character at the end. */
- HYDU_MALLOC(tmp, char **, (2 * num_args + 2) * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(tmp, char **, (2 * num_args + 2) * sizeof(char *), status);
j = 0;
- tmp[j++] = HYDU_strdup(start);
+ tmp[j++] = MPL_strdup(start);
for (i = 0; i < num_args; i++) {
- tmp[j++] = HYDU_strdup(args[i]);
+ tmp[j++] = MPL_strdup(args[i]);
if (args[i + 1])
- tmp[j++] = HYDU_strdup(" ");
+ tmp[j++] = MPL_strdup(" ");
}
tmp[j] = NULL;
status = HYDU_str_alloc_and_join(tmp, &buf);
HYDU_ERR_POP(status, "unable to join strings\n");
HYDU_free_strlist(tmp);
- HYDU_FREE(tmp);
+ MPL_free(tmp);
HYD_pmcd_init_header(&hdr);
hdr.cmd = PMI_CMD;
@@ -81,7 +80,7 @@ static HYD_status send_cmd_upstream(const char *start, int fd, int num_args, cha
HYDU_ERR_POP(status, "unable to send PMI command upstream\n");
HYDU_ASSERT(!closed, status);
- HYDU_FREE(buf);
+ MPL_free(buf);
fn_exit:
HYDU_FUNC_EXIT();
@@ -131,7 +130,7 @@ static HYD_status cache_put_flush(int fd)
HYDU_ERR_POP(status, "error sending command upstream\n");
for (i = 0; i < cache_put.keyval_len; i++)
- HYDU_FREE(cache_put.keyval[i]);
+ MPL_free(cache_put.keyval[i]);
cache_put.keyval_len = 0;
fn_exit:
@@ -145,7 +144,7 @@ static HYD_status cache_put_flush(int fd)
static HYD_status fn_init(int fd, char *args[])
{
int pmi_version, pmi_subversion, i;
- const char *tmp = NULL;
+ char *tmp = NULL;
static int global_init = 1;
HYD_status status = HYD_SUCCESS;
@@ -157,16 +156,16 @@ static HYD_status fn_init(int fd, char *args[])
pmi_subversion = atoi(strtok(NULL, "="));
if (pmi_version == 1 && pmi_subversion <= 1)
- tmp = HYDU_strdup("cmd=response_to_init pmi_version=1 pmi_subversion=1 rc=0\n");
+ tmp = MPL_strdup("cmd=response_to_init pmi_version=1 pmi_subversion=1 rc=0\n");
else if (pmi_version == 2 && pmi_subversion == 0)
- tmp = HYDU_strdup("cmd=response_to_init pmi_version=2 pmi_subversion=0 rc=0\n");
+ tmp = MPL_strdup("cmd=response_to_init pmi_version=2 pmi_subversion=0 rc=0\n");
else /* PMI version mismatch */
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
"PMI version mismatch; %d.%d\n", pmi_version, pmi_subversion);
status = send_cmd_downstream(fd, tmp);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(tmp);
+ MPL_free(tmp);
/* initialize some structures; these are initialized exactly once,
* even if the init command is sent once from each process. */
@@ -215,22 +214,22 @@ static HYD_status fn_initack(int fd, char *args[])
HYDU_ASSERT(i < HYD_pmcd_pmip.local.proxy_process_count, status);
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=initack\ncmd=set size="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=initack\ncmd=set size="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(HYD_pmcd_pmip.system_global.global_process_count),
status);
- HYD_STRING_STASH(stash, HYDU_strdup("\ncmd=set rank="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\ncmd=set rank="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(id), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\ncmd=set debug="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\ncmd=set debug="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(HYD_pmcd_pmip.user_global.debug), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYD_pmcd_pmi_free_tokens(tokens, token_count);
@@ -250,19 +249,19 @@ static HYD_status fn_get_maxes(int fd, char *args[])
HYDU_FUNC_ENTER();
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=maxes kvsname_max="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=maxes kvsname_max="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(PMI_MAXKVSLEN), status);
- HYD_STRING_STASH(stash, HYDU_strdup(" keylen_max="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(" keylen_max="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(PMI_MAXKEYLEN), status);
- HYD_STRING_STASH(stash, HYDU_strdup(" vallen_max="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(" vallen_max="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(PMI_MAXVALLEN), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYDU_FUNC_EXIT();
@@ -297,15 +296,15 @@ static HYD_status fn_get_appnum(int fd, char *args[])
}
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=appnum appnum="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=appnum appnum="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(exec->appnum), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYDU_FUNC_EXIT();
@@ -324,15 +323,15 @@ static HYD_status fn_get_my_kvsname(int fd, char *args[])
HYDU_FUNC_ENTER();
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=my_kvsname kvsname="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(HYD_pmcd_pmip.local.kvs->kvsname), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=my_kvsname kvsname="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(HYD_pmcd_pmip.local.kvs->kvsname), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYDU_FUNC_EXIT();
@@ -351,7 +350,7 @@ static HYD_status fn_get_usize(int fd, char *args[])
HYDU_FUNC_ENTER();
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=universe_size size="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=universe_size size="), status);
if (HYD_pmcd_pmip.user_global.usize == HYD_USIZE_SYSTEM)
HYD_STRING_STASH(stash,
HYDU_int_to_str(HYD_pmcd_pmip.system_global.global_core_map.global_count),
@@ -360,13 +359,13 @@ static HYD_status fn_get_usize(int fd, char *args[])
HYD_STRING_STASH(stash, HYDU_int_to_str(-1), status);
else
HYD_STRING_STASH(stash, HYDU_int_to_str(HYD_pmcd_pmip.user_global.usize), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYDU_FUNC_EXIT();
@@ -394,16 +393,16 @@ static HYD_status fn_get(int fd, char *args[])
if (!strcmp(key, "PMI_process_mapping")) {
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=get_result rc=0 msg=success value="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(HYD_pmcd_pmip.system_global.pmi_process_mapping),
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=get_result rc=0 msg=success value="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(HYD_pmcd_pmip.system_global.pmi_process_mapping),
status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
else {
val = NULL;
@@ -416,16 +415,16 @@ static HYD_status fn_get(int fd, char *args[])
if (val) {
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=get_result rc="), status);
- HYD_STRING_STASH(stash, HYDU_strdup("0 msg=success value="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(val), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=get_result rc="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("0 msg=success value="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(val), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
else {
/* if we can't find the key locally, ask upstream */
@@ -462,13 +461,13 @@ static HYD_status fn_put(int fd, char *args[])
val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "value");
if (val == NULL)
- val = HYDU_strdup("");
+ val = MPL_strdup("");
/* add to the cache */
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup(key), status);
- HYD_STRING_STASH(stash, HYDU_strdup("="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(val), status);
+ HYD_STRING_STASH(stash, MPL_strdup(key), status);
+ HYD_STRING_STASH(stash, MPL_strdup("="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(val), status);
HYD_STRING_SPIT(stash, cmd, status);
@@ -503,14 +502,14 @@ static HYD_status fn_keyval_cache(int fd, char *args[])
/* allocate a larger space for the cached keyvals, copy over the
* older keyvals and add the new ones in */
- HYDU_REALLOC(cache_get.key, char **, (cache_get.keyval_len + token_count) * sizeof(char *),
- status);
- HYDU_REALLOC(cache_get.val, char **, (cache_get.keyval_len + token_count) * sizeof(char *),
- status);
+ HYDU_REALLOC_OR_JUMP(cache_get.key, char **,
+ (cache_get.keyval_len + token_count) * sizeof(char *), status);
+ HYDU_REALLOC_OR_JUMP(cache_get.val, char **,
+ (cache_get.keyval_len + token_count) * sizeof(char *), status);
for (i = 0; i < token_count; i++) {
- cache_get.key[cache_get.keyval_len + i] = HYDU_strdup(tokens[i].key);
- cache_get.val[cache_get.keyval_len + i] = HYDU_strdup(tokens[i].val);
+ cache_get.key[cache_get.keyval_len + i] = MPL_strdup(tokens[i].key);
+ cache_get.val[cache_get.keyval_len + i] = MPL_strdup(tokens[i].val);
}
cache_get.keyval_len += token_count;
@@ -550,20 +549,20 @@ static HYD_status fn_barrier_in(int fd, char *args[])
static HYD_status fn_barrier_out(int fd, char *args[])
{
- const char *cmd;
+ char *cmd;
int i;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
- cmd = HYDU_strdup("cmd=barrier_out\n");
+ cmd = MPL_strdup("cmd=barrier_out\n");
for (i = 0; i < HYD_pmcd_pmip.local.proxy_process_count; i++) {
status = send_cmd_downstream(HYD_pmcd_pmip.downstream.pmi_fd[i], cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
}
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYDU_FUNC_EXIT();
@@ -575,18 +574,18 @@ static HYD_status fn_barrier_out(int fd, char *args[])
static HYD_status fn_finalize(int fd, char *args[])
{
- const char *cmd;
+ char *cmd;
int i;
static int finalize_count = 0;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
- cmd = HYDU_strdup("cmd=finalize_ack\n");
+ cmd = MPL_strdup("cmd=finalize_ack\n");
status = send_cmd_downstream(fd, cmd);
HYDU_ERR_POP(status, "error sending PMI response\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
status = HYDT_dmx_deregister_fd(fd);
HYDU_ERR_POP(status, "unable to deregister fd\n");
@@ -597,11 +596,11 @@ static HYD_status fn_finalize(int fd, char *args[])
if (finalize_count == HYD_pmcd_pmip.local.proxy_process_count) {
/* All processes have finalized */
for (i = 0; i < cache_get.keyval_len; i++) {
- HYDU_FREE(cache_get.key[i]);
- HYDU_FREE(cache_get.val[i]);
+ MPL_free(cache_get.key[i]);
+ MPL_free(cache_get.val[i]);
}
- HYDU_FREE(cache_get.key);
- HYDU_FREE(cache_get.val);
+ MPL_free(cache_get.key);
+ MPL_free(cache_get.val);
}
fn_exit:
diff --git a/src/pm/hydra/pm/pmiserv/pmip_pmi_v2.c b/src/pm/hydra/pm/pmiserv/pmip_pmi_v2.c
index 7a1723b..4a7df51 100644
--- a/src/pm/hydra/pm/pmiserv/pmip_pmi_v2.c
+++ b/src/pm/hydra/pm/pmiserv/pmip_pmi_v2.c
@@ -26,11 +26,11 @@ static HYD_status send_cmd_upstream(const char *start, int fd, char *args[])
HYDU_FUNC_ENTER();
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup(start), status);
+ HYD_STRING_STASH(stash, MPL_strdup(start), status);
for (i = 0; args[i]; i++) {
- HYD_STRING_STASH(stash, HYDU_strdup(args[i]), status);
+ HYD_STRING_STASH(stash, MPL_strdup(args[i]), status);
if (args[i + 1])
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
HYD_STRING_SPIT(stash, buf, status);
@@ -57,7 +57,7 @@ static HYD_status send_cmd_upstream(const char *start, int fd, char *args[])
fn_exit:
if (buf)
- HYDU_FREE(buf);
+ MPL_free(buf);
HYDU_FUNC_EXIT();
return status;
@@ -73,7 +73,7 @@ static HYD_status send_cmd_downstream(int fd, const char *cmd)
HYDU_FUNC_ENTER();
- HYDU_snprintf(cmdlen, 7, "%6u", (unsigned) strlen(cmd));
+ MPL_snprintf(cmdlen, 7, "%6u", (unsigned) strlen(cmd));
status = HYDU_sock_write(fd, cmdlen, 6, &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error writing PMI line\n");
/* FIXME: We cannot abort when we are not able to send data
@@ -132,7 +132,7 @@ static HYD_status poke_progress(char *key)
/* Free the dequeued request */
HYDU_free_strlist(req->args);
- HYDU_FREE(req);
+ MPL_free(req);
}
}
@@ -180,30 +180,30 @@ static HYD_status fn_fullinit(int fd, char *args[])
HYD_STRING_STASH_INIT(stash);
HYD_STRING_STASH(stash,
- HYDU_strdup("cmd=fullinit-response;pmi-version=2;pmi-subversion=0;rank="),
+ MPL_strdup("cmd=fullinit-response;pmi-version=2;pmi-subversion=0;rank="),
status);
HYD_STRING_STASH(stash, HYDU_int_to_str(id), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";size="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";size="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(HYD_pmcd_pmip.system_global.global_process_count),
status);
- HYD_STRING_STASH(stash, HYDU_strdup(";appnum=0"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";appnum=0"), status);
if (HYD_pmcd_pmip.local.spawner_kvsname) {
- HYD_STRING_STASH(stash, HYDU_strdup(";spawner-jobid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(HYD_pmcd_pmip.local.spawner_kvsname), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";spawner-jobid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(HYD_pmcd_pmip.local.spawner_kvsname), status);
}
if (HYD_pmcd_pmip.user_global.debug) {
- HYD_STRING_STASH(stash, HYDU_strdup(";debugged=TRUE;pmiverbose=TRUE"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";debugged=TRUE;pmiverbose=TRUE"), status);
}
else {
- HYD_STRING_STASH(stash, HYDU_strdup(";debugged=FALSE;pmiverbose=FALSE"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";debugged=FALSE;pmiverbose=FALSE"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup(";rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYD_pmcd_pmi_free_tokens(tokens, token_count);
@@ -230,20 +230,20 @@ static HYD_status fn_job_getid(int fd, char *args[])
thrid = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "thrid");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=job-getid-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=job-getid-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("jobid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(HYD_pmcd_pmip.local.kvs->kvsname), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("jobid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(HYD_pmcd_pmip.local.kvs->kvsname), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
if (tokens)
@@ -281,20 +281,20 @@ static HYD_status fn_info_putnodeattr(int fd, char *args[])
HYDU_ERR_POP(status, "unable to put data into kvs\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=info-putnodeattr-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=info-putnodeattr-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("rc="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(ret), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
- HYDU_FREE(cmd);
+ MPL_free(cmd);
for (req = pending_reqs; req; req = req->next) {
if (!strcmp(req->key, key)) {
@@ -350,20 +350,20 @@ static HYD_status fn_info_getnodeattr(int fd, char *args[])
if (found) { /* We found the attribute */
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=info-getnodeattr-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=info-getnodeattr-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("found=TRUE;value="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(run->val), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("found=TRUE;value="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(run->val), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
else if (waitval && !strcmp(waitval, "TRUE")) {
/* The client wants to wait for a response; queue up the request */
@@ -375,18 +375,18 @@ static HYD_status fn_info_getnodeattr(int fd, char *args[])
else {
/* Tell the client that we can't find the attribute */
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=info-getnodeattr-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=info-getnodeattr-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("found=FALSE;rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("found=FALSE;rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
fn_exit:
@@ -419,21 +419,21 @@ static HYD_status fn_info_getjobattr(int fd, char *args[])
if (!strcmp(key, "PMI_process_mapping")) {
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=info-getjobattr-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=info-getjobattr-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("found=TRUE;value="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(HYD_pmcd_pmip.system_global.pmi_process_mapping),
+ HYD_STRING_STASH(stash, MPL_strdup("found=TRUE;value="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(HYD_pmcd_pmip.system_global.pmi_process_mapping),
status);
- HYD_STRING_STASH(stash, HYDU_strdup(";rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
else {
status = send_cmd_upstream("cmd=info-getjobattr;", fd, args);
@@ -466,18 +466,18 @@ static HYD_status fn_finalize(int fd, char *args[])
thrid = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "thrid");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=finalize-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=finalize-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
- HYDU_FREE(cmd);
+ MPL_free(cmd);
status = HYDT_dmx_deregister_fd(fd);
HYDU_ERR_POP(status, "unable to deregister fd\n");
diff --git a/src/pm/hydra/pm/pmiserv/pmip_utils.c b/src/pm/hydra/pm/pmiserv/pmip_utils.c
index e1fa33a..badf997 100644
--- a/src/pm/hydra/pm/pmiserv/pmip_utils.c
+++ b/src/pm/hydra/pm/pmiserv/pmip_utils.c
@@ -41,15 +41,15 @@ static HYD_status control_port_fn(char *arg, char ***argv)
HYDU_ERR_CHKANDJUMP(status, HYD_pmcd_pmip.upstream.server_name, HYD_INTERNAL_ERROR,
"duplicate control port setting\n");
- port = HYDU_strdup(**argv);
- HYD_pmcd_pmip.upstream.server_name = HYDU_strdup(strtok(port, ":"));
+ port = MPL_strdup(**argv);
+ HYD_pmcd_pmip.upstream.server_name = MPL_strdup(strtok(port, ":"));
HYD_pmcd_pmip.upstream.server_port = atoi(strtok(NULL, ":"));
(*argv)++;
fn_exit:
if (port)
- HYDU_FREE(port);
+ MPL_free(port);
return status;
fn_fail:
@@ -173,7 +173,7 @@ static HYD_status retries_fn(char *arg, char ***argv)
static HYD_status pmi_kvsname_fn(char *arg, char ***argv)
{
- HYDU_snprintf(HYD_pmcd_pmip.local.kvs->kvsname, PMI_MAXKVSLEN, "%s", **argv);
+ MPL_snprintf(HYD_pmcd_pmip.local.kvs->kvsname, PMI_MAXKVSLEN, "%s", **argv);
(*argv)++;
return HYD_SUCCESS;
@@ -183,9 +183,9 @@ static HYD_status pmi_spawner_kvsname_fn(char *arg, char ***argv)
{
HYD_status status = HYD_SUCCESS;
- HYDU_MALLOC(HYD_pmcd_pmip.local.spawner_kvsname, char *, PMI_MAXKVSLEN, status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.local.spawner_kvsname, char *, PMI_MAXKVSLEN, status);
- HYDU_snprintf(HYD_pmcd_pmip.local.spawner_kvsname, PMI_MAXKVSLEN, "%s", **argv);
+ MPL_snprintf(HYD_pmcd_pmip.local.spawner_kvsname, PMI_MAXKVSLEN, "%s", **argv);
(*argv)++;
fn_exit:
@@ -287,13 +287,13 @@ static HYD_status parse_ckpoint_prefix(char *pathlist)
/* Add one more to the prefix list for a NULL ending string */
prefixes++;
- HYDU_MALLOC(HYD_pmcd_pmip.local.ckpoint_prefix_list, char **, prefixes * sizeof(char *),
- status);
+ HYDU_MALLOC_OR_JUMP(HYD_pmcd_pmip.local.ckpoint_prefix_list, char **, prefixes * sizeof(char *),
+ status);
dummy = strtok(pathlist, ":");
i = 0;
while (dummy) {
- HYD_pmcd_pmip.local.ckpoint_prefix_list[i] = HYDU_strdup(dummy);
+ HYD_pmcd_pmip.local.ckpoint_prefix_list[i] = MPL_strdup(dummy);
dummy = strtok(NULL, ":");
i++;
}
@@ -350,12 +350,8 @@ static HYD_status global_env_fn(char *arg, char ***argv)
}
(*argv)++;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
static HYD_status genv_prop_fn(char *arg, char ***argv)
@@ -375,7 +371,7 @@ static HYD_status global_core_map_fn(char *arg, char ***argv)
HYD_status status = HYD_SUCCESS;
/* Split the core map into three different segments */
- map = HYDU_strdup(**argv);
+ map = MPL_strdup(**argv);
HYDU_ASSERT(map, status);
tmp = strtok(map, ",");
@@ -390,7 +386,7 @@ static HYD_status global_core_map_fn(char *arg, char ***argv)
HYDU_ASSERT(tmp, status);
HYD_pmcd_pmip.system_global.global_core_map.global_count = atoi(tmp);
- HYDU_FREE(map);
+ MPL_free(map);
(*argv)++;
@@ -408,7 +404,7 @@ static HYD_status pmi_id_map_fn(char *arg, char ***argv)
HYD_status status = HYD_SUCCESS;
/* Split the core map into three different segments */
- map = HYDU_strdup(**argv);
+ map = MPL_strdup(**argv);
HYDU_ASSERT(map, status);
tmp = strtok(map, ",");
@@ -419,7 +415,7 @@ static HYD_status pmi_id_map_fn(char *arg, char ***argv)
HYDU_ASSERT(tmp, status);
HYD_pmcd_pmip.system_global.pmi_id_map.non_filler_start = atoi(tmp);
- HYDU_FREE(map);
+ MPL_free(map);
(*argv)++;
@@ -618,7 +614,7 @@ static HYD_status exec_args_fn(char *arg, char ***argv)
count = atoi(**argv);
for (i = 0; i < count; i++) {
(*argv)++;
- exec->exec[i] = HYDU_strdup(**argv);
+ exec->exec[i] = MPL_strdup(**argv);
}
exec->exec[i] = NULL;
(*argv)++;
@@ -732,8 +728,8 @@ HYD_status HYD_pmcd_pmip_get_params(char **t_argv)
HYD_pmcd_pmip.local.retries = 0;
HYDU_dbg_finalize();
- HYDU_snprintf(dbg_prefix, 2 * MAX_HOSTNAME_LEN, "proxy:%d:%d",
- HYD_pmcd_pmip.local.pgid, HYD_pmcd_pmip.local.id);
+ MPL_snprintf(dbg_prefix, 2 * MAX_HOSTNAME_LEN, "proxy:%d:%d",
+ HYD_pmcd_pmip.local.pgid, HYD_pmcd_pmip.local.id);
status = HYDU_dbg_init((const char *) dbg_prefix);
HYDU_ERR_POP(status, "unable to initialization debugging\n");
diff --git a/src/pm/hydra/pm/pmiserv/pmiserv_cb.c b/src/pm/hydra/pm/pmiserv/pmiserv_cb.c
index f5dbec2..acc8007 100644
--- a/src/pm/hydra/pm/pmiserv/pmiserv_cb.c
+++ b/src/pm/hydra/pm/pmiserv/pmiserv_cb.c
@@ -15,8 +15,9 @@
static HYD_status handle_pmi_cmd(int fd, int pgid, int pid, char *buf, int pmi_version)
{
- char *args[MAX_PMI_ARGS], *cmd = NULL;
+ char **args = NULL, *cmd = NULL;
struct HYD_pmcd_pmi_handle *h;
+ int i;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -29,6 +30,10 @@ static HYD_status handle_pmi_cmd(int fd, int pgid, int pid, char *buf, int pmi_v
if (HYD_server_info.user_global.debug)
HYDU_dump(stdout, "[pgid: %d] got PMI command: %s\n", pgid, buf);
+ HYDU_MALLOC_OR_JUMP(args, char **, MAX_PMI_ARGS * sizeof(char *), status);
+ for (i = 0; i < MAX_PMI_ARGS; i++)
+ args[i] = NULL;
+
status = HYD_pmcd_pmi_parse_pmi_cmd(buf, pmi_version, &cmd, args);
HYDU_ERR_POP(status, "unable to parse PMI command\n");
@@ -54,8 +59,11 @@ static HYD_status handle_pmi_cmd(int fd, int pgid, int pid, char *buf, int pmi_v
fn_exit:
if (cmd)
- HYDU_FREE(cmd);
- HYDU_free_strlist(args);
+ MPL_free(cmd);
+ if (args) {
+ HYDU_free_strlist(args);
+ MPL_free(args);
+ }
HYDU_FUNC_EXIT();
return status;
@@ -201,7 +209,7 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
}
if (hdr.cmd == PID_LIST) { /* Got PIDs */
- HYDU_MALLOC(proxy->pid, int *, proxy->proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(proxy->pid, int *, proxy->proxy_process_count * sizeof(int), status);
status = HYDU_sock_read(fd, (void *) proxy->pid,
proxy->proxy_process_count * sizeof(int),
&count, &closed, HYDU_SOCK_COMM_MSGWAIT);
@@ -224,7 +232,8 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "debugger setup failed\n");
}
else if (hdr.cmd == EXIT_STATUS) {
- HYDU_MALLOC(proxy->exit_status, int *, proxy->proxy_process_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(proxy->exit_status, int *, proxy->proxy_process_count * sizeof(int),
+ status);
status =
HYDU_sock_read(fd, (void *) proxy->exit_status,
proxy->proxy_process_count * sizeof(int), &count, &closed,
@@ -267,7 +276,7 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
}
}
else if (hdr.cmd == PMI_CMD) {
- HYDU_MALLOC(buf, char *, hdr.buflen + 1, status);
+ HYDU_MALLOC_OR_JUMP(buf, char *, hdr.buflen + 1, status);
status = HYDU_sock_read(fd, buf, hdr.buflen, &count, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "unable to read PMI command from proxy\n");
@@ -278,10 +287,10 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
status = handle_pmi_cmd(fd, proxy->pg->pgid, hdr.pid, buf, hdr.pmi_version);
HYDU_ERR_POP(status, "unable to process PMI command\n");
- HYDU_FREE(buf);
+ MPL_free(buf);
}
else if (hdr.cmd == STDOUT || hdr.cmd == STDERR) {
- HYDU_MALLOC(buf, char *, hdr.buflen, status);
+ HYDU_MALLOC_OR_JUMP(buf, char *, hdr.buflen, status);
status = HYDU_sock_read(fd, buf, hdr.buflen, &count, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "unable to read PMI command from proxy\n");
@@ -293,10 +302,10 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
status = HYD_server_info.stderr_cb(hdr.pgid, hdr.proxy_id, hdr.rank, buf, hdr.buflen);
HYDU_ERR_POP(status, "error in the UI defined callback\n");
- HYDU_FREE(buf);
+ MPL_free(buf);
}
else if (hdr.cmd == STDIN) {
- HYDU_MALLOC(buf, char *, HYD_TMPBUF_SIZE, status);
+ HYDU_MALLOC_OR_JUMP(buf, char *, HYD_TMPBUF_SIZE, status);
HYDU_ERR_POP(status, "unable to allocate memory\n");
HYDU_sock_read(STDIN_FILENO, buf, HYD_TMPBUF_SIZE, &count, &closed, HYDU_SOCK_COMM_NONE);
@@ -315,7 +324,7 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "error writing to control socket\n");
HYDU_ASSERT(!closed, status);
- HYDU_FREE(buf);
+ MPL_free(buf);
}
else {
status = HYDT_dmx_deregister_fd(STDIN_FILENO);
@@ -330,9 +339,9 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
if (pg_scratch->dead_process_count == 1) {
/* This is the first dead process */
- HYDU_FREE(pg_scratch->dead_processes);
- HYDU_MALLOC(pg_scratch->dead_processes, char *, PMI_MAXVALLEN, status);
- HYDU_snprintf(pg_scratch->dead_processes, PMI_MAXVALLEN, "%d", hdr.pid);
+ MPL_free(pg_scratch->dead_processes);
+ HYDU_MALLOC_OR_JUMP(pg_scratch->dead_processes, char *, PMI_MAXVALLEN, status);
+ MPL_snprintf(pg_scratch->dead_processes, PMI_MAXVALLEN, "%d", hdr.pid);
}
else {
/* FIXME: If the list of dead processes does not fit
@@ -349,7 +358,7 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
int included = 0, value;
/* Create a sorted list of processes */
- current_list = HYDU_strdup(pg_scratch->dead_processes);
+ current_list = MPL_strdup(pg_scratch->dead_processes);
/* Search to see if this process is already in the list */
included = 0;
@@ -365,10 +374,11 @@ static HYD_status control_cb(int fd, HYD_event_t events, void *userp)
/* Add this process to the end of the list */
if (!included) {
- HYDU_MALLOC(str, char *, PMI_MAXVALLEN, status);
+ HYDU_MALLOC_OR_JUMP(str, char *, PMI_MAXVALLEN, status);
- HYDU_snprintf(str, PMI_MAXVALLEN, "%s,%d", pg_scratch->dead_processes, hdr.pid);
- } else {
+ MPL_snprintf(str, PMI_MAXVALLEN, "%s,%d", pg_scratch->dead_processes, hdr.pid);
+ }
+ else {
str = current_list;
}
pg_scratch->dead_processes = str;
diff --git a/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c b/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c
index 304f728..b28be62 100644
--- a/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c
+++ b/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c
@@ -126,7 +126,7 @@ HYD_status HYD_pmci_launch_procs(void)
for (proxy = HYD_server_info.pg_list.proxy_list; proxy; proxy = proxy->next)
node_count++;
- HYDU_MALLOC(control_fd, int *, node_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(control_fd, int *, node_count * sizeof(int), status);
for (i = 0; i < node_count; i++)
control_fd[i] = HYD_FD_UNSET;
@@ -143,11 +143,11 @@ HYD_status HYD_pmci_launch_procs(void)
HYDU_ERR_POP(status, "unable to register fd\n");
}
- HYDU_FREE(control_fd);
+ MPL_free(control_fd);
fn_exit:
if (control_port)
- HYDU_FREE(control_port);
+ MPL_free(control_port);
HYD_STRING_STASH_FREE(proxy_stash);
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/pm/pmiserv/pmiserv_pmi.c b/src/pm/hydra/pm/pmiserv/pmiserv_pmi.c
index 82b6db7..372e428 100644
--- a/src/pm/hydra/pm/pmiserv/pmiserv_pmi.c
+++ b/src/pm/hydra/pm/pmiserv/pmiserv_pmi.c
@@ -42,22 +42,18 @@ HYD_status HYD_pmcd_pmi_free_publish(struct HYD_pmcd_pmi_publish * publish)
HYDU_FUNC_ENTER();
- HYDU_FREE(publish->name);
- HYDU_FREE(publish->port);
+ MPL_free(publish->name);
+ MPL_free(publish->port);
for (i = 0; i < publish->infokeycount; i++) {
- HYDU_FREE(publish->info_keys[i].key);
- HYDU_FREE(publish->info_keys[i].val);
+ MPL_free(publish->info_keys[i].key);
+ MPL_free(publish->info_keys[i].val);
}
if (publish->info_keys)
- HYDU_FREE(publish->info_keys);
+ MPL_free(publish->info_keys);
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
@@ -81,10 +77,10 @@ HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
}
*success = 1;
- HYDU_MALLOC(publish, struct HYD_pmcd_pmi_publish *,
- sizeof(struct HYD_pmcd_pmi_publish), status);
- publish->name = HYDU_strdup(name);
- publish->port = HYDU_strdup(port);
+ HYDU_MALLOC_OR_JUMP(publish, struct HYD_pmcd_pmi_publish *,
+ sizeof(struct HYD_pmcd_pmi_publish), status);
+ publish->name = MPL_strdup(name);
+ publish->port = MPL_strdup(port);
publish->infokeycount = 0;
publish->info_keys = NULL;
publish->next = NULL;
@@ -102,7 +98,7 @@ HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
/* connect to the external nameserver and store the
* information there */
- ns = HYDU_strdup(HYD_server_info.nameserver);
+ ns = MPL_strdup(HYD_server_info.nameserver);
ns_host = strtok(ns, ":");
HYDU_ASSERT(ns_host, status);
@@ -117,9 +113,9 @@ HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
HYDU_ERR_POP(status, "error connecting to the nameserver\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("PUBLISH"), status);
- HYD_STRING_STASH(stash, HYDU_strdup(name), status);
- HYD_STRING_STASH(stash, HYDU_strdup(port), status);
+ HYD_STRING_STASH(stash, MPL_strdup("PUBLISH"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(name), status);
+ HYD_STRING_STASH(stash, MPL_strdup(port), status);
status = HYDU_send_strlist(ns_fd, stash.strlist);
HYDU_ERR_POP(status, "error sending string list\n");
@@ -129,7 +125,7 @@ HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
HYDU_ERR_POP(status, "error reading from nameserver\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(resp, char *, len, status);
+ HYDU_MALLOC_OR_JUMP(resp, char *, len, status);
status = HYDU_sock_read(ns_fd, resp, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading from nameserver\n");
HYDU_ASSERT(len == recvd, status);
@@ -141,7 +137,7 @@ HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
else
*success = 0;
- HYDU_FREE(resp);
+ MPL_free(resp);
}
fn_exit:
@@ -177,7 +173,7 @@ HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
publish->next = NULL;
HYD_pmcd_pmi_free_publish(publish);
- HYDU_FREE(publish);
+ MPL_free(publish);
*success = 1;
}
else {
@@ -191,7 +187,7 @@ HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
r->next = NULL;
HYD_pmcd_pmi_free_publish(r);
- HYDU_FREE(r);
+ MPL_free(r);
*success = 1;
}
else
@@ -205,7 +201,7 @@ HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
/* connect to the external nameserver and get the information
* from there */
- ns = HYDU_strdup(HYD_server_info.nameserver);
+ ns = MPL_strdup(HYD_server_info.nameserver);
ns_host = strtok(ns, ":");
HYDU_ASSERT(ns_host, status);
@@ -220,8 +216,8 @@ HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
HYDU_ERR_POP(status, "error connecting to the nameserver\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("UNPUBLISH"), status);
- HYD_STRING_STASH(stash, HYDU_strdup(name), status);
+ HYD_STRING_STASH(stash, MPL_strdup("UNPUBLISH"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(name), status);
status = HYDU_send_strlist(ns_fd, stash.strlist);
HYDU_ERR_POP(status, "error sending string list\n");
@@ -231,7 +227,7 @@ HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
HYDU_ERR_POP(status, "error reading from nameserver\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(resp, char *, len, status);
+ HYDU_MALLOC_OR_JUMP(resp, char *, len, status);
status = HYDU_sock_read(ns_fd, resp, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading from nameserver\n");
HYDU_ASSERT(len == recvd, status);
@@ -240,7 +236,7 @@ HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
if (!strcmp(resp, "SUCCESS"))
*success = 1;
- HYDU_FREE(resp);
+ MPL_free(resp);
}
fn_exit:
@@ -270,7 +266,7 @@ HYD_status HYD_pmcd_pmi_lookup(char *name, char **value)
break;
if (publish)
- *value = HYDU_strdup(publish->port);
+ *value = MPL_strdup(publish->port);
}
else {
int len, recvd, closed;
@@ -278,7 +274,7 @@ HYD_status HYD_pmcd_pmi_lookup(char *name, char **value)
/* connect to the external nameserver and get the information
* from there */
- ns = HYDU_strdup(HYD_server_info.nameserver);
+ ns = MPL_strdup(HYD_server_info.nameserver);
ns_host = strtok(ns, ":");
HYDU_ASSERT(ns_host, status);
@@ -293,8 +289,8 @@ HYD_status HYD_pmcd_pmi_lookup(char *name, char **value)
HYDU_ERR_POP(status, "error connecting to the nameserver\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("LOOKUP"), status);
- HYD_STRING_STASH(stash, HYDU_strdup(name), status);
+ HYD_STRING_STASH(stash, MPL_strdup("LOOKUP"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(name), status);
status = HYDU_send_strlist(ns_fd, stash.strlist);
HYDU_ERR_POP(status, "error sending string list\n");
@@ -305,7 +301,7 @@ HYD_status HYD_pmcd_pmi_lookup(char *name, char **value)
HYDU_ASSERT(!closed, status);
if (len) {
- HYDU_MALLOC(resp, char *, len, status);
+ HYDU_MALLOC_OR_JUMP(resp, char *, len, status);
status = HYDU_sock_read(ns_fd, resp, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading from nameserver\n");
HYDU_ASSERT(len == recvd, status);
diff --git a/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c b/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c
index 41885e0..4c41999 100644
--- a/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c
+++ b/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v1.c
@@ -69,25 +69,25 @@ static HYD_status bcast_keyvals(int fd, int pid)
/* Each keyval has the following four items: 'key' '=' 'val'
* '<space>'. Two additional items for the command at the start
* and the NULL at the end. */
- HYDU_MALLOC(tmp, char **, (4 * keyval_count + 3) * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(tmp, char **, (4 * keyval_count + 3) * sizeof(char *), status);
/* send all available keyvals downstream */
if (keyval_count) {
arg_count = 1;
i = 0;
- tmp[i++] = HYDU_strdup("cmd=keyval_cache ");
+ tmp[i++] = MPL_strdup("cmd=keyval_cache ");
for (run = pg_scratch->kvs->key_pair, j = 0; run; run = run->next, j++) {
if (j < pg_scratch->keyval_dist_count)
continue;
- tmp[i++] = HYDU_strdup(run->key);
- tmp[i++] = HYDU_strdup("=");
- tmp[i++] = HYDU_strdup(run->val);
- tmp[i++] = HYDU_strdup(" ");
+ tmp[i++] = MPL_strdup(run->key);
+ tmp[i++] = MPL_strdup("=");
+ tmp[i++] = MPL_strdup(run->val);
+ tmp[i++] = MPL_strdup(" ");
arg_count++;
if (arg_count >= MAX_PMI_INTERNAL_ARGS) {
- tmp[i++] = HYDU_strdup("\n");
+ tmp[i++] = MPL_strdup("\n");
tmp[i++] = NULL;
status = HYDU_str_alloc_and_join(tmp, &cmd);
@@ -99,14 +99,14 @@ static HYD_status bcast_keyvals(int fd, int pid)
status = cmd_response(tproxy->control_fd, pid, cmd);
HYDU_ERR_POP(status, "error writing PMI line\n");
}
- HYDU_FREE(cmd);
+ MPL_free(cmd);
i = 0;
- tmp[i++] = HYDU_strdup("cmd=keyval_cache ");
+ tmp[i++] = MPL_strdup("cmd=keyval_cache ");
arg_count = 1;
}
}
- tmp[i++] = HYDU_strdup("\n");
+ tmp[i++] = MPL_strdup("\n");
tmp[i++] = NULL;
if (arg_count > 1) {
@@ -118,14 +118,14 @@ static HYD_status bcast_keyvals(int fd, int pid)
status = cmd_response(tproxy->control_fd, pid, cmd);
HYDU_ERR_POP(status, "error writing PMI line\n");
}
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
HYDU_free_strlist(tmp);
}
fn_exit:
if (tmp)
- HYDU_FREE(tmp);
+ MPL_free(tmp);
HYDU_FUNC_EXIT();
return status;
@@ -249,17 +249,17 @@ static HYD_status fn_get(int fd, int pid, int pgid, char *args[])
found_val:
i = 0;
- tmp[i++] = HYDU_strdup("cmd=get_result rc=");
+ tmp[i++] = MPL_strdup("cmd=get_result rc=");
if (val) {
- tmp[i++] = HYDU_strdup("0 msg=success value=");
- tmp[i++] = HYDU_strdup(val);
+ tmp[i++] = MPL_strdup("0 msg=success value=");
+ tmp[i++] = MPL_strdup(val);
}
else {
- tmp[i++] = HYDU_strdup("-1 msg=key_");
- tmp[i++] = HYDU_strdup(key);
- tmp[i++] = HYDU_strdup("_not_found value=unknown");
+ tmp[i++] = MPL_strdup("-1 msg=key_");
+ tmp[i++] = MPL_strdup(key);
+ tmp[i++] = MPL_strdup("_not_found value=unknown");
}
- tmp[i++] = HYDU_strdup("\n");
+ tmp[i++] = MPL_strdup("\n");
tmp[i++] = NULL;
status = HYDU_str_alloc_and_join(tmp, &cmd);
@@ -268,7 +268,7 @@ static HYD_status fn_get(int fd, int pid, int pgid, char *args[])
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "error writing PMI line\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYD_pmcd_pmi_free_tokens(tokens, token_count);
@@ -330,7 +330,7 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
HYDU_FUNC_ENTER();
for (i = 0; args[i]; i++)
- mcmd_args[mcmd_num_args++] = HYDU_strdup(args[i]);
+ mcmd_args[mcmd_num_args++] = MPL_strdup(args[i]);
mcmd_args[mcmd_num_args] = NULL;
/* Initialize the proxy stash, so it can be freed if we jump to
@@ -365,8 +365,8 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
"unable to find token: totspawns\n");
total_spawns = atoi(val);
- HYDU_MALLOC(segment_list, struct HYD_pmcd_token_segment *,
- total_spawns * sizeof(struct HYD_pmcd_token_segment), status);
+ HYDU_MALLOC_OR_JUMP(segment_list, struct HYD_pmcd_token_segment *,
+ total_spawns * sizeof(struct HYD_pmcd_token_segment), status);
segment_tokens(tokens, token_count, segment_list, &num_segments);
@@ -435,14 +435,14 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
for (i = 0; i < info_num; i++) {
char *info_key, *info_val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "info_key_%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "info_key_%d", i);
val = HYD_pmcd_pmi_find_token_keyval(&tokens[segment_list[j].start_idx],
segment_list[j].token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
info_key = val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "info_val_%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "info_val_%d", i);
val = HYD_pmcd_pmi_find_token_keyval(&tokens[segment_list[j].start_idx],
segment_list[j].token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
@@ -450,10 +450,10 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
info_val = val;
if (!strcmp(info_key, "path")) {
- path = HYDU_strdup(info_val);
+ path = MPL_strdup(info_val);
}
else if (!strcmp(info_key, "wdir")) {
- exec->wdir = HYDU_strdup(info_val);
+ exec->wdir = MPL_strdup(info_val);
}
else if (!strcmp(info_key, "host") || !strcmp(info_key, "hosts")) {
char *saveptr;
@@ -482,12 +482,12 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: execname\n");
if (path == NULL)
- execname = HYDU_strdup(val);
+ execname = MPL_strdup(val);
else {
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup(path), status);
- HYD_STRING_STASH(stash, HYDU_strdup("/"), status);
- HYD_STRING_STASH(stash, HYDU_strdup(val), status);
+ HYD_STRING_STASH(stash, MPL_strdup(path), status);
+ HYD_STRING_STASH(stash, MPL_strdup("/"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(val), status);
HYD_STRING_SPIT(stash, execname, status);
}
@@ -495,12 +495,12 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
i = 0;
exec->exec[i++] = execname;
for (k = 0; k < argcnt; k++) {
- HYDU_snprintf(key, PMI_MAXKEYLEN, "arg%d", k + 1);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "arg%d", k + 1);
val = HYD_pmcd_pmi_find_token_keyval(&tokens[segment_list[j].start_idx],
segment_list[j].token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
- exec->exec[i++] = HYDU_strdup(val);
+ exec->exec[i++] = MPL_strdup(val);
}
exec->exec[i++] = NULL;
@@ -535,13 +535,13 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
for (i = 0; i < preput_num; i++) {
char *preput_key, *preput_val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "preput_key_%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "preput_key_%d", i);
val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
preput_key = val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "preput_val_%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "preput_val_%d", i);
val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
@@ -587,7 +587,7 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
status = HYD_pmcd_pmi_fill_in_proxy_args(&proxy_stash, control_port, new_pgid);
HYDU_ERR_POP(status, "unable to fill in proxy arguments\n");
- HYDU_FREE(control_port);
+ MPL_free(control_port);
status = HYD_pmcd_pmi_fill_in_exec_launch_info(pg);
HYDU_ERR_POP(status, "unable to fill in executable arguments\n");
@@ -599,14 +599,14 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
char *cmd;
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=spawn_result rc=0"), status);
- HYD_STRING_STASH(stash, HYDU_strdup("\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=spawn_result rc=0"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("\n"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "error writing PMI line\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
/* Cache the pre-initialized keyvals on the new proxies */
@@ -617,7 +617,7 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
HYD_pmcd_pmi_free_tokens(tokens, token_count);
HYD_STRING_STASH_FREE(proxy_stash);
if (segment_list)
- HYDU_FREE(segment_list);
+ MPL_free(segment_list);
HYDU_FUNC_EXIT();
return status;
@@ -642,37 +642,37 @@ static HYD_status fn_publish_name(int fd, int pid, int pgid, char *args[])
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "service")) == NULL)
HYDU_ERR_POP(status, "cannot find token: service\n");
- name = HYDU_strdup(val);
+ name = MPL_strdup(val);
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "port")) == NULL)
HYDU_ERR_POP(status, "cannot find token: port\n");
- port = HYDU_strdup(val);
+ port = MPL_strdup(val);
status = HYD_pmcd_pmi_publish(name, port, &success);
HYDU_ERR_POP(status, "error publishing service\n");
HYD_STRING_STASH_INIT(stash);
if (success)
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=publish_result info=ok rc=0 msg=success\n"),
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=publish_result info=ok rc=0 msg=success\n"),
status);
else
HYD_STRING_STASH(stash,
- HYDU_strdup("cmd=publish_result info=ok rc=1 msg=key_already_present\n"),
+ MPL_strdup("cmd=publish_result info=ok rc=1 msg=key_already_present\n"),
status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
if (tokens)
HYD_pmcd_pmi_free_tokens(tokens, token_count);
if (name)
- HYDU_FREE(name);
+ MPL_free(name);
if (port)
- HYDU_FREE(port);
+ MPL_free(port);
HYDU_FUNC_EXIT();
return status;
@@ -703,18 +703,18 @@ static HYD_status fn_unpublish_name(int fd, int pid, int pgid, char *args[])
HYD_STRING_STASH_INIT(stash);
if (success)
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=unpublish_result info=ok rc=0 msg=success\n"),
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=unpublish_result info=ok rc=0 msg=success\n"),
status);
else
HYD_STRING_STASH(stash,
- HYDU_strdup("cmd=unpublish_result info=ok rc=1 msg=service_not_found\n"),
+ MPL_strdup("cmd=unpublish_result info=ok rc=1 msg=service_not_found\n"),
status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
if (tokens)
@@ -746,27 +746,27 @@ static HYD_status fn_lookup_name(int fd, int pid, int pgid, char *args[])
HYDU_ERR_POP(status, "error while looking up service\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=lookup_result"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=lookup_result"), status);
if (value) {
- HYD_STRING_STASH(stash, HYDU_strdup(" port="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(value), status);
- HYD_STRING_STASH(stash, HYDU_strdup(" info=ok rc=0 msg=success\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(" port="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(value), status);
+ HYD_STRING_STASH(stash, MPL_strdup(" info=ok rc=0 msg=success\n"), status);
}
else {
- HYD_STRING_STASH(stash, HYDU_strdup(" rc=1 msg=service_not_found\n"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(" rc=1 msg=service_not_found\n"), status);
}
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
if (tokens)
HYD_pmcd_pmi_free_tokens(tokens, token_count);
if (value)
- HYDU_FREE(value);
+ MPL_free(value);
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c b/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c
index 2dc7d09..0bb6be1 100644
--- a/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c
+++ b/src/pm/hydra/pm/pmiserv/pmiserv_pmi_v2.c
@@ -37,7 +37,7 @@ static HYD_status cmd_response(int fd, int pid, char *cmd)
HYDU_ERR_POP(status, "unable to send PMI_RESPONSE header to proxy\n");
HYDU_ASSERT(!closed, status);
- HYDU_snprintf(cmdlen, 7, "%6u", (unsigned) strlen(cmd));
+ MPL_snprintf(cmdlen, 7, "%6u", (unsigned) strlen(cmd));
status = HYDU_sock_write(fd, cmdlen, 6, &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error writing PMI line\n");
HYDU_ASSERT(!closed, status);
@@ -93,7 +93,7 @@ static HYD_status poke_progress(char *key)
/* Free the dequeued request */
HYDU_free_strlist(req->args);
- HYDU_FREE(req);
+ MPL_free(req);
}
}
@@ -149,20 +149,20 @@ static HYD_status fn_info_getjobattr(int fd, int pid, int pgid, char *args[])
}
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=info-getjobattr-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=info-getjobattr-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("found="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("found="), status);
if (val) {
- HYD_STRING_STASH(stash, HYDU_strdup("TRUE;value="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(val), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("TRUE;value="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(val), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";rc=0;"), status);
}
else {
- HYD_STRING_STASH(stash, HYDU_strdup("FALSE;rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("FALSE;rc=0;"), status);
}
HYD_STRING_SPIT(stash, cmd, status);
@@ -170,7 +170,7 @@ static HYD_status fn_info_getjobattr(int fd, int pid, int pgid, char *args[])
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYD_pmcd_pmi_free_tokens(tokens, token_count);
@@ -204,7 +204,7 @@ static HYD_status fn_kvs_put(int fd, int pid, int pgid, char *args[])
val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "value");
if (val == NULL) {
/* the user sent an empty string */
- val = HYDU_strdup("");
+ val = MPL_strdup("");
}
thrid = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "thrid");
@@ -218,21 +218,21 @@ static HYD_status fn_kvs_put(int fd, int pid, int pgid, char *args[])
HYDU_ERR_POP(status, "unable to put data into kvs\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=kvs-put-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=kvs-put-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("rc="), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(ret), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
for (req = pending_reqs; req; req = req->next) {
if (!strcmp(req->key, key)) {
@@ -314,27 +314,27 @@ static HYD_status fn_kvs_get(int fd, int pid, int pgid, char *args[])
}
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=kvs-get-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=kvs-get-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
if (found) {
- HYD_STRING_STASH(stash, HYDU_strdup("found=TRUE;value="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(run->val), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("found=TRUE;value="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(run->val), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
else {
- HYD_STRING_STASH(stash, HYDU_strdup("found=FALSE;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("found=FALSE;"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
HYD_pmcd_pmi_free_tokens(tokens, token_count);
@@ -386,19 +386,19 @@ static HYD_status fn_kvs_fence(int fd, int pid, int pgid, char *args[])
}
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=kvs-fence-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=kvs-fence-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fence_count++;
if (fence_count % proxy->pg->pg_process_count == 0) {
@@ -491,8 +491,8 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR, "unable to find token: ncmds\n");
ncmds = atoi(val);
- HYDU_MALLOC(segment_list, struct HYD_pmcd_token_segment *,
- (ncmds + 1) * sizeof(struct HYD_pmcd_token_segment), status);
+ HYDU_MALLOC_OR_JUMP(segment_list, struct HYD_pmcd_token_segment *,
+ (ncmds + 1) * sizeof(struct HYD_pmcd_token_segment), status);
segment_tokens(tokens, token_count, segment_list, &num_segments);
HYDU_ASSERT((ncmds + 1) == num_segments, status);
@@ -551,14 +551,14 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
for (i = 0; i < infokeycount; i++) {
char *info_key, *info_val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "infokey%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "infokey%d", i);
val = HYD_pmcd_pmi_find_token_keyval(&tokens[segment_list[j].start_idx],
segment_list[j].token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
info_key = val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "infoval%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "infoval%d", i);
val = HYD_pmcd_pmi_find_token_keyval(&tokens[segment_list[j].start_idx],
segment_list[j].token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
@@ -566,10 +566,10 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
info_val = val;
if (!strcmp(info_key, "path")) {
- path = HYDU_strdup(info_val);
+ path = MPL_strdup(info_val);
}
else if (!strcmp(info_key, "wdir")) {
- exec->wdir = HYDU_strdup(info_val);
+ exec->wdir = MPL_strdup(info_val);
}
else if (!strcmp(info_key, "host") || !strcmp(info_key, "hosts")) {
char *saveptr;
@@ -598,12 +598,12 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: subcmd\n");
if (path == NULL)
- execname = HYDU_strdup(val);
+ execname = MPL_strdup(val);
else {
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup(path), status);
- HYD_STRING_STASH(stash, HYDU_strdup("/"), status);
- HYD_STRING_STASH(stash, HYDU_strdup(val), status);
+ HYD_STRING_STASH(stash, MPL_strdup(path), status);
+ HYD_STRING_STASH(stash, MPL_strdup("/"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(val), status);
HYD_STRING_SPIT(stash, execname, status);
}
@@ -611,12 +611,12 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
i = 0;
exec->exec[i++] = execname;
for (k = 0; k < argcnt; k++) {
- HYDU_snprintf(key, PMI_MAXKEYLEN, "argv%d", k);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "argv%d", k);
val = HYD_pmcd_pmi_find_token_keyval(&tokens[segment_list[j].start_idx],
segment_list[j].token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
- exec->exec[i++] = HYDU_strdup(val);
+ exec->exec[i++] = MPL_strdup(val);
}
exec->exec[i++] = NULL;
@@ -650,13 +650,13 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
for (i = 0; i < preputcount; i++) {
char *preput_key, *preput_val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "ppkey%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "ppkey%d", i);
val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
preput_key = val;
- HYDU_snprintf(key, PMI_MAXKEYLEN, "ppval%d", i);
+ MPL_snprintf(key, PMI_MAXKEYLEN, "ppval%d", i);
val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, key);
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR,
"unable to find token: %s\n", key);
@@ -702,7 +702,7 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
status = HYD_pmcd_pmi_fill_in_proxy_args(&proxy_stash, control_port, new_pgid);
HYDU_ERR_POP(status, "unable to fill in proxy arguments\n");
- HYDU_FREE(control_port);
+ MPL_free(control_port);
status = HYD_pmcd_pmi_fill_in_exec_launch_info(pg);
HYDU_ERR_POP(status, "unable to fill in executable arguments\n");
@@ -714,30 +714,30 @@ static HYD_status fn_spawn(int fd, int pid, int pgid, char *args[])
char *cmd;
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=spawn-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=spawn-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup("rc=0;"), status);
- HYD_STRING_STASH(stash, HYDU_strdup("jobid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(pg_scratch->kvs->kvsname), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
- HYD_STRING_STASH(stash, HYDU_strdup("nerrs=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("jobid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(pg_scratch->kvs->kvsname), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("nerrs=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
}
fn_exit:
HYD_pmcd_pmi_free_tokens(tokens, token_count);
HYD_STRING_STASH_FREE(proxy_stash);
if (segment_list)
- HYDU_FREE(segment_list);
+ MPL_free(segment_list);
HYDU_FUNC_EXIT();
return status;
@@ -762,43 +762,43 @@ static HYD_status fn_name_publish(int fd, int pid, int pgid, char *args[])
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "name")) == NULL)
HYDU_ERR_POP(status, "cannot find token: name\n");
- name = HYDU_strdup(val);
+ name = MPL_strdup(val);
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "port")) == NULL)
HYDU_ERR_POP(status, "cannot find token: port\n");
- port = HYDU_strdup(val);
+ port = MPL_strdup(val);
status = HYD_pmcd_pmi_publish(name, port, &success);
HYDU_ERR_POP(status, "error publishing service\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=name-publish-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=name-publish-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
if (!success) {
- HYD_STRING_STASH(stash, HYDU_strdup("rc=1;errmsg=duplicate_service_"), status);
- HYD_STRING_STASH(stash, HYDU_strdup(name), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=1;errmsg=duplicate_service_"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(name), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
else
- HYD_STRING_STASH(stash, HYDU_strdup("rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
if (tokens)
HYD_pmcd_pmi_free_tokens(tokens, token_count);
if (name)
- HYDU_FREE(name);
+ MPL_free(name);
if (port)
- HYDU_FREE(port);
+ MPL_free(port);
HYDU_FUNC_EXIT();
return status;
@@ -828,25 +828,25 @@ static HYD_status fn_name_unpublish(int fd, int pid, int pgid, char *args[])
HYDU_ERR_POP(status, "error unpublishing service\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=name-unpublish-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=name-unpublish-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
if (success)
- HYD_STRING_STASH(stash, HYDU_strdup("rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=0;"), status);
else {
- HYD_STRING_STASH(stash, HYDU_strdup("rc=1;errmsg=service_"), status);
- HYD_STRING_STASH(stash, HYDU_strdup(name), status);
- HYD_STRING_STASH(stash, HYDU_strdup("_not_found;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("rc=1;errmsg=service_"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(name), status);
+ HYD_STRING_STASH(stash, MPL_strdup("_not_found;"), status);
}
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
if (tokens)
@@ -880,26 +880,26 @@ static HYD_status fn_name_lookup(int fd, int pid, int pgid, char *args[])
HYDU_ERR_POP(status, "error while looking up service\n");
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("cmd=name-lookup-response;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("cmd=name-lookup-response;"), status);
if (thrid) {
- HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
if (value) {
- HYD_STRING_STASH(stash, HYDU_strdup("port="), status);
- HYD_STRING_STASH(stash, HYDU_strdup(value), status);
- HYD_STRING_STASH(stash, HYDU_strdup(";found=TRUE;rc=0;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("port="), status);
+ HYD_STRING_STASH(stash, MPL_strdup(value), status);
+ HYD_STRING_STASH(stash, MPL_strdup(";found=TRUE;rc=0;"), status);
}
else {
- HYD_STRING_STASH(stash, HYDU_strdup("found=FALSE;rc=1;"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("found=FALSE;rc=1;"), status);
}
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
- HYDU_FREE(cmd);
+ MPL_free(cmd);
fn_exit:
if (tokens)
diff --git a/src/pm/hydra/pm/pmiserv/pmiserv_utils.c b/src/pm/hydra/pm/pmiserv/pmiserv_utils.c
index 00dff91..c3a2399 100644
--- a/src/pm/hydra/pm/pmiserv/pmiserv_utils.c
+++ b/src/pm/hydra/pm/pmiserv/pmiserv_utils.c
@@ -28,74 +28,74 @@ HYD_status HYD_pmcd_pmi_fill_in_proxy_args(struct HYD_string_stash *proxy_stash,
HYD_STRING_STASH_INIT(*proxy_stash);
if (use_ddd) {
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("ddd"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--args"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("ddd"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--args"), status);
}
if (use_valgrind) {
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("valgrind"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--leak-check=full"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--show-reachable=yes"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--track-origins=yes"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("valgrind"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--leak-check=full"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--show-reachable=yes"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--track-origins=yes"), status);
}
if (use_strace) {
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("strace"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("-o"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("hydra_strace"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("-ff"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("strace"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("-o"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("hydra_strace"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("-ff"), status);
}
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup(HYD_server_info.base_path), status);
- HYD_STRING_STASH(stash, HYDU_strdup(HYDRA_PMI_PROXY), status);
+ HYD_STRING_STASH(stash, MPL_strdup(HYD_server_info.base_path), status);
+ HYD_STRING_STASH(stash, MPL_strdup(HYDRA_PMI_PROXY), status);
HYD_STRING_SPIT(stash, str, status);
HYD_STRING_STASH(*proxy_stash, str, status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--control-port"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup(control_port), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--control-port"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup(control_port), status);
if (HYD_server_info.user_global.debug)
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--debug"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--debug"), status);
if (HYDT_bsci_info.rmk) {
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--rmk"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup(HYDT_bsci_info.rmk), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--rmk"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup(HYDT_bsci_info.rmk), status);
}
if (HYDT_bsci_info.launcher) {
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--launcher"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup(HYDT_bsci_info.launcher), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--launcher"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup(HYDT_bsci_info.launcher), status);
}
if (HYDT_bsci_info.launcher_exec) {
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--launcher-exec"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup(HYDT_bsci_info.launcher_exec), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--launcher-exec"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup(HYDT_bsci_info.launcher_exec), status);
}
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--demux"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup(HYD_server_info.user_global.demux), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--demux"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup(HYD_server_info.user_global.demux), status);
if (HYD_server_info.user_global.iface) {
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--iface"), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup(HYD_server_info.user_global.iface), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--iface"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup(HYD_server_info.user_global.iface), status);
}
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--pgid"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--pgid"), status);
HYD_STRING_STASH(*proxy_stash, HYDU_int_to_str(pgid), status);
ret = MPL_env2int("HYDRA_PROXY_RETRY_COUNT", &retries);
if (ret == 0)
retries = HYD_DEFAULT_RETRY_COUNT;
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--retries"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--retries"), status);
HYD_STRING_STASH(*proxy_stash, HYDU_int_to_str(retries), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--usize"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--usize"), status);
HYD_STRING_STASH(*proxy_stash, HYDU_int_to_str(HYD_server_info.user_global.usize), status);
- HYD_STRING_STASH(*proxy_stash, HYDU_strdup("--proxy-id"), status);
+ HYD_STRING_STASH(*proxy_stash, MPL_strdup("--proxy-id"), status);
if (HYD_server_info.user_global.debug) {
HYDU_dump_noprefix(stdout, "\nProxy launch args: ");
@@ -158,7 +158,7 @@ static HYD_status pmi_process_mapping(struct HYD_pg *pg, char **process_mapping_
core_count = filler_round ? proxy->filler_processes : proxy->node->core_count;
if (blocklist_head == NULL) {
- HYDU_MALLOC(block, struct block *, sizeof(struct block), status);
+ HYDU_MALLOC_OR_JUMP(block, struct block *, sizeof(struct block), status);
block->start_idx = node->node_id;
block->num_nodes = 1;
block->core_count = core_count;
@@ -174,7 +174,7 @@ static HYD_status pmi_process_mapping(struct HYD_pg *pg, char **process_mapping_
blocklist_tail->core_count += core_count;
}
else {
- HYDU_MALLOC(blocklist_tail->next, struct block *, sizeof(struct block), status);
+ HYDU_MALLOC_OR_JUMP(blocklist_tail->next, struct block *, sizeof(struct block), status);
blocklist_tail = blocklist_tail->next;
blocklist_tail->start_idx = node->node_id;
blocklist_tail->num_nodes = 1;
@@ -196,33 +196,33 @@ static HYD_status pmi_process_mapping(struct HYD_pg *pg, char **process_mapping_
for (block = blocklist_head; block->next;) {
nblock = block->next;
block->next = nblock->next;
- HYDU_FREE(nblock);
+ MPL_free(nblock);
}
blocklist_tail = blocklist_head;
}
/* Create the mapping out of the blocks */
HYD_STRING_STASH_INIT(stash);
- HYD_STRING_STASH(stash, HYDU_strdup("("), status);
- HYD_STRING_STASH(stash, HYDU_strdup("vector,"), status);
+ HYD_STRING_STASH(stash, MPL_strdup("("), status);
+ HYD_STRING_STASH(stash, MPL_strdup("vector,"), status);
for (block = blocklist_head; block; block = block->next) {
- HYD_STRING_STASH(stash, HYDU_strdup("("), status);
+ HYD_STRING_STASH(stash, MPL_strdup("("), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(block->start_idx), status);
- HYD_STRING_STASH(stash, HYDU_strdup(","), status);
+ HYD_STRING_STASH(stash, MPL_strdup(","), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(block->num_nodes), status);
- HYD_STRING_STASH(stash, HYDU_strdup(","), status);
+ HYD_STRING_STASH(stash, MPL_strdup(","), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(block->core_count), status);
- HYD_STRING_STASH(stash, HYDU_strdup(")"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(")"), status);
if (block->next)
- HYD_STRING_STASH(stash, HYDU_strdup(","), status);
+ HYD_STRING_STASH(stash, MPL_strdup(","), status);
}
- HYD_STRING_STASH(stash, HYDU_strdup(")"), status);
+ HYD_STRING_STASH(stash, MPL_strdup(")"), status);
HYD_STRING_SPIT(stash, *process_mapping_str, status);
for (block = blocklist_head; block; block = nblock) {
nblock = block->next;
- HYDU_FREE(block);
+ MPL_free(block);
}
fn_exit:
@@ -253,7 +253,7 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
/* Make sure the mapping is within the size allowed by PMI */
if (strlen(mapping) > PMI_MAXVALLEN) {
- HYDU_FREE(mapping);
+ MPL_free(mapping);
mapping = NULL;
}
@@ -269,8 +269,8 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
for (node = HYD_server_info.node_list; node; node = node->next)
total_core_count += node->core_count;
- HYDU_MALLOC(filler_pmi_ids, int *, proxy_count * sizeof(int), status);
- HYDU_MALLOC(nonfiller_pmi_ids, int *, proxy_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(filler_pmi_ids, int *, proxy_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(nonfiller_pmi_ids, int *, proxy_count * sizeof(int), status);
pmi_id = 0;
for (proxy = pg->proxy_list, i = 0; proxy; proxy = proxy->next, i++) {
@@ -296,26 +296,26 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
HYD_STRING_STASH_INIT(exec_stash);
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--version"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYDRA_VERSION), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--version"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYDRA_VERSION), status);
if (HYD_server_info.iface_ip_env_name) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--iface-ip-env-name"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.iface_ip_env_name), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--iface-ip-env-name"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.iface_ip_env_name), status);
}
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--hostname"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(proxy->node->hostname), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--hostname"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(proxy->node->hostname), status);
/* This map has three fields: filler cores on this node,
* remaining cores on this node, total cores in the system */
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--global-core-map"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--global-core-map"), status);
HYD_STRING_STASH_INIT(stash);
HYD_STRING_STASH(stash, HYDU_int_to_str(proxy->filler_processes), status);
- HYD_STRING_STASH(stash, HYDU_strdup(","), status);
+ HYD_STRING_STASH(stash, MPL_strdup(","), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(proxy->node->core_count), status);
- HYD_STRING_STASH(stash, HYDU_strdup(","), status);
+ HYD_STRING_STASH(stash, MPL_strdup(","), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(total_core_count), status);
HYD_STRING_SPIT(stash, map, status);
@@ -323,79 +323,79 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
/* This map has two fields: start PMI ID during the filler
* phase, start PMI ID for the remaining phase */
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--pmi-id-map"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--pmi-id-map"), status);
HYD_STRING_STASH_INIT(stash);
HYD_STRING_STASH(stash, HYDU_int_to_str(filler_pmi_ids[proxy_count]), status);
- HYD_STRING_STASH(stash, HYDU_strdup(","), status);
+ HYD_STRING_STASH(stash, MPL_strdup(","), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(nonfiller_pmi_ids[proxy_count]), status);
HYD_STRING_SPIT(stash, map, status);
HYD_STRING_STASH(exec_stash, map, status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--global-process-count"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--global-process-count"), status);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(pg->pg_process_count), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--auto-cleanup"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--auto-cleanup"), status);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(HYD_server_info.user_global.auto_cleanup),
status);
pg_scratch = (struct HYD_pmcd_pmi_pg_scratch *) pg->pg_scratch;
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--pmi-kvsname"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(pg_scratch->kvs->kvsname), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--pmi-kvsname"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(pg_scratch->kvs->kvsname), status);
if (pg->spawner_pg) {
pg_scratch = (struct HYD_pmcd_pmi_pg_scratch *) pg->spawner_pg->pg_scratch;
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--pmi-spawner-kvsname"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(pg_scratch->kvs->kvsname), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--pmi-spawner-kvsname"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(pg_scratch->kvs->kvsname), status);
}
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--pmi-process-mapping"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(mapping), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--pmi-process-mapping"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(mapping), status);
if (proxy->node->local_binding) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--binding"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(proxy->node->local_binding), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--binding"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(proxy->node->local_binding), status);
}
else if (HYD_server_info.user_global.binding) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--binding"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.user_global.binding), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--binding"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.user_global.binding), status);
}
if (HYD_server_info.user_global.mapping) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--mapping"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.user_global.mapping), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--mapping"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.user_global.mapping), status);
}
if (HYD_server_info.user_global.membind) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--membind"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.user_global.membind), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--membind"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.user_global.membind), status);
}
if (HYD_server_info.user_global.topolib) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--topolib"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.user_global.topolib), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--topolib"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.user_global.topolib), status);
}
if (HYD_server_info.user_global.ckpointlib) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--ckpointlib"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.user_global.ckpointlib),
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--ckpointlib"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.user_global.ckpointlib),
status);
}
if (HYD_server_info.user_global.ckpoint_prefix) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--ckpoint-prefix"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.user_global.ckpoint_prefix),
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--ckpoint-prefix"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.user_global.ckpoint_prefix),
status);
}
if (HYD_server_info.user_global.ckpoint_num) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--ckpoint-num"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--ckpoint-num"), status);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(HYD_server_info.user_global.ckpoint_num),
status);
}
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--global-inherited-env"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--global-inherited-env"), status);
for (i = 0, env = HYD_server_info.user_global.global_env.inherited; env;
env = env->next, i++);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(i), status);
@@ -409,7 +409,7 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
HYD_STRING_STASH(exec_stash, envstr, status);
}
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--global-user-env"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--global-user-env"), status);
for (i = 0, env = HYD_server_info.user_global.global_env.user; env; env = env->next, i++);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(i), status);
@@ -422,7 +422,7 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
HYD_STRING_STASH(exec_stash, envstr, status);
}
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--global-system-env"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--global-system-env"), status);
for (i = 0, env = HYD_server_info.user_global.global_env.system; env; env = env->next, i++);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(i), status);
@@ -436,25 +436,25 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
}
if (HYD_server_info.user_global.global_env.prop) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--genv-prop"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(HYD_server_info.user_global.global_env.prop),
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--genv-prop"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(HYD_server_info.user_global.global_env.prop),
status);
}
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--proxy-core-count"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--proxy-core-count"), status);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(proxy->node->core_count), status);
/* Now pass the local executable information */
for (exec = proxy->exec_list; exec; exec = exec->next) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--exec"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--exec"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--exec-appnum"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--exec-appnum"), status);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(exec->appnum), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--exec-proc-count"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--exec-proc-count"), status);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(exec->proc_count), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--exec-local-env"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--exec-local-env"), status);
for (i = 0, env = exec->user_env; env; env = env->next, i++);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(i), status);
@@ -468,21 +468,21 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
}
if (exec->env_prop) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--exec-env-prop"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(exec->env_prop), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--exec-env-prop"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(exec->env_prop), status);
}
if (exec->wdir) {
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--exec-wdir"), status);
- HYD_STRING_STASH(exec_stash, HYDU_strdup(exec->wdir), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--exec-wdir"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(exec->wdir), status);
}
- HYD_STRING_STASH(exec_stash, HYDU_strdup("--exec-args"), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup("--exec-args"), status);
for (i = 0; exec->exec[i]; i++);
HYD_STRING_STASH(exec_stash, HYDU_int_to_str(i), status);
for (i = 0; exec->exec[i]; i++)
- HYD_STRING_STASH(exec_stash, HYDU_strdup(exec->exec[i]), status);
+ HYD_STRING_STASH(exec_stash, MPL_strdup(exec->exec[i]), status);
}
if (HYD_server_info.user_global.debug) {
@@ -501,9 +501,9 @@ HYD_status HYD_pmcd_pmi_fill_in_exec_launch_info(struct HYD_pg *pg)
fn_exit:
if (mapping)
- HYDU_FREE(mapping);
- HYDU_FREE(filler_pmi_ids);
- HYDU_FREE(nonfiller_pmi_ids);
+ MPL_free(mapping);
+ MPL_free(filler_pmi_ids);
+ MPL_free(nonfiller_pmi_ids);
return status;
fn_fail:
@@ -518,13 +518,13 @@ HYD_status HYD_pmcd_pmi_alloc_pg_scratch(struct HYD_pg *pg)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(pg->pg_scratch, void *, sizeof(struct HYD_pmcd_pmi_pg_scratch), status);
+ HYDU_MALLOC_OR_JUMP(pg->pg_scratch, void *, sizeof(struct HYD_pmcd_pmi_pg_scratch), status);
pg_scratch = (struct HYD_pmcd_pmi_pg_scratch *) pg->pg_scratch;
pg_scratch->barrier_count = 0;
- HYDU_MALLOC(pg_scratch->ecount, struct HYD_pmcd_pmi_ecount *,
- pg->pg_process_count * sizeof(struct HYD_pmcd_pmi_ecount), status);
+ HYDU_MALLOC_OR_JUMP(pg_scratch->ecount, struct HYD_pmcd_pmi_ecount *,
+ pg->pg_process_count * sizeof(struct HYD_pmcd_pmi_ecount), status);
for (i = 0; i < pg->pg_process_count; i++) {
pg_scratch->ecount[i].fd = HYD_FD_UNSET;
pg_scratch->ecount[i].pid = -1;
@@ -534,7 +534,7 @@ HYD_status HYD_pmcd_pmi_alloc_pg_scratch(struct HYD_pg *pg)
pg_scratch->control_listen_fd = HYD_FD_UNSET;
pg_scratch->pmi_listen_fd = HYD_FD_UNSET;
- pg_scratch->dead_processes = HYDU_strdup("");
+ pg_scratch->dead_processes = MPL_strdup("");
pg_scratch->dead_process_count = 0;
status = HYD_pmcd_pmi_allocate_kvs(&pg_scratch->kvs, pg->pgid);
@@ -561,21 +561,17 @@ HYD_status HYD_pmcd_pmi_free_pg_scratch(struct HYD_pg *pg)
pg_scratch = pg->pg_scratch;
if (pg_scratch->ecount)
- HYDU_FREE(pg_scratch->ecount);
+ MPL_free(pg_scratch->ecount);
if (pg_scratch->dead_processes)
- HYDU_FREE(pg_scratch->dead_processes);
+ MPL_free(pg_scratch->dead_processes);
HYD_pmcd_free_pmi_kvs_list(pg_scratch->kvs);
- HYDU_FREE(pg_scratch);
+ MPL_free(pg_scratch);
pg->pg_scratch = NULL;
}
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
diff --git a/src/pm/hydra/tools/Makefile.mk b/src/pm/hydra/tools/Makefile.mk
index 4dfae98..630e4a5 100644
--- a/src/pm/hydra/tools/Makefile.mk
+++ b/src/pm/hydra/tools/Makefile.mk
@@ -12,4 +12,3 @@ include tools/ckpoint/Makefile.mk
include tools/demux/Makefile.mk
include tools/debugger/Makefile.mk
include tools/nameserver/Makefile.mk
-include tools/ftb/Makefile.mk
diff --git a/src/pm/hydra/tools/bootstrap/external/cobalt_query_native_int.c b/src/pm/hydra/tools/bootstrap/external/cobalt_query_native_int.c
index 2ff3da4..c6a1d6b 100644
--- a/src/pm/hydra/tools/bootstrap/external/cobalt_query_native_int.c
+++ b/src/pm/hydra/tools/bootstrap/external/cobalt_query_native_int.c
@@ -19,10 +19,6 @@ HYD_status HYDT_bscd_cobalt_query_native_int(int *ret)
if (!HYDTI_bscd_env_is_avail("COBALT_NODEFILE"))
*ret = 0;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
diff --git a/src/pm/hydra/tools/bootstrap/external/external_common_launch.c b/src/pm/hydra/tools/bootstrap/external/external_common_launch.c
index 9534d46..6da75b6 100644
--- a/src/pm/hydra/tools/bootstrap/external/external_common_launch.c
+++ b/src/pm/hydra/tools/bootstrap/external/external_common_launch.c
@@ -17,11 +17,11 @@ static int fd_stdout, fd_stderr;
static HYD_status ssh_get_path(char **path)
{
if (HYDT_bsci_info.launcher_exec)
- *path = HYDU_strdup(HYDT_bsci_info.launcher_exec);
+ *path = MPL_strdup(HYDT_bsci_info.launcher_exec);
if (*path == NULL)
*path = HYDU_find_full_path("ssh");
if (*path == NULL)
- *path = HYDU_strdup("/usr/bin/ssh");
+ *path = MPL_strdup("/usr/bin/ssh");
return HYD_SUCCESS;
}
@@ -29,11 +29,11 @@ static HYD_status ssh_get_path(char **path)
static HYD_status rsh_get_path(char **path)
{
if (HYDT_bsci_info.launcher_exec)
- *path = HYDU_strdup(HYDT_bsci_info.launcher_exec);
+ *path = MPL_strdup(HYDT_bsci_info.launcher_exec);
if (*path == NULL)
*path = HYDU_find_full_path("rsh");
if (*path == NULL)
- *path = HYDU_strdup("/usr/bin/rsh");
+ *path = MPL_strdup("/usr/bin/rsh");
return HYD_SUCCESS;
}
@@ -45,20 +45,20 @@ static HYD_status lsf_get_path(char **path)
HYD_status status = HYD_SUCCESS;
if (HYDT_bsci_info.launcher_exec)
- *path = HYDU_strdup(HYDT_bsci_info.launcher_exec);
+ *path = MPL_strdup(HYDT_bsci_info.launcher_exec);
if (*path == NULL) {
MPL_env2str("LSF_BINDIR", (const char **) &bin_dir);
if (bin_dir) {
length = strlen(bin_dir) + 2 + strlen("blaunch");
- HYDU_MALLOC(*path, char *, length, status);
+ HYDU_MALLOC_OR_JUMP(*path, char *, length, status);
MPL_snprintf(*path, length, "%s/blaunch", bin_dir);
}
}
if (*path == NULL)
*path = HYDU_find_full_path("blaunch");
if (*path == NULL)
- *path = HYDU_strdup("/usr/bin/blaunch");
+ *path = MPL_strdup("/usr/bin/blaunch");
fn_exit:
return status;
@@ -74,21 +74,21 @@ static HYD_status sge_get_path(char **path)
HYD_status status = HYD_SUCCESS;
if (HYDT_bsci_info.launcher_exec)
- *path = HYDU_strdup(HYDT_bsci_info.launcher_exec);
+ *path = MPL_strdup(HYDT_bsci_info.launcher_exec);
if (*path == NULL) {
MPL_env2str("SGE_ROOT", (const char **) &sge_root);
MPL_env2str("ARC", (const char **) &arc);
if (sge_root && arc) {
length = strlen(sge_root) + strlen("/bin/") + strlen(arc) + 1 + strlen("qrsh") + 1;
- HYDU_MALLOC(*path, char *, length, status);
+ HYDU_MALLOC_OR_JUMP(*path, char *, length, status);
MPL_snprintf(*path, length, "%s/bin/%s/qrsh", sge_root, arc);
}
}
if (*path == NULL)
*path = HYDU_find_full_path("qrsh");
if (*path == NULL)
- *path = HYDU_strdup("/usr/bin/qrsh");
+ *path = MPL_strdup("/usr/bin/qrsh");
fn_exit:
return status;
@@ -140,31 +140,31 @@ HYD_status HYDT_bscd_common_launch_procs(char **args, struct HYD_proxy *proxy_li
idx = 0;
if (path)
- targs[idx++] = HYDU_strdup(path);
+ targs[idx++] = MPL_strdup(path);
targs[idx] = NULL;
/* Allow X forwarding only if explicitly requested */
if (!strcmp(HYDT_bsci_info.launcher, "ssh")) {
if (HYDT_bsci_info.enablex == 1)
- targs[idx++] = HYDU_strdup("-X");
+ targs[idx++] = MPL_strdup("-X");
else if (HYDT_bsci_info.enablex == 0)
- targs[idx++] = HYDU_strdup("-x");
+ targs[idx++] = MPL_strdup("-x");
else /* default mode is disable X */
- targs[idx++] = HYDU_strdup("-x");
+ targs[idx++] = MPL_strdup("-x");
}
else if (!strcmp(HYDT_bsci_info.launcher, "lsf")) {
- targs[idx++] = HYDU_strdup("-n");
+ targs[idx++] = MPL_strdup("-n");
}
else if (!strcmp(HYDT_bsci_info.launcher, "sge")) {
- targs[idx++] = HYDU_strdup("-inherit");
- targs[idx++] = HYDU_strdup("-V");
+ targs[idx++] = MPL_strdup("-inherit");
+ targs[idx++] = MPL_strdup("-V");
}
MPL_env2str("HYDRA_LAUNCHER_EXTRA_ARGS", (const char **) &extra_arg_list);
if (extra_arg_list) {
extra_arg = strtok(extra_arg_list, " ");
while (extra_arg) {
- targs[idx++] = HYDU_strdup(extra_arg);
+ targs[idx++] = MPL_strdup(extra_arg);
extra_arg = strtok(NULL, " ");
}
}
@@ -175,7 +175,7 @@ HYD_status HYDT_bscd_common_launch_procs(char **args, struct HYD_proxy *proxy_li
/* Fill in the remaining arguments */
exec_idx = idx; /* Store the executable index */
for (i = 0; args[i]; i++)
- targs[idx++] = HYDU_strdup(args[i]);
+ targs[idx++] = MPL_strdup(args[i]);
/* Store the original exec string */
original_exec_string = targs[exec_idx];
@@ -183,7 +183,7 @@ HYD_status HYDT_bscd_common_launch_procs(char **args, struct HYD_proxy *proxy_li
/* Create a quoted version of the exec string, which is only used
* when the executable is not launched directly, but through an
* actual launcher */
- HYDU_snprintf(quoted_exec_string, HYD_TMP_STRLEN, "\"%s\"", targs[exec_idx]);
+ MPL_snprintf(quoted_exec_string, HYD_TMP_STRLEN, "\"%s\"", targs[exec_idx]);
/* pid_list might already have some PIDs */
num_hosts = 0;
@@ -191,17 +191,18 @@ HYD_status HYDT_bscd_common_launch_procs(char **args, struct HYD_proxy *proxy_li
num_hosts++;
/* Increase pid list to accommodate these new pids */
- HYDU_MALLOC(pid, int *, (HYD_bscu_pid_count + num_hosts) * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(pid, int *, (HYD_bscu_pid_count + num_hosts) * sizeof(int), status);
for (i = 0; i < HYD_bscu_pid_count; i++)
pid[i] = HYD_bscu_pid_list[i];
- HYDU_FREE(HYD_bscu_pid_list);
+ MPL_free(HYD_bscu_pid_list);
HYD_bscu_pid_list = pid;
/* Increase fd list to accommodate these new fds */
- HYDU_MALLOC(fd_list, int *, (HYD_bscu_fd_count + (2 * num_hosts) + 1) * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(fd_list, int *, (HYD_bscu_fd_count + (2 * num_hosts) + 1) * sizeof(int),
+ status);
for (i = 0; i < HYD_bscu_fd_count; i++)
fd_list[i] = HYD_bscu_fd_list[i];
- HYDU_FREE(HYD_bscu_fd_list);
+ MPL_free(HYD_bscu_fd_list);
HYD_bscu_fd_list = fd_list;
/* Check if the user disabled automatic forking */
@@ -213,20 +214,20 @@ HYD_status HYDT_bscd_common_launch_procs(char **args, struct HYD_proxy *proxy_li
for (proxy = proxy_list; proxy; proxy = proxy->next) {
if (targs[host_idx])
- HYDU_FREE(targs[host_idx]);
+ MPL_free(targs[host_idx]);
if (proxy->node->user == NULL) {
- targs[host_idx] = HYDU_strdup(proxy->node->hostname);
+ targs[host_idx] = MPL_strdup(proxy->node->hostname);
}
else {
len = strlen(proxy->node->user) + strlen("@") + strlen(proxy->node->hostname) + 1;
- HYDU_MALLOC(targs[host_idx], char *, len, status);
+ HYDU_MALLOC_OR_JUMP(targs[host_idx], char *, len, status);
MPL_snprintf(targs[host_idx], len, "%s@%s", proxy->node->user, proxy->node->hostname);
}
/* append proxy ID */
if (targs[idx])
- HYDU_FREE(targs[idx]);
+ MPL_free(targs[idx]);
targs[idx] = HYDU_int_to_str(proxy->proxy_id);
targs[idx + 1] = NULL;
@@ -248,7 +249,7 @@ HYD_status HYDT_bscd_common_launch_procs(char **args, struct HYD_proxy *proxy_li
str = HYDU_int_to_str(sockpair[1]);
status = HYDU_env_create(&env, "HYDI_CONTROL_FD", str);
HYDU_ERR_POP(status, "unable to create env\n");
- HYDU_FREE(str);
+ MPL_free(str);
control_fd[proxy->proxy_id] = sockpair[0];
@@ -336,7 +337,7 @@ HYD_status HYDT_bscd_common_launch_procs(char **args, struct HYD_proxy *proxy_li
fn_exit:
HYDU_free_strlist(targs);
if (path)
- HYDU_FREE(path);
+ MPL_free(path);
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/tools/bootstrap/external/ll_launch.c b/src/pm/hydra/tools/bootstrap/external/ll_launch.c
index 04ed4b3..aa5bc39 100644
--- a/src/pm/hydra/tools/bootstrap/external/ll_launch.c
+++ b/src/pm/hydra/tools/bootstrap/external/ll_launch.c
@@ -28,14 +28,14 @@ HYD_status HYDT_bscd_ll_launch_procs(char **args, struct HYD_proxy *proxy_list,
* (1) user-specified; (2) search in path; (3) Hard-coded
* location */
if (HYDT_bsci_info.launcher_exec)
- path = HYDU_strdup(HYDT_bsci_info.launcher_exec);
+ path = MPL_strdup(HYDT_bsci_info.launcher_exec);
if (!path)
path = HYDU_find_full_path("poe");
if (!path)
- path = HYDU_strdup("/usr/bin/poe");
+ path = MPL_strdup("/usr/bin/poe");
idx = 0;
- targs[idx++] = HYDU_strdup(path);
+ targs[idx++] = MPL_strdup(path);
if (!strcmp(HYDT_bsci_info.rmk, "ll")) {
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
@@ -59,7 +59,7 @@ HYD_status HYDT_bscd_ll_launch_procs(char **args, struct HYD_proxy *proxy_list,
if (extra_arg_list) {
extra_arg = strtok(extra_arg_list, " ");
while (extra_arg) {
- targs[idx++] = HYDU_strdup(extra_arg);
+ targs[idx++] = MPL_strdup(extra_arg);
extra_arg = strtok(NULL, " ");
}
}
@@ -67,27 +67,27 @@ HYD_status HYDT_bscd_ll_launch_procs(char **args, struct HYD_proxy *proxy_list,
/* Fill in the remaining arguments */
exec_idx = idx;
for (i = 0; args[i]; i++)
- targs[idx++] = HYDU_strdup(args[i]);
+ targs[idx++] = MPL_strdup(args[i]);
/* Create a quoted version of the exec string, which is only used
* when the executable is not launched directly, but through an
* actual launcher */
- HYDU_snprintf(quoted_exec_string, HYD_TMP_STRLEN, "\"%s\"", targs[exec_idx]);
- HYDU_FREE(targs[exec_idx]);
+ MPL_snprintf(quoted_exec_string, HYD_TMP_STRLEN, "\"%s\"", targs[exec_idx]);
+ MPL_free(targs[exec_idx]);
targs[exec_idx] = quoted_exec_string;
/* Increase pid list to accommodate the new pid */
- HYDU_MALLOC(pid, int *, (HYD_bscu_pid_count + 1) * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(pid, int *, (HYD_bscu_pid_count + 1) * sizeof(int), status);
for (i = 0; i < HYD_bscu_pid_count; i++)
pid[i] = HYD_bscu_pid_list[i];
- HYDU_FREE(HYD_bscu_pid_list);
+ MPL_free(HYD_bscu_pid_list);
HYD_bscu_pid_list = pid;
/* Increase fd list to accommodate these new fds */
- HYDU_MALLOC(fd_list, int *, (HYD_bscu_fd_count + 3) * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(fd_list, int *, (HYD_bscu_fd_count + 3) * sizeof(int), status);
for (i = 0; i < HYD_bscu_fd_count; i++)
fd_list[i] = HYD_bscu_fd_list[i];
- HYDU_FREE(HYD_bscu_fd_list);
+ MPL_free(HYD_bscu_fd_list);
HYD_bscu_fd_list = fd_list;
/* append proxy ID as -1 */
@@ -111,10 +111,10 @@ HYD_status HYDT_bscd_ll_launch_procs(char **args, struct HYD_proxy *proxy_list,
fn_exit:
if (node_list_str)
- HYDU_FREE(node_list_str);
+ MPL_free(node_list_str);
HYDU_free_strlist(targs);
if (path)
- HYDU_FREE(path);
+ MPL_free(path);
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/tools/bootstrap/external/ll_query_native_int.c b/src/pm/hydra/tools/bootstrap/external/ll_query_native_int.c
index eae20f8..52a12ab 100644
--- a/src/pm/hydra/tools/bootstrap/external/ll_query_native_int.c
+++ b/src/pm/hydra/tools/bootstrap/external/ll_query_native_int.c
@@ -21,10 +21,6 @@ HYD_status HYDT_bscd_ll_query_native_int(int *ret)
if (!HYDTI_bscd_env_is_avail("MP_CHILD"))
*ret = 0;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
diff --git a/src/pm/hydra/tools/bootstrap/external/ll_query_node_list.c b/src/pm/hydra/tools/bootstrap/external/ll_query_node_list.c
index 09586ce..64e857f 100644
--- a/src/pm/hydra/tools/bootstrap/external/ll_query_node_list.c
+++ b/src/pm/hydra/tools/bootstrap/external/ll_query_node_list.c
@@ -45,11 +45,7 @@ static HYD_status process_mfile_count(char *token, int newline, struct HYD_node
if (newline)
total_node_count++;
- fn_exit:
return status;
-
- fn_fail:
- goto fn_exit;
}
HYD_status HYDTI_bscd_ll_query_node_count(int *count)
diff --git a/src/pm/hydra/tools/bootstrap/external/lsf_query_native_int.c b/src/pm/hydra/tools/bootstrap/external/lsf_query_native_int.c
index 4883415..8081714 100644
--- a/src/pm/hydra/tools/bootstrap/external/lsf_query_native_int.c
+++ b/src/pm/hydra/tools/bootstrap/external/lsf_query_native_int.c
@@ -21,10 +21,6 @@ HYD_status HYDT_bscd_lsf_query_native_int(int *ret)
if (!HYDTI_bscd_env_is_avail("LSB_MCPU_HOSTS"))
*ret = 0;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
diff --git a/src/pm/hydra/tools/bootstrap/external/lsf_query_node_list.c b/src/pm/hydra/tools/bootstrap/external/lsf_query_node_list.c
index c20502a..566bdc2 100644
--- a/src/pm/hydra/tools/bootstrap/external/lsf_query_node_list.c
+++ b/src/pm/hydra/tools/bootstrap/external/lsf_query_node_list.c
@@ -25,7 +25,7 @@ HYD_status HYDT_bscd_lsf_query_node_list(struct HYD_node **node_list)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "No LSF node list found\n");
}
else {
- hosts = HYDU_strdup(hosts);
+ hosts = MPL_strdup(hosts);
thosts = hosts;
hostname = strtok(hosts, " ");
@@ -47,7 +47,7 @@ HYD_status HYDT_bscd_lsf_query_node_list(struct HYD_node **node_list)
}
if (thosts)
- HYDU_FREE(thosts);
+ MPL_free(thosts);
}
fn_exit:
diff --git a/src/pm/hydra/tools/bootstrap/external/pbs_finalize.c b/src/pm/hydra/tools/bootstrap/external/pbs_finalize.c
index 44c544f..7bebc48 100644
--- a/src/pm/hydra/tools/bootstrap/external/pbs_finalize.c
+++ b/src/pm/hydra/tools/bootstrap/external/pbs_finalize.c
@@ -22,10 +22,10 @@ HYD_status HYDT_bscd_pbs_launcher_finalize(void)
if (HYDT_bscd_pbs_sys) {
if (HYDT_bscd_pbs_sys->task_id)
- HYDU_FREE(HYDT_bscd_pbs_sys->task_id);
+ MPL_free(HYDT_bscd_pbs_sys->task_id);
if (HYDT_bscd_pbs_sys->spawn_events)
- HYDU_FREE(HYDT_bscd_pbs_sys->spawn_events);
- HYDU_FREE(HYDT_bscd_pbs_sys);
+ MPL_free(HYDT_bscd_pbs_sys->spawn_events);
+ MPL_free(HYDT_bscd_pbs_sys);
}
fn_exit:
diff --git a/src/pm/hydra/tools/bootstrap/external/pbs_init.c b/src/pm/hydra/tools/bootstrap/external/pbs_init.c
index 4bbbc0b..4e0780a 100644
--- a/src/pm/hydra/tools/bootstrap/external/pbs_init.c
+++ b/src/pm/hydra/tools/bootstrap/external/pbs_init.c
@@ -24,8 +24,8 @@ HYD_status HYDT_bsci_launcher_pbs_init(void)
HYDT_bsci_fns.wait_for_completion = HYDT_bscd_pbs_wait_for_completion;
HYDT_bsci_fns.launcher_finalize = HYDT_bscd_pbs_launcher_finalize;
- HYDU_MALLOC(HYDT_bscd_pbs_sys, struct HYDT_bscd_pbs_sys_s *,
- sizeof(struct HYDT_bscd_pbs_sys_s), status);
+ HYDU_MALLOC_OR_JUMP(HYDT_bscd_pbs_sys, struct HYDT_bscd_pbs_sys_s *,
+ sizeof(struct HYDT_bscd_pbs_sys_s), status);
/* Initialize TM and Hydra's PBS data structure */
err = tm_init(NULL, &tm_root);
diff --git a/src/pm/hydra/tools/bootstrap/external/pbs_launch.c b/src/pm/hydra/tools/bootstrap/external/pbs_launch.c
index 27245d8..f1eae39 100644
--- a/src/pm/hydra/tools/bootstrap/external/pbs_launch.c
+++ b/src/pm/hydra/tools/bootstrap/external/pbs_launch.c
@@ -58,11 +58,12 @@ HYD_status HYDT_bscd_pbs_launch_procs(char **args, struct HYD_proxy *proxy_list,
/* Duplicate the args in local copy, targs */
for (args_count = 0; args[args_count]; args_count++)
- targs[args_count] = HYDU_strdup(args[args_count]);
+ targs[args_count] = MPL_strdup(args[args_count]);
- HYDU_MALLOC(HYDT_bscd_pbs_sys->task_id, tm_task_id *, proxy_count * sizeof(tm_task_id), status);
- HYDU_MALLOC(HYDT_bscd_pbs_sys->spawn_events, tm_event_t *,
- proxy_count * sizeof(tm_event_t), status);
+ HYDU_MALLOC_OR_JUMP(HYDT_bscd_pbs_sys->task_id, tm_task_id *, proxy_count * sizeof(tm_task_id),
+ status);
+ HYDU_MALLOC_OR_JUMP(HYDT_bscd_pbs_sys->spawn_events, tm_event_t *,
+ proxy_count * sizeof(tm_event_t), status);
/* Spawn a process on each allocated node through tm_spawn() which
* returns a taskID for the process + a eventID for the
diff --git a/src/pm/hydra/tools/bootstrap/external/pbs_query_native_int.c b/src/pm/hydra/tools/bootstrap/external/pbs_query_native_int.c
index cedb36e..268c32b 100644
--- a/src/pm/hydra/tools/bootstrap/external/pbs_query_native_int.c
+++ b/src/pm/hydra/tools/bootstrap/external/pbs_query_native_int.c
@@ -19,10 +19,6 @@ HYD_status HYDT_bscd_pbs_query_native_int(int *ret)
if (!HYDTI_bscd_env_is_avail("PBS_NODEFILE"))
*ret = 0;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
diff --git a/src/pm/hydra/tools/bootstrap/external/pbs_wait.c b/src/pm/hydra/tools/bootstrap/external/pbs_wait.c
index 1f13520..c3d712e 100644
--- a/src/pm/hydra/tools/bootstrap/external/pbs_wait.c
+++ b/src/pm/hydra/tools/bootstrap/external/pbs_wait.c
@@ -18,9 +18,9 @@ HYD_status HYDT_bscd_pbs_wait_for_completion(int timeout)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(taskobits, int *, HYDT_bscd_pbs_sys->spawn_count * sizeof(int), status);
- HYDU_MALLOC(obit_events, tm_event_t *, HYDT_bscd_pbs_sys->spawn_count * sizeof(tm_event_t),
- status);
+ HYDU_MALLOC_OR_JUMP(taskobits, int *, HYDT_bscd_pbs_sys->spawn_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(obit_events, tm_event_t *,
+ HYDT_bscd_pbs_sys->spawn_count * sizeof(tm_event_t), status);
for (idx = 0; idx < HYDT_bscd_pbs_sys->spawn_count; idx++)
obit_events[idx] = TM_NULL_EVENT;
diff --git a/src/pm/hydra/tools/bootstrap/external/sge_query_native_int.c b/src/pm/hydra/tools/bootstrap/external/sge_query_native_int.c
index 0412529..83c7c5d 100644
--- a/src/pm/hydra/tools/bootstrap/external/sge_query_native_int.c
+++ b/src/pm/hydra/tools/bootstrap/external/sge_query_native_int.c
@@ -23,10 +23,6 @@ HYD_status HYDT_bscd_sge_query_native_int(int *ret)
if (!HYDTI_bscd_env_is_avail("PE_HOSTFILE"))
*ret = 0;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
diff --git a/src/pm/hydra/tools/bootstrap/external/sge_query_node_list.c b/src/pm/hydra/tools/bootstrap/external/sge_query_node_list.c
index 8256f36..29ca1bc 100644
--- a/src/pm/hydra/tools/bootstrap/external/sge_query_node_list.c
+++ b/src/pm/hydra/tools/bootstrap/external/sge_query_node_list.c
@@ -22,7 +22,7 @@ static HYD_status process_mfile_token(char *token, int newline, struct HYD_node
entry_count = 1;
if (hostname)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "unexpected token %s\n", token);
- hostname = HYDU_strdup(token);
+ hostname = MPL_strdup(token);
}
else { /* Not a new line */
if (entry_count != 2)
diff --git a/src/pm/hydra/tools/bootstrap/external/slurm_launch.c b/src/pm/hydra/tools/bootstrap/external/slurm_launch.c
index b88009c..477bd77 100644
--- a/src/pm/hydra/tools/bootstrap/external/slurm_launch.c
+++ b/src/pm/hydra/tools/bootstrap/external/slurm_launch.c
@@ -23,10 +23,10 @@ static HYD_status proxy_list_to_node_str(struct HYD_proxy *proxy_list, char **no
i = 0;
for (proxy = proxy_list; proxy; proxy = proxy->next) {
- tmp[i++] = HYDU_strdup(proxy->node->hostname);
+ tmp[i++] = MPL_strdup(proxy->node->hostname);
if (proxy->node->next)
- tmp[i++] = HYDU_strdup(",");
+ tmp[i++] = MPL_strdup(",");
/* If we used up more than half of the array elements, merge
* what we have so far */
@@ -36,8 +36,8 @@ static HYD_status proxy_list_to_node_str(struct HYD_proxy *proxy_list, char **no
HYDU_ERR_POP(status, "error joining strings\n");
i = 0;
- tmp[i++] = HYDU_strdup(foo);
- HYDU_FREE(foo);
+ tmp[i++] = MPL_strdup(foo);
+ MPL_free(foo);
}
}
@@ -51,7 +51,7 @@ static HYD_status proxy_list_to_node_str(struct HYD_proxy *proxy_list, char **no
fn_exit:
HYDU_free_strlist(tmp);
if (foo)
- HYDU_FREE(foo);
+ MPL_free(foo);
HYDU_FUNC_EXIT();
return status;
@@ -75,44 +75,44 @@ HYD_status HYDT_bscd_slurm_launch_procs(char **args, struct HYD_proxy *proxy_lis
* (1) user-specified; (2) search in path; (3) Hard-coded
* location */
if (HYDT_bsci_info.launcher_exec)
- path = HYDU_strdup(HYDT_bsci_info.launcher_exec);
+ path = MPL_strdup(HYDT_bsci_info.launcher_exec);
if (!path)
path = HYDU_find_full_path("srun");
if (!path)
- path = HYDU_strdup("/usr/bin/srun");
+ path = MPL_strdup("/usr/bin/srun");
idx = 0;
- targs[idx++] = HYDU_strdup(path);
+ targs[idx++] = MPL_strdup(path);
if (use_rmk == HYD_FALSE || strcmp(HYDT_bsci_info.rmk, "slurm")) {
- targs[idx++] = HYDU_strdup("--nodelist");
+ targs[idx++] = MPL_strdup("--nodelist");
status = proxy_list_to_node_str(proxy_list, &node_list_str);
HYDU_ERR_POP(status, "unable to build a node list string\n");
- targs[idx++] = HYDU_strdup(node_list_str);
+ targs[idx++] = MPL_strdup(node_list_str);
}
num_hosts = 0;
for (proxy = proxy_list; proxy; proxy = proxy->next)
num_hosts++;
- targs[idx++] = HYDU_strdup("-N");
+ targs[idx++] = MPL_strdup("-N");
targs[idx++] = HYDU_int_to_str(num_hosts);
- targs[idx++] = HYDU_strdup("-n");
+ targs[idx++] = MPL_strdup("-n");
targs[idx++] = HYDU_int_to_str(num_hosts);
/* Force srun to ignore stdin to avoid issues with
* unexpected files open on fd 0 */
- targs[idx++] = HYDU_strdup("--input");
- targs[idx++] = HYDU_strdup("none");
+ targs[idx++] = MPL_strdup("--input");
+ targs[idx++] = MPL_strdup("none");
MPL_env2str("HYDRA_LAUNCHER_EXTRA_ARGS", (const char **) &extra_arg_list);
if (extra_arg_list) {
extra_arg = strtok(extra_arg_list, " ");
while (extra_arg) {
- targs[idx++] = HYDU_strdup(extra_arg);
+ targs[idx++] = MPL_strdup(extra_arg);
extra_arg = strtok(NULL, " ");
}
}
@@ -121,20 +121,20 @@ HYD_status HYDT_bscd_slurm_launch_procs(char **args, struct HYD_proxy *proxy_lis
/* We do not need to create a quoted version of the string for
* SLURM. It seems to be internally quoting it anyway. */
for (i = 0; args[i]; i++)
- targs[idx++] = HYDU_strdup(args[i]);
+ targs[idx++] = MPL_strdup(args[i]);
/* Increase pid list to accommodate the new pid */
- HYDU_MALLOC(pid, int *, (HYD_bscu_pid_count + 1) * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(pid, int *, (HYD_bscu_pid_count + 1) * sizeof(int), status);
for (i = 0; i < HYD_bscu_pid_count; i++)
pid[i] = HYD_bscu_pid_list[i];
- HYDU_FREE(HYD_bscu_pid_list);
+ MPL_free(HYD_bscu_pid_list);
HYD_bscu_pid_list = pid;
/* Increase fd list to accommodate these new fds */
- HYDU_MALLOC(fd_list, int *, (HYD_bscu_fd_count + 3) * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(fd_list, int *, (HYD_bscu_fd_count + 3) * sizeof(int), status);
for (i = 0; i < HYD_bscu_fd_count; i++)
fd_list[i] = HYD_bscu_fd_list[i];
- HYDU_FREE(HYD_bscu_fd_list);
+ MPL_free(HYD_bscu_fd_list);
HYD_bscu_fd_list = fd_list;
/* append proxy ID as -1 */
@@ -163,10 +163,10 @@ HYD_status HYDT_bscd_slurm_launch_procs(char **args, struct HYD_proxy *proxy_lis
fn_exit:
if (node_list_str)
- HYDU_FREE(node_list_str);
+ MPL_free(node_list_str);
HYDU_free_strlist(targs);
if (path)
- HYDU_FREE(path);
+ MPL_free(path);
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/tools/bootstrap/external/slurm_query_native_int.c b/src/pm/hydra/tools/bootstrap/external/slurm_query_native_int.c
index 6814e4c..e173a6d 100644
--- a/src/pm/hydra/tools/bootstrap/external/slurm_query_native_int.c
+++ b/src/pm/hydra/tools/bootstrap/external/slurm_query_native_int.c
@@ -23,10 +23,6 @@ HYD_status HYDT_bscd_slurm_query_native_int(int *ret)
if (!HYDTI_bscd_env_is_avail("SLURM_TASKS_PER_NODE"))
*ret = 0;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
diff --git a/src/pm/hydra/tools/bootstrap/external/slurm_query_node_list.c b/src/pm/hydra/tools/bootstrap/external/slurm_query_node_list.c
index b631746..2fba09e 100644
--- a/src/pm/hydra/tools/bootstrap/external/slurm_query_node_list.c
+++ b/src/pm/hydra/tools/bootstrap/external/slurm_query_node_list.c
@@ -35,12 +35,12 @@ static HYD_status group_to_nodes(char *str)
*tmp = 0; /* remove the closing ']' */
/* Find the number of sets */
- tnodes = HYDU_strdup(nodes);
+ tnodes = MPL_strdup(nodes);
tmp = strtok(tnodes, ",");
for (i = 1; tmp; i++)
tmp = strtok(NULL, ",");
- HYDU_MALLOC(set, char **, i * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(set, char **, i * sizeof(char *), status);
/* Find the actual node sets */
set[0] = strtok(nodes, ",");
@@ -58,7 +58,7 @@ static HYD_status group_to_nodes(char *str)
for (j = start; j <= end; j++) {
char *node_str[HYD_NUM_TMP_STRINGS];
- node_str[0] = HYDU_strdup(str);
+ node_str[0] = MPL_strdup(str);
node_str[1] = HYDU_int_to_str_pad(j, strlen(start_str));
node_str[2] = NULL;
@@ -133,13 +133,13 @@ static HYD_status extract_tasks_per_node(int nnodes, char *task_list)
int i, j, k, p, count = 0;
HYD_status status = HYD_SUCCESS;
- HYDU_MALLOC(tasks_per_node, int *, nnodes * sizeof(int), status);
- HYDU_MALLOC(tmp_core_list, char **, nnodes * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(tasks_per_node, int *, nnodes * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(tmp_core_list, char **, nnodes * sizeof(char *), status);
task_set = strtok(task_list, ",");
i = 0;
do {
- HYDU_MALLOC(tmp_core_list[i], char *, strlen(task_set) + 1, status);
+ HYDU_MALLOC_OR_JUMP(tmp_core_list[i], char *, strlen(task_set) + 1, status);
MPL_snprintf(tmp_core_list[i], strlen(task_set) + 1, "%s", task_set);
i++;
task_set = strtok(NULL, ",");
@@ -164,8 +164,8 @@ static HYD_status extract_tasks_per_node(int nnodes, char *task_list)
fn_exit:
for (i = 0; i < count; i++)
- HYDU_FREE(tmp_core_list[i]);
- HYDU_FREE(tmp_core_list);
+ MPL_free(tmp_core_list[i]);
+ MPL_free(tmp_core_list);
return status;
fn_fail:
@@ -203,7 +203,7 @@ HYD_status HYDT_bscd_slurm_query_node_list(struct HYD_node **node_list)
*node_list = global_node_list;
fn_exit:
- HYDU_FREE(tasks_per_node);
+ MPL_free(tasks_per_node);
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/tools/bootstrap/external/ssh.c b/src/pm/hydra/tools/bootstrap/external/ssh.c
index 0e82892..d26a172 100644
--- a/src/pm/hydra/tools/bootstrap/external/ssh.c
+++ b/src/pm/hydra/tools/bootstrap/external/ssh.c
@@ -18,11 +18,12 @@ static HYD_status create_element(char *hostname, struct HYDT_bscd_ssh_time **e)
HYD_status status = HYD_SUCCESS;
/* FIXME: These are never getting freed */
- HYDU_MALLOC((*e), struct HYDT_bscd_ssh_time *, sizeof(struct HYDT_bscd_ssh_time), status);
- HYDU_MALLOC((*e)->init_time, struct timeval *,
- HYDT_bscd_ssh_limit_time * sizeof(struct timeval), status);
+ HYDU_MALLOC_OR_JUMP((*e), struct HYDT_bscd_ssh_time *, sizeof(struct HYDT_bscd_ssh_time),
+ status);
+ HYDU_MALLOC_OR_JUMP((*e)->init_time, struct timeval *,
+ HYDT_bscd_ssh_limit_time * sizeof(struct timeval), status);
- (*e)->hostname = HYDU_strdup(hostname);
+ (*e)->hostname = MPL_strdup(hostname);
for (i = 0; i < HYDT_bscd_ssh_limit; i++) {
(*e)->init_time[i].tv_sec = 0;
(*e)->init_time[i].tv_usec = 0;
diff --git a/src/pm/hydra/tools/bootstrap/external/ssh_finalize.c b/src/pm/hydra/tools/bootstrap/external/ssh_finalize.c
index 7f1a27a..e4ce983 100644
--- a/src/pm/hydra/tools/bootstrap/external/ssh_finalize.c
+++ b/src/pm/hydra/tools/bootstrap/external/ssh_finalize.c
@@ -16,9 +16,9 @@ HYD_status HYDT_bscd_ssh_launcher_finalize(void)
HYDU_FUNC_ENTER();
for (e = HYDT_bscd_ssh_time; e;) {
- HYDU_FREE(e->hostname);
+ MPL_free(e->hostname);
tmp = e->next;
- HYDU_FREE(e);
+ MPL_free(e);
e = tmp;
}
diff --git a/src/pm/hydra/tools/bootstrap/persist/persist_launch.c b/src/pm/hydra/tools/bootstrap/persist/persist_launch.c
index b24db99..6d471cc 100644
--- a/src/pm/hydra/tools/bootstrap/persist/persist_launch.c
+++ b/src/pm/hydra/tools/bootstrap/persist/persist_launch.c
@@ -74,8 +74,8 @@ HYD_status HYDT_bscd_persist_launch_procs(char **args, struct HYD_proxy *proxy_l
for (idx = 0; args[idx]; idx++);
args[idx + 1] = NULL;
- HYDU_MALLOC(HYDT_bscd_persist_control_fd, int *,
- HYDT_bscd_persist_node_count * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(HYDT_bscd_persist_control_fd, int *,
+ HYDT_bscd_persist_node_count * sizeof(int), status);
for (proxy = proxy_list, i = 0; proxy; proxy = proxy->next, i++) {
args[idx] = HYDU_int_to_str(i);
diff --git a/src/pm/hydra/tools/bootstrap/persist/persist_server.c b/src/pm/hydra/tools/bootstrap/persist/persist_server.c
index 1a12121..c35ee08 100644
--- a/src/pm/hydra/tools/bootstrap/persist/persist_server.c
+++ b/src/pm/hydra/tools/bootstrap/persist/persist_server.c
@@ -180,7 +180,7 @@ static HYD_status listen_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "error reading data from upstream\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(args, char **, (num_strings + 1) * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(args, char **, (num_strings + 1) * sizeof(char *), status);
for (i = 0; i < num_strings; i++) {
status = HYDU_sock_read(private.client_fd, &str_len, sizeof(int), &recvd, &closed,
@@ -188,7 +188,7 @@ static HYD_status listen_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "error reading data from upstream\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(args[i], char *, str_len, status);
+ HYDU_MALLOC_OR_JUMP(args[i], char *, str_len, status);
status = HYDU_sock_read(private.client_fd, args[i], str_len, &recvd, &closed,
HYDU_SOCK_COMM_MSGWAIT);
diff --git a/src/pm/hydra/tools/bootstrap/src/bsci_init.c.in b/src/pm/hydra/tools/bootstrap/src/bsci_init.c.in
index ae4df63..d48a548 100644
--- a/src/pm/hydra/tools/bootstrap/src/bsci_init.c.in
+++ b/src/pm/hydra/tools/bootstrap/src/bsci_init.c.in
@@ -45,7 +45,7 @@ static void init_bsci_info(void)
static const char *detect_rmk(int debug)
{
- int i, ret;
+ int i, ret = 0;
HYD_status status = HYD_SUCCESS;
for (i = 0; rmk_array[i]; i++) {
diff --git a/src/pm/hydra/tools/bootstrap/utils/bscu_wait.c b/src/pm/hydra/tools/bootstrap/utils/bscu_wait.c
index 21148f1..2daaded 100644
--- a/src/pm/hydra/tools/bootstrap/utils/bscu_wait.c
+++ b/src/pm/hydra/tools/bootstrap/utils/bscu_wait.c
@@ -110,13 +110,13 @@ HYD_status HYDT_bscu_wait_for_completion(int timeout)
}
if (HYD_bscu_pid_list) {
- HYDU_FREE(HYD_bscu_pid_list);
+ MPL_free(HYD_bscu_pid_list);
HYD_bscu_pid_list = NULL;
HYD_bscu_pid_count = 0;
}
if (HYD_bscu_fd_list) {
- HYDU_FREE(HYD_bscu_fd_list);
+ MPL_free(HYD_bscu_fd_list);
HYD_bscu_fd_list = NULL;
HYD_bscu_fd_count = 0;
}
diff --git a/src/pm/hydra/tools/ckpoint/ckpoint.c b/src/pm/hydra/tools/ckpoint/ckpoint.c
index 82da0a3..29ee39c 100644
--- a/src/pm/hydra/tools/ckpoint/ckpoint.c
+++ b/src/pm/hydra/tools/ckpoint/ckpoint.c
@@ -6,7 +6,6 @@
#include "hydra.h"
#include "ckpoint.h"
-#include "hydt_ftb.h"
#ifdef HAVE_PTHREAD_H
#include "pthread.h"
#endif
@@ -66,7 +65,6 @@ HYD_status HYDT_ckpoint_init(const char *user_ckpointlib, int user_ckpoint_num)
static void *ckpoint_thread(void *arg)
{
HYD_status status = HYD_SUCCESS;
- char ftb_event_payload[HYDT_FTB_MAX_PAYLOAD_DATA];
#if defined HAVE_BLCR
if (!strcmp(HYDT_ckpoint_info.ckpointlib, "blcr")) {
@@ -77,17 +75,17 @@ static void *ckpoint_thread(void *arg)
}
#endif /* HAVE_BLCR */
- HYDT_ftb_publish("FTB_MPI_PROCS_CKPTED", ftb_event_payload);
-
++HYDT_ckpoint_info.ckpoint_num;
-
+#if defined HAVE_BLCR
fn_exit:
+#endif /* HAVE_BLCR */
in_ckpt = HYDT_CKPOINT_FINISHED;
return (void *) (long) status;
+#if defined HAVE_BLCR
fn_fail:
- HYDT_ftb_publish("FTB_MPI_PROCS_CKPT_FAIL", ftb_event_payload);
goto fn_exit;
+#endif /* HAVE_BLCR */
}
#endif
@@ -153,7 +151,6 @@ HYD_status HYDT_ckpoint_restart(int pgid, int id, struct HYD_env * envlist, int
HYD_status status = HYD_SUCCESS;
struct stat st;
int ret;
- char ftb_event_payload[HYDT_FTB_MAX_PAYLOAD_DATA];
HYDU_FUNC_ENTER();
@@ -176,8 +173,6 @@ HYD_status HYDT_ckpoint_restart(int pgid, int id, struct HYD_env * envlist, int
}
#endif /* HAVE_BLCR */
- HYDT_ftb_publish("FTB_MPI_PROCS_RESTARTED", ftb_event_payload);
-
/* next checkpoint number should be the one after the one we restarted from */
++HYDT_ckpoint_info.ckpoint_num;
@@ -186,6 +181,5 @@ HYD_status HYDT_ckpoint_restart(int pgid, int id, struct HYD_env * envlist, int
return status;
fn_fail:
- HYDT_ftb_publish("FTB_MPI_PROCS_RESTART_FAIL", ftb_event_payload);
goto fn_exit;
}
diff --git a/src/pm/hydra/tools/debugger/debugger.c b/src/pm/hydra/tools/debugger/debugger.c
index 39ce83a..dd125f0 100644
--- a/src/pm/hydra/tools/debugger/debugger.c
+++ b/src/pm/hydra/tools/debugger/debugger.c
@@ -33,8 +33,8 @@ HYD_status HYDT_dbg_setup_procdesc(struct HYD_pg * pg)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(MPIR_proctable, struct MPIR_PROCDESC *,
- pg->pg_process_count * sizeof(struct MPIR_PROCDESC), status);
+ HYDU_MALLOC_OR_JUMP(MPIR_proctable, struct MPIR_PROCDESC *,
+ pg->pg_process_count * sizeof(struct MPIR_PROCDESC), status);
round = 0;
/* We need to allocate the MPIR_proctable in COMM_WORLD rank
@@ -61,7 +61,7 @@ HYD_status HYDT_dbg_setup_procdesc(struct HYD_pg * pg)
if (i > 0 && strcmp(MPIR_proctable[i - 1].host_name, proxy->node->hostname) == 0)
MPIR_proctable[i].host_name = MPIR_proctable[i - 1].host_name;
else
- MPIR_proctable[i].host_name = HYDU_strdup(proxy->node->hostname);
+ MPIR_proctable[i].host_name = MPL_strdup(proxy->node->hostname);
MPIR_proctable[i].pid = proxy->pid[(proxy->node->core_count * round) + j];
j++;
if (exec->exec[0]) {
@@ -69,7 +69,7 @@ HYD_status HYDT_dbg_setup_procdesc(struct HYD_pg * pg)
if (i > 0 && strcmp(exec->exec[0], MPIR_proctable[i - 1].executable_name) == 0)
MPIR_proctable[i].executable_name = MPIR_proctable[i - 1].executable_name;
else
- MPIR_proctable[i].executable_name = HYDU_strdup(exec->exec[0]);
+ MPIR_proctable[i].executable_name = MPL_strdup(exec->exec[0]);
}
else {
MPIR_proctable[i].executable_name = NULL;
@@ -103,13 +103,13 @@ void HYDT_dbg_free_procdesc(void)
/* skip over duplicate pointers when freeing */
if (MPIR_proctable[i].host_name) {
if (i == 0 || MPIR_proctable[i].host_name != MPIR_proctable[i - 1].host_name)
- HYDU_FREE(MPIR_proctable[i].host_name);
+ MPL_free(MPIR_proctable[i].host_name);
}
if (MPIR_proctable[i].executable_name) {
if (i == 0 ||
MPIR_proctable[i].executable_name != MPIR_proctable[i - 1].executable_name)
- HYDU_FREE(MPIR_proctable[i].executable_name);
+ MPL_free(MPIR_proctable[i].executable_name);
}
}
- HYDU_FREE(MPIR_proctable);
+ MPL_free(MPIR_proctable);
}
diff --git a/src/pm/hydra/tools/debugger/debugger.h b/src/pm/hydra/tools/debugger/debugger.h
index 1270d5f..ed52563 100644
--- a/src/pm/hydra/tools/debugger/debugger.h
+++ b/src/pm/hydra/tools/debugger/debugger.h
@@ -9,8 +9,8 @@
/* This structure is defined by the debugger interface */
typedef struct MPIR_PROCDESC {
- const char *host_name;
- const char *executable_name;
+ char *host_name;
+ char *executable_name;
int pid;
} MPIR_PROCDESC;
diff --git a/src/pm/hydra/tools/demux/demux.c b/src/pm/hydra/tools/demux/demux.c
index de72774..fb5339d 100644
--- a/src/pm/hydra/tools/demux/demux.c
+++ b/src/pm/hydra/tools/demux/demux.c
@@ -38,11 +38,11 @@ HYD_status HYDT_dmx_init(char **demux)
#if defined HAVE_POLL
HYDT_dmxu_fns.wait_for_event = HYDT_dmxu_poll_wait_for_event;
HYDT_dmxu_fns.stdin_valid = HYDT_dmxu_poll_stdin_valid;
- *demux = HYDU_strdup("poll");
+ *demux = MPL_strdup("poll");
#elif defined HAVE_SELECT
HYDT_dmxu_fns.wait_for_event = HYDT_dmxu_select_wait_for_event;
HYDT_dmxu_fns.stdin_valid = HYDT_dmxu_select_stdin_valid;
- *demux = HYDU_strdup("select");
+ *demux = MPL_strdup("select");
#endif /* HAVE_SELECT */
}
else if (!strcmp(*demux, "poll")) { /* user wants to use poll */
@@ -106,9 +106,10 @@ HYD_status HYDT_dmx_register_fd(int num_fds, int *fd, HYD_event_t events, void *
}
#endif /* HAVE_ERROR_CHECKING */
- HYDU_MALLOC(cb_element, struct HYDT_dmxu_callback *, sizeof(struct HYDT_dmxu_callback), status);
+ HYDU_MALLOC_OR_JUMP(cb_element, struct HYDT_dmxu_callback *, sizeof(struct HYDT_dmxu_callback),
+ status);
cb_element->num_fds = num_fds;
- HYDU_MALLOC(cb_element->fd, int *, num_fds * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(cb_element->fd, int *, num_fds * sizeof(int), status);
memcpy(cb_element->fd, fd, num_fds * sizeof(int));
cb_element->events = events;
cb_element->userp = userp;
@@ -206,8 +207,8 @@ HYD_status HYDT_dmx_finalize(void)
while (run1) {
run2 = run1->next;
if (run1->fd)
- HYDU_FREE(run1->fd);
- HYDU_FREE(run1);
+ MPL_free(run1->fd);
+ MPL_free(run1);
run1 = run2;
}
HYDT_dmxu_cb_list = NULL;
diff --git a/src/pm/hydra/tools/demux/demux_poll.c b/src/pm/hydra/tools/demux/demux_poll.c
index b10ab96..b0e4fe1 100644
--- a/src/pm/hydra/tools/demux/demux_poll.c
+++ b/src/pm/hydra/tools/demux/demux_poll.c
@@ -15,7 +15,8 @@ HYD_status HYDT_dmxu_poll_wait_for_event(int wtime)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(pollfds, struct pollfd *, HYDT_dmxu_num_cb_fds * sizeof(struct pollfd), status);
+ HYDU_MALLOC_OR_JUMP(pollfds, struct pollfd *, HYDT_dmxu_num_cb_fds * sizeof(struct pollfd),
+ status);
for (i = 0, run = HYDT_dmxu_cb_list; run; run = run->next) {
for (j = 0; j < run->num_fds; j++) {
@@ -45,7 +46,7 @@ HYD_status HYDT_dmxu_poll_wait_for_event(int wtime)
status = HYD_SUCCESS;
goto fn_exit;
}
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "poll error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "poll error (%s)\n", MPL_strerror(errno));
}
work_done = 0;
@@ -91,7 +92,7 @@ HYD_status HYDT_dmxu_poll_wait_for_event(int wtime)
fn_exit:
if (pollfds)
- HYDU_FREE(pollfds);
+ MPL_free(pollfds);
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/tools/demux/demux_select.c b/src/pm/hydra/tools/demux/demux_select.c
index de875ac..bf4ff6e 100644
--- a/src/pm/hydra/tools/demux/demux_select.c
+++ b/src/pm/hydra/tools/demux/demux_select.c
@@ -51,7 +51,7 @@ HYD_status HYDT_dmxu_select_wait_for_event(int wtime)
status = HYD_SUCCESS;
goto fn_exit;
}
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "select error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "select error (%s)\n", MPL_strerror(errno));
}
work_done = 0;
diff --git a/src/pm/hydra/tools/ftb/Makefile.mk b/src/pm/hydra/tools/ftb/Makefile.mk
deleted file mode 100644
index f48d74e..0000000
--- a/src/pm/hydra/tools/ftb/Makefile.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-## -*- Mode: Makefile; -*-
-##
-## (C) 2008 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-AM_CPPFLAGS += -I$(top_srcdir)/tools/ftb
-
-noinst_HEADERS += tools/ftb/hydt_ftb.h
-
-if hydra_have_ftb
-libhydra_la_SOURCES += tools/ftb/hydt_ftb.c
-else
-libhydra_la_SOURCES += tools/ftb/hydt_ftb_dummy.c
-endif
diff --git a/src/pm/hydra/tools/ftb/hydt_ftb.c b/src/pm/hydra/tools/ftb/hydt_ftb.c
deleted file mode 100644
index b684dc0..0000000
--- a/src/pm/hydra/tools/ftb/hydt_ftb.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2010 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "hydra.h"
-#include "hydt_ftb.h"
-
-static FTB_client_handle_t ch;
-
-static FTB_event_info_t event_info[] = {
- {"FTB_MPI_PROCS_RESTARTED", "info"},
- {"FTB_MPI_PROCS_RESTART_FAIL", "error"},
- {"FTB_MPI_PROCS_CKPTED", "info"},
- {"FTB_MPI_PROCS_CKPT_FAILED", "error"},
- {"FTB_MPI_PROCS_DEAD", "error"}
-};
-
-HYD_status HYDT_ftb_init(void)
-{
- int ret;
- FTB_client_t ci;
- HYD_status status = HYD_SUCCESS;
-
- MPL_strncpy(ci.event_space, "ftb.mpi.hydra", sizeof(ci.event_space));
- MPL_strncpy(ci.client_name, "hydra " HYDRA_VERSION, sizeof(ci.client_name));
- MPL_strncpy(ci.client_subscription_style, "FTB_SUBSCRIPTION_NONE",
- sizeof(ci.client_subscription_style));
- ci.client_polling_queue_len = -1;
-
- ret = FTB_Connect(&ci, &ch);
- if (ret)
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "ftb connect\n");
-
- ret = FTB_Declare_publishable_events(ch, NULL, event_info,
- sizeof(event_info) / sizeof(event_info[0]));
- if (ret)
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "ftb declare publishable\n");
-
- fn_exit:
- HYDU_FUNC_EXIT();
- return status;
-
- fn_fail:
- goto fn_exit;
-}
-
-HYD_status HYDT_ftb_finalize(void)
-{
- int ret;
- HYD_status status = HYD_SUCCESS;
-
- ret = FTB_Disconnect(ch);
- if (ret)
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "ftb disconnect\n");
-
- fn_exit:
- HYDU_FUNC_EXIT();
- return status;
-
- fn_fail:
- goto fn_exit;
-}
-
-HYD_status HYDT_ftb_publish(const char *event_name, const char *event_payload)
-{
- FTB_event_properties_t event_prop;
- FTB_event_handle_t event_handle;
- int ret;
- HYD_status status = HYD_SUCCESS;
-
- event_prop.event_type = 1;
- MPL_strncpy(event_prop.event_payload, event_payload, sizeof(event_prop.event_payload));
-
- ret = FTB_Publish(ch, event_name, &event_prop, &event_handle);
- if (ret)
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "ftb publish\n");
-
- fn_exit:
- HYDU_FUNC_EXIT();
- return status;
-
- fn_fail:
- goto fn_exit;
-}
diff --git a/src/pm/hydra/tools/ftb/hydt_ftb.h b/src/pm/hydra/tools/ftb/hydt_ftb.h
deleted file mode 100644
index 9635fec..0000000
--- a/src/pm/hydra/tools/ftb/hydt_ftb.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2010 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef HYDT_FTB_H_INCLUDED
-#define HYDT_FTB_H_INCLUDED
-
-#if defined ENABLE_FTB
-#include <libftb.h>
-#define HYDT_FTB_MAX_PAYLOAD_DATA FTB_MAX_PAYLOAD_DATA
-#else
-#define HYDT_FTB_MAX_PAYLOAD_DATA (1024)
-#endif /* ENABLE_FTB */
-
-HYD_status HYDT_ftb_init(void);
-HYD_status HYDT_ftb_finalize(void);
-HYD_status HYDT_ftb_publish(const char *event_name, const char *event_payload);
-
-#endif /* HYDT_FTB_H_INCLUDED */
diff --git a/src/pm/hydra/tools/ftb/hydt_ftb_dummy.c b/src/pm/hydra/tools/ftb/hydt_ftb_dummy.c
deleted file mode 100644
index 8fcee97..0000000
--- a/src/pm/hydra/tools/ftb/hydt_ftb_dummy.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2010 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "hydra.h"
-#include "hydt_ftb.h"
-
-HYD_status HYDT_ftb_init(void)
-{
- return HYD_SUCCESS;
-}
-
-HYD_status HYDT_ftb_finalize(void)
-{
- return HYD_SUCCESS;
-}
-
-HYD_status HYDT_ftb_publish(const char *event_name, const char *event_payload)
-{
- return HYD_SUCCESS;
-}
diff --git a/src/pm/hydra/tools/nameserver/hydra_nameserver.c b/src/pm/hydra/tools/nameserver/hydra_nameserver.c
index 6b4d93e..487929d 100644
--- a/src/pm/hydra/tools/nameserver/hydra_nameserver.c
+++ b/src/pm/hydra/tools/nameserver/hydra_nameserver.c
@@ -85,12 +85,12 @@ static void free_publish_element(struct HYDT_ns_publish *publish)
return;
if (publish->name)
- HYDU_FREE(publish->name);
+ MPL_free(publish->name);
if (publish->info)
- HYDU_FREE(publish->info);
+ MPL_free(publish->info);
- HYDU_FREE(publish);
+ MPL_free(publish);
}
static HYD_status cmd_response(int fd, const char *str)
@@ -142,19 +142,20 @@ static HYD_status request_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(cmd, char *, len + 1, status);
+ HYDU_MALLOC_OR_JUMP(cmd, char *, len + 1, status);
status = HYDU_sock_read(fd, cmd, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
if (!strcmp(cmd, "PUBLISH")) {
- HYDU_MALLOC(publish, struct HYDT_ns_publish *, sizeof(struct HYDT_ns_publish), status);
+ HYDU_MALLOC_OR_JUMP(publish, struct HYDT_ns_publish *, sizeof(struct HYDT_ns_publish),
+ status);
status = HYDU_sock_read(fd, &len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(publish->name, char *, len + 1, status);
+ HYDU_MALLOC_OR_JUMP(publish->name, char *, len + 1, status);
status = HYDU_sock_read(fd, publish->name, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
@@ -163,7 +164,7 @@ static HYD_status request_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(publish->info, char *, len + 1, status);
+ HYDU_MALLOC_OR_JUMP(publish->info, char *, len + 1, status);
status = HYDU_sock_read(fd, publish->info, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
@@ -197,7 +198,7 @@ static HYD_status request_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(name, char *, len + 1, status);
+ HYDU_MALLOC_OR_JUMP(name, char *, len + 1, status);
status = HYDU_sock_read(fd, name, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
@@ -234,7 +235,7 @@ static HYD_status request_cb(int fd, HYD_event_t events, void *userp)
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
- HYDU_MALLOC(name, char *, len + 1, status);
+ HYDU_MALLOC_OR_JUMP(name, char *, len + 1, status);
status = HYDU_sock_read(fd, name, len, &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error reading data\n");
HYDU_ASSERT(!closed, status);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/.gitignore b/src/pm/hydra/tools/topo/hwloc/hwloc/.gitignore
index 99d4e38..a6746a5 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/.gitignore
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/.gitignore
@@ -5,6 +5,12 @@ Makefile
test-suite.log
*~
+/auto.out
+/config.out
+/dist.out
+/doc/doc.out
+/doc/readme.out
+
/config/ar-lib
/config/argz.m4
/config/compile
@@ -41,14 +47,16 @@ test-suite.log
/doc/doxygen-doc/
/doc/images/diagram.eps
/doc/images/diagram.png
-/doc/hwloc-hello
-/doc/hwloc-hello-cpp
-/doc/hwloc-hello-cpp.cpp
-/doc/*.o
-/doc/*.log
-/doc/*.trs
-/doc/doc.out
-/doc/readme.out
+/doc/examples/hwloc-hello
+/doc/examples/hwloc-hello-cpp
+/doc/examples/hwloc-hello-cpp.cpp
+/doc/examples/cpuset+bitmap+cpubind
+/doc/examples/nodeset+membind+policy
+/doc/examples/sharedcaches
+/doc/examples/get-knl-modes
+/doc/examples/*.o
+/doc/examples/*.log
+/doc/examples/*.trs
/src/static-components.h
/src/*.lo
@@ -58,6 +66,7 @@ test-suite.log
/tests/wrapper.sh
/tests/hwloc_list_components
/tests/hwloc_bitmap
+/tests/hwloc_bitmap_compare_inclusion
/tests/hwloc_bitmap_string
/tests/hwloc_get_closest_objs
/tests/hwloc_get_obj_covering_cpuset
@@ -102,7 +111,6 @@ test-suite.log
/tests/*.log
/tests/*.trs
-/tests/linux/hwloc-gather-topology
/tests/linux/test-topology.sh
/tests/linux/*.log
/tests/linux/*.trs
@@ -138,6 +146,9 @@ test-suite.log
/utils/hwloc/hwloc-distances.1
/utils/hwloc/hwloc-distrib
/utils/hwloc/hwloc-distrib.1
+/utils/hwloc/hwloc-dump-hwdata
+/utils/hwloc/hwloc-dump-hwdata.1
+/utils/hwloc/hwloc-gather-topology
/utils/hwloc/hwloc-gather-topology.1
/utils/hwloc/hwloc-info
/utils/hwloc/hwloc-info.1
@@ -161,8 +172,9 @@ test-suite.log
/utils/lstopo/*.o
/utils/lstopo/lstopo
/utils/lstopo/lstopo-no-graphics
-/utils/lstopo/lstopo.1
+/utils/lstopo/lstopo-no-graphics.1
/utils/lstopo/test-hwloc-ls.sh
/utils/lstopo/test-*.sh.log
/utils/lstopo/test-*.sh.trs
+/contrib/systemd/hwloc-dump-hwdata.service
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/AUTHORS b/src/pm/hydra/tools/topo/hwloc/hwloc/AUTHORS
index 837b27f..0e52215 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/AUTHORS
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/AUTHORS
@@ -1,8 +1,10 @@
Cédric Augonnet <Cedric.Augonnet at labri.fr>
+Guillaume Beauchamp <Guillaume.Beauchamp at inria.fr>
Jérôme Clet-Ortega <Jerome.Clet-Ortega at labri.fr>
Ludovic Courtès <Ludovic.Courtes at inria.fr>
-Brice Goglin <Brice.Goglin at inria.fr>
Nathalie Furmento <Nathalie.Furmento at labri.fr>
-Samuel Thibault <Samuel.Thibault at labri.fr>
-Jeff Squyres <jsquyres at cisco.com>
+Brice Goglin <Brice.Goglin at inria.fr>
Alexey Kardashevskiy <aik at au1.ibm.com>
+Antoine Rougier (University of Bordeaux intern)
+Jeff Squyres <jsquyres at cisco.com>
+Samuel Thibault <Samuel.Thibault at labri.fr>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING b/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING
index 694a7bd..485798f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING
@@ -1,8 +1,18 @@
-Copyright © 2009 CNRS
-Copyright © 2009 inria. All rights reserved.
-Copyright © 2009 Université Bordeaux
-Copyright © 2009 Cisco Systems, Inc. All rights reserved.
-Copyright © 2012 Blue Brain Project, EPFL. All rights reserved.
+Copyright © 2004-2006 The Trustees of Indiana University and Indiana University Research and Technology Corporation. All rights reserved.
+Copyright © 2004-2005 The University of Tennessee and The University of Tennessee Research Foundation. All rights reserved.
+Copyright © 2004-2005 High Performance Computing Center Stuttgart, University of Stuttgart. All rights reserved.
+Copyright © 2004-2005 The Regents of the University of California. All rights reserved.
+Copyright © 2009 CNRS
+Copyright © 2009-2016 Inria. All rights reserved.
+Copyright © 2009-2015 Université Bordeaux
+Copyright © 2009-2015 Cisco Systems, Inc. All rights reserved.
+Copyright © 2009-2012 Oracle and/or its affiliates. All rights reserved.
+Copyright © 2010 IBM
+Copyright © 2010 Jirka Hladky
+Copyright © 2012 Aleksej Saushev, The NetBSD Foundation
+Copyright © 2012 Blue Brain Project, EPFL. All rights reserved.
+Copyright © 2015 Research Organization for Information Science and Technology (RIST). All rights reserved.
+Copyright © 2015-2016 Intel, Inc. All rights reserved.
See COPYING in top-level directory.
Redistribution and use in source and binary forms, with or without
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
index 5449f70..f7d3ff7 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2015 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009 Université Bordeaux
# Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -9,7 +9,7 @@ ACLOCAL_AMFLAGS = -I ./config
SUBDIRS = src include
if HWLOC_BUILD_STANDALONE
-# SUBDIRS += utils tests
+# SUBDIRS += tests utils contrib/systemd
# We need doc/ if HWLOC_BUILD_DOXYGEN, or during make install if HWLOC_INSTALL_DOXYGEN.
# There's no INSTALL_SUBDIRS, so always enter doc/ and check HWLOC_BUILD/INSTALL_DOXYGEN there
# SUBDIRS += doc
@@ -21,11 +21,9 @@ DIST_SUBDIRS = $(SUBDIRS)
# Only install the pkg file if we're building in standalone mode (and not on Windows)
if HWLOC_BUILD_STANDALONE
-if !HWLOC_HAVE_WINDOWS
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = hwloc.pc
endif
-endif
# Only install the valgrind suppressions file if we're building in standalone mode
if HWLOC_BUILD_STANDALONE
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.in
index 7dde8a7..6f5bea4 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# Copyright © 2009-2015 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009 Université Bordeaux
# Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -300,6 +300,7 @@ HWLOC_PLUGINS_PATH = @HWLOC_PLUGINS_PATH@
HWLOC_RELEASE_DATE = @HWLOC_RELEASE_DATE@
HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_VERSION = @HWLOC_VERSION@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
@@ -325,6 +326,7 @@ MKDIR_P = @MKDIR_P@
MPIEXEC_HYDRA_NAME = @MPIEXEC_HYDRA_NAME@
MPIEXEC_NAME = @MPIEXEC_NAME@
MPIRUN_NAME = @MPIRUN_NAME@
+MPLLIBNAME = @MPLLIBNAME@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -399,12 +401,16 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mpl_dist_srcdir = @mpl_dist_srcdir@
+mpl_includedir = @mpl_includedir@
+mpl_lib = @mpl_lib@
+mpl_libdir = @mpl_libdir@
mpl_srcdir = @mpl_srcdir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -422,7 +428,7 @@ top_srcdir = @top_srcdir@
# via AC_CONFIG_MACRO_DIR in configure.ac.
ACLOCAL_AMFLAGS = -I ./config
SUBDIRS = src include
-# SUBDIRS += utils tests
+# SUBDIRS += tests utils contrib/systemd
# We need doc/ if HWLOC_BUILD_DOXYGEN, or during make install if HWLOC_INSTALL_DOXYGEN.
# There's no INSTALL_SUBDIRS, so always enter doc/ and check HWLOC_BUILD/INSTALL_DOXYGEN there
# SUBDIRS += doc
@@ -432,8 +438,8 @@ SUBDIRS = src include
DIST_SUBDIRS = $(SUBDIRS)
# Only install the pkg file if we're building in standalone mode (and not on Windows)
- at HWLOC_BUILD_STANDALONE_TRUE@@HWLOC_HAVE_WINDOWS_FALSE at pkgconfigdir = $(libdir)/pkgconfig
- at HWLOC_BUILD_STANDALONE_TRUE@@HWLOC_HAVE_WINDOWS_FALSE at pkgconfig_DATA = hwloc.pc
+ at HWLOC_BUILD_STANDALONE_TRUE@pkgconfigdir = $(libdir)/pkgconfig
+ at HWLOC_BUILD_STANDALONE_TRUE@pkgconfig_DATA = hwloc.pc
# Only install the valgrind suppressions file if we're building in standalone mode
@HWLOC_BUILD_STANDALONE_TRUE at dist_pkgdata_DATA = contrib/hwloc-valgrind.supp
@@ -722,10 +728,10 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- at HWLOC_BUILD_STANDALONE_FALSE@install-data-local:
- at HWLOC_HAVE_WINDOWS_FALSE@install-data-local:
@HWLOC_BUILD_STANDALONE_FALSE at uninstall-local:
@HWLOC_HAVE_WINDOWS_FALSE at uninstall-local:
+ at HWLOC_BUILD_STANDALONE_FALSE@install-data-local:
+ at HWLOC_HAVE_WINDOWS_FALSE@install-data-local:
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS b/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
index df246fe..c2c487b 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
@@ -1,5 +1,5 @@
Copyright © 2009 CNRS
-Copyright © 2009-2015 Inria. All rights reserved.
+Copyright © 2009-2016 Inria. All rights reserved.
Copyright © 2009-2013 Université Bordeaux
Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
@@ -17,6 +17,163 @@ bug fixes (and other actions) for each version of hwloc since version
in v0.9.1).
+Version 1.11.4
+--------------
+* Add MemoryMode and ClusterMode attributes in the Machine object on KNL.
+ Add doc/examples/get-knl-modes.c for an example of retrieving them.
+ Thanks to Grzegorz Andrejczuk.
+* Fix Linux build with -m32 with respect to libudev.
+ Thanks to Paul Hargrove for reporting the issue.
+* Fix build with Visual Studio 2015, thanks to Eloi Gaudry for reporting
+ the issue and providing the patch.
+* Don't forget to display OS device children in the graphical lstopo.
+* Fix a memory leak on Solaris, thanks to Bryon Gloden for the patch.
+* Properly handle realloc() failures, thanks to Bryon Gloden for reporting
+ the issue.
+* Fix lstopo crash in ascii/fig/windows outputs when some objects have a
+ lstopoStyle info attribute.
+
+
+Version 1.11.3
+--------------
+* Bug fixes
+ + Fix a memory leak on Linux S/390 hosts with books.
+ + Fix /proc/mounts parsing on Linux by using mntent.h.
+ Thanks to Nathan Hjelm for reporting the issue.
+ + Fix a x86 infinite loop on VMware due to the x2APIC feature being
+ advertised without actually being fully supported.
+ Thanks to Jianjun Wen for reporting the problem and testing the patch.
+ + Fix the return value of hwloc_alloc() on mmap() failure.
+ Thanks to Hugo Brunie for reporting the issue.
+ + Fix the return value of command-line tools in some error cases.
+ + Do not break individual thread bindings during x86 backend discovery in a
+ multithreaded process. Thanks to Farouk Mansouri for the report.
+ + Fix hwloc-bind --membind for CPU-less NUMA nodes.
+ + Fix some corner cases in the XML export/import of application userdata.
+* API Improvements
+ + Add HWLOC_MEMBIND_BYNODESET flag so that membind() functions accept
+ either cpusets or nodesets.
+ + Add hwloc_get_area_memlocation() to check where pages are actually
+ allocated. Only implemented on Linux for now.
+ - There's no _nodeset() variant, but the new flag HWLOC_MEMBIND_BYNODESET
+ is supported.
+ + Make hwloc_obj_type_sscanf() parse back everything that may be outputted
+ by hwloc_obj_type_snprintf().
+* Detection Improvements
+ + Allow the x86 backend to add missing cache levels, so that it completes
+ what the Solaris backend lacks.
+ Thanks to Ryan Zezeski for reporting the issue.
+ + Do not filter-out FibreChannel PCI adapters by default anymore.
+ Thanks to Matt Muggeridge for the report.
+ + Add support for CUDA compute capability 6.x.
+* Tools
+ + Add --support to hwloc-info to list supported features, just like with
+ hwloc_topology_get_support().
+ - Also add --objects and --topology to explicitly switch between the
+ default modes.
+ + Add --tid to let hwloc-bind operate on individual threads on Linux.
+ + Add --nodeset to let hwloc-bind report memory binding as NUMA node sets.
+ + hwloc-annotate and lstopo don't drop application userdata from XMLs anymore.
+ - Add --cu to hwloc-annotate to drop these application userdata.
+ + Make the hwloc-dump-hwdata dump directory configurable through configure
+ options such as --runstatedir or --localstatedir.
+* Misc Improvements
+ + Add systemd service template contrib/systemd/hwloc-dump-hwdata.service
+ for launching hwloc-dump-hwdata at boot on Linux.
+ Thanks to Grzegorz Andrejczuk.
+ + Add HWLOC_PLUGINS_BLACKLIST environment variable to prevent some plugins
+ from being loaded. Thanks to Alexandre Denis for the suggestion.
+ + Small improvements for various Windows build systems,
+ thanks to Jonathan L Peyton and Marco Atzeri.
+
+
+Version 1.11.2
+--------------
+* Improve support for Intel Knights Landing Xeon Phi on Linux:
+ + Group local NUMA nodes of normal memory (DDR) and high-bandwidth memory
+ (MCDRAM) together through "Cluster" groups so that the local MCDRAM is
+ easy to find.
+ - See "How do I find the local MCDRAM NUMA node on Intel Knights
+ Landing Xeon Phi?" in the documentation.
+ - For uniformity across all KNL configurations, always have a NUMA node
+ object even if the host is UMA.
+ + Fix the detection of the memory-side cache:
+ - Add the hwloc-dump-hwdata superuser utility to dump SMBIOS information
+ into /var/run/hwloc/ as root during boot, and load this dumped
+ information from the hwloc library at runtime.
+ - See "Why do I need hwloc-dump-hwdata for caches on Intel Knights
+ Landing Xeon Phi?" in the documentation.
+ Thanks to Grzegorz Andrejczuk for the patches and for the help.
+* The x86 and linux backends may now be combined for discovering CPUs
+ through x86 CPUID and memory from the Linux kernel.
+ This is useful for working around buggy CPU information reported by Linux
+ (for instance the AMD Bulldozer/Piledriver bug below).
+ Combination is enabled by passing HWLOC_COMPONENTS=x86 in the environment.
+* Fix L3 cache sharing on AMD Opteron 63xx (Piledriver) and 62xx (Bulldozer)
+ in the x86 backend. Thanks to many users who helped.
+* Fix the overzealous L3 cache sharing fix added to the x86 backend in 1.11.1
+ for AMD Opteron 61xx (Magny-Cours) processors.
+* The x86 backend may now add the info attribute Inclusive=0 or 1 to caches
+ it discovers, or to caches discovered by other backends earlier.
+ Thanks to Guillaume Beauchamp for the patch.
+* Fix the management on alloc_membind() allocation failures on AIX, HP-UX
+ and OSF/Tru64.
+* Fix spurious failures to load with ENOMEM on AIX in case of Misc objects
+ below PUs.
+* lstopo improvements in X11 and Windows graphical mode:
+ + Add + - f 1 shortcuts to manually zoom-in, zoom-out, reset the scale,
+ or fit the entire window.
+ + Display all keyboard shortcuts in the console.
+* Debug messages may be disabled at runtime by passing HWLOC_DEBUG_VERBOSE=0
+ in the environment when --enable-debug was passed to configure.
+* Add a FAQ entry "What are these Group objects in my topology?".
+
+
+Version 1.11.1
+--------------
+* Detection fixes
+ + Hardwire the topology of Fujitsu K-computer, FX10, FX100 servers to
+ workaround buggy Linux kernels.
+ Thanks to Takahiro Kawashima and Gilles Gouaillardet.
+ + Fix L3 cache information on AMD Opteron 61xx Magny-Cours processors
+ in the x86 backend. Thanks to Guillaume Beauchamp for the patch.
+ + Detect block devices directly attached to PCI without a controller,
+ for instance NVMe disks. Thanks to Barry M. Tannenbaum.
+ + Add the PCISlot attribute to all PCI functions instead of only the
+ first one.
+* Miscellaneous internal fixes
+ + Ignore PCI bridges that could fail assertions by reporting buggy
+ secondary-subordinate bus numbers
+ Thanks to George Bosilca for reporting the issue.
+ + Fix an overzealous assertion when inserting an intermediate Group object
+ while Groups are totally ignored.
+ + Fix a memory leak on Linux on AMD processors with dual-core compute units.
+ Thanks to Bob Benner.
+ + Fix a memory leak on failure to load a xml diff file.
+ + Fix some segfaults when inputting an invalid synthetic description.
+ + Fix a segfault when plugins fail to find core symbols.
+ Thanks to Guy Streeter.
+* Many fixes and improvements in the Windows backend:
+ + Fix the discovery of more than 32 processors and multiple processor
+ groups. Thanks to Barry M. Tannenbaum for the help.
+ + Add thread binding set support in case of multiple process groups.
+ + Add thread binding get support.
+ + Add get_last_cpu_location() support for the current thread.
+ + Disable the unsupported process binding in case of multiple processor
+ groups.
+ + Fix/update the Visual Studio support under contrib/windows.
+ Thanks to Eloi Gaudry for the help.
+* Tools fixes
+ + Fix a segfault when displaying logical indexes in the graphical lstopo.
+ Thanks to Guillaume Mercier for reporting the issue.
+ + Fix lstopo linking with X11 libraries, for instance on Mac OS X.
+ Thanks to Scott Atchley and Pierre Ramet for reporting the issue.
+ + hwloc-annotate, hwloc-diff and hwloc-patch do not drop unavailable
+ resources from the output anymore and those may be annotated as well.
+ + Command-line tools may now import XML from the standard input with -i -.xml
+ + Add missing documentation for the hwloc-info --no-icaches option.
+
+
Version 1.11.0
--------------
* API
@@ -33,7 +190,7 @@ Version 1.11.0
info attributes to Block OS devices on Linux. Thanks to Vineet Pedaballe
for the help.
- Add --disable-libudev to avoid dependency on the libudev library.
- + Add "MemoryDevice" Misc objects with information about DIMMs, on Linux
+ + Add "MemoryModule" Misc objects with information about DIMMs, on Linux
when privileged and when I/O is enabled.
Thanks to Vineet Pedaballe for the help.
+ Add a PCISlot attribute to PCI devices on Linux when supported to
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/README b/src/pm/hydra/tools/topo/hwloc/hwloc/README
index fed9319..a307d18 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/README
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/README
@@ -13,21 +13,12 @@ hwloc primarily aims at helping high-performance computing (HPC) applications,
but is also applicable to any project seeking to exploit code and/or data
locality on modern computing platforms.
-Note that the hwloc project represents the merger of the libtopology project
-from inria and the Portable Linux Processor Affinity (PLPA) sub-project from
-Open MPI. Both of these prior projects are now deprecated. The first hwloc
-release was essentially a "re-branding" of the libtopology code base, but with
-both a few genuinely new features and a few PLPA-like features added in. Prior
-releases of hwloc included documentation about switching from PLPA to hwloc;
-this documentation has been dropped on the assumption that everyone who was
-using PLPA has already switched to hwloc.
-
hwloc supports the following operating systems:
* Linux (including old kernels not having sysfs topology information, with
- knowledge of cpusets, offline CPUs, ScaleMP vSMP, NumaScale NumaConnect,
- and Kerrighed support) on all supported hardware, including Intel Xeon Phi
- (either standalone or as a coprocessor).
+ knowledge of cpusets, offline CPUs, ScaleMP vSMP and Kerrighed support) on
+ all supported hardware, including Intel Xeon Phi (KNL and KNC, either
+ standalone or as a coprocessor) and NumaScale NumaConnect.
* Solaris
* AIX
* Darwin / OS X
@@ -55,9 +46,10 @@ no topology information is available.
For development and debugging purposes, hwloc also offers the ability to work
on "fake" topologies:
- * Symmetrical tree of resources generated from a list of level arities
- * Remote machine simulation through the gathering of Linux sysfs topology
- files
+ * Symmetrical tree of resources generated from a list of level arities, see
+ Synthetic topologies.
+ * Remote machine simulation through the gathering of topology as XML files,
+ see Importing and exporting topologies from/to XML files.
hwloc can display the topology in a human-readable format, either in graphical
mode (X11), or by exporting in one of several different formats, including:
@@ -78,535 +70,6 @@ Python bindings are available from Guy Streeter:
* Fedora RPM and tarball.
* git tree (html).
-Installation
-
-hwloc (http://www.open-mpi.org/projects/hwloc/) is available under the BSD
-license. It is hosted as a sub-project of the overall Open MPI project (http://
-www.open-mpi.org/). Note that hwloc does not require any functionality from
-Open MPI -- it is a wholly separate (and much smaller!) project and code base.
-It just happens to be hosted as part of the overall Open MPI project.
-
-Nightly development snapshots are available on the web site. Additionally, the
-code can be directly cloned from Git:
-
-shell$ git clone https://github.com/open-mpi/hwloc.git
-shell$ cd hwloc
-shell$ ./autogen.sh
-
-Note that GNU Autoconf >=2.63, Automake >=1.10 and Libtool >=2.2.6 are required
-when building from a Git clone.
-
-Installation by itself is the fairly common GNU-based process:
-
-shell$ ./configure --prefix=...
-shell$ make
-shell$ make install
-
-The hwloc command-line tool "lstopo" produces human-readable topology maps, as
-mentioned above. It can also export maps to the "fig" file format. Support for
-PDF, Postscript, and PNG exporting is provided if the "Cairo" development
-package (usually cairo-devel or libcairo2-dev) can be found in "lstopo" when
-hwloc is configured and build.
-
-The hwloc core may also benefit from the following development packages:
-
- * libnuma for memory binding and migration support on Linux (numactl-devel or
- libnuma-dev package).
- * libpciaccess for full I/O device discovery (libpciaccess-devel or
- libpciaccess-dev package). On Linux, PCI discovery may still be performed
- (without vendor/device names) even if libpciaccess cannot be used.
-
- * the AMD OpenCL implementation for OpenCL device discovery.
- * the NVIDIA CUDA Toolkit for CUDA device discovery.
- * the NVIDIA Tesla Development Kit for NVML device discovery.
- * the NV-CONTROL X extension library (NVCtrl) for NVIDIA display discovery.
- * libxml2 for full XML import/export support (otherwise, the internal
- minimalistic parser will only be able to import XML files that were
- exported by the same hwloc release). See Importing and exporting topologies
- from/to XML files for details. The relevant development package is usually
- libxml2-devel or libxml2-dev.
- * libudev on Linux for easier discovery of OS device information (otherwise
- hwloc will try to manually parse udev raw files). The relevant development
- package is usually libudev-devel or libudev-dev.
- * libtool's ltdl library for dynamic plugin loading. The relevant development
- package is usually libtool-ltdl-devel or libltdl-dev.
-
-PCI and XML support may be statically built inside the main hwloc library, or
-as separate dynamically-loaded plugins (see the Components and plugins
-section).
-
-Note that because of the possibility of GPL taint, the pciutils library libpci
-will not be used (remember that hwloc is BSD-licensed).
-
-Also note that if you install supplemental libraries in non-standard locations,
-hwloc's configure script may not be able to find them without some help. You
-may need to specify additional CPPFLAGS, LDFLAGS, or PKG_CONFIG_PATH values on
-the configure command line.
-
-For example, if libpciaccess was installed into /opt/pciaccess, hwloc's
-configure script may not find it be default. Try adding PKG_CONFIG_PATH to the
-./configure command line, like this:
-
-./configure PKG_CONFIG_PATH=/opt/pciaccess/lib/pkgconfig ...
-
-CLI Examples
-
-On a 4-package 2-core machine with hyper-threading, the lstopo tool may show
-the following graphical output:
-
-dudley.png
-
-Here's the equivalent output in textual form:
-
-Machine (16GB)
- Package L#0 + L3 L#0 (4096KB)
- L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
- PU L#0 (P#0)
- PU L#1 (P#8)
- L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
- PU L#2 (P#4)
- PU L#3 (P#12)
- Package L#1 + L3 L#1 (4096KB)
- L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
- PU L#4 (P#1)
- PU L#5 (P#9)
- L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
- PU L#6 (P#5)
- PU L#7 (P#13)
- Package L#2 + L3 L#2 (4096KB)
- L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
- PU L#8 (P#2)
- PU L#9 (P#10)
- L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
- PU L#10 (P#6)
- PU L#11 (P#14)
- Package L#3 + L3 L#3 (4096KB)
- L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
- PU L#12 (P#3)
- PU L#13 (P#11)
- L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
- PU L#14 (P#7)
- PU L#15 (P#15)
-
-Note that there is also an equivalent output in XML that is meant for exporting
-/importing topologies but it is hardly readable to human-beings (see Importing
-and exporting topologies from/to XML files for details).
-
-On a 4-package 2-core Opteron NUMA machine, the lstopo tool may show the
-following graphical output:
-
-hagrid.png
-
-Here's the equivalent output in textual form:
-
-Machine (32GB)
- NUMANode L#0 (P#0 8190MB) + Package L#0
- L2 L#0 (1024KB) + L1 L#0 (64KB) + Core L#0 + PU L#0 (P#0)
- L2 L#1 (1024KB) + L1 L#1 (64KB) + Core L#1 + PU L#1 (P#1)
- NUMANode L#1 (P#1 8192MB) + Package L#1
- L2 L#2 (1024KB) + L1 L#2 (64KB) + Core L#2 + PU L#2 (P#2)
- L2 L#3 (1024KB) + L1 L#3 (64KB) + Core L#3 + PU L#3 (P#3)
- NUMANode L#2 (P#2 8192MB) + Package L#2
- L2 L#4 (1024KB) + L1 L#4 (64KB) + Core L#4 + PU L#4 (P#4)
- L2 L#5 (1024KB) + L1 L#5 (64KB) + Core L#5 + PU L#5 (P#5)
- NUMANode L#3 (P#3 8192MB) + Package L#3
- L2 L#6 (1024KB) + L1 L#6 (64KB) + Core L#6 + PU L#6 (P#6)
- L2 L#7 (1024KB) + L1 L#7 (64KB) + Core L#7 + PU L#7 (P#7)
-
-On a 2-package quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each
-package):
-
-emmett.png
-
-Here's the same output in textual form:
-
-Machine (16GB)
- Package L#0
- L2 L#0 (4096KB)
- L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
- L1 L#1 (32KB) + Core L#1 + PU L#1 (P#4)
- L2 L#1 (4096KB)
- L1 L#2 (32KB) + Core L#2 + PU L#2 (P#2)
- L1 L#3 (32KB) + Core L#3 + PU L#3 (P#6)
- Package L#1
- L2 L#2 (4096KB)
- L1 L#4 (32KB) + Core L#4 + PU L#4 (P#1)
- L1 L#5 (32KB) + Core L#5 + PU L#5 (P#5)
- L2 L#3 (4096KB)
- L1 L#6 (32KB) + Core L#6 + PU L#6 (P#3)
- L1 L#7 (32KB) + Core L#7 + PU L#7 (P#7)
-
-Programming Interface
-
-The basic interface is available in hwloc.h. Some higher-level functions are
-available in hwloc/helper.h to reduce the need to manually manipulate objects
-and follow links between them. Documentation for all these is provided later in
-this document. Developers may also want to look at hwloc/inlines.h which
-contains the actual inline code of some hwloc.h routines, and at this document,
-which provides good higher-level topology traversal examples.
-
-To precisely define the vocabulary used by hwloc, a Terms and Definitions
-section is available and should probably be read first.
-
-Each hwloc object contains a cpuset describing the list of processing units
-that it contains. These bitmaps may be used for CPU binding and Memory binding.
-hwloc offers an extensive bitmap manipulation interface in hwloc/bitmap.h.
-
-Moreover, hwloc also comes with additional helpers for interoperability with
-several commonly used environments. See the Interoperability With Other
-Software section for details.
-
-The complete API documentation is available in a full set of HTML pages, man
-pages, and self-contained PDF files (formatted for both both US letter and A4
-formats) in the source tarball in doc/doxygen-doc/.
-
-NOTE: If you are building the documentation from a Git clone, you will need to
-have Doxygen and pdflatex installed -- the documentation will be built during
-the normal "make" process. The documentation is installed during "make install"
-to $prefix/share/doc/hwloc/ and your systems default man page tree (under
-$prefix, of course).
-
-Portability
-
-As shown in CLI Examples, hwloc can obtain information on a wide variety of
-hardware topologies. However, some platforms and/or operating system versions
-will only report a subset of this information. For example, on an PPC64-based
-system with 32 cores (each with 2 hardware threads) running a default
-2.6.18-based kernel from RHEL 5.4, hwloc is only able to glean information
-about NUMA nodes and processor units (PUs). No information about caches,
-packages, or cores is available.
-
-Similarly, Operating System have varying support for CPU and memory binding,
-e.g. while some Operating Systems provide interfaces for all kinds of CPU and
-memory bindings, some others provide only interfaces for a limited number of
-kinds of CPU and memory binding, and some do not provide any binding interface
-at all. Hwloc's binding functions would then simply return the ENOSYS error
-(Function not implemented), meaning that the underlying Operating System does
-not provide any interface for them. CPU binding and Memory binding provide more
-information on which hwloc binding functions should be preferred because
-interfaces for them are usually available on the supported Operating Systems.
-
-Here's the graphical output from lstopo on this platform when Simultaneous
-Multi-Threading (SMT) is enabled:
-
-ppc64-with-smt.png
-
-And here's the graphical output from lstopo on this platform when SMT is
-disabled:
-
-ppc64-without-smt.png
-
-Notice that hwloc only sees half the PUs when SMT is disabled. PU #15, for
-example, seems to change location from NUMA node #0 to #1. In reality, no PUs
-"moved" -- they were simply re-numbered when hwloc only saw half as many.
-Hence, PU #15 in the SMT-disabled picture probably corresponds to PU #30 in the
-SMT-enabled picture.
-
-This same "PUs have disappeared" effect can be seen on other platforms -- even
-platforms / OSs that provide much more information than the above PPC64 system.
-This is an unfortunate side-effect of how operating systems report information
-to hwloc.
-
-Note that upgrading the Linux kernel on the same PPC64 system mentioned above
-to 2.6.34, hwloc is able to discover all the topology information. The
-following picture shows the entire topology layout when SMT is enabled:
-
-ppc64-full-with-smt.png
-
-Developers using the hwloc API or XML output for portable applications should
-therefore be extremely careful to not make any assumptions about the structure
-of data that is returned. For example, per the above reported PPC topology, it
-is not safe to assume that PUs will always be descendants of cores.
-
-Additionally, future hardware may insert new topology elements that are not
-available in this version of hwloc. Long-lived applications that are meant to
-span multiple different hardware platforms should also be careful about making
-structure assumptions. For example, there may someday be an element "lower"
-than a PU, or perhaps a new element may exist between a core and a PU.
-
-API Example
-
-The following small C example (named ``hwloc-hello.c'') prints the topology of
-the machine and bring the process to the first logical processor of the second
-core of the machine. More examples are available in the doc/examples/ directory
-of the source tree.
-
-/* Example hwloc API program.
- *
- * See other examples under doc/examples/ in the source tree
- * for more details.
- *
- * Copyright (c) 2009-2015 Inria. All rights reserved.
- * Copyright (c) 2009-2011 Universit?eacute; Bordeaux
- * Copyright (c) 2009-2010 Cisco Systems, Inc. All rights reserved.
- * See COPYING in top-level directory.
- *
- * hwloc-hello.c
- */
-
-#include <hwloc.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-static void print_children(hwloc_topology_t topology, hwloc_obj_t obj,
- int depth)
-{
- char type[32], attr[1024];
- unsigned i;
-
- hwloc_obj_type_snprintf(type, sizeof(type), obj, 0);
- printf("%*s%s", 2*depth, "", type);
- if (obj->os_index != (unsigned) -1)
- printf("#%u", obj->os_index);
- hwloc_obj_attr_snprintf(attr, sizeof(attr), obj, " ", 0);
- if (*attr)
- printf("(%s)", attr);
- printf("\n");
- for (i = 0; i < obj->arity; i++) {
- print_children(topology, obj->children[i], depth + 1);
- }
-}
-
-int main(void)
-{
- int depth;
- unsigned i, n;
- unsigned long size;
- int levels;
- char string[128];
- int topodepth;
- hwloc_topology_t topology;
- hwloc_cpuset_t cpuset;
- hwloc_obj_t obj;
-
- /* Allocate and initialize topology object. */
- hwloc_topology_init(&topology);
-
- /* ... Optionally, put detection configuration here to ignore
- some objects types, define a synthetic topology, etc....
-
- The default is to detect all the objects of the machine that
- the caller is allowed to access. See Configure Topology
- Detection. */
-
- /* Perform the topology detection. */
- hwloc_topology_load(topology);
-
- /* Optionally, get some additional topology information
- in case we need the topology depth later. */
- topodepth = hwloc_topology_get_depth(topology);
-
- /*****************************************************************
- * First example:
- * Walk the topology with an array style, from level 0 (always
- * the system level) to the lowest level (always the proc level).
- *****************************************************************/
- for (depth = 0; depth < topodepth; depth++) {
- printf("*** Objects at level %d\n", depth);
- for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth);
- i++) {
- hwloc_obj_type_snprintf(string, sizeof(string),
- hwloc_get_obj_by_depth
-(topology, depth, i), 0);
- printf("Index %u: %s\n", i, string);
- }
- }
-
- /*****************************************************************
- * Second example:
- * Walk the topology with a tree style.
- *****************************************************************/
- printf("*** Printing overall tree\n");
- print_children(topology, hwloc_get_root_obj(topology), 0);
-
- /*****************************************************************
- * Third example:
- * Print the number of packages.
- *****************************************************************/
- depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PACKAGE);
- if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
- printf("*** The number of packages is unknown\n");
- } else {
- printf("*** %u package(s)\n",
- hwloc_get_nbobjs_by_depth(topology, depth));
- }
-
- /*****************************************************************
- * Fourth example:
- * Compute the amount of cache that the first logical processor
- * has above it.
- *****************************************************************/
- levels = 0;
- size = 0;
- for (obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
- obj;
- obj = obj->parent)
- if (obj->type == HWLOC_OBJ_CACHE) {
- levels++;
- size += obj->attr->cache.size;
- }
- printf("*** Logical processor 0 has %d caches totaling %luKB\n",
- levels, size / 1024);
-
- /*****************************************************************
- * Fifth example:
- * Bind to only one thread of the last core of the machine.
- *
- * First find out where cores are, or else smaller sets of CPUs if
- * the OS doesn't have the notion of a "core".
- *****************************************************************/
- depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
-
- /* Get last core. */
- obj = hwloc_get_obj_by_depth(topology, depth,
- hwloc_get_nbobjs_by_depth(topology, depth) - 1);
- if (obj) {
- /* Get a copy of its cpuset that we may modify. */
- cpuset = hwloc_bitmap_dup(obj->cpuset);
-
- /* Get only one logical processor (in case the core is
- SMT/hyper-threaded). */
- hwloc_bitmap_singlify(cpuset);
-
- /* And try to bind ourself there. */
- if (hwloc_set_cpubind(topology, cpuset, 0)) {
- char *str;
- int error = errno;
- hwloc_bitmap_asprintf(&str, obj->cpuset);
- printf("Couldn't bind to cpuset %s: %s\n", str, strerror(error));
- free(str);
- }
-
- /* Free our cpuset copy */
- hwloc_bitmap_free(cpuset);
- }
-
- /*****************************************************************
- * Sixth example:
- * Allocate some memory on the last NUMA node, bind some existing
- * memory to the last NUMA node.
- *****************************************************************/
- /* Get last node. */
- n = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NUMANODE);
- if (n) {
- void *m;
- size = 1024*1024;
-
- obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NUMANODE, n - 1);
- m = hwloc_alloc_membind_nodeset(topology, size, obj->nodeset,
- HWLOC_MEMBIND_BIND, 0);
- hwloc_free(topology, m, size);
-
- m = malloc(size);
- hwloc_set_area_membind_nodeset(topology, m, size, obj->nodeset,
- HWLOC_MEMBIND_BIND, 0);
- free(m);
- }
-
- /* Destroy topology object. */
- hwloc_topology_destroy(topology);
-
- return 0;
-}
-
-hwloc provides a pkg-config executable to obtain relevant compiler and linker
-flags. For example, it can be used thusly to compile applications that utilize
-the hwloc library (assuming GNU Make):
-
-CFLAGS += $(pkg-config --cflags hwloc)
-LDLIBS += $(pkg-config --libs hwloc)
-cc hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
-
-On a machine with 4GB of RAM and 2 processor packages -- each package of which
-has two processing cores -- the output from running hwloc-hello could be
-something like the following:
-
-shell$ ./hwloc-hello
-*** Objects at level 0
-Index 0: Machine(3938MB)
-*** Objects at level 1
-Index 0: Package#0
-Index 1: Package#1
-*** Objects at level 2
-Index 0: Core#0
-Index 1: Core#1
-Index 2: Core#3
-Index 3: Core#2
-*** Objects at level 3
-Index 0: PU#0
-Index 1: PU#1
-Index 2: PU#2
-Index 3: PU#3
-*** Printing overall tree
-Machine(3938MB)
- Package#0
- Core#0
- PU#0
- Core#1
- PU#1
- Package#1
- Core#3
- PU#2
- Core#2
- PU#3
-*** 2 package(s)
-shell$
-
-Questions and Bugs
-
-Questions should be sent to the devel mailing list (http://www.open-mpi.org/
-community/lists/hwloc.php). Bug reports should be reported in the tracker (
-https://git.open-mpi.org/trac/hwloc/).
-
-If hwloc discovers an incorrect topology for your machine, the very first thing
-you should check is to ensure that you have the most recent updates installed
-for your operating system. Indeed, most of hwloc topology discovery relies on
-hardware information retrieved through the operation system (e.g., via the /sys
-virtual filesystem of the Linux kernel). If upgrading your OS or Linux kernel
-does not solve your problem, you may also want to ensure that you are running
-the most recent version of the BIOS for your machine.
-
-If those things fail, contact us on the mailing list for additional help.
-Please attach the output of lstopo after having given the --enable-debug option
-to ./configure and rebuilt completely, to get debugging output. Also attach the
-/proc + /sys tarball generated by the installed script hwloc-gather-topology
-when submitting problems about Linux, or send the output of kstat cpu_info in
-the Solaris case, or the output of sysctl hw in the Darwin or BSD cases.
-
-History / Credits
-
-hwloc is the evolution and merger of the libtopology (http://
-runtime.bordeaux.inria.fr/libtopology/) project and the Portable Linux
-Processor Affinity (PLPA) (http://www.open-mpi.org/projects/plpa/) project.
-Because of functional and ideological overlap, these two code bases and ideas
-were merged and released under the name "hwloc" as an Open MPI sub-project.
-
-libtopology was initially developed by the inria Runtime Team-Project (http://
-runtime.bordeaux.inria.fr/) (headed by Raymond Namyst (http://
-dept-info.labri.fr/~namyst/). PLPA was initially developed by the Open MPI
-development team as a sub-project. Both are now deprecated in favor of hwloc,
-which is distributed as an Open MPI sub-project.
-
-Further Reading
-
-The documentation chapters include
-
- * Terms and Definitions
- * Command-Line Tools
- * Environment Variables
- * CPU and Memory Binding Overview
- * I/O Devices
- * Miscellaneous objects
- * Multi-node Topologies
- * Object attributes
- * Importing and exporting topologies from/to XML files
- * Synthetic topologies
- * Interoperability With Other Software
- * Thread Safety
- * Components and plugins
- * Embedding hwloc in Other Software
- * Frequently Asked Questions
-Make sure to have had a look at those too!
+See https://www.open-mpi.org/projects/hwloc/doc/ for more hwloc documentation.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION b/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
index 7233789..2722ad2 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
@@ -5,9 +5,11 @@
# major, minor, and release are generally combined in the form
# <major>.<minor>.<release>. If release is zero, then it is omitted.
+# Please update HWLOC_VERSION in contrib/windows/private_config.h too.
+
major=1
minor=11
-release=0
+release=4
# greek is used for alpha or beta release tags. If it is non-empty,
# it will be appended to the version number. It does not have to be
@@ -16,7 +18,7 @@ release=0
# requirement is that it must be entirely printable ASCII characters
# and have no white space.
-greek=rc3
+greek=rc2
# The date when this release was created
@@ -39,4 +41,6 @@ snapshot_version=${major}.${minor}.${release}${greek}-git
# 2. Version numbers are described in the Libtool current:revision:age
# format.
-libhwloc_so_version=11:6:6
+libhwloc_so_version=12:1:7
+
+# Please also update the <TargetName> lines in contrib/windows/libhwloc.vcxproj
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.guess b/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.guess
index 6c32c86..1659250 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.guess
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.sub b/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.sub
index 7ffe373..1acc966 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.sub
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4 b/src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4
deleted file mode 100644
index 6a7ee46..0000000
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4
+++ /dev/null
@@ -1,31 +0,0 @@
-dnl -*- Autoconf -*-
-dnl Copyright © 2009 CNRS
-dnl Copyright © 2009 inria. All rights reserved.
-dnl Copyright © 2009 Université Bordeaux
-dnl See COPYING in top-level directory.
-
-dnl HWLOC_CHECK_DECL
-dnl
-dnl Check declaration of given function by trying to call it with an insane
-dnl number of arguments (10). Success means the compiler couldn't really check.
-AC_DEFUN([HWLOC_CHECK_DECL], [
- AC_MSG_CHECKING([whether function $1 is declared])
- AC_REQUIRE([AC_PROG_CC])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],[$1(1,2,3,4,5,6,7,8,9,10);])],
- ac_res=no
- $3,
- ac_res=yes
- $2
- )
- AC_MSG_RESULT([$ac_res])
-])
-
-dnl HWLOC_CHECK_DECLS
-dnl
-dnl Same as HWLOCK_CHECK_DECL, but defines HAVE_DECL_foo to 1 or 0 depending on
-dnl the result.
-AC_DEFUN([HWLOC_CHECK_DECLS], [
- HWLOC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])
- AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_DECL_$1]), [$ac_have_decl],
- [Define to 1 if you have the declaration of `$1', and to 0 if you don't])
-])
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4 b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
index 2f44504..6807624 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
@@ -1,7 +1,7 @@
dnl -*- Autoconf -*-
dnl
-dnl Copyright © 2009-2015 Inria. All rights reserved.
-dnl Copyright © 2009-2012 Université Bordeaux
+dnl Copyright © 2009-2016 Inria. All rights reserved.
+dnl Copyright © 2009-2012, 2015-2016 Université Bordeaux
dnl Copyright © 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
dnl Corporation. All rights reserved.
@@ -9,7 +9,7 @@ dnl Copyright © 2004-2012 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright © 2004-2008 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
-dnl Copyright © 2006-2015 Cisco Systems, Inc. All rights reserved.
+dnl Copyright © 2006-2016 Cisco Systems, Inc. All rights reserved.
dnl Copyright © 2012 Blue Brain Project, BBP/EPFL. All rights reserved.
dnl Copyright © 2012 Oracle and/or its affiliates. All rights reserved.
dnl See COPYING in top-level directory.
@@ -367,7 +367,7 @@ EOF])
AC_CHECK_HEADERS([dirent.h])
AC_CHECK_HEADERS([strings.h])
AC_CHECK_HEADERS([ctype.h])
-
+
AC_CHECK_FUNCS([strncasecmp], [
_HWLOC_CHECK_DECL([strncasecmp], [
AC_DEFINE([HWLOC_HAVE_DECL_STRNCASECMP], [1], [Define to 1 if function `strncasecmp' is declared by system headers])
@@ -398,12 +398,14 @@ EOF])
GROUP_RELATIONSHIP,
SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX,
PSAPI_WORKING_SET_EX_BLOCK,
- PSAPI_WORKING_SET_EX_INFORMATION],
+ PSAPI_WORKING_SET_EX_INFORMATION,
+ PROCESSOR_NUMBER],
[],[],[[#include <windows.h>]])
CPPFLAGS="$old_CPPFLAGS"
AC_CHECK_LIB([gdi32], [main],
[HWLOC_LIBS="-lgdi32 $HWLOC_LIBS"
AC_DEFINE([HAVE_LIBGDI32], 1, [Define to 1 if we have -lgdi32])])
+ AC_CHECK_LIB([user32], [PostQuitMessage], [hwloc_have_user32="yes"])
AC_CHECK_HEADER([windows.h], [
AC_DEFINE([HWLOC_HAVE_WINDOWS_H], [1], [Define to 1 if you have the `windows.h' header.])
@@ -457,7 +459,16 @@ EOF])
#endif
])
- AC_CHECK_DECLS([strtoull], [], [], [AC_INCLUDES_DEFAULT])
+ AC_CHECK_DECLS([strtoull], [], [AC_CHECK_FUNCS([strtoull])], [AC_INCLUDES_DEFAULT])
+
+ # Needed for Windows in private/misc.h
+ AC_CHECK_TYPES([ssize_t])
+ AC_CHECK_DECLS([snprintf], [], [], [AC_INCLUDES_DEFAULT])
+ AC_CHECK_DECLS([strcasecmp], [], [], [AC_INCLUDES_DEFAULT])
+ # strdup and putenv are declared in windows headers but marked deprecated
+ AC_CHECK_DECLS([_strdup], [], [], [AC_INCLUDES_DEFAULT])
+ AC_CHECK_DECLS([_putenv], [], [], [AC_INCLUDES_DEFAULT])
+ # Could add mkdir and access for hwloc-gather-cpuid.c on Windows
# Do a full link test instead of just using AC_CHECK_FUNCS, which
# just checks to see if the symbol exists or not. For example,
@@ -487,7 +498,9 @@ EOF])
# program_invocation_name and __progname may be available but not exported in headers
AC_MSG_CHECKING([for program_invocation_name])
AC_TRY_LINK([
- #define _GNU_SOURCE
+ #ifndef _GNU_SOURCE
+ # define _GNU_SOURCE
+ #endif
#include <errno.h>
#include <stdio.h>
extern char *program_invocation_name;
@@ -535,7 +548,9 @@ EOF])
CFLAGS="$CFLAGS $HWLOC_STRICT_ARGS_CFLAGS"
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
- #define _GNU_SOURCE
+ #ifndef _GNU_SOURCE
+ # define _GNU_SOURCE
+ #endif
#include <sched.h>
static unsigned long mask;
]], [[ sched_setaffinity(0, (void*) &mask); ]])],
@@ -544,7 +559,9 @@ EOF])
[AC_MSG_RESULT([no])])
CFLAGS=$hwloc_save_CFLAGS
], , [[
-#define _GNU_SOURCE
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
#include <sched.h>
]])
@@ -573,15 +590,13 @@ EOF])
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
- AC_MSG_CHECKING([for working _syscall3])
+ AC_MSG_CHECKING([for working syscall])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
- #include <linux/unistd.h>
- #include <errno.h>
- #define __NR_hwloc_test 123
- _syscall3(int, hwloc_test, int, param1, int, param2, int, param3);
- ]], [[ hwloc_test(1, 2, 3); ]])],
- [AC_DEFINE([HWLOC_HAVE__SYSCALL3], [1], [Define to 1 if the _syscall3 macro works])
+ #include <unistd.h>
+ #include <sys/syscall.h>
+ ]], [[syscall(1, 2, 3);]])],
+ [AC_DEFINE([HWLOC_HAVE_SYSCALL], [1], [Define to 1 if function `syscall' is available])
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
@@ -656,6 +671,20 @@ EOF])
AC_CHECK_HEADERS([sys/utsname.h])
AC_CHECK_FUNCS([uname])
+ dnl Don't check for valgrind in embedded mode because this may conflict
+ dnl with the embedder projects also checking for it.
+ dnl We only use Valgrind to nicely disable the x86 backend with a warning,
+ dnl but we can live without it in embedded mode (it auto-disables itself
+ dnl because of invalid CPUID outputs).
+ dnl Non-embedded checks usually go to hwloc_internal.m4 but this one is
+ dnl is really for the core library.
+ AS_IF([test "$hwloc_mode" != "embedded"],
+ [AC_CHECK_HEADERS([valgrind/valgrind.h])
+ AC_CHECK_DECLS([RUNNING_ON_VALGRIND],,[:],[[#include <valgrind/valgrind.h>]])
+ ],[
+ AC_DEFINE([HAVE_DECL_RUNNING_ON_VALGRIND], [0], [Embedded mode; just assume we do not have Valgrind support])
+ ])
+
AC_CHECK_HEADERS([pthread_np.h])
AC_CHECK_DECLS([pthread_setaffinity_np],,[:],[[
#include <pthread.h>
@@ -708,6 +737,9 @@ EOF])
enable_migrate_pages=yes
AC_DEFINE([HWLOC_HAVE_MIGRATE_PAGES], [1], [Define to 1 if migrate_pages is available.])
])
+ AC_CHECK_LIB([numa], [move_pages], [
+ AC_DEFINE([HWLOC_HAVE_MOVE_PAGES], [1], [Define to 1 if move_pages is available.])
+ ])
LIBS="$tmp_save_LIBS"
fi
@@ -715,7 +747,10 @@ EOF])
# Linux libudev support
if test "x$enable_libudev" != xno; then
AC_CHECK_HEADERS([libudev.h], [
- AC_CHECK_LIB([udev], [udev_device_new_from_subsystem_sysname], [HWLOC_LIBS="$HWLOC_LIBS -ludev"])
+ AC_CHECK_LIB([udev], [udev_device_new_from_subsystem_sysname], [
+ HWLOC_LIBS="$HWLOC_LIBS -ludev"
+ AC_DEFINE([HWLOC_HAVE_LIBUDEV], [1], [Define to 1 if you have libudev.])
+ ])
])
fi
@@ -885,8 +920,11 @@ EOF])
# lstopo needs more
AC_CHECK_HEADERS([X11/Xutil.h],
[AC_CHECK_HEADERS([X11/keysym.h],
- [AC_DEFINE([HWLOC_HAVE_X11_KEYSYM], [1], [Define to 1 if X11 headers including Xutil.h and keysym.h are available.])])
- AC_SUBST([HWLOC_X11_LIBS], ["-lX11"])
+ [AC_DEFINE([HWLOC_HAVE_X11_KEYSYM], [1], [Define to 1 if X11 headers including Xutil.h and keysym.h are available.])
+ HWLOC_X11_CPPFLAGS="$X_CFLAGS"
+ AC_SUBST([HWLOC_X11_CPPFLAGS])
+ HWLOC_X11_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+ AC_SUBST([HWLOC_X11_LIBS])])
], [], [#include <X11/Xlib.h>])
])
])
@@ -1190,6 +1228,7 @@ AC_DEFUN([HWLOC_DO_AM_CONDITIONALS],[
AM_CONDITIONAL([HWLOC_HAVE_SET_MEMPOLICY], [test "x$enable_set_mempolicy" != "xno"])
AM_CONDITIONAL([HWLOC_HAVE_MBIND], [test "x$enable_mbind" != "xno"])
AM_CONDITIONAL([HWLOC_HAVE_BUNZIPP], [test "x$BUNZIPP" != "xfalse"])
+ AM_CONDITIONAL([HWLOC_HAVE_USER32], [test "x$hwloc_have_user32" = "xyes"])
AM_CONDITIONAL([HWLOC_BUILD_DOXYGEN],
[test "x$hwloc_generate_doxs" = "xyes"])
@@ -1211,6 +1250,7 @@ AC_DEFUN([HWLOC_DO_AM_CONDITIONALS],[
AM_CONDITIONAL([HWLOC_HAVE_WINDOWS], [test "x$hwloc_windows" = "xyes"])
AM_CONDITIONAL([HWLOC_HAVE_MINGW32], [test "x$target_os" = "xmingw32"])
+ AM_CONDITIONAL([HWLOC_HAVE_X86], [test "x$hwloc_x86_32" = "xyes" -o "x$hwloc_x86_64" = "xyes"])
AM_CONDITIONAL([HWLOC_HAVE_X86_32], [test "x$hwloc_x86_32" = "xyes"])
AM_CONDITIONAL([HWLOC_HAVE_X86_64], [test "x$hwloc_x86_64" = "xyes"])
AM_CONDITIONAL([HWLOC_HAVE_X86_CPUID], [test "x$hwloc_have_x86_cpuid" = "xyes"])
@@ -1258,19 +1298,22 @@ AC_DEFUN([_HWLOC_CHECK_DIFF_W], [
dnl HWLOC_CHECK_DECL
dnl
-dnl Check declaration of given function by trying to call it with an insane
-dnl number of arguments (10). Success means the compiler couldn't really check.
+dnl Check that the declaration of the given function has a complete prototype
+dnl with argument list by trying to call it with an insane dnl number of
+dnl arguments (10). Success means the compiler couldn't really check.
AC_DEFUN([_HWLOC_CHECK_DECL], [
- AC_MSG_CHECKING([whether function $1 is declared])
- AC_REQUIRE([AC_PROG_CC])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
- [AC_INCLUDES_DEFAULT([$4])
- void * $1;],
- )],
- [AC_MSG_RESULT([no])
- $3],
- [AC_MSG_RESULT([yes])
- $2]
+ AC_CHECK_DECL([$1], [
+ AC_MSG_CHECKING([whether function $1 has a complete prototype])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT([$4])]
+ [$1(1,2,3,4,5,6,7,8,9,10);],
+ )],
+ [AC_MSG_RESULT([no])
+ $3],
+ [AC_MSG_RESULT([yes])
+ $2]
+ )], [$3], $4
)
])
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4 b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4
index 7654071..96348e8 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4
@@ -322,9 +322,10 @@ AC_DEFUN([_HWLOC_CHECK_ATTRIBUTES], [
# Attribute may_alias: No suitable cross-check available, that works for non-supporting compilers
# Ignored by intel-9.1.045 -- turn off with -wd1292
# Ignored by PGI-6.2.5; ignore not detected due to missing cross-check
+ # The test case is chosen to match our only use in topology-xml-*.c, and reproduces an xlc-13.1.0 bug.
#
_HWLOC_CHECK_SPECIFIC_ATTRIBUTE([may_alias],
- [int * p_value __attribute__ ((__may_alias__));],
+ [struct { int i; } __attribute__ ((__may_alias__)) * p_value;],
[],
[])
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4 b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
index 9be621b..2decf6c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
@@ -1,6 +1,6 @@
dnl -*- Autoconf -*-
dnl
-dnl Copyright © 2009-2014 Inria. All rights reserved.
+dnl Copyright © 2009-2016 Inria. All rights reserved.
dnl Copyright © 2009, 2011 Université Bordeaux
dnl Copyright © 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
@@ -9,7 +9,6 @@ dnl Copyright © 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright © 2004-2008 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
-dnl Copyright © 2010-2015 Inria. All rights reserved.
dnl Copyright © 2006-2014 Cisco Systems, Inc. All rights reserved.
dnl
dnl See COPYING in top-level directory.
@@ -247,6 +246,14 @@ EOF
AC_REQUIRE([AC_PROG_SED])
+ # runstatedir only supported in autoconf >= 2.70 and in some backports
+ if test "x${runstatedir}" != "x"; then
+ HWLOC_runstatedir=${runstatedir}
+ else
+ HWLOC_runstatedir='${localstatedir}/run'
+ fi
+ AC_SUBST([HWLOC_runstatedir])
+
# Cairo support
hwloc_cairo_happy=no
if test "x$enable_cairo" != "xno"; then
@@ -332,8 +339,10 @@ EOF
AC_CHECK_LIB([pthread], [pthread_self], [hwloc_have_pthread=yes])
# linux-libnuma.h testing requires libnuma with numa_bitmask_alloc()
- AC_CHECK_DECL([numa_bitmask_alloc], [hwloc_have_linux_libnuma=yes], [],
+ AC_CHECK_LIB([numa], [numa_available], [
+ AC_CHECK_DECL([numa_bitmask_alloc], [hwloc_have_linux_libnuma=yes], [],
[#include <numa.h>])
+ ])
AC_CHECK_HEADERS([infiniband/verbs.h], [
AC_CHECK_LIB([ibverbs], [ibv_open_device],
@@ -394,7 +403,8 @@ int foo(void) {
hwloc_config_prefix[utils/hwloc/test-hwloc-distrib.sh]
hwloc_config_prefix[utils/hwloc/test-hwloc-info.sh]
hwloc_config_prefix[utils/hwloc/test-fake-plugin.sh]
- hwloc_config_prefix[utils/lstopo/test-hwloc-ls.sh])
+ hwloc_config_prefix[utils/lstopo/test-hwloc-ls.sh]
+ hwloc_config_prefix[contrib/systemd/Makefile])
AC_CONFIG_COMMANDS([chmoding-scripts], [chmod +x ]hwloc_config_prefix[tests/linux/test-topology.sh ]hwloc_config_prefix[tests/xml/test-topology.sh ]hwloc_config_prefix[tests/linux/gather/test-gather-topology.sh ]hwloc_config_prefix[tests/wrapper.sh ]hwloc_config_prefix[utils/hwloc/hwloc-assembler-remote ]hwloc_config_prefix[utils/hwloc/hwloc-compress-dir ]hwloc_config_prefix[utils/hwloc/hwloc-gather-topology ]hwloc_config_prefix[utils/hwloc/test-hwloc-annotate.sh ]hwloc_config_prefix [...]
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/install-sh b/src/pm/hydra/tools/topo/hwloc/hwloc/config/install-sh
index 0b0fdcb..59990a1 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/install-sh
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/libtool.m4 b/src/pm/hydra/tools/topo/hwloc/hwloc/config/libtool.m4
index a3bc337..10ab284 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/libtool.m4
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/libtool.m4
@@ -2887,6 +2887,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3546,7 +3558,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
@@ -4424,7 +4436,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4936,6 +4948,9 @@ m4_if([$1], [CXX], [
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -4998,6 +5013,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
esac
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5252,7 +5270,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -5773,6 +5791,7 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5794,7 +5813,7 @@ _LT_EOF
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/ltmain.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/config/ltmain.sh
index 0f0a2da..147d758 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/ltmain.sh
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
package_revision=2.4.6
@@ -2073,7 +2073,7 @@ include the following information:
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
exit 0
}
@@ -7272,10 +7272,13 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
continue
fi # $pass = conv
@@ -8823,6 +8829,9 @@ func_mode_link ()
revision=$number_minor
lt_irix_increment=no
;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
esac
;;
no)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/configure b/src/pm/hydra/tools/topo/hwloc/hwloc/configure
index 921852e..a8c7b3b 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/configure
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for hwloc 1.11.0rc3-git.
+# Generated by GNU Autoconf 2.69 for hwloc 1.11.4rc2-git.
#
# Report bugs to <http://www.open-mpi.org/projects/hwloc/>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='hwloc'
PACKAGE_TARNAME='hwloc'
-PACKAGE_VERSION='1.11.0rc3-git'
-PACKAGE_STRING='hwloc 1.11.0rc3-git'
+PACKAGE_VERSION='1.11.4rc2-git'
+PACKAGE_STRING='hwloc 1.11.4rc2-git'
PACKAGE_BUGREPORT='http://www.open-mpi.org/projects/hwloc/'
PACKAGE_URL=''
@@ -678,6 +678,8 @@ HWLOC_HAVE_X86_64_FALSE
HWLOC_HAVE_X86_64_TRUE
HWLOC_HAVE_X86_32_FALSE
HWLOC_HAVE_X86_32_TRUE
+HWLOC_HAVE_X86_FALSE
+HWLOC_HAVE_X86_TRUE
HWLOC_HAVE_MINGW32_FALSE
HWLOC_HAVE_MINGW32_TRUE
HWLOC_HAVE_WINDOWS_FALSE
@@ -708,6 +710,8 @@ HWLOC_BUILD_README_FALSE
HWLOC_BUILD_README_TRUE
HWLOC_BUILD_DOXYGEN_FALSE
HWLOC_BUILD_DOXYGEN_TRUE
+HWLOC_HAVE_USER32_FALSE
+HWLOC_HAVE_USER32_TRUE
HWLOC_HAVE_BUNZIPP_FALSE
HWLOC_HAVE_BUNZIPP_TRUE
HWLOC_HAVE_MBIND_FALSE
@@ -756,6 +760,7 @@ HWLOC_TERMCAP_LIBS
HWLOC_XML_LOCALIZED
HWLOC_CAIRO_LIBS
HWLOC_CAIRO_CFLAGS
+HWLOC_runstatedir
HWLOC_W3_GENERATOR
LYNX
W3M
@@ -783,6 +788,7 @@ HWLOC_LIBXML2_LIBS
HWLOC_LIBXML2_CFLAGS
HWLOC_GL_LIBS
HWLOC_X11_LIBS
+HWLOC_X11_CPPFLAGS
X_EXTRA_LIBS
X_LIBS
X_PRE_LIBS
@@ -893,6 +899,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -1017,6 +1024,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1269,6 +1277,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1406,7 +1423,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1519,7 +1536,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures hwloc 1.11.0rc3-git to adapt to many kinds of systems.
+\`configure' configures hwloc 1.11.4rc2-git to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1559,6 +1576,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1594,7 +1612,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of hwloc 1.11.0rc3-git:";;
+ short | recursive ) echo "Configuration of hwloc 1.11.4rc2-git:";;
esac
cat <<\_ACEOF
@@ -1788,7 +1806,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-hwloc configure 1.11.0rc3-git
+hwloc configure 1.11.4rc2-git
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2375,6 +2393,52 @@ $as_echo "$ac_res" >&6; }
} # ac_fn_c_check_func
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
# -------------------------------------------
# Tests whether TYPE exists after having included INCLUDES, setting cache
@@ -2429,52 +2493,6 @@ $as_echo "$ac_res" >&6; }
} # ac_fn_c_check_type
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- as_decl_name=`echo $2|sed 's/ *(.*//'`
- as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
- (void) $as_decl_use;
-#else
- (void) $as_decl_name;
-#endif
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-
# ac_fn_cxx_try_cpp LINENO
# ------------------------
# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
@@ -2561,7 +2579,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by hwloc $as_me 1.11.0rc3-git, which was
+It was created by hwloc $as_me 1.11.4rc2-git, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3550,7 +3568,7 @@ fi
# Define the identity of the package.
PACKAGE='hwloc'
- VERSION='1.11.0rc3-git'
+ VERSION='1.11.4rc2-git'
cat >>confdefs.h <<_ACEOF
@@ -9205,6 +9223,7 @@ $as_echo "no" >&6; }
# Attribute may_alias: No suitable cross-check available, that works for non-supporting compilers
# Ignored by intel-9.1.045 -- turn off with -wd1292
# Ignored by PGI-6.2.5; ignore not detected due to missing cross-check
+ # The test case is chosen to match our only use in topology-xml-*.c, and reproduces an xlc-13.1.0 bug.
#
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(may_alias)" >&5
@@ -9218,7 +9237,7 @@ else
#
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int * p_value __attribute__ ((__may_alias__));
+struct { int i; } __attribute__ ((__may_alias__)) * p_value;
int
main ()
{
@@ -10877,13 +10896,16 @@ if test "x$ac_cv_func_strncasecmp" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function strncasecmp is declared" >&5
-$as_echo_n "checking whether function strncasecmp is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strncasecmp" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function strncasecmp has a complete prototype" >&5
+$as_echo_n "checking whether function strncasecmp has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * strncasecmp;
+ strncasecmp(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -10907,6 +10929,8 @@ $as_echo "#define HWLOC_HAVE_DECL_STRNCASECMP 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
fi
@@ -11111,6 +11135,16 @@ _ACEOF
fi
+ac_fn_c_check_type "$LINENO" "PROCESSOR_NUMBER" "ac_cv_type_PROCESSOR_NUMBER" "#include <windows.h>
+"
+if test "x$ac_cv_type_PROCESSOR_NUMBER" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PROCESSOR_NUMBER 1
+_ACEOF
+
+
+fi
CPPFLAGS="$old_CPPFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgdi32" >&5
@@ -11150,6 +11184,46 @@ $as_echo "#define HAVE_LIBGDI32 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PostQuitMessage in -luser32" >&5
+$as_echo_n "checking for PostQuitMessage in -luser32... " >&6; }
+if ${ac_cv_lib_user32_PostQuitMessage+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-luser32 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char PostQuitMessage ();
+int
+main ()
+{
+return PostQuitMessage ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_user32_PostQuitMessage=yes
+else
+ ac_cv_lib_user32_PostQuitMessage=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_user32_PostQuitMessage" >&5
+$as_echo "$ac_cv_lib_user32_PostQuitMessage" >&6; }
+if test "x$ac_cv_lib_user32_PostQuitMessage" = xyes; then :
+ hwloc_have_user32="yes"
+fi
+
ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
if test "x$ac_cv_header_windows_h" = xyes; then :
@@ -11606,7 +11680,84 @@ fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRTOULL $ac_have_decl
_ACEOF
+if test $ac_have_decl = 1; then :
+else
+ for ac_func in strtoull
+do :
+ ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull"
+if test "x$ac_cv_func_strtoull" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRTOULL 1
+_ACEOF
+
+fi
+done
+
+fi
+
+
+ # Needed for Windows in private/misc.h
+ ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
+if test "x$ac_cv_type_ssize_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SSIZE_T 1
+_ACEOF
+
+
+fi
+
+ ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl_snprintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF $ac_have_decl
+_ACEOF
+
+ ac_fn_c_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl_strcasecmp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRCASECMP $ac_have_decl
+_ACEOF
+
+ # strdup and putenv are declared in windows headers but marked deprecated
+ ac_fn_c_check_decl "$LINENO" "_strdup" "ac_cv_have_decl__strdup" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl__strdup" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__STRDUP $ac_have_decl
+_ACEOF
+
+ ac_fn_c_check_decl "$LINENO" "_putenv" "ac_cv_have_decl__putenv" "$ac_includes_default
+"
+if test "x$ac_cv_have_decl__putenv" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__PUTENV $ac_have_decl
+_ACEOF
+
+ # Could add mkdir and access for hwloc-gather-cpuid.c on Windows
# Do a full link test instead of just using AC_CHECK_FUNCS, which
# just checks to see if the symbol exists or not. For example,
@@ -11702,7 +11853,9 @@ $as_echo_n "checking for program_invocation_name... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- #define _GNU_SOURCE
+ #ifndef _GNU_SOURCE
+ # define _GNU_SOURCE
+ #endif
#include <errno.h>
#include <stdio.h>
extern char *program_invocation_name;
@@ -11798,17 +11951,29 @@ _ACEOF
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function sched_setaffinity is declared" >&5
-$as_echo_n "checking whether function sched_setaffinity is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "sched_setaffinity" "ac_cv_have_decl_sched_setaffinity" "
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+#include <sched.h>
+
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+"
+if test "x$ac_cv_have_decl_sched_setaffinity" = xyes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function sched_setaffinity has a complete prototype" >&5
+$as_echo_n "checking whether function sched_setaffinity has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#define _GNU_SOURCE
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
#include <sched.h>
- void * sched_setaffinity;
+ sched_setaffinity(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -11845,7 +12010,9 @@ $as_echo_n "checking for old prototype of sched_setaffinity... " >&6; }
/* end confdefs.h. */
- #define _GNU_SOURCE
+ #ifndef _GNU_SOURCE
+ # define _GNU_SOURCE
+ #endif
#include <sched.h>
static unsigned long mask;
@@ -11873,6 +12040,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working CPU_SET" >&5
@@ -11940,28 +12109,26 @@ fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working _syscall3" >&5
-$as_echo_n "checking for working _syscall3... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working syscall" >&5
+$as_echo_n "checking for working syscall... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- #include <linux/unistd.h>
- #include <errno.h>
- #define __NR_hwloc_test 123
- _syscall3(int, hwloc_test, int, param1, int, param2, int, param3);
+ #include <unistd.h>
+ #include <sys/syscall.h>
int
main ()
{
- hwloc_test(1, 2, 3);
+syscall(1, 2, 3);
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
-$as_echo "#define HWLOC_HAVE__SYSCALL3 1" >>confdefs.h
+$as_echo "#define HWLOC_HAVE_SYSCALL 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -12199,13 +12366,16 @@ if test "x$ac_cv_func_ffs" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffs is declared" >&5
-$as_echo_n "checking whether function ffs is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ffs" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffs has a complete prototype" >&5
+$as_echo_n "checking whether function ffs has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * ffs;
+ ffs(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -12229,6 +12399,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FFS 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FFS 1" >>confdefs.h
@@ -12251,13 +12423,16 @@ if test "x$ac_cv_func_ffsl" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffsl is declared" >&5
-$as_echo_n "checking whether function ffsl is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "ffsl" "ac_cv_have_decl_ffsl" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ffsl" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffsl has a complete prototype" >&5
+$as_echo_n "checking whether function ffsl has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * ffsl;
+ ffsl(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -12281,6 +12456,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FFSL 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FFSL 1" >>confdefs.h
@@ -12299,13 +12476,16 @@ if test "x$ac_cv_func_fls" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function fls is declared" >&5
-$as_echo_n "checking whether function fls is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "fls" "ac_cv_have_decl_fls" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fls" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function fls has a complete prototype" >&5
+$as_echo_n "checking whether function fls has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * fls;
+ fls(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -12329,6 +12509,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FLS 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FLS 1" >>confdefs.h
@@ -12346,13 +12528,16 @@ if test "x$ac_cv_func_flsl" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function flsl is declared" >&5
-$as_echo_n "checking whether function flsl is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "flsl" "ac_cv_have_decl_flsl" "$ac_includes_default"
+if test "x$ac_cv_have_decl_flsl" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function flsl has a complete prototype" >&5
+$as_echo_n "checking whether function flsl has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * flsl;
+ flsl(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -12376,6 +12561,8 @@ $as_echo "#define HWLOC_HAVE_DECL_FLSL 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_FLSL 1" >>confdefs.h
@@ -12394,13 +12581,16 @@ if test "x$ac_cv_func_clz" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clz is declared" >&5
-$as_echo_n "checking whether function clz is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "clz" "ac_cv_have_decl_clz" "$ac_includes_default"
+if test "x$ac_cv_have_decl_clz" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clz has a complete prototype" >&5
+$as_echo_n "checking whether function clz has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * clz;
+ clz(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -12424,6 +12614,8 @@ $as_echo "#define HWLOC_HAVE_DECL_CLZ 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_CLZ 1" >>confdefs.h
@@ -12441,13 +12633,16 @@ if test "x$ac_cv_func_clzl" = xyes; then :
_ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clzl is declared" >&5
-$as_echo_n "checking whether function clzl is declared... " >&6; }
+ ac_fn_c_check_decl "$LINENO" "clzl" "ac_cv_have_decl_clzl" "$ac_includes_default"
+if test "x$ac_cv_have_decl_clzl" = xyes; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clzl has a complete prototype" >&5
+$as_echo_n "checking whether function clzl has a complete prototype... " >&6; }
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
- void * clzl;
+ clzl(1,2,3,4,5,6,7,8,9,10);
int
main ()
{
@@ -12471,6 +12666,8 @@ $as_echo "#define HWLOC_HAVE_DECL_CLZL 1" >>confdefs.h
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
$as_echo "#define HWLOC_HAVE_CLZL 1" >>confdefs.h
@@ -12541,6 +12738,45 @@ fi
done
+ if test "$hwloc_mode" != "embedded"; then :
+ for ac_header in valgrind/valgrind.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default"
+if test "x$ac_cv_header_valgrind_valgrind_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_VALGRIND_VALGRIND_H 1
+_ACEOF
+
+fi
+
+done
+
+ ac_fn_c_check_decl "$LINENO" "RUNNING_ON_VALGRIND" "ac_cv_have_decl_RUNNING_ON_VALGRIND" "#include <valgrind/valgrind.h>
+"
+if test "x$ac_cv_have_decl_RUNNING_ON_VALGRIND" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RUNNING_ON_VALGRIND $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+
+else
+ :
+fi
+
+
+else
+
+
+$as_echo "#define HAVE_DECL_RUNNING_ON_VALGRIND 0" >>confdefs.h
+
+
+fi
+
for ac_header in pthread_np.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "pthread_np.h" "ac_cv_header_pthread_np_h" "$ac_includes_default"
@@ -12908,6 +13144,50 @@ $as_echo "#define HWLOC_HAVE_MIGRATE_PAGES 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for move_pages in -lnuma" >&5
+$as_echo_n "checking for move_pages in -lnuma... " >&6; }
+if ${ac_cv_lib_numa_move_pages+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnuma $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char move_pages ();
+int
+main ()
+{
+return move_pages ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_numa_move_pages=yes
+else
+ ac_cv_lib_numa_move_pages=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_move_pages" >&5
+$as_echo "$ac_cv_lib_numa_move_pages" >&6; }
+if test "x$ac_cv_lib_numa_move_pages" = xyes; then :
+
+
+$as_echo "#define HWLOC_HAVE_MOVE_PAGES 1" >>confdefs.h
+
+
+fi
+
LIBS="$tmp_save_LIBS"
fi
@@ -12959,7 +13239,12 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&5
$as_echo "$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&6; }
if test "x$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" = xyes; then :
- HWLOC_LIBS="$HWLOC_LIBS -ludev"
+
+ HWLOC_LIBS="$HWLOC_LIBS -ludev"
+
+$as_echo "#define HWLOC_HAVE_LIBUDEV 1" >>confdefs.h
+
+
fi
@@ -14145,12 +14430,14 @@ _ACEOF
$as_echo "#define HWLOC_HAVE_X11_KEYSYM 1" >>confdefs.h
+ HWLOC_X11_CPPFLAGS="$X_CFLAGS"
+
+ HWLOC_X11_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+
fi
done
- HWLOC_X11_LIBS="-lX11"
-
fi
@@ -16054,6 +16341,14 @@ EOF
+ # runstatedir only supported in autoconf >= 2.70 and in some backports
+ if test "x${runstatedir}" != "x"; then
+ HWLOC_runstatedir=${runstatedir}
+ else
+ HWLOC_runstatedir='${localstatedir}/run'
+ fi
+
+
# Cairo support
hwloc_cairo_happy=no
if test "x$enable_cairo" != "xno"; then
@@ -16418,13 +16713,54 @@ fi
# linux-libnuma.h testing requires libnuma with numa_bitmask_alloc()
- ac_fn_c_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5
+$as_echo_n "checking for numa_available in -lnuma... " >&6; }
+if ${ac_cv_lib_numa_numa_available+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnuma $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char numa_available ();
+int
+main ()
+{
+return numa_available ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_numa_numa_available=yes
+else
+ ac_cv_lib_numa_numa_available=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5
+$as_echo "$ac_cv_lib_numa_numa_available" >&6; }
+if test "x$ac_cv_lib_numa_numa_available" = xyes; then :
+
+ ac_fn_c_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
"
if test "x$ac_cv_have_decl_numa_bitmask_alloc" = xyes; then :
hwloc_have_linux_libnuma=yes
fi
+fi
+
+
for ac_header in infiniband/verbs.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default"
@@ -16702,7 +17038,7 @@ $as_echo "$HWLOC_DIFF_U" >&6; }
# Only generate these files if we're making the tests
- ac_config_files="$ac_config_files tests/Makefile tests/linux/Makefile tests/linux/gather/Makefile tests/xml/Makefile tests/ports/Makefile tests/rename/Makefile tests/linux/gather/test-gather-topology.sh tests/linux/test-topology.sh tests/xml/test-topology.sh tests/wrapper.sh utils/hwloc/hwloc-assembler-remote utils/hwloc/hwloc-compress-dir utils/hwloc/hwloc-gather-topology utils/hwloc/test-hwloc-annotate.sh utils/hwloc/test-hwloc-assembler.sh utils/hwloc/test-hwloc-calc.sh utils/hwlo [...]
+ ac_config_files="$ac_config_files tests/Makefile tests/linux/Makefile tests/linux/gather/Makefile tests/xml/Makefile tests/ports/Makefile tests/rename/Makefile tests/linux/gather/test-gather-topology.sh tests/linux/test-topology.sh tests/xml/test-topology.sh tests/wrapper.sh utils/hwloc/hwloc-assembler-remote utils/hwloc/hwloc-compress-dir utils/hwloc/hwloc-gather-topology utils/hwloc/test-hwloc-annotate.sh utils/hwloc/test-hwloc-assembler.sh utils/hwloc/test-hwloc-calc.sh utils/hwlo [...]
ac_config_commands="$ac_config_commands chmoding-scripts"
@@ -16891,6 +17227,14 @@ else
HWLOC_HAVE_BUNZIPP_FALSE=
fi
+ if test "x$hwloc_have_user32" = "xyes"; then
+ HWLOC_HAVE_USER32_TRUE=
+ HWLOC_HAVE_USER32_FALSE='#'
+else
+ HWLOC_HAVE_USER32_TRUE='#'
+ HWLOC_HAVE_USER32_FALSE=
+fi
+
if test "x$hwloc_generate_doxs" = "xyes"; then
HWLOC_BUILD_DOXYGEN_TRUE=
@@ -17014,6 +17358,14 @@ else
fi
+ if test "x$hwloc_x86_32" = "xyes" -o "x$hwloc_x86_64" = "xyes"; then
+ HWLOC_HAVE_X86_TRUE=
+ HWLOC_HAVE_X86_FALSE='#'
+else
+ HWLOC_HAVE_X86_TRUE='#'
+ HWLOC_HAVE_X86_FALSE=
+fi
+
if test "x$hwloc_x86_32" = "xyes"; then
HWLOC_HAVE_X86_32_TRUE=
HWLOC_HAVE_X86_32_FALSE='#'
@@ -18313,7 +18665,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-netbsd*)
+netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
else
@@ -21982,6 +22334,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd* | bitrig*)
with_gnu_ld=no
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
esac
ld_shlibs=yes
@@ -22236,7 +22591,7 @@ _LT_EOF
fi
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
@@ -22906,6 +23261,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
if test yes = "$lt_cv_irix_exported_symbol"; then
archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi
+ link_all_deplibs=no
else
archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -22927,7 +23283,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else
@@ -24042,6 +24398,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -26936,7 +27304,7 @@ lt_prog_compiler_static_CXX=
;;
esac
;;
- netbsd*)
+ netbsd* | netbsdelf*-gnu)
;;
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -27311,6 +27679,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
;;
esac
;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs_CXX=no
+ ;;
*)
export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;;
@@ -28004,6 +28375,18 @@ fi
dynamic_linker='GNU/Linux ld.so'
;;
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -28577,6 +28960,10 @@ if test -z "${HWLOC_HAVE_BUNZIPP_TRUE}" && test -z "${HWLOC_HAVE_BUNZIPP_FALSE}"
as_fn_error $? "conditional \"HWLOC_HAVE_BUNZIPP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HWLOC_HAVE_USER32_TRUE}" && test -z "${HWLOC_HAVE_USER32_FALSE}"; then
+ as_fn_error $? "conditional \"HWLOC_HAVE_USER32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HWLOC_BUILD_DOXYGEN_TRUE}" && test -z "${HWLOC_BUILD_DOXYGEN_FALSE}"; then
as_fn_error $? "conditional \"HWLOC_BUILD_DOXYGEN\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -28637,6 +29024,10 @@ if test -z "${HWLOC_HAVE_MINGW32_TRUE}" && test -z "${HWLOC_HAVE_MINGW32_FALSE}"
as_fn_error $? "conditional \"HWLOC_HAVE_MINGW32\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HWLOC_HAVE_X86_TRUE}" && test -z "${HWLOC_HAVE_X86_FALSE}"; then
+ as_fn_error $? "conditional \"HWLOC_HAVE_X86\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HWLOC_HAVE_X86_32_TRUE}" && test -z "${HWLOC_HAVE_X86_32_FALSE}"; then
as_fn_error $? "conditional \"HWLOC_HAVE_X86_32\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -29078,7 +29469,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by hwloc $as_me 1.11.0rc3-git, which was
+This file was extended by hwloc $as_me 1.11.4rc2-git, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -29148,7 +29539,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-hwloc config.status 1.11.0rc3-git
+hwloc config.status 1.11.4rc2-git
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -29696,6 +30087,7 @@ do
"utils/hwloc/test-hwloc-info.sh") CONFIG_FILES="$CONFIG_FILES utils/hwloc/test-hwloc-info.sh" ;;
"utils/hwloc/test-fake-plugin.sh") CONFIG_FILES="$CONFIG_FILES utils/hwloc/test-fake-plugin.sh" ;;
"utils/lstopo/test-hwloc-ls.sh") CONFIG_FILES="$CONFIG_FILES utils/lstopo/test-hwloc-ls.sh" ;;
+ "contrib/systemd/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/systemd/Makefile" ;;
"chmoding-scripts") CONFIG_COMMANDS="$CONFIG_COMMANDS chmoding-scripts" ;;
"tests/ports/topology-solaris.c") CONFIG_LINKS="$CONFIG_LINKS tests/ports/topology-solaris.c:src/topology-solaris.c" ;;
"tests/ports/topology-solaris-chiptype.c") CONFIG_LINKS="$CONFIG_LINKS tests/ports/topology-solaris-chiptype.c:src/topology-solaris-chiptype.c" ;;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/hwloc-windows-build.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/hwloc-windows-build.sh
deleted file mode 100755
index a07a100..0000000
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/hwloc-windows-build.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 20012-2014 Inria. All rights reserved.
-# See COPYING in top-level directory.
-#
-
-set -e
-set -x
-
-oldPATH=$PATH
-
-tarball=$(ls -tr hwloc-*.tar.gz | tail -1)
-basename=$(basename $tarball .tar.gz)
-version=$(echo $basename | cut -d- -f2)
-
-test -d $basename && chmod -R u+rwX $basename && rm -rf $basename
-tar xfz $tarball
-
-mkdir ${basename}/build32
-cd ${basename}/build32
-winball=hwloc-win32-build-${version}
-prefix=${PWD}/../${winball}
-export PATH=/c/Builds:/c/Builds/mingw32/bin/:/c/Builds/mingw64/bin/:/c/Builds/mingw32/i686-w64-mingw32/lib:"/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin":"/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE":$oldPATH
-../configure --prefix=$prefix --enable-static --host=i686-w64-mingw32 CC_FOR_BUILD=x86_64-w64-mingw32-gcc
-make
-make install
-#make install-winball || true # not needed anymore in v1.7+
-make check
-utils/lstopo/lstopo-no-graphics -v
-cd ..
-zip -r ../${winball}.zip ${winball}
-test -f ${winball}/lib/libhwloc.lib || false
-cd ..
-
-
-mkdir ${basename}/build64
-cd ${basename}/build64
-winball=hwloc-win64-build-${version}
-prefix=${PWD}/../${winball}
-export PATH=/c/Builds:/c/Builds/mingw64/bin/:/c/Builds/mingw32/i686-w64-mingw32/lib/:"/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin":"/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE":$oldPATH
-../configure --prefix=$prefix --enable-static --host=x86_64-w64-mingw32
-make
-make install
-#make install-winball || true # not needed anymore in v1.7+
-make check
-utils/lstopo/lstopo-no-graphics -v
-cd ..
-zip -r ../${winball}.zip ${winball}
-test -f ${winball}/lib/libhwloc.lib || false
-cd ..
-
-PATH=$oldPATH
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-0-tarball.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-0-tarball.sh
new file mode 100755
index 0000000..ce51b1c
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-0-tarball.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Copyright © 2012-2015 Inria. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+set -e
+set -x
+
+# environment variables
+test -f $HOME/.ciprofile && . $HOME/.ciprofile
+branch=$( echo $GIT_BRANCH | sed -r -e 's@^.*/([^/]+)$@\1@' )
+if test -d $HOME/local/hwloc-$branch ; then
+ export PATH=$HOME/local/hwloc-${branch}/bin:$PATH
+ echo using specific $HOME/local/hwloc-$branch
+else
+ export PATH=$HOME/local/hwloc-master/bin:$PATH
+ echo using generic $HOME/local/hwloc-master
+fi
+
+# remove everything but the last 10 builds
+ls -td hwloc-* | tail -n +11 | xargs chmod u+w -R || true
+ls -td hwloc-* | tail -n +11 | xargs rm -rf || true
+
+# display autotools versions
+automake --version | head -1
+libtool --version | head -1
+autoconf --version | head -1
+
+# append a better version string
+VERSION=$branch-`date +%Y%m%d.%H%M`.git`git show --format=format:%h -s`
+
+# let's go
+./autogen.sh
+./configure
+make
+make distcheck VERSION=$VERSION
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-1-check.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-1-check.sh
new file mode 100755
index 0000000..b8fc443
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-1-check.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# Copyright © 2012-2015 Inria. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+set -e
+set -x
+
+# environment variables
+test -f $HOME/.ciprofile && . $HOME/.ciprofile
+
+# remove everything but the last 10 builds
+ls | grep -v ^hwloc- | grep -v ^job- | xargs rm -rf || true
+ls -td hwloc-* | tail -n +11 | xargs chmod u+w -R || true
+ls -td hwloc-* | tail -n +11 | xargs rm -rf || true
+
+# find the tarball, extract it
+tarball=$(ls -tr hwloc-*.tar.gz | grep -v build.tar.gz | tail -1)
+basename=$(basename $tarball .tar.gz)
+test -d $basename && chmod -R u+rwX $basename && rm -rf $basename
+tar xfz $tarball
+rm $tarball
+cd $basename
+
+# ignore clock problems
+touch configure
+
+# build without plugins
+mkdir build
+cd build
+../configure
+make
+make check
+utils/lstopo/lstopo-no-graphics -v
+cd ..
+
+# build with plugins
+mkdir build-plugins
+cd build-plugins
+../configure --enable-plugins
+make
+make check
+tests/wrapper.sh utils/lstopo/lstopo-no-graphics -v
+cd ..
+
+# check renaming
+(cd build/tests/rename && make check)
+
+# cleanup
+rm -rf doc build/doc build-plugins/doc
+cd ..
+tar cfz ${basename}.build.tar.gz $basename
+rm -rf $basename
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-3-mingw.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-3-mingw.sh
new file mode 100755
index 0000000..e8fedff
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-3-mingw.sh
@@ -0,0 +1,150 @@
+#!/bin/sh
+#
+# Copyright © 2012-2015 Inria. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+set -e
+set -x
+
+dotar=1
+dokeeptar=0
+doconf=1
+dobuild32=1
+dobuild64=1
+docheck=1
+doinstall=1
+confopts=
+
+while test $# -gt 0; do
+ if test "$1" = "--no-tar"; then
+ dotar=0
+ else if test "$1" = "--keep-tar"; then
+ dokeeptar=1
+ else if test "$1" = "--no-conf"; then
+ doconf=0
+ else if test "$1" = "--debug"; then
+ confopts="$confopts --enable-debug"
+ else if test "$1" = "--no-32"; then
+ dobuild32=0
+ else if test "$1" = "--no-64"; then
+ dobuild64=0
+ else if test "$1" = "--no-check"; then
+ docheck=0
+ else if test "$1" = "--no-install"; then
+ doinstall=0
+ else if test "$1" = "--help" -o "$1" = "-h"; then
+ echo " --no-tar Use current directory instead of latest hwloc-*.tar.gz"
+ echo " --keep-tar Don't delete tarball after unpacking"
+ echo " --no-conf Don't reconfigure tarball"
+ echo " --debug Enable debug"
+ echo " --no-32 Don't build in 32bits"
+ echo " --no-64 Don't build in 64bits"
+ echo " --no-check Don't run make check"
+ echo " --no-install Don't install"
+ echo " --help Show this help"
+ exit 0
+ fi fi fi fi fi fi fi fi fi
+ shift
+done
+
+oldPATH=$PATH
+
+if test x$dotar = x1; then
+ # remove everything but the last 10 builds
+ rm -rf $(ls | grep -v ^hwloc- | grep -v ^job-) || true
+ chmod u+w -R $(ls -td hwloc-* | tail -n +11) || true
+ rm -rf $(ls -td hwloc-* | tail -n +11) || true
+
+ # find the tarball and extract it
+ tarball=$(ls -tr hwloc-*.tar.gz | tail -1)
+ basename=$(basename $tarball .tar.gz)
+ version=$(echo $basename | cut -d- -f2)
+ test -d $basename && chmod -R u+rwX $basename && rm -rf $basename
+ tar xfz $tarball
+ if test x$dokeeptar = x0; then
+ rm $tarball
+ fi
+else
+ basename=./
+ version=custom
+fi
+
+if test x$dobuild32 = x1; then
+
+ mkdir ${basename}/build32 || true
+ cd ${basename}/build32
+
+ export PATH=/c/Builds:/c/Builds/mingw32/bin/:/c/Builds/mingw64/bin/:/c/Builds/mingw32/i686-w64-mingw32/lib:"/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin":"/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE":$oldPATH
+ if test x$doconf = x1; then
+ winball=hwloc-win32-build-${version}
+ prefix=${PWD}/../${winball}
+ ../configure --prefix=$prefix --enable-static --host=i686-w64-mingw32 CC_FOR_BUILD=x86_64-w64-mingw32-gcc $confopts
+ fi
+
+ make
+
+ if test x$docheck = x1; then
+ make check
+ fi
+
+ if test x$doinstall = x1; then
+ make install
+ #make install-winball || true # not needed anymore in v1.7+
+ winball=$(basename $(head config.log | sed -r -n -e 's/.*--prefix=([^ ]+).*/\1/p'))
+ cd ..
+
+ zip -r ../${winball}.zip ${winball}
+ test -f ${winball}/lib/libhwloc.lib || false
+ else
+ cd ..
+ fi
+
+ build32/utils/lstopo/lstopo-no-graphics -v
+
+ if test x$dotar = x1; then
+ cd ..
+ fi
+
+fi
+
+
+if test x$dobuild64 = x1; then
+
+ mkdir ${basename}/build64 || true
+ cd ${basename}/build64
+
+ export PATH=/c/Builds:/c/Builds/mingw64/bin/:/c/Builds/mingw32/i686-w64-mingw32/lib/:"/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin":"/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE":$oldPATH
+ if test x$doconf = x1; then
+ winball=hwloc-win64-build-${version}
+ prefix=${PWD}/../${winball}
+ ../configure --prefix=$prefix --enable-static --host=x86_64-w64-mingw32 $confopts
+ fi
+
+ make
+
+ if test x$docheck = x1; then
+ make check
+ fi
+
+ if test x$doinstall = x1; then
+ make install
+ #make install-winball || true # not needed anymore in v1.7+
+ winball=$(basename $(head config.log | sed -r -n -e 's/.*--prefix=([^ ]+).*/\1/p'))
+ cd ..
+
+ zip -r ../${winball}.zip ${winball}
+ test -f ${winball}/lib/libhwloc.lib || false
+ else
+ cd ..
+ fi
+
+ build64/utils/lstopo/lstopo-no-graphics -v
+
+ if test x$dotar = x1; then
+ cd ..
+ fi
+
+fi
+
+PATH=$oldPATH
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-3-visualstudio.bat b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-3-visualstudio.bat
new file mode 100644
index 0000000..abeb9c3
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/job-3-visualstudio.bat
@@ -0,0 +1,33 @@
+REM
+REM Copyright © 2012-2015 Inria. All rights reserved.
+REM See COPYING in top-level directory.
+REM
+
+set PATH=%PATH%;C:\Builds\MSYS-20111123\msys\bin
+
+REM remove everything but the last 10 builds
+sh -c "rm -rf $(ls | grep -v ^hwloc- | grep -v ^job-) || true"
+sh -c "rm -rf $(ls -td hwloc-* | tail -n +21) || true"
+REM chmod not needed when not doing make distcheck
+
+REM find the tarball name
+for /f %%i in ('sh -c "ls -tr hwloc-*.tar.gz | grep -v build.tar.gz | tail -1 | sed -e s/.tar.gz//"') do set TARBALL=%%i
+
+sh -c "tar xfz %TARBALL%.tar.gz"
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+cd %TARBALL%\contrib\windows
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild hwloc.sln /p:Configuration=Release /p:Platform=x64
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+x64\Release\lstopo-no-graphics.exe
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+cd ..\..\..
+
+sh -c "tar cfz %TARBALL%-build.tar.gz %TARBALL%"
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+sh -c "rm -rf %TARBALL%"
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/systemd/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/systemd/Makefile.am
new file mode 100644
index 0000000..adf009b
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/systemd/Makefile.am
@@ -0,0 +1,22 @@
+# Copyright © 2016 Inria. All rights reserved.
+# Copyright © 2016 Université Bordeaux
+# See COPYING in top-level directory.
+
+# We can't use autoconf because we don't want $sbindir to be replaced with ${exec_prefix}/sbin
+# Also don't install since , let the packagers do it.
+
+EXTRA_DIST = hwloc-dump-hwdata.service.in
+
+if HWLOC_HAVE_LINUX
+nodist_pkgdata_DATA = hwloc-dump-hwdata.service
+# depend on Makefile in case we rerun configure with different directory arguments
+hwloc-dump-hwdata.service: hwloc-dump-hwdata.service.in Makefile
+ @echo Creating $@...
+ @ $(SED) \
+ -e 's/#SBINDIR#/$(subst /,\/,$(sbindir))/g' \
+ -e 's/#RUNSTATEDIR#/$(subst /,\/,$(HWLOC_runstatedir))/g' \
+ > $@ < $<
+
+distclean-local:
+ rm -f hwloc-dump-hwdata.service
+endif
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/systemd/hwloc-dump-hwdata.service.in b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/systemd/hwloc-dump-hwdata.service.in
new file mode 100644
index 0000000..dead89d
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/systemd/hwloc-dump-hwdata.service.in
@@ -0,0 +1,21 @@
+#
+# Copyright © 2015-2016 Intel, Inc. All rights reserved.
+# Copyright © 2016 Inria. All rights reserved.
+# See COPYING in top-level directory.
+#
+# #RUNSTATEDIR#/hwloc was specified at configure time.
+# It may be changed by passing configure options such as --runstatedir,
+# --localstatedir or --prefix.
+# It may also be manually changed before installing this file in systemd directories.
+#
+
+[Unit]
+Description=Dump hardware topology and locality information to #RUNSTATEDIR#/hwloc
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=#SBINDIR#/hwloc-dump-hwdata -o #RUNSTATEDIR#/hwloc
+
+[Install]
+WantedBy=multi-user.target
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
index 8727832..6fedc5a 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# Copyright © 2010-2014 Cisco Systems, Inc. All rights reserved.
-# Copyright © 2011-2014 Inria. All rights reserved.
+# Copyright © 2011-2016 Inria. All rights reserved.
# $COPYRIGHT$
#
@@ -89,7 +89,9 @@ GetOptions(
if ($HELP) {
print <<EOT;
-$0 [options]
+$0 [options] [directory]
+
+[directory] is "." unless specified.
--help | -h This help message
--quiet | -q Only output critical messages to stdout
@@ -119,7 +121,7 @@ $year += 1900;
quiet_print "==> This year: $year\n";
# Find the top-level HWLOC source tree dir
-my $start = cwd();
+my $start = defined $ARGV[0] ? $ARGV[0] : cwd();
my $top = $start;
while (! -d "$top/src") {
chdir("..");
@@ -176,6 +178,13 @@ foreach my $f (@files) {
next;
}
+ # don't modify ourself while running
+ if ($f =~ m/update-my-copyright\.pl$/) {
+ quiet_print "==> WARNING: Cannot modify myself while running!\n";
+ quiet_print " File left unchanged\n";
+ next;
+ }
+
# Figure out the line prefix
$lines[$token_line_index] =~ m/^(.+)$token/;
my $prefix = $1;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README
index 04a2ae9..c7d8d47 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README
@@ -11,6 +11,9 @@ Enforce a specific toolset before building if needed.
hwloc-assembler-remote is not built because it requires a hardwired
path to hwloc-assembler and it uses ssh.
+hwloc-compress-dir not built because needs work.
+
+hwloc-gather-topology is Linux specific.
hwloc-ps is not built because it does nothing on Windows anyway.
Possible code proposed by Eloi Gaudry:
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj
index cd89930..42e9ca0 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8F}</ProjectGuid>
<RootNamespace>hwloc-bind</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters
index f950ed4..8c95a9b 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -65,7 +62,7 @@
<ClInclude Include="..\..\include\hwloc\autogen\config.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\utils\hwloc\hwloc-calc.h">
+ <ClInclude Include="..\..\utils\hwloc\misc.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj
index 88e25bd..aba819a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB9A}</ProjectGuid>
<RootNamespace>hwloc-bind</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj
index 1416ab9..a544967 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB91}</ProjectGuid>
<RootNamespace>hwloc-bind</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters
index e32415f..dea4bf6 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj
index df32755..65e172d 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB92}</ProjectGuid>
<RootNamespace>hwloc-calc</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters
index 71e798b..96caf5d 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj
index f55a3d2..c5d3750 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB93}</ProjectGuid>
<RootNamespace>hwloc-bind</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters
index 336e844..7b648e9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj
index 998cff5..aadbb45 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB94}</ProjectGuid>
<RootNamespace>hwloc-bind</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters
index 41de164..7a1af48 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj
index b7fcf74..5407924 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB95}</ProjectGuid>
<RootNamespace>hwloc-bind</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters
index 9ee60a4..7b77f48 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj
index 5adba72..ce01efe 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB96}</ProjectGuid>
<RootNamespace>hwloc-info</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters
index 143148b..9769af1 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj
index 645190a..64faf42 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB97}</ProjectGuid>
<RootNamespace>hwloc-bind</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,7 +60,7 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@@ -77,7 +78,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters
index 0c1ed29..de6769d 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters
@@ -44,9 +44,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln
index 5f4f4e4..2634abd 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
+# Visual Studio Express 2012 for Windows Desktop
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libhwloc", "libhwloc.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB8D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lstopo-no-graphics", "lstopo-no-graphics.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB8E}"
@@ -55,57 +55,65 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-patch", "hwloc-patch.
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lstopo", "lstopo.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB98}"
ProjectSection(ProjectDependencies) = postProject
- {9DE76C6D-4773-4766-9F93-69C56166CB8E} = {9DE76C6D-4773-4766-9F93-69C56166CB8E}
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lstopo-win", "lstopo-win.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB99}"
ProjectSection(ProjectDependencies) = postProject
- {9DE76C6D-4773-4766-9F93-69C56166CB98} = {9DE76C6D-4773-4766-9F93-69C56166CB98}
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- ReleaseDll|x64 = ReleaseDll|x64
+ Release|x64 = Release|x64
ReleaseStatic|x64 = ReleaseStatic|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseDll|x64.Build.0 = ReleaseDll|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64
{9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB8E}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB8E}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8E}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8E}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB8E}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB8F}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB8F}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8F}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8F}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB8F}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB90}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB90}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB90}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB90}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB90}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB91}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB91}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB91}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB91}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB91}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB92}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB92}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB92}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB92}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB92}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB93}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB93}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB93}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB93}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB93}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB94}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB94}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB94}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB94}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB94}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB95}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB95}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB95}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB95}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB95}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB96}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB96}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB96}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB96}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB96}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB97}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB97}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB97}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB97}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB97}.ReleaseStatic|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB98}.ReleaseDll|x64.ActiveCfg = Release|x64
- {9DE76C6D-4773-4766-9F93-69C56166CB98}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB98}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB98}.Release|x64.Build.0 = Release|x64
{9DE76C6D-4773-4766-9F93-69C56166CB98}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB99}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB99}.Release|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB99}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB99}.ReleaseStatic|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB9A}.Release|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB9A}.Release|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB9A}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB9A}.ReleaseStatic|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h
index 4923716..9dc0ced 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -29,16 +29,6 @@
#include <windows.h>
#include <BaseTsd.h>
typedef DWORDLONG hwloc_uint64_t;
-typedef SSIZE_T ssize_t;
-#define snprintf _snprintf
-#define strcasecmp _stricmp
-#define strncasecmp _strnicmp
-#define strdup _strdup
-#define strtoull _strtoui64
-#define strtoll _strtoi64
-#define S_ISREG(m) ((m)&_S_IFREG)
-#define S_ISDIR( m ) (((m) & S_IFMT) == S_IFDIR)
-#define putenv _putenv
#if defined( _USRDLL ) /* dynamic linkage */
#if defined( DECLSPEC_EXPORTS )
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj
index 8ff75ec..e1475e6 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
<ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8D}</ProjectGuid>
@@ -18,8 +18,8 @@
<Configuration>ReleaseStatic</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
- <ProjectConfiguration Include="ReleaseDll|x64">
- <Configuration>ReleaseDll</Configuration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
@@ -28,23 +28,27 @@
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugStatic|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'" Label="Configuration">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -55,7 +59,7 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugStatic|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'">
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="PropertySheets">
@@ -76,7 +80,7 @@
<IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<EmbedManifest>true</EmbedManifest>
<TargetName>$(ProjectName)-5</TargetName>
@@ -124,7 +128,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'">
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PreBuildEvent>
<Command>copy /V /Y private_config.h ..\..\include\private\autogen\config.h && copy /V /Y hwloc_config.h ..\..\include\hwloc\autogen\config.h && copy /V /Y static-components.h ..\..\src\static-components.h</Command>
</PreBuildEvent>
@@ -198,8 +202,8 @@
<ClCompile Include="..\..\src\distances.c" />
<ClCompile Include="..\..\src\diff.c" />
<ClCompile Include="..\..\src\misc.c" />
+ <ClCompile Include="..\..\src\pci-common.c" />
<ClCompile Include="..\..\src\topology-custom.c" />
- <ClCompile Include="..\..\src\topology-fake.c" />
<ClCompile Include="..\..\src\topology-noos.c" />
<ClCompile Include="..\..\src\topology-synthetic.c" />
<ClCompile Include="..\..\src\topology-windows.c" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters
index 2bfb4c7..77b4f77 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters
@@ -36,10 +36,10 @@
<ClCompile Include="..\..\src\misc.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\src\topology-custom.c">
+ <ClCompile Include="..\..\src\pci-common.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\src\topology-fake.c">
+ <ClCompile Include="..\..\src\topology-custom.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\topology-noos.c">
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj
index 942a743..48659e8 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,12 +60,13 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\utils\lstopo\lstopo.c" />
+ <ClCompile Include="..\..\utils\lstopo\lstopo-ascii.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-color.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-draw.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-fig.c" />
@@ -82,7 +84,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters
index c3625c5..d888f3a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters
@@ -18,6 +18,9 @@
<ClCompile Include="..\..\utils\lstopo\lstopo.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\utils\lstopo\lstopo-ascii.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\utils\lstopo\lstopo-color.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -59,9 +62,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj
index 4c0ca4f..fdbefca 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB99}</ProjectGuid>
<RootNamespace>lstopo-no-graphics</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,13 +60,14 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\utils\lstopo\lstopo.c" />
+ <ClCompile Include="..\..\utils\lstopo\lstopo-ascii.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-color.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-draw.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-fig.c" />
@@ -84,7 +86,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters
index d7aeda7..4ce0ed8 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters
@@ -18,6 +18,9 @@
<ClCompile Include="..\..\utils\lstopo\lstopo.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\utils\lstopo\lstopo-ascii.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\utils\lstopo\lstopo-color.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -62,9 +65,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj
index fd5ee50..ba75246 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
- <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB98}</ProjectGuid>
<RootNamespace>lstopo-no-graphics</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
@@ -17,6 +17,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -59,12 +60,13 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TargetMachine>MachineX64</TargetMachine>
<LinkErrorReporting>NoErrorReport</LinkErrorReporting>
- <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Release;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\utils\lstopo\lstopo.c" />
+ <ClCompile Include="..\..\utils\lstopo\lstopo-ascii.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-color.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-draw.c" />
<ClCompile Include="..\..\utils\lstopo\lstopo-fig.c" />
@@ -83,7 +85,6 @@
<ClInclude Include="..\..\include\hwloc\plugins.h" />
<ClInclude Include="..\..\include\hwloc\rename.h" />
<ClInclude Include="..\..\include\private\components.h" />
- <ClInclude Include="..\..\include\private\cpuid.h" />
<ClInclude Include="..\..\include\private\debug.h" />
<ClInclude Include="..\..\include\private\misc.h" />
<ClInclude Include="..\..\include\private\private.h" />
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters
index d7aeda7..4ce0ed8 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters
@@ -18,6 +18,9 @@
<ClCompile Include="..\..\utils\lstopo\lstopo.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\utils\lstopo\lstopo-ascii.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\utils\lstopo\lstopo-color.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -62,9 +65,6 @@
<ClInclude Include="..\..\include\private\components.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\private\cpuid.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\private\debug.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h
index b2b426d..64f9699 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h
@@ -1,7 +1,7 @@
/*
* Copyright © 2009, 2011, 2012 CNRS. All rights reserved.
- * Copyright © 2009-2014 Inria. All rights reserved.
- * Copyright © 2009, 2011, 2012 Université Bordeaux. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
+ * Copyright © 2009, 2011, 2012, 2015 Université Bordeaux. All rights reserved.
* Copyright © 2009 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
*
@@ -77,7 +77,23 @@
/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
don't. */
-#define HAVE_DECL_STRTOULL 1
+#define HAVE_DECL_STRTOULL 0
+
+/* Define to 1 if you have the declaration of `strcasecmp', and to 0 if you
+ don't. */
+#define HAVE_DECL_STRCASECMP 0
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+ don't. */
+#define HAVE_DECL_SNPRINTF 0
+
+/* Define to 1 if you have the declaration of `_strdup', and to 0 if you
+ don't. */
+#define HAVE_DECL__STRDUP 1
+
+/* Define to 1 if you have the declaration of `_putenv', and to 0 if you
+ don't. */
+#define HAVE_DECL__PUTENV 1
/* Define to 1 if you have the declaration of `_SC_LARGE_PAGESIZE', and to 0
if you don't. */
@@ -232,6 +248,9 @@
*/
/* #undef HAVE_PSAPI_WORKING_SET_EX_INFORMATION */
+/* Define to 1 if the system has the type `PROCESSOR_NUMBER'. */
+#define HAVE_PROCESSOR_NUMBER 1
+
/* Define to 1 if you have the <pthread_np.h> header file. */
/* #undef HAVE_PTHREAD_NP_H */
@@ -514,8 +533,8 @@
/* Define to 1 if X11 headers including Xutil.h and keysym.h are available. */
/* #undef HWLOC_HAVE_X11_KEYSYM */
-/* Define to 1 if the _syscall3 macro works */
-/* #undef HWLOC_HAVE__SYSCALL3 */
+/* Define to 1 if function `syscall' is available */
+/* #undef HWLOC_HAVE_SYSCALL */
/* Define to 1 on HP-UX */
/* #undef HWLOC_HPUX_SYS */
@@ -579,7 +598,7 @@
#define PACKAGE_NAME "hwloc"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "hwloc 1.7.2"
+#define PACKAGE_STRING "hwloc"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "hwloc"
@@ -588,7 +607,7 @@
#define PACKAGE_URL ""
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.7.2"
+#define PACKAGE_VERSION HWLOC_VERSION
/* The size of `unsigned int', as computed by sizeof. */
#define SIZEOF_UNSIGNED_INT 4
@@ -642,7 +661,8 @@
/* Version number of package */
-#define VERSION "1.9"
+#define HWLOC_VERSION "1.11.4"
+#define VERSION HWLOC_VERSION
/* Define to 1 if the X Window System is missing or not being used. */
#define X_DISPLAY_MISSING 1
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
index 23add90..d87a697 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
@@ -1,6 +1,6 @@
-# Copyright © 2009-2014 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2013 Université Bordeaux
-# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# Copyright © 2009-2016 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
@@ -193,9 +193,24 @@ doc: $(DOX_TAG) $(DOX_LETTERPDF) $(DOX_A4PDF)
else !HWLOC_BUILD_DOXYGEN
-# When we don't have doxygen, nothing to do
+# When we don't have doxygen, nothing to do for a normal build
doc:
+if !HWLOC_INSTALL_DOXYGEN
+# But if the user tries to "make dist" and doesn't have all the right
+# tools, and prebuilt doc aren't available, fail with a helpful error
+$(BUILT_IMAGES) $(DOX_A4PDF) $(DOX_LETTERPDF):
+ @echo " "
+ @echo "*** ERROR: You do not have all the documentation generation tools"
+ @echo "*** that hwloc needs. Check the output from when you ran 'configure'"
+ @echo "*** (in section \"Configuring hwloc documentation\") to see what tools"
+ @echo "*** you are missing."
+ @echo "***"
+ @echo "*** 'make' will now abort with an error."
+ @echo " "
+ @exit 1
+endif !HWLOC_INSTALL_DOXYGEN
+
endif !HWLOC_BUILD_DOXYGEN
# there are also a bunch of doxygen-build-dependencies later in this file
@@ -259,7 +274,6 @@ man3_object_types_DATA = \
$(DOX_MAN_DIR)/man3/HWLOC_OBJ_PCI_DEVICE.3 \
$(DOX_MAN_DIR)/man3/HWLOC_OBJ_PACKAGE.3 \
$(DOX_MAN_DIR)/man3/HWLOC_OBJ_SYSTEM.3 \
- $(DOX_MAN_DIR)/man3/HWLOC_OBJ_TYPE_MAX.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_type_t.3 \
$(DOX_MAN_DIR)/man3/HWLOC_OBJ_CACHE_UNIFIED.3 \
$(DOX_MAN_DIR)/man3/HWLOC_OBJ_CACHE_DATA.3 \
@@ -364,10 +378,13 @@ man3_object_stringsdir = $(man3dir)
man3_object_strings_DATA = \
$(DOX_MAN_DIR)/man3/hwlocality_object_strings.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_type_string.3 \
- $(DOX_MAN_DIR)/man3/hwloc_obj_type_sscanf.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_type_snprintf.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_attr_snprintf.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_cpuset_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_type_sscanf.3
+
+man3_object_info_attrsdir = $(man3dir)
+man3_object_info_attrs_DATA = \
$(DOX_MAN_DIR)/man3/hwloc_obj_get_info_by_name.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_add_info.3
@@ -399,6 +416,7 @@ man3_membinding_DATA = \
$(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_MIXED.3 \
$(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_NEXTTOUCH.3 \
$(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_NOCPUBIND.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_BYNODESET.3 \
$(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_PROCESS.3 \
$(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_REPLICATE.3 \
$(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_STRICT.3 \
@@ -417,6 +435,7 @@ man3_membinding_DATA = \
$(DOX_MAN_DIR)/man3/hwloc_set_area_membind_nodeset.3 \
$(DOX_MAN_DIR)/man3/hwloc_get_area_membind.3 \
$(DOX_MAN_DIR)/man3/hwloc_get_area_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_area_memlocation.3 \
$(DOX_MAN_DIR)/man3/hwloc_alloc.3 \
$(DOX_MAN_DIR)/man3/hwloc_alloc_membind.3 \
$(DOX_MAN_DIR)/man3/hwloc_alloc_membind_nodeset.3 \
@@ -715,6 +734,7 @@ $(man3_creation_DATA): $(DOX_TAG)
$(man3_configuration_DATA): $(DOX_TAG)
$(man3_levels_DATA): $(DOX_TAG)
$(man3_object_strings_DATA): $(DOX_TAG)
+$(man3_object_info_attrs_DATA): $(DOX_TAG)
$(man3_cpubinding_DATA): $(DOX_TAG)
$(man3_membinding_DATA): $(DOX_TAG)
$(man3_tinker_DATA): $(DOX_TAG)
@@ -783,8 +803,11 @@ $(HWLOC_top_srcdir)/README: $(DOX_TAG)
sed -n -f $(srcdir)/README.sed $(DOX_HTML_DIR)/index.html > $(DOX_HTML_README)
LC_ALL=C $(HWLOC_W3_GENERATOR) $(DOX_HTML_README) \
| $(SED) -n -e 's/^ //' -e '/^Introduction$$/,$$p' \
- | $(SED) -e '/^--*-$$/,$$ d' \
+ | $(SED) -e '/^Installation$$/,$$ d' \
> $@
+ echo >> $@
+ echo >> $@
+ echo "See https://www.open-mpi.org/projects/hwloc/doc/ for more hwloc documentation." >> $@
rm -f $(DOX_HTML_README)
else
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.in
index 2289c20..187bfc6 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.in
@@ -14,9 +14,9 @@
@SET_MAKE@
-# Copyright © 2009-2014 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2013 Université Bordeaux
-# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# Copyright © 2009-2016 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
VPATH = @srcdir@
@@ -191,6 +191,7 @@ am__installdirs = "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man3_bitmapdir)" \
"$(DESTDIR)$(man3_linux_libnumadir)" \
"$(DESTDIR)$(man3_membindingdir)" \
"$(DESTDIR)$(man3_myriexpressdir)" \
+ "$(DESTDIR)$(man3_object_info_attrsdir)" \
"$(DESTDIR)$(man3_object_setsdir)" \
"$(DESTDIR)$(man3_object_stringsdir)" \
"$(DESTDIR)$(man3_object_typesdir)" \
@@ -213,10 +214,11 @@ DATA = $(man3_bitmap_DATA) $(man3_configuration_DATA) \
$(man3_helper_topology_sets_DATA) $(man3_levels_DATA) \
$(man3_linux_DATA) $(man3_linux_libnuma_DATA) \
$(man3_membinding_DATA) $(man3_myriexpress_DATA) \
- $(man3_object_sets_DATA) $(man3_object_strings_DATA) \
- $(man3_object_types_DATA) $(man3_objects_DATA) \
- $(man3_openfabrics_DATA) $(man3_syntheticexport_DATA) \
- $(man3_tinker_DATA) $(man3_xmlexport_DATA) $(pdf_DATA)
+ $(man3_object_info_attrs_DATA) $(man3_object_sets_DATA) \
+ $(man3_object_strings_DATA) $(man3_object_types_DATA) \
+ $(man3_objects_DATA) $(man3_openfabrics_DATA) \
+ $(man3_syntheticexport_DATA) $(man3_tinker_DATA) \
+ $(man3_xmlexport_DATA) $(pdf_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
am__recursive_targets = \
@@ -348,8 +350,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -446,6 +450,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -597,7 +602,6 @@ EXTRA_DIST = \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_PCI_DEVICE.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_PACKAGE.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_SYSTEM.3 \
- at HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_TYPE_MAX.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_type_t.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_CACHE_UNIFIED.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_CACHE_DATA.3 \
@@ -702,10 +706,13 @@ EXTRA_DIST = \
@HWLOC_INSTALL_DOXYGEN_TRUE at man3_object_strings_DATA = \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwlocality_object_strings.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_type_string.3 \
- at HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_type_sscanf.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_type_snprintf.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_snprintf.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_cpuset_snprintf.3 \
+ at HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_type_sscanf.3
+
+ at HWLOC_INSTALL_DOXYGEN_TRUE@man3_object_info_attrsdir = $(man3dir)
+ at HWLOC_INSTALL_DOXYGEN_TRUE@man3_object_info_attrs_DATA = \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_get_info_by_name.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_obj_add_info.3
@@ -737,6 +744,7 @@ EXTRA_DIST = \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_MIXED.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_NEXTTOUCH.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_NOCPUBIND.3 \
+ at HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_BYNODESET.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_PROCESS.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_REPLICATE.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_STRICT.3 \
@@ -755,6 +763,7 @@ EXTRA_DIST = \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_set_area_membind_nodeset.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_get_area_membind.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_get_area_membind_nodeset.3 \
+ at HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_get_area_memlocation.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_alloc.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_alloc_membind.3 \
@HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_alloc_membind_nodeset.3 \
@@ -1607,6 +1616,27 @@ uninstall-man3_myriexpressDATA:
@list='$(man3_myriexpress_DATA)'; test -n "$(man3_myriexpressdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(man3_myriexpressdir)'; $(am__uninstall_files_from_dir)
+install-man3_object_info_attrsDATA: $(man3_object_info_attrs_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(man3_object_info_attrs_DATA)'; test -n "$(man3_object_info_attrsdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3_object_info_attrsdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3_object_info_attrsdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3_object_info_attrsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3_object_info_attrsdir)" || exit $$?; \
+ done
+
+uninstall-man3_object_info_attrsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man3_object_info_attrs_DATA)'; test -n "$(man3_object_info_attrsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(man3_object_info_attrsdir)'; $(am__uninstall_files_from_dir)
install-man3_object_setsDATA: $(man3_object_sets_DATA)
@$(NORMAL_INSTALL)
@list='$(man3_object_sets_DATA)'; test -n "$(man3_object_setsdir)" || list=; \
@@ -1957,7 +1987,7 @@ check: $(BUILT_SOURCES)
all-am: Makefile $(MANS) $(DATA) all-local
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man3_bitmapdir)" "$(DESTDIR)$(man3_configurationdir)" "$(DESTDIR)$(man3_cpubindingdir)" "$(DESTDIR)$(man3_creationdir)" "$(DESTDIR)$(man3_cudadir)" "$(DESTDIR)$(man3_customdir)" "$(DESTDIR)$(man3_diffdir)" "$(DESTDIR)$(man3_glibc_scheddir)" "$(DESTDIR)$(man3_helper_advanced_iodir)" "$(DESTDIR)$(man3_helper_ancestorsdir)" "$(DESTDIR)$(man3_helper_distancesdir)" "$(DESTDIR)$(man3_helper_distributedir)" "$(DESTDIR)$(man3_helper_find_cachedir)" [...]
+ for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man3_bitmapdir)" "$(DESTDIR)$(man3_configurationdir)" "$(DESTDIR)$(man3_cpubindingdir)" "$(DESTDIR)$(man3_creationdir)" "$(DESTDIR)$(man3_cudadir)" "$(DESTDIR)$(man3_customdir)" "$(DESTDIR)$(man3_diffdir)" "$(DESTDIR)$(man3_glibc_scheddir)" "$(DESTDIR)$(man3_helper_advanced_iodir)" "$(DESTDIR)$(man3_helper_ancestorsdir)" "$(DESTDIR)$(man3_helper_distancesdir)" "$(DESTDIR)$(man3_helper_distributedir)" "$(DESTDIR)$(man3_helper_find_cachedir)" [...]
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -2030,6 +2060,7 @@ install-data-am: install-man install-man3_bitmapDATA \
install-man3_helper_topology_setsDATA install-man3_levelsDATA \
install-man3_linuxDATA install-man3_linux_libnumaDATA \
install-man3_membindingDATA install-man3_myriexpressDATA \
+ install-man3_object_info_attrsDATA \
install-man3_object_setsDATA install-man3_object_stringsDATA \
install-man3_object_typesDATA install-man3_objectsDATA \
install-man3_openfabricsDATA install-man3_syntheticexportDATA \
@@ -2095,7 +2126,9 @@ uninstall-am: uninstall-man uninstall-man3_bitmapDATA \
uninstall-man3_helper_topology_setsDATA \
uninstall-man3_levelsDATA uninstall-man3_linuxDATA \
uninstall-man3_linux_libnumaDATA uninstall-man3_membindingDATA \
- uninstall-man3_myriexpressDATA uninstall-man3_object_setsDATA \
+ uninstall-man3_myriexpressDATA \
+ uninstall-man3_object_info_attrsDATA \
+ uninstall-man3_object_setsDATA \
uninstall-man3_object_stringsDATA \
uninstall-man3_object_typesDATA uninstall-man3_objectsDATA \
uninstall-man3_openfabricsDATA \
@@ -2131,6 +2164,7 @@ uninstall-man: uninstall-man3
install-man3_helper_topology_setsDATA install-man3_levelsDATA \
install-man3_linuxDATA install-man3_linux_libnumaDATA \
install-man3_membindingDATA install-man3_myriexpressDATA \
+ install-man3_object_info_attrsDATA \
install-man3_object_setsDATA install-man3_object_stringsDATA \
install-man3_object_typesDATA install-man3_objectsDATA \
install-man3_openfabricsDATA install-man3_syntheticexportDATA \
@@ -2157,7 +2191,9 @@ uninstall-man: uninstall-man3
uninstall-man3_helper_topology_setsDATA \
uninstall-man3_levelsDATA uninstall-man3_linuxDATA \
uninstall-man3_linux_libnumaDATA uninstall-man3_membindingDATA \
- uninstall-man3_myriexpressDATA uninstall-man3_object_setsDATA \
+ uninstall-man3_myriexpressDATA \
+ uninstall-man3_object_info_attrsDATA \
+ uninstall-man3_object_setsDATA \
uninstall-man3_object_stringsDATA \
uninstall-man3_object_typesDATA uninstall-man3_objectsDATA \
uninstall-man3_openfabricsDATA \
@@ -2265,9 +2301,22 @@ uninstall-man: uninstall-man3
@HWLOC_BUILD_DOXYGEN_TRUE at doc: $(DOX_TAG) $(DOX_LETTERPDF) $(DOX_A4PDF)
-# When we don't have doxygen, nothing to do
+# When we don't have doxygen, nothing to do for a normal build
@HWLOC_BUILD_DOXYGEN_FALSE at doc:
+# But if the user tries to "make dist" and doesn't have all the right
+# tools, and prebuilt doc aren't available, fail with a helpful error
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@$(BUILT_IMAGES) $(DOX_A4PDF) $(DOX_LETTERPDF):
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo " "
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo "*** ERROR: You do not have all the documentation generation tools"
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo "*** that hwloc needs. Check the output from when you ran 'configure'"
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo "*** (in section \"Configuring hwloc documentation\") to see what tools"
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo "*** you are missing."
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo "***"
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo "*** 'make' will now abort with an error."
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @echo " "
+ at HWLOC_BUILD_DOXYGEN_FALSE@@HWLOC_INSTALL_DOXYGEN_FALSE@ @exit 1
+
# end of manpages(3) if HWLOC_BUILD_DOXYGEN
# Put in these rules to force the generation of the man pages and get
@@ -2287,6 +2336,7 @@ uninstall-man: uninstall-man3
@HWLOC_BUILD_DOXYGEN_TRUE@$(man3_configuration_DATA): $(DOX_TAG)
@HWLOC_BUILD_DOXYGEN_TRUE@$(man3_levels_DATA): $(DOX_TAG)
@HWLOC_BUILD_DOXYGEN_TRUE@$(man3_object_strings_DATA): $(DOX_TAG)
+ at HWLOC_BUILD_DOXYGEN_TRUE@$(man3_object_info_attrs_DATA): $(DOX_TAG)
@HWLOC_BUILD_DOXYGEN_TRUE@$(man3_cpubinding_DATA): $(DOX_TAG)
@HWLOC_BUILD_DOXYGEN_TRUE@$(man3_membinding_DATA): $(DOX_TAG)
@HWLOC_BUILD_DOXYGEN_TRUE@$(man3_tinker_DATA): $(DOX_TAG)
@@ -2336,8 +2386,11 @@ uninstall-man: uninstall-man3
@HWLOC_BUILD_README_TRUE@ sed -n -f $(srcdir)/README.sed $(DOX_HTML_DIR)/index.html > $(DOX_HTML_README)
@HWLOC_BUILD_README_TRUE@ LC_ALL=C $(HWLOC_W3_GENERATOR) $(DOX_HTML_README) \
@HWLOC_BUILD_README_TRUE@ | $(SED) -n -e 's/^ //' -e '/^Introduction$$/,$$p' \
- at HWLOC_BUILD_README_TRUE@ | $(SED) -e '/^--*-$$/,$$ d' \
+ at HWLOC_BUILD_README_TRUE@ | $(SED) -e '/^Installation$$/,$$ d' \
@HWLOC_BUILD_README_TRUE@ > $@
+ at HWLOC_BUILD_README_TRUE@ echo >> $@
+ at HWLOC_BUILD_README_TRUE@ echo >> $@
+ at HWLOC_BUILD_README_TRUE@ echo "See https://www.open-mpi.org/projects/hwloc/doc/ for more hwloc documentation." >> $@
@HWLOC_BUILD_README_TRUE@ rm -f $(DOX_HTML_README)
# When we don't have what's needed to build the README, nothing to do
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README.sed b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README.sed
index fab5e05..5571d4a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README.sed
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README.sed
@@ -1,8 +1,3 @@
-/<div class=\"line\">.*/{
- s/ /\ /g
- s/<[^>]\{1,\}>//g
- s/$/<br\/>/
-}
s/\–/--/g
s/©/(c)/g
s/é/é/g
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in
index e8ac777..eacfb56 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in
@@ -11,8 +11,6 @@ INPUT = \
@top_srcdir@/include/hwloc.h \
@top_srcdir@/include/hwloc/helper.h \
@top_srcdir@/include/hwloc/bitmap.h \
- @top_srcdir@/include/hwloc/diff.h \
- @top_srcdir@/include/hwloc/plugins.h \
@top_srcdir@/include/hwloc/linux.h \
@top_srcdir@/include/hwloc/linux-libnuma.h \
@top_srcdir@/include/hwloc/glibc-sched.h \
@@ -23,7 +21,9 @@ INPUT = \
@top_srcdir@/include/hwloc/gl.h \
@top_srcdir@/include/hwloc/intel-mic.h \
@top_srcdir@/include/hwloc/openfabrics-verbs.h \
- @top_srcdir@/include/hwloc/myriexpress.h
+ @top_srcdir@/include/hwloc/myriexpress.h \
+ @top_srcdir@/include/hwloc/diff.h \
+ @top_srcdir@/include/hwloc/plugins.h
EXAMPLE_PATH = @top_srcdir@/doc
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.am
index 31bcb36..c25b91c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2014 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2013 Université Bordeaux
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -19,7 +19,7 @@ if HWLOC_HAVE_CXX
TESTS += hwloc-hello-cpp
endif HWLOC_HAVE_CXX
-check_PROGRAMS = $(TESTS) cpuset+bitmap+cpubind nodeset+membind+policy sharedcaches
+check_PROGRAMS = $(TESTS) cpuset+bitmap+cpubind nodeset+membind+policy sharedcaches get-knl-modes
hwloc-hello-cpp.cpp: $(srcdir)/hwloc-hello.c
cp -f $(srcdir)/hwloc-hello.c $@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.in
index c6f4c5b..149020a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# Copyright © 2009-2014 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2013 Université Bordeaux
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -100,7 +100,8 @@ target_triplet = @target@
TESTS = hwloc-hello$(EXEEXT) $(am__EXEEXT_1)
@HWLOC_HAVE_CXX_TRUE at am__append_1 = hwloc-hello-cpp
check_PROGRAMS = $(am__EXEEXT_2) cpuset+bitmap+cpubind$(EXEEXT) \
- nodeset+membind+policy$(EXEEXT) sharedcaches$(EXEEXT)
+ nodeset+membind+policy$(EXEEXT) sharedcaches$(EXEEXT) \
+ get-knl-modes$(EXEEXT)
subdir = doc/examples
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/hwloc.m4 \
@@ -134,6 +135,10 @@ AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+get_knl_modes_SOURCES = get-knl-modes.c
+get_knl_modes_OBJECTS = get-knl-modes.$(OBJEXT)
+get_knl_modes_LDADD = $(LDADD)
+get_knl_modes_DEPENDENCIES = $(HWLOC_top_builddir)/src/libhwloc.la
hwloc_hello_SOURCES = hwloc-hello.c
hwloc_hello_OBJECTS = hwloc-hello.$(OBJEXT)
hwloc_hello_LDADD = $(LDADD)
@@ -203,10 +208,10 @@ AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
am__v_CXXLD_0 = @echo " CXXLD " $@;
am__v_CXXLD_1 =
-SOURCES = cpuset+bitmap+cpubind.c hwloc-hello.c \
+SOURCES = cpuset+bitmap+cpubind.c get-knl-modes.c hwloc-hello.c \
$(hwloc_hello_cpp_SOURCES) nodeset+membind+policy.c \
sharedcaches.c
-DIST_SOURCES = cpuset+bitmap+cpubind.c hwloc-hello.c \
+DIST_SOURCES = cpuset+bitmap+cpubind.c get-knl-modes.c hwloc-hello.c \
$(hwloc_hello_cpp_SOURCES) nodeset+membind+policy.c \
sharedcaches.c
am__can_run_installinfo = \
@@ -515,8 +520,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -613,6 +620,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -678,6 +686,10 @@ cpuset+bitmap+cpubind$(EXEEXT): $(cpuset_bitmap_cpubind_OBJECTS) $(cpuset_bitmap
@rm -f cpuset+bitmap+cpubind$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(cpuset_bitmap_cpubind_OBJECTS) $(cpuset_bitmap_cpubind_LDADD) $(LIBS)
+get-knl-modes$(EXEEXT): $(get_knl_modes_OBJECTS) $(get_knl_modes_DEPENDENCIES) $(EXTRA_get_knl_modes_DEPENDENCIES)
+ @rm -f get-knl-modes$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(get_knl_modes_OBJECTS) $(get_knl_modes_LDADD) $(LIBS)
+
hwloc-hello$(EXEEXT): $(hwloc_hello_OBJECTS) $(hwloc_hello_DEPENDENCIES) $(EXTRA_hwloc_hello_DEPENDENCIES)
@rm -f hwloc-hello$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(hwloc_hello_OBJECTS) $(hwloc_hello_LDADD) $(LIBS)
@@ -701,6 +713,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpuset+bitmap+cpubind.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/get-knl-modes.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc-hello-cpp.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc-hello.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nodeset+membind+policy.Po at am__quote@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/get-knl-modes.c b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/get-knl-modes.c
new file mode 100644
index 0000000..9f0eb1a
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/examples/get-knl-modes.c
@@ -0,0 +1,37 @@
+/* This example program shows how to retrieve Knights Landing
+ * memory and cluster modes.
+ * See "Custom string infos" in the documentation for details
+ * about these attributes.
+ *
+ * Copyright © 2015-2016, 2015 Intel
+ * Copyright © 2016 Inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <hwloc.h>
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t root;
+ const char *cluster_mode;
+ const char *memory_mode;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ root = hwloc_get_root_obj(topology);
+
+ cluster_mode = hwloc_obj_get_info_by_name(root, "ClusterMode");
+ memory_mode = hwloc_obj_get_info_by_name(root, "MemoryMode");
+
+ printf ("ClusterMode is '%s' MemoryMode is '%s'\n",
+ cluster_mode ? cluster_mode : "NULL",
+ memory_mode ? memory_mode : "NULL");
+
+ hwloc_topology_destroy(topology);
+ return 0;
+}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
index 5dc4883..af98fca 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2013 Université Bordeaux
* Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -33,24 +33,14 @@ hwloc primarily aims at helping high-performance computing (HPC)
applications, but is also applicable to any project seeking to exploit
code and/or data locality on modern computing platforms.
-*** Note that the hwloc project represents the merger of the
-libtopology project from inria and the Portable Linux Processor
-Affinity (PLPA) sub-project from Open MPI. <em>Both of these prior
-projects are now deprecated.</em> The first hwloc release was
-essentially a "re-branding" of the libtopology code base, but with
-both a few genuinely new features and a few PLPA-like features added
-in. Prior releases of hwloc included documentation about switching
-from PLPA to hwloc; this documentation has been dropped on the
-assumption that everyone who was using PLPA has already switched to
-hwloc.
-
hwloc supports the following operating systems:
<ul>
<li>Linux (including old kernels not having sysfs topology
-information, with knowledge of cpusets, offline CPUs, ScaleMP vSMP,
-NumaScale NumaConnect, and Kerrighed support) on all supported hardware, including Intel Xeon Phi
-(either standalone or as a coprocessor).</li>
+information, with knowledge of cpusets, offline CPUs, ScaleMP vSMP and Kerrighed support)
+on all supported hardware, including Intel Xeon Phi
+(KNL and KNC, either standalone or as a coprocessor)
+and NumaScale NumaConnect.</li>
<li>Solaris</li>
<li>AIX</li>
<li>Darwin / OS X</li>
@@ -79,8 +69,10 @@ For development and debugging purposes, hwloc also offers the ability to
work on "fake" topologies:
<ul>
- <li> Symmetrical tree of resources generated from a list of level arities</li>
- <li> Remote machine simulation through the gathering of Linux sysfs topology files</li>
+ <li> Symmetrical tree of resources generated from a list of level arities,
+ see \ref synthetic.</li>
+ <li> Remote machine simulation through the gathering of topology as XML files,
+ see \ref xml.</li>
</ul>
hwloc can display the topology in a human-readable format, either in
@@ -161,9 +153,15 @@ The hwloc core may also benefit from the following development packages:
</li>
<li>the NVIDIA CUDA Toolkit for CUDA device discovery.
</li>
-<li>the NVIDIA Tesla Development Kit for NVML device discovery.
+<li>the NVIDIA Management Library (NVML) for NVML device discovery.
+ It is available within the NVIDIA GPU Deployment Kit from
+ https://developer.nvidia.com/gpu-deployment-kit .
</li>
<li>the NV-CONTROL X extension library (NVCtrl) for NVIDIA display discovery.
+ The relevant development package is usually <tt>libXNVCtrl-devel</tt>
+ or <tt>libxnvctrl-dev</tt>.
+ It is also available within nvidia-settings from ftp://download.nvidia.com/XFree86/nvidia-settings/
+ and https://github.com/NVIDIA/nvidia-settings/ .
</li>
<li>libxml2 for full XML import/export support (otherwise, the
internal minimalistic parser will only be able to import
@@ -473,7 +471,7 @@ shell$
Questions should be sent to the devel mailing
list (http://www.open-mpi.org/community/lists/hwloc.php).
Bug reports should be reported in the tracker
-(https://git.open-mpi.org/trac/hwloc/).
+(https://github.com/open-mpi/hwloc/issues).
If hwloc discovers an incorrect topology for your machine, the very
first thing you should check is to ensure that you have the most
@@ -486,7 +484,7 @@ the most recent version of the BIOS for your machine.
If those things fail, contact us on the mailing list for additional
help. Please attach the output of lstopo after having given the
-<tt>--enable-debug</tt> option to ./configure and rebuilt completely, to get
+<tt>\--enable-debug</tt> option to ./configure and rebuilt completely, to get
debugging output. Also attach the <tt>/proc</tt> + <tt>/sys</tt> tarball
generated by the installed script <tt>hwloc-gather-topology</tt>
when submitting problems about Linux, or send the
@@ -615,7 +613,7 @@ Make sure to have had a look at those too!
of parent/child links between the root object and the given object.
If the topology is asymmetric, the difference between some parent
and child depths may be larger than one when some intermediate levels
- (for instance caches) are missing in only some parts of the machine.
+ (for instance groups) are missing in only some parts of the machine.
</dd>
<dt>OS or physical index</dt>
@@ -623,7 +621,8 @@ Make sure to have had a look at those too!
object. This may be completely arbitrary, non-unique, non-contiguous, not
representative of logical proximity, and may depend on the BIOS
configuration. That is why hwloc almost never uses them, only in the default
- lstopo output (<tt>P\#x</tt>) and cpuset masks.</dd>
+ lstopo output (<tt>P\#x</tt>) and cpuset masks.
+ See also \ref faq_indexes.</dd>
<dt>Logical index</dt>
<dd>Index to uniquely identify objects of the same type and depth,
@@ -640,7 +639,7 @@ Make sure to have had a look at those too!
processor" (which in hwloc we rather call "processing unit" to avoid the
confusion) has both a physical index (as chosen arbitrarily by BIOS/OS) and a logical
index (as computed according to logical proximity by hwloc).
- </dd>
+ See also \ref faq_indexes.</dd>
<dt>Processing unit</dt>
<dd>The smallest processing element that can be represented by a hwloc
@@ -661,10 +660,11 @@ Make sure to have had a look at those too!
The following diagram can help to understand the vocabulary of the relationships
by showing the example of a machine with two dual core packages (with no
-hardware threads); thus, a topology with 4 levels. Each box with rounded corner
-corresponds to one hwloc_obj_t, containing the values of the different integer
-fields (depth, logical_index, etc.), and arrows show to which other hwloc_obj_t
+hardware threads); thus, a topology with 5 levels. Each box with rounded corner
+corresponds to one ::hwloc_obj_t, containing the values of the different integer
+fields (depth, logical_index, etc.), and arrows show to which other ::hwloc_obj_t
pointers point to (first_child, parent, etc.). The L2 cache of the last core is intentionally missing to show how asymmetric topologies are handled.
+See \ref faq_asymmetric for more information about such strange topologies.
\image html diagram.png
\image latex diagram.eps "" width=\textwidth
@@ -672,8 +672,6 @@ pointers point to (first_child, parent, etc.). The L2 cache of the last core is
It should be noted that for PU objects, the logical index -- as
computed linearly by hwloc -- is not the same as the OS index.
-See also \ref faq_asymmetric for more details.
-
\page tools Command-Line Tools
@@ -682,6 +680,7 @@ command line utilities. Each of them is fully documented in its own
manual page; the following is a summary of the available command line
tools.
+
\section cli_lstopo lstopo and lstopo-no-graphics
lstopo (also known as hwloc-ls) displays the
@@ -697,13 +696,14 @@ Textual outputs (those that do not depend on heavy external libraries
such as Cairo) are supported in both lstopo and lstopo-no-graphics.
This command can also display the processes currently bound to a part
-of the machine (via the <tt>--ps</tt> option).
+of the machine (via the <tt>\--ps</tt> option).
Note that lstopo can read XML files and/or alternate chroot
filesystems and display topological maps representing those systems
(e.g., use lstopo to output an XML file on one system, and then use
lstopo to read in that XML file and display it on a different system).
+
\section cli_hwloc_bind hwloc-bind
hwloc-bind binds processes to specific hardware objects through a
@@ -711,40 +711,60 @@ flexible syntax. A simple example is binding an executable to
specific cores (or packages or bitmaps or ...). The hwloc-bind(1) man
page provides much more detail on what is possible.
-hwloc-bind can also be used to retrieve the current process' binding.
+hwloc-bind can also be used to retrieve the current process' binding,
+or retrieve the last CPU(s) where a process ran,
+or operate on memory binding.
+
+Just like hwloc-calc, the input locations given to hwloc-bind may be
+either objects or cpusets (bitmaps as reported by hwloc-calc or hwloc-distrib).
+
\section cli_hwloc_calc hwloc-calc
-hwloc-calc is generally used to create bitmap strings to pass to
-hwloc-bind. Although hwloc-bind accepts many forms of object
-specification (i.e., bitmap strings are one of many forms that
-hwloc-bind understands), they can be useful, compact representations
-in shell scripts, for example.
+hwloc-calc is hwloc's Swiss Army Knife command-line tool for converting things.
+The input may be either objects or cpusets (bitmaps as reported by another hwloc-calc instance or by hwloc-distrib),
+that may be combined by addition, intersection or subtraction.
+The output kinds include:
+<ul>
+<li>a cpuset bitmap: This compact opaque representation of objects is useful for shell scripts etc.
+It may passed to hwloc command-line tools such as hwloc-calc or hwloc-bind,
+or to hwloc command-line options such as <tt>lstopo \--restrict</tt>.</li>
+<li>the amount of the equivalent hwloc objects from a specific type, or the list of their indexes.
+This is useful for iterating over all similar objects (for instance all cores) within a given
+part of a platform.</li>
+<li>a hierarchical description of objects,
+for instance a thread index within a core within a package.
+This gives a better view of the actual location of an object.</li>
+</ul>
-hwloc-calc generates bitmap strings from given hardware objects with
-the ability to aggregate them, intersect them, and more. hwloc-calc
-generally uses the same syntax than hwloc-bind, but multiple instances
-may be composed to generate complex combinations.
+Moreover, input and/or output may be use either physical/OS object
+indexes or as hwloc's logical object indexes.
+It eases cooperation with external tools such as taskset or numactl
+by exporting hwloc specifications into list of processor or NUMA node
+physical indexes.
+See also \ref faq_indexes.
-Note that hwloc-calc can also generate lists of logical processors or
-NUMA nodes that are convenient to pass to some external tools such as
-taskset or numactl.
\section cli_hwloc_info hwloc-info
-hwloc-info dumps information about the given objects.
+hwloc-info dumps information about the given objects, as well as all its specific attributes.
It is intended to be used with tools such as grep for filtering
certain attribute lines.
-When no object is specified, hwloc-info prints a summary of the topology.
+When no object is specified, or when <tt>\--topology</tt> is passed,
+hwloc-info prints a summary of the topology.
+When <tt>\--support</tt> is passed, hwloc-info lists the supported
+features for the topology.
+
\section cli_hwloc_distrib hwloc-distrib
-hwloc-distrib generates a set of bitmap strings that are uniformly
+hwloc-distrib generates a set of cpuset bitmaps that are uniformly
distributed across the machine for the given number of processes.
These strings may be used with hwloc-bind to run processes to maximize
their memory bandwidth by properly distributing them across the
machine.
+
\section cli_hwloc_ps hwloc-ps
hwloc-ps is a tool to display the bindings of processes that are
@@ -752,13 +772,6 @@ currently running on the local machine. By default, hwloc-ps only
lists processes that are bound; unbound process (and Linux kernel
threads) are not displayed.
-\section cli_hwloc_gather hwloc-gather-topology
-
-hwloc-gather-topology is a Linux-specific tool that saves the
-relevant topology files of the current machine into a tarball
-(and the corresponding lstopo output). These files may be used
-later (possibly offline) for simulating or debugging a machine
-without actually running on it.
\section cli_hwloc_distances hwloc-distances
@@ -769,6 +782,7 @@ prints matrices that cover the entire topology while
hwloc-distances also displays matrices that ignore part
of the topology.
+
\section cli_hwloc_annotate hwloc-annotate
hwloc-annotate may add object attributes such as string information
@@ -776,15 +790,15 @@ hwloc-annotate may add object attributes such as string information
It reads an input topology from a XML file and outputs
the annotated topology as another XML file.
-\section cli_hwloc_diffpatch hwloc-diff and hwloc-patch
+
+\section cli_hwloc_diffpatchcompress hwloc-diff, hwloc-patch and hwloc-compress-dir
hwloc-diff computes the difference between two topologies
and outputs it to another XML file.
+
hwloc-patch reads such a difference file and applies to
another topology.
-\section cli_hwloc_compressdir hwloc-compress-dir
-
hwloc-compress-dir compresses an entire directory of XML
files by using hwloc-diff to save the differences between
topologies instead of entire topologies.
@@ -805,6 +819,30 @@ It takes care of contacting the given list of remote hosts
assembling them with hwloc-assembler.
+\section cli_hwloc_dump_hwdata hwloc-dump-hwdata
+
+hwloc-dump-hwdata is a Linux and x86-specific tool that dumps
+(during boot, privileged) some topology and locality information
+from raw hardware files (SMBIOS and ACPI tables) to human-readable
+and world-accessible files that the hwloc library will later reuse.
+
+Currently only used on Intel Knights Landing Xeon Phi platforms.
+See \ref faq_knl_dump.
+
+See <tt>HWLOC_DUMPED_HWDATA_DIR</tt> in \ref envvar for details
+about the location of dumped files.
+
+
+\section cli_hwloc_gather hwloc-gather-topology
+
+hwloc-gather-topology is a Linux-specific tool that saves the
+relevant topology files of the current machine into a tarball
+(and the corresponding lstopo output).
+
+These files may be used later (possibly offline) for simulating
+or debugging a machine without actually running on it.
+
+
\page envvar Environment Variables
@@ -851,7 +889,7 @@ following environment variables.
<dt>HWLOC_THISSYSTEM=1</dt>
<dd>enforces the return value of hwloc_topology_is_thissystem(), as if
- HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM was set with hwloc_topology_set_flags().
+ ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM was set with hwloc_topology_set_flags().
It means that it makes hwloc assume that the selected backend provides the
topology for the system on which we are running, even if it is not the
OS-specific backend but the XML backend for instance.
@@ -951,6 +989,23 @@ following environment variables.
and which components are successfully loaded.
</dd>
+<dt>HWLOC_PLUGINS_BLACKLIST=filename1,filename2,...</dt>
+ <dd>prevents plugins from being loaded if their filename
+ (without path) is listed.
+ Plugin filenames may be found in verbose messages outputted
+ when HWLOC_PLUGINS_VERBOSE=1.
+ </dd>
+
+<dt>HWLOC_DUMPED_HWDATA_DIR=/path/to/dumped/files/</dt>
+ <dd>loads files dumped by <tt>hwloc-dump-hwdata</tt> (on Linux)
+ from the given directory.
+ The default dump/load directory is configured during build based
+ on \--runstatedir, \--localstatedir, and \--prefix options.
+ It usually points to <tt>/var/run/hwloc/</tt> in Linux distribution
+ packages, but it may also point to <tt>$prefix/var/run/hwloc/</tt>
+ when manually installing and only specifying \--prefix.
+ </dd>
+
<dt>HWLOC_COMPONENTS=list,of,components</dt>
<dd>forces a list of components to enable or disable.
Enable or disable the given comma-separated list of components
@@ -983,6 +1038,11 @@ following environment variables.
(all of them are <em>registered</em> at startup).
</dd>
+<dt>HWLOC_DEBUG_VERBOSE=0</dt>
+ <dd>disables all verbose messages that are enabled by default
+ when <tt>--enable-debug</tt> is passed to configure.
+ </dd>
+
</dl>
<!-- not documented:
@@ -992,8 +1052,10 @@ following environment variables.
HWLOC_LINUX_USE_CPUINFO
uses /proc/cpuinfo instead of sysfs.
may be useful in the doc for debugging?
+ HWLOC_KNL_NUMA_QUIRK
+ disables the KNL NUMA Cluster quirk in the linux backend
HWLOC_DEBUG_CHECK
- runs sanity checks during discovery, as if --enable-debug was passed but
+ runs sanity checks during discovery, as if \--enable-debug was passed but
without debug messages
may be useful in the doc for debugging?
HWLOC_HIDE_DEPRECATED
@@ -1008,6 +1070,9 @@ following environment variables.
HWLOC_NO_LIBXML_EXPORT
HWLOC_NO_LIBXML_IMPORT
forces the use of the nolibxml XML backend instead of libxml2 if available
+ HWLOC_XML_USERDATA_NOT_DECODED
+ do not decode base64 userdata on import,
+ and reexport it the same (used by tools for leaving userdata untouched)
-->
@@ -1025,9 +1090,9 @@ when they provide better binding support.
If the application does not want the CPU binding to change when
changing the memory policy, it needs to use the
-HWLOC_MEMBIND_NOCPUBIND flag to prevent hwloc from using OS functions
+::HWLOC_MEMBIND_NOCPUBIND flag to prevent hwloc from using OS functions
which would change the CPU binding. Additionally,
-HWLOC_CPUBIND_NOMEMBIND can be passed to CPU binding function to
+::HWLOC_CPUBIND_NOMEMBIND can be passed to CPU binding function to
prevent hwloc from using OS functions would change the memory binding
policy. Of course, using these flags will reduce hwloc's overall support for
binding, so their use is discouraged.
@@ -1077,7 +1142,8 @@ There are some examples under doc/examples/ in the source tree.
hwloc usually manipulates processing units and memory but it can also
discover I/O devices and report their locality as well.
This is useful for placing I/O intensive applications on cores near the
-I/O devices they use.
+I/O devices they use, or for gathering information about all platform
+components.
\section iodevices_enabling Enabling and requirements
@@ -1088,27 +1154,44 @@ to hwloc_topology_set_flags() before loading the topology.
Note that I/O discovery requires significant help from the operating system.
The pciaccess library (the development package is usually <tt>libpciaccess-devel</tt>
-or <tt>libpciaccess-dev</tt>) is needed to fully detect PCI devices and bridges,
-and the actual locality of these devices is only currently detected
-on Linux. Also, some operating systems require privileges for probing PCI
-devices, see \ref faq_privileged for details.
+or <tt>libpciaccess-dev</tt>) is needed to fully detect PCI devices and bridges.
+On Linux, PCI discovery may still be performed even if <tt>libpciaccess</tt> cannot
+be used. But it misses PCI device names.
+Moreover, some operating systems require privileges for probing PCI devices,
+see \ref faq_privileged for details.
-On Linux, PCI discovery may still be performed even
-if <tt>libpciaccess</tt> cannot be used.
-But it misses PCI device names.
+The actual locality of I/O devices is only currently detected on Linux.
+Other operating system will just reported I/O devices as being attached
+to the topology root object.
-\section iodevices_hierarchy I/O object hierarchy
+\section iodevices_objects I/O objects
When I/O discovery is enabled and supported, some additional objects
-(types <tt>::HWLOC_OBJ_BRIDGE</tt>, <tt>::HWLOC_OBJ_PCI_DEVICE</tt> and
-<tt>::HWLOC_OBJ_OS_DEVICE</tt>)
-are added to the topology as a child of the object they are close to.
-For instance, if a I/O Hub is connected to a package, the corresponding
-hwloc bridge object (and its PCI bridges and devices children) is inserted
-as a child of the corresponding hwloc package object.
-
-These new objects have neither CPU sets nor node sets (NULL pointers) because
-they are not directly usable by the user applications.
+are added to the topology.
+The corresponding I/O object types are:
+<ul><li>
+<tt>::HWLOC_OBJ_OS_DEVICE</tt> describes an operating-system-specific
+handle such as the <em>sda</em> drive or the <em>eth0</em> network interface.
+See \ref iodevices_osdev.
+</li><li>
+<tt>::HWLOC_OBJ_PCI_DEVICE</tt> and <tt>::HWLOC_OBJ_BRIDGE</tt> build up
+a PCI hierarchy made of devices and bridges.
+See \ref iodevices_pci.
+</li><li>
+<tt>::HWLOC_OBJ_MISC</tt> describes miscellaneous devices such as
+memory modules (DIMMs).
+These are neither PCI nor OS handles, therefore they appear as Misc objects.
+See \ref miscobjs_auto.
+</li></ul>
+
+hwloc tries to attach these new objects to normal objects
+(usually NUMA nodes) to match their actual physical location.
+For instance, if a I/O Hub is physically connected to a package,
+the corresponding hwloc bridge object (and its PCI bridges and devices children)
+is inserted as a child of the corresponding hwloc Package object.
+
+I/O objects also have neither CPU sets nor node sets (NULL pointers) because
+they are not directly usable by the user applications for binding.
Moreover I/O hierarchies may be highly complex (asymmetric trees of bridges).
So I/O objects are placed in specific levels with custom depths.
Their lists may still be traversed with regular helpers such as
@@ -1116,22 +1199,12 @@ hwloc_get_next_obj_by_type().
However, hwloc offers some dedicated helpers such as hwloc_get_next_pcidev()
and hwloc_get_next_osdev() for convenience (see \ref hwlocality_advanced_io).
-An I/O hierarchy is organized as follows:
-A hostbridge object ( <tt>::HWLOC_OBJ_BRIDGE</tt> object with upstream
-type <em>Host</em> and downstream type <em>PCI</em>) is attached below
-a regular object (usually the entire machine or a NUMA node).
-There may be multiple hostbridges in the machine, attached to
-different places, but all I/O devices are below one of them.
-Each hostbridge contains one or several children, either other bridges
-(usually PCI to PCI) or PCI devices (<tt>::HWLOC_OBJ_PCI_DEVICE</tt>).
-The number of bridges between the hostbridge and a PCI device depends
-on the machine and on the topology flags.
-
-\section iodevices_osdev Software devices
+\section iodevices_osdev OS devices
Although each PCI device is uniquely identified by its bus ID
-(e.g. 0000:01:02.3), the application can hardly find out which
-PCI device is actually used when manipulating software handle
+(e.g. 0000:01:02.3), a user-space application can hardly find out which
+PCI device it is actually using.
+Applications rather use software handles
(such as the <em>eth0</em> network interface,
the <em>sda</em> hard drive,
or the <em>mlx4_0</em> OpenFabrics HCA).
@@ -1139,15 +1212,14 @@ Therefore hwloc tries to add software devices
(<tt>::HWLOC_OBJ_OS_DEVICE</tt>, also known as OS devices)
below their PCI objects.
-hwloc first tries to discover the corresponding names,
-e.g. <em>eth0</em>, <em>sda</em> or <em>mlx4_0</em>,
-from the operating system.
+hwloc first tries to discover OS devices from the operating system,
+e.g. <em>eth0</em>, <em>sda</em> or <em>mlx4_0</em>.
However, this ability is currently only available on Linux for some
classes of devices.
hwloc then tries to discover software devices through additional
I/O components using external libraries.
-For instance proprietary graphics drivers do not offer any OS name,
+For instance proprietary graphics drivers do not expose any named OS device,
but hwloc may still create one OS object per software handle when
supported.
For instance the <tt>opencl</tt> and <tt>cuda</tt> components may
@@ -1157,22 +1229,22 @@ Here is a list of OS device objects commonly created by hwloc
components when I/O discovery is enabled and supported.
<ul>
-<li>Hard disks (HWLOC_OBJ_OSDEV_BLOCK)
+<li>Hard disks (::HWLOC_OBJ_OSDEV_BLOCK)
<ul>
<li><em>sda</em> (Linux component)</li>
</ul>
</li>
-<li>Network interfaces (HWLOC_OBJ_OSDEV_NETWORK)
+<li>Network interfaces (::HWLOC_OBJ_OSDEV_NETWORK)
<ul>
<li><em>eth0</em>, <em>wlan0</em>, <em>ib0</em> (Linux component)</li>
</ul>
</li>
-<li>OpenFabrics HCAs (HWLOC_OBJ_OSDEV_OPENFABRICS)
+<li>OpenFabrics (InfiniBand, Omni-Path, usNIC, etc) HCAs (::HWLOC_OBJ_OSDEV_OPENFABRICS)
<ul>
- <li><em>mlx4_0</em>, <em>qib0</em> (Linux component)</li>
+ <li><em>mlx5_0</em>, <em>hfi1_0</em>, <em>qib0</em>, <em>usnic_0</em> (Linux component)</li>
</ul>
</li>
-<li>GPUs (HWLOC_OBJ_OSDEV_GPU)
+<li>GPUs (::HWLOC_OBJ_OSDEV_GPU)
<ul>
<li><em>nvml0</em> for the first NVML device
(NVML component, using the NVIDIA Management Library)</li>
@@ -1180,7 +1252,7 @@ components when I/O discovery is enabled and supported.
(GL component, using the NV-CONTROL X extension library, NVCtrl)</li>
</ul>
</li>
-<li>Co-Processors (HWLOC_OBJ_OSDEV_COPROC)
+<li>Co-Processors (::HWLOC_OBJ_OSDEV_COPROC)
<ul>
<li><em>opencl0d0</em> for the first device of the first OpenCL platform,
<em>opencl1d3</em> for the fourth device of the second OpenCL platform
@@ -1191,9 +1263,9 @@ components when I/O discovery is enabled and supported.
(Linux component)</li>
</ul>
</li>
-<li>DMA engine channel (HWLOC_OBJ_OSDEV_DMA)
+<li>DMA engine channel (::HWLOC_OBJ_OSDEV_DMA)
<ul>
- <li><em>dma0chan0</em> (Linux component)</li>
+ <li><em>dma0chan0</em> (Linux component) when full I/O discovery is enabled (::HWLOC_TOPOLOGY_FLAG_WHOLE_IO)</li>
</ul>
</li>
</ul>
@@ -1206,6 +1278,20 @@ Note that some PCI devices may contain multiple software devices
See also \ref interoperability for managing these devices without
considering them as hwloc objects.
+\section iodevices_pci PCI devices and bridges
+
+A PCI hierarchy is usually organized as follows:
+A hostbridge object ( <tt>::HWLOC_OBJ_BRIDGE</tt> object with upstream
+type <em>Host</em> and downstream type <em>PCI</em>) is attached below
+a normal object (usually the entire machine or a NUMA node).
+There may be multiple hostbridges in the machine, attached to
+different places, but all PCI devices are below one of them.
+
+Each hostbridge contains one or several children, either other bridges
+(usually PCI to PCI) or PCI devices (<tt>::HWLOC_OBJ_PCI_DEVICE</tt>).
+The number of bridges between the hostbridge and a PCI device depends
+on the machine and on the topology flags.
+
\section iodevices_consult Consulting I/O devices and binding
I/O devices may be consulted by traversing the topology manually
@@ -1227,7 +1313,7 @@ a NUMA node with the same locality.
Command-line tools are also aware of I/O devices.
lstopo displays the interesting ones by default
-(passing <tt>--no-io</tt> disables it).
+(passing <tt>\--no-io</tt> disables it).
hwloc-calc and hwloc-bind may manipulate I/O devices specified
by PCI bus ID or by OS device name.
@@ -1262,7 +1348,7 @@ are an unused IDE controller (no disk attached)
and a graphic card (no corresponding software device reported
to the user by the operating system).
-On the contrary, it should be noted three different software
+On the contrary, it should be noted that three different software
devices were found for the last PCI device (<em>PCI 15b3:634a</em>).
Indeed this OpenFabrics HCA PCI device object contains one
one OpenFabrics software device (<em>mlx4_0</em>) and two virtual
@@ -1307,7 +1393,7 @@ Machine (24GB)
\page miscobjs Miscellaneous objects
hwloc topologies may be annotated with Misc objects
-(of type <tt>HWLOC_OBJ_MISC</tt>)
+(of type <tt>::HWLOC_OBJ_MISC</tt>)
either automatically or by the user.
This is an flexible way to annotate topologies with
large sets of information since Misc objects may be inserted
@@ -1325,8 +1411,10 @@ hwloc only uses Misc objects when other object types are not sufficient.
This currently includes:
<ul>
<li>
-Memory devices (DIMMs), on Linux when privileged, and when I/O discovery is enabled.
-These objects have a <tt>Type</tt> info attribute of value <tt>MemoryDevice</tt>.
+Memory modules (DIMMs), on Linux when privileged and when
+<tt>dmi-sysfs</tt> is supported by the kernel,
+and when I/O discovery is enabled.
+These objects have a <tt>Type</tt> info attribute of value <tt>MemoryModule</tt>.
They are currently always attached to the root object.
Their attributes describe the DIMM vendor, model, etc.
<tt>lstopo -v</tt> displays them as:
@@ -1335,7 +1423,7 @@ Misc(MemoryModule) (P#1 Type=MemoryModule DeviceLocation="Bottom-Slot 2(right)"
\endcode
</li>
<li>
-Displaying process binding in <tt>lstopo --top</tt>.
+Displaying process binding in <tt>lstopo \--top</tt>.
These objects have a <tt>Type</tt> info attribute of value <tt>Process</tt>
and a name attribute made of their PID and program name.
They are attached below the object they are bound to.
@@ -1549,7 +1637,7 @@ Each object contains a list of such pairs that may be consulted
manually (looking at the object <tt>infos</tt> array field)
or using the hwloc_obj_get_info_by_name().
The user may additionally add new key-value pairs to any object using
-::hwloc_obj_add_info() or the \ref cli_hwloc_annotate program.
+hwloc_obj_add_info() or the \ref cli_hwloc_annotate program.
Here is a non-exhaustive list of attributes that may be automatically
added by hwloc (with the usual corresponding object in parentheses).
@@ -1605,6 +1693,21 @@ Currently only available on Linux.
Usually added to Package objects, but can be in Machine instead if
hwloc failed to discover any package.
</dd>
+<dt>MemoryMode, ClusterMode (topology root object)</dt>
+<dd>
+Intel Knights Landing configuration modes, only available if
+hwloc-dump-hwdata was used (see \ref faq_knl_dump).
+The memory mode may be <em>Cache</em>, <em>Flat</em>,
+<em>Hybrid50</em> (half the MCDRAM is used as a cache)
+or <em>Hybrid25</em> (25% of MCDRAM as cache).
+The cluster mode may be <em>Quadrant</em>, <em>Hemisphere</em>, <em>All2All</em>,
+<em>SNC2</em> or <em>SNC4</em>.
+See doc/examples/get-knl-modes.c in the source directory for an example of retrieving these attributes.
+</dd>
+<dt>Inclusive (Caches)</dt>
+<dd>The inclusiveness of a cache (1 if inclusive, 0 otherwise).
+Currently only available on x86 processors.
+</dd>
<dt>PCIVendor, PCIDevice (PCI devices and bridges)</dt>
<dd>The vendor and device names of the PCI device.
</dd>
@@ -1612,7 +1715,7 @@ hwloc failed to discover any package.
<dd>The name/number of the physical slot where the PCI device is plugged.
</dd>
<dt>Vendor, Model, Revision, SerialNumber</dt>
-<dd>The vendor and model names, and revision and serial numbers of a Block OS device.
+<dd>The vendor and model names, revision, and serial number of a Block OS device.
</dd>
<dt>LinuxDeviceID</dt>
<dd>The major/minor device number such as 8:0 on Linux for a Block OS device.
@@ -1680,14 +1783,15 @@ and GID #1 of port #3.
<dt>Type</dt>
<dd>A better type name than the usual one.
This may be used to specify where Groups come from.
-For instance Linux s390 <em>books</em> appear as Groups of type <em>Book</em>.
+For instance Linux S/390 <em>books</em> appear as Groups of type <em>Book</em>
+(see also \ref faq_groups).
Block OS devices may have a Type of "Disk", "Tape", "Removable Media Device"
or "Other".
The Type attribute value is displayed instead of the default object type name in lstopo.
</dd>
-<dt>Vendor, AssetTag, PartNumber, DeviceLocation, BankLocation (MemoryDevice Misc objects)</dt>
+<dt>Vendor, AssetTag, PartNumber, DeviceLocation, BankLocation (MemoryModule Misc objects)</dt>
<dd>
-Information about memory devices (DIMMs) extracted from SMBIOS.
+Information about memory modules (DIMMs) extracted from SMBIOS.
</dd>
<dt>hwlocVersion</dt>
<dd>The version number of the hwloc library that was used to generate
@@ -1729,14 +1833,14 @@ The lstopo program can also serve as a XML topology export tool.
XML topologies may then be reloaded later with hwloc_topology_set_xml()
and hwloc_topology_set_xmlbuffer().
-The XMLFILE environment variable also tells hwloc to load the topology
+The HWLOC_XMLFILE environment variable also tells hwloc to load the topology
from the given XML file.
\note Loading XML topologies disables binding because the loaded
topology may not correspond to the physical machine that loads it.
This behavior may be reverted by asserting that loaded file really
matches the underlying system with the HWLOC_THISSYSTEM environment
-variable or the HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM topology flag.
+variable or the ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM topology flag.
\note hwloc also offers the ability to export/import \ref hwlocality_diff.
@@ -1763,7 +1867,7 @@ headers are available (the relevant development package is usually
<tt>libxml2-devel</tt> or <tt>libxml2-dev</tt>).
If libxml2 is not available at configure time,
-or if <tt>--disable-libxml2</tt> is passed, hwloc falls back to a
+or if <tt>\--disable-libxml2</tt> is passed, hwloc falls back to a
custom backend.
Contrary to the aforementioned full XML backend with libxml2, this
minimalistic XML backend cannot be guaranteed to work with external
@@ -1776,9 +1880,9 @@ any external dependency.
If libxml2 is available but the core hwloc library should not directly
depend on it, the libxml2 support may be built as a dynamicall-loaded
plugin.
-One should pass <tt>--enable-plugins</tt> to enable plugin support
+One should pass <tt>\--enable-plugins</tt> to enable plugin support
(when supported) and build as plugins all component that support it.
-Or pass <tt>--enable-plugins=xml_libxml</tt> to only build this
+Or pass <tt>\--enable-plugins=xml_libxml</tt> to only build this
libxml2 support as a plugin.
\section xml_errors XML import error management
@@ -1852,9 +1956,7 @@ if a Machine level is specified in the string.
Cache level depths are automatically chosen by hwloc (only a L2 first,
then a L1 under it, then L3 above, then L4 etc.) unless they are specified.
-Memory and cache sizes are also automatically chosen.
-The only way to modifying them is to export to XML and manually modify
-the file.
+Memory and cache sizes are also automatically chosen if needed.
Each item may be followed parentheses containing a list of
space-separated attributes. For instance:
@@ -1887,7 +1989,7 @@ space-separated attributes. For instance:
Aside from lstopo, the hwloc programming interface offers the same
ability by passing the synthetic description string to
-::hwloc_topology_set_synthetic() before hwloc_topology_load().
+hwloc_topology_set_synthetic() before hwloc_topology_load().
Synthetic topologies are created by the <tt>synthetic</tt> component.
This component may be enabled by force by setting the HWLOC_COMPONENTS
@@ -1897,12 +1999,12 @@ environment variable to something such as
Loading a synthetic topology disables binding support since the
topology usually does not match the underlying hardware.
Binding may be reenabled as usual by setting HWLOC_THISSYSTEM=1 in the
-environment or by setting the HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM
+environment or by setting the ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM
topology flag.
\section synthetic_export Exporting a topology as a synthetic string
-The function ::hwloc_topology_export_synthetic() may export
+The function hwloc_topology_export_synthetic() may export
a topology as a synthetic string.
It offers a convenient way to quickly describe the contents of a machine.
The lstopo tool may also perform such an export by forcing the output format.
@@ -1914,15 +2016,15 @@ Package:1 Cache:1 Cache:2 Cache:1 Cache:1 Core:1 PU:2
The exported string may be passed back to hwloc for recreating
another similar topology.
-The entire tree will be similar, but some special attributes such
-processort types may be missing.
+The entire tree will be similar, but some attributes such as
+the processor model will be missing.
Such an export is only possible if the topology is totally symmetric,
which means the <tt>symmetric_subtree</tt> field of the root object
is set.
This usually implies that I/O objects are disabled since attaching I/O
busses often cause the topology to become asymmetric.
-Passing <tt>--no-io</tt> to lstopo is therefore often useful to make
+Passing <tt>\--no-io</tt> to lstopo is therefore often useful to make
synthetic export work (as well as not passing any I/O topology flag
before exporting with ::hwloc_topology_export_synthetic()).
@@ -2045,7 +2147,7 @@ enabled for the current topology.
string in fixed-size subsets and separates them with commas).
To ease interoperability, hwloc offers routines to convert
hwloc CPU sets from/to taskset-specific string format.
- Most hwloc command-line tools also support the <tt>--taskset</tt>
+ Most hwloc command-line tools also support the <tt>\--taskset</tt>
option to manipulate taskset-specific strings.
</dd>
@@ -2057,23 +2159,23 @@ enabled for the current topology.
Like most libraries that mainly fill data structures, hwloc is not
thread safe but rather reentrant: all state is held in a
-\ref hwloc_topology_t instance without mutex protection. That means, for
+::hwloc_topology_t instance without mutex protection. That means, for
example, that two threads can safely operate on and modify two
-different \ref hwloc_topology_t instances, but they should not
+different ::hwloc_topology_t instances, but they should not
simultaneously invoke functions that modify the <em>same</em>
instance. Similarly, one thread should not modify a
-\ref hwloc_topology_t instance while another thread is reading or
+::hwloc_topology_t instance while another thread is reading or
traversing it. However, two threads can safely read or traverse the
-same \ref hwloc_topology_t instance concurrently.
+same ::hwloc_topology_t instance concurrently.
When running in multiprocessor environments, be aware that proper thread
synchronization and/or memory coherency protection is needed to pass hwloc
-data (such as \ref hwloc_topology_t pointers) from one processor
+data (such as ::hwloc_topology_t pointers) from one processor
to another (e.g., a mutex, semaphore, or a memory barrier).
Note that this is not a hwloc-specific requirement, but it is worth
mentioning.
-For reference, \ref hwloc_topology_t modification operations include
+For reference, ::hwloc_topology_t modification operations include
(but may not be limited to):
<dl>
@@ -2092,7 +2194,7 @@ For reference, \ref hwloc_topology_t modification operations include
<dd><tt>hwloc_topology_insert_misc_object_by_*</tt> (see
\ref hwlocality_tinker) may modify the topology significantly by adding
objects inside the tree, changing the topology depth, etc.
- <tt>hwloc_topology_restrict</tt> modifies the topology even more
+ <tt>hwloc_topology_restrict()</tt> modifies the topology even more
dramatically by removing some objects.
Although references to former objects <em>may</em> still be valid
@@ -2215,7 +2317,7 @@ or <tt>hwloc_topology_set_synthetic()</tt>.
Components may optionally be built as plugins so that the hwloc core
library does not directly depend on their dependencies (for instance
the <tt>libpciaccess</tt> library).
-Plugin support may be enabled with the <tt>--enable-plugins</tt>
+Plugin support may be enabled with the <tt>\--enable-plugins</tt>
configure option.
All components buildable as plugins will then be built as plugins.
The configure option may be given a comma-separated list of component
@@ -2224,7 +2326,8 @@ names to specify the exact list of components to build as plugins.
Plugins are built as independent dynamic libraries that are installed
in <tt>$libdir/hwloc</tt>.
All plugins found in this directory are loaded during
-<tt>topology_init()</tt>.
+<tt>topology_init()</tt>
+(unless blacklisted in <tt>HWLOC_PLUGINS_BLACKLIST</tt>, see \ref envvar).
A specific list of directories (colon-separated) to scan may be
specified in the <tt>HWLOC_PLUGINS_PATH</tt> environment variable.
@@ -2245,10 +2348,10 @@ anything under the <tt>include/hwloc</tt> subdirectory) and nothing from the
\subsection plugins_disc_basic Basics of discovery components
-Each discovery component is defined by a <tt>hwloc_disc_component</tt>
+Each discovery component is defined by a <tt>::hwloc_disc_component</tt>
structure which contains an <tt>instantiate()</tt> callback.
This function is invoked when this component is actually used by a topology.
-It fills a new <tt>hwloc_backend</tt> structure that usually contains
+It fills a new <tt>::hwloc_backend</tt> structure that usually contains
<tt>discover()</tt> and/or <tt>notify_new_object()</tt> callbacks taking
care of the actual topology discovery.
@@ -2258,16 +2361,16 @@ This offers a way for third-party plugins to override existing components.
\subsection plugins_disc_register Registering a new discovery component
-Registering components to the hwloc core relies on a <tt>hwloc_component</tt> structure.
-Its <tt>data</tt> field points to the previously defined <tt>hwloc_disc_component</tt>
-structure while its <tt>type</tt> should be HWLOC_COMPONENT_TYPE_DISC.
+Registering components to the hwloc core relies on a <tt>::hwloc_component</tt> structure.
+Its <tt>data</tt> field points to the previously defined <tt>::hwloc_disc_component</tt>
+structure while its <tt>type</tt> should be ::HWLOC_COMPONENT_TYPE_DISC.
This structure should be named <tt>hwloc_<name>_component</tt>.
The configure script should be modified to add <tt><name></tt>
to its <tt>hwloc_components</tt> shell variable so that the component
is actually available.
-\note The symbol name of the <tt>hwloc_component</tt> structure
+\note The symbol name of the <tt>::hwloc_component</tt> structure
is independent of the name of the discovery component mentioned
in the previous section.
@@ -2310,7 +2413,7 @@ environment variable (see \ref envvar).
<dt>bgq</dt>
<dd>
This component is specific to IBM BlueGene/Q compute node (running CNK).
- It is built and enabled by default when <tt>--host=powerpc64-bgq-linux</tt>
+ It is built and enabled by default when <tt>\--host=powerpc64-bgq-linux</tt>
is passed to configure (see \ref faq_bgq).
</dd>
<dt>no_os</dt>
@@ -2574,159 +2677,95 @@ than any system-provided copy of hwloc.
-\page faq Frequently Asked Questions
-
-\section faq_xml I do not want hwloc to rediscover my enormous machine topology every time I rerun a process
-
-Although the topology discovery is not expensive on common machines,
-its overhead may become significant when multiple processes repeat
-the discovery on large machines (for instance when starting one process
-per core in a parallel application).
-The machine topology usually does not vary much, except if some cores
-are stopped/restarted or if the administrator restrictions are modified.
-Thus rediscovering the whole topology again and again may look useless.
-
-For this purpose, hwloc offers XML import/export features. It lets you
-save the discovered topology to a file (for instance with the lstopo program)
-and reload it later by setting the HWLOC_XMLFILE environment variable.
-The HWLOC_THISSYSTEM environment variable should also be set to 1 to
-assert that loaded file is really the underlying system.
-
-Loading a XML topology is usually much faster than querying multiple
-files or calling multiple functions of the operating system.
-It is also possible to manipulate such XML files with the C programming
-interface, and the import/export may also be directed to memory buffer
-(that may for instance be transmitted between applications through a package).
-See also \ref xml.
-
-
-\section faq_multitopo How many topologies may I use in my program?
-
-hwloc lets you manipulate multiple topologies at the same time.
-However these topologies consume memory and system resources
-(for instance file descriptors) until they are destroyed.
-It is therefore discouraged to open the same topology multiple
-times.
-
-Sharing a single topology between threads is easy (see \ref threadsafety)
-since the vast majority of accesses are read-only.
-If multiple topologies of different (but similar) nodes are needed
-in your program, have a look at \ref faq_diff.
-
-
-\section faq_diff How to avoid memory waste when manipulating multiple similar topologies?
-
-hwloc does not share information between topologies.
-If multiple similar topologies are loaded in memory, for instance
-the topologies of different identical nodes of a cluster,
-lots of information will be duplicated.
-
-hwloc/diff.h (see also \ref hwlocality_diff) offers the ability to
-compute topology differences, apply or unapply them, or export/import
-to/from XML.
-However this feature is limited to basic differences such as attribute changes.
-It does not support complex modifications such as adding or removing some objects.
-\section faq_slow_lstopo Why is lstopo slow?
+\page faq Frequently Asked Questions
-lstopo enables most hwloc discovery flags by default so that the output
-topology is as precise as possible (while hwloc disables many of them
-by default).
-This includes I/O device discovery through PCI libraries as well as external
-libraries such as NVML.
-To speed up lstopo, you may disable such features with command-line
-options such as <tt>--no-io</tt>.
-When NVIDIA GPU probing is enabled with CUDA or NVML, one should make sure that
-the <em>Persistent</em> mode is enabled (with <tt>nvidia-smi -pm 1</tt>)
-to avoid significant GPU initialization overhead.
+\section faq1 Concepts
-When AMD GPU discovery is enabled with OpenCL and hwloc is used remotely
-over ssh, some spurious round-trips on the network may significantly
-increase the discovery time.
-Forcing the <tt>DISPLAY</tt> environment variable to the remote X server
-display (usually <tt>:0</tt>) instead of only setting the <tt>COMPUTE</tt>
-variable may avoid this.
-Also remember that these components may be disabled at build-time with
-configure flags such as <tt>--disable-opencl</tt>, <tt>--disable-cuda</tt> or <tt>--disable-nvml</tt>,
-and at runtime with the environment variable
-<tt>HWLOC_COMPONENTS=-opencl,cuda,nvml</tt>.
+\subsection faq_why I only need binding, why should I use hwloc ?
-If loading topologies is slow because the machine contains tons of
-processors, one should also consider using XML (see \ref faq_xml).
+hwloc is its portable API that works on a variety of operating
+systems.
+It supports binding of threads, processes and memory buffers
+(see \ref hwlocality_cpubinding and \ref hwlocality_membinding).
+Even if some features are not supported on some systems,
+using hwloc is much easier than reimplementing your own portability layer.
+Moreover, hwloc provides knowledge of cores and hardware threads.
+It offers easy ways to bind tasks to individual hardware threads,
+or to entire multithreaded cores, etc.
+See \ref faq_smt.
+Most alternative software for binding do not even know whether each
+core is single-threaded, multithreaded or hyper-threaded.
+They would bind to individual threads without any way to know whether
+multiple tasks are in the same physical core.
-\section faq_os_error What should I do when hwloc reports "operating system" warnings?
-
-When the operating system reports invalid locality information (because
-of either software or hardware bugs), hwloc may fail to insert some objects
-in the topology because they cannot fit in the already built tree of resources.
-If so, hwloc will report a warning like the following.
-The object causing this error is ignored, the discovery continues but the
-resulting topology will miss some objects and may be asymmetric
-(see also \ref faq_asymmetric).
+However, using hwloc comes with an overhead since a topology must
+be loaded before gathering information and binding tasks or memory.
+This overhead may be reduced by filtering useless information out
+of the topology.
+For instance the following code builds a topology that may only
+contain Cores, hardware threads (PUs), and NUMA nodes
+(Packages, Caches and Group objects are ignored).
\verbatim
-****************************************************************************
-* hwloc has encountered what looks like an error from the operating system.
-*
-* L3 (cpuset 0x000003f0) intersects with NUMANode (P#0 cpuset 0x0000003f) without inclusion!
-* Error occurred in topology.c line 940
-*
-* Please report this error message to the hwloc user's mailing list,
-* along with the output from the hwloc-gather-topology script.
-****************************************************************************
+hwloc_topology_t topology;
+hwloc_topology_init(&topology);
+hwloc_topology_ignore_type(topology, HWLOC_OBJ_PACKAGE);
+hwloc_topology_ignore_type(topology, HWLOC_OBJ_CACHE);
+hwloc_topology_ignore_type(topology, HWLOC_OBJ_GROUP);
+hwloc_topology_load(topology);
\endverbatim
-As explained in the message, reporting this issue to the hwloc developers
-(by sending the tarball that is generated by the hwloc-gather-topology script
- on this platform) is a good way to make sure that this is a software
-(operating system) or hardware bug (BIOS, etc).
-These errors are common on large AMD platforms because several BIOS releases
-fail to properly report L3 caches. In the above example, the hardware reports
-a L3 cache that is shared by 2 cores in the first NUMA node and 4 cores
-in the second NUMA node. That's wrong, it should actually be shared by all 6
-cores in a single NUMA node.
-The resulting topology will miss some L3 caches.
-If your application not care about cache sharing, or if you do not plan to
-request cache-aware binding in your process launcher, you may likely ignore
-this error.
+\subsection faq_indexes Should I use logical or physical/OS indexes? and how?
+
+One of the original reasons why hwloc was created is that <b>physical/OS indexes</b>
+(<tt>obj->os_index</tt>) are often crazy and unpredictable:
+logical processors numbers are usually
+non-contiguous (processors 0 and 1 are not physically close), they vary from
+one machine to another, and may even change after a BIOS or system update.
+This numbers make task placement hardly portable.
+Moreover some objects have no physical/OS numbers (caches), and some objects
+have non-unique numbers (core numbers are only unique within a socket).
+Physical/OS indexes are only guaranteed to exist and be unique for PU
+and NUMA nodes.
+
+hwloc therefore introduces <b>logical indexes</b> (<tt>obj->logical_index</tt>)
+which are portable, contiguous and logically ordered
+(based on the resource organization in the locality tree).
+In general, one should only use logical indexes and just let hwloc do the
+internal conversion when really needed (when talking to the OS and hardware).
+
+hwloc developers recommends that users do not use physical/OS indexes
+unless they really know what they are doing.
+The main reason for still using physical/OS indexes is when interacting with
+non-hwloc tools such as numactl or taskset, or when reading hardware information
+from raw sources such as /proc/cpuinfo.
+
+lstopo options <tt>-l</tt> and <tt>-p</tt> may be used to switch between
+logical indexes (prefixed with <tt>L#</tt>) and physical/OS indexes (<tt>P#</tt>).
+Converting one into the other may also be achieved with hwloc-calc which may
+manipulate either logical or physical indexes as input or output.
+See also \ref cli_hwloc_calc.
-Some platforms report similar warnings about conflicting Packages and NUMANodes.
-Upgrading the BIOS and/or the operating system may help.
-Otherwise, the warning may be hidden by setting HWLOC_HIDE_ERRORS=1
-in your environment.
-
-
-\section faq_privileged Does hwloc require privileged access?
-
-hwloc discovers the topology by querying the operating system.
-Some minor features may require privileged access to the operation
-system.
-For instance memory device and PCI link speed discovery on Linux
-is reserved to root,
-and the entire PCI discovery on FreeBSD requires access to the
-/dev/pci special file.
-
-To workaround this limitation, it is recommended to export the
-topology as a XML file generated by the administrator (with the
-lstopo program) and make it available to all users
-(see \ref xml).
-It will offer all discovery information to any application without
-requiring any privileged access anymore.
-Only the necessary hardware characteristics will be exported, no
-sensitive information will be disclosed through this XML export.
-
-This XML-based model also has the advantage of speeding up the
-discovery because reading a XML topology is usually much faster
-than querying the operating system again.
+\verbatim
+# Convert PU with physical number 3 into logical number
+$ hwloc-calc -I pu --physical-input --logical-output pu:3
+5
+
+# Convert a set of NUMA nodes from logical to physical
+# (beware that the output order may not match the input order)
+$ hwloc-calc -I numa --logical-input --physical-output numa:2-3 numa:7
+0,2,5
+\endverbatim
-\section faq_onedim hwloc only has a one-dimensional view of the architecture, it ignores distances
+\subsection faq_onedim hwloc only has a one-dimensional view of the architecture, it ignores distances
hwloc places all objects in a tree. Each level is a one-dimensional
view of a set of similar objects. All children of the same object (siblings)
@@ -2744,7 +2783,78 @@ the latencies between any pairs of NUMA nodes if the BIOS and/or operating
system reports them.
-\section faq_nosmt What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. ?
+\subsection faq_groups What are these Group objects in my topology?
+
+hwloc comes with a set of predefined object types (Core, Package, NUMA node, Caches)
+that match the vast majority of hardware platforms.
+The ::HWLOC_OBJ_GROUP type was designed for cases where this set is not sufficient.
+Groups may be used anywhere to add more structure information to the topology,
+for instance to show that 2 out of 4 NUMA nodes are actually closer than the others.
+When applicable, the <tt>Type</tt> info attribute describes why a Group
+was actually added (see also \ref attributes_info).
+
+hwloc currently uses Groups for the following reasons:
+<ul>
+<li>AMD dual-core compute units (<tt>Type=ComputeUnit</tt>, in the x86 backend),
+ but these objects are usually merged with the L2 caches.</li>
+<li>Intel x2APIC non-core and non-package levels (in the x86 backend).</li>
+<li>Windows processor groups.</li>
+<li>IBM S/390 "Books" on Linux (<tt>Type=Book</tt>).</li>
+<li>AIX unknown hierarchy levels.</li>
+<li>Distance-based groups made of close objects.</li>
+<li>I/O parents when I/O locality does not match any existing object.</li>
+</ul>
+
+
+\subsection faq_asymmetric What happens if my topology is asymmetric?
+
+hwloc supports asymmetric topologies even if most platforms are usually
+symmetric. For example, there could be different types of processors
+in a single machine, each with different numbers of cores, symmetric
+multithreading, or levels of caches.
+
+In practice, asymmetric topologies mostly appear when intermediate groups
+are added for I/O affinity: on a 4-package machine, an I/O bus may be
+connected to 2 packages. These packages are below an additional Group
+object, while the other packages are not (see also \ref faq_groups).
+
+Before hwloc v2.0, hwloc_topology_ignore_type_keep_structure() and
+hwloc_topology_ignore_all_keep_structure() may also make topologies
+assymetric by removing parts of levels, especially when part of the
+machine is disallowed by administrator restrictions
+(e.g. Linux cgroups).
+
+To understand how hwloc manages such cases, one should first remember
+the meaning of levels and cousin objects. All objects of the same type
+are gathered as horizontal levels with a given depth. They are also
+connected through the cousin pointers of the ::hwloc_obj structure.
+Some types, such as Caches or Groups, are annotated with a depth or
+level attribute (for instance L2 cache or Group1). Moreover caches
+have a type attribute (for instance L1i or L1d). Such
+attributes are also taken in account when gathering objects as
+horizontal levels. To be clear: there will be one level for L1i
+caches, another level for L1d caches, another one for L2, etc.
+
+If the topology is asymmetric (e.g., if a group is missing above some
+processors), a given horizontal level will still exist if there
+exist any objects of that type. However, some branches of the overall
+tree may not have an object located in that horizontal level. Note
+that this specific hole within one horizontal level does not imply
+anything for other levels. All objects of the same type are gathered
+in horizontal levels even if their parents or children have different
+depths and types.
+
+See the diagram in \ref termsanddefs for a graphical representation
+of such topologies.
+
+Moreover, it is important to understand that a same parent object may
+have children of different types (and therefore, different
+depths). <strong>These children are therefore siblings (because they
+have the same parent), but they are <em>not</em> cousins (because they
+do not belong to the same horizontal level).</strong>
+
+
+\subsection faq_nosmt What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?
hwloc creates one PU (processing unit) object per hardware thread.
If your machine supports symmetric multithreading, for instance Hyper-Threading,
@@ -2781,7 +2891,7 @@ $ lstopo -
\endverbatim
-\section faq_smt How may I ignore symmetric multithreading, hyper-threading, etc. ?
+\subsection faq_smt How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?
First, see \ref faq_nosmt for more information about multithreading.
@@ -2832,41 +2942,64 @@ hello from a single thread on core #3
\endverbatim
-\section faq_asymmetric What happens if my topology is asymmetric?
-hwloc supports asymmetric topologies even if most platforms are usually
-symmetric. For example, there may be different types of processors
-in a single machine, each with different numbers of cores, symmetric
-multithreading, or levels of caches.
+\section faq2 Advanced
-To understand how hwloc manages such cases, one should first remember
-the meaning of levels and cousin objects. All objects of the same type
-are gathered as horizontal levels with a given depth. They are also
-connected through the cousin pointers of the hwloc_obj structure.
-Some types, such as Caches or Groups, are annotated with a depth or
-level attribute (for instance L2 cache or Group1). Moreover caches
-have a type attribute (for instance L1i or L1d). Such
-attributes are also taken in account when gathering objects as
-horizontal levels. To be clear: there will be one level for L1i
-caches, another level for L1d caches, another one for L2, etc.
-If the topology is asymmetric (e.g., if a cache is missing in one of
-the processors), a given horizontal level will still exist if there
-exist any objects of that type. However, some branches of the overall
-tree may not have an object located in that horizontal level. Note
-that this specific hole within one horizontal level does not imply
-anything for other levels. All objects of the same type are gathered
-in horizontal levels even if their parents or children have different
-depths and types.
+\subsection faq_xml I do not want hwloc to rediscover my enormous machine topology every time I rerun a process
-Moreover, it is important to understand that a same parent object may
-have children of different types (and therefore, different
-depths). <strong>These children are therefore siblings (because they
-have the same parent), but they are <em>not</em> cousins (because they
-do not belong to the same horizontal levels).</strong>
+Although the topology discovery is not expensive on common machines,
+its overhead may become significant when multiple processes repeat
+the discovery on large machines (for instance when starting one process
+per core in a parallel application).
+The machine topology usually does not vary much, except if some cores
+are stopped/restarted or if the administrator restrictions are modified.
+Thus rediscovering the whole topology again and again may look useless.
+For this purpose, hwloc offers XML import/export features. It lets you
+save the discovered topology to a file (for instance with the lstopo program)
+and reload it later by setting the HWLOC_XMLFILE environment variable.
+The HWLOC_THISSYSTEM environment variable should also be set to 1 to
+assert that loaded file is really the underlying system.
+
+Loading a XML topology is usually much faster than querying multiple
+files or calling multiple functions of the operating system.
+It is also possible to manipulate such XML files with the C programming
+interface, and the import/export may also be directed to memory buffer
+(that may for instance be transmitted between applications through a package).
+See also \ref xml.
-\section faq_annotate How do I annotate the topology with private notes?
+
+\subsection faq_multitopo How many topologies may I use in my program?
+
+hwloc lets you manipulate multiple topologies at the same time.
+However these topologies consume memory and system resources
+(for instance file descriptors) until they are destroyed.
+It is therefore discouraged to open the same topology multiple
+times.
+
+Sharing a single topology between threads is easy (see \ref threadsafety)
+since the vast majority of accesses are read-only.
+
+If multiple topologies of different (but similar) nodes are needed
+in your program, have a look at \ref faq_diff.
+
+
+\subsection faq_diff How to avoid memory waste when manipulating multiple similar topologies?
+
+hwloc does not share information between topologies.
+If multiple similar topologies are loaded in memory, for instance
+the topologies of different identical nodes of a cluster,
+lots of information will be duplicated.
+
+hwloc/diff.h (see also \ref hwlocality_diff) offers the ability to
+compute topology differences, apply or unapply them, or export/import
+to/from XML.
+However this feature is limited to basic differences such as attribute changes.
+It does not support complex modifications such as adding or removing some objects.
+
+
+\subsection faq_annotate How do I annotate the topology with private notes?
Each hwloc object contains a <tt>userdata</tt> field that may be used by
applications to store private pointers. This field is only valid
@@ -2903,7 +3036,116 @@ It may be manipulated with <tt>hwloc_topology_set_userdata()</tt>
and <tt>hwloc_topology_get_userdata()</tt>.
-\section faq_valgrind Why does Valgrind complain about hwloc memory leaks?
+
+\section faq3 Caveats
+
+
+\subsection faq_slow_lstopo Why is lstopo slow?
+
+lstopo enables most hwloc discovery flags by default so that the output
+topology is as precise as possible (while hwloc disables many of them
+by default).
+This includes I/O device discovery through PCI libraries as well as external
+libraries such as NVML.
+To speed up lstopo, you may disable such features with command-line
+options such as <tt>\--no-io</tt>.
+
+When NVIDIA GPU probing is enabled with CUDA or NVML, one should make sure that
+the <em>Persistent</em> mode is enabled (with <tt>nvidia-smi -pm 1</tt>)
+to avoid significant GPU initialization overhead.
+
+When AMD GPU discovery is enabled with OpenCL and hwloc is used remotely
+over ssh, some spurious round-trips on the network may significantly
+increase the discovery time.
+Forcing the <tt>DISPLAY</tt> environment variable to the remote X server
+display (usually <tt>:0</tt>) instead of only setting the <tt>COMPUTE</tt>
+variable may avoid this.
+
+Also remember that these components may be disabled at build-time with
+configure flags such as <tt>\--disable-opencl</tt>, <tt>\--disable-cuda</tt> or <tt>\--disable-nvml</tt>,
+and at runtime with the environment variable
+<tt>HWLOC_COMPONENTS=-opencl,cuda,nvml</tt>.
+
+If loading topologies is slow because the machine contains tons of
+processors, one should also consider using XML (see \ref faq_xml).
+
+
+\subsection faq_privileged Does hwloc require privileged access?
+
+hwloc discovers the topology by querying the operating system.
+Some minor features may require privileged access to the operation
+system.
+For instance memory module and PCI link speed discovery on Linux
+is reserved to root,
+and the entire PCI discovery on Solaris and BSDs requires access to
+some special files that are usually restricted to root
+(/dev/pci* or /devices/pci*).
+
+To workaround this limitation, it is recommended to export the
+topology as a XML file generated by the administrator (with the
+lstopo program) and make it available to all users
+(see \ref xml).
+It will offer all discovery information to any application without
+requiring any privileged access anymore.
+Only the necessary hardware characteristics will be exported, no
+sensitive information will be disclosed through this XML export.
+
+This XML-based model also has the advantage of speeding up the
+discovery because reading a XML topology is usually much faster
+than querying the operating system again.
+
+The utility <tt>hwloc-dump-hwdata</tt> is also involved in gathering
+privileged information at boot time and making it available to
+non-privileged users (note that this may require a specific SELinux
+MLS policy module). However it only applies to Intel Knights Landing
+Xeon Phi for now (see \ref faq_knl_dump).
+See also <tt>HWLOC_DUMPED_HWDATA_DIR</tt> in \ref envvar for details
+about the location of dumped files.
+
+
+\subsection faq_os_error What should I do when hwloc reports "operating system" warnings?
+
+When the operating system reports invalid locality information (because
+of either software or hardware bugs), hwloc may fail to insert some objects
+in the topology because they cannot fit in the already built tree of resources.
+If so, hwloc will report a warning like the following.
+The object causing this error is ignored, the discovery continues but the
+resulting topology will miss some objects and may be asymmetric
+(see also \ref faq_asymmetric).
+
+\verbatim
+****************************************************************************
+* hwloc has encountered what looks like an error from the operating system.
+*
+* L3 (cpuset 0x000003f0) intersects with NUMANode (P#0 cpuset 0x0000003f) without inclusion!
+* Error occurred in topology.c line 940
+*
+* Please report this error message to the hwloc user's mailing list,
+* along with the output from the hwloc-gather-topology script.
+****************************************************************************
+\endverbatim
+
+These errors are common on large AMD platforms because of BIOS and/or Linux
+kernel bugs causing invalid L3 cache information.
+In the above example, the hardware reports
+a L3 cache that is shared by 2 cores in the first NUMA node and 4 cores
+in the second NUMA node. That's wrong, it should actually be shared by all 6
+cores in a single NUMA node.
+The resulting topology will miss some L3 caches.
+
+If your application not care about cache sharing, or if you do not plan to
+request cache-aware binding in your process launcher, you may likely ignore
+this error (and hide it by setting HWLOC_HIDE_ERRORS=1 in your environment).
+
+Some platforms report similar warnings about conflicting Packages and NUMANodes.
+Upgrading the BIOS and/or the operating system may help.
+Otherwise, as explained in the message, reporting this issue to the hwloc developers
+(by sending the tarball that is generated by the hwloc-gather-topology script
+ on this platform) is a good way to make sure that this is a software
+(operating system) or hardware bug (BIOS, etc).
+
+
+\subsection faq_valgrind Why does Valgrind complain about hwloc memory leaks?
If you are debugging your application with Valgrind, you want to
avoid memory leak reports that are caused by hwloc and not by your
@@ -2926,7 +3168,7 @@ You should pass the following command-line option to Valgrind to use it:
\endverbatim
-\section faq_upgrade How do I handle ABI breaks and API upgrades?
+\subsection faq_upgrade How do I handle ABI breaks and API upgrades?
The hwloc interface is extended with every new major release.
Any application using the hwloc API should be prepared to check at
@@ -2946,7 +3188,21 @@ to fix several issues of the 1.x interface.
The ABI will be broken, which means
<b>applications must be recompiled against the new 2.0 interface</b>.
-To check that you are not mixing old/recent headers with a recent/old runtime library:
+To check that you are not mixing old/recent headers with a recent/old runtime library,
+check the major revision number in the API version:
+\verbatim
+#include <hwloc.h>
+ unsigned version = hwloc_get_api_version();
+ if ((version >> 16) != (HWLOC_API_VERSION >> 16)) {
+ fprintf(stderr,
+ "%s compiled for hwloc API 0x%x but running on library API 0x%x.\n"
+ "You may need to point LD_LIBRARY_PATH to the right hwloc library.\n"
+ "Aborting since the new ABI is not backward compatible.\n",
+ callname, HWLOC_API_VERSION, version);
+ exit(EXIT_FAILURE);
+ }
+\endverbatim
+To specifically detect v2.0 issues:
\verbatim
#include <hwloc.h>
#if HWLOC_API_VERSION >= 0x00020000
@@ -2961,13 +3217,104 @@ To check that you are not mixing old/recent headers with a recent/old runtime li
\endverbatim
You should not try to remain compatible with very old releases such as
-1.1.x or earlier because <tt>HWLOC_API_VERSION</tt> was added in 1.0.0
+1.1.x or earlier because <tt>::HWLOC_API_VERSION</tt> was added in 1.0.0
and <tt>hwloc_get_api_version()</tt> came only in 1.1.1.
Also do not use the old cpuset API since it was deprecated and superseded
by the bitmap API in 1.1, and later removed in 1.5.
-\section faq_bgq How do I build hwloc for BlueGene/Q?
+
+\section faq4 Platform-specific
+
+
+\subsection faq_knl_numa How do I find the local MCDRAM NUMA node on Intel Knights Landing Xeon Phi?
+
+Intel Knights Landing Xeon Phi processors introduce a new memory architecture by
+possibly having two distinct local memories:
+some normal memory (DDR) and some high-bandwidth on-package memory (MCDRAM).
+Processors can be configured in various clustering modes to have up to 4 <em>Clusters</em>.
+Moreover, each <em>Cluster</em> (quarter, half or whole processor) of the processor may have its own local
+parts of the DDR and of the MCDRAM.
+This memory and clustering configuration may be probed by looking at MemoryMode
+and ClusterMode attributes, see \ref attributes_info and doc/examples/get-knl-modes.c
+in the source directory.
+
+The upcoming hwloc 2.0 will address this new architecture by presenting memory
+in an improved way.
+For now, starting with 1.11.2, hwloc releases use the following approximate representation:
+
+If a cluster only contains DDR or MCDRAM but not both, that memory is available
+as a local NUMA node above cores as usual.
+
+If a cluster contains both, two distinct NUMA nodes appear.
+They are sibling children of a Group object of type <tt>Cluster</tt>
+(or sibling children of the Package object for non-clustered processors).
+
+The DDR memory is the local NUMA node above cores as usual.
+Allocating memory from one core to its local NUMA node will therefore actually
+allocate it on the normal memory by default.
+
+The local high-bandwidth MCDRAM is the second NUMA node (without any Core or PU below it).
+It is the next sibling of the local DDR NUMA node below the same parent object.
+To allocate on the faster MCDRAM, one should first find the local NUMA node (the DDR memory,
+by looking up parent objects), and then take the next sibling to reach the local MCDRAM
+NUMA node (if any).
+
+The MCDRAM NUMA nodes may also be identified thanks to the <tt>Type</tt> info attribute
+which is set to <tt>MCDRAM</tt>.
+
+
+\subsection faq_knl_dump Why do I need hwloc-dump-hwdata for memory on Intel Knights Landing Xeon Phi?
+
+Intel Knights Landing Xeon Phi processors may use the on-package memory (MCDRAM)
+as either memory or a memory-side cache (currently reported as a L3 cache by hwloc).
+There are also several clustering modes that significantly affect the memory organization
+(see \ref faq_knl_numa for more information about these modes).
+Details about these are currently only available to privileged users.
+
+The hwloc-dump-hwdata utility may be used to dump this privileged binary information
+into human-readable and world-accessible files that the hwloc library will later load.
+The utility should usually run as root once during boot, in order to update dumped
+information (stored under /var/run/hwloc by default) in case the MCDRAM or clustering configuration
+changed between reboots.
+
+When SELinux MLS policy is enabled, a specific hwloc policy module may be required
+so that all users get access to the dumped files (in /var/run/hwloc by default).
+One may use hwloc policy files from the SELinux Reference Policy at
+https://github.com/TresysTechnology/refpolicy-contrib
+(see also the documentation at https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted).
+
+hwloc-dump-hwdata requires <tt>dmi-sysfs</tt> kernel module loaded.
+
+The utility is currently unneeded on non-KNL platforms.
+
+See <tt>HWLOC_DUMPED_HWDATA_DIR</tt> in \ref envvar for details
+about the location of dumped files.
+
+
+\subsection faq_phi How do I build for Intel Xeon Phi coprocessor?
+
+\note This section does not apply to standalone Intel Knights Landing Xeon Phi.
+
+Intel Knights Corner Xeon Phi coprocessors usually runs a Linux environment
+but cross-compiling from the host is required.
+hwloc uses standard autotools options for cross-compiling.
+For instance, to build for a <em>Knights Corner (KNC)</em> coprocessor:
+
+If building with <tt>icc</tt>:
+\verbatim
+./configure CC="icc -mmic" --host=x86_64-k1om-linux --build=x86_64-unknown-linux-gnu
+\endverbatim
+
+If building with the Xeon Phi-specific GCC that comes with the MPSS environment,
+for instance <tt>/usr/linux-k1om-4.7/bin/x86_64-k1om-linux-gcc</tt>:
+\verbatim
+export PATH=$PATH:/usr/linux-k1om-4.7/bin/
+./configure --host=x86_64-k1om-linux --build=x86_64-unknown-linux-gnu
+\endverbatim
+
+
+\subsection faq_bgq How do I build hwloc for BlueGene/Q?
IBM BlueGene/Q machines run a standard Linux on the I/O node and a
custom CNK (<em>Compute Node Kernel</em>) on the compute nodes.
@@ -2982,7 +3329,7 @@ CPPFLAGS may have to be updated if your platform headers are installed
in a different directory.
-\section faq_netbsd_bind How to get useful topology information on NetBSD?
+\subsection faq_netbsd_bind How to get useful topology information on NetBSD?
The NetBSD (and FreeBSD) backend uses x86-specific topology discovery
(through the x86 component).
@@ -2995,23 +3342,4 @@ sysctl variable must be set to 1 to do so.
Otherwise, only the number of logical processors will be detected.
-\section faq_phi How do I build for Intel Xeon Phi coprocessor?
-
-Intel Xeon Phi coprocessors usually runs a Linux environment but cross-compiling from the host is required.
-hwloc uses standard autotools options for cross-compiling.
-For instance, to build for a <em>Knights Corner (KNC)</em> coprocessor:
-
-If building with <tt>icc</tt>:
-\verbatim
-./configure CC="icc -mmic" --host=x86_64-k1om-linux --build=x86_64-unknown-linux-gnu
-\endverbatim
-
-If building with the Xeon Phi-specific GCC that comes with the MPSS environment\n
-for instance <tt>/usr/linux-k1om-4.7/bin/x86_64-k1om-linux-gcc</tt>:
-\verbatim
-export PATH=$PATH:/usr/linux-k1om-4.7/bin/
-./configure --host=x86_64-k1om-linux --build=x86_64-unknown-linux-gnu
-\endverbatim
-
-
*/
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.in
index 02d7702..bdd70f7 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.in
@@ -281,6 +281,7 @@ HWLOC_PLUGINS_PATH = @HWLOC_PLUGINS_PATH@
HWLOC_RELEASE_DATE = @HWLOC_RELEASE_DATE@
HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_VERSION = @HWLOC_VERSION@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
@@ -306,6 +307,7 @@ MKDIR_P = @MKDIR_P@
MPIEXEC_HYDRA_NAME = @MPIEXEC_HYDRA_NAME@
MPIEXEC_NAME = @MPIEXEC_NAME@
MPIRUN_NAME = @MPIRUN_NAME@
+MPLLIBNAME = @MPLLIBNAME@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -380,12 +382,16 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mpl_dist_srcdir = @mpl_dist_srcdir@
+mpl_includedir = @mpl_includedir@
+mpl_lib = @mpl_lib@
+mpl_libdir = @mpl_libdir@
mpl_srcdir = @mpl_srcdir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
index 66e1220..1671a40 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -80,7 +80,10 @@ extern "C" {
/** \brief Indicate at build time which hwloc API version is being used. */
#define HWLOC_API_VERSION 0x00010b00
-/** \brief Indicate at runtime which hwloc API version was used at build time. */
+/** \brief Indicate at runtime which hwloc API version was used at build time.
+ *
+ * Should be ::HWLOC_API_VERSION if running on the same version.
+ */
HWLOC_DECLSPEC unsigned hwloc_get_api_version(void);
/** \brief Current component and plugin ABI version (see hwloc/plugins.h) */
@@ -208,6 +211,7 @@ typedef enum {
* expose their arbitrary processors aggregation this
* way. And hwloc may insert such objects to group
* NUMA nodes according to their distances.
+ * See also \ref faq_groups.
*
* These objects are ignored when they do not bring
* any structure.
@@ -216,7 +220,7 @@ typedef enum {
HWLOC_OBJ_MISC, /**< \brief Miscellaneous objects.
* Objects without particular meaning, that can e.g. be
* added by the application for its own use, or by hwloc
- * for miscellaneous objects such as MemoryDevice.
+ * for miscellaneous objects such as MemoryModule (DIMMs).
*/
HWLOC_OBJ_BRIDGE, /**< \brief Bridge.
@@ -254,7 +258,7 @@ typedef enum hwloc_obj_cache_type_e {
HWLOC_OBJ_CACHE_UNIFIED, /**< \brief Unified cache. */
HWLOC_OBJ_CACHE_DATA, /**< \brief Data cache. */
HWLOC_OBJ_CACHE_INSTRUCTION /**< \brief Instruction cache.
- * Only used when the HWLOC_TOPOLOGY_FLAG_ICACHES topology flag is set. */
+ * Only used when the ::HWLOC_TOPOLOGY_FLAG_ICACHES topology flag is set. */
} hwloc_obj_cache_type_t;
/** \brief Type of one side (upstream or downstream) of an I/O bridge. */
@@ -273,7 +277,8 @@ typedef enum hwloc_obj_osdev_type_e {
HWLOC_OBJ_OSDEV_NETWORK, /**< \brief Operating system network device.
* For instance the "eth0" interface on Linux. */
HWLOC_OBJ_OSDEV_OPENFABRICS, /**< \brief Operating system openfabrics device.
- * For instance the "mlx4_0" InfiniBand HCA device on Linux. */
+ * For instance the "mlx4_0" InfiniBand HCA,
+ * or "hfi1_0" Omni-Path interface on Linux. */
HWLOC_OBJ_OSDEV_DMA, /**< \brief Operating system dma engine device.
* For instance the "dma0chan0" DMA channel on Linux. */
HWLOC_OBJ_OSDEV_COPROC /**< \brief Operating system co-processor device.
@@ -289,12 +294,12 @@ typedef enum hwloc_obj_osdev_type_e {
* respectively if \p type1 objects usually include \p type2 objects, are the
* same as \p type2 objects, or are included in \p type2 objects. If the types
* can not be compared (because neither is usually contained in the other),
- * HWLOC_TYPE_UNORDERED is returned. Object types containing CPUs can always
+ * ::HWLOC_TYPE_UNORDERED is returned. Object types containing CPUs can always
* be compared (usually, a system contains machines which contain nodes which
* contain packages which contain caches, which contain cores, which contain
* processors).
*
- * \note HWLOC_OBJ_PU will always be the deepest.
+ * \note ::HWLOC_OBJ_PU will always be the deepest.
* \note This does not mean that the actual topology will respect that order:
* e.g. as of today cores may also contain caches, and packages may also contain
* nodes. This is thus just to be seen as a fallback comparison method.
@@ -302,7 +307,7 @@ typedef enum hwloc_obj_osdev_type_e {
HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) __hwloc_attribute_const;
enum hwloc_compare_types_e {
- HWLOC_TYPE_UNORDERED = INT_MAX /**< \brief Value returned by hwloc_compare_types when types can not be compared. \hideinitializer */
+ HWLOC_TYPE_UNORDERED = INT_MAX /**< \brief Value returned by hwloc_compare_types() when types can not be compared. \hideinitializer */
};
/** @} */
@@ -340,11 +345,15 @@ struct hwloc_obj_memory_s {
struct hwloc_obj {
/* physical information */
hwloc_obj_type_t type; /**< \brief Type of object */
+
unsigned os_index; /**< \brief OS-provided physical index number.
* It is not guaranteed unique across the entire machine,
* except for PUs and NUMA nodes.
*/
- char *name; /**< \brief Object description if any */
+ char *name; /**< \brief Object-specific name if any.
+ * Mostly used for identifying OS devices and Misc objects where
+ * a name string is more useful than numerical indexes.
+ */
struct hwloc_obj_memory_s memory; /**< \brief Memory attributes */
@@ -393,22 +402,22 @@ struct hwloc_obj {
* object and known how (the children path between this object and the PU
* objects).
*
- * If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of
+ * If the ::HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of
* these CPUs may be offline, or not allowed for binding, see online_cpuset
* and allowed_cpuset.
*
- * \note Its value must not be changed, hwloc_bitmap_dup must be used instead.
+ * \note Its value must not be changed, hwloc_bitmap_dup() must be used instead.
*/
hwloc_cpuset_t complete_cpuset; /**< \brief The complete CPU set of logical processors of this object,
*
* This includes not only the same as the cpuset field, but also the CPUs for
* which topology information is unknown or incomplete, and the CPUs that are
- * ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set.
+ * ignored when the ::HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set.
* Thus no corresponding PU object may be found in the topology, because the
* precise position is undefined. It is however known that it would be somewhere
* under this object.
*
- * \note Its value must not be changed, hwloc_bitmap_dup must be used instead.
+ * \note Its value must not be changed, hwloc_bitmap_dup() must be used instead.
*/
hwloc_cpuset_t online_cpuset; /**< \brief The CPU set of online logical processors
*
@@ -416,7 +425,7 @@ struct hwloc_obj {
* power and can execute threads. It may however not be allowed to bind to
* them due to administration rules, see allowed_cpuset.
*
- * \note Its value must not be changed, hwloc_bitmap_dup must be used instead.
+ * \note Its value must not be changed, hwloc_bitmap_dup() must be used instead.
*/
hwloc_cpuset_t allowed_cpuset; /**< \brief The CPU set of allowed logical processors
*
@@ -426,39 +435,39 @@ struct hwloc_obj {
* Some of them may however be offline so binding to them may still not be
* possible, see online_cpuset.
*
- * \note Its value must not be changed, hwloc_bitmap_dup must be used instead.
+ * \note Its value must not be changed, hwloc_bitmap_dup() must be used instead.
*/
hwloc_nodeset_t nodeset; /**< \brief NUMA nodes covered by this object or containing this object
*
- * This is the set of NUMA nodes for which there are NODE objects in the
+ * This is the set of NUMA nodes for which there are NUMA node objects in the
* topology under or above this object, i.e. which are known to be physically
* contained in this object or containing it and known how (the children path
- * between this object and the NODE objects).
+ * between this object and the NUMA node objects).
*
* In the end, these nodes are those that are close to the current object.
*
- * If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of
+ * If the ::HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of
* these nodes may not be allowed for allocation, see allowed_nodeset.
*
* If there are no NUMA nodes in the machine, all the memory is close to this
* object, so \p nodeset is full.
*
- * \note Its value must not be changed, hwloc_bitmap_dup must be used instead.
+ * \note Its value must not be changed, hwloc_bitmap_dup() must be used instead.
*/
hwloc_nodeset_t complete_nodeset; /**< \brief The complete NUMA node set of this object,
*
* This includes not only the same as the nodeset field, but also the NUMA
* nodes for which topology information is unknown or incomplete, and the nodes
- * that are ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set.
- * Thus no corresponding NODE object may be found in the topology, because the
+ * that are ignored when the ::HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set.
+ * Thus no corresponding NUMA node object may be found in the topology, because the
* precise position is undefined. It is however known that it would be
* somewhere under this object.
*
* If there are no NUMA nodes in the machine, all the memory is close to this
* object, so \p complete_nodeset is full.
*
- * \note Its value must not be changed, hwloc_bitmap_dup must be used instead.
+ * \note Its value must not be changed, hwloc_bitmap_dup() must be used instead.
*/
hwloc_nodeset_t allowed_nodeset; /**< \brief The set of allowed NUMA memory nodes
*
@@ -470,7 +479,7 @@ struct hwloc_obj {
* If there are no NUMA nodes in the machine, all the memory is close to this
* object, so \p allowed_nodeset is full.
*
- * \note Its value must not be changed, hwloc_bitmap_dup must be used instead.
+ * \note Its value must not be changed, hwloc_bitmap_dup() must be used instead.
*/
struct hwloc_distances_s **distances; /**< \brief Distances between all objects at same depth below this object */
@@ -575,7 +584,10 @@ struct hwloc_distances_s {
*/
};
-/** \brief Object info */
+/** \brief Object info
+ *
+ * \sa hwlocality_info_attr
+ */
struct hwloc_obj_info_s {
char *name; /**< \brief Info name */
char *value; /**< \brief Info value */
@@ -635,6 +647,9 @@ HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology);
* are duplicated into a new one.
*
* This is useful for keeping a backup while modifying a topology.
+ *
+ * \note Object userdata is not duplicated since hwloc does not know what it point to.
+ * The objects of both old and new topologies will point to the same userdata.
*/
HWLOC_DECLSPEC int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology);
@@ -679,7 +694,7 @@ HWLOC_DECLSPEC void hwloc_topology_check(hwloc_topology_t topology);
/** \brief Ignore an object type.
*
* Ignore all objects from the given type.
- * The bottom-level type HWLOC_OBJ_PU may not be ignored.
+ * The bottom-level type ::HWLOC_OBJ_PU may not be ignored.
* The top-level object of the hierarchy will never be ignored, even if this function
* succeeds.
* Group objects are always ignored if they do not bring any structure
@@ -693,7 +708,7 @@ HWLOC_DECLSPEC int hwloc_topology_ignore_type(hwloc_topology_t topology, hwloc_o
*
* Ignore all objects from the given type as long as they do not bring any structure:
* Each ignored object should have a single children or be the only child of its parent.
- * The bottom-level type HWLOC_OBJ_PU may not be ignored.
+ * The bottom-level type ::HWLOC_OBJ_PU may not be ignored.
* I/O objects may not be ignored, topology flags should be used to configure
* their discovery instead.
*/
@@ -702,9 +717,8 @@ HWLOC_DECLSPEC int hwloc_topology_ignore_type_keep_structure(hwloc_topology_t to
/** \brief Ignore all objects that do not bring any structure.
*
* Ignore all objects that do not bring any structure:
- * Each ignored object should have a single children or be the only child of its parent.
- * I/O objects may not be ignored, topology flags should be used to configure
- * their discovery instead.
+ * This is equivalent to calling hwloc_topology_ignore_type_keep_structure()
+ * for all object types.
*/
HWLOC_DECLSPEC int hwloc_topology_ignore_all_keep_structure(hwloc_topology_t topology);
@@ -719,6 +733,10 @@ enum hwloc_topology_flags_e {
* Gather all resources, even if some were disabled by the administrator.
* For instance, ignore Linux Cgroup/Cpusets and gather all processors and memory nodes,
* and ignore the fact that some resources may be offline.
+ *
+ * When this flag is not set, PUs that are disallowed are not added to the topology.
+ * Parent objects (package, core, cache, etc.) are added only if some of their children are allowed.
+ * NUMA nodes are always added but their available memory is set to 0 when disallowed.
* \hideinitializer
*/
HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM = (1UL<<0),
@@ -726,7 +744,7 @@ enum hwloc_topology_flags_e {
/** \brief Assume that the selected backend provides the topology for the
* system on which we are running.
*
- * This forces hwloc_topology_is_thissystem to return 1, i.e. makes hwloc assume that
+ * This forces hwloc_topology_is_thissystem() to return 1, i.e. makes hwloc assume that
* the selected backend provides the topology for the system on which we are running,
* even if it is not the OS-specific backend but the XML backend for instance.
* This means making the binding functions actually call the OS-specific
@@ -749,7 +767,7 @@ enum hwloc_topology_flags_e {
* detection using the pci backend. Only the common PCI devices (GPUs,
* NICs, block devices, ...) and host bridges (objects that connect the host
* objects to an I/O subsystem) will be added to the topology.
- * Additionally it also enables MemoryDevice misc objects.
+ * Additionally it also enables MemoryModule misc objects.
* Uncommon devices and other bridges (such as PCI-to-PCI bridges) will be
* ignored.
* \hideinitializer
@@ -758,7 +776,7 @@ enum hwloc_topology_flags_e {
/** \brief Detect PCI bridges.
*
- * This flag should be combined with HWLOC_TOPOLOGY_FLAG_IO_DEVICES to enable
+ * This flag should be combined with ::HWLOC_TOPOLOGY_FLAG_IO_DEVICES to enable
* the detection of both common devices and of all useful bridges (bridges that
* have at least one device behind them).
* \hideinitializer
@@ -767,10 +785,10 @@ enum hwloc_topology_flags_e {
/** \brief Detect the whole PCI hierarchy.
*
- * This flag enables detection of all I/O devices (even the uncommon ones)
- * and bridges (even those that have no device behind them) using the pci
- * backend.
- * This implies HWLOC_TOPOLOGY_FLAG_IO_DEVICES.
+ * This flag enables detection of all I/O devices (even the uncommon ones
+ * such as DMA channels) and bridges (even those that have no device behind
+ * them) using the pci backend.
+ * This implies ::HWLOC_TOPOLOGY_FLAG_IO_DEVICES.
* \hideinitializer
*/
HWLOC_TOPOLOGY_FLAG_WHOLE_IO = (1UL<<4),
@@ -803,7 +821,7 @@ HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned
*/
HWLOC_DECLSPEC unsigned long hwloc_topology_get_flags (hwloc_topology_t topology);
-/** \brief Change which pid the topology is viewed from
+/** \brief Change which process the topology is viewed from
*
* On some systems, processes may have different views of the machine, for
* instance the set of allowed CPUs. By default, hwloc exposes the view from
@@ -838,7 +856,7 @@ HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topo
*
* \note For convenience, this backend provides empty binding hooks which just
* return success. To have hwloc still actually call OS-specific hooks, the
- * HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
+ * ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
* file is really the underlying system.
*
* \note On success, the Linux component replaces the previously enabled
@@ -895,7 +913,7 @@ HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restric
*
* \note For convenience, this backend provides empty binding hooks which just
* return success. To have hwloc still actually call OS-specific hooks, the
- * HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
+ * ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
* file is really the underlying system.
*
* \note On success, the XML component replaces the previously enabled
@@ -923,7 +941,7 @@ HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topo
*
* \note For convenience, this backend provides empty binding hooks which just
* return success. To have hwloc still actually call OS-specific hooks, the
- * HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
+ * ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
* file is really the underlying system.
*
* \note On success, the XML component replaces the previously enabled
@@ -956,6 +974,7 @@ HWLOC_DECLSPEC int hwloc_topology_set_custom(hwloc_topology_t topology);
/** \brief Provide a distance matrix.
*
* Provide the matrix of distances between a set of objects of the given type.
+ * \p nbobjs must be at least 2.
* The set may or may not contain all the existing objects of this type.
* The objects are specified by their OS/physical index in the \p os_index
* array. The \p distances matrix follows the same order.
@@ -989,7 +1008,11 @@ struct hwloc_topology_discovery_support {
unsigned char pu;
};
-/** \brief Flags describing actual PU binding support for this topology. */
+/** \brief Flags describing actual PU binding support for this topology.
+ *
+ * A flag may be set even if the feature isn't supported in all cases
+ * (e.g. binding to random sets of non-contiguous objects).
+ */
struct hwloc_topology_cpubind_support {
/** Binding the whole current process is supported. */
unsigned char set_thisproc_cpubind;
@@ -1015,7 +1038,11 @@ struct hwloc_topology_cpubind_support {
unsigned char get_thisthread_last_cpu_location;
};
-/** \brief Flags describing actual memory binding support for this topology. */
+/** \brief Flags describing actual memory binding support for this topology.
+ *
+ * A flag may be set even if the feature isn't supported in all cases
+ * (e.g. binding to random sets of non-contiguous objects).
+ */
struct hwloc_topology_membind_support {
/** Binding the whole current process is supported. */
unsigned char set_thisproc_membind;
@@ -1045,9 +1072,10 @@ struct hwloc_topology_membind_support {
unsigned char replicate_membind;
/** Next-touch migration policy is supported. */
unsigned char nexttouch_membind;
-
/** Migration flags is supported. */
unsigned char migrate_membind;
+ /** Getting the last NUMA nodes where a memory area was allocated is supported */
+ unsigned char get_area_memlocation;
};
/** \brief Set of flags describing actual support for this topology.
@@ -1062,7 +1090,15 @@ struct hwloc_topology_support {
struct hwloc_topology_membind_support *membind;
};
-/** \brief Retrieve the topology support. */
+/** \brief Retrieve the topology support.
+ *
+ * Each flag indicates whether a feature is supported.
+ * If set to 0, the feature is not supported.
+ * If set to 1, the feature is supported, but the corresponding
+ * call may still fail in some corner cases.
+ *
+ * These features are also listed by hwloc-info \--support
+ */
HWLOC_DECLSPEC const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t __hwloc_restrict topology);
/** \brief Set the topology-specific userdata pointer.
@@ -1099,7 +1135,7 @@ HWLOC_DECLSPEC void * hwloc_topology_get_userdata(hwloc_topology_t topology);
/** \brief Get the depth of the hierarchical tree of objects.
*
- * This is the depth of HWLOC_OBJ_PU objects plus one.
+ * This is the depth of ::HWLOC_OBJ_PU objects plus one.
*/
HWLOC_DECLSPEC unsigned hwloc_topology_get_depth(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
@@ -1107,14 +1143,14 @@ HWLOC_DECLSPEC unsigned hwloc_topology_get_depth(hwloc_topology_t __hwloc_restri
*
* If no object of this type is present on the underlying architecture, or if
* the OS doesn't provide this kind of information, the function returns
- * HWLOC_TYPE_DEPTH_UNKNOWN.
+ * ::HWLOC_TYPE_DEPTH_UNKNOWN.
*
* If type is absent but a similar type is acceptable, see also
* hwloc_get_type_or_below_depth() and hwloc_get_type_or_above_depth().
*
* If some objects of the given type exist in different levels,
* for instance L1 and L2 caches, or L1i and L1d caches,
- * the function returns HWLOC_TYPE_DEPTH_MULTIPLE.
+ * the function returns ::HWLOC_TYPE_DEPTH_MULTIPLE.
* See hwloc_get_cache_type_depth() in hwloc/helper.h to better handle this
* case.
*
@@ -1142,7 +1178,7 @@ enum hwloc_get_type_depth_e {
* inside \p type.
*
* If some objects of the given type exist in different levels, for instance
- * L1 and L2 caches, the function returns HWLOC_TYPE_DEPTH_MULTIPLE.
+ * L1 and L2 caches, the function returns ::HWLOC_TYPE_DEPTH_MULTIPLE.
*/
static __hwloc_inline int
hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
@@ -1154,13 +1190,15 @@ hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
* containing \p type.
*
* If some objects of the given type exist in different levels, for instance
- * L1 and L2 caches, the function returns HWLOC_TYPE_DEPTH_MULTIPLE.
+ * L1 and L2 caches, the function returns ::HWLOC_TYPE_DEPTH_MULTIPLE.
*/
static __hwloc_inline int
hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
/** \brief Returns the type of objects at depth \p depth.
*
+ * \p depth should between 0 and hwloc_topology_get_depth()-1.
+ *
* \return -1 if depth \p depth does not exist.
*/
HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth) __hwloc_attribute_pure;
@@ -1218,48 +1256,26 @@ hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
-/** \defgroup hwlocality_object_strings Manipulating Object Type, Sets and Attributes as Strings
+/** \defgroup hwlocality_object_strings Converting between Object Types, Sets and Attributes, and Strings
* @{
*/
-/** \brief Return a stringified topology object type */
-HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
-
-/** \brief Return an object type and attributes from a type string.
- *
- * Convert strings such as "Package" or "Cache" into the corresponding types.
- * Matching is case-insensitive, and only the first letters are actually
- * required to match.
+/** \brief Return a constant stringified object type.
*
- * Types that have specific attributes, for instance caches and groups,
- * may be returned in \p depthattrp and \p typeattrp. They are ignored
- * when these pointers are \c NULL.
+ * This function is the basic way to convert a generic type into a string.
*
- * For instance "L2i" or "L2iCache" would return
- * type HWLOC_OBJ_CACHE in \p typep, 2 in \p depthattrp,
- * and HWLOC_OBJ_CACHE_TYPE_INSTRUCTION in \p typeattrp
- * (this last pointer should point to a hwloc_obj_cache_type_t).
- * "Group3" would return type HWLOC_OBJ_GROUP type and 3 in \p depthattrp.
- * Attributes that are not specified in the string (for instance "Group"
- * without a depth, or "L2Cache" without a cache type) are set to -1.
- *
- * \p typeattrd is only filled if the size specified in \p typeattrsize
- * is large enough. It is currently only used for caches, and the required
- * size is at least the size of hwloc_obj_cache_type_t.
- *
- * \return 0 if a type was correctly identified, otherwise -1.
- *
- * \note This is an extended version of the now deprecated hwloc_obj_type_of_string()
+ * hwloc_obj_type_snprintf() may return a more precise output for a specific
+ * object, but it requires the caller to provide the output buffer.
*/
-HWLOC_DECLSPEC int hwloc_obj_type_sscanf(const char *string,
- hwloc_obj_type_t *typep,
- int *depthattrp,
- void *typeattrp, size_t typeattrsize);
+HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
/** \brief Stringify the type of a given topology object into a human-readable form.
*
- * It differs from hwloc_obj_type_string() because it prints type attributes such
- * as cache depth and type.
+ * Contrary to hwloc_obj_type_string(), this function includes object-specific
+ * attributes (such as the Group depth, the Bridge type, or OS device type)
+ * in the output, and it requires the caller to provide the output buffer.
+ *
+ * The output is guaranteed to be the same for all objects of a same topology level.
*
* If \p size is 0, \p string may safely be \c NULL.
*
@@ -1292,6 +1308,49 @@ HWLOC_DECLSPEC int hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_
*/
HWLOC_DECLSPEC int hwloc_obj_cpuset_snprintf(char * __hwloc_restrict str, size_t size, size_t nobj, const hwloc_obj_t * __hwloc_restrict objs);
+/** \brief Return an object type and attributes from a type string.
+ *
+ * Convert strings such as "Package" or "Cache" into the corresponding types.
+ * Matching is case-insensitive, and only the first letters are actually
+ * required to match.
+ *
+ * This function is guaranteed to match any string returned by hwloc_obj_type_string()
+ * or hwloc_obj_type_snprintf().
+ *
+ * Types that have specific attributes, for instance caches and groups,
+ * may be returned in \p depthattrp and \p typeattrp. They are ignored
+ * when these pointers are \c NULL.
+ *
+ * For instance "L2i" or "L2iCache" would return
+ * type HWLOC_OBJ_CACHE in \p typep, 2 in \p depthattrp,
+ * and HWLOC_OBJ_CACHE_TYPE_INSTRUCTION in \p typeattrp
+ * (this last pointer should point to a hwloc_obj_cache_type_t).
+ * "Group3" would return type HWLOC_OBJ_GROUP type and 3 in \p depthattrp.
+ * Attributes that are not specified in the string (for instance "Group"
+ * without a depth, or "L2Cache" without a cache type) are set to -1.
+ *
+ * \p typeattrp is only filled if the size specified in \p typeattrsize
+ * is large enough. It is currently only used for caches, and the required
+ * size is at least the size of hwloc_obj_cache_type_t.
+ *
+ * \return 0 if a type was correctly identified, otherwise -1.
+ *
+ * \note This is an extended version of the now deprecated hwloc_obj_type_of_string()
+ */
+HWLOC_DECLSPEC int hwloc_obj_type_sscanf(const char *string,
+ hwloc_obj_type_t *typep,
+ int *depthattrp,
+ void *typeattrp, size_t typeattrsize);
+
+/** @} */
+
+
+
+/** \defgroup hwlocality_info_attr Consulting and Adding Key-Value Info Attributes
+ *
+ * @{
+ */
+
/** \brief Search the given key name in object infos and return the corresponding value.
*
* If multiple keys match the given name, only the first one is returned.
@@ -1368,7 +1427,7 @@ HWLOC_DECLSPEC void hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const
* \note On some operating systems, CPU binding may have effects on memory binding, see
* ::HWLOC_CPUBIND_NOMEMBIND
*
- * \note Running lstopo --top or hwloc-ps can be a very convenient tool to check
+ * \note Running lstopo \--top or hwloc-ps can be a very convenient tool to check
* how binding actually happened.
* @{
*/
@@ -1457,10 +1516,10 @@ HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t s
* and \p HANDLE on native Windows platforms.
*
* \note As a special case on Linux, if a tid (thread ID) is supplied
- * instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags,
+ * instead of a pid (process ID) and ::HWLOC_CPUBIND_THREAD is passed in flags,
* the binding is applied to that specific thread.
*
- * \note On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in \p flags.
+ * \note On non-Linux systems, ::HWLOC_CPUBIND_THREAD can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
@@ -1470,10 +1529,10 @@ HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t
* and \p HANDLE on native Windows platforms.
*
* \note As a special case on Linux, if a tid (thread ID) is supplied
- * instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags,
+ * instead of a pid (process ID) and ::HWLOC_CPUBIND_THREAD is passed in flags,
* the binding for that specific thread is returned.
*
- * \note On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in \p flags.
+ * \note On non-Linux systems, ::HWLOC_CPUBIND_THREAD can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
@@ -1483,7 +1542,7 @@ HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t
* \note \p hwloc_thread_t is \p pthread_t on Unix platforms,
* and \p HANDLE on native Windows platforms.
*
- * \note HWLOC_CPUBIND_PROCESS can not be used in \p flags.
+ * \note ::HWLOC_CPUBIND_PROCESS can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags);
#endif
@@ -1494,7 +1553,7 @@ HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thr
* \note \p hwloc_thread_t is \p pthread_t on Unix platforms,
* and \p HANDLE on native Windows platforms.
*
- * \note HWLOC_CPUBIND_PROCESS can not be used in \p flags.
+ * \note ::HWLOC_CPUBIND_PROCESS can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags);
#endif
@@ -1506,7 +1565,7 @@ HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thr
* so this function may return something that is already
* outdated.
*
- * \p flags can include either HWLOC_CPUBIND_PROCESS or HWLOC_CPUBIND_THREAD to
+ * \p flags can include either ::HWLOC_CPUBIND_PROCESS or ::HWLOC_CPUBIND_THREAD to
* specify whether the query should be for the whole process (union of all CPUs
* on which all threads are running), or only the current thread. If the
* process is single-threaded, flags can be set to zero to let hwloc use
@@ -1525,10 +1584,10 @@ HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_
* and \p HANDLE on native Windows platforms.
*
* \note As a special case on Linux, if a tid (thread ID) is supplied
- * instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags,
+ * instead of a pid (process ID) and ::HWLOC_CPUBIND_THREAD is passed in flags,
* the last CPU location of that specific thread is returned.
*
- * \note On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in \p flags.
+ * \note On non-Linux systems, ::HWLOC_CPUBIND_THREAD can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
@@ -1559,7 +1618,7 @@ HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, h
* (e.g., some systems only allow binding memory on a per-thread
* basis, whereas other systems only allow binding memory for all
* threads in a process).
- * \p errno will be set to EXDEV when the requested cpuset can not be enforced
+ * \p errno will be set to EXDEV when the requested set can not be enforced
* (e.g., some systems only allow binding memory to a single NUMA node).
*
* If ::HWLOC_MEMBIND_STRICT was not passed, the function may fail as well,
@@ -1583,13 +1642,18 @@ HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, h
* \endcode
*
* Each hwloc memory binding function is available in two forms: one
- * that takes a CPU set argument and another that takes a NUMA memory
- * node set argument (see \ref hwlocality_object_sets and \ref
- * hwlocality_bitmap for a discussion of CPU sets and NUMA memory node
- * sets). The names of the latter form end with _nodeset. It is also
- * possible to convert between CPU set and node set using
+ * that takes a bitmap argument (a CPU set by default, or a NUMA memory
+ * node set if the flag ::HWLOC_MEMBIND_BYNODESET is specified),
+ * and another one (whose name ends with _nodeset) that always takes
+ * a NUMA memory node set.
+ * See \ref hwlocality_object_sets and \ref hwlocality_bitmap for a
+ * discussion of CPU sets and NUMA memory node sets.
+ * It is also possible to convert between CPU set and node set using
* hwloc_cpuset_to_nodeset() or hwloc_cpuset_from_nodeset().
*
+ * Memory binding by CPU set cannot work for CPU-less NUMA memory nodes.
+ * Binding by nodeset should therefore be preferred whenever possible.
+ *
* \sa Some example codes are available under doc/examples/ in the source tree.
*
* \note On some operating systems, memory binding affects the CPU
@@ -1611,8 +1675,12 @@ HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, h
typedef enum {
/** \brief Reset the memory allocation policy to the system default.
* Depending on the operating system, this may correspond to
- * HWLOC_MEMBIND_FIRSTTOUCH (Linux),
- * or HWLOC_MEMBIND_BIND (AIX, HP-UX, OSF, Solaris, Windows).
+ * ::HWLOC_MEMBIND_FIRSTTOUCH (Linux),
+ * or ::HWLOC_MEMBIND_BIND (AIX, HP-UX, OSF, Solaris, Windows).
+ * This policy is never returned by get membind functions when running
+ * on normal machines.
+ * It is only returned when binding hooks are empty because the topology
+ * was loaded from XML, or HWLOC_THISSYSTEM=0, etc.
* \hideinitializer */
HWLOC_MEMBIND_DEFAULT = 0,
@@ -1621,7 +1689,7 @@ typedef enum {
* each page in the allocation is bound only when it is first
* touched. Pages are individually bound to the local NUMA node of
* the first thread that touches it. If there is not enough memory
- * on the node, allocation may be done in the specified cpuset
+ * on the node, allocation may be done in the specified nodes
* before allocating on other nodes.
* \hideinitializer */
HWLOC_MEMBIND_FIRSTTOUCH = 1,
@@ -1716,11 +1784,22 @@ typedef enum {
* may fail with errno set to ENOSYS when used with NOCPUBIND.
* \hideinitializer
*/
- HWLOC_MEMBIND_NOCPUBIND = (1<<4)
+ HWLOC_MEMBIND_NOCPUBIND = (1<<4),
+
+ /** \brief Consider the bitmap argument as a nodeset.
+ *
+ * Functions whose name ends with _nodeset() take a nodeset argument.
+ * Other functions take a bitmap argument that is considered a nodeset
+ * if this flag is given, or a cpuset otherwise.
+ *
+ * Memory binding by CPU set cannot work for CPU-less NUMA memory nodes.
+ * Binding by nodeset should therefore be preferred whenever possible.
+ */
+ HWLOC_MEMBIND_BYNODESET = (1<<5)
} hwloc_membind_flags_t;
/** \brief Set the default memory binding policy of the current
- * process or thread to prefer the NUMA node(s) specified by physical \p nodeset
+ * process or thread to prefer the NUMA node(s) specified by \p nodeset
*
* If neither ::HWLOC_MEMBIND_PROCESS nor ::HWLOC_MEMBIND_THREAD is
* specified, the current process is assumed to be single-threaded.
@@ -1734,8 +1813,7 @@ typedef enum {
HWLOC_DECLSPEC int hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
/** \brief Set the default memory binding policy of the current
- * process or thread to prefer the NUMA node(s) near the specified physical \p
- * cpuset
+ * process or thread to prefer the NUMA node(s) specified by \p set
*
* If neither ::HWLOC_MEMBIND_PROCESS nor ::HWLOC_MEMBIND_THREAD is
* specified, the current process is assumed to be single-threaded.
@@ -1743,10 +1821,13 @@ HWLOC_DECLSPEC int hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_co
* process-based OS functions or thread-based OS functions, depending
* on which are available.
*
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
+ *
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
*/
-HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
+HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
/** \brief Query the default memory binding policy and physical locality of the
* current process or thread.
@@ -1776,9 +1857,10 @@ HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_cpus
*
* Otherwise, if ::HWLOC_MEMBIND_PROCESS is specified (and
* ::HWLOC_MEMBIND_STRICT is \em not specified), \p nodeset is set to
- * the logical OR of all threads' default nodeset. If all threads'
- * default policies are the same, \p policy is set to that policy. If
- * they are different, \p policy is set to ::HWLOC_MEMBIND_MIXED.
+ * the logical OR of all threads' default nodeset.
+ * If all threads' default policies are the same, \p policy is set to
+ * that policy. If they are different, \p policy is set to
+ * ::HWLOC_MEMBIND_MIXED.
*
* In the ::HWLOC_MEMBIND_THREAD case (or when neither
* ::HWLOC_MEMBIND_PROCESS or ::HWLOC_MEMBIND_THREAD is specified), there
@@ -1791,10 +1873,9 @@ HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_cpus
HWLOC_DECLSPEC int hwloc_get_membind_nodeset(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
/** \brief Query the default memory binding policy and physical locality of the
- * current process or thread (the locality is returned in \p cpuset as
- * CPUs near the locality's actual NUMA node(s)).
+ * current process or thread.
*
- * This function has two output parameters: \p cpuset and \p policy.
+ * This function has two output parameters: \p set and \p policy.
* The values returned in these parameters depend on both the \p flags
* passed in and the current memory binding policies and nodesets in
* the queried target.
@@ -1814,31 +1895,31 @@ HWLOC_DECLSPEC int hwloc_get_membind_nodeset(hwloc_topology_t topology, hwloc_no
* is also specified. In this case, hwloc will check the default
* memory policies and nodesets for all threads in the process. If
* they are not identical, -1 is returned and errno is set to EXDEV.
- * If they are identical, the policy is returned in \p policy. \p
- * cpuset is set to the union of CPUs near the NUMA node(s) in the
- * nodeset.
+ * If they are identical, the values are returned in \p set and \p
+ * policy.
*
* Otherwise, if ::HWLOC_MEMBIND_PROCESS is specified (and
- * ::HWLOC_MEMBIND_STRICT is \em not specified), the default nodeset
- * from each thread is logically OR'ed together. \p cpuset is set to
- * the union of CPUs near the NUMA node(s) in the resulting nodeset.
+ * ::HWLOC_MEMBIND_STRICT is \em not specified), the default set
+ * from each thread is logically OR'ed together.
* If all threads' default policies are the same, \p policy is set to
* that policy. If they are different, \p policy is set to
* ::HWLOC_MEMBIND_MIXED.
*
* In the ::HWLOC_MEMBIND_THREAD case (or when neither
* ::HWLOC_MEMBIND_PROCESS or ::HWLOC_MEMBIND_THREAD is specified), there
- * is only one nodeset and policy. The policy is returned in \p
- * policy; \p cpuset is set to the union of CPUs near the NUMA node(s)
- * in the \p nodeset.
+ * is only one set and policy; they are returned in \p set and
+ * \p policy, respectively.
+ *
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
*
* If any other flags are specified, -1 is returned and errno is set
* to EINVAL.
*/
-HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
+HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
/** \brief Set the default memory binding policy of the specified
- * process to prefer the NUMA node(s) specified by physical \p nodeset
+ * process to prefer the NUMA node(s) specified by \p nodeset
*
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
@@ -1849,7 +1930,10 @@ HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_cpuset_t c
HWLOC_DECLSPEC int hwloc_set_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
/** \brief Set the default memory binding policy of the specified
- * process to prefer the NUMA node(s) near the specified physical \p cpuset
+ * process to prefer the NUMA node(s) specified by \p set
+ *
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
*
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
@@ -1857,7 +1941,7 @@ HWLOC_DECLSPEC int hwloc_set_proc_membind_nodeset(hwloc_topology_t topology, hwl
* \note \p hwloc_pid_t is \p pid_t on Unix platforms,
* and \p HANDLE on native Windows platforms.
*/
-HWLOC_DECLSPEC int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
+HWLOC_DECLSPEC int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
/** \brief Query the default memory binding policy and physical locality of the
* specified process.
@@ -1898,10 +1982,9 @@ HWLOC_DECLSPEC int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t
HWLOC_DECLSPEC int hwloc_get_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
/** \brief Query the default memory binding policy and physical locality of the
- * specified process (the locality is returned in \p cpuset as CPUs
- * near the locality's actual NUMA node(s)).
+ * specified process.
*
- * This function has two output parameters: \p cpuset and \p policy.
+ * This function has two output parameters: \p set and \p policy.
* The values returned in these parameters depend on both the \p flags
* passed in and the current memory binding policies and nodesets in
* the queried target.
@@ -1920,39 +2003,45 @@ HWLOC_DECLSPEC int hwloc_get_proc_membind_nodeset(hwloc_topology_t topology, hwl
* If ::HWLOC_MEMBIND_STRICT is specified, hwloc will check the default
* memory policies and nodesets for all threads in the specified
* process. If they are not identical, -1 is returned and errno is
- * set to EXDEV. If they are identical, the policy is returned in \p
- * policy. \p cpuset is set to the union of CPUs near the NUMA
- * node(s) in the nodeset.
+ * set to EXDEV. If they are identical, the values are returned in \p
+ * set and \p policy.
*
- * Otherwise, the default nodeset from each thread is logically OR'ed
- * together. \p cpuset is set to the union of CPUs near the NUMA
- * node(s) in the resulting nodeset. If all threads' default policies
+ * Otherwise, \p set is set to the logical OR of all threads'
+ * default set. If all threads' default policies
* are the same, \p policy is set to that policy. If they are
* different, \p policy is set to ::HWLOC_MEMBIND_MIXED.
*
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
+ *
* If any other flags are specified, -1 is returned and errno is set
* to EINVAL.
*
* \note \p hwloc_pid_t is \p pid_t on Unix platforms,
* and \p HANDLE on native Windows platforms.
*/
-HWLOC_DECLSPEC int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
+HWLOC_DECLSPEC int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
/** \brief Bind the already-allocated memory identified by (addr, len)
- * to the NUMA node(s) in physical \p nodeset.
+ * to the NUMA node(s) specified by \p nodeset.
*
+ * \return 0 if \p len is 0.
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
*/
HWLOC_DECLSPEC int hwloc_set_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
/** \brief Bind the already-allocated memory identified by (addr, len)
- * to the NUMA node(s) near physical \p cpuset.
+ * to the NUMA node(s) specified by \p set.
*
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
+ *
+ * \return 0 if \p len is 0.
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
*/
-HWLOC_DECLSPEC int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
+HWLOC_DECLSPEC int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
/** \brief Query the physical NUMA node(s) and binding policy of the memory
* identified by (\p addr, \p len ).
@@ -1973,6 +2062,8 @@ HWLOC_DECLSPEC int hwloc_set_area_membind(hwloc_topology_t topology, const void
* If all pages in the target have the same policy, it is returned in
* \p policy. Otherwise, \p policy is set to ::HWLOC_MEMBIND_MIXED.
*
+ * If \p len is 0, -1 is returned and errno is set to EINVAL.
+ *
* If any other flags are specified, -1 is returned and errno is set
* to EINVAL.
*/
@@ -1981,7 +2072,7 @@ HWLOC_DECLSPEC int hwloc_get_area_membind_nodeset(hwloc_topology_t topology, con
/** \brief Query the CPUs near the physical NUMA node(s) and binding policy of
* the memory identified by (\p addr, \p len ).
*
- * This function has two output parameters: \p cpuset and \p policy.
+ * This function has two output parameters: \p set and \p policy.
* The values returned in these parameters depend on both the \p flags
* passed in and the memory binding policies and nodesets of the pages
* in the address range.
@@ -1989,20 +2080,46 @@ HWLOC_DECLSPEC int hwloc_get_area_membind_nodeset(hwloc_topology_t topology, con
* If ::HWLOC_MEMBIND_STRICT is specified, the target pages are first
* checked to see if they all have the same memory binding policy and
* nodeset. If they do not, -1 is returned and errno is set to EXDEV.
- * If they are identical across all pages, the policy is returned in
- * \p policy. \p cpuset is set to the union of CPUs near the NUMA
- * node(s) in the nodeset.
+ * If they are identical across all pages, the set and policy are
+ * returned in \p set and \p policy, respectively.
*
* If ::HWLOC_MEMBIND_STRICT is not specified, the union of all NUMA
- * node(s) containing pages in the address range is calculated. \p
- * cpuset is then set to the CPUs near the NUMA node(s) in this union.
+ * node(s) containing pages in the address range is calculated.
* If all pages in the target have the same policy, it is returned in
* \p policy. Otherwise, \p policy is set to ::HWLOC_MEMBIND_MIXED.
*
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
+ *
+ * If \p len is 0, -1 is returned and errno is set to EINVAL.
+ *
* If any other flags are specified, -1 is returned and errno is set
* to EINVAL.
*/
-HWLOC_DECLSPEC int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
+HWLOC_DECLSPEC int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
+
+/** \brief Get the NUMA nodes where memory identified by (\p addr, \p len ) is physically allocated.
+ *
+ * Fills \p set according to the NUMA nodes where the memory area pages
+ * are physically allocated. If no page is actually allocated yet,
+ * \p set may be empty.
+ *
+ * If pages spread to multiple nodes, it is not specified whether they spread
+ * equitably, or whether most of them are on a single node, etc.
+ *
+ * The operating system may move memory pages from one processor
+ * to another at any time according to their binding,
+ * so this function may return something that is already
+ * outdated.
+ *
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
+ *
+ * If \p len is 0, \p set is emptied.
+ *
+ * Flags are currently unused.
+ */
+HWLOC_DECLSPEC int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags);
/** \brief Allocate some memory
*
@@ -2013,7 +2130,7 @@ HWLOC_DECLSPEC int hwloc_get_area_membind(hwloc_topology_t topology, const void
*/
HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
-/** \brief Allocate some memory on the given physical nodeset \p nodeset
+/** \brief Allocate some memory on NUMA memory nodes specified by \p nodeset
*
* \return NULL with errno set to ENOSYS if the action is not supported
* and ::HWLOC_MEMBIND_STRICT is given
@@ -2026,7 +2143,7 @@ HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
*/
HWLOC_DECLSPEC void *hwloc_alloc_membind_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
-/** \brief Allocate some memory on memory nodes near the given physical cpuset \p cpuset
+/** \brief Allocate some memory on NUMA memory nodes specified by \p set
*
* \return NULL with errno set to ENOSYS if the action is not supported
* and ::HWLOC_MEMBIND_STRICT is given
@@ -2035,25 +2152,33 @@ HWLOC_DECLSPEC void *hwloc_alloc_membind_nodeset(hwloc_topology_t topology, size
* \return NULL with errno set to ENOMEM if the memory allocation failed
* even before trying to bind.
*
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
+ *
* \note The allocated memory should be freed with hwloc_free().
*/
-HWLOC_DECLSPEC void *hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
+HWLOC_DECLSPEC void *hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
-/** \brief Allocate some memory on the given nodeset \p nodeset
+/** \brief Allocate some memory on NUMA memory nodes specified by \p nodeset
*
- * This is similar to hwloc_alloc_membind except that it is allowed to change
+ * This is similar to hwloc_alloc_membind() except that it is allowed to change
* the current memory binding policy, thus providing more binding support, at
* the expense of changing the current state.
*/
static __hwloc_inline void *
hwloc_alloc_membind_policy_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
-/** \brief Allocate some memory on the memory nodes near given cpuset \p cpuset
+/** \brief Allocate some memory on NUMA memory nodes specified by \p set
+ *
+ * This is similar to hwloc_alloc_membind_nodeset() except that it is allowed to change
+ * the current memory binding policy, thus providing more binding support, at
+ * the expense of changing the current state.
*
- * This is similar to hwloc_alloc_membind_policy_nodeset, but for a given cpuset.
+ * If ::HWLOC_MEMBIND_BYNODESET is specified, set is considered a nodeset.
+ * Otherwise it's a cpuset.
*/
static __hwloc_inline void *
-hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
+hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
/** \brief Free memory that was previously allocated by hwloc_alloc()
* or hwloc_alloc_membind().
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h
index bb18f65..5626428 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h
@@ -38,7 +38,7 @@ extern "C" {
*
* \note Several examples of using the bitmap API are available under the
* doc/examples/ directory in the source tree.
- * Regression tests such as tests/hwloc_bitmap*.c also make intensive use
+ * Regression tests such as tests/hwloc/hwloc_bitmap*.c also make intensive use
* of this API.
* @{
*/
@@ -257,27 +257,35 @@ HWLOC_DECLSPEC int hwloc_bitmap_last(hwloc_const_bitmap_t bitmap) __hwloc_attrib
HWLOC_DECLSPEC int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure;
/** \brief Loop macro iterating on bitmap \p bitmap
- * \hideinitializer
+ *
+ * The loop must start with hwloc_bitmap_foreach_begin() and end
+ * with hwloc_bitmap_foreach_end() followed by a terminating ';'.
*
* \p index is the loop variable; it should be an unsigned int. The
* first iteration will set \p index to the lowest index in the bitmap.
* Successive iterations will iterate through, in order, all remaining
- * indexes that in the bitmap. To be specific: each iteration will return a
+ * indexes set in the bitmap. To be specific: each iteration will return a
* value for \p index such that hwloc_bitmap_isset(bitmap, index) is true.
*
* The assert prevents the loop from being infinite if the bitmap is infinite.
+ *
+ * \hideinitializer
*/
#define hwloc_bitmap_foreach_begin(id, bitmap) \
do { \
assert(hwloc_bitmap_weight(bitmap) != -1); \
for (id = hwloc_bitmap_first(bitmap); \
(unsigned) id != (unsigned) -1; \
- id = hwloc_bitmap_next(bitmap, id)) { \
-/** \brief End of loop. Needs a terminating ';'.
- * \hideinitializer
+ id = hwloc_bitmap_next(bitmap, id)) {
+
+/** \brief End of loop macro iterating on a bitmap.
+ *
+ * Needs a terminating ';'.
*
- * \sa hwloc_bitmap_foreach_begin */
-#define hwloc_bitmap_foreach_end() \
+ * \sa hwloc_bitmap_foreach_begin()
+ * \hideinitializer
+ */
+#define hwloc_bitmap_foreach_end() \
} \
} while (0)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h
index 3d09203..ac42c13 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h
@@ -81,7 +81,7 @@ hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *se
/** \brief Distribute \p n items over the topology under \p roots
*
- * This is the same as hwloc_distribute, but takes an array of roots instead of
+ * This is the same as hwloc_distribute(), but takes an array of roots instead of
* just one root.
*
* \note This function requires the \p roots objects to have a CPU set.
@@ -99,4 +99,4 @@ hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_root
#endif
-#endif /* HWLOC_INLINES_H */
+#endif /* HWLOC_DEPRECATED_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h
index 3f1beb1..01e3678 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013-2014 Inria. All rights reserved.
+ * Copyright © 2013-2016 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -59,19 +59,19 @@ extern "C" {
*/
typedef enum hwloc_topology_diff_obj_attr_type_e {
/** \brief The object local memory is modified.
- * The union is a hwloc_topology_diff_obj_attr_uint64_s
+ * The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s
* (and the index field is ignored).
*/
HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE,
/** \brief The object name is modified.
- * The union is a hwloc_topology_diff_obj_attr_string_s
+ * The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s
* (and the name field is ignored).
*/
HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME,
/** \brief the value of an info attribute is modified.
- * The union is a hwloc_topology_diff_obj_attr_string_s.
+ * The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s.
*/
HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO
} hwloc_topology_diff_obj_attr_type_t;
@@ -107,17 +107,17 @@ union hwloc_topology_diff_obj_attr_u {
/** \brief Type of one element of a difference list.
*/
typedef enum hwloc_topology_diff_type_e {
- /*< \brief An object attribute was changed.
- * The union is a hwloc_topology_diff_obj_attr_s.
- */
+ /** \brief An object attribute was changed.
+ * The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_s.
+ */
HWLOC_TOPOLOGY_DIFF_OBJ_ATTR,
- /*< \brief The difference is too complex,
+ /** \brief The difference is too complex,
* it cannot be represented. The difference below
* this object has not been checked.
* hwloc_topology_diff_build() will return 1.
*
- * The union is a hwloc_topology_diff_too_complex_s.
+ * The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_too_complex_s.
*/
HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX
} hwloc_topology_diff_type_t;
@@ -133,7 +133,7 @@ typedef union hwloc_topology_diff_u {
/* A difference in an object attribute. */
struct hwloc_topology_diff_obj_attr_s {
- hwloc_topology_diff_type_t type; /* must be HWLOC_TOPOLOGY_DIFF_OBJ_ATTR */
+ hwloc_topology_diff_type_t type; /* must be ::HWLOC_TOPOLOGY_DIFF_OBJ_ATTR */
union hwloc_topology_diff_u * next;
/* List of attribute differences for a single object */
unsigned obj_depth;
@@ -143,7 +143,7 @@ typedef union hwloc_topology_diff_u {
/* A difference that is too complex. */
struct hwloc_topology_diff_too_complex_s {
- hwloc_topology_diff_type_t type; /* must be HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX */
+ hwloc_topology_diff_type_t type; /* must be ::HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX */
union hwloc_topology_diff_u * next;
/* Where we had to stop computing the diff in the first topology */
unsigned obj_depth;
@@ -154,14 +154,14 @@ typedef union hwloc_topology_diff_u {
/** \brief Compute the difference between 2 topologies.
*
- * The difference is stored as a list of hwloc_topology_diff_t entries
+ * The difference is stored as a list of ::hwloc_topology_diff_t entries
* starting at \p diff.
* It is computed by doing a depth-first traversal of both topology trees
* simultaneously.
*
* If the difference between 2 objects is too complex to be represented
* (for instance if some objects have different types, or different numbers
- * of children), a special diff entry of type HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX
+ * of children), a special diff entry of type ::HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX
* is queued.
* The computation of the diff does not continue below these objects.
* So each such diff entry means that the difference between two subtrees
@@ -173,7 +173,7 @@ typedef union hwloc_topology_diff_u {
* between the topologies.
*
* \return 1 if the difference is too complex (see above). Some entries in
- * the list will be of type HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX.
+ * the list will be of type ::HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX.
*
* \return -1 on any other error.
*
@@ -183,7 +183,7 @@ typedef union hwloc_topology_diff_u {
*
* \note The output diff can only be exported to XML or passed to
* hwloc_topology_diff_apply() if 0 was returned, i.e. if no entry of type
- * HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX is listed.
+ * ::HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX is listed.
*
* \note The output diff may be modified by removing some entries from
* the list. The removed entries should be freed by passing them to
@@ -202,7 +202,7 @@ enum hwloc_topology_diff_apply_flags_e {
/** \brief Apply a topology diff to an existing topology.
*
- * \p flags is an OR'ed set of hwloc_topology_diff_apply_flags_e.
+ * \p flags is an OR'ed set of ::hwloc_topology_diff_apply_flags_e.
*
* The new topology is modified in place. hwloc_topology_dup()
* may be used to duplicate it before patching.
@@ -296,4 +296,4 @@ HWLOC_DECLSPEC int hwloc_topology_diff_export_xmlbuffer(hwloc_topology_t topolog
#endif
-#endif /* HWLOC_HELPER_H */
+#endif /* HWLOC_DIFF_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
index 70d7d17..029f2a3 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
@@ -379,7 +379,7 @@ hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology __hwloc_attribute_unus
return ancestor;
}
-/** \brief Returns the common parent object to objects lvl1 and lvl2 */
+/** \brief Returns the common parent object to objects \p obj1 and \p obj2 */
static __hwloc_inline hwloc_obj_t
hwloc_get_common_ancestor_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj1, hwloc_obj_t obj2) __hwloc_attribute_pure;
static __hwloc_inline hwloc_obj_t
@@ -442,19 +442,19 @@ hwloc_get_next_child (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_
* Return the depth of the topology level that contains cache objects
* whose attributes match \p cachedepth and \p cachetype. This function
* intends to disambiguate the case where hwloc_get_type_depth() returns
- * \p HWLOC_TYPE_DEPTH_MULTIPLE.
+ * ::HWLOC_TYPE_DEPTH_MULTIPLE.
*
- * If no cache level matches, \p HWLOC_TYPE_DEPTH_UNKNOWN is returned.
+ * If no cache level matches, ::HWLOC_TYPE_DEPTH_UNKNOWN is returned.
*
- * If \p cachetype is \p HWLOC_OBJ_CACHE_UNIFIED, the depth of the
+ * If \p cachetype is ::HWLOC_OBJ_CACHE_UNIFIED, the depth of the
* unique matching unified cache level is returned.
*
- * If \p cachetype is \p HWLOC_OBJ_CACHE_DATA or \p HWLOC_OBJ_CACHE_INSTRUCTION,
+ * If \p cachetype is ::HWLOC_OBJ_CACHE_DATA or ::HWLOC_OBJ_CACHE_INSTRUCTION,
* either a matching cache, or a unified cache is returned.
*
* If \p cachetype is \c -1, it is ignored and multiple levels may
* match. The function returns either the depth of a uniquely matching
- * level or \p HWLOC_TYPE_DEPTH_MULTIPLE.
+ * level or ::HWLOC_TYPE_DEPTH_MULTIPLE.
*/
static __hwloc_inline int
hwloc_get_cache_type_depth (hwloc_topology_t topology,
@@ -941,7 +941,7 @@ hwloc_cpuset_to_nodeset(hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset,
/** \brief Convert a CPU set into a NUMA node set without handling non-NUMA cases
*
- * This is the strict variant of ::hwloc_cpuset_to_nodeset. It does not fix
+ * This is the strict variant of hwloc_cpuset_to_nodeset(). It does not fix
* non-NUMA cases. If the topology contains some NUMA nodes, behave exactly
* the same. However, if the topology contains no NUMA nodes, return an empty
* nodeset.
@@ -993,7 +993,7 @@ hwloc_cpuset_from_nodeset(hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwl
/** \brief Convert a NUMA node set into a CPU set without handling non-NUMA cases
*
- * This is the strict variant of ::hwloc_cpuset_from_nodeset. It does not fix
+ * This is the strict variant of hwloc_cpuset_from_nodeset(). It does not fix
* non-NUMA cases. If the topology contains some NUMA nodes, behave exactly
* the same. However, if the topology contains no NUMA nodes, return an empty
* cpuset.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
index 4ddc900..3990546 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux
* See COPYING in top-level directory.
*/
@@ -55,14 +55,14 @@ HWLOC_DECLSPEC int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t
* but uses a hwloc cpuset.
*
* \note This is equivalent to calling hwloc_get_proc_cpubind() with
- * HWLOC_CPUBIND_THREAD as flags.
+ * ::HWLOC_CPUBIND_THREAD as flags.
*/
HWLOC_DECLSPEC int hwloc_linux_get_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set);
/** \brief Get the last physical CPU where thread \p tid ran.
*
* \note This is equivalent to calling hwloc_get_proc_last_cpu_location() with
- * HWLOC_CPUBIND_THREAD as flags.
+ * ::HWLOC_CPUBIND_THREAD as flags.
*/
HWLOC_DECLSPEC int hwloc_linux_get_tid_last_cpu_location(hwloc_topology_t topology, pid_t tid, hwloc_bitmap_t set);
@@ -74,4 +74,4 @@ HWLOC_DECLSPEC int hwloc_linux_get_tid_last_cpu_location(hwloc_topology_t topolo
#endif
-#endif /* HWLOC_GLIBC_SCHED_H */
+#endif /* HWLOC_LINUX_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h
index c6b8533..1762f73 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -12,7 +12,7 @@
*
* Applications that use both hwloc and OpenFabrics verbs may want to
* include this file so as to get topology information for OpenFabrics
- * hardware.
+ * hardware (InfiniBand, etc).
*
*/
@@ -36,7 +36,7 @@ extern "C" {
/** \defgroup hwlocality_openfabrics Interoperability with OpenFabrics
*
* This interface offers ways to retrieve topology information about
- * OpenFabrics devices.
+ * OpenFabrics devices (InfiniBand, Omni-Path, usNIC, etc).
*
* @{
*/
@@ -45,7 +45,7 @@ extern "C" {
* close to device \p ibdev.
*
* Return the CPU set describing the locality of the OpenFabrics
- * device \p ibdev.
+ * device \p ibdev (InfiniBand, etc).
*
* Topology \p topology and device \p ibdev must match the local machine.
* I/O devices detection is not needed in the topology.
@@ -95,8 +95,10 @@ hwloc_ibv_get_device_cpuset(hwloc_topology_t topology __hwloc_attribute_unused,
/** \brief Get the hwloc OS device object corresponding to the OpenFabrics
* device named \p ibname.
*
- * Return the OS device object describing the OpenFabrics device whose
- * name is \p ibname. Returns NULL if there is none.
+ * Return the OS device object describing the OpenFabrics device
+ * (InfiniBand, Omni-Path, usNIC, etc) whose name is \p ibname
+ * (mlx5_0, hfi1_0, usnic_0, qib0, etc).
+ * Returns NULL if there is none.
* The name \p ibname is usually obtained from ibv_get_device_name().
*
* The topology \p topology does not necessarily have to match the current
@@ -122,8 +124,8 @@ hwloc_ibv_get_device_osdev_by_name(hwloc_topology_t topology,
/** \brief Get the hwloc OS device object corresponding to the OpenFabrics
* device \p ibdev.
*
- * Return the OS device object describing the OpenFabrics device \p ibdev.
- * Returns NULL if there is none.
+ * Return the OS device object describing the OpenFabrics device \p ibdev
+ * (InfiniBand, etc). Returns NULL if there is none.
*
* Topology \p topology and device \p ibdev must match the local machine.
* I/O devices detection must be enabled in the topology.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h
index 238a689..510157b 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h
@@ -56,7 +56,7 @@ struct hwloc_disc_component {
*/
const char *name;
- /** \brief Component types to exclude, as an OR'ed set of HWLOC_DISC_COMPONENT_TYPE_*.
+ /** \brief Component types to exclude, as an OR'ed set of ::hwloc_disc_component_type_e.
*
* For a GLOBAL component, this usually includes all other types (~0).
*
@@ -121,7 +121,7 @@ struct hwloc_backend {
/** \private Reserved for the core. Used internally to list backends topology->backends. */
struct hwloc_backend * next;
- /** \brief Backend flags, as an OR'ed set of HWLOC_BACKEND_FLAG_* */
+ /** \brief Backend flags, as an OR'ed set of ::hwloc_backend_flag_e */
unsigned long flags;
/** \brief Backend-specific 'is_custom' property.
@@ -143,7 +143,7 @@ struct hwloc_backend {
/** \brief Main discovery callback.
* returns > 0 if it modified the topology tree, -1 on error, 0 otherwise.
- * May be NULL if type is HWLOC_DISC_COMPONENT_TYPE_MISC. */
+ * May be NULL if type is ::HWLOC_DISC_COMPONENT_TYPE_MISC. */
int (*discover)(struct hwloc_backend *backend);
/** \brief Callback used by the PCI backend to retrieve the locality of a PCI object from the OS/cpu backend.
@@ -213,7 +213,7 @@ typedef enum hwloc_component_type_e {
* or dynamically loaded as a plugin.
*/
struct hwloc_component {
- /** \brief Component ABI version, set to HWLOC_COMPONENT_ABI */
+ /** \brief Component ABI version, set to ::HWLOC_COMPONENT_ABI */
unsigned abi;
/** \brief Process-wide component initialization callback.
@@ -379,7 +379,7 @@ hwloc_plugin_check_namespace(const char *pluginname __hwloc_attribute_unused, co
static int verboseenv_value = 0;
if (!verboseenv_checked) {
const char *verboseenv = getenv("HWLOC_PLUGINS_VERBOSE");
- verboseenv_value = atoi(verboseenv);
+ verboseenv_value = verboseenv ? atoi(verboseenv) : 0;
verboseenv_checked = 1;
}
if (verboseenv_value)
@@ -426,6 +426,8 @@ HWLOC_DECLSPEC int hwloc_pci_find_linkspeed(const unsigned char *config, unsigne
/** \brief Modify the PCI device object into a bridge and fill its attribute if a bridge is found in the PCI config space.
*
* This function requires 64 bytes of common configuration header at the beginning of config.
+ *
+ * Returns -1 and destroys /p obj if bridge fields are invalid.
*/
HWLOC_DECLSPEC int hwloc_pci_prepare_bridge(hwloc_obj_t obj, const unsigned char *config);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
index 7b4b8a3..9555a73 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
- * Copyright © 2010-2014 Inria. All rights reserved.
+ * Copyright © 2010-2016 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -184,10 +184,11 @@ extern "C" {
#define hwloc_get_obj_by_type HWLOC_NAME(get_obj_by_type )
#define hwloc_obj_type_string HWLOC_NAME(obj_type_string )
-#define hwloc_obj_type_sscanf HWLOC_NAME(obj_type_sscanf)
#define hwloc_obj_type_snprintf HWLOC_NAME(obj_type_snprintf )
#define hwloc_obj_attr_snprintf HWLOC_NAME(obj_attr_snprintf )
#define hwloc_obj_cpuset_snprintf HWLOC_NAME(obj_cpuset_snprintf)
+#define hwloc_obj_type_sscanf HWLOC_NAME(obj_type_sscanf)
+
#define hwloc_obj_get_info_by_name HWLOC_NAME(obj_get_info_by_name)
#define hwloc_obj_add_info HWLOC_NAME(obj_add_info)
@@ -223,6 +224,7 @@ extern "C" {
#define HWLOC_MEMBIND_STRICT HWLOC_NAME_CAPS(MEMBIND_STRICT)
#define HWLOC_MEMBIND_MIGRATE HWLOC_NAME_CAPS(MEMBIND_MIGRATE)
#define HWLOC_MEMBIND_NOCPUBIND HWLOC_NAME_CAPS(MEMBIND_NOCPUBIND)
+#define HWLOC_MEMBIND_BYNODESET HWLOC_NAME_CAPS(MEMBIND_BYNODESET)
#define hwloc_membind_flags_t HWLOC_NAME(membind_flags_t)
@@ -238,6 +240,7 @@ extern "C" {
#define hwloc_set_area_membind HWLOC_NAME(set_area_membind)
#define hwloc_get_area_membind_nodeset HWLOC_NAME(get_area_membind_nodeset)
#define hwloc_get_area_membind HWLOC_NAME(get_area_membind)
+#define hwloc_get_area_memlocation HWLOC_NAME(get_area_memlocation)
#define hwloc_alloc_membind_nodeset HWLOC_NAME(alloc_membind_nodeset)
#define hwloc_alloc_membind HWLOC_NAME(alloc_membind)
#define hwloc_alloc HWLOC_NAME(alloc)
@@ -510,6 +513,7 @@ extern "C" {
/* private/debug.h */
+#define hwloc_debug_enabled HWLOC_NAME(debug_enabled)
#define hwloc_debug HWLOC_NAME(debug)
/* private/misc.h */
@@ -604,6 +608,10 @@ extern "C" {
#define hwloc_set_netbsd_hooks HWLOC_NAME(set_netbsd_hooks)
#define hwloc_set_hpux_hooks HWLOC_NAME(set_hpux_hooks)
+#define hwloc_look_hardwired_fujitsu_k HWLOC_NAME(look_hardwired_fujitsu_k)
+#define hwloc_look_hardwired_fujitsu_fx10 HWLOC_NAME(look_hardwired_fujitsu_fx10)
+#define hwloc_look_hardwired_fujitsu_fx100 HWLOC_NAME(look_hardwired_fujitsu_fx100)
+
#define hwloc_add_uname_info HWLOC_NAME(add_uname_info)
#define hwloc_free_unlinked_object HWLOC_NAME(free_unlinked_object)
#define hwloc__duplicate_objects HWLOC_NAME(_duplicate_objects)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/config.h.in b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/config.h.in
index 9a3d709..3e3df54 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/config.h.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/config.h.in
@@ -91,10 +91,25 @@
0 if you don't. */
#undef HAVE_DECL_PTHREAD_SETAFFINITY_NP
+/* Embedded mode; just assume we do not have Valgrind support */
+#undef HAVE_DECL_RUNNING_ON_VALGRIND
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SNPRINTF
+
+/* Define to 1 if you have the declaration of `strcasecmp', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRCASECMP
+
/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
don't. */
#undef HAVE_DECL_STRTOULL
+/* Define to 1 if you have the declaration of `_putenv', and to 0 if you
+ don't. */
+#undef HAVE_DECL__PUTENV
+
/* Define to 1 if you have the declaration of `_SC_LARGE_PAGESIZE', and to 0
if you don't. */
#undef HAVE_DECL__SC_LARGE_PAGESIZE
@@ -123,6 +138,10 @@
don't. */
#undef HAVE_DECL__SC_PAGE_SIZE
+/* Define to 1 if you have the declaration of `_strdup', and to 0 if you
+ don't. */
+#undef HAVE_DECL__STRDUP
+
/* Define to 1 if you have the <dirent.h> header file. */
#undef HAVE_DIRENT_H
@@ -240,6 +259,9 @@
/* Define to 1 if the system has the type `PROCESSOR_GROUP_INFO'. */
#undef HAVE_PROCESSOR_GROUP_INFO
+/* Define to 1 if the system has the type `PROCESSOR_NUMBER'. */
+#undef HAVE_PROCESSOR_NUMBER
+
/* Define to 1 if the system has the type `PROCESSOR_RELATIONSHIP'. */
#undef HAVE_PROCESSOR_RELATIONSHIP
@@ -268,6 +290,9 @@
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
+/* Define to 1 if the system has the type `ssize_t'. */
+#undef HAVE_SSIZE_T
+
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
@@ -286,6 +311,9 @@
/* Define to 1 if you have the `strncasecmp' function. */
#undef HAVE_STRNCASECMP
+/* Define to 1 if you have the `strtoull' function. */
+#undef HAVE_STRTOULL
+
/* Define to '1' if sysctl is present and usable */
#undef HAVE_SYSCTL
@@ -333,6 +361,9 @@
/* Define to 1 if you have the `uselocale' function. */
#undef HAVE_USELOCALE
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+#undef HAVE_VALGRIND_VALGRIND_H
+
/* Define to 1 if the system has the type `wchar_t'. */
#undef HAVE_WCHAR_T
@@ -486,6 +517,9 @@
/* Define to 1 if you have a library providing the termcap interface */
#undef HWLOC_HAVE_LIBTERMCAP
+/* Define to 1 if you have libudev. */
+#undef HWLOC_HAVE_LIBUDEV
+
/* Define to 1 if you have the `libxml2' library. */
#undef HWLOC_HAVE_LIBXML2
@@ -498,6 +532,9 @@
/* Define to 1 if migrate_pages is available. */
#undef HWLOC_HAVE_MIGRATE_PAGES
+/* Define to 1 if move_pages is available. */
+#undef HWLOC_HAVE_MOVE_PAGES
+
/* Define to 1 if you have the `NVML' library. */
#undef HWLOC_HAVE_NVML
@@ -527,6 +564,9 @@
/* Define to 1 if you have the <stdint.h> header file. */
#undef HWLOC_HAVE_STDINT_H
+/* Define to 1 if function `syscall' is available */
+#undef HWLOC_HAVE_SYSCALL
+
/* Define to 1 if you have the `windows.h' header. */
#undef HWLOC_HAVE_WINDOWS_H
@@ -536,9 +576,6 @@
/* Define to 1 if you have x86 cpuid */
#undef HWLOC_HAVE_X86_CPUID
-/* Define to 1 if the _syscall3 macro works */
-#undef HWLOC_HAVE__SYSCALL3
-
/* Define to 1 on HP-UX */
#undef HWLOC_HPUX_SYS
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h
index ca5cb97..9a5f544 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h
@@ -73,11 +73,10 @@ static __hwloc_inline void hwloc_x86_cpuid(unsigned *eax, unsigned *ebx, unsigne
"+c" (*ecx), "=&d" (*edx));
#elif defined(HWLOC_X86_32_ARCH)
__asm__(
- "xchg %%ebx,%1\n\t"
+ "mov %%ebx,%1\n\t"
"cpuid\n\t"
"xchg %%ebx,%1\n\t"
- : "=a" (*eax), "=r" (*ebx), "=c"(*ecx), "=d" (*edx)
- : "0" (*eax), "2" (*ecx));
+ : "+a" (*eax), "=SD" (*ebx), "+c" (*ecx), "=d" (*edx));
#else
#error unknown architecture
#endif
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h
index 4de91bf..2038a4c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2012 Inria. All rights reserved.
+ * Copyright © 2009-2015 Inria. All rights reserved.
* Copyright © 2009, 2011 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -18,36 +18,57 @@
#include <stdio.h>
#endif
+#ifdef HWLOC_DEBUG
+static __hwloc_inline int hwloc_debug_enabled(void)
+{
+ static int checked = 0;
+ static int enabled = 1;
+ if (!checked) {
+ const char *env = getenv("HWLOC_DEBUG_VERBOSE");
+ if (env)
+ enabled = atoi(env);
+ if (enabled)
+ fprintf(stderr, "hwloc verbose debug enabled, may be disabled with HWLOC_DEBUG_VERBOSE=0 in the environment.\n");
+ checked = 1;
+ }
+ return enabled;
+}
+#endif
+
static __hwloc_inline void hwloc_debug(const char *s __hwloc_attribute_unused, ...)
{
#ifdef HWLOC_DEBUG
+ if (hwloc_debug_enabled()) {
va_list ap;
-
va_start(ap, s);
vfprintf(stderr, s, ap);
va_end(ap);
+ }
#endif
}
#ifdef HWLOC_DEBUG
#define hwloc_debug_bitmap(fmt, bitmap) do { \
+if (hwloc_debug_enabled()) { \
char *s; \
hwloc_bitmap_asprintf(&s, bitmap); \
fprintf(stderr, fmt, s); \
free(s); \
-} while (0)
+} } while (0)
#define hwloc_debug_1arg_bitmap(fmt, arg1, bitmap) do { \
+if (hwloc_debug_enabled()) { \
char *s; \
hwloc_bitmap_asprintf(&s, bitmap); \
fprintf(stderr, fmt, arg1, s); \
free(s); \
-} while (0)
+} } while (0)
#define hwloc_debug_2args_bitmap(fmt, arg1, arg2, bitmap) do { \
+if (hwloc_debug_enabled()) { \
char *s; \
hwloc_bitmap_asprintf(&s, bitmap); \
fprintf(stderr, fmt, arg1, arg2, s); \
free(s); \
-} while (0)
+} } while (0)
#else
#define hwloc_debug_bitmap(s, bitmap) do { } while(0)
#define hwloc_debug_1arg_bitmap(s, arg1, bitmap) do { } while(0)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h
index d0e6a46..dbfc2d8 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -360,7 +360,7 @@ hwloc_weight_long(unsigned long w)
#endif /* HWLOC_BITS_PER_LONG == 64 */
}
-#if !HAVE_DECL_STRTOULL
+#if !HAVE_DECL_STRTOULL && defined(HAVE_STRTOULL)
unsigned long long int strtoull(const char *nptr, char **endptr, int base);
#endif
@@ -379,4 +379,31 @@ static __hwloc_inline int hwloc_strncasecmp(const char *s1, const char *s2, size
#endif
}
+#ifdef HWLOC_WIN_SYS
+# ifndef HAVE_SSIZE_T
+typedef SSIZE_T ssize_t;
+# endif
+# if !HAVE_DECL_STRTOULL && !defined(HAVE_STRTOULL)
+# define strtoull _strtoui64
+# endif
+# ifndef S_ISREG
+# define S_ISREG(m) ((m) & S_IFREG)
+# endif
+# ifndef S_ISDIR
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# endif
+# if !HAVE_DECL_STRCASECMP
+# define strcasecmp _stricmp
+# endif
+# if !HAVE_DECL_SNPRINTF
+# define snprintf _snprintf
+# endif
+# if HAVE_DECL__STRDUP
+# define strdup _strdup
+# endif
+# if HAVE_DECL__PUTENV
+# define putenv _putenv
+# endif
+#endif
+
#endif /* HWLOC_PRIVATE_MISC_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
index 0d59298..24ded28 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
*
@@ -94,6 +94,7 @@ struct hwloc_topology {
int (*get_proc_membind)(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
int (*set_area_membind)(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
int (*get_area_membind)(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
+ int (*get_area_memlocation)(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, int flags);
/* This has to return the same kind of pointer as alloc_membind, so that free_membind can be used on it */
void *(*alloc)(hwloc_topology_t topology, size_t len);
/* alloc_membind has to always succeed if !(flags & HWLOC_MEMBIND_STRICT).
@@ -106,6 +107,7 @@ struct hwloc_topology {
void (*userdata_export_cb)(void *reserved, struct hwloc_topology *topology, struct hwloc_obj *obj);
void (*userdata_import_cb)(struct hwloc_topology *topology, struct hwloc_obj *obj, const char *name, const void *buffer, size_t length);
+ int userdata_not_decoded;
struct hwloc_os_distances_s {
hwloc_obj_type_t type;
@@ -192,6 +194,10 @@ extern void hwloc_set_netbsd_hooks(struct hwloc_binding_hooks *binding_hooks, st
extern void hwloc_set_hpux_hooks(struct hwloc_binding_hooks *binding_hooks, struct hwloc_topology_support *support);
#endif /* HWLOC_HPUX_SYS */
+extern int hwloc_look_hardwired_fujitsu_k(struct hwloc_topology *topology);
+extern int hwloc_look_hardwired_fujitsu_fx10(struct hwloc_topology *topology);
+extern int hwloc_look_hardwired_fujitsu_fx100(struct hwloc_topology *topology);
+
/* Insert uname-specific names/values in the object infos array.
* If cached_uname isn't NULL, it is used as a struct utsname instead of recalling uname.
* Any field that starts with \0 is ignored.
@@ -256,8 +262,13 @@ extern void hwloc_group_by_distances(struct hwloc_topology *topology);
} \
} while(0)
#else /* HAVE_USELOCALE */
+#if __HWLOC_HAVE_ATTRIBUTE_UNUSED
#define hwloc_localeswitch_declare int __dummy_nolocale __hwloc_attribute_unused
#define hwloc_localeswitch_init()
+#else
+#define hwloc_localeswitch_declare int __dummy_nolocale
+#define hwloc_localeswitch_init() (void)__dummy_nolocale
+#endif
#define hwloc_localeswitch_fini()
#endif /* HAVE_USELOCALE */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/xml.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/xml.h
index c009cb5..8187b9c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/xml.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/xml.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -39,7 +39,7 @@ struct hwloc_xml_backend_data_s {
int (*find_child)(struct hwloc__xml_import_state_s * state, struct hwloc__xml_import_state_s * childstate, char **tagp);
int (*close_tag)(struct hwloc__xml_import_state_s * state); /* look for an explicit closing tag </name> */
void (*close_child)(struct hwloc__xml_import_state_s * state);
- int (*get_content)(struct hwloc__xml_import_state_s * state, char **beginp, size_t expected_length);
+ int (*get_content)(struct hwloc__xml_import_state_s * state, char **beginp, size_t expected_length); /* return 0 on empty content (and sets beginp to empty string), 1 on actual content, -1 on error or unexpected content length */
void (*close_content)(struct hwloc__xml_import_state_s * state);
char * msgprefix;
void *data; /* libxml2 doc, or nolibxml buffer */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
index 41aa35c..fa7dd89 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2014 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2012 Université Bordeaux
# Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
# Copyright © 2011-2012 Oracle and/or its affiliates. All rights reserved.
@@ -22,7 +22,8 @@ endif
pluginsdir = @HWLOC_PLUGINS_DIR@
plugins_LTLIBRARIES =
plugins_ldflags = -module -avoid-version -lltdl
-AM_CPPFLAGS += -DHWLOC_PLUGINS_PATH=\"$(HWLOC_PLUGINS_PATH)\"
+# Beware that files are not rebuilt automatically when reconfiguring with different paths in these flags.
+AM_CPPFLAGS += -DHWLOC_PLUGINS_PATH=\"$(HWLOC_PLUGINS_PATH)\" -DRUNSTATEDIR=\"$(HWLOC_runstatedir)\"
# Sources and ldflags
@@ -118,7 +119,7 @@ sources += topology-solaris-chiptype.c
endif HWLOC_HAVE_SOLARIS
if HWLOC_HAVE_LINUX
-sources += topology-linux.c
+sources += topology-linux.c topology-hardwired.c
endif HWLOC_HAVE_LINUX
if HWLOC_HAVE_BGQ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.in
index fbe0020..eb60c07 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# Copyright © 2009-2014 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2012 Université Bordeaux
# Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
# Copyright © 2011-2012 Oracle and/or its affiliates. All rights reserved.
@@ -112,7 +112,7 @@ target_triplet = @target@
@HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE at am__append_12 = hwloc_gl.la
@HWLOC_HAVE_SOLARIS_TRUE at am__append_13 = topology-solaris.c \
@HWLOC_HAVE_SOLARIS_TRUE@ topology-solaris-chiptype.c
- at HWLOC_HAVE_LINUX_TRUE@am__append_14 = topology-linux.c
+ at HWLOC_HAVE_LINUX_TRUE@am__append_14 = topology-linux.c topology-hardwired.c
@HWLOC_HAVE_BGQ_TRUE at am__append_15 = topology-bgq.c
@HWLOC_HAVE_AIX_TRUE at am__append_16 = topology-aix.c
@HWLOC_HAVE_AIX_TRUE at am__append_17 = -lpthread
@@ -272,9 +272,10 @@ am__libhwloc_la_SOURCES_DIST = topology.c traversal.c distances.c \
topology-xml-libxml.c topology-pci.c topology-opencl.c \
topology-cuda.c topology-nvml.c topology-gl.c \
topology-solaris.c topology-solaris-chiptype.c \
- topology-linux.c topology-bgq.c topology-aix.c topology-osf.c \
- topology-hpux.c topology-windows.c topology-darwin.c \
- topology-freebsd.c topology-netbsd.c topology-x86.c
+ topology-linux.c topology-hardwired.c topology-bgq.c \
+ topology-aix.c topology-osf.c topology-hpux.c \
+ topology-windows.c topology-darwin.c topology-freebsd.c \
+ topology-netbsd.c topology-x86.c
@HWLOC_HAVE_LIBXML2_TRUE@@HWLOC_XML_LIBXML_BUILD_STATIC_TRUE at am__objects_1 = topology-xml-libxml.lo
@HWLOC_HAVE_PCI_TRUE@@HWLOC_PCI_BUILD_STATIC_TRUE at am__objects_2 = topology-pci.lo
@HWLOC_HAVE_OPENCL_TRUE@@HWLOC_OPENCL_BUILD_STATIC_TRUE at am__objects_3 = topology-opencl.lo
@@ -283,7 +284,8 @@ am__libhwloc_la_SOURCES_DIST = topology.c traversal.c distances.c \
@HWLOC_GL_BUILD_STATIC_TRUE@@HWLOC_HAVE_GL_TRUE at am__objects_6 = topology-gl.lo
@HWLOC_HAVE_SOLARIS_TRUE at am__objects_7 = topology-solaris.lo \
@HWLOC_HAVE_SOLARIS_TRUE@ topology-solaris-chiptype.lo
- at HWLOC_HAVE_LINUX_TRUE@am__objects_8 = topology-linux.lo
+ at HWLOC_HAVE_LINUX_TRUE@am__objects_8 = topology-linux.lo \
+ at HWLOC_HAVE_LINUX_TRUE@ topology-hardwired.lo
@HWLOC_HAVE_BGQ_TRUE at am__objects_9 = topology-bgq.lo
@HWLOC_HAVE_AIX_TRUE at am__objects_10 = topology-aix.lo
@HWLOC_HAVE_OSF_TRUE at am__objects_11 = topology-osf.lo
@@ -317,9 +319,10 @@ am__libhwloc_embedded_la_SOURCES_DIST = topology.c traversal.c \
topology-xml-libxml.c topology-pci.c topology-opencl.c \
topology-cuda.c topology-nvml.c topology-gl.c \
topology-solaris.c topology-solaris-chiptype.c \
- topology-linux.c topology-bgq.c topology-aix.c topology-osf.c \
- topology-hpux.c topology-windows.c topology-darwin.c \
- topology-freebsd.c topology-netbsd.c topology-x86.c
+ topology-linux.c topology-hardwired.c topology-bgq.c \
+ topology-aix.c topology-osf.c topology-hpux.c \
+ topology-windows.c topology-darwin.c topology-freebsd.c \
+ topology-netbsd.c topology-x86.c
am_libhwloc_embedded_la_OBJECTS = $(am__objects_18)
libhwloc_embedded_la_OBJECTS = $(am_libhwloc_embedded_la_OBJECTS)
@HWLOC_BUILD_STANDALONE_FALSE at am_libhwloc_embedded_la_rpath =
@@ -458,6 +461,7 @@ HWLOC_PLUGINS_PATH = @HWLOC_PLUGINS_PATH@
HWLOC_RELEASE_DATE = @HWLOC_RELEASE_DATE@
HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_VERSION = @HWLOC_VERSION@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
@@ -483,6 +487,7 @@ MKDIR_P = @MKDIR_P@
MPIEXEC_HYDRA_NAME = @MPIEXEC_HYDRA_NAME@
MPIEXEC_NAME = @MPIEXEC_NAME@
MPIRUN_NAME = @MPIRUN_NAME@
+MPLLIBNAME = @MPLLIBNAME@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -557,12 +562,16 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mpl_dist_srcdir = @mpl_dist_srcdir@
+mpl_includedir = @mpl_includedir@
+mpl_lib = @mpl_lib@
+mpl_libdir = @mpl_libdir@
mpl_srcdir = @mpl_srcdir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -576,9 +585,10 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CFLAGS = $(HWLOC_CFLAGS)
+# Beware that files are not rebuilt automatically when reconfiguring with different paths in these flags.
AM_CPPFLAGS = $(HWLOC_CPPFLAGS) -DHWLOC_INSIDE_LIBHWLOC \
-DHWLOC_PLUGINS_PATH=\"$(HWLOC_PLUGINS_PATH)\" \
- $(am__append_30)
+ -DRUNSTATEDIR=\"$(HWLOC_runstatedir)\" $(am__append_30)
AM_LDFLAGS = $(HWLOC_LDFLAGS)
EXTRA_DIST = dolib.c $(am__append_32)
@@ -827,6 +837,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topology-fake.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topology-freebsd.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topology-gl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topology-hardwired.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topology-hpux.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topology-linux.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topology-netbsd.Plo at am__quote@
@@ -1062,9 +1073,9 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- at HWLOC_HAVE_WINDOWS_FALSE@uninstall-local:
@HWLOC_HAVE_MS_LIB_FALSE at clean-local:
@HWLOC_HAVE_WINDOWS_FALSE at clean-local:
+ at HWLOC_HAVE_WINDOWS_FALSE@uninstall-local:
@HWLOC_HAVE_WINDOWS_FALSE at install-exec-hook:
clean: clean-am
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/base64.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/base64.c
index 7a3392f..4e1976f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/base64.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/base64.c
@@ -178,7 +178,7 @@ hwloc_encode_to_base64(const char *src, size_t srclength, char *target, size_t t
if (datalength >= targsize)
return (-1);
target[datalength] = '\0'; /* Returned value doesn't count \0. */
- return (datalength);
+ return (int)(datalength);
}
/* skips all whitespace anywhere.
@@ -213,7 +213,7 @@ hwloc_decode_from_base64(char const *src, char *target, size_t targsize)
if (target) {
if (tarindex >= targsize)
return (-1);
- target[tarindex] = (pos - Base64) << 2;
+ target[tarindex] = (char)(pos - Base64) << 2;
}
state = 1;
break;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
index e2b5a06..fe2da15 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
@@ -1,8 +1,8 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010, 2012 Université Bordeaux
- * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * Copyright © 2011-2015 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -74,9 +74,13 @@ hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_bitmap_t set, int flags
if (topology->binding_hooks.set_thisthread_cpubind)
return topology->binding_hooks.set_thisthread_cpubind(topology, set, flags);
} else {
- if (topology->binding_hooks.set_thisproc_cpubind)
- return topology->binding_hooks.set_thisproc_cpubind(topology, set, flags);
- else if (topology->binding_hooks.set_thisthread_cpubind)
+ if (topology->binding_hooks.set_thisproc_cpubind) {
+ int err = topology->binding_hooks.set_thisproc_cpubind(topology, set, flags);
+ if (err >= 0 || errno != ENOSYS)
+ return err;
+ /* ENOSYS, fallback */
+ }
+ if (topology->binding_hooks.set_thisthread_cpubind)
return topology->binding_hooks.set_thisthread_cpubind(topology, set, flags);
}
@@ -94,9 +98,13 @@ hwloc_get_cpubind(hwloc_topology_t topology, hwloc_bitmap_t set, int flags)
if (topology->binding_hooks.get_thisthread_cpubind)
return topology->binding_hooks.get_thisthread_cpubind(topology, set, flags);
} else {
- if (topology->binding_hooks.get_thisproc_cpubind)
- return topology->binding_hooks.get_thisproc_cpubind(topology, set, flags);
- else if (topology->binding_hooks.get_thisthread_cpubind)
+ if (topology->binding_hooks.get_thisproc_cpubind) {
+ int err = topology->binding_hooks.get_thisproc_cpubind(topology, set, flags);
+ if (err >= 0 || errno != ENOSYS)
+ return err;
+ /* ENOSYS, fallback */
+ }
+ if (topology->binding_hooks.get_thisthread_cpubind)
return topology->binding_hooks.get_thisthread_cpubind(topology, set, flags);
}
@@ -164,9 +172,13 @@ hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_bitmap_t set, int f
if (topology->binding_hooks.get_thisthread_last_cpu_location)
return topology->binding_hooks.get_thisthread_last_cpu_location(topology, set, flags);
} else {
- if (topology->binding_hooks.get_thisproc_last_cpu_location)
- return topology->binding_hooks.get_thisproc_last_cpu_location(topology, set, flags);
- else if (topology->binding_hooks.get_thisthread_last_cpu_location)
+ if (topology->binding_hooks.get_thisproc_last_cpu_location) {
+ int err = topology->binding_hooks.get_thisproc_last_cpu_location(topology, set, flags);
+ if (err >= 0 || errno != ENOSYS)
+ return err;
+ /* ENOSYS, fallback */
+ }
+ if (topology->binding_hooks.get_thisthread_last_cpu_location)
return topology->binding_hooks.get_thisthread_last_cpu_location(topology, set, flags);
}
@@ -184,6 +196,8 @@ hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwl
return -1;
}
+#define HWLOC_MEMBIND_ALLFLAGS (HWLOC_MEMBIND_PROCESS|HWLOC_MEMBIND_THREAD|HWLOC_MEMBIND_STRICT|HWLOC_MEMBIND_MIGRATE|HWLOC_MEMBIND_NOCPUBIND|HWLOC_MEMBIND_BYNODESET)
+
static hwloc_const_nodeset_t
hwloc_fix_membind(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)
{
@@ -272,9 +286,13 @@ hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodes
if (topology->binding_hooks.set_thisthread_membind)
return topology->binding_hooks.set_thisthread_membind(topology, nodeset, policy, flags);
} else {
- if (topology->binding_hooks.set_thisproc_membind)
- return topology->binding_hooks.set_thisproc_membind(topology, nodeset, policy, flags);
- else if (topology->binding_hooks.set_thisthread_membind)
+ if (topology->binding_hooks.set_thisproc_membind) {
+ int err = topology->binding_hooks.set_thisproc_membind(topology, nodeset, policy, flags);
+ if (err >= 0 || errno != ENOSYS)
+ return err;
+ /* ENOSYS, fallback */
+ }
+ if (topology->binding_hooks.set_thisthread_membind)
return topology->binding_hooks.set_thisthread_membind(topology, nodeset, policy, flags);
}
@@ -283,17 +301,20 @@ hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodes
}
int
-hwloc_set_membind(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_membind_policy_t policy, int flags)
+hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
{
- hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
int ret;
- if (hwloc_fix_membind_cpuset(topology, nodeset, set))
- ret = -1;
- else
- ret = hwloc_set_membind_nodeset(topology, nodeset, policy, flags);
-
- hwloc_bitmap_free(nodeset);
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_set_membind_nodeset(topology, set, policy, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ if (hwloc_fix_membind_cpuset(topology, nodeset, set))
+ ret = -1;
+ else
+ ret = hwloc_set_membind_nodeset(topology, nodeset, policy, flags);
+ hwloc_bitmap_free(nodeset);
+ }
return ret;
}
@@ -307,9 +328,13 @@ hwloc_get_membind_nodeset(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hw
if (topology->binding_hooks.get_thisthread_membind)
return topology->binding_hooks.get_thisthread_membind(topology, nodeset, policy, flags);
} else {
- if (topology->binding_hooks.get_thisproc_membind)
- return topology->binding_hooks.get_thisproc_membind(topology, nodeset, policy, flags);
- else if (topology->binding_hooks.get_thisthread_membind)
+ if (topology->binding_hooks.get_thisproc_membind) {
+ int err = topology->binding_hooks.get_thisproc_membind(topology, nodeset, policy, flags);
+ if (err >= 0 || errno != ENOSYS)
+ return err;
+ /* ENOSYS, fallback */
+ }
+ if (topology->binding_hooks.get_thisthread_membind)
return topology->binding_hooks.get_thisthread_membind(topology, nodeset, policy, flags);
}
@@ -318,18 +343,20 @@ hwloc_get_membind_nodeset(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hw
}
int
-hwloc_get_membind(hwloc_topology_t topology, hwloc_cpuset_t set, hwloc_membind_policy_t * policy, int flags)
+hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags)
{
- hwloc_nodeset_t nodeset;
int ret;
- nodeset = hwloc_bitmap_alloc();
- ret = hwloc_get_membind_nodeset(topology, nodeset, policy, flags);
-
- if (!ret)
- hwloc_cpuset_from_nodeset(topology, set, nodeset);
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_get_membind_nodeset(topology, set, policy, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ ret = hwloc_get_membind_nodeset(topology, nodeset, policy, flags);
+ if (!ret)
+ hwloc_cpuset_from_nodeset(topology, set, nodeset);
+ hwloc_bitmap_free(nodeset);
+ }
- hwloc_bitmap_free(nodeset);
return ret;
}
@@ -349,17 +376,21 @@ hwloc_set_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc
int
-hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, hwloc_membind_policy_t policy, int flags)
+hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
{
- hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
int ret;
- if (hwloc_fix_membind_cpuset(topology, nodeset, set))
- ret = -1;
- else
- ret = hwloc_set_proc_membind_nodeset(topology, pid, nodeset, policy, flags);
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_set_proc_membind_nodeset(topology, pid, set, policy, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ if (hwloc_fix_membind_cpuset(topology, nodeset, set))
+ ret = -1;
+ else
+ ret = hwloc_set_proc_membind_nodeset(topology, pid, nodeset, policy, flags);
+ hwloc_bitmap_free(nodeset);
+ }
- hwloc_bitmap_free(nodeset);
return ret;
}
@@ -374,24 +405,30 @@ hwloc_get_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc
}
int
-hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, hwloc_membind_policy_t * policy, int flags)
+hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags)
{
- hwloc_nodeset_t nodeset;
int ret;
- nodeset = hwloc_bitmap_alloc();
- ret = hwloc_get_proc_membind_nodeset(topology, pid, nodeset, policy, flags);
-
- if (!ret)
- hwloc_cpuset_from_nodeset(topology, set, nodeset);
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_get_proc_membind_nodeset(topology, pid, set, policy, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ ret = hwloc_get_proc_membind_nodeset(topology, pid, nodeset, policy, flags);
+ if (!ret)
+ hwloc_cpuset_from_nodeset(topology, set, nodeset);
+ hwloc_bitmap_free(nodeset);
+ }
- hwloc_bitmap_free(nodeset);
return ret;
}
int
hwloc_set_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
+ if (!len)
+ /* nothing to do */
+ return 0;
+
nodeset = hwloc_fix_membind(topology, nodeset);
if (!nodeset)
return -1;
@@ -404,23 +441,33 @@ hwloc_set_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size
}
int
-hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t set, hwloc_membind_policy_t policy, int flags)
+hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
{
- hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
int ret;
- if (hwloc_fix_membind_cpuset(topology, nodeset, set))
- ret = -1;
- else
- ret = hwloc_set_area_membind_nodeset(topology, addr, len, nodeset, policy, flags);
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_set_area_membind_nodeset(topology, addr, len, set, policy, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ if (hwloc_fix_membind_cpuset(topology, nodeset, set))
+ ret = -1;
+ else
+ ret = hwloc_set_area_membind_nodeset(topology, addr, len, nodeset, policy, flags);
+ hwloc_bitmap_free(nodeset);
+ }
- hwloc_bitmap_free(nodeset);
return ret;
}
int
hwloc_get_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags)
{
+ if (!len) {
+ /* nothing to query */
+ errno = EINVAL;
+ return -1;
+ }
+
if (topology->binding_hooks.get_area_membind)
return topology->binding_hooks.get_area_membind(topology, addr, len, nodeset, policy, flags);
@@ -429,25 +476,64 @@ hwloc_get_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size
}
int
-hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t set, hwloc_membind_policy_t * policy, int flags)
+hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags)
{
- hwloc_nodeset_t nodeset;
int ret;
- nodeset = hwloc_bitmap_alloc();
- ret = hwloc_get_area_membind_nodeset(topology, addr, len, nodeset, policy, flags);
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_get_area_membind_nodeset(topology, addr, len, set, policy, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ ret = hwloc_get_area_membind_nodeset(topology, addr, len, nodeset, policy, flags);
+ if (!ret)
+ hwloc_cpuset_from_nodeset(topology, set, nodeset);
+ hwloc_bitmap_free(nodeset);
+ }
+
+ return ret;
+}
+
+static int
+hwloc_get_area_memlocation_by_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, int flags)
+{
+ if (flags & ~HWLOC_MEMBIND_ALLFLAGS) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (!len)
+ /* nothing to do */
+ return 0;
- if (!ret)
- hwloc_cpuset_from_nodeset(topology, set, nodeset);
+ if (topology->binding_hooks.get_area_memlocation)
+ return topology->binding_hooks.get_area_memlocation(topology, addr, len, nodeset, flags);
+
+ errno = ENOSYS;
+ return -1;
+}
+
+int
+hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t set, int flags)
+{
+ int ret;
+
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_get_area_memlocation_by_nodeset(topology, addr, len, set, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ ret = hwloc_get_area_memlocation_by_nodeset(topology, addr, len, nodeset, flags);
+ if (!ret)
+ hwloc_cpuset_from_nodeset(topology, set, nodeset);
+ hwloc_bitmap_free(nodeset);
+ }
- hwloc_bitmap_free(nodeset);
return ret;
}
void *
hwloc_alloc_heap(hwloc_topology_t topology __hwloc_attribute_unused, size_t len)
{
- void *p;
+ void *p = NULL;
#if defined(hwloc_getpagesize) && defined(HAVE_POSIX_MEMALIGN)
errno = posix_memalign(&p, hwloc_getpagesize(), len);
if (errno)
@@ -464,7 +550,8 @@ hwloc_alloc_heap(hwloc_topology_t topology __hwloc_attribute_unused, size_t len)
void *
hwloc_alloc_mmap(hwloc_topology_t topology __hwloc_attribute_unused, size_t len)
{
- return mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+ void * buffer = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+ return buffer == MAP_FAILED ? NULL : buffer;
}
#endif
@@ -531,20 +618,24 @@ fallback:
}
void *
-hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t set, hwloc_membind_policy_t policy, int flags)
+hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
{
- hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
void *ret;
- if (hwloc_fix_membind_cpuset(topology, nodeset, set)) {
- if (flags & HWLOC_MEMBIND_STRICT)
- ret = NULL;
- else
- ret = hwloc_alloc(topology, len);
- } else
- ret = hwloc_alloc_membind_nodeset(topology, len, nodeset, policy, flags);
+ if (flags & HWLOC_MEMBIND_BYNODESET) {
+ ret = hwloc_alloc_membind_nodeset(topology, len, set, policy, flags);
+ } else {
+ hwloc_nodeset_t nodeset = hwloc_bitmap_alloc();
+ if (hwloc_fix_membind_cpuset(topology, nodeset, set)) {
+ if (flags & HWLOC_MEMBIND_STRICT)
+ ret = NULL;
+ else
+ ret = hwloc_alloc(topology, len);
+ } else
+ ret = hwloc_alloc_membind_nodeset(topology, len, nodeset, policy, flags);
+ hwloc_bitmap_free(nodeset);
+ }
- hwloc_bitmap_free(nodeset);
return ret;
}
@@ -651,6 +742,11 @@ static int dontget_area_membind(hwloc_topology_t topology __hwloc_attribute_unus
{
return dontset_return_complete_nodeset(topology, set, policy);
}
+static int dontget_area_memlocation(hwloc_topology_t topology __hwloc_attribute_unused, const void *addr __hwloc_attribute_unused, size_t size __hwloc_attribute_unused, hwloc_bitmap_t set, int flags __hwloc_attribute_unused)
+{
+ hwloc_membind_policy_t policy;
+ return dontset_return_complete_nodeset(topology, set, &policy);
+}
static void * dontalloc_membind(hwloc_topology_t topology __hwloc_attribute_unused, size_t size __hwloc_attribute_unused, hwloc_const_bitmap_t set __hwloc_attribute_unused, hwloc_membind_policy_t policy __hwloc_attribute_unused, int flags __hwloc_attribute_unused)
{
@@ -687,6 +783,7 @@ static void hwloc_set_dummy_hooks(struct hwloc_binding_hooks *hooks,
hooks->get_proc_membind = dontget_proc_membind;
hooks->set_area_membind = dontset_area_membind;
hooks->get_area_membind = dontget_area_membind;
+ hooks->get_area_memlocation = dontget_area_memlocation;
hooks->alloc_membind = dontalloc_membind;
hooks->free_membind = dontfree_membind;
}
@@ -776,6 +873,7 @@ hwloc_set_binding_hooks(struct hwloc_topology *topology)
DO(mem,get_proc_membind);
DO(mem,set_area_membind);
DO(mem,get_area_membind);
+ DO(mem,get_area_memlocation);
DO(mem,alloc_membind);
}
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/bitmap.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/bitmap.c
index 1e78a96..d6b5c5e 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/bitmap.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/bitmap.c
@@ -241,7 +241,7 @@ int hwloc_bitmap_snprintf(char * __hwloc_restrict buf, size_t buflen, const stru
return -1;
ret += res;
if (res >= size)
- res = size>0 ? size - 1 : 0;
+ res = size>0 ? (int)size - 1 : 0;
tmp += res;
size -= res;
}
@@ -291,7 +291,7 @@ int hwloc_bitmap_snprintf(char * __hwloc_restrict buf, size_t buflen, const stru
#endif
if (res >= size)
- res = size>0 ? size - 1 : 0;
+ res = size>0 ? (int)size - 1 : 0;
tmp += res;
size -= res;
@@ -422,7 +422,7 @@ int hwloc_bitmap_list_snprintf(char * __hwloc_restrict buf, size_t buflen, const
ret += res;
if (res >= size)
- res = size>0 ? size - 1 : 0;
+ res = size>0 ? (int)size - 1 : 0;
tmp += res;
size -= res;
@@ -526,7 +526,7 @@ int hwloc_bitmap_taskset_snprintf(char * __hwloc_restrict buf, size_t buflen, co
return -1;
ret += res;
if (res >= size)
- res = size>0 ? size - 1 : 0;
+ res = size>0 ? (int)size - 1 : 0;
tmp += res;
size -= res;
}
@@ -562,7 +562,7 @@ int hwloc_bitmap_taskset_snprintf(char * __hwloc_restrict buf, size_t buflen, co
return -1;
ret += res;
if (res >= size)
- res = size>0 ? size - 1 : 0;
+ res = size>0 ? (int)size - 1 : 0;
tmp += res;
size -= res;
}
@@ -620,7 +620,7 @@ int hwloc_bitmap_taskset_sscanf(struct hwloc_bitmap_s *set, const char * __hwloc
}
/* we know there are other characters now */
- chars = strlen(current);
+ chars = (int)strlen(current);
count = (chars * 4 + HWLOC_BITS_PER_LONG - 1) / HWLOC_BITS_PER_LONG;
hwloc_bitmap_reset_by_ulongs(set, count);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c
index dc656e3..b340802 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c
@@ -1,6 +1,6 @@
/*
- * Copyright © 2009-2015 Inria. All rights reserved.
- * Copyright © 2012 Université Bordeau 1
+ * Copyright © 2009-2016 Inria. All rights reserved.
+ * Copyright © 2012 Université Bordeaux
* See COPYING in top-level directory.
*/
@@ -8,6 +8,7 @@
#include <hwloc.h>
#include <private/private.h>
#include <private/xml.h>
+#include <private/misc.h>
#define HWLOC_COMPONENT_STOP_NAME "stop"
#define HWLOC_COMPONENT_EXCLUDE_CHAR '-'
@@ -24,6 +25,7 @@ static unsigned hwloc_components_users = 0; /* first one initializes, last ones
static int hwloc_components_verbose = 0;
#ifdef HWLOC_HAVE_PLUGINS
static int hwloc_plugins_verbose = 0;
+static const char * hwloc_plugins_blacklist = NULL;
#endif
/* hwloc_components_mutex serializes:
@@ -89,6 +91,12 @@ hwloc__dlforeach_cb(const char *filename, void *_data __hwloc_attribute_unused)
else
basename++;
+ if (hwloc_plugins_blacklist && strstr(hwloc_plugins_blacklist, basename)) {
+ if (hwloc_plugins_verbose)
+ fprintf(stderr, "Plugin `%s' is blacklisted in the environment\n", basename);
+ goto out;
+ }
+
/* dlopen and get the component structure */
handle = lt_dlopenext(filename);
if (!handle) {
@@ -197,6 +205,8 @@ hwloc_plugins_init(void)
verboseenv = getenv("HWLOC_PLUGINS_VERBOSE");
hwloc_plugins_verbose = verboseenv ? atoi(verboseenv) : 0;
+ hwloc_plugins_blacklist = getenv("HWLOC_PLUGINS_BLACKLIST");
+
err = lt_dlinit();
if (err)
goto out;
@@ -458,14 +468,15 @@ hwloc_disc_component_try_enable(struct hwloc_topology *topology,
struct hwloc_disc_component *comp,
const char *comparg,
unsigned *excludes,
- int envvar_forced,
- int verbose_errors)
+ int envvar_forced)
{
struct hwloc_backend *backend;
int err;
if ((*excludes) & comp->type) {
- if (hwloc_components_verbose || verbose_errors)
+ if (hwloc_components_verbose)
+ /* do not warn if envvar_forced since system-wide HWLOC_COMPONENTS must be silently ignored after set_xml() etc.
+ */
fprintf(stderr, "Excluding %s discovery component `%s', conflicts with excludes 0x%x\n",
hwloc_disc_component_type_string(comp->type), comp->name, *excludes);
return -1;
@@ -473,7 +484,7 @@ hwloc_disc_component_try_enable(struct hwloc_topology *topology,
backend = comp->instantiate(comp, comparg, NULL, NULL);
if (!backend) {
- if (hwloc_components_verbose || verbose_errors)
+ if (hwloc_components_verbose || envvar_forced)
fprintf(stderr, "Failed to instantiate discovery component `%s'\n", comp->name);
return -1;
}
@@ -520,11 +531,11 @@ hwloc_disc_components_enable_others(struct hwloc_topology *topology)
char c, d;
/* replace libpci with pci for backward compatibility with v1.6 */
- if (!strncmp(curenv, "libpci", s)) {
+ if (!strncmp(curenv, "libpci", 6) && s == 6) {
curenv[0] = curenv[1] = curenv[2] = *HWLOC_COMPONENT_SEPS;
curenv += 3;
s -= 3;
- } else if (curenv[0] == HWLOC_COMPONENT_EXCLUDE_CHAR && !strncmp(curenv+1, "libpci", s-1)) {
+ } else if (curenv[0] == HWLOC_COMPONENT_EXCLUDE_CHAR && !strncmp(curenv+1, "libpci", 6) && s == 7 ) {
curenv[3] = curenv[0];
curenv[0] = curenv[1] = curenv[2] = *HWLOC_COMPONENT_SEPS;
curenv += 3;
@@ -553,7 +564,7 @@ hwloc_disc_components_enable_others(struct hwloc_topology *topology)
comp = hwloc_disc_component_find(-1, curenv);
if (comp) {
- hwloc_disc_component_try_enable(topology, comp, arg ? arg+1 : NULL, &excludes, 1 /* envvar forced */, 1 /* envvar forced need warnings */);
+ hwloc_disc_component_try_enable(topology, comp, arg ? arg+1 : NULL, &excludes, 1 /* envvar forced */);
} else {
fprintf(stderr, "Cannot find discovery component `%s'\n", curenv);
}
@@ -583,7 +594,7 @@ nextname:
char *curenv = env;
while (*curenv) {
size_t s = strcspn(curenv, HWLOC_COMPONENT_SEPS);
- if (curenv[0] == HWLOC_COMPONENT_EXCLUDE_CHAR && !strncmp(curenv+1, comp->name, s-1)) {
+ if (curenv[0] == HWLOC_COMPONENT_EXCLUDE_CHAR && !strncmp(curenv+1, comp->name, s-1) && strlen(comp->name) == s-1) {
if (hwloc_components_verbose)
fprintf(stderr, "Excluding %s discovery component `%s' because of HWLOC_COMPONENTS environment variable\n",
hwloc_disc_component_type_string(comp->type), comp->name);
@@ -595,7 +606,7 @@ nextname:
curenv++;
}
}
- hwloc_disc_component_try_enable(topology, comp, NULL, &excludes, 0 /* defaults, not envvar forced */, 0 /* defaults don't need warnings on conflicts */);
+ hwloc_disc_component_try_enable(topology, comp, NULL, &excludes, 0 /* defaults, not envvar forced */);
nextcomp:
comp = comp->next;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
index 5288680..214a9ce 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2010-2015 Inria. All rights reserved.
+ * Copyright © 2010-2016 Inria. All rights reserved.
* Copyright © 2011-2012 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -9,6 +9,7 @@
#include <hwloc.h>
#include <private/private.h>
#include <private/debug.h>
+#include <private/misc.h>
#include <float.h>
#include <math.h>
@@ -84,6 +85,7 @@ void hwloc_distances_set(hwloc_topology_t __hwloc_restrict topology, hwloc_obj_t
if (!nbobjs)
/* we're just clearing, return now */
return;
+ assert(nbobjs >= 2);
/* create the new element */
osdist = malloc(sizeof(struct hwloc_os_distances_s));
@@ -136,7 +138,21 @@ static void hwloc_distances__set_from_string(struct hwloc_topology *topology,
if (sscanf(string, "%u-%u:", &i, &j) == 2) {
/* range i-j */
+ if (j <= i) {
+ fprintf(stderr, "Ignoring %s distances from environment variable, range doesn't cover at least 2 indexes\n",
+ hwloc_obj_type_string(type));
+ return;
+ }
nbobjs = j-i+1;
+
+ tmp = strchr(string, ':');
+ if (!tmp) {
+ fprintf(stderr, "Ignoring %s distances from environment variable, missing colon\n",
+ hwloc_obj_type_string(type));
+ return;
+ }
+ tmp++;
+
indexes = calloc(nbobjs, sizeof(unsigned));
distances = calloc(nbobjs*nbobjs, sizeof(float));
/* make sure the user didn't give a veeeeery large range */
@@ -147,12 +163,14 @@ static void hwloc_distances__set_from_string(struct hwloc_topology *topology,
}
for(j=0; j<nbobjs; j++)
indexes[j] = j+i;
- tmp = strchr(string, ':') + 1;
} else {
/* explicit list of indexes, count them */
while (1) {
size_t size = strspn(tmp, "0123456789");
+ if (!size)
+ /* missing index */
+ break;
if (tmp[size] != ',') {
/* last element */
tmp += size;
@@ -164,6 +182,11 @@ static void hwloc_distances__set_from_string(struct hwloc_topology *topology,
nbobjs++;
}
+ if (nbobjs < 2) {
+ fprintf(stderr, "Ignoring %s distances from environment variable, needs at least 2 indexes\n",
+ hwloc_obj_type_string(type));
+ return;
+ }
if (*tmp != ':') {
fprintf(stderr, "Ignoring %s distances from environment variable, missing colon\n",
hwloc_obj_type_string(type));
@@ -267,7 +290,7 @@ int hwloc_topology_set_distance_matrix(hwloc_topology_t __hwloc_restrict topolog
return 0;
}
- if (!nbobjs || !indexes || !distances)
+ if (nbobjs < 2 || !indexes || !distances)
return -1;
if (hwloc_distances__check_matrix(topology, type, nbobjs, indexes, NULL, distances) < 0)
@@ -455,6 +478,7 @@ hwloc_distances__finalize_logical(struct hwloc_topology *topology,
unsigned nbobjs,
hwloc_obj_t *objs, float *osmatrix)
{
+ struct hwloc_distances_s ** tmpdistances;
unsigned i, j, li, lj, minl;
float min = FLT_MAX, max = FLT_MIN;
hwloc_obj_t root;
@@ -562,8 +586,12 @@ hwloc_distances__finalize_logical(struct hwloc_topology *topology,
}
/* store the normalized latency matrix in the root object */
+ tmpdistances = realloc(root->distances, (root->distances_count+1) * sizeof(struct hwloc_distances_s *));
+ if (!tmpdistances)
+ return; /* Failed to allocate, ignore this distance matrix */
+
+ root->distances = tmpdistances;
idx = root->distances_count++;
- root->distances = realloc(root->distances, root->distances_count * sizeof(struct hwloc_distances_s *));
root->distances[idx] = malloc(sizeof(struct hwloc_distances_s));
root->distances[idx]->relative_depth = relative_depth;
root->distances[idx]->nbobjs = nbobjs;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/pci-common.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/pci-common.c
index 01d4e79..39df9dc 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/pci-common.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/pci-common.c
@@ -1,12 +1,14 @@
/*
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
#include <private/autogen/config.h>
#include <hwloc.h>
#include <hwloc/plugins.h>
+#include <private/private.h>
#include <private/debug.h>
+#include <private/misc.h>
#ifdef HWLOC_DEBUG
static void
@@ -469,7 +471,7 @@ hwloc_pci_find_linkspeed(const unsigned char *config,
* PCIe Gen2 = 5 GT/s signal-rate per lane with 8/10 encoding = 0.5 GB/s data-rate per lane
* PCIe Gen3 = 8 GT/s signal-rate per lane with 128/130 encoding = 1 GB/s data-rate per lane
*/
- lanespeed = speed <= 2 ? 2.5 * speed * 0.8 : 8.0 * 128/130; /* Gbit/s per lane */
+ lanespeed = speed <= 2 ? 2.5f * speed * 0.8f : 8.0f * 128/130; /* Gbit/s per lane */
*linkspeed = lanespeed * width / 8; /* GB/s */
return 0;
}
@@ -499,9 +501,14 @@ hwloc_pci_prepare_bridge(hwloc_obj_t obj,
battr = &obj->attr->bridge;
- if (config[HWLOC_PCI_PRIMARY_BUS] != pattr->bus)
+ if (config[HWLOC_PCI_PRIMARY_BUS] != pattr->bus) {
+ /* Sometimes the config space contains 00 instead of the actual primary bus number.
+ * Always trust the bus ID because it was built by the system which has more information
+ * to workaround such problems (e.g. ACPI information about PCI parent/children).
+ */
hwloc_debug(" %04x:%02x:%02x.%01x bridge with (ignored) invalid PCI_PRIMARY_BUS %02x\n",
pattr->domain, pattr->bus, pattr->dev, pattr->func, config[HWLOC_PCI_PRIMARY_BUS]);
+ }
obj->type = HWLOC_OBJ_BRIDGE;
battr->upstream_type = HWLOC_OBJ_BRIDGE_PCI;
@@ -510,5 +517,21 @@ hwloc_pci_prepare_bridge(hwloc_obj_t obj,
battr->downstream.pci.secondary_bus = config[HWLOC_PCI_SECONDARY_BUS];
battr->downstream.pci.subordinate_bus = config[HWLOC_PCI_SUBORDINATE_BUS];
+ if (battr->downstream.pci.secondary_bus <= pattr->bus
+ || battr->downstream.pci.subordinate_bus <= pattr->bus
+ || battr->downstream.pci.secondary_bus > battr->downstream.pci.subordinate_bus) {
+ /* This should catch most cases of invalid bridge information
+ * (e.g. 00 for secondary and subordinate).
+ * Ideally we would also check that [secondary-subordinate] is included
+ * in the parent bridge [secondary+1:subordinate]. But that's hard to do
+ * because objects may be discovered out of order (especially in the fsroot case).
+ */
+ hwloc_debug(" %04x:%02x:%02x.%01x bridge has invalid secondary-subordinate buses [%02x-%02x]\n",
+ pattr->domain, pattr->bus, pattr->dev, pattr->func,
+ battr->downstream.pci.secondary_bus, battr->downstream.pci.subordinate_bus);
+ hwloc_free_unlinked_object(obj);
+ return -1;
+ }
+
return 0;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
index 1b98ba6..18ae673 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011, 2013 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -433,7 +433,7 @@ hwloc_aix_get_sth_membind(hwloc_topology_t topology, rstype_t what, rsid_t who,
hwloc_bitmap_free(hwloc_set);
- *policy = HWLOC_MEMBIND_DEFAULT;
+ *policy = HWLOC_MEMBIND_BIND;
res = 0;
out:
@@ -585,7 +585,7 @@ hwloc_aix_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_nodes
ret = ra_mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0, R_RSET, rsid, aix_policy);
rs_free(rsid.at_rset);
- return ret;
+ return ret == (void*)-1 ? NULL : ret;
}
#endif /* P_DEFAULT */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c
index 1258b65..f3aec62 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c
@@ -15,6 +15,8 @@
#include <spi/include/kernel/location.h>
#include <spi/include/kernel/process.h>
+#ifndef HWLOC_DISABLE_BGQ_PORT_TEST
+
static int
hwloc_look_bgq(struct hwloc_backend *backend)
{
@@ -239,3 +241,5 @@ const struct hwloc_component hwloc_bgq_component = {
0,
&hwloc_bgq_disc_component
};
+
+#endif /* !HWLOC_DISABLE_BGQ_PORT_TEST */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c
index a1c6bff..103319f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c
@@ -86,6 +86,8 @@ static unsigned hwloc_cuda_cores_per_MP(int major, int minor)
return 192;
case 5:
return 128;
+ case 6:
+ return 64;
}
hwloc_debug("unknown compute capability %u.%u, disabling core display.\n", major, minor);
return 0;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hardwired.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hardwired.c
new file mode 100644
index 0000000..d448f3d
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hardwired.c
@@ -0,0 +1,197 @@
+/*
+ * Copyright © 2015-2016 Inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+
+#include <hwloc.h>
+#include <private/private.h>
+
+int hwloc_look_hardwired_fujitsu_k(struct hwloc_topology *topology)
+{
+ /* If a broken core gets disabled, its bit disappears and other core bits are NOT shifted towards 0.
+ * Node is not given to user job, not need to handle that case properly.
+ */
+ unsigned i;
+ hwloc_obj_t obj;
+ hwloc_bitmap_t set;
+
+ for(i=0; i<8; i++) {
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_set(set, i);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_INSTRUCTION;
+ obj->attr->cache.depth = 1;
+ obj->attr->cache.size = 32*1024;
+ obj->attr->cache.linesize = 128;
+ obj->attr->cache.associativity = 2;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_DATA;
+ obj->attr->cache.depth = 1;
+ obj->attr->cache.size = 32*1024;
+ obj->attr->cache.linesize = 128;
+ obj->attr->cache.associativity = 2;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, i);
+ obj->cpuset = set;
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_set_range(set, 0, 7);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED;
+ obj->attr->cache.depth = 2;
+ obj->attr->cache.size = 6*1024*1024;
+ obj->attr->cache.linesize = 128;
+ obj->attr->cache.associativity = 12;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_PACKAGE, 0);
+ obj->cpuset = set;
+ hwloc_obj_add_info(obj, "CPUVendor", "Fujitsu");
+ hwloc_obj_add_info(obj, "CPUModel", "SPARC64 VIIIfx");
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ hwloc_setup_pu_level(topology, 8);
+
+ return 0;
+}
+
+int hwloc_look_hardwired_fujitsu_fx10(struct hwloc_topology *topology)
+{
+ /* If a broken core gets disabled, its bit disappears and other core bits are NOT shifted towards 0.
+ * Node is not given to user job, not need to handle that case properly.
+ */
+ unsigned i;
+ hwloc_obj_t obj;
+ hwloc_bitmap_t set;
+
+ for(i=0; i<16; i++) {
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_set(set, i);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_INSTRUCTION;
+ obj->attr->cache.depth = 1;
+ obj->attr->cache.size = 32*1024;
+ obj->attr->cache.linesize = 128;
+ obj->attr->cache.associativity = 2;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_DATA;
+ obj->attr->cache.depth = 1;
+ obj->attr->cache.size = 32*1024;
+ obj->attr->cache.linesize = 128;
+ obj->attr->cache.associativity = 2;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, i);
+ obj->cpuset = set;
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_set_range(set, 0, 15);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED;
+ obj->attr->cache.depth = 2;
+ obj->attr->cache.size = 12*1024*1024;
+ obj->attr->cache.linesize = 128;
+ obj->attr->cache.associativity = 24;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_PACKAGE, 0);
+ obj->cpuset = set;
+ hwloc_obj_add_info(obj, "CPUVendor", "Fujitsu");
+ hwloc_obj_add_info(obj, "CPUModel", "SPARC64 IXfx");
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ hwloc_setup_pu_level(topology, 16);
+
+ return 0;
+}
+
+int hwloc_look_hardwired_fujitsu_fx100(struct hwloc_topology *topology)
+{
+ /* If a broken core gets disabled, its bit disappears and other core bits are NOT shifted towards 0.
+ * Node is not given to user job, not need to handle that case properly.
+ */
+ unsigned i;
+ hwloc_obj_t obj;
+ hwloc_bitmap_t set;
+
+ for(i=0; i<34; i++) {
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_set(set, i);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_INSTRUCTION;
+ obj->attr->cache.depth = 1;
+ obj->attr->cache.size = 64*1024;
+ obj->attr->cache.linesize = 256;
+ obj->attr->cache.associativity = 4;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_dup(set);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_DATA;
+ obj->attr->cache.depth = 1;
+ obj->attr->cache.size = 64*1024;
+ obj->attr->cache.linesize = 256;
+ obj->attr->cache.associativity = 4;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, i);
+ obj->cpuset = set;
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_set_range(obj->cpuset, 0, 15);
+ hwloc_bitmap_set(obj->cpuset, 32);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED;
+ obj->attr->cache.depth = 2;
+ obj->attr->cache.size = 12*1024*1024;
+ obj->attr->cache.linesize = 256;
+ obj->attr->cache.associativity = 24;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ obj->cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_set_range(obj->cpuset, 16, 31);
+ hwloc_bitmap_set(obj->cpuset, 33);
+ obj->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED;
+ obj->attr->cache.depth = 2;
+ obj->attr->cache.size = 12*1024*1024;
+ obj->attr->cache.linesize = 256;
+ obj->attr->cache.associativity = 24;
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_PACKAGE, 0);
+ obj->cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_set_range(obj->cpuset, 0, 33);
+ hwloc_obj_add_info(obj, "CPUVendor", "Fujitsu");
+ hwloc_obj_add_info(obj, "CPUModel", "SPARC64 XIfx");
+ hwloc_insert_object_by_cpuset(topology, obj);
+
+ hwloc_setup_pu_level(topology, 34);
+
+ return 0;
+}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
index 44a4a4c..44258cc 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
@@ -142,6 +142,7 @@ static void*
hwloc_hpux_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
int mmap_flags;
+ void *p;
/* Can not give a set of nodes. */
if (!hwloc_bitmap_isequal(nodeset, hwloc_topology_get_complete_nodeset(topology))) {
@@ -165,7 +166,8 @@ hwloc_hpux_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_node
return NULL;
}
- return mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | mmap_flags, -1, 0);
+ p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | mmap_flags, -1, 0);
+ return p == MAP_FAILED ? NULL : p;
}
#endif /* MAP_MEM_FIRST_TOUCH */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
index 2d9d4da..c95e798 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
- * Copyright © 2009-2013 Université Bordeaux
+ * Copyright © 2009-2016 Inria. All rights reserved.
+ * Copyright © 2009-2013, 2015 Université Bordeaux
* Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
* Copyright © 2015 Intel, Inc. All rights reserved.
* Copyright © 2010 IBM
@@ -27,7 +27,7 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#ifdef HAVE_LIBUDEV_H
+#ifdef HWLOC_HAVE_LIBUDEV
#include <libudev.h>
#endif
#include <sys/types.h>
@@ -36,19 +36,31 @@
#include <pthread.h>
#include <sys/mman.h>
#include <sys/syscall.h>
-#if defined HWLOC_HAVE_SET_MEMPOLICY || defined HWLOC_HAVE_MBIND
+#include <mntent.h>
+#if defined HWLOC_HAVE_SET_MEMPOLICY || defined HWLOC_HAVE_MBIND || defined HWLOC_HAVE_MOVE_PAGES
#define migratepages migrate_pages /* workaround broken migratepages prototype in numaif.h before libnuma 2.0.2 */
#include <numaif.h>
#endif
struct hwloc_linux_backend_data_s {
+ char *root_path; /* NULL if unused */
int root_fd; /* The file descriptor for the file system root, used when browsing, e.g., Linux' sysfs and procfs. */
int is_real_fsroot; /* Boolean saying whether root_fd points to the real filesystem root of the system */
-#ifdef HAVE_LIBUDEV_H
+#ifdef HWLOC_HAVE_LIBUDEV
struct udev *udev; /* Global udev context */
#endif
-
+ char *dumped_hwdata_dirname;
+ enum {
+ HWLOC_LINUX_ARCH_X86, /* x86 32 or 64bits, including k1om (KNC) */
+ HWLOC_LINUX_ARCH_IA64,
+ HWLOC_LINUX_ARCH_ARM,
+ HWLOC_LINUX_ARCH_POWER,
+ HWLOC_LINUX_ARCH_UNKNOWN
+ } arch;
+ int is_knl;
struct utsname utsname; /* fields contain \0 when unknown */
+ unsigned fallback_nbprocessors;
+ unsigned pagesize;
int deprecated_classlinks_model; /* -2 if never tried, -1 if unknown, 0 if new (device contains class/name), 1 if old (device contains class:name) */
int mic_need_directlookup; /* if not tried yet, 0 if not needed, 1 if needed */
@@ -61,8 +73,8 @@ struct hwloc_linux_backend_data_s {
* Misc Abstraction layers *
***************************/
-#if !(defined HWLOC_HAVE_SCHED_SETAFFINITY) && (defined HWLOC_HAVE__SYSCALL3)
-/* libc doesn't have support for sched_setaffinity, build system call
+#if !(defined HWLOC_HAVE_SCHED_SETAFFINITY) && (defined HWLOC_HAVE_SYSCALL)
+/* libc doesn't have support for sched_setaffinity, make system call
* ourselves: */
# include <linux/unistd.h>
# ifndef __NR_sched_setaffinity
@@ -96,7 +108,7 @@ struct hwloc_linux_backend_data_s {
# endif
# endif
# ifndef sched_setaffinity
- _syscall3(int, sched_setaffinity, pid_t, pid, unsigned int, lg, const void *, mask)
+# define sched_setaffinity(pid, lg, mask) syscall(__NR_sched_setaffinity, pid, lg, mask)
# endif
# ifndef __NR_sched_getaffinity
# ifdef __i386__
@@ -129,7 +141,7 @@ struct hwloc_linux_backend_data_s {
# endif
# endif
# ifndef sched_getaffinity
- _syscall3(int, sched_getaffinity, pid_t, pid, unsigned int, lg, void *, mask)
+# define sched_getaffinity(pid, lg, mask) (syscall(__NR_sched_getaffinity, pid, lg, mask) < 0 ? -1 : 0)
# endif
#endif
@@ -347,7 +359,7 @@ hwloc_linux_set_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
return sched_setaffinity(tid, sizeof(linux_set), &linux_set);
#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
-#elif defined(HWLOC_HAVE__SYSCALL3)
+#elif defined(HWLOC_HAVE_SYSCALL)
unsigned long mask = hwloc_bitmap_to_ulong(hwloc_set);
#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
@@ -355,10 +367,10 @@ hwloc_linux_set_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
return sched_setaffinity(tid, sizeof(mask), (void*) &mask);
#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
-#else /* !_SYSCALL3 */
+#else /* !SYSCALL */
errno = ENOSYS;
return -1;
-#endif /* !_SYSCALL3 */
+#endif /* !SYSCALL */
}
#if defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY)
@@ -427,7 +439,7 @@ hwloc_linux_find_kernel_nr_cpus(hwloc_topology_t topology)
/* start from scratch, the topology isn't ready yet (complete_cpuset is missing (-1) or empty (0))*/
nr_cpus = 1;
- possible = fopen("/sys/devices/system/cpu/possible", "r");
+ possible = fopen("/sys/devices/system/cpu/possible", "r"); /* binding only supported in real fsroot, no need for data->root_fd */
if (possible) {
hwloc_bitmap_t possible_bitmap = hwloc_bitmap_alloc();
if (hwloc_linux_parse_cpuset_file(possible, possible_bitmap) == 0) {
@@ -510,7 +522,7 @@ hwloc_linux_get_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
for(cpu=0; cpu<CPU_SETSIZE; cpu++)
if (CPU_ISSET(cpu, &linux_set))
hwloc_bitmap_set(hwloc_set, cpu);
-#elif defined(HWLOC_HAVE__SYSCALL3)
+#elif defined(HWLOC_HAVE_SYSCALL)
unsigned long mask;
#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
@@ -522,10 +534,10 @@ hwloc_linux_get_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
return -1;
hwloc_bitmap_from_ulong(hwloc_set, mask);
-#else /* !_SYSCALL3 */
+#else /* !SYSCALL */
errno = ENOSYS;
return -1;
-#endif /* !_SYSCALL3 */
+#endif /* !SYSCALL */
return 0;
}
@@ -1218,7 +1230,7 @@ hwloc_linux_set_area_membind(hwloc_topology_t topology, const void *addr, size_t
unsigned linuxflags = 0;
int err;
- remainder = (uintptr_t) addr & (sysconf(_SC_PAGESIZE)-1);
+ remainder = (uintptr_t) addr & (hwloc_getpagesize()-1);
addr = (char*) addr - remainder;
len += remainder;
@@ -1267,7 +1279,7 @@ hwloc_linux_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_nod
int err;
buffer = hwloc_alloc_mmap(topology, len);
- if (buffer == MAP_FAILED)
+ if (!buffer)
return NULL;
err = hwloc_linux_set_area_membind(topology, buffer, len, nodeset, policy, flags);
@@ -1497,6 +1509,49 @@ hwloc_linux_get_area_membind(hwloc_topology_t topology, const void *addr, size_t
#endif /* HWLOC_HAVE_SET_MEMPOLICY */
+#ifdef HWLOC_HAVE_MOVE_PAGES
+static int
+hwloc_linux_get_area_memlocation(hwloc_topology_t topology __hwloc_attribute_unused, const void *addr, size_t len, hwloc_nodeset_t nodeset, int flags __hwloc_attribute_unused)
+{
+ unsigned offset;
+ unsigned long count;
+ void **pages;
+ int *status;
+ int pagesize = hwloc_getpagesize();
+ int ret;
+ unsigned i;
+
+ offset = ((unsigned long) addr) & (pagesize-1);
+ addr = ((char*) addr) - offset;
+ len += offset;
+ count = (len + pagesize-1)/pagesize;
+ pages = malloc(count*sizeof(*pages));
+ status = malloc(count*sizeof(*status));
+ if (!pages || !status) {
+ ret = -1;
+ goto out_with_pages;
+ }
+
+ for(i=0; i<count; i++)
+ pages[i] = ((char*)addr) + i*pagesize;
+
+ ret = move_pages(0, count, pages, NULL, status, 0);
+ if (ret < 0)
+ goto out_with_pages;
+
+ hwloc_bitmap_zero(nodeset);
+ for(i=0; i<count; i++)
+ if (status[i] >= 0)
+ hwloc_bitmap_set(nodeset, status[i]);
+ ret = 0;
+
+ out_with_pages:
+ free(pages);
+ free(status);
+ return ret;
+}
+#endif /* HWLOC_HAVE_MOVE_PAGES */
+
void
hwloc_set_linuxfs_hooks(struct hwloc_binding_hooks *hooks,
struct hwloc_topology_support *support __hwloc_attribute_unused)
@@ -1523,6 +1578,9 @@ hwloc_set_linuxfs_hooks(struct hwloc_binding_hooks *hooks,
#endif /* HWLOC_HAVE_SET_MEMPOLICY */
#ifdef HWLOC_HAVE_MBIND
hooks->set_area_membind = hwloc_linux_set_area_membind;
+#ifdef HWLOC_HAVE_MOVE_PAGES
+ hooks->get_area_memlocation = hwloc_linux_get_area_memlocation;
+#endif /* HWLOC_HAVE_MOVE_PAGES */
hooks->alloc_membind = hwloc_linux_alloc_membind;
hooks->alloc = hwloc_alloc_mmap;
hooks->free_membind = hwloc_free_mmap;
@@ -1594,6 +1652,8 @@ hwloc_linux_parse_cpumap_file(FILE *file, hwloc_bitmap_t set)
int i;
maps = malloc(nr_maps_allocated * sizeof(*maps));
+ if (!maps)
+ return -1;
/* reset to zero first */
hwloc_bitmap_zero(set);
@@ -1602,8 +1662,13 @@ hwloc_linux_parse_cpumap_file(FILE *file, hwloc_bitmap_t set)
while (fscanf(file, "%lx,", &map) == 1) /* read one kernel cpu mask and the ending comma */
{
if (nr_maps == nr_maps_allocated) {
+ unsigned long *tmp = realloc(maps, 2*nr_maps_allocated * sizeof(*maps));
+ if (!tmp) {
+ free(maps);
+ return -1;
+ }
+ maps = tmp;
nr_maps_allocated *= 2;
- maps = realloc(maps, nr_maps_allocated * sizeof(*maps));
}
if (!map && !nr_maps)
@@ -1651,96 +1716,53 @@ hwloc_parse_cpumap(const char *mappath, int fsroot_fd)
return set;
}
-static char *
-hwloc_strdup_mntpath(const char *escapedpath, size_t length)
-{
- char *path = malloc(length+1);
- const char *src = escapedpath, *tmp;
- char *dst = path;
-
- while ((tmp = strchr(src, '\\')) != NULL) {
- strncpy(dst, src, tmp-src);
- dst += tmp-src;
- if (!strncmp(tmp+1, "040", 3))
- *dst = ' ';
- else if (!strncmp(tmp+1, "011", 3))
- *dst = ' ';
- else if (!strncmp(tmp+1, "012", 3))
- *dst = '\n';
- else
- *dst = '\\';
- dst++;
- src = tmp+4;
- }
-
- strcpy(dst, src);
-
- return path;
-}
-
static void
-hwloc_find_linux_cpuset_mntpnt(char **cgroup_mntpnt, char **cpuset_mntpnt, int fsroot_fd)
+hwloc_find_linux_cpuset_mntpnt(char **cgroup_mntpnt, char **cpuset_mntpnt, const char *root_path)
{
-#define PROC_MOUNT_LINE_LEN 512
- char line[PROC_MOUNT_LINE_LEN];
+ char *mount_path;
+ struct mntent mntent;
FILE *fd;
+ int err;
+ size_t bufsize;
+ char *buf;
*cgroup_mntpnt = NULL;
*cpuset_mntpnt = NULL;
- /* ideally we should use setmntent, getmntent, hasmntopt and endmntent,
- * but they do not support fsroot_fd.
- */
-
- fd = hwloc_fopen("/proc/mounts", "r", fsroot_fd);
+ if (root_path) {
+ /* setmntent() doesn't support openat(), so use the root_path directly */
+ err = asprintf(&mount_path, "%s/proc/mounts", root_path);
+ if (err < 0)
+ return;
+ fd = setmntent(mount_path, "r");
+ free(mount_path);
+ } else {
+ fd = setmntent("/proc/mounts", "r");
+ }
if (!fd)
return;
- while (fgets(line, sizeof(line), fd)) {
- char *path;
- char *type;
- char *tmp;
-
- /* remove the ending " 0 0\n" that the kernel always adds */
- tmp = line + strlen(line) - 5;
- if (tmp < line || strcmp(tmp, " 0 0\n"))
- fprintf(stderr, "Unexpected end of /proc/mounts line `%s'\n", line);
- else
- *tmp = '\0';
-
- /* path is after first field and a space */
- tmp = strchr(line, ' ');
- if (!tmp)
- continue;
- path = tmp+1;
-
- /* type is after path, which may not contain spaces since the kernel escaped them to \040
- * (see the manpage of getmntent) */
- tmp = strchr(path, ' ');
- if (!tmp)
- continue;
- type = tmp+1;
- /* mark the end of path to ease upcoming strdup */
- *tmp = '\0';
+ /* getmntent_r() doesn't actually report an error when the buffer
+ * is too small. It just silently truncates things. So we can't
+ * dynamically resize things.
+ *
+ * Linux limits mount type, string, and options to one page each.
+ * getmntent() limits the line size to 4kB.
+ * so use 4*pagesize to be far above both.
+ */
+ bufsize = hwloc_getpagesize()*4;
+ buf = malloc(bufsize);
- if (!strncmp(type, "cpuset ", 7)) {
- /* found a cpuset mntpnt */
- hwloc_debug("Found cpuset mount point on %s\n", path);
- *cpuset_mntpnt = hwloc_strdup_mntpath(path, type-path);
+ while (getmntent_r(fd, &mntent, buf, bufsize)) {
+ if (!strcmp(mntent.mnt_type, "cpuset")) {
+ hwloc_debug("Found cpuset mount point on %s\n", mntent.mnt_dir);
+ *cpuset_mntpnt = strdup(mntent.mnt_dir);
break;
-
- } else if (!strncmp(type, "cgroup ", 7)) {
+ } else if (!strcmp(mntent.mnt_type, "cgroup")) {
/* found a cgroup mntpnt */
- char *opt, *opts;
+ char *opt, *opts = mntent.mnt_opts;
int cpuset_opt = 0;
int noprefix_opt = 0;
-
- /* find options */
- tmp = strchr(type, ' ');
- if (!tmp)
- continue;
- opts = tmp+1;
-
/* look at options */
while ((opt = strsep(&opts, ",")) != NULL) {
if (!strcmp(opt, "cpuset"))
@@ -1750,19 +1772,19 @@ hwloc_find_linux_cpuset_mntpnt(char **cgroup_mntpnt, char **cpuset_mntpnt, int f
}
if (!cpuset_opt)
continue;
-
if (noprefix_opt) {
- hwloc_debug("Found cgroup emulating a cpuset mount point on %s\n", path);
- *cpuset_mntpnt = hwloc_strdup_mntpath(path, type-path);
+ hwloc_debug("Found cgroup emulating a cpuset mount point on %s\n", mntent.mnt_dir);
+ *cpuset_mntpnt = strdup(mntent.mnt_dir);
} else {
- hwloc_debug("Found cgroup/cpuset mount point on %s\n", path);
- *cgroup_mntpnt = hwloc_strdup_mntpath(path, type-path);
+ hwloc_debug("Found cgroup/cpuset mount point on %s\n", mntent.mnt_dir);
+ *cgroup_mntpnt = strdup(mntent.mnt_dir);
}
break;
}
}
- fclose(fd);
+ free(buf);
+ endmntent(fd);
}
/*
@@ -2033,7 +2055,7 @@ hwloc_get_kerrighed_node_meminfo_info(struct hwloc_topology *topology,
#ifdef HAVE__SC_LARGE_PAGESIZE
memory->page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
#endif
- memory->page_types[0].size = hwloc_getpagesize();
+ memory->page_types[0].size = data->pagesize;
}
snprintf(path, sizeof(path), "/proc/nodes/node%lu/meminfo", node);
@@ -2086,7 +2108,7 @@ hwloc_get_procfs_meminfo_info(struct hwloc_topology *topology,
#ifdef HAVE__SC_LARGE_PAGESIZE
memory->page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
#endif
- memory->page_types[0].size = hwloc_getpagesize(); /* might be overwritten later by /proc/meminfo or sysfs */
+ memory->page_types[0].size = data->pagesize; /* might be overwritten later by /proc/meminfo or sysfs */
}
hwloc_parse_meminfo_info(data, "/proc/meminfo", 0 /* no prefix */,
@@ -2179,7 +2201,7 @@ hwloc_sysfs_node_meminfo_info(struct hwloc_topology *topology,
}
}
/* update what's remaining as normal pages */
- memory->page_types[0].size = hwloc_getpagesize();
+ memory->page_types[0].size = data->pagesize;
memory->page_types[0].count = remaining_local_memory / memory->page_types[0].size;
}
}
@@ -2514,7 +2536,12 @@ hwloc_read_str(const char *p, const char *p1, int root_fd)
size_t cb = 0;
char *ret = hwloc_read_raw(p, p1, &cb, root_fd);
if ((NULL != ret) && (0 < cb) && (0 != ret[cb-1])) {
- ret = realloc(ret, cb + 1);
+ char *tmp = realloc(ret, cb + 1);
+ if (!tmp) {
+ free(ret);
+ return NULL;
+ }
+ ret = tmp;
ret[cb] = 0;
}
return ret;
@@ -2551,11 +2578,17 @@ add_device_tree_cpus_node(device_tree_cpus_t *cpus, hwloc_bitmap_t cpuset,
uint32_t l2_cache, uint32_t phandle, const char *name)
{
if (cpus->n == cpus->allocated) {
+ void *tmp;
+ unsigned allocated;
if (!cpus->allocated)
- cpus->allocated = 64;
+ allocated = 64;
else
- cpus->allocated *= 2;
- cpus->p = realloc(cpus->p, cpus->allocated * sizeof(cpus->p[0]));
+ allocated = 2 * cpus->allocated;
+ tmp = realloc(cpus->p, allocated * sizeof(cpus->p[0]));
+ if (!tmp)
+ return; /* failed to realloc, ignore this entry */
+ cpus->p = tmp;
+ cpus->allocated = allocated;
}
cpus->p[cpus->n].phandle = phandle;
cpus->p[cpus->n].cpuset = (NULL == cpuset)?NULL:hwloc_bitmap_dup(cpuset);
@@ -2681,7 +2714,7 @@ look_powerpc_device_tree(struct hwloc_topology *topology,
return;
/* only works for Power so far, and not useful on ARM */
- if (strncmp(data->utsname.machine, "ppc", 3))
+ if (data->arch != HWLOC_LINUX_ARCH_POWER)
return;
cpus.n = 0;
@@ -2801,6 +2834,120 @@ look_powerpc_device_tree(struct hwloc_topology *topology,
free(cpus.p);
}
+/* Try to handle knl hwdata properties
+ * Returns 0 on success and -1 otherwise */
+static int hwloc_linux_try_handle_knl_hwdata_properties(hwloc_topology_t topology, struct hwloc_linux_backend_data_s *data, hwloc_obj_t *nodes, unsigned nbnodes)
+{
+ char *knl_cache_file;
+ long long int cache_size = -1;
+ int associativity = -1;
+ int inclusiveness = -1;
+ int line_size = -1;
+ int version = 0;
+ unsigned i;
+ FILE *f;
+ char buffer[512] = {0};
+ char *data_beg = NULL;
+ char *data_end = NULL;
+ char memory_mode_str[32] = {0};
+ char cluster_mode_str[32] = {0};
+
+ if (asprintf(&knl_cache_file, "%s/knl_memoryside_cache", data->dumped_hwdata_dirname) < 0)
+ return -1;
+
+ hwloc_debug("Reading knl cache data from: %s\n", knl_cache_file);
+ f = hwloc_fopen(knl_cache_file, "r", data->root_fd);
+ if (!f) {
+ hwloc_debug("Unable to open KNL data file `%s' (%s)\n", knl_cache_file, strerror(errno));
+ free(knl_cache_file);
+ return -1;
+ }
+ free(knl_cache_file);
+
+ data_beg = &buffer[0];
+ data_end = data_beg + fread(buffer, 1, sizeof(buffer), f);
+
+ /* file must start with version information */
+ if (sscanf(data_beg, "version: %d", &version) != 1) {
+ fprintf(stderr, "Invalid knl_memoryside_cache header, expected \"version: <int>\".\n");
+ fclose(f);
+ return -1;
+ }
+
+ while (data_beg < data_end) {
+ char *line_end = strstr(data_beg, "\n");
+ if (!line_end || line_end >= data_end)
+ break;
+ if (version >= 1) {
+ if (!strncmp("cache_size:", data_beg, strlen("cache_size"))) {
+ sscanf(data_beg, "cache_size: %lld", &cache_size);
+ hwloc_debug("read cache_size=%lld\n", cache_size);
+ } else if (!strncmp("line_size:", data_beg, strlen("line_size:"))) {
+ sscanf(data_beg, "line_size: %d", &line_size);
+ hwloc_debug("read line_size=%d\n", line_size);
+ } else if (!strncmp("inclusiveness:", data_beg, strlen("inclusiveness:"))) {
+ sscanf(data_beg, "inclusiveness: %d", &inclusiveness);
+ hwloc_debug("read inclusiveness=%d\n", inclusiveness);
+ } else if (!strncmp("associativity:", data_beg, strlen("associativity:"))) {
+ sscanf(data_beg, "associativity: %d\n", &associativity);
+ hwloc_debug("read associativity=%d\n", associativity);
+ }
+ }
+ if (version >= 2) {
+ if (!strncmp("cluster_mode:", data_beg, strlen("cluster_mode:"))) {
+ sscanf(data_beg, "cluster_mode: %s\n", cluster_mode_str);
+ hwloc_debug("read cluster_mode=%s\n", cluster_mode_str);
+ } else if (!strncmp("memory_mode:", data_beg, strlen("memory_mode:"))) {
+ sscanf(data_beg, "memory_mode: %s\n", memory_mode_str);
+ hwloc_debug("read memory_mode=%s\n", memory_mode_str);
+ }
+ }
+
+ data_beg += line_end - data_beg + 1;
+ }
+
+ fclose(f);
+
+ if (line_size == -1 || cache_size == -1 || associativity == -1 || inclusiveness == -1) {
+ hwloc_debug("Incorrect file format line_size=%d cache_size=%lld associativity=%d inclusiveness=%d\n",
+ line_size, cache_size, associativity, inclusiveness);
+ return -1;
+ }
+
+ /* In file version 1 mcdram_cache is always non-zero.
+ * In file version 2 mcdram cache can be zero in flat mode. We need to check and do not expose cache in flat mode. */
+ if (cache_size > 0) {
+ for(i=0; i<nbnodes; i++) {
+ hwloc_obj_t cache;
+
+ if (hwloc_bitmap_iszero(nodes[i]->cpuset))
+ /* one L3 per DDR, none for MCDRAM nodes */
+ continue;
+
+ cache = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+ if (!cache)
+ return -1;
+
+ cache->attr->cache.depth = 3;
+ cache->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED;
+ cache->attr->cache.associativity = associativity;
+ hwloc_obj_add_info(cache, "Inclusive", inclusiveness ? "1" : "0");
+ cache->attr->cache.size = cache_size;
+ cache->attr->cache.linesize = line_size;
+ cache->cpuset = hwloc_bitmap_dup(nodes[i]->cpuset);
+ hwloc_obj_add_info(cache, "Type", "MemorySideCache");
+ hwloc_insert_object_by_cpuset(topology, cache);
+ }
+ }
+ /* adding cluster and memory mode as properties of the machine */
+ if (version >= 2) {
+ hwloc_obj_add_info(topology->levels[0][0], "ClusterMode", cluster_mode_str);
+ hwloc_obj_add_info(topology->levels[0][0], "MemoryMode", memory_mode_str);
+ }
+
+ return 0;
+}
+
/**************************************
@@ -2838,18 +2985,17 @@ look_sysfsnode(struct hwloc_topology *topology,
else
return -1;
- if (nbnodes <= 1)
- {
- hwloc_bitmap_free(nodeset);
- return 0;
- }
+ if (!nbnodes || (nbnodes == 1 && !data->is_knl)) { /* always keep NUMA for KNL, or configs might look too different */
+ hwloc_bitmap_free(nodeset);
+ return 0;
+ }
/* For convenience, put these declarations inside a block. */
{
hwloc_obj_t * nodes = calloc(nbnodes, sizeof(hwloc_obj_t));
unsigned *indexes = calloc(nbnodes, sizeof(unsigned));
- float * distances;
+ float * distances = NULL;
int failednodes = 0;
unsigned index_;
@@ -2886,6 +3032,7 @@ look_sysfsnode(struct hwloc_topology *topology,
char nodepath[SYSFS_NUMA_NODE_PATH_LEN];
hwloc_bitmap_t cpuset;
hwloc_obj_t node, res_obj;
+ int annotate;
osnode = indexes[index_];
@@ -2897,32 +3044,43 @@ look_sysfsnode(struct hwloc_topology *topology,
continue;
}
- node = hwloc_alloc_setup_object(HWLOC_OBJ_NUMANODE, osnode);
- node->cpuset = cpuset;
- node->nodeset = hwloc_bitmap_alloc();
- hwloc_bitmap_set(node->nodeset, osnode);
-
+ node = hwloc_get_numanode_obj_by_os_index(topology, osnode);
+ annotate = (node != NULL);
+ if (!annotate) {
+ /* create a new node */
+ node = hwloc_alloc_setup_object(HWLOC_OBJ_NUMANODE, osnode);
+ node->cpuset = cpuset;
+ node->nodeset = hwloc_bitmap_alloc();
+ hwloc_bitmap_set(node->nodeset, osnode);
+ }
hwloc_sysfs_node_meminfo_info(topology, data, path, osnode, &node->memory);
hwloc_debug_1arg_bitmap("os node %u has cpuset %s\n",
osnode, node->cpuset);
- res_obj = hwloc_insert_object_by_cpuset(topology, node);
- if (node == res_obj) {
+
+ if (annotate) {
nodes[index_] = node;
} else {
- /* We got merged somehow, could be a buggy BIOS reporting wrong NUMA node cpuset.
- * This object disappeared, we'll ignore distances */
- failednodes++;
+ res_obj = hwloc_insert_object_by_cpuset(topology, node);
+ if (node == res_obj) {
+ nodes[index_] = node;
+ } else {
+ /* We got merged somehow, could be a buggy BIOS reporting wrong NUMA node cpuset.
+ * This object disappeared, we'll ignore distances */
+ failednodes++;
+ }
}
}
+ if (!failednodes && data->is_knl)
+ hwloc_linux_try_handle_knl_hwdata_properties(topology, data, nodes, nbnodes);
+
if (failednodes) {
/* failed to read/create some nodes, don't bother reading/fixing
* a distance matrix that would likely be wrong anyway.
*/
nbnodes -= failednodes;
- distances = NULL;
- } else {
+ } else if (nbnodes > 1) {
distances = calloc(nbnodes*nbnodes, sizeof(float));
}
@@ -2944,6 +3102,46 @@ look_sysfsnode(struct hwloc_topology *topology,
hwloc_parse_node_distance(nodepath, nbnodes, distances+index_*nbnodes, data->root_fd);
}
+ if (data->is_knl) {
+ char *env = getenv("HWLOC_KNL_NUMA_QUIRK");
+ if (!(env && !atoi(env)) && nbnodes>=2) { /* SNC2 or SNC4, with 0 or 2/4 MCDRAM, and 0-4 DDR nodes */
+ unsigned i, j, closest;
+ for(i=0; i<nbnodes; i++) {
+ if (!hwloc_bitmap_iszero(nodes[i]->cpuset))
+ /* nodes with CPU, that's DDR, skip it */
+ continue;
+ hwloc_obj_add_info(nodes[i], "Type", "MCDRAM");
+
+ /* DDR is the closest node with CPUs */
+ closest = (unsigned)-1;
+ for(j=0; j<nbnodes; j++) {
+ if (j==i)
+ continue;
+ if (hwloc_bitmap_iszero(nodes[j]->cpuset))
+ /* nodes without CPU, that's another MCDRAM, skip it */
+ continue;
+ if (closest == (unsigned)-1 || distances[i*nbnodes+j]<distances[i*nbnodes+closest])
+ closest = j;
+ }
+ if (closest != (unsigned) -1) {
+ /* Add a Group for Cluster containing this MCDRAM + DDR */
+ hwloc_obj_t cluster = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, -1);
+ cluster->cpuset = hwloc_bitmap_dup(nodes[i]->cpuset);
+ cluster->nodeset = hwloc_bitmap_dup(nodes[i]->nodeset);
+ hwloc_bitmap_or(cluster->cpuset, cluster->cpuset, nodes[closest]->cpuset);
+ hwloc_bitmap_or(cluster->nodeset, cluster->nodeset, nodes[closest]->nodeset);
+ hwloc_obj_add_info(cluster, "Type", "Cluster");
+ hwloc_insert_object_by_cpuset(topology, cluster);
+ }
+ }
+ /* drop the distance matrix, it contradicts the above NUMA layout groups */
+ free(distances);
+ free(nodes);
+ free(indexes);
+ goto out;
+ }
+ }
+
hwloc_distances_set(topology, HWLOC_OBJ_NUMANODE, nbnodes, indexes, nodes, distances, 0 /* OS cannot force */);
}
@@ -2967,6 +3165,7 @@ look_sysfscpu(struct hwloc_topology *topology,
FILE *fd;
unsigned caches_added, merge_buggy_core_siblings;
hwloc_obj_t packages = NULL; /* temporary list of packages before actual insert in the tree */
+ int threadwithcoreid = -1; /* we don't know yet if threads have their own coreids within thread_siblings */
/* fill the cpuset of interesting cpus */
dir = hwloc_opendir(path, data->root_fd);
@@ -3021,14 +3220,12 @@ look_sysfscpu(struct hwloc_topology *topology,
hwloc_debug_1arg_bitmap("found %d cpu topologies, cpuset %s\n",
hwloc_bitmap_weight(cpuset), cpuset);
- merge_buggy_core_siblings = (!strcmp(data->utsname.machine, "x86_64"))
- || (data->utsname.machine[0] == 'i' && !strcmp(data->utsname.machine+2, "86"));
+ merge_buggy_core_siblings = (data->arch == HWLOC_LINUX_ARCH_X86);
caches_added = 0;
hwloc_bitmap_foreach_begin(i, cpuset)
{
- hwloc_bitmap_t packageset, coreset, bookset, threadset, savedcoreset;
+ hwloc_bitmap_t packageset, coreset, bookset, threadset;
unsigned mypackageid, mycoreid, mybookid;
- int threadwithcoreid = 0;
/* look at the package */
mypackageid = 0; /* shut-up the compiler */
@@ -3109,36 +3306,32 @@ package_done:
sprintf(str, "%s/cpu%d/topology/thread_siblings", path, i);
coreset = hwloc_parse_cpumap(str, data->root_fd);
- savedcoreset = coreset; /* store it for later work-arounds */
- if (coreset && hwloc_bitmap_weight(coreset) > 1) {
+ if (coreset) {
+ if (hwloc_bitmap_weight(coreset) > 1 && threadwithcoreid == -1) {
/* check if this is hyper-threading or different coreids */
unsigned siblingid, siblingcoreid;
- hwloc_bitmap_t set = hwloc_bitmap_dup(coreset);
- hwloc_bitmap_clr(set, i);
- siblingid = hwloc_bitmap_first(set);
+ siblingid = hwloc_bitmap_first(coreset);
+ if (siblingid == (unsigned) i)
+ siblingid = hwloc_bitmap_next(coreset, i);
siblingcoreid = mycoreid;
sprintf(str, "%s/cpu%d/topology/core_id", path, siblingid);
hwloc_parse_sysfs_unsigned(str, &siblingcoreid, data->root_fd);
threadwithcoreid = (siblingcoreid != mycoreid);
- hwloc_bitmap_free(set);
- }
-
-
- if (coreset && (hwloc_bitmap_first(coreset) == i || threadwithcoreid)) {
+ }
+ if (hwloc_bitmap_first(coreset) == i || threadwithcoreid) {
/* regular core */
struct hwloc_obj *core = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, mycoreid);
- if (threadwithcoreid) {
+ if (threadwithcoreid)
/* amd multicore compute-unit, create one core per thread */
- core->cpuset = hwloc_bitmap_alloc();
- hwloc_bitmap_set(core->cpuset, i);
- } else {
- core->cpuset = coreset;
- }
+ hwloc_bitmap_only(coreset, i);
+ core->cpuset = coreset;
hwloc_debug_1arg_bitmap("os core %u has cpuset %s\n",
- mycoreid, coreset);
+ mycoreid, core->cpuset);
hwloc_insert_object_by_cpuset(topology, core);
- coreset = NULL; /* don't free it */
+ coreset = NULL; /* don't free it */
+ }
+ hwloc_bitmap_free(coreset);
}
/* look at the books */
@@ -3157,6 +3350,7 @@ package_done:
hwloc_insert_object_by_cpuset(topology, book);
bookset = NULL; /* don't free it */
}
+ hwloc_bitmap_free(bookset);
}
{
@@ -3224,6 +3418,11 @@ package_done:
kB = atol(str2); /* in kB */
fclose(fd);
}
+ /* KNL reports L3 with size=0 and full cpuset in cpuid.
+ * Let hwloc_linux_try_add_knl_mcdram_cache() detect it better.
+ */
+ if (!kB && depth == 2 && data->is_knl)
+ continue;
/* get the line size */
sprintf(mappath, "%s/cpu%d/cache/index%d/coherency_line_size", path, i, j);
@@ -3256,15 +3455,12 @@ package_done:
sprintf(mappath, "%s/cpu%d/cache/index%d/shared_cpu_map", path, i, j);
cacheset = hwloc_parse_cpumap(mappath, data->root_fd);
if (cacheset) {
- if (hwloc_bitmap_weight(cacheset) < 1) {
- /* mask is wrong (useful for many itaniums) */
- if (savedcoreset)
- /* assume it's a core-specific cache */
- hwloc_bitmap_copy(cacheset, savedcoreset);
- else
- /* assumes it's not shared */
- hwloc_bitmap_only(cacheset, i);
- }
+ if (hwloc_bitmap_iszero(cacheset)) {
+ /* ia64 returning empty L3 and L2i? use the core set instead */
+ hwloc_bitmap_free(cacheset);
+ sprintf(mappath, "%s/cpu%d/topology/thread_siblings", path, i);
+ cacheset = hwloc_parse_cpumap(mappath, data->root_fd);
+ }
if (hwloc_bitmap_first(cacheset) == i) {
/* first cpu in this cache, add the cache */
@@ -3289,7 +3485,6 @@ package_done:
}
hwloc_bitmap_free(cacheset);
}
- hwloc_bitmap_free(coreset);
}
hwloc_bitmap_foreach_end();
@@ -3459,6 +3654,7 @@ hwloc_linux_parse_cpuinfo_generic(const char *prefix, const char *value,
return 0;
}
+/* Lprocs_p set to NULL unless returns > 0 */
static int
hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
const char *path,
@@ -3538,11 +3734,15 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
getprocnb_begin(PROCESSOR, Pproc);
curproc = numprocs++;
if (numprocs > allocated_Lprocs) {
+ struct hwloc_linux_cpuinfo_proc * tmp;
if (!allocated_Lprocs)
allocated_Lprocs = 8;
else
allocated_Lprocs *= 2;
- Lprocs = realloc(Lprocs, allocated_Lprocs * sizeof(*Lprocs));
+ tmp = realloc(Lprocs, allocated_Lprocs * sizeof(*Lprocs));
+ if (!tmp)
+ goto err;
+ Lprocs = tmp;
}
Lprocs[curproc].Pproc = Pproc;
Lprocs[curproc].Pcore = -1;
@@ -3560,25 +3760,23 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
getprocnb_end() else {
/* architecture specific or default routine for parsing cpumodel */
- if (!parse_cpuinfo_func) {
+ switch (data->arch) {
+ case HWLOC_LINUX_ARCH_X86:
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_x86;
+ break;
+ case HWLOC_LINUX_ARCH_ARM:
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_arm;
+ break;
+ case HWLOC_LINUX_ARCH_POWER:
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_ppc;
+ break;
+ case HWLOC_LINUX_ARCH_IA64:
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_ia64;
+ break;
+ default:
parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_generic;
- if (*data->utsname.machine) {
- /* x86_32 x86_64 k1om => x86 */
- if (!strcmp(data->utsname.machine, "x86_64")
- || (data->utsname.machine[0] == 'i' && !strcmp(data->utsname.machine+2, "86"))
- || !strcmp(data->utsname.machine, "k1om"))
- parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_x86;
- /* ia64 */
- else if (!strcmp(data->utsname.machine, "ia64"))
- parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_ia64;
- /* arm */
- else if (!strncmp(data->utsname.machine, "arm", 3))
- parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_arm;
- else if (!strncmp(data->utsname.machine, "ppc", 3)
- || !strncmp(data->utsname.machine, "power", 5))
- parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_ppc;
- }
}
+
/* we can't assume that we already got a processor index line:
* alpha/frv/h8300/m68k/microblaze/sparc have no processor lines at all, only a global entry.
* tile has a global section with model name before the list of processor lines.
@@ -3606,6 +3804,7 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
fclose(fd);
free(str);
free(Lprocs);
+ *Lprocs_p = NULL;
return -1;
}
@@ -3625,18 +3824,13 @@ hwloc_linux_free_cpuinfo(struct hwloc_linux_cpuinfo_proc * Lprocs, unsigned nump
static int
look_cpuinfo(struct hwloc_topology *topology,
- struct hwloc_linux_backend_data_s *data,
- const char *path, hwloc_bitmap_t online_cpuset)
+ struct hwloc_linux_cpuinfo_proc * Lprocs,
+ unsigned numprocs, hwloc_bitmap_t online_cpuset)
{
- struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
- struct hwloc_obj_info_s *global_infos = NULL;
- unsigned global_infos_count = 0;
/* P for physical/OS index, L for logical (e.g. in we order we get them, not in the final hwloc logical order) */
unsigned *Lcore_to_Pcore;
unsigned *Lcore_to_Ppkg; /* needed because Lcore is equivalent to Pcore+Ppkg, not to Pcore alone */
unsigned *Lpkg_to_Ppkg;
- int _numprocs;
- unsigned numprocs;
unsigned numpkgs=0;
unsigned numcores=0;
unsigned long Lproc;
@@ -3645,20 +3839,6 @@ look_cpuinfo(struct hwloc_topology *topology,
unsigned i,j;
hwloc_bitmap_t cpuset;
- /* parse the entire cpuinfo first, fill the Lprocs array and numprocs */
- _numprocs = hwloc_linux_parse_cpuinfo(data, path, &Lprocs, &global_infos, &global_infos_count);
-
-
- /* setup root info */
- hwloc__move_infos(&hwloc_get_root_obj(topology)->infos, &hwloc_get_root_obj(topology)->infos_count,
- &global_infos, &global_infos_count);
-
-
- if (_numprocs <= 0)
- /* found no processor */
- return -1;
- numprocs = _numprocs;
-
/* initialize misc arrays, there can be at most numprocs entries */
Lcore_to_Pcore = malloc(numprocs * sizeof(*Lcore_to_Pcore));
Lcore_to_Ppkg = malloc(numprocs * sizeof(*Lcore_to_Ppkg));
@@ -3713,7 +3893,7 @@ look_cpuinfo(struct hwloc_topology *topology,
* provide bogus information. We should rather drop it. */
missingpkg=0;
for(j=0; j<numprocs; j++)
- if (Lprocs[i].Ppkg == -1) {
+ if (Lprocs[j].Ppkg == -1) {
missingpkg=1;
break;
}
@@ -3757,7 +3937,7 @@ look_cpuinfo(struct hwloc_topology *topology,
* provide bogus information. We should rather drop it. */
missingcore=0;
for(j=0; j<numprocs; j++)
- if (Lprocs[i].Pcore == -1) {
+ if (Lprocs[j].Pcore == -1) {
missingcore=1;
break;
}
@@ -3779,10 +3959,6 @@ look_cpuinfo(struct hwloc_topology *topology,
free(Lcore_to_Pcore);
free(Lcore_to_Ppkg);
free(Lpkg_to_Ppkg);
-
- hwloc_linux_free_cpuinfo(Lprocs, numprocs, global_infos, global_infos_count);
-
- look_powerpc_device_tree(topology, data);
return 0;
}
@@ -3816,17 +3992,6 @@ hwloc__linux_get_mic_sn(struct hwloc_topology *topology, struct hwloc_linux_back
}
static void
-hwloc_linux_fallback_pu_level(struct hwloc_topology *topology)
-{
- if (topology->is_thissystem)
- hwloc_setup_pu_level(topology, hwloc_fallback_nbprocessors(topology));
- else
- /* fsys-root but not this system, no way, assume there's just 1
- * processor :/ */
- hwloc_setup_pu_level(topology, 1);
-}
-
-static void
hwloc_gather_system_info(struct hwloc_topology *topology,
struct hwloc_linux_backend_data_s *data)
{
@@ -3834,12 +3999,17 @@ hwloc_gather_system_info(struct hwloc_topology *topology,
char line[128]; /* enough for utsname fields */
const char *env;
- /* initialize to something sane */
+ /* initialize to something sane, in case !is_thissystem and we can't find things in /proc/hwloc-nofile-info */
memset(&data->utsname, 0, sizeof(data->utsname));
+ data->fallback_nbprocessors = 1;
+ data->pagesize = 4096;
/* read thissystem info */
- if (topology->is_thissystem)
+ if (topology->is_thissystem) {
uname(&data->utsname);
+ data->fallback_nbprocessors = hwloc_fallback_nbprocessors(topology);
+ data->pagesize = hwloc_getpagesize();
+ }
/* overwrite with optional /proc/hwloc-nofile-info */
file = hwloc_fopen("/proc/hwloc-nofile-info", "r", data->root_fd);
@@ -3871,6 +4041,14 @@ hwloc_gather_system_info(struct hwloc_topology *topology,
*tmp = '\0';
strncpy(data->utsname.machine, line+14, sizeof(data->utsname.machine));
data->utsname.machine[sizeof(data->utsname.machine)-1] = '\0';
+ } else if (!strncmp("FallbackNbProcessors: ", line, 22)) {
+ if (tmp)
+ *tmp = '\0';
+ data->fallback_nbprocessors = atoi(line+22);
+ } else if (!strncmp("PageSize: ", line, 10)) {
+ if (tmp)
+ *tmp = '\0';
+ data->pagesize = strtoull(line+10, NULL, 10);
} else {
hwloc_debug("ignored /proc/hwloc-nofile-info line %s\n", line);
/* ignored */
@@ -3893,9 +4071,76 @@ hwloc_gather_system_info(struct hwloc_topology *topology,
fprintf(file, "HostName: %s\n", data->utsname.nodename);
if (*data->utsname.machine)
fprintf(file, "Architecture: %s\n", data->utsname.machine);
+ fprintf(file, "FallbackNbProcessors: %u\n", data->fallback_nbprocessors);
+ fprintf(file, "PageSize: %llu\n", (unsigned long long) data->pagesize);
fclose(file);
}
}
+
+ /* detect arch for quirks, using configure #defines if possible, or uname */
+#if (defined HWLOC_X86_32_ARCH) || (defined HWLOC_X86_64_ARCH) /* does not cover KNC */
+ if (topology->is_thissystem)
+ data->arch = HWLOC_LINUX_ARCH_X86;
+#endif
+ if (data->arch == HWLOC_LINUX_ARCH_UNKNOWN && *data->utsname.machine) {
+ if (!strcmp(data->utsname.machine, "x86_64")
+ || (data->utsname.machine[0] == 'i' && !strcmp(data->utsname.machine+2, "86"))
+ || !strcmp(data->utsname.machine, "k1om"))
+ data->arch = HWLOC_LINUX_ARCH_X86;
+ else if (!strncmp(data->utsname.machine, "arm", 3))
+ data->arch = HWLOC_LINUX_ARCH_ARM;
+ else if (!strncmp(data->utsname.machine, "ppc", 3)
+ || !strncmp(data->utsname.machine, "power", 5))
+ data->arch = HWLOC_LINUX_ARCH_POWER;
+ else if (!strcmp(data->utsname.machine, "ia64"))
+ data->arch = HWLOC_LINUX_ARCH_IA64;
+ }
+}
+
+/* returns 0 on success, -1 on non-match or error during hardwired load */
+static int
+hwloc_linux_try_hardwired_cpuinfo(struct hwloc_backend *backend)
+{
+ struct hwloc_topology *topology = backend->topology;
+ struct hwloc_linux_backend_data_s *data = backend->private_data;
+ FILE *fd;
+ char line[128];
+
+ if (getenv("HWLOC_NO_HARDWIRED_TOPOLOGY"))
+ return -1;
+
+ if (!strcmp(data->utsname.machine, "s64fx")) {
+ /* Fujistu K-computer, FX10, and FX100 use specific processors
+ * whose Linux topology support is broken until 4.1 (acc455cffa75070d55e74fc7802b49edbc080e92and)
+ * and existing machines will likely never be fixed by kernel upgrade.
+ */
+
+ /* /proc/cpuinfo starts with one of these lines:
+ * "cpu : Fujitsu SPARC64 VIIIfx"
+ * "cpu : Fujitsu SPARC64 XIfx"
+ * "cpu : Fujitsu SPARC64 IXfx"
+ */
+ fd = hwloc_fopen("/proc/cpuinfo", "r", data->root_fd);
+ if (!fd)
+ return -1;
+
+ if (!fgets(line, sizeof(line), fd)) {
+ fclose(fd);
+ return -1;
+ }
+ fclose(fd);
+
+ if (strncmp(line, "cpu ", 4))
+ return -1;
+
+ if (strstr(line, "Fujitsu SPARC64 VIIIfx"))
+ return hwloc_look_hardwired_fujitsu_k(topology);
+ else if (strstr(line, "Fujitsu SPARC64 IXfx"))
+ return hwloc_look_hardwired_fujitsu_fx10(topology);
+ else if (strstr(line, "FUJITSU SPARC64 XIfx"))
+ return hwloc_look_hardwired_fujitsu_fx100(topology);
+ }
+ return -1;
}
static int
@@ -3906,18 +4151,58 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
DIR *nodes_dir;
unsigned nbnodes;
char *cpuset_mntpnt, *cgroup_mntpnt, *cpuset_name = NULL;
+ struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
+ struct hwloc_obj_info_s *global_infos = NULL;
+ unsigned global_infos_count = 0;
+ int numprocs = 0;
+ int already_pus;
int err;
- if (topology->levels[0][0]->cpuset)
- /* somebody discovered things */
- return 0;
+ already_pus = (topology->levels[0][0]->complete_cpuset != NULL
+ && !hwloc_bitmap_iszero(topology->levels[0][0]->complete_cpuset));
+ /* if there are PUs, still look at memory information
+ * since x86 misses NUMA node information (unless the processor supports topoext)
+ * memory size.
+ */
+ /* allocate root sets in case not done yet */
+ hwloc_alloc_obj_cpusets(topology->levels[0][0]);
+
+ /*********************************
+ * Platform information for later
+ */
hwloc_gather_system_info(topology, data);
- hwloc_alloc_obj_cpusets(topology->levels[0][0]);
+ /**********************
+ * /proc/cpuinfo
+ */
+ numprocs = hwloc_linux_parse_cpuinfo(data, "/proc/cpuinfo", &Lprocs, &global_infos, &global_infos_count);
+
+ /**************************
+ * detect model for quirks
+ */
+ if (data->arch == HWLOC_LINUX_ARCH_X86 && numprocs > 0) {
+ unsigned i;
+ const char *cpuvendor = NULL, *cpufamilynumber = NULL, *cpumodelnumber = NULL;
+ for(i=0; i<Lprocs[0].infos_count; i++) {
+ if (!strcmp(Lprocs[0].infos[i].name, "CPUVendor")) {
+ cpuvendor = Lprocs[0].infos[i].value;
+ } else if (!strcmp(Lprocs[0].infos[i].name, "CPUFamilyNumber")) {
+ cpufamilynumber = Lprocs[0].infos[i].value;
+ } else if (!strcmp(Lprocs[0].infos[i].name, "CPUModelNumber")) {
+ cpumodelnumber = Lprocs[0].infos[i].value;
+ }
+ }
+ if (cpuvendor && !strcmp(cpuvendor, "GenuineIntel")
+ && cpufamilynumber && !strcmp(cpufamilynumber, "6")
+ && cpumodelnumber && !strcmp(cpumodelnumber, "87"))
+ data->is_knl = 1;
+ }
- /* Gather the list of admin-disabled cpus and mems */
- hwloc_find_linux_cpuset_mntpnt(&cgroup_mntpnt, &cpuset_mntpnt, data->root_fd);
+ /**********************
+ * Gather the list of admin-disabled cpus and mems
+ */
+ hwloc_find_linux_cpuset_mntpnt(&cgroup_mntpnt, &cpuset_mntpnt, data->root_path);
if (cgroup_mntpnt || cpuset_mntpnt) {
cpuset_name = hwloc_read_linux_cpuset_name(data->root_fd, topology->pid);
if (cpuset_name) {
@@ -3936,6 +4221,10 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
hwloc_obj_t machine;
hwloc_bitmap_t machine_online_set;
+ if (already_pus)
+ /* we don't support extending kerrighed topologies */
+ return 0;
+
/* replace top-level object type with SYSTEM and add some MACHINE underneath */
topology->levels[0][0]->type = HWLOC_OBJ_SYSTEM;
@@ -3944,13 +4233,19 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
/* No cpuset support for now. */
/* No sys support for now. */
while ((dirent = readdir(nodes_dir)) != NULL) {
+ struct hwloc_linux_cpuinfo_proc * machine_Lprocs = NULL;
+ struct hwloc_obj_info_s *machine_global_infos = NULL;
+ unsigned machine_global_infos_count = 0;
+ int machine_numprocs = 0;
unsigned long node;
if (strncmp(dirent->d_name, "node", 4))
continue;
machine_online_set = hwloc_bitmap_alloc();
node = strtoul(dirent->d_name+4, NULL, 0);
snprintf(path, sizeof(path), "/proc/nodes/node%lu/cpuinfo", node);
- err = look_cpuinfo(topology, data, path, machine_online_set);
+ machine_numprocs = hwloc_linux_parse_cpuinfo(data, path, &machine_Lprocs, &machine_global_infos, &machine_global_infos_count);
+ err = look_cpuinfo(topology, machine_Lprocs, machine_numprocs, machine_online_set);
+ hwloc_linux_free_cpuinfo(machine_Lprocs, machine_numprocs, machine_global_infos, machine_global_infos_count);
if (err < 0) {
hwloc_bitmap_free(machine_online_set);
continue;
@@ -3972,6 +4267,10 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
}
closedir(nodes_dir);
} else {
+ /*********************
+ * Memory information
+ */
+
/* Get the machine memory attributes */
hwloc_get_procfs_meminfo_info(topology, data, &topology->levels[0][0]->memory);
@@ -3988,7 +4287,23 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
topology->levels[0][0]->memory.page_types[i].count = 0;
}
+ /**********************
+ * CPU information
+ */
+
+ /* Don't rediscover CPU resources if already done */
+ if (already_pus)
+ goto done;
+
/* Gather the list of cpus now */
+ err = hwloc_linux_try_hardwired_cpuinfo(backend);
+ if (!err)
+ goto done;
+
+ /* setup root info */
+ hwloc__move_infos(&hwloc_get_root_obj(topology)->infos, &hwloc_get_root_obj(topology)->infos_count,
+ &global_infos, &global_infos_count);
+
if (getenv("HWLOC_LINUX_USE_CPUINFO")
|| (hwloc_access("/sys/devices/system/cpu/cpu0/topology/core_siblings", R_OK, data->root_fd) < 0
&& hwloc_access("/sys/devices/system/cpu/cpu0/topology/thread_siblings", R_OK, data->root_fd) < 0
@@ -3996,26 +4311,28 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
&& hwloc_access("/sys/bus/cpu/devices/cpu0/topology/core_siblings", R_OK, data->root_fd) < 0)) {
/* revert to reading cpuinfo only if /sys/.../topology unavailable (before 2.6.16)
* or not containing anything interesting */
- err = look_cpuinfo(topology, data, "/proc/cpuinfo", topology->levels[0][0]->online_cpuset);
+ if (numprocs > 0)
+ err = look_cpuinfo(topology, Lprocs, numprocs, topology->levels[0][0]->online_cpuset);
+ else
+ err = -1;
if (err < 0)
- hwloc_linux_fallback_pu_level(topology);
+ hwloc_setup_pu_level(topology, data->fallback_nbprocessors);
+ look_powerpc_device_tree(topology, data);
} else {
- struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
- struct hwloc_obj_info_s *global_infos = NULL;
- unsigned global_infos_count = 0;
- int numprocs = hwloc_linux_parse_cpuinfo(data, "/proc/cpuinfo", &Lprocs, &global_infos, &global_infos_count);
- if (numprocs <= 0)
- Lprocs = NULL;
+ /* sysfs */
if (look_sysfscpu(topology, data, "/sys/bus/cpu/devices", Lprocs, numprocs) < 0)
if (look_sysfscpu(topology, data, "/sys/devices/system/cpu", Lprocs, numprocs) < 0)
/* sysfs but we failed to read cpu topology, fallback */
- hwloc_linux_fallback_pu_level(topology);
- hwloc__move_infos(&hwloc_get_root_obj(topology)->infos, &hwloc_get_root_obj(topology)->infos_count,
- &global_infos, &global_infos_count);
- hwloc_linux_free_cpuinfo(Lprocs, numprocs, global_infos, global_infos_count);
+ hwloc_setup_pu_level(topology, data->fallback_nbprocessors);
}
+ done:
+
+ /**********************
+ * Misc
+ */
+
/* Gather DMI info */
hwloc__get_dmi_id_info(data, topology->levels[0][0]);
if (hwloc_topology_get_flags(topology) & (HWLOC_TOPOLOGY_FLAG_IO_DEVICES|HWLOC_TOPOLOGY_FLAG_WHOLE_IO))
@@ -4033,6 +4350,7 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
/* data->utsname was filled with real uname or \0, we can safely pass it */
hwloc_add_uname_info(topology, &data->utsname);
+ hwloc_linux_free_cpuinfo(Lprocs, numprocs, global_infos, global_infos_count);
return 1;
}
@@ -4405,7 +4723,7 @@ hwloc_linux_block_class_fillinfos(struct hwloc_backend *backend,
*tmp = '\0';
hwloc_obj_add_info(obj, "LinuxDeviceID", line);
-#ifdef HAVE_LIBUDEV_H
+#ifdef HWLOC_HAVE_LIBUDEV
if (data->udev) {
struct udev_device *dev;
const char *prop;
@@ -4413,20 +4731,30 @@ hwloc_linux_block_class_fillinfos(struct hwloc_backend *backend,
if (!dev)
return;
prop = udev_device_get_property_value(dev, "ID_VENDOR");
- if (prop)
- strcpy(vendor, prop);
+ if (prop) {
+ strncpy(vendor, prop, sizeof(vendor));
+ vendor[sizeof(vendor)-1] = '\0';
+ }
prop = udev_device_get_property_value(dev, "ID_MODEL");
- if (prop)
- strcpy(model, prop);
+ if (prop) {
+ strncpy(model, prop, sizeof(model));
+ model[sizeof(model)-1] = '\0';
+ }
prop = udev_device_get_property_value(dev, "ID_REVISION");
- if (prop)
- strcpy(revision, prop);
+ if (prop) {
+ strncpy(revision, prop, sizeof(revision));
+ revision[sizeof(revision)-1] = '\0';
+ }
prop = udev_device_get_property_value(dev, "ID_SERIAL_SHORT");
- if (prop)
- strcpy(serial, prop);
+ if (prop) {
+ strncpy(serial, prop, sizeof(serial));
+ serial[sizeof(serial)-1] = '\0';
+ }
prop = udev_device_get_property_value(dev, "ID_TYPE");
- if (prop)
- strcpy(blocktype, prop);
+ if (prop) {
+ strncpy(blocktype, prop, sizeof(blocktype));
+ blocktype[sizeof(blocktype)-1] = '\0';
+ }
udev_device_unref(dev);
} else
@@ -4443,15 +4771,20 @@ hwloc_linux_block_class_fillinfos(struct hwloc_backend *backend,
if (tmp)
*tmp = '\0';
if (!strncmp(line, "E:ID_VENDOR=", strlen("E:ID_VENDOR="))) {
- strcpy(vendor, line+strlen("E:ID_VENDOR="));
+ strncpy(vendor, line+strlen("E:ID_VENDOR="), sizeof(vendor));
+ vendor[sizeof(vendor)-1] = '\0';
} else if (!strncmp(line, "E:ID_MODEL=", strlen("E:ID_MODEL="))) {
- strcpy(model, line+strlen("E:ID_MODEL="));
+ strncpy(model, line+strlen("E:ID_MODEL="), sizeof(model));
+ model[sizeof(model)-1] = '\0';
} else if (!strncmp(line, "E:ID_REVISION=", strlen("E:ID_REVISION="))) {
- strcpy(revision, line+strlen("E:ID_REVISION="));
+ strncpy(revision, line+strlen("E:ID_REVISION="), sizeof(revision));
+ revision[sizeof(revision)-1] = '\0';
} else if (!strncmp(line, "E:ID_SERIAL_SHORT=", strlen("E:ID_SERIAL_SHORT="))) {
- strcpy(serial, line+strlen("E:ID_SERIAL_SHORT="));
+ strncpy(serial, line+strlen("E:ID_SERIAL_SHORT="), sizeof(serial));
+ serial[sizeof(serial)-1] = '\0';
} else if (!strncmp(line, "E:ID_TYPE=", strlen("E:ID_TYPE="))) {
- strcpy(blocktype, line+strlen("E:ID_TYPE="));
+ strncpy(blocktype, line+strlen("E:ID_TYPE="), sizeof(blocktype));
+ blocktype[sizeof(blocktype)-1] = '\0';
}
}
fclose(fd);
@@ -4592,6 +4925,14 @@ hwloc_linux_lookup_block_class(struct hwloc_backend *backend,
strcpy(path, pcidevpath);
pathlen = strlen(path);
+ /* look for a direct block device here (such as NVMe, something without controller subdirs in the middle) */
+ res += hwloc_linux_class_readdir(backend, pcidev, path,
+ HWLOC_OBJ_OSDEV_BLOCK, "block",
+ hwloc_linux_block_class_fillinfos);
+ if (res)
+ return res;
+ /* otherwise try to find controller subdirectories */
+
devicedir = hwloc_opendir(pcidevpath, root_fd);
if (!devicedir)
return 0;
@@ -4772,7 +5113,7 @@ hwloc_linux_directlookup_mic_class(struct hwloc_backend *backend,
/* read the entire class and find the max id of mic%u dirents */
dir = hwloc_opendir("/sys/devices/virtual/mic", root_fd);
if (!dir) {
- dir = opendir("/sys/class/mic");
+ dir = hwloc_opendir("/sys/class/mic", root_fd);
if (!dir)
return 0;
}
@@ -4888,9 +5229,11 @@ hwloc_linux_backend_disable(struct hwloc_backend *backend)
{
struct hwloc_linux_backend_data_s *data = backend->private_data;
#ifdef HAVE_OPENAT
+ if (data->root_path)
+ free(data->root_path);
close(data->root_fd);
#endif
-#ifdef HAVE_LIBUDEV_H
+#ifdef HWLOC_HAVE_LIBUDEV
if (data->udev)
udev_unref(data->udev);
#endif
@@ -4919,13 +5262,17 @@ hwloc_linux_component_instantiate(struct hwloc_disc_component *component,
}
backend->private_data = data;
+ backend->flags = HWLOC_BACKEND_FLAG_NEED_LEVELS;
backend->discover = hwloc_look_linuxfs;
backend->get_obj_cpuset = hwloc_linux_backend_get_obj_cpuset;
backend->notify_new_object = hwloc_linux_backend_notify_new_object;
backend->disable = hwloc_linux_backend_disable;
/* default values */
+ data->arch = HWLOC_LINUX_ARCH_UNKNOWN;
+ data->is_knl = 0;
data->is_real_fsroot = 1;
+ data->root_path = NULL;
if (!fsroot_path)
fsroot_path = "/";
@@ -4937,6 +5284,7 @@ hwloc_linux_component_instantiate(struct hwloc_disc_component *component,
if (strcmp(fsroot_path, "/")) {
backend->is_thissystem = 0;
data->is_real_fsroot = 0;
+ data->root_path = strdup(fsroot_path);
}
/* Since this fd stays open after hwloc returns, mark it as
@@ -4957,13 +5305,17 @@ hwloc_linux_component_instantiate(struct hwloc_disc_component *component,
#endif
data->root_fd = root;
-#ifdef HAVE_LIBUDEV_H
+#ifdef HWLOC_HAVE_LIBUDEV
data->udev = NULL;
if (data->is_real_fsroot) {
data->udev = udev_new();
}
#endif
+ data->dumped_hwdata_dirname = getenv("HWLOC_DUMPED_HWDATA_DIR");
+ if (!data->dumped_hwdata_dirname)
+ data->dumped_hwdata_dirname = RUNSTATEDIR "/hwloc/";
+
data->deprecated_classlinks_model = -2; /* never tried */
data->mic_need_directlookup = -1; /* not initialized */
data->mic_directlookup_id_max = -1; /* not initialized */
@@ -4971,6 +5323,10 @@ hwloc_linux_component_instantiate(struct hwloc_disc_component *component,
return backend;
out_with_data:
+#ifdef HAVE_OPENAT
+ if (data->root_path)
+ free(data->root_path);
+#endif
free(data);
out_with_backend:
free(backend);
@@ -5134,7 +5490,8 @@ hwloc_look_linuxfs_pci(struct hwloc_backend *backend)
fclose(file);
/* is this a bridge? */
- hwloc_pci_prepare_bridge(obj, config_space_cache);
+ if (hwloc_pci_prepare_bridge(obj, config_space_cache) < 0)
+ continue;
/* get the revision */
attr->revision = config_space_cache[HWLOC_PCI_REVISION_ID];
@@ -5170,10 +5527,8 @@ hwloc_look_linuxfs_pci(struct hwloc_backend *backend)
while (obj) {
if (obj->attr->pcidev.domain == domain
&& obj->attr->pcidev.bus == bus
- && obj->attr->pcidev.dev == dev
- && obj->attr->pcidev.func == 0) {
+ && obj->attr->pcidev.dev == dev) {
hwloc_obj_add_info(obj, "PCISlot", dirent->d_name);
- break;
}
obj = obj->next_sibling;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
index 5715888..b403d13 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2015 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -234,7 +234,7 @@ hwloc_osf_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_nodes
ptr = nmmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1,
0, &mattr);
radsetdestroy(&mattr.mattr_radset);
- return ptr;
+ return ptr == MAP_FAILED ? NULL : ptr;
}
static int
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c
index 3a3ad6b..d7028e9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c
@@ -1,8 +1,10 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011, 2013 Université Bordeaux
* Copyright © 2014 Cisco Systems, Inc. All rights reserved.
+ * Copyright © 2015 Research Organization for Information Science
+ * and Technology (RIST). All rights reserved.
* See COPYING in top-level directory.
*/
@@ -20,7 +22,6 @@
#include <string.h>
#include <assert.h>
#include <stdarg.h>
-#include <setjmp.h>
#ifdef HWLOC_LINUX_SYS
#include <dirent.h>
#endif
@@ -206,7 +207,8 @@ hwloc_look_pci(struct hwloc_backend *backend)
if (offset > 0 && offset + 20 /* size of PCI express block up to link status */ <= CONFIG_SPACE_CACHESIZE)
hwloc_pci_find_linkspeed(config_space_cache, offset, &obj->attr->pcidev.linkspeed);
- hwloc_pci_prepare_bridge(obj, config_space_cache);
+ if (hwloc_pci_prepare_bridge(obj, config_space_cache) < 0)
+ continue;
if (obj->type == HWLOC_OBJ_PCI_DEVICE) {
memcpy(&tmp16, &config_space_cache[PCI_SUBSYSTEM_VENDOR_ID], sizeof(tmp16));
@@ -273,10 +275,8 @@ hwloc_look_pci(struct hwloc_backend *backend)
while (obj) {
if (obj->attr->pcidev.domain == domain
&& obj->attr->pcidev.bus == bus
- && obj->attr->pcidev.dev == dev
- && obj->attr->pcidev.func == 0) {
+ && obj->attr->pcidev.dev == dev) {
hwloc_obj_add_info(obj, "PCISlot", dirent->d_name);
- break;
}
obj = obj->next_sibling;
}
@@ -305,7 +305,12 @@ hwloc_pci_component_instantiate(struct hwloc_disc_component *component,
if (!backend)
return NULL;
backend->flags = HWLOC_BACKEND_FLAG_NEED_LEVELS;
- backend->discover = hwloc_look_pci;
+#ifdef HWLOC_SOLARIS_SYS
+ if ((uid_t)0 != geteuid())
+ backend->discover = NULL;
+ else
+#endif
+ backend->discover = hwloc_look_pci;
return backend;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
index cd0e5aa..99a536e 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
@@ -280,7 +280,7 @@ hwloc_solaris_get_sth_membind(hwloc_topology_t topology, idtype_t idtype, id_t i
if (hwloc_bitmap_iszero(nodeset))
hwloc_bitmap_copy(nodeset, hwloc_topology_get_complete_nodeset(topology));
- *policy = HWLOC_MEMBIND_DEFAULT;
+ *policy = HWLOC_MEMBIND_BIND;
return 0;
}
@@ -426,11 +426,11 @@ hwloc_look_lgrp(struct hwloc_topology *topology)
}
nlgrps = lgrp_nlgrps(cookie);
root = lgrp_root(cookie);
- {
+ if (nlgrps > 0) {
hwloc_obj_t *glob_lgrps = calloc(nlgrps, sizeof(hwloc_obj_t));
browse(topology, cookie, root, glob_lgrps, &curlgrp);
#ifdef HAVE_LGRP_LATENCY_COOKIE
- {
+ if (nlgrps > 1) {
float *distances = calloc(curlgrp*curlgrp, sizeof(float));
unsigned *indexes = calloc(curlgrp,sizeof(unsigned));
unsigned i, j;
@@ -440,8 +440,9 @@ hwloc_look_lgrp(struct hwloc_topology *topology)
distances[i*curlgrp+j] = (float) lgrp_latency_cookie(cookie, glob_lgrps[i]->os_index, glob_lgrps[j]->os_index, LGRP_LAT_CPU_TO_MEM);
}
hwloc_distances_set(topology, HWLOC_OBJ_NUMANODE, curlgrp, indexes, glob_lgrps, distances, 0 /* OS cannot force */);
- }
+ } else
#endif /* HAVE_LGRP_LATENCY_COOKIE */
+ free(glob_lgrps);
}
lgrp_fini(cookie);
}
@@ -520,8 +521,11 @@ hwloc_look_kstat(struct hwloc_topology *topology)
hwloc_debug("cpu%u\n", cpuid);
if (cpuid >= Pproc_alloc) {
+ struct hwloc_solaris_Pproc *tmp = realloc(Pproc, 2*Pproc_alloc * sizeof(*Pproc));
+ if (!tmp)
+ goto err;
+ Pproc = tmp;
Pproc_alloc *= 2;
- Pproc = realloc(Pproc, Pproc_alloc * sizeof(*Pproc));
for(i = Pproc_alloc/2; i < Pproc_alloc; i++) {
Pproc[i].Lproc = -1;
Pproc[i].Lpkg = -1;
@@ -532,8 +536,11 @@ hwloc_look_kstat(struct hwloc_topology *topology)
Pproc[cpuid].Lproc = Lproc_num;
if (Lproc_num >= Lproc_alloc) {
+ struct hwloc_solaris_Lproc *tmp = realloc(Lproc, 2*Lproc_alloc * sizeof(*Lproc));
+ if (!tmp)
+ goto err;
+ Lproc = tmp;
Lproc_alloc *= 2;
- Lproc = realloc(Lproc, Lproc_alloc * sizeof(*Lproc));
}
Lproc[Lproc_num].Pproc = cpuid;
Lproc_num++;
@@ -594,8 +601,11 @@ hwloc_look_kstat(struct hwloc_topology *topology)
hwloc_debug("%u on package %u (%u)\n", cpuid, i, pkgid);
if (i == Lpkg_num) {
if (Lpkg_num == Lpkg_alloc) {
+ struct hwloc_solaris_Lpkg *tmp = realloc(Lpkg, 2*Lpkg_alloc * sizeof(*Lpkg));
+ if (!tmp)
+ goto err;
+ Lpkg = tmp;
Lpkg_alloc *= 2;
- Lpkg = realloc(Lpkg, Lpkg_alloc * sizeof(*Lpkg));
}
Lpkg[Lpkg_num++].Ppkg = pkgid;
}
@@ -640,8 +650,11 @@ hwloc_look_kstat(struct hwloc_topology *topology)
hwloc_debug("%u on core %u (%u)\n", cpuid, i, coreid);
if (i == Lcore_num) {
if (Lcore_num == Lcore_alloc) {
+ struct hwloc_solaris_Lcore *tmp = realloc(Lcore, 2*Lcore_alloc * sizeof(*Lcore));
+ if (!tmp)
+ goto err;
+ Lcore = tmp;
Lcore_alloc *= 2;
- Lcore = realloc(Lcore, Lcore_alloc * sizeof(*Lcore));
}
Lcore[Lcore_num].Ppkg = Pproc[cpuid].Ppkg;
Lcore[Lcore_num++].Pcore = coreid;
@@ -710,8 +723,16 @@ hwloc_look_kstat(struct hwloc_topology *topology)
free(Lproc);
free(Lcore);
free(Lpkg);
-
return Lproc_num > 0;
+
+ err:
+ kstat_close(kc);
+
+ free(Pproc);
+ free(Lproc);
+ free(Lcore);
+ free(Lpkg);
+ return 0;
}
#endif /* LIBKSTAT */
@@ -732,7 +753,6 @@ hwloc_look_solaris(struct hwloc_backend *backend)
hwloc_look_lgrp(topology);
#endif /* HAVE_LIBLGRP */
#ifdef HAVE_LIBKSTAT
- nbprocs = 0;
if (hwloc_look_kstat(topology) > 0)
alreadypus = 1;
#endif /* HAVE_LIBKSTAT */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
index db7087b..d791ba6 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
@@ -60,7 +60,7 @@ hwloc_synthetic_process_level_indexes(struct hwloc_synthetic_backend_data_s *dat
unsigned long length = curlevel->index_string_length;
unsigned *array = NULL;
struct hwloc_synthetic_intlv_loop_s * loops = NULL;
- unsigned long i;
+ size_t i;
if (!attr)
return;
@@ -81,7 +81,7 @@ hwloc_synthetic_process_level_indexes(struct hwloc_synthetic_backend_data_s *dat
unsigned idx = strtoul(attr, (char **) &next, 10);
if (next == attr) {
if (verbose)
- fprintf(stderr, "Failed to read synthetic index #%lu at '%s'\n", i, attr);
+ fprintf(stderr, "Failed to read synthetic index #%lu at '%s'\n", (unsigned long) i, attr);
goto out_with_array;
}
@@ -89,7 +89,7 @@ hwloc_synthetic_process_level_indexes(struct hwloc_synthetic_backend_data_s *dat
if (i != total-1) {
if (*next != ',') {
if (verbose)
- fprintf(stderr, "Missing comma after synthetic index #%lu at '%s'\n", i, attr);
+ fprintf(stderr, "Missing comma after synthetic index #%lu at '%s'\n", (unsigned long) i, attr);
goto out_with_array;
}
attr = next+1;
@@ -198,7 +198,7 @@ hwloc_synthetic_process_level_indexes(struct hwloc_synthetic_backend_data_s *dat
&& cachetypeattr != (hwloc_obj_cache_type_t) -1
&& cachetypeattr != data->level[i].cachetype)
continue;
- loops[cur_loop].level_depth = i;
+ loops[cur_loop].level_depth = (unsigned)i;
break;
}
if (i == curleveldepth) {
@@ -326,7 +326,7 @@ hwloc_synthetic_parse_level_attrs(const char *attrs, const char **next_posp,
const char *next_pos;
hwloc_uint64_t memorysize = 0;
const char *index_string = NULL;
- unsigned long index_string_length = 0;
+ size_t index_string_length = 0;
next_pos = (const char *) strchr(attrs, ')');
if (!next_pos) {
@@ -368,7 +368,7 @@ hwloc_synthetic_parse_level_attrs(const char *attrs, const char **next_posp,
curlevel->memorysize = memorysize;
curlevel->index_string = index_string;
- curlevel->index_string_length = index_string_length;
+ curlevel->index_string_length = (unsigned long)index_string_length;
*next_posp = next_pos+1;
return 0;
}
@@ -428,7 +428,7 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
errno = EINVAL;
goto error;
}
- if (type == HWLOC_OBJ_MISC || type == HWLOC_OBJ_BRIDGE || type == HWLOC_OBJ_PCI_DEVICE || type == HWLOC_OBJ_OS_DEVICE) {
+ if (type == HWLOC_OBJ_SYSTEM || type == HWLOC_OBJ_MISC || type == HWLOC_OBJ_BRIDGE || type == HWLOC_OBJ_PCI_DEVICE || type == HWLOC_OBJ_OS_DEVICE) {
if (verbose)
fprintf(stderr, "Synthetic string with disallowed object type at '%s'\n", pos);
errno = EINVAL;
@@ -455,6 +455,12 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
errno = EINVAL;
goto error;
}
+ if (!item) {
+ if (verbose)
+ fprintf(stderr,"Synthetic string with disallow 0 number of objects at '%s'\n", pos);
+ errno = EINVAL;
+ goto error;
+ }
data->level[count-1].arity = (unsigned)item;
totalarity *= item;
@@ -497,6 +503,19 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
type = curlevel->type;
+ if (i == count-1 && type != HWLOC_OBJ_TYPE_UNKNOWN && type != HWLOC_OBJ_PU) {
+ if (verbose)
+ fprintf(stderr, "Synthetic string cannot use non-PU type for last level\n");
+ errno = EINVAL;
+ return -1;
+ }
+ if (i != count-1 && type == HWLOC_OBJ_PU) {
+ if (verbose)
+ fprintf(stderr, "Synthetic string cannot use PU type for non-last level\n");
+ errno = EINVAL;
+ return -1;
+ }
+
if (type == HWLOC_OBJ_TYPE_UNKNOWN) {
if (i == count-1)
type = HWLOC_OBJ_PU;
@@ -851,7 +870,7 @@ static int hwloc_topology_export_synthetic_indexes(struct hwloc_topology * topol
unsigned total = topology->level_nbobjects[depth];
unsigned step = 1;
unsigned nr_loops = 0;
- struct hwloc_synthetic_intlv_loop_s *loops = NULL;
+ struct hwloc_synthetic_intlv_loop_s *loops = NULL, *tmploops;
hwloc_obj_t cur;
unsigned i, j;
ssize_t tmplen = buflen;
@@ -878,9 +897,10 @@ static int hwloc_topology_export_synthetic_indexes(struct hwloc_topology * topol
break;
nr_loops++;
- loops = realloc(loops, nr_loops*sizeof(*loops));
- if (!loops)
+ tmploops = realloc(loops, nr_loops*sizeof(*loops));
+ if (!tmploops)
goto exportall;
+ loops = tmploops;
loops[nr_loops-1].step = i;
loops[nr_loops-1].nb = j;
step *= j;
@@ -908,7 +928,7 @@ static int hwloc_topology_export_synthetic_indexes(struct hwloc_topology * topol
}
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
}
@@ -931,7 +951,7 @@ static int hwloc_topology_export_synthetic_indexes(struct hwloc_topology * topol
return -1;
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
cur = cur->next_cousin;
@@ -979,7 +999,7 @@ static int hwloc_topology_export_synthetic_obj_attr(struct hwloc_topology * topo
return -1;
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
@@ -989,7 +1009,7 @@ static int hwloc_topology_export_synthetic_obj_attr(struct hwloc_topology * topo
return -1;
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
@@ -998,7 +1018,7 @@ static int hwloc_topology_export_synthetic_obj_attr(struct hwloc_topology * topo
return -1;
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
}
@@ -1053,7 +1073,7 @@ hwloc_topology_export_synthetic(struct hwloc_topology * topology,
if (ret > 0)
prefix = separator;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
}
@@ -1073,7 +1093,7 @@ hwloc_topology_export_synthetic(struct hwloc_topology * topology,
return -1;
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
@@ -1084,7 +1104,7 @@ hwloc_topology_export_synthetic(struct hwloc_topology * topology,
return -1;
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
index 371aaa1..c1bfaad 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
@@ -33,6 +33,10 @@ typedef enum _PROCESSOR_CACHE_TYPE {
#define CACHE_FULLY_ASSOCIATIVE 0xFF
#endif
+#ifndef MAXIMUM_PROC_PER_GROUP /* missing in MinGW */
+#define MAXIMUM_PROC_PER_GROUP 64
+#endif
+
#ifndef HAVE_CACHE_DESCRIPTOR
typedef struct _CACHE_DESCRIPTOR {
BYTE Level;
@@ -172,34 +176,254 @@ typedef struct _PSAPI_WORKING_SET_EX_INFORMATION {
} PSAPI_WORKING_SET_EX_INFORMATION;
#endif
+#ifndef HAVE_PROCESSOR_NUMBER
+typedef struct _PROCESSOR_NUMBER {
+ WORD Group;
+ BYTE Number;
+ BYTE Reserved;
+} PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
+#endif
+
+/* Function pointers */
+
+typedef WORD (WINAPI *PFN_GETACTIVEPROCESSORGROUPCOUNT)(void);
+static PFN_GETACTIVEPROCESSORGROUPCOUNT GetActiveProcessorGroupCountProc;
+
+static unsigned long nr_processor_groups = 1;
+
+typedef WORD (WINAPI *PFN_GETACTIVEPROCESSORCOUNT)(WORD);
+static PFN_GETACTIVEPROCESSORCOUNT GetActiveProcessorCountProc;
+
+typedef DWORD (WINAPI *PFN_GETCURRENTPROCESSORNUMBER)(void);
+static PFN_GETCURRENTPROCESSORNUMBER GetCurrentProcessorNumberProc;
+
+typedef VOID (WINAPI *PFN_GETCURRENTPROCESSORNUMBEREX)(PPROCESSOR_NUMBER);
+static PFN_GETCURRENTPROCESSORNUMBEREX GetCurrentProcessorNumberExProc;
+
+typedef BOOL (WINAPI *PFN_GETLOGICALPROCESSORINFORMATION)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer, PDWORD ReturnLength);
+static PFN_GETLOGICALPROCESSORINFORMATION GetLogicalProcessorInformationProc;
+
+typedef BOOL (WINAPI *PFN_GETLOGICALPROCESSORINFORMATIONEX)(LOGICAL_PROCESSOR_RELATIONSHIP relationship, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer, PDWORD ReturnLength);
+static PFN_GETLOGICALPROCESSORINFORMATIONEX GetLogicalProcessorInformationExProc;
+
+typedef BOOL (WINAPI *PFN_SETTHREADGROUPAFFINITY)(HANDLE hThread, const GROUP_AFFINITY *GroupAffinity, PGROUP_AFFINITY PreviousGroupAffinity);
+static PFN_SETTHREADGROUPAFFINITY SetThreadGroupAffinityProc;
+
+typedef BOOL (WINAPI *PFN_GETTHREADGROUPAFFINITY)(HANDLE hThread, PGROUP_AFFINITY GroupAffinity);
+static PFN_GETTHREADGROUPAFFINITY GetThreadGroupAffinityProc;
+
+typedef BOOL (WINAPI *PFN_GETNUMAAVAILABLEMEMORYNODE)(UCHAR Node, PULONGLONG AvailableBytes);
+static PFN_GETNUMAAVAILABLEMEMORYNODE GetNumaAvailableMemoryNodeProc;
+
+typedef BOOL (WINAPI *PFN_GETNUMAAVAILABLEMEMORYNODEEX)(USHORT Node, PULONGLONG AvailableBytes);
+static PFN_GETNUMAAVAILABLEMEMORYNODEEX GetNumaAvailableMemoryNodeExProc;
+
+typedef LPVOID (WINAPI *PFN_VIRTUALALLOCEXNUMA)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect, DWORD nndPreferred);
+static PFN_VIRTUALALLOCEXNUMA VirtualAllocExNumaProc;
+
+typedef BOOL (WINAPI *PFN_VIRTUALFREEEX)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
+static PFN_VIRTUALFREEEX VirtualFreeExProc;
+
+typedef BOOL (WINAPI *PFN_QUERYWORKINGSETEX)(HANDLE hProcess, PVOID pv, DWORD cb);
+static PFN_QUERYWORKINGSETEX QueryWorkingSetExProc;
+
+static void hwloc_win_get_function_ptrs(void)
+{
+ HMODULE kernel32;
+
+ kernel32 = LoadLibrary("kernel32.dll");
+ if (kernel32) {
+ GetActiveProcessorGroupCountProc =
+ (PFN_GETACTIVEPROCESSORGROUPCOUNT) GetProcAddress(kernel32, "GetActiveProcessorGroupCount");
+ GetActiveProcessorCountProc =
+ (PFN_GETACTIVEPROCESSORCOUNT) GetProcAddress(kernel32, "GetActiveProcessorCount");
+ GetLogicalProcessorInformationProc =
+ (PFN_GETLOGICALPROCESSORINFORMATION) GetProcAddress(kernel32, "GetLogicalProcessorInformation");
+ GetCurrentProcessorNumberProc =
+ (PFN_GETCURRENTPROCESSORNUMBER) GetProcAddress(kernel32, "GetCurrentProcessorNumber");
+ GetCurrentProcessorNumberExProc =
+ (PFN_GETCURRENTPROCESSORNUMBEREX) GetProcAddress(kernel32, "GetCurrentProcessorNumberEx");
+ SetThreadGroupAffinityProc =
+ (PFN_SETTHREADGROUPAFFINITY) GetProcAddress(kernel32, "SetThreadGroupAffinity");
+ GetThreadGroupAffinityProc =
+ (PFN_GETTHREADGROUPAFFINITY) GetProcAddress(kernel32, "GetThreadGroupAffinity");
+ GetNumaAvailableMemoryNodeProc =
+ (PFN_GETNUMAAVAILABLEMEMORYNODE) GetProcAddress(kernel32, "GetNumaAvailableMemoryNode");
+ GetNumaAvailableMemoryNodeExProc =
+ (PFN_GETNUMAAVAILABLEMEMORYNODEEX) GetProcAddress(kernel32, "GetNumaAvailableMemoryNodeEx");
+ GetLogicalProcessorInformationExProc =
+ (PFN_GETLOGICALPROCESSORINFORMATIONEX)GetProcAddress(kernel32, "GetLogicalProcessorInformationEx");
+ VirtualAllocExNumaProc =
+ (PFN_VIRTUALALLOCEXNUMA) GetProcAddress(kernel32, "K32QueryWorkingSetEx");
+ VirtualAllocExNumaProc =*
+ (PFN_VIRTUALALLOCEXNUMA) GetProcAddress(kernel32, "VirtualAllocExNuma");
+ VirtualFreeExProc =
+ (PFN_VIRTUALFREEEX) GetProcAddress(kernel32, "VirtualFreeEx");
+ }
+
+ if (GetActiveProcessorGroupCountProc)
+ nr_processor_groups = GetActiveProcessorGroupCountProc();
+
+ if (!VirtualAllocExNumaProc) {
+ HMODULE psapi = LoadLibrary("psapi.dll");
+ if (psapi)
+ VirtualAllocExNumaProc = (PFN_VIRTUALALLOCEXNUMA) GetProcAddress(psapi, "QueryWorkingSetEx");
+ }
+}
+
+/*
+ * ULONG_PTR and DWORD_PTR are 64/32bits depending on the arch
+ * while bitmaps use unsigned long (always 32bits)
+ */
+
+static void hwloc_bitmap_from_ULONG_PTR(hwloc_bitmap_t set, ULONG_PTR mask)
+{
+#if SIZEOF_VOID_P == 8
+ hwloc_bitmap_from_ulong(set, mask & 0xffffffff);
+ hwloc_bitmap_set_ith_ulong(set, 1, mask >> 32);
+#else
+ hwloc_bitmap_from_ulong(set, mask);
+#endif
+}
+
+static void hwloc_bitmap_from_ith_ULONG_PTR(hwloc_bitmap_t set, unsigned i, ULONG_PTR mask)
+{
+#if SIZEOF_VOID_P == 8
+ hwloc_bitmap_from_ith_ulong(set, 2*i, mask & 0xffffffff);
+ hwloc_bitmap_set_ith_ulong(set, 2*i+1, mask >> 32);
+#else
+ hwloc_bitmap_from_ith_ulong(set, i, mask);
+#endif
+}
+
static void hwloc_bitmap_set_ith_ULONG_PTR(hwloc_bitmap_t set, unsigned i, ULONG_PTR mask)
{
- /* ULONG_PTR is 64/32bits depending on the arch
- * while unsigned long is always 32bits */
#if SIZEOF_VOID_P == 8
- hwloc_bitmap_set_ith_ulong(set, 2*i, mask & 0xffffffff);
- hwloc_bitmap_set_ith_ulong(set, 2*i+1, mask >> 32);
+ hwloc_bitmap_set_ith_ulong(set, 2*i, mask & 0xffffffff);
+ hwloc_bitmap_set_ith_ulong(set, 2*i+1, mask >> 32);
+#else
+ hwloc_bitmap_set_ith_ulong(set, i, mask);
+#endif
+}
+
+static ULONG_PTR hwloc_bitmap_to_ULONG_PTR(hwloc_const_bitmap_t set)
+{
+#if SIZEOF_VOID_P == 8
+ ULONG_PTR up = hwloc_bitmap_to_ith_ulong(set, 1);
+ up <<= 32;
+ up |= hwloc_bitmap_to_ulong(set);
+ return up;
+#else
+ return hwloc_bitmap_to_ulong(set);
+#endif
+}
+
+static ULONG_PTR hwloc_bitmap_to_ith_ULONG_PTR(hwloc_const_bitmap_t set, unsigned i)
+{
+#if SIZEOF_VOID_P == 8
+ ULONG_PTR up = hwloc_bitmap_to_ith_ulong(set, 2*i+1);
+ up <<= 32;
+ up |= hwloc_bitmap_to_ith_ulong(set, 2*i);
+ return up;
#else
- hwloc_bitmap_set_ith_ulong(set, i, mask);
+ return hwloc_bitmap_to_ith_ulong(set, i);
#endif
}
-/* TODO: SetThreadIdealProcessor */
+/* convert set into index+mask if all set bits are in the same ULONG.
+ * otherwise return -1.
+ */
+static int hwloc_bitmap_to_single_ULONG_PTR(hwloc_const_bitmap_t set, unsigned *index, ULONG_PTR *mask)
+{
+ unsigned first_ulp, last_ulp;
+ if (hwloc_bitmap_weight(set) == -1)
+ return -1;
+ first_ulp = hwloc_bitmap_first(set) / (sizeof(ULONG_PTR)*8);
+ last_ulp = hwloc_bitmap_last(set) / (sizeof(ULONG_PTR)*8);
+ if (first_ulp != last_ulp)
+ return -1;
+ *mask = hwloc_bitmap_to_ith_ULONG_PTR(set, first_ulp);
+ *index = first_ulp;
+ return 0;
+}
+
+/**************************************************************
+ * hwloc PU numbering with respect to Windows processor groups
+ *
+ * Everywhere below we reserve 64 physical indexes per processor groups because that's
+ * the maximum (MAXIMUM_PROC_PER_GROUP). Windows may actually use less bits than that
+ * in some groups (either to avoid splitting NUMA nodes across groups, or because of OS
+ * tweaks such as "bcdedit /set groupsize 8") but we keep some unused indexes for simplicity.
+ * That means PU physical indexes and cpusets may be non-contigous.
+ * That also means hwloc_fallback_nbprocessors() below must return the last PU index + 1
+ * instead the actual number of processors.
+ */
+
+/********************
+ * last_cpu_location
+ */
+
+static int
+hwloc_win_get_thisthread_last_cpu_location(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_cpuset_t set, int flags __hwloc_attribute_unused)
+{
+ assert(GetCurrentProcessorNumberExProc || (GetCurrentProcessorNumberProc && nr_processor_groups == 1));
+
+ if (nr_processor_groups > 1 || !GetCurrentProcessorNumberProc) {
+ PROCESSOR_NUMBER num;
+ GetCurrentProcessorNumberExProc(&num);
+ hwloc_bitmap_from_ith_ULONG_PTR(set, num.Group, ((ULONG_PTR)1) << num.Number);
+ return 0;
+ }
+
+ hwloc_bitmap_from_ith_ULONG_PTR(set, 0, ((ULONG_PTR)1) << GetCurrentProcessorNumberProc());
+ return 0;
+}
+
+/* TODO: hwloc_win_get_thisproc_last_cpu_location() using
+ * CreateToolhelp32Snapshot(), Thread32First/Next()
+ * th.th32OwnerProcessID == GetCurrentProcessId() for filtering within process
+ * OpenThread(THREAD_SET_INFORMATION|THREAD_QUERY_INFORMATION, FALSE, te32.th32ThreadID) to get a handle.
+ */
+
+
+/******************************
+ * set cpu/membind for threads
+ */
+
+/* TODO: SetThreadIdealProcessor{,Ex} */
static int
hwloc_win_set_thread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_thread_t thread, hwloc_const_bitmap_t hwloc_set, int flags)
{
- DWORD mask;
+ DWORD_PTR mask;
+ unsigned group;
if (flags & HWLOC_CPUBIND_NOMEMBIND) {
errno = ENOSYS;
return -1;
}
- /* TODO: groups SetThreadGroupAffinity */
- /* The resulting binding is always strict */
- mask = hwloc_bitmap_to_ulong(hwloc_set);
- if (!SetThreadAffinityMask(thread, mask))
+
+ if (hwloc_bitmap_to_single_ULONG_PTR(hwloc_set, &group, &mask) < 0) {
+ errno = ENOSYS;
return -1;
+ }
+
+ assert(nr_processor_groups == 1 || SetThreadGroupAffinityProc);
+
+ if (nr_processor_groups > 1) {
+ GROUP_AFFINITY aff;
+ memset(&aff, 0, sizeof(aff)); /* we get Invalid Parameter error if Reserved field isn't cleared */
+ aff.Group = group;
+ aff.Mask = mask;
+ if (!SetThreadGroupAffinityProc(thread, &aff, NULL))
+ return -1;
+
+ } else {
+ /* SetThreadAffinityMask() only changes the mask inside the current processor group */
+ /* The resulting binding is always strict */
+ if (!SetThreadAffinityMask(thread, mask))
+ return -1;
+ }
return 0;
}
@@ -230,24 +454,85 @@ hwloc_win_set_thisthread_membind(hwloc_topology_t topology, hwloc_const_nodeset_
return ret;
}
+
+/******************************
+ * get cpu/membind for threads
+ */
+
+ static int
+hwloc_win_get_thread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_thread_t thread, hwloc_cpuset_t set, int flags __hwloc_attribute_unused)
+{
+ GROUP_AFFINITY aff;
+
+ assert(GetThreadGroupAffinityProc);
+
+ if (!GetThreadGroupAffinityProc(thread, &aff))
+ return -1;
+ hwloc_bitmap_from_ith_ULONG_PTR(set, aff.Group, aff.Mask);
+ return 0;
+}
+
+static int
+hwloc_win_get_thisthread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_cpuset_t set, int flags __hwloc_attribute_unused)
+{
+ return hwloc_win_get_thread_cpubind(topology, GetCurrentThread(), set, flags);
+}
+
+static int
+hwloc_win_get_thisthread_membind(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags)
+{
+ int ret;
+ hwloc_cpuset_t cpuset = hwloc_bitmap_alloc();
+ ret = hwloc_win_get_thread_cpubind(topology, GetCurrentThread(), cpuset, flags);
+ if (!ret) {
+ *policy = HWLOC_MEMBIND_BIND;
+ hwloc_cpuset_to_nodeset(topology, cpuset, nodeset);
+ }
+ hwloc_bitmap_free(cpuset);
+ return ret;
+}
+
+
+/********************************
+ * set cpu/membind for processes
+ */
+
static int
hwloc_win_set_proc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_pid_t proc, hwloc_const_bitmap_t hwloc_set, int flags)
{
- DWORD mask;
+ DWORD_PTR mask;
+
+ assert(nr_processor_groups == 1);
+
if (flags & HWLOC_CPUBIND_NOMEMBIND) {
errno = ENOSYS;
return -1;
}
- /* TODO: groups, hard: has to manually bind all threads into the other group,
- * and the bind the process inside the group */
+
+ /* TODO: SetThreadGroupAffinity() for all threads doesn't enforce the whole process affinity,
+ * maybe because of process-specific resource locality */
+ /* TODO: if we are in a single group (check with GetProcessGroupAffinity()),
+ * SetProcessAffinityMask() changes the binding within that same group.
+ */
+ /* TODO: NtSetInformationProcess() works very well for binding to any mask in a single group,
+ * but it's an internal routine.
+ */
+ /* TODO: checks whether hwloc-bind.c needs to pass INHERIT_PARENT_AFFINITY to CreateProcess() instead of execvp(). */
+
/* The resulting binding is always strict */
- mask = hwloc_bitmap_to_ulong(hwloc_set);
+ mask = hwloc_bitmap_to_ULONG_PTR(hwloc_set);
if (!SetProcessAffinityMask(proc, mask))
return -1;
return 0;
}
static int
+hwloc_win_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_bitmap_t hwloc_set, int flags)
+{
+ return hwloc_win_set_proc_cpubind(topology, GetCurrentProcess(), hwloc_set, flags);
+}
+
+static int
hwloc_win_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
int ret;
@@ -267,17 +552,41 @@ hwloc_win_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_con
}
static int
+hwloc_win_set_thisproc_membind(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
+{
+ return hwloc_win_set_proc_membind(topology, GetCurrentProcess(), nodeset, policy, flags);
+}
+
+
+/********************************
+ * get cpu/membind for processes
+ */
+
+static int
hwloc_win_get_proc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_pid_t proc, hwloc_bitmap_t hwloc_set, int flags)
{
DWORD_PTR proc_mask, sys_mask;
+
+ assert(nr_processor_groups == 1);
+
if (flags & HWLOC_CPUBIND_NOMEMBIND) {
errno = ENOSYS;
return -1;
}
- /* TODO: groups, GetProcessGroupAffinity, or merge SetThreadGroupAffinity for all threads */
+
+ /* TODO: if we are in a single group (check with GetProcessGroupAffinity()),
+ * GetProcessAffinityMask() gives the mask within that group.
+ */
+ /* TODO: if we are in multiple groups, GetProcessGroupAffinity() gives their IDs,
+ * but we don't know their masks.
+ */
+ /* TODO: GetThreadGroupAffinity() for all threads can be smaller than the whole process affinity,
+ * maybe because of process-specific resource locality.
+ */
+
if (!GetProcessAffinityMask(proc, &proc_mask, &sys_mask))
return -1;
- hwloc_bitmap_from_ulong(hwloc_set, proc_mask);
+ hwloc_bitmap_from_ULONG_PTR(hwloc_set, proc_mask);
return 0;
}
@@ -296,18 +605,6 @@ hwloc_win_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nod
}
static int
-hwloc_win_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_bitmap_t hwloc_set, int flags)
-{
- return hwloc_win_set_proc_cpubind(topology, GetCurrentProcess(), hwloc_set, flags);
-}
-
-static int
-hwloc_win_set_thisproc_membind(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
-{
- return hwloc_win_set_proc_membind(topology, GetCurrentProcess(), nodeset, policy, flags);
-}
-
-static int
hwloc_win_get_thisproc_cpubind(hwloc_topology_t topology, hwloc_bitmap_t hwloc_cpuset, int flags)
{
return hwloc_win_get_proc_cpubind(topology, GetCurrentProcess(), hwloc_cpuset, flags);
@@ -319,36 +616,10 @@ hwloc_win_get_thisproc_membind(hwloc_topology_t topology, hwloc_nodeset_t nodese
return hwloc_win_get_proc_membind(topology, GetCurrentProcess(), nodeset, policy, flags);
}
-static LPVOID (WINAPI *VirtualAllocExNumaProc)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect, DWORD nndPreferred);
-static BOOL (WINAPI *VirtualFreeExProc)(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
-static BOOL (WINAPI *QueryWorkingSetExProc)(HANDLE hProcess, PVOID pv, DWORD cb);
-
-static int hwloc_win_get_VirtualAllocExNumaProc(void) {
- if (VirtualAllocExNumaProc == NULL) {
- FARPROC alloc_fun = NULL, free_fun = NULL;
- HMODULE kernel32;
-
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- alloc_fun = GetProcAddress(kernel32, "VirtualAllocExNuma");
- free_fun = GetProcAddress(kernel32, "VirtualFreeEx");
- }
-
- if (!alloc_fun || !free_fun) {
- VirtualAllocExNumaProc = (FARPROC) -1;
- errno = ENOSYS;
- return -1;
- }
- VirtualAllocExNumaProc = alloc_fun;
- VirtualFreeExProc = free_fun;
- } else if ((FARPROC) VirtualAllocExNumaProc == (FARPROC)-1) {
- errno = ENOSYS;
- return -1;
- }
-
- return 0;
-}
+/************************
+ * membind alloc/free
+ */
static void *
hwloc_win_alloc(hwloc_topology_t topology __hwloc_attribute_unused, size_t len) {
@@ -392,34 +663,10 @@ hwloc_win_free_membind(hwloc_topology_t topology __hwloc_attribute_unused, void
return 0;
}
-static int hwloc_win_get_QueryWorkingSetExProc(void) {
- if (QueryWorkingSetExProc == NULL) {
- FARPROC fun = NULL;
- HMODULE kernel32, psapi;
-
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32)
- fun = GetProcAddress(kernel32, "K32QueryWorkingSetEx");
- if (!fun) {
- psapi = LoadLibrary("psapi.dll");
- if (psapi)
- fun = GetProcAddress(psapi, "QueryWorkingSetEx");
- }
-
- if (!fun) {
- QueryWorkingSetExProc = (FARPROC) -1;
- errno = ENOSYS;
- return -1;
- }
-
- QueryWorkingSetExProc = fun;
- } else if ((FARPROC) QueryWorkingSetExProc == (FARPROC)-1) {
- errno = ENOSYS;
- return -1;
- }
- return 0;
-}
+/**********************
+ * membind for areas
+ */
static int
hwloc_win_get_area_membind(hwloc_topology_t topology __hwloc_attribute_unused, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags)
@@ -433,7 +680,7 @@ hwloc_win_get_area_membind(hwloc_topology_t topology __hwloc_attribute_unused, c
page_size = SystemInfo.dwPageSize;
start = (((uintptr_t) addr) / page_size) * page_size;
- nb = (((uintptr_t) addr + len - start) + page_size - 1) / page_size;
+ nb = (unsigned)((((uintptr_t) addr + len - start) + page_size - 1) / page_size);
if (!nb)
nb = 1;
@@ -472,20 +719,19 @@ hwloc_win_get_area_membind(hwloc_topology_t topology __hwloc_attribute_unused, c
}
}
+
+/*************************
+ * discovery
+ */
+
static int
hwloc_look_windows(struct hwloc_backend *backend)
{
struct hwloc_topology *topology = backend->topology;
- BOOL (WINAPI *GetLogicalProcessorInformationProc)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer, PDWORD ReturnLength);
- BOOL (WINAPI *GetLogicalProcessorInformationExProc)(LOGICAL_PROCESSOR_RELATIONSHIP relationship, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer, PDWORD ReturnLength);
- BOOL (WINAPI *GetNumaAvailableMemoryNodeProc)(UCHAR Node, PULONGLONG AvailableBytes);
- BOOL (WINAPI *GetNumaAvailableMemoryNodeExProc)(USHORT Node, PULONGLONG AvailableBytes);
+ hwloc_bitmap_t groups_pu_set = NULL;
SYSTEM_INFO SystemInfo;
-
DWORD length;
- HMODULE kernel32;
-
if (topology->levels[0][0]->cpuset)
/* somebody discovered things */
return 0;
@@ -494,15 +740,8 @@ hwloc_look_windows(struct hwloc_backend *backend)
GetSystemInfo(&SystemInfo);
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- GetLogicalProcessorInformationProc = GetProcAddress(kernel32, "GetLogicalProcessorInformation");
- GetNumaAvailableMemoryNodeProc = GetProcAddress(kernel32, "GetNumaAvailableMemoryNode");
- GetNumaAvailableMemoryNodeExProc = GetProcAddress(kernel32, "GetNumaAvailableMemoryNodeEx");
- GetLogicalProcessorInformationExProc = GetProcAddress(kernel32, "GetLogicalProcessorInformationEx");
-
- if (!GetLogicalProcessorInformationExProc && GetLogicalProcessorInformationProc) {
- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION procInfo;
+ if (!GetLogicalProcessorInformationExProc && GetLogicalProcessorInformationProc) {
+ PSYSTEM_LOGICAL_PROCESSOR_INFORMATION procInfo, tmpprocInfo;
unsigned id;
unsigned i;
struct hwloc_obj *obj;
@@ -516,7 +755,12 @@ hwloc_look_windows(struct hwloc_backend *backend)
break;
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
return -1;
- procInfo = realloc(procInfo, length);
+ tmpprocInfo = realloc(procInfo, length);
+ if (!tmpprocInfo) {
+ free(procInfo);
+ goto out;
+ }
+ procInfo = tmpprocInfo;
}
assert(!length || procInfo);
@@ -608,11 +852,10 @@ hwloc_look_windows(struct hwloc_backend *backend)
}
free(procInfo);
- }
-
- if (GetLogicalProcessorInformationExProc) {
- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX procInfoTotal, procInfo;
+ }
+ if (GetLogicalProcessorInformationExProc) {
+ PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX procInfoTotal, tmpprocInfoTotal, procInfo;
unsigned id;
struct hwloc_obj *obj;
hwloc_obj_type_t type;
@@ -625,7 +868,12 @@ hwloc_look_windows(struct hwloc_backend *backend)
break;
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
return -1;
- procInfoTotal = realloc(procInfoTotal, length);
+ tmpprocInfoTotal = realloc(procInfoTotal, length);
+ if (!tmpprocInfoTotal) {
+ free(procInfoTotal);
+ goto out;
+ }
+ procInfoTotal = tmpprocInfoTotal;
}
for (procInfo = procInfoTotal;
@@ -676,6 +924,12 @@ hwloc_look_windows(struct hwloc_backend *backend)
/* KAFFINITY is ULONG_PTR */
hwloc_bitmap_set_ith_ULONG_PTR(obj->cpuset, id, mask);
hwloc_debug_2args_bitmap("group %u %d bitmap %s\n", id, procInfo->Group.GroupInfo[id].ActiveProcessorCount, obj->cpuset);
+
+ /* save the set of PUs so that we can create them at the end */
+ if (!groups_pu_set)
+ groups_pu_set = hwloc_bitmap_alloc();
+ hwloc_bitmap_or(groups_pu_set, groups_pu_set, obj->cpuset);
+
hwloc_insert_object_by_cpuset(topology, obj);
}
continue;
@@ -692,7 +946,7 @@ hwloc_look_windows(struct hwloc_backend *backend)
/* GROUP_AFFINITY.Mask is KAFFINITY, which is ULONG_PTR */
hwloc_bitmap_set_ith_ULONG_PTR(obj->cpuset, GroupMask[i].Group, GroupMask[i].Mask);
}
- hwloc_debug("%s#%u bitmap %s\n", hwloc_obj_type_string(type), id, obj->cpuset);
+ hwloc_debug_2args_bitmap("%s#%u bitmap %s\n", hwloc_obj_type_string(type), id, obj->cpuset);
switch (type) {
case HWLOC_OBJ_NUMANODE:
@@ -739,12 +993,41 @@ hwloc_look_windows(struct hwloc_backend *backend)
hwloc_insert_object_by_cpuset(topology, obj);
}
free(procInfoTotal);
- }
}
- /* add PU objects */
- hwloc_setup_pu_level(topology, hwloc_fallback_nbprocessors(topology));
+ if (groups_pu_set) {
+ /* the system supports multiple Groups.
+ * PU indexes may be discontiguous, especially if Groups contain less than 64 procs.
+ */
+ hwloc_obj_t obj;
+ unsigned idx;
+ hwloc_bitmap_foreach_begin(idx, groups_pu_set) {
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, idx);
+ obj->cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_only(obj->cpuset, idx);
+ hwloc_debug_1arg_bitmap("cpu %u has cpuset %s\n",
+ idx, obj->cpuset);
+ hwloc_insert_object_by_cpuset(topology, obj);
+ } hwloc_bitmap_foreach_end();
+ hwloc_bitmap_free(groups_pu_set);
+ } else {
+ /* no processor groups */
+ SYSTEM_INFO sysinfo;
+ hwloc_obj_t obj;
+ unsigned idx;
+ GetSystemInfo(&sysinfo);
+ for(idx=0; idx<32; idx++)
+ if (sysinfo.dwActiveProcessorMask & (((DWORD_PTR)1)<<idx)) {
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, idx);
+ obj->cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_only(obj->cpuset, idx);
+ hwloc_debug_1arg_bitmap("cpu %u has cpuset %s\n",
+ idx, obj->cpuset);
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+ }
+ out:
hwloc_obj_add_info(topology->levels[0][0], "Backend", "Windows");
if (topology->is_thissystem)
hwloc_add_uname_info(topology, NULL);
@@ -755,31 +1038,51 @@ void
hwloc_set_windows_hooks(struct hwloc_binding_hooks *hooks,
struct hwloc_topology_support *support)
{
- hooks->set_proc_cpubind = hwloc_win_set_proc_cpubind;
- hooks->get_proc_cpubind = hwloc_win_get_proc_cpubind;
- hooks->set_thread_cpubind = hwloc_win_set_thread_cpubind;
- hooks->set_thisproc_cpubind = hwloc_win_set_thisproc_cpubind;
- hooks->get_thisproc_cpubind = hwloc_win_get_thisproc_cpubind;
- hooks->set_thisthread_cpubind = hwloc_win_set_thisthread_cpubind;
- /* TODO: get_last_cpu_location: use GetCurrentProcessorNumber */
-
- hooks->set_proc_membind = hwloc_win_set_proc_membind;
- hooks->get_proc_membind = hwloc_win_get_proc_membind;
- hooks->set_thisproc_membind = hwloc_win_set_thisproc_membind;
- hooks->get_thisproc_membind = hwloc_win_get_thisproc_membind;
- hooks->set_thisthread_membind = hwloc_win_set_thisthread_membind;
-
- if (!hwloc_win_get_VirtualAllocExNumaProc()) {
+ if (GetCurrentProcessorNumberExProc || (GetCurrentProcessorNumberProc && nr_processor_groups == 1))
+ hooks->get_thisthread_last_cpu_location = hwloc_win_get_thisthread_last_cpu_location;
+
+ if (nr_processor_groups == 1) {
+ hooks->set_proc_cpubind = hwloc_win_set_proc_cpubind;
+ hooks->get_proc_cpubind = hwloc_win_get_proc_cpubind;
+ hooks->set_thisproc_cpubind = hwloc_win_set_thisproc_cpubind;
+ hooks->get_thisproc_cpubind = hwloc_win_get_thisproc_cpubind;
+ hooks->set_proc_membind = hwloc_win_set_proc_membind;
+ hooks->get_proc_membind = hwloc_win_get_proc_membind;
+ hooks->set_thisproc_membind = hwloc_win_set_thisproc_membind;
+ hooks->get_thisproc_membind = hwloc_win_get_thisproc_membind;
+ }
+ if (nr_processor_groups == 1 || SetThreadGroupAffinityProc) {
+ hooks->set_thread_cpubind = hwloc_win_set_thread_cpubind;
+ hooks->set_thisthread_cpubind = hwloc_win_set_thisthread_cpubind;
+ hooks->set_thisthread_membind = hwloc_win_set_thisthread_membind;
+ }
+ if (GetThreadGroupAffinityProc) {
+ hooks->get_thread_cpubind = hwloc_win_get_thread_cpubind;
+ hooks->get_thisthread_cpubind = hwloc_win_get_thisthread_cpubind;
+ hooks->get_thisthread_membind = hwloc_win_get_thisthread_membind;
+ }
+
+ if (VirtualAllocExNumaProc) {
hooks->alloc_membind = hwloc_win_alloc_membind;
hooks->alloc = hwloc_win_alloc;
hooks->free_membind = hwloc_win_free_membind;
support->membind->bind_membind = 1;
}
- if (!hwloc_win_get_QueryWorkingSetExProc())
+ if (QueryWorkingSetExProc)
hooks->get_area_membind = hwloc_win_get_area_membind;
}
+static int hwloc_windows_component_init(unsigned long flags __hwloc_attribute_unused)
+{
+ hwloc_win_get_function_ptrs();
+ return 0;
+}
+
+static void hwloc_windows_component_finalize(unsigned long flags __hwloc_attribute_unused)
+{
+}
+
static struct hwloc_backend *
hwloc_windows_component_instantiate(struct hwloc_disc_component *component,
const void *_data1 __hwloc_attribute_unused,
@@ -805,8 +1108,33 @@ static struct hwloc_disc_component hwloc_windows_disc_component = {
const struct hwloc_component hwloc_windows_component = {
HWLOC_COMPONENT_ABI,
- NULL, NULL,
+ hwloc_windows_component_init, hwloc_windows_component_finalize,
HWLOC_COMPONENT_TYPE_DISC,
0,
&hwloc_windows_disc_component
};
+
+unsigned
+hwloc_fallback_nbprocessors(struct hwloc_topology *topology) {
+ int n;
+ SYSTEM_INFO sysinfo;
+
+ /* by default, ignore groups (return only the number in the current group) */
+ GetSystemInfo(&sysinfo);
+ n = sysinfo.dwNumberOfProcessors; /* FIXME could be non-contigous, rather return a mask from dwActiveProcessorMask? */
+
+ if (nr_processor_groups > 1) {
+ /* assume n-1 groups are complete, since that's how we store things in cpusets */
+ if (GetActiveProcessorCountProc)
+ n = MAXIMUM_PROC_PER_GROUP*(nr_processor_groups-1)
+ + GetActiveProcessorCountProc((WORD)nr_processor_groups-1);
+ else
+ n = MAXIMUM_PROC_PER_GROUP*nr_processor_groups;
+ }
+
+ if (n >= 1)
+ topology->support.discovery->pu = 1;
+ else
+ n = 1;
+ return n;
+}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
index db91a5e..4226210 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2010-2015 Inria. All rights reserved.
+ * Copyright © 2010-2016 Inria. All rights reserved.
* Copyright © 2010-2013 Université Bordeaux
* Copyright © 2010-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -22,10 +22,15 @@
#include <private/cpuid-x86.h>
+#ifdef HAVE_VALGRIND_VALGRIND_H
+#include <valgrind/valgrind.h>
+#endif
+
struct hwloc_x86_backend_data_s {
unsigned nbprocs;
hwloc_bitmap_t apicid_set;
int apicid_unique;
+ int is_knl;
};
#define has_topoext(features) ((features)[6] & (1 << 22))
@@ -35,9 +40,11 @@ struct cacheinfo {
unsigned type;
unsigned level;
unsigned nbthreads_sharing;
+ unsigned cacheid;
unsigned linesize;
unsigned linepart;
+ int inclusive;
int ways;
unsigned sets;
unsigned long size;
@@ -74,7 +81,7 @@ enum cpuid_type {
static void fill_amd_cache(struct procinfo *infos, unsigned level, int type, unsigned cpuid)
{
- struct cacheinfo *cache;
+ struct cacheinfo *cache, *tmpcaches;
unsigned cachenum;
unsigned long size = 0;
@@ -87,8 +94,13 @@ static void fill_amd_cache(struct procinfo *infos, unsigned level, int type, uns
if (!size)
return;
+ tmpcaches = realloc(infos->cache, (infos->numcaches+1)*sizeof(*infos->cache));
+ if (!tmpcaches)
+ /* failed to allocated, ignore that cache */
+ return;
+ infos->cache = tmpcaches;
cachenum = infos->numcaches++;
- infos->cache = realloc(infos->cache, infos->numcaches*sizeof(*infos->cache));
+
cache = &infos->cache[cachenum];
cache->type = type;
@@ -99,6 +111,8 @@ static void fill_amd_cache(struct procinfo *infos, unsigned level, int type, uns
cache->nbthreads_sharing = infos->max_log_proc;
cache->linesize = cpuid & 0xff;
cache->linepart = 0;
+ cache->inclusive = 0; /* old AMD (K8-K10) supposed to have exclusive caches */
+
if (level == 1) {
cache->ways = (cpuid >> 16) & 0xff;
if (cache->ways == 0xff)
@@ -169,6 +183,9 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
}
infos->cpustepping = eax & 0xf;
+ if (cpuid_type == intel && infos->cpufamilynumber == 0x6 && infos->cpumodelnumber == 0x57)
+ data->is_knl = 1;
+
/* Get cpu vendor string from cpuid 0x00 */
memset(regs, 0, sizeof(regs));
regs[0] = 0;
@@ -283,6 +300,7 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
cache->ways = ways;
cache->sets = sets = ecx + 1;
cache->size = linesize * linepart * ways * sets;
+ cache->inclusive = edx & 0x2;
hwloc_debug("cache %u type %u L%u t%u c%u linesize %lu linepart %lu ways %lu sets %lu, size %uKB\n", cachenum, cache->type, cache->level, cache->nbthreads_sharing, infos->max_nbcores, linesize, linepart, ways, sets, cache->size >> 10);
@@ -310,9 +328,6 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
fill_amd_cache(infos, 2, 3, ecx); /* L2u */
if (edx & 0xf000)
fill_amd_cache(infos, 3, 3, edx); /* L3u */
- /* FIXME: AMD MagnyCours family 0x10 model 0x9 with 8 cores or more actually
- * have the L3 split in two halves, and associativity is divided as well (48)
- */
}
}
@@ -320,6 +335,7 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
* (not supported on AMD)
*/
if (cpuid_type != amd && highest_cpuid >= 0x04) {
+ unsigned level;
for (cachenum = 0; ; cachenum++) {
unsigned type;
eax = 0x04;
@@ -332,6 +348,10 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
if (type == 0)
break;
+ level = (eax >> 5) & 0x7;
+ if (data->is_knl && level == 3)
+ /* KNL reports wrong L3 information (size always 0, cpuset always the entire machine, ignore it */
+ break;
infos->numcaches++;
if (!cachenum) {
@@ -358,9 +378,13 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
if (type == 0)
break;
+ level = (eax >> 5) & 0x7;
+ if (data->is_knl && level == 3)
+ /* KNL reports wrong L3 information (size always 0, cpuset always the entire machine, ignore it */
+ break;
cache->type = type;
- cache->level = (eax >> 5) & 0x7;
+ cache->level = level;
cache->nbthreads_sharing = ((eax >> 14) & 0xfff) + 1;
cache->linesize = linesize = (ebx & 0xfff) + 1;
@@ -373,6 +397,7 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
cache->ways = ways;
cache->sets = sets = ecx + 1;
cache->size = linesize * linepart * ways * sets;
+ cache->inclusive = edx & 0x2;
hwloc_debug("cache %u type %u L%u t%u c%u linesize %lu linepart %lu ways %lu sets %lu, size %uKB\n", cachenum, cache->type, cache->level, cache->nbthreads_sharing, infos->max_nbcores, linesize, linepart, ways, sets, cache->size >> 10);
@@ -383,7 +408,7 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
/* Get package/core/thread information from cpuid 0x0b
* (Intel x2APIC)
*/
- if (cpuid_type == intel && has_x2apic(features)) {
+ if (cpuid_type == intel && highest_cpuid >= 0x0b && has_x2apic(features)) {
unsigned level, apic_nextshift, apic_number, apic_type, apic_id = 0, apic_shift = 0, id;
for (level = 0; ; level++) {
ecx = level;
@@ -430,6 +455,48 @@ static void look_proc(struct hwloc_backend *backend, struct procinfo *infos, uns
}
}
+ /* Now that we have all info, compute cacheids and apply quirks */
+ for (cachenum = 0; cachenum < infos->numcaches; cachenum++) {
+ struct cacheinfo *cache = &infos->cache[cachenum];
+
+ /* default cacheid value */
+ cache->cacheid = infos->apicid / cache->nbthreads_sharing;
+
+ /* AMD quirk */
+ if (cpuid_type == amd
+ && infos->cpufamilynumber== 0x10 && infos->cpumodelnumber == 0x9
+ && cache->level == 3
+ && (cache->ways == -1 || (cache->ways % 2 == 0)) && cache->nbthreads_sharing >= 8) {
+ /* Fix AMD family 0x10 model 0x9 (Magny-Cours) with 8 or 12 cores.
+ * The L3 (and its associativity) is actually split into two halves).
+ */
+ if (cache->nbthreads_sharing == 16)
+ cache->nbthreads_sharing = 12; /* nbthreads_sharing is a power of 2 but the processor actually has 8 or 12 cores */
+ cache->nbthreads_sharing /= 2;
+ cache->size /= 2;
+ if (cache->ways != -1)
+ cache->ways /= 2;
+ /* AMD Magny-Cours 12-cores processor reserve APIC ids as AAAAAABBBBBB....
+ * among first L3 (A), second L3 (B), and unexisting cores (.).
+ * On multi-socket servers, L3 in non-first sockets may have APIC id ranges
+ * such as [16-21] that are not aligned on multiple of nbthreads_sharing (6).
+ * That means, we can't just compare apicid/nbthreads_sharing to identify siblings.
+ */
+ cache->cacheid = (infos->apicid % infos->max_log_proc) / cache->nbthreads_sharing /* cacheid within the package */
+ + 2 * (infos->apicid / infos->max_log_proc); /* add 2 caches per previous package */
+
+ } else if (cpuid_type == amd
+ && infos->cpufamilynumber == 0x15
+ && (infos->cpumodelnumber == 0x1 /* Bulldozer */ || infos->cpumodelnumber == 0x2 /* Piledriver */)
+ && cache->level == 3 && cache->nbthreads_sharing == 6) {
+ /* AMD Bulldozer and Piledriver 12-core processors have same APIC ids as Magny-Cours above,
+ * but we can't merge the checks because the original nbthreads_sharing must be exactly 6 here.
+ */
+ cache->cacheid = (infos->apicid % infos->max_log_proc) / cache->nbthreads_sharing /* cacheid within the package */
+ + 2 * (infos->apicid / infos->max_log_proc); /* add 2 cache per previous package */
+ }
+ }
+
if (hwloc_bitmap_isset(data->apicid_set, infos->apicid))
data->apicid_unique = 0;
else
@@ -456,7 +523,7 @@ hwloc_x86_add_cpuinfos(hwloc_obj_t obj, struct procinfo *info, int nodup)
}
/* Analyse information stored in infos, and build/annotate topology levels accordingly */
-static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int fulldiscovery)
+static int summarize(struct hwloc_backend *backend, struct procinfo *infos, int fulldiscovery)
{
struct hwloc_topology *topology = backend->topology;
struct hwloc_x86_backend_data_s *data = backend->private_data;
@@ -466,6 +533,8 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
unsigned nbpackages = 0;
int one = -1;
unsigned next_group_depth = topology->next_group_depth;
+ int caches_added = 0;
+ hwloc_bitmap_t remaining_cpuset;
for (i = 0; i < nbprocs; i++)
if (infos[i].present) {
@@ -475,9 +544,11 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
if (one == -1) {
hwloc_bitmap_free(complete_cpuset);
- return;
+ return 0;
}
+ remaining_cpuset = hwloc_bitmap_alloc();
+
/* Ideally, when fulldiscovery=0, we could add any object that doesn't exist yet.
* But what if the x86 and the native backends disagree because one is buggy? Which one to trust?
* Only annotate existing objects for now.
@@ -485,18 +556,18 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
/* Look for packages */
if (fulldiscovery) {
- hwloc_bitmap_t packages_cpuset = hwloc_bitmap_dup(complete_cpuset);
hwloc_bitmap_t package_cpuset;
hwloc_obj_t package;
- while ((i = hwloc_bitmap_first(packages_cpuset)) != (unsigned) -1) {
+ hwloc_bitmap_copy(remaining_cpuset, complete_cpuset);
+ while ((i = hwloc_bitmap_first(remaining_cpuset)) != (unsigned) -1) {
unsigned packageid = infos[i].packageid;
package_cpuset = hwloc_bitmap_alloc();
for (j = i; j < nbprocs; j++) {
if (infos[j].packageid == packageid) {
hwloc_bitmap_set(package_cpuset, j);
- hwloc_bitmap_clr(packages_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
}
}
package = hwloc_alloc_setup_object(HWLOC_OBJ_PACKAGE, packageid);
@@ -509,7 +580,6 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
hwloc_insert_object_by_cpuset(topology, package);
nbpackages++;
}
- hwloc_bitmap_free(packages_cpuset);
} else {
/* Annotate packages previously-existing packages */
@@ -555,29 +625,29 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
/* Look for Numa nodes inside packages */
if (fulldiscovery) {
- hwloc_bitmap_t nodes_cpuset = hwloc_bitmap_dup(complete_cpuset);
hwloc_bitmap_t node_cpuset;
hwloc_obj_t node;
- while ((i = hwloc_bitmap_first(nodes_cpuset)) != (unsigned) -1) {
+ hwloc_bitmap_copy(remaining_cpuset, complete_cpuset);
+ while ((i = hwloc_bitmap_first(remaining_cpuset)) != (unsigned) -1) {
unsigned packageid = infos[i].packageid;
unsigned nodeid = infos[i].nodeid;
if (nodeid == (unsigned)-1) {
- hwloc_bitmap_clr(nodes_cpuset, i);
+ hwloc_bitmap_clr(remaining_cpuset, i);
continue;
}
node_cpuset = hwloc_bitmap_alloc();
for (j = i; j < nbprocs; j++) {
if (infos[j].nodeid == (unsigned) -1) {
- hwloc_bitmap_clr(nodes_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
continue;
}
if (infos[j].packageid == packageid && infos[j].nodeid == nodeid) {
hwloc_bitmap_set(node_cpuset, j);
- hwloc_bitmap_clr(nodes_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
}
}
node = hwloc_alloc_setup_object(HWLOC_OBJ_NUMANODE, nodeid);
@@ -588,61 +658,60 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
nodeid, node_cpuset);
hwloc_insert_object_by_cpuset(topology, node);
}
- hwloc_bitmap_free(nodes_cpuset);
}
/* Look for Compute units inside packages */
if (fulldiscovery) {
- hwloc_bitmap_t units_cpuset = hwloc_bitmap_dup(complete_cpuset);
hwloc_bitmap_t unit_cpuset;
hwloc_obj_t unit;
- while ((i = hwloc_bitmap_first(units_cpuset)) != (unsigned) -1) {
+ hwloc_bitmap_copy(remaining_cpuset, complete_cpuset);
+ while ((i = hwloc_bitmap_first(remaining_cpuset)) != (unsigned) -1) {
unsigned packageid = infos[i].packageid;
unsigned unitid = infos[i].unitid;
if (unitid == (unsigned)-1) {
- hwloc_bitmap_clr(units_cpuset, i);
+ hwloc_bitmap_clr(remaining_cpuset, i);
continue;
}
unit_cpuset = hwloc_bitmap_alloc();
for (j = i; j < nbprocs; j++) {
if (infos[j].unitid == (unsigned) -1) {
- hwloc_bitmap_clr(units_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
continue;
}
if (infos[j].packageid == packageid && infos[j].unitid == unitid) {
hwloc_bitmap_set(unit_cpuset, j);
- hwloc_bitmap_clr(units_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
}
}
unit = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, unitid);
unit->cpuset = unit_cpuset;
+ hwloc_obj_add_info(unit, "Type", "ComputeUnit");
hwloc_debug_1arg_bitmap("os unit %u has cpuset %s\n",
unitid, unit_cpuset);
hwloc_insert_object_by_cpuset(topology, unit);
}
- hwloc_bitmap_free(units_cpuset);
}
/* Look for unknown objects */
if (infos[one].otherids) {
for (level = infos[one].levels-1; level <= infos[one].levels-1; level--) {
if (infos[one].otherids[level] != UINT_MAX) {
- hwloc_bitmap_t unknowns_cpuset = hwloc_bitmap_dup(complete_cpuset);
hwloc_bitmap_t unknown_cpuset;
hwloc_obj_t unknown_obj;
- while ((i = hwloc_bitmap_first(unknowns_cpuset)) != (unsigned) -1) {
+ hwloc_bitmap_copy(remaining_cpuset, complete_cpuset);
+ while ((i = hwloc_bitmap_first(remaining_cpuset)) != (unsigned) -1) {
unsigned unknownid = infos[i].otherids[level];
unknown_cpuset = hwloc_bitmap_alloc();
for (j = i; j < nbprocs; j++) {
if (infos[j].otherids[level] == unknownid) {
hwloc_bitmap_set(unknown_cpuset, j);
- hwloc_bitmap_clr(unknowns_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
}
}
unknown_obj = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, unknownid);
@@ -655,36 +724,35 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
level, unknownid, unknown_cpuset);
hwloc_insert_object_by_cpuset(topology, unknown_obj);
}
- hwloc_bitmap_free(unknowns_cpuset);
}
}
}
/* Look for cores */
if (fulldiscovery) {
- hwloc_bitmap_t cores_cpuset = hwloc_bitmap_dup(complete_cpuset);
hwloc_bitmap_t core_cpuset;
hwloc_obj_t core;
- while ((i = hwloc_bitmap_first(cores_cpuset)) != (unsigned) -1) {
+ hwloc_bitmap_copy(remaining_cpuset, complete_cpuset);
+ while ((i = hwloc_bitmap_first(remaining_cpuset)) != (unsigned) -1) {
unsigned packageid = infos[i].packageid;
unsigned coreid = infos[i].coreid;
if (coreid == (unsigned) -1) {
- hwloc_bitmap_clr(cores_cpuset, i);
+ hwloc_bitmap_clr(remaining_cpuset, i);
continue;
}
core_cpuset = hwloc_bitmap_alloc();
for (j = i; j < nbprocs; j++) {
if (infos[j].coreid == (unsigned) -1) {
- hwloc_bitmap_clr(cores_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
continue;
}
if (infos[j].packageid == packageid && infos[j].coreid == coreid) {
hwloc_bitmap_set(core_cpuset, j);
- hwloc_bitmap_clr(cores_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
}
}
core = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, coreid);
@@ -693,7 +761,20 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
coreid, core_cpuset);
hwloc_insert_object_by_cpuset(topology, core);
}
- hwloc_bitmap_free(cores_cpuset);
+ }
+
+ /* Look for PUs */
+ if (fulldiscovery) {
+ unsigned i;
+ hwloc_debug("%s", "\n\n * CPU cpusets *\n\n");
+ for (i=0; i<nbprocs; i++)
+ if(infos[i].present) { /* Only add present PU. We don't know if others actually exist */
+ struct hwloc_obj *obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, i);
+ obj->cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_only(obj->cpuset, i);
+ hwloc_debug_1arg_bitmap("PU %u has cpuset %s\n", i, obj->cpuset);
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
}
/* Look for caches */
@@ -703,18 +784,16 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
for (j = 0; j < infos[i].numcaches; j++)
if (infos[i].cache[j].level > level)
level = infos[i].cache[j].level;
-
- /* Look for known types */
- if (fulldiscovery) while (level > 0) {
+ while (level > 0) {
for (type = 1; type <= 3; type++) {
/* Look for caches of that type at level level */
{
- hwloc_bitmap_t caches_cpuset = hwloc_bitmap_dup(complete_cpuset);
- hwloc_bitmap_t cache_cpuset;
hwloc_obj_t cache;
- while ((i = hwloc_bitmap_first(caches_cpuset)) != (unsigned) -1) {
- unsigned packageid = infos[i].packageid;
+ hwloc_bitmap_copy(remaining_cpuset, complete_cpuset);
+ while ((i = hwloc_bitmap_first(remaining_cpuset)) != (unsigned) -1) {
+ hwloc_bitmap_t puset;
+ int depth;
for (l = 0; l < infos[i].numcaches; l++) {
if (infos[i].cache[l].level == level && infos[i].cache[l].type == type)
@@ -722,14 +801,31 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
}
if (l == infos[i].numcaches) {
/* no cache Llevel of that type in i */
- hwloc_bitmap_clr(caches_cpuset, i);
+ hwloc_bitmap_clr(remaining_cpuset, i);
continue;
}
- /* Found a matching cache, now look for others sharing it */
- {
- unsigned cacheid = infos[i].apicid / infos[i].cache[l].nbthreads_sharing;
-
+ puset = hwloc_bitmap_alloc();
+ hwloc_bitmap_set(puset, i);
+ depth = hwloc_get_cache_type_depth(topology, level,
+ type == 1 ? HWLOC_OBJ_CACHE_DATA : type == 2 ? HWLOC_OBJ_CACHE_INSTRUCTION : HWLOC_OBJ_CACHE_UNIFIED);
+ if (depth != HWLOC_TYPE_DEPTH_UNKNOWN)
+ cache = hwloc_get_next_obj_covering_cpuset_by_depth(topology, puset, depth, NULL);
+ else
+ cache = NULL;
+ hwloc_bitmap_free(puset);
+
+ if (cache) {
+ /* Found cache above that PU, annotate if no such attribute yet */
+ if (!hwloc_obj_get_info_by_name(cache, "Inclusive"))
+ hwloc_obj_add_info(cache, "Inclusive", infos[i].cache[l].inclusive ? "1" : "0");
+ hwloc_bitmap_andnot(remaining_cpuset, remaining_cpuset, cache->cpuset);
+ } else {
+ /* Add the missing cache */
+ hwloc_bitmap_t cache_cpuset;
+ unsigned packageid = infos[i].packageid;
+ unsigned cacheid = infos[i].cache[l].cacheid;
+ /* Now look for others sharing it */
cache_cpuset = hwloc_bitmap_alloc();
for (j = i; j < nbprocs; j++) {
unsigned l2;
@@ -739,12 +835,12 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
}
if (l2 == infos[j].numcaches) {
/* no cache Llevel of that type in j */
- hwloc_bitmap_clr(caches_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
continue;
}
- if (infos[j].packageid == packageid && infos[j].apicid / infos[j].cache[l2].nbthreads_sharing == cacheid) {
+ if (infos[j].packageid == packageid && infos[j].cache[l2].cacheid == cacheid) {
hwloc_bitmap_set(cache_cpuset, j);
- hwloc_bitmap_clr(caches_cpuset, j);
+ hwloc_bitmap_clr(remaining_cpuset, j);
}
}
cache = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, cacheid);
@@ -764,25 +860,23 @@ static void summarize(struct hwloc_backend *backend, struct procinfo *infos, int
break;
}
cache->cpuset = cache_cpuset;
+ hwloc_obj_add_info(cache, "Inclusive", infos[i].cache[l].inclusive ? "1" : "0");
hwloc_debug_2args_bitmap("os L%u cache %u has cpuset %s\n",
level, cacheid, cache_cpuset);
hwloc_insert_object_by_cpuset(topology, cache);
+ caches_added++;
}
}
- hwloc_bitmap_free(caches_cpuset);
}
}
level--;
}
- for (i = 0; i < nbprocs; i++) {
- free(infos[i].cache);
- if (infos[i].otherids)
- free(infos[i].otherids);
- }
-
+ hwloc_bitmap_free(remaining_cpuset);
hwloc_bitmap_free(complete_cpuset);
topology->next_group_depth = next_group_depth;
+
+ return fulldiscovery || caches_added;
}
static int
@@ -797,6 +891,7 @@ look_procs(struct hwloc_backend *backend, struct procinfo *infos, int fulldiscov
hwloc_bitmap_t orig_cpuset = hwloc_bitmap_alloc();
hwloc_bitmap_t set;
unsigned i;
+ int ret = 0;
if (get_cpubind(topology, orig_cpuset, HWLOC_CPUBIND_STRICT)) {
hwloc_bitmap_free(orig_cpuset);
@@ -821,8 +916,9 @@ look_procs(struct hwloc_backend *backend, struct procinfo *infos, int fulldiscov
if (!data->apicid_unique)
fulldiscovery = 0;
- summarize(backend, infos, fulldiscovery);
- return fulldiscovery; /* success, but objects added only if fulldiscovery */
+ else
+ ret = summarize(backend, infos, fulldiscovery);
+ return ret;
}
#if defined HWLOC_FREEBSD_SYS && defined HAVE_CPUSET_SETID
@@ -894,12 +990,12 @@ int hwloc_look_x86(struct hwloc_backend *backend, int fulldiscovery)
memset(&hooks, 0, sizeof(hooks));
support.membind = &memsupport;
hwloc_set_native_binding_hooks(&hooks, &support);
- if (hooks.get_thisproc_cpubind && hooks.set_thisproc_cpubind) {
- get_cpubind = hooks.get_thisproc_cpubind;
- set_cpubind = hooks.set_thisproc_cpubind;
- } else if (hooks.get_thisthread_cpubind && hooks.set_thisthread_cpubind) {
+ if (hooks.get_thisthread_cpubind && hooks.set_thisthread_cpubind) {
get_cpubind = hooks.get_thisthread_cpubind;
set_cpubind = hooks.set_thisthread_cpubind;
+ } else if (hooks.get_thisproc_cpubind && hooks.set_thisproc_cpubind) {
+ get_cpubind = hooks.get_thisproc_cpubind;
+ set_cpubind = hooks.set_thisproc_cpubind;
} else {
/* we need binding support if there are multiple PUs */
if (nbprocs > 1)
@@ -948,6 +1044,7 @@ int hwloc_look_x86(struct hwloc_backend *backend, int fulldiscovery)
if (highest_cpuid >= 0x7) {
eax = 0x7;
+ ecx = 0;
hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
features[9] = ebx;
}
@@ -971,8 +1068,7 @@ int hwloc_look_x86(struct hwloc_backend *backend, int fulldiscovery)
if (nbprocs == 1) {
/* only one processor, no need to bind */
look_proc(backend, &infos[0], highest_cpuid, highest_ext_cpuid, features, cpuid_type);
- summarize(backend, infos, fulldiscovery);
- ret = fulldiscovery;
+ ret = summarize(backend, infos, fulldiscovery);
}
out_with_os_state:
@@ -980,7 +1076,12 @@ out_with_os_state:
out_with_infos:
if (NULL != infos) {
- free(infos);
+ for (i = 0; i < nbprocs; i++) {
+ free(infos[i].cache);
+ if (infos[i].otherids)
+ free(infos[i].otherids);
+ }
+ free(infos);
}
out:
@@ -995,6 +1096,13 @@ hwloc_x86_discover(struct hwloc_backend *backend)
int alreadypus = 0;
int ret;
+#if HAVE_DECL_RUNNING_ON_VALGRIND
+ if (RUNNING_ON_VALGRIND) {
+ fprintf(stderr, "hwloc x86 backend cannot work under Valgrind, disabling.\n");
+ return 0;
+ }
+#endif
+
data->nbprocs = hwloc_fallback_nbprocessors(topology);
if (!topology->is_thissystem) {
@@ -1010,22 +1118,22 @@ hwloc_x86_discover(struct hwloc_backend *backend)
goto fulldiscovery;
}
- /* several object types were added, we can't easily complete, just annotate a bit */
+ /* several object types were added, we can't easily complete, just do partial discovery */
ret = hwloc_look_x86(backend, 0);
if (ret)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "x86");
- return 0;
+ return ret;
} else {
/* topology is empty, initialize it */
hwloc_alloc_obj_cpusets(topology->levels[0][0]);
}
fulldiscovery:
- hwloc_look_x86(backend, 1);
- /* if failed, just continue and create PUs */
-
- if (!alreadypus)
- hwloc_setup_pu_level(topology, data->nbprocs);
+ if (hwloc_look_x86(backend, 1) < 0) {
+ /* if failed, create PUs */
+ if (!alreadypus)
+ hwloc_setup_pu_level(topology, data->nbprocs);
+ }
hwloc_obj_add_info(topology->levels[0][0], "Backend", "x86");
@@ -1075,6 +1183,7 @@ hwloc_x86_component_instantiate(struct hwloc_disc_component *component,
backend->disable = hwloc_x86_backend_disable;
/* default values */
+ data->is_knl = 0;
data->apicid_set = hwloc_bitmap_alloc();
data->apicid_unique = 1;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c
index ce3250c..ac20d87 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -13,6 +13,7 @@
/* private headers allowed because this plugin is built within hwloc */
#include <private/xml.h>
#include <private/debug.h>
+#include <private/misc.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
@@ -130,10 +131,12 @@ hwloc__libxml_import_get_content(hwloc__xml_import_state_t state,
size_t length;
child = lstate->node->children;
- if (!child)
- return 0;
- if (child->type != XML_TEXT_NODE)
+ if (!child || child->type != XML_TEXT_NODE) {
+ if (expected_length)
+ return -1;
+ *beginp = "";
return 0;
+ }
length = strlen((char *) child->content);
if (length != expected_length)
@@ -257,7 +260,8 @@ hwloc_libxml_import_diff(struct hwloc__xml_import_state_s *state, const char *xm
if (state->global->next_attr(state, &attrname, &attrvalue) < 0)
break;
if (!strcmp(attrname, "refname")) {
- free(refname);
+ if (refname)
+ free(refname);
refname = strdup(attrvalue);
} else
goto out_with_doc;
@@ -266,13 +270,15 @@ hwloc_libxml_import_diff(struct hwloc__xml_import_state_s *state, const char *xm
ret = hwloc__xml_import_diff(state, firstdiffp);
if (refnamep && !ret)
*refnamep = refname;
- else
+ else if (refname)
free(refname);
xmlFreeDoc(doc);
return ret;
out_with_doc:
+ if (refname)
+ free(refname);
xmlFreeDoc(doc);
out:
return -1; /* failed */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c
index a93d9d4..c664772 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -10,6 +10,7 @@
#include <hwloc.h>
#include <hwloc/plugins.h>
#include <private/private.h>
+#include <private/misc.h>
#include <private/xml.h>
#include <private/debug.h>
@@ -48,7 +49,7 @@ static int
hwloc__nolibxml_import_next_attr(hwloc__xml_import_state_t state, char **namep, char **valuep)
{
hwloc__nolibxml_import_state_data_t nstate = (void*) state->data;
- int namelen;
+ size_t namelen;
size_t len, escaped;
char *buffer, *value, *end;
@@ -116,7 +117,7 @@ hwloc__nolibxml_import_find_child(hwloc__xml_import_state_t state,
hwloc__nolibxml_import_state_data_t nchildstate = (void*) childstate->data;
char *buffer = nstate->tagbuffer;
char *end;
- int namelen;
+ size_t namelen;
childstate->parent = state;
childstate->global = state->global;
@@ -218,8 +219,12 @@ hwloc__nolibxml_import_get_content(hwloc__xml_import_state_t state,
char *end;
/* auto-closed tags have no content */
- if (nstate->closed)
+ if (nstate->closed) {
+ if (expected_length)
+ return -1;
+ *beginp = "";
return 0;
+ }
/* find the next tag, where the content ends */
end = strchr(buffer, '<');
@@ -240,7 +245,8 @@ hwloc__nolibxml_import_close_content(hwloc__xml_import_state_t state)
{
/* put back the '<' that we overwrote to 0-terminate the content */
hwloc__nolibxml_import_state_data_t nstate = (void*) state->data;
- *nstate->tagbuffer = '<';
+ if (!nstate->closed)
+ *nstate->tagbuffer = '<';
}
static int
@@ -313,7 +319,7 @@ hwloc_nolibxml_read_file(const char *xmlpath, char **bufferp, size_t *buflenp)
FILE * file;
size_t buflen, offset, readlen;
struct stat statbuf;
- char *buffer;
+ char *buffer, *tmp;
size_t ret;
if (!strcmp(xmlpath, "-"))
@@ -344,9 +350,10 @@ hwloc_nolibxml_read_file(const char *xmlpath, char **bufferp, size_t *buflenp)
break;
buflen *= 2;
- buffer = realloc(buffer, buflen+1);
- if (!buffer)
- goto out_with_file;
+ tmp = realloc(buffer, buflen+1);
+ if (!tmp)
+ goto out_with_buffer;
+ buffer = tmp;
readlen = buflen/2;
}
@@ -355,6 +362,8 @@ hwloc_nolibxml_read_file(const char *xmlpath, char **bufferp, size_t *buflenp)
*buflenp = offset+1;
return 0;
+ out_with_buffer:
+ free(buffer);
out_with_file:
fclose(file);
out:
@@ -502,7 +511,7 @@ hwloc__nolibxml_export_update_buffer(hwloc__nolibxml_export_state_data_t ndata,
if (res >= 0) {
ndata->written += res;
if (res >= (int) ndata->remaining)
- res = ndata->remaining>0 ? ndata->remaining-1 : 0;
+ res = ndata->remaining>0 ? (int)ndata->remaining-1 : 0;
ndata->buffer += res;
ndata->remaining -= res;
}
@@ -511,7 +520,7 @@ hwloc__nolibxml_export_update_buffer(hwloc__nolibxml_export_state_data_t ndata,
static char *
hwloc__nolibxml_export_escape_string(const char *src)
{
- int fulllen, sublen;
+ size_t fulllen, sublen;
char *escaped, *dst;
fulllen = strlen(src);
@@ -675,15 +684,22 @@ hwloc_nolibxml_export_buffer(hwloc_topology_t topology, char **bufferp, int *buf
bufferlen = 16384; /* random guess for large enough default */
buffer = malloc(bufferlen);
- res = hwloc___nolibxml_prepare_export(topology, buffer, bufferlen);
+ if (!buffer)
+ return -1;
+ res = hwloc___nolibxml_prepare_export(topology, buffer, (int)bufferlen);
if (res > bufferlen) {
- buffer = realloc(buffer, res);
- hwloc___nolibxml_prepare_export(topology, buffer, res);
+ char *tmp = realloc(buffer, res);
+ if (!tmp) {
+ free(buffer);
+ return -1;
+ }
+ buffer = tmp;
+ hwloc___nolibxml_prepare_export(topology, buffer, (int)res);
}
*bufferp = buffer;
- *buflenp = res;
+ *buflenp = (int)res;
return 0;
}
@@ -709,7 +725,7 @@ hwloc_nolibxml_export_file(hwloc_topology_t topology, const char *filename)
}
}
- ret = fwrite(buffer, 1, bufferlen-1 /* don't write the ending \0 */, file);
+ ret = (int)fwrite(buffer, 1, bufferlen-1 /* don't write the ending \0 */, file);
if (ret == bufferlen-1) {
ret = 0;
} else {
@@ -767,15 +783,22 @@ hwloc_nolibxml_export_diff_buffer(hwloc_topology_diff_t diff, const char *refnam
bufferlen = 16384; /* random guess for large enough default */
buffer = malloc(bufferlen);
- res = hwloc___nolibxml_prepare_export_diff(diff, refname, buffer, bufferlen);
+ if (!buffer)
+ return -1;
+ res = hwloc___nolibxml_prepare_export_diff(diff, refname, buffer, (int)bufferlen);
if (res > bufferlen) {
- buffer = realloc(buffer, res);
- hwloc___nolibxml_prepare_export_diff(diff, refname, buffer, res);
+ char *tmp = realloc(buffer, res);
+ if (!tmp) {
+ free(buffer);
+ return -1;
+ }
+ buffer = tmp;
+ hwloc___nolibxml_prepare_export_diff(diff, refname, buffer, (int)res);
}
*bufferp = buffer;
- *buflenp = res;
+ *buflenp = (int)res;
return 0;
}
@@ -801,7 +824,7 @@ hwloc_nolibxml_export_diff_file(hwloc_topology_diff_t diff, const char *refname,
}
}
- ret = fwrite(buffer, 1, bufferlen-1 /* don't write the ending \0 */, file);
+ ret = (int)fwrite(buffer, 1, bufferlen-1 /* don't write the ending \0 */, file);
if (ret == bufferlen-1) {
ret = 0;
} else {
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
index 8cf584d..f284ad4 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -55,6 +55,8 @@ hwloc_nolibxml_export(void)
return nolibxml;
}
+#define BASE64_ENCODED_LENGTH(length) (4*(((length)+2)/3))
+
/*********************************
********* XML callbacks *********
*********************************/
@@ -323,7 +325,22 @@ hwloc__xml_import_object_attr(struct hwloc_topology *topology __hwloc_attribute_
}
}
-
+ /**************************
+ * forward compat with 2.0
+ */
+ else if (!strcmp(name, "kind") || !strcmp(name, "subkind")) {
+ if (obj->type == HWLOC_OBJ_GROUP) {
+ /* ignored, unused in <2.0 */
+ } else {
+ if (hwloc__xml_verbose())
+ fprintf(stderr, "%s: ignoring %s attribute for non-group object\n",
+ state->global->msgprefix, name);
+ }
+ }
+ else if (!strcmp(name, "subtype")) {
+ /* FIXME: should be "CoProcType" for osdev/coproc but we don't have that type-specific attribute yet */
+ hwloc_obj_add_info(obj, "Type", value);
+ }
/*************************
@@ -453,10 +470,14 @@ hwloc__xml_import_pagetype(hwloc_topology_t topology __hwloc_attribute_unused, h
if (size) {
int idx = obj->memory.page_types_len;
- obj->memory.page_types = realloc(obj->memory.page_types, (idx+1)*sizeof(*obj->memory.page_types));
- obj->memory.page_types_len = idx+1;
- obj->memory.page_types[idx].size = size;
- obj->memory.page_types[idx].count = count;
+ struct hwloc_obj_memory_page_type_s *tmp;
+ tmp = realloc(obj->memory.page_types, (idx+1)*sizeof(*obj->memory.page_types));
+ if (tmp) { /* if failed to allocate, ignore this page_type entry */
+ obj->memory.page_types = tmp;
+ obj->memory.page_types_len = idx+1;
+ obj->memory.page_types[idx].size = size;
+ obj->memory.page_types[idx].count = count;
+ }
}
return state->global->close_tag(state);
@@ -491,11 +512,21 @@ hwloc__xml_import_distances(struct hwloc_xml_backend_data_s *data,
float *matrix, latmax = 0;
struct hwloc_xml_imported_distances_s *distances;
+ matrix = malloc(nbobjs*nbobjs*sizeof(float));
distances = malloc(sizeof(*distances));
+ if (!matrix || !distances) {
+ if (hwloc__xml_verbose())
+ fprintf(stderr, "%s: failed to allocate distance matrix for %lu objects\n",
+ state->global->msgprefix, nbobjs);
+ free(distances);
+ free(matrix);
+ return -1;
+ }
+
distances->root = obj;
distances->distances.relative_depth = reldepth;
distances->distances.nbobjs = nbobjs;
- distances->distances.latency = matrix = malloc(nbobjs*nbobjs*sizeof(float));
+ distances->distances.latency = matrix;
distances->distances.latency_base = latbase;
for(i=0; i<nbobjs*nbobjs; i++) {
@@ -532,12 +563,23 @@ hwloc__xml_import_distances(struct hwloc_xml_backend_data_s *data,
distances->distances.latency_max = latmax;
- if (data->last_distances)
- data->last_distances->next = distances;
- else
- data->first_distances = distances;
- distances->prev = data->last_distances;
- distances->next = NULL;
+ if (nbobjs < 2) {
+ /* distances with a single object are useless, even if the XML isn't invalid */
+ assert(nbobjs == 1);
+ if (hwloc__xml_verbose())
+ fprintf(stderr, "%s: ignoring invalid distance matrix with only 1 object\n",
+ state->global->msgprefix);
+ free(matrix);
+ free(distances);
+ } else {
+ /* queue the distance */
+ if (data->last_distances)
+ data->last_distances->next = distances;
+ else
+ data->first_distances = distances;
+ distances->prev = data->last_distances;
+ distances->next = NULL;
+ }
}
return state->global->close_tag(state);
@@ -550,6 +592,7 @@ hwloc__xml_import_userdata(hwloc_topology_t topology __hwloc_attribute_unused, h
size_t length = 0;
int encoded = 0;
char *name = NULL; /* optional */
+ int ret;
while (1) {
char *attrname, *attrvalue;
@@ -565,12 +608,29 @@ hwloc__xml_import_userdata(hwloc_topology_t topology __hwloc_attribute_unused, h
return -1;
}
- if (length && topology->userdata_import_cb) {
- int ret;
+ if (!topology->userdata_import_cb) {
+ char *buffer;
+ size_t reallength = encoded ? BASE64_ENCODED_LENGTH(length) : length;
+ ret = state->global->get_content(state, &buffer, reallength);
+ if (ret < 0)
+ return -1;
- if (encoded) {
+ } else if (topology->userdata_not_decoded) {
+ char *buffer, *fakename;
+ size_t reallength = encoded ? BASE64_ENCODED_LENGTH(length) : length;
+ ret = state->global->get_content(state, &buffer, reallength);
+ if (ret < 0)
+ return -1;
+ fakename = malloc(6 + 1 + (name ? strlen(name) : 4) + 1);
+ if (!fakename)
+ return -1;
+ sprintf(fakename, encoded ? "base64%c%s" : "normal%c%s", name ? ':' : '-', name ? name : "anon");
+ topology->userdata_import_cb(topology, obj, fakename, buffer, length);
+ free(fakename);
+
+ } else if (encoded && length) {
char *encoded_buffer;
- size_t encoded_length = 4*((length+2)/3);
+ size_t encoded_length = BASE64_ENCODED_LENGTH(length);
ret = state->global->get_content(state, &encoded_buffer, encoded_length);
if (ret < 0)
return -1;
@@ -580,20 +640,25 @@ hwloc__xml_import_userdata(hwloc_topology_t topology __hwloc_attribute_unused, h
return -1;
assert(encoded_buffer[encoded_length] == 0);
ret = hwloc_decode_from_base64(encoded_buffer, decoded_buffer, length+1);
- if (ret != (int) length)
+ if (ret != (int) length) {
+ free(decoded_buffer);
return -1;
+ }
topology->userdata_import_cb(topology, obj, name, decoded_buffer, length);
free(decoded_buffer);
}
- } else {
- char *buffer;
- ret = state->global->get_content(state, &buffer, length);
- if (ret < 0)
- return -1;
+
+ } else { /* always handle length==0 in the non-encoded case */
+ char *buffer = "";
+ if (length) {
+ ret = state->global->get_content(state, &buffer, length);
+ if (ret < 0)
+ return -1;
+ }
topology->userdata_import_cb(topology, obj, name, buffer, length);
- }
- state->global->close_content(state);
}
+
+ state->global->close_content(state);
return state->global->close_tag(state);
}
@@ -612,11 +677,11 @@ hwloc__xml_import_object(hwloc_topology_t topology,
break;
if (!strcmp(attrname, "type")) {
if (hwloc_obj_type_sscanf(attrvalue, &obj->type, NULL, NULL, 0) < 0)
- goto error;
+ goto error_with_object;
} else {
/* type needed first */
if (obj->type == (hwloc_obj_type_t)-1)
- goto error;
+ goto error_with_object;
hwloc__xml_import_object_attr(topology, obj, attrname, attrvalue, state);
}
}
@@ -714,8 +779,11 @@ hwloc__xml_import_object(hwloc_topology_t topology,
return state->global->close_tag(state);
+ error_with_object:
+ if (parent)
+ /* root->parent is NULL, and root is already inserted. the caller will cleanup that root. */
+ hwloc_free_unlinked_object(obj);
error:
- hwloc_free_unlinked_object(obj);
return -1;
}
@@ -869,25 +937,38 @@ hwloc__xml_import_diff(hwloc__xml_import_state_t state,
********* main XML import *********
***********************************/
+static void
+hwloc_xml__free_distances(struct hwloc_xml_backend_data_s *data)
+{
+ struct hwloc_xml_imported_distances_s *xmldist;
+ while ((xmldist = data->first_distances) != NULL) {
+ data->first_distances = xmldist->next;
+ free(xmldist->distances.latency);
+ free(xmldist);
+ }
+}
+
static int
hwloc_xml__handle_distances(struct hwloc_topology *topology,
struct hwloc_xml_backend_data_s *data,
const char *msgprefix)
{
- struct hwloc_xml_imported_distances_s *xmldist, *next = data->first_distances;
-
- if (!next)
- return 0;
+ struct hwloc_xml_imported_distances_s *xmldist;
/* connect things now because we need levels to check/build, they'll be reconnected properly later anyway */
hwloc_connect_children(topology->levels[0][0]);
- if (hwloc_connect_levels(topology) < 0)
+ if (hwloc_connect_levels(topology) < 0) {
+ hwloc_xml__free_distances(data);
return -1;
+ }
- while ((xmldist = next) != NULL) {
+ while ((xmldist = data->first_distances) != NULL) {
hwloc_obj_t root = xmldist->root;
unsigned depth = root->depth + xmldist->distances.relative_depth;
unsigned nbobjs = hwloc_get_nbobjs_inside_cpuset_by_depth(topology, root->cpuset, depth);
+
+ data->first_distances = xmldist->next;
+
if (nbobjs != xmldist->distances.nbobjs) {
/* distances invalid, drop */
if (hwloc__xml_verbose())
@@ -910,7 +991,6 @@ hwloc_xml__handle_distances(struct hwloc_topology *topology,
hwloc_distances_set(topology, objs[0]->type, nbobjs, indexes, objs, xmldist->distances.latency, 0 /* XML cannot force */);
}
- next = xmldist->next;
free(xmldist);
}
@@ -971,6 +1051,7 @@ hwloc_look_xml(struct hwloc_backend *backend)
fprintf(stderr, "%s: XML component discovery failed.\n",
data->msgprefix);
err:
+ hwloc_xml__free_distances(data);
hwloc_localeswitch_fini();
return -1;
}
@@ -998,6 +1079,7 @@ hwloc_topology_diff_load_xml(hwloc_topology_t topology __hwloc_attribute_unused,
fakedata.msgprefix = strdup(basename);
if (!hwloc_libxml_callbacks && !hwloc_nolibxml_callbacks) {
+ free(fakedata.msgprefix);
errno = ENOSYS;
return -1;
}
@@ -1040,6 +1122,7 @@ hwloc_topology_diff_load_xmlbuffer(hwloc_topology_t topology __hwloc_attribute_u
fakedata.msgprefix = strdup("xmldiffbuffer");
if (!hwloc_libxml_callbacks && !hwloc_nolibxml_callbacks) {
+ free(fakedata.msgprefix);
errno = ENOSYS;
return -1;
}
@@ -1061,6 +1144,7 @@ hwloc_topology_diff_load_xmlbuffer(hwloc_topology_t topology __hwloc_attribute_u
}
hwloc_localeswitch_fini();
+
free(fakedata.msgprefix);
return ret;
}
@@ -1510,24 +1594,52 @@ hwloc__export_obj_userdata(hwloc__xml_export_state_t parentstate, int encoded,
state.new_prop(&state, "length", tmp);
if (encoded)
state.new_prop(&state, "encoding", "base64");
- state.add_content(&state, buffer, encoded ? encoded_length : length);
+ if (encoded_length)
+ state.add_content(&state, buffer, encoded ? encoded_length : length);
state.end_object(&state, "userdata");
}
int
hwloc_export_obj_userdata(void *reserved,
- struct hwloc_topology *topology __hwloc_attribute_unused, struct hwloc_obj *obj __hwloc_attribute_unused,
+ struct hwloc_topology *topology, struct hwloc_obj *obj __hwloc_attribute_unused,
const char *name, const void *buffer, size_t length)
{
hwloc__xml_export_state_t state = reserved;
+ if (!buffer) {
+ errno = EINVAL;
+ return -1;
+ }
+
if ((name && hwloc__xml_export_check_buffer(name, strlen(name)) < 0)
|| hwloc__xml_export_check_buffer(buffer, length) < 0) {
errno = EINVAL;
return -1;
}
- hwloc__export_obj_userdata(state, 0, name, length, buffer, length);
+ if (topology->userdata_not_decoded) {
+ int encoded;
+ size_t encoded_length;
+ const char *realname;
+ if (!strncmp(name, "normal", 6)) {
+ encoded = 0;
+ encoded_length = length;
+ } else if (!strncmp(name, "base64", 6)) {
+ encoded = 1;
+ encoded_length = BASE64_ENCODED_LENGTH(length);
+ } else
+ assert(0);
+ if (name[6] == ':')
+ realname = name+7;
+ else if (!strcmp(name+6, "-anon"))
+ realname = NULL;
+ else
+ assert(0);
+ hwloc__export_obj_userdata(state, encoded, realname, length, buffer, encoded_length);
+
+ } else
+ hwloc__export_obj_userdata(state, 0, name, length, buffer, length);
+
return 0;
}
@@ -1541,12 +1653,19 @@ hwloc_export_obj_userdata_base64(void *reserved,
char *encoded_buffer;
int ret __hwloc_attribute_unused;
+ if (!buffer) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ assert(!topology->userdata_not_decoded);
+
if (name && hwloc__xml_export_check_buffer(name, strlen(name)) < 0) {
errno = EINVAL;
return -1;
}
- encoded_length = 4*((length+2)/3);
+ encoded_length = BASE64_ENCODED_LENGTH(length);
encoded_buffer = malloc(encoded_length+1);
if (!encoded_buffer) {
errno = ENOMEM;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
index 1636730..6b31b6c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -28,6 +28,7 @@
#include <hwloc.h>
#include <private/private.h>
#include <private/debug.h>
+#include <private/misc.h>
#ifdef HAVE_MACH_MACH_INIT_H
#include <mach/mach_init.h>
@@ -132,6 +133,7 @@ int hwloc_get_sysctl(int name[], unsigned namelen, int *ret)
reading sysfs on Linux, this method is not virtualizable; thus it's only
used as a fall-back method, allowing `hwloc_set_fsroot ()' to
have the desired effect. */
+#ifndef HWLOC_WIN_SYS /* The windows implementation is in topology-windows.c */
unsigned
hwloc_fallback_nbprocessors(struct hwloc_topology *topology) {
int n;
@@ -157,10 +159,6 @@ hwloc_fallback_nbprocessors(struct hwloc_topology *topology) {
static int name[2] = {CTL_HW, HW_NPCU};
if (hwloc_get_sysctl(name, sizeof(name)/sizeof(*name)), &n)
n = -1;
-#elif defined(HWLOC_WIN_SYS)
- SYSTEM_INFO sysinfo;
- GetSystemInfo(&sysinfo);
- n = sysinfo.dwNumberOfProcessors;
#else
#ifdef __GNUC__
#warning No known way to discover number of available processors on this system
@@ -174,6 +172,7 @@ hwloc_fallback_nbprocessors(struct hwloc_topology *topology) {
n = 1;
return n;
}
+#endif /* !HWLOC_WIN_SYS */
/*
* Use the given number of processors and the optional online cpuset if given
@@ -286,8 +285,13 @@ void hwloc__add_info(struct hwloc_obj_info_s **infosp, unsigned *countp, const c
#define OBJECT_INFO_ALLOC 8
/* nothing allocated initially, (re-)allocate by multiple of 8 */
unsigned alloccount = (count + 1 + (OBJECT_INFO_ALLOC-1)) & ~(OBJECT_INFO_ALLOC-1);
- if (count != alloccount)
- infos = realloc(infos, alloccount*sizeof(*infos));
+ if (count != alloccount) {
+ struct hwloc_obj_info_s *tmpinfos = realloc(infos, alloccount*sizeof(*infos));
+ if (!tmpinfos)
+ /* failed to allocate, ignore this info */
+ return;
+ infos = tmpinfos;
+ }
infos[count].name = strdup(name);
infos[count].value = value ? strdup(value) : NULL;
*infosp = infos;
@@ -316,8 +320,13 @@ void hwloc__move_infos(struct hwloc_obj_info_s **dst_infosp, unsigned *dst_count
#define OBJECT_INFO_ALLOC 8
/* nothing allocated initially, (re-)allocate by multiple of 8 */
unsigned alloccount = (dst_count + src_count + (OBJECT_INFO_ALLOC-1)) & ~(OBJECT_INFO_ALLOC-1);
- if (dst_count != alloccount)
- dst_infos = realloc(dst_infos, alloccount*sizeof(*dst_infos));
+ if (dst_count != alloccount) {
+ struct hwloc_obj_info_s *tmp_infos = realloc(dst_infos, alloccount*sizeof(*dst_infos));
+ if (!tmp_infos)
+ /* Failed to realloc, ignore the appended infos */
+ goto drop;
+ dst_infos = tmp_infos;
+ }
for(i=0; i<src_count; i++, dst_count++) {
dst_infos[dst_count].name = src_infos[i].name;
dst_infos[dst_count].value = src_infos[i].value;
@@ -327,6 +336,17 @@ void hwloc__move_infos(struct hwloc_obj_info_s **dst_infosp, unsigned *dst_count
free(src_infos);
*src_infosp = NULL;
*src_countp = 0;
+ return;
+
+ drop:
+ for(i=0; i<src_count; i++, dst_count++) {
+ free(src_infos[i].name);
+ free(src_infos[i].value);
+ }
+ free(src_infos);
+ *src_infosp = NULL;
+ *src_countp = 0;
+ /* dst_infos not modified */
}
void hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value)
@@ -351,9 +371,8 @@ void hwloc_obj_add_info_nodup(hwloc_obj_t obj, const char *name, const char *val
/* Get pointer to next childect. */ \
child = *pchild)
-/* Free an object and all its content. */
-void
-hwloc_free_unlinked_object(hwloc_obj_t obj)
+static void
+hwloc__free_object_contents(hwloc_obj_t obj)
{
switch (obj->type) {
default:
@@ -372,9 +391,34 @@ hwloc_free_unlinked_object(hwloc_obj_t obj)
hwloc_bitmap_free(obj->nodeset);
hwloc_bitmap_free(obj->complete_nodeset);
hwloc_bitmap_free(obj->allowed_nodeset);
+}
+
+/* Free an object and all its content. */
+void
+hwloc_free_unlinked_object(hwloc_obj_t obj)
+{
+ hwloc__free_object_contents(obj);
free(obj);
}
+/* Replace old with contents of new object, and make new freeable by the caller.
+ * Only updates next_sibling/first_child pointers,
+ * so may only be used during early discovery.
+ */
+static void
+hwloc_replace_linked_object(hwloc_obj_t old, hwloc_obj_t new)
+{
+ /* drop old fields */
+ hwloc__free_object_contents(old);
+ /* copy old tree pointers to new */
+ new->next_sibling = old->next_sibling;
+ new->first_child = old->first_child;
+ /* copy new contents to old now that tree pointers are OK */
+ memcpy(old, new, sizeof(*old));
+ /* clear new to that we may free it */
+ memset(new, 0,sizeof(*new));
+}
+
/* insert the (non-empty) list of sibling starting at firstnew as new children of newparent,
* and return the address of the pointer to the next one
*/
@@ -497,7 +541,7 @@ hwloc_topology_dup(hwloc_topology_t *newp,
unsigned i;
if (!old->is_loaded) {
- errno = -EINVAL;
+ errno = EINVAL;
return -1;
}
@@ -517,6 +561,7 @@ hwloc_topology_dup(hwloc_topology_t *newp,
new->userdata_export_cb = old->userdata_export_cb;
new->userdata_import_cb = old->userdata_import_cb;
+ new->userdata_not_decoded = old->userdata_not_decoded;
newroot = hwloc_get_root_obj(new);
hwloc__duplicate_object(newroot, oldroot);
@@ -570,9 +615,7 @@ hwloc_topology_dup(hwloc_topology_t *newp,
return 0;
out:
- hwloc_topology_clear(new);
- hwloc_distances_destroy(new);
- hwloc_topology_setup_defaults(new);
+ hwloc_topology_destroy(new);
return -1;
}
@@ -755,21 +798,56 @@ static int
hwloc_obj_cmp_sets(hwloc_obj_t obj1, hwloc_obj_t obj2)
{
hwloc_bitmap_t set1, set2;
+ int res = HWLOC_OBJ_DIFFERENT;
- /* compare cpusets if possible, or fallback to nodeset, or return */
- if (obj1->cpuset && !hwloc_bitmap_iszero(obj1->cpuset)
- && obj2->cpuset && !hwloc_bitmap_iszero(obj2->cpuset)) {
+ /* compare cpusets first */
+ if (obj1->complete_cpuset && obj2->complete_cpuset) {
+ set1 = obj1->complete_cpuset;
+ set2 = obj2->complete_cpuset;
+ } else {
set1 = obj1->cpuset;
set2 = obj2->cpuset;
- } else if (obj1->nodeset && !hwloc_bitmap_iszero(obj1->nodeset)
- && obj2->nodeset && !hwloc_bitmap_iszero(obj2->nodeset)) {
+ }
+ if (set1 && set2 && !hwloc_bitmap_iszero(set1) && !hwloc_bitmap_iszero(set2)) {
+ res = hwloc_bitmap_compare_inclusion(set1, set2);
+ if (res == HWLOC_OBJ_INTERSECTS)
+ return HWLOC_OBJ_INTERSECTS;
+ }
+
+ /* then compare nodesets, and combine the results */
+ if (obj1->complete_nodeset && obj2->complete_nodeset) {
+ set1 = obj1->complete_nodeset;
+ set2 = obj2->complete_nodeset;
+ } else {
set1 = obj1->nodeset;
set2 = obj2->nodeset;
- } else {
- return HWLOC_OBJ_DIFFERENT;
}
+ if (set1 && set2 && !hwloc_bitmap_iszero(set1) && !hwloc_bitmap_iszero(set2)) {
+ int noderes = hwloc_bitmap_compare_inclusion(set1, set2);
+ /* deal with conflicting cpusets/nodesets inclusions */
+ if (noderes == HWLOC_OBJ_INCLUDED) {
+ if (res == HWLOC_OBJ_CONTAINS)
+ /* contradicting order for cpusets and nodesets */
+ return HWLOC_OBJ_INTERSECTS;
+ res = HWLOC_OBJ_INCLUDED;
+
+ } else if (noderes == HWLOC_OBJ_CONTAINS) {
+ if (res == HWLOC_OBJ_INCLUDED)
+ /* contradicting order for cpusets and nodesets */
+ return HWLOC_OBJ_INTERSECTS;
+ res = HWLOC_OBJ_CONTAINS;
- return hwloc_bitmap_compare_inclusion(set1, set2);
+ } else if (noderes == HWLOC_OBJ_INTERSECTS) {
+ return HWLOC_OBJ_INTERSECTS;
+
+ } else {
+ /* nodesets are different, keep the cpuset order */
+ /* FIXME: with upcoming multiple levels of NUMA, we may have to report INCLUDED or CONTAINED here */
+
+ }
+ }
+
+ return res;
}
/* Compare object cpusets based on complete_cpuset if defined (always correctly ordered),
@@ -832,10 +910,17 @@ merge_insert_equal(hwloc_obj_t new, hwloc_obj_t old)
if (new->distances_count) {
if (old->distances_count) {
- old->distances_count += new->distances_count;
- old->distances = realloc(old->distances, old->distances_count * sizeof(*old->distances));
- memcpy(old->distances + new->distances_count, new->distances, new->distances_count * sizeof(*old->distances));
- free(new->distances);
+ struct hwloc_distances_s **tmpdists;
+ tmpdists = realloc(old->distances, (old->distances_count+new->distances_count) * sizeof(*old->distances));
+ if (!tmpdists) {
+ /* failed to realloc, ignore new distances */
+ hwloc_clear_object_distances(new);
+ } else {
+ old->distances = tmpdists;
+ old->distances_count += new->distances_count;
+ memcpy(old->distances + new->distances_count, new->distances, new->distances_count * sizeof(*old->distances));
+ free(new->distances);
+ }
} else {
old->distances_count = new->distances_count;
old->distances = new->distances;
@@ -849,9 +934,7 @@ merge_insert_equal(hwloc_obj_t new, hwloc_obj_t old)
&new->infos, &new->infos_count);
}
- if (new->name) {
- if (old->name)
- free(old->name);
+ if (new->name && !old->name) {
old->name = new->name;
new->name = NULL;
}
@@ -860,21 +943,17 @@ merge_insert_equal(hwloc_obj_t new, hwloc_obj_t old)
switch(new->type) {
case HWLOC_OBJ_NUMANODE:
- /* Do not check these, it may change between calls */
- merge_sizes(new, old, memory.local_memory);
- merge_sizes(new, old, memory.total_memory);
- /* if both newects have a page_types array, just keep the biggest one for now */
- if (new->memory.page_types_len && old->memory.page_types_len)
- hwloc_debug("%s", "merging page_types by keeping the biggest one only\n");
- if (new->memory.page_types_len < old->memory.page_types_len) {
- free(new->memory.page_types);
- } else {
- free(old->memory.page_types);
+ if (new->memory.local_memory && !old->memory.local_memory) {
+ /* no memory in old, use new memory */
+ old->memory.local_memory = new->memory.local_memory;
+ if (old->memory.page_types)
+ free(old->memory.page_types);
old->memory.page_types_len = new->memory.page_types_len;
old->memory.page_types = new->memory.page_types;
new->memory.page_types = NULL;
new->memory.page_types_len = 0;
}
+ /* old->memory.total_memory will be updated by propagate_total_memory() */
break;
case HWLOC_OBJ_CACHE:
merge_sizes(new, old, attr->cache.size);
@@ -920,12 +999,22 @@ hwloc___insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t cur
if (res == HWLOC_OBJ_EQUAL) {
if (obj->type == HWLOC_OBJ_GROUP) {
- /* Group are ignored keep_structure. ignored always are handled earlier. Non-ignored Groups isn't possible. */
- assert(topology->ignored_types[HWLOC_OBJ_GROUP] == HWLOC_IGNORE_TYPE_KEEP_STRUCTURE);
+ /* Groups are ignored keep_structure or always. Non-ignored Groups isn't possible. */
+ assert(topology->ignored_types[HWLOC_OBJ_GROUP] != HWLOC_IGNORE_TYPE_NEVER);
/* Remove the Group now. The normal ignore code path wouldn't tell us whether the Group was removed or not.
*
- * Keep EQUAL so that the Group gets merged.
+ * The Group doesn't contain anything to keep, just let the caller free it.
*/
+ return child;
+
+ } else if (child->type == HWLOC_OBJ_GROUP) {
+
+ /* Replace the Group with the new object contents
+ * and let the caller free the new object
+ */
+ hwloc_replace_linked_object(child, obj);
+ return child;
+
} else {
/* otherwise compare actual types to decide of the inclusion */
res = hwloc_type_cmp(obj, child);
@@ -952,7 +1041,9 @@ hwloc___insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t cur
}
return NULL;
}
- /* Can be two objects with same type. Or one Group and anything else. */
+ /* Two objects with same type.
+ * Groups are handled above.
+ */
if (obj->type == child->type
&& (obj->type == HWLOC_OBJ_PU || obj->type == HWLOC_OBJ_NUMANODE)
&& obj->os_index != child->os_index) {
@@ -1878,6 +1969,7 @@ hwloc_drop_useless_io(hwloc_topology_t topology, hwloc_obj_t root)
&& baseclass != 0x02 /* PCI_BASE_CLASS_NETWORK */
&& baseclass != 0x01 /* PCI_BASE_CLASS_STORAGE */
&& baseclass != 0x0b /* PCI_BASE_CLASS_PROCESSOR */
+ && classid != 0x0c04 /* PCI_CLASS_SERIAL_FIBER */
&& classid != 0x0c06 /* PCI_CLASS_SERIAL_INFINIBAND */
&& baseclass != 0x12 /* Processing Accelerators */)
unlink_and_free_object_and_children(pchild);
@@ -2131,6 +2223,12 @@ hwloc_level_filter_objects(hwloc_topology_t topology,
/* count interesting objects and allocate the new array */
for(i=0, nnew=0; i<nold; i++)
nnew += hwloc_level_filter_object(topology, NULL, old[i]);
+ if (!nnew) {
+ *objs = NULL;
+ *n_objs = 0;
+ free(old);
+ return 0;
+ }
new = malloc(nnew * sizeof(hwloc_obj_t));
if (!new) {
free(old);
@@ -2163,15 +2261,17 @@ hwloc_build_level_from_list(struct hwloc_obj *first, struct hwloc_obj ***levelp)
}
nb = i;
- /* allocate and fill level */
- *levelp = malloc(nb * sizeof(struct hwloc_obj *));
- obj = first;
- i = 0;
- while (obj) {
- obj->logical_index = i;
- (*levelp)[i] = obj;
- i++;
- obj = obj->next_cousin;
+ if (nb) {
+ /* allocate and fill level */
+ *levelp = malloc(nb * sizeof(struct hwloc_obj *));
+ obj = first;
+ i = 0;
+ while (obj) {
+ obj->logical_index = i;
+ (*levelp)[i] = obj;
+ i++;
+ obj = obj->next_cousin;
+ }
}
return nb;
@@ -2197,7 +2297,7 @@ hwloc_connect_levels(hwloc_topology_t topology)
/* don't touch next_group_depth, the Group objects are still here */
/* initialize all depth to unknown */
- for (l = HWLOC_OBJ_SYSTEM; l < HWLOC_OBJ_TYPE_MAX; l++)
+ for (l = HWLOC_OBJ_SYSTEM; l < HWLOC_OBJ_MISC; l++)
topology->type_depth[l] = HWLOC_TYPE_DEPTH_UNKNOWN;
/* initialize root type depth */
topology->type_depth[topology->levels[0][0]->type] = 0;
@@ -2207,17 +2307,14 @@ hwloc_connect_levels(hwloc_topology_t topology)
topology->bridge_level = NULL;
topology->bridge_nbobjects = 0;
topology->first_bridge = topology->last_bridge = NULL;
- topology->type_depth[HWLOC_OBJ_BRIDGE] = HWLOC_TYPE_DEPTH_BRIDGE;
free(topology->pcidev_level);
topology->pcidev_level = NULL;
topology->pcidev_nbobjects = 0;
topology->first_pcidev = topology->last_pcidev = NULL;
- topology->type_depth[HWLOC_OBJ_PCI_DEVICE] = HWLOC_TYPE_DEPTH_PCI_DEVICE;
free(topology->osdev_level);
topology->osdev_level = NULL;
topology->osdev_nbobjects = 0;
topology->first_osdev = topology->last_osdev = NULL;
- topology->type_depth[HWLOC_OBJ_OS_DEVICE] = HWLOC_TYPE_DEPTH_OS_DEVICE;
/* Start with children of the whole system. */
n_objs = topology->levels[0][0]->arity;
@@ -2345,13 +2442,20 @@ hwloc_connect_levels(hwloc_topology_t topology)
void hwloc_alloc_obj_cpusets(hwloc_obj_t obj)
{
- obj->cpuset = hwloc_bitmap_alloc_full();
- obj->complete_cpuset = hwloc_bitmap_alloc();
- obj->online_cpuset = hwloc_bitmap_alloc_full();
- obj->allowed_cpuset = hwloc_bitmap_alloc_full();
- obj->nodeset = hwloc_bitmap_alloc();
- obj->complete_nodeset = hwloc_bitmap_alloc();
- obj->allowed_nodeset = hwloc_bitmap_alloc_full();
+ if (!obj->cpuset)
+ obj->cpuset = hwloc_bitmap_alloc_full();
+ if (!obj->complete_cpuset)
+ obj->complete_cpuset = hwloc_bitmap_alloc();
+ if (!obj->online_cpuset)
+ obj->online_cpuset = hwloc_bitmap_alloc_full();
+ if (!obj->allowed_cpuset)
+ obj->allowed_cpuset = hwloc_bitmap_alloc_full();
+ if (!obj->nodeset)
+ obj->nodeset = hwloc_bitmap_alloc();
+ if (!obj->complete_nodeset)
+ obj->complete_nodeset = hwloc_bitmap_alloc();
+ if (!obj->allowed_nodeset)
+ obj->allowed_nodeset = hwloc_bitmap_alloc_full();
}
/* Main discovery loop */
@@ -2597,6 +2701,7 @@ void
hwloc_topology_setup_defaults(struct hwloc_topology *topology)
{
struct hwloc_obj *root_obj;
+ unsigned l;
/* reset support */
memset(&topology->binding_hooks, 0, sizeof(topology->binding_hooks));
@@ -2617,6 +2722,12 @@ hwloc_topology_setup_defaults(struct hwloc_topology *topology)
topology->first_bridge = topology->last_bridge = NULL;
topology->first_pcidev = topology->last_pcidev = NULL;
topology->first_osdev = topology->last_osdev = NULL;
+ /* sane values to type_depth */
+ for (l = HWLOC_OBJ_SYSTEM; l < HWLOC_OBJ_MISC; l++)
+ topology->type_depth[l] = HWLOC_TYPE_DEPTH_UNKNOWN;
+ topology->type_depth[HWLOC_OBJ_BRIDGE] = HWLOC_TYPE_DEPTH_BRIDGE;
+ topology->type_depth[HWLOC_OBJ_PCI_DEVICE] = HWLOC_TYPE_DEPTH_PCI_DEVICE;
+ topology->type_depth[HWLOC_OBJ_OS_DEVICE] = HWLOC_TYPE_DEPTH_OS_DEVICE;
/* Create the actual machine object, but don't touch its attributes yet
* since the OS backend may still change the object into something else
@@ -2661,6 +2772,7 @@ hwloc_topology_init (struct hwloc_topology **topologyp)
topology->userdata_export_cb = NULL;
topology->userdata_import_cb = NULL;
+ topology->userdata_not_decoded = 0;
/* Make the topology look like something coherent but empty */
hwloc_topology_setup_defaults(topology);
@@ -2859,6 +2971,9 @@ hwloc_topology_load (struct hwloc_topology *topology)
return -1;
}
+ if (getenv("HWLOC_XML_USERDATA_NOT_DECODED"))
+ topology->userdata_not_decoded = 1;
+
/* enforce backend anyway if a FORCE variable was given */
{
const char *fsroot_path_env = getenv("HWLOC_FORCE_FSROOT");
@@ -2931,6 +3046,11 @@ hwloc_topology_restrict(struct hwloc_topology *topology, hwloc_const_cpuset_t cp
{
hwloc_bitmap_t droppedcpuset, droppednodeset;
+ if (!topology->is_loaded) {
+ errno = EINVAL;
+ return -1;
+ }
+
/* make sure we'll keep something in the topology */
if (!hwloc_bitmap_intersects(cpuset, topology->levels[0][0]->cpuset)) {
errno = EINVAL; /* easy failure, just don't touch the topology */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
index 97b3e5b..ac10d50 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -207,7 +207,7 @@ hwloc_obj_type_of_string (const char * string)
if (!strcasecmp(string, "Cache")) return HWLOC_OBJ_CACHE;
if (!strcasecmp(string, "Core")) return HWLOC_OBJ_CORE;
if (!strcasecmp(string, "PU")) return HWLOC_OBJ_PU;
- if (!strcasecmp(string, "Bridge")) return HWLOC_OBJ_BRIDGE;
+ if (!strcasecmp(string, "Bridge") || !strcasecmp(string, "HostBridge") || !strcasecmp(string, "PCIBridge")) return HWLOC_OBJ_BRIDGE;
if (!strcasecmp(string, "PCIDev")) return HWLOC_OBJ_PCI_DEVICE;
if (!strcasecmp(string, "OSDev")) return HWLOC_OBJ_OS_DEVICE;
return (hwloc_obj_type_t) -1;
@@ -221,13 +221,17 @@ hwloc_obj_type_sscanf(const char *string, hwloc_obj_type_t *typep, int *depthatt
hwloc_obj_cache_type_t cachetypeattr = (hwloc_obj_cache_type_t) -1; /* unspecified */
char *end;
+ /* never match the ending \0 since we want to match things like core:2 too.
+ * just use hwloc_strncasecmp() everywhere.
+ */
+
/* types without depthattr */
if (!hwloc_strncasecmp(string, "system", 2)) {
type = HWLOC_OBJ_SYSTEM;
} else if (!hwloc_strncasecmp(string, "machine", 2)) {
type = HWLOC_OBJ_MACHINE;
- } else if (!hwloc_strncasecmp(string, "node", 1)
- || !hwloc_strncasecmp(string, "numa", 1)) { /* matches node and numanode */
+ } else if (!hwloc_strncasecmp(string, "node", 2)
+ || !hwloc_strncasecmp(string, "numa", 2)) { /* matches node and numanode */
type = HWLOC_OBJ_NUMANODE;
} else if (!hwloc_strncasecmp(string, "package", 2)
|| !hwloc_strncasecmp(string, "socket", 2)) { /* backward compat with v1.10 */
@@ -236,13 +240,22 @@ hwloc_obj_type_sscanf(const char *string, hwloc_obj_type_t *typep, int *depthatt
type = HWLOC_OBJ_CORE;
} else if (!hwloc_strncasecmp(string, "pu", 2)) {
type = HWLOC_OBJ_PU;
- } else if (!hwloc_strncasecmp(string, "misc", 2)) {
+ } else if (!hwloc_strncasecmp(string, "misc", 4)) {
type = HWLOC_OBJ_MISC;
- } else if (!hwloc_strncasecmp(string, "bridge", 2)) {
+ } else if (!hwloc_strncasecmp(string, "bridge", 4)
+ || !hwloc_strncasecmp(string, "hostbridge", 6)
+ || !hwloc_strncasecmp(string, "pcibridge", 5)) {
type = HWLOC_OBJ_BRIDGE;
- } else if (!hwloc_strncasecmp(string, "pci", 2)) {
+ } else if (!hwloc_strncasecmp(string, "pci", 3)) {
type = HWLOC_OBJ_PCI_DEVICE;
- } else if (!hwloc_strncasecmp(string, "os", 2)) {
+ } else if (!hwloc_strncasecmp(string, "os", 2)
+ || !hwloc_strncasecmp(string, "bloc", 4)
+ || !hwloc_strncasecmp(string, "net", 3)
+ || !hwloc_strncasecmp(string, "openfab", 7)
+ || !hwloc_strncasecmp(string, "dma", 3)
+ || !hwloc_strncasecmp(string, "gpu", 3)
+ || !hwloc_strncasecmp(string, "copro", 5)
+ || !hwloc_strncasecmp(string, "co-pro", 6)) {
type = HWLOC_OBJ_OS_DEVICE;
/* types with depthattr */
@@ -261,7 +274,7 @@ hwloc_obj_type_sscanf(const char *string, hwloc_obj_type_t *typep, int *depthatt
}
} else if (!hwloc_strncasecmp(string, "group", 2)) {
- int length;
+ size_t length;
type = HWLOC_OBJ_GROUP;
length = strcspn(string, "0123456789");
if (length <= 5 && !hwloc_strncasecmp(string, "group", length)
@@ -401,7 +414,7 @@ hwloc_pci_class_string(unsigned short class_id)
case 0x0c01: return "ACCES";
case 0x0c02: return "SSA";
case 0x0c03: return "USB";
- case 0x0c04: return "Fiber";
+ case 0x0c04: return "Fibre";
case 0x0c05: return "SMBus";
case 0x0c06: return "IB";
case 0x0c07: return "IPMI";
@@ -499,7 +512,8 @@ hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t
case HWLOC_OBJ_OSDEV_GPU: return hwloc_snprintf(string, size, "GPU");
case HWLOC_OBJ_OSDEV_COPROC: return hwloc_snprintf(string, size, verbose ? "Co-Processor" : "CoProc");
default:
- *string = '\0';
+ if (size > 0)
+ *string = '\0';
return 0;
}
break;
@@ -552,7 +566,7 @@ hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t
if (ret > 0)
prefix = separator;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
@@ -626,7 +640,7 @@ hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t
if (ret > 0)
prefix = separator;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
@@ -648,7 +662,7 @@ hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t
return -1;
ret += res;
if (res >= tmplen)
- res = tmplen>0 ? tmplen - 1 : 0;
+ res = tmplen>0 ? (int)tmplen - 1 : 0;
tmp += res;
tmplen -= res;
if (ret > 0)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am
index 4c5c483..95ba36c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2015 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2012 Université Bordeaux
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -35,6 +35,7 @@ check_PROGRAMS = hwloc_list_components \
hwloc_type_depth \
hwloc_bind \
hwloc_get_last_cpu_location \
+ hwloc_get_area_memlocation \
hwloc_object_userdata \
hwloc_synthetic \
hwloc_custom \
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.in
index 5f90430..0bfbd48 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# Copyright © 2009-2015 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2012 Université Bordeaux
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -108,6 +108,7 @@ check_PROGRAMS = hwloc_list_components$(EXEEXT) hwloc_bitmap$(EXEEXT) \
hwloc_bitmap_first_last_weight$(EXEEXT) \
hwloc_bitmap_singlify$(EXEEXT) hwloc_type_depth$(EXEEXT) \
hwloc_bind$(EXEEXT) hwloc_get_last_cpu_location$(EXEEXT) \
+ hwloc_get_area_memlocation$(EXEEXT) \
hwloc_object_userdata$(EXEEXT) hwloc_synthetic$(EXEEXT) \
hwloc_custom$(EXEEXT) hwloc_backends$(EXEEXT) \
hwloc_pci_backend$(EXEEXT) hwloc_is_thissystem$(EXEEXT) \
@@ -221,6 +222,12 @@ hwloc_distances_SOURCES = hwloc_distances.c
hwloc_distances_OBJECTS = hwloc_distances.$(OBJEXT)
hwloc_distances_LDADD = $(LDADD)
hwloc_distances_DEPENDENCIES = $(HWLOC_top_builddir)/src/$(hwloc_lib)
+hwloc_get_area_memlocation_SOURCES = hwloc_get_area_memlocation.c
+hwloc_get_area_memlocation_OBJECTS = \
+ hwloc_get_area_memlocation.$(OBJEXT)
+hwloc_get_area_memlocation_LDADD = $(LDADD)
+hwloc_get_area_memlocation_DEPENDENCIES = \
+ $(HWLOC_top_builddir)/src/$(hwloc_lib)
hwloc_get_cache_covering_cpuset_SOURCES = \
hwloc_get_cache_covering_cpuset.c
hwloc_get_cache_covering_cpuset_OBJECTS = \
@@ -406,7 +413,8 @@ SOURCES = cuda.c cudart.c gl.c glibc-sched.c hwloc_backends.c \
hwloc_bind.c hwloc_bitmap.c hwloc_bitmap_compare_inclusion.c \
hwloc_bitmap_first_last_weight.c hwloc_bitmap_singlify.c \
hwloc_bitmap_string.c hwloc_custom.c hwloc_distances.c \
- hwloc_get_cache_covering_cpuset.c hwloc_get_closest_objs.c \
+ hwloc_get_area_memlocation.c hwloc_get_cache_covering_cpuset.c \
+ hwloc_get_closest_objs.c \
hwloc_get_largest_objs_inside_cpuset.c \
hwloc_get_last_cpu_location.c \
hwloc_get_next_obj_covering_cpuset.c \
@@ -424,7 +432,8 @@ DIST_SOURCES = cuda.c cudart.c gl.c glibc-sched.c hwloc_backends.c \
hwloc_bind.c hwloc_bitmap.c hwloc_bitmap_compare_inclusion.c \
hwloc_bitmap_first_last_weight.c hwloc_bitmap_singlify.c \
hwloc_bitmap_string.c hwloc_custom.c hwloc_distances.c \
- hwloc_get_cache_covering_cpuset.c hwloc_get_closest_objs.c \
+ hwloc_get_area_memlocation.c hwloc_get_cache_covering_cpuset.c \
+ hwloc_get_closest_objs.c \
hwloc_get_largest_objs_inside_cpuset.c \
hwloc_get_last_cpu_location.c \
hwloc_get_next_obj_covering_cpuset.c \
@@ -785,8 +794,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -883,6 +894,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -1025,6 +1037,10 @@ hwloc_distances$(EXEEXT): $(hwloc_distances_OBJECTS) $(hwloc_distances_DEPENDENC
@rm -f hwloc_distances$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(hwloc_distances_OBJECTS) $(hwloc_distances_LDADD) $(LIBS)
+hwloc_get_area_memlocation$(EXEEXT): $(hwloc_get_area_memlocation_OBJECTS) $(hwloc_get_area_memlocation_DEPENDENCIES) $(EXTRA_hwloc_get_area_memlocation_DEPENDENCIES)
+ @rm -f hwloc_get_area_memlocation$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(hwloc_get_area_memlocation_OBJECTS) $(hwloc_get_area_memlocation_LDADD) $(LIBS)
+
hwloc_get_cache_covering_cpuset$(EXEEXT): $(hwloc_get_cache_covering_cpuset_OBJECTS) $(hwloc_get_cache_covering_cpuset_DEPENDENCIES) $(EXTRA_hwloc_get_cache_covering_cpuset_DEPENDENCIES)
@rm -f hwloc_get_cache_covering_cpuset$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(hwloc_get_cache_covering_cpuset_OBJECTS) $(hwloc_get_cache_covering_cpuset_LDADD) $(LIBS)
@@ -1164,6 +1180,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_bitmap_string.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_custom.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_distances.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_get_area_memlocation.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_get_cache_covering_cpuset.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_get_closest_objs.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_get_largest_objs_inside_cpuset.Po at am__quote@
@@ -1584,6 +1601,13 @@ hwloc_get_last_cpu_location.log: hwloc_get_last_cpu_location$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+hwloc_get_area_memlocation.log: hwloc_get_area_memlocation$(EXEEXT)
+ @p='hwloc_get_area_memlocation$(EXEEXT)'; \
+ b='hwloc_get_area_memlocation'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
hwloc_object_userdata.log: hwloc_object_userdata$(EXEEXT)
@p='hwloc_object_userdata$(EXEEXT)'; \
b='hwloc_object_userdata'; \
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
index 3f71dc6..53e3f0c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
@@ -15,8 +15,15 @@
#include <errno.h>
#include <assert.h>
-#ifdef HWLOC_WIN_SYS
-#define mkstemp mktemp
+#if defined(HWLOC_WIN_SYS) && !defined(__CYGWIN__)
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+static inline int mkstemp(char *name)
+{
+ mktemp(name);
+ return open(name, O_RDWR|O_CREAT, S_IRWXU);
+}
#endif
/* mostly useful with valgrind, to check if backend cleanup properly */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_area_memlocation.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_area_memlocation.c
new file mode 100644
index 0000000..1744296
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_area_memlocation.c
@@ -0,0 +1,140 @@
+/*
+ * Copyright © 2016 Inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+#include <stdio.h>
+#include <assert.h>
+
+#define LEN 1048576
+
+int main(void)
+{
+ const struct hwloc_topology_support *support;
+ char *buffer;
+ hwloc_topology_t topology;
+ hwloc_bitmap_t set = hwloc_bitmap_alloc();
+ hwloc_bitmap_t total = hwloc_bitmap_alloc();
+ hwloc_obj_t node;
+ char *s;
+ int err;
+
+ err = hwloc_topology_init(&topology);
+ assert(!err);
+ err = hwloc_topology_load(topology);
+ assert(!err);
+
+ support = hwloc_topology_get_support(topology);
+ if (!support->membind->get_area_memlocation)
+ goto out;
+
+ buffer = hwloc_alloc(topology, LEN);
+ assert(buffer);
+ printf("buffer %p length %u\n", buffer, LEN);
+
+ err = hwloc_get_area_memlocation(topology, buffer, LEN, set, HWLOC_MEMBIND_BYNODESET);
+ if (err < 0 && errno == ENOSYS) {
+ fprintf(stderr, "hwloc_get_area_memlocation() failed with ENOSYS, aborting\n");
+ goto out_with_buffer;
+ }
+ assert(!err);
+ hwloc_bitmap_asprintf(&s, set);
+ printf("address %p length %u allocated in nodeset %s\n", buffer, LEN, s);
+ free(s);
+ hwloc_bitmap_copy(total, set);
+
+ node = NULL;
+ next1:
+ node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NUMANODE, node);
+ if (!node)
+ goto out_with_buffer;
+ if (!node->memory.local_memory)
+ goto next1;
+ printf("binding to 1st node and touching 1st quarter\n");
+ err = hwloc_set_area_membind(topology, buffer, LEN, node->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
+ if (err < 0 && errno == ENOSYS) {
+ fprintf(stderr, "hwloc_set_area_membind() failed with ENOSYS, aborting\n");
+ goto out_with_buffer;
+ }
+ assert(!err);
+
+ memset(buffer, 0, LEN/4);
+ err = hwloc_get_area_memlocation(topology, buffer, 1, set, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+ hwloc_bitmap_asprintf(&s, set);
+ printf("address %p length %u allocated in nodeset %s\n", buffer, LEN/4, s);
+ free(s);
+ hwloc_bitmap_or(total, total, set);
+
+ next2:
+ node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NUMANODE, node);
+ if (!node)
+ goto out_with_nomorenodes;
+ if (!node->memory.local_memory)
+ goto next2;
+ printf("binding to 2nd node and touching 2nd quarter\n");
+ err = hwloc_set_area_membind(topology, buffer, LEN, node->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+
+ memset(buffer+LEN/4, 0, LEN/4);
+ err = hwloc_get_area_memlocation(topology, buffer+LEN/4, LEN/4, set, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+ hwloc_bitmap_asprintf(&s, set);
+ printf("address %p length %u allocated in nodeset %s\n", buffer+LEN/4, LEN/4, s);
+ free(s);
+ hwloc_bitmap_or(total, total, set);
+
+ next3:
+ node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NUMANODE, node);
+ if (!node)
+ goto out_with_nomorenodes;
+ if (!node->memory.local_memory)
+ goto next3;
+ printf("binding to 3rd node and touching 3rd quarter\n");
+ err = hwloc_set_area_membind(topology, buffer, LEN, node->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+
+ memset(buffer+LEN/2, 0, LEN/4);
+ err = hwloc_get_area_memlocation(topology, buffer+LEN/2, LEN/4, set, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+ hwloc_bitmap_asprintf(&s, set);
+ printf("address %p length %u allocated in nodeset %s\n", buffer+LEN/2, LEN/4, s);
+ free(s);
+ hwloc_bitmap_or(total, total, set);
+
+ next4:
+ node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NUMANODE, node);
+ if (!node)
+ goto out_with_nomorenodes;
+ if (!node->memory.local_memory)
+ goto next4;
+ printf("binding to 4th node and touching 4th quarter\n");
+ err = hwloc_set_area_membind(topology, buffer, LEN, node->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+
+ memset(buffer+3*LEN/4, 0, LEN/4);
+ err = hwloc_get_area_memlocation(topology, buffer+3*LEN/4, LEN/4, set, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+ hwloc_bitmap_asprintf(&s, set);
+ printf("address %p length %u allocated in nodeset %s\n", buffer+3*LEN/4, LEN/4, s);
+ free(s);
+ hwloc_bitmap_or(total, total, set);
+
+ out_with_nomorenodes:
+ err = hwloc_get_area_memlocation(topology, buffer, LEN, set, HWLOC_MEMBIND_BYNODESET);
+ assert(!err);
+ hwloc_bitmap_asprintf(&s, set);
+ printf("address %p length %u located on %s\n", buffer, LEN, s);
+ free(s);
+ assert(hwloc_bitmap_isincluded(total, set));
+
+ out_with_buffer:
+ hwloc_free(topology, buffer, LEN);
+
+ out:
+ hwloc_topology_destroy(topology);
+ hwloc_bitmap_free(set);
+ hwloc_bitmap_free(total);
+ return 0;
+}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
index c324d8d..2545ffe 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -16,7 +16,8 @@
/* check that object userdata is properly initialized */
#define RANDOMSTRINGLENGTH 128
-#define RANDOMSTRINGTESTS 9
+#define RANDOMSTRINGSHORTTESTS 5
+#define RANDOMSTRINGLONGTESTS 9
static char *randomstring;
static void check(hwloc_topology_t topology)
@@ -34,7 +35,7 @@ static void check(hwloc_topology_t topology)
static void export_cb(void *reserved, hwloc_topology_t topo, hwloc_obj_t obj)
{
- char tmp[17];
+ char tmp[32];
int err;
unsigned i;
@@ -42,8 +43,19 @@ static void export_cb(void *reserved, hwloc_topology_t topo, hwloc_obj_t obj)
err = hwloc_export_obj_userdata(reserved, topo, obj, "MyName", tmp, 16);
assert(err >= 0);
- for(i=0; i<RANDOMSTRINGTESTS; i++) {
- sprintf(tmp, "Encoded%d", i);
+ err = hwloc_export_obj_userdata(reserved, topo, obj, NULL, "", 0);
+ assert(err >= 0);
+
+ err = hwloc_export_obj_userdata_base64(reserved, topo, obj, NULL, "", 0);
+ assert(err >= 0);
+
+ for(i=0; i<RANDOMSTRINGSHORTTESTS; i++) {
+ sprintf(tmp, "EncodedShort%d", i);
+ err = hwloc_export_obj_userdata_base64(reserved, topo, obj, tmp, randomstring+i, i);
+ assert(err >= 0);
+ }
+ for(i=0; i<RANDOMSTRINGLONGTESTS; i++) {
+ sprintf(tmp, "EncodedLong%d", i);
err = hwloc_export_obj_userdata_base64(reserved, topo, obj, tmp, randomstring+(i+1)/2, RANDOMSTRINGLENGTH-i);
assert(err >= 0);
}
@@ -55,7 +67,10 @@ static void import_cb(hwloc_topology_t topo __hwloc_attribute_unused, hwloc_obj_
char tmp[17];
uint64_t val;
- if (!strcmp("MyName", name)) {
+ if (!name) {
+ assert(!*(char*)buffer);
+
+ } else if (!strcmp("MyName", name)) {
assert(length == 16);
memcpy(tmp, buffer, 16);
tmp[16] = '\0';
@@ -79,9 +94,16 @@ static void import_cb(hwloc_topology_t topo __hwloc_attribute_unused, hwloc_obj_
assert(0);
}
- } else if (!strncmp("Encoded", name, 7)) {
- unsigned i = atoi(name+7);
- assert(i <= RANDOMSTRINGTESTS-1);
+ } else if (!strncmp("EncodedShort", name, 12)) {
+ unsigned i = atoi(name+12);
+ assert(i <= RANDOMSTRINGSHORTTESTS-1);
+ assert(i == (unsigned) length);
+ err = memcmp(buffer, randomstring+i, length);
+ assert(!err);
+
+ } else if (!strncmp("EncodedLong", name, 11)) {
+ unsigned i = atoi(name+11);
+ assert(i <= RANDOMSTRINGLONGTESTS-1);
assert(RANDOMSTRINGLENGTH-i == (unsigned) length);
err = memcmp(buffer, randomstring+(i+1)/2, length);
assert(!err);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2
index 910c2bc..4988c35 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.output
index e50dfb8..d00b2ad 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.output
@@ -116,6 +116,11 @@
</object>
</object>
</object>
+ <object type="PCIDev" os_index="32" pci_busid="0000:00:02.0" pci_type="0108 [8086:0953] [8086:3709] 01" pci_link_speed="0.000000">
+ <object type="OSDev" name="nvme0n1" osdev_type="0">
+ <info name="LinuxDeviceID" value="259:0"/>
+ </object>
+ </object>
<object type="PCIDev" os_index="64" pci_busid="0000:00:04.0" pci_type="0880 [8086:3c20] [1028:0518] 07" pci_link_speed="0.000000">
<object type="OSDev" name="dma0chan0" osdev_type="4"/>
</object>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.tar.bz2
index 09d7bb9..efc086a 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32em64t-2n8c+1mic.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.output
index 320a129..176982c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.output
@@ -1,5 +1,5 @@
-Machine (P#0 total=125805356KB DMIProductName="PowerEdge C6145 " DMIProductVersion=" " DMIBoardVendor="Dell " DMIBoardName=040N24 DMIBoardVersion="A01 " DMIBoardAssetTag=".2 " DMIChassisVendor="Dell Inc. " DMIChassisType=23 DMIChassisVersion=" " DMIChassisAssetTag=" " DMIBIOSVendor="Dell Inc." DMIBIOSVersion=2.5.91 DMIBIOSDate=11/04/2011 DMISysVendor="Dell " [...]
- Package L#0 (P#0 total=33547052KB CPUModel="AMD Opteron(TM) Processor 6276 ")
+Machine (P#0 total=125805356KB DMIProductName="PowerEdge C6145 " DMIProductVersion=" " DMIBoardVendor="Dell " DMIBoardName=040N24 DMIBoardVersion="A01 " DMIBoardAssetTag=".2 " DMIChassisVendor="Dell Inc. " DMIChassisType=23 DMIChassisVersion=" " DMIChassisAssetTag=" " DMIBIOSVendor="Dell Inc." DMIBIOSVersion=2.5.91 DMIBIOSDate=11/04/2011 DMISysVendor="Dell " [...]
+ Package L#0 (P#0 total=33547052KB CPUVendor=AuthenticAMD CPUFamilyNumber=21 CPUModelNumber=1 CPUModel="AMD Opteron(TM) Processor 6276 " CPUStepping=2)
NUMANode L#0 (P#0 local=16769836KB total=16769836KB)
L3Cache L#0 (size=6144KB linesize=64 ways=64)
L2Cache L#0 (size=2048KB linesize=64 ways=16)
@@ -68,7 +68,7 @@ Machine (P#0 total=125805356KB DMIProductName="PowerEdge C6145 " DMIProductVersi
L1dCache L#15 (size=16KB linesize=64 ways=4)
Core L#15 (P#7)
PU L#15 (P#15)
- Package L#1 (P#1 total=33554432KB CPUModel="AMD Opteron(TM) Processor 6276 ")
+ Package L#1 (P#1 total=33554432KB CPUVendor=AuthenticAMD CPUFamilyNumber=21 CPUModelNumber=1 CPUModel="AMD Opteron(TM) Processor 6276 " CPUStepping=2)
NUMANode L#2 (P#2 local=16777216KB total=16777216KB)
L3Cache L#2 (size=6144KB linesize=64 ways=64)
L2Cache L#8 (size=2048KB linesize=64 ways=16)
@@ -137,7 +137,7 @@ Machine (P#0 total=125805356KB DMIProductName="PowerEdge C6145 " DMIProductVersi
L1dCache L#31 (size=16KB linesize=64 ways=4)
Core L#31 (P#7)
PU L#31 (P#31)
- Package L#2 (P#2 total=25165824KB CPUModel="AMD Opteron(TM) Processor 6276 ")
+ Package L#2 (P#2 total=25165824KB CPUVendor=AuthenticAMD CPUFamilyNumber=21 CPUModelNumber=1 CPUModel="AMD Opteron(TM) Processor 6276 " CPUStepping=2)
NUMANode L#4 (P#4 local=16777216KB total=16777216KB)
L3Cache L#4 (size=6144KB linesize=64 ways=64)
L2Cache L#16 (size=2048KB linesize=64 ways=16)
@@ -206,7 +206,7 @@ Machine (P#0 total=125805356KB DMIProductName="PowerEdge C6145 " DMIProductVersi
L1dCache L#47 (size=16KB linesize=64 ways=4)
Core L#47 (P#7)
PU L#47 (P#47)
- Package L#3 (P#3 total=33538048KB CPUModel="AMD Opteron(TM) Processor 6276 ")
+ Package L#3 (P#3 total=33538048KB CPUVendor=AuthenticAMD CPUFamilyNumber=21 CPUModelNumber=1 CPUModel="AMD Opteron(TM) Processor 6276 " CPUStepping=2)
NUMANode L#6 (P#6 local=16777216KB total=16777216KB)
L3Cache L#6 (size=6144KB linesize=64 ways=64)
L2Cache L#24 (size=2048KB linesize=64 ways=16)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.tar.bz2
index 2c7d457..2894ece 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64amd64-4s2n4ca2co.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.in
index 7cd272a..2d9f609 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.in
@@ -476,8 +476,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -574,6 +576,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.in
index 1e90235..549bbe9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.in
@@ -417,8 +417,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -515,6 +517,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.in
index 2205550..b832718 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.in
@@ -395,8 +395,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -493,6 +495,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/bgq/spi/include/kernel/location.h b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/bgq/spi/include/kernel/location.h
index 4b67abb..e029466 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/bgq/spi/include/kernel/location.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/bgq/spi/include/kernel/location.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013 Inria. All rights reserved.
+ * Copyright © 2013-2015 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -11,4 +11,10 @@
uint32_t Kernel_ProcessorID( void );
uint32_t Kernel_MyTcoord( void );
+/* don't try to cross-build BGQ port on old Linux platforms */
+#if (!HAVE_DECL_PTHREAD_GETAFFINITY_NP) || (!HAVE_DECL_PTHREAD_SETAFFINITY_NP) || (!defined HWLOC_HAVE_CPU_SET)
+#warning Disabling BGQ port cross-build on old Linux platform
+#define HWLOC_DISABLE_BGQ_PORT_TEST
+#endif
+
#endif /* HWLOC_PORT_BGQ_KERNEL_LOCATION_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows/windows.h b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows/windows.h
index eaf23e1..13837c4 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows/windows.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows/windows.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* See COPYING in top-level directory.
*/
@@ -18,10 +18,12 @@ typedef uint64_t DWORDLONG;
typedef DWORDLONG ULONGLONG, *PULONGLONG;
typedef unsigned char BYTE, UCHAR;
typedef unsigned short WORD, USHORT;
-typedef unsigned long ULONG_PTR, DWORD_PTR, DWORD, *PDWORD, *PDWORD_PTR;
+typedef unsigned int UINT, UINT_PTR, DWORD, *PDWORD, *LPDWORD;
+typedef unsigned long ULONG_PTR, DWORD_PTR, *PDWORD_PTR;
typedef const char *LPCSTR;
-typedef int (*FARPROC)();
+typedef int (*FARPROC)(void);
typedef void *PVOID,*LPVOID;
+typedef void VOID;
typedef ULONG_PTR SIZE_T;
/* This is to cope with linux using integers for hwloc_pid_t and hwloc_thread_t
@@ -65,6 +67,8 @@ BOOL GetNumaAvailableMemoryNode(UCHAR Node, PULONGLONG AvailableBytes);
typedef struct _SYSTEM_INFO {
DWORD dwPageSize;
+ DWORD_PTR dwActiveProcessorMask;
+ DWORD dwNumberOfProcessors;
} SYSTEM_INFO, *LPSYSTEM_INFO;
void WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am
index 0519ceb..0c9ea0a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am
@@ -65,6 +65,7 @@ needed: dirs include/hwloc/autogen/config.h include/private/autogen/config.h
@if cpp $(CPPFLAGS) $(TEST_CPPFLAGS) -Iinclude -I$(HWLOC_top_srcdir)/include -I$(HWLOC_top_builddir)/include $(srcdir)/main.c \
| sed -e 's/foobar_ ## hwloc_ ## /foobar_hwloc_/g' \
| sed -e 's/FOOBAR_ ## hwloc_ ## /FOOBAR_hwloc_/g' \
+ | grep -vw HWLOC_DEBUG_VERBOSE \
| grep -vw hwloc_uint64_t \
| egrep -i '(^| |\*)hwloc_' ; then false ; else true ; fi
@echo "# done"
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.in
index 00ab7dd..30c2aee 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.in
@@ -216,8 +216,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -314,6 +316,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -560,6 +563,7 @@ needed: dirs include/hwloc/autogen/config.h include/private/autogen/config.h
@if cpp $(CPPFLAGS) $(TEST_CPPFLAGS) -Iinclude -I$(HWLOC_top_srcdir)/include -I$(HWLOC_top_builddir)/include $(srcdir)/main.c \
| sed -e 's/foobar_ ## hwloc_ ## /foobar_hwloc_/g' \
| sed -e 's/FOOBAR_ ## hwloc_ ## /FOOBAR_hwloc_/g' \
+ | grep -vw HWLOC_DEBUG_VERBOSE \
| grep -vw hwloc_uint64_t \
| egrep -i '(^| |\*)hwloc_' ; then false ; else true ; fi
@echo "# done"
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16-2gr2gr2n2c+misc.xml b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16-2gr2gr2n2c+misc.xml
index ab5ef22..18eb391 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16-2gr2gr2n2c+misc.xml
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16-2gr2gr2n2c+misc.xml
@@ -5,6 +5,9 @@
<info name="Backend" value="Synthetic"/>
<info name="SyntheticDescription" value="group:2 group:2 node:2 core:2 1"/>
<info name="hwlocVersion" value="1.10.1"/>
+ <userdata name="MyName" length="16">0000000000000001</userdata>
+ <userdata name="MyName0" length="0"/>
+ <userdata name="EncodedShort0" length="0" encoding="base64"/>
<object type="Group" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f" depth="2">
<info name="Type" value="MyBigGroup"/>
<object type="Group" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003" depth="1">
@@ -20,6 +23,8 @@
</object>
<object type="NUMANode" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="1073741824">
<page_type size="4096" count="262144"/>
+ <userdata name="EncodedShort3" length="3" encoding="base64">f+B/</userdata>
+ <userdata name="EncodedLong0" length="128" encoding="base64">eK5kf+B/AAB4rmR/4H8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtmR/4H8AAP////8AAAAA////fwAAAAA=</userdata>
<object type="Core" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
</object>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.in
index 156482b..84a62f0 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.in
@@ -417,8 +417,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -515,6 +517,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.in
index f79dda0..5505015 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.in
@@ -271,8 +271,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -369,6 +371,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.am
index 08b3204..9f82855 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.am
@@ -1,5 +1,5 @@
-# Copyright © 2009-2015 Inria. All rights reserved.
-# Copyright © 2009-2012, 2014 Université Bordeaux
+# Copyright © 2009-2016 Inria. All rights reserved.
+# Copyright © 2009-2012, 2014, 2016 Université Bordeaux
# Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
#
# See COPYING in top-level directory.
@@ -33,8 +33,22 @@ bin_PROGRAMS = \
hwloc-distances \
hwloc-distrib \
hwloc-info \
- hwloc-patch \
- hwloc-ps
+ hwloc-patch
+
+if !HWLOC_HAVE_WINDOWS
+bin_PROGRAMS += hwloc-ps
+endif
+
+if HWLOC_HAVE_LINUX
+if HWLOC_HAVE_X86
+sbin_PROGRAMS = hwloc-dump-hwdata
+endif HWLOC_HAVE_X86
+endif HWLOC_HAVE_LINUX
+
+hwloc_dump_hwdata_SOURCES = \
+ hwloc-dump-hwdata.c \
+ hwloc-dump-hwdata-knl.c
+hwloc_dump_hwdata_CPPFLAGS = $(AM_CPPFLAGS) -DRUNSTATEDIR=\"$(HWLOC_runstatedir)\"
hwloc_calc_SOURCES = \
hwloc-calc.h \
@@ -60,6 +74,10 @@ TESTS += test-fake-plugin.sh
endif HWLOC_HAVE_PLUGINS
endif !HWLOC_HAVE_MINGW32
+SEDMAN = $(SED) -e 's/\#PACKAGE_NAME\#/@PACKAGE_NAME@/g' \
+ -e 's/\#PACKAGE_VERSION\#/@PACKAGE_VERSION@/g' \
+ -e 's/\#HWLOC_DATE\#/@HWLOC_RELEASE_DATE@/g'
+
# Only install man pages if we're building in standalone mode
man7_pages = hwloc.7
EXTRA_DIST += $(man7_pages:.7=.7in)
@@ -76,8 +94,7 @@ man1_pages = \
hwloc-distances.1 \
hwloc-distrib.1 \
hwloc-info.1 \
- hwloc-patch.1 \
- hwloc-ps.1
+ hwloc-patch.1
EXTRA_DIST += $(man1_pages:.1=.1in)
nodist_man_MANS += $(man1_pages)
@@ -90,25 +107,42 @@ if HWLOC_HAVE_LINUX
nodist_man_MANS += $(hgt_page)
endif HWLOC_HAVE_LINUX
+# Same for hwloc-ps on !Windows
+hps_page = hwloc-ps.1
+EXTRA_DIST += $(hps_page:.1=.1in)
+if !HWLOC_HAVE_WINDOWS
+nodist_man_MANS += $(hps_page)
+endif
+
+# Same for dump-hwdata page on Linux/x86
+hdh_page = hwloc-dump-hwdata.1
+EXTRA_DIST += $(hdh_page:.1=.1in)
+if HWLOC_HAVE_LINUX
+# WARNING: The SEDMAN line below isn't portable ($(subst ...) is GNU-make only).
+# Keep this rule Linux-only, or stop using $(subst ...). See issue #187.
+if HWLOC_HAVE_X86
+nodist_man_MANS += $(hdh_page)
+hwloc-dump-hwdata.1: hwloc-dump-hwdata.1in
+ @ echo Creating $@ man page...
+ @ $(SEDMAN) \
+ -e 's/#RUNSTATEDIR#/$(subst /,\/,$(HWLOC_runstatedir))/g' \
+ > $@ < $<
+endif HWLOC_HAVE_X86
+endif HWLOC_HAVE_LINUX
+
.1in.1:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
.3in.3:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
.7in.7:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
install-exec-hook:
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.in
index 882937e..53dd652 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/Makefile.in
@@ -14,8 +14,8 @@
@SET_MAKE@
-# Copyright © 2009-2015 Inria. All rights reserved.
-# Copyright © 2009-2012, 2014 Université Bordeaux
+# Copyright © 2009-2016 Inria. All rights reserved.
+# Copyright © 2009-2012, 2014, 2016 Université Bordeaux
# Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
#
# See COPYING in top-level directory.
@@ -102,10 +102,16 @@ target_triplet = @target@
bin_PROGRAMS = hwloc-annotate$(EXEEXT) hwloc-assembler$(EXEEXT) \
hwloc-bind$(EXEEXT) hwloc-calc$(EXEEXT) hwloc-diff$(EXEEXT) \
hwloc-distances$(EXEEXT) hwloc-distrib$(EXEEXT) \
- hwloc-info$(EXEEXT) hwloc-patch$(EXEEXT) hwloc-ps$(EXEEXT)
- at HWLOC_HAVE_LINUX_TRUE@am__append_1 = hwloc-gather-topology
- at HWLOC_HAVE_MINGW32_FALSE@@HWLOC_HAVE_PLUGINS_TRUE at am__append_2 = test-fake-plugin.sh
- at HWLOC_HAVE_LINUX_TRUE@am__append_3 = $(hgt_page)
+ hwloc-info$(EXEEXT) hwloc-patch$(EXEEXT) $(am__EXEEXT_1)
+ at HWLOC_HAVE_WINDOWS_FALSE@am__append_1 = hwloc-ps
+ at HWLOC_HAVE_LINUX_TRUE@@HWLOC_HAVE_X86_TRUE at sbin_PROGRAMS = hwloc-dump-hwdata$(EXEEXT)
+ at HWLOC_HAVE_LINUX_TRUE@am__append_2 = hwloc-gather-topology
+ at HWLOC_HAVE_MINGW32_FALSE@@HWLOC_HAVE_PLUGINS_TRUE at am__append_3 = test-fake-plugin.sh
+ at HWLOC_HAVE_LINUX_TRUE@am__append_4 = $(hgt_page)
+ at HWLOC_HAVE_WINDOWS_FALSE@am__append_5 = $(hps_page)
+# WARNING: The SEDMAN line below isn't portable ($(subst ...) is GNU-make only).
+# Keep this rule Linux-only, or stop using $(subst ...). See issue #187.
+ at HWLOC_HAVE_LINUX_TRUE@@HWLOC_HAVE_X86_TRUE at am__append_6 = $(hdh_page)
subdir = utils/hwloc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/hwloc.m4 \
@@ -134,9 +140,11 @@ CONFIG_CLEAN_FILES = hwloc-assembler-remote hwloc-compress-dir \
test-hwloc-distances.sh test-hwloc-distrib.sh \
test-hwloc-info.sh test-fake-plugin.sh
CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
- "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)"
-PROGRAMS = $(bin_PROGRAMS)
+ at HWLOC_HAVE_WINDOWS_FALSE@am__EXEEXT_1 = hwloc-ps$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \
+ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
+ "$(DESTDIR)$(man7dir)"
+PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS)
hwloc_annotate_SOURCES = hwloc-annotate.c
hwloc_annotate_OBJECTS = hwloc-annotate.$(OBJEXT)
hwloc_annotate_LDADD = $(LDADD)
@@ -169,6 +177,13 @@ hwloc_distrib_SOURCES = hwloc-distrib.c
hwloc_distrib_OBJECTS = hwloc-distrib.$(OBJEXT)
hwloc_distrib_LDADD = $(LDADD)
hwloc_distrib_DEPENDENCIES = $(HWLOC_top_builddir)/src/libhwloc.la
+am_hwloc_dump_hwdata_OBJECTS = \
+ hwloc_dump_hwdata-hwloc-dump-hwdata.$(OBJEXT) \
+ hwloc_dump_hwdata-hwloc-dump-hwdata-knl.$(OBJEXT)
+hwloc_dump_hwdata_OBJECTS = $(am_hwloc_dump_hwdata_OBJECTS)
+hwloc_dump_hwdata_LDADD = $(LDADD)
+hwloc_dump_hwdata_DEPENDENCIES = \
+ $(HWLOC_top_builddir)/src/libhwloc.la
hwloc_info_SOURCES = hwloc-info.c
hwloc_info_OBJECTS = hwloc-info.$(OBJEXT)
hwloc_info_LDADD = $(LDADD)
@@ -245,10 +260,12 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = hwloc-annotate.c hwloc-assembler.c hwloc-bind.c \
$(hwloc_calc_SOURCES) hwloc-diff.c hwloc-distances.c \
- hwloc-distrib.c hwloc-info.c hwloc-patch.c hwloc-ps.c
+ hwloc-distrib.c $(hwloc_dump_hwdata_SOURCES) hwloc-info.c \
+ hwloc-patch.c hwloc-ps.c
DIST_SOURCES = hwloc-annotate.c hwloc-assembler.c hwloc-bind.c \
$(hwloc_calc_SOURCES) hwloc-diff.c hwloc-distances.c \
- hwloc-distrib.c hwloc-info.c hwloc-patch.c hwloc-ps.c
+ hwloc-distrib.c $(hwloc_dump_hwdata_SOURCES) hwloc-info.c \
+ hwloc-patch.c hwloc-ps.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -545,8 +562,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -643,6 +662,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -667,14 +687,20 @@ EXTRA_DIST = test-hwloc-annotate.input test-hwloc-annotate.output \
test-hwloc-diffpatch.input1 test-hwloc-diffpatch.input2 \
test-hwloc-distances.output test-hwloc-distrib.output \
test-hwloc-info.output $(man7_pages:.7=.7in) \
- $(man1_pages:.1=.1in) $(hgt_page:.1=.1in)
+ $(man1_pages:.1=.1in) $(hgt_page:.1=.1in) $(hps_page:.1=.1in) \
+ $(hdh_page:.1=.1in)
noinst_HEADERS = misc.h
+hwloc_dump_hwdata_SOURCES = \
+ hwloc-dump-hwdata.c \
+ hwloc-dump-hwdata-knl.c
+
+hwloc_dump_hwdata_CPPFLAGS = $(AM_CPPFLAGS) -DRUNSTATEDIR=\"$(HWLOC_runstatedir)\"
hwloc_calc_SOURCES = \
hwloc-calc.h \
hwloc-calc.c
bin_SCRIPTS = hwloc-assembler-remote hwloc-compress-dir \
- $(am__append_1)
+ $(am__append_2)
@HWLOC_HAVE_MINGW32_FALSE at TESTS = test-hwloc-annotate.sh \
@HWLOC_HAVE_MINGW32_FALSE@ test-hwloc-assembler.sh \
@HWLOC_HAVE_MINGW32_FALSE@ test-hwloc-calc.sh \
@@ -682,11 +708,16 @@ bin_SCRIPTS = hwloc-assembler-remote hwloc-compress-dir \
@HWLOC_HAVE_MINGW32_FALSE@ test-hwloc-diffpatch.sh \
@HWLOC_HAVE_MINGW32_FALSE@ test-hwloc-distances.sh \
@HWLOC_HAVE_MINGW32_FALSE@ test-hwloc-distrib.sh \
- at HWLOC_HAVE_MINGW32_FALSE@ test-hwloc-info.sh $(am__append_2)
+ at HWLOC_HAVE_MINGW32_FALSE@ test-hwloc-info.sh $(am__append_3)
+SEDMAN = $(SED) -e 's/\#PACKAGE_NAME\#/@PACKAGE_NAME@/g' \
+ -e 's/\#PACKAGE_VERSION\#/@PACKAGE_VERSION@/g' \
+ -e 's/\#HWLOC_DATE\#/@HWLOC_RELEASE_DATE@/g'
+
# Only install man pages if we're building in standalone mode
man7_pages = hwloc.7
-nodist_man_MANS = $(man7_pages) $(man1_pages) $(am__append_3)
+nodist_man_MANS = $(man7_pages) $(man1_pages) $(am__append_4) \
+ $(am__append_5) $(am__append_6)
man1_pages = \
hwloc-annotate.1 \
hwloc-assembler.1 \
@@ -698,14 +729,19 @@ man1_pages = \
hwloc-distances.1 \
hwloc-distrib.1 \
hwloc-info.1 \
- hwloc-patch.1 \
- hwloc-ps.1
+ hwloc-patch.1
# Only install the gather-topology page if we're on Linux, but we need
# to include it in the tarball, regardless of what OS we're building
# on.
hgt_page = hwloc-gather-topology.1
+
+# Same for hwloc-ps on !Windows
+hps_page = hwloc-ps.1
+
+# Same for dump-hwdata page on Linux/x86
+hdh_page = hwloc-dump-hwdata.1
all: all-am
.SUFFIXES:
@@ -812,6 +848,55 @@ clean-binPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files
+
+clean-sbinPROGRAMS:
+ @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
hwloc-annotate$(EXEEXT): $(hwloc_annotate_OBJECTS) $(hwloc_annotate_DEPENDENCIES) $(EXTRA_hwloc_annotate_DEPENDENCIES)
@rm -f hwloc-annotate$(EXEEXT)
@@ -841,6 +926,10 @@ hwloc-distrib$(EXEEXT): $(hwloc_distrib_OBJECTS) $(hwloc_distrib_DEPENDENCIES) $
@rm -f hwloc-distrib$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(hwloc_distrib_OBJECTS) $(hwloc_distrib_LDADD) $(LIBS)
+hwloc-dump-hwdata$(EXEEXT): $(hwloc_dump_hwdata_OBJECTS) $(hwloc_dump_hwdata_DEPENDENCIES) $(EXTRA_hwloc_dump_hwdata_DEPENDENCIES)
+ @rm -f hwloc-dump-hwdata$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(hwloc_dump_hwdata_OBJECTS) $(hwloc_dump_hwdata_LDADD) $(LIBS)
+
hwloc-info$(EXEEXT): $(hwloc_info_OBJECTS) $(hwloc_info_DEPENDENCIES) $(EXTRA_hwloc_info_DEPENDENCIES)
@rm -f hwloc-info$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(hwloc_info_OBJECTS) $(hwloc_info_LDADD) $(LIBS)
@@ -904,6 +993,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc-info.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc-patch.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc-ps.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata-knl.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata.Po at am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -929,6 +1020,34 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+hwloc_dump_hwdata-hwloc-dump-hwdata.o: hwloc-dump-hwdata.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hwloc_dump_hwdata-hwloc-dump-hwdata.o -MD -MP -MF $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata.Tpo -c -o hwloc_dump_hwdata-hwloc-dump-hwdata.o `test -f 'hwloc-dump-hwdata.c' || echo '$(srcdir)/'`hwloc-dump-hwdata.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata.Tpo $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwloc-dump-hwdata.c' object='hwloc_dump_hwdata-hwloc-dump-hwdata.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hwloc_dump_hwdata-hwloc-dump-hwdata.o `test -f 'hwloc-dump-hwdata.c' || echo '$(srcdir)/'`hwloc-dump-hwdata.c
+
+hwloc_dump_hwdata-hwloc-dump-hwdata.obj: hwloc-dump-hwdata.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hwloc_dump_hwdata-hwloc-dump-hwdata.obj -MD -MP -MF $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata.Tpo -c -o hwloc_dump_hwdata-hwloc-dump-hwdata.obj `if test -f 'hwloc-dump-hwdata.c'; then $(CYGPATH_W) 'hwloc-dump-hwdata.c'; else $(CYGPATH_W) '$(srcdir)/hwloc-dump-hwdata.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata.Tpo $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwloc-dump-hwdata.c' object='hwloc_dump_hwdata-hwloc-dump-hwdata.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hwloc_dump_hwdata-hwloc-dump-hwdata.obj `if test -f 'hwloc-dump-hwdata.c'; then $(CYGPATH_W) 'hwloc-dump-hwdata.c'; else $(CYGPATH_W) '$(srcdir)/hwloc-dump-hwdata.c'; fi`
+
+hwloc_dump_hwdata-hwloc-dump-hwdata-knl.o: hwloc-dump-hwdata-knl.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hwloc_dump_hwdata-hwloc-dump-hwdata-knl.o -MD -MP -MF $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata-knl.Tpo -c -o hwloc_dump_hwdata-hwloc-dump-hwdata-knl.o `test -f 'hwloc-dump-hwdata-knl.c' || echo '$(srcdir)/'`hwloc-dump-hwdata-knl.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata-knl.Tpo $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata-knl.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwloc-dump-hwdata-knl.c' object='hwloc_dump_hwdata-hwloc-dump-hwdata-knl.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hwloc_dump_hwdata-hwloc-dump-hwdata-knl.o `test -f 'hwloc-dump-hwdata-knl.c' || echo '$(srcdir)/'`hwloc-dump-hwdata-knl.c
+
+hwloc_dump_hwdata-hwloc-dump-hwdata-knl.obj: hwloc-dump-hwdata-knl.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hwloc_dump_hwdata-hwloc-dump-hwdata-knl.obj -MD -MP -MF $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata-knl.Tpo -c -o hwloc_dump_hwdata-hwloc-dump-hwdata-knl.obj `if test -f 'hwloc-dump-hwdata-knl.c'; then $(CYGPATH_W) 'hwloc-dump-hwdata-knl.c'; else $(CYGPATH_W) '$(srcdir)/hwloc-dump-hwdata-knl.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata-knl.Tpo $(DEPDIR)/hwloc_dump_hwdata-hwloc-dump-hwdata-knl.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwloc-dump-hwdata-knl.c' object='hwloc_dump_hwdata-hwloc-dump-hwdata-knl.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hwloc_dump_hwdata_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hwloc_dump_hwdata-hwloc-dump-hwdata-knl.obj `if test -f 'hwloc-dump-hwdata-knl.c'; then $(CYGPATH_W) 'hwloc-dump-hwdata-knl.c'; else $(CYGPATH_W) '$(srcdir)/hwloc-dump-hwdata-knl.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -1327,7 +1446,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)"; do \
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -1365,7 +1484,8 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-sbinPROGRAMS mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
@@ -1391,7 +1511,8 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am: install-binPROGRAMS install-binSCRIPTS
+install-exec-am: install-binPROGRAMS install-binSCRIPTS \
+ install-sbinPROGRAMS
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
install-html: install-html-am
@@ -1432,52 +1553,53 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man \
+ uninstall-sbinPROGRAMS
uninstall-man: uninstall-man1 uninstall-man7
.MAKE: check-am install-am install-exec-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
- clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
- ctags ctags-am distclean distclean-compile distclean-generic \
- distclean-libtool distclean-local distclean-tags distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-binPROGRAMS install-binSCRIPTS install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-exec-hook install-html install-html-am \
- install-info install-info-am install-man install-man1 \
- install-man7 install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
- uninstall uninstall-am uninstall-binPROGRAMS \
- uninstall-binSCRIPTS uninstall-man uninstall-man1 \
- uninstall-man7
+ clean-binPROGRAMS clean-generic clean-libtool \
+ clean-sbinPROGRAMS cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-local distclean-tags distdir dvi dvi-am html html-am \
+ info info-am install install-am install-binPROGRAMS \
+ install-binSCRIPTS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-exec-hook \
+ install-html install-html-am install-info install-info-am \
+ install-man install-man1 install-man7 install-pdf \
+ install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am recheck tags tags-am uninstall \
+ uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \
+ uninstall-man uninstall-man1 uninstall-man7 \
+ uninstall-sbinPROGRAMS
.PRECIOUS: Makefile
+ at HWLOC_HAVE_LINUX_TRUE@@HWLOC_HAVE_X86_TRUE at hwloc-dump-hwdata.1: hwloc-dump-hwdata.1in
+ at HWLOC_HAVE_LINUX_TRUE@@HWLOC_HAVE_X86_TRUE@ @ echo Creating $@ man page...
+ at HWLOC_HAVE_LINUX_TRUE@@HWLOC_HAVE_X86_TRUE@ @ $(SEDMAN) \
+ at HWLOC_HAVE_LINUX_TRUE@@HWLOC_HAVE_X86_TRUE@ -e 's/#RUNSTATEDIR#/$(subst /,\/,$(HWLOC_runstatedir))/g' \
+ at HWLOC_HAVE_LINUX_TRUE@@HWLOC_HAVE_X86_TRUE@ > $@ < $<
.1in.1:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
.3in.3:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
.7in.7:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
install-exec-hook:
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.1in
index 98b90be..bee10d6 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2013-2015 Inria. All rights reserved.
+.\" Copyright © 2013-2016 Inria. All rights reserved.
.\" See COPYING in top-level directory.
.TH HWLOC-ANNOTATE "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
.SH NAME
@@ -32,6 +32,11 @@ If the info value is omitted, existing infos are replaced with nothing.
Clear the existing info attributes in the target objects before annotating.
If no new annotation has to be added after clearing, \fImode\fR should be
set to \fInone\fR.
+.TP
+\fB\-\-cu\fR
+Clear the existing userdata from the target objects.
+If nothing else has to be performed after clearing, \fImode\fR should be
+set to \fInone\fR.
.
.\" **************************
.\" Description Section
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.c
index 102821b..65cbea3 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-annotate.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2012-2015 Inria. All rights reserved.
+ * Copyright © 2012-2016 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -7,11 +7,13 @@
#include <hwloc-calc.h>
#include <hwloc.h>
+#include "misc.h"
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-static void usage(const char *callname __hwloc_attribute_unused, FILE *where)
+void usage(const char *callname __hwloc_attribute_unused, FILE *where)
{
fprintf(where, "Usage: hwloc-annotate [options] <input.xml> <output.xml> <location> <annotation>\n");
fprintf(where, " <location> may be:\n");
@@ -23,6 +25,7 @@ static void usage(const char *callname __hwloc_attribute_unused, FILE *where)
fprintf(where, "Options:\n");
fprintf(where, " --ci\tClear existing infos\n");
fprintf(where, " --ri\tReplace or remove existing infos with same name (annotation must be info)\n");
+ fprintf(where, " --cu\tClear existing userdata\n");
}
static char *infoname = NULL, *infovalue = NULL;
@@ -31,6 +34,7 @@ static char *miscname = NULL;
static int clearinfos = 0;
static int replaceinfos = 0;
+static int clearuserdata = 0;
static void apply(hwloc_topology_t topology, hwloc_obj_t obj)
{
@@ -45,6 +49,9 @@ static void apply(hwloc_topology_t topology, hwloc_obj_t obj)
obj->infos = NULL;
obj->infos_count = 0;
}
+ if (clearuserdata) {
+ hwloc_utils_userdata_free(obj);
+ }
if (infoname) {
if (replaceinfos) {
/* this may be considered dangerous, applications should not modify objects directly */
@@ -112,6 +119,8 @@ int main(int argc, char *argv[])
clearinfos = 1;
else if (!strcmp(argv[0], "--ri"))
replaceinfos = 1;
+ else if (!strcmp(argv[0], "--cu"))
+ clearuserdata = 1;
else {
fprintf(stderr, "Unrecognized options: %s\n", argv[0]);
usage(callname, stderr);
@@ -165,10 +174,15 @@ int main(int argc, char *argv[])
}
hwloc_topology_init(&topology);
- hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_WHOLE_IO|HWLOC_TOPOLOGY_FLAG_ICACHES);
+ hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM | HWLOC_TOPOLOGY_FLAG_WHOLE_IO | HWLOC_TOPOLOGY_FLAG_ICACHES);
err = hwloc_topology_set_xml(topology, input);
if (err < 0)
goto out;
+
+ putenv("HWLOC_XML_USERDATA_NOT_DECODED=1");
+ hwloc_topology_set_userdata_import_callback(topology, hwloc_utils_userdata_import_cb);
+ hwloc_topology_set_userdata_export_callback(topology, hwloc_utils_userdata_export_cb);
+
hwloc_topology_load(topology);
topodepth = hwloc_topology_get_depth(topology);
@@ -191,10 +205,12 @@ int main(int argc, char *argv[])
if (err < 0)
goto out;
+ hwloc_utils_userdata_free_recursive(hwloc_get_root_obj(topology));
hwloc_topology_destroy(topology);
exit(EXIT_SUCCESS);
out:
+ hwloc_utils_userdata_free_recursive(hwloc_get_root_obj(topology));
hwloc_topology_destroy(topology);
exit(EXIT_FAILURE);
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-assembler.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-assembler.c
index 65f8ede..2dbf11c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-assembler.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-assembler.c
@@ -6,11 +6,13 @@
#include <private/autogen/config.h>
#include <hwloc.h>
+#include "misc.h"
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-static void usage(char *name, FILE *where)
+void usage(const char *name, FILE *where)
{
fprintf (where, "Usage: %s [options] <output>.xml [-n <name1] <input1>.xml [-n name2] <input2>.xml ...\n", name);
fprintf (where, "Options:\n");
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.1in
index 2074b70..096c479 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2009-2014 Inria. All rights reserved.
+.\" Copyright © 2009-2016 Inria. All rights reserved.
.\" Copyright © 2010 Université of Bordeaux
.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
.\" See COPYING in top-level directory.
@@ -46,6 +46,8 @@ the default policy is bind.
.TP
\fB\-\-get\fR
Report the current bindings.
+The output is an opaque bitmask that may be translated into objects with hwloc-calc
+(see EXAMPLES below).
.TP
\
When a command is given, the binding is displayed before executing
@@ -60,8 +62,22 @@ instead of CPU binding.
No location may be given since no binding is performed.
.TP
+\fB\-\-nodeset\fR
+Report binding as a NUMA memory node set instead of a CPU set
+if \-\-get was given.
+This is useful for manipulating CPU-less NUMA nodes since their
+cpuset is empty while their nodeset is correct.
+.TP
+\
+Also parse input bitmasks as nodesets instead of cpusets.
+
+.TP
\fB\-e\fR \fB\-\-get-last-cpu-location\fR
Report the last processors where the process ran.
+The output is an opaque bitmask that may be translated into objects with hwloc-calc
+(see EXAMPLES below).
+.TP
+\
Note that the result may already be outdated when reported since
the operating system may move the process to other processors
at any time according to the binding.
@@ -87,11 +103,18 @@ Require strict binding.
\fB\-\-pid\fR <pid>
Operate on pid <pid>
.TP
+\fB\-\-tid\fR <tid>
+Operate on thread <tid> instead of on an entire process.
+The feature is only supported on Linux for thread CPU binding,
+or for reporting the last processor where the thread ran if \fB\-e\fR was also passed.
+.TP
\fB\-p\fR \fB\-\-physical\fR
-take OS/physical indexes instead of logical indexes
+Interpret input locations with OS/physical indexes instead of logical indexes.
+This option does not apply to the output, see \fB\-\-get\fR above.
.TP
\fB\-l\fR \fB\-\-logical\fR
-take logical indexes instead of physical/OS indexes (default)
+Interpret input locations with logical indexes instead of physical/OS indexes (default).
+This option does not apply to the output, see \fB\-\-get\fR above.
.TP
\fB\-\-taskset\fR
Display CPU set strings in the format recognized by the taskset command-line
@@ -155,16 +178,17 @@ command line are described in hwloc(7).
To run the echo command on the first logical processor of the second
package:
- hwloc-bind package:1.pu:0 -- echo hello
+ $ hwloc-bind package:1.pu:0 -- echo hello
-which is exactly equivalent to
+which is exactly equivalent to the following line as long as there is
+no ambiguity between hwloc-bind option names and the executed command name:
- hwloc-bind package:1.pu:0 echo hello
+ $ hwloc-bind package:1.pu:0 echo hello
To bind the "echo" command to the first core of the second package and
the second core of the first package:
- hwloc-bind package:1.core:0 package:0.core:1 echo hello
+ hwloc-bind package:1.core:0 package:0.core:1 -- echo hello
Note that binding the "echo" command to multiple processors is
probably meaningless (because "echo" is likely implemented as a
@@ -174,11 +198,11 @@ hwloc-bind can do.
.PP
To run on the first three packages on the second and third nodes:
- hwloc-bind node:1-2.package:0:3 echo hello
+ $ hwloc-bind node:1-2.package:0:3 -- echo hello
which is also equivalent to:
- hwloc-bind node:1-2.package:0-2 echo hello
+ $ hwloc-bind node:1-2.package:0-2 -- echo hello
Note that if you attempt to bind to objects that do not exist,
hwloc-bind will not warn unless
@@ -187,61 +211,65 @@ was specified.
To run on processor with physical index 2 in package with physical index 1:
- hwloc-bind --physical package:1.core:2 echo hello
+ $ hwloc-bind --physical package:1.core:2 -- echo hello
To run on odd cores within even packages:
- hwloc-bind package:even.core:odd echo hello
+ $ hwloc-bind package:even.core:odd -- echo hello
To run on the first package, except on its second and fifth cores:
- hwloc-bind package:0 ~package:0.core:1 ~package:0.core:4 echo hello
+ $ hwloc-bind package:0 ~package:0.core:1 ~package:0.core:4 -- echo hello
To run anywhere except on the first package:
- hwloc-bind all ~package:0 echo hello
+ $ hwloc-bind all ~package:0 -- echo hello
To run on a core near the network interface named eth0:
- hwloc-bind os=eth0 echo hello
+ $ hwloc-bind os=eth0 -- echo hello
To run on a core near the PCI device whose bus ID is 0000:01:02.0:
- hwloc-bind pci=0000:01:02.0 echo hello
+ $ hwloc-bind pci=0000:01:02.0 -- echo hello
To bind memory on second memory node and run on first node (when supported by the OS):
- hwloc-bind --cpubind node:1 --membind node:0 echo hello
+ $ hwloc-bind --cpubind node:1 --membind node:0 -- echo hello
The --get option can report current bindings. This example shows
nesting hwloc-bind invocations to set a binding and then report it:
- hwloc-bind node:1.package:2 hwloc-bind --get
+ $ hwloc-bind node:1.package:2 -- hwloc-bind --get
+ 0x00004444,0x44000000
+
+hwloc-calc may convert this output into actual objects, either with logical or physical indexes:
+
+ $ hwloc-calc --physical -I pu `hwloc-bind --get`
+ 26,30,34,38,42,46
+ $ hwloc-calc --logical -I pu `hwloc-bind --get` --sep " "
+ 24 25 26 27 28 29
-On one of the hwloc developer's machines, this example
-.
-reports "0x00004444,0x44000000". The mask reported on your machine
-may be different.
.
.PP
Locations may also be specified as a hex bit mask (typically generated
by hwloc-calc). For example:
- hwloc-bind 0x00004444,0x44000000 echo hello
- hwloc-bind `hwloc-calc node:1.package:2` echo hello
+ $ hwloc-bind 0x00004444,0x44000000 -- echo hello
+ $ hwloc-bind `hwloc-calc node:1.package:2` -- echo hello
-Memory binding may also be reported:
+The current memory binding may also be reported:
- hwloc-bind --membind node:1 --mempolicy interleave -- hwloc-bind --get --membind
+ $ hwloc-bind --membind node:1 --mempolicy interleave -- hwloc-bind --get --membind
+ 0x000000f0 (interleave)
-This returns a string describing the memory binding, such as "0x000000f0
-(interleave)". Note that if the system does not contain any NUMA
-nodes, the reported string will indicate that the process is bound to
+Note that if the system is not NUMA, the reported string may indicate that the process is bound to
the entire system memory (e.g., "0xf...f").
+
.SH HINT
If the graphics-enabled lstopo is available, use for instance
- hwloc-bind core:2 -- lstopo --pid 0
+ $ hwloc-bind core:2 -- lstopo --pid 0
to check what the result of your binding command actually is.
lstopo will graphically show where it is bound to by hwloc-bind.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.c
index 3cddf1b..b3759d1 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-bind.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010, 2012 Université Bordeaux
* Copyright © 2009 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -10,6 +10,10 @@
#include <hwloc-calc.h>
#include <hwloc.h>
+#ifdef HWLOC_LINUX_SYS
+#include <hwloc/linux.h>
+#endif
+
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -17,6 +21,11 @@
#include "misc.h"
+#if defined(HWLOC_WIN_SYS) && !defined(__CYGWIN__)
+#include <process.h>
+#define execvp(a,b) (int)_execvp((a), (const char * const *)(b))
+#endif
+
void usage(const char *name, FILE *where)
{
fprintf(where, "Usage: %s [options] <location> -- command ...\n", name);
@@ -35,7 +44,11 @@ void usage(const char *name, FILE *where)
fprintf(where, " --get Retrieve current process binding\n");
fprintf(where, " -e --get-last-cpu-location\n"
" Retrieve the last processors where the current process ran\n");
+ fprintf(where, " --nodeset Display (and parse) cpusets as nodesets\n");
fprintf(where, " --pid <pid> Operate on process <pid>\n");
+#ifdef HWLOC_LINUX_SYS
+ fprintf(where, " --tid <tid> Operate on thread <tid>\n");
+#endif
fprintf(where, " --taskset Use taskset-specific format when displaying cpuset strings\n");
fprintf(where, "Input topology options:\n");
fprintf(where, " --restrict <set> Restrict the topology to processors listed in <set>\n");
@@ -55,6 +68,7 @@ int main(int argc, char *argv[])
int got_cpubind = 0, got_membind = 0;
int working_on_cpubind = 1; /* membind if 0 */
int get_binding = 0;
+ int use_nodeset = 0;
int get_last_cpu_location = 0;
unsigned long flags = HWLOC_TOPOLOGY_FLAG_WHOLE_IO|HWLOC_TOPOLOGY_FLAG_ICACHES;
int force = 0;
@@ -68,6 +82,7 @@ int main(int argc, char *argv[])
int opt;
int ret;
int pid_number = -1;
+ int tid_number = -1;
hwloc_pid_t pid = 0; /* only valid when pid_number > 0, but gcc-4.8 still reports uninitialized warnings */
char *callname;
@@ -128,6 +143,17 @@ int main(int argc, char *argv[])
opt = 1;
goto next;
}
+#ifdef HWLOC_LINUX_SYS
+ else if (!strcmp(argv[0], "--tid")) {
+ if (argc < 2) {
+ usage ("hwloc-bind", stderr);
+ exit(EXIT_FAILURE);
+ }
+ tid_number = atoi(argv[1]);
+ opt = 1;
+ goto next;
+ }
+#endif
else if (!strcmp (argv[0], "--version")) {
printf("%s %s\n", callname, HWLOC_VERSION);
exit(EXIT_SUCCESS);
@@ -152,6 +178,10 @@ int main(int argc, char *argv[])
get_binding = 1;
goto next;
}
+ else if (!strcmp (argv[0], "--nodeset")) {
+ use_nodeset = 1;
+ goto next;
+ }
else if (!strcmp (argv[0], "--cpubind")) {
working_on_cpubind = 1;
goto next;
@@ -217,6 +247,8 @@ int main(int argc, char *argv[])
ret = hwloc_calc_process_arg(topology, depth, argv[0], logical,
working_on_cpubind ? cpubind_set : membind_set,
+ use_nodeset,
+ working_on_cpubind ? 0 : 1,
verbose);
if (ret < 0) {
if (verbose > 0)
@@ -233,6 +265,11 @@ int main(int argc, char *argv[])
argv += opt+1;
}
+ if (pid_number > 0 && tid_number > 0) {
+ fprintf(stderr, "cannot operate both on tid and pid\n");
+ return EXIT_FAILURE;
+ }
+
if (pid_number > 0) {
pid = hwloc_pid_from_number(pid_number, !(get_binding || get_last_cpu_location));
/* no need to set_pid()
@@ -258,11 +295,19 @@ int main(int argc, char *argv[])
if (get_last_cpu_location) {
if (pid_number > 0)
err = hwloc_get_proc_last_cpu_location(topology, pid, cpubind_set, 0);
+#ifdef HWLOC_LINUX_SYS
+ else if (tid_number > 0)
+ err = hwloc_linux_get_tid_last_cpu_location(topology, tid_number, cpubind_set);
+#endif
else
err = hwloc_get_last_cpu_location(topology, cpubind_set, 0);
} else {
if (pid_number > 0)
err = hwloc_get_proc_cpubind(topology, pid, cpubind_set, 0);
+#ifdef HWLOC_LINUX_SYS
+ else if (tid_number > 0)
+ err = hwloc_linux_get_tid_cpubind(topology, tid_number, cpubind_set);
+#endif
else
err = hwloc_get_cpubind(topology, cpubind_set, 0);
}
@@ -270,20 +315,42 @@ int main(int argc, char *argv[])
const char *errmsg = strerror(errno);
if (pid_number > 0)
fprintf(stderr, "hwloc_get_proc_%s %d failed (errno %d %s)\n", get_last_cpu_location ? "last_cpu_location" : "cpubind", pid_number, errno, errmsg);
+ else if (tid_number > 0)
+ fprintf(stderr, "hwloc_get_tid_%s %d failed (errno %d %s)\n", get_last_cpu_location ? "last_cpu_location" : "cpubind", tid_number, errno, errmsg);
else
fprintf(stderr, "hwloc_get_%s failed (errno %d %s)\n", get_last_cpu_location ? "last_cpu_location" : "cpubind", errno, errmsg);
return EXIT_FAILURE;
}
- if (taskset)
- hwloc_bitmap_taskset_asprintf(&s, cpubind_set);
- else
- hwloc_bitmap_asprintf(&s, cpubind_set);
- } else {
+ if (use_nodeset) {
+ hwloc_bitmap_t nset = hwloc_bitmap_alloc();
+ hwloc_cpuset_to_nodeset(topology, cpubind_set, nset);
+ if (taskset)
+ hwloc_bitmap_taskset_asprintf(&s, nset);
+ else
+ hwloc_bitmap_asprintf(&s, nset);
+ hwloc_bitmap_free(nset);
+ } else {
+ if (taskset)
+ hwloc_bitmap_taskset_asprintf(&s, cpubind_set);
+ else
+ hwloc_bitmap_asprintf(&s, cpubind_set);
+ }
+
+ } else {
hwloc_membind_policy_t policy;
- if (pid_number > 0)
- err = hwloc_get_proc_membind(topology, pid, membind_set, &policy, 0);
- else
- err = hwloc_get_membind(topology, membind_set, &policy, 0);
+ if (pid_number > 0) {
+ if (use_nodeset)
+ err = hwloc_get_proc_membind_nodeset(topology, pid, membind_set, &policy, 0);
+ else
+ err = hwloc_get_proc_membind(topology, pid, membind_set, &policy, 0);
+ } else if (tid_number > 0) {
+ err = -1; errno = ENOSYS;
+ } else {
+ if (use_nodeset)
+ err = hwloc_get_membind_nodeset(topology, membind_set, &policy, 0);
+ else
+ err = hwloc_get_membind(topology, membind_set, &policy, 0);
+ }
if (err) {
const char *errmsg = strerror(errno);
if (pid_number > 0)
@@ -329,18 +396,22 @@ int main(int argc, char *argv[])
if (single)
hwloc_bitmap_singlify(membind_set);
if (pid_number > 0)
- ret = hwloc_set_proc_membind(topology, pid, membind_set, membind_policy, membind_flags);
- else
- ret = hwloc_set_membind(topology, membind_set, membind_policy, membind_flags);
+ ret = hwloc_set_proc_membind_nodeset(topology, pid, membind_set, membind_policy, membind_flags);
+ else if (tid_number > 0) {
+ ret = -1; errno = ENOSYS;
+ } else
+ ret = hwloc_set_membind_nodeset(topology, membind_set, membind_policy, membind_flags);
if (ret && verbose >= 0) {
int bind_errno = errno;
const char *errmsg = strerror(bind_errno);
char *s;
hwloc_bitmap_asprintf(&s, membind_set);
if (pid_number > 0)
- fprintf(stderr, "hwloc_set_proc_membind %s %d failed (errno %d %s)\n", s, pid_number, bind_errno, errmsg);
+ fprintf(stderr, "hwloc_set_proc_membind %s (policy %u flags %x) PID %d failed (errno %d %s)\n",
+ s, membind_policy, membind_flags, pid_number, bind_errno, errmsg);
else
- fprintf(stderr, "hwloc_set_membind %s failed (errno %d %s)\n", s, bind_errno, errmsg);
+ fprintf(stderr, "hwloc_set_membind %s (policy %u flags %x) failed (errno %d %s)\n",
+ s, membind_policy, membind_flags, bind_errno, errmsg);
free(s);
}
if (ret && !force)
@@ -360,10 +431,19 @@ int main(int argc, char *argv[])
fprintf(stderr, "binding on cpu set %s\n", s);
free(s);
}
+ if (got_membind && !hwloc_bitmap_isequal(membind_set, cpubind_set)) {
+ if (verbose)
+ fprintf(stderr, "Conflicting CPU and memory binding requested, adding HWLOC_CPUBIND_NOMEMBIND flag.\n");
+ cpubind_flags |= HWLOC_CPUBIND_NOMEMBIND;
+ }
if (single)
hwloc_bitmap_singlify(cpubind_set);
if (pid_number > 0)
ret = hwloc_set_proc_cpubind(topology, pid, cpubind_set, cpubind_flags);
+#ifdef HWLOC_LINUX_SYS
+ else if (tid_number > 0)
+ ret = hwloc_linux_set_tid_cpubind(topology, tid_number, cpubind_set);
+#endif
else
ret = hwloc_set_cpubind(topology, cpubind_set, cpubind_flags);
if (ret && verbose >= 0) {
@@ -372,9 +452,14 @@ int main(int argc, char *argv[])
char *s;
hwloc_bitmap_asprintf(&s, cpubind_set);
if (pid_number > 0)
- fprintf(stderr, "hwloc_set_proc_cpubind %s %d failed (errno %d %s)\n", s, pid_number, bind_errno, errmsg);
+ fprintf(stderr, "hwloc_set_proc_cpubind %s (flags %x) PID %d failed (errno %d %s)\n",
+ s, cpubind_flags, pid_number, bind_errno, errmsg);
+ else if (tid_number > 0)
+ fprintf(stderr, "hwloc_set_tid_cpubind %s (flags %x) PID %d failed (errno %d %s)\n",
+ s, cpubind_flags, tid_number, bind_errno, errmsg);
else
- fprintf(stderr, "hwloc_set_cpubind %s failed (errno %d %s)\n", s, bind_errno, errmsg);
+ fprintf(stderr, "hwloc_set_cpubind %s (flags %x) failed (errno %d %s)\n",
+ s, cpubind_flags, bind_errno, errmsg);
free(s);
}
if (ret && !force)
@@ -386,7 +471,7 @@ int main(int argc, char *argv[])
hwloc_topology_destroy(topology);
- if (pid_number > 0)
+ if (pid_number > 0 || tid_number > 0)
return EXIT_SUCCESS;
if (0 == argc) {
@@ -396,6 +481,10 @@ int main(int argc, char *argv[])
return EXIT_FAILURE;
}
+ /* FIXME: check whether Windows execvp() passes INHERIT_PARENT_AFFINITY to CreateProcess()
+ * because we need to propagate processor group affinity. However process-wide affinity
+ * isn't supported with processor groups so far.
+ */
ret = execvp(argv[0], argv);
if (ret) {
fprintf(stderr, "%s: Failed to launch executable \"%s\"\n",
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.1in
index f47cea3..b414da5 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2010-2014 Inria. All rights reserved.
+.\" Copyright © 2010-2016 Inria. All rights reserved.
.\" Copyright © 2009 Cisco Systems, Inc. All rights reserved.
.\" See COPYING in top-level directory.
.TH HWLOC-CALC "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
@@ -157,6 +157,12 @@ only affects the processing the following arguments.
.
.PP
.B NOTE:
+hwloc-calc cannot manipulate NUMA memory node sets.
+It only manipulates CPU sets, which means it cannot do much
+about CPU-less NUMA nodes.
+.
+.PP
+.B NOTE:
It is highly recommended that you read the hwloc(7) overview page
before reading this man page. Most of the concepts described in
hwloc(7) directly apply to the hwloc-calc utility.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.c
index 3b4aa41..6a6a080 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux
* Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -266,12 +266,12 @@ int main(int argc, char *argv[])
if (!strcmp(argv[0], "--number-of") || !strcmp(argv[0], "-N")) {
if (argc < 2) {
usage(callname, stderr);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
if (hwloc_calc_type_depth(argv[1], &numberoftype, &numberofdepth) < 0) {
fprintf(stderr, "unrecognized --number-of type or depth %s\n", argv[1]);
usage(callname, stderr);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
argv++;
argc--;
@@ -280,12 +280,12 @@ int main(int argc, char *argv[])
if (!strcmp(argv[0], "--intersect") || !strcmp(argv[0], "-I")) {
if (argc < 2) {
usage(callname, stderr);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
if (hwloc_calc_type_depth(argv[1], &intersecttype, &intersectdepth) < 0) {
fprintf(stderr, "unrecognized --intersect type or depth %s\n", argv[1]);
usage(callname, stderr);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
argv++;
argc--;
@@ -295,7 +295,7 @@ int main(int argc, char *argv[])
char *tmp, *next;
if (argc < 2) {
usage(callname, stderr);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
hiernblevels = 1;
tmp = argv[1];
@@ -316,7 +316,7 @@ int main(int argc, char *argv[])
if (hwloc_calc_type_depth(tmp, &hiertype[i], &hierdepth[i]) < 0) {
fprintf(stderr, "unrecognized --hierarchical type or depth %s\n", tmp);
usage(callname, stderr);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
tmp = next+1;
}
@@ -407,7 +407,7 @@ int main(int argc, char *argv[])
hwloc_topology_set_flags(topology, flags);
if (input) {
/* only update the input when actually using it */
- err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ err = hwloc_utils_enable_input_format(topology, input, &input_format, verbose, callname);
if (err)
return err;
}
@@ -417,7 +417,7 @@ int main(int argc, char *argv[])
}
cmdline_args++;
- if (hwloc_calc_process_arg(topology, depth, argv[0], logicali, set, verbose) < 0)
+ if (hwloc_calc_process_arg(topology, depth, argv[0], logicali, set, 0, 0, verbose) < 0)
fprintf(stderr, "ignored unrecognized argument %s\n", argv[0]);
next:
@@ -452,7 +452,7 @@ int main(int argc, char *argv[])
hwloc_topology_set_flags(topology, flags);
if (input) {
/* only update the input when actually using it */
- err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ err = hwloc_utils_enable_input_format(topology, input, &input_format, verbose, callname);
if (err)
return err;
}
@@ -465,15 +465,23 @@ int main(int argc, char *argv[])
char *current, *tmpline;
/* stop if line is empty */
- if (!fgets(line, len, stdin))
+ if (!fgets(line, (int)len, stdin))
break;
/* keep reading until we get EOL */
tmpline = line;
while (!strchr(tmpline, '\n')) {
- line = realloc(line, len*2);
+ char *tmp;
+ tmp = realloc(line, len*2);
+ if (!tmp) {
+ /* failed to allocate, ignore that line */
+ fprintf(stderr, "Failed to allocate line buffer, line ignored.\n");
+ free(line);
+ goto out;
+ }
+ line = tmp;
tmpline = line + len-1;
- if (!fgets(tmpline, len+1, stdin))
+ if (!fgets(tmpline, (int)(len+1), stdin))
break;
len *= 2;
}
@@ -486,7 +494,7 @@ int main(int argc, char *argv[])
if (!token)
break;
current = NULL;
- if (hwloc_calc_process_arg(topology, depth, token, logicali, set, verbose) < 0)
+ if (hwloc_calc_process_arg(topology, depth, token, logicali, set, 0, 0, verbose) < 0)
fprintf(stderr, "ignored unrecognized argument %s\n", token);
}
hwloc_calc_output(topology, outsep, set);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.h b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.h
index 54c9307..c9afe2e 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-calc.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -30,8 +30,8 @@ typedef enum hwloc_calc_append_mode_e {
} hwloc_calc_append_mode_t;
static __hwloc_inline int
-hwloc_calc_append_cpuset(hwloc_bitmap_t set, hwloc_const_bitmap_t newset,
- hwloc_calc_append_mode_t mode, int verbose)
+hwloc_calc_append_set(hwloc_bitmap_t set, hwloc_const_bitmap_t newset,
+ hwloc_calc_append_mode_t mode, int verbose)
{
char *s1, *s2;
hwloc_bitmap_asprintf(&s1, newset);
@@ -534,23 +534,31 @@ hwloc_calc_process_type_arg(hwloc_topology_t topology, unsigned topodepth,
return hwloc_calc_append_object_range(topology, topodepth, hwloc_topology_get_complete_cpuset(topology), depth, sep+1, logical, cbfunc, cbdata, verbose);
}
+struct hwloc_calc_process_arg_cpuset_cbdata_s {
+ hwloc_bitmap_t set;
+ int nodeset_output;
+};
+
static __hwloc_inline void
hwloc_calc_process_arg_cpuset_cb(void *_data, hwloc_obj_t obj, int verbose)
{
- hwloc_bitmap_t set = _data;
+ struct hwloc_calc_process_arg_cpuset_cbdata_s *cbdata = _data;
+ hwloc_bitmap_t set = cbdata->set;
/* walk up out of I/O objects */
while (obj && !obj->cpuset)
obj = obj->parent;
if (!obj)
/* do nothing */
return;
- hwloc_calc_append_cpuset(set, obj->cpuset, HWLOC_CALC_APPEND_ADD, verbose);
+ hwloc_calc_append_set(set,
+ cbdata->nodeset_output ? obj->nodeset : obj->cpuset,
+ HWLOC_CALC_APPEND_ADD, verbose);
}
static __hwloc_inline int
hwloc_calc_process_arg(hwloc_topology_t topology, unsigned topodepth,
const char *arg, int logical, hwloc_bitmap_t set,
- int verbose)
+ int nodeset_input, int nodeset_output, int verbose)
{
hwloc_calc_append_mode_t mode = HWLOC_CALC_APPEND_ADD;
size_t typelen;
@@ -568,19 +576,23 @@ hwloc_calc_process_arg(hwloc_topology_t topology, unsigned topodepth,
}
if (!strcmp(arg, "all") || !strcmp(arg, "root"))
- return hwloc_calc_append_cpuset(set, hwloc_topology_get_topology_cpuset(topology), mode, verbose);
+ return hwloc_calc_append_set(set,
+ nodeset_output ? hwloc_topology_get_topology_nodeset(topology) : hwloc_topology_get_topology_cpuset(topology),
+ mode, verbose);
/* try to match a type/depth followed by a special character */
typelen = strspn(arg, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
if (typelen && (arg[typelen] == ':' || arg[typelen] == '=' || arg[typelen] == '[')) {
/* process type/depth */
- hwloc_bitmap_t newset = hwloc_bitmap_alloc();
+ struct hwloc_calc_process_arg_cpuset_cbdata_s cbdata;
+ cbdata.set = hwloc_bitmap_alloc();
+ cbdata.nodeset_output = nodeset_output;
err = hwloc_calc_process_type_arg(topology, topodepth, arg, typelen, logical,
- hwloc_calc_process_arg_cpuset_cb, newset,
+ hwloc_calc_process_arg_cpuset_cb, &cbdata,
verbose);
if (!err)
- err = hwloc_calc_append_cpuset(set, newset, mode, verbose);
- hwloc_bitmap_free(newset);
+ err = hwloc_calc_append_set(set, cbdata.set, mode, verbose);
+ hwloc_bitmap_free(cbdata.set);
} else {
/* try to match a cpuset */
@@ -641,7 +653,19 @@ hwloc_calc_process_arg(hwloc_topology_t topology, unsigned topodepth,
hwloc_bitmap_taskset_sscanf(newset, arg);
else
hwloc_bitmap_sscanf(newset, arg);
- err = hwloc_calc_append_cpuset(set, newset, mode, verbose);
+ if (nodeset_output && !nodeset_input) {
+ hwloc_bitmap_t newnset = hwloc_bitmap_alloc();
+ hwloc_cpuset_to_nodeset(topology, newset, newnset);
+ err = hwloc_calc_append_set(set, newnset, mode, verbose);
+ hwloc_bitmap_free(newnset);
+ } else if (nodeset_input && !nodeset_output) {
+ hwloc_bitmap_t newcset = hwloc_bitmap_alloc();
+ hwloc_cpuset_from_nodeset(topology, newcset, newset);
+ err = hwloc_calc_append_set(set, newcset, mode, verbose);
+ hwloc_bitmap_free(newcset);
+ } else {
+ err = hwloc_calc_append_set(set, newset, mode, verbose);
+ }
hwloc_bitmap_free(newset);
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.1in
index d893d97..2707627 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2013 Inria. All rights reserved.
+.\" Copyright © 2013-2016 Inria. All rights reserved.
.\" See COPYING in top-level directory.
.TH HWLOC-DIFF "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
.SH NAME
@@ -59,6 +59,12 @@ all XML files in a directory.
.
.PP
.B NOTE:
+If some application-specific userdata were been exported to the input XMLs,
+they will be ignored and discarded from the output because hwloc has no way
+to understand and compare them.
+.
+.PP
+.B NOTE:
It is highly recommended that you read the hwloc(7) overview page
before reading this man page. Most of the concepts described in
hwloc(7) directly apply to the hwloc-diff utility.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.c
index f6b9d69..8f0ba64 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-diff.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013-2014 Inria. All rights reserved.
+ * Copyright © 2013-2015 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -7,7 +7,9 @@
#include <hwloc.h>
#include <hwloc/diff.h>
-static void usage(const char *callname __hwloc_attribute_unused, FILE *where)
+#include "misc.h"
+
+void usage(const char *callname __hwloc_attribute_unused, FILE *where)
{
fprintf(where, "Usage: hwloc-diff [options] <old.xml> <new.xml> [<output.diff.xml>]\n");
fprintf(where, "Options:\n");
@@ -20,7 +22,7 @@ int main(int argc, char *argv[])
{
hwloc_topology_t topo1, topo2;
hwloc_topology_diff_t firstdiff = NULL, diff;
- unsigned long flags = HWLOC_TOPOLOGY_FLAG_WHOLE_IO | HWLOC_TOPOLOGY_FLAG_ICACHES;
+ unsigned long flags = HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM | HWLOC_TOPOLOGY_FLAG_WHOLE_IO | HWLOC_TOPOLOGY_FLAG_ICACHES;
char *callname, *input1, *input2, *output, *outputname, *refname = NULL;
char *xmlbuffer;
int xmlbuflen;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distances.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distances.c
index 0f15985..09e0274 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distances.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distances.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -115,7 +115,7 @@ int main(int argc, char *argv[])
}
if (input) {
- err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ err = hwloc_utils_enable_input_format(topology, input, &input_format, verbose, callname);
if (err)
return err;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distrib.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distrib.c
index 4de6f31..f867e67 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distrib.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-distrib.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -201,7 +201,7 @@ int main(int argc, char *argv[])
cpuset = malloc(n * sizeof(hwloc_bitmap_t));
if (input) {
- err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ err = hwloc_utils_enable_input_format(topology, input, &input_format, verbose, callname);
if (err)
return err;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata-knl.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata-knl.c
new file mode 100644
index 0000000..9daa47c
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata-knl.c
@@ -0,0 +1,491 @@
+/*
+ * Copyright © 2015-2016, 2015 Intel
+ * Copyright © 2015 Inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#define KERNEL_SMBIOS_SYSFS "/sys/firmware/dmi/entries"
+
+#define KNL_SMBIOS_GROUP_STRING "Group: Knights Landing Information"
+
+/* Header is common part of all SMBIOS entries */
+struct smbios_header
+{
+ uint8_t type;
+ uint8_t length;
+ uint16_t handle;
+};
+
+struct smbios_group
+{
+ uint8_t group_name;
+};
+
+/* This structrures are padded by compiler
+ * So we hardcode size of the struct and use it
+ * instead of sizeof() */
+#define GROUP_ENTRY_SIZE 3
+struct smbios_group_entry
+{
+ uint8_t type;
+ uint16_t handle;
+};
+
+/* KNL header is similar as SMBIOS header
+ * decided to add it for readability */
+#define SMBIOS_KNL_HEADER_SIZE 7
+struct knl_smbios_header
+{
+ uint8_t type;
+ uint8_t length;
+ uint16_t handle;
+ uint16_t member_id;
+ uint8_t member_name;
+};
+
+/* general info data */
+#define SMBIOS_KNL_GENERAL_INFO_SIZE 5
+struct knl_general_info
+{
+ uint8_t supp_cluster_mode;
+ uint8_t cluster_mode;
+ uint8_t supp_memory_mode;
+ uint8_t memory_mode;
+ uint8_t cache_info;
+};
+
+/* memory info */
+#define SMBIOS_KNL_EDC_INFO_SIZE 9
+struct knl_edc_info
+{
+ uint8_t mcdram_present;
+ uint8_t mcdram_enabled;
+ uint8_t allowed_channels;
+ uint8_t reserved[4];
+ uint8_t mcdram_info_size;
+ uint8_t mcdram_info_count;
+};
+
+/* mcdram controller structure */
+struct knl_mcdram_info {
+ uint32_t status;
+ uint8_t controller;
+ uint8_t channel;
+ uint16_t size64MB;
+ uint8_t product_revision;
+ uint8_t fwmajor_revision;
+ uint8_t fwminor_revision;
+ uint8_t fwpatch_revision;
+};
+
+/* internal data */
+struct parser_data
+{
+ uint64_t mcdram_regular;
+ uint64_t mcdram_cache;
+ int cluster_mode;
+ int memory_mode;
+ int cache_info;
+ int type_count;
+ int knl_types[64];
+};
+
+enum cluster_mode
+{
+ QUADRANT = 1,
+ HEMISPHERE = 2,
+ SNC4 = 4,
+ SNC2 = 8,
+ ALL2ALL = 16
+};
+
+enum memory_mode
+{
+ CACHE = 1,
+ FLAT = 2,
+ HYBRID = 4
+};
+
+enum hybrid_cache
+{
+ H25 = 1,
+ H50 = 2,
+ H100 = 4 /* Incorrect but possible value */
+};
+
+static int get_file_buffer(const char *file, char *buffer, int size)
+{
+ FILE *f;
+
+ if (!buffer) {
+ fprintf(stderr, "Unable to allocate buffer\n");
+ return 0;
+ }
+
+ f = fopen(file, "rb");
+ if (!f) {
+ fprintf(stderr, "Unable to open %s (%s)\n", file, strerror(errno));
+ return 0;
+ }
+
+ printf(" File = %s, size = %d\n", file, size);
+
+ size = fread(buffer, 1, size, f);
+ if (size == 0) {
+ fprintf(stderr, "Unable to read file\n");
+ fclose(f);
+ return 0;
+ }
+
+ fclose(f);
+ return size;
+}
+
+static int is_knl_entry(struct smbios_header *h, const char *end, const char *query)
+{
+ char *group_strings = (char*)h + h->length;
+ do {
+ int len = strlen(group_strings);
+ if (!strncmp(group_strings, query, len))
+ return 1;
+ /* SMBIOS string entries end with "\0\0"
+ * if length is 0 break and return
+ * */
+ if (len == 0)
+ break;
+ group_strings += len;
+ } while(group_strings < end);
+
+ return 0;
+}
+
+static int is_knl_group(struct smbios_header *h, const char *end)
+{
+ if (h->type != 14) {
+ fprintf(stderr, "SMBIOS table is not group table\n");
+ return -1;
+ }
+
+ return is_knl_entry(h, end, KNL_SMBIOS_GROUP_STRING);
+}
+
+#define KNL_MEMBER_ID_GENERAL 0x1
+#define KNL_MEMBER_ID_EDC 0x2
+
+#define PATH_SIZE 512
+#define SMBIOS_FILE_BUF_SIZE 4096
+
+static int process_smbios_group(const char *input_fsroot, char *dir_name, struct parser_data *data)
+{
+ char path[PATH_SIZE];
+ char file_buf[SMBIOS_FILE_BUF_SIZE];
+ struct smbios_header *h;
+ char *p;
+ char *end;
+ int size;
+ int i;
+ snprintf(path, PATH_SIZE-1, "%s/" KERNEL_SMBIOS_SYSFS "/%s/raw", input_fsroot, dir_name);
+ path[PATH_SIZE-1] = 0;
+
+ size = get_file_buffer(path, file_buf, SMBIOS_FILE_BUF_SIZE);
+ if (!size) {
+ fprintf(stderr, "Unable to read raw table file\n");
+ return -1;
+ }
+
+ h = (struct smbios_header*)file_buf;
+ end = file_buf+size;
+ if (!is_knl_group(h, end)) {
+ fprintf(stderr, "SMBIOS table does not contain KNL entries\n");
+ return -1;
+ }
+
+ p = file_buf + sizeof(struct smbios_header) + sizeof(struct smbios_group);
+ if ((char*)p >= end) {
+ fprintf(stderr, "SMBIOS table does not have entries\n");
+ return -1;
+ }
+
+ end = file_buf+h->length;
+
+ i = 0;
+ for (; p < end; i++, p+=3) {
+ struct smbios_group_entry *e = (struct smbios_group_entry*)p;
+ data->knl_types[i] = e->type;
+ printf(" Found KNL type = %d\n", e->type);
+ }
+
+ data->type_count = i;
+ return 0;
+}
+
+static int process_knl_entry(const char *input_fsroot, char *dir_name, struct parser_data *data)
+{
+ char path[PATH_SIZE];
+ char file_buf[SMBIOS_FILE_BUF_SIZE];
+ char *end;
+ int size;
+ struct knl_smbios_header *h;
+
+ snprintf(path, PATH_SIZE-1, "%s/" KERNEL_SMBIOS_SYSFS "/%s/raw", input_fsroot, dir_name);
+ path[PATH_SIZE-1] = 0;
+
+ size = get_file_buffer(path, file_buf, SMBIOS_FILE_BUF_SIZE);
+ if (!size) {
+ fprintf(stderr, "Unable to read raw table file\n");
+ return -1;
+ }
+
+ end = file_buf+size;
+ h = (struct knl_smbios_header*)file_buf;
+ if (h->member_id & KNL_MEMBER_ID_GENERAL) {
+ struct knl_general_info *info =
+ (struct knl_general_info*) (file_buf+SMBIOS_KNL_HEADER_SIZE);
+ printf(" Getting general KNL info\n");
+ data->cluster_mode = info->cluster_mode;
+ data->memory_mode = info->memory_mode;
+ data->cache_info = info->cache_info;
+ } else if (h->member_id & KNL_MEMBER_ID_EDC) {
+ struct knl_edc_info *info = (struct knl_edc_info*)(file_buf+SMBIOS_KNL_HEADER_SIZE);
+ if (info->mcdram_present && info->mcdram_enabled) {
+ struct knl_mcdram_info *mi = (struct knl_mcdram_info*)(info + 1);
+ /* we use always smbios size not struct size
+ * as it can change in future.*/
+ int struct_size = info->mcdram_info_size;
+ int i = 0;
+
+ if (0 == struct_size) {
+ printf(" MCDRAM info size is set to 0, falling back to known size\n");
+ struct_size = sizeof(*mi);
+ }
+ printf(" Getting MCDRAM KNL info. Count=%d struct size=%d\n",
+ (int)info->mcdram_info_count, struct_size);
+ for ( ; i < info->mcdram_info_count; i++) {
+ if ((char*)mi >= end) {
+ fprintf(stderr, "SMBIOS KNL entry is too small\n");
+ return -1;
+ }
+ printf(" MCDRAM controller %d\n", mi->controller);
+ if (mi->status & 0x1) {
+ printf(" Controller fused\n");
+ } else {
+ data->mcdram_regular += mi->size64MB;
+ printf(" Size = %d MB\n", (int)mi->size64MB*64);
+ }
+ mi = (struct knl_mcdram_info*)(((char*)mi)+struct_size);
+ }
+ /* convert to bytes */
+ printf(" Total MCDRAM %llu MB\n", (long long unsigned int)data->mcdram_regular*64);
+ data->mcdram_regular *= 64*1024*1024;
+ } else {
+ data->mcdram_regular = 0;
+ data->mcdram_cache = 0;
+ }
+
+ } else {
+ /* We skip unknown table */
+ fprintf(stderr, "Ignoring unknown SMBIOS entry type=%x\n", h->member_id);
+ }
+
+ return 0;
+}
+static char* get_memory_mode_str(int memory_mode, int hybrid_cache_size)
+{
+ switch (memory_mode) {
+ case CACHE: return "Cache";
+ case FLAT: return "Flat";
+ case HYBRID:
+ if (hybrid_cache_size == H25) {
+ return "Hybrid25";
+ } else if (hybrid_cache_size == H50) {
+ return "Hybrid50";
+ }
+ return "Unknown";
+ default:
+ return "Unknown";
+ }
+}
+
+static char* get_cluster_mode_str(int cluster_mode)
+{
+ switch (cluster_mode) {
+ case QUADRANT: return "Quadrant";
+ case HEMISPHERE: return "Hemisphere";
+ case ALL2ALL: return "All2All";
+ case SNC2: return "SNC2";
+ case SNC4: return "SNC4";
+ default:
+ return "Unknown";
+ }
+}
+
+static int print_result(struct parser_data *data, const char *out_file)
+{
+ int node_count = 0;
+ int fd;
+ FILE *f;
+
+ switch (data->cluster_mode) {
+ case QUADRANT:
+ node_count = 1;
+ break;
+ case HEMISPHERE:
+ node_count = 1;
+ break;
+ case ALL2ALL:
+ node_count = 1;
+ break;
+ case SNC2:
+ node_count = 2;
+ break;
+ case SNC4:
+ node_count = 4;
+ break;
+ default:
+ fprintf(stderr, "Incorrect cluster mode %d\n", data->cluster_mode);
+ return -1;
+ }
+
+ switch (data->memory_mode) {
+ case CACHE:
+ data->mcdram_cache = data->mcdram_regular;
+ data->mcdram_regular = 0;
+ break;
+ case FLAT:
+ data->mcdram_cache = 0;
+ break;
+ case HYBRID:
+ if (data->cache_info == H25) {
+ data->mcdram_cache = data->mcdram_regular/4;
+ } else if (data->cache_info == H50) {
+ data->mcdram_cache = data->mcdram_regular/2;
+ } else if (data->cache_info == H100) {
+ data->mcdram_cache = data->mcdram_regular;
+ } else {
+ fprintf(stderr, "SMBIOS reserved cache info value %d\n", data->cache_info);
+ return -1;
+ }
+ data->mcdram_regular -= data->mcdram_cache;
+ break;
+ default:
+ fprintf(stderr, "Incorrect memory mode %d\n", data->memory_mode);
+ return -1;
+ }
+
+ printf(" Cluster Mode: %s Memory Mode: %s\n",
+ get_cluster_mode_str(data->cluster_mode),
+ get_memory_mode_str(data->memory_mode, data->cache_info));
+ printf(" MCDRAM total = %llu bytes, cache = %llu bytes\n",
+ (long long unsigned int)data->mcdram_regular,
+ (long long unsigned int)data->mcdram_cache);
+ data->mcdram_regular /= node_count;
+ data->mcdram_cache /= node_count;
+ printf(" MCDRAM total = %llu bytes, cache = %llu bytes per node\n",
+ (long long unsigned int)data->mcdram_regular,
+ (long long unsigned int)data->mcdram_cache);
+
+ /* Now we can start printing stuff */
+ /* use open+fdopen so that we can specify the file creation mode */
+ fd = open(out_file, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
+ if (fd < 0) {
+ fprintf(stderr, "Unable to open file `%s' (%s).\n", out_file, strerror(errno));
+ return -1;
+ }
+ f = fdopen(fd, "w");
+ if (!f) {
+ fprintf(stderr, "Unable to fdopen file `%s' (%s).\n", out_file, strerror(errno));
+ close(fd);
+ return -1;
+ }
+
+ fprintf(f, "version: 2\n");
+ /* We cache is equal for node */
+ fprintf(f, "cache_size: %llu\n",
+ (long long unsigned int)data->mcdram_cache);
+ fprintf(f, "associativity: 1\n");// direct-mapped cache
+ fprintf(f, "inclusiveness: 1\n");// inclusive cache
+ fprintf(f, "line_size: 64\n");
+ fprintf(f, "cluster_mode: %s\n", get_cluster_mode_str(data->cluster_mode));
+ fprintf(f, "memory_mode: %s\n", get_memory_mode_str(data->memory_mode, data->cache_info));
+ fflush(f);
+ fclose(f);
+ close(fd);
+ return 0;
+}
+
+/**
+* Seeks SMBIOS sysfs for entry with type
+*/
+int hwloc_dump_hwdata_knl_smbios(const char *input_fsroot, const char *outfile);
+
+int hwloc_dump_hwdata_knl_smbios(const char *input_fsroot, const char *outfile)
+{
+ DIR *d;
+ int i;
+ struct dirent *dir;
+ struct parser_data data = { 0 };
+ char path[PATH_SIZE];
+ int err;
+
+ printf("Dumping KNL SMBIOS Memory-Side Cache information:\n");
+
+ snprintf(path, PATH_SIZE-1, "%s/" KERNEL_SMBIOS_SYSFS, input_fsroot);
+ path[PATH_SIZE-1] = 0;
+
+ d = opendir(path);
+ if (!d)
+ return -1;
+
+ /* process KNL entries
+ * start with group (type 14, dash os to omit 140 types) then find SMBIOS types for
+ * Knights Landing mcdram indofrmation
+ */
+ while ((dir = readdir(d))) {
+ if (strncmp("14-", dir->d_name, 3) == 0) {
+ err = process_smbios_group(input_fsroot, dir->d_name, &data);
+ if (err < 0) {
+ closedir(d);
+ return err;
+ }
+ }
+ }
+
+ if (!data.type_count) {
+ printf (" Couldn't find any KNL information.\n");
+ closedir(d);
+ return 0;
+ }
+
+ /* We probably have KNL type identifiers here */
+ for (i = 0; i < data.type_count; i++) {
+ char tab[16] = {0};
+ int l = snprintf(tab, sizeof(tab)-1, "%d-", data.knl_types[i]);
+ printf (" Seeking dir ̀`%s' %d\n", tab, l);
+ rewinddir(d);
+ while ((dir = readdir(d))) {
+ if (strncmp(dir->d_name, tab, l) == 0) {
+ err = process_knl_entry(input_fsroot, dir->d_name, &data);
+ if (err < 0) {
+ closedir(d);
+ return err;
+ }
+ }
+ }
+ }
+
+ closedir(d);
+
+ return print_result(&data, outfile);
+}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.1in
new file mode 100644
index 0000000..68b2be1
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.1in
@@ -0,0 +1,68 @@
+.\" -*- nroff -*-
+.\" Copyright © 2015-2016 Inria. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-DUMP-HWDATA "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-dump-hwdata \- Dump topology and locality information from hardware tables
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.
+.B hwloc-dump-hwdata
+[\fIoptions\fR]
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.
+.TP 10
+\fB\-o <dir>\fR
+save output files to directory <dir> instead of the default
+\fI#RUNSTATEDIR#/hwloc/\fR that was specified at configure time.
+
+You may want to set the HWLOC_DUMPED_HWDATA_DIR environment variable
+as well so that the hwloc library looks for dumped files in that same
+directory.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc may benefit from some locality and topology information from
+SMBIOS or ACPI tables.
+They are accessible from raw hardware files under directories such
+/sys/firmware/dmi/ or /sys/firmware/acpi/ on Linux.
+These files are usually only accessible to root.
+.
+.PP
+The hwloc-dump-hwdata tool dumps the useful contents of such files into
+human-readable and world-accessible files. The intent is to run the tool
+once during boot and have the main (non-privileged) hwloc library gather
+information from these human-readable files.
+.
+.PP
+\fBhwloc-dump-hwdata is currently only useful on Intel Knights Landing
+Xeon Phi platforms\fR.
+.
+.PP
+The current list of dumped information is:
+.
+.TP 5
+\fBIntel Knights Landing memory, cache and clustering configuration\fR
+gathered from specific SMBIOS entries such as
+\fI/sys/firmware/dmi/entries/14-*\fR and
+\fI/sys/firmware/dmi/entries/160-*\fR,
+and saved in file \fIknl_memoryside_cache\fR.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1)
+.sp
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.c
new file mode 100644
index 0000000..dd4549f
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-dump-hwdata.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright © 2015 Intel, Inc. All rights reserved.
+ * Copyright © 2015-2016 Inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+#include <assert.h>
+
+#define DEFAULT_DUMP_DIR RUNSTATEDIR "/hwloc"
+
+extern int hwloc_dump_hwdata_knl_smbios(const char *input_fsroot, const char *filename);
+
+static void usage(const char *name, FILE *where)
+{
+ fprintf (where, "Usage: %s [ options ] ...\n", name);
+ fprintf (where, "Options:\n");
+ fprintf (where, " -o <dir> Output files to directory <dir> instead of " DEFAULT_DUMP_DIR "\n");
+}
+
+int main(int argc, char *argv[])
+{
+ const char *callname = argv[0];
+ char *dirname = DEFAULT_DUMP_DIR;
+ char *input_fsroot;
+ char *filename;
+ int err;
+
+ argv++; argc--;
+ while (argc) {
+ if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help")) {
+ usage(callname, stdout);
+ exit(EXIT_SUCCESS);
+ } else if (!strcmp(argv[0], "-o")) {
+ if (argc == 1) {
+ fprintf(stderr, "Missing output directory name.\n");
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ dirname = argv[1];
+ argc -= 2;
+ argv += 2;
+ } else {
+ fprintf(stderr, "Unknown option: %s\n", argv[0]);
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ err = mkdir(dirname, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
+ if (err < 0) {
+ if (errno == EEXIST) {
+ if (access(dirname, X_OK|W_OK)) {
+ fprintf(stderr, "Cannot enter and modify output directory `%s'.\n", dirname);
+ exit(EXIT_FAILURE);
+ }
+ } else {
+ fprintf(stderr, "Failed to create output directory `%s' (%s).\n", dirname, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ input_fsroot = getenv("HWLOC_FSROOT");
+ if (!input_fsroot)
+ input_fsroot = "/";
+
+ err = asprintf(&filename, "%s/knl_memoryside_cache", dirname);
+ assert(err >= 0);
+ hwloc_dump_hwdata_knl_smbios(input_fsroot, filename);
+ free(filename);
+ printf("\n");
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.1in
index 1cba9b3..2a38396 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.1in
@@ -1,6 +1,6 @@
.\" -*- nroff -*-
.\" Copyright © 2010 Jirka Hladky
-.\" Copyright © 2010-2015 Inria. All rights reserved.
+.\" Copyright © 2010-2016 Inria. All rights reserved.
.\" See COPYING in top-level directory.
.TH HWLOC-GATHER-TOPOLOGY "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
.SH NAME
@@ -23,6 +23,9 @@ and the lstopo output for later (possibly offline) usage
\fB\-\-io\fR
Also gather I/O related files.
The gathering may be much slower, and the generated archive may be much bigger.
+\fB\-\-dmi\fR
+Also gather DMI/SMBIOS related files.
+The gathering requires root access, and the dmi-sysfs kernel module should be loaded.
.TP
\fB\-h\fR \fB\-\-help\fR
Display help message and exit
@@ -55,6 +58,12 @@ on other operating systems.
.
.PP
.B NOTE:
+\fBhwloc-gather-topology\fR gathers many hardware details about the platform.
+The output and tarball should not be posted on public lists or websites
+unless it is clear that they contain no sensitive information.
+.
+.PP
+.B NOTE:
It is highly recommended that you read the hwloc(7) overview page
before reading this man page.
.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.in
index 9956208..302add9 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-gather-topology.in
@@ -3,7 +3,7 @@
#
# Copyright © 2009 CNRS
-# Copyright © 2009-2015 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009-2012 Université Bordeaux
# See COPYING in top-level directory.
#
@@ -12,6 +12,8 @@ HWLOC_top_builddir="@HWLOC_top_builddir@"
prefix="@prefix@"
exec_prefix="@exec_prefix@"
bindir="@bindir@"
+localstatedir="@localstatedir@"
+runstatedir="@HWLOC_runstatedir@"
# this will be changed into $bindir/lstopo during make install
lstopo="$HWLOC_top_builddir/utils/lstopo/lstopo-no-graphics"
@@ -21,6 +23,7 @@ LC_ALL=C
export LANG LC_ALL
gatherio=0
+gatherdmi=0
if [ ! -x "$lstopo" ]
then
@@ -40,6 +43,7 @@ usage()
echo " and the corresponding lstopo verbose output under <savepath>.output"
echo "Options:"
echo " --io Gather I/O files (takes much longer and generates much larger tarball)"
+ echo " --dmi Gather SMBIOS files. Works only when run as root. Requires dmi-sysfs kernel module"
echo "Example:"
echo " $0 /tmp/\$(uname -n)"
}
@@ -47,6 +51,7 @@ usage()
while [ x`echo "$1" | cut -c1` = x- ] ; do
case $1 in
--io) gatherio=1;;
+ --dmi) gatherdmi=1;;
*) echo "Unrecognized option: $1"; usage; exit 1;;
esac
shift
@@ -77,9 +82,11 @@ destdir=`mktemp -d`
savefile() {
local dest="$1"
local file="$2"
- dir=`dirname "$file"`
- mkdir -p "$dest/$dir" 2>/dev/null
- cat "$file" > "$dest/$file" 2>/dev/null
+ if test -r "$file"; then
+ dir=`dirname "$file"`
+ mkdir -p "$dest/$dir" 2>/dev/null
+ cat "$file" > "$dest/$file" 2>/dev/null
+ fi
}
savelink() {
@@ -132,6 +139,12 @@ cat << EOF | while read -r path ; do savedir "$destdir/$basename" "$path" ; done
/proc/device-tree/cpus/
EOF
+if test "x$HWLOC_DUMPED_HWDATA_DIR" = x; then
+ savedir "$destdir/$basename" "$runstatedir"/hwloc/
+else
+ savedir "$destdir/$basename" "$HWLOC_DUMPED_HWDATA_DIR"
+fi
+
# Optionally gather I/O directories too
if [ x$gatherio = x1 ]; then
cat << EOF | while read -r path ; do savedir "$destdir/$basename" "$path" ; done
@@ -145,9 +158,12 @@ if [ x$gatherio = x1 ]; then
/sys/class/net/
/sys/class/mic/
EOF
- ls -d /sys/devices/pci* | sed -e 's@$@/@' | while read -r path ; do savedir "$destdir/$basename" "$path" ; done
- ls -d /run/udev/data/b* | while read -r path ; do savefile "$destdir/$basename" "$path" ; done
- ls -d /sys/firmware/dmi/entries/17-* | sed -e 's@$@/@' | while read -r path ; do savedir "$destdir/$basename" "$path" ; done
+ ls -d /sys/devices/pci* 2>/dev/null | sed -e 's@$@/@' | while read -r path ; do savedir "$destdir/$basename" "$path" ; done
+ ls -d /run/udev/data/b* 2>/dev/null | while read -r path ; do savefile "$destdir/$basename" "$path" ; done
+fi
+
+if [ x$gatherdmi = x1 ]; then
+ savedir "$destdir/$basename" /sys/firmware/dmi/
fi
# Get an entire mount point, after decoding its path
@@ -177,7 +193,7 @@ export HWLOC_DUMP_NOFILE_INFO=
# Create the archive and keep the tree in /tmp for testing
( cd "$destdir/" && tar cfj "$basename.tar.bz2" "$basename" )
mv "$destdir/$basename.tar.bz2" "$dirname/$basename.tar.bz2"
-echo "Hierarchy gathered in $dirname/$basename.tar.bz2 and kept in $destdir/$basename/"
+echo "Topology files gathered in $dirname/$basename.tar.bz2 and kept in $destdir/$basename/"
# Generate the output as well
# we need "Topology not from this system" in the output so as to make test-topology.sh happy
@@ -185,4 +201,8 @@ export HWLOC_THISSYSTEM=0
"$lstopo" - -v > "$dirname/$basename.output"
echo "Expected topology output stored in $dirname/$basename.output"
+echo
+echo "WARNING: Do not post these files on a public list or website unless you"
+echo "WARNING: are sure that no information about this platform is sensitive."
+
exit 0
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.1in
index 01a2281..2b9fc2d 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.1in
@@ -1,11 +1,11 @@
.\" -*- nroff -*-
-.\" Copyright © 2009-2014 Inria. All rights reserved.
+.\" Copyright © 2009-2016 Inria. All rights reserved.
.\" Copyright © 2009-2010 Université of Bordeaux
.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
.\" See COPYING in top-level directory.
.TH HWLOC-INFO "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
.SH NAME
-hwloc-info \- Show some information about some objects or about a topology
+hwloc-info \- Show some information about some objects or about a topology or about support features
.
.\" **************************
.\" Synopsis Section
@@ -31,6 +31,20 @@ it should be read before reading this man page.
.SH OPTIONS
.
.TP
+\fB\-\-objects\fR
+Report information specific objects.
+This is the default if some objects are given on the command-line.
+.TP
+\fB\-\-topology\fR
+Report a summary of the topology instead of about some specific objects.
+This is the default if no object is given on the command-line.
+.TP
+\fB\-\-support\fR
+Report the features that are supported by hwloc on the topology.
+The features are those available through the \fBhwloc_topology_get_support()\fR function.
+This is useful for verifying which CPU or memory binding options are supported
+by the current hwloc installation.
+.TP
\fB\-i\fR <file>, \fB\-\-input\fR <file>
Read topology from XML file <file> (instead of discovering the
topology on the local machine). If <file> is "\-", the standard input
@@ -89,6 +103,9 @@ This option requires the use of the actual current machine topology
(or any other topology with \fB\-\-thissystem\fR or with
HWLOC_THISSYSTEM set to 1 in the environment).
.TP
+\fB\-\-no\-icaches\fR
+Do not show Instruction caches, only Data and Unified caches are considered.
+.TP
\fB\-\-no\-io\fB
Do not show any I/O device or bridge.
By default, common devices (GPUs, NICs, block devices, ...) and
@@ -136,7 +153,10 @@ Report version and exit.
hwloc-info displays information about the specified object.
It is intended to be used with tools such as grep for filtering
certain attribute lines.
-When no object is specified, hwloc-info prints a summary of the topology.
+When no object is specified, or when \fB\-\-topology\fR is passed,
+hwloc-info prints a summary of the topology.
+When \fB\-\-support\fR is passed, hwloc-info lists the supported
+features for the topology.
.
.PP
Objects may be specified as location tuples, as explained in hwloc(7).
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.c
index bc3fc09..ef25b3f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-info.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -33,6 +33,9 @@ void usage(const char *name, FILE *where)
{
fprintf (where, "Usage: %s [ options ] [ locations ]\n", name);
fprintf (where, "\nOutput options:\n");
+ fprintf (where, " --objects Report information about specific objects\n");
+ fprintf (where, " --topology Report information the topology\n");
+ fprintf (where, " --support Report information about supported features\n");
fprintf (where, " -v --verbose Include additional details\n");
fprintf (where, " -s --silent Reduce the amount of details to show\n");
fprintf (where, " --ancestors Display the chain of ancestor objects up to the root\n");
@@ -41,6 +44,7 @@ void usage(const char *name, FILE *where)
fprintf (where, "Object filtering options:\n");
fprintf (where, " --restrict <cpuset> Restrict the topology to processors listed in <cpuset>\n");
fprintf (where, " --restrict binding Restrict the topology to the current process binding\n");
+ fprintf (where, " --no-icaches Do not show instruction caches\n");
fprintf (where, " --no-io Do not show any I/O device or bridge\n");
fprintf (where, " --no-bridges Do not any I/O bridge except hostbridges\n");
fprintf (where, " --whole-io Show all I/O devices and bridges\n");
@@ -264,6 +268,7 @@ main (int argc, char *argv[])
char *restrictstring = NULL;
size_t typelen;
int opt;
+ enum hwloc_info_mode { HWLOC_INFO_MODE_UNKNOWN, HWLOC_INFO_MODE_TOPOLOGY, HWLOC_INFO_MODE_OBJECTS, HWLOC_INFO_MODE_SUPPORT } mode = HWLOC_INFO_MODE_UNKNOWN;
/* enable verbose backends */
putenv("HWLOC_XML_VERBOSE=1");
@@ -287,7 +292,13 @@ main (int argc, char *argv[])
while (argc >= 1) {
opt = 0;
if (*argv[0] == '-') {
- if (!strcmp (argv[0], "-v") || !strcmp (argv[0], "--verbose"))
+ if (!strcmp (argv[0], "--objects"))
+ mode = HWLOC_INFO_MODE_OBJECTS;
+ else if (!strcmp (argv[0], "--topology"))
+ mode = HWLOC_INFO_MODE_TOPOLOGY;
+ else if (!strcmp (argv[0], "--support"))
+ mode = HWLOC_INFO_MODE_SUPPORT;
+ else if (!strcmp (argv[0], "-v") || !strcmp (argv[0], "--verbose"))
verbose_mode++;
else if (!strcmp (argv[0], "-s") || !strcmp (argv[0], "--silent"))
verbose_mode--;
@@ -308,7 +319,7 @@ main (int argc, char *argv[])
if (err < 0) {
fprintf(stderr, "unrecognized --ancestor type %s\n", argv[1]);
usage(callname, stderr);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
opt = 1;
}
@@ -369,7 +380,7 @@ main (int argc, char *argv[])
hwloc_topology_set_flags(topology, flags);
if (input) {
- err = hwloc_utils_enable_input_format(topology, input, input_format, verbose_mode, callname);
+ err = hwloc_utils_enable_input_format(topology, input, &input_format, verbose_mode, callname);
if (err)
return err;
}
@@ -407,10 +418,50 @@ main (int argc, char *argv[])
free(restrictstring);
}
- if (!argc)
+ if (mode == HWLOC_INFO_MODE_UNKNOWN) {
+ if (argc)
+ mode = HWLOC_INFO_MODE_OBJECTS;
+ else
+ mode = HWLOC_INFO_MODE_TOPOLOGY;
+ }
+
+ if (mode == HWLOC_INFO_MODE_TOPOLOGY) {
hwloc_lstopo_show_summary(stdout, topology);
- else {
+ } else if (mode == HWLOC_INFO_MODE_SUPPORT) {
+ const struct hwloc_topology_support *support = hwloc_topology_get_support(topology);
+#define DO(x,y) printf(#x ":" #y " = %u\n", (unsigned char) support->x->y);
+ DO(discovery, pu);
+
+ DO(cpubind, set_thisproc_cpubind);
+ DO(cpubind, get_thisproc_cpubind);
+ DO(cpubind, set_proc_cpubind);
+ DO(cpubind, get_proc_cpubind);
+ DO(cpubind, set_thisthread_cpubind);
+ DO(cpubind, get_thisthread_cpubind);
+ DO(cpubind, set_thread_cpubind);
+ DO(cpubind, get_thread_cpubind);
+ DO(cpubind, get_thisproc_last_cpu_location);
+ DO(cpubind, get_proc_last_cpu_location);
+ DO(cpubind, get_thisthread_cpubind);
+
+ DO(membind, set_thisproc_membind);
+ DO(membind, get_thisproc_membind);
+ DO(membind, set_proc_membind);
+ DO(membind, get_proc_membind);
+ DO(membind, set_thisthread_membind);
+ DO(membind, get_thisthread_membind);
+ DO(membind, set_area_membind);
+ DO(membind, get_area_membind);
+ DO(membind, firsttouch_membind);
+ DO(membind, bind_membind);
+ DO(membind, interleave_membind);
+ DO(membind, nexttouch_membind);
+ DO(membind, migrate_membind);
+ DO(membind, firsttouch_membind);
+ DO(membind, get_area_memlocation);
+
+ } else if (mode == HWLOC_INFO_MODE_OBJECTS) {
current_obj = 0;
while (argc >= 1) {
if (!strcmp(argv[0], "all") || !strcmp(argv[0], "root")) {
@@ -426,7 +477,8 @@ main (int argc, char *argv[])
}
argc--; argv++;
}
- }
+
+ } else assert(0);
hwloc_topology_destroy (topology);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.1in
index 2752106..cf33db2 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2013 Inria. All rights reserved.
+.\" Copyright © 2013-2016 Inria. All rights reserved.
.\" See COPYING in top-level directory.
.TH HWLOC-PATCH "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
.SH NAME
@@ -63,6 +63,12 @@ the standard input.
.
.PP
.B NOTE:
+If some application-specific userdata were been exported to the input XMLs,
+they will be ignored and discarded from the output because hwloc has no way
+to understand and patch them.
+.
+.PP
+.B NOTE:
It is highly recommended that you read the hwloc(7) overview page
before reading this man page. Most of the concepts described in
hwloc(7) directly apply to the hwloc-patch utility.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.c
index 616dff4..45ac332 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/hwloc-patch.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013-2014 Inria. All rights reserved.
+ * Copyright © 2013-2016 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -7,7 +7,9 @@
#include <hwloc.h>
#include <hwloc/diff.h>
-static void usage(const char *callname __hwloc_attribute_unused, FILE *where)
+#include "misc.h"
+
+void usage(const char *callname __hwloc_attribute_unused, FILE *where)
{
fprintf(where, "Usage: hwloc-patch [options] [<old.xml> | refname] [<diff.xml> | -] [<output.xml>]\n");
fprintf(where, "Options:\n");
@@ -19,7 +21,7 @@ static int hwloc_diff_read(hwloc_topology_t topo, const char *inputdiff,
hwloc_topology_diff_t *firstdiffp, char **refnamep)
{
size_t buflen, offset, readlen;
- char *buffer;
+ char *buffer, *tmp;
size_t ret;
int err;
@@ -42,13 +44,16 @@ static int hwloc_diff_read(hwloc_topology_t topo, const char *inputdiff,
break;
buflen *= 2;
- buffer = realloc(buffer, buflen+1);
- if (!buffer)
+ tmp = realloc(buffer, buflen+1);
+ if (!tmp) {
+ fprintf(stderr, "Failed to realloc buffer for reading diff.\n");
goto out_with_buffer;
+ }
+ buffer = tmp;
readlen = buflen/2;
}
- err = hwloc_topology_diff_load_xmlbuffer(topo, buffer, offset+1, firstdiffp, refnamep);
+ err = hwloc_topology_diff_load_xmlbuffer(topo, buffer, (int)(offset+1), firstdiffp, refnamep);
free(buffer);
return err;
@@ -62,7 +67,7 @@ int main(int argc, char *argv[])
{
hwloc_topology_t topo;
hwloc_topology_diff_t firstdiff = NULL;
- unsigned long flags = HWLOC_TOPOLOGY_FLAG_WHOLE_IO | HWLOC_TOPOLOGY_FLAG_ICACHES;
+ unsigned long flags = HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM | HWLOC_TOPOLOGY_FLAG_WHOLE_IO | HWLOC_TOPOLOGY_FLAG_ICACHES;
unsigned long patchflags = 0;
char *callname, *input, *inputdiff, *output = NULL, *refname = NULL;
int err;
@@ -126,14 +131,14 @@ int main(int argc, char *argv[])
err = hwloc_topology_set_xml(topo, refname);
if (err < 0) {
fprintf(stderr, "Failed to load XML topology %s (from input diff %s refname)\n", refname, inputdiff);
- goto out;
+ goto out_with_diff;
}
} else {
/* use the given input */
err = hwloc_topology_set_xml(topo, input);
if (err < 0) {
fprintf(stderr, "Failed to load XML topology %s\n", input);
- goto out;
+ goto out_with_diff;
}
}
@@ -162,6 +167,5 @@ out_with_diff:
hwloc_topology_diff_destroy(topo, firstdiff);
out_with_topo:
hwloc_topology_destroy(topo);
-out:
exit(EXIT_FAILURE);
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/misc.h b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/misc.h
index e0175ca..8f3611a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/misc.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/misc.h
@@ -1,11 +1,14 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
+#ifndef HWLOC_UTILS_MISC_H
+#define HWLOC_UTILS_MISC_H
+
#include <private/autogen/config.h>
#include <hwloc.h>
#include <private/misc.h>
@@ -33,8 +36,8 @@ hwloc_utils_input_format_usage(FILE *where, int addspaces)
fprintf (where, " %*sof another system\n",
addspaces, " ");
#endif
- fprintf (where, " --input \"n:2 2\"\n");
- fprintf (where, " -i \"n:2 2\" %*sSimulate a fake hierarchy, here with 2 NUMA nodes of 2\n",
+ fprintf (where, " --input \"node:2 2\"\n");
+ fprintf (where, " -i \"node:2 2\" %*sSimulate a fake hierarchy, here with 2 NUMA nodes of 2\n",
addspaces, " ");
fprintf (where, " %*sprocessors\n",
addspaces, " ");
@@ -137,25 +140,30 @@ hwloc_utils_lookup_input_option(char *argv[], int argc, int *consumed_opts,
static __hwloc_inline int
hwloc_utils_enable_input_format(struct hwloc_topology *topology,
const char *input,
- enum hwloc_utils_input_format input_format,
+ enum hwloc_utils_input_format *input_format,
int verbose, const char *callname)
{
- if (input_format == HWLOC_UTILS_INPUT_DEFAULT) {
+ if (*input_format == HWLOC_UTILS_INPUT_DEFAULT && !strcmp(input, "-.xml")) {
+ *input_format = HWLOC_UTILS_INPUT_XML;
+ input = "-";
+ }
+
+ if (*input_format == HWLOC_UTILS_INPUT_DEFAULT) {
struct stat inputst;
int err;
err = stat(input, &inputst);
if (err < 0) {
if (verbose > 0)
printf("assuming `%s' is a synthetic topology description\n", input);
- input_format = HWLOC_UTILS_INPUT_SYNTHETIC;
+ *input_format = HWLOC_UTILS_INPUT_SYNTHETIC;
} else if (S_ISDIR(inputst.st_mode)) {
if (verbose > 0)
printf("assuming `%s' is a file-system root\n", input);
- input_format = HWLOC_UTILS_INPUT_FSROOT;
+ *input_format = HWLOC_UTILS_INPUT_FSROOT;
} else if (S_ISREG(inputst.st_mode)) {
if (verbose > 0)
printf("assuming `%s' is a XML file\n", input);
- input_format = HWLOC_UTILS_INPUT_XML;
+ *input_format = HWLOC_UTILS_INPUT_XML;
} else {
fprintf (stderr, "Unrecognized input file: %s\n", input);
usage (callname, stderr);
@@ -163,7 +171,7 @@ hwloc_utils_enable_input_format(struct hwloc_topology *topology,
}
}
- switch (input_format) {
+ switch (*input_format) {
case HWLOC_UTILS_INPUT_XML:
if (!strcmp(input, "-"))
input = "/dev/stdin";
@@ -278,3 +286,68 @@ hwloc_lstopo_show_summary(FILE *output, hwloc_topology_t topology)
fprintf (output, "Special depth %d:\t%u %s (type #%u)\n",
HWLOC_TYPE_DEPTH_OS_DEVICE, nbobjs, "OS Device", HWLOC_OBJ_OS_DEVICE);
}
+
+
+/*************************
+ * Importing/exporting userdata buffers without understanding/decoding/modifying them
+ * Caller must putenv("HWLOC_XML_USERDATA_NOT_DECODED=1") before loading the topology.
+ */
+
+struct hwloc_utils_userdata {
+ char *name;
+ size_t length;
+ char *buffer; /* NULL if userdata entry in the list is not meant to be exported to XML (added by somebody else) */
+ struct hwloc_utils_userdata *next;
+};
+
+static __hwloc_inline void
+hwloc_utils_userdata_import_cb(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)
+{
+ struct hwloc_utils_userdata *u, **up = (struct hwloc_utils_userdata **) &obj->userdata;
+ while (*up)
+ up = &((*up)->next);
+ *up = u = malloc(sizeof(struct hwloc_utils_userdata));
+ u->name = strdup(name);
+ u->length = length;
+ u->buffer = strdup(buffer);
+ u->next = NULL;
+}
+
+static __hwloc_inline void
+hwloc_utils_userdata_export_cb(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj)
+{
+ struct hwloc_utils_userdata *u = obj->userdata;
+ while (u) {
+ if (u->buffer) /* not meant to be exported to XML (added by somebody else) */
+ hwloc_export_obj_userdata(reserved, topology, obj, u->name, u->buffer, u->length);
+ u = u->next;
+ }
+}
+
+/* must be called once the caller has removed its own userdata */
+static __hwloc_inline void
+hwloc_utils_userdata_free(hwloc_obj_t obj)
+{
+ struct hwloc_utils_userdata *u = obj->userdata, *next;
+ while (u) {
+ next = u->next;
+ assert(u->buffer);
+ free(u->name);
+ free(u->buffer);
+ free(u);
+ u = next;
+ }
+ obj->userdata = NULL;
+}
+
+/* must be called once the caller has removed its own userdata */
+static __hwloc_inline void
+hwloc_utils_userdata_free_recursive(hwloc_obj_t obj)
+{
+ hwloc_obj_t child;
+ hwloc_utils_userdata_free(obj);
+ for (child = obj->first_child; child; child = child->next_sibling)
+ hwloc_utils_userdata_free_recursive(child);
+}
+
+#endif /* HWLOC_UTILS_MISC_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.input b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.input
index 05a2c4c..759d21f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.input
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.input
@@ -25,13 +25,24 @@
<info name="HostName" value="rhododendron"/>
<info name="Architecture" value="x86_64"/>
<object type="NUMANode" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <userdata length="0"/>
+ <userdata length="1">a</userdata>
<object type="Package" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0">
<info name="CPUModel" value="Intel(R) Core(TM) i7 CPU M 620 @ 2.67GHz"/>
<info name="CPUType" value="x86_64"/>
+ <userdata name="MyName" length="16">0000000000000001</userdata>
+ <userdata name="EncodedShort0" length="0" encoding="base64"/>
<object type="Cache" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
<object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
+ <userdata name="EncodedShort1" length="1" encoding="base64">rg==</userdata>
+ <userdata name="EncodedShort2" length="2" encoding="base64">ZH8=</userdata>
+ <userdata name="EncodedShort3" length="3" encoding="base64">f+B/</userdata>
+ <userdata name="EncodedShort4" length="4" encoding="base64">4H8AAA==</userdata>
+ <userdata name="EncodedLong0" length="128" encoding="base64">eK5kf+B/AAB4rmR/4H8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtmR/4H8AAP////8AAAAA////fwAAAAA=</userdata>
+ <userdata name="EncodedLong1" length="127" encoding="base64">rmR/4H8AAHiuZH/gfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2ZH/gfwAA/////wAAAAD///9/AAAAAA==</userdata>
<object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
<object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
+ <userdata name="EncodedLong2" length="126" encoding="base64">rmR/4H8AAHiuZH/gfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2ZH/gfwAA/////wAAAAD///9/AAAA</userdata>
<object type="Core" os_index="0" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0">
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
@@ -41,6 +52,11 @@
</object>
<object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
<object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
+ <userdata name="EncodedLong3" length="125" encoding="base64">ZH/gfwAAeK5kf+B/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLZkf+B/AAD/////AAAAAP///38AAAA=</userdata>
+ <userdata name="EncodedLong4" length="124" encoding="base64">ZH/gfwAAeK5kf+B/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLZkf+B/AAD/////AAAAAP///38AAA==</userdata>
+ <userdata name="EncodedLong5" length="123" encoding="base64">f+B/AAB4rmR/4H8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtmR/4H8AAP////8AAAAA////fwAA</userdata>
+ <userdata name="EncodedLong6" length="122" encoding="base64">f+B/AAB4rmR/4H8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtmR/4H8AAP////8AAAAA////fwA=</userdata>
+ <userdata name="EncodedLong7" length="121" encoding="base64">4H8AAHiuZH/gfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2ZH/gfwAA/////wAAAAD///9/AA==</userdata>
<object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
<object type="Core" os_index="2" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0">
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
@@ -53,6 +69,7 @@
</object>
</object>
<object type="Bridge" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-05]">
+ <userdata name="EncodedLong8" length="120" encoding="base64">4H8AAHiuZH/gfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2ZH/gfwAA/////wAAAAD///9/</userdata>
<object type="PCIDev" os_index="32" name="Intel Corporation Core Processor Integrated Graphics Controller" pci_busid="0000:00:02.0" pci_type="0300 [8086:0046] [0028:000a] 02" pci_link_speed="0.000000">
<info name="PCIVendor" value="Intel Corporation"/>
<info name="PCIDevice" value="Core Processor Integrated Graphics Controller"/>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.output b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.output
index 6bc65b3..a3575ae 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.output
@@ -27,13 +27,23 @@
<info name="Foo" value="Bar"/>
<object type="NUMANode" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0">
<info name="Foo" value="Bar"/>
+ <userdata length="0"/>
+ <userdata length="1">a</userdata>
<object type="Package" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0">
<info name="CPUModel" value="Intel(R) Core(TM) i7 CPU M 620 @ 2.67GHz"/>
<info name="CPUType" value="x86_64"/>
<info name="Foo2" value="Bar3"/>
+ <userdata name="MyName" length="16">0000000000000001</userdata>
+ <userdata name="EncodedShort0" length="0" encoding="base64"/>
<object type="Cache" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
<info name="Foo" value="Bar"/>
<object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
+ <userdata name="EncodedShort1" length="1" encoding="base64">rg==</userdata>
+ <userdata name="EncodedShort2" length="2" encoding="base64">ZH8=</userdata>
+ <userdata name="EncodedShort3" length="3" encoding="base64">f+B/</userdata>
+ <userdata name="EncodedShort4" length="4" encoding="base64">4H8AAA==</userdata>
+ <userdata name="EncodedLong0" length="128" encoding="base64">eK5kf+B/AAB4rmR/4H8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtmR/4H8AAP////8AAAAA////fwAAAAA=</userdata>
+ <userdata name="EncodedLong1" length="127" encoding="base64">rmR/4H8AAHiuZH/gfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2ZH/gfwAA/////wAAAAD///9/AAAAAA==</userdata>
<object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
<info name="Foo" value="Bar"/>
<object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
@@ -57,6 +67,11 @@
<info name="Foo" value="Bar"/>
<object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
<info name="Foo" value="Bar"/>
+ <userdata name="EncodedLong3" length="125" encoding="base64">ZH/gfwAAeK5kf+B/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLZkf+B/AAD/////AAAAAP///38AAAA=</userdata>
+ <userdata name="EncodedLong4" length="124" encoding="base64">ZH/gfwAAeK5kf+B/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLZkf+B/AAD/////AAAAAP///38AAA==</userdata>
+ <userdata name="EncodedLong5" length="123" encoding="base64">f+B/AAB4rmR/4H8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtmR/4H8AAP////8AAAAA////fwAA</userdata>
+ <userdata name="EncodedLong6" length="122" encoding="base64">f+B/AAB4rmR/4H8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtmR/4H8AAP////8AAAAA////fwA=</userdata>
+ <userdata name="EncodedLong7" length="121" encoding="base64">4H8AAHiuZH/gfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2ZH/gfwAA/////wAAAAD///9/AA==</userdata>
<object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
<info name="Foo" value="Bar"/>
<object type="Core" os_index="2" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x0" complete_nodeset="0x00000001" allowed_nodeset="0x0">
@@ -76,6 +91,7 @@
</object>
<object type="Bridge" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-05]">
<info name="Foo" value="Bar"/>
+ <userdata name="EncodedLong8" length="120" encoding="base64">4H8AAHiuZH/gfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC2ZH/gfwAA/////wAAAAD///9/</userdata>
<object type="PCIDev" os_index="32" name="Intel Corporation Core Processor Integrated Graphics Controller" pci_busid="0000:00:02.0" pci_type="0300 [8086:0046] [0028:000a] 02" pci_link_speed="0.000000">
<info name="PCIVendor" value="Intel Corporation"/>
<info name="PCIDevice" value="Core Processor Integrated Graphics Controller"/>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.sh.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.sh.in
index f0ddf04..1d50f8c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.sh.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-annotate.sh.in
@@ -2,7 +2,7 @@
#-*-sh-*-
#
-# Copyright © 2009-2015 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# See COPYING in top-level directory.
#
@@ -47,6 +47,7 @@ $annotate $file $file os:2-3 info myosdev byindex
$annotate $file $file pci:4:2 info mypcidev byindex
$annotate $file $file pci=0000:02:00.0 info mypcidev bybusid
$annotate $file $file 'pci[8086:0046]:all' info mypcidev bymatch
+$annotate --cu $file $file L1iCache:0 none
diff @HWLOC_DIFF_U@ $HWLOC_top_srcdir/utils/hwloc/test-hwloc-annotate.output "$file"
rm -rf "$tmp"
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-assembler.sh.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-assembler.sh.in
index eedee5d..0d6de71 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-assembler.sh.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-assembler.sh.in
@@ -12,6 +12,7 @@ HWLOC_top_builddir="@HWLOC_top_builddir@"
assembler="$HWLOC_top_builddir/utils/hwloc/hwloc-assembler"
HWLOC_top_srcdir="@HWLOC_top_srcdir@"
SED="@SED@"
+EXEEXT="@EXEEXT@"
HWLOC_PLUGINS_PATH=${HWLOC_top_builddir}/src
export HWLOC_PLUGINS_PATH
@@ -46,7 +47,7 @@ $assembler $file \
# filter ProcessName since it may be hwloc-info or lt-hwloc-info
cat $file \
| $SED -e '/<info name=\"hwlocVersion\" value=\"'$HWLOC_VERSION'\"\/>/d' \
- | $SED -e '/<info name=\"ProcessName\" value=\"hwloc-assembler\"\/>/d' -e '/<info name=\"ProcessName\" value=\"lt-hwloc-assembler\"\/>/d' \
+ | $SED -e '/<info name=\"ProcessName\" value=\"hwloc-assembler'$EXEEXT'\"\/>/d' -e '/<info name=\"ProcessName\" value=\"lt-hwloc-assembler'$EXEEXT'\"\/>/d' \
> ${file}.tmp
mv -f ${file}.tmp $file
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.output b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.output
index aeae33e..760cfc1 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.output
@@ -3,6 +3,40 @@ depth 0: 1 Machine (type #1)
depth 2: 6 Core (type #5)
depth 3: 24 PU (type #6)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 NUMANode (type #2)
+ depth 2: 6 Core (type #5)
+ depth 3: 24 PU (type #6)
+
+discovery:pu = 1
+cpubind:set_thisproc_cpubind = 0
+cpubind:get_thisproc_cpubind = 0
+cpubind:set_proc_cpubind = 0
+cpubind:get_proc_cpubind = 0
+cpubind:set_thisthread_cpubind = 0
+cpubind:get_thisthread_cpubind = 0
+cpubind:set_thread_cpubind = 0
+cpubind:get_thread_cpubind = 0
+cpubind:get_thisproc_last_cpu_location = 0
+cpubind:get_proc_last_cpu_location = 0
+cpubind:get_thisthread_cpubind = 0
+membind:set_thisproc_membind = 0
+membind:get_thisproc_membind = 0
+membind:set_proc_membind = 0
+membind:get_proc_membind = 0
+membind:set_thisthread_membind = 0
+membind:get_thisthread_membind = 0
+membind:set_area_membind = 0
+membind:get_area_membind = 0
+membind:firsttouch_membind = 0
+membind:bind_membind = 0
+membind:interleave_membind = 0
+membind:nexttouch_membind = 0
+membind:migrate_membind = 0
+membind:firsttouch_membind = 0
+membind:get_area_memlocation = 0
+
+
Core L#2
type = Core
full type = Core
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.sh.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.sh.in
index c7ee79a..dd977ce 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.sh.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc/test-hwloc-info.sh.in
@@ -3,7 +3,7 @@
#
# Copyright © 2009 CNRS
-# Copyright © 2009-2015 Inria. All rights reserved.
+# Copyright © 2009-2016 Inria. All rights reserved.
# Copyright © 2009 Université Bordeaux
# See COPYING in top-level directory.
#
@@ -32,6 +32,12 @@ set -e
(
$info --if synthetic --input "node:2 core:3 pu:4"
echo
+ $info --if synthetic --input "node:2 core:3 pu:4" --topology
+ echo
+ $info --if synthetic --input "node:2 core:3 pu:4" --support
+ echo
+ $info --if synthetic --input "node:2 core:3 pu:4" --objects
+ echo
$info --if synthetic --input "node:2 core:3 pu:4" core:2-4
echo
$info --if synthetic --input "node:2 core:3 pu:4" -n --ancestors pu:10-11
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.am
index 3f89ee3..04075ad 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.am
@@ -37,7 +37,7 @@ lstopo_LDADD = $(lstopo_no_graphics_LDADD)
if HWLOC_HAVE_CAIRO
bin_PROGRAMS += lstopo
lstopo_SOURCES += lstopo-cairo.c
-lstopo_CPPFLAGS += -DLSTOPO_HAVE_GRAPHICS
+lstopo_CPPFLAGS += -DLSTOPO_HAVE_GRAPHICS $(HWLOC_X11_CPPFLAGS)
lstopo_CFLAGS = $(lstopo_no_graphics_CFLAGS) $(HWLOC_CAIRO_CFLAGS)
lstopo_LDADD += $(HWLOC_CAIRO_LIBS) $(HWLOC_X11_LIBS)
endif
@@ -45,6 +45,9 @@ if HWLOC_HAVE_WINDOWS
bin_PROGRAMS += lstopo lstopo-win
lstopo_SOURCES += lstopo-windows.c
lstopo_CPPFLAGS += -DLSTOPO_HAVE_GRAPHICS
+if HWLOC_HAVE_USER32
+lstopo_LDADD += -luser32
+endif
lstopo_win_SOURCES = $(lstopo_SOURCES)
lstopo_win_CPPFLAGS = $(lstopo_CPPFLAGS)
lstopo_win_CFLAGS = $(lstopo_CFLAGS) -mwindows
@@ -67,11 +70,13 @@ APPLICATIONSdir = @datarootdir@/applications
dist_APPLICATIONS_DATA = lstopo.desktop
endif
+SEDMAN = $(SED) -e 's/\#PACKAGE_NAME\#/@PACKAGE_NAME@/g' \
+ -e 's/\#PACKAGE_VERSION\#/@PACKAGE_VERSION@/g' \
+ -e 's/\#HWLOC_DATE\#/@HWLOC_RELEASE_DATE@/g'
+
.1in.1:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
install-exec-hook:
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.in
index 2c80f5a..b05f7d7 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/Makefile.in
@@ -102,11 +102,12 @@ bin_PROGRAMS = lstopo-no-graphics$(EXEEXT) $(am__EXEEXT_1) \
$(am__EXEEXT_2)
@HWLOC_HAVE_CAIRO_TRUE at am__append_1 = lstopo
@HWLOC_HAVE_CAIRO_TRUE at am__append_2 = lstopo-cairo.c
- at HWLOC_HAVE_CAIRO_TRUE@am__append_3 = -DLSTOPO_HAVE_GRAPHICS
+ at HWLOC_HAVE_CAIRO_TRUE@am__append_3 = -DLSTOPO_HAVE_GRAPHICS $(HWLOC_X11_CPPFLAGS)
@HWLOC_HAVE_CAIRO_TRUE at am__append_4 = $(HWLOC_CAIRO_LIBS) $(HWLOC_X11_LIBS)
@HWLOC_HAVE_WINDOWS_TRUE at am__append_5 = lstopo lstopo-win
@HWLOC_HAVE_WINDOWS_TRUE at am__append_6 = lstopo-windows.c
@HWLOC_HAVE_WINDOWS_TRUE at am__append_7 = -DLSTOPO_HAVE_GRAPHICS
+ at HWLOC_HAVE_USER32_TRUE@@HWLOC_HAVE_WINDOWS_TRUE at am__append_8 = -luser32
subdir = utils/lstopo
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/config/hwloc.m4 \
@@ -152,7 +153,8 @@ am__DEPENDENCIES_1 =
am__DEPENDENCIES_2 = $(LDADD) $(am__DEPENDENCIES_1)
@HWLOC_HAVE_CAIRO_TRUE at am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) \
@HWLOC_HAVE_CAIRO_TRUE@ $(am__DEPENDENCIES_1)
-lstopo_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
+lstopo_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -190,7 +192,8 @@ am__objects_4 = lstopo_win-lstopo.$(OBJEXT) \
am__objects_7 = $(am__objects_4) $(am__objects_5) $(am__objects_6)
@HWLOC_HAVE_WINDOWS_TRUE at am_lstopo_win_OBJECTS = $(am__objects_7)
lstopo_win_OBJECTS = $(am_lstopo_win_OBJECTS)
-am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
+am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1)
@HWLOC_HAVE_WINDOWS_TRUE at lstopo_win_DEPENDENCIES = \
@HWLOC_HAVE_WINDOWS_TRUE@ $(am__DEPENDENCIES_4)
lstopo_win_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -546,8 +549,10 @@ HWLOC_REQUIRES = @HWLOC_REQUIRES@
HWLOC_TERMCAP_LIBS = @HWLOC_TERMCAP_LIBS@
HWLOC_VERSION = @HWLOC_VERSION@
HWLOC_W3_GENERATOR = @HWLOC_W3_GENERATOR@
+HWLOC_X11_CPPFLAGS = @HWLOC_X11_CPPFLAGS@
HWLOC_X11_LIBS = @HWLOC_X11_LIBS@
HWLOC_XML_LOCALIZED = @HWLOC_XML_LOCALIZED@
+HWLOC_runstatedir = @HWLOC_runstatedir@
HWLOC_top_builddir = @HWLOC_top_builddir@
HWLOC_top_srcdir = @HWLOC_top_srcdir@
INSTALL = @INSTALL@
@@ -644,6 +649,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -677,7 +683,8 @@ lstopo_no_graphics_LDADD = $(LDADD) -lm $(HWLOC_TERMCAP_LIBS)
lstopo_SOURCES = $(lstopo_no_graphics_SOURCES) $(am__append_2) \
$(am__append_6)
lstopo_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_3) $(am__append_7)
-lstopo_LDADD = $(lstopo_no_graphics_LDADD) $(am__append_4)
+lstopo_LDADD = $(lstopo_no_graphics_LDADD) $(am__append_4) \
+ $(am__append_8)
@HWLOC_HAVE_CAIRO_TRUE at lstopo_CFLAGS = $(lstopo_no_graphics_CFLAGS) $(HWLOC_CAIRO_CFLAGS)
@HWLOC_HAVE_WINDOWS_TRUE at lstopo_win_SOURCES = $(lstopo_SOURCES)
@HWLOC_HAVE_WINDOWS_TRUE at lstopo_win_CPPFLAGS = $(lstopo_CPPFLAGS)
@@ -693,6 +700,10 @@ nodist_man_MANS = $(man1_pages)
# so that no terminal is required
@HWLOC_HAVE_CAIRO_TRUE at APPLICATIONSdir = @datarootdir@/applications
@HWLOC_HAVE_CAIRO_TRUE at dist_APPLICATIONS_DATA = lstopo.desktop
+SEDMAN = $(SED) -e 's/\#PACKAGE_NAME\#/@PACKAGE_NAME@/g' \
+ -e 's/\#PACKAGE_VERSION\#/@PACKAGE_VERSION@/g' \
+ -e 's/\#HWLOC_DATE\#/@HWLOC_RELEASE_DATE@/g'
+
all: all-am
.SUFFIXES:
@@ -1653,9 +1664,7 @@ uninstall-man: uninstall-man1
.1in.1:
@ echo Creating $@ man page...
- @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
- -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
- -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ @ $(SEDMAN) \
> $@ < $<
install-exec-hook:
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-ascii.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-ascii.c
index 218304a..f81e38a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-ascii.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-ascii.c
@@ -80,7 +80,7 @@ ascii_init(void *_output)
{
struct lstopo_ascii_output *disp = _output;
unsigned width, height;
- int j, i;
+ unsigned j, i;
/* compute the required size */
disp->drawing = 0;
@@ -344,13 +344,13 @@ ascii_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_un
y2 = y1 + height - 1;
if (!disp->drawing) {
- if (x1 >= disp->width)
+ if ((int)x1 >= disp->width)
disp->width = x1+1;
- if (x2 >= disp->width)
+ if ((int)x2 >= disp->width)
disp->width = x2+1;
- if (y1 >= disp->height)
+ if ((int)y1 >= disp->height)
disp->height = y1+1;
- if (y2 >= disp->height)
+ if ((int)y2 >= disp->height)
disp->height = y2+1;
return;
}
@@ -403,9 +403,9 @@ ascii_line(void *output, int r __hwloc_attribute_unused, int g __hwloc_attribute
}
if (!disp->drawing) {
- if (x2 >= disp->width)
+ if ((int)x2 >= disp->width)
disp->width = x2+1;
- if (y2 >= disp->height)
+ if ((int)y2 >= disp->height)
disp->height = y2+1;
return;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-cairo.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-cairo.c
index 1bc84aa..c60d971 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-cairo.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-cairo.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010, 2014 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -63,17 +63,17 @@ topo_cairo_box(void *_output, int r, int g, int b, unsigned depth __hwloc_attrib
struct lstopo_cairo_output *coutput = _output;
cairo_t *c = coutput->context;
- if (!coutput->drawing) {
- if (x > coutput->max_x)
- coutput->max_x = x;
- if (x + width > coutput->max_x)
- coutput->max_x = x + width;
- if (y > coutput->max_y)
- coutput->max_y = y;
- if (y + height > coutput->max_y)
- coutput->max_y = y + height;
+ if (x > coutput->max_x)
+ coutput->max_x = x;
+ if (x + width > coutput->max_x)
+ coutput->max_x = x + width;
+ if (y > coutput->max_y)
+ coutput->max_y = y;
+ if (y + height > coutput->max_y)
+ coutput->max_y = y + height;
+
+ if (!coutput->drawing)
return;
- }
cairo_rectangle(c, x, y, width, height);
cairo_set_source_rgb(c, (float)r / 255, (float) g / 255, (float) b / 255);
@@ -91,17 +91,17 @@ topo_cairo_line(void *_output, int r, int g, int b, unsigned depth __hwloc_attri
struct lstopo_cairo_output *coutput = _output;
cairo_t *c = coutput->context;
- if (!coutput->drawing) {
- if (x1 > coutput->max_x)
- coutput->max_x = x1;
- if (x2 > coutput->max_x)
- coutput->max_x = x2;
- if (y1 > coutput->max_y)
- coutput->max_y = y1;
- if (y2 > coutput->max_y)
- coutput->max_y = y2;
+ if (x1 > coutput->max_x)
+ coutput->max_x = x1;
+ if (x2 > coutput->max_x)
+ coutput->max_x = x2;
+ if (y1 > coutput->max_y)
+ coutput->max_y = y1;
+ if (y2 > coutput->max_y)
+ coutput->max_y = y2;
+
+ if (!coutput->drawing)
return;
- }
cairo_move_to(c, x1, y1);
cairo_set_source_rgb(c, (float) r / 255, (float) g / 255, (float) b / 255);
@@ -177,6 +177,7 @@ struct lstopo_x11_output {
int last_screen_width, last_screen_height; /** last visible part size */
int width, height; /** total normal display size */
int x, y; /** top left corner of the visible part */
+ float scale, last_scale;
};
static void
@@ -238,12 +239,14 @@ x11_init(void *_disp)
disp->top = top = XCreateSimpleWindow(dpy, root, 0, 0, screen_width, screen_height, 0, WhitePixel(dpy, scr), WhitePixel(dpy, scr));
XStoreName(dpy, top, "lstopo");
XSetIconName(dpy, top, "lstopo");
- XSelectInput(dpy,top, StructureNotifyMask);
+ XSelectInput(dpy,top, StructureNotifyMask | KeyPressMask);
if (screen_width >= screen->width)
screen_width = screen->width;
if (screen_height >= screen->height)
screen_height = screen->height;
+ disp->last_screen_width = 0;
+ disp->last_screen_height = 0;
disp->screen_width = screen_width;
disp->screen_height = screen_height;
disp->width = coutput->max_x;
@@ -252,10 +255,24 @@ x11_init(void *_disp)
disp->orig_gridsize = gridsize;
disp->x = 0;
disp->y = 0;
+ disp->scale = disp->last_scale = 1.0f;
+ /* TODO: if window got truncated, scale down? */
x11_create(disp, coutput->max_x, coutput->max_y);
XMapWindow(dpy, top);
+
+ printf("\n");
+ printf("Keyboard shortcuts:\n");
+ printf(" Zoom-in or out .................... + -\n");
+ printf(" Try to fit scale to window ........ f F\n");
+ printf(" Reset scale to default ............ 1\n");
+ printf(" Scroll vertically ................. Up Down PageUp PageDown\n");
+ printf(" Scroll horizontally ............... Left Right Ctrl+PageUp/Down\n");
+ printf(" Scroll to the top-left corner ..... Home\n");
+ printf(" Scroll to the bottom-right corner . End\n");
+ printf(" Exit .............................. q Q Esc\n");
+ printf("\n\n");
}
static struct draw_methods x11_draw_methods = {
@@ -271,6 +288,36 @@ static struct draw_methods x11_draw_methods = {
static void
move_x11(struct lstopo_x11_output *disp)
{
+ if (disp->scale != disp->last_scale) {
+ disp->x = disp->scale / disp->last_scale * (float)disp->x;
+ disp->y = disp->scale / disp->last_scale * (float)disp->y;
+ }
+
+ if (disp->screen_width != disp->last_screen_width
+ || disp->screen_height != disp->last_screen_height
+ || disp->scale != disp->last_scale) {
+ disp->last_screen_width = disp->screen_width;
+ disp->last_screen_height = disp->screen_height;
+ disp->last_scale = disp->scale;
+ fontsize = disp->orig_fontsize * disp->scale;
+ gridsize = disp->orig_gridsize * disp->scale;
+
+ x11_destroy(disp);
+
+ x11_create(disp, disp->width, disp->height);
+ disp->coutput.max_x = 0;
+ disp->coutput.max_y = 0;
+ topo_cairo_paint(&disp->coutput);
+ if (disp->coutput.max_x > disp->width || disp->coutput.max_y > disp->height) {
+ /* need to extend the window and redraw */
+ x11_destroy(disp);
+ x11_create(disp, disp->coutput.max_x, disp->coutput.max_y);
+ topo_cairo_paint(&disp->coutput);
+ }
+ disp->width = disp->coutput.max_x;
+ disp->height = disp->coutput.max_y;
+ }
+
if (disp->width <= disp->screen_width) {
disp->x = 0;
} else {
@@ -288,31 +335,6 @@ move_x11(struct lstopo_x11_output *disp)
if (disp->y >= disp->height - disp->screen_height)
disp->y = disp->height - disp->screen_height;
}
-
- if (disp->screen_width > disp->width && disp->screen_height > disp->height
- && (disp->screen_width != disp->last_screen_width
- || disp->screen_height != disp->last_screen_height)) {
- disp->last_screen_width = disp->screen_width;
- disp->last_screen_height = disp->screen_height;
- fontsize = disp->orig_fontsize;
- gridsize = disp->orig_gridsize;
- if (disp->screen_width > disp->width) {
- fontsize = disp->orig_fontsize * disp->screen_width / disp->width;
- gridsize = disp->orig_gridsize * disp->screen_width / disp->width;
- }
- if (disp->screen_height > disp->height) {
- unsigned int new_fontsize = disp->orig_fontsize * disp->screen_height / disp->height;
- unsigned int new_gridsize = disp->orig_gridsize * disp->screen_height / disp->height;
- if (new_fontsize < fontsize)
- fontsize = new_fontsize;
- if (new_gridsize < gridsize)
- gridsize = new_gridsize;
- }
-
- x11_destroy(disp);
- x11_create(disp, disp->screen_width, disp->screen_height);
- topo_cairo_paint(&disp->coutput);
- }
}
void
@@ -358,16 +380,23 @@ output_x11(struct lstopo_output *loutput, const char *filename)
disp->y -= e.xmotion.y_root - y;
x = e.xmotion.x_root;
y = e.xmotion.y_root;
- move_x11(disp);
+ move_x11(disp);
}
break;
- case ConfigureNotify:
+ case ConfigureNotify: {
+ float wscale, hscale;
disp->screen_width = e.xconfigure.width;
disp->screen_height = e.xconfigure.height;
- move_x11(disp);
+ wscale = disp->screen_width / (float)disp->width;
+ hscale = disp->screen_height / (float)disp->height;
+ disp->scale *= wscale > hscale ? hscale : wscale;
+ if (disp->scale < 1.0f)
+ disp->scale = 1.0f;
+ move_x11(disp);
if (disp->x != lastx || disp->y != lasty)
XMoveWindow(disp->dpy, disp->win, -disp->x, -disp->y);
break;
+ }
case ButtonPress:
if (e.xbutton.button == Button1) {
state = 1;
@@ -435,8 +464,30 @@ output_x11(struct lstopo_output *loutput, const char *filename)
disp->y = INT_MAX;
move_x11(disp);
break;
- }
- break;
+ case XK_f:
+ case XK_F: {
+ float wscale = disp->screen_width / (float)disp->width;
+ float hscale = disp->screen_height / (float)disp->height;
+ disp->scale *= wscale > hscale ? hscale : wscale;
+ move_x11(disp);
+ break;
+ }
+ case XK_plus:
+ case XK_KP_Add:
+ disp->scale *= 1.2f;
+ move_x11(disp);
+ break;
+ case XK_minus:
+ case XK_KP_Subtract:
+ disp->scale /= 1.2f;
+ move_x11(disp);
+ break;
+ case XK_1:
+ case XK_KP_1:
+ disp->scale = 1.0f;
+ move_x11(disp);
+ break;
+ }
}
}
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-color.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-color.c
index 85bec01..3db2c7b 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-color.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-color.c
@@ -1,10 +1,12 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009 Université Bordeaux
* See COPYING in top-level directory.
*/
+#include <private/autogen/config.h>
+
#include <stdlib.h>
#include <stdio.h>
@@ -44,12 +46,21 @@ int
declare_color(int r, int g, int b)
{
int color = find_color(r, g, b);
+ struct color *tmp;
if (color != -1)
return color;
+ tmp = realloc(colors, sizeof(*colors) * (numcolors+1));
+
+ if (!tmp) {
+ /* FIXME: return -1 on error? tell the caller to use the default? */
+ fprintf(stderr, "Failed to realloc the colors array\n");
+ exit(EXIT_FAILURE);
+ }
+
+ colors = tmp;
color = numcolors++;
- colors = realloc(colors, sizeof(*colors) * (numcolors));
colors[color].r = r;
colors[color].g = g;
colors[color].b = b;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-draw.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-draw.c
index 38b87bb..cbd8761 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-draw.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-draw.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2013, 2015 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -90,15 +90,7 @@
#define BRIDGE_G_COLOR 0xff
#define BRIDGE_B_COLOR 0xff
-struct style {
- struct stylecolor { int r, g, b; }
- bg, /* main box background color */
- t, /* main text color */
- bg2, /* other box background color */
- t2; /* other text color */
-};
-
-unsigned get_textwidth(void *output, struct draw_methods *methods,
+unsigned get_textwidth(void *output,
const char *text, unsigned length,
unsigned fontsize, unsigned gridsize)
{
@@ -365,54 +357,30 @@ RECURSE_BEGIN(obj, border) \
/* Pack objects in a grid */
#define RECURSE_RECT(obj, methods, separator, border) do {\
- if (obj->arity && obj->children[0]->type == HWLOC_OBJ_NUMANODE && force_orient[obj->type] != LSTOPO_ORIENT_RECT) { \
- /* Nodes shouldn't be put with an arbitrary geometry, as NUMA distances may not be that way */ \
- int pvert = prefer_vert(topology, logical, level, output, depth, x, y, separator); \
- if (pvert) \
- RECURSE_VERT(level, methods, separator, border); \
- else \
- RECURSE_HORIZ(level, methods, separator, border); \
- } else {\
- RECURSE_RECT_BEGIN(obj, methods, separator, border) \
- RECURSE_CALL_FUN(methods); \
- RECURSE_RECT_END(obj, methods, separator, border); \
- } \
+ RECURSE_RECT_BEGIN(obj, methods, separator, border) \
+ RECURSE_CALL_FUN(methods); \
+ RECURSE_RECT_END(obj, methods, separator, border); \
} while (0)
/* Dynamic programming */
-/* Per-object data: width and height of drawing for this object and sub-objects */
-struct dyna_save {
- unsigned width;
- unsigned height;
- unsigned fontsize;
- unsigned gridsize;
-};
-
/* Save the computed size */
#define DYNA_SAVE() do { \
- if (!level->userdata) { \
- struct dyna_save *save = malloc(sizeof(*save)); \
+ struct lstopo_obj_userdata *save = level->userdata; \
save->width = *retwidth; \
save->height = *retheight; \
save->fontsize = fontsize; \
save->gridsize = gridsize; \
- level->userdata = save; \
- } \
} while (0)
/* Check whether we already computed the size and we are not actually drawing, in that case return it */
#define DYNA_CHECK() do { \
- if (level->userdata && methods == &null_draw_methods) { \
- struct dyna_save *save = level->userdata; \
+ if (methods == &null_draw_methods) { \
+ struct lstopo_obj_userdata *save = level->userdata; \
if (save->fontsize == fontsize && save->gridsize == gridsize) { \
*retwidth = save->width; \
*retheight = save->height; \
return; \
- } else { \
- /* Changed size, drop the existing computation */ \
- free(level->userdata); \
- level->userdata = NULL; \
} \
} \
} while (0)
@@ -471,7 +439,58 @@ lstopo_obj_snprintf(char *text, size_t textlen, hwloc_obj_t obj, int logical)
return snprintf(text, textlen, "%s%s%s", typestr, indexstr, totmemstr);
}
-static struct draw_methods getmax_draw_methods;
+static void
+lstopo_prepare_custom_styles(struct lstopo_output *loutput, hwloc_obj_t obj)
+{
+ struct lstopo_obj_userdata *lud = obj->userdata;
+ struct style *s = &lud->style;
+ hwloc_obj_t child;
+ unsigned forcer, forceg, forceb;
+ const char *stylestr;
+
+ lud->style_set = 0;
+
+ stylestr = hwloc_obj_get_info_by_name(obj, "lstopoStyle");
+ if (stylestr) {
+ while (*stylestr != '\0') {
+ if (sscanf(stylestr, "%02x%02x%02x", &forcer, &forceg, &forceb) == 3
+ || sscanf(stylestr, "Background=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
+ s->bg.r = forcer & 255;
+ s->bg.g = forceg & 255;
+ s->bg.b = forceb & 255;
+ lud->style_set |= 0x1;
+ loutput->methods->declare_color(loutput, s->bg.r, s->bg.g, s->bg.b);
+ s->t.r = s->t.g = s->t.b = (s->bg.r + s->bg.g + s->bg.b < 0xff) ? 0xff : 0;
+ } else if (sscanf(stylestr, "Background2=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
+ s->bg2.r = forcer & 255;
+ s->bg2.g = forceg & 255;
+ s->bg2.b = forceb & 255;
+ lud->style_set |= 0x2;
+ loutput->methods->declare_color(loutput, s->bg2.r, s->bg2.g, s->bg2.b);
+ s->t2.r = s->t2.g = s->t2.b = (s->bg2.r + s->bg2.g + s->bg2.b < 0xff) ? 0xff : 0;
+ } else if (sscanf(stylestr, "Text=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
+ s->t.r = forcer & 255;
+ s->t.g = forceg & 255;
+ s->t.b = forceb & 255;
+ lud->style_set |= 0x4;
+ loutput->methods->declare_color(loutput, s->t.r, s->t.g, s->t.b);
+ } else if (sscanf(stylestr, "Text2=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
+ s->t2.r = forcer & 255;
+ s->t2.g = forceg & 255;
+ s->t2.b = forceb & 255;
+ lud->style_set |= 0x8;
+ loutput->methods->declare_color(loutput, s->t2.r, s->t2.g, s->t2.b);
+ }
+ stylestr = strchr(stylestr, ';');
+ if (!stylestr)
+ break;
+ stylestr++;
+ }
+ }
+
+ for(child = obj->first_child; child; child = child->next_sibling)
+ lstopo_prepare_custom_styles(loutput, child);
+}
static void
lstopo_set_object_color(struct draw_methods *methods,
@@ -480,11 +499,10 @@ lstopo_set_object_color(struct draw_methods *methods,
* Machine status (0=normal, 1=displayed as a root/System) */
struct style *s)
{
- unsigned forcer, forceg, forceb;
- const char *style;
+ struct lstopo_obj_userdata *lud = obj->userdata;
/* no need to deal with colors when computing max sizes */
- if (methods == &getmax_draw_methods)
+ if (methods == &null_draw_methods)
return;
memset(s, 0, sizeof(*s));
@@ -595,34 +613,14 @@ lstopo_set_object_color(struct draw_methods *methods,
assert(0);
}
- style = hwloc_obj_get_info_by_name(obj, "lstopoStyle");
- if (style)
- while (*style != '\0') {
- if (sscanf(style, "%02x%02x%02x", &forcer, &forceg, &forceb) == 3
- || sscanf(style, "Background=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
- s->bg.r = forcer & 255;
- s->bg.g = forceg & 255;
- s->bg.b = forceb & 255;
- s->t.r = s->t.g = s->t.b = (s->bg.r + s->bg.g + s->bg.b < 0xff) ? 0xff : 0;
- } else if (sscanf(style, "Background2=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
- s->bg2.r = forcer & 255;
- s->bg2.g = forceg & 255;
- s->bg2.b = forceb & 255;
- s->t2.r = s->t2.g = s->t2.b = (s->bg2.r + s->bg2.g + s->bg2.b < 0xff) ? 0xff : 0;
- } else if (sscanf(style, "Text=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
- s->t.r = forcer & 255;
- s->t.g = forceg & 255;
- s->t.b = forceb & 255;
- } else if (sscanf(style, "Text2=#%02x%02x%02x", &forcer, &forceg, &forceb) == 3) {
- s->t2.r = forcer & 255;
- s->t2.g = forceg & 255;
- s->t2.b = forceb & 255;
- }
- style = strchr(style, ';');
- if (!style)
- break;
- style++;
- }
+ if (lud->style_set & 0x1)
+ memcpy(&s->bg, &lud->style.bg, sizeof(struct stylecolor));
+ if (lud->style_set & 0x2)
+ memcpy(&s->t, &lud->style.t, sizeof(struct stylecolor));
+ if (lud->style_set & 0x4)
+ memcpy(&s->bg2, &lud->style.bg2, sizeof(struct stylecolor));
+ if (lud->style_set & 0x8)
+ memcpy(&s->t2, &lud->style.t2, sizeof(struct stylecolor));
}
static void
@@ -649,7 +647,7 @@ pci_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_
} else {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
}
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
}
if (collapse > 1) {
@@ -689,15 +687,17 @@ pci_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_
static void
os_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_methods *methods, int logical __hwloc_attribute_unused, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
{
+ unsigned myheight = 0, totheight;
+ unsigned mywidth = 0, totwidth;
unsigned textwidth = gridsize;
- unsigned totheight = gridsize;
- unsigned totwidth = gridsize;
struct style style;
char text[64];
int n;
unsigned nmorelines = 0, i;
char morelines[3][64];
+ DYNA_CHECK();
+
if (fontsize) {
const char *coproctype;
@@ -769,19 +769,18 @@ os_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_m
}
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
for(i=0; i<nmorelines; i++) {
- int nn = strlen(morelines[i]);
- int ntextwidth = get_textwidth(output, methods, morelines[i], nn, fontsize, gridsize);
+ unsigned nn = (unsigned)strlen(morelines[i]);
+ unsigned ntextwidth = get_textwidth(output, morelines[i], nn, fontsize, gridsize);
if (ntextwidth > textwidth)
textwidth = ntextwidth;
}
- totheight = gridsize + (fontsize + gridsize)*(nmorelines+1);
- totwidth = gridsize + textwidth;
+ myheight = (fontsize + gridsize)*(nmorelines+1);
+ mywidth = 0;
}
- *retwidth = totwidth;
- *retheight = totheight;
+ RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
lstopo_set_object_color(methods, topology, level, 0, &style);
methods->box(output, style.bg.r, style.bg.g, style.bg.b, depth, x, *retwidth, y, *retheight);
@@ -791,6 +790,10 @@ os_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_m
for(i=0; i<nmorelines; i++)
methods->text(output, style.t.r, style.t.g, style.t.b, fontsize, depth-1, x + gridsize, y + (i+2)*gridsize + (i+1)*fontsize, morelines[i]);
}
+
+ RECURSE_RECT(level, methods, gridsize, gridsize);
+
+ DYNA_SAVE();
}
static void
@@ -874,7 +877,7 @@ pu_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hw
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
/* if smaller than other PU, artificially extend/shift it
* to make PU boxes nicer when vertically stacked.
*/
@@ -922,7 +925,7 @@ cache_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical,
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
textwidth += gridsize; /* artificially extend the minimal inner size because RECURSE_RECT() uses 0 as border when computing totwidth */
}
@@ -954,7 +957,7 @@ core_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical,
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
}
RECURSE_RECT(level, &null_draw_methods, 0, gridsize);
@@ -985,7 +988,7 @@ package_draw(hwloc_topology_t topology, struct draw_methods *methods, int logica
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
}
RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
@@ -1024,7 +1027,7 @@ node_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical,
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
textwidth += 2*gridsize; /* so artificially extend the minimal inner size to include space between space between epoxy and memory box */
}
@@ -1062,7 +1065,7 @@ machine_draw(hwloc_topology_t topology, struct draw_methods *methods, int logica
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
}
RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
@@ -1135,7 +1138,7 @@ system_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
}
if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
@@ -1173,7 +1176,7 @@ group_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical,
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
}
if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
@@ -1212,7 +1215,7 @@ misc_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical,
if (fontsize) {
n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
- textwidth = get_textwidth(output, methods, text, n, fontsize, gridsize);
+ textwidth = get_textwidth(output, text, n, fontsize, gridsize);
textwidth += gridsize; /* artificially extend the minimal inner size because RECURSE_RECT() uses 0 as border when computing totwidth */
}
@@ -1243,6 +1246,7 @@ fig(hwloc_topology_t topology, struct draw_methods *methods, int logical, int le
time_t t;
char text[128];
char hostname[128] = "";
+ const char *forcedhostname = NULL;
unsigned long hostname_size = sizeof(hostname);
system_draw(topology, methods, logical, level, output, depth, x, &totwidth, y, &totheight);
@@ -1253,15 +1257,19 @@ fig(hwloc_topology_t topology, struct draw_methods *methods, int logical, int le
if (legend) {
/* Display the hostname, but only if we're showing *this*
system */
- if (hwloc_topology_is_thissystem(topology)) {
-#ifdef HWLOC_WIN_SYS
+ forcedhostname = hwloc_obj_get_info_by_name(hwloc_get_root_obj(topology), "HostName");
+ if (!forcedhostname && hwloc_topology_is_thissystem(topology)) {
+#if defined(HWLOC_WIN_SYS) && !defined(__CYGWIN__)
GetComputerName(hostname, &hostname_size);
#else
gethostname(hostname, hostname_size);
#endif
}
- if (*hostname) {
- snprintf(text, sizeof(text), "Host: %s", hostname);
+ if (forcedhostname || *hostname) {
+ if (forcedhostname)
+ snprintf(text, sizeof(text), "Host: %s", forcedhostname);
+ else
+ snprintf(text, sizeof(text), "Host: %s", hostname);
methods->box(output, 0xff, 0xff, 0xff, depth, 0, totwidth, totheight, gridsize + (gridsize + fontsize)*(3+lstopo_append_legends_nr));
methods->text(output, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize, text);
offset = gridsize + fontsize;
@@ -1326,6 +1334,8 @@ get_type_fun(hwloc_obj_type_t type)
case HWLOC_OBJ_MISC: return misc_draw;
case HWLOC_OBJ_TYPE_MAX: assert(0);
}
+ /* for dumb compilers */
+ return misc_draw;
}
void
@@ -1348,6 +1358,7 @@ output_draw_start(struct lstopo_output *output)
methods->declare_color(output, MISC_R_COLOR, MISC_G_COLOR, MISC_B_COLOR);
methods->declare_color(output, PCI_DEVICE_R_COLOR, PCI_DEVICE_G_COLOR, PCI_DEVICE_B_COLOR);
methods->declare_color(output, BRIDGE_R_COLOR, BRIDGE_G_COLOR, BRIDGE_B_COLOR);
+ lstopo_prepare_custom_styles(output, hwloc_get_root_obj(output->topology));
}
static void
@@ -1365,14 +1376,24 @@ output_compute_pu_min_textwidth(struct lstopo_output *output)
if (output->logical) {
unsigned depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU);
- lastpu = hwloc_get_obj_by_depth(topology, HWLOC_OBJ_PU, hwloc_get_nbobjs_by_depth(topology, depth)-1);
- } else {
+ lastpu = hwloc_get_obj_by_depth(topology, depth, hwloc_get_nbobjs_by_depth(topology, depth)-1);
+ } else if (hwloc_topology_get_topology_cpuset(topology)) {
unsigned lastidx = hwloc_bitmap_last(hwloc_topology_get_topology_cpuset(topology));
lastpu = hwloc_get_pu_obj_by_os_index(topology, lastidx);
+ } else {
+ /* no easy way to find the max os_index in custom topologies */
+ unsigned depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU);
+ hwloc_obj_t curpu = hwloc_get_obj_by_depth(topology, depth, 0);
+ lastpu = curpu;
+ while (curpu) {
+ if (curpu->os_index > lastpu->os_index)
+ lastpu = curpu;
+ curpu = curpu->next_cousin;
+ }
}
n = lstopo_obj_snprintf(text, sizeof(text), lastpu, output->logical);
- output->min_pu_textwidth = get_textwidth(output, output->methods, text, n, fontsize, gridsize);
+ output->min_pu_textwidth = get_textwidth(output, text, n, fontsize, gridsize);
}
void
@@ -1381,22 +1402,3 @@ output_draw(struct lstopo_output *output)
output_compute_pu_min_textwidth(output);
fig(output->topology, output->methods, output->logical, output->legend, hwloc_get_root_obj(output->topology), output, 100, 0, 0);
}
-
-static void
-draw_clear(hwloc_topology_t topology, hwloc_obj_t level)
-{
- unsigned i;
-
- free(level->userdata);
- level->userdata = NULL;
-
- for (i = 0; i < level->arity; i++)
- draw_clear(topology, level->children[i]);
-}
-
-void
-output_draw_clear(struct lstopo_output *loutput)
-{
- hwloc_topology_t topology = loutput->topology;
- draw_clear(topology, hwloc_get_root_obj(topology));
-}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-fig.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-fig.c
index 020df03..6eb83dd 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-fig.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-fig.c
@@ -1,11 +1,12 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
+#include <private/autogen/config.h>
#include <hwloc.h>
#include <stdlib.h>
@@ -103,7 +104,7 @@ fig_text(void *loutput_, int r, int g, int b, int size, unsigned depth, unsigned
{
struct lstopo_output *loutput = loutput_;
FILE *file = loutput->file;
- unsigned len = strlen(text);
+ int len = (int)strlen(text);
int color = rgb_to_fig(r, g, b);
x *= FIG_FACTOR;
y *= FIG_FACTOR;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-no-graphics.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-no-graphics.1in
index 8ae0fc9..def8c16 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-no-graphics.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-no-graphics.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2009-2015 Inria. All rights reserved.
+.\" Copyright © 2009-2016 Inria. All rights reserved.
.\" Copyright © 2009-2010 Université of Bordeaux
.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
.\" See COPYING in top-level directory.
@@ -115,6 +115,7 @@ Do not show caches.
.TP
\fB\-\-no\-useless\-caches\fR
Do not show caches which do not have a hierarchical impact.
+This calls hwloc_topology_ignore_type_keep_structure() for cache objects.
.TP
\fB\-\-no\-icaches\fR
Do not show Instruction caches, only Data and Unified caches are displayed.
@@ -124,6 +125,7 @@ Do not consider administration limitations.
.TP
\fB\-\-merge\fR
Do not show levels that do not have a hierarchical impact.
+This calls hwloc_topology_ignore_all_keep_structure().
.TP
\fB\-\-no\-collapse\fR
Do not collapse identical PCI devices.
@@ -191,6 +193,7 @@ Set size of margin between elements.
Horizontal graphical layout instead of nearly 4/3 ratio.
If a comma-separated list of types is given, the layout only
applies to the corresponding containers.
+Ignored for bridges since their children are always vertically aligned.
.TP
\fB\-\-vert\fR, \fB\-\-vert\fR=<type1,...>
Vertical graphical layout instead of nearly 4/3 ratio.
@@ -198,10 +201,10 @@ If a comma-separated list of types is given, the layout only
applies to the corresponding containers.
.TP
\fB\-\-rect\fR, \fB\-\-rect\fR=<type1,...>
-Rectangular graphical layout with nearly 4/3 ratio,
-including when placing NUMA nodes.
+Rectangular graphical layout with nearly 4/3 ratio.
If a comma-separated list of types is given, the layout only
applies to the corresponding containers.
+Ignored for bridges since their children are always vertically aligned.
.TP
\fB\-\-no\-legend\fR
Remove the text legend at the bottom.
@@ -415,10 +418,10 @@ For instance, to display all core objects in blue (with white names):
.\" **************************
.SH LAYOUT
In its graphical output, lstopo uses simple rectangular heuristics
-to try to achieve a 4/3 ratio between width and height. However,
-in the particular case of NUMA nodes, the layout is always a flat
-rectangle, to avoid letting the user believe any particular NUMA
-topology (lstopo is not able to render that yet).
+to try to achieve a 4/3 ratio between width and height.
+Although the hierarchy of resources is properly reflected,
+the exact physical organization (NUMA distances, rings,
+complete graphs, etc.) is currently ignored.
.
The layout of a level may be changed with \-\-vert, \-\-horiz,
and \-\-rect.
@@ -490,7 +493,7 @@ To only show the cpusets of package:
Simulate a fake hierarchy; this example shows with 2 NUMA nodes of 2
processor units:
- lstopo --input "n:2 2"
+ lstopo --input "node:2 2"
To count the number of logical processors in the system
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-text.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-text.c
index 40d8f7f..0bcd30c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-text.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-text.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -278,8 +278,10 @@ void output_synthetic(struct lstopo_output *loutput, const char *filename)
}
length = hwloc_topology_export_synthetic(topology, sbuffer, sizeof(sbuffer), lstopo_export_synthetic_flags);
- if (length < 0)
+ if (length < 0) {
+ fprintf(stderr, "Failed to export a synthetic description (%s)\n", strerror(errno));
return;
+ }
if (length >= sizeof(sbuffer)) {
dbuffer = malloc(length+1 /* \0 */);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-windows.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-windows.c
index e41515b..7f96a00 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-windows.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo-windows.c
@@ -1,11 +1,12 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010, 2012 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
+#include <private/autogen/config.h>
#include <hwloc.h>
#include <stdlib.h>
@@ -60,6 +61,7 @@ static int finish;
static int the_width, the_height;
static int win_width, win_height;
static unsigned int the_fontsize, the_gridsize;
+static float the_scale;
static void
windows_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height);
@@ -69,13 +71,48 @@ WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
int redraw = 0;
switch (message) {
+ case WM_CHAR: {
+ switch (wparam) {
+ case '+':
+ the_scale *= 1.2f;
+ redraw = 1;
+ break;
+ case '-':
+ the_scale /= 1.2f;
+ redraw = 1;
+ break;
+ case 'f':
+ case 'F': {
+ float wscale, hscale;
+ wscale = win_width / (float)the_width;
+ hscale = win_height / (float)the_height;
+ the_scale *= wscale > hscale ? hscale : wscale;
+ redraw = 1;
+ break;
+ }
+ case '1':
+ the_scale = 1.0;
+ redraw = 1;
+ break;
+ case 'q':
+ case 'Q':
+ finish = 1;
+ break;
+ }
+ break;
+ }
+
case WM_PAINT: {
HFONT font;
BeginPaint(hwnd, &the_output.ps);
font = CreateFont(fontsize, 0, 0, 0, 0, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, NULL);
SelectObject(the_output.ps.hdc, (HGDIOBJ) font);
windows_box(&the_output, 0xff, 0xff, 0xff, 0, 0, win_width, 0, win_height);
+ the_output.max_x = 0;
+ the_output.max_y = 0;
output_draw(&the_output.loutput);
+ the_width = the_output.max_x;
+ the_height = the_output.max_y;
DeleteObject(font);
EndPaint(hwnd, &the_output.ps);
break;
@@ -103,8 +140,6 @@ WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
break;
case WM_KEYDOWN:
switch (wparam) {
- case 'q':
- case 'Q':
case VK_ESCAPE:
finish = 1;
break;
@@ -169,11 +204,18 @@ WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
if (hwnd == the_output.toplevel)
PostQuitMessage(0);
return 0;
- case WM_SIZE:
+ case WM_SIZE: {
+ float wscale, hscale;
win_width = LOWORD(lparam);
win_height = HIWORD(lparam);
+ wscale = win_width / (float)the_width;
+ hscale = win_height / (float)the_height;
+ the_scale *= wscale > hscale ? hscale : wscale;
+ if (the_scale < 1.0f)
+ the_scale = 1.0f;
redraw = 1;
break;
+ }
}
if (redraw) {
if (x_delta > the_width - win_width)
@@ -184,22 +226,8 @@ WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
x_delta = 0;
if (y_delta < 0)
y_delta = 0;
- if (win_width > the_width && win_height > the_height) {
- fontsize = the_fontsize;
- gridsize = the_gridsize;
- if (win_width > the_width) {
- fontsize = the_fontsize * win_width / the_width;
- gridsize = the_gridsize * win_width / the_width;
- }
- if (win_height > the_height) {
- unsigned int new_fontsize = the_fontsize * win_height / the_height;
- unsigned int new_gridsize = the_gridsize * win_height / the_height;
- if (new_fontsize < fontsize)
- fontsize = new_fontsize;
- if (new_gridsize < gridsize)
- gridsize = new_gridsize;
- }
- }
+ fontsize = (unsigned)(the_fontsize * the_scale);
+ gridsize = (unsigned)(the_gridsize * the_scale);
RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE);
}
return DefWindowProc(hwnd, message, wparam, lparam);
@@ -264,11 +292,25 @@ windows_init(void *output)
the_width = width;
the_height = height;
+ the_scale = 1.0f;
+
the_fontsize = fontsize;
the_gridsize = gridsize;
/* and display the window */
ShowWindow(toplevel, SW_SHOWDEFAULT);
+
+ printf("\n");
+ printf("Keyboard shortcuts:\n");
+ printf(" Zoom-in or out .................... + -\n");
+ printf(" Try to fit scale to window ........ f F\n");
+ printf(" Reset scale to default ............ 1\n");
+ printf(" Scroll vertically ................. Up Down PageUp PageDown\n");
+ printf(" Scroll horizontally ............... Left Right Ctrl+PageUp/Down\n");
+ printf(" Scroll to the top-left corner ..... Home\n");
+ printf(" Scroll to the bottom-right corner . End\n");
+ printf(" Exit .............................. q Q Esc\n");
+ printf("\n\n");
}
static void
@@ -277,6 +319,7 @@ windows_declare_color(void *output, int r, int g, int b)
struct lstopo_windows_output *woutput = output;
HBRUSH brush;
COLORREF color;
+ struct color *tmp;
if (!woutput->drawing)
return;
@@ -288,7 +331,12 @@ windows_declare_color(void *output, int r, int g, int b)
exit(EXIT_FAILURE);
}
- colors = realloc(colors, sizeof(*colors) * (numcolors + 1));
+ tmp = realloc(colors, sizeof(*colors) * (numcolors + 1));
+ if (!tmp) {
+ fprintf(stderr, "Failed to realloc the colors array\n");
+ return;
+ }
+ colors = tmp;
colors[numcolors].r = r;
colors[numcolors].g = g;
colors[numcolors].b = b;
@@ -302,17 +350,17 @@ windows_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_
struct lstopo_windows_output *woutput = output;
PAINTSTRUCT *ps = &woutput->ps;
- if (!woutput->drawing) {
- if (x > woutput->max_x)
- woutput->max_x = x;
- if (x+width > woutput->max_x)
- woutput->max_x = x + width;
- if (y > woutput->max_y)
- woutput->max_y = y;
- if (y + height > woutput->max_y)
- woutput->max_y = y + height;
+ if (x > woutput->max_x)
+ woutput->max_x = x;
+ if (x+width > woutput->max_x)
+ woutput->max_x = x + width;
+ if (y > woutput->max_y)
+ woutput->max_y = y;
+ if (y + height > woutput->max_y)
+ woutput->max_y = y + height;
+
+ if (!woutput->drawing)
return;
- }
SelectObject(ps->hdc, rgb_to_brush(r, g, b));
SetBkColor(ps->hdc, RGB(r, g, b));
@@ -325,17 +373,17 @@ windows_line(void *output, int r, int g, int b, unsigned depth __hwloc_attribute
struct lstopo_windows_output *woutput = output;
PAINTSTRUCT *ps = &woutput->ps;
- if (!woutput->drawing) {
- if (x1 > woutput->max_x)
- woutput->max_x = x1;
- if (x2 > woutput->max_x)
- woutput->max_x = x2;
- if (y1 > woutput->max_y)
- woutput->max_y = y1;
- if (y2 > woutput->max_y)
- woutput->max_y = y2;
+ if (x1 > woutput->max_x)
+ woutput->max_x = x1;
+ if (x2 > woutput->max_x)
+ woutput->max_x = x2;
+ if (y1 > woutput->max_y)
+ woutput->max_y = y1;
+ if (y2 > woutput->max_y)
+ woutput->max_y = y2;
+
+ if (!woutput->drawing)
return;
- }
SelectObject(ps->hdc, rgb_to_brush(r, g, b));
MoveToEx(ps->hdc, x1 - x_delta, y1 - y_delta, NULL);
@@ -352,7 +400,7 @@ windows_text(void *output, int r, int g, int b, int size __hwloc_attribute_unuse
return;
SetTextColor(ps->hdc, RGB(r, g, b));
- TextOut(ps->hdc, x - x_delta, y - y_delta, text, strlen(text));
+ TextOut(ps->hdc, x - x_delta, y - y_delta, text, (int)strlen(text));
}
static void
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.c
index 1928ab6..70897a7 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2012, 2015 Université Bordeaux
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -272,6 +272,37 @@ lstopo_add_collapse_attributes(hwloc_topology_t topology)
}
}
+static void
+lstopo_populate_userdata(hwloc_obj_t parent)
+{
+ hwloc_obj_t child;
+ struct lstopo_obj_userdata *save = malloc(sizeof(*save));
+
+ save->common.buffer = NULL; /* so that it is ignored on XML export */
+ save->common.next = parent->userdata;
+ save->fontsize = (unsigned) -1;
+ save->gridsize = (unsigned) -1;
+ parent->userdata = save;
+
+ for(child = parent->first_child; child; child = child->next_sibling)
+ lstopo_populate_userdata(child);
+}
+
+static void
+lstopo_destroy_userdata(hwloc_obj_t parent)
+{
+ hwloc_obj_t child;
+ struct lstopo_obj_userdata *save = parent->userdata;
+
+ if (save) {
+ parent->userdata = save->common.next;
+ free(save);
+ }
+
+ for(child = parent->first_child; child; child = child->next_sibling)
+ lstopo_destroy_userdata(child);
+}
+
void usage(const char *name, FILE *where)
{
fprintf (where, "Usage: %s [ options ] ... [ filename.format ]\n\n", name);
@@ -596,13 +627,19 @@ main (int argc, char *argv[])
loutput.legend = 0;
}
else if (!strcmp (argv[0], "--append-legend")) {
+ char **tmp;
if (argc < 2) {
usage (callname, stderr);
exit(EXIT_FAILURE);
}
- lstopo_append_legends = realloc(lstopo_append_legends, (lstopo_append_legends_nr+1) * sizeof(*lstopo_append_legends));
- lstopo_append_legends[lstopo_append_legends_nr] = strdup(argv[1]);
- lstopo_append_legends_nr++;
+ tmp = realloc(lstopo_append_legends, (lstopo_append_legends_nr+1) * sizeof(*lstopo_append_legends));
+ if (!tmp) {
+ fprintf(stderr, "Failed to realloc legend append array, legend ignored.\n");
+ } else {
+ lstopo_append_legends = tmp;
+ lstopo_append_legends[lstopo_append_legends_nr] = strdup(argv[1]);
+ lstopo_append_legends_nr++;
+ }
opt = 1;
}
@@ -655,7 +692,7 @@ main (int argc, char *argv[])
hwloc_topology_ignore_all_keep_structure(topology);
if (input) {
- err = hwloc_utils_enable_input_format(topology, input, input_format, loutput.verbose_mode > 1, callname);
+ err = hwloc_utils_enable_input_format(topology, input, &input_format, loutput.verbose_mode > 1, callname);
if (err)
return err;
}
@@ -668,6 +705,38 @@ main (int argc, char *argv[])
}
}
+ /* if the output format wasn't enforced, look at the filename */
+ if (filename && output_format == LSTOPO_OUTPUT_DEFAULT) {
+ if (!strcmp(filename, "-")
+ || !strcmp(filename, "/dev/stdout")) {
+ output_format = LSTOPO_OUTPUT_CONSOLE;
+ } else {
+ char *dot = strrchr(filename, '.');
+ if (dot)
+ output_format = parse_output_format(dot+1, callname);
+ else {
+ fprintf(stderr, "Cannot infer output type for file `%s' without any extension, using default output.\n", filename);
+ filename = NULL;
+ }
+ }
+ }
+
+ /* if the output format wasn't enforced, think a bit about what the user probably want */
+ if (output_format == LSTOPO_OUTPUT_DEFAULT) {
+ if (lstopo_show_cpuset
+ || lstopo_show_only != (hwloc_obj_type_t)-1
+ || loutput.verbose_mode != LSTOPO_VERBOSE_MODE_DEFAULT)
+ output_format = LSTOPO_OUTPUT_CONSOLE;
+ }
+
+ if (input_format == HWLOC_UTILS_INPUT_XML
+ && output_format == LSTOPO_OUTPUT_XML) {
+ /* must be after parsing output format and before loading the topology */
+ putenv("HWLOC_XML_USERDATA_NOT_DECODED=1");
+ hwloc_topology_set_userdata_import_callback(topology, hwloc_utils_userdata_import_cb);
+ hwloc_topology_set_userdata_export_callback(topology, hwloc_utils_userdata_export_cb);
+ }
+
err = hwloc_topology_load (topology);
if (err) {
fprintf(stderr, "hwloc_topology_load() failed (%s).\n", strerror(errno));
@@ -696,30 +765,6 @@ main (int argc, char *argv[])
free(restrictstring);
}
- /* if the output format wasn't enforced, look at the filename */
- if (filename && output_format == LSTOPO_OUTPUT_DEFAULT) {
- if (!strcmp(filename, "-")
- || !strcmp(filename, "/dev/stdout")) {
- output_format = LSTOPO_OUTPUT_CONSOLE;
- } else {
- char *dot = strrchr(filename, '.');
- if (dot)
- output_format = parse_output_format(dot+1, callname);
- else {
- fprintf(stderr, "Cannot infer output type for file `%s' without any extension, using default output.\n", filename);
- filename = NULL;
- }
- }
- }
-
- /* if the output format wasn't enforced, think a bit about what the user probably want */
- if (output_format == LSTOPO_OUTPUT_DEFAULT) {
- if (lstopo_show_cpuset
- || lstopo_show_only != (hwloc_obj_type_t)-1
- || loutput.verbose_mode != LSTOPO_VERBOSE_MODE_DEFAULT)
- output_format = LSTOPO_OUTPUT_CONSOLE;
- }
-
if (loutput.logical == -1) {
if (output_format == LSTOPO_OUTPUT_CONSOLE)
loutput.logical = 1;
@@ -730,6 +775,8 @@ main (int argc, char *argv[])
loutput.topology = topology;
loutput.file = NULL;
+ lstopo_populate_userdata(hwloc_get_root_obj(topology));
+
if (output_format != LSTOPO_OUTPUT_XML && lstopo_collapse)
lstopo_add_collapse_attributes(topology);
@@ -803,7 +850,8 @@ main (int argc, char *argv[])
exit(EXIT_FAILURE);
}
- output_draw_clear(&loutput);
+ lstopo_destroy_userdata(hwloc_get_root_obj(topology));
+ hwloc_utils_userdata_free_recursive(hwloc_get_root_obj(topology));
hwloc_topology_destroy (topology);
for(i=0; i<lstopo_append_legends_nr; i++)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.h b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.h
index 0a8b164..0c52c55 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo/lstopo.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2015 Inria. All rights reserved.
+ * Copyright © 2009-2016 Inria. All rights reserved.
* Copyright © 2009-2010, 2012, 2015 Université Bordeaux
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -9,7 +9,9 @@
#ifndef UTILS_LSTOPO_H
#define UTILS_LSTOPO_H
+#include <private/autogen/config.h>
#include <hwloc.h>
+#include <misc.h>
extern int lstopo_ignore_pus;
extern int lstopo_collapse;
@@ -38,6 +40,29 @@ struct lstopo_output {
unsigned min_pu_textwidth;
};
+struct style {
+ struct stylecolor { int r, g, b; }
+ bg, /* main box background color */
+ t, /* main text color */
+ bg2, /* other box background color */
+ t2; /* other text color */
+};
+
+struct lstopo_obj_userdata {
+ /* original common userdata (we replace the first one with this extended structure) */
+ struct hwloc_utils_userdata common;
+
+ /* draw info */
+ unsigned width;
+ unsigned height;
+ unsigned fontsize;
+ unsigned gridsize;
+
+ /* custom style */
+ struct style style;
+ unsigned style_set; /* 0x1 if bg set, 0x2 for t, 0x4 for bg2, 0x8 for t2 */
+};
+
typedef void output_method (struct lstopo_output *output, const char *filename);
extern output_method output_console, output_synthetic, output_ascii, output_x11, output_fig, output_png, output_pdf, output_ps, output_svg, output_windows, output_xml;
@@ -64,7 +89,6 @@ extern enum lstopo_orient_e force_orient[];
extern void output_draw_start(struct lstopo_output *output);
extern void output_draw(struct lstopo_output *output);
-extern void output_draw_clear(struct lstopo_output *output);
int rgb_to_color(int r, int g, int b) __hwloc_attribute_const;
int declare_color(int r, int g, int b);
diff --git a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
index 987e52a..ce15fe7 100644
--- a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
+++ b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
@@ -10,7 +10,6 @@
#include "topo_hwloc.h"
#define MAP_LENGTH (5)
-#define DBG_STR_LENGTH (128)
struct HYDT_topo_hwloc_info HYDT_topo_hwloc_info = { 0 };
@@ -31,8 +30,8 @@ static HYD_status handle_user_binding(const char *binding)
for (i = 0; binding[i]; i++)
if (binding[i] == ',')
num_bind_entries++;
- HYDU_MALLOC(bind_entries, char **, num_bind_entries * sizeof(char *), status);
- HYDU_MALLOC(bind_entry_lengths, int *, num_bind_entries * sizeof(int), status);
+ HYDU_MALLOC_OR_JUMP(bind_entries, char **, num_bind_entries * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(bind_entry_lengths, int *, num_bind_entries * sizeof(int), status);
for (i = 0; i < num_bind_entries; i++)
bind_entry_lengths[i] = 0;
@@ -46,7 +45,7 @@ static HYD_status handle_user_binding(const char *binding)
}
for (i = 0; i < num_bind_entries; i++) {
- HYDU_MALLOC(bind_entries[i], char *, bind_entry_lengths[i] * sizeof(char), status);
+ HYDU_MALLOC_OR_JUMP(bind_entries[i], char *, bind_entry_lengths[i] * sizeof(char), status);
}
j = 0;
@@ -63,8 +62,8 @@ static HYD_status handle_user_binding(const char *binding)
bind_entries[j][k++] = 0;
/* initialize bitmaps */
- HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
- num_bind_entries * sizeof(hwloc_bitmap_t), status);
+ HYDU_MALLOC_OR_JUMP(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
+ num_bind_entries * sizeof(hwloc_bitmap_t), status);
for (i = 0; i < num_bind_entries; i++) {
HYDT_topo_hwloc_info.bitmap[i] = hwloc_bitmap_alloc();
@@ -81,10 +80,10 @@ static HYD_status handle_user_binding(const char *binding)
/* free temporary memory */
for (i = 0; i < num_bind_entries; i++) {
- HYDU_FREE(bind_entries[i]);
+ MPL_free(bind_entries[i]);
}
- HYDU_FREE(bind_entries);
- HYDU_FREE(bind_entry_lengths);
+ MPL_free(bind_entries);
+ MPL_free(bind_entry_lengths);
fn_exit:
HYDU_FUNC_EXIT();
@@ -106,8 +105,8 @@ static HYD_status handle_rr_binding(void)
/* initialize bitmaps */
HYDT_topo_hwloc_info.num_bitmaps = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
- HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
- HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
+ HYDU_MALLOC_OR_JUMP(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
+ HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
for (i = 0; i < HYDT_topo_hwloc_info.num_bitmaps; i++) {
HYDT_topo_hwloc_info.bitmap[i] = hwloc_bitmap_alloc();
@@ -124,7 +123,7 @@ static HYD_status handle_rr_binding(void)
static HYD_status split_count_field(const char *str, char **split_str, int *count)
{
- char *full_str = HYDU_strdup(str), *count_str;
+ char *full_str = MPL_strdup(str), *count_str;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -136,12 +135,8 @@ static HYD_status split_count_field(const char *str, char **split_str, int *coun
else
*count = 1;
- fn_exit:
HYDU_FUNC_EXIT();
return status;
-
- fn_fail:
- goto fn_exit;
}
static int parse_cache_string(const char *str)
@@ -151,7 +146,7 @@ static int parse_cache_string(const char *str)
if (str[0] != 'l')
return 0;
- t1 = HYDU_strdup(str + 1);
+ t1 = MPL_strdup(str + 1);
for (t2 = t1;; t2++) {
if (*t2 == 'c') {
*t2 = 0;
@@ -272,8 +267,9 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
total_map_domains = (i * total_map_objs) / map_count;
/* initialize the map domains */
- HYDU_MALLOC(map_domains, hwloc_bitmap_t *, total_map_domains * sizeof(hwloc_bitmap_t), status);
- HYDU_MALLOC(start_pu, hwloc_obj_t *, total_map_domains * sizeof(hwloc_obj_t), status);
+ HYDU_MALLOC_OR_JUMP(map_domains, hwloc_bitmap_t *, total_map_domains * sizeof(hwloc_bitmap_t),
+ status);
+ HYDU_MALLOC_OR_JUMP(start_pu, hwloc_obj_t *, total_map_domains * sizeof(hwloc_obj_t), status);
/* For each map domain, find the next map object (first map object
* for the first map domain) and add the following "map_count"
@@ -320,8 +316,8 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
}
/* initialize bitmaps */
- HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
- HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
+ HYDU_MALLOC_OR_JUMP(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
+ HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
for (i = 0; i < HYDT_topo_hwloc_info.num_bitmaps; i++) {
HYDT_topo_hwloc_info.bitmap[i] = hwloc_bitmap_alloc();
@@ -373,8 +369,8 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
}
/* free temporary memory */
- HYDU_FREE(map_domains);
- HYDU_FREE(start_pu);
+ MPL_free(map_domains);
+ MPL_free(start_pu);
fn_exit:
HYDU_FUNC_EXIT();
@@ -455,29 +451,35 @@ HYD_status HYDT_topo_hwloc_bind(int idx)
if (!HYDT_topo_hwloc_info.user_binding || (idx < HYDT_topo_hwloc_info.num_bitmaps)) {
id = idx % HYDT_topo_hwloc_info.num_bitmaps;
- /* For debugging, print the binding bitmaps but don't actually bind. */
if (HYDT_topo_info.debug) {
- int i, cur;
- char binding[DBG_STR_LENGTH];
-
- cur = HYDU_snprintf(binding, DBG_STR_LENGTH, "process %d binding: ", idx);
-
- for (i = 0; i < HYDT_topo_hwloc_info.total_num_pus; i++)
- cur += HYDU_snprintf(&binding[cur], DBG_STR_LENGTH - cur + 1, "%d ",
- hwloc_bitmap_isset(HYDT_topo_hwloc_info.bitmap[id], i));
+ /* Print the binding bitmaps for debugging. */
+ int i;
+ char *binding;
+
+ HYDU_MALLOC_OR_JUMP(binding, char *, HYDT_topo_hwloc_info.total_num_pus + 1, status);
+ memset(binding, '\0', HYDT_topo_hwloc_info.total_num_pus + 1);
+
+ for (i = 0; i < HYDT_topo_hwloc_info.total_num_pus; i++) {
+ if (hwloc_bitmap_isset(HYDT_topo_hwloc_info.bitmap[id], i))
+ *(binding + i) = '1';
+ else
+ *(binding + i) = '0';
+ }
- HYDU_snprintf(&binding[cur], DBG_STR_LENGTH - cur + 1, "\n");
- HYDU_dump_noprefix(stdout, "%s", binding);
- }
- else {
- hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
- hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id],
- HYDT_topo_hwloc_info.membind, 0);
+ HYDU_dump_noprefix(stdout, "process %d binding: %s\n", idx, binding);
+ MPL_free(binding);
}
+ hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
+ hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id],
+ HYDT_topo_hwloc_info.membind, 0);
}
+ fn_exit:
HYDU_FUNC_EXIT();
return status;
+
+ fn_fail:
+ goto fn_exit;
}
HYD_status HYDT_topo_hwloc_finalize(void)
diff --git a/src/pm/hydra/tools/topo/topo.c b/src/pm/hydra/tools/topo/topo.c
index 2b3a6ce..4c0f060 100644
--- a/src/pm/hydra/tools/topo/topo.c
+++ b/src/pm/hydra/tools/topo/topo.c
@@ -24,11 +24,11 @@ HYD_status HYDT_topo_init(char *user_topolib, char *user_binding, char *user_map
HYDU_FUNC_ENTER();
if (user_topolib)
- HYDT_topo_info.topolib = HYDU_strdup(user_topolib);
+ HYDT_topo_info.topolib = MPL_strdup(user_topolib);
else if (MPL_env2str("HYDRA_TOPOLIB", &topolib))
- HYDT_topo_info.topolib = HYDU_strdup(topolib);
+ HYDT_topo_info.topolib = MPL_strdup(topolib);
else if (HYDRA_DEFAULT_TOPOLIB)
- HYDT_topo_info.topolib = HYDU_strdup(HYDRA_DEFAULT_TOPOLIB);
+ HYDT_topo_info.topolib = MPL_strdup(HYDRA_DEFAULT_TOPOLIB);
else
HYDT_topo_info.topolib = NULL;
@@ -113,7 +113,7 @@ HYD_status HYDT_topo_finalize(void)
#endif /* HAVE_HWLOC */
if (HYDT_topo_info.topolib)
- HYDU_FREE(HYDT_topo_info.topolib);
+ MPL_free(HYDT_topo_info.topolib);
fn_exit:
HYDU_FUNC_EXIT();
diff --git a/src/pm/hydra/ui/mpich/mpiexec.c b/src/pm/hydra/ui/mpich/mpiexec.c
index c07542f..f68ce2d 100644
--- a/src/pm/hydra/ui/mpich/mpiexec.c
+++ b/src/pm/hydra/ui/mpich/mpiexec.c
@@ -9,7 +9,6 @@
#include "mpiexec.h"
#include "pmci.h"
#include "bsci.h"
-#include "hydt_ftb.h"
#include "demux.h"
#include "ui.h"
#include "uiu.h"
@@ -104,7 +103,7 @@ static HYD_status qsort_node_list(void)
for (count = 0, node = HYD_server_info.node_list; node; node = node->next, count++)
/* skip */ ;
- HYDU_MALLOC(node_list, struct HYD_node **, count * sizeof(struct HYD_node *), status);
+ HYDU_MALLOC_OR_JUMP(node_list, struct HYD_node **, count * sizeof(struct HYD_node *), status);
for (i = 0, node = HYD_server_info.node_list; node; node = node->next, i++)
node_list[i] = node;
@@ -118,7 +117,7 @@ static HYD_status qsort_node_list(void)
}
HYD_server_info.node_list = new_list;
- HYDU_FREE(node_list);
+ MPL_free(node_list);
fn_exit:
return status;
@@ -145,9 +144,6 @@ int main(int argc, char **argv)
status = HYDU_set_common_signals(signal_cb);
HYDU_ERR_POP(status, "unable to set signal\n");
- status = HYDT_ftb_init();
- HYDU_ERR_POP(status, "unable to initialize FTB\n");
-
/* Get user preferences */
status = HYD_uii_mpx_get_parameters(argv);
HYDU_ERR_POP(status, "error parsing parameters\n");
@@ -295,9 +291,9 @@ int main(int argc, char **argv)
}
if (node)
- HYD_server_info.localhost = HYDU_strdup(node->hostname);
+ HYD_server_info.localhost = MPL_strdup(node->hostname);
else {
- HYDU_MALLOC(HYD_server_info.localhost, char *, MAX_HOSTNAME_LEN, status);
+ HYDU_MALLOC_OR_JUMP(HYD_server_info.localhost, char *, MAX_HOSTNAME_LEN, status);
if (gethostname(HYD_server_info.localhost, MAX_HOSTNAME_LEN) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "unable to get local hostname\n");
}
@@ -325,7 +321,7 @@ int main(int argc, char **argv)
MPL_env2str("MPICH_PORT_RANGE", (const char **) &HYD_server_info.port_range) ||
MPL_env2str("MPIEXEC_PORTRANGE", (const char **) &HYD_server_info.port_range) ||
MPL_env2str("MPIEXEC_PORT_RANGE", (const char **) &HYD_server_info.port_range))
- HYD_server_info.port_range = HYDU_strdup(HYD_server_info.port_range);
+ HYD_server_info.port_range = MPL_strdup(HYD_server_info.port_range);
/* Add the stdout/stderr callback handlers */
HYD_server_info.stdout_cb = HYD_uiu_stdout_cb;
@@ -374,9 +370,6 @@ int main(int argc, char **argv)
status = HYD_pmci_finalize();
HYDU_ERR_POP(status, "process manager error on finalize\n");
- status = HYDT_ftb_finalize();
- HYDU_ERR_POP(status, "error finalizing FTB\n");
-
#if defined ENABLE_PROFILING
if (HYD_server_info.enable_profiling) {
HYDU_dump_noprefix(stdout, "\n");
@@ -391,6 +384,7 @@ int main(int argc, char **argv)
/* Free the mpiexec params */
HYD_uiu_free_params();
HYDU_free_exec_list(HYD_uii_mpx_exec_list);
+ HYDU_sock_finalize();
fn_exit:
HYDU_dbg_finalize();
diff --git a/src/pm/hydra/ui/mpich/utils.c b/src/pm/hydra/ui/mpich/utils.c
index d72172f..9e18a75 100644
--- a/src/pm/hydra/ui/mpich/utils.c
+++ b/src/pm/hydra/ui/mpich/utils.c
@@ -48,7 +48,8 @@ static HYD_status get_current_exec(struct HYD_exec **exec)
static void help_help_fn(void)
{
printf("\n");
- printf("Usage: ./mpiexec [global opts] [local opts for exec1] [exec1] [exec1 args] : [local opts for exec2] [exec2] [exec2 args] : ...\n\n");
+ printf
+ ("Usage: ./mpiexec [global opts] [local opts for exec1] [exec1] [exec1 args] : [local opts for exec2] [exec2] [exec2 args] : ...\n\n");
printf("Global options (passed to all executables):\n");
@@ -194,29 +195,29 @@ static HYD_status genv_fn(char *arg, char ***argv)
HYDU_ERR_POP(status, "string break returned error\n");
(*argv)++;
- env_name = HYDU_strdup(str[0]);
+ env_name = MPL_strdup(str[0]);
if (str[1] == NULL) { /* The environment is not of the form x=foo */
if (**argv == NULL) {
status = HYD_INTERNAL_ERROR;
goto fn_fail;
}
- env_value = HYDU_strdup(**argv);
+ env_value = MPL_strdup(**argv);
(*argv)++;
}
else {
- env_value = HYDU_strdup(str[1]);
+ env_value = MPL_strdup(str[1]);
}
HYDU_append_env_to_list(env_name, env_value, &HYD_server_info.user_global.global_env.user);
if (str[0])
- HYDU_FREE(str[0]);
+ MPL_free(str[0]);
if (str[1])
- HYDU_FREE(str[1]);
+ MPL_free(str[1]);
if (env_name)
- HYDU_FREE(env_name);
+ MPL_free(env_name);
if (env_value)
- HYDU_FREE(env_value);
+ MPL_free(env_value);
fn_exit:
return status;
@@ -249,8 +250,8 @@ static HYD_status genvlist_fn(char *arg, char ***argv)
HYD_INTERNAL_ERROR, "duplicate environment setting\n");
len = strlen("list:") + strlen(**argv) + 1;
- HYDU_MALLOC(HYD_server_info.user_global.global_env.prop, char *, len, status);
- HYDU_snprintf(HYD_server_info.user_global.global_env.prop, len, "list:%s", **argv);
+ HYDU_MALLOC_OR_JUMP(HYD_server_info.user_global.global_env.prop, char *, len, status);
+ MPL_snprintf(HYD_server_info.user_global.global_env.prop, len, "list:%s", **argv);
fn_exit:
(*argv)++;
@@ -359,7 +360,7 @@ static void hostlist_help_fn(void)
static HYD_status hostlist_fn(char *arg, char ***argv)
{
- char *hostlist[HYD_NUM_TMP_STRINGS];
+ char *hostlist[HYD_NUM_TMP_STRINGS + 1]; /* +1 for null termination of list */
int count = 0;
HYD_status status = HYD_SUCCESS;
@@ -608,7 +609,7 @@ static HYD_status config_fn(char *arg, char ***argv)
HYD_status status = HYD_SUCCESS;
HYDU_ASSERT(!config_file, status);
- config_file = HYDU_strdup(**argv);
+ config_file = MPL_strdup(**argv);
(*argv)++;
fn_exit:
@@ -638,17 +639,17 @@ static HYD_status env_fn(char *arg, char ***argv)
HYDU_ERR_POP(status, "string break returned error\n");
(*argv)++;
- env_name = HYDU_strdup(str[0]);
+ env_name = MPL_strdup(str[0]);
if (str[1] == NULL) { /* The environment is not of the form x=foo */
if (**argv == NULL) {
status = HYD_INTERNAL_ERROR;
goto fn_fail;
}
- env_value = HYDU_strdup(**argv);
+ env_value = MPL_strdup(**argv);
(*argv)++;
}
else {
- env_value = HYDU_strdup(str[1]);
+ env_value = MPL_strdup(str[1]);
}
status = get_current_exec(&exec);
@@ -657,13 +658,13 @@ static HYD_status env_fn(char *arg, char ***argv)
HYDU_append_env_to_list(env_name, env_value, &exec->user_env);
if (str[0])
- HYDU_FREE(str[0]);
+ MPL_free(str[0]);
if (str[1])
- HYDU_FREE(str[1]);
+ MPL_free(str[1]);
if (env_name)
- HYDU_FREE(env_name);
+ MPL_free(env_name);
if (env_value)
- HYDU_FREE(env_value);
+ MPL_free(env_value);
fn_exit:
return status;
@@ -695,8 +696,8 @@ static HYD_status envlist_fn(char *arg, char ***argv)
"duplicate environment setting\n");
len = strlen("list:") + strlen(**argv) + 1;
- HYDU_MALLOC(exec->env_prop, char *, len, status);
- HYDU_snprintf(exec->env_prop, len, "list:%s", **argv);
+ HYDU_MALLOC_OR_JUMP(exec->env_prop, char *, len, status);
+ MPL_snprintf(exec->env_prop, len, "list:%s", **argv);
(*argv)++;
fn_exit:
@@ -1472,7 +1473,7 @@ static HYD_status set_default_values(void)
if (HYD_server_info.user_global.ckpoint_prefix == NULL) {
if (MPL_env2str("HYDRA_CKPOINT_PREFIX", (const char **) &tmp) != 0)
- HYD_server_info.user_global.ckpoint_prefix = HYDU_strdup(tmp);
+ HYD_server_info.user_global.ckpoint_prefix = MPL_strdup(tmp);
tmp = NULL;
}
@@ -1504,7 +1505,7 @@ static HYD_status set_default_values(void)
/* don't clobber existing iface values from the command line */
if (HYD_server_info.user_global.iface == NULL) {
if (MPL_env2str("HYDRA_IFACE", (const char **) &tmp) != 0)
- HYD_server_info.user_global.iface = HYDU_strdup(tmp);
+ HYD_server_info.user_global.iface = MPL_strdup(tmp);
tmp = NULL;
}
@@ -1517,7 +1518,7 @@ static HYD_status set_default_values(void)
if (HYD_server_info.user_global.global_env.prop == NULL &&
MPL_env2str("HYDRA_ENV", (const char **) &tmp))
HYD_server_info.user_global.global_env.prop =
- !strcmp(tmp, "all") ? HYDU_strdup("all") : HYDU_strdup("none");
+ !strcmp(tmp, "all") ? MPL_strdup("all") : MPL_strdup("none");
if (HYD_server_info.user_global.auto_cleanup == -1)
HYD_server_info.user_global.auto_cleanup = 1;
@@ -1550,7 +1551,7 @@ static HYD_status set_default_values(void)
/* If hostname propagation is requested (or not set), set the
* environment variable for doing that */
if (hostname_propagation || hostname_propagation == -1)
- HYD_server_info.iface_ip_env_name = HYDU_strdup("MPIR_CVAR_CH3_INTERFACE_HOSTNAME");
+ HYD_server_info.iface_ip_env_name = MPL_strdup("MPIR_CVAR_CH3_INTERFACE_HOSTNAME");
/* Default universe size if the user did not specify anything is
* INFINITE */
@@ -1572,10 +1573,10 @@ static HYD_status process_config_token(char *token, int newline, struct HYD_node
/* If this is a newline, but not the first one, and the
* previous token was not a ":", add an executable delimiter
* ':' */
- config_argv[idx++] = HYDU_strdup(":");
+ config_argv[idx++] = MPL_strdup(":");
}
- config_argv[idx++] = HYDU_strdup(token);
+ config_argv[idx++] = MPL_strdup(token);
config_argv[idx] = NULL;
return HYD_SUCCESS;
@@ -1615,7 +1616,7 @@ static HYD_status parse_args(char **t_argv)
i = 0;
while (exec->exec[i] != NULL)
i++;
- exec->exec[i] = HYDU_strdup(*argv);
+ exec->exec[i] = MPL_strdup(*argv);
exec->exec[i + 1] = NULL;
} while (++argv && *argv);
} while (1);
@@ -1654,7 +1655,7 @@ HYD_status HYD_uii_mpx_get_parameters(char **t_argv)
ret = open(env_file, O_RDONLY);
if (ret >= 0) {
close(ret);
- config_file = HYDU_strdup(env_file);
+ config_file = MPL_strdup(env_file);
goto config_file_check_exit;
}
}
@@ -1664,12 +1665,12 @@ HYD_status HYD_uii_mpx_get_parameters(char **t_argv)
if (ret) {
len = strlen(home) + strlen("/.mpiexec.hydra.conf") + 1;
- HYDU_MALLOC(conf_file, char *, len, status);
+ HYDU_MALLOC_OR_JUMP(conf_file, char *, len, status);
MPL_snprintf(conf_file, len, "%s/.mpiexec.hydra.conf", home);
ret = open(conf_file, O_RDONLY);
if (ret < 0) {
- HYDU_FREE(conf_file);
+ MPL_free(conf_file);
}
else {
close(ret);
@@ -1679,10 +1680,10 @@ HYD_status HYD_uii_mpx_get_parameters(char **t_argv)
}
/* Check if there's a config file in the hard-coded location */
- conf_file = HYDU_strdup(HYDRA_CONF_FILE);
+ conf_file = MPL_strdup(HYDRA_CONF_FILE);
ret = open(conf_file, O_RDONLY);
if (ret < 0) {
- HYDU_FREE(conf_file);
+ MPL_free(conf_file);
}
else {
close(ret);
@@ -1694,7 +1695,7 @@ HYD_status HYD_uii_mpx_get_parameters(char **t_argv)
config_file_check_exit:
if (config_file) {
HYDU_ASSERT(config_argv == NULL, status);
- HYDU_MALLOC(config_argv, char **, HYD_NUM_TMP_STRINGS * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(config_argv, char **, HYD_NUM_TMP_STRINGS * sizeof(char *), status);
status = HYDU_parse_hostfile(config_file, NULL, process_config_token);
HYDU_ERR_POP(status, "error parsing config file\n");
@@ -1704,12 +1705,12 @@ HYD_status HYD_uii_mpx_get_parameters(char **t_argv)
HYDU_ERR_POP(status, "error parsing config args\n");
reading_config_file = 0;
- HYDU_FREE(config_file);
+ MPL_free(config_file);
}
/* Get the base path */
/* Find the last '/' in the executable name */
- post = HYDU_strdup(progname);
+ post = MPL_strdup(progname);
loc = strrchr(post, '/');
if (!loc) { /* If there is no path */
HYD_server_info.base_path = NULL;
@@ -1722,18 +1723,18 @@ HYD_status HYD_uii_mpx_get_parameters(char **t_argv)
/* Check if its absolute or relative */
if (post[0] != '/') { /* relative */
tmp[0] = HYDU_getcwd();
- tmp[1] = HYDU_strdup("/");
- tmp[2] = HYDU_strdup(post);
+ tmp[1] = MPL_strdup("/");
+ tmp[2] = MPL_strdup(post);
tmp[3] = NULL;
status = HYDU_str_alloc_and_join(tmp, &HYD_server_info.base_path);
HYDU_ERR_POP(status, "unable to join strings\n");
HYDU_free_strlist(tmp);
}
else { /* absolute */
- HYD_server_info.base_path = HYDU_strdup(post);
+ HYD_server_info.base_path = MPL_strdup(post);
}
}
- HYDU_FREE(post);
+ MPL_free(post);
status = set_default_values();
HYDU_ERR_POP(status, "setting default values failed\n");
diff --git a/src/pm/hydra/ui/utils/uiu.c b/src/pm/hydra/ui/utils/uiu.c
index 4b89134..2f6c654 100644
--- a/src/pm/hydra/ui/utils/uiu.c
+++ b/src/pm/hydra/ui/utils/uiu.c
@@ -56,19 +56,19 @@ void HYD_uiu_free_params(void)
HYDU_finalize_user_global(&HYD_server_info.user_global);
if (HYD_server_info.base_path)
- HYDU_FREE(HYD_server_info.base_path);
+ MPL_free(HYD_server_info.base_path);
if (HYD_server_info.port_range)
- HYDU_FREE(HYD_server_info.port_range);
+ MPL_free(HYD_server_info.port_range);
if (HYD_server_info.iface_ip_env_name)
- HYDU_FREE(HYD_server_info.iface_ip_env_name);
+ MPL_free(HYD_server_info.iface_ip_env_name);
if (HYD_server_info.nameserver)
- HYDU_FREE(HYD_server_info.nameserver);
+ MPL_free(HYD_server_info.nameserver);
if (HYD_server_info.localhost)
- HYDU_FREE(HYD_server_info.localhost);
+ MPL_free(HYD_server_info.localhost);
if (HYD_server_info.node_list)
HYDU_free_node_list(HYD_server_info.node_list);
@@ -80,18 +80,18 @@ void HYD_uiu_free_params(void)
HYDU_free_pg_list(HYD_server_info.pg_list.next);
if (HYD_ui_info.prepend_pattern)
- HYDU_FREE(HYD_ui_info.prepend_pattern);
+ MPL_free(HYD_ui_info.prepend_pattern);
if (HYD_ui_info.outfile_pattern)
- HYDU_FREE(HYD_ui_info.outfile_pattern);
+ MPL_free(HYD_ui_info.outfile_pattern);
if (HYD_ui_info.errfile_pattern)
- HYDU_FREE(HYD_ui_info.errfile_pattern);
+ MPL_free(HYD_ui_info.errfile_pattern);
for (run = stdoe_fd_list; run;) {
close(run->fd);
tmp = run->next;
- HYDU_FREE(run);
+ MPL_free(run);
run = tmp;
}
@@ -180,7 +180,7 @@ static HYD_status resolve_pattern_string(const char *pattern, char **str, int pg
tpos = 0;
pos = 0;
i = 0;
- HYDU_MALLOC(tmp[i], char *, HYD_TMP_STRLEN, status);
+ HYDU_MALLOC_OR_JUMP(tmp[i], char *, HYD_TMP_STRLEN, status);
tmp[i][0] = '\0';
while (1) {
@@ -202,7 +202,7 @@ static HYD_status resolve_pattern_string(const char *pattern, char **str, int pg
tmp[i][tpos] = '\0';
++i;
tpos = 0;
- HYDU_MALLOC(tmp[i], char *, HYD_TMP_STRLEN, status);
+ HYDU_MALLOC_OR_JUMP(tmp[i], char *, HYD_TMP_STRLEN, status);
tmp[i][0] = '\0';
switch (pattern[pos]) {
@@ -240,7 +240,7 @@ static HYD_status resolve_pattern_string(const char *pattern, char **str, int pg
++i;
tpos = 0;
- HYDU_MALLOC(tmp[i], char *, HYD_TMP_STRLEN, status);
+ HYDU_MALLOC_OR_JUMP(tmp[i], char *, HYD_TMP_STRLEN, status);
tmp[i][0] = '\0';
}
}
@@ -283,10 +283,10 @@ static HYD_status stdoe_cb(int _fd, int pgid, int proxy_id, int rank, void *_buf
if (run) {
fd = run->fd;
- HYDU_FREE(pattern_resolve);
+ MPL_free(pattern_resolve);
}
else {
- HYDU_MALLOC(tmp, struct stdoe_fd *, sizeof(struct stdoe_fd), status);
+ HYDU_MALLOC_OR_JUMP(tmp, struct stdoe_fd *, sizeof(struct stdoe_fd), status);
tmp->pattern = pattern_resolve;
tmp->fd = open(tmp->pattern, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
HYDU_ASSERT(tmp->fd >= 0, status);
@@ -320,6 +320,7 @@ static HYD_status stdoe_cb(int _fd, int pgid, int proxy_id, int rank, void *_buf
status = HYDU_sock_write(fd, (const void *) prepend,
strlen(prepend), &sent, &closed,
HYDU_SOCK_COMM_MSGWAIT);
+ HYDU_ERR_POP(status, "unable to write data to stdout/stderr\n");
}
status = HYDU_sock_write(fd, (const void *) &buf[mark], i - mark + 1,
&sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
@@ -329,7 +330,7 @@ static HYD_status stdoe_cb(int _fd, int pgid, int proxy_id, int rank, void *_buf
}
}
- HYDU_FREE(prepend);
+ MPL_free(prepend);
}
fn_exit:
diff --git a/src/pm/hydra/utils/alloc/alloc.c b/src/pm/hydra/utils/alloc/alloc.c
index 89012c4..d204ceb 100644
--- a/src/pm/hydra/utils/alloc/alloc.c
+++ b/src/pm/hydra/utils/alloc/alloc.c
@@ -34,31 +34,31 @@ void HYDU_init_user_global(struct HYD_user_global *user_global)
void HYDU_finalize_user_global(struct HYD_user_global *user_global)
{
if (user_global->rmk)
- HYDU_FREE(user_global->rmk);
+ MPL_free(user_global->rmk);
if (user_global->launcher)
- HYDU_FREE(user_global->launcher);
+ MPL_free(user_global->launcher);
if (user_global->launcher_exec)
- HYDU_FREE(user_global->launcher_exec);
+ MPL_free(user_global->launcher_exec);
if (user_global->binding)
- HYDU_FREE(user_global->binding);
+ MPL_free(user_global->binding);
if (user_global->topolib)
- HYDU_FREE(user_global->topolib);
+ MPL_free(user_global->topolib);
if (user_global->ckpointlib)
- HYDU_FREE(user_global->ckpointlib);
+ MPL_free(user_global->ckpointlib);
if (user_global->ckpoint_prefix)
- HYDU_FREE(user_global->ckpoint_prefix);
+ MPL_free(user_global->ckpoint_prefix);
if (user_global->demux)
- HYDU_FREE(user_global->demux);
+ MPL_free(user_global->demux);
if (user_global->iface)
- HYDU_FREE(user_global->iface);
+ MPL_free(user_global->iface);
HYDU_finalize_global_env(&user_global->global_env);
}
@@ -83,7 +83,7 @@ void HYDU_finalize_global_env(struct HYD_env_global *global_env)
HYDU_env_free_list(global_env->inherited);
if (global_env->prop)
- HYDU_FREE(global_env->prop);
+ MPL_free(global_env->prop);
}
HYD_status HYDU_alloc_node(struct HYD_node **node)
@@ -92,7 +92,7 @@ HYD_status HYDU_alloc_node(struct HYD_node **node)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(*node, struct HYD_node *, sizeof(struct HYD_node), status);
+ HYDU_MALLOC_OR_JUMP(*node, struct HYD_node *, sizeof(struct HYD_node), status);
(*node)->hostname = NULL;
(*node)->core_count = 0;
(*node)->active_processes = 0;
@@ -118,15 +118,15 @@ void HYDU_free_node_list(struct HYD_node *node_list)
tnode = node->next;
if (node->hostname)
- HYDU_FREE(node->hostname);
+ MPL_free(node->hostname);
if (node->user)
- HYDU_FREE(node->user);
+ MPL_free(node->user);
if (node->local_binding)
- HYDU_FREE(node->local_binding);
+ MPL_free(node->local_binding);
- HYDU_FREE(node);
+ MPL_free(node);
node = tnode;
}
@@ -151,7 +151,7 @@ HYD_status HYDU_alloc_pg(struct HYD_pg **pg, int pgid)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(*pg, struct HYD_pg *, sizeof(struct HYD_pg), status);
+ HYDU_MALLOC_OR_JUMP(*pg, struct HYD_pg *, sizeof(struct HYD_pg), status);
HYDU_init_pg(*pg, pgid);
fn_exit:
@@ -176,7 +176,7 @@ void HYDU_free_pg_list(struct HYD_pg *pg_list)
if (pg->user_node_list)
HYDU_free_node_list(pg->user_node_list);
- HYDU_FREE(pg);
+ MPL_free(pg);
pg = tpg;
}
@@ -188,7 +188,7 @@ static HYD_status alloc_proxy(struct HYD_proxy **proxy, struct HYD_pg *pg, struc
HYDU_FUNC_ENTER();
- HYDU_MALLOC(*proxy, struct HYD_proxy *, sizeof(struct HYD_proxy), status);
+ HYDU_MALLOC_OR_JUMP(*proxy, struct HYD_proxy *, sizeof(struct HYD_proxy), status);
(*proxy)->node = node;
(*proxy)->pg = pg;
@@ -229,18 +229,18 @@ void HYDU_free_proxy_list(struct HYD_proxy *proxy_list)
if (proxy->exec_launch_info) {
HYDU_free_strlist(proxy->exec_launch_info);
- HYDU_FREE(proxy->exec_launch_info);
+ MPL_free(proxy->exec_launch_info);
}
if (proxy->pid)
- HYDU_FREE(proxy->pid);
+ MPL_free(proxy->pid);
if (proxy->exit_status)
- HYDU_FREE(proxy->exit_status);
+ MPL_free(proxy->exit_status);
HYDU_free_exec_list(proxy->exec_list);
- HYDU_FREE(proxy);
+ MPL_free(proxy);
proxy = tproxy;
}
@@ -253,7 +253,7 @@ HYD_status HYDU_alloc_exec(struct HYD_exec **exec)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(*exec, struct HYD_exec *, sizeof(struct HYD_exec), status);
+ HYDU_MALLOC_OR_JUMP(*exec, struct HYD_exec *, sizeof(struct HYD_exec), status);
(*exec)->exec[0] = NULL;
(*exec)->wdir = NULL;
(*exec)->proc_count = -1;
@@ -282,15 +282,15 @@ void HYDU_free_exec_list(struct HYD_exec *exec_list)
HYDU_free_strlist(exec->exec);
if (exec->wdir)
- HYDU_FREE(exec->wdir);
+ MPL_free(exec->wdir);
if (exec->env_prop)
- HYDU_FREE(exec->env_prop);
+ MPL_free(exec->env_prop);
HYDU_env_free_list(exec->user_env);
exec->user_env = NULL;
- HYDU_FREE(exec);
+ MPL_free(exec);
exec = run;
}
@@ -308,12 +308,12 @@ static HYD_status add_exec_to_proxy(struct HYD_exec *exec, struct HYD_proxy *pro
HYDU_ERR_POP(status, "unable to allocate proxy exec\n");
for (i = 0; exec->exec[i]; i++)
- proxy->exec_list->exec[i] = HYDU_strdup(exec->exec[i]);
+ proxy->exec_list->exec[i] = MPL_strdup(exec->exec[i]);
proxy->exec_list->exec[i] = NULL;
- proxy->exec_list->wdir = HYDU_strdup(exec->wdir);
+ proxy->exec_list->wdir = MPL_strdup(exec->wdir);
proxy->exec_list->proc_count = num_procs;
- proxy->exec_list->env_prop = exec->env_prop ? HYDU_strdup(exec->env_prop) : NULL;
+ proxy->exec_list->env_prop = exec->env_prop ? MPL_strdup(exec->env_prop) : NULL;
proxy->exec_list->user_env = HYDU_env_list_dup(exec->user_env);
proxy->exec_list->appnum = exec->appnum;
}
@@ -325,12 +325,12 @@ static HYD_status add_exec_to_proxy(struct HYD_exec *exec, struct HYD_proxy *pro
texec = texec->next;
for (i = 0; exec->exec[i]; i++)
- texec->exec[i] = HYDU_strdup(exec->exec[i]);
+ texec->exec[i] = MPL_strdup(exec->exec[i]);
texec->exec[i] = NULL;
- texec->wdir = HYDU_strdup(exec->wdir);
+ texec->wdir = MPL_strdup(exec->wdir);
texec->proc_count = num_procs;
- texec->env_prop = exec->env_prop ? HYDU_strdup(exec->env_prop) : NULL;
+ texec->env_prop = exec->env_prop ? MPL_strdup(exec->env_prop) : NULL;
texec->user_env = HYDU_env_list_dup(exec->user_env);
texec->appnum = exec->appnum;
}
@@ -501,11 +501,11 @@ HYD_status HYDU_correct_wdir(char **wdir)
}
else if (*wdir[0] != '/') {
tmp[0] = HYDU_getcwd();
- tmp[1] = HYDU_strdup("/");
- tmp[2] = HYDU_strdup(*wdir);
+ tmp[1] = MPL_strdup("/");
+ tmp[2] = MPL_strdup(*wdir);
tmp[3] = NULL;
- HYDU_FREE(*wdir);
+ MPL_free(*wdir);
status = HYDU_str_alloc_and_join(tmp, wdir);
HYDU_ERR_POP(status, "unable to join strings\n");
HYDU_free_strlist(tmp);
diff --git a/src/pm/hydra/utils/args/args.c b/src/pm/hydra/utils/args/args.c
index 8303bd7..850edd3 100644
--- a/src/pm/hydra/utils/args/args.c
+++ b/src/pm/hydra/utils/args/args.c
@@ -59,15 +59,15 @@ HYD_status HYDU_find_in_path(const char *execname, char **path)
/* The executable is somewhere in the user's path. Find it. */
if (MPL_env2str("PATH", (const char **) &user_path))
- user_path = HYDU_strdup(user_path);
+ user_path = MPL_strdup(user_path);
if (user_path) { /* If the PATH environment exists */
status = get_abs_wd(strtok(user_path, ";:"), &test_loc);
HYDU_ERR_POP(status, "error getting absolute working dir\n");
do {
- tmp[0] = HYDU_strdup(test_loc);
- tmp[1] = HYDU_strdup("/");
- tmp[2] = HYDU_strdup(execname);
+ tmp[0] = MPL_strdup(test_loc);
+ tmp[1] = MPL_strdup("/");
+ tmp[2] = MPL_strdup(execname);
tmp[3] = NULL;
status = HYDU_str_alloc_and_join(tmp, &path_loc);
@@ -75,8 +75,8 @@ HYD_status HYDU_find_in_path(const char *execname, char **path)
HYDU_free_strlist(tmp);
if (exists(path_loc)) {
- tmp[0] = HYDU_strdup(test_loc);
- tmp[1] = HYDU_strdup("/");
+ tmp[0] = MPL_strdup(test_loc);
+ tmp[1] = MPL_strdup("/");
tmp[2] = NULL;
status = HYDU_str_alloc_and_join(tmp, path);
@@ -86,7 +86,7 @@ HYD_status HYDU_find_in_path(const char *execname, char **path)
goto fn_exit; /* We are done */
}
- HYDU_FREE(path_loc);
+ MPL_free(path_loc);
path_loc = NULL;
status = get_abs_wd(strtok(NULL, ";:"), &test_loc);
@@ -96,13 +96,13 @@ HYD_status HYDU_find_in_path(const char *execname, char **path)
/* There is either no PATH environment or we could not find the
* file in the PATH. Just return an empty path */
- *path = HYDU_strdup("");
+ *path = MPL_strdup("");
fn_exit:
if (user_path)
- HYDU_FREE(user_path);
+ MPL_free(user_path);
if (path_loc)
- HYDU_FREE(path_loc);
+ MPL_free(path_loc);
HYDU_FUNC_EXIT();
return status;
@@ -193,7 +193,7 @@ HYD_status HYDU_set_str(char *arg, char **var, const char *val)
if (val == NULL)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "cannot assign NULL object\n");
- *var = HYDU_strdup(val);
+ *var = MPL_strdup(val);
fn_exit:
return status;
@@ -228,7 +228,7 @@ char *HYDU_getcwd(void)
if (MPL_env2str("PWD", &pwdval) == 0)
pwdval = NULL;
- HYDU_MALLOC(cwdval, char *, HYDRA_MAX_PATH, status);
+ HYDU_MALLOC_OR_JUMP(cwdval, char *, HYDRA_MAX_PATH, status);
if (getcwd(cwdval, HYDRA_MAX_PATH) == NULL)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
"allocated space is too small for absolute path\n");
@@ -237,8 +237,8 @@ char *HYDU_getcwd(void)
if (pwdval && stat(pwdval, &spwd) != -1 && stat(cwdval, &scwd) != -1 &&
spwd.st_dev == scwd.st_dev && spwd.st_ino == scwd.st_ino) {
/* PWD and getcwd() match; use the PWD value */
- retval = HYDU_strdup(pwdval);
- HYDU_free(cwdval);
+ retval = MPL_strdup(pwdval);
+ MPL_free(cwdval);
}
else
#endif /* HAVE_STAT */
@@ -280,7 +280,7 @@ HYD_status HYDU_process_mfile_token(char *token, int newline, struct HYD_node **
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
"duplicate local binding setting\n");
- node->local_binding = HYDU_strdup(binding);
+ node->local_binding = MPL_strdup(binding);
}
else if (!strcmp(tmp, "user")) {
user = strtok_r(NULL, "=", &saveptr);
@@ -289,7 +289,7 @@ HYD_status HYDU_process_mfile_token(char *token, int newline, struct HYD_node **
if (node->user)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate username setting\n");
- node->user = HYDU_strdup(user);
+ node->user = MPL_strdup(user);
}
else {
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
@@ -344,7 +344,7 @@ HYD_status HYDU_parse_hostfile(const char *hostfile, struct HYD_node **node_list
}
HYDU_free_strlist(tokens);
- HYDU_FREE(tokens);
+ MPL_free(tokens);
}
fclose(fp);
@@ -360,7 +360,7 @@ HYD_status HYDU_parse_hostfile(const char *hostfile, struct HYD_node **node_list
char *HYDU_find_full_path(const char *execname)
{
- char *tmp[HYD_NUM_TMP_STRINGS], *path = NULL, *test_path = NULL;
+ char *tmp[HYD_NUM_TMP_STRINGS] = { NULL }, *path = NULL, *test_path = NULL;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -369,8 +369,8 @@ char *HYDU_find_full_path(const char *execname)
HYDU_ERR_POP(status, "error while searching for executable in user path\n");
if (test_path) {
- tmp[0] = HYDU_strdup(test_path);
- tmp[1] = HYDU_strdup(execname);
+ tmp[0] = MPL_strdup(test_path);
+ tmp[1] = MPL_strdup(execname);
tmp[2] = NULL;
status = HYDU_str_alloc_and_join(tmp, &path);
@@ -380,7 +380,7 @@ char *HYDU_find_full_path(const char *execname)
fn_exit:
HYDU_free_strlist(tmp);
if (test_path)
- HYDU_FREE(test_path);
+ MPL_free(test_path);
HYDU_FUNC_EXIT();
return path;
diff --git a/src/pm/hydra/utils/dbg/dbg.c b/src/pm/hydra/utils/dbg/dbg.c
index 5fada6d..09fd51a 100644
--- a/src/pm/hydra/utils/dbg/dbg.c
+++ b/src/pm/hydra/utils/dbg/dbg.c
@@ -13,13 +13,15 @@ HYD_status HYDU_dbg_init(const char *str)
char hostname[MAX_HOSTNAME_LEN];
HYD_status status = HYD_SUCCESS;
- HYDU_mem_init();
+#ifdef USE_MEMORY_TRACING
+ MPL_trinit(0, 0);
+#endif
if (gethostname(hostname, MAX_HOSTNAME_LEN) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "unable to get local host name\n");
- HYDU_MALLOC(HYD_dbg_prefix, char *, strlen(hostname) + 1 + strlen(str) + 1, status);
- HYDU_snprintf(HYD_dbg_prefix, strlen(hostname) + 1 + strlen(str) + 1, "%s@%s", str, hostname);
+ HYDU_MALLOC_OR_JUMP(HYD_dbg_prefix, char *, strlen(hostname) + 1 + strlen(str) + 1, status);
+ MPL_snprintf(HYD_dbg_prefix, strlen(hostname) + 1 + strlen(str) + 1, "%s@%s", str, hostname);
fn_exit:
HYDU_FUNC_EXIT();
@@ -31,5 +33,5 @@ HYD_status HYDU_dbg_init(const char *str)
void HYDU_dbg_finalize(void)
{
- HYDU_FREE(HYD_dbg_prefix);
+ MPL_free(HYD_dbg_prefix);
}
diff --git a/src/pm/hydra/utils/env/env.c b/src/pm/hydra/utils/env/env.c
index be2bec6..c59fe22 100644
--- a/src/pm/hydra/utils/env/env.c
+++ b/src/pm/hydra/utils/env/env.c
@@ -16,18 +16,18 @@ HYD_status HYDU_env_to_str(struct HYD_env *env, char **str)
HYDU_FUNC_ENTER();
i = 0;
- tmp[i++] = HYDU_strdup("'");
- tmp[i++] = HYDU_strdup(env->env_name);
- tmp[i++] = HYDU_strdup("=");
- tmp[i++] = env->env_value ? HYDU_strdup(env->env_value) : HYDU_strdup("");
- tmp[i++] = HYDU_strdup("'");
+ tmp[i++] = MPL_strdup("'");
+ tmp[i++] = MPL_strdup(env->env_name);
+ tmp[i++] = MPL_strdup("=");
+ tmp[i++] = env->env_value ? MPL_strdup(env->env_value) : MPL_strdup("");
+ tmp[i++] = MPL_strdup("'");
tmp[i++] = NULL;
status = HYDU_str_alloc_and_join(tmp, str);
HYDU_ERR_POP(status, "unable to join strings\n");
for (i = 0; tmp[i]; i++)
- HYDU_FREE(tmp[i]);
+ MPL_free(tmp[i]);
fn_exit:
HYDU_FUNC_EXIT();
@@ -49,13 +49,13 @@ HYD_status HYDU_list_inherited_env(struct HYD_env **env_list)
*env_list = NULL;
i = 0;
while (environ[i]) {
- env_str = HYDU_strdup(environ[i]);
+ env_str = MPL_strdup(environ[i]);
env_name = strtok(env_str, "=");
status = HYDT_bsci_query_env_inherit(env_name, &ret);
HYDU_ERR_POP(status, "error querying environment propagation\n");
- HYDU_FREE(env_str);
+ MPL_free(env_str);
env_str = NULL;
if (!ret) {
@@ -71,7 +71,7 @@ HYD_status HYDU_list_inherited_env(struct HYD_env **env_list)
fn_exit:
if (env_str)
- HYDU_FREE(env_str);
+ MPL_free(env_str);
HYDU_FUNC_EXIT();
return status;
@@ -111,9 +111,9 @@ HYD_status HYDU_env_create(struct HYD_env **env, const char *env_name, const cha
HYDU_FUNC_ENTER();
- HYDU_MALLOC(*env, struct HYD_env *, sizeof(struct HYD_env), status);
- (*env)->env_name = HYDU_strdup(env_name);
- (*env)->env_value = env_value ? HYDU_strdup(env_value) : NULL;
+ HYDU_MALLOC_OR_JUMP(*env, struct HYD_env *, sizeof(struct HYD_env), status);
+ (*env)->env_name = MPL_strdup(env_name);
+ (*env)->env_value = env_value ? MPL_strdup(env_value) : NULL;
(*env)->next = NULL;
fn_exit:
@@ -132,10 +132,10 @@ HYD_status HYDU_env_free(struct HYD_env *env)
HYDU_FUNC_ENTER();
if (env->env_name)
- HYDU_FREE(env->env_name);
+ MPL_free(env->env_name);
if (env->env_value)
- HYDU_FREE(env->env_value);
- HYDU_FREE(env);
+ MPL_free(env->env_value);
+ MPL_free(env);
HYDU_FUNC_EXIT();
return status;
@@ -204,21 +204,21 @@ HYD_status HYDU_append_env_to_list(const char *env_name, const char *env_value,
if (!strcmp(run->env_name, env_name)) {
/* If we found an entry for this environment variable, just update it */
if (run->env_value != NULL && tenv->env_value != NULL) {
- HYDU_FREE(run->env_value);
- run->env_value = HYDU_strdup(tenv->env_value);
+ MPL_free(run->env_value);
+ run->env_value = MPL_strdup(tenv->env_value);
}
else if (run->env_value != NULL) {
- HYDU_FREE(run->env_value);
+ MPL_free(run->env_value);
run->env_value = NULL;
}
else if (env_value != NULL) {
- run->env_value = HYDU_strdup(tenv->env_value);
+ run->env_value = MPL_strdup(tenv->env_value);
}
- HYDU_FREE(tenv->env_name);
+ MPL_free(tenv->env_name);
if (tenv->env_value)
- HYDU_FREE(tenv->env_value);
- HYDU_FREE(tenv);
+ MPL_free(tenv->env_value);
+ MPL_free(tenv);
break;
}
@@ -246,7 +246,7 @@ HYD_status HYDU_append_env_str_to_list(const char *str, struct HYD_env **env_lis
HYDU_FUNC_ENTER();
- my_str = env_value = HYDU_strdup(str);
+ my_str = env_value = MPL_strdup(str);
/* don't use strtok, it will mangle env values that contain '=' */
env_name = MPL_strsep(&env_value, "=");
HYDU_ASSERT(env_name != NULL, status);
@@ -256,7 +256,7 @@ HYD_status HYDU_append_env_str_to_list(const char *str, struct HYD_env **env_lis
fn_exit:
if (my_str)
- HYDU_FREE(my_str);
+ MPL_free(my_str);
HYDU_FUNC_EXIT();
return status;
@@ -277,9 +277,9 @@ HYD_status HYDU_putenv(struct HYD_env *env, HYD_env_overwrite_t overwrite)
goto fn_exit;
i = 0;
- tmp[i++] = HYDU_strdup(env->env_name);
- tmp[i++] = HYDU_strdup("=");
- tmp[i++] = env->env_value ? HYDU_strdup(env->env_value) : HYDU_strdup("");
+ tmp[i++] = MPL_strdup(env->env_name);
+ tmp[i++] = MPL_strdup("=");
+ tmp[i++] = env->env_value ? MPL_strdup(env->env_value) : MPL_strdup("");
tmp[i++] = NULL;
status = HYDU_str_alloc_and_join(tmp, &str);
HYDU_ERR_POP(status, "unable to join strings\n");
@@ -287,7 +287,7 @@ HYD_status HYDU_putenv(struct HYD_env *env, HYD_env_overwrite_t overwrite)
MPL_putenv(str);
for (i = 0; tmp[i]; i++)
- HYDU_FREE(tmp[i]);
+ MPL_free(tmp[i]);
fn_exit:
HYDU_FUNC_EXIT();
diff --git a/src/pm/hydra/utils/launch/launch.c b/src/pm/hydra/utils/launch/launch.c
index a6bae46..0b5f6f5 100644
--- a/src/pm/hydra/utils/launch/launch.c
+++ b/src/pm/hydra/utils/launch/launch.c
@@ -16,13 +16,13 @@ HYD_status HYDU_create_process(char **client_arg, struct HYD_env *env_list,
HYDU_FUNC_ENTER();
if (in && (pipe(inpipe) < 0))
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "pipe error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "pipe error (%s)\n", MPL_strerror(errno));
if (out && (pipe(outpipe) < 0))
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "pipe error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "pipe error (%s)\n", MPL_strerror(errno));
if (err && (pipe(errpipe) < 0))
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "pipe error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "pipe error (%s)\n", MPL_strerror(errno));
/* Fork off the process */
tpid = fork();
@@ -37,7 +37,7 @@ HYD_status HYDU_create_process(char **client_arg, struct HYD_env *env_list,
close(inpipe[1]);
if (inpipe[0] != STDIN_FILENO && dup2(inpipe[0], STDIN_FILENO) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "dup2 error (%s)\n",
- HYDU_strerror(errno));
+ MPL_strerror(errno));
}
close(STDOUT_FILENO);
@@ -45,7 +45,7 @@ HYD_status HYDU_create_process(char **client_arg, struct HYD_env *env_list,
close(outpipe[0]);
if (outpipe[1] != STDOUT_FILENO && dup2(outpipe[1], STDOUT_FILENO) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "dup2 error (%s)\n",
- HYDU_strerror(errno));
+ MPL_strerror(errno));
}
close(STDERR_FILENO);
@@ -53,7 +53,7 @@ HYD_status HYDU_create_process(char **client_arg, struct HYD_env *env_list,
close(errpipe[0]);
if (errpipe[1] != STDERR_FILENO && dup2(errpipe[1], STDERR_FILENO) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "dup2 error (%s)\n",
- HYDU_strerror(errno));
+ MPL_strerror(errno));
}
/* Forced environment overwrites existing environment */
@@ -71,8 +71,7 @@ HYD_status HYDU_create_process(char **client_arg, struct HYD_env *env_list,
/* The child process should never get back to the proxy
* code; if there is an error, just throw it here and
* exit. */
- HYDU_error_printf("execvp error on file %s (%s)\n", client_arg[0],
- HYDU_strerror(errno));
+ HYDU_error_printf("execvp error on file %s (%s)\n", client_arg[0], MPL_strerror(errno));
exit(-1);
}
}
diff --git a/src/pm/hydra/utils/others/others.c b/src/pm/hydra/utils/others/others.c
index 2aa538e..fa22e93 100644
--- a/src/pm/hydra/utils/others/others.c
+++ b/src/pm/hydra/utils/others/others.c
@@ -29,7 +29,7 @@ HYD_status HYDU_add_to_node_list(const char *hostname, int num_procs, struct HYD
status = HYDU_alloc_node(node_list);
HYDU_ERR_POP(status, "unable to allocate node\n");
- (*node_list)->hostname = HYDU_strdup(hostname);
+ (*node_list)->hostname = MPL_strdup(hostname);
(*node_list)->core_count = num_procs;
(*node_list)->node_id = 0;
}
@@ -44,7 +44,7 @@ HYD_status HYDU_add_to_node_list(const char *hostname, int num_procs, struct HYD
node->next->node_id = node->node_id + 1;
node = node->next;
- node->hostname = HYDU_strdup(hostname);
+ node->hostname = MPL_strdup(hostname);
}
node->core_count += num_procs;
diff --git a/src/pm/hydra/utils/sock/sock.c b/src/pm/hydra/utils/sock/sock.c
index 1a282cb..fb40caf 100644
--- a/src/pm/hydra/utils/sock/sock.c
+++ b/src/pm/hydra/utils/sock/sock.c
@@ -58,7 +58,7 @@ HYD_status HYDU_sock_listen(int *listen_fd, char *port_range, uint16_t * port)
*listen_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (*listen_fd < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "cannot open socket (%s)\n",
- HYDU_strerror(errno));
+ MPL_strerror(errno));
if (setsockopt(*listen_fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(int)) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "cannot set TCP_NODELAY\n");
@@ -82,7 +82,7 @@ HYD_status HYDU_sock_listen(int *listen_fd, char *port_range, uint16_t * port)
* port. Otherwise, it's an error. */
if (errno != EADDRINUSE)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "bind error (%s)\n",
- HYDU_strerror(errno));
+ MPL_strerror(errno));
}
else /* We got a port */
break;
@@ -93,7 +93,7 @@ HYD_status HYDU_sock_listen(int *listen_fd, char *port_range, uint16_t * port)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "no port to bind\n");
if (listen(*listen_fd, SOMAXCONN) < 0)
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "listen error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "listen error (%s)\n", MPL_strerror(errno));
/* We asked for any port, so we need to find out which port we
* actually got. */
@@ -102,7 +102,7 @@ HYD_status HYDU_sock_listen(int *listen_fd, char *port_range, uint16_t * port)
if (getsockname(*listen_fd, (struct sockaddr *) &sa, &sinlen) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "getsockname error (%s)\n",
- HYDU_strerror(errno));
+ MPL_strerror(errno));
*port = ntohs(sa.sin_port);
}
@@ -142,7 +142,7 @@ HYD_status HYDU_sock_connect(const char *host, uint16_t port, int *fd, int retri
*fd = socket(AF_INET, SOCK_STREAM, 0);
if (*fd < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "cannot open socket (%s)\n",
- HYDU_strerror(errno));
+ MPL_strerror(errno));
/* Not being able to connect is not an error in all cases. So we
* return an error, but only print a warning message. The upper
@@ -169,7 +169,7 @@ HYD_status HYDU_sock_connect(const char *host, uint16_t port, int *fd, int retri
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR,
"unable to connect from \"%s\" to \"%s\" (%s)\n",
- localhost, host, HYDU_strerror(errno));
+ localhost, host, MPL_strerror(errno));
}
/* Disable nagle */
@@ -194,7 +194,7 @@ HYD_status HYDU_sock_accept(int listen_fd, int *fd)
*fd = accept(listen_fd, 0, 0);
if (*fd < 0)
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "accept error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "accept error (%s)\n", MPL_strerror(errno));
/* Disable nagle */
if (setsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(int)) < 0)
@@ -236,7 +236,7 @@ HYD_status HYDU_sock_read(int fd, void *buf, int maxlen, int *recvd, int *closed
} while (tmp < 0 && errno == EINTR);
if (tmp < 0) {
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "read error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "read error (%s)\n", MPL_strerror(errno));
}
else if (tmp == 0) {
*closed = 1;
@@ -283,7 +283,7 @@ HYD_status HYDU_sock_write(int fd, const void *buf, int maxlen, int *sent, int *
*closed = 1;
goto fn_exit;
}
- HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "write error (%s)\n", HYDU_strerror(errno));
+ HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "write error (%s)\n", MPL_strerror(errno));
}
else {
*sent += tmp;
@@ -329,7 +329,7 @@ static HYD_status alloc_fwd_hash(struct fwd_hash **fwd_hash, int in, int out)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(*fwd_hash, struct fwd_hash *, sizeof(struct fwd_hash), status);
+ HYDU_MALLOC_OR_JUMP(*fwd_hash, struct fwd_hash *, sizeof(struct fwd_hash), status);
(*fwd_hash)->in = in;
(*fwd_hash)->out = out;
@@ -352,6 +352,8 @@ static HYD_status alloc_fwd_hash(struct fwd_hash **fwd_hash, int in, int out)
goto fn_exit;
}
+static struct fwd_hash *fwd_hash_list = NULL;
+
/* This function does not provide any flow control. We just read from
* the incoming socket as much as we can and push out to the outgoing
* socket as much as we can. This can result in the process calling it
@@ -360,7 +362,6 @@ static HYD_status alloc_fwd_hash(struct fwd_hash **fwd_hash, int in, int out)
* functionality for). */
HYD_status HYDU_sock_forward_stdio(int in, int out, int *closed)
{
- static struct fwd_hash *fwd_hash_list = NULL;
struct fwd_hash *fwd_hash, *tmp;
int count;
HYD_status status = HYD_SUCCESS;
@@ -439,13 +440,24 @@ HYD_status HYDU_sock_forward_stdio(int in, int out, int *closed)
goto fn_exit;
}
+void HYDU_sock_finalize(void)
+{
+ struct fwd_hash *tmp, *fwd_hash;
+
+ for (fwd_hash = fwd_hash_list; fwd_hash;) {
+ tmp = fwd_hash->next;
+ MPL_free(fwd_hash);
+ fwd_hash = tmp;
+ }
+}
+
HYD_status HYDU_sock_get_iface_ip(char *iface, char **ip)
{
HYD_status status = HYD_SUCCESS;
#if defined(HAVE_GETIFADDRS)
struct ifaddrs *ifaddr, *ifa;
- char buf[INET_ADDRSTRLEN];
+ char buf[MAX_HOSTNAME_LEN];
struct sockaddr_in *sa;
/* Got the interface name; let's query for the IP address */
@@ -462,8 +474,8 @@ HYD_status HYDU_sock_get_iface_ip(char *iface, char **ip)
sa = (struct sockaddr_in *) ifa->ifa_addr;
#if defined HAVE_INET_NTOP
- (*ip) = HYDU_strdup((char *)
- inet_ntop(AF_INET, (const void *) &(sa->sin_addr), buf, MAX_HOSTNAME_LEN));
+ (*ip) = MPL_strdup((char *)
+ inet_ntop(AF_INET, (const void *) &(sa->sin_addr), buf, MAX_HOSTNAME_LEN));
#else
(*ip) = NULL;
#endif /* HAVE_INET_NTOP */
@@ -492,11 +504,11 @@ HYD_status HYDU_sock_get_iface_ip(char *iface, char **ip)
HYD_status HYDU_sock_is_local(char *host, int *is_local)
{
struct hostent *ht;
- char *host_ip = NULL, *local_ip = NULL, *lhost_ip = NULL;
+ char *host_ip = NULL, *lhost_ip = NULL;
char lhost[MAX_HOSTNAME_LEN];
struct sockaddr_in sa;
struct ifaddrs *ifaddr, *ifa;
- char buf[INET_ADDRSTRLEN];
+ char buf[MAX_HOSTNAME_LEN];
HYD_status status = HYD_SUCCESS;
*is_local = 0;
@@ -516,54 +528,63 @@ HYD_status HYDU_sock_is_local(char *host, int *is_local)
/* STEP 1: If "host" matches the local host name, return */
if (gethostname(lhost, MAX_HOSTNAME_LEN) < 0) {
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "gethostname returned an error\n");
+ /* We can't figure out what my localhost name is. *sigh*. We
+ * could return an error here, but we will just punt it to the
+ * upper layer saying that we don't know if it is local. We
+ * cannot try steps 2 and 3 either, since we don't have our
+ * local hostname. */
+ goto fn_exit;
}
else if (!strcmp(lhost, host)) {
*is_local = 1;
goto fn_exit;
}
+ else {
+ /* we have our local hostname, but that does not match the
+ * provided hostname. Let's try to get our remote IP address
+ * first. If we can't get that, we can give up. */
+ /* If we are unable to resolve the remote host name, it need
+ * not be an error. It could mean that the user is using an
+ * alias for the hostname (e.g., an ssh config alias) */
+ if ((ht = gethostbyname(host)) == NULL)
+ goto fn_exit;
+ memset((char *) &sa, 0, sizeof(struct sockaddr_in));
+ memcpy(&sa.sin_addr, ht->h_addr_list[0], ht->h_length);
- /* STEP 2: If the IP address associated with "host" and the IP address local
- * host resolves to match, return */
-
- if ((ht = gethostbyname(lhost)) == NULL) {
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "gethostbyname error on %s: %s\n",
- lhost, hstrerror(h_errno));
+ /* Find the IP address of the host */
+ host_ip = MPL_strdup((char *) inet_ntop(AF_INET, (const void *) &sa.sin_addr, buf,
+ MAX_HOSTNAME_LEN));
+ HYDU_ASSERT(host_ip, status);
}
- memset((char *) &sa, 0, sizeof(struct sockaddr_in));
- memcpy(&sa.sin_addr, ht->h_addr_list[0], ht->h_length);
+ /* OK, if we are here, we got the remote IP. We have two ways of
+ * getting the local IP: gethostbyname or getifaddrs. We'll try
+ * both. */
- /* Find the IP address of the host */
- lhost_ip = HYDU_strdup((char *) inet_ntop(AF_INET, (const void *) &sa.sin_addr, buf,
- MAX_HOSTNAME_LEN));
- HYDU_ASSERT(lhost_ip, status);
+ /* STEP 2: Let's try the gethostbyname model */
- /* If we are unable to resolve the remote host name, it need not be an
- * error. It could mean that the user is using an alias for the hostname
- * (e.g., an ssh config alias) */
- if ((ht = gethostbyname(host)) == NULL)
- goto fn_exit;
+ if ((ht = gethostbyname(lhost))) {
+ memset((char *) &sa, 0, sizeof(struct sockaddr_in));
+ memcpy(&sa.sin_addr, ht->h_addr_list[0], ht->h_length);
- memset((char *) &sa, 0, sizeof(struct sockaddr_in));
- memcpy(&sa.sin_addr, ht->h_addr_list[0], ht->h_length);
+ /* Find the IP address of the host */
+ lhost_ip = MPL_strdup((char *) inet_ntop(AF_INET, (const void *) &sa.sin_addr, buf,
+ MAX_HOSTNAME_LEN));
+ HYDU_ASSERT(lhost_ip, status);
- /* Find the IP address of the host */
- host_ip = HYDU_strdup((char *) inet_ntop(AF_INET, (const void *) &sa.sin_addr, buf,
- MAX_HOSTNAME_LEN));
- HYDU_ASSERT(host_ip, status);
-
- /* See if the IP address of the hostname we got matches the IP address
- * to which the local host resolves */
- if (!strcmp(lhost_ip, host_ip)) {
- *is_local = 1;
- goto fn_exit;
+ /* See if the IP address of the hostname we got matches the IP
+ * address to which the local host resolves */
+ if (!strcmp(lhost_ip, host_ip)) {
+ *is_local = 1;
+ goto fn_exit;
+ }
}
+ /* Either gethostbyname didn't resolve or we didn't find a match.
+ * Either way, let's try the getifaddr model. */
- /* STEP 3: Find all local IP addresses and try to match the host IP
- * with it. */
+ /* STEP 3: Let's try the getifaddr model */
if (getifaddrs(&ifaddr) == -1)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "getifaddrs failed\n");
@@ -573,21 +594,21 @@ HYD_status HYDU_sock_is_local(char *host, int *is_local)
if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET) {
struct sockaddr_in *sa_ptr = (struct sockaddr_in *) ifa->ifa_addr;
- local_ip = HYDU_strdup((char *)
- inet_ntop(AF_INET, (const void *) &(sa_ptr->sin_addr), buf,
- MAX_HOSTNAME_LEN));
- HYDU_ASSERT(local_ip, status);
+ lhost_ip = MPL_strdup((char *)
+ inet_ntop(AF_INET, (const void *) &(sa_ptr->sin_addr), buf,
+ MAX_HOSTNAME_LEN));
+ HYDU_ASSERT(lhost_ip, status);
- /* STEP 3: For each local IP address, see if it matches the "host"
+ /* For each local IP address, see if it matches the "host"
* IP address */
- if (!strcmp(host_ip, local_ip)) {
+ if (!strcmp(host_ip, lhost_ip)) {
*is_local = 1;
freeifaddrs(ifaddr);
goto fn_exit;
}
- HYDU_FREE(local_ip);
- local_ip = NULL;
+ MPL_free(lhost_ip);
+ lhost_ip = NULL;
}
}
@@ -595,11 +616,9 @@ HYD_status HYDU_sock_is_local(char *host, int *is_local)
fn_exit:
if (host_ip)
- HYDU_FREE(host_ip);
- if (local_ip)
- HYDU_FREE(local_ip);
+ MPL_free(host_ip);
if (lhost_ip)
- HYDU_FREE(lhost_ip);
+ MPL_free(lhost_ip);
return status;
fn_fail:
@@ -641,7 +660,7 @@ HYDU_sock_create_and_listen_portstr(char *iface, char *hostname, char *port_rang
/* Listen on a port in the port range */
port = 0;
- real_port_range = port_range ? HYDU_strdup(port_range) : NULL;
+ real_port_range = port_range ? MPL_strdup(port_range) : NULL;
status = HYDU_sock_listen(&listenfd, real_port_range, &port);
HYDU_ERR_POP(status, "unable to listen on port\n");
@@ -655,7 +674,7 @@ HYDU_sock_create_and_listen_portstr(char *iface, char *hostname, char *port_rang
HYDU_ERR_POP(status, "unable to get network interface IP\n");
}
else if (hostname) {
- ip = HYDU_strdup(hostname);
+ ip = MPL_strdup(hostname);
}
else {
char localhost[MAX_HOSTNAME_LEN] = { 0 };
@@ -663,17 +682,17 @@ HYDU_sock_create_and_listen_portstr(char *iface, char *hostname, char *port_rang
if (gethostname(localhost, MAX_HOSTNAME_LEN) < 0)
HYDU_ERR_SETANDJUMP(status, HYD_SOCK_ERROR, "unable to get local hostname\n");
- ip = HYDU_strdup(localhost);
+ ip = MPL_strdup(localhost);
}
sport = HYDU_int_to_str(port);
- HYDU_MALLOC(*port_str, char *, strlen(ip) + 1 + strlen(sport) + 1, status);
- HYDU_snprintf(*port_str, strlen(ip) + 1 + strlen(sport) + 1, "%s:%s", ip, sport);
- HYDU_FREE(sport);
+ HYDU_MALLOC_OR_JUMP(*port_str, char *, strlen(ip) + 1 + strlen(sport) + 1, status);
+ MPL_snprintf(*port_str, strlen(ip) + 1 + strlen(sport) + 1, "%s:%s", ip, sport);
+ MPL_free(sport);
fn_exit:
if (ip)
- HYDU_FREE(ip);
+ MPL_free(ip);
return status;
fn_fail:
diff --git a/src/pm/hydra/utils/string/string.c b/src/pm/hydra/utils/string/string.c
index 841177c..30d8a6c 100644
--- a/src/pm/hydra/utils/string/string.c
+++ b/src/pm/hydra/utils/string/string.c
@@ -15,7 +15,7 @@ HYD_status HYDU_list_append_strlist(char **src_strlist, char **dest_strlist)
i = HYDU_strlist_lastidx(dest_strlist);
for (j = 0; src_strlist[j]; j++)
- dest_strlist[i++] = HYDU_strdup(src_strlist[j]);
+ dest_strlist[i++] = MPL_strdup(src_strlist[j]);
dest_strlist[i++] = NULL;
HYDU_FUNC_EXIT();
@@ -46,7 +46,7 @@ void HYDU_free_strlist(char **strlist)
HYDU_FUNC_ENTER();
for (arg = 0; strlist[arg]; arg++)
- HYDU_FREE(strlist[arg]);
+ MPL_free(strlist[arg]);
HYDU_FUNC_EXIT();
}
@@ -63,12 +63,12 @@ HYD_status HYDU_str_alloc_and_join(char **strlist, char **strjoin)
len += strlen(strlist[i]);
}
- HYDU_MALLOC(*strjoin, char *, len + 1, status);
+ HYDU_MALLOC_OR_JUMP(*strjoin, char *, len + 1, status);
count = 0;
(*strjoin)[0] = 0;
for (i = 0; strlist[i] != NULL; i++) {
- HYDU_snprintf(*strjoin + count, len - count + 1, "%s", strlist[i]);
+ MPL_snprintf(*strjoin + count, len - count + 1, "%s", strlist[i]);
count += strlen(strlist[i]);
}
@@ -91,13 +91,13 @@ HYD_status HYDU_strsplit(char *str, char **str1, char **str2, char sep)
if (str == NULL)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "%s", "");
- *str1 = HYDU_strdup(str);
+ *str1 = MPL_strdup(str);
for (i = 0; (*str1)[i] && ((*str1)[i] != sep); i++);
if ((*str1)[i] == 0) /* End of the string */
*str2 = NULL;
else {
- *str2 = HYDU_strdup(&((*str1)[i + 1]));
+ *str2 = MPL_strdup(&((*str1)[i + 1]));
(*str1)[i] = 0;
}
@@ -118,10 +118,10 @@ HYD_status HYDU_strdup_list(char *src[], char **dest[])
HYDU_FUNC_ENTER();
count = HYDU_strlist_lastidx(src);
- HYDU_MALLOC(*dest, char **, (count + 1) * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(*dest, char **, (count + 1) * sizeof(char *), status);
for (i = 0; i < count; i++)
- (*dest)[i] = HYDU_strdup(src[i]);
+ (*dest)[i] = MPL_strdup(src[i]);
(*dest)[i] = NULL;
fn_exit:
@@ -148,13 +148,13 @@ char *HYDU_size_t_to_str(size_t x)
}
len++;
- HYDU_MALLOC(str, char *, len, status);
+ HYDU_MALLOC_OR_JUMP(str, char *, len, status);
HYDU_ERR_POP(status, "unable to allocate memory\n");
for (i = 0; i < len; i++)
str[i] = '0';
- HYDU_snprintf(str, len, "%llu", (unsigned long long) x);
+ MPL_snprintf(str, len, "%llu", (unsigned long long) x);
fn_exit:
HYDU_FUNC_EXIT();
@@ -197,13 +197,13 @@ char *HYDU_int_to_str_pad(int x, int maxlen)
else
actual_len = maxlen + 1;
- HYDU_MALLOC(str, char *, actual_len, status);
+ HYDU_MALLOC_OR_JUMP(str, char *, actual_len, status);
HYDU_ERR_POP(status, "unable to allocate memory\n");
for (i = 0; i < actual_len; i++)
str[i] = '0';
- HYDU_snprintf(str + actual_len - len - 1, len + 1, "%d", x);
+ MPL_snprintf(str + actual_len - len - 1, len + 1, "%d", x);
fn_exit:
HYDU_FUNC_EXIT();
@@ -231,7 +231,7 @@ char **HYDU_str_to_strlist(char *str)
HYDU_FUNC_ENTER();
- HYDU_MALLOC(strlist, char **, HYD_NUM_TMP_STRINGS * sizeof(char *), status);
+ HYDU_MALLOC_OR_JUMP(strlist, char **, HYD_NUM_TMP_STRINGS * sizeof(char *), status);
if (!strlist)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "Unable to allocate mem for strlist\n");
@@ -246,7 +246,7 @@ char **HYDU_str_to_strlist(char *str)
if (argc >= HYD_NUM_TMP_STRINGS)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "too many arguments in line\n");
- HYDU_MALLOC(strlist[argc], char *, HYD_TMP_STRLEN, status);
+ HYDU_MALLOC_OR_JUMP(strlist[argc], char *, HYD_TMP_STRLEN, status);
/* Copy till you hit a space */
i = 0;
@@ -261,7 +261,7 @@ char **HYDU_str_to_strlist(char *str)
}
}
if (strlist[argc])
- HYDU_FREE(strlist[argc]);
+ MPL_free(strlist[argc]);
strlist[argc] = NULL;
fn_exit:
diff --git a/src/pm/hydra/version.m4 b/src/pm/hydra/version.m4
index 4e1ad59..69e7adc 100644
--- a/src/pm/hydra/version.m4
+++ b/src/pm/hydra/version.m4
@@ -14,8 +14,8 @@
# changing this by playing with diversions, but then we would probably be
# playing with autotools-fire.
-m4_define([MPICH_VERSION_m4],[3.2])dnl
-m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
+m4_define([MPICH_VERSION_m4],[3.3a2])dnl
+m4_define([MPICH_RELEASE_DATE_m4],[Sun Nov 13 09:12:11 MST 2016])dnl
# For libtool ABI versioning rules see:
# http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
@@ -35,6 +35,6 @@ m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
# libmpi so version only includes functionality defined in the MPI
# standard, and does not include MPIX_ functions and C++ bindings.
-m4_define([libmpi_so_version_m4],[13:0:1])dnl
+m4_define([libmpi_so_version_m4],[0:0:0])dnl
[#] end of __file__
diff --git a/src/pm/remshell/Makefile.mk b/src/pm/remshell/Makefile.mk
index ea366a9..fbd60bb 100644
--- a/src/pm/remshell/Makefile.mk
+++ b/src/pm/remshell/Makefile.mk
@@ -16,13 +16,17 @@ if BUILD_PM_REMSHELL
if PRIMARY_PM_REMSHELL
bin_PROGRAMS += src/pm/remshell/mpiexec
src_pm_remshell_mpiexec_SOURCES = src/pm/remshell/mpiexec.c
-src_pm_remshell_mpiexec_LDADD = src/pm/util/libmpiexec.a
+src_pm_remshell_mpiexec_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+src_pm_remshell_mpiexec_LDFLAGS = $(mpllibdir)
+EXTRA_src_pm_remshell_mpiexec_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
src_pm_remshell_mpiexec_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
else !PRIMARY_PM_REMSHELL
bin_PROGRAMS += src/pm/remshell/mpiexec.remshell
src_pm_remshell_mpiexec_remshell_SOURCES = src/pm/remshell/mpiexec.c
-src_pm_remshell_mpiexec_remshell_LDADD = src/pm/util/libmpiexec.a
+src_pm_remshell_mpiexec_remshell_LDADD = src/pm/util/libmpiexec.la -l$(MPLLIBNAME)
+src_pm_remshell_mpiexec_remshell_LDFLAGS = $(mpllibdir)
+EXTRA_src_pm_remshell_mpiexec_remshell_DEPENDENCIES = $(mpllib)
# we may not want to add AM_CPPFLAGS for this program
src_pm_remshell_mpiexec_remshell_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
endif !PRIMARY_PM_REMSHELL
diff --git a/src/pm/remshell/mpiexec.c b/src/pm/remshell/mpiexec.c
index 6c133c5..7752b3f 100644
--- a/src/pm/remshell/mpiexec.c
+++ b/src/pm/remshell/mpiexec.c
@@ -80,9 +80,9 @@
#include "rm.h"
#include "simple_pmiutil.h"
#include "env.h" /* MPIE_Putenv */
-/* mpimem.h contains prototypes for MPIU_Strncpy etc. */
+/* mpir_mem.h contains prototypes for MPL_strncpy etc. */
/* We no longer can use these because they are MPI device specific */
-/* #include "mpimem.h" */
+/* #include "mpir_mem.h" */
typedef struct { PMISetup pmiinfo; IOLabelSetup labelinfo; } SetupInfo;
@@ -266,7 +266,7 @@ int mypostfork( void *predata, void *data, ProcessState *pState )
char rankStr[12];
/* Insert into app->args */
- newargs = (const char **) MPIU_Malloc( (app->nArgs + 14 + 1) *
+ newargs = (const char **) MPL_malloc( (app->nArgs + 14 + 1) *
sizeof(char *) );
if (!pState->hostname) {
MPL_error_printf( "No hostname avaliable for %s\n", app->exename );
@@ -276,7 +276,7 @@ int mypostfork( void *predata, void *data, ProcessState *pState )
snprintf( rankStr, sizeof(rankStr)-1, "%d", pState->id );
rankStr[12-1] = 0;
curarg = 0;
- newargs[curarg++] = MPIU_Strdup( "-Y" );
+ newargs[curarg++] = MPL_strdup( "-Y" );
newargs[curarg++] = pState->hostname;
curarg += AddEnvSetToCmdLine( "PMI_PORT", s->pmiinfo.portName,
@@ -294,7 +294,7 @@ int mypostfork( void *predata, void *data, ProcessState *pState )
newargs[j+curarg] = app->args[j];
}
newargs[j+curarg] = 0;
- app->exename = MPIU_Strdup( "/usr/bin/ssh" );
+ app->exename = MPL_strdup( "/usr/bin/ssh" );
app->args = newargs;
app->nArgs += curarg;
@@ -431,19 +431,19 @@ static int AddEnvSetToCmdLine( const char *envName, const char *envValue,
}
if (useCSHFormat) {
- args[nArgs++] = MPIU_Strdup( "setenv" );
- args[nArgs++] = MPIU_Strdup( envName );
- args[nArgs++] = MPIU_Strdup( envValue );
- args[nArgs++] = MPIU_Strdup( ";" );
+ args[nArgs++] = MPL_strdup( "setenv" );
+ args[nArgs++] = MPL_strdup( envName );
+ args[nArgs++] = MPL_strdup( envValue );
+ args[nArgs++] = MPL_strdup( ";" );
}
else {
char tmpBuf[1024];
- args[nArgs++] = MPIU_Strdup( "export" );
- MPIU_Strncpy( tmpBuf, envName, sizeof(tmpBuf) );
- MPIU_Strnapp( tmpBuf, "=", sizeof(tmpBuf) );
- MPIU_Strnapp( tmpBuf, envValue, sizeof(tmpBuf) );
- args[nArgs++] = MPIU_Strdup( tmpBuf );
- args[nArgs++] = MPIU_Strdup( ";" );
+ args[nArgs++] = MPL_strdup( "export" );
+ MPL_strncpy( tmpBuf, envName, sizeof(tmpBuf) );
+ MPL_strnapp( tmpBuf, "=", sizeof(tmpBuf) );
+ MPL_strnapp( tmpBuf, envValue, sizeof(tmpBuf) );
+ args[nArgs++] = MPL_strdup( tmpBuf );
+ args[nArgs++] = MPL_strdup( ";" );
}
return nArgs;
}
diff --git a/src/pm/util/Makefile.mk b/src/pm/util/Makefile.mk
index 83e273f..d2bc522 100644
--- a/src/pm/util/Makefile.mk
+++ b/src/pm/util/Makefile.mk
@@ -17,25 +17,30 @@ if BUILD_PM_UTIL
## FIXME do we need this still?
##OTHER_DIRS = test
-noinst_LIBRARIES += src/pm/util/libmpiexec.a
+noinst_LTLIBRARIES += src/pm/util/libmpiexec.la
# Ensure that dgbiface is compiled with the -g option, as the symbols must
# be present for the debugger to see them
-src_pm_util_libmpiexec_a_CFLAGS = -g $(AM_CFLAGS)
+src_pm_util_libmpiexec_la_CFLAGS = -g $(AM_CFLAGS)
# we may want to omit the regular AM_CPPFLAGS when building objects in this
# utility library
-src_pm_util_libmpiexec_a_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
+src_pm_util_libmpiexec_la_CPPFLAGS = $(common_pm_includes) $(AM_CPPFLAGS)
+
+# MPL
+src_pm_util_libmpiexec_la_LIBADD = -l$(MPLLIBNAME)
+src_pm_util_libmpiexec_la_LDFLAGS = $(mpllibdir)
+EXTRA_src_pm_util_libmpiexec_la_DEPENDENCIES = $(mpllib)
# We use the msg print routines (for now) - include these in the mpiexec
# library so that we don't need to copy the source files
-# safestr2 and simple_pmiutil2 are subsets of safestr and simple_pmiutil
-# respectively, since these may no longer be used by other applications
+# simple_pmiutil2 is a subset of simple_pmiutil,
+# since it may no longer be used by other applications
# (they make use of routines like the trmem routines that may no longer
# be used by other applications).
#
# [goodell] FIXME the above comment is basically unintelligible...
-src_pm_util_libmpiexec_a_SOURCES = \
+src_pm_util_libmpiexec_la_SOURCES = \
src/pm/util/cmnargs.c \
src/pm/util/process.c \
src/pm/util/ioloop.c \
@@ -46,7 +51,6 @@ src_pm_util_libmpiexec_a_SOURCES = \
src/pm/util/rm.c \
src/pm/util/pmiport.c \
src/pm/util/dbgiface.c \
- src/pm/util/safestr2.c \
src/pm/util/simple_pmiutil2.c
endif BUILD_PM_UTIL
diff --git a/src/pm/util/cmnargs.c b/src/pm/util/cmnargs.c
index d8b00cc..389cc13 100644
--- a/src/pm/util/cmnargs.c
+++ b/src/pm/util/cmnargs.c
@@ -123,7 +123,7 @@ int MPIE_Args( int argc, char *argv[], ProcessUniverse *mypUniv,
override the environment */
/* Allocate the members of the ProcessUniverse structure */
- mypUniv->worlds = (ProcessWorld*) MPIU_Malloc( sizeof(ProcessWorld) );
+ mypUniv->worlds = (ProcessWorld*) MPL_malloc( sizeof(ProcessWorld) );
mypUniv->worlds->nApps = 0;
mypUniv->worlds->nProcess = 0;
mypUniv->worlds->nextWorld = 0;
@@ -189,8 +189,8 @@ int MPIE_Args( int argc, char *argv[], ProcessUniverse *mypUniv,
else if ( strncmp( argv[i], "-pmi_args", 8 ) == 0) {
if (i+4 < argc ) {
mypUniv->fromSingleton = 1;
- mypUniv->portKey = MPIU_Strdup( argv[i+3] );
- mypUniv->singletonIfname = MPIU_Strdup( argv[i+2] );
+ mypUniv->portKey = MPL_strdup( argv[i+3] );
+ mypUniv->singletonIfname = MPL_strdup( argv[i+2] );
mypUniv->singletonPID = atoi(argv[i+4] );
mypUniv->singletonPort = atoi(argv[i+1] );
i += 4;
@@ -273,7 +273,7 @@ int MPIE_Args( int argc, char *argv[], ProcessUniverse *mypUniv,
}
/* Create a new app and add to the app list*/
- pApp = (ProcessApp*) MPIU_Malloc( sizeof(ProcessApp) );
+ pApp = (ProcessApp*) MPL_malloc( sizeof(ProcessApp) );
*nextAppPtr = pApp;
nextAppPtr = &(pApp->nextApp);
pApp->nextApp = 0;
@@ -584,7 +584,7 @@ int MPIE_ParseSoftspec( const char *str, ProcessSoftSpec *sspec )
p1++;
}
sspec->nelm = nelm;
- sspec->tuples = (int (*)[3]) MPIU_Malloc( nelm * sizeof(int [3]));
+ sspec->tuples = (int (*)[3]) MPL_malloc( nelm * sizeof(int [3]));
nelm = 0;
while ( *p ) {
@@ -704,7 +704,7 @@ static int LineToArgv( char *linebuf, char *(argv[]), int maxargv )
while (*p && !isspace(*p)) p++;
/* Convert the entry into a copy */
- argv[argc] = MPIU_Strdup( argv[argc] );
+ argv[argc] = MPL_strdup( argv[argc] );
argc++;
*p++ = 0;
}
diff --git a/src/pm/util/dbgiface.c b/src/pm/util/dbgiface.c
index a8d2382..c2c3aed 100644
--- a/src/pm/util/dbgiface.c
+++ b/src/pm/util/dbgiface.c
@@ -80,7 +80,7 @@ int MPIE_InitForDebugger( ProcessWorld *pWorld )
static char myhostname[MAX_HOST_NAME+1];
MPIR_proctable = (struct MPIR_PROCDESC *)
- MPIU_Malloc( np * sizeof(struct MPIR_PROCDESC) );
+ MPL_malloc( np * sizeof(struct MPIR_PROCDESC) );
i = 0;
while (apps && i < np) {
@@ -126,7 +126,7 @@ int MPIE_InitForDebugger( ProcessWorld *pWorld )
/* This routine is provided to free memory allocated in this routine */
int MPIE_FreeFromDebugger( void )
{
- if (MPIR_proctable) { MPIU_Free( MPIR_proctable ); }
+ if (MPIR_proctable) { MPL_free( MPIR_proctable ); }
return 0;
}
diff --git a/src/pm/util/env.c b/src/pm/util/env.c
index 66909b1..7fcacea 100644
--- a/src/pm/util/env.c
+++ b/src/pm/util/env.c
@@ -44,7 +44,7 @@ int MPIE_ArgsCheckForEnv( int argc, char *argv[], ProcessWorld *pWorld,
if ( strncmp( argv[0], "-env", 4) == 0) {
if (!*appEnv) {
- env = (EnvInfo *)MPIU_Malloc( sizeof(EnvInfo) );
+ env = (EnvInfo *)MPL_malloc( sizeof(EnvInfo) );
env->includeAll = 1;
env->envPairs = 0;
env->envNames = 0;
@@ -56,7 +56,7 @@ int MPIE_ArgsCheckForEnv( int argc, char *argv[], ProcessWorld *pWorld,
}
else if (strncmp( argv[0], "-genv", 5 ) == 0) {
if (!pWorld->genv) {
- env = (EnvInfo *)MPIU_Malloc( sizeof(EnvInfo) );
+ env = (EnvInfo *)MPL_malloc( sizeof(EnvInfo) );
env->includeAll = 1;
env->envPairs = 0;
env->envNames = 0;
@@ -77,9 +77,9 @@ int MPIE_ArgsCheckForEnv( int argc, char *argv[], ProcessWorld *pWorld,
if (!argv[1] || !argv[2]) {
mpiexec_usage( "Missing arguments to -env or -genv" );
}
- p = (EnvData *)MPIU_Malloc( sizeof(EnvData) );
- p->name = (const char *)MPIU_Strdup( argv[1] );
- p->value = (const char *)MPIU_Strdup( argv[2] );
+ p = (EnvData *)MPL_malloc( sizeof(EnvData) );
+ p->name = (const char *)MPL_strdup( argv[1] );
+ p->value = (const char *)MPL_strdup( argv[2] );
p->envvalue = 0;
p->nextData = env->envPairs;
env->envPairs = p;
@@ -104,9 +104,9 @@ int MPIE_ArgsCheckForEnv( int argc, char *argv[], ProcessWorld *pWorld,
while (*lPtr && *lPtr != ',') lPtr++;
/* The length of any environment string will fit in an int */
namelen = (int)(lPtr - name);
- p = (EnvData *)MPIU_Malloc( sizeof(EnvData) );
+ p = (EnvData *)MPL_malloc( sizeof(EnvData) );
p->value = 0;
- p->name = (const char *)MPIU_Malloc( namelen + 1 );
+ p->name = (const char *)MPL_malloc( namelen + 1 );
p->envvalue = 0;
for (i=0; i<namelen; i++) ((char *)p->name)[i] = name[i];
((char *)p->name)[namelen] = 0;
@@ -261,14 +261,14 @@ int MPIE_EnvInitData( EnvData *elist, int getValue )
value = "";
}
slen = strlen( elist->name ) + strlen(value) + 2;
- str = (char *)MPIU_Malloc( slen );
+ str = (char *)MPL_malloc( slen );
if (!str) {
return 1;
}
- MPIU_Strncpy( str, elist->name, slen );
+ MPL_strncpy( str, elist->name, slen );
if (value && *value) {
- rc = MPIU_Strnapp( str, "=", slen );
- rc += MPIU_Strnapp( str, value, slen );
+ rc = MPL_strnapp( str, "=", slen );
+ rc += MPL_strnapp( str, value, slen );
if (rc) {
return 1;
}
@@ -290,7 +290,7 @@ int MPIE_Putenv( ProcessWorld *pWorld, const char *env_string )
/* FIXME: This should be getGenv (so allocation/init in one place) */
if (!pWorld->genv) {
- genv = (EnvInfo *)MPIU_Malloc( sizeof(EnvInfo) );
+ genv = (EnvInfo *)MPL_malloc( sizeof(EnvInfo) );
genv->includeAll = 1;
genv->envPairs = 0;
genv->envNames = 0;
@@ -298,11 +298,11 @@ int MPIE_Putenv( ProcessWorld *pWorld, const char *env_string )
}
genv = pWorld->genv;
- p = (EnvData *)MPIU_Malloc( sizeof(EnvData) );
+ p = (EnvData *)MPL_malloc( sizeof(EnvData) );
if (!p) return 1;
p->name = 0;
p->value = 0;
- p->envvalue = (const char *)MPIU_Strdup( env_string );
+ p->envvalue = (const char *)MPL_strdup( env_string );
if (!p->envvalue) return 1;
p->nextData = genv->envPairs;
genv->envPairs = p;
diff --git a/src/pm/util/labelout.c b/src/pm/util/labelout.c
index fc0b464..2c0adb6 100644
--- a/src/pm/util/labelout.c
+++ b/src/pm/util/labelout.c
@@ -90,7 +90,7 @@ int IOLabelSetupFinishInServer( IOLabelSetup *iofds, ProcessState *pState )
close( iofds->readErr[1] );
/* We need dedicated storage for the private data */
- leader = (IOLabel *)MPIU_Malloc( sizeof(IOLabel) );
+ leader = (IOLabel *)MPL_malloc( sizeof(IOLabel) );
if (useLabels) {
IOLabelSetLabelText( outLabelPattern,
leader->label, sizeof(leader->label),
@@ -101,7 +101,7 @@ int IOLabelSetupFinishInServer( IOLabelSetup *iofds, ProcessState *pState )
}
leader->lastNL = 1;
leader->dest = stdout;
- leadererr = (IOLabel *)MPIU_Malloc( sizeof(IOLabel) );
+ leadererr = (IOLabel *)MPL_malloc( sizeof(IOLabel) );
if (useLabels) {
IOLabelSetLabelText( errLabelPattern,
leadererr->label, sizeof(leadererr->label),
@@ -211,7 +211,7 @@ static int IOLabelSetLabelText( const char pattern[], char label[],
case 'd':
dlen = (int)strlen( rankAsChar );
if (dlen < lenleft) {
- MPIU_Strncpy( pout, rankAsChar, lenleft );
+ MPL_strncpy( pout, rankAsChar, lenleft );
pout += dlen;
lenleft -= dlen;
}
@@ -223,7 +223,7 @@ static int IOLabelSetLabelText( const char pattern[], char label[],
case 'w':
dlen = (int)strlen(worldnumAsChar);
if (dlen < lenleft) {
- MPIU_Strncpy( pout, worldnumAsChar, lenleft );
+ MPL_strncpy( pout, worldnumAsChar, lenleft );
pout += dlen;
lenleft -= dlen;
}
@@ -250,7 +250,7 @@ static int IOLabelSetLabelText( const char pattern[], char label[],
rank, worldnum );
dlen = (int)strlen(wLabel);
if (dlen < lenleft) {
- MPIU_Strncpy( pout, wLabel, lenleft );
+ MPL_strncpy( pout, wLabel, lenleft );
pout += dlen;
lenleft -= dlen;
}
@@ -287,7 +287,7 @@ int IOLabelCheckEnv( void )
envval = getenv( "MPIEXEC_PREFIX_STDOUT" );
if (envval) {
if (strlen(envval) < MAX_LABEL) {
- MPIU_Strncpy( outLabelPattern, envval, MAX_LABEL );
+ MPL_strncpy( outLabelPattern, envval, MAX_LABEL );
useLabels = 1;
}
else {
@@ -297,7 +297,7 @@ int IOLabelCheckEnv( void )
envval = getenv( "MPIEXEC_PREFIX_STDERR" );
if (envval) {
if (strlen(envval) < MAX_LABEL) {
- MPIU_Strncpy( errLabelPattern, envval, MAX_LABEL );
+ MPL_strncpy( errLabelPattern, envval, MAX_LABEL );
useLabels = 1;
}
else {
diff --git a/src/pm/util/pmiserv.c b/src/pm/util/pmiserv.c
index 5376ded..60e7131 100644
--- a/src/pm/util/pmiserv.c
+++ b/src/pm/util/pmiserv.c
@@ -237,7 +237,7 @@ PMIProcess *PMISetupNewProcess( int fd, ProcessState *pState )
{
PMIProcess *pmiprocess;
- pmiprocess = (PMIProcess *)MPIU_Malloc( sizeof(PMIProcess) );
+ pmiprocess = (PMIProcess *)MPL_malloc( sizeof(PMIProcess) );
if (!pmiprocess) return 0;
pmiprocess->fd = fd;
pmiprocess->nextChar = pmiprocess->readBuf;
@@ -265,13 +265,13 @@ PMIProcess *PMISetupNewProcess( int fd, ProcessState *pState )
int PMISetupNewGroup( int nProcess, PMIKVSpace *kvs )
{
PMIGroup *g;
- curPMIGroup = (PMIGroup *)MPIU_Malloc( sizeof(PMIGroup) );
+ curPMIGroup = (PMIGroup *)MPL_malloc( sizeof(PMIGroup) );
if (!curPMIGroup) return 1;
curPMIGroup->nProcess = nProcess;
curPMIGroup->groupID = pmimaster.nGroups++;
curPMIGroup->nInBarrier = 0;
- curPMIGroup->pmiProcess = (PMIProcess **)MPIU_Malloc(
+ curPMIGroup->pmiProcess = (PMIProcess **)MPL_malloc(
sizeof(PMIProcess*) * nProcess );
if (!curPMIGroup->pmiProcess) return 1;
curPMIGroup->nextGroup = 0;
@@ -456,7 +456,7 @@ static PMIKVSpace *fPMIKVSAllocate( void )
static int kvsnum = 0; /* Used to generate names */
/* Create the space */
- kvs = (PMIKVSpace *)MPIU_Malloc( sizeof(PMIKVSpace) );
+ kvs = (PMIKVSpace *)MPL_malloc( sizeof(PMIKVSpace) );
if (!kvs) {
MPL_internal_error_printf( "too many kvs's\n" );
return 0;
@@ -494,7 +494,7 @@ static int fPMIKVSGetNewSpace( char kvsname[], int maxlen )
PMIKVSpace *kvs;
kvs = fPMIKVSAllocate( );
- MPIU_Strncpy( kvsname, kvs->kvsname, maxlen );
+ MPL_strncpy( kvsname, kvs->kvsname, maxlen );
return 0;
}
static int fPMIKVSFindKey( PMIKVSpace *kvs,
@@ -508,7 +508,7 @@ static int fPMIKVSFindKey( PMIKVSpace *kvs,
rc = strcmp( p->key, key );
if (rc == 0) {
/* Found it. Get the value and return success */
- MPIU_Strncpy( val, p->val, maxval );
+ MPL_strncpy( val, p->val, maxval );
return 0;
}
if (rc > 0) {
@@ -544,12 +544,12 @@ static int fPMIKVSAddPair( PMIKVSpace *kvs,
pprev = &(p->nextPair);
p = p->nextPair;
}
- pair = (PMIKVPair *)MPIU_Malloc( sizeof(PMIKVPair) );
+ pair = (PMIKVPair *)MPL_malloc( sizeof(PMIKVPair) );
if (!pair) {
return -1;
}
- MPIU_Strncpy( pair->key, key, sizeof(pair->key) );
- MPIU_Strncpy( pair->val, val, sizeof(pair->val) );
+ MPL_strncpy( pair->key, key, sizeof(pair->key) );
+ MPL_strncpy( pair->val, val, sizeof(pair->val) );
/* Insert into the list */
pair->nextPair = p;
@@ -593,7 +593,7 @@ static int PMIKVSFree( PMIKVSpace *kvs )
p = kvs->pairs;
while (p) {
pNext = p->nextPair;
- MPIU_Free( p );
+ MPL_free( p );
p = pNext;
}
@@ -605,7 +605,7 @@ static int PMIKVSFree( PMIKVSpace *kvs )
rc = strcmp( k->kvsname, kvs->kvsname );
if (rc == 0) {
*kPrev = k->nextKVS;
- MPIU_Free( k );
+ MPL_free( k );
break;
}
kPrev = &(k->nextKVS);
@@ -698,7 +698,7 @@ static int fPMI_Handle_put( PMIProcess *pentry )
}
else {
rc = 0;
- MPIU_Strncpy( message, "success", PMIU_MAXLINE );
+ MPL_strncpy( message, "success", PMIU_MAXLINE );
}
}
else {
@@ -733,18 +733,18 @@ static int fPMI_Handle_get( PMIProcess *pentry )
rc = fPMIKVSFindKey( kvs, key, value, sizeof(value) );
if (rc == 0) {
rc = 0;
- MPIU_Strncpy( message, "success", PMIU_MAXLINE );
+ MPL_strncpy( message, "success", PMIU_MAXLINE );
}
else if (rc) {
rc = -1;
- MPIU_Strncpy( value, "unknown", PMIU_MAXLINE );
+ MPL_strncpy( value, "unknown", PMIU_MAXLINE );
MPL_snprintf( message, PMIU_MAXLINE, "key_%s_not_found",
kvsname );
}
}
else {
rc = -1;
- MPIU_Strncpy( value, "unknown", PMIU_MAXLINE );
+ MPL_strncpy( value, "unknown", PMIU_MAXLINE );
MPL_snprintf( message, PMIU_MAXLINE, "kvs_%s_not_found", kvsname );
}
MPL_snprintf( outbuf, PMIU_MAXLINE,
@@ -1011,7 +1011,7 @@ static int fPMI_Handle_spawn( PMIProcess *pentry )
DBG_PRINTFCOND(pmidebug,( "Entering fPMI_Handle_spawn\n" ));
if (!pentry->spawnWorld) {
- pWorld = (ProcessWorld *)MPIU_Malloc( sizeof(ProcessWorld) );
+ pWorld = (ProcessWorld *)MPL_malloc( sizeof(ProcessWorld) );
if (!pWorld) return 1;
pentry->spawnWorld = pWorld;
@@ -1036,7 +1036,7 @@ static int fPMI_Handle_spawn( PMIProcess *pentry )
commands */
/* Create a new app */
- app = (ProcessApp *)MPIU_Malloc( sizeof(ProcessApp) );
+ app = (ProcessApp *)MPL_malloc( sizeof(ProcessApp) );
if (!app) return 1;
app->myAppNum = 0;
app->exename = 0;
@@ -1108,7 +1108,7 @@ static int fPMI_Handle_spawn( PMIProcess *pentry )
pWorld->nProcess += app->nProcess;
}
else if (strcmp( "execname", cmdPtr ) == 0) {
- app->exename = MPIU_Strdup( valPtr );
+ app->exename = MPL_strdup( valPtr );
}
else if (strcmp( "totspawns", cmdPtr ) == 0) {
/* This tells us how many separate spawn commands
@@ -1135,14 +1135,14 @@ static int fPMI_Handle_spawn( PMIProcess *pentry )
argnum, PMI_MAX_ARGS-1 );
return 1;
}
- args[argnum] = MPIU_Strdup( valPtr );
+ args[argnum] = MPL_strdup( valPtr );
}
else if (strcmp( "preput_num", cmdPtr ) == 0) {
preputNum = atoi(valPtr);
}
else if (strncmp( "preput_key_", cmdPtr, 11 ) == 0) {
/* Save the key */
- MPIU_Strncpy( key, valPtr, sizeof(key) );
+ MPL_strncpy( key, valPtr, sizeof(key) );
}
else if (strncmp( "preput_val_", cmdPtr, 11 ) == 0) {
/* Place the key,val into the space associate with the current
@@ -1166,7 +1166,7 @@ static int fPMI_Handle_spawn( PMIProcess *pentry )
/* The actual name has a digit, which indicates *which* info
key this is */
curInfoIdx = atoi( cmdPtr + 9 );
- MPIU_Strncpy( curInfoKey, valPtr, sizeof(curInfoKey) );
+ MPL_strncpy( curInfoKey, valPtr, sizeof(curInfoKey) );
}
else if (strncmp( "info_val_", cmdPtr, 9 ) == 0) {
/* The actual name has a digit, which indicates *which* info
@@ -1177,7 +1177,7 @@ static int fPMI_Handle_spawn( PMIProcess *pentry )
return 1;
}
else {
- MPIU_Strncpy( curInfoVal, valPtr, sizeof(curInfoVal) );
+ MPL_strncpy( curInfoVal, valPtr, sizeof(curInfoVal) );
/* Apply this info item */
fPMIInfoKey( app, curInfoKey, curInfoVal );
/* printf( "Got info %s+%s\n", curInfoKey, curInfoVal ); */
@@ -1191,7 +1191,7 @@ static int fPMI_Handle_spawn( PMIProcess *pentry )
}
if (app->nArgs > 0) {
- app->args = (const char **)MPIU_Malloc( app->nArgs * sizeof(char *) );
+ app->args = (const char **)MPL_malloc( app->nArgs * sizeof(char *) );
for (i=0; i<app->nArgs; i++) {
app->args[i] = args[i];
args[i] = 0;
@@ -1320,16 +1320,16 @@ int PMI_InitSingletonConnection( int fd, PMIProcess *pmiprocess )
static int fPMIInfoKey( ProcessApp *app, const char key[], const char val[] )
{
if (strcmp( key, "host" ) == 0) {
- app->hostname = MPIU_Strdup( val );
+ app->hostname = MPL_strdup( val );
}
else if (strcmp( key, "arch" ) == 0) {
- app->arch = MPIU_Strdup( val );
+ app->arch = MPL_strdup( val );
}
else if (strcmp( key, "wdir" ) == 0) {
- app->wdir = MPIU_Strdup( val );
+ app->wdir = MPL_strdup( val );
}
else if (strcmp( key, "path" ) == 0) {
- app->path = MPIU_Strdup( val );
+ app->path = MPL_strdup( val );
}
else if (strcmp( key, "soft" ) == 0) {
MPIE_ParseSoftspec( val, &app->soft );
diff --git a/src/pm/util/pmutil.h b/src/pm/util/pmutil.h
index 9f29dbd..f48d7f9 100644
--- a/src/pm/util/pmutil.h
+++ b/src/pm/util/pmutil.h
@@ -76,45 +76,6 @@ extern int MPIE_Debug;
#define MPIE_SYSCALL(a_,b_,c_) a_ = (int)b_ c_
#endif
-
-/* Use the memory defintions from mpich/src/include */
-/* #include "mpimem.h" */
-/* The memory routines no longer are available as utility routines.
- The choices are to use the original memory tracing routines or
- to select the option of using the basic memory routines. The
- second option is used for now. */
-/* No memory tracing; just use native functions */
-#include <stdlib.h>
-#define MPIU_Malloc(a) malloc((size_t)(a))
-#define MPIU_Calloc(a,b) calloc((size_t)(a),(size_t)(b))
-#define MPIU_Free(a) free((void *)(a))
-#define MPIU_Realloc(a,b) realloc((void *)(a),(size_t)(b))
-
-int MPIU_Strncpy( char *outstr, const char *instr, size_t maxlen );
-int MPIU_Strnapp( char *, const char *, size_t );
-char *MPIU_Strdup( const char * );
-
-#ifdef HAVE_STRDUP
-/* Watch for the case where strdup is defined as a macro by a header include */
-# if defined(NEEDS_STRDUP_DECL) && !defined(strdup)
-extern char *strdup( const char * );
-# endif
-#define MPIU_Strdup(a) strdup(a)
-#else
-/* Don't define MPIU_Strdup, provide it in safestr.c */
-#endif /* HAVE_STRDUP */
-/* Provide a fallback snprintf for systems that do not have one */
-#ifdef HAVE_SNPRINTF
-#define MPL_snprintf snprintf
-/* Sometimes systems don't provide prototypes for snprintf */
-#ifdef NEEDS_SNPRINTF_DECL
-extern int snprintf( char *, size_t, const char *, ... ) ATTRIBUTE((format(printf,3,4)));
-#endif
-#else
-int MPL_snprintf( char *str, size_t size, const char *format, ... )
- ATTRIBUTE((format(printf,3,4)));
-#endif /* HAVE_SNPRINTF */
-
#include "mpl.h"
#endif
diff --git a/src/pm/util/process.c b/src/pm/util/process.c
index 3c832ca..a06b50a 100644
--- a/src/pm/util/process.c
+++ b/src/pm/util/process.c
@@ -114,7 +114,7 @@ int MPIE_ForkProcesses( ProcessWorld *pWorld, char *envp[],
while (app) {
/* Allocate process state if necessary */
if (!app->pState) {
- pState = (ProcessState *)MPIU_Malloc(
+ pState = (ProcessState *)MPL_malloc(
app->nProcess * sizeof(ProcessState) );
if (!pState) {
return -1;
@@ -255,8 +255,8 @@ int MPIE_ExecProgram( ProcessState *pState, char *envp[] )
char pathstring[MAXPATHLEN+10];
/* We allocate these on the heap to help catch array overrun errors
such as those in ticket #719. */
- char **client_env = MPIU_Malloc(MAX_CLIENT_ENV * sizeof(char *));
- char **client_arg = MPIU_Malloc(MAX_CLIENT_ARG * sizeof(char *));
+ char **client_env = MPL_malloc(MAX_CLIENT_ENV * sizeof(char *));
+ char **client_arg = MPL_malloc(MAX_CLIENT_ARG * sizeof(char *));
app = pState->app;
@@ -350,7 +350,7 @@ int MPIE_ExecProgram( ProcessState *pState, char *envp[] )
certain files or libraries, for example cygwin1.dll for
Cygwin */
#ifdef NEEDS_BIN_IN_PATH
- MPIU_Strnapp( pathstring, ":/bin", sizeof(pathstring)-1 );
+ MPL_strnapp( pathstring, ":/bin", sizeof(pathstring)-1 );
#endif
putenv( pathstring );
@@ -992,7 +992,7 @@ int MPIE_SetupSingleton( ProcessUniverse *mypUniv )
pWorld = &mypUniv->worlds[0];
pWorld->nProcess = 1;
- pApp = (ProcessApp *) MPIU_Malloc( sizeof(ProcessApp) );
+ pApp = (ProcessApp *) MPL_malloc( sizeof(ProcessApp) );
pApp->nextApp = 0;
pWorld->nApps = 1;
pWorld->apps = pApp;
@@ -1006,7 +1006,7 @@ int MPIE_SetupSingleton( ProcessUniverse *mypUniv )
pApp->args = 0;
pApp->nArgs = 0;
pApp->myAppNum = 0;
- pState = (ProcessState *) MPIU_Malloc( sizeof(ProcessState) );
+ pState = (ProcessState *) MPL_malloc( sizeof(ProcessState) );
pApp->pState = pState;
pState[0].app = pApp;
diff --git a/src/pm/util/rm.c b/src/pm/util/rm.c
index a2f98fc..4f69686 100644
--- a/src/pm/util/rm.c
+++ b/src/pm/util/rm.c
@@ -75,7 +75,7 @@ int MPIE_ChooseHosts( ProcessWorld *pWorld,
app = pWorld->apps;
while (app) {
if (!app->pState) {
- pState = (ProcessState *)MPIU_Malloc(
+ pState = (ProcessState *)MPL_malloc(
app->nProcess * sizeof(ProcessState) );
if (!pState) {
return -1;
@@ -141,7 +141,7 @@ int MPIE_ChooseHosts( ProcessWorld *pWorld,
mt->desc[curHost].hostname, i ));
nNeeded --;
nForApp--;
- pState[i].hostname = MPIU_Strdup( mt->desc[curHost].hostname );
+ pState[i].hostname = MPL_strdup( mt->desc[curHost].hostname );
mt->desc[curHost].np--;
if (mt->desc[curHost].np == 0)
curHost++;
@@ -229,7 +229,7 @@ MachineTable *MPIE_ReadMachines( const char *arch, int nNeeded,
len = strlen(path);
/* Copy path into the file name */
- MPIU_Strncpy( dirname, path, len+1 );
+ MPL_strncpy( dirname, path, len+1 );
dirname[len] = 0;
@@ -239,8 +239,8 @@ MachineTable *MPIE_ReadMachines( const char *arch, int nNeeded,
"%s/machines.%s", dirname, arch );
}
else {
- MPIU_Strncpy( machinesfile, dirname, PATH_MAX );
- MPIU_Strnapp( machinesfile, "/machines", PATH_MAX );
+ MPL_strncpy( machinesfile, dirname, PATH_MAX );
+ MPL_strnapp( machinesfile, "/machines", PATH_MAX );
}
DBG_PRINTF( ("Attempting to open %s\n", machinesfile) );
fp = fopen( machinesfile, "r" );
@@ -256,7 +256,7 @@ MachineTable *MPIE_ReadMachines( const char *arch, int nNeeded,
MPL_error_printf( "Could not open machines file %s\n", machinesfile );
return 0;
}
- mt = (MachineTable *)MPIU_Malloc( sizeof(MachineTable) );
+ mt = (MachineTable *)MPL_malloc( sizeof(MachineTable) );
if (!mt) {
MPL_internal_error_printf( "Could not allocate machine table\n" );
return 0;
@@ -264,7 +264,7 @@ MachineTable *MPIE_ReadMachines( const char *arch, int nNeeded,
/* This may be larger than needed if the machines file has
fewer entries than nNeeded */
- mt->desc = (MachineDesc *)MPIU_Malloc( nNeeded * sizeof(MachineDesc) );
+ mt->desc = (MachineDesc *)MPL_malloc( nNeeded * sizeof(MachineDesc) );
if (!mt->desc) {
return 0;
}
@@ -335,9 +335,9 @@ MachineTable *MPIE_ReadMachines( const char *arch, int nNeeded,
/* Save the names */
/* Initialize the fields for this new entry */
- mt->desc[nFound].hostname = MPIU_Strdup( name );
+ mt->desc[nFound].hostname = MPL_strdup( name );
if (login)
- mt->desc[nFound].login = MPIU_Strdup( login );
+ mt->desc[nFound].login = MPL_strdup( login );
else
mt->desc[nFound].login = 0;
if (npstring) {
@@ -354,7 +354,7 @@ MachineTable *MPIE_ReadMachines( const char *arch, int nNeeded,
else
mt->desc[nFound].np = 1;
if (netname)
- mt->desc[nFound].netname = MPIU_Strdup( netname );
+ mt->desc[nFound].netname = MPL_strdup( netname );
else
mt->desc[nFound].netname = 0;
@@ -374,11 +374,11 @@ int MPIE_RMProcessArg( int argc, char *argv[], void *extra )
cmd = argv[0] + 12;
if (cmd[0] == 0) {
- machinefile = MPIU_Strdup( argv[1] );
+ machinefile = MPL_strdup( argv[1] );
incr = 2;
}
else if (strcmp( cmd, "path" ) == 0) {
- machinefilePath = MPIU_Strdup( argv[1] );
+ machinefilePath = MPL_strdup( argv[1] );
incr = 2;
}
/* else not an argument for this routine */
@@ -391,16 +391,16 @@ int MPIE_FreeMachineTable( MachineTable *mt )
{
int i;
for (i=0; i<mt->nHosts; i++) {
- MPIU_Free( mt->desc[i].hostname );
+ MPL_free( mt->desc[i].hostname );
if (mt->desc[i].login) {
- MPIU_Free( mt->desc[i].login );
+ MPL_free( mt->desc[i].login );
}
if (mt->desc[i].netname) {
- MPIU_Free( mt->desc[i].netname );
+ MPL_free( mt->desc[i].netname );
}
}
- MPIU_Free( mt->desc );
- MPIU_Free( mt );
+ MPL_free( mt->desc );
+ MPL_free( mt );
return 0;
}
diff --git a/src/pm/util/safestr2.c b/src/pm/util/safestr2.c
deleted file mode 100644
index 0b19186..0000000
--- a/src/pm/util/safestr2.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpichconf.h"
-#include "mpimem.h"
-
-/*
- * This file contains two of the routines from the "safe" versions of the
- * various string routines in src/util/mem/safestr.c . These are duplicated
- * here because the MPICH utility routines can no longer be used by other
- * applications.
- */
-
-/*
- * MPIU_Strncpy - Copy at most n characters. Stop once a null is reached.
- *
- * This is different from strncpy, which null pads so that exactly
- * n characters are copied. The strncpy behavior is correct for many
- * applications because it guarantees that the string has no uninitialized
- * data.
- *
- * If n characters are copied without reaching a null, return an error.
- * Otherwise, return 0.
- *
- * Question: should we provide a way to request the length of the string,
- * since we know it?
- */
-/*@ MPIU_Strncpy - Copy a string with a maximum length
-
-Input Parameters:
-+ instr - String to copy
-- maxlen - Maximum total length of 'outstr'
-
-Output Parameters:
-. outstr - String to copy into
-
- Notes:
- This routine is the routine that you wish 'strncpy' was. In copying
- 'instr' to 'outstr', it stops when either the end of 'outstr' (the
- null character) is seen or the maximum length 'maxlen' is reached.
- Unlike 'strncpy', it does not add enough nulls to 'outstr' after
- copying 'instr' in order to move precisely 'maxlen' characters.
- Thus, this routine may be used anywhere 'strcpy' is used, without any
- performance cost related to large values of 'maxlen'.
-
- If there is insufficient space in the destination, the destination is
- still null-terminated, to avoid potential failures in routines that neglect
- to check the error code return from this routine.
-
- Module:
- Utility
- @*/
-int MPIU_Strncpy( char *dest, const char *src, size_t n )
-{
- char * restrict d_ptr = dest;
- const char * restrict s_ptr = src;
- register int i;
-
- if (n == 0) return 0;
-
- i = (int)n;
- while (*s_ptr && i-- > 0) {
- *d_ptr++ = *s_ptr++;
- }
-
- if (i > 0) {
- *d_ptr = 0;
- return 0;
- }
- else {
- /* Force a null at the end of the string (gives better safety
- in case the user fails to check the error code) */
- dest[n-1] = 0;
- /* We may want to force an error message here, at least in the
- debugging version */
- /*printf( "failure in copying %s with length %d\n", src, n ); */
- return 1;
- }
-}
-
-/* Append src to dest, but only allow dest to contain n characters (including
- any null, which is always added to the end of the line */
-/*@ MPIU_Strnapp - Append to a string with a maximum length
-
-Input Parameters:
-+ instr - String to copy
-- maxlen - Maximum total length of 'outstr'
-
-Output Parameters:
-. outstr - String to copy into
-
- Notes:
- This routine is similar to 'strncat' except that the 'maxlen' argument
- is the maximum total length of 'outstr', rather than the maximum
- number of characters to move from 'instr'. Thus, this routine is
- easier to use when the declared size of 'instr' is known.
-
- Module:
- Utility
- @*/
-int MPIU_Strnapp( char *dest, const char *src, size_t n )
-{
- char * restrict d_ptr = dest;
- const char * restrict s_ptr = src;
- register int i;
-
- /* Get to the end of dest */
- i = (int)n;
- while (i-- > 0 && *d_ptr) d_ptr++;
- if (i <= 0) return 1;
-
- /* Append. d_ptr points at first null and i is remaining space. */
- while (*s_ptr && i-- > 0) {
- *d_ptr++ = *s_ptr++;
- }
-
- /* We allow i >= (not just >) here because the first while decrements
- i by one more than there are characters, leaving room for the null */
- if (i >= 0) {
- *d_ptr = 0;
- return 0;
- }
- else {
- /* Force the null at the end */
- *--d_ptr = 0;
-
- /* We may want to force an error message here, at least in the
- debugging version */
- return 1;
- }
-}
-
diff --git a/src/pm/util/simple_pmiutil2.c b/src/pm/util/simple_pmiutil2.c
index fcda7e9..c6467fe 100644
--- a/src/pm/util/simple_pmiutil2.c
+++ b/src/pm/util/simple_pmiutil2.c
@@ -54,7 +54,7 @@ void PMIU_Set_rank( int PMI_rank )
}
void PMIU_SetServer( void )
{
- MPIU_Strncpy( PMIU_print_id, "server", PMIU_IDSIZE );
+ MPL_strncpy( PMIU_print_id, "server", PMIU_IDSIZE );
}
/* Note that vfprintf is part of C89 */
@@ -243,14 +243,14 @@ int PMIU_parse_keyvals( char *st )
/* Null terminate the key */
*p = 0;
/* store key */
- MPIU_Strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].key, keystart,
+ MPL_strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].key, keystart,
MAXKEYLEN );
valstart = ++p; /* start of value */
while ( *p != ' ' && *p != '\n' && *p != '\0' )
p++;
/* store value */
- MPIU_Strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].value, valstart,
+ MPL_strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].value, valstart,
MAXVALLEN );
offset = p - valstart;
/* When compiled with -fPIC, the pgcc compiler generates incorrect
@@ -278,9 +278,9 @@ char *PMIU_getval( const char *keystr, char *valstr, int vallen )
for (i = 0; i < PMIU_keyval_tab_idx; i++) {
if ( strcmp( keystr, PMIU_keyval_tab[i].key ) == 0 ) {
- rc = MPIU_Strncpy( valstr, PMIU_keyval_tab[i].value, vallen );
+ rc = MPL_strncpy( valstr, PMIU_keyval_tab[i].value, vallen );
if (rc != 0) {
- PMIU_printf( 1, "MPIU_Strncpy failed in PMIU_getval\n" );
+ PMIU_printf( 1, "MPL_strncpy failed in PMIU_getval\n" );
return NULL;
}
return valstr;
@@ -296,7 +296,7 @@ void PMIU_chgval( const char *keystr, char *valstr )
for ( i = 0; i < PMIU_keyval_tab_idx; i++ ) {
if ( strcmp( keystr, PMIU_keyval_tab[i].key ) == 0 ) {
- MPIU_Strncpy( PMIU_keyval_tab[i].value, valstr, MAXVALLEN - 1 );
+ MPL_strncpy( PMIU_keyval_tab[i].value, valstr, MAXVALLEN - 1 );
PMIU_keyval_tab[i].value[MAXVALLEN - 1] = '\0';
}
}
diff --git a/src/pm/util/simple_pmiutil2.h b/src/pm/util/simple_pmiutil2.h
index ed0b741..f8f877c 100644
--- a/src/pm/util/simple_pmiutil2.h
+++ b/src/pm/util/simple_pmiutil2.h
@@ -8,7 +8,7 @@
#define PMIU_MAXLINE 1024
#define PMIU_IDSIZE 32
-/* we don't have access to MPIU_Assert and friends here in the PMI code */
+/* we don't have access to MPIR_Assert and friends here in the PMI code */
#if defined(HAVE_ASSERT_H)
# include <assert.h>
# define PMIU_Assert(expr) assert(expr)
diff --git a/src/pm/util/subconfigure.m4 b/src/pm/util/subconfigure.m4
index f3032ef..16b308f 100644
--- a/src/pm/util/subconfigure.m4
+++ b/src/pm/util/subconfigure.m4
@@ -124,8 +124,6 @@ AC_CHECK_FUNCS(strsignal)
if test "$ac_cv_func_strsignal" = "yes" ; then
PAC_FUNC_NEEDS_DECL([#include <string.h>],strsignal)
fi
-AC_CHECK_FUNCS(snprintf)
-AC_CHECK_FUNCS(strdup)
dnl
dnl Check for signal handlers
AC_CHECK_FUNCS(sigaction signal sigset)
@@ -170,14 +168,6 @@ dnl
# change the compilers behavior, such as the _POSIX_SOURCE test above
# FIXME: need to include the test, at least for any file that
# might set _POSIX_SOURCE
-if test "$ac_cv_func_snprintf" = "yes" ; then
- PAC_FUNC_NEEDS_DECL([#include <stdio.h>],snprintf)
-fi
-if test "$ac_cv_func_strdup" = "yes" ; then
- # Do we need to declare strdup?
- PAC_FUNC_NEEDS_DECL([#include <string.h>],strdup)
-fi
-
# putenv() sets environment variable
AC_HAVE_FUNCS(putenv)
if test "$ac_cv_func_putenv" = "yes" ; then
@@ -255,6 +245,7 @@ if test "$ac_cv_func_thread_policy_set" = yes ; then
fi
AC_CHECK_HEADERS([string.h sys/time.h time.h stdlib.h sys/socket.h wait.h errno.h])
+AC_CHECK_FUNCS(time)
# Check for socklen_t .
# (note the conditional inclusion of sys/socket.h)
AC_CACHE_CHECK([whether socklen_t is defined (in sys/socket.h if present)],
diff --git a/src/pmi/pmi2/Makefile.mk b/src/pmi/pmi2/Makefile.mk
index fd3d7f4..460f67e 100644
--- a/src/pmi/pmi2/Makefile.mk
+++ b/src/pmi/pmi2/Makefile.mk
@@ -5,5 +5,4 @@
## See COPYRIGHT in top-level directory.
##
-include $(top_srcdir)/src/pmi/pmi2/poe/Makefile.mk
include $(top_srcdir)/src/pmi/pmi2/simple/Makefile.mk
diff --git a/src/pmi/pmi2/poe/.state-cache b/src/pmi/pmi2/poe/.state-cache
deleted file mode 100644
index c3de82a..0000000
--- a/src/pmi/pmi2/poe/.state-cache
+++ /dev/null
@@ -1,7 +0,0 @@
-<dir>
-<file name="poe2pmi.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="poe2pmi.c">
-</fileinfo>
-</data>
diff --git a/src/pmi/pmi2/poe/Makefile.mk b/src/pmi/pmi2/poe/Makefile.mk
deleted file mode 100644
index 26707a9..0000000
--- a/src/pmi/pmi2/poe/Makefile.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-if BUILD_PMI_PMI2_POE
-
-mpi_core_sources += \
- src/pmi/pmi2/poe/poe2pmi.c
-
-AM_CPPFLAGS += -I$(top_srcdir)/src/pmi/pmi2/poe
-
-endif BUILD_PMI_PMI2_POE
diff --git a/src/pmi/pmi2/poe/poe2pmi.c b/src/pmi/pmi2/poe/poe2pmi.c
deleted file mode 100644
index 7b01091..0000000
--- a/src/pmi/pmi2/poe/poe2pmi.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; -*- */
-/*
- * (C) 2007 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#include <dlfcn.h>
-#include "mpichconf.h"
-#include "pmi2.h"
-#include "mpiimpl.h"
-
-#include <stdio.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#if defined(HAVE_SYS_SOCKET_H)
-#include <sys/socket.h>
-#endif
-
-#ifdef USE_PMI_PORT
-#ifndef MAXHOSTNAME
-#define MAXHOSTNAME 256
-#endif
-#endif
-
-#define PMII_EXIT_CODE -1
-
-#define PMI_VERSION 2
-#define PMI_SUBVERSION 0
-
-#define MAX_INT_STR_LEN 11 /* number of digits in MAX_UINT + 1 */
-
-struct worldExitReq {
- pami_work_t work;
- int world_id;
-};
-
-int (*mp_world_exiting_handler)(int) = NULL;
-
-typedef enum { PMI2_UNINITIALIZED = 0, NORMAL_INIT_WITH_PM = 1 } PMI2State;
-static PMI2State PMI2_initialized = PMI2_UNINITIALIZED;
-
-static int PMI2_debug = 0;
-static int PMI2_fd = -1;
-static int PMI2_size = 1;
-static int PMI2_rank = 0;
-
-static int PMI2_debug_init = 0; /* Set this to true to debug the init */
-
-int PMI2_pmiverbose = 0; /* Set this to true to print PMI debugging info */
-
-extern MPIDI_PG_t *pg_world;
-extern int world_rank;
-extern int world_size;
-
-#ifdef MPICH_IS_THREADED
-static MPID_Thread_mutex_t mutex;
-static int blocked = FALSE;
-static MPID_Thread_cond_t cond;
-#endif
-
-extern int mpidi_finalized;
-int _mpi_world_exiting_handler(int);
-
-void *poeptr = NULL;
-
-/* ------------------------------------------------------------------------- */
-/* PMI API Routines */
-/* ------------------------------------------------------------------------- */
-int PMI2_Init(int *spawned, int *size, int *rank, int *appnum)
-{
- int pmi2_errno = PMI2_SUCCESS;
- char *p;
- char *jobid;
- char *pmiid;
- int ret;
-
- int (*pmi2_init)(int*, int*, int *, int*);
- char *poelibname;
- int poeflags;
-#ifndef __AIX__
- poelibname = "libpoe.so";
- poeflags = RTLD_NOW|RTLD_GLOBAL;
-#else
- poeflags = RTLD_NOW|RTLD_GLOBAL|RTLD_MEMBER;
- if(sizeof(void *) == 8)
- poelibname = "libpoe_r.a(poe64_r.o)";
- else
- poelibname = "libpoe_r.a(poe_r.o)";
-#endif
- poeptr = dlopen(poelibname, poeflags);
- if (poeptr == NULL) {
- TRACE_ERR("failed to open %s error=%s\n", poelibname, dlerror());
- }
-
- pmi2_init = (int (*)())dlsym(poeptr, "PMI2_Init");
- if (pmi2_init == NULL) {
- TRACE_ERR("failed to dlsym PMI2_Init\n");
- }
-
- ret = (*pmi2_init)(spawned, size, rank, appnum);
- /*mp_world_exiting_handler = &(_mpi_world_exiting_handler); */
- return ret;
-}
-
-int PMI2_Finalize(void)
-{
- int pmi2_errno = PMI2_SUCCESS;
- int rc;
- const char *errmsg;
-
- int (*pmi2_finalize)(void);
-
- pmi2_finalize = (int (*)())dlsym(poeptr, "PMI2_Finalize");
- if (pmi2_finalize == NULL) {
- TRACE_ERR("failed to dlsym PMI2_Finalize\n");
- }
-
- return (*pmi2_finalize)();
-
-}
-
-int PMI2_Initialized(void)
-{
- /* Turn this into a logical value (1 or 0) . This allows us
- to use PMI2_initialized to distinguish between initialized with
- an PMI service (e.g., via mpiexec) and the singleton init,
- which has no PMI service */
- return PMI2_initialized != 0;
-}
-
-int PMI2_Abort( int flag, const char msg[] )
-{
- int (*pmi2_abort)(int, const char*);
-
- pmi2_abort = (int (*)())dlsym(poeptr, "PMI2_Abort");
- if (pmi2_abort == NULL) {
- TRACE_ERR("failed to dlsym pmi2_abort\n");
- }
-
- return (*pmi2_abort)(flag, msg);
-}
-
-int PMI2_Job_Spawn(int count, const char * cmds[],
- int argcs[], const char ** argvs[],
- const int maxprocs[],
- const int info_keyval_sizes[],
- const struct MPID_Info *info_keyval_vectors[],
- int preput_keyval_size,
- const struct MPID_Info *preput_keyval_vector[],
- char jobId[], int jobIdSize,
- int errors[])
-{
- int i,rc,spawncnt,total_num_processes,num_errcodes_found;
- int found;
- const char *jid;
- int jidlen;
- char *lead, *lag;
- int spawn_rc;
- const char *errmsg = NULL;
- int pmi2_errno = 0;
-
- int (*pmi2_job_spawn)(int , const char * [], int [], const char ** [],const int [],const int [],const struct MPID_Info *[],int ,const struct MPID_Info *[],char jobId[],int ,int []);
-
- pmi2_job_spawn = (int (*)())dlsym(poeptr, "PMI2_Job_Spawn");
- if (pmi2_job_spawn == NULL) {
- TRACE_ERR("failed to dlsym pmi2_job_spawn\n");
- }
-
- return (*pmi2_job_spawn)(count, cmds, argcs, argvs, maxprocs,
- info_keyval_sizes, info_keyval_vectors,
- preput_keyval_size, preput_keyval_vector,
- jobId, jobIdSize, errors);
-
-}
-
-int PMI2_Job_GetId(char jobid[], int jobid_size)
-{
- int pmi2_errno = PMI2_SUCCESS;
- int found;
- const char *jid;
- int jidlen;
- int rc;
- const char *errmsg;
-
- int (*pmi2_job_getid)(char*, int);
-
- pmi2_job_getid = (int (*)())dlsym(poeptr, "PMI2_Job_GetId");
- if (pmi2_job_getid == NULL) {
- TRACE_ERR("failed to dlsym pmi2_job_getid\n");
- }
-
- return (*pmi2_job_getid)(jobid, jobid_size);
-}
-
-
-int PMI2_KVS_Put(const char key[], const char value[])
-{
- int pmi2_errno = PMI2_SUCCESS;
- int rc;
- const char *errmsg;
-
- int (*pmi2_kvs_put)(const char*, const char*);
-
- pmi2_kvs_put = (int (*)())dlsym(poeptr, "PMI2_KVS_Put");
- if (pmi2_kvs_put == NULL) {
- TRACE_ERR("failed to dlsym pmi2_kvs_put\n");
- }
-
- return (*pmi2_kvs_put)(key, value);
-}
-
-int PMI2_KVS_Fence(void)
-{
- int pmi2_errno = PMI2_SUCCESS;
- int rc;
- const char *errmsg;
-
- int (*pmi2_kvs_fence)(void);
-
- pmi2_kvs_fence = (int (*)())dlsym(poeptr, "PMI2_KVS_Fence");
- if (pmi2_kvs_fence == NULL) {
- TRACE_ERR("failed to dlsym pmi2_kvs_fence\n");
- }
-
- return (*pmi2_kvs_fence)();
-}
-
-int PMI2_KVS_Get(const char *jobid, int src_pmi_id, const char key[], char value [], int maxValue, int *valLen)
-{
- int pmi2_errno = PMI2_SUCCESS;
- int found, keyfound;
- const char *kvsvalue;
- int kvsvallen;
- int ret;
- int rc;
- char src_pmi_id_str[256];
- const char *errmsg;
-
- int (*pmi2_kvs_get)(const char*, int, const char *, char *, int, int*);
-
- pmi2_kvs_get = (int (*)())dlsym(poeptr, "PMI2_KVS_Get");
- if (pmi2_kvs_get == NULL) {
- TRACE_ERR("failed to dlsym pmi2_kvs_get\n");
- }
-
- return (*pmi2_kvs_get)(jobid, src_pmi_id, key, value, maxValue, valLen);
-}
-
-
-int PMI2_Info_GetJobAttr(const char name[], char value[], int valuelen, int *flag)
-{
- int pmi2_errno = PMI2_SUCCESS;
- int found;
- const char *kvsvalue;
- int kvsvallen;
- int rc;
- const char *errmsg;
-
- int (*pmi2_info_getjobattr)(const char*, char *, int, int*);
-
- pmi2_info_getjobattr = (int (*)())dlsym(poeptr, "PMI2_Info_GetJobAttr");
- if (pmi2_info_getjobattr == NULL) {
- TRACE_ERR("failed to dlsym pmi2_info_getjobattr\n");
- }
-
- return (*pmi2_info_getjobattr)(name, value, valuelen, flag);
-}
-
-
-/**
- * This is the mpi level of callback that get invoked when a task get notified
- * of a world's exiting
- */
-int _mpi_world_exiting_handler(int world_id)
-{
- /* check the reference count associated with that remote world
- if the reference count is zero, the task will call LAPI_Purge_totask on
- all tasks in that world,reset MPCI. It would also remove the world
- structure corresponding to that world ID
- if the reference count is not zero, it should call STOPALL
- */
- int rc,ref_count = -1;
- int *taskid_list = NULL;
- int i;
- int my_state=FALSE,reduce_state=FALSE;
- char world_id_str[32];
- int mpi_errno = MPI_SUCCESS;
- pami_endpoint_t dest;
-/* struct worldExitReq *req = (struct worldExitReq *)cookie; */
- MPID_Comm *comm = MPIR_Process.comm_world;
-
- MPID_THREAD_CS_ENTER(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- ref_count = MPIDI_get_refcnt_of_world(world_id);
- TRACE_ERR("_mpi_world_exiting_handler: invoked for world %d exiting ref_count=%d my comm_word_size=%d\n", world_id, ref_count, world_size);
- if(ref_count == 0) {
- taskid_list = MPIDI_get_taskids_in_world_id(world_id);
- if(taskid_list != NULL) {
- for(i=0;taskid_list[i]!=-1;i++) {
- PAMI_Endpoint_create(MPIDI_Client, taskid_list[i], 0, &dest);
- MPIDI_OpState_reset(taskid_list[i]);
- MPIDI_IpState_reset(taskid_list[i]);
- TRACE_ERR("PAMI_Purge on taskid_list[%d]=%d\n", i,taskid_list[i]);
- PAMI_Purge(MPIDI_Context[0], &dest, 1);
- }
- MPIDI_delete_conn_record(world_id);
- }
- rc = -1;
- }
- my_state = TRUE;
-
- rc = _mpi_reduce_for_dyntask(&my_state, &reduce_state);
- if(rc) return rc;
-
- TRACE_ERR("_mpi_world_exiting_handler: Out of _mpi_reduce_for_dyntask for exiting world %d reduce_state=%d\n",world_id, reduce_state);
-
- MPID_THREAD_CS_EXIT(GLOBAL, MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX);
- if(comm->rank == 0) {
- MPL_snprintf(world_id_str, sizeof(world_id_str), "%d", world_id);
- PMI2_Abort(0, world_id_str);
- if((reduce_state != world_size)) {
- TRACE_ERR("root is exiting with error\n");
- exit(-1);
- }
- TRACE_ERR("_mpi_world_exiting_handler: Root finished sending SSM_WORLD_EXITING to POE for exiting world %d\n",world_id);
- }
-
- if(ref_count != 0) {
- TRACE_ERR("STOPALL is sent by task %d\n", PAMIX_Client_query(MPIDI_Client, PAMI_CLIENT_TASK_ID ).value.intval);
- PMI2_Abort(1, "STOPALL should be sent");
- rc = -2;
- }
-
-/* if(cookie) MPIU_Free(cookie);*/
- return PAMI_SUCCESS;
-}
-
-
-int getchildren(int iam, double alpha,int gsize, int *children,
- int *blocks, int *numchildren, int *parent)
-{
- int fakeme=iam,i;
- int p=gsize,pbig,bflag=0,blocks_from_children=0;
-
- *numchildren=0;
-
- if( blocks != NULL )
- bflag=1;
-
- while( p > 1 ) {
-
- pbig = MAX(1,MIN((int) (alpha*(double)p), p-1));
-
- if ( fakeme == 0 ) {
-
- (children)[*numchildren] = (iam+pbig+gsize)%gsize;
- if(bflag)
- (blocks)[*numchildren] = p -pbig;
-
- *numchildren +=1;
- }
- if ( fakeme == pbig ) {
- *parent = (iam-pbig+gsize)%gsize;
- if(bflag)
- blocks_from_children = p - pbig;
- }
- if( pbig > fakeme) {
- p = pbig;
- } else {
- p -=pbig;
- fakeme -=pbig;
- }
- }
- if(bflag)
- (blocks)[*numchildren] = blocks_from_children;
-}
-
-int _mpi_reduce_for_dyntask(int *sendbuf, int *recvbuf)
-{
- int *children, gid, child_rank, parent_rank, rc;
- int numchildren, parent=0, i, result=0,tag, remaining_child_count;
- MPID_Comm *comm_ptr;
- int mpi_errno;
- MPIR_Errflag_t errflag = MPIR_ERR_NONE;
-
- int TASKS= world_size;
- children = MPIU_Malloc(TASKS*sizeof(int));
-
- comm_ptr = MPIR_Process.comm_world;
-
- if(pg_world && pg_world->id)
- tag = (-1) * (atoi(pg_world->id));
- else {
- TRACE_ERR("pg_world hasn't been created, should skip the rest of the handler and return\n");
- return -1;
- }
-
- result = *sendbuf;
-
- getchildren(world_rank, 0.5, TASKS, children, NULL, &numchildren, &parent);
-
- TRACE_ERR("_mpi_reduce_for_dyntask - numchildren=%d parent=%d world_rank=%d\n", numchildren, parent, world_rank);
- for(i=numchildren-1;i>=0;i--)
- {
- remaining_child_count = i;
- child_rank = (children[i])% TASKS;
- TRACE_ERR("_mpi_reduce_for_dyntask - recv from child_rank%d child_taskid=%d\n", child_rank, pg_world->vct[child_rank].taskid);
- mpi_errno = MPIC_Recv(recvbuf, sizeof(int),MPI_BYTE, child_rank, tag, comm_ptr, MPI_STATUS_IGNORE, &errflag);
- TRACE_ERR("_mpi_reduce_for_dyntask - recv DONE from child_rank%d child_taskid=%d\n", child_rank, pg_world->vct[child_rank].taskid);
-
- if(world_rank != parent)
- {
- if(remaining_child_count == 0) {
- parent_rank = (parent) % TASKS;
- result += *recvbuf;
- TRACE_ERR("_mpi_reduce_for_dyntask - send to parent_rank=%d parent taskid=%d \n", parent_rank, pg_world->vct[parent_rank].taskid);
- MPIC_Send(&result, sizeof(int), MPI_BYTE, parent_rank, tag, comm_ptr, &errflag);
- }
- else
- {
- result += *recvbuf;
- }
- }
- if(world_rank == 0)
- {
- result += *recvbuf;
- }
- }
-
- if(world_rank != parent && numchildren == 0) {
- parent_rank = (parent) % TASKS;
- TRACE_ERR("_mpi_reduce_for_dyntask - send to parent_rank=%d parent_task_id=%d\n", parent_rank, pg_world->vct[parent_rank].taskid);
- MPIC_Send(sendbuf, sizeof(int), MPI_BYTE, parent_rank, tag, comm_ptr, &errflag);
- }
-
- if(world_rank == 0) {
- *recvbuf = result;
- }
- MPIU_Free(children);
- return 0;
-}
diff --git a/src/pmi/pmi2/poe/subconfigure.m4 b/src/pmi/pmi2/poe/subconfigure.m4
deleted file mode 100644
index 5e2ce7d..0000000
--- a/src/pmi/pmi2/poe/subconfigure.m4
+++ /dev/null
@@ -1,24 +0,0 @@
-[#] start of __file__
-dnl MPICH_SUBCFG_AFTER=src/pmi
-
-AC_DEFUN([PAC_SUBCFG_PREREQ_]PAC_SUBCFG_AUTO_SUFFIX,[
-])
-
-AC_DEFUN([PAC_SUBCFG_BODY_]PAC_SUBCFG_AUTO_SUFFIX,[
-
-AM_CONDITIONAL([BUILD_PMI_PMI2_POE],[test "x$pmi_name" = "xpmi2/poe"])
-
-AM_COND_IF([BUILD_PMI_PMI2_POE],[
-if test "$enable_pmiport" != "no" ; then
- enable_pmiport=yes
-fi
-
-dnl causes USE_PMI2_API to be AC_DEFINE'ed by the top-level configure.ac
-USE_PMI2_API=yes
-
-PAC_C_GNU_ATTRIBUTE
-])dnl end COND_IF
-
-])dnl end BODY macro
-
-[#] end of __file__
diff --git a/src/pmi/pmi2/simple/.state-cache b/src/pmi/pmi2/simple/.state-cache
index 8320cc4..1b15a4f 100644
--- a/src/pmi/pmi2/simple/.state-cache
+++ b/src/pmi/pmi2/simple/.state-cache
@@ -1,19 +1,19 @@
<dir>
-<file name="simple2pmi.h" info="1447123141"/>
-<file name="simple2pmi.c" info="1447123141"/>
-<file name="simple_pmiutil.h" info="1447123141"/>
-<file name="simple_pmiutil.c" info="1447123141"/>
-<file name="pmi2compat.h" info="1447123141"/>
+<file name="pmi2compat.h" info="1478973152"/>
+<file name="simple_pmiutil.h" info="1478973152"/>
+<file name="simple2pmi.c" info="1478973152"/>
+<file name="simple_pmiutil.c" info="1478973152"/>
+<file name="simple2pmi.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="simple2pmi.h">
-</fileinfo>
-<fileinfo name="simple2pmi.c">
+<fileinfo name="pmi2compat.h">
</fileinfo>
<fileinfo name="simple_pmiutil.h">
</fileinfo>
+<fileinfo name="simple2pmi.c">
+</fileinfo>
<fileinfo name="simple_pmiutil.c">
</fileinfo>
-<fileinfo name="pmi2compat.h">
+<fileinfo name="simple2pmi.h">
</fileinfo>
</data>
diff --git a/src/pmi/pmi2/simple/pmi2compat.h b/src/pmi/pmi2/simple/pmi2compat.h
index 6a71393..c834520 100644
--- a/src/pmi/pmi2/simple/pmi2compat.h
+++ b/src/pmi/pmi2/simple/pmi2compat.h
@@ -6,14 +6,12 @@
#include "mpiimpl.h"
-#define PMI2U_Malloc MPIU_Malloc
-#define PMI2U_Free MPIU_Free
-#define PMI2U_Strdup MPIU_Strdup
-#define PMI2U_Snprintf MPL_snprintf
-#define PMI2U_Strncpy MPIU_Strncpy
-#define PMI2U_Strnapp MPIU_Strnapp
-#define PMI2U_Assert MPIU_Assert
+#define PMI2U_Malloc MPL_malloc
+#define PMI2U_Free MPL_free
+#define PMI2U_Strdup MPL_strdup
+#define PMI2U_Strnapp MPL_strnapp
+#define PMI2U_Assert MPIR_Assert
#define PMI2U_Exit MPL_exit
-#define PMI2U_Info MPID_Info
-#define PMI2U_Memcpy MPIU_Memcpy
+#define PMI2U_Info MPIR_Info
+#define PMI2U_Memcpy MPIR_Memcpy
diff --git a/src/pmi/pmi2/simple/simple2pmi.c b/src/pmi/pmi2/simple/simple2pmi.c
index 7ef3615..129ce33 100644
--- a/src/pmi/pmi2/simple/simple2pmi.c
+++ b/src/pmi/pmi2/simple/simple2pmi.c
@@ -90,7 +90,7 @@ static void init_kv_strdup_int(PMI2_Keyvalpair *kv, const char key[], int val)
char tmpbuf[32] = {0};
int rc = PMI2_SUCCESS;
- rc = PMI2U_Snprintf(tmpbuf, sizeof(tmpbuf), "%d", val);
+ rc = MPL_snprintf(tmpbuf, sizeof(tmpbuf), "%d", val);
PMI2U_Assert(rc >= 0);
init_kv_strdup(kv, key, tmpbuf);
}
@@ -102,7 +102,7 @@ static void init_kv_strdup_intsuffix(PMI2_Keyvalpair *kv, const char key_prefix[
char tmpbuf[256/*XXX HACK*/] = {0};
int rc = PMI2_SUCCESS;
- rc = PMI2U_Snprintf(tmpbuf, sizeof(tmpbuf), "%s%d", key_prefix, suffix);
+ rc = MPL_snprintf(tmpbuf, sizeof(tmpbuf), "%s%d", key_prefix, suffix);
PMI2U_Assert(rc >= 0);
init_kv_strdup(kv, tmpbuf, val);
}
@@ -230,7 +230,7 @@ int PMI2_Init(int *spawned, int *size, int *rank, int *appnum)
}
/* do initial PMI1 init */
- ret = PMI2U_Snprintf( buf, PMI2U_MAXLINE, "cmd=init pmi_version=%d pmi_subversion=%d\n", PMI_VERSION, PMI_SUBVERSION );
+ ret = MPL_snprintf( buf, PMI2U_MAXLINE, "cmd=init pmi_version=%d pmi_subversion=%d\n", PMI_VERSION, PMI_SUBVERSION );
PMI2U_ERR_CHKANDJUMP1(ret < 0, pmi2_errno, PMI2_ERR_OTHER, "**intern", "**intern %s", "failed to generate init line");
ret = PMI2U_writeline(PMI2_fd, buf);
@@ -288,11 +288,11 @@ int PMI2_Init(int *spawned, int *size, int *rank, int *appnum)
}
#ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
isThreaded = 1;
}
- MPIU_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
init_kv_str(&pairs[npairs], THREADED_KEY, isThreaded ? "TRUE" : "FALSE");
++npairs;
@@ -404,9 +404,9 @@ int PMI2_Job_Spawn(int count, const char * cmds[],
int argcs[], const char ** argvs[],
const int maxprocs[],
const int info_keyval_sizes[],
- const struct MPID_Info *info_keyval_vectors[],
+ const struct MPIR_Info *info_keyval_vectors[],
int preput_keyval_size,
- const struct MPID_Info *preput_keyval_vector[],
+ const struct MPIR_Info *preput_keyval_vector[],
char jobId[], int jobIdSize,
int errors[])
{
@@ -682,7 +682,7 @@ int PMI2_KVS_Get(const char *jobid, int src_pmi_id, const char key[], char value
char src_pmi_id_str[256];
const char *errmsg;
- PMI2U_Snprintf(src_pmi_id_str, sizeof(src_pmi_id_str), "%d", src_pmi_id);
+ MPL_snprintf(src_pmi_id_str, sizeof(src_pmi_id_str), "%d", src_pmi_id);
pmi2_errno = PMIi_InitIfSingleton();
if (pmi2_errno) PMI2U_ERR_POP(pmi2_errno);
@@ -1232,7 +1232,7 @@ int PMIi_ReadCommand( int fd, PMI2_Command *cmd )
memset(cmd_len_str, 0, sizeof(cmd_len_str));
#ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
MPID_Thread_mutex_lock(&mutex, &err);
@@ -1247,7 +1247,7 @@ int PMIi_ReadCommand( int fd, PMI2_Command *cmd )
blocked = TRUE;
MPID_Thread_mutex_unlock(&mutex, &err);
}
- MPIU_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
do {
@@ -1364,14 +1364,14 @@ int PMIi_ReadCommand( int fd, PMI2_Command *cmd )
} while (!cmd->complete);
#ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
MPID_Thread_mutex_lock(&mutex, &err);
blocked = FALSE;
MPID_Thread_cond_broadcast(&cond,&err);
MPID_Thread_mutex_unlock(&mutex, &err);
}
- MPIU_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
@@ -1436,26 +1436,26 @@ int PMIi_WriteSimpleCommand( int fd, PMI2_Command *resp, const char cmd[], PMI2_
PMI2U_ERR_CHKANDJUMP(strlen(cmd) > PMI2_MAX_VALLEN, pmi2_errno, PMI2_ERR_OTHER, "**cmd_too_long");
- ret = PMI2U_Snprintf(c, remaining_len, "cmd=%s;", cmd);
+ ret = MPL_snprintf(c, remaining_len, "cmd=%s;", cmd);
PMI2U_ERR_CHKANDJUMP1(ret >= remaining_len, pmi2_errno, PMI2_ERR_OTHER, "**intern", "**intern %s", "Ran out of room for command");
c += ret;
remaining_len -= ret;
#ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
if (resp) {
- ret = PMI2U_Snprintf(c, remaining_len, "thrid=%p;", resp);
+ ret = MPL_snprintf(c, remaining_len, "thrid=%p;", resp);
PMI2U_ERR_CHKANDJUMP1(ret >= remaining_len, pmi2_errno, PMI2_ERR_OTHER, "**intern", "**intern %s", "Ran out of room for command");
c += ret;
remaining_len -= ret;
}
- MPIU_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
for (pair_index = 0; pair_index < npairs; ++pair_index) {
/* write key= */
PMI2U_ERR_CHKANDJUMP(strlen(pairs[pair_index]->key) > PMI2_MAX_KEYLEN, pmi2_errno, PMI2_ERR_OTHER, "**key_too_long");
- ret = PMI2U_Snprintf(c, remaining_len, "%s=", pairs[pair_index]->key);
+ ret = MPL_snprintf(c, remaining_len, "%s=", pairs[pair_index]->key);
PMI2U_ERR_CHKANDJUMP1(ret >= remaining_len, pmi2_errno, PMI2_ERR_OTHER, "**intern", "**intern %s", "Ran out of room for command");
c += ret;
remaining_len -= ret;
@@ -1481,7 +1481,7 @@ int PMIi_WriteSimpleCommand( int fd, PMI2_Command *resp, const char cmd[], PMI2_
/* prepend the buffer length stripping off the trailing '\0' */
cmdlen = PMII_MAX_COMMAND_LEN - remaining_len;
- ret = PMI2U_Snprintf(cmdlenbuf, sizeof(cmdlenbuf), "%d", cmdlen);
+ ret = MPL_snprintf(cmdlenbuf, sizeof(cmdlenbuf), "%d", cmdlen);
PMI2U_ERR_CHKANDJUMP1(ret >= PMII_COMMANDLEN_SIZE, pmi2_errno, PMI2_ERR_OTHER, "**intern", "**intern %s", "Command length won't fit in length buffer");
PMI2U_Memcpy(cmdbuf, cmdlenbuf, ret);
@@ -1491,7 +1491,7 @@ int PMIi_WriteSimpleCommand( int fd, PMI2_Command *resp, const char cmd[], PMI2_
#ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
MPID_Thread_mutex_lock(&mutex, &err);
@@ -1501,7 +1501,7 @@ int PMIi_WriteSimpleCommand( int fd, PMI2_Command *resp, const char cmd[], PMI2_
blocked = TRUE;
MPID_Thread_mutex_unlock(&mutex, &err);
}
- MPIU_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
if (PMI2_debug)
@@ -1518,14 +1518,14 @@ int PMIi_WriteSimpleCommand( int fd, PMI2_Command *resp, const char cmd[], PMI2_
offset += nbytes;
} while (offset < cmdlen + PMII_COMMANDLEN_SIZE);
#ifdef MPICH_IS_THREADED
- MPIU_THREAD_CHECK_BEGIN;
+ MPIR_THREAD_CHECK_BEGIN;
{
MPID_Thread_mutex_lock(&mutex, &err);
blocked = FALSE;
MPID_Thread_cond_broadcast(&cond,&err);
MPID_Thread_mutex_unlock(&mutex, &err);
}
- MPIU_THREAD_CHECK_END;
+ MPIR_THREAD_CHECK_END;
#endif
fn_exit:
diff --git a/src/pmi/pmi2/simple/simple_pmiutil.c b/src/pmi/pmi2/simple/simple_pmiutil.c
index 65ca889..9bbdb15 100644
--- a/src/pmi/pmi2/simple/simple_pmiutil.c
+++ b/src/pmi/pmi2/simple/simple_pmiutil.c
@@ -28,6 +28,8 @@
#include <unistd.h>
#endif
#include <errno.h>
+
+#include "pmi.h"
#include "simple_pmiutil.h"
#define MAXVALLEN 1024
@@ -50,7 +52,7 @@ static char PMI2U_print_id[PMI2U_IDSIZE] = "unset";
void PMI2U_Set_rank( int PMI_rank )
{
- PMI2U_Snprintf( PMI2U_print_id, PMI2U_IDSIZE, "cli_%d", PMI_rank );
+ MPL_snprintf( PMI2U_print_id, PMI2U_IDSIZE, "cli_%d", PMI_rank );
}
void PMI2U_SetServer( void )
{
@@ -77,7 +79,7 @@ void PMI2U_printf( int print_flag, const char *fmt, ... )
char filename[1024];
p = getenv("PMI_ID");
if (p) {
- PMI2U_Snprintf( filename, sizeof(filename),
+ MPL_snprintf( filename, sizeof(filename),
"testclient-%s.out", p );
logfile = fopen( filename, "w" );
}
@@ -191,12 +193,12 @@ int PMI2U_writeline( int fd, char *buf )
if ( n < 0 ) {
PMI2U_printf( 1, "write_line error; fd=%d buf=:%s:\n", fd, buf );
perror("system msg for write_line failure ");
- return(-1);
+ return PMI_FAIL;
}
if ( n < size)
PMI2U_printf( 1, "write_line failed to write entire message\n" );
}
- return 0;
+ return PMI_SUCCESS;
}
/*
@@ -209,7 +211,7 @@ int PMI2U_parse_keyvals( char *st )
int offset;
if ( !st )
- return( -1 );
+ return PMI_FAIL;
PMI2U_keyval_tab_idx = 0;
p = st;
@@ -220,10 +222,10 @@ int PMI2U_parse_keyvals( char *st )
if ( *p == '=' ) {
PMI2U_printf( 1, "PMI2U_parse_keyvals: unexpected = at character %d in %s\n",
p - st, st );
- return( -1 );
+ return PMI_FAIL;
}
if ( *p == '\n' || *p == '\0' )
- return( 0 ); /* normal exit */
+ return PMI_SUCCESS; /* normal exit */
/* got normal character */
keystart = p; /* remember where key started */
while ( *p != ' ' && *p != '=' && *p != '\n' && *p != '\0' )
@@ -232,7 +234,7 @@ int PMI2U_parse_keyvals( char *st )
PMI2U_printf( 1,
"PMI2U_parse_keyvals: unexpected key delimiter at character %d in %s\n",
p - st, st );
- return( -1 );
+ return PMI_FAIL;
}
/* Null terminate the key */
*p = 0;
@@ -255,7 +257,7 @@ int PMI2U_parse_keyvals( char *st )
if ( *p == ' ' )
continue;
if ( *p == '\n' || *p == '\0' )
- return( 0 ); /* value has been set to empty */
+ return PMI_FAIL; /* value has been set to empty */
}
}
diff --git a/src/pmi/pmi2/subconfigure.m4 b/src/pmi/pmi2/subconfigure.m4
index d1dc441..c516051 100644
--- a/src/pmi/pmi2/subconfigure.m4
+++ b/src/pmi/pmi2/subconfigure.m4
@@ -16,7 +16,6 @@ fi
dnl causes USE_PMI2_API to be AC_DEFINE'ed by the top-level configure.ac
USE_PMI2_API=yes
-# common ARG_ENABLE, shared by "simple" and "poe"
AC_ARG_ENABLE(pmiport,
[--enable-pmiport - Allow PMI interface to use a host-port pair to contact
for PMI services],,enable_pmiport=default)
diff --git a/src/pmi/simple/.state-cache b/src/pmi/simple/.state-cache
index e95bbde..045eba1 100644
--- a/src/pmi/simple/.state-cache
+++ b/src/pmi/simple/.state-cache
@@ -1,13 +1,13 @@
<dir>
-<file name="simple_pmiutil.h" info="1447123141"/>
-<file name="simple_pmiutil.c" info="1447123141"/>
-<file name="simple_pmi.c" info="1447123141"/>
+<file name="simple_pmiutil.c" info="1478973152"/>
+<file name="simple_pmi.c" info="1478973152"/>
+<file name="simple_pmiutil.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="simple_pmiutil.h">
-</fileinfo>
<fileinfo name="simple_pmiutil.c">
</fileinfo>
<fileinfo name="simple_pmi.c">
</fileinfo>
+<fileinfo name="simple_pmiutil.h">
+</fileinfo>
</data>
diff --git a/src/pmi/simple/simple_pmi.c b/src/pmi/simple/simple_pmi.c
index 0172ae0..b506050 100644
--- a/src/pmi/simple/simple_pmi.c
+++ b/src/pmi/simple/simple_pmi.c
@@ -46,9 +46,8 @@
#endif
#include "mpl.h" /* Get ATTRIBUTE, some base functions */
-/* mpimem includes the definitions for MPL_snprintf, MPIU_Malloc, and
- MPIU_Free */
-#include "mpimem.h"
+/* mpimem includes the definitions for MPL_malloc and MPL_free */
+#include "mpir_mem.h"
/* Temporary debug definitions */
/* #define DBG_PRINTF(args) printf args ; fflush(stdout) */
@@ -149,7 +148,7 @@ int PMI_Init( int *spawned )
PMI_keylen_max = 256;
PMI_vallen_max = 256;
- return( 0 );
+ return PMI_SUCCESS;
}
/* If size, rank, and debug are not set from a communication port,
@@ -194,7 +193,7 @@ int PMI_Init( int *spawned )
PMIU_getval( "cmd", cmd, PMIU_MAXLINE );
if ( strncmp( cmd, "tv_ready", PMIU_MAXLINE ) != 0 ) {
PMIU_printf( 1, "expecting cmd=tv_ready, got %s\n", buf );
- return( PMI_FAIL );
+ return PMI_FAIL;
}
}
#endif
@@ -215,7 +214,7 @@ int PMI_Init( int *spawned )
if ( ! PMI_initialized )
PMI_initialized = NORMAL_INIT_WITH_PM;
- return( 0 );
+ return PMI_SUCCESS;
}
int PMI_Initialized( int *initialized )
@@ -234,7 +233,7 @@ int PMI_Get_size( int *size )
*size = PMI_size;
else
*size = 1;
- return( 0 );
+ return PMI_SUCCESS;
}
int PMI_Get_rank( int *rank )
@@ -243,7 +242,7 @@ int PMI_Get_rank( int *rank )
*rank = PMI_rank;
else
*rank = 0;
- return( 0 );
+ return PMI_SUCCESS;
}
/*
@@ -258,20 +257,20 @@ int PMI_Get_universe_size( int *size)
char size_c[PMIU_MAXLINE];
/* Connect to the PM if we haven't already */
- if (PMIi_InitIfSingleton() != 0) return -1;
+ if (PMIi_InitIfSingleton() != 0) return PMI_FAIL;
if ( PMI_initialized > SINGLETON_INIT_BUT_NO_PM) {
err = GetResponse( "cmd=get_universe_size\n", "universe_size", 0 );
if (err == PMI_SUCCESS) {
PMIU_getval( "size", size_c, PMIU_MAXLINE );
*size = atoi(size_c);
- return( PMI_SUCCESS );
+ return PMI_SUCCESS;
}
else return err;
}
else
*size = 1;
- return( PMI_SUCCESS );
+ return PMI_SUCCESS;
}
int PMI_Get_appnum( int *appnum )
@@ -284,7 +283,7 @@ int PMI_Get_appnum( int *appnum )
if (err == PMI_SUCCESS) {
PMIU_getval( "appnum", appnum_c, PMIU_MAXLINE );
*appnum = atoi(appnum_c);
- return( PMI_SUCCESS );
+ return PMI_SUCCESS;
}
else return err;
@@ -292,7 +291,7 @@ int PMI_Get_appnum( int *appnum )
else
*appnum = -1;
- return( PMI_SUCCESS );
+ return PMI_SUCCESS;
}
int PMI_Barrier( void )
@@ -331,7 +330,7 @@ int PMI_Abort(int exit_code, const char error_msg[])
GetResponse( buf, "", 0 );
/* the above command should not return */
- return -1;
+ return PMI_FAIL;
}
/************************************* Keymap functions **********************/
@@ -349,7 +348,7 @@ int PMI_KVS_Get_my_name( char kvsname[], int length )
/* FIXME: We need to support a distinct kvsname for each
process group */
MPL_snprintf( kvsname, length, "singinit_kvs_%d_0", (int)getpid() );
- return 0;
+ return PMI_SUCCESS;
}
err = GetResponse( "cmd=get_my_kvsname\n", "my_kvsname", 0 );
if (err == PMI_SUCCESS) {
@@ -390,11 +389,11 @@ int PMI_KVS_Put( const char kvsname[], const char key[], const char value[] )
/* This is a special hack to support singleton initialization */
if (PMI_initialized == SINGLETON_INIT_BUT_NO_PM) {
- rc = MPIU_Strncpy(cached_singinit_key,key,PMI_keylen_max);
+ rc = MPL_strncpy(cached_singinit_key,key,PMI_keylen_max);
if (rc != 0) return PMI_FAIL;
- rc = MPIU_Strncpy(cached_singinit_val,value,PMI_vallen_max);
+ rc = MPL_strncpy(cached_singinit_val,value,PMI_vallen_max);
if (rc != 0) return PMI_FAIL;
- return 0;
+ return PMI_SUCCESS;
}
rc = MPL_snprintf( buf, PMIU_MAXLINE,
@@ -408,7 +407,7 @@ int PMI_KVS_Put( const char kvsname[], const char key[], const char value[] )
int PMI_KVS_Commit( const char kvsname[] ATTRIBUTE((unused)))
{
/* no-op in this implementation */
- return( 0 );
+ return PMI_SUCCESS;
}
/*FIXME: need to return an error if the value returned is truncated
@@ -424,7 +423,7 @@ int PMI_KVS_Get( const char kvsname[], const char key[], char value[],
we're doing an MPI_Comm_join or MPI_Comm_connect/accept from
the singleton init case. This test is here because, in the way in
which MPICH uses PMI, this is where the test needs to be. */
- if (PMIi_InitIfSingleton() != 0) return -1;
+ if (PMIi_InitIfSingleton() != 0) return PMI_FAIL;
rc = MPL_snprintf( buf, PMIU_MAXLINE, "cmd=get kvsname=%s key=%s\n",
kvsname, key );
@@ -436,10 +435,10 @@ int PMI_KVS_Get( const char kvsname[], const char key[], char value[],
rc = atoi( buf );
if ( rc == 0 ) {
PMIU_getval( "value", value, length );
- return( 0 );
+ return PMI_SUCCESS;
}
else {
- return( -1 );
+ return PMI_FAIL;
}
}
@@ -464,17 +463,17 @@ int PMI_Publish_name( const char service_name[], const char port[] )
PMIU_getval( "msg", buf, PMIU_MAXLINE );
PMIU_printf( PMI_debug, "publish failed; reason = %s\n", buf );
- return( PMI_FAIL );
+ return PMI_FAIL;
}
}
}
else
{
PMIU_printf( 1, "PMI_Publish_name called before init\n" );
- return( PMI_FAIL );
+ return PMI_FAIL;
}
- return( PMI_SUCCESS );
+ return PMI_SUCCESS;
}
int PMI_Unpublish_name( const char service_name[] )
@@ -492,17 +491,17 @@ int PMI_Unpublish_name( const char service_name[] )
PMIU_getval( "msg", buf, PMIU_MAXLINE );
PMIU_printf( PMI_debug, "unpublish failed; reason = %s\n", buf );
- return( PMI_FAIL );
+ return PMI_FAIL;
}
}
}
else
{
PMIU_printf( 1, "PMI_Unpublish_name called before init\n" );
- return( PMI_FAIL );
+ return PMI_FAIL;
}
- return( PMI_SUCCESS );
+ return PMI_SUCCESS;
}
int PMI_Lookup_name( const char service_name[], char port[] )
@@ -520,7 +519,7 @@ int PMI_Lookup_name( const char service_name[], char port[] )
PMIU_getval( "msg", buf, PMIU_MAXLINE );
PMIU_printf( PMI_debug, "lookup failed; reason = %s\n", buf );
- return( PMI_FAIL );
+ return PMI_FAIL;
}
PMIU_getval( "port", port, MPI_MAX_PORT_NAME );
}
@@ -528,10 +527,10 @@ int PMI_Lookup_name( const char service_name[], char port[] )
else
{
PMIU_printf( 1, "PMI_Lookup_name called before init\n" );
- return( PMI_FAIL );
+ return PMI_FAIL;
}
- return( PMI_SUCCESS );
+ return PMI_SUCCESS;
}
@@ -552,7 +551,7 @@ int PMI_Spawn_multiple(int count,
char *lead, *lag;
/* Connect to the PM if we haven't already */
- if (PMIi_InitIfSingleton() != 0) return -1;
+ if (PMIi_InitIfSingleton() != 0) return PMI_FAIL;
total_num_processes = 0;
@@ -574,7 +573,7 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
@@ -598,12 +597,14 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
argcnt++;
rc = PMIU_writeline( PMI_fd, buf );
+ if (rc)
+ return PMI_FAIL;
buf[0] = 0;
}
@@ -612,7 +613,7 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
@@ -623,7 +624,7 @@ int PMI_Spawn_multiple(int count,
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
@@ -633,7 +634,7 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
@@ -642,7 +643,7 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
@@ -652,7 +653,7 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
@@ -663,7 +664,7 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
@@ -672,17 +673,20 @@ int PMI_Spawn_multiple(int count,
if (rc < 0) {
return PMI_FAIL;
}
- rc = MPIU_Strnapp(buf,tempbuf,PMIU_MAXLINE);
+ rc = MPL_strnapp(buf,tempbuf,PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
}
- rc = MPIU_Strnapp(buf, "endcmd\n", PMIU_MAXLINE);
+ rc = MPL_strnapp(buf, "endcmd\n", PMIU_MAXLINE);
if (rc != 0) {
return PMI_FAIL;
}
- PMIU_writeline( PMI_fd, buf );
+ rc = PMIU_writeline( PMI_fd, buf );
+ if (rc) {
+ return PMI_FAIL;
+ }
}
PMIU_readline( PMI_fd, buf, PMIU_MAXLINE );
@@ -690,7 +694,7 @@ int PMI_Spawn_multiple(int count,
PMIU_getval( "cmd", cmd, PMIU_MAXLINE );
if ( strncmp( cmd, "spawn_result", PMIU_MAXLINE ) != 0 ) {
PMIU_printf( 1, "got unexpected response to spawn :%s:\n", buf );
- return( -1 );
+ return PMI_FAIL;
}
else {
PMIU_getval( "rc", buf, PMIU_MAXLINE );
@@ -700,7 +704,7 @@ int PMI_Spawn_multiple(int count,
PMIU_getval( "status", tempbuf, PMIU_MAXLINE );
PMIU_printf( 1, "pmi_spawn_mult failed; status: %s\n",tempbuf);
****/
- return( -1 );
+ return PMI_FAIL;
}
}
@@ -725,7 +729,7 @@ int PMI_Spawn_multiple(int count,
}
}
- return( 0 );
+ return PMI_SUCCESS;
}
/***************** Internal routines not part of PMI interface ***************/
@@ -893,7 +897,7 @@ static int PMII_Connect_to_pm( char *hostname, int portnum )
hp = gethostbyname( hostname );
if (!hp) {
PMIU_printf( 1, "Unable to get host entry for %s\n", hostname );
- return -1;
+ return PMI_FAIL;
}
memset( (void *)&sa, 0, sizeof(sa) );
@@ -909,7 +913,7 @@ static int PMII_Connect_to_pm( char *hostname, int portnum )
fd = socket( AF_INET, SOCK_STREAM, TCP );
if (fd < 0) {
PMIU_printf( 1, "Unable to get AF_INET socket\n" );
- return -1;
+ return PMI_FAIL;
}
if (setsockopt( fd, IPPROTO_TCP, TCP_NODELAY,
@@ -925,7 +929,7 @@ static int PMII_Connect_to_pm( char *hostname, int portnum )
/* (close socket, get new socket, try again) */
if (q_wait)
close(fd);
- return -1;
+ return PMI_FAIL;
case EINPROGRESS: /* (nonblocking) - select for writing. */
break;
@@ -935,11 +939,11 @@ static int PMII_Connect_to_pm( char *hostname, int portnum )
case ETIMEDOUT: /* timed out */
PMIU_printf( 1, "connect failed with timeout\n" );
- return -1;
+ return PMI_FAIL;
default:
PMIU_printf( 1, "connect failed with errno %d\n", errno );
- return -1;
+ return PMI_FAIL;
}
}
@@ -966,7 +970,7 @@ static int PMII_Set_from_port( int fd, int id )
err = PMIU_writeline( fd, buf );
if (err) {
PMIU_printf( 1, "Error in writeline initack\n" );
- return -1;
+ return PMI_FAIL;
}
/* cmd=initack */
@@ -976,13 +980,13 @@ static int PMII_Set_from_port( int fd, int id )
if (err < 0) {
PMIU_printf( 1, "Error reading initack on %d\n", fd );
perror( "Error on readline:" );
- return -1;
+ return PMI_FAIL;
}
PMIU_parse_keyvals( buf );
PMIU_getval( "cmd", cmd, PMIU_MAXLINE );
if ( strcmp( cmd, "initack" ) ) {
PMIU_printf( 1, "got unexpected input %s\n", buf );
- return -1;
+ return PMI_FAIL;
}
/* Read, in order, size, rank, and debug. Eventually, we'll want
@@ -994,13 +998,13 @@ static int PMII_Set_from_port( int fd, int id )
if (err < 0) {
PMIU_printf( 1, "Error reading size on %d\n", fd );
perror( "Error on readline:" );
- return -1;
+ return PMI_FAIL;
}
PMIU_parse_keyvals( buf );
PMIU_getval( "cmd", cmd, PMIU_MAXLINE );
if ( strcmp(cmd,"set")) {
PMIU_printf( 1, "got unexpected command %s in %s\n", cmd, buf );
- return -1;
+ return PMI_FAIL;
}
/* cmd=set size=n */
PMIU_getval( "size", cmd, PMIU_MAXLINE );
@@ -1012,13 +1016,13 @@ static int PMII_Set_from_port( int fd, int id )
if (err < 0) {
PMIU_printf( 1, "Error reading rank on %d\n", fd );
perror( "Error on readline:" );
- return -1;
+ return PMI_FAIL;
}
PMIU_parse_keyvals( buf );
PMIU_getval( "cmd", cmd, PMIU_MAXLINE );
if ( strcmp(cmd,"set")) {
PMIU_printf( 1, "got unexpected command %s in %s\n", cmd, buf );
- return -1;
+ return PMI_FAIL;
}
/* cmd=set rank=n */
PMIU_getval( "rank", cmd, PMIU_MAXLINE );
@@ -1029,13 +1033,13 @@ static int PMII_Set_from_port( int fd, int id )
err = PMIU_readline( fd, buf, PMIU_MAXLINE );
if (err < 0) {
PMIU_printf( 1, "Error reading debug on %d\n", fd );
- return -1;
+ return PMI_FAIL;
}
PMIU_parse_keyvals( buf );
PMIU_getval( "cmd", cmd, PMIU_MAXLINE );
if ( strcmp(cmd,"set")) {
PMIU_printf( 1, "got unexpected command %s in %s\n", cmd, buf );
- return -1;
+ return PMI_FAIL;
}
/* cmd=set debug=n */
PMIU_getval( "debug", cmd, PMIU_MAXLINE );
@@ -1047,7 +1051,7 @@ static int PMII_Set_from_port( int fd, int id )
DBG_PRINTF( ("Completed init\n" ) );
}
- return 0;
+ return PMI_SUCCESS;
}
/* ------------------------------------------------------------------------- */
@@ -1150,7 +1154,7 @@ static int PMII_singinit(void)
PMIU_printf(1, " This singleton init program attempted to access some feature\n");
PMIU_printf(1, " for which process manager support was required, e.g. spawn or universe_size.\n");
PMIU_printf(1, " But the necessary mpiexec is not in your path.\n");
- return(-1);
+ return PMI_FAIL;
}
else
{
@@ -1221,7 +1225,7 @@ static int PMII_singinit(void)
}
PMIU_printf( PMI_debug_init, "Done with singinit handshake\n" );
}
- return 0;
+ return PMI_SUCCESS;
}
/* Promote PMI to a fully initialized version if it was started as
@@ -1231,7 +1235,7 @@ static int PMIi_InitIfSingleton(void)
int rc;
static int firstcall = 1;
- if (PMI_initialized != SINGLETON_INIT_BUT_NO_PM || !firstcall) return 0;
+ if (PMI_initialized != SINGLETON_INIT_BUT_NO_PM || !firstcall) return PMI_SUCCESS;
/* We only try to init as a singleton the first time */
firstcall = 0;
@@ -1241,7 +1245,7 @@ static int PMIi_InitIfSingleton(void)
rc = PMII_singinit();
if (rc < 0)
- return(-1);
+ return PMI_FAIL;
PMI_initialized = SINGLETON_INIT_WITH_PM; /* do this right away */
PMI_size = 1;
PMI_rank = 0;
@@ -1254,7 +1258,7 @@ static int PMIi_InitIfSingleton(void)
process group */
PMI_KVS_Put( singinit_kvsname, cached_singinit_key, cached_singinit_val );
- return 0;
+ return PMI_SUCCESS;
}
static int accept_one_connection(int list_sock)
@@ -1302,7 +1306,7 @@ static int getPMIFD( int *notset )
if (p) {
PMI_fd = atoi( p );
- return 0;
+ return PMI_SUCCESS;
}
#ifdef USE_PMI_PORT
@@ -1337,7 +1341,7 @@ static int getPMIFD( int *notset )
if (PMI_fd < 0) {
PMIU_printf( 1, "Unable to connect to %s on %d\n",
hostname, portnum );
- return -1;
+ return PMI_FAIL;
}
}
else {
@@ -1354,10 +1358,10 @@ static int getPMIFD( int *notset )
PMII_Set_from_port( PMI_fd, id );
*notset = 0;
}
- return 0;
+ return PMI_SUCCESS;
}
#endif
/* Singleton init case - its ok to return success with no fd set */
- return 0;
+ return PMI_SUCCESS;
}
diff --git a/src/pmi/simple/simple_pmiutil.c b/src/pmi/simple/simple_pmiutil.c
index c10dc45..2061c9d 100644
--- a/src/pmi/simple/simple_pmiutil.c
+++ b/src/pmi/simple/simple_pmiutil.c
@@ -29,10 +29,11 @@
#include "mpl.h"
+#include "pmi.h"
#include "simple_pmiutil.h"
/* Use the memory definitions from mpich/src/include */
-#include "mpimem.h"
+#include "mpir_mem.h"
#define MAXVALLEN 1024
#define MAXKEYLEN 32
@@ -58,7 +59,7 @@ void PMIU_Set_rank( int PMI_rank )
}
void PMIU_SetServer( void )
{
- MPIU_Strncpy( PMIU_print_id, "server", PMIU_IDSIZE );
+ MPL_strncpy( PMIU_print_id, "server", PMIU_IDSIZE );
}
/* Note that vfprintf is part of C89 */
@@ -126,7 +127,7 @@ int PMIU_readline( int fd, char *buf, int maxlen )
replacement version in src/pm/util/pmiserv.c) */
if (nextChar != lastChar && fd != lastfd) {
MPL_internal_error_printf( "Panic - buffer inconsistent\n" );
- return -1;
+ return PMI_FAIL;
}
p = buf;
@@ -192,12 +193,12 @@ int PMIU_writeline( int fd, char *buf )
if ( n < 0 ) {
PMIU_printf( 1, "write_line error; fd=%d buf=:%s:\n", fd, buf );
perror("system msg for write_line failure ");
- return(-1);
+ return PMI_FAIL;
}
if ( n < size)
PMIU_printf( 1, "write_line failed to write entire message\n" );
}
- return 0;
+ return PMI_SUCCESS;
}
/*
@@ -210,7 +211,7 @@ int PMIU_parse_keyvals( char *st )
int offset;
if ( !st )
- return( -1 );
+ return PMI_FAIL;
PMIU_keyval_tab_idx = 0;
p = st;
@@ -221,10 +222,10 @@ int PMIU_parse_keyvals( char *st )
if ( *p == '=' ) {
PMIU_printf( 1, "PMIU_parse_keyvals: unexpected = at character %d in %s\n",
p - st, st );
- return( -1 );
+ return PMI_FAIL;
}
if ( *p == '\n' || *p == '\0' )
- return( 0 ); /* normal exit */
+ return PMI_SUCCESS; /* normal exit */
/* got normal character */
keystart = p; /* remember where key started */
while ( *p != ' ' && *p != '=' && *p != '\n' && *p != '\0' )
@@ -233,19 +234,19 @@ int PMIU_parse_keyvals( char *st )
PMIU_printf( 1,
"PMIU_parse_keyvals: unexpected key delimiter at character %d in %s\n",
p - st, st );
- return( -1 );
+ return PMI_FAIL;
}
/* Null terminate the key */
*p = 0;
/* store key */
- MPIU_Strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].key, keystart,
+ MPL_strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].key, keystart,
MAXKEYLEN );
valstart = ++p; /* start of value */
while ( *p != ' ' && *p != '\n' && *p != '\0' )
p++;
/* store value */
- MPIU_Strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].value, valstart,
+ MPL_strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].value, valstart,
MAXVALLEN );
offset = (int)(p - valstart);
/* When compiled with -fPIC, the pgcc compiler generates incorrect
@@ -256,7 +257,7 @@ int PMIU_parse_keyvals( char *st )
if ( *p == ' ' )
continue;
if ( *p == '\n' || *p == '\0' )
- return( 0 ); /* value has been set to empty */
+ return PMI_SUCCESS; /* value has been set to empty */
}
}
@@ -273,9 +274,9 @@ char *PMIU_getval( const char *keystr, char *valstr, int vallen )
for (i = 0; i < PMIU_keyval_tab_idx; i++) {
if ( strcmp( keystr, PMIU_keyval_tab[i].key ) == 0 ) {
- rc = MPIU_Strncpy( valstr, PMIU_keyval_tab[i].value, vallen );
+ rc = MPL_strncpy( valstr, PMIU_keyval_tab[i].value, vallen );
if (rc != 0) {
- PMIU_printf( 1, "MPIU_Strncpy failed in PMIU_getval\n" );
+ PMIU_printf( 1, "MPL_strncpy failed in PMIU_getval\n" );
return NULL;
}
return valstr;
@@ -291,7 +292,7 @@ void PMIU_chgval( const char *keystr, char *valstr )
for ( i = 0; i < PMIU_keyval_tab_idx; i++ ) {
if ( strcmp( keystr, PMIU_keyval_tab[i].key ) == 0 ) {
- MPIU_Strncpy( PMIU_keyval_tab[i].value, valstr, MAXVALLEN - 1 );
+ MPL_strncpy( PMIU_keyval_tab[i].value, valstr, MAXVALLEN - 1 );
PMIU_keyval_tab[i].value[MAXVALLEN - 1] = '\0';
}
}
diff --git a/src/pmi/simple/simple_pmiutil.h b/src/pmi/simple/simple_pmiutil.h
index 020398d..7404ad0 100644
--- a/src/pmi/simple/simple_pmiutil.h
+++ b/src/pmi/simple/simple_pmiutil.h
@@ -8,7 +8,7 @@
#define PMIU_MAXLINE 1024
#define PMIU_IDSIZE 32
-/* we don't have access to MPIU_Assert and friends here in the PMI code */
+/* we don't have access to MPIR_Assert and friends here in the PMI code */
#if defined(HAVE_ASSERT_H)
# include <assert.h>
# define PMIU_Assert(expr) assert(expr)
diff --git a/src/util/Makefile.mk b/src/util/Makefile.mk
index 6714fe0..b98fc67 100644
--- a/src/util/Makefile.mk
+++ b/src/util/Makefile.mk
@@ -5,17 +5,10 @@
## See COPYRIGHT in top-level directory.
##
-include $(top_srcdir)/src/util/dbg/Makefile.mk
-include $(top_srcdir)/src/util/instrm/Makefile.mk
include $(top_srcdir)/src/util/logging/Makefile.mk
include $(top_srcdir)/src/util/mem/Makefile.mk
-include $(top_srcdir)/src/util/other/Makefile.mk
include $(top_srcdir)/src/util/cvar/Makefile.mk
include $(top_srcdir)/src/util/procmap/Makefile.mk
-include $(top_srcdir)/src/util/thread/Makefile.mk
-include $(top_srcdir)/src/util/type/Makefile.mk
+include $(top_srcdir)/src/util/nodemap/Makefile.mk
include $(top_srcdir)/src/util/wrappers/Makefile.mk
include $(top_srcdir)/src/util/assert/Makefile.mk
-include $(top_srcdir)/src/util/timers/Makefile.mk
-include $(top_srcdir)/src/util/pointer/Makefile.mk
-
diff --git a/src/util/assert/.state-cache b/src/util/assert/.state-cache
index 530ac0f..09a91af 100644
--- a/src/util/assert/.state-cache
+++ b/src/util/assert/.state-cache
@@ -1,7 +1,7 @@
<dir>
-<file name="mpiassert.h" info="1447123141"/>
+<file name="assert.c" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpiassert.h">
+<fileinfo name="assert.c">
</fileinfo>
</data>
diff --git a/src/util/assert/Makefile.mk b/src/util/assert/Makefile.mk
index 1548e21..7fa6594 100644
--- a/src/util/assert/Makefile.mk
+++ b/src/util/assert/Makefile.mk
@@ -5,8 +5,5 @@
## See COPYRIGHT in top-level directory.
##
-AM_CPPFLAGS += -I$(top_srcdir)/src/util/assert
-
-noinst_HEADERS += src/util/assert/mpiassert.h
-mpi_core_sources +=
+mpi_core_sources += src/util/assert/assert.c
diff --git a/src/util/assert/assert.c b/src/util/assert/assert.c
new file mode 100644
index 0000000..4f3d9d3
--- /dev/null
+++ b/src/util/assert/assert.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2010 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpiimpl.h"
+# define MPIU_ASSERT_FMT_MSG_MAX_SIZE 2048
+
+
+/* assertion helper routines
+ *
+ * These exist to de-clutter the post-processed code and reduce the chance that
+ * all of the assertion code will confuse the compiler into making bad
+ * optimization decisions. By the time one of these functions is called, the
+ * assertion has already failed and we can do more-expensive things because we
+ * are on the way out anyway. */
+
+int MPIR_Assert_fail(const char *cond, const char *file_name, int line_num)
+{
+ MPL_VG_PRINTF_BACKTRACE("Assertion failed in file %s at line %d: %s\n",
+ file_name, line_num, cond);
+ MPL_internal_error_printf("Assertion failed in file %s at line %d: %s\n",
+ file_name, line_num, cond);
+ MPL_DBG_MSG_FMT(MPIR_DBG_ASSERT, TERSE,
+ (MPL_DBG_FDEST,
+ "Assertion failed in file %s at line %d: %s",
+ file_name, line_num, cond));
+ MPL_backtrace_show(stderr);
+ MPID_Abort(NULL, MPI_SUCCESS, 1, NULL);
+ return MPI_ERR_INTERN; /* never get here, abort should kill us */
+}
+
+int MPIR_Assert_fail_fmt(const char *cond, const char *file_name, int line_num, const char *fmt, ...)
+{
+ char msg[MPIU_ASSERT_FMT_MSG_MAX_SIZE] = {'\0'};
+ va_list vl;
+
+ va_start(vl,fmt);
+ vsnprintf(msg, sizeof(msg), fmt, vl); /* don't check rc, can't handle it anyway */
+
+ MPL_VG_PRINTF_BACKTRACE("Assertion failed in file %s at line %d: %s\n",
+ file_name, line_num, cond);
+ MPL_VG_PRINTF_BACKTRACE("%s\n", msg);
+
+ MPL_internal_error_printf("Assertion failed in file %s at line %d: %s\n",
+ file_name, line_num, cond);
+ MPL_internal_error_printf("%s\n", msg);
+
+ MPL_DBG_MSG_FMT(MPIR_DBG_ASSERT, TERSE,
+ (MPL_DBG_FDEST,
+ "Assertion failed in file %s at line %d: %s",
+ file_name, line_num, cond));
+ MPL_DBG_MSG_FMT(MPIR_DBG_ASSERT, TERSE, (MPL_DBG_FDEST,"%s",msg));
+
+ MPID_Abort(NULL, MPI_SUCCESS, 1, NULL);
+ return MPI_ERR_INTERN; /* never get here, abort should kill us */
+}
+
diff --git a/src/util/assert/mpiassert.h b/src/util/assert/mpiassert.h
deleted file mode 100644
index 63d2747..0000000
--- a/src/util/assert/mpiassert.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#if !defined(MPIASSERT_H_INCLUDED)
-#define MPIASSERT_H_INCLUDED
-
-#include "mpiu_type_defs.h"
-
-/* modern versions of clang support lots of C11 features */
-#if defined(__has_extension)
-# if __has_extension(c_generic_selections)
-# define HAVE_C11__GENERIC 1
-# endif
-# if __has_extension(c_static_assert)
-# define HAVE_C11__STATIC_ASSERT 1
-# endif
-#endif
-
-/* GCC 4.6 added support for _Static_assert:
- * http://gcc.gnu.org/gcc-4.6/changes.html */
-#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined __cplusplus
-# define HAVE_C11__STATIC_ASSERT 1
-#endif
-
-/* prototypes for assertion implementation helpers */
-int MPIR_Assert_fail(const char *cond, const char *file_name, int line_num);
-int MPIR_Assert_fail_fmt(const char *cond, const char *file_name, int line_num, const char *fmt, ...);
-
-/*
- * MPIU_Assert()
- *
- * Similar to assert() except that it performs an MPID_Abort() when the
- * assertion fails. Also, for Windows, it doesn't popup a
- * mesage box on a remote machine.
- *
- * MPIU_AssertDecl may be used to include declarations only needed
- * when MPIU_Assert is non-null (e.g., when assertions are enabled)
- */
-#if (!defined(NDEBUG) && defined(HAVE_ERROR_CHECKING))
-# define MPIU_AssertDecl(a_) a_
-# define MPIU_AssertDeclValue(_a,_b) _a = _b
-# define MPIU_Assert(a_) \
- do { \
- if (unlikely(!(a_))) { \
- MPIR_Assert_fail(#a_, __FILE__, __LINE__); \
- } \
- } while (0)
-#else
-# define MPIU_Assert(a_)
-/* Empty decls not allowed in C */
-# define MPIU_AssertDecl(a_) a_
-# define MPIU_AssertDeclValue(_a,_b) _a ATTRIBUTE((unused)) = _b
-#endif
-
-/*
- * MPIU_Assertp()
- *
- * Similar to MPIU_Assert() except that these assertions persist regardless of
- * NDEBUG or HAVE_ERROR_CHECKING. MPIU_Assertp() may
- * be used for error checking in prototype code, although it should be
- * converted real error checking and reporting once the
- * prototype becomes part of the official and supported code base.
- */
-#define MPIU_Assertp(a_) \
- do { \
- if (unlikely(!(a_))) { \
- MPIR_Assert_fail(#a_, __FILE__, __LINE__); \
- } \
- } while (0)
-
-/* Define the MPIU_Assert_fmt_msg macro. This macro takes two arguments. The
- * first is the condition to assert. The second is a parenthesized list of
- * arguments suitable for passing directly to printf that will yield a relevant
- * error message. The macro will first evaluate the condition. If it evaluates
- * to false the macro will take four steps:
- *
- * 1) It will emit an "Assertion failed..." message in the valgrind output with
- * a backtrace, if valgrind client requests are available and the process is
- * running under valgrind. It will also evaluate and print the supplied
- * message.
- * 2) It will emit an "Assertion failed..." message via MPL_internal_error_printf.
- * The supplied error message will also be evaluated and printed.
- * 3) It will similarly emit the assertion failure and caller supplied messages
- * to the debug log, if enabled, via MPIU_DBG_MSG_FMT.
- * 4) It will invoke MPID_Abort, just like the other MPIU_Assert* macros.
- *
- * If the compiler doesn't support (...)/__VA_ARGS__ in macros then the user
- * message will not be evaluated or printed. If NDEBUG is defined or
- * HAVE_ERROR_CHECKING is undefined, this macro will expand to nothing, just
- * like MPIU_Assert.
- *
- * Example usage:
- *
- * MPIU_Assert_fmg_msg(foo > bar,("foo is larger than bar: foo=%d bar=%d",foo,bar));
- */
-#if (!defined(NDEBUG) && defined(HAVE_ERROR_CHECKING))
-# if defined(HAVE_MACRO_VA_ARGS)
-
-/* newlines are added internally by the impl function, callers do not need to include them */
-# define MPIU_Assert_fmt_msg(cond_,fmt_arg_parens_) \
- do { \
- if (unlikely(!(cond_))) { \
- MPIR_Assert_fail_fmt(#cond_, __FILE__, __LINE__, \
- MPIU_Assert_fmt_msg_expand_ fmt_arg_parens_); \
- } \
- } while (0)
-/* helper to just expand the parens arg inline */
-# define MPIU_Assert_fmt_msg_expand_(...) __VA_ARGS__
-
-# else /* defined(HAVE_MACRO_VA_ARGS) */
-
-# define MPIU_Assert_fmt_msg(cond_,fmt_arg_parens_) \
- do { \
- if (unlikely(!(cond_))) { \
- MPIR_Assert_fail_fmt(#cond_, __FILE__, __LINE__, \
- "%s", "macro __VA_ARGS__ not supported, unable to print user message"); \
- } \
- } while (0)
-
-# endif
-#else /* !defined(NDEBUG) && defined(HAVE_ERROR_CHECKING) */
-# define MPIU_Assert_fmt_msg(cond_,fmt_arg_parens_)
-#endif
-
-#ifdef HAVE_C11__STATIC_ASSERT
-# define MPIU_Static_assert(cond_,msg_) _Static_assert(cond_,msg_)
-#endif
-/* fallthrough to a run-time assertion */
-#ifndef MPIU_Static_assert
-# define MPIU_Static_assert(cond_,msg_) MPIU_Assert_fmt_msg((cond_), ("%s", (msg_)))
-#endif
-
-/* evaluates to TRUE if ((a_)*(b_)>(max_)), only detects overflow for positive
- * a_ and _b. */
-#define MPIU_Prod_overflows_max(a_, b_, max_) \
- ( (a_) > 0 && (b_) > 0 && ((a_) > ((max_) / (b_))) )
-
-/* asserts that ((a_)*(b_)<=(max_)) holds in a way that is robust against
- * undefined integer overflow behavior and is suitable for both signed and
- * unsigned math (only suitable for positive values of (a_) and (b_)) */
-#define MPIU_Assert_prod_pos_overflow_safe(a_, b_, max_) \
- MPIU_Assert_fmt_msg(!MPIU_Prod_overflows_max((a_),(b_),(max_)), \
- ("overflow detected: (%llx * %llx) > %s", (a_), (b_), #max_)); \
-
-
-
-/* -------------------------------------------------------------------------- */
-/* static type checking macros */
-
-/* implement using C11's "_Generic" functionality (optimal case) */
-#ifdef HAVE_C11__GENERIC
-# define MPIU_Assert_has_type(expr_,type_) \
- MPIU_Static_assert(_Generic((expr_), type_: 1, default: 0), \
- "expression '" #expr_ "' does not have type '" #type_ "'")
-#endif
-/* fallthrough to do nothing */
-#ifndef MPIU_Assert_has_type
-# define MPIU_Assert_has_type(expr_,type_) do {} while (0)
-#endif
-
-#endif /* !defined(MPIASSERT_H_INCLUDED) */
diff --git a/src/util/cvar/Makefile.mk b/src/util/cvar/Makefile.mk
index cab118e..9a2de34 100644
--- a/src/util/cvar/Makefile.mk
+++ b/src/util/cvar/Makefile.mk
@@ -6,10 +6,10 @@
##
mpi_core_sources += \
- src/util/cvar/mpich_cvars.c
+ src/util/cvar/mpir_cvars.c
if MAINTAINER_MODE
# normally built by autogen.sh, but this rebuild rule is here
-$(top_srcdir)/src/util/cvar/mpich_cvars.c: $(top_srcdir)/maint/extractcvars
+$(top_srcdir)/src/util/cvar/mpir_cvars.c: $(top_srcdir)/maint/extractcvars
( cd $(top_srcdir) && $(top_srcdir)/maint/extractcvars --dirs="`cat $(top_srcdir)/maint/cvardirs`")
endif MAINTAINER_MODE
diff --git a/src/util/cvar/mpich_cvars.c b/src/util/cvar/mpich_cvars.c
deleted file mode 100644
index 0fd6bdb..0000000
--- a/src/util/cvar/mpich_cvars.c
+++ /dev/null
@@ -1,1794 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2010 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-/* automatically generated
- * by: ./maint/extractcvars
- * at: Wed Nov 11 22:07:04 2015
- *
- * DO NOT EDIT!!!
- */
-
-#include "mpiimpl.h"
-
-/* Actual storage for cvars */
-#if defined MPID_DEBUG_HOLD
-int MPIR_CVAR_DEBUG_HOLD = MPID_DEBUG_HOLD;
-#else
-int MPIR_CVAR_DEBUG_HOLD = 0;
-#endif /* MPID_DEBUG_HOLD */
-
-#if defined MPID_ERROR_CHECKING
-int MPIR_CVAR_ERROR_CHECKING = MPID_ERROR_CHECKING;
-#else
-int MPIR_CVAR_ERROR_CHECKING = 1;
-#endif /* MPID_ERROR_CHECKING */
-
-#if defined MPID_ASYNC_PROGRESS
-int MPIR_CVAR_ASYNC_PROGRESS = MPID_ASYNC_PROGRESS;
-#else
-int MPIR_CVAR_ASYNC_PROGRESS = 0;
-#endif /* MPID_ASYNC_PROGRESS */
-
-#if defined MPID_DEFAULT_THREAD_LEVEL
-char * MPIR_CVAR_DEFAULT_THREAD_LEVEL = MPID_DEFAULT_THREAD_LEVEL;
-#else
-char * MPIR_CVAR_DEFAULT_THREAD_LEVEL = (char*)"MPI_THREAD_SINGLE";
-#endif /* MPID_DEFAULT_THREAD_LEVEL */
-
-#if defined MPID_MEMDUMP
-int MPIR_CVAR_MEMDUMP = MPID_MEMDUMP;
-#else
-int MPIR_CVAR_MEMDUMP = 1;
-#endif /* MPID_MEMDUMP */
-
-#if defined MPID_SUPPRESS_ABORT_MESSAGE
-int MPIR_CVAR_SUPPRESS_ABORT_MESSAGE = MPID_SUPPRESS_ABORT_MESSAGE;
-#else
-int MPIR_CVAR_SUPPRESS_ABORT_MESSAGE = 0;
-#endif /* MPID_SUPPRESS_ABORT_MESSAGE */
-
-#if defined MPID_REDUCE_SHORT_MSG_SIZE
-int MPIR_CVAR_REDUCE_SHORT_MSG_SIZE = MPID_REDUCE_SHORT_MSG_SIZE;
-#else
-int MPIR_CVAR_REDUCE_SHORT_MSG_SIZE = 2048;
-#endif /* MPID_REDUCE_SHORT_MSG_SIZE */
-
-#if defined MPID_ENABLE_SMP_REDUCE
-int MPIR_CVAR_ENABLE_SMP_REDUCE = MPID_ENABLE_SMP_REDUCE;
-#else
-int MPIR_CVAR_ENABLE_SMP_REDUCE = 1;
-#endif /* MPID_ENABLE_SMP_REDUCE */
-
-#if defined MPID_MAX_SMP_REDUCE_MSG_SIZE
-int MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE = MPID_MAX_SMP_REDUCE_MSG_SIZE;
-#else
-int MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE = 0;
-#endif /* MPID_MAX_SMP_REDUCE_MSG_SIZE */
-
-#if defined MPID_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE
-int MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE = MPID_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE;
-#else
-int MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE = 524288;
-#endif /* MPID_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE */
-
-#if defined MPID_BCAST_MIN_PROCS
-int MPIR_CVAR_BCAST_MIN_PROCS = MPID_BCAST_MIN_PROCS;
-#else
-int MPIR_CVAR_BCAST_MIN_PROCS = 8;
-#endif /* MPID_BCAST_MIN_PROCS */
-
-#if defined MPID_BCAST_SHORT_MSG_SIZE
-int MPIR_CVAR_BCAST_SHORT_MSG_SIZE = MPID_BCAST_SHORT_MSG_SIZE;
-#else
-int MPIR_CVAR_BCAST_SHORT_MSG_SIZE = 12288;
-#endif /* MPID_BCAST_SHORT_MSG_SIZE */
-
-#if defined MPID_BCAST_LONG_MSG_SIZE
-int MPIR_CVAR_BCAST_LONG_MSG_SIZE = MPID_BCAST_LONG_MSG_SIZE;
-#else
-int MPIR_CVAR_BCAST_LONG_MSG_SIZE = 524288;
-#endif /* MPID_BCAST_LONG_MSG_SIZE */
-
-#if defined MPID_ENABLE_SMP_BCAST
-int MPIR_CVAR_ENABLE_SMP_BCAST = MPID_ENABLE_SMP_BCAST;
-#else
-int MPIR_CVAR_ENABLE_SMP_BCAST = 1;
-#endif /* MPID_ENABLE_SMP_BCAST */
-
-#if defined MPID_MAX_SMP_BCAST_MSG_SIZE
-int MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE = MPID_MAX_SMP_BCAST_MSG_SIZE;
-#else
-int MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE = 0;
-#endif /* MPID_MAX_SMP_BCAST_MSG_SIZE */
-
-#if defined MPID_GATHERV_INTER_SSEND_MIN_PROCS
-int MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS = MPID_GATHERV_INTER_SSEND_MIN_PROCS;
-#else
-int MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS = 32;
-#endif /* MPID_GATHERV_INTER_SSEND_MIN_PROCS */
-
-#if defined MPID_ALLREDUCE_SHORT_MSG_SIZE
-int MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE = MPID_ALLREDUCE_SHORT_MSG_SIZE;
-#else
-int MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE = 2048;
-#endif /* MPID_ALLREDUCE_SHORT_MSG_SIZE */
-
-#if defined MPID_ENABLE_SMP_COLLECTIVES
-int MPIR_CVAR_ENABLE_SMP_COLLECTIVES = MPID_ENABLE_SMP_COLLECTIVES;
-#else
-int MPIR_CVAR_ENABLE_SMP_COLLECTIVES = 1;
-#endif /* MPID_ENABLE_SMP_COLLECTIVES */
-
-#if defined MPID_ENABLE_SMP_ALLREDUCE
-int MPIR_CVAR_ENABLE_SMP_ALLREDUCE = MPID_ENABLE_SMP_ALLREDUCE;
-#else
-int MPIR_CVAR_ENABLE_SMP_ALLREDUCE = 1;
-#endif /* MPID_ENABLE_SMP_ALLREDUCE */
-
-#if defined MPID_MAX_SMP_ALLREDUCE_MSG_SIZE
-int MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE = MPID_MAX_SMP_ALLREDUCE_MSG_SIZE;
-#else
-int MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE = 0;
-#endif /* MPID_MAX_SMP_ALLREDUCE_MSG_SIZE */
-
-#if defined MPID_GATHER_VSMALL_MSG_SIZE
-int MPIR_CVAR_GATHER_VSMALL_MSG_SIZE = MPID_GATHER_VSMALL_MSG_SIZE;
-#else
-int MPIR_CVAR_GATHER_VSMALL_MSG_SIZE = 1024;
-#endif /* MPID_GATHER_VSMALL_MSG_SIZE */
-
-#if defined MPID_GATHER_INTER_SHORT_MSG_SIZE
-int MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE = MPID_GATHER_INTER_SHORT_MSG_SIZE;
-#else
-int MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE = 2048;
-#endif /* MPID_GATHER_INTER_SHORT_MSG_SIZE */
-
-#if defined MPID_ENABLE_SMP_BARRIER
-int MPIR_CVAR_ENABLE_SMP_BARRIER = MPID_ENABLE_SMP_BARRIER;
-#else
-int MPIR_CVAR_ENABLE_SMP_BARRIER = 1;
-#endif /* MPID_ENABLE_SMP_BARRIER */
-
-#if defined MPID_ALLGATHER_SHORT_MSG_SIZE
-int MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE = MPID_ALLGATHER_SHORT_MSG_SIZE;
-#else
-int MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE = 81920;
-#endif /* MPID_ALLGATHER_SHORT_MSG_SIZE */
-
-#if defined MPID_ALLGATHER_LONG_MSG_SIZE
-int MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE = MPID_ALLGATHER_LONG_MSG_SIZE;
-#else
-int MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE = 524288;
-#endif /* MPID_ALLGATHER_LONG_MSG_SIZE */
-
-#if defined MPID_ALLTOALL_SHORT_MSG_SIZE
-int MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE = MPID_ALLTOALL_SHORT_MSG_SIZE;
-#else
-int MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE = 256;
-#endif /* MPID_ALLTOALL_SHORT_MSG_SIZE */
-
-#if defined MPID_ALLTOALL_MEDIUM_MSG_SIZE
-int MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE = MPID_ALLTOALL_MEDIUM_MSG_SIZE;
-#else
-int MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE = 32768;
-#endif /* MPID_ALLTOALL_MEDIUM_MSG_SIZE */
-
-#if defined MPID_ALLTOALL_THROTTLE
-int MPIR_CVAR_ALLTOALL_THROTTLE = MPID_ALLTOALL_THROTTLE;
-#else
-int MPIR_CVAR_ALLTOALL_THROTTLE = 32;
-#endif /* MPID_ALLTOALL_THROTTLE */
-
-#if defined MPID_SCATTER_INTER_SHORT_MSG_SIZE
-int MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE = MPID_SCATTER_INTER_SHORT_MSG_SIZE;
-#else
-int MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE = 2048;
-#endif /* MPID_SCATTER_INTER_SHORT_MSG_SIZE */
-
-#if defined MPID_ALLGATHERV_PIPELINE_MSG_SIZE
-int MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE = MPID_ALLGATHERV_PIPELINE_MSG_SIZE;
-#else
-int MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE = 32768;
-#endif /* MPID_ALLGATHERV_PIPELINE_MSG_SIZE */
-
-#if defined MPID_CTXID_EAGER_SIZE
-int MPIR_CVAR_CTXID_EAGER_SIZE = MPID_CTXID_EAGER_SIZE;
-#else
-int MPIR_CVAR_CTXID_EAGER_SIZE = 2;
-#endif /* MPID_CTXID_EAGER_SIZE */
-
-#if defined MPID_COMM_SPLIT_USE_QSORT
-int MPIR_CVAR_COMM_SPLIT_USE_QSORT = MPID_COMM_SPLIT_USE_QSORT;
-#else
-int MPIR_CVAR_COMM_SPLIT_USE_QSORT = 1;
-#endif /* MPID_COMM_SPLIT_USE_QSORT */
-
-#if defined MPID_PROCTABLE_SIZE
-int MPIR_CVAR_PROCTABLE_SIZE = MPID_PROCTABLE_SIZE;
-#else
-int MPIR_CVAR_PROCTABLE_SIZE = 64;
-#endif /* MPID_PROCTABLE_SIZE */
-
-#if defined MPID_PROCTABLE_PRINT
-int MPIR_CVAR_PROCTABLE_PRINT = MPID_PROCTABLE_PRINT;
-#else
-int MPIR_CVAR_PROCTABLE_PRINT = 0;
-#endif /* MPID_PROCTABLE_PRINT */
-
-#if defined MPID_PRINT_ERROR_STACK
-int MPIR_CVAR_PRINT_ERROR_STACK = MPID_PRINT_ERROR_STACK;
-#else
-int MPIR_CVAR_PRINT_ERROR_STACK = 1;
-#endif /* MPID_PRINT_ERROR_STACK */
-
-#if defined MPID_CHOP_ERROR_STACK
-int MPIR_CVAR_CHOP_ERROR_STACK = MPID_CHOP_ERROR_STACK;
-#else
-int MPIR_CVAR_CHOP_ERROR_STACK = 0;
-#endif /* MPID_CHOP_ERROR_STACK */
-
-char * MPIR_CVAR_NAMESERV_FILE_PUBDIR = (char*)NULL;
-#if defined MPID_ABORT_ON_LEAKED_HANDLES
-int MPIR_CVAR_ABORT_ON_LEAKED_HANDLES = MPID_ABORT_ON_LEAKED_HANDLES;
-#else
-int MPIR_CVAR_ABORT_ON_LEAKED_HANDLES = 0;
-#endif /* MPID_ABORT_ON_LEAKED_HANDLES */
-
-#if defined MPID_COLL_ALIAS_CHECK
-int MPIR_CVAR_COLL_ALIAS_CHECK = MPID_COLL_ALIAS_CHECK;
-#else
-int MPIR_CVAR_COLL_ALIAS_CHECK = 1;
-#endif /* MPID_COLL_ALIAS_CHECK */
-
-int MPIR_CVAR_CH3_ENABLE_HCOLL = 0;
-int MPIR_CVAR_CH3_NOLOCAL = 0;
-int MPIR_CVAR_CH3_ODD_EVEN_CLIQUES = 0;
-int MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE = 131072;
-int MPIR_CVAR_CH3_RMA_SLOTS_SIZE = 262144;
-int MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES = 655360;
-int MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE = 65536;
-int MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM = 1024;
-int MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING = 0;
-int MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD = 65536;
-int MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD = 128;
-int MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE = 256;
-int MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE = 16384;
-int MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE = 256;
-int MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE = 16384;
-int MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE = 256;
-#if defined MPID_ENABLE_FT
-int MPIR_CVAR_ENABLE_FT = MPID_ENABLE_FT;
-#else
-int MPIR_CVAR_ENABLE_FT = 0;
-#endif /* MPID_ENABLE_FT */
-
-int MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ = -1;
-int MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ = -2;
-int MPIR_CVAR_NEMESIS_ENABLE_CKPOINT = 0;
-char * MPIR_CVAR_NEMESIS_NETMOD = (char*)"";
-int MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD = 2097152;
-int MPIR_CVAR_POLLS_BEFORE_YIELD = 1000;
-#if defined MPID_OFI_USE_PROVIDER
-char * MPIR_CVAR_OFI_USE_PROVIDER = MPID_OFI_USE_PROVIDER;
-#else
-char * MPIR_CVAR_OFI_USE_PROVIDER = (char*)NULL;
-#endif /* MPID_OFI_USE_PROVIDER */
-
-#if defined MPID_OFI_DUMP_PROVIDERS
-int MPIR_CVAR_OFI_DUMP_PROVIDERS = MPID_OFI_DUMP_PROVIDERS;
-#else
-int MPIR_CVAR_OFI_DUMP_PROVIDERS = 0;
-#endif /* MPID_OFI_DUMP_PROVIDERS */
-
-char * MPIR_CVAR_CH3_INTERFACE_HOSTNAME = (char*)NULL;
-MPIR_T_cvar_range_value_t MPIR_CVAR_CH3_PORT_RANGE = {0,0};
-char * MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = (char*)NULL;
-int MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES = 10;
-int MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT = 0;
-int MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT = 0;
-int MPIR_CVAR_NEMESIS_MXM_HUGEPAGE = 0;
-
-#undef FUNCNAME
-#define FUNCNAME MPIR_T_cvar_init
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIR_T_cvar_init(void)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc;
- const char *tmp_str;
- static int initialized = FALSE;
- MPIR_T_cvar_value_t defaultval;
-
- /* FIXME any MT issues here? */
- if (initialized)
- return MPI_SUCCESS;
- initialized = TRUE;
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/initthread.c */
- MPIR_T_cat_add_desc("DEBUGGER",
- "cvars relevant to the \"MPIR\" debugger interface");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/init.c */
- MPIR_T_cat_add_desc("THREADS",
- "multi-threading cvars");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/init/finalize.c */
- MPIR_T_cat_add_desc("DEVELOPER",
- "useful for developers working on MPICH itself");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/coll/alltoall.c */
- MPIR_T_cat_add_desc("COLLECTIVE",
- "A category for collective communication variables.");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/comm/comm_split.c */
- MPIR_T_cat_add_desc("COMMUNICATOR",
- "cvars that control communicator construction and operation");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpi/errhan/errutil.c */
- MPIR_T_cat_add_desc("ERROR_HANDLING",
- "cvars that control error handling behavior (stack traces, aborts, etc)");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/nameserv/file/file_nameserv.c */
- MPIR_T_cat_add_desc("PROCESS_MANAGER",
- "cvars that control the client-side process manager code");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/util/mem/handlemem.c */
- MPIR_T_cat_add_desc("MEMORY",
- "affects memory allocation and usage, including MPI object handles");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/src/mpidi_rma.c */
- MPIR_T_cat_add_desc("CH3",
- "cvars that control behavior of ch3");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c */
- MPIR_T_cat_add_desc("FT",
- "cvars that control behavior of fault tolerance");
-
- /* declared in /tmp/wB2927n3sW/mpich-3.2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c */
- MPIR_T_cat_add_desc("NEMESIS",
- "cvars that control behavior of the ch3:nemesis channel");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_DEBUG_HOLD, /* name */
- &MPIR_CVAR_DEBUG_HOLD, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "DEBUGGER", /* category */
- "If true, causes processes to wait in MPI_Init and MPI_Initthread for a debugger to be attached. Once the debugger has attached, the variable 'hold' should be set to 0 in order to allow the process to continue (e.g., in gdb, \"set hold=0\").");
- rc = MPL_env2bool("MPICH_DEBUG_HOLD", &(MPIR_CVAR_DEBUG_HOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_DEBUG_HOLD");
- rc = MPL_env2bool("MPIR_PARAM_DEBUG_HOLD", &(MPIR_CVAR_DEBUG_HOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_DEBUG_HOLD");
- rc = MPL_env2bool("MPIR_CVAR_DEBUG_HOLD", &(MPIR_CVAR_DEBUG_HOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_DEBUG_HOLD");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ERROR_CHECKING, /* name */
- &MPIR_CVAR_ERROR_CHECKING, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_LOCAL,
- defaultval,
- "ERROR_HANDLING", /* category */
- "If true, perform checks for errors, typically to verify valid inputs to MPI routines. Only effective when MPICH is configured with --enable-error-checking=runtime .");
- rc = MPL_env2bool("MPICH_ERROR_CHECKING", &(MPIR_CVAR_ERROR_CHECKING));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ERROR_CHECKING");
- rc = MPL_env2bool("MPIR_PARAM_ERROR_CHECKING", &(MPIR_CVAR_ERROR_CHECKING));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ERROR_CHECKING");
- rc = MPL_env2bool("MPIR_CVAR_ERROR_CHECKING", &(MPIR_CVAR_ERROR_CHECKING));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ERROR_CHECKING");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ASYNC_PROGRESS, /* name */
- &MPIR_CVAR_ASYNC_PROGRESS, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "THREADS", /* category */
- "If set to true, MPICH will initiate an additional thread to make asynchronous progress on all communication operations including point-to-point, collective, one-sided operations and I/O. Setting this variable will automatically increase the thread-safety level to MPI_THREAD_MULTIPLE. While this improves the progress semantics, it might cause a small amount of performance overhead for regular MPI operations. The user is encouraged to leave one or more hardware threads vacant i [...]
- rc = MPL_env2bool("MPICH_ASYNC_PROGRESS", &(MPIR_CVAR_ASYNC_PROGRESS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ASYNC_PROGRESS");
- rc = MPL_env2bool("MPIR_PARAM_ASYNC_PROGRESS", &(MPIR_CVAR_ASYNC_PROGRESS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ASYNC_PROGRESS");
- rc = MPL_env2bool("MPIR_CVAR_ASYNC_PROGRESS", &(MPIR_CVAR_ASYNC_PROGRESS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ASYNC_PROGRESS");
-
- defaultval.str = (char *)"MPI_THREAD_SINGLE";
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_CHAR,
- MPIR_CVAR_DEFAULT_THREAD_LEVEL, /* name */
- &MPIR_CVAR_DEFAULT_THREAD_LEVEL, /* address */
- MPIR_CVAR_MAX_STRLEN, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "THREADS", /* category */
- "Sets the default thread level to use when using MPI_INIT.");
- MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_DEFAULT_THREAD_LEVEL, &tmp_str);
- rc = MPL_env2str("MPICH_DEFAULT_THREAD_LEVEL", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_DEFAULT_THREAD_LEVEL");
- rc = MPL_env2str("MPIR_PARAM_DEFAULT_THREAD_LEVEL", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_DEFAULT_THREAD_LEVEL");
- rc = MPL_env2str("MPIR_CVAR_DEFAULT_THREAD_LEVEL", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_DEFAULT_THREAD_LEVEL");
- if (tmp_str != NULL) {
- MPIR_CVAR_DEFAULT_THREAD_LEVEL = MPIU_Strdup(tmp_str);
- MPIR_CVAR_assert(MPIR_CVAR_DEFAULT_THREAD_LEVEL);
- if (MPIR_CVAR_DEFAULT_THREAD_LEVEL == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_DEFAULT_THREAD_LEVEL");
- goto fn_fail;
- }
- }
- else {
- MPIR_CVAR_DEFAULT_THREAD_LEVEL = NULL;
- }
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_MEMDUMP, /* name */
- &MPIR_CVAR_MEMDUMP, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_MPIDEV_DETAIL,
- MPI_T_SCOPE_LOCAL,
- defaultval,
- "DEVELOPER", /* category */
- "If true, list any memory that was allocated by MPICH and that remains allocated when MPI_Finalize completes.");
- rc = MPL_env2bool("MPICH_MEMDUMP", &(MPIR_CVAR_MEMDUMP));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MEMDUMP");
- rc = MPL_env2bool("MPIR_PARAM_MEMDUMP", &(MPIR_CVAR_MEMDUMP));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MEMDUMP");
- rc = MPL_env2bool("MPIR_CVAR_MEMDUMP", &(MPIR_CVAR_MEMDUMP));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MEMDUMP");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_SUPPRESS_ABORT_MESSAGE, /* name */
- &MPIR_CVAR_SUPPRESS_ABORT_MESSAGE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "ERROR_HANDLING", /* category */
- "Disable printing of abort error message.");
- rc = MPL_env2bool("MPICH_SUPPRESS_ABORT_MESSAGE", &(MPIR_CVAR_SUPPRESS_ABORT_MESSAGE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_SUPPRESS_ABORT_MESSAGE");
- rc = MPL_env2bool("MPIR_PARAM_SUPPRESS_ABORT_MESSAGE", &(MPIR_CVAR_SUPPRESS_ABORT_MESSAGE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_SUPPRESS_ABORT_MESSAGE");
- rc = MPL_env2bool("MPIR_CVAR_SUPPRESS_ABORT_MESSAGE", &(MPIR_CVAR_SUPPRESS_ABORT_MESSAGE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_SUPPRESS_ABORT_MESSAGE");
-
- defaultval.d = 2048;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_REDUCE_SHORT_MSG_SIZE, /* name */
- &MPIR_CVAR_REDUCE_SHORT_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "the short message algorithm will be used if the send buffer size is <= this value (in bytes)");
- rc = MPL_env2int("MPICH_REDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_REDUCE_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_REDUCE_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_REDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_REDUCE_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_REDUCE_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_REDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_REDUCE_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_REDUCE_SHORT_MSG_SIZE");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ENABLE_SMP_REDUCE, /* name */
- &MPIR_CVAR_ENABLE_SMP_REDUCE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Enable SMP aware reduce.");
- rc = MPL_env2bool("MPICH_ENABLE_SMP_REDUCE", &(MPIR_CVAR_ENABLE_SMP_REDUCE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_REDUCE");
- rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_REDUCE", &(MPIR_CVAR_ENABLE_SMP_REDUCE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_REDUCE");
- rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_REDUCE", &(MPIR_CVAR_ENABLE_SMP_REDUCE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_REDUCE");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE, /* name */
- &MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Maximum message size for which SMP-aware reduce is used. A value of '0' uses SMP-aware reduce for all message sizes.");
- rc = MPL_env2int("MPICH_MAX_SMP_REDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MAX_SMP_REDUCE_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_MAX_SMP_REDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MAX_SMP_REDUCE_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE");
-
- defaultval.d = 524288;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE, /* name */
- &MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "the long message algorithm will be used if the operation is commutative and the send buffer size is >= this value (in bytes)");
- rc = MPL_env2int("MPICH_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE", &(MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE", &(MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE", &(MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE");
-
- defaultval.d = 8;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_BCAST_MIN_PROCS, /* name */
- &MPIR_CVAR_BCAST_MIN_PROCS, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Let's define short messages as messages with size < MPIR_CVAR_BCAST_SHORT_MSG_SIZE, and medium messages as messages with size >= MPIR_CVAR_BCAST_SHORT_MSG_SIZE but < MPIR_CVAR_BCAST_LONG_MSG_SIZE, and long messages as messages with size >= MPIR_CVAR_BCAST_LONG_MSG_SIZE. The broadcast algorithms selection procedure is as follows. For short messages or when the number of processes is < MPIR_CVAR_BCAST_MIN_PROCS, we do broadcast using the binomial tree algorithm. Otherwise, for med [...]
- rc = MPL_env2int("MPICH_BCAST_MIN_PROCS", &(MPIR_CVAR_BCAST_MIN_PROCS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_BCAST_MIN_PROCS");
- rc = MPL_env2int("MPIR_PARAM_BCAST_MIN_PROCS", &(MPIR_CVAR_BCAST_MIN_PROCS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_BCAST_MIN_PROCS");
- rc = MPL_env2int("MPIR_CVAR_BCAST_MIN_PROCS", &(MPIR_CVAR_BCAST_MIN_PROCS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_BCAST_MIN_PROCS");
-
- defaultval.d = 12288;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_BCAST_SHORT_MSG_SIZE, /* name */
- &MPIR_CVAR_BCAST_SHORT_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Let's define short messages as messages with size < MPIR_CVAR_BCAST_SHORT_MSG_SIZE, and medium messages as messages with size >= MPIR_CVAR_BCAST_SHORT_MSG_SIZE but < MPIR_CVAR_BCAST_LONG_MSG_SIZE, and long messages as messages with size >= MPIR_CVAR_BCAST_LONG_MSG_SIZE. The broadcast algorithms selection procedure is as follows. For short messages or when the number of processes is < MPIR_CVAR_BCAST_MIN_PROCS, we do broadcast using the binomial tree algorithm. Otherwise, for med [...]
- rc = MPL_env2int("MPICH_BCAST_SHORT_MSG_SIZE", &(MPIR_CVAR_BCAST_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_BCAST_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_BCAST_SHORT_MSG_SIZE", &(MPIR_CVAR_BCAST_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_BCAST_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_BCAST_SHORT_MSG_SIZE", &(MPIR_CVAR_BCAST_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_BCAST_SHORT_MSG_SIZE");
-
- defaultval.d = 524288;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_BCAST_LONG_MSG_SIZE, /* name */
- &MPIR_CVAR_BCAST_LONG_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Let's define short messages as messages with size < MPIR_CVAR_BCAST_SHORT_MSG_SIZE, and medium messages as messages with size >= MPIR_CVAR_BCAST_SHORT_MSG_SIZE but < MPIR_CVAR_BCAST_LONG_MSG_SIZE, and long messages as messages with size >= MPIR_CVAR_BCAST_LONG_MSG_SIZE. The broadcast algorithms selection procedure is as follows. For short messages or when the number of processes is < MPIR_CVAR_BCAST_MIN_PROCS, we do broadcast using the binomial tree algorithm. Otherwise, for med [...]
- rc = MPL_env2int("MPICH_BCAST_LONG_MSG_SIZE", &(MPIR_CVAR_BCAST_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_BCAST_LONG_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_BCAST_LONG_MSG_SIZE", &(MPIR_CVAR_BCAST_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_BCAST_LONG_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_BCAST_LONG_MSG_SIZE", &(MPIR_CVAR_BCAST_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_BCAST_LONG_MSG_SIZE");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ENABLE_SMP_BCAST, /* name */
- &MPIR_CVAR_ENABLE_SMP_BCAST, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Enable SMP aware broadcast (See also: MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE)");
- rc = MPL_env2bool("MPICH_ENABLE_SMP_BCAST", &(MPIR_CVAR_ENABLE_SMP_BCAST));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_BCAST");
- rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_BCAST", &(MPIR_CVAR_ENABLE_SMP_BCAST));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_BCAST");
- rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_BCAST", &(MPIR_CVAR_ENABLE_SMP_BCAST));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_BCAST");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE, /* name */
- &MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Maximum message size for which SMP-aware broadcast is used. A value of '0' uses SMP-aware broadcast for all message sizes. (See also: MPIR_CVAR_ENABLE_SMP_BCAST)");
- rc = MPL_env2int("MPICH_MAX_SMP_BCAST_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MAX_SMP_BCAST_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_MAX_SMP_BCAST_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MAX_SMP_BCAST_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE");
-
- defaultval.d = 32;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS, /* name */
- &MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Use Ssend (synchronous send) for intercommunicator MPI_Gatherv if the \"group B\" size is >= this value. Specifying \"-1\" always avoids using Ssend. For backwards compatibility, specifying \"0\" uses the default value.");
- rc = MPL_env2int("MPICH_GATHERV_INTER_SSEND_MIN_PROCS", &(MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_GATHERV_INTER_SSEND_MIN_PROCS");
- rc = MPL_env2int("MPIR_PARAM_GATHERV_INTER_SSEND_MIN_PROCS", &(MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_GATHERV_INTER_SSEND_MIN_PROCS");
- rc = MPL_env2int("MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS", &(MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS");
-
- defaultval.d = 2048;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE, /* name */
- &MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "the short message algorithm will be used if the send buffer size is <= this value (in bytes)");
- rc = MPL_env2int("MPICH_ALLREDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLREDUCE_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_ALLREDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLREDUCE_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ENABLE_SMP_COLLECTIVES, /* name */
- &MPIR_CVAR_ENABLE_SMP_COLLECTIVES, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Enable SMP aware collective communication.");
- rc = MPL_env2bool("MPICH_ENABLE_SMP_COLLECTIVES", &(MPIR_CVAR_ENABLE_SMP_COLLECTIVES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_COLLECTIVES");
- rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_COLLECTIVES", &(MPIR_CVAR_ENABLE_SMP_COLLECTIVES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_COLLECTIVES");
- rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_COLLECTIVES", &(MPIR_CVAR_ENABLE_SMP_COLLECTIVES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_COLLECTIVES");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ENABLE_SMP_ALLREDUCE, /* name */
- &MPIR_CVAR_ENABLE_SMP_ALLREDUCE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Enable SMP aware allreduce.");
- rc = MPL_env2bool("MPICH_ENABLE_SMP_ALLREDUCE", &(MPIR_CVAR_ENABLE_SMP_ALLREDUCE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_ALLREDUCE");
- rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_ALLREDUCE", &(MPIR_CVAR_ENABLE_SMP_ALLREDUCE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_ALLREDUCE");
- rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_ALLREDUCE", &(MPIR_CVAR_ENABLE_SMP_ALLREDUCE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_ALLREDUCE");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE, /* name */
- &MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Maximum message size for which SMP-aware allreduce is used. A value of '0' uses SMP-aware allreduce for all message sizes.");
- rc = MPL_env2int("MPICH_MAX_SMP_ALLREDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MAX_SMP_ALLREDUCE_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_MAX_SMP_ALLREDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MAX_SMP_ALLREDUCE_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE");
-
- defaultval.d = 1024;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_GATHER_VSMALL_MSG_SIZE, /* name */
- &MPIR_CVAR_GATHER_VSMALL_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "use a temporary buffer for intracommunicator MPI_Gather if the send buffer size is < this value (in bytes) (See also: MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE)");
- rc = MPL_env2int("MPICH_GATHER_VSMALL_MSG_SIZE", &(MPIR_CVAR_GATHER_VSMALL_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_GATHER_VSMALL_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_GATHER_VSMALL_MSG_SIZE", &(MPIR_CVAR_GATHER_VSMALL_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_GATHER_VSMALL_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_GATHER_VSMALL_MSG_SIZE", &(MPIR_CVAR_GATHER_VSMALL_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_GATHER_VSMALL_MSG_SIZE");
-
- defaultval.d = 2048;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE, /* name */
- &MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "use the short message algorithm for intercommunicator MPI_Gather if the send buffer size is < this value (in bytes) (See also: MPIR_CVAR_GATHER_VSMALL_MSG_SIZE)");
- rc = MPL_env2int("MPICH_GATHER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_GATHER_INTER_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_GATHER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_GATHER_INTER_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ENABLE_SMP_BARRIER, /* name */
- &MPIR_CVAR_ENABLE_SMP_BARRIER, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Enable SMP aware barrier.");
- rc = MPL_env2bool("MPICH_ENABLE_SMP_BARRIER", &(MPIR_CVAR_ENABLE_SMP_BARRIER));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_BARRIER");
- rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_BARRIER", &(MPIR_CVAR_ENABLE_SMP_BARRIER));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_BARRIER");
- rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_BARRIER", &(MPIR_CVAR_ENABLE_SMP_BARRIER));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_BARRIER");
-
- defaultval.d = 81920;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE, /* name */
- &MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "For MPI_Allgather and MPI_Allgatherv, the short message algorithm will be used if the send buffer size is < this value (in bytes). (See also: MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE)");
- rc = MPL_env2int("MPICH_ALLGATHER_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLGATHER_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_ALLGATHER_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLGATHER_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE");
-
- defaultval.d = 524288;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE, /* name */
- &MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "For MPI_Allgather and MPI_Allgatherv, the long message algorithm will be used if the send buffer size is >= this value (in bytes) (See also: MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE)");
- rc = MPL_env2int("MPICH_ALLGATHER_LONG_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLGATHER_LONG_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_ALLGATHER_LONG_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLGATHER_LONG_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE");
-
- defaultval.d = 256;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE, /* name */
- &MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "the short message algorithm will be used if the per-destination message size (sendcount*size(sendtype)) is <= this value (See also: MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE)");
- rc = MPL_env2int("MPICH_ALLTOALL_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLTOALL_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_ALLTOALL_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLTOALL_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE");
-
- defaultval.d = 32768;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE, /* name */
- &MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "the medium message algorithm will be used if the per-destination message size (sendcount*size(sendtype)) is <= this value and larger than MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE (See also: MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE)");
- rc = MPL_env2int("MPICH_ALLTOALL_MEDIUM_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLTOALL_MEDIUM_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_ALLTOALL_MEDIUM_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLTOALL_MEDIUM_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE");
-
- defaultval.d = 32;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ALLTOALL_THROTTLE, /* name */
- &MPIR_CVAR_ALLTOALL_THROTTLE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "max no. of irecvs/isends posted at a time in some alltoall algorithms. Setting it to 0 causes all irecvs/isends to be posted at once");
- rc = MPL_env2int("MPICH_ALLTOALL_THROTTLE", &(MPIR_CVAR_ALLTOALL_THROTTLE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLTOALL_THROTTLE");
- rc = MPL_env2int("MPIR_PARAM_ALLTOALL_THROTTLE", &(MPIR_CVAR_ALLTOALL_THROTTLE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLTOALL_THROTTLE");
- rc = MPL_env2int("MPIR_CVAR_ALLTOALL_THROTTLE", &(MPIR_CVAR_ALLTOALL_THROTTLE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLTOALL_THROTTLE");
-
- defaultval.d = 2048;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE, /* name */
- &MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "use the short message algorithm for intercommunicator MPI_Scatter if the send buffer size is < this value (in bytes)");
- rc = MPL_env2int("MPICH_SCATTER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_SCATTER_INTER_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_SCATTER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_SCATTER_INTER_SHORT_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE");
-
- defaultval.d = 32768;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE, /* name */
- &MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "The smallest message size that will be used for the pipelined, large-message, ring algorithm in the MPI_Allgatherv implementation.");
- rc = MPL_env2int("MPICH_ALLGATHERV_PIPELINE_MSG_SIZE", &(MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLGATHERV_PIPELINE_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_ALLGATHERV_PIPELINE_MSG_SIZE", &(MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLGATHERV_PIPELINE_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE", &(MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE");
-
- defaultval.d = 2;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CTXID_EAGER_SIZE, /* name */
- &MPIR_CVAR_CTXID_EAGER_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "THREADS", /* category */
- "The MPIR_CVAR_CTXID_EAGER_SIZE environment variable allows you to specify how many words in the context ID mask will be set aside for the eager allocation protocol. If the application is running out of context IDs, reducing this value may help.");
- rc = MPL_env2int("MPICH_CTXID_EAGER_SIZE", &(MPIR_CVAR_CTXID_EAGER_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CTXID_EAGER_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CTXID_EAGER_SIZE", &(MPIR_CVAR_CTXID_EAGER_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CTXID_EAGER_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CTXID_EAGER_SIZE", &(MPIR_CVAR_CTXID_EAGER_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CTXID_EAGER_SIZE");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_COMM_SPLIT_USE_QSORT, /* name */
- &MPIR_CVAR_COMM_SPLIT_USE_QSORT, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COMMUNICATOR", /* category */
- "Use qsort(3) in the implementation of MPI_Comm_split instead of bubble sort.");
- rc = MPL_env2bool("MPICH_COMM_SPLIT_USE_QSORT", &(MPIR_CVAR_COMM_SPLIT_USE_QSORT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_COMM_SPLIT_USE_QSORT");
- rc = MPL_env2bool("MPIR_PARAM_COMM_SPLIT_USE_QSORT", &(MPIR_CVAR_COMM_SPLIT_USE_QSORT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_COMM_SPLIT_USE_QSORT");
- rc = MPL_env2bool("MPIR_CVAR_COMM_SPLIT_USE_QSORT", &(MPIR_CVAR_COMM_SPLIT_USE_QSORT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_COMM_SPLIT_USE_QSORT");
-
- defaultval.d = 64;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_PROCTABLE_SIZE, /* name */
- &MPIR_CVAR_PROCTABLE_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "DEBUGGER", /* category */
- "Size of the \"MPIR\" debugger interface proctable (process table).");
- rc = MPL_env2int("MPICH_PROCTABLE_SIZE", &(MPIR_CVAR_PROCTABLE_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PROCTABLE_SIZE");
- rc = MPL_env2int("MPIR_PARAM_PROCTABLE_SIZE", &(MPIR_CVAR_PROCTABLE_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PROCTABLE_SIZE");
- rc = MPL_env2int("MPIR_CVAR_PROCTABLE_SIZE", &(MPIR_CVAR_PROCTABLE_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PROCTABLE_SIZE");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_PROCTABLE_PRINT, /* name */
- &MPIR_CVAR_PROCTABLE_PRINT, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "DEBUGGER", /* category */
- "If true, dump the proctable entries at MPIR_WaitForDebugger-time.");
- rc = MPL_env2bool("MPICH_PROCTABLE_PRINT", &(MPIR_CVAR_PROCTABLE_PRINT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PROCTABLE_PRINT");
- rc = MPL_env2bool("MPIR_PARAM_PROCTABLE_PRINT", &(MPIR_CVAR_PROCTABLE_PRINT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PROCTABLE_PRINT");
- rc = MPL_env2bool("MPIR_CVAR_PROCTABLE_PRINT", &(MPIR_CVAR_PROCTABLE_PRINT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PROCTABLE_PRINT");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_PRINT_ERROR_STACK, /* name */
- &MPIR_CVAR_PRINT_ERROR_STACK, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_LOCAL,
- defaultval,
- "ERROR_HANDLING", /* category */
- "If true, print an error stack trace at error handling time.");
- rc = MPL_env2bool("MPICH_PRINT_ERROR_STACK", &(MPIR_CVAR_PRINT_ERROR_STACK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PRINT_ERROR_STACK");
- rc = MPL_env2bool("MPIR_PARAM_PRINT_ERROR_STACK", &(MPIR_CVAR_PRINT_ERROR_STACK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PRINT_ERROR_STACK");
- rc = MPL_env2bool("MPIR_CVAR_PRINT_ERROR_STACK", &(MPIR_CVAR_PRINT_ERROR_STACK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PRINT_ERROR_STACK");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CHOP_ERROR_STACK, /* name */
- &MPIR_CVAR_CHOP_ERROR_STACK, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_LOCAL,
- defaultval,
- "ERROR_HANDLING", /* category */
- "If >0, truncate error stack output lines this many characters wide. If 0, do not truncate, and if <0 use a sensible default.");
- rc = MPL_env2int("MPICH_CHOP_ERROR_STACK", &(MPIR_CVAR_CHOP_ERROR_STACK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CHOP_ERROR_STACK");
- rc = MPL_env2int("MPIR_PARAM_CHOP_ERROR_STACK", &(MPIR_CVAR_CHOP_ERROR_STACK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CHOP_ERROR_STACK");
- rc = MPL_env2int("MPIR_CVAR_CHOP_ERROR_STACK", &(MPIR_CVAR_CHOP_ERROR_STACK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CHOP_ERROR_STACK");
-
- defaultval.str = (char *)NULL;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_CHAR,
- MPIR_CVAR_NAMESERV_FILE_PUBDIR, /* name */
- &MPIR_CVAR_NAMESERV_FILE_PUBDIR, /* address */
- MPIR_CVAR_MAX_STRLEN, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "PROCESS_MANAGER", /* category */
- "Sets the directory to use for MPI service publishing in the file nameserv implementation. Allows the user to override where the publish and lookup information is placed for connect/accept based applications.");
- MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_NAMESERV_FILE_PUBDIR, &tmp_str);
- rc = MPL_env2str("MPICH_NAMEPUB_DIR", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NAMEPUB_DIR");
- rc = MPL_env2str("MPIR_PARAM_NAMEPUB_DIR", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NAMEPUB_DIR");
- rc = MPL_env2str("MPIR_CVAR_NAMEPUB_DIR", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NAMEPUB_DIR");
- rc = MPL_env2str("MPICH_NAMESERV_FILE_PUBDIR", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NAMESERV_FILE_PUBDIR");
- rc = MPL_env2str("MPIR_PARAM_NAMESERV_FILE_PUBDIR", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NAMESERV_FILE_PUBDIR");
- rc = MPL_env2str("MPIR_CVAR_NAMESERV_FILE_PUBDIR", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NAMESERV_FILE_PUBDIR");
- if (tmp_str != NULL) {
- MPIR_CVAR_NAMESERV_FILE_PUBDIR = MPIU_Strdup(tmp_str);
- MPIR_CVAR_assert(MPIR_CVAR_NAMESERV_FILE_PUBDIR);
- if (MPIR_CVAR_NAMESERV_FILE_PUBDIR == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_NAMESERV_FILE_PUBDIR");
- goto fn_fail;
- }
- }
- else {
- MPIR_CVAR_NAMESERV_FILE_PUBDIR = NULL;
- }
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ABORT_ON_LEAKED_HANDLES, /* name */
- &MPIR_CVAR_ABORT_ON_LEAKED_HANDLES, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "MEMORY", /* category */
- "If true, MPI will call MPI_Abort at MPI_Finalize if any MPI object handles have been leaked. For example, if MPI_Comm_dup is called without calling a corresponding MPI_Comm_free. For uninteresting reasons, enabling this option may prevent all known object leaks from being reported. MPICH must have been configure with \"--enable-g=handlealloc\" or better in order for this functionality to work.");
- rc = MPL_env2bool("MPICH_ABORT_ON_LEAKED_HANDLES", &(MPIR_CVAR_ABORT_ON_LEAKED_HANDLES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ABORT_ON_LEAKED_HANDLES");
- rc = MPL_env2bool("MPIR_PARAM_ABORT_ON_LEAKED_HANDLES", &(MPIR_CVAR_ABORT_ON_LEAKED_HANDLES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ABORT_ON_LEAKED_HANDLES");
- rc = MPL_env2bool("MPIR_CVAR_ABORT_ON_LEAKED_HANDLES", &(MPIR_CVAR_ABORT_ON_LEAKED_HANDLES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ABORT_ON_LEAKED_HANDLES");
-
- defaultval.d = 1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_COLL_ALIAS_CHECK, /* name */
- &MPIR_CVAR_COLL_ALIAS_CHECK, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "COLLECTIVE", /* category */
- "Enable checking of aliasing in collective operations");
- rc = MPL_env2int("MPICH_COLL_ALIAS_CHECK", &(MPIR_CVAR_COLL_ALIAS_CHECK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_COLL_ALIAS_CHECK");
- rc = MPL_env2int("MPIR_PARAM_COLL_ALIAS_CHECK", &(MPIR_CVAR_COLL_ALIAS_CHECK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_COLL_ALIAS_CHECK");
- rc = MPL_env2int("MPIR_CVAR_COLL_ALIAS_CHECK", &(MPIR_CVAR_COLL_ALIAS_CHECK));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_COLL_ALIAS_CHECK");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_ENABLE_HCOLL, /* name */
- &MPIR_CVAR_CH3_ENABLE_HCOLL, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "If true, enable HCOLL collectives.");
- rc = MPL_env2bool("MPICH_CH3_ENABLE_HCOLL", &(MPIR_CVAR_CH3_ENABLE_HCOLL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_ENABLE_HCOLL");
- rc = MPL_env2bool("MPIR_PARAM_CH3_ENABLE_HCOLL", &(MPIR_CVAR_CH3_ENABLE_HCOLL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_ENABLE_HCOLL");
- rc = MPL_env2bool("MPIR_CVAR_CH3_ENABLE_HCOLL", &(MPIR_CVAR_CH3_ENABLE_HCOLL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_ENABLE_HCOLL");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_NOLOCAL, /* name */
- &MPIR_CVAR_CH3_NOLOCAL, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "If true, force all processes to operate as though all processes are located on another node. For example, this disables shared memory communication hierarchical collectives.");
- rc = MPL_env2bool("MPICH_CH3_NO_LOCAL", &(MPIR_CVAR_CH3_NOLOCAL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_NO_LOCAL");
- rc = MPL_env2bool("MPIR_PARAM_CH3_NO_LOCAL", &(MPIR_CVAR_CH3_NOLOCAL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_NO_LOCAL");
- rc = MPL_env2bool("MPIR_CVAR_CH3_NO_LOCAL", &(MPIR_CVAR_CH3_NOLOCAL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_NO_LOCAL");
- rc = MPL_env2bool("MPICH_CH3_NOLOCAL", &(MPIR_CVAR_CH3_NOLOCAL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_NOLOCAL");
- rc = MPL_env2bool("MPIR_PARAM_CH3_NOLOCAL", &(MPIR_CVAR_CH3_NOLOCAL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_NOLOCAL");
- rc = MPL_env2bool("MPIR_CVAR_CH3_NOLOCAL", &(MPIR_CVAR_CH3_NOLOCAL));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_NOLOCAL");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_ODD_EVEN_CLIQUES, /* name */
- &MPIR_CVAR_CH3_ODD_EVEN_CLIQUES, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "If true, odd procs on a node are seen as local to each other, and even procs on a node are seen as local to each other. Used for debugging on a single machine.");
- rc = MPL_env2bool("MPICH_CH3_EVEN_ODD_CLIQUES", &(MPIR_CVAR_CH3_ODD_EVEN_CLIQUES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_EVEN_ODD_CLIQUES");
- rc = MPL_env2bool("MPIR_PARAM_CH3_EVEN_ODD_CLIQUES", &(MPIR_CVAR_CH3_ODD_EVEN_CLIQUES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_EVEN_ODD_CLIQUES");
- rc = MPL_env2bool("MPIR_CVAR_CH3_EVEN_ODD_CLIQUES", &(MPIR_CVAR_CH3_ODD_EVEN_CLIQUES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_EVEN_ODD_CLIQUES");
- rc = MPL_env2bool("MPICH_CH3_ODD_EVEN_CLIQUES", &(MPIR_CVAR_CH3_ODD_EVEN_CLIQUES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_ODD_EVEN_CLIQUES");
- rc = MPL_env2bool("MPIR_PARAM_CH3_ODD_EVEN_CLIQUES", &(MPIR_CVAR_CH3_ODD_EVEN_CLIQUES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_ODD_EVEN_CLIQUES");
- rc = MPL_env2bool("MPIR_CVAR_CH3_ODD_EVEN_CLIQUES", &(MPIR_CVAR_CH3_ODD_EVEN_CLIQUES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_ODD_EVEN_CLIQUES");
-
- defaultval.d = 131072;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE, /* name */
- &MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "This cvar controls the message size at which CH3 switches from eager to rendezvous mode.");
- rc = MPL_env2int("MPICH_CH3_EAGER_MAX_MSG_SIZE", &(MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_EAGER_MAX_MSG_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_EAGER_MAX_MSG_SIZE", &(MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_EAGER_MAX_MSG_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE", &(MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE");
-
- defaultval.d = 262144;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_SLOTS_SIZE, /* name */
- &MPIR_CVAR_CH3_RMA_SLOTS_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Number of RMA slots during window creation. Each slot contains a linked list of target elements. The distribution of ranks among slots follows a round-robin pattern. Requires a positive value.");
- rc = MPL_env2int("MPICH_CH3_RMA_SLOTS_SIZE", &(MPIR_CVAR_CH3_RMA_SLOTS_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_SLOTS_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_SLOTS_SIZE", &(MPIR_CVAR_CH3_RMA_SLOTS_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_SLOTS_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_SLOTS_SIZE", &(MPIR_CVAR_CH3_RMA_SLOTS_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_SLOTS_SIZE");
-
- defaultval.d = 655360;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES, /* name */
- &MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Size (in bytes) of available lock data this window can provided. If current buffered lock data is more than this value, the process will drop the upcoming operation data. Requires a positive calue.");
- rc = MPL_env2int("MPICH_CH3_RMA_TARGET_LOCK_DATA_BYTES", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_LOCK_DATA_BYTES");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_LOCK_DATA_BYTES", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_LOCK_DATA_BYTES");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES");
-
- defaultval.d = 65536;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE, /* name */
- &MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Specify the threshold of data size of a RMA operation which can be piggybacked with a LOCK message. It is always a positive value and should not be smaller than MPIDI_RMA_IMMED_BYTES. If user sets it as a small value, for middle and large data size, we will lose performance because of always waiting for round-trip of LOCK synchronization; if user sets it as a large value, we need to consume more memory on target side to buffer this lock request when lock is not satisfied.");
- rc = MPL_env2int("MPICH_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE", &(MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE", &(MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE", &(MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE");
-
- defaultval.d = 1024;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM, /* name */
- &MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Specify the threshold of switching the algorithm used in FENCE from the basic algorithm to the scalable algorithm. The value can be nagative, zero or positive. When the number of processes is larger than or equal to this value, FENCE will use a scalable algorithm which do not use O(P) data structure; when the number of processes is smaller than the value, FENCE will use a basic but fast algorithm which requires an O(P) data structure.");
- rc = MPL_env2int("MPICH_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM", &(MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM", &(MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM", &(MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING, /* name */
- &MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Specify if delay issuing of RMA operations for piggybacking LOCK/UNLOCK/FLUSH is enabled. It can be either 0 or 1. When it is set to 1, the issuing of LOCK message is delayed until origin process see the first RMA operation and piggyback LOCK with that operation, and the origin process always keeps the current last operation until the ending synchronization call in order to piggyback UNLOCK/FLUSH with that operation. When it is set to 0, in WIN_LOCK/UNLOCK case, the LOCK message [...]
- rc = MPL_env2int("MPICH_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING", &(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING", &(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING", &(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING");
-
- defaultval.d = 65536;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD, /* name */
- &MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Threshold of number of active requests to trigger blocking waiting in operation routines. When the value is negative, we never blockingly wait in operation routines. When the value is zero, we always trigger blocking waiting in operation routines to wait until no. of active requests becomes zero. When the value is positive, we do blocking waiting in operation routines to wait until no. of active requests being reduced to this value.");
- rc = MPL_env2int("MPICH_CH3_RMA_ACTIVE_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_ACTIVE_REQ_THRESHOLD");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_ACTIVE_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_ACTIVE_REQ_THRESHOLD");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD");
-
- defaultval.d = 128;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD, /* name */
- &MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Threshold at which the RMA implementation attempts to complete requests while completing RMA operations and while using the lazy synchonization approach. Change this value if programs fail because they run out of requests or other internal resources");
- rc = MPL_env2int("MPICH_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD");
-
- defaultval.d = 256;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE, /* name */
- &MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Size of the window-private RMA operations pool (in number of operations) that stores information about RMA operations that could not be issued immediately. Requires a positive value.");
- rc = MPL_env2int("MPICH_CH3_RMA_OP_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_OP_WIN_POOL_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_OP_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_OP_WIN_POOL_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE");
-
- defaultval.d = 16384;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE, /* name */
- &MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Size of the Global RMA operations pool (in number of operations) that stores information about RMA operations that could not be issued immediatly. Requires a positive value.");
- rc = MPL_env2int("MPICH_CH3_RMA_OP_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_OP_GLOBAL_POOL_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_OP_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_OP_GLOBAL_POOL_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE");
-
- defaultval.d = 256;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE, /* name */
- &MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Size of the window-private RMA target pool (in number of targets) that stores information about RMA targets that could not be issued immediately. Requires a positive value.");
- rc = MPL_env2int("MPICH_CH3_RMA_TARGET_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_WIN_POOL_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_WIN_POOL_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE");
-
- defaultval.d = 16384;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE, /* name */
- &MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Size of the Global RMA targets pool (in number of targets) that stores information about RMA targets that could not be issued immediatly. Requires a positive value.");
- rc = MPL_env2int("MPICH_CH3_RMA_TARGET_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_GLOBAL_POOL_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_GLOBAL_POOL_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE");
-
- defaultval.d = 256;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE, /* name */
- &MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "Size of the window-private RMA lock entries pool (in number of lock entries) that stores information about RMA lock requests that could not be satisfied immediatly. Requires a positive value.");
- rc = MPL_env2int("MPICH_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE");
- rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE");
- rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_ENABLE_FT, /* name */
- &MPIR_CVAR_ENABLE_FT, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "FT", /* category */
- "Enable fault tolerance functions");
- rc = MPL_env2bool("MPICH_ENABLE_FT", &(MPIR_CVAR_ENABLE_FT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_FT");
- rc = MPL_env2bool("MPIR_PARAM_ENABLE_FT", &(MPIR_CVAR_ENABLE_FT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_FT");
- rc = MPL_env2bool("MPIR_CVAR_ENABLE_FT", &(MPIR_CVAR_ENABLE_FT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_FT");
-
- defaultval.d = -1;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ, /* name */
- &MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "This cvar controls the message size at which Nemesis switches from eager to rendezvous mode for shared memory. If this cvar is set to -1, then Nemesis will choose an appropriate value.");
- rc = MPL_env2int("MPICH_NEMESIS_SHM_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_SHM_EAGER_MAX_SZ");
- rc = MPL_env2int("MPIR_PARAM_NEMESIS_SHM_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_SHM_EAGER_MAX_SZ");
- rc = MPL_env2int("MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ");
-
- defaultval.d = -2;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ, /* name */
- &MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "This cvar controls the message size at which Nemesis switches from eager to rendezvous mode for ready-send messages. If this cvar is set to -1, then ready messages will always be sent eagerly. If this cvar is set to -2, then Nemesis will choose an appropriate value.");
- rc = MPL_env2int("MPICH_NEMESIS_SHM_READY_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_SHM_READY_EAGER_MAX_SZ");
- rc = MPL_env2int("MPIR_PARAM_NEMESIS_SHM_READY_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_SHM_READY_EAGER_MAX_SZ");
- rc = MPL_env2int("MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_ENABLE_CKPOINT, /* name */
- &MPIR_CVAR_NEMESIS_ENABLE_CKPOINT, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "If true, enables checkpointing support and returns an error if checkpointing library cannot be initialized.");
- rc = MPL_env2bool("MPICH_NEMESIS_ENABLE_CKPOINT", &(MPIR_CVAR_NEMESIS_ENABLE_CKPOINT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_ENABLE_CKPOINT");
- rc = MPL_env2bool("MPIR_PARAM_NEMESIS_ENABLE_CKPOINT", &(MPIR_CVAR_NEMESIS_ENABLE_CKPOINT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_ENABLE_CKPOINT");
- rc = MPL_env2bool("MPIR_CVAR_NEMESIS_ENABLE_CKPOINT", &(MPIR_CVAR_NEMESIS_ENABLE_CKPOINT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_ENABLE_CKPOINT");
-
- defaultval.str = (char *)"";
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_CHAR,
- MPIR_CVAR_NEMESIS_NETMOD, /* name */
- &MPIR_CVAR_NEMESIS_NETMOD, /* address */
- MPIR_CVAR_MAX_STRLEN, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "If non-empty, this cvar specifies which network module should be used for communication.");
- MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_NEMESIS_NETMOD, &tmp_str);
- rc = MPL_env2str("MPICH_NEMESIS_NETMOD", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_NETMOD");
- rc = MPL_env2str("MPIR_PARAM_NEMESIS_NETMOD", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_NETMOD");
- rc = MPL_env2str("MPIR_CVAR_NEMESIS_NETMOD", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_NETMOD");
- if (tmp_str != NULL) {
- MPIR_CVAR_NEMESIS_NETMOD = MPIU_Strdup(tmp_str);
- MPIR_CVAR_assert(MPIR_CVAR_NEMESIS_NETMOD);
- if (MPIR_CVAR_NEMESIS_NETMOD == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_NEMESIS_NETMOD");
- goto fn_fail;
- }
- }
- else {
- MPIR_CVAR_NEMESIS_NETMOD = NULL;
- }
-
- defaultval.d = 2097152;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD, /* name */
- &MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "Messages larger than this size will use the \"dma\" (knem) intranode LMT implementation, if it is enabled and available.");
- rc = MPL_env2int("MPICH_NEMESIS_LMT_DMA_THRESHOLD", &(MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_LMT_DMA_THRESHOLD");
- rc = MPL_env2int("MPIR_PARAM_NEMESIS_LMT_DMA_THRESHOLD", &(MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_LMT_DMA_THRESHOLD");
- rc = MPL_env2int("MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD", &(MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD");
-
- defaultval.d = 1000;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_POLLS_BEFORE_YIELD, /* name */
- &MPIR_CVAR_POLLS_BEFORE_YIELD, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "When MPICH is in a busy waiting loop, it will periodically call a function to yield the processor. This cvar sets the number of loops before the yield function is called. A value of 0 disables yielding.");
- rc = MPL_env2int("MPICH_POLLS_BEFORE_YIELD", &(MPIR_CVAR_POLLS_BEFORE_YIELD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_POLLS_BEFORE_YIELD");
- rc = MPL_env2int("MPIR_PARAM_POLLS_BEFORE_YIELD", &(MPIR_CVAR_POLLS_BEFORE_YIELD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_POLLS_BEFORE_YIELD");
- rc = MPL_env2int("MPIR_CVAR_POLLS_BEFORE_YIELD", &(MPIR_CVAR_POLLS_BEFORE_YIELD));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_POLLS_BEFORE_YIELD");
-
- defaultval.str = (char *)NULL;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_CHAR,
- MPIR_CVAR_OFI_USE_PROVIDER, /* name */
- &MPIR_CVAR_OFI_USE_PROVIDER, /* address */
- MPIR_CVAR_MAX_STRLEN, /* count */
- MPI_T_VERBOSITY_MPIDEV_DETAIL,
- MPI_T_SCOPE_LOCAL,
- defaultval,
- "DEVELOPER", /* category */
- "If non-null, choose an OFI provider by name");
- MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_OFI_USE_PROVIDER, &tmp_str);
- rc = MPL_env2str("MPICH_OFI_USE_PROVIDER", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_OFI_USE_PROVIDER");
- rc = MPL_env2str("MPIR_PARAM_OFI_USE_PROVIDER", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_OFI_USE_PROVIDER");
- rc = MPL_env2str("MPIR_CVAR_OFI_USE_PROVIDER", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_OFI_USE_PROVIDER");
- if (tmp_str != NULL) {
- MPIR_CVAR_OFI_USE_PROVIDER = MPIU_Strdup(tmp_str);
- MPIR_CVAR_assert(MPIR_CVAR_OFI_USE_PROVIDER);
- if (MPIR_CVAR_OFI_USE_PROVIDER == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_OFI_USE_PROVIDER");
- goto fn_fail;
- }
- }
- else {
- MPIR_CVAR_OFI_USE_PROVIDER = NULL;
- }
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_OFI_DUMP_PROVIDERS, /* name */
- &MPIR_CVAR_OFI_DUMP_PROVIDERS, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_MPIDEV_DETAIL,
- MPI_T_SCOPE_LOCAL,
- defaultval,
- "DEVELOPER", /* category */
- "If true, dump provider information at init");
- rc = MPL_env2bool("MPICH_OFI_DUMP_PROVIDERS", &(MPIR_CVAR_OFI_DUMP_PROVIDERS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_OFI_DUMP_PROVIDERS");
- rc = MPL_env2bool("MPIR_PARAM_OFI_DUMP_PROVIDERS", &(MPIR_CVAR_OFI_DUMP_PROVIDERS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_OFI_DUMP_PROVIDERS");
- rc = MPL_env2bool("MPIR_CVAR_OFI_DUMP_PROVIDERS", &(MPIR_CVAR_OFI_DUMP_PROVIDERS));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_OFI_DUMP_PROVIDERS");
-
- defaultval.str = (char *)NULL;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_CHAR,
- MPIR_CVAR_CH3_INTERFACE_HOSTNAME, /* name */
- &MPIR_CVAR_CH3_INTERFACE_HOSTNAME, /* address */
- MPIR_CVAR_MAX_STRLEN, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_LOCAL,
- defaultval,
- "CH3", /* category */
- "If non-NULL, this cvar specifies the IP address that other processes should use when connecting to this process. This cvar is mutually exclusive with the MPIR_CVAR_CH3_NETWORK_IFACE cvar and it is an error to set them both.");
- MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_CH3_INTERFACE_HOSTNAME, &tmp_str);
- rc = MPL_env2str("MPICH_INTERFACE_HOSTNAME", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_INTERFACE_HOSTNAME");
- rc = MPL_env2str("MPIR_PARAM_INTERFACE_HOSTNAME", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_INTERFACE_HOSTNAME");
- rc = MPL_env2str("MPIR_CVAR_INTERFACE_HOSTNAME", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_INTERFACE_HOSTNAME");
- rc = MPL_env2str("MPICH_CH3_INTERFACE_HOSTNAME", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_INTERFACE_HOSTNAME");
- rc = MPL_env2str("MPIR_PARAM_CH3_INTERFACE_HOSTNAME", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_INTERFACE_HOSTNAME");
- rc = MPL_env2str("MPIR_CVAR_CH3_INTERFACE_HOSTNAME", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_INTERFACE_HOSTNAME");
- if (tmp_str != NULL) {
- MPIR_CVAR_CH3_INTERFACE_HOSTNAME = MPIU_Strdup(tmp_str);
- MPIR_CVAR_assert(MPIR_CVAR_CH3_INTERFACE_HOSTNAME);
- if (MPIR_CVAR_CH3_INTERFACE_HOSTNAME == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_CH3_INTERFACE_HOSTNAME");
- goto fn_fail;
- }
- }
- else {
- MPIR_CVAR_CH3_INTERFACE_HOSTNAME = NULL;
- }
-
- {
- MPIR_T_cvar_range_value_t tmp = {0,0};
- defaultval.range = tmp;
- }
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_CH3_PORT_RANGE, /* name */
- &MPIR_CVAR_CH3_PORT_RANGE, /* address */
- 2, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "The MPIR_CVAR_CH3_PORT_RANGE environment variable allows you to specify the range of TCP ports to be used by the process manager and the MPICH library. The format of this variable is <low>:<high>. To specify any available port, use 0:0.");
- rc = MPL_env2range("MPICH_PORTRANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PORTRANGE");
- rc = MPL_env2range("MPICH_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PORT_RANGE");
- rc = MPL_env2range("MPIR_PARAM_PORTRANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PORTRANGE");
- rc = MPL_env2range("MPIR_PARAM_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PORT_RANGE");
- rc = MPL_env2range("MPIR_CVAR_PORTRANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PORTRANGE");
- rc = MPL_env2range("MPIR_CVAR_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PORT_RANGE");
- rc = MPL_env2range("MPICH_CH3_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_PORT_RANGE");
- rc = MPL_env2range("MPIR_PARAM_CH3_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_PORT_RANGE");
- rc = MPL_env2range("MPIR_CVAR_CH3_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_PORT_RANGE");
-
- defaultval.str = (char *)NULL;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_CHAR,
- MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, /* name */
- &MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, /* address */
- MPIR_CVAR_MAX_STRLEN, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "If non-NULL, this cvar specifies which pseudo-ethernet interface the tcp netmod should use (e.g., \"eth1\", \"ib0\"). Note, this is a Linux-specific cvar. This cvar is mutually exclusive with the MPIR_CVAR_CH3_INTERFACE_HOSTNAME cvar and it is an error to set them both.");
- MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, &tmp_str);
- rc = MPL_env2str("MPICH_NETWORK_IFACE", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NETWORK_IFACE");
- rc = MPL_env2str("MPIR_PARAM_NETWORK_IFACE", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NETWORK_IFACE");
- rc = MPL_env2str("MPIR_CVAR_NETWORK_IFACE", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NETWORK_IFACE");
- rc = MPL_env2str("MPICH_NEMESIS_TCP_NETWORK_IFACE", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_TCP_NETWORK_IFACE");
- rc = MPL_env2str("MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE");
- rc = MPL_env2str("MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE", &tmp_str);
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE");
- if (tmp_str != NULL) {
- MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = MPIU_Strdup(tmp_str);
- MPIR_CVAR_assert(MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE);
- if (MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE == NULL) {
- MPIU_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE");
- goto fn_fail;
- }
- }
- else {
- MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = NULL;
- }
-
- defaultval.d = 10;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES, /* name */
- &MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "NEMESIS", /* category */
- "This cvar controls the number of times to retry the gethostbyname() function before giving up.");
- rc = MPL_env2int("MPICH_NEMESIS_TCP_HOST_LOOKUP_RETRIES", &(MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_TCP_HOST_LOOKUP_RETRIES");
- rc = MPL_env2int("MPIR_PARAM_NEMESIS_TCP_HOST_LOOKUP_RETRIES", &(MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_TCP_HOST_LOOKUP_RETRIES");
- rc = MPL_env2int("MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES", &(MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT, /* name */
- &MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "If true, force mxm to connect all processes at initialization time.");
- rc = MPL_env2bool("MPICH_NEMESIS_MXM_BULK_CONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_MXM_BULK_CONNECT");
- rc = MPL_env2bool("MPIR_PARAM_NEMESIS_MXM_BULK_CONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_MXM_BULK_CONNECT");
- rc = MPL_env2bool("MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT, /* name */
- &MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "If true, force mxm to disconnect all processes at finalization time.");
- rc = MPL_env2bool("MPICH_NEMESIS_MXM_BULK_DISCONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_MXM_BULK_DISCONNECT");
- rc = MPL_env2bool("MPIR_PARAM_NEMESIS_MXM_BULK_DISCONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_MXM_BULK_DISCONNECT");
- rc = MPL_env2bool("MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT");
-
- defaultval.d = 0;
- MPIR_T_CVAR_REGISTER_STATIC(
- MPI_INT,
- MPIR_CVAR_NEMESIS_MXM_HUGEPAGE, /* name */
- &MPIR_CVAR_NEMESIS_MXM_HUGEPAGE, /* address */
- 1, /* count */
- MPI_T_VERBOSITY_USER_BASIC,
- MPI_T_SCOPE_ALL_EQ,
- defaultval,
- "CH3", /* category */
- "If true, mxm tries detecting hugepage support. On HPC-X 2.3 and earlier, this might cause problems on Ubuntu and other platforms even if the system provides hugepage support.");
- rc = MPL_env2bool("MPICH_NEMESIS_MXM_HUGEPAGE", &(MPIR_CVAR_NEMESIS_MXM_HUGEPAGE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_MXM_HUGEPAGE");
- rc = MPL_env2bool("MPIR_PARAM_NEMESIS_MXM_HUGEPAGE", &(MPIR_CVAR_NEMESIS_MXM_HUGEPAGE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_MXM_HUGEPAGE");
- rc = MPL_env2bool("MPIR_CVAR_NEMESIS_MXM_HUGEPAGE", &(MPIR_CVAR_NEMESIS_MXM_HUGEPAGE));
- MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_MXM_HUGEPAGE");
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-int MPIR_T_cvar_finalize(void)
-{
- int mpi_errno = MPI_SUCCESS;
-
- if (MPIR_CVAR_DEFAULT_THREAD_LEVEL != NULL) {
- MPIU_Free(MPIR_CVAR_DEFAULT_THREAD_LEVEL);
- MPIR_CVAR_DEFAULT_THREAD_LEVEL = NULL;
- }
-
- if (MPIR_CVAR_NAMESERV_FILE_PUBDIR != NULL) {
- MPIU_Free(MPIR_CVAR_NAMESERV_FILE_PUBDIR);
- MPIR_CVAR_NAMESERV_FILE_PUBDIR = NULL;
- }
-
- if (MPIR_CVAR_NEMESIS_NETMOD != NULL) {
- MPIU_Free(MPIR_CVAR_NEMESIS_NETMOD);
- MPIR_CVAR_NEMESIS_NETMOD = NULL;
- }
-
- if (MPIR_CVAR_OFI_USE_PROVIDER != NULL) {
- MPIU_Free(MPIR_CVAR_OFI_USE_PROVIDER);
- MPIR_CVAR_OFI_USE_PROVIDER = NULL;
- }
-
- if (MPIR_CVAR_CH3_INTERFACE_HOSTNAME != NULL) {
- MPIU_Free(MPIR_CVAR_CH3_INTERFACE_HOSTNAME);
- MPIR_CVAR_CH3_INTERFACE_HOSTNAME = NULL;
- }
-
- if (MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE != NULL) {
- MPIU_Free(MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE);
- MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = NULL;
- }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
diff --git a/src/util/cvar/mpir_cvars.c b/src/util/cvar/mpir_cvars.c
new file mode 100644
index 0000000..35a6c73
--- /dev/null
+++ b/src/util/cvar/mpir_cvars.c
@@ -0,0 +1,1923 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2010 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+/* automatically generated
+ * by: ./maint/extractcvars
+ * at: Sun Nov 13 09:12:25 2016
+ *
+ * DO NOT EDIT!!!
+ */
+
+#include "mpiimpl.h"
+
+/* Actual storage for cvars */
+int MPIR_CVAR_DIMS_VERBOSE = 0;
+#if defined MPID_DEBUG_HOLD
+int MPIR_CVAR_DEBUG_HOLD = MPID_DEBUG_HOLD;
+#else
+int MPIR_CVAR_DEBUG_HOLD = 0;
+#endif /* MPID_DEBUG_HOLD */
+
+#if defined MPID_ERROR_CHECKING
+int MPIR_CVAR_ERROR_CHECKING = MPID_ERROR_CHECKING;
+#else
+int MPIR_CVAR_ERROR_CHECKING = 1;
+#endif /* MPID_ERROR_CHECKING */
+
+#if defined MPID_ASYNC_PROGRESS
+int MPIR_CVAR_ASYNC_PROGRESS = MPID_ASYNC_PROGRESS;
+#else
+int MPIR_CVAR_ASYNC_PROGRESS = 0;
+#endif /* MPID_ASYNC_PROGRESS */
+
+#if defined MPID_DEFAULT_THREAD_LEVEL
+char * MPIR_CVAR_DEFAULT_THREAD_LEVEL = MPID_DEFAULT_THREAD_LEVEL;
+#else
+char * MPIR_CVAR_DEFAULT_THREAD_LEVEL = (char*)"MPI_THREAD_SINGLE";
+#endif /* MPID_DEFAULT_THREAD_LEVEL */
+
+#if defined MPID_MEMDUMP
+int MPIR_CVAR_MEMDUMP = MPID_MEMDUMP;
+#else
+int MPIR_CVAR_MEMDUMP = 1;
+#endif /* MPID_MEMDUMP */
+
+#if defined MPID_SUPPRESS_ABORT_MESSAGE
+int MPIR_CVAR_SUPPRESS_ABORT_MESSAGE = MPID_SUPPRESS_ABORT_MESSAGE;
+#else
+int MPIR_CVAR_SUPPRESS_ABORT_MESSAGE = 0;
+#endif /* MPID_SUPPRESS_ABORT_MESSAGE */
+
+#if defined MPID_REDUCE_SHORT_MSG_SIZE
+int MPIR_CVAR_REDUCE_SHORT_MSG_SIZE = MPID_REDUCE_SHORT_MSG_SIZE;
+#else
+int MPIR_CVAR_REDUCE_SHORT_MSG_SIZE = 2048;
+#endif /* MPID_REDUCE_SHORT_MSG_SIZE */
+
+#if defined MPID_ENABLE_SMP_REDUCE
+int MPIR_CVAR_ENABLE_SMP_REDUCE = MPID_ENABLE_SMP_REDUCE;
+#else
+int MPIR_CVAR_ENABLE_SMP_REDUCE = 1;
+#endif /* MPID_ENABLE_SMP_REDUCE */
+
+#if defined MPID_MAX_SMP_REDUCE_MSG_SIZE
+int MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE = MPID_MAX_SMP_REDUCE_MSG_SIZE;
+#else
+int MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE = 0;
+#endif /* MPID_MAX_SMP_REDUCE_MSG_SIZE */
+
+#if defined MPID_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE
+int MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE = MPID_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE;
+#else
+int MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE = 524288;
+#endif /* MPID_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE */
+
+#if defined MPID_BCAST_MIN_PROCS
+int MPIR_CVAR_BCAST_MIN_PROCS = MPID_BCAST_MIN_PROCS;
+#else
+int MPIR_CVAR_BCAST_MIN_PROCS = 8;
+#endif /* MPID_BCAST_MIN_PROCS */
+
+#if defined MPID_BCAST_SHORT_MSG_SIZE
+int MPIR_CVAR_BCAST_SHORT_MSG_SIZE = MPID_BCAST_SHORT_MSG_SIZE;
+#else
+int MPIR_CVAR_BCAST_SHORT_MSG_SIZE = 12288;
+#endif /* MPID_BCAST_SHORT_MSG_SIZE */
+
+#if defined MPID_BCAST_LONG_MSG_SIZE
+int MPIR_CVAR_BCAST_LONG_MSG_SIZE = MPID_BCAST_LONG_MSG_SIZE;
+#else
+int MPIR_CVAR_BCAST_LONG_MSG_SIZE = 524288;
+#endif /* MPID_BCAST_LONG_MSG_SIZE */
+
+#if defined MPID_ENABLE_SMP_BCAST
+int MPIR_CVAR_ENABLE_SMP_BCAST = MPID_ENABLE_SMP_BCAST;
+#else
+int MPIR_CVAR_ENABLE_SMP_BCAST = 1;
+#endif /* MPID_ENABLE_SMP_BCAST */
+
+#if defined MPID_MAX_SMP_BCAST_MSG_SIZE
+int MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE = MPID_MAX_SMP_BCAST_MSG_SIZE;
+#else
+int MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE = 0;
+#endif /* MPID_MAX_SMP_BCAST_MSG_SIZE */
+
+#if defined MPID_GATHERV_INTER_SSEND_MIN_PROCS
+int MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS = MPID_GATHERV_INTER_SSEND_MIN_PROCS;
+#else
+int MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS = 32;
+#endif /* MPID_GATHERV_INTER_SSEND_MIN_PROCS */
+
+#if defined MPID_ALLREDUCE_SHORT_MSG_SIZE
+int MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE = MPID_ALLREDUCE_SHORT_MSG_SIZE;
+#else
+int MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE = 2048;
+#endif /* MPID_ALLREDUCE_SHORT_MSG_SIZE */
+
+#if defined MPID_ENABLE_SMP_COLLECTIVES
+int MPIR_CVAR_ENABLE_SMP_COLLECTIVES = MPID_ENABLE_SMP_COLLECTIVES;
+#else
+int MPIR_CVAR_ENABLE_SMP_COLLECTIVES = 1;
+#endif /* MPID_ENABLE_SMP_COLLECTIVES */
+
+#if defined MPID_ENABLE_SMP_ALLREDUCE
+int MPIR_CVAR_ENABLE_SMP_ALLREDUCE = MPID_ENABLE_SMP_ALLREDUCE;
+#else
+int MPIR_CVAR_ENABLE_SMP_ALLREDUCE = 1;
+#endif /* MPID_ENABLE_SMP_ALLREDUCE */
+
+#if defined MPID_MAX_SMP_ALLREDUCE_MSG_SIZE
+int MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE = MPID_MAX_SMP_ALLREDUCE_MSG_SIZE;
+#else
+int MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE = 0;
+#endif /* MPID_MAX_SMP_ALLREDUCE_MSG_SIZE */
+
+#if defined MPID_GATHER_VSMALL_MSG_SIZE
+int MPIR_CVAR_GATHER_VSMALL_MSG_SIZE = MPID_GATHER_VSMALL_MSG_SIZE;
+#else
+int MPIR_CVAR_GATHER_VSMALL_MSG_SIZE = 1024;
+#endif /* MPID_GATHER_VSMALL_MSG_SIZE */
+
+#if defined MPID_GATHER_INTER_SHORT_MSG_SIZE
+int MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE = MPID_GATHER_INTER_SHORT_MSG_SIZE;
+#else
+int MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE = 2048;
+#endif /* MPID_GATHER_INTER_SHORT_MSG_SIZE */
+
+#if defined MPID_ENABLE_SMP_BARRIER
+int MPIR_CVAR_ENABLE_SMP_BARRIER = MPID_ENABLE_SMP_BARRIER;
+#else
+int MPIR_CVAR_ENABLE_SMP_BARRIER = 1;
+#endif /* MPID_ENABLE_SMP_BARRIER */
+
+#if defined MPID_ALLGATHER_SHORT_MSG_SIZE
+int MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE = MPID_ALLGATHER_SHORT_MSG_SIZE;
+#else
+int MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE = 81920;
+#endif /* MPID_ALLGATHER_SHORT_MSG_SIZE */
+
+#if defined MPID_ALLGATHER_LONG_MSG_SIZE
+int MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE = MPID_ALLGATHER_LONG_MSG_SIZE;
+#else
+int MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE = 524288;
+#endif /* MPID_ALLGATHER_LONG_MSG_SIZE */
+
+#if defined MPID_ALLTOALL_SHORT_MSG_SIZE
+int MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE = MPID_ALLTOALL_SHORT_MSG_SIZE;
+#else
+int MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE = 256;
+#endif /* MPID_ALLTOALL_SHORT_MSG_SIZE */
+
+#if defined MPID_ALLTOALL_MEDIUM_MSG_SIZE
+int MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE = MPID_ALLTOALL_MEDIUM_MSG_SIZE;
+#else
+int MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE = 32768;
+#endif /* MPID_ALLTOALL_MEDIUM_MSG_SIZE */
+
+#if defined MPID_ALLTOALL_THROTTLE
+int MPIR_CVAR_ALLTOALL_THROTTLE = MPID_ALLTOALL_THROTTLE;
+#else
+int MPIR_CVAR_ALLTOALL_THROTTLE = 32;
+#endif /* MPID_ALLTOALL_THROTTLE */
+
+#if defined MPID_SCATTER_INTER_SHORT_MSG_SIZE
+int MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE = MPID_SCATTER_INTER_SHORT_MSG_SIZE;
+#else
+int MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE = 2048;
+#endif /* MPID_SCATTER_INTER_SHORT_MSG_SIZE */
+
+#if defined MPID_ALLGATHERV_PIPELINE_MSG_SIZE
+int MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE = MPID_ALLGATHERV_PIPELINE_MSG_SIZE;
+#else
+int MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE = 32768;
+#endif /* MPID_ALLGATHERV_PIPELINE_MSG_SIZE */
+
+#if defined MPID_CTXID_EAGER_SIZE
+int MPIR_CVAR_CTXID_EAGER_SIZE = MPID_CTXID_EAGER_SIZE;
+#else
+int MPIR_CVAR_CTXID_EAGER_SIZE = 2;
+#endif /* MPID_CTXID_EAGER_SIZE */
+
+#if defined MPID_COMM_SPLIT_USE_QSORT
+int MPIR_CVAR_COMM_SPLIT_USE_QSORT = MPID_COMM_SPLIT_USE_QSORT;
+#else
+int MPIR_CVAR_COMM_SPLIT_USE_QSORT = 1;
+#endif /* MPID_COMM_SPLIT_USE_QSORT */
+
+#if defined MPID_PROCTABLE_SIZE
+int MPIR_CVAR_PROCTABLE_SIZE = MPID_PROCTABLE_SIZE;
+#else
+int MPIR_CVAR_PROCTABLE_SIZE = 64;
+#endif /* MPID_PROCTABLE_SIZE */
+
+#if defined MPID_PROCTABLE_PRINT
+int MPIR_CVAR_PROCTABLE_PRINT = MPID_PROCTABLE_PRINT;
+#else
+int MPIR_CVAR_PROCTABLE_PRINT = 0;
+#endif /* MPID_PROCTABLE_PRINT */
+
+#if defined MPID_PRINT_ERROR_STACK
+int MPIR_CVAR_PRINT_ERROR_STACK = MPID_PRINT_ERROR_STACK;
+#else
+int MPIR_CVAR_PRINT_ERROR_STACK = 1;
+#endif /* MPID_PRINT_ERROR_STACK */
+
+#if defined MPID_CHOP_ERROR_STACK
+int MPIR_CVAR_CHOP_ERROR_STACK = MPID_CHOP_ERROR_STACK;
+#else
+int MPIR_CVAR_CHOP_ERROR_STACK = 0;
+#endif /* MPID_CHOP_ERROR_STACK */
+
+char * MPIR_CVAR_NAMESERV_FILE_PUBDIR = (char*)NULL;
+int MPIR_CVAR_NOLOCAL = 0;
+int MPIR_CVAR_ODD_EVEN_CLIQUES = 0;
+#if defined MPID_ABORT_ON_LEAKED_HANDLES
+int MPIR_CVAR_ABORT_ON_LEAKED_HANDLES = MPID_ABORT_ON_LEAKED_HANDLES;
+#else
+int MPIR_CVAR_ABORT_ON_LEAKED_HANDLES = 0;
+#endif /* MPID_ABORT_ON_LEAKED_HANDLES */
+
+#if defined MPID_COLL_ALIAS_CHECK
+int MPIR_CVAR_COLL_ALIAS_CHECK = MPID_COLL_ALIAS_CHECK;
+#else
+int MPIR_CVAR_COLL_ALIAS_CHECK = 1;
+#endif /* MPID_COLL_ALIAS_CHECK */
+
+#if defined MPID_CH4_NETMOD
+char * MPIR_CVAR_CH4_NETMOD = MPID_CH4_NETMOD;
+#else
+char * MPIR_CVAR_CH4_NETMOD = (char*)"";
+#endif /* MPID_CH4_NETMOD */
+
+#if defined MPID_CH4_SHM
+char * MPIR_CVAR_CH4_SHM = MPID_CH4_SHM;
+#else
+char * MPIR_CVAR_CH4_SHM = (char*)"";
+#endif /* MPID_CH4_SHM */
+
+int MPIR_CVAR_CH3_ENABLE_HCOLL = 0;
+int MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE = 131072;
+int MPIR_CVAR_CH3_RMA_SLOTS_SIZE = 262144;
+int MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES = 655360;
+int MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT = 180;
+int MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE = 65536;
+int MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM = 1024;
+int MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING = 0;
+int MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD = 65536;
+int MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD = 128;
+int MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE = 256;
+int MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE = 16384;
+int MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE = 256;
+int MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE = 16384;
+int MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE = 256;
+#if defined MPID_ENABLE_FT
+int MPIR_CVAR_ENABLE_FT = MPID_ENABLE_FT;
+#else
+int MPIR_CVAR_ENABLE_FT = 0;
+#endif /* MPID_ENABLE_FT */
+
+int MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ = -1;
+int MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ = -2;
+int MPIR_CVAR_NEMESIS_ENABLE_CKPOINT = 0;
+char * MPIR_CVAR_NEMESIS_NETMOD = (char*)"";
+int MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD = 2097152;
+int MPIR_CVAR_POLLS_BEFORE_YIELD = 1000;
+#if defined MPID_OFI_USE_PROVIDER
+char * MPIR_CVAR_OFI_USE_PROVIDER = MPID_OFI_USE_PROVIDER;
+#else
+char * MPIR_CVAR_OFI_USE_PROVIDER = (char*)NULL;
+#endif /* MPID_OFI_USE_PROVIDER */
+
+#if defined MPID_OFI_DUMP_PROVIDERS
+int MPIR_CVAR_OFI_DUMP_PROVIDERS = MPID_OFI_DUMP_PROVIDERS;
+#else
+int MPIR_CVAR_OFI_DUMP_PROVIDERS = 0;
+#endif /* MPID_OFI_DUMP_PROVIDERS */
+
+char * MPIR_CVAR_CH3_INTERFACE_HOSTNAME = (char*)NULL;
+MPIR_T_cvar_range_value_t MPIR_CVAR_CH3_PORT_RANGE = {0,0};
+char * MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = (char*)NULL;
+int MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES = 10;
+int MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT = 0;
+int MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT = 0;
+int MPIR_CVAR_NEMESIS_MXM_HUGEPAGE = 0;
+
+#undef FUNCNAME
+#define FUNCNAME MPIR_T_cvar_init
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+int MPIR_T_cvar_init(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int rc;
+ const char *tmp_str;
+ static int initialized = FALSE;
+ MPIR_T_cvar_value_t defaultval;
+
+ /* FIXME any MT issues here? */
+ if (initialized)
+ return MPI_SUCCESS;
+ initialized = TRUE;
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/topo/dims_create.c */
+ MPIR_T_cat_add_desc("DIMS",
+ "Dims_create cvars");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/initthread.c */
+ MPIR_T_cat_add_desc("DEBUGGER",
+ "cvars relevant to the \"MPIR\" debugger interface");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/init.c */
+ MPIR_T_cat_add_desc("THREADS",
+ "multi-threading cvars");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/init/finalize.c */
+ MPIR_T_cat_add_desc("DEVELOPER",
+ "useful for developers working on MPICH itself");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/coll/alltoall.c */
+ MPIR_T_cat_add_desc("COLLECTIVE",
+ "A category for collective communication variables.");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/comm/comm_split.c */
+ MPIR_T_cat_add_desc("COMMUNICATOR",
+ "cvars that control communicator construction and operation");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpi/errhan/errutil.c */
+ MPIR_T_cat_add_desc("ERROR_HANDLING",
+ "cvars that control error handling behavior (stack traces, aborts, etc)");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/nameserv/file/file_nameserv.c */
+ MPIR_T_cat_add_desc("PROCESS_MANAGER",
+ "cvars that control the client-side process manager code");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util/nodemap/build_nodemap.h */
+ MPIR_T_cat_add_desc("NODEMAP",
+ "cvars that control behavior of nodemap");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/util/mem/handlemem.c */
+ MPIR_T_cat_add_desc("MEMORY",
+ "affects memory allocation and usage, including MPI object handles");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch4/src/ch4_init.h */
+ MPIR_T_cat_add_desc("CH4",
+ "cvars that control behavior of the CH4 device");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/src/mpidi_rma.c */
+ MPIR_T_cat_add_desc("CH3",
+ "cvars that control behavior of ch3");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt.c */
+ MPIR_T_cat_add_desc("FT",
+ "cvars that control behavior of fault tolerance");
+
+ /* declared in /tmp/hBL2ZMkkTy/mpich-3.3a2/maint/../src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c */
+ MPIR_T_cat_add_desc("NEMESIS",
+ "cvars that control behavior of the ch3:nemesis channel");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_DIMS_VERBOSE, /* name */
+ &MPIR_CVAR_DIMS_VERBOSE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "DIMS", /* category */
+ "If true, enable verbose output about the actions of the implementation of MPI_Dims_create.");
+ rc = MPL_env2bool("MPICH_DIMS_VERBOSE", &(MPIR_CVAR_DIMS_VERBOSE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_DIMS_VERBOSE");
+ rc = MPL_env2bool("MPIR_PARAM_DIMS_VERBOSE", &(MPIR_CVAR_DIMS_VERBOSE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_DIMS_VERBOSE");
+ rc = MPL_env2bool("MPIR_CVAR_DIMS_VERBOSE", &(MPIR_CVAR_DIMS_VERBOSE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_DIMS_VERBOSE");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_DEBUG_HOLD, /* name */
+ &MPIR_CVAR_DEBUG_HOLD, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "DEBUGGER", /* category */
+ "If true, causes processes to wait in MPI_Init and MPI_Initthread for a debugger to be attached. Once the debugger has attached, the variable 'hold' should be set to 0 in order to allow the process to continue (e.g., in gdb, \"set hold=0\").");
+ rc = MPL_env2bool("MPICH_DEBUG_HOLD", &(MPIR_CVAR_DEBUG_HOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_DEBUG_HOLD");
+ rc = MPL_env2bool("MPIR_PARAM_DEBUG_HOLD", &(MPIR_CVAR_DEBUG_HOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_DEBUG_HOLD");
+ rc = MPL_env2bool("MPIR_CVAR_DEBUG_HOLD", &(MPIR_CVAR_DEBUG_HOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_DEBUG_HOLD");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ERROR_CHECKING, /* name */
+ &MPIR_CVAR_ERROR_CHECKING, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_LOCAL,
+ defaultval,
+ "ERROR_HANDLING", /* category */
+ "If true, perform checks for errors, typically to verify valid inputs to MPI routines. Only effective when MPICH is configured with --enable-error-checking=runtime .");
+ rc = MPL_env2bool("MPICH_ERROR_CHECKING", &(MPIR_CVAR_ERROR_CHECKING));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ERROR_CHECKING");
+ rc = MPL_env2bool("MPIR_PARAM_ERROR_CHECKING", &(MPIR_CVAR_ERROR_CHECKING));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ERROR_CHECKING");
+ rc = MPL_env2bool("MPIR_CVAR_ERROR_CHECKING", &(MPIR_CVAR_ERROR_CHECKING));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ERROR_CHECKING");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ASYNC_PROGRESS, /* name */
+ &MPIR_CVAR_ASYNC_PROGRESS, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "THREADS", /* category */
+ "If set to true, MPICH will initiate an additional thread to make asynchronous progress on all communication operations including point-to-point, collective, one-sided operations and I/O. Setting this variable will automatically increase the thread-safety level to MPI_THREAD_MULTIPLE. While this improves the progress semantics, it might cause a small amount of performance overhead for regular MPI operations. The user is encouraged to leave one or more hardware threads vacant i [...]
+ rc = MPL_env2bool("MPICH_ASYNC_PROGRESS", &(MPIR_CVAR_ASYNC_PROGRESS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ASYNC_PROGRESS");
+ rc = MPL_env2bool("MPIR_PARAM_ASYNC_PROGRESS", &(MPIR_CVAR_ASYNC_PROGRESS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ASYNC_PROGRESS");
+ rc = MPL_env2bool("MPIR_CVAR_ASYNC_PROGRESS", &(MPIR_CVAR_ASYNC_PROGRESS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ASYNC_PROGRESS");
+
+ defaultval.str = (char *)"MPI_THREAD_SINGLE";
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_DEFAULT_THREAD_LEVEL, /* name */
+ &MPIR_CVAR_DEFAULT_THREAD_LEVEL, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "THREADS", /* category */
+ "Sets the default thread level to use when using MPI_INIT. This variable is case-insensitive.");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_DEFAULT_THREAD_LEVEL, &tmp_str);
+ rc = MPL_env2str("MPICH_DEFAULT_THREAD_LEVEL", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_DEFAULT_THREAD_LEVEL");
+ rc = MPL_env2str("MPIR_PARAM_DEFAULT_THREAD_LEVEL", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_DEFAULT_THREAD_LEVEL");
+ rc = MPL_env2str("MPIR_CVAR_DEFAULT_THREAD_LEVEL", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_DEFAULT_THREAD_LEVEL");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_DEFAULT_THREAD_LEVEL = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_DEFAULT_THREAD_LEVEL);
+ if (MPIR_CVAR_DEFAULT_THREAD_LEVEL == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_DEFAULT_THREAD_LEVEL");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_DEFAULT_THREAD_LEVEL = NULL;
+ }
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_MEMDUMP, /* name */
+ &MPIR_CVAR_MEMDUMP, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_SCOPE_LOCAL,
+ defaultval,
+ "DEVELOPER", /* category */
+ "If true, list any memory that was allocated by MPICH and that remains allocated when MPI_Finalize completes.");
+ rc = MPL_env2bool("MPICH_MEMDUMP", &(MPIR_CVAR_MEMDUMP));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MEMDUMP");
+ rc = MPL_env2bool("MPIR_PARAM_MEMDUMP", &(MPIR_CVAR_MEMDUMP));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MEMDUMP");
+ rc = MPL_env2bool("MPIR_CVAR_MEMDUMP", &(MPIR_CVAR_MEMDUMP));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MEMDUMP");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_SUPPRESS_ABORT_MESSAGE, /* name */
+ &MPIR_CVAR_SUPPRESS_ABORT_MESSAGE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "ERROR_HANDLING", /* category */
+ "Disable printing of abort error message.");
+ rc = MPL_env2bool("MPICH_SUPPRESS_ABORT_MESSAGE", &(MPIR_CVAR_SUPPRESS_ABORT_MESSAGE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_SUPPRESS_ABORT_MESSAGE");
+ rc = MPL_env2bool("MPIR_PARAM_SUPPRESS_ABORT_MESSAGE", &(MPIR_CVAR_SUPPRESS_ABORT_MESSAGE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_SUPPRESS_ABORT_MESSAGE");
+ rc = MPL_env2bool("MPIR_CVAR_SUPPRESS_ABORT_MESSAGE", &(MPIR_CVAR_SUPPRESS_ABORT_MESSAGE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_SUPPRESS_ABORT_MESSAGE");
+
+ defaultval.d = 2048;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_REDUCE_SHORT_MSG_SIZE, /* name */
+ &MPIR_CVAR_REDUCE_SHORT_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "the short message algorithm will be used if the send buffer size is <= this value (in bytes)");
+ rc = MPL_env2int("MPICH_REDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_REDUCE_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_REDUCE_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_REDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_REDUCE_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_REDUCE_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_REDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_REDUCE_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_REDUCE_SHORT_MSG_SIZE");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ENABLE_SMP_REDUCE, /* name */
+ &MPIR_CVAR_ENABLE_SMP_REDUCE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Enable SMP aware reduce.");
+ rc = MPL_env2bool("MPICH_ENABLE_SMP_REDUCE", &(MPIR_CVAR_ENABLE_SMP_REDUCE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_REDUCE");
+ rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_REDUCE", &(MPIR_CVAR_ENABLE_SMP_REDUCE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_REDUCE");
+ rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_REDUCE", &(MPIR_CVAR_ENABLE_SMP_REDUCE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_REDUCE");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE, /* name */
+ &MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Maximum message size for which SMP-aware reduce is used. A value of '0' uses SMP-aware reduce for all message sizes.");
+ rc = MPL_env2int("MPICH_MAX_SMP_REDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MAX_SMP_REDUCE_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_MAX_SMP_REDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MAX_SMP_REDUCE_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MAX_SMP_REDUCE_MSG_SIZE");
+
+ defaultval.d = 524288;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE, /* name */
+ &MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "the long message algorithm will be used if the operation is commutative and the send buffer size is >= this value (in bytes)");
+ rc = MPL_env2int("MPICH_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE", &(MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE", &(MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE", &(MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_REDSCAT_COMMUTATIVE_LONG_MSG_SIZE");
+
+ defaultval.d = 8;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_BCAST_MIN_PROCS, /* name */
+ &MPIR_CVAR_BCAST_MIN_PROCS, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Let's define short messages as messages with size < MPIR_CVAR_BCAST_SHORT_MSG_SIZE, and medium messages as messages with size >= MPIR_CVAR_BCAST_SHORT_MSG_SIZE but < MPIR_CVAR_BCAST_LONG_MSG_SIZE, and long messages as messages with size >= MPIR_CVAR_BCAST_LONG_MSG_SIZE. The broadcast algorithms selection procedure is as follows. For short messages or when the number of processes is < MPIR_CVAR_BCAST_MIN_PROCS, we do broadcast using the binomial tree algorithm. Otherwise, for med [...]
+ rc = MPL_env2int("MPICH_BCAST_MIN_PROCS", &(MPIR_CVAR_BCAST_MIN_PROCS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_BCAST_MIN_PROCS");
+ rc = MPL_env2int("MPIR_PARAM_BCAST_MIN_PROCS", &(MPIR_CVAR_BCAST_MIN_PROCS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_BCAST_MIN_PROCS");
+ rc = MPL_env2int("MPIR_CVAR_BCAST_MIN_PROCS", &(MPIR_CVAR_BCAST_MIN_PROCS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_BCAST_MIN_PROCS");
+
+ defaultval.d = 12288;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_BCAST_SHORT_MSG_SIZE, /* name */
+ &MPIR_CVAR_BCAST_SHORT_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Let's define short messages as messages with size < MPIR_CVAR_BCAST_SHORT_MSG_SIZE, and medium messages as messages with size >= MPIR_CVAR_BCAST_SHORT_MSG_SIZE but < MPIR_CVAR_BCAST_LONG_MSG_SIZE, and long messages as messages with size >= MPIR_CVAR_BCAST_LONG_MSG_SIZE. The broadcast algorithms selection procedure is as follows. For short messages or when the number of processes is < MPIR_CVAR_BCAST_MIN_PROCS, we do broadcast using the binomial tree algorithm. Otherwise, for med [...]
+ rc = MPL_env2int("MPICH_BCAST_SHORT_MSG_SIZE", &(MPIR_CVAR_BCAST_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_BCAST_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_BCAST_SHORT_MSG_SIZE", &(MPIR_CVAR_BCAST_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_BCAST_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_BCAST_SHORT_MSG_SIZE", &(MPIR_CVAR_BCAST_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_BCAST_SHORT_MSG_SIZE");
+
+ defaultval.d = 524288;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_BCAST_LONG_MSG_SIZE, /* name */
+ &MPIR_CVAR_BCAST_LONG_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Let's define short messages as messages with size < MPIR_CVAR_BCAST_SHORT_MSG_SIZE, and medium messages as messages with size >= MPIR_CVAR_BCAST_SHORT_MSG_SIZE but < MPIR_CVAR_BCAST_LONG_MSG_SIZE, and long messages as messages with size >= MPIR_CVAR_BCAST_LONG_MSG_SIZE. The broadcast algorithms selection procedure is as follows. For short messages or when the number of processes is < MPIR_CVAR_BCAST_MIN_PROCS, we do broadcast using the binomial tree algorithm. Otherwise, for med [...]
+ rc = MPL_env2int("MPICH_BCAST_LONG_MSG_SIZE", &(MPIR_CVAR_BCAST_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_BCAST_LONG_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_BCAST_LONG_MSG_SIZE", &(MPIR_CVAR_BCAST_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_BCAST_LONG_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_BCAST_LONG_MSG_SIZE", &(MPIR_CVAR_BCAST_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_BCAST_LONG_MSG_SIZE");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ENABLE_SMP_BCAST, /* name */
+ &MPIR_CVAR_ENABLE_SMP_BCAST, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Enable SMP aware broadcast (See also: MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE)");
+ rc = MPL_env2bool("MPICH_ENABLE_SMP_BCAST", &(MPIR_CVAR_ENABLE_SMP_BCAST));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_BCAST");
+ rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_BCAST", &(MPIR_CVAR_ENABLE_SMP_BCAST));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_BCAST");
+ rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_BCAST", &(MPIR_CVAR_ENABLE_SMP_BCAST));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_BCAST");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE, /* name */
+ &MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Maximum message size for which SMP-aware broadcast is used. A value of '0' uses SMP-aware broadcast for all message sizes. (See also: MPIR_CVAR_ENABLE_SMP_BCAST)");
+ rc = MPL_env2int("MPICH_MAX_SMP_BCAST_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MAX_SMP_BCAST_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_MAX_SMP_BCAST_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MAX_SMP_BCAST_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MAX_SMP_BCAST_MSG_SIZE");
+
+ defaultval.d = 32;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS, /* name */
+ &MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Use Ssend (synchronous send) for intercommunicator MPI_Gatherv if the \"group B\" size is >= this value. Specifying \"-1\" always avoids using Ssend. For backwards compatibility, specifying \"0\" uses the default value.");
+ rc = MPL_env2int("MPICH_GATHERV_INTER_SSEND_MIN_PROCS", &(MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_GATHERV_INTER_SSEND_MIN_PROCS");
+ rc = MPL_env2int("MPIR_PARAM_GATHERV_INTER_SSEND_MIN_PROCS", &(MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_GATHERV_INTER_SSEND_MIN_PROCS");
+ rc = MPL_env2int("MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS", &(MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_GATHERV_INTER_SSEND_MIN_PROCS");
+
+ defaultval.d = 2048;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE, /* name */
+ &MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "the short message algorithm will be used if the send buffer size is <= this value (in bytes)");
+ rc = MPL_env2int("MPICH_ALLREDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLREDUCE_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_ALLREDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLREDUCE_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLREDUCE_SHORT_MSG_SIZE");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ENABLE_SMP_COLLECTIVES, /* name */
+ &MPIR_CVAR_ENABLE_SMP_COLLECTIVES, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Enable SMP aware collective communication.");
+ rc = MPL_env2bool("MPICH_ENABLE_SMP_COLLECTIVES", &(MPIR_CVAR_ENABLE_SMP_COLLECTIVES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_COLLECTIVES");
+ rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_COLLECTIVES", &(MPIR_CVAR_ENABLE_SMP_COLLECTIVES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_COLLECTIVES");
+ rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_COLLECTIVES", &(MPIR_CVAR_ENABLE_SMP_COLLECTIVES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_COLLECTIVES");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ENABLE_SMP_ALLREDUCE, /* name */
+ &MPIR_CVAR_ENABLE_SMP_ALLREDUCE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Enable SMP aware allreduce.");
+ rc = MPL_env2bool("MPICH_ENABLE_SMP_ALLREDUCE", &(MPIR_CVAR_ENABLE_SMP_ALLREDUCE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_ALLREDUCE");
+ rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_ALLREDUCE", &(MPIR_CVAR_ENABLE_SMP_ALLREDUCE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_ALLREDUCE");
+ rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_ALLREDUCE", &(MPIR_CVAR_ENABLE_SMP_ALLREDUCE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_ALLREDUCE");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE, /* name */
+ &MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Maximum message size for which SMP-aware allreduce is used. A value of '0' uses SMP-aware allreduce for all message sizes.");
+ rc = MPL_env2int("MPICH_MAX_SMP_ALLREDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_MAX_SMP_ALLREDUCE_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_MAX_SMP_ALLREDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_MAX_SMP_ALLREDUCE_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE", &(MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_MAX_SMP_ALLREDUCE_MSG_SIZE");
+
+ defaultval.d = 1024;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_GATHER_VSMALL_MSG_SIZE, /* name */
+ &MPIR_CVAR_GATHER_VSMALL_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "use a temporary buffer for intracommunicator MPI_Gather if the send buffer size is < this value (in bytes) (See also: MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE)");
+ rc = MPL_env2int("MPICH_GATHER_VSMALL_MSG_SIZE", &(MPIR_CVAR_GATHER_VSMALL_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_GATHER_VSMALL_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_GATHER_VSMALL_MSG_SIZE", &(MPIR_CVAR_GATHER_VSMALL_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_GATHER_VSMALL_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_GATHER_VSMALL_MSG_SIZE", &(MPIR_CVAR_GATHER_VSMALL_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_GATHER_VSMALL_MSG_SIZE");
+
+ defaultval.d = 2048;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE, /* name */
+ &MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "use the short message algorithm for intercommunicator MPI_Gather if the send buffer size is < this value (in bytes) (See also: MPIR_CVAR_GATHER_VSMALL_MSG_SIZE)");
+ rc = MPL_env2int("MPICH_GATHER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_GATHER_INTER_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_GATHER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_GATHER_INTER_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ENABLE_SMP_BARRIER, /* name */
+ &MPIR_CVAR_ENABLE_SMP_BARRIER, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Enable SMP aware barrier.");
+ rc = MPL_env2bool("MPICH_ENABLE_SMP_BARRIER", &(MPIR_CVAR_ENABLE_SMP_BARRIER));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_SMP_BARRIER");
+ rc = MPL_env2bool("MPIR_PARAM_ENABLE_SMP_BARRIER", &(MPIR_CVAR_ENABLE_SMP_BARRIER));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_SMP_BARRIER");
+ rc = MPL_env2bool("MPIR_CVAR_ENABLE_SMP_BARRIER", &(MPIR_CVAR_ENABLE_SMP_BARRIER));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_SMP_BARRIER");
+
+ defaultval.d = 81920;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE, /* name */
+ &MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "For MPI_Allgather and MPI_Allgatherv, the short message algorithm will be used if the send buffer size is < this value (in bytes). (See also: MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE)");
+ rc = MPL_env2int("MPICH_ALLGATHER_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLGATHER_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_ALLGATHER_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLGATHER_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE");
+
+ defaultval.d = 524288;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE, /* name */
+ &MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "For MPI_Allgather and MPI_Allgatherv, the long message algorithm will be used if the send buffer size is >= this value (in bytes) (See also: MPIR_CVAR_ALLGATHER_SHORT_MSG_SIZE)");
+ rc = MPL_env2int("MPICH_ALLGATHER_LONG_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLGATHER_LONG_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_ALLGATHER_LONG_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLGATHER_LONG_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE", &(MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLGATHER_LONG_MSG_SIZE");
+
+ defaultval.d = 256;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE, /* name */
+ &MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "the short message algorithm will be used if the per-destination message size (sendcount*size(sendtype)) is <= this value (See also: MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE)");
+ rc = MPL_env2int("MPICH_ALLTOALL_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLTOALL_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_ALLTOALL_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLTOALL_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE");
+
+ defaultval.d = 32768;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE, /* name */
+ &MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "the medium message algorithm will be used if the per-destination message size (sendcount*size(sendtype)) is <= this value and larger than MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE (See also: MPIR_CVAR_ALLTOALL_SHORT_MSG_SIZE)");
+ rc = MPL_env2int("MPICH_ALLTOALL_MEDIUM_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLTOALL_MEDIUM_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_ALLTOALL_MEDIUM_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLTOALL_MEDIUM_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE", &(MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLTOALL_MEDIUM_MSG_SIZE");
+
+ defaultval.d = 32;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ALLTOALL_THROTTLE, /* name */
+ &MPIR_CVAR_ALLTOALL_THROTTLE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "max no. of irecvs/isends posted at a time in some alltoall algorithms. Setting it to 0 causes all irecvs/isends to be posted at once");
+ rc = MPL_env2int("MPICH_ALLTOALL_THROTTLE", &(MPIR_CVAR_ALLTOALL_THROTTLE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLTOALL_THROTTLE");
+ rc = MPL_env2int("MPIR_PARAM_ALLTOALL_THROTTLE", &(MPIR_CVAR_ALLTOALL_THROTTLE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLTOALL_THROTTLE");
+ rc = MPL_env2int("MPIR_CVAR_ALLTOALL_THROTTLE", &(MPIR_CVAR_ALLTOALL_THROTTLE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLTOALL_THROTTLE");
+
+ defaultval.d = 2048;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE, /* name */
+ &MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "use the short message algorithm for intercommunicator MPI_Scatter if the send buffer size is < this value (in bytes)");
+ rc = MPL_env2int("MPICH_SCATTER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_SCATTER_INTER_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_SCATTER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_SCATTER_INTER_SHORT_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE", &(MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_SCATTER_INTER_SHORT_MSG_SIZE");
+
+ defaultval.d = 32768;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE, /* name */
+ &MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "The smallest message size that will be used for the pipelined, large-message, ring algorithm in the MPI_Allgatherv implementation.");
+ rc = MPL_env2int("MPICH_ALLGATHERV_PIPELINE_MSG_SIZE", &(MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ALLGATHERV_PIPELINE_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_ALLGATHERV_PIPELINE_MSG_SIZE", &(MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ALLGATHERV_PIPELINE_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE", &(MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ALLGATHERV_PIPELINE_MSG_SIZE");
+
+ defaultval.d = 2;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CTXID_EAGER_SIZE, /* name */
+ &MPIR_CVAR_CTXID_EAGER_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "THREADS", /* category */
+ "The MPIR_CVAR_CTXID_EAGER_SIZE environment variable allows you to specify how many words in the context ID mask will be set aside for the eager allocation protocol. If the application is running out of context IDs, reducing this value may help.");
+ rc = MPL_env2int("MPICH_CTXID_EAGER_SIZE", &(MPIR_CVAR_CTXID_EAGER_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CTXID_EAGER_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CTXID_EAGER_SIZE", &(MPIR_CVAR_CTXID_EAGER_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CTXID_EAGER_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CTXID_EAGER_SIZE", &(MPIR_CVAR_CTXID_EAGER_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CTXID_EAGER_SIZE");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_COMM_SPLIT_USE_QSORT, /* name */
+ &MPIR_CVAR_COMM_SPLIT_USE_QSORT, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COMMUNICATOR", /* category */
+ "Use qsort(3) in the implementation of MPI_Comm_split instead of bubble sort.");
+ rc = MPL_env2bool("MPICH_COMM_SPLIT_USE_QSORT", &(MPIR_CVAR_COMM_SPLIT_USE_QSORT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_COMM_SPLIT_USE_QSORT");
+ rc = MPL_env2bool("MPIR_PARAM_COMM_SPLIT_USE_QSORT", &(MPIR_CVAR_COMM_SPLIT_USE_QSORT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_COMM_SPLIT_USE_QSORT");
+ rc = MPL_env2bool("MPIR_CVAR_COMM_SPLIT_USE_QSORT", &(MPIR_CVAR_COMM_SPLIT_USE_QSORT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_COMM_SPLIT_USE_QSORT");
+
+ defaultval.d = 64;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_PROCTABLE_SIZE, /* name */
+ &MPIR_CVAR_PROCTABLE_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "DEBUGGER", /* category */
+ "Size of the \"MPIR\" debugger interface proctable (process table).");
+ rc = MPL_env2int("MPICH_PROCTABLE_SIZE", &(MPIR_CVAR_PROCTABLE_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PROCTABLE_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_PROCTABLE_SIZE", &(MPIR_CVAR_PROCTABLE_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PROCTABLE_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_PROCTABLE_SIZE", &(MPIR_CVAR_PROCTABLE_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PROCTABLE_SIZE");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_PROCTABLE_PRINT, /* name */
+ &MPIR_CVAR_PROCTABLE_PRINT, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "DEBUGGER", /* category */
+ "If true, dump the proctable entries at MPII_Wait_for_debugger-time.");
+ rc = MPL_env2bool("MPICH_PROCTABLE_PRINT", &(MPIR_CVAR_PROCTABLE_PRINT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PROCTABLE_PRINT");
+ rc = MPL_env2bool("MPIR_PARAM_PROCTABLE_PRINT", &(MPIR_CVAR_PROCTABLE_PRINT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PROCTABLE_PRINT");
+ rc = MPL_env2bool("MPIR_CVAR_PROCTABLE_PRINT", &(MPIR_CVAR_PROCTABLE_PRINT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PROCTABLE_PRINT");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_PRINT_ERROR_STACK, /* name */
+ &MPIR_CVAR_PRINT_ERROR_STACK, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_LOCAL,
+ defaultval,
+ "ERROR_HANDLING", /* category */
+ "If true, print an error stack trace at error handling time.");
+ rc = MPL_env2bool("MPICH_PRINT_ERROR_STACK", &(MPIR_CVAR_PRINT_ERROR_STACK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PRINT_ERROR_STACK");
+ rc = MPL_env2bool("MPIR_PARAM_PRINT_ERROR_STACK", &(MPIR_CVAR_PRINT_ERROR_STACK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PRINT_ERROR_STACK");
+ rc = MPL_env2bool("MPIR_CVAR_PRINT_ERROR_STACK", &(MPIR_CVAR_PRINT_ERROR_STACK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PRINT_ERROR_STACK");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CHOP_ERROR_STACK, /* name */
+ &MPIR_CVAR_CHOP_ERROR_STACK, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_LOCAL,
+ defaultval,
+ "ERROR_HANDLING", /* category */
+ "If >0, truncate error stack output lines this many characters wide. If 0, do not truncate, and if <0 use a sensible default.");
+ rc = MPL_env2int("MPICH_CHOP_ERROR_STACK", &(MPIR_CVAR_CHOP_ERROR_STACK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CHOP_ERROR_STACK");
+ rc = MPL_env2int("MPIR_PARAM_CHOP_ERROR_STACK", &(MPIR_CVAR_CHOP_ERROR_STACK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CHOP_ERROR_STACK");
+ rc = MPL_env2int("MPIR_CVAR_CHOP_ERROR_STACK", &(MPIR_CVAR_CHOP_ERROR_STACK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CHOP_ERROR_STACK");
+
+ defaultval.str = (char *)NULL;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_NAMESERV_FILE_PUBDIR, /* name */
+ &MPIR_CVAR_NAMESERV_FILE_PUBDIR, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "PROCESS_MANAGER", /* category */
+ "Sets the directory to use for MPI service publishing in the file nameserv implementation. Allows the user to override where the publish and lookup information is placed for connect/accept based applications.");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_NAMESERV_FILE_PUBDIR, &tmp_str);
+ rc = MPL_env2str("MPICH_NAMEPUB_DIR", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NAMEPUB_DIR");
+ rc = MPL_env2str("MPIR_PARAM_NAMEPUB_DIR", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NAMEPUB_DIR");
+ rc = MPL_env2str("MPIR_CVAR_NAMEPUB_DIR", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NAMEPUB_DIR");
+ rc = MPL_env2str("MPICH_NAMESERV_FILE_PUBDIR", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NAMESERV_FILE_PUBDIR");
+ rc = MPL_env2str("MPIR_PARAM_NAMESERV_FILE_PUBDIR", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NAMESERV_FILE_PUBDIR");
+ rc = MPL_env2str("MPIR_CVAR_NAMESERV_FILE_PUBDIR", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NAMESERV_FILE_PUBDIR");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_NAMESERV_FILE_PUBDIR = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_NAMESERV_FILE_PUBDIR);
+ if (MPIR_CVAR_NAMESERV_FILE_PUBDIR == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_NAMESERV_FILE_PUBDIR");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_NAMESERV_FILE_PUBDIR = NULL;
+ }
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NOLOCAL, /* name */
+ &MPIR_CVAR_NOLOCAL, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NODEMAP", /* category */
+ "If true, force all processes to operate as though all processes are located on another node. For example, this disables shared memory communication hierarchical collectives.");
+ rc = MPL_env2bool("MPICH_NO_LOCAL", &(MPIR_CVAR_NOLOCAL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NO_LOCAL");
+ rc = MPL_env2bool("MPIR_PARAM_NO_LOCAL", &(MPIR_CVAR_NOLOCAL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NO_LOCAL");
+ rc = MPL_env2bool("MPIR_CVAR_NO_LOCAL", &(MPIR_CVAR_NOLOCAL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NO_LOCAL");
+ rc = MPL_env2bool("MPICH_NOLOCAL", &(MPIR_CVAR_NOLOCAL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NOLOCAL");
+ rc = MPL_env2bool("MPIR_PARAM_NOLOCAL", &(MPIR_CVAR_NOLOCAL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NOLOCAL");
+ rc = MPL_env2bool("MPIR_CVAR_NOLOCAL", &(MPIR_CVAR_NOLOCAL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NOLOCAL");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ODD_EVEN_CLIQUES, /* name */
+ &MPIR_CVAR_ODD_EVEN_CLIQUES, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NODEMAP", /* category */
+ "If true, odd procs on a node are seen as local to each other, and even procs on a node are seen as local to each other. Used for debugging on a single machine.");
+ rc = MPL_env2bool("MPICH_EVEN_ODD_CLIQUES", &(MPIR_CVAR_ODD_EVEN_CLIQUES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_EVEN_ODD_CLIQUES");
+ rc = MPL_env2bool("MPIR_PARAM_EVEN_ODD_CLIQUES", &(MPIR_CVAR_ODD_EVEN_CLIQUES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_EVEN_ODD_CLIQUES");
+ rc = MPL_env2bool("MPIR_CVAR_EVEN_ODD_CLIQUES", &(MPIR_CVAR_ODD_EVEN_CLIQUES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_EVEN_ODD_CLIQUES");
+ rc = MPL_env2bool("MPICH_ODD_EVEN_CLIQUES", &(MPIR_CVAR_ODD_EVEN_CLIQUES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ODD_EVEN_CLIQUES");
+ rc = MPL_env2bool("MPIR_PARAM_ODD_EVEN_CLIQUES", &(MPIR_CVAR_ODD_EVEN_CLIQUES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ODD_EVEN_CLIQUES");
+ rc = MPL_env2bool("MPIR_CVAR_ODD_EVEN_CLIQUES", &(MPIR_CVAR_ODD_EVEN_CLIQUES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ODD_EVEN_CLIQUES");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ABORT_ON_LEAKED_HANDLES, /* name */
+ &MPIR_CVAR_ABORT_ON_LEAKED_HANDLES, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "MEMORY", /* category */
+ "If true, MPI will call MPI_Abort at MPI_Finalize if any MPI object handles have been leaked. For example, if MPI_Comm_dup is called without calling a corresponding MPI_Comm_free. For uninteresting reasons, enabling this option may prevent all known object leaks from being reported. MPICH must have been configure with \"--enable-g=handlealloc\" or better in order for this functionality to work.");
+ rc = MPL_env2bool("MPICH_ABORT_ON_LEAKED_HANDLES", &(MPIR_CVAR_ABORT_ON_LEAKED_HANDLES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ABORT_ON_LEAKED_HANDLES");
+ rc = MPL_env2bool("MPIR_PARAM_ABORT_ON_LEAKED_HANDLES", &(MPIR_CVAR_ABORT_ON_LEAKED_HANDLES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ABORT_ON_LEAKED_HANDLES");
+ rc = MPL_env2bool("MPIR_CVAR_ABORT_ON_LEAKED_HANDLES", &(MPIR_CVAR_ABORT_ON_LEAKED_HANDLES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ABORT_ON_LEAKED_HANDLES");
+
+ defaultval.d = 1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_COLL_ALIAS_CHECK, /* name */
+ &MPIR_CVAR_COLL_ALIAS_CHECK, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "COLLECTIVE", /* category */
+ "Enable checking of aliasing in collective operations");
+ rc = MPL_env2int("MPICH_COLL_ALIAS_CHECK", &(MPIR_CVAR_COLL_ALIAS_CHECK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_COLL_ALIAS_CHECK");
+ rc = MPL_env2int("MPIR_PARAM_COLL_ALIAS_CHECK", &(MPIR_CVAR_COLL_ALIAS_CHECK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_COLL_ALIAS_CHECK");
+ rc = MPL_env2int("MPIR_CVAR_COLL_ALIAS_CHECK", &(MPIR_CVAR_COLL_ALIAS_CHECK));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_COLL_ALIAS_CHECK");
+
+ defaultval.str = (char *)"";
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_CH4_NETMOD, /* name */
+ &MPIR_CVAR_CH4_NETMOD, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH4", /* category */
+ "If non-empty, this cvar specifies which network module to use");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_CH4_NETMOD, &tmp_str);
+ rc = MPL_env2str("MPICH_CH4_NETMOD", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH4_NETMOD");
+ rc = MPL_env2str("MPIR_PARAM_CH4_NETMOD", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH4_NETMOD");
+ rc = MPL_env2str("MPIR_CVAR_CH4_NETMOD", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH4_NETMOD");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_CH4_NETMOD = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_CH4_NETMOD);
+ if (MPIR_CVAR_CH4_NETMOD == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_CH4_NETMOD");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_CH4_NETMOD = NULL;
+ }
+
+ defaultval.str = (char *)"";
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_CH4_SHM, /* name */
+ &MPIR_CVAR_CH4_SHM, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH4", /* category */
+ "If non-empty, this cvar specifies which shm module to use");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_CH4_SHM, &tmp_str);
+ rc = MPL_env2str("MPICH_CH4_SHM", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH4_SHM");
+ rc = MPL_env2str("MPIR_PARAM_CH4_SHM", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH4_SHM");
+ rc = MPL_env2str("MPIR_CVAR_CH4_SHM", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH4_SHM");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_CH4_SHM = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_CH4_SHM);
+ if (MPIR_CVAR_CH4_SHM == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_CH4_SHM");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_CH4_SHM = NULL;
+ }
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_ENABLE_HCOLL, /* name */
+ &MPIR_CVAR_CH3_ENABLE_HCOLL, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "If true, enable HCOLL collectives.");
+ rc = MPL_env2bool("MPICH_CH3_ENABLE_HCOLL", &(MPIR_CVAR_CH3_ENABLE_HCOLL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_ENABLE_HCOLL");
+ rc = MPL_env2bool("MPIR_PARAM_CH3_ENABLE_HCOLL", &(MPIR_CVAR_CH3_ENABLE_HCOLL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_ENABLE_HCOLL");
+ rc = MPL_env2bool("MPIR_CVAR_CH3_ENABLE_HCOLL", &(MPIR_CVAR_CH3_ENABLE_HCOLL));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_ENABLE_HCOLL");
+
+ defaultval.d = 131072;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE, /* name */
+ &MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "This cvar controls the message size at which CH3 switches from eager to rendezvous mode.");
+ rc = MPL_env2int("MPICH_CH3_EAGER_MAX_MSG_SIZE", &(MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_EAGER_MAX_MSG_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_EAGER_MAX_MSG_SIZE", &(MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_EAGER_MAX_MSG_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE", &(MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_EAGER_MAX_MSG_SIZE");
+
+ defaultval.d = 262144;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_SLOTS_SIZE, /* name */
+ &MPIR_CVAR_CH3_RMA_SLOTS_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Number of RMA slots during window creation. Each slot contains a linked list of target elements. The distribution of ranks among slots follows a round-robin pattern. Requires a positive value.");
+ rc = MPL_env2int("MPICH_CH3_RMA_SLOTS_SIZE", &(MPIR_CVAR_CH3_RMA_SLOTS_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_SLOTS_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_SLOTS_SIZE", &(MPIR_CVAR_CH3_RMA_SLOTS_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_SLOTS_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_SLOTS_SIZE", &(MPIR_CVAR_CH3_RMA_SLOTS_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_SLOTS_SIZE");
+
+ defaultval.d = 655360;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES, /* name */
+ &MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Size (in bytes) of available lock data this window can provided. If current buffered lock data is more than this value, the process will drop the upcoming operation data. Requires a positive calue.");
+ rc = MPL_env2int("MPICH_CH3_RMA_TARGET_LOCK_DATA_BYTES", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_LOCK_DATA_BYTES");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_LOCK_DATA_BYTES", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_LOCK_DATA_BYTES");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_LOCK_DATA_BYTES");
+
+ defaultval.d = 180;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT, /* name */
+ &MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_GROUP_EQ,
+ defaultval,
+ "CH3", /* category */
+ "The default time out period in seconds for a connection attempt to the server communicator where the named port exists but no pending accept. User can change the value for a specified connection through its info argument.");
+ rc = MPL_env2int("MPICH_CH3_COMM_CONNECT_TIMEOUT", &(MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_COMM_CONNECT_TIMEOUT");
+ rc = MPL_env2int("MPIR_PARAM_CH3_COMM_CONNECT_TIMEOUT", &(MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_COMM_CONNECT_TIMEOUT");
+ rc = MPL_env2int("MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT", &(MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT");
+
+ defaultval.d = 65536;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE, /* name */
+ &MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Specify the threshold of data size of a RMA operation which can be piggybacked with a LOCK message. It is always a positive value and should not be smaller than MPIDI_RMA_IMMED_BYTES. If user sets it as a small value, for middle and large data size, we will lose performance because of always waiting for round-trip of LOCK synchronization; if user sets it as a large value, we need to consume more memory on target side to buffer this lock request when lock is not satisfied.");
+ rc = MPL_env2int("MPICH_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE", &(MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE", &(MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE", &(MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_OP_PIGGYBACK_LOCK_DATA_SIZE");
+
+ defaultval.d = 1024;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM, /* name */
+ &MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Specify the threshold of switching the algorithm used in FENCE from the basic algorithm to the scalable algorithm. The value can be nagative, zero or positive. When the number of processes is larger than or equal to this value, FENCE will use a scalable algorithm which do not use O(P) data structure; when the number of processes is smaller than the value, FENCE will use a basic but fast algorithm which requires an O(P) data structure.");
+ rc = MPL_env2int("MPICH_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM", &(MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM", &(MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM", &(MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_SCALABLE_FENCE_PROCESS_NUM");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING, /* name */
+ &MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Specify if delay issuing of RMA operations for piggybacking LOCK/UNLOCK/FLUSH is enabled. It can be either 0 or 1. When it is set to 1, the issuing of LOCK message is delayed until origin process see the first RMA operation and piggyback LOCK with that operation, and the origin process always keeps the current last operation until the ending synchronization call in order to piggyback UNLOCK/FLUSH with that operation. When it is set to 0, in WIN_LOCK/UNLOCK case, the LOCK message [...]
+ rc = MPL_env2int("MPICH_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING", &(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING", &(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING", &(MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_DELAY_ISSUING_FOR_PIGGYBACKING");
+
+ defaultval.d = 65536;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD, /* name */
+ &MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Threshold of number of active requests to trigger blocking waiting in operation routines. When the value is negative, we never blockingly wait in operation routines. When the value is zero, we always trigger blocking waiting in operation routines to wait until no. of active requests becomes zero. When the value is positive, we do blocking waiting in operation routines to wait until no. of active requests being reduced to this value.");
+ rc = MPL_env2int("MPICH_CH3_RMA_ACTIVE_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_ACTIVE_REQ_THRESHOLD");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_ACTIVE_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_ACTIVE_REQ_THRESHOLD");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_ACTIVE_REQ_THRESHOLD");
+
+ defaultval.d = 128;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD, /* name */
+ &MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Threshold at which the RMA implementation attempts to complete requests while completing RMA operations and while using the lazy synchonization approach. Change this value if programs fail because they run out of requests or other internal resources");
+ rc = MPL_env2int("MPICH_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD", &(MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_POKE_PROGRESS_REQ_THRESHOLD");
+
+ defaultval.d = 256;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE, /* name */
+ &MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Size of the window-private RMA operations pool (in number of operations) that stores information about RMA operations that could not be issued immediately. Requires a positive value.");
+ rc = MPL_env2int("MPICH_CH3_RMA_OP_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_OP_WIN_POOL_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_OP_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_OP_WIN_POOL_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_OP_WIN_POOL_SIZE");
+
+ defaultval.d = 16384;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE, /* name */
+ &MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Size of the Global RMA operations pool (in number of operations) that stores information about RMA operations that could not be issued immediatly. Requires a positive value.");
+ rc = MPL_env2int("MPICH_CH3_RMA_OP_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_OP_GLOBAL_POOL_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_OP_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_OP_GLOBAL_POOL_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_OP_GLOBAL_POOL_SIZE");
+
+ defaultval.d = 256;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE, /* name */
+ &MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Size of the window-private RMA target pool (in number of targets) that stores information about RMA targets that could not be issued immediately. Requires a positive value.");
+ rc = MPL_env2int("MPICH_CH3_RMA_TARGET_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_WIN_POOL_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_WIN_POOL_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_WIN_POOL_SIZE");
+
+ defaultval.d = 16384;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE, /* name */
+ &MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Size of the Global RMA targets pool (in number of targets) that stores information about RMA targets that could not be issued immediatly. Requires a positive value.");
+ rc = MPL_env2int("MPICH_CH3_RMA_TARGET_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_GLOBAL_POOL_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_GLOBAL_POOL_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_GLOBAL_POOL_SIZE");
+
+ defaultval.d = 256;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE, /* name */
+ &MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "Size of the window-private RMA lock entries pool (in number of lock entries) that stores information about RMA lock requests that could not be satisfied immediatly. Requires a positive value.");
+ rc = MPL_env2int("MPICH_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE");
+ rc = MPL_env2int("MPIR_PARAM_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE");
+ rc = MPL_env2int("MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE", &(MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_RMA_TARGET_LOCK_ENTRY_WIN_POOL_SIZE");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_ENABLE_FT, /* name */
+ &MPIR_CVAR_ENABLE_FT, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "FT", /* category */
+ "Enable fault tolerance functions");
+ rc = MPL_env2bool("MPICH_ENABLE_FT", &(MPIR_CVAR_ENABLE_FT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_ENABLE_FT");
+ rc = MPL_env2bool("MPIR_PARAM_ENABLE_FT", &(MPIR_CVAR_ENABLE_FT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_ENABLE_FT");
+ rc = MPL_env2bool("MPIR_CVAR_ENABLE_FT", &(MPIR_CVAR_ENABLE_FT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_ENABLE_FT");
+
+ defaultval.d = -1;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ, /* name */
+ &MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "This cvar controls the message size at which Nemesis switches from eager to rendezvous mode for shared memory. If this cvar is set to -1, then Nemesis will choose an appropriate value.");
+ rc = MPL_env2int("MPICH_NEMESIS_SHM_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_SHM_EAGER_MAX_SZ");
+ rc = MPL_env2int("MPIR_PARAM_NEMESIS_SHM_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_SHM_EAGER_MAX_SZ");
+ rc = MPL_env2int("MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ");
+
+ defaultval.d = -2;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ, /* name */
+ &MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "This cvar controls the message size at which Nemesis switches from eager to rendezvous mode for ready-send messages. If this cvar is set to -1, then ready messages will always be sent eagerly. If this cvar is set to -2, then Nemesis will choose an appropriate value.");
+ rc = MPL_env2int("MPICH_NEMESIS_SHM_READY_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_SHM_READY_EAGER_MAX_SZ");
+ rc = MPL_env2int("MPIR_PARAM_NEMESIS_SHM_READY_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_SHM_READY_EAGER_MAX_SZ");
+ rc = MPL_env2int("MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ", &(MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_SHM_READY_EAGER_MAX_SZ");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_ENABLE_CKPOINT, /* name */
+ &MPIR_CVAR_NEMESIS_ENABLE_CKPOINT, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "If true, enables checkpointing support and returns an error if checkpointing library cannot be initialized.");
+ rc = MPL_env2bool("MPICH_NEMESIS_ENABLE_CKPOINT", &(MPIR_CVAR_NEMESIS_ENABLE_CKPOINT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_ENABLE_CKPOINT");
+ rc = MPL_env2bool("MPIR_PARAM_NEMESIS_ENABLE_CKPOINT", &(MPIR_CVAR_NEMESIS_ENABLE_CKPOINT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_ENABLE_CKPOINT");
+ rc = MPL_env2bool("MPIR_CVAR_NEMESIS_ENABLE_CKPOINT", &(MPIR_CVAR_NEMESIS_ENABLE_CKPOINT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_ENABLE_CKPOINT");
+
+ defaultval.str = (char *)"";
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_NEMESIS_NETMOD, /* name */
+ &MPIR_CVAR_NEMESIS_NETMOD, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "If non-empty, this cvar specifies which network module should be used for communication. This variable is case-insensitive.");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_NEMESIS_NETMOD, &tmp_str);
+ rc = MPL_env2str("MPICH_NEMESIS_NETMOD", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_NETMOD");
+ rc = MPL_env2str("MPIR_PARAM_NEMESIS_NETMOD", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_NETMOD");
+ rc = MPL_env2str("MPIR_CVAR_NEMESIS_NETMOD", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_NETMOD");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_NEMESIS_NETMOD = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_NEMESIS_NETMOD);
+ if (MPIR_CVAR_NEMESIS_NETMOD == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_NEMESIS_NETMOD");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_NEMESIS_NETMOD = NULL;
+ }
+
+ defaultval.d = 2097152;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD, /* name */
+ &MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "Messages larger than this size will use the \"dma\" (knem) intranode LMT implementation, if it is enabled and available.");
+ rc = MPL_env2int("MPICH_NEMESIS_LMT_DMA_THRESHOLD", &(MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_LMT_DMA_THRESHOLD");
+ rc = MPL_env2int("MPIR_PARAM_NEMESIS_LMT_DMA_THRESHOLD", &(MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_LMT_DMA_THRESHOLD");
+ rc = MPL_env2int("MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD", &(MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_LMT_DMA_THRESHOLD");
+
+ defaultval.d = 1000;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_POLLS_BEFORE_YIELD, /* name */
+ &MPIR_CVAR_POLLS_BEFORE_YIELD, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "When MPICH is in a busy waiting loop, it will periodically call a function to yield the processor. This cvar sets the number of loops before the yield function is called. A value of 0 disables yielding.");
+ rc = MPL_env2int("MPICH_POLLS_BEFORE_YIELD", &(MPIR_CVAR_POLLS_BEFORE_YIELD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_POLLS_BEFORE_YIELD");
+ rc = MPL_env2int("MPIR_PARAM_POLLS_BEFORE_YIELD", &(MPIR_CVAR_POLLS_BEFORE_YIELD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_POLLS_BEFORE_YIELD");
+ rc = MPL_env2int("MPIR_CVAR_POLLS_BEFORE_YIELD", &(MPIR_CVAR_POLLS_BEFORE_YIELD));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_POLLS_BEFORE_YIELD");
+
+ defaultval.str = (char *)NULL;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_OFI_USE_PROVIDER, /* name */
+ &MPIR_CVAR_OFI_USE_PROVIDER, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_SCOPE_LOCAL,
+ defaultval,
+ "DEVELOPER", /* category */
+ "If non-null, choose an OFI provider by name");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_OFI_USE_PROVIDER, &tmp_str);
+ rc = MPL_env2str("MPICH_OFI_USE_PROVIDER", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_OFI_USE_PROVIDER");
+ rc = MPL_env2str("MPIR_PARAM_OFI_USE_PROVIDER", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_OFI_USE_PROVIDER");
+ rc = MPL_env2str("MPIR_CVAR_OFI_USE_PROVIDER", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_OFI_USE_PROVIDER");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_OFI_USE_PROVIDER = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_OFI_USE_PROVIDER);
+ if (MPIR_CVAR_OFI_USE_PROVIDER == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_OFI_USE_PROVIDER");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_OFI_USE_PROVIDER = NULL;
+ }
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_OFI_DUMP_PROVIDERS, /* name */
+ &MPIR_CVAR_OFI_DUMP_PROVIDERS, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_MPIDEV_DETAIL,
+ MPI_T_SCOPE_LOCAL,
+ defaultval,
+ "DEVELOPER", /* category */
+ "If true, dump provider information at init");
+ rc = MPL_env2bool("MPICH_OFI_DUMP_PROVIDERS", &(MPIR_CVAR_OFI_DUMP_PROVIDERS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_OFI_DUMP_PROVIDERS");
+ rc = MPL_env2bool("MPIR_PARAM_OFI_DUMP_PROVIDERS", &(MPIR_CVAR_OFI_DUMP_PROVIDERS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_OFI_DUMP_PROVIDERS");
+ rc = MPL_env2bool("MPIR_CVAR_OFI_DUMP_PROVIDERS", &(MPIR_CVAR_OFI_DUMP_PROVIDERS));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_OFI_DUMP_PROVIDERS");
+
+ defaultval.str = (char *)NULL;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_CH3_INTERFACE_HOSTNAME, /* name */
+ &MPIR_CVAR_CH3_INTERFACE_HOSTNAME, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_LOCAL,
+ defaultval,
+ "CH3", /* category */
+ "If non-NULL, this cvar specifies the IP address that other processes should use when connecting to this process. This cvar is mutually exclusive with the MPIR_CVAR_CH3_NETWORK_IFACE cvar and it is an error to set them both.");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_CH3_INTERFACE_HOSTNAME, &tmp_str);
+ rc = MPL_env2str("MPICH_INTERFACE_HOSTNAME", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_INTERFACE_HOSTNAME");
+ rc = MPL_env2str("MPIR_PARAM_INTERFACE_HOSTNAME", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_INTERFACE_HOSTNAME");
+ rc = MPL_env2str("MPIR_CVAR_INTERFACE_HOSTNAME", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_INTERFACE_HOSTNAME");
+ rc = MPL_env2str("MPICH_CH3_INTERFACE_HOSTNAME", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_INTERFACE_HOSTNAME");
+ rc = MPL_env2str("MPIR_PARAM_CH3_INTERFACE_HOSTNAME", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_INTERFACE_HOSTNAME");
+ rc = MPL_env2str("MPIR_CVAR_CH3_INTERFACE_HOSTNAME", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_INTERFACE_HOSTNAME");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_CH3_INTERFACE_HOSTNAME = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_CH3_INTERFACE_HOSTNAME);
+ if (MPIR_CVAR_CH3_INTERFACE_HOSTNAME == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_CH3_INTERFACE_HOSTNAME");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_CH3_INTERFACE_HOSTNAME = NULL;
+ }
+
+ {
+ MPIR_T_cvar_range_value_t tmp = {0,0};
+ defaultval.range = tmp;
+ }
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_CH3_PORT_RANGE, /* name */
+ &MPIR_CVAR_CH3_PORT_RANGE, /* address */
+ 2, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "The MPIR_CVAR_CH3_PORT_RANGE environment variable allows you to specify the range of TCP ports to be used by the process manager and the MPICH library. The format of this variable is <low>:<high>. To specify any available port, use 0:0.");
+ rc = MPL_env2range("MPICH_PORTRANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PORTRANGE");
+ rc = MPL_env2range("MPICH_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_PORT_RANGE");
+ rc = MPL_env2range("MPIR_PARAM_PORTRANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PORTRANGE");
+ rc = MPL_env2range("MPIR_PARAM_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_PORT_RANGE");
+ rc = MPL_env2range("MPIR_CVAR_PORTRANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PORTRANGE");
+ rc = MPL_env2range("MPIR_CVAR_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_PORT_RANGE");
+ rc = MPL_env2range("MPICH_CH3_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_CH3_PORT_RANGE");
+ rc = MPL_env2range("MPIR_PARAM_CH3_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_CH3_PORT_RANGE");
+ rc = MPL_env2range("MPIR_CVAR_CH3_PORT_RANGE", &(MPIR_CVAR_CH3_PORT_RANGE.low), &(MPIR_CVAR_CH3_PORT_RANGE.high));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_CH3_PORT_RANGE");
+
+ defaultval.str = (char *)NULL;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_CHAR,
+ MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, /* name */
+ &MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, /* address */
+ MPIR_CVAR_MAX_STRLEN, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "If non-NULL, this cvar specifies which pseudo-ethernet interface the tcp netmod should use (e.g., \"eth1\", \"ib0\"). Note, this is a Linux-specific cvar. This cvar is mutually exclusive with the MPIR_CVAR_CH3_INTERFACE_HOSTNAME cvar and it is an error to set them both.");
+ MPIR_CVAR_GET_DEFAULT_STRING(MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE, &tmp_str);
+ rc = MPL_env2str("MPICH_NETWORK_IFACE", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NETWORK_IFACE");
+ rc = MPL_env2str("MPIR_PARAM_NETWORK_IFACE", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NETWORK_IFACE");
+ rc = MPL_env2str("MPIR_CVAR_NETWORK_IFACE", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NETWORK_IFACE");
+ rc = MPL_env2str("MPICH_NEMESIS_TCP_NETWORK_IFACE", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_TCP_NETWORK_IFACE");
+ rc = MPL_env2str("MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE");
+ rc = MPL_env2str("MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE", &tmp_str);
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE");
+ if (tmp_str != NULL) {
+ MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = MPL_strdup(tmp_str);
+ MPIR_CVAR_assert(MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE);
+ if (MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE == NULL) {
+ MPIR_CHKMEM_SETERR(mpi_errno, strlen(tmp_str), "dup of string for MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE");
+ goto fn_fail;
+ }
+ }
+ else {
+ MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = NULL;
+ }
+
+ defaultval.d = 10;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES, /* name */
+ &MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "NEMESIS", /* category */
+ "This cvar controls the number of times to retry the gethostbyname() function before giving up.");
+ rc = MPL_env2int("MPICH_NEMESIS_TCP_HOST_LOOKUP_RETRIES", &(MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_TCP_HOST_LOOKUP_RETRIES");
+ rc = MPL_env2int("MPIR_PARAM_NEMESIS_TCP_HOST_LOOKUP_RETRIES", &(MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_TCP_HOST_LOOKUP_RETRIES");
+ rc = MPL_env2int("MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES", &(MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_TCP_HOST_LOOKUP_RETRIES");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT, /* name */
+ &MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "If true, force mxm to connect all processes at initialization time.");
+ rc = MPL_env2bool("MPICH_NEMESIS_MXM_BULK_CONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_MXM_BULK_CONNECT");
+ rc = MPL_env2bool("MPIR_PARAM_NEMESIS_MXM_BULK_CONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_MXM_BULK_CONNECT");
+ rc = MPL_env2bool("MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_MXM_BULK_CONNECT");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT, /* name */
+ &MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "If true, force mxm to disconnect all processes at finalization time.");
+ rc = MPL_env2bool("MPICH_NEMESIS_MXM_BULK_DISCONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_MXM_BULK_DISCONNECT");
+ rc = MPL_env2bool("MPIR_PARAM_NEMESIS_MXM_BULK_DISCONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_MXM_BULK_DISCONNECT");
+ rc = MPL_env2bool("MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT", &(MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_MXM_BULK_DISCONNECT");
+
+ defaultval.d = 0;
+ MPIR_T_CVAR_REGISTER_STATIC(
+ MPI_INT,
+ MPIR_CVAR_NEMESIS_MXM_HUGEPAGE, /* name */
+ &MPIR_CVAR_NEMESIS_MXM_HUGEPAGE, /* address */
+ 1, /* count */
+ MPI_T_VERBOSITY_USER_BASIC,
+ MPI_T_SCOPE_ALL_EQ,
+ defaultval,
+ "CH3", /* category */
+ "If true, mxm tries detecting hugepage support. On HPC-X 2.3 and earlier, this might cause problems on Ubuntu and other platforms even if the system provides hugepage support.");
+ rc = MPL_env2bool("MPICH_NEMESIS_MXM_HUGEPAGE", &(MPIR_CVAR_NEMESIS_MXM_HUGEPAGE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPICH_NEMESIS_MXM_HUGEPAGE");
+ rc = MPL_env2bool("MPIR_PARAM_NEMESIS_MXM_HUGEPAGE", &(MPIR_CVAR_NEMESIS_MXM_HUGEPAGE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_PARAM_NEMESIS_MXM_HUGEPAGE");
+ rc = MPL_env2bool("MPIR_CVAR_NEMESIS_MXM_HUGEPAGE", &(MPIR_CVAR_NEMESIS_MXM_HUGEPAGE));
+ MPIR_ERR_CHKANDJUMP1((-1 == rc),mpi_errno,MPI_ERR_OTHER,"**envvarparse","**envvarparse %s","MPIR_CVAR_NEMESIS_MXM_HUGEPAGE");
+
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+int MPIR_T_cvar_finalize(void)
+{
+ int mpi_errno = MPI_SUCCESS;
+
+ if (MPIR_CVAR_DEFAULT_THREAD_LEVEL != NULL) {
+ MPL_free(MPIR_CVAR_DEFAULT_THREAD_LEVEL);
+ MPIR_CVAR_DEFAULT_THREAD_LEVEL = NULL;
+ }
+
+ if (MPIR_CVAR_NAMESERV_FILE_PUBDIR != NULL) {
+ MPL_free(MPIR_CVAR_NAMESERV_FILE_PUBDIR);
+ MPIR_CVAR_NAMESERV_FILE_PUBDIR = NULL;
+ }
+
+ if (MPIR_CVAR_CH4_NETMOD != NULL) {
+ MPL_free(MPIR_CVAR_CH4_NETMOD);
+ MPIR_CVAR_CH4_NETMOD = NULL;
+ }
+
+ if (MPIR_CVAR_CH4_SHM != NULL) {
+ MPL_free(MPIR_CVAR_CH4_SHM);
+ MPIR_CVAR_CH4_SHM = NULL;
+ }
+
+ if (MPIR_CVAR_NEMESIS_NETMOD != NULL) {
+ MPL_free(MPIR_CVAR_NEMESIS_NETMOD);
+ MPIR_CVAR_NEMESIS_NETMOD = NULL;
+ }
+
+ if (MPIR_CVAR_OFI_USE_PROVIDER != NULL) {
+ MPL_free(MPIR_CVAR_OFI_USE_PROVIDER);
+ MPIR_CVAR_OFI_USE_PROVIDER = NULL;
+ }
+
+ if (MPIR_CVAR_CH3_INTERFACE_HOSTNAME != NULL) {
+ MPL_free(MPIR_CVAR_CH3_INTERFACE_HOSTNAME);
+ MPIR_CVAR_CH3_INTERFACE_HOSTNAME = NULL;
+ }
+
+ if (MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE != NULL) {
+ MPL_free(MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE);
+ MPIR_CVAR_NEMESIS_TCP_NETWORK_IFACE = NULL;
+ }
+
+ return mpi_errno;
+}
+
diff --git a/src/util/dbg/.state-cache b/src/util/dbg/.state-cache
deleted file mode 100644
index 558c112..0000000
--- a/src/util/dbg/.state-cache
+++ /dev/null
@@ -1,16 +0,0 @@
-<dir>
-<file name="timelimit.c" info="1447123141"/>
-<file name="mpidbg.h" info="1447123141"/>
-<file name="dbg_printf.c" info="1447123141"/>
-<file name="dbg_control.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="timelimit.c">
-</fileinfo>
-<fileinfo name="mpidbg.h">
-</fileinfo>
-<fileinfo name="dbg_printf.c">
-</fileinfo>
-<fileinfo name="dbg_control.c">
-</fileinfo>
-</data>
diff --git a/src/util/dbg/Makefile.mk b/src/util/dbg/Makefile.mk
deleted file mode 100644
index 45be049..0000000
--- a/src/util/dbg/Makefile.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-AM_CPPFLAGS += -I$(top_srcdir)/src/util/dbg
-
-noinst_HEADERS += src/util/dbg/mpidbg.h
-
-mpi_core_sources += \
- src/util/dbg/dbg_printf.c \
- src/util/dbg/timelimit.c
diff --git a/src/util/dbg/dbg_control.c b/src/util/dbg/dbg_control.c
deleted file mode 100644
index 574b775..0000000
--- a/src/util/dbg/dbg_control.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpichconf.h"
-#include "mpimem.h"
-#include <string.h>
-
-/* FIXME: Delete this file (functionality switched to MPIU_DBG_MSG interface */
-
-#define MAX_DEBUG_NAME 256
-/*
- This routine checks the argument against the value of the environment
- variable MPICH_DEBUG_ITEM, and if they are the same, returns 1.
- Otherwise, returns 0.
-*/
-int MPIR_IDebug( const char *str )
-{
- static int needEnvValue = 1;
- const char *d;
- static char debugName[MAX_DEBUG_NAME];
-
- if (needEnvValue) {
- d = getenv( "MPICH_DEBUG_ITEM" );
- if (d) {
- /* Make a copy */
- MPIU_Strncpy( debugName, d, MAX_DEBUG_NAME );
- }
- else {
- debugName[0] = 0;
- }
- needEnvValue = 0;
- }
- return strcmp( debugName, str ) == 0;
-}
-
diff --git a/src/util/dbg/dbg_printf.c b/src/util/dbg/dbg_printf.c
deleted file mode 100644
index 46c2dbb..0000000
--- a/src/util/dbg/dbg_printf.c
+++ /dev/null
@@ -1,1192 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/*
- * This file provides a set of routines that can be used to record debug
- * messages in a ring so that the may be dumped at a later time. For example,
- * this can be used to record debug messages without printing them; when
- * a special event, such as an error occurs, a call to
- * MPIU_dump_dbg_memlog( stderr ) will print the contents of the file ring
- * to stderr.
- */
-
-#include "mpiimpl.h"
-
-#include <stdio.h>
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
-#if defined( HAVE_MKSTEMP ) && defined( NEEDS_MKSTEMP_DECL )
-extern int mkstemp(char *t);
-#endif
-
-#if defined( HAVE_FDOPEN ) && defined( NEEDS_FDOPEN_DECL )
-extern FILE *fdopen(int fd, const char *mode);
-#endif
-
-/* Temporary. sig values will change */
-/* style: allow:vprintf:3 sig:0 */
-/* style: allow:fputs:1 sig:0 */
-/* style: allow:printf:2 sig:0 */
-/* style: allow:fprintf:7 sig:0 */
-
-#ifdef HAVE_VA_COPY
-# define va_copy_end(a) va_end(a)
-#else
-# ifdef HAVE___VA_COPY
-# define va_copy(a,b) __va_copy(a,b)
-# define va_copy_end(a)
-# else
-# define va_copy(a,b) ((a) = (b))
-/* Some writers recommend define va_copy(a,b) memcpy(&a,&b,sizeof(va_list)) */
-# define va_copy_end(a)
-# endif
-#endif
-
-#if !defined(MPICH_DBG_MEMLOG_NUM_LINES)
-#define MPICH_DBG_MEMLOG_NUM_LINES 1024
-#endif
-#if !defined(MPICH_DBG_MEMLOG_LINE_SIZE)
-#define MPICH_DBG_MEMLOG_LINE_SIZE 256
-#endif
-
-MPIU_dbg_state_t MPIU_dbg_state = MPIU_DBG_STATE_UNINIT;
-FILE * MPIU_dbg_fp = NULL;
-static int dbg_memlog_num_lines = MPICH_DBG_MEMLOG_NUM_LINES;
-static int dbg_memlog_line_size = MPICH_DBG_MEMLOG_LINE_SIZE;
-static char **dbg_memlog = NULL;
-static int dbg_memlog_next = 0;
-static int dbg_memlog_count = 0;
-static int dbg_rank = -1;
-
-static void dbg_init(void);
-
-int MPIU_dbg_init(int rank)
-{
- dbg_rank = rank;
-
- if (MPIU_dbg_state == MPIU_DBG_STATE_UNINIT)
- {
- dbg_init();
- }
-
- /* If file logging is enable, we need to open a file */
- if (MPIU_dbg_state & MPIU_DBG_STATE_FILE)
- {
- char fn[128];
-
- /* Only open the file only once in case MPIU_dbg_init is called more
- than once */
- if (MPIU_dbg_fp == NULL)
- {
- MPL_snprintf(fn, 128, "mpich-dbg-%d.log", dbg_rank);
- MPIU_dbg_fp = fopen(fn, "w");
- setvbuf(MPIU_dbg_fp, NULL, _IONBF, 0);
- }
- }
-
- return 0;
-}
-
-static void dbg_init(void)
-{
- char * envstr;
-
- MPIU_dbg_state = MPIU_DBG_STATE_NONE;
-
- /* FIXME: This should use MPIU_Param_get_string */
- envstr = getenv("MPICH_DBG_OUTPUT");
- if (envstr == NULL)
- {
- return;
- }
-
- /*
- * TODO:
- *
- * - parse environment variable to determine number of log lines, etc.
- *
- * - add support for writing to a (per-process or global?) file
- *
- * - add support for sending to a log server, perhaps with global time
- * sequencing information ???
- */
- if (strstr(envstr, "stdout"))
- {
- MPIU_dbg_state = (MPIU_dbg_state_t)( MPIU_DBG_STATE_STDOUT |
- MPIU_dbg_state );
- }
- if (strstr(envstr, "memlog"))
- {
- MPIU_dbg_state = (MPIU_dbg_state_t)( MPIU_DBG_STATE_MEMLOG |
- MPIU_dbg_state );
- }
- if (strstr(envstr, "file"))
- {
- MPIU_dbg_state = (MPIU_dbg_state_t) ( MPIU_DBG_STATE_FILE |
- MPIU_dbg_state );
- }
-
- /* If memlog is enabled, the we need to allocate some memory for it */
- if (MPIU_dbg_state & MPIU_DBG_STATE_MEMLOG)
- {
- dbg_memlog = MPIU_Malloc(dbg_memlog_num_lines * sizeof(char *) +
- dbg_memlog_num_lines * dbg_memlog_line_size);
- if (dbg_memlog != NULL)
- {
- int i;
-
- for (i = 0; i < dbg_memlog_num_lines ; i++)
- {
- dbg_memlog[i] = ((char *) &dbg_memlog[dbg_memlog_num_lines]) +
- i * dbg_memlog_line_size;
- }
- }
- else
- {
- MPIU_dbg_state = (MPIU_dbg_state_t)( MPIU_dbg_state &
- ~MPIU_DBG_STATE_MEMLOG );
- }
- }
-}
-
-int MPIU_dbglog_printf(const char *str, ...)
-{
- int n = 0;
- va_list list;
-
- if (MPIU_dbg_state == MPIU_DBG_STATE_UNINIT)
- {
- dbg_init();
- }
-
- if (MPIU_dbg_state & MPIU_DBG_STATE_MEMLOG)
- {
- /* FIXME: put everything on one line until a \n is found */
-
- dbg_memlog[dbg_memlog_next][0] = '\0';
- va_start(list, str);
- n = vsnprintf(dbg_memlog[dbg_memlog_next], dbg_memlog_line_size, str,
- list);
- va_end(list);
-
- /* if the output was truncated, we null terminate the end of the
- string, on the off chance that vsnprintf() didn't do that. we also
- check to see if any data has been written over the null we set at
- the beginning of the string. this is mostly paranoia, but the man
- page does not clearly state what happens when truncation occurs. if
- data was written to the string, we would like to output it, but we
- want to avoid reading past the end of the array or outputing garbage
- data. */
-
- if (n < 0 || n >= dbg_memlog_line_size)
- {
- dbg_memlog[dbg_memlog_next][dbg_memlog_line_size - 1] = '\0';
- n = (int)strlen(dbg_memlog[dbg_memlog_next]);
- }
-
- if (dbg_memlog[dbg_memlog_next][0] != '\0')
- {
- dbg_memlog_next = (dbg_memlog_next + 1) % dbg_memlog_num_lines;
- dbg_memlog_count++;
- }
- }
-
- if (MPIU_dbg_state & MPIU_DBG_STATE_STDOUT)
- {
- va_start(list, str);
- n = vprintf(str, list);
- va_end(list);
- }
-
- if ((MPIU_dbg_state & MPIU_DBG_STATE_FILE) && MPIU_dbg_fp != NULL)
- {
- va_start(list, str);
- n = vfprintf(MPIU_dbg_fp, str, list);
- va_end(list);
- }
-
- return n;
-}
-
-int MPIU_dbglog_vprintf(const char *str, va_list ap)
-{
- int n = 0;
- va_list list;
-
- if (MPIU_dbg_state == MPIU_DBG_STATE_UNINIT)
- {
- dbg_init();
- }
-
- if (MPIU_dbg_state & MPIU_DBG_STATE_MEMLOG)
- {
- va_copy(list,ap);
- dbg_memlog[dbg_memlog_next][0] = '\0';
- n = vsnprintf(dbg_memlog[dbg_memlog_next], dbg_memlog_line_size, str,
- list);
- va_copy_end(list);
-
- /* if the output was truncated, we null terminate the end of the
- string, on the off chance that vsnprintf() didn't do that. we also
- check to see if any data has been written over the null we set at
- the beginning of the string. this is mostly paranoia, but the man
- page does not clearly state what happens when truncation occurs. if
- data was written to the string, we would like to output it, but we
- want to avoid reading past the end of the array or outputing garbage
- data. */
-
- if (n < 0 || n >= dbg_memlog_line_size)
- {
- dbg_memlog[dbg_memlog_next][dbg_memlog_line_size - 1] = '\0';
- n = (int)strlen(dbg_memlog[dbg_memlog_next]);
- }
-
- if (dbg_memlog[dbg_memlog_next][0] != '\0')
- {
- dbg_memlog_next = (dbg_memlog_next + 1) % dbg_memlog_num_lines;
- dbg_memlog_count++;
- }
- }
-
- if (MPIU_dbg_state & MPIU_DBG_STATE_STDOUT)
- {
- va_copy(list, ap);
- n = vprintf(str, list);
- va_copy_end(list);
- }
-
- if ((MPIU_dbg_state & MPIU_DBG_STATE_FILE) && MPIU_dbg_fp != NULL)
- {
- va_copy(list, ap);
- n = vfprintf(MPIU_dbg_fp, str, list);
- va_end(list);
- }
-
- return n;
-}
-
-/* FIXME: */
-int MPIU_dbg_printf(const char * str, ...)
-{
- int n;
-
- /* MPID_Common_thread_lock(); */
- {
- va_list list;
-
- MPIU_dbglog_printf("[%d]", dbg_rank);
- va_start(list, str);
- n = MPIU_dbglog_vprintf(str, list);
- va_end(list);
- MPIU_dbglog_flush();
- }
- /* MPID_Common_thread_unlock(); */
-
- return n;
-}
-
-void MPIU_dump_dbg_memlog_to_stdout(void)
-{
- MPIU_dump_dbg_memlog(stdout);
-}
-
-void MPIU_dump_dbg_memlog_to_file(const char *filename)
-{
- FILE *fout;
- fout = fopen(filename, "wb");
- if (fout != NULL)
- {
- MPIU_dump_dbg_memlog(fout);
- fclose(fout);
- }
-}
-
-void MPIU_dump_dbg_memlog(FILE * fp){
- if (dbg_memlog_count != 0)
- {
- int ent;
- int last_ent;
-
- /* there is a small issue with counter rollover which will need to be
- fixed if more than 2^32 lines are going to be logged */
- ent = (dbg_memlog_next == dbg_memlog_count) ? 0 : dbg_memlog_next;
- last_ent = (ent + dbg_memlog_num_lines - 1) % dbg_memlog_num_lines;
-
- do
- {
- fputs(dbg_memlog[ent], fp);
- ent = (ent + 1) % dbg_memlog_num_lines;
- }
- while(ent != last_ent);
- fflush(fp);
- }
-}
-
-#ifdef USE_DBG_LOGGING
-/*
- * NEW ROUTINES FOR DEBUGGING
- */
-#ifndef MAXPATHLEN
-#define MAXPATHLEN 1024
-#endif
-
-int MPIU_DBG_ActiveClasses = 0;
-int MPIU_DBG_MaxLevel = MPIU_DBG_TYPICAL;
-static enum {MPIU_DBG_UNINIT, MPIU_DBG_PREINIT, MPIU_DBG_INITIALIZED, MPIU_DBG_ERROR}
- mpiu_dbg_initialized = MPIU_DBG_UNINIT;
-static char filePatternBuf[MAXPATHLEN] = "";
-static const char *filePattern = "-stdout-"; /* "log%d.log"; */
-static const char *defaultFilePattern = "dbg at W%w-@%d at T-%t at .log";
-static char temp_filename[MAXPATHLEN] = "";
-static int worldNum = 0;
-static int worldRank = -1;
-static int whichRank = -1; /* all ranks */
-static int resetTimeOrigin = 1;
-static double timeOrigin = 0.0;
-
-static int MPIU_DBG_Usage( const char *, const char * );
-static int MPIU_DBG_OpenFile(FILE **dbg_fp);
-static int setDBGClass( const char * );
-static int SetDBGLevel( const char *, const char *(names[]) );
-static int MPIU_DBG_Get_filename(char *filename, int len);
-
-#ifdef MPICH_IS_THREADED
-static MPID_Thread_tls_t dbg_tls_key;
-#endif
-
-static FILE *static_dbg_fp = 0;
-
-static void dbg_init_tls(void)
-{
-#ifdef MPICH_IS_THREADED
- int err;
-
- MPID_Thread_tls_create(NULL, &dbg_tls_key, &err);
- MPIU_Assert(err == 0);
-#endif
-}
-
-static FILE *get_fp(void)
-{
-#ifdef MPICH_IS_THREADED
- int err;
- /* if we're not initialized, use the static fp, since there should
- * only be one thread in here until then */
- MPIU_THREAD_CHECK_BEGIN;
- if (mpiu_dbg_initialized == MPIU_DBG_INITIALIZED) {
- FILE *fp;
- MPID_Thread_tls_get(&dbg_tls_key, (void **) &fp, &err);
- return fp;
- }
- MPIU_THREAD_CHECK_END;
-#endif
-
- return static_dbg_fp;
-}
-
-static void set_fp(FILE *fp)
-{
-#ifdef MPICH_IS_THREADED
- int err;
- /* if we're not initialized, use the static fp, since there should
- * only be one thread in here until then */
- MPIU_THREAD_CHECK_BEGIN;
- if (mpiu_dbg_initialized == MPIU_DBG_INITIALIZED) {
- MPID_Thread_tls_set(&dbg_tls_key, (void *)fp, &err);
- return;
- }
- MPIU_THREAD_CHECK_END;
-#endif
-
- static_dbg_fp = fp;
-}
-
-
-int MPIU_DBG_Outevent( const char *file, int line, int class, int kind,
- const char *fmat, ... )
-{
- int mpi_errno = MPI_SUCCESS;
- va_list list;
- char *str, stmp[MPIU_DBG_MAXLINE];
- int i;
- void *p;
- MPID_Time_t t;
- double curtime;
- unsigned long long int threadID = 0;
- int pid = -1;
- FILE *dbg_fp = NULL;
-
- if (mpiu_dbg_initialized == MPIU_DBG_UNINIT || mpiu_dbg_initialized == MPIU_DBG_ERROR) goto fn_exit;
-
- dbg_fp = get_fp();
-
-#ifdef MPICH_IS_THREADED
- {
- /* the thread ID is not necessarily unique between processes, so a
- * (pid,tid) pair should be used to uniquely identify output from
- * particular threads on a system */
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
- }
-#endif
-#if defined(HAVE_GETPID)
- pid = (int)getpid();
-#endif /* HAVE_GETPID */
-
- if (!dbg_fp) {
- mpi_errno = MPIU_DBG_OpenFile(&dbg_fp);
- if (mpi_errno) goto fn_fail;
- set_fp(dbg_fp);
- }
-
- MPID_Wtime( &t );
- MPID_Wtime_todouble( &t, &curtime );
- curtime = curtime - timeOrigin;
-
- /* The kind values are used with the macros to simplify these cases */
- switch (kind) {
- case 0:
- va_start(list,fmat);
- str = va_arg(list,char *);
- fprintf( dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
- worldNum, worldRank, threadID, pid, class, curtime,
- file, line, str );
- break;
- case 1:
- va_start(list,fmat);
- str = va_arg(list,char *);
- MPL_snprintf( stmp, sizeof(stmp), fmat, str );
- va_end(list);
- fprintf( dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
- worldNum, worldRank, threadID, pid, class, curtime,
- file, line, stmp );
- break;
- case 2:
- va_start(list,fmat);
- i = va_arg(list,int);
- MPL_snprintf( stmp, sizeof(stmp), fmat, i);
- va_end(list);
- fprintf( dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
- worldNum, worldRank, threadID, pid, class, curtime,
- file, line, stmp );
- break;
- case 3:
- va_start(list,fmat);
- p = va_arg(list,void *);
- MPL_snprintf( stmp, sizeof(stmp), fmat, p);
- va_end(list);
- fprintf( dbg_fp, "%d\t%d\t%llx[%d]\t%d\t%f\t%s\t%d\t%s\n",
- worldNum, worldRank, threadID, pid, class, curtime,
- file, line, stmp );
- break;
- default:
- break;
- }
- fflush(dbg_fp);
-
- fn_exit:
- fn_fail:
- return 0;
-}
-
-/* These are used to simplify the handling of options.
- To add a new name, add an MPIU_DBG_ClassName element to the array
- MPIU_Classnames. The "classbits" values are defined by MPIU_DBG_CLASS
- in src/include/mpidbg.h
- */
-
-typedef struct MPIU_DBG_ClassName {
- int classbits;
- const char *UCName, *LCName;
-} MPIU_DBG_ClassName;
-
-static const MPIU_DBG_ClassName MPIU_Classnames[] = {
- { MPIU_DBG_PT2PT, "PT2PT", "pt2pt" },
- { MPIU_DBG_RMA, "RMA", "rma" },
- { MPIU_DBG_THREAD, "THREAD", "thread" },
- { MPIU_DBG_PM, "PM", "pm" },
- { MPIU_DBG_ROUTINE_ENTER, "ROUTINE_ENTER", "routine_enter" },
- { MPIU_DBG_ROUTINE_EXIT, "ROUTINE_EXIT", "routine_exit" },
- { MPIU_DBG_ROUTINE_ENTER |
- MPIU_DBG_ROUTINE_EXIT, "ROUTINE", "routine" },
- { MPIU_DBG_SYSCALL, "SYSCALL", "syscall" },
- { MPIU_DBG_DATATYPE, "DATATYPE", "datatype" },
- { MPIU_DBG_HANDLE, "HANDLE", "handle" },
- { MPIU_DBG_COMM, "COMM", "comm" },
- { MPIU_DBG_BSEND, "BSEND", "bsend" },
- { MPIU_DBG_OTHER, "OTHER", "other" },
- { MPIU_DBG_CH3_CONNECT, "CH3_CONNECT", "ch3_connect" },
- { MPIU_DBG_CH3_DISCONNECT,"CH3_DISCONNECT","ch3_disconnect" },
- { MPIU_DBG_CH3_PROGRESS, "CH3_PROGRESS", "ch3_progress" },
- { MPIU_DBG_CH3_CHANNEL, "CH3_CHANNEL", "ch3_channel" },
- { MPIU_DBG_CH3_MSG, "CH3_MSG", "ch3_msg" },
- { MPIU_DBG_CH3_OTHER, "CH3_OTHER", "ch3_other" },
- { MPIU_DBG_CH3, "CH3", "ch3" },
- { MPIU_DBG_NEM_SOCK_FUNC, "NEM_SOCK_FUNC", "nem_sock_func"},
- { MPIU_DBG_NEM_SOCK_DET, "NEM_SOCK_DET", "nem_sock_det"},
- { MPIU_DBG_VC, "VC", "vc"},
- { MPIU_DBG_REFCOUNT, "REFCOUNT", "refcount"},
- { MPIU_DBG_ROMIO, "ROMIO", "romio"},
- { MPIU_DBG_ERRHAND, "ERRHAND", "errhand"},
- { MPIU_DBG_ALL, "ALL", "all" },
- { 0, 0, 0 }
-};
-
-/* Because the level values are simpler and are rarely changed, these
- use a simple set of parallel arrays */
-static const int MPIU_Levelvalues[] = { MPIU_DBG_TERSE,
- MPIU_DBG_TYPICAL,
- MPIU_DBG_VERBOSE, 100 };
-static const char *MPIU_Levelname[] = { "TERSE", "TYPICAL", "VERBOSE", 0 };
-static const char *MPIU_LCLevelname[] = { "terse", "typical", "verbose", 0 };
-
-/*
- * Initialize the DBG_MSG system. This is called during MPI_Init to process
- * command-line arguments as well as checking the MPICH_DBG environment
- * variables. The initialization is split into two steps: a preinit and an
- * init. This makes it possible to enable most of the features before calling
- * MPID_Init, where a significant amount of the initialization takes place.
- */
-
-static int MPIU_DBG_ProcessArgs( int *argc_p, char ***argv_p )
-{
- int i, rc;
-
- /* Here's where we do the same thing with the command-line options */
- if (argc_p) {
- for (i=1; i<*argc_p; i++) {
- if (strncmp((*argv_p)[i],"-mpich-dbg", 10) == 0) {
- char *s = (*argv_p)[i] + 10;
- /* Found a command */
- if (*s == 0) {
- /* Just -mpich-dbg */
- MPIU_DBG_MaxLevel = MPIU_DBG_TYPICAL;
- MPIU_DBG_ActiveClasses = MPIU_DBG_ALL;
- }
- else if (*s == '=') {
- /* look for file */
- MPIU_DBG_MaxLevel = MPIU_DBG_TYPICAL;
- MPIU_DBG_ActiveClasses = MPIU_DBG_ALL;
- s++;
- if (strncmp( s, "file", 4 ) == 0) {
- filePattern = defaultFilePattern;
- }
- }
- else if (strncmp(s,"-level",6) == 0) {
- char *p = s + 6;
- if (*p == '=') {
- p++;
- rc = SetDBGLevel( p, MPIU_LCLevelname );
- if (rc)
- MPIU_DBG_Usage( "-mpich-dbg-level", "terse, typical, verbose" );
- }
- }
- else if (strncmp(s,"-class",6) == 0) {
- char *p = s + 6;
- if (*p == '=') {
- p++;
- rc = setDBGClass( p );
- if (rc)
- MPIU_DBG_Usage( "-mpich-dbg-class", 0 );
- }
- }
- else if (strncmp( s, "-filename", 9 ) == 0) {
- char *p = s + 9;
- if (*p == '=') {
- p++;
- /* A special case for a filepattern of "-default",
- use the predefined default pattern */
- if (strcmp( p, "-default" ) == 0) {
- filePattern = defaultFilePattern;
- }
- else {
- strncpy(filePatternBuf, p, sizeof(filePatternBuf));
- filePattern = filePatternBuf;
- }
- }
- }
- else if (strncmp( s, "-rank", 5 ) == 0) {
- char *p = s + 5;
- if (*p == '=' && p[1] != 0) {
- char *sOut;
- p++;
- whichRank = (int)strtol( p, &sOut, 10 );
- if (p == sOut) {
- MPIU_DBG_Usage( "-mpich-dbg-rank", 0 );
- whichRank = -1;
- }
- }
- }
- else {
- MPIU_DBG_Usage( (*argv_p)[i], 0 );
- }
-
- /* Eventually, should null it out and reduce argc value */
- }
- }
- }
- return MPI_SUCCESS;
-}
-
-static int MPIU_DBG_ProcessEnv( void )
-{
- char *s;
- int rc;
-
- s = getenv( "MPICH_DBG" );
- if (s) {
- /* Set the defaults */
- MPIU_DBG_MaxLevel = MPIU_DBG_TYPICAL;
- MPIU_DBG_ActiveClasses = MPIU_DBG_ALL;
- if (strncmp(s,"FILE",4) == 0) {
- filePattern = defaultFilePattern;
- }
- }
- s = getenv( "MPICH_DBG_LEVEL" );
- if (s) {
- rc = SetDBGLevel( s, MPIU_Levelname );
- if (rc)
- MPIU_DBG_Usage( "MPICH_DBG_LEVEL", "TERSE, TYPICAL, VERBOSE" );
- }
-
- s = getenv( "MPICH_DBG_CLASS" );
- rc = setDBGClass( s );
- if (rc)
- MPIU_DBG_Usage( "MPICH_DBG_CLASS", 0 );
-
- s = getenv( "MPICH_DBG_FILENAME" );
- if (s) {
- strncpy(filePatternBuf, s, sizeof(filePatternBuf));
- filePattern = filePatternBuf;
- }
-
- s = getenv( "MPICH_DBG_RANK" );
- if (s) {
- char *sOut;
- whichRank = (int)strtol( s, &sOut, 10 );
- if (s == sOut) {
- MPIU_DBG_Usage( "MPICH_DBG_RANK", 0 );
- whichRank = -1;
- }
- }
- return MPI_SUCCESS;
-}
-
-/*
- * Attempt to initialize the logging system. This works only if MPID_Init
- * is not responsible for updating the environment and/or command-line
- * arguments.
- */
-int MPIU_DBG_PreInit( int *argc_p, char ***argv_p, int wtimeNotReady )
-{
- MPID_Time_t t;
-
- /* if the DBG_MSG system was already initialized, say by the device, then
- return immediately */
- if (mpiu_dbg_initialized != MPIU_DBG_UNINIT) return MPI_SUCCESS;
-
- dbg_init_tls();
-
- /* Check to see if any debugging was selected. The order of these
- tests is important, as they allow general defaults to be set,
- followed by more specific modifications */
- /* First, the environment variables */
- MPIU_DBG_ProcessEnv();
-
- MPIU_DBG_ProcessArgs( argc_p, argv_p );
-
- if (wtimeNotReady == 0) {
- MPID_Wtime( &t );
- MPID_Wtime_todouble( &t, &timeOrigin );
- resetTimeOrigin = 0;
- }
-
- mpiu_dbg_initialized = MPIU_DBG_PREINIT;
-
- return MPI_SUCCESS;
-}
-
-int MPIU_DBG_Init( int *argc_p, char ***argv_p, int has_args, int has_env,
- int wrank )
-{
- int ret;
- FILE *dbg_fp = NULL;
-
- /* if the DBG_MSG system was already initialized, say by the device, then
- return immediately. Note that the device is then responsible
- for handling the file mode (e.g., reopen when the rank become
- available) */
- if (mpiu_dbg_initialized == MPIU_DBG_INITIALIZED || mpiu_dbg_initialized == MPIU_DBG_ERROR) return MPI_SUCCESS;
-
- if (mpiu_dbg_initialized != MPIU_DBG_PREINIT)
- dbg_init_tls();
-
- dbg_fp = get_fp();
-
- /* We may need to wait until the device is set up to initialize the timer */
- if (resetTimeOrigin) {
- MPID_Time_t t;
- MPID_Wtime( &t );
- MPID_Wtime_todouble( &t, &timeOrigin );
- resetTimeOrigin = 0;
- }
- /* Check to see if any debugging was selected. The order of these
- tests is important, as they allow general defaults to be set,
- followed by more specific modifications. */
- /* Both of these may have already been set in the PreInit call;
- if the command line and/or environment variables are set before
- MPID_Init, then don't call the routines to check those values
- (as they were already handled in DBG_PreInit) */
- /* First, the environment variables */
- if (!has_env)
- MPIU_DBG_ProcessEnv();
- /* Now the command-line arguments */
- if (!has_args)
- MPIU_DBG_ProcessArgs( argc_p, argv_p );
-
- worldRank = wrank;
-
- if (whichRank >= 0 && whichRank != wrank) {
- /* Turn off logging on this process */
- MPIU_DBG_ActiveClasses = 0;
- }
-
- /* If the file has already been opened with a temp filename,
- rename it. */
- if (dbg_fp && dbg_fp != stdout && dbg_fp != stderr)
- {
- char filename[MAXPATHLEN] = "";
-
- MPIU_DBG_Get_filename(filename, MAXPATHLEN);
- ret = rename(temp_filename, filename);
- if (ret){
- /* Retry renaming file after closing it */
- fclose(dbg_fp);
- ret = rename(temp_filename, filename);
- if(ret){
- MPL_error_printf("Could not rename temp log file to %s\n", filename );
- goto fn_fail;
- }
- else{
- dbg_fp = fopen(filename, "a+");
- set_fp(dbg_fp);
- if(dbg_fp == NULL){
- MPL_error_printf("Error re-opening log file, %s\n", filename);
- goto fn_fail;
- }
- }
- }
- }
-
- mpiu_dbg_initialized = MPIU_DBG_INITIALIZED;
- fn_exit:
- return MPI_SUCCESS;
- fn_fail:
- mpiu_dbg_initialized = MPIU_DBG_ERROR;
- goto fn_exit;
-}
-
-/* Print the usage statement to stderr */
-static int MPIU_DBG_Usage( const char *cmd, const char *vals )
-{
- if (vals) {
- fprintf( stderr, "Incorrect value for %s, should be one of %s\n",
- cmd, vals );
- }
- else {
- fprintf( stderr, "Incorrect value for %s\n", cmd );
- }
- fprintf( stderr,
-"Command line for debug switches\n\
- -mpich-dbg-class=name[,name,...]\n\
- -mpich-dbg-level=name (one of terse, typical, verbose)\n\
- -mpich-dbg-filename=pattern (includes %%d for world rank, %%t for thread id\n\
- -mpich-dbg-rank=val (only this rank in COMM_WORLD will be logged)\n\
- -mpich-dbg (shorthand for -mpich-dbg-class=all -mpich-dbg-level=typical)\n\
- -mpich-dbg=file (shorthand for -mpich-dbg -mpich-dbg-filename=%s)\n\
-Environment variables\n\
- MPICH_DBG_CLASS=NAME[,NAME...]\n\
- MPICH_DBG_LEVEL=NAME\n\
- MPICH_DBG_FILENAME=pattern\n\
- MPICH_DBG_RANK=val\n\
- MPICH_DBG=YES or FILE\n", defaultFilePattern );
-
- fflush(stderr);
-
- return 0;
-}
-
-#if defined (HAVE_MKSTEMP) && defined (HAVE_FDOPEN)
-/* creates a temporary file in the same directory the
- user specified for the log file */
-#undef FUNCNAME
-#define FUNCNAME MPIU_DBG_Open_temp_file
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIU_DBG_Open_temp_file(FILE **dbg_fp)
-{
- int mpi_errno = MPI_SUCCESS;
- const char temp_pattern[] = "templogXXXXXX";
- int fd;
- char *basename;
- int ret;
-
- ret = MPIU_Strncpy(temp_filename, filePattern, MAXPATHLEN);
- if (ret) goto fn_fail;
-
- MPIU_Basename(temp_filename, &basename);
-
- /* make sure there's enough room in temp_filename to store temp_pattern */
- if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern)) goto fn_fail;
-
- MPIU_Strncpy(basename, temp_pattern, sizeof(temp_pattern));
-
- fd = mkstemp(temp_filename);
- if (fd == -1) goto fn_fail;
-
- *dbg_fp = fdopen(fd, "a+");
- if (*dbg_fp == NULL) goto fn_fail;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- MPL_error_printf( "Could not open log file %s\n", temp_filename );
- mpiu_dbg_initialized = MPIU_DBG_ERROR;
- mpi_errno = MPI_ERR_INTERN;
- goto fn_exit;
-}
-#elif defined(HAVE__MKTEMP_S) && defined(HAVE_FOPEN_S)
-/* creates a temporary file in the same directory the
- user specified for the log file */
-#undef FUNCNAME
-#define FUNCNAME MPIU_DBG_Open_temp_file
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIU_DBG_Open_temp_file(FILE **dbg_fp)
-{
- int mpi_errno = MPI_SUCCESS;
- const char temp_pattern[] = "templogXXXXXX";
- int fd;
- char *basename;
- int ret;
- errno_t ret_errno;
-
- ret = MPIU_Strncpy(temp_filename, filePattern, MAXPATHLEN);
- if (ret) goto fn_fail;
-
- MPIU_Basename(temp_filename, &basename);
-
- /* make sure there's enough room in temp_filename to store temp_pattern */
- if (basename - temp_filename > MAXPATHLEN - sizeof(temp_pattern)) goto fn_fail;
-
- MPIU_Strncpy(basename, temp_pattern, sizeof(temp_pattern));
-
- ret_errno = _mktemp_s(temp_filename, MAXPATHLEN);
- if (ret_errno != 0) goto fn_fail;
-
- ret_errno = fopen_s(dbg_fp, temp_filename, "a+");
- if (ret_errno != 0) goto fn_fail;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- MPL_error_printf( "Could not open log file %s\n", temp_filename );
- mpiu_dbg_initialized = MPIU_DBG_ERROR;
- mpi_errno = MPI_ERR_INTERN;
- goto fn_exit;
-}
-#else
-/* creates a temporary file in some directory, which may not be where
- the user wants the log file. When the file is renamed later, it
- may require a copy.
-
- Note that this is not safe: By the time we call fopen(), another
- file with the same name may exist. That file would get clobbered.
-*/
-#undef FUNCNAME
-#define FUNCNAME MPIU_DBG_Open_temp_file
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static int MPIU_DBG_Open_temp_file(FILE **dbg_fp)
-{
- int mpi_errno = MPI_SUCCESS;
- const char temp_pattern[] = "templogXXXXXX";
- int fd;
- char *basename;
- int ret;
- char *cret;
-
- cret = tmpnam(temp_filename);
- if (cret == NULL) goto fn_fail;
-
- *dbg_fp = fopen(temp_filename, "w");
- if (*dbg_fp == NULL) goto fn_fail;
-
- fn_exit:
- return mpi_errno;
- fn_fail:
- MPL_error_printf( "Could not open log file %s\n", temp_filename );
- mpiu_dbg_initialized = MPIU_DBG_ERROR;
- mpi_errno = MPI_ERR_INTERN;
- goto fn_exit;
-}
-
-#endif
-
-/* This routine can make no MPI calls, since it may be logging those
- calls. */
-static int MPIU_DBG_Get_filename(char *filename, int len)
-{
- int withinMworld = 0, /* True if within an @W...@ */
- withinMthread = 0; /* True if within an @T...@ */
- /* FIXME: Need to know how many MPI_COMM_WORLDs are known */
- int nWorld = 1;
-#ifdef MPICH_IS_THREADED
- unsigned long long int threadID = 0;
- int nThread = 2;
-#else
- int nThread = 1;
-#endif
- static char worldNumAsChar[10] = "0";
- char *pDest;
- const char *p;
-
- /* FIXME: This is a hack to handle the common case of two worlds */
- if (MPIR_Process.comm_parent != NULL) {
- nWorld = 2;
- worldNumAsChar[0] = '1';
- worldNumAsChar[1] = '\0';
- }
-
- p = filePattern;
- pDest = filename;
- *filename = 0;
- while (*p && (pDest-filename) < len-1) {
- /* There are two special cases that allow text to
- be optionally included. Those patterns are
- @T...@ (only if multi-threaded) and
- @W...@ (only if more than one MPI_COMM_WORLD)
- UNIMPLEMENTED/UNTESTED */
- if (*p == '@') {
- /* Escaped @? */
- if (p[1] == '@') {
- *pDest++ = *++p;
- continue;
- }
- /* If within an @...@, terminate it */
- if (withinMworld) {
- withinMworld = 0;
- p++;
- }
- else if (withinMthread) {
- withinMthread = 0;
- p++;
- }
- else {
- /* Look for command */
- p++;
- if (*p == 'W') {
- p++;
- withinMworld = 1;
- }
- else if (*p == 'T') {
- p++;
- withinMthread = 1;
- }
- else {
- /* Unrecognized char */
- *pDest++ = *p++;
- }
- }
- }
- else if ( (withinMworld && nWorld == 1) ||
- (withinMthread && nThread == 1) ) {
- /* Simply skip this character since we're not showing
- this string */
- p++;
- }
- else if (*p == '%') {
- p++;
- if (*p == 'd') {
- char rankAsChar[20];
- MPL_snprintf( rankAsChar, sizeof(rankAsChar), "%d",
- worldRank );
- *pDest = 0;
- MPIU_Strnapp( filename, rankAsChar, len );
- pDest += strlen(rankAsChar);
- }
- else if (*p == 't') {
-#ifdef MPICH_IS_THREADED
- char threadIDAsChar[30];
- MPIU_Thread_id_t tid;
- MPIU_Thread_self(&tid);
- threadID = (unsigned long long int)tid;
-
- MPL_snprintf( threadIDAsChar, sizeof(threadIDAsChar),
- "%llx", threadID );
- *pDest = 0;
- MPIU_Strnapp( filename, threadIDAsChar, len );
- pDest += strlen(threadIDAsChar);
-#else
- *pDest++ = '0';
-#endif /* MPICH_IS_THREADED */
- }
- else if (*p == 'w') {
- /* FIXME: Get world number */
- /* *pDest++ = '0'; */
- *pDest = 0;
- MPIU_Strnapp( filename, worldNumAsChar, len );
- pDest += strlen(worldNumAsChar);
- }
- else if (*p == 'p') {
- /* Appends the pid of the proceess to the file name. */
- char pidAsChar[20];
-#if defined(HAVE_GETPID)
- pid_t pid = getpid();
-#else
- int pid = -1;
-#endif /* HAVE_GETPID */
- MPL_snprintf( pidAsChar, sizeof(pidAsChar), "%d", (int)pid );
- *pDest = 0;
- MPIU_Strnapp( filename, pidAsChar, len );
- pDest += strlen(pidAsChar);
- }
- else {
- *pDest++ = '%';
- *pDest++ = *p;
- }
- p++;
- }
- else {
- *pDest++ = *p++;
- }
- }
- *pDest = 0;
-
- return 0;
-}
-
-/* This routine can make no MPI calls, since it may be logging those
- calls. */
-static int MPIU_DBG_OpenFile(FILE **dbg_fp)
-{
- int mpi_errno = MPI_SUCCESS;
- if (!filePattern || *filePattern == 0 ||
- strcmp(filePattern, "-stdout-" ) == 0) {
- *dbg_fp = stdout;
- }
- else if (strcmp( filePattern, "-stderr-" ) == 0) {
- *dbg_fp = stderr;
- }
- else {
- char filename[MAXPATHLEN];
-
- /* if we're not at MPIU_DBG_INITIALIZED, we don't know our
- rank yet, so we create a temp file, to be renamed later */
- if (mpiu_dbg_initialized != MPIU_DBG_INITIALIZED)
- {
- mpi_errno = MPIU_DBG_Open_temp_file(dbg_fp);
- if (mpi_errno) goto fn_fail;
- }
- else
- {
- mpi_errno = MPIU_DBG_Get_filename(filename, MAXPATHLEN);
- if (mpi_errno) goto fn_fail;
-
- *dbg_fp = fopen( filename, "w" );
- if (!*dbg_fp) {
- MPL_error_printf( "Could not open log file %s\n", filename );
- if (mpi_errno) goto fn_fail;
- }
- }
- }
- fn_exit:
- return mpi_errno;
- fn_fail:
- mpiu_dbg_initialized = MPIU_DBG_ERROR;
- mpi_errno = MPI_ERR_INTERN;
- goto fn_exit;
-}
-
-/* Support routines for processing mpich-dbg values */
-/* Update the GLOBAL variable MPIU_DBG_ActiveClasses with
- the bits corresponding to this name */
-static int setDBGClass( const char *s )
-{
- int i;
- size_t slen = 0;
- size_t len = 0;
-
- if (s && *s) slen = strlen(s);
-
- while (s && *s) {
- for (i=0; MPIU_Classnames[i].LCName; i++) {
- /* The LCLen and UCLen *should* be the same, but
- just in case, we separate them */
- size_t LClen = strlen(MPIU_Classnames[i].LCName);
- size_t UClen = strlen(MPIU_Classnames[i].UCName);
- int matchClass = 0;
-
- /* Allow the upper case and lower case in all cases */
- if (slen >= LClen &&
- strncmp(s,MPIU_Classnames[i].LCName, LClen) == 0 &&
- (s[LClen] == ',' || s[LClen] == 0) ) {
- matchClass = 1;
- len = LClen;
- }
- else if (slen >= UClen &&
- strncmp(s,MPIU_Classnames[i].UCName, UClen) == 0 &&
- (s[UClen] == ',' || s[UClen] == 0) ) {
- matchClass = 1;
- len = UClen;
- }
- if (matchClass) {
- MPIU_DBG_ActiveClasses |= MPIU_Classnames[i].classbits;
- s += len;
- slen -= len;
- if (*s == ',') { s++; slen--; }
- /* If we found a name, we need to restart the for loop */
- break;
- }
- }
- if (!MPIU_Classnames[i].LCName) {
- return 1;
- }
- }
- return 0;
-}
-
-/* Set the global MPIU_DBG_MaxLevel if there is a match with the known level
- names
-*/
-static int SetDBGLevel( const char *s, const char *(names[]) )
-{
- int i;
-
- for (i=0; names[i]; i++) {
- if (strcmp( names[i], s ) == 0) {
- MPIU_DBG_MaxLevel = MPIU_Levelvalues[i];
- return 0;
- }
- }
- return 1;
-}
-#endif /* USE_DBG_LOGGING */
diff --git a/src/util/dbg/mpidbg.h b/src/util/dbg/mpidbg.h
deleted file mode 100644
index 4c2dd67..0000000
--- a/src/util/dbg/mpidbg.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2005 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIDBG_H_INCLUDED
-#define MPIDBG_H_INCLUDED
-#include <stdio.h>
-#include <stdarg.h>
-#include "mpl.h"
-
-/*
- * Multilevel debugging and tracing macros.
- * The design is discussed at
- * http://wiki.mpich.org/mpich/index.php/Debug_Event_Logging
- *
- * Basically, this provide a way to place debugging messages into
- * groups (called *classes*), with levels of detail, and arbitrary
- * messages. The messages can be turned on and off using environment
- * variables and/or command-line options.
- */
-
-#ifdef USE_DBG_LOGGING
-#define MPIU_DBG_SELECTED(_class,_level) \
- ((MPIU_DBG_##_class & MPIU_DBG_ActiveClasses) && \
- MPIU_DBG_##_level <= MPIU_DBG_MaxLevel)
-#define MPIU_DBG_MSG(_class,_level,_string) \
- {if ( (MPIU_DBG_##_class & MPIU_DBG_ActiveClasses) && \
- MPIU_DBG_##_level <= MPIU_DBG_MaxLevel ) {\
- MPIU_DBG_Outevent( __FILE__, __LINE__, MPIU_DBG_##_class, 0, "%s", _string ); }}
-#define MPIU_DBG_MSG_S(_class,_level,_fmat,_string) \
- {if ( (MPIU_DBG_##_class & MPIU_DBG_ActiveClasses) && \
- MPIU_DBG_##_level <= MPIU_DBG_MaxLevel ) {\
- MPIU_DBG_Outevent( __FILE__, __LINE__, MPIU_DBG_##_class, 1, _fmat, _string ); }}
-#define MPIU_DBG_MSG_D(_class,_level,_fmat,_int) \
- {if ( (MPIU_DBG_##_class & MPIU_DBG_ActiveClasses) && \
- MPIU_DBG_##_level <= MPIU_DBG_MaxLevel ) {\
- MPIU_DBG_Outevent( __FILE__, __LINE__, MPIU_DBG_##_class, 2, _fmat, _int ); }}
-#define MPIU_DBG_MSG_P(_class,_level,_fmat,_pointer) \
- {if ( (MPIU_DBG_##_class & MPIU_DBG_ActiveClasses) && \
- MPIU_DBG_##_level <= MPIU_DBG_MaxLevel ) {\
- MPIU_DBG_Outevent( __FILE__, __LINE__, MPIU_DBG_##_class, 3, _fmat, _pointer ); }}
-
-#define MPIU_DBG_MAXLINE 256
-#define MPIU_DBG_FDEST _s,(size_t)MPIU_DBG_MAXLINE
-/*M
- MPIU_DBG_MSG_FMT - General debugging output macro
-
- Notes:
- To use this macro, the third argument should be an "sprintf" - style
- argument, using MPIU_DBG_FDEST as the buffer argument. For example,
-.vb
- MPIU_DBG_MSG_FMT(CMM,VERBOSE,(MPIU_DBG_FDEST,"fmat",args...));
-.ve
- M*/
-#define MPIU_DBG_MSG_FMT(_class,_level,_fmatargs) \
- {if ( (MPIU_DBG_##_class & MPIU_DBG_ActiveClasses) && \
- MPIU_DBG_##_level <= MPIU_DBG_MaxLevel ) {\
- char _s[MPIU_DBG_MAXLINE]; \
- MPL_snprintf _fmatargs ; \
- MPIU_DBG_Outevent( __FILE__, __LINE__, MPIU_DBG_##_class, 0, "%s", _s ); }}
-#define MPIU_DBG_STMT(_class,_level,_stmt) \
- {if ( (MPIU_DBG_##_class & MPIU_DBG_ActiveClasses) && \
- MPIU_DBG_##_level <= MPIU_DBG_MaxLevel ) { _stmt; }}
-
-#define MPIU_DBG_OUT(_class,_msg) \
- MPIU_DBG_Outevent( __FILE__, __LINE__, MPIU_DBG_##_class, 0, "%s", _msg )
-#define MPIU_DBG_OUT_FMT(_class,_fmatargs) \
- { char _s[MPIU_DBG_MAXLINE]; \
- MPL_snprintf _fmatargs ; \
- MPIU_DBG_Outevent( __FILE__, __LINE__, MPIU_DBG_##_class, 0, "%s", _s );}
-
-#else
-#define MPIU_DBG_SELECTED(_class,_level) 0
-#define MPIU_DBG_MSG(_class,_level,_string)
-#define MPIU_DBG_MSG_S(_class,_level,_fmat,_string)
-#define MPIU_DBG_MSG_D(_class,_level,_fmat,_int)
-#define MPIU_DBG_MSG_P(_class,_level,_fmat,_int)
-#define MPIU_DBG_MSG_FMT(_class,_level,_fmatargs)
-#define MPIU_DBG_STMT(_class,_level,_stmt)
-#define MPIU_DBG_OUT(_class,_msg)
-#define MPIU_DBG_OUT_FMT(_class,_fmtargs)
-#endif
-
-/* Special constants */
-enum MPIU_DBG_LEVEL { MPIU_DBG_TERSE = 0,
- MPIU_DBG_TYPICAL = 50,
- MPIU_DBG_VERBOSE = 99 };
-/* Any change in MPIU_DBG_CLASS must be matched by changes in
- MPIU_Classnames in src/util/dbg/dbg_printf.c */
-enum MPIU_DBG_CLASS { MPIU_DBG_PT2PT = 0x1,
- MPIU_DBG_RMA = 0x2,
- MPIU_DBG_THREAD = 0x4,
- MPIU_DBG_PM = 0x8,
- MPIU_DBG_ROUTINE_ENTER = 0x10,
- MPIU_DBG_ROUTINE_EXIT = 0x20,
- MPIU_DBG_SYSCALL = 0x40,
- MPIU_DBG_DATATYPE = 0x80,
- MPIU_DBG_HANDLE = 0x100,
- MPIU_DBG_COMM = 0x200,
- MPIU_DBG_BSEND = 0x400,
- MPIU_DBG_OTHER = 0x800,
- MPIU_DBG_CH3_CONNECT = 0x1000,
- MPIU_DBG_CH3_DISCONNECT= 0x2000,
- MPIU_DBG_CH3_PROGRESS = 0x4000,
- MPIU_DBG_CH3_CHANNEL = 0x8000,
- MPIU_DBG_CH3_OTHER = 0x10000,
- MPIU_DBG_CH3_MSG = 0x20000,
- MPIU_DBG_CH3 = 0x3f000, /* alias for all Ch3*/
- MPIU_DBG_NEM_SOCK_FUNC = 0x40000,
- MPIU_DBG_NEM_SOCK_DET = 0x80000,
- MPIU_DBG_VC = 0x100000,
- MPIU_DBG_REFCOUNT = 0x200000,
- MPIU_DBG_ROMIO = 0x400000,
- MPIU_DBG_ERRHAND = 0x800000,
- MPIU_DBG_ALL = (~0) }; /* alias for all */
-
-extern int MPIU_DBG_ActiveClasses;
-extern int MPIU_DBG_MaxLevel;
-typedef enum MPIU_dbg_state_t
-{
- MPIU_DBG_STATE_NONE = 0,
- MPIU_DBG_STATE_UNINIT = 1,
- MPIU_DBG_STATE_STDOUT = 2,
- MPIU_DBG_STATE_MEMLOG = 4,
- MPIU_DBG_STATE_FILE = 8
-}
-MPIU_dbg_state_t;
-
-int MPIU_dbg_init(int rank);
-int MPIU_dbg_printf(const char *str, ...) ATTRIBUTE((format(printf,1,2)));
-int MPIU_dbglog_printf(const char *str, ...) ATTRIBUTE((format(printf,1,2)));
-int MPIU_dbglog_vprintf(const char *str, va_list ap);
-void MPIU_dump_dbg_memlog_to_stdout(void);
-void MPIU_dump_dbg_memlog_to_file(const char *filename);
-void MPIU_dump_dbg_memlog(FILE * fp);
-
-extern MPIU_dbg_state_t MPIU_dbg_state;
-extern FILE * MPIU_dbg_fp;
-#define MPIU_dbglog_flush() \
-{ \
- if (MPIU_dbg_state & MPIU_DBG_STATE_STDOUT) \
- { \
- fflush(stdout); \
- } \
-}
-int MPIU_DBG_Outevent(const char *, int, int, int, const char *, ...)
- ATTRIBUTE((format(printf,5,6)));
-int MPIU_DBG_Init( int *, char ***, int, int, int );
-int MPIU_DBG_PreInit( int *, char ***, int );
-
-#endif
diff --git a/src/util/dbg/timelimit.c b/src/util/dbg/timelimit.c
deleted file mode 100644
index ee92155..0000000
--- a/src/util/dbg/timelimit.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-
-#include <sys/time.h>
-/*
- * This file provides a time-limit capability.
- * NOT YET COMPLETE
- */
-
-/*
- Generate a SIGALRM after the specified number of seconds.
- If seconds is zero, turn off the alarm
-*/
-void MPIU_SetTimeout( int seconds )
-{
-#ifdef HAVE_SETITIMER
- struct itimerval timelimit;
- struct timeval tval;
- struct timeval tzero;
-
- if (seconds > 0) {
- tzero.tv_sec = 0;
- tzero.tv_usec = 0;
- tval.tv_sec = seconds;
- tval.tv_usec = 0;
- timelimit.it_interval = tzero; /* Only one alarm */
- timelimit.it_value = tval;
- setitimer( ITIMER_REAL, &timelimit, 0 );
- }
- else {
- tzero.tv_sec = 0;
- tzero.tv_usec = 0;
- timelimit.it_value = tzero; /* Turn off timer */
- setitimer( ITIMER_REAL, &timelimit, 0 );
- }
-
-#elif defined(HAVE_ALARM)
- /* alarm(0) turns off the alarm */
- alarm( seconds );
-#else
-#error "No timer available"
-#endif
-}
-
-
diff --git a/src/util/instrm/.state-cache b/src/util/instrm/.state-cache
deleted file mode 100644
index 8b667ac..0000000
--- a/src/util/instrm/.state-cache
+++ /dev/null
@@ -1,7 +0,0 @@
-<dir>
-<file name="instr.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="instr.c">
-</fileinfo>
-</data>
diff --git a/src/util/instrm/Makefile.mk b/src/util/instrm/Makefile.mk
deleted file mode 100644
index f2ae72c..0000000
--- a/src/util/instrm/Makefile.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-mpi_core_sources += \
- src/util/instrm/instr.c
-
diff --git a/src/util/instrm/instr.c b/src/util/instrm/instr.c
deleted file mode 100644
index 5e007d0..0000000
--- a/src/util/instrm/instr.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-
-MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
-
-#ifdef USE_MPIU_INSTR
-
-static int MPIU_INSTR_Printf( FILE *fp );
-static int MPIU_INSTR_Finalize( void *p );
-
-/* */
-/*
- * Basic but general support for instrumentation hooks in MPICH
- *
- * Most actions are handled by MPIU_INSTR_xxx macros (to permit both lowest
- * overhead and to allow instrumentation to be selected at compile time.
- */
-static struct MPIU_INSTR_Generic_t *instrHead = 0, *instrTail = 0;
-
-int MPIU_INSTR_AddHandle( void *handlePtr )
-{
- struct MPIU_INSTR_Generic_t *gPtr =
- (struct MPIU_INSTR_Generic_t *)handlePtr;
-
- /* Note that Addhandle must be within a thread-safe initialization */
- if (!instrHead) {
- /* Make sure that this call back occurs early (before MPID_Finalize) */
- MPIR_Add_finalize( MPIU_INSTR_Finalize, stdout,
- MPIR_FINALIZE_CALLBACK_PRIO + 2 );
- }
-
- if (instrHead) {
- instrTail->next = gPtr;
- }
- else {
- instrHead = gPtr;
- }
- instrTail = gPtr;
- return 0;
-}
-
-#define MAX_INSTR_BUF 1024
-static int MPIU_INSTR_Printf( FILE *fp )
-{
- struct MPIU_INSTR_Generic_t *gPtr = instrHead;
- char instrBuf[MAX_INSTR_BUF];
-
- while (gPtr) {
- /* We only output information on events that occured */
- if (gPtr->count) {
- if (gPtr->toStr) {
- (*gPtr->toStr)( instrBuf, sizeof(instrBuf), gPtr );
- }
- else {
- if (gPtr->desc) {
- MPIU_Strncpy( instrBuf, gPtr->desc, sizeof(instrBuf) );
- }
- else {
- /* This should not happen */
- MPIU_Strncpy( instrBuf, "", sizeof(instrBuf) );
- }
- }
- fputs( instrBuf, fp );
- fputc( '\n', fp );
- }
- gPtr = gPtr->next;
- }
- fflush( fp );
- return 0;
-}
-
-static int MPIU_INSTR_Finalize( void *p )
-{
- int rc;
- struct MPIU_INSTR_Generic_t *gPtr = instrHead;
- /* FIXME: This should at least issue the writes in process order */
- /* Allow whether output is generated to be controlled */
- if (!MPL_env2bool( "MPICH_INSTR_AT_FINALIZE", &rc ))
- rc = 0;
-
- if (rc) {
- MPIU_INSTR_Printf( stdout );
- }
-
- /* Free any memory allocated for the descriptions */
- while (gPtr) {
- if (gPtr->desc) {
- MPIU_Free( (char *)gPtr->desc );
- gPtr->desc = 0;
- }
- gPtr = gPtr->next;
- }
-
- return 0;
-}
-
-/*
- * Standard print routines for the instrumentation objects
- */
-
-/*
- * Print a duration, which may have extra integer fields. Those fields
- * are printed as integers, in order, separate by tabs
- */
-int MPIU_INSTR_ToStr_Duration_Count( char *buf, size_t maxBuf, void *ptr )
-{
- double ttime;
- struct MPIU_INSTR_Duration_count_t *dPtr =
- (struct MPIU_INSTR_Duration_count_t *)ptr;
- MPID_Wtime_todouble( &dPtr->ttime, &ttime );
- snprintf( buf, maxBuf, "%-40s:\t%d\t%e", dPtr->desc, dPtr->count, ttime );
- if (dPtr->nitems) {
- char *p;
- size_t len = strlen(buf);
- int i;
- /* Add each integer value, separated by a tab. */
- maxBuf -= len;
- p = buf + len;
- for (i=0; i<dPtr->nitems; i++) {
- snprintf( p, maxBuf, "\t%d", dPtr->data[i] );
- len = strlen(p);
- maxBuf -= len;
- p += len;
- }
- }
- return 0;
-}
-
-/* Print the max counter value and the total counter value. */
-int MPIU_INSTR_ToStr_Counter( char * buf, size_t maxBuf, void *ptr )
-{
- struct MPIU_INSTR_Counter_t *dPtr =
- (struct MPIU_INSTR_Counter_t *)ptr;
- snprintf( buf, maxBuf, "%-40s:\t%d\t%d",
- dPtr->desc, dPtr->maxcount, dPtr->totalcount );
- return 0;
-}
-
-#else
-/* No routines required if instrumentation is not selected */
-#endif
diff --git a/src/util/logging/common/Makefile.mk b/src/util/logging/common/Makefile.mk
index 1efddcc..efcb1e4 100644
--- a/src/util/logging/common/Makefile.mk
+++ b/src/util/logging/common/Makefile.mk
@@ -10,7 +10,7 @@
##mpi_core_sources += \
## describe_states.c
-AM_CPPFLAGS += -Isrc/util/logging/common
+AM_CPPFLAGS += -I$(top_srcdir)/src/util/logging/common
# FIXME XXX DJG this file is autogenerated, right? how do we correctly express
# the dependency on the "extractstates" generator code?
diff --git a/src/util/logging/common/state_names.h b/src/util/logging/common/state_names.h
index a9ad6b8..26d7f59 100644
--- a/src/util/logging/common/state_names.h
+++ b/src/util/logging/common/state_names.h
@@ -21,7 +21,6 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_ACQUIRE_LOCAL_LOCK, "acquire_local_lock", (const char *)0 },
{ MPID_STATE_APPEND_OVERFLOW, "append_overflow", (const char *)0 },
{ MPID_STATE_CANCEL_RECV, "cancel_recv", (const char *)0 },
- { MPID_STATE_CHECK_ALLOC, "check_alloc", (const char *)0 },
{ MPID_STATE_CHECK_AND_SET_REQ_COMPLETION, "check_and_set_req_completion", (const char *)0 },
{ MPID_STATE_CHECK_TERMINATING_VCS, "check_terminating_vcs", (const char *)0 },
{ MPID_STATE_CKPT_RESTART, "ckpt_restart", (const char *)0 },
@@ -55,7 +54,6 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_FLUSH_ALL, "flush_all", (const char *)0 },
{ MPID_STATE_FLUSH_LOCAL_ALL, "flush_local_all", (const char *)0 },
{ MPID_STATE_FOUND_BETTER_SC, "found_better_sc", (const char *)0 },
- { MPID_STATE_GETQUEUEDCOMPLETIONSTATUS, "GetQueuedCompletionStatus", (const char *)0 },
{ MPID_STATE_GET_BUSINESS_CARD, "get_business_card", (const char *)0 },
{ MPID_STATE_GET_EVENT_INFO, "get_event_info", (const char *)0 },
{ MPID_STATE_GET_FAILED_GROUP, "MPIDI_CH3U_Get_failed_group", (const char *)0 },
@@ -105,6 +103,8 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPIDI_CH3I_GET, "MPIDI_CH3I_Get", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_GET_ACCUMULATE, "MPIDI_CH3I_Get_accumulate", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_INITIALIZE_TMP_COMM, "MPIDI_CH3I_Initialize_tmp_comm", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_PORT_DESTROY, "MPIDI_CH3I_Port_destroy", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_PORT_INIT, "MPIDI_CH3I_Port_init", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_POSTED_RECV_DEQUEUED, "MPIDI_CH3I_Posted_recv_dequeued", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_POSTED_RECV_ENQUEUED, "MPIDI_CH3I_Posted_recv_enqueued", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_PROGRESS, "MPIDI_CH3I_Progress", (const char *)0 },
@@ -122,9 +122,6 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPIDI_CH3I_PROGRESS_WAKEUP, "MPIDI_CH3I_Progress_wakeup", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_PUT, "MPIDI_CH3I_Put", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_RELEASE_LOCK, "MPIDI_CH3I_Release_lock", (const char *)0 },
- { MPID_STATE_MPIDI_CH3I_SEG_ALLOC, "MPIDI_CH3I_Seg_alloc", (const char *)0 },
- { MPID_STATE_MPIDI_CH3I_SEG_COMMIT, "MPIDI_CH3I_Seg_commit", (const char *)0 },
- { MPID_STATE_MPIDI_CH3I_SEG_DESTROY, "MPIDI_CH3I_Seg_destroy", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_SENDNONCONTIG, "MPIDI_CH3I_SendNoncontig", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_SEND_ACK_PKT, "MPIDI_CH3I_Send_ack_pkt", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_SEND_LOCK_ACK_PKT, "MPIDI_CH3I_Send_lock_ack_pkt", (const char *)0 },
@@ -137,7 +134,41 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPIDI_CH3I_SHM_PUT_OP, "MPIDI_CH3I_Shm_put_op", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_SHM_SEND_PROGRESS, "MPIDI_CH3I_Shm_send_progress", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_SHM_WINS_MATCH, "MPIDI_CH3I_SHM_Wins_match", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_DEQUEUE, "MPIDI_CH3I_Socki_event_dequeue", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_EVENT_ENQUEUE, "MPIDI_CH3I_Socki_event_enqueue", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_CONNECT, "MPIDI_CH3I_Socki_handle_connect", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLERR, "MPIDI_CH3I_Socki_handle_pollerr", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_POLLHUP, "MPIDI_CH3I_Socki_handle_pollhup", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_READ, "MPIDI_CH3I_Socki_handle_read", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_HANDLE_WRITE, "MPIDI_CH3I_Socki_handle_write", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_ALLOC, "MPIDI_CH3I_Socki_sock_alloc", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCKI_SOCK_FREE, "MPIDI_CH3I_Socki_sock_free", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT, "MPIDI_CH3I_Sock_accept", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_CLOSE_OPEN_SOCKETS, "MPIDI_CH3I_Sock_close_open_sockets", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_SOCK_CONNECT, "MPIDI_CH3I_Sock_connect", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_CREATE_SET, "MPIDI_CH3I_Sock_create_set", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_DESTROY_SET, "MPIDI_CH3I_Sock_destroy_set", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_FINALIZE, "MPIDI_CH3I_Sock_finalize", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_GET_CONNINFO_FROM_BC, "MPIDI_CH3I_Sock_get_conninfo_from_bc", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_GET_ERROR_CLASS_STRING, "MPIDI_CH3I_Sock_get_error_class_string", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_GET_HOST_DESCRIPTION, "MPIDI_CH3I_Sock_get_host_description", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_ID, "MPIDI_CH3I_Sock_get_sock_id", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_GET_SOCK_SET_ID, "MPIDI_CH3I_Sock_get_sock_set_id", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_INIT, "MPIDI_CH3I_Sock_init", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_LISTEN, "MPID_STATE_MPIDI_CH3I_SOCK_ACCEPT", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_POST_CLOSE, "MPIDI_CH3I_Sock_post_close", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_POST_CONNECT_IFADDR, "MPIDI_CH3I_Sock_post_connect_ifaddr", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_POST_READ, "MPIDI_CH3I_Sock_post_read", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_POST_READV, "MPIDI_CH3I_Sock_post_readv", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITE, "MPIDI_CH3I_Sock_post_write", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_POST_WRITEV, "MPIDI_CH3I_Sock_post_writev", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_READ, "MPIDI_CH3I_Sock_read", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_READV, "MPIDI_CH3I_Sock_readv", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_SET_USER_PTR, "MPIDI_CH3I_Sock_set_user_ptr", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_WAIT, "MPIDI_CH3I_Sock_wait", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_WAKEUP, "MPIDI_CH3I_Sock_wakeup", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_WRITE, "MPIDI_CH3I_Sock_write", (const char *)0 },
+ { MPID_STATE_MPIDI_CH3I_SOCK_WRITEV, "MPIDI_CH3I_Sock_writev", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_TRY_ACQUIRE_WIN_LOCK, "MPIDI_CH3I_Try_acquire_win_lock", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_VC_POST_SOCKCONNECT, "MPIDI_CH3I_VC_post_sockconnect", (const char *)0 },
{ MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM, "MPIDI_CH3I_Win_allocate_shm", (const char *)0 },
@@ -266,6 +297,7 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPIDI_PG_FIND, "MPIDI_PG_Find", (const char *)0 },
{ MPID_STATE_MPIDI_PG_SetConnInfo, "MPIDI_PG_SetConnInfo", (const char *)0 },
{ MPID_STATE_MPIDI_PG_TO_STRING, "MPIDI_PG_To_string", (const char *)0 },
+ { MPID_STATE_MPIDI_PORT_FINALIZE, "MPIDI_Port_finalize", (const char *)0 },
{ MPID_STATE_MPIDI_RMA_FINALIZE, "MPIDI_RMA_finalize", (const char *)0 },
{ MPID_STATE_MPIDI_RMA_INIT, "MPIDI_RMA_init", (const char *)0 },
{ MPID_STATE_MPIDI_SOCK_UPDATE_SOCK_SET, "MPIDI_Sock_update_sock_set", (const char *)0 },
@@ -277,41 +309,12 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPIDU_FTB_FINALIZE, "MPIDU_Ftb_finalize", (const char *)0 },
{ MPID_STATE_MPIDU_FTB_INIT, "MPIDU_Ftb_init", (const char *)0 },
{ MPID_STATE_MPIDU_FTB_PUBLISH, "MPIDU_Ftb_publish", (const char *)0 },
- { MPID_STATE_MPIDU_SOCKI_HANDLE_CONNECT, "MPIDU_Socki_handle_connect", (const char *)0 },
- { MPID_STATE_MPIDU_SOCKI_HANDLE_POLLERR, "MPIDU_Socki_handle_pollerr", (const char *)0 },
- { MPID_STATE_MPIDU_SOCKI_HANDLE_POLLHUP, "MPIDU_Socki_handle_pollhup", (const char *)0 },
- { MPID_STATE_MPIDU_SOCKI_HANDLE_READ, "MPIDU_Socki_handle_read", (const char *)0 },
- { MPID_STATE_MPIDU_SOCKI_HANDLE_WRITE, "MPIDU_Socki_handle_write", (const char *)0 },
- { MPID_STATE_MPIDU_SOCKI_SOCK_ALLOC, "MPIDU_Socki_sock_alloc", (const char *)0 },
- { MPID_STATE_MPIDU_SOCKI_SOCK_FREE, "MPIDU_Socki_sock_free", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_ACCEPT, "MPIDU_Sock_accept", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_CLOSE_OPEN_SOCKETS, "MPIDU_Sock_close_open_sockets", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_CREATE_SET, "MPIDU_Sock_create_set", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_DESTROY_SET, "MPIDU_Sock_destroy_set", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_FINALIZE, "MPIDU_Sock_finalize", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_GET_CONNINFO_FROM_BC, "MPIDU_Sock_get_conninfo_from_bc", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_GET_ERROR_CLASS_STRING, "MPIDU_Sock_get_error_class_string", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_GET_HOST_DESCRIPTION, "MPIDU_Sock_get_host_description", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_GET_SOCK_ID, "MPIDU_Sock_get_sock_id", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_GET_SOCK_SET_ID, "MPIDU_Sock_get_sock_set_id", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_HOSTNAME_TO_HOST_DESCRIPTION, "MPIDU_Sock_hostname_to_host_description", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_INIT, "MPIDU_Sock_init", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_LISTEN, "MPID_STATE_MPIDU_SOCK_ACCEPT", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_NATIVE_TO_SOCK, "MPIDU_Sock_native_to_sock", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_POST_CLOSE, "MPIDU_Sock_post_close", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_POST_CONNECT, "MPIDU_Sock_post_connect", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_POST_CONNECT_IFADDR, "MPIDU_Sock_post_connect_ifaddr", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_POST_READ, "MPIDU_Sock_post_read", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_POST_READV, "MPIDU_Sock_post_readv", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_POST_WRITE, "MPIDU_Sock_post_write", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_POST_WRITEV, "MPIDU_Sock_post_writev", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_READ, "MPIDU_Sock_read", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_READV, "MPIDU_Sock_readv", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_SET_USER_PTR, "MPIDU_Sock_set_user_ptr", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_WAIT, "MPIDU_Sock_wait", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_WAKEUP, "MPIDU_Sock_wakeup", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_WRITE, "MPIDU_Sock_write", (const char *)0 },
- { MPID_STATE_MPIDU_SOCK_WRITEV, "MPIDU_Sock_writev", (const char *)0 },
+ { MPID_STATE_MPIDU_SHM_BARRIER, "MPIDU_shm_barrier", (const char *)0 },
+ { MPID_STATE_MPIDU_SHM_BARRIER_INIT, "MPIDU_shm_barrier_init", (const char *)0 },
+ { MPID_STATE_MPIDU_SHM_CHECK_ALLOC, "check_alloc", (const char *)0 },
+ { MPID_STATE_MPIDU_SHM_SEG_ALLOC, "MPIDU_shm_seg_alloc", (const char *)0 },
+ { MPID_STATE_MPIDU_SHM_SEG_COMMIT, "MPIDU_shm_seg_commit", (const char *)0 },
+ { MPID_STATE_MPIDU_SHM_SEG_DESTROY, "MPIDU_shm_seg_destroy", (const char *)0 },
{ MPID_STATE_MPID_ABORT, "MPID_Abort", (const char *)0 },
{ MPID_STATE_MPID_ACCUMULATE, "MPID_Accumulate", (const char *)0 },
{ MPID_STATE_MPID_AINT_ADD, "MPID_Aint_add", (const char *)0 },
@@ -337,7 +340,7 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPID_FREE_MEM, "MPID_Free_mem", (const char *)0 },
{ MPID_STATE_MPID_GET, "MPID_Get", (const char *)0 },
{ MPID_STATE_MPID_GET_ACCUMULATE, "MPID_Get_accumulate", (const char *)0 },
- { MPID_STATE_MPID_GPID_GETALLINCOMM, "MPID_GPID_GetAllInComm", (const char *)0 },
+ { MPID_STATE_MPID_GPID_GETALLINCOMM, "MPIDI_GPID_GetAllInComm", (const char *)0 },
{ MPID_STATE_MPID_INIT, "MPID_Init", (const char *)0 },
{ MPID_STATE_MPID_IPROBE, "MPID_Iprobe", (const char *)0 },
{ MPID_STATE_MPID_IRECV, "MPID_Irecv", (const char *)0 },
@@ -346,8 +349,6 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPID_ISSEND, "MPID_Issend", (const char *)0 },
{ MPID_STATE_MPID_NEM_ALLOCATE_SHM_REGION, "MPID_nem_allocate_shm_region", (const char *)0 },
{ MPID_STATE_MPID_NEM_ATTACH_SHM_REGION, "MPID_nem_attach_shm_region", (const char *)0 },
- { MPID_STATE_MPID_NEM_BARRIER, "MPID_nem_barrier", (const char *)0 },
- { MPID_STATE_MPID_NEM_BARRIER_INIT, "MPID_nem_barrier_init", (const char *)0 },
{ MPID_STATE_MPID_NEM_BARRIER_VARS_INIT, "MPID_nem_barrier_vars_init", (const char *)0 },
{ MPID_STATE_MPID_NEM_CELL_INIT, "MPID_nem_cell_init", (const char *)0 },
{ MPID_STATE_MPID_NEM_CHOOSE_NETMOD, "MPID_nem_choose_netmod", (const char *)0 },
@@ -497,29 +498,28 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPID_NEM_TCP_VC_TERMINATE, "MPID_nem_tcp_vc_terminate", (const char *)0 },
{ MPID_STATE_MPID_NEM_VC_DESTROY, "MPID_nem_vc_destroy", (const char *)0 },
{ MPID_STATE_MPID_NEM_VC_INIT, "MPID_nem_vc_init", (const char *)0 },
- { MPID_STATE_MPID_OPEN_PORT, "MPID_Open_port", (const char *)0 },
{ MPID_STATE_MPID_PROBE, "MPID_Probe", (const char *)0 },
{ MPID_STATE_MPID_PUT, "MPID_Put", (const char *)0 },
{ MPID_STATE_MPID_RACCUMULATE, "MPID_Raccumulate", (const char *)0 },
{ MPID_STATE_MPID_RECV, "MPID_Recv", (const char *)0 },
{ MPID_STATE_MPID_RECV_INIT, "MPID_Recv_init", (const char *)0 },
- { MPID_STATE_MPID_REQUEST_CREATE, "MPID_Request_create", (const char *)0 },
+ { MPID_STATE_MPID_REQUEST_INIT, "MPID_Request_create_hook", (const char *)0 },
{ MPID_STATE_MPID_RGET, "MPID_Rget", (const char *)0 },
{ MPID_STATE_MPID_RGET_ACCUMULATE, "MPID_Rget_accumulate", (const char *)0 },
{ MPID_STATE_MPID_RPUT, "MPID_Rput", (const char *)0 },
{ MPID_STATE_MPID_RSEND, "MPID_Rsend", (const char *)0 },
{ MPID_STATE_MPID_RSEND_INIT, "MPID_Rsend_init", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN, "MPID_Segment_contig_flatten", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF, "MPID_Segment_contig_pack_external32_to_buf", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV, "MPID_Segment_contig_pack_to_iov", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF, "MPID_Segment_contig_unpack_external32_to_buf", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_FLATTEN, "MPID_Segment_flatten", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL, "MPID_Segment_pack_external32", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_PACK_VECTOR, "MPID_Segment_pack_vector", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32, "MPID_Segment_unpack_external32", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR, "MPID_Segment_unpack_vector", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN, "MPID_Segment_vector_flatten", (const char *)0 },
- { MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV, "MPID_Segment_vector_pack_to_iov", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_CONTIG_FLATTEN, "MPIDU_Segment_contig_flatten", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_CONTIG_PACK_EXTERNAL32_TO_BUF, "MPIDU_Segment_contig_pack_external32_to_buf", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_CONTIG_PACK_TO_IOV, "MPIDU_Segment_contig_pack_to_iov", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_CONTIG_UNPACK_EXTERNAL32_TO_BUF, "MPIDU_Segment_contig_unpack_external32_to_buf", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_FLATTEN, "MPIDU_Segment_flatten", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_PACK_EXTERNAL, "MPIDU_Segment_pack_external32", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_PACK_VECTOR, "MPIDU_Segment_pack_vector", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_UNPACK_EXTERNAL32, "MPIDU_Segment_unpack_external32", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_UNPACK_VECTOR, "MPIDU_Segment_unpack_vector", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_VECTOR_FLATTEN, "MPIDU_Segment_vector_flatten", (const char *)0 },
+ { MPID_STATE_MPID_SEGMENT_VECTOR_PACK_TO_IOV, "MPIDU_Segment_vector_pack_to_iov", (const char *)0 },
{ MPID_STATE_MPID_SEND, "MPID_Send", (const char *)0 },
{ MPID_STATE_MPID_SEND_INIT, "MPID_Send_init", (const char *)0 },
{ MPID_STATE_MPID_SSEND, "MPID_Ssend", (const char *)0 },
@@ -554,25 +554,27 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPIR_BCAST, "MPIR_Bcast_intra", (const char *)0 },
{ MPID_STATE_MPIR_BCAST_INTER, "MPIR_Bcast_inter", (const char *)0 },
{ MPID_STATE_MPIR_COMM_AGREE, "MPIR_Comm_agree", (const char *)0 },
- { MPID_STATE_MPIR_COMM_APPLY_HINTS, "MPIR_Comm_apply_hints", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_APPLY_HINTS, "MPII_Comm_apply_hints", (const char *)0 },
{ MPID_STATE_MPIR_COMM_COMMIT, "MPIR_Comm_commit", (const char *)0 },
- { MPID_STATE_MPIR_COMM_COPY, "MPIR_Comm_copy", (const char *)0 },
- { MPID_STATE_MPIR_COMM_COPY_DATA, "MPIR_Comm_copy_data", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_COPY, "MPII_Comm_copy", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_COPY_DATA, "MPII_Comm_copy_data", (const char *)0 },
{ MPID_STATE_MPIR_COMM_CREATE, "MPIR_Comm_create", (const char *)0 },
- { MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING, "MPIR_Comm_create_calculate_mapping", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_CREATE_CALCULATE_MAPPING, "MPII_Comm_create_calculate_mapping", (const char *)0 },
{ MPID_STATE_MPIR_COMM_CREATE_GROUP, "MPIR_Comm_create_group", (const char *)0 },
{ MPID_STATE_MPIR_COMM_CREATE_INTER, "MPIR_Comm_create_inter", (const char *)0 },
{ MPID_STATE_MPIR_COMM_CREATE_INTRA, "MPIR_Comm_create_intra", (const char *)0 },
{ MPID_STATE_MPIR_COMM_FREE_HINT_HANDLES, "free_hint_handles", (const char *)0 },
- { MPID_STATE_MPIR_COMM_GET_ATTR, "MPIR_CommGetAttr", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_GET_ATTR, "MPII_Comm_get_attr", (const char *)0 },
{ MPID_STATE_MPIR_COMM_GROUP_IMPL, "MPIR_Comm_group_impl", (const char *)0 },
- { MPID_STATE_MPIR_COMM_MAP_DUP, "MPIR_Comm_map_dup", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_KIND__INTERCOMM_CREATE_IMPL, "MPIR_Intercomm_create_impl", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_KIND__INTERCOMM_MERGE_IMPL, "MPIR_Intercomm_merge_impl", (const char *)0 },
{ MPID_STATE_MPIR_COMM_MAP_FREE, "MPIR_Comm_map_free", (const char *)0 },
- { MPID_STATE_MPIR_COMM_MAP_IRREGULAR, "MPIR_Comm_map_irregular", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_MAP_TYPE__DUP, "MPIR_Comm_map_dup", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_MAP_TYPE__IRREGULAR, "MPIR_Comm_map_irregular", (const char *)0 },
{ MPID_STATE_MPIR_COMM_REGISTER_HINT, "MPIR_Comm_register_hint", (const char *)0 },
{ MPID_STATE_MPIR_COMM_RELEASE_ALWAYS, "MPIR_Comm_release_always", (const char *)0 },
{ MPID_STATE_MPIR_COMM_REMOTE_GROUP_IMPL, "MPIR_Comm_remote_group_impl", (const char *)0 },
- { MPID_STATE_MPIR_COMM_SET_ATTR, "MPIR_CommSetAttr", (const char *)0 },
+ { MPID_STATE_MPIR_COMM_SET_ATTR, "MPII_Comm_set_attr", (const char *)0 },
{ MPID_STATE_MPIR_COMM_SET_INFO_IMPL, "MPIR_Comm_set_info_impl", (const char *)0 },
{ MPID_STATE_MPIR_COMM_SHRINK, "MPIR_Comm_shrink", (const char *)0 },
{ MPID_STATE_MPIR_FINALIZE_ASYNC_THREAD, "MPIR_Finalize_async_thread", (const char *)0 },
@@ -590,15 +592,14 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_MPIR_GROUP_UNION_IMPL, "MPIR_Group_union_impl", (const char *)0 },
{ MPID_STATE_MPIR_INFO_SET_IMPL, "MPIR_Info_set_impl", (const char *)0 },
{ MPID_STATE_MPIR_INIT_ASYNC_THREAD, "MPIR_Init_async_thread", (const char *)0 },
- { MPID_STATE_MPIR_INTERCOMM_CREATE_IMPL, "MPIR_Intercomm_create_impl", (const char *)0 },
- { MPID_STATE_MPIR_INTERCOMM_MERGE_IMPL, "MPIR_Intercomm_merge_impl", (const char *)0 },
{ MPID_STATE_MPIR_LOCALCOPY, "MPIR_Localcopy", (const char *)0 },
- { MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM, "MPIR_Setup_intercomm_localcomm", (const char *)0 },
+ { MPID_STATE_MPIR_OPEN_PORT, "MPID_Open_port", (const char *)0 },
+ { MPID_STATE_MPIR_SETUP_INTERCOMM_LOCALCOMM, "MPII_Setup_intercomm_localcomm", (const char *)0 },
{ MPID_STATE_MPIR_TOPO_CANON_NHB, "MPIR_Topo_canon_nhb", (const char *)0 },
- { MPID_STATE_MPIR_TYPE_GET_ATTR, "MPIR_TypeGetAttr", (const char *)0 },
- { MPID_STATE_MPIR_TYPE_SET_ATTR, "MPIR_TypeSetAttr", (const char *)0 },
- { MPID_STATE_MPIR_WIN_GET_ATTR, "MPIR_WinGetAttr", (const char *)0 },
- { MPID_STATE_MPIR_WIN_SET_ATTR, "MPIR_WinSetAttr", (const char *)0 },
+ { MPID_STATE_MPIR_TYPE_GET_ATTR, "MPII_Type_get_attr", (const char *)0 },
+ { MPID_STATE_MPIR_TYPE_SET_ATTR, "MPII_Type_set_attr", (const char *)0 },
+ { MPID_STATE_MPIR_WIN_GET_ATTR, "MPII_Win_get_attr", (const char *)0 },
+ { MPID_STATE_MPIR_WIN_SET_ATTR, "MPII_Win_set_attr", (const char *)0 },
{ MPID_STATE_MPIX_COMM_AGREE, "MPIX_Comm_agree", (const char *)0 },
{ MPID_STATE_MPIX_COMM_FAILURE_ACK, "MPIX_Comm_failure_ack", (const char *)0 },
{ MPID_STATE_MPIX_COMM_FAILURE_GET_ACKED, "MPIX_Comm_failure_get_acked", (const char *)0 },
@@ -928,7 +929,6 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_NONEMPTY_INTERSECTION, "nonempty_intersection", (const char *)0 },
{ MPID_STATE_ON_DATA_AVAIL, "on_data_avail", (const char *)0 },
{ MPID_STATE_OPEN_IO_SOCKET, "open_io_socket", (const char *)0 },
- { MPID_STATE_PARSE_MAPPING, "parse_mapping", (const char *)0 },
{ MPID_STATE_PKT_CKPT_MARKER_HANDLER, "pkt_ckpt_marker_handler", (const char *)0 },
{ MPID_STATE_PKT_COOKIE_HANDLER, "pkt_COOKIE_handler", (const char *)0 },
{ MPID_STATE_PKT_CTS_HANDLER, "pkt_CTS_handler", (const char *)0 },
@@ -964,10 +964,8 @@ static MPIU_State_defs mpich_states[] = {
{ MPID_STATE_SEND_UNLOCK_MSG, "send_unlock_msg", (const char *)0 },
{ MPID_STATE_SET_UP_LISTENER, "set_up_listener", (const char *)0 },
{ MPID_STATE_SHM_CONNECTION_TERMINATED, "shm_connection_terminated", (const char *)0 },
- { MPID_STATE_SOCKI_EVENT_DEQUEUE, "MPIDU_Socki_event_dequeue", (const char *)0 },
- { MPID_STATE_SOCKI_EVENT_ENQUEUE, "MPIDU_Socki_event_enqueue", (const char *)0 },
- { MPID_STATE_SOCKI_FREE_EVENTQ_MEM, "MPIDU_Socki_free_eventq_mem", (const char *)0 },
- { MPID_STATE_SOCK_NATIVE_TO_SOCK, "MPIDU_Sock_native_to_sock", (const char *)0 },
+ { MPID_STATE_SOCKI_FREE_EVENTQ_MEM, "MPIDI_CH3I_Socki_free_eventq_mem", (const char *)0 },
+ { MPID_STATE_SOCK_NATIVE_TO_SOCK, "MPIDI_CH3I_Sock_native_to_sock", (const char *)0 },
{ MPID_STATE_START_REQ_COMPLETE, "start_req_complete", (const char *)0 },
{ MPID_STATE_STASH_EVENT, "stash_event", (const char *)0 },
{ MPID_STATE_STATE_COMMRDY_HANDLER, "state_commrdy_handler", (const char *)0 },
diff --git a/src/util/logging/rlog/.state-cache b/src/util/logging/rlog/.state-cache
index 3b59a64..33effd3 100644
--- a/src/util/logging/rlog/.state-cache
+++ b/src/util/logging/rlog/.state-cache
@@ -1,31 +1,31 @@
<dir>
-<file name="wintrace_impl.h" info="1447123141"/>
-<file name="printirlog.c" info="1447123141"/>
-<file name="irlog2rlog.c" info="1447123141"/>
-<file name="rlogtime.c" info="1447123141"/>
-<file name="minalignrlog.c" info="1447123141"/>
-<file name="rlogutil.c" info="1447123141"/>
-<file name="rlog.c" info="1447123141"/>
-<file name="printrlog.c" info="1447123141"/>
-<file name="irlogutil.c" info="1447123141"/>
+<file name="wintrace_impl.h" info="1478973152"/>
+<file name="minalignrlog.c" info="1478973152"/>
+<file name="rlog.c" info="1478973152"/>
+<file name="rlogtime.c" info="1478973152"/>
+<file name="irlogutil.c" info="1478973152"/>
+<file name="printirlog.c" info="1478973152"/>
+<file name="printrlog.c" info="1478973152"/>
+<file name="rlogutil.c" info="1478973152"/>
+<file name="irlog2rlog.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="wintrace_impl.h">
</fileinfo>
-<fileinfo name="printirlog.c">
+<fileinfo name="minalignrlog.c">
</fileinfo>
-<fileinfo name="irlog2rlog.c">
+<fileinfo name="rlog.c">
</fileinfo>
<fileinfo name="rlogtime.c">
</fileinfo>
-<fileinfo name="minalignrlog.c">
-</fileinfo>
-<fileinfo name="rlogutil.c">
+<fileinfo name="irlogutil.c">
</fileinfo>
-<fileinfo name="rlog.c">
+<fileinfo name="printirlog.c">
</fileinfo>
<fileinfo name="printrlog.c">
</fileinfo>
-<fileinfo name="irlogutil.c">
+<fileinfo name="rlogutil.c">
+</fileinfo>
+<fileinfo name="irlog2rlog.c">
</fileinfo>
</data>
diff --git a/src/util/logging/rlog/TraceInput/.state-cache b/src/util/logging/rlog/TraceInput/.state-cache
index cddd301..46e7364 100644
--- a/src/util/logging/rlog/TraceInput/.state-cache
+++ b/src/util/logging/rlog/TraceInput/.state-cache
@@ -1,13 +1,13 @@
<dir>
-<file name="trace_input.c" info="1447123141"/>
-<file name="logformat_trace_InputLog.c" info="1447123141"/>
-<file name="logformat_trace_InputLog.h" info="1447123141"/>
+<file name="trace_input.c" info="1478973152"/>
+<file name="logformat_trace_InputLog.h" info="1478973152"/>
+<file name="logformat_trace_InputLog.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="trace_input.c">
</fileinfo>
-<fileinfo name="logformat_trace_InputLog.c">
-</fileinfo>
<fileinfo name="logformat_trace_InputLog.h">
</fileinfo>
+<fileinfo name="logformat_trace_InputLog.c">
+</fileinfo>
</data>
diff --git a/src/util/logging/rlog/TraceInput/logformat_trace_InputLog.c b/src/util/logging/rlog/TraceInput/logformat_trace_InputLog.c
index 573da71..a064045 100644
--- a/src/util/logging/rlog/TraceInput/logformat_trace_InputLog.c
+++ b/src/util/logging/rlog/TraceInput/logformat_trace_InputLog.c
@@ -13,7 +13,7 @@
#include "logformat_trace_InputLog.h"
#include "trace_API.h"
#include <stdlib.h>
-#include "mpimem.h"
+#include "mpir_mem.h"
/* style: allow:fprintf:20 sig:0 */
@@ -222,7 +222,7 @@ Java_logformat_trace_InputLog_getNextCategory( JNIEnv *env, jobject this )
if ( legend_sz ) {
legend_max = legend_sz+1;
if (legend_max > ACHAR_LENGTH)
- legend_base = (char *) MPIU_Malloc( legend_max * sizeof( char ) );
+ legend_base = (char *) MPL_malloc( legend_max * sizeof( char ) );
else
legend_base = slegend_base;
}
@@ -233,7 +233,7 @@ Java_logformat_trace_InputLog_getNextCategory( JNIEnv *env, jobject this )
if ( label_sz > 0 ) {
label_max = label_sz+1;
if (label_max > ACHAR_LENGTH)
- label_base = (char *) MPIU_Malloc( label_max * sizeof( char ) );
+ label_base = (char *) MPL_malloc( label_max * sizeof( char ) );
else
label_base = slabel_base;
}
@@ -244,7 +244,7 @@ Java_logformat_trace_InputLog_getNextCategory( JNIEnv *env, jobject this )
if ( methods_sz > 0 ) {
methods_max = methods_sz;
if (methods_max > AINT_LENGTH)
- methods_base = (int *) MPIU_Malloc( methods_max * sizeof( int ) );
+ methods_base = (int *) MPL_malloc( methods_max * sizeof( int ) );
else
methods_base = smethods_base;
}
@@ -262,11 +262,11 @@ Java_logformat_trace_InputLog_getNextCategory( JNIEnv *env, jobject this )
fprintf( errfile, "%s\n", TRACE_Get_err_string( ierr ) );
fflush( errfile );
if ( legend_base != NULL && legend_base != slegend_base )
- MPIU_Free( legend_base );
+ MPL_free( legend_base );
if ( label_base != NULL && label_base != slabel_base )
- MPIU_Free( label_base );
+ MPL_free( label_base );
if ( methods_base != NULL && methods_base != smethods_base )
- MPIU_Free( methods_base );
+ MPL_free( methods_base );
return NULL;
}
@@ -315,17 +315,17 @@ Java_logformat_trace_InputLog_getNextCategory( JNIEnv *env, jobject this )
if ( jlegend != NULL )
(*env)->DeleteLocalRef( env, jlegend );
if ( legend_base != NULL && legend_base != slegend_base )
- MPIU_Free( legend_base );
+ MPL_free( legend_base );
if ( jlabel != NULL )
(*env)->DeleteLocalRef( env, jlabel );
if ( label_base != NULL && label_base != slabel_base )
- MPIU_Free( label_base );
+ MPL_free( label_base );
if ( jmethods != NULL )
(*env)->DeleteLocalRef( env, jmethods );
if ( methods_base != NULL && methods_base != smethods_base )
- MPIU_Free( methods_base );
+ MPL_free( methods_base );
return objdef;
}
@@ -378,20 +378,20 @@ Java_logformat_trace_InputLog_getNextYCoordMap( JNIEnv *env, jobject this )
}
/* Prepare various arrays for C data */
- title_name = (char *) MPIU_Malloc( max_title_name * sizeof(char) );
- column_names = (char **) MPIU_Malloc( (ncolumns-1) * sizeof(char *) );
+ title_name = (char *) MPL_malloc( max_title_name * sizeof(char) );
+ column_names = (char **) MPL_malloc( (ncolumns-1) * sizeof(char *) );
for ( icol = 0; icol < ncolumns-1; icol++ )
- column_names[ icol ] = (char *) MPIU_Malloc( max_column_name
+ column_names[ icol ] = (char *) MPL_malloc( max_column_name
* sizeof(char) );
coordmap_max = nrows * ncolumns;
- coordmap_base = (int *) MPIU_Malloc( coordmap_max * sizeof( int ) );
+ coordmap_base = (int *) MPL_malloc( coordmap_max * sizeof( int ) );
coordmap_sz = 0;
coordmap_pos = 0;
methods_pos = 0;
if ( methods_sz > 0 ) {
methods_max = methods_sz;
- methods_base = (int *) MPIU_Malloc( methods_max * sizeof( int ) );
+ methods_base = (int *) MPL_malloc( methods_max * sizeof( int ) );
}
else
methods_base = NULL;
@@ -405,17 +405,17 @@ Java_logformat_trace_InputLog_getNextYCoordMap( JNIEnv *env, jobject this )
fprintf( errfile, "Error: %s\n", TRACE_Get_err_string( ierr ) );
fflush( errfile );
if ( coordmap_base != NULL )
- MPIU_Free( coordmap_base );
+ MPL_free( coordmap_base );
if ( title_name != NULL )
- MPIU_Free( title_name );
+ MPL_free( title_name );
if ( column_names != NULL ) {
for ( icol = 0; icol < ncolumns-1; icol++ )
if ( column_names[ icol ] != NULL )
- MPIU_Free( column_names[ icol ] );
- MPIU_Free( column_names );
+ MPL_free( column_names[ icol ] );
+ MPL_free( column_names );
}
if ( methods_base != NULL )
- MPIU_Free( methods_base );
+ MPL_free( methods_base );
return NULL;
}
@@ -475,21 +475,21 @@ Java_logformat_trace_InputLog_getNextYCoordMap( JNIEnv *env, jobject this )
if ( coordmap_pos > 0 )
(*env)->DeleteLocalRef( env, j_coordmap_elems );
if ( coordmap_base != NULL )
- MPIU_Free( coordmap_base );
+ MPL_free( coordmap_base );
if ( title_name != NULL )
- MPIU_Free( title_name );
+ MPL_free( title_name );
if ( column_names != NULL ) {
for ( icol = 0; icol < ncolumns-1; icol++ )
if ( column_names[ icol ] != NULL )
- MPIU_Free( column_names[ icol ] );
- MPIU_Free( column_names );
+ MPL_free( column_names[ icol ] );
+ MPL_free( column_names );
}
if ( jmethods != NULL )
(*env)->DeleteLocalRef( env, jmethods );
if ( methods_base != NULL )
- MPIU_Free( methods_base );
+ MPL_free( methods_base );
return ycoordmap;
}
@@ -539,19 +539,19 @@ Java_logformat_trace_InputLog_getNextPrimitive( JNIEnv *env, jobject this )
tcoord_pos = 0;
tcoord_max = tcoord_sz;
if (tcoord_max > ADOUBLE_LENGTH)
- tcoord_base = (double *) MPIU_Malloc( tcoord_max * sizeof( double ) );
+ tcoord_base = (double *) MPL_malloc( tcoord_max * sizeof( double ) );
else
tcoord_base = stcoord_base;
ycoord_pos = 0;
ycoord_max = ycoord_sz;
if (ycoord_max > AINT_LENGTH)
- ycoord_base = (int *) MPIU_Malloc( ycoord_max * sizeof( int ) );
+ ycoord_base = (int *) MPL_malloc( ycoord_max * sizeof( int ) );
else
ycoord_base = sycoord_base;
info_pos = 0;
info_max = info_sz;
if (info_max > AINT_LENGTH)
- info_base = (char *) MPIU_Malloc( info_max * sizeof( char ) );
+ info_base = (char *) MPL_malloc( info_max * sizeof( char ) );
else
info_base = sinfo_base;
ierr = TRACE_Get_next_primitive( tracefile, &type_idx,
@@ -565,11 +565,11 @@ Java_logformat_trace_InputLog_getNextPrimitive( JNIEnv *env, jobject this )
fprintf( errfile, "%s\n", TRACE_Get_err_string( ierr ) );
fflush( errfile );
if ( tcoord_base != NULL && tcoord_base != stcoord_base )
- MPIU_Free( tcoord_base );
+ MPL_free( tcoord_base );
if ( ycoord_base != NULL && ycoord_base != sycoord_base )
- MPIU_Free( ycoord_base );
+ MPL_free( ycoord_base );
if ( info_base != NULL && info_base != sinfo_base )
- MPIU_Free( info_base );
+ MPL_free( info_base );
return NULL;
}
@@ -617,17 +617,17 @@ Java_logformat_trace_InputLog_getNextPrimitive( JNIEnv *env, jobject this )
if ( tcoord_pos > 0 )
(*env)->DeleteLocalRef( env, j_tcoords );
if ( tcoord_base != NULL && tcoord_base != stcoord_base )
- MPIU_Free( tcoord_base );
+ MPL_free( tcoord_base );
if ( ycoord_pos > 0 )
(*env)->DeleteLocalRef( env, j_ycoords );
if ( ycoord_base != NULL && ycoord_base != sycoord_base )
- MPIU_Free( ycoord_base );
+ MPL_free( ycoord_base );
if ( info_pos > 0 )
(*env)->DeleteLocalRef( env, j_infos );
if ( info_base != NULL && info_base != sinfo_base )
- MPIU_Free( info_base );
+ MPL_free( info_base );
return prime;
}
@@ -676,7 +676,7 @@ Java_logformat_trace_InputLog_getNextComposite( JNIEnv *env, jobject this )
if ( cm_info_sz > 0 ) {
cm_info_pos = 0;
cm_info_max = cm_info_sz;
- cm_info_base = (char *) MPIU_Malloc( cm_info_max * sizeof( char ) );
+ cm_info_base = (char *) MPL_malloc( cm_info_max * sizeof( char ) );
ierr = TRACE_Get_next_composite( tracefile, &cmplx_type_idx,
&cm_info_sz, cm_info_base,
&cm_info_pos, cm_info_max );
@@ -736,7 +736,7 @@ Java_logformat_trace_InputLog_getNextComposite( JNIEnv *env, jobject this )
if ( cm_info_sz > 0 && cm_info_pos > 0 )
(*env)->DeleteLocalRef( env, j_cm_infos );
if ( cm_info_base != NULL )
- MPIU_Free( cm_info_base );
+ MPL_free( cm_info_base );
return cmplx;
}
diff --git a/src/util/logging/rlog/TraceInput/trace_input.c b/src/util/logging/rlog/TraceInput/trace_input.c
index b844e84..a508887 100644
--- a/src/util/logging/rlog/TraceInput/trace_input.c
+++ b/src/util/logging/rlog/TraceInput/trace_input.c
@@ -16,7 +16,7 @@
#include <string.h>
#endif
#include "trace_API.h"
-#include "mpimem.h"
+#include "mpir_mem.h"
#define TRACEINPUT_SUCCESS 0
#define TRACEINPUT_FAIL -1
@@ -81,14 +81,14 @@ TRACE_EXPORT int TRACE_Open( const char filespec[], TRACE_file *fp )
return TRACEINPUT_SUCCESS;
}
- *fp = (_trace_file*)MPIU_Malloc(sizeof(_trace_file));
+ *fp = (_trace_file*)MPL_malloc(sizeof(_trace_file));
if (*fp == NULL)
return TRACEINPUT_FAIL;
(*fp)->pInput = pInput = RLOG_CreateInputStruct(filespec);
if (pInput == NULL)
{
- MPIU_Free(*fp);
+ MPL_free(*fp);
*fp = NULL;
return TRACEINPUT_FAIL;
}
@@ -96,15 +96,15 @@ TRACE_EXPORT int TRACE_Open( const char filespec[], TRACE_file *fp )
(*fp)->bArrowAvail = (RLOG_GetNextArrow(pInput, &(*fp)->arrow) == 0);
if (pInput->nNumRanks > 0)
{
- (*fp)->ppEvent = (RLOG_EVENT**)MPIU_Malloc(sizeof(RLOG_EVENT*) * pInput->nNumRanks);
- (*fp)->ppEventAvail = (int**)MPIU_Malloc(sizeof(int*) * pInput->nNumRanks);
+ (*fp)->ppEvent = (RLOG_EVENT**)MPL_malloc(sizeof(RLOG_EVENT*) * pInput->nNumRanks);
+ (*fp)->ppEventAvail = (int**)MPL_malloc(sizeof(int*) * pInput->nNumRanks);
for (i=0; i<pInput->nNumRanks; i++)
{
if (pInput->pNumEventRecursions[i] > 0)
{
- (*fp)->ppEvent[i] = (RLOG_EVENT*)MPIU_Malloc(sizeof(RLOG_EVENT) * pInput->pNumEventRecursions[i]);
- (*fp)->ppEventAvail[i] = (int*)MPIU_Malloc(sizeof(int) * pInput->pNumEventRecursions[i]);
+ (*fp)->ppEvent[i] = (RLOG_EVENT*)MPL_malloc(sizeof(RLOG_EVENT) * pInput->pNumEventRecursions[i]);
+ (*fp)->ppEventAvail[i] = (int*)MPL_malloc(sizeof(int) * pInput->pNumEventRecursions[i]);
}
else
{
@@ -140,17 +140,17 @@ TRACE_EXPORT int TRACE_Close( TRACE_file *fp )
for (i=0; i<(*fp)->pInput->nNumRanks; i++)
{
if ( (*fp)->ppEvent[i] )
- MPIU_Free( (*fp)->ppEvent[i] );
+ MPL_free( (*fp)->ppEvent[i] );
if ( (*fp)->ppEventAvail[i] )
- MPIU_Free( (*fp)->ppEventAvail[i] );
+ MPL_free( (*fp)->ppEventAvail[i] );
}
RLOG_CloseInputStruct(&(*fp)->pInput);
}
if ((*fp)->ppEvent)
- MPIU_Free( (*fp)->ppEvent );
+ MPL_free( (*fp)->ppEvent );
if ((*fp)->ppEventAvail)
- MPIU_Free( (*fp)->ppEventAvail );
- MPIU_Free( (*fp) );
+ MPL_free( (*fp)->ppEventAvail );
+ MPL_free( (*fp) );
*fp = NULL;
return TRACEINPUT_SUCCESS;
diff --git a/src/util/logging/rlog/configure b/src/util/logging/rlog/configure
index 1b718c2..bd31b14 100755
--- a/src/util/logging/rlog/configure
+++ b/src/util/logging/rlog/configure
@@ -664,6 +664,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -736,6 +737,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE}'
@@ -988,6 +990,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1125,7 +1136,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1278,6 +1289,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
diff --git a/src/util/logging/rlog/irlog2rlog.c b/src/util/logging/rlog/irlog2rlog.c
index 9633181..fe0d83d 100644
--- a/src/util/logging/rlog/irlog2rlog.c
+++ b/src/util/logging/rlog/irlog2rlog.c
@@ -15,7 +15,7 @@
#include <errno.h>
#include <ctype.h> /* isdigit */
#include "mpichconf.h" /* HAVE_SNPRINTF */
-#include "mpimem.h" /* MPL_snprintf */
+#include "mpir_mem.h" /* MPL_snprintf */
#ifndef BOOL
#define BOOL int
@@ -144,7 +144,7 @@ ArrowNode *GetArrowNode(int rank)
pNode = pNode->pNext;
}
- pNode = (ArrowNode *)MPIU_Malloc(sizeof(ArrowNode));
+ pNode = (ArrowNode *)MPL_malloc(sizeof(ArrowNode));
pNode->pEndList = NULL;
pNode->pStartList = NULL;
pNode->rank = rank;
@@ -213,7 +213,7 @@ void SaveArrow(RLOG_IARROW *pArrow)
if (g_fArrow == NULL)
{
- MPIU_Strncpy(g_pszArrowFilename, "ArrowFile.tmp", 1024);
+ MPL_strncpy(g_pszArrowFilename, "ArrowFile.tmp", 1024);
g_fArrow = fopen(g_pszArrowFilename, "w+b");
if (g_fArrow == NULL)
{
@@ -228,7 +228,7 @@ void SaveArrow(RLOG_IARROW *pArrow)
pEnd = ExtractEndNode(pNode, pArrow->rank, pArrow->tag);
if (pEnd == NULL)
{
- pStart = (StartArrowStruct *)MPIU_Malloc(sizeof(StartArrowStruct));
+ pStart = (StartArrowStruct *)MPL_malloc(sizeof(StartArrowStruct));
pStart->src = pArrow->rank;
pStart->tag = pArrow->tag;
pStart->length = pArrow->length;
@@ -256,7 +256,7 @@ void SaveArrow(RLOG_IARROW *pArrow)
arrow.leftright = RLOG_ARROW_LEFT;
/* fwrite(&arrow, sizeof(RLOG_ARROW), 1, g_fArrow); */
WriteFileData(&arrow, sizeof(RLOG_ARROW), g_fArrow);
- MPIU_Free(pEnd);
+ MPL_free(pEnd);
}
else
{
@@ -273,13 +273,13 @@ void SaveArrow(RLOG_IARROW *pArrow)
arrow.start_time = pStart->start_time;
arrow.length = pStart->length; /* the sender length is more accurate than the receiver length */
arrow.leftright = RLOG_ARROW_RIGHT;
- MPIU_Free(pStart);
+ MPL_free(pStart);
/* fwrite(&arrow, sizeof(RLOG_ARROW), 1, g_fArrow); */
WriteFileData(&arrow, sizeof(RLOG_ARROW), g_fArrow);
}
else
{
- pEnd = (EndArrowStruct *)MPIU_Malloc(sizeof(EndArrowStruct));
+ pEnd = (EndArrowStruct *)MPL_malloc(sizeof(EndArrowStruct));
pEnd->src = pArrow->remote;
pEnd->tag = pArrow->tag;
pEnd->timestamp = pArrow->timestamp;
@@ -314,7 +314,7 @@ RecursionStruct *GetLevel(int rank, int recursion)
pLevel = pLevel->next;
}
- pLevel = (RecursionStruct*)MPIU_Malloc(sizeof(RecursionStruct));
+ pLevel = (RecursionStruct*)MPL_malloc(sizeof(RecursionStruct));
MPL_snprintf(pLevel->filename, 1024, "irlog.%d.%d.tmp", rank, recursion);
pLevel->fout = fopen(pLevel->filename, "w+b");
pLevel->rank = rank;
@@ -352,7 +352,7 @@ void SaveState(RLOG_STATE *pState)
pIter = pIter->next;
}
- pIter = (RLOG_State_list*)MPIU_Malloc(sizeof(RLOG_State_list));
+ pIter = (RLOG_State_list*)MPL_malloc(sizeof(RLOG_State_list));
memcpy(&pIter->state, pState, sizeof(RLOG_STATE));
pIter->next = g_pList;
g_pList = pIter;
@@ -388,7 +388,7 @@ void AppendFile(FILE *fout, FILE *fin)
int num_read, num_written;
char *buffer, *buf;
- buffer = (char*)MPIU_Malloc(sizeof(char) * BUFFER_SIZE);
+ buffer = (char*)MPL_malloc(sizeof(char) * BUFFER_SIZE);
total = ftell(fin);
fseek(fin, 0L, SEEK_SET);
@@ -416,7 +416,7 @@ void AppendFile(FILE *fout, FILE *fin)
}
}
- MPIU_Free(buffer);
+ MPL_free(buffer);
}
int FindMinRank(RecursionStruct *pLevel)
@@ -493,7 +493,7 @@ void RemoveLevel(int rank)
pLevel = pLevel->next;
fclose(pTrailer->fout);
unlink(pTrailer->filename);
- MPIU_Free(pTrailer);
+ MPL_free(pTrailer);
pTrailer = pLevel;
}
else
@@ -501,7 +501,7 @@ void RemoveLevel(int rank)
pTrailer->next = pLevel->next;
fclose(pLevel->fout);
unlink(pLevel->filename);
- MPIU_Free(pLevel);
+ MPL_free(pLevel);
pLevel = pTrailer->next;
}
}
@@ -600,7 +600,7 @@ void GenerateNewArgv(int *pargc, char ***pargv, int n)
char *buffer, *str;
length = (sizeof(char*) * (n+3)) +strlen((*pargv)[0]) + 1 + strlen((*pargv)[1]) + 1 + (15 * n);
- buffer = (char*)MPIU_Malloc(length);
+ buffer = (char*)MPL_malloc(length);
argc = n+2;
argv = (char**)buffer;
@@ -668,7 +668,7 @@ int main(int argc, char *argv[])
}
/* read the arrows from all the files in order */
- ppInput = (IRLOG_IOStruct**)MPIU_Malloc(nNumInputs * sizeof(IRLOG_IOStruct*));
+ ppInput = (IRLOG_IOStruct**)MPL_malloc(nNumInputs * sizeof(IRLOG_IOStruct*));
for (i=0; i<nNumInputs; i++)
{
ppInput[i] = IRLOG_CreateInputStruct(argv[i+2]);
@@ -837,7 +837,7 @@ int main(int argc, char *argv[])
{
pState = g_pList;
g_pList = g_pList->next;
- MPIU_Free(pState);
+ MPL_free(pState);
}
if (g_fArrow)
{
@@ -846,7 +846,7 @@ int main(int argc, char *argv[])
}
if (s_bFreeArgv)
- MPIU_Free(argv);
+ MPL_free(argv);
return 0;
}
diff --git a/src/util/logging/rlog/irlogutil.c b/src/util/logging/rlog/irlogutil.c
index ba9e3e8..fbe9e3f 100644
--- a/src/util/logging/rlog/irlogutil.c
+++ b/src/util/logging/rlog/irlogutil.c
@@ -8,7 +8,7 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#include "mpimem.h"
+#include "mpir_mem.h"
static int ReadFileData(char *pBuffer, int length, FILE *fin)
{
@@ -58,7 +58,7 @@ IRLOG_IOStruct *IRLOG_CreateInputStruct(const char *filename)
IRLOG_IOStruct *pInput;
/* allocate an input structure */
- pInput = (IRLOG_IOStruct*)MPIU_Malloc(sizeof(IRLOG_IOStruct));
+ pInput = (IRLOG_IOStruct*)MPL_malloc(sizeof(IRLOG_IOStruct));
if (pInput == NULL)
{
MPL_error_printf("malloc failed - %s\n", strerror(errno));
@@ -69,7 +69,7 @@ IRLOG_IOStruct *IRLOG_CreateInputStruct(const char *filename)
if (pInput->f == NULL)
{
MPL_error_printf("fopen(%s) failed, error: %s\n", filename, strerror(errno));
- MPIU_Free(pInput);
+ MPL_free(pInput);
return NULL;
}
/* read some data */
@@ -78,7 +78,7 @@ IRLOG_IOStruct *IRLOG_CreateInputStruct(const char *filename)
{
MPL_error_printf("Unable to read data from the input file.\n");
fclose(pInput->f);
- MPIU_Free(pInput);
+ MPL_free(pInput);
return NULL;
}
/* set the data fields and get the first record */
@@ -89,7 +89,7 @@ IRLOG_IOStruct *IRLOG_CreateInputStruct(const char *filename)
{
MPL_error_printf("Unable to get the first record from the file.\n");
fclose(pInput->f);
- MPIU_Free(pInput);
+ MPL_free(pInput);
return NULL;
}
return pInput;
@@ -100,7 +100,7 @@ IRLOG_IOStruct *IRLOG_CreateOutputStruct(const char *filename)
IRLOG_IOStruct *pOutput = NULL;
/* allocate a data structure */
- pOutput = (IRLOG_IOStruct*)MPIU_Malloc(sizeof(IRLOG_IOStruct));
+ pOutput = (IRLOG_IOStruct*)MPL_malloc(sizeof(IRLOG_IOStruct));
if (pOutput == NULL)
{
MPL_error_printf("malloc failed - %s\n", strerror(errno));
@@ -112,7 +112,7 @@ IRLOG_IOStruct *IRLOG_CreateOutputStruct(const char *filename)
if (pOutput->f == NULL)
{
MPL_error_printf("Unable to open output file '%s' - %s\n", filename, strerror(errno));
- MPIU_Free(pOutput);
+ MPL_free(pOutput);
return NULL;
}
@@ -216,7 +216,7 @@ int IRLOG_WriteRecord(RLOG_HEADER *pRecord, IRLOG_IOStruct *pOutput)
int IRLOG_CloseInputStruct(IRLOG_IOStruct **ppInput)
{
fclose((*ppInput)->f);
- MPIU_Free(*ppInput);
+ MPL_free(*ppInput);
*ppInput = NULL;
return 0;
}
@@ -225,7 +225,7 @@ int IRLOG_CloseOutputStruct(IRLOG_IOStruct **ppOutput)
{
WriteFileData((*ppOutput)->buffer, (int)((*ppOutput)->pCurHeader - (*ppOutput)->buffer), (*ppOutput)->f);
fclose((*ppOutput)->f);
- MPIU_Free(*ppOutput);
+ MPL_free(*ppOutput);
*ppOutput = NULL;
return 0;
}
diff --git a/src/util/logging/rlog/minalignrlog.c b/src/util/logging/rlog/minalignrlog.c
index 53e251a..d408eb3 100644
--- a/src/util/logging/rlog/minalignrlog.c
+++ b/src/util/logging/rlog/minalignrlog.c
@@ -11,7 +11,7 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
-#include "mpimem.h"
+#include "mpir_mem.h"
void PrintState(RLOG_STATE *pState)
{
@@ -131,7 +131,7 @@ int main(int argc, char *argv[])
}
}
- pOffset = (double*)MPIU_Malloc(range * sizeof(double));
+ pOffset = (double*)MPL_malloc(range * sizeof(double));
if (pOffset == NULL)
{
printf("malloc failed\n");
diff --git a/src/util/logging/rlog/rimshot/.state-cache b/src/util/logging/rlog/rimshot/.state-cache
index cf49d5a..3559eb2 100644
--- a/src/util/logging/rlog/rimshot/.state-cache
+++ b/src/util/logging/rlog/rimshot/.state-cache
@@ -1,55 +1,55 @@
<dir>
-<file name="rimshotDoc.cpp" info="1447123141"/>
-<file name="resource.h" info="1447123141"/>
-<file name="rimshotView.cpp" info="1447123141"/>
-<file name="ZoomDlg.cpp" info="1447123141"/>
-<file name="StdAfx.cpp" info="1447123141"/>
-<file name="OffsetDlg.cpp" info="1447123141"/>
-<file name="MainFrm.h" info="1447123141"/>
-<file name="rimshotDoc.h" info="1447123141"/>
-<file name="OffsetDlg.h" info="1447123141"/>
-<file name="ZoomDlg.h" info="1447123141"/>
-<file name="StdAfx.h" info="1447123141"/>
-<file name="rimshot.cpp" info="1447123141"/>
-<file name="rimshot.h" info="1447123141"/>
-<file name="rimshot_draw.h" info="1447123141"/>
-<file name="MainFrm.cpp" info="1447123141"/>
-<file name="rimshot_draw.cpp" info="1447123141"/>
-<file name="rimshotView.h" info="1447123141"/>
+<file name="rimshotView.cpp" info="1478973152"/>
+<file name="ZoomDlg.cpp" info="1478973152"/>
+<file name="rimshotDoc.cpp" info="1478973152"/>
+<file name="ZoomDlg.h" info="1478973152"/>
+<file name="OffsetDlg.cpp" info="1478973152"/>
+<file name="rimshotDoc.h" info="1478973152"/>
+<file name="StdAfx.h" info="1478973152"/>
+<file name="rimshot.cpp" info="1478973152"/>
+<file name="rimshotView.h" info="1478973152"/>
+<file name="OffsetDlg.h" info="1478973152"/>
+<file name="rimshot_draw.h" info="1478973152"/>
+<file name="StdAfx.cpp" info="1478973152"/>
+<file name="rimshot.h" info="1478973152"/>
+<file name="MainFrm.cpp" info="1478973152"/>
+<file name="resource.h" info="1478973152"/>
+<file name="MainFrm.h" info="1478973152"/>
+<file name="rimshot_draw.cpp" info="1478973152"/>
</dir>
<data>
-<fileinfo name="rimshotDoc.cpp">
-</fileinfo>
-<fileinfo name="resource.h">
-</fileinfo>
<fileinfo name="rimshotView.cpp">
</fileinfo>
<fileinfo name="ZoomDlg.cpp">
</fileinfo>
-<fileinfo name="StdAfx.cpp">
+<fileinfo name="rimshotDoc.cpp">
</fileinfo>
-<fileinfo name="OffsetDlg.cpp">
+<fileinfo name="ZoomDlg.h">
</fileinfo>
-<fileinfo name="MainFrm.h">
+<fileinfo name="OffsetDlg.cpp">
</fileinfo>
<fileinfo name="rimshotDoc.h">
</fileinfo>
-<fileinfo name="OffsetDlg.h">
-</fileinfo>
-<fileinfo name="ZoomDlg.h">
-</fileinfo>
<fileinfo name="StdAfx.h">
</fileinfo>
<fileinfo name="rimshot.cpp">
</fileinfo>
-<fileinfo name="rimshot.h">
+<fileinfo name="rimshotView.h">
+</fileinfo>
+<fileinfo name="OffsetDlg.h">
</fileinfo>
<fileinfo name="rimshot_draw.h">
</fileinfo>
+<fileinfo name="StdAfx.cpp">
+</fileinfo>
+<fileinfo name="rimshot.h">
+</fileinfo>
<fileinfo name="MainFrm.cpp">
</fileinfo>
-<fileinfo name="rimshot_draw.cpp">
+<fileinfo name="resource.h">
</fileinfo>
-<fileinfo name="rimshotView.h">
+<fileinfo name="MainFrm.h">
+</fileinfo>
+<fileinfo name="rimshot_draw.cpp">
</fileinfo>
</data>
diff --git a/src/util/logging/rlog/rlog.c b/src/util/logging/rlog/rlog.c
index 09b66fd..a2218b2 100644
--- a/src/util/logging/rlog/rlog.c
+++ b/src/util/logging/rlog/rlog.c
@@ -13,11 +13,11 @@
#include "mpl.h" /* MPL_error_printf */
#include "mpichconf.h" /* HAVE_SNPRINTF */
-#include "mpimem.h" /* MPL_snprintf */
+#include "mpir_mem.h" /* MPL_snprintf */
#include "mpi.h"
/*#define RLOG_timestamp PMPI_Wtime*/
-#include "mpiu_timer.h"
+
static double RLOG_timestamp(void)
{
double d;
@@ -65,7 +65,7 @@ RLOG_Struct* RLOG_InitLog(int rank, int size)
{
RLOG_Struct* pRLOG;
- pRLOG = (RLOG_Struct*)MPIU_Malloc(sizeof(RLOG_Struct));
+ pRLOG = (RLOG_Struct*)MPL_malloc(sizeof(RLOG_Struct));
if (pRLOG == NULL)
return NULL;
@@ -81,7 +81,7 @@ RLOG_Struct* RLOG_InitLog(int rank, int size)
if (pRLOG->pOutput == NULL)
{
MPL_error_printf("RLOG Error: unable to allocate an output structure.\n");
- MPIU_Free(pRLOG);
+ MPL_free(pRLOG);
return NULL;
}
@@ -407,11 +407,11 @@ void RLOG_DescribeState(RLOG_Struct* pRLOG, int state, char *name, char *color)
pHeader->length = sizeof(RLOG_HEADER) + sizeof(RLOG_STATE);
pState->event = state;
- MPIU_Strncpy(pState->color, (color != NULL) ? color : get_random_color_str(), RLOG_COLOR_LENGTH);
+ MPL_strncpy(pState->color, (color != NULL) ? color : get_random_color_str(), RLOG_COLOR_LENGTH);
pState->color[RLOG_COLOR_LENGTH-1] = '\0';
if (name)
{
- MPIU_Strncpy(pState->description, name, RLOG_DESCRIPTION_LENGTH);
+ MPL_strncpy(pState->description, name, RLOG_DESCRIPTION_LENGTH);
pState->description[RLOG_DESCRIPTION_LENGTH-1] = '\0';
}
else
diff --git a/src/util/logging/rlog/rlogtime.c b/src/util/logging/rlog/rlogtime.c
index e2952fd..bc035b6 100644
--- a/src/util/logging/rlog/rlogtime.c
+++ b/src/util/logging/rlog/rlogtime.c
@@ -13,7 +13,7 @@
#include "mpi.h"
#include "mpichconf.h"
-#include "mpimem.h" /* for MPL_snprintf */
+#include "mpir_mem.h" /* for MPL_snprintf */
#include "rlog.h"
#include <math.h>
#include <stdlib.h>
@@ -136,11 +136,11 @@ static char *get_random_color_str(void)
}
static int s_RLOG_Initialized = 0;
-int MPIU_Timer_init(int rank, int size)
+int MPII_Timer_init(int rank, int size)
{
if (s_RLOG_Initialized)
{
- /* MPIU_Timer_init already called. */
+ /* MPII_Timer_init already called. */
return -1;
}
g_pRLOG = RLOG_InitLog(rank, size);
@@ -156,13 +156,13 @@ int MPIU_Timer_init(int rank, int size)
/* arrow state */
RLOG_DescribeState(g_pRLOG, RLOG_ARROW_EVENT_ID, "Arrow", "255 255 255");
- MPIR_Describe_timer_states();
+ MPII_Describe_timer_states();
s_RLOG_Initialized = 1;
return MPI_SUCCESS;
}
-int MPIU_Timer_finalize()
+int MPII_Timer_finalize()
{
if (g_pRLOG == NULL)
return -1;
@@ -194,7 +194,7 @@ int MPIU_Timer_finalize()
/* This routine makes the RLOG_DescribeState call for each name */
#include "state_names.h"
-int MPIR_Describe_timer_states( void )
+int MPII_Describe_timer_states( void )
{
MPIU_State_defs *def = mpich_states;
diff --git a/src/util/logging/rlog/rlogutil.c b/src/util/logging/rlog/rlogutil.c
index d0131df..5a9ce34 100644
--- a/src/util/logging/rlog/rlogutil.c
+++ b/src/util/logging/rlog/rlogutil.c
@@ -10,7 +10,7 @@
#include <string.h>
#include <errno.h>
#include <stdarg.h>
-#include "mpimem.h"
+#include "mpir_mem.h"
static int ReadFileData(char *pBuffer, int length, FILE *fin)
{
@@ -81,7 +81,7 @@ RLOG_IOStruct *RLOG_CreateInputStruct(const char *filename)
int type, length;
/* allocate an input structure */
- pInput = (RLOG_IOStruct*)MPIU_Malloc(sizeof(RLOG_IOStruct));
+ pInput = (RLOG_IOStruct*)MPL_malloc(sizeof(RLOG_IOStruct));
if (pInput == NULL)
{
MPL_error_printf("malloc failed - %s\n", strerror(errno));
@@ -99,7 +99,7 @@ RLOG_IOStruct *RLOG_CreateInputStruct(const char *filename)
if (pInput->f == NULL)
{
MPL_error_printf("fopen(%s) failed, error: %s\n", filename, strerror(errno));
- MPIU_Free(pInput);
+ MPL_free(pInput);
return NULL;
}
pInput->nNumRanks = 0;
@@ -125,14 +125,14 @@ RLOG_IOStruct *RLOG_CreateInputStruct(const char *filename)
pInput->nNumRanks = pInput->header.nMaxRank + 1 - pInput->header.nMinRank;
min_rank = pInput->header.nMinRank;
- pInput->pRank = (int*)MPIU_Malloc(pInput->nNumRanks * sizeof(int));
- pInput->pNumEventRecursions = (int*)MPIU_Malloc(pInput->nNumRanks * sizeof(int));
- pInput->ppNumEvents = (int**)MPIU_Malloc(pInput->nNumRanks * sizeof(int*));
- pInput->ppCurEvent = (int**)MPIU_Malloc(pInput->nNumRanks * sizeof(int*));
- pInput->ppCurGlobalEvent = (int**)MPIU_Malloc(pInput->nNumRanks * sizeof(int*));
- pInput->gppCurEvent = (RLOG_EVENT**)MPIU_Malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
- pInput->gppPrevEvent = (RLOG_EVENT**)MPIU_Malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
- pInput->ppEventOffset = (long**)MPIU_Malloc(pInput->nNumRanks * sizeof(long*));
+ pInput->pRank = (int*)MPL_malloc(pInput->nNumRanks * sizeof(int));
+ pInput->pNumEventRecursions = (int*)MPL_malloc(pInput->nNumRanks * sizeof(int));
+ pInput->ppNumEvents = (int**)MPL_malloc(pInput->nNumRanks * sizeof(int*));
+ pInput->ppCurEvent = (int**)MPL_malloc(pInput->nNumRanks * sizeof(int*));
+ pInput->ppCurGlobalEvent = (int**)MPL_malloc(pInput->nNumRanks * sizeof(int*));
+ pInput->gppCurEvent = (RLOG_EVENT**)MPL_malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
+ pInput->gppPrevEvent = (RLOG_EVENT**)MPL_malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
+ pInput->ppEventOffset = (long**)MPL_malloc(pInput->nNumRanks * sizeof(long*));
for (i=0; i<pInput->nNumRanks; i++)
{
pInput->pRank[i] = -1;
@@ -163,7 +163,7 @@ RLOG_IOStruct *RLOG_CreateInputStruct(const char *filename)
if (cur_rank - min_rank >= pInput->nNumRanks)
{
MPL_error_printf("Error: event section out of range - %d <= %d <= %d\n", pInput->header.nMinRank, cur_rank, pInput->header.nMaxRank);
- MPIU_Free(pInput);
+ MPL_free(pInput);
return NULL;
}
rank_index = cur_rank - min_rank;
@@ -171,12 +171,12 @@ RLOG_IOStruct *RLOG_CreateInputStruct(const char *filename)
/*printf("levels: %d\n", pInput->nNumEventRecursions);*/
if (pInput->pNumEventRecursions[rank_index])
{
- pInput->ppCurEvent[rank_index] = (int*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
- pInput->ppCurGlobalEvent[rank_index] = (int*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
- pInput->gppCurEvent[rank_index] = (RLOG_EVENT*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
- pInput->gppPrevEvent[rank_index] = (RLOG_EVENT*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
- pInput->ppNumEvents[rank_index] = (int*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
- pInput->ppEventOffset[rank_index] = (long*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(long));
+ pInput->ppCurEvent[rank_index] = (int*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
+ pInput->ppCurGlobalEvent[rank_index] = (int*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
+ pInput->gppCurEvent[rank_index] = (RLOG_EVENT*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
+ pInput->gppPrevEvent[rank_index] = (RLOG_EVENT*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
+ pInput->ppNumEvents[rank_index] = (int*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
+ pInput->ppEventOffset[rank_index] = (long*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(long));
}
for (i=0; i<pInput->pNumEventRecursions[rank_index]; i++)
{
@@ -234,7 +234,7 @@ static int ModifyArrows(FILE *f, int nNumArrows, int nMin, double *pOffsets, int
arrow_pos = ftell(f);
if (arrow_pos == -1)
return errno;
- pArray = (RLOG_ARROW*)MPIU_Malloc(nNumArrows * sizeof(RLOG_ARROW));
+ pArray = (RLOG_ARROW*)MPL_malloc(nNumArrows * sizeof(RLOG_ARROW));
if (pArray)
{
MPL_msg_printf("Modifying %d arrows\n", nNumArrows);
@@ -243,7 +243,7 @@ static int ModifyArrows(FILE *f, int nNumArrows, int nMin, double *pOffsets, int
error = ReadFileData((char*)pArray, nNumArrows * sizeof(RLOG_ARROW), f);
if (error)
{
- MPIU_Free(pArray);
+ MPL_free(pArray);
return error;
}
@@ -287,11 +287,11 @@ static int ModifyArrows(FILE *f, int nNumArrows, int nMin, double *pOffsets, int
error = WriteFileData((char*)pArray, nNumArrows * sizeof(RLOG_ARROW), f);
if (error)
{
- MPIU_Free(pArray);
+ MPL_free(pArray);
return error;
}
fseek(f, 0, SEEK_CUR);
- MPIU_Free(pArray);
+ MPL_free(pArray);
}
else
{
@@ -344,7 +344,7 @@ int RLOG_ModifyEvents(const char *filename, double *pOffsets, int n)
int error;
/* allocate an input structure */
- pInput = (RLOG_IOStruct*)MPIU_Malloc(sizeof(RLOG_IOStruct));
+ pInput = (RLOG_IOStruct*)MPL_malloc(sizeof(RLOG_IOStruct));
if (pInput == NULL)
{
MPL_error_printf("malloc failed - %s\n", strerror(errno));
@@ -362,7 +362,7 @@ int RLOG_ModifyEvents(const char *filename, double *pOffsets, int n)
if (pInput->f == NULL)
{
MPL_error_printf("fopen(%s) failed, error: %s\n", filename, strerror(errno));
- MPIU_Free(pInput);
+ MPL_free(pInput);
return -1;
}
pInput->nNumRanks = 0;
@@ -388,14 +388,14 @@ int RLOG_ModifyEvents(const char *filename, double *pOffsets, int n)
pInput->nNumRanks = pInput->header.nMaxRank + 1 - pInput->header.nMinRank;
min_rank = pInput->header.nMinRank;
- pInput->pRank = (int*)MPIU_Malloc(pInput->nNumRanks * sizeof(int));
- pInput->pNumEventRecursions = (int*)MPIU_Malloc(pInput->nNumRanks * sizeof(int));
- pInput->ppNumEvents = (int**)MPIU_Malloc(pInput->nNumRanks * sizeof(int*));
- pInput->ppCurEvent = (int**)MPIU_Malloc(pInput->nNumRanks * sizeof(int*));
- pInput->ppCurGlobalEvent = (int**)MPIU_Malloc(pInput->nNumRanks * sizeof(int*));
- pInput->gppCurEvent = (RLOG_EVENT**)MPIU_Malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
- pInput->gppPrevEvent = (RLOG_EVENT**)MPIU_Malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
- pInput->ppEventOffset = (long**)MPIU_Malloc(pInput->nNumRanks * sizeof(long*));
+ pInput->pRank = (int*)MPL_malloc(pInput->nNumRanks * sizeof(int));
+ pInput->pNumEventRecursions = (int*)MPL_malloc(pInput->nNumRanks * sizeof(int));
+ pInput->ppNumEvents = (int**)MPL_malloc(pInput->nNumRanks * sizeof(int*));
+ pInput->ppCurEvent = (int**)MPL_malloc(pInput->nNumRanks * sizeof(int*));
+ pInput->ppCurGlobalEvent = (int**)MPL_malloc(pInput->nNumRanks * sizeof(int*));
+ pInput->gppCurEvent = (RLOG_EVENT**)MPL_malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
+ pInput->gppPrevEvent = (RLOG_EVENT**)MPL_malloc(pInput->nNumRanks * sizeof(RLOG_EVENT*));
+ pInput->ppEventOffset = (long**)MPL_malloc(pInput->nNumRanks * sizeof(long*));
for (i=0; i<pInput->nNumRanks; i++)
{
pInput->pRank[i] = -1;
@@ -441,12 +441,12 @@ int RLOG_ModifyEvents(const char *filename, double *pOffsets, int n)
/*printf("levels: %d\n", pInput->nNumEventRecursions);*/
if (pInput->pNumEventRecursions[rank_index])
{
- pInput->ppCurEvent[rank_index] = (int*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
- pInput->ppCurGlobalEvent[rank_index] = (int*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
- pInput->gppCurEvent[rank_index] = (RLOG_EVENT*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
- pInput->gppPrevEvent[rank_index] = (RLOG_EVENT*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
- pInput->ppNumEvents[rank_index] = (int*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
- pInput->ppEventOffset[rank_index] = (long*)MPIU_Malloc(pInput->pNumEventRecursions[rank_index] * sizeof(long));
+ pInput->ppCurEvent[rank_index] = (int*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
+ pInput->ppCurGlobalEvent[rank_index] = (int*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
+ pInput->gppCurEvent[rank_index] = (RLOG_EVENT*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
+ pInput->gppPrevEvent[rank_index] = (RLOG_EVENT*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(RLOG_EVENT));
+ pInput->ppNumEvents[rank_index] = (int*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(int));
+ pInput->ppEventOffset[rank_index] = (long*)MPL_malloc(pInput->pNumEventRecursions[rank_index] * sizeof(long));
}
for (i=0; i<pInput->pNumEventRecursions[rank_index]; i++)
{
@@ -495,31 +495,31 @@ int RLOG_CloseInputStruct(RLOG_IOStruct **ppInput)
for (i=0; i<(*ppInput)->nNumRanks; i++)
{
if ((*ppInput)->ppCurEvent[i])
- MPIU_Free((*ppInput)->ppCurEvent[i]);
+ MPL_free((*ppInput)->ppCurEvent[i]);
if ((*ppInput)->ppCurGlobalEvent[i])
- MPIU_Free((*ppInput)->ppCurGlobalEvent[i]);
+ MPL_free((*ppInput)->ppCurGlobalEvent[i]);
if ((*ppInput)->gppCurEvent[i])
- MPIU_Free((*ppInput)->gppCurEvent[i]);
+ MPL_free((*ppInput)->gppCurEvent[i]);
if ((*ppInput)->gppPrevEvent[i])
- MPIU_Free((*ppInput)->gppPrevEvent[i]);
+ MPL_free((*ppInput)->gppPrevEvent[i]);
if ((*ppInput)->ppEventOffset[i])
- MPIU_Free((*ppInput)->ppEventOffset[i]);
+ MPL_free((*ppInput)->ppEventOffset[i]);
if ((*ppInput)->ppNumEvents[i])
- MPIU_Free((*ppInput)->ppNumEvents[i]);
+ MPL_free((*ppInput)->ppNumEvents[i]);
}
if ((*ppInput)->ppCurEvent)
- MPIU_Free((*ppInput)->ppCurEvent);
+ MPL_free((*ppInput)->ppCurEvent);
if ((*ppInput)->ppCurGlobalEvent)
- MPIU_Free((*ppInput)->ppCurGlobalEvent);
+ MPL_free((*ppInput)->ppCurGlobalEvent);
if ((*ppInput)->gppCurEvent)
- MPIU_Free((*ppInput)->gppCurEvent);
+ MPL_free((*ppInput)->gppCurEvent);
if ((*ppInput)->gppPrevEvent)
- MPIU_Free((*ppInput)->gppPrevEvent);
+ MPL_free((*ppInput)->gppPrevEvent);
if ((*ppInput)->ppEventOffset)
- MPIU_Free((*ppInput)->ppEventOffset);
+ MPL_free((*ppInput)->ppEventOffset);
if ((*ppInput)->ppNumEvents)
- MPIU_Free((*ppInput)->ppNumEvents);
- MPIU_Free(*ppInput);
+ MPL_free((*ppInput)->ppNumEvents);
+ MPL_free(*ppInput);
*ppInput = NULL;
return 0;
}
diff --git a/src/util/mem/.state-cache b/src/util/mem/.state-cache
index 0fb605e..0249004 100644
--- a/src/util/mem/.state-cache
+++ b/src/util/mem/.state-cache
@@ -1,25 +1,10 @@
<dir>
-<file name="strerror.c" info="1447123141"/>
-<file name="safestr.c" info="1447123141"/>
-<file name="argstr.c" info="1447123141"/>
-<file name="trmem.c" info="1447123141"/>
-<file name="check.c" info="1447123141"/>
-<file name="mpiu_strerror.h" info="1447123141"/>
-<file name="handlemem.c" info="1447123141"/>
+<file name="strerror.c" info="1478973152"/>
+<file name="handlemem.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="strerror.c">
</fileinfo>
-<fileinfo name="safestr.c">
-</fileinfo>
-<fileinfo name="argstr.c">
-</fileinfo>
-<fileinfo name="trmem.c">
-</fileinfo>
-<fileinfo name="check.c">
-</fileinfo>
-<fileinfo name="mpiu_strerror.h">
-</fileinfo>
<fileinfo name="handlemem.c">
</fileinfo>
</data>
diff --git a/src/util/mem/Makefile.mk b/src/util/mem/Makefile.mk
index cc3aa78..ed6a2e6 100644
--- a/src/util/mem/Makefile.mk
+++ b/src/util/mem/Makefile.mk
@@ -7,13 +7,6 @@
AM_CPPFLAGS += -I$(top_srcdir)/src/util/mem
-noinst_HEADERS += \
- src/util/mem/mpiu_strerror.h
-
mpi_core_sources += \
- src/util/mem/trmem.c \
src/util/mem/handlemem.c \
- src/util/mem/safestr.c \
- src/util/mem/argstr.c \
src/util/mem/strerror.c
-
diff --git a/src/util/mem/argstr.c b/src/util/mem/argstr.c
deleted file mode 100644
index 235404b..0000000
--- a/src/util/mem/argstr.c
+++ /dev/null
@@ -1,1076 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
- *
- * Copyright (C) 1997 University of Chicago.
- * See COPYRIGHT notice in top-level directory.
- */
-
-#include "mpichconf.h"
-#include "mpimem.h"
-#include "mpidbg.h"
-
-#ifdef HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-/* ctype is needed for isspace and isascii (isspace is only defined for
- values on which isascii returns true). */
-#include <ctype.h>
-
-#define MPIU_STR_TRUNCATED MPIU_STR_NOMEM
-
-static int encode_buffer(char *dest, int dest_length, const char *src,
- int src_length, int *num_encoded)
-{
- int num_used;
- int n = 0;
- if (src_length == 0)
- {
- if (dest_length > 2)
- {
- *dest = MPIU_STR_QUOTE_CHAR;
- dest++;
- *dest = MPIU_STR_QUOTE_CHAR;
- dest++;
- *dest = '\0';
- *num_encoded = 0;
- return MPIU_STR_SUCCESS;
- }
- else
- {
- return MPIU_STR_TRUNCATED;
- }
- }
- while (src_length && dest_length)
- {
- num_used = MPL_snprintf(dest, dest_length, "%02X",
- (unsigned char)*src);
- if (num_used < 0)
- {
- *num_encoded = n;
- return MPIU_STR_TRUNCATED;
- }
- /*MPIU_DBG_MSG_FMT(OTHER,VERBOSE,(MPIU_DBG_FDEST," %c = %c%c",
- ch, dest[0], dest[1]));*/
- dest += num_used;
- dest_length -= num_used;
- src++;
- n++;
- src_length--;
- }
- *num_encoded = n;
- return src_length ? MPIU_STR_TRUNCATED : MPIU_STR_SUCCESS;
-}
-
-static int decode_buffer(const char *str, char *dest, int length,
- int *num_decoded)
-{
- char hex[3];
- int value;
- int n = 0;
-
- if (str == NULL || dest == NULL || num_decoded == NULL)
- return MPIU_STR_FAIL;
- if (length < 1)
- {
- *num_decoded = 0;
- if (*str == '\0')
- return MPIU_STR_SUCCESS;
- return MPIU_STR_TRUNCATED;
- }
- if (*str == MPIU_STR_QUOTE_CHAR)
- str++;
- hex[2] = '\0';
- while (*str != '\0' &&
- *str != MPIU_STR_SEPAR_CHAR &&
- *str != MPIU_STR_QUOTE_CHAR &&
- length)
- {
- hex[0] = *str;
- str++;
- hex[1] = *str;
- str++;
- sscanf(hex, "%X", &value);
- *dest = (char)value;
- /*MPIU_DBG_MSG_FMT(OTHER,VERBOSE,(MPIU_DBG_FDEST," %s = %c",
- hex, *dest));*/
- dest++;
- n++;
- length--;
- }
- *num_decoded = n;
- if (length == 0)
- {
- if (*str != '\0' &&
- *str != MPIU_STR_SEPAR_CHAR &&
- *str != MPIU_STR_QUOTE_CHAR)
- return MPIU_STR_TRUNCATED;
- }
- return MPIU_STR_SUCCESS;
-}
-
-static const char * first_token(const char *str)
-{
- if (str == NULL)
- return NULL;
- /* isspace is defined only if isascii is true */
- while (/*isascii(*str) && isspace(*str)*/ *str == MPIU_STR_SEPAR_CHAR)
- str++;
- if (*str == '\0')
- return NULL;
- return str;
-}
-
-static const char * next_token(const char *str)
-{
- if (str == NULL)
- return NULL;
- str = first_token(str);
- if (str == NULL)
- return NULL;
- if (*str == MPIU_STR_QUOTE_CHAR)
- {
- /* move over string */
- str++; /* move over the first quote */
- if (*str == '\0')
- return NULL;
- while (*str != MPIU_STR_QUOTE_CHAR)
- {
- /* move until the last quote, ignoring escaped quotes */
- if (*str == MPIU_STR_ESCAPE_CHAR)
- {
- str++;
- if (*str == MPIU_STR_QUOTE_CHAR)
- str++;
- }
- else
- {
- str++;
- }
- if (*str == '\0')
- return NULL;
- }
- str++; /* move over the last quote */
- }
- else
- {
- if (*str == MPIU_STR_DELIM_CHAR)
- {
- /* move over the DELIM token */
- str++;
- }
- else
- {
- /* move over literal */
- while (/*(isascii(*str) &&
- !isspace(*str)) &&*/
- *str != MPIU_STR_SEPAR_CHAR &&
- *str != MPIU_STR_DELIM_CHAR &&
- *str != '\0')
- str++;
- }
- }
- return first_token(str);
-}
-
-static int compare_token(const char *token, const char *str)
-{
- if (token == NULL || str == NULL)
- return -1;
-
- if (*token == MPIU_STR_QUOTE_CHAR)
- {
- /* compare quoted strings */
- token++; /* move over the first quote */
- /* compare characters until reaching the end of the string or the
- end quote character */
- for(;;)
- {
- if (*token == MPIU_STR_ESCAPE_CHAR)
- {
- if (*(token+1) == MPIU_STR_QUOTE_CHAR)
- {
- /* move over the escape character if the next character
- is a quote character */
- token++;
- }
- if (*token != *str)
- break;
- }
- else
- {
- if (*token != *str || *token == MPIU_STR_QUOTE_CHAR)
- break;
- }
- if (*str == '\0')
- break;
- token++;
- str++;
- }
- if (*str == '\0' && *token == MPIU_STR_QUOTE_CHAR)
- return 0;
- if (*token == MPIU_STR_QUOTE_CHAR)
- return 1;
- if (*str < *token)
- return -1;
- return 1;
- }
-
- /* compare DELIM token */
- if (*token == MPIU_STR_DELIM_CHAR)
- {
- if (*str == MPIU_STR_DELIM_CHAR)
- {
- str++;
- if (*str == '\0')
- return 0;
- return 1;
- }
- if (*token < *str)
- return -1;
- return 1;
- }
-
- /* compare literals */
- while (*token == *str &&
- *str != '\0' &&
- *token != MPIU_STR_DELIM_CHAR &&
- (*token != MPIU_STR_SEPAR_CHAR) )
- {
- token++;
- str++;
- }
- if ( (*str == '\0') &&
- (*token == MPIU_STR_DELIM_CHAR ||
- (*token == MPIU_STR_SEPAR_CHAR) || *token == '\0') )
- return 0;
- if (*token == MPIU_STR_DELIM_CHAR ||
- (*token == MPIU_STR_SEPAR_CHAR) || *token < *str)
- return -1;
- return 1;
-}
-
-
-static int token_copy(const char *token, char *str, int maxlen)
-{
- /* check parameters */
- if (token == NULL || str == NULL)
- return MPIU_STR_FAIL;
-
- /* check special buffer lengths */
- if (maxlen < 1)
- return MPIU_STR_FAIL;
- if (maxlen == 1)
- {
- *str = '\0';
- return (str[0] == '\0') ? MPIU_STR_SUCCESS : MPIU_STR_TRUNCATED;
- }
-
- /* cosy up to the token */
- token = first_token(token);
- if (token == NULL)
- {
- *str = '\0';
- return MPIU_STR_SUCCESS;
- }
-
- if (*token == MPIU_STR_DELIM_CHAR)
- {
- /* copy the special deliminator token */
- str[0] = MPIU_STR_DELIM_CHAR;
- str[1] = '\0';
- return MPIU_STR_SUCCESS;
- }
-
- if (*token == MPIU_STR_QUOTE_CHAR)
- {
- /* quoted copy */
- token++; /* move over the first quote */
- do
- {
- if (*token == MPIU_STR_ESCAPE_CHAR)
- {
- if (*(token+1) == MPIU_STR_QUOTE_CHAR)
- token++;
- *str = *token;
- }
- else
- {
- if (*token == MPIU_STR_QUOTE_CHAR)
- {
- *str = '\0';
- return MPIU_STR_SUCCESS;
- }
- *str = *token;
- }
- str++;
- token++;
- maxlen--;
- } while (maxlen);
- /* we've run out of destination characters so back up and null
- terminate the string */
- str--;
- *str = '\0';
- return MPIU_STR_TRUNCATED;
- }
-
- /* literal copy */
- while (*token != MPIU_STR_DELIM_CHAR &&
- (*token != MPIU_STR_SEPAR_CHAR) && *token != '\0' && maxlen)
- {
- *str = *token;
- str++;
- token++;
- maxlen--;
- }
- if (maxlen)
- {
- *str = '\0';
- return MPIU_STR_SUCCESS;
- }
- str--;
- *str = '\0';
- return MPIU_STR_TRUNCATED;
-}
-
-static void token_hide(char *token)
-{
- /* check parameters */
- if (token == NULL)
- return;
-
- /* cosy up to the token */
- token = (char*)first_token(token);
- if (token == NULL)
- return;
-
- if (*token == MPIU_STR_DELIM_CHAR)
- {
- *token = MPIU_STR_HIDE_CHAR;
- return;
- }
-
- /* quoted */
- if (*token == MPIU_STR_QUOTE_CHAR)
- {
- *token = MPIU_STR_HIDE_CHAR;
- token++; /* move over the first quote */
- while (*token != '\0')
- {
- if (*token == MPIU_STR_ESCAPE_CHAR)
- {
- if (*(token+1) == MPIU_STR_QUOTE_CHAR)
- {
- *token = MPIU_STR_HIDE_CHAR;
- token++;
- }
- *token = MPIU_STR_HIDE_CHAR;
- }
- else
- {
- if (*token == MPIU_STR_QUOTE_CHAR)
- {
- *token = MPIU_STR_HIDE_CHAR;
- return;
- }
- *token = MPIU_STR_HIDE_CHAR;
- }
- token++;
- }
- return;
- }
-
- /* literal */
- while (*token != MPIU_STR_DELIM_CHAR &&
- (*token != MPIU_STR_SEPAR_CHAR) && *token != '\0')
- {
- *token = MPIU_STR_HIDE_CHAR;
- token++;
- }
-}
-
-/*@ MPIU_Str_get_string_arg - Extract an option from a string with a
- maximum length
-
-Input Parameters:
-+ str - Source string
-. key - key
-- maxlen - Maximum total length of 'val'
-
-Output Parameters:
-. val - output string
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Notes:
- This routine searches for a "key = value" entry in a string
-
- Module:
- Utility
- @*/
-int MPIU_Str_get_string_arg(const char *str, const char *flag, char *val,
- int maxlen)
-{
- if (maxlen < 1)
- return MPIU_STR_FAIL;
-
- /* line up with the first token */
- str = first_token(str);
- if (str == NULL)
- return MPIU_STR_FAIL;
-
- /* This loop will match the first instance of "flag = value" in the string. */
- do
- {
- if (compare_token(str, flag) == 0)
- {
- str = next_token(str);
- if (compare_token(str, MPIU_STR_DELIM_STR) == 0)
- {
- str = next_token(str);
- if (str == NULL)
- return MPIU_STR_FAIL;
- return token_copy(str, val, maxlen);
- }
- }
- else
- {
- str = next_token(str);
- }
- } while (str);
- return MPIU_STR_FAIL;
-}
-
-/*@ MPIU_Str_get_binary_arg - Extract an option from a string with a maximum
- length
-
-Input Parameters:
-+ str - Source string
-. key - key
-- maxlen - Maximum total length of 'buffer'
-
-Output Parameters:
-+ buffer - output buffer
-- out_length - output length
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Notes:
- This routine searches for a "key = value" entry in a string and decodes
- the value
- back to binary data. The data must have been encoded with
- MPIU_Str_add_binary_arg.
-
- Module:
- Utility
- @*/
-int MPIU_Str_get_binary_arg(const char *str, const char *flag, char *buffer,
- int maxlen, int *out_length)
-{
- if (maxlen < 1)
- return MPIU_STR_FAIL;
-
- /* line up with the first token */
- str = first_token(str);
- if (str == NULL)
- return MPIU_STR_FAIL;
-
- /* This loop will match the first instance of "flag = value" in the string. */
- do
- {
- if (compare_token(str, flag) == 0)
- {
- str = next_token(str);
- if (compare_token(str, MPIU_STR_DELIM_STR) == 0)
- {
- str = next_token(str);
- if (str == NULL)
- return MPIU_STR_FAIL;
- return decode_buffer(str, buffer, maxlen, out_length);
- }
- }
- else
- {
- str = next_token(str);
- }
- } while (str);
- return MPIU_STR_FAIL;
-}
-
-/*@ MPIU_Str_hide_string_arg - Over-write the value of an string option
- with * characters
-
-Input Parameters:
-+ str - input string
-- key - key
-
-Output Parameters:
-. str - The string data is modified if the key is found in the string
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_FAIL
-
- Notes:
- This routine covers an option in a string converting "key = value" to
- "key = *****"
-
- Module:
- Utility
- @*/
-MPIU_BOOL MPIU_Str_hide_string_arg(char *str, const char *flag)
-{
- /* line up with the first token */
- str = (char*)first_token(str);
- if (str == NULL)
- return TRUE;
-
- do
- {
- if (compare_token(str, flag) == 0)
- {
- str = (char*)next_token(str);
- if (compare_token(str, MPIU_STR_DELIM_STR) == 0)
- {
- str = (char*)next_token(str);
- if (str == NULL)
- return TRUE;
- token_hide(str);
- return TRUE;
- }
- }
- else
- {
- str = (char*)next_token(str);
- }
- } while (str);
- return FALSE;
-}
-
-/*@ MPIU_Str_get_int_arg - Extract an option from a string
-
-Input Parameters:
-+ str - Source string
-- key - key
-
-Output Parameters:
-. val_ptr - pointer to the output integer
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Notes:
- This routine searches for a "key = value" entry in a string and decodes the value
- back to an int.
-
- Module:
- Utility
- @*/
-int MPIU_Str_get_int_arg(const char *str, const char *flag, int *val_ptr)
-{
- int result;
- char int_str[12];
-
- result = MPIU_Str_get_string_arg(str, flag, int_str, 12);
- if (result == MPIU_STR_SUCCESS)
- {
- *val_ptr = atoi(int_str);
- return MPIU_STR_SUCCESS;
- }
- return result;
-}
-
-/* quoted_printf does not NULL terminate the string if maxlen is reached */
-static int quoted_printf(char *str, int maxlen, const char *val)
-{
- int count = 0;
- if (maxlen < 1)
- return 0;
- *str = MPIU_STR_QUOTE_CHAR;
- str++;
- maxlen--;
- count++;
- while (maxlen)
- {
- if (*val == '\0')
- break;
- if (*val == MPIU_STR_QUOTE_CHAR)
- {
- *str = MPIU_STR_ESCAPE_CHAR;
- str++;
- maxlen--;
- count++;
- if (maxlen == 0)
- return count;
- }
- *str = *val;
- str++;
- maxlen--;
- count++;
- val++;
- }
- if (maxlen)
- {
- *str = MPIU_STR_QUOTE_CHAR;
- str++;
- maxlen--;
- count++;
- if (maxlen == 0)
- return count;
- *str = '\0';
- }
- return count;
-}
-
-/*@ MPIU_Str_add_string - Add a string to a string
-
-Input Parameters:
-+ str_ptr - pointer to the destination string
-. maxlen_ptr - pointer to the maximum length of '*str_ptr'
-- val - string to add
-
-Output Parameters:
-+ str_ptr - The string pointer is updated to the next available location in
- the string
-- maxlen_ptr - maxlen is decremented by the amount str_ptr is incremented
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Notes:
- This routine adds a string to a string in such a way that
- MPIU_Str_get_string can
- retreive the same string back. It takes into account spaces and quote
- characters.
- The string pointer is updated to the start of the next string in the
- string and maxlen is updated accordingly.
-
- Module:
- Utility
- @*/
-int MPIU_Str_add_string(char **str_ptr, int *maxlen_ptr, const char *val)
-{
- int num_chars;
- char *str;
- int maxlen;
-
- str = *str_ptr;
- maxlen = *maxlen_ptr;
-
- if (strchr(val, MPIU_STR_SEPAR_CHAR) ||
- strchr(val, MPIU_STR_QUOTE_CHAR) ||
- strchr(val, MPIU_STR_DELIM_CHAR))
- {
- num_chars = quoted_printf(str, maxlen, val);
- if (num_chars == maxlen)
- {
- /* truncation, cleanup string */
- *str = '\0';
- return -1;
- }
- if (num_chars < maxlen - 1)
- {
- str[num_chars] = MPIU_STR_SEPAR_CHAR;
- str[num_chars+1] = '\0';
- num_chars++;
- }
- else
- {
- str[num_chars] = '\0';
- }
- }
- else
- {
- if (*val == '\0')
- {
- num_chars = MPL_snprintf(str, maxlen,
- MPIU_STR_QUOTE_STR MPIU_STR_QUOTE_STR/*"\"\""*/);
- }
- else
- {
- num_chars = MPL_snprintf(str, maxlen, "%s%c", val,
- MPIU_STR_SEPAR_CHAR);
- }
- if (num_chars == maxlen)
- {
- *str = '\0';
- return -1;
- }
- }
- *str_ptr += num_chars;
- *maxlen_ptr -= num_chars;
- return 0;
-}
-
-/*@ MPIU_Str_get_string - Get the next string from a string
-
-Input Parameters:
-+ str_ptr - pointer to the destination string
-- maxlen_ptr - pointer to the maximum length of '*str_ptr'
-
-Output Parameters:
-+ str_ptr - location of the next string
-- val - location to store the string
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Return Value:
- The return value is 0 for success, -1 for insufficient buffer space, and
- 1 for failure.
-
- Notes:
- This routine gets a string that was previously added by
- MPIU_Str_add_string.
- It takes into account spaces and quote characters. The string pointer is
- updated to the start of the next string in the string.
-
- Module:
- Utility
- @*/
-int MPIU_Str_get_string(char **str_ptr, char *val, int maxlen)
-{
- int result;
- char *str;
-
- if (str_ptr == NULL)
- {
- return -2;
- }
-
- str = *str_ptr;
-
- if (maxlen < 1)
- {
- return 0;
- }
-
- /* line up with the first token */
- str = (char*)first_token(str);
- if (str == NULL)
- {
- return 0;
- }
-
- /* copy the token */
- result = token_copy(str, val, maxlen);
- if (result == MPIU_STR_SUCCESS)
- {
- str = (char*)next_token(str);
- *str_ptr = str;
- return 0;
- }
- else if (result == MPIU_STR_TRUNCATED)
- {
- return -1;
- }
-
- /* failure */
- return -2;
-}
-
-/*@ MPIU_Str_add_string_arg - Add an option to a string with a maximum length
-
-Input Parameters:
-+ str_ptr - Pointer to the destination string
-. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
-. key - key
-- val - input string
-
-Output Parameters:
-+ str_ptr - The string pointer is updated to the next available location in
- the string
-- maxlen_ptr - maxlen is reduced by the number of characters written
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Notes:
- This routine adds a string option to a string in the form "key = value".
-
- Module:
- Utility
- @*/
-int MPIU_Str_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
- const char *val)
-{
- int num_chars;
- char **orig_str_ptr;
-
- if (maxlen_ptr == NULL)
- return MPIU_STR_FAIL;
-
- orig_str_ptr = str_ptr;
-
- if (*maxlen_ptr < 1)
- return MPIU_STR_FAIL;
-
- /* add the flag */
-/* printf("strstr flag\n"); */
- if (strstr(flag, MPIU_STR_SEPAR_STR) || strstr(flag, MPIU_STR_DELIM_STR) ||
- flag[0] == MPIU_STR_QUOTE_CHAR)
- {
- num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
- }
- else
- {
- num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
- }
- *maxlen_ptr = *maxlen_ptr - num_chars;
- if (*maxlen_ptr < 1)
- {
- MPIU_DBG_MSG_S(OTHER,VERBOSE,
- "partial argument added to string: '%s'", *str_ptr);
- **str_ptr = '\0';
- /*(*str_ptr)[num_chars-1] = '\0';*/
- return MPIU_STR_NOMEM;
- }
- *str_ptr = *str_ptr + num_chars;
-
- /* add the deliminator character */
- **str_ptr = MPIU_STR_DELIM_CHAR;
- *str_ptr = *str_ptr + 1;
- *maxlen_ptr = *maxlen_ptr - 1;
-
- /* add the value string */
-/* printf("strstr val\n"); */
- if (strstr(val, MPIU_STR_SEPAR_STR) || strstr(val, MPIU_STR_DELIM_STR) ||
- val[0] == MPIU_STR_QUOTE_CHAR)
- {
- num_chars = quoted_printf(*str_ptr, *maxlen_ptr, val);
- }
- else
- {
- if (*val == '\0')
- {
- num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr,
- MPIU_STR_QUOTE_STR MPIU_STR_QUOTE_STR/*"\"\""*/);
- }
- else
- {
- num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", val);
- }
- }
- *str_ptr = *str_ptr + num_chars;
- *maxlen_ptr = *maxlen_ptr - num_chars;
- if (*maxlen_ptr < 2)
- {
- MPIU_DBG_MSG_S(OTHER,VERBOSE,
- "partial argument added to string: '%s'", *str_ptr);
- **orig_str_ptr = '\0';
- /*
- *str_ptr = *str_ptr - 1;
- **str_ptr = '\0';
- */
- return MPIU_STR_NOMEM;
- }
-
- /* add the trailing space */
- **str_ptr = MPIU_STR_SEPAR_CHAR;
- *str_ptr = *str_ptr + 1;
- **str_ptr = '\0';
- *maxlen_ptr = *maxlen_ptr - 1;
-
- return MPIU_STR_SUCCESS;
-}
-
-/*@ MPIU_Str_add_int_arg - Add an option to a string with a maximum length
-
-Input Parameters:
-+ str_ptr - Pointer to the destination string
-. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
-. key - key
-- val - input integer
-
-Output Parameters:
-+ str_ptr - The string pointer is updated to the next available location in
- the string
-- maxlen_ptr - maxlen is reduced by the number of characters written
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Notes:
- This routine adds an integer option to a string in the form "key = value".
-
- Module:
- Utility
- @*/
-int MPIU_Str_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
- int val)
-{
- char val_str[12];
- MPL_snprintf(val_str, 12, "%d", val);
- return MPIU_Str_add_string_arg(str_ptr, maxlen_ptr, flag, val_str);
-}
-
-/*@ MPIU_Str_add_binary_arg - Add an option to a string with a maximum length
-
-Input Parameters:
-+ str_ptr - Pointer to the destination string
-. maxlen_ptr - Pointer to the maximum total length of '*str_ptr'
-. key - key
-. val - input data
-- length - length of the input data
-
-Output Parameters:
-+ str_ptr - The string pointer is updated to the next available location in
- the string
-- maxlen_ptr - maxlen is reduced by the number of characters written
-
- Return value:
- MPIU_STR_SUCCESS, MPIU_STR_NOMEM, MPIU_STR_FAIL
-
- Notes:
- This routine encodes binary data into a string option in the form
- "key = encoded_value".
-
- Module:
- Utility
- @*/
-int MPIU_Str_add_binary_arg(char **str_ptr, int *maxlen_ptr, const char *flag,
- const char *buffer, int length)
-{
- int result;
- int num_chars;
- char **orig_str_ptr;
-
- if (maxlen_ptr == NULL)
- return MPIU_STR_FAIL;
-
- orig_str_ptr = str_ptr;
-
- if (*maxlen_ptr < 1)
- return MPIU_STR_FAIL;
-
- /* add the flag */
- if (strstr(flag, MPIU_STR_SEPAR_STR) || strstr(flag, MPIU_STR_DELIM_STR) ||
- flag[0] == MPIU_STR_QUOTE_CHAR)
- {
- num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag);
- }
- else
- {
- num_chars = MPL_snprintf(*str_ptr, *maxlen_ptr, "%s", flag);
- }
- *maxlen_ptr = *maxlen_ptr - num_chars;
- if (*maxlen_ptr < 1)
- {
- MPIU_DBG_MSG_S(OTHER,VERBOSE,
- "partial argument added to string: '%s'", *str_ptr);
- **str_ptr = '\0';
- /*(*str_ptr)[num_chars-1] = '\0';*/
- return MPIU_STR_NOMEM;
- }
- *str_ptr = *str_ptr + num_chars;
-
- /* add the deliminator character */
- **str_ptr = MPIU_STR_DELIM_CHAR;
- *str_ptr = *str_ptr + 1;
- *maxlen_ptr = *maxlen_ptr - 1;
-
- /* add the value string */
- result = encode_buffer(*str_ptr, *maxlen_ptr, buffer, length, &num_chars);
- if (result != MPIU_STR_SUCCESS)
- {
- **orig_str_ptr = '\0';
- return result;
- }
- num_chars = num_chars * 2; /* the encoding function turns one source
- character into two destination characters */
- *str_ptr = *str_ptr + num_chars;
- *maxlen_ptr = *maxlen_ptr - num_chars;
- if (*maxlen_ptr < 2)
- {
- MPIU_DBG_MSG_S(OTHER,VERBOSE,
- "partial argument added to string: '%s'", *str_ptr);
- /*
- *str_ptr = *str_ptr - 1;
- **str_ptr = '\0';
- */
- **orig_str_ptr = '\0';
- return MPIU_STR_NOMEM;
- }
-
- /* add the trailing space */
- **str_ptr = MPIU_STR_SEPAR_CHAR;
- *str_ptr = *str_ptr + 1;
- **str_ptr = '\0';
- *maxlen_ptr = *maxlen_ptr - 1;
-
- return MPIU_STR_SUCCESS;
-}
-
-/*
-int test_argstrings()
-{
- char buffer[1024];
- char buffer2[1024];
- char key[100];
- char val[1024];
- int maxlen, maxlen2;
- char *iter, *iter2;
- int ibuf[3] = { 1, 2, 3 };
- int age;
-
- iter = buffer;
- maxlen = 1024;
- MPIU_Str_add_string_arg(&iter, &maxlen, "name", "David Ashton");
- MPIU_Str_add_string_arg(&iter, &maxlen, "a b", "c d");
- MPIU_Str_add_binary_arg(&iter, &maxlen, "array", ibuf, 12);
- MPIU_Str_add_string_arg(&iter, &maxlen, "=", "equals");
- MPIU_Str_add_string_arg(&iter, &maxlen, "\"help=", "=\"");
- MPIU_Str_add_int_arg(&iter, &maxlen, "age", 123);
-
- printf("encoded buffer: <%s>\n", buffer);
-
- MPIU_Str_get_string_arg(buffer, "name", val, 1024);
- printf("name = '%s'\n", val);
- MPIU_Str_get_string_arg(buffer, "a b", val, 1024);
- printf("a b = '%s'\n", val);
- MPIU_Str_get_string_arg(buffer, "=", val, 1024);
- printf("= = '%s'\n", val);
- MPIU_Str_get_string_arg(buffer, "\"help=", val, 1024);
- printf("\"help= = '%s'\n", val);
- MPIU_Str_get_int_arg(buffer, "age", &age);
- printf("age = %d\n", age);
- MPIU_Str_get_binary_arg(buffer, "array", ibuf, 12);
- printf("ibuf[0] = %d\n", ibuf[0]);
- printf("ibuf[1] = %d\n", ibuf[1]);
- printf("ibuf[2] = %d\n", ibuf[2]);
-
- iter = buffer2;
- maxlen = 1024;
- MPIU_Str_add_string_arg(&iter, &maxlen, "big arg", buffer);
- MPIU_Str_add_string(&iter, &maxlen, "Once isn't enough for me");
- MPIU_Str_add_int_arg(&iter, &maxlen, "size", 100);
- printf("doubly encoded buffer: <%s>\n", buffer2);
-
- MPIU_Str_get_string_arg(buffer2, "big arg", buffer, 1024);
- printf("big arg = '%s'\n", buffer);
- MPIU_Str_get_string_arg(buffer, "name", val, 1024);
- printf("name = '%s'\n", val);
- MPIU_Str_get_string_arg(buffer, "a b", val, 1024);
- printf("a b = '%s'\n", val);
- MPIU_Str_get_string_arg(buffer, "=", val, 1024);
- printf("= = '%s'\n", val);
- MPIU_Str_get_int_arg(buffer, "age", &age);
- printf("age = %d\n", age);
- MPIU_Str_get_binary_arg(buffer, "array", ibuf, 12);
- printf("ibuf[0] = %d\n", ibuf[0]);
- printf("ibuf[1] = %d\n", ibuf[1]);
- printf("ibuf[2] = %d\n", ibuf[2]);
-
- MPIU_Str_get_int_arg(buffer2, "size", &age);
- printf("size = %d\n", age);
- return 0;
-}
-*/
diff --git a/src/util/mem/check.c b/src/util/mem/check.c
deleted file mode 100644
index 20b89c4..0000000
--- a/src/util/mem/check.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2002 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include <stdio.h>
-
-/* This is a test program, so we allow printf */
-/* style: allow:printf:3 sig:0 */
-
-extern int MPL_snprintf( char *, size_t, const char *, ... );
-
-int main( int argc, char *argv[] )
-{
- char buf[1000];
- int n;
-
- n = MPL_snprintf( buf, 100, "This is a test\n" );
- printf( "%d:%s", n, buf );
-
- n = MPL_snprintf( buf, 100, "This is a test %d\n", 3000000 );
- printf( "%d:%s", n, buf );
-
- n = MPL_snprintf( buf, 100, "This %s %% %d\n", "is a test for ", -3000 );
- printf( "%d:%s", n, buf );
-
- return 0;
-}
diff --git a/src/util/mem/handlemem.c b/src/util/mem/handlemem.c
index 1eea3c2..2316152 100644
--- a/src/util/mem/handlemem.c
+++ b/src/util/mem/handlemem.c
@@ -34,518 +34,10 @@ cvars:
#include "mpiimpl.h"
#include <stdio.h>
-#ifdef NEEDS_PRINT_HANDLE
-static void MPIU_Print_handle( int handle );
-#endif
-
-#ifdef MPICH_DEBUG_HANDLEALLOC
-static int MPIU_CheckHandlesOnFinalize( void * );
-static const char *MPIR_ObjectName( MPIU_Object_alloc_t * );
-#endif
-
-/* This is the utility file for info that contains routines used to
- manage the arrays used to store handle objects.
-
- To use these routines, allocate the following in a utility file
- used by each object (e.g., info, datatype, comm, group, ... ).
- (The comment format // is used in this example but the usual
- C comment convention should be used of course.) The usage is described
- below.
-
- // Declarations begin here
- // Static declaration of the information about the block
- // Define the number of preallocated entries # omitted)
- define MPID_<OBJ>_PREALLOC 256
- MPIU_Object_alloc_t MPID_<obj>_mem = { 0, 0, 0, 0, MPID_<obj>,
- sizeof(MPID_<obj>), MPID_<obj>_direct,
- MPID_<OBJ>_PREALLOC, };
-
- // Preallocated objects
- MPID_<obj> MPID_<obj>_direct[MPID_<OBJ>_PREALLOC];
- static int initialized = 0;
-
- // Next available object
- static int MPID_<obj> *avail = 0;
-
- // Extension (indirect) objects
- static MPID_<obj> *(*MPID_<obj>_indirect)[] = 0;
- static int MPID_<obj>_indirect_size = 0;
- // Declarations end here
-
- These provide for lazy initialization; applications that do not need a
- particular object will not include any of the code or even reference
- the space.
-
- Note that these routines are designed for the MPI objects, and include the
- creation of a "handle" that is appropriate for the MPI object value.
-
- The following routines are provided:
- void *MPIU_Handle_direct_init( void *direct, int direct_size, int obj_size,
- int handle_type )
- Initialize the preallocated array (MPID_<obj>_direct) with
- direct_size elements each of obj_size. Returns the first available
- element (which should usually be assigned to "avail").
- handle_type is the kind of object (e.g., MPID_INFO)
-
- void *MPIU_Handle_indirect_init( void (**indirect)[], int *indirect_size,
- int indirect_num_blocks,
- int indirect_num_indices,
- int obj_size,
- int handle_type )
- Initialize the indirect array (MPID_<obj>_indirect) of size
- indirect_size, each block of which contains indirect_num_indices
- members of size obj_size. Returns the first available element, or
- NULL if no memory is available.
- Also incrementes indirect_size and assigns to indirect if it is null.
-
- The Handle_indirect routine and the data structures that it manages
- require a little more discussion.
- This routine allocates an array of pointers to a block of storage.
- The block of storage contains space for indirect_num_indices
- instances of an object of obj_size. These blocks are allocated
- as needed; the pointers to these blocks are stored in the
- indirect array. The value of indirect_size is the number of
- valid pointers in indirect. In other words, indirect[0] through
- indirect[*indirect_size-1] contain pointers to blocks of
- storage of size indirect_num_indices * obj_size. The array
- indirect has indirect_num_blocks entries, each holding a pointer.
-
- The rationale for this approach is that this approach can
- handle large amounts of memory; however, relatively little
- memory is used unless needed. The definitions in
- mpich/src/include/mpihandlemem.h define defaults for the
- indirect_num_blocks (HANDLE_NUM_BLOCKS = 512) and
- indirect_num_indices (HANDLE_NUM_INDICES = 16384) that permits
- the allocation of 8 Mi objects.
-
- int MPIU_Handle_free( void *(*indirect)[], int indirect_size )
- Frees any memory allocated for the indirect handles. Returns 0 on
- success and nonzero on failure
-
- None of these routines is thread-safe. Any routine that uses them
- must ensure that only one thread at a time may call them.
-
-*/
-
-/*
- * You can use this to allocated that necessary local structures
- */
-#define MPID_HANDLE_MEM_ALLOC(Name,NAME) \
-MPID_##Name MPID_##Name_direct[MPID_##NAME##_PREALLOC]; \
-static int initialize = 0;\
-static int MPID_##Name *avail=0;\
-static MPID_##Name *(*MPID_##Name##_indirect)[] = 0;\
-static int MPID_##Name##_indirect_size = 0;
-
-/* This routine is called by finalize when MPI exits */
-static int MPIU_Handle_free( void *((*indirect)[]), int indirect_size )
-{
- int i;
-
- /* Remove any allocated storage */
- for (i=0; i<indirect_size; i++) {
- MPIU_Free( (*indirect)[i] );
- }
- if (indirect) {
- MPIU_Free( indirect );
- }
- /* This does *not* remove any objects that the user created
- and then did not destroy */
- return 0;
-}
-
-#if defined(MPL_VG_AVAILABLE)
-#define MPIU_HANDLE_VG_LABEL(objptr_, objsize_, handle_type_, is_direct_) \
- do { \
- if (MPL_VG_RUNNING_ON_VALGRIND()) { \
- char desc_str[256]; \
- MPL_snprintf(desc_str, sizeof(desc_str)-1, \
- "[MPICH handle: objptr=%p handle=0x%x %s/%s]", \
- (objptr_), (objptr_)->handle, \
- ((is_direct_) ? "DIRECT" : "INDIRECT"), \
- MPIU_Handle_get_kind_str(handle_type_)); \
- /* we don't keep track of the block descriptor because the handle */ \
- /* values never change once allocated */ \
- MPL_VG_CREATE_BLOCK((objptr_), (objsize_), desc_str); \
- } \
- } while (0)
-#else
-#define MPIU_HANDLE_VG_LABEL(objptr_, objsize_, handle_type_, is_direct_) do{}while(0)
-#endif
-
-void *MPIU_Handle_direct_init(void *direct,
- int direct_size,
- int obj_size,
- int handle_type)
-{
- int i;
- MPIU_Handle_common *hptr=0;
- char *ptr = (char *)direct;
-
- for (i=0; i<direct_size; i++) {
- /* printf( "Adding %p in %d\n", ptr, handle_type ); */
- /* First cast to (void*) to avoid false warnings about alignment
- (consider that a requirement of the input parameters) */
- hptr = (MPIU_Handle_common *)(void *)ptr;
- ptr = ptr + obj_size;
- hptr->next = ptr;
- hptr->handle = ((unsigned)HANDLE_KIND_DIRECT << HANDLE_KIND_SHIFT) |
- (handle_type << HANDLE_MPI_KIND_SHIFT) | i;
-
- MPIU_HANDLE_VG_LABEL(hptr, obj_size, handle_type, 1);
- }
-
- if (hptr)
- hptr->next = 0;
- return direct;
-}
-
-/* indirect is really a pointer to a pointer to an array of pointers */
-static void *MPIU_Handle_indirect_init( void *(**indirect)[],
- int *indirect_size,
- int indirect_num_blocks,
- int indirect_num_indices,
- int obj_size,
- int handle_type )
-{
- void *block_ptr;
- MPIU_Handle_common *hptr=0;
- char *ptr;
- int i;
-
- /* Must create new storage for dynamically allocated objects */
- /* Create the table */
- if (!*indirect) {
- /* printf( "Creating indirect table with %d pointers to blocks in it\n", indirect_num_blocks ); */
- *indirect = (void *)MPIU_Calloc(indirect_num_blocks, sizeof(void *));
- if (!*indirect) {
- return 0;
- }
- *indirect_size = 0;
- }
-
- /* See if we can allocate another block */
- if (*indirect_size >= indirect_num_blocks) {
- /* printf("Out of space in indirect table\n"); */
- return 0;
- }
-
- /* Create the next block */
- /* printf("Creating indirect block number %d with %d objects in it\n", *indirect_size, indirect_num_indices); */
- block_ptr = (void *)MPIU_Calloc( indirect_num_indices, obj_size );
- if (!block_ptr) {
- return 0;
- }
- ptr = (char *)block_ptr;
- for (i=0; i<indirect_num_indices; i++) {
- /* Cast to (void*) to avoid false warning about alignment */
- hptr = (MPIU_Handle_common *)(void*)ptr;
- ptr = ptr + obj_size;
- hptr->next = ptr;
- hptr->handle = ((unsigned)HANDLE_KIND_INDIRECT << HANDLE_KIND_SHIFT) |
- (handle_type << HANDLE_MPI_KIND_SHIFT) |
- (*indirect_size << HANDLE_INDIRECT_SHIFT) | i;
- /* printf("handle=%#x handle_type=%x *indirect_size=%d i=%d\n", hptr->handle, handle_type, *indirect_size, i); */
-
- MPIU_HANDLE_VG_LABEL(hptr, obj_size, handle_type, 0);
- }
- hptr->next = 0;
- /* We're here because avail is null, so there is no need to set
- the last block ptr to avail */
- /* printf( "loc of update is %x\n", &(**indirect)[*indirect_size] ); */
- (**indirect)[*indirect_size] = block_ptr;
- *indirect_size = *indirect_size + 1;
- return block_ptr;
-}
-
-/*
- Create and return a pointer to an info object. Returns null if there is
- an error such as out-of-memory. Does not allocate space for the
- key or value.
-
- */
-
-static int MPIU_Handle_finalize( void *objmem_ptr )
-{
- MPIU_Object_alloc_t *objmem = (MPIU_Object_alloc_t *)objmem_ptr;
-
- (void)MPIU_Handle_free( objmem->indirect, objmem->indirect_size );
- /* This does *not* remove any Info objects that the user created
- and then did not destroy */
-
- /* at this point we are done with the memory pool, inform valgrind */
- MPL_VG_DESTROY_MEMPOOL(objmem_ptr);
-
- return 0;
-}
-
-/* FIXME: The alloc_complete routine should be removed.
- It is used only in typeutil.c (in MPIR_Datatype_init, which is only
- executed from within the MPI_Init/MPI_Init_thread startup and hence is
- guaranteed to be single threaded). When used by the obj_alloc, it
- adds unnecessary overhead, particularly when MPI is single threaded */
-
-void MPIU_Handle_obj_alloc_complete(MPIU_Object_alloc_t *objmem,
- int initialized)
-{
- if (initialized) {
- /* obj_alloc initialized region during this allocation;
- * perform any ancillary operations associated with
- * initialization prior to releasing control over region.
- */
-
- /* Tell finalize to free up any memory that we allocate.
- * The 0 makes this the lowest priority callback, so
- * that other callbacks will finish before this one is invoked.
- */
- MPIR_Add_finalize(MPIU_Handle_finalize, objmem, 0);
- }
-}
-
-/*+
- MPIU_Handle_obj_alloc - Create an object using the handle allocator
-
-Input Parameters:
-. objmem - Pointer to object memory block.
-
- Return Value:
- Pointer to new object. Null if no more objects are available or can
- be allocated.
-
- Notes:
- In addition to returning a pointer to a new object, this routine may
- allocate additional space for more objects.
-
- This routine is thread-safe.
-
- This routine is performance-critical (it may be used to allocate
- MPI_Requests) and should not call any other routines in the common
- case.
-
- Threading: The 'MPID_THREAD_CS_ENTER/EXIT(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX)' enables both
- finer-grain
- locking with a single global mutex and with a mutex specific for handles.
-
- +*/
-#undef FUNCNAME
-#define FUNCNAME MPIU_Handle_obj_alloc
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-void *MPIU_Handle_obj_alloc(MPIU_Object_alloc_t *objmem)
-{
- void *ret;
- MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
- ret = MPIU_Handle_obj_alloc_unsafe(objmem);
- MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
- return ret;
-}
-
-#undef FUNCNAME
-#define FUNCNAME MPIU_Handle_obj_alloc_unsafe
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-void *MPIU_Handle_obj_alloc_unsafe(MPIU_Object_alloc_t *objmem)
-{
- MPIU_Handle_common *ptr;
-
- if (objmem->avail) {
- ptr = objmem->avail;
- objmem->avail = objmem->avail->next;
- /* We do not clear ptr->next as we set it to an invalid pattern
- when doing memory debugging and we don't need to set it
- for the production/default case */
- /* ptr points to object to allocate */
- }
- else {
- int objsize, objkind;
- int performed_initialize = 0;
-
- objsize = objmem->size;
- objkind = objmem->kind;
-
- if (!objmem->initialized) {
- performed_initialize = 1;
-
- MPL_VG_CREATE_MEMPOOL(objmem, 0/*rzB*/, 0/*is_zeroed*/);
-
- /* Setup the first block. This is done here so that short MPI
- jobs do not need to include any of the Info code if no
- Info-using routines are used */
- objmem->initialized = 1;
- ptr = MPIU_Handle_direct_init(objmem->direct,
- objmem->direct_size,
- objsize,
- objkind);
- if (ptr) {
- objmem->avail = ptr->next;
- }
-
-#ifdef MPICH_DEBUG_HANDLEALLOC
- /* The priority of these callbacks must be greater than
- the priority of the callback that frees the objmem direct and
- indirect storage. */
- MPIR_Add_finalize(MPIU_CheckHandlesOnFinalize, objmem, MPIR_FINALIZE_CALLBACK_HANDLE_CHECK_PRIO);
-#endif
- /* ptr points to object to allocate */
- }
- else {
- /* no space left in direct block; setup the indirect block. */
-
- ptr = MPIU_Handle_indirect_init(&objmem->indirect,
- &objmem->indirect_size,
- HANDLE_NUM_BLOCKS,
- HANDLE_NUM_INDICES,
- objsize,
- objkind);
- if (ptr) {
- objmem->avail = ptr->next;
- }
-
- /* ptr points to object to allocate */
- }
- MPIU_Handle_obj_alloc_complete(objmem, performed_initialize);
- }
-
- if (ptr) {
-#ifdef USE_MEMORY_TRACING
- /* We set the object to an invalid pattern. This is similar to
- what is done by MPIU_trmalloc by default (except that trmalloc uses
- 0xda as the byte in the memset)
- */
- /* if the object was previously freed then MEMPOOL_FREE marked it as
- * NOACCESS, so we need to make it addressable again before memsetting
- * it */
- /* save and restore the handle -- it's a more robust method than
- * encoding the layout of the structure */
- int tmp_handle;
- MPL_VG_MAKE_MEM_DEFINED(ptr, objmem->size);
- tmp_handle = ptr->handle ;
- memset(ptr, 0xef, objmem->size);
- ptr->handle = tmp_handle;
-#endif /* USE_MEMORY_TRACING */
- /* mark the mem as addressable yet undefined if valgrind is available */
- MPL_VG_MEMPOOL_ALLOC(objmem, ptr, objmem->size);
- /* the handle value is always valid at return from this function */
- MPL_VG_MAKE_MEM_DEFINED(&ptr->handle, sizeof(ptr->handle));
-
- /* necessary to prevent annotations from being misinterpreted. HB/HA
- * arcs will be drawn between a req object in across a free/alloc
- * boundary otherwise */
- /* NOTE: basically causes DRD's --trace-addr option to be useless for
- * handlemem-allocated objects. Consider one of the trace-inducing
- * annotations instead. */
- MPL_VG_ANNOTATE_NEW_MEMORY(ptr, objmem->size);
-
- MPIU_DBG_MSG_FMT(HANDLE,TYPICAL,(MPIU_DBG_FDEST,
- "Allocating object ptr %p (handle val 0x%08x)",
- ptr, ptr->handle));
- }
-
- return ptr;
-}
-
-/*+
- MPIU_Handle_obj_free - Free an object allocated with MPID_Handle_obj_new
-
-Input Parameters:
-+ objmem - Pointer to object block
-- object - Object to delete
-
- Notes:
- This routine assumes that only a single thread calls it at a time; this
- is true for the SINGLE_CS approach to thread safety
- +*/
-void MPIU_Handle_obj_free( MPIU_Object_alloc_t *objmem, void *object )
-{
- MPIU_Handle_common *obj = (MPIU_Handle_common *)object;
-
- MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
-
- MPIU_DBG_MSG_FMT(HANDLE,TYPICAL,(MPIU_DBG_FDEST,
- "Freeing object ptr %p (0x%08x kind=%s) refcount=%d",
- (obj),
- (obj)->handle,
- MPIU_Handle_get_kind_str(HANDLE_GET_MPI_KIND((obj)->handle)),
- MPIU_Object_get_ref(obj)));
-
-#ifdef USE_MEMORY_TRACING
- {
- /* set the object memory to an invalid value (0xec), except for the handle field */
- int tmp_handle;
- tmp_handle = obj->handle;
- memset(obj, 0xec, objmem->size);
- obj->handle = tmp_handle;
- }
-#endif
-
- if (MPL_VG_RUNNING_ON_VALGRIND()) {
- int tmp_handle = obj->handle;
-
- MPL_VG_MEMPOOL_FREE(objmem, obj);
- /* MEMPOOL_FREE marks the object NOACCESS, so we have to make the
- * MPIU_Handle_common area that is used for internal book keeping
- * addressable again. */
- MPL_VG_MAKE_MEM_DEFINED(&obj->handle, sizeof(obj->handle));
- MPL_VG_MAKE_MEM_UNDEFINED(&obj->next, sizeof(obj->next));
-
- /* tt#1626: MEMPOOL_FREE also uses the value of `--free-fill=0x..` to
- * memset the object, so we need to restore the handle */
- obj->handle = tmp_handle;
-
- /* Necessary to prevent annotations from being misinterpreted. HB/HA arcs
- * will be drawn between a req object in across a free/alloc boundary
- * otherwise. Specifically, stores to obj->next when obj is actually an
- * MPID_Request falsely look like a race to DRD and Helgrind because of the
- * other lockfree synchronization used with requests. */
- MPL_VG_ANNOTATE_NEW_MEMORY(obj, objmem->size);
- }
-
- obj->next = objmem->avail;
- objmem->avail = obj;
- MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_HANDLE_MUTEX);
-}
-
-/*
- * Get an pointer to dynamically allocated storage for objects.
- */
-void *MPIU_Handle_get_ptr_indirect( int handle, MPIU_Object_alloc_t *objmem )
-{
- int block_num, index_num;
-
- /* Check for a valid handle type */
- if (HANDLE_GET_MPI_KIND(handle) != objmem->kind) {
- return 0;
- }
-
- /* Find the block */
- block_num = HANDLE_BLOCK(handle);
- if (block_num >= objmem->indirect_size) {
- return 0;
- }
-
- /* Find the entry */
- index_num = HANDLE_BLOCK_INDEX(handle);
- /* If we could declare the blocks to a known size object, we
- could do something like
- return &( (MPID_Info**)*MPIU_Info_mem.indirect)[block_num][index_num];
- since we cannot, we do the calculation by hand.
- */
- /* Get the pointer to the block of addresses. This is an array of
- void * */
- {
- char *block_ptr;
- /* Get the pointer to the block */
- block_ptr = (char *)(*(objmem->indirect))[block_num];
- /* Get the item */
- block_ptr += index_num * objmem->size;
- return block_ptr;
- }
-}
-
/* returns the name of the handle kind for debugging/logging purposes */
-const char *MPIU_Handle_get_kind_str(int kind)
+const char *MPIR_Handle_get_kind_str(int kind)
{
-#define mpiu_name_case_(name_) case MPID_##name_: return (#name_)
+#define mpiu_name_case_(name_) case MPIR_##name_: return (#name_)
switch (kind) {
mpiu_name_case_(COMM);
mpiu_name_case_(GROUP);
@@ -566,176 +58,3 @@ const char *MPIU_Handle_get_kind_str(int kind)
}
#undef mpiu_name_case_
}
-
-/* style: allow:printf:5 sig:0 */
-#ifdef MPICH_DEBUG_HANDLEALLOC
-/* The following is a handler that may be added to finalize to test whether
- handles remain allocated, including those from the direct blocks.
-
- When adding memory checking, this routine should be invoked as
-
- MPIR_Add_finalize(MPIU_CheckHandlesOnFinalize, objmem, 1);
-
- as part of the object intialization.
-
- The algorithm follows the following approach:
-
- The memory allocation approach manages a list of available objects.
- These objects are allocated from several places:
- "direct" - this is a block of preallocated space
- "indirect" - this is a block of blocks that are allocated as necessary.
- E.g., objmem_ptr->indirect[0..objmem_ptr->indirect_size-1]
- are pointers (or null) to a block of memory. This block is
- then divided into objects that are added to the avail list.
-
- To provide information on the handles that are still in use, we must
- "repatriate" all of the free objects, at least virtually. To give
- the best information, for each free item, we determine to which block
- it belongs.
-*/
-static int MPIU_CheckHandlesOnFinalize( void *objmem_ptr )
-{
- MPIU_Object_alloc_t *objmem = (MPIU_Object_alloc_t *)objmem_ptr;
- int i;
- MPIU_Handle_common *ptr;
- int leaked_handles = FALSE;
- int directSize = objmem->direct_size;
- char *direct = (char *)objmem->direct;
- char *directEnd = (char *)direct + directSize * objmem->size - 1;
- int nDirect = 0;
- int *nIndirect = 0;
-
- /* Return immediately if this object has not allocated any space */
- if (!objmem->initialized) {
- return 0;
- }
-
- if (objmem->indirect_size > 0) {
- nIndirect = (int *)MPIU_Calloc( objmem->indirect_size, sizeof(int) );
- }
- /* Count the number of items in the avail list. These include
- all objects, whether direct or indirect allocation */
- ptr = objmem->avail;
- while (ptr) {
- /* printf( "Looking at %p\n", ptr ); */
- /* Find where this object belongs */
- if ((char *)ptr >= direct && (char *)ptr < directEnd) {
- nDirect++;
- }
- else {
- void **indirect = (void **)objmem->indirect;
- for (i=0; i<objmem->indirect_size; i++) {
- char *start = indirect[i];
- char *end = start + HANDLE_NUM_INDICES * objmem->size;
- if ((char *)ptr >= start && (char *)ptr < end) {
- nIndirect[i]++;
- break;
- }
- }
- if (i == objmem->indirect_size) {
- /* Error - could not find the owning memory */
- /* Temp */
- printf( "Could not place object at %p in handle memory for type %s\n", ptr, MPIR_ObjectName( objmem ) );
- printf( "direct block is [%p,%p]\n", direct, directEnd );
- if (objmem->indirect_size) {
- printf( "indirect block is [%p,%p]\n", indirect[0],
- (char *)indirect[0] + HANDLE_NUM_INDICES *
- objmem->size );
- }
- }
- }
- ptr = ptr->next;
- }
-
- if (0) {
- /* Produce a report */
- printf( "Object handles:\n\ttype \t%s\n\tsize \t%d\n\tdirect size\t%d\n\
-\tindirect size\t%d\n",
- MPIR_ObjectName( objmem ), objmem->size, objmem->direct_size,
- objmem->indirect_size );
- }
- if (nDirect != directSize) {
- leaked_handles = TRUE;
- printf( "In direct memory block for handle type %s, %d handles are still allocated\n", MPIR_ObjectName( objmem ), directSize - nDirect );
- }
- for (i=0; i<objmem->indirect_size; i++) {
- if (nIndirect[i] != HANDLE_NUM_INDICES) {
- leaked_handles = TRUE;
- printf( "In indirect memory block %d for handle type %s, %d handles are still allocated\n", i, MPIR_ObjectName( objmem ), HANDLE_NUM_INDICES - nIndirect[i] );
- }
- }
-
- if (nIndirect) {
- MPIU_Free( nIndirect );
- }
-
- if (leaked_handles && MPIR_CVAR_ABORT_ON_LEAKED_HANDLES) {
- /* comm_world has been (or should have been) destroyed by this point,
- * pass comm=NULL */
- MPID_Abort(NULL, MPI_ERR_OTHER, 1, "ERROR: leaked handles detected, aborting");
- MPIU_Assert(0);
- }
-
- return 0;
-}
-
-static const char *MPIR_ObjectName( MPIU_Object_alloc_t *objmem )
-{
- return MPIU_Handle_get_kind_str(objmem->kind);
-}
-#endif
-
-#ifdef NEEDS_PRINT_HANDLE
-/* For debugging */
-static void MPIU_Print_handle( int handle )
-{
- int type, kind, block, index;
-
- type = HANDLE_GET_MPI_KIND(handle);
- kind = HANDLE_GET_KIND(handle);
- switch (type) {
- case HANDLE_KIND_INVALID:
- printf( "invalid" );
- break;
- case HANDLE_KIND_BUILTIN:
- printf( "builtin" );
- break;
- case HANDLE_KIND_DIRECT:
- index = HANDLE_INDEX(handle);
- printf( "direct: %d", index );
- break;
- case HANDLE_KIND_INDIRECT:
- block = HANDLE_BLOCK(handle);
- index = HANDLE_BLOCK_INDEX(handle);
- printf( "indirect: block %d index %d", block, index );
- break;
- }
-}
-#endif
-
-/*
- * Count the number of objects allocated and the number of objects
- * on the available free list. Return the difference.
- */
-int MPIU_Handle_obj_outstanding(const MPIU_Object_alloc_t *objmem)
-{
- int allocated = 0;
- int available = 0;
- MPIU_Handle_common *ptr;
-
- ptr = objmem->avail;
- while(ptr)
- {
- available++;
- ptr = ptr->next;
- }
-
- if(objmem->initialized)
- {
- allocated = objmem->direct_size +
- objmem->indirect_size * HANDLE_NUM_INDICES;
- }
-
- return allocated - available;
-}
-
diff --git a/src/util/mem/mpiu_strerror.h b/src/util/mem/mpiu_strerror.h
deleted file mode 100644
index 700bf30..0000000
--- a/src/util/mem/mpiu_strerror.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#if !defined(MPIU_STRERROR_H_INCLUDED)
-#define MPIU_STRERROR_H_INCLUDED
-
-/*
- * MPIU_Sterror()
- *
- * Thread safe implementation of strerror(), whenever possible. */
-const char *MPIU_Strerror(int errnum);
-
-#endif /* !defined(MPIU_STRERROR_H_INCLUDED) */
diff --git a/src/util/mem/safestr.c b/src/util/mem/safestr.c
deleted file mode 100644
index 000ee3b..0000000
--- a/src/util/mem/safestr.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpichconf.h"
-#include "mpimem.h"
-
-/* style: allow:sprintf:1 sig:0 */
-
-/*
- * This file contains "safe" versions of the various string and printf
- * operations.
- */
-
-/*
- * MPIU_Strncpy - Copy at most n characters. Stop once a null is reached.
- *
- * This is different from strncpy, which null pads so that exactly
- * n characters are copied. The strncpy behavior is correct for many
- * applications because it guarantees that the string has no uninitialized
- * data.
- *
- * If n characters are copied without reaching a null, return an error.
- * Otherwise, return 0.
- *
- * Question: should we provide a way to request the length of the string,
- * since we know it?
- */
-/*@ MPIU_Strncpy - Copy a string with a maximum length
-
-Input Parameters:
-+ instr - String to copy
-- maxlen - Maximum total length of 'outstr'
-
-Output Parameters:
-. outstr - String to copy into
-
- Notes:
- This routine is the routine that you wish 'strncpy' was. In copying
- 'instr' to 'outstr', it stops when either the end of 'outstr' (the
- null character) is seen or the maximum length 'maxlen' is reached.
- Unlike 'strncpy', it does not add enough nulls to 'outstr' after
- copying 'instr' in order to move precisely 'maxlen' characters.
- Thus, this routine may be used anywhere 'strcpy' is used, without any
- performance cost related to large values of 'maxlen'.
-
- If there is insufficient space in the destination, the destination is
- still null-terminated, to avoid potential failures in routines that neglect
- to check the error code return from this routine.
-
- Module:
- Utility
- @*/
-int MPIU_Strncpy( char *dest, const char *src, size_t n )
-{
- char * restrict d_ptr = dest;
- const char * restrict s_ptr = src;
- register int i;
-
- if (n == 0) return 0;
-
- i = (int)n;
- while (*s_ptr && i-- > 0) {
- *d_ptr++ = *s_ptr++;
- }
-
- if (i > 0) {
- *d_ptr = 0;
- return 0;
- }
- else {
- /* Force a null at the end of the string (gives better safety
- in case the user fails to check the error code) */
- dest[n-1] = 0;
- /* We may want to force an error message here, at least in the
- debugging version */
- /*printf( "failure in copying %s with length %d\n", src, n ); */
- return 1;
- }
-}
-
-/* Append src to dest, but only allow dest to contain n characters (including
- any null, which is always added to the end of the line */
-/*@ MPIU_Strnapp - Append to a string with a maximum length
-
-Input Parameters:
-+ instr - String to copy
-- maxlen - Maximum total length of 'outstr'
-
-Output Parameters:
-. outstr - String to copy into
-
- Notes:
- This routine is similar to 'strncat' except that the 'maxlen' argument
- is the maximum total length of 'outstr', rather than the maximum
- number of characters to move from 'instr'. Thus, this routine is
- easier to use when the declared size of 'instr' is known.
-
- Module:
- Utility
- @*/
-int MPIU_Strnapp( char *dest, const char *src, size_t n )
-{
- char * restrict d_ptr = dest;
- const char * restrict s_ptr = src;
- register int i;
-
- /* Get to the end of dest */
- i = (int)n;
- while (i-- > 0 && *d_ptr) d_ptr++;
- if (i <= 0) return 1;
-
- /* Append. d_ptr points at first null and i is remaining space. */
- while (*s_ptr && i-- > 0) {
- *d_ptr++ = *s_ptr++;
- }
-
- /* We allow i >= (not just >) here because the first while decrements
- i by one more than there are characters, leaving room for the null */
- if (i >= 0) {
- *d_ptr = 0;
- return 0;
- }
- else {
- /* Force the null at the end */
- *--d_ptr = 0;
-
- /* We may want to force an error message here, at least in the
- debugging version */
- return 1;
- }
-}
-
-#ifndef HAVE_STRDUP
-#ifdef MPIU_Strdup
-#undef MPIU_Strdup
-#endif
-/*@
- MPIU_Strdup - Duplicate a string
-
- Synopsis:
-.vb
- char *MPIU_Strdup( const char *str )
-.ve
-
-Input Parameters:
-. str - null-terminated string to duplicate
-
- Return value:
- A pointer to a copy of the string, including the terminating null. A
- null pointer is returned on error, such as out-of-memory.
-
- Notes:
- Like 'MPIU_Malloc' and 'MPIU_Free', this will often be implemented as a
- macro but may use 'MPIU_trstrdup' to provide a tracing version.
-
- Module:
- Utility
- @*/
-char *MPIU_Strdup( const char *str )
-{
- char * restrict p = (char *)MPIU_Malloc( strlen(str) + 1 );
- const char * restrict in_p = str;
- char *save_p;
-
- save_p = p;
- if (p) {
- while (*in_p) {
- *p++ = *in_p++;
- }
- *p = 0;
- }
- return save_p;
-}
-#endif
-
-/* MPIU_Basename(path, basename)
- This function finds the basename in a path (ala "man 1 basename").
- *basename will point to an element in path.
- More formally: This function sets basename to the character just after the last '/' in path.
-*/
-void MPIU_Basename(char *path, char **basename)
-{
- char *c;
-
- c = *basename = path;
- while (*c)
- {
- if (*c == '/')
- *basename = c+1;
- ++c;
- }
-}
diff --git a/src/util/mem/strerror.c b/src/util/mem/strerror.c
index 243b406..ca3bb29 100644
--- a/src/util/mem/strerror.c
+++ b/src/util/mem/strerror.c
@@ -4,9 +4,6 @@
* See COPYRIGHT in top-level directory.
*/
-/* This would live in safestr.c, but it requires thread-private storage support
- * from mpiimpl.h and friends. safestr.c is meant to be able to be used in
- * different software packages, perhaps someday by moving it to MPL. */
#include "mpiimpl.h"
#if defined(HAVE_STRERROR_R) && defined(NEEDS_STRERROR_R_DECL)
@@ -18,21 +15,25 @@ int strerror_r(int errnum, char *strerrbuf, size_t buflen);
#endif
/* ideally, provides a thread-safe version of strerror */
-const char *MPIU_Strerror(int errnum)
+const char *MPIR_Strerror(int errnum)
{
#if defined(HAVE_STRERROR_R)
char *buf;
- MPID_THREADPRIV_DECL;
- MPID_THREADPRIV_GET;
- buf = MPID_THREADPRIV_FIELD(strerrbuf);
+ MPIR_Per_thread_t *per_thread = NULL;
+ int err = 0;
+
+ MPID_THREADPRIV_KEY_GET_ADDR(MPIR_ThreadInfo.isThreaded, MPIR_Per_thread_key,
+ MPIR_Per_thread, per_thread, &err);
+ MPIR_Assert(err == 0);
+ buf = per_thread->strerrbuf;
# if defined(STRERROR_R_CHAR_P)
/* strerror_r returns char ptr (old GNU-flavor). Static strings for known
* errnums are in returned buf, unknown errnums put a message in buf and
* return buf */
- buf = strerror_r(errnum, buf, MPIU_STRERROR_BUF_SIZE);
+ buf = strerror_r(errnum, buf, MPIR_STRERROR_BUF_SIZE);
# else
/* strerror_r returns an int */
- strerror_r(errnum, buf, MPIU_STRERROR_BUF_SIZE);
+ strerror_r(errnum, buf, MPIR_STRERROR_BUF_SIZE);
# endif
return buf;
diff --git a/src/util/mem/trmem.c b/src/util/mem/trmem.c
deleted file mode 100644
index 73549ad..0000000
--- a/src/util/mem/trmem.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2008 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-
-/* Various helper functions add thread safety to the MPL_tr* functions. These
- * have to be functions because we cannot portably wrap the calls as macros and
- * still use real (non-out-argument) return values. */
-
-void MPIU_trinit(int rank)
-{
- MPL_trinit(rank);
-}
-
-void MPIU_trdump(FILE *fp, int minid)
-{
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- MPL_trdump(fp, minid);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
-}
-
-void *MPIU_trmalloc(size_t a, int lineno, const char fname[])
-{
- void *retval;
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- retval = MPL_trmalloc(a, lineno, fname);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- return retval;
-}
-
-void MPIU_trfree(void *a_ptr, int line, const char fname[])
-{
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- MPL_trfree(a_ptr, line, fname);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
-}
-
-int MPIU_trvalid(const char str[])
-{
- int retval;
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- retval = MPL_trvalid(str);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- return retval;
-}
-
-void MPIU_trspace(size_t *space, size_t *fr)
-{
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- MPL_trspace(space, fr);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
-}
-
-void MPIU_trid(int id)
-{
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- MPL_trid(id);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
-}
-
-void MPIU_trlevel(int level)
-{
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- MPL_trlevel(level);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
-}
-
-void MPIU_trDebugLevel(int level)
-{
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- MPL_trDebugLevel(level);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
-}
-
-void *MPIU_trcalloc(size_t nelem, size_t elsize, int lineno, const char fname[])
-{
- void *retval;
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- retval = MPL_trcalloc(nelem, elsize, lineno, fname);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- return retval;
-}
-
-void *MPIU_trrealloc(void *p, size_t size, int lineno, const char fname[])
-{
- void *retval;
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- retval = MPL_trrealloc(p, size, lineno, fname);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- return retval;
-}
-
-void *MPIU_trstrdup(const char *str, int lineno, const char fname[])
-{
- void *retval;
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- retval = MPL_trstrdup(str, lineno, fname);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- return retval;
-}
-
-void MPIU_TrSetMaxMem(size_t size)
-{
- MPID_THREAD_CS_ENTER(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
- MPL_TrSetMaxMem(size);
- MPID_THREAD_CS_EXIT(ALLGRAN, MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX);
-}
-
diff --git a/src/util/nodemap/.state-cache b/src/util/nodemap/.state-cache
new file mode 100644
index 0000000..3904698
--- /dev/null
+++ b/src/util/nodemap/.state-cache
@@ -0,0 +1,7 @@
+<dir>
+<file name="build_nodemap.h" info="1478973152"/>
+</dir>
+<data>
+<fileinfo name="build_nodemap.h">
+</fileinfo>
+</data>
diff --git a/src/util/nodemap/Makefile.mk b/src/util/nodemap/Makefile.mk
new file mode 100644
index 0000000..e7756df
--- /dev/null
+++ b/src/util/nodemap/Makefile.mk
@@ -0,0 +1,12 @@
+## -*- Mode: Makefile; -*-
+## vim: set ft=automake :
+##
+## (C) 2016 by Argonne National Laboratory.
+## See COPYRIGHT in top-level directory.
+##
+
+## FIXME check that this is the right way to do VPATH
+AM_CPPFLAGS += -I$(top_srcdir)/src/util/nodemap
+
+noinst_HEADERS += \
+ src/util/nodemap/build_nodemap.h
diff --git a/src/util/nodemap/build_nodemap.h b/src/util/nodemap/build_nodemap.h
new file mode 100644
index 0000000..212ac74
--- /dev/null
+++ b/src/util/nodemap/build_nodemap.h
@@ -0,0 +1,521 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#ifndef BUILD_NODEMAP_H_INCLUDED
+#define BUILD_NODEMAP_H_INCLUDED
+
+#include "mpl.h"
+
+/*
+=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
+
+categories:
+ - name : NODEMAP
+ description : cvars that control behavior of nodemap
+
+cvars:
+ - name : MPIR_CVAR_NOLOCAL
+ category : NODEMAP
+ alt-env : MPIR_CVAR_NO_LOCAL
+ type : boolean
+ default : false
+ class : none
+ verbosity : MPI_T_VERBOSITY_USER_BASIC
+ scope : MPI_T_SCOPE_ALL_EQ
+ description : >-
+ If true, force all processes to operate as though all processes
+ are located on another node. For example, this disables shared
+ memory communication hierarchical collectives.
+
+ - name : MPIR_CVAR_ODD_EVEN_CLIQUES
+ category : NODEMAP
+ alt-env : MPIR_CVAR_EVEN_ODD_CLIQUES
+ type : boolean
+ default : false
+ class : none
+ verbosity : MPI_T_VERBOSITY_USER_BASIC
+ scope : MPI_T_SCOPE_ALL_EQ
+ description : >-
+ If true, odd procs on a node are seen as local to each other, and even
+ procs on a node are seen as local to each other. Used for debugging on
+ a single machine.
+
+=== END_MPI_T_CVAR_INFO_BLOCK ===
+*/
+
+#if !defined(USE_PMI2_API)
+/* this function is not used in pmi2 */
+#undef FUNCNAME
+#define FUNCNAME MPIR_NODEMAP_publish_node_id
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIR_NODEMAP_publish_node_id(int sz, int myrank)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int pmi_errno;
+ int ret;
+ char *key;
+ int key_max_sz;
+ char *kvs_name;
+ char hostname[MAX_HOSTNAME_LEN];
+ MPIR_CHKLMEM_DECL(2);
+
+ /* set hostname */
+
+ ret = gethostname(hostname, MAX_HOSTNAME_LEN);
+ MPIR_ERR_CHKANDJUMP2(ret == -1, mpi_errno, MPI_ERR_OTHER, "**sock_gethost", "**sock_gethost %s %d", MPIR_Strerror(errno), errno);
+ hostname[MAX_HOSTNAME_LEN-1] = '\0';
+
+ /* Allocate space for pmi key */
+ pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
+
+ MPIR_CHKLMEM_MALLOC(key, char *, key_max_sz, mpi_errno, "key");
+
+ MPIR_CHKLMEM_MALLOC(kvs_name, char *, 256, mpi_errno, "kvs_name");
+ pmi_errno = PMI_KVS_Get_my_name(kvs_name, 256);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
+ /* Put my hostname id */
+ if (sz > 1)
+ {
+ memset(key, 0, key_max_sz);
+ MPL_snprintf(key, key_max_sz, "hostname[%d]", myrank);
+
+ pmi_errno = PMI_KVS_Put(kvs_name, key, hostname);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_put", "**pmi_kvs_put %d", pmi_errno);
+
+ pmi_errno = PMI_KVS_Commit(kvs_name);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_commit", "**pmi_kvs_commit %d", pmi_errno);
+
+ pmi_errno = PMI_Barrier();
+ MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", pmi_errno);
+ }
+
+fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+#endif
+
+
+#define MPIR_NODEMAP_PARSE_ERROR() MPIR_ERR_INTERNALANDJUMP(mpi_errno, "parse error")
+/* advance _c until we find a non whitespace character */
+#define MPIR_NODEMAP_SKIP_SPACE(_c) while (isspace(*(_c))) ++(_c)
+/* return true iff _c points to a character valid as an indentifier, i.e., [-_a-zA-Z0-9] */
+#define MPIR_NODEMAP_ISIDENT(_c) (isalnum(_c) || (_c) == '-' || (_c) == '_')
+
+/* give an error iff *_c != _e */
+#define MPIR_NODEMAP_EXPECT_C(_c, _e) do { if (*(_c) != _e) MPIR_NODEMAP_PARSE_ERROR(); } while (0)
+#define MPIR_NODEMAP_EXPECT_AND_SKIP_C(_c, _e) do { MPIR_NODEMAP_EXPECT_C(_c, _e); ++c; } while (0)
+/* give an error iff the first |_m| characters of the string _s are equal to _e */
+#define MPIR_NODEMAP_EXPECT_S(_s, _e) (MPL_strncmp(_s, _e, strlen(_e)) == 0 && !MPIR_NODEMAP_ISIDENT((_s)[strlen(_e)]))
+
+typedef enum {
+ MPIR_NODEMAP_UNKNOWN_MAPPING = -1,
+ MPIR_NODEMAP_NULL_MAPPING = 0,
+ MPIR_NODEMAP_VECTOR_MAPPING
+} MPIR_NODEMAP_mapping_type_t;
+
+#define MPIR_NODEMAP_VECTOR "vector"
+
+typedef struct map_block
+{
+ int start_id;
+ int count;
+ int size;
+} MPIR_NODEMAP_map_block_t;
+
+#undef FUNCNAME
+#define FUNCNAME MPIR_NODEMAP_parse_mapping
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIR_NODEMAP_parse_mapping(char *map_str,
+ MPIR_NODEMAP_mapping_type_t *type,
+ MPIR_NODEMAP_map_block_t **map,
+ int *nblocks)
+{
+ int mpi_errno = MPI_SUCCESS;
+ char *c = map_str, *d;
+ int num_blocks = 0;
+ int i;
+ MPIR_CHKPMEM_DECL(1);
+
+ /* parse string of the form:
+ '(' <format> ',' '(' <num> ',' <num> ',' <num> ')' {',' '(' <num> ',' <num> ',' <num> ')'} ')'
+
+ the values of each 3-tuple have the following meaning (X,Y,Z):
+ X - node id start value
+ Y - number of nodes with size Z
+ Z - number of processes assigned to each node
+ */
+
+ if (!strlen(map_str)) {
+ /* An empty-string indicates an inability to determine or express the
+ * process layout on the part of the process manager. Consider this a
+ * non-fatal error case. */
+ *type = MPIR_NODEMAP_NULL_MAPPING;
+ *map = NULL;
+ *nblocks = 0;
+ goto fn_exit;
+ }
+
+ MPIR_NODEMAP_SKIP_SPACE(c);
+ MPIR_NODEMAP_EXPECT_AND_SKIP_C(c, '(');
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ d = c;
+ if (MPIR_NODEMAP_EXPECT_S(d, MPIR_NODEMAP_VECTOR))
+ *type = MPIR_NODEMAP_VECTOR_MAPPING;
+ else
+ MPIR_NODEMAP_PARSE_ERROR();
+ c += strlen(MPIR_NODEMAP_VECTOR);
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ /* first count the number of block descriptors */
+ d = c;
+ while (*d) {
+ if (*d == '(')
+ ++num_blocks;
+ ++d;
+ }
+
+ MPIR_CHKPMEM_MALLOC(*map, MPIR_NODEMAP_map_block_t *, sizeof(MPIR_NODEMAP_map_block_t) * num_blocks, mpi_errno, "map");
+
+ /* parse block descriptors */
+ for (i = 0; i < num_blocks; ++i) {
+ MPIR_NODEMAP_EXPECT_AND_SKIP_C(c, ',');
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ MPIR_NODEMAP_EXPECT_AND_SKIP_C(c, '(');
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ if (!isdigit(*c))
+ MPIR_NODEMAP_PARSE_ERROR();
+ (*map)[i].start_id = (int)strtol(c, &c, 0);
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ MPIR_NODEMAP_EXPECT_AND_SKIP_C(c, ',');
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ if (!isdigit(*c))
+ MPIR_NODEMAP_PARSE_ERROR();
+ (*map)[i].count = (int)strtol(c, &c, 0);
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ MPIR_NODEMAP_EXPECT_AND_SKIP_C(c, ',');
+ MPIR_NODEMAP_SKIP_SPACE(c);
+
+ if (!isdigit(*c))
+ MPIR_NODEMAP_PARSE_ERROR();
+ (*map)[i].size = (int)strtol(c, &c, 0);
+
+ MPIR_NODEMAP_EXPECT_AND_SKIP_C(c, ')');
+ MPIR_NODEMAP_SKIP_SPACE(c);
+ }
+
+ MPIR_NODEMAP_EXPECT_AND_SKIP_C(c, ')');
+
+ *nblocks = num_blocks;
+ MPIR_CHKPMEM_COMMIT();
+fn_exit:
+ return mpi_errno;
+fn_fail:
+ /* --BEGIN ERROR HANDLING-- */
+ MPIR_CHKPMEM_REAP();
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+
+#undef FUNCNAME
+#define FUNCNAME MPIR_NODEMAP_populate_ids_from_mapping
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIR_NODEMAP_populate_ids_from_mapping(char *mapping,
+ int sz,
+ MPID_Node_id_t *out_nodemap,
+ MPID_Node_id_t *max_node_id,
+ int *did_map)
+{
+ int mpi_errno = MPI_SUCCESS;
+ /* PMI_process_mapping is available */
+ MPIR_NODEMAP_mapping_type_t mt = MPIR_NODEMAP_UNKNOWN_MAPPING;
+ MPIR_NODEMAP_map_block_t *mb = NULL;
+ int nblocks = 0;
+ int rank;
+ int block, block_node, node_proc;
+ int i;
+ int found_wrap;
+ int local_max_node_id = -1;
+
+ *did_map = 1; /* reset upon failure */
+
+ mpi_errno = MPIR_NODEMAP_parse_mapping(mapping, &mt, &mb, &nblocks);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ if (MPIR_NODEMAP_NULL_MAPPING == mt) goto fn_fail;
+ MPIR_ERR_CHKINTERNAL(mt != MPIR_NODEMAP_VECTOR_MAPPING, mpi_errno, "unsupported mapping type");
+
+ /* allocate nodes to ranks */
+ found_wrap = 0;
+ for (rank = 0;;) {
+ /* FIXME: The patch is hacky because it assumes that seeing a
+ * start node ID of 0 means a wrap around. This is not
+ * necessarily true. A user-defined node list can, in theory,
+ * use the node ID 0 without actually creating a wrap around.
+ * The reason this patch still works in this case is because
+ * Hydra creates a new node list starting from node ID 0 for
+ * user-specified nodes during MPI_Comm_spawn{_multiple}. If
+ * a different process manager searches for allocated nodes in
+ * the user-specified list, this patch will break. */
+
+ /* If we found that the blocks wrap around, repeat loops
+ * should only start at node id 0 */
+ for (block = 0; found_wrap && mb[block].start_id; block++);
+
+ for (; block < nblocks; block++) {
+ if (mb[block].start_id == 0)
+ found_wrap = 1;
+ for (block_node = 0; block_node < mb[block].count; block_node++) {
+ for (node_proc = 0; node_proc < mb[block].size; node_proc++) {
+ out_nodemap[rank]= mb[block].start_id + block_node;
+ if (++rank == sz)
+ goto break_out;
+ }
+ }
+ }
+ }
+
+ break_out:
+ /* identify maximum node id */
+ for (i = 0; i < sz; i++)
+ if (out_nodemap[i] + 1 > local_max_node_id)
+ local_max_node_id = out_nodemap[i];
+
+ *max_node_id = local_max_node_id;
+
+fn_exit:
+ MPL_free(mb);
+ return mpi_errno;
+fn_fail:
+ /* --BEGIN ERROR HANDLING-- */
+ *did_map = 0;
+ goto fn_exit;
+ /* --END ERROR HANDLING-- */
+}
+
+/* Fills in the node_id info from PMI info. Adapted from MPIU_Get_local_procs.
+ This function is collective over the entire PG because PMI_Barrier is called.
+
+ myrank should be set to -1 if this is not the current process' PG. This
+ is currently not supported due to PMI limitations.
+
+ Fallback Algorithm:
+
+ Each process kvs_puts its hostname and stores the total number of
+ processes (g_num_global). Each process determines maximum node id
+ (g_max_node_id) and assigns a node id to each process (g_node_ids[]):
+
+ For each hostname the process seaches the list of unique nodes
+ names (node_names[]) for a match. If a match is found, the node id
+ is recorded for that matching process. Otherwise, the hostname is
+ added to the list of node names.
+*/
+#undef FUNCNAME
+#define FUNCNAME MPIR_NODEMAP_build_nodemap
+#undef FCNAME
+#define FCNAME MPL_QUOTE(FUNCNAME)
+static inline int MPIR_NODEMAP_build_nodemap(int sz,
+ int myrank,
+ MPID_Node_id_t *out_nodemap,
+ MPID_Node_id_t *out_sz)
+{
+ static int g_max_node_id = -1;
+ int mpi_errno = MPI_SUCCESS;
+ int pmi_errno;
+ int i, j;
+ char *key;
+ char *value;
+ int key_max_sz;
+ int val_max_sz;
+ char *kvs_name;
+ char **node_names;
+ char *node_name_buf;
+ int no_local = 0;
+ int odd_even_cliques = 0;
+ int pmi_version = 1;
+ int pmi_subversion = 1;
+ MPIR_CHKLMEM_DECL(5);
+
+ /* See if the user wants to override our default values */
+ MPL_env2int("PMI_VERSION", &pmi_version);
+ MPL_env2int("PMI_SUBVERSION", &pmi_subversion);
+
+ if (sz == 1) {
+ out_nodemap[0] = ++g_max_node_id;
+ *out_sz = g_max_node_id;
+ goto fn_exit;
+ }
+
+ /* Used for debugging only. This disables communication over shared memory */
+#ifdef ENABLED_NO_LOCAL
+ no_local = 1;
+#else
+ no_local = MPIR_CVAR_NOLOCAL;
+#endif
+
+ /* Used for debugging on a single machine: Odd procs on a node are
+ seen as local to each other, and even procs on a node are seen
+ as local to each other. */
+#ifdef ENABLED_ODD_EVEN_CLIQUES
+ odd_even_cliques = 1;
+#else
+ odd_even_cliques = MPIR_CVAR_ODD_EVEN_CLIQUES;
+#endif
+
+ if (no_local) {
+ /* just assign 0 to n-1 as node ids and bail */
+ for (i = 0; i < sz; ++i) {
+ out_nodemap[i] = ++g_max_node_id;
+ }
+ *out_sz = g_max_node_id;
+ goto fn_exit;
+ }
+
+#ifdef USE_PMI2_API
+ {
+ char process_mapping[PMI2_MAX_VALLEN];
+ int outlen;
+ int found = FALSE;
+ int i;
+ MPIR_NODEMAP_map_block_t *mb;
+ int nblocks;
+ int rank;
+ int block, block_node, node_proc;
+ int did_map = 0;
+
+ mpi_errno = PMI2_Info_GetJobAttr("PMI_process_mapping", process_mapping, sizeof(process_mapping), &found);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_ERR_CHKINTERNAL(!found, mpi_errno, "PMI_process_mapping attribute not found");
+ /* this code currently assumes pg is comm_world */
+ mpi_errno = MPIR_NODEMAP_populate_ids_from_mapping(process_mapping, sz, out_nodemap, out_sz, &did_map);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ MPIR_ERR_CHKINTERNAL(!did_map, mpi_errno, "unable to populate node ids from PMI_process_mapping");
+ }
+#else /* USE_PMI2_API */
+ if (myrank == -1) {
+ /* fixme this routine can't handle the dynamic process case at this
+ time. this will require more support from the process manager. */
+ MPIR_Assert(0);
+ }
+
+ /* Allocate space for pmi key and value */
+ pmi_errno = PMI_KVS_Get_key_length_max(&key_max_sz);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
+ MPIR_CHKLMEM_MALLOC(key, char *, key_max_sz, mpi_errno, "key");
+
+ pmi_errno = PMI_KVS_Get_value_length_max(&val_max_sz);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
+ MPIR_CHKLMEM_MALLOC(value, char *, val_max_sz, mpi_errno, "value");
+
+ MPIR_CHKLMEM_MALLOC(kvs_name, char *, 256, mpi_errno, "kvs_name");
+ pmi_errno = PMI_KVS_Get_my_name(kvs_name, 256);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno, mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %d", pmi_errno);
+ /* See if process manager supports PMI_process_mapping keyval */
+
+ if (pmi_version == 1 && pmi_subversion == 1) {
+ pmi_errno = PMI_KVS_Get(kvs_name, "PMI_process_mapping", value, val_max_sz);
+ if (pmi_errno == 0) {
+ int did_map = 0;
+ /* this code currently assumes pg is comm_world */
+ mpi_errno = MPIR_NODEMAP_populate_ids_from_mapping(value, sz, out_nodemap, out_sz, &did_map);
+ g_max_node_id = *out_sz;
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+ if (did_map) {
+ goto odd_even_cliques;
+ }
+ /* else fall through to O(N^2) PMI_KVS_Gets version */
+ }
+ }
+
+ /* fallback algorithm */
+ mpi_errno = MPIR_NODEMAP_publish_node_id(sz, myrank);
+ if (mpi_errno) MPIR_ERR_POP(mpi_errno);
+
+ /* Allocate temporary structures. These would need to be persistent if
+ we somehow were able to support dynamic processes via this method. */
+ MPIR_CHKLMEM_MALLOC(node_names, char **, sz * sizeof(char*), mpi_errno, "node_names");
+ MPIR_CHKLMEM_MALLOC(node_name_buf, char *, sz * key_max_sz * sizeof(char), mpi_errno, "node_name_buf");
+
+ /* Gather hostnames */
+ for (i = 0; i < sz; ++i)
+ {
+ node_names[i] = &node_name_buf[i * key_max_sz];
+ node_names[i][0] = '\0';
+ }
+
+ g_max_node_id = -1; /* defensive */
+
+ for (i = 0; i < sz; ++i)
+ {
+ MPIR_Assert(g_max_node_id < sz);
+ if (i == myrank)
+ {
+ /* This is us, no need to perform a get */
+ int ret;
+ char *hostname = (char*) MPL_malloc(sizeof(char) * MAX_HOSTNAME_LEN);
+ ret = gethostname(hostname, MAX_HOSTNAME_LEN);
+ MPIR_ERR_CHKANDJUMP2(ret == -1, mpi_errno, MPI_ERR_OTHER, "**sock_gethost", "**sock_gethost %s %d", MPIR_Strerror(errno), errno);
+ hostname[MAX_HOSTNAME_LEN-1] = '\0';
+ MPL_snprintf(node_names[g_max_node_id+1], key_max_sz, "%s", hostname);
+ MPL_free(hostname);
+ }
+ else
+ {
+ memset(key, 0, key_max_sz);
+ MPL_snprintf(key, key_max_sz, "hostname[%d]", i);
+
+ pmi_errno = PMI_KVS_Get(kvs_name, key, node_names[g_max_node_id+1], key_max_sz);
+ MPIR_ERR_CHKANDJUMP1(pmi_errno != PMI_SUCCESS, mpi_errno, MPI_ERR_OTHER, "**pmi_kvs_get", "**pmi_kvs_get %d", pmi_errno);
+ }
+
+ /* Find the node_id for this process, or create a new one */
+ /* FIXME:need a better algorithm -- this one does O(N^2) strncmp()s! */
+ /* The right fix is to get all this information from the process
+ manager, rather than bother with this hostname hack at all. */
+ for (j = 0; j < g_max_node_id + 1; ++j)
+ if (!MPL_strncmp(node_names[j], node_names[g_max_node_id+1], key_max_sz))
+ break;
+ if (j == g_max_node_id + 1)
+ ++g_max_node_id;
+ else
+ node_names[g_max_node_id+1][0] = '\0';
+ out_nodemap[i] = j;
+ }
+
+odd_even_cliques:
+ if (odd_even_cliques)
+ {
+ /* Create new processes for all odd numbered processes. This
+ may leave nodes ids with no processes assigned to them, but
+ I think this is OK */
+ for (i = 0; i < sz; ++i)
+ if (i & 0x1)
+ out_nodemap[i] += g_max_node_id + 1;
+ g_max_node_id = (g_max_node_id + 1) * 2;
+ }
+ *out_sz = g_max_node_id;
+#endif
+
+fn_exit:
+ MPIR_CHKLMEM_FREEALL();
+ return mpi_errno;
+fn_fail:
+ goto fn_exit;
+}
+
+#endif /* ifndef BUILD_NODEMAP_H_INCLUDED */
diff --git a/src/util/other/.state-cache b/src/util/other/.state-cache
deleted file mode 100644
index 70bc264..0000000
--- a/src/util/other/.state-cache
+++ /dev/null
@@ -1,10 +0,0 @@
-<dir>
-<file name="assert.c" info="1447123141"/>
-<file name="outliers.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="assert.c">
-</fileinfo>
-<fileinfo name="outliers.c">
-</fileinfo>
-</data>
diff --git a/src/util/other/Makefile.mk b/src/util/other/Makefile.mk
deleted file mode 100644
index 25204c0..0000000
--- a/src/util/other/Makefile.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-mpi_core_sources += \
- src/util/other/outliers.c \
- src/util/other/assert.c
-
diff --git a/src/util/other/assert.c b/src/util/other/assert.c
deleted file mode 100644
index 5fae177..0000000
--- a/src/util/other/assert.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2010 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-# define MPIU_ASSERT_FMT_MSG_MAX_SIZE 2048
-
-
-/* assertion helper routines
- *
- * These exist to de-clutter the post-processed code and reduce the chance that
- * all of the assertion code will confuse the compiler into making bad
- * optimization decisions. By the time one of these functions is called, the
- * assertion has already failed and we can do more-expensive things because we
- * are on the way out anyway. */
-
-int MPIR_Assert_fail(const char *cond, const char *file_name, int line_num)
-{
- MPL_VG_PRINTF_BACKTRACE("Assertion failed in file %s at line %d: %s\n",
- file_name, line_num, cond);
- MPL_internal_error_printf("Assertion failed in file %s at line %d: %s\n",
- file_name, line_num, cond);
- MPIU_DBG_MSG_FMT(ALL, TERSE,
- (MPIU_DBG_FDEST,
- "Assertion failed in file %s at line %d: %s",
- file_name, line_num, cond));
- MPID_Abort(NULL, MPI_SUCCESS, 1, NULL);
- return MPI_ERR_INTERN; /* never get here, abort should kill us */
-}
-
-int MPIR_Assert_fail_fmt(const char *cond, const char *file_name, int line_num, const char *fmt, ...)
-{
- char msg[MPIU_ASSERT_FMT_MSG_MAX_SIZE] = {'\0'};
- va_list vl;
-
- va_start(vl,fmt);
- vsnprintf(msg, sizeof(msg), fmt, vl); /* don't check rc, can't handle it anyway */
-
- MPL_VG_PRINTF_BACKTRACE("Assertion failed in file %s at line %d: %s\n",
- file_name, line_num, cond);
- MPL_VG_PRINTF_BACKTRACE("%s\n", msg);
-
- MPL_internal_error_printf("Assertion failed in file %s at line %d: %s\n",
- file_name, line_num, cond);
- MPL_internal_error_printf("%s\n", msg);
-
- MPIU_DBG_MSG_FMT(ALL, TERSE,
- (MPIU_DBG_FDEST,
- "Assertion failed in file %s at line %d: %s",
- file_name, line_num, cond));
- MPIU_DBG_MSG_FMT(ALL, TERSE, (MPIU_DBG_FDEST,"%s",msg));
-
- MPID_Abort(NULL, MPI_SUCCESS, 1, NULL);
- return MPI_ERR_INTERN; /* never get here, abort should kill us */
-}
-
diff --git a/src/util/other/outliers.c b/src/util/other/outliers.c
deleted file mode 100644
index cac6190..0000000
--- a/src/util/other/outliers.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiimpl.h"
-#include <stdlib.h>
-#include <assert.h>
-
-#define GROUPSIZE 5
-
-/* Insertion sort on array 'a' containing n elements */
-static inline void isort(int a[], const int n)
-{
- int i;
- int j;
- int key;
-
- for (j = 1; j < n; ++j) {
- key = a[j];
- i = j - 1;
- while (i >= 0 && a[i] > key) {
- a[i+1] = a[i];
- i -= 1;
- }
- a[i+1] = key;
- }
-}
-
-
-/* Partition array 'a' of size n around the value pivot and returns
- * the index of the pivot point */
-static inline int partition(const int pivot, int a[], const int n)
-{
- int i = 0;
- int j = n-1;
- int tmp;
-
- while (1) {
- while ((j > 0) && (a[j] < pivot)) --j;
- while ((i < n) && (a[i] >= pivot)) ++i;
-
- if (i < j) {
- tmp = a[i];
- a[i] = a[j];
- a[j] = tmp;
- }
- else {
- return j;
- }
- }
-}
-
-
-/* This does all of the work for k_select */
-static void k_select_r(const int k, int a[], const int n, int *value)
-{
- int ngroups;
- int i;
- int median_median;
- int surfeit;
- int mk;
- int *medians;
-
- assert (k < n);
- ngroups = (n + GROUPSIZE-1) / GROUPSIZE;
- medians = MPIU_Malloc(ngroups * sizeof (int));
-
- /* Divide 'a' into groups, sort the elements of each group and
- pull out the median of each group */
- for (i = 0; i < ngroups-1; ++i) {
- isort(&a[i * GROUPSIZE], GROUPSIZE);
- medians[i] = a[i*GROUPSIZE + GROUPSIZE/2];
- }
- surfeit = (n - i * GROUPSIZE);
- isort(&a[i * GROUPSIZE], surfeit);
- medians[i] = a[i*GROUPSIZE + surfeit/2];
-
- if (ngroups == 1) {
- *value = a[n - 1 - k];
- MPIU_Free(medians);
- return;
- }
-
- /* use k_select to find the median of medians */
- k_select_r((ngroups / 2) - 1 + (ngroups % 2), medians, ngroups, &median_median);
- MPIU_Free(medians);
-
- /* partition array a around the median of medians and return the
- index of the median of medians */
- mk = partition(median_median, a, n);
-
- /* if this is the last element, we're done */
- if (mk == n - 1)
- *value = a[mk];
- else if (k <= mk)
- /* call k_select to find the kth element in a[0..mk-1] (the
- array up to the element before the median of medians) */
- k_select_r(k, &a[0], mk + 1, value);
- else
- /* call k_select to find the (k-mk)th element in a[mk+1..n] (the
- array starting from the element after the median of medians) */
- k_select_r(k - (mk+1), &a[mk+1], n - (mk+1), value);
-}
-
-
-/* Returns the value of the kth smallest element in array a of size
- * n. Allocates an array and calls the recursive function k_select_r
- * which does all the work */
-static void k_select(const int k, int a[], const int n, int *value)
-{
- k_select_r(k - 1, a, n, value);
-}
-
-/* silence "no previous prototype" warnings */
-int MPIU_Outlier_ratio(int * sizes, int n_sizes, double outlier_frac, double threshold);
-
-/* Returns the ratio of the maximum size and the outlier_frac
- * percentile size. */
-int MPIU_Outlier_ratio(int * sizes, int n_sizes, double outlier_frac, double threshold)
-{
- int max, k_max, i;
- double retval;
-
- k_select(n_sizes, sizes, n_sizes, &max);
- max = sizes[0];
- for (i = 0; i < n_sizes; i++)
- if (max < sizes[i])
- max = sizes[i];
- k_select((int) (n_sizes * outlier_frac), sizes, n_sizes, &k_max);
- retval = (double) max / k_max;
-
- if (retval > threshold) {
- return 1;
- }
- else {
- return 0;
- }
-}
diff --git a/src/util/pointer/.state-cache b/src/util/pointer/.state-cache
deleted file mode 100644
index 96e9436..0000000
--- a/src/util/pointer/.state-cache
+++ /dev/null
@@ -1,7 +0,0 @@
-<dir>
-<file name="mpiu_pointer.h" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="mpiu_pointer.h">
-</fileinfo>
-</data>
diff --git a/src/util/pointer/Makefile.mk b/src/util/pointer/Makefile.mk
deleted file mode 100644
index eea239a..0000000
--- a/src/util/pointer/Makefile.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-AM_CPPFLAGS += -I$(top_srcdir)/src/util/pointer
-
-noinst_HEADERS += src/util/pointer/mpiu_pointer.h
-
-mpi_core_sources +=
diff --git a/src/util/pointer/mpiu_pointer.h b/src/util/pointer/mpiu_pointer.h
deleted file mode 100644
index e19d22b..0000000
--- a/src/util/pointer/mpiu_pointer.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_POINTER_H_INCLUDED)
-#define MPIU_POINTER_H_INCLUDED
-
-#include "mpi.h"
-#include "mpichconf.h"
-#include "mpichconfconst.h"
-#include "mpidbg.h"
-#include "mpiassert.h"
-
-/* Assigns (src_) to (dst_), checking that (src_) fits in (dst_) without
- * truncation.
- *
- * When fiddling with this macro, please keep C's overly complicated integer
- * promotion/truncation/conversion rules in mind. A discussion of these issues
- * can be found in Chapter 5 of "Secure Coding in C and C++" by Robert Seacord.
- */
-#define MPIU_Assign_trunc(dst_,src_,dst_type_) \
- do { \
- /* will catch some of the cases if the expr_inttype macros aren't available */ \
- MPIU_Assert((src_) == (dst_type_)(src_)); \
- dst_ = (dst_type_)(src_); \
- } while (0)
-
-/*
- * Ensure an MPI_Aint value fits into a signed int.
- * Useful for detecting overflow when MPI_Aint is larger than an int.
- *
- * \param[in] aint Variable of type MPI_Aint
- */
-#define MPIU_Ensure_Aint_fits_in_int(aint) \
- MPIU_Assert((aint) == (MPI_Aint)(int)(aint));
-
-/*
- * Ensure an MPI_Aint value fits into an unsigned int.
- * Useful for detecting overflow when MPI_Aint is larger than an
- * unsigned int.
- *
- * \param[in] aint Variable of type MPI_Aint
- */
-#define MPIU_Ensure_Aint_fits_in_uint(aint) \
- MPIU_Assert((aint) == (MPI_Aint)(unsigned int)(aint));
-
-/*
- * Ensure an MPI_Aint value fits into a pointer.
- * Useful for detecting overflow when MPI_Aint is larger than a pointer.
- *
- * \param[in] aint Variable of type MPI_Aint
- */
-#define MPIU_Ensure_Aint_fits_in_pointer(aint) \
- MPIU_Assert((aint) == (MPI_Aint)(MPIU_Upint) MPIU_AINT_CAST_TO_VOID_PTR(aint));
-
-
-#endif /* !defined(MPIU_POINTER_H_INCLUDED) */
diff --git a/src/util/procmap/.state-cache b/src/util/procmap/.state-cache
index 0c4e195..f326369 100644
--- a/src/util/procmap/.state-cache
+++ b/src/util/procmap/.state-cache
@@ -1,5 +1,5 @@
<dir>
-<file name="local_proc.c" info="1447123141"/>
+<file name="local_proc.c" info="1478973152"/>
</dir>
<data>
<fileinfo name="local_proc.c">
diff --git a/src/util/procmap/local_proc.c b/src/util/procmap/local_proc.c
index f13b80d..f331e1b 100644
--- a/src/util/procmap/local_proc.c
+++ b/src/util/procmap/local_proc.c
@@ -18,7 +18,7 @@
#include <errno.h>
#endif
-/* MPIU_Find_local_and_external -- from the list of processes in comm,
+/* MPIR_Find_local_and_external -- from the list of processes in comm,
builds a list of local processes, i.e., processes on this same
node, and a list of external processes, i.e., one process from each
node.
@@ -51,12 +51,12 @@
comm->remote_size.
*/
#undef FUNCNAME
-#define FUNCNAME MPIU_Find_local_and_external
+#define FUNCNAME MPIR_Find_local_and_external
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
#if defined(MPID_USE_NODE_IDS)
-int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_rank_p, int **local_ranks_p,
+int MPIR_Find_local_and_external(MPIR_Comm *comm, int *local_size_p, int *local_rank_p, int **local_ranks_p,
int *external_size_p, int *external_rank_p, int **external_ranks_p,
int **intranode_table_p, int **internode_table_p)
{
@@ -74,8 +74,8 @@ int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_
MPID_Node_id_t max_node_id;
MPID_Node_id_t node_id;
MPID_Node_id_t my_node_id;
- MPIU_CHKLMEM_DECL(1);
- MPIU_CHKPMEM_DECL(4);
+ MPIR_CHKLMEM_DECL(1);
+ MPIR_CHKPMEM_DECL(4);
/* Scan through the list of processes in comm and add one
process from each node to the list of "external" processes. We
@@ -86,16 +86,16 @@ int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_
/* these two will be realloc'ed later to the appropriate size (currently unknown) */
/* FIXME: realloc doesn't guarantee that the allocated area will be
shrunk - so using realloc is not an appropriate strategy. */
- MPIU_CHKPMEM_MALLOC (external_ranks, int *, sizeof(int) * comm->remote_size, mpi_errno, "external_ranks");
- MPIU_CHKPMEM_MALLOC (local_ranks, int *, sizeof(int) * comm->remote_size, mpi_errno, "local_ranks");
+ MPIR_CHKPMEM_MALLOC (external_ranks, int *, sizeof(int) * comm->remote_size, mpi_errno, "external_ranks");
+ MPIR_CHKPMEM_MALLOC (local_ranks, int *, sizeof(int) * comm->remote_size, mpi_errno, "local_ranks");
- MPIU_CHKPMEM_MALLOC (internode_table, int *, sizeof(int) * comm->remote_size, mpi_errno, "internode_table");
- MPIU_CHKPMEM_MALLOC (intranode_table, int *, sizeof(int) * comm->remote_size, mpi_errno, "intranode_table");
+ MPIR_CHKPMEM_MALLOC (internode_table, int *, sizeof(int) * comm->remote_size, mpi_errno, "internode_table");
+ MPIR_CHKPMEM_MALLOC (intranode_table, int *, sizeof(int) * comm->remote_size, mpi_errno, "intranode_table");
mpi_errno = MPID_Get_max_node_id(comm, &max_node_id);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
- MPIU_Assert(max_node_id >= 0);
- MPIU_CHKLMEM_MALLOC (nodes, int *, sizeof(int) * (max_node_id + 1), mpi_errno, "nodes");
+ MPIR_Assert(max_node_id >= 0);
+ MPIR_CHKLMEM_MALLOC (nodes, int *, sizeof(int) * (max_node_id + 1), mpi_errno, "nodes");
/* nodes maps node_id to rank in external_ranks of leader for that node */
for (i = 0; i < (max_node_id + 1); ++i)
@@ -108,8 +108,8 @@ int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_
mpi_errno = MPID_Get_node_id(comm, comm->rank, &my_node_id);
if (mpi_errno) MPIR_ERR_POP (mpi_errno);
- MPIU_Assert(my_node_id >= 0);
- MPIU_Assert(my_node_id <= max_node_id);
+ MPIR_Assert(my_node_id >= 0);
+ MPIR_Assert(my_node_id <= max_node_id);
local_size = 0;
local_rank = -1;
@@ -124,7 +124,7 @@ int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_
able to recover gracefully. */
MPIR_ERR_CHKANDJUMP(node_id < 0, mpi_errno, MPI_ERR_OTHER, "**dynamic_node_ids");
- MPIU_Assert(node_id <= max_node_id);
+ MPIR_Assert(node_id <= max_node_id);
/* build list of external processes */
if (nodes[node_id] == -1)
@@ -179,12 +179,12 @@ int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_
*local_size_p = local_size;
*local_rank_p = local_rank;
- *local_ranks_p = MPIU_Realloc (local_ranks, sizeof(int) * local_size);
+ *local_ranks_p = MPL_realloc (local_ranks, sizeof(int) * local_size);
MPIR_ERR_CHKANDJUMP (*local_ranks_p == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem2");
*external_size_p = external_size;
*external_rank_p = external_rank;
- *external_ranks_p = MPIU_Realloc (external_ranks, sizeof(int) * external_size);
+ *external_ranks_p = MPL_realloc (external_ranks, sizeof(int) * external_size);
MPIR_ERR_CHKANDJUMP (*external_ranks_p == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem2");
/* no need to realloc */
@@ -193,18 +193,18 @@ int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_
if (internode_table_p)
*internode_table_p = internode_table;
- MPIU_CHKPMEM_COMMIT();
+ MPIR_CHKPMEM_COMMIT();
fn_exit:
- MPIU_CHKLMEM_FREEALL();
+ MPIR_CHKLMEM_FREEALL();
return mpi_errno;
fn_fail:
- MPIU_CHKPMEM_REAP();
+ MPIR_CHKPMEM_REAP();
goto fn_exit;
}
#else /* !defined(MPID_USE_NODE_IDS) */
-int MPIU_Find_local_and_external(MPID_Comm *comm, int *local_size_p, int *local_rank_p, int **local_ranks_p,
+int MPIR_Find_local_and_external(MPIR_Comm *comm, int *local_size_p, int *local_rank_p, int **local_ranks_p,
int *external_size_p, int *external_rank_p, int **external_ranks_p,
int **intranode_table_p, int **internode_table_p)
{
@@ -226,17 +226,17 @@ fn_fail:
This function does NOT use mpich error handling.
*/
#undef FUNCNAME
-#define FUNCNAME MPIU_Get_internode_rank
+#define FUNCNAME MPIR_Get_internode_rank
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIU_Get_internode_rank(MPID_Comm *comm_ptr, int r)
+int MPIR_Get_internode_rank(MPIR_Comm *comm_ptr, int r)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
- MPIU_Assert(r < comm_ptr->remote_size);
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
- MPIU_Assert(comm_ptr->internode_table != NULL);
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(r < comm_ptr->remote_size);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
+ MPIR_Assert(comm_ptr->internode_table != NULL);
return comm_ptr->internode_table[r];
}
@@ -247,17 +247,17 @@ int MPIU_Get_internode_rank(MPID_Comm *comm_ptr, int r)
This function does NOT use mpich error handling.
*/
#undef FUNCNAME
-#define FUNCNAME MPIU_Get_intranode_rank
+#define FUNCNAME MPIR_Get_intranode_rank
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
-int MPIU_Get_intranode_rank(MPID_Comm *comm_ptr, int r)
+int MPIR_Get_intranode_rank(MPIR_Comm *comm_ptr, int r)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
- MPIU_Assert(mpi_errno == MPI_SUCCESS);
- MPIU_Assert(r < comm_ptr->remote_size);
- MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
- MPIU_Assert(comm_ptr->intranode_table != NULL);
+ MPIR_Comm_valid_ptr( comm_ptr, mpi_errno, TRUE );
+ MPIR_Assert(mpi_errno == MPI_SUCCESS);
+ MPIR_Assert(r < comm_ptr->remote_size);
+ MPIR_Assert(comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM);
+ MPIR_Assert(comm_ptr->intranode_table != NULL);
/* FIXME this could/should be a list of ranks on the local node, which
should take up much less space on a typical thin(ish)-node system. */
diff --git a/src/util/thread/.state-cache b/src/util/thread/.state-cache
deleted file mode 100644
index f79ba74..0000000
--- a/src/util/thread/.state-cache
+++ /dev/null
@@ -1,43 +0,0 @@
-<dir>
-<file name="mpiu_thread.h" info="1447123141"/>
-<file name="mpiu_thread_solaris.h" info="1447123141"/>
-<file name="mpiu_thread_posix.h" info="1447123141"/>
-<file name="mpiu_thread_solaris.c" info="1447123141"/>
-<file name="mpiu_thread_multiple.h" info="1447123141"/>
-<file name="mpiu_thread_win.h" info="1447123141"/>
-<file name="mpiu_thread.c" info="1447123141"/>
-<file name="mpiu_thread_pobj.h" info="1447123141"/>
-<file name="mpiu_thread_win.c" info="1447123141"/>
-<file name="mpiu_thread_global.h" info="1447123141"/>
-<file name="mpiu_thread_priv.h" info="1447123141"/>
-<file name="mpiu_thread_posix.c" info="1447123141"/>
-<file name="mpiu_thread_single.h" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="mpiu_thread.h">
-</fileinfo>
-<fileinfo name="mpiu_thread_solaris.h">
-</fileinfo>
-<fileinfo name="mpiu_thread_posix.h">
-</fileinfo>
-<fileinfo name="mpiu_thread_solaris.c">
-</fileinfo>
-<fileinfo name="mpiu_thread_multiple.h">
-</fileinfo>
-<fileinfo name="mpiu_thread_win.h">
-</fileinfo>
-<fileinfo name="mpiu_thread.c">
-</fileinfo>
-<fileinfo name="mpiu_thread_pobj.h">
-</fileinfo>
-<fileinfo name="mpiu_thread_win.c">
-</fileinfo>
-<fileinfo name="mpiu_thread_global.h">
-</fileinfo>
-<fileinfo name="mpiu_thread_priv.h">
-</fileinfo>
-<fileinfo name="mpiu_thread_posix.c">
-</fileinfo>
-<fileinfo name="mpiu_thread_single.h">
-</fileinfo>
-</data>
diff --git a/src/util/thread/Makefile.mk b/src/util/thread/Makefile.mk
deleted file mode 100644
index 39d134f..0000000
--- a/src/util/thread/Makefile.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-AM_CPPFLAGS += -I$(top_srcdir)/src/util/thread
-
-noinst_HEADERS += \
- src/util/thread/mpiu_thread.h \
- src/util/thread/mpiu_thread_single.h \
- src/util/thread/mpiu_thread_multiple.h \
- src/util/thread/mpiu_thread_global.h \
- src/util/thread/mpiu_thread_pobj.h \
- src/util/thread/mpiu_thread_priv.h \
- src/util/thread/mpiu_thread_posix.h \
- src/util/thread/mpiu_thread_solaris.h \
- src/util/thread/mpiu_thread_win.h
-
-mpi_core_sources += \
- src/util/thread/mpiu_thread.c \
- src/util/thread/mpiu_thread_win.c \
- src/util/thread/mpiu_thread_solaris.c \
- src/util/thread/mpiu_thread_posix.c
-
diff --git a/src/util/thread/mpiu_thread.c b/src/util/thread/mpiu_thread.c
deleted file mode 100644
index 789e2b3..0000000
--- a/src/util/thread/mpiu_thread.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2002 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiu_thread.h"
-
-#if !defined(MPICH_IS_THREADED)
-
-/* If single threaded, we preallocate this. Otherwise, we create it */
-MPIUI_Per_thread_t MPIUI_Thread = { 0 };
-
-#elif defined(MPICH_TLS_SPECIFIER)
-
-MPICH_TLS_SPECIFIER MPIUI_Per_thread_t MPIUI_Thread = { 0 };
-
-#else /* defined(MPICH_IS_THREADED) && !defined(MPICH_TLS_SPECIFIER) */
-
-/* If we may be single threaded, we need a preallocated version to use
- * if we are single threaded case */
-MPIUI_Per_thread_t MPIUI_ThreadSingle = { 0 };
-
-/* This routine is called when a thread exits; it is passed the value
- * associated with the key. In our case, this is simply storage
- * allocated with MPIU_Calloc */
-void MPIUI_Cleanup_tls(void *a)
-{
- if (a)
- MPIU_Free(a);
-}
-
-#endif
diff --git a/src/util/thread/mpiu_thread.h b/src/util/thread/mpiu_thread.h
deleted file mode 100644
index e837d34..0000000
--- a/src/util/thread/mpiu_thread.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_THREAD_H_INCLUDED)
-#define MPIU_THREAD_H_INCLUDED
-
-#include "mpi.h"
-#include "mpichconf.h" /* defines MPICH_THREAD_PACKAGE_NAME */
-#include "mpichconfconst.h"
-#include "mpidbg.h"
-#include "mpiassert.h"
-#include "mpiu_strerror.h"
-
-/* FIXME: we should not be including an MPIR-level header here. But
- * the code is currently a rat-hole where the MPIU and MPIR functions
- * are all mixed up. Till that's resolved, adding mpimem.h here as a
- * workaround for using MPIU_Calloc functionality. */
-#include "mpimem.h"
-
-/* _INVALID exists to avoid accidental macro evaluations to 0 */
-#define MPICH_THREAD_PACKAGE_INVALID 0
-#define MPICH_THREAD_PACKAGE_NONE 1
-#define MPICH_THREAD_PACKAGE_POSIX 2
-#define MPICH_THREAD_PACKAGE_SOLARIS 3
-#define MPICH_THREAD_PACKAGE_WIN 4
-
-#if defined(MPICH_THREAD_PACKAGE_NAME) && (MPICH_THREAD_PACKAGE_NAME == MPICH_THREAD_PACKAGE_POSIX)
-# include "mpiu_thread_posix.h"
-#elif defined(MPICH_THREAD_PACKAGE_NAME) && (MPICH_THREAD_PACKAGE_NAME == MPICH_THREAD_PACKAGE_SOLARIS)
-# include "mpiu_thread_solaris.h"
-#elif defined(MPICH_THREAD_PACKAGE_NAME) && (MPICH_THREAD_PACKAGE_NAME == MPICH_THREAD_PACKAGE_WIN)
-# include "mpiu_thread_win.h"
-#elif defined(MPICH_THREAD_PACKAGE_NAME) && (MPICH_THREAD_PACKAGE_NAME == MPICH_THREAD_PACKAGE_NONE)
-typedef int MPIU_Thread_mutex_t;
-typedef int MPIU_Thread_cond_t;
-typedef int MPIU_Thread_id_t;
-typedef int MPIU_Thread_tls_t;
-typedef void (*MPIU_Thread_func_t) (void *data);
-#define MPIU_Thread_mutex_create(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
-#define MPIU_Thread_mutex_destroy(mutex_ptr_, err_ptr_) { *((int*)err_ptr_) = 0;}
-#else
-# error "thread package not defined or unknown"
-#endif
-
-/* Error values */
-#define MPIU_THREAD_SUCCESS 0
-/* FIXME: Define other error codes. For now, any non-zero value is an error. */
-
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_INVALID
-# error Invalid thread granularity option specified (possibly none)
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_LOCK_FREE
-# error MPICH_THREAD_GRANULARITY_LOCK_FREE not implemented yet
-#endif
-
-typedef struct {
- int thread_provided; /* Provided level of thread support */
-
-#if defined(MPICH_IS_THREADED) && !defined(MPICH_TLS_SPECIFIER)
- MPIU_Thread_tls_t thread_storage; /* Id for perthread data */
-#endif
-
- /* This is a special case for is_thread_main, which must be
- * implemented even if MPICH itself is single threaded. */
-#if MPICH_THREAD_LEVEL >= MPI_THREAD_SERIALIZED
- MPIU_Thread_id_t master_thread; /* Thread that started MPI */
-#endif
-
-#if defined MPICH_IS_THREADED
- int isThreaded; /* Set to true if user requested
- * THREAD_MULTIPLE */
-#endif /* MPICH_IS_THREADED */
-
- /* Define the mutex values used for each kind of implementation */
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL || \
- MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT
- MPIU_Thread_mutex_t global_mutex;
- MPIU_Thread_mutex_t memalloc_mutex; /* for MPIU_{Malloc,Free,Calloc} */
-#endif
-
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT
- MPIU_Thread_mutex_t handle_mutex;
- MPIU_Thread_mutex_t msgq_mutex;
- MPIU_Thread_mutex_t completion_mutex;
- MPIU_Thread_mutex_t ctx_mutex;
- MPIU_Thread_mutex_t pmi_mutex;
-#endif
-} MPIR_Thread_info_t;
-extern MPIR_Thread_info_t MPIR_ThreadInfo;
-
-#define MPIR_THREAD_GLOBAL_ALLFUNC_MUTEX MPIR_ThreadInfo.global_mutex
-#define MPIR_THREAD_POBJ_HANDLE_MUTEX MPIR_ThreadInfo.handle_mutex
-#define MPIR_THREAD_POBJ_MSGQ_MUTEX MPIR_ThreadInfo.msgq_mutex
-#define MPIR_THREAD_POBJ_COMPLETION_MUTEX MPIR_ThreadInfo.completion_mutex
-#define MPIR_THREAD_POBJ_CTX_MUTEX MPIR_ThreadInfo.ctx_mutex
-#define MPIR_THREAD_POBJ_PMI_MUTEX MPIR_ThreadInfo.pmi_mutex
-#define MPIR_THREAD_ALLGRAN_MEMALLOC_MUTEX MPIR_ThreadInfo.memalloc_mutex
-#define MPIR_THREAD_POBJ_COMM_MUTEX(_comm_ptr) _comm_ptr->mutex
-#define MPIR_THREAD_POBJ_WIN_MUTEX(_win_ptr) _win_ptr->mutex
-
-/* ------------------------------------------------------------------------- */
-/* thread-local storage macros */
-/* moved here from mpiimpl.h because they logically belong here */
-
-/* arbitrary, just needed to avoid cleaning up heap allocated memory at thread
- * destruction time */
-#define MPIU_STRERROR_BUF_SIZE (1024)
-
-/* This structure contains all thread-local variables and will be zeroed at
- * allocation time.
- *
- * Note that any pointers to dynamically allocated memory stored in this
- * structure must be externally cleaned up.
- * */
-typedef struct {
- int op_errno; /* For errors in predefined MPI_Ops */
-
- /* error string storage for MPIU_Strerror */
- char strerrbuf[MPIU_STRERROR_BUF_SIZE];
-
-#if (MPICH_THREAD_LEVEL == MPI_THREAD_MULTIPLE)
- int lock_depth;
-#endif
-} MPIUI_Per_thread_t;
-
-#if defined (MPICH_IS_THREADED)
-#include "mpiu_thread_multiple.h"
-#else
-#include "mpiu_thread_single.h"
-#endif
-
-#endif /* !defined(MPIU_THREAD_H_INCLUDED) */
diff --git a/src/util/thread/mpiu_thread_global.h b/src/util/thread/mpiu_thread_global.h
deleted file mode 100644
index b4f2d23..0000000
--- a/src/util/thread/mpiu_thread_global.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_THREAD_GLOBAL_H_INCLUDED)
-#define MPIU_THREAD_GLOBAL_H_INCLUDED
-
-/* GLOBAL locks are all real recursive ops */
-#define MPIUI_THREAD_CS_ENTER_GLOBAL(mutex) MPIUI_THREAD_CS_ENTER_RECURSIVE("GLOBAL", mutex)
-#define MPIUI_THREAD_CS_EXIT_GLOBAL(mutex) MPIUI_THREAD_CS_EXIT_RECURSIVE("GLOBAL", mutex)
-#define MPIUI_THREAD_CS_YIELD_GLOBAL(mutex) MPIUI_THREAD_CS_YIELD_RECURSIVE("GLOBAL", mutex)
-
-/* ALLGRAN locks are all real nonrecursive ops */
-#define MPIUI_THREAD_CS_ENTER_ALLGRAN(mutex) MPIUI_THREAD_CS_ENTER_NONRECURSIVE("ALLGRAN", mutex)
-#define MPIUI_THREAD_CS_EXIT_ALLGRAN(mutex) MPIUI_THREAD_CS_EXIT_NONRECURSIVE("ALLGRAN", mutex)
-#define MPIUI_THREAD_CS_YIELD_ALLGRAN(mutex) MPIUI_THREAD_CS_YIELD_NONRECURSIVE("ALLGRAN", mutex)
-
-/* POBJ locks are all NO-OPs */
-#define MPIUI_THREAD_CS_ENTER_POBJ(mutex)
-#define MPIUI_THREAD_CS_EXIT_POBJ(mutex)
-#define MPIUI_THREAD_CS_YIELD_POBJ(mutex)
-
-
-/* define a type for the completion counter */
-/* memory barriers aren't needed in this impl, because all access to completion
- * counters is done while holding the GLOBAL critical section */
-typedef volatile int MPIU_cc_t;
-#define MPIU_cc_get(cc_) (cc_)
-#define MPIU_cc_set(cc_ptr_, val_) (*(cc_ptr_)) = (val_)
-#define MPIU_cc_is_complete(cc_ptr_) (0 == *(cc_ptr_))
-
-#define MPIU_cc_incr(cc_ptr_, was_incomplete_) \
- do { \
- *(was_incomplete_) = (*(cc_ptr_))++; \
- } while (0)
-
-#define MPIU_cc_decr(cc_ptr_, incomplete_) \
- do { \
- *(incomplete_) = --(*(cc_ptr_)); \
- } while (0)
-
-
-/* "publishes" the obj with handle value (handle_) via the handle pointer
- * (hnd_lval_). That is, it is a version of the following statement that fixes
- * memory consistency issues:
- * (hnd_lval_) = (handle_);
- *
- * assumes that the following is always true: typeof(*hnd_lval_ptr_)==int
- */
-/* This could potentially be generalized beyond MPI-handle objects, but we
- * should only take that step after seeing good evidence of its use. A general
- * macro (that is portable to non-gcc compilers) will need type information to
- * make the appropriate volatile cast. */
-/* Ideally _GLOBAL would use this too, but we don't want to count on OPA
- * availability in _GLOBAL mode. Instead the GLOBAL critical section should be
- * used. */
-#define MPIU_OBJ_PUBLISH_HANDLE(hnd_lval_, handle_) \
- do { \
- (hnd_lval_) = (handle_); \
- } while (0)
-
-#endif /* !defined(MPIU_THREAD_MULTIPLE_H_INCLUDED) */
diff --git a/src/util/thread/mpiu_thread_multiple.h b/src/util/thread/mpiu_thread_multiple.h
deleted file mode 100644
index 5ac8e65..0000000
--- a/src/util/thread/mpiu_thread_multiple.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_THREAD_MULTIPLE_H_INCLUDED)
-#define MPIU_THREAD_MULTIPLE_H_INCLUDED
-
-#include "mpiu_thread_priv.h"
-
-#define MPIU_THREAD_CHECK_BEGIN if (MPIR_ThreadInfo.isThreaded) {
-#define MPIU_THREAD_CHECK_END }
-
-/* Nonrecursive mutex macros */
-#define MPIUI_THREAD_CS_ENTER_NONRECURSIVE(lockname, mutex) \
- do { \
- int err_; \
- MPIU_THREAD_CHECK_BEGIN; \
- MPIU_DBG_MSG_S(THREAD, TYPICAL, "locking %s", lockname); \
- MPIU_Thread_mutex_lock(&mutex, &err_); \
- MPIU_THREAD_CHECK_END; \
- } while (0)
-
-#define MPIUI_THREAD_CS_EXIT_NONRECURSIVE(lockname, mutex) \
- do { \
- int err_; \
- MPIU_THREAD_CHECK_BEGIN; \
- MPIU_DBG_MSG_S(THREAD, TYPICAL, "unlocking %s", lockname); \
- MPIU_Thread_mutex_unlock(&mutex, &err_); \
- MPIU_THREAD_CHECK_END; \
- } while (0)
-
-#define MPIUI_THREAD_CS_YIELD_NONRECURSIVE(lockname, mutex) \
- do { \
- MPIU_THREAD_CHECK_BEGIN; \
- MPIU_DBG_MSG_S(THREAD, TYPICAL, "yielding %s", lockname); \
- MPIU_Thread_yield(&mutex); \
- MPIU_THREAD_CHECK_END; \
- } while (0)
-
-
-/* Recursive mutex macros */
-/* We don't need to protect the depth variable since it is thread
- * private and sequentially accessed within a thread */
-#define MPIUI_THREAD_CS_ENTER_RECURSIVE(lockname, mutex) \
- do { \
- int depth_; \
- MPIU_THREADPRIV_DECL; \
- MPIU_THREADPRIV_GET; \
- \
- MPIU_THREAD_CHECK_BEGIN; \
- depth_ = MPIU_THREADPRIV_FIELD(lock_depth); \
- MPIU_DBG_MSG_S(THREAD, TYPICAL, "recursive locking %s", lockname); \
- if (depth_ == 0) { \
- MPIUI_THREAD_CS_ENTER_NONRECURSIVE(lockname, mutex); \
- } \
- MPIU_THREADPRIV_FIELD(lock_depth) += 1; \
- MPIU_THREAD_CHECK_END; \
- } while (0)
-
-#define MPIUI_THREAD_CS_EXIT_RECURSIVE(lockname, mutex) \
- do { \
- int depth_; \
- MPIU_THREADPRIV_DECL; \
- MPIU_THREADPRIV_GET; \
- \
- MPIU_THREAD_CHECK_BEGIN; \
- depth_ = MPIU_THREADPRIV_FIELD(lock_depth); \
- MPIU_DBG_MSG_S(THREAD, TYPICAL, "recursive unlocking %s", lockname); \
- if (depth_ == 1) { \
- MPIUI_THREAD_CS_EXIT_NONRECURSIVE(lockname, mutex); \
- } \
- MPIU_THREADPRIV_FIELD(lock_depth) -= 1; \
- MPIU_THREAD_CHECK_END; \
- } while (0)
-
-#define MPIUI_THREAD_CS_YIELD_RECURSIVE MPIUI_THREAD_CS_YIELD_NONRECURSIVE
-
-#define MPIU_THREAD_CS_ENTER(name, mutex) MPIUI_THREAD_CS_ENTER_##name(mutex)
-#define MPIU_THREAD_CS_EXIT(name, mutex) MPIUI_THREAD_CS_EXIT_##name(mutex)
-#define MPIU_THREAD_CS_YIELD(name, mutex) MPIUI_THREAD_CS_YIELD_##name(mutex)
-
-/* Definitions of the thread support for various levels of thread granularity */
-#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_GLOBAL
-#include "mpiu_thread_global.h"
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_PER_OBJECT
-#include "mpiu_thread_pobj.h"
-#elif MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY_LOCK_FREE
-#error lock-free not yet implemented
-#else
-#error Unrecognized thread granularity
-#endif
-
-#endif /* !defined(MPIU_THREAD_MULTIPLE_H_INCLUDED) */
diff --git a/src/util/thread/mpiu_thread_pobj.h b/src/util/thread/mpiu_thread_pobj.h
deleted file mode 100644
index 3e58ff0..0000000
--- a/src/util/thread/mpiu_thread_pobj.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_THREAD_POBJ_H_INCLUDED)
-#define MPIU_THREAD_POBJ_H_INCLUDED
-
-/* There are multiple locks, one for each (major) object */
-
-/* MT FIXME the following description is almost right, but it needs minor
- * updates and revision to account for the COMPLETION CS and other issues in the
- * request */
-/* The fine-grained locking discipline for requests is unfortunately complicated:
- *
- * (1) Raw allocation and deallocation of requests is protected internally by
- * the HANDLEALLOC critical section. This is currently the same as the HANDLE
- * CS, not sure why we have both...
- *
- * (2) Once allocated, a directly allocated request is intially held exclusively
- * by a single thread. Direct allocation is common for send requests, but recv
- * requests are usually created differently.
- *
- * (3) Most receive requests are created as the result of a call to FDP_or_AEU
- * or FDU_or_AEP. Calls to these functions (along with the other receive queue
- * functions) must be inside a MSGQUEUE CS. This CS protects the queue data
- * structures as well as any fields inside the requests while they are in the
- * queue. For example, assume a call to FDU_or_AEP, as in MPID_Recv. If the
- * FDU case hits, the MSGQUEUE CS may be released immediately after the call.
- * If the AEP case hits, however, the MSGQUEUE CS must remain held until any
- * request field manipulation (such as dev.recv_pending_count) is complete.
- *
- * (4) In both the send and receive request cases, there is usually a particular
- * thread in some upper-level code (e.g. MPI_Send) with interest in the
- * completion of the request. This may or may not be a thread that is also
- * making progress on this request (often not). The upper level code must not
- * attempt to access any request fields (such as the status) until completion is
- * signalled by the lower layer.
- *
- * (5) Once removed from the receive queue, the request is once again
- * exclusively owned by the dequeuing thread. From here, the dequeuing thread
- * may do whatever it wants with the request without holding any CS, until it
- * signals the request's completion. Signalling completion indicates that the
- * thread in the upper layer polling on it may access the rest of the fields in
- * the request. This completion signalling is lock-free and must be implemented
- * carefully to work correctly in the face of optimizing compilers and CPUs.
- * The upper-level thread now wholly owns the request until it is deallocated.
- *
- * (6) In ch3:nemesis at least, multithreaded access to send requests is managed
- * by the MPIDCOMM (progress engine) CS. The completion signalling pattern
- * applies here (think MPI_Isend/MPI_Wait).
- *
- * (7) Request cancellation is tricky-ish. For send cancellation, it is
- * possible that the completion counter is actually *incremented* because a
- * pkt is sent to the recipient asking for remote cancellation. By asking for
- * cancellation (of any kind of req), the upper layer gives up its exclusive
- * access to the request and must wait for the completion counter to drop to 0
- * before exclusively accessing the request fields.
- *
- * The completion counter is a reference count, much like the object liveness
- * reference count. However it differs from a normal refcount because of
- * guarantees in the MPI Standard. Applications must not attempt to complete
- * (wait/test/free) a given request concurrently in two separate threads. So
- * checking for cc==0 is safe because only one thread is ever allowed to make
- * that check.
- *
- * A non-zero completion count must always be accompanied by a normal reference
- * that is logically held by the progress engine. Similarly, once the
- * completion counter drops to zero, the progress engine is expected to release
- * its reference.
- */
-/* lock ordering: if MPIDCOMM+MSGQUEUE must be aquired at the same time, then
- * the order should be to acquire MPIDCOMM first, then MSGQUEUE. Release in
- * reverse order. */
-
-/* POBJ locks are all real recursive ops */
-#define MPIUI_THREAD_CS_ENTER_POBJ(mutex) MPIUI_THREAD_CS_ENTER_NONRECURSIVE("POBJ", mutex)
-#define MPIUI_THREAD_CS_EXIT_POBJ(mutex) MPIUI_THREAD_CS_EXIT_NONRECURSIVE("POBJ", mutex)
-#define MPIUI_THREAD_CS_YIELD_POBJ(mutex) MPIUI_THREAD_CS_YIELD_NONRECURSIVE("POBJ", mutex)
-
-/* ALLGRAN locks are all real nonrecursive ops */
-#define MPIUI_THREAD_CS_ENTER_ALLGRAN(mutex) MPIUI_THREAD_CS_ENTER_NONRECURSIVE("ALLGRAN", mutex)
-#define MPIUI_THREAD_CS_EXIT_ALLGRAN(mutex) MPIUI_THREAD_CS_EXIT_NONRECURSIVE("ALLGRAN", mutex)
-#define MPIUI_THREAD_CS_YIELD_ALLGRAN(mutex) MPIUI_THREAD_CS_YIELD_NONRECURSIVE("ALLGRAN", mutex)
-
-/* GLOBAL locks are all NO-OPs */
-#define MPIUI_THREAD_CS_ENTER_GLOBAL(mutex)
-#define MPIUI_THREAD_CS_EXIT_GLOBAL(mutex)
-#define MPIUI_THREAD_CS_YIELD_GLOBAL(mutex)
-
-/* define a type for the completion counter */
-#include "opa_primitives.h"
-
-typedef OPA_int_t MPIU_cc_t;
-
-/* implies no barrier, since this routine should only be used for request
- * initialization */
-static inline void MPIU_cc_set(MPIU_cc_t * cc_ptr, int val)
-{
- if (val == 0) {
- /* values other than 0 do not enforce any ordering, and therefore do not
- * start a HB arc */
- /* MT FIXME using cc_set in this way is sloppy. Sometimes the caller
- * really does know that the cc value may cleared, but more likely this
- * is just a hack to avoid the work of figuring out what the cc value
- * currently is and decrementing it instead. */
- /* barrier ensures that any state written before indicating completion is
- * seen by the thread polling on the cc. If OPA adds store-release
- * semantics, we can convert to that instead. */
- OPA_write_barrier();
- MPL_VG_ANNOTATE_HAPPENS_BEFORE(cc_ptr);
- }
-
-#if defined(MPL_VG_AVAILABLE)
- /* MT subtle: store_int is actually safe to use, but Helgrind/DRD/TSan all
- * view the store/load pair as a race. Using an atomic operation for the
- * store side makes all three happy. DRD & TSan also support
- * ANNOTATE_BENIGN_RACE, but Helgrind does not. */
- OPA_swap_int(cc_ptr, val);
-#else
- OPA_store_int(cc_ptr, val);
-#endif
-}
-
-ATTRIBUTE((unused))
-static MPL_DBG_INLINE_KEYWORD int MPIU_cc_is_complete(MPIU_cc_t * cc_ptr)
-{
- int complete;
-
- complete = (0 == OPA_load_int(cc_ptr));
- if (complete) {
- MPL_VG_ANNOTATE_HAPPENS_AFTER(cc_ptr);
- OPA_read_barrier();
- }
-
- return complete;
-}
-
-/* incomplete_==TRUE iff the cc > 0 after the decr */
-#define MPIU_cc_decr(cc_ptr_, incomplete_) \
- do { \
- OPA_write_barrier(); \
- MPL_VG_ANNOTATE_HAPPENS_BEFORE(cc_ptr_); \
- *(incomplete_) = !OPA_decr_and_test_int(cc_ptr_); \
- /* TODO check if this HA is actually necessary */ \
- if (!*(incomplete_)) { \
- MPL_VG_ANNOTATE_HAPPENS_AFTER(cc_ptr_); \
- } \
- } while (0)
-
-/* MT FIXME does this need a HB/HA annotation? This macro is only used for
- * cancel_send right now. */
-/* was_incomplete_==TRUE iff the cc==0 before the decr */
-#define MPIU_cc_incr(cc_ptr_, was_incomplete_) \
- do { \
- *(was_incomplete_) = OPA_fetch_and_incr_int(cc_ptr_); \
- } while (0)
-
-#define MPIU_cc_get(cc_) OPA_load_int(&(cc_))
-
-/* "publishes" the obj with handle value (handle_) via the handle pointer
- * (hnd_lval_). That is, it is a version of the following statement that fixes
- * memory consistency issues:
- * (hnd_lval_) = (handle_);
- *
- * assumes that the following is always true: typeof(*hnd_lval_ptr_)==int
- */
-/* This could potentially be generalized beyond MPI-handle objects, but we
- * should only take that step after seeing good evidence of its use. A general
- * macro (that is portable to non-gcc compilers) will need type information to
- * make the appropriate volatile cast. */
-/* Ideally _GLOBAL would use this too, but we don't want to count on OPA
- * availability in _GLOBAL mode. Instead the GLOBAL critical section should be
- * used. */
-#define MPIU_OBJ_PUBLISH_HANDLE(hnd_lval_, handle_) \
- do { \
- if (MPIR_ThreadInfo.isThreaded) { \
- /* wmb ensures all read-only object field values are seen before the */ \
- /* handle value is seen at the application level */ \
- OPA_write_barrier(); \
- /* volatile ensures lval is not speculatively read or written */ \
- *(volatile int *)&(hnd_lval_) = (handle_); \
- } \
- else { \
- (hnd_lval_) = (handle_); \
- } \
- } while (0)
-
-#endif /* !defined(MPIU_THREAD_POBJ_H_INCLUDED) */
diff --git a/src/util/thread/mpiu_thread_posix.c b/src/util/thread/mpiu_thread_posix.c
deleted file mode 100644
index f2ec417..0000000
--- a/src/util/thread/mpiu_thread_posix.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* common header includes */
-#include <stdlib.h>
-#include "mpichconf.h" /* defines MPICH_THREAD_PACKAGE_NAME */
-#include "mpl.h"
-#include "mpiutil.h" /* for HAS_NO_SYMBOLS_WARNING */
-#include "mpiu_thread.h"
-
-MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
-
-/* This file currently implements these as a preprocessor if/elif/else sequence.
- * This has the upside of not doing #includes for .c files or (poorly
- * named) .i files. It has the downside of making this file large-ish
- * and a little harder to read in some cases. If this becomes
- * unmanagable at some point these should be separated back out into
- * header files and included as needed. [goodell@ 2009-06-24] */
-
-/* Implementation specific function definitions (usually in the form of macros) */
-#if defined(MPICH_THREAD_PACKAGE_NAME) && (MPICH_THREAD_PACKAGE_NAME == MPICH_THREAD_PACKAGE_POSIX)
-/* begin posix impl */
-
-/* stdio.h is needed for mpimem, which prototypes a few routines that
- take FILE * arguments */
-#include <stdio.h>
-#include "mpimem.h"
-
-/*
- * struct MPIUI_Thread_info
- *
- * Structure used to pass the user function and data to the intermediate
- * function, MPIUI_Thread_start. See comment in
- * MPIUI_Thread_start() header for more information.
- */
-struct MPIUI_Thread_info {
- MPIU_Thread_func_t func;
- void *data;
-};
-
-
-void *MPIUI_Thread_start(void *arg);
-
-
-/*
- * MPIU_Thread_create()
- */
-void MPIU_Thread_create(MPIU_Thread_func_t func, void *data, MPIU_Thread_id_t * idp, int *errp)
-{
- struct MPIUI_Thread_info *thread_info;
- int err = MPIU_THREAD_SUCCESS;
-
- /* FIXME: faster allocation, or avoid it all together? */
- thread_info = (struct MPIUI_Thread_info *) MPIU_Malloc(sizeof(struct MPIUI_Thread_info));
- if (thread_info != NULL) {
- pthread_attr_t attr;
-
- thread_info->func = func;
- thread_info->data = data;
-
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-
- err = pthread_create(idp, &attr, MPIUI_Thread_start, thread_info);
- /* FIXME: convert error to an MPIU_THREAD_ERR value */
-
- pthread_attr_destroy(&attr);
- }
- else {
- err = 1000000000;
- }
-
- if (errp != NULL) {
- *errp = err;
- }
-}
-
-
-/*
- * MPIUI_Thread_start()
- *
- * Start functions in pthreads are expected to return a void pointer. Since
- * our start functions do not return a value we must
- * use an intermediate function to perform call to the user's start function
- * and then return a value of NULL.
- */
-void *MPIUI_Thread_start(void *arg)
-{
- struct MPIUI_Thread_info *thread_info = (struct MPIUI_Thread_info *) arg;
- MPIU_Thread_func_t func = thread_info->func;
- void *data = thread_info->data;
-
- MPIU_Free(arg);
-
- func(data);
-
- return NULL;
-}
-
-/* end posix impl */
-#endif
diff --git a/src/util/thread/mpiu_thread_posix.h b/src/util/thread/mpiu_thread_posix.h
deleted file mode 100644
index 14c052c..0000000
--- a/src/util/thread/mpiu_thread_posix.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/*
- * Threads
- */
-#ifndef MPIU_THREAD_POSIX_H_INCLUDED
-#define MPIU_THREAD_POSIX_H_INCLUDED
-
-#include "mpiu_process_wrappers.h" /* for MPIU_PW_Sched_yield */
-
-#include <errno.h>
-#include <pthread.h>
-#include "opa_primitives.h"
-
-typedef struct {
- pthread_mutex_t mutex;
- OPA_int_t num_queued_threads;
-} MPIU_Thread_mutex_t;
-typedef pthread_cond_t MPIU_Thread_cond_t;
-typedef pthread_t MPIU_Thread_id_t;
-typedef pthread_key_t MPIU_Thread_tls_t;
-
-#if defined(NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL)
-int pthread_mutexattr_settype(pthread_mutexattr_t * attr, int kind);
-#endif /* NEEDS_PTHREAD_MUTEXATTR_SETTYPE_DECL */
-
-typedef void (*MPIU_Thread_func_t) (void *data);
-void MPIU_Thread_create(MPIU_Thread_func_t func, void *data, MPIU_Thread_id_t * id, int *err);
-
-#define MPIU_Thread_exit() \
- do { \
- pthread_exit(NULL); \
- } while (0)
-
-#define MPIU_Thread_self(id_) \
- do { \
- *(id_) = pthread_self(); \
- } while (0)
-
-#define MPIU_Thread_same(id1_, id2_, same_) \
- do { \
- *(same_) = pthread_equal(*(id1_), *(id2_)) ? TRUE : FALSE; \
- } while (0)
-
-#define MPIU_Thread_yield(mutex_ptr_) \
- do { \
- int err; \
- MPIU_DBG_MSG(THREAD,VERBOSE,"enter MPIU_Thread_yield"); \
- if (OPA_load_int(&(mutex_ptr_)->num_queued_threads) == 0) \
- break; \
- MPIU_Thread_mutex_unlock(mutex_ptr_, &err); \
- MPIU_PW_Sched_yield(); \
- MPIU_Thread_mutex_lock(mutex_ptr_, &err); \
- MPIU_DBG_MSG(THREAD,VERBOSE,"exit MPIU_Thread_yield"); \
- } while (0)
-
-
-/*
- * Mutexes
- */
-
-/* FIXME: mutex creation and destruction should be implemented as routines
- because there is no reason to use macros (these are not on the performance
- critical path). Making these macros requires that any code that might use
- these must load all of the pthread.h (or other thread library) support.
- */
-
-/* FIXME: using constant initializer if available */
-
-/* FIXME: convert errors to an MPIU_THREAD_ERR value */
-
-#if !defined(MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE)
-
-#define MPIU_Thread_mutex_create(mutex_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- OPA_store_int(&(mutex_ptr_)->num_queued_threads, 0); \
- err__ = pthread_mutex_init(&(mutex_ptr_)->mutex, NULL); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- *(int *)(err_ptr_) = err__; \
- MPIU_DBG_MSG_P(THREAD,TYPICAL,"Created MPIU_Thread_mutex %p", (mutex_ptr_)); \
- } while (0)
-
-#else /* defined(MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
-
-#define MPIU_Thread_mutex_create(mutex_ptr_, err_ptr_) \
- do { \
- int err__; \
- pthread_mutexattr_t attr__; \
- \
- OPA_store_int(&(mutex_ptr_)->num_queued_threads, 0); \
- pthread_mutexattr_init(&attr__); \
- pthread_mutexattr_settype(&attr__, MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE); \
- err__ = pthread_mutex_init(&(mutex_ptr_)->mutex, &attr__); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_mutex_init", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- *(int *)(err_ptr_) = err__; \
- MPIU_DBG_MSG_P(THREAD,TYPICAL,"Created MPIU_Thread_mutex %p", (mutex_ptr_)); \
- } while (0)
-
-#endif /* defined(MPICH_PTHREAD_MUTEX_ERRORCHECK_VALUE) */
-
-#define MPIU_Thread_mutex_destroy(mutex_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- MPIU_DBG_MSG_P(THREAD,TYPICAL,"About to destroy MPIU_Thread_mutex %p", (mutex_ptr_)); \
- err__ = pthread_mutex_destroy(&(mutex_ptr_)->mutex); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_mutex_destroy", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- *(int *)(err_ptr_) = err__; \
- } while (0)
-
-
-#define MPIU_Thread_mutex_lock(mutex_ptr_, err_ptr_) \
- do { \
- int err__; \
- MPIU_DBG_MSG_P(THREAD,VERBOSE,"enter MPIU_Thread_mutex_lock %p", (mutex_ptr_)); \
- OPA_incr_int(&(mutex_ptr_)->num_queued_threads); \
- err__ = pthread_mutex_lock(&(mutex_ptr_)->mutex); \
- OPA_decr_int(&(mutex_ptr_)->num_queued_threads); \
- if (unlikely(err__)) { \
- MPIU_DBG_MSG_S(THREAD,TERSE," mutex lock error: %s", MPIU_Strerror(err__)); \
- MPL_internal_sys_error_printf("pthread_mutex_lock", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- } \
- *(int *)(err_ptr_) = err__; \
- MPIU_DBG_MSG_P(THREAD,VERBOSE,"exit MPIU_Thread_mutex_lock %p", (mutex_ptr_)); \
- } while (0)
-
-
-#define MPIU_Thread_mutex_unlock(mutex_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- MPIU_DBG_MSG_P(THREAD,VERBOSE,"MPIU_Thread_mutex_unlock %p", (mutex_ptr_)); \
- err__ = pthread_mutex_unlock(&(mutex_ptr_)->mutex); \
- if (unlikely(err__)) { \
- MPIU_DBG_MSG_S(THREAD,TERSE," mutex unlock error: %s", MPIU_Strerror(err__)); \
- MPL_internal_sys_error_printf("pthread_mutex_unlock", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- } \
- *(int *)(err_ptr_) = err__; \
- } while (0)
-
-
-/*
- * Condition Variables
- */
-
-#define MPIU_Thread_cond_create(cond_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- err__ = pthread_cond_init((cond_ptr_), NULL); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_cond_init", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- MPIU_DBG_MSG_P(THREAD,TYPICAL,"Created MPIU_Thread_cond %p", (cond_ptr_)); \
- *(int *)(err_ptr_) = err__; \
- } while (0)
-
-#define MPIU_Thread_cond_destroy(cond_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- MPIU_DBG_MSG_P(THREAD,TYPICAL,"About to destroy MPIU_Thread_cond %p", (cond_ptr_)); \
- err__ = pthread_cond_destroy(cond_ptr_); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_cond_destroy", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- *(int *)(err_ptr_) = err__; \
- } while (0)
-
-#define MPIU_Thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- /* The latest pthread specification says that cond_wait \
- * routines aren't allowed to return EINTR, but some of the \
- * older implementations still do. */ \
- MPIU_DBG_MSG_FMT(THREAD,TYPICAL,(MPIU_DBG_FDEST,"Enter cond_wait on cond=%p mutex=%p",(cond_ptr_),(mutex_ptr_))) \
- do { \
- OPA_incr_int(&(mutex_ptr_)->num_queued_threads); \
- err__ = pthread_cond_wait((cond_ptr_), &(mutex_ptr_)->mutex); \
- OPA_decr_int(&(mutex_ptr_)->num_queued_threads); \
- } while (err__ == EINTR); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_cond_wait", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- \
- *(int *)(err_ptr_) = err__; \
- MPIU_Assert_fmt_msg(err__ == 0, \
- ("cond_wait failed, err=%d (%s)",err__,strerror(err__))); \
- MPIU_DBG_MSG_FMT(THREAD,TYPICAL,(MPIU_DBG_FDEST,"Exit cond_wait on cond=%p mutex=%p",(cond_ptr_),(mutex_ptr_))); \
- } while (0)
-
-#define MPIU_Thread_cond_broadcast(cond_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- MPIU_DBG_MSG_P(THREAD,TYPICAL,"About to cond_broadcast on MPIU_Thread_cond %p", (cond_ptr_)); \
- err__ = pthread_cond_broadcast(cond_ptr_); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_cond_broadcast", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- \
- *(int *)(err_ptr_) = err__; \
- MPIU_Assert_fmt_msg(err__ == 0, \
- ("cond_broadcast failed, err__=%d (%s)",err__,strerror(err__))); \
- } while (0)
-
-#define MPIU_Thread_cond_signal(cond_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- MPIU_DBG_MSG_P(THREAD,TYPICAL,"About to cond_signal on MPIU_Thread_cond %p", (cond_ptr_)); \
- err__ = pthread_cond_signal(cond_ptr_); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_cond_signal", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- \
- *(int *)(err_ptr_) = err__; \
- MPIU_Assert_fmt_msg(err__ == 0, \
- ("cond_signal failed, err__=%d (%s)",err__,strerror(err__))); \
- } while (0)
-
-
-/*
- * Thread Local Storage
- */
-
-#define MPIU_Thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- err__ = pthread_key_create((tls_ptr_), (exit_func_ptr_)); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_key_create", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- \
- *(int *)(err_ptr_) = err__; \
- } while (0)
-
-#define MPIU_Thread_tls_destroy(tls_ptr_, err_ptr_) \
- do { \
- int err__; \
- \
- err__ = pthread_key_delete(*(tls_ptr_)); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_key_delete", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- \
- *(int *)(err_ptr_) = err__; \
- } while (0)
-
-#define MPIU_Thread_tls_set(tls_ptr_, value_, err_ptr_) \
- do { \
- int err__; \
- \
- err__ = pthread_setspecific(*(tls_ptr_), (value_)); \
- if (unlikely(err__)) \
- MPL_internal_sys_error_printf("pthread_setspecific", err__, \
- " %s:%d\n", __FILE__, __LINE__); \
- \
- *(int *)(err_ptr_) = err__; \
- MPIU_Assert_fmt_msg(err__ == 0, \
- ("tls_set failed, err__=%d (%s)",err__,strerror(err__))); \
- } while (0)
-
-#define MPIU_Thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
- do { \
- *(value_ptr_) = pthread_getspecific(*(tls_ptr_)); \
- \
- *(int *)(err_ptr_) = MPIU_THREAD_SUCCESS; \
- } while (0)
-
-#endif /* MPIU_THREAD_POSIX_H_INCLUDED */
diff --git a/src/util/thread/mpiu_thread_priv.h b/src/util/thread/mpiu_thread_priv.h
deleted file mode 100644
index 1e53b3d..0000000
--- a/src/util/thread/mpiu_thread_priv.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_THREAD_PRIV_H_INCLUDED)
-#define MPIU_THREAD_PRIV_H_INCLUDED
-
-/* The following three macros define a way to portably access thread-private
- storage in MPICH, and avoid extra overhead when MPICH is single
- threaded
- INITKEY - Create the key. Must happen *before* the other threads
- are created
- INIT - Create the thread-private storage. Must happen once per thread
- DECL - Declare local variables
- GET - Access the thread-private storage
- FIELD - Access the thread-private field (by name)
- FINALIZE - to be invoked when all threads no longer need access to the thread
- local storage, such as at MPI_Finalize time
-
- The "DECL" is the extern so that there is always a statement for
- the declaration.
-*/
-
-#if !defined(MPICH_TLS_SPECIFIER)
-/* We need to provide a function that will cleanup the storage attached
- * to the key. */
-void MPIUI_Cleanup_tls(void *a);
-
-/* In the case where the thread level is set in MPI_Init_thread, we
- need a blended version of the non-threaded and the thread-multiple
- definitions.
-
- The approach is to have TWO MPIUI_Per_thread_t pointers. One is local
- (The MPIU_THREADPRIV_DECL is used in the routines local definitions),
- as in the threaded version of these macros. This is set by using a routine
- to get thread-private storage. The second is a preallocated, extern
- MPIUI_Per_thread_t struct, as in the single threaded case. Based on
- MPIR_Process.isThreaded, one or the other is used.
-
- */
-/* For the single threaded case, we use a preallocated structure
- This structure is allocated in src/mpi/init/initthread.c */
-extern MPIUI_Per_thread_t MPIUI_ThreadSingle;
-
-#define MPIU_THREADPRIV_INITKEY \
- do { \
- if (MPIR_ThreadInfo.isThreaded) { \
- int initkey_err_; \
- MPIU_Thread_tls_create(MPIUI_Cleanup_tls,&MPIR_ThreadInfo.thread_storage,&initkey_err_); \
- MPIU_Assert(initkey_err_ == 0); \
- } \
- } while (0)
-
-#define MPIU_THREADPRIV_INIT \
- do { \
- if (MPIR_ThreadInfo.isThreaded) { \
- int init_err_; \
- MPIUI_Thread_ptr = (MPIUI_Per_thread_t *) MPIU_Calloc(1, sizeof(MPIUI_Per_thread_t)); \
- MPIU_Assert(MPIUI_Thread_ptr); \
- MPIU_Thread_tls_set(&MPIR_ThreadInfo.thread_storage, (void *)MPIUI_Thread_ptr, &init_err_); \
- MPIU_Assert(init_err_ == 0); \
- } \
- } while (0)
-
-#define MPIU_THREADPRIV_GET \
- do { \
- if (!MPIUI_Thread_ptr) { \
- if (MPIR_ThreadInfo.isThreaded) { \
- int get_err_; \
- MPIU_Thread_tls_get(&MPIR_ThreadInfo.thread_storage, (void **) &MPIUI_Thread_ptr, &get_err_); \
- MPIU_Assert(get_err_ == 0); \
- if (!MPIUI_Thread_ptr) { \
- MPIU_THREADPRIV_INIT; /* subtle, sets MPIUI_Thread_ptr */ \
- } \
- } \
- else { \
- MPIUI_Thread_ptr = &MPIUI_ThreadSingle; \
- } \
- MPIU_Assert(MPIUI_Thread_ptr); \
- } \
- } while (0)
-
-/* common definitions when using MPIU_Thread-based TLS */
-#define MPIU_THREADPRIV_DECL MPIUI_Per_thread_t *MPIUI_Thread_ptr = NULL
-#define MPIU_THREADPRIV_FIELD(a_) (MPIUI_Thread_ptr->a_)
-#define MPIU_THREADPRIV_FINALIZE \
- do { \
- MPIU_THREADPRIV_DECL; \
- if (MPIR_ThreadInfo.isThreaded) { \
- int tpf_err_; /* unique name to not conflict with vars in called macros */ \
- MPIU_THREADPRIV_GET; \
- MPIU_Free(MPIUI_Thread_ptr); \
- MPIU_Thread_tls_set(&MPIR_ThreadInfo.thread_storage,NULL, &tpf_err_); \
- MPIU_Assert(tpf_err_ == 0); \
- MPIU_Thread_tls_destroy(&MPIR_ThreadInfo.thread_storage,&tpf_err_); \
- MPIU_Assert(tpf_err_ == 0); \
- } \
- } while (0)
-
-#else /* defined(MPICH_TLS_SPECIFIER) */
-
-/* We have proper thread-local storage (TLS) support from the compiler, which
- * should yield the best performance and simplest code, so we'll use that. */
-extern MPICH_TLS_SPECIFIER MPIUI_Per_thread_t MPIUI_Thread;
-
-#define MPIU_THREADPRIV_INITKEY
-#define MPIU_THREADPRIV_INIT
-#define MPIU_THREADPRIV_DECL
-#define MPIU_THREADPRIV_GET
-#define MPIU_THREADPRIV_FIELD(a_) (MPIUI_Thread.a_)
-#define MPIU_THREADPRIV_FINALIZE do {} while (0)
-
-#endif /* defined(MPICH_TLS_SPECIFIER) */
-
-#endif /* !defined(MPIU_THREAD_PRIV_H_INCLUDED) */
diff --git a/src/util/thread/mpiu_thread_single.h b/src/util/thread/mpiu_thread_single.h
deleted file mode 100644
index c16f3fb..0000000
--- a/src/util/thread/mpiu_thread_single.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_THREAD_SINGLE_H_INCLUDED)
-#define MPIU_THREAD_SINGLE_H_INCLUDED
-
-#define MPIU_THREAD_CHECK_BEGIN
-#define MPIU_THREAD_CHECK_END
-
-/* If single threaded, make this point at a pre-allocated segment.
- This structure is allocated in src/mpi/init/initthread.c */
-extern MPIUI_Per_thread_t MPIUI_Thread;
-
-#define MPIU_THREADPRIV_INITKEY
-#define MPIU_THREADPRIV_INIT
-#define MPIU_THREADPRIV_DECL
-#define MPIU_THREADPRIV_GET
-#define MPIU_THREADPRIV_FIELD(a_) (MPIUI_Thread.a_)
-
-/* Helper definitions for the default macro definitions */
-#define MPIU_THREAD_CS_ENTER(_name,_context)
-#define MPIU_THREAD_CS_EXIT(_name,_context)
-#define MPIU_THREAD_CS_YIELD(_name,_context)
-
-
-/* define a type for the completion counter */
-typedef int MPIU_cc_t;
-
-#define MPIU_cc_get(cc_) (cc_)
-#define MPIU_cc_set(cc_ptr_, val_) (*(cc_ptr_)) = (val_)
-#define MPIU_cc_is_complete(cc_ptr_) (0 == *(cc_ptr_))
-
-#define MPIU_cc_incr(cc_ptr_, was_incomplete_) \
- do { \
- *(was_incomplete_) = (*(cc_ptr_))++; \
- } while (0)
-
-#define MPIU_cc_decr(cc_ptr_, incomplete_) \
- do { \
- *(incomplete_) = --(*(cc_ptr_)); \
- } while (0)
-
-
-/* "publishes" the obj with handle value (handle_) via the handle pointer
- * (hnd_lval_). That is, it is a version of the following statement that fixes
- * memory consistency issues:
- * (hnd_lval_) = (handle_);
- *
- * assumes that the following is always true: typeof(*hnd_lval_ptr_)==int
- */
-/* This could potentially be generalized beyond MPI-handle objects, but we
- * should only take that step after seeing good evidence of its use. A general
- * macro (that is portable to non-gcc compilers) will need type information to
- * make the appropriate volatile cast. */
-/* Ideally _GLOBAL would use this too, but we don't want to count on OPA
- * availability in _GLOBAL mode. Instead the GLOBAL critical section should be
- * used. */
-#define MPIU_OBJ_PUBLISH_HANDLE(hnd_lval_, handle_) \
- do { \
- (hnd_lval_) = (handle_); \
- } while (0)
-
-#endif /* !defined(MPIU_THREAD_SINGLE_H_INCLUDED) */
diff --git a/src/util/thread/mpiu_thread_solaris.c b/src/util/thread/mpiu_thread_solaris.c
deleted file mode 100644
index 3795f14..0000000
--- a/src/util/thread/mpiu_thread_solaris.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* common header includes */
-#include <stdlib.h>
-#include "mpichconf.h" /* defines MPICH_THREAD_PACKAGE_NAME */
-#include "mpl.h"
-#include "mpiutil.h" /* for HAS_NO_SYMBOLS_WARNING */
-#include "mpiu_thread.h"
-
-MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
-
-/* This file currently implements these as a preprocessor if/elif/else sequence.
- * This has the upside of not doing #includes for .c files or (poorly
- * named) .i files. It has the downside of making this file large-ish
- * and a little harder to read in some cases. If this becomes
- * unmanagable at some point these should be separated back out into
- * header files and included as needed. [goodell@ 2009-06-24] */
-
-/* Implementation specific function definitions (usually in the form of macros) */
-
-#if defined(MPICH_THREAD_PACKAGE_NAME) && (MPICH_THREAD_PACKAGE_NAME == MPICH_THREAD_PACKAGE_SOLARIS)
-/* begin solaris impl */
-
-/*
- * struct MPIUI_Thread_info
- *
- * Structure used to pass the user function and data to the intermediate function, MPIUI_Thread_start. See comment in
- * MPIUI_Thread_start() header for more information.
- */
-struct MPIUI_Thread_info {
- MPIU_Thread_func_t func;
- void *data;
-};
-
-
-void *MPIUI_Thread_start(void *arg);
-
-
-/*
- * MPIU_Thread_create()
- */
-void MPIU_Thread_create(MPIU_Thread_func_t func, void *data, MPIU_Thread_id_t * idp, int *errp)
-{
- struct MPIUI_Thread_info *thread_info;
- int err = MPIU_THREAD_SUCCESS;
-
- /* FIXME: faster allocation, or avoid it all together? */
- thread_info = (struct MPIUI_Thread_info *) MPIU_Malloc(sizeof(struct MPIUI_Thread_info));
- if (thread_info != NULL) {
- thread_info->func = func;
- thread_info->data = data;
-
- err = thr_create(NULL, 0, MPIUI_Thread_start, thread_info, THR_DETACHED, idp);
- /* FIXME: convert error to an MPIU_THREAD_ERR value */
- }
- else {
- err = 1000000000;
- }
-
- if (errp != NULL) {
- *errp = err;
- }
-}
-
-
-/*
- * MPIUI_Thread_start()
- *
- * Start functions in Solaris threads are expected to return a void pointer. Since our start functions do not return a value we
- * must use an intermediate function to perform call to the user's start function and then return a value of NULL.
- */
-void *MPIUI_Thread_start(void *arg)
-{
- struct MPIUI_Thread_info *thread_info = (struct MPIUI_Thread_info *) arg;
- MPIU_Thread_func_t func = thread_info->func;
- void *data = thread_info->data;
-
- MPIU_Free(arg);
-
- func(data);
-
- return NULL;
-}
-
-/* end solaris impl */
-#endif
diff --git a/src/util/thread/mpiu_thread_solaris.h b/src/util/thread/mpiu_thread_solaris.h
deleted file mode 100644
index e723c91..0000000
--- a/src/util/thread/mpiu_thread_solaris.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIU_THREAD_SOLARIS_H_INCLUDED
-#define MPIU_THREAD_SOLARIS_H_INCLUDED
-
-#include <thread.h>
-#include <synch.h>
-
-typedef mutex_t MPIU_Thread_mutex_t;
-typedef cond_t MPIU_Thread_cond_t;
-typedef thread_t MPIU_Thread_id_t;
-
-typedef void (*MPIU_Thread_func_t) (void *data);
-void MPIU_Thread_create(MPIU_Thread_func_t func, void *data, MPIU_Thread_id_t * id, int *err);
-
-/*
- * Threads
- */
-
-#define MPIU_Thread_exit() \
- do { \
- thr_exit(NULL); \
- } while (0)
-
-#define MPIU_Thread_self(id_ptr_) \
- do { \
- *(id_ptr_) = thr_self(); \
- } while (0)
-
-#define MPIU_Thread_same(id1_ptr_, id2_ptr_, same_ptr_) \
- do { \
- *(same_ptr_) = (*(id1_ptr_) == *(id2_ptr_)) ? TRUE : FALSE; \
- } while (0)
-
-#define MPIU_Thread_yield(mutex_ptr_) \
- do { \
- int err; \
- MPIU_Thread_mutex_unlock(mutex_ptr_, &err); \
- thr_yield(); \
- MPIU_Thread_mutex_lock(mutex_ptr_, &err); \
- } while (0)
-
-
-/*
- * Mutexes
- */
-
-#define MPIU_Thread_mutex_create(mutex_ptr_, err_ptr_) \
- do { \
- *(mutex_ptr_) = DEFAULTMUTEX; \
- if ((err_ptr_) == NULL) { \
- *(err_ptr_) = MPIU_THREAD_SUCCESS; \
- } \
- } while (0)
-
-#define MPIU_Thread_mutex_destroy(mutex_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- mutex_destroy(mutex_ptr_); \
- } \
- else { \
- *(err_ptr_) = mutex_destroy(mutex_ptr_); \
- /* FIXME: convert error to an MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#define MPIU_Thread_mutex_lock(mutex_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- mutex_lock(mutex_ptr_); \
- } \
- else { \
- *(err_ptr_) = mutex_lock(mutex_ptr_); \
- /* FIXME: convert error to an MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#define MPIU_Thread_mutex_unlock(mutex_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- mutex_unlock(mutex_ptr_); \
- } \
- else { \
- *(err_ptr_) = mutex_unlock(mutex_ptr_); \
- /* FIXME: convert error to an MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-
-/*
- * Condition Variables
- */
-
-#define MPIU_Thread_cond_create(cond_ptr_, err_ptr_) \
- do { \
- *(cond_ptr_) = DEFAULTCV; \
- if ((err_ptr_) == NULL) { \
- *(err_ptr_) = MPIU_THREAD_SUCCESS; \
- } \
- } while (0)
-
-#define MPIU_Thread_cond_destroy(cond_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- cond_destroy(cond_ptr_); \
- } \
- else { \
- *(err_ptr_) = cond_destroy(cond_ptr_); \
- /* FIXME: convert error to a MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#define MPIU_Thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- cond_wait((cond_ptr_), (mutex_ptr_)); \
- } \
- else { \
- *(err_ptr_) = cond_wait((cond_ptr_), (mutex_ptr_)); \
- /* FIXME: convert error to a MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#define MPIU_Thread_cond_broadcast(cond_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- cond_broadcast(cond_ptr_); \
- } \
- else { \
- *(err_ptr_) = cond_broadcast(cond_ptr_); \
- /* FIXME: convert error to a MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#define MPIU_Thread_cond_signal(cond_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- cond_signal(cond_ptr_); \
- } \
- else { \
- *(err_ptr_) = cond_signal(cond_ptr_); \
- /* FIXME: convert error to a MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-
-/*
- * Thread Local Storage
- */
-#define MPIU_Thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- thr_keycreate((tls_ptr), (exit_func_ptr)); \
- } \
- else { \
- *(err_ptr_) = thr_keycreate((tls_ptr), (exit_func_ptr)); \
- /* FIXME: convert error to a MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#define MPIU_Thread_tls_destroy(tls_ptr_, err_ptr_) \
- do { \
- /* \
- * FIXME: Solaris threads does not have a key destroy. We \
- * need to create equivalent functionality to prevent a \
- * callback from occuring when a thread exits after the TLS is \
- * destroyed. This is the only way to prevent subsystems that \
- * have shutdown from continuing to receive callbacks. \
- */ \
- if ((err_ptr_) != NULL) { \
- *(err_ptr) = MPIU_THREAD_SUCCESS; \
- } \
- } while (0)
-
-#define MPIU_Thread_tls_set(tls_ptr, value_) \
- do { \
- if ((err_ptr_) == NULL) { \
- thr_setspecific(*(tls_ptr), (value_)); \
- } \
- else { \
- *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_)); \
- /* FIXME: convert error to a MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#define MPIU_Thread_tls_get(tls_ptr, value_ptr_) \
- do { \
- if ((err_ptr_) == NULL) { \
- thr_setspecific(*(tls_ptr), (value_ptr_)); \
- } \
- else { \
- *(err_ptr_) = thr_setspecific(*(tls_ptr), (value_ptr_)); \
- /* FIXME: convert error to a MPIU_THREAD_ERR value */ \
- } \
- } while (0)
-
-#endif /* MPIU_THREAD_SOLARIS_H_INCLUDED */
diff --git a/src/util/thread/mpiu_thread_win.c b/src/util/thread/mpiu_thread_win.c
deleted file mode 100644
index bcf1891..0000000
--- a/src/util/thread/mpiu_thread_win.c
+++ /dev/null
@@ -1,370 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* common header includes */
-#include <stdlib.h>
-#include "mpichconf.h" /* defines MPICH_THREAD_PACKAGE_NAME */
-#include "mpl.h"
-#include "mpiutil.h" /* for HAS_NO_SYMBOLS_WARNING */
-#include "mpiu_thread.h"
-
-MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING;
-
-/* This file currently implements these as a preprocessor if/elif/else sequence.
- * This has the upside of not doing #includes for .c files or (poorly
- * named) .i files. It has the downside of making this file large-ish
- * and a little harder to read in some cases. If this becomes
- * unmanagable at some point these should be separated back out into
- * header files and included as needed. [goodell@ 2009-06-24] */
-
-/* Implementation specific function definitions (usually in the form of macros) */
-
-#if defined(MPICH_THREAD_PACKAGE_NAME) && (MPICH_THREAD_PACKAGE_NAME == MPICH_THREAD_PACKAGE_WIN)
-/* begin win impl */
-
-#include "mpimem.h"
-
-/*
- * struct MPIUI_Thread_info
- *
- * Structure used to pass the user function and data to the intermediate function, MPIUI_Thread_start. See comment in
- * MPIUI_Thread_start() header for more information.
- */
-struct MPIUI_Thread_info {
- MPIU_Thread_func_t func;
- void *data;
-};
-
-
-DWORD WINAPI MPIUI_Thread_start(LPVOID arg);
-
-/*
- * MPIU_Thread_create()
- */
-void MPIU_Thread_create(MPIU_Thread_func_t func, void *data, MPIU_Thread_id_t * idp, int *errp)
-{
- struct MPIUI_Thread_info *thread_info;
- int err = MPIU_THREAD_SUCCESS;
-
- thread_info = (struct MPIUI_Thread_info *) MPIU_Malloc(sizeof(struct MPIUI_Thread_info));
- if (thread_info != NULL) {
- thread_info->func = func;
- thread_info->data = data;
- *idp = CreateThread(NULL, 0, MPIUI_Thread_start, thread_info, 0, NULL);
- if (*idp == NULL) {
- err = GetLastError();
- }
- }
- else {
- err = 1000000000;
- }
-
- if (errp != NULL) {
- *errp = err;
- }
-}
-
-
-/*
- * MPIUI_Thread_start()
- *
- * Start functions in Windows are expected to return a DWORD. Since our start functions do not return a value we must
- * use an intermediate function to perform the call to the user's start function and then return a value of 0.
- */
-DWORD WINAPI MPIUI_Thread_start(LPVOID arg)
-{
- struct MPIUI_Thread_info *thread_info = (struct MPIUI_Thread_info *) arg;
- MPIU_Thread_func_t func = thread_info->func;
- void *data = thread_info->data;
-
- MPIU_Free(arg);
-
- func(data);
-
- return 0;
-}
-
-void MPIU_Thread_exit()
-{
- ExitThread(0);
-}
-
-void MPIU_Thread_self(MPIU_Thread_id_t * id)
-{
- *id = GetCurrentThread();
-}
-
-void MPIU_Thread_same(MPIU_Thread_id_t * id1, MPIU_Thread_id_t * id2, int *same)
-{
- *same = (*id1 == *id2) ? TRUE : FALSE;
-}
-
-void MPIU_Thread_yield(MPIU_Thread_mutex_t * mutex)
-{
- int err;
-
- MPIU_Thread_mutex_unlock(mutex, &err);
- Sleep(0);
- MPIU_Thread_mutex_lock(mutex, &err);
-}
-
-/*
- * Mutexes
- */
-
-void MPIU_Thread_mutex_create(MPIU_Thread_mutex_t * mutex, int *err)
-{
- *mutex = CreateMutex(NULL, FALSE, NULL);
- if (err != NULL) {
- if (*mutex == NULL) {
- *err = GetLastError();
- }
- else {
- *err = MPIU_THREAD_SUCCESS;
- }
- }
-}
-
-void MPIU_Thread_mutex_destroy(MPIU_Thread_mutex_t * mutex, int *err)
-{
- BOOL result;
-
- result = CloseHandle(*mutex);
- if (err != NULL) {
- if (result) {
- *err = MPIU_THREAD_SUCCESS;
- }
- else {
- *err = GetLastError();
- }
- }
-}
-
-void MPIU_Thread_mutex_lock(MPIU_Thread_mutex_t * mutex, int *err)
-{
- DWORD result;
-
- result = WaitForSingleObject(*mutex, INFINITE);
- if (err != NULL) {
- if (result == WAIT_OBJECT_0) {
- *err = MPIU_THREAD_SUCCESS;
- }
- else {
- if (result == WAIT_FAILED) {
- *err = GetLastError();
- }
- else {
- *err = result;
- }
- }
- }
-}
-
-void MPIU_Thread_mutex_unlock(MPIU_Thread_mutex_t * mutex, int *err)
-{
- BOOL result;
-
- result = ReleaseMutex(*mutex);
- if (err != NULL) {
- if (result) {
- *err = MPIU_THREAD_SUCCESS;
- }
- else {
- *err = GetLastError();
- }
- }
-}
-
-
-/*
- * Condition Variables
- */
-
-void MPIU_Thread_cond_create(MPIU_Thread_cond_t * cond, int *err)
-{
- /* Create a tls slot to store the events used to wakeup each thread in cond_bcast or cond_signal */
- MPIU_Thread_tls_create(NULL, &cond->tls, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- /* Create a mutex to protect the fifo queue. This is required because the mutex passed in to the
- * cond functions need not be the same in each thread. */
- MPIU_Thread_mutex_create(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- cond->fifo_head = NULL;
- cond->fifo_tail = NULL;
- if (err != NULL) {
- *err = MPIU_THREAD_SUCCESS;
- }
-}
-
-void MPIU_Thread_cond_destroy(MPIU_Thread_cond_t * cond, int *err)
-{
- MPIUI_Win_thread_cond_fifo_t *iter;
-
- while (cond->fifo_head) {
- iter = cond->fifo_head;
- cond->fifo_head = cond->fifo_head->next;
- MPIU_Free(iter);
- }
- MPIU_Thread_mutex_destroy(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- MPIU_Thread_tls_destroy(&cond->tls, err);
- /*
- * if (err != NULL)
- * {
- * *err = MPIU_THREAD_SUCCESS;
- * }
- */
-}
-
-void MPIU_Thread_cond_wait(MPIU_Thread_cond_t * cond, MPIU_Thread_mutex_t * mutex, int *err)
-{
- HANDLE event;
- DWORD result;
- MPIU_Thread_tls_get(&cond->tls, &event, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- if (event == NULL) {
- event = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (event == NULL) {
- if (err != NULL) {
- *err = GetLastError();
- }
- return;
- }
- MPIU_Thread_tls_set(&cond->tls, event, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- }
- MPIU_Thread_mutex_lock(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- if (cond->fifo_tail == NULL) {
- cond->fifo_tail = (MPIUI_Win_thread_cond_fifo_t *) MPIU_Malloc(sizeof(MPIUI_Win_thread_cond_fifo_t));
- cond->fifo_head = cond->fifo_tail;
- }
- else {
- cond->fifo_tail->next =
- (MPIUI_Win_thread_cond_fifo_t *) MPIU_Malloc(sizeof(MPIUI_Win_thread_cond_fifo_t));
- cond->fifo_tail = cond->fifo_tail->next;
- }
- if (cond->fifo_tail == NULL) {
- if (err != NULL) {
- *err = -1;
- }
- return;
- }
- cond->fifo_tail->event = event;
- cond->fifo_tail->next = NULL;
- MPIU_Thread_mutex_unlock(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- MPIU_Thread_mutex_unlock(mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- result = WaitForSingleObject(event, INFINITE);
- if (err != NULL) {
- if (result != WAIT_OBJECT_0) {
- if (result == WAIT_FAILED) {
- *err = GetLastError();
- }
- else {
- *err = result;
- }
- return;
- }
- }
- result = ResetEvent(event);
- if (!result && err != NULL) {
- *err = GetLastError();
- return;
- }
- MPIU_Thread_mutex_lock(mutex, err);
- /*
- * if (err != NULL)
- * {
- * *err = MPIU_THREAD_SUCCESS;
- * }
- */
-}
-
-void MPIU_Thread_cond_broadcast(MPIU_Thread_cond_t * cond, int *err)
-{
- MPIUI_Win_thread_cond_fifo_t *fifo, *temp;
- MPIU_Thread_mutex_lock(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- /* remove the fifo queue from the cond variable */
- fifo = cond->fifo_head;
- cond->fifo_head = cond->fifo_tail = NULL;
- MPIU_Thread_mutex_unlock(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- /* signal each event in the fifo queue */
- while (fifo) {
- if (!SetEvent(fifo->event) && err != NULL) {
- *err = GetLastError();
- /* lost memory */
- return;
- }
- temp = fifo;
- fifo = fifo->next;
- MPIU_Free(temp);
- }
- if (err != NULL) {
- *err = MPIU_THREAD_SUCCESS;
- }
-}
-
-void MPIU_Thread_cond_signal(MPIU_Thread_cond_t * cond, int *err)
-{
- MPIUI_Win_thread_cond_fifo_t *fifo;
- MPIU_Thread_mutex_lock(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- fifo = cond->fifo_head;
- if (fifo) {
- cond->fifo_head = cond->fifo_head->next;
- if (cond->fifo_head == NULL)
- cond->fifo_tail = NULL;
- }
- MPIU_Thread_mutex_unlock(&cond->fifo_mutex, err);
- if (err != NULL && *err != MPIU_THREAD_SUCCESS) {
- return;
- }
- if (fifo) {
- if (!SetEvent(fifo->event) && err != NULL) {
- *err = GetLastError();
- MPIU_Free(fifo);
- return;
- }
- MPIU_Free(fifo);
- }
- if (err != NULL) {
- *err = MPIU_THREAD_SUCCESS;
- }
-}
-
-
-/*
- * Thread Local Storage
- * - Defined in src/include/thread/mpiu_thread_win_funcs.h
- */
-/* end win impl */
-#endif
diff --git a/src/util/thread/mpiu_thread_win.h b/src/util/thread/mpiu_thread_win.h
deleted file mode 100644
index 6ec0003..0000000
--- a/src/util/thread/mpiu_thread_win.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPIU_THREAD_WIN_H_INCLUDED
-#define MPIU_THREAD_WIN_H_INCLUDED
-
-#define WIN32_LEAN_AND_MEAN
-
-#include <windows.h>
-
-typedef HANDLE MPIU_Thread_mutex_t;
-typedef HANDLE MPIU_Thread_id_t;
-typedef DWORD MPIU_Thread_tls_t;
-
-typedef struct MPIUI_Win_thread_cond_fifo_t {
- HANDLE event;
- struct MPIUI_Win_thread_cond_fifo_t *next;
-} MPIUI_Win_thread_cond_fifo_t;
-typedef struct MPIU_Thread_cond_t {
- MPIU_Thread_tls_t tls;
- MPIU_Thread_mutex_t fifo_mutex;
- MPIUI_Win_thread_cond_fifo_t *fifo_head, *fifo_tail;
-} MPIU_Thread_cond_t;
-
-typedef void (*MPIU_Thread_func_t) (void *data);
-
-void MPIU_Thread_create(MPIU_Thread_func_t func, void *data, MPIU_Thread_id_t * id, int *err);
-void MPIU_Thread_exit(void);
-void MPIU_Thread_self(MPIU_Thread_id_t * id);
-void MPIU_Thread_same(MPIU_Thread_id_t * id1, MPIU_Thread_id_t * id2, int *same);
-void MPIU_Thread_yield(void);
-
-void MPIU_Thread_mutex_create(MPIU_Thread_mutex_t * mutex, int *err);
-void MPIU_Thread_mutex_destroy(MPIU_Thread_mutex_t * mutex, int *err);
-void MPIU_Thread_mutex_lock(MPIU_Thread_mutex_t * mutex, int *err);
-void MPIU_Thread_mutex_unlock(MPIU_Thread_mutex_t * mutex, int *err);
-
-void MPIU_Thread_cond_create(MPIU_Thread_cond_t * cond, int *err);
-void MPIU_Thread_cond_destroy(MPIU_Thread_cond_t * cond, int *err);
-void MPIU_Thread_cond_wait(MPIU_Thread_cond_t * cond, MPIU_Thread_mutex_t * mutex, int *err);
-void MPIU_Thread_cond_broadcast(MPIU_Thread_cond_t * cond, int *err);
-void MPIU_Thread_cond_signal(MPIU_Thread_cond_t * cond, int *err);
-
-/*
- * Thread Local Storage
- */
-
-#define MPIU_Thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_) \
- do { \
- *(tls_ptr_) = TlsAlloc(); \
- if ((err_ptr_) != NULL) { \
- if (*(tls_ptr_) == TLS_OUT_OF_INDEXES) { \
- *(int *)(err_ptr_) = GetLastError(); \
- } \
- else { \
- *(int *)(err_ptr_) = MPIU_THREAD_SUCCESS; \
- } \
- } \
- } while (0)
-
-#define MPIU_Thread_tls_destroy(tls_ptr_, err_ptr_) \
- do { \
- BOOL result__; \
- result__ = TlsFree(*(tls_ptr_)); \
- if ((err_ptr_) != NULL) { \
- if (result__) { \
- *(int *)(err_ptr_) = MPIU_THREAD_SUCCESS; \
- } \
- else { \
- *(int *)(err_ptr_) = GetLastError(); \
- } \
- } \
- } while (0)
-
-#define MPIU_Thread_tls_set(tls_ptr_, value_, err_ptr_) \
- do { \
- BOOL result__; \
- result__ = TlsSetValue(*(tls_ptr_), (value_)); \
- if ((err_ptr_) != NULL) { \
- if (result__) { \
- *(int *)(err_ptr_) = MPIU_THREAD_SUCCESS; \
- } \
- else { \
- *(int *)(err_ptr_) = GetLastError(); \
- } \
- } \
- } while (0)
-
-#define MPIU_Thread_tls_get(tls_ptr_, value_ptr_, err_ptr_) \
- do { \
- *((void **)value_ptr_) = TlsGetValue(*(tls_ptr_)); \
- if ((err_ptr_) != NULL) { \
- if (*(value_ptr_) == 0 && GetLastError() != NO_ERROR) { \
- *(int *)(err_ptr_) = GetLastError(); \
- } \
- else { \
- *(int *)(err_ptr_) = MPIU_THREAD_SUCCESS; \
- } \
- } \
- } while (0)
-
-#endif /* MPIU_THREAD_WIN_H_INCLUDED */
diff --git a/src/util/timers/.state-cache b/src/util/timers/.state-cache
deleted file mode 100644
index 5973cb0..0000000
--- a/src/util/timers/.state-cache
+++ /dev/null
@@ -1,7 +0,0 @@
-<dir>
-<file name="mpiu_timer.c" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="mpiu_timer.c">
-</fileinfo>
-</data>
diff --git a/src/util/timers/Makefile.mk b/src/util/timers/Makefile.mk
deleted file mode 100644
index dc4e728..0000000
--- a/src/util/timers/Makefile.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-AM_CPPFLAGS += -I$(top_builddir)/src/util/timers
-nodist_noinst_HEADERS += src/util/timers/mpiu_timer.h
-mpi_core_sources += src/util/timers/mpiu_timer.c
diff --git a/src/util/timers/mpiu_timer.c b/src/util/timers/mpiu_timer.c
deleted file mode 100644
index ad4760b..0000000
--- a/src/util/timers/mpiu_timer.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "mpiu_timer.h"
-
-/*
- * For timers that do not have defined resolutions, compute the resolution
- * by sampling the clock itself.
- *
- */
-static double tickval = -1.0;
-
-static void init_wtick(void) ATTRIBUTE((unused));
-static void init_wtick(void)
-{
- double timediff;
- MPIU_Time_t t1, t2;
- int cnt;
- int icnt;
-
- tickval = 1.0e6;
- for (icnt = 0; icnt < 10; icnt++) {
- cnt = 1000;
- MPIU_Wtime(&t1);
- do {
- MPIU_Wtime(&t2);
- MPIU_Wtime_diff(&t1, &t2, &timediff);
- if (timediff > 0)
- break;
- }
- while (cnt--);
- if (cnt && timediff > 0.0 && timediff < tickval) {
- MPIU_Wtime_diff(&t1, &t2, &tickval);
- }
- }
-}
-
-#if MPICH_TIMER_KIND == MPIU_GETHRTIME
-/*
- * MPIU_Time_t is hrtime_t, which under Solaris is defined as a 64bit
- * longlong_t . However, the Solaris header files will define
- * longlong_t as a structure in some circumstances, making arithmetic
- * with hrtime_t invalid. FIXME.
- * To fix this, we'll need to test hrtime_t arithmetic in the configure
- * program, and if it fails, check for the Solaris defintions (
- * union { double _d; int32_t _l[2]; }. Alternately, we may decide that
- * if hrtime_t is not supported, then neither is gethrtime.
- *
- * Note that the Solaris sys/types.h file *assumes* that no other compiler
- * supports an 8 byte long long. We can also cast hrtime_t to long long
- * if long long is available and 8 bytes.
- */
-void MPIU_Wtime(MPIU_Time_t * timeval)
-{
- *timeval = gethrtime();
-}
-
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- *diff = 1.0e-9 * (double) (*t2 - *t1);
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *val)
-{
- *val = 1.0e-9 * (*t);
-}
-
-void MPIU_Wtime_acc(MPIU_Time_t * t1, MPIU_Time_t * t2, MPIU_Time_t * t3)
-{
- *t3 += ((*t2) - (*t1));
-}
-
-double MPIU_Wtick(void)
-{
- /* According to the documentation, ticks should be in nanoseconds. This
- * is untested */
- return 1.0e-9;
-}
-
-int MPIU_Wtime_init(void)
-{
- return 0;
-}
-
-#elif MPICH_TIMER_KIND == MPIU_CLOCK_GETTIME
-void MPIU_Wtime(MPIU_Time_t * timeval)
-{
- /* POSIX timer (14.2.1, page 311) */
- clock_gettime(CLOCK_REALTIME, timeval);
-}
-
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- *diff = ((double) (t2->tv_sec - t1->tv_sec) + 1.0e-9 * (double) (t2->tv_nsec - t1->tv_nsec));
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *val)
-{
- *val = ((double) t->tv_sec + 1.0e-9 * (double) t->tv_nsec);
-}
-
-void MPIU_Wtime_acc(MPIU_Time_t * t1, MPIU_Time_t * t2, MPIU_Time_t * t3)
-{
- int nsec, sec;
-
- nsec = t2->tv_nsec - t1->tv_nsec;
- sec = t2->tv_sec - t1->tv_sec;
-
- t3->tv_sec += sec;
- t3->tv_nsec += nsec;
- while (t3->tv_nsec > 1000000000) {
- t3->tv_nsec -= 1000000000;
- t3->tv_sec++;
- }
-}
-
-double MPIU_Wtick(void)
-{
- struct timespec res;
- int rc;
-
- rc = clock_getres(CLOCK_REALTIME, &res);
- if (!rc)
- /* May return -1 for unimplemented ! */
- return res.tv_sec + 1.0e-9 * res.tv_nsec;
-
- /* Sigh. If not implemented (POSIX allows that),
- * then we need to return the generic tick value */
- return tickval;
-}
-
-int MPIU_Wtime_init(void)
-{
- init_wtick();
- return 0;
-}
-
-
-#elif MPICH_TIMER_KIND == MPIU_GETTIMEOFDAY
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-void MPIU_Wtime(MPIU_Time_t * tval)
-{
- gettimeofday(tval, NULL);
-}
-
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- *diff = ((double) (t2->tv_sec - t1->tv_sec) + .000001 * (double) (t2->tv_usec - t1->tv_usec));
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *val)
-{
- *val = (double) t->tv_sec + .000001 * (double) t->tv_usec;
-}
-
-void MPIU_Wtime_acc(MPIU_Time_t * t1, MPIU_Time_t * t2, MPIU_Time_t * t3)
-{
- int usec, sec;
-
- usec = t2->tv_usec - t1->tv_usec;
- sec = t2->tv_sec - t1->tv_sec;
- t3->tv_usec += usec;
- t3->tv_sec += sec;
- /* Handle carry to the integer seconds field */
- while (t3->tv_usec > 1000000) {
- t3->tv_usec -= 1000000;
- t3->tv_sec++;
- }
-}
-
-double MPIU_Wtick(void)
-{
- return tickval;
-}
-
-int MPIU_Wtime_init(void)
-{
- init_wtick();
- return 0;
-}
-
-
-#elif MPICH_TIMER_KIND == MPIU_LINUX86_CYCLE
-#include <sys/time.h>
-double MPIU_Seconds_per_tick = 0.0;
-double MPIU_Wtick(void)
-{
- return MPIU_Seconds_per_tick;
-}
-
-int MPIU_Wtime_init(void)
-{
- unsigned long long t1, t2;
- struct timeval tv1, tv2;
- double td1, td2;
-
- gettimeofday(&tv1, NULL);
- MPIU_Wtime(&t1);
- usleep(250000);
- gettimeofday(&tv2, NULL);
- MPIU_Wtime(&t2);
-
- td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
- td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
-
- MPIU_Seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
- return 0;
-}
-
-/* Time stamps created by a macro */
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- *diff = (double) (*t2 - *t1) * MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *val)
-{
- /* This returns the number of cycles as the "time". This isn't correct
- * for implementing MPI_Wtime, but it does allow us to insert cycle
- * counters into test programs */
- *val = (double) *t * MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_acc(MPIU_Time_t * t1, MPIU_Time_t * t2, MPIU_Time_t * t3)
-{
- *t3 += (*t2 - *t1);
-}
-
-
-#elif MPICH_TIMER_KIND == MPIU_GCC_IA64_CYCLE
-#include <sys/time.h>
-double MPIU_Seconds_per_tick = 0.0;
-double MPIU_Wtick(void)
-{
- return MPIU_Seconds_per_tick;
-}
-
-int MPIU_Wtime_init(void)
-{
- unsigned long long t1, t2;
- struct timeval tv1, tv2;
- double td1, td2;
-
- gettimeofday(&tv1, NULL);
- MPIU_Wtime(&t1);
- usleep(250000);
- gettimeofday(&tv2, NULL);
- MPIU_Wtime(&t2);
-
- td1 = tv1.tv_sec + tv1.tv_usec / 1000000.0;
- td2 = tv2.tv_sec + tv2.tv_usec / 1000000.0;
-
- MPIU_Seconds_per_tick = (td2 - td1) / (double) (t2 - t1);
- return 0;
-}
-
-/* Time stamps created by a macro */
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- *diff = (double) (*t2 - *t1) * MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *val)
-{
- /* This returns the number of cycles as the "time". This isn't correct
- * for implementing MPI_Wtime, but it does allow us to insert cycle
- * counters into test programs */
- *val = (double) *t * MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_acc(MPIU_Time_t * t1, MPIU_Time_t * t2, MPIU_Time_t * t3)
-{
- *t3 += (*t2 - *t1);
-}
-
-#elif MPICH_TIMER_KIND == MPIU_LINUXALPHA_CYCLE
-/* FIXME: This should have been fixed in the configure, rather than as a
- make-time error message */
-#error "LinuxAlpha cycle counter not supported"
-
-#elif (MPICH_TIMER_KIND == MPIU_WIN86_CYCLE) || (MPICH_TIMER_KIND == MPIU_WIN64_CYCLE)
-double MPIU_Seconds_per_tick = 0.0;
-double MPIU_Wtick(void)
-{
- return MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *d)
-{
- *d = (double) (__int64) * t * MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- *diff = (double) ((__int64) (*t2 - *t1)) * MPIU_Seconds_per_tick;
-}
-
-int MPIU_Wtime_init(void)
-{
- MPIU_Time_t t1, t2;
- DWORD s1, s2;
- double d;
- int i;
-
- MPIU_Wtime(&t1);
- MPIU_Wtime(&t1);
-
- /* time an interval using both timers */
- s1 = GetTickCount();
- MPIU_Wtime(&t1);
- /*Sleep(250); *//* Sleep causes power saving cpu's to stop which stops the counter */
- while (GetTickCount() - s1 < 200) {
- for (i = 2; i < 1000; i++)
- d = (double) i / (double) (i - 1);
- }
- s2 = GetTickCount();
- MPIU_Wtime(&t2);
-
- /* calculate the frequency of the assembly cycle counter */
- MPIU_Seconds_per_tick = ((double) (s2 - s1) / 1000.0) / (double) ((__int64) (t2 - t1));
- /*
- * printf("t2-t1 %10d\nsystime diff %d\nfrequency %g\n CPU MHz %g\n",
- * (int)(t2-t1), (int)(s2 - s1), MPIU_Seconds_per_tick, MPIU_Seconds_per_tick * 1.0e6);
- */
- return 0;
-}
-#elif MPICH_TIMER_KIND == MPIU_QUERYPERFORMANCECOUNTER
-double MPIU_Seconds_per_tick = 0.0; /* High performance counter frequency */
-int MPIU_Wtime_init(void)
-{
- LARGE_INTEGER n;
- QueryPerformanceFrequency(&n);
- MPIU_Seconds_per_tick = 1.0 / (double) n.QuadPart;
- return 0;
-}
-
-double MPIU_Wtick(void)
-{
- return MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *val)
-{
- *val = (double) t->QuadPart * MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- LARGE_INTEGER n;
- n.QuadPart = t2->QuadPart - t1->QuadPart;
- *diff = (double) n.QuadPart * MPIU_Seconds_per_tick;
-}
-
-void MPIU_Wtime_acc(MPIU_Time_t * t1, MPIU_Time_t * t2, MPIU_Time_t * t3)
-{
- t3->QuadPart += ((t2->QuadPart) - (t1->QuadPart));
-}
-
-
-#elif MPICH_TIMER_KIND == MPIU_MACH_ABSOLUTE_TIME
-static double MPIR_Wtime_mult;
-
-int MPIU_Wtime_init(void)
-{
- mach_timebase_info_data_t info;
- mach_timebase_info(&info);
- MPIR_Wtime_mult = 1.0e-9 * ((double) info.numer / (double) info.denom);
- init_wtick();
- return 0;
-}
-
-void MPIU_Wtime(MPIU_Time_t * timeval)
-{
- *timeval = mach_absolute_time();
-}
-
-void MPIU_Wtime_diff(MPIU_Time_t * t1, MPIU_Time_t * t2, double *diff)
-{
- *diff = (*t2 - *t1) * MPIR_Wtime_mult;
-}
-
-void MPIU_Wtime_todouble(MPIU_Time_t * t, double *val)
-{
- *val = *t * MPIR_Wtime_mult;
-}
-
-void MPIU_Wtime_acc(MPIU_Time_t * t1, MPIU_Time_t * t2, MPIU_Time_t * t3)
-{
- *t3 += *t2 - *t1;
-}
-
-double MPIU_Wtick(void)
-{
- return tickval;
-}
-
-#endif
diff --git a/src/util/timers/mpiu_timer.h.in b/src/util/timers/mpiu_timer.h.in
deleted file mode 100644
index 7980e10..0000000
--- a/src/util/timers/mpiu_timer.h.in
+++ /dev/null
@@ -1,319 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIU_TIMER_H_INCLUDED
-#define MPIU_TIMER_H_INCLUDED
-
-#include "mpichconf.h"
-#include <stdlib.h>
-
-#if defined (HAVE_UNISTD_H)
-#include <unistd.h>
-#if defined (NEEDS_USLEEP_DECL)
-int usleep(useconds_t usec);
-#endif
-#endif
-
-#include "mpl.h"
-
-/*
- * This include file provide the definitions that are necessary to use the
- * timer calls, including the definition of the time stamp type and
- * any inlined timer calls.
- *
- * The include file timerconf.h (created by autoheader from configure.ac)
- * is needed only to build the function versions of the timers.
- */
-/* Include the appropriate files */
-#define MPIU_GETHRTIME 1
-#define MPIU_CLOCK_GETTIME 2
-#define MPIU_GETTIMEOFDAY 3
-#define MPIU_LINUX86_CYCLE 4
-#define MPIU_LINUXALPHA_CYCLE 5
-#define MPIU_QUERYPERFORMANCECOUNTER 6
-#define MPIU_WIN86_CYCLE 7
-#define MPIU_GCC_IA64_CYCLE 8
-/* The value "MPIU_DEVICE" means that the ADI device provides the timer */
-#define MPIU_DEVICE 9
-#define MPIU_WIN64_CYCLE 10
-#define MPIU_MACH_ABSOLUTE_TIME 11
-#define MPICH_TIMER_KIND @MPICH_TIMER_KIND@
-
-#if MPICH_TIMER_KIND == MPIU_GETHRTIME
-#include <sys/time.h>
-#elif MPICH_TIMER_KIND == MPIU_CLOCK_GETTIME
-#include <time.h>
-#ifdef NEEDS_SYS_TIME_H
-/* Some OS'es mistakenly require sys/time.h to get the definition of
- CLOCK_REALTIME (POSIX requires the definition to be in time.h) */
-#include <sys/time.h>
-#endif
-#elif MPICH_TIMER_KIND == MPIU_GETTIMEOFDAY
-#include <sys/types.h>
-#include <sys/time.h>
-#elif MPICH_TIMER_KIND == MPIU_LINUX86_CYCLE
-#elif MPICH_TIMER_KIND == MPIU_GCC_IA64_CYCLE
-#elif MPICH_TIMER_KIND == MPIU_LINUXALPHA_CYCLE
-#elif MPICH_TIMER_KIND == MPIU_QUERYPERFORMANCECOUNTER
-#include <winsock2.h>
-#include <windows.h>
-#elif MPICH_TIMER_KIND == MPIU_MACH_ABSOLUTE_TIME
-#include <mach/mach_time.h>
-#elif MPICH_TIMER_KIND == MPIU_WIN86_CYCLE
-#include <winsock2.h>
-#include <windows.h>
-#endif
-
-/* Define a time stamp */
-typedef @MPICH_TIMER_TYPE@ MPIU_Time_t;
-
-/*
- * Prototypes. These are defined here so that inlined timer calls can
- * use them, as well as any profiling and timing code that is built into
- * MPICH
- */
-/*@
- MPIU_Wtime - Return a time stamp
-
- Output Parameter:
-. timeval - A pointer to an 'MPIU_Wtime_t' variable.
-
- Notes:
- This routine returns an `opaque` time value. This difference between two
- time values returned by 'MPIU_Wtime' can be converted into an elapsed time
- in seconds with the routine 'MPIU_Wtime_diff'.
-
- This routine is defined this way to simplify its implementation as a macro.
- For example, the for Intel x86 and gcc,
-.vb
-#define MPIU_Wtime(timeval) \
- __asm__ __volatile__("rdtsc" : "=A" (*timeval))
-.ve
-
- For some purposes, it is important
- that the timer calls change the timing of the code as little as possible.
- This form of a timer routine provides for a very fast timer that has
- minimal impact on the rest of the code.
-
- From a semantic standpoint, this format emphasizes that any particular
- timer value has no meaning; only the difference between two values is
- meaningful.
-
- Module:
- Timer
-
- Question:
- MPI-2 allows 'MPI_Wtime' to be a macro. We should make that easy; this
- version does not accomplish that.
- @*/
-void MPIU_Wtime( MPIU_Time_t * timeval);
-
-/*@
- MPIU_Wtime_diff - Compute the difference between two time stamps
-
- Input Parameters:
-. t1, t2 - Two time values set by 'MPIU_Wtime' on this process.
-
-
- Output Parameter:
-. diff - The different in time between t2 and t1, measured in seconds.
-
- Note:
- If 't1' is null, then 't2' is assumed to be differences accumulated with
- 'MPIU_Wtime_acc', and the output value gives the number of seconds that
- were accumulated.
-
- Question:
- Instead of handling a null value of 't1', should we have a separate
- routine 'MPIU_Wtime_todouble' that converts a single timestamp to a
- double value?
-
- Module:
- Timer
- @*/
-void MPIU_Wtime_diff( MPIU_Time_t *t1, MPIU_Time_t *t2, double *diff );
-
-/*@
- MPIU_Wtime_acc - Accumulate time values
-
- Input Parameters:
-. t1,t2,t3 - Three time values. 't3' is updated with the difference between
- 't2' and 't1': '*t3 += (t2 - t1)'.
-
- Notes:
- This routine is used to accumulate the time spent with a block of code
- without first converting the time stamps into a particular arithmetic
- type such as a 'double'. For example, if the 'MPIU_Wtime' routine accesses
- a cycle counter, this routine (or macro) can perform the accumulation using
- integer arithmetic.
-
- To convert a time value accumulated with this routine, use 'MPIU_Wtime_diff'
- with a 't1' of zero.
-
- Module:
- Timer
- @*/
-void MPIU_Wtime_acc( MPIU_Time_t *t1, MPIU_Time_t *t2, MPIU_Time_t *t3 );
-
-/*@
- MPIU_Wtime_todouble - Converts an MPID timestamp to a double
-
- Input Parameter:
-. timeval - 'MPIU_Time_t' time stamp
-
- Output Parameter:
-. seconds - Time in seconds from an arbitrary (but fixed) time in the past
-
- Notes:
- This routine may be used to change a timestamp into a number of seconds,
- suitable for 'MPI_Wtime'.
-
- @*/
-void MPIU_Wtime_todouble( MPIU_Time_t *timeval, double *seconds );
-
-/*@
- MPIU_Wtick - Provide the resolution of the 'MPIU_Wtime' timer
-
- Return value:
- Resolution of the timer in seconds. In many cases, this is the
- time between ticks of the clock that 'MPIU_Wtime' returns. In other
- words, the minimum significant difference that can be computed by
- 'MPIU_Wtime_diff'.
-
- Note that in some cases, the resolution may be estimated. No application
- should expect either the same estimate in different runs or the same
- value on different processes.
-
- Module:
- Timer
- @*/
-double MPIU_Wtick( void );
-
-/*@
- MPIU_Wtime_init - Initialize the timer
-
- Note:
- This routine should perform any steps needed to initialize the timer.
- In addition, it should set the value of the attribute 'MPI_WTIME_IS_GLOBAL'
- if the timer is known to be the same for all processes in 'MPI_COMM_WORLD'
- (the value is zero by default).
-
- If any operations need to be performed when the MPI program calls
- 'MPI_Finalize' this routine should register a handler with 'MPI_Finalize'
- (see the MPICH Design Document).
-
- Return Values:
- 0 on success. -1 on Failure. 1 means that the timer may not be used
- until after MPIU_Init completes. This allows the device to set up the
- timer (first needed for Blue Gene support).
-
- Module:
- Timer
-
- @*/
-int MPIU_Wtime_init(void);
-
-/* Inlined timers. Note that any definition of one of the functions
- prototyped above in terms of a macro will simply cause the compiler
- to use the macro instead of the function definition.
-
- Currently, all except the Windows performance counter timers
- define MPIU_Wtime_init as null; by default, the value of
- MPI_WTIME_IS_GLOBAL is false.
- */
-
-/* MPIUM_Wtime_todouble() is a hack to get a macro version
- of the todouble function.
-
- The logging library should save the native MPIU_Timer_t
- structure to disk and use the todouble function in the
- post-processsing step to convert the values to doubles.
- */
-
-/* The timer kind is set using AC_SUBST in the MPICH configure */
-#define MPICH_TIMER_KIND @MPICH_TIMER_KIND@
-
-#if MPICH_TIMER_KIND == MPIU_GETHRTIME
-#define MPIUM_Wtime_todouble MPIU_Wtime_todouble
-
-#elif MPICH_TIMER_KIND == MPIU_CLOCK_GETTIME
-#define MPIUM_Wtime_todouble MPIU_Wtime_todouble
-
-#elif MPICH_TIMER_KIND == MPIU_GETTIMEOFDAY
-#define MPIUM_Wtime_todouble MPIU_Wtime_todouble
-
-#elif MPICH_TIMER_KIND == MPIU_LINUX86_CYCLE
-/* The rdtsc instruction is not a "serializing" instruction, so the
- processor is free to reorder it. In order to get more accurate
- timing numbers with rdtsc, we need to put a serializing
- instruction, like cpuid, before rdtsc. X86_64 architectures have
- the rdtscp instruction which is synchronizing, we use this when we
- can. */
-#ifdef LINUX86_CYCLE_RDTSCP
-#define MPIU_Wtime(var_ptr) \
- __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx ; shl $32, %%rdx; or %%rdx, %%rax" : "=a" (*var_ptr) : : "ecx", "rdx")
-#elif defined(LINUX86_CYCLE_CPUID_RDTSC64)
-/* Here we have to save the rbx register for when the compiler is
- generating position independent code (e.g., when it's generating
- shared libraries) */
-#define MPIU_Wtime(var_ptr) \
- __asm__ __volatile__("push %%rbx ; cpuid ; rdtsc ; pop %%rbx" : "=A" (*var_ptr) : : "ecx")
-#elif defined(LINUX86_CYCLE_CPUID_RDTSC32)
-/* Here we have to save the ebx register for when the compiler is
- generating position independent code (e.g., when it's generating
- shared libraries) */
-#define MPIU_Wtime(var_ptr) \
- __asm__ __volatile__("push %%ebx ; cpuid ; rdtsc ; pop %%ebx" : "=A" (*var_ptr) : : "ecx")
-#elif defined(LINUX86_CYCLE_RDTSC)
-/* The configure test using cpuid must have failed, try just rdtsc by itself */
-#define MPIU_Wtime(var_ptr) __asm__ __volatile__("rdtsc" : "=A" (*var_ptr))
-#else
-#error Dont know which Linux timer to use
-#endif
-
-extern double MPIU_Seconds_per_tick;
-#define MPIUM_Wtime_todouble(t, d) *d = (double)*t * MPIU_Seconds_per_tick
-
-#elif MPICH_TIMER_KIND == MPIU_GCC_IA64_CYCLE
-#ifdef __INTEL_COMPILER
-#include "ia64regs.h"
-#define MPIU_Wtime(var_ptr) { MPIU_Time_t t_val;\
- t_val=__getReg(_IA64_REG_AR_ITC); *var_ptr=t_val;}
-#else
-#define MPIU_Wtime(var_ptr) { MPIU_Time_t t_val;\
- __asm__ __volatile__("mov %0=ar.itc" : "=r" (t_val)); *var_ptr=t_val;}
-#endif
-extern double MPIU_Seconds_per_tick;
-#define MPIUM_Wtime_todouble(t, d) *d = (double)*t * MPIU_Seconds_per_tick
-
-#elif MPICH_TIMER_KIND == MPIU_LINUXALPHA_CYCLE
-#define MPIUM_Wtime_todouble MPIU_Wtime_todouble
-
-#elif MPICH_TIMER_KIND == MPIU_QUERYPERFORMANCECOUNTER
-#define MPIU_Wtime(var) QueryPerformanceCounter(var)
-extern double MPIU_Seconds_per_tick;
-#define MPIUM_Wtime_todouble( t, d ) \
- *d = (double)t->QuadPart * MPIU_Seconds_per_tick /* convert to seconds */
-
-#elif MPICH_TIMER_KIND == MPIU_WIN86_CYCLE
-#define MPIU_Wtime(var_ptr) \
-{ \
- register int *f1 = (int*)var_ptr; \
- __asm cpuid \
- __asm rdtsc \
- __asm mov ecx, f1 \
- __asm mov [ecx], eax \
- __asm mov [ecx + TYPE int], edx \
-}
-extern double MPIU_Seconds_per_tick;
-#define MPIUM_Wtime_todouble(t, d) *d = (double)(__int64)*t * MPIU_Seconds_per_tick
-#define MPIUM_Wtime_diff(t1,t2,diff) *diff = (double)((__int64)( *t2 - *t1 )) * MPIU_Seconds_per_tick
-
-#elif MPICH_TIMER_KIND == MPIU_MACH_ABSOLUTE_TIME
-#define MPIUM_Wtime_todouble MPIU_Wtime_todouble
-
-#endif
-
-#endif
diff --git a/src/util/type/.state-cache b/src/util/type/.state-cache
deleted file mode 100644
index 2520ac5..0000000
--- a/src/util/type/.state-cache
+++ /dev/null
@@ -1,7 +0,0 @@
-<dir>
-<file name="mpiu_type_defs.h" info="1447123141"/>
-</dir>
-<data>
-<fileinfo name="mpiu_type_defs.h">
-</fileinfo>
-</data>
diff --git a/src/util/type/Makefile.mk b/src/util/type/Makefile.mk
deleted file mode 100644
index cc5b83e..0000000
--- a/src/util/type/Makefile.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-## -*- Mode: Makefile; -*-
-## vim: set ft=automake :
-##
-## (C) 2011 by Argonne National Laboratory.
-## See COPYRIGHT in top-level directory.
-##
-
-AM_CPPFLAGS += -I$(top_srcdir)/src/util/type
-
-noinst_HEADERS += \
- src/util/type/mpiu_type_defs.h
diff --git a/src/util/type/mpiu_type_defs.h b/src/util/type/mpiu_type_defs.h
deleted file mode 100644
index 5c3bc01..0000000
--- a/src/util/type/mpiu_type_defs.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#if !defined(MPIU_TYPE_DEFS_H_INCLUDED)
-#define MPIU_TYPE_DEFS_H_INCLUDED
-
-#include "mpichconf.h"
-
-/* Basic typedefs */
-#ifdef HAVE_SYS_BITYPES_H
-#include <sys/bitypes.h>
-#endif
-
-/* inttypes.h is supposed to include stdint.h but this is here as
- belt-and-suspenders for platforms that aren't fully compliant */
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-/* stdint.h gives us fixed-width C99 types like int16_t, among others */
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-/* stdbool.h gives us the C boolean type */
-#ifdef HAVE_STDBOOL_H
-#include <stdbool.h>
-#endif
-
-/* complex.h gives us the C complex type */
-#ifdef HAVE_COMPLEX_H
-#include <complex.h>
-#endif
-
-#ifdef HAVE_WINDOWS_H
-#include <winsock2.h>
-#include <windows.h>
-#else
-#ifndef BOOL
-#define BOOL int
-#endif
-#endif
-/* Use this macro for each parameter to a function that is not referenced in
- the body of the function */
-#ifdef HAVE_WINDOWS_H
-#define MPIU_UNREFERENCED_ARG(a) a
-#else
-#define MPIU_UNREFERENCED_ARG(a)
-#endif
-
-#define MPIU_MAX(a,b) (((a) > (b)) ? (a) : (b))
-#define MPIU_MIN(a,b) (((a) < (b)) ? (a) : (b))
-
-#include "mpl.h"
-
-typedef MPIU_SIZE_T MPIU_Size_t;
-
-/* Use the MPIU_PtrToXXX macros to convert pointers to and from integer types */
-
-/* The Microsoft compiler will not allow casting of different sized types
- * without
- * printing a compiler warning. Using these macros allows compiler specific
- * type casting and avoids the warning output. These macros should only be used
- * in code that can handle loss of bits.
- */
-
-/* PtrToAint converts a pointer to an MPI_Aint type, truncating bits if necessary */
-#ifdef HAVE_PTRTOAINT
-#define MPIU_PtrToAint(a) ((MPI_Aint)(INT_PTR) (a))
-#else
-/* An MPI_Aint may be *larger* than a pointer. By using 2 casts, we can
- keep some compilers from complaining about converting a pointer to an
- integer of a different size */
-#define MPIU_PtrToAint(a) ((MPI_Aint)(MPIU_Upint)(a))
-#endif
-
-/* AintToPtr converts an MPI_Aint to a pointer type, extending bits if necessary */
-#ifdef HAVE_AINTTOPTR
-#define MPIU_AintToPtr(a) ((VOID *)(INT_PTR)((MPI_Aint)a))
-#else
-#define MPIU_AintToPtr(a) (void*)(a)
-#endif
-
-/* Adding the 32-bit compute/64-bit I/O related type-casts in here as
- * they are not a part of the MPI standard yet. */
-#define MPIU_AINT_CAST_TO_VOID_PTR (void *)(MPIU_Pint)
-#define MPIU_VOID_PTR_CAST_TO_MPI_AINT (MPI_Aint)(MPIU_Upint)
-#define MPIU_PTR_DISP_CAST_TO_MPI_AINT (MPI_Aint)(MPIU_Pint)
-
-#define MPIU_CONTEXT_ID_T_DATATYPE MPI_UINT16_T
-typedef uint16_t MPIU_Context_id_t;
-#define MPIU_INVALID_CONTEXT_ID ((MPIU_Context_id_t)0xffff)
-
-#endif /* !defined(MPIU_TYPE_DEFS_H_INCLUDED) */
diff --git a/src/util/wrappers/.state-cache b/src/util/wrappers/.state-cache
index e4c7fd6..404d159 100644
--- a/src/util/wrappers/.state-cache
+++ b/src/util/wrappers/.state-cache
@@ -1,22 +1,10 @@
<dir>
-<file name="mpiu_shm_wrappers.h" info="1447123141"/>
-<file name="mpiu_os_wrappers.h" info="1447123141"/>
-<file name="mpiu_util_wrappers.h" info="1447123141"/>
-<file name="mpiu_process_wrappers.h" info="1447123141"/>
-<file name="mpiu_os_wrappers_pre.h" info="1447123141"/>
-<file name="mpiu_sock_wrappers.h" info="1447123141"/>
+<file name="mpiu_sock_wrappers.h" info="1478973152"/>
+<file name="mpiu_util_wrappers.h" info="1478973152"/>
</dir>
<data>
-<fileinfo name="mpiu_shm_wrappers.h">
-</fileinfo>
-<fileinfo name="mpiu_os_wrappers.h">
+<fileinfo name="mpiu_sock_wrappers.h">
</fileinfo>
<fileinfo name="mpiu_util_wrappers.h">
</fileinfo>
-<fileinfo name="mpiu_process_wrappers.h">
-</fileinfo>
-<fileinfo name="mpiu_os_wrappers_pre.h">
-</fileinfo>
-<fileinfo name="mpiu_sock_wrappers.h">
-</fileinfo>
</data>
diff --git a/src/util/wrappers/Makefile.mk b/src/util/wrappers/Makefile.mk
index a162637..6cfe1ee 100644
--- a/src/util/wrappers/Makefile.mk
+++ b/src/util/wrappers/Makefile.mk
@@ -9,10 +9,6 @@
AM_CPPFLAGS += -I$(top_srcdir)/src/util/wrappers -I$(top_builddir)/src/util/wrappers
noinst_HEADERS += \
- src/util/wrappers/mpiu_os_wrappers.h \
- src/util/wrappers/mpiu_os_wrappers_pre.h \
- src/util/wrappers/mpiu_process_wrappers.h \
- src/util/wrappers/mpiu_shm_wrappers.h \
src/util/wrappers/mpiu_sock_wrappers.h \
src/util/wrappers/mpiu_util_wrappers.h
diff --git a/src/util/wrappers/README b/src/util/wrappers/README
index 07db5c9..072c1e2 100644
--- a/src/util/wrappers/README
+++ b/src/util/wrappers/README
@@ -2,7 +2,7 @@ This directory contains wrappers funcs to provide platform independence to MPICH
TODO
------
-# The code currently uses MPIU_Assert*() and hence requires device support. Re-define MPIU_Assert*().
+# The code currently uses MPIR_Assert*() and hence requires device support. Re-define MPIR_Assert*().
Notes:
diff --git a/src/util/wrappers/mpiu_os_wrappers.h b/src/util/wrappers/mpiu_os_wrappers.h
deleted file mode 100644
index 0125b9f..0000000
--- a/src/util/wrappers/mpiu_os_wrappers.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2006 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIU_OS_WRAPPERS_H_INCLUDED
-#define MPIU_OS_WRAPPERS_H_INCLUDED
-/* #include "mpiu_os_wrappers_conf.h" */
-#include "mpiu_util_wrappers.h"
-#include "mpiu_process_wrappers.h"
-#include "mpiu_shm_wrappers.h"
-#include "mpiu_sock_wrappers.h"
-#endif /* MPIU_OS_WRAPPERS_H_INCLUDED */
diff --git a/src/util/wrappers/mpiu_os_wrappers_pre.h b/src/util/wrappers/mpiu_os_wrappers_pre.h
deleted file mode 100644
index 44858fe..0000000
--- a/src/util/wrappers/mpiu_os_wrappers_pre.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2010 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-/* This file contains "pre" definitions and declarations for the OS wrappers.
- * That is, things that shouldn't depend on much more than the mpichconf.h
- * values. */
-
-#ifndef MPIU_OS_WRAPPERS_PRE_H_INCLUDED
-#define MPIU_OS_WRAPPERS_PRE_H_INCLUDED
-
-/* ------------------------------------------------------------------------ */
-/* util wrappers */
-/* TODO port defs/decls here as necessary */
-
-/* ------------------------------------------------------------------------ */
-/* process wrappers */
-/* TODO port defs/decls here as necessary */
-
-/* ------------------------------------------------------------------------ */
-/* shm wrappers */
-
-#define MPIU_SHMW_FLAG_CLR 0x0
-#define MPIU_SHMW_FLAG_SHM_CREATE 0x1
-#define MPIU_SHMW_FLAG_SHM_ATTACH 0x10
-#define MPIU_SHMW_FLAG_GHND_STATIC 0x100
-
-#ifdef USE_SYSV_SHM
-typedef int MPIU_SHMW_Lhnd_t;
-#elif defined USE_MMAP_SHM
-typedef MPI_Aint MPIU_SHMW_Lhnd_t;
-#elif defined USE_NT_SHM
-typedef HANDLE MPIU_SHMW_Lhnd_t;
-#endif
-
-typedef char * MPIU_SHMW_Ghnd_t;
-/* The local handle, lhnd, is valid only for the current process,
- * The global handle, ghnd, is valid across multiple processes
- * The handle flag, flag, is used to set various attributes of the
- * handle.
- */
-typedef struct{
- MPIU_SHMW_Lhnd_t lhnd;
- MPIU_SHMW_Ghnd_t ghnd;
- int flag;
-} MPIU_SHMW_LGhnd_t;
-
-typedef MPIU_SHMW_LGhnd_t * MPIU_SHMW_Hnd_t;
-
-#define MPIU_SHMW_HND_INVALID NULL
-#define MPIU_SHMW_GHND_INVALID NULL
-#define MPIU_SHMW_GHND_INIT_VAL '\0'
-/* TODO port additional defs/decls here as necessary */
-
-/* ------------------------------------------------------------------------ */
-/* sock wrappers */
-/* TODO port defs/decls here as necessary */
-
-#endif /* MPIU_OS_WRAPPERS_PRE_H_INCLUDED */
diff --git a/src/util/wrappers/mpiu_process_wrappers.h b/src/util/wrappers/mpiu_process_wrappers.h
deleted file mode 100644
index 8ec43ee..0000000
--- a/src/util/wrappers/mpiu_process_wrappers.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2006 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIU_PROCESS_WRAPPERS_H_INCLUDED
-#define MPIU_PROCESS_WRAPPERS_H_INCLUDED
-/* MPIU_PW --> MPI Util Process Wrapper */
-#include "mpichconf.h"
-
-/* MPIU_PW_SCHED_YIELD() - Yield the processor to OS scheduler */
-/* On a typical Linux system (verified with kernels 3.2 and 3.5),
- * usleep has a resolution of more than 1000 cycles. This makes
- * it impractical if the desired sleeping period is shorter. On
- * the other hand, sleep(0) returns immediately without going to
- * the kernel. This means that there is no actual yielding, which
- * is equivalent to doing nothing. Thus, usleep and sleep are not
- * recommended as ways to yield the CPU, and sched_yield would be
- * preferred if available.
- * Note that nanosleep has the same shortcomings as usleep.*/
-
-#if defined(USE_SWITCHTOTHREAD_FOR_YIELD)
- #include <winsock2.h>
- #include <windows.h>
- #define MPIU_PW_Sched_yield() SwitchToThread()
-#elif defined(USE_WIN32_SLEEP_FOR_YIELD)
- #include <winsock2.h>
- #include <windows.h>
- #define MPIU_PW_Sched_yield() Sleep(0)
-#elif defined(USE_SCHED_YIELD_FOR_YIELD)
- #ifdef HAVE_SCHED_H
- #include <sched.h>
- #endif
- #define MPIU_PW_Sched_yield() sched_yield()
-#elif defined(USE_YIELD_FOR_YIELD)
- #ifdef HAVE_SCHED_H
- #include <sched.h>
- #endif
- #define MPIU_PW_Sched_yield() yield()
-#elif defined (USE_SELECT_FOR_YIELD)
- #ifdef HAVE_SYS_SELECT_H
- #include <sys/select.h>
- #endif
- #define MPIU_PW_Sched_yield() do { struct timeval t; t.tv_sec = 0; t.tv_usec = 0; select(0,0,0,0,&t); } while (0)
-#elif defined (USE_USLEEP_FOR_YIELD)
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
- #if defined (NEEDS_USLEEP_DECL)
- int usleep(useconds_t usec);
- #endif
- #endif
- #define MPIU_PW_Sched_yield() usleep(0)
-#elif defined (USE_SLEEP_FOR_YIELD)
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
- #endif
- #define MPIU_PW_Sched_yield() sleep(0)
-#elif defined (USE_NOTHING_FOR_YIELD)
- #define MPIU_PW_Sched_yield() do {} while (0)
-#else
- #error "No mechanism available to yield"
-#endif
-
-#endif /* MPIU_PROCESS_WRAPPERS_H_INCLUDED */
diff --git a/src/util/wrappers/mpiu_shm_wrappers.h b/src/util/wrappers/mpiu_shm_wrappers.h
deleted file mode 100644
index ea055e4..0000000
--- a/src/util/wrappers/mpiu_shm_wrappers.h
+++ /dev/null
@@ -1,938 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- * (C) 2006 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-#ifndef MPIU_SHM_WRAPPERS_H_INCLUDED
-#define MPIU_SHM_WRAPPERS_H_INCLUDED
-/* FIXME: Add underscore to the end of funcs/macro names not to
- * be exposed to user
- */
-/* SHM Wrapper funcs defined in this header file */
-
-#include "mpichconfconst.h"
-#include "mpichconf.h"
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef USE_SYSV_SHM
- #include <sys/stat.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
-#elif defined USE_MMAP_SHM
- #include <fcntl.h>
- #include <sys/mman.h>
- #if defined (HAVE_MKSTEMP) && defined (NEEDS_MKSTEMP_DECL)
- extern int mkstemp(char *template);
- #endif
-#elif defined USE_NT_SHM
- #include<winsock2.h>
- #include<windows.h>
-#else
-# error "No shared memory mechanism specified"
-#endif
-
-#include "mpiu_os_wrappers_pre.h"
-#include "mpiu_util_wrappers.h"
-
-#if !(defined(MPISHARED_H_INCLUDED) || defined(MPIIMPL_H_INCLUDED))
-#error "this header must be included after mpiimpl.h or mpishared.h"
-#endif
-
-/* FIXME: Reduce the conditional checks for wrapper-internal
- * utility funcs/macros.
- */
-
-/* Allocate mem for references within the handle */
-/* Returns 0 on success, -1 on error */
-#define MPIU_SHMW_Hnd_ref_alloc(hnd)( \
- ((hnd)->ghnd = (MPIU_SHMW_Ghnd_t) \
- MPIU_Malloc(MPIU_SHMW_GHND_SZ)) ? 0 : -1 \
-)
-
-#ifdef USE_SYSV_SHM
-/************************** Sys V shm **************************/
-#define MPIU_SHMW_MAX_INT_STR_LEN 20
-#define MPIU_SHMW_SEG_KEY_LEN MPIU_SHMW_MAX_INT_STR_LEN
-#define MPIU_SHMW_GHND_SZ MPIU_SHMW_SEG_KEY_LEN
-#define MPIU_SHMW_LHND_INVALID -1
-#define MPIU_SHMW_LHND_INIT_VAL -1
-
-#define MPIU_SHMW_SEG_ALREADY_EXISTS EEXIST
-
-/* These macros are the setters/getters for the shm handle */
-#define MPIU_SHMW_Lhnd_get(hnd) ((hnd)->lhnd)
-#define MPIU_SHMW_Lhnd_set(hnd, val) ((hnd)->lhnd=val)
-
-#define MPIU_SHMW_Lhnd_is_valid(hnd) ( \
- ((hnd)->lhnd != MPIU_SHMW_LHND_INVALID) \
-)
-#define MPIU_SHMW_Lhnd_is_init(hnd) 1
-/* Nothing to be done at close */
-#define MPIU_SHMW_Lhnd_close(hnd) 0
-
-#elif defined USE_MMAP_SHM
-/************************** MMAP shm **************************/
-#define MPIU_SHMW_FNAME_LEN 50
-#define MPIU_SHMW_GHND_SZ MPIU_SHMW_FNAME_LEN
-#define MPIU_SHMW_LHND_INVALID -1
-#define MPIU_SHMW_LHND_INIT_VAL -1
-
-#define MPIU_SHMW_SEG_ALREADY_EXISTS EEXIST
-
-/* These macros are the setters/getters for the shm handle */
-#define MPIU_SHMW_Lhnd_get(hnd) ((hnd)->lhnd)
-#define MPIU_SHMW_Lhnd_set(hnd, val) ((hnd)->lhnd=val)
-
-#define MPIU_SHMW_Lhnd_is_valid(hnd) ( \
- ((hnd)->lhnd != MPIU_SHMW_LHND_INVALID) \
-)
-#define MPIU_SHMW_Lhnd_is_init(hnd) 1
-
-/* Returns 0 on success, -1 on error */
-static inline int MPIU_SHMW_Lhnd_close(MPIU_SHMW_Hnd_t hnd)
-{
- MPIU_SHMW_Lhnd_t lhnd = MPIU_SHMW_LHND_INVALID;
- lhnd = MPIU_SHMW_Lhnd_get(hnd);
- if(lhnd != MPIU_SHMW_LHND_INVALID) {
- if(close(lhnd) == 0){
- MPIU_SHMW_Lhnd_set(hnd, MPIU_SHMW_LHND_INIT_VAL);
- }
- else{
- /* close() failed */
- return -1;
- }
- }
- return 0;
-}
-
-#elif defined USE_NT_SHM
-/************************** NT shm **************************/
-#define MPIU_SHMW_SEG_NAME_LEN 70
-#define MPIU_SHMW_GHND_SZ MPIU_SHMW_SEG_NAME_LEN
-#define MPIU_SHMW_LHND_INVALID INVALID_HANDLE_VALUE
-#define MPIU_SHMW_LHND_INIT_VAL INVALID_HANDLE_VALUE
-
-#define MPIU_SHMW_SEG_ALREADY_EXISTS ERROR_ALREADY_EXISTS
-
-/* These macros are the setters/getters for the shm handle */
-#define MPIU_SHMW_Lhnd_get(hnd) ((hnd)->lhnd)
-#define MPIU_SHMW_Lhnd_set(hnd, val) ((hnd)->lhnd=val)
-
-#define MPIU_SHMW_Lhnd_is_valid(hnd) ( \
- ((hnd)->lhnd != MPIU_SHMW_LHND_INVALID) \
-)
-#define MPIU_SHMW_Lhnd_is_init(hnd) 1
-
-/* Returns 0 on success, -1 on error */
-#define MPIU_SHMW_Lhnd_close(hnd)( \
- (CloseHandle(MPIU_SHMW_Lhnd_get(hnd)) != 0) ? 0 : -1 \
-)
-/* Returns 0 on success, -1 on error */
-static inline int MPIU_SHMW_Ghnd_set_uniq(MPIU_SHMW_Hnd_t hnd)
-{
- if(MPIU_SHMW_Hnd_ref_alloc(hnd) == 0){
- if(MPIU_OSW_Get_uniq_str(hnd->ghnd, MPIU_SHMW_GHND_SZ) != 0){
- return -1;
- }
- }
- else{
- return -1;
- }
- return 0;
-}
-#endif /* USE_NT_SHM */
-
-#define MPIU_SHMW_HND_SZ (sizeof(MPIU_SHMW_LGhnd_t))
-#define MPIU_SHMW_SER_HND_SZ MPIU_SHMW_GHND_SZ
-
-/* These macros are the setters/getters for the shm handle */
-#define MPIU_SHMW_Ghnd_get_by_ref(hnd) ((hnd)->ghnd)
-
-/* Returns -1 on error, 0 on success */
-#define MPIU_SHMW_Ghnd_get_by_val(hnd, str, strlen) ( \
- (MPL_snprintf(str, strlen, "%s", \
- MPIU_SHMW_Ghnd_get_by_ref(hnd))) ? 0 : -1 \
-)
-#define MPIU_SHMW_Ghnd_set_by_ref(hnd, val) ((hnd)->ghnd = val)
-/* Returns -1 on error, 0 on success */
-/* FIXME: What if val is a non-null terminated string ? */
-#define MPIU_SHMW_Ghnd_set_by_val(hnd, fmt, val) ( \
- (MPL_snprintf(MPIU_SHMW_Ghnd_get_by_ref(hnd), \
- MPIU_SHMW_GHND_SZ, fmt, val)) ? 0 : -1 \
-)
-
-#define MPIU_SHMW_Ghnd_is_valid(hnd) ( \
- (((hnd)->ghnd == MPIU_SHMW_GHND_INVALID) || \
- (strlen((hnd)->ghnd) == 0)) ? 0 : 1 \
-)
-#define MPIU_SHMW_Ghnd_is_init(hnd) ( \
- ((hnd)->flag & MPIU_SHMW_FLAG_GHND_STATIC) ? \
- 1 : \
- (((hnd)->ghnd != MPIU_SHMW_GHND_INVALID) ? 1 : 0) \
-)
-
-/* Allocate mem for global handle.
- * Returns 0 on success, -1 on failure
- */
-static inline int MPIU_SHMW_Ghnd_alloc(MPIU_SHMW_Hnd_t hnd)
-{
- if(!(hnd->ghnd)){
- hnd->ghnd = (MPIU_SHMW_Ghnd_t)MPIU_Malloc(MPIU_SHMW_GHND_SZ);
- if(!(hnd->ghnd)){ return -1; }
- }
- /* Global handle is no longer static */
- hnd->flag &= ~MPIU_SHMW_FLAG_GHND_STATIC;
- return 0;
-}
-
-/* A Handle is valid if it is initialized/init and has a value
- * different from the default/invalid value assigned during init
- */
-#define MPIU_SHMW_Hnd_is_valid(hnd) ( \
- ((hnd) && \
- MPIU_SHMW_Lhnd_is_valid(hnd) && \
- MPIU_SHMW_Ghnd_is_valid(hnd)) \
-)
-
-/* With MMAP_SHM, NT_SHM & SYSV_SHM local handle is always init'ed */
-#define MPIU_SHMW_Hnd_is_init(hnd) ( \
- ((hnd) && /* MPIU_SHMW_Lhnd_is_init(hnd) && */ \
- MPIU_SHMW_Ghnd_is_init(hnd)) \
-)
-
-
-/* Allocate mem for handle. Lazy allocation for global handle */
-/* Returns 0 on success, -1 on error */
-static inline int MPIU_SHMW_Hnd_alloc(MPIU_SHMW_Hnd_t *hnd_ptr)
-{
- MPIU_Assert(hnd_ptr);
- *hnd_ptr = (MPIU_SHMW_Hnd_t) MPIU_Malloc(MPIU_SHMW_HND_SZ);
- if(*hnd_ptr){
- (*hnd_ptr)->flag = MPIU_SHMW_FLAG_GHND_STATIC;
- }
- else{
- return -1;
- }
- return 0;
-}
-
-/* Close Handle */
-#define MPIU_SHMW_Hnd_close(hnd) MPIU_SHMW_Lhnd_close(hnd)
-
-static inline void MPIU_SHMW_Hnd_reset_val(MPIU_SHMW_Hnd_t hnd)
-{
- MPIU_Assert(hnd);
- MPIU_SHMW_Lhnd_set(hnd, MPIU_SHMW_LHND_INIT_VAL);
- if(hnd->flag & MPIU_SHMW_FLAG_GHND_STATIC){
- hnd->ghnd = MPIU_SHMW_GHND_INVALID;
- }
- else{
- MPIU_Assert(hnd->ghnd);
- (hnd->ghnd)[0] = MPIU_SHMW_GHND_INIT_VAL;
- }
-}
-
-static inline void MPIU_SHMW_Hnd_free(MPIU_SHMW_Hnd_t hnd)
-{
- if(MPIU_SHMW_Hnd_is_init(hnd)){
- if(!(hnd->flag & MPIU_SHMW_FLAG_GHND_STATIC)){
- MPIU_Free(hnd->ghnd);
- }
- MPIU_Free(hnd);
- }
-}
-
-static inline int MPIU_SHMW_Seg_open(MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz);
-static inline int MPIU_SHMW_Hnd_deserialize_by_ref(MPIU_SHMW_Hnd_t hnd, char **ser_hnd_ptr);
-
-/* FIXME : Don't print ENGLISH strings on error. Define the error
- * strings in errnames.txt
- */
-/* Serialize a handle. A serialized handle is a string of
- * characters that can be persisted by the caller. The serialized
- * handle can be used to create another ref to the shared mem seg
- * by deserializing it.
- * str : A string of chars of len, str_len.
- * If the function succeeds the serialized handle is copied
- * into this user buffer
- * hnd : Handle to shared memory
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Hnd_serialize
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Hnd_serialize(char *str,
- MPIU_SHMW_Hnd_t hnd, int str_len)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
- MPIU_Assert(str);
- MPIU_Assert(str_len >= MPIU_SHMW_GHND_SZ);
-
- rc = MPIU_SHMW_Ghnd_get_by_val(hnd, str, str_len);
- MPIR_ERR_CHKANDJUMP(rc != 0, mpi_errno, MPI_ERR_OTHER, "**shmw_gethnd");
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Deserialize a handle.
- * str_hnd : A null-terminated string of len str_hnd_len that
- * contains the serialized handle.
- * hnd : If the call succeeds the user gets back a handle,hnd, to
- * shared mem - deserialized from strHnd. This handle
- * will refer to the shm seg referred by the serialized
- * handle.
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Hnd_deserialize
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Hnd_deserialize(
- MPIU_SHMW_Hnd_t hnd, const char *str_hnd, size_t str_hnd_len)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
- MPIR_ERR_CHKINTERNAL(!str_hnd, mpi_errno, "ser hnd is null");
- MPIR_ERR_CHKANDJUMP(str_hnd_len>=MPIU_SHMW_GHND_SZ,
- mpi_errno, MPI_ERR_OTHER, "**shmw_deserbufbig");
-
- MPIU_SHMW_Hnd_reset_val(hnd);
-
- rc = MPIU_SHMW_Ghnd_alloc(hnd);
- MPIR_ERR_CHKANDJUMP1((rc != 0), mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "shared mem global handle");
-
- rc = MPIU_SHMW_Ghnd_set_by_val(hnd, "%s", str_hnd);
- MPIU_Assert(rc == 0);
-
- mpi_errno = MPIU_SHMW_Seg_open(hnd, 0);
- if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Get a serialized handle by reference.
- * Rationale: The user might only want to read the serialized view
- * of the handle & hence not want to allocate a buffer for the ser view
- * of the handle.
- * str_ptr : Pointer to a string of chars to hold the serialized handle
- * If the function succeeds, the pointer points to a
- * serialized view of the handle.
- * hnd : Handle to shm seg which has to be serialized
- */
-
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Hnd_get_serialized_by_ref
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Hnd_get_serialized_by_ref(
- MPIU_SHMW_Hnd_t hnd, char **str_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
- MPIU_Assert(str_ptr);
-
- *str_ptr = (char *)MPIU_SHMW_Ghnd_get_by_ref(hnd);
- MPIU_Assert(*str_ptr);
-
- return mpi_errno;
-}
-
-/* Deserialize a handle by reference.
- * Rationale : The user already has a serialized view of the handle.
- * The user does not want to manage the view buffer any more
- * & also needs to deserialize from the buffer.
- * ser_hnd_ptr : Pointer to a serialized view of the handle. The user
- * no longer needs to take care of this buffer.
- * hnd : If the function succeeds this points to the deserialized
- * handle.
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Hnd_deserialize_by_ref
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Hnd_deserialize_by_ref(
- MPIU_SHMW_Hnd_t hnd, char **ser_hnd_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
- MPIU_Assert(ser_hnd_ptr);
-
- MPIR_ERR_CHKINTERNAL(!(*ser_hnd_ptr), mpi_errno, "ser hnd is null");
-
- MPIU_SHMW_Hnd_reset_val(hnd);
- MPIU_SHMW_Ghnd_set_by_ref(hnd, *ser_hnd_ptr);
-
- mpi_errno = MPIU_SHMW_Seg_open(hnd, 0);
- if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Initialize a shared memory handle
- * hnd_ptr : A pointer to the shared memory handle
- */
-
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Hnd_init
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Hnd_init(
- MPIU_SHMW_Hnd_t *hnd_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
-
- MPIU_Assert(hnd_ptr);
-
- rc = MPIU_SHMW_Hnd_alloc(hnd_ptr);
- MPIR_ERR_CHKANDJUMP1((rc != 0), mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "shared mem handle");
-
- MPIU_SHMW_Hnd_reset_val(*hnd_ptr);
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Finalize a shared memory handle.
- * hnd_ptr : A pointer to the shm handle to be finalized.
- * Any handle that is init has to be finalized.
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Hnd_finalize
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Hnd_finalize(
- MPIU_SHMW_Hnd_t *hnd_ptr)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(hnd_ptr);
- MPIU_Assert(*hnd_ptr);
-
- /* A finalize can/should be called on an invalid handle
- * Don't assert if we fail here ...
- */
- MPIU_SHMW_Hnd_close(*hnd_ptr);
- MPIU_SHMW_Hnd_free(*hnd_ptr);
-
- *hnd_ptr = MPIU_SHMW_HND_INVALID;
-
- return mpi_errno;
-}
-
-#ifdef USE_SYSV_SHM
-/************************** Sys V shm **************************/
-/* A template function which creates/attaches shm seg handle
- * to the shared memory. Used by user-exposed functions below
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_create_attach_templ
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_create_attach_templ(
- MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz, char **shm_addr_ptr,
- int offset, int flag)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
- int lhnd = -1;
-
- if(flag & MPIU_SHMW_FLAG_SHM_CREATE){
- lhnd = shmget(IPC_PRIVATE, seg_sz, IPC_CREAT | S_IRWXU);
- /* Return error if SHM seg already exists or create fails */
- MPIR_ERR_CHKANDJUMP2((lhnd == -1) ||
- (MPIU_OSW_Get_errno() == MPIU_SHMW_SEG_ALREADY_EXISTS),
- mpi_errno, MPI_ERR_OTHER, "**alloc_shar_mem",
- "**alloc_shar_mem %s %s", "shmget",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
- MPIU_SHMW_Lhnd_set(hnd, lhnd);
-
- rc = MPIU_SHMW_Ghnd_alloc(hnd);
- MPIR_ERR_CHKANDJUMP1((rc != 0), mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "shared mem global handle");
-
- rc = MPIU_SHMW_Ghnd_set_by_val(hnd, "%d", lhnd);
- MPIU_Assert(rc == 0);
- }
- else{
- /* Open an existing shared memory seg */
- MPIU_Assert(MPIU_SHMW_Ghnd_is_valid(hnd));
-
- if(!MPIU_SHMW_Lhnd_is_valid(hnd)){
- lhnd = atoi(MPIU_SHMW_Ghnd_get_by_ref(hnd));
- MPIR_ERR_CHKANDJUMP((lhnd == -1), mpi_errno,
- MPI_ERR_OTHER, "**shmw_badhnd");
-
- MPIU_SHMW_Lhnd_set(hnd, lhnd);
- }
- }
-
- if(flag & MPIU_SHMW_FLAG_SHM_ATTACH){
- /* Attach to shared mem seg */
- MPIU_Assert(shm_addr_ptr);
-
- *shm_addr_ptr = shmat(MPIU_SHMW_Lhnd_get(hnd), NULL, 0x0);
-
- MPIR_ERR_CHKANDJUMP2((*shm_addr_ptr == (void*)(-1)), mpi_errno, MPI_ERR_OTHER,
- "**attach_shar_mem", "**attach_shar_mem %s %s",
- "shmat", MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
- }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Detach from an attached SHM segment
- * hnd : Handle to the shm segment
- * shm_addr_ptr : Pointer to the shm address to detach
- * seg_sz : Size of shm segment
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_detach
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_detach(
- MPIU_SHMW_Hnd_t hnd, char **shm_addr_ptr, MPIU_Size_t seg_sz)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
-
- MPIR_ERR_CHKANDJUMP(!MPIU_SHMW_Hnd_is_valid(hnd),
- mpi_errno, MPI_ERR_OTHER, "**shmw_badhnd");
- MPIU_Assert(shm_addr_ptr);
- MPIR_ERR_CHKINTERNAL(!(*shm_addr_ptr), mpi_errno, "shm address is null");
-
- rc = shmdt(*shm_addr_ptr);
- MPIR_ERR_CHKANDJUMP2((rc != 0), mpi_errno, MPI_ERR_OTHER,
- "**detach_shar_mem","**detach_shar_mem %s %s",
- "shmdt", MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
- *shm_addr_ptr = NULL;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Remove a shared memory segment
- * hnd : Handle to the shared memory segment to be removed
- */
-
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_remove
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_remove(MPIU_SHMW_Hnd_t hnd)
-{
- int mpi_errno = MPI_SUCCESS;
- struct shmid_ds ds;
- int rc = -1;
-
- MPIR_ERR_CHKANDJUMP(!MPIU_SHMW_Hnd_is_valid(hnd),
- mpi_errno, MPI_ERR_OTHER, "**shmw_badhnd");
-
- rc = shmctl(MPIU_SHMW_Lhnd_get(hnd), IPC_RMID, &ds);
- MPIR_ERR_CHKANDJUMP2((rc != 0), mpi_errno, MPI_ERR_OTHER,
- "**remove_shar_mem", "**remove_shar_mem %s %s","shmctl",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#elif USE_MMAP_SHM
-/************************** MMAP shm **************************/
-/* A template function which creates/attaches shm seg handle
- * to the shared memory. Used by user-exposed functions below
- */
-/* FIXME: Pass (void **)shm_addr_ptr instead of (char **) shm_addr_ptr
- * since a util func should be generic
- * Currently not passing (void **) to reduce warning in nemesis
- * code which passes (char **) ptrs to be attached to a seg
- */
-
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_create_attach_templ
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_create_attach_templ(
- MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz, char **shm_addr_ptr,
- int offset, int flag)
-{
- int mpi_errno = MPI_SUCCESS;
- MPIU_SHMW_Lhnd_t lhnd = -1, rc = -1;
-
- if(flag & MPIU_SHMW_FLAG_SHM_CREATE){
- char dev_shm_fname[] = "/dev/shm/mpich_shar_tmpXXXXXX";
- char tmp_fname[] = "/tmp/mpich_shar_tmpXXXXXX";
- char *chosen_fname = NULL;
-
- chosen_fname = dev_shm_fname;
- lhnd = mkstemp(chosen_fname);
- if(lhnd == -1){
- chosen_fname = tmp_fname;
- lhnd = mkstemp(chosen_fname);
- }
- MPIR_ERR_CHKANDJUMP1((lhnd == -1), mpi_errno,
- MPI_ERR_OTHER,"**mkstemp","**mkstemp %s",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
- MPIU_SHMW_Lhnd_set(hnd, lhnd);
- rc = (MPIU_SHMW_Lhnd_t)lseek(lhnd, seg_sz - 1, SEEK_SET);
- MPIR_ERR_CHKANDJUMP1((rc == -1), mpi_errno,
- MPI_ERR_OTHER, "**lseek", "**lseek %s",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
- MPIU_OSW_RETRYON_INTR((rc == -1), (rc = (int)write(lhnd, "", 1)));
- MPIR_ERR_CHKANDJUMP((rc == -1), mpi_errno, MPI_ERR_OTHER,
- "**write");
-
- rc = MPIU_SHMW_Ghnd_alloc(hnd);
- MPIR_ERR_CHKANDJUMP1((rc != 0),mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "shared memory global handle");
-
- rc = MPIU_SHMW_Ghnd_set_by_val(hnd, "%s", chosen_fname);
- MPIU_Assert(rc == 0);
- }
- else{
- /* Open an existing shared memory seg */
- MPIU_Assert(MPIU_SHMW_Ghnd_is_valid(hnd));
-
- if(!MPIU_SHMW_Lhnd_is_valid(hnd)){
- lhnd = open(MPIU_SHMW_Ghnd_get_by_ref(hnd), O_RDWR);
- MPIR_ERR_CHKANDJUMP1((lhnd == -1), mpi_errno,
- MPI_ERR_OTHER, "**open", "**open %s",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
- MPIU_SHMW_Lhnd_set(hnd, lhnd);
- }
- }
-
- if(flag & MPIU_SHMW_FLAG_SHM_ATTACH){
- void *buf_ptr = NULL;
-
- MPIU_Assert(shm_addr_ptr);
-
- buf_ptr = mmap(NULL, seg_sz, PROT_READ | PROT_WRITE,
- MAP_SHARED, MPIU_SHMW_Lhnd_get(hnd), 0);
- MPIR_ERR_CHKANDJUMP2((buf_ptr == MAP_FAILED),
- mpi_errno, MPI_ERR_OTHER, "**alloc_shar_mem",
- "**alloc_shar_mem %s %s", "mmap",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
- *shm_addr_ptr = buf_ptr;
- }
-
-fn_exit:
- /* FIXME: Close local handle only when closing the shm handle */
- if(MPIU_SHMW_Lhnd_is_valid(hnd)){
- rc = MPIU_SHMW_Lhnd_close(hnd);
- MPIU_Assert(rc == 0);
- }
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Detach from an attached SHM segment */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_detach
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_detach(
- MPIU_SHMW_Hnd_t hnd, char **shm_addr_ptr, MPIU_Size_t seg_sz)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
-
- MPIU_Assert(shm_addr_ptr);
- MPIR_ERR_CHKINTERNAL(!(*shm_addr_ptr), mpi_errno, "shm address is null");
-
- rc = munmap(*shm_addr_ptr, seg_sz);
- MPIR_ERR_CHKANDJUMP2((rc != 0), mpi_errno, MPI_ERR_OTHER,
- "**detach_shar_mem", "**detach_shar_mem %s %s","munmap",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
- *shm_addr_ptr = NULL;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Remove an existing SHM segment */
-static inline int MPIU_SHMW_Seg_remove(MPIU_SHMW_Hnd_t hnd)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
-
- MPIR_ERR_CHKANDJUMP(!MPIU_SHMW_Ghnd_is_valid(hnd),
- mpi_errno, MPI_ERR_OTHER, "**shmw_badhnd");
-
- rc = unlink(MPIU_SHMW_Ghnd_get_by_ref(hnd));
- MPIR_ERR_CHKANDJUMP2((rc != 0), mpi_errno, MPI_ERR_OTHER,
- "**remove_shar_mem", "**remove_shar_mem %s %s","unlink",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-#elif defined (USE_NT_SHM)
-/************************** NT shm **************************/
-/* A template function which creates/attaches shm seg handle
- * to the shared memory. Used by user-exposed functions below
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_create_attach_templ
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_create_attach_templ(
- MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz, char **shm_addr_ptr,
- int offset, int flag)
-{
- int mpi_errno = MPI_SUCCESS;
- HANDLE lhnd = INVALID_HANDLE_VALUE;
- int rc = -1;
- ULARGE_INTEGER seg_sz_large;
- seg_sz_large.QuadPart = seg_sz;
-
- if(!MPIU_SHMW_Ghnd_is_valid(hnd)){
- MPIU_Assert(flag & MPIU_SHMW_FLAG_SHM_CREATE);
-
- rc = MPIU_SHMW_Ghnd_set_uniq(hnd);
- MPIR_ERR_CHKANDJUMP((rc == 0), mpi_errno, MPI_ERR_OTHER,
- "**shmw_sethnd");
- }
-
- if(flag & MPIU_SHMW_FLAG_SHM_CREATE){
- lhnd = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
- PAGE_READWRITE, seg_sz_large.HighPart, seg_sz_large.LowPart,
- MPIU_SHMW_Ghnd_get_by_ref(hnd));
- /* Return error if SHM seg already exists or create fails */
- MPIR_ERR_CHKANDJUMP2((lhnd == INVALID_HANDLE_VALUE) ||
- (MPIU_OSW_Get_errno() == MPIU_SHMW_SEG_ALREADY_EXISTS),
- mpi_errno, MPI_ERR_OTHER, "**alloc_shar_mem",
- "**alloc_shar_mem %s %s", "CreateFileMapping",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
- MPIU_SHMW_Lhnd_set(hnd, lhnd);
- }
- else{
- MPIU_Assert(MPIU_SHMW_Ghnd_is_valid(hnd));
-
- if(!MPIU_SHMW_Lhnd_is_valid(hnd)){
- /* Strangely OpenFileMapping() returns NULL on error! */
- lhnd = OpenFileMapping(FILE_MAP_WRITE, FALSE,
- MPIU_SHMW_Ghnd_get_by_ref(hnd));
- MPIR_ERR_CHKANDJUMP2((lhnd == NULL), mpi_errno,
- MPI_ERR_OTHER, "**alloc_shar_mem",
- "**alloc_shar_mem %s %s", "OpenFileMapping",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
-
- MPIU_SHMW_Lhnd_set(hnd, lhnd);
- }
- }
-
- if(flag & MPIU_SHMW_FLAG_SHM_ATTACH){
- MPIU_Assert(shm_addr_ptr);
-
- *shm_addr_ptr = (char *)MapViewOfFile(MPIU_SHMW_Lhnd_get(hnd),
- FILE_MAP_WRITE, 0, offset, 0);
- MPIR_ERR_CHKANDJUMP2(!(*shm_addr_ptr), mpi_errno, MPI_ERR_OTHER,
- "**attach_shar_mem", "**attach_shar_mem %s %s",
- "MapViewOfFile", MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
- }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Detach from an attached SHM segment */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_detach
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_detach(
- MPIU_SHMW_Hnd_t hnd, char **shm_addr_ptr, MPIU_Size_t seg_sz)
-{
- int mpi_errno = MPI_SUCCESS;
- int rc = -1;
-
- MPIU_UNREFERENCED_ARG(seg_sz);
- MPIR_ERR_CHKANDJUMP(!MPIU_SHMW_Hnd_is_valid(hnd),
- mpi_errno, MPI_ERR_OTHER, "**shmw_badhnd");
- MPIU_Assert(shm_addr_ptr);
- MPIR_ERR_CHKINTERNAL(!(*shm_addr_ptr), mpi_errno, "shm address is null");
-
- rc = UnmapViewOfFile(*shm_addr_ptr);
- MPIR_ERR_CHKANDJUMP2((rc == 0), mpi_errno, MPI_ERR_OTHER,
- "**detach_shar_mem", "**detach_shar_mem %s %s","UnmapViewOfFile",
- MPIU_OSW_Strerror(MPIU_OSW_Get_errno()));
- *shm_addr_ptr = NULL;
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Nothing to be done when removing an SHM segment */
-#define MPIU_SHMW_Seg_remove(hnd) MPI_SUCCESS
-
-#endif /* USE_NT_SHM */
-
-/* Create new SHM segment
- * hnd : A "init"ed shared memory handle
- * seg_sz : Size of shared memory segment to be created
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_create
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_create(
- MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
- MPIU_Assert(seg_sz > 0);
-
- mpi_errno = MPIU_SHMW_Seg_create_attach_templ(hnd,
- seg_sz, NULL, 0, MPIU_SHMW_FLAG_SHM_CREATE);
- if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Open an existing SHM segment
- * hnd : A shm handle with a valid global handle
- * seg_sz : Size of shared memory segment to open
- * Currently only using internally within wrapper funcs
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_open
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_open(
- MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
-
- mpi_errno = MPIU_SHMW_Seg_create_attach_templ(hnd, seg_sz,
- NULL, 0, MPIU_SHMW_FLAG_CLR);
- if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Create new SHM segment and attach to it
- * hnd : A "init"ed shared mem handle
- * seg_sz: Size of shared mem segment
- * shm_addr_ptr : Pointer to shared memory address to attach
- * the shared mem segment
- * offset : Offset to attach the shared memory address to
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_create_and_attach
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_create_and_attach(
- MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz, char **shm_addr_ptr,
- int offset)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
- MPIU_Assert(seg_sz > 0);
- MPIU_Assert(shm_addr_ptr);
-
- mpi_errno = MPIU_SHMW_Seg_create_attach_templ(hnd, seg_sz,
- shm_addr_ptr, offset, MPIU_SHMW_FLAG_SHM_CREATE |
- MPIU_SHMW_FLAG_SHM_ATTACH);
- if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-/* Attach to an existing SHM segment
- * hnd : A "init"ed shared mem handle
- * seg_sz: Size of shared mem segment
- * shm_addr_ptr : Pointer to shared memory address to attach
- * the shared mem segment
- * offset : Offset to attach the shared memory address to
- */
-#undef FUNCNAME
-#define FUNCNAME MPIU_SHMW_Seg_attach
-#undef FCNAME
-#define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SHMW_Seg_attach(
- MPIU_SHMW_Hnd_t hnd, MPIU_Size_t seg_sz, char **shm_addr_ptr,
- int offset)
-{
- int mpi_errno = MPI_SUCCESS;
-
- MPIU_Assert(MPIU_SHMW_Hnd_is_init(hnd));
- MPIU_Assert(shm_addr_ptr);
-
- mpi_errno = MPIU_SHMW_Seg_create_attach_templ(hnd, seg_sz,
- shm_addr_ptr, offset, MPIU_SHMW_FLAG_SHM_ATTACH);
- if(mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); }
-
-fn_exit:
- return mpi_errno;
-fn_fail:
- goto fn_exit;
-}
-
-
-#undef FUNCNAME
-#undef FCNAME
-#endif /* MPIU_SHM_WRAPPERS_H_INCLUDED */
diff --git a/src/util/wrappers/mpiu_sock_wrappers.h b/src/util/wrappers/mpiu_sock_wrappers.h
index ac08af0..e5267be 100644
--- a/src/util/wrappers/mpiu_sock_wrappers.h
+++ b/src/util/wrappers/mpiu_sock_wrappers.h
@@ -19,11 +19,12 @@
#include "mpl.h"
#include "mpichconf.h"
#include "mpi.h"
-#include "mpierror.h"
-#include "mpierrs.h"
-#include "mpimem.h"
-#include "mpidbg.h"
-#include "mpiutil.h"
+#include "mpir_err.h"
+#include "mpir_mem.h"
+#include "mpir_strerror.h"
+#include "mpir_type_defs.h"
+#include "mpir_assert.h"
+#include "mpir_pointers.h"
#ifdef USE_NT_SOCK
@@ -146,7 +147,7 @@ static inline int MPIU_SOCKW_Bind_port_range(
int mpi_errno = MPI_SUCCESS;
int done = 0;
- MPIU_Assert(sin);
+ MPIR_Assert(sin);
for(cur_port = low_port; cur_port <= high_port; cur_port++){
(sin)->sin_port = htons(cur_port);
@@ -224,7 +225,7 @@ static inline int MPIU_SOCKW_Connect(
MPI_ERR_OTHER, "**sock_connect", "**sock_connect %s %d",
MPIU_OSW_Strerror(err), err);
- MPIU_Assert(is_pending);
+ MPIR_Assert(is_pending);
*is_pending = 1;
}
fn_exit:
@@ -264,7 +265,7 @@ static inline int MPIU_SOCKW_Readv(MPIU_SOCKW_Sockfd_t sock,
int err;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(nb_rd_ptr);
+ MPIR_Assert(nb_rd_ptr);
if(WSARecv(sock, iov, iov_cnt, (LPDWORD )nb_rd_ptr, &flags, NULL, NULL)
== SOCKET_ERROR){
err = MPIU_OSW_Get_errno();
@@ -441,9 +442,9 @@ static inline void MPIU_SOCKW_Waitset_curindex_inc_(MPIU_SOCKW_Waitset_hnd_t wai
static inline void MPIU_SOCKW_Waitset_expand_(MPIU_SOCKW_Waitset_hnd_t waitset_hnd,
int *index_ptr)
{
- MPIU_UNREFERENCED_ARG(index_ptr);
+ MPL_UNREFERENCED_ARG(index_ptr);
(waitset_hnd)->nfds++;
- MPIU_Assert((waitset_hnd)->nfds < FD_SETSIZE);
+ MPIR_Assert((waitset_hnd)->nfds < FD_SETSIZE);
}
@@ -483,10 +484,10 @@ static inline int MPIU_SOCKW_Timeval_hnd_init(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(hnd_ptr);
+ MPIR_Assert(hnd_ptr);
*hnd_ptr = (MPIU_SOCKW_Timeval_hnd_t)
- MPIU_Malloc(sizeof(MPIU_SOCKW_Timeval_t_));
+ MPL_malloc(sizeof(MPIU_SOCKW_Timeval_t_));
MPIR_ERR_CHKANDJUMP1( !(*hnd_ptr), mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "handle to timeval");
@@ -508,7 +509,7 @@ static inline int MPIU_SOCKW_Timeval_hnd_set(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Timeval_hnd_is_init_(hnd));
+ MPIR_Assert(MPIU_SOCKW_Timeval_hnd_is_init_(hnd));
hnd->tv_sec = tv_msec/1000;
hnd->tv_usec = (tv_msec % 1000) * 1000;
@@ -525,10 +526,10 @@ static inline int MPIU_SOCKW_Timeval_hnd_finalize(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(hnd_ptr);
+ MPIR_Assert(hnd_ptr);
if(MPIU_SOCKW_Timeval_hnd_is_init_(*hnd_ptr)){
- MPIU_Free(*hnd_ptr);
+ MPL_free(*hnd_ptr);
}
*hnd_ptr = NULL;
@@ -559,14 +560,14 @@ static inline int MPIU_SOCKW_Waitset_hnd_init(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(hnd_ptr);
- MPIU_Assert(nfds <= FD_SETSIZE);
+ MPIR_Assert(hnd_ptr);
+ MPIR_Assert(nfds <= FD_SETSIZE);
if(nfds <= 0){
nfds = FD_SETSIZE;
}
- *hnd_ptr = (MPIU_SOCKW_Waitset_hnd_t) MPIU_Malloc(
+ *hnd_ptr = (MPIU_SOCKW_Waitset_hnd_t) MPL_malloc(
sizeof(MPIU_SOCKW_Waitset_));
MPIR_ERR_CHKANDJUMP1(!(*hnd_ptr), mpi_errno, MPI_ERR_OTHER,
@@ -585,7 +586,7 @@ static inline int MPIU_SOCKW_Waitset_hnd_init(
/* FIXME: Cheating - Expand dynamically */
(*hnd_ptr)->fdset = (MPIU_SOCKW_Waitset_sock_hnd_ *)
- MPIU_Malloc(FD_SETSIZE * sizeof(MPIU_SOCKW_Waitset_sock_hnd_));
+ MPL_malloc(FD_SETSIZE * sizeof(MPIU_SOCKW_Waitset_sock_hnd_));
MPIR_ERR_CHKANDJUMP1(!((*hnd_ptr)->fdset), mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "fdset array in waitSet");
@@ -605,11 +606,11 @@ static inline int MPIU_SOCKW_Waitset_hnd_finalize(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(hnd_ptr);
+ MPIR_Assert(hnd_ptr);
if(MPIU_SOCKW_Waitset_hnd_is_init_(*hnd_ptr)){
- MPIU_Free((*hnd_ptr)->fdset);
- MPIU_Free(*hnd_ptr);
+ MPL_free((*hnd_ptr)->fdset);
+ MPL_free(*hnd_ptr);
}
*hnd_ptr = NULL;
@@ -634,8 +635,8 @@ static inline int MPIU_SOCKW_Waitset_wait(
int nfds=0;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(hnd));
- MPIU_Assert(MPIU_SOCKW_Timeval_hnd_is_init_(timeout));
+ MPIR_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(hnd));
+ MPIR_Assert(MPIU_SOCKW_Timeval_hnd_is_init_(timeout));
MPIU_SOCKW_Waitset_curindex_reset_(hnd);
FD_ZERO(&(hnd->tmp_read_fds));
@@ -717,8 +718,8 @@ static inline int MPIU_SOCKW_Waitset_get_nxt_sock_with_evnt(
int i;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
- MPIU_Assert(sock_hnd_ptr);
+ MPIR_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
+ MPIR_Assert(sock_hnd_ptr);
*sock_hnd_ptr = NULL;
@@ -750,17 +751,17 @@ static inline int MPIU_SOCKW_Waitset_add_sock(
int index= 0;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
- MPIU_Assert(sock_hnd_ptr);
+ MPIR_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
+ MPIR_Assert(sock_hnd_ptr);
*sock_hnd_ptr = NULL;
index = waitset_hnd->fdset_index;
if(index >= waitset_hnd->nfds){
index = MPIU_SOCKW_Waitset_freeindex_get_(waitset_hnd);
- /* FIXME: Try not to use MPIU_Assert(). Utils should not depend
+ /* FIXME: Try not to use MPIR_Assert(). Utils should not depend
* on a device impl of assert */
- MPIU_Assert(index != MPIU_SOCKW_WAITSET_CURINDEX_INVALID_);
+ MPIR_Assert(index != MPIU_SOCKW_WAITSET_CURINDEX_INVALID_);
}
else{
waitset_hnd->fdset_index++;
@@ -798,8 +799,8 @@ static inline int MPIU_SOCKW_Waitset_set_sock(
MPIU_SOCKW_Sockfd_t sock;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
- MPIU_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
+ MPIR_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
+ MPIR_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
sock = sock_hnd->sockfd;
if((flag & MPIU_SOCKW_FLAG_WAITON_RD) &&
@@ -832,8 +833,8 @@ static inline int MPIU_SOCKW_Waitset_clr_sock(
MPIU_SOCKW_Sockfd_t sock;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
- MPIU_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
+ MPIR_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
+ MPIR_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
sock = sock_hnd->sockfd;
if((flag & MPIU_SOCKW_FLAG_WAITON_RD) &&
@@ -867,9 +868,9 @@ static inline int MPIU_SOCKW_Waitset_rem_sock(
MPIU_SOCKW_Sockfd_t sock;
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
- MPIU_Assert(sock_hnd_ptr);
- MPIU_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(*sock_hnd_ptr));
+ MPIR_Assert(MPIU_SOCKW_Waitset_hnd_is_init_(waitset_hnd));
+ MPIR_Assert(sock_hnd_ptr);
+ MPIR_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(*sock_hnd_ptr));
sock = (*sock_hnd_ptr)->sockfd;
if(FD_ISSET(sock, &(waitset_hnd->read_fds))){
@@ -903,8 +904,8 @@ static inline int MPIU_SOCKW_Waitset_sock_hnd_get_sockfd(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
- MPIU_Assert(sockfd_ptr);
+ MPIR_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
+ MPIR_Assert(sockfd_ptr);
*sockfd_ptr = sock_hnd->sockfd;
@@ -920,8 +921,8 @@ static inline int MPIU_SOCKW_Waitset_sock_hnd_get_user_ptr(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
- MPIU_Assert(userp_ptr);
+ MPIR_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
+ MPIR_Assert(userp_ptr);
*userp_ptr = sock_hnd->user_ptr;
@@ -937,7 +938,7 @@ static inline int MPIU_SOCKW_Waitset_sock_hnd_set_user_ptr(
{
int mpi_errno = MPI_SUCCESS;
- MPIU_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
+ MPIR_Assert(MPIU_SOCKW_Waitset_sock_hnd_is_init_(sock_hnd));
sock_hnd->user_ptr = user_ptr;
diff --git a/src/util/wrappers/mpiu_util_wrappers.h b/src/util/wrappers/mpiu_util_wrappers.h
index 7e2ee54..04e9a03 100644
--- a/src/util/wrappers/mpiu_util_wrappers.h
+++ b/src/util/wrappers/mpiu_util_wrappers.h
@@ -19,7 +19,7 @@
#endif
#include "mpichconf.h"
-#include "mpimem.h"
+#include "mpir_mem.h"
#ifdef HAVE_GETLASTERROR
# define MPIU_OSW_Get_errno() GetLastError()
@@ -40,19 +40,6 @@
# define MPIU_OSW_Strerror(errno) strerror(errno)
#endif
-#if defined (HAVE_QUERYPERFORMANCECOUNTER)
-/*
- * Returns size of uniqStr, 0 on error
- */
-static inline int MPIU_OSW_Get_uniq_str(char *str, int strlen)
-{
- LARGE_INTEGER perfCnt;
- QueryPerformanceCounter(&perfCnt);
- return(MPL_snprintf(str, strlen, "MPICH_NEM_%d_%I64d",
- GetCurrentThreadId(), (perfCnt.QuadPart)));
-}
-#endif
-
#ifdef HAVE_WINDOWS_H
# define MPIU_OSW_EINTR WSAEINTR
# define MPIU_OSW_ENOBUFS WSAENOBUFS
diff --git a/subsys_include.m4 b/subsys_include.m4
index 6c110de..36713a2 100644
--- a/subsys_include.m4
+++ b/subsys_include.m4
@@ -1,64 +1,72 @@
-dnl generated by ./maint/gen_subcfg_m4 at Wed Nov 11 22:06:56 2015
+dnl generated by ./maint/gen_subcfg_m4 at Sun Nov 13 09:12:19 2016
dnl DO NOT EDIT BY HAND!!!
dnl re-run ./maint/updatefiles instead
-m4_include([src/mpid/common/hcoll/subconfigure.m4])
+m4_include([src/mpid/ch3/subconfigure.m4])
+m4_include([src/mpid/ch3/channels/nemesis/subconfigure.m4])
+m4_include([src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4])
+m4_include([src/mpid/ch3/channels/sock/subconfigure.m4])
+m4_include([src/pmi/subconfigure.m4])
+m4_include([src/pmi/pmi2/subconfigure.m4])
+m4_include([src/pmi/simple/subconfigure.m4])
+m4_include([src/pmi/pmi2/simple/subconfigure.m4])
m4_include([src/binding/fortran/use_mpi/subconfigure.m4])
+m4_include([src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4])
m4_include([src/pm/subconfigure.m4])
m4_include([src/pm/gforker/subconfigure.m4])
-m4_include([src/pmi/subconfigure.m4])
-m4_include([src/pmi/pmi2/subconfigure.m4])
m4_include([src/pmi/slurm/subconfigure.m4])
-m4_include([src/pmi/pmi2/simple/subconfigure.m4])
-m4_include([src/pmi/pmi2/poe/subconfigure.m4])
-m4_include([src/pmi/simple/subconfigure.m4])
-m4_include([src/mpid/pamid/subconfigure.m4])
-m4_include([src/pm/remshell/subconfigure.m4])
-m4_include([src/mpid/ch3/subconfigure.m4])
-m4_include([src/mpid/ch3/channels/sock/subconfigure.m4])
-m4_include([src/mpid/common/sock/subconfigure.m4])
-m4_include([src/mpid/common/sched/subconfigure.m4])
-m4_include([src/mpid/common/thread/subconfigure.m4])
-m4_include([src/mpid/common/datatype/subconfigure.m4])
-m4_include([src/mpid/ch3/util/sock/subconfigure.m4])
-m4_include([src/mpid/ch3/channels/nemesis/subconfigure.m4])
m4_include([src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4])
-m4_include([src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4])
-m4_include([src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4])
-m4_include([src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4])
+m4_include([src/mpid/ch3/util/sock/subconfigure.m4])
m4_include([src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4])
-m4_include([src/mpid/common/sock/poll/subconfigure.m4])
+m4_include([src/mpid/common/hcoll/subconfigure.m4])
+m4_include([src/mpid/ch4/subconfigure.m4])
+m4_include([src/mpid/ch4/netmod/ofi/subconfigure.m4])
+m4_include([src/mpid/ch4/shm/stubshm/subconfigure.m4])
+m4_include([src/mpid/ch4/shm/posix/subconfigure.m4])
+m4_include([src/mpid/common/shm/subconfigure.m4])
+m4_include([src/mpid/common/datatype/subconfigure.m4])
+m4_include([src/mpid/common/thread/subconfigure.m4])
+m4_include([src/mpid/ch4/netmod/portals4/subconfigure.m4])
+m4_include([src/mpid/ch4/netmod/stubnm/subconfigure.m4])
+m4_include([src/mpid/common/sched/subconfigure.m4])
+m4_include([src/mpid/ch4/netmod/ucx/subconfigure.m4])
+m4_include([src/pm/remshell/subconfigure.m4])
m4_include([src/pm/util/subconfigure.m4])
+m4_include([src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4])
dnl a macro suitable for use as m4_map([some_unary_macro],[PAC_SUBCFG_MODULE_LIST])
m4_define([PAC_SUBCFG_MODULE_LIST],
m4_dquote(
-[src_mpid_common_hcoll],
+[src_mpid_ch3],
+[src_mpid_ch3_channels_nemesis],
+[src_mpid_ch3_channels_nemesis_netmod_ofi],
+[src_mpid_ch3_channels_sock],
+[src_pmi],
+[src_pmi_pmi2],
+[src_pmi_simple],
+[src_pmi_pmi2_simple],
[src_binding_fortran_use_mpi],
+[src_mpid_ch3_channels_nemesis_netmod_tcp],
[src_pm],
[src_pm_gforker],
-[src_pmi],
-[src_pmi_pmi2],
[src_pmi_slurm],
-[src_pmi_pmi2_simple],
-[src_pmi_pmi2_poe],
-[src_pmi_simple],
-[src_mpid_pamid],
-[src_pm_remshell],
-[src_mpid_ch3],
-[src_mpid_ch3_channels_sock],
-[src_mpid_common_sock],
-[src_mpid_common_sched],
-[src_mpid_common_thread],
-[src_mpid_common_datatype],
-[src_mpid_ch3_util_sock],
-[src_mpid_ch3_channels_nemesis],
[src_mpid_ch3_channels_nemesis_netmod_mxm],
-[src_mpid_ch3_channels_nemesis_netmod_portals4],
-[src_mpid_ch3_channels_nemesis_netmod_ofi],
-[src_mpid_ch3_channels_nemesis_netmod_tcp],
+[src_mpid_ch3_util_sock],
[src_mpid_ch3_channels_nemesis_netmod_llc],
-[src_mpid_common_sock_poll],
-[src_pm_util]dnl <--- this dnl is important
+[src_mpid_common_hcoll],
+[src_mpid_ch4],
+[src_mpid_ch4_netmod_ofi],
+[src_mpid_ch4_shm_stubshm],
+[src_mpid_ch4_shm_posix],
+[src_mpid_common_shm],
+[src_mpid_common_datatype],
+[src_mpid_common_thread],
+[src_mpid_ch4_netmod_portals4],
+[src_mpid_ch4_netmod_stubnm],
+[src_mpid_common_sched],
+[src_mpid_ch4_netmod_ucx],
+[src_pm_remshell],
+[src_pm_util],
+[src_mpid_ch3_channels_nemesis_netmod_portals4]dnl <--- this dnl is important
))
diff --git a/test/Makefile.in b/test/Makefile.in
index 65e95ab..07a0910 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -99,6 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_bugfix.m4 \
$(top_srcdir)/confdb/aclocal_cache.m4 \
$(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_check_visibility.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
$(top_srcdir)/confdb/aclocal_cxx.m4 \
$(top_srcdir)/confdb/aclocal_f77.m4 \
@@ -111,39 +112,45 @@ am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_shm.m4 \
$(top_srcdir)/confdb/aclocal_subcfg.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
- $(top_srcdir)/confdb/ax_tls.m4 $(top_srcdir)/confdb/libtool.m4 \
+ $(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
$(top_srcdir)/confdb/ltsugar.m4 \
$(top_srcdir)/confdb/ltversion.m4 \
$(top_srcdir)/confdb/lt~obsolete.m4 \
+ $(top_srcdir)/confdb/random_r.m4 \
+ $(top_srcdir)/confdb/stdlib_h.m4 \
$(top_srcdir)/maint/version.m4 $(top_srcdir)/subsys_include.m4 \
- $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
$(top_srcdir)/src/binding/fortran/use_mpi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
$(top_srcdir)/src/pm/subconfigure.m4 \
$(top_srcdir)/src/pm/gforker/subconfigure.m4 \
- $(top_srcdir)/src/pmi/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
$(top_srcdir)/src/pmi/slurm/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/poe/subconfigure.m4 \
- $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
- $(top_srcdir)/src/mpid/pamid/subconfigure.m4 \
- $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/poll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/stubshm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/posix/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/shm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/portals4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/stubnm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ucx/subconfigure.m4 \
+ $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
$(top_srcdir)/src/pm/util/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -245,13 +252,11 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
-ASSERT_LEVEL = @ASSERT_LEVEL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASH_SHELL = @BASH_SHELL@
-BGQ_INSTALL_DIR = @BGQ_INSTALL_DIR@
BSEND_OVERHEAD = @BSEND_OVERHEAD@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
@@ -387,10 +392,72 @@ FORTRAN_MPI_OFFSET = @FORTRAN_MPI_OFFSET@
GCOV = @GCOV@
GNUCXX_MINORVERSION = @GNUCXX_MINORVERSION@
GNUCXX_VERSION = @GNUCXX_VERSION@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
HAVE_CXX_EXCEPTIONS = @HAVE_CXX_EXCEPTIONS@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
HAVE_ERROR_CHECKING = @HAVE_ERROR_CHECKING@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_REALPATH = @HAVE_REALPATH@
HAVE_ROMIO = @HAVE_ROMIO@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE__EXIT = @HAVE__EXIT@
INCLUDE_MPICXX_H = @INCLUDE_MPICXX_H@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -422,6 +489,7 @@ MPICHLIB_CPPFLAGS = @MPICHLIB_CPPFLAGS@
MPICHLIB_CXXFLAGS = @MPICHLIB_CXXFLAGS@
MPICHLIB_FCFLAGS = @MPICHLIB_FCFLAGS@
MPICHLIB_FFLAGS = @MPICHLIB_FFLAGS@
+MPICH_CUSTOM_STRING = @MPICH_CUSTOM_STRING@
MPICH_MPICC_CFLAGS = @MPICH_MPICC_CFLAGS@
MPICH_MPICC_CPPFLAGS = @MPICH_MPICC_CPPFLAGS@
MPICH_MPICC_LDFLAGS = @MPICH_MPICC_LDFLAGS@
@@ -440,8 +508,6 @@ MPICH_MPIFORT_LDFLAGS = @MPICH_MPIFORT_LDFLAGS@
MPICH_MPIFORT_LIBS = @MPICH_MPIFORT_LIBS@
MPICH_NUMVERSION = @MPICH_NUMVERSION@
MPICH_RELEASE_DATE = @MPICH_RELEASE_DATE@
-MPICH_TIMER_KIND = @MPICH_TIMER_KIND@
-MPICH_TIMER_TYPE = @MPICH_TIMER_TYPE@
MPICH_VERSION = @MPICH_VERSION@
MPICONSTMODNAME = @MPICONSTMODNAME@
MPICPP_NAME = @MPICPP_NAME@
@@ -460,7 +526,6 @@ MPIR_CXX_DOUBLE_COMPLEX = @MPIR_CXX_DOUBLE_COMPLEX@
MPIR_CXX_LONG_DOUBLE_COMPLEX = @MPIR_CXX_LONG_DOUBLE_COMPLEX@
MPISIZEOFMODNAME = @MPISIZEOFMODNAME@
MPIU_DLL_SPEC_DEF = @MPIU_DLL_SPEC_DEF@
-MPIU_PINT = @MPIU_PINT@
MPI_2COMPLEX = @MPI_2COMPLEX@
MPI_2DOUBLE_COMPLEX = @MPI_2DOUBLE_COMPLEX@
MPI_2DOUBLE_PRECISION = @MPI_2DOUBLE_PRECISION@
@@ -607,13 +672,28 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
-PAMILIBNAME = @PAMILIBNAME@
PAPI_INCLUDE = @PAPI_INCLUDE@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PMPILIBNAME = @PMPILIBNAME@
PMPI_F08_NAME = @PMPI_F08_NAME@
RANLIB = @RANLIB@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
REQD = @REQD@
REQI1 = @REQI1@
REQI2 = @REQI2@
@@ -639,8 +719,8 @@ USER_FCFLAGS = @USER_FCFLAGS@
USER_FFLAGS = @USER_FFLAGS@
USER_LDFLAGS = @USER_LDFLAGS@
USER_LIBS = @USER_LIBS@
-USE_DBG_LOGGING = @USE_DBG_LOGGING@
VERSION = @VERSION@
+VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
WRAPPER_CFLAGS = @WRAPPER_CFLAGS@
WRAPPER_CPPFLAGS = @WRAPPER_CPPFLAGS@
WRAPPER_CXXFLAGS = @WRAPPER_CXXFLAGS@
@@ -675,6 +755,22 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
+ch4_netmods = @ch4_netmods@
+ch4_nets_array = @ch4_nets_array@
+ch4_nets_array_sz = @ch4_nets_array_sz@
+ch4_nets_func_array = @ch4_nets_func_array@
+ch4_nets_func_decl = @ch4_nets_func_decl@
+ch4_nets_native_func_array = @ch4_nets_native_func_array@
+ch4_nets_native_func_decl = @ch4_nets_native_func_decl@
+ch4_nets_strings = @ch4_nets_strings@
+ch4_shm = @ch4_shm@
+ch4_shm_array = @ch4_shm_array@
+ch4_shm_array_sz = @ch4_shm_array_sz@
+ch4_shm_func_array = @ch4_shm_func_array@
+ch4_shm_func_decl = @ch4_shm_func_decl@
+ch4_shm_native_func_array = @ch4_shm_native_func_array@
+ch4_shm_native_func_decl = @ch4_shm_native_func_decl@
+ch4_shm_strings = @ch4_shm_strings@
channel_name = @channel_name@
datadir = @datadir@
datarootdir = @datarootdir@
@@ -715,6 +811,8 @@ nemesis_nets_func_decl = @nemesis_nets_func_decl@
nemesis_nets_macro_defs = @nemesis_nets_macro_defs@
nemesis_nets_strings = @nemesis_nets_strings@
nemesis_networks = @nemesis_networks@
+ofilib = @ofilib@
+ofisrcdir = @ofisrcdir@
oldincludedir = @oldincludedir@
opalib = @opalib@
opalibdir = @opalibdir@
@@ -725,6 +823,7 @@ pm_name = @pm_name@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/test/commands/Makefile.in b/test/commands/Makefile.in
index 507394f..f30a6ae 100644
--- a/test/commands/Makefile.in
+++ b/test/commands/Makefile.in
@@ -103,6 +103,7 @@ am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_bugfix.m4 \
$(top_srcdir)/confdb/aclocal_cache.m4 \
$(top_srcdir)/confdb/aclocal_cc.m4 \
+ $(top_srcdir)/confdb/aclocal_check_visibility.m4 \
$(top_srcdir)/confdb/aclocal_coverage.m4 \
$(top_srcdir)/confdb/aclocal_cxx.m4 \
$(top_srcdir)/confdb/aclocal_f77.m4 \
@@ -115,39 +116,45 @@ am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_attr_alias.m4 \
$(top_srcdir)/confdb/aclocal_shm.m4 \
$(top_srcdir)/confdb/aclocal_subcfg.m4 \
$(top_srcdir)/confdb/aclocal_util.m4 \
- $(top_srcdir)/confdb/ax_tls.m4 $(top_srcdir)/confdb/libtool.m4 \
+ $(top_srcdir)/confdb/libtool.m4 \
$(top_srcdir)/confdb/ltoptions.m4 \
$(top_srcdir)/confdb/ltsugar.m4 \
$(top_srcdir)/confdb/ltversion.m4 \
$(top_srcdir)/confdb/lt~obsolete.m4 \
+ $(top_srcdir)/confdb/random_r.m4 \
+ $(top_srcdir)/confdb/stdlib_h.m4 \
$(top_srcdir)/maint/version.m4 $(top_srcdir)/subsys_include.m4 \
- $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
+ $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
$(top_srcdir)/src/binding/fortran/use_mpi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
$(top_srcdir)/src/pm/subconfigure.m4 \
$(top_srcdir)/src/pm/gforker/subconfigure.m4 \
- $(top_srcdir)/src/pmi/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/subconfigure.m4 \
$(top_srcdir)/src/pmi/slurm/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/simple/subconfigure.m4 \
- $(top_srcdir)/src/pmi/pmi2/poe/subconfigure.m4 \
- $(top_srcdir)/src/pmi/simple/subconfigure.m4 \
- $(top_srcdir)/src/mpid/pamid/subconfigure.m4 \
- $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/mxm/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/ofi/subconfigure.m4 \
- $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/tcp/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/util/sock/subconfigure.m4 \
$(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/llc/subconfigure.m4 \
- $(top_srcdir)/src/mpid/common/sock/poll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/hcoll/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ofi/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/stubshm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/shm/posix/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/shm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/datatype/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/thread/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/portals4/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/stubnm/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/common/sched/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch4/netmod/ucx/subconfigure.m4 \
+ $(top_srcdir)/src/pm/remshell/subconfigure.m4 \
$(top_srcdir)/src/pm/util/subconfigure.m4 \
+ $(top_srcdir)/src/mpid/ch3/channels/nemesis/netmod/portals4/subconfigure.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -297,13 +304,11 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
-ASSERT_LEVEL = @ASSERT_LEVEL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASH_SHELL = @BASH_SHELL@
-BGQ_INSTALL_DIR = @BGQ_INSTALL_DIR@
BSEND_OVERHEAD = @BSEND_OVERHEAD@
CC = $(MPICC)
CCDEPMODE = @CCDEPMODE@
@@ -439,10 +444,72 @@ FORTRAN_MPI_OFFSET = @FORTRAN_MPI_OFFSET@
GCOV = @GCOV@
GNUCXX_MINORVERSION = @GNUCXX_MINORVERSION@
GNUCXX_VERSION = @GNUCXX_VERSION@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
HAVE_CXX_EXCEPTIONS = @HAVE_CXX_EXCEPTIONS@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
HAVE_ERROR_CHECKING = @HAVE_ERROR_CHECKING@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_REALPATH = @HAVE_REALPATH@
HAVE_ROMIO = @HAVE_ROMIO@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE__EXIT = @HAVE__EXIT@
INCLUDE_MPICXX_H = @INCLUDE_MPICXX_H@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -474,6 +541,7 @@ MPICHLIB_CPPFLAGS = @MPICHLIB_CPPFLAGS@
MPICHLIB_CXXFLAGS = @MPICHLIB_CXXFLAGS@
MPICHLIB_FCFLAGS = @MPICHLIB_FCFLAGS@
MPICHLIB_FFLAGS = @MPICHLIB_FFLAGS@
+MPICH_CUSTOM_STRING = @MPICH_CUSTOM_STRING@
MPICH_MPICC_CFLAGS = @MPICH_MPICC_CFLAGS@
MPICH_MPICC_CPPFLAGS = @MPICH_MPICC_CPPFLAGS@
MPICH_MPICC_LDFLAGS = @MPICH_MPICC_LDFLAGS@
@@ -492,8 +560,6 @@ MPICH_MPIFORT_LDFLAGS = @MPICH_MPIFORT_LDFLAGS@
MPICH_MPIFORT_LIBS = @MPICH_MPIFORT_LIBS@
MPICH_NUMVERSION = @MPICH_NUMVERSION@
MPICH_RELEASE_DATE = @MPICH_RELEASE_DATE@
-MPICH_TIMER_KIND = @MPICH_TIMER_KIND@
-MPICH_TIMER_TYPE = @MPICH_TIMER_TYPE@
MPICH_VERSION = @MPICH_VERSION@
MPICONSTMODNAME = @MPICONSTMODNAME@
MPICPP_NAME = @MPICPP_NAME@
@@ -512,7 +578,6 @@ MPIR_CXX_DOUBLE_COMPLEX = @MPIR_CXX_DOUBLE_COMPLEX@
MPIR_CXX_LONG_DOUBLE_COMPLEX = @MPIR_CXX_LONG_DOUBLE_COMPLEX@
MPISIZEOFMODNAME = @MPISIZEOFMODNAME@
MPIU_DLL_SPEC_DEF = @MPIU_DLL_SPEC_DEF@
-MPIU_PINT = @MPIU_PINT@
MPI_2COMPLEX = @MPI_2COMPLEX@
MPI_2DOUBLE_COMPLEX = @MPI_2DOUBLE_COMPLEX@
MPI_2DOUBLE_PRECISION = @MPI_2DOUBLE_PRECISION@
@@ -659,13 +724,28 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
-PAMILIBNAME = @PAMILIBNAME@
PAPI_INCLUDE = @PAPI_INCLUDE@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PMPILIBNAME = @PMPILIBNAME@
PMPI_F08_NAME = @PMPI_F08_NAME@
RANLIB = @RANLIB@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
REQD = @REQD@
REQI1 = @REQI1@
REQI2 = @REQI2@
@@ -691,8 +771,8 @@ USER_FCFLAGS = @USER_FCFLAGS@
USER_FFLAGS = @USER_FFLAGS@
USER_LDFLAGS = @USER_LDFLAGS@
USER_LIBS = @USER_LIBS@
-USE_DBG_LOGGING = @USE_DBG_LOGGING@
VERSION = @VERSION@
+VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
WRAPPER_CFLAGS = @WRAPPER_CFLAGS@
WRAPPER_CPPFLAGS = @WRAPPER_CPPFLAGS@
WRAPPER_CXXFLAGS = @WRAPPER_CXXFLAGS@
@@ -727,6 +807,22 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
+ch4_netmods = @ch4_netmods@
+ch4_nets_array = @ch4_nets_array@
+ch4_nets_array_sz = @ch4_nets_array_sz@
+ch4_nets_func_array = @ch4_nets_func_array@
+ch4_nets_func_decl = @ch4_nets_func_decl@
+ch4_nets_native_func_array = @ch4_nets_native_func_array@
+ch4_nets_native_func_decl = @ch4_nets_native_func_decl@
+ch4_nets_strings = @ch4_nets_strings@
+ch4_shm = @ch4_shm@
+ch4_shm_array = @ch4_shm_array@
+ch4_shm_array_sz = @ch4_shm_array_sz@
+ch4_shm_func_array = @ch4_shm_func_array@
+ch4_shm_func_decl = @ch4_shm_func_decl@
+ch4_shm_native_func_array = @ch4_shm_native_func_array@
+ch4_shm_native_func_decl = @ch4_shm_native_func_decl@
+ch4_shm_strings = @ch4_shm_strings@
channel_name = @channel_name@
datadir = @datadir@
datarootdir = @datarootdir@
@@ -767,6 +863,8 @@ nemesis_nets_func_decl = @nemesis_nets_func_decl@
nemesis_nets_macro_defs = @nemesis_nets_macro_defs@
nemesis_nets_strings = @nemesis_nets_strings@
nemesis_networks = @nemesis_networks@
+ofilib = @ofilib@
+ofisrcdir = @ofisrcdir@
oldincludedir = @oldincludedir@
opalib = @opalib@
opalibdir = @opalibdir@
@@ -777,6 +875,7 @@ pm_name = @pm_name@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
diff --git a/test/mpi/.gitignore b/test/mpi/.gitignore
index 9be20f6..40c2368 100644
--- a/test/mpi/.gitignore
+++ b/test/mpi/.gitignore
@@ -1,600 +1,97 @@
-# entries moved here from the top-level .gitignore
-/confdb
-/f90/ext/ctypesfromc.c
-/f90/attr/Makefile.am
-/f90/datatype/Makefile.am
-/f90/datatype/hindex1f90.f90
-/f90/datatype/hindexed_blockf90.f90
-/f90/datatype/bottomf90.f90
-/f90/datatype/bottomc.c
-/f90/ext/Makefile.am
-/f90/ext/stamp-Makefile.am
-/f90/io/Makefile.am
-/f90/rma/Makefile.am
-/errors/f90/errhan/Makefile.am
-/errors/f90/errhan/testlist
-/errors/f90/errhan/uerrhandf90.f90
-/errors/f90/io
-/errors/f90/testlist
-/errors/f77/errhan/addsize.h
-/errors/f77/errhan/iooffset.h
-/f90/coll/
-/f90/comm/
-/f90/info/
-/f90/init/
-/f90/pt2pt/
-/f90/spawn/
-/f90/topo/
-/f90/profile
-/coll/gdb.script
-/coll/redscat2
-/coll/reduce_local
-/coll/summary.xml
-/f90/attr/attrmpi1f90.f90
-/f90/ext/allocmemf290.f90
-/threads/testlist
-/checktests
-/f77/spawn/testlist
-/f90/datatype/typename3f90.f90
-/aclocal.m4
-/f77/init/checksizes.c
-/f90/datatype/allctypesf90.f90
-/io/test.ord
-/io/i_setviewcur
-/threads/pt2pt/greq_test
-/threads/pt2pt/greq_wait
-/threads/pt2pt/multisend
-/threads/pt2pt/multisend2
-/threads/pt2pt/multisend3
-/threads/pt2pt/multisend4
-/testlist
-/runtests
-/results.txt
-/test.sln
-/test.ncb
-/test.suo
-/attr/attrt
-/attr/attrerr
-/attr/attrerrcomm
-/attr/attrerrtype
-/attr/attrdeleteget
-/attr/attric
-/attr/attrorder
-/attr/attrordercomm
-/attr/attrordertype
-/attr/attrorderwin
-/attr/baseattr2
-/attr/baseattrcomm
-/attr/baseattrwin
-/attr/fkeyval
-/attr/fkeyvalcomm
-/attr/fkeyvaltype
-/attr/fkeyvalwin
-/basic/simple
-/basic/sendrecv
-/basic/wtime
-/basic/netpipe
-/basic/patterns
-/basic/srtest
-/basic/self
-/basic/adapt
-/basic/allmpi
-/basic/Netpipe.out
-/coll/bcasttest
-/coll/allred
-/coll/alltoallv
-/coll/coll8
-/coll/coll13
-/coll/alltoallv
-/coll/redscat
-/coll/coll9
-/coll/coll7
-/coll/coll6
-/coll/coll5
-/coll/coll4
-/coll/coll3
-/coll/coll2
-/coll/allredmany
-/coll/scantst
-/coll/longuser
-/coll/coll10
-/coll/coll11
-/coll/coll12
-/coll/scatterv
-/coll/scattern
-/coll/rerr
-/coll/bcast_full
-/coll/bcast_min_datatypes
-/coll/bcast_comm_world
-/coll/exscan2
-/coll/exscan
-/coll/icallgather
-/coll/icallgatherv
-/coll/icallreduce
-/coll/icalltoall
-/coll/icbarrier
-/coll/icbcast
-/coll/icgather
-/coll/icgatherv
-/coll/icreduce
-/coll/icscatter
-/coll/icscatterv
-/coll/allgatherv2
-/coll/alltoallv0
-/coll/testlist
-/comm/dup
-/comm/ic1
-/comm/cfree
-/comm/commname
-/comm/dupic
-/comm/ctxalloc
-/comm/comm_idup_iallreduce
-/cxx/testlist
-/cxx/topo/testlist
-/cxx/coll/uallreduce
-/cxx/coll/ureduce
-/cxx/coll/uscan
-/cxx/coll/uexscan
-/cxx/coll/icbcastx
-/cxx/coll/icbarrierx
-/cxx/coll/icgatherx
-/cxx/coll/icgathervx
-/cxx/coll/icscatterx
-/cxx/coll/icscattervx
-/cxx/coll/icallgatherx
-/cxx/coll/icallgathervx
-/cxx/coll/icallreducex
-/cxx/io/iwritex.cxx
-/cxx/io/iwriteatx.cxx
-/cxx/io/iwriteshx.cxx
-/cxx/io/writex.cxx
-/cxx/io/writeatx.cxx
-/cxx/io/writeallx.cxx
-/cxx/io/writeordx.cxx
-/cxx/io/writeordbex.cxx
-/cxx/io/writeshx.cxx
-/cxx/io/writeatallx.cxx
-/cxx/io/writeatallbex.cxx
-/cxx/io/writeallbex.cxx
-/cxx/io/iwritenosx.cxx
-/cxx/io/iwriteatnosx.cxx
-/cxx/io/iwriteshnosx.cxx
-/cxx/io/writenosx.cxx
-/cxx/io/writeatnosx.cxx
-/cxx/io/writeallnosx.cxx
-/cxx/io/writeordnosx.cxx
-/cxx/io/writeordbenosx.cxx
-/cxx/io/writeshnosx.cxx
-/cxx/io/writeatallnosx.cxx
-/cxx/io/writeatallbenosx.cxx
-/cxx/io/writeallbenosx.cxx
-/cxx/io/iwritex
-/cxx/io/iwriteatx
-/cxx/io/writex
-/cxx/io/writeatx
-/cxx/io/writeallx
-/cxx/io/writeordx
-/cxx/io/writeordbex
-/cxx/io/writeshx
-/cxx/io/writeatallx
-/cxx/io/writeatallbex
-/cxx/io/writeallbex
-/cxx/io/iwritenosx
-/cxx/io/iwriteatnosx
-/cxx/io/writenosx
-/cxx/io/writeatnosx
-/cxx/io/writeallnosx
-/cxx/io/writeordnosx
-/cxx/io/writeordbenosx
-/cxx/io/writeshnosx
-/cxx/io/writeatallnosx
-/cxx/io/writeatallbenosx
-/cxx/io/writeallbenosx
-/cxx/pt2pt/bsend1cxx
-/cxx/spawn/testlist
-/cxx/spawn/namepubx
-/cxx/spawn/spawnintrax
-/cxx/spawn/spawnintrax
-/cxx/spawn/spawnargvx
-/cxx/spawn/selfconaccx
-/datatype/testlist
-/datatype/segtest
-/datatype/typename
-/datatype/contents
-/datatype/struct-pack
-/datatype/triangular-pack
-/datatype/slice-pack
-/datatype/simple-pack
-/datatype/transpose-pack
-/datatype/lbub
-/datatype/bsend1
-/datatype/getpartelm
-/datatype/localpack
-/datatype/zeroparms
-/errhan/errstring
-/errhan/errcode.c
-/errhan/errcode
-/errhan/adderr
-/errhan/errring
-/errors/testlist
-/errors/coll/noalias
-/errors/coll/noalias2
-/errors/coll/noalias3
-/errors/coll/rerr
-/errors/coll/bcastlength
-/errors/cxx/testlist
-/errors/errhan/errstring
-/errors/errhan/errcode.c
-/errors/errhan/errcode
-/errors/errhan/adderr
-/errors/errhan/errring
-/errors/f77/io/iooffset.h
-/errors/f77/io/addsize.h
-/errors/f77/testlist
-/errors/group/rerr
-/errors/io/fileerrret
-/errors/io/file_errhdl
-/errors/pt2pt/proberank
-/errors/pt2pt/truncmsg2
-/errors/spawn/badport
-/errors/spawn/testlist
-/errors/topo/cartsmall
-/f77/testlist
-/f77/attr/baseattr
-/f77/attr/attraints.h
-/f77/datatype/typeaints.h
-/f77/ext/add1size.h
-/f77/ext/c2f2cf
-/f77/ext/testlist
-/f77/info/infotest
-/f77/io/iwritef.f
-/f77/io/iwriteatf.f
-/f77/io/iwriteshf.f
-/f77/io/writef.f
-/f77/io/writeatf.f
-/f77/io/writeallf.f
-/f77/io/writeordf.f
-/f77/io/writeordbef.f
-/f77/io/writeshf.f
-/f77/io/writeatallf.f
-/f77/io/iwriteatallf.f
-/f77/io/writeatallbef.f
-/f77/io/writeallbef.f
-/f77/io/iwritef
-/f77/io/iwriteatf
-/f77/io/writef
-/f77/io/writeatf
-/f77/io/writeallf
-/f77/io/writeordf
-/f77/io/writeordbef
-/f77/io/writeshf
-/f77/io/writeatall
-/f77/io/writeatallbef
-/f77/io/writeallbef
-/f77/io/i_setviewcurf
-/f77/io/iooffset.h
-/f77/io/iodisp.h
-/f77/io/ioaint.h
-/f77/pt2pt/attr1aints.h
-/f77/rma/addsize.h
-/f77/rma/testlist
-/f77/spawn/type1aint.h
-/f77/spawn/connaccf
-/f77/spawn/namepubf
-/f77/spawn/spawnargvf
-/f77/spawn/spawnmultf
-/f77/spawn/spawnf
-/f77/spawn/spawnmult2f
-/f90/testlist
-/f90/util
-/f90/attr/baseattrf90.f90
-/f90/attr/baseattr2f90.f90
-/f90/attr/baseattrwinf90.f90
-/f90/attr/commattrf90.f90
-/f90/attr/commattr2f90.f90
-/f90/attr/commattr3f90.f90
-/f90/attr/commattr4f90.f90
-/f90/attr/typeattrf90.f90
-/f90/attr/typeattr2f90.f90
-/f90/attr/typeattr3f90.f90
-/f90/attr/winattrf90.f90
-/f90/attr/winattr2f90.f90
-/f90/attr/Makefile.sm
-/f90/attr/testlist
-/f90/coll/uallreducef90.f90
-/f90/coll/alltoallwf90.f90
-/f90/coll/exscanf90.f90
-/f90/coll/inplacef90.f90
-/f90/coll/allredint8f90.f90
-/f90/coll/allredopttf90.f90
-/f90/coll/Makefile.sm
-/f90/coll/testlist
-/f90/comm/Makefile.sm
-/f90/comm/testlist
-/f90/comm/commerrf90.f90
-/f90/comm/commnamef90.f90
-/f90/datatype/Makefile.sm
-/f90/datatype/testlist
-/f90/datatype/typenamef90.f90
-/f90/datatype/packef90.f90
-/f90/datatype/typecntsf90.f90
-/f90/datatype/typem2f90.f90
-/f90/datatype/typesnamef90.f90
-/f90/datatype/typesubf90.f90
-/f90/datatype/gaddressf90.f90
-/f90/datatype/indtype
-/f90/ext/Makefile.sm
-/f90/ext/testlist
-/f90/ext/testlist.in
-/f90/ext/allocmemf90.f90
-/f90/ext/allocmem90.f90
-/f90/ext/c2f2cf90.f90
-/f90/ext/c2f902c.c
-/f90/ext/c2f90mult.c
-/f90/ext/ctypesf90romc.c
-/f90/ext/ctypesinf90.f90
-/f90/info/Makefile.sm
-/f90/info/infotestf90.f90
-/f90/info/infotest2f90.f90
-/f90/info/infotest
-/f90/info/testlist
-/f90/init/Makefile.sm
-/f90/init/testlist
-/f90/init/baseenvf90.f90
-/f90/io/shpositionf90.f90
-/f90/io/fileerrf90.f90
-/f90/io/fileinfof90.f90
-/f90/io/miscfilef90.f90
-/f90/io/atomicityf90.f90
-/f90/io/setviewcurf90.f90
-/f90/io/iwritef90.f90
-/f90/io/iwriteatf90.f90
-/f90/io/iwriteshf90.f90
-/f90/io/writef90.f90
-/f90/io/writeatf90.f90
-/f90/io/writeallf90.f90
-/f90/io/writeordf90.f90
-/f90/io/writeordbef90.f90
-/f90/io/writeshf90.f90
-/f90/io/writeatallf90.f90
-/f90/io/iwriteatallf90.f90
-/f90/io/writeatallbef90.f90
-/f90/io/writeallbef90.f90
-/f90/io/c2f2ciof90.f90
-/f90/io/c2f902cio.c
-/f90/io/c2f90multio.c
-/f90/io/Makefile.sm
-/f90/io/testlist
-/f90/io/testlist.in
-/f90/io/ioharness.defn
-/f90/io/ioharness.tlt
-/f90/io/i_setviewcurf90.f90
-/f90/misc/sizeof
-/f90/misc/f77tof90
-/f90/pt2pt/Makefile.sm
-/f90/pt2pt/testlist
-/f90/pt2pt/statusesf90.f90
-/f90/pt2pt/greqf90.f90
-/f90/pt2pt/greqf90
-/f90/pt2pt/statusesf90
-/f90/rma/Makefile.sm
-/f90/rma/testlist
-/f90/rma/testlist.in
-/f90/rma/winaccf90.f90
-/f90/rma/winerrf90.f90
-/f90/rma/winfencef90.f90
-/f90/rma/wingetf90.f90
-/f90/rma/wingroupf90.f90
-/f90/rma/winnamef90.f90
-/f90/rma/winscale1f90.f90
-/f90/rma/winscale2f90.f90
-/f90/rma/winaccf90
-/f90/rma/winerrf90
-/f90/rma/winfencef90
-/f90/rma/wingetf90
-/f90/rma/wingroupf90
-/f90/rma/winnamef90
-/f90/rma/winscale1f90
-/f90/rma/winscale2f90
-/f90/rma/aintf90.f90
-/f90/rma/c2f2cwinf90.f90
-/f90/rma/c2f902cwin.c
-/f90/spawn/Makefile.sm
-/f90/spawn/testlist
-/f90/spawn/namepubf90.f90
-/f90/spawn/spawnf90.f90
-/f90/spawn/spawnargvf90.f90
-/f90/spawn/spawnmultf90.f90
-/f90/spawn/spawnmult2f90.f90
-/f90/spawn/connaccf90.f90
-/f90/spawn/namepubf90
-/f90/spawn/connaccf90
-/f90/spawn/spawnargvf90
-/f90/spawn/spawnf90
-/f90/spawn/spawnmult2f90
-/f90/spawn/spawnmultf90
-/f90/timer/testlist
-/f90/timer/wtimef90
-/f90/topo/Makefile.sm
-/f90/topo/testlist
-/f90/topo/cartcrf90.f90
-/f08/ring_usempif08
-/f08/hello_usempif08
-/f08/pt2pt/statusesf08
-/f08/pt2pt/allpairf08
-/f08/pt2pt/greqf08
-/f08/pt2pt/dummyf08
-/f08/pt2pt/mprobef08
-/f08/coll/uallreducef08
-/f08/coll/exscanf08
-/f08/coll/alltoallwf08
-/f08/coll/inplacef08
-/f08/coll/allredint8f08
-/f08/coll/allredopttf08
-/f08/coll/reducelocalf08
-/f08/coll/alltoallvf08
-/f08/coll/redscatf08
-/f08/coll/split_typef08
-/f08/coll/nonblockingf08
-/f08/coll/vw_inplacef08
-/f08/coll/red_scat_blockf08
-/f08/coll/nonblocking_inpf08
-/f08/datatype/typenamef08
-/f08/datatype/typesnamef08
-/f08/datatype/typecntsf08
-/f08/datatype/typesubf08
-/f08/datatype/typem2f08
-/f08/datatype/gaddressf08
-/f08/datatype/packef08
-/f08/datatype/allctypesf08
-/f08/datatype/hindex1f08
-/f08/datatype/hindexed_blockf08
-/f08/datatype/typename3f08
-/f08/datatype/structf
-/f08/datatype/indtype
-/f08/datatype/createf08
-/f08/datatype/sizeof
-/f08/datatype/kinds
-/f08/datatype/trf08
-/f08/datatype/get_elem_d
-/f08/datatype/get_elem_u
-/f08/rma/testlist
-/f08/spawn/testlist
-/f08/io/iwriteatallf90.f90
-/f08/io/iwriteatallf90
-/f08/io/i_fcoll_test
-/f08/io/testlist
-/group/errstring
-/group/grouptest
-/group/groupcreate
-/group/grouptest2
-/group/glpid
-/group/groupnullincl
-/group/gtranks
-/info/infodel
-/info/infodup
-/info/infoorder
-/info/infovallen
-/init/exitst1
-/init/exitst2
-/init/initstat
-/init/timeout
-/init/version
-/io/rdwrord
-/io/testfile*
-/io/async
-/io/async_any
-/io/getextent
-/io/i_noncontig
-/io/rdwrzero
-/io/setinfo
-/io/setviewcur
-/io/userioerr
-/maint/testmerge
-/maint/conftimestamp
-/maint/f77tof90
-/manual/singjoin
-/manual/testconnect
-/manual/manyconnect
-/manual/dimsbalanced
-/manual/test-port
-/perf/transp-datatype
-/perf/twovec
-/perf/sendrecvl
-/pt2pt/dup
-/pt2pt/bsend1
-/pt2pt/bsend2
-/pt2pt/bsend3
-/pt2pt/bsend4
-/pt2pt/isendself
-/pt2pt/bsendfrag
-/pt2pt/cancelrecv
-/pt2pt/errinstatta
-/pt2pt/errinstatts
-/pt2pt/errinstatwa
-/pt2pt/errinstatws
-/pt2pt/inactivereq
-/rma/testlist
-/rma/ircpi
-/rma/test1
-/rma/test2
-/rma/test3
-/rma/test4
-/rma/test5
-/rma/transpose1
-/rma/transpose2
-/rma/transpose3
-/rma/transpose4
-/rma/transpose5
-/rma/transpose6
-/rma/transpose7
-/rma/fetchandadd
-/rma/fetchandadd_tree
-/rma/winname
-/rma/accfence1
-/rma/accfence2
-/rma/allocmem
-/rma/getfence1
-/rma/getgroup
-/rma/putfence1
-/rma/putpscw1
-/rma/wintest
-/rma/manyget
-/rma/lock_dt
-/rma/lock_dt_flush
-/rma/lock_dt_flushlocal
-/rma/lockall_dt
-/rma/lockall_dt_flush
-/rma/lockall_dt_flushall
-/rma/lockall_dt_flushlocal
-/rma/lockall_dt_flushlocalall
-/rma/lock_contention_dt
-/spawn/namepub
-/spawn/disconnect3
-/spawn/spaiccreate
-/spawn/spawn1
-/spawn/spawn2
-/threads/pt2pt/threaded_sr
-/threads/pt2pt/alltoall
-/threads/pt2pt/sendselfth
-/threads/mpi_t/mpit_threading
-/threads/spawn/threaded_sr
-/threads/spawn/alltoall
-/threads/spawn/sendselfth
-/topo/cartmap1
-/topo/cartshift1
-/topo/cartsuball
-/topo/dims1
-/topo/graphmap1
-/topo/topodup
-/topo/topotest
+# entries moved here from the top-level .gitignore
# other entries, should be all executables at this point
+/aclocal.m4
/attr/attr2type
+/attr/attrdeleteget
/attr/attrend
/attr/attrend2
+/attr/attrerr
+/attr/attrerrcomm
+/attr/attrerrtype
+/attr/attric
+/attr/attrorder
+/attr/attrordercomm
+/attr/attrordertype
+/attr/attrorderwin
+/attr/attrt
+/attr/baseattr2
+/attr/baseattrcomm
+/attr/baseattrwin
+/attr/fkeyval
+/attr/fkeyvalcomm
+/attr/fkeyvaltype
+/attr/fkeyvalwin
/attr/keyval_double_free
+/basic/Netpipe.out
+/basic/adapt
+/basic/allmpi
+/basic/netpipe
+/basic/patterns
+/basic/self
+/basic/sendrecv
+/basic/simple
+/basic/srtest
+/basic/wtime
+/checktests
/coll/allgather2
/coll/allgather3
+/coll/allgatherv2
/coll/allgatherv3
/coll/allgatherv4
+/coll/allred
/coll/allred2
/coll/allred3
/coll/allred4
/coll/allred5
/coll/allred6
+/coll/allredmany
/coll/alltoall1
+/coll/alltoallv
+/coll/alltoallv
+/coll/alltoallv0
/coll/alltoallw1
/coll/alltoallw2
/coll/alltoallw_zeros
+/coll/bcast_comm_world
+/coll/bcast_full
+/coll/bcast_min_datatypes
+/coll/bcasttest
/coll/bcastzerotype
+/coll/coll10
+/coll/coll11
+/coll/coll12
+/coll/coll13
+/coll/coll2
+/coll/coll3
+/coll/coll4
+/coll/coll5
+/coll/coll6
+/coll/coll7
+/coll/coll8
+/coll/coll9
+/coll/exscan
+/coll/exscan2
/coll/gather
/coll/gather2
/coll/gather_big
+/coll/gdb.script
/coll/iallred
/coll/ibarrier
+/coll/icallgather
+/coll/icallgatherv
+/coll/icallreduce
+/coll/icalltoall
/coll/icalltoallv
/coll/icalltoallw
+/coll/icbarrier
+/coll/icbcast
+/coll/icgather
+/coll/icgatherv
+/coll/icreduce
+/coll/icscatter
+/coll/icscatterv
+/coll/longuser
/coll/nballtoall1
/coll/nbcoll2
/coll/nbredscat
@@ -620,14 +117,24 @@
/coll/red4
/coll/red_scat_block
/coll/red_scat_block2
+/coll/redscat
+/coll/redscat2
/coll/redscat3
/coll/redscatbkinter
/coll/redscatblk3
/coll/redscatinter
/coll/reduce
+/coll/reduce_local
+/coll/rerr
+/coll/scantst
/coll/scatter2
/coll/scatter3
+/coll/scattern
+/coll/scatterv
+/coll/summary.xml
+/coll/testlist
/coll/uoplong
+/comm/cfree
/comm/cmfree
/comm/cmsplit
/comm/cmsplit2
@@ -636,18 +143,25 @@
/comm/comm_group_half
/comm/comm_group_rand
/comm/comm_idup
+/comm/comm_idup_iallreduce
/comm/comm_idup_mul
/comm/comm_idup_overlap
/comm/comm_info
/comm/commcreate1
+/comm/commname
+/comm/ctxalloc
/comm/ctxsplit
+/comm/dup
/comm/dup_with_info
+/comm/dupic
+/comm/ic1
/comm/ic2
/comm/iccreate
/comm/icgroup
/comm/icm
/comm/icsplit
/comm/probe-intercomm
+/confdb
/cxx/attr/attricx
/cxx/attr/attrtx
/cxx/attr/baseattrcommx
@@ -655,10 +169,23 @@
/cxx/attr/fkeyvaltypex
/cxx/coll/alltoallw2x
/cxx/coll/arcomplex
+/cxx/coll/icallgathervx
+/cxx/coll/icallgatherx
+/cxx/coll/icallreducex
/cxx/coll/icalltoallx
+/cxx/coll/icbarrierx
+/cxx/coll/icbcastx
+/cxx/coll/icgathervx
+/cxx/coll/icgatherx
/cxx/coll/icreducex
+/cxx/coll/icscattervx
+/cxx/coll/icscatterx
/cxx/coll/reduceboolx
+/cxx/coll/uallreduce
/cxx/coll/uallredx
+/cxx/coll/uexscan
+/cxx/coll/ureduce
+/cxx/coll/uscan
/cxx/comm/commname2
/cxx/datatype/packsizex
/cxx/datatype/typecntsx
@@ -675,11 +202,58 @@
/cxx/io/fileerrx
/cxx/io/fileinfox
/cxx/io/filemiscx
+/cxx/io/iwriteatnosx
+/cxx/io/iwriteatnosx.cxx
+/cxx/io/iwriteatx
+/cxx/io/iwriteatx.cxx
+/cxx/io/iwritenosx
+/cxx/io/iwritenosx.cxx
/cxx/io/iwriteshnosx
+/cxx/io/iwriteshnosx.cxx
/cxx/io/iwriteshx
+/cxx/io/iwriteshx.cxx
+/cxx/io/iwritex
+/cxx/io/iwritex.cxx
/cxx/io/seekavail
/cxx/io/setinfox
/cxx/io/shpositionx
+/cxx/io/writeallbenosx
+/cxx/io/writeallbenosx.cxx
+/cxx/io/writeallbex
+/cxx/io/writeallbex.cxx
+/cxx/io/writeallnosx
+/cxx/io/writeallnosx.cxx
+/cxx/io/writeallx
+/cxx/io/writeallx.cxx
+/cxx/io/writeatallbenosx
+/cxx/io/writeatallbenosx.cxx
+/cxx/io/writeatallbex
+/cxx/io/writeatallbex.cxx
+/cxx/io/writeatallnosx
+/cxx/io/writeatallnosx.cxx
+/cxx/io/writeatallx
+/cxx/io/writeatallx.cxx
+/cxx/io/writeatnosx
+/cxx/io/writeatnosx.cxx
+/cxx/io/writeatx
+/cxx/io/writeatx.cxx
+/cxx/io/writenosx
+/cxx/io/writenosx.cxx
+/cxx/io/writeordbenosx
+/cxx/io/writeordbenosx.cxx
+/cxx/io/writeordbex
+/cxx/io/writeordbex.cxx
+/cxx/io/writeordnosx
+/cxx/io/writeordnosx.cxx
+/cxx/io/writeordx
+/cxx/io/writeordx.cxx
+/cxx/io/writeshnosx
+/cxx/io/writeshnosx.cxx
+/cxx/io/writeshx
+/cxx/io/writeshx.cxx
+/cxx/io/writex
+/cxx/io/writex.cxx
+/cxx/pt2pt/bsend1cxx
/cxx/pt2pt/sendrecvx
/cxx/rma/fkeyvalwinx
/cxx/rma/getgroupx
@@ -688,8 +262,18 @@
/cxx/rma/winnamex
/cxx/rma/winscale1x
/cxx/rma/winscale2x
+/cxx/spawn/namepubx
+/cxx/spawn/selfconaccx
+/cxx/spawn/spawnargvx
+/cxx/spawn/spawnintrax
+/cxx/spawn/spawnintrax
+/cxx/spawn/testlist
+/cxx/testlist
+/cxx/topo/testlist
/datatype/blockindexed-misc
/datatype/blockindexed-zero-count
+/datatype/bsend1
+/datatype/contents
/datatype/contig-zero-count
/datatype/contigstruct
/datatype/cxx-types
@@ -698,46 +282,68 @@
/datatype/gaddress
/datatype/get-elements
/datatype/get-elements-pairtype
+/datatype/getpartelm
/datatype/hindexed-zeros
/datatype/hindexed_block
/datatype/hindexed_block_contents
/datatype/indexed-misc
/datatype/large-count
+/datatype/lbub
+/datatype/localpack
/datatype/longdouble
/datatype/lots-of-types
/datatype/pairtype-pack
/datatype/pairtype-size-extent
+/datatype/segtest
/datatype/simple-commit
+/datatype/simple-pack
/datatype/simple-pack-external
/datatype/simple-resized
/datatype/simple-size-extent
/datatype/sizedtypes
+/datatype/slice-pack
/datatype/slice-pack-external
/datatype/struct-derived-zeros
/datatype/struct-empty-el
/datatype/struct-ezhov
/datatype/struct-no-real-types
+/datatype/struct-pack
/datatype/struct-verydeep
/datatype/struct-zero-count
/datatype/subarray
/datatype/subarray-pack
+/datatype/testlist
/datatype/tfree
/datatype/tmatchsize
+/datatype/transpose-pack
/datatype/tresized
/datatype/tresized2
+/datatype/triangular-pack
/datatype/typecommit
/datatype/typefree
/datatype/typelb
+/datatype/typename
/datatype/unpack
/datatype/unusual-noncontigs
/datatype/zeroblks
+/datatype/zeroparms
+/errhan/adderr
/errhan/commcall
+/errhan/errcode
+/errhan/errcode.c
/errhan/errfatal
+/errhan/errring
+/errhan/errstring
/errhan/predef_eh
/errors/attr/keyvalmis
/errors/basic/debabort
/errors/basic/lefthandles
+/errors/coll/bcastlength
+/errors/coll/noalias
+/errors/coll/noalias2
+/errors/coll/noalias3
/errors/coll/reduce_local
+/errors/coll/rerr
/errors/comm/ccreate1
/errors/comm/cfree
/errors/comm/manysplit
@@ -752,20 +358,41 @@
/errors/cxx/io/errgetfilex
/errors/cxx/io/fileerrretx
/errors/cxx/io/throwtestfilex
+/errors/cxx/testlist
/errors/datatype/getcnterr
+/errors/errhan/adderr
+/errors/errhan/errcode
+/errors/errhan/errcode.c
+/errors/errhan/errring
+/errors/errhan/errstring
+/errors/f77/errhan/addsize.h
+/errors/f77/errhan/iooffset.h
/errors/f77/errhan/uerrhandf
+/errors/f77/io/addsize.h
+/errors/f77/io/iooffset.h
+/errors/f77/testlist
/errors/f90/errhan/
+/errors/f90/errhan/Makefile.am
+/errors/f90/errhan/testlist
+/errors/f90/errhan/uerrhandf90.f90
+/errors/f90/io
+/errors/f90/testlist
/errors/faults/collf1
/errors/faults/collf2
/errors/faults/pt2ptf1
/errors/faults/pt2ptf2
/errors/group/gerr
+/errors/group/rerr
+/errors/io/file_errhdl
+/errors/io/fileerrret
/errors/io/openerr
/errors/pt2pt/errinstatta
/errors/pt2pt/errinstatts
/errors/pt2pt/errinstatwa
/errors/pt2pt/errinstatws
+/errors/pt2pt/proberank
/errors/pt2pt/truncmsg1
+/errors/pt2pt/truncmsg2
/errors/rma/cas_type_check
/errors/rma/win_sync_complete
/errors/rma/win_sync_free_at
@@ -778,9 +405,160 @@
/errors/rma/win_sync_unlock
/errors/rma/winerr
/errors/rma/winerr2
+/errors/spawn/badport
/errors/spawn/lookup_name
+/errors/spawn/testlist
/errors/spawn/unpub
+/errors/testlist
+/errors/topo/cartsmall
+/f08/attr/attrlangf08
+/f08/attr/attrmpi1f08
+/f08/attr/baseattr2f08
+/f08/attr/baseattr3f08
+/f08/attr/baseattrf08
+/f08/attr/commattr2f08
+/f08/attr/commattr3f08
+/f08/attr/commattrf08
+/f08/attr/fandcattrf08
+/f08/attr/typeattr2f08
+/f08/attr/typeattr3f08
+/f08/attr/typeattrf08
+/f08/coll/allredint8f08
+/f08/coll/allredopttf08
+/f08/coll/alltoallvf08
+/f08/coll/alltoallwf08
+/f08/coll/exscanf08
+/f08/coll/inplacef08
+/f08/coll/nonblocking_inpf08
+/f08/coll/nonblockingf08
+/f08/coll/red_scat_blockf08
+/f08/coll/redscatf08
+/f08/coll/reducelocalf08
+/f08/coll/split_typef08
+/f08/coll/uallreducef08
+/f08/coll/vw_inplacef08
+/f08/comm/commerrf08
+/f08/comm/commnamef08
+/f08/datatype/allctypesf08
+/f08/datatype/createf08
+/f08/datatype/gaddressf08
+/f08/datatype/get_elem_d
+/f08/datatype/get_elem_u
+/f08/datatype/hindex1f08
+/f08/datatype/hindexed_blockf08
+/f08/datatype/indtype
+/f08/datatype/kinds
+/f08/datatype/packef08
+/f08/datatype/sizeof
+/f08/datatype/structf
+/f08/datatype/trf08
+/f08/datatype/typecntsf08
+/f08/datatype/typem2f08
+/f08/datatype/typename3f08
+/f08/datatype/typenamef08
+/f08/datatype/typesnamef08
+/f08/datatype/typesubf08
+/f08/ext/c2f2cf90
+/f08/ext/c2f902c.c
+/f08/ext/c2f90mult
+/f08/ext/ctypesfromc.c
+/f08/ext/ctypesinf90
+/f08/hello_usempif08
+/f08/info/infotest2f90
+/f08/info/infotestf90
+/f08/init/baseenvf90
+/f08/io/atomicityf90
+/f08/io/c2f2ciof90
+/f08/io/c2f90multio
+/f08/io/fileerrf90
+/f08/io/fileinfof90
+/f08/io/i_fcoll_test
+/f08/io/iwriteatallf90
+/f08/io/iwriteatallf90.f90
+/f08/io/iwriteatf90
+/f08/io/iwriteatf90.f90
+/f08/io/iwritef90
+/f08/io/iwritef90.f90
+/f08/io/iwriteshf90
+/f08/io/iwriteshf90.f90
+/f08/io/miscfilef90
+/f08/io/setviewcurf90
+/f08/io/shpositionf90
+/f08/io/testlist
+/f08/io/writeallbef90
+/f08/io/writeallbef90.f90
+/f08/io/writeallf90
+/f08/io/writeallf90.f90
+/f08/io/writeatallbef90
+/f08/io/writeatallbef90.f90
+/f08/io/writeatallf90
+/f08/io/writeatallf90.f90
+/f08/io/writeatf90
+/f08/io/writeatf90.f90
+/f08/io/writef90
+/f08/io/writef90.f90
+/f08/io/writeordbef90
+/f08/io/writeordbef90.f90
+/f08/io/writeordf90
+/f08/io/writeordf90.f90
+/f08/io/writeshf90
+/f08/io/writeshf90.f90
+/f08/misc/hello
+/f08/misc/ring
+/f08/misc/sizeof2
+/f08/profile/profile1f90
+/f08/pt2pt/allpairf08
+/f08/pt2pt/dummyf08
+/f08/pt2pt/greqf08
+/f08/pt2pt/mprobef08
+/f08/pt2pt/statusesf08
+/f08/ring_usempif08
+/f08/rma/aintf08
+/f08/rma/baseattrwinf08
+/f08/rma/c2f2cwinf08
+/f08/rma/testlist
+/f08/rma/winaccf08
+/f08/rma/winattr2f08
+/f08/rma/winattrf08
+/f08/rma/winerrf08
+/f08/rma/winfencef08
+/f08/rma/wingetf08
+/f08/rma/wingroupf08
+/f08/rma/winnamef08
+/f08/rma/winscale1f08
+/f08/rma/winscale2f08
+/f08/spawn/connaccf90
+/f08/spawn/namepubf90
+/f08/spawn/spawnargvf03
+/f08/spawn/spawnargvf90
+/f08/spawn/spawnf90
+/f08/spawn/spawnmult2f90
+/f08/spawn/spawnmultf03
+/f08/spawn/spawnmultf90
+/f08/spawn/testlist
+/f08/subarray/test1
+/f08/subarray/test10
+/f08/subarray/test11
+/f08/subarray/test12
+/f08/subarray/test13
+/f08/subarray/test14
+/f08/subarray/test15
+/f08/subarray/test2
+/f08/subarray/test3
+/f08/subarray/test4
+/f08/subarray/test5
+/f08/subarray/test6
+/f08/subarray/test7
+/f08/subarray/test8
+/f08/subarray/test9
+/f08/timer/wtimef90
+/f08/topo/cart_subf90
+/f08/topo/cartcrf90
+/f08/topo/dgraph_unwgtf90
+/f08/topo/dgraph_wgtf90
+/f77/attr/attraints.h
/f77/attr/attrmpi1f
+/f77/attr/baseattr
/f77/attr/baseattr2f
/f77/attr/baseattrf
/f77/attr/commattr2f
@@ -807,40 +585,77 @@
/f77/comm/commerrf
/f77/comm/commnamef
/f77/datatype/allctypesf
+/f77/datatype/bottom
/f77/datatype/gaddressf
/f77/datatype/hindex1f
/f77/datatype/hindexed_blockf
/f77/datatype/packef
+/f77/datatype/typeaints.h
/f77/datatype/typecntsf
/f77/datatype/typem2f
/f77/datatype/typename3f
/f77/datatype/typenamef
/f77/datatype/typesnamef
/f77/datatype/typesubf
-/f77/datatype/bottom
+/f77/ext/add1size.h
+/f77/ext/c2f2cf
/f77/ext/c2fmult
/f77/ext/ctypesinf
+/f77/ext/testlist
+/f77/info/infotest
/f77/info/infotest2f
/f77/info/infotestf
/f77/init/baseenvf
+/f77/init/checksizes.c
/f77/io/atomicityf
/f77/io/c2f2ciof
/f77/io/c2fmultio
/f77/io/fileerrf
/f77/io/fileinfof
+/f77/io/i_setviewcurf
+/f77/io/ioaint.h
+/f77/io/iodisp.h
+/f77/io/iooffset.h
+/f77/io/iwriteatallf
+/f77/io/iwriteatallf.f
+/f77/io/iwriteatf
+/f77/io/iwriteatf.f
+/f77/io/iwritef
+/f77/io/iwritef.f
/f77/io/iwriteshf
+/f77/io/iwriteshf.f
/f77/io/miscfilef
/f77/io/setviewcurf
/f77/io/shpositionf
-/f77/io/writeatallf
-/f77/io/iwriteatallf
/f77/io/testlist
+/f77/io/writeallbef
+/f77/io/writeallbef.f
+/f77/io/writeallf
+/f77/io/writeallf.f
+/f77/io/writeatall
+/f77/io/writeatallbef
+/f77/io/writeatallbef.f
+/f77/io/writeatallf
+/f77/io/writeatallf.f
+/f77/io/writeatf
+/f77/io/writeatf.f
+/f77/io/writef
+/f77/io/writef.f
+/f77/io/writeordbef
+/f77/io/writeordbef.f
+/f77/io/writeordf
+/f77/io/writeordf.f
+/f77/io/writeshf
+/f77/io/writeshf.f
/f77/pt2pt/allpairf
+/f77/pt2pt/attr1aints.h
/f77/pt2pt/greqf
/f77/pt2pt/mprobef
/f77/pt2pt/statusesf
+/f77/rma/addsize.h
/f77/rma/baseattrwinf
/f77/rma/c2f2cwinf
+/f77/rma/testlist
/f77/rma/winaccf
/f77/rma/winattr2f
/f77/rma/winattrf
@@ -851,93 +666,299 @@
/f77/rma/winnamef
/f77/rma/winscale1f
/f77/rma/winscale2f
+/f77/spawn/connaccf
+/f77/spawn/namepubf
+/f77/spawn/spawnargvf
+/f77/spawn/spawnf
+/f77/spawn/spawnmult2f
+/f77/spawn/spawnmultf
+/f77/spawn/testlist
+/f77/spawn/type1aint.h
+/f77/testlist
/f77/topo/cartcrf
/f77/topo/dgraph_unwgtf
/f77/topo/dgraph_wgtf
+/f90/attr/Makefile.am
+/f90/attr/Makefile.sm
/f90/attr/attrlangf90
/f90/attr/attrmpi1f90
+/f90/attr/attrmpi1f90.f90
/f90/attr/baseattr2f90
+/f90/attr/baseattr2f90.f90
/f90/attr/baseattr3f90
/f90/attr/baseattrf90
+/f90/attr/baseattrf90.f90
+/f90/attr/baseattrwinf90.f90
/f90/attr/commattr2f90
+/f90/attr/commattr2f90.f90
/f90/attr/commattr3f90
+/f90/attr/commattr3f90.f90
/f90/attr/commattr4f90
+/f90/attr/commattr4f90.f90
/f90/attr/commattrf90
+/f90/attr/commattrf90.f90
/f90/attr/fandcattrf90
+/f90/attr/testlist
/f90/attr/typeattr2f90
+/f90/attr/typeattr2f90.f90
/f90/attr/typeattr3f90
+/f90/attr/typeattr3f90.f90
/f90/attr/typeattrf90
+/f90/attr/typeattrf90.f90
+/f90/attr/winattr2f90.f90
+/f90/attr/winattrf90.f90
+/f90/coll/
+/f90/coll/Makefile.sm
+/f90/coll/allredint8f90.f90
+/f90/coll/allredopttf90.f90
+/f90/coll/alltoallwf90.f90
+/f90/coll/exscanf90.f90
+/f90/coll/inplacef90.f90
+/f90/coll/testlist
+/f90/coll/uallreducef90.f90
+/f90/comm/
+/f90/comm/Makefile.sm
+/f90/comm/commerrf90.f90
+/f90/comm/commnamef90.f90
+/f90/comm/testlist
+/f90/datatype/Makefile.am
+/f90/datatype/Makefile.sm
/f90/datatype/allctypesf90
+/f90/datatype/allctypesf90.f90
+/f90/datatype/bottomc.c
+/f90/datatype/bottomf90.f90
/f90/datatype/createf90
/f90/datatype/gaddressf90
+/f90/datatype/gaddressf90.f90
/f90/datatype/get_elem_d
/f90/datatype/get_elem_u
/f90/datatype/hindex1f90
+/f90/datatype/hindex1f90.f90
/f90/datatype/hindexed_blockf90
+/f90/datatype/hindexed_blockf90.f90
+/f90/datatype/indtype
/f90/datatype/kinds
/f90/datatype/packef90
+/f90/datatype/packef90.f90
/f90/datatype/sizeof
/f90/datatype/structf
+/f90/datatype/testlist
/f90/datatype/trf90
/f90/datatype/typecntsf90
+/f90/datatype/typecntsf90.f90
/f90/datatype/typem2f90
+/f90/datatype/typem2f90.f90
/f90/datatype/typename3f90
+/f90/datatype/typename3f90.f90
/f90/datatype/typenamef90
+/f90/datatype/typenamef90.f90
/f90/datatype/typesnamef90
+/f90/datatype/typesnamef90.f90
/f90/datatype/typesubf90
+/f90/datatype/typesubf90.f90
+/f90/ext/Makefile.am
+/f90/ext/Makefile.sm
+/f90/ext/allocmem90.f90
+/f90/ext/allocmemf290.f90
+/f90/ext/allocmemf90.f90
/f90/ext/c2f2cf90
+/f90/ext/c2f2cf90.f90
+/f90/ext/c2f902c.c
/f90/ext/c2f90mult
+/f90/ext/c2f90mult.c
+/f90/ext/ctypesf90romc.c
+/f90/ext/ctypesfromc.c
/f90/ext/ctypesinf90
+/f90/ext/ctypesinf90.f90
+/f90/ext/stamp-Makefile.am
+/f90/ext/testlist
+/f90/ext/testlist.in
/f90/f90types/createf90types
+/f90/info/
+/f90/info/Makefile.sm
+/f90/info/infotest
+/f90/info/infotest2f90.f90
+/f90/info/infotestf90.f90
+/f90/info/testlist
+/f90/init/
+/f90/init/Makefile.sm
+/f90/init/baseenvf90.f90
+/f90/init/testlist
+/f90/io/Makefile.am
+/f90/io/Makefile.sm
/f90/io/atomicityf90
+/f90/io/atomicityf90.f90
/f90/io/c2f2ciof90
+/f90/io/c2f2ciof90.f90
+/f90/io/c2f902cio.c
/f90/io/c2f90multio
+/f90/io/c2f90multio.c
/f90/io/fileerrf90
+/f90/io/fileerrf90.f90
/f90/io/fileinfof90
+/f90/io/fileinfof90.f90
+/f90/io/i_setviewcurf90.f90
+/f90/io/ioharness.defn
+/f90/io/ioharness.tlt
+/f90/io/iwriteatallf90
+/f90/io/iwriteatallf90.f90
/f90/io/iwriteatf90
+/f90/io/iwriteatf90.f90
/f90/io/iwritef90
+/f90/io/iwritef90.f90
/f90/io/iwriteshf90
+/f90/io/iwriteshf90.f90
/f90/io/miscfilef90
+/f90/io/miscfilef90.f90
/f90/io/setviewcurf90
+/f90/io/setviewcurf90.f90
/f90/io/shpositionf90
+/f90/io/shpositionf90.f90
+/f90/io/testlist
+/f90/io/testlist.in
/f90/io/writeallbef90
+/f90/io/writeallbef90.f90
/f90/io/writeallf90
+/f90/io/writeallf90.f90
/f90/io/writeatallbef90
+/f90/io/writeatallbef90.f90
/f90/io/writeatallf90
-/f90/io/iwriteatallf90
+/f90/io/writeatallf90.f90
/f90/io/writeatf90
+/f90/io/writeatf90.f90
/f90/io/writef90
+/f90/io/writef90.f90
/f90/io/writeordbef90
+/f90/io/writeordbef90.f90
/f90/io/writeordf90
+/f90/io/writeordf90.f90
/f90/io/writeshf90
+/f90/io/writeshf90.f90
+/f90/misc/f77tof90
+/f90/misc/sizeof
/f90/misc/sizeof2
+/f90/profile
+/f90/pt2pt/
+/f90/pt2pt/Makefile.sm
+/f90/pt2pt/greqf90
+/f90/pt2pt/greqf90.f90
+/f90/pt2pt/statusesf90
+/f90/pt2pt/statusesf90.f90
+/f90/pt2pt/testlist
+/f90/rma/Makefile.am
+/f90/rma/Makefile.sm
+/f90/rma/aintf90.f90
/f90/rma/baseattrwinf90
/f90/rma/c2f2cwinf90
+/f90/rma/c2f2cwinf90.f90
+/f90/rma/c2f902cwin.c
+/f90/rma/testlist
+/f90/rma/testlist.in
+/f90/rma/winaccf90
+/f90/rma/winaccf90.f90
/f90/rma/winattr2f90
/f90/rma/winattrf90
+/f90/rma/winerrf90
+/f90/rma/winerrf90.f90
+/f90/rma/winfencef90
+/f90/rma/winfencef90.f90
+/f90/rma/wingetf90
+/f90/rma/wingetf90.f90
+/f90/rma/wingroupf90
+/f90/rma/wingroupf90.f90
+/f90/rma/winnamef90
+/f90/rma/winnamef90.f90
+/f90/rma/winscale1f90
+/f90/rma/winscale1f90.f90
+/f90/rma/winscale2f90
+/f90/rma/winscale2f90.f90
+/f90/spawn/
+/f90/spawn/Makefile.sm
+/f90/spawn/connaccf90
+/f90/spawn/connaccf90.f90
+/f90/spawn/namepubf90
+/f90/spawn/namepubf90.f90
+/f90/spawn/spawnargvf90
+/f90/spawn/spawnargvf90.f90
+/f90/spawn/spawnf90
+/f90/spawn/spawnf90.f90
+/f90/spawn/spawnmult2f90
+/f90/spawn/spawnmult2f90.f90
+/f90/spawn/spawnmultf90
+/f90/spawn/spawnmultf90.f90
+/f90/spawn/testlist
+/f90/testlist
+/f90/timer/testlist
+/f90/timer/wtimef90
+/f90/topo/
+/f90/topo/Makefile.sm
+/f90/topo/cartcrf90.f90
+/f90/topo/testlist
+/f90/util
+/group/errstring
+/group/glpid
+/group/groupcreate
+/group/groupnullincl
+/group/grouptest
+/group/grouptest2
+/group/gtranks
/group/gtranksperf
+/impls/hydra/dummy
+/impls/hydra/proc_binding.sh
+/impls/mpich/testlist
+/impls/testlist
+/info/infodel
+/info/infodup
/info/infoenv
/info/infomany
/info/infomany2
+/info/infoorder
/info/infotest
+/info/infovallen
/init/attrself
+/init/exitst1
+/init/exitst2
/init/exitst3
/init/finalized
+/init/initstat
/init/library_version
+/init/timeout
+/init/version
+/io/async
+/io/async_any
+/io/external32-derived-dtype
+/io/getextent
+/io/i_noncontig
+/io/i_setviewcur
+/io/rdwrord
+/io/rdwrzero
/io/resized
+/io/setinfo
+/io/setviewcur
+/io/test.ord
+/io/testfile*
/io/testlist
+/io/userioerr
+/maint/conftimestamp
+/maint/f77tof90
+/maint/testmerge
+/manual/dimsbalanced
+/manual/manyconnect
/manual/mpi_t/mpit_test
/manual/mpi_t/mpit_test2
/manual/mpi_t/nem_fbox_fallback_to_queue_count
/manual/mpi_t/unexpected_recvq_buffer_size
/manual/segfault
+/manual/singjoin
/manual/spawntest_child
/manual/spawntest_master
+/manual/test-port
+/manual/testconnect
/manual/testconnectserial
-/mpi_t/mpi_t_str
-/mpi_t/mpit_vars
/mpi_t/cvarwrite
/mpi_t/getindex
+/mpi_t/mpi_t_str
+/mpi_t/mpit_vars
/perf/allredtrace
/perf/commcreatep
/perf/dtpack
@@ -946,17 +967,35 @@
/perf/nestvec
/perf/nestvec2
/perf/non_zero_root
+/perf/sendrecvl
/perf/timer
+/perf/transp-datatype
+/perf/twovec
/pt2pt/anyall
/pt2pt/bottom
+/pt2pt/bsend1
+/pt2pt/bsend2
+/pt2pt/bsend3
+/pt2pt/bsend4
/pt2pt/bsend5
/pt2pt/bsendalign
+/pt2pt/bsendfrag
/pt2pt/bsendpending
+/pt2pt/cancelrecv
+/pt2pt/dtype_send
+/pt2pt/dup
/pt2pt/eagerdt
+/pt2pt/errinstatta
+/pt2pt/errinstatts
+/pt2pt/errinstatwa
+/pt2pt/errinstatws
/pt2pt/greq1
/pt2pt/icsend
+/pt2pt/inactivereq
+/pt2pt/isendself
/pt2pt/isendselfprobe
/pt2pt/large_message
+/pt2pt/manylmt
/pt2pt/mprobe
/pt2pt/pingping
/pt2pt/probe-unexp
@@ -976,9 +1015,13 @@
/pt2pt/sendself
/pt2pt/waitany-null
/pt2pt/waittestnull
+/results.txt
+/rma/accfence1
+/rma/accfence2
/rma/accfence2_am
/rma/accpscw1
/rma/adlb_mimic1
+/rma/allocmem
/rma/attrorderwin
/rma/baseattrwin
/rma/compare_and_swap
@@ -992,7 +1035,9 @@
/rma/fetch_and_op_long
/rma/fetch_and_op_long_double
/rma/fetch_and_op_short
+/rma/fetchandadd
/rma/fetchandadd_am
+/rma/fetchandadd_tree
/rma/fetchandadd_tree_am
/rma/fkeyvalwin
/rma/flush
@@ -1005,6 +1050,9 @@
/rma/get_accumulate_long_derived
/rma/get_accumulate_short
/rma/get_accumulate_short_derived
+/rma/getfence1
+/rma/getgroup
+/rma/ircpi
/rma/linked_list
/rma/linked_list_bench_lock_all
/rma/linked_list_bench_lock_excl
@@ -1012,11 +1060,21 @@
/rma/linked_list_bench_lock_shr_nocheck
/rma/linked_list_fop
/rma/linked_list_lockall
+/rma/lock_contention_dt
+/rma/lock_dt
+/rma/lock_dt_flush
+/rma/lock_dt_flushlocal
+/rma/lockall_dt
+/rma/lockall_dt_flush
+/rma/lockall_dt_flushall
+/rma/lockall_dt_flushlocal
+/rma/lockall_dt_flushlocalall
/rma/lockcontention
/rma/lockcontention2
/rma/lockcontention3
/rma/locknull
/rma/lockopts
+/rma/manyget
/rma/manyrma2
/rma/mixedsync
/rma/mutex_bench
@@ -1025,9 +1083,12 @@
/rma/pscw_ordering
/rma/put_base
/rma/put_bottom
+/rma/putfence1
/rma/putfidx
+/rma/putpscw1
/rma/req_example
/rma/reqops
+/rma/rget-unlock
/rma/rmanull
/rma/rmazero
/rma/selfrma
@@ -1039,12 +1100,25 @@
/rma/strided_getacc_indexed_shared
/rma/strided_putget_indexed
/rma/strided_putget_indexed_shared
+/rma/test1
/rma/test1_am
/rma/test1_dt
+/rma/test2
/rma/test2_am
+/rma/test3
/rma/test3_am
+/rma/test4
/rma/test4_am
+/rma/test5
/rma/test5_am
+/rma/testlist
+/rma/transpose1
+/rma/transpose2
+/rma/transpose3
+/rma/transpose4
+/rma/transpose5
+/rma/transpose6
+/rma/transpose7
/rma/win_dynamic_acc
/rma/win_flavors
/rma/win_info
@@ -1053,22 +1127,29 @@
/rma/win_shared_noncontig_put
/rma/wincall
/rma/window_creation
-/spawn/testlist
+/rma/winname
+/rma/wintest
+/runtests
/spawn/concurrent_spawns
/spawn/disconnect
/spawn/disconnect2
+/spawn/disconnect3
/spawn/disconnect_reconnect
/spawn/disconnect_reconnect2
/spawn/disconnect_reconnect3
/spawn/join
/spawn/multiple_ports
/spawn/multiple_ports2
+/spawn/namepub
/spawn/pgroup_connect_test
/spawn/pgroup_intercomm_test
/spawn/selfconacc
/spawn/spaconacc
/spawn/spaconacc2
+/spawn/spaiccreate
/spawn/spaiccreate2
+/spawn/spawn1
+/spawn/spawn2
/spawn/spawnargv
/spawn/spawninfo1
/spawn/spawnintra
@@ -1076,6 +1157,14 @@
/spawn/spawnminfo1
/spawn/spawnmult2
/spawn/taskmaster
+/spawn/testlist
+/test.ncb
+/test.sln
+/test.suo
+/testlist
+/threads/coll/allred
+/threads/coll/iallred
+/threads/coll/testlist
/threads/comm/comm_create_group_threads
/threads/comm/comm_create_threads
/threads/comm/comm_dup_deadlock
@@ -1086,21 +1175,36 @@
/threads/comm/idup_nb
/threads/comm/testlist
/threads/init/initth
+/threads/mpi_t/mpit_threading
+/threads/pt2pt/alltoall
+/threads/pt2pt/greq_test
+/threads/pt2pt/greq_wait
+/threads/pt2pt/multisend
+/threads/pt2pt/multisend2
+/threads/pt2pt/multisend3
+/threads/pt2pt/multisend4
+/threads/pt2pt/sendselfth
+/threads/pt2pt/threaded_sr
/threads/pt2pt/threads
+/threads/spawn/alltoall
/threads/spawn/multispawn
+/threads/spawn/sendselfth
/threads/spawn/th_taskmaster
-/threads/coll/iallred
-/threads/coll/allred
-/threads/coll/testlist
+/threads/spawn/threaded_sr
+/threads/testlist
/topo/cartcreates
+/topo/cartmap1
+/topo/cartshift1
+/topo/cartsuball
/topo/cartzero
/topo/dgraph_unwgt
+/topo/dims1
/topo/dims2
+/topo/dims5
/topo/distgraph1
/topo/graphcr
/topo/graphcr2
+/topo/graphmap1
/topo/neighb_coll
-/impls/hydra/dummy
-/impls/hydra/proc_binding.sh
-/impls/mpich/testlist
-/impls/testlist
+/topo/topodup
+/topo/topotest
diff --git a/test/mpi/Makefile.in b/test/mpi/Makefile.in
index 60b2f36..a0ea0aa 100644
--- a/test/mpi/Makefile.in
+++ b/test/mpi/Makefile.in
@@ -396,6 +396,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -414,7 +415,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
# mix in the "make testing" rule and other boilerplate
ACLOCAL_AMFLAGS = -I confdb
@@ -927,10 +928,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Need to patch some things up:
# Make sure to disable rebuilding the autotools related files - the
diff --git a/test/mpi/Makefile.mtest b/test/mpi/Makefile.mtest
index 67a9983..cee8c14 100644
--- a/test/mpi/Makefile.mtest
+++ b/test/mpi/Makefile.mtest
@@ -34,9 +34,11 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
diff --git a/test/mpi/Makefile_f08.mtest b/test/mpi/Makefile_f08.mtest
index 1539c61..9bbf3a1 100644
--- a/test/mpi/Makefile_f08.mtest
+++ b/test/mpi/Makefile_f08.mtest
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/attr/Makefile.in b/test/mpi/attr/Makefile.in
index 6cd8bf5..385925e 100644
--- a/test/mpi/attr/Makefile.in
+++ b/test/mpi/attr/Makefile.in
@@ -482,6 +482,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -500,7 +501,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -881,10 +882,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/attr/keyval_double_free_comm.c b/test/mpi/attr/keyval_double_free_comm.c
index f14b09e..5baf9e6 100644
--- a/test/mpi/attr/keyval_double_free_comm.c
+++ b/test/mpi/attr/keyval_double_free_comm.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
*
- * (C) 2015 by Argonne National Laboratory.
+ * (C) 2009 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#include <mpi.h>
diff --git a/test/mpi/basic/Makefile.in b/test/mpi/basic/Makefile.in
index 98fe391..283dd69 100644
--- a/test/mpi/basic/Makefile.in
+++ b/test/mpi/basic/Makefile.in
@@ -399,6 +399,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -417,7 +418,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
noinst_HEADERS = GetOpt.h
netpipe_SOURCES = netmpi.c GetOpt.c
adapt_SOURCES = adapt.c GetOpt.c
@@ -736,10 +737,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/ckpoint/Makefile.in b/test/mpi/ckpoint/Makefile.in
index 551c43b..783c7a3 100644
--- a/test/mpi/ckpoint/Makefile.in
+++ b/test/mpi/ckpoint/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -368,7 +369,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -649,10 +650,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/coll/Makefile.in b/test/mpi/coll/Makefile.in
index 082d7db..266a805 100644
--- a/test/mpi/coll/Makefile.in
+++ b/test/mpi/coll/Makefile.in
@@ -1094,6 +1094,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -1112,7 +1113,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
allgatherv4_LDADD = $(LDADD) -lm
bcast_full_SOURCES = bcast.c
@@ -2259,10 +2260,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/coll/allgatherv4.c b/test/mpi/coll/allgatherv4.c
index b1e1c5a..1105407 100644
--- a/test/mpi/coll/allgatherv4.c
+++ b/test/mpi/coll/allgatherv4.c
@@ -53,6 +53,11 @@ int main(int argc, char **argv)
MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);
+ if (comm_size < 3) {
+ fprintf(stderr, "At least 3 processes required\n");
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+
if (LARGE_BUF * comm_size > MAX_BUF)
goto fn_exit;
diff --git a/test/mpi/coll/bcastzerotype.c b/test/mpi/coll/bcastzerotype.c
index 9ea8fc4..d6716d4 100644
--- a/test/mpi/coll/bcastzerotype.c
+++ b/test/mpi/coll/bcastzerotype.c
@@ -47,6 +47,8 @@ int main(int argc, char *argv[])
assert(buf[i] == wrank * NELEM + i);
}
+ free(buf);
+
MPI_Type_free(&type);
MPI_Finalize();
diff --git a/test/mpi/coll/gather_big.c b/test/mpi/coll/gather_big.c
index e649192..ce37c95 100644
--- a/test/mpi/coll/gather_big.c
+++ b/test/mpi/coll/gather_big.c
@@ -31,6 +31,11 @@ int main(int argc, char *argv[])
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
+ if (size < (ROOT+1)) {
+ fprintf(stderr, "At least %d processes required\n", ROOT+1);
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+
sendbuf = malloc(COUNT * sizeof(long));
if (sendbuf == NULL) {
fprintf(stderr, "PE %d:ERROR: malloc of sendbuf failed\n", rank);
diff --git a/test/mpi/coll/nonblocking.c b/test/mpi/coll/nonblocking.c
index 9942b2b..9d8dffb 100644
--- a/test/mpi/coll/nonblocking.c
+++ b/test/mpi/coll/nonblocking.c
@@ -34,7 +34,7 @@ int main(int argc, char **argv)
int *rcounts = NULL;
int *sdispls = NULL;
int *rdispls = NULL;
- int *types = NULL;
+ MPI_Datatype *types = NULL;
MPI_Comm comm;
MPI_Request req;
@@ -62,7 +62,7 @@ int main(int argc, char **argv)
my_assert(sdispls);
rdispls = malloc(size * sizeof(int));
my_assert(rdispls);
- types = malloc(size * sizeof(int));
+ types = malloc(size * sizeof(MPI_Datatype));
my_assert(types);
for (i = 0; i < size; ++i) {
@@ -204,6 +204,8 @@ int main(int argc, char **argv)
free(sdispls);
if (rdispls)
free(rdispls);
+ if (types)
+ free(types);
if (rank == 0) {
if (errs)
diff --git a/test/mpi/coll/opland.c b/test/mpi/coll/opland.c
index 52970df..e419174 100644
--- a/test/mpi/coll/opland.c
+++ b/test/mpi/coll/opland.c
@@ -202,6 +202,7 @@ int main(int argc, char *argv[])
{
long double ldinbuf[3], ldoutbuf[3];
/* long double */
+ MTEST_VG_MEM_INIT(ldinbuf, 3* sizeof(ldinbuf[0]));
ldinbuf[0] = 1;
ldinbuf[1] = 0;
ldinbuf[2] = (rank > 0);
diff --git a/test/mpi/coll/oplor.c b/test/mpi/coll/oplor.c
index c53c5c6..14fafd2 100644
--- a/test/mpi/coll/oplor.c
+++ b/test/mpi/coll/oplor.c
@@ -205,6 +205,7 @@ int main(int argc, char *argv[])
{
long double ldinbuf[3], ldoutbuf[3];
/* long double */
+ MTEST_VG_MEM_INIT(ldinbuf, 3* sizeof(ldinbuf[0]));
ldinbuf[0] = 1;
ldinbuf[1] = 0;
ldinbuf[2] = (rank > 0);
diff --git a/test/mpi/coll/oplxor.c b/test/mpi/coll/oplxor.c
index 03de2c4..f5099b8 100644
--- a/test/mpi/coll/oplxor.c
+++ b/test/mpi/coll/oplxor.c
@@ -202,6 +202,7 @@ int main(int argc, char *argv[])
{
long double ldinbuf[3], ldoutbuf[3];
/* long double */
+ MTEST_VG_MEM_INIT(ldinbuf, 3* sizeof(ldinbuf[0]));
ldinbuf[0] = 1;
ldinbuf[1] = 0;
ldinbuf[2] = (rank > 0);
diff --git a/test/mpi/coll/opmax.c b/test/mpi/coll/opmax.c
index 0a52ed3..cc8049b 100644
--- a/test/mpi/coll/opmax.c
+++ b/test/mpi/coll/opmax.c
@@ -115,6 +115,7 @@ int main(int argc, char *argv[])
{
long double ldinbuf[3], ldoutbuf[3];
/* long double */
+ MTEST_VG_MEM_INIT(ldinbuf, 3* sizeof(ldinbuf[0]));
ldinbuf[0] = 1;
ldinbuf[1] = 0;
ldinbuf[2] = rank;
diff --git a/test/mpi/coll/opmin.c b/test/mpi/coll/opmin.c
index 9f80256..bc758a5 100644
--- a/test/mpi/coll/opmin.c
+++ b/test/mpi/coll/opmin.c
@@ -115,6 +115,7 @@ int main(int argc, char *argv[])
{
long double ldinbuf[3], ldoutbuf[3];
/* long double */
+ MTEST_VG_MEM_INIT(ldinbuf, 3* sizeof(ldinbuf[0]));
ldinbuf[0] = 1;
ldinbuf[1] = 0;
ldinbuf[2] = rank;
diff --git a/test/mpi/coll/opminloc.c b/test/mpi/coll/opminloc.c
index 29ced04..b7f047c 100644
--- a/test/mpi/coll/opminloc.c
+++ b/test/mpi/coll/opminloc.c
@@ -226,6 +226,7 @@ int main(int argc, char *argv[])
long double val;
int loc;
} cinbuf[3], coutbuf[3];
+ MTEST_VG_MEM_INIT(cinbuf, 3* sizeof(cinbuf[0]));
cinbuf[0].val = 1;
cinbuf[0].loc = rank;
diff --git a/test/mpi/coll/opprod.c b/test/mpi/coll/opprod.c
index 0d25f3a..9c8001e 100644
--- a/test/mpi/coll/opprod.c
+++ b/test/mpi/coll/opprod.c
@@ -138,6 +138,7 @@ int main(int argc, char *argv[])
int dc;
#ifdef HAVE_LONG_DOUBLE
ld_complex ldinbuf[3], ldoutbuf[3];
+ MTEST_VG_MEM_INIT(ldinbuf, 3* sizeof(ldinbuf[0]));
#endif
/* Must determine which C type matches this Fortran type */
MPI_Type_size(MPI_DOUBLE_COMPLEX, &dc);
@@ -257,6 +258,7 @@ int main(int argc, char *argv[])
#ifdef HAVE_LONG_DOUBLE
{
long double ldinbuf[3], ldoutbuf[3];
+ MTEST_VG_MEM_INIT(ldinbuf, 3 * sizeof(ldinbuf[0]));
/* long double */
ldinbuf[0] = (rank < maxsize && rank > 0) ? rank : 1;
ldinbuf[1] = 0;
diff --git a/test/mpi/coll/opsum.c b/test/mpi/coll/opsum.c
index 636c001..cad22f3 100644
--- a/test/mpi/coll/opsum.c
+++ b/test/mpi/coll/opsum.c
@@ -127,6 +127,7 @@ int main(int argc, char *argv[])
int dc;
#ifdef HAVE_LONG_DOUBLE
ld_complex ldinbuf[3], ldoutbuf[3];
+ MTEST_VG_MEM_INIT(ldinbuf, 3 * sizeof(ldinbuf[0]));
#endif
/* Must determine which C type matches this Fortran type */
MPI_Type_size(MPI_DOUBLE_COMPLEX, &dc);
@@ -203,6 +204,7 @@ int main(int argc, char *argv[])
#ifdef HAVE_LONG_DOUBLE
{
long double ldinbuf[3], ldoutbuf[3];
+ MTEST_VG_MEM_INIT(ldinbuf, 3 * sizeof(ldinbuf[0]));
/* long double */
ldinbuf[0] = 1;
ldinbuf[1] = 0;
diff --git a/test/mpi/coll/redscat.c b/test/mpi/coll/redscat.c
index 75bb5a4..bfa2987 100644
--- a/test/mpi/coll/redscat.c
+++ b/test/mpi/coll/redscat.c
@@ -51,6 +51,9 @@ int main(int argc, char **argv)
if (rank == 0 && toterr == 0) {
printf(" No Errors\n");
}
+
+ free(sendbuf);
+ free(recvcounts);
MPI_Finalize();
return toterr;
diff --git a/test/mpi/coll/redscat2.c b/test/mpi/coll/redscat2.c
index 2c01ba7..4c14537 100644
--- a/test/mpi/coll/redscat2.c
+++ b/test/mpi/coll/redscat2.c
@@ -115,6 +115,7 @@ int main(int argc, char **argv)
free(recvbuf);
free(sendbuf);
+ free(recvcounts);
}
MPI_Op_free(&left_op);
diff --git a/test/mpi/coll/scatter3.c b/test/mpi/coll/scatter3.c
index c83e413..84e88bb 100644
--- a/test/mpi/coll/scatter3.c
+++ b/test/mpi/coll/scatter3.c
@@ -79,6 +79,8 @@ int main(int argc, char **argv)
}
}
+ free(vecin);
+ free(vecout);
MTest_Finalize(errs);
MPI_Type_free(&vec);
MPI_Finalize();
diff --git a/test/mpi/coll/scattern.c b/test/mpi/coll/scattern.c
index 5bc2fc4..2a3b305 100644
--- a/test/mpi/coll/scattern.c
+++ b/test/mpi/coll/scattern.c
@@ -52,6 +52,8 @@ int main(int argc, char **argv)
else
printf(" No Errors\n");
}
+ free(vecin);
+ free(vecout);
MPI_Type_free(&vec);
MPI_Finalize();
return 0;
diff --git a/test/mpi/coll/uoplong.c b/test/mpi/coll/uoplong.c
index 280a8a7..ab8a43f 100644
--- a/test/mpi/coll/uoplong.c
+++ b/test/mpi/coll/uoplong.c
@@ -45,7 +45,7 @@ int main(int argc, char *argv[])
int wsize, wrank, i, count;
MPI_Datatype tripleType;
double *inVal, *outVal;
- double maxval, sumval;
+ double maxval, sumval, minval;
MPI_Op op;
MTest_Init(&argc, &argv);
@@ -62,7 +62,7 @@ int main(int argc, char *argv[])
inVal = (double *) malloc(3 * count * sizeof(double));
outVal = (double *) malloc(3 * count * sizeof(double));
if (!inVal || !outVal) {
- fprintf(stderr, "Unable to allocated %d words for data\n", 3 * count);
+ fprintf(stderr, "Unable to allocate %d words for data\n", 3 * count);
MPI_Abort(MPI_COMM_WORLD, 1);
}
for (i = 0; i < count * 3; i++) {
@@ -75,6 +75,7 @@ int main(int argc, char *argv[])
for (i = 0; i < 3 * count; i += 3) {
sumval = wsize * (1 + (i & 0x3));
maxval = 1 + ((i + 1) & 0x3);
+ minval = 1 + ((i + 2) & 0x3);
if (outVal[i] != sumval) {
if (errs < MAX_ERRS)
fprintf(stderr, "%d: outval[%d] = %f, expected %f (sum)\n",
@@ -87,10 +88,10 @@ int main(int argc, char *argv[])
count, i + 1, outVal[i + 1], maxval);
errs++;
}
- if (outVal[i + 2] != 1 + ((i + 2) & 0x3)) {
+ if (outVal[i + 2] != minval) {
if (errs < MAX_ERRS)
fprintf(stderr, "%d: outval[%d] = %f, expected %f (min)\n",
- count, i + 2, outVal[i + 2], (double) (1 + ((i + 2) ^ 0x3)));
+ count, i + 2, outVal[i + 2], minval);
errs++;
}
}
diff --git a/test/mpi/comm/Makefile.in b/test/mpi/comm/Makefile.in
index dae9475..d5588e6 100644
--- a/test/mpi/comm/Makefile.in
+++ b/test/mpi/comm/Makefile.in
@@ -556,6 +556,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -574,7 +575,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -1005,10 +1006,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/comm/cmsplit_type.c b/test/mpi/comm/cmsplit_type.c
index 5385fac..819812a 100644
--- a/test/mpi/comm/cmsplit_type.c
+++ b/test/mpi/comm/cmsplit_type.c
@@ -14,9 +14,10 @@
int main(int argc, char *argv[])
{
- int rank, size, verbose = 0;
+ int rank, size, verbose = 0, errs=0, tot_errs=0;
int wrank;
MPI_Comm comm;
+ MPI_Info info;
MPI_Init(&argc, &argv);
@@ -27,38 +28,87 @@ int main(int argc, char *argv[])
/* Check to see if MPI_COMM_TYPE_SHARED works correctly */
MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &comm);
- if (comm == MPI_COMM_NULL)
+ if (comm == MPI_COMM_NULL) {
printf("Expected a non-null communicator, but got MPI_COMM_NULL\n");
+ errs++;
+ }
+ else {
+ MPI_Comm_rank(comm, &rank);
+ MPI_Comm_size(comm, &size);
+ if (rank == 0 && verbose)
+ printf("Created shared subcommunicator of size %d\n", size);
+ MPI_Comm_free(&comm);
+ }
+
+#ifdef MPIX_COMM_TYPE_NEIGHBORHOOD
+ /* the MPICH-specific MPIX_COMM_TYPE_NEIGHBORHOOD*/
+ /* test #1: expected behavior -- user provided a directory, and we
+ * determine which processes share access to it */
+ MPI_Info_create(&info);
+ if (argc == 2)
+ MPI_Info_set(info, "nbhd_common_dirname", argv[1]);
+ else
+ MPI_Info_set(info, "nbhd_common_dirname", ".");
+ MPI_Comm_split_type(MPI_COMM_WORLD, MPIX_COMM_TYPE_NEIGHBORHOOD, 0,
+ info, &comm);
+ if (comm == MPI_COMM_NULL) {
+ printf("Expected a non-null communicator, but got MPI_COMM_NULL\n");
+ errs++;
+ }
else {
MPI_Comm_rank(comm, &rank);
MPI_Comm_size(comm, &size);
if (rank == 0 && verbose)
- printf("Created subcommunicator of size %d\n", size);
+ printf("Correctly created common-file subcommunicator of size %d\n", size);
MPI_Comm_free(&comm);
}
+ /* test #2: a hint we don't know about */
+ MPI_Info_delete(info, "nbhd_common_dirname");
+ MPI_Info_set(info, "mpix_tooth_fairy", "enable");
+ MPI_Comm_split_type(MPI_COMM_WORLD, MPIX_COMM_TYPE_NEIGHBORHOOD, 0,
+ info, &comm);
+ if (comm != MPI_COMM_NULL) {
+ printf("Expected a NULL communicator, but got something else\n");
+ errs++;
+ MPI_Comm_free(&comm);
+ }
+ else {
+ if (rank == 0 && verbose)
+ printf("Unknown hint correctly resulted in NULL communicator\n");
+ }
+
+
+ MPI_Info_free(&info);
+#endif
+
/* Check to see if MPI_UNDEFINED is respected */
MPI_Comm_split_type(MPI_COMM_WORLD, (wrank % 2 == 0) ? MPI_COMM_TYPE_SHARED : MPI_UNDEFINED,
0, MPI_INFO_NULL, &comm);
- if ((wrank % 2) && (comm != MPI_COMM_NULL))
+ if ((wrank % 2) && (comm != MPI_COMM_NULL)) {
printf("Expected MPI_COMM_NULL, but did not get one\n");
+ errs++;
+ }
if (wrank % 2 == 0) {
- if (comm == MPI_COMM_NULL)
+ if (comm == MPI_COMM_NULL) {
printf("Expected a non-null communicator, but got MPI_COMM_NULL\n");
+ errs++;
+ }
else {
MPI_Comm_rank(comm, &rank);
MPI_Comm_size(comm, &size);
if (rank == 0 && verbose)
- printf("Created subcommunicator of size %d\n", size);
+ printf("Created shared subcommunicator of size %d\n", size);
MPI_Comm_free(&comm);
}
}
+ MPI_Reduce(&errs, &tot_errs, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
/* Use wrank because Comm_split_type may return more than one communicator
* across the job, and if so, each will have a rank 0 entry. Test
* output rules are for a single process to write the successful
* test (No Errors) output. */
- if (wrank == 0)
+ if (wrank == 0 && errs == 0)
printf(" No errors\n");
MPI_Finalize();
diff --git a/test/mpi/comm/comm_create_group.c b/test/mpi/comm/comm_create_group.c
index ee0a8df..3c4553f 100644
--- a/test/mpi/comm/comm_create_group.c
+++ b/test/mpi/comm/comm_create_group.c
@@ -51,6 +51,7 @@ int main(int argc, char *argv[])
if (rank == 0)
printf(" No errors\n");
+ free(excl);
MPI_Finalize();
return 0;
}
diff --git a/test/mpi/comm/comm_group_rand.c b/test/mpi/comm/comm_group_rand.c
index 7f609c0..90d143a 100644
--- a/test/mpi/comm/comm_group_rand.c
+++ b/test/mpi/comm/comm_group_rand.c
@@ -55,6 +55,8 @@ int main(int argc, char **argv)
if (rank == 0)
printf(" No Errors\n");
+ free(ranks);
+ free(included);
MPI_Finalize();
return 0;
diff --git a/test/mpi/comm/comm_idup_isend.c b/test/mpi/comm/comm_idup_isend.c
index 0eea1df..38b3b73 100644
--- a/test/mpi/comm/comm_idup_isend.c
+++ b/test/mpi/comm/comm_idup_isend.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -96,6 +102,7 @@ int main(int argc, char **argv)
MTestFreeComm(&testcomm);
}
+ free(sreq);
MTest_Finalize(errs);
MPI_Finalize();
return 0;
diff --git a/test/mpi/comm/testlist b/test/mpi/comm/testlist
index c14e078..8e0411e 100644
--- a/test/mpi/comm/testlist
+++ b/test/mpi/comm/testlist
@@ -15,7 +15,11 @@ cmfree 4
cmsplit 4
cmsplit2 12
probe-intercomm 2
-cmsplit_type 4 mpiversion=3.0
+# one way to split a communicator, if implementation supports it, is by access
+# to a common file system. argument is a directory whose presence or
+# non-presence will determine the communicator split. the other split_type
+# cases will ignore the argument
+cmsplit_type 4 mpiversion=3.0 arg="."
comm_create_group 4 mpiversion=3.0
comm_create_group 8 mpiversion=3.0
comm_group_half 2 mpiversion=3.0
diff --git a/test/mpi/confdb/aclocal_cc.m4 b/test/mpi/confdb/aclocal_cc.m4
index 92e7ee1..23d7365 100644
--- a/test/mpi/confdb/aclocal_cc.m4
+++ b/test/mpi/confdb/aclocal_cc.m4
@@ -521,7 +521,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -626,13 +626,6 @@ if test "$enable_strict_done" != "yes" ; then
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
- 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
- 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
- *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -645,6 +638,16 @@ if test "$enable_strict_done" != "yes" ; then
PAC_APPEND_FLAG([-std=c89],[pac_cc_strict_flags])
PAC_APPEND_FLAG([-Wdeclaration-after-statement],[pac_cc_strict_flags])
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=199506L],[pac_cc_strict_flags]) ;;
+ 2001) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200112L],[pac_cc_strict_flags]) ;;
+ 2008) PAC_APPEND_FLAG([-D_POSIX_C_SOURCE=200809L],[pac_cc_strict_flags]) ;;
+ *) AC_MSG_ERROR([internal error, unexpected POSIX version: '$enable_posix']) ;;
+ esac
fi
# See if the above options work with the compiler
diff --git a/test/mpi/confdb/aclocal_fc.m4 b/test/mpi/confdb/aclocal_fc.m4
index b844009..4318e38 100644
--- a/test/mpi/confdb/aclocal_fc.m4
+++ b/test/mpi/confdb/aclocal_fc.m4
@@ -439,7 +439,7 @@ AC_COMPILE_IFELSE([],[
# module tests do not always use the module output flag. See
# FC_MODULE_EXT , where this is determined.
# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
# f90 -moddir=${dir} ## the Sun f90 compiler
# g95 -fmod=${dir}
#
@@ -448,7 +448,7 @@ AC_COMPILE_IFELSE([],[
# users to use. Alternatively they can use an older version of MPICH.
pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
rm -f conftestdir/NONEXISTENT conftestdir/*
PAC_PUSH_FLAG([FCFLAGS])
FCFLAGS="$FCFLAGS ${mod_flag}conftestdir"
diff --git a/test/mpi/confdb/aclocal_libs.m4 b/test/mpi/confdb/aclocal_libs.m4
index 09e9c4c..8868e99 100644
--- a/test/mpi/confdb/aclocal_libs.m4
+++ b/test/mpi/confdb/aclocal_libs.m4
@@ -48,7 +48,7 @@ AC_DEFUN([PAC_SET_HEADER_LIB_PATH],[
dnl is adding lib64 by default really the right thing to do? What if
dnl we are on a 32-bit host that happens to have both lib dirs available?
[PAC_APPEND_FLAG([-L${with_$1}/lib],[LDFLAGS])
- AS_IF([test -d "${with_$1}/lib64}"],
+ AS_IF([test -d "${with_$1}/lib64"],
[PAC_APPEND_FLAG([-L${with_$1}/lib64],[LDFLAGS])])
])
])
diff --git a/test/mpi/confdb/aclocal_romio.m4 b/test/mpi/confdb/aclocal_romio.m4
index af80d3c..94f4e2e 100644
--- a/test/mpi/confdb/aclocal_romio.m4
+++ b/test/mpi/confdb/aclocal_romio.m4
@@ -786,28 +786,6 @@ EOF
fi
rm -f conftest$EXEEXT mpitest.c
])dnl
-define(PAC_TEST_MPIU_FUNCS,[
- AC_MSG_CHECKING(support for MPICH memory macros)
- rm -f mpitest.c
- cat > mpitest.c <<EOF
-#include "mpi.h"
-#include "stdio.h"
- main(Int argc, char **argv)
- {
- MPIU_Free(NULL);
- }
-EOF
- rm -f conftest$EXEEXT
- $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
- if test -x conftest$EXEEXT ; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
- else
- AC_MSG_RESULT(no)
- fi
- rm -f conftest$EXEEXT mpitest.c
-])dnl
-dnl
define(PAC_TEST_MPI_GREQUEST,[
AC_MSG_CHECKING(support for generalized requests)
rm -f mpitest.c
diff --git a/test/mpi/confdb/ax_tls.m4 b/test/mpi/confdb/ax_tls.m4
index 3f6a0ac..60657fa 100644
--- a/test/mpi/confdb/ax_tls.m4
+++ b/test/mpi/confdb/ax_tls.m4
@@ -46,7 +46,7 @@
AC_DEFUN([AX_TLS], [
AC_MSG_CHECKING(for thread local storage specifier)
AC_CACHE_VAL(ac_cv_tls, [
- ax_tls_keywords="__thread __declspec(thread) none"
+ ax_tls_keywords="_Thread_local __thread __declspec(thread) none"
for ax_tls_keyword in $ax_tls_keywords; do
case $ax_tls_keyword in
none) ac_cv_tls=none ; break ;;
@@ -69,7 +69,11 @@ AC_DEFUN([AX_TLS], [
PAC_APPEND_FLAG([-shared],[LIBS])
if test "$ac_cv_tls" != "none" ; then
AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([extern $ax_tls_keyword int bar;],[++bar;])],
+ [AC_LANG_PROGRAM(
+ [
+ extern $ax_tls_keyword int bar;
+ $ax_tls_keyword int bar = 0;
+ ],[++bar;])],
[ac_cv_tls=$ax_tls_keyword],
[ac_cv_tls=none])
fi
@@ -81,10 +85,7 @@ AC_DEFUN([AX_TLS], [
])
if test "$ac_cv_tls" != "none"; then
- # MPICH modification: this was "TLS" before instead of
- # "MPICH_TLS_SPECIFIER", but TLS had a reasonably high chance of conflicting
- # with a system library.
- AC_DEFINE_UNQUOTED([MPICH_TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+ AC_DEFINE_UNQUOTED([TLS_SPECIFIER], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
fi
AC_MSG_RESULT($ac_cv_tls)
])
diff --git a/test/mpi/confdb/config.guess b/test/mpi/confdb/config.guess
index 6c32c86..1659250 100755
--- a/test/mpi/confdb/config.guess
+++ b/test/mpi/confdb/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -933,6 +950,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -1021,7 +1041,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/test/mpi/confdb/config.sub b/test/mpi/confdb/config.sub
index 7ffe373..1acc966 100755
--- a/test/mpi/confdb/config.sub
+++ b/test/mpi/confdb/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-08-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +377,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +430,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +521,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1379,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/test/mpi/confdb/install-sh b/test/mpi/confdb/install-sh
index 0b0fdcb..59990a1 100755
--- a/test/mpi/confdb/install-sh
+++ b/test/mpi/confdb/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-12-25.23; # UTC
+scriptversion=2014-09-12.12; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -324,34 +324,41 @@ do
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
+ # $RANDOM is not portable (e.g. dash); use it when possible to
+ # lower collision chance
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+ # As "mkdir -p" follows symlinks and we work in /tmp possibly; so
+ # create the $tmpdir first (and fail if unsuccessful) to make sure
+ # that nobody tries to guess the $tmpdir name.
if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
- rmdir "$tmpdir/d" "$tmpdir"
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac;;
diff --git a/test/mpi/configure b/test/mpi/configure
index 70222a1..5718026 100755
--- a/test/mpi/configure
+++ b/test/mpi/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for mpich-testsuite 3.2.
+# Generated by GNU Autoconf 2.69 for mpich-testsuite 3.3a2.
#
# Report bugs to <discuss at mpich.org>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='mpich-testsuite'
PACKAGE_TARNAME='mpich-testsuite'
-PACKAGE_VERSION='3.2'
-PACKAGE_STRING='mpich-testsuite 3.2'
+PACKAGE_VERSION='3.3a2'
+PACKAGE_STRING='mpich-testsuite 3.3a2'
PACKAGE_BUGREPORT='discuss at mpich.org'
PACKAGE_URL='http://www.mpich.org/'
@@ -795,6 +795,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -916,6 +917,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1168,6 +1170,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1305,7 +1316,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1418,7 +1429,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures mpich-testsuite 3.2 to adapt to many kinds of systems.
+\`configure' configures mpich-testsuite 3.3a2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1458,6 +1469,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1488,7 +1500,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of mpich-testsuite 3.2:";;
+ short | recursive ) echo "Configuration of mpich-testsuite 3.3a2:";;
esac
cat <<\_ACEOF
@@ -1702,7 +1714,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-mpich-testsuite configure 3.2
+mpich-testsuite configure 3.3a2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2860,7 +2872,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by mpich-testsuite $as_me 3.2, which was
+It was created by mpich-testsuite $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3313,7 +3325,7 @@ ac_config_headers="$ac_config_headers include/mpitestconf.h"
-VERSION=3.2
+VERSION=3.3a2
ac_aux_dir=
for ac_dir in confdb "$srcdir"/confdb; do
@@ -3833,7 +3845,7 @@ fi
# Define the identity of the package.
PACKAGE='mpich-testsuite'
- VERSION='3.2'
+ VERSION='3.3a2'
cat >>confdefs.h <<_ACEOF
@@ -4061,10 +4073,12 @@ for option in $enable_fortran ; do
yes|all)
enable_f77=yes
enable_fc=yes
+ enable_f08=yes
;;
no|none)
enable_f77=no
enable_fc=no
+ enable_f08=no
;;
f77)
enable_f77=yes
@@ -6732,7 +6746,7 @@ if test "$enable_strict_done" != "yes" ; then
# compiler.
# -Wno-type-limits -- There are places where we compare an unsigned to
# a constant that happens to be zero e.g., if x is unsigned and
- # MIN_VAL is zero, we'd like to do "MPIU_Assert(x >= MIN_VAL);".
+ # MIN_VAL is zero, we'd like to do "MPIR_Assert(x >= MIN_VAL);".
# Note this option is not supported by gcc 4.2. This needs to be added
# after most other warning flags, so that we catch a gcc bug on 32-bit
# that doesn't give a warning that this is unsupported, unless another
@@ -6838,40 +6852,6 @@ $as_echo "$as_me: WARNING: Unrecognized value for enable-strict:$flag" >&2;}
pac_cc_strict_flags="-O2"
fi
pac_cc_strict_flags="$pac_cc_strict_flags $pac_common_strict_flags"
- case "$enable_posix" in
- no) : ;;
- 1995)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=199506L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=199506L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=199506L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=199506L"
-
-fi
- ;;
- 2001)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200112L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200112L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200112L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200112L"
-
-fi
- ;;
- 2008)
-
- if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200809L\>" >/dev/null 2>&1; then :
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200809L', not appending" >&5
-else
- echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200809L', appending" >&5
- pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200809L"
-
-fi
- ;;
- *) as_fn_error $? "internal error, unexpected POSIX version: '$enable_posix'" "$LINENO" 5 ;;
- esac
# We only allow one of strict-C99 or strict-C89 to be
# enabled. If C99 is enabled, we automatically disable C89.
if test "${enable_c99}" = "yes" ; then
@@ -6920,6 +6900,43 @@ else
fi
fi
+ # POSIX 2001 should be used with C99. But the default standard for some
+ # compilers are not C99. We must test the support of POSIX 2001 after
+ # testing C99.
+ case "$enable_posix" in
+ no) : ;;
+ 1995)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=199506L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=199506L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=199506L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=199506L"
+
+fi
+ ;;
+ 2001)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200112L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200112L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200112L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200112L"
+
+fi
+ ;;
+ 2008)
+
+ if echo "$pac_cc_strict_flags" | $FGREP -e "\<-D_POSIX_C_SOURCE=200809L\>" >/dev/null 2>&1; then :
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') contains '-D_POSIX_C_SOURCE=200809L', not appending" >&5
+else
+ echo "pac_cc_strict_flags(='$pac_cc_strict_flags') does not contain '-D_POSIX_C_SOURCE=200809L', appending" >&5
+ pac_cc_strict_flags="$pac_cc_strict_flags -D_POSIX_C_SOURCE=200809L"
+
+fi
+ ;;
+ *) as_fn_error $? "internal error, unexpected POSIX version: '$enable_posix'" "$LINENO" 5 ;;
+ esac
fi
# See if the above options work with the compiler
@@ -10983,7 +11000,7 @@ rm -f core conftest.err conftest.$ac_objext
# module tests do not always use the module output flag. See
# FC_MODULE_EXT , where this is determined.
# f95 -YMOD_OUT_DIR=${dir} ## the Absoft fortran compiler
-# lf95 -Am -mod ${dir} ## the Lahey/Fujitsu fortran compiler
+# lf95 -M ${dir} ## the Lahey/Fujitsu fortran compiler
# f90 -moddir=${dir} ## the Sun f90 compiler
# g95 -fmod=${dir}
#
@@ -10992,7 +11009,7 @@ rm -f core conftest.err conftest.$ac_objext
# users to use. Alternatively they can use an older version of MPICH.
pac_cv_fc_module_outflag=
-for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' ; do
+for mod_flag in '-J' '-J ' '-qmoddir=' '-module ' '-YMOD_OUT_DIR=' '-mdir ' '-moddir=' '-fmod=' '-M '; do
rm -f conftestdir/NONEXISTENT conftestdir/*
if test -z "${pac_save_FCFLAGS_nesting}" ; then
@@ -13038,7 +13055,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by mpich-testsuite $as_me 3.2, which was
+This file was extended by mpich-testsuite $as_me 3.3a2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -13105,7 +13122,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-mpich-testsuite config.status 3.2
+mpich-testsuite config.status 3.3a2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/test/mpi/configure.ac b/test/mpi/configure.ac
index 785423e..6cc32a1 100644
--- a/test/mpi/configure.ac
+++ b/test/mpi/configure.ac
@@ -111,10 +111,12 @@ for option in $enable_fortran ; do
yes|all)
enable_f77=yes
enable_fc=yes
+ enable_f08=yes
;;
no|none)
enable_f77=no
enable_fc=no
+ enable_f08=no
;;
f77)
enable_f77=yes
diff --git a/test/mpi/cxx/Makefile.in b/test/mpi/cxx/Makefile.in
index 988ab3d..062b6b6 100644
--- a/test/mpi/cxx/Makefile.in
+++ b/test/mpi/cxx/Makefile.in
@@ -366,6 +366,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/attr/Makefile.in b/test/mpi/cxx/attr/Makefile.in
index 2d9fde9..021a81b 100644
--- a/test/mpi/cxx/attr/Makefile.in
+++ b/test/mpi/cxx/attr/Makefile.in
@@ -371,6 +371,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/coll/Makefile.in b/test/mpi/cxx/coll/Makefile.in
index 4283e00..cbf00f5 100644
--- a/test/mpi/cxx/coll/Makefile.in
+++ b/test/mpi/cxx/coll/Makefile.in
@@ -454,6 +454,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/coll/arcomplex.cxx b/test/mpi/cxx/coll/arcomplex.cxx
index 11a8177..e347c43 100644
--- a/test/mpi/cxx/coll/arcomplex.cxx
+++ b/test/mpi/cxx/coll/arcomplex.cxx
@@ -31,6 +31,7 @@ int main( int argc, char **argv )
complex<double> cd[2], cd_out[2];
#ifdef HAVE_LONG_DOUBLE
complex<long double> cld[2], cld_out[2];
+ MTEST_VG_MEM_INIT(cld, 2 * sizeof(complex<long double>));
#endif
MTest_Init( );
diff --git a/test/mpi/cxx/comm/Makefile.in b/test/mpi/cxx/comm/Makefile.in
index 28c9c94..3bfa767 100644
--- a/test/mpi/cxx/comm/Makefile.in
+++ b/test/mpi/cxx/comm/Makefile.in
@@ -349,6 +349,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/datatype/Makefile.in b/test/mpi/cxx/datatype/Makefile.in
index af3041d..59189ca 100644
--- a/test/mpi/cxx/datatype/Makefile.in
+++ b/test/mpi/cxx/datatype/Makefile.in
@@ -364,6 +364,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/errhan/Makefile.in b/test/mpi/cxx/errhan/Makefile.in
index e05bca2..227b00d 100644
--- a/test/mpi/cxx/errhan/Makefile.in
+++ b/test/mpi/cxx/errhan/Makefile.in
@@ -349,6 +349,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/info/Makefile.in b/test/mpi/cxx/info/Makefile.in
index ef3d6ff..d8c6e97 100644
--- a/test/mpi/cxx/info/Makefile.in
+++ b/test/mpi/cxx/info/Makefile.in
@@ -364,6 +364,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/init/Makefile.in b/test/mpi/cxx/init/Makefile.in
index 838bfc3..ca55c39 100644
--- a/test/mpi/cxx/init/Makefile.in
+++ b/test/mpi/cxx/init/Makefile.in
@@ -360,6 +360,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/io/Makefile.in b/test/mpi/cxx/io/Makefile.in
index 79e85a5..d1d640c 100644
--- a/test/mpi/cxx/io/Makefile.in
+++ b/test/mpi/cxx/io/Makefile.in
@@ -491,6 +491,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/io/filemiscx.cxx b/test/mpi/cxx/io/filemiscx.cxx
index ccb04e4..7e00158 100644
--- a/test/mpi/cxx/io/filemiscx.cxx
+++ b/test/mpi/cxx/io/filemiscx.cxx
@@ -38,6 +38,8 @@ int main(int argc, char **argv)
MPI::Datatype etype, filetype;
char datarep[25], *filename;
+ MTEST_VG_MEM_INIT(buf, 1024 * sizeof(int));
+
MPI::Init();
try {
diff --git a/test/mpi/cxx/pt2pt/Makefile.in b/test/mpi/cxx/pt2pt/Makefile.in
index e8225b6..581f162 100644
--- a/test/mpi/cxx/pt2pt/Makefile.in
+++ b/test/mpi/cxx/pt2pt/Makefile.in
@@ -353,6 +353,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/pt2pt/bsend1cxx.cxx b/test/mpi/cxx/pt2pt/bsend1cxx.cxx
index ea299f4..320465b 100644
--- a/test/mpi/cxx/pt2pt/bsend1cxx.cxx
+++ b/test/mpi/cxx/pt2pt/bsend1cxx.cxx
@@ -103,7 +103,7 @@ int main( int argc, char *argv[] )
cerr << "Returned buffer from detach is not the same as the initial buffer\n";
}
- delete buf;
+ delete[] buf;
MTest_Finalize( errs );
diff --git a/test/mpi/cxx/pt2pt/sendrecvx.cxx b/test/mpi/cxx/pt2pt/sendrecvx.cxx
index 8931f94..bd3b990 100644
--- a/test/mpi/cxx/pt2pt/sendrecvx.cxx
+++ b/test/mpi/cxx/pt2pt/sendrecvx.cxx
@@ -37,25 +37,27 @@ int main( int argc, char *argv[] )
size = MPI::COMM_WORLD.Get_size();
if (size < 2) {
- cerr << "Size of comm_world must be at least 2\n";
- MPI::COMM_WORLD.Abort(1);
+ cerr << "Size of comm_world must be at least 2\n";
+ MPI::COMM_WORLD.Abort(1);
}
if (rank == 0) {
- int *buf = new int[100];
- int i;
- for (i=0; i<100; i++) buf[i] = i;
- MPI::COMM_WORLD.Send( buf, 100, MPI::INT, size-1, 0 );
+ int *buf = new int[100];
+ int i;
+ for (i=0; i<100; i++) buf[i] = i;
+ MPI::COMM_WORLD.Send( buf, 100, MPI::INT, size-1, 0 );
+ delete[] buf;
}
else if (rank == size - 1) {
- int *buf = new int[100];
- int i;
- MPI::COMM_WORLD.Recv( buf, 100, MPI::INT, 0, 0 );
- for (i=0; i<100; i++) {
- if (buf[i] != i) {
- errs++;
- cerr << "Error: buf[" << i << "] = " << buf[i] << "\n";
- }
- }
+ int *buf = new int[100];
+ int i;
+ MPI::COMM_WORLD.Recv( buf, 100, MPI::INT, 0, 0 );
+ for (i=0; i<100; i++) {
+ if (buf[i] != i) {
+ errs++;
+ cerr << "Error: buf[" << i << "] = " << buf[i] << "\n";
+ }
+ }
+ delete[] buf;
}
MTest_Finalize( errs );
diff --git a/test/mpi/cxx/rma/Makefile.in b/test/mpi/cxx/rma/Makefile.in
index 543bee3..a781cb9 100644
--- a/test/mpi/cxx/rma/Makefile.in
+++ b/test/mpi/cxx/rma/Makefile.in
@@ -377,6 +377,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/spawn/Makefile.in b/test/mpi/cxx/spawn/Makefile.in
index e182162..2b5697e 100644
--- a/test/mpi/cxx/spawn/Makefile.in
+++ b/test/mpi/cxx/spawn/Makefile.in
@@ -363,6 +363,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/spawn/selfconaccx.cxx b/test/mpi/cxx/spawn/selfconaccx.cxx
index a11c60c..76a50c7 100644
--- a/test/mpi/cxx/spawn/selfconaccx.cxx
+++ b/test/mpi/cxx/spawn/selfconaccx.cxx
@@ -26,6 +26,8 @@ int main( int argc, char *argv[] )
MPI::Status status;
MPI::Intercomm comm;
+ MTEST_VG_MEM_INIT(port, MPI_MAX_PORT_NAME * sizeof(char));
+
MPI::Init(argc, argv);
size = MPI::COMM_WORLD.Get_size();
diff --git a/test/mpi/cxx/topo/Makefile.in b/test/mpi/cxx/topo/Makefile.in
index 401c00b..f377872 100644
--- a/test/mpi/cxx/topo/Makefile.in
+++ b/test/mpi/cxx/topo/Makefile.in
@@ -307,6 +307,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/cxx/util/Makefile.in b/test/mpi/cxx/util/Makefile.in
index 65f12d9..1389b02 100644
--- a/test/mpi/cxx/util/Makefile.in
+++ b/test/mpi/cxx/util/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/datatype/Makefile.am b/test/mpi/datatype/Makefile.am
index ee6d9c1..ab787c1 100644
--- a/test/mpi/datatype/Makefile.am
+++ b/test/mpi/datatype/Makefile.am
@@ -51,6 +51,7 @@ noinst_PROGRAMS = \
simple-commit \
simple-pack \
simple-pack-external \
+ simple-pack-external2 \
simple-resized \
simple-size-extent \
sizedtypes \
diff --git a/test/mpi/datatype/Makefile.in b/test/mpi/datatype/Makefile.in
index 1d07ee8..8b0492a 100644
--- a/test/mpi/datatype/Makefile.in
+++ b/test/mpi/datatype/Makefile.in
@@ -108,19 +108,19 @@ noinst_PROGRAMS = blockindexed-misc$(EXEEXT) \
pairtype-pack$(EXEEXT) pairtype-size-extent$(EXEEXT) \
sendrecvt2$(EXEEXT) sendrecvt4$(EXEEXT) simple-commit$(EXEEXT) \
simple-pack$(EXEEXT) simple-pack-external$(EXEEXT) \
- simple-resized$(EXEEXT) simple-size-extent$(EXEEXT) \
- sizedtypes$(EXEEXT) slice-pack$(EXEEXT) \
- slice-pack-external$(EXEEXT) struct-derived-zeros$(EXEEXT) \
- struct-empty-el$(EXEEXT) struct-ezhov$(EXEEXT) \
- struct-no-real-types$(EXEEXT) struct-pack$(EXEEXT) \
- structpack2$(EXEEXT) struct-verydeep$(EXEEXT) \
- struct-zero-count$(EXEEXT) subarray$(EXEEXT) \
- subarray-pack$(EXEEXT) tfree$(EXEEXT) tmatchsize$(EXEEXT) \
- transpose-pack$(EXEEXT) tresized$(EXEEXT) tresized2$(EXEEXT) \
- triangular-pack$(EXEEXT) typecommit$(EXEEXT) typefree$(EXEEXT) \
- typelb$(EXEEXT) typename$(EXEEXT) unpack$(EXEEXT) \
- unusual-noncontigs$(EXEEXT) vecblklen$(EXEEXT) \
- zeroblks$(EXEEXT) zeroparms$(EXEEXT)
+ simple-pack-external2$(EXEEXT) simple-resized$(EXEEXT) \
+ simple-size-extent$(EXEEXT) sizedtypes$(EXEEXT) \
+ slice-pack$(EXEEXT) slice-pack-external$(EXEEXT) \
+ struct-derived-zeros$(EXEEXT) struct-empty-el$(EXEEXT) \
+ struct-ezhov$(EXEEXT) struct-no-real-types$(EXEEXT) \
+ struct-pack$(EXEEXT) structpack2$(EXEEXT) \
+ struct-verydeep$(EXEEXT) struct-zero-count$(EXEEXT) \
+ subarray$(EXEEXT) subarray-pack$(EXEEXT) tfree$(EXEEXT) \
+ tmatchsize$(EXEEXT) transpose-pack$(EXEEXT) tresized$(EXEEXT) \
+ tresized2$(EXEEXT) triangular-pack$(EXEEXT) \
+ typecommit$(EXEEXT) typefree$(EXEEXT) typelb$(EXEEXT) \
+ typename$(EXEEXT) unpack$(EXEEXT) unusual-noncontigs$(EXEEXT) \
+ vecblklen$(EXEEXT) zeroblks$(EXEEXT) zeroparms$(EXEEXT)
subdir = datatype
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cache.m4 \
@@ -332,6 +332,12 @@ simple_pack_external_LDADD = $(LDADD)
simple_pack_external_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+simple_pack_external2_SOURCES = simple-pack-external2.c
+simple_pack_external2_OBJECTS = simple-pack-external2.$(OBJEXT)
+simple_pack_external2_LDADD = $(LDADD)
+simple_pack_external2_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
simple_resized_SOURCES = simple-resized.c
simple_resized_OBJECTS = simple-resized.$(OBJEXT)
simple_resized_LDADD = $(LDADD)
@@ -549,15 +555,15 @@ SOURCES = blockindexed-misc.c blockindexed-zero-count.c contents.c \
large_vec.c lbub.c localpack.c longdouble.c lots-of-types.c \
pairtype-pack.c pairtype-size-extent.c sendrecvt2.c \
sendrecvt4.c simple-commit.c simple-pack.c \
- simple-pack-external.c simple-resized.c simple-size-extent.c \
- sizedtypes.c slice-pack.c slice-pack-external.c \
- struct-derived-zeros.c struct-empty-el.c struct-ezhov.c \
- struct-no-real-types.c struct-pack.c struct-verydeep.c \
- struct-zero-count.c structpack2.c subarray.c subarray-pack.c \
- tfree.c tmatchsize.c transpose-pack.c tresized.c tresized2.c \
- triangular-pack.c typecommit.c typefree.c typelb.c typename.c \
- unpack.c unusual-noncontigs.c vecblklen.c zeroblks.c \
- zeroparms.c
+ simple-pack-external.c simple-pack-external2.c \
+ simple-resized.c simple-size-extent.c sizedtypes.c \
+ slice-pack.c slice-pack-external.c struct-derived-zeros.c \
+ struct-empty-el.c struct-ezhov.c struct-no-real-types.c \
+ struct-pack.c struct-verydeep.c struct-zero-count.c \
+ structpack2.c subarray.c subarray-pack.c tfree.c tmatchsize.c \
+ transpose-pack.c tresized.c tresized2.c triangular-pack.c \
+ typecommit.c typefree.c typelb.c typename.c unpack.c \
+ unusual-noncontigs.c vecblklen.c zeroblks.c zeroparms.c
DIST_SOURCES = blockindexed-misc.c blockindexed-zero-count.c \
contents.c contig-zero-count.c contigstruct.c cxx-types.c \
darray-cyclic.c darray-pack.c dataalign.c gaddress.c \
@@ -568,14 +574,15 @@ DIST_SOURCES = blockindexed-misc.c blockindexed-zero-count.c \
longdouble.c lots-of-types.c pairtype-pack.c \
pairtype-size-extent.c sendrecvt2.c sendrecvt4.c \
simple-commit.c simple-pack.c simple-pack-external.c \
- simple-resized.c simple-size-extent.c sizedtypes.c \
- slice-pack.c slice-pack-external.c struct-derived-zeros.c \
- struct-empty-el.c struct-ezhov.c struct-no-real-types.c \
- struct-pack.c struct-verydeep.c struct-zero-count.c \
- structpack2.c subarray.c subarray-pack.c tfree.c tmatchsize.c \
- transpose-pack.c tresized.c tresized2.c triangular-pack.c \
- typecommit.c typefree.c typelb.c typename.c unpack.c \
- unusual-noncontigs.c vecblklen.c zeroblks.c zeroparms.c
+ simple-pack-external2.c simple-resized.c simple-size-extent.c \
+ sizedtypes.c slice-pack.c slice-pack-external.c \
+ struct-derived-zeros.c struct-empty-el.c struct-ezhov.c \
+ struct-no-real-types.c struct-pack.c struct-verydeep.c \
+ struct-zero-count.c structpack2.c subarray.c subarray-pack.c \
+ tfree.c tmatchsize.c transpose-pack.c tresized.c tresized2.c \
+ triangular-pack.c typecommit.c typefree.c typelb.c typename.c \
+ unpack.c unusual-noncontigs.c vecblklen.c zeroblks.c \
+ zeroparms.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -776,6 +783,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -794,7 +802,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
# Some of the tests use a more comprehensive set of datatype tests.
@@ -975,6 +983,10 @@ simple-pack-external$(EXEEXT): $(simple_pack_external_OBJECTS) $(simple_pack_ext
@rm -f simple-pack-external$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(simple_pack_external_OBJECTS) $(simple_pack_external_LDADD) $(LIBS)
+simple-pack-external2$(EXEEXT): $(simple_pack_external2_OBJECTS) $(simple_pack_external2_DEPENDENCIES) $(EXTRA_simple_pack_external2_DEPENDENCIES)
+ @rm -f simple-pack-external2$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(simple_pack_external2_OBJECTS) $(simple_pack_external2_LDADD) $(LIBS)
+
simple-resized$(EXEEXT): $(simple_resized_OBJECTS) $(simple_resized_DEPENDENCIES) $(EXTRA_simple_resized_DEPENDENCIES)
@rm -f simple-resized$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(simple_resized_OBJECTS) $(simple_resized_LDADD) $(LIBS)
@@ -1133,6 +1145,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sendrecvt4.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple-commit.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple-pack-external.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple-pack-external2.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple-pack.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple-resized.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple-size-extent.Po at am__quote@
@@ -1394,10 +1407,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/datatype/getpartelm.c b/test/mpi/datatype/getpartelm.c
index 8f7000f..b2205c5 100644
--- a/test/mpi/datatype/getpartelm.c
+++ b/test/mpi/datatype/getpartelm.c
@@ -6,6 +6,7 @@
*/
#include "mpi.h"
#include <stdio.h>
+#include <string.h>
#include "mpitest.h"
/*
@@ -40,6 +41,7 @@ int main(int argc, char *argv[])
if (rank == src) {
int buf[128], position, cnt;
+ MTEST_VG_MEM_INIT(buf, 128 * sizeof(buf[0]));
/* sender */
/* Create a datatype and send it (multiple of sizeof(int)) */
diff --git a/test/mpi/datatype/large_type.c b/test/mpi/datatype/large_type.c
index 687f31b..48a256d 100644
--- a/test/mpi/datatype/large_type.c
+++ b/test/mpi/datatype/large_type.c
@@ -81,6 +81,8 @@ static MPI_Datatype make_largexfer_type_hindexed(MPI_Offset nbytes)
MPI_Type_create_hindexed(count, blocklens, disp, MPI_BYTE, &memtype);
MPI_Type_commit(&memtype);
+ free(blocklens);
+ free(disp);
return memtype;
}
diff --git a/test/mpi/datatype/large_vec.c b/test/mpi/datatype/large_vec.c
index 0b7eafb..a009ee1 100644
--- a/test/mpi/datatype/large_vec.c
+++ b/test/mpi/datatype/large_vec.c
@@ -74,6 +74,7 @@ int main(int argc, char *argv[])
}
MPI_Type_free(&dtype);
+ free(cols);
MTest_Finalize(errs);
MPI_Finalize();
diff --git a/test/mpi/datatype/segtest.c b/test/mpi/datatype/segtest.c
index 9148d6f..504aa13 100644
--- a/test/mpi/datatype/segtest.c
+++ b/test/mpi/datatype/segtest.c
@@ -42,7 +42,7 @@ MPID_Dataloop *MPID_Dataloop_init_contig(int count)
{
MPID_Dataloop *ct;
- ct = (MPID_Dataloop *) MPIU_Malloc(sizeof(MPID_Dataloop));
+ ct = (MPID_Dataloop *) MPL_malloc(sizeof(MPID_Dataloop));
ct->kind = MPID_DTYPE_CONTIG | DATALOOP_FINAL_MASK;
ct->loop_params.c_t.count = count;
ct->loop_params.c_t.dataloop = 0;
@@ -59,7 +59,7 @@ MPID_Dataloop *MPID_Dataloop_init_vector(int count, int blocksize, int stride)
{
MPID_Dataloop *v;
- v = (MPID_Dataloop *) MPIU_Malloc(sizeof(MPID_Dataloop));
+ v = (MPID_Dataloop *) MPL_malloc(sizeof(MPID_Dataloop));
v->kind = MPID_DTYPE_VECTOR | DATALOOP_FINAL_MASK;
v->loop_params.v_t.count = count;
v->loop_params.v_t.blocksize = blocksize;
@@ -80,11 +80,11 @@ MPID_Dataloop *MPID_Dataloop_init_blockindexed(int count, int blocksize, MPI_Ain
MPI_Aint extent;
int i;
- bi = (MPID_Dataloop *) MPIU_Malloc(sizeof(MPID_Dataloop));
+ bi = (MPID_Dataloop *) MPL_malloc(sizeof(MPID_Dataloop));
bi->kind = MPID_DTYPE_BLOCKINDEXED | DATALOOP_FINAL_MASK;
bi->loop_params.bi_t.count = count;
bi->loop_params.bi_t.blocksize = blocksize;
- bi->loop_params.bi_t.offset = (MPI_Aint *) MPIU_Malloc(sizeof(MPI_Aint) * count);
+ bi->loop_params.bi_t.offset = (MPI_Aint *) MPL_malloc(sizeof(MPI_Aint) * count);
for (i = 0; i < count; i++) {
bi->loop_params.bi_t.offset[i] = offset[i];
if (offset[i] + blocksize > extent)
@@ -106,11 +106,11 @@ MPID_Dataloop *MPID_Dataloop_init_indexed(int count, int *blocksize, MPI_Aint *
MPI_Aint extent = 0;
int i;
- it = (MPID_Dataloop *) MPIU_Malloc(sizeof(MPID_Dataloop));
+ it = (MPID_Dataloop *) MPL_malloc(sizeof(MPID_Dataloop));
it->kind = MPID_DTYPE_INDEXED | DATALOOP_FINAL_MASK;
it->loop_params.i_t.count = count;
- it->loop_params.i_t.blocksize = (int *) MPIU_Malloc(sizeof(int) * count);
- it->loop_params.i_t.offset = (MPI_Aint *) MPIU_Malloc(sizeof(MPI_Aint) * count);
+ it->loop_params.i_t.blocksize = (int *) MPL_malloc(sizeof(int) * count);
+ it->loop_params.i_t.offset = (MPI_Aint *) MPL_malloc(sizeof(MPI_Aint) * count);
for (i = 0; i < count; i++) {
it->loop_params.i_t.offset[i] = offset[i];
it->loop_params.i_t.blocksize[i] = blocksize[i];
@@ -140,14 +140,14 @@ int main(int argc, char **argv)
MPI_Type_vector(count, 1, 7, MPI_INT, &vectype);
/* Initialize the data */
- src_buf = (char *) MPIU_Malloc((count - 1) * stride + blocksize);
+ src_buf = (char *) MPL_malloc((count - 1) * stride + blocksize);
for (i = 0; i < (count - 1) * stride + blocksize; i++)
src_buf[i] = -i;
for (i = 0; i < count; i++) {
for (j = 0; j < blocksize; j++)
src_buf[i * stride + j] = i * blocksize + j;
}
- dest_buf = (char *) MPIU_Malloc(count * blocksize);
+ dest_buf = (char *) MPL_malloc(count * blocksize);
for (i = 0; i < count * blocksize; i++) {
dest_buf[i] = -i;
}
diff --git a/test/mpi/datatype/simple-pack-external.c b/test/mpi/datatype/simple-pack-external.c
index ce67a32..73cce40 100644
--- a/test/mpi/datatype/simple-pack-external.c
+++ b/test/mpi/datatype/simple-pack-external.c
@@ -178,6 +178,7 @@ int vector_of_vectors_test(void)
}
}
+ free(buf);
MPI_Type_free(&inner_vector);
MPI_Type_free(&outer_vector);
return errs;
@@ -258,6 +259,7 @@ int optimizable_vector_of_basics_test(void)
}
}
+ free(buf);
MPI_Type_free(&parent_type);
return errs;
}
@@ -347,6 +349,7 @@ int struct_of_basics_test(void)
}
}
+ free(buf);
MPI_Type_free(&parent_type);
return errs;
}
diff --git a/test/mpi/datatype/simple-pack-external2.c b/test/mpi/datatype/simple-pack-external2.c
new file mode 100644
index 0000000..1730e02
--- /dev/null
+++ b/test/mpi/datatype/simple-pack-external2.c
@@ -0,0 +1,40 @@
+#include <mpi.h>
+#include <stdlib.h>
+
+char *datarep = "external32";
+
+#define UINT_COUNT (2)
+#define DBLE_COUNT (24)
+
+int main(void)
+{
+ unsigned *uint_data = calloc(UINT_COUNT, sizeof(unsigned));
+ double *dble_data = calloc(DBLE_COUNT, sizeof(double));
+ MPI_Aint uint_pack_size, dble_pack_size;
+ MPI_Aint pack_size;
+ void *pack_buffer;
+ MPI_Aint position = 0;
+
+ MPI_Init(NULL, NULL);
+
+ MPI_Pack_external_size(datarep, UINT_COUNT, MPI_UNSIGNED, &uint_pack_size);
+ MPI_Pack_external_size(datarep, DBLE_COUNT, MPI_DOUBLE, &dble_pack_size);
+
+ pack_size = uint_pack_size + dble_pack_size;
+ pack_buffer = malloc(pack_size);
+
+ MPI_Pack_external(datarep, uint_data, UINT_COUNT, MPI_UNSIGNED, pack_buffer, pack_size,
+ &position);
+ MPI_Pack_external(datarep, dble_data, DBLE_COUNT, MPI_DOUBLE, pack_buffer, pack_size,
+ &position);
+
+ free(pack_buffer);
+ free(dble_data);
+ free(uint_data);
+
+ MPI_Finalize();
+
+ printf(" No Errors\n");
+
+ return 0;
+}
diff --git a/test/mpi/datatype/simple-pack.c b/test/mpi/datatype/simple-pack.c
index 8483d73..96ddcff 100644
--- a/test/mpi/datatype/simple-pack.c
+++ b/test/mpi/datatype/simple-pack.c
@@ -174,6 +174,7 @@ int vector_of_vectors_test(void)
}
}
+ free(buf);
MPI_Type_free(&inner_vector);
MPI_Type_free(&outer_vector);
return errs;
@@ -248,6 +249,7 @@ int optimizable_vector_of_basics_test(void)
}
}
+ free(buf);
MPI_Type_free(&parent_type);
return errs;
}
diff --git a/test/mpi/datatype/structpack2.c b/test/mpi/datatype/structpack2.c
index ef6a411..74a511e 100644
--- a/test/mpi/datatype/structpack2.c
+++ b/test/mpi/datatype/structpack2.c
@@ -105,6 +105,7 @@ int main(int argc, char *argv[])
}
}
+ free(buffer);
MPI_Type_free(&str);
MPI_Type_free(&con);
MTest_Finalize(errs);
diff --git a/test/mpi/datatype/testlist.in b/test/mpi/datatype/testlist.in
index 0e53faf..a3a3271 100644
--- a/test/mpi/datatype/testlist.in
+++ b/test/mpi/datatype/testlist.in
@@ -4,6 +4,7 @@ lbub 1
localpack 1
simple-pack 1
simple-pack-external 1
+simple-pack-external2 1
transpose-pack 1
slice-pack 1
struct-pack 1
diff --git a/test/mpi/datatype/transpose-pack.c b/test/mpi/datatype/transpose-pack.c
index 4429405..5689b99 100644
--- a/test/mpi/datatype/transpose-pack.c
+++ b/test/mpi/datatype/transpose-pack.c
@@ -84,6 +84,7 @@ int main(int argc, char *argv[])
else {
printf(" No Errors\n");
}
+ free(buffer);
MPI_Finalize();
return 0;
}
diff --git a/test/mpi/datatype/tresized.c b/test/mpi/datatype/tresized.c
index 079f3da..1c64d60 100644
--- a/test/mpi/datatype/tresized.c
+++ b/test/mpi/datatype/tresized.c
@@ -70,6 +70,7 @@ int main(int argc, char *argv[])
}
}
}
+ free(buf);
}
MPI_Type_free(&newtype);
diff --git a/test/mpi/datatype/tresized2.c b/test/mpi/datatype/tresized2.c
index d33bf17..7cbd3e3 100644
--- a/test/mpi/datatype/tresized2.c
+++ b/test/mpi/datatype/tresized2.c
@@ -74,6 +74,7 @@ int main(int argc, char *argv[])
}
}
}
+ free(buf);
}
MPI_Type_free(&newtype);
diff --git a/test/mpi/datatype/unpack.c b/test/mpi/datatype/unpack.c
index 5f0487f..5d9134f 100644
--- a/test/mpi/datatype/unpack.c
+++ b/test/mpi/datatype/unpack.c
@@ -99,6 +99,8 @@ int main(int argc, char **argv)
MPI_Type_free(&mem_dtype);
+ free(mem_buf);
+ free(unpack_buf);
MTest_Finalize(errs);
MPI_Finalize();
diff --git a/test/mpi/errhan/Makefile.in b/test/mpi/errhan/Makefile.in
index 29a2fd9..de03e4a 100644
--- a/test/mpi/errhan/Makefile.in
+++ b/test/mpi/errhan/Makefile.in
@@ -408,6 +408,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -426,7 +427,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
errcode_SOURCES = errcode.c errmsg.c
all: all-am
@@ -749,10 +750,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errhan/errcode.c b/test/mpi/errhan/errcode.c
index 6fc3268..b197158 100644
--- a/test/mpi/errhan/errcode.c
+++ b/test/mpi/errhan/errcode.c
@@ -682,24 +682,6 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**io", "**io %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**io %s" );
}
- {
- /* src/mpi/romio/adio/ad_ntfs/ad_ntfs_write.c */
- char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nomem", "**nomem %s", s1 );
- ChkMsg( err, MPI_ERR_OTHER, "**nomem %s" );
- }
- /* src/mpi/romio/adio/ad_ntfs/ad_ntfs_iwrite.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_grequest_complete", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**mpi_grequest_complete" );
- /* src/mpi/romio/adio/ad_ntfs/ad_ntfs_fcntl.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**flag", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**flag" );
- {
- /* src/mpi/romio/adio/ad_ntfs/ad_ntfs_fcntl.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**flag", "**flag %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**flag %d" );
- }
/* src/mpi/romio/adio/include/adioi_error.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**iobadfh", 0);
ChkMsg( err, MPI_ERR_OTHER, "**iobadfh" );
@@ -755,12 +737,15 @@ int main(int argc, char **argv)
/* src/mpi/romio/adio/ad_nfs/ad_nfs_write.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "ADIOI_NFS_WriteStrided: ROMIO tries to optimize this access by doing a read-modify-write, but is unable to read the file. Please give the file read permission and open it with MPI_MODE_RDWR.", 0);
ChkMsg( err, MPI_ERR_OTHER, "ADIOI_NFS_WriteStrided: ROMIO tries to optimize this access by doing a read-modify-write, but is unable to read the file. Please give the file read permission and open it with MPI_MODE_RDWR." );
- /* src/mpi/romio/adio/ad_pvfs/ad_pvfs_fcntl.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "PVFS does not support atomic mode", 0);
- ChkMsg( err, MPI_ERR_OTHER, "PVFS does not support atomic mode" );
- /* src/mpi/romio/adio/ad_pvfs/ad_pvfs_write.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Atomic mode set in PVFS I/O function", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Atomic mode set in PVFS I/O function" );
+ /* src/mpi/romio/adio/ad_nfs/ad_nfs_fcntl.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**flag", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**flag" );
+ {
+ /* src/mpi/romio/adio/ad_nfs/ad_nfs_fcntl.c */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**flag", "**flag %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**flag %d" );
+ }
/* src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Filetype specifies overlapping write regions (which is illegal according to the MPI-2 specification)", 0);
ChkMsg( err, MPI_ERR_OTHER, "Filetype specifies overlapping write regions (which is illegal according to the MPI-2 specification)" );
@@ -828,6 +813,9 @@ int main(int argc, char **argv)
/* src/mpi/romio/adio/common/ad_write_str.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**iowsrc", 0);
ChkMsg( err, MPI_ERR_OTHER, "**iowsrc" );
+ /* src/mpi/romio/adio/common/ad_iread_coll.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_grequest_complete", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**mpi_grequest_complete" );
/* src/mpi/romio/adio/common/ad_prealloc.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**iopreallocrdwr", 0);
ChkMsg( err, MPI_ERR_OTHER, "**iopreallocrdwr" );
@@ -849,42 +837,6 @@ int main(int argc, char **argv)
/* src/mpi/romio/adio/common/async_list.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Unknown request optype", 0);
ChkMsg( err, MPI_ERR_OTHER, "Unknown request optype" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_open.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error allocating memory", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error allocating memory" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_open.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Unknown error", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Unknown error" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_fcntl.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_getattr", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_getattr" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_flush.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_commit", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_commit" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_delete.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_remove", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_remove" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_io.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in ZOIDFS I/O", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in ZOIDFS I/O" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_resize.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_resize", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_resize" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_finalize", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_finalize" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_common.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_init", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_init" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_write_list.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Atomic noncontiguous writes are not supported by ZOIDFS", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Atomic noncontiguous writes are not supported by ZOIDFS" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_write_list.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_write", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_write" );
- /* src/mpi/romio/adio/ad_zoidfs/ad_zoidfs_read_list.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in zoidfs_read", 0);
- ChkMsg( err, MPI_ERR_OTHER, "Error in zoidfs_read" );
/* src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_write_list_classic.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Atomic noncontiguous writes are not supported by PVFS2", 0);
ChkMsg( err, MPI_ERR_OTHER, "Atomic noncontiguous writes are not supported by PVFS2" );
@@ -948,6 +900,12 @@ int main(int argc, char **argv)
/* src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_delete.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error in PVFS_sys_remove", 0);
ChkMsg( err, MPI_ERR_OTHER, "Error in PVFS_sys_remove" );
+ /* src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_open.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Error allocating memory", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "Error allocating memory" );
+ /* src/mpi/romio/adio/ad_pvfs2/ad_pvfs2_open.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "Unknown error", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "Unknown error" );
/* src/mpi/romio/mpi-io/read_all.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**iobadoffset", 0);
ChkMsg( err, MPI_ERR_OTHER, "**iobadoffset" );
@@ -1726,6 +1684,12 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_ireduce_scatter_block", "**mpi_ireduce_scatter_block %p %p %d %D %O %C %p", s1, s2, i3, i4, i5, i6, s7 );
ChkMsg( err, MPI_ERR_OTHER, "**mpi_ireduce_scatter_block %p %p %d %D %O %C %p" );
}
+ {
+ /* src/mpi/coll/op_create.c */
+ char s1[] = "string1";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nomem", "**nomem %s", s1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**nomem %s" );
+ }
/* src/mpi/coll/op_create.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_op_create", 0);
ChkMsg( err, MPI_ERR_OTHER, "**mpi_op_create" );
@@ -2782,15 +2746,6 @@ int main(int argc, char **argv)
ChkMsg( err, MPI_ERR_OTHER, "**mpi_comm_get_name %C %p %p" );
}
/* src/mpi/comm/intercomm_create.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dupprocesses", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**dupprocesses" );
- {
- /* src/mpi/comm/intercomm_create.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dupprocesses", "**dupprocesses %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**dupprocesses %d" );
- }
- /* src/mpi/comm/intercomm_create.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ranklocal", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ranklocal" );
{
@@ -4924,9 +4879,9 @@ int main(int argc, char **argv)
/* src/mpi/spawn/lookup_name.c */
char s1[] = "string1";
int i2 = MPI_INFO_NULL;
- char s3[] = "pointer3";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_lookup_name", "**mpi_lookup_name %s %I %p", s1, i2, s3 );
- ChkMsg( err, MPI_ERR_OTHER, "**mpi_lookup_name %s %I %p" );
+ char s3[] = "string3";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_lookup_name", "**mpi_lookup_name %s %I %s", s1, i2, s3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**mpi_lookup_name %s %I %s" );
}
/* src/mpi/spawn/comm_get_parent.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_comm_get_parent", 0);
@@ -5049,16 +5004,6 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_t_cvar_write", "**mpi_t_cvar_write %p %p", s1, s2 );
ChkMsg( err, MPI_ERR_OTHER, "**mpi_t_cvar_write %p %p" );
}
- /* src/mpi_t/mpit_initthread.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_t_init_thread", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**mpi_t_init_thread" );
- {
- /* src/mpi_t/mpit_initthread.c */
- int i1 = 1;
- char s2[] = "pointer2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_t_init_thread", "**mpi_t_init_thread %d %p", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**mpi_t_init_thread %d %p" );
- }
/* src/mpi_t/enum_get_item.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpi_t_enum_get_item", 0);
ChkMsg( err, MPI_ERR_OTHER, "**mpi_t_enum_get_item" );
@@ -5326,6 +5271,49 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**namepubfile", "**namepubfile %s %s %s", s1, s2, s3 );
ChkMsg( err, MPI_ERR_OTHER, "**namepubfile %s %s %s" );
}
+ /* src/util/nodemap/build_nodemap.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_gethost", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock_gethost" );
+ {
+ /* src/util/nodemap/build_nodemap.h */
+ char s1[] = "string1";
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_gethost", "**sock_gethost %s %d", s1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock_gethost %s %d" );
+ }
+ {
+ /* src/util/nodemap/build_nodemap.h */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**fail", "**fail %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**fail %d" );
+ }
+ {
+ /* src/util/nodemap/build_nodemap.h */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvs_put", "**pmi_kvs_put %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvs_put %d" );
+ }
+ {
+ /* src/util/nodemap/build_nodemap.h */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvs_commit", "**pmi_kvs_commit %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvs_commit %d" );
+ }
+ /* src/util/nodemap/build_nodemap.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_barrier", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_barrier" );
+ {
+ /* src/util/nodemap/build_nodemap.h */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_barrier %d" );
+ }
+ {
+ /* src/util/nodemap/build_nodemap.h */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvs_get", "**pmi_kvs_get %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvs_get %d" );
+ }
/* src/util/wrappers/mpiu_sock_wrappers.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**inet_addr", 0);
ChkMsg( err, MPI_ERR_OTHER, "**inet_addr" );
@@ -5486,88 +5474,6 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**select", "**select %s %d", s1, i2 );
ChkMsg( err, MPI_ERR_OTHER, "**select %s %d" );
}
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**shmw_gethnd", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**shmw_gethnd" );
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**shmw_deserbufbig", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**shmw_deserbufbig" );
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**alloc_shar_mem", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**alloc_shar_mem" );
- {
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- char s1[] = "string1";
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**alloc_shar_mem", "**alloc_shar_mem %s %s", s1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**alloc_shar_mem %s %s" );
- }
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**shmw_badhnd", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**shmw_badhnd" );
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**attach_shar_mem", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**attach_shar_mem" );
- {
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- char s1[] = "string1";
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**attach_shar_mem", "**attach_shar_mem %s %s", s1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**attach_shar_mem %s %s" );
- }
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**detach_shar_mem", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**detach_shar_mem" );
- {
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- char s1[] = "string1";
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**detach_shar_mem", "**detach_shar_mem %s %s", s1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**detach_shar_mem %s %s" );
- }
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**remove_shar_mem", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**remove_shar_mem" );
- {
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- char s1[] = "string1";
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**remove_shar_mem", "**remove_shar_mem %s %s", s1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**remove_shar_mem %s %s" );
- }
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mkstemp", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**mkstemp" );
- {
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mkstemp", "**mkstemp %s", s1 );
- ChkMsg( err, MPI_ERR_OTHER, "**mkstemp %s" );
- }
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**lseek", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**lseek" );
- {
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**lseek", "**lseek %s", s1 );
- ChkMsg( err, MPI_ERR_OTHER, "**lseek %s" );
- }
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**write", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**write" );
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**open", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**open" );
- {
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**open", "**open %s", s1 );
- ChkMsg( err, MPI_ERR_OTHER, "**open %s" );
- }
- /* src/util/wrappers/mpiu_shm_wrappers.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**shmw_sethnd", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**shmw_sethnd" );
/* src/util/procmap/local_proc.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dynamic_node_ids", 0);
ChkMsg( err, MPI_ERR_OTHER, "**dynamic_node_ids" );
@@ -5641,833 +5547,916 @@ int main(int argc, char **argv)
/* src/binding/fortran/use_mpi/create_f90_util.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**f90typetoomany", 0);
ChkMsg( err, MPI_ERR_OTHER, "**f90typetoomany" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_request.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_handle", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**invalid_handle" );
+ {
+ /* src/include/mpir_request.h */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_handle", "**invalid_handle %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**invalid_handle %d" );
+ }
+ /* src/include/mpir_request.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_refcount", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**invalid_refcount" );
+ {
+ /* src/include/mpir_request.h */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_refcount", "**invalid_refcount %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**invalid_refcount %d" );
+ }
+ {
+ /* src/include/mpir_mem.h */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nomem2", "**nomem2 %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**nomem2 %d %s" );
+ }
+ /* src/include/mpir_pointers.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nullptrtype", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**nullptrtype" );
+ {
+ /* src/include/mpir_pointers.h */
+ char s1[] = "string1";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nullptrtype", "**nullptrtype %s", s1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**nullptrtype %s" );
+ }
+ /* src/include/mpir_pointers.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**comm", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**comm" );
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**tag", 0);
ChkMsg( err, MPI_ERR_OTHER, "**tag" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
int i1 = 1;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**tag", "**tag %d", i1 );
ChkMsg( err, MPI_ERR_OTHER, "**tag %d" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**rmadisp", 0);
ChkMsg( err, MPI_ERR_OTHER, "**rmadisp" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**bufalias", 0);
ChkMsg( err, MPI_ERR_OTHER, "**bufalias" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**argnonpos", 0);
ChkMsg( err, MPI_ERR_OTHER, "**argnonpos" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
char s1[] = "string1";
int i2 = 2;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**argnonpos", "**argnonpos %s %d", s1, i2 );
ChkMsg( err, MPI_ERR_OTHER, "**argnonpos %s %d" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**root", 0);
ChkMsg( err, MPI_ERR_OTHER, "**root" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
int i1 = 1;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**root", "**root %d", i1 );
ChkMsg( err, MPI_ERR_OTHER, "**root %d" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**requestnotpersist", 0);
ChkMsg( err, MPI_ERR_OTHER, "**requestnotpersist" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dtype", 0);
ChkMsg( err, MPI_ERR_OTHER, "**dtype" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
char s1[] = "string1";
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dtypenull", "**dtypenull %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**dtypenull %s" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**rmatypenotatomic", 0);
ChkMsg( err, MPI_ERR_OTHER, "**rmatypenotatomic" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
int i1 = MPI_INT;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**rmatypenotatomic", "**rmatypenotatomic %D", i1 );
ChkMsg( err, MPI_ERR_OTHER, "**rmatypenotatomic %D" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**winflavor", 0);
ChkMsg( err, MPI_ERR_OTHER, "**winflavor" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
char s1[] = "string1";
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**winflavor", "**winflavor %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**winflavor %s" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**recvbuf_inplace", 0);
ChkMsg( err, MPI_ERR_OTHER, "**recvbuf_inplace" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**buf_inplace", 0);
ChkMsg( err, MPI_ERR_OTHER, "**buf_inplace" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
char s1[] = "string1";
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**buf_inplace", "**buf_inplace %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**buf_inplace %s" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**bufnull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**bufnull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**opnull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**opnull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**opnotallowed", 0);
ChkMsg( err, MPI_ERR_OTHER, "**opnotallowed" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**op", 0);
ChkMsg( err, MPI_ERR_OTHER, "**op" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**groupnull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**groupnull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**group", 0);
ChkMsg( err, MPI_ERR_OTHER, "**group" );
- /* src/include/mpierrs.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**comm", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**comm" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**winnull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**winnull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**win", 0);
ChkMsg( err, MPI_ERR_OTHER, "**win" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**requestnull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**requestnull" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
int i1 = 1;
int i2 = 2;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**request_invalid_kind", "**request_invalid_kind %d %d", i1, i2 );
ChkMsg( err, MPI_ERR_OTHER, "**request_invalid_kind %d %d" );
}
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
int i1 = 1;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**request", "**request %d", i1 );
ChkMsg( err, MPI_ERR_OTHER, "**request %d" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**errhandlernull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**errhandlernull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**errhandler", 0);
ChkMsg( err, MPI_ERR_OTHER, "**errhandler" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**infonull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**infonull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**keyval", 0);
ChkMsg( err, MPI_ERR_OTHER, "**keyval" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**keyvalobj", 0);
ChkMsg( err, MPI_ERR_OTHER, "**keyvalobj" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
char s1[] = "string1";
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**keyvalobj", "**keyvalobj %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**keyvalobj %s" );
}
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**permattr", 0);
ChkMsg( err, MPI_ERR_OTHER, "**permattr" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mpitinit", 0);
ChkMsg( err, MPI_ERR_OTHER, "**mpitinit" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**catindex", 0);
ChkMsg( err, MPI_ERR_OTHER, "**catindex" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**enumhandlenull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**enumhandlenull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**enumhandle", 0);
ChkMsg( err, MPI_ERR_OTHER, "**enumhandle" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**itemindex", 0);
ChkMsg( err, MPI_ERR_OTHER, "**itemindex" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**cvarindex", 0);
ChkMsg( err, MPI_ERR_OTHER, "**cvarindex" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**cvarhandlenull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**cvarhandlenull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**cvarhandle", 0);
ChkMsg( err, MPI_ERR_OTHER, "**cvarhandle" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pvarindex", 0);
ChkMsg( err, MPI_ERR_OTHER, "**pvarindex" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pvarhandlenull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**pvarhandlenull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pvarhandle", 0);
ChkMsg( err, MPI_ERR_OTHER, "**pvarhandle" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pvarsessionnull", 0);
ChkMsg( err, MPI_ERR_OTHER, "**pvarsessionnull" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pvarsession", 0);
ChkMsg( err, MPI_ERR_OTHER, "**pvarsession" );
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**memcpyalias", 0);
ChkMsg( err, MPI_ERR_OTHER, "**memcpyalias" );
{
- /* src/include/mpierrs.h */
+ /* src/include/mpir_err.h */
char s1[] = "pointer1";
char s2[] = "pointer2";
long long i3 = 3;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**memcpyalias", "**memcpyalias %p %p %L", s1, s2, i3 );
ChkMsg( err, MPI_ERR_OTHER, "**memcpyalias %p %p %L" );
}
- /* src/include/mpiimpl.h */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nullptrtype", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**nullptrtype" );
- {
- /* src/include/mpiimpl.h */
- char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nullptrtype", "**nullptrtype %s", s1 );
- ChkMsg( err, MPI_ERR_OTHER, "**nullptrtype %s" );
- }
- {
- /* src/include/mpimem.h */
- int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nomem2", "**nomem2 %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**nomem2 %d %s" );
- }
- /* src/mpid/pamid/src/mpid_progress.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**progresshookstoomany", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**progresshookstoomany" );
- /* src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvsget", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvsget" );
- {
- /* src/mpid/pamid/src/dyntask/mpid_comm_spawn_multiple.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvsget", "**pmi_kvsget %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvsget %d" );
- }
- /* src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c */
+ /* src/mpid/ch4/generic/mpidig_send.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|badreqtype", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|badreqtype" );
{
- /* src/mpid/pamid/src/pt2pt/persistent/mpid_startall.c */
+ /* src/mpid/ch4/generic/mpidig_send.h */
int i1 = 1;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|badreqtype", "**ch3|badreqtype %d", i1 );
ChkMsg( err, MPI_ERR_OTHER, "**ch3|badreqtype %d" );
}
- /* src/mpid/common/hcoll/hcoll_rte.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**hcoll_wrong_arg", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**hcoll_wrong_arg" );
+ /* src/mpid/ch4/src/ch4_impl.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nomemreq", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**nomemreq" );
+ /* src/mpid/ch4/src/ch4_impl.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**rmasync", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**rmasync" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_netmod", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**invalid_netmod" );
{
- /* src/mpid/common/hcoll/hcoll_rte.c */
- char s1[] = "pointer1";
- int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**hcoll_wrong_arg", "**hcoll_wrong_arg %p %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**hcoll_wrong_arg %p %d" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ char s1[] = "string1";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_netmod", "**invalid_netmod %s", s1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**invalid_netmod %s" );
}
- /* src/mpid/common/hcoll/hcoll_rte.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**null_buff_ptr", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**null_buff_ptr" );
- /* src/mpid/common/sched/mpid_sched.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**toomanynbc", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**toomanynbc" );
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|socket", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|socket" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch4|invalid_shm", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ch4|invalid_shm" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
- int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|socket", "**sock|poll|socket %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|socket %d %s" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ char s1[] = "string1";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch4|invalid_shm", "**ch4|invalid_shm %s", s1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ch4|invalid_shm %s" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nonblock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nonblock" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_init", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_init" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4_init.h */
int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nonblock %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_init", "**pmi_init %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_init %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nodelay", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nodelay" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_rank", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_rank" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4_init.h */
int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nodelay", "**sock|poll|nodelay %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nodelay %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_rank", "**pmi_get_rank %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_rank %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|sockalloc", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|sockalloc" );
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connrefused", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|connrefused" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_size", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_size" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4_init.h */
int i1 = 1;
- int i2 = 2;
- char s3[] = "string3";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connrefused", "**sock|poll|connrefused %d %d %s", i1, i2, s3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|connrefused %d %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_size", "**pmi_get_size %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_size %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|oserror" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_appnum", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_appnum" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4_init.h */
int i1 = 1;
- int i2 = 2;
- int i3 = 3;
- char s4[] = "string4";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", "**sock|poll|oserror %d %d %d %s", i1, i2, i3, s4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|oserror %d %d %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_appnum", "**pmi_get_appnum %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_appnum %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badport", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badport" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_universe_size", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_universe_size" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4_init.h */
int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badport", "**sock|badport %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badport %d" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_universe_size", "**pmi_get_universe_size %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_universe_size %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|reuseaddr", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|reuseaddr" );
+ /* src/mpid/ch4/src/ch4_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**procnamefailed", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**procnamefailed" );
+ /* src/mpid/ch4/src/ch4_spawn.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_spawn_multiple", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_spawn_multiple" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4_spawn.h */
int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|reuseaddr", "**sock|poll|reuseaddr %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|reuseaddr %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_spawn_multiple", "**pmi_spawn_multiple %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_spawn_multiple %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**badportrange", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**badportrange" );
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|bind", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|bind" );
+ /* src/mpid/ch4/src/ch4_progress.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**progresshookstoomany", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**progresshookstoomany" );
+ /* src/mpid/ch4/src/ch4r_win.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**rmaflavor", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**rmaflavor" );
+ /* src/mpid/ch4/src/ch4i_comm.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dupprocesses", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**dupprocesses" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4i_comm.h */
int i1 = 1;
- int i2 = 2;
- char s3[] = "string3";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|bind", "**sock|poll|bind %d %d %s", i1, i2, s3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|bind %d %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dupprocesses", "**dupprocesses %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**dupprocesses %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|listen", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|listen" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
+ /* src/mpid/ch4/src/ch4r_rma_target_callbacks.h */
int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|listen", "**sock|poll|listen %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|listen %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**opnotpredefined", "**opnotpredefined %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**opnotpredefined %d" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|getport", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|getport" );
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_status", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_status" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
- int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|getport", "**sock|poll|getport %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|getport %d %s" );
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_status", "**ucx_nm_status %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_status %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badlen", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badlen" );
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_pmi_error", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_pmi_error" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- int i4 = 4;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badlen", "**sock|badlen %d %d %d %d", i1, i2, i3, i4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badlen %d %d %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_pmi_error", "**ucx_nm_pmi_error %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_pmi_error %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badiovn", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badiovn" );
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_str_error", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_str_error" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badiovn", "**sock|badiovn %d %d %d", i1, i2, i3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badiovn %d %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_str_error", "**ucx_nm_str_error %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_str_error %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing_already", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|closing_already" );
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_rq_error", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_rq_error" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ucx/ucx_impl.h */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing_already", "**sock|closing_already %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|closing_already %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ucx_nm_rq_error", "**ucx_nm_rq_error %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ucx_nm_rq_error %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_post.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|close_cancel", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|close_cancel" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_pmi", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_pmi" );
{
- /* src/mpid/common/sock/poll/sock_post.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|close_cancel", "**sock|close_cancel %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|close_cancel %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_pmi", "**ofid_pmi %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_pmi %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|eqfail", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|eqfail" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_addrinfo", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_addrinfo" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|eqfail", "**sock|poll|eqfail %d %d %d", i1, i2, i3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|eqfail %d %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_addrinfo", "**ofid_addrinfo %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_addrinfo %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|osnomem", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|osnomem" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_opendomain", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_opendomain" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|osnomem", "**sock|osnomem %s %d %d", s1, i2, i3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|osnomem %s %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_opendomain", "**ofid_opendomain %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_opendomain %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_bind", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_bind" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- int i4 = 4;
- char s5[] = "string5";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", "**sock|poll|oserror %s %d %d %d %s", s1, i2, i3, i4, s5 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|oserror %s %d %d %d %s" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_bind", "**ofid_bind %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_bind %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|uninit", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|uninit" );
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badsock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badsock" );
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|notconnected", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|notconnected" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_fabric", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_fabric" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|notconnected", "**sock|notconnected %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|notconnected %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_fabric", "**ofid_fabric %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_fabric %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connclosed", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|connclosed" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_opencq", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_opencq" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connclosed", "**sock|connclosed %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|connclosed %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_opencq", "**ofid_opencq %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_opencq %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connfailed", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|connfailed" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_openct", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_openct" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
+ char s3[] = "string3";
char s4[] = "string4";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connfailed", "**sock|poll|connfailed %d %d %d %s", i1, i2, i3, s4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|connfailed %d %d %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_openct", "**ofid_openct %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_openct %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|closing" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_ep_enable", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_ep_enable" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing", "**sock|closing %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|closing %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_ep_enable", "**ofid_ep_enable %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_ep_enable %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_read", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_read" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_ep", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_ep" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_read", "**sock|listener_read %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_read %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_ep", "**ofid_ep %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_ep %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_write", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_write" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avopen", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avopen" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_write", "**sock|listener_write %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_write %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avopen", "**ofid_avopen %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avopen %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhandle", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badhandle" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_getname", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_getname" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhandle", "**sock|poll|badhandle %d %d %d", i1, i2, i3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|badhandle %d %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_getname", "**ofid_getname %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_getname %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|reads", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|reads" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avmap", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avmap" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|reads", "**sock|reads %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|reads %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avmap", "**ofid_avmap %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avmap %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|writes", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|writes" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avlookup", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avlookup" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|writes", "**sock|writes %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|writes %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avlookup", "**ofid_avlookup %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avlookup %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avsync", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avsync" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
+ char s3[] = "string3";
char s4[] = "string4";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|osnomem", "**sock|poll|osnomem %d %d %d %s", i1, i2, i3, s4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|osnomem %d %d %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avsync", "**ofid_avsync %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avsync %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badbuf", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badbuf" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_epclose", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_epclose" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
+ char s3[] = "string3";
char s4[] = "string4";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badbuf", "**sock|poll|badbuf %d %d %d %s", i1, i2, i3, s4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|badbuf %d %d %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_epclose", "**ofid_epclose %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_epclose %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_cqclose", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_cqclose" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
+ char s3[] = "string3";
char s4[] = "string4";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connclosed", "**sock|poll|connclosed %d %d %d %s", i1, i2, i3, s4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|connclosed %d %d %d %s" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_cqclose", "**ofid_cqclose %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_cqclose %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|eqmalloc", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|eqmalloc" );
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setsndbufsz", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setsndbufsz" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_epsync", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_epsync" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
char s3[] = "string3";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setsndbufsz", "**sock|poll|setsndbufsz %d %d %s", i1, i2, s3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setsndbufsz %d %d %s" );
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_epsync", "**ofid_epsync %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_epsync %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/socki_util.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_alias", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_alias" );
{
- /* src/mpid/common/sock/poll/socki_util.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
char s3[] = "string3";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz", "**sock|poll|setrcvbufsz %d %d %s", i1, i2, s3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz %d %d %s" );
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_alias", "**ofid_alias %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_alias %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_getopt", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_getopt" );
{
- /* src/mpid/common/sock/poll/sock_wait.i */
- int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", "**sock|poll|oserror %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|oserror %d %s" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_getopt", "**ofid_getopt %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_getopt %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_setopt", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_setopt" );
{
- /* src/mpid/common/sock/poll/sock_wait.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- int i4 = 4;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhandle", "**sock|poll|badhandle %d %d %d %d", i1, i2, i3, i4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|badhandle %d %d %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_setopt", "**ofid_setopt %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_setopt %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_wait.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledstate", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledstate" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_domainclose", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_domainclose" );
{
- /* src/mpid/common/sock/poll/sock_wait.i */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledstate", "**sock|poll|unhandledstate %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledstate %d" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_domainclose", "**ofid_domainclose %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_domainclose %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_wait.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledtype", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledtype" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avclose", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avclose" );
{
- /* src/mpid/common/sock/poll/sock_wait.i */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledtype", "**sock|poll|unhandledtype %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledtype %d" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_avclose", "**ofid_avclose %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_avclose %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_misc.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhdmax", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badhdmax" );
- /* src/mpid/common/sock/poll/sock_misc.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhdlen", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badhdlen" );
- /* src/mpid/common/sock/poll/sock_misc.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhdbuf", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|badhdbuf" );
- /* src/mpid/common/sock/poll/sock_set.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|setalloc", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|setalloc" );
- /* src/mpid/common/sock/poll/sock_set.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipe", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipe" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_tsend", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_tsend" );
{
- /* src/mpid/common/sock/poll/sock_set.i */
- int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipe", "**sock|poll|pipe %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipe %d %s" );
- }
- /* src/mpid/common/sock/poll/sock_set.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipenonblock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipenonblock" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_tsend", "**ofid_tsend %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_tsend %s %d %s %s" );
+ }
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_tinject", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_tinject" );
{
- /* src/mpid/common/sock/poll/sock_set.i */
- int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipenonblock", "**sock|poll|pipenonblock %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipenonblock %d %s" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_tinject", "**ofid_tinject %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_tinject %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_immed.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_sock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_sock" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_tsendsync", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_tsendsync" );
{
- /* src/mpid/common/sock/poll/sock_immed.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_sock", "**sock|listener_bad_sock %d %d", i1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_sock %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_tsendsync", "**ofid_tsendsync %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_tsendsync %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_immed.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_state", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_state" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_trecv", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_trecv" );
{
- /* src/mpid/common/sock/poll/sock_immed.i */
- int i1 = 1;
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
int i2 = 2;
- int i3 = 3;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_state", "**sock|listener_bad_state %d %d %d", i1, i2, i3 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_state %d %d %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_trecv", "**ofid_trecv %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_trecv %s %d %s %s" );
}
- /* src/mpid/common/sock/poll/sock_immed.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|nosock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|nosock" );
- /* src/mpid/common/sock/poll/sock_immed.i */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|accept", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|accept" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_trecvsync", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_trecvsync" );
{
- /* src/mpid/common/sock/poll/sock_immed.i */
- int i1 = 1;
- char s2[] = "string2";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|accept", "**sock|poll|accept %d %s", i1, s2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|accept %d %s" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_trecvsync", "**ofid_trecvsync %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_trecvsync %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**socket", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**socket" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_poll", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_poll" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**socket", "**socket %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**socket %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_poll", "**ofid_poll %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_poll %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**duphandle", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**duphandle" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_peek", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_peek" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**duphandle", "**duphandle %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**duphandle %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_peek", "**ofid_peek %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_peek %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_send", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_send" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**fail", "**fail %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**fail %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_send", "**ofid_send %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_send %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**wsasock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**wsasock" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_inject", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_inject" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**wsasock", "**wsasock %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**wsasock %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_inject", "**ofid_inject %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_inject %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_init", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock_init" );
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**getinfo", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**getinfo" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_write", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_write" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**getinfo", "**getinfo %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**getinfo %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_write", "**ofid_rdma_write %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_write %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**desc_len", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**desc_len" );
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_gethost", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock_gethost" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_inject_write", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_inject_write" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_gethost", "**sock_gethost %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock_gethost %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_inject_write", "**ofid_rdma_inject_write %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_inject_write %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**iocp", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**iocp" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_atomicto", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_atomicto" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**iocp", "**iocp %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**iocp %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_atomicto", "**ofid_rdma_atomicto %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_atomicto %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**bad_set", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**bad_set" );
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**post_accept", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**post_accept" );
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_nop_accept", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**sock_nop_accept" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_cswap", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_cswap" );
{
- /* src/mpid/common/sock/iocp/sock.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**fail", "**fail %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**fail %d" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_cswap", "**ofid_rdma_cswap %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_cswap %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_readfrom", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_readfrom" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
char s3[] = "string3";
- int i4 = 4;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_connect", "**sock_connect %s %d %s %d", s1, i2, s3, i4 );
- ChkMsg( err, MPI_ERR_OTHER, "**sock_connect %s %d %s %d" );
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rdma_readfrom", "**ofid_rdma_readfrom %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rdma_readfrom %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**gethostbyname", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**gethostbyname" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_mr_reg", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_mr_reg" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**gethostbyname", "**gethostbyname %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**gethostbyname %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_mr_reg", "**ofid_mr_reg %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_mr_reg %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**bad_sock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**bad_sock" );
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pctwice", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pctwice" );
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**bad_listenersock", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**bad_listenersock" );
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**closesocket", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**closesocket" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_mr_unreg", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_mr_unreg" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**closesocket", "**closesocket %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**closesocket %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_mr_unreg", "**ofid_mr_unreg %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_mr_unreg %s %d %s %s" );
+ }
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_prepost", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_prepost" );
+ {
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_prepost", "**ofid_prepost %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_prepost %s %d %s %s" );
+ }
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_ctrlcancel", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_ctrlcancel" );
+ {
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_ctrlcancel", "**ofid_ctrlcancel %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_ctrlcancel %s %d %s %s" );
}
- /* src/mpid/common/sock/iocp/sock.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**shutdown", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**shutdown" );
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_cntr_wait", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_cntr_wait" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/catalog.c */
char s1[] = "string1";
int i2 = 2;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**shutdown", "**shutdown %s %d", s1, i2 );
- ChkMsg( err, MPI_ERR_OTHER, "**shutdown %s %d" );
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_cntr_wait", "**ofid_cntr_wait %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_cntr_wait %s %d %s %s" );
}
+ /* src/mpid/ch4/netmod/ofi/ofi_spawn.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**argstr_no_port_name_tag", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**argstr_no_port_name_tag" );
+ /* src/mpid/ch4/netmod/ofi/ofi_init.h */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rma_init", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rma_init" );
{
- /* src/mpid/common/sock/iocp/sock.c */
+ /* src/mpid/ch4/netmod/ofi/ofi_init.h */
char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**fail", "**fail %s", s1 );
- ChkMsg( err, MPI_ERR_OTHER, "**fail %s" );
+ int i2 = 2;
+ char s3[] = "string3";
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ofid_rma_init", "**ofid_rma_init %s %d %s %s", s1, i2, s3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ofid_rma_init %s %d %s %s" );
+ }
+ /* src/mpid/common/hcoll/hcoll_rte.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**hcoll_wrong_arg", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**hcoll_wrong_arg" );
+ {
+ /* src/mpid/common/hcoll/hcoll_rte.c */
+ char s1[] = "pointer1";
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**hcoll_wrong_arg", "**hcoll_wrong_arg %p %d", s1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**hcoll_wrong_arg %p %d" );
}
- /* src/mpid/common/datatype/mpid_datatype.h */
+ /* src/mpid/common/hcoll/hcoll_rte.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**null_buff_ptr", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**null_buff_ptr" );
+ /* src/mpid/common/sched/mpidu_sched.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**toomanynbc", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**toomanynbc" );
+ /* src/mpid/common/datatype/mpidu_datatype.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dtypecommit", 0);
ChkMsg( err, MPI_ERR_OTHER, "**dtypecommit" );
/* src/mpid/ch3/src/mpid_improbe.c */
@@ -6479,9 +6468,6 @@ int main(int argc, char **argv)
/* src/mpid/ch3/src/ch3u_rndv.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|rtspkt", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|rtspkt" );
- /* src/mpid/ch3/src/ch3u_rndv.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nomemreq", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**nomemreq" );
{
/* src/mpid/ch3/src/ch3u_rndv.c */
int i1 = 1;
@@ -6504,20 +6490,20 @@ int main(int argc, char **argv)
ChkMsg( err, MPI_ERR_OTHER, "**ch3|postrecv %s" );
}
/* src/mpid/ch3/src/ch3u_comm_spawn_multiple.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_spawn_multiple", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_spawn_multiple" );
- {
- /* src/mpid/ch3/src/ch3u_comm_spawn_multiple.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_spawn_multiple", "**pmi_spawn_multiple %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_spawn_multiple %d" );
- }
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvsget", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvsget" );
{
/* src/mpid/ch3/src/ch3u_comm_spawn_multiple.c */
char s1[] = "string1";
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvsget", "**pmi_kvsget %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvsget %s" );
}
+ {
+ /* src/mpid/ch3/src/ch3u_comm_spawn_multiple.c */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvsget", "**pmi_kvsget %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvsget %d" );
+ }
/* src/mpid/ch3/src/mpid_irecv.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|badmsgtype", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|badmsgtype" );
@@ -6539,9 +6525,6 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**comm_fail", "**comm_fail %d", i1 );
ChkMsg( err, MPI_ERR_OTHER, "**comm_fail %d" );
}
- /* src/mpid/ch3/src/ch3u_rma_reqops.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**rmasync", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**rmasync" );
/* src/mpid/ch3/src/ch3u_eager.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|loadsendiov", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|loadsendiov" );
@@ -6578,33 +6561,6 @@ int main(int argc, char **argv)
ChkMsg( err, MPI_ERR_OTHER, "**unknowngpid %d %d" );
}
{
- /* src/mpid/ch3/src/mpid_vc.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvs_put", "**pmi_kvs_put %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvs_put %d" );
- }
- {
- /* src/mpid/ch3/src/mpid_vc.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvs_commit", "**pmi_kvs_commit %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvs_commit %d" );
- }
- /* src/mpid/ch3/src/mpid_vc.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_barrier", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_barrier" );
- {
- /* src/mpid/ch3/src/mpid_vc.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_barrier", "**pmi_barrier %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_barrier %d" );
- }
- {
- /* src/mpid/ch3/src/mpid_vc.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvs_get", "**pmi_kvs_get %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvs_get %d" );
- }
- {
/* src/mpid/ch3/src/ch3u_rma_pkthandler.c */
int i1 = 1;
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**nomem", "**nomem %d", i1 );
@@ -6622,16 +6578,22 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**notimpl", "**notimpl %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**notimpl %s" );
}
- /* src/mpid/ch3/src/mpid_get_universe_size.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_universe_size", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_universe_size" );
+ /* src/mpid/ch3/src/ch3u_port.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|conntimeout", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ch3|conntimeout" );
{
- /* src/mpid/ch3/src/mpid_get_universe_size.c */
+ /* src/mpid/ch3/src/ch3u_port.c */
int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_universe_size", "**pmi_get_universe_size %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_universe_size %d" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|conntimeout", "**ch3|conntimeout %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**ch3|conntimeout %d" );
}
/* src/mpid/ch3/src/ch3u_port.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|portclose", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**ch3|portclose" );
+ /* src/mpid/ch3/src/ch3u_port.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**unknown", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**unknown" );
+ /* src/mpid/ch3/src/ch3u_port.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**init_vcrt", 0);
ChkMsg( err, MPI_ERR_OTHER, "**init_vcrt" );
/* src/mpid/ch3/src/ch3u_port.c */
@@ -6646,9 +6608,6 @@ int main(int argc, char **argv)
/* src/mpid/ch3/src/mpid_port.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**argstr_port_name_tag", 0);
ChkMsg( err, MPI_ERR_OTHER, "**argstr_port_name_tag" );
- /* src/mpid/ch3/src/mpid_port.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**argstr_no_port_name_tag", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**argstr_no_port_name_tag" );
/* src/mpid/ch3/src/mpid_ssend.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**dev|selfsenddeadlock", 0);
ChkMsg( err, MPI_ERR_OTHER, "**dev|selfsenddeadlock" );
@@ -6714,42 +6673,6 @@ int main(int argc, char **argv)
ChkMsg( err, MPI_ERR_OTHER, "**ch3|conn_parent %s" );
}
/* src/mpid/ch3/src/mpid_init.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_init", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_init" );
- {
- /* src/mpid/ch3/src/mpid_init.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_init", "**pmi_init %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_init %d" );
- }
- /* src/mpid/ch3/src/mpid_init.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_rank", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_rank" );
- {
- /* src/mpid/ch3/src/mpid_init.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_rank", "**pmi_get_rank %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_rank %d" );
- }
- /* src/mpid/ch3/src/mpid_init.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_size", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_size" );
- {
- /* src/mpid/ch3/src/mpid_init.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_size", "**pmi_get_size %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_size %d" );
- }
- /* src/mpid/ch3/src/mpid_init.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_appnum", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_appnum" );
- {
- /* src/mpid/ch3/src/mpid_init.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_appnum", "**pmi_get_appnum %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_appnum %d" );
- }
- /* src/mpid/ch3/src/mpid_init.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_get_id_length_max", 0);
ChkMsg( err, MPI_ERR_OTHER, "**pmi_get_id_length_max" );
{
@@ -6779,9 +6702,6 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**pmi_kvs_get_value_length_max", "**pmi_kvs_get_value_length_max %d", i1 );
ChkMsg( err, MPI_ERR_OTHER, "**pmi_kvs_get_value_length_max %d" );
}
- /* src/mpid/ch3/src/mpid_getpname.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**procnamefailed", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**procnamefailed" );
/* src/mpid/ch3/src/mpid_cancel_send.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|cancelrndv", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|cancelrndv" );
@@ -6794,24 +6714,6 @@ int main(int argc, char **argv)
/* src/mpid/ch3/src/ch3u_handle_recv_pkt.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|pktarraytoosmall", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|pktarraytoosmall" );
- /* src/mpid/ch3/src/ch3u_request.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_handle", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**invalid_handle" );
- {
- /* src/mpid/ch3/src/ch3u_request.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_handle", "**invalid_handle %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**invalid_handle %d" );
- }
- /* src/mpid/ch3/src/ch3u_request.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_refcount", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**invalid_refcount" );
- {
- /* src/mpid/ch3/src/ch3u_request.c */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_refcount", "**invalid_refcount %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**invalid_refcount %d" );
- }
/* src/mpid/ch3/src/mpidi_pg.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|pmi_finalize", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|pmi_finalize" );
@@ -6866,12 +6768,6 @@ int main(int argc, char **argv)
/* src/mpid/ch3/src/ch3u_eagersync.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|syncack", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|syncack" );
- {
- /* src/mpid/ch3/include/mpidrma.h */
- int i1 = 1;
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**opnotpredefined", "**opnotpredefined %d", i1 );
- ChkMsg( err, MPI_ERR_OTHER, "**opnotpredefined %d" );
- }
/* src/mpid/ch3/include/mpidrma.h */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**winnoprogress", 0);
ChkMsg( err, MPI_ERR_OTHER, "**winnoprogress" );
@@ -6921,6 +6817,15 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**read", "**readv %d %s", i1, s2 );
ChkMsg( err, MPI_ERR_OTHER, "**readv %d %s" );
}
+ /* src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_vmsplice.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**open", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**open" );
+ {
+ /* src/mpid/ch3/channels/nemesis/src/mpid_nem_lmt_vmsplice.c */
+ char s1[] = "string1";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**open", "**open %s", s1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**open %s" );
+ }
/* src/mpid/ch3/channels/nemesis/src/mpid_nem_ckpt.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**blcr_mod", 0);
ChkMsg( err, MPI_ERR_OTHER, "**blcr_mod" );
@@ -6966,15 +6871,6 @@ int main(int argc, char **argv)
/* src/mpid/ch3/channels/nemesis/src/ch3_init.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**init_progress", 0);
ChkMsg( err, MPI_ERR_OTHER, "**init_progress" );
- /* src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_netmod", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**invalid_netmod" );
- {
- /* src/mpid/ch3/channels/nemesis/src/mpid_nem_network.c */
- char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**invalid_netmod", "**invalid_netmod %s", s1 );
- ChkMsg( err, MPI_ERR_OTHER, "**invalid_netmod %s" );
- }
/* src/mpid/ch3/channels/nemesis/src/mpid_nem_mpich_rma.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**winput_oob", 0);
ChkMsg( err, MPI_ERR_OTHER, "**winput_oob" );
@@ -7405,12 +7301,22 @@ int main(int argc, char **argv)
ChkMsg( err, MPI_ERR_OTHER, "**iface_notfound %s" );
}
/* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**getsockname", 0);
- ChkMsg( err, MPI_ERR_OTHER, "**getsockname" );
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**gethostbyname", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**gethostbyname" );
{
/* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
char s1[] = "string1";
- err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**getsockname", "**getsockname %s", s1 );
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**gethostbyname", "**gethostbyname %s %d", s1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**gethostbyname %s %d" );
+ }
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**getsockname", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**getsockname" );
+ {
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+ char s1[] = "string1";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**getsockname", "**getsockname %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**getsockname %s" );
}
/* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
@@ -7425,6 +7331,20 @@ int main(int argc, char **argv)
/* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**afinetinvalid", 0);
ChkMsg( err, MPI_ERR_OTHER, "**afinetinvalid" );
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**badportrange", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**badportrange" );
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|bind", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|bind" );
+ {
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c */
+ int i1 = 1;
+ int i2 = 2;
+ char s3[] = "string3";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|bind", "**sock|poll|bind %d %d %s", i1, i2, s3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|bind %d %d %s" );
+ }
/* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_closed", 0);
ChkMsg( err, MPI_ERR_OTHER, "**sock_closed" );
@@ -7437,6 +7357,9 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**writev", "**writev %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**writev %s" );
}
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**write", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**write" );
{
/* src/mpid/ch3/channels/nemesis/netmod/tcp/socksm.c */
char s1[] = "string1";
@@ -7519,6 +7442,23 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock_accept", "**sock_accept %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**sock_accept %s" );
}
+ {
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_utility.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**fail", "**fail %s %d", s1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**fail %s %d" );
+ }
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_finalize.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**closesocket", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**closesocket" );
+ {
+ /* src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_finalize.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**closesocket", "**closesocket %s %d", s1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**closesocket %s %d" );
+ }
/* src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ptlmeappend", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ptlmeappend" );
@@ -7739,6 +7679,430 @@ int main(int argc, char **argv)
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**mxm_ep_disconnect", "**mxm_ep_disconnect %s", s1 );
ChkMsg( err, MPI_ERR_OTHER, "**mxm_ep_disconnect %s" );
}
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|eqfail", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|eqfail" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|eqfail", "**sock|poll|eqfail %d %d %d", i1, i2, i3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|eqfail %d %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|osnomem", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|osnomem" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ int i3 = 3;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|osnomem", "**sock|osnomem %s %d %d", s1, i2, i3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|osnomem %s %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|oserror" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ char s1[] = "string1";
+ int i2 = 2;
+ int i3 = 3;
+ int i4 = 4;
+ char s5[] = "string5";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", "**sock|poll|oserror %s %d %d %d %s", s1, i2, i3, i4, s5 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|oserror %s %d %d %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|uninit", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|uninit" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badsock", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badsock" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|notconnected", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|notconnected" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|notconnected", "**sock|notconnected %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|notconnected %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connclosed", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|connclosed" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connclosed", "**sock|connclosed %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|connclosed %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connfailed", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|connfailed" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connfailed", "**sock|poll|connfailed %d %d %d %s", i1, i2, i3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|connfailed %d %d %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|closing" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing", "**sock|closing %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|closing %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_read", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_read" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_read", "**sock|listener_read %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_read %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_write", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_write" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_write", "**sock|listener_write %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_write %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhandle", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badhandle" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhandle", "**sock|poll|badhandle %d %d %d", i1, i2, i3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|badhandle %d %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|reads", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|reads" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|reads", "**sock|reads %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|reads %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|writes", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|writes" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|writes", "**sock|writes %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|writes %d %d" );
+ }
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|osnomem", "**sock|poll|osnomem %d %d %d %s", i1, i2, i3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|osnomem %d %d %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badbuf", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badbuf" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badbuf", "**sock|poll|badbuf %d %d %d %s", i1, i2, i3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|badbuf %d %d %d %s" );
+ }
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connclosed", "**sock|poll|connclosed %d %d %d %s", i1, i2, i3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|connclosed %d %d %d %s" );
+ }
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ char s4[] = "string4";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", "**sock|poll|oserror %d %d %d %s", i1, i2, i3, s4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|oserror %d %d %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|eqmalloc", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|eqmalloc" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setsndbufsz", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setsndbufsz" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ char s3[] = "string3";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setsndbufsz", "**sock|poll|setsndbufsz %d %d %s", i1, i2, s3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setsndbufsz %d %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ char s3[] = "string3";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz", "**sock|poll|setrcvbufsz %d %d %s", i1, i2, s3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|setrcvbufsz %d %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|setalloc", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|setalloc" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipe", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipe" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipe", "**sock|poll|pipe %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipe %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipenonblock", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipenonblock" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|pipenonblock", "**sock|poll|pipenonblock %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|pipenonblock %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|sockalloc", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|sockalloc" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|socket", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|socket" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|socket", "**sock|poll|socket %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|socket %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nonblock", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nonblock" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nonblock", "**sock|poll|nonblock %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nonblock %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nodelay", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nodelay" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|nodelay", "**sock|poll|nodelay %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|nodelay %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connrefused", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|connrefused" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ char s3[] = "string3";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|connrefused", "**sock|poll|connrefused %d %d %s", i1, i2, s3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|connrefused %d %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badport", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badport" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badport", "**sock|badport %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badport %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|reuseaddr", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|reuseaddr" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|reuseaddr", "**sock|poll|reuseaddr %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|reuseaddr %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|listen", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|listen" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|listen", "**sock|poll|listen %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|listen %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|getport", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|getport" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|getport", "**sock|poll|getport %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|getport %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badlen", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badlen" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ int i4 = 4;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badlen", "**sock|badlen %d %d %d %d", i1, i2, i3, i4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badlen %d %d %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badiovn", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badiovn" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badiovn", "**sock|badiovn %d %d %d", i1, i2, i3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badiovn %d %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing_already", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|closing_already" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|closing_already", "**sock|closing_already %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|closing_already %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|close_cancel", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|close_cancel" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|close_cancel", "**sock|close_cancel %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|close_cancel %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_sock", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_sock" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_sock", "**sock|listener_bad_sock %d %d", i1, i2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_sock %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_state", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_state" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|listener_bad_state", "**sock|listener_bad_state %d %d %d", i1, i2, i3 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|listener_bad_state %d %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|nosock", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|nosock" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|accept", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|accept" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|accept", "**sock|poll|accept %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|accept %d %s" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhdmax", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badhdmax" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhdlen", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badhdlen" );
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhdbuf", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|badhdbuf" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ char s2[] = "string2";
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|oserror", "**sock|poll|oserror %d %s", i1, s2 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|oserror %d %s" );
+ }
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ int i2 = 2;
+ int i3 = 3;
+ int i4 = 4;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|badhandle", "**sock|poll|badhandle %d %d %d %d", i1, i2, i3, i4 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|badhandle %d %d %d %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledstate", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledstate" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledstate", "**sock|poll|unhandledstate %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledstate %d" );
+ }
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledtype", 0);
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledtype" );
+ {
+ /* src/mpid/ch3/channels/sock/src/sock.c */
+ int i1 = 1;
+ err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**sock|poll|unhandledtype", "**sock|poll|unhandledtype %d", i1 );
+ ChkMsg( err, MPI_ERR_OTHER, "**sock|poll|unhandledtype %d" );
+ }
/* src/mpid/ch3/channels/sock/src/ch3i_errno.c */
err = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, "errcode::main", __LINE__, MPI_ERR_OTHER, "**ch3|sock|connclose", 0);
ChkMsg( err, MPI_ERR_OTHER, "**ch3|sock|connclose" );
diff --git a/test/mpi/errhan/errstring2.c b/test/mpi/errhan/errstring2.c
index f63db76..26a5151 100644
--- a/test/mpi/errhan/errstring2.c
+++ b/test/mpi/errhan/errstring2.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include <stdio.h>
#include <mpi.h>
#include <string.h>
diff --git a/test/mpi/errors/Makefile.in b/test/mpi/errors/Makefile.in
index 69ce2b8..9efe9cd 100644
--- a/test/mpi/errors/Makefile.in
+++ b/test/mpi/errors/Makefile.in
@@ -366,6 +366,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -384,7 +385,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
# FIXME should "datatype" be included in this list? It was not in the
@@ -712,10 +713,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/attr/Makefile.in b/test/mpi/errors/attr/Makefile.in
index 97a95b6..5cd5d6c 100644
--- a/test/mpi/errors/attr/Makefile.in
+++ b/test/mpi/errors/attr/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -368,7 +369,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -649,10 +650,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/basic/Makefile.in b/test/mpi/errors/basic/Makefile.in
index 1525e17..d7e732e 100644
--- a/test/mpi/errors/basic/Makefile.in
+++ b/test/mpi/errors/basic/Makefile.in
@@ -356,6 +356,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -374,7 +375,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
all: all-am
.SUFFIXES:
@@ -659,10 +660,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/coll/Makefile.in b/test/mpi/errors/coll/Makefile.in
index bd064c9..2bdfd5a 100644
--- a/test/mpi/errors/coll/Makefile.in
+++ b/test/mpi/errors/coll/Makefile.in
@@ -408,6 +408,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -426,7 +427,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
ibcastlength_SOURCES = bcastlength.c
ibcastlength_CPPFLAGS = -DUSE_MTEST_NBC $(AM_CPPFLAGS)
@@ -795,10 +796,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/coll/bcastlength.c b/test/mpi/errors/coll/bcastlength.c
index 38343d3..e2713ce 100644
--- a/test/mpi/errors/coll/bcastlength.c
+++ b/test/mpi/errors/coll/bcastlength.c
@@ -22,6 +22,8 @@ int main(int argc, char *argv[])
char str[MPI_MAX_ERROR_STRING + 1];
int slen;
+ MTEST_VG_MEM_INIT(buf, 10 * sizeof(int));
+
MTest_Init(&argc, &argv);
MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
diff --git a/test/mpi/errors/coll/noalias2.c b/test/mpi/errors/coll/noalias2.c
index aac5c3c..13ac7bf 100644
--- a/test/mpi/errors/coll/noalias2.c
+++ b/test/mpi/errors/coll/noalias2.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2015 by Argonne National Laboratory.
+ * (C) 2010 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
@@ -35,7 +35,7 @@ int main(int argc, char **argv)
int *rcounts = NULL;
int *sdispls = NULL;
int *rdispls = NULL;
- int *types = NULL;
+ MPI_Datatype *types = NULL;
MPI_Comm comm;
/* intentionally not using MTest_Init/MTest_Finalize in order to make it
@@ -64,7 +64,7 @@ int main(int argc, char **argv)
my_assert(sdispls);
rdispls = malloc(size * sizeof(int));
my_assert(rdispls);
- types = malloc(size * sizeof(int));
+ types = malloc(size * sizeof(MPI_Datatype));
my_assert(types);
for (i = 0; i < size; ++i) {
@@ -144,6 +144,8 @@ int main(int argc, char **argv)
free(sdispls);
if (rdispls)
free(rdispls);
+ if (types)
+ free(types);
if (rank == 0) {
if (errs)
diff --git a/test/mpi/errors/coll/noalias3.c b/test/mpi/errors/coll/noalias3.c
index caaf924..c95da3a 100644
--- a/test/mpi/errors/coll/noalias3.c
+++ b/test/mpi/errors/coll/noalias3.c
@@ -35,7 +35,7 @@ int main(int argc, char **argv)
int *rcounts = NULL;
int *sdispls = NULL;
int *rdispls = NULL;
- int *types = NULL;
+ MPI_Datatype *types = NULL;
MPI_Comm comm;
MPI_Request req;
@@ -65,7 +65,7 @@ int main(int argc, char **argv)
my_assert(sdispls);
rdispls = malloc(size * sizeof(int));
my_assert(rdispls);
- types = malloc(size * sizeof(int));
+ types = malloc(size * sizeof(MPI_Datatype));
my_assert(types);
for (i = 0; i < size; ++i) {
@@ -148,6 +148,8 @@ int main(int argc, char **argv)
free(sdispls);
if (rdispls)
free(rdispls);
+ if (types)
+ free(types);
if (rank == 0) {
if (errs)
diff --git a/test/mpi/errors/coll/testlist b/test/mpi/errors/coll/testlist
index 6bfd11a..f3964cc 100644
--- a/test/mpi/errors/coll/testlist
+++ b/test/mpi/errors/coll/testlist
@@ -1,9 +1,9 @@
noalias 2
-nb_noalias 2 mpiversion=3.0 xfail=ticket2301
+nb_noalias 2 mpiversion=3.0
noalias2 4 mpiversion=2.2
noalias3 4 mpiversion=3.0
rerr 2
nb_rerr 2 mpiversion=3.0
reduce_local 1
bcastlength 4
-ibcastlength 4 mpiversion=3.0 xfail=ticket2300
+ibcastlength 4 mpiversion=3.0
diff --git a/test/mpi/errors/comm/Makefile.in b/test/mpi/errors/comm/Makefile.in
index d19c604..7ec1343 100644
--- a/test/mpi/errors/comm/Makefile.in
+++ b/test/mpi/errors/comm/Makefile.in
@@ -405,6 +405,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -423,7 +424,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -744,10 +745,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/comm/too_many_comms2.c b/test/mpi/errors/comm/too_many_comms2.c
index 40b8071..92e02f6 100644
--- a/test/mpi/errors/comm/too_many_comms2.c
+++ b/test/mpi/errors/comm/too_many_comms2.c
@@ -73,6 +73,7 @@ int main(int argc, char **argv)
MPI_Comm_free(&comm_hdls[i]);
free(comm_hdls);
+ free(ranks);
MPI_Group_free(&world_group);
MTest_Finalize(errors);
diff --git a/test/mpi/errors/comm/too_many_comms3.c b/test/mpi/errors/comm/too_many_comms3.c
index 614a72d..232897d 100644
--- a/test/mpi/errors/comm/too_many_comms3.c
+++ b/test/mpi/errors/comm/too_many_comms3.c
@@ -75,6 +75,7 @@ int main(int argc, char **argv)
MPI_Comm_free(&comm_hdls[i]);
free(comm_hdls);
+ free(ranks);
MPI_Group_free(&world_group);
MTest_Finalize(errors);
diff --git a/test/mpi/errors/comm/too_many_icomms.c b/test/mpi/errors/comm/too_many_icomms.c
index a91d4eb..6d20a13 100644
--- a/test/mpi/errors/comm/too_many_icomms.c
+++ b/test/mpi/errors/comm/too_many_icomms.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
*
- * (C) 2015 by Argonne National Laboratory.
+ * (C) 2012 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
diff --git a/test/mpi/errors/comm/too_many_icomms2.c b/test/mpi/errors/comm/too_many_icomms2.c
index 9430b81..5addb34 100644
--- a/test/mpi/errors/comm/too_many_icomms2.c
+++ b/test/mpi/errors/comm/too_many_icomms2.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
*
- * (C) 2015 by Argonne National Laboratory.
+ * (C) 2012 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
diff --git a/test/mpi/errors/cxx/Makefile.in b/test/mpi/errors/cxx/Makefile.in
index eeb0328..4452052 100644
--- a/test/mpi/errors/cxx/Makefile.in
+++ b/test/mpi/errors/cxx/Makefile.in
@@ -366,6 +366,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -384,7 +385,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
SUBDIRS = $(iodir) errhan
DIST_SUBDIRS = io errhan
@@ -706,10 +707,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/cxx/errhan/Makefile.in b/test/mpi/errors/cxx/errhan/Makefile.in
index 8a7aa78..196824e 100644
--- a/test/mpi/errors/cxx/errhan/Makefile.in
+++ b/test/mpi/errors/cxx/errhan/Makefile.in
@@ -362,6 +362,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/cxx/io/Makefile.in b/test/mpi/errors/cxx/io/Makefile.in
index ec623bf..c07d628 100644
--- a/test/mpi/errors/cxx/io/Makefile.in
+++ b/test/mpi/errors/cxx/io/Makefile.in
@@ -358,6 +358,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/cxx/io/fileerrretx.cxx b/test/mpi/errors/cxx/io/fileerrretx.cxx
index 455028e..c88cbb8 100644
--- a/test/mpi/errors/cxx/io/fileerrretx.cxx
+++ b/test/mpi/errors/cxx/io/fileerrretx.cxx
@@ -97,6 +97,7 @@ int main( int argc, char *argv[] )
}
}
+ delete[] filename;
MPI::Finalize();
return 0;
diff --git a/test/mpi/errors/datatype/Makefile.in b/test/mpi/errors/datatype/Makefile.in
index 877c827..5afc03a 100644
--- a/test/mpi/errors/datatype/Makefile.in
+++ b/test/mpi/errors/datatype/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -368,7 +369,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -649,10 +650,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/f08/Makefile.in b/test/mpi/errors/f08/Makefile.in
index 10f1f7b..880a85b 100644
--- a/test/mpi/errors/f08/Makefile.in
+++ b/test/mpi/errors/f08/Makefile.in
@@ -24,7 +24,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
am__is_gnu_make = { \
@@ -373,6 +373,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/f08/io/Makefile.in b/test/mpi/errors/f08/io/Makefile.in
index b60fae3..0a831ee 100644
--- a/test/mpi/errors/f08/io/Makefile.in
+++ b/test/mpi/errors/f08/io/Makefile.in
@@ -26,7 +26,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -354,6 +354,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/f77/Makefile.in b/test/mpi/errors/f77/Makefile.in
index abd005c..0f52afb 100644
--- a/test/mpi/errors/f77/Makefile.in
+++ b/test/mpi/errors/f77/Makefile.in
@@ -366,6 +366,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/f77/io/Makefile.in b/test/mpi/errors/f77/io/Makefile.in
index 1b281e3..3a9f667 100644
--- a/test/mpi/errors/f77/io/Makefile.in
+++ b/test/mpi/errors/f77/io/Makefile.in
@@ -345,6 +345,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/f90/Makefile.in b/test/mpi/errors/f90/Makefile.in
index 1c981f7..0f59a46 100644
--- a/test/mpi/errors/f90/Makefile.in
+++ b/test/mpi/errors/f90/Makefile.in
@@ -373,6 +373,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/f90/io/Makefile.in b/test/mpi/errors/f90/io/Makefile.in
index 353e572..27a4a5d 100644
--- a/test/mpi/errors/f90/io/Makefile.in
+++ b/test/mpi/errors/f90/io/Makefile.in
@@ -355,6 +355,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/errors/faults/Makefile.in b/test/mpi/errors/faults/Makefile.in
index f050f73..5fbf4f1 100644
--- a/test/mpi/errors/faults/Makefile.in
+++ b/test/mpi/errors/faults/Makefile.in
@@ -369,6 +369,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -387,7 +388,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -683,10 +684,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/group/Makefile.in b/test/mpi/errors/group/Makefile.in
index 100f6a9..5b5629e 100644
--- a/test/mpi/errors/group/Makefile.in
+++ b/test/mpi/errors/group/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -368,7 +369,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -649,10 +650,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/io/Makefile.in b/test/mpi/errors/io/Makefile.in
index dd61bbc..cf71ac1 100644
--- a/test/mpi/errors/io/Makefile.in
+++ b/test/mpi/errors/io/Makefile.in
@@ -363,6 +363,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -381,7 +382,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -672,10 +673,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/io/file_errhdl.c b/test/mpi/errors/io/file_errhdl.c
index ef7955b..f8359b0 100644
--- a/test/mpi/errors/io/file_errhdl.c
+++ b/test/mpi/errors/io/file_errhdl.c
@@ -1,3 +1,8 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
/* test case contributed by Lisandro Dalcin <dalcinl at gmail.com> */
#include <mpi.h>
#include <stdio.h>
diff --git a/test/mpi/errors/pt2pt/Makefile.in b/test/mpi/errors/pt2pt/Makefile.in
index d810453..4bd0b06 100644
--- a/test/mpi/errors/pt2pt/Makefile.in
+++ b/test/mpi/errors/pt2pt/Makefile.in
@@ -390,6 +390,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -408,7 +409,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -719,10 +720,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/pt2pt/errinstatta.c b/test/mpi/errors/pt2pt/errinstatta.c
index ed79795..243f0a4 100644
--- a/test/mpi/errors/pt2pt/errinstatta.c
+++ b/test/mpi/errors/pt2pt/errinstatta.c
@@ -22,6 +22,9 @@ int main(int argc, char *argv[])
int b1[20], b2[20], rank, size, src, dest, i, flag;
int errval, errclass;
+ MTEST_VG_MEM_INIT(b1, 20 * sizeof(int));
+ MTEST_VG_MEM_INIT(b2, 20 * sizeof(int));
+
MTest_Init(&argc, &argv);
/* Create some receive requests. tags 0-9 will succeed, tags 10-19
diff --git a/test/mpi/errors/pt2pt/errinstatts.c b/test/mpi/errors/pt2pt/errinstatts.c
index 79f1030..df51682 100644
--- a/test/mpi/errors/pt2pt/errinstatts.c
+++ b/test/mpi/errors/pt2pt/errinstatts.c
@@ -23,6 +23,9 @@ int main(int argc, char *argv[])
int errval, errclass;
int b1[20], b2[20], rank, size, src, dest, i, j;
+ MTEST_VG_MEM_INIT(b1, 20 * sizeof(int));
+ MTEST_VG_MEM_INIT(b2, 20 * sizeof(int));
+
MTest_Init(&argc, &argv);
/* Create some receive requests. tags 0-9 will succeed, tags 10-19
diff --git a/test/mpi/errors/pt2pt/errinstatwa.c b/test/mpi/errors/pt2pt/errinstatwa.c
index 576ec1e..343a654 100644
--- a/test/mpi/errors/pt2pt/errinstatwa.c
+++ b/test/mpi/errors/pt2pt/errinstatwa.c
@@ -22,6 +22,9 @@ int main(int argc, char *argv[])
int errval, errclass;
int b1[20], b2[20], rank, size, src, dest, i;
+ MTEST_VG_MEM_INIT(b1, 20 * sizeof(int));
+ MTEST_VG_MEM_INIT(b2, 20 * sizeof(int));
+
MTest_Init(&argc, &argv);
/* Create some receive requests. tags 0-9 will succeed, tags 10-19
diff --git a/test/mpi/errors/pt2pt/errinstatws.c b/test/mpi/errors/pt2pt/errinstatws.c
index a32c630..3b259c1 100644
--- a/test/mpi/errors/pt2pt/errinstatws.c
+++ b/test/mpi/errors/pt2pt/errinstatws.c
@@ -23,6 +23,9 @@ int main(int argc, char *argv[])
int errval, errclass;
int b1[20], b2[20], rank, size, src, dest, i, j;
+ MTEST_VG_MEM_INIT(b1, 20 * sizeof(int));
+ MTEST_VG_MEM_INIT(b2, 20 * sizeof(int));
+
MTest_Init(&argc, &argv);
/* Create some receive requests. tags 0-9 will succeed, tags 10-19
diff --git a/test/mpi/errors/pt2pt/truncmsg1.c b/test/mpi/errors/pt2pt/truncmsg1.c
index 02f579f..f5aa345 100644
--- a/test/mpi/errors/pt2pt/truncmsg1.c
+++ b/test/mpi/errors/pt2pt/truncmsg1.c
@@ -37,6 +37,7 @@ int main(int argc, char *argv[])
dest = size - 1;
buf = (int *) malloc(LongLen * sizeof(int));
+ MTEST_VG_MEM_INIT(buf, LongLen * sizeof(int));
if (!buf) {
fprintf(stderr, "Unable to allocate communication buffer of size %d\n", LongLen);
MPI_Abort(MPI_COMM_WORLD, 1);
diff --git a/test/mpi/errors/rma/Makefile.in b/test/mpi/errors/rma/Makefile.in
index 221daa3..b5fd829 100644
--- a/test/mpi/errors/rma/Makefile.in
+++ b/test/mpi/errors/rma/Makefile.in
@@ -427,6 +427,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -445,7 +446,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -781,10 +782,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/rma/win_sync_complete.c b/test/mpi/errors/rma/win_sync_complete.c
index ad52152..2684043 100644
--- a/test/mpi/errors/rma/win_sync_complete.c
+++ b/test/mpi/errors/rma/win_sync_complete.c
@@ -13,7 +13,7 @@ int main(int argc, char *argv[])
{
int rank;
int errors = 0, all_errors = 0;
- int buf;
+ int buf = 0;
MPI_Win win;
MPI_Init(&argc, &argv);
diff --git a/test/mpi/errors/rma/win_sync_free_at.c b/test/mpi/errors/rma/win_sync_free_at.c
index 971bac7..92124bb 100644
--- a/test/mpi/errors/rma/win_sync_free_at.c
+++ b/test/mpi/errors/rma/win_sync_free_at.c
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
{
int rank, nproc, i;
int errors = 0, all_errors = 0;
- int buf, *my_buf;
+ int buf = 0, *my_buf;
MPI_Win win;
MPI_Group world_group;
diff --git a/test/mpi/errors/rma/win_sync_free_pt.c b/test/mpi/errors/rma/win_sync_free_pt.c
index 80007ad..9d81b3d 100644
--- a/test/mpi/errors/rma/win_sync_free_pt.c
+++ b/test/mpi/errors/rma/win_sync_free_pt.c
@@ -13,7 +13,7 @@ int main(int argc, char *argv[])
{
int rank;
int errors = 0, all_errors = 0;
- int buf;
+ int buf = 0;
MPI_Win win;
MPI_Init(&argc, &argv);
diff --git a/test/mpi/errors/rma/win_sync_lock_at.c b/test/mpi/errors/rma/win_sync_lock_at.c
index 2740038..1e1511f 100644
--- a/test/mpi/errors/rma/win_sync_lock_at.c
+++ b/test/mpi/errors/rma/win_sync_lock_at.c
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
{
int rank, nproc, i;
int errors = 0, all_errors = 0;
- int buf, *my_buf;
+ int buf = 0, *my_buf;
MPI_Win win;
MPI_Group world_group;
diff --git a/test/mpi/errors/rma/win_sync_lock_fence.c b/test/mpi/errors/rma/win_sync_lock_fence.c
index 65ab791..ec7b63c 100644
--- a/test/mpi/errors/rma/win_sync_lock_fence.c
+++ b/test/mpi/errors/rma/win_sync_lock_fence.c
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
{
int rank, nproc;
int errors = 0, all_errors = 0;
- int buf, my_buf;
+ int buf = 0, my_buf;
MPI_Win win;
MPI_Init(&argc, &argv);
diff --git a/test/mpi/errors/rma/win_sync_lock_pt.c b/test/mpi/errors/rma/win_sync_lock_pt.c
index f982e88..6be8e8f 100644
--- a/test/mpi/errors/rma/win_sync_lock_pt.c
+++ b/test/mpi/errors/rma/win_sync_lock_pt.c
@@ -13,7 +13,7 @@ int main(int argc, char *argv[])
{
int rank;
int errors = 0, all_errors = 0;
- int buf;
+ int buf = 0;
MPI_Win win;
MPI_Init(&argc, &argv);
diff --git a/test/mpi/errors/rma/win_sync_nested.c b/test/mpi/errors/rma/win_sync_nested.c
index 48c2fff..3e3defd 100644
--- a/test/mpi/errors/rma/win_sync_nested.c
+++ b/test/mpi/errors/rma/win_sync_nested.c
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
{
int rank, nproc, i;
int errors = 0, all_errors = 0;
- int buf, *my_buf;
+ int buf = 0, *my_buf;
MPI_Win win;
MPI_Group world_group;
diff --git a/test/mpi/errors/rma/win_sync_op.c b/test/mpi/errors/rma/win_sync_op.c
index 69760f9..2048888 100644
--- a/test/mpi/errors/rma/win_sync_op.c
+++ b/test/mpi/errors/rma/win_sync_op.c
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
{
int rank, nproc;
int errors = 0, all_errors = 0;
- int buf, my_buf;
+ int buf = 0, my_buf;
MPI_Win win;
MPI_Init(&argc, &argv);
diff --git a/test/mpi/errors/rma/win_sync_unlock.c b/test/mpi/errors/rma/win_sync_unlock.c
index ec1ad30..ccef067 100644
--- a/test/mpi/errors/rma/win_sync_unlock.c
+++ b/test/mpi/errors/rma/win_sync_unlock.c
@@ -13,7 +13,7 @@ int main(int argc, char *argv[])
{
int rank;
int errors = 0, all_errors = 0;
- int buf;
+ int buf = 0;
MPI_Win win;
MPI_Init(&argc, &argv);
diff --git a/test/mpi/errors/rma/winerr.c b/test/mpi/errors/rma/winerr.c
index ed016e6..ad66486 100644
--- a/test/mpi/errors/rma/winerr.c
+++ b/test/mpi/errors/rma/winerr.c
@@ -41,6 +41,7 @@ int main(int argc, char *argv[])
MPI_Comm comm;
MPI_Errhandler newerr, olderr;
+ MTEST_VG_MEM_INIT(buf, 2 * sizeof(int));
MTest_Init(&argc, &argv);
comm = MPI_COMM_WORLD;
diff --git a/test/mpi/errors/rma/winerr2.c b/test/mpi/errors/rma/winerr2.c
index 6f0b585..e2f6700 100644
--- a/test/mpi/errors/rma/winerr2.c
+++ b/test/mpi/errors/rma/winerr2.c
@@ -64,6 +64,7 @@ int main(int argc, char *argv[])
MPI_Comm comm;
MPI_Errhandler newerr1, newerr2, olderr;
+ MTEST_VG_MEM_INIT(buf, 2 * sizeof(int));
MTest_Init(&argc, &argv);
comm = MPI_COMM_WORLD;
diff --git a/test/mpi/errors/spawn/Makefile.am b/test/mpi/errors/spawn/Makefile.am
index c2f956f..a9f1b42 100644
--- a/test/mpi/errors/spawn/Makefile.am
+++ b/test/mpi/errors/spawn/Makefile.am
@@ -12,5 +12,12 @@ EXTRA_DIST = testlist
## for all programs that are just built from the single corresponding source
## file, we don't need per-target _SOURCES rules, automake will infer them
## correctly
-noinst_PROGRAMS = badport unpub lookup_name
+noinst_PROGRAMS = badport unpub lookup_name \
+ connect_timeout_no_accept \
+ connect_timeout_mismatch
+connect_timeout_no_accept_SOURCES = connect_timeout.c
+connect_timeout_mismatch_SOURCES = connect_timeout.c
+
+connect_timeout_no_accept_CPPFLAGS = -DTEST_NOACCEPT $(AM_CPPFLAGS)
+connect_timeout_mismatch_CPPFLAGS = -DTEST_MISMATCH $(AM_CPPFLAGS)
\ No newline at end of file
diff --git a/test/mpi/errors/spawn/Makefile.in b/test/mpi/errors/spawn/Makefile.in
index 780156c..03a3a72 100644
--- a/test/mpi/errors/spawn/Makefile.in
+++ b/test/mpi/errors/spawn/Makefile.in
@@ -94,7 +94,9 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-noinst_PROGRAMS = badport$(EXEEXT) unpub$(EXEEXT) lookup_name$(EXEEXT)
+noinst_PROGRAMS = badport$(EXEEXT) unpub$(EXEEXT) lookup_name$(EXEEXT) \
+ connect_timeout_no_accept$(EXEEXT) \
+ connect_timeout_mismatch$(EXEEXT)
subdir = errors/spawn
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cache.m4 \
@@ -120,6 +122,22 @@ badport_LDADD = $(LDADD)
badport_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+am_connect_timeout_mismatch_OBJECTS = \
+ connect_timeout_mismatch-connect_timeout.$(OBJEXT)
+connect_timeout_mismatch_OBJECTS = \
+ $(am_connect_timeout_mismatch_OBJECTS)
+connect_timeout_mismatch_LDADD = $(LDADD)
+connect_timeout_mismatch_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
+am_connect_timeout_no_accept_OBJECTS = \
+ connect_timeout_no_accept-connect_timeout.$(OBJEXT)
+connect_timeout_no_accept_OBJECTS = \
+ $(am_connect_timeout_no_accept_OBJECTS)
+connect_timeout_no_accept_LDADD = $(LDADD)
+connect_timeout_no_accept_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
lookup_name_SOURCES = lookup_name.c
lookup_name_OBJECTS = lookup_name.$(OBJEXT)
lookup_name_LDADD = $(LDADD)
@@ -148,6 +166,10 @@ DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
depcomp = $(SHELL) $(top_srcdir)/confdb/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_ at AM_V@)
@@ -160,8 +182,10 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = badport.c lookup_name.c unpub.c
-DIST_SOURCES = badport.c lookup_name.c unpub.c
+SOURCES = badport.c $(connect_timeout_mismatch_SOURCES) \
+ $(connect_timeout_no_accept_SOURCES) lookup_name.c unpub.c
+DIST_SOURCES = badport.c $(connect_timeout_mismatch_SOURCES) \
+ $(connect_timeout_no_accept_SOURCES) lookup_name.c unpub.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -362,6 +386,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -380,8 +405,12 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
+connect_timeout_no_accept_SOURCES = connect_timeout.c
+connect_timeout_mismatch_SOURCES = connect_timeout.c
+connect_timeout_no_accept_CPPFLAGS = -DTEST_NOACCEPT $(AM_CPPFLAGS)
+connect_timeout_mismatch_CPPFLAGS = -DTEST_MISMATCH $(AM_CPPFLAGS)
all: all-am
.SUFFIXES:
@@ -426,6 +455,14 @@ badport$(EXEEXT): $(badport_OBJECTS) $(badport_DEPENDENCIES) $(EXTRA_badport_DEP
@rm -f badport$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(badport_OBJECTS) $(badport_LDADD) $(LIBS)
+connect_timeout_mismatch$(EXEEXT): $(connect_timeout_mismatch_OBJECTS) $(connect_timeout_mismatch_DEPENDENCIES) $(EXTRA_connect_timeout_mismatch_DEPENDENCIES)
+ @rm -f connect_timeout_mismatch$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(connect_timeout_mismatch_OBJECTS) $(connect_timeout_mismatch_LDADD) $(LIBS)
+
+connect_timeout_no_accept$(EXEEXT): $(connect_timeout_no_accept_OBJECTS) $(connect_timeout_no_accept_DEPENDENCIES) $(EXTRA_connect_timeout_no_accept_DEPENDENCIES)
+ @rm -f connect_timeout_no_accept$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(connect_timeout_no_accept_OBJECTS) $(connect_timeout_no_accept_LDADD) $(LIBS)
+
lookup_name$(EXEEXT): $(lookup_name_OBJECTS) $(lookup_name_DEPENDENCIES) $(EXTRA_lookup_name_DEPENDENCIES)
@rm -f lookup_name$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lookup_name_OBJECTS) $(lookup_name_LDADD) $(LIBS)
@@ -441,6 +478,8 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/badport.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connect_timeout_mismatch-connect_timeout.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connect_timeout_no_accept-connect_timeout.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lookup_name.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/unpub.Po at am__quote@
@@ -460,6 +499,34 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+connect_timeout_mismatch-connect_timeout.o: connect_timeout.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_mismatch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT connect_timeout_mismatch-connect_timeout.o -MD -MP -MF $(DEPDIR)/connect_timeout_mismatch-connect_timeout.Tpo -c -o connect_timeout_mismatch-connect_timeout.o `test -f 'connect_timeout.c' || echo '$(srcdir)/'`connect_timeout.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/connect_timeout_mismatch-connect_timeout.Tpo $(DEPDIR)/connect_timeout_mismatch-connect_timeout.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connect_timeout.c' object='connect_timeout_mismatch-connect_timeout.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_mismatch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o connect_timeout_mismatch-connect_timeout.o `test -f 'connect_timeout.c' || echo '$(srcdir)/'`connect_timeout.c
+
+connect_timeout_mismatch-connect_timeout.obj: connect_timeout.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_mismatch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT connect_timeout_mismatch-connect_timeout.obj -MD -MP -MF $(DEPDIR)/connect_timeout_mismatch-connect_timeout.Tpo -c -o connect_timeout_mismatch-connect_timeout.obj `if test -f 'connect_timeout.c'; then $(CYGPATH_W) 'connect_timeout.c'; else $(CYGPATH_W) '$(srcdir)/connect_timeout.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/connect_timeout_mismatch-connect_timeout.Tpo $(DEPDIR)/connect_timeout_mismatch-connect_timeout.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connect_timeout.c' object='connect_timeout_mismatch-connect_timeout.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_mismatch_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o connect_timeout_mismatch-connect_timeout.obj `if test -f 'connect_timeout.c'; then $(CYGPATH_W) 'connect_timeout.c'; else $(CYGPATH_W) '$(srcdir)/connect_timeout.c'; fi`
+
+connect_timeout_no_accept-connect_timeout.o: connect_timeout.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_no_accept_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT connect_timeout_no_accept-connect_timeout.o -MD -MP -MF $(DEPDIR)/connect_timeout_no_accept-connect_timeout.Tpo -c -o connect_timeout_no_accept-connect_timeout.o `test -f 'connect_timeout.c' || echo '$(srcdir)/'`connect_timeout.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/connect_timeout_no_accept-connect_timeout.Tpo $(DEPDIR)/connect_timeout_no_accept-connect_timeout.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connect_timeout.c' object='connect_timeout_no_accept-connect_timeout.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_no_accept_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o connect_timeout_no_accept-connect_timeout.o `test -f 'connect_timeout.c' || echo '$(srcdir)/'`connect_timeout.c
+
+connect_timeout_no_accept-connect_timeout.obj: connect_timeout.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_no_accept_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT connect_timeout_no_accept-connect_timeout.obj -MD -MP -MF $(DEPDIR)/connect_timeout_no_accept-connect_timeout.Tpo -c -o connect_timeout_no_accept-connect_timeout.obj `if test -f 'connect_timeout.c'; then $(CYGPATH_W) 'connect_timeout.c'; else $(CYGPATH_W) '$(srcdir)/connect_timeout.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/connect_timeout_no_accept-connect_timeout.Tpo $(DEPDIR)/connect_timeout_no_accept-connect_timeout.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='connect_timeout.c' object='connect_timeout_no_accept-connect_timeout.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(connect_timeout_no_accept_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o connect_timeout_no_accept-connect_timeout.obj `if test -f 'connect_timeout.c'; then $(CYGPATH_W) 'connect_timeout.c'; else $(CYGPATH_W) '$(srcdir)/connect_timeout.c'; fi`
+
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
@@ -673,10 +740,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/errors/spawn/connect_timeout.c b/test/mpi/errors/spawn/connect_timeout.c
new file mode 100644
index 0000000..2bef859
--- /dev/null
+++ b/test/mpi/errors/spawn/connect_timeout.c
@@ -0,0 +1,225 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mpitest.h"
+
+#define IF_VERBOSE(cond, a) if (verbose && (cond)) { printf a ; fflush(stdout); }
+#define SERVER_GID 0
+#define CLIENT_GID 1
+#define TIMEOUT "5"
+
+/* This test checks whether a MPI_COMM_CONNECT can eventually time out and return
+ * an error of class MPI_ERR_PORT when the named port exists but no pending
+ * MPI_COMM_ACCEPT on server side. We divide all processes into a server group
+ * and a client group, the client group issues connect to the server group.
+ *
+ * Two test cases are performed in separately:
+ * (1) No_accept: Server only calls open/close_port while client tries to connect.
+ * Each connect call should return MPI_ERR_PORT.
+ * (2) Mismatched: Server only issues one accept while client tries twice connect.
+ * At least one of the connect call should return MPI_ERR_PORT. */
+
+int rank, nproc;
+int verbose = 0;
+
+int test_mismatched_accept(MPI_Comm intra_comm, int gid);
+int test_no_accept(MPI_Comm intra_comm, int gid);
+
+#if defined(TEST_MISMATCH)
+#define RUN_TEST(comm, gid) test_mismatched_accept(comm, gid)
+#else /* no accept by default */
+#define RUN_TEST(comm, gid) test_no_accept(comm, gid)
+#endif
+
+/* Check whether error clase is equal to the expected one. */
+static inline int check_errno(int mpi_errno, int expected_errno)
+{
+ int errclass = MPI_SUCCESS;
+ int err = 0;
+
+ MPI_Error_class(mpi_errno, &errclass);
+ if (errclass != expected_errno) {
+ char errstring[MPI_MAX_ERROR_STRING];
+ char exp_errstring[MPI_MAX_ERROR_STRING];
+ int errstrlen = 0;
+
+ err++;
+ MPI_Error_string(mpi_errno, errstring, &errstrlen);
+ MPI_Error_string(expected_errno, exp_errstring, &errstrlen);
+ fprintf(stderr, "Error: returned wrong error class %s, expected %s\n",
+ errstring, exp_errstring);
+ }
+
+ return err;
+}
+
+/* The first process in server group opens port and broadcast to all other
+ * processes in the world. */
+static inline void open_and_bcast_port(int intra_rank, int gid, char (*port)[])
+{
+ int server_rank = 0, local_server_rank = 0;
+
+ /* server root opens port */
+ if (intra_rank == 0 && gid == SERVER_GID) {
+ local_server_rank = rank;
+
+ MPI_Open_port(MPI_INFO_NULL, (*port));
+ IF_VERBOSE(1, ("server root: opened port1: <%s>\n", (*port)));
+ }
+
+ /* broadcast world rank of server root, then broadcast port */
+ MPI_Allreduce(&local_server_rank, &server_rank, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+ MPI_Bcast((*port), MPI_MAX_PORT_NAME, MPI_CHAR, server_rank, MPI_COMM_WORLD);
+}
+
+int test_mismatched_accept(MPI_Comm intra_comm, int gid)
+{
+ char port[MPI_MAX_PORT_NAME];
+ MPI_Comm comm = MPI_COMM_NULL;
+ int mpi_errno = MPI_SUCCESS;
+ int errs = 0;
+ int intra_rank, intra_nproc;
+ int server_rank = 0, local_server_rank = 0;
+
+ MTEST_VG_MEM_INIT(port, MPI_MAX_PORT_NAME * sizeof(char));
+
+ MPI_Comm_rank(intra_comm, &intra_rank);
+ MPI_Comm_size(intra_comm, &intra_nproc);
+ IF_VERBOSE(intra_rank == 0, ("%s: TEST mismatched accept case, %d nprocs in group\n",
+ (gid == SERVER_GID) ? "server" : "client", intra_nproc));
+
+ open_and_bcast_port(intra_rank, gid, &port);
+
+ /* client group */
+ if (gid == CLIENT_GID) {
+ int mpi_errno1 = MPI_SUCCESS, mpi_errno2 = MPI_SUCCESS;
+
+ IF_VERBOSE(intra_rank == 0, ("client: connecting to <%s> with default timeout.\n", port));
+ mpi_errno1 = MPI_Comm_connect(port, MPI_INFO_NULL, 0, intra_comm, &comm);
+ if (mpi_errno1 != MPI_SUCCESS) {
+ errs += check_errno(mpi_errno1, MPI_ERR_PORT);
+ }
+
+ /* At least one of the connect calls should return MPI_ERR_PORT */
+ IF_VERBOSE(intra_rank == 0, ("client: connecting to <%s> again.\n", port));
+ mpi_errno2 = MPI_Comm_connect(port, MPI_INFO_NULL, 0, intra_comm, &comm);
+ if (mpi_errno1 == MPI_SUCCESS) {
+ errs += check_errno(mpi_errno2, MPI_ERR_PORT);
+ }
+ else {
+ errs += check_errno(mpi_errno2, MPI_SUCCESS);
+ }
+ }
+ else if (gid == SERVER_GID) {
+ /* NOTE: if accept hangs, try increase MPIR_CVAR_CH3_COMM_CONN_TIMEOUT. */
+ IF_VERBOSE(intra_rank == 0, ("server: accepting connection to <%s>.\n", port));
+ MPI_Comm_accept(port, MPI_INFO_NULL, 0, intra_comm, &comm);
+ }
+
+ if (comm != MPI_COMM_NULL) {
+ IF_VERBOSE(intra_rank == 0, ("connection matched, freeing communicator.\n"));
+ MPI_Comm_free(&comm);
+ }
+
+ if (intra_rank == 0 && gid == SERVER_GID) {
+ IF_VERBOSE(1, ("server root: closing port.\n"));
+ MPI_Close_port(port);
+ }
+
+ return errs;
+}
+
+int test_no_accept(MPI_Comm intra_comm, int gid)
+{
+ char port[MPI_MAX_PORT_NAME], timeout = 0;
+ MPI_Info info = MPI_INFO_NULL;
+ MPI_Comm comm = MPI_COMM_NULL;
+ int mpi_errno = MPI_SUCCESS;
+ int errs = 0;
+ int intra_rank, intra_nproc;
+ int server_rank = 0, local_server_rank = 0;
+
+ MTEST_VG_MEM_INIT(port, MPI_MAX_PORT_NAME * sizeof(char));
+
+ MPI_Comm_rank(intra_comm, &intra_rank);
+ MPI_Comm_size(intra_comm, &intra_nproc);
+ IF_VERBOSE(intra_rank == 0, ("%s: TEST no accept case, %d nprocs in group\n",
+ (gid == SERVER_GID) ? "server" : "client", intra_nproc));
+
+ open_and_bcast_port(intra_rank, gid, &port);
+
+ /* client group */
+ if (gid == CLIENT_GID) {
+ IF_VERBOSE(intra_rank == 0,
+ ("client: case 1 - connecting to <%s> with default timeout.\n", port));
+ mpi_errno = MPI_Comm_connect(port, MPI_INFO_NULL, 0, intra_comm, &comm);
+ errs += check_errno(mpi_errno, MPI_ERR_PORT);
+
+ MPI_Info_create(&info);
+ MPI_Info_set(info, "timeout", TIMEOUT);
+
+ IF_VERBOSE(intra_rank == 0,
+ ("client: case 2 - connecting to <%s> with specified timeout <%s>s.\n", port,
+ TIMEOUT));
+ mpi_errno = MPI_Comm_connect(port, info, 0, intra_comm, &comm);
+ errs += check_errno(mpi_errno, MPI_ERR_PORT);
+
+ MPI_Info_free(&info);
+ }
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* server closes port after client finished connection */
+ if (intra_rank == 0 && gid == SERVER_GID) {
+ IF_VERBOSE(1, ("server root: closing port.\n"));
+ MPI_Close_port(port);
+ }
+
+ return errs;
+}
+
+
+int main(int argc, char *argv[])
+{
+ MPI_Comm intra_comm = MPI_COMM_NULL;
+ int sub_rank, sub_nproc;
+ int errs = 0, allerrs = 0;
+
+ if (getenv("MPITEST_VERBOSE")) {
+ verbose = 1;
+ }
+
+ MPI_Init(&argc, &argv);
+ MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+ if (nproc < 2) {
+ printf("At least two processes needed to run this test.\n");
+ goto exit;
+ }
+
+ /* Separate all processes into a server group and a client group.
+ * Processes in client group connect to server group. */
+ MPI_Comm_split(MPI_COMM_WORLD, rank % 2, rank, &intra_comm);
+ MPI_Errhandler_set(intra_comm, MPI_ERRORS_RETURN);
+
+ errs = RUN_TEST(intra_comm, rank % 2);
+
+ MPI_Comm_free(&intra_comm);
+ MPI_Reduce(&errs, &allerrs, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+ if (rank == 0 && allerrs == 0) {
+ printf(" No Errors\n");
+ fflush(stdout);
+ }
+
+ exit:
+ MPI_Finalize();
+ return 0;
+}
diff --git a/test/mpi/errors/spawn/testlist.in b/test/mpi/errors/spawn/testlist.in
index e8ba5e3..f685b06 100644
--- a/test/mpi/errors/spawn/testlist.in
+++ b/test/mpi/errors/spawn/testlist.in
@@ -1,3 +1,7 @@
badport 2
@namepub_tests at unpub 1
@namepub_tests at lookup_name 1
+connect_timeout_no_accept 2 env=MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT=20
+connect_timeout_mismatch 2 env=MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT=20
+connect_timeout_no_accept 5 env=MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT=20
+connect_timeout_mismatch 5 env=MPIR_CVAR_CH3_COMM_CONNECT_TIMEOUT=20
diff --git a/test/mpi/errors/topo/Makefile.in b/test/mpi/errors/topo/Makefile.in
index d32e280..5ab156e 100644
--- a/test/mpi/errors/topo/Makefile.in
+++ b/test/mpi/errors/topo/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -368,7 +369,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -649,10 +650,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/f08/Makefile.am b/test/mpi/f08/Makefile.am
index 40e7366..36605fd 100644
--- a/test/mpi/f08/Makefile.am
+++ b/test/mpi/f08/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/Makefile.in b/test/mpi/f08/Makefile.in
index 69286d2..8d37732 100644
--- a/test/mpi/f08/Makefile.in
+++ b/test/mpi/f08/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
am__is_gnu_make = { \
@@ -373,6 +373,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/attr/Makefile.am b/test/mpi/f08/attr/Makefile.am
index 8b59fd5..c54e112 100644
--- a/test/mpi/f08/attr/Makefile.am
+++ b/test/mpi/f08/attr/Makefile.am
@@ -3,7 +3,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/attr/Makefile.in b/test/mpi/f08/attr/Makefile.in
index 6058cf2..18eff70 100644
--- a/test/mpi/f08/attr/Makefile.in
+++ b/test/mpi/f08/attr/Makefile.in
@@ -19,14 +19,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -424,6 +424,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/coll/Makefile.am b/test/mpi/f08/coll/Makefile.am
index 1b7d0b1..e175ffe 100644
--- a/test/mpi/f08/coll/Makefile.am
+++ b/test/mpi/f08/coll/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/coll/Makefile.in b/test/mpi/f08/coll/Makefile.in
index e29bf42..60cf73d 100644
--- a/test/mpi/f08/coll/Makefile.in
+++ b/test/mpi/f08/coll/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -418,6 +418,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/comm/Makefile.am b/test/mpi/f08/comm/Makefile.am
index 268c13f..cd9dc2b 100644
--- a/test/mpi/f08/comm/Makefile.am
+++ b/test/mpi/f08/comm/Makefile.am
@@ -3,7 +3,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/comm/Makefile.in b/test/mpi/f08/comm/Makefile.in
index 3e4da9d..5ea321c 100644
--- a/test/mpi/f08/comm/Makefile.in
+++ b/test/mpi/f08/comm/Makefile.in
@@ -19,14 +19,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -358,6 +358,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/datatype/Makefile.am b/test/mpi/f08/datatype/Makefile.am
index 8ab9147..a802e0e 100644
--- a/test/mpi/f08/datatype/Makefile.am
+++ b/test/mpi/f08/datatype/Makefile.am
@@ -3,7 +3,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/datatype/Makefile.in b/test/mpi/f08/datatype/Makefile.in
index d6586b9..9a709dd 100644
--- a/test/mpi/f08/datatype/Makefile.in
+++ b/test/mpi/f08/datatype/Makefile.in
@@ -19,14 +19,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -442,6 +442,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/ext/Makefile.in b/test/mpi/f08/ext/Makefile.in
index 6b82227..9d3a948 100644
--- a/test/mpi/f08/ext/Makefile.in
+++ b/test/mpi/f08/ext/Makefile.in
@@ -24,7 +24,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -382,6 +382,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/ext/c2f2cf90.f90 b/test/mpi/f08/ext/c2f2cf90.f90
index 3e8ef13..9820942 100644
--- a/test/mpi/f08/ext/c2f2cf90.f90
+++ b/test/mpi/f08/ext/c2f2cf90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2011 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/ext/ctypesinf90.f90 b/test/mpi/f08/ext/ctypesinf90.f90
index 131761f..39a7de1 100644
--- a/test/mpi/f08/ext/ctypesinf90.f90
+++ b/test/mpi/f08/ext/ctypesinf90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2008 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/info/Makefile.in b/test/mpi/f08/info/Makefile.in
index d190596..ccde4f4 100644
--- a/test/mpi/f08/info/Makefile.in
+++ b/test/mpi/f08/info/Makefile.in
@@ -24,7 +24,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -356,6 +356,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/info/infotest2f90.f90 b/test/mpi/f08/info/infotest2f90.f90
index d0acc27..b7616a4 100644
--- a/test/mpi/f08/info/infotest2f90.f90
+++ b/test/mpi/f08/info/infotest2f90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2008 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/init/Makefile.am b/test/mpi/f08/init/Makefile.am
index 00e2964..7f6438b 100644
--- a/test/mpi/f08/init/Makefile.am
+++ b/test/mpi/f08/init/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/init/Makefile.in b/test/mpi/f08/init/Makefile.in
index cb9e8b7..fd8c29c 100644
--- a/test/mpi/f08/init/Makefile.in
+++ b/test/mpi/f08/init/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -371,6 +371,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/init/baseenvf90.f90 b/test/mpi/f08/init/baseenvf90.f90
index d1f9a48..099bf02 100644
--- a/test/mpi/f08/init/baseenvf90.f90
+++ b/test/mpi/f08/init/baseenvf90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2010 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/io/Makefile.am b/test/mpi/f08/io/Makefile.am
index a81572d..6a083dd 100644
--- a/test/mpi/f08/io/Makefile.am
+++ b/test/mpi/f08/io/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/io/Makefile.in b/test/mpi/f08/io/Makefile.in
index 85b603e..245cf6b 100644
--- a/test/mpi/f08/io/Makefile.in
+++ b/test/mpi/f08/io/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -478,6 +478,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/io/c2f2ciof90.f90 b/test/mpi/f08/io/c2f2ciof90.f90
index 1352ed5..dfe5349 100644
--- a/test/mpi/f08/io/c2f2ciof90.f90
+++ b/test/mpi/f08/io/c2f2ciof90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2011 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
! Test just the MPI-IO FILE object
diff --git a/test/mpi/f08/io/miscfilef90.f90 b/test/mpi/f08/io/miscfilef90.f90
index 1857ccc..a33702d 100644
--- a/test/mpi/f08/io/miscfilef90.f90
+++ b/test/mpi/f08/io/miscfilef90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2008 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/io/shpositionf90.f90 b/test/mpi/f08/io/shpositionf90.f90
index a2955b6..15e5765 100644
--- a/test/mpi/f08/io/shpositionf90.f90
+++ b/test/mpi/f08/io/shpositionf90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2013 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/misc/Makefile.am b/test/mpi/f08/misc/Makefile.am
index 414796e..85b27b8 100644
--- a/test/mpi/f08/misc/Makefile.am
+++ b/test/mpi/f08/misc/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/misc/Makefile.in b/test/mpi/f08/misc/Makefile.in
index f563d18..bfb3583 100644
--- a/test/mpi/f08/misc/Makefile.in
+++ b/test/mpi/f08/misc/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -360,6 +360,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/misc/hello.f90 b/test/mpi/f08/misc/hello.f90
index 34103c1..e699c1d 100644
--- a/test/mpi/f08/misc/hello.f90
+++ b/test/mpi/f08/misc/hello.f90
@@ -8,6 +8,9 @@
! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All rights reserved.
+! (C) 2014 by Argonne National Laboratory.
+! See COPYRIGHT in top-level directory.
+!
! $COPYRIGHT$
!
! Sample MPI "hello world" application using the MPI-3 mpi_f08 module.
diff --git a/test/mpi/f08/misc/ring.f90 b/test/mpi/f08/misc/ring.f90
index 186050d..82b4a5d 100644
--- a/test/mpi/f08/misc/ring.f90
+++ b/test/mpi/f08/misc/ring.f90
@@ -6,6 +6,9 @@
! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All rights reserved.
+! (C) 2014 by Argonne National Laboratory.
+! See COPYRIGHT in top-level directory.
+!
! $COPYRIGHT$
!
! Simple ring test program using the MPI-3 mpi_f08 module.
diff --git a/test/mpi/f08/misc/sizeof2.f90 b/test/mpi/f08/misc/sizeof2.f90
index 7a1a938..5cc628f 100644
--- a/test/mpi/f08/misc/sizeof2.f90
+++ b/test/mpi/f08/misc/sizeof2.f90
@@ -1,5 +1,5 @@
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2009 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/profile/Makefile.in b/test/mpi/f08/profile/Makefile.in
index bc115ba..484860d 100644
--- a/test/mpi/f08/profile/Makefile.in
+++ b/test/mpi/f08/profile/Makefile.in
@@ -24,7 +24,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -352,6 +352,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/profile/profile1f90.f90 b/test/mpi/f08/profile/profile1f90.f90
index 175a100..096da2b 100644
--- a/test/mpi/f08/profile/profile1f90.f90
+++ b/test/mpi/f08/profile/profile1f90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2013 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/pt2pt/Makefile.am b/test/mpi/f08/pt2pt/Makefile.am
index eb0e5dc..81a5adc 100644
--- a/test/mpi/f08/pt2pt/Makefile.am
+++ b/test/mpi/f08/pt2pt/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/pt2pt/Makefile.in b/test/mpi/f08/pt2pt/Makefile.in
index da80bca..33495a1 100644
--- a/test/mpi/f08/pt2pt/Makefile.in
+++ b/test/mpi/f08/pt2pt/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -367,6 +367,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/pt2pt/dummyf08.f90 b/test/mpi/f08/pt2pt/dummyf08.f90
index 0495742..41b9e91 100644
--- a/test/mpi/f08/pt2pt/dummyf08.f90
+++ b/test/mpi/f08/pt2pt/dummyf08.f90
@@ -1,7 +1,7 @@
! This file created from test/mpi/f77/pt2pt/dummyf.f with f77tof90
! -*- Mode: Fortran; -*-
!
-! (C) 2011 by Argonne National Laboratory.
+! (C) 2014 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
!
diff --git a/test/mpi/f08/rma/Makefile.am b/test/mpi/f08/rma/Makefile.am
index 7b3e440..d29d52a 100644
--- a/test/mpi/f08/rma/Makefile.am
+++ b/test/mpi/f08/rma/Makefile.am
@@ -3,7 +3,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/rma/Makefile.in b/test/mpi/f08/rma/Makefile.in
index f1d0c9e..2e5badd 100644
--- a/test/mpi/f08/rma/Makefile.in
+++ b/test/mpi/f08/rma/Makefile.in
@@ -19,14 +19,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2011 by Argonne National Laboratory.
+# (C) 2014 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -430,6 +430,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/spawn/Makefile.in b/test/mpi/f08/spawn/Makefile.in
index d8ae470..492b5cd 100644
--- a/test/mpi/f08/spawn/Makefile.in
+++ b/test/mpi/f08/spawn/Makefile.in
@@ -24,7 +24,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -386,6 +386,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/spawn/spawnargvf03.f90 b/test/mpi/f08/spawn/spawnargvf03.f90
index 91693f4..3b2ab80 100644
--- a/test/mpi/f08/spawn/spawnargvf03.f90
+++ b/test/mpi/f08/spawn/spawnargvf03.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2012 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
! This test makes use of routines to access the command line added in
diff --git a/test/mpi/f08/spawn/spawnargvf90.f90 b/test/mpi/f08/spawn/spawnargvf90.f90
index c673d48..1d5f41f 100644
--- a/test/mpi/f08/spawn/spawnargvf90.f90
+++ b/test/mpi/f08/spawn/spawnargvf90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2012 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
! This is a special test that requires an getarg/iargc routine
diff --git a/test/mpi/f08/subarray/Makefile.in b/test/mpi/f08/subarray/Makefile.in
index 180e1bd..9f071b9 100644
--- a/test/mpi/f08/subarray/Makefile.in
+++ b/test/mpi/f08/subarray/Makefile.in
@@ -24,7 +24,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -416,6 +416,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/subarray/test10.f90 b/test/mpi/f08/subarray/test10.f90
index 1b28f25..e5df1d0 100644
--- a/test/mpi/f08/subarray/test10.f90
+++ b/test/mpi/f08/subarray/test10.f90
@@ -14,7 +14,8 @@ program main
character*8 :: name='test10'
character*80 :: title='test 10: Isend/Irecv - send integer'
- integer :: sint, i
+ integer :: i
+ integer, ASYNCHRONOUS :: sint
integer, dimension(10) :: iar
type(MPI_Request) request
type(MPI_Status) status
@@ -34,7 +35,6 @@ program main
endif
block
- ASYNCHRONOUS :: sint
call mpi_isend(sint, 1, MPI_INTEGER, 1, 567, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
@@ -50,7 +50,6 @@ program main
end block
else
block
- ASYNCHRONOUS :: sint
call mpi_irecv(sint, 1, MPI_INTEGER, 0, 567, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
diff --git a/test/mpi/f08/subarray/test11.f90 b/test/mpi/f08/subarray/test11.f90
index a33fdc4..f484aa2 100644
--- a/test/mpi/f08/subarray/test11.f90
+++ b/test/mpi/f08/subarray/test11.f90
@@ -15,7 +15,7 @@ program main
character (len=80) :: title='test 11: Isend/Irecv - 1d array - iar(10)'
integer :: sint, i
- integer, dimension(10) :: iar
+ integer, ASYNCHRONOUS, dimension(10) :: iar
type(MPI_Request) request
type(MPI_Status) status
@@ -33,7 +33,6 @@ program main
end do
block
- ASYNCHRONOUS :: iar
call mpi_isend(iar, 10, MPI_INTEGER, 1, 567, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
@@ -52,7 +51,6 @@ program main
else if (rank .eq. 1) then
block
- ASYNCHRONOUS :: iar
call mpi_irecv(iar, 10, MPI_INTEGER, 0, 567, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
diff --git a/test/mpi/f08/subarray/test12.f90 b/test/mpi/f08/subarray/test12.f90
index 9ad3341..ee576bf 100644
--- a/test/mpi/f08/subarray/test12.f90
+++ b/test/mpi/f08/subarray/test12.f90
@@ -15,7 +15,8 @@ program main
character (len=80) :: title='test 12: Isend/Irecv array slice - iar(2:7)'
integer :: sint, i
- integer, dimension(10) :: iar, iar_check
+ integer, dimension(10) :: iar_check
+ integer, ASYNCHRONOUS, dimension(10) :: iar
type(MPI_Request) request
type(MPI_Status) status
@@ -33,7 +34,6 @@ program main
end do
block
- ASYNCHRONOUS :: iar
call mpi_isend(iar(2:7), 6, MPI_INTEGER, 1, 678, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
@@ -59,7 +59,6 @@ program main
end do
block
- ASYNCHRONOUS :: iar
call mpi_irecv(iar(2:7), 6, MPI_INTEGER, 0, 678, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
diff --git a/test/mpi/f08/subarray/test14.f90 b/test/mpi/f08/subarray/test14.f90
index d11bb10..2c6311b 100644
--- a/test/mpi/f08/subarray/test14.f90
+++ b/test/mpi/f08/subarray/test14.f90
@@ -15,7 +15,8 @@ program main
character (len=80) :: title='test 14: Isend/Irecv 2d array column slice - iar_2d(:,2:6:2)'
integer :: i, j
- integer, dimension(9,9) :: iar_2d, iar_2dch
+ integer, dimension(9,9) :: iar_2dch
+ integer, ASYNCHRONOUS, dimension(9,9) :: iar_2d
type(MPI_Status) status
type(MPI_Request) request
@@ -57,7 +58,6 @@ program main
if (rank .eq. 0) then
block
- ASYNCHRONOUS :: iar_2d
call mpi_isend(iar_2d(:,2:6:2), 27, MPI_INTEGER, 1, 123, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
@@ -76,7 +76,6 @@ program main
else if (rank .eq. 1) then
block
- ASYNCHRONOUS :: iar_2d
call mpi_irecv(iar_2d(:,2:6:2), 27, MPI_INTEGER, 0, 123, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
diff --git a/test/mpi/f08/subarray/test15.f90 b/test/mpi/f08/subarray/test15.f90
index 2e183bb..7c3d3ee 100644
--- a/test/mpi/f08/subarray/test15.f90
+++ b/test/mpi/f08/subarray/test15.f90
@@ -15,7 +15,8 @@ program main
character (len=80) :: title='test 15: Isend/Irecv 2d array column slice - iar_2d(1:7:3,2:6:2)'
integer :: i, j
- integer, dimension(9,9) :: iar_2d, iar_2dch
+ integer, dimension(9,9) :: iar_2dch
+ integer, ASYNCHRONOUS, dimension(9,9) :: iar_2d
type(MPI_Status) status
type(MPI_Request) request
@@ -56,7 +57,6 @@ program main
if (rank .eq. 0) then
block
- ASYNCHRONOUS :: iar_2d
call mpi_isend(iar_2d(1:7:3,2:6:2), 9, MPI_INTEGER, 1, 123, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
if (verbose) print *,"PE ",rank,": ",name,": mpi_isend exited in error (",ierr,")"
@@ -72,7 +72,6 @@ program main
end block
else if (rank .eq. 1) then
block
- ASYNCHRONOUS :: iar_2d
call mpi_irecv(iar_2d(1:7:3,2:6:2), 9, MPI_INTEGER, 0, 123, MPI_COMM_WORLD, request, ierr);
if (ierr .ne. MPI_SUCCESS) then
diff --git a/test/mpi/f08/timer/Makefile.am b/test/mpi/f08/timer/Makefile.am
index 9ec61ab..c5744d3 100644
--- a/test/mpi/f08/timer/Makefile.am
+++ b/test/mpi/f08/timer/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
diff --git a/test/mpi/f08/timer/Makefile.in b/test/mpi/f08/timer/Makefile.in
index 1da1c3d..fae9164 100644
--- a/test/mpi/f08/timer/Makefile.in
+++ b/test/mpi/f08/timer/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -352,6 +352,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f08/timer/wtimef90.f90 b/test/mpi/f08/timer/wtimef90.f90
index a372078..4b0adaa 100644
--- a/test/mpi/f08/timer/wtimef90.f90
+++ b/test/mpi/f08/timer/wtimef90.f90
@@ -1,5 +1,5 @@
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2008 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
diff --git a/test/mpi/f08/topo/Makefile.am b/test/mpi/f08/topo/Makefile.am
index 78dce0a..624b76f 100644
--- a/test/mpi/f08/topo/Makefile.am
+++ b/test/mpi/f08/topo/Makefile.am
@@ -1,7 +1,7 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -11,4 +11,4 @@ EXTRA_DIST = testlist
AM_DEFAULT_SOURCE_EXT = .f90
-noinst_PROGRAMS = cartcrf90 dgraph_wgtf90 dgraph_unwgtf90
+noinst_PROGRAMS = cartcrf90 dgraph_wgtf90 dgraph_unwgtf90 cart_subf90
diff --git a/test/mpi/f08/topo/Makefile.in b/test/mpi/f08/topo/Makefile.in
index 3218b75..2ebc852 100644
--- a/test/mpi/f08/topo/Makefile.in
+++ b/test/mpi/f08/topo/Makefile.in
@@ -17,14 +17,14 @@
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
# -*- Mode: Makefile; -*-
# vim: set ft=automake :
#
-# (C) 2014 by Argonne National Laboratory.
+# (C) 2011 by Argonne National Laboratory.
# See COPYRIGHT in top-level directory.
#
@@ -102,7 +102,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = cartcrf90$(EXEEXT) dgraph_wgtf90$(EXEEXT) \
- dgraph_unwgtf90$(EXEEXT)
+ dgraph_unwgtf90$(EXEEXT) cart_subf90$(EXEEXT)
subdir = f08/topo
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cache.m4 \
@@ -122,6 +122,10 @@ CONFIG_HEADER = $(top_builddir)/include/mpitestconf.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
+cart_subf90_SOURCES = cart_subf90.f90
+cart_subf90_OBJECTS = cart_subf90.$(OBJEXT)
+cart_subf90_LDADD = $(LDADD)
+cart_subf90_DEPENDENCIES = $(top_builddir)/f08/util/mtestf08.o
cartcrf90_SOURCES = cartcrf90.f90
cartcrf90_OBJECTS = cartcrf90.$(OBJEXT)
cartcrf90_LDADD = $(LDADD)
@@ -159,8 +163,10 @@ AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
am__v_FCLD_0 = @echo " FCLD " $@;
am__v_FCLD_1 =
-SOURCES = cartcrf90.f90 dgraph_unwgtf90.f90 dgraph_wgtf90.f90
-DIST_SOURCES = cartcrf90.f90 dgraph_unwgtf90.f90 dgraph_wgtf90.f90
+SOURCES = cart_subf90.f90 cartcrf90.f90 dgraph_unwgtf90.f90 \
+ dgraph_wgtf90.f90
+DIST_SOURCES = cart_subf90.f90 cartcrf90.f90 dgraph_unwgtf90.f90 \
+ dgraph_wgtf90.f90
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -361,6 +367,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -423,6 +430,10 @@ $(am__aclocal_m4_deps):
clean-noinstPROGRAMS:
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+cart_subf90$(EXEEXT): $(cart_subf90_OBJECTS) $(cart_subf90_DEPENDENCIES) $(EXTRA_cart_subf90_DEPENDENCIES)
+ @rm -f cart_subf90$(EXEEXT)
+ $(AM_V_FCLD)$(FCLINK) $(cart_subf90_OBJECTS) $(cart_subf90_LDADD) $(LIBS)
+
cartcrf90$(EXEEXT): $(cartcrf90_OBJECTS) $(cartcrf90_DEPENDENCIES) $(EXTRA_cartcrf90_DEPENDENCIES)
@rm -f cartcrf90$(EXEEXT)
$(AM_V_FCLD)$(FCLINK) $(cartcrf90_OBJECTS) $(cartcrf90_LDADD) $(LIBS)
diff --git a/test/mpi/f08/topo/cart_subf90.f90 b/test/mpi/f08/topo/cart_subf90.f90
new file mode 100644
index 0000000..3bd4344
--- /dev/null
+++ b/test/mpi/f08/topo/cart_subf90.f90
@@ -0,0 +1,42 @@
+! -*- Mode: Fortran; -*-
+!
+! (C) 2016 by Argonne National Laboratory.
+! See COPYRIGHT in top-level directory.
+!
+! Portions of this code were written by Intel Corporation.
+! Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+! to Argonne National Laboratory subject to Software Grant and Corporate
+! Contributor License Agreement dated February 8, 2012.
+
+program main
+use mpi_f08
+implicit none
+integer rank, size
+
+type(MPI_Comm) :: comm_cart, comm_new
+integer dims(2), coords(2)
+logical periods(2), reorder, remain_dims(2)
+integer errs
+
+dims(1:2) = 0
+periods(1) = .TRUE.
+periods(2) = .FALSE.
+reorder = .TRUE.
+remain_dims(1) = .TRUE.
+remain_dims(2) = .FALSE.
+errs = 0
+
+call MTEST_Init()
+call MPI_Comm_rank(MPI_COMM_WORLD, rank)
+call MPI_Comm_size(MPI_COMM_WORLD, size)
+call MPI_Dims_create(size, 2, dims)
+call MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder, comm_cart)
+call MPI_Comm_rank(comm_cart, rank)
+call MPI_Cart_coords(comm_cart, rank, 2, coords)
+
+call MPI_Cart_sub(comm_cart, remain_dims, comm_new)
+call MPI_Comm_size(comm_new, size)
+
+call MTEST_Finalize(errs)
+
+end program
diff --git a/test/mpi/f08/topo/dgraph_unwgtf90.f90 b/test/mpi/f08/topo/dgraph_unwgtf90.f90
index 3298873..c858109 100644
--- a/test/mpi/f08/topo/dgraph_unwgtf90.f90
+++ b/test/mpi/f08/topo/dgraph_unwgtf90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2011 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
! This program is Fortran version of dgraph_unwgt.c
diff --git a/test/mpi/f08/topo/dgraph_wgtf90.f90 b/test/mpi/f08/topo/dgraph_wgtf90.f90
index 0ee67de..4f80384 100644
--- a/test/mpi/f08/topo/dgraph_wgtf90.f90
+++ b/test/mpi/f08/topo/dgraph_wgtf90.f90
@@ -1,6 +1,6 @@
! -*- Mode: Fortran; -*-
!
-! (C) 2014 by Argonne National Laboratory.
+! (C) 2011 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
! This program is Fortran version of dgraph_unwgt.c
diff --git a/test/mpi/f08/topo/testlist b/test/mpi/f08/topo/testlist
index 9836414..9b9685e 100644
--- a/test/mpi/f08/topo/testlist
+++ b/test/mpi/f08/topo/testlist
@@ -1,3 +1,4 @@
cartcrf90 4
dgraph_wgtf90 4
dgraph_unwgtf90 4
+cart_subf90 4
diff --git a/test/mpi/f08/util/Makefile.am b/test/mpi/f08/util/Makefile.am
index bd9b71c..b37bfca 100644
--- a/test/mpi/f08/util/Makefile.am
+++ b/test/mpi/f08/util/Makefile.am
@@ -1,7 +1,7 @@
## -*- Mode: Makefile; -*-
## vim: set ft=automake :
##
-## (C) 2014 by Argonne National Laboratory.
+## (C) 2011 by Argonne National Laboratory.
## See COPYRIGHT in top-level directory.
##
diff --git a/test/mpi/f08/util/Makefile.in b/test/mpi/f08/util/Makefile.in
index 897c7e9..739946c 100644
--- a/test/mpi/f08/util/Makefile.in
+++ b/test/mpi/f08/util/Makefile.in
@@ -339,6 +339,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/Makefile.in b/test/mpi/f77/Makefile.in
index 9f1bd72..8037c9b 100644
--- a/test/mpi/f77/Makefile.in
+++ b/test/mpi/f77/Makefile.in
@@ -366,6 +366,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/attr/Makefile.in b/test/mpi/f77/attr/Makefile.in
index ee5de09..23c2391 100644
--- a/test/mpi/f77/attr/Makefile.in
+++ b/test/mpi/f77/attr/Makefile.in
@@ -388,6 +388,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/attr/commattr4f.f b/test/mpi/f77/attr/commattr4f.f
index ddce319..236a112 100644
--- a/test/mpi/f77/attr/commattr4f.f
+++ b/test/mpi/f77/attr/commattr4f.f
@@ -1,3 +1,7 @@
+C -*- Mode: Fortran; -*-
+C
+C (C) 2015 by Argonne National Laboratory.
+C See COPYRIGHT in top-level directory.
C
program main
C
diff --git a/test/mpi/f77/coll/Makefile.in b/test/mpi/f77/coll/Makefile.in
index 60db36d..c023e9c 100644
--- a/test/mpi/f77/coll/Makefile.in
+++ b/test/mpi/f77/coll/Makefile.in
@@ -408,6 +408,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/coll/split_typef.f b/test/mpi/f77/coll/split_typef.f
index 27cfcd0..9b484b6 100644
--- a/test/mpi/f77/coll/split_typef.f
+++ b/test/mpi/f77/coll/split_typef.f
@@ -19,6 +19,7 @@ C
call mtest_init( ierr )
call mpi_comm_dup( MPI_COMM_WORLD, comm, ierr )
+ call mpi_comm_rank( comm, rank , ierr )
call mpi_comm_split_type( comm, MPI_COMM_TYPE_SHARED, rank,
& MPI_INFO_NULL, newcomm, ierr )
diff --git a/test/mpi/f77/comm/Makefile.in b/test/mpi/f77/comm/Makefile.in
index f57ad87..5688942 100644
--- a/test/mpi/f77/comm/Makefile.in
+++ b/test/mpi/f77/comm/Makefile.in
@@ -349,6 +349,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/datatype/Makefile.in b/test/mpi/f77/datatype/Makefile.in
index 148f8c7..1de2d94 100644
--- a/test/mpi/f77/datatype/Makefile.in
+++ b/test/mpi/f77/datatype/Makefile.in
@@ -412,6 +412,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/ext/Makefile.in b/test/mpi/f77/ext/Makefile.in
index fbc427c..9fab962 100644
--- a/test/mpi/f77/ext/Makefile.in
+++ b/test/mpi/f77/ext/Makefile.in
@@ -375,6 +375,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/info/Makefile.in b/test/mpi/f77/info/Makefile.in
index e7d7b12..2a7d722 100644
--- a/test/mpi/f77/info/Makefile.in
+++ b/test/mpi/f77/info/Makefile.in
@@ -349,6 +349,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/init/Makefile.in b/test/mpi/f77/init/Makefile.in
index eef2820..e85ae21 100644
--- a/test/mpi/f77/init/Makefile.in
+++ b/test/mpi/f77/init/Makefile.in
@@ -364,6 +364,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/io/Makefile.in b/test/mpi/f77/io/Makefile.in
index efab5ab..189f84d 100644
--- a/test/mpi/f77/io/Makefile.in
+++ b/test/mpi/f77/io/Makefile.in
@@ -469,6 +469,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/profile/Makefile.in b/test/mpi/f77/profile/Makefile.in
index f30c34a..b87bf9d 100644
--- a/test/mpi/f77/profile/Makefile.in
+++ b/test/mpi/f77/profile/Makefile.in
@@ -345,6 +345,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/pt2pt/Makefile.in b/test/mpi/f77/pt2pt/Makefile.in
index 353f98a..b948708 100644
--- a/test/mpi/f77/pt2pt/Makefile.in
+++ b/test/mpi/f77/pt2pt/Makefile.in
@@ -358,6 +358,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/rma/Makefile.in b/test/mpi/f77/rma/Makefile.in
index 5a51568..90b3506 100644
--- a/test/mpi/f77/rma/Makefile.in
+++ b/test/mpi/f77/rma/Makefile.in
@@ -419,6 +419,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/spawn/Makefile.in b/test/mpi/f77/spawn/Makefile.in
index f66aef3..3572501 100644
--- a/test/mpi/f77/spawn/Makefile.in
+++ b/test/mpi/f77/spawn/Makefile.in
@@ -368,6 +368,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/topo/Makefile.in b/test/mpi/f77/topo/Makefile.in
index 2650250..b6ba3cc 100644
--- a/test/mpi/f77/topo/Makefile.in
+++ b/test/mpi/f77/topo/Makefile.in
@@ -354,6 +354,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f77/util/Makefile.in b/test/mpi/f77/util/Makefile.in
index 6471c65..6bc412d 100644
--- a/test/mpi/f77/util/Makefile.in
+++ b/test/mpi/f77/util/Makefile.in
@@ -339,6 +339,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/Makefile.in b/test/mpi/f90/Makefile.in
index c6bf6af..4989462 100644
--- a/test/mpi/f90/Makefile.in
+++ b/test/mpi/f90/Makefile.in
@@ -373,6 +373,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/attr/Makefile.in b/test/mpi/f90/attr/Makefile.in
index 61b0dd2..f6be761 100644
--- a/test/mpi/f90/attr/Makefile.in
+++ b/test/mpi/f90/attr/Makefile.in
@@ -432,6 +432,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/attr/commattr4f90.f90 b/test/mpi/f90/attr/commattr4f90.f90
index 5c34812..e56bf01 100644
--- a/test/mpi/f90/attr/commattr4f90.f90
+++ b/test/mpi/f90/attr/commattr4f90.f90
@@ -1,4 +1,8 @@
! This file created from test/mpi/f77/attr/commattr4f.f with f77tof90
+! -*- Mode: Fortran; -*-
+!
+! (C) 2015 by Argonne National Laboratory.
+! See COPYRIGHT in top-level directory.
!
program main
!
diff --git a/test/mpi/f90/coll/Makefile.in b/test/mpi/f90/coll/Makefile.in
index 81835a2..bae8e07 100644
--- a/test/mpi/f90/coll/Makefile.in
+++ b/test/mpi/f90/coll/Makefile.in
@@ -421,6 +421,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/coll/split_typef90.f90 b/test/mpi/f90/coll/split_typef90.f90
index ac07e20..41e7beb 100644
--- a/test/mpi/f90/coll/split_typef90.f90
+++ b/test/mpi/f90/coll/split_typef90.f90
@@ -19,6 +19,7 @@
call mtest_init( ierr )
call mpi_comm_dup( MPI_COMM_WORLD, comm, ierr )
+ call mpi_comm_rank( comm, rank , ierr )
call mpi_comm_split_type( comm, MPI_COMM_TYPE_SHARED, rank, &
& MPI_INFO_NULL, newcomm, ierr )
diff --git a/test/mpi/f90/comm/Makefile.in b/test/mpi/f90/comm/Makefile.in
index 9d0e94d..f19914b 100644
--- a/test/mpi/f90/comm/Makefile.in
+++ b/test/mpi/f90/comm/Makefile.in
@@ -359,6 +359,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/datatype/Makefile.in b/test/mpi/f90/datatype/Makefile.in
index d2416de..0b055e0 100644
--- a/test/mpi/f90/datatype/Makefile.in
+++ b/test/mpi/f90/datatype/Makefile.in
@@ -465,6 +465,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/ext/Makefile.in b/test/mpi/f90/ext/Makefile.in
index 07a3cb7..90fcca3 100644
--- a/test/mpi/f90/ext/Makefile.in
+++ b/test/mpi/f90/ext/Makefile.in
@@ -385,6 +385,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/f90types/Makefile.in b/test/mpi/f90/f90types/Makefile.in
index f447abf..23f32ba 100644
--- a/test/mpi/f90/f90types/Makefile.in
+++ b/test/mpi/f90/f90types/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -368,7 +369,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
# these are tests of f90-related functionality, but it's testing the C API, so
# we use the C makefile stub
@@ -653,10 +654,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/f90/info/Makefile.in b/test/mpi/f90/info/Makefile.in
index 5ad6ed9..edddbaa 100644
--- a/test/mpi/f90/info/Makefile.in
+++ b/test/mpi/f90/info/Makefile.in
@@ -359,6 +359,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/init/Makefile.in b/test/mpi/f90/init/Makefile.in
index bdd5bbf..3a5c5d8 100644
--- a/test/mpi/f90/init/Makefile.in
+++ b/test/mpi/f90/init/Makefile.in
@@ -374,6 +374,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/io/Makefile.in b/test/mpi/f90/io/Makefile.in
index 69427b8..35f16eb 100644
--- a/test/mpi/f90/io/Makefile.in
+++ b/test/mpi/f90/io/Makefile.in
@@ -481,6 +481,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/misc/Makefile.in b/test/mpi/f90/misc/Makefile.in
index 3a239dd..2fd91b0 100644
--- a/test/mpi/f90/misc/Makefile.in
+++ b/test/mpi/f90/misc/Makefile.in
@@ -352,6 +352,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/profile/Makefile.in b/test/mpi/f90/profile/Makefile.in
index 24cb888..34e8c17 100644
--- a/test/mpi/f90/profile/Makefile.in
+++ b/test/mpi/f90/profile/Makefile.in
@@ -355,6 +355,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/pt2pt/Makefile.in b/test/mpi/f90/pt2pt/Makefile.in
index 4ba8d06..e86115a 100644
--- a/test/mpi/f90/pt2pt/Makefile.in
+++ b/test/mpi/f90/pt2pt/Makefile.in
@@ -370,6 +370,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/rma/Makefile.in b/test/mpi/f90/rma/Makefile.in
index 6aaea06..af5b176 100644
--- a/test/mpi/f90/rma/Makefile.in
+++ b/test/mpi/f90/rma/Makefile.in
@@ -431,6 +431,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/spawn/Makefile.in b/test/mpi/f90/spawn/Makefile.in
index a6af582..64860f8 100644
--- a/test/mpi/f90/spawn/Makefile.in
+++ b/test/mpi/f90/spawn/Makefile.in
@@ -389,6 +389,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/timer/Makefile.in b/test/mpi/f90/timer/Makefile.in
index 6cd6dd2..ddda2fd 100644
--- a/test/mpi/f90/timer/Makefile.in
+++ b/test/mpi/f90/timer/Makefile.in
@@ -352,6 +352,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/topo/Makefile.in b/test/mpi/f90/topo/Makefile.in
index 964775f..aa9a9a3 100644
--- a/test/mpi/f90/topo/Makefile.in
+++ b/test/mpi/f90/topo/Makefile.in
@@ -364,6 +364,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/f90/util/Makefile.in b/test/mpi/f90/util/Makefile.in
index 5c3da9e..ef04637 100644
--- a/test/mpi/f90/util/Makefile.in
+++ b/test/mpi/f90/util/Makefile.in
@@ -342,6 +342,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/ft/Makefile.in b/test/mpi/ft/Makefile.in
index 2de9960..c19c279 100644
--- a/test/mpi/ft/Makefile.in
+++ b/test/mpi/ft/Makefile.in
@@ -491,6 +491,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -509,7 +510,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -895,10 +896,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/ft/multi_isendalive.c b/test/mpi/ft/multi_isendalive.c
index 85c29f8..05b8c3c 100644
--- a/test/mpi/ft/multi_isendalive.c
+++ b/test/mpi/ft/multi_isendalive.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2013 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#include <mpi.h>
diff --git a/test/mpi/group/Makefile.in b/test/mpi/group/Makefile.in
index 1667b82..85cf86c 100644
--- a/test/mpi/group/Makefile.in
+++ b/test/mpi/group/Makefile.in
@@ -381,6 +381,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -399,7 +400,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
# gtranksperf uses fabs, which may require -lm
@@ -708,10 +709,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# glpid is a whitebox test that uses mpiimpl.h; it is unlikely to build with the
# current build system setup
diff --git a/test/mpi/group/glpid.c b/test/mpi/group/glpid.c
index 43b1364..d698af5 100644
--- a/test/mpi/group/glpid.c
+++ b/test/mpi/group/glpid.c
@@ -10,7 +10,7 @@
int main(int argc, char *argv[])
{
- MPID_Group group, *group_ptr = &group;
+ MPIR_Group group, *group_ptr = &group;
int i;
MPI_Init(&argc, &argv);
@@ -21,8 +21,8 @@ int main(int argc, char *argv[])
group.size = 4;
group.rank = 0;
group.idx_of_first_lpid = -1;
- group.lrank_to_lpid = (MPID_Group_pmap_t *)
- MPIU_Malloc(group.size * sizeof(MPID_Group_pmap_t));
+ group.lrank_to_lpid = (MPII_Group_pmap_t *)
+ MPL_malloc(group.size * sizeof(MPII_Group_pmap_t));
for (i = 0; i < group.size; i++) {
group.lrank_to_lpid[i].lrank = i;
group.lrank_to_lpid[i].lpid = group.size - i - 1;
@@ -31,7 +31,7 @@ int main(int argc, char *argv[])
}
/* Set up the group lpid list */
- MPIR_Group_setup_lpid_list(group_ptr);
+ MPII_Group_setup_lpid_list(group_ptr);
/* Print the group structure */
printf("Index of first lpid = %d\n", group.idx_of_first_lpid);
diff --git a/test/mpi/group/groupcreate.c b/test/mpi/group/groupcreate.c
index ffbad0f..8079f55 100644
--- a/test/mpi/group/groupcreate.c
+++ b/test/mpi/group/groupcreate.c
@@ -79,6 +79,7 @@ implementation\n");
}
free(group_array);
+ free(ranks);
MPI_Finalize();
return 0;
diff --git a/test/mpi/group/grouptest2.c b/test/mpi/group/grouptest2.c
index 00cb465..16bbaab 100644
--- a/test/mpi/group/grouptest2.c
+++ b/test/mpi/group/grouptest2.c
@@ -207,6 +207,8 @@ int main(int argc, char **argv)
printf("Found %d errors in MPI Group routines\n", toterr);
}
+ free(ranks);
+ free(ranks_out);
MPI_Finalize();
return toterr;
}
diff --git a/test/mpi/impls/Makefile.in b/test/mpi/impls/Makefile.in
index f13dbb6..75ef44d 100644
--- a/test/mpi/impls/Makefile.in
+++ b/test/mpi/impls/Makefile.in
@@ -366,6 +366,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -384,7 +385,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
static_subdirs =
SUBDIRS = $(static_subdirs) $(impldir)
@@ -707,10 +708,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/impls/hydra/Makefile.in b/test/mpi/impls/hydra/Makefile.in
index 4cf31d3..d508143 100644
--- a/test/mpi/impls/hydra/Makefile.in
+++ b/test/mpi/impls/hydra/Makefile.in
@@ -347,6 +347,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.board.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-2.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-2.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-8.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread.out
index 4f28c56..cc985de 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 1 1 1 1 0 0
-process 4 binding: 0 0 0 0 1 1 1 1
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 1 1 1 1 0 0
-process 12 binding: 0 0 0 0 1 1 1 1
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 11110000
+process 2 binding: 00111100
+process 3 binding: 00111100
+process 4 binding: 00001111
+process 5 binding: 00001111
+process 6 binding: 11000011
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 11110000
+process 10 binding: 00111100
+process 11 binding: 00111100
+process 12 binding: 00001111
+process 13 binding: 00001111
+process 14 binding: 11000011
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.numa.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.socket.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-2.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-4.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-8.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out
index f235420..550aeca 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 1 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 1 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 1 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 1 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 11000000
+process 2 binding: 00110000
+process 3 binding: 00110000
+process 4 binding: 00001100
+process 5 binding: 00001100
+process 6 binding: 00000011
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 11000000
+process 10 binding: 00110000
+process 11 binding: 00110000
+process 12 binding: 00001100
+process 13 binding: 00001100
+process 14 binding: 00000011
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.board.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-2.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-4.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-8.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread.out
index dca323c..b60a978 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 11000000
+process 1 binding: 01100000
+process 2 binding: 00110000
+process 3 binding: 00011000
+process 4 binding: 00001100
+process 5 binding: 00000110
+process 6 binding: 00000011
+process 7 binding: 10000001
+process 8 binding: 11000000
+process 9 binding: 01100000
+process 10 binding: 00110000
+process 11 binding: 00011000
+process 12 binding: 00001100
+process 13 binding: 00000110
+process 14 binding: 00000011
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.numa.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.socket.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.board.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-2.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-2.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-8.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread.out
index bbf9f7f..28f1652 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1
+process 0 binding: 11110000
+process 1 binding: 01111000
+process 2 binding: 00111100
+process 3 binding: 00011110
+process 4 binding: 00001111
+process 5 binding: 10000111
+process 6 binding: 11000011
+process 7 binding: 11100001
+process 8 binding: 11110000
+process 9 binding: 01111000
+process 10 binding: 00111100
+process 11 binding: 00011110
+process 12 binding: 00001111
+process 13 binding: 10000111
+process 14 binding: 11000011
+process 15 binding: 11100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.numa.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.socket.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread-8.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-2.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-4.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-2.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-4.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-8.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-2.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-4.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-2.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-4.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-8.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out
index 6a170f2..5f1ac15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 0 binding: 1111111111111111
+process 1 binding: 1111111111111111
+process 2 binding: 1111111111111111
+process 3 binding: 1111111111111111
+process 4 binding: 1111111111111111
+process 5 binding: 1111111111111111
+process 6 binding: 1111111111111111
+process 7 binding: 1111111111111111
+process 8 binding: 1111111111111111
+process 9 binding: 1111111111111111
+process 10 binding: 1111111111111111
+process 11 binding: 1111111111111111
+process 12 binding: 1111111111111111
+process 13 binding: 1111111111111111
+process 14 binding: 1111111111111111
+process 15 binding: 1111111111111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.board.out
index 0feba67..b359841 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0011000000110000
+process 2 binding: 0000110000001100
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0011000000110000
+process 6 binding: 0000110000001100
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0011000000110000
+process 10 binding: 0000110000001100
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0011000000110000
+process 14 binding: 0000110000001100
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-2.out
index 0feba67..b359841 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0011000000110000
+process 2 binding: 0000110000001100
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0011000000110000
+process 6 binding: 0000110000001100
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0011000000110000
+process 10 binding: 0000110000001100
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0011000000110000
+process 14 binding: 0000110000001100
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-4.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core.out
index 1897bb9..458435a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 0 binding: 1100000011000000
+process 1 binding: 0110000001100000
+process 2 binding: 0011000000110000
+process 3 binding: 0001100000011000
+process 4 binding: 0000110000001100
+process 5 binding: 0000011000000110
+process 6 binding: 0000001100000011
+process 7 binding: 1000000110000001
+process 8 binding: 1100000011000000
+process 9 binding: 0110000001100000
+process 10 binding: 0011000000110000
+process 11 binding: 0001100000011000
+process 12 binding: 0000110000001100
+process 13 binding: 0000011000000110
+process 14 binding: 0000001100000011
+process 15 binding: 1000000110000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-2.out
index 1897bb9..458435a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 0 binding: 1100000011000000
+process 1 binding: 0110000001100000
+process 2 binding: 0011000000110000
+process 3 binding: 0001100000011000
+process 4 binding: 0000110000001100
+process 5 binding: 0000011000000110
+process 6 binding: 0000001100000011
+process 7 binding: 1000000110000001
+process 8 binding: 1100000011000000
+process 9 binding: 0110000001100000
+process 10 binding: 0011000000110000
+process 11 binding: 0001100000011000
+process 12 binding: 0000110000001100
+process 13 binding: 0000011000000110
+process 14 binding: 0000001100000011
+process 15 binding: 1000000110000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-4.out
index 0feba67..b359841 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0011000000110000
+process 2 binding: 0000110000001100
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0011000000110000
+process 6 binding: 0000110000001100
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0011000000110000
+process 10 binding: 0000110000001100
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0011000000110000
+process 14 binding: 0000110000001100
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-8.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread.out
index cf8fb69..0d0dd29 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 2 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 3 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 4 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 7 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 8 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 11 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 12 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 13 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 14 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
-process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 0 binding: 1100000011000000
+process 1 binding: 1100000011000000
+process 2 binding: 0110000001100000
+process 3 binding: 0110000001100000
+process 4 binding: 0011000000110000
+process 5 binding: 0011000000110000
+process 6 binding: 0001100000011000
+process 7 binding: 0001100000011000
+process 8 binding: 0000110000001100
+process 9 binding: 0000110000001100
+process 10 binding: 0000011000000110
+process 11 binding: 0000011000000110
+process 12 binding: 0000001100000011
+process 13 binding: 0000001100000011
+process 14 binding: 1000000110000001
+process 15 binding: 1000000110000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.numa.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.socket.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.board.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-2.out
index e9efd88..aa0eb29 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0011110000111100
+process 2 binding: 0000111100001111
+process 3 binding: 1100001111000011
+process 4 binding: 1111000011110000
+process 5 binding: 0011110000111100
+process 6 binding: 0000111100001111
+process 7 binding: 1100001111000011
+process 8 binding: 1111000011110000
+process 9 binding: 0011110000111100
+process 10 binding: 0000111100001111
+process 11 binding: 1100001111000011
+process 12 binding: 1111000011110000
+process 13 binding: 0011110000111100
+process 14 binding: 0000111100001111
+process 15 binding: 1100001111000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-4.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core.out
index b4a0141..baa6993 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 0 binding: 1111000011110000
+process 1 binding: 0111100001111000
+process 2 binding: 0011110000111100
+process 3 binding: 0001111000011110
+process 4 binding: 0000111100001111
+process 5 binding: 1000011110000111
+process 6 binding: 1100001111000011
+process 7 binding: 1110000111100001
+process 8 binding: 1111000011110000
+process 9 binding: 0111100001111000
+process 10 binding: 0011110000111100
+process 11 binding: 0001111000011110
+process 12 binding: 0000111100001111
+process 13 binding: 1000011110000111
+process 14 binding: 1100001111000011
+process 15 binding: 1110000111100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-2.out
index b4a0141..baa6993 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 0 binding: 1111000011110000
+process 1 binding: 0111100001111000
+process 2 binding: 0011110000111100
+process 3 binding: 0001111000011110
+process 4 binding: 0000111100001111
+process 5 binding: 1000011110000111
+process 6 binding: 1100001111000011
+process 7 binding: 1110000111100001
+process 8 binding: 1111000011110000
+process 9 binding: 0111100001111000
+process 10 binding: 0011110000111100
+process 11 binding: 0001111000011110
+process 12 binding: 0000111100001111
+process 13 binding: 1000011110000111
+process 14 binding: 1100001111000011
+process 15 binding: 1110000111100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-4.out
index e9efd88..aa0eb29 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0011110000111100
+process 2 binding: 0000111100001111
+process 3 binding: 1100001111000011
+process 4 binding: 1111000011110000
+process 5 binding: 0011110000111100
+process 6 binding: 0000111100001111
+process 7 binding: 1100001111000011
+process 8 binding: 1111000011110000
+process 9 binding: 0011110000111100
+process 10 binding: 0000111100001111
+process 11 binding: 1100001111000011
+process 12 binding: 1111000011110000
+process 13 binding: 0011110000111100
+process 14 binding: 0000111100001111
+process 15 binding: 1100001111000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-8.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread.out
index 7b2c5aa..56a76b6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 3 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 4 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 7 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 11 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 12 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 13 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 14 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
-process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 0111100001111000
+process 3 binding: 0111100001111000
+process 4 binding: 0011110000111100
+process 5 binding: 0011110000111100
+process 6 binding: 0001111000011110
+process 7 binding: 0001111000011110
+process 8 binding: 0000111100001111
+process 9 binding: 0000111100001111
+process 10 binding: 1000011110000111
+process 11 binding: 1000011110000111
+process 12 binding: 1100001111000011
+process 13 binding: 1100001111000011
+process 14 binding: 1110000111100001
+process 15 binding: 1110000111100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.numa.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.socket.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out
index 4fcd88e..49c85e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0100000001000000
+process 2 binding: 0010000000100000
+process 3 binding: 0001000000010000
+process 4 binding: 0000100000001000
+process 5 binding: 0000010000000100
+process 6 binding: 0000001000000010
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0100000001000000
+process 10 binding: 0010000000100000
+process 11 binding: 0001000000010000
+process 12 binding: 0000100000001000
+process 13 binding: 0000010000000100
+process 14 binding: 0000001000000010
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-2.out
index 15bd9ef..02a4a85 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0010000000100000
+process 2 binding: 0000100000001000
+process 3 binding: 0000001000000010
+process 4 binding: 0100000001000000
+process 5 binding: 0001000000010000
+process 6 binding: 0000010000000100
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0010000000100000
+process 10 binding: 0000100000001000
+process 11 binding: 0000001000000010
+process 12 binding: 0100000001000000
+process 13 binding: 0001000000010000
+process 14 binding: 0000010000000100
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-4.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out
index 4fcd88e..49c85e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0100000001000000
+process 2 binding: 0010000000100000
+process 3 binding: 0001000000010000
+process 4 binding: 0000100000001000
+process 5 binding: 0000010000000100
+process 6 binding: 0000001000000010
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0100000001000000
+process 10 binding: 0010000000100000
+process 11 binding: 0001000000010000
+process 12 binding: 0000100000001000
+process 13 binding: 0000010000000100
+process 14 binding: 0000001000000010
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-2.out
index 4fcd88e..49c85e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0100000001000000
+process 2 binding: 0010000000100000
+process 3 binding: 0001000000010000
+process 4 binding: 0000100000001000
+process 5 binding: 0000010000000100
+process 6 binding: 0000001000000010
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0100000001000000
+process 10 binding: 0010000000100000
+process 11 binding: 0001000000010000
+process 12 binding: 0000100000001000
+process 13 binding: 0000010000000100
+process 14 binding: 0000001000000010
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-4.out
index 15bd9ef..02a4a85 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0010000000100000
+process 2 binding: 0000100000001000
+process 3 binding: 0000001000000010
+process 4 binding: 0100000001000000
+process 5 binding: 0001000000010000
+process 6 binding: 0000010000000100
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0010000000100000
+process 10 binding: 0000100000001000
+process 11 binding: 0000001000000010
+process 12 binding: 0100000001000000
+process 13 binding: 0001000000010000
+process 14 binding: 0000010000000100
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-8.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out
index 9d46f9e..7b74a25 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 1000000010000000
+process 2 binding: 0100000001000000
+process 3 binding: 0100000001000000
+process 4 binding: 0010000000100000
+process 5 binding: 0010000000100000
+process 6 binding: 0001000000010000
+process 7 binding: 0001000000010000
+process 8 binding: 0000100000001000
+process 9 binding: 0000100000001000
+process 10 binding: 0000010000000100
+process 11 binding: 0000010000000100
+process 12 binding: 0000001000000010
+process 13 binding: 0000001000000010
+process 14 binding: 0000000100000001
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.board.out
index 4fcd88e..49c85e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0100000001000000
+process 2 binding: 0010000000100000
+process 3 binding: 0001000000010000
+process 4 binding: 0000100000001000
+process 5 binding: 0000010000000100
+process 6 binding: 0000001000000010
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0100000001000000
+process 10 binding: 0010000000100000
+process 11 binding: 0001000000010000
+process 12 binding: 0000100000001000
+process 13 binding: 0000010000000100
+process 14 binding: 0000001000000010
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-2.out
index 15bd9ef..02a4a85 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0010000000100000
+process 2 binding: 0000100000001000
+process 3 binding: 0000001000000010
+process 4 binding: 0100000001000000
+process 5 binding: 0001000000010000
+process 6 binding: 0000010000000100
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0010000000100000
+process 10 binding: 0000100000001000
+process 11 binding: 0000001000000010
+process 12 binding: 0100000001000000
+process 13 binding: 0001000000010000
+process 14 binding: 0000010000000100
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-4.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core.out
index 4fcd88e..49c85e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0100000001000000
+process 2 binding: 0010000000100000
+process 3 binding: 0001000000010000
+process 4 binding: 0000100000001000
+process 5 binding: 0000010000000100
+process 6 binding: 0000001000000010
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0100000001000000
+process 10 binding: 0010000000100000
+process 11 binding: 0001000000010000
+process 12 binding: 0000100000001000
+process 13 binding: 0000010000000100
+process 14 binding: 0000001000000010
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-2.out
index 4fcd88e..49c85e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0100000001000000
+process 2 binding: 0010000000100000
+process 3 binding: 0001000000010000
+process 4 binding: 0000100000001000
+process 5 binding: 0000010000000100
+process 6 binding: 0000001000000010
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0100000001000000
+process 10 binding: 0010000000100000
+process 11 binding: 0001000000010000
+process 12 binding: 0000100000001000
+process 13 binding: 0000010000000100
+process 14 binding: 0000001000000010
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-4.out
index 15bd9ef..02a4a85 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0010000000100000
+process 2 binding: 0000100000001000
+process 3 binding: 0000001000000010
+process 4 binding: 0100000001000000
+process 5 binding: 0001000000010000
+process 6 binding: 0000010000000100
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0010000000100000
+process 10 binding: 0000100000001000
+process 11 binding: 0000001000000010
+process 12 binding: 0100000001000000
+process 13 binding: 0001000000010000
+process 14 binding: 0000010000000100
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-8.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread.out
index baebe8d..dcadcfe 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
-process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 9 binding: 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 15 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0100000010000000
+process 2 binding: 0100000001000000
+process 3 binding: 0010000001000000
+process 4 binding: 0010000000100000
+process 5 binding: 0001000000100000
+process 6 binding: 0001000000010000
+process 7 binding: 0000100000010000
+process 8 binding: 0000100000001000
+process 9 binding: 0000010000001000
+process 10 binding: 0000010000000100
+process 11 binding: 0000001000000100
+process 12 binding: 0000001000000010
+process 13 binding: 0000000100000010
+process 14 binding: 0000000100000001
+process 15 binding: 1000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.numa.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.socket.out
index 349c36c..09b667d 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 0 binding: 1000000010000000
+process 1 binding: 0000100000001000
+process 2 binding: 0100000001000000
+process 3 binding: 0000010000000100
+process 4 binding: 0010000000100000
+process 5 binding: 0000001000000010
+process 6 binding: 0001000000010000
+process 7 binding: 0000000100000001
+process 8 binding: 1000000010000000
+process 9 binding: 0000100000001000
+process 10 binding: 0100000001000000
+process 11 binding: 0000010000000100
+process 12 binding: 0010000000100000
+process 13 binding: 0000001000000010
+process 14 binding: 0001000000010000
+process 15 binding: 0000000100000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.board.out
index 0feba67..b359841 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0011000000110000
+process 2 binding: 0000110000001100
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0011000000110000
+process 6 binding: 0000110000001100
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0011000000110000
+process 10 binding: 0000110000001100
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0011000000110000
+process 14 binding: 0000110000001100
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-2.out
index 0feba67..b359841 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0011000000110000
+process 2 binding: 0000110000001100
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0011000000110000
+process 6 binding: 0000110000001100
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0011000000110000
+process 10 binding: 0000110000001100
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0011000000110000
+process 14 binding: 0000110000001100
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-4.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core.out
index 1897bb9..458435a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 0 binding: 1100000011000000
+process 1 binding: 0110000001100000
+process 2 binding: 0011000000110000
+process 3 binding: 0001100000011000
+process 4 binding: 0000110000001100
+process 5 binding: 0000011000000110
+process 6 binding: 0000001100000011
+process 7 binding: 1000000110000001
+process 8 binding: 1100000011000000
+process 9 binding: 0110000001100000
+process 10 binding: 0011000000110000
+process 11 binding: 0001100000011000
+process 12 binding: 0000110000001100
+process 13 binding: 0000011000000110
+process 14 binding: 0000001100000011
+process 15 binding: 1000000110000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-2.out
index 1897bb9..458435a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 0 binding: 1100000011000000
+process 1 binding: 0110000001100000
+process 2 binding: 0011000000110000
+process 3 binding: 0001100000011000
+process 4 binding: 0000110000001100
+process 5 binding: 0000011000000110
+process 6 binding: 0000001100000011
+process 7 binding: 1000000110000001
+process 8 binding: 1100000011000000
+process 9 binding: 0110000001100000
+process 10 binding: 0011000000110000
+process 11 binding: 0001100000011000
+process 12 binding: 0000110000001100
+process 13 binding: 0000011000000110
+process 14 binding: 0000001100000011
+process 15 binding: 1000000110000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-4.out
index 0feba67..b359841 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0011000000110000
+process 2 binding: 0000110000001100
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0011000000110000
+process 6 binding: 0000110000001100
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0011000000110000
+process 10 binding: 0000110000001100
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0011000000110000
+process 14 binding: 0000110000001100
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-8.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread.out
index 5078c16..7c1819c 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 2 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
-process 3 binding: 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0
-process 4 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 5 binding: 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
-process 7 binding: 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0
-process 8 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 9 binding: 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0
-process 12 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 13 binding: 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1
-process 14 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
-process 15 binding: 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1
+process 0 binding: 1100000011000000
+process 1 binding: 0110000011000000
+process 2 binding: 0110000001100000
+process 3 binding: 0011000001100000
+process 4 binding: 0011000000110000
+process 5 binding: 0001100000110000
+process 6 binding: 0001100000011000
+process 7 binding: 0000110000011000
+process 8 binding: 0000110000001100
+process 9 binding: 0000011000001100
+process 10 binding: 0000011000000110
+process 11 binding: 0000001100000110
+process 12 binding: 0000001100000011
+process 13 binding: 1000000100000011
+process 14 binding: 1000000110000001
+process 15 binding: 1100000010000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.numa.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.socket.out
index 4bb862b..1a75715 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 0 binding: 1100000011000000
+process 1 binding: 0000110000001100
+process 2 binding: 0011000000110000
+process 3 binding: 0000001100000011
+process 4 binding: 1100000011000000
+process 5 binding: 0000110000001100
+process 6 binding: 0011000000110000
+process 7 binding: 0000001100000011
+process 8 binding: 1100000011000000
+process 9 binding: 0000110000001100
+process 10 binding: 0011000000110000
+process 11 binding: 0000001100000011
+process 12 binding: 1100000011000000
+process 13 binding: 0000110000001100
+process 14 binding: 0011000000110000
+process 15 binding: 0000001100000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.board.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-2.out
index e9efd88..aa0eb29 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0011110000111100
+process 2 binding: 0000111100001111
+process 3 binding: 1100001111000011
+process 4 binding: 1111000011110000
+process 5 binding: 0011110000111100
+process 6 binding: 0000111100001111
+process 7 binding: 1100001111000011
+process 8 binding: 1111000011110000
+process 9 binding: 0011110000111100
+process 10 binding: 0000111100001111
+process 11 binding: 1100001111000011
+process 12 binding: 1111000011110000
+process 13 binding: 0011110000111100
+process 14 binding: 0000111100001111
+process 15 binding: 1100001111000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-4.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core.out
index b4a0141..baa6993 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 0 binding: 1111000011110000
+process 1 binding: 0111100001111000
+process 2 binding: 0011110000111100
+process 3 binding: 0001111000011110
+process 4 binding: 0000111100001111
+process 5 binding: 1000011110000111
+process 6 binding: 1100001111000011
+process 7 binding: 1110000111100001
+process 8 binding: 1111000011110000
+process 9 binding: 0111100001111000
+process 10 binding: 0011110000111100
+process 11 binding: 0001111000011110
+process 12 binding: 0000111100001111
+process 13 binding: 1000011110000111
+process 14 binding: 1100001111000011
+process 15 binding: 1110000111100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-2.out
index b4a0141..baa6993 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 0 binding: 1111000011110000
+process 1 binding: 0111100001111000
+process 2 binding: 0011110000111100
+process 3 binding: 0001111000011110
+process 4 binding: 0000111100001111
+process 5 binding: 1000011110000111
+process 6 binding: 1100001111000011
+process 7 binding: 1110000111100001
+process 8 binding: 1111000011110000
+process 9 binding: 0111100001111000
+process 10 binding: 0011110000111100
+process 11 binding: 0001111000011110
+process 12 binding: 0000111100001111
+process 13 binding: 1000011110000111
+process 14 binding: 1100001111000011
+process 15 binding: 1110000111100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-4.out
index e9efd88..aa0eb29 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0011110000111100
+process 2 binding: 0000111100001111
+process 3 binding: 1100001111000011
+process 4 binding: 1111000011110000
+process 5 binding: 0011110000111100
+process 6 binding: 0000111100001111
+process 7 binding: 1100001111000011
+process 8 binding: 1111000011110000
+process 9 binding: 0011110000111100
+process 10 binding: 0000111100001111
+process 11 binding: 1100001111000011
+process 12 binding: 1111000011110000
+process 13 binding: 0011110000111100
+process 14 binding: 0000111100001111
+process 15 binding: 1100001111000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-8.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread.out
index 0d50a3a..e750618 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
-process 3 binding: 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0
-process 4 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
-process 5 binding: 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0
-process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 9 binding: 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1
-process 12 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
-process 13 binding: 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1
-process 14 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
-process 15 binding: 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1
+process 0 binding: 1111000011110000
+process 1 binding: 0111100011110000
+process 2 binding: 0111100001111000
+process 3 binding: 0011110001111000
+process 4 binding: 0011110000111100
+process 5 binding: 0001111000111100
+process 6 binding: 0001111000011110
+process 7 binding: 0000111100011110
+process 8 binding: 0000111100001111
+process 9 binding: 1000011100001111
+process 10 binding: 1000011110000111
+process 11 binding: 1100001110000111
+process 12 binding: 1100001111000011
+process 13 binding: 1110000111000011
+process 14 binding: 1110000111100001
+process 15 binding: 1111000011100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.numa.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.socket.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread-8.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out
index ed56af8..e3200da 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0000000010000000
+process 2 binding: 0100000000000000
+process 3 binding: 0000000001000000
+process 4 binding: 0010000000000000
+process 5 binding: 0000000000100000
+process 6 binding: 0001000000000000
+process 7 binding: 0000000000010000
+process 8 binding: 0000100000000000
+process 9 binding: 0000000000001000
+process 10 binding: 0000010000000000
+process 11 binding: 0000000000000100
+process 12 binding: 0000001000000000
+process 13 binding: 0000000000000010
+process 14 binding: 0000000100000000
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-2.out
index 32e9bd0..dba0d58 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 4 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 8 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 12 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0010000000000000
+process 2 binding: 0000100000000000
+process 3 binding: 0000001000000000
+process 4 binding: 0000000010000000
+process 5 binding: 0000000000100000
+process 6 binding: 0000000000001000
+process 7 binding: 0000000000000010
+process 8 binding: 0100000000000000
+process 9 binding: 0001000000000000
+process 10 binding: 0000010000000000
+process 11 binding: 0000000100000000
+process 12 binding: 0000000001000000
+process 13 binding: 0000000000010000
+process 14 binding: 0000000000000100
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-4.out
index 7d2e6e4..3245630 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0000100000000000
+process 2 binding: 0000000010000000
+process 3 binding: 0000000000001000
+process 4 binding: 0100000000000000
+process 5 binding: 0000010000000000
+process 6 binding: 0000000001000000
+process 7 binding: 0000000000000100
+process 8 binding: 0010000000000000
+process 9 binding: 0000001000000000
+process 10 binding: 0000000000100000
+process 11 binding: 0000000000000010
+process 12 binding: 0001000000000000
+process 13 binding: 0000000100000000
+process 14 binding: 0000000000010000
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out
index 69996c1..d94668e 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 8 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0100000000000000
+process 2 binding: 0010000000000000
+process 3 binding: 0001000000000000
+process 4 binding: 0000100000000000
+process 5 binding: 0000010000000000
+process 6 binding: 0000001000000000
+process 7 binding: 0000000100000000
+process 8 binding: 0000000010000000
+process 9 binding: 0000000001000000
+process 10 binding: 0000000000100000
+process 11 binding: 0000000000010000
+process 12 binding: 0000000000001000
+process 13 binding: 0000000000000100
+process 14 binding: 0000000000000010
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-2.out
index 69996c1..d94668e 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 8 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0100000000000000
+process 2 binding: 0010000000000000
+process 3 binding: 0001000000000000
+process 4 binding: 0000100000000000
+process 5 binding: 0000010000000000
+process 6 binding: 0000001000000000
+process 7 binding: 0000000100000000
+process 8 binding: 0000000010000000
+process 9 binding: 0000000001000000
+process 10 binding: 0000000000100000
+process 11 binding: 0000000000010000
+process 12 binding: 0000000000001000
+process 13 binding: 0000000000000100
+process 14 binding: 0000000000000010
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-4.out
index 32e9bd0..dba0d58 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 4 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 8 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 12 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0010000000000000
+process 2 binding: 0000100000000000
+process 3 binding: 0000001000000000
+process 4 binding: 0000000010000000
+process 5 binding: 0000000000100000
+process 6 binding: 0000000000001000
+process 7 binding: 0000000000000010
+process 8 binding: 0100000000000000
+process 9 binding: 0001000000000000
+process 10 binding: 0000010000000000
+process 11 binding: 0000000100000000
+process 12 binding: 0000000001000000
+process 13 binding: 0000000000010000
+process 14 binding: 0000000000000100
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-8.out
index 7d2e6e4..3245630 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0000100000000000
+process 2 binding: 0000000010000000
+process 3 binding: 0000000000001000
+process 4 binding: 0100000000000000
+process 5 binding: 0000010000000000
+process 6 binding: 0000000001000000
+process 7 binding: 0000000000000100
+process 8 binding: 0010000000000000
+process 9 binding: 0000001000000000
+process 10 binding: 0000000000100000
+process 11 binding: 0000000000000010
+process 12 binding: 0001000000000000
+process 13 binding: 0000000100000000
+process 14 binding: 0000000000010000
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out
index ed56af8..e3200da 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 4 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0000000010000000
+process 2 binding: 0100000000000000
+process 3 binding: 0000000001000000
+process 4 binding: 0010000000000000
+process 5 binding: 0000000000100000
+process 6 binding: 0001000000000000
+process 7 binding: 0000000000010000
+process 8 binding: 0000100000000000
+process 9 binding: 0000000000001000
+process 10 binding: 0000010000000000
+process 11 binding: 0000000000000100
+process 12 binding: 0000001000000000
+process 13 binding: 0000000000000010
+process 14 binding: 0000000100000000
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out
index 7d2e6e4..3245630 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0000100000000000
+process 2 binding: 0000000010000000
+process 3 binding: 0000000000001000
+process 4 binding: 0100000000000000
+process 5 binding: 0000010000000000
+process 6 binding: 0000000001000000
+process 7 binding: 0000000000000100
+process 8 binding: 0010000000000000
+process 9 binding: 0000001000000000
+process 10 binding: 0000000000100000
+process 11 binding: 0000000000000010
+process 12 binding: 0001000000000000
+process 13 binding: 0000000100000000
+process 14 binding: 0000000000010000
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out
index 7d2e6e4..3245630 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
-process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
-process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
-process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
-process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
-process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
-process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+process 0 binding: 1000000000000000
+process 1 binding: 0000100000000000
+process 2 binding: 0000000010000000
+process 3 binding: 0000000000001000
+process 4 binding: 0100000000000000
+process 5 binding: 0000010000000000
+process 6 binding: 0000000001000000
+process 7 binding: 0000000000000100
+process 8 binding: 0010000000000000
+process 9 binding: 0000001000000000
+process 10 binding: 0000000000100000
+process 11 binding: 0000000000000010
+process 12 binding: 0001000000000000
+process 13 binding: 0000000100000000
+process 14 binding: 0000000000010000
+process 15 binding: 0000000000000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-2.out
index 8529a43..e51d1d1 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 0000111100001111
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 1111000011110000
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 0000111100001111
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 1111000011110000
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-4.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out
index 1c74e8f..cd44e36 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 1111000011110000
+process 3 binding: 1111000011110000
+process 4 binding: 0000111100001111
+process 5 binding: 0000111100001111
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 1111000011110000
+process 11 binding: 1111000011110000
+process 12 binding: 0000111100001111
+process 13 binding: 0000111100001111
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-2.out
index 1c74e8f..cd44e36 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 1111000011110000
+process 3 binding: 1111000011110000
+process 4 binding: 0000111100001111
+process 5 binding: 0000111100001111
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 1111000011110000
+process 11 binding: 1111000011110000
+process 12 binding: 0000111100001111
+process 13 binding: 0000111100001111
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-4.out
index 8529a43..e51d1d1 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 0000111100001111
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 1111000011110000
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 0000111100001111
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 1111000011110000
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-8.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out
index e8714ef..8cd2a90 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 1111000011110000
+process 3 binding: 1111000011110000
+process 4 binding: 1111000011110000
+process 5 binding: 1111000011110000
+process 6 binding: 1111000011110000
+process 7 binding: 1111000011110000
+process 8 binding: 0000111100001111
+process 9 binding: 0000111100001111
+process 10 binding: 0000111100001111
+process 11 binding: 0000111100001111
+process 12 binding: 0000111100001111
+process 13 binding: 0000111100001111
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-2.out
index 8529a43..e51d1d1 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 0000111100001111
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 1111000011110000
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 0000111100001111
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 1111000011110000
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-4.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out
index 1c74e8f..cd44e36 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 1111000011110000
+process 3 binding: 1111000011110000
+process 4 binding: 0000111100001111
+process 5 binding: 0000111100001111
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 1111000011110000
+process 11 binding: 1111000011110000
+process 12 binding: 0000111100001111
+process 13 binding: 0000111100001111
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-2.out
index 1c74e8f..cd44e36 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 1111000011110000
+process 3 binding: 1111000011110000
+process 4 binding: 0000111100001111
+process 5 binding: 0000111100001111
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 1111000011110000
+process 11 binding: 1111000011110000
+process 12 binding: 0000111100001111
+process 13 binding: 0000111100001111
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-4.out
index 8529a43..e51d1d1 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 0000111100001111
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 1111000011110000
+process 6 binding: 0000111100001111
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 1111000011110000
+process 10 binding: 0000111100001111
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 1111000011110000
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-8.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out
index e8714ef..8cd2a90 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 1111000011110000
+process 2 binding: 1111000011110000
+process 3 binding: 1111000011110000
+process 4 binding: 1111000011110000
+process 5 binding: 1111000011110000
+process 6 binding: 1111000011110000
+process 7 binding: 1111000011110000
+process 8 binding: 0000111100001111
+process 9 binding: 0000111100001111
+process 10 binding: 0000111100001111
+process 11 binding: 0000111100001111
+process 12 binding: 0000111100001111
+process 13 binding: 0000111100001111
+process 14 binding: 0000111100001111
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out
index 5ecae3c..549ceff 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 0 binding: 1111000011110000
+process 1 binding: 0000111100001111
+process 2 binding: 1111000011110000
+process 3 binding: 0000111100001111
+process 4 binding: 1111000011110000
+process 5 binding: 0000111100001111
+process 6 binding: 1111000011110000
+process 7 binding: 0000111100001111
+process 8 binding: 1111000011110000
+process 9 binding: 0000111100001111
+process 10 binding: 1111000011110000
+process 11 binding: 0000111100001111
+process 12 binding: 1111000011110000
+process 13 binding: 0000111100001111
+process 14 binding: 1111000011110000
+process 15 binding: 0000111100001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.board.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core.out
index dca323c..b60a978 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 11000000
+process 1 binding: 01100000
+process 2 binding: 00110000
+process 3 binding: 00011000
+process 4 binding: 00001100
+process 5 binding: 00000110
+process 6 binding: 00000011
+process 7 binding: 10000001
+process 8 binding: 11000000
+process 9 binding: 01100000
+process 10 binding: 00110000
+process 11 binding: 00011000
+process 12 binding: 00001100
+process 13 binding: 00000110
+process 14 binding: 00000011
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-8.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread.out
index dca323c..b60a978 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 11000000
+process 1 binding: 01100000
+process 2 binding: 00110000
+process 3 binding: 00011000
+process 4 binding: 00001100
+process 5 binding: 00000110
+process 6 binding: 00000011
+process 7 binding: 10000001
+process 8 binding: 11000000
+process 9 binding: 01100000
+process 10 binding: 00110000
+process 11 binding: 00011000
+process 12 binding: 00001100
+process 13 binding: 00000110
+process 14 binding: 00000011
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.numa.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.socket.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.board.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-2.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core.out
index bbf9f7f..28f1652 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1
+process 0 binding: 11110000
+process 1 binding: 01111000
+process 2 binding: 00111100
+process 3 binding: 00011110
+process 4 binding: 00001111
+process 5 binding: 10000111
+process 6 binding: 11000011
+process 7 binding: 11100001
+process 8 binding: 11110000
+process 9 binding: 01111000
+process 10 binding: 00111100
+process 11 binding: 00011110
+process 12 binding: 00001111
+process 13 binding: 10000111
+process 14 binding: 11000011
+process 15 binding: 11100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-2.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-8.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread.out
index bbf9f7f..28f1652 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1
+process 0 binding: 11110000
+process 1 binding: 01111000
+process 2 binding: 00111100
+process 3 binding: 00011110
+process 4 binding: 00001111
+process 5 binding: 10000111
+process 6 binding: 11000011
+process 7 binding: 11100001
+process 8 binding: 11110000
+process 9 binding: 01111000
+process 10 binding: 00111100
+process 11 binding: 00011110
+process 12 binding: 00001111
+process 13 binding: 10000111
+process 14 binding: 11000011
+process 15 binding: 11100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.numa.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.socket.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-2.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-4.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-2.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-4.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-8.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.board.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core.out
index dca323c..b60a978 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 11000000
+process 1 binding: 01100000
+process 2 binding: 00110000
+process 3 binding: 00011000
+process 4 binding: 00001100
+process 5 binding: 00000110
+process 6 binding: 00000011
+process 7 binding: 10000001
+process 8 binding: 11000000
+process 9 binding: 01100000
+process 10 binding: 00110000
+process 11 binding: 00011000
+process 12 binding: 00001100
+process 13 binding: 00000110
+process 14 binding: 00000011
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-8.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread.out
index dca323c..b60a978 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 1 1 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 1 1 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 0 1 1 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 1 1 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 1 1 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 0 1 1 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 11000000
+process 1 binding: 01100000
+process 2 binding: 00110000
+process 3 binding: 00011000
+process 4 binding: 00001100
+process 5 binding: 00000110
+process 6 binding: 00000011
+process 7 binding: 10000001
+process 8 binding: 11000000
+process 9 binding: 01100000
+process 10 binding: 00110000
+process 11 binding: 00011000
+process 12 binding: 00001100
+process 13 binding: 00000110
+process 14 binding: 00000011
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.numa.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.socket.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.board.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-2.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core.out
index bbf9f7f..28f1652 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1
+process 0 binding: 11110000
+process 1 binding: 01111000
+process 2 binding: 00111100
+process 3 binding: 00011110
+process 4 binding: 00001111
+process 5 binding: 10000111
+process 6 binding: 11000011
+process 7 binding: 11100001
+process 8 binding: 11110000
+process 9 binding: 01111000
+process 10 binding: 00111100
+process 11 binding: 00011110
+process 12 binding: 00001111
+process 13 binding: 10000111
+process 14 binding: 11000011
+process 15 binding: 11100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-2.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-4.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-8.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread.out
index bbf9f7f..28f1652 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 1 1 1 1 0 0 0
-process 2 binding: 0 0 1 1 1 1 0 0
-process 3 binding: 0 0 0 1 1 1 1 0
-process 4 binding: 0 0 0 0 1 1 1 1
-process 5 binding: 1 0 0 0 0 1 1 1
-process 6 binding: 1 1 0 0 0 0 1 1
-process 7 binding: 1 1 1 0 0 0 0 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 1 1 1 1 0 0 0
-process 10 binding: 0 0 1 1 1 1 0 0
-process 11 binding: 0 0 0 1 1 1 1 0
-process 12 binding: 0 0 0 0 1 1 1 1
-process 13 binding: 1 0 0 0 0 1 1 1
-process 14 binding: 1 1 0 0 0 0 1 1
-process 15 binding: 1 1 1 0 0 0 0 1
+process 0 binding: 11110000
+process 1 binding: 01111000
+process 2 binding: 00111100
+process 3 binding: 00011110
+process 4 binding: 00001111
+process 5 binding: 10000111
+process 6 binding: 11000011
+process 7 binding: 11100001
+process 8 binding: 11110000
+process 9 binding: 01111000
+process 10 binding: 00111100
+process 11 binding: 00011110
+process 12 binding: 00001111
+process 13 binding: 10000111
+process 14 binding: 11000011
+process 15 binding: 11100001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.numa.out
index 222e431..639ef8b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 1 1
-process 2 binding: 1 1 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 1 1 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 1 1
-process 6 binding: 1 1 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 1 1 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 1 1
-process 10 binding: 1 1 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 1 1 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 1 1
-process 14 binding: 1 1 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 1 1 1 1
+process 0 binding: 11110000
+process 1 binding: 00001111
+process 2 binding: 11110000
+process 3 binding: 00001111
+process 4 binding: 11110000
+process 5 binding: 00001111
+process 6 binding: 11110000
+process 7 binding: 00001111
+process 8 binding: 11110000
+process 9 binding: 00001111
+process 10 binding: 11110000
+process 11 binding: 00001111
+process 12 binding: 11110000
+process 13 binding: 00001111
+process 14 binding: 11110000
+process 15 binding: 00001111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.socket.out
index 791332f..9c79e7b 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 0 0 0 0
-process 1 binding: 0 0 1 1 1 1 0 0
-process 2 binding: 0 0 0 0 1 1 1 1
-process 3 binding: 1 1 0 0 0 0 1 1
-process 4 binding: 1 1 1 1 0 0 0 0
-process 5 binding: 0 0 1 1 1 1 0 0
-process 6 binding: 0 0 0 0 1 1 1 1
-process 7 binding: 1 1 0 0 0 0 1 1
-process 8 binding: 1 1 1 1 0 0 0 0
-process 9 binding: 0 0 1 1 1 1 0 0
-process 10 binding: 0 0 0 0 1 1 1 1
-process 11 binding: 1 1 0 0 0 0 1 1
-process 12 binding: 1 1 1 1 0 0 0 0
-process 13 binding: 0 0 1 1 1 1 0 0
-process 14 binding: 0 0 0 0 1 1 1 1
-process 15 binding: 1 1 0 0 0 0 1 1
+process 0 binding: 11110000
+process 1 binding: 00111100
+process 2 binding: 00001111
+process 3 binding: 11000011
+process 4 binding: 11110000
+process 5 binding: 00111100
+process 6 binding: 00001111
+process 7 binding: 11000011
+process 8 binding: 11110000
+process 9 binding: 00111100
+process 10 binding: 00001111
+process 11 binding: 11000011
+process 12 binding: 11110000
+process 13 binding: 00111100
+process 14 binding: 00001111
+process 15 binding: 11000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread-8.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-2.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-4.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-2.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-4.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-8.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out
index f235420..550aeca 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 1 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 1 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 1 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 1 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 11000000
+process 2 binding: 00110000
+process 3 binding: 00110000
+process 4 binding: 00001100
+process 5 binding: 00001100
+process 6 binding: 00000011
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 11000000
+process 10 binding: 00110000
+process 11 binding: 00110000
+process 12 binding: 00001100
+process 13 binding: 00001100
+process 14 binding: 00000011
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-2.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-4.out
index 1e3810e..8c77db0 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 1 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 1 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 1 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 1 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00001100
+process 2 binding: 00110000
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00001100
+process 6 binding: 00110000
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00001100
+process 10 binding: 00110000
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00001100
+process 14 binding: 00110000
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-8.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out
index f235420..550aeca 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 1 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 1 0 0 0 0
-process 3 binding: 0 0 1 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 1 0 0
-process 5 binding: 0 0 0 0 1 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 1
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 1 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 1 0 0 0 0
-process 11 binding: 0 0 1 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 1 0 0
-process 13 binding: 0 0 0 0 1 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 1
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 11000000
+process 2 binding: 00110000
+process 3 binding: 00110000
+process 4 binding: 00001100
+process 5 binding: 00001100
+process 6 binding: 00000011
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 11000000
+process 10 binding: 00110000
+process 11 binding: 00110000
+process 12 binding: 00001100
+process 13 binding: 00001100
+process 14 binding: 00000011
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out
index f5876e1..f0b26ab 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 0 0 0 0 0 0
-process 1 binding: 0 0 1 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 1 0 0
-process 3 binding: 0 0 0 0 0 0 1 1
-process 4 binding: 1 1 0 0 0 0 0 0
-process 5 binding: 0 0 1 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 1 0 0
-process 7 binding: 0 0 0 0 0 0 1 1
-process 8 binding: 1 1 0 0 0 0 0 0
-process 9 binding: 0 0 1 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 1 0 0
-process 11 binding: 0 0 0 0 0 0 1 1
-process 12 binding: 1 1 0 0 0 0 0 0
-process 13 binding: 0 0 1 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 1 0 0
-process 15 binding: 0 0 0 0 0 0 1 1
+process 0 binding: 11000000
+process 1 binding: 00110000
+process 2 binding: 00001100
+process 3 binding: 00000011
+process 4 binding: 11000000
+process 5 binding: 00110000
+process 6 binding: 00001100
+process 7 binding: 00000011
+process 8 binding: 11000000
+process 9 binding: 00110000
+process 10 binding: 00001100
+process 11 binding: 00000011
+process 12 binding: 11000000
+process 13 binding: 00110000
+process 14 binding: 00001100
+process 15 binding: 00000011
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.board.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-2.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-4.out
index 08a3c94..81989a4 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 1 0 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 1 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 0 1 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 1 0 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 1 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 0 1 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 01010000
+process 2 binding: 00001010
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 01010000
+process 6 binding: 00001010
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 01010000
+process 10 binding: 00001010
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 01010000
+process 14 binding: 00001010
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core.out
index 03e44c6..c99cb8e 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 1 0 1 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 1 0 0 0 0 1 0
-process 4 binding: 0 1 0 1 0 0 0 0
-process 5 binding: 0 0 0 1 0 1 0 0
-process 6 binding: 0 0 0 0 0 1 0 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 1 0 1 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 1 0 0 0 0 1 0
-process 12 binding: 0 1 0 1 0 0 0 0
-process 13 binding: 0 0 0 1 0 1 0 0
-process 14 binding: 0 0 0 0 0 1 0 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 10100000
+process 1 binding: 00101000
+process 2 binding: 00001010
+process 3 binding: 01000010
+process 4 binding: 01010000
+process 5 binding: 00010100
+process 6 binding: 00000101
+process 7 binding: 10000001
+process 8 binding: 10100000
+process 9 binding: 00101000
+process 10 binding: 00001010
+process 11 binding: 01000010
+process 12 binding: 01010000
+process 13 binding: 00010100
+process 14 binding: 00000101
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-2.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-4.out
index 08a3c94..81989a4 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 1 0 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 1 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 0 1 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 1 0 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 1 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 0 1 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 01010000
+process 2 binding: 00001010
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 01010000
+process 6 binding: 00001010
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 01010000
+process 10 binding: 00001010
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 01010000
+process 14 binding: 00001010
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-8.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread.out
index 03e44c6..c99cb8e 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 1 0 1 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 1 0 0 0 0 1 0
-process 4 binding: 0 1 0 1 0 0 0 0
-process 5 binding: 0 0 0 1 0 1 0 0
-process 6 binding: 0 0 0 0 0 1 0 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 1 0 1 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 1 0 0 0 0 1 0
-process 12 binding: 0 1 0 1 0 0 0 0
-process 13 binding: 0 0 0 1 0 1 0 0
-process 14 binding: 0 0 0 0 0 1 0 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 10100000
+process 1 binding: 00101000
+process 2 binding: 00001010
+process 3 binding: 01000010
+process 4 binding: 01010000
+process 5 binding: 00010100
+process 6 binding: 00000101
+process 7 binding: 10000001
+process 8 binding: 10100000
+process 9 binding: 00101000
+process 10 binding: 00001010
+process 11 binding: 01000010
+process 12 binding: 01010000
+process 13 binding: 00010100
+process 14 binding: 00000101
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.numa.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.socket.out
index 08a3c94..81989a4 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 1 0 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 1 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 0 1 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 1 0 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 1 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 0 1 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 01010000
+process 2 binding: 00001010
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 01010000
+process 6 binding: 00001010
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 01010000
+process 10 binding: 00001010
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 01010000
+process 14 binding: 00001010
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.board.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-2.out
index 338dd81..1d852bd 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 1 0 1 0
-process 2 binding: 0 1 0 1 0 1 0 1
-process 3 binding: 1 0 1 0 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 1 0 1 0
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 1 0 1 0 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 1 0 1 0
-process 10 binding: 0 1 0 1 0 1 0 1
-process 11 binding: 1 0 1 0 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 1 0 1 0
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 1 0 1 0 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01011010
+process 2 binding: 01010101
+process 3 binding: 10100101
+process 4 binding: 10101010
+process 5 binding: 01011010
+process 6 binding: 01010101
+process 7 binding: 10100101
+process 8 binding: 10101010
+process 9 binding: 01011010
+process 10 binding: 01010101
+process 11 binding: 10100101
+process 12 binding: 10101010
+process 13 binding: 01011010
+process 14 binding: 01010101
+process 15 binding: 10100101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-4.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core.out
index 04289b2..4e9301c 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 1 0 1 0 1 0
-process 2 binding: 0 1 0 1 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 1 0
-process 4 binding: 0 1 0 1 0 1 0 1
-process 5 binding: 1 0 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 0 1 0 1
-process 7 binding: 1 0 1 0 1 0 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 1 0 1 0 1 0
-process 10 binding: 0 1 0 1 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 1 0
-process 12 binding: 0 1 0 1 0 1 0 1
-process 13 binding: 1 0 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 0 1 0 1
-process 15 binding: 1 0 1 0 1 0 0 1
+process 0 binding: 10101010
+process 1 binding: 01101010
+process 2 binding: 01011010
+process 3 binding: 01010110
+process 4 binding: 01010101
+process 5 binding: 10010101
+process 6 binding: 10100101
+process 7 binding: 10101001
+process 8 binding: 10101010
+process 9 binding: 01101010
+process 10 binding: 01011010
+process 11 binding: 01010110
+process 12 binding: 01010101
+process 13 binding: 10010101
+process 14 binding: 10100101
+process 15 binding: 10101001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-2.out
index 338dd81..1d852bd 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 1 0 1 0
-process 2 binding: 0 1 0 1 0 1 0 1
-process 3 binding: 1 0 1 0 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 1 0 1 0
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 1 0 1 0 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 1 0 1 0
-process 10 binding: 0 1 0 1 0 1 0 1
-process 11 binding: 1 0 1 0 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 1 0 1 0
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 1 0 1 0 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01011010
+process 2 binding: 01010101
+process 3 binding: 10100101
+process 4 binding: 10101010
+process 5 binding: 01011010
+process 6 binding: 01010101
+process 7 binding: 10100101
+process 8 binding: 10101010
+process 9 binding: 01011010
+process 10 binding: 01010101
+process 11 binding: 10100101
+process 12 binding: 10101010
+process 13 binding: 01011010
+process 14 binding: 01010101
+process 15 binding: 10100101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-4.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-8.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread.out
index 04289b2..4e9301c 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 1 0 1 0 1 0
-process 2 binding: 0 1 0 1 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 1 0
-process 4 binding: 0 1 0 1 0 1 0 1
-process 5 binding: 1 0 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 0 1 0 1
-process 7 binding: 1 0 1 0 1 0 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 1 0 1 0 1 0
-process 10 binding: 0 1 0 1 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 1 0
-process 12 binding: 0 1 0 1 0 1 0 1
-process 13 binding: 1 0 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 0 1 0 1
-process 15 binding: 1 0 1 0 1 0 0 1
+process 0 binding: 10101010
+process 1 binding: 01101010
+process 2 binding: 01011010
+process 3 binding: 01010110
+process 4 binding: 01010101
+process 5 binding: 10010101
+process 6 binding: 10100101
+process 7 binding: 10101001
+process 8 binding: 10101010
+process 9 binding: 01101010
+process 10 binding: 01011010
+process 11 binding: 01010110
+process 12 binding: 01010101
+process 13 binding: 10010101
+process 14 binding: 10100101
+process 15 binding: 10101001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.numa.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.socket.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-2.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-4.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-2.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-4.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-8.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.board.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-2.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-4.out
index 08a3c94..81989a4 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 1 0 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 1 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 0 1 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 1 0 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 1 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 0 1 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 01010000
+process 2 binding: 00001010
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 01010000
+process 6 binding: 00001010
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 01010000
+process 10 binding: 00001010
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 01010000
+process 14 binding: 00001010
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core.out
index 03e44c6..c99cb8e 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 1 0 1 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 1 0 0 0 0 1 0
-process 4 binding: 0 1 0 1 0 0 0 0
-process 5 binding: 0 0 0 1 0 1 0 0
-process 6 binding: 0 0 0 0 0 1 0 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 1 0 1 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 1 0 0 0 0 1 0
-process 12 binding: 0 1 0 1 0 0 0 0
-process 13 binding: 0 0 0 1 0 1 0 0
-process 14 binding: 0 0 0 0 0 1 0 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 10100000
+process 1 binding: 00101000
+process 2 binding: 00001010
+process 3 binding: 01000010
+process 4 binding: 01010000
+process 5 binding: 00010100
+process 6 binding: 00000101
+process 7 binding: 10000001
+process 8 binding: 10100000
+process 9 binding: 00101000
+process 10 binding: 00001010
+process 11 binding: 01000010
+process 12 binding: 01010000
+process 13 binding: 00010100
+process 14 binding: 00000101
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-2.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-4.out
index 08a3c94..81989a4 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 1 0 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 1 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 0 1 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 1 0 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 1 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 0 1 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 01010000
+process 2 binding: 00001010
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 01010000
+process 6 binding: 00001010
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 01010000
+process 10 binding: 00001010
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 01010000
+process 14 binding: 00001010
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-8.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread.out
index 03e44c6..c99cb8e 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 1 0 1 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 1 0 0 0 0 1 0
-process 4 binding: 0 1 0 1 0 0 0 0
-process 5 binding: 0 0 0 1 0 1 0 0
-process 6 binding: 0 0 0 0 0 1 0 1
-process 7 binding: 1 0 0 0 0 0 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 1 0 1 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 1 0 0 0 0 1 0
-process 12 binding: 0 1 0 1 0 0 0 0
-process 13 binding: 0 0 0 1 0 1 0 0
-process 14 binding: 0 0 0 0 0 1 0 1
-process 15 binding: 1 0 0 0 0 0 0 1
+process 0 binding: 10100000
+process 1 binding: 00101000
+process 2 binding: 00001010
+process 3 binding: 01000010
+process 4 binding: 01010000
+process 5 binding: 00010100
+process 6 binding: 00000101
+process 7 binding: 10000001
+process 8 binding: 10100000
+process 9 binding: 00101000
+process 10 binding: 00001010
+process 11 binding: 01000010
+process 12 binding: 01010000
+process 13 binding: 00010100
+process 14 binding: 00000101
+process 15 binding: 10000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.numa.out
index a6bf2e4..c60b25f 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 00001010
+process 2 binding: 01010000
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 00001010
+process 6 binding: 01010000
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 00001010
+process 10 binding: 01010000
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 00001010
+process 14 binding: 01010000
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.socket.out
index 08a3c94..81989a4 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-2.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 0 0 0 0
-process 1 binding: 0 1 0 1 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 1 0
-process 3 binding: 0 0 0 0 0 1 0 1
-process 4 binding: 1 0 1 0 0 0 0 0
-process 5 binding: 0 1 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 1 0 1 0
-process 7 binding: 0 0 0 0 0 1 0 1
-process 8 binding: 1 0 1 0 0 0 0 0
-process 9 binding: 0 1 0 1 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 1 0
-process 11 binding: 0 0 0 0 0 1 0 1
-process 12 binding: 1 0 1 0 0 0 0 0
-process 13 binding: 0 1 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 1 0 1 0
-process 15 binding: 0 0 0 0 0 1 0 1
+process 0 binding: 10100000
+process 1 binding: 01010000
+process 2 binding: 00001010
+process 3 binding: 00000101
+process 4 binding: 10100000
+process 5 binding: 01010000
+process 6 binding: 00001010
+process 7 binding: 00000101
+process 8 binding: 10100000
+process 9 binding: 01010000
+process 10 binding: 00001010
+process 11 binding: 00000101
+process 12 binding: 10100000
+process 13 binding: 01010000
+process 14 binding: 00001010
+process 15 binding: 00000101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.board.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-2.out
index 338dd81..1d852bd 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 1 0 1 0
-process 2 binding: 0 1 0 1 0 1 0 1
-process 3 binding: 1 0 1 0 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 1 0 1 0
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 1 0 1 0 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 1 0 1 0
-process 10 binding: 0 1 0 1 0 1 0 1
-process 11 binding: 1 0 1 0 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 1 0 1 0
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 1 0 1 0 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01011010
+process 2 binding: 01010101
+process 3 binding: 10100101
+process 4 binding: 10101010
+process 5 binding: 01011010
+process 6 binding: 01010101
+process 7 binding: 10100101
+process 8 binding: 10101010
+process 9 binding: 01011010
+process 10 binding: 01010101
+process 11 binding: 10100101
+process 12 binding: 10101010
+process 13 binding: 01011010
+process 14 binding: 01010101
+process 15 binding: 10100101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-4.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core.out
index 04289b2..4e9301c 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 1 0 1 0 1 0
-process 2 binding: 0 1 0 1 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 1 0
-process 4 binding: 0 1 0 1 0 1 0 1
-process 5 binding: 1 0 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 0 1 0 1
-process 7 binding: 1 0 1 0 1 0 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 1 0 1 0 1 0
-process 10 binding: 0 1 0 1 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 1 0
-process 12 binding: 0 1 0 1 0 1 0 1
-process 13 binding: 1 0 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 0 1 0 1
-process 15 binding: 1 0 1 0 1 0 0 1
+process 0 binding: 10101010
+process 1 binding: 01101010
+process 2 binding: 01011010
+process 3 binding: 01010110
+process 4 binding: 01010101
+process 5 binding: 10010101
+process 6 binding: 10100101
+process 7 binding: 10101001
+process 8 binding: 10101010
+process 9 binding: 01101010
+process 10 binding: 01011010
+process 11 binding: 01010110
+process 12 binding: 01010101
+process 13 binding: 10010101
+process 14 binding: 10100101
+process 15 binding: 10101001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-2.out
index 338dd81..1d852bd 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 1 0 1 0
-process 2 binding: 0 1 0 1 0 1 0 1
-process 3 binding: 1 0 1 0 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 1 0 1 0
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 1 0 1 0 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 1 0 1 0
-process 10 binding: 0 1 0 1 0 1 0 1
-process 11 binding: 1 0 1 0 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 1 0 1 0
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 1 0 1 0 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01011010
+process 2 binding: 01010101
+process 3 binding: 10100101
+process 4 binding: 10101010
+process 5 binding: 01011010
+process 6 binding: 01010101
+process 7 binding: 10100101
+process 8 binding: 10101010
+process 9 binding: 01011010
+process 10 binding: 01010101
+process 11 binding: 10100101
+process 12 binding: 10101010
+process 13 binding: 01011010
+process 14 binding: 01010101
+process 15 binding: 10100101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-4.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-8.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread.out
index 04289b2..4e9301c 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 1 0 1 0 1 0
-process 2 binding: 0 1 0 1 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 1 0
-process 4 binding: 0 1 0 1 0 1 0 1
-process 5 binding: 1 0 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 0 1 0 1
-process 7 binding: 1 0 1 0 1 0 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 1 0 1 0 1 0
-process 10 binding: 0 1 0 1 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 1 0
-process 12 binding: 0 1 0 1 0 1 0 1
-process 13 binding: 1 0 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 0 1 0 1
-process 15 binding: 1 0 1 0 1 0 0 1
+process 0 binding: 10101010
+process 1 binding: 01101010
+process 2 binding: 01011010
+process 3 binding: 01010110
+process 4 binding: 01010101
+process 5 binding: 10010101
+process 6 binding: 10100101
+process 7 binding: 10101001
+process 8 binding: 10101010
+process 9 binding: 01101010
+process 10 binding: 01011010
+process 11 binding: 01010110
+process 12 binding: 01010101
+process 13 binding: 10010101
+process 14 binding: 10100101
+process 15 binding: 10101001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.numa.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.socket.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-4.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread-8.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-2.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-4.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-2.out
index 6ab904f..7f889e6 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 0 0 1 0 0 0
-process 2 binding: 0 1 0 0 0 0 0 0
-process 3 binding: 0 0 0 0 0 1 0 0
-process 4 binding: 0 0 1 0 0 0 0 0
-process 5 binding: 0 0 0 0 0 0 1 0
-process 6 binding: 0 0 0 1 0 0 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 0 0 1 0 0 0
-process 10 binding: 0 1 0 0 0 0 0 0
-process 11 binding: 0 0 0 0 0 1 0 0
-process 12 binding: 0 0 1 0 0 0 0 0
-process 13 binding: 0 0 0 0 0 0 1 0
-process 14 binding: 0 0 0 1 0 0 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00001000
+process 2 binding: 01000000
+process 3 binding: 00000100
+process 4 binding: 00100000
+process 5 binding: 00000010
+process 6 binding: 00010000
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00001000
+process 10 binding: 01000000
+process 11 binding: 00000100
+process 12 binding: 00100000
+process 13 binding: 00000010
+process 14 binding: 00010000
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-4.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-8.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out
index f9ac915..e965f15 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 0 1 0 0 0 0 0
-process 2 binding: 0 0 0 0 1 0 0 0
-process 3 binding: 0 0 0 0 0 0 1 0
-process 4 binding: 0 1 0 0 0 0 0 0
-process 5 binding: 0 0 0 1 0 0 0 0
-process 6 binding: 0 0 0 0 0 1 0 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 0 1 0 0 0 0 0
-process 10 binding: 0 0 0 0 1 0 0 0
-process 11 binding: 0 0 0 0 0 0 1 0
-process 12 binding: 0 1 0 0 0 0 0 0
-process 13 binding: 0 0 0 1 0 0 0 0
-process 14 binding: 0 0 0 0 0 1 0 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 00100000
+process 2 binding: 00001000
+process 3 binding: 00000010
+process 4 binding: 01000000
+process 5 binding: 00010000
+process 6 binding: 00000100
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 00100000
+process 10 binding: 00001000
+process 11 binding: 00000010
+process 12 binding: 01000000
+process 13 binding: 00010000
+process 14 binding: 00000100
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out
index 8212b98..4ecca6a 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 0 0 0 0 0 0
-process 1 binding: 0 1 0 0 0 0 0 0
-process 2 binding: 0 0 1 0 0 0 0 0
-process 3 binding: 0 0 0 1 0 0 0 0
-process 4 binding: 0 0 0 0 1 0 0 0
-process 5 binding: 0 0 0 0 0 1 0 0
-process 6 binding: 0 0 0 0 0 0 1 0
-process 7 binding: 0 0 0 0 0 0 0 1
-process 8 binding: 1 0 0 0 0 0 0 0
-process 9 binding: 0 1 0 0 0 0 0 0
-process 10 binding: 0 0 1 0 0 0 0 0
-process 11 binding: 0 0 0 1 0 0 0 0
-process 12 binding: 0 0 0 0 1 0 0 0
-process 13 binding: 0 0 0 0 0 1 0 0
-process 14 binding: 0 0 0 0 0 0 1 0
-process 15 binding: 0 0 0 0 0 0 0 1
+process 0 binding: 10000000
+process 1 binding: 01000000
+process 2 binding: 00100000
+process 3 binding: 00010000
+process 4 binding: 00001000
+process 5 binding: 00000100
+process 6 binding: 00000010
+process 7 binding: 00000001
+process 8 binding: 10000000
+process 9 binding: 01000000
+process 10 binding: 00100000
+process 11 binding: 00010000
+process 12 binding: 00001000
+process 13 binding: 00000100
+process 14 binding: 00000010
+process 15 binding: 00000001
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-2.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-4.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-8.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out
index 6fbbe47..11fab74 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 1 1 1 1 1 1 1
-process 1 binding: 1 1 1 1 1 1 1 1
-process 2 binding: 1 1 1 1 1 1 1 1
-process 3 binding: 1 1 1 1 1 1 1 1
-process 4 binding: 1 1 1 1 1 1 1 1
-process 5 binding: 1 1 1 1 1 1 1 1
-process 6 binding: 1 1 1 1 1 1 1 1
-process 7 binding: 1 1 1 1 1 1 1 1
-process 8 binding: 1 1 1 1 1 1 1 1
-process 9 binding: 1 1 1 1 1 1 1 1
-process 10 binding: 1 1 1 1 1 1 1 1
-process 11 binding: 1 1 1 1 1 1 1 1
-process 12 binding: 1 1 1 1 1 1 1 1
-process 13 binding: 1 1 1 1 1 1 1 1
-process 14 binding: 1 1 1 1 1 1 1 1
-process 15 binding: 1 1 1 1 1 1 1 1
+process 0 binding: 11111111
+process 1 binding: 11111111
+process 2 binding: 11111111
+process 3 binding: 11111111
+process 4 binding: 11111111
+process 5 binding: 11111111
+process 6 binding: 11111111
+process 7 binding: 11111111
+process 8 binding: 11111111
+process 9 binding: 11111111
+process 10 binding: 11111111
+process 11 binding: 11111111
+process 12 binding: 11111111
+process 13 binding: 11111111
+process 14 binding: 11111111
+process 15 binding: 11111111
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-2.out
index 793a69e..8c45eaa 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 1 0 1 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 1 0 1
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 1 0 1 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 1 0 1 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 1 0 1
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 1 0 1 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 10101010
+process 2 binding: 01010101
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 10101010
+process 6 binding: 01010101
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 10101010
+process 10 binding: 01010101
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 10101010
+process 14 binding: 01010101
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-4.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out
index 9f36647..a3fd96c 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 1 0 1 0 1 0 1 0
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 1 0 1 0 1 0 1 0
-process 4 binding: 0 1 0 1 0 1 0 1
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 1 0 1 0 1 0 1 0
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 1 0 1 0 1 0 1 0
-process 12 binding: 0 1 0 1 0 1 0 1
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 10101010
+process 2 binding: 10101010
+process 3 binding: 10101010
+process 4 binding: 01010101
+process 5 binding: 01010101
+process 6 binding: 01010101
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 10101010
+process 10 binding: 10101010
+process 11 binding: 10101010
+process 12 binding: 01010101
+process 13 binding: 01010101
+process 14 binding: 01010101
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-2.out
index 793a69e..8c45eaa 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-2.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-2.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 1 0 1 0 1 0 1 0
-process 2 binding: 0 1 0 1 0 1 0 1
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 1 0 1 0 1 0 1 0
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 1 0 1 0 1 0 1 0
-process 10 binding: 0 1 0 1 0 1 0 1
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 1 0 1 0 1 0 1 0
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 10101010
+process 2 binding: 01010101
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 10101010
+process 6 binding: 01010101
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 10101010
+process 10 binding: 01010101
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 10101010
+process 14 binding: 01010101
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-4.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-4.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-4.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-8.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-8.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread-8.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out
index 9f36647..a3fd96c 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 1 0 1 0 1 0 1 0
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 1 0 1 0 1 0 1 0
-process 4 binding: 0 1 0 1 0 1 0 1
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 0 1 0 1 0 1 0 1
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 1 0 1 0 1 0 1 0
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 1 0 1 0 1 0 1 0
-process 12 binding: 0 1 0 1 0 1 0 1
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 0 1 0 1 0 1 0 1
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 10101010
+process 2 binding: 10101010
+process 3 binding: 10101010
+process 4 binding: 01010101
+process 5 binding: 01010101
+process 6 binding: 01010101
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 10101010
+process 10 binding: 10101010
+process 11 binding: 10101010
+process 12 binding: 01010101
+process 13 binding: 01010101
+process 14 binding: 01010101
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out
index c97689f..3416c13 100644
--- a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out
@@ -1,16 +1,16 @@
-process 0 binding: 1 0 1 0 1 0 1 0
-process 1 binding: 0 1 0 1 0 1 0 1
-process 2 binding: 1 0 1 0 1 0 1 0
-process 3 binding: 0 1 0 1 0 1 0 1
-process 4 binding: 1 0 1 0 1 0 1 0
-process 5 binding: 0 1 0 1 0 1 0 1
-process 6 binding: 1 0 1 0 1 0 1 0
-process 7 binding: 0 1 0 1 0 1 0 1
-process 8 binding: 1 0 1 0 1 0 1 0
-process 9 binding: 0 1 0 1 0 1 0 1
-process 10 binding: 1 0 1 0 1 0 1 0
-process 11 binding: 0 1 0 1 0 1 0 1
-process 12 binding: 1 0 1 0 1 0 1 0
-process 13 binding: 0 1 0 1 0 1 0 1
-process 14 binding: 1 0 1 0 1 0 1 0
-process 15 binding: 0 1 0 1 0 1 0 1
+process 0 binding: 10101010
+process 1 binding: 01010101
+process 2 binding: 10101010
+process 3 binding: 01010101
+process 4 binding: 10101010
+process 5 binding: 01010101
+process 6 binding: 10101010
+process 7 binding: 01010101
+process 8 binding: 10101010
+process 9 binding: 01010101
+process 10 binding: 10101010
+process 11 binding: 01010101
+process 12 binding: 10101010
+process 13 binding: 01010101
+process 14 binding: 10101010
+process 15 binding: 01010101
diff --git a/test/mpi/impls/mpich/Makefile.in b/test/mpi/impls/mpich/Makefile.in
index 65fa943..933c445 100644
--- a/test/mpi/impls/mpich/Makefile.in
+++ b/test/mpi/impls/mpich/Makefile.in
@@ -366,6 +366,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -384,7 +385,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
static_subdirs = mpi_t
# For future tests - note that the IO and RMA directories are optional,
@@ -712,10 +713,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/impls/mpich/mpi_t/Makefile.in b/test/mpi/impls/mpich/mpi_t/Makefile.in
index e214b5d..6505492 100644
--- a/test/mpi/impls/mpich/mpi_t/Makefile.in
+++ b/test/mpi/impls/mpich/mpi_t/Makefile.in
@@ -350,6 +350,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -368,7 +369,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -649,10 +650,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/impls/mpich/mpi_t/collparmt.c b/test/mpi/impls/mpich/mpi_t/collparmt.c
index f816c2e..6aec105 100644
--- a/test/mpi/impls/mpich/mpi_t/collparmt.c
+++ b/test/mpi/impls/mpich/mpi_t/collparmt.c
@@ -5,8 +5,10 @@
*/
/* */
#include <stdio.h>
+#include <string.h>
#include "mpi.h"
#include "mpitestconf.h"
+#include "mpitest.h"
int main(int argc, char *argv[])
{
@@ -23,6 +25,10 @@ int main(int argc, char *argv[])
int newval;
int errs = 0;
+ MTEST_VG_MEM_INIT(buf1, 400 * sizeof(char));
+ MTEST_VG_MEM_INIT(buf2, 400 * sizeof(char));
+ MTEST_VG_MEM_INIT(buf3, 400 * sizeof(char));
+
MPI_Init(&argc, &argv);
MPI_T_init_thread(MPI_THREAD_SINGLE, &provided);
diff --git a/test/mpi/include/mpitest.h b/test/mpi/include/mpitest.h
index 984c8c0..0932996 100644
--- a/test/mpi/include/mpitest.h
+++ b/test/mpi/include/mpitest.h
@@ -7,6 +7,7 @@
#ifndef MPITEST_H_INCLUDED
#define MPITEST_H_INCLUDED
+#include <string.h>
#include "mpitestconf.h"
/*
@@ -127,4 +128,10 @@ void MTestFreeWin(MPI_Win *);
((MTEST_MPI_VERSION == (major_) && MTEST_MPI_SUBVERSION >= (minor_)) || \
(MTEST_MPI_VERSION > (major_)))
+/* useful for avoid valgrind warnings about padding bytes */
+#define MTEST_VG_MEM_INIT(addr_, size_) \
+do { \
+ memset(addr_, 0, size_); \
+} while (0)
+
#endif
diff --git a/test/mpi/include/mpitestcxx.h b/test/mpi/include/mpitestcxx.h
index 6c1e878..1ea6d6c 100644
--- a/test/mpi/include/mpitestcxx.h
+++ b/test/mpi/include/mpitestcxx.h
@@ -10,6 +10,8 @@
#ifndef MTEST_INCLUDED
#define MTEST_INCLUDED
+
+#include <string.h>
/*
* Init and finalize test
*/
@@ -64,4 +66,10 @@ const char *MTestGetWinName(void);
void MTestFreeWin(MPI::Win &);
#endif
+/* useful for avoid valgrind warnings about padding bytes */
+#define MTEST_VG_MEM_INIT(addr_, size_) \
+do { \
+ memset(addr_, 0, size_); \
+} while (0)
+
#endif
diff --git a/test/mpi/include/mpithreadtest.h b/test/mpi/include/mpithreadtest.h
index 669f933..2bc6899 100644
--- a/test/mpi/include/mpithreadtest.h
+++ b/test/mpi/include/mpithreadtest.h
@@ -23,7 +23,6 @@
#define MTEST_THREAD_HANDLE HANDLE
#define MTEST_THREAD_LOCK_TYPE HANDLE
#elif defined(HAVE_PTHREAD_H)
-#define USE_PTHREADS 1
#include <pthread.h>
#define MTEST_THREAD_RETURN_TYPE void *
#define MTEST_THREAD_HANDLE pthread_t
diff --git a/test/mpi/info/Makefile.in b/test/mpi/info/Makefile.in
index 98cfb57..3949777 100644
--- a/test/mpi/info/Makefile.in
+++ b/test/mpi/info/Makefile.in
@@ -403,6 +403,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -421,7 +422,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -742,10 +743,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/init/Makefile.in b/test/mpi/init/Makefile.in
index 34dd89d..6932a9e 100644
--- a/test/mpi/init/Makefile.in
+++ b/test/mpi/init/Makefile.in
@@ -402,6 +402,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -420,7 +421,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -741,10 +742,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/io/Makefile.am b/test/mpi/io/Makefile.am
index e03cdb3..a7e53ac 100644
--- a/test/mpi/io/Makefile.am
+++ b/test/mpi/io/Makefile.am
@@ -26,7 +26,8 @@ noinst_PROGRAMS = \
resized2 \
bigtype \
hindexed_io \
- simple_collective
+ simple_collective \
+ external32-derived-dtype
if BUILD_MPIX_TESTS
diff --git a/test/mpi/io/Makefile.in b/test/mpi/io/Makefile.in
index cc60c7a..fb38735 100644
--- a/test/mpi/io/Makefile.in
+++ b/test/mpi/io/Makefile.in
@@ -99,7 +99,8 @@ noinst_PROGRAMS = rdwrord$(EXEEXT) rdwrzero$(EXEEXT) \
i_noncontig$(EXEEXT) async$(EXEEXT) async_any$(EXEEXT) \
userioerr$(EXEEXT) resized$(EXEEXT) resized2$(EXEEXT) \
bigtype$(EXEEXT) hindexed_io$(EXEEXT) \
- simple_collective$(EXEEXT) $(am__EXEEXT_1)
+ simple_collective$(EXEEXT) external32-derived-dtype$(EXEEXT) \
+ $(am__EXEEXT_1)
@BUILD_MPIX_TESTS_TRUE at am__append_1 = \
@BUILD_MPIX_TESTS_TRUE@ i_bigtype \
@BUILD_MPIX_TESTS_TRUE@ i_hindexed_io \
@@ -163,6 +164,12 @@ bigtype_LDADD = $(LDADD)
bigtype_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+external32_derived_dtype_SOURCES = external32-derived-dtype.c
+external32_derived_dtype_OBJECTS = external32-derived-dtype.$(OBJEXT)
+external32_derived_dtype_LDADD = $(LDADD)
+external32_derived_dtype_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
getextent_SOURCES = getextent.c
getextent_OBJECTS = getextent.$(OBJEXT)
getextent_LDADD = $(LDADD)
@@ -329,14 +336,15 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = async.c async_any.c bigtype.c getextent.c hindexed_io.c \
- i_aggregation1.c i_aggregation2.c i_bigtype.c i_coll_test.c \
- i_darray_read.c i_hindexed.c i_hindexed_io.c i_noncontig.c \
- i_noncontig_coll.c i_noncontig_coll2.c i_rdwrord.c \
- i_setviewcur.c i_types_with_zeros.c rdwrord.c rdwrzero.c \
- resized.c resized2.c setinfo.c setviewcur.c \
- simple_collective.c userioerr.c
-DIST_SOURCES = async.c async_any.c bigtype.c getextent.c hindexed_io.c \
+SOURCES = async.c async_any.c bigtype.c external32-derived-dtype.c \
+ getextent.c hindexed_io.c i_aggregation1.c i_aggregation2.c \
+ i_bigtype.c i_coll_test.c i_darray_read.c i_hindexed.c \
+ i_hindexed_io.c i_noncontig.c i_noncontig_coll.c \
+ i_noncontig_coll2.c i_rdwrord.c i_setviewcur.c \
+ i_types_with_zeros.c rdwrord.c rdwrzero.c resized.c resized2.c \
+ setinfo.c setviewcur.c simple_collective.c userioerr.c
+DIST_SOURCES = async.c async_any.c bigtype.c \
+ external32-derived-dtype.c getextent.c hindexed_io.c \
i_aggregation1.c i_aggregation2.c i_bigtype.c i_coll_test.c \
i_darray_read.c i_hindexed.c i_hindexed_io.c i_noncontig.c \
i_noncontig_coll.c i_noncontig_coll2.c i_rdwrord.c \
@@ -543,6 +551,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -561,7 +570,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
all: all-am
@@ -615,6 +624,10 @@ bigtype$(EXEEXT): $(bigtype_OBJECTS) $(bigtype_DEPENDENCIES) $(EXTRA_bigtype_DEP
@rm -f bigtype$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(bigtype_OBJECTS) $(bigtype_LDADD) $(LIBS)
+external32-derived-dtype$(EXEEXT): $(external32_derived_dtype_OBJECTS) $(external32_derived_dtype_DEPENDENCIES) $(EXTRA_external32_derived_dtype_DEPENDENCIES)
+ @rm -f external32-derived-dtype$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(external32_derived_dtype_OBJECTS) $(external32_derived_dtype_LDADD) $(LIBS)
+
getextent$(EXEEXT): $(getextent_OBJECTS) $(getextent_DEPENDENCIES) $(EXTRA_getextent_DEPENDENCIES)
@rm -f getextent$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(getextent_OBJECTS) $(getextent_LDADD) $(LIBS)
@@ -716,6 +729,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/async.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/async_any.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bigtype.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/external32-derived-dtype.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getextent.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hindexed_io.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/i_aggregation1.Po at am__quote@
@@ -970,10 +984,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
clean-local:
-rm -f testfile testfile.*
diff --git a/test/mpi/io/async.c b/test/mpi/io/async.c
index aa0141b..1bd75d3 100644
--- a/test/mpi/io/async.c
+++ b/test/mpi/io/async.c
@@ -59,6 +59,7 @@ int main(int argc, char **argv)
i++;
len = (int) strlen(*argv);
filename = (char *) malloc(len + 10);
+ MTEST_VG_MEM_INIT(filename, (len + 10) * sizeof(char));
strcpy(filename, *argv);
}
else if (strcmp(*argv, "-size") == 0) {
@@ -83,6 +84,7 @@ int main(int argc, char **argv)
/* Use a default filename of testfile */
len = 8;
filename = (char *) malloc(len + 10);
+ MTEST_VG_MEM_INIT(filename, (len + 10) * sizeof(char));
strcpy(filename, "testfile");
}
MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD);
diff --git a/test/mpi/io/async_any.c b/test/mpi/io/async_any.c
index 450894a..00b37e8 100644
--- a/test/mpi/io/async_any.c
+++ b/test/mpi/io/async_any.c
@@ -44,6 +44,7 @@ int main(int argc, char **argv)
/* Use a default filename of testfile */
len = 8;
filename = (char *) malloc(len + 10);
+ memset(filename, 0, (len + 10) * sizeof(char));
strcpy(filename, "testfile");
/*
* fprintf(stderr, "\n*# Usage: async_any -fname filename\n\n");
@@ -54,6 +55,7 @@ int main(int argc, char **argv)
argv++;
len = (int) strlen(*argv);
filename = (char *) malloc(len + 10);
+ MTEST_VG_MEM_INIT(filename, (len + 10) * sizeof(char));
strcpy(filename, *argv);
}
MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD);
@@ -62,6 +64,7 @@ int main(int argc, char **argv)
else {
MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD);
filename = (char *) malloc(len + 10);
+ MTEST_VG_MEM_INIT(filename, (len + 10) * sizeof(char));
MPI_Bcast(filename, len + 10, MPI_CHAR, 0, MPI_COMM_WORLD);
}
diff --git a/test/mpi/io/bigtype.c b/test/mpi/io/bigtype.c
index a5f6cea..760894c 100644
--- a/test/mpi/io/bigtype.c
+++ b/test/mpi/io/bigtype.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include <mpi.h>
#include <stdio.h>
#include <string.h>
diff --git a/test/mpi/io/external32-derived-dtype.c b/test/mpi/io/external32-derived-dtype.c
new file mode 100644
index 0000000..8391a22
--- /dev/null
+++ b/test/mpi/io/external32-derived-dtype.c
@@ -0,0 +1,106 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include "mpi.h"
+
+static void read_file(const char *name, void *buf, MPI_Datatype dt)
+{
+ int rank, rc;
+ MPI_File fh;
+ char datarep[] = "external32";
+ int amode = MPI_MODE_RDONLY;
+ MPI_Status status;
+ MPI_Offset offset;
+
+ /* get our rank */
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+ /* open file */
+ rc = MPI_File_open(MPI_COMM_WORLD, (char *) name,
+ amode, MPI_INFO_NULL, &fh);
+ if (rc != MPI_SUCCESS) {
+ printf("Rank %d: Failed to open file %s\n", rank, name);
+ fflush(stdout);
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ return;
+ }
+
+ /* set file view to be sequence of datatypes past header */
+ MPI_File_set_view(fh, 0, dt, dt, datarep, MPI_INFO_NULL);
+
+ /* issue a collective read: In 3.2 and older the external32 code
+ * path had a bug that would cause an overlapping memcopy and crash
+ */
+ offset = rank;
+ MPI_File_read_at_all(fh, offset, buf, 1, dt, &status);
+
+ /* close file */
+ MPI_File_close(&fh);
+
+ return;
+}
+
+static void write_file(const char *name, void *buf, MPI_Datatype dt)
+{
+ int rank, amode;
+ char datarep[] = "external32";
+ MPI_Status status;
+ MPI_File fh;
+ MPI_Offset offset;
+
+ /* get our rank in job */
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+ /* open file */
+ amode = MPI_MODE_WRONLY | MPI_MODE_CREATE;
+ MPI_File_open(MPI_COMM_WORLD, (char *) name, amode, MPI_INFO_NULL, &fh);
+
+ /* truncate file to 0 bytes */
+ MPI_File_set_size(fh, 0);
+
+ /* set file view to be sequence of datatypes past header */
+ MPI_File_set_view(fh, 0, dt, dt, datarep, MPI_INFO_NULL);
+
+ /* collective write of file info */
+ offset = rank;
+ MPI_File_write_at_all(fh, offset, buf, 1, dt, &status);
+
+ /* close file */
+ MPI_File_close(&fh);
+
+ return;
+}
+
+/* write and read a file in which each process writes one int
+ * in rank order */
+int main(int argc, char *argv[])
+{
+
+ char buf[2] = "a";
+ MPI_Datatype dt;
+ int blocks[2] = { 1, 1 };
+ int disps[2] = { 0, 1 };
+
+ MPI_Init(&argc, &argv);
+ MPI_Type_indexed(2, blocks, disps, MPI_CHAR, &dt);
+ MPI_Type_commit(&dt);
+
+ write_file("testfile", buf, dt);
+
+ read_file("testfile", buf, dt);
+
+ MPI_Type_free(&dt);
+
+ /* if we get this far, then we've passed. No verification in this test at
+ * this time. */
+ fprintf(stdout, " No Errors\n");
+
+ MPI_Finalize();
+
+ return 0;
+}
diff --git a/test/mpi/io/hindexed_io.c b/test/mpi/io/hindexed_io.c
index 475fc5a..662b9a8 100644
--- a/test/mpi/io/hindexed_io.c
+++ b/test/mpi/io/hindexed_io.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include <mpi.h>
#include <stdio.h>
#include <string.h>
@@ -30,7 +36,6 @@ int main(int argc, char **argv)
int data_size = DATA_SIZE;
int i, j, k, nr_errors = 0;
MPI_Aint disp[BLK_COUNT];
- int block_lens[BLK_COUNT];
char *filename = "unnamed.dat";
MPI_Init(&argc, &argv);
@@ -38,10 +43,6 @@ int main(int argc, char **argv)
disp[1] = (MPI_Aint) (data_size * 1 + PAD);
disp[2] = (MPI_Aint) (data_size * 2 + PAD);
- block_lens[0] = data_size;
- block_lens[1] = data_size;
- block_lens[2] = data_size;
-
data = malloc(data_size);
verify = malloc(data_size * BLK_COUNT + HEADER + PAD);
for (i = 0; i < data_size / sizeof(int); i++)
@@ -100,5 +101,6 @@ int main(int argc, char **argv)
MPI_Finalize();
free(data);
+ free(verify);
return 0;
}
diff --git a/test/mpi/io/i_coll_test.c b/test/mpi/io/i_coll_test.c
index b43c56c..8cc0b97 100644
--- a/test/mpi/io/i_coll_test.c
+++ b/test/mpi/io/i_coll_test.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2009 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
diff --git a/test/mpi/io/i_hindexed_io.c b/test/mpi/io/i_hindexed_io.c
index 9b99e04..d186123 100644
--- a/test/mpi/io/i_hindexed_io.c
+++ b/test/mpi/io/i_hindexed_io.c
@@ -110,5 +110,6 @@ int main(int argc, char **argv)
MPI_Finalize();
free(data);
+ free(verify);
return 0;
}
diff --git a/test/mpi/io/simple_collective.c b/test/mpi/io/simple_collective.c
index 54e32fa..5bf5512 100644
--- a/test/mpi/io/simple_collective.c
+++ b/test/mpi/io/simple_collective.c
@@ -19,8 +19,6 @@
* I am surprised src/mpi/romio/test/create_excl.c did not uncover the bug
*/
-#define _LARGEFILE64_SOURCE
-
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/test/mpi/io/testlist.in b/test/mpi/io/testlist.in
index 9604d33..0760eb2 100644
--- a/test/mpi/io/testlist.in
+++ b/test/mpi/io/testlist.in
@@ -12,6 +12,7 @@ resized2 1
bigtype 1
hindexed_io 1
simple_collective 1 arg="simple_collective.testfile"
+external32-derived-dtype 1
i_bigtype 1 mpiversion=3.1
i_hindexed_io 1 mpiversion=3.1
i_rdwrord 4 mpiversion=3.1
diff --git a/test/mpi/manual/Makefile.in b/test/mpi/manual/Makefile.in
index af2d54a..af9d997 100644
--- a/test/mpi/manual/Makefile.in
+++ b/test/mpi/manual/Makefile.in
@@ -425,6 +425,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -443,7 +444,8 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml test-port
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap \
+ $(SUMMARY_BASENAME).junit.xml test-port
SUBDIRS = mpi_t
# testconnectserial would like MPICHLIBSTR to be defined as the installation
@@ -839,10 +841,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/manual/mpi_t/Makefile.in b/test/mpi/manual/mpi_t/Makefile.in
index af05058..abe1d03 100644
--- a/test/mpi/manual/mpi_t/Makefile.in
+++ b/test/mpi/manual/mpi_t/Makefile.in
@@ -372,6 +372,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -390,7 +391,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
# these tests are specific to the MPICH ch3:nemesis implementation of nemesis
nemesis_tests = nem_fbox_fallback_to_queue_count \
@@ -690,10 +691,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/mpi_t/Makefile.in b/test/mpi/mpi_t/Makefile.in
index a13afed..07abfae 100644
--- a/test/mpi/mpi_t/Makefile.in
+++ b/test/mpi/mpi_t/Makefile.in
@@ -369,6 +369,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -387,7 +388,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -683,10 +684,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/perf/Makefile.in b/test/mpi/perf/Makefile.in
index 18b8eb1..f08f2bb 100644
--- a/test/mpi/perf/Makefile.in
+++ b/test/mpi/perf/Makefile.in
@@ -426,6 +426,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -444,7 +445,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
# Force all tests to be compiled with optimization
@@ -847,10 +848,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/pt2pt/Makefile.am b/test/mpi/pt2pt/Makefile.am
index d31d31c..9deae41 100644
--- a/test/mpi/pt2pt/Makefile.am
+++ b/test/mpi/pt2pt/Makefile.am
@@ -53,5 +53,7 @@ noinst_PROGRAMS = \
sendall \
large_message \
mprobe \
- big_count_status
-
+ big_count_status \
+ many_isend \
+ manylmt \
+ dtype_send
diff --git a/test/mpi/pt2pt/Makefile.in b/test/mpi/pt2pt/Makefile.in
index 7ca0117..ce7bcfd 100644
--- a/test/mpi/pt2pt/Makefile.in
+++ b/test/mpi/pt2pt/Makefile.in
@@ -108,7 +108,8 @@ noinst_PROGRAMS = anyall$(EXEEXT) bottom$(EXEEXT) bsend1$(EXEEXT) \
waitany-null$(EXEEXT) pingping$(EXEEXT) probe-unexp$(EXEEXT) \
probenull$(EXEEXT) inactivereq$(EXEEXT) waittestnull$(EXEEXT) \
sendall$(EXEEXT) large_message$(EXEEXT) mprobe$(EXEEXT) \
- big_count_status$(EXEEXT)
+ big_count_status$(EXEEXT) many_isend$(EXEEXT) manylmt$(EXEEXT) \
+ dtype_send$(EXEEXT)
subdir = pt2pt
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cache.m4 \
@@ -206,6 +207,12 @@ cancelrecv_LDADD = $(LDADD)
cancelrecv_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+dtype_send_SOURCES = dtype_send.c
+dtype_send_OBJECTS = dtype_send.$(OBJEXT)
+dtype_send_LDADD = $(LDADD)
+dtype_send_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
eagerdt_SOURCES = eagerdt.c
eagerdt_OBJECTS = eagerdt.$(OBJEXT)
eagerdt_LDADD = $(LDADD)
@@ -260,6 +267,18 @@ large_message_LDADD = $(LDADD)
large_message_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+many_isend_SOURCES = many_isend.c
+many_isend_OBJECTS = many_isend.$(OBJEXT)
+many_isend_LDADD = $(LDADD)
+many_isend_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
+manylmt_SOURCES = manylmt.c
+manylmt_OBJECTS = manylmt.$(OBJEXT)
+manylmt_LDADD = $(LDADD)
+manylmt_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
mprobe_SOURCES = mprobe.c
mprobe_OBJECTS = mprobe.$(OBJEXT)
mprobe_LDADD = $(LDADD)
@@ -404,22 +423,24 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = anyall.c big_count_status.c bottom.c bsend1.c bsend2.c \
bsend3.c bsend4.c bsend5.c bsendalign.c bsendfrag.c \
- bsendpending.c cancelanysrc.c cancelrecv.c eagerdt.c greq1.c \
- icsend.c inactivereq.c isendirecv.c isendself.c \
- isendselfprobe.c issendselfcancel.c large_message.c mprobe.c \
- pingping.c probe-unexp.c probenull.c pscancel.c rcancel.c \
- rqfreeb.c rqstatus.c scancel.c scancel2.c scancel_unmatch.c \
- sendall.c sendflood.c sendrecv1.c sendrecv2.c sendrecv3.c \
- sendself.c waitany-null.c waittestnull.c
+ bsendpending.c cancelanysrc.c cancelrecv.c dtype_send.c \
+ eagerdt.c greq1.c icsend.c inactivereq.c isendirecv.c \
+ isendself.c isendselfprobe.c issendselfcancel.c \
+ large_message.c many_isend.c manylmt.c mprobe.c pingping.c \
+ probe-unexp.c probenull.c pscancel.c rcancel.c rqfreeb.c \
+ rqstatus.c scancel.c scancel2.c scancel_unmatch.c sendall.c \
+ sendflood.c sendrecv1.c sendrecv2.c sendrecv3.c sendself.c \
+ waitany-null.c waittestnull.c
DIST_SOURCES = anyall.c big_count_status.c bottom.c bsend1.c bsend2.c \
bsend3.c bsend4.c bsend5.c bsendalign.c bsendfrag.c \
- bsendpending.c cancelanysrc.c cancelrecv.c eagerdt.c greq1.c \
- icsend.c inactivereq.c isendirecv.c isendself.c \
- isendselfprobe.c issendselfcancel.c large_message.c mprobe.c \
- pingping.c probe-unexp.c probenull.c pscancel.c rcancel.c \
- rqfreeb.c rqstatus.c scancel.c scancel2.c scancel_unmatch.c \
- sendall.c sendflood.c sendrecv1.c sendrecv2.c sendrecv3.c \
- sendself.c waitany-null.c waittestnull.c
+ bsendpending.c cancelanysrc.c cancelrecv.c dtype_send.c \
+ eagerdt.c greq1.c icsend.c inactivereq.c isendirecv.c \
+ isendself.c isendselfprobe.c issendselfcancel.c \
+ large_message.c many_isend.c manylmt.c mprobe.c pingping.c \
+ probe-unexp.c probenull.c pscancel.c rcancel.c rqfreeb.c \
+ rqstatus.c scancel.c scancel2.c scancel_unmatch.c sendall.c \
+ sendflood.c sendrecv1.c sendrecv2.c sendrecv3.c sendself.c \
+ waitany-null.c waittestnull.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -620,6 +641,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -638,7 +660,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -730,6 +752,10 @@ cancelrecv$(EXEEXT): $(cancelrecv_OBJECTS) $(cancelrecv_DEPENDENCIES) $(EXTRA_ca
@rm -f cancelrecv$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(cancelrecv_OBJECTS) $(cancelrecv_LDADD) $(LIBS)
+dtype_send$(EXEEXT): $(dtype_send_OBJECTS) $(dtype_send_DEPENDENCIES) $(EXTRA_dtype_send_DEPENDENCIES)
+ @rm -f dtype_send$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dtype_send_OBJECTS) $(dtype_send_LDADD) $(LIBS)
+
eagerdt$(EXEEXT): $(eagerdt_OBJECTS) $(eagerdt_DEPENDENCIES) $(EXTRA_eagerdt_DEPENDENCIES)
@rm -f eagerdt$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(eagerdt_OBJECTS) $(eagerdt_LDADD) $(LIBS)
@@ -766,6 +792,14 @@ large_message$(EXEEXT): $(large_message_OBJECTS) $(large_message_DEPENDENCIES) $
@rm -f large_message$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(large_message_OBJECTS) $(large_message_LDADD) $(LIBS)
+many_isend$(EXEEXT): $(many_isend_OBJECTS) $(many_isend_DEPENDENCIES) $(EXTRA_many_isend_DEPENDENCIES)
+ @rm -f many_isend$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(many_isend_OBJECTS) $(many_isend_LDADD) $(LIBS)
+
+manylmt$(EXEEXT): $(manylmt_OBJECTS) $(manylmt_DEPENDENCIES) $(EXTRA_manylmt_DEPENDENCIES)
+ @rm -f manylmt$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(manylmt_OBJECTS) $(manylmt_LDADD) $(LIBS)
+
mprobe$(EXEEXT): $(mprobe_OBJECTS) $(mprobe_DEPENDENCIES) $(EXTRA_mprobe_DEPENDENCIES)
@rm -f mprobe$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(mprobe_OBJECTS) $(mprobe_LDADD) $(LIBS)
@@ -861,6 +895,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bsendpending.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cancelanysrc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cancelrecv.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dtype_send.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/eagerdt.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/greq1.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/icsend.Po at am__quote@
@@ -870,6 +905,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isendselfprobe.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/issendselfcancel.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/large_message.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/many_isend.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/manylmt.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mprobe.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pingping.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/probe-unexp.Po at am__quote@
@@ -1119,10 +1156,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/pt2pt/bsend1.c b/test/mpi/pt2pt/bsend1.c
index e813459..ea7538e 100644
--- a/test/mpi/pt2pt/bsend1.c
+++ b/test/mpi/pt2pt/bsend1.c
@@ -78,6 +78,8 @@ int main(int argc, char *argv[])
/* We can't guarantee that messages arrive until the detach */
MPI_Buffer_detach(&bbuf, &bsize);
+ free(buf);
+
MTest_Finalize(errs);
MPI_Finalize();
diff --git a/test/mpi/pt2pt/bsendfrag.c b/test/mpi/pt2pt/bsendfrag.c
index 768e496..55bf96c 100644
--- a/test/mpi/pt2pt/bsendfrag.c
+++ b/test/mpi/pt2pt/bsendfrag.c
@@ -83,6 +83,7 @@ int main(int argc, char *argv[])
MPI_Barrier(comm);
/* Detach waits until all messages received */
MPI_Buffer_detach(&buf, &bsize);
+ free(buf);
}
else if (rank == dest) {
diff --git a/test/mpi/pt2pt/bsendpending.c b/test/mpi/pt2pt/bsendpending.c
index 7e42c20..77d7c16 100644
--- a/test/mpi/pt2pt/bsendpending.c
+++ b/test/mpi/pt2pt/bsendpending.c
@@ -83,6 +83,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "Wrong buffer size returned\n");
errs++;
}
+ free(buf);
}
else if (rank == dest) {
double tstart;
diff --git a/test/mpi/pt2pt/dtype_send.c b/test/mpi/pt2pt/dtype_send.c
new file mode 100644
index 0000000..a089bd6
--- /dev/null
+++ b/test/mpi/pt2pt/dtype_send.c
@@ -0,0 +1,101 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+#define NUM_LOOPS (128)
+
+int main(int argc, char **argv)
+{
+ int i, rank, size;
+ MPI_Request *req;
+ MPI_Datatype newtype;
+ int snd_buf[3], rcv_buf[3];
+ int count = 2;
+ int *displs;
+
+ MPI_Init(&argc, &argv);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+ if (size < 2) {
+ fprintf(stderr, "Must run with at least 2 processes\n");
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+
+ displs = (int *) malloc(count * sizeof(int));
+ for (i = 0; i < count; i++)
+ displs[i] = i * 2;
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* test isends */
+ MPI_Type_create_indexed_block(count, 1, displs, MPI_INT, &newtype);
+ MPI_Type_commit(&newtype);
+
+ if (rank == 0) {
+ req = (MPI_Request *) malloc(NUM_LOOPS * sizeof(MPI_Request));
+ for (i = 0; i < NUM_LOOPS; i++)
+ MPI_Isend(snd_buf, 1, newtype, !rank, 0, MPI_COMM_WORLD, &req[i]);
+ }
+ else {
+ for (i = 0; i < NUM_LOOPS; i++)
+ MPI_Recv(rcv_buf, 1, newtype, !rank, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+ }
+ MPI_Type_free(&newtype);
+ if (rank == 0)
+ MPI_Waitall(NUM_LOOPS, req, MPI_STATUSES_IGNORE);
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* test issends */
+ MPI_Type_create_indexed_block(count, 1, displs, MPI_INT, &newtype);
+ MPI_Type_commit(&newtype);
+
+ if (rank == 0) {
+ req = (MPI_Request *) malloc(NUM_LOOPS * sizeof(MPI_Request));
+ for (i = 0; i < NUM_LOOPS; i++)
+ MPI_Issend(snd_buf, 1, newtype, !rank, 0, MPI_COMM_WORLD, &req[i]);
+ }
+ else {
+ for (i = 0; i < NUM_LOOPS; i++)
+ MPI_Recv(rcv_buf, 1, newtype, !rank, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+ }
+ MPI_Type_free(&newtype);
+ if (rank == 0)
+ MPI_Waitall(NUM_LOOPS, req, MPI_STATUSES_IGNORE);
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* test irsends */
+ MPI_Type_create_indexed_block(count, 1, displs, MPI_INT, &newtype);
+ MPI_Type_commit(&newtype);
+
+ req = (MPI_Request *) malloc(NUM_LOOPS * sizeof(MPI_Request));
+ if (rank == 0) {
+ MPI_Barrier(MPI_COMM_WORLD);
+ for (i = 0; i < NUM_LOOPS; i++)
+ MPI_Irsend(snd_buf, 1, newtype, !rank, 0, MPI_COMM_WORLD, &req[i]);
+ }
+ else {
+ for (i = 0; i < NUM_LOOPS; i++)
+ MPI_Irecv(rcv_buf, 1, newtype, !rank, 0, MPI_COMM_WORLD, &req[i]);
+ MPI_Barrier(MPI_COMM_WORLD);
+ }
+ MPI_Type_free(&newtype);
+ MPI_Waitall(NUM_LOOPS, req, MPI_STATUSES_IGNORE);
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ MPI_Finalize();
+
+ if (rank == 0)
+ printf(" No Errors\n");
+
+ return 0;
+}
diff --git a/test/mpi/pt2pt/eagerdt.c b/test/mpi/pt2pt/eagerdt.c
index dc3b1c5..529d490 100644
--- a/test/mpi/pt2pt/eagerdt.c
+++ b/test/mpi/pt2pt/eagerdt.c
@@ -51,6 +51,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "Unable to allocate buffer %d of size %ld\n", i, (long) extent);
MPI_Abort(MPI_COMM_WORLD, 1);
}
+ MTEST_VG_MEM_INIT(bufs[i], extent);
}
buf = (int *) malloc(10 * 30 * sizeof(int));
@@ -69,6 +70,10 @@ int main(int argc, char *argv[])
}
MPI_Type_free(&dtype);
+ for (i = 0; i < MAX_MSGS; i++) {
+ free(bufs[i]);
+ }
+ free(buf);
MTest_Finalize(errs);
MPI_Finalize();
return 0;
diff --git a/test/mpi/pt2pt/inactivereq.c b/test/mpi/pt2pt/inactivereq.c
index 6531b44..fd9e7d0 100644
--- a/test/mpi/pt2pt/inactivereq.c
+++ b/test/mpi/pt2pt/inactivereq.c
@@ -95,6 +95,7 @@ int main(int argc, char *argv[])
MPI_Start(&r);
MPI_Wait(&r, &s);
MPI_Waitall(size, rr, MPI_STATUSES_IGNORE);
+ free(rr);
}
else {
MPI_Start(&r);
diff --git a/test/mpi/pt2pt/isendirecv.c b/test/mpi/pt2pt/isendirecv.c
index 6980f92..39447f2 100644
--- a/test/mpi/pt2pt/isendirecv.c
+++ b/test/mpi/pt2pt/isendirecv.c
@@ -28,6 +28,7 @@ int main(int argc, char *argv[])
reqs = (MPI_Request *) malloc(2 * nproc * sizeof(MPI_Request));
in_buf = (float *) malloc(elems * nproc * sizeof(float));
out_buf = (float *) malloc(elems * nproc * sizeof(float));
+ MTEST_VG_MEM_INIT(out_buf, elems * nproc * sizeof(float));
for (i = 0; i < nproc; i++) {
MPI_Irecv(&in_buf[elems * i], elems, MPI_FLOAT, i, 0, comm, &reqs[i]);
@@ -39,6 +40,9 @@ int main(int argc, char *argv[])
MPI_Waitall(nproc * 2, reqs, MPI_STATUSES_IGNORE);
+ free(reqs);
+ free(in_buf);
+ free(out_buf);
MTest_Finalize(errors);
MPI_Finalize();
return 0;
diff --git a/test/mpi/pt2pt/many_isend.c b/test/mpi/pt2pt/many_isend.c
new file mode 100644
index 0000000..56b151f
--- /dev/null
+++ b/test/mpi/pt2pt/many_isend.c
@@ -0,0 +1,59 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+#define ITER 5
+#define BUF_COUNT (16*1024)
+
+int rank, nprocs;
+char recvbuf[BUF_COUNT], sendbuf[BUF_COUNT];
+
+int main(int argc, char *argv[])
+{
+ int x, i;
+ MPI_Status *sendstats = NULL;
+ MPI_Request *sendreqs = NULL;
+
+ MPI_Init(&argc, &argv);
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+ sendreqs = (MPI_Request *) malloc(nprocs * sizeof(MPI_Request));
+ sendstats = (MPI_Status *) malloc(nprocs * sizeof(MPI_Status));
+
+ for (x = 0; x < ITER; x++) {
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* all to all send */
+ for (i = 0; i < nprocs; i++) {
+ MPI_Isend(sendbuf, BUF_COUNT, MPI_CHAR, i, 0, MPI_COMM_WORLD, &sendreqs[i]);
+ }
+
+ /* receive one by one */
+ for (i = 0; i < nprocs; i++) {
+ MPI_Recv(recvbuf, BUF_COUNT, MPI_CHAR, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD,
+ MPI_STATUS_IGNORE);
+ }
+
+ /* ensure all send request completed */
+ MPI_Waitall(nprocs, sendreqs, sendstats);
+ }
+
+ MPI_Barrier(MPI_COMM_WORLD);
+ if (rank == 0)
+ printf(" No Errors\n");
+
+ free(sendreqs);
+ free(sendstats);
+
+ MPI_Finalize();
+
+ return 0;
+}
diff --git a/test/mpi/pt2pt/manylmt.c b/test/mpi/pt2pt/manylmt.c
new file mode 100644
index 0000000..711f2d6
--- /dev/null
+++ b/test/mpi/pt2pt/manylmt.c
@@ -0,0 +1,61 @@
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ *
+ *
+ * This program checks if MPICH can correctly handle
+ * many outstanding large message transfers
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <mpi.h>
+
+#define N_TRY 32
+#define BLKSIZE (10*1024*1024)
+
+int main(int argc, char *argv[])
+{
+ int size, rank;
+ int dest;
+ int i;
+ char *buff;
+ MPI_Request reqs[N_TRY];
+
+ MPI_Init(&argc, &argv);
+
+ buff = malloc(N_TRY * BLKSIZE);
+ memset(buff, -1, N_TRY * BLKSIZE);
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+ dest = size - 1;
+
+ if (rank == 0) {
+ for (i = 0; i < N_TRY; i++)
+ MPI_Isend(buff + BLKSIZE*i, BLKSIZE, MPI_BYTE, dest, 0, MPI_COMM_WORLD, &reqs[i]);
+ MPI_Waitall(N_TRY, reqs, MPI_STATUSES_IGNORE);
+ }
+ else if (rank == dest) {
+ for (i = 0; i < N_TRY; i++)
+ MPI_Irecv(buff + BLKSIZE*i, BLKSIZE, MPI_BYTE, 0, 0, MPI_COMM_WORLD, &reqs[i]);
+ MPI_Waitall(N_TRY, reqs, MPI_STATUSES_IGNORE);
+ }
+
+ free(buff);
+
+ if (rank == 0)
+ puts(" No Errors");
+
+ MPI_Finalize();
+
+ return 0;
+}
diff --git a/test/mpi/pt2pt/mprobe.c b/test/mpi/pt2pt/mprobe.c
index 5804b18..e1c55c9 100644
--- a/test/mpi/pt2pt/mprobe.c
+++ b/test/mpi/pt2pt/mprobe.c
@@ -10,13 +10,6 @@
#include "mpi.h"
#include "mpitest.h"
-/* This is a temporary #ifdef to control whether we test this functionality. A
- * configure-test or similar would be better. Eventually the MPI-3 standard
- * will be released and this can be gated on a MPI_VERSION check */
-#if !defined(USE_STRICT_MPI) && defined(MPICH)
-#define TEST_MPROBE_ROUTINES 1
-#endif
-
/* assert-like macro that bumps the err count and emits a message */
#define check(x_) \
do { \
@@ -38,9 +31,7 @@ int main(int argc, char **argv)
int rank, size;
int *sendbuf = NULL, *recvbuf = NULL;
int count, i;
-#ifdef TEST_MPROBE_ROUTINES
MPI_Message msg;
-#endif
MPI_Request rreq;
MPI_Status s1, s2;
MPI_Datatype vectype;
@@ -60,7 +51,6 @@ int main(int argc, char **argv)
goto epilogue;
}
-#ifdef TEST_MPROBE_ROUTINES
sendbuf = (int *) malloc(LARGE_SZ * sizeof(int));
recvbuf = (int *) malloc(LARGE_SZ * sizeof(int));
if (sendbuf == NULL || recvbuf == NULL) {
@@ -603,8 +593,6 @@ int main(int argc, char **argv)
check(msg == MPI_MESSAGE_NULL);
}
-#endif /* TEST_MPROBE_ROUTINES */
-
epilogue:
MPI_Reduce((rank == 0 ? MPI_IN_PLACE : &errs), &errs, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
diff --git a/test/mpi/pt2pt/rcancel.c b/test/mpi/pt2pt/rcancel.c
index 98122d5..07e3b66 100644
--- a/test/mpi/pt2pt/rcancel.c
+++ b/test/mpi/pt2pt/rcancel.c
@@ -78,6 +78,9 @@ int main(int argc, char *argv[])
printf("Incorrectly cancelled Irecv[1]\n");
fflush(stdout);
}
+ for (i = 0; i < 4; i++) {
+ free(bufs[i]);
+ }
}
MTest_Finalize(errs);
diff --git a/test/mpi/pt2pt/rqfreeb.c b/test/mpi/pt2pt/rqfreeb.c
index 1c4f6a0..c6abf8a 100644
--- a/test/mpi/pt2pt/rqfreeb.c
+++ b/test/mpi/pt2pt/rqfreeb.c
@@ -80,6 +80,7 @@ int main(int argc, char *argv[])
/* We can't guarantee that messages arrive until the detach */
MPI_Buffer_detach(&bbuf, &bsize);
+ free(buf);
}
if (rank == dest) {
diff --git a/test/mpi/pt2pt/scancel2.c b/test/mpi/pt2pt/scancel2.c
index 2ecee0f..7492ecf 100644
--- a/test/mpi/pt2pt/scancel2.c
+++ b/test/mpi/pt2pt/scancel2.c
@@ -37,6 +37,7 @@ int main(int argc, char *argv[])
for (cs = 0; cs < 4; cs++) {
n = bufsizes[cs];
buf = (char *) malloc(n);
+ MTEST_VG_MEM_INIT(buf, n);
if (!buf) {
fprintf(stderr, "Unable to allocate %d bytes\n", n);
MPI_Abort(MPI_COMM_WORLD, 1);
diff --git a/test/mpi/pt2pt/sendrecv3.c b/test/mpi/pt2pt/sendrecv3.c
index 4cabf99..28deb55 100644
--- a/test/mpi/pt2pt/sendrecv3.c
+++ b/test/mpi/pt2pt/sendrecv3.c
@@ -50,6 +50,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "Unable to allocate %d bytes\n", msgSize);
MPI_Abort(MPI_COMM_WORLD, 1);
}
+ MTEST_VG_MEM_INIT(buf[i], msgSize * sizeof(int));
}
partner = (rank + 1) % size;
diff --git a/test/mpi/pt2pt/testlist b/test/mpi/pt2pt/testlist
index ad77009..4b11289 100644
--- a/test/mpi/pt2pt/testlist
+++ b/test/mpi/pt2pt/testlist
@@ -27,7 +27,7 @@ probe-unexp 4
probenull 1
# For testing, scancel will run with 1 process as well
scancel 2 xfail=ticket2266 xfail=ticket2270
-scancel2 2
+scancel2 2 xfail=ticket2266 xfail=ticket2270
pscancel 2 xfail=ticket2266 xfail=ticket2270
rcancel 2
cancelrecv 2 xfail=ticket2266 xfail=ticket2270
@@ -42,3 +42,6 @@ waitany-null 1
#large_message 3
mprobe 2 mpiversion=3.0
big_count_status 1 mpiversion=3.0
+many_isend 3
+manylmt 2
+dtype_send 2
diff --git a/test/mpi/rma/Makefile.am b/test/mpi/rma/Makefile.am
index c48a59b..7c8bfc7 100644
--- a/test/mpi/rma/Makefile.am
+++ b/test/mpi/rma/Makefile.am
@@ -168,7 +168,13 @@ noinst_PROGRAMS = \
win_shared_acc_flush_load \
win_shared_gacc_flush_load \
win_shared_fop_flush_load \
- win_shared_cas_flush_load
+ win_shared_cas_flush_load \
+ overlap_wins_put \
+ overlap_wins_acc \
+ overlap_wins_gacc \
+ overlap_wins_fop \
+ overlap_wins_cas \
+ rget-unlock
if BUILD_MPIX_TESTS
noinst_PROGRAMS += aint
@@ -275,4 +281,16 @@ win_shared_put_flush_load_CPPFLAGS = -DTEST_PUT $(AM_CPPFLAGS)
win_shared_acc_flush_load_CPPFLAGS = -DTEST_ACC $(AM_CPPFLAGS)
win_shared_gacc_flush_load_CPPFLAGS = -DTEST_GACC $(AM_CPPFLAGS)
win_shared_fop_flush_load_CPPFLAGS = -DTEST_FOP $(AM_CPPFLAGS)
-win_shared_cas_flush_load_CPPFLAGS = -DTEST_CAS $(AM_CPPFLAGS)
\ No newline at end of file
+win_shared_cas_flush_load_CPPFLAGS = -DTEST_CAS $(AM_CPPFLAGS)
+
+overlap_wins_put_SOURCES = overlap_wins_rma.c
+overlap_wins_acc_SOURCES = overlap_wins_rma.c
+overlap_wins_gacc_SOURCES = overlap_wins_rma.c
+overlap_wins_fop_SOURCES = overlap_wins_rma.c
+overlap_wins_cas_SOURCES = overlap_wins_rma.c
+
+overlap_wins_put_CPPFLAGS = -DTEST_PUT $(AM_CPPFLAGS)
+overlap_wins_acc_CPPFLAGS = -DTEST_ACC $(AM_CPPFLAGS)
+overlap_wins_gacc_CPPFLAGS = -DTEST_GACC $(AM_CPPFLAGS)
+overlap_wins_fop_CPPFLAGS = -DTEST_FOP $(AM_CPPFLAGS)
+overlap_wins_cas_CPPFLAGS = -DTEST_CAS $(AM_CPPFLAGS)
diff --git a/test/mpi/rma/Makefile.in b/test/mpi/rma/Makefile.in
index 8c7e17e..17b5f45 100644
--- a/test/mpi/rma/Makefile.in
+++ b/test/mpi/rma/Makefile.in
@@ -170,7 +170,10 @@ noinst_PROGRAMS = allocmem$(EXEEXT) test1$(EXEEXT) test2$(EXEEXT) \
win_shared_acc_flush_load$(EXEEXT) \
win_shared_gacc_flush_load$(EXEEXT) \
win_shared_fop_flush_load$(EXEEXT) \
- win_shared_cas_flush_load$(EXEEXT) $(am__EXEEXT_1)
+ win_shared_cas_flush_load$(EXEEXT) overlap_wins_put$(EXEEXT) \
+ overlap_wins_acc$(EXEEXT) overlap_wins_gacc$(EXEEXT) \
+ overlap_wins_fop$(EXEEXT) overlap_wins_cas$(EXEEXT) \
+ rget-unlock$(EXEEXT) $(am__EXEEXT_1)
@BUILD_MPIX_TESTS_TRUE at am__append_1 = aint
subdir = rma
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -750,6 +753,41 @@ nullpscw_shm_LDADD = $(LDADD)
nullpscw_shm_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+am_overlap_wins_acc_OBJECTS = \
+ overlap_wins_acc-overlap_wins_rma.$(OBJEXT)
+overlap_wins_acc_OBJECTS = $(am_overlap_wins_acc_OBJECTS)
+overlap_wins_acc_LDADD = $(LDADD)
+overlap_wins_acc_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
+am_overlap_wins_cas_OBJECTS = \
+ overlap_wins_cas-overlap_wins_rma.$(OBJEXT)
+overlap_wins_cas_OBJECTS = $(am_overlap_wins_cas_OBJECTS)
+overlap_wins_cas_LDADD = $(LDADD)
+overlap_wins_cas_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
+am_overlap_wins_fop_OBJECTS = \
+ overlap_wins_fop-overlap_wins_rma.$(OBJEXT)
+overlap_wins_fop_OBJECTS = $(am_overlap_wins_fop_OBJECTS)
+overlap_wins_fop_LDADD = $(LDADD)
+overlap_wins_fop_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
+am_overlap_wins_gacc_OBJECTS = \
+ overlap_wins_gacc-overlap_wins_rma.$(OBJEXT)
+overlap_wins_gacc_OBJECTS = $(am_overlap_wins_gacc_OBJECTS)
+overlap_wins_gacc_LDADD = $(LDADD)
+overlap_wins_gacc_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
+am_overlap_wins_put_OBJECTS = \
+ overlap_wins_put-overlap_wins_rma.$(OBJEXT)
+overlap_wins_put_OBJECTS = $(am_overlap_wins_put_OBJECTS)
+overlap_wins_put_LDADD = $(LDADD)
+overlap_wins_put_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
pscw_ordering_SOURCES = pscw_ordering.c
pscw_ordering_OBJECTS = pscw_ordering.$(OBJEXT)
pscw_ordering_LDADD = $(LDADD)
@@ -823,6 +861,12 @@ reqops_LDADD = $(LDADD)
reqops_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+rget_unlock_SOURCES = rget-unlock.c
+rget_unlock_OBJECTS = rget-unlock.$(OBJEXT)
+rget_unlock_LDADD = $(LDADD)
+rget_unlock_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
rma_contig_SOURCES = rma-contig.c
rma_contig_OBJECTS = rma-contig.$(OBJEXT)
rma_contig_LDADD = $(LDADD)
@@ -1234,23 +1278,27 @@ SOURCES = acc-loc.c acc-pairtype.c $(acc_flush_get_SOURCES) \
$(manyrma2_shm_SOURCES) manyrma3.c mixedsync.c \
$(mutex_bench_SOURCES) $(mutex_bench_shared_SOURCES) \
$(mutex_bench_shm_SOURCES) $(mutex_bench_shm_ordered_SOURCES) \
- nb_test.c nullpscw.c $(nullpscw_shm_SOURCES) pscw_ordering.c \
+ nb_test.c nullpscw.c $(nullpscw_shm_SOURCES) \
+ $(overlap_wins_acc_SOURCES) $(overlap_wins_cas_SOURCES) \
+ $(overlap_wins_fop_SOURCES) $(overlap_wins_gacc_SOURCES) \
+ $(overlap_wins_put_SOURCES) pscw_ordering.c \
$(pscw_ordering_shm_SOURCES) put_base.c put_bottom.c \
$(put_flush_get_SOURCES) putfence1.c putfidx.c putpscw1.c \
racc_local_comp.c req_example.c $(req_example_shm_SOURCES) \
- reqops.c rma-contig.c rmanull.c rmazero.c rput_local_comp.c \
- selfrma.c strided_acc_indexed.c strided_acc_onelock.c \
- strided_acc_subarray.c strided_get_indexed.c \
- strided_getacc_indexed.c strided_getacc_indexed_shared.c \
- strided_putget_indexed.c strided_putget_indexed_shared.c \
- test1.c test1_am.c test1_dt.c test2.c test2_am.c \
- $(test2_am_shm_SOURCES) $(test2_shm_SOURCES) test3.c \
- test3_am.c $(test3_am_shm_SOURCES) $(test3_shm_SOURCES) \
- test4.c test4_am.c test5.c test5_am.c transpose1.c \
- transpose2.c transpose3.c $(transpose3_shm_SOURCES) \
- transpose4.c transpose5.c transpose6.c transpose7.c \
- win_dynamic_acc.c win_flavors.c win_info.c win_large_shm.c \
- win_shared.c $(win_shared_acc_flush_load_SOURCES) \
+ reqops.c rget-unlock.c rma-contig.c rmanull.c rmazero.c \
+ rput_local_comp.c selfrma.c strided_acc_indexed.c \
+ strided_acc_onelock.c strided_acc_subarray.c \
+ strided_get_indexed.c strided_getacc_indexed.c \
+ strided_getacc_indexed_shared.c strided_putget_indexed.c \
+ strided_putget_indexed_shared.c test1.c test1_am.c test1_dt.c \
+ test2.c test2_am.c $(test2_am_shm_SOURCES) \
+ $(test2_shm_SOURCES) test3.c test3_am.c \
+ $(test3_am_shm_SOURCES) $(test3_shm_SOURCES) test4.c \
+ test4_am.c test5.c test5_am.c transpose1.c transpose2.c \
+ transpose3.c $(transpose3_shm_SOURCES) transpose4.c \
+ transpose5.c transpose6.c transpose7.c win_dynamic_acc.c \
+ win_flavors.c win_info.c win_large_shm.c win_shared.c \
+ $(win_shared_acc_flush_load_SOURCES) \
$(win_shared_cas_flush_load_SOURCES) \
$(win_shared_create_allocshm_SOURCES) \
$(win_shared_create_no_allocshm_SOURCES) \
@@ -1295,23 +1343,27 @@ DIST_SOURCES = acc-loc.c acc-pairtype.c $(acc_flush_get_SOURCES) \
$(manyrma2_shm_SOURCES) manyrma3.c mixedsync.c \
$(mutex_bench_SOURCES) $(mutex_bench_shared_SOURCES) \
$(mutex_bench_shm_SOURCES) $(mutex_bench_shm_ordered_SOURCES) \
- nb_test.c nullpscw.c $(nullpscw_shm_SOURCES) pscw_ordering.c \
+ nb_test.c nullpscw.c $(nullpscw_shm_SOURCES) \
+ $(overlap_wins_acc_SOURCES) $(overlap_wins_cas_SOURCES) \
+ $(overlap_wins_fop_SOURCES) $(overlap_wins_gacc_SOURCES) \
+ $(overlap_wins_put_SOURCES) pscw_ordering.c \
$(pscw_ordering_shm_SOURCES) put_base.c put_bottom.c \
$(put_flush_get_SOURCES) putfence1.c putfidx.c putpscw1.c \
racc_local_comp.c req_example.c $(req_example_shm_SOURCES) \
- reqops.c rma-contig.c rmanull.c rmazero.c rput_local_comp.c \
- selfrma.c strided_acc_indexed.c strided_acc_onelock.c \
- strided_acc_subarray.c strided_get_indexed.c \
- strided_getacc_indexed.c strided_getacc_indexed_shared.c \
- strided_putget_indexed.c strided_putget_indexed_shared.c \
- test1.c test1_am.c test1_dt.c test2.c test2_am.c \
- $(test2_am_shm_SOURCES) $(test2_shm_SOURCES) test3.c \
- test3_am.c $(test3_am_shm_SOURCES) $(test3_shm_SOURCES) \
- test4.c test4_am.c test5.c test5_am.c transpose1.c \
- transpose2.c transpose3.c $(transpose3_shm_SOURCES) \
- transpose4.c transpose5.c transpose6.c transpose7.c \
- win_dynamic_acc.c win_flavors.c win_info.c win_large_shm.c \
- win_shared.c $(win_shared_acc_flush_load_SOURCES) \
+ reqops.c rget-unlock.c rma-contig.c rmanull.c rmazero.c \
+ rput_local_comp.c selfrma.c strided_acc_indexed.c \
+ strided_acc_onelock.c strided_acc_subarray.c \
+ strided_get_indexed.c strided_getacc_indexed.c \
+ strided_getacc_indexed_shared.c strided_putget_indexed.c \
+ strided_putget_indexed_shared.c test1.c test1_am.c test1_dt.c \
+ test2.c test2_am.c $(test2_am_shm_SOURCES) \
+ $(test2_shm_SOURCES) test3.c test3_am.c \
+ $(test3_am_shm_SOURCES) $(test3_shm_SOURCES) test4.c \
+ test4_am.c test5.c test5_am.c transpose1.c transpose2.c \
+ transpose3.c $(transpose3_shm_SOURCES) transpose4.c \
+ transpose5.c transpose6.c transpose7.c win_dynamic_acc.c \
+ win_flavors.c win_info.c win_large_shm.c win_shared.c \
+ $(win_shared_acc_flush_load_SOURCES) \
$(win_shared_cas_flush_load_SOURCES) \
$(win_shared_create_allocshm_SOURCES) \
$(win_shared_create_no_allocshm_SOURCES) \
@@ -1521,6 +1573,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -1539,7 +1592,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
strided_acc_indexed_LDADD = $(LDADD) -lm
strided_acc_onelock_LDADD = $(LDADD) -lm
@@ -1629,6 +1682,16 @@ win_shared_acc_flush_load_CPPFLAGS = -DTEST_ACC $(AM_CPPFLAGS)
win_shared_gacc_flush_load_CPPFLAGS = -DTEST_GACC $(AM_CPPFLAGS)
win_shared_fop_flush_load_CPPFLAGS = -DTEST_FOP $(AM_CPPFLAGS)
win_shared_cas_flush_load_CPPFLAGS = -DTEST_CAS $(AM_CPPFLAGS)
+overlap_wins_put_SOURCES = overlap_wins_rma.c
+overlap_wins_acc_SOURCES = overlap_wins_rma.c
+overlap_wins_gacc_SOURCES = overlap_wins_rma.c
+overlap_wins_fop_SOURCES = overlap_wins_rma.c
+overlap_wins_cas_SOURCES = overlap_wins_rma.c
+overlap_wins_put_CPPFLAGS = -DTEST_PUT $(AM_CPPFLAGS)
+overlap_wins_acc_CPPFLAGS = -DTEST_ACC $(AM_CPPFLAGS)
+overlap_wins_gacc_CPPFLAGS = -DTEST_GACC $(AM_CPPFLAGS)
+overlap_wins_fop_CPPFLAGS = -DTEST_FOP $(AM_CPPFLAGS)
+overlap_wins_cas_CPPFLAGS = -DTEST_CAS $(AM_CPPFLAGS)
all: all-am
.SUFFIXES:
@@ -2017,6 +2080,26 @@ nullpscw_shm$(EXEEXT): $(nullpscw_shm_OBJECTS) $(nullpscw_shm_DEPENDENCIES) $(EX
@rm -f nullpscw_shm$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(nullpscw_shm_OBJECTS) $(nullpscw_shm_LDADD) $(LIBS)
+overlap_wins_acc$(EXEEXT): $(overlap_wins_acc_OBJECTS) $(overlap_wins_acc_DEPENDENCIES) $(EXTRA_overlap_wins_acc_DEPENDENCIES)
+ @rm -f overlap_wins_acc$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(overlap_wins_acc_OBJECTS) $(overlap_wins_acc_LDADD) $(LIBS)
+
+overlap_wins_cas$(EXEEXT): $(overlap_wins_cas_OBJECTS) $(overlap_wins_cas_DEPENDENCIES) $(EXTRA_overlap_wins_cas_DEPENDENCIES)
+ @rm -f overlap_wins_cas$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(overlap_wins_cas_OBJECTS) $(overlap_wins_cas_LDADD) $(LIBS)
+
+overlap_wins_fop$(EXEEXT): $(overlap_wins_fop_OBJECTS) $(overlap_wins_fop_DEPENDENCIES) $(EXTRA_overlap_wins_fop_DEPENDENCIES)
+ @rm -f overlap_wins_fop$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(overlap_wins_fop_OBJECTS) $(overlap_wins_fop_LDADD) $(LIBS)
+
+overlap_wins_gacc$(EXEEXT): $(overlap_wins_gacc_OBJECTS) $(overlap_wins_gacc_DEPENDENCIES) $(EXTRA_overlap_wins_gacc_DEPENDENCIES)
+ @rm -f overlap_wins_gacc$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(overlap_wins_gacc_OBJECTS) $(overlap_wins_gacc_LDADD) $(LIBS)
+
+overlap_wins_put$(EXEEXT): $(overlap_wins_put_OBJECTS) $(overlap_wins_put_DEPENDENCIES) $(EXTRA_overlap_wins_put_DEPENDENCIES)
+ @rm -f overlap_wins_put$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(overlap_wins_put_OBJECTS) $(overlap_wins_put_LDADD) $(LIBS)
+
pscw_ordering$(EXEEXT): $(pscw_ordering_OBJECTS) $(pscw_ordering_DEPENDENCIES) $(EXTRA_pscw_ordering_DEPENDENCIES)
@rm -f pscw_ordering$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(pscw_ordering_OBJECTS) $(pscw_ordering_LDADD) $(LIBS)
@@ -2065,6 +2148,10 @@ reqops$(EXEEXT): $(reqops_OBJECTS) $(reqops_DEPENDENCIES) $(EXTRA_reqops_DEPENDE
@rm -f reqops$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(reqops_OBJECTS) $(reqops_LDADD) $(LIBS)
+rget-unlock$(EXEEXT): $(rget_unlock_OBJECTS) $(rget_unlock_DEPENDENCIES) $(EXTRA_rget_unlock_DEPENDENCIES)
+ @rm -f rget-unlock$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(rget_unlock_OBJECTS) $(rget_unlock_LDADD) $(LIBS)
+
rma-contig$(EXEEXT): $(rma_contig_OBJECTS) $(rma_contig_DEPENDENCIES) $(EXTRA_rma_contig_DEPENDENCIES)
@rm -f rma-contig$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(rma_contig_OBJECTS) $(rma_contig_LDADD) $(LIBS)
@@ -2394,6 +2481,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nb_test.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nullpscw.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nullpscw_shm-nullpscw.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/overlap_wins_acc-overlap_wins_rma.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/overlap_wins_cas-overlap_wins_rma.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/overlap_wins_fop-overlap_wins_rma.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/overlap_wins_gacc-overlap_wins_rma.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/overlap_wins_put-overlap_wins_rma.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pscw_ordering.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pscw_ordering_shm-pscw_ordering.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_base.Po at am__quote@
@@ -2406,6 +2498,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/req_example.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/req_example_shm-req_example.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reqops.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/rget-unlock.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/rma-contig.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/rmanull.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/rmazero.Po at am__quote@
@@ -2859,6 +2952,76 @@ nullpscw_shm-nullpscw.obj: nullpscw.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nullpscw_shm_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nullpscw_shm-nullpscw.obj `if test -f 'nullpscw.c'; then $(CYGPATH_W) 'nullpscw.c'; else $(CYGPATH_W) '$(srcdir)/nullpscw.c'; fi`
+overlap_wins_acc-overlap_wins_rma.o: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_acc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_acc-overlap_wins_rma.o -MD -MP -MF $(DEPDIR)/overlap_wins_acc-overlap_wins_rma.Tpo -c -o overlap_wins_acc-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_acc-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_acc-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_acc-overlap_wins_rma.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_acc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_acc-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+
+overlap_wins_acc-overlap_wins_rma.obj: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_acc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_acc-overlap_wins_rma.obj -MD -MP -MF $(DEPDIR)/overlap_wins_acc-overlap_wins_rma.Tpo -c -o overlap_wins_acc-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_acc-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_acc-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_acc-overlap_wins_rma.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_acc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_acc-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+
+overlap_wins_cas-overlap_wins_rma.o: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_cas_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_cas-overlap_wins_rma.o -MD -MP -MF $(DEPDIR)/overlap_wins_cas-overlap_wins_rma.Tpo -c -o overlap_wins_cas-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_cas-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_cas-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_cas-overlap_wins_rma.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_cas_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_cas-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+
+overlap_wins_cas-overlap_wins_rma.obj: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_cas_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_cas-overlap_wins_rma.obj -MD -MP -MF $(DEPDIR)/overlap_wins_cas-overlap_wins_rma.Tpo -c -o overlap_wins_cas-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_cas-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_cas-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_cas-overlap_wins_rma.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_cas_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_cas-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+
+overlap_wins_fop-overlap_wins_rma.o: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_fop_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_fop-overlap_wins_rma.o -MD -MP -MF $(DEPDIR)/overlap_wins_fop-overlap_wins_rma.Tpo -c -o overlap_wins_fop-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_fop-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_fop-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_fop-overlap_wins_rma.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_fop_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_fop-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+
+overlap_wins_fop-overlap_wins_rma.obj: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_fop_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_fop-overlap_wins_rma.obj -MD -MP -MF $(DEPDIR)/overlap_wins_fop-overlap_wins_rma.Tpo -c -o overlap_wins_fop-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_fop-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_fop-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_fop-overlap_wins_rma.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_fop_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_fop-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+
+overlap_wins_gacc-overlap_wins_rma.o: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_gacc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_gacc-overlap_wins_rma.o -MD -MP -MF $(DEPDIR)/overlap_wins_gacc-overlap_wins_rma.Tpo -c -o overlap_wins_gacc-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_gacc-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_gacc-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_gacc-overlap_wins_rma.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_gacc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_gacc-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+
+overlap_wins_gacc-overlap_wins_rma.obj: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_gacc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_gacc-overlap_wins_rma.obj -MD -MP -MF $(DEPDIR)/overlap_wins_gacc-overlap_wins_rma.Tpo -c -o overlap_wins_gacc-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_gacc-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_gacc-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_gacc-overlap_wins_rma.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_gacc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_gacc-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+
+overlap_wins_put-overlap_wins_rma.o: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_put_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_put-overlap_wins_rma.o -MD -MP -MF $(DEPDIR)/overlap_wins_put-overlap_wins_rma.Tpo -c -o overlap_wins_put-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_put-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_put-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_put-overlap_wins_rma.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_put_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_put-overlap_wins_rma.o `test -f 'overlap_wins_rma.c' || echo '$(srcdir)/'`overlap_wins_rma.c
+
+overlap_wins_put-overlap_wins_rma.obj: overlap_wins_rma.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_put_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT overlap_wins_put-overlap_wins_rma.obj -MD -MP -MF $(DEPDIR)/overlap_wins_put-overlap_wins_rma.Tpo -c -o overlap_wins_put-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/overlap_wins_put-overlap_wins_rma.Tpo $(DEPDIR)/overlap_wins_put-overlap_wins_rma.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='overlap_wins_rma.c' object='overlap_wins_put-overlap_wins_rma.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(overlap_wins_put_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o overlap_wins_put-overlap_wins_rma.obj `if test -f 'overlap_wins_rma.c'; then $(CYGPATH_W) 'overlap_wins_rma.c'; else $(CYGPATH_W) '$(srcdir)/overlap_wins_rma.c'; fi`
+
pscw_ordering_shm-pscw_ordering.o: pscw_ordering.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pscw_ordering_shm_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pscw_ordering_shm-pscw_ordering.o -MD -MP -MF $(DEPDIR)/pscw_ordering_shm-pscw_ordering.Tpo -c -o pscw_ordering_shm-pscw_ordering.o `test -f 'pscw_ordering.c' || echo '$(srcdir)/'`pscw_ordering.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pscw_ordering_shm-pscw_ordering.Tpo $(DEPDIR)/pscw_ordering_shm-pscw_ordering.Po
@@ -3282,10 +3445,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/rma/accfence1.c b/test/mpi/rma/accfence1.c
index 1b1a40b..f4b8930 100644
--- a/test/mpi/rma/accfence1.c
+++ b/test/mpi/rma/accfence1.c
@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
int minsize = 2, count;
MPI_Comm comm;
MPI_Win win;
- MPI_Aint extent;
+ MPI_Aint extent, lb;
MTestDatatype sendtype, recvtype;
MTest_Init(&argc, &argv);
@@ -43,7 +43,8 @@ int main(int argc, char *argv[])
recvtype.InitBuf(&recvtype);
MPI_Type_extent(recvtype.datatype, &extent);
- MPI_Win_create(recvtype.buf, recvtype.count * extent,
+ MPI_Type_lb(recvtype.datatype, &lb);
+ MPI_Win_create(recvtype.buf, recvtype.count * extent + lb,
(int) extent, MPI_INFO_NULL, comm, &win);
MPI_Win_fence(0, win);
if (rank == source) {
diff --git a/test/mpi/rma/accpscw1.c b/test/mpi/rma/accpscw1.c
index de6e4fa..67ab3b4 100644
--- a/test/mpi/rma/accpscw1.c
+++ b/test/mpi/rma/accpscw1.c
@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
int minsize = 2, count;
MPI_Comm comm;
MPI_Win win;
- MPI_Aint extent;
+ MPI_Aint extent, lb;
MPI_Group wingroup, neighbors;
MTestDatatype sendtype, recvtype;
@@ -44,7 +44,8 @@ int main(int argc, char *argv[])
recvtype.InitBuf(&recvtype);
MPI_Type_extent(recvtype.datatype, &extent);
- MPI_Win_create(recvtype.buf, recvtype.count * extent,
+ MPI_Type_lb(recvtype.datatype, &lb);
+ MPI_Win_create(recvtype.buf, recvtype.count * extent + lb,
(int) extent, MPI_INFO_NULL, comm, &win);
MPI_Win_get_group(win, &wingroup);
if (rank == source) {
diff --git a/test/mpi/rma/derived-acc-flush_local.c b/test/mpi/rma/derived-acc-flush_local.c
index a45ef06..032a022 100644
--- a/test/mpi/rma/derived-acc-flush_local.c
+++ b/test/mpi/rma/derived-acc-flush_local.c
@@ -37,6 +37,11 @@ int main(int argc, char *argv[])
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ if (nproc < 3) {
+ fprintf(stderr, "Run this program with at least 3 processes\n");
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+
MPI_Alloc_mem(sizeof(int) * DATA_SIZE, MPI_INFO_NULL, &orig_buf);
MPI_Alloc_mem(sizeof(int) * DATA_SIZE, MPI_INFO_NULL, &tar_buf);
diff --git a/test/mpi/rma/epochtest.c b/test/mpi/rma/epochtest.c
index 69cfdcb..bd07732 100644
--- a/test/mpi/rma/epochtest.c
+++ b/test/mpi/rma/epochtest.c
@@ -41,7 +41,7 @@ int main(int argc, char **argv)
int minsize = 2, count;
MPI_Comm comm;
MPI_Win win;
- MPI_Aint extent;
+ MPI_Aint extent,lb;
MTestDatatype sendtype, recvtype;
int onlyInt = 0;
@@ -71,7 +71,8 @@ int main(int argc, char **argv)
recvtype.InitBuf(&recvtype);
MPI_Type_extent(recvtype.datatype, &extent);
- MPI_Win_create(recvtype.buf, recvtype.count * extent,
+ MPI_Type_lb(recvtype.datatype, &lb);
+ MPI_Win_create(recvtype.buf, recvtype.count * extent + lb,
extent, MPI_INFO_NULL, comm, &win);
/* To improve reporting of problems about operations, we
* change the error handler to errors return */
diff --git a/test/mpi/rma/fetch_and_op.c b/test/mpi/rma/fetch_and_op.c
index 13ab278..bd10bb6 100644
--- a/test/mpi/rma/fetch_and_op.c
+++ b/test/mpi/rma/fetch_and_op.c
@@ -76,6 +76,8 @@ int main(int argc, char **argv)
val_ptr = malloc(sizeof(TYPE_C) * nproc);
res_ptr = malloc(sizeof(TYPE_C) * nproc);
+ MTEST_VG_MEM_INIT(val_ptr, sizeof(TYPE_C) * nproc);
+ MTEST_VG_MEM_INIT(res_ptr, sizeof(TYPE_C) * nproc);
MPI_Win_create(val_ptr, sizeof(TYPE_C) * nproc, sizeof(TYPE_C), MPI_INFO_NULL, MPI_COMM_WORLD,
&win);
diff --git a/test/mpi/rma/get_accumulate.c b/test/mpi/rma/get_accumulate.c
index 142ae38..0ffee69 100644
--- a/test/mpi/rma/get_accumulate.c
+++ b/test/mpi/rma/get_accumulate.c
@@ -39,7 +39,8 @@
# define TYPE_MPI TYPE_MPI_BASE
#endif
-void reset_bufs(TYPE_C * win_ptr, TYPE_C * res_ptr, TYPE_C * val_ptr, TYPE_C value, MPI_Win win)
+static void reset_bufs(TYPE_C * win_ptr, TYPE_C * res_ptr, TYPE_C * val_ptr, TYPE_C value,
+ MPI_Win win)
{
int rank, nproc, i;
@@ -305,6 +306,8 @@ int main(int argc, char **argv)
int j, target = (rank + 1) % nproc;
/* Test: origin_buf = NULL */
+ memset(res_ptr, -1, sizeof(TYPE_C) * nproc * COUNT); /* reset result buffer. */
+
MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
MPI_Get_accumulate(NULL, COUNT, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
@@ -319,6 +322,8 @@ int main(int argc, char **argv)
}
/* Test: origin_buf = NULL, origin_count = 0 */
+ memset(res_ptr, -1, sizeof(TYPE_C) * nproc * COUNT);
+
MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
MPI_Get_accumulate(NULL, 0, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
@@ -333,6 +338,8 @@ int main(int argc, char **argv)
}
/* Test: origin_buf = NULL, origin_count = 0, origin_dtype = NULL */
+ memset(res_ptr, -1, sizeof(TYPE_C) * nproc * COUNT);
+
MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
MPI_Get_accumulate(NULL, 0, MPI_DATATYPE_NULL, res_ptr, COUNT, TYPE_MPI,
target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
@@ -361,6 +368,8 @@ int main(int argc, char **argv)
int j, target = rank;
/* Test: origin_buf = NULL */
+ memset(res_ptr, -1, sizeof(TYPE_C) * nproc * COUNT);
+
MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
MPI_Get_accumulate(NULL, COUNT, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
@@ -376,6 +385,8 @@ int main(int argc, char **argv)
}
/* Test: origin_buf = NULL, origin_count = 0 */
+ memset(res_ptr, -1, sizeof(TYPE_C) * nproc * COUNT);
+
MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
MPI_Get_accumulate(NULL, 0, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
@@ -391,6 +402,8 @@ int main(int argc, char **argv)
}
/* Test: origin_buf = NULL, origin_count = 0, origin_dtype = NULL */
+ memset(res_ptr, -1, sizeof(TYPE_C) * nproc * COUNT);
+
MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
MPI_Get_accumulate(NULL, 0, MPI_DATATYPE_NULL, res_ptr, COUNT, TYPE_MPI,
target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
diff --git a/test/mpi/rma/getfence1.c b/test/mpi/rma/getfence1.c
index 342ba67..d8aa9d9 100644
--- a/test/mpi/rma/getfence1.c
+++ b/test/mpi/rma/getfence1.c
@@ -22,7 +22,7 @@ static inline int test(MPI_Comm comm, int rank, int source, int dest,
{
int errs = 0, err;
int disp_unit;
- MPI_Aint extent;
+ MPI_Aint extent, lb;
MPI_Win win;
MTestPrintfMsg(1,
@@ -37,8 +37,9 @@ static inline int test(MPI_Comm comm, int rank, int source, int dest,
sendtype->printErrors = 1;
MPI_Type_extent(sendtype->datatype, &extent);
+ MPI_Type_lb(sendtype->datatype, &lb);
disp_unit = extent < INT_MAX ? extent : 1;
- MPI_Win_create(sendtype->buf, sendtype->count * extent, disp_unit, MPI_INFO_NULL, comm, &win);
+ MPI_Win_create(sendtype->buf, sendtype->count * extent + lb, disp_unit, MPI_INFO_NULL, comm, &win);
MPI_Win_fence(0, win);
if (rank == source) {
/* The source does not need to do anything besides the
diff --git a/test/mpi/rma/linked_list_bench_lock_all.c b/test/mpi/rma/linked_list_bench_lock_all.c
index cf84edf..5e0dfa4 100644
--- a/test/mpi/rma/linked_list_bench_lock_all.c
+++ b/test/mpi/rma/linked_list_bench_lock_all.c
@@ -122,6 +122,8 @@ int main(int argc, char **argv)
llist_ptr_t new_elem_ptr;
int success = 0;
+ MTEST_VG_MEM_INIT(&new_elem_ptr, sizeof(llist_ptr_t));
+
/* Create a new list element and register it with the window */
new_elem_ptr.rank = procid;
new_elem_ptr.disp = alloc_elem(procid, llist_win);
diff --git a/test/mpi/rma/linked_list_bench_lock_excl.c b/test/mpi/rma/linked_list_bench_lock_excl.c
index d2bd702..c52208e 100644
--- a/test/mpi/rma/linked_list_bench_lock_excl.c
+++ b/test/mpi/rma/linked_list_bench_lock_excl.c
@@ -118,6 +118,8 @@ int main(int argc, char **argv)
llist_ptr_t new_elem_ptr;
int success = 0;
+ MTEST_VG_MEM_INIT(&new_elem_ptr, sizeof(llist_ptr_t));
+
/* Create a new list element and register it with the window */
new_elem_ptr.rank = procid;
new_elem_ptr.disp = alloc_elem(procid, llist_win);
diff --git a/test/mpi/rma/linked_list_bench_lock_shr.c b/test/mpi/rma/linked_list_bench_lock_shr.c
index 6973a22..9577b16 100644
--- a/test/mpi/rma/linked_list_bench_lock_shr.c
+++ b/test/mpi/rma/linked_list_bench_lock_shr.c
@@ -119,6 +119,8 @@ int main(int argc, char **argv)
llist_ptr_t new_elem_ptr;
int success = 0;
+ MTEST_VG_MEM_INIT(&new_elem_ptr, sizeof(llist_ptr_t));
+
/* Create a new list element and register it with the window */
new_elem_ptr.rank = procid;
new_elem_ptr.disp = alloc_elem(procid, llist_win);
diff --git a/test/mpi/rma/lockcontention3.c b/test/mpi/rma/lockcontention3.c
index bc3fa79..8be8a50 100644
--- a/test/mpi/rma/lockcontention3.c
+++ b/test/mpi/rma/lockcontention3.c
@@ -163,6 +163,7 @@ int main(int argc, char *argv[])
if (getbuf) {
free(getbuf);
}
+ free(srcbuf);
MPI_Win_free(&win);
MPI_Type_free(&vectype);
diff --git a/test/mpi/rma/manyget.c b/test/mpi/rma/manyget.c
index f498fcf..07b20af 100644
--- a/test/mpi/rma/manyget.c
+++ b/test/mpi/rma/manyget.c
@@ -12,6 +12,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <mpi.h>
+#include "mpitest.h"
#define BUFSIZE (128*1024)
@@ -24,6 +25,7 @@ int main(int argc, char *argv[])
MPI_Init(&argc, &argv);
buf = malloc(BUFSIZE);
+ MTEST_VG_MEM_INIT(buf, BUFSIZE);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
diff --git a/test/mpi/rma/overlap_wins_rma.c b/test/mpi/rma/overlap_wins_rma.c
new file mode 100644
index 0000000..9ccdeef
--- /dev/null
+++ b/test/mpi/rma/overlap_wins_rma.c
@@ -0,0 +1,304 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+/* This test checks the remote completion of flush with RMA write-like operations
+ * (PUT, ACC, GET_ACC, FOP, CAS) concurrently issued from different origin processes
+ * to the same target over overlapping windows (i.e., two windows exposing the same
+ * memory region)
+ * 1. The first [nprocs-1] processes perform as origin, and the last process
+ * performs as target.
+ * 2. Everyone allocates a buffer and creates [nprocs-1] windows over the same buffer.
+ * 3. Every origin P[i] issues RMA operations and flush to target through
+ * wins[i] respectively, to different location winbuf[i] on target.
+ * 4. Finally, every origin P[i] issues GET and flush to obtain winbuf[i] on
+ * target and checks the correctness. */
+
+#define ITER 10
+#define BUF_CNT 2
+
+#if defined(TEST_CAS)
+#define MPI_DATATYPE MPI_INT
+#define DATATYPE int
+#define DATATYPE_FORMAT "%d"
+#else
+#define MPI_DATATYPE MPI_DOUBLE
+#define DATATYPE double
+#define DATATYPE_FORMAT "%.1f"
+#endif
+
+DATATYPE local_buf[BUF_CNT], result_buf[BUF_CNT], compare_buf[BUF_CNT];
+DATATYPE exp_target_val = 0.0;
+
+const int verbose = 0;
+
+int rank = -1, nprocs = 0;
+int norigins, target;
+MPI_Win *wins;
+int win_size = 0, win_cnt = 0;
+
+DATATYPE *winbuf = NULL, *my_base = NULL;
+
+#define verbose_print(str,...) { \
+ if (verbose) { \
+ fprintf(stdout, str, ## __VA_ARGS__); \
+ fflush(stdout); \
+ } \
+ }
+#define error_print(str,...) { \
+ fprintf(stderr, str, ## __VA_ARGS__); \
+ fflush(stderr); \
+ }
+
+/* Define operation name for error message */
+#ifdef TEST_PUT
+const char *rma_name = "Put";
+#elif defined(TEST_ACC)
+const char *rma_name = "Accumulate";
+#elif defined(TEST_GACC)
+const char *rma_name = "Get_accumulate";
+#elif defined(TEST_FOP)
+const char *rma_name = "Fetch_and_op";
+#elif defined(TEST_CAS)
+const char *rma_name = "Compare_and_swap";
+#else
+const char *rma_name = "None";
+#endif
+
+/* Issue functions for different RMA operations */
+#ifdef TEST_PUT
+static inline void issue_rma_op(DATATYPE * origin_addr, DATATYPE * result_addr /* NULL */ ,
+ DATATYPE * compare_addr /* NULL */ , int dst, MPI_Aint target_disp,
+ MPI_Win win)
+{
+ MPI_Put(origin_addr, 1, MPI_DATATYPE, dst, target_disp, 1, MPI_DATATYPE, win);
+}
+#elif defined(TEST_ACC)
+static inline void issue_rma_op(DATATYPE * origin_addr, DATATYPE * result_addr /* NULL */ ,
+ DATATYPE * compare_addr /* NULL */ , int dst, MPI_Aint target_disp,
+ MPI_Win win)
+{
+ MPI_Accumulate(origin_addr, 1, MPI_DATATYPE, dst, target_disp, 1, MPI_DATATYPE, MPI_SUM, win);
+}
+#elif defined(TEST_GACC)
+static inline void issue_rma_op(DATATYPE * origin_addr, DATATYPE * result_addr,
+ DATATYPE * compare_addr /* NULL */ , int dst, MPI_Aint target_disp,
+ MPI_Win win)
+{
+ MPI_Get_accumulate(origin_addr, 1, MPI_DATATYPE, result_addr, 1, MPI_DATATYPE, dst, target_disp,
+ 1, MPI_DATATYPE, MPI_SUM, win);
+}
+#elif defined(TEST_FOP)
+static inline void issue_rma_op(DATATYPE * origin_addr, DATATYPE * result_addr,
+ DATATYPE * compare_addr /* NULL */ , int dst, MPI_Aint target_disp,
+ MPI_Win win)
+{
+ MPI_Fetch_and_op(origin_addr, result_addr, MPI_DATATYPE, dst, target_disp, MPI_SUM, win);
+}
+#elif defined(TEST_CAS)
+static inline void issue_rma_op(DATATYPE * origin_addr, DATATYPE * result_addr,
+ DATATYPE * compare_addr, int dst, MPI_Aint target_disp, MPI_Win win)
+{
+ MPI_Compare_and_swap(origin_addr, compare_addr, result_addr, MPI_DATATYPE, dst, target_disp,
+ win);
+}
+#else
+#define issue_rma_op(loc_addr, result_addr, compare_addr, dst, target_disp, win)
+#endif
+
+static inline void set_iteration_data(int x)
+{
+ int i;
+
+#if defined(TEST_CAS)
+ for (i = 0; i < BUF_CNT; i++)
+ compare_buf[i] = local_buf[i]; /* always equal, thus swap happens */
+#endif
+
+ for (i = 0; i < BUF_CNT; i++) {
+ local_buf[i] = rank + i + x;
+
+#if defined(TEST_CAS) || defined(TEST_PUT)
+ exp_target_val = local_buf[i]; /* swap */
+#else
+ exp_target_val += local_buf[i]; /* sum */
+#endif
+ }
+}
+
+static void print_origin_data(void)
+{
+ int i;
+
+ printf("[%d] local_buf: ", rank);
+ for (i = 0; i < BUF_CNT; i++)
+ printf(DATATYPE_FORMAT " ", local_buf[i]);
+ printf("\n");
+
+ printf("[%d] result_buf: ", rank);
+ for (i = 0; i < BUF_CNT; i++)
+ printf(DATATYPE_FORMAT " ", result_buf[i]);
+ printf("\n");
+}
+
+static void print_target_data(void)
+{
+ int i;
+ printf("[%d] winbuf: ", rank);
+ for (i = 0; i < win_cnt; i++)
+ printf(DATATYPE_FORMAT " ", winbuf[i]);
+ printf("\n");
+ fflush(stdout);
+}
+
+static int run_test()
+{
+ int errors = 0;
+ int i, x;
+ int dst = 0, target_disp = 0;
+ MPI_Win win = MPI_WIN_NULL;
+ DATATYPE target_val = 0.0;
+
+ /* 1. Specify working window and displacement.
+ * - Target: no RMA issued, always check results on wins[0].
+ * - Origins: issue RMA on different window and different memory location */
+ if (rank == target) {
+ win = wins[0];
+ }
+ else {
+ win = wins[rank];
+ target_disp = rank;
+ }
+ dst = target;
+
+ /* 2. Every one resets local data */
+ memset(local_buf, 0, sizeof(local_buf));
+ memset(result_buf, 0, sizeof(result_buf));
+ memset(compare_buf, 0, sizeof(compare_buf));
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ if (rank != target) {
+
+ /* 3. Origins issue RMA to target over its working window */
+ MPI_Win_lock(MPI_LOCK_SHARED, dst, 0, win);
+ verbose_print("[%d] RMA start, test %s (dst=%d, target_disp=%d, win 0x%x) - flush\n",
+ rank, rma_name, dst, target_disp, win);
+
+ for (x = 0; x < ITER; x++) {
+ /* update local buffers and expected value in every iteration */
+ set_iteration_data(x);
+
+ for (i = 0; i < BUF_CNT; i++)
+ issue_rma_op(&local_buf[i], &result_buf[i], &compare_buf[i], dst, target_disp, win);
+ MPI_Win_flush(dst, win);
+
+ if (verbose)
+ print_origin_data();
+ }
+
+ /* 4. Check correctness of final target value */
+ MPI_Get(&target_val, 1, MPI_DATATYPE, dst, target_disp, 1, MPI_DATATYPE, win);
+ MPI_Win_flush(dst, win);
+ if (target_val != exp_target_val) {
+ error_print("rank %d (iter %d) - check %s, got target_val = "
+ DATATYPE_FORMAT ", expected " DATATYPE_FORMAT "\n", rank, x,
+ rma_name, target_val, exp_target_val);
+ errors++;
+ }
+
+ MPI_Win_unlock(dst, win);
+ }
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* 5. Every one prints window buffer */
+ if (verbose && rank == target) {
+ MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, win);
+ print_target_data();
+ MPI_Win_unlock(rank, win);
+ }
+
+ return errors;
+}
+
+static void init_windows(void)
+{
+ int i = 0;
+
+ /* Everyone creates norigins overlapping windows. */
+ winbuf = malloc(win_size);
+ memset(winbuf, 0, win_size);
+
+ wins = malloc(norigins * sizeof(MPI_Win));
+ for (i = 0; i < norigins; i++) {
+ wins[i] = MPI_WIN_NULL;
+ MPI_Win_create(winbuf, win_size, sizeof(DATATYPE), MPI_INFO_NULL, MPI_COMM_WORLD, &wins[i]);
+ }
+}
+
+static void destroy_windows(void)
+{
+ int i = 0;
+ for (i = 0; i < norigins; i++) {
+ if (wins[i] != MPI_WIN_NULL)
+ MPI_Win_free(&wins[i]);
+ }
+ free(wins);
+ free(winbuf);
+}
+
+int main(int argc, char *argv[])
+{
+ int errors = 0, all_errors = 0;
+
+ MPI_Init(&argc, &argv);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+ if (nprocs < 3) {
+ if (rank == 0) {
+ error_print("Error: must use at least 3 processes\n");
+ }
+ MPI_Barrier(MPI_COMM_WORLD);
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+
+ /* The last rank performs as target, all others are origin.
+ * Every origin accesses to a different memory location on the target. */
+ target = nprocs - 1;
+ norigins = nprocs - 1;
+ win_cnt = nprocs - 1;
+ win_size = sizeof(DATATYPE) * win_cnt;
+
+ if (rank == 0) {
+ verbose_print("[%d] %d origins, target rank = %d\n", rank, norigins, target);
+ }
+
+ init_windows();
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* start test */
+ errors = run_test();
+
+ MPI_Barrier(MPI_COMM_WORLD);
+ MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+ if (rank == 0 && all_errors == 0) {
+ fprintf(stdout, " No Errors\n");
+ fflush(stdout);
+ }
+
+ destroy_windows();
+ MPI_Finalize();
+
+ return 0;
+}
diff --git a/test/mpi/rma/putfence1.c b/test/mpi/rma/putfence1.c
index 103ce77..3670265 100644
--- a/test/mpi/rma/putfence1.c
+++ b/test/mpi/rma/putfence1.c
@@ -21,7 +21,7 @@ static inline int test(MPI_Comm comm, int rank, int source, int dest,
MTestDatatype * sendtype, MTestDatatype * recvtype)
{
int errs = 0, err;
- MPI_Aint extent;
+ MPI_Aint extent, lb;
MPI_Win win;
MTestPrintfMsg(1,
@@ -32,7 +32,8 @@ static inline int test(MPI_Comm comm, int rank, int source, int dest,
/* Make sure that everyone has a recv buffer */
recvtype->InitBuf(recvtype);
MPI_Type_extent(recvtype->datatype, &extent);
- MPI_Win_create(recvtype->buf, recvtype->count * extent, extent, MPI_INFO_NULL, comm, &win);
+ MPI_Type_lb(recvtype->datatype, &lb);
+ MPI_Win_create(recvtype->buf, recvtype->count * extent + lb, extent, MPI_INFO_NULL, comm, &win);
MPI_Win_fence(0, win);
if (rank == source) {
/* To improve reporting of problems about operations, we
diff --git a/test/mpi/rma/putpscw1.c b/test/mpi/rma/putpscw1.c
index b642695..d46c8f9 100644
--- a/test/mpi/rma/putpscw1.c
+++ b/test/mpi/rma/putpscw1.c
@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
int minsize = 2, count;
MPI_Comm comm;
MPI_Win win;
- MPI_Aint extent;
+ MPI_Aint extent, lb;
MPI_Group wingroup, neighbors;
MTestDatatype sendtype, recvtype;
@@ -44,7 +44,8 @@ int main(int argc, char *argv[])
recvtype.InitBuf(&recvtype);
MPI_Type_extent(recvtype.datatype, &extent);
- MPI_Win_create(recvtype.buf, recvtype.count * extent,
+ MPI_Type_lb(recvtype.datatype, &lb);
+ MPI_Win_create(recvtype.buf, recvtype.count * extent + lb,
(int) extent, MPI_INFO_NULL, comm, &win);
MPI_Win_get_group(win, &wingroup);
if (rank == source) {
diff --git a/test/mpi/rma/reqops.c b/test/mpi/rma/reqops.c
index 0c84bcd..c24af56 100644
--- a/test/mpi/rma/reqops.c
+++ b/test/mpi/rma/reqops.c
@@ -37,7 +37,8 @@ int main(int argc, char *argv[])
else
buf = NULL;
- MPI_Win_create(buf, 4 * sizeof(int) * (rank == 0), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &window);
+ MPI_Win_create(buf, 4 * sizeof(int) * (rank == 0), sizeof(int),
+ MPI_INFO_NULL, MPI_COMM_WORLD, &window);
/* PROC_NULL Communication */
{
diff --git a/test/mpi/rma/rget-unlock.c b/test/mpi/rma/rget-unlock.c
new file mode 100644
index 0000000..4c854df
--- /dev/null
+++ b/test/mpi/rma/rget-unlock.c
@@ -0,0 +1,87 @@
+/*
+ * (C) 2016 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ *
+ * Portions of this code were written by Intel Corporation.
+ * Copyright (C) 2011-2016 Intel Corporation. Intel provides this material
+ * to Argonne National Laboratory subject to Software Grant and Corporate
+ * Contributor License Agreement dated February 8, 2012.
+ *
+ *
+ * This is a test case to make sure synchronization in unlock works correctly.
+ *
+ * Essentially this program does the following:
+ *
+ * lock_all
+ * req=rget(buf)
+ * unlock_all
+ * re-use buf
+ * wait(req)
+ *
+ * This program is valid but if unlock_all does not implement the synchronization
+ * semantics correctly reusing the buffer would race with outstanding rgets.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <mpi.h>
+
+#define N_ELMS (128)
+#define BLOCKSIZE (1)
+#define N_BLOCKS (N_ELMS/BLOCKSIZE)
+
+int main(int argc, char *argv[])
+{
+ MPI_Win win;
+ int i;
+ int *rbuf, *lbuf;
+ int rank, size, trg;
+ MPI_Request *reqs;
+ int n_errors = 0;
+
+ MPI_Init(&argc, &argv);
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+ trg = (rank + 1) % size;
+
+ rbuf = malloc(sizeof(int) * N_ELMS);
+ for (i = 0; i < N_ELMS; i++)
+ rbuf[i] = rank;
+
+ lbuf = malloc(sizeof(int) * N_ELMS);
+ memset(lbuf, -1, sizeof(int) * N_ELMS);
+
+ reqs = malloc(sizeof(MPI_Request) * N_BLOCKS);
+
+ MPI_Win_create(rbuf, sizeof(int) * N_ELMS, sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+ MPI_Win_lock_all(MPI_MODE_NOCHECK, win);
+ for (i = 0; i < N_BLOCKS; i++)
+ MPI_Rget(lbuf+i*BLOCKSIZE, BLOCKSIZE, MPI_INT, trg, i*BLOCKSIZE, BLOCKSIZE, MPI_INT, win, &reqs[i]);
+ MPI_Win_unlock_all(win);
+ for (i = 0; i < N_ELMS; i++)
+ lbuf[i] = -2;
+
+ MPI_Waitall(N_BLOCKS, reqs, MPI_STATUSES_IGNORE);
+ for (i = 0; i < N_ELMS; i++) {
+ int v = lbuf[i];
+ if (v != -2) {
+ printf("lbuf[%d]=%d, expected -2\n", i, v);
+ n_errors++;
+ }
+ }
+ MPI_Win_free(&win);
+
+ free(reqs);
+ free(lbuf);
+ free(rbuf);
+
+ if (rank == 0 && n_errors == 0)
+ printf(" No Errors\n");
+
+ MPI_Finalize();
+ return 0;
+}
diff --git a/test/mpi/rma/selfrma.c b/test/mpi/rma/selfrma.c
index 701fcea..6a8b4f0 100644
--- a/test/mpi/rma/selfrma.c
+++ b/test/mpi/rma/selfrma.c
@@ -63,7 +63,7 @@ int main(int argc, char *argv[])
for (i = 0; i < vcount; i++) {
if (winbuf[j] != sbuf[j]) {
errs++;
- fprintf(stderr, "VecPut: winbuf[%d] = %d, should = %d\n", winbuf[j], j, sbuf[j]);
+ fprintf(stderr, "VecPut: winbuf[%d] = %d, should = %d\n", j, winbuf[j], sbuf[j]);
}
j += 2;
}
@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
for (i = 0; i < vcount; i++) {
if (winbuf[j] != sbuf[j]) {
errs++;
- fprintf(stderr, "VecAcc: winbuf[%d] = %d, should = %d\n", winbuf[j], j, sbuf[j]);
+ fprintf(stderr, "VecAcc: winbuf[%d] = %d, should = %d\n", j, winbuf[j], sbuf[j]);
}
j += 2;
}
@@ -92,7 +92,7 @@ int main(int argc, char *argv[])
for (i = 0; i < vcount; i++) {
if (winbuf[j] != sbuf[j]) {
errs++;
- fprintf(stderr, "VecAcc: winbuf[%d] = %d, should = %d\n", winbuf[j], j, sbuf[j]);
+ fprintf(stderr, "VecAcc: winbuf[%d] = %d, should = %d\n", j, winbuf[j], sbuf[j]);
}
j += 2;
}
diff --git a/test/mpi/rma/strided_getacc_indexed_shared.c b/test/mpi/rma/strided_getacc_indexed_shared.c
index 7ed4a8d..6a36196 100644
--- a/test/mpi/rma/strided_getacc_indexed_shared.c
+++ b/test/mpi/rma/strided_getacc_indexed_shared.c
@@ -41,7 +41,7 @@ int main(int argc, char **argv)
MPI_Comm_rank(MPI_COMM_WORLD, &rank_world);
MPI_Comm_size(MPI_COMM_WORLD, &nranks_world);
- MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shr_comm);
+ MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank_world, MPI_INFO_NULL, &shr_comm);
MPI_Comm_rank(shr_comm, &rank);
MPI_Comm_size(shr_comm, &nranks);
diff --git a/test/mpi/rma/strided_putget_indexed_shared.c b/test/mpi/rma/strided_putget_indexed_shared.c
index 998debd..b6f2bfa 100644
--- a/test/mpi/rma/strided_putget_indexed_shared.c
+++ b/test/mpi/rma/strided_putget_indexed_shared.c
@@ -41,7 +41,7 @@ int main(int argc, char **argv)
MPI_Comm_rank(MPI_COMM_WORLD, &rank_world);
MPI_Comm_size(MPI_COMM_WORLD, &nranks_world);
- MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shr_comm);
+ MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank_world, MPI_INFO_NULL, &shr_comm);
MPI_Comm_rank(shr_comm, &rank);
MPI_Comm_size(shr_comm, &nranks);
diff --git a/test/mpi/rma/testlist.in b/test/mpi/rma/testlist.in
index 3f1c6a5..5ba6df1 100644
--- a/test/mpi/rma/testlist.in
+++ b/test/mpi/rma/testlist.in
@@ -157,6 +157,12 @@ acc_flush_get 3 mpiversion=3.0
gacc_flush_get 3 mpiversion=3.0
fop_flush_get 3 mpiversion=3.0
cas_flush_get 3 mpiversion=3.0
+rget-unlock 2 mpiversion=3.0
+overlap_wins_put 3
+overlap_wins_acc 3
+overlap_wins_gacc 3
+overlap_wins_fop 3
+overlap_wins_cas 3
## This test is not strictly correct. This was meant to test out the
## case when MPI_Test is not nonblocking. However, we ended up
diff --git a/test/mpi/rma/transpose7.c b/test/mpi/rma/transpose7.c
index 4b4f6a0..cd9e20b 100644
--- a/test/mpi/rma/transpose7.c
+++ b/test/mpi/rma/transpose7.c
@@ -90,6 +90,8 @@ int main(int argc, char *argv[])
MPI_Win_fence(0, win);
}
MPI_Win_free(&win);
+ free(A_data);
+ free(A);
}
MPI_Comm_free(&CommDeuce);
MTest_Finalize(errs);
diff --git a/test/mpi/runtests.in b/test/mpi/runtests.in
index 185e90f..32ad45b 100644
--- a/test/mpi/runtests.in
+++ b/test/mpi/runtests.in
@@ -65,6 +65,7 @@ $np_default = 2; # Default number of processes to use
$np_max = -1; # Maximum number of processes to use (overrides any
# value in the test list files. -1 is Infinity
$defaultTimeLimit = 180; # default timeout
+$defaultTimeLimitMultiplier = 1.0; # default multiplier for timeout limit
$srcdir = "."; # Used to set the source dir for testlist files
@@ -112,6 +113,7 @@ my $program_wrapper = '';
# RUNTESTS_SHOWPROGRESS
# MPITEST_STOPTEST
# MPITEST_TIMEOUT
+# MPITEST_TIMEOUT_MULTIPLIER
# MPITEST_PROGRAM_WRAPPER (Value is added after -np but before test
# executable. Tools like valgrind may be inserted
# this way.)
@@ -134,6 +136,10 @@ if (defined($ENV{"MPITEST_TIMEOUT"})) {
$defaultTimeLimit = $ENV{"MPITEST_TIMEOUT"};
}
+if (defined($ENV{"MPITEST_TIMEOUT_MULTIPLIER"})) {
+ $defaultTimeLimitMultiplier = $ENV{"MPITEST_TIMEOUT_MULTIPLIER"};
+}
+
# Define this to leave the XML output file open to receive additional data
if (defined($ENV{'NOXMLCLOSE'}) && $ENV{'NOXMLCLOSE'} eq 'YES') {
$closeXMLOutput = 0;
@@ -694,6 +700,7 @@ sub RunMPIProgram {
if (defined($timeLimit) && $timeLimit =~ /^\d+$/) {
$timeout = $timeLimit;
}
+ $timeout *= $defaultTimeLimitMultiplier;
$ENV{"MPIEXEC_TIMEOUT"} = $timeout;
# Handle the ppn (processes per node) option.
@@ -793,7 +800,7 @@ sub RunMPIProgram {
}
}
if ($found_error) {
- &RunTestFailed( $programname, $np, $curdir, $inline, $xfail );
+ &RunTestFailed( $programname, $np, $timeout, $curdir, $inline, $xfail );
}
else {
&RunTestPassed( $programname, $np, $curdir, $xfail );
@@ -826,6 +833,7 @@ sub AddMPIProgram {
# want to treat these also as "run manually".
$timeout = $timeLimit;
}
+ $timeout *= $defaultTimeLimitMultiplier;
print BATOUT "export MPIEXEC_TIMEOUT=$timeout\n";
# Run the optional setup routine. For example, the timeout tests could
@@ -912,7 +920,7 @@ sub BuildMPIProgram {
# in the summary file (which is otherwise written by the
# RunMPIProgram step)
&RunPreMsg( $programname, $np, $curdir );
- &RunTestFailed( $programname, $np, $curdir, "Failed to build $programname; $output", $xfail );
+ &RunTestFailed( $programname, $np, $timeout, $curdir, "Failed to build $programname; $output", $xfail );
&RunPostMsg( $programname, $np, $curdir );
}
return $rc;
@@ -1190,6 +1198,7 @@ sub RunTestPassed {
sub RunTestFailed {
my $programname = shift;
my $np = shift;
+ my $timeout = shift;
my $workdir = shift;
my $output = shift;
my $xfail = shift;
@@ -1217,6 +1226,7 @@ sub RunTestFailed {
print TAPOUT " Directory: $workdir\n";
print TAPOUT " File: $programname\n";
print TAPOUT " Num-procs: $np\n";
+ print TAPOUT " Timeout: $timeout\n";
print TAPOUT " Date: \"" . localtime() . "\"\n";
# The following would be nice, but it leads to unfortunate formatting in
@@ -1259,6 +1269,7 @@ sub RunTestFailed {
print JUNITOUT " Directory: $workdir\n";
print JUNITOUT " File: $programname\n";
print JUNITOUT " Num-procs: $np\n";
+ print JUNITOUT " Timeout: $timeout\n";
print JUNITOUT " Date: \"" . localtime() . "\"\n";
print JUNITOUT " ...\n";
diff --git a/test/mpi/spawn/Makefile.in b/test/mpi/spawn/Makefile.in
index 7f13026..ad8d249 100644
--- a/test/mpi/spawn/Makefile.in
+++ b/test/mpi/spawn/Makefile.in
@@ -534,6 +534,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -552,7 +553,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
join_LDADD = $(LDADD) @socklib@ @nslib@
all: all-am
@@ -971,10 +972,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/spawn/multiple_ports.c b/test/mpi/spawn/multiple_ports.c
index c747fce..e5f1867 100644
--- a/test/mpi/spawn/multiple_ports.c
+++ b/test/mpi/spawn/multiple_ports.c
@@ -32,6 +32,9 @@ int main(int argc, char *argv[])
int verbose = 0;
int data = 0;
+ MTEST_VG_MEM_INIT(port1, MPI_MAX_PORT_NAME * sizeof(char));
+ MTEST_VG_MEM_INIT(port2, MPI_MAX_PORT_NAME * sizeof(char));
+
if (getenv("MPITEST_VERBOSE")) {
verbose = 1;
}
diff --git a/test/mpi/spawn/multiple_ports2.c b/test/mpi/spawn/multiple_ports2.c
index b07f8dc..e88396c 100644
--- a/test/mpi/spawn/multiple_ports2.c
+++ b/test/mpi/spawn/multiple_ports2.c
@@ -38,6 +38,10 @@ int main(int argc, char *argv[])
int verbose = 0;
int data = 0;
+ MTEST_VG_MEM_INIT(port1, MPI_MAX_PORT_NAME * sizeof(char));
+ MTEST_VG_MEM_INIT(port2, MPI_MAX_PORT_NAME * sizeof(char));
+ MTEST_VG_MEM_INIT(port3, MPI_MAX_PORT_NAME * sizeof(char));
+
if (getenv("MPITEST_VERBOSE")) {
verbose = 1;
}
diff --git a/test/mpi/spawn/selfconacc.c b/test/mpi/spawn/selfconacc.c
index 85d4e5c..a665a75 100644
--- a/test/mpi/spawn/selfconacc.c
+++ b/test/mpi/spawn/selfconacc.c
@@ -7,6 +7,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include "mpitest.h"
void check_error(int, const char *);
void check_error(int error, const char *fcname)
@@ -30,6 +31,8 @@ int main(int argc, char *argv[])
MPI_Comm comm;
int verbose = 0;
+ MTEST_VG_MEM_INIT(port, MPI_MAX_PORT_NAME * sizeof(char));
+
if (getenv("MPITEST_VERBOSE")) {
verbose = 1;
}
diff --git a/test/mpi/spawn/spawn-rootargs.c b/test/mpi/spawn/spawn-rootargs.c
index abcf5b3..1657d3e 100644
--- a/test/mpi/spawn/spawn-rootargs.c
+++ b/test/mpi/spawn/spawn-rootargs.c
@@ -1,3 +1,9 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
#include <mpi.h>
#include <stdio.h>
@@ -20,7 +26,7 @@ int main(int argc, char *argv[])
if (master == MPI_COMM_NULL) {
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Comm_spawn("./spawn-nullargs", args, /*MPI_ARGV_NULL, */
+ MPI_Comm_spawn("./spawn-rootargs", args, /*MPI_ARGV_NULL, */
5, MPI_INFO_NULL, 0, MPI_COMM_SELF, &worker, MPI_ERRCODES_IGNORE);
MPI_Barrier(worker);
MPI_Comm_disconnect(&worker);
diff --git a/test/mpi/spawn/spawnmanyarg.c b/test/mpi/spawn/spawnmanyarg.c
index 1547110..2275e91 100644
--- a/test/mpi/spawn/spawnmanyarg.c
+++ b/test/mpi/spawn/spawnmanyarg.c
@@ -114,6 +114,12 @@ int main(int argc, char *argv[])
if (parentcomm == MPI_COMM_NULL) {
MTest_Finalize(errs);
}
+ /* free the argument vectors */
+ for (i = 0; i < MAX_ARGV; i++) {
+ free(inargv[i]);
+ free(outargv[i]);
+ }
+
}
else {
MTest_Finalize(errs);
diff --git a/test/mpi/spawn/taskmaster.c b/test/mpi/spawn/taskmaster.c
index f5cffd7..7d484d9 100644
--- a/test/mpi/spawn/taskmaster.c
+++ b/test/mpi/spawn/taskmaster.c
@@ -64,7 +64,7 @@ int main(int argc, char *argv[])
int provided;
pthread_t *threads = NULL;
#else
- MPI_Comm *child;
+ MPI_Comm *child = NULL;
#endif /* USE_THREADS */
int can_spawn, errs = 0;
@@ -158,6 +158,9 @@ int main(int argc, char *argv[])
#ifdef USE_THREADS
if (threads)
free(threads);
+#else
+ if (child)
+ free(child);
#endif
MPI_Finalize();
diff --git a/test/mpi/spawn/testlist.in b/test/mpi/spawn/testlist.in
index af042a2..586322d 100644
--- a/test/mpi/spawn/testlist.in
+++ b/test/mpi/spawn/testlist.in
@@ -26,4 +26,4 @@ disconnect3 3
concurrent_spawns 1
pgroup_connect_test 4
pgroup_intercomm_test 4
-spawn-rootargs 10 xfail=ticket2282
+spawn-rootargs 10
diff --git a/test/mpi/threads/Makefile.in b/test/mpi/threads/Makefile.in
index f9710cd..42adad2 100644
--- a/test/mpi/threads/Makefile.in
+++ b/test/mpi/threads/Makefile.in
@@ -359,6 +359,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -377,7 +378,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
SUBDIRS = util pt2pt comm init mpi_t $(spawndir) rma coll
DIST_SUBDIRS = util pt2pt comm init mpi_t spawn rma coll
@@ -699,10 +700,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/threads/coll/Makefile.in b/test/mpi/threads/coll/Makefile.in
index 999fd6f..cc83000 100644
--- a/test/mpi/threads/coll/Makefile.in
+++ b/test/mpi/threads/coll/Makefile.in
@@ -352,6 +352,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -371,7 +372,7 @@ LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o \
$(top_builddir)/threads/util/mtestthread.$(OBJEXT) @threadlib@
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
all: all-am
@@ -659,10 +660,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
$(top_builddir)/threads/util/mtestthread.$(OBJEXT): $(top_srcdir)/threads/util/mtestthread.c
(cd $(top_builddir)/threads/util && $(MAKE) mtestthread.$(OBJEXT))
diff --git a/test/mpi/threads/coll/allred.c b/test/mpi/threads/coll/allred.c
index 103a6e9..b8df28a 100644
--- a/test/mpi/threads/coll/allred.c
+++ b/test/mpi/threads/coll/allred.c
@@ -37,6 +37,8 @@ MTEST_THREAD_RETURN_TYPE test_iallred(void *arg)
int tid = *(int *) arg;
int buf[BUF_SIZE];
+ MTEST_VG_MEM_INIT(buf, BUF_SIZE * sizeof(int));
+
if (tid == rank)
MTestSleep(1);
MPI_Allreduce(MPI_IN_PLACE, buf, BUF_SIZE, MPI_INT, MPI_BAND, comms[tid]);
diff --git a/test/mpi/threads/coll/iallred.c b/test/mpi/threads/coll/iallred.c
index 974d43b..a999142 100644
--- a/test/mpi/threads/coll/iallred.c
+++ b/test/mpi/threads/coll/iallred.c
@@ -37,6 +37,8 @@ MTEST_THREAD_RETURN_TYPE test_iallred(void *arg)
int tid = *(int *) arg;
int buf[BUF_SIZE];
+ MTEST_VG_MEM_INIT(buf, BUF_SIZE * sizeof(int));
+
if (tid == rank)
MTestSleep(1);
MPI_Iallreduce(MPI_IN_PLACE, buf, BUF_SIZE, MPI_INT, MPI_BAND, comms[tid], &req);
diff --git a/test/mpi/threads/comm/Makefile.in b/test/mpi/threads/comm/Makefile.in
index f26915b..15fb9c9 100644
--- a/test/mpi/threads/comm/Makefile.in
+++ b/test/mpi/threads/comm/Makefile.in
@@ -429,6 +429,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -448,7 +449,7 @@ LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o \
$(top_builddir)/threads/util/mtestthread.$(OBJEXT) @threadlib@
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist.in
all: all-am
@@ -781,10 +782,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
$(top_builddir)/threads/util/mtestthread.$(OBJEXT): $(top_srcdir)/threads/util/mtestthread.c
(cd $(top_builddir)/threads/util && $(MAKE) mtestthread.$(OBJEXT))
diff --git a/test/mpi/threads/comm/ctxdup.c b/test/mpi/threads/comm/ctxdup.c
index c45c664..5870a94 100644
--- a/test/mpi/threads/comm/ctxdup.c
+++ b/test/mpi/threads/comm/ctxdup.c
@@ -92,6 +92,8 @@ int main(int argc, char *argv[])
MPI_Ssend(buffer, 0, MPI_INT, rank, 1, MPI_COMM_WORLD);
MPI_Recv(buffer, 0, MPI_INT, rank, 2, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+ MTest_Join_threads();
+
MPI_Comm_free(&comm4);
MPI_Comm_free(&comm1);
MPI_Comm_free(&comm2);
diff --git a/test/mpi/threads/comm/idup_comm_gen.c b/test/mpi/threads/comm/idup_comm_gen.c
index 0f517c2..d9b2280 100644
--- a/test/mpi/threads/comm/idup_comm_gen.c
+++ b/test/mpi/threads/comm/idup_comm_gen.c
@@ -18,7 +18,7 @@
#define NUM_IDUPS 5
MPI_Comm comms[NUM_THREADS];
-MPI_Comm errs[NUM_THREADS] = { 0 };
+int errs[NUM_THREADS] = { 0 };
int verbose = 0;
diff --git a/test/mpi/threads/comm/idup_nb.c b/test/mpi/threads/comm/idup_nb.c
index 28a7d3e..5b1046d 100644
--- a/test/mpi/threads/comm/idup_nb.c
+++ b/test/mpi/threads/comm/idup_nb.c
@@ -57,6 +57,7 @@ MTEST_THREAD_RETURN_TYPE test_intracomm(void *arg)
MPI_Comm parentcomm = parentcomms[tid];
MPI_Comm nbrcomm = nbrcomms[tid];
+ MPI_Comm_rank(parentcomm, &rank);
for (i = 0; i < NUM_ITER; i++) {
cnt = 0;
if (*(int *) arg == rank)
@@ -70,7 +71,6 @@ MTEST_THREAD_RETURN_TYPE test_intracomm(void *arg)
MPI_Comm_idup(parentcomm, &comms[j], &reqs[cnt++]);
/* Issue an iscan on parent comm to overlap with the pending idups */
- MPI_Comm_rank(parentcomm, &rank);
MPI_Iscan(&rank, &ans[0], 1, MPI_INT, MPI_SUM, parentcomm, &reqs[cnt++]);
expected[0] = rank * (rank + 1) / 2;
/* Wait for the first child comm to be ready */
diff --git a/test/mpi/threads/init/Makefile.in b/test/mpi/threads/init/Makefile.in
index f65b4cb..aedaa65 100644
--- a/test/mpi/threads/init/Makefile.in
+++ b/test/mpi/threads/init/Makefile.in
@@ -345,6 +345,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -364,7 +365,7 @@ LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o \
$(top_builddir)/threads/util/mtestthread.$(OBJEXT) @threadlib@
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -645,10 +646,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
$(top_builddir)/threads/util/mtestthread.$(OBJEXT): $(top_srcdir)/threads/util/mtestthread.c
(cd $(top_builddir)/threads/util && $(MAKE) mtestthread.$(OBJEXT))
diff --git a/test/mpi/threads/mpi_t/Makefile.in b/test/mpi/threads/mpi_t/Makefile.in
index c959d1a..6d68854 100644
--- a/test/mpi/threads/mpi_t/Makefile.in
+++ b/test/mpi/threads/mpi_t/Makefile.in
@@ -345,6 +345,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -364,7 +365,7 @@ LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o \
$(top_builddir)/threads/util/mtestthread.$(OBJEXT) @threadlib@
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -645,10 +646,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
$(top_builddir)/threads/util/mtestthread.$(OBJEXT): $(top_srcdir)/threads/util/mtestthread.c
(cd $(top_builddir)/threads/util && $(MAKE) mtestthread.$(OBJEXT))
diff --git a/test/mpi/threads/pt2pt/Makefile.in b/test/mpi/threads/pt2pt/Makefile.in
index 440694a..0b0fec0 100644
--- a/test/mpi/threads/pt2pt/Makefile.in
+++ b/test/mpi/threads/pt2pt/Makefile.in
@@ -422,6 +422,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -441,7 +442,7 @@ LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o \
$(top_builddir)/threads/util/mtestthread.$(OBJEXT) @threadlib@
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -772,10 +773,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
$(top_builddir)/threads/util/mtestthread.$(OBJEXT): $(top_srcdir)/threads/util/mtestthread.c
(cd $(top_builddir)/threads/util && $(MAKE) mtestthread.$(OBJEXT))
diff --git a/test/mpi/threads/pt2pt/ibsend.c b/test/mpi/threads/pt2pt/ibsend.c
index aa868be..208ba7a 100644
--- a/test/mpi/threads/pt2pt/ibsend.c
+++ b/test/mpi/threads/pt2pt/ibsend.c
@@ -50,6 +50,7 @@ void *receiver(void *ptr)
void *sender_bsend(void *ptr)
{
char buffer[MSGSIZE];
+ MTEST_VG_MEM_INIT(buffer, MSGSIZE * sizeof(char));
MPI_Bsend(buffer, MSGSIZE, MPI_CHAR, (rank + 1) % size, 0, MPI_COMM_WORLD);
return NULL;
@@ -59,6 +60,7 @@ void *sender_ibsend(void *ptr)
{
char buffer[MSGSIZE];
MPI_Request req;
+ MTEST_VG_MEM_INIT(buffer, MSGSIZE * sizeof(char));
MPI_Ibsend(buffer, MSGSIZE, MPI_CHAR, (rank + 1) % size, 0, MPI_COMM_WORLD, &req);
MPI_Wait(&req, MPI_STATUS_IGNORE);
@@ -69,6 +71,7 @@ void *sender_isend(void *ptr)
{
char buffer[MSGSIZE];
MPI_Request req;
+ MTEST_VG_MEM_INIT(buffer, MSGSIZE * sizeof(char));
MPI_Isend(buffer, MSGSIZE, MPI_CHAR, (rank + 1) % size, 0, MPI_COMM_WORLD, &req);
MPI_Wait(&req, MPI_STATUS_IGNORE);
@@ -78,6 +81,7 @@ void *sender_isend(void *ptr)
void *sender_send(void *ptr)
{
char buffer[MSGSIZE];
+ MTEST_VG_MEM_INIT(buffer, MSGSIZE * sizeof(char));
MPI_Send(buffer, MSGSIZE, MPI_CHAR, (rank + 1) % size, 0, MPI_COMM_WORLD);
return NULL;
@@ -89,6 +93,7 @@ int main(int argc, char *argv[])
int provided, i[2], k;
char *buffer, *ptr_dt;
buffer = (char *) malloc(BUFSIZE * sizeof(char));
+ MTEST_VG_MEM_INIT(buffer, BUFSIZE * sizeof(char));
MPI_Status status;
pthread_t receiver_thread, sender_thread[NUMSENDS];
pthread_attr_t attr;
diff --git a/test/mpi/threads/pt2pt/multisend2.c b/test/mpi/threads/pt2pt/multisend2.c
index 4035504..ee51a93 100644
--- a/test/mpi/threads/pt2pt/multisend2.c
+++ b/test/mpi/threads/pt2pt/multisend2.c
@@ -31,6 +31,7 @@ MTEST_THREAD_RETURN_TYPE run_test_send(void *arg)
for (cnt = 1; cnt < MAX_CNT; cnt = 2 * cnt) {
buf = (int *) malloc(cnt * sizeof(int));
+ MTEST_VG_MEM_INIT(buf, cnt * sizeof(int));
/* Wait for all senders to be ready */
MTest_thread_barrier(nthreads);
@@ -55,6 +56,7 @@ void run_test_recv(void)
for (cnt = 1; cnt < MAX_CNT; cnt = 2 * cnt) {
buf = (int *) malloc(cnt * sizeof(int));
+ MTEST_VG_MEM_INIT(buf, cnt * sizeof(int));
t = MPI_Wtime();
for (j = 0; j < MAX_LOOP; j++)
MPI_Recv(buf, cnt, MPI_INT, 0, cnt, MPI_COMM_WORLD, &status);
diff --git a/test/mpi/threads/pt2pt/multisend3.c b/test/mpi/threads/pt2pt/multisend3.c
index fb307d7..f9a43be 100644
--- a/test/mpi/threads/pt2pt/multisend3.c
+++ b/test/mpi/threads/pt2pt/multisend3.c
@@ -38,6 +38,7 @@ MTEST_THREAD_RETURN_TYPE run_test_send(void *arg)
/* Create the buf just once to avoid finding races in malloc instead
* of the MPI library */
buf = (int *) malloc(MAX_CNT * sizeof(int));
+ MTEST_VG_MEM_INIT(buf, MAX_CNT * sizeof(int));
MTestPrintfMsg(1, "buf address %p (size %d)\n", buf, MAX_CNT * sizeof(int));
MPI_Comm_size(MPI_COMM_WORLD, &wsize);
if (wsize >= MAX_NTHREAD)
@@ -83,6 +84,7 @@ void run_test_recv(void)
for (cnt = 1; cnt < MAX_CNT; cnt = 2 * cnt) {
buf = (int *) malloc(cnt * sizeof(int));
+ MTEST_VG_MEM_INIT(buf, cnt * sizeof(int));
t = MPI_Wtime();
for (j = 0; j < MAX_LOOP; j++)
MPI_Recv(buf, cnt, MPI_INT, 0, cnt, MPI_COMM_WORLD, &status);
diff --git a/test/mpi/threads/pt2pt/multisend4.c b/test/mpi/threads/pt2pt/multisend4.c
index b65bf4f..8a359d2 100644
--- a/test/mpi/threads/pt2pt/multisend4.c
+++ b/test/mpi/threads/pt2pt/multisend4.c
@@ -46,6 +46,7 @@ MTEST_THREAD_RETURN_TYPE run_test_sendrecv(void *arg)
for (cnt = 1; cnt < MAX_CNT; cnt = 2 * cnt) {
buf = (int *) malloc(2 * cnt * sizeof(int));
+ MTEST_VG_MEM_INIT(buf, 2 * cnt * sizeof(int));
/* Wait for all senders to be ready */
MTest_thread_barrier(nthreads);
diff --git a/test/mpi/threads/pt2pt/threaded_sr.c b/test/mpi/threads/pt2pt/threaded_sr.c
index 277037d..cafe1e0 100644
--- a/test/mpi/threads/pt2pt/threaded_sr.c
+++ b/test/mpi/threads/pt2pt/threaded_sr.c
@@ -35,6 +35,7 @@ MTEST_THREAD_RETURN_TYPE send_thread(void *p)
int rank;
buffer = malloc(sizeof(char) * MSG_SIZE);
+ MTEST_VG_MEM_INIT(buffer, MSG_SIZE * sizeof(char));
if (buffer == NULL) {
printf("malloc failed to allocate %d bytes for the send buffer.\n", MSG_SIZE);
fflush(stdout);
@@ -58,6 +59,7 @@ MTEST_THREAD_RETURN_TYPE send_thread(void *p)
else {
sendok = 1;
}
+ free(buffer);
return (MTEST_THREAD_RETURN_TYPE) (long) err;
}
@@ -100,6 +102,7 @@ int main(int argc, char *argv[])
MTestSleep(3);
buffer = malloc(sizeof(char) * MSG_SIZE);
+ MTEST_VG_MEM_INIT(buffer, MSG_SIZE * sizeof(char));
if (buffer == NULL) {
printf("malloc failed to allocate %d bytes for the recv buffer.\n", MSG_SIZE);
fflush(stdout);
@@ -125,6 +128,8 @@ int main(int argc, char *argv[])
errs++;
}
+ MTest_Join_threads();
+ free(buffer);
MTest_Finalize(errs);
MPI_Finalize();
return 0;
diff --git a/test/mpi/threads/rma/Makefile.in b/test/mpi/threads/rma/Makefile.in
index c99ac22..a2cb91d 100644
--- a/test/mpi/threads/rma/Makefile.in
+++ b/test/mpi/threads/rma/Makefile.in
@@ -352,6 +352,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -371,7 +372,7 @@ LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o \
$(top_builddir)/threads/util/mtestthread.$(OBJEXT) @threadlib@
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -657,10 +658,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
$(top_builddir)/threads/util/mtestthread.$(OBJEXT): $(top_srcdir)/threads/util/mtestthread.c
(cd $(top_builddir)/threads/util && $(MAKE) mtestthread.$(OBJEXT))
diff --git a/test/mpi/threads/rma/multiget.c b/test/mpi/threads/rma/multiget.c
index 4a090ea..1245926 100644
--- a/test/mpi/threads/rma/multiget.c
+++ b/test/mpi/threads/rma/multiget.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
- * (C) 2014 by Argonne National Laboratory.
+ * (C) 2013 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
diff --git a/test/mpi/threads/spawn/Makefile.in b/test/mpi/threads/spawn/Makefile.in
index 03dcdfc..28ca507 100644
--- a/test/mpi/threads/spawn/Makefile.in
+++ b/test/mpi/threads/spawn/Makefile.in
@@ -352,6 +352,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -371,7 +372,7 @@ LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o \
$(top_builddir)/threads/util/mtestthread.$(OBJEXT) @threadlib@
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -657,10 +658,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
$(top_builddir)/threads/util/mtestthread.$(OBJEXT): $(top_srcdir)/threads/util/mtestthread.c
(cd $(top_builddir)/threads/util && $(MAKE) mtestthread.$(OBJEXT))
diff --git a/test/mpi/threads/util/Makefile.in b/test/mpi/threads/util/Makefile.in
index db06701..4acc80f 100644
--- a/test/mpi/threads/util/Makefile.in
+++ b/test/mpi/threads/util/Makefile.in
@@ -342,6 +342,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/threads/util/mtestthread.c b/test/mpi/threads/util/mtestthread.c
index e091e6a..3ad72f4 100644
--- a/test/mpi/threads/util/mtestthread.c
+++ b/test/mpi/threads/util/mtestthread.c
@@ -190,7 +190,7 @@ int MTest_thread_lock_free(MTEST_THREAD_LOCK_TYPE * lock)
}
#endif
-#if defined(HAVE_PTHREAD_BARRIER_INIT) && defined(USE_PTHREADS)
+#if defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_BARRIER_INIT)
static MTEST_THREAD_LOCK_TYPE barrierLock;
static pthread_barrier_t barrier;
static int bcount = -1;
diff --git a/test/mpi/topo/Makefile.am b/test/mpi/topo/Makefile.am
index f8f7bb5..e0956d1 100644
--- a/test/mpi/topo/Makefile.am
+++ b/test/mpi/topo/Makefile.am
@@ -22,6 +22,7 @@ noinst_PROGRAMS = \
dims2 \
dims3 \
dims4 \
+ dims5 \
graphmap1 \
topotest \
topodup \
diff --git a/test/mpi/topo/Makefile.in b/test/mpi/topo/Makefile.in
index 34c98c5..93e565e 100644
--- a/test/mpi/topo/Makefile.in
+++ b/test/mpi/topo/Makefile.in
@@ -97,9 +97,9 @@ host_triplet = @host@
noinst_PROGRAMS = cartmap1$(EXEEXT) cartzero$(EXEEXT) \
cartshift1$(EXEEXT) cartsuball$(EXEEXT) cartcreates$(EXEEXT) \
dims1$(EXEEXT) dims2$(EXEEXT) dims3$(EXEEXT) dims4$(EXEEXT) \
- graphmap1$(EXEEXT) topotest$(EXEEXT) topodup$(EXEEXT) \
- graphcr$(EXEEXT) graphcr2$(EXEEXT) distgraph1$(EXEEXT) \
- dgraph_unwgt$(EXEEXT) neighb_coll$(EXEEXT)
+ dims5$(EXEEXT) graphmap1$(EXEEXT) topotest$(EXEEXT) \
+ topodup$(EXEEXT) graphcr$(EXEEXT) graphcr2$(EXEEXT) \
+ distgraph1$(EXEEXT) dgraph_unwgt$(EXEEXT) neighb_coll$(EXEEXT)
subdir = topo
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/confdb/aclocal_cache.m4 \
@@ -179,6 +179,12 @@ dims4_LDADD = $(LDADD)
dims4_DEPENDENCIES = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
+dims5_SOURCES = dims5.c
+dims5_OBJECTS = dims5.$(OBJEXT)
+dims5_LDADD = $(LDADD)
+dims5_DEPENDENCIES = $(top_builddir)/util/mtest.o \
+ $(top_builddir)/util/mtest_datatype.o \
+ $(top_builddir)/util/mtest_datatype_gen.o
distgraph1_SOURCES = distgraph1.c
distgraph1_OBJECTS = distgraph1.$(OBJEXT)
distgraph1_LDADD = $(LDADD)
@@ -251,12 +257,12 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = cartcreates.c cartmap1.c cartshift1.c cartsuball.c \
cartzero.c dgraph_unwgt.c dims1.c dims2.c dims3.c dims4.c \
- distgraph1.c graphcr.c graphcr2.c graphmap1.c neighb_coll.c \
- topodup.c topotest.c
+ dims5.c distgraph1.c graphcr.c graphcr2.c graphmap1.c \
+ neighb_coll.c topodup.c topotest.c
DIST_SOURCES = cartcreates.c cartmap1.c cartshift1.c cartsuball.c \
cartzero.c dgraph_unwgt.c dims1.c dims2.c dims3.c dims4.c \
- distgraph1.c graphcr.c graphcr2.c graphmap1.c neighb_coll.c \
- topodup.c topotest.c
+ dims5.c distgraph1.c graphcr.c graphcr2.c graphmap1.c \
+ neighb_coll.c topodup.c topotest.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -457,6 +463,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
@@ -475,7 +482,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = $(top_builddir)/util/mtest.o \
$(top_builddir)/util/mtest_datatype.o \
$(top_builddir)/util/mtest_datatype_gen.o
-CLEANFILES = summary.xml summary.tap summary.junit.xml
+CLEANFILES = $(SUMMARY_BASENAME).xml $(SUMMARY_BASENAME).tap $(SUMMARY_BASENAME).junit.xml
EXTRA_DIST = testlist
all: all-am
@@ -555,6 +562,10 @@ dims4$(EXEEXT): $(dims4_OBJECTS) $(dims4_DEPENDENCIES) $(EXTRA_dims4_DEPENDENCIE
@rm -f dims4$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(dims4_OBJECTS) $(dims4_LDADD) $(LIBS)
+dims5$(EXEEXT): $(dims5_OBJECTS) $(dims5_DEPENDENCIES) $(EXTRA_dims5_DEPENDENCIES)
+ @rm -f dims5$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dims5_OBJECTS) $(dims5_LDADD) $(LIBS)
+
distgraph1$(EXEEXT): $(distgraph1_OBJECTS) $(distgraph1_DEPENDENCIES) $(EXTRA_distgraph1_DEPENDENCIES)
@rm -f distgraph1$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(distgraph1_OBJECTS) $(distgraph1_LDADD) $(LIBS)
@@ -599,6 +610,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dims2.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dims3.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dims4.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dims5.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/distgraph1.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graphcr.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graphcr2.Po at am__quote@
@@ -836,10 +848,12 @@ $(top_builddir)/util/mtest_datatype.$(OBJEXT): $(top_srcdir)/util/mtest_datatype
$(top_builddir)/util/mtest_datatype_gen.$(OBJEXT): $(top_srcdir)/util/mtest_datatype_gen.c
(cd $(top_builddir)/util && $(MAKE) mtest_datatype_gen.$(OBJEXT))
+SUMMARY_BASENAME ?= summary
+
testing:
$(top_builddir)/runtests -srcdir=$(srcdir) -tests=testlist \
- -mpiexec=${MPIEXEC} -xmlfile=summary.xml \
- -tapfile=summary.tap -junitfile=summary.junit.xml
+ -mpiexec=${MPIEXEC} -xmlfile=$(SUMMARY_BASENAME).xml \
+ -tapfile=$(SUMMARY_BASENAME).tap -junitfile=$(SUMMARY_BASENAME).junit.xml
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/mpi/topo/baddims.h b/test/mpi/topo/baddims.h
new file mode 100644
index 0000000..cfe257a
--- /dev/null
+++ b/test/mpi/topo/baddims.h
@@ -0,0 +1,75395 @@
+{ 72, 2, {9,8}},
+{ 180, 2, {15,12}},
+{ 240, 2, {16,15}},
+{ 288, 2, {18,16}},
+{ 336, 2, {21,16}},
+{ 420, 2, {21,20}},
+{ 450, 2, {25,18}},
+{ 504, 2, {24,21}},
+{ 540, 2, {27,20}},
+{ 600, 2, {25,24}},
+{ 648, 2, {27,24}},
+{ 675, 2, {27,25}},
+{ 720, 2, {30,24}},
+{ 756, 2, {28,27}},
+{ 792, 2, {33,24}},
+{ 800, 2, {32,25}},
+{ 864, 2, {32,27}},
+{ 924, 2, {33,28}},
+{ 945, 2, {35,27}},
+{ 960, 2, {32,30}},
+{ 1050, 2, {35,30}},
+{ 1056, 2, {33,32}},
+{ 1092, 2, {39,28}},
+{ 1120, 2, {35,32}},
+{ 1152, 2, {36,32}},
+{ 1188, 2, {36,33}},
+{ 1248, 2, {39,32}},
+{ 1260, 2, {36,35}},
+{ 1320, 2, {40,33}},
+{ 1323, 2, {49,27}},
+{ 1344, 2, {42,32}},
+{ 1400, 2, {40,35}},
+{ 1404, 2, {39,36}},
+{ 1560, 2, {40,39}},
+{ 1568, 2, {49,32}},
+{ 1575, 2, {45,35}},
+{ 1620, 2, {45,36}},
+{ 1680, 2, {42,40}},
+{ 1716, 2, {44,39}},
+{ 1800, 2, {45,40}},
+{ 1836, 2, {51,36}},
+{ 1872, 2, {48,39}},
+{ 1960, 2, {49,40}},
+{ 1980, 2, {45,44}},
+{ 2016, 2, {48,42}},
+{ 2040, 2, {51,40}},
+{ 2160, 2, {48,45}},
+{ 2205, 2, {49,45}},
+{ 2244, 2, {51,44}},
+{ 2280, 2, {57,40}},
+{ 2310, 2, {55,42}},
+{ 2340, 2, {52,45}},
+{ 2352, 2, {49,48}},
+{ 2400, 2, {50,48}},
+{ 2448, 2, {51,48}},
+{ 2450, 2, {50,49}},
+{ 2475, 2, {55,45}},
+{ 2508, 2, {57,44}},
+{ 2520, 2, {56,45}},
+{ 2592, 2, {54,48}},
+{ 2640, 2, {55,48}},
+{ 2646, 2, {54,49}},
+{ 2652, 2, {52,51}},
+{ 2700, 2, {54,50}},
+{ 2730, 2, {65,42}},
+{ 2736, 2, {57,48}},
+{ 2772, 2, {63,44}},
+{ 2856, 2, {56,51}},
+{ 2880, 2, {60,48}},
+{ 2925, 2, {65,45}},
+{ 2940, 2, {60,49}},
+{ 2964, 2, {57,52}},
+{ 2970, 2, {55,54}},
+{ 3024, 2, {56,54}},
+{ 3060, 2, {60,51}},
+{ 3080, 2, {56,55}},
+{ 3168, 2, {66,48}},
+{ 3192, 2, {57,56}},
+{ 3200, 2, {64,50}},
+{ 3264, 2, {64,51}},
+{ 3276, 2, {63,52}},
+{ 3300, 2, {60,55}},
+{ 3312, 2, {69,48}},
+{ 3420, 2, {60,57}},
+{ 3456, 2, {64,54}},
+{ 3465, 2, {63,55}},
+{ 3510, 2, {65,54}},
+{ 3520, 2, {64,55}},
+{ 3528, 2, {63,56}},
+{ 3588, 2, {69,52}},
+{ 3640, 2, {65,56}},
+{ 3648, 2, {64,57}},
+{ 3675, 2, {75,49}},
+{ 3696, 2, {66,56}},
+{ 3780, 2, {63,60}},
+{ 3840, 2, {64,60}},
+{ 3864, 2, {69,56}},
+{ 3876, 2, {68,57}},
+{ 3900, 2, {65,60}},
+{ 4032, 2, {64,63}},
+{ 4050, 2, {75,54}},
+{ 4095, 2, {65,63}},
+{ 4104, 2, {72,57}},
+{ 4140, 2, {69,60}},
+{ 4160, 2, {65,64}},
+{ 4200, 2, {70,60}},
+{ 4224, 2, {66,64}},
+{ 4284, 2, {68,63}},
+{ 4290, 2, {66,65}},
+{ 4312, 2, {77,56}},
+{ 4368, 2, {78,56}},
+{ 4400, 2, {80,55}},
+{ 4416, 2, {69,64}},
+{ 4455, 2, {81,55}},
+{ 4480, 2, {70,64}},
+{ 4500, 2, {75,60}},
+{ 4536, 2, {72,63}},
+{ 4590, 2, {85,54}},
+{ 4608, 2, {72,64}},
+{ 4680, 2, {72,65}},
+{ 4692, 2, {69,68}},
+{ 4752, 2, {72,66}},
+{ 4788, 2, {76,63}},
+{ 4800, 2, {75,64}},
+{ 4851, 2, {77,63}},
+{ 4860, 2, {81,60}},
+{ 4928, 2, {77,64}},
+{ 4968, 2, {72,69}},
+{ 4992, 2, {78,64}},
+{ 5040, 2, {72,70}},
+{ 5096, 2, {91,56}},
+{ 5100, 2, {75,68}},
+{ 5200, 2, {80,65}},
+{ 5220, 2, {87,60}},
+{ 5244, 2, {76,69}},
+{ 5265, 2, {81,65}},
+{ 5280, 2, {80,66}},
+{ 5355, 2, {85,63}},
+{ 5376, 2, {84,64}},
+{ 5390, 2, {77,70}},
+{ 5400, 2, {75,72}},
+{ 5508, 2, {81,68}},
+{ 5520, 2, {80,69}},
+{ 5544, 2, {77,72}},
+{ 5568, 2, {87,64}},
+{ 5600, 2, {80,70}},
+{ 5610, 2, {85,66}},
+{ 5616, 2, {78,72}},
+{ 5670, 2, {81,70}},
+{ 5700, 2, {76,75}},
+{ 5720, 2, {88,65}},
+{ 5733, 2, {91,63}},
+{ 5775, 2, {77,75}},
+{ 5796, 2, {84,69}},
+{ 5824, 2, {91,64}},
+{ 5832, 2, {81,72}},
+{ 5916, 2, {87,68}},
+{ 5952, 2, {93,64}},
+{ 5985, 2, {95,63}},
+{ 6000, 2, {80,75}},
+{ 6072, 2, {88,69}},
+{ 6075, 2, {81,75}},
+{ 6120, 2, {85,72}},
+{ 6125, 2, {125,49}},
+{ 6156, 2, {81,76}},
+{ 6160, 2, {80,77}},
+{ 6237, 2, {81,77}},
+{ 6240, 2, {80,78}},
+{ 6264, 2, {87,72}},
+{ 6270, 2, {95,66}},
+{ 6272, 2, {98,64}},
+{ 6300, 2, {84,75}},
+{ 6324, 2, {93,68}},
+{ 6370, 2, {91,70}},
+{ 6435, 2, {99,65}},
+{ 6468, 2, {84,77}},
+{ 6480, 2, {81,80}},
+{ 6600, 2, {88,75}},
+{ 6612, 2, {87,76}},
+{ 6630, 2, {85,78}},
+{ 6696, 2, {93,72}},
+{ 6720, 2, {84,80}},
+{ 6732, 2, {99,68}},
+{ 6800, 2, {85,80}},
+{ 6804, 2, {84,81}},
+{ 6825, 2, {91,75}},
+{ 6864, 2, {88,78}},
+{ 6885, 2, {85,81}},
+{ 6900, 2, {92,75}},
+{ 6930, 2, {90,77}},
+{ 6960, 2, {87,80}},
+{ 7068, 2, {93,76}},
+{ 7128, 2, {88,81}},
+{ 7140, 2, {85,84}},
+{ 7200, 2, {90,80}},
+{ 7280, 2, {91,80}},
+{ 7308, 2, {87,84}},
+{ 7344, 2, {102,72}},
+{ 7350, 2, {98,75}},
+{ 7371, 2, {91,81}},
+{ 7410, 2, {95,78}},
+{ 7440, 2, {93,80}},
+{ 7452, 2, {92,81}},
+{ 7480, 2, {88,85}},
+{ 7488, 2, {96,78}},
+{ 7497, 2, {119,63}},
+{ 7524, 2, {99,76}},
+{ 7600, 2, {95,80}},
+{ 7644, 2, {91,84}},
+{ 7650, 2, {90,85}},
+{ 7656, 2, {88,87}},
+{ 7695, 2, {95,81}},
+{ 7700, 2, {100,77}},
+{ 7776, 2, {96,81}},
+{ 7812, 2, {93,84}},
+{ 7840, 2, {98,80}},
+{ 7920, 2, {90,88}},
+{ 7938, 2, {98,81}},
+{ 7980, 2, {95,84}},
+{ 8004, 2, {92,87}},
+{ 8008, 2, {91,88}},
+{ 8064, 2, {96,84}},
+{ 8085, 2, {105,77}},
+{ 8160, 2, {96,85}},
+{ 8184, 2, {93,88}},
+{ 8190, 2, {91,90}},
+{ 8316, 2, {99,84}},
+{ 8352, 2, {96,87}},
+{ 8360, 2, {95,88}},
+{ 8379, 2, {133,63}},
+{ 8415, 2, {99,85}},
+{ 8424, 2, {104,81}},
+{ 8436, 2, {111,76}},
+{ 8505, 2, {105,81}},
+{ 8550, 2, {95,90}},
+{ 8556, 2, {93,92}},
+{ 8640, 2, {96,90}},
+{ 8700, 2, {100,87}},
+{ 8712, 2, {99,88}},
+{ 8736, 2, {96,91}},
+{ 8820, 2, {98,90}},
+{ 8840, 2, {104,85}},
+{ 8880, 2, {111,80}},
+{ 8928, 2, {96,93}},
+{ 8970, 2, {115,78}},
+{ 8976, 2, {102,88}},
+{ 9009, 2, {99,91}},
+{ 9048, 2, {104,87}},
+{ 9075, 2, {121,75}},
+{ 9100, 2, {100,91}},
+{ 9108, 2, {99,92}},
+{ 9120, 2, {96,95}},
+{ 9240, 2, {105,88}},
+{ 9300, 2, {100,93}},
+{ 9315, 2, {115,81}},
+{ 9324, 2, {111,84}},
+{ 9360, 2, {104,90}},
+{ 9396, 2, {108,87}},
+{ 9405, 2, {99,95}},
+{ 9408, 2, {98,96}},
+{ 9450, 2, {105,90}},
+{ 9504, 2, {99,96}},
+{ 9520, 2, {112,85}},
+{ 9555, 2, {105,91}},
+{ 9600, 2, {100,96}},
+{ 9625, 2, {125,77}},
+{ 9639, 2, {119,81}},
+{ 9660, 2, {105,92}},
+{ 9672, 2, {104,93}},
+{ 9690, 2, {102,95}},
+{ 9744, 2, {112,87}},
+{ 9750, 2, {125,78}},
+{ 9768, 2, {111,88}},
+{ 9792, 2, {102,96}},
+{ 9800, 2, {100,98}},
+{ 9828, 2, {108,91}},
+{ 9880, 2, {104,95}},
+{ 9900, 2, {100,99}},
+{ 9945, 2, {117,85}},
+{ 10010, 2, {110,91}},
+{ 10032, 2, {114,88}},
+{ 10044, 2, {108,93}},
+{ 10080, 2, {105,96}},
+{ 10125, 2, {125,81}},
+{ 10164, 2, {121,84}},
+{ 10212, 2, {111,92}},
+{ 10260, 2, {108,95}},
+{ 10296, 2, {104,99}},
+{ 10332, 2, {123,84}},
+{ 10350, 2, {115,90}},
+{ 10368, 2, {108,96}},
+{ 10416, 2, {112,93}},
+{ 10472, 2, {119,88}},
+{ 10500, 2, {105,100}},
+{ 10560, 2, {110,96}},
+{ 10584, 2, {108,98}},
+{ 10608, 2, {104,102}},
+{ 10640, 2, {112,95}},
+{ 10656, 2, {111,96}},
+{ 10692, 2, {108,99}},
+{ 10725, 2, {143,75}},
+{ 10764, 2, {117,92}},
+{ 10773, 2, {133,81}},
+{ 10788, 2, {116,93}},
+{ 10800, 2, {108,100}},
+{ 10824, 2, {123,88}},
+{ 10880, 2, {128,85}},
+{ 10920, 2, {105,104}},
+{ 10944, 2, {114,96}},
+{ 11040, 2, {115,96}},
+{ 11088, 2, {112,99}},
+{ 11100, 2, {111,100}},
+{ 11115, 2, {117,95}},
+{ 11160, 2, {120,93}},
+{ 11250, 2, {125,90}},
+{ 11316, 2, {123,92}},
+{ 11340, 2, {108,105}},
+{ 11352, 2, {129,88}},
+{ 11375, 2, {125,91}},
+{ 11385, 2, {115,99}},
+{ 11424, 2, {112,102}},
+{ 11475, 2, {135,85}},
+{ 11484, 2, {116,99}},
+{ 11520, 2, {120,96}},
+{ 11544, 2, {111,104}},
+{ 11616, 2, {121,96}},
+{ 11700, 2, {117,100}},
+{ 11704, 2, {133,88}},
+{ 11730, 2, {115,102}},
+{ 11760, 2, {112,105}},
+{ 11781, 2, {119,99}},
+{ 11808, 2, {123,96}},
+{ 11856, 2, {114,104}},
+{ 11858, 2, {121,98}},
+{ 11868, 2, {129,92}},
+{ 11880, 2, {110,108}},
+{ 11900, 2, {119,100}},
+{ 11907, 2, {147,81}},
+{ 11960, 2, {115,104}},
+{ 11988, 2, {111,108}},
+{ 12012, 2, {132,91}},
+{ 12096, 2, {112,108}},
+{ 12160, 2, {128,95}},
+{ 12168, 2, {117,104}},
+{ 12180, 2, {116,105}},
+{ 12240, 2, {120,102}},
+{ 12250, 2, {125,98}},
+{ 12276, 2, {124,99}},
+{ 12300, 2, {123,100}},
+{ 12320, 2, {112,110}},
+{ 12375, 2, {125,99}},
+{ 12376, 2, {119,104}},
+{ 12384, 2, {129,96}},
+{ 12420, 2, {115,108}},
+{ 12432, 2, {112,111}},
+{ 12495, 2, {119,105}},
+{ 12600, 2, {120,105}},
+{ 12636, 2, {117,108}},
+{ 12672, 2, {128,99}},
+{ 12675, 2, {169,75}},
+{ 12705, 2, {121,105}},
+{ 12750, 2, {125,102}},
+{ 12768, 2, {114,112}},
+{ 12792, 2, {123,104}},
+{ 12800, 2, {128,100}},
+{ 12825, 2, {135,95}},
+{ 12852, 2, {119,108}},
+{ 12876, 2, {116,111}},
+{ 12880, 2, {115,112}},
+{ 12900, 2, {129,100}},
+{ 12920, 2, {136,95}},
+{ 13000, 2, {125,104}},
+{ 13020, 2, {124,105}},
+{ 13041, 2, {161,81}},
+{ 13050, 2, {145,90}},
+{ 13056, 2, {128,102}},
+{ 13068, 2, {121,108}},
+{ 13090, 2, {119,110}},
+{ 13104, 2, {117,112}},
+{ 13110, 2, {115,114}},
+{ 13167, 2, {133,99}},
+{ 13200, 2, {120,110}},
+{ 13248, 2, {138,96}},
+{ 13284, 2, {123,108}},
+{ 13300, 2, {133,100}},
+{ 13320, 2, {120,111}},
+{ 13328, 2, {119,112}},
+{ 13416, 2, {129,104}},
+{ 13455, 2, {117,115}},
+{ 13475, 2, {175,77}},
+{ 13500, 2, {125,108}},
+{ 13536, 2, {141,96}},
+{ 13552, 2, {121,112}},
+{ 13572, 2, {117,116}},
+{ 13680, 2, {120,114}},
+{ 13764, 2, {124,111}},
+{ 13776, 2, {123,112}},
+{ 13800, 2, {120,115}},
+{ 13824, 2, {128,108}},
+{ 13832, 2, {133,104}},
+{ 13860, 2, {126,110}},
+{ 13923, 2, {119,117}},
+{ 13932, 2, {129,108}},
+{ 13965, 2, {133,105}},
+{ 14000, 2, {125,112}},
+{ 14014, 2, {143,98}},
+{ 14040, 2, {120,117}},
+{ 14080, 2, {128,110}},
+{ 14100, 2, {141,100}},
+{ 14112, 2, {126,112}},
+{ 14175, 2, {135,105}},
+{ 14208, 2, {128,111}},
+{ 14250, 2, {125,114}},
+{ 14268, 2, {123,116}},
+{ 14280, 2, {120,119}},
+{ 14352, 2, {138,104}},
+{ 14355, 2, {145,99}},
+{ 14448, 2, {129,112}},
+{ 14490, 2, {126,115}},
+{ 14508, 2, {124,117}},
+{ 14520, 2, {121,120}},
+{ 14535, 2, {153,95}},
+{ 14560, 2, {130,112}},
+{ 14580, 2, {135,108}},
+{ 14592, 2, {128,114}},
+{ 14625, 2, {125,117}},
+{ 14630, 2, {133,110}},
+{ 14652, 2, {132,111}},
+{ 14664, 2, {141,104}},
+{ 14720, 2, {128,115}},
+{ 14760, 2, {123,120}},
+{ 14784, 2, {132,112}},
+{ 14790, 2, {145,102}},
+{ 14850, 2, {135,110}},
+{ 14875, 2, {125,119}},
+{ 14896, 2, {133,112}},
+{ 14964, 2, {129,116}},
+{ 14976, 2, {128,117}},
+{ 14994, 2, {126,119}},
+{ 15000, 2, {125,120}},
+{ 15015, 2, {143,105}},
+{ 15096, 2, {136,111}},
+{ 15120, 2, {126,120}},
+{ 15125, 2, {125,121}},
+{ 15180, 2, {132,115}},
+{ 15228, 2, {141,108}},
+{ 15232, 2, {128,119}},
+{ 15246, 2, {126,121}},
+{ 15252, 2, {124,123}},
+{ 15288, 2, {147,104}},
+{ 15345, 2, {155,99}},
+{ 15360, 2, {128,120}},
+{ 15444, 2, {132,117}},
+{ 15456, 2, {138,112}},
+{ 15470, 2, {130,119}},
+{ 15480, 2, {129,120}},
+{ 15488, 2, {128,121}},
+{ 15504, 2, {136,114}},
+{ 15525, 2, {135,115}},
+{ 15540, 2, {140,111}},
+{ 15561, 2, {133,117}},
+{ 15600, 2, {130,120}},
+{ 15640, 2, {136,115}},
+{ 15660, 2, {135,116}},
+{ 15708, 2, {132,119}},
+{ 15744, 2, {128,123}},
+{ 15750, 2, {126,125}},
+{ 15792, 2, {141,112}},
+{ 15810, 2, {155,102}},
+{ 15912, 2, {136,117}},
+{ 15925, 2, {175,91}},
+{ 15939, 2, {161,99}},
+{ 15960, 2, {133,120}},
+{ 15984, 2, {144,111}},
+{ 15996, 2, {129,124}},
+{ 16000, 2, {128,125}},
+{ 16016, 2, {143,112}},
+{ 16065, 2, {135,119}},
+{ 16128, 2, {128,126}},
+{ 16200, 2, {135,120}},
+{ 16236, 2, {132,123}},
+{ 16335, 2, {135,121}},
+{ 16356, 2, {141,116}},
+{ 16380, 2, {130,126}},
+{ 16416, 2, {144,114}},
+{ 16464, 2, {147,112}},
+{ 16500, 2, {132,125}},
+{ 16512, 2, {129,128}},
+{ 16524, 2, {153,108}},
+{ 16530, 2, {145,114}},
+{ 16560, 2, {138,120}},
+{ 16562, 2, {169,98}},
+{ 16625, 2, {133,125}},
+{ 16640, 2, {130,128}},
+{ 16660, 2, {140,119}},
+{ 16728, 2, {136,123}},
+{ 16740, 2, {135,124}},
+{ 16744, 2, {161,104}},
+{ 16758, 2, {133,126}},
+{ 16800, 2, {140,120}},
+{ 16848, 2, {144,117}},
+{ 16875, 2, {135,125}},
+{ 16896, 2, {132,128}},
+{ 16920, 2, {141,120}},
+{ 16940, 2, {140,121}},
+{ 16965, 2, {145,117}},
+{ 17000, 2, {136,125}},
+{ 17024, 2, {133,128}},
+{ 17028, 2, {132,129}},
+{ 17052, 2, {147,116}},
+{ 17136, 2, {136,126}},
+{ 17160, 2, {132,130}},
+{ 17172, 2, {159,108}},
+{ 17220, 2, {140,123}},
+{ 17248, 2, {154,112}},
+{ 17250, 2, {138,125}},
+{ 17280, 2, {135,128}},
+{ 17290, 2, {133,130}},
+{ 17316, 2, {148,117}},
+{ 17400, 2, {145,120}},
+{ 17472, 2, {156,112}},
+{ 17480, 2, {152,115}},
+{ 17484, 2, {141,124}},
+{ 17544, 2, {136,129}},
+{ 17550, 2, {135,130}},
+{ 17556, 2, {133,132}},
+{ 17595, 2, {153,115}},
+{ 17600, 2, {160,110}},
+{ 17664, 2, {138,128}},
+{ 17670, 2, {155,114}},
+{ 17712, 2, {144,123}},
+{ 17745, 2, {169,105}},
+{ 17748, 2, {153,116}},
+{ 17784, 2, {152,117}},
+{ 17787, 2, {147,121}},
+{ 17808, 2, {159,112}},
+{ 17820, 2, {135,132}},
+{ 17850, 2, {150,119}},
+{ 17875, 2, {143,125}},
+{ 17920, 2, {140,128}},
+{ 17955, 2, {135,133}},
+{ 18000, 2, {144,125}},
+{ 18018, 2, {143,126}},
+{ 18032, 2, {161,112}},
+{ 18048, 2, {141,128}},
+{ 18060, 2, {140,129}},
+{ 18088, 2, {136,133}},
+{ 18135, 2, {155,117}},
+{ 18144, 2, {144,126}},
+{ 18150, 2, {150,121}},
+{ 18204, 2, {148,123}},
+{ 18228, 2, {147,124}},
+{ 18270, 2, {145,126}},
+{ 18304, 2, {143,128}},
+{ 18360, 2, {136,135}},
+{ 18375, 2, {147,125}},
+{ 18400, 2, {160,115}},
+{ 18432, 2, {144,128}},
+{ 18444, 2, {159,116}},
+{ 18560, 2, {145,128}},
+{ 18564, 2, {156,119}},
+{ 18576, 2, {144,129}},
+{ 18612, 2, {141,132}},
+{ 18620, 2, {140,133}},
+{ 18696, 2, {152,123}},
+{ 18720, 2, {144,130}},
+{ 18768, 2, {138,136}},
+{ 18816, 2, {147,128}},
+{ 18837, 2, {161,117}},
+{ 18876, 2, {143,132}},
+{ 18900, 2, {140,135}},
+{ 18928, 2, {169,112}},
+{ 18972, 2, {153,124}},
+{ 19000, 2, {152,125}},
+{ 19008, 2, {144,132}},
+{ 19080, 2, {159,120}},
+{ 19092, 2, {148,129}},
+{ 19125, 2, {153,125}},
+{ 19140, 2, {145,132}},
+{ 19152, 2, {144,133}},
+{ 19176, 2, {141,136}},
+{ 19188, 2, {156,123}},
+{ 19200, 2, {150,128}},
+{ 19250, 2, {154,125}},
+{ 19305, 2, {143,135}},
+{ 19360, 2, {160,121}},
+{ 19404, 2, {147,132}},
+{ 19440, 2, {144,135}},
+{ 19530, 2, {155,126}},
+{ 19575, 2, {145,135}},
+{ 19602, 2, {162,121}},
+{ 19608, 2, {152,129}},
+{ 19635, 2, {165,119}},
+{ 19665, 2, {171,115}},
+{ 19680, 2, {160,123}},
+{ 19712, 2, {154,128}},
+{ 19716, 2, {159,124}},
+{ 19720, 2, {145,136}},
+{ 19740, 2, {141,140}},
+{ 19836, 2, {171,116}},
+{ 19840, 2, {155,128}},
+{ 19845, 2, {147,135}},
+{ 19872, 2, {144,138}},
+{ 19950, 2, {150,133}},
+{ 19968, 2, {156,128}},
+{ 19980, 2, {148,135}},
+{ 19992, 2, {147,136}},
+{ 20000, 2, {160,125}},
+{ 20010, 2, {145,138}},
+{ 20020, 2, {143,140}},
+{ 20097, 2, {203,99}},
+{ 20124, 2, {156,129}},
+{ 20125, 2, {161,125}},
+{ 20160, 2, {144,140}},
+{ 20196, 2, {153,132}},
+{ 20240, 2, {176,115}},
+{ 20304, 2, {144,141}},
+{ 20349, 2, {153,133}},
+{ 20352, 2, {159,128}},
+{ 20384, 2, {182,112}},
+{ 20400, 2, {150,136}},
+{ 20460, 2, {155,132}},
+{ 20475, 2, {175,117}},
+{ 20520, 2, {152,135}},
+{ 20580, 2, {147,140}},
+{ 20592, 2, {144,143}},
+{ 20608, 2, {161,128}},
+{ 20640, 2, {160,129}},
+{ 20748, 2, {156,133}},
+{ 20790, 2, {154,135}},
+{ 20800, 2, {160,130}},
+{ 20808, 2, {153,136}},
+{ 20825, 2, {175,119}},
+{ 20868, 2, {148,141}},
+{ 20880, 2, {145,144}},
+{ 20925, 2, {155,135}},
+{ 20930, 2, {161,130}},
+{ 20976, 2, {152,138}},
+{ 20988, 2, {159,132}},
+{ 21021, 2, {147,143}},
+{ 21060, 2, {156,135}},
+{ 21080, 2, {155,136}},
+{ 21090, 2, {185,114}},
+{ 21120, 2, {160,132}},
+{ 21125, 2, {169,125}},
+{ 21156, 2, {164,129}},
+{ 21168, 2, {147,144}},
+{ 21175, 2, {175,121}},
+{ 21204, 2, {171,124}},
+{ 21240, 2, {177,120}},
+{ 21294, 2, {169,126}},
+{ 21375, 2, {171,125}},
+{ 21390, 2, {155,138}},
+{ 21420, 2, {153,140}},
+{ 21432, 2, {152,141}},
+{ 21450, 2, {150,143}},
+{ 21483, 2, {217,99}},
+{ 21504, 2, {168,128}},
+{ 21546, 2, {162,133}},
+{ 21560, 2, {154,140}},
+{ 21600, 2, {150,144}},
+{ 21624, 2, {159,136}},
+{ 21632, 2, {169,128}},
+{ 21645, 2, {185,117}},
+{ 21672, 2, {168,129}},
+{ 21735, 2, {161,135}},
+{ 21750, 2, {150,145}},
+{ 21756, 2, {148,147}},
+{ 21780, 2, {165,132}},
+{ 21896, 2, {161,136}},
+{ 21945, 2, {165,133}},
+{ 21948, 2, {177,124}},
+{ 21996, 2, {156,141}},
+{ 22000, 2, {176,125}},
+{ 22022, 2, {154,143}},
+{ 22032, 2, {153,144}},
+{ 22040, 2, {152,145}},
+{ 22050, 2, {150,147}},
+{ 22080, 2, {160,138}},
+{ 22140, 2, {164,135}},
+{ 22176, 2, {154,144}},
+{ 22185, 2, {153,145}},
+{ 22260, 2, {159,140}},
+{ 22272, 2, {174,128}},
+{ 22275, 2, {165,135}},
+{ 22320, 2, {155,144}},
+{ 22344, 2, {152,147}},
+{ 22400, 2, {160,140}},
+{ 22440, 2, {165,136}},
+{ 22464, 2, {156,144}},
+{ 22540, 2, {161,140}},
+{ 22560, 2, {160,141}},
+{ 22572, 2, {171,132}},
+{ 22610, 2, {170,133}},
+{ 22620, 2, {156,145}},
+{ 22644, 2, {153,148}},
+{ 22656, 2, {177,128}},
+{ 22680, 2, {162,140}},
+{ 22692, 2, {183,124}},
+{ 22800, 2, {152,150}},
+{ 22815, 2, {169,135}},
+{ 22869, 2, {189,121}},
+{ 22880, 2, {160,143}},
+{ 22896, 2, {159,144}},
+{ 22932, 2, {156,147}},
+{ 23000, 2, {184,125}},
+{ 23100, 2, {154,150}},
+{ 23124, 2, {164,141}},
+{ 23166, 2, {162,143}},
+{ 23184, 2, {161,144}},
+{ 23200, 2, {160,145}},
+{ 23205, 2, {195,119}},
+{ 23220, 2, {172,135}},
+{ 23250, 2, {155,150}},
+{ 23256, 2, {153,152}},
+{ 23275, 2, {175,133}},
+{ 23296, 2, {182,128}},
+{ 23310, 2, {185,126}},
+{ 23328, 2, {162,144}},
+{ 23364, 2, {177,132}},
+{ 23375, 2, {187,125}},
+{ 23424, 2, {183,128}},
+{ 23490, 2, {162,145}},
+{ 23520, 2, {160,147}},
+{ 23532, 2, {159,148}},
+{ 23560, 2, {155,152}},
+{ 23595, 2, {165,143}},
+{ 23625, 2, {175,135}},
+{ 23660, 2, {169,140}},
+{ 23664, 2, {174,136}},
+{ 23688, 2, {168,141}},
+{ 23715, 2, {155,153}},
+{ 23751, 2, {203,117}},
+{ 23760, 2, {165,144}},
+{ 23808, 2, {186,128}},
+{ 23814, 2, {162,147}},
+{ 23868, 2, {156,153}},
+{ 23940, 2, {171,140}},
+{ 24000, 2, {160,150}},
+{ 24072, 2, {177,136}},
+{ 24108, 2, {164,147}},
+{ 24150, 2, {161,150}},
+{ 24156, 2, {183,132}},
+{ 24168, 2, {159,152}},
+{ 24180, 2, {156,155}},
+{ 24200, 2, {200,121}},
+{ 24252, 2, {172,141}},
+{ 24288, 2, {176,138}},
+{ 24300, 2, {162,150}},
+{ 24360, 2, {168,145}},
+{ 24420, 2, {165,148}},
+{ 24472, 2, {161,152}},
+{ 24480, 2, {160,153}},
+{ 24570, 2, {182,135}},
+{ 24624, 2, {162,152}},
+{ 24633, 2, {161,153}},
+{ 24640, 2, {160,154}},
+{ 24684, 2, {187,132}},
+{ 24696, 2, {168,147}},
+{ 24780, 2, {177,140}},
+{ 24795, 2, {171,145}},
+{ 24800, 2, {160,155}},
+{ 24804, 2, {159,156}},
+{ 24816, 2, {176,141}},
+{ 24843, 2, {169,147}},
+{ 24888, 2, {183,136}},
+{ 24948, 2, {162,154}},
+{ 24960, 2, {160,156}},
+{ 24975, 2, {185,135}},
+{ 25025, 2, {175,143}},
+{ 25056, 2, {174,144}},
+{ 25080, 2, {165,152}},
+{ 25088, 2, {196,128}},
+{ 25092, 2, {164,153}},
+{ 25110, 2, {162,155}},
+{ 25116, 2, {161,156}},
+{ 25168, 2, {176,143}},
+{ 25200, 2, {168,150}},
+{ 25284, 2, {172,147}},
+{ 25296, 2, {186,136}},
+{ 25308, 2, {171,148}},
+{ 25350, 2, {169,150}},
+{ 25380, 2, {180,141}},
+{ 25389, 2, {217,117}},
+{ 25440, 2, {160,159}},
+{ 25480, 2, {182,140}},
+{ 25488, 2, {177,144}},
+{ 25520, 2, {176,145}},
+{ 25530, 2, {185,138}},
+{ 25620, 2, {183,140}},
+{ 25704, 2, {168,153}},
+{ 25740, 2, {165,156}},
+{ 25760, 2, {161,160}},
+{ 25830, 2, {205,126}},
+{ 25872, 2, {168,154}},
+{ 25875, 2, {207,125}},
+{ 25920, 2, {162,160}},
+{ 25935, 2, {195,133}},
+{ 25944, 2, {184,141}},
+{ 25984, 2, {203,128}},
+{ 25992, 2, {171,152}},
+{ 26026, 2, {169,154}},
+{ 26040, 2, {168,155}},
+{ 26076, 2, {164,159}},
+{ 26082, 2, {162,161}},
+{ 26125, 2, {209,125}},
+{ 26196, 2, {177,148}},
+{ 26250, 2, {175,150}},
+{ 26316, 2, {172,153}},
+{ 26325, 2, {195,135}},
+{ 26352, 2, {183,144}},
+{ 26400, 2, {165,160}},
+{ 26448, 2, {174,152}},
+{ 26460, 2, {180,147}},
+{ 26505, 2, {171,155}},
+{ 26520, 2, {170,156}},
+{ 26565, 2, {165,161}},
+{ 26600, 2, {175,152}},
+{ 26676, 2, {171,156}},
+{ 26680, 2, {184,145}},
+{ 26712, 2, {168,159}},
+{ 26730, 2, {165,162}},
+{ 26775, 2, {175,153}},
+{ 26784, 2, {186,144}},
+{ 26880, 2, {168,160}},
+{ 26904, 2, {177,152}},
+{ 26928, 2, {176,153}},
+{ 26950, 2, {175,154}},
+{ 26970, 2, {174,155}},
+{ 27027, 2, {189,143}},
+{ 27040, 2, {169,160}},
+{ 27048, 2, {168,161}},
+{ 27060, 2, {165,164}},
+{ 27084, 2, {183,148}},
+{ 27132, 2, {204,133}},
+{ 27200, 2, {170,160}},
+{ 27216, 2, {168,162}},
+{ 27280, 2, {176,155}},
+{ 27300, 2, {175,156}},
+{ 27336, 2, {201,136}},
+{ 27348, 2, {172,159}},
+{ 27360, 2, {171,160}},
+{ 27370, 2, {170,161}},
+{ 27378, 2, {169,162}},
+{ 27405, 2, {189,145}},
+{ 27456, 2, {176,156}},
+{ 27489, 2, {187,147}},
+{ 27531, 2, {171,161}},
+{ 27540, 2, {170,162}},
+{ 27588, 2, {209,132}},
+{ 27600, 2, {184,150}},
+{ 27608, 2, {203,136}},
+{ 27612, 2, {177,156}},
+{ 27625, 2, {221,125}},
+{ 27636, 2, {188,147}},
+{ 27675, 2, {205,135}},
+{ 27720, 2, {168,165}},
+{ 27750, 2, {185,150}},
+{ 27776, 2, {217,128}},
+{ 27816, 2, {183,152}},
+{ 27840, 2, {174,160}},
+{ 27885, 2, {169,165}},
+{ 27900, 2, {180,155}},
+{ 27972, 2, {189,148}},
+{ 27984, 2, {176,159}},
+{ 28000, 2, {175,160}},
+{ 28044, 2, {171,164}},
+{ 28120, 2, {185,152}},
+{ 28140, 2, {201,140}},
+{ 28152, 2, {184,153}},
+{ 28175, 2, {175,161}},
+{ 28272, 2, {186,152}},
+{ 28290, 2, {205,138}},
+{ 28305, 2, {185,153}},
+{ 28314, 2, {198,143}},
+{ 28320, 2, {177,160}},
+{ 28336, 2, {176,161}},
+{ 28350, 2, {175,162}},
+{ 28380, 2, {172,165}},
+{ 28392, 2, {169,168}},
+{ 28512, 2, {176,162}},
+{ 28520, 2, {184,155}},
+{ 28548, 2, {183,156}},
+{ 28560, 2, {170,168}},
+{ 28600, 2, {200,143}},
+{ 28620, 2, {180,159}},
+{ 28728, 2, {171,168}},
+{ 28764, 2, {188,153}},
+{ 28798, 2, {187,154}},
+{ 28800, 2, {180,160}},
+{ 28860, 2, {185,156}},
+{ 28944, 2, {201,144}},
+{ 28980, 2, {180,161}},
+{ 29000, 2, {200,145}},
+{ 29025, 2, {215,135}},
+{ 29028, 2, {177,164}},
+{ 29040, 2, {176,165}},
+{ 29106, 2, {189,154}},
+{ 29120, 2, {182,160}},
+{ 29172, 2, {187,156}},
+{ 29232, 2, {174,168}},
+{ 29256, 2, {184,159}},
+{ 29280, 2, {183,160}},
+{ 29295, 2, {189,155}},
+{ 29376, 2, {192,153}},
+{ 29400, 2, {175,168}},
+{ 29403, 2, {243,121}},
+{ 29412, 2, {172,171}},
+{ 29484, 2, {182,162}},
+{ 29512, 2, {217,136}},
+{ 29575, 2, {175,169}},
+{ 29600, 2, {185,160}},
+{ 29640, 2, {190,156}},
+{ 29645, 2, {245,121}},
+{ 29670, 2, {215,138}},
+{ 29700, 2, {180,165}},
+{ 29736, 2, {177,168}},
+{ 29744, 2, {176,169}},
+{ 29748, 2, {201,148}},
+{ 29760, 2, {186,160}},
+{ 29808, 2, {184,162}},
+{ 29892, 2, {188,159}},
+{ 29920, 2, {176,170}},
+{ 29925, 2, {175,171}},
+{ 29952, 2, {192,156}},
+{ 29970, 2, {185,162}},
+{ 29988, 2, {196,153}},
+{ 30012, 2, {183,164}},
+{ 30015, 2, {207,145}},
+{ 30030, 2, {182,165}},
+{ 30096, 2, {176,171}},
+{ 30160, 2, {208,145}},
+{ 30250, 2, {242,125}},
+{ 30294, 2, {187,162}},
+{ 30303, 2, {259,117}},
+{ 30360, 2, {184,165}},
+{ 30400, 2, {190,160}},
+{ 30420, 2, {180,169}},
+{ 30429, 2, {189,161}},
+{ 30444, 2, {177,172}},
+{ 30450, 2, {175,174}},
+{ 30528, 2, {192,159}},
+{ 30552, 2, {201,152}},
+{ 30576, 2, {182,168}},
+{ 30590, 2, {190,161}},
+{ 30600, 2, {180,170}},
+{ 30624, 2, {176,174}},
+{ 30636, 2, {207,148}},
+{ 30672, 2, {213,144}},
+{ 30723, 2, {209,147}},
+{ 30744, 2, {183,168}},
+{ 30750, 2, {205,150}},
+{ 30780, 2, {180,171}},
+{ 30800, 2, {176,175}},
+{ 30855, 2, {187,165}},
+{ 30856, 2, {203,152}},
+{ 30875, 2, {247,125}},
+{ 30996, 2, {189,164}},
+{ 31000, 2, {200,155}},
+{ 31020, 2, {188,165}},
+{ 31059, 2, {203,153}},
+{ 31080, 2, {185,168}},
+{ 31104, 2, {192,162}},
+{ 31152, 2, {177,176}},
+{ 31164, 2, {196,159}},
+{ 31185, 2, {189,165}},
+{ 31200, 2, {195,160}},
+{ 31248, 2, {186,168}},
+{ 31356, 2, {201,156}},
+{ 31360, 2, {196,160}},
+{ 31365, 2, {205,153}},
+{ 31395, 2, {195,161}},
+{ 31416, 2, {187,168}},
+{ 31460, 2, {220,143}},
+{ 31464, 2, {184,171}},
+{ 31476, 2, {183,172}},
+{ 31500, 2, {180,175}},
+{ 31524, 2, {213,148}},
+{ 31590, 2, {195,162}},
+{ 31625, 2, {253,125}},
+{ 31635, 2, {185,171}},
+{ 31680, 2, {180,176}},
+{ 31752, 2, {189,168}},
+{ 31800, 2, {200,159}},
+{ 31850, 2, {182,175}},
+{ 31860, 2, {180,177}},
+{ 31878, 2, {198,161}},
+{ 31920, 2, {190,168}},
+{ 31941, 2, {189,169}},
+{ 31980, 2, {195,164}},
+{ 32016, 2, {184,174}},
+{ 32032, 2, {182,176}},
+{ 32085, 2, {207,155}},
+{ 32130, 2, {189,170}},
+{ 32148, 2, {188,171}},
+{ 32160, 2, {201,160}},
+{ 32186, 2, {209,154}},
+{ 32190, 2, {185,174}},
+{ 32200, 2, {184,175}},
+{ 32208, 2, {183,176}},
+{ 32240, 2, {208,155}},
+{ 32250, 2, {215,150}},
+{ 32256, 2, {192,168}},
+{ 32292, 2, {207,156}},
+{ 32340, 2, {196,165}},
+{ 32376, 2, {213,152}},
+{ 32412, 2, {219,148}},
+{ 32436, 2, {204,159}},
+{ 32448, 2, {192,169}},
+{ 32480, 2, {203,160}},
+{ 32487, 2, {221,147}},
+{ 32508, 2, {189,172}},
+{ 32550, 2, {186,175}},
+{ 32560, 2, {185,176}},
+{ 32568, 2, {184,177}},
+{ 32604, 2, {209,156}},
+{ 32625, 2, {225,145}},
+{ 32640, 2, {192,170}},
+{ 32725, 2, {187,175}},
+{ 32736, 2, {186,176}},
+{ 32760, 2, {182,180}},
+{ 32832, 2, {192,171}},
+{ 32844, 2, {204,161}},
+{ 32895, 2, {215,153}},
+{ 32912, 2, {187,176}},
+{ 32940, 2, {183,180}},
+{ 32964, 2, {201,164}},
+{ 32984, 2, {217,152}},
+{ 33000, 2, {200,165}},
+{ 33033, 2, {231,143}},
+{ 33072, 2, {208,159}},
+{ 33075, 2, {189,175}},
+{ 33201, 2, {217,153}},
+{ 33210, 2, {205,162}},
+{ 33228, 2, {213,156}},
+{ 33264, 2, {189,176}},
+{ 33276, 2, {188,177}},
+{ 33288, 2, {219,152}},
+{ 33300, 2, {185,180}},
+{ 33408, 2, {192,174}},
+{ 33440, 2, {190,176}},
+{ 33462, 2, {198,169}},
+{ 33495, 2, {203,165}},
+{ 33516, 2, {196,171}},
+{ 33540, 2, {195,172}},
+{ 33600, 2, {192,175}},
+{ 33660, 2, {187,180}},
+{ 33672, 2, {184,183}},
+{ 33696, 2, {208,162}},
+{ 33744, 2, {222,152}},
+{ 33768, 2, {201,168}},
+{ 33800, 2, {200,169}},
+{ 33810, 2, {210,161}},
+{ 33915, 2, {255,133}},
+{ 33948, 2, {207,164}},
+{ 33984, 2, {192,177}},
+{ 34020, 2, {189,180}},
+{ 34034, 2, {187,182}},
+{ 34040, 2, {185,184}},
+{ 34080, 2, {213,160}},
+{ 34164, 2, {219,156}},
+{ 34200, 2, {190,180}},
+{ 34224, 2, {186,184}},
+{ 34320, 2, {195,176}},
+{ 34398, 2, {189,182}},
+{ 34404, 2, {188,183}},
+{ 34410, 2, {186,185}},
+{ 34440, 2, {205,168}},
+{ 34485, 2, {209,165}},
+{ 34510, 2, {203,170}},
+{ 34560, 2, {192,180}},
+{ 34572, 2, {201,172}},
+{ 34650, 2, {198,175}},
+{ 34692, 2, {196,177}},
+{ 34713, 2, {203,171}},
+{ 34720, 2, {217,160}},
+{ 34749, 2, {243,143}},
+{ 34776, 2, {189,184}},
+{ 34800, 2, {200,174}},
+{ 34830, 2, {215,162}},
+{ 34848, 2, {198,176}},
+{ 34875, 2, {225,155}},
+{ 34884, 2, {204,171}},
+{ 34932, 2, {213,164}},
+{ 34944, 2, {192,182}},
+{ 34965, 2, {189,185}},
+{ 34980, 2, {212,165}},
+{ 35000, 2, {200,175}},
+{ 35035, 2, {245,143}},
+{ 35040, 2, {219,160}},
+{ 35055, 2, {205,171}},
+{ 35100, 2, {195,180}},
+{ 35112, 2, {209,168}},
+{ 35136, 2, {192,183}},
+{ 35235, 2, {243,145}},
+{ 35250, 2, {235,150}},
+{ 35280, 2, {196,180}},
+{ 35343, 2, {189,187}},
+{ 35360, 2, {208,170}},
+{ 35376, 2, {201,176}},
+{ 35400, 2, {200,177}},
+{ 35420, 2, {220,161}},
+{ 35520, 2, {192,185}},
+{ 35525, 2, {203,175}},
+{ 35532, 2, {189,188}},
+{ 35568, 2, {208,171}},
+{ 35604, 2, {207,172}},
+{ 35670, 2, {205,174}},
+{ 35700, 2, {204,175}},
+{ 35712, 2, {192,186}},
+{ 35728, 2, {203,176}},
+{ 35750, 2, {250,143}},
+{ 35784, 2, {213,168}},
+{ 35802, 2, {221,162}},
+{ 35805, 2, {217,165}},
+{ 35868, 2, {196,183}},
+{ 35880, 2, {195,184}},
+{ 35904, 2, {192,187}},
+{ 35910, 2, {190,189}},
+{ 35916, 2, {219,164}},
+{ 35955, 2, {235,153}},
+{ 35960, 2, {232,155}},
+{ 36036, 2, {198,182}},
+{ 36080, 2, {205,176}},
+{ 36108, 2, {204,177}},
+{ 36125, 2, {289,125}},
+{ 36180, 2, {201,180}},
+{ 36192, 2, {208,174}},
+{ 36225, 2, {207,175}},
+{ 36252, 2, {212,171}},
+{ 36288, 2, {192,189}},
+{ 36309, 2, {247,147}},
+{ 36400, 2, {200,182}},
+{ 36432, 2, {198,184}},
+{ 36450, 2, {225,162}},
+{ 36465, 2, {195,187}},
+{ 36480, 2, {192,190}},
+{ 36504, 2, {216,169}},
+{ 36540, 2, {203,180}},
+{ 36575, 2, {209,175}},
+{ 36600, 2, {200,183}},
+{ 36630, 2, {198,185}},
+{ 36636, 2, {213,172}},
+{ 36652, 2, {196,187}},
+{ 36660, 2, {195,188}},
+{ 36708, 2, {228,161}},
+{ 36765, 2, {215,171}},
+{ 36784, 2, {209,176}},
+{ 36792, 2, {219,168}},
+{ 36816, 2, {208,177}},
+{ 36855, 2, {195,189}},
+{ 36890, 2, {217,170}},
+{ 36900, 2, {205,180}},
+{ 36936, 2, {216,171}},
+{ 36960, 2, {210,176}},
+{ 36984, 2, {201,184}},
+{ 37000, 2, {200,185}},
+{ 37026, 2, {198,187}},
+{ 37044, 2, {196,189}},
+{ 37107, 2, {217,171}},
+{ 37180, 2, {220,169}},
+{ 37200, 2, {200,186}},
+{ 37260, 2, {207,180}},
+{ 37296, 2, {222,168}},
+{ 37332, 2, {204,183}},
+{ 37352, 2, {203,184}},
+{ 37375, 2, {299,125}},
+{ 37400, 2, {200,187}},
+{ 37410, 2, {215,174}},
+{ 37440, 2, {195,192}},
+{ 37485, 2, {245,153}},
+{ 37488, 2, {213,176}},
+{ 37524, 2, {212,177}},
+{ 37584, 2, {216,174}},
+{ 37620, 2, {198,190}},
+{ 37632, 2, {196,192}},
+{ 37665, 2, {243,155}},
+{ 37668, 2, {219,172}},
+{ 37720, 2, {205,184}},
+{ 37740, 2, {204,185}},
+{ 37788, 2, {201,188}},
+{ 37800, 2, {200,189}},
+{ 37840, 2, {215,176}},
+{ 37884, 2, {231,164}},
+{ 37920, 2, {237,160}},
+{ 37975, 2, {217,175}},
+{ 38016, 2, {198,192}},
+{ 38038, 2, {209,182}},
+{ 38064, 2, {208,183}},
+{ 38070, 2, {235,162}},
+{ 38080, 2, {224,170}},
+{ 38088, 2, {207,184}},
+{ 38130, 2, {205,186}},
+{ 38192, 2, {217,176}},
+{ 38220, 2, {196,195}},
+{ 38232, 2, {216,177}},
+{ 38295, 2, {207,185}},
+{ 38304, 2, {224,171}},
+{ 38340, 2, {213,180}},
+{ 38367, 2, {203,189}},
+{ 38400, 2, {200,192}},
+{ 38480, 2, {208,185}},
+{ 38544, 2, {219,176}},
+{ 38556, 2, {204,189}},
+{ 38570, 2, {203,190}},
+{ 38592, 2, {201,192}},
+{ 38610, 2, {198,195}},
+{ 38640, 2, {210,184}},
+{ 38675, 2, {221,175}},
+{ 38688, 2, {208,186}},
+{ 38700, 2, {215,180}},
+{ 38745, 2, {205,189}},
+{ 38760, 2, {204,190}},
+{ 38796, 2, {212,183}},
+{ 38850, 2, {210,185}},
+{ 38868, 2, {237,164}},
+{ 38896, 2, {208,187}},
+{ 38916, 2, {207,188}},
+{ 38940, 2, {220,177}},
+{ 38976, 2, {203,192}},
+{ 39000, 2, {200,195}},
+{ 39039, 2, {231,169}},
+{ 39072, 2, {222,176}},
+{ 39168, 2, {204,192}},
+{ 39192, 2, {213,184}},
+{ 39200, 2, {200,196}},
+{ 39270, 2, {210,187}},
+{ 39312, 2, {208,189}},
+{ 39325, 2, {275,143}},
+{ 39360, 2, {205,192}},
+{ 39368, 2, {259,152}},
+{ 39375, 2, {225,175}},
+{ 39396, 2, {201,196}},
+{ 39420, 2, {219,180}},
+{ 39468, 2, {253,156}},
+{ 39501, 2, {209,189}},
+{ 39520, 2, {208,190}},
+{ 39528, 2, {216,183}},
+{ 39560, 2, {215,184}},
+{ 39585, 2, {203,195}},
+{ 39600, 2, {200,198}},
+{ 39627, 2, {259,153}},
+{ 39648, 2, {224,177}},
+{ 39732, 2, {231,172}},
+{ 39744, 2, {207,192}},
+{ 39780, 2, {204,195}},
+{ 39816, 2, {237,168}},
+{ 39852, 2, {243,164}},
+{ 39928, 2, {217,184}},
+{ 39960, 2, {216,185}},
+{ 39990, 2, {215,186}},
+{ 40040, 2, {220,182}},
+{ 40044, 2, {213,188}},
+{ 40068, 2, {212,189}},
+{ 40095, 2, {243,165}},
+{ 40128, 2, {209,192}},
+{ 40176, 2, {216,186}},
+{ 40185, 2, {235,171}},
+{ 40194, 2, {203,198}},
+{ 40200, 2, {201,200}},
+{ 40222, 2, {221,182}},
+{ 40260, 2, {220,183}},
+{ 40296, 2, {219,184}},
+{ 40320, 2, {210,192}},
+{ 40356, 2, {228,177}},
+{ 40375, 2, {323,125}},
+{ 40425, 2, {231,175}},
+{ 40455, 2, {261,155}},
+{ 40500, 2, {225,180}},
+{ 40560, 2, {208,195}},
+{ 40572, 2, {207,196}},
+{ 40590, 2, {205,198}},
+{ 40600, 2, {203,200}},
+{ 40635, 2, {215,189}},
+{ 40656, 2, {231,176}},
+{ 40755, 2, {209,195}},
+{ 40764, 2, {237,172}},
+{ 40824, 2, {216,189}},
+{ 40848, 2, {222,184}},
+{ 40890, 2, {235,174}},
+{ 40896, 2, {213,192}},
+{ 40898, 2, {242,169}},
+{ 40964, 2, {209,196}},
+{ 40992, 2, {224,183}},
+{ 41000, 2, {205,200}},
+{ 41004, 2, {204,201}},
+{ 41013, 2, {217,189}},
+{ 41040, 2, {216,190}},
+{ 41055, 2, {255,161}},
+{ 41064, 2, {232,177}},
+{ 41067, 2, {243,169}},
+{ 41140, 2, {220,187}},
+{ 41172, 2, {219,188}},
+{ 41184, 2, {208,198}},
+{ 41230, 2, {217,190}},
+{ 41280, 2, {215,192}},
+{ 41310, 2, {243,170}},
+{ 41328, 2, {246,168}},
+{ 41340, 2, {212,195}},
+{ 41382, 2, {209,198}},
+{ 41400, 2, {207,200}},
+{ 41405, 2, {245,169}},
+{ 41412, 2, {204,203}},
+{ 41440, 2, {224,185}},
+{ 41472, 2, {216,192}},
+{ 41503, 2, {343,121}},
+{ 41625, 2, {225,185}},
+{ 41650, 2, {238,175}},
+{ 41664, 2, {217,192}},
+{ 41712, 2, {237,176}},
+{ 41724, 2, {228,183}},
+{ 41745, 2, {253,165}},
+{ 41748, 2, {213,196}},
+{ 41769, 2, {221,189}},
+{ 41796, 2, {243,172}},
+{ 41800, 2, {209,200}},
+{ 41808, 2, {208,201}},
+{ 41820, 2, {205,204}},
+{ 41832, 2, {249,168}},
+{ 41888, 2, {224,187}},
+{ 41895, 2, {245,171}},
+{ 42000, 2, {210,200}},
+{ 42021, 2, {207,203}},
+{ 42048, 2, {219,192}},
+{ 42075, 2, {225,187}},
+{ 42120, 2, {216,195}},
+{ 42224, 2, {208,203}},
+{ 42228, 2, {207,204}},
+{ 42240, 2, {220,192}},
+{ 42250, 2, {250,169}},
+{ 42300, 2, {225,188}},
+{ 42315, 2, {217,195}},
+{ 42336, 2, {216,196}},
+{ 42350, 2, {242,175}},
+{ 42432, 2, {208,204}},
+{ 42435, 2, {207,205}},
+{ 42456, 2, {232,183}},
+{ 42471, 2, {297,143}},
+{ 42483, 2, {289,147}},
+{ 42504, 2, {231,184}},
+{ 42560, 2, {224,190}},
+{ 42570, 2, {215,198}},
+{ 42600, 2, {213,200}},
+{ 42612, 2, {212,201}},
+{ 42624, 2, {222,192}},
+{ 42630, 2, {210,203}},
+{ 42636, 2, {209,204}},
+{ 42640, 2, {208,205}},
+{ 42660, 2, {237,180}},
+{ 42768, 2, {216,198}},
+{ 42828, 2, {249,172}},
+{ 42900, 2, {220,195}},
+{ 42920, 2, {232,185}},
+{ 42924, 2, {219,196}},
+{ 42930, 2, {265,162}},
+{ 42966, 2, {217,198}},
+{ 43000, 2, {215,200}},
+{ 43050, 2, {210,205}},
+{ 43056, 2, {208,207}},
+{ 43092, 2, {228,189}},
+{ 43095, 2, {221,195}},
+{ 43152, 2, {232,186}},
+{ 43188, 2, {236,183}},
+{ 43197, 2, {231,187}},
+{ 43200, 2, {216,200}},
+{ 43225, 2, {247,175}},
+{ 43296, 2, {246,176}},
+{ 43316, 2, {221,196}},
+{ 43400, 2, {217,200}},
+{ 43416, 2, {216,201}},
+{ 43428, 2, {231,188}},
+{ 43452, 2, {213,204}},
+{ 43472, 2, {209,208}},
+{ 43520, 2, {256,170}},
+{ 43608, 2, {237,184}},
+{ 43659, 2, {231,189}},
+{ 43680, 2, {210,208}},
+{ 43710, 2, {235,186}},
+{ 43740, 2, {243,180}},
+{ 43758, 2, {221,198}},
+{ 43776, 2, {228,192}},
+{ 43800, 2, {219,200}},
+{ 43824, 2, {249,176}},
+{ 43848, 2, {216,203}},
+{ 43860, 2, {215,204}},
+{ 43884, 2, {212,207}},
+{ 43890, 2, {210,209}},
+{ 43911, 2, {287,153}},
+{ 43920, 2, {240,183}},
+{ 44160, 2, {230,192}},
+{ 44200, 2, {221,200}},
+{ 44220, 2, {220,201}},
+{ 44268, 2, {217,204}},
+{ 44275, 2, {253,175}},
+{ 44280, 2, {216,205}},
+{ 44289, 2, {259,171}},
+{ 44304, 2, {213,208}},
+{ 44352, 2, {224,198}},
+{ 44400, 2, {222,200}},
+{ 44415, 2, {235,189}},
+{ 44460, 2, {228,195}},
+{ 44505, 2, {215,207}},
+{ 44556, 2, {237,188}},
+{ 44604, 2, {236,189}},
+{ 44616, 2, {264,169}},
+{ 44640, 2, {240,186}},
+{ 44660, 2, {220,203}},
+{ 44676, 2, {219,204}},
+{ 44712, 2, {216,207}},
+{ 44720, 2, {215,208}},
+{ 44820, 2, {249,180}},
+{ 44919, 2, {217,207}},
+{ 44954, 2, {247,182}},
+{ 44955, 2, {243,185}},
+{ 44982, 2, {238,189}},
+{ 45000, 2, {225,200}},
+{ 45024, 2, {224,201}},
+{ 45120, 2, {235,192}},
+{ 45125, 2, {361,125}},
+{ 45136, 2, {217,208}},
+{ 45144, 2, {216,209}},
+{ 45150, 2, {215,210}},
+{ 45156, 2, {213,212}},
+{ 45240, 2, {232,195}},
+{ 45264, 2, {246,184}},
+{ 45276, 2, {231,196}},
+{ 45315, 2, {265,171}},
+{ 45360, 2, {216,210}},
+{ 45408, 2, {258,176}},
+{ 45441, 2, {243,187}},
+{ 45472, 2, {224,203}},
+{ 45500, 2, {250,182}},
+{ 45504, 2, {237,192}},
+{ 45510, 2, {222,205}},
+{ 45540, 2, {220,207}},
+{ 45552, 2, {219,208}},
+{ 45570, 2, {217,210}},
+{ 45584, 2, {259,176}},
+{ 45675, 2, {225,203}},
+{ 45684, 2, {243,188}},
+{ 45696, 2, {224,204}},
+{ 45815, 2, {245,187}},
+{ 45816, 2, {249,184}},
+{ 45828, 2, {228,201}},
+{ 45880, 2, {248,185}},
+{ 45885, 2, {285,161}},
+{ 45900, 2, {225,204}},
+{ 45920, 2, {224,205}},
+{ 45936, 2, {232,198}},
+{ 45968, 2, {221,208}},
+{ 45980, 2, {220,209}},
+{ 46008, 2, {216,213}},
+{ 46020, 2, {236,195}},
+{ 46046, 2, {253,182}},
+{ 46053, 2, {301,153}},
+{ 46080, 2, {240,192}},
+{ 46110, 2, {265,174}},
+{ 46116, 2, {244,189}},
+{ 46125, 2, {225,205}},
+{ 46170, 2, {243,190}},
+{ 46176, 2, {222,208}},
+{ 46284, 2, {228,203}},
+{ 46305, 2, {245,189}},
+{ 46368, 2, {224,207}},
+{ 46410, 2, {221,210}},
+{ 46428, 2, {219,212}},
+{ 46440, 2, {216,215}},
+{ 46452, 2, {237,196}},
+{ 46464, 2, {242,192}},
+{ 46475, 2, {275,169}},
+{ 46530, 2, {235,198}},
+{ 46632, 2, {232,201}},
+{ 46683, 2, {247,189}},
+{ 46690, 2, {230,203}},
+{ 46740, 2, {228,205}},
+{ 46750, 2, {250,187}},
+{ 46800, 2, {225,208}},
+{ 46812, 2, {249,188}},
+{ 46816, 2, {224,209}},
+{ 46818, 2, {289,162}},
+{ 46860, 2, {220,213}},
+{ 46872, 2, {217,216}},
+{ 46920, 2, {230,204}},
+{ 46980, 2, {261,180}},
+{ 47000, 2, {235,200}},
+{ 47025, 2, {225,209}},
+{ 47040, 2, {224,210}},
+{ 47124, 2, {231,204}},
+{ 47196, 2, {228,207}},
+{ 47232, 2, {246,192}},
+{ 47304, 2, {219,216}},
+{ 47360, 2, {256,185}},
+{ 47385, 2, {243,195}},
+{ 47400, 2, {237,200}},
+{ 47424, 2, {228,208}},
+{ 47432, 2, {242,196}},
+{ 47436, 2, {236,201}},
+{ 47472, 2, {258,184}},
+{ 47481, 2, {323,147}},
+{ 47502, 2, {234,203}},
+{ 47520, 2, {220,216}},
+{ 47560, 2, {232,205}},
+{ 47580, 2, {244,195}},
+{ 47600, 2, {238,200}},
+{ 47628, 2, {243,196}},
+{ 47656, 2, {259,184}},
+{ 47700, 2, {225,212}},
+{ 47712, 2, {224,213}},
+{ 47730, 2, {222,215}},
+{ 47736, 2, {221,216}},
+{ 47740, 2, {220,217}},
+{ 47808, 2, {249,192}},
+{ 47840, 2, {230,208}},
+{ 47850, 2, {275,174}},
+{ 47872, 2, {256,187}},
+{ 47940, 2, {235,204}},
+{ 47952, 2, {222,216}},
+{ 47970, 2, {234,205}},
+{ 48024, 2, {232,207}},
+{ 48048, 2, {231,208}},
+{ 48060, 2, {267,180}},
+{ 48160, 2, {224,215}},
+{ 48165, 2, {247,195}},
+{ 48180, 2, {220,219}},
+{ 48195, 2, {255,189}},
+{ 48240, 2, {240,201}},
+{ 48279, 2, {231,209}},
+{ 48285, 2, {261,185}},
+{ 48348, 2, {237,204}},
+{ 48360, 2, {248,195}},
+{ 48375, 2, {225,215}},
+{ 48384, 2, {224,216}},
+{ 48412, 2, {247,196}},
+{ 48510, 2, {231,210}},
+{ 48564, 2, {228,213}},
+{ 48576, 2, {253,192}},
+{ 48600, 2, {225,216}},
+{ 48608, 2, {224,217}},
+{ 48620, 2, {221,220}},
+{ 48640, 2, {256,190}},
+{ 48645, 2, {235,207}},
+{ 48672, 2, {234,208}},
+{ 48720, 2, {232,210}},
+{ 48804, 2, {249,196}},
+{ 48825, 2, {225,217}},
+{ 48852, 2, {236,207}},
+{ 48875, 2, {391,125}},
+{ 48880, 2, {235,208}},
+{ 48906, 2, {234,209}},
+{ 48951, 2, {259,189}},
+{ 48960, 2, {240,204}},
+{ 48972, 2, {231,212}},
+{ 49000, 2, {245,200}},
+{ 49020, 2, {228,215}},
+{ 49044, 2, {244,201}},
+{ 49049, 2, {343,143}},
+{ 49056, 2, {224,219}},
+{ 49068, 2, {261,188}},
+{ 49077, 2, {287,171}},
+{ 49104, 2, {248,198}},
+{ 49128, 2, {267,184}},
+{ 49200, 2, {240,205}},
+{ 49210, 2, {259,190}},
+{ 49280, 2, {224,220}},
+{ 49290, 2, {265,186}},
+{ 49296, 2, {237,208}},
+{ 49329, 2, {243,203}},
+{ 49335, 2, {253,195}},
+{ 49350, 2, {235,210}},
+{ 49400, 2, {247,200}},
+{ 49416, 2, {232,213}},
+{ 49476, 2, {228,217}},
+{ 49500, 2, {225,220}},
+{ 49504, 2, {224,221}},
+{ 49536, 2, {258,192}},
+{ 49572, 2, {243,204}},
+{ 49588, 2, {253,196}},
+{ 49680, 2, {230,216}},
+{ 49725, 2, {225,221}},
+{ 49728, 2, {224,222}},
+{ 49742, 2, {238,209}},
+{ 49800, 2, {249,200}},
+{ 49815, 2, {243,205}},
+{ 49848, 2, {248,201}},
+{ 49880, 2, {232,215}},
+{ 49896, 2, {231,216}},
+{ 49910, 2, {230,217}},
+{ 49932, 2, {228,219}},
+{ 49980, 2, {238,210}},
+{ 50050, 2, {275,182}},
+{ 50085, 2, {265,189}},
+{ 50193, 2, {297,169}},
+{ 50196, 2, {267,188}},
+{ 50232, 2, {273,184}},
+{ 50244, 2, {237,212}},
+{ 50268, 2, {236,213}},
+{ 50274, 2, {266,189}},
+{ 50310, 2, {234,215}},
+{ 50320, 2, {272,185}},
+{ 50337, 2, {329,153}},
+{ 50344, 2, {232,217}},
+{ 50400, 2, {225,224}},
+{ 50490, 2, {255,198}},
+{ 50505, 2, {259,195}},
+{ 50508, 2, {244,207}},
+{ 50512, 2, {287,176}},
+{ 50544, 2, {234,216}},
+{ 50575, 2, {289,175}},
+{ 50652, 2, {252,201}},
+{ 50688, 2, {256,198}},
+{ 50715, 2, {245,207}},
+{ 50750, 2, {250,203}},
+{ 50760, 2, {235,216}},
+{ 50778, 2, {234,217}},
+{ 50787, 2, {243,209}},
+{ 50796, 2, {249,204}},
+{ 50808, 2, {232,219}},
+{ 50820, 2, {231,220}},
+{ 50840, 2, {248,205}},
+{ 50960, 2, {245,208}},
+{ 51000, 2, {250,204}},
+{ 51030, 2, {243,210}},
+{ 51051, 2, {231,221}},
+{ 51072, 2, {228,224}},
+{ 51120, 2, {240,213}},
+{ 51150, 2, {275,186}},
+{ 51156, 2, {252,203}},
+{ 51168, 2, {246,208}},
+{ 51192, 2, {237,216}},
+{ 51200, 2, {256,200}},
+{ 51205, 2, {245,209}},
+{ 51264, 2, {267,192}},
+{ 51300, 2, {228,225}},
+{ 51324, 2, {273,188}},
+{ 51336, 2, {248,207}},
+{ 51376, 2, {247,208}},
+{ 51408, 2, {238,216}},
+{ 51425, 2, {275,187}},
+{ 51450, 2, {245,210}},
+{ 51456, 2, {256,201}},
+{ 51471, 2, {301,171}},
+{ 51504, 2, {232,222}},
+{ 51516, 2, {243,212}},
+{ 51520, 2, {230,224}},
+{ 51597, 2, {273,189}},
+{ 51600, 2, {240,215}},
+{ 51612, 2, {253,204}},
+{ 51615, 2, {279,185}},
+{ 51680, 2, {272,190}},
+{ 51684, 2, {236,219}},
+{ 51714, 2, {234,221}},
+{ 51744, 2, {231,224}},
+{ 51765, 2, {255,203}},
+{ 51792, 2, {249,208}},
+{ 51800, 2, {259,200}},
+{ 51870, 2, {247,210}},
+{ 51972, 2, {244,213}},
+{ 51975, 2, {231,225}},
+{ 52000, 2, {250,208}},
+{ 52020, 2, {255,204}},
+{ 52080, 2, {240,217}},
+{ 52140, 2, {237,220}},
+{ 52164, 2, {252,207}},
+{ 52170, 2, {235,222}},
+{ 52200, 2, {232,225}},
+{ 52224, 2, {256,204}},
+{ 52245, 2, {243,215}},
+{ 52250, 2, {250,209}},
+{ 52260, 2, {260,201}},
+{ 52272, 2, {242,216}},
+{ 52325, 2, {299,175}},
+{ 52332, 2, {267,196}},
+{ 52360, 2, {238,220}},
+{ 52416, 2, {234,224}},
+{ 52440, 2, {230,228}},
+{ 52452, 2, {279,188}},
+{ 52470, 2, {265,198}},
+{ 52479, 2, {343,153}},
+{ 52480, 2, {256,205}},
+{ 52488, 2, {243,216}},
+{ 52560, 2, {240,219}},
+{ 52624, 2, {253,208}},
+{ 52635, 2, {319,165}},
+{ 52640, 2, {235,224}},
+{ 52668, 2, {231,228}},
+{ 52731, 2, {243,217}},
+{ 52780, 2, {260,203}},
+{ 52788, 2, {249,212}},
+{ 52800, 2, {240,220}},
+{ 52808, 2, {287,184}},
+{ 52824, 2, {248,213}},
+{ 52875, 2, {235,225}},
+{ 52890, 2, {246,215}},
+{ 52920, 2, {245,216}},
+{ 52976, 2, {301,176}},
+{ 52992, 2, {256,207}},
+{ 53040, 2, {240,221}},
+{ 53064, 2, {264,201}},
+{ 53067, 2, {361,147}},
+{ 53088, 2, {237,224}},
+{ 53100, 2, {236,225}},
+{ 53136, 2, {246,216}},
+{ 53200, 2, {266,200}},
+{ 53244, 2, {261,204}},
+{ 53280, 2, {240,222}},
+{ 53295, 2, {255,209}},
+{ 53312, 2, {238,224}},
+{ 53320, 2, {248,215}},
+{ 53400, 2, {267,200}},
+{ 53436, 2, {244,219}},
+{ 53460, 2, {243,220}},
+{ 53482, 2, {242,221}},
+{ 53504, 2, {256,209}},
+{ 53505, 2, {261,205}},
+{ 53508, 2, {273,196}},
+{ 53550, 2, {238,225}},
+{ 53580, 2, {235,228}},
+{ 53592, 2, {232,231}},
+{ 53613, 2, {259,207}},
+{ 53664, 2, {258,208}},
+{ 53676, 2, {252,213}},
+{ 53703, 2, {243,221}},
+{ 53784, 2, {249,216}},
+{ 53820, 2, {234,230}},
+{ 53865, 2, {285,189}},
+{ 53872, 2, {259,208}},
+{ 54000, 2, {240,225}},
+{ 54036, 2, {237,228}},
+{ 54060, 2, {255,212}},
+{ 54144, 2, {282,192}},
+{ 54145, 2, {245,221}},
+{ 54180, 2, {252,215}},
+{ 54208, 2, {242,224}},
+{ 54243, 2, {287,189}},
+{ 54250, 2, {250,217}},
+{ 54288, 2, {234,232}},
+{ 54312, 2, {248,219}},
+{ 54340, 2, {247,220}},
+{ 54390, 2, {245,222}},
+{ 54418, 2, {299,182}},
+{ 54432, 2, {243,224}},
+{ 54450, 2, {242,225}},
+{ 54468, 2, {267,204}},
+{ 54516, 2, {236,231}},
+{ 54520, 2, {235,232}},
+{ 54528, 2, {256,213}},
+{ 54621, 2, {289,189}},
+{ 54625, 2, {437,125}},
+{ 54648, 2, {253,216}},
+{ 54675, 2, {243,225}},
+{ 54684, 2, {252,217}},
+{ 54720, 2, {240,228}},
+{ 54780, 2, {249,220}},
+{ 54855, 2, {265,207}},
+{ 54870, 2, {295,186}},
+{ 54880, 2, {245,224}},
+{ 54900, 2, {244,225}},
+{ 54945, 2, {297,185}},
+{ 54984, 2, {237,232}},
+{ 54990, 2, {235,234}},
+{ 55040, 2, {256,215}},
+{ 55055, 2, {385,143}},
+{ 55056, 2, {248,222}},
+{ 55080, 2, {255,216}},
+{ 55104, 2, {246,224}},
+{ 55125, 2, {245,225}},
+{ 55188, 2, {252,219}},
+{ 55200, 2, {240,230}},
+{ 55250, 2, {250,221}},
+{ 55296, 2, {256,216}},
+{ 55328, 2, {247,224}},
+{ 55332, 2, {261,212}},
+{ 55335, 2, {255,217}},
+{ 55380, 2, {260,213}},
+{ 55384, 2, {301,184}},
+{ 55404, 2, {243,228}},
+{ 55440, 2, {240,231}},
+{ 55476, 2, {268,207}},
+{ 55536, 2, {267,208}},
+{ 55539, 2, {297,187}},
+{ 55575, 2, {247,225}},
+{ 55650, 2, {265,210}},
+{ 55692, 2, {238,234}},
+{ 55728, 2, {258,216}},
+{ 55755, 2, {295,189}},
+{ 55760, 2, {272,205}},
+{ 55776, 2, {249,224}},
+{ 55800, 2, {248,225}},
+{ 55825, 2, {275,203}},
+{ 55860, 2, {245,228}},
+{ 55890, 2, {243,230}},
+{ 55932, 2, {237,236}},
+{ 56000, 2, {250,224}},
+{ 56028, 2, {276,203}},
+{ 56056, 2, {286,196}},
+{ 56064, 2, {256,219}},
+{ 56100, 2, {255,220}},
+{ 56115, 2, {261,215}},
+{ 56133, 2, {243,231}},
+{ 56160, 2, {240,234}},
+{ 56232, 2, {264,213}},
+{ 56259, 2, {329,171}},
+{ 56265, 2, {341,165}},
+{ 56304, 2, {272,207}},
+{ 56320, 2, {256,220}},
+{ 56364, 2, {244,231}},
+{ 56376, 2, {243,232}},
+{ 56400, 2, {240,235}},
+{ 56420, 2, {260,217}},
+{ 56430, 2, {270,209}},
+{ 56448, 2, {252,224}},
+{ 56525, 2, {323,175}},
+{ 56576, 2, {256,221}},
+{ 56604, 2, {267,212}},
+{ 56637, 2, {261,217}},
+{ 56672, 2, {253,224}},
+{ 56700, 2, {252,225}},
+{ 56730, 2, {305,186}},
+{ 56772, 2, {249,228}},
+{ 56784, 2, {273,208}},
+{ 56832, 2, {256,222}},
+{ 56840, 2, {245,232}},
+{ 56848, 2, {272,209}},
+{ 56880, 2, {240,237}},
+{ 56889, 2, {301,189}},
+{ 56916, 2, {279,204}},
+{ 56925, 2, {253,225}},
+{ 56940, 2, {260,219}},
+{ 56980, 2, {259,220}},
+{ 57000, 2, {250,228}},
+{ 57036, 2, {291,196}},
+{ 57057, 2, {247,231}},
+{ 57072, 2, {246,232}},
+{ 57084, 2, {268,213}},
+{ 57105, 2, {243,235}},
+{ 57120, 2, {240,238}},
+{ 57195, 2, {279,205}},
+{ 57222, 2, {289,198}},
+{ 57240, 2, {265,216}},
+{ 57288, 2, {248,231}},
+{ 57330, 2, {245,234}},
+{ 57348, 2, {243,236}},
+{ 57400, 2, {280,205}},
+{ 57408, 2, {276,208}},
+{ 57420, 2, {261,220}},
+{ 57460, 2, {260,221}},
+{ 57475, 2, {275,209}},
+{ 57645, 2, {305,189}},
+{ 57672, 2, {267,216}},
+{ 57684, 2, {253,228}},
+{ 57750, 2, {250,231}},
+{ 57768, 2, {249,232}},
+{ 57792, 2, {258,224}},
+{ 57798, 2, {247,234}},
+{ 57800, 2, {289,200}},
+{ 57810, 2, {246,235}},
+{ 57816, 2, {264,219}},
+{ 57828, 2, {244,237}},
+{ 57834, 2, {243,238}},
+{ 57855, 2, {285,203}},
+{ 57876, 2, {273,212}},
+{ 57915, 2, {297,195}},
+{ 57936, 2, {272,213}},
+{ 57960, 2, {252,230}},
+{ 57967, 2, {343,169}},
+{ 58016, 2, {259,224}},
+{ 58032, 2, {248,234}},
+{ 58080, 2, {242,240}},
+{ 58140, 2, {255,228}},
+{ 58200, 2, {291,200}},
+{ 58212, 2, {252,231}},
+{ 58240, 2, {260,224}},
+{ 58275, 2, {259,225}},
+{ 58280, 2, {248,235}},
+{ 58305, 2, {299,195}},
+{ 58320, 2, {243,240}},
+{ 58344, 2, {264,221}},
+{ 58368, 2, {256,228}},
+{ 58410, 2, {295,198}},
+{ 58443, 2, {253,231}},
+{ 58480, 2, {272,215}},
+{ 58500, 2, {250,234}},
+{ 58520, 2, {266,220}},
+{ 58590, 2, {270,217}},
+{ 58604, 2, {299,196}},
+{ 58608, 2, {264,222}},
+{ 58653, 2, {343,171}},
+{ 58656, 2, {282,208}},
+{ 58692, 2, {268,219}},
+{ 58740, 2, {267,220}},
+{ 58764, 2, {249,236}},
+{ 58776, 2, {248,237}},
+{ 58786, 2, {247,238}},
+{ 58788, 2, {276,213}},
+{ 58800, 2, {245,240}},
+{ 58806, 2, {243,242}},
+{ 58830, 2, {265,222}},
+{ 58880, 2, {256,230}},
+{ 59040, 2, {246,240}},
+{ 59052, 2, {259,228}},
+{ 59136, 2, {256,231}},
+{ 59148, 2, {279,212}},
+{ 59160, 2, {255,232}},
+{ 59202, 2, {253,234}},
+{ 59220, 2, {252,235}},
+{ 59280, 2, {247,240}},
+{ 59290, 2, {245,242}},
+{ 59292, 2, {244,243}},
+{ 59360, 2, {265,224}},
+{ 59364, 2, {291,204}},
+{ 59400, 2, {264,225}},
+{ 59409, 2, {287,207}},
+{ 59500, 2, {250,238}},
+{ 59508, 2, {261,228}},
+{ 59535, 2, {245,243}},
+{ 59568, 2, {272,219}},
+{ 59570, 2, {259,230}},
+{ 59584, 2, {266,224}},
+{ 59625, 2, {265,225}},
+{ 59640, 2, {280,213}},
+{ 59670, 2, {255,234}},
+{ 59675, 2, {275,217}},
+{ 59696, 2, {287,208}},
+{ 59724, 2, {252,237}},
+{ 59760, 2, {249,240}},
+{ 59774, 2, {247,242}},
+{ 59808, 2, {267,224}},
+{ 59850, 2, {266,225}},
+{ 59856, 2, {258,232}},
+{ 59892, 2, {276,217}},
+{ 59904, 2, {256,234}},
+{ 59976, 2, {252,238}},
+{ 59985, 2, {279,215}},
+{ 60000, 2, {250,240}},
+{ 60021, 2, {247,243}},
+{ 60060, 2, {260,231}},
+{ 60088, 2, {259,232}},
+{ 60160, 2, {256,235}},
+{ 60180, 2, {255,236}},
+{ 60200, 2, {280,215}},
+{ 60214, 2, {253,238}},
+{ 60264, 2, {248,243}},
+{ 60270, 2, {246,245}},
+{ 60300, 2, {268,225}},
+{ 60333, 2, {273,221}},
+{ 60384, 2, {272,222}},
+{ 60390, 2, {305,198}},
+{ 60420, 2, {265,228}},
+{ 60444, 2, {276,219}},
+{ 60480, 2, {252,240}},
+{ 60500, 2, {250,242}},
+{ 60515, 2, {247,245}},
+{ 60528, 2, {291,208}},
+{ 60552, 2, {261,232}},
+{ 60588, 2, {297,204}},
+{ 60606, 2, {259,234}},
+{ 60630, 2, {258,235}},
+{ 60672, 2, {256,237}},
+{ 60680, 2, {296,205}},
+{ 60720, 2, {253,240}},
+{ 60750, 2, {250,243}},
+{ 60756, 2, {249,244}},
+{ 60760, 2, {248,245}},
+{ 60775, 2, {275,221}},
+{ 60876, 2, {267,228}},
+{ 60885, 2, {297,205}},
+{ 60912, 2, {282,216}},
+{ 60928, 2, {256,238}},
+{ 60984, 2, {252,242}},
+{ 61008, 2, {248,246}},
+{ 61047, 2, {323,189}},
+{ 61050, 2, {275,222}},
+{ 61065, 2, {295,207}},
+{ 61152, 2, {273,224}},
+{ 61200, 2, {255,240}},
+{ 61236, 2, {252,243}},
+{ 61250, 2, {250,245}},
+{ 61320, 2, {280,219}},
+{ 61335, 2, {261,235}},
+{ 61347, 2, {363,169}},
+{ 61380, 2, {279,220}},
+{ 61425, 2, {273,225}},
+{ 61440, 2, {256,240}},
+{ 61479, 2, {253,243}},
+{ 61480, 2, {265,232}},
+{ 61596, 2, {261,236}},
+{ 61600, 2, {275,224}},
+{ 61620, 2, {260,237}},
+{ 61692, 2, {291,212}},
+{ 61740, 2, {252,245}},
+{ 61750, 2, {250,247}},
+{ 61752, 2, {249,248}},
+{ 61776, 2, {264,234}},
+{ 61812, 2, {303,204}},
+{ 61824, 2, {276,224}},
+{ 61845, 2, {285,217}},
+{ 61875, 2, {275,225}},
+{ 61880, 2, {260,238}},
+{ 61908, 2, {268,231}},
+{ 61920, 2, {258,240}},
+{ 61944, 2, {267,232}},
+{ 61950, 2, {295,210}},
+{ 61952, 2, {256,242}},
+{ 61965, 2, {255,243}},
+{ 61985, 2, {253,245}},
+{ 62010, 2, {265,234}},
+{ 62016, 2, {272,228}},
+{ 62040, 2, {264,235}},
+{ 62073, 2, {297,209}},
+{ 62100, 2, {270,230}},
+{ 62160, 2, {259,240}},
+{ 62181, 2, {329,189}},
+{ 62192, 2, {299,208}},
+{ 62196, 2, {284,219}},
+{ 62205, 2, {319,195}},
+{ 62208, 2, {256,243}},
+{ 62220, 2, {255,244}},
+{ 62244, 2, {252,247}},
+{ 62307, 2, {301,207}},
+{ 62320, 2, {304,205}},
+{ 62370, 2, {270,231}},
+{ 62400, 2, {260,240}},
+{ 62424, 2, {289,216}},
+{ 62560, 2, {272,230}},
+{ 62568, 2, {264,237}},
+{ 62608, 2, {301,208}},
+{ 62640, 2, {261,240}},
+{ 62700, 2, {275,228}},
+{ 62720, 2, {256,245}},
+{ 62748, 2, {252,249}},
+{ 62832, 2, {264,238}},
+{ 62856, 2, {291,216}},
+{ 62930, 2, {290,217}},
+{ 62937, 2, {259,243}},
+{ 62964, 2, {297,212}},
+{ 62976, 2, {256,246}},
+{ 62985, 2, {255,247}},
+{ 63000, 2, {252,250}},
+{ 63012, 2, {267,236}},
+{ 63024, 2, {303,208}},
+{ 63072, 2, {288,219}},
+{ 63135, 2, {305,207}},
+{ 63140, 2, {287,220}},
+{ 63168, 2, {282,224}},
+{ 63175, 2, {361,175}},
+{ 63180, 2, {260,243}},
+{ 63206, 2, {286,221}},
+{ 63210, 2, {258,245}},
+{ 63232, 2, {256,247}},
+{ 63240, 2, {255,248}},
+{ 63250, 2, {253,250}},
+{ 63336, 2, {273,232}},
+{ 63441, 2, {371,171}},
+{ 63450, 2, {270,235}},
+{ 63516, 2, {268,237}},
+{ 63580, 2, {289,220}},
+{ 63600, 2, {265,240}},
+{ 63612, 2, {279,228}},
+{ 63640, 2, {296,215}},
+{ 63648, 2, {272,234}},
+{ 63684, 2, {261,244}},
+{ 63744, 2, {256,249}},
+{ 63756, 2, {253,252}},
+{ 63800, 2, {275,232}},
+{ 63840, 2, {266,240}},
+{ 63855, 2, {297,215}},
+{ 63900, 2, {284,225}},
+{ 63920, 2, {272,235}},
+{ 63936, 2, {288,222}},
+{ 63945, 2, {261,245}},
+{ 63954, 2, {306,209}},
+{ 63984, 2, {258,248}},
+{ 64000, 2, {256,250}},
+{ 64020, 2, {291,220}},
+{ 64050, 2, {305,210}},
+{ 64064, 2, {286,224}},
+{ 64080, 2, {267,240}},
+{ 64141, 2, {343,187}},
+{ 64152, 2, {264,243}},
+{ 64220, 2, {260,247}},
+{ 64232, 2, {259,248}},
+{ 64236, 2, {303,212}},
+{ 64260, 2, {255,252}},
+{ 64272, 2, {309,208}},
+{ 64288, 2, {287,224}},
+{ 64350, 2, {275,234}},
+{ 64395, 2, {265,243}},
+{ 64428, 2, {273,236}},
+{ 64464, 2, {272,237}},
+{ 64512, 2, {256,252}},
+{ 64515, 2, {255,253}},
+{ 64575, 2, {287,225}},
+{ 64600, 2, {323,200}},
+{ 64638, 2, {266,243}},
+{ 64680, 2, {264,245}},
+{ 64728, 2, {261,248}},
+{ 64740, 2, {260,249}},
+{ 64750, 2, {259,250}},
+{ 64768, 2, {256,253}},
+{ 64800, 2, {270,240}},
+{ 64827, 2, {343,189}},
+{ 64860, 2, {276,235}},
+{ 64944, 2, {264,246}},
+{ 64980, 2, {285,228}},
+{ 65065, 2, {385,169}},
+{ 65076, 2, {319,204}},
+{ 65100, 2, {300,217}},
+{ 65124, 2, {268,243}},
+{ 65148, 2, {267,244}},
+{ 65184, 2, {291,224}},
+{ 65190, 2, {265,246}},
+{ 65208, 2, {264,247}},
+{ 65268, 2, {259,252}},
+{ 65280, 2, {256,255}},
+{ 65340, 2, {270,242}},
+{ 65360, 2, {304,215}},
+{ 65412, 2, {276,237}},
+{ 65424, 2, {282,232}},
+{ 65448, 2, {303,216}},
+{ 65450, 2, {275,238}},
+{ 65490, 2, {295,222}},
+{ 65508, 2, {309,212}},
+{ 65520, 2, {260,252}},
+{ 65565, 2, {279,235}},
+{ 65600, 2, {320,205}},
+{ 65604, 2, {284,231}},
+{ 65637, 2, {297,221}},
+{ 65664, 2, {288,228}},
+{ 65700, 2, {292,225}},
+{ 65720, 2, {265,248}},
+{ 65736, 2, {264,249}},
+{ 65772, 2, {261,252}},
+{ 65780, 2, {260,253}},
+{ 65800, 2, {280,235}},
+{ 65844, 2, {279,236}},
+{ 65856, 2, {294,224}},
+{ 65975, 2, {325,203}},
+{ 66000, 2, {264,250}},
+{ 66010, 2, {287,230}},
+{ 66045, 2, {259,255}},
+{ 66048, 2, {258,256}},
+{ 66096, 2, {272,243}},
+{ 66120, 2, {285,232}},
+{ 66125, 2, {529,125}},
+{ 66150, 2, {270,245}},
+{ 66216, 2, {267,248}},
+{ 66220, 2, {301,220}},
+{ 66240, 2, {276,240}},
+{ 66248, 2, {338,196}},
+{ 66300, 2, {260,255}},
+{ 66304, 2, {259,256}},
+{ 66339, 2, {273,243}},
+{ 66348, 2, {291,228}},
+{ 66360, 2, {280,237}},
+{ 66375, 2, {295,225}},
+{ 66495, 2, {341,195}},
+{ 66500, 2, {266,250}},
+{ 66560, 2, {260,256}},
+{ 66584, 2, {287,232}},
+{ 66600, 2, {296,225}},
+{ 66612, 2, {273,244}},
+{ 66640, 2, {272,245}},
+{ 66660, 2, {303,220}},
+{ 66690, 2, {270,247}},
+{ 66732, 2, {268,249}},
+{ 66744, 2, {309,216}},
+{ 66759, 2, {289,231}},
+{ 66780, 2, {265,252}},
+{ 66792, 2, {264,253}},
+{ 66816, 2, {261,256}},
+{ 66825, 2, {275,243}},
+{ 66912, 2, {272,246}},
+{ 66960, 2, {270,248}},
+{ 66976, 2, {299,224}},
+{ 67032, 2, {266,252}},
+{ 67068, 2, {276,243}},
+{ 67184, 2, {272,247}},
+{ 67200, 2, {280,240}},
+{ 67260, 2, {285,236}},
+{ 67275, 2, {299,225}},
+{ 67284, 2, {267,252}},
+{ 67298, 2, {266,253}},
+{ 67308, 2, {284,237}},
+{ 67320, 2, {264,255}},
+{ 67340, 2, {260,259}},
+{ 67392, 2, {288,234}},
+{ 67424, 2, {301,224}},
+{ 67431, 2, {273,247}},
+{ 67452, 2, {292,231}},
+{ 67473, 2, {357,189}},
+{ 67500, 2, {270,250}},
+{ 67512, 2, {291,232}},
+{ 67584, 2, {264,256}},
+{ 67599, 2, {261,259}},
+{ 67620, 2, {276,245}},
+{ 67626, 2, {289,234}},
+{ 67650, 2, {275,246}},
+{ 67680, 2, {282,240}},
+{ 67704, 2, {273,248}},
+{ 67710, 2, {305,222}},
+{ 67716, 2, {297,228}},
+{ 67725, 2, {301,225}},
+{ 67728, 2, {272,249}},
+{ 67760, 2, {280,242}},
+{ 67830, 2, {266,255}},
+{ 67840, 2, {265,256}},
+{ 67860, 2, {261,260}},
+{ 67872, 2, {303,224}},
+{ 67925, 2, {275,247}},
+{ 67980, 2, {309,220}},
+{ 68000, 2, {272,250}},
+{ 68076, 2, {279,244}},
+{ 68096, 2, {266,256}},
+{ 68103, 2, {329,207}},
+{ 68112, 2, {264,258}},
+{ 68200, 2, {275,248}},
+{ 68208, 2, {294,232}},
+{ 68229, 2, {361,189}},
+{ 68250, 2, {273,250}},
+{ 68256, 2, {288,237}},
+{ 68265, 2, {333,205}},
+{ 68310, 2, {270,253}},
+{ 68340, 2, {268,255}},
+{ 68352, 2, {267,256}},
+{ 68355, 2, {279,245}},
+{ 68370, 2, {265,258}},
+{ 68376, 2, {264,259}},
+{ 68400, 2, {285,240}},
+{ 68425, 2, {391,175}},
+{ 68432, 2, {329,208}},
+{ 68544, 2, {272,252}},
+{ 68600, 2, {280,245}},
+{ 68625, 2, {305,225}},
+{ 68640, 2, {264,260}},
+{ 68676, 2, {291,236}},
+{ 68688, 2, {318,216}},
+{ 68724, 2, {276,249}},
+{ 68796, 2, {273,252}},
+{ 68800, 2, {320,215}},
+{ 68816, 2, {272,253}},
+{ 68850, 2, {270,255}},
+{ 68880, 2, {280,246}},
+{ 68904, 2, {264,261}},
+{ 68952, 2, {312,221}},
+{ 68992, 2, {308,224}},
+{ 69000, 2, {276,250}},
+{ 69012, 2, {284,243}},
+{ 69030, 2, {295,234}},
+{ 69069, 2, {273,253}},
+{ 69084, 2, {303,228}},
+{ 69090, 2, {282,245}},
+{ 69120, 2, {270,256}},
+{ 69160, 2, {266,260}},
+{ 69165, 2, {265,261}},
+{ 69192, 2, {279,248}},
+{ 69204, 2, {292,237}},
+{ 69216, 2, {309,224}},
+{ 69230, 2, {301,230}},
+{ 69255, 2, {285,243}},
+{ 69264, 2, {296,234}},
+{ 69300, 2, {275,252}},
+{ 69336, 2, {321,216}},
+{ 69345, 2, {335,207}},
+{ 69360, 2, {272,255}},
+{ 69420, 2, {267,260}},
+{ 69498, 2, {286,243}},
+{ 69540, 2, {285,244}},
+{ 69560, 2, {296,235}},
+{ 69564, 2, {341,204}},
+{ 69575, 2, {275,253}},
+{ 69600, 2, {290,240}},
+{ 69720, 2, {280,249}},
+{ 69741, 2, {287,243}},
+{ 69795, 2, {297,235}},
+{ 69832, 2, {301,232}},
+{ 69840, 2, {291,240}},
+{ 69888, 2, {273,256}},
+{ 69920, 2, {304,230}},
+{ 69930, 2, {270,259}},
+{ 69936, 2, {282,248}},
+{ 69938, 2, {289,242}},
+{ 69948, 2, {268,261}},
+{ 69960, 2, {265,264}},
+{ 69966, 2, {299,234}},
+{ 69984, 2, {288,243}},
+{ 70035, 2, {345,203}},
+{ 70070, 2, {286,245}},
+{ 70092, 2, {297,236}},
+{ 70119, 2, {371,189}},
+{ 70152, 2, {296,237}},
+{ 70176, 2, {272,258}},
+{ 70200, 2, {270,260}},
+{ 70224, 2, {266,264}},
+{ 70227, 2, {289,243}},
+{ 70296, 2, {303,232}},
+{ 70308, 2, {279,252}},
+{ 70350, 2, {335,210}},
+{ 70380, 2, {276,255}},
+{ 70400, 2, {275,256}},
+{ 70448, 2, {272,259}},
+{ 70452, 2, {309,228}},
+{ 70488, 2, {267,264}},
+{ 70520, 2, {328,215}},
+{ 70525, 2, {325,217}},
+{ 70620, 2, {321,220}},
+{ 70642, 2, {286,247}},
+{ 70656, 2, {276,256}},
+{ 70680, 2, {285,248}},
+{ 70686, 2, {297,238}},
+{ 70716, 2, {284,249}},
+{ 70800, 2, {295,240}},
+{ 70805, 2, {289,245}},
+{ 70840, 2, {280,253}},
+{ 70848, 2, {288,246}},
+{ 70950, 2, {275,258}},
+{ 70956, 2, {292,243}},
+{ 70980, 2, {273,260}},
+{ 70992, 2, {272,261}},
+{ 71001, 2, {343,207}},
+{ 71004, 2, {291,244}},
+{ 71060, 2, {323,220}},
+{ 71100, 2, {300,237}},
+{ 71136, 2, {288,247}},
+{ 71148, 2, {294,242}},
+{ 71162, 2, {299,238}},
+{ 71176, 2, {287,248}},
+{ 71225, 2, {275,259}},
+{ 71232, 2, {318,224}},
+{ 71280, 2, {270,264}},
+{ 71344, 2, {343,208}},
+{ 71370, 2, {305,234}},
+{ 71400, 2, {280,255}},
+{ 71424, 2, {279,256}},
+{ 71440, 2, {304,235}},
+{ 71442, 2, {294,243}},
+{ 71484, 2, {276,259}},
+{ 71508, 2, {303,236}},
+{ 71550, 2, {270,265}},
+{ 71556, 2, {268,267}},
+{ 71595, 2, {333,215}},
+{ 71680, 2, {280,256}},
+{ 71685, 2, {295,243}},
+{ 71687, 2, {343,209}},
+{ 71688, 2, {309,232}},
+{ 71712, 2, {288,249}},
+{ 71750, 2, {287,250}},
+{ 71775, 2, {275,261}},
+{ 71820, 2, {270,266}},
+{ 71825, 2, {325,221}},
+{ 71904, 2, {321,224}},
+{ 71928, 2, {296,243}},
+{ 71940, 2, {327,220}},
+{ 71955, 2, {351,205}},
+{ 71995, 2, {385,187}},
+{ 72000, 2, {288,250}},
+{ 72036, 2, {276,261}},
+{ 72048, 2, {304,237}},
+{ 72072, 2, {273,264}},
+{ 72080, 2, {272,265}},
+{ 72105, 2, {285,253}},
+{ 72128, 2, {322,224}},
+{ 72150, 2, {325,222}},
+{ 72168, 2, {291,248}},
+{ 72192, 2, {282,256}},
+{ 72200, 2, {361,200}},
+{ 72240, 2, {280,258}},
+{ 72250, 2, {289,250}},
+{ 72261, 2, {279,259}},
+{ 72324, 2, {287,252}},
+{ 72352, 2, {272,266}},
+{ 72420, 2, {284,255}},
+{ 72468, 2, {297,244}},
+{ 72520, 2, {280,259}},
+{ 72540, 2, {279,260}},
+{ 72570, 2, {295,246}},
+{ 72576, 2, {288,252}},
+{ 72600, 2, {275,264}},
+{ 72624, 2, {272,267}},
+{ 72657, 2, {299,243}},
+{ 72708, 2, {292,249}},
+{ 72720, 2, {303,240}},
+{ 72732, 2, {319,228}},
+{ 72765, 2, {297,245}},
+{ 72816, 2, {296,246}},
+{ 72828, 2, {289,252}},
+{ 72912, 2, {294,248}},
+{ 72924, 2, {309,236}},
+{ 72960, 2, {285,256}},
+{ 72996, 2, {308,237}},
+{ 73080, 2, {280,261}},
+{ 73125, 2, {325,225}},
+{ 73140, 2, {276,265}},
+{ 73143, 2, {301,243}},
+{ 73150, 2, {275,266}},
+{ 73160, 2, {295,248}},
+{ 73164, 2, {273,268}},
+{ 73185, 2, {287,255}},
+{ 73188, 2, {321,228}},
+{ 73216, 2, {286,256}},
+{ 73248, 2, {327,224}},
+{ 73255, 2, {299,245}},
+{ 73332, 2, {291,252}},
+{ 73359, 2, {297,247}},
+{ 73440, 2, {272,270}},
+{ 73472, 2, {287,256}},
+{ 73500, 2, {294,250}},
+{ 73515, 2, {377,195}},
+{ 73600, 2, {320,230}},
+{ 73656, 2, {279,264}},
+{ 73689, 2, {319,231}},
+{ 73692, 2, {276,267}},
+{ 73696, 2, {329,224}},
+{ 73704, 2, {296,249}},
+{ 73710, 2, {273,270}},
+{ 73728, 2, {288,256}},
+{ 73776, 2, {318,232}},
+{ 73815, 2, {285,259}},
+{ 73872, 2, {304,243}},
+{ 73932, 2, {303,244}},
+{ 73935, 2, {279,265}},
+{ 73944, 2, {312,237}},
+{ 74025, 2, {315,235}},
+{ 74100, 2, {285,260}},
+{ 74115, 2, {305,243}},
+{ 74124, 2, {284,261}},
+{ 74160, 2, {309,240}},
+{ 74200, 2, {280,265}},
+{ 74240, 2, {290,256}},
+{ 74250, 2, {275,270}},
+{ 74256, 2, {273,272}},
+{ 74304, 2, {288,258}},
+{ 74340, 2, {295,252}},
+{ 74370, 2, {335,222}},
+{ 74382, 2, {294,253}},
+{ 74448, 2, {282,264}},
+{ 74460, 2, {292,255}},
+{ 74472, 2, {321,232}},
+{ 74480, 2, {280,266}},
+{ 74496, 2, {291,256}},
+{ 74556, 2, {327,228}},
+{ 74592, 2, {288,259}},
+{ 74613, 2, {323,231}},
+{ 74620, 2, {287,260}},
+{ 74648, 2, {301,248}},
+{ 74700, 2, {300,249}},
+{ 74730, 2, {282,265}},
+{ 74750, 2, {299,250}},
+{ 74760, 2, {280,267}},
+{ 74772, 2, {279,268}},
+{ 74784, 2, {304,246}},
+{ 74800, 2, {275,272}},
+{ 74844, 2, {297,252}},
+{ 74865, 2, {345,217}},
+{ 74880, 2, {288,260}},
+{ 74907, 2, {287,261}},
+{ 75030, 2, {305,246}},
+{ 75072, 2, {276,272}},
+{ 75075, 2, {275,273}},
+{ 75110, 2, {290,259}},
+{ 75140, 2, {289,260}},
+{ 75141, 2, {297,253}},
+{ 75144, 2, {303,248}},
+{ 75168, 2, {288,261}},
+{ 75200, 2, {320,235}},
+{ 75240, 2, {285,264}},
+{ 75250, 2, {301,250}},
+{ 75264, 2, {294,256}},
+{ 75348, 2, {276,273}},
+{ 75375, 2, {335,225}},
+{ 75396, 2, {309,244}},
+{ 75411, 2, {399,189}},
+{ 75465, 2, {351,215}},
+{ 75480, 2, {296,255}},
+{ 75504, 2, {286,264}},
+{ 75516, 2, {348,217}},
+{ 75520, 2, {295,256}},
+{ 75582, 2, {306,247}},
+{ 75600, 2, {280,270}},
+{ 75640, 2, {305,248}},
+{ 75660, 2, {291,260}},
+{ 75696, 2, {304,249}},
+{ 75712, 2, {338,224}},
+{ 75735, 2, {297,255}},
+{ 75756, 2, {321,236}},
+{ 75768, 2, {287,264}},
+{ 75803, 2, {343,221}},
+{ 75816, 2, {312,243}},
+{ 75828, 2, {284,267}},
+{ 75864, 2, {327,232}},
+{ 75888, 2, {279,272}},
+{ 75900, 2, {276,275}},
+{ 75922, 2, {319,238}},
+{ 75924, 2, {333,228}},
+{ 76000, 2, {304,250}},
+{ 76032, 2, {288,264}},
+{ 76050, 2, {325,234}},
+{ 76110, 2, {295,258}},
+{ 76125, 2, {375,203}},
+{ 76212, 2, {292,261}},
+{ 76230, 2, {315,242}},
+{ 76245, 2, {299,255}},
+{ 76296, 2, {289,264}},
+{ 76320, 2, {288,265}},
+{ 76328, 2, {329,232}},
+{ 76356, 2, {303,252}},
+{ 76368, 2, {296,258}},
+{ 76380, 2, {285,268}},
+{ 76440, 2, {280,273}},
+{ 76475, 2, {437,175}},
+{ 76500, 2, {300,255}},
+{ 76544, 2, {299,256}},
+{ 76545, 2, {315,243}},
+{ 76560, 2, {290,264}},
+{ 76608, 2, {288,266}},
+{ 76632, 2, {309,248}},
+{ 76692, 2, {308,249}},
+{ 76704, 2, {282,272}},
+{ 76725, 2, {279,275}},
+{ 76752, 2, {312,246}},
+{ 76755, 2, {301,255}},
+{ 76788, 2, {316,243}},
+{ 76797, 2, {371,207}},
+{ 76800, 2, {300,256}},
+{ 76824, 2, {291,264}},
+{ 76832, 2, {343,224}},
+{ 76860, 2, {305,252}},
+{ 76896, 2, {288,267}},
+{ 76912, 2, {304,253}},
+{ 76923, 2, {297,259}},
+{ 76950, 2, {285,270}},
+{ 76995, 2, {295,261}},
+{ 77000, 2, {280,275}},
+{ 77004, 2, {279,276}},
+{ 77040, 2, {321,240}},
+{ 77056, 2, {301,256}},
+{ 77064, 2, {312,247}},
+{ 77077, 2, {539,143}},
+{ 77080, 2, {328,235}},
+{ 77172, 2, {327,236}},
+{ 77175, 2, {315,245}},
+{ 77220, 2, {286,270}},
+{ 77256, 2, {296,261}},
+{ 77292, 2, {339,228}},
+{ 77350, 2, {325,238}},
+{ 77418, 2, {306,253}},
+{ 77440, 2, {320,242}},
+{ 77490, 2, {287,270}},
+{ 77520, 2, {285,272}},
+{ 77532, 2, {284,273}},
+{ 77550, 2, {282,275}},
+{ 77568, 2, {303,256}},
+{ 77571, 2, {351,221}},
+{ 77616, 2, {294,264}},
+{ 77688, 2, {312,249}},
+{ 77700, 2, {300,259}},
+{ 77740, 2, {299,260}},
+{ 77748, 2, {341,228}},
+{ 77760, 2, {288,270}},
+{ 77868, 2, {309,252}},
+{ 77880, 2, {295,264}},
+{ 77910, 2, {294,265}},
+{ 77924, 2, {308,253}},
+{ 77964, 2, {292,267}},
+{ 77988, 2, {291,268}},
+{ 78030, 2, {289,270}},
+{ 78057, 2, {413,189}},
+{ 78064, 2, {287,272}},
+{ 78080, 2, {305,256}},
+{ 78120, 2, {280,279}},
+{ 78155, 2, {319,245}},
+{ 78166, 2, {323,242}},
+{ 78246, 2, {322,243}},
+{ 78255, 2, {333,235}},
+{ 78260, 2, {301,260}},
+{ 78300, 2, {290,270}},
+{ 78324, 2, {321,244}},
+{ 78390, 2, {335,234}},
+{ 78408, 2, {297,264}},
+{ 78432, 2, {304,258}},
+{ 78440, 2, {296,265}},
+{ 78480, 2, {327,240}},
+{ 78489, 2, {323,243}},
+{ 78540, 2, {308,255}},
+{ 78561, 2, {301,261}},
+{ 78585, 2, {403,195}},
+{ 78588, 2, {333,236}},
+{ 78624, 2, {288,273}},
+{ 78648, 2, {339,232}},
+{ 78650, 2, {286,275}},
+{ 78660, 2, {285,276}},
+{ 78684, 2, {316,249}},
+{ 78690, 2, {305,258}},
+{ 78705, 2, {297,265}},
+{ 78720, 2, {320,246}},
+{ 78771, 2, {341,231}},
+{ 78780, 2, {303,260}},
+{ 78810, 2, {355,222}},
+{ 78848, 2, {308,256}},
+{ 78864, 2, {318,248}},
+{ 78880, 2, {290,272}},
+{ 78897, 2, {289,273}},
+{ 78925, 2, {287,275}},
+{ 78960, 2, {282,280}},
+{ 78975, 2, {325,243}},
+{ 79002, 2, {297,266}},
+{ 79032, 2, {296,267}},
+{ 79104, 2, {309,256}},
+{ 79135, 2, {323,245}},
+{ 79152, 2, {291,272}},
+{ 79200, 2, {288,275}},
+{ 79212, 2, {287,276}},
+{ 79236, 2, {284,279}},
+{ 79254, 2, {306,259}},
+{ 79335, 2, {369,215}},
+{ 79344, 2, {304,261}},
+{ 79360, 2, {310,256}},
+{ 79365, 2, {407,195}},
+{ 79380, 2, {294,270}},
+{ 79420, 2, {361,220}},
+{ 79464, 2, {301,264}},
+{ 79475, 2, {289,275}},
+{ 79488, 2, {288,276}},
+{ 79500, 2, {300,265}},
+{ 79534, 2, {299,266}},
+{ 79576, 2, {343,232}},
+{ 79596, 2, {297,268}},
+{ 79605, 2, {305,261}},
+{ 79608, 2, {321,248}},
+{ 79650, 2, {295,270}},
+{ 79680, 2, {320,249}},
+{ 79695, 2, {315,253}},
+{ 79716, 2, {292,273}},
+{ 79788, 2, {327,244}},
+{ 79800, 2, {285,280}},
+{ 79872, 2, {312,256}},
+{ 79875, 2, {355,225}},
+{ 79920, 2, {296,270}},
+{ 79947, 2, {329,243}},
+{ 79950, 2, {325,246}},
+{ 79968, 2, {294,272}},
+{ 79992, 2, {303,264}},
+{ 80000, 2, {320,250}},
+{ 80004, 2, {339,236}},
+{ 80028, 2, {324,247}},
+{ 80040, 2, {290,276}},
+{ 80073, 2, {287,279}},
+{ 80080, 2, {286,280}},
+{ 80100, 2, {300,267}},
+{ 80223, 2, {363,221}},
+{ 80240, 2, {295,272}},
+{ 80275, 2, {325,247}},
+{ 80290, 2, {310,259}},
+{ 80316, 2, {291,276}},
+{ 80340, 2, {309,260}},
+{ 80352, 2, {288,279}},
+{ 80360, 2, {287,280}},
+{ 80388, 2, {308,261}},
+{ 80465, 2, {385,209}},
+{ 80496, 2, {312,258}},
+{ 80500, 2, {322,250}},
+{ 80520, 2, {305,264}},
+{ 80560, 2, {304,265}},
+{ 80580, 2, {316,255}},
+{ 80640, 2, {288,280}},
+{ 80676, 2, {324,249}},
+{ 80703, 2, {427,189}},
+{ 80730, 2, {299,270}},
+{ 80750, 2, {323,250}},
+{ 80784, 2, {297,272}},
+{ 80808, 2, {296,273}},
+{ 80840, 2, {344,235}},
+{ 80850, 2, {294,275}},
+{ 80892, 2, {321,252}},
+{ 80920, 2, {289,280}},
+{ 80940, 2, {285,284}},
+{ 80960, 2, {320,253}},
+{ 81030, 2, {365,222}},
+{ 81081, 2, {297,273}},
+{ 81090, 2, {306,265}},
+{ 81096, 2, {327,248}},
+{ 81158, 2, {341,238}},
+{ 81168, 2, {304,267}},
+{ 81204, 2, {303,268}},
+{ 81216, 2, {288,282}},
+{ 81252, 2, {333,244}},
+{ 81270, 2, {301,270}},
+{ 81328, 2, {299,272}},
+{ 81345, 2, {319,255}},
+{ 81360, 2, {339,240}},
+{ 81375, 2, {375,217}},
+{ 81396, 2, {306,266}},
+{ 81400, 2, {296,275}},
+{ 81405, 2, {335,243}},
+{ 81408, 2, {318,256}},
+{ 81420, 2, {295,276}},
+{ 81432, 2, {312,261}},
+{ 81468, 2, {292,279}},
+{ 81480, 2, {291,280}},
+{ 81536, 2, {364,224}},
+{ 81576, 2, {309,264}},
+{ 81585, 2, {315,259}},
+{ 81592, 2, {329,248}},
+{ 81600, 2, {300,272}},
+{ 81627, 2, {299,273}},
+{ 81664, 2, {319,256}},
+{ 81672, 2, {328,249}},
+{ 81675, 2, {297,275}},
+{ 81795, 2, {287,285}},
+{ 81840, 2, {310,264}},
+{ 81872, 2, {301,272}},
+{ 81900, 2, {300,273}},
+{ 81972, 2, {297,276}},
+{ 82080, 2, {288,285}},
+{ 82110, 2, {322,255}},
+{ 82125, 2, {365,225}},
+{ 82134, 2, {338,243}},
+{ 82176, 2, {321,256}},
+{ 82225, 2, {299,275}},
+{ 82236, 2, {308,267}},
+{ 82250, 2, {329,250}},
+{ 82305, 2, {295,279}},
+{ 82320, 2, {294,280}},
+{ 82350, 2, {305,270}},
+{ 82368, 2, {288,286}},
+{ 82404, 2, {327,252}},
+{ 82410, 2, {335,246}},
+{ 82416, 2, {303,272}},
+{ 82432, 2, {322,256}},
+{ 82476, 2, {316,261}},
+{ 82485, 2, {351,235}},
+{ 82500, 2, {300,275}},
+{ 82560, 2, {320,258}},
+{ 82584, 2, {296,279}},
+{ 82600, 2, {295,280}},
+{ 82644, 2, {291,284}},
+{ 82654, 2, {289,286}},
+{ 82656, 2, {288,287}},
+{ 82680, 2, {312,265}},
+{ 82716, 2, {339,244}},
+{ 82720, 2, {352,235}},
+{ 82775, 2, {301,275}},
+{ 82810, 2, {338,245}},
+{ 82812, 2, {309,268}},
+{ 82836, 2, {351,236}},
+{ 82960, 2, {305,272}},
+{ 82992, 2, {304,273}},
+{ 83006, 2, {343,242}},
+{ 83070, 2, {355,234}},
+{ 83076, 2, {301,276}},
+{ 83104, 2, {371,224}},
+{ 83160, 2, {297,280}},
+{ 83190, 2, {295,282}},
+{ 83200, 2, {320,260}},
+{ 83220, 2, {292,285}},
+{ 83230, 2, {290,287}},
+{ 83232, 2, {289,288}},
+{ 83304, 2, {312,267}},
+{ 83349, 2, {343,243}},
+{ 83391, 2, {361,231}},
+{ 83460, 2, {321,260}},
+{ 83472, 2, {296,282}},
+{ 83475, 2, {315,265}},
+{ 83490, 2, {330,253}},
+{ 83520, 2, {290,288}},
+{ 83545, 2, {341,245}},
+{ 83600, 2, {304,275}},
+{ 83628, 2, {303,276}},
+{ 83640, 2, {328,255}},
+{ 83700, 2, {300,279}},
+{ 83712, 2, {327,256}},
+{ 83720, 2, {299,280}},
+{ 83808, 2, {291,288}},
+{ 83835, 2, {345,243}},
+{ 83850, 2, {325,258}},
+{ 83895, 2, {329,255}},
+{ 83904, 2, {304,276}},
+{ 83916, 2, {324,259}},
+{ 83952, 2, {318,264}},
+{ 83979, 2, {301,279}},
+{ 83980, 2, {323,260}},
+{ 84048, 2, {309,272}},
+{ 84072, 2, {339,248}},
+{ 84084, 2, {294,286}},
+{ 84150, 2, {306,275}},
+{ 84175, 2, {325,259}},
+{ 84180, 2, {305,276}},
+{ 84216, 2, {319,264}},
+{ 84224, 2, {329,256}},
+{ 84240, 2, {312,270}},
+{ 84280, 2, {301,280}},
+{ 84320, 2, {310,272}},
+{ 84348, 2, {297,284}},
+{ 84360, 2, {296,285}},
+{ 84372, 2, {316,267}},
+{ 84420, 2, {315,268}},
+{ 84480, 2, {320,264}},
+{ 84564, 2, {324,261}},
+{ 84624, 2, {328,258}},
+{ 84645, 2, {297,285}},
+{ 84660, 2, {332,255}},
+{ 84672, 2, {294,288}},
+{ 84721, 2, {343,247}},
+{ 84744, 2, {321,264}},
+{ 84800, 2, {320,265}},
+{ 84816, 2, {304,279}},
+{ 84825, 2, {325,261}},
+{ 84840, 2, {303,280}},
+{ 84854, 2, {319,266}},
+{ 84942, 2, {297,286}},
+{ 84952, 2, {296,287}},
+{ 84960, 2, {295,288}},
+{ 84966, 2, {294,289}},
+{ 84972, 2, {292,291}},
+{ 85020, 2, {327,260}},
+{ 85050, 2, {315,270}},
+{ 85064, 2, {343,248}},
+{ 85085, 2, {385,221}},
+{ 85095, 2, {305,279}},
+{ 85176, 2, {312,273}},
+{ 85215, 2, {299,285}},
+{ 85239, 2, {297,287}},
+{ 85272, 2, {323,264}},
+{ 85284, 2, {309,276}},
+{ 85400, 2, {305,280}},
+{ 85410, 2, {365,234}},
+{ 85428, 2, {339,252}},
+{ 85440, 2, {320,267}},
+{ 85470, 2, {330,259}},
+{ 85491, 2, {413,207}},
+{ 85500, 2, {300,285}},
+{ 85514, 2, {299,286}},
+{ 85536, 2, {297,288}},
+{ 85540, 2, {329,260}},
+{ 85560, 2, {310,276}},
+{ 85608, 2, {328,261}},
+{ 85644, 2, {351,244}},
+{ 85680, 2, {306,280}},
+{ 85728, 2, {304,282}},
+{ 85750, 2, {343,250}},
+{ 85785, 2, {301,285}},
+{ 85800, 2, {300,286}},
+{ 85833, 2, {297,289}},
+{ 85869, 2, {329,261}},
+{ 85932, 2, {308,279}},
+{ 85995, 2, {315,273}},
+{ 86010, 2, {305,282}},
+{ 86016, 2, {336,256}},
+{ 86020, 2, {340,253}},
+{ 86028, 2, {321,268}},
+{ 86052, 2, {303,284}},
+{ 86072, 2, {371,232}},
+{ 86100, 2, {300,287}},
+{ 86112, 2, {299,288}},
+{ 86130, 2, {297,290}},
+{ 86136, 2, {296,291}},
+{ 86184, 2, {324,266}},
+{ 86240, 2, {308,280}},
+{ 86265, 2, {355,243}},
+{ 86268, 2, {316,273}},
+{ 86275, 2, {425,203}},
+{ 86328, 2, {327,264}},
+{ 86400, 2, {300,288}},
+{ 86430, 2, {335,258}},
+{ 86450, 2, {325,266}},
+{ 86480, 2, {368,235}},
+{ 86496, 2, {318,272}},
+{ 86508, 2, {324,267}},
+{ 86520, 2, {309,280}},
+{ 86526, 2, {342,253}},
+{ 86528, 2, {338,256}},
+{ 86580, 2, {333,260}},
+{ 86625, 2, {315,275}},
+{ 86640, 2, {304,285}},
+{ 86652, 2, {332,261}},
+{ 86688, 2, {301,288}},
+{ 86697, 2, {351,247}},
+{ 86700, 2, {300,289}},
+{ 86715, 2, {369,235}},
+{ 86724, 2, {297,292}},
+{ 86730, 2, {295,294}},
+{ 86751, 2, {357,243}},
+{ 86768, 2, {319,272}},
+{ 86779, 2, {343,253}},
+{ 86784, 2, {339,256}},
+{ 86920, 2, {328,265}},
+{ 86940, 2, {315,276}},
+{ 86955, 2, {341,255}},
+{ 87000, 2, {300,290}},
+{ 87024, 2, {296,294}},
+{ 87048, 2, {312,279}},
+{ 87087, 2, {319,273}},
+{ 87108, 2, {357,244}},
+{ 87120, 2, {330,264}},
+{ 87210, 2, {306,285}},
+{ 87248, 2, {304,287}},
+{ 87264, 2, {303,288}},
+{ 87290, 2, {301,290}},
+{ 87296, 2, {341,256}},
+{ 87300, 2, {300,291}},
+{ 87312, 2, {321,272}},
+{ 87320, 2, {296,295}},
+{ 87330, 2, {355,246}},
+{ 87362, 2, {361,242}},
+{ 87435, 2, {335,261}},
+{ 87450, 2, {318,275}},
+{ 87465, 2, {343,255}},
+{ 87576, 2, {328,267}},
+{ 87584, 2, {322,272}},
+{ 87615, 2, {297,295}},
+{ 87636, 2, {327,268}},
+{ 87696, 2, {336,261}},
+{ 87723, 2, {361,243}},
+{ 87725, 2, {319,275}},
+{ 87750, 2, {325,270}},
+{ 87756, 2, {309,284}},
+{ 87780, 2, {308,285}},
+{ 87792, 2, {354,248}},
+{ 87808, 2, {343,256}},
+{ 87822, 2, {306,287}},
+{ 87840, 2, {305,288}},
+{ 87906, 2, {299,294}},
+{ 87912, 2, {297,296}},
+{ 87984, 2, {312,282}},
+{ 88000, 2, {320,275}},
+{ 88044, 2, {319,276}},
+{ 88060, 2, {340,259}},
+{ 88088, 2, {308,286}},
+{ 88128, 2, {306,288}},
+{ 88140, 2, {339,260}},
+{ 88160, 2, {304,290}},
+{ 88164, 2, {316,279}},
+{ 88179, 2, {323,273}},
+{ 88200, 2, {300,294}},
+{ 88245, 2, {333,265}},
+{ 88320, 2, {320,276}},
+{ 88389, 2, {427,207}},
+{ 88400, 2, {325,272}},
+{ 88445, 2, {361,245}},
+{ 88452, 2, {324,273}},
+{ 88464, 2, {304,291}},
+{ 88476, 2, {303,292}},
+{ 88500, 2, {300,295}},
+{ 88536, 2, {357,248}},
+{ 88550, 2, {322,275}},
+{ 88560, 2, {328,270}},
+{ 88572, 2, {363,244}},
+{ 88596, 2, {321,276}},
+{ 88644, 2, {332,267}},
+{ 88695, 2, {365,243}},
+{ 88704, 2, {308,288}},
+{ 88740, 2, {306,290}},
+{ 88803, 2, {299,297}},
+{ 88825, 2, {323,275}},
+{ 88920, 2, {312,285}},
+{ 88935, 2, {363,245}},
+{ 88944, 2, {327,272}},
+{ 88970, 2, {310,287}},
+{ 88992, 2, {309,288}},
+{ 89012, 2, {308,289}},
+{ 89040, 2, {318,280}},
+{ 89056, 2, {352,253}},
+{ 89088, 2, {348,256}},
+{ 89096, 2, {301,296}},
+{ 89100, 2, {300,297}},
+{ 89180, 2, {343,260}},
+{ 89244, 2, {333,268}},
+{ 89280, 2, {310,288}},
+{ 89355, 2, {345,259}},
+{ 89376, 2, {304,294}},
+{ 89397, 2, {301,297}},
+{ 89460, 2, {315,284}},
+{ 89488, 2, {329,272}},
+{ 89496, 2, {339,264}},
+{ 89505, 2, {351,255}},
+{ 89523, 2, {343,261}},
+{ 89544, 2, {312,287}},
+{ 89600, 2, {320,280}},
+{ 89628, 2, {308,291}},
+{ 89661, 2, {363,247}},
+{ 89670, 2, {305,294}},
+{ 89680, 2, {304,295}},
+{ 89688, 2, {303,296}},
+{ 89700, 2, {300,299}},
+{ 89712, 2, {336,267}},
+{ 89726, 2, {377,238}},
+{ 89760, 2, {330,272}},
+{ 89784, 2, {344,261}},
+{ 89790, 2, {365,246}},
+{ 89856, 2, {312,288}},
+{ 89880, 2, {321,280}},
+{ 90024, 2, {341,264}},
+{ 90060, 2, {316,285}},
+{ 90090, 2, {315,286}},
+{ 90132, 2, {348,259}},
+{ 90153, 2, {371,243}},
+{ 90160, 2, {322,280}},
+{ 90168, 2, {312,289}},
+{ 90200, 2, {328,275}},
+{ 90228, 2, {309,292}},
+{ 90240, 2, {320,282}},
+{ 90250, 2, {361,250}},
+{ 90252, 2, {327,276}},
+{ 90270, 2, {306,295}},
+{ 90280, 2, {305,296}},
+{ 90288, 2, {304,297}},
+{ 90300, 2, {301,300}},
+{ 90321, 2, {357,253}},
+{ 90396, 2, {324,279}},
+{ 90405, 2, {315,287}},
+{ 90440, 2, {323,280}},
+{ 90450, 2, {335,270}},
+{ 90475, 2, {329,275}},
+{ 90480, 2, {312,290}},
+{ 90576, 2, {306,296}},
+{ 90585, 2, {305,297}},
+{ 90624, 2, {354,256}},
+{ 90636, 2, {332,273}},
+{ 90650, 2, {350,259}},
+{ 90675, 2, {325,279}},
+{ 90706, 2, {341,266}},
+{ 90720, 2, {315,288}},
+{ 90768, 2, {366,248}},
+{ 90780, 2, {340,267}},
+{ 90792, 2, {312,291}},
+{ 90852, 2, {339,268}},
+{ 90896, 2, {304,299}},
+{ 90900, 2, {303,300}},
+{ 90915, 2, {319,285}},
+{ 90945, 2, {387,235}},
+{ 91000, 2, {325,280}},
+{ 91035, 2, {315,289}},
+{ 91091, 2, {539,169}},
+{ 91120, 2, {335,272}},
+{ 91125, 2, {375,243}},
+{ 91160, 2, {344,265}},
+{ 91164, 2, {321,284}},
+{ 91200, 2, {304,300}},
+{ 91260, 2, {338,270}},
+{ 91464, 2, {309,296}},
+{ 91476, 2, {308,297}},
+{ 91494, 2, {306,299}},
+{ 91500, 2, {305,300}},
+{ 91504, 2, {304,301}},
+{ 91512, 2, {328,279}},
+{ 91520, 2, {320,286}},
+{ 91560, 2, {327,280}},
+{ 91575, 2, {333,275}},
+{ 91584, 2, {318,288}},
+{ 91590, 2, {355,258}},
+{ 91630, 2, {374,245}},
+{ 91650, 2, {325,282}},
+{ 91728, 2, {312,294}},
+{ 91770, 2, {322,285}},
+{ 91791, 2, {329,279}},
+{ 91840, 2, {320,287}},
+{ 91848, 2, {344,267}},
+{ 91872, 2, {319,288}},
+{ 91875, 2, {375,245}},
+{ 91908, 2, {333,276}},
+{ 91956, 2, {316,291}},
+{ 91980, 2, {315,292}},
+{ 92000, 2, {368,250}},
+{ 92008, 2, {371,248}},
+{ 92040, 2, {312,295}},
+{ 92070, 2, {310,297}},
+{ 92092, 2, {308,299}},
+{ 92106, 2, {306,301}},
+{ 92112, 2, {304,303}},
+{ 92120, 2, {329,280}},
+{ 92208, 2, {339,272}},
+{ 92225, 2, {425,217}},
+{ 92340, 2, {324,285}},
+{ 92365, 2, {377,245}},
+{ 92378, 2, {323,286}},
+{ 92400, 2, {308,300}},
+{ 92448, 2, {321,288}},
+{ 92460, 2, {335,276}},
+{ 92480, 2, {320,289}},
+{ 92496, 2, {328,282}},
+{ 92575, 2, {529,175}},
+{ 92628, 2, {332,279}},
+{ 92655, 2, {355,261}},
+{ 92664, 2, {312,297}},
+{ 92700, 2, {309,300}},
+{ 92720, 2, {305,304}},
+{ 92736, 2, {322,288}},
+{ 92752, 2, {341,272}},
+{ 92796, 2, {407,228}},
+{ 92800, 2, {320,290}},
+{ 92820, 2, {340,273}},
+{ 92868, 2, {327,284}},
+{ 92880, 2, {344,270}},
+{ 92916, 2, {348,267}},
+{ 92925, 2, {315,295}},
+{ 92988, 2, {324,287}},
+{ 93000, 2, {310,300}},
+{ 93015, 2, {351,265}},
+{ 93024, 2, {306,304}},
+{ 93093, 2, {341,273}},
+{ 93100, 2, {350,266}},
+{ 93120, 2, {320,291}},
+{ 93150, 2, {345,270}},
+{ 93184, 2, {364,256}},
+{ 93240, 2, {315,296}},
+{ 93275, 2, {325,287}},
+{ 93280, 2, {352,265}},
+{ 93288, 2, {312,299}},
+{ 93296, 2, {343,272}},
+{ 93310, 2, {310,301}},
+{ 93312, 2, {324,288}},
+{ 93324, 2, {308,303}},
+{ 93330, 2, {306,305}},
+{ 93456, 2, {354,264}},
+{ 93465, 2, {335,279}},
+{ 93480, 2, {328,285}},
+{ 93564, 2, {339,276}},
+{ 93696, 2, {366,256}},
+{ 93732, 2, {321,292}},
+{ 93744, 2, {336,279}},
+{ 93765, 2, {329,285}},
+{ 93775, 2, {341,275}},
+{ 93786, 2, {319,294}},
+{ 93795, 2, {481,195}},
+{ 93800, 2, {335,280}},
+{ 93810, 2, {318,295}},
+{ 93852, 2, {316,297}},
+{ 93860, 2, {361,260}},
+{ 93912, 2, {312,301}},
+{ 93925, 2, {325,289}},
+{ 93936, 2, {309,304}},
+{ 93960, 2, {324,290}},
+{ 93984, 2, {352,267}},
+{ 94068, 2, {351,268}},
+{ 94080, 2, {320,294}},
+{ 94116, 2, {341,276}},
+{ 94128, 2, {318,296}},
+{ 94170, 2, {365,258}},
+{ 94176, 2, {327,288}},
+{ 94185, 2, {315,299}},
+{ 94240, 2, {310,304}},
+{ 94284, 2, {324,291}},
+{ 94325, 2, {343,275}},
+{ 94380, 2, {330,286}},
+{ 94395, 2, {435,217}},
+{ 94400, 2, {320,295}},
+{ 94470, 2, {335,282}},
+{ 94500, 2, {315,300}},
+{ 94536, 2, {312,303}},
+{ 94572, 2, {333,284}},
+{ 94600, 2, {344,275}},
+{ 94620, 2, {332,285}},
+{ 94640, 2, {338,280}},
+{ 94656, 2, {348,272}},
+{ 94710, 2, {330,287}},
+{ 94743, 2, {319,297}},
+{ 94752, 2, {329,288}},
+{ 94809, 2, {429,221}},
+{ 94815, 2, {315,301}},
+{ 94860, 2, {310,306}},
+{ 94920, 2, {339,280}},
+{ 94962, 2, {323,294}},
+{ 94976, 2, {371,256}},
+{ 95004, 2, {348,273}},
+{ 95013, 2, {391,243}},
+{ 95016, 2, {321,296}},
+{ 95040, 2, {320,297}},
+{ 95095, 2, {385,247}},
+{ 95160, 2, {312,305}},
+{ 95172, 2, {309,308}},
+{ 95175, 2, {405,235}},
+{ 95220, 2, {345,276}},
+{ 95232, 2, {372,256}},
+{ 95256, 2, {324,294}},
+{ 95265, 2, {365,261}},
+{ 95304, 2, {361,264}},
+{ 95370, 2, {330,289}},
+{ 95410, 2, {329,290}},
+{ 95448, 2, {328,291}},
+{ 95472, 2, {312,306}},
+{ 95484, 2, {327,292}},
+{ 95550, 2, {325,294}},
+{ 95571, 2, {333,287}},
+{ 95580, 2, {324,295}},
+{ 95634, 2, {322,297}},
+{ 95676, 2, {357,268}},
+{ 95680, 2, {320,299}},
+{ 95697, 2, {343,279}},
+{ 95700, 2, {319,300}},
+{ 95748, 2, {316,303}},
+{ 95760, 2, {315,304}},
+{ 95795, 2, {391,245}},
+{ 95832, 2, {363,264}},
+{ 95850, 2, {355,270}},
+{ 95914, 2, {403,238}},
+{ 95931, 2, {323,297}},
+{ 95940, 2, {369,260}},
+{ 95976, 2, {344,279}},
+{ 95985, 2, {395,243}},
+{ 96000, 2, {320,300}},
+{ 96040, 2, {343,280}},
+{ 96075, 2, {315,305}},
+{ 96135, 2, {377,255}},
+{ 96140, 2, {380,253}},
+{ 96200, 2, {325,296}},
+{ 96228, 2, {324,297}},
+{ 96276, 2, {339,284}},
+{ 96288, 2, {354,272}},
+{ 96300, 2, {321,300}},
+{ 96320, 2, {320,301}},
+{ 96348, 2, {372,259}},
+{ 96408, 2, {312,309}},
+{ 96425, 2, {475,203}},
+{ 96432, 2, {328,294}},
+{ 96480, 2, {335,288}},
+{ 96512, 2, {377,256}},
+{ 96525, 2, {325,297}},
+{ 96600, 2, {322,300}},
+{ 96612, 2, {332,291}},
+{ 96624, 2, {366,264}},
+{ 96672, 2, {318,304}},
+{ 96720, 2, {312,310}},
+{ 96760, 2, {328,295}},
+{ 96792, 2, {327,296}},
+{ 96800, 2, {352,275}},
+{ 96831, 2, {371,261}},
+{ 96876, 2, {324,299}},
+{ 96900, 2, {323,300}},
+{ 96957, 2, {399,243}},
+{ 96960, 2, {320,303}},
+{ 96976, 2, {319,304}},
+{ 96990, 2, {318,305}},
+{ 97008, 2, {344,282}},
+{ 97020, 2, {315,308}},
+{ 97083, 2, {469,207}},
+{ 97092, 2, {348,279}},
+{ 97104, 2, {336,289}},
+{ 97125, 2, {375,259}},
+{ 97152, 2, {352,276}},
+{ 97170, 2, {395,246}},
+{ 97175, 2, {325,299}},
+{ 97185, 2, {341,285}},
+{ 97188, 2, {356,273}},
+{ 97200, 2, {324,300}},
+{ 97236, 2, {333,292}},
+{ 97284, 2, {363,268}},
+{ 97350, 2, {330,295}},
+{ 97384, 2, {329,296}},
+{ 97405, 2, {385,253}},
+{ 97416, 2, {328,297}},
+{ 97440, 2, {336,290}},
+{ 97500, 2, {325,300}},
+{ 97520, 2, {368,265}},
+{ 97524, 2, {324,301}},
+{ 97536, 2, {381,256}},
+{ 97580, 2, {340,287}},
+{ 97584, 2, {321,304}},
+{ 97600, 2, {320,305}},
+{ 97614, 2, {319,306}},
+{ 97632, 2, {339,288}},
+{ 97644, 2, {316,309}},
+{ 97680, 2, {330,296}},
+{ 97682, 2, {338,289}},
+{ 97713, 2, {329,297}},
+{ 97750, 2, {391,250}},
+{ 97755, 2, {343,285}},
+{ 97776, 2, {336,291}},
+{ 97785, 2, {369,265}},
+{ 97825, 2, {325,301}},
+{ 97888, 2, {322,304}},
+{ 97920, 2, {320,306}},
+{ 97980, 2, {345,284}},
+{ 98040, 2, {344,285}},
+{ 98098, 2, {343,286}},
+{ 98100, 2, {327,300}},
+{ 98154, 2, {342,287}},
+{ 98172, 2, {324,303}},
+{ 98175, 2, {357,275}},
+{ 98208, 2, {341,288}},
+{ 98235, 2, {333,295}},
+{ 98252, 2, {319,308}},
+{ 98280, 2, {315,312}},
+{ 98490, 2, {335,294}},
+{ 98496, 2, {324,304}},
+{ 98532, 2, {322,306}},
+{ 98550, 2, {365,270}},
+{ 98553, 2, {361,273}},
+{ 98560, 2, {320,308}},
+{ 98568, 2, {333,296}},
+{ 98604, 2, {332,297}},
+{ 98670, 2, {330,299}},
+{ 98700, 2, {329,300}},
+{ 98728, 2, {328,301}},
+{ 98735, 2, {403,245}},
+{ 98736, 2, {363,272}},
+{ 98784, 2, {336,294}},
+{ 98800, 2, {325,304}},
+{ 98820, 2, {324,305}},
+{ 98838, 2, {323,306}},
+{ 98868, 2, {321,308}},
+{ 98880, 2, {320,309}},
+{ 98892, 2, {369,268}},
+{ 98940, 2, {340,291}},
+{ 98988, 2, {339,292}},
+{ 99015, 2, {345,287}},
+{ 99045, 2, {355,279}},
+{ 99060, 2, {381,260}},
+{ 99120, 2, {336,295}},
+{ 99127, 2, {343,289}},
+{ 99160, 2, {335,296}},
+{ 99180, 2, {342,290}},
+{ 99200, 2, {320,310}},
+{ 99216, 2, {318,312}},
+{ 99264, 2, {352,282}},
+{ 99275, 2, {361,275}},
+{ 99324, 2, {356,279}},
+{ 99330, 2, {330,301}},
+{ 99360, 2, {345,288}},
+{ 99372, 2, {338,294}},
+{ 99384, 2, {328,303}},
+{ 99408, 2, {327,304}},
+{ 99450, 2, {325,306}},
+{ 99470, 2, {343,290}},
+{ 99484, 2, {323,308}},
+{ 99495, 2, {335,297}},
+{ 99528, 2, {319,312}},
+{ 99540, 2, {316,315}},
+{ 99552, 2, {366,272}},
+{ 99640, 2, {376,265}},
+{ 99684, 2, {351,284}},
+{ 99792, 2, {324,308}},
+{ 99840, 2, {320,312}},
+{ 99876, 2, {348,287}},
+{ 99900, 2, {333,300}},
+{ 100016, 2, {329,304}},
+{ 100035, 2, {351,285}},
+{ 100040, 2, {328,305}},
+{ 100104, 2, {344,291}},
+{ 100110, 2, {355,282}},
+{ 100116, 2, {324,309}},
+{ 100152, 2, {321,312}},
+{ 100188, 2, {363,276}},
+{ 100224, 2, {348,288}},
+{ 100233, 2, {333,301}},
+{ 100254, 2, {341,294}},
+{ 100282, 2, {377,266}},
+{ 100320, 2, {330,304}},
+{ 100344, 2, {339,296}},
+{ 100352, 2, {392,256}},
+{ 100359, 2, {413,243}},
+{ 100368, 2, {328,306}},
+{ 100386, 2, {338,297}},
+{ 100440, 2, {324,310}},
+{ 100450, 2, {350,287}},
+{ 100464, 2, {322,312}},
+{ 100485, 2, {319,315}},
+{ 100500, 2, {335,300}},
+{ 100555, 2, {455,221}},
+{ 100584, 2, {381,264}},
+{ 100596, 2, {332,303}},
+{ 100620, 2, {387,260}},
+{ 100650, 2, {330,305}},
+{ 100672, 2, {352,286}},
+{ 100674, 2, {329,306}},
+{ 100716, 2, {327,308}},
+{ 100737, 2, {351,287}},
+{ 100740, 2, {345,292}},
+{ 100776, 2, {323,312}},
+{ 100793, 2, {539,187}},
+{ 100800, 2, {320,315}},
+{ 100890, 2, {342,295}},
+{ 100912, 2, {371,272}},
+{ 100947, 2, {399,253}},
+{ 101080, 2, {361,280}},
+{ 101136, 2, {336,301}},
+{ 101150, 2, {350,289}},
+{ 101184, 2, {372,272}},
+{ 101200, 2, {368,275}},
+{ 101232, 2, {333,304}},
+{ 101250, 2, {375,270}},
+{ 101268, 2, {348,291}},
+{ 101277, 2, {341,297}},
+{ 101352, 2, {328,309}},
+{ 101388, 2, {357,284}},
+{ 101400, 2, {325,312}},
+{ 101430, 2, {322,315}},
+{ 101436, 2, {321,316}},
+{ 101439, 2, {351,289}},
+{ 101460, 2, {356,285}},
+{ 101475, 2, {369,275}},
+{ 101480, 2, {344,295}},
+{ 101520, 2, {360,282}},
+{ 101528, 2, {343,296}},
+{ 101556, 2, {364,279}},
+{ 101565, 2, {333,305}},
+{ 101660, 2, {340,299}},
+{ 101700, 2, {339,300}},
+{ 101728, 2, {352,289}},
+{ 101745, 2, {323,315}},
+{ 101760, 2, {320,318}},
+{ 101790, 2, {351,290}},
+{ 101808, 2, {336,303}},
+{ 101835, 2, {365,279}},
+{ 101840, 2, {335,304}},
+{ 101844, 2, {369,276}},
+{ 101871, 2, {343,297}},
+{ 101910, 2, {395,258}},
+{ 101920, 2, {364,280}},
+{ 101952, 2, {354,288}},
+{ 101990, 2, {329,310}},
+{ 102024, 2, {327,312}},
+{ 102025, 2, {371,275}},
+{ 102060, 2, {324,315}},
+{ 102080, 2, {320,319}},
+{ 102108, 2, {381,268}},
+{ 102120, 2, {345,296}},
+{ 102168, 2, {344,297}},
+{ 102240, 2, {355,288}},
+{ 102245, 2, {605,169}},
+{ 102258, 2, {342,299}},
+{ 102340, 2, {340,301}},
+{ 102375, 2, {325,315}},
+{ 102424, 2, {413,248}},
+{ 102432, 2, {352,291}},
+{ 102465, 2, {345,297}},
+{ 102480, 2, {336,305}},
+{ 102492, 2, {351,292}},
+{ 102510, 2, {335,306}},
+{ 102544, 2, {377,272}},
+{ 102555, 2, {387,265}},
+{ 102557, 2, {343,299}},
+{ 102564, 2, {333,308}},
+{ 102588, 2, {332,309}},
+{ 102648, 2, {329,312}},
+{ 102660, 2, {348,295}},
+{ 102672, 2, {368,279}},
+{ 102718, 2, {322,319}},
+{ 102720, 2, {321,320}},
+{ 102765, 2, {403,255}},
+{ 102816, 2, {336,306}},
+{ 102850, 2, {374,275}},
+{ 102900, 2, {343,300}},
+{ 102921, 2, {377,273}},
+{ 102930, 2, {365,282}},
+{ 102942, 2, {342,301}},
+{ 102960, 2, {330,312}},
+{ 103020, 2, {340,303}},
+{ 103040, 2, {322,320}},
+{ 103056, 2, {339,304}},
+{ 103075, 2, {475,217}},
+{ 103092, 2, {363,284}},
+{ 103095, 2, {395,261}},
+{ 103168, 2, {403,256}},
+{ 103246, 2, {361,286}},
+{ 103275, 2, {405,255}},
+{ 103320, 2, {328,315}},
+{ 103332, 2, {327,316}},
+{ 103350, 2, {325,318}},
+{ 103356, 2, {324,319}},
+{ 103360, 2, {323,320}},
+{ 103400, 2, {376,275}},
+{ 103488, 2, {336,308}},
+{ 103500, 2, {345,300}},
+{ 103509, 2, {371,279}},
+{ 103545, 2, {351,295}},
+{ 103596, 2, {356,291}},
+{ 103632, 2, {381,272}},
+{ 103635, 2, {329,315}},
+{ 103664, 2, {341,304}},
+{ 103675, 2, {325,319}},
+{ 103680, 2, {324,320}},
+{ 103716, 2, {387,268}},
+{ 103740, 2, {364,285}},
+{ 103752, 2, {393,264}},
+{ 103761, 2, {427,243}},
+{ 103776, 2, {368,282}},
+{ 103785, 2, {407,255}},
+{ 103824, 2, {336,309}},
+{ 103840, 2, {352,295}},
+{ 103845, 2, {345,301}},
+{ 103880, 2, {371,280}},
+{ 103896, 2, {333,312}},
+{ 103936, 2, {406,256}},
+{ 103968, 2, {342,304}},
+{ 104000, 2, {325,320}},
+{ 104004, 2, {324,321}},
+{ 104104, 2, {338,308}},
+{ 104160, 2, {336,310}},
+{ 104232, 2, {344,303}},
+{ 104244, 2, {357,292}},
+{ 104272, 2, {343,304}},
+{ 104304, 2, {328,318}},
+{ 104310, 2, {342,305}},
+{ 104328, 2, {324,322}},
+{ 104346, 2, {341,306}},
+{ 104370, 2, {355,294}},
+{ 104412, 2, {339,308}},
+{ 104520, 2, {335,312}},
+{ 104544, 2, {352,297}},
+{ 104580, 2, {332,315}},
+{ 104640, 2, {327,320}},
+{ 104650, 2, {325,322}},
+{ 104652, 2, {324,323}},
+{ 104748, 2, {348,301}},
+{ 104760, 2, {360,291}},
+{ 104784, 2, {354,296}},
+{ 104796, 2, {369,284}},
+{ 104880, 2, {345,304}},
+{ 104907, 2, {363,289}},
+{ 104920, 2, {344,305}},
+{ 104949, 2, {351,299}},
+{ 104958, 2, {343,306}},
+{ 104975, 2, {325,323}},
+{ 105000, 2, {350,300}},
+{ 105028, 2, {341,308}},
+{ 105060, 2, {340,309}},
+{ 105080, 2, {355,296}},
+{ 105156, 2, {381,276}},
+{ 105196, 2, {364,289}},
+{ 105228, 2, {333,316}},
+{ 105248, 2, {352,299}},
+{ 105264, 2, {344,306}},
+{ 105270, 2, {330,319}},
+{ 105280, 2, {329,320}},
+{ 105288, 2, {328,321}},
+{ 105300, 2, {325,324}},
+{ 105324, 2, {393,268}},
+{ 105350, 2, {350,301}},
+{ 105408, 2, {366,288}},
+{ 105435, 2, {355,297}},
+{ 105444, 2, {348,303}},
+{ 105525, 2, {335,315}},
+{ 105570, 2, {345,306}},
+{ 105600, 2, {330,320}},
+{ 105651, 2, {351,301}},
+{ 105672, 2, {357,296}},
+{ 105728, 2, {413,256}},
+{ 105732, 2, {356,297}},
+{ 105735, 2, {371,285}},
+{ 105768, 2, {339,312}},
+{ 105792, 2, {348,304}},
+{ 105840, 2, {336,315}},
+{ 105896, 2, {427,248}},
+{ 105924, 2, {364,291}},
+{ 105948, 2, {327,324}},
+{ 105963, 2, {429,247}},
+{ 105996, 2, {363,292}},
+{ 106000, 2, {400,265}},
+{ 106020, 2, {342,310}},
+{ 106029, 2, {357,297}},
+{ 106080, 2, {340,312}},
+{ 106134, 2, {361,294}},
+{ 106140, 2, {348,305}},
+{ 106190, 2, {370,287}},
+{ 106191, 2, {437,243}},
+{ 106260, 2, {330,322}},
+{ 106296, 2, {344,309}},
+{ 106330, 2, {343,310}},
+{ 106392, 2, {341,312}},
+{ 106400, 2, {350,304}},
+{ 106425, 2, {387,275}},
+{ 106470, 2, {338,315}},
+{ 106500, 2, {355,300}},
+{ 106530, 2, {335,318}},
+{ 106560, 2, {333,320}},
+{ 106572, 2, {332,321}},
+{ 106590, 2, {330,323}},
+{ 106596, 2, {329,324}},
+{ 106600, 2, {328,325}},
+{ 106650, 2, {395,270}},
+{ 106656, 2, {352,303}},
+{ 106680, 2, {381,280}},
+{ 106704, 2, {342,312}},
+{ 106720, 2, {368,290}},
+{ 106722, 2, {363,294}},
+{ 106743, 2, {357,299}},
+{ 106764, 2, {372,287}},
+{ 106812, 2, {387,276}},
+{ 106848, 2, {336,318}},
+{ 106896, 2, {393,272}},
+{ 106920, 2, {330,324}},
+{ 106925, 2, {329,325}},
+{ 106932, 2, {399,268}},
+{ 107016, 2, {343,312}},
+{ 107055, 2, {351,305}},
+{ 107065, 2, {437,245}},
+{ 107070, 2, {415,258}},
+{ 107088, 2, {368,291}},
+{ 107100, 2, {340,315}},
+{ 107124, 2, {339,316}},
+{ 107136, 2, {372,288}},
+{ 107160, 2, {376,285}},
+{ 107163, 2, {441,243}},
+{ 107184, 2, {336,319}},
+{ 107198, 2, {403,266}},
+{ 107200, 2, {335,320}},
+{ 107217, 2, {361,297}},
+{ 107250, 2, {330,325}},
+{ 107256, 2, {328,327}},
+{ 107310, 2, {365,294}},
+{ 107325, 2, {405,265}},
+{ 107360, 2, {352,305}},
+{ 107415, 2, {341,315}},
+{ 107445, 2, {377,285}},
+{ 107448, 2, {363,296}},
+{ 107520, 2, {336,320}},
+{ 107525, 2, {391,275}},
+{ 107532, 2, {348,309}},
+{ 107590, 2, {371,290}},
+{ 107616, 2, {354,304}},
+{ 107625, 2, {375,287}},
+{ 107640, 2, {345,312}},
+{ 107712, 2, {352,306}},
+{ 107748, 2, {369,292}},
+{ 107793, 2, {413,261}},
+{ 107800, 2, {350,308}},
+{ 107856, 2, {336,321}},
+{ 107868, 2, {356,303}},
+{ 107880, 2, {348,310}},
+{ 107892, 2, {333,324}},
+{ 107912, 2, {329,328}},
+{ 107920, 2, {355,304}},
+{ 107970, 2, {354,305}},
+{ 108040, 2, {365,296}},
+{ 108045, 2, {343,315}},
+{ 108108, 2, {351,308}},
+{ 108160, 2, {338,320}},
+{ 108192, 2, {336,322}},
+{ 108204, 2, {381,284}},
+{ 108225, 2, {333,325}},
+{ 108240, 2, {330,328}},
+{ 108252, 2, {372,291}},
+{ 108262, 2, {407,266}},
+{ 108290, 2, {442,245}},
+{ 108300, 2, {361,300}},
+{ 108315, 2, {415,261}},
+{ 108336, 2, {366,296}},
+{ 108360, 2, {344,315}},
+{ 108375, 2, {375,289}},
+{ 108405, 2, {365,297}},
+{ 108460, 2, {340,319}},
+{ 108468, 2, {393,276}},
+{ 108480, 2, {339,320}},
+{ 108528, 2, {336,323}},
+{ 108537, 2, {363,299}},
+{ 108540, 2, {335,324}},
+{ 108560, 2, {368,295}},
+{ 108564, 2, {332,327}},
+{ 108570, 2, {330,329}},
+{ 108630, 2, {355,306}},
+{ 108768, 2, {352,309}},
+{ 108800, 2, {340,320}},
+{ 108810, 2, {351,310}},
+{ 108855, 2, {369,295}},
+{ 108864, 2, {336,324}},
+{ 109020, 2, {345,316}},
+{ 109060, 2, {380,287}},
+{ 109080, 2, {360,303}},
+{ 109098, 2, {342,319}},
+{ 109120, 2, {341,320}},
+{ 109140, 2, {340,321}},
+{ 109174, 2, {338,323}},
+{ 109200, 2, {336,325}},
+{ 109224, 2, {333,328}},
+{ 109250, 2, {437,250}},
+{ 109296, 2, {368,297}},
+{ 109312, 2, {427,256}},
+{ 109344, 2, {402,272}},
+{ 109392, 2, {344,318}},
+{ 109416, 2, {376,291}},
+{ 109417, 2, {343,319}},
+{ 109440, 2, {342,320}},
+{ 109480, 2, {340,322}},
+{ 109500, 2, {365,300}},
+{ 109512, 2, {338,324}},
+{ 109557, 2, {333,329}},
+{ 109616, 2, {403,272}},
+{ 109620, 2, {348,315}},
+{ 109650, 2, {425,258}},
+{ 109728, 2, {381,288}},
+{ 109760, 2, {343,320}},
+{ 109800, 2, {360,305}},
+{ 109802, 2, {341,322}},
+{ 109816, 2, {371,296}},
+{ 109820, 2, {340,323}},
+{ 109824, 2, {352,312}},
+{ 109836, 2, {339,324}},
+{ 109872, 2, {336,327}},
+{ 109880, 2, {335,328}},
+{ 109908, 2, {387,284}},
+{ 109956, 2, {357,308}},
+{ 110000, 2, {400,275}},
+{ 110004, 2, {356,309}},
+{ 110019, 2, {403,273}},
+{ 110040, 2, {393,280}},
+{ 110055, 2, {345,319}},
+{ 110075, 2, {425,259}},
+{ 110110, 2, {385,286}},
+{ 110124, 2, {342,322}},
+{ 110160, 2, {340,324}},
+{ 110187, 2, {371,297}},
+{ 110205, 2, {395,279}},
+{ 110240, 2, {416,265}},
+{ 110292, 2, {364,303}},
+{ 110352, 2, {363,304}},
+{ 110400, 2, {345,320}},
+{ 110424, 2, {344,321}},
+{ 110432, 2, {406,272}},
+{ 110448, 2, {354,312}},
+{ 110484, 2, {341,324}},
+{ 110544, 2, {336,329}},
+{ 110550, 2, {335,330}},
+{ 110556, 2, {333,332}},
+{ 110580, 2, {380,291}},
+{ 110700, 2, {369,300}},
+{ 110760, 2, {355,312}},
+{ 110789, 2, {343,323}},
+{ 110825, 2, {341,325}},
+{ 110838, 2, {377,294}},
+{ 110880, 2, {336,330}},
+{ 110916, 2, {351,316}},
+{ 110920, 2, {376,295}},
+{ 110925, 2, {425,261}},
+{ 110960, 2, {365,304}},
+{ 110976, 2, {384,289}},
+{ 111000, 2, {370,300}},
+{ 111069, 2, {369,301}},
+{ 111104, 2, {434,256}},
+{ 111111, 2, {407,273}},
+{ 111132, 2, {343,324}},
+{ 111150, 2, {342,325}},
+{ 111180, 2, {340,327}},
+{ 111188, 2, {361,308}},
+{ 111192, 2, {339,328}},
+{ 111240, 2, {360,309}},
+{ 111252, 2, {381,292}},
+{ 111264, 2, {366,304}},
+{ 111265, 2, {385,289}},
+{ 111320, 2, {440,253}},
+{ 111360, 2, {348,320}},
+{ 111370, 2, {370,301}},
+{ 111375, 2, {375,297}},
+{ 111384, 2, {357,312}},
+{ 111390, 2, {395,282}},
+{ 111447, 2, {427,261}},
+{ 111475, 2, {343,325}},
+{ 111504, 2, {368,303}},
+{ 111540, 2, {338,330}},
+{ 111555, 2, {335,333}},
+{ 111573, 2, {441,253}},
+{ 111600, 2, {360,310}},
+{ 111612, 2, {393,284}},
+{ 111650, 2, {350,319}},
+{ 111672, 2, {376,297}},
+{ 111690, 2, {365,306}},
+{ 111708, 2, {348,321}},
+{ 111744, 2, {384,291}},
+{ 111780, 2, {345,324}},
+{ 111800, 2, {344,325}},
+{ 111804, 2, {363,308}},
+{ 111825, 2, {355,315}},
+{ 111826, 2, {374,299}},
+{ 111860, 2, {340,329}},
+{ 111888, 2, {336,333}},
+{ 111925, 2, {407,275}},
+{ 111930, 2, {390,287}},
+{ 111936, 2, {352,318}},
+{ 111969, 2, {351,319}},
+{ 111972, 2, {372,301}},
+{ 112000, 2, {350,320}},
+{ 112050, 2, {415,270}},
+{ 112095, 2, {423,265}},
+{ 112140, 2, {356,315}},
+{ 112176, 2, {342,328}},
+{ 112240, 2, {368,305}},
+{ 112288, 2, {352,319}},
+{ 112320, 2, {351,320}},
+{ 112332, 2, {407,276}},
+{ 112336, 2, {413,272}},
+{ 112385, 2, {455,247}},
+{ 112455, 2, {357,315}},
+{ 112476, 2, {364,309}},
+{ 112480, 2, {370,304}},
+{ 112488, 2, {344,327}},
+{ 112500, 2, {375,300}},
+{ 112504, 2, {343,328}},
+{ 112518, 2, {342,329}},
+{ 112530, 2, {341,330}},
+{ 112545, 2, {369,305}},
+{ 112548, 2, {339,332}},
+{ 112560, 2, {336,335}},
+{ 112608, 2, {368,306}},
+{ 112632, 2, {361,312}},
+{ 112651, 2, {539,209}},
+{ 112665, 2, {435,259}},
+{ 112700, 2, {350,322}},
+{ 112710, 2, {390,289}},
+{ 112716, 2, {372,303}},
+{ 112776, 2, {381,296}},
+{ 112784, 2, {371,304}},
+{ 112812, 2, {357,316}},
+{ 112875, 2, {375,301}},
+{ 112890, 2, {355,318}},
+{ 112992, 2, {352,321}},
+{ 113004, 2, {387,292}},
+{ 113022, 2, {351,322}},
+{ 113050, 2, {350,323}},
+{ 113088, 2, {372,304}},
+{ 113100, 2, {348,325}},
+{ 113160, 2, {345,328}},
+{ 113176, 2, {344,329}},
+{ 113184, 2, {393,288}},
+{ 113190, 2, {343,330}},
+{ 113220, 2, {340,333}},
+{ 113256, 2, {363,312}},
+{ 113280, 2, {354,320}},
+{ 113288, 2, {392,289}},
+{ 113316, 2, {399,284}},
+{ 113344, 2, {352,322}},
+{ 113373, 2, {351,323}},
+{ 113400, 2, {350,324}},
+{ 113436, 2, {411,276}},
+{ 113505, 2, {345,329}},
+{ 113520, 2, {344,330}},
+{ 113568, 2, {338,336}},
+{ 113600, 2, {355,320}},
+{ 113620, 2, {380,299}},
+{ 113652, 2, {369,308}},
+{ 113696, 2, {352,323}},
+{ 113712, 2, {368,309}},
+{ 113715, 2, {361,315}},
+{ 113724, 2, {351,324}},
+{ 113778, 2, {378,301}},
+{ 113796, 2, {348,327}},
+{ 113880, 2, {365,312}},
+{ 113883, 2, {357,319}},
+{ 113904, 2, {339,336}},
+{ 113928, 2, {376,303}},
+{ 113967, 2, {469,243}},
+{ 114000, 2, {375,304}},
+{ 114048, 2, {352,324}},
+{ 114075, 2, {351,325}},
+{ 114080, 2, {368,310}},
+{ 114165, 2, {387,295}},
+{ 114192, 2, {366,312}},
+{ 114219, 2, {343,333}},
+{ 114240, 2, {340,336}},
+{ 114276, 2, {356,321}},
+{ 114300, 2, {381,300}},
+{ 114345, 2, {363,315}},
+{ 114380, 2, {380,301}},
+{ 114400, 2, {352,325}},
+{ 114480, 2, {360,318}},
+{ 114492, 2, {348,329}},
+{ 114540, 2, {345,332}},
+{ 114552, 2, {344,333}},
+{ 114570, 2, {342,335}},
+{ 114576, 2, {341,336}},
+{ 114608, 2, {377,304}},
+{ 114660, 2, {364,315}},
+{ 114680, 2, {376,305}},
+{ 114708, 2, {363,316}},
+{ 114750, 2, {375,306}},
+{ 114756, 2, {393,292}},
+{ 114855, 2, {403,285}},
+{ 114912, 2, {342,336}},
+{ 114948, 2, {372,309}},
+{ 114950, 2, {418,275}},
+{ 114975, 2, {365,315}},
+{ 115005, 2, {451,255}},
+{ 115010, 2, {371,310}},
+{ 115020, 2, {355,324}},
+{ 115050, 2, {354,325}},
+{ 115056, 2, {376,306}},
+{ 115080, 2, {411,280}},
+{ 115104, 2, {352,327}},
+{ 115115, 2, {385,299}},
+{ 115128, 2, {351,328}},
+{ 115140, 2, {380,303}},
+{ 115150, 2, {350,329}},
+{ 115192, 2, {374,308}},
+{ 115200, 2, {360,320}},
+{ 115227, 2, {413,279}},
+{ 115236, 2, {388,297}},
+{ 115240, 2, {344,335}},
+{ 115248, 2, {343,336}},
+{ 115260, 2, {340,339}},
+{ 115311, 2, {357,323}},
+{ 115362, 2, {377,306}},
+{ 115425, 2, {405,285}},
+{ 115440, 2, {370,312}},
+{ 115479, 2, {351,329}},
+{ 115520, 2, {361,320}},
+{ 115560, 2, {360,321}},
+{ 115640, 2, {392,295}},
+{ 115668, 2, {357,324}},
+{ 115776, 2, {402,288}},
+{ 115785, 2, {415,279}},
+{ 115808, 2, {352,329}},
+{ 115824, 2, {381,304}},
+{ 115884, 2, {348,333}},
+{ 115920, 2, {345,336}},
+{ 115934, 2, {343,338}},
+{ 115940, 2, {341,340}},
+{ 115995, 2, {407,285}},
+{ 116000, 2, {400,290}},
+{ 116025, 2, {357,325}},
+{ 116070, 2, {365,318}},
+{ 116100, 2, {387,300}},
+{ 116112, 2, {354,328}},
+{ 116116, 2, {364,319}},
+{ 116127, 2, {391,297}},
+{ 116130, 2, {395,294}},
+{ 116144, 2, {427,272}},
+{ 116160, 2, {352,330}},
+{ 116184, 2, {376,309}},
+{ 116325, 2, {423,275}},
+{ 116328, 2, {393,296}},
+{ 116352, 2, {384,303}},
+{ 116412, 2, {356,327}},
+{ 116424, 2, {378,308}},
+{ 116440, 2, {355,328}},
+{ 116480, 2, {364,320}},
+{ 116508, 2, {399,292}},
+{ 116532, 2, {351,332}},
+{ 116580, 2, {348,335}},
+{ 116600, 2, {424,275}},
+{ 116604, 2, {369,316}},
+{ 116616, 2, {344,339}},
+{ 116620, 2, {343,340}},
+{ 116622, 2, {342,341}},
+{ 116688, 2, {374,312}},
+{ 116724, 2, {411,284}},
+{ 116725, 2, {575,203}},
+{ 116760, 2, {417,280}},
+{ 116800, 2, {365,320}},
+{ 116844, 2, {364,321}},
+{ 116865, 2, {371,315}},
+{ 116928, 2, {348,336}},
+{ 116963, 2, {343,341}},
+{ 117000, 2, {360,325}},
+{ 117024, 2, {368,318}},
+{ 117030, 2, {415,282}},
+{ 117045, 2, {405,289}},
+{ 117096, 2, {357,328}},
+{ 117120, 2, {366,320}},
+{ 117150, 2, {355,330}},
+{ 117180, 2, {372,315}},
+{ 117216, 2, {352,333}},
+{ 117249, 2, {363,323}},
+{ 117300, 2, {345,340}},
+{ 117306, 2, {343,342}},
+{ 117315, 2, {395,297}},
+{ 117325, 2, {361,325}},
+{ 117348, 2, {381,308}},
+{ 117369, 2, {483,243}},
+{ 117390, 2, {390,301}},
+{ 117392, 2, {368,319}},
+{ 117420, 2, {380,309}},
+{ 117450, 2, {405,290}},
+{ 117504, 2, {384,306}},
+{ 117564, 2, {388,303}},
+{ 117572, 2, {364,323}},
+{ 117585, 2, {351,335}},
+{ 117600, 2, {350,336}},
+{ 117612, 2, {363,324}},
+{ 117645, 2, {345,341}},
+{ 117648, 2, {344,342}},
+{ 117720, 2, {360,327}},
+{ 117810, 2, {357,330}},
+{ 117900, 2, {393,300}},
+{ 117920, 2, {352,335}},
+{ 117936, 2, {351,336}},
+{ 117972, 2, {348,339}},
+{ 117990, 2, {345,342}},
+{ 117992, 2, {344,343}},
+{ 118000, 2, {400,295}},
+{ 118035, 2, {387,305}},
+{ 118048, 2, {434,272}},
+{ 118104, 2, {399,296}},
+{ 118128, 2, {368,321}},
+{ 118215, 2, {355,333}},
+{ 118260, 2, {365,324}},
+{ 118300, 2, {350,338}},
+{ 118335, 2, {345,343}},
+{ 118368, 2, {411,288}},
+{ 118400, 2, {370,320}},
+{ 118404, 2, {396,299}},
+{ 118428, 2, {417,284}},
+{ 118440, 2, {360,329}},
+{ 118482, 2, {403,294}},
+{ 118500, 2, {375,316}},
+{ 118503, 2, {399,297}},
+{ 118524, 2, {357,332}},
+{ 118548, 2, {356,333}},
+{ 118560, 2, {380,312}},
+{ 118575, 2, {425,279}},
+{ 118590, 2, {354,335}},
+{ 118656, 2, {384,309}},
+{ 118668, 2, {348,341}},
+{ 118680, 2, {345,344}},
+{ 118720, 2, {371,320}},
+{ 118755, 2, {377,315}},
+{ 118776, 2, {392,303}},
+{ 118800, 2, {360,330}},
+{ 118872, 2, {381,312}},
+{ 118944, 2, {354,336}},
+{ 118950, 2, {366,325}},
+{ 118976, 2, {352,338}},
+{ 118992, 2, {402,296}},
+{ 119028, 2, {364,327}},
+{ 119040, 2, {372,320}},
+{ 119064, 2, {363,328}},
+{ 119119, 2, {539,221}},
+{ 119130, 2, {361,330}},
+{ 119133, 2, {427,279}},
+{ 119196, 2, {387,308}},
+{ 119232, 2, {368,324}},
+{ 119280, 2, {355,336}},
+{ 119301, 2, {399,299}},
+{ 119328, 2, {352,339}},
+{ 119340, 2, {351,340}},
+{ 119350, 2, {350,341}},
+{ 119364, 2, {348,343}},
+{ 119412, 2, {372,321}},
+{ 119472, 2, {393,304}},
+{ 119475, 2, {405,295}},
+{ 119556, 2, {369,324}},
+{ 119560, 2, {392,305}},
+{ 119568, 2, {376,318}},
+{ 119600, 2, {368,325}},
+{ 119625, 2, {375,319}},
+{ 119646, 2, {391,306}},
+{ 119658, 2, {407,294}},
+{ 119680, 2, {352,340}},
+{ 119691, 2, {351,341}},
+{ 119700, 2, {350,342}},
+{ 119720, 2, {365,328}},
+{ 119808, 2, {384,312}},
+{ 119850, 2, {425,282}},
+{ 119880, 2, {360,333}},
+{ 119892, 2, {388,309}},
+{ 119925, 2, {369,325}},
+{ 119952, 2, {357,336}},
+{ 119988, 2, {396,303}},
+{ 120000, 2, {375,320}},
+{ 120012, 2, {411,292}},
+{ 120032, 2, {352,341}},
+{ 120048, 2, {366,328}},
+{ 120050, 2, {350,343}},
+{ 120060, 2, {348,345}},
+{ 120096, 2, {417,288}},
+{ 120120, 2, {364,330}},
+{ 120132, 2, {423,284}},
+{ 120150, 2, {445,270}},
+{ 120175, 2, {437,275}},
+{ 120204, 2, {371,324}},
+{ 120224, 2, {416,289}},
+{ 120336, 2, {368,327}},
+{ 120384, 2, {352,342}},
+{ 120393, 2, {351,343}},
+{ 120396, 2, {381,316}},
+{ 120435, 2, {465,259}},
+{ 120450, 2, {365,330}},
+{ 120516, 2, {363,332}},
+{ 120575, 2, {371,325}},
+{ 120582, 2, {378,319}},
+{ 120600, 2, {360,335}},
+{ 120615, 2, {473,255}},
+{ 120640, 2, {377,320}},
+{ 120684, 2, {356,339}},
+{ 120696, 2, {376,321}},
+{ 120736, 2, {352,343}},
+{ 120744, 2, {351,344}},
+{ 120771, 2, {497,243}},
+{ 120785, 2, {493,245}},
+{ 120802, 2, {374,323}},
+{ 120870, 2, {395,306}},
+{ 120900, 2, {372,325}},
+{ 121032, 2, {369,328}},
+{ 121044, 2, {393,308}},
+{ 121072, 2, {368,329}},
+{ 121095, 2, {351,345}},
+{ 121125, 2, {375,323}},
+{ 121128, 2, {392,309}},
+{ 121176, 2, {374,324}},
+{ 121200, 2, {400,303}},
+{ 121212, 2, {364,333}},
+{ 121220, 2, {380,319}},
+{ 121275, 2, {385,315}},
+{ 121296, 2, {361,336}},
+{ 121380, 2, {357,340}},
+{ 121394, 2, {377,322}},
+{ 121401, 2, {369,329}},
+{ 121410, 2, {355,342}},
+{ 121440, 2, {352,345}},
+{ 121500, 2, {375,324}},
+{ 121545, 2, {365,333}},
+{ 121550, 2, {374,325}},
+{ 121600, 2, {380,320}},
+{ 121635, 2, {459,265}},
+{ 121644, 2, {372,327}},
+{ 121656, 2, {411,296}},
+{ 121680, 2, {360,338}},
+{ 121688, 2, {371,328}},
+{ 121716, 2, {378,322}},
+{ 121730, 2, {370,329}},
+{ 121737, 2, {357,341}},
+{ 121764, 2, {417,292}},
+{ 121776, 2, {354,344}},
+{ 121800, 2, {350,348}},
+{ 121920, 2, {381,320}},
+{ 121968, 2, {363,336}},
+{ 121975, 2, {425,287}},
+{ 121980, 2, {380,321}},
+{ 121992, 2, {391,312}},
+{ 122000, 2, {400,305}},
+{ 122010, 2, {415,294}},
+{ 122018, 2, {361,338}},
+{ 122040, 2, {360,339}},
+{ 122112, 2, {384,318}},
+{ 122120, 2, {355,344}},
+{ 122148, 2, {351,348}},
+{ 122200, 2, {376,325}},
+{ 122208, 2, {402,304}},
+{ 122220, 2, {388,315}},
+{ 122248, 2, {413,296}},
+{ 122292, 2, {387,316}},
+{ 122304, 2, {364,336}},
+{ 122360, 2, {380,322}},
+{ 122364, 2, {396,309}},
+{ 122388, 2, {372,329}},
+{ 122400, 2, {360,340}},
+{ 122409, 2, {469,261}},
+{ 122430, 2, {371,330}},
+{ 122496, 2, {352,348}},
+{ 122508, 2, {369,332}},
+{ 122512, 2, {403,304}},
+{ 122525, 2, {377,325}},
+{ 122544, 2, {368,333}},
+{ 122610, 2, {366,335}},
+{ 122616, 2, {393,312}},
+{ 122640, 2, {365,336}},
+{ 122655, 2, {481,255}},
+{ 122661, 2, {413,297}},
+{ 122688, 2, {426,288}},
+{ 122694, 2, {363,338}},
+{ 122720, 2, {416,295}},
+{ 122740, 2, {361,340}},
+{ 122760, 2, {360,341}},
+{ 122808, 2, {357,344}},
+{ 122815, 2, {385,319}},
+{ 122820, 2, {356,345}},
+{ 122850, 2, {351,350}},
+{ 122892, 2, {399,308}},
+{ 122952, 2, {376,327}},
+{ 122976, 2, {366,336}},
+{ 123000, 2, {375,328}},
+{ 123025, 2, {475,259}},
+{ 123120, 2, {360,342}},
+{ 123200, 2, {352,350}},
+{ 123255, 2, {415,297}},
+{ 123264, 2, {384,321}},
+{ 123280, 2, {368,335}},
+{ 123300, 2, {411,300}},
+{ 123318, 2, {403,306}},
+{ 123375, 2, {375,329}},
+{ 123396, 2, {364,339}},
+{ 123410, 2, {410,301}},
+{ 123420, 2, {363,340}},
+{ 123424, 2, {406,304}},
+{ 123432, 2, {417,296}},
+{ 123444, 2, {381,324}},
+{ 123480, 2, {360,343}},
+{ 123516, 2, {423,292}},
+{ 123525, 2, {405,305}},
+{ 123540, 2, {355,348}},
+{ 123543, 2, {371,333}},
+{ 123552, 2, {352,351}},
+{ 123600, 2, {400,309}},
+{ 123615, 2, {369,335}},
+{ 123728, 2, {407,304}},
+{ 123823, 2, {361,343}},
+{ 123876, 2, {372,333}},
+{ 123981, 2, {429,289}},
+{ 123984, 2, {369,336}},
+{ 124000, 2, {400,310}},
+{ 124025, 2, {451,275}},
+{ 124032, 2, {384,323}},
+{ 124080, 2, {376,330}},
+{ 124124, 2, {364,341}},
+{ 124155, 2, {445,279}},
+{ 124173, 2, {511,243}},
+{ 124188, 2, {393,316}},
+{ 124200, 2, {360,345}},
+{ 124236, 2, {357,348}},
+{ 124260, 2, {380,327}},
+{ 124320, 2, {370,336}},
+{ 124355, 2, {385,323}},
+{ 124362, 2, {378,329}},
+{ 124410, 2, {377,330}},
+{ 124416, 2, {384,324}},
+{ 124425, 2, {395,315}},
+{ 124476, 2, {451,276}},
+{ 124500, 2, {375,332}},
+{ 124509, 2, {363,343}},
+{ 124548, 2, {388,321}},
+{ 124605, 2, {355,351}},
+{ 124608, 2, {354,352}},
+{ 124620, 2, {372,335}},
+{ 124656, 2, {371,336}},
+{ 124740, 2, {378,330}},
+{ 124752, 2, {368,339}},
+{ 124775, 2, {575,217}},
+{ 124785, 2, {423,295}},
+{ 124800, 2, {384,325}},
+{ 124830, 2, {365,342}},
+{ 124836, 2, {404,309}},
+{ 124845, 2, {435,287}},
+{ 124872, 2, {363,344}},
+{ 124944, 2, {411,304}},
+{ 124950, 2, {357,350}},
+{ 124956, 2, {356,351}},
+{ 124960, 2, {355,352}},
+{ 124968, 2, {381,328}},
+{ 124982, 2, {418,299}},
+{ 124992, 2, {372,336}},
+{ 125020, 2, {380,329}},
+{ 125048, 2, {392,319}},
+{ 125080, 2, {424,295}},
+{ 125100, 2, {417,300}},
+{ 125208, 2, {376,333}},
+{ 125268, 2, {429,292}},
+{ 125307, 2, {357,351}},
+{ 125356, 2, {407,308}},
+{ 125388, 2, {387,324}},
+{ 125424, 2, {402,312}},
+{ 125440, 2, {392,320}},
+{ 125460, 2, {369,340}},
+{ 125488, 2, {368,341}},
+{ 125490, 2, {445,282}},
+{ 125550, 2, {405,310}},
+{ 125552, 2, {413,304}},
+{ 125560, 2, {365,344}},
+{ 125568, 2, {384,327}},
+{ 125580, 2, {364,345}},
+{ 125610, 2, {395,318}},
+{ 125664, 2, {357,352}},
+{ 125670, 2, {355,354}},
+{ 125685, 2, {399,315}},
+{ 125760, 2, {393,320}},
+{ 125775, 2, {387,325}},
+{ 125832, 2, {392,321}},
+{ 125840, 2, {440,286}},
+{ 125856, 2, {368,342}},
+{ 125904, 2, {366,344}},
+{ 125960, 2, {376,335}},
+{ 125970, 2, {390,323}},
+{ 126000, 2, {360,350}},
+{ 126072, 2, {408,309}},
+{ 126084, 2, {399,316}},
+{ 126096, 2, {426,296}},
+{ 126108, 2, {372,339}},
+{ 126126, 2, {429,294}},
+{ 126140, 2, {371,340}},
+{ 126224, 2, {368,343}},
+{ 126225, 2, {425,297}},
+{ 126280, 2, {385,328}},
+{ 126324, 2, {363,348}},
+{ 126350, 2, {361,350}},
+{ 126360, 2, {360,351}},
+{ 126392, 2, {427,296}},
+{ 126400, 2, {395,320}},
+{ 126420, 2, {420,301}},
+{ 126492, 2, {381,332}},
+{ 126540, 2, {370,342}},
+{ 126567, 2, {369,343}},
+{ 126588, 2, {411,308}},
+{ 126616, 2, {392,323}},
+{ 126630, 2, {378,335}},
+{ 126684, 2, {391,324}},
+{ 126711, 2, {361,351}},
+{ 126720, 2, {360,352}},
+{ 126750, 2, {375,338}},
+{ 126768, 2, {417,304}},
+{ 126819, 2, {427,297}},
+{ 126875, 2, {625,203}},
+{ 126876, 2, {388,327}},
+{ 126880, 2, {416,305}},
+{ 126882, 2, {371,342}},
+{ 126900, 2, {423,300}},
+{ 126910, 2, {370,343}},
+{ 126936, 2, {369,344}},
+{ 126945, 2, {403,315}},
+{ 126960, 2, {368,345}},
+{ 126984, 2, {407,312}},
+{ 126990, 2, {415,306}},
+{ 127008, 2, {378,336}},
+{ 127020, 2, {365,348}},
+{ 127050, 2, {363,350}},
+{ 127072, 2, {361,352}},
+{ 127075, 2, {391,325}},
+{ 127092, 2, {357,356}},
+{ 127116, 2, {396,321}},
+{ 127200, 2, {400,318}},
+{ 127260, 2, {404,315}},
+{ 127281, 2, {399,319}},
+{ 127323, 2, {387,329}},
+{ 127332, 2, {393,324}},
+{ 127400, 2, {364,350}},
+{ 127428, 2, {444,287}},
+{ 127440, 2, {360,354}},
+{ 127464, 2, {376,339}},
+{ 127500, 2, {375,340}},
+{ 127512, 2, {396,322}},
+{ 127568, 2, {469,272}},
+{ 127575, 2, {405,315}},
+{ 127596, 2, {372,343}},
+{ 127600, 2, {400,319}},
+{ 127624, 2, {371,344}},
+{ 127680, 2, {380,336}},
+{ 127764, 2, {364,351}},
+{ 127776, 2, {363,352}},
+{ 127800, 2, {360,355}},
+{ 127872, 2, {384,333}},
+{ 127875, 2, {375,341}},
+{ 127890, 2, {406,315}},
+{ 127920, 2, {390,328}},
+{ 127925, 2, {425,301}},
+{ 127946, 2, {481,266}},
+{ 127980, 2, {395,324}},
+{ 127995, 2, {371,345}},
+{ 128016, 2, {381,336}},
+{ 128030, 2, {413,310}},
+{ 128064, 2, {368,348}},
+{ 128115, 2, {365,351}},
+{ 128128, 2, {364,352}},
+{ 128180, 2, {377,340}},
+{ 128184, 2, {392,327}},
+{ 128205, 2, {385,333}},
+{ 128232, 2, {411,312}},
+{ 128250, 2, {375,342}},
+{ 128271, 2, {429,299}},
+{ 128282, 2, {374,343}},
+{ 128310, 2, {390,329}},
+{ 128340, 2, {372,345}},
+{ 128400, 2, {400,321}},
+{ 128412, 2, {369,348}},
+{ 128436, 2, {417,308}},
+{ 128480, 2, {365,352}},
+{ 128484, 2, {387,332}},
+{ 128520, 2, {360,357}},
+{ 128535, 2, {451,285}},
+{ 128547, 2, {529,243}},
+{ 128592, 2, {376,342}},
+{ 128625, 2, {375,343}},
+{ 128640, 2, {384,335}},
+{ 128744, 2, {418,308}},
+{ 128760, 2, {370,348}},
+{ 128800, 2, {368,350}},
+{ 128820, 2, {380,339}},
+{ 128832, 2, {366,352}},
+{ 128877, 2, {361,357}},
+{ 128898, 2, {378,341}},
+{ 128904, 2, {393,328}},
+{ 128934, 2, {377,342}},
+{ 128960, 2, {403,320}},
+{ 128968, 2, {376,343}},
+{ 129000, 2, {375,344}},
+{ 129015, 2, {423,305}},
+{ 129024, 2, {384,336}},
+{ 129108, 2, {371,348}},
+{ 129115, 2, {527,245}},
+{ 129168, 2, {368,351}},
+{ 129195, 2, {405,319}},
+{ 129204, 2, {388,333}},
+{ 129210, 2, {365,354}},
+{ 129228, 2, {363,356}},
+{ 129311, 2, {377,343}},
+{ 129320, 2, {424,305}},
+{ 129360, 2, {385,336}},
+{ 129472, 2, {448,289}},
+{ 129492, 2, {396,327}},
+{ 129504, 2, {426,304}},
+{ 129540, 2, {381,340}},
+{ 129560, 2, {395,328}},
+{ 129580, 2, {380,341}},
+{ 129605, 2, {529,245}},
+{ 129645, 2, {387,335}},
+{ 129648, 2, {438,296}},
+{ 129654, 2, {378,343}},
+{ 129675, 2, {399,325}},
+{ 129684, 2, {404,321}},
+{ 129717, 2, {497,261}},
+{ 129720, 2, {376,345}},
+{ 129744, 2, {408,318}},
+{ 129766, 2, {403,322}},
+{ 129780, 2, {412,315}},
+{ 129789, 2, {437,297}},
+{ 129792, 2, {384,338}},
+{ 129800, 2, {440,295}},
+{ 129808, 2, {427,304}},
+{ 129850, 2, {371,350}},
+{ 129870, 2, {370,351}},
+{ 129876, 2, {411,316}},
+{ 129888, 2, {369,352}},
+{ 129920, 2, {406,320}},
+{ 129930, 2, {366,355}},
+{ 129948, 2, {364,357}},
+{ 129960, 2, {361,360}},
+{ 130000, 2, {400,325}},
+{ 130032, 2, {378,344}},
+{ 130050, 2, {425,306}},
+{ 130065, 2, {377,345}},
+{ 130075, 2, {473,275}},
+{ 130095, 2, {413,315}},
+{ 130104, 2, {417,312}},
+{ 130130, 2, {385,338}},
+{ 130176, 2, {384,339}},
+{ 130200, 2, {372,350}},
+{ 130221, 2, {371,351}},
+{ 130240, 2, {370,352}},
+{ 130272, 2, {368,354}},
+{ 130284, 2, {396,329}},
+{ 130340, 2, {380,343}},
+{ 130350, 2, {395,330}},
+{ 130410, 2, {378,345}},
+{ 130416, 2, {418,312}},
+{ 130476, 2, {393,332}},
+{ 130500, 2, {375,348}},
+{ 130536, 2, {392,333}},
+{ 130548, 2, {473,276}},
+{ 130560, 2, {384,340}},
+{ 130572, 2, {372,351}},
+{ 130592, 2, {371,352}},
+{ 130640, 2, {368,355}},
+{ 130650, 2, {390,335}},
+{ 130680, 2, {363,360}},
+{ 130725, 2, {415,315}},
+{ 130800, 2, {400,327}},
+{ 130815, 2, {405,323}},
+{ 130830, 2, {445,294}},
+{ 130851, 2, {469,279}},
+{ 130872, 2, {399,328}},
+{ 130900, 2, {374,350}},
+{ 130935, 2, {435,301}},
+{ 130944, 2, {372,352}},
+{ 130968, 2, {408,321}},
+{ 130975, 2, {403,325}},
+{ 130995, 2, {369,355}},
+{ 131040, 2, {364,360}},
+{ 131043, 2, {363,361}},
+{ 131054, 2, {407,322}},
+{ 131064, 2, {381,344}},
+{ 131100, 2, {380,345}},
+{ 131175, 2, {477,275}},
+{ 131220, 2, {405,324}},
+{ 131274, 2, {374,351}},
+{ 131285, 2, {385,341}},
+{ 131313, 2, {481,273}},
+{ 131320, 2, {392,335}},
+{ 131328, 2, {384,342}},
+{ 131364, 2, {369,356}},
+{ 131376, 2, {368,357}},
+{ 131400, 2, {365,360}},
+{ 131404, 2, {364,361}},
+{ 131495, 2, {455,289}},
+{ 131520, 2, {411,320}},
+{ 131532, 2, {388,339}},
+{ 131535, 2, {395,333}},
+{ 131560, 2, {440,299}},
+{ 131580, 2, {387,340}},
+{ 131625, 2, {375,351}},
+{ 131648, 2, {374,352}},
+{ 131670, 2, {385,342}},
+{ 131712, 2, {384,343}},
+{ 131760, 2, {366,360}},
+{ 131772, 2, {417,316}},
+{ 131784, 2, {408,323}},
+{ 131835, 2, {517,255}},
+{ 131856, 2, {402,328}},
+{ 131859, 2, {441,299}},
+{ 131868, 2, {396,333}},
+{ 131936, 2, {434,304}},
+{ 131950, 2, {377,350}},
+{ 131970, 2, {415,318}},
+{ 131976, 2, {376,351}},
+{ 132000, 2, {375,352}},
+{ 132048, 2, {393,336}},
+{ 132060, 2, {372,355}},
+{ 132066, 2, {414,319}},
+{ 132108, 2, {404,327}},
+{ 132132, 2, {364,363}},
+{ 132158, 2, {391,338}},
+{ 132160, 2, {413,320}},
+{ 132165, 2, {445,297}},
+{ 132250, 2, {529,250}},
+{ 132252, 2, {412,321}},
+{ 132275, 2, {407,325}},
+{ 132288, 2, {416,318}},
+{ 132300, 2, {378,350}},
+{ 132327, 2, {377,351}},
+{ 132370, 2, {427,310}},
+{ 132440, 2, {385,344}},
+{ 132468, 2, {399,332}},
+{ 132588, 2, {381,348}},
+{ 132594, 2, {451,294}},
+{ 132660, 2, {396,335}},
+{ 132704, 2, {377,352}},
+{ 132720, 2, {395,336}},
+{ 132741, 2, {387,343}},
+{ 132804, 2, {372,357}},
+{ 132840, 2, {369,360}},
+{ 132888, 2, {392,339}},
+{ 132912, 2, {426,312}},
+{ 132940, 2, {391,340}},
+{ 132990, 2, {390,341}},
+{ 133056, 2, {378,352}},
+{ 133104, 2, {376,354}},
+{ 133110, 2, {435,306}},
+{ 133128, 2, {387,344}},
+{ 133133, 2, {539,247}},
+{ 133152, 2, {438,304}},
+{ 133164, 2, {411,324}},
+{ 133200, 2, {370,360}},
+{ 133245, 2, {405,329}},
+{ 133371, 2, {511,261}},
+{ 133380, 2, {380,351}},
+{ 133416, 2, {408,327}},
+{ 133440, 2, {417,320}},
+{ 133455, 2, {465,287}},
+{ 133480, 2, {376,355}},
+{ 133500, 2, {375,356}},
+{ 133536, 2, {416,321}},
+{ 133560, 2, {371,360}},
+{ 133584, 2, {368,363}},
+{ 133590, 2, {366,365}},
+{ 133620, 2, {393,340}},
+{ 133632, 2, {384,348}},
+{ 133644, 2, {444,301}},
+{ 133650, 2, {405,330}},
+{ 133668, 2, {423,316}},
+{ 133672, 2, {392,341}},
+{ 133705, 2, {605,221}},
+{ 133722, 2, {391,342}},
+{ 133760, 2, {380,352}},
+{ 133770, 2, {390,343}},
+{ 133848, 2, {396,338}},
+{ 133860, 2, {388,345}},
+{ 133875, 2, {375,357}},
+{ 133980, 2, {385,348}},
+{ 134000, 2, {400,335}},
+{ 134064, 2, {392,342}},
+{ 134100, 2, {447,300}},
+{ 134112, 2, {381,352}},
+{ 134113, 2, {391,343}},
+{ 134160, 2, {390,344}},
+{ 134190, 2, {378,355}},
+{ 134200, 2, {440,305}},
+{ 134225, 2, {413,325}},
+{ 134232, 2, {376,357}},
+{ 134244, 2, {396,339}},
+{ 134316, 2, {369,364}},
+{ 134320, 2, {368,365}},
+{ 134368, 2, {416,323}},
+{ 134379, 2, {553,243}},
+{ 134400, 2, {384,350}},
+{ 134460, 2, {405,332}},
+{ 134505, 2, {427,315}},
+{ 134532, 2, {404,333}},
+{ 134589, 2, {377,357}},
+{ 134640, 2, {374,360}},
+{ 134676, 2, {387,348}},
+{ 134685, 2, {369,365}},
+{ 134688, 2, {368,366}},
+{ 134724, 2, {412,327}},
+{ 134750, 2, {385,350}},
+{ 134784, 2, {384,351}},
+{ 134805, 2, {473,285}},
+{ 134808, 2, {411,328}},
+{ 134820, 2, {420,321}},
+{ 134890, 2, {410,329}},
+{ 134946, 2, {378,357}},
+{ 134976, 2, {444,304}},
+{ 134995, 2, {551,245}},
+{ 135000, 2, {375,360}},
+{ 135014, 2, {374,361}},
+{ 135036, 2, {372,363}},
+{ 135072, 2, {402,336}},
+{ 135090, 2, {395,342}},
+{ 135108, 2, {417,324}},
+{ 135135, 2, {385,351}},
+{ 135150, 2, {425,318}},
+{ 135192, 2, {393,344}},
+{ 135200, 2, {400,338}},
+{ 135240, 2, {392,345}},
+{ 135375, 2, {375,361}},
+{ 135405, 2, {459,295}},
+{ 135464, 2, {413,328}},
+{ 135520, 2, {385,352}},
+{ 135564, 2, {429,316}},
+{ 135575, 2, {425,319}},
+{ 135600, 2, {400,339}},
+{ 135625, 2, {625,217}},
+{ 135636, 2, {381,356}},
+{ 135660, 2, {380,357}},
+{ 135675, 2, {405,335}},
+{ 135720, 2, {377,360}},
+{ 135780, 2, {372,365}},
+{ 135792, 2, {369,368}},
+{ 135828, 2, {396,343}},
+{ 135850, 2, {418,325}},
+{ 135864, 2, {408,333}},
+{ 135880, 2, {395,344}},
+{ 135888, 2, {447,304}},
+{ 135915, 2, {533,255}},
+{ 135936, 2, {384,354}},
+{ 135975, 2, {525,259}},
+{ 136032, 2, {416,327}},
+{ 136045, 2, {455,299}},
+{ 136059, 2, {399,341}},
+{ 136080, 2, {378,360}},
+{ 136104, 2, {424,321}},
+{ 136125, 2, {375,363}},
+{ 136136, 2, {374,364}},
+{ 136160, 2, {370,368}},
+{ 136170, 2, {445,306}},
+{ 136188, 2, {388,351}},
+{ 136206, 2, {414,329}},
+{ 136224, 2, {387,352}},
+{ 136290, 2, {385,354}},
+{ 136320, 2, {384,355}},
+{ 136325, 2, {475,287}},
+{ 136344, 2, {437,312}},
+{ 136367, 2, {539,253}},
+{ 136400, 2, {400,341}},
+{ 136452, 2, {411,332}},
+{ 136458, 2, {378,361}},
+{ 136488, 2, {376,363}},
+{ 136500, 2, {375,364}},
+{ 136528, 2, {371,368}},
+{ 136620, 2, {396,345}},
+{ 136640, 2, {427,320}},
+{ 136656, 2, {438,312}},
+{ 136710, 2, {434,315}},
+{ 136752, 2, {407,336}},
+{ 136764, 2, {393,348}},
+{ 136776, 2, {417,328}},
+{ 136800, 2, {380,360}},
+{ 136850, 2, {391,350}},
+{ 136851, 2, {377,363}},
+{ 136880, 2, {464,295}},
+{ 136896, 2, {372,368}},
+{ 136899, 2, {371,369}},
+{ 136950, 2, {415,330}},
+{ 136956, 2, {404,339}},
+{ 137020, 2, {403,340}},
+{ 137052, 2, {423,324}},
+{ 137085, 2, {481,285}},
+{ 137088, 2, {384,357}},
+{ 137160, 2, {381,360}},
+{ 137196, 2, {412,333}},
+{ 137214, 2, {378,363}},
+{ 137228, 2, {377,364}},
+{ 137240, 2, {376,365}},
+{ 137241, 2, {391,351}},
+{ 137256, 2, {399,344}},
+{ 137268, 2, {372,369}},
+{ 137270, 2, {371,370}},
+{ 137275, 2, {425,323}},
+{ 137280, 2, {390,352}},
+{ 137340, 2, {420,327}},
+{ 137385, 2, {387,355}},
+{ 137460, 2, {395,348}},
+{ 137475, 2, {423,325}},
+{ 137529, 2, {413,333}},
+{ 137592, 2, {378,364}},
+{ 137616, 2, {376,366}},
+{ 137640, 2, {372,370}},
+{ 137676, 2, {447,308}},
+{ 137700, 2, {405,340}},
+{ 137712, 2, {453,304}},
+{ 137760, 2, {410,336}},
+{ 137772, 2, {387,356}},
+{ 137800, 2, {424,325}},
+{ 137826, 2, {403,342}},
+{ 137940, 2, {380,363}},
+{ 137970, 2, {378,365}},
+{ 138000, 2, {375,368}},
+{ 138012, 2, {372,371}},
+{ 138040, 2, {406,340}},
+{ 138096, 2, {411,336}},
+{ 138105, 2, {405,341}},
+{ 138180, 2, {420,329}},
+{ 138195, 2, {415,333}},
+{ 138229, 2, {403,343}},
+{ 138240, 2, {384,360}},
+{ 138288, 2, {402,344}},
+{ 138312, 2, {408,339}},
+{ 138336, 2, {393,352}},
+{ 138444, 2, {417,332}},
+{ 138446, 2, {406,341}},
+{ 138450, 2, {390,355}},
+{ 138516, 2, {388,357}},
+{ 138528, 2, {416,333}},
+{ 138567, 2, {429,323}},
+{ 138600, 2, {385,360}},
+{ 138624, 2, {384,361}},
+{ 138645, 2, {395,351}},
+{ 138648, 2, {424,327}},
+{ 138663, 2, {497,279}},
+{ 138684, 2, {381,364}},
+{ 138736, 2, {377,368}},
+{ 138744, 2, {376,369}},
+{ 138768, 2, {392,354}},
+{ 138775, 2, {427,325}},
+{ 138824, 2, {469,296}},
+{ 138852, 2, {399,348}},
+{ 138880, 2, {434,320}},
+{ 138908, 2, {451,308}},
+{ 138915, 2, {405,343}},
+{ 138985, 2, {385,361}},
+{ 138996, 2, {396,351}},
+{ 139035, 2, {403,345}},
+{ 139040, 2, {395,352}},
+{ 139104, 2, {378,368}},
+{ 139125, 2, {375,371}},
+{ 139150, 2, {506,275}},
+{ 139160, 2, {392,355}},
+{ 139194, 2, {407,342}},
+{ 139200, 2, {400,348}},
+{ 139230, 2, {390,357}},
+{ 139293, 2, {469,297}},
+{ 139320, 2, {387,360}},
+{ 139356, 2, {441,316}},
+{ 139360, 2, {416,335}},
+{ 139380, 2, {404,345}},
+{ 139392, 2, {384,363}},
+{ 139440, 2, {415,336}},
+{ 139464, 2, {447,312}},
+{ 139496, 2, {376,371}},
+{ 139500, 2, {375,372}},
+{ 139524, 2, {453,308}},
+{ 139536, 2, {408,342}},
+{ 139587, 2, {391,357}},
+{ 139601, 2, {407,343}},
+{ 139650, 2, {399,350}},
+{ 139668, 2, {412,339}},
+{ 139725, 2, {405,345}},
+{ 139728, 2, {426,328}},
+{ 139740, 2, {411,340}},
+{ 139776, 2, {384,364}},
+{ 139825, 2, {425,329}},
+{ 139830, 2, {395,354}},
+{ 139860, 2, {378,370}},
+{ 139908, 2, {393,356}},
+{ 139920, 2, {424,330}},
+{ 139944, 2, {392,357}},
+{ 139956, 2, {428,327}},
+{ 139965, 2, {465,301}},
+{ 139995, 2, {459,305}},
+{ 140000, 2, {400,350}},
+{ 140049, 2, {399,351}},
+{ 140056, 2, {427,328}},
+{ 140070, 2, {406,345}},
+{ 140112, 2, {417,336}},
+{ 140160, 2, {384,365}},
+{ 140175, 2, {445,315}},
+{ 140208, 2, {381,368}},
+{ 140220, 2, {380,369}},
+{ 140238, 2, {378,371}},
+{ 140250, 2, {375,374}},
+{ 140360, 2, {440,319}},
+{ 140400, 2, {390,360}},
+{ 140415, 2, {407,345}},
+{ 140420, 2, {413,340}},
+{ 140436, 2, {423,332}},
+{ 140448, 2, {399,352}},
+{ 140544, 2, {384,366}},
+{ 140580, 2, {396,355}},
+{ 140630, 2, {410,343}},
+{ 140679, 2, {441,319}},
+{ 140712, 2, {429,328}},
+{ 140715, 2, {477,295}},
+{ 140760, 2, {391,360}},
+{ 140777, 2, {637,221}},
+{ 140790, 2, {390,361}},
+{ 140844, 2, {388,363}},
+{ 140868, 2, {387,364}},
+{ 140910, 2, {385,366}},
+{ 140940, 2, {405,348}},
+{ 140980, 2, {380,371}},
+{ 140998, 2, {377,374}},
+{ 141000, 2, {376,375}},
+{ 141024, 2, {416,339}},
+{ 141050, 2, {403,350}},
+{ 141075, 2, {475,297}},
+{ 141120, 2, {392,360}},
+{ 141174, 2, {414,341}},
+{ 141192, 2, {424,333}},
+{ 141252, 2, {447,316}},
+{ 141255, 2, {387,365}},
+{ 141264, 2, {432,327}},
+{ 141336, 2, {453,312}},
+{ 141372, 2, {378,374}},
+{ 141375, 2, {377,375}},
+{ 141384, 2, {411,344}},
+{ 141414, 2, {481,294}},
+{ 141440, 2, {416,340}},
+{ 141453, 2, {403,351}},
+{ 141470, 2, {430,329}},
+{ 141480, 2, {393,360}},
+{ 141504, 2, {402,352}},
+{ 141510, 2, {445,318}},
+{ 141512, 2, {392,361}},
+{ 141520, 2, {464,305}},
+{ 141525, 2, {425,333}},
+{ 141600, 2, {400,354}},
+{ 141610, 2, {490,289}},
+{ 141636, 2, {407,348}},
+{ 141680, 2, {385,368}},
+{ 141696, 2, {384,369}},
+{ 141705, 2, {423,335}},
+{ 141732, 2, {381,372}},
+{ 141750, 2, {378,375}},
+{ 141780, 2, {417,340}},
+{ 141804, 2, {404,351}},
+{ 141856, 2, {403,352}},
+{ 141930, 2, {415,342}},
+{ 141933, 2, {391,363}},
+{ 142000, 2, {400,355}},
+{ 142002, 2, {414,343}},
+{ 142025, 2, {437,325}},
+{ 142040, 2, {424,335}},
+{ 142044, 2, {399,356}},
+{ 142065, 2, {385,369}},
+{ 142072, 2, {413,344}},
+{ 142080, 2, {384,370}},
+{ 142100, 2, {406,350}},
+{ 142128, 2, {378,376}},
+{ 142140, 2, {412,345}},
+{ 142175, 2, {517,275}},
+{ 142191, 2, {427,333}},
+{ 142200, 2, {395,360}},
+{ 142272, 2, {416,342}},
+{ 142290, 2, {459,310}},
+{ 142296, 2, {392,363}},
+{ 142324, 2, {391,364}},
+{ 142350, 2, {390,365}},
+{ 142380, 2, {420,339}},
+{ 142416, 2, {387,368}},
+{ 142428, 2, {429,332}},
+{ 142464, 2, {384,371}},
+{ 142485, 2, {413,345}},
+{ 142500, 2, {380,375}},
+{ 142506, 2, {378,377}},
+{ 142524, 2, {428,333}},
+{ 142545, 2, {559,255}},
+{ 142569, 2, {511,279}},
+{ 142576, 2, {469,304}},
+{ 142590, 2, {485,294}},
+{ 142680, 2, {410,348}},
+{ 142710, 2, {402,355}},
+{ 142760, 2, {415,344}},
+{ 142766, 2, {442,323}},
+{ 142800, 2, {400,357}},
+{ 142848, 2, {384,372}},
+{ 142857, 2, {407,351}},
+{ 142912, 2, {406,352}},
+{ 142956, 2, {396,361}},
+{ 142975, 2, {475,301}},
+{ 143000, 2, {440,325}},
+{ 143028, 2, {411,348}},
+{ 143040, 2, {447,320}},
+{ 143052, 2, {393,364}},
+{ 143055, 2, {495,289}},
+{ 143080, 2, {392,365}},
+{ 143115, 2, {435,329}},
+{ 143136, 2, {426,336}},
+{ 143143, 2, {847,169}},
+{ 143148, 2, {453,316}},
+{ 143172, 2, {388,369}},
+{ 143208, 2, {408,351}},
+{ 143220, 2, {385,372}},
+{ 143256, 2, {381,376}},
+{ 143260, 2, {380,377}},
+{ 143264, 2, {407,352}},
+{ 143325, 2, {441,325}},
+{ 143374, 2, {418,343}},
+{ 143448, 2, {417,344}},
+{ 143451, 2, {483,297}},
+{ 143472, 2, {392,366}},
+{ 143520, 2, {390,368}},
+{ 143577, 2, {387,371}},
+{ 143616, 2, {384,374}},
+{ 143640, 2, {380,378}},
+{ 143664, 2, {438,328}},
+{ 143736, 2, {424,339}},
+{ 143748, 2, {396,363}},
+{ 143775, 2, {405,355}},
+{ 143820, 2, {423,340}},
+{ 143840, 2, {464,310}},
+{ 143856, 2, {432,333}},
+{ 143871, 2, {403,357}},
+{ 143960, 2, {472,305}},
+{ 143964, 2, {387,372}},
+{ 143990, 2, {385,374}},
+{ 144000, 2, {384,375}},
+{ 144045, 2, {485,297}},
+{ 144060, 2, {420,343}},
+{ 144144, 2, {396,364}},
+{ 144180, 2, {405,356}},
+{ 144228, 2, {404,357}},
+{ 144305, 2, {589,245}},
+{ 144320, 2, {410,352}},
+{ 144333, 2, {553,261}},
+{ 144375, 2, {385,375}},
+{ 144420, 2, {415,348}},
+{ 144432, 2, {408,354}},
+{ 144540, 2, {396,365}},
+{ 144550, 2, {413,350}},
+{ 144570, 2, {395,366}},
+{ 144585, 2, {405,357}},
+{ 144612, 2, {412,351}},
+{ 144624, 2, {393,368}},
+{ 144648, 2, {392,369}},
+{ 144672, 2, {411,352}},
+{ 144690, 2, {390,371}},
+{ 144704, 2, {448,323}},
+{ 144716, 2, {484,299}},
+{ 144720, 2, {402,360}},
+{ 144760, 2, {385,376}},
+{ 144768, 2, {384,377}},
+{ 144780, 2, {381,380}},
+{ 144828, 2, {447,324}},
+{ 144840, 2, {408,355}},
+{ 144900, 2, {414,350}},
+{ 144925, 2, {425,341}},
+{ 144960, 2, {453,320}},
+{ 144963, 2, {413,351}},
+{ 145008, 2, {424,342}},
+{ 145044, 2, {459,316}},
+{ 145089, 2, {423,343}},
+{ 145092, 2, {428,339}},
+{ 145116, 2, {417,348}},
+{ 145145, 2, {385,377}},
+{ 145152, 2, {384,378}},
+{ 145180, 2, {427,340}},
+{ 145188, 2, {436,333}},
+{ 145200, 2, {400,363}},
+{ 145222, 2, {451,322}},
+{ 145236, 2, {399,364}},
+{ 145299, 2, {407,357}},
+{ 145350, 2, {425,342}},
+{ 145360, 2, {395,368}},
+{ 145376, 2, {413,352}},
+{ 145432, 2, {392,371}},
+{ 145475, 2, {529,275}},
+{ 145485, 2, {477,305}},
+{ 145500, 2, {388,375}},
+{ 145512, 2, {387,376}},
+{ 145530, 2, {385,378}},
+{ 145600, 2, {400,364}},
+{ 145656, 2, {408,357}},
+{ 145665, 2, {415,351}},
+{ 145684, 2, {473,308}},
+{ 145728, 2, {396,368}},
+{ 145755, 2, {395,369}},
+{ 145775, 2, {425,343}},
+{ 145800, 2, {405,360}},
+{ 145860, 2, {390,374}},
+{ 145920, 2, {384,380}},
+{ 146000, 2, {400,365}},
+{ 146016, 2, {416,351}},
+{ 146025, 2, {495,295}},
+{ 146076, 2, {444,329}},
+{ 146080, 2, {415,352}},
+{ 146124, 2, {396,369}},
+{ 146160, 2, {406,360}},
+{ 146196, 2, {393,372}},
+{ 146200, 2, {425,344}},
+{ 146205, 2, {405,361}},
+{ 146224, 2, {481,304}},
+{ 146234, 2, {391,374}},
+{ 146280, 2, {424,345}},
+{ 146289, 2, {403,363}},
+{ 146304, 2, {384,381}},
+{ 146316, 2, {411,356}},
+{ 146400, 2, {400,366}},
+{ 146412, 2, {441,332}},
+{ 146421, 2, {459,319}},
+{ 146448, 2, {432,339}},
+{ 146520, 2, {396,370}},
+{ 146523, 2, {507,289}},
+{ 146544, 2, {426,344}},
+{ 146575, 2, {451,325}},
+{ 146608, 2, {392,374}},
+{ 146616, 2, {447,328}},
+{ 146625, 2, {391,375}},
+{ 146640, 2, {390,376}},
+{ 146652, 2, {404,363}},
+{ 146692, 2, {403,364}},
+{ 146718, 2, {418,351}},
+{ 146730, 2, {402,365}},
+{ 146740, 2, {460,319}},
+{ 146772, 2, {453,324}},
+{ 146784, 2, {417,352}},
+{ 146832, 2, {399,368}},
+{ 146850, 2, {445,330}},
+{ 146888, 2, {427,344}},
+{ 146910, 2, {415,354}},
+{ 146916, 2, {396,371}},
+{ 146940, 2, {395,372}},
+{ 146965, 2, {455,323}},
+{ 146970, 2, {414,355}},
+{ 147000, 2, {392,375}},
+{ 147015, 2, {405,363}},
+{ 147030, 2, {390,377}},
+{ 147060, 2, {387,380}},
+{ 147084, 2, {412,357}},
+{ 147112, 2, {497,296}},
+{ 147136, 2, {418,352}},
+{ 147147, 2, {429,343}},
+{ 147168, 2, {438,336}},
+{ 147204, 2, {423,348}},
+{ 147264, 2, {416,354}},
+{ 147288, 2, {408,361}},
+{ 147315, 2, {427,345}},
+{ 147345, 2, {517,285}},
+{ 147400, 2, {440,335}},
+{ 147420, 2, {390,378}},
+{ 147490, 2, {430,343}},
+{ 147560, 2, {434,340}},
+{ 147576, 2, {429,344}},
+{ 147600, 2, {400,369}},
+{ 147609, 2, {497,297}},
+{ 147660, 2, {428,345}},
+{ 147680, 2, {416,355}},
+{ 147706, 2, {437,338}},
+{ 147735, 2, {441,335}},
+{ 147744, 2, {432,342}},
+{ 147768, 2, {393,376}},
+{ 147784, 2, {392,377}},
+{ 147798, 2, {391,378}},
+{ 147804, 2, {436,339}},
+{ 147825, 2, {405,365}},
+{ 147828, 2, {388,381}},
+{ 147840, 2, {385,384}},
+{ 147900, 2, {425,348}},
+{ 147936, 2, {402,368}},
+{ 147960, 2, {411,360}},
+{ 147968, 2, {512,289}},
+{ 148000, 2, {400,370}},
+{ 148092, 2, {492,301}},
+{ 148104, 2, {396,374}},
+{ 148148, 2, {407,364}},
+{ 148176, 2, {392,378}},
+{ 148185, 2, {445,333}},
+{ 148257, 2, {459,323}},
+{ 148304, 2, {403,368}},
+{ 148335, 2, {435,341}},
+{ 148400, 2, {400,371}},
+{ 148404, 2, {447,332}},
+{ 148410, 2, {485,306}},
+{ 148428, 2, {399,372}},
+{ 148452, 2, {417,356}},
+{ 148500, 2, {396,375}},
+{ 148520, 2, {395,376}},
+{ 148580, 2, {391,380}},
+{ 148584, 2, {453,328}},
+{ 148608, 2, {387,384}},
+{ 148680, 2, {413,360}},
+{ 148716, 2, {459,324}},
+{ 148720, 2, {440,338}},
+{ 148770, 2, {435,342}},
+{ 148800, 2, {400,372}},
+{ 148824, 2, {424,351}},
+{ 148836, 2, {471,316}},
+{ 148920, 2, {408,365}},
+{ 148925, 2, {575,259}},
+{ 148995, 2, {387,385}},
+{ 149040, 2, {405,368}},
+{ 149058, 2, {441,338}},
+{ 149076, 2, {404,369}},
+{ 149100, 2, {420,355}},
+{ 149160, 2, {440,339}},
+{ 149175, 2, {425,351}},
+{ 149184, 2, {444,336}},
+{ 149205, 2, {435,343}},
+{ 149292, 2, {396,377}},
+{ 149310, 2, {395,378}},
+{ 149328, 2, {408,366}},
+{ 149340, 2, {393,380}},
+{ 149352, 2, {392,381}},
+{ 149400, 2, {415,360}},
+{ 149408, 2, {406,368}},
+{ 149435, 2, {605,247}},
+{ 149450, 2, {427,350}},
+{ 149556, 2, {412,363}},
+{ 149600, 2, {400,374}},
+{ 149604, 2, {411,364}},
+{ 149625, 2, {399,375}},
+{ 149640, 2, {430,348}},
+{ 149730, 2, {434,345}},
+{ 149760, 2, {390,384}},
+{ 149776, 2, {407,368}},
+{ 149850, 2, {405,370}},
+{ 149877, 2, {427,351}},
+{ 149891, 2, {437,343}},
+{ 149940, 2, {420,357}},
+{ 149952, 2, {426,352}},
+{ 150000, 2, {400,375}},
+{ 150024, 2, {399,376}},
+{ 150040, 2, {440,341}},
+{ 150080, 2, {448,335}},
+{ 150096, 2, {424,354}},
+{ 150120, 2, {417,360}},
+{ 150144, 2, {391,384}},
+{ 150150, 2, {390,385}},
+{ 150156, 2, {388,387}},
+{ 150165, 2, {423,355}},
+{ 150176, 2, {416,361}},
+{ 150192, 2, {447,336}},
+{ 150228, 2, {428,351}},
+{ 150255, 2, {405,371}},
+{ 150304, 2, {427,352}},
+{ 150336, 2, {432,348}},
+{ 150381, 2, {441,341}},
+{ 150396, 2, {453,332}},
+{ 150420, 2, {436,345}},
+{ 150423, 2, {399,377}},
+{ 150450, 2, {425,354}},
+{ 150480, 2, {396,380}},
+{ 150516, 2, {444,339}},
+{ 150520, 2, {424,355}},
+{ 150528, 2, {392,384}},
+{ 150535, 2, {391,385}},
+{ 150552, 2, {408,369}},
+{ 150588, 2, {423,356}},
+{ 150660, 2, {405,372}},
+{ 150672, 2, {438,344}},
+{ 150675, 2, {525,287}},
+{ 150720, 2, {471,320}},
+{ 150722, 2, {403,374}},
+{ 150800, 2, {400,377}},
+{ 150822, 2, {399,378}},
+{ 150858, 2, {493,306}},
+{ 150876, 2, {396,381}},
+{ 150880, 2, {410,368}},
+{ 150912, 2, {393,384}},
+{ 150920, 2, {392,385}},
+{ 150960, 2, {408,370}},
+{ 150975, 2, {495,305}},
+{ 151008, 2, {416,363}},
+{ 151050, 2, {475,318}},
+{ 151088, 2, {497,304}},
+{ 151110, 2, {414,365}},
+{ 151125, 2, {403,375}},
+{ 151152, 2, {402,376}},
+{ 151200, 2, {400,378}},
+{ 151248, 2, {411,368}},
+{ 151256, 2, {511,296}},
+{ 151335, 2, {513,295}},
+{ 151340, 2, {460,329}},
+{ 151360, 2, {430,352}},
+{ 151368, 2, {408,371}},
+{ 151380, 2, {435,348}},
+{ 151404, 2, {407,372}},
+{ 151470, 2, {405,374}},
+{ 151500, 2, {404,375}},
+{ 151515, 2, {455,333}},
+{ 151525, 2, {475,319}},
+{ 151536, 2, {451,336}},
+{ 151606, 2, {442,343}},
+{ 151620, 2, {399,380}},
+{ 151632, 2, {432,351}},
+{ 151641, 2, {581,261}},
+{ 151680, 2, {395,384}},
+{ 151704, 2, {392,387}},
+{ 151767, 2, {511,297}},
+{ 151788, 2, {417,364}},
+{ 151800, 2, {440,345}},
+{ 151840, 2, {416,365}},
+{ 151872, 2, {448,339}},
+{ 151875, 2, {405,375}},
+{ 151890, 2, {415,366}},
+{ 151900, 2, {434,350}},
+{ 151905, 2, {533,285}},
+{ 151980, 2, {447,340}},
+{ 151984, 2, {413,368}},
+{ 152028, 2, {412,369}},
+{ 152064, 2, {396,384}},
+{ 152110, 2, {410,371}},
+{ 152152, 2, {418,364}},
+{ 152190, 2, {445,342}},
+{ 152208, 2, {453,336}},
+{ 152250, 2, {406,375}},
+{ 152256, 2, {416,366}},
+{ 152280, 2, {405,376}},
+{ 152292, 2, {444,343}},
+{ 152306, 2, {473,322}},
+{ 152320, 2, {448,340}},
+{ 152334, 2, {403,378}},
+{ 152352, 2, {414,368}},
+{ 152388, 2, {459,332}},
+{ 152397, 2, {413,369}},
+{ 152400, 2, {400,381}},
+{ 152460, 2, {396,385}},
+{ 152484, 2, {393,388}},
+{ 152490, 2, {391,390}},
+{ 152520, 2, {410,372}},
+{ 152604, 2, {471,324}},
+{ 152625, 2, {407,375}},
+{ 152685, 2, {405,377}},
+{ 152720, 2, {415,368}},
+{ 152724, 2, {429,356}},
+{ 152768, 2, {434,352}},
+{ 152775, 2, {485,315}},
+{ 152796, 2, {428,357}},
+{ 152810, 2, {413,370}},
+{ 152865, 2, {395,387}},
+{ 152880, 2, {392,390}},
+{ 152892, 2, {411,372}},
+{ 152928, 2, {432,354}},
+{ 152950, 2, {437,350}},
+{ 152985, 2, {465,329}},
+{ 153000, 2, {408,375}},
+{ 153036, 2, {436,351}},
+{ 153120, 2, {435,352}},
+{ 153125, 2, {625,245}},
+{ 153135, 2, {415,369}},
+{ 153140, 2, {403,380}},
+{ 153180, 2, {414,370}},
+{ 153216, 2, {399,384}},
+{ 153252, 2, {396,387}},
+{ 153272, 2, {392,391}},
+{ 153300, 2, {420,365}},
+{ 153360, 2, {426,360}},
+{ 153387, 2, {437,351}},
+{ 153400, 2, {472,325}},
+{ 153425, 2, {425,361}},
+{ 153450, 2, {450,341}},
+{ 153456, 2, {417,368}},
+{ 153468, 2, {406,378}},
+{ 153504, 2, {416,369}},
+{ 153594, 2, {414,371}},
+{ 153600, 2, {400,384}},
+{ 153636, 2, {413,372}},
+{ 153725, 2, {473,325}},
+{ 153748, 2, {476,323}},
+{ 153765, 2, {459,335}},
+{ 153768, 2, {447,344}},
+{ 153816, 2, {408,377}},
+{ 153832, 2, {469,328}},
+{ 153846, 2, {407,378}},
+{ 153900, 2, {405,380}},
+{ 153912, 2, {424,363}},
+{ 153920, 2, {416,370}},
+{ 153924, 2, {404,381}},
+{ 153972, 2, {423,364}},
+{ 154000, 2, {400,385}},
+{ 154020, 2, {453,340}},
+{ 154050, 2, {395,390}},
+{ 154056, 2, {393,392}},
+{ 154077, 2, {483,319}},
+{ 154154, 2, {539,286}},
+{ 154176, 2, {438,352}},
+{ 154224, 2, {408,378}},
+{ 154230, 2, {485,318}},
+{ 154280, 2, {406,380}},
+{ 154287, 2, {553,279}},
+{ 154336, 2, {416,371}},
+{ 154368, 2, {402,384}},
+{ 154380, 2, {415,372}},
+{ 154395, 2, {423,365}},
+{ 154440, 2, {396,390}},
+{ 154488, 2, {471,328}},
+{ 154500, 2, {412,375}},
+{ 154530, 2, {505,306}},
+{ 154536, 2, {411,376}},
+{ 154548, 2, {477,324}},
+{ 154560, 2, {420,368}},
+{ 154660, 2, {407,380}},
+{ 154693, 2, {451,343}},
+{ 154752, 2, {403,384}},
+{ 154760, 2, {424,365}},
+{ 154770, 2, {402,385}},
+{ 154800, 2, {400,387}},
+{ 154812, 2, {399,388}},
+{ 154836, 2, {396,391}},
+{ 154840, 2, {395,392}},
+{ 154860, 2, {435,356}},
+{ 154869, 2, {429,361}},
+{ 154875, 2, {413,375}},
+{ 154882, 2, {481,322}},
+{ 154980, 2, {410,378}},
+{ 155025, 2, {477,325}},
+{ 155034, 2, {486,319}},
+{ 155040, 2, {408,380}},
+{ 155124, 2, {417,372}},
+{ 155142, 2, {442,351}},
+{ 155155, 2, {403,385}},
+{ 155184, 2, {424,366}},
+{ 155250, 2, {414,375}},
+{ 155288, 2, {413,376}},
+{ 155344, 2, {511,304}},
+{ 155364, 2, {428,363}},
+{ 155400, 2, {420,370}},
+{ 155440, 2, {464,335}},
+{ 155448, 2, {408,381}},
+{ 155472, 2, {474,328}},
+{ 155490, 2, {426,365}},
+{ 155520, 2, {405,384}},
+{ 155550, 2, {425,366}},
+{ 155556, 2, {447,348}},
+{ 155584, 2, {416,374}},
+{ 155595, 2, {451,345}},
+{ 155610, 2, {399,390}},
+{ 155628, 2, {396,393}},
+{ 155652, 2, {436,357}},
+{ 155664, 2, {414,376}},
+{ 155760, 2, {440,354}},
+{ 155771, 2, {539,289}},
+{ 155805, 2, {611,255}},
+{ 155820, 2, {420,371}},
+{ 155832, 2, {453,344}},
+{ 155844, 2, {444,351}},
+{ 155904, 2, {406,384}},
+{ 155925, 2, {405,385}},
+{ 155940, 2, {452,345}},
+{ 155952, 2, {432,361}},
+{ 156000, 2, {400,390}},
+{ 156009, 2, {399,391}},
+{ 156040, 2, {415,376}},
+{ 156060, 2, {459,340}},
+{ 156078, 2, {414,377}},
+{ 156114, 2, {413,378}},
+{ 156156, 2, {429,364}},
+{ 156177, 2, {469,333}},
+{ 156180, 2, {411,380}},
+{ 156195, 2, {445,351}},
+{ 156200, 2, {440,355}},
+{ 156275, 2, {475,329}},
+{ 156288, 2, {407,384}},
+{ 156325, 2, {481,325}},
+{ 156348, 2, {404,387}},
+{ 156372, 2, {471,332}},
+{ 156400, 2, {400,391}},
+{ 156408, 2, {399,392}},
+{ 156420, 2, {396,395}},
+{ 156456, 2, {424,369}},
+{ 156465, 2, {513,305}},
+{ 156519, 2, {459,341}},
+{ 156555, 2, {441,355}},
+{ 156600, 2, {435,360}},
+{ 156672, 2, {408,384}},
+{ 156695, 2, {407,385}},
+{ 156702, 2, {533,294}},
+{ 156750, 2, {418,375}},
+{ 156768, 2, {426,368}},
+{ 156792, 2, {417,376}},
+{ 156800, 2, {400,392}},
+{ 156825, 2, {425,369}},
+{ 156832, 2, {416,377}},
+{ 156860, 2, {460,341}},
+{ 156870, 2, {415,378}},
+{ 156933, 2, {423,371}},
+{ 156940, 2, {413,380}},
+{ 156948, 2, {451,348}},
+{ 156972, 2, {412,381}},
+{ 156996, 2, {441,356}},
+{ 157080, 2, {408,385}},
+{ 157113, 2, {529,297}},
+{ 157136, 2, {427,368}},
+{ 157140, 2, {405,388}},
+{ 157170, 2, {403,390}},
+{ 157200, 2, {400,393}},
+{ 157248, 2, {416,378}},
+{ 157325, 2, {725,217}},
+{ 157339, 2, {637,247}},
+{ 157344, 2, {447,352}},
+{ 157356, 2, {423,372}},
+{ 157440, 2, {410,384}},
+{ 157472, 2, {518,304}},
+{ 157500, 2, {420,375}},
+{ 157530, 2, {445,354}},
+{ 157563, 2, {427,369}},
+{ 157584, 2, {402,392}},
+{ 157586, 2, {418,377}},
+{ 157644, 2, {453,348}},
+{ 157675, 2, {425,371}},
+{ 157680, 2, {432,365}},
+{ 157780, 2, {460,343}},
+{ 157824, 2, {411,384}},
+{ 157872, 2, {429,368}},
+{ 157896, 2, {408,387}},
+{ 157932, 2, {428,369}},
+{ 157950, 2, {405,390}},
+{ 157976, 2, {403,392}},
+{ 157990, 2, {427,370}},
+{ 158000, 2, {400,395}},
+{ 158004, 2, {399,396}},
+{ 158015, 2, {715,221}},
+{ 158025, 2, {525,301}},
+{ 158080, 2, {416,380}},
+{ 158100, 2, {425,372}},
+{ 158112, 2, {432,366}},
+{ 158120, 2, {472,335}},
+{ 158175, 2, {475,333}},
+{ 158224, 2, {464,341}},
+{ 158240, 2, {430,368}},
+{ 158256, 2, {471,336}},
+{ 158268, 2, {436,363}},
+{ 158270, 2, {490,323}},
+{ 158340, 2, {406,390}},
+{ 158355, 2, {405,391}},
+{ 158364, 2, {477,332}},
+{ 158400, 2, {400,396}},
+{ 158424, 2, {483,328}},
+{ 158460, 2, {417,380}},
+{ 158496, 2, {416,381}},
+{ 158508, 2, {444,357}},
+{ 158592, 2, {413,384}},
+{ 158600, 2, {488,325}},
+{ 158631, 2, {437,363}},
+{ 158652, 2, {452,351}},
+{ 158730, 2, {407,390}},
+{ 158752, 2, {451,352}},
+{ 158760, 2, {405,392}},
+{ 158772, 2, {404,393}},
+{ 158790, 2, {402,395}},
+{ 158844, 2, {427,372}},
+{ 158928, 2, {462,344}},
+{ 158976, 2, {414,384}},
+{ 159000, 2, {424,375}},
+{ 159030, 2, {465,342}},
+{ 159040, 2, {448,355}},
+{ 159048, 2, {423,376}},
+{ 159068, 2, {437,364}},
+{ 159075, 2, {505,315}},
+{ 159120, 2, {408,390}},
+{ 159132, 2, {447,356}},
+{ 159250, 2, {455,350}},
+{ 159264, 2, {474,336}},
+{ 159285, 2, {555,287}},
+{ 159315, 2, {559,285}},
+{ 159360, 2, {415,384}},
+{ 159390, 2, {414,385}},
+{ 159408, 2, {432,369}},
+{ 159444, 2, {412,387}},
+{ 159456, 2, {453,352}},
+{ 159460, 2, {469,340}},
+{ 159468, 2, {411,388}},
+{ 159495, 2, {465,343}},
+{ 159500, 2, {500,319}},
+{ 159528, 2, {408,391}},
+{ 159530, 2, {430,371}},
+{ 159544, 2, {407,392}},
+{ 159562, 2, {442,361}},
+{ 159588, 2, {403,396}},
+{ 159600, 2, {400,399}},
+{ 159705, 2, {455,351}},
+{ 159712, 2, {434,368}},
+{ 159720, 2, {440,363}},
+{ 159732, 2, {459,348}},
+{ 159795, 2, {477,335}},
+{ 159800, 2, {425,376}},
+{ 159831, 2, {413,387}},
+{ 159840, 2, {432,370}},
+{ 159885, 2, {495,323}},
+{ 159960, 2, {430,372}},
+{ 159975, 2, {405,395}},
+{ 160020, 2, {420,381}},
+{ 160050, 2, {485,330}},
+{ 160056, 2, {456,351}},
+{ 160080, 2, {435,368}},
+{ 160083, 2, {441,363}},
+{ 160125, 2, {427,375}},
+{ 160128, 2, {417,384}},
+{ 160140, 2, {471,340}},
+{ 160160, 2, {416,385}},
+{ 160176, 2, {426,376}},
+{ 160200, 2, {445,360}},
+{ 160225, 2, {425,377}},
+{ 160272, 2, {424,378}},
+{ 160325, 2, {583,275}},
+{ 160344, 2, {408,393}},
+{ 160356, 2, {483,332}},
+{ 160380, 2, {405,396}},
+{ 160392, 2, {489,328}},
+{ 160500, 2, {428,375}},
+{ 160512, 2, {418,384}},
+{ 160524, 2, {441,364}},
+{ 160552, 2, {427,376}},
+{ 160590, 2, {505,318}},
+{ 160600, 2, {440,365}},
+{ 160605, 2, {415,387}},
+{ 160650, 2, {425,378}},
+{ 160704, 2, {432,372}},
+{ 160740, 2, {423,380}},
+{ 160776, 2, {406,396}},
+{ 160797, 2, {403,399}},
+{ 160800, 2, {402,400}},
+{ 160875, 2, {429,375}},
+{ 160884, 2, {436,369}},
+{ 160888, 2, {442,364}},
+{ 160920, 2, {447,360}},
+{ 160930, 2, {418,385}},
+{ 160965, 2, {441,365}},
+{ 160992, 2, {416,387}},
+{ 161007, 2, {451,357}},
+{ 161040, 2, {440,366}},
+{ 161070, 2, {413,390}},
+{ 161112, 2, {411,392}},
+{ 161160, 2, {408,395}},
+{ 161161, 2, {539,299}},
+{ 161172, 2, {407,396}},
+{ 161184, 2, {438,368}},
+{ 161196, 2, {404,399}},
+{ 161200, 2, {403,400}},
+{ 161210, 2, {470,343}},
+{ 161262, 2, {527,306}},
+{ 161268, 2, {453,356}},
+{ 161280, 2, {420,384}},
+{ 161304, 2, {429,376}},
+{ 161336, 2, {469,344}},
+{ 161364, 2, {452,357}},
+{ 161385, 2, {435,371}},
+{ 161406, 2, {427,378}},
+{ 161424, 2, {456,354}},
+{ 161505, 2, {485,333}},
+{ 161544, 2, {424,381}},
+{ 161595, 2, {405,399}},
+{ 161700, 2, {420,385}},
+{ 161728, 2, {448,361}},
+{ 161733, 2, {429,377}},
+{ 161796, 2, {417,388}},
+{ 161805, 2, {469,345}},
+{ 161820, 2, {435,372}},
+{ 161850, 2, {415,390}},
+{ 161868, 2, {492,329}},
+{ 161875, 2, {625,259}},
+{ 161896, 2, {413,392}},
+{ 161916, 2, {412,393}},
+{ 161955, 2, {531,305}},
+{ 161975, 2, {475,341}},
+{ 162000, 2, {405,400}},
+{ 162024, 2, {471,344}},
+{ 162099, 2, {581,279}},
+{ 162162, 2, {429,378}},
+{ 162180, 2, {477,340}},
+{ 162225, 2, {515,315}},
+{ 162239, 2, {473,343}},
+{ 162240, 2, {416,390}},
+{ 162260, 2, {427,380}},
+{ 162288, 2, {414,392}},
+{ 162348, 2, {489,332}},
+{ 162360, 2, {410,396}},
+{ 162393, 2, {407,399}},
+{ 162400, 2, {406,400}},
+{ 162432, 2, {423,384}},
+{ 162450, 2, {450,361}},
+{ 162540, 2, {420,387}},
+{ 162624, 2, {448,363}},
+{ 162656, 2, {416,391}},
+{ 162680, 2, {415,392}},
+{ 162708, 2, {447,364}},
+{ 162750, 2, {434,375}},
+{ 162756, 2, {411,396}},
+{ 162792, 2, {408,399}},
+{ 162800, 2, {407,400}},
+{ 162855, 2, {423,385}},
+{ 162864, 2, {432,377}},
+{ 162870, 2, {445,366}},
+{ 162925, 2, {475,343}},
+{ 162945, 2, {459,355}},
+{ 163016, 2, {497,328}},
+{ 163020, 2, {418,390}},
+{ 163056, 2, {474,344}},
+{ 163068, 2, {428,381}},
+{ 163080, 2, {453,360}},
+{ 163185, 2, {473,345}},
+{ 163215, 2, {405,403}},
+{ 163240, 2, {424,385}},
+{ 163296, 2, {432,378}},
+{ 163350, 2, {450,363}},
+{ 163392, 2, {444,368}},
+{ 163404, 2, {459,356}},
+{ 163415, 2, {667,245}},
+{ 163438, 2, {418,391}},
+{ 163464, 2, {417,392}},
+{ 163480, 2, {488,335}},
+{ 163488, 2, {416,393}},
+{ 163500, 2, {436,375}},
+{ 163520, 2, {448,365}},
+{ 163530, 2, {414,395}},
+{ 163548, 2, {413,396}},
+{ 163560, 2, {435,376}},
+{ 163584, 2, {426,384}},
+{ 163592, 2, {484,338}},
+{ 163611, 2, {441,371}},
+{ 163618, 2, {406,403}},
+{ 163620, 2, {405,404}},
+{ 163647, 2, {513,319}},
+{ 163760, 2, {445,368}},
+{ 163761, 2, {507,323}},
+{ 163770, 2, {515,318}},
+{ 163836, 2, {444,369}},
+{ 163856, 2, {418,392}},
+{ 163875, 2, {437,375}},
+{ 163908, 2, {471,348}},
+{ 163968, 2, {427,384}},
+{ 164000, 2, {410,400}},
+{ 164010, 2, {426,385}},
+{ 164016, 2, {408,402}},
+{ 164052, 2, {434,378}},
+{ 164076, 2, {452,363}},
+{ 164088, 2, {424,387}},
+{ 164124, 2, {423,388}},
+{ 164150, 2, {469,350}},
+{ 164160, 2, {432,380}},
+{ 164164, 2, {451,364}},
+{ 164205, 2, {445,369}},
+{ 164220, 2, {420,391}},
+{ 164241, 2, {553,297}},
+{ 164255, 2, {455,361}},
+{ 164256, 2, {464,354}},
+{ 164304, 2, {489,336}},
+{ 164320, 2, {416,395}},
+{ 164340, 2, {415,396}},
+{ 164388, 2, {412,399}},
+{ 164400, 2, {411,400}},
+{ 164424, 2, {408,403}},
+{ 164430, 2, {406,405}},
+{ 164450, 2, {506,325}},
+{ 164475, 2, {425,387}},
+{ 164496, 2, {447,368}},
+{ 164502, 2, {481,342}},
+{ 164560, 2, {440,374}},
+{ 164592, 2, {432,381}},
+{ 164604, 2, {473,348}},
+{ 164619, 2, {469,351}},
+{ 164688, 2, {438,376}},
+{ 164703, 2, {483,341}},
+{ 164720, 2, {464,355}},
+{ 164724, 2, {444,371}},
+{ 164730, 2, {510,323}},
+{ 164736, 2, {416,396}},
+{ 164835, 2, {407,405}},
+{ 164892, 2, {453,364}},
+{ 164920, 2, {434,380}},
+{ 164934, 2, {441,374}},
+{ 164983, 2, {481,343}},
+{ 165000, 2, {440,375}},
+{ 165025, 2, {575,287}},
+{ 165048, 2, {529,312}},
+{ 165060, 2, {420,393}},
+{ 165088, 2, {469,352}},
+{ 165120, 2, {430,384}},
+{ 165132, 2, {417,396}},
+{ 165165, 2, {429,385}},
+{ 165200, 2, {413,400}},
+{ 165240, 2, {408,405}},
+{ 165242, 2, {407,406}},
+{ 165249, 2, {427,387}},
+{ 165300, 2, {435,380}},
+{ 165312, 2, {448,369}},
+{ 165360, 2, {424,390}},
+{ 165375, 2, {441,375}},
+{ 165376, 2, {512,323}},
+{ 165501, 2, {497,333}},
+{ 165528, 2, {418,396}},
+{ 165540, 2, {445,372}},
+{ 165600, 2, {414,400}},
+{ 165636, 2, {428,387}},
+{ 165648, 2, {408,406}},
+{ 165699, 2, {459,361}},
+{ 165726, 2, {486,341}},
+{ 165750, 2, {425,390}},
+{ 165760, 2, {448,370}},
+{ 165792, 2, {471,352}},
+{ 165816, 2, {423,392}},
+{ 165825, 2, {495,335}},
+{ 165870, 2, {485,342}},
+{ 165880, 2, {440,377}},
+{ 165888, 2, {432,384}},
+{ 165900, 2, {420,395}},
+{ 165945, 2, {481,345}},
+{ 165968, 2, {451,368}},
+{ 165984, 2, {416,399}},
+{ 165996, 2, {477,348}},
+{ 166000, 2, {415,400}},
+{ 166012, 2, {484,343}},
+{ 166044, 2, {411,404}},
+{ 166050, 2, {410,405}},
+{ 166056, 2, {408,407}},
+{ 166060, 2, {437,380}},
+{ 166116, 2, {436,381}},
+{ 166152, 2, {483,344}},
+{ 166155, 2, {583,285}},
+{ 166160, 2, {496,335}},
+{ 166175, 2, {425,391}},
+{ 166257, 2, {441,377}},
+{ 166260, 2, {489,340}},
+{ 166284, 2, {447,372}},
+{ 166452, 2, {429,388}},
+{ 166496, 2, {473,352}},
+{ 166500, 2, {444,375}},
+{ 166530, 2, {427,390}},
+{ 166600, 2, {425,392}},
+{ 166632, 2, {424,393}},
+{ 166650, 2, {505,330}},
+{ 166656, 2, {434,384}},
+{ 166704, 2, {453,368}},
+{ 166725, 2, {475,351}},
+{ 166788, 2, {452,369}},
+{ 166800, 2, {417,400}},
+{ 166830, 2, {415,402}},
+{ 166842, 2, {414,403}},
+{ 166848, 2, {474,352}},
+{ 166860, 2, {412,405}},
+{ 166896, 2, {456,366}},
+{ 166950, 2, {450,371}},
+{ 166980, 2, {460,363}},
+{ 166992, 2, {426,392}},
+{ 167040, 2, {435,384}},
+{ 167055, 2, {555,301}},
+{ 167076, 2, {442,378}},
+{ 167085, 2, {423,395}},
+{ 167184, 2, {432,387}},
+{ 167200, 2, {418,400}},
+{ 167232, 2, {416,402}},
+{ 167265, 2, {413,405}},
+{ 167280, 2, {410,408}},
+{ 167320, 2, {445,376}},
+{ 167328, 2, {498,336}},
+{ 167384, 2, {427,392}},
+{ 167440, 2, {455,368}},
+{ 167480, 2, {424,395}},
+{ 167508, 2, {423,396}},
+{ 167535, 2, {459,365}},
+{ 167552, 2, {448,374}},
+{ 167560, 2, {472,355}},
+{ 167580, 2, {420,399}},
+{ 167608, 2, {511,328}},
+{ 167620, 2, {493,340}},
+{ 167640, 2, {440,381}},
+{ 167648, 2, {416,403}},
+{ 167676, 2, {471,356}},
+{ 167688, 2, {411,408}},
+{ 167739, 2, {429,391}},
+{ 167772, 2, {451,372}},
+{ 167808, 2, {437,384}},
+{ 167895, 2, {455,369}},
+{ 168000, 2, {420,400}},
+{ 168025, 2, {517,325}},
+{ 168072, 2, {447,376}},
+{ 168075, 2, {415,405}},
+{ 168084, 2, {414,406}},
+{ 168150, 2, {475,354}},
+{ 168165, 2, {505,333}},
+{ 168168, 2, {429,392}},
+{ 168192, 2, {438,384}},
+{ 168204, 2, {428,393}},
+{ 168210, 2, {445,378}},
+{ 168216, 2, {489,344}},
+{ 168245, 2, {437,385}},
+{ 168264, 2, {456,369}},
+{ 168270, 2, {426,395}},
+{ 168300, 2, {425,396}},
+{ 168336, 2, {501,336}},
+{ 168432, 2, {464,363}},
+{ 168454, 2, {418,403}},
+{ 168468, 2, {417,404}},
+{ 168480, 2, {416,405}},
+{ 168498, 2, {414,407}},
+{ 168504, 2, {413,408}},
+{ 168516, 2, {453,372}},
+{ 168606, 2, {493,342}},
+{ 168630, 2, {438,385}},
+{ 168732, 2, {436,387}},
+{ 168756, 2, {492,343}},
+{ 168780, 2, {435,388}},
+{ 168831, 2, {481,351}},
+{ 168861, 2, {473,357}},
+{ 168896, 2, {416,406}},
+{ 168912, 2, {414,408}},
+{ 168948, 2, {468,361}},
+{ 168960, 2, {440,384}},
+{ 169000, 2, {500,338}},
+{ 169050, 2, {483,350}},
+{ 169065, 2, {585,289}},
+{ 169092, 2, {427,396}},
+{ 169099, 2, {493,343}},
+{ 169125, 2, {451,375}},
+{ 169164, 2, {444,381}},
+{ 169176, 2, {424,399}},
+{ 169200, 2, {423,400}},
+{ 169260, 2, {420,403}},
+{ 169290, 2, {418,405}},
+{ 169312, 2, {416,407}},
+{ 169320, 2, {415,408}},
+{ 169330, 2, {413,410}},
+{ 169332, 2, {412,411}},
+{ 169335, 2, {477,355}},
+{ 169344, 2, {432,392}},
+{ 169360, 2, {464,365}},
+{ 169400, 2, {440,385}},
+{ 169442, 2, {494,343}},
+{ 169500, 2, {452,375}},
+{ 169533, 2, {483,351}},
+{ 169560, 2, {471,360}},
+{ 169575, 2, {425,399}},
+{ 169728, 2, {416,408}},
+{ 169740, 2, {414,410}},
+{ 169764, 2, {516,329}},
+{ 169776, 2, {432,393}},
+{ 169785, 2, {441,385}},
+{ 169812, 2, {477,356}},
+{ 169824, 2, {464,366}},
+{ 169830, 2, {459,370}},
+{ 169860, 2, {447,380}},
+{ 169884, 2, {429,396}},
+{ 169950, 2, {515,330}},
+{ 170000, 2, {425,400}},
+{ 170016, 2, {462,368}},
+{ 170100, 2, {420,405}},
+{ 170136, 2, {417,408}},
+{ 170163, 2, {511,333}},
+{ 170170, 2, {442,385}},
+{ 170172, 2, {489,348}},
+{ 170235, 2, {485,351}},
+{ 170240, 2, {448,380}},
+{ 170280, 2, {430,396}},
+{ 170289, 2, {459,371}},
+{ 170328, 2, {453,376}},
+{ 170340, 2, {501,340}},
+{ 170400, 2, {426,400}},
+{ 170430, 2, {437,390}},
+{ 170448, 2, {424,402}},
+{ 170478, 2, {451,378}},
+{ 170496, 2, {444,384}},
+{ 170500, 2, {500,341}},
+{ 170520, 2, {420,406}},
+{ 170544, 2, {418,408}},
+{ 170560, 2, {416,410}},
+{ 170625, 2, {455,375}},
+{ 170640, 2, {432,395}},
+{ 170660, 2, {460,371}},
+{ 170688, 2, {448,381}},
+{ 170748, 2, {459,372}},
+{ 170772, 2, {428,399}},
+{ 170800, 2, {427,400}},
+{ 170850, 2, {425,402}},
+{ 170880, 2, {445,384}},
+{ 170892, 2, {423,404}},
+{ 170940, 2, {420,407}},
+{ 170968, 2, {497,344}},
+{ 170976, 2, {416,411}},
+{ 170982, 2, {414,413}},
+{ 171072, 2, {432,396}},
+{ 171080, 2, {455,376}},
+{ 171108, 2, {441,388}},
+{ 171216, 2, {464,369}},
+{ 171275, 2, {425,403}},
+{ 171304, 2, {437,392}},
+{ 171312, 2, {498,344}},
+{ 171336, 2, {472,363}},
+{ 171348, 2, {436,393}},
+{ 171444, 2, {471,364}},
+{ 171495, 2, {515,333}},
+{ 171520, 2, {512,335}},
+{ 171535, 2, {455,377}},
+{ 171600, 2, {429,400}},
+{ 171626, 2, {533,322}},
+{ 171648, 2, {447,384}},
+{ 171680, 2, {464,370}},
+{ 171690, 2, {485,354}},
+{ 171696, 2, {438,392}},
+{ 171717, 2, {481,357}},
+{ 171720, 2, {424,405}},
+{ 171804, 2, {417,412}},
+{ 171808, 2, {416,413}},
+{ 171810, 2, {415,414}},
+{ 171828, 2, {444,387}},
+{ 171836, 2, {476,361}},
+{ 171855, 2, {513,335}},
+{ 171864, 2, {434,396}},
+{ 171912, 2, {456,377}},
+{ 171925, 2, {529,325}},
+{ 171941, 2, {539,319}},
+{ 171948, 2, {483,356}},
+{ 172000, 2, {430,400}},
+{ 172040, 2, {440,391}},
+{ 172125, 2, {425,405}},
+{ 172128, 2, {489,352}},
+{ 172140, 2, {453,380}},
+{ 172172, 2, {473,364}},
+{ 172200, 2, {420,410}},
+{ 172212, 2, {452,381}},
+{ 172215, 2, {445,387}},
+{ 172224, 2, {416,414}},
+{ 172260, 2, {435,396}},
+{ 172280, 2, {472,365}},
+{ 172344, 2, {501,344}},
+{ 172368, 2, {432,399}},
+{ 172380, 2, {442,390}},
+{ 172431, 2, {441,391}},
+{ 172500, 2, {460,375}},
+{ 172515, 2, {465,371}},
+{ 172550, 2, {425,406}},
+{ 172557, 2, {581,297}},
+{ 172575, 2, {531,325}},
+{ 172584, 2, {423,408}},
+{ 172592, 2, {469,368}},
+{ 172608, 2, {464,372}},
+{ 172620, 2, {420,411}},
+{ 172640, 2, {416,415}},
+{ 172692, 2, {468,369}},
+{ 172710, 2, {505,342}},
+{ 172725, 2, {525,329}},
+{ 172752, 2, {472,366}},
+{ 172788, 2, {462,374}},
+{ 172800, 2, {432,400}},
+{ 172822, 2, {442,391}},
+{ 172872, 2, {441,392}},
+{ 172887, 2, {429,403}},
+{ 172920, 2, {440,393}},
+{ 172935, 2, {427,405}},
+{ 172975, 2, {425,407}},
+{ 172980, 2, {465,372}},
+{ 173010, 2, {438,395}},
+{ 173043, 2, {459,377}},
+{ 173061, 2, {469,369}},
+{ 173075, 2, {575,301}},
+{ 173184, 2, {451,384}},
+{ 173225, 2, {533,325}},
+{ 173240, 2, {488,355}},
+{ 173250, 2, {450,385}},
+{ 173264, 2, {442,392}},
+{ 173316, 2, {429,404}},
+{ 173328, 2, {471,368}},
+{ 173340, 2, {428,405}},
+{ 173376, 2, {448,387}},
+{ 173394, 2, {494,351}},
+{ 173400, 2, {425,408}},
+{ 173420, 2, {460,377}},
+{ 173436, 2, {447,388}},
+{ 173460, 2, {420,413}},
+{ 173472, 2, {417,416}},
+{ 173530, 2, {469,370}},
+{ 173550, 2, {445,390}},
+{ 173558, 2, {506,343}},
+{ 173600, 2, {434,400}},
+{ 173628, 2, {468,371}},
+{ 173635, 2, {451,385}},
+{ 173664, 2, {432,402}},
+{ 173712, 2, {462,376}},
+{ 173736, 2, {456,381}},
+{ 173745, 2, {429,405}},
+{ 173800, 2, {440,395}},
+{ 173808, 2, {426,408}},
+{ 173817, 2, {623,279}},
+{ 173850, 2, {475,366}},
+{ 173888, 2, {418,416}},
+{ 173901, 2, {507,343}},
+{ 173952, 2, {453,384}},
+{ 173964, 2, {436,399}},
+{ 174000, 2, {435,400}},
+{ 174064, 2, {473,368}},
+{ 174080, 2, {512,340}},
+{ 174084, 2, {489,356}},
+{ 174096, 2, {432,403}},
+{ 174097, 2, {539,323}},
+{ 174105, 2, {477,365}},
+{ 174135, 2, {611,285}},
+{ 174150, 2, {430,405}},
+{ 174168, 2, {472,369}},
+{ 174195, 2, {441,395}},
+{ 174200, 2, {520,335}},
+{ 174216, 2, {427,408}},
+{ 174264, 2, {424,411}},
+{ 174276, 2, {423,412}},
+{ 174300, 2, {420,415}},
+{ 174348, 2, {501,348}},
+{ 174363, 2, {437,399}},
+{ 174370, 2, {470,371}},
+{ 174408, 2, {507,344}},
+{ 174420, 2, {459,380}},
+{ 174432, 2, {474,368}},
+{ 174440, 2, {445,392}},
+{ 174447, 2, {497,351}},
+{ 174492, 2, {444,393}},
+{ 174636, 2, {441,396}},
+{ 174685, 2, {713,245}},
+{ 174699, 2, {423,413}},
+{ 174720, 2, {420,416}},
+{ 174800, 2, {437,400}},
+{ 174840, 2, {465,376}},
+{ 174845, 2, {605,289}},
+{ 174924, 2, {452,387}},
+{ 174933, 2, {513,341}},
+{ 174944, 2, {497,352}},
+{ 174960, 2, {432,405}},
+{ 175032, 2, {429,408}},
+{ 175070, 2, {427,410}},
+{ 175084, 2, {481,364}},
+{ 175104, 2, {456,384}},
+{ 175112, 2, {424,413}},
+{ 175140, 2, {420,417}},
+{ 175168, 2, {448,391}},
+{ 175200, 2, {438,400}},
+{ 175212, 2, {471,372}},
+{ 175224, 2, {447,392}},
+{ 175260, 2, {460,381}},
+{ 175275, 2, {475,369}},
+{ 175296, 2, {498,352}},
+{ 175305, 2, {435,403}},
+{ 175380, 2, {444,395}},
+{ 175392, 2, {432,406}},
+{ 175440, 2, {430,408}},
+{ 175446, 2, {486,361}},
+{ 175450, 2, {550,319}},
+{ 175525, 2, {425,413}},
+{ 175536, 2, {424,414}},
+{ 175545, 2, {423,415}},
+{ 175560, 2, {420,418}},
+{ 175644, 2, {476,369}},
+{ 175680, 2, {480,366}},
+{ 175712, 2, {544,323}},
+{ 175725, 2, {495,355}},
+{ 175740, 2, {435,404}},
+{ 175764, 2, {453,388}},
+{ 175770, 2, {434,405}},
+{ 175784, 2, {511,344}},
+{ 175812, 2, {483,364}},
+{ 175824, 2, {432,407}},
+{ 175875, 2, {469,375}},
+{ 175908, 2, {428,411}},
+{ 175950, 2, {425,414}},
+{ 175956, 2, {473,372}},
+{ 175960, 2, {424,415}},
+{ 175968, 2, {423,416}},
+{ 176001, 2, {493,357}},
+{ 176040, 2, {489,360}},
+{ 176064, 2, {448,393}},
+{ 176080, 2, {496,355}},
+{ 176085, 2, {455,387}},
+{ 176130, 2, {515,342}},
+{ 176175, 2, {435,405}},
+{ 176220, 2, {445,396}},
+{ 176225, 2, {475,371}},
+{ 176344, 2, {469,376}},
+{ 176352, 2, {501,352}},
+{ 176418, 2, {486,363}},
+{ 176436, 2, {468,377}},
+{ 176472, 2, {456,387}},
+{ 176550, 2, {535,330}},
+{ 176580, 2, {436,405}},
+{ 176605, 2, {715,247}},
+{ 176638, 2, {434,407}},
+{ 176640, 2, {460,384}},
+{ 176700, 2, {465,380}},
+{ 176715, 2, {459,385}},
+{ 176748, 2, {429,412}},
+{ 176778, 2, {427,414}},
+{ 176784, 2, {464,381}},
+{ 176790, 2, {426,415}},
+{ 176792, 2, {451,392}},
+{ 176800, 2, {425,416}},
+{ 176808, 2, {424,417}},
+{ 176880, 2, {440,402}},
+{ 176890, 2, {490,361}},
+{ 176960, 2, {448,395}},
+{ 176985, 2, {437,405}},
+{ 176988, 2, {516,343}},
+{ 177000, 2, {472,375}},
+{ 177008, 2, {481,368}},
+{ 177012, 2, {447,396}},
+{ 177045, 2, {435,407}},
+{ 177072, 2, {434,408}},
+{ 177096, 2, {471,376}},
+{ 177120, 2, {432,410}},
+{ 177156, 2, {444,399}},
+{ 177216, 2, {426,416}},
+{ 177255, 2, {505,351}},
+{ 177320, 2, {440,403}},
+{ 177331, 2, {517,343}},
+{ 177375, 2, {473,375}},
+{ 177408, 2, {448,396}},
+{ 177444, 2, {477,372}},
+{ 177450, 2, {455,390}},
+{ 177480, 2, {435,408}},
+{ 177510, 2, {485,366}},
+{ 177552, 2, {432,411}},
+{ 177576, 2, {453,392}},
+{ 177590, 2, {430,413}},
+{ 177600, 2, {444,400}},
+{ 177632, 2, {427,416}},
+{ 177636, 2, {452,393}},
+{ 177650, 2, {425,418}},
+{ 177660, 2, {423,420}},
+{ 177723, 2, {441,403}},
+{ 177744, 2, {483,368}},
+{ 177750, 2, {450,395}},
+{ 177840, 2, {456,390}},
+{ 177885, 2, {531,335}},
+{ 177905, 2, {455,391}},
+{ 177996, 2, {489,364}},
+{ 178000, 2, {445,400}},
+{ 178002, 2, {522,341}},
+{ 178020, 2, {430,414}},
+{ 178092, 2, {459,388}},
+{ 178120, 2, {488,365}},
+{ 178155, 2, {535,333}},
+{ 178164, 2, {441,404}},
+{ 178200, 2, {440,405}},
+{ 178220, 2, {469,380}},
+{ 178224, 2, {474,376}},
+{ 178296, 2, {437,408}},
+{ 178308, 2, {468,381}},
+{ 178356, 2, {501,356}},
+{ 178360, 2, {455,392}},
+{ 178365, 2, {517,345}},
+{ 178416, 2, {432,413}},
+{ 178425, 2, {549,325}},
+{ 178464, 2, {429,416}},
+{ 178476, 2, {428,417}},
+{ 178500, 2, {425,420}},
+{ 178524, 2, {513,348}},
+{ 178560, 2, {465,384}},
+{ 178596, 2, {451,396}},
+{ 178605, 2, {441,405}},
+{ 178640, 2, {440,406}},
+{ 178695, 2, {495,361}},
+{ 178704, 2, {438,408}},
+{ 178752, 2, {448,399}},
+{ 178770, 2, {505,354}},
+{ 178800, 2, {447,400}},
+{ 178802, 2, {529,338}},
+{ 178848, 2, {432,414}},
+{ 178880, 2, {430,416}},
+{ 178890, 2, {445,402}},
+{ 178959, 2, {493,363}},
+{ 178965, 2, {485,369}},
+{ 178980, 2, {471,380}},
+{ 179010, 2, {442,405}},
+{ 179075, 2, {475,377}},
+{ 179080, 2, {440,407}},
+{ 179180, 2, {527,340}},
+{ 179196, 2, {436,411}},
+{ 179208, 2, {456,393}},
+{ 179220, 2, {435,412}},
+{ 179280, 2, {432,415}},
+{ 179340, 2, {427,420}},
+{ 179352, 2, {424,423}},
+{ 179361, 2, {511,351}},
+{ 179375, 2, {625,287}},
+{ 179388, 2, {453,396}},
+{ 179469, 2, {459,391}},
+{ 179487, 2, {441,407}},
+{ 179550, 2, {450,399}},
+{ 179568, 2, {464,387}},
+{ 179655, 2, {435,413}},
+{ 179676, 2, {434,414}},
+{ 179775, 2, {425,423}},
+{ 179816, 2, {494,364}},
+{ 179820, 2, {444,405}},
+{ 179832, 2, {472,381}},
+{ 179850, 2, {545,330}},
+{ 179872, 2, {511,352}},
+{ 179916, 2, {517,348}},
+{ 179928, 2, {441,408}},
+{ 179949, 2, {451,399}},
+{ 179952, 2, {489,368}},
+{ 179998, 2, {559,322}},
+{ 180000, 2, {450,400}},
+{ 180072, 2, {488,369}},
+{ 180075, 2, {525,343}},
+{ 180090, 2, {435,414}},
+{ 180096, 2, {448,402}},
+{ 180120, 2, {456,395}},
+{ 180144, 2, {432,417}},
+{ 180180, 2, {429,420}},
+{ 180200, 2, {425,424}},
+{ 180225, 2, {445,405}},
+{ 180234, 2, {527,342}},
+{ 180348, 2, {452,399}},
+{ 180360, 2, {501,360}},
+{ 180375, 2, {481,375}},
+{ 180420, 2, {465,388}},
+{ 180480, 2, {470,384}},
+{ 180492, 2, {507,356}},
+{ 180544, 2, {434,416}},
+{ 180576, 2, {432,418}},
+{ 180588, 2, {447,404}},
+{ 180600, 2, {430,420}},
+{ 180612, 2, {519,348}},
+{ 180621, 2, {427,423}},
+{ 180624, 2, {426,424}},
+{ 180642, 2, {462,391}},
+{ 180675, 2, {495,365}},
+{ 180761, 2, {527,343}},
+{ 180765, 2, {515,351}},
+{ 180780, 2, {460,393}},
+{ 180840, 2, {440,411}},
+{ 180864, 2, {471,384}},
+{ 180873, 2, {567,319}},
+{ 180895, 2, {605,299}},
+{ 180960, 2, {435,416}},
+{ 181040, 2, {496,365}},
+{ 181044, 2, {428,423}},
+{ 181048, 2, {427,424}},
+{ 181050, 2, {426,425}},
+{ 181056, 2, {492,368}},
+{ 181104, 2, {462,392}},
+{ 181116, 2, {468,387}},
+{ 181125, 2, {483,375}},
+{ 181200, 2, {453,400}},
+{ 181203, 2, {561,323}},
+{ 181260, 2, {477,380}},
+{ 181305, 2, {459,395}},
+{ 181350, 2, {450,403}},
+{ 181356, 2, {476,381}},
+{ 181384, 2, {553,328}},
+{ 181440, 2, {432,420}},
+{ 181447, 2, {529,343}},
+{ 181475, 2, {427,425}},
+{ 181485, 2, {545,333}},
+{ 181500, 2, {484,375}},
+{ 181503, 2, {469,387}},
+{ 181560, 2, {445,408}},
+{ 181608, 2, {483,376}},
+{ 181632, 2, {473,384}},
+{ 181675, 2, {559,325}},
+{ 181692, 2, {441,412}},
+{ 181720, 2, {440,413}},
+{ 181760, 2, {512,355}},
+{ 181764, 2, {459,396}},
+{ 181770, 2, {438,415}},
+{ 181790, 2, {490,371}},
+{ 181792, 2, {437,416}},
+{ 181812, 2, {436,417}},
+{ 181818, 2, {481,378}},
+{ 181888, 2, {448,406}},
+{ 181896, 2, {429,424}},
+{ 181908, 2, {489,372}},
+{ 181944, 2, {456,399}},
+{ 182000, 2, {455,400}},
+{ 182016, 2, {474,384}},
+{ 182040, 2, {444,410}},
+{ 182091, 2, {483,377}},
+{ 182105, 2, {473,385}},
+{ 182115, 2, {513,355}},
+{ 182133, 2, {441,413}},
+{ 182160, 2, {440,414}},
+{ 182182, 2, {539,338}},
+{ 182208, 2, {438,416}},
+{ 182280, 2, {434,420}},
+{ 182310, 2, {515,354}},
+{ 182336, 2, {448,407}},
+{ 182352, 2, {464,393}},
+{ 182364, 2, {501,364}},
+{ 182376, 2, {447,408}},
+{ 182468, 2, {484,377}},
+{ 182484, 2, {444,411}},
+{ 182490, 2, {462,395}},
+{ 182532, 2, {492,371}},
+{ 182595, 2, {555,329}},
+{ 182600, 2, {440,415}},
+{ 182628, 2, {513,356}},
+{ 182655, 2, {451,405}},
+{ 182664, 2, {472,387}},
+{ 182666, 2, {437,418}},
+{ 182688, 2, {519,352}},
+{ 182700, 2, {435,420}},
+{ 182736, 2, {432,423}},
+{ 182748, 2, {471,388}},
+{ 182780, 2, {481,380}},
+{ 182784, 2, {448,408}},
+{ 182819, 2, {533,343}},
+{ 182880, 2, {480,381}},
+{ 182896, 2, {497,368}},
+{ 182910, 2, {455,402}},
+{ 182970, 2, {535,342}},
+{ 183000, 2, {488,375}},
+{ 183012, 2, {453,404}},
+{ 183015, 2, {441,415}},
+{ 183027, 2, {507,361}},
+{ 183060, 2, {452,405}},
+{ 183106, 2, {451,406}},
+{ 183141, 2, {459,399}},
+{ 183150, 2, {450,407}},
+{ 183222, 2, {486,377}},
+{ 183264, 2, {498,368}},
+{ 183280, 2, {464,395}},
+{ 183312, 2, {456,402}},
+{ 183330, 2, {485,378}},
+{ 183365, 2, {455,403}},
+{ 183372, 2, {444,413}},
+{ 183393, 2, {497,369}},
+{ 183425, 2, {575,319}},
+{ 183456, 2, {441,416}},
+{ 183480, 2, {440,417}},
+{ 183520, 2, {496,370}},
+{ 183540, 2, {437,420}},
+{ 183600, 2, {432,425}},
+{ 183610, 2, {430,427}},
+{ 183612, 2, {429,428}},
+{ 183645, 2, {477,385}},
+{ 183680, 2, {448,410}},
+{ 183744, 2, {464,396}},
+{ 183750, 2, {490,375}},
+{ 183768, 2, {456,403}},
+{ 183799, 2, {539,341}},
+{ 183825, 2, {475,387}},
+{ 183848, 2, {469,392}},
+{ 183864, 2, {489,376}},
+{ 183872, 2, {442,416}},
+{ 183885, 2, {533,345}},
+{ 183890, 2, {497,370}},
+{ 183915, 2, {549,335}},
+{ 183920, 2, {440,418}},
+{ 183924, 2, {468,393}},
+{ 184008, 2, {451,408}},
+{ 184032, 2, {432,426}},
+{ 184080, 2, {472,390}},
+{ 184093, 2, {637,289}},
+{ 184110, 2, {510,361}},
+{ 184128, 2, {448,411}},
+{ 184140, 2, {465,396}},
+{ 184149, 2, {553,333}},
+{ 184164, 2, {447,412}},
+{ 184184, 2, {506,364}},
+{ 184212, 2, {476,387}},
+{ 184230, 2, {445,414}},
+{ 184260, 2, {444,415}},
+{ 184275, 2, {455,405}},
+{ 184320, 2, {480,384}},
+{ 184338, 2, {441,418}},
+{ 184368, 2, {501,368}},
+{ 184382, 2, {493,374}},
+{ 184404, 2, {484,381}},
+{ 184428, 2, {436,423}},
+{ 184440, 2, {435,424}},
+{ 184450, 2, {434,425}},
+{ 184464, 2, {432,427}},
+{ 184500, 2, {450,410}},
+{ 184548, 2, {507,364}},
+{ 184569, 2, {517,357}},
+{ 184600, 2, {520,355}},
+{ 184632, 2, {471,392}},
+{ 184680, 2, {456,405}},
+{ 184704, 2, {444,416}},
+{ 184764, 2, {519,356}},
+{ 184824, 2, {453,408}},
+{ 184830, 2, {505,366}},
+{ 184832, 2, {512,361}},
+{ 184860, 2, {468,395}},
+{ 184977, 2, {459,403}},
+{ 185024, 2, {448,413}},
+{ 185031, 2, {623,297}},
+{ 185076, 2, {477,388}},
+{ 185115, 2, {615,301}},
+{ 185120, 2, {445,416}},
+{ 185130, 2, {495,374}},
+{ 185136, 2, {456,406}},
+{ 185148, 2, {444,417}},
+{ 185150, 2, {529,350}},
+{ 185185, 2, {455,407}},
+{ 185220, 2, {441,420}},
+{ 185250, 2, {475,390}},
+{ 185328, 2, {432,429}},
+{ 185380, 2, {460,403}},
+{ 185416, 2, {473,392}},
+{ 185436, 2, {459,404}},
+{ 185472, 2, {448,414}},
+{ 185496, 2, {472,393}},
+{ 185500, 2, {500,371}},
+{ 185640, 2, {442,420}},
+{ 185679, 2, {529,351}},
+{ 185712, 2, {438,424}},
+{ 185725, 2, {437,425}},
+{ 185745, 2, {435,427}},
+{ 185760, 2, {432,430}},
+{ 185772, 2, {452,411}},
+{ 185808, 2, {474,392}},
+{ 185820, 2, {489,380}},
+{ 185850, 2, {450,413}},
+{ 185856, 2, {484,384}},
+{ 185900, 2, {550,338}},
+{ 185920, 2, {448,415}},
+{ 185928, 2, {488,381}},
+{ 185952, 2, {447,416}},
+{ 186000, 2, {465,400}},
+{ 186116, 2, {476,391}},
+{ 186120, 2, {440,423}},
+{ 186150, 2, {438,425}},
+{ 186180, 2, {435,428}},
+{ 186200, 2, {475,392}},
+{ 186345, 2, {505,369}},
+{ 186354, 2, {459,406}},
+{ 186372, 2, {501,372}},
+{ 186375, 2, {497,375}},
+{ 186390, 2, {545,342}},
+{ 186440, 2, {472,395}},
+{ 186516, 2, {471,396}},
+{ 186528, 2, {464,402}},
+{ 186576, 2, {507,368}},
+{ 186636, 2, {453,412}},
+{ 186714, 2, {451,414}},
+{ 186732, 2, {468,399}},
+{ 186750, 2, {450,415}},
+{ 186760, 2, {460,406}},
+{ 186813, 2, {459,407}},
+{ 186816, 2, {448,417}},
+{ 186840, 2, {519,360}},
+{ 186872, 2, {497,376}},
+{ 186880, 2, {512,365}},
+{ 186900, 2, {445,420}},
+{ 186960, 2, {456,410}},
+{ 186984, 2, {441,424}},
+{ 186992, 2, {464,403}},
+{ 187000, 2, {440,425}},
+{ 187044, 2, {436,429}},
+{ 187068, 2, {476,393}},
+{ 187110, 2, {462,405}},
+{ 187187, 2, {847,221}},
+{ 187200, 2, {450,416}},
+{ 187220, 2, {460,407}},
+{ 187245, 2, {513,365}},
+{ 187248, 2, {498,376}},
+{ 187264, 2, {448,418}},
+{ 187272, 2, {459,408}},
+{ 187308, 2, {473,396}},
+{ 187340, 2, {493,380}},
+{ 187404, 2, {483,388}},
+{ 187416, 2, {456,411}},
+{ 187425, 2, {441,425}},
+{ 187440, 2, {440,426}},
+{ 187452, 2, {492,381}},
+{ 187473, 2, {437,429}},
+{ 187488, 2, {434,432}},
+{ 187550, 2, {550,341}},
+{ 187590, 2, {481,390}},
+{ 187600, 2, {469,400}},
+{ 187616, 2, {451,416}},
+{ 187680, 2, {460,408}},
+{ 187695, 2, {485,387}},
+{ 187740, 2, {447,420}},
+{ 187775, 2, {725,259}},
+{ 187776, 2, {489,384}},
+{ 187785, 2, {535,351}},
+{ 187812, 2, {444,423}},
+{ 187860, 2, {465,404}},
+{ 187880, 2, {440,427}},
+{ 187920, 2, {435,432}},
+{ 188000, 2, {470,400}},
+{ 188034, 2, {462,407}},
+{ 188048, 2, {511,368}},
+{ 188100, 2, {450,418}},
+{ 188125, 2, {625,301}},
+{ 188139, 2, {527,357}},
+{ 188160, 2, {448,420}},
+{ 188188, 2, {517,364}},
+{ 188190, 2, {459,410}},
+{ 188235, 2, {445,423}},
+{ 188307, 2, {441,427}},
+{ 188325, 2, {465,405}},
+{ 188328, 2, {456,413}},
+{ 188370, 2, {455,414}},
+{ 188376, 2, {501,376}},
+{ 188400, 2, {471,400}},
+{ 188415, 2, {477,395}},
+{ 188448, 2, {453,416}},
+{ 188484, 2, {452,417}},
+{ 188490, 2, {515,366}},
+{ 188496, 2, {462,408}},
+{ 188500, 2, {500,377}},
+{ 188505, 2, {531,355}},
+{ 188552, 2, {481,392}},
+{ 188559, 2, {511,369}},
+{ 188604, 2, {468,403}},
+{ 188640, 2, {480,393}},
+{ 188680, 2, {445,424}},
+{ 188700, 2, {444,425}},
+{ 188727, 2, {473,399}},
+{ 188748, 2, {441,428}},
+{ 188760, 2, {440,429}},
+{ 188784, 2, {437,432}},
+{ 188790, 2, {435,434}},
+{ 188848, 2, {464,407}},
+{ 188856, 2, {488,387}},
+{ 188860, 2, {497,380}},
+{ 188892, 2, {477,396}},
+{ 188916, 2, {519,364}},
+{ 188928, 2, {492,384}},
+{ 188955, 2, {585,323}},
+{ 188976, 2, {496,381}},
+{ 188993, 2, {551,343}},
+{ 189036, 2, {531,356}},
+{ 189060, 2, {460,411}},
+{ 189070, 2, {511,370}},
+{ 189108, 2, {459,412}},
+{ 189150, 2, {485,390}},
+{ 189175, 2, {575,329}},
+{ 189189, 2, {441,429}},
+{ 189210, 2, {510,371}},
+{ 189216, 2, {438,432}},
+{ 189240, 2, {456,415}},
+{ 189244, 2, {484,391}},
+{ 189255, 2, {465,407}},
+{ 189280, 2, {455,416}},
+{ 189336, 2, {483,392}},
+{ 189390, 2, {535,354}},
+{ 189420, 2, {451,420}},
+{ 189440, 2, {512,370}},
+{ 189475, 2, {583,325}},
+{ 189504, 2, {448,423}},
+{ 189528, 2, {447,424}},
+{ 189540, 2, {468,405}},
+{ 189567, 2, {459,413}},
+{ 189570, 2, {445,426}},
+{ 189588, 2, {444,427}},
+{ 189600, 2, {474,400}},
+{ 189618, 2, {442,429}},
+{ 189660, 2, {436,435}},
+{ 189696, 2, {456,416}},
+{ 189720, 2, {465,408}},
+{ 189728, 2, {484,392}},
+{ 189732, 2, {489,388}},
+{ 189744, 2, {472,402}},
+{ 189750, 2, {506,375}},
+{ 189800, 2, {520,365}},
+{ 189805, 2, {493,385}},
+{ 189810, 2, {513,370}},
+{ 189888, 2, {516,368}},
+{ 189924, 2, {476,399}},
+{ 189945, 2, {469,405}},
+{ 189980, 2, {460,413}},
+{ 190000, 2, {475,400}},
+{ 190008, 2, {468,406}},
+{ 190035, 2, {515,369}},
+{ 190080, 2, {440,432}},
+{ 190120, 2, {485,392}},
+{ 190125, 2, {507,375}},
+{ 190152, 2, {456,417}},
+{ 190190, 2, {455,418}},
+{ 190212, 2, {484,393}},
+{ 190232, 2, {553,344}},
+{ 190240, 2, {464,410}},
+{ 190260, 2, {453,420}},
+{ 190280, 2, {536,355}},
+{ 190281, 2, {533,357}},
+{ 190284, 2, {471,404}},
+{ 190320, 2, {488,390}},
+{ 190365, 2, {555,343}},
+{ 190380, 2, {501,380}},
+{ 190400, 2, {448,425}},
+{ 190404, 2, {492,387}},
+{ 190463, 2, {637,299}},
+{ 190476, 2, {444,429}},
+{ 190485, 2, {459,415}},
+{ 190500, 2, {500,381}},
+{ 190512, 2, {441,432}},
+{ 190575, 2, {495,385}},
+{ 190624, 2, {518,368}},
+{ 190632, 2, {507,376}},
+{ 190704, 2, {464,411}},
+{ 190762, 2, {506,377}},
+{ 190800, 2, {450,424}},
+{ 190836, 2, {513,372}},
+{ 190848, 2, {448,426}},
+{ 190890, 2, {505,378}},
+{ 190920, 2, {444,430}},
+{ 190944, 2, {442,432}},
+{ 190950, 2, {475,402}},
+{ 190960, 2, {440,434}},
+{ 190992, 2, {519,368}},
+{ 191100, 2, {455,420}},
+{ 191160, 2, {472,405}},
+{ 191196, 2, {452,423}},
+{ 191232, 2, {498,384}},
+{ 191250, 2, {450,425}},
+{ 191295, 2, {545,351}},
+{ 191296, 2, {448,427}},
+{ 191301, 2, {527,363}},
+{ 191316, 2, {447,428}},
+{ 191352, 2, {469,408}},
+{ 191360, 2, {460,416}},
+{ 191400, 2, {440,435}},
+{ 191425, 2, {475,403}},
+{ 191436, 2, {516,371}},
+{ 191488, 2, {512,374}},
+{ 191565, 2, {473,405}},
+{ 191580, 2, {465,412}},
+{ 191590, 2, {490,391}},
+{ 191625, 2, {511,375}},
+{ 191632, 2, {464,413}},
+{ 191646, 2, {507,378}},
+{ 191675, 2, {451,425}},
+{ 191688, 2, {489,392}},
+{ 191730, 2, {462,415}},
+{ 191737, 2, {559,343}},
+{ 191760, 2, {470,408}},
+{ 191784, 2, {488,393}},
+{ 191808, 2, {444,432}},
+{ 191820, 2, {460,417}},
+{ 191862, 2, {459,418}},
+{ 191880, 2, {468,410}},
+{ 191919, 2, {481,399}},
+{ 191952, 2, {496,387}},
+{ 192024, 2, {504,381}},
+{ 192027, 2, {529,363}},
+{ 192038, 2, {473,406}},
+{ 192045, 2, {465,413}},
+{ 192060, 2, {485,396}},
+{ 192072, 2, {453,424}},
+{ 192096, 2, {464,414}},
+{ 192136, 2, {511,376}},
+{ 192150, 2, {450,427}},
+{ 192168, 2, {471,408}},
+{ 192185, 2, {595,323}},
+{ 192192, 2, {448,429}},
+{ 192240, 2, {445,432}},
+{ 192276, 2, {441,436}},
+{ 192280, 2, {440,437}},
+{ 192290, 2, {469,410}},
+{ 192324, 2, {517,372}},
+{ 192339, 2, {497,387}},
+{ 192348, 2, {468,411}},
+{ 192375, 2, {475,405}},
+{ 192384, 2, {501,384}},
+{ 192400, 2, {481,400}},
+{ 192465, 2, {455,423}},
+{ 192500, 2, {500,385}},
+{ 192510, 2, {465,414}},
+{ 192556, 2, {529,364}},
+{ 192560, 2, {464,415}},
+{ 192640, 2, {448,430}},
+{ 192660, 2, {494,390}},
+{ 192708, 2, {477,404}},
+{ 192717, 2, {441,437}},
+{ 192720, 2, {440,438}},
+{ 192760, 2, {488,395}},
+{ 192780, 2, {459,420}},
+{ 192850, 2, {475,406}},
+{ 192855, 2, {559,345}},
+{ 192888, 2, {456,423}},
+{ 192920, 2, {455,424}},
+{ 192930, 2, {545,354}},
+{ 192960, 2, {480,402}},
+{ 192984, 2, {473,408}},
+{ 193050, 2, {450,429}},
+{ 193068, 2, {519,372}},
+{ 193104, 2, {447,432}},
+{ 193116, 2, {462,418}},
+{ 193120, 2, {544,355}},
+{ 193140, 2, {444,435}},
+{ 193154, 2, {442,437}},
+{ 193230, 2, {565,342}},
+{ 193284, 2, {468,413}},
+{ 193320, 2, {537,360}},
+{ 193325, 2, {475,407}},
+{ 193347, 2, {567,341}},
+{ 193356, 2, {492,393}},
+{ 193392, 2, {474,408}},
+{ 193401, 2, {513,377}},
+{ 193440, 2, {465,416}},
+{ 193452, 2, {564,343}},
+{ 193473, 2, {581,333}},
+{ 193488, 2, {464,417}},
+{ 193500, 2, {450,430}},
+{ 193536, 2, {448,432}},
+{ 193545, 2, {495,391}},
+{ 193644, 2, {489,396}},
+{ 193648, 2, {494,392}},
+{ 193732, 2, {476,407}},
+{ 193800, 2, {456,425}},
+{ 193815, 2, {531,365}},
+{ 193830, 2, {455,426}},
+{ 193875, 2, {517,375}},
+{ 193884, 2, {453,428}},
+{ 193908, 2, {452,429}},
+{ 193914, 2, {486,399}},
+{ 193992, 2, {472,411}},
+{ 194000, 2, {485,400}},
+{ 194012, 2, {533,364}},
+{ 194040, 2, {441,440}},
+{ 194052, 2, {471,412}},
+{ 194103, 2, {553,351}},
+{ 194110, 2, {470,413}},
+{ 194166, 2, {469,414}},
+{ 194180, 2, {511,380}},
+{ 194220, 2, {468,415}},
+{ 194250, 2, {518,375}},
+{ 194256, 2, {456,426}},
+{ 194304, 2, {506,384}},
+{ 194388, 2, {501,388}},
+{ 194400, 2, {450,432}},
+{ 194432, 2, {448,434}},
+{ 194480, 2, {442,440}},
+{ 194560, 2, {512,380}},
+{ 194579, 2, {539,361}},
+{ 194580, 2, {460,423}},
+{ 194616, 2, {459,424}},
+{ 194649, 2, {483,403}},
+{ 194656, 2, {553,352}},
+{ 194670, 2, {515,378}},
+{ 194688, 2, {468,416}},
+{ 194712, 2, {456,427}},
+{ 194775, 2, {525,371}},
+{ 194805, 2, {481,405}},
+{ 194810, 2, {506,385}},
+{ 194824, 2, {497,392}},
+{ 194832, 2, {451,432}},
+{ 194880, 2, {448,435}},
+{ 194892, 2, {447,436}},
+{ 194895, 2, {549,355}},
+{ 194910, 2, {445,438}},
+{ 194922, 2, {442,441}},
+{ 194928, 2, {496,393}},
+{ 194940, 2, {513,380}},
+{ 194970, 2, {485,402}},
+{ 195048, 2, {504,387}},
+{ 195052, 2, {484,403}},
+{ 195075, 2, {459,425}},
+{ 195104, 2, {469,416}},
+{ 195132, 2, {483,404}},
+{ 195144, 2, {519,376}},
+{ 195156, 2, {468,417}},
+{ 195216, 2, {498,392}},
+{ 195228, 2, {493,396}},
+{ 195286, 2, {481,406}},
+{ 195300, 2, {450,434}},
+{ 195408, 2, {472,414}},
+{ 195415, 2, {605,323}},
+{ 195435, 2, {505,387}},
+{ 195468, 2, {537,364}},
+{ 195520, 2, {470,416}},
+{ 195525, 2, {495,395}},
+{ 195600, 2, {489,400}},
+{ 195615, 2, {483,405}},
+{ 195624, 2, {456,429}},
+{ 195636, 2, {476,411}},
+{ 195640, 2, {536,365}},
+{ 195696, 2, {453,432}},
+{ 195734, 2, {451,434}},
+{ 195750, 2, {450,435}},
+{ 195776, 2, {448,437}},
+{ 195800, 2, {445,440}},
+{ 195804, 2, {444,441}},
+{ 195810, 2, {535,366}},
+{ 195822, 2, {473,414}},
+{ 195840, 2, {480,408}},
+{ 195858, 2, {486,403}},
+{ 195880, 2, {472,415}},
+{ 195888, 2, {462,424}},
+{ 195920, 2, {496,395}},
+{ 195936, 2, {471,416}},
+{ 195975, 2, {585,335}},
+{ 195993, 2, {459,427}},
+{ 196000, 2, {490,400}},
+{ 196020, 2, {484,405}},
+{ 196040, 2, {520,377}},
+{ 196075, 2, {575,341}},
+{ 196080, 2, {456,430}},
+{ 196144, 2, {533,368}},
+{ 196175, 2, {475,413}},
+{ 196176, 2, {488,402}},
+{ 196185, 2, {451,435}},
+{ 196224, 2, {448,438}},
+{ 196245, 2, {445,441}},
+{ 196272, 2, {464,423}},
+{ 196308, 2, {492,399}},
+{ 196350, 2, {462,425}},
+{ 196365, 2, {689,285}},
+{ 196384, 2, {544,361}},
+{ 196392, 2, {501,392}},
+{ 196416, 2, {496,396}},
+{ 196420, 2, {460,427}},
+{ 196425, 2, {485,405}},
+{ 196452, 2, {459,428}},
+{ 196500, 2, {500,393}},
+{ 196512, 2, {534,368}},
+{ 196524, 2, {477,412}},
+{ 196560, 2, {455,432}},
+{ 196581, 2, {483,407}},
+{ 196596, 2, {508,387}},
+{ 196620, 2, {452,435}},
+{ 196650, 2, {450,437}},
+{ 196680, 2, {447,440}},
+{ 196707, 2, {493,399}},
+{ 196710, 2, {474,415}},
+{ 196716, 2, {507,388}},
+{ 196768, 2, {473,416}},
+{ 196800, 2, {480,410}},
+{ 196824, 2, {472,417}},
+{ 196840, 2, {518,380}},
+{ 196950, 2, {505,390}},
+{ 196980, 2, {469,420}},
+{ 197001, 2, {477,413}},
+{ 197098, 2, {527,374}},
+{ 197120, 2, {448,440}},
+{ 197160, 2, {465,424}},
+{ 197184, 2, {474,416}},
+{ 197200, 2, {464,425}},
+{ 197220, 2, {519,380}},
+{ 197225, 2, {575,343}},
+{ 197280, 2, {480,411}},
+{ 197316, 2, {486,406}},
+{ 197340, 2, {460,429}},
+{ 197370, 2, {459,430}},
+{ 197400, 2, {470,420}},
+{ 197415, 2, {535,369}},
+{ 197505, 2, {495,399}},
+{ 197508, 2, {453,436}},
+{ 197532, 2, {531,372}},
+{ 197556, 2, {489,404}},
+{ 197568, 2, {448,441}},
+{ 197580, 2, {445,444}},
+{ 197600, 2, {475,416}},
+{ 197616, 2, {537,368}},
+{ 197640, 2, {488,405}},
+{ 197652, 2, {543,364}},
+{ 197664, 2, {464,426}},
+{ 197757, 2, {511,387}},
+{ 197780, 2, {580,341}},
+{ 197802, 2, {486,407}},
+{ 197820, 2, {471,420}},
+{ 197880, 2, {485,408}},
+{ 197904, 2, {456,434}},
+{ 197955, 2, {477,415}},
+{ 197964, 2, {468,423}},
+{ 198000, 2, {450,440}},
+{ 198016, 2, {448,442}},
+{ 198072, 2, {504,393}},
+{ 198099, 2, {621,319}},
+{ 198128, 2, {464,427}},
+{ 198144, 2, {512,387}},
+{ 198198, 2, {462,429}},
+{ 198237, 2, {507,391}},
+{ 198254, 2, {578,343}},
+{ 198288, 2, {459,432}},
+{ 198315, 2, {565,351}},
+{ 198352, 2, {506,392}},
+{ 198360, 2, {456,435}},
+{ 198375, 2, {529,375}},
+{ 198387, 2, {469,423}},
+{ 198396, 2, {501,396}},
+{ 198440, 2, {451,440}},
+{ 198450, 2, {450,441}},
+{ 198468, 2, {447,444}},
+{ 198492, 2, {476,417}},
+{ 198528, 2, {517,384}},
+{ 198555, 2, {465,427}},
+{ 198560, 2, {544,365}},
+{ 198575, 2, {611,325}},
+{ 198720, 2, {460,432}},
+{ 198744, 2, {507,392}},
+{ 198800, 2, {497,400}},
+{ 198835, 2, {455,437}},
+{ 198856, 2, {469,424}},
+{ 198891, 2, {451,441}},
+{ 198900, 2, {450,442}},
+{ 198912, 2, {448,444}},
+{ 198924, 2, {484,411}},
+{ 198968, 2, {476,418}},
+{ 198996, 2, {483,412}},
+{ 199020, 2, {465,428}},
+{ 199044, 2, {513,388}},
+{ 199045, 2, {517,385}},
+{ 199056, 2, {464,429}},
+{ 199134, 2, {481,414}},
+{ 199200, 2, {480,415}},
+{ 199206, 2, {459,434}},
+{ 199260, 2, {486,410}},
+{ 199272, 2, {456,437}},
+{ 199290, 2, {455,438}},
+{ 199296, 2, {519,384}},
+{ 199305, 2, {515,387}},
+{ 199320, 2, {453,440}},
+{ 199325, 2, {469,425}},
+{ 199332, 2, {452,441}},
+{ 199360, 2, {448,445}},
+{ 199375, 2, {625,319}},
+{ 199392, 2, {496,402}},
+{ 199410, 2, {510,391}},
+{ 199430, 2, {490,407}},
+{ 199470, 2, {545,366}},
+{ 199500, 2, {475,420}},
+{ 199512, 2, {489,408}},
+{ 199520, 2, {464,430}},
+{ 199563, 2, {559,357}},
+{ 199584, 2, {462,432}},
+{ 199640, 2, {460,434}},
+{ 199644, 2, {508,393}},
+{ 199656, 2, {472,423}},
+{ 199665, 2, {459,435}},
+{ 199704, 2, {471,424}},
+{ 199728, 2, {456,438}},
+{ 199764, 2, {537,372}},
+{ 199824, 2, {543,368}},
+{ 199836, 2, {468,427}},
+{ 199864, 2, {581,344}},
+{ 199875, 2, {533,375}},
+{ 199920, 2, {476,420}},
+{ 199980, 2, {495,404}},
+{ 200010, 2, {565,354}},
+{ 200013, 2, {551,363}},
+{ 200070, 2, {494,405}},
+{ 200096, 2, {481,416}},
+{ 200100, 2, {460,435}},
+{ 200124, 2, {459,436}},
+{ 200160, 2, {480,417}},
+{ 200192, 2, {512,391}},
+{ 200200, 2, {455,440}},
+{ 200244, 2, {451,444}},
+{ 200250, 2, {450,445}},
+{ 200256, 2, {448,447}},
+{ 200260, 2, {527,380}},
+{ 200312, 2, {511,392}},
+{ 200340, 2, {477,420}},
+{ 200385, 2, {549,365}},
+{ 200400, 2, {501,400}},
+{ 200475, 2, {495,405}},
+{ 200568, 2, {488,411}},
+{ 200583, 2, {459,437}},
+{ 200600, 2, {472,425}},
+{ 200655, 2, {455,441}},
+{ 200690, 2, {470,427}},
+{ 200718, 2, {486,413}},
+{ 200725, 2, {775,259}},
+{ 200772, 2, {468,429}},
+{ 200784, 2, {534,376}},
+{ 200790, 2, {485,414}},
+{ 200850, 2, {515,390}},
+{ 200880, 2, {465,432}},
+{ 200925, 2, {475,423}},
+{ 200928, 2, {483,416}},
+{ 200976, 2, {474,424}},
+{ 201025, 2, {473,425}},
+{ 201058, 2, {481,418}},
+{ 201072, 2, {472,426}},
+{ 201096, 2, {456,441}},
+{ 201105, 2, {545,369}},
+{ 201110, 2, {455,442}},
+{ 201132, 2, {453,444}},
+{ 201135, 2, {583,345}},
+{ 201144, 2, {493,408}},
+{ 201216, 2, {512,393}},
+{ 201240, 2, {468,430}},
+{ 201280, 2, {544,370}},
+{ 201285, 2, {497,405}},
+{ 201348, 2, {476,423}},
+{ 201372, 2, {519,388}},
+{ 201376, 2, {464,434}},
+{ 201400, 2, {475,424}},
+{ 201450, 2, {474,425}},
+{ 201465, 2, {495,407}},
+{ 201468, 2, {489,412}},
+{ 201474, 2, {533,378}},
+{ 201500, 2, {500,403}},
+{ 201544, 2, {472,427}},
+{ 201586, 2, {539,374}},
+{ 201588, 2, {471,428}},
+{ 201600, 2, {450,448}},
+{ 201663, 2, {679,297}},
+{ 201670, 2, {469,430}},
+{ 201690, 2, {486,415}},
+{ 201760, 2, {485,416}},
+{ 201780, 2, {531,380}},
+{ 201825, 2, {575,351}},
+{ 201828, 2, {484,417}},
+{ 201840, 2, {464,435}},
+{ 201872, 2, {496,407}},
+{ 201894, 2, {462,437}},
+{ 201912, 2, {537,376}},
+{ 201960, 2, {459,440}},
+{ 201996, 2, {543,372}},
+{ 202020, 2, {455,444}},
+{ 202027, 2, {589,343}},
+{ 202032, 2, {488,414}},
+{ 202044, 2, {452,447}},
+{ 202048, 2, {451,448}},
+{ 202125, 2, {525,385}},
+{ 202176, 2, {468,432}},
+{ 202212, 2, {492,411}},
+{ 202230, 2, {535,378}},
+{ 202240, 2, {512,395}},
+{ 202248, 2, {477,424}},
+{ 202335, 2, {615,329}},
+{ 202350, 2, {475,426}},
+{ 202370, 2, {490,413}},
+{ 202404, 2, {501,404}},
+{ 202488, 2, {472,429}},
+{ 202520, 2, {488,415}},
+{ 202521, 2, {561,361}},
+{ 202608, 2, {469,432}},
+{ 202635, 2, {513,395}},
+{ 202664, 2, {517,392}},
+{ 202692, 2, {508,399}},
+{ 202725, 2, {477,425}},
+{ 202740, 2, {465,436}},
+{ 202752, 2, {512,396}},
+{ 202788, 2, {516,393}},
+{ 202800, 2, {507,400}},
+{ 202825, 2, {475,427}},
+{ 202860, 2, {460,441}},
+{ 202884, 2, {583,348}},
+{ 202895, 2, {527,385}},
+{ 202920, 2, {456,445}},
+{ 202944, 2, {453,448}},
+{ 202950, 2, {451,450}},
+{ 203000, 2, {500,406}},
+{ 203010, 2, {505,402}},
+{ 203040, 2, {470,432}},
+{ 203112, 2, {468,434}},
+{ 203136, 2, {529,384}},
+{ 203148, 2, {486,418}},
+{ 203184, 2, {498,408}},
+{ 203196, 2, {492,413}},
+{ 203203, 2, {539,377}},
+{ 203232, 2, {464,438}},
+{ 203280, 2, {462,440}},
+{ 203360, 2, {496,410}},
+{ 203424, 2, {489,416}},
+{ 203448, 2, {519,392}},
+{ 203472, 2, {471,432}},
+{ 203476, 2, {559,364}},
+{ 203490, 2, {510,399}},
+{ 203496, 2, {488,417}},
+{ 203500, 2, {500,407}},
+{ 203504, 2, {553,368}},
+{ 203550, 2, {575,354}},
+{ 203580, 2, {468,435}},
+{ 203665, 2, {529,385}},
+{ 203679, 2, {477,427}},
+{ 203700, 2, {485,420}},
+{ 203770, 2, {497,410}},
+{ 203796, 2, {459,444}},
+{ 203832, 2, {456,447}},
+{ 203840, 2, {455,448}},
+{ 203856, 2, {496,411}},
+{ 203918, 2, {506,403}},
+{ 203931, 2, {581,351}},
+{ 203940, 2, {495,412}},
+{ 204000, 2, {480,425}},
+{ 204015, 2, {469,435}},
+{ 204057, 2, {553,369}},
+{ 204060, 2, {537,380}},
+{ 204102, 2, {493,414}},
+{ 204120, 2, {486,420}},
+{ 204156, 2, {477,428}},
+{ 204168, 2, {543,376}},
+{ 204180, 2, {492,415}},
+{ 204204, 2, {462,442}},
+{ 204228, 2, {549,372}},
+{ 204255, 2, {459,445}},
+{ 204288, 2, {456,448}},
+{ 204336, 2, {473,432}},
+{ 204360, 2, {520,393}},
+{ 204400, 2, {511,400}},
+{ 204408, 2, {501,408}},
+{ 204425, 2, {481,425}},
+{ 204435, 2, {495,413}},
+{ 204480, 2, {480,426}},
+{ 204490, 2, {605,338}},
+{ 204512, 2, {581,352}},
+{ 204516, 2, {468,437}},
+{ 204525, 2, {505,405}},
+{ 204600, 2, {465,440}},
+{ 204624, 2, {464,441}},
+{ 204672, 2, {492,416}},
+{ 204732, 2, {484,423}},
+{ 204750, 2, {455,450}},
+{ 204756, 2, {453,452}},
+{ 204768, 2, {474,432}},
+{ 204792, 2, {483,424}},
+{ 204800, 2, {512,400}},
+{ 204820, 2, {490,418}},
+{ 204828, 2, {507,404}},
+{ 204960, 2, {480,427}},
+{ 205056, 2, {534,384}},
+{ 205114, 2, {598,343}},
+{ 205155, 2, {485,423}},
+{ 205164, 2, {492,417}},
+{ 205200, 2, {456,450}},
+{ 205205, 2, {455,451}},
+{ 205275, 2, {483,425}},
+{ 205282, 2, {473,434}},
+{ 205296, 2, {546,376}},
+{ 205320, 2, {472,435}},
+{ 205335, 2, {507,405}},
+{ 205344, 2, {496,414}},
+{ 205356, 2, {471,436}},
+{ 205380, 2, {489,420}},
+{ 205400, 2, {520,395}},
+{ 205425, 2, {495,415}},
+{ 205500, 2, {500,411}},
+{ 205504, 2, {494,416}},
+{ 205524, 2, {519,396}},
+{ 205590, 2, {462,445}},
+{ 205620, 2, {460,447}},
+{ 205625, 2, {625,329}},
+{ 205632, 2, {459,448}},
+{ 205640, 2, {485,424}},
+{ 205656, 2, {456,451}},
+{ 205712, 2, {559,368}},
+{ 205740, 2, {508,405}},
+{ 205751, 2, {637,323}},
+{ 205755, 2, {473,435}},
+{ 205800, 2, {490,420}},
+{ 205821, 2, {567,363}},
+{ 205824, 2, {512,402}},
+{ 205840, 2, {496,415}},
+{ 205884, 2, {516,399}},
+{ 205905, 2, {555,371}},
+{ 206010, 2, {545,378}},
+{ 206016, 2, {464,444}},
+{ 206028, 2, {531,388}},
+{ 206040, 2, {505,408}},
+{ 206045, 2, {841,245}},
+{ 206064, 2, {477,432}},
+{ 206074, 2, {493,418}},
+{ 206080, 2, {460,448}},
+{ 206150, 2, {475,434}},
+{ 206208, 2, {537,384}},
+{ 206283, 2, {517,399}},
+{ 206310, 2, {529,390}},
+{ 206340, 2, {543,380}},
+{ 206349, 2, {481,429}},
+{ 206360, 2, {469,440}},
+{ 206388, 2, {468,441}},
+{ 206400, 2, {480,430}},
+{ 206412, 2, {501,412}},
+{ 206424, 2, {488,423}},
+{ 206448, 2, {506,408}},
+{ 206460, 2, {465,444}},
+{ 206480, 2, {464,445}},
+{ 206500, 2, {500,413}},
+{ 206568, 2, {456,453}},
+{ 206610, 2, {485,426}},
+{ 206635, 2, {715,289}},
+{ 206720, 2, {544,380}},
+{ 206724, 2, {483,428}},
+{ 206736, 2, {472,438}},
+{ 206739, 2, {513,403}},
+{ 206752, 2, {497,416}},
+{ 206790, 2, {565,366}},
+{ 206829, 2, {469,441}},
+{ 206832, 2, {496,417}},
+{ 206856, 2, {468,442}},
+{ 206910, 2, {495,418}},
+{ 206955, 2, {511,405}},
+{ 206976, 2, {462,448}},
+{ 207009, 2, {459,451}},
+{ 207030, 2, {515,402}},
+{ 207045, 2, {535,387}},
+{ 207060, 2, {476,435}},
+{ 207144, 2, {504,411}},
+{ 207168, 2, {498,416}},
+{ 207200, 2, {518,400}},
+{ 207240, 2, {471,440}},
+{ 207252, 2, {513,404}},
+{ 207320, 2, {568,365}},
+{ 207336, 2, {489,424}},
+{ 207350, 2, {550,377}},
+{ 207368, 2, {529,392}},
+{ 207400, 2, {488,425}},
+{ 207408, 2, {464,447}},
+{ 207459, 2, {623,333}},
+{ 207460, 2, {460,451}},
+{ 207468, 2, {459,452}},
+{ 207480, 2, {456,455}},
+{ 207522, 2, {486,427}},
+{ 207570, 2, {510,407}},
+{ 207575, 2, {475,437}},
+{ 207600, 2, {519,400}},
+{ 207636, 2, {484,429}},
+{ 207669, 2, {609,341}},
+{ 207675, 2, {585,355}},
+{ 207888, 2, {488,426}},
+{ 207900, 2, {462,450}},
+{ 207928, 2, {553,376}},
+{ 207972, 2, {477,436}},
+{ 208000, 2, {500,416}},
+{ 208012, 2, {476,437}},
+{ 208050, 2, {475,438}},
+{ 208075, 2, {725,287}},
+{ 208080, 2, {510,408}},
+{ 208104, 2, {552,377}},
+{ 208116, 2, {492,423}},
+{ 208120, 2, {473,440}},
+{ 208152, 2, {472,441}},
+{ 208236, 2, {469,444}},
+{ 208260, 2, {468,445}},
+{ 208278, 2, {513,406}},
+{ 208320, 2, {465,448}},
+{ 208356, 2, {537,388}},
+{ 208362, 2, {462,451}},
+{ 208380, 2, {460,453}},
+{ 208384, 2, {512,407}},
+{ 208416, 2, {501,416}},
+{ 208485, 2, {565,369}},
+{ 208494, 2, {486,429}},
+{ 208500, 2, {500,417}},
+{ 208512, 2, {543,384}},
+{ 208560, 2, {474,440}},
+{ 208575, 2, {515,405}},
+{ 208593, 2, {473,441}},
+{ 208620, 2, {549,380}},
+{ 208650, 2, {535,390}},
+{ 208656, 2, {483,432}},
+{ 208658, 2, {578,361}},
+{ 208680, 2, {470,444}},
+{ 208692, 2, {527,396}},
+{ 208754, 2, {481,434}},
+{ 208788, 2, {508,411}},
+{ 208791, 2, {513,407}},
+{ 208800, 2, {464,450}},
+{ 208845, 2, {459,455}},
+{ 208884, 2, {507,412}},
+{ 208896, 2, {512,408}},
+{ 208936, 2, {533,392}},
+{ 208980, 2, {486,430}},
+{ 209000, 2, {475,440}},
+{ 209040, 2, {520,402}},
+{ 209070, 2, {505,414}},
+{ 209076, 2, {524,399}},
+{ 209088, 2, {484,432}},
+{ 209100, 2, {492,425}},
+{ 209124, 2, {471,444}},
+{ 209196, 2, {468,447}},
+{ 209209, 2, {847,247}},
+{ 209230, 2, {490,427}},
+{ 209235, 2, {481,435}},
+{ 209244, 2, {564,371}},
+{ 209250, 2, {465,450}},
+{ 209264, 2, {464,451}},
+{ 209292, 2, {489,428}},
+{ 209304, 2, {459,456}},
+{ 209328, 2, {534,392}},
+{ 209352, 2, {488,429}},
+{ 209380, 2, {551,380}},
+{ 209440, 2, {476,440}},
+{ 209475, 2, {475,441}},
+{ 209510, 2, {511,410}},
+{ 209520, 2, {485,432}},
+{ 209525, 2, {493,425}},
+{ 209560, 2, {520,403}},
+{ 209573, 2, {611,343}},
+{ 209625, 2, {559,375}},
+{ 209664, 2, {468,448}},
+{ 209676, 2, {519,404}},
+{ 209715, 2, {465,451}},
+{ 209745, 2, {531,395}},
+{ 209760, 2, {460,456}},
+{ 209790, 2, {518,405}},
+{ 209808, 2, {496,423}},
+{ 209880, 2, {477,440}},
+{ 209902, 2, {517,406}},
+{ 209916, 2, {476,441}},
+{ 209920, 2, {512,410}},
+{ 209952, 2, {486,432}},
+{ 210012, 2, {473,444}},
+{ 210040, 2, {472,445}},
+{ 210080, 2, {505,416}},
+{ 210084, 2, {492,427}},
+{ 210112, 2, {469,448}},
+{ 210168, 2, {504,417}},
+{ 210180, 2, {465,452}},
+{ 210192, 2, {464,453}},
+{ 210210, 2, {462,455}},
+{ 210231, 2, {497,423}},
+{ 210240, 2, {480,438}},
+{ 210273, 2, {527,399}},
+{ 210276, 2, {531,396}},
+{ 210330, 2, {513,410}},
+{ 210366, 2, {522,403}},
+{ 210375, 2, {495,425}},
+{ 210420, 2, {501,420}},
+{ 210432, 2, {512,411}},
+{ 210450, 2, {575,366}},
+{ 210496, 2, {506,416}},
+{ 210504, 2, {537,392}},
+{ 210540, 2, {484,435}},
+{ 210560, 2, {470,448}},
+{ 210588, 2, {483,436}},
+{ 210630, 2, {510,413}},
+{ 210672, 2, {462,456}},
+{ 210684, 2, {543,388}},
+{ 210728, 2, {497,424}},
+{ 210749, 2, {539,391}},
+{ 210795, 2, {611,345}},
+{ 210800, 2, {496,425}},
+{ 210900, 2, {475,444}},
+{ 210912, 2, {507,416}},
+{ 210915, 2, {545,387}},
+{ 210924, 2, {486,434}},
+{ 210925, 2, {649,325}},
+{ 210930, 2, {474,445}},
+{ 210936, 2, {517,408}},
+{ 210945, 2, {615,343}},
+{ 210984, 2, {472,447}},
+{ 211008, 2, {471,448}},
+{ 211050, 2, {469,450}},
+{ 211068, 2, {468,451}},
+{ 211120, 2, {464,455}},
+{ 211140, 2, {460,459}},
+{ 211152, 2, {498,424}},
+{ 211185, 2, {585,361}},
+{ 211200, 2, {480,440}},
+{ 211225, 2, {497,425}},
+{ 211232, 2, {574,368}},
+{ 211248, 2, {489,432}},
+{ 211250, 2, {625,338}},
+{ 211288, 2, {539,392}},
+{ 211296, 2, {496,426}},
+{ 211356, 2, {513,412}},
+{ 211365, 2, {495,427}},
+{ 211410, 2, {486,435}},
+{ 211497, 2, {493,429}},
+{ 211500, 2, {470,450}},
+{ 211508, 2, {484,437}},
+{ 211560, 2, {492,430}},
+{ 211640, 2, {481,440}},
+{ 211650, 2, {498,425}},
+{ 211680, 2, {480,441}},
+{ 211720, 2, {536,395}},
+{ 211752, 2, {519,408}},
+{ 211761, 2, {621,341}},
+{ 211788, 2, {477,444}},
+{ 211836, 2, {508,417}},
+{ 211860, 2, {495,428}},
+{ 211869, 2, {513,413}},
+{ 211904, 2, {473,448}},
+{ 211926, 2, {494,429}},
+{ 211968, 2, {512,414}},
+{ 212004, 2, {468,453}},
+{ 212040, 2, {465,456}},
+{ 212076, 2, {516,411}},
+{ 212100, 2, {505,420}},
+{ 212121, 2, {481,441}},
+{ 212135, 2, {551,385}},
+{ 212160, 2, {480,442}},
+{ 212175, 2, {575,369}},
+{ 212205, 2, {645,329}},
+{ 212220, 2, {524,405}},
+{ 212256, 2, {528,402}},
+{ 212265, 2, {477,445}},
+{ 212280, 2, {488,435}},
+{ 212352, 2, {474,448}},
+{ 212355, 2, {495,429}},
+{ 212382, 2, {486,437}},
+{ 212400, 2, {472,450}},
+{ 212424, 2, {501,424}},
+{ 212430, 2, {485,438}},
+{ 212454, 2, {522,407}},
+{ 212480, 2, {512,415}},
+{ 212544, 2, {492,432}},
+{ 212550, 2, {545,390}},
+{ 212576, 2, {511,416}},
+{ 212625, 2, {525,405}},
+{ 212652, 2, {537,396}},
+{ 212667, 2, {533,399}},
+{ 212704, 2, {544,391}},
+{ 212772, 2, {476,447}},
+{ 212784, 2, {496,429}},
+{ 212800, 2, {475,448}},
+{ 212850, 2, {473,450}},
+{ 212856, 2, {543,392}},
+{ 212892, 2, {471,452}},
+{ 212895, 2, {513,415}},
+{ 212940, 2, {468,455}},
+{ 212976, 2, {464,459}},
+{ 213012, 2, {549,388}},
+{ 213108, 2, {516,413}},
+{ 213120, 2, {480,444}},
+{ 213125, 2, {625,341}},
+{ 213180, 2, {510,418}},
+{ 213192, 2, {504,423}},
+{ 213204, 2, {489,436}},
+{ 213210, 2, {515,414}},
+{ 213248, 2, {476,448}},
+{ 213280, 2, {496,430}},
+{ 213325, 2, {575,371}},
+{ 213400, 2, {485,440}},
+{ 213435, 2, {465,459}},
+{ 213500, 2, {500,427}},
+{ 213504, 2, {512,417}},
+{ 213525, 2, {585,365}},
+{ 213570, 2, {565,378}},
+{ 213600, 2, {480,445}},
+{ 213615, 2, {505,423}},
+{ 213675, 2, {525,407}},
+{ 213696, 2, {477,448}},
+{ 213710, 2, {497,430}},
+{ 213720, 2, {520,411}},
+{ 213744, 2, {488,438}},
+{ 213750, 2, {475,450}},
+{ 213759, 2, {567,377}},
+{ 213785, 2, {715,299}},
+{ 213807, 2, {589,363}},
+{ 213808, 2, {581,368}},
+{ 213816, 2, {472,453}},
+{ 213828, 2, {519,412}},
+{ 213840, 2, {486,440}},
+{ 213864, 2, {469,456}},
+{ 213885, 2, {485,441}},
+{ 213900, 2, {465,460}},
+{ 213928, 2, {484,442}},
+{ 214011, 2, {553,387}},
+{ 214016, 2, {512,418}},
+{ 214020, 2, {492,435}},
+{ 214032, 2, {546,392}},
+{ 214065, 2, {603,355}},
+{ 214120, 2, {505,424}},
+{ 214130, 2, {490,437}},
+{ 214149, 2, {663,323}},
+{ 214200, 2, {476,450}},
+{ 214225, 2, {475,451}},
+{ 214240, 2, {515,416}},
+{ 214245, 2, {529,405}},
+{ 214320, 2, {470,456}},
+{ 214326, 2, {486,441}},
+{ 214368, 2, {464,462}},
+{ 214375, 2, {625,343}},
+{ 214389, 2, {581,369}},
+{ 214428, 2, {501,428}},
+{ 214452, 2, {483,444}},
+{ 214500, 2, {500,429}},
+{ 214524, 2, {531,404}},
+{ 214560, 2, {480,447}},
+{ 214656, 2, {516,416}},
+{ 214676, 2, {476,451}},
+{ 214704, 2, {497,432}},
+{ 214760, 2, {472,455}},
+{ 214776, 2, {471,456}},
+{ 214795, 2, {595,361}},
+{ 214800, 2, {537,400}},
+{ 214812, 2, {468,459}},
+{ 214880, 2, {544,395}},
+{ 214884, 2, {508,423}},
+{ 214968, 2, {507,424}},
+{ 215016, 2, {527,408}},
+{ 215028, 2, {543,396}},
+{ 215050, 2, {506,425}},
+{ 215070, 2, {535,402}},
+{ 215072, 2, {517,416}},
+{ 215118, 2, {629,342}},
+{ 215130, 2, {505,426}},
+{ 215136, 2, {498,432}},
+{ 215160, 2, {489,440}},
+{ 215172, 2, {516,417}},
+{ 215208, 2, {488,441}},
+{ 215215, 2, {473,455}},
+{ 215271, 2, {469,459}},
+{ 215280, 2, {468,460}},
+{ 215340, 2, {485,444}},
+{ 215364, 2, {524,411}},
+{ 215460, 2, {513,420}},
+{ 215488, 2, {481,448}},
+{ 215586, 2, {522,413}},
+{ 215604, 2, {477,452}},
+{ 215628, 2, {476,453}},
+{ 215644, 2, {572,377}},
+{ 215670, 2, {474,455}},
+{ 215688, 2, {473,456}},
+{ 215730, 2, {470,459}},
+{ 215740, 2, {469,460}},
+{ 215747, 2, {629,343}},
+{ 215760, 2, {465,464}},
+{ 215800, 2, {520,415}},
+{ 215820, 2, {495,436}},
+{ 215832, 2, {529,408}},
+{ 215865, 2, {533,405}},
+{ 215878, 2, {494,437}},
+{ 215904, 2, {519,416}},
+{ 215985, 2, {561,385}},
+{ 216000, 2, {480,450}},
+{ 216144, 2, {474,456}},
+{ 216153, 2, {511,423}},
+{ 216195, 2, {497,435}},
+{ 216240, 2, {510,424}},
+{ 216270, 2, {486,445}},
+{ 216300, 2, {515,420}},
+{ 216315, 2, {495,437}},
+{ 216348, 2, {484,447}},
+{ 216384, 2, {483,448}},
+{ 216398, 2, {533,406}},
+{ 216432, 2, {501,432}},
+{ 216450, 2, {481,450}},
+{ 216480, 2, {480,451}},
+{ 216576, 2, {512,423}},
+{ 216600, 2, {475,456}},
+{ 216648, 2, {472,459}},
+{ 216660, 2, {471,460}},
+{ 216664, 2, {511,424}},
+{ 216675, 2, {535,405}},
+{ 216720, 2, {504,430}},
+{ 216775, 2, {575,377}},
+{ 216776, 2, {553,392}},
+{ 216825, 2, {525,413}},
+{ 216832, 2, {484,448}},
+{ 216840, 2, {520,417}},
+{ 216855, 2, {549,395}},
+{ 216876, 2, {583,372}},
+{ 216920, 2, {493,440}},
+{ 216948, 2, {537,404}},
+{ 216972, 2, {492,441}},
+{ 216996, 2, {507,428}},
+{ 217000, 2, {500,434}},
+{ 217008, 2, {528,411}},
+{ 217035, 2, {477,455}},
+{ 217080, 2, {536,405}},
+{ 217107, 2, {473,459}},
+{ 217116, 2, {489,444}},
+{ 217152, 2, {468,464}},
+{ 217160, 2, {488,445}},
+{ 217175, 2, {511,425}},
+{ 217200, 2, {543,400}},
+{ 217217, 2, {539,403}},
+{ 217248, 2, {496,438}},
+{ 217280, 2, {485,448}},
+{ 217350, 2, {483,450}},
+{ 217360, 2, {494,440}},
+{ 217404, 2, {549,396}},
+{ 217413, 2, {493,441}},
+{ 217440, 2, {480,453}},
+{ 217500, 2, {500,435}},
+{ 217512, 2, {477,456}},
+{ 217560, 2, {490,444}},
+{ 217580, 2, {473,460}},
+{ 217600, 2, {512,425}},
+{ 217616, 2, {469,464}},
+{ 217620, 2, {468,465}},
+{ 217668, 2, {561,388}},
+{ 217672, 2, {598,364}},
+{ 217728, 2, {486,448}},
+{ 217770, 2, {510,427}},
+{ 217800, 2, {484,450}},
+{ 217833, 2, {483,451}},
+{ 217845, 2, {515,423}},
+{ 217854, 2, {494,441}},
+{ 217872, 2, {534,408}},
+{ 217906, 2, {493,442}},
+{ 217932, 2, {508,429}},
+{ 217980, 2, {519,420}},
+{ 218025, 2, {475,459}},
+{ 218064, 2, {472,462}},
+{ 218075, 2, {671,325}},
+{ 218080, 2, {470,464}},
+{ 218085, 2, {469,465}},
+{ 218112, 2, {512,426}},
+{ 218127, 2, {611,357}},
+{ 218136, 2, {488,447}},
+{ 218148, 2, {588,371}},
+{ 218160, 2, {505,432}},
+{ 218178, 2, {527,414}},
+{ 218225, 2, {725,301}},
+{ 218250, 2, {485,450}},
+{ 218268, 2, {516,423}},
+{ 218316, 2, {483,452}},
+{ 218360, 2, {515,424}},
+{ 218400, 2, {480,455}},
+{ 218405, 2, {605,361}},
+{ 218436, 2, {501,436}},
+{ 218456, 2, {581,376}},
+{ 218484, 2, {476,459}},
+{ 218508, 2, {524,417}},
+{ 218526, 2, {473,462}},
+{ 218544, 2, {471,464}},
+{ 218592, 2, {506,432}},
+{ 218625, 2, {583,375}},
+{ 218652, 2, {532,411}},
+{ 218655, 2, {565,387}},
+{ 218673, 2, {623,351}},
+{ 218680, 2, {497,440}},
+{ 218700, 2, {486,450}},
+{ 218736, 2, {496,441}},
+{ 218772, 2, {531,412}},
+{ 218790, 2, {495,442}},
+{ 218855, 2, {481,455}},
+{ 218880, 2, {480,456}},
+{ 218890, 2, {530,413}},
+{ 218940, 2, {492,445}},
+{ 219051, 2, {513,427}},
+{ 219072, 2, {489,448}},
+{ 219090, 2, {545,402}},
+{ 219096, 2, {537,408}},
+{ 219120, 2, {498,440}},
+{ 219128, 2, {559,392}},
+{ 219177, 2, {497,441}},
+{ 219186, 2, {486,451}},
+{ 219240, 2, {504,435}},
+{ 219252, 2, {484,453}},
+{ 219336, 2, {481,456}},
+{ 219351, 2, {561,391}},
+{ 219372, 2, {543,404}},
+{ 219373, 2, {539,407}},
+{ 219390, 2, {515,426}},
+{ 219420, 2, {477,460}},
+{ 219450, 2, {475,462}},
+{ 219472, 2, {473,464}},
+{ 219480, 2, {472,465}},
+{ 219492, 2, {469,468}},
+{ 219520, 2, {490,448}},
+{ 219555, 2, {595,369}},
+{ 219564, 2, {513,428}},
+{ 219600, 2, {488,450}},
+{ 219648, 2, {512,429}},
+{ 219725, 2, {517,425}},
+{ 219730, 2, {511,430}},
+{ 219780, 2, {495,444}},
+{ 219849, 2, {551,399}},
+{ 219924, 2, {492,447}},
+{ 219936, 2, {474,464}},
+{ 219945, 2, {473,465}},
+{ 219960, 2, {470,468}},
+{ 219996, 2, {567,388}},
+{ 220032, 2, {573,384}},
+{ 220056, 2, {519,424}},
+{ 220064, 2, {529,416}},
+{ 220095, 2, {603,365}},
+{ 220150, 2, {518,425}},
+{ 220160, 2, {512,430}},
+{ 220176, 2, {528,417}},
+{ 220224, 2, {496,444}},
+{ 220248, 2, {483,456}},
+{ 220255, 2, {899,245}},
+{ 220275, 2, {495,445}},
+{ 220286, 2, {527,418}},
+{ 220296, 2, {536,411}},
+{ 220320, 2, {480,459}},
+{ 220332, 2, {516,427}},
+{ 220350, 2, {565,390}},
+{ 220365, 2, {531,415}},
+{ 220400, 2, {475,464}},
+{ 220416, 2, {492,448}},
+{ 220428, 2, {471,468}},
+{ 220430, 2, {470,469}},
+{ 220440, 2, {501,440}},
+{ 220455, 2, {621,355}},
+{ 220500, 2, {490,450}},
+{ 220590, 2, {513,430}},
+{ 220662, 2, {533,414}},
+{ 220668, 2, {497,444}},
+{ 220720, 2, {496,445}},
+{ 220725, 2, {545,405}},
+{ 220752, 2, {504,438}},
+{ 220779, 2, {481,459}},
+{ 220800, 2, {480,460}},
+{ 220932, 2, {612,361}},
+{ 220980, 2, {508,435}},
+{ 220990, 2, {490,451}},
+{ 221000, 2, {500,442}},
+{ 221028, 2, {489,452}},
+{ 221052, 2, {507,436}},
+{ 221064, 2, {488,453}},
+{ 221130, 2, {486,455}},
+{ 221160, 2, {485,456}},
+{ 221184, 2, {512,432}},
+{ 221190, 2, {505,438}},
+{ 221200, 2, {553,400}},
+{ 221221, 2, {1001,221}},
+{ 221235, 2, {645,343}},
+{ 221244, 2, {537,412}},
+{ 221260, 2, {481,460}},
+{ 221312, 2, {494,448}},
+{ 221328, 2, {477,464}},
+{ 221340, 2, {476,465}},
+{ 221364, 2, {473,468}},
+{ 221368, 2, {472,469}},
+{ 221408, 2, {544,407}},
+{ 221430, 2, {605,366}},
+{ 221490, 2, {535,414}},
+{ 221520, 2, {520,426}},
+{ 221536, 2, {602,368}},
+{ 221544, 2, {543,408}},
+{ 221559, 2, {507,437}},
+{ 221578, 2, {646,343}},
+{ 221610, 2, {498,445}},
+{ 221616, 2, {486,456}},
+{ 221650, 2, {550,403}},
+{ 221652, 2, {524,423}},
+{ 221697, 2, {483,459}},
+{ 221712, 2, {496,447}},
+{ 221728, 2, {533,416}},
+{ 221760, 2, {480,462}},
+{ 221796, 2, {549,404}},
+{ 221844, 2, {532,417}},
+{ 221850, 2, {493,450}},
+{ 221904, 2, {536,414}},
+{ 221940, 2, {540,411}},
+{ 222040, 2, {488,455}},
+{ 222132, 2, {519,428}},
+{ 222144, 2, {534,416}},
+{ 222156, 2, {484,459}},
+{ 222180, 2, {483,460}},
+{ 222200, 2, {505,440}},
+{ 222222, 2, {481,462}},
+{ 222264, 2, {504,441}},
+{ 222285, 2, {511,435}},
+{ 222300, 2, {475,468}},
+{ 222312, 2, {472,471}},
+{ 222324, 2, {573,388}},
+{ 222404, 2, {611,364}},
+{ 222425, 2, {775,287}},
+{ 222440, 2, {536,415}},
+{ 222444, 2, {501,444}},
+{ 222456, 2, {552,403}},
+{ 222480, 2, {515,432}},
+{ 222525, 2, {575,387}},
+{ 222530, 2, {578,385}},
+{ 222600, 2, {525,424}},
+{ 222615, 2, {485,459}},
+{ 222642, 2, {513,434}},
+{ 222656, 2, {497,448}},
+{ 222705, 2, {505,441}},
+{ 222768, 2, {476,468}},
+{ 222775, 2, {475,469}},
+{ 222870, 2, {510,437}},
+{ 222876, 2, {492,453}},
+{ 222894, 2, {522,427}},
+{ 222912, 2, {516,432}},
+{ 222984, 2, {489,456}},
+{ 223020, 2, {531,420}},
+{ 223040, 2, {544,410}},
+{ 223041, 2, {559,399}},
+{ 223080, 2, {507,440}},
+{ 223104, 2, {498,448}},
+{ 223155, 2, {513,435}},
+{ 223184, 2, {481,464}},
+{ 223200, 2, {480,465}},
+{ 223236, 2, {477,468}},
+{ 223245, 2, {495,451}},
+{ 223300, 2, {550,406}},
+{ 223344, 2, {517,432}},
+{ 223392, 2, {537,416}},
+{ 223440, 2, {490,456}},
+{ 223500, 2, {500,447}},
+{ 223512, 2, {536,417}},
+{ 223560, 2, {486,460}},
+{ 223584, 2, {544,411}},
+{ 223587, 2, {507,441}},
+{ 223650, 2, {497,450}},
+{ 223665, 2, {481,465}},
+{ 223668, 2, {513,436}},
+{ 223696, 2, {496,451}},
+{ 223713, 2, {477,469}},
+{ 223716, 2, {543,412}},
+{ 223728, 2, {474,472}},
+{ 223740, 2, {495,452}},
+{ 223744, 2, {512,437}},
+{ 223820, 2, {589,380}},
+{ 223850, 2, {550,407}},
+{ 223860, 2, {492,455}},
+{ 223905, 2, {649,345}},
+{ 223925, 2, {689,325}},
+{ 223965, 2, {553,405}},
+{ 223975, 2, {527,425}},
+{ 223992, 2, {488,459}},
+{ 224000, 2, {500,448}},
+{ 224028, 2, {508,441}},
+{ 224070, 2, {485,462}},
+{ 224112, 2, {483,464}},
+{ 224175, 2, {525,427}},
+{ 224181, 2, {513,437}},
+{ 224196, 2, {476,471}},
+{ 224200, 2, {475,472}},
+{ 224208, 2, {519,432}},
+{ 224220, 2, {505,444}},
+{ 224224, 2, {539,416}},
+{ 224250, 2, {575,390}},
+{ 224256, 2, {512,438}},
+{ 224280, 2, {504,445}},
+{ 224315, 2, {493,455}},
+{ 224360, 2, {568,395}},
+{ 224378, 2, {517,434}},
+{ 224400, 2, {510,440}},
+{ 224448, 2, {501,448}},
+{ 224455, 2, {583,385}},
+{ 224460, 2, {516,435}},
+{ 224532, 2, {486,462}},
+{ 224553, 2, {629,357}},
+{ 224616, 2, {573,392}},
+{ 224640, 2, {480,468}},
+{ 224652, 2, {579,388}},
+{ 224675, 2, {475,473}},
+{ 224688, 2, {496,453}},
+{ 224700, 2, {525,428}},
+{ 224770, 2, {494,455}},
+{ 224775, 2, {555,405}},
+{ 224796, 2, {524,429}},
+{ 224808, 2, {493,456}},
+{ 224825, 2, {529,425}},
+{ 224840, 2, {511,440}},
+{ 224847, 2, {581,387}},
+{ 224895, 2, {517,435}},
+{ 224910, 2, {490,459}},
+{ 224928, 2, {528,426}},
+{ 224939, 2, {1331,169}},
+{ 224940, 2, {489,460}},
+{ 225036, 2, {532,423}},
+{ 225040, 2, {485,464}},
+{ 225060, 2, {484,465}},
+{ 225108, 2, {481,468}},
+{ 225120, 2, {480,469}},
+{ 225144, 2, {477,472}},
+{ 225148, 2, {476,473}},
+{ 225150, 2, {475,474}},
+{ 225180, 2, {540,417}},
+{ 225216, 2, {544,414}},
+{ 225225, 2, {495,455}},
+{ 225280, 2, {512,440}},
+{ 225288, 2, {504,447}},
+{ 225302, 2, {539,418}},
+{ 225330, 2, {518,435}},
+{ 225351, 2, {511,441}},
+{ 225456, 2, {488,462}},
+{ 225500, 2, {500,451}},
+{ 225504, 2, {486,464}},
+{ 225540, 2, {537,420}},
+{ 225570, 2, {515,438}},
+{ 225600, 2, {480,470}},
+{ 225630, 2, {545,414}},
+{ 225675, 2, {531,425}},
+{ 225680, 2, {496,455}},
+{ 225720, 2, {495,456}},
+{ 225760, 2, {544,415}},
+{ 225792, 2, {504,448}},
+{ 225828, 2, {492,459}},
+{ 225888, 2, {543,416}},
+{ 225990, 2, {486,465}},
+{ 226044, 2, {483,468}},
+{ 226080, 2, {480,471}},
+{ 226083, 2, {527,429}},
+{ 226107, 2, {679,333}},
+{ 226188, 2, {549,412}},
+{ 226200, 2, {520,435}},
+{ 226240, 2, {505,448}},
+{ 226284, 2, {519,436}},
+{ 226287, 2, {493,459}},
+{ 226304, 2, {512,442}},
+{ 226305, 2, {535,423}},
+{ 226310, 2, {530,427}},
+{ 226395, 2, {559,405}},
+{ 226416, 2, {534,424}},
+{ 226452, 2, {501,452}},
+{ 226500, 2, {500,453}},
+{ 226525, 2, {533,425}},
+{ 226548, 2, {522,434}},
+{ 226575, 2, {477,475}},
+{ 226590, 2, {498,455}},
+{ 226600, 2, {515,440}},
+{ 226625, 2, {875,259}},
+{ 226632, 2, {497,456}},
+{ 226644, 2, {561,404}},
+{ 226665, 2, {621,365}},
+{ 226688, 2, {506,448}},
+{ 226728, 2, {536,423}},
+{ 226730, 2, {553,410}},
+{ 226737, 2, {531,427}},
+{ 226746, 2, {494,459}},
+{ 226765, 2, {589,385}},
+{ 226780, 2, {493,460}},
+{ 226800, 2, {504,450}},
+{ 226848, 2, {544,417}},
+{ 226875, 2, {605,375}},
+{ 226884, 2, {511,444}},
+{ 226896, 2, {489,464}},
+{ 226908, 2, {573,396}},
+{ 226920, 2, {488,465}},
+{ 226941, 2, {529,429}},
+{ 226950, 2, {510,445}},
+{ 226954, 2, {559,406}},
+{ 226968, 2, {579,392}},
+{ 226980, 2, {485,468}},
+{ 227040, 2, {480,473}},
+{ 227052, 2, {477,476}},
+{ 227076, 2, {508,447}},
+{ 227088, 2, {498,456}},
+{ 227106, 2, {558,407}},
+{ 227115, 2, {515,441}},
+{ 227130, 2, {565,402}},
+{ 227136, 2, {507,448}},
+{ 227150, 2, {550,413}},
+{ 227250, 2, {505,450}},
+{ 227268, 2, {531,428}},
+{ 227328, 2, {512,444}},
+{ 227360, 2, {490,464}},
+{ 227392, 2, {544,418}},
+{ 227500, 2, {500,455}},
+{ 227520, 2, {480,474}},
+{ 227556, 2, {516,441}},
+{ 227664, 2, {496,459}},
+{ 227688, 2, {537,424}},
+{ 227700, 2, {495,460}},
+{ 227752, 2, {581,392}},
+{ 227760, 2, {520,438}},
+{ 227766, 2, {493,462}},
+{ 227772, 2, {513,444}},
+{ 227800, 2, {536,425}},
+{ 227835, 2, {549,415}},
+{ 227840, 2, {512,445}},
+{ 227910, 2, {535,426}},
+{ 227920, 2, {518,440}},
+{ 227934, 2, {486,469}},
+{ 227940, 2, {524,435}},
+{ 227964, 2, {484,471}},
+{ 227976, 2, {483,472}},
+{ 227997, 2, {517,441}},
+{ 228000, 2, {480,475}},
+{ 228060, 2, {543,420}},
+{ 228085, 2, {605,377}},
+{ 228123, 2, {497,459}},
+{ 228144, 2, {582,392}},
+{ 228150, 2, {507,450}},
+{ 228165, 2, {615,371}},
+{ 228228, 2, {494,462}},
+{ 228285, 2, {513,445}},
+{ 228288, 2, {492,464}},
+{ 228312, 2, {504,453}},
+{ 228336, 2, {536,426}},
+{ 228360, 2, {519,440}},
+{ 228420, 2, {486,470}},
+{ 228456, 2, {501,456}},
+{ 228459, 2, {483,473}},
+{ 228475, 2, {481,475}},
+{ 228480, 2, {480,476}},
+{ 228501, 2, {567,403}},
+{ 228516, 2, {548,417}},
+{ 228528, 2, {529,432}},
+{ 228536, 2, {539,424}},
+{ 228620, 2, {497,460}},
+{ 228660, 2, {515,444}},
+{ 228735, 2, {585,391}},
+{ 228780, 2, {492,465}},
+{ 228781, 2, {667,343}},
+{ 228825, 2, {565,405}},
+{ 228852, 2, {489,468}},
+{ 228864, 2, {512,447}},
+{ 228872, 2, {488,469}},
+{ 228888, 2, {561,408}},
+{ 228900, 2, {525,436}},
+{ 228920, 2, {485,472}},
+{ 228928, 2, {511,448}},
+{ 228956, 2, {481,476}},
+{ 228960, 2, {480,477}},
+{ 229068, 2, {567,404}},
+{ 229075, 2, {539,425}},
+{ 229125, 2, {611,375}},
+{ 229152, 2, {496,462}},
+{ 229164, 2, {507,452}},
+{ 229200, 2, {573,400}},
+{ 229215, 2, {555,413}},
+{ 229264, 2, {623,368}},
+{ 229284, 2, {579,396}},
+{ 229320, 2, {490,468}},
+{ 229392, 2, {486,472}},
+{ 229425, 2, {483,475}},
+{ 229500, 2, {500,459}},
+{ 229548, 2, {517,444}},
+{ 229600, 2, {560,410}},
+{ 229620, 2, {516,445}},
+{ 229632, 2, {552,416}},
+{ 229680, 2, {495,464}},
+{ 229770, 2, {555,414}},
+{ 229810, 2, {490,469}},
+{ 229836, 2, {537,428}},
+{ 229840, 2, {520,442}},
+{ 229848, 2, {488,471}},
+{ 229878, 2, {486,473}},
+{ 229887, 2, {623,369}},
+{ 229890, 2, {485,474}},
+{ 229908, 2, {483,476}},
+{ 229944, 2, {536,429}},
+{ 229950, 2, {511,450}},
+{ 229957, 2, {637,361}},
+{ 230010, 2, {510,451}},
+{ 230048, 2, {553,416}},
+{ 230112, 2, {544,423}},
+{ 230124, 2, {508,453}},
+{ 230184, 2, {552,417}},
+{ 230230, 2, {506,455}},
+{ 230232, 2, {543,424}},
+{ 230265, 2, {595,387}},
+{ 230280, 2, {505,456}},
+{ 230318, 2, {551,418}},
+{ 230436, 2, {519,444}},
+{ 230460, 2, {501,460}},
+{ 230516, 2, {572,403}},
+{ 230535, 2, {545,423}},
+{ 230580, 2, {540,427}},
+{ 230608, 2, {497,464}},
+{ 230640, 2, {496,465}},
+{ 230652, 2, {516,447}},
+{ 230680, 2, {584,395}},
+{ 230688, 2, {534,432}},
+{ 230720, 2, {515,448}},
+{ 230724, 2, {493,468}},
+{ 230736, 2, {506,456}},
+{ 230748, 2, {492,469}},
+{ 230769, 2, {567,407}},
+{ 230808, 2, {489,472}},
+{ 230850, 2, {486,475}},
+{ 230868, 2, {484,477}},
+{ 230880, 2, {481,480}},
+{ 230912, 2, {512,451}},
+{ 230945, 2, {715,323}},
+{ 231000, 2, {500,462}},
+{ 231072, 2, {498,464}},
+{ 231075, 2, {585,395}},
+{ 231084, 2, {524,441}},
+{ 231105, 2, {497,465}},
+{ 231120, 2, {535,432}},
+{ 231132, 2, {561,412}},
+{ 231150, 2, {575,402}},
+{ 231168, 2, {516,448}},
+{ 231192, 2, {494,468}},
+{ 231200, 2, {544,425}},
+{ 231231, 2, {539,429}},
+{ 231240, 2, {492,470}},
+{ 231264, 2, {528,438}},
+{ 231312, 2, {488,474}},
+{ 231322, 2, {533,434}},
+{ 231336, 2, {486,476}},
+{ 231345, 2, {485,477}},
+{ 231363, 2, {513,451}},
+{ 231400, 2, {520,445}},
+{ 231420, 2, {532,435}},
+{ 231426, 2, {559,414}},
+{ 231492, 2, {573,404}},
+{ 231495, 2, {671,345}},
+{ 231504, 2, {546,424}},
+{ 231516, 2, {531,436}},
+{ 231600, 2, {579,400}},
+{ 231616, 2, {517,448}},
+{ 231660, 2, {495,468}},
+{ 231725, 2, {575,403}},
+{ 231732, 2, {492,471}},
+{ 231744, 2, {544,426}},
+{ 231750, 2, {515,450}},
+{ 231770, 2, {490,473}},
+{ 231795, 2, {505,459}},
+{ 231800, 2, {488,475}},
+{ 231804, 2, {548,423}},
+{ 231840, 2, {483,480}},
+{ 231855, 2, {533,435}},
+{ 231875, 2, {625,371}},
+{ 231876, 2, {513,452}},
+{ 231880, 2, {527,440}},
+{ 231936, 2, {512,453}},
+{ 231984, 2, {537,432}},
+{ 232050, 2, {510,455}},
+{ 232064, 2, {518,448}},
+{ 232128, 2, {496,468}},
+{ 232155, 2, {495,469}},
+{ 232170, 2, {545,426}},
+{ 232254, 2, {506,459}},
+{ 232290, 2, {522,445}},
+{ 232320, 2, {484,480}},
+{ 232323, 2, {483,481}},
+{ 232400, 2, {560,415}},
+{ 232404, 2, {543,428}},
+{ 232407, 2, {527,441}},
+{ 232440, 2, {520,447}},
+{ 232464, 2, {501,464}},
+{ 232470, 2, {567,410}},
+{ 232484, 2, {532,437}},
+{ 232500, 2, {500,465}},
+{ 232512, 2, {519,448}},
+{ 232544, 2, {559,416}},
+{ 232551, 2, {729,319}},
+{ 232560, 2, {510,456}},
+{ 232596, 2, {497,468}},
+{ 232617, 2, {583,399}},
+{ 232624, 2, {496,469}},
+{ 232645, 2, {595,391}},
+{ 232716, 2, {492,473}},
+{ 232764, 2, {489,476}},
+{ 232776, 2, {488,477}},
+{ 232800, 2, {485,480}},
+{ 232804, 2, {484,481}},
+{ 232848, 2, {504,462}},
+{ 232875, 2, {575,405}},
+{ 232932, 2, {564,413}},
+{ 232934, 2, {527,442}},
+{ 232960, 2, {512,455}},
+{ 233016, 2, {511,456}},
+{ 233100, 2, {518,450}},
+{ 233120, 2, {496,470}},
+{ 233160, 2, {536,435}},
+{ 233172, 2, {508,459}},
+{ 233220, 2, {507,460}},
+{ 233235, 2, {639,365}},
+{ 233275, 2, {775,301}},
+{ 233280, 2, {486,480}},
+{ 233310, 2, {505,462}},
+{ 233325, 2, {549,425}},
+{ 233376, 2, {528,442}},
+{ 233415, 2, {513,455}},
+{ 233450, 2, {575,406}},
+{ 233472, 2, {512,456}},
+{ 233496, 2, {552,423}},
+{ 233590, 2, {497,470}},
+{ 233604, 2, {567,412}},
+{ 233616, 2, {496,471}},
+{ 233618, 2, {518,451}},
+{ 233640, 2, {495,472}},
+{ 233700, 2, {492,475}},
+{ 233740, 2, {580,403}},
+{ 233748, 2, {516,453}},
+{ 233766, 2, {486,481}},
+{ 233772, 2, {484,483}},
+{ 233784, 2, {573,408}},
+{ 233818, 2, {529,442}},
+{ 233840, 2, {592,395}},
+{ 233910, 2, {565,414}},
+{ 233916, 2, {579,404}},
+{ 233919, 2, {553,423}},
+{ 233920, 2, {544,430}},
+{ 233928, 2, {513,456}},
+{ 234000, 2, {500,468}},
+{ 234025, 2, {575,407}},
+{ 234036, 2, {591,396}},
+{ 234080, 2, {532,440}},
+{ 234117, 2, {621,377}},
+{ 234132, 2, {537,436}},
+{ 234135, 2, {495,473}},
+{ 234175, 2, {493,475}},
+{ 234228, 2, {524,447}},
+{ 234234, 2, {507,462}},
+{ 234248, 2, {623,376}},
+{ 234320, 2, {505,464}},
+{ 234330, 2, {535,438}},
+{ 234360, 2, {504,465}},
+{ 234416, 2, {598,392}},
+{ 234432, 2, {528,444}},
+{ 234465, 2, {539,435}},
+{ 234468, 2, {501,468}},
+{ 234472, 2, {553,424}},
+{ 234500, 2, {500,469}},
+{ 234520, 2, {520,451}},
+{ 234549, 2, {511,459}},
+{ 234576, 2, {543,432}},
+{ 234584, 2, {497,472}},
+{ 234588, 2, {519,452}},
+{ 234608, 2, {496,473}},
+{ 234612, 2, {532,441}},
+{ 234624, 2, {564,416}},
+{ 234668, 2, {493,476}},
+{ 234684, 2, {492,477}},
+{ 234720, 2, {489,480}},
+{ 234738, 2, {486,483}},
+{ 234768, 2, {536,438}},
+{ 234780, 2, {516,455}},
+{ 234840, 2, {515,456}},
+{ 234850, 2, {550,427}},
+{ 234960, 2, {528,445}},
+{ 234972, 2, {549,428}},
+{ 235008, 2, {512,459}},
+{ 235011, 2, {589,399}},
+{ 235025, 2, {553,425}},
+{ 235053, 2, {533,441}},
+{ 235056, 2, {498,472}},
+{ 235060, 2, {511,460}},
+{ 235092, 2, {548,429}},
+{ 235104, 2, {496,474}},
+{ 235125, 2, {495,475}},
+{ 235144, 2, {494,476}},
+{ 235152, 2, {552,426}},
+{ 235188, 2, {556,423}},
+{ 235200, 2, {490,480}},
+{ 235224, 2, {486,484}},
+{ 235235, 2, {517,455}},
+{ 235248, 2, {507,464}},
+{ 235305, 2, {567,415}},
+{ 235320, 2, {530,444}},
+{ 235400, 2, {535,440}},
+{ 235410, 2, {570,413}},
+{ 235422, 2, {522,451}},
+{ 235431, 2, {707,333}},
+{ 235445, 2, {961,245}},
+{ 235500, 2, {500,471}},
+{ 235520, 2, {512,460}},
+{ 235543, 2, {539,437}},
+{ 235560, 2, {520,453}},
+{ 235600, 2, {496,475}},
+{ 235620, 2, {495,476}},
+{ 235625, 2, {625,377}},
+{ 235690, 2, {490,481}},
+{ 235704, 2, {488,483}},
+{ 235710, 2, {486,485}},
+{ 235720, 2, {568,415}},
+{ 235752, 2, {517,456}},
+{ 235764, 2, {531,444}},
+{ 235935, 2, {535,441}},
+{ 235950, 2, {550,429}},
+{ 235980, 2, {513,460}},
+{ 236016, 2, {528,447}},
+{ 236060, 2, {580,407}},
+{ 236075, 2, {497,475}},
+{ 236076, 2, {573,412}},
+{ 236160, 2, {492,480}},
+{ 236208, 2, {518,456}},
+{ 236220, 2, {508,465}},
+{ 236232, 2, {579,408}},
+{ 236250, 2, {525,450}},
+{ 236280, 2, {537,440}},
+{ 236295, 2, {531,445}},
+{ 236340, 2, {505,468}},
+{ 236376, 2, {504,469}},
+{ 236379, 2, {551,429}},
+{ 236385, 2, {515,459}},
+{ 236400, 2, {591,400}},
+{ 236472, 2, {501,472}},
+{ 236500, 2, {500,473}},
+{ 236544, 2, {512,462}},
+{ 236550, 2, {498,475}},
+{ 236555, 2, {605,391}},
+{ 236592, 2, {496,477}},
+{ 236600, 2, {520,455}},
+{ 236640, 2, {493,480}},
+{ 236664, 2, {519,456}},
+{ 236676, 2, {489,484}},
+{ 236680, 2, {488,485}},
+{ 236698, 2, {583,406}},
+{ 236748, 2, {543,436}},
+{ 236775, 2, {525,451}},
+{ 236808, 2, {506,468}},
+{ 236844, 2, {516,459}},
+{ 236880, 2, {504,470}},
+{ 236925, 2, {585,405}},
+{ 236985, 2, {555,427}},
+{ 236992, 2, {529,448}},
+{ 237069, 2, {497,477}},
+{ 237104, 2, {511,464}},
+{ 237120, 2, {494,480}},
+{ 237160, 2, {490,484}},
+{ 237168, 2, {488,486}},
+{ 237276, 2, {507,468}},
+{ 237300, 2, {525,452}},
+{ 237303, 2, {517,459}},
+{ 237372, 2, {524,453}},
+{ 237384, 2, {504,471}},
+{ 237440, 2, {530,448}},
+{ 237456, 2, {582,408}},
+{ 237475, 2, {575,413}},
+{ 237510, 2, {522,455}},
+{ 237540, 2, {535,444}},
+{ 237575, 2, {559,425}},
+{ 237600, 2, {495,480}},
+{ 237615, 2, {511,465}},
+{ 237636, 2, {492,483}},
+{ 237699, 2, {539,441}},
+{ 237705, 2, {689,345}},
+{ 237728, 2, {544,437}},
+{ 237762, 2, {518,459}},
+{ 237790, 2, {553,430}},
+{ 237804, 2, {532,447}},
+{ 237864, 2, {561,424}},
+{ 237930, 2, {515,462}},
+{ 238000, 2, {500,476}},
+{ 238032, 2, {513,464}},
+{ 238050, 2, {529,450}},
+{ 238095, 2, {495,481}},
+{ 238119, 2, {493,483}},
+{ 238140, 2, {490,486}},
+{ 238185, 2, {603,395}},
+{ 238238, 2, {539,442}},
+{ 238272, 2, {544,438}},
+{ 238280, 2, {518,460}},
+{ 238329, 2, {679,351}},
+{ 238336, 2, {532,448}},
+{ 238360, 2, {505,472}},
+{ 238368, 2, {573,416}},
+{ 238380, 2, {548,435}},
+{ 238392, 2, {504,473}},
+{ 238428, 2, {537,444}},
+{ 238476, 2, {501,476}},
+{ 238500, 2, {500,477}},
+{ 238520, 2, {536,445}},
+{ 238524, 2, {556,429}},
+{ 238525, 2, {725,329}},
+{ 238545, 2, {513,465}},
+{ 238548, 2, {579,412}},
+{ 238560, 2, {497,480}},
+{ 238576, 2, {496,481}},
+{ 238612, 2, {493,484}},
+{ 238620, 2, {492,485}},
+{ 238632, 2, {489,488}},
+{ 238680, 2, {510,468}},
+{ 238700, 2, {550,434}},
+{ 238710, 2, {545,438}},
+{ 238740, 2, {519,460}},
+{ 238764, 2, {591,404}},
+{ 238784, 2, {533,448}},
+{ 238800, 2, {597,400}},
+{ 238854, 2, {517,462}},
+{ 238875, 2, {525,455}},
+{ 238896, 2, {504,474}},
+{ 238920, 2, {543,440}},
+{ 238960, 2, {515,464}},
+{ 238995, 2, {565,423}},
+{ 239020, 2, {629,380}},
+{ 239040, 2, {498,480}},
+{ 239071, 2, {697,343}},
+{ 239085, 2, {495,483}},
+{ 239096, 2, {494,484}},
+{ 239148, 2, {511,468}},
+{ 239184, 2, {528,453}},
+{ 239190, 2, {510,469}},
+{ 239232, 2, {534,448}},
+{ 239268, 2, {508,471}},
+{ 239295, 2, {645,371}},
+{ 239304, 2, {507,472}},
+{ 239343, 2, {663,361}},
+{ 239364, 2, {549,436}},
+{ 239370, 2, {505,474}},
+{ 239400, 2, {504,475}},
+{ 239424, 2, {516,464}},
+{ 239512, 2, {611,392}},
+{ 239540, 2, {580,413}},
+{ 239568, 2, {496,483}},
+{ 239580, 2, {495,484}},
+{ 239592, 2, {536,447}},
+{ 239598, 2, {493,486}},
+{ 239616, 2, {512,468}},
+{ 239680, 2, {535,448}},
+{ 239785, 2, {527,455}},
+{ 239800, 2, {545,440}},
+{ 239850, 2, {533,450}},
+{ 239888, 2, {517,464}},
+{ 239904, 2, {504,476}},
+{ 239932, 2, {532,451}},
+{ 239940, 2, {516,465}},
+{ 240000, 2, {500,480}},
+{ 240012, 2, {531,452}},
+{ 240075, 2, {495,485}},
+{ 240084, 2, {494,486}},
+{ 240093, 2, {721,333}},
+{ 240108, 2, {561,428}},
+{ 240128, 2, {512,469}},
+{ 240149, 2, {637,377}},
+{ 240160, 2, {608,395}},
+{ 240170, 2, {511,470}},
+{ 240240, 2, {520,462}},
+{ 240312, 2, {527,456}},
+{ 240345, 2, {545,441}},
+{ 240350, 2, {506,475}},
+{ 240352, 2, {518,464}},
+{ 240405, 2, {517,465}},
+{ 240408, 2, {504,477}},
+{ 240480, 2, {501,480}},
+{ 240500, 2, {500,481}},
+{ 240516, 2, {524,459}},
+{ 240555, 2, {553,435}},
+{ 240560, 2, {496,485}},
+{ 240570, 2, {495,486}},
+{ 240576, 2, {537,448}},
+{ 240588, 2, {492,489}},
+{ 240597, 2, {513,469}},
+{ 240625, 2, {625,385}},
+{ 240640, 2, {512,470}},
+{ 240660, 2, {573,420}},
+{ 240690, 2, {565,426}},
+{ 240695, 2, {529,455}},
+{ 240720, 2, {510,472}},
+{ 240750, 2, {535,450}},
+{ 240800, 2, {560,430}},
+{ 240816, 2, {519,464}},
+{ 240828, 2, {564,427}},
+{ 240856, 2, {506,476}},
+{ 240864, 2, {579,416}},
+{ 240870, 2, {518,465}},
+{ 240885, 2, {505,477}},
+{ 240975, 2, {525,459}},
+{ 240996, 2, {532,453}},
+{ 241020, 2, {515,468}},
+{ 241056, 2, {496,486}},
+{ 241080, 2, {492,490}},
+{ 241092, 2, {543,444}},
+{ 241101, 2, {623,387}},
+{ 241110, 2, {513,470}},
+{ 241128, 2, {591,408}},
+{ 241129, 2, {703,343}},
+{ 241152, 2, {512,471}},
+{ 241188, 2, {597,404}},
+{ 241192, 2, {511,472}},
+{ 241200, 2, {536,450}},
+{ 241224, 2, {529,456}},
+{ 241230, 2, {510,473}},
+{ 241332, 2, {507,476}},
+{ 241380, 2, {540,447}},
+{ 241400, 2, {568,425}},
+{ 241428, 2, {649,372}},
+{ 241472, 2, {539,448}},
+{ 241500, 2, {500,483}},
+{ 241530, 2, {498,485}},
+{ 241536, 2, {544,444}},
+{ 241542, 2, {497,486}},
+{ 241560, 2, {495,488}},
+{ 241570, 2, {493,490}},
+{ 241605, 2, {531,455}},
+{ 241668, 2, {548,441}},
+{ 241680, 2, {530,456}},
+{ 241696, 2, {581,416}},
+{ 241758, 2, {594,407}},
+{ 241776, 2, {552,438}},
+{ 241800, 2, {520,465}},
+{ 241815, 2, {705,343}},
+{ 241860, 2, {556,435}},
+{ 241875, 2, {625,387}},
+{ 241893, 2, {527,459}},
+{ 241920, 2, {504,480}},
+{ 241956, 2, {517,468}},
+{ 241980, 2, {545,444}},
+{ 242000, 2, {500,484}},
+{ 242004, 2, {516,469}},
+{ 242060, 2, {494,490}},
+{ 242080, 2, {544,445}},
+{ 242112, 2, {582,416}},
+{ 242121, 2, {667,363}},
+{ 242136, 2, {513,472}},
+{ 242165, 2, {595,407}},
+{ 242176, 2, {512,473}},
+{ 242208, 2, {522,464}},
+{ 242250, 2, {510,475}},
+{ 242316, 2, {508,477}},
+{ 242352, 2, {528,459}},
+{ 242360, 2, {584,415}},
+{ 242400, 2, {505,480}},
+{ 242420, 2, {527,460}},
+{ 242424, 2, {504,481}},
+{ 242440, 2, {551,440}},
+{ 242484, 2, {501,484}},
+{ 242515, 2, {533,455}},
+{ 242520, 2, {516,470}},
+{ 242536, 2, {497,488}},
+{ 242544, 2, {496,489}},
+{ 242606, 2, {559,434}},
+{ 242649, 2, {513,473}},
+{ 242676, 2, {567,428}},
+{ 242688, 2, {512,474}},
+{ 242720, 2, {592,410}},
+{ 242724, 2, {537,452}},
+{ 242725, 2, {511,475}},
+{ 242730, 2, {522,465}},
+{ 242775, 2, {585,415}},
+{ 242808, 2, {536,453}},
+{ 242811, 2, {529,459}},
+{ 242844, 2, {588,413}},
+{ 242880, 2, {506,480}},
+{ 242892, 2, {519,468}},
+{ 242952, 2, {573,424}},
+{ 242970, 2, {534,455}},
+{ 242991, 2, {551,441}},
+{ 243000, 2, {500,486}},
+{ 243024, 2, {498,488}},
+{ 243036, 2, {516,471}},
+{ 243040, 2, {496,490}},
+{ 243080, 2, {515,472}},
+{ 243089, 2, {539,451}},
+{ 243100, 2, {550,442}},
+{ 243165, 2, {559,435}},
+{ 243168, 2, {544,447}},
+{ 243180, 2, {579,420}},
+{ 243200, 2, {512,475}},
+{ 243210, 2, {605,402}},
+{ 243225, 2, {575,423}},
+{ 243243, 2, {567,429}},
+{ 243264, 2, {543,448}},
+{ 243320, 2, {553,440}},
+{ 243360, 2, {507,480}},
+{ 243375, 2, {649,375}},
+{ 243386, 2, {506,481}},
+{ 243390, 2, {570,427}},
+{ 243432, 2, {504,483}},
+{ 243474, 2, {527,462}},
+{ 243492, 2, {591,412}},
+{ 243504, 2, {534,456}},
+{ 243530, 2, {497,490}},
+{ 243540, 2, {495,492}},
+{ 243542, 2, {494,493}},
+{ 243576, 2, {597,408}},
+{ 243600, 2, {525,464}},
+{ 243612, 2, {603,404}},
+{ 243648, 2, {564,432}},
+{ 243660, 2, {524,465}},
+{ 243672, 2, {568,429}},
+{ 243675, 2, {513,475}},
+{ 243712, 2, {512,476}},
+{ 243747, 2, {511,477}},
+{ 243750, 2, {625,390}},
+{ 243756, 2, {549,444}},
+{ 243789, 2, {611,399}},
+{ 243810, 2, {567,430}},
+{ 243815, 2, {605,403}},
+{ 243873, 2, {553,441}},
+{ 243880, 2, {520,469}},
+{ 243936, 2, {504,484}},
+{ 243950, 2, {574,425}},
+{ 243960, 2, {535,456}},
+{ 244032, 2, {496,492}},
+{ 244035, 2, {495,493}},
+{ 244110, 2, {515,474}},
+{ 244160, 2, {545,448}},
+{ 244188, 2, {513,476}},
+{ 244200, 2, {550,444}},
+{ 244205, 2, {845,289}},
+{ 244216, 2, {623,392}},
+{ 244224, 2, {512,477}},
+{ 244260, 2, {531,460}},
+{ 244305, 2, {549,445}},
+{ 244440, 2, {504,485}},
+{ 244488, 2, {501,488}},
+{ 244500, 2, {500,489}},
+{ 244524, 2, {497,492}},
+{ 244530, 2, {495,494}},
+{ 244559, 2, {713,343}},
+{ 244596, 2, {561,436}},
+{ 244608, 2, {546,448}},
+{ 244620, 2, {540,453}},
+{ 244647, 2, {533,459}},
+{ 244783, 2, {847,289}},
+{ 244800, 2, {510,480}},
+{ 244818, 2, {522,469}},
+{ 244872, 2, {537,456}},
+{ 244920, 2, {520,471}},
+{ 244944, 2, {504,486}},
+{ 244950, 2, {575,426}},
+{ 244956, 2, {548,447}},
+{ 244968, 2, {519,472}},
+{ 245000, 2, {500,490}},
+{ 245014, 2, {518,473}},
+{ 245050, 2, {650,377}},
+{ 245100, 2, {516,475}},
+{ 245157, 2, {561,437}},
+{ 245180, 2, {533,460}},
+{ 245196, 2, {556,441}},
+{ 245244, 2, {573,428}},
+{ 245250, 2, {545,450}},
+{ 245280, 2, {511,480}},
+{ 245295, 2, {621,395}},
+{ 245310, 2, {510,481}},
+{ 245340, 2, {522,470}},
+{ 245344, 2, {544,451}},
+{ 245364, 2, {508,483}},
+{ 245388, 2, {507,484}},
+{ 245427, 2, {609,403}},
+{ 245430, 2, {505,486}},
+{ 245436, 2, {543,452}},
+{ 245496, 2, {579,424}},
+{ 245520, 2, {496,495}},
+{ 245525, 2, {575,427}},
+{ 245565, 2, {535,459}},
+{ 245575, 2, {517,475}},
+{ 245655, 2, {515,477}},
+{ 245680, 2, {592,415}},
+{ 245700, 2, {525,468}},
+{ 245745, 2, {635,387}},
+{ 245760, 2, {512,480}},
+{ 245763, 2, {581,423}},
+{ 245856, 2, {591,416}},
+{ 245916, 2, {506,486}},
+{ 245920, 2, {530,464}},
+{ 245960, 2, {520,473}},
+{ 245964, 2, {597,412}},
+{ 246015, 2, {497,495}},
+{ 246024, 2, {536,459}},
+{ 246050, 2, {518,475}},
+{ 246092, 2, {517,476}},
+{ 246132, 2, {516,477}},
+{ 246202, 2, {589,418}},
+{ 246225, 2, {525,469}},
+{ 246240, 2, {513,480}},
+{ 246246, 2, {533,462}},
+{ 246272, 2, {512,481}},
+{ 246330, 2, {510,483}},
+{ 246344, 2, {581,424}},
+{ 246384, 2, {522,472}},
+{ 246400, 2, {550,448}},
+{ 246402, 2, {507,486}},
+{ 246420, 2, {555,444}},
+{ 246432, 2, {544,453}},
+{ 246440, 2, {505,488}},
+{ 246456, 2, {504,489}},
+{ 246480, 2, {520,474}},
+{ 246492, 2, {501,492}},
+{ 246500, 2, {500,493}},
+{ 246512, 2, {497,496}},
+{ 246519, 2, {559,441}},
+{ 246636, 2, {527,468}},
+{ 246645, 2, {567,435}},
+{ 246744, 2, {552,447}},
+{ 246753, 2, {513,481}},
+{ 246768, 2, {582,424}},
+{ 246804, 2, {524,471}},
+{ 246906, 2, {522,473}},
+{ 246925, 2, {581,425}},
+{ 246960, 2, {504,490}},
+{ 247000, 2, {500,494}},
+{ 247008, 2, {498,496}},
+{ 247020, 2, {537,460}},
+{ 247044, 2, {519,476}},
+{ 247080, 2, {568,435}},
+{ 247095, 2, {765,323}},
+{ 247104, 2, {528,468}},
+{ 247170, 2, {535,462}},
+{ 247200, 2, {515,480}},
+{ 247212, 2, {567,436}},
+{ 247225, 2, {725,341}},
+{ 247247, 2, {1001,247}},
+{ 247248, 2, {606,408}},
+{ 247296, 2, {512,483}},
+{ 247312, 2, {533,464}},
+{ 247350, 2, {510,485}},
+{ 247380, 2, {532,465}},
+{ 247401, 2, {539,459}},
+{ 247416, 2, {507,488}},
+{ 247470, 2, {565,438}},
+{ 247500, 2, {500,495}},
+{ 247520, 2, {520,476}},
+{ 247536, 2, {573,432}},
+{ 247572, 2, {529,468}},
+{ 247608, 2, {543,456}},
+{ 247632, 2, {528,469}},
+{ 247646, 2, {686,361}},
+{ 247650, 2, {635,390}},
+{ 247660, 2, {580,427}},
+{ 247680, 2, {516,480}},
+{ 247744, 2, {553,448}},
+{ 247775, 2, {583,425}},
+{ 247776, 2, {534,464}},
+{ 247779, 2, {513,483}},
+{ 247800, 2, {525,472}},
+{ 247808, 2, {512,484}},
+{ 247812, 2, {579,428}},
+{ 247845, 2, {533,465}},
+{ 247860, 2, {510,486}},
+{ 247863, 2, {609,407}},
+{ 247940, 2, {506,490}},
+{ 247950, 2, {522,475}},
+{ 248040, 2, {520,477}},
+{ 248050, 2, {550,451}},
+{ 248064, 2, {544,456}},
+{ 248066, 2, {611,406}},
+{ 248148, 2, {549,452}},
+{ 248157, 2, {707,351}},
+{ 248160, 2, {517,480}},
+{ 248200, 2, {584,425}},
+{ 248220, 2, {591,420}},
+{ 248240, 2, {535,464}},
+{ 248244, 2, {548,453}},
+{ 248292, 2, {513,484}},
+{ 248320, 2, {512,485}},
+{ 248325, 2, {525,473}},
+{ 248346, 2, {511,486}},
+{ 248352, 2, {597,416}},
+{ 248400, 2, {540,460}},
+{ 248412, 2, {508,489}},
+{ 248430, 2, {507,490}},
+{ 248436, 2, {603,412}},
+{ 248460, 2, {505,492}},
+{ 248472, 2, {504,493}},
+{ 248496, 2, {501,496}},
+{ 248500, 2, {500,497}},
+{ 248508, 2, {531,468}},
+{ 248520, 2, {545,456}},
+{ 248532, 2, {556,447}},
+{ 248570, 2, {530,469}},
+{ 248589, 2, {729,341}},
+{ 248625, 2, {585,425}},
+{ 248640, 2, {518,480}},
+{ 248675, 2, {725,343}},
+{ 248688, 2, {528,471}},
+{ 248710, 2, {595,418}},
+{ 248724, 2, {564,441}},
+{ 248768, 2, {598,416}},
+{ 248784, 2, {568,438}},
+{ 248805, 2, {513,485}},
+{ 248820, 2, {572,435}},
+{ 248829, 2, {697,357}},
+{ 248832, 2, {512,486}},
+{ 248880, 2, {510,488}},
+{ 248976, 2, {504,494}},
+{ 249039, 2, {531,469}},
+{ 249067, 2, {637,391}},
+{ 249075, 2, {615,405}},
+{ 249084, 2, {561,444}},
+{ 249090, 2, {570,437}},
+{ 249120, 2, {519,480}},
+{ 249165, 2, {565,441}},
+{ 249168, 2, {537,464}},
+{ 249200, 2, {560,445}},
+{ 249228, 2, {516,483}},
+{ 249240, 2, {536,465}},
+{ 249275, 2, {767,325}},
+{ 249280, 2, {608,410}},
+{ 249368, 2, {511,488}},
+{ 249417, 2, {749,333}},
+{ 249444, 2, {507,492}},
+{ 249458, 2, {506,493}},
+{ 249480, 2, {504,495}},
+{ 249550, 2, {575,434}},
+{ 249600, 2, {520,480}},
+{ 249612, 2, {671,372}},
+{ 249690, 2, {574,435}},
+{ 249696, 2, {544,459}},
+{ 249704, 2, {637,392}},
+{ 249711, 2, {517,483}},
+{ 249750, 2, {555,450}},
+{ 249780, 2, {543,460}},
+{ 249795, 2, {549,455}},
+{ 249828, 2, {573,436}},
+{ 249830, 2, {581,430}},
+{ 249948, 2, {524,477}},
+{ 249951, 2, {507,493}},
+{ 249975, 2, {505,495}},
+{ 250056, 2, {552,453}},
+{ 250096, 2, {539,464}},
+{ 250120, 2, {520,481}},
+{ 250128, 2, {579,432}},
+{ 250155, 2, {545,459}},
+{ 250240, 2, {544,460}},
+{ 250245, 2, {603,415}},
+{ 250250, 2, {550,455}},
+{ 250260, 2, {516,485}},
+{ 250263, 2, {621,403}},
+{ 250272, 2, {528,474}},
+{ 250290, 2, {515,486}},
+{ 250305, 2, {555,451}},
+{ 250320, 2, {560,447}},
+{ 250325, 2, {527,475}},
+{ 250344, 2, {513,488}},
+{ 250368, 2, {512,489}},
+{ 250380, 2, {535,468}},
+{ 250390, 2, {511,490}},
+{ 250432, 2, {559,448}},
+{ 250470, 2, {506,495}},
+{ 250480, 2, {505,496}},
+{ 250488, 2, {504,497}},
+{ 250500, 2, {501,500}},
+{ 250551, 2, {679,369}},
+{ 250560, 2, {522,480}},
+{ 250572, 2, {532,471}},
+{ 250584, 2, {591,424}},
+{ 250632, 2, {531,472}},
+{ 250635, 2, {539,465}},
+{ 250705, 2, {551,455}},
+{ 250733, 2, {731,343}},
+{ 250740, 2, {597,420}},
+{ 250800, 2, {528,475}},
+{ 250852, 2, {527,476}},
+{ 250860, 2, {555,452}},
+{ 250880, 2, {512,490}},
+{ 250908, 2, {609,412}},
+{ 250965, 2, {507,495}},
+{ 250971, 2, {629,399}},
+{ 250992, 2, {504,498}},
+{ 251076, 2, {588,427}},
+{ 251082, 2, {522,481}},
+{ 251100, 2, {540,465}},
+{ 251125, 2, {875,287}},
+{ 251160, 2, {520,483}},
+{ 251196, 2, {519,484}},
+{ 251250, 2, {625,402}},
+{ 251256, 2, {551,456}},
+{ 251262, 2, {517,486}},
+{ 251275, 2, {529,475}},
+{ 251316, 2, {537,468}},
+{ 251320, 2, {515,488}},
+{ 251328, 2, {528,476}},
+{ 251370, 2, {513,490}},
+{ 251412, 2, {511,492}},
+{ 251424, 2, {582,432}},
+{ 251430, 2, {510,493}},
+{ 251460, 2, {508,495}},
+{ 251472, 2, {507,496}},
+{ 251490, 2, {505,498}},
+{ 251532, 2, {548,459}},
+{ 251550, 2, {559,450}},
+{ 251600, 2, {592,425}},
+{ 251625, 2, {671,375}},
+{ 251636, 2, {532,473}},
+{ 251658, 2, {558,451}},
+{ 251685, 2, {595,423}},
+{ 251720, 2, {580,434}},
+{ 251748, 2, {518,486}},
+{ 251790, 2, {545,462}},
+{ 251804, 2, {529,476}},
+{ 251850, 2, {575,438}},
+{ 251856, 2, {528,477}},
+{ 251868, 2, {556,453}},
+{ 251875, 2, {625,403}},
+{ 251904, 2, {512,492}},
+{ 251930, 2, {590,427}},
+{ 251940, 2, {510,494}},
+{ 251952, 2, {543,464}},
+{ 252000, 2, {504,500}},
+{ 252048, 2, {534,472}},
+{ 252096, 2, {606,416}},
+{ 252108, 2, {564,447}},
+{ 252120, 2, {573,440}},
+{ 252200, 2, {520,485}},
+{ 252225, 2, {531,475}},
+{ 252252, 2, {539,468}},
+{ 252288, 2, {576,438}},
+{ 252315, 2, {567,445}},
+{ 252320, 2, {608,415}},
+{ 252324, 2, {516,489}},
+{ 252340, 2, {620,407}},
+{ 252396, 2, {513,492}},
+{ 252405, 2, {639,395}},
+{ 252416, 2, {512,493}},
+{ 252444, 2, {579,436}},
+{ 252456, 2, {536,471}},
+{ 252504, 2, {504,501}},
+{ 252520, 2, {535,472}},
+{ 252525, 2, {525,481}},
+{ 252540, 2, {549,460}},
+{ 252560, 2, {560,451}},
+{ 252586, 2, {578,437}},
+{ 252672, 2, {564,448}},
+{ 252681, 2, {589,429}},
+{ 252720, 2, {520,486}},
+{ 252735, 2, {581,435}},
+{ 252747, 2, {621,407}},
+{ 252756, 2, {531,476}},
+{ 252760, 2, {568,445}},
+{ 252824, 2, {572,442}},
+{ 252840, 2, {516,490}},
+{ 252880, 2, {545,464}},
+{ 252909, 2, {513,493}},
+{ 252928, 2, {512,494}},
+{ 252945, 2, {511,495}},
+{ 252948, 2, {591,428}},
+{ 252960, 2, {510,496}},
+{ 253000, 2, {506,500}},
+{ 253022, 2, {583,434}},
+{ 253071, 2, {721,351}},
+{ 253080, 2, {555,456}},
+{ 253092, 2, {524,483}},
+{ 253125, 2, {625,405}},
+{ 253128, 2, {597,424}},
+{ 253170, 2, {522,485}},
+{ 253175, 2, {533,475}},
+{ 253253, 2, {847,299}},
+{ 253260, 2, {540,469}},
+{ 253272, 2, {519,488}},
+{ 253330, 2, {517,490}},
+{ 253344, 2, {546,464}},
+{ 253368, 2, {552,459}},
+{ 253380, 2, {515,492}},
+{ 253440, 2, {512,495}},
+{ 253456, 2, {511,496}},
+{ 253460, 2, {551,460}},
+{ 253464, 2, {537,472}},
+{ 253470, 2, {510,497}},
+{ 253500, 2, {507,500}},
+{ 253572, 2, {561,452}},
+{ 253575, 2, {525,483}},
+{ 253590, 2, {535,474}},
+{ 253605, 2, {583,435}},
+{ 253650, 2, {534,475}},
+{ 253680, 2, {560,453}},
+{ 253708, 2, {533,476}},
+{ 253750, 2, {625,406}},
+{ 253764, 2, {532,477}},
+{ 253800, 2, {540,470}},
+{ 253827, 2, {553,459}},
+{ 253896, 2, {568,447}},
+{ 253920, 2, {529,480}},
+{ 253968, 2, {528,481}},
+{ 253995, 2, {615,413}},
+{ 254064, 2, {536,474}},
+{ 254079, 2, {763,333}},
+{ 254100, 2, {525,484}},
+{ 254124, 2, {543,468}},
+{ 254176, 2, {611,416}},
+{ 254250, 2, {565,450}},
+{ 254265, 2, {737,345}},
+{ 254280, 2, {520,489}},
+{ 254320, 2, {578,440}},
+{ 254340, 2, {540,471}},
+{ 254345, 2, {559,455}},
+{ 254364, 2, {517,492}},
+{ 254375, 2, {625,407}},
+{ 254380, 2, {553,460}},
+{ 254400, 2, {530,480}},
+{ 254408, 2, {539,472}},
+{ 254412, 2, {573,444}},
+{ 254448, 2, {513,496}},
+{ 254464, 2, {512,497}},
+{ 254508, 2, {508,501}},
+{ 254520, 2, {505,504}},
+{ 254541, 2, {527,483}},
+{ 254560, 2, {592,430}},
+{ 254562, 2, {551,462}},
+{ 254592, 2, {544,468}},
+{ 254600, 2, {536,475}},
+{ 254610, 2, {615,414}},
+{ 254736, 2, {522,488}},
+{ 254745, 2, {555,459}},
+{ 254760, 2, {579,440}},
+{ 254820, 2, {548,465}},
+{ 254826, 2, {594,429}},
+{ 254880, 2, {531,480}},
+{ 254898, 2, {578,441}},
+{ 254925, 2, {515,495}},
+{ 254947, 2, {539,473}},
+{ 254961, 2, {513,497}},
+{ 254975, 2, {775,329}},
+{ 254976, 2, {512,498}},
+{ 255024, 2, {506,504}},
+{ 255060, 2, {545,468}},
+{ 255068, 2, {527,484}},
+{ 255150, 2, {525,486}},
+{ 255195, 2, {535,477}},
+{ 255200, 2, {550,464}},
+{ 255204, 2, {556,459}},
+{ 255255, 2, {561,455}},
+{ 255270, 2, {635,402}},
+{ 255300, 2, {555,460}},
+{ 255312, 2, {591,432}},
+{ 255348, 2, {519,492}},
+{ 255360, 2, {532,480}},
+{ 255420, 2, {516,495}},
+{ 255440, 2, {515,496}},
+{ 255492, 2, {564,453}},
+{ 255500, 2, {511,500}},
+{ 255516, 2, {597,428}},
+{ 255528, 2, {507,504}},
+{ 255600, 2, {568,450}},
+{ 255612, 2, {537,476}},
+{ 255640, 2, {581,440}},
+{ 255645, 2, {585,437}},
+{ 255672, 2, {536,477}},
+{ 255680, 2, {544,470}},
+{ 255684, 2, {572,447}},
+{ 255717, 2, {567,451}},
+{ 255744, 2, {576,444}},
+{ 255780, 2, {522,490}},
+{ 255816, 2, {561,456}},
+{ 255915, 2, {517,495}},
+{ 255936, 2, {516,496}},
+{ 256000, 2, {512,500}},
+{ 256025, 2, {539,475}},
+{ 256080, 2, {528,485}},
+{ 256122, 2, {527,486}},
+{ 256200, 2, {525,488}},
+{ 256221, 2, {581,441}},
+{ 256224, 2, {544,471}},
+{ 256236, 2, {524,489}},
+{ 256256, 2, {572,448}},
+{ 256275, 2, {603,425}},
+{ 256284, 2, {567,452}},
+{ 256296, 2, {543,472}},
+{ 256320, 2, {534,480}},
+{ 256360, 2, {520,493}},
+{ 256410, 2, {518,495}},
+{ 256432, 2, {517,496}},
+{ 256452, 2, {516,497}},
+{ 256470, 2, {515,498}},
+{ 256500, 2, {513,500}},
+{ 256512, 2, {512,501}},
+{ 256581, 2, {559,459}},
+{ 256592, 2, {553,464}},
+{ 256608, 2, {528,486}},
+{ 256680, 2, {552,465}},
+{ 256704, 2, {573,448}},
+{ 256711, 2, {637,403}},
+{ 256795, 2, {667,385}},
+{ 256800, 2, {535,480}},
+{ 256880, 2, {520,494}},
+{ 256928, 2, {518,496}},
+{ 256932, 2, {549,468}},
+{ 256944, 2, {606,424}},
+{ 256956, 2, {532,483}},
+{ 257004, 2, {531,484}},
+{ 257040, 2, {510,504}},
+{ 257070, 2, {570,451}},
+{ 257076, 2, {579,444}},
+{ 257088, 2, {618,416}},
+{ 257094, 2, {529,486}},
+{ 257103, 2, {539,477}},
+{ 257114, 2, {638,403}},
+{ 257140, 2, {559,460}},
+{ 257145, 2, {553,465}},
+{ 257152, 2, {574,448}},
+{ 257175, 2, {635,405}},
+{ 257240, 2, {545,472}},
+{ 257304, 2, {568,453}},
+{ 257312, 2, {544,473}},
+{ 257400, 2, {520,495}},
+{ 257424, 2, {519,496}},
+{ 257439, 2, {533,483}},
+{ 257472, 2, {576,447}},
+{ 257481, 2, {549,469}},
+{ 257520, 2, {555,464}},
+{ 257535, 2, {531,485}},
+{ 257544, 2, {511,504}},
+{ 257550, 2, {510,505}},
+{ 257556, 2, {508,507}},
+{ 257580, 2, {530,486}},
+{ 257640, 2, {565,456}},
+{ 257676, 2, {591,436}},
+{ 257712, 2, {546,472}},
+{ 257715, 2, {621,415}},
+{ 257725, 2, {793,325}},
+{ 257730, 2, {605,426}},
+{ 257760, 2, {537,480}},
+{ 257856, 2, {544,474}},
+{ 257904, 2, {597,432}},
+{ 257950, 2, {550,469}},
+{ 257972, 2, {533,484}},
+{ 257985, 2, {567,455}},
+{ 258048, 2, {512,504}},
+{ 258060, 2, {510,506}},
+{ 258084, 2, {603,428}},
+{ 258108, 2, {548,471}},
+{ 258115, 2, {715,361}},
+{ 258125, 2, {625,413}},
+{ 258192, 2, {528,489}},
+{ 258216, 2, {609,424}},
+{ 258230, 2, {527,490}},
+{ 258258, 2, {546,473}},
+{ 258300, 2, {525,492}},
+{ 258330, 2, {545,474}},
+{ 258375, 2, {689,375}},
+{ 258400, 2, {544,475}},
+{ 258440, 2, {520,497}},
+{ 258468, 2, {543,476}},
+{ 258500, 2, {517,500}},
+{ 258516, 2, {516,501}},
+{ 258540, 2, {556,465}},
+{ 258552, 2, {513,504}},
+{ 258560, 2, {512,505}},
+{ 258720, 2, {528,490}},
+{ 258750, 2, {575,450}},
+{ 258819, 2, {713,363}},
+{ 258825, 2, {525,493}},
+{ 258852, 2, {583,444}},
+{ 258876, 2, {564,459}},
+{ 258888, 2, {536,483}},
+{ 258912, 2, {522,496}},
+{ 258960, 2, {520,498}},
+{ 258990, 2, {534,485}},
+{ 258996, 2, {573,452}},
+{ 259000, 2, {518,500}},
+{ 259038, 2, {533,486}},
+{ 259065, 2, {513,505}},
+{ 259072, 2, {512,506}},
+{ 259116, 2, {572,453}},
+{ 259128, 2, {531,488}},
+{ 259160, 2, {589,440}},
+{ 259168, 2, {623,416}},
+{ 259182, 2, {561,462}},
+{ 259200, 2, {540,480}},
+{ 259210, 2, {529,490}},
+{ 259233, 2, {663,391}},
+{ 259259, 2, {539,481}},
+{ 259260, 2, {580,447}},
+{ 259325, 2, {575,451}},
+{ 259335, 2, {565,459}},
+{ 259350, 2, {525,494}},
+{ 259376, 2, {559,464}},
+{ 259380, 2, {524,495}},
+{ 259392, 2, {579,448}},
+{ 259434, 2, {522,497}},
+{ 259440, 2, {552,470}},
+{ 259488, 2, {544,477}},
+{ 259500, 2, {519,500}},
+{ 259515, 2, {657,395}},
+{ 259560, 2, {515,504}},
+{ 259578, 2, {513,506}},
+{ 259584, 2, {512,507}},
+{ 259675, 2, {611,425}},
+{ 259740, 2, {540,481}},
+{ 259749, 2, {589,441}},
+{ 259776, 2, {528,492}},
+{ 259880, 2, {584,445}},
+{ 259908, 2, {537,484}},
+{ 259910, 2, {553,470}},
+{ 259920, 2, {570,456}},
+{ 259935, 2, {559,465}},
+{ 259960, 2, {536,485}},
+{ 259965, 2, {545,477}},
+{ 259992, 2, {552,471}},
+{ 260010, 2, {535,486}},
+{ 260015, 2, {595,437}},
+{ 260040, 2, {591,440}},
+{ 260148, 2, {532,489}},
+{ 260150, 2, {550,473}},
+{ 260288, 2, {581,448}},
+{ 260292, 2, {597,436}},
+{ 260295, 2, {555,469}},
+{ 260304, 2, {528,493}},
+{ 260325, 2, {585,445}},
+{ 260338, 2, {527,494}},
+{ 260400, 2, {525,496}},
+{ 260406, 2, {629,414}},
+{ 260496, 2, {536,486}},
+{ 260520, 2, {520,501}},
+{ 260568, 2, {517,504}},
+{ 260580, 2, {516,505}},
+{ 260592, 2, {534,488}},
+{ 260604, 2, {513,508}},
+{ 260610, 2, {511,510}},
+{ 260640, 2, {543,480}},
+{ 260652, 2, {609,428}},
+{ 260712, 2, {568,459}},
+{ 260736, 2, {582,448}},
+{ 260760, 2, {530,492}},
+{ 260775, 2, {549,475}},
+{ 260820, 2, {540,483}},
+{ 260832, 2, {528,494}},
+{ 260865, 2, {527,495}},
+{ 260883, 2, {707,369}},
+{ 260925, 2, {525,497}},
+{ 260928, 2, {576,453}},
+{ 260967, 2, {731,357}},
+{ 261016, 2, {553,472}},
+{ 261030, 2, {565,462}},
+{ 261048, 2, {584,447}},
+{ 261072, 2, {518,504}},
+{ 261080, 2, {535,488}},
+{ 261120, 2, {512,510}},
+{ 261170, 2, {533,490}},
+{ 261184, 2, {583,448}},
+{ 261225, 2, {645,405}},
+{ 261252, 2, {531,492}},
+{ 261288, 2, {573,456}},
+{ 261324, 2, {549,476}},
+{ 261326, 2, {529,494}},
+{ 261360, 2, {528,495}},
+{ 261396, 2, {548,477}},
+{ 261440, 2, {608,430}},
+{ 261555, 2, {705,371}},
+{ 261576, 2, {519,504}},
+{ 261580, 2, {580,451}},
+{ 261600, 2, {545,480}},
+{ 261612, 2, {516,507}},
+{ 261632, 2, {512,511}},
+{ 261648, 2, {552,474}},
+{ 261664, 2, {544,481}},
+{ 261696, 2, {564,464}},
+{ 261702, 2, {558,469}},
+{ 261708, 2, {579,452}},
+{ 261725, 2, {551,475}},
+{ 261792, 2, {606,432}},
+{ 261800, 2, {550,476}},
+{ 261855, 2, {529,495}},
+{ 261870, 2, {602,435}},
+{ 261876, 2, {556,471}},
+{ 261900, 2, {540,485}},
+{ 261950, 2, {650,403}},
+{ 261954, 2, {539,486}},
+{ 261960, 2, {555,472}},
+{ 262032, 2, {618,424}},
+{ 262056, 2, {537,488}},
+{ 262080, 2, {520,504}},
+{ 262104, 2, {536,489}},
+{ 262143, 2, {513,511}},
+{ 262160, 2, {565,464}},
+{ 262200, 2, {552,475}},
+{ 262260, 2, {558,470}},
+{ 262276, 2, {532,493}},
+{ 262280, 2, {632,415}},
+{ 262395, 2, {595,441}},
+{ 262400, 2, {640,410}},
+{ 262404, 2, {591,444}},
+{ 262416, 2, {528,497}},
+{ 262500, 2, {525,500}},
+{ 262515, 2, {555,473}},
+{ 262524, 2, {524,501}},
+{ 262548, 2, {561,468}},
+{ 262600, 2, {520,505}},
+{ 262605, 2, {615,427}},
+{ 262650, 2, {515,510}},
+{ 262656, 2, {513,512}},
+{ 262668, 2, {636,413}},
+{ 262675, 2, {553,475}},
+{ 262680, 2, {597,440}},
+{ 262740, 2, {580,453}},
+{ 262752, 2, {544,483}},
+{ 262773, 2, {679,387}},
+{ 262800, 2, {584,450}},
+{ 262812, 2, {543,484}},
+{ 262836, 2, {588,447}},
+{ 262880, 2, {530,496}},
+{ 262890, 2, {635,414}},
+{ 262899, 2, {749,351}},
+{ 262908, 2, {603,436}},
+{ 262922, 2, {629,418}},
+{ 262944, 2, {528,498}},
+{ 262990, 2, {578,455}},
+{ 263032, 2, {539,488}},
+{ 263088, 2, {522,504}},
+{ 263120, 2, {520,506}},
+{ 263200, 2, {560,470}},
+{ 263220, 2, {535,492}},
+{ 263304, 2, {552,477}},
+{ 263310, 2, {655,402}},
+{ 263340, 2, {532,495}},
+{ 263375, 2, {875,301}},
+{ 263376, 2, {531,496}},
+{ 263410, 2, {530,497}},
+{ 263424, 2, {588,448}},
+{ 263440, 2, {592,445}},
+{ 263466, 2, {574,459}},
+{ 263500, 2, {527,500}},
+{ 263529, 2, {623,423}},
+{ 263580, 2, {573,460}},
+{ 263610, 2, {522,505}},
+{ 263640, 2, {520,507}},
+{ 263652, 2, {519,508}},
+{ 263655, 2, {567,465}},
+{ 263670, 2, {517,510}},
+{ 263676, 2, {516,511}},
+{ 263680, 2, {515,512}},
+{ 263760, 2, {560,471}},
+{ 263781, 2, {553,477}},
+{ 263835, 2, {533,495}},
+{ 263840, 2, {544,485}},
+{ 263907, 2, {531,497}},
+{ 263925, 2, {575,459}},
+{ 263934, 2, {558,473}},
+{ 264000, 2, {528,500}},
+{ 264024, 2, {579,456}},
+{ 264040, 2, {574,460}},
+{ 264060, 2, {540,489}},
+{ 264110, 2, {539,490}},
+{ 264120, 2, {568,465}},
+{ 264152, 2, {623,424}},
+{ 264180, 2, {518,510}},
+{ 264192, 2, {516,512}},
+{ 264195, 2, {515,513}},
+{ 264204, 2, {537,492}},
+{ 264368, 2, {533,496}},
+{ 264375, 2, {625,423}},
+{ 264384, 2, {544,486}},
+{ 264385, 2, {605,437}},
+{ 264420, 2, {565,468}},
+{ 264480, 2, {551,480}},
+{ 264500, 2, {529,500}},
+{ 264516, 2, {564,469}},
+{ 264528, 2, {528,501}},
+{ 264550, 2, {550,481}},
+{ 264552, 2, {584,453}},
+{ 264600, 2, {525,504}},
+{ 264615, 2, {767,345}},
+{ 264624, 2, {592,447}},
+{ 264627, 2, {729,363}},
+{ 264684, 2, {548,483}},
+{ 264704, 2, {517,512}},
+{ 264708, 2, {516,513}},
+{ 264768, 2, {591,448}},
+{ 264792, 2, {561,472}},
+{ 264810, 2, {546,485}},
+{ 264825, 2, {535,495}},
+{ 264864, 2, {534,496}},
+{ 264870, 2, {545,486}},
+{ 264880, 2, {560,473}},
+{ 264957, 2, {651,407}},
+{ 264960, 2, {552,480}},
+{ 264984, 2, {543,488}},
+{ 264990, 2, {605,438}},
+{ 264992, 2, {637,416}},
+{ 265050, 2, {558,475}},
+{ 265068, 2, {597,444}},
+{ 265174, 2, {611,434}},
+{ 265185, 2, {639,415}},
+{ 265188, 2, {539,492}},
+{ 265200, 2, {520,510}},
+{ 265212, 2, {556,477}},
+{ 265216, 2, {518,512}},
+{ 265221, 2, {517,513}},
+{ 265265, 2, {583,455}},
+{ 265275, 2, {655,405}},
+{ 265320, 2, {536,495}},
+{ 265356, 2, {546,486}},
+{ 265360, 2, {535,496}},
+{ 265392, 2, {582,456}},
+{ 265440, 2, {553,480}},
+{ 265475, 2, {925,287}},
+{ 265500, 2, {531,500}},
+{ 265512, 2, {552,481}},
+{ 265524, 2, {609,436}},
+{ 265525, 2, {559,475}},
+{ 265600, 2, {640,415}},
+{ 265608, 2, {527,504}},
+{ 265644, 2, {564,471}},
+{ 265650, 2, {525,506}},
+{ 265668, 2, {524,507}},
+{ 265696, 2, {608,437}},
+{ 265716, 2, {549,484}},
+{ 265720, 2, {520,511}},
+{ 265727, 2, {539,493}},
+{ 265728, 2, {519,512}},
+{ 265734, 2, {518,513}},
+{ 265740, 2, {516,515}},
+{ 265785, 2, {611,435}},
+{ 265788, 2, {621,428}},
+{ 265825, 2, {775,343}},
+{ 265848, 2, {583,456}},
+{ 265872, 2, {573,464}},
+{ 265923, 2, {567,469}},
+{ 265960, 2, {545,488}},
+{ 265980, 2, {572,465}},
+{ 266000, 2, {532,500}},
+{ 266016, 2, {544,489}},
+{ 266049, 2, {721,369}},
+{ 266084, 2, {559,476}},
+{ 266133, 2, {551,483}},
+{ 266168, 2, {679,392}},
+{ 266175, 2, {525,507}},
+{ 266240, 2, {520,512}},
+{ 266250, 2, {625,426}},
+{ 266265, 2, {549,485}},
+{ 266266, 2, {539,494}},
+{ 266336, 2, {574,464}},
+{ 266340, 2, {579,460}},
+{ 266352, 2, {537,496}},
+{ 266364, 2, {588,453}},
+{ 266385, 2, {645,413}},
+{ 266392, 2, {536,497}},
+{ 266400, 2, {555,480}},
+{ 266430, 2, {535,498}},
+{ 266448, 2, {546,488}},
+{ 266490, 2, {567,470}},
+{ 266500, 2, {533,500}},
+{ 266532, 2, {532,501}},
+{ 266560, 2, {544,490}},
+{ 266616, 2, {529,504}},
+{ 266625, 2, {675,395}},
+{ 266640, 2, {528,505}},
+{ 266662, 2, {527,506}},
+{ 266679, 2, {581,459}},
+{ 266680, 2, {565,472}},
+{ 266684, 2, {551,484}},
+{ 266700, 2, {525,508}},
+{ 266742, 2, {522,511}},
+{ 266760, 2, {520,513}},
+{ 266772, 2, {517,516}},
+{ 266800, 2, {575,464}},
+{ 266805, 2, {539,495}},
+{ 266875, 2, {625,427}},
+{ 266910, 2, {574,465}},
+{ 266928, 2, {536,498}},
+{ 266976, 2, {618,432}},
+{ 266992, 2, {592,451}},
+{ 267003, 2, {783,341}},
+{ 267030, 2, {621,430}},
+{ 267036, 2, {561,476}},
+{ 267120, 2, {530,504}},
+{ 267132, 2, {591,452}},
+{ 267140, 2, {703,380}},
+{ 267156, 2, {543,492}},
+{ 267168, 2, {528,506}},
+{ 267189, 2, {527,507}},
+{ 267197, 2, {779,343}},
+{ 267260, 2, {581,460}},
+{ 267264, 2, {522,512}},
+{ 267300, 2, {540,495}},
+{ 267325, 2, {629,425}},
+{ 267330, 2, {570,469}},
+{ 267344, 2, {539,496}},
+{ 267410, 2, {605,442}},
+{ 267444, 2, {612,437}},
+{ 267456, 2, {597,448}},
+{ 267528, 2, {568,471}},
+{ 267624, 2, {531,504}},
+{ 267648, 2, {544,492}},
+{ 267696, 2, {528,507}},
+{ 267720, 2, {552,485}},
+{ 267732, 2, {603,444}},
+{ 267800, 2, {520,515}},
+{ 267804, 2, {519,516}},
+{ 267806, 2, {518,517}},
+{ 267810, 2, {565,474}},
+{ 267813, 2, {763,351}},
+{ 267840, 2, {540,496}},
+{ 267894, 2, {594,451}},
+{ 267900, 2, {564,475}},
+{ 267904, 2, {598,448}},
+{ 267912, 2, {549,488}},
+{ 267972, 2, {548,489}},
+{ 267995, 2, {589,455}},
+{ 268056, 2, {584,459}},
+{ 268125, 2, {625,429}},
+{ 268128, 2, {532,504}},
+{ 268140, 2, {545,492}},
+{ 268155, 2, {531,505}},
+{ 268164, 2, {573,468}},
+{ 268176, 2, {592,453}},
+{ 268191, 2, {567,473}},
+{ 268192, 2, {544,493}},
+{ 268203, 2, {529,507}},
+{ 268226, 2, {686,391}},
+{ 268272, 2, {552,486}},
+{ 268275, 2, {525,511}},
+{ 268335, 2, {603,445}},
+{ 268345, 2, {595,451}},
+{ 268356, 2, {627,428}},
+{ 268380, 2, {540,497}},
+{ 268392, 2, {633,424}},
+{ 268398, 2, {558,481}},
+{ 268500, 2, {537,500}},
+{ 268536, 2, {536,501}},
+{ 268548, 2, {556,483}},
+{ 268584, 2, {589,456}},
+{ 268600, 2, {632,425}},
+{ 268605, 2, {635,423}},
+{ 268620, 2, {555,484}},
+{ 268632, 2, {533,504}},
+{ 268656, 2, {579,464}},
+{ 268736, 2, {544,494}},
+{ 268758, 2, {553,486}},
+{ 268770, 2, {527,510}},
+{ 268800, 2, {525,512}},
+{ 268812, 2, {524,513}},
+{ 268830, 2, {522,515}},
+{ 268840, 2, {520,517}},
+{ 268975, 2, {725,371}},
+{ 269028, 2, {564,477}},
+{ 269040, 2, {570,472}},
+{ 269059, 2, {833,323}},
+{ 269100, 2, {575,468}},
+{ 269136, 2, {534,504}},
+{ 269178, 2, {546,493}},
+{ 269192, 2, {532,506}},
+{ 269232, 2, {568,474}},
+{ 269280, 2, {528,510}},
+{ 269325, 2, {525,513}},
+{ 269328, 2, {543,496}},
+{ 269346, 2, {583,462}},
+{ 269360, 2, {520,518}},
+{ 269412, 2, {572,471}},
+{ 269451, 2, {611,441}},
+{ 269496, 2, {591,456}},
+{ 269500, 2, {539,500}},
+{ 269505, 2, {565,477}},
+{ 269555, 2, {715,377}},
+{ 269568, 2, {576,468}},
+{ 269584, 2, {581,464}},
+{ 269610, 2, {570,473}},
+{ 269640, 2, {535,504}},
+{ 269670, 2, {534,505}},
+{ 269675, 2, {575,469}},
+{ 269696, 2, {602,448}},
+{ 269698, 2, {533,506}},
+{ 269700, 2, {580,465}},
+{ 269724, 2, {532,507}},
+{ 269730, 2, {555,486}},
+{ 269748, 2, {531,508}},
+{ 269775, 2, {545,495}},
+{ 269790, 2, {529,510}},
+{ 269800, 2, {568,475}},
+{ 269808, 2, {528,511}},
+{ 269824, 2, {527,512}},
+{ 269841, 2, {561,481}},
+{ 269844, 2, {597,452}},
+{ 269864, 2, {553,488}},
+{ 269874, 2, {522,517}},
+{ 269880, 2, {520,519}},
+{ 269892, 2, {567,476}},
+{ 269928, 2, {552,489}},
+{ 269988, 2, {596,453}},
+{ 269990, 2, {551,490}},
+{ 269997, 2, {559,483}},
+{ 270000, 2, {540,500}},
+{ 270048, 2, {582,464}},
+{ 270088, 2, {637,424}},
+{ 270108, 2, {549,492}},
+{ 270135, 2, {621,435}},
+{ 270165, 2, {581,465}},
+{ 270270, 2, {546,495}},
+{ 270320, 2, {545,496}},
+{ 270336, 2, {528,512}},
+{ 270351, 2, {527,513}},
+{ 270368, 2, {544,497}},
+{ 270396, 2, {522,518}},
+{ 270456, 2, {573,472}},
+{ 270480, 2, {552,490}},
+{ 270504, 2, {578,468}},
+{ 270510, 2, {635,426}},
+{ 270512, 2, {583,464}},
+{ 270540, 2, {540,501}},
+{ 270556, 2, {559,484}},
+{ 270560, 2, {608,445}},
+{ 270600, 2, {550,492}},
+{ 270630, 2, {558,485}},
+{ 270648, 2, {537,504}},
+{ 270655, 2, {665,407}},
+{ 270680, 2, {536,505}},
+{ 270720, 2, {564,480}},
+{ 270756, 2, {621,436}},
+{ 270816, 2, {546,496}},
+{ 270830, 2, {530,511}},
+{ 270840, 2, {555,488}},
+{ 270848, 2, {529,512}},
+{ 270864, 2, {528,513}},
+{ 270900, 2, {525,516}},
+{ 270912, 2, {544,498}},
+{ 270924, 2, {633,428}},
+{ 270936, 2, {568,477}},
+{ 270940, 2, {589,460}},
+{ 270970, 2, {553,490}},
+{ 270972, 2, {579,468}},
+{ 271040, 2, {560,484}},
+{ 271095, 2, {583,465}},
+{ 271150, 2, {550,493}},
+{ 271170, 2, {655,414}},
+{ 271200, 2, {565,480}},
+{ 271250, 2, {625,434}},
+{ 271260, 2, {548,495}},
+{ 271296, 2, {576,471}},
+{ 271320, 2, {532,510}},
+{ 271341, 2, {531,511}},
+{ 271360, 2, {530,512}},
+{ 271377, 2, {529,513}},
+{ 271400, 2, {575,472}},
+{ 271410, 2, {545,498}},
+{ 271425, 2, {525,517}},
+{ 271440, 2, {522,520}},
+{ 271488, 2, {606,448}},
+{ 271500, 2, {543,500}},
+{ 271502, 2, {574,473}},
+{ 271524, 2, {561,484}},
+{ 271560, 2, {584,465}},
+{ 271572, 2, {636,427}},
+{ 271575, 2, {639,425}},
+{ 271600, 2, {560,485}},
+{ 271656, 2, {539,504}},
+{ 271674, 2, {559,486}},
+{ 271700, 2, {550,494}},
+{ 271728, 2, {592,459}},
+{ 271752, 2, {536,507}},
+{ 271800, 2, {600,453}},
+{ 271830, 2, {533,510}},
+{ 271860, 2, {591,460}},
+{ 271872, 2, {531,512}},
+{ 271884, 2, {556,489}},
+{ 271890, 2, {530,513}},
+{ 271920, 2, {528,515}},
+{ 271950, 2, {525,518}},
+{ 271956, 2, {524,519}},
+{ 271975, 2, {575,473}},
+{ 272000, 2, {544,500}},
+{ 272020, 2, {580,469}},
+{ 272076, 2, {553,492}},
+{ 272090, 2, {598,455}},
+{ 272118, 2, {589,462}},
+{ 272136, 2, {552,493}},
+{ 272194, 2, {551,494}},
+{ 272232, 2, {597,456}},
+{ 272240, 2, {656,415}},
+{ 272304, 2, {549,496}},
+{ 272384, 2, {532,512}},
+{ 272412, 2, {564,483}},
+{ 272448, 2, {528,516}},
+{ 272544, 2, {544,501}},
+{ 272550, 2, {575,474}},
+{ 272556, 2, {603,452}},
+{ 272646, 2, {561,486}},
+{ 272650, 2, {574,475}},
+{ 272655, 2, {657,415}},
+{ 272685, 2, {735,371}},
+{ 272700, 2, {540,505}},
+{ 272727, 2, {567,481}},
+{ 272734, 2, {539,506}},
+{ 272745, 2, {551,495}},
+{ 272748, 2, {573,476}},
+{ 272796, 2, {537,508}},
+{ 272800, 2, {550,496}},
+{ 272832, 2, {588,464}},
+{ 272844, 2, {572,477}},
+{ 272850, 2, {535,510}},
+{ 272853, 2, {549,497}},
+{ 272896, 2, {533,512}},
+{ 272916, 2, {532,513}},
+{ 272935, 2, {845,323}},
+{ 272976, 2, {528,517}},
+{ 273000, 2, {525,520}},
+{ 273024, 2, {576,474}},
+{ 273060, 2, {555,492}},
+{ 273070, 2, {581,470}},
+{ 273105, 2, {595,459}},
+{ 273180, 2, {580,471}},
+{ 273240, 2, {540,506}},
+{ 273273, 2, {539,507}},
+{ 273288, 2, {579,472}},
+{ 273350, 2, {550,497}},
+{ 273360, 2, {536,510}},
+{ 273372, 2, {627,436}},
+{ 273408, 2, {534,512}},
+{ 273420, 2, {558,490}},
+{ 273429, 2, {533,513}},
+{ 273456, 2, {633,432}},
+{ 273465, 2, {531,515}},
+{ 273480, 2, {530,516}},
+{ 273492, 2, {639,428}},
+{ 273504, 2, {528,518}},
+{ 273540, 2, {564,485}},
+{ 273564, 2, {596,459}},
+{ 273581, 2, {847,323}},
+{ 273585, 2, {793,345}},
+{ 273600, 2, {570,480}},
+{ 273609, 2, {707,387}},
+{ 273672, 2, {543,504}},
+{ 273728, 2, {611,448}},
+{ 273735, 2, {553,495}},
+{ 273750, 2, {625,438}},
+{ 273768, 2, {561,488}},
+{ 273780, 2, {540,507}},
+{ 273840, 2, {560,489}},
+{ 273861, 2, {567,483}},
+{ 273896, 2, {536,511}},
+{ 273910, 2, {559,490}},
+{ 273920, 2, {535,512}},
+{ 273996, 2, {531,516}},
+{ 273999, 2, {627,437}},
+{ 274032, 2, {528,519}},
+{ 274040, 2, {527,520}},
+{ 274050, 2, {525,522}},
+{ 274057, 2, {799,343}},
+{ 274120, 2, {616,445}},
+{ 274176, 2, {544,504}},
+{ 274208, 2, {608,451}},
+{ 274224, 2, {591,464}},
+{ 274232, 2, {581,472}},
+{ 274275, 2, {575,477}},
+{ 274288, 2, {553,496}},
+{ 274340, 2, {580,473}},
+{ 274344, 2, {552,497}},
+{ 274365, 2, {585,469}},
+{ 274400, 2, {560,490}},
+{ 274428, 2, {567,484}},
+{ 274455, 2, {535,513}},
+{ 274482, 2, {598,459}},
+{ 274500, 2, {549,500}},
+{ 274505, 2, {713,385}},
+{ 274548, 2, {548,501}},
+{ 274560, 2, {528,520}},
+{ 274590, 2, {565,486}},
+{ 274620, 2, {597,460}},
+{ 274659, 2, {609,451}},
+{ 274680, 2, {545,504}},
+{ 274704, 2, {582,472}},
+{ 274720, 2, {544,505}},
+{ 274743, 2, {623,441}},
+{ 274752, 2, {576,477}},
+{ 274833, 2, {729,377}},
+{ 274890, 2, {539,510}},
+{ 274896, 2, {552,498}},
+{ 274911, 2, {689,399}},
+{ 274944, 2, {537,512}},
+{ 274968, 2, {536,513}},
+{ 274995, 2, {567,485}},
+{ 275010, 2, {534,515}},
+{ 275040, 2, {573,480}},
+{ 275044, 2, {532,517}},
+{ 275064, 2, {584,471}},
+{ 275080, 2, {529,520}},
+{ 275094, 2, {527,522}},
+{ 275100, 2, {525,524}},
+{ 275132, 2, {572,481}},
+{ 275184, 2, {546,504}},
+{ 275200, 2, {640,430}},
+{ 275220, 2, {556,495}},
+{ 275264, 2, {544,506}},
+{ 275268, 2, {609,452}},
+{ 275280, 2, {555,496}},
+{ 275310, 2, {570,483}},
+{ 275400, 2, {540,510}},
+{ 275415, 2, {645,427}},
+{ 275480, 2, {568,485}},
+{ 275500, 2, {551,500}},
+{ 275520, 2, {560,492}},
+{ 275604, 2, {579,476}},
+{ 275616, 2, {528,522}},
+{ 275720, 2, {565,488}},
+{ 275724, 2, {621,444}},
+{ 275730, 2, {546,505}},
+{ 275772, 2, {588,469}},
+{ 275796, 2, {564,489}},
+{ 275808, 2, {544,507}},
+{ 275825, 2, {649,425}},
+{ 275835, 2, {555,497}},
+{ 275844, 2, {543,508}},
+{ 275940, 2, {540,511}},
+{ 275968, 2, {539,512}},
+{ 275975, 2, {581,475}},
+{ 275988, 2, {633,436}},
+{ 276000, 2, {552,500}},
+{ 276012, 2, {561,492}},
+{ 276040, 2, {536,515}},
+{ 276048, 2, {568,486}},
+{ 276060, 2, {535,516}},
+{ 276080, 2, {560,493}},
+{ 276094, 2, {533,518}},
+{ 276108, 2, {532,519}},
+{ 276120, 2, {531,520}},
+{ 276165, 2, {765,361}},
+{ 276250, 2, {625,442}},
+{ 276276, 2, {546,506}},
+{ 276318, 2, {602,459}},
+{ 276336, 2, {606,456}},
+{ 276345, 2, {621,445}},
+{ 276360, 2, {564,490}},
+{ 276375, 2, {737,375}},
+{ 276381, 2, {749,369}},
+{ 276450, 2, {570,485}},
+{ 276480, 2, {540,512}},
+{ 276500, 2, {553,500}},
+{ 276507, 2, {539,513}},
+{ 276552, 2, {552,501}},
+{ 276573, 2, {561,493}},
+{ 276575, 2, {575,481}},
+{ 276588, 2, {591,468}},
+{ 276640, 2, {532,520}},
+{ 276660, 2, {530,522}},
+{ 276675, 2, {527,525}},
+{ 276696, 2, {549,504}},
+{ 276705, 2, {559,495}},
+{ 276710, 2, {590,469}},
+{ 276750, 2, {615,450}},
+{ 276760, 2, {629,440}},
+{ 276768, 2, {558,496}},
+{ 276816, 2, {584,474}},
+{ 276864, 2, {618,448}},
+{ 276920, 2, {602,460}},
+{ 276925, 2, {583,475}},
+{ 276948, 2, {588,471}},
+{ 277008, 2, {597,464}},
+{ 277020, 2, {540,513}},
+{ 277056, 2, {576,481}},
+{ 277065, 2, {655,423}},
+{ 277092, 2, {537,516}},
+{ 277134, 2, {561,494}},
+{ 277137, 2, {581,477}},
+{ 277140, 2, {596,465}},
+{ 277160, 2, {533,520}},
+{ 277200, 2, {528,525}},
+{ 277236, 2, {604,459}},
+{ 277245, 2, {549,505}},
+{ 277264, 2, {559,496}},
+{ 277326, 2, {558,497}},
+{ 277332, 2, {573,484}},
+{ 277344, 2, {642,432}},
+{ 277380, 2, {603,460}},
+{ 277389, 2, {629,441}},
+{ 277400, 2, {584,475}},
+{ 277440, 2, {544,510}},
+{ 277500, 2, {555,500}},
+{ 277508, 2, {583,476}},
+{ 277641, 2, {791,351}},
+{ 277680, 2, {534,520}},
+{ 277695, 2, {561,495}},
+{ 277725, 2, {529,525}},
+{ 277752, 2, {568,489}},
+{ 277830, 2, {567,490}},
+{ 277836, 2, {548,507}},
+{ 277875, 2, {585,475}},
+{ 277920, 2, {579,480}},
+{ 277950, 2, {545,510}},
+{ 277980, 2, {565,492}},
+{ 277984, 2, {544,511}},
+{ 277992, 2, {572,486}},
+{ 278005, 2, {611,455}},
+{ 278016, 2, {543,512}},
+{ 278100, 2, {540,515}},
+{ 278103, 2, {697,399}},
+{ 278124, 2, {539,516}},
+{ 278130, 2, {635,438}},
+{ 278160, 2, {570,488}},
+{ 278184, 2, {536,519}},
+{ 278200, 2, {535,520}},
+{ 278226, 2, {533,522}},
+{ 278240, 2, {592,470}},
+{ 278244, 2, {531,524}},
+{ 278256, 2, {528,527}},
+{ 278300, 2, {550,506}},
+{ 278320, 2, {560,497}},
+{ 278369, 2, {637,437}},
+{ 278388, 2, {627,444}},
+{ 278400, 2, {580,480}},
+{ 278425, 2, {925,301}},
+{ 278520, 2, {633,440}},
+{ 278556, 2, {556,501}},
+{ 278568, 2, {584,477}},
+{ 278586, 2, {594,469}},
+{ 278604, 2, {639,436}},
+{ 278663, 2, {539,517}},
+{ 278712, 2, {553,504}},
+{ 278760, 2, {552,505}},
+{ 278800, 2, {656,425}},
+{ 278806, 2, {551,506}},
+{ 278832, 2, {592,471}},
+{ 278850, 2, {550,507}},
+{ 278880, 2, {560,498}},
+{ 278892, 2, {549,508}},
+{ 278952, 2, {591,472}},
+{ 278964, 2, {567,492}},
+{ 278980, 2, {580,481}},
+{ 279027, 2, {721,387}},
+{ 279030, 2, {655,426}},
+{ 279040, 2, {545,512}},
+{ 279072, 2, {544,513}},
+{ 279104, 2, {623,448}},
+{ 279180, 2, {540,517}},
+{ 279225, 2, {657,425}},
+{ 279240, 2, {537,520}},
+{ 279270, 2, {535,522}},
+{ 279300, 2, {532,525}},
+{ 279312, 2, {529,528}},
+{ 279328, 2, {602,464}},
+{ 279357, 2, {551,507}},
+{ 279360, 2, {576,485}},
+{ 279396, 2, {597,468}},
+{ 279450, 2, {575,486}},
+{ 279500, 2, {559,500}},
+{ 279510, 2, {605,462}},
+{ 279531, 2, {567,493}},
+{ 279552, 2, {546,512}},
+{ 279565, 2, {715,391}},
+{ 279585, 2, {545,513}},
+{ 279620, 2, {620,451}},
+{ 279624, 2, {573,488}},
+{ 279675, 2, {565,495}},
+{ 279680, 2, {608,460}},
+{ 279708, 2, {572,489}},
+{ 279720, 2, {540,518}},
+{ 279734, 2, {689,406}},
+{ 279744, 2, {564,496}},
+{ 279752, 2, {578,484}},
+{ 279775, 2, {589,475}},
+{ 279792, 2, {536,522}},
+{ 279825, 2, {533,525}},
+{ 279840, 2, {530,528}},
+{ 279864, 2, {552,507}},
+{ 279930, 2, {602,465}},
+{ 279936, 2, {576,486}},
+{ 280016, 2, {592,473}},
+{ 280035, 2, {635,441}},
+{ 280071, 2, {621,451}},
+{ 280125, 2, {675,415}},
+{ 280140, 2, {580,483}},
+{ 280160, 2, {544,515}},
+{ 280188, 2, {543,516}},
+{ 280231, 2, {817,343}},
+{ 280236, 2, {579,484}},
+{ 280240, 2, {565,496}},
+{ 280260, 2, {540,519}},
+{ 280280, 2, {539,520}},
+{ 280308, 2, {564,497}},
+{ 280364, 2, {532,527}},
+{ 280368, 2, {531,528}},
+{ 280449, 2, {611,459}},
+{ 280476, 2, {588,477}},
+{ 280488, 2, {696,403}},
+{ 280497, 2, {703,399}},
+{ 280539, 2, {549,511}},
+{ 280560, 2, {560,501}},
+{ 280600, 2, {575,488}},
+{ 280608, 2, {592,474}},
+{ 280665, 2, {567,495}},
+{ 280692, 2, {621,452}},
+{ 280704, 2, {544,516}},
+{ 280716, 2, {596,471}},
+{ 280800, 2, {540,520}},
+{ 280860, 2, {604,465}},
+{ 280896, 2, {532,528}},
+{ 280908, 2, {578,486}},
+{ 280917, 2, {637,441}},
+{ 280962, 2, {594,473}},
+{ 281010, 2, {551,510}},
+{ 281050, 2, {550,511}},
+{ 281052, 2, {633,444}},
+{ 281088, 2, {549,512}},
+{ 281124, 2, {548,513}},
+{ 281160, 2, {568,495}},
+{ 281184, 2, {606,464}},
+{ 281190, 2, {546,515}},
+{ 281200, 2, {592,475}},
+{ 281220, 2, {545,516}},
+{ 281232, 2, {558,504}},
+{ 281240, 2, {632,445}},
+{ 281248, 2, {544,517}},
+{ 281250, 2, {625,450}},
+{ 281295, 2, {665,423}},
+{ 281316, 2, {591,476}},
+{ 281358, 2, {539,522}},
+{ 281370, 2, {565,498}},
+{ 281388, 2, {537,524}},
+{ 281400, 2, {536,525}},
+{ 281424, 2, {533,528}},
+{ 281428, 2, {532,529}},
+{ 281435, 2, {595,473}},
+{ 281520, 2, {552,510}},
+{ 281547, 2, {763,369}},
+{ 281554, 2, {637,442}},
+{ 281589, 2, {583,483}},
+{ 281600, 2, {550,512}},
+{ 281664, 2, {576,489}},
+{ 281666, 2, {649,434}},
+{ 281784, 2, {597,472}},
+{ 281790, 2, {558,505}},
+{ 281792, 2, {544,518}},
+{ 281799, 2, {567,497}},
+{ 281808, 2, {618,456}},
+{ 281875, 2, {625,451}},
+{ 281892, 2, {556,507}},
+{ 281916, 2, {573,492}},
+{ 281940, 2, {555,508}},
+{ 281952, 2, {534,528}},
+{ 281996, 2, {572,493}},
+{ 282030, 2, {553,510}},
+{ 282051, 2, {693,407}},
+{ 282072, 2, {552,511}},
+{ 282080, 2, {656,430}},
+{ 282112, 2, {551,512}},
+{ 282150, 2, {550,513}},
+{ 282200, 2, {664,425}},
+{ 282204, 2, {603,468}},
+{ 282282, 2, {546,517}},
+{ 282285, 2, {615,459}},
+{ 282302, 2, {646,437}},
+{ 282315, 2, {649,435}},
+{ 282336, 2, {544,519}},
+{ 282360, 2, {543,520}},
+{ 282384, 2, {592,477}},
+{ 282464, 2, {679,416}},
+{ 282480, 2, {535,528}},
+{ 282492, 2, {532,531}},
+{ 282552, 2, {579,488}},
+{ 282555, 2, {585,483}},
+{ 282564, 2, {564,501}},
+{ 282568, 2, {572,494}},
+{ 282576, 2, {609,464}},
+{ 282600, 2, {600,471}},
+{ 282624, 2, {552,512}},
+{ 282663, 2, {551,513}},
+{ 282720, 2, {570,496}},
+{ 282735, 2, {549,515}},
+{ 282744, 2, {561,504}},
+{ 282800, 2, {560,505}},
+{ 282854, 2, {559,506}},
+{ 282864, 2, {568,498}},
+{ 282900, 2, {575,492}},
+{ 282975, 2, {539,525}},
+{ 283136, 2, {553,512}},
+{ 283140, 2, {572,495}},
+{ 283176, 2, {552,513}},
+{ 283200, 2, {590,480}},
+{ 283220, 2, {578,490}},
+{ 283240, 2, {584,485}},
+{ 283284, 2, {549,516}},
+{ 283290, 2, {570,497}},
+{ 283338, 2, {583,486}},
+{ 283360, 2, {560,506}},
+{ 283392, 2, {576,492}},
+{ 283400, 2, {545,520}},
+{ 283404, 2, {627,452}},
+{ 283475, 2, {575,493}},
+{ 283500, 2, {540,525}},
+{ 283504, 2, {611,464}},
+{ 283528, 2, {581,488}},
+{ 283536, 2, {537,528}},
+{ 283556, 2, {533,532}},
+{ 283584, 2, {633,448}},
+{ 283590, 2, {685,414}},
+{ 283605, 2, {555,511}},
+{ 283620, 2, {580,489}},
+{ 283680, 2, {591,480}},
+{ 283689, 2, {553,513}},
+{ 283716, 2, {639,444}},
+{ 283725, 2, {585,485}},
+{ 283800, 2, {550,516}},
+{ 283815, 2, {595,477}},
+{ 283824, 2, {584,486}},
+{ 283836, 2, {651,436}},
+{ 283920, 2, {546,520}},
+{ 283968, 2, {544,522}},
+{ 284004, 2, {588,483}},
+{ 284016, 2, {582,488}},
+{ 284053, 2, {539,527}},
+{ 284085, 2, {535,531}},
+{ 284115, 2, {611,465}},
+{ 284130, 2, {574,495}},
+{ 284160, 2, {555,512}},
+{ 284172, 2, {597,476}},
+{ 284208, 2, {573,496}},
+{ 284240, 2, {646,440}},
+{ 284280, 2, {552,515}},
+{ 284292, 2, {596,477}},
+{ 284310, 2, {585,486}},
+{ 284350, 2, {550,517}},
+{ 284355, 2, {639,445}},
+{ 284375, 2, {625,455}},
+{ 284400, 2, {600,474}},
+{ 284412, 2, {548,519}},
+{ 284484, 2, {604,471}},
+{ 284487, 2, {589,483}},
+{ 284490, 2, {545,522}},
+{ 284532, 2, {543,524}},
+{ 284544, 2, {576,494}},
+{ 284568, 2, {568,501}},
+{ 284580, 2, {540,527}},
+{ 284592, 2, {539,528}},
+{ 284616, 2, {536,531}},
+{ 284625, 2, {575,495}},
+{ 284648, 2, {598,476}},
+{ 284690, 2, {581,490}},
+{ 284704, 2, {574,496}},
+{ 284715, 2, {555,513}},
+{ 284760, 2, {565,504}},
+{ 284800, 2, {640,445}},
+{ 284820, 2, {564,505}},
+{ 284868, 2, {579,492}},
+{ 284886, 2, {646,441}},
+{ 284900, 2, {550,518}},
+{ 284928, 2, {636,448}},
+{ 284988, 2, {561,508}},
+{ 285076, 2, {589,484}},
+{ 285090, 2, {559,510}},
+{ 285120, 2, {540,528}},
+{ 285131, 2, {539,529}},
+{ 285138, 2, {558,511}},
+{ 285175, 2, {671,425}},
+{ 285200, 2, {575,496}},
+{ 285228, 2, {556,513}},
+{ 285243, 2, {799,357}},
+{ 285285, 2, {627,455}},
+{ 285348, 2, {553,516}},
+{ 285376, 2, {637,448}},
+{ 285384, 2, {552,517}},
+{ 285480, 2, {549,520}},
+{ 285576, 2, {584,489}},
+{ 285600, 2, {544,525}},
+{ 285660, 2, {540,529}},
+{ 285670, 2, {539,530}},
+{ 285684, 2, {537,532}},
+{ 285690, 2, {535,534}},
+{ 285696, 2, {558,512}},
+{ 285714, 2, {594,481}},
+{ 285750, 2, {635,450}},
+{ 285760, 2, {608,470}},
+{ 285768, 2, {567,504}},
+{ 285775, 2, {575,497}},
+{ 285912, 2, {627,456}},
+{ 285936, 2, {552,518}},
+{ 285948, 2, {564,507}},
+{ 285950, 2, {602,475}},
+{ 285957, 2, {623,459}},
+{ 286032, 2, {606,472}},
+{ 286044, 2, {591,484}},
+{ 286090, 2, {610,469}},
+{ 286116, 2, {633,452}},
+{ 286143, 2, {667,429}},
+{ 286160, 2, {560,511}},
+{ 286195, 2, {595,481}},
+{ 286200, 2, {540,530}},
+{ 286208, 2, {559,512}},
+{ 286209, 2, {539,531}},
+{ 286224, 2, {536,534}},
+{ 286286, 2, {847,338}},
+{ 286335, 2, {567,505}},
+{ 286350, 2, {575,498}},
+{ 286368, 2, {608,471}},
+{ 286380, 2, {555,516}},
+{ 286425, 2, {603,475}},
+{ 286440, 2, {616,465}},
+{ 286488, 2, {552,519}},
+{ 286500, 2, {573,500}},
+{ 286520, 2, {551,520}},
+{ 286560, 2, {597,480}},
+{ 286572, 2, {572,501}},
+{ 286580, 2, {623,460}},
+{ 286650, 2, {546,525}},
+{ 286688, 2, {544,527}},
+{ 286704, 2, {543,528}},
+{ 286720, 2, {560,512}},
+{ 286740, 2, {540,531}},
+{ 286752, 2, {618,464}},
+{ 286760, 2, {536,535}},
+{ 286767, 2, {559,513}},
+{ 286770, 2, {605,474}},
+{ 286824, 2, {629,456}},
+{ 286836, 2, {583,492}},
+{ 286840, 2, {568,505}},
+{ 286848, 2, {576,498}},
+{ 286875, 2, {625,459}},
+{ 286890, 2, {655,438}},
+{ 286902, 2, {567,506}},
+{ 286935, 2, {555,517}},
+{ 287000, 2, {574,500}},
+{ 287028, 2, {603,476}},
+{ 287100, 2, {550,522}},
+{ 287120, 2, {592,485}},
+{ 287184, 2, {579,496}},
+{ 287217, 2, {679,423}},
+{ 287280, 2, {540,532}},
+{ 287287, 2, {539,533}},
+{ 287300, 2, {650,442}},
+{ 287370, 2, {558,515}},
+{ 287448, 2, {609,472}},
+{ 287469, 2, {567,507}},
+{ 287525, 2, {775,371}},
+{ 287532, 2, {588,489}},
+{ 287560, 2, {553,520}},
+{ 287584, 2, {608,473}},
+{ 287595, 2, {581,495}},
+{ 287616, 2, {642,448}},
+{ 287625, 2, {767,375}},
+{ 287676, 2, {549,524}},
+{ 287700, 2, {548,525}},
+{ 287712, 2, {592,486}},
+{ 287742, 2, {546,527}},
+{ 287760, 2, {545,528}},
+{ 287776, 2, {544,529}},
+{ 287820, 2, {540,533}},
+{ 287832, 2, {537,536}},
+{ 287850, 2, {570,505}},
+{ 287868, 2, {596,483}},
+{ 287875, 2, {875,329}},
+{ 287896, 2, {679,424}},
+{ 287976, 2, {568,507}},
+{ 288000, 2, {576,500}},
+{ 288036, 2, {567,508}},
+{ 288057, 2, {609,473}},
+{ 288108, 2, {604,477}},
+{ 288144, 2, {552,522}},
+{ 288145, 2, {715,403}},
+{ 288150, 2, {565,510}},
+{ 288156, 2, {649,444}},
+{ 288176, 2, {581,496}},
+{ 288192, 2, {608,474}},
+{ 288204, 2, {564,511}},
+{ 288252, 2, {612,471}},
+{ 288260, 2, {580,497}},
+{ 288288, 2, {546,528}},
+{ 288320, 2, {544,530}},
+{ 288400, 2, {560,515}},
+{ 288405, 2, {585,493}},
+{ 288408, 2, {591,488}},
+{ 288420, 2, {570,506}},
+{ 288435, 2, {615,469}},
+{ 288463, 2, {841,343}},
+{ 288486, 2, {558,517}},
+{ 288512, 2, {644,448}},
+{ 288558, 2, {697,414}},
+{ 288564, 2, {556,519}},
+{ 288576, 2, {576,501}},
+{ 288585, 2, {583,495}},
+{ 288600, 2, {555,520}},
+{ 288610, 2, {589,490}},
+{ 288640, 2, {640,451}},
+{ 288648, 2, {633,456}},
+{ 288666, 2, {553,522}},
+{ 288672, 2, {582,496}},
+{ 288711, 2, {629,459}},
+{ 288765, 2, {621,465}},
+{ 288768, 2, {564,512}},
+{ 288792, 2, {573,504}},
+{ 288800, 2, {608,475}},
+{ 288828, 2, {639,452}},
+{ 288834, 2, {546,529}},
+{ 288855, 2, {655,441}},
+{ 288864, 2, {544,531}},
+{ 288876, 2, {543,532}},
+{ 288900, 2, {540,535}},
+{ 288904, 2, {539,536}},
+{ 288948, 2, {597,484}},
+{ 288960, 2, {560,516}},
+{ 289000, 2, {578,500}},
+{ 289044, 2, {558,518}},
+{ 289072, 2, {623,464}},
+{ 289080, 2, {584,495}},
+{ 289168, 2, {583,496}},
+{ 289170, 2, {567,510}},
+{ 289275, 2, {551,525}},
+{ 289280, 2, {565,512}},
+{ 289289, 2, {1001,289}},
+{ 289296, 2, {574,504}},
+{ 289332, 2, {564,513}},
+{ 289340, 2, {629,460}},
+{ 289395, 2, {545,531}},
+{ 289408, 2, {544,532}},
+{ 289476, 2, {561,516}},
+{ 289488, 2, {592,489}},
+{ 289500, 2, {579,500}},
+{ 289520, 2, {560,517}},
+{ 289562, 2, {559,518}},
+{ 289674, 2, {627,462}},
+{ 289680, 2, {568,510}},
+{ 289695, 2, {623,465}},
+{ 289710, 2, {555,522}},
+{ 289731, 2, {663,437}},
+{ 289737, 2, {567,511}},
+{ 289755, 2, {685,423}},
+{ 289800, 2, {552,525}},
+{ 289845, 2, {565,513}},
+{ 289850, 2, {550,527}},
+{ 289863, 2, {749,387}},
+{ 289872, 2, {549,528}},
+{ 289884, 2, {588,493}},
+{ 289952, 2, {544,533}},
+{ 289980, 2, {540,537}},
+{ 290004, 2, {572,507}},
+{ 290016, 2, {608,477}},
+{ 290080, 2, {560,518}},
+{ 290136, 2, {616,471}},
+{ 290160, 2, {558,520}},
+{ 290225, 2, {611,475}},
+{ 290248, 2, {568,511}},
+{ 290250, 2, {645,450}},
+{ 290280, 2, {590,492}},
+{ 290290, 2, {638,455}},
+{ 290304, 2, {567,512}},
+{ 290325, 2, {553,525}},
+{ 290360, 2, {595,488}},
+{ 290400, 2, {550,528}},
+{ 290460, 2, {564,515}},
+{ 290496, 2, {544,534}},
+{ 290500, 2, {581,500}},
+{ 290580, 2, {580,501}},
+{ 290605, 2, {665,437}},
+{ 290628, 2, {598,486}},
+{ 290640, 2, {560,519}},
+{ 290680, 2, {559,520}},
+{ 290745, 2, {585,497}},
+{ 290772, 2, {591,492}},
+{ 290780, 2, {620,469}},
+{ 290820, 2, {555,524}},
+{ 290832, 2, {584,498}},
+{ 290836, 2, {611,476}},
+{ 290880, 2, {576,505}},
+{ 290895, 2, {615,473}},
+{ 290904, 2, {552,527}},
+{ 290928, 2, {551,528}},
+{ 290950, 2, {550,529}},
+{ 290966, 2, {589,494}},
+{ 290988, 2, {548,531}},
+{ 291005, 2, {605,481}},
+{ 291018, 2, {546,533}},
+{ 291030, 2, {545,534}},
+{ 291040, 2, {544,535}},
+{ 291048, 2, {543,536}},
+{ 291060, 2, {540,539}},
+{ 291084, 2, {573,508}},
+{ 291165, 2, {705,413}},
+{ 291180, 2, {633,460}},
+{ 291214, 2, {671,434}},
+{ 291264, 2, {592,492}},
+{ 291270, 2, {570,511}},
+{ 291312, 2, {578,504}},
+{ 291336, 2, {597,488}},
+{ 291384, 2, {568,513}},
+{ 291444, 2, {596,489}},
+{ 291465, 2, {635,459}},
+{ 291540, 2, {565,516}},
+{ 291555, 2, {589,495}},
+{ 291648, 2, {588,496}},
+{ 291669, 2, {731,399}},
+{ 291696, 2, {618,472}},
+{ 291708, 2, {657,444}},
+{ 291720, 2, {561,520}},
+{ 291732, 2, {604,483}},
+{ 291798, 2, {559,522}},
+{ 291810, 2, {685,426}},
+{ 291816, 2, {579,504}},
+{ 291840, 2, {570,512}},
+{ 291852, 2, {603,484}},
+{ 291870, 2, {621,470}},
+{ 291879, 2, {791,369}},
+{ 291885, 2, {671,435}},
+{ 291893, 2, {851,343}},
+{ 291900, 2, {556,525}},
+{ 291920, 2, {656,445}},
+{ 291924, 2, {612,477}},
+{ 291984, 2, {553,528}},
+{ 292005, 2, {567,515}},
+{ 292020, 2, {620,471}},
+{ 292032, 2, {576,507}},
+{ 292068, 2, {549,532}},
+{ 292110, 2, {546,535}},
+{ 292120, 2, {545,536}},
+{ 292128, 2, {544,537}},
+{ 292175, 2, {725,403}},
+{ 292236, 2, {588,497}},
+{ 292320, 2, {560,522}},
+{ 292365, 2, {657,445}},
+{ 292383, 2, {637,459}},
+{ 292455, 2, {603,485}},
+{ 292500, 2, {585,500}},
+{ 292520, 2, {568,515}},
+{ 292560, 2, {552,530}},
+{ 292572, 2, {567,516}},
+{ 292584, 2, {584,501}},
+{ 292600, 2, {550,532}},
+{ 292640, 2, {590,496}},
+{ 292656, 2, {546,536}},
+{ 292716, 2, {564,519}},
+{ 292740, 2, {574,510}},
+{ 292752, 2, {642,456}},
+{ 292810, 2, {623,470}},
+{ 292824, 2, {581,504}},
+{ 292825, 2, {689,425}},
+{ 292864, 2, {572,512}},
+{ 292875, 2, {781,375}},
+{ 292929, 2, {609,481}},
+{ 292950, 2, {558,525}},
+{ 292992, 2, {654,448}},
+{ 293020, 2, {598,490}},
+{ 293040, 2, {555,528}},
+{ 293046, 2, {578,507}},
+{ 293090, 2, {553,530}},
+{ 293112, 2, {552,531}},
+{ 293125, 2, {625,469}},
+{ 293132, 2, {551,532}},
+{ 293136, 2, {591,496}},
+{ 293139, 2, {567,517}},
+{ 293150, 2, {550,533}},
+{ 293216, 2, {544,539}},
+{ 293220, 2, {543,540}},
+{ 293230, 2, {590,497}},
+{ 293250, 2, {575,510}},
+{ 293260, 2, {620,473}},
+{ 293265, 2, {665,441}},
+{ 293328, 2, {582,504}},
+{ 293335, 2, {595,493}},
+{ 293370, 2, {635,462}},
+{ 293376, 2, {573,512}},
+{ 293400, 2, {600,489}},
+{ 293436, 2, {572,513}},
+{ 293475, 2, {559,525}},
+{ 293550, 2, {570,515}},
+{ 293601, 2, {651,451}},
+{ 293625, 2, {675,435}},
+{ 293643, 2, {553,531}},
+{ 293706, 2, {567,518}},
+{ 293712, 2, {633,464}},
+{ 293715, 2, {549,535}},
+{ 293724, 2, {597,492}},
+{ 293733, 2, {621,473}},
+{ 293760, 2, {544,540}},
+{ 293787, 2, {729,403}},
+{ 293800, 2, {565,520}},
+{ 293825, 2, {575,511}},
+{ 293832, 2, {583,504}},
+{ 293854, 2, {703,418}},
+{ 293888, 2, {574,512}},
+{ 293904, 2, {624,471}},
+{ 293910, 2, {582,505}},
+{ 293930, 2, {595,494}},
+{ 293940, 2, {639,460}},
+{ 293964, 2, {561,524}},
+{ 293985, 2, {695,423}},
+{ 294000, 2, {560,525}},
+{ 294056, 2, {623,472}},
+{ 294060, 2, {580,507}},
+{ 294112, 2, {707,416}},
+{ 294132, 2, {579,508}},
+{ 294151, 2, {1331,221}},
+{ 294216, 2, {552,533}},
+{ 294252, 2, {651,452}},
+{ 294264, 2, {549,536}},
+{ 294276, 2, {548,537}},
+{ 294300, 2, {545,540}},
+{ 294336, 2, {576,511}},
+{ 294372, 2, {612,481}},
+{ 294400, 2, {575,512}},
+{ 294462, 2, {574,513}},
+{ 294500, 2, {589,500}},
+{ 294525, 2, {561,525}},
+{ 294588, 2, {588,501}},
+{ 294624, 2, {558,528}},
+{ 294690, 2, {570,517}},
+{ 294750, 2, {655,450}},
+{ 294756, 2, {609,484}},
+{ 294768, 2, {552,534}},
+{ 294784, 2, {658,448}},
+{ 294792, 2, {568,519}},
+{ 294814, 2, {598,493}},
+{ 294816, 2, {592,498}},
+{ 294840, 2, {546,540}},
+{ 294880, 2, {608,485}},
+{ 294912, 2, {576,512}},
+{ 294920, 2, {584,505}},
+{ 294930, 2, {565,522}},
+{ 294975, 2, {575,513}},
+{ 295020, 2, {596,495}},
+{ 295065, 2, {711,415}},
+{ 295075, 2, {725,407}},
+{ 295104, 2, {636,464}},
+{ 295113, 2, {611,483}},
+{ 295120, 2, {560,527}},
+{ 295152, 2, {559,528}},
+{ 295218, 2, {594,497}},
+{ 295236, 2, {556,531}},
+{ 295240, 2, {605,488}},
+{ 295260, 2, {555,532}},
+{ 295281, 2, {763,387}},
+{ 295295, 2, {649,455}},
+{ 295320, 2, {552,535}},
+{ 295356, 2, {604,489}},
+{ 295392, 2, {544,543}},
+{ 295425, 2, {585,505}},
+{ 295480, 2, {664,445}},
+{ 295488, 2, {576,513}},
+{ 295500, 2, {591,500}},
+{ 295568, 2, {637,464}},
+{ 295596, 2, {612,483}},
+{ 295625, 2, {625,473}},
+{ 295647, 2, {561,527}},
+{ 295668, 2, {573,516}},
+{ 295728, 2, {606,488}},
+{ 295740, 2, {558,530}},
+{ 295776, 2, {624,474}},
+{ 295815, 2, {555,533}},
+{ 295911, 2, {549,539}},
+{ 295925, 2, {623,475}},
+{ 295944, 2, {627,472}},
+{ 296010, 2, {585,506}},
+{ 296055, 2, {645,459}},
+{ 296070, 2, {695,426}},
+{ 296088, 2, {584,507}},
+{ 296100, 2, {564,525}},
+{ 296112, 2, {597,496}},
+{ 296205, 2, {637,465}},
+{ 296208, 2, {561,528}},
+{ 296225, 2, {697,425}},
+{ 296240, 2, {560,529}},
+{ 296244, 2, {633,468}},
+{ 296250, 2, {625,474}},
+{ 296310, 2, {581,510}},
+{ 296380, 2, {580,511}},
+{ 296400, 2, {570,520}},
+{ 296408, 2, {553,536}},
+{ 296424, 2, {552,537}},
+{ 296448, 2, {579,512}},
+{ 296450, 2, {550,539}},
+{ 296460, 2, {549,540}},
+{ 296480, 2, {545,544}},
+{ 296496, 2, {568,522}},
+{ 296592, 2, {592,501}},
+{ 296640, 2, {576,515}},
+{ 296676, 2, {603,492}},
+{ 296700, 2, {575,516}},
+{ 296703, 2, {729,407}},
+{ 296758, 2, {574,517}},
+{ 296769, 2, {561,529}},
+{ 296800, 2, {560,530}},
+{ 296868, 2, {572,519}},
+{ 296940, 2, {588,505}},
+{ 296946, 2, {611,486}},
+{ 296960, 2, {580,512}},
+{ 296964, 2, {657,452}},
+{ 296989, 2, {551,539}},
+{ 297000, 2, {550,540}},
+{ 297024, 2, {546,544}},
+{ 297108, 2, {567,524}},
+{ 297171, 2, {623,477}},
+{ 297180, 2, {585,508}},
+{ 297192, 2, {609,488}},
+{ 297216, 2, {576,516}},
+{ 297275, 2, {575,517}},
+{ 297297, 2, {693,429}},
+{ 297312, 2, {608,489}},
+{ 297360, 2, {560,531}},
+{ 297375, 2, {793,375}},
+{ 297388, 2, {559,532}},
+{ 297414, 2, {558,533}},
+{ 297472, 2, {581,512}},
+{ 297480, 2, {555,536}},
+{ 297500, 2, {595,500}},
+{ 297528, 2, {552,539}},
+{ 297540, 2, {551,540}},
+{ 297564, 2, {548,543}},
+{ 297570, 2, {546,545}},
+{ 297648, 2, {624,477}},
+{ 297660, 2, {605,492}},
+{ 297675, 2, {567,525}},
+{ 297792, 2, {564,528}},
+{ 297840, 2, {584,510}},
+{ 297850, 2, {575,518}},
+{ 297864, 2, {591,504}},
+{ 297888, 2, {642,464}},
+{ 297920, 2, {560,532}},
+{ 297924, 2, {671,444}},
+{ 297960, 2, {573,520}},
+{ 297984, 2, {582,512}},
+{ 297990, 2, {602,495}},
+{ 298034, 2, {589,506}},
+{ 298053, 2, {581,513}},
+{ 298125, 2, {625,477}},
+{ 298200, 2, {568,525}},
+{ 298220, 2, {620,481}},
+{ 298224, 2, {654,456}},
+{ 298265, 2, {605,493}},
+{ 298284, 2, {636,469}},
+{ 298320, 2, {565,528}},
+{ 298368, 2, {576,518}},
+{ 298452, 2, {561,532}},
+{ 298480, 2, {560,533}},
+{ 298496, 2, {583,512}},
+{ 298500, 2, {597,500}},
+{ 298530, 2, {558,535}},
+{ 298572, 2, {556,537}},
+{ 298592, 2, {602,496}},
+{ 298596, 2, {596,501}},
+{ 298620, 2, {553,540}},
+{ 298623, 2, {589,507}},
+{ 298656, 2, {549,544}},
+{ 298701, 2, {621,481}},
+{ 298760, 2, {616,485}},
+{ 298764, 2, {579,516}},
+{ 298775, 2, {629,475}},
+{ 298776, 2, {633,472}},
+{ 298800, 2, {600,498}},
+{ 298809, 2, {567,527}},
+{ 298870, 2, {605,494}},
+{ 298890, 2, {615,486}},
+{ 298908, 2, {684,437}},
+{ 298920, 2, {564,530}},
+{ 298935, 2, {585,511}},
+{ 298944, 2, {576,519}},
+{ 298960, 2, {592,505}},
+{ 298980, 2, {604,495}},
+{ 299000, 2, {575,520}},
+{ 299013, 2, {561,533}},
+{ 299026, 2, {689,434}},
+{ 299040, 2, {560,534}},
+{ 299052, 2, {639,468}},
+{ 299061, 2, {707,423}},
+{ 299079, 2, {583,513}},
+{ 299088, 2, {558,536}},
+{ 299115, 2, {765,391}},
+{ 299136, 2, {608,492}},
+{ 299145, 2, {555,539}},
+{ 299200, 2, {550,544}},
+{ 299205, 2, {549,545}},
+{ 299268, 2, {612,489}},
+{ 299299, 2, {1001,299}},
+{ 299376, 2, {567,528}},
+{ 299390, 2, {611,490}},
+{ 299425, 2, {725,413}},
+{ 299439, 2, {679,441}},
+{ 299460, 2, {620,483}},
+{ 299475, 2, {605,495}},
+{ 299484, 2, {564,531}},
+{ 299520, 2, {576,520}},
+{ 299556, 2, {628,477}},
+{ 299592, 2, {584,513}},
+{ 299600, 2, {560,535}},
+{ 299628, 2, {574,522}},
+{ 299676, 2, {663,452}},
+{ 299691, 2, {603,497}},
+{ 299700, 2, {555,540}},
+{ 299712, 2, {669,448}},
+{ 299715, 2, {689,435}},
+{ 299730, 2, {582,515}},
+{ 299736, 2, {552,543}},
+{ 299744, 2, {551,544}},
+{ 299768, 2, {707,424}},
+{ 299782, 2, {686,437}},
+{ 299796, 2, {581,516}},
+{ 299838, 2, {649,462}},
+{ 299860, 2, {580,517}},
+{ 299915, 2, {665,451}},
+{ 299936, 2, {721,416}},
+{ 299943, 2, {567,529}},
+{ 299970, 2, {594,505}},
+{ 300015, 2, {565,531}},
+{ 300030, 2, {685,438}},
+{ 300080, 2, {605,496}},
+{ 300120, 2, {610,492}},
+{ 300125, 2, {875,343}},
+{ 300144, 2, {592,507}},
+{ 300150, 2, {575,522}},
+{ 300200, 2, {632,475}},
+{ 300228, 2, {591,508}},
+{ 300252, 2, {573,524}},
+{ 300288, 2, {552,544}},
+{ 300300, 2, {550,546}},
+{ 300366, 2, {666,451}},
+{ 300375, 2, {675,445}},
+{ 300390, 2, {570,527}},
+{ 300440, 2, {580,518}},
+{ 300468, 2, {588,511}},
+{ 300495, 2, {871,345}},
+{ 300510, 2, {567,530}},
+{ 300560, 2, {578,520}},
+{ 300564, 2, {594,506}},
+{ 300576, 2, {606,496}},
+{ 300600, 2, {600,501}},
+{ 300625, 2, {625,481}},
+{ 300645, 2, {655,459}},
+{ 300664, 2, {637,472}},
+{ 300672, 2, {576,522}},
+{ 300696, 2, {561,536}},
+{ 300713, 2, {833,361}},
+{ 300720, 2, {560,537}},
+{ 300760, 2, {584,515}},
+{ 300762, 2, {558,539}},
+{ 300800, 2, {640,470}},
+{ 300828, 2, {583,516}},
+{ 300832, 2, {553,544}},
+{ 300840, 2, {552,545}},
+{ 300846, 2, {551,546}},
+{ 300852, 2, {549,548}},
+{ 300888, 2, {597,504}},
+{ 300960, 2, {570,528}},
+{ 300990, 2, {635,474}},
+{ 301000, 2, {602,500}},
+{ 301020, 2, {580,519}},
+{ 301035, 2, {705,427}},
+{ 301056, 2, {588,512}},
+{ 301070, 2, {595,506}},
+{ 301080, 2, {579,520}},
+{ 301125, 2, {803,375}},
+{ 301158, 2, {594,507}},
+{ 301185, 2, {621,485}},
+{ 301224, 2, {616,489}},
+{ 301275, 2, {585,515}},
+{ 301290, 2, {605,498}},
+{ 301301, 2, {559,539}},
+{ 301308, 2, {633,476}},
+{ 301350, 2, {574,525}},
+{ 301392, 2, {552,546}},
+{ 301444, 2, {572,527}},
+{ 301455, 2, {609,495}},
+{ 301464, 2, {632,477}},
+{ 301490, 2, {590,511}},
+{ 301500, 2, {603,500}},
+{ 301530, 2, {570,529}},
+{ 301568, 2, {589,512}},
+{ 301584, 2, {618,488}},
+{ 301587, 2, {627,481}},
+{ 301608, 2, {568,531}},
+{ 301644, 2, {567,532}},
+{ 301710, 2, {565,534}},
+{ 301740, 2, {564,535}},
+{ 301785, 2, {649,465}},
+{ 301840, 2, {560,539}},
+{ 301860, 2, {559,540}},
+{ 301908, 2, {556,543}},
+{ 301920, 2, {555,544}},
+{ 301994, 2, {583,518}},
+{ 302005, 2, {935,323}},
+{ 302016, 2, {572,528}},
+{ 302022, 2, {658,459}},
+{ 302064, 2, {609,496}},
+{ 302080, 2, {590,512}},
+{ 302085, 2, {685,441}},
+{ 302120, 2, {581,520}},
+{ 302157, 2, {589,513}},
+{ 302172, 2, {596,507}},
+{ 302175, 2, {711,425}},
+{ 302211, 2, {567,533}},
+{ 302220, 2, {657,460}},
+{ 302316, 2, {708,427}},
+{ 302328, 2, {612,494}},
+{ 302379, 2, {561,539}},
+{ 302388, 2, {669,452}},
+{ 302400, 2, {560,540}},
+{ 302445, 2, {585,517}},
+{ 302505, 2, {645,469}},
+{ 302535, 2, {729,415}},
+{ 302544, 2, {573,528}},
+{ 302560, 2, {610,496}},
+{ 302575, 2, {637,475}},
+{ 302580, 2, {615,492}},
+{ 302588, 2, {572,529}},
+{ 302592, 2, {591,512}},
+{ 302600, 2, {680,445}},
+{ 302604, 2, {604,501}},
+{ 302610, 2, {655,462}},
+{ 302634, 2, {731,414}},
+{ 302640, 2, {582,520}},
+{ 302720, 2, {640,473}},
+{ 302784, 2, {608,498}},
+{ 302820, 2, {588,515}},
+{ 302840, 2, {565,536}},
+{ 302848, 2, {676,448}},
+{ 302868, 2, {564,537}},
+{ 302895, 2, {635,477}},
+{ 302940, 2, {561,540}},
+{ 303000, 2, {600,505}},
+{ 303024, 2, {642,472}},
+{ 303025, 2, {575,527}},
+{ 303048, 2, {552,549}},
+{ 303050, 2, {551,550}},
+{ 303056, 2, {611,496}},
+{ 303072, 2, {574,528}},
+{ 303096, 2, {584,519}},
+{ 303170, 2, {610,497}},
+{ 303180, 2, {620,489}},
+{ 303264, 2, {624,486}},
+{ 303276, 2, {597,508}},
+{ 303282, 2, {581,522}},
+{ 303312, 2, {568,534}},
+{ 303324, 2, {628,483}},
+{ 303345, 2, {567,535}},
+{ 303396, 2, {579,524}},
+{ 303450, 2, {578,525}},
+{ 303456, 2, {654,464}},
+{ 303468, 2, {627,484}},
+{ 303485, 2, {667,455}},
+{ 303525, 2, {639,475}},
+{ 303534, 2, {594,511}},
+{ 303552, 2, {558,544}},
+{ 303555, 2, {735,413}},
+{ 303597, 2, {553,549}},
+{ 303600, 2, {552,550}},
+{ 303688, 2, {616,493}},
+{ 303696, 2, {592,513}},
+{ 303732, 2, {572,531}},
+{ 303750, 2, {625,486}},
+{ 303807, 2, {629,483}},
+{ 303810, 2, {570,533}},
+{ 303840, 2, {633,480}},
+{ 303849, 2, {637,477}},
+{ 303880, 2, {568,535}},
+{ 303912, 2, {567,536}},
+{ 303996, 2, {564,539}},
+{ 304000, 2, {608,500}},
+{ 304024, 2, {623,488}},
+{ 304080, 2, {560,543}},
+{ 304096, 2, {559,544}},
+{ 304110, 2, {558,545}},
+{ 304128, 2, {576,528}},
+{ 304140, 2, {555,548}},
+{ 304150, 2, {553,550}},
+{ 304152, 2, {552,551}},
+{ 304164, 2, {612,497}},
+{ 304192, 2, {679,448}},
+{ 304200, 2, {585,520}},
+{ 304290, 2, {621,490}},
+{ 304325, 2, {925,329}},
+{ 304326, 2, {583,522}},
+{ 304410, 2, {695,438}},
+{ 304436, 2, {629,484}},
+{ 304440, 2, {590,516}},
+{ 304500, 2, {580,525}},
+{ 304515, 2, {603,505}},
+{ 304608, 2, {608,501}},
+{ 304836, 2, {573,532}},
+{ 304848, 2, {584,522}},
+{ 304850, 2, {650,469}},
+{ 304876, 2, {572,533}},
+{ 304880, 2, {592,515}},
+{ 304920, 2, {605,504}},
+{ 304950, 2, {570,535}},
+{ 304956, 2, {591,516}},
+{ 304980, 2, {598,510}},
+{ 304983, 2, {721,423}},
+{ 305016, 2, {568,537}},
+{ 305025, 2, {581,525}},
+{ 305040, 2, {615,496}},
+{ 305045, 2, {845,361}},
+{ 305064, 2, {669,456}},
+{ 305100, 2, {565,540}},
+{ 305136, 2, {624,489}},
+{ 305172, 2, {588,519}},
+{ 305184, 2, {561,544}},
+{ 305200, 2, {560,545}},
+{ 305214, 2, {559,546}},
+{ 305235, 2, {595,513}},
+{ 305244, 2, {556,549}},
+{ 305256, 2, {553,552}},
+{ 305270, 2, {623,490}},
+{ 305280, 2, {576,530}},
+{ 305283, 2, {841,363}},
+{ 305305, 2, {671,455}},
+{ 305312, 2, {658,464}},
+{ 305325, 2, {575,531}},
+{ 305424, 2, {606,504}},
+{ 305472, 2, {592,516}},
+{ 305500, 2, {611,500}},
+{ 305520, 2, {570,536}},
+{ 305532, 2, {621,492}},
+{ 305613, 2, {567,539}},
+{ 305655, 2, {615,497}},
+{ 305660, 2, {580,527}},
+{ 305664, 2, {597,512}},
+{ 305694, 2, {629,486}},
+{ 305704, 2, {721,424}},
+{ 305712, 2, {579,528}},
+{ 305748, 2, {596,513}},
+{ 305760, 2, {560,546}},
+{ 305762, 2, {578,529}},
+{ 305767, 2, {847,361}},
+{ 305856, 2, {576,531}},
+{ 305877, 2, {713,429}},
+{ 305910, 2, {594,515}},
+{ 305976, 2, {627,488}},
+{ 306000, 2, {600,510}},
+{ 306064, 2, {592,517}},
+{ 306075, 2, {583,525}},
+{ 306117, 2, {791,387}},
+{ 306152, 2, {568,539}},
+{ 306153, 2, {621,493}},
+{ 306160, 2, {688,445}},
+{ 306176, 2, {598,512}},
+{ 306180, 2, {567,540}},
+{ 306228, 2, {604,507}},
+{ 306240, 2, {580,528}},
+{ 306250, 2, {625,490}},
+{ 306252, 2, {564,543}},
+{ 306280, 2, {589,520}},
+{ 306299, 2, {893,343}},
+{ 306306, 2, {561,546}},
+{ 306324, 2, {603,508}},
+{ 306360, 2, {555,552}},
+{ 306372, 2, {633,484}},
+{ 306397, 2, {637,481}},
+{ 306432, 2, {576,532}},
+{ 306475, 2, {575,533}},
+{ 306495, 2, {695,441}},
+{ 306520, 2, {632,485}},
+{ 306528, 2, {618,496}},
+{ 306540, 2, {585,524}},
+{ 306600, 2, {584,525}},
+{ 306612, 2, {612,501}},
+{ 306680, 2, {680,451}},
+{ 306735, 2, {605,507}},
+{ 306768, 2, {581,528}},
+{ 306774, 2, {598,513}},
+{ 306816, 2, {564,544}},
+{ 306878, 2, {638,481}},
+{ 306900, 2, {558,550}},
+{ 306915, 2, {555,553}},
+{ 307008, 2, {576,533}},
+{ 307020, 2, {595,516}},
+{ 307040, 2, {608,505}},
+{ 307050, 2, {575,534}},
+{ 307092, 2, {628,489}},
+{ 307098, 2, {594,517}},
+{ 307128, 2, {573,536}},
+{ 307152, 2, {632,486}},
+{ 307164, 2, {572,537}},
+{ 307188, 2, {636,483}},
+{ 307200, 2, {600,512}},
+{ 307230, 2, {570,539}},
+{ 307248, 2, {592,519}},
+{ 307272, 2, {651,472}},
+{ 307296, 2, {582,528}},
+{ 307320, 2, {591,520}},
+{ 307328, 2, {686,448}},
+{ 307360, 2, {565,544}},
+{ 307377, 2, {697,441}},
+{ 307380, 2, {564,545}},
+{ 307428, 2, {561,548}},
+{ 307440, 2, {560,549}},
+{ 307450, 2, {559,550}},
+{ 307476, 2, {657,468}},
+{ 307500, 2, {615,500}},
+{ 307584, 2, {576,534}},
+{ 307615, 2, {595,517}},
+{ 307632, 2, {624,493}},
+{ 307648, 2, {608,506}},
+{ 307692, 2, {594,518}},
+{ 307740, 2, {669,460}},
+{ 307800, 2, {570,540}},
+{ 307824, 2, {583,528}},
+{ 307923, 2, {651,473}},
+{ 307930, 2, {581,530}},
+{ 307980, 2, {580,531}},
+{ 308000, 2, {560,550}},
+{ 308016, 2, {558,552}},
+{ 308028, 2, {579,532}},
+{ 308052, 2, {597,516}},
+{ 308125, 2, {625,493}},
+{ 308133, 2, {603,511}},
+{ 308140, 2, {620,497}},
+{ 308160, 2, {576,535}},
+{ 308200, 2, {575,536}},
+{ 308224, 2, {602,512}},
+{ 308250, 2, {685,450}},
+{ 308256, 2, {608,507}},
+{ 308275, 2, {649,475}},
+{ 308295, 2, {585,527}},
+{ 308308, 2, {572,539}},
+{ 308320, 2, {656,470}},
+{ 308357, 2, {899,343}},
+{ 308385, 2, {623,495}},
+{ 308424, 2, {568,543}},
+{ 308448, 2, {567,544}},
+{ 308484, 2, {627,492}},
+{ 308490, 2, {565,546}},
+{ 308511, 2, {581,531}},
+{ 308525, 2, {1025,301}},
+{ 308550, 2, {561,550}},
+{ 308560, 2, {560,551}},
+{ 308568, 2, {559,552}},
+{ 308574, 2, {558,553}},
+{ 308580, 2, {556,555}},
+{ 308610, 2, {635,486}},
+{ 308616, 2, {616,501}},
+{ 308637, 2, {621,497}},
+{ 308672, 2, {689,448}},
+{ 308688, 2, {654,472}},
+{ 308700, 2, {588,525}},
+{ 308750, 2, {625,494}},
+{ 308826, 2, {602,513}},
+{ 308880, 2, {572,540}},
+{ 308904, 2, {633,488}},
+{ 308924, 2, {649,476}},
+{ 309000, 2, {600,515}},
+{ 309008, 2, {623,496}},
+{ 309015, 2, {567,545}},
+{ 309024, 2, {592,522}},
+{ 309048, 2, {632,489}},
+{ 309111, 2, {561,551}},
+{ 309140, 2, {580,533}},
+{ 309168, 2, {678,456}},
+{ 309225, 2, {589,525}},
+{ 309276, 2, {639,484}},
+{ 309312, 2, {576,537}},
+{ 309320, 2, {703,440}},
+{ 309324, 2, {596,519}},
+{ 309372, 2, {609,508}},
+{ 309375, 2, {625,495}},
+{ 309400, 2, {595,520}},
+{ 309420, 2, {573,540}},
+{ 309465, 2, {585,529}},
+{ 309540, 2, {660,469}},
+{ 309560, 2, {568,545}},
+{ 309575, 2, {725,427}},
+{ 309582, 2, {567,546}},
+{ 309636, 2, {564,549}},
+{ 309672, 2, {561,552}},
+{ 309680, 2, {560,553}},
+{ 309684, 2, {591,524}},
+{ 309690, 2, {558,555}},
+{ 309760, 2, {605,512}},
+{ 309852, 2, {604,513}},
+{ 309876, 2, {588,527}},
+{ 309915, 2, {639,485}},
+{ 309925, 2, {575,539}},
+{ 309960, 2, {574,540}},
+{ 310002, 2, {671,462}},
+{ 310023, 2, {703,441}},
+{ 310080, 2, {570,544}},
+{ 310104, 2, {584,531}},
+{ 310128, 2, {568,546}},
+{ 310156, 2, {583,532}},
+{ 310185, 2, {565,549}},
+{ 310200, 2, {564,550}},
+{ 310245, 2, {559,555}},
+{ 310272, 2, {606,512}},
+{ 310284, 2, {612,507}},
+{ 310288, 2, {656,473}},
+{ 310310, 2, {682,455}},
+{ 310344, 2, {579,536}},
+{ 310365, 2, {605,513}},
+{ 310400, 2, {640,485}},
+{ 310416, 2, {669,464}},
+{ 310440, 2, {597,520}},
+{ 310464, 2, {576,539}},
+{ 310470, 2, {655,474}},
+{ 310500, 2, {575,540}},
+{ 310536, 2, {681,456}},
+{ 310545, 2, {603,515}},
+{ 310590, 2, {595,522}},
+{ 310596, 2, {572,543}},
+{ 310620, 2, {620,501}},
+{ 310625, 2, {625,497}},
+{ 310650, 2, {570,545}},
+{ 310675, 2, {731,425}},
+{ 310716, 2, {567,548}},
+{ 310726, 2, {629,494}},
+{ 310752, 2, {624,498}},
+{ 310800, 2, {560,555}},
+{ 310821, 2, {779,399}},
+{ 310856, 2, {637,488}},
+{ 310860, 2, {628,495}},
+{ 310960, 2, {598,520}},
+{ 310992, 2, {589,528}},
+{ 311004, 2, {636,489}},
+{ 311040, 2, {576,540}},
+{ 311052, 2, {588,529}},
+{ 311080, 2, {616,505}},
+{ 311148, 2, {603,516}},
+{ 311234, 2, {602,517}},
+{ 311250, 2, {625,498}},
+{ 311370, 2, {582,535}},
+{ 311400, 2, {600,519}},
+{ 311416, 2, {581,536}},
+{ 311436, 2, {633,492}},
+{ 311460, 2, {580,537}},
+{ 311472, 2, {618,504}},
+{ 311500, 2, {623,500}},
+{ 311520, 2, {590,528}},
+{ 311542, 2, {578,539}},
+{ 311600, 2, {656,475}},
+{ 311610, 2, {611,510}},
+{ 311640, 2, {588,530}},
+{ 311661, 2, {679,459}},
+{ 311688, 2, {648,481}},
+{ 311696, 2, {616,506}},
+{ 311710, 2, {610,511}},
+{ 311712, 2, {573,544}},
+{ 311787, 2, {707,441}},
+{ 311805, 2, {585,533}},
+{ 311808, 2, {609,512}},
+{ 311832, 2, {568,549}},
+{ 311850, 2, {567,550}},
+{ 311856, 2, {584,534}},
+{ 311880, 2, {565,552}},
+{ 311892, 2, {564,553}},
+{ 311904, 2, {608,513}},
+{ 311916, 2, {561,556}},
+{ 311922, 2, {559,558}},
+{ 311952, 2, {582,536}},
+{ 312015, 2, {671,465}},
+{ 312048, 2, {591,528}},
+{ 312075, 2, {657,475}},
+{ 312090, 2, {606,515}},
+{ 312120, 2, {578,540}},
+{ 312130, 2, {637,490}},
+{ 312180, 2, {605,516}},
+{ 312228, 2, {588,531}},
+{ 312256, 2, {574,544}},
+{ 312320, 2, {610,512}},
+{ 312375, 2, {595,525}},
+{ 312417, 2, {567,551}},
+{ 312420, 2, {615,508}},
+{ 312435, 2, {655,477}},
+{ 312440, 2, {584,535}},
+{ 312455, 2, {715,437}},
+{ 312480, 2, {560,558}},
+{ 312543, 2, {693,451}},
+{ 312550, 2, {658,475}},
+{ 312620, 2, {580,539}},
+{ 312624, 2, {624,501}},
+{ 312650, 2, {650,481}},
+{ 312660, 2, {579,540}},
+{ 312664, 2, {646,484}},
+{ 312732, 2, {612,511}},
+{ 312741, 2, {729,429}},
+{ 312750, 2, {695,450}},
+{ 312768, 2, {576,543}},
+{ 312800, 2, {575,544}},
+{ 312828, 2, {597,524}},
+{ 312832, 2, {611,512}},
+{ 312840, 2, {632,495}},
+{ 312900, 2, {596,525}},
+{ 312936, 2, {663,472}},
+{ 312960, 2, {640,489}},
+{ 312975, 2, {585,535}},
+{ 312984, 2, {567,552}},
+{ 312987, 2, {867,361}},
+{ 313020, 2, {564,555}},
+{ 313040, 2, {560,559}},
+{ 313092, 2, {669,468}},
+{ 313110, 2, {630,497}},
+{ 313120, 2, {608,515}},
+{ 313131, 2, {651,481}},
+{ 313170, 2, {715,438}},
+{ 313200, 2, {580,540}},
+{ 313225, 2, {737,425}},
+{ 313260, 2, {681,460}},
+{ 313280, 2, {704,445}},
+{ 313296, 2, {642,488}},
+{ 313348, 2, {589,532}},
+{ 313443, 2, {611,513}},
+{ 313467, 2, {649,483}},
+{ 313470, 2, {645,486}},
+{ 313476, 2, {604,519}},
+{ 313495, 2, {689,455}},
+{ 313551, 2, {567,553}},
+{ 313560, 2, {585,536}},
+{ 313565, 2, {595,527}},
+{ 313599, 2, {561,559}},
+{ 313605, 2, {621,505}},
+{ 313608, 2, {584,537}},
+{ 313632, 2, {594,528}},
+{ 313728, 2, {608,516}},
+{ 313740, 2, {581,540}},
+{ 313760, 2, {592,530}},
+{ 313845, 2, {735,427}},
+{ 313875, 2, {675,465}},
+{ 313920, 2, {576,545}},
+{ 313950, 2, {575,546}},
+{ 313956, 2, {612,513}},
+{ 313968, 2, {633,496}},
+{ 314004, 2, {573,548}},
+{ 314028, 2, {572,549}},
+{ 314041, 2, {637,493}},
+{ 314070, 2, {570,551}},
+{ 314104, 2, {568,553}},
+{ 314160, 2, {561,560}},
+{ 314226, 2, {594,529}},
+{ 314237, 2, {583,539}},
+{ 314244, 2, {602,522}},
+{ 314265, 2, {615,511}},
+{ 314325, 2, {635,495}},
+{ 314336, 2, {608,517}},
+{ 314340, 2, {620,507}},
+{ 314352, 2, {592,531}},
+{ 314388, 2, {639,492}},
+{ 314412, 2, {591,532}},
+{ 314415, 2, {685,459}},
+{ 314496, 2, {576,546}},
+{ 314500, 2, {629,500}},
+{ 314545, 2, {665,473}},
+{ 314580, 2, {588,535}},
+{ 314592, 2, {678,464}},
+{ 314600, 2, {572,550}},
+{ 314628, 2, {628,501}},
+{ 314640, 2, {570,552}},
+{ 314650, 2, {725,434}},
+{ 314678, 2, {637,494}},
+{ 314685, 2, {567,555}},
+{ 314736, 2, {632,498}},
+{ 314755, 2, {595,529}},
+{ 314760, 2, {610,516}},
+{ 314776, 2, {584,539}},
+{ 314820, 2, {583,540}},
+{ 314853, 2, {609,517}},
+{ 314874, 2, {686,459}},
+{ 314880, 2, {615,512}},
+{ 314916, 2, {644,489}},
+{ 314940, 2, {580,543}},
+{ 314976, 2, {579,544}},
+{ 315000, 2, {600,525}},
+{ 315018, 2, {666,473}},
+{ 315056, 2, {679,464}},
+{ 315084, 2, {651,484}},
+{ 315120, 2, {606,520}},
+{ 315146, 2, {598,527}},
+{ 315172, 2, {572,551}},
+{ 315180, 2, {612,515}},
+{ 315210, 2, {570,553}},
+{ 315216, 2, {597,528}},
+{ 315240, 2, {568,555}},
+{ 315252, 2, {567,556}},
+{ 315270, 2, {565,558}},
+{ 315315, 2, {585,539}},
+{ 315392, 2, {616,512}},
+{ 315400, 2, {664,475}},
+{ 315425, 2, {775,407}},
+{ 315456, 2, {636,496}},
+{ 315468, 2, {621,508}},
+{ 315495, 2, {615,513}},
+{ 315520, 2, {580,544}},
+{ 315536, 2, {592,533}},
+{ 315549, 2, {783,403}},
+{ 315552, 2, {608,519}},
+{ 315588, 2, {578,546}},
+{ 315675, 2, {575,549}},
+{ 315700, 2, {574,550}},
+{ 315756, 2, {588,537}},
+{ 315768, 2, {669,472}},
+{ 315810, 2, {605,522}},
+{ 315840, 2, {564,560}},
+{ 315900, 2, {585,540}},
+{ 315945, 2, {595,531}},
+{ 315952, 2, {637,496}},
+{ 315972, 2, {603,524}},
+{ 315984, 2, {681,464}},
+{ 316008, 2, {594,532}},
+{ 316020, 2, {687,460}},
+{ 316030, 2, {715,442}},
+{ 316050, 2, {602,525}},
+{ 316064, 2, {581,544}},
+{ 316092, 2, {636,497}},
+{ 316128, 2, {592,534}},
+{ 316200, 2, {600,527}},
+{ 316224, 2, {576,549}},
+{ 316230, 2, {635,498}},
+{ 316296, 2, {573,552}},
+{ 316368, 2, {624,507}},
+{ 316395, 2, {711,445}},
+{ 316400, 2, {565,560}},
+{ 316404, 2, {564,561}},
+{ 316416, 2, {618,512}},
+{ 316470, 2, {685,462}},
+{ 316476, 2, {596,531}},
+{ 316498, 2, {611,518}},
+{ 316500, 2, {633,500}},
+{ 316602, 2, {594,533}},
+{ 316608, 2, {582,544}},
+{ 316632, 2, {632,501}},
+{ 316720, 2, {592,535}},
+{ 316736, 2, {707,448}},
+{ 316776, 2, {591,536}},
+{ 316800, 2, {576,550}},
+{ 316820, 2, {620,511}},
+{ 316825, 2, {575,551}},
+{ 316827, 2, {749,423}},
+{ 316848, 2, {574,552}},
+{ 316872, 2, {648,489}},
+{ 316875, 2, {625,507}},
+{ 316932, 2, {588,539}},
+{ 316944, 2, {568,558}},
+{ 316953, 2, {567,559}},
+{ 317016, 2, {612,518}},
+{ 317100, 2, {604,525}},
+{ 317112, 2, {584,543}},
+{ 317115, 2, {729,435}},
+{ 317135, 2, {595,533}},
+{ 317152, 2, {583,544}},
+{ 317190, 2, {582,545}},
+{ 317205, 2, {665,477}},
+{ 317240, 2, {616,515}},
+{ 317250, 2, {675,470}},
+{ 317275, 2, {925,343}},
+{ 317292, 2, {579,548}},
+{ 317331, 2, {621,511}},
+{ 317340, 2, {615,516}},
+{ 317376, 2, {576,551}},
+{ 317400, 2, {575,552}},
+{ 317440, 2, {620,512}},
+{ 317460, 2, {572,555}},
+{ 317471, 2, {589,539}},
+{ 317475, 2, {747,425}},
+{ 317492, 2, {644,493}},
+{ 317520, 2, {567,560}},
+{ 317550, 2, {725,438}},
+{ 317604, 2, {597,532}},
+{ 317625, 2, {605,525}},
+{ 317628, 2, {612,519}},
+{ 317680, 2, {722,440}},
+{ 317688, 2, {651,488}},
+{ 317720, 2, {611,520}},
+{ 317730, 2, {595,534}},
+{ 317790, 2, {594,535}},
+{ 317856, 2, {602,528}},
+{ 317900, 2, {578,550}},
+{ 317904, 2, {592,537}},
+{ 317952, 2, {576,552}},
+{ 317955, 2, {615,517}},
+{ 317961, 2, {721,441}},
+{ 317975, 2, {575,553}},
+{ 317988, 2, {657,484}},
+{ 318000, 2, {600,530}},
+{ 318010, 2, {590,539}},
+{ 318087, 2, {567,561}},
+{ 318136, 2, {598,532}},
+{ 318160, 2, {656,485}},
+{ 318240, 2, {585,544}},
+{ 318274, 2, {629,506}},
+{ 318280, 2, {584,545}},
+{ 318304, 2, {686,464}},
+{ 318318, 2, {583,546}},
+{ 318330, 2, {655,486}},
+{ 318384, 2, {594,536}},
+{ 318396, 2, {628,507}},
+{ 318402, 2, {722,441}},
+{ 318420, 2, {580,549}},
+{ 318432, 2, {642,496}},
+{ 318444, 2, {669,476}},
+{ 318472, 2, {616,517}},
+{ 318478, 2, {578,551}},
+{ 318500, 2, {637,500}},
+{ 318516, 2, {627,508}},
+{ 318528, 2, {576,553}},
+{ 318570, 2, {574,555}},
+{ 318588, 2, {573,556}},
+{ 318600, 2, {590,540}},
+{ 318630, 2, {570,559}},
+{ 318636, 2, {636,501}},
+{ 318645, 2, {657,485}},
+{ 318648, 2, {568,561}},
+{ 318660, 2, {565,564}},
+{ 318681, 2, {783,407}},
+{ 318708, 2, {681,468}},
+{ 318720, 2, {640,498}},
+{ 318725, 2, {671,475}},
+{ 318750, 2, {625,510}},
+{ 318768, 2, {687,464}},
+{ 318780, 2, {630,506}},
+{ 318801, 2, {799,399}},
+{ 318825, 2, {585,545}},
+{ 318835, 2, {605,527}},
+{ 318864, 2, {584,546}},
+{ 318903, 2, {629,507}},
+{ 318920, 2, {595,536}},
+{ 318942, 2, {611,522}},
+{ 318969, 2, {581,549}},
+{ 318976, 2, {623,512}},
+{ 319005, 2, {695,459}},
+{ 319032, 2, {633,504}},
+{ 319088, 2, {592,539}},
+{ 319116, 2, {609,524}},
+{ 319140, 2, {591,540}},
+{ 319152, 2, {654,488}},
+{ 319160, 2, {632,505}},
+{ 319200, 2, {570,560}},
+{ 319284, 2, {588,543}},
+{ 319308, 2, {649,492}},
+{ 319319, 2, {847,377}},
+{ 319375, 2, {625,511}},
+{ 319396, 2, {671,476}},
+{ 319440, 2, {605,528}},
+{ 319488, 2, {624,512}},
+{ 319500, 2, {639,500}},
+{ 319550, 2, {581,550}},
+{ 319599, 2, {623,513}},
+{ 319608, 2, {579,552}},
+{ 319680, 2, {576,555}},
+{ 319696, 2, {689,464}},
+{ 319704, 2, {616,519}},
+{ 319725, 2, {609,525}},
+{ 319748, 2, {572,559}},
+{ 319788, 2, {567,564}},
+{ 319800, 2, {600,533}},
+{ 319815, 2, {621,515}},
+{ 319865, 2, {665,481}},
+{ 319872, 2, {588,544}},
+{ 319923, 2, {697,459}},
+{ 319968, 2, {606,528}},
+{ 319992, 2, {597,536}},
+{ 320000, 2, {625,512}},
+{ 320016, 2, {678,472}},
+{ 320045, 2, {605,529}},
+{ 320052, 2, {596,537}},
+{ 320075, 2, {775,413}},
+{ 320112, 2, {624,513}},
+{ 320160, 2, {580,552}},
+{ 320166, 2, {594,539}},
+{ 320292, 2, {574,558}},
+{ 320320, 2, {572,560}},
+{ 320355, 2, {567,565}},
+{ 320385, 2, {689,465}},
+{ 320400, 2, {600,534}},
+{ 320416, 2, {589,544}},
+{ 320424, 2, {632,507}},
+{ 320436, 2, {621,516}},
+{ 320450, 2, {650,493}},
+{ 320460, 2, {588,545}},
+{ 320488, 2, {679,472}},
+{ 320540, 2, {620,517}},
+{ 320565, 2, {645,497}},
+{ 320568, 2, {703,456}},
+{ 320580, 2, {585,548}},
+{ 320595, 2, {737,435}},
+{ 320616, 2, {584,549}},
+{ 320620, 2, {697,460}},
+{ 320625, 2, {625,513}},
+{ 320640, 2, {640,501}},
+{ 320650, 2, {583,550}},
+{ 320712, 2, {581,552}},
+{ 320724, 2, {604,531}},
+{ 320740, 2, {580,553}},
+{ 320775, 2, {611,525}},
+{ 320796, 2, {603,532}},
+{ 320850, 2, {575,558}},
+{ 320866, 2, {574,559}},
+{ 320880, 2, {573,560}},
+{ 320892, 2, {572,561}},
+{ 320920, 2, {568,565}},
+{ 320943, 2, {609,527}},
+{ 320960, 2, {590,544}},
+{ 321000, 2, {600,535}},
+{ 321030, 2, {615,522}},
+{ 321057, 2, {621,517}},
+{ 321090, 2, {695,462}},
+{ 321100, 2, {650,494}},
+{ 321120, 2, {669,480}},
+{ 321160, 2, {620,518}},
+{ 321255, 2, {605,531}},
+{ 321264, 2, {582,552}},
+{ 321300, 2, {595,540}},
+{ 321360, 2, {618,520}},
+{ 321408, 2, {576,558}},
+{ 321425, 2, {575,559}},
+{ 321432, 2, {681,472}},
+{ 321440, 2, {574,560}},
+{ 321456, 2, {592,543}},
+{ 321504, 2, {591,544}},
+{ 321516, 2, {687,468}},
+{ 321552, 2, {609,528}},
+{ 321564, 2, {633,508}},
+{ 321594, 2, {589,546}},
+{ 321632, 2, {608,529}},
+{ 321640, 2, {680,473}},
+{ 321678, 2, {621,518}},
+{ 321780, 2, {620,519}},
+{ 321816, 2, {583,552}},
+{ 321900, 2, {580,555}},
+{ 321904, 2, {649,496}},
+{ 321924, 2, {579,556}},
+{ 321930, 2, {630,511}},
+{ 321984, 2, {576,559}},
+{ 322000, 2, {575,560}},
+{ 322040, 2, {664,485}},
+{ 322050, 2, {570,565}},
+{ 322056, 2, {568,567}},
+{ 322080, 2, {610,528}},
+{ 322164, 2, {628,513}},
+{ 322200, 2, {600,537}},
+{ 322218, 2, {663,486}},
+{ 322240, 2, {608,530}},
+{ 322245, 2, {651,495}},
+{ 322260, 2, {615,524}},
+{ 322320, 2, {632,510}},
+{ 322322, 2, {598,539}},
+{ 322335, 2, {585,551}},
+{ 322371, 2, {731,441}},
+{ 322380, 2, {597,540}},
+{ 322452, 2, {636,507}},
+{ 322455, 2, {581,555}},
+{ 322465, 2, {605,533}},
+{ 322500, 2, {625,516}},
+{ 322560, 2, {576,560}},
+{ 322605, 2, {603,535}},
+{ 322640, 2, {592,545}},
+{ 322644, 2, {644,501}},
+{ 322677, 2, {629,513}},
+{ 322695, 2, {639,505}},
+{ 322704, 2, {648,498}},
+{ 322740, 2, {652,495}},
+{ 322749, 2, {763,423}},
+{ 322812, 2, {588,549}},
+{ 322848, 2, {608,531}},
+{ 322896, 2, {651,496}},
+{ 322920, 2, {585,552}},
+{ 322952, 2, {584,553}},
+{ 323000, 2, {646,500}},
+{ 323008, 2, {721,448}},
+{ 323050, 2, {650,497}},
+{ 323070, 2, {605,534}},
+{ 323125, 2, {625,517}},
+{ 323136, 2, {576,561}},
+{ 323172, 2, {573,564}},
+{ 323190, 2, {570,567}},
+{ 323200, 2, {640,505}},
+{ 323208, 2, {603,536}},
+{ 323232, 2, {592,546}},
+{ 323244, 2, {657,492}},
+{ 323323, 2, {1001,323}},
+{ 323360, 2, {688,470}},
+{ 323380, 2, {703,460}},
+{ 323400, 2, {588,550}},
+{ 323449, 2, {943,343}},
+{ 323505, 2, {585,553}},
+{ 323532, 2, {627,516}},
+{ 323544, 2, {663,488}},
+{ 323565, 2, {583,555}},
+{ 323568, 2, {642,504}},
+{ 323595, 2, {705,459}},
+{ 323628, 2, {596,543}},
+{ 323680, 2, {578,560}},
+{ 323730, 2, {594,545}},
+{ 323748, 2, {612,529}},
+{ 323750, 2, {625,518}},
+{ 323760, 2, {570,568}},
+{ 323785, 2, {841,385}},
+{ 323796, 2, {669,484}},
+{ 323817, 2, {741,437}},
+{ 323840, 2, {640,506}},
+{ 323850, 2, {635,510}},
+{ 323856, 2, {624,519}},
+{ 323868, 2, {591,548}},
+{ 323883, 2, {679,477}},
+{ 323950, 2, {589,550}},
+{ 323960, 2, {623,520}},
+{ 323988, 2, {588,551}},
+{ 324064, 2, {608,533}},
+{ 324093, 2, {671,483}},
+{ 324096, 2, {633,512}},
+{ 324120, 2, {584,555}},
+{ 324156, 2, {681,476}},
+{ 324198, 2, {581,558}},
+{ 324210, 2, {606,535}},
+{ 324216, 2, {632,513}},
+{ 324220, 2, {580,559}},
+{ 324225, 2, {655,495}},
+{ 324240, 2, {579,560}},
+{ 324264, 2, {687,472}},
+{ 324280, 2, {605,536}},
+{ 324300, 2, {575,564}},
+{ 324324, 2, {572,567}},
+{ 324348, 2, {604,537}},
+{ 324360, 2, {612,530}},
+{ 324384, 2, {654,496}},
+{ 324405, 2, {729,445}},
+{ 324415, 2, {713,455}},
+{ 324513, 2, {707,459}},
+{ 324597, 2, {609,533}},
+{ 324612, 2, {639,508}},
+{ 324625, 2, {875,371}},
+{ 324632, 2, {616,527}},
+{ 324648, 2, {648,501}},
+{ 324672, 2, {608,534}},
+{ 324690, 2, {685,474}},
+{ 324720, 2, {615,528}},
+{ 324768, 2, {597,544}},
+{ 324816, 2, {606,536}},
+{ 324864, 2, {576,564}},
+{ 324870, 2, {595,546}},
+{ 324972, 2, {612,531}},
+{ 324996, 2, {636,511}},
+{ 325000, 2, {625,520}},
+{ 325008, 2, {592,549}},
+{ 325017, 2, {603,539}},
+{ 325052, 2, {611,532}},
+{ 325080, 2, {602,540}},
+{ 325120, 2, {635,512}},
+{ 325128, 2, {589,552}},
+{ 325164, 2, {588,553}},
+{ 325260, 2, {585,556}},
+{ 325280, 2, {608,535}},
+{ 325312, 2, {598,544}},
+{ 325314, 2, {583,558}},
+{ 325360, 2, {581,560}},
+{ 325380, 2, {580,561}},
+{ 325404, 2, {621,524}},
+{ 325440, 2, {576,565}},
+{ 325458, 2, {574,567}},
+{ 325464, 2, {573,568}},
+{ 325480, 2, {632,515}},
+{ 325500, 2, {620,525}},
+{ 325584, 2, {612,532}},
+{ 325600, 2, {592,550}},
+{ 325620, 2, {603,540}},
+{ 325632, 2, {636,512}},
+{ 325680, 2, {590,552}},
+{ 325703, 2, {833,391}},
+{ 325710, 2, {630,517}},
+{ 325728, 2, {624,522}},
+{ 325755, 2, {635,513}},
+{ 325800, 2, {600,543}},
+{ 325864, 2, {616,529}},
+{ 325872, 2, {584,558}},
+{ 325920, 2, {582,560}},
+{ 325932, 2, {628,519}},
+{ 325975, 2, {767,425}},
+{ 325983, 2, {817,399}},
+{ 326025, 2, {575,567}},
+{ 326144, 2, {637,512}},
+{ 326190, 2, {655,498}},
+{ 326196, 2, {612,533}},
+{ 326232, 2, {591,552}},
+{ 326250, 2, {625,522}},
+{ 326268, 2, {636,513}},
+{ 326270, 2, {590,553}},
+{ 326304, 2, {618,528}},
+{ 326337, 2, {899,363}},
+{ 326340, 2, {588,555}},
+{ 326368, 2, {658,496}},
+{ 326400, 2, {600,544}},
+{ 326424, 2, {609,536}},
+{ 326472, 2, {669,488}},
+{ 326480, 2, {583,560}},
+{ 326496, 2, {608,537}},
+{ 326508, 2, {598,546}},
+{ 326529, 2, {639,511}},
+{ 326556, 2, {579,564}},
+{ 326592, 2, {576,567}},
+{ 326600, 2, {575,568}},
+{ 326625, 2, {871,375}},
+{ 326628, 2, {633,516}},
+{ 326652, 2, {652,501}},
+{ 326655, 2, {595,549}},
+{ 326656, 2, {638,512}},
+{ 326688, 2, {656,498}},
+{ 326700, 2, {594,550}},
+{ 326745, 2, {685,477}},
+{ 326781, 2, {637,513}},
+{ 326800, 2, {688,475}},
+{ 326830, 2, {667,490}},
+{ 326859, 2, {663,493}},
+{ 326880, 2, {681,480}},
+{ 326975, 2, {725,451}},
+{ 327000, 2, {600,545}},
+{ 327012, 2, {687,476}},
+{ 327015, 2, {585,559}},
+{ 327075, 2, {623,525}},
+{ 327080, 2, {629,520}},
+{ 327096, 2, {616,531}},
+{ 327132, 2, {699,468}},
+{ 327156, 2, {597,548}},
+{ 327180, 2, {574,570}},
+{ 327204, 2, {596,549}},
+{ 327228, 2, {737,444}},
+{ 327250, 2, {595,550}},
+{ 327267, 2, {621,527}},
+{ 327275, 2, {689,475}},
+{ 327294, 2, {594,551}},
+{ 327360, 2, {620,528}},
+{ 327375, 2, {675,485}},
+{ 327376, 2, {592,553}},
+{ 327420, 2, {612,535}},
+{ 327488, 2, {602,544}},
+{ 327522, 2, {646,507}},
+{ 327600, 2, {585,560}},
+{ 327624, 2, {584,561}},
+{ 327635, 2, {805,407}},
+{ 327660, 2, {635,516}},
+{ 327684, 2, {581,564}},
+{ 327712, 2, {608,539}},
+{ 327726, 2, {578,567}},
+{ 327750, 2, {575,570}},
+{ 327756, 2, {573,572}},
+{ 327789, 2, {693,473}},
+{ 327845, 2, {595,551}},
+{ 327888, 2, {594,552}},
+{ 327964, 2, {689,476}},
+{ 327972, 2, {604,543}},
+{ 328008, 2, {632,519}},
+{ 328020, 2, {660,497}},
+{ 328032, 2, {603,544}},
+{ 328042, 2, {682,481}},
+{ 328048, 2, {707,464}},
+{ 328050, 2, {675,486}},
+{ 328185, 2, {585,561}},
+{ 328320, 2, {576,570}},
+{ 328335, 2, {795,413}},
+{ 328338, 2, {629,522}},
+{ 328440, 2, {595,552}},
+{ 328482, 2, {594,553}},
+{ 328500, 2, {657,500}},
+{ 328536, 2, {648,507}},
+{ 328548, 2, {627,524}},
+{ 328560, 2, {592,555}},
+{ 328596, 2, {591,556}},
+{ 328635, 2, {603,545}},
+{ 328644, 2, {612,537}},
+{ 328656, 2, {656,501}},
+{ 328692, 2, {588,559}},
+{ 328704, 2, {642,512}},
+{ 328757, 2, {1331,247}},
+{ 328779, 2, {729,451}},
+{ 328790, 2, {610,539}},
+{ 328812, 2, {583,564}},
+{ 328830, 2, {582,565}},
+{ 328848, 2, {624,527}},
+{ 328860, 2, {580,567}},
+{ 328872, 2, {579,568}},
+{ 328944, 2, {616,534}},
+{ 329000, 2, {658,500}},
+{ 329085, 2, {639,515}},
+{ 329120, 2, {605,544}},
+{ 329130, 2, {621,530}},
+{ 329148, 2, {669,492}},
+{ 329160, 2, {633,520}},
+{ 329175, 2, {627,525}},
+{ 329220, 2, {590,558}},
+{ 329280, 2, {588,560}},
+{ 329329, 2, {611,539}},
+{ 329375, 2, {625,527}},
+{ 329400, 2, {600,549}},
+{ 329427, 2, {581,567}},
+{ 329430, 2, {695,474}},
+{ 329472, 2, {576,572}},
+{ 329498, 2, {598,551}},
+{ 329544, 2, {597,552}},
+{ 329560, 2, {616,535}},
+{ 329595, 2, {645,511}},
+{ 329600, 2, {640,515}},
+{ 329604, 2, {681,484}},
+{ 329616, 2, {654,504}},
+{ 329623, 2, {961,343}},
+{ 329640, 2, {615,536}},
+{ 329664, 2, {606,544}},
+{ 329670, 2, {594,555}},
+{ 329700, 2, {628,525}},
+{ 329724, 2, {639,516}},
+{ 329728, 2, {644,512}},
+{ 329760, 2, {687,480}},
+{ 329800, 2, {680,485}},
+{ 329840, 2, {589,560}},
+{ 329868, 2, {588,561}},
+{ 329904, 2, {632,522}},
+{ 329928, 2, {699,472}},
+{ 329940, 2, {585,564}},
+{ 329960, 2, {584,565}},
+{ 330000, 2, {600,550}},
+{ 330008, 2, {581,568}},
+{ 330048, 2, {576,573}},
+{ 330050, 2, {575,574}},
+{ 330084, 2, {636,519}},
+{ 330132, 2, {671,492}},
+{ 330144, 2, {608,543}},
+{ 330165, 2, {667,495}},
+{ 330190, 2, {623,530}},
+{ 330200, 2, {635,520}},
+{ 330240, 2, {640,516}},
+{ 330270, 2, {606,545}},
+{ 330309, 2, {749,441}},
+{ 330330, 2, {605,546}},
+{ 330336, 2, {592,558}},
+{ 330372, 2, {621,532}},
+{ 330395, 2, {845,391}},
+{ 330400, 2, {590,560}},
+{ 330429, 2, {589,561}},
+{ 330444, 2, {603,548}},
+{ 330460, 2, {620,533}},
+{ 330525, 2, {585,565}},
+{ 330561, 2, {583,567}},
+{ 330564, 2, {652,507}},
+{ 330576, 2, {582,568}},
+{ 330616, 2, {578,572}},
+{ 330624, 2, {576,574}},
+{ 330630, 2, {618,535}},
+{ 330645, 2, {705,469}},
+{ 330660, 2, {660,501}},
+{ 330708, 2, {651,508}},
+{ 330720, 2, {624,530}},
+{ 330780, 2, {596,555}},
+{ 330792, 2, {616,537}},
+{ 330813, 2, {623,531}},
+{ 330864, 2, {678,488}},
+{ 330880, 2, {640,517}},
+{ 330885, 2, {645,513}},
+{ 330925, 2, {775,427}},
+{ 330928, 2, {592,559}},
+{ 330939, 2, {721,459}},
+{ 330960, 2, {591,560}},
+{ 330993, 2, {621,533}},
+{ 331056, 2, {627,528}},
+{ 331075, 2, {697,475}},
+{ 331100, 2, {602,550}},
+{ 331128, 2, {584,567}},
+{ 331170, 2, {581,570}},
+{ 331177, 2, {847,391}},
+{ 331188, 2, {579,572}},
+{ 331200, 2, {576,575}},
+{ 331240, 2, {637,520}},
+{ 331248, 2, {618,536}},
+{ 331280, 2, {656,505}},
+{ 331296, 2, {609,544}},
+{ 331344, 2, {624,531}},
+{ 331352, 2, {679,488}},
+{ 331360, 2, {608,545}},
+{ 331470, 2, {635,522}},
+{ 331485, 2, {615,539}},
+{ 331515, 2, {695,477}},
+{ 331596, 2, {604,549}},
+{ 331683, 2, {627,529}},
+{ 331692, 2, {633,524}},
+{ 331695, 2, {585,567}},
+{ 331785, 2, {657,505}},
+{ 331800, 2, {600,553}},
+{ 331824, 2, {669,496}},
+{ 331840, 2, {610,544}},
+{ 331875, 2, {625,531}},
+{ 331925, 2, {781,425}},
+{ 331932, 2, {597,556}},
+{ 331968, 2, {608,546}},
+{ 332010, 2, {595,558}},
+{ 332046, 2, {594,559}},
+{ 332052, 2, {708,469}},
+{ 332100, 2, {615,540}},
+{ 332112, 2, {592,561}},
+{ 332145, 2, {605,549}},
+{ 332150, 2, {650,511}},
+{ 332160, 2, {640,519}},
+{ 332220, 2, {588,565}},
+{ 332235, 2, {621,535}},
+{ 332280, 2, {585,568}},
+{ 332288, 2, {649,512}},
+{ 332304, 2, {602,552}},
+{ 332310, 2, {583,570}},
+{ 332316, 2, {612,543}},
+{ 332328, 2, {681,488}},
+{ 332340, 2, {580,573}},
+{ 332384, 2, {611,544}},
+{ 332415, 2, {747,445}},
+{ 332416, 2, {742,448}},
+{ 332424, 2, {648,513}},
+{ 332500, 2, {625,532}},
+{ 332508, 2, {687,484}},
+{ 332592, 2, {624,533}},
+{ 332605, 2, {595,559}},
+{ 332640, 2, {594,560}},
+{ 332664, 2, {664,501}},
+{ 332710, 2, {679,490}},
+{ 332724, 2, {699,476}},
+{ 332760, 2, {590,564}},
+{ 332775, 2, {675,493}},
+{ 332787, 2, {689,483}},
+{ 332800, 2, {640,520}},
+{ 332816, 2, {671,496}},
+{ 332820, 2, {645,516}},
+{ 332856, 2, {603,552}},
+{ 332878, 2, {767,434}},
+{ 332880, 2, {584,570}},
+{ 332910, 2, {685,486}},
+{ 332920, 2, {580,574}},
+{ 332928, 2, {578,576}},
+{ 332940, 2, {620,537}},
+{ 332948, 2, {644,517}},
+{ 332990, 2, {670,497}},
+{ 333000, 2, {600,555}},
+{ 333125, 2, {625,533}},
+{ 333200, 2, {595,560}},
+{ 333216, 2, {624,534}},
+{ 333234, 2, {594,561}},
+{ 333268, 2, {676,493}},
+{ 333270, 2, {630,529}},
+{ 333312, 2, {651,512}},
+{ 333324, 2, {591,564}},
+{ 333333, 2, {693,481}},
+{ 333355, 2, {605,551}},
+{ 333396, 2, {588,567}},
+{ 333459, 2, {603,553}},
+{ 333465, 2, {645,517}},
+{ 333468, 2, {628,531}},
+{ 333504, 2, {579,576}},
+{ 333540, 2, {612,545}},
+{ 333564, 2, {627,532}},
+{ 333606, 2, {611,546}},
+{ 333645, 2, {767,435}},
+{ 333680, 2, {688,485}},
+{ 333704, 2, {707,472}},
+{ 333732, 2, {609,548}},
+{ 333740, 2, {740,451}},
+{ 333750, 2, {625,534}},
+{ 333756, 2, {657,508}},
+{ 333792, 2, {608,549}},
+{ 333840, 2, {624,535}},
+{ 333888, 2, {592,564}},
+{ 333900, 2, {630,530}},
+{ 333925, 2, {703,475}},
+{ 333928, 2, {623,536}},
+{ 333960, 2, {605,552}},
+{ 333963, 2, {589,567}},
+{ 334050, 2, {655,510}},
+{ 334075, 2, {581,575}},
+{ 334080, 2, {580,576}},
+{ 334110, 2, {602,555}},
+{ 334180, 2, {620,539}},
+{ 334191, 2, {627,533}},
+{ 334224, 2, {633,528}},
+{ 334236, 2, {644,519}},
+{ 334305, 2, {765,437}},
+{ 334320, 2, {597,560}},
+{ 334356, 2, {596,561}},
+{ 334400, 2, {608,550}},
+{ 334425, 2, {637,525}},
+{ 334476, 2, {652,513}},
+{ 334480, 2, {592,565}},
+{ 334488, 2, {616,543}},
+{ 334500, 2, {669,500}},
+{ 334512, 2, {606,552}},
+{ 334530, 2, {590,567}},
+{ 334544, 2, {721,464}},
+{ 334560, 2, {615,544}},
+{ 334593, 2, {791,423}},
+{ 334620, 2, {585,572}},
+{ 334628, 2, {629,532}},
+{ 334632, 2, {584,573}},
+{ 334642, 2, {583,574}},
+{ 334650, 2, {582,575}},
+{ 334656, 2, {581,576}},
+{ 334719, 2, {621,539}},
+{ 334776, 2, {696,481}},
+{ 334800, 2, {600,558}},
+{ 334836, 2, {639,524}},
+{ 334848, 2, {654,512}},
+{ 334854, 2, {689,486}},
+{ 334880, 2, {598,560}},
+{ 334884, 2, {649,516}},
+{ 334950, 2, {609,550}},
+{ 335000, 2, {625,536}},
+{ 335008, 2, {608,551}},
+{ 335052, 2, {681,492}},
+{ 335088, 2, {624,537}},
+{ 335220, 2, {604,555}},
+{ 335225, 2, {583,575}},
+{ 335232, 2, {582,576}},
+{ 335250, 2, {745,450}},
+{ 335256, 2, {687,488}},
+{ 335268, 2, {603,556}},
+{ 335280, 2, {635,528}},
+{ 335320, 2, {664,505}},
+{ 335340, 2, {621,540}},
+{ 335400, 2, {600,559}},
+{ 335412, 2, {693,484}},
+{ 335478, 2, {598,561}},
+{ 335520, 2, {699,480}},
+{ 335529, 2, {731,459}},
+{ 335552, 2, {749,448}},
+{ 335580, 2, {595,564}},
+{ 335592, 2, {632,531}},
+{ 335610, 2, {594,565}},
+{ 335616, 2, {608,552}},
+{ 335664, 2, {592,567}},
+{ 335688, 2, {591,568}},
+{ 335699, 2, {637,527}},
+{ 335720, 2, {616,545}},
+{ 335730, 2, {589,570}},
+{ 335790, 2, {585,574}},
+{ 335800, 2, {584,575}},
+{ 335808, 2, {583,576}},
+{ 335820, 2, {580,579}},
+{ 335916, 2, {602,558}},
+{ 335920, 2, {646,520}},
+{ 335988, 2, {612,549}},
+{ 336015, 2, {655,513}},
+{ 336050, 2, {611,550}},
+{ 336072, 2, {627,536}},
+{ 336105, 2, {679,495}},
+{ 336168, 2, {609,552}},
+{ 336182, 2, {649,518}},
+{ 336192, 2, {618,544}},
+{ 336224, 2, {608,553}},
+{ 336226, 2, {638,527}},
+{ 336260, 2, {731,460}},
+{ 336288, 2, {678,496}},
+{ 336312, 2, {648,519}},
+{ 336336, 2, {588,572}},
+{ 336375, 2, {585,575}},
+{ 336420, 2, {623,540}},
+{ 336483, 2, {763,441}},
+{ 336490, 2, {665,506}},
+{ 336528, 2, {656,513}},
+{ 336567, 2, {651,517}},
+{ 336600, 2, {600,561}},
+{ 336648, 2, {664,507}},
+{ 336651, 2, {697,483}},
+{ 336660, 2, {620,543}},
+{ 336690, 2, {645,522}},
+{ 336700, 2, {650,518}},
+{ 336708, 2, {597,564}},
+{ 336720, 2, {610,552}},
+{ 336756, 2, {633,532}},
+{ 336784, 2, {679,496}},
+{ 336804, 2, {663,508}},
+{ 336810, 2, {618,545}},
+{ 336864, 2, {638,528}},
+{ 336875, 2, {625,539}},
+{ 336896, 2, {658,512}},
+{ 336908, 2, {589,572}},
+{ 336924, 2, {588,573}},
+{ 336960, 2, {585,576}},
+{ 336973, 2, {637,529}},
+{ 336980, 2, {581,580}},
+{ 337020, 2, {615,548}},
+{ 337025, 2, {793,425}},
+{ 337050, 2, {630,535}},
+{ 337120, 2, {602,560}},
+{ 337176, 2, {669,504}},
+{ 337185, 2, {635,531}},
+{ 337212, 2, {612,551}},
+{ 337225, 2, {1025,329}},
+{ 337236, 2, {628,537}},
+{ 337239, 2, {707,477}},
+{ 337260, 2, {660,511}},
+{ 337280, 2, {620,544}},
+{ 337330, 2, {610,553}},
+{ 337348, 2, {697,484}},
+{ 337365, 2, {595,567}},
+{ 337392, 2, {594,568}},
+{ 337440, 2, {592,570}},
+{ 337488, 2, {632,534}},
+{ 337500, 2, {625,540}},
+{ 337535, 2, {935,361}},
+{ 337554, 2, {658,513}},
+{ 337590, 2, {605,558}},
+{ 337610, 2, {637,530}},
+{ 337680, 2, {603,560}},
+{ 337716, 2, {636,531}},
+{ 337725, 2, {711,475}},
+{ 337770, 2, {695,486}},
+{ 337776, 2, {681,496}},
+{ 337840, 2, {656,515}},
+{ 337920, 2, {640,528}},
+{ 337932, 2, {596,567}},
+{ 337953, 2, {627,539}},
+{ 337960, 2, {595,568}},
+{ 337980, 2, {645,524}},
+{ 338004, 2, {687,492}},
+{ 338052, 2, {591,572}},
+{ 338100, 2, {588,575}},
+{ 338120, 2, {632,535}},
+{ 338130, 2, {585,578}},
+{ 338136, 2, {584,579}},
+{ 338140, 2, {583,580}},
+{ 338169, 2, {667,507}},
+{ 338184, 2, {616,549}},
+{ 338195, 2, {605,559}},
+{ 338198, 2, {686,493}},
+{ 338200, 2, {712,475}},
+{ 338247, 2, {637,531}},
+{ 338256, 2, {648,522}},
+{ 338316, 2, {699,484}},
+{ 338355, 2, {657,515}},
+{ 338388, 2, {652,519}},
+{ 338436, 2, {612,553}},
+{ 338445, 2, {621,545}},
+{ 338496, 2, {656,516}},
+{ 338560, 2, {640,529}},
+{ 338580, 2, {594,570}},
+{ 338604, 2, {609,556}},
+{ 338640, 2, {664,510}},
+{ 338675, 2, {589,575}},
+{ 338676, 2, {668,507}},
+{ 338688, 2, {588,576}},
+{ 338742, 2, {697,486}},
+{ 338800, 2, {605,560}},
+{ 338832, 2, {624,543}},
+{ 338844, 2, {604,561}},
+{ 338910, 2, {715,474}},
+{ 338912, 2, {623,544}},
+{ 338976, 2, {642,528}},
+{ 338985, 2, {729,465}},
+{ 339000, 2, {600,565}},
+{ 339012, 2, {657,516}},
+{ 339031, 2, {629,539}},
+{ 339066, 2, {598,567}},
+{ 339075, 2, {685,495}},
+{ 339090, 2, {635,534}},
+{ 339096, 2, {597,568}},
+{ 339105, 2, {611,555}},
+{ 339150, 2, {595,570}},
+{ 339152, 2, {656,517}},
+{ 339200, 2, {640,530}},
+{ 339216, 2, {592,573}},
+{ 339227, 2, {989,343}},
+{ 339264, 2, {589,576}},
+{ 339288, 2, {633,536}},
+{ 339300, 2, {585,580}},
+{ 339304, 2, {584,581}},
+{ 339360, 2, {606,560}},
+{ 339384, 2, {632,537}},
+{ 339388, 2, {644,527}},
+{ 339416, 2, {616,551}},
+{ 339465, 2, {795,427}},
+{ 339480, 2, {615,552}},
+{ 339500, 2, {679,500}},
+{ 339521, 2, {637,533}},
+{ 339549, 2, {703,483}},
+{ 339570, 2, {630,539}},
+{ 339575, 2, {799,425}},
+{ 339660, 2, {612,555}},
+{ 339735, 2, {781,435}},
+{ 339768, 2, {594,572}},
+{ 339808, 2, {592,574}},
+{ 339840, 2, {590,576}},
+{ 339852, 2, {669,508}},
+{ 339864, 2, {588,578}},
+{ 339872, 2, {608,559}},
+{ 339885, 2, {585,581}},
+{ 339888, 2, {584,582}},
+{ 339948, 2, {639,532}},
+{ 340000, 2, {625,544}},
+{ 340025, 2, {725,469}},
+{ 340054, 2, {638,533}},
+{ 340080, 2, {624,545}},
+{ 340092, 2, {603,564}},
+{ 340095, 2, {615,553}},
+{ 340170, 2, {667,510}},
+{ 340200, 2, {600,567}},
+{ 340252, 2, {703,484}},
+{ 340256, 2, {686,496}},
+{ 340260, 2, {636,535}},
+{ 340308, 2, {621,548}},
+{ 340312, 2, {721,472}},
+{ 340360, 2, {635,536}},
+{ 340380, 2, {610,558}},
+{ 340400, 2, {592,575}},
+{ 340416, 2, {591,576}},
+{ 340425, 2, {765,445}},
+{ 340431, 2, {609,559}},
+{ 340442, 2, {589,578}},
+{ 340452, 2, {588,579}},
+{ 340464, 2, {656,519}},
+{ 340500, 2, {681,500}},
+{ 340560, 2, {645,528}},
+{ 340632, 2, {664,513}},
+{ 340648, 2, {616,553}},
+{ 340659, 2, {837,407}},
+{ 340695, 2, {603,565}},
+{ 340704, 2, {624,546}},
+{ 340725, 2, {649,525}},
+{ 340752, 2, {687,496}},
+{ 340860, 2, {598,570}},
+{ 340875, 2, {675,505}},
+{ 340938, 2, {611,558}},
+{ 340956, 2, {594,574}},
+{ 341004, 2, {628,543}},
+{ 341055, 2, {585,583}},
+{ 341088, 2, {608,561}},
+{ 341112, 2, {699,488}},
+{ 341120, 2, {640,533}},
+{ 341124, 2, {651,524}},
+{ 341130, 2, {685,498}},
+{ 341136, 2, {618,552}},
+{ 341145, 2, {665,513}},
+{ 341220, 2, {605,564}},
+{ 341250, 2, {625,546}},
+{ 341275, 2, {803,425}},
+{ 341334, 2, {602,567}},
+{ 341341, 2, {847,403}},
+{ 341432, 2, {637,536}},
+{ 341440, 2, {704,485}},
+{ 341484, 2, {597,572}},
+{ 341504, 2, {667,512}},
+{ 341508, 2, {596,573}},
+{ 341532, 2, {636,537}},
+{ 341550, 2, {594,575}},
+{ 341600, 2, {610,560}},
+{ 341620, 2, {589,580}},
+{ 341628, 2, {588,581}},
+{ 341640, 2, {585,584}},
+{ 341712, 2, {678,504}},
+{ 341734, 2, {646,529}},
+{ 341744, 2, {689,496}},
+{ 341760, 2, {640,534}},
+{ 341775, 2, {651,525}},
+{ 341820, 2, {633,540}},
+{ 341824, 2, {763,448}},
+{ 341865, 2, {639,535}},
+{ 341880, 2, {616,555}},
+{ 341887, 2, {1183,289}},
+{ 341910, 2, {655,522}},
+{ 341940, 2, {615,556}},
+{ 341955, 2, {745,459}},
+{ 341960, 2, {664,515}},
+{ 341964, 2, {644,531}},
+{ 342000, 2, {600,570}},
+{ 342027, 2, {623,549}},
+{ 342056, 2, {598,572}},
+{ 342108, 2, {612,559}},
+{ 342144, 2, {594,576}},
+{ 342160, 2, {611,560}},
+{ 342171, 2, {621,551}},
+{ 342240, 2, {620,552}},
+{ 342300, 2, {652,525}},
+{ 342342, 2, {627,546}},
+{ 342370, 2, {670,511}},
+{ 342390, 2, {606,565}},
+{ 342400, 2, {640,535}},
+{ 342432, 2, {656,522}},
+{ 342468, 2, {604,567}},
+{ 342504, 2, {603,568}},
+{ 342528, 2, {669,512}},
+{ 342540, 2, {660,519}},
+{ 342550, 2, {650,527}},
+{ 342576, 2, {624,549}},
+{ 342630, 2, {705,486}},
+{ 342650, 2, {623,550}},
+{ 342672, 2, {649,528}},
+{ 342684, 2, {668,513}},
+{ 342705, 2, {737,465}},
+{ 342720, 2, {595,576}},
+{ 342760, 2, {760,451}},
+{ 342768, 2, {592,579}},
+{ 342771, 2, {611,561}},
+{ 342780, 2, {591,580}},
+{ 342790, 2, {590,581}},
+{ 342792, 2, {621,552}},
+{ 342804, 2, {588,583}},
+{ 342860, 2, {620,553}},
+{ 342900, 2, {635,540}},
+{ 342912, 2, {608,564}},
+{ 342925, 2, {725,473}},
+{ 342930, 2, {690,497}},
+{ 343000, 2, {686,500}},
+{ 343035, 2, {605,567}},
+{ 343070, 2, {754,455}},
+{ 343125, 2, {625,549}},
+{ 343140, 2, {602,570}},
+{ 343170, 2, {615,558}},
+{ 343175, 2, {925,371}},
+{ 343176, 2, {632,543}},
+{ 343200, 2, {600,572}},
+{ 343224, 2, {681,504}},
+{ 343308, 2, {732,469}},
+{ 343332, 2, {594,578}},
+{ 343350, 2, {630,545}},
+{ 343400, 2, {680,505}},
+{ 343413, 2, {621,553}},
+{ 343434, 2, {629,546}},
+{ 343476, 2, {609,564}},
+{ 343500, 2, {687,500}},
+{ 343520, 2, {608,565}},
+{ 343539, 2, {779,441}},
+{ 343552, 2, {671,512}},
+{ 343596, 2, {627,548}},
+{ 343640, 2, {605,568}},
+{ 343650, 2, {725,474}},
+{ 343680, 2, {640,537}},
+{ 343728, 2, {616,558}},
+{ 343785, 2, {615,559}},
+{ 343791, 2, {749,459}},
+{ 343800, 2, {600,573}},
+{ 343805, 2, {665,517}},
+{ 343824, 2, {624,551}},
+{ 343872, 2, {597,576}},
+{ 343882, 2, {638,539}},
+{ 343896, 2, {623,552}},
+{ 343908, 2, {699,492}},
+{ 343915, 2, {715,481}},
+{ 343917, 2, {721,477}},
+{ 343952, 2, {592,581}},
+{ 343980, 2, {588,585}},
+{ 344025, 2, {695,495}},
+{ 344040, 2, {610,564}},
+{ 344043, 2, {889,387}},
+{ 344064, 2, {672,512}},
+{ 344080, 2, {680,506}},
+{ 344088, 2, {648,531}},
+{ 344100, 2, {620,555}},
+{ 344112, 2, {642,536}},
+{ 344124, 2, {711,484}},
+{ 344160, 2, {717,480}},
+{ 344162, 2, {793,434}},
+{ 344190, 2, {745,462}},
+{ 344208, 2, {606,568}},
+{ 344268, 2, {657,524}},
+{ 344288, 2, {742,464}},
+{ 344322, 2, {666,517}},
+{ 344352, 2, {633,544}},
+{ 344375, 2, {625,551}},
+{ 344400, 2, {600,574}},
+{ 344421, 2, {639,539}},
+{ 344440, 2, {632,545}},
+{ 344448, 2, {598,576}},
+{ 344520, 2, {594,580}},
+{ 344544, 2, {592,582}},
+{ 344565, 2, {589,585}},
+{ 344616, 2, {664,519}},
+{ 344655, 2, {621,555}},
+{ 344715, 2, {735,469}},
+{ 344736, 2, {608,567}},
+{ 344760, 2, {663,520}},
+{ 344772, 2, {628,549}},
+{ 344817, 2, {729,473}},
+{ 344835, 2, {711,485}},
+{ 344850, 2, {605,570}},
+{ 344916, 2, {603,572}},
+{ 344955, 2, {793,435}},
+{ 344960, 2, {616,560}},
+{ 345000, 2, {600,575}},
+{ 345016, 2, {707,488}},
+{ 345060, 2, {639,540}},
+{ 345072, 2, {624,553}},
+{ 345084, 2, {596,579}},
+{ 345114, 2, {594,581}},
+{ 345136, 2, {592,583}},
+{ 345144, 2, {591,584}},
+{ 345204, 2, {669,516}},
+{ 345268, 2, {649,532}},
+{ 345276, 2, {621,556}},
+{ 345303, 2, {609,567}},
+{ 345312, 2, {654,528}},
+{ 345320, 2, {712,485}},
+{ 345348, 2, {636,543}},
+{ 345384, 2, {648,533}},
+{ 345440, 2, {635,544}},
+{ 345450, 2, {658,525}},
+{ 345477, 2, {627,551}},
+{ 345576, 2, {616,561}},
+{ 345600, 2, {600,576}},
+{ 345625, 2, {625,553}},
+{ 345720, 2, {645,536}},
+{ 345765, 2, {623,555}},
+{ 345780, 2, {612,565}},
+{ 345800, 2, {650,532}},
+{ 345825, 2, {725,477}},
+{ 345828, 2, {644,537}},
+{ 345840, 2, {655,528}},
+{ 345870, 2, {610,567}},
+{ 345912, 2, {609,568}},
+{ 345920, 2, {736,470}},
+{ 345948, 2, {681,508}},
+{ 345950, 2, {629,550}},
+{ 345984, 2, {636,544}},
+{ 346032, 2, {648,534}},
+{ 346080, 2, {618,560}},
+{ 346092, 2, {604,573}},
+{ 346104, 2, {627,552}},
+{ 346110, 2, {695,498}},
+{ 346112, 2, {676,512}},
+{ 346115, 2, {899,385}},
+{ 346125, 2, {923,375}},
+{ 346150, 2, {602,575}},
+{ 346212, 2, {652,531}},
+{ 346236, 2, {671,516}},
+{ 346248, 2, {687,504}},
+{ 346260, 2, {597,580}},
+{ 346290, 2, {595,582}},
+{ 346302, 2, {594,583}},
+{ 346320, 2, {592,585}},
+{ 346332, 2, {589,588}},
+{ 346437, 2, {611,567}},
+{ 346450, 2, {650,533}},
+{ 346500, 2, {630,550}},
+{ 346528, 2, {637,544}},
+{ 346545, 2, {755,459}},
+{ 346560, 2, {608,570}},
+{ 346580, 2, {620,559}},
+{ 346608, 2, {664,522}},
+{ 346620, 2, {636,545}},
+{ 346692, 2, {668,519}},
+{ 346704, 2, {699,496}},
+{ 346710, 2, {635,546}},
+{ 346725, 2, {603,575}},
+{ 346752, 2, {602,576}},
+{ 346764, 2, {781,444}},
+{ 346788, 2, {676,513}},
+{ 346800, 2, {600,578}},
+{ 346860, 2, {615,564}},
+{ 346884, 2, {633,548}},
+{ 346885, 2, {595,583}},
+{ 346896, 2, {594,584}},
+{ 346920, 2, {590,588}},
+{ 346968, 2, {632,549}},
+{ 346983, 2, {651,533}},
+{ 347004, 2, {612,567}},
+{ 347028, 2, {717,484}},
+{ 347072, 2, {638,544}},
+{ 347130, 2, {609,570}},
+{ 347136, 2, {678,512}},
+{ 347139, 2, {621,559}},
+{ 347208, 2, {629,552}},
+{ 347225, 2, {731,475}},
+{ 347282, 2, {703,494}},
+{ 347328, 2, {603,576}},
+{ 347400, 2, {600,579}},
+{ 347412, 2, {663,524}},
+{ 347440, 2, {688,505}},
+{ 347480, 2, {595,584}},
+{ 347490, 2, {594,585}},
+{ 347508, 2, {591,588}},
+{ 347520, 2, {640,543}},
+{ 347536, 2, {749,464}},
+{ 347578, 2, {671,518}},
+{ 347625, 2, {675,515}},
+{ 347633, 2, {1573,221}},
+{ 347634, 2, {623,558}},
+{ 347648, 2, {679,512}},
+{ 347655, 2, {645,539}},
+{ 347680, 2, {656,530}},
+{ 347760, 2, {621,560}},
+{ 347805, 2, {655,531}},
+{ 347820, 2, {620,561}},
+{ 347880, 2, {669,520}},
+{ 347900, 2, {700,497}},
+{ 347976, 2, {648,537}},
+{ 348000, 2, {600,580}},
+{ 348040, 2, {616,565}},
+{ 348075, 2, {595,585}},
+{ 348096, 2, {592,588}},
+{ 348192, 2, {624,558}},
+{ 348194, 2, {646,539}},
+{ 348255, 2, {639,545}},
+{ 348270, 2, {611,570}},
+{ 348300, 2, {645,540}},
+{ 348327, 2, {679,513}},
+{ 348336, 2, {656,531}},
+{ 348348, 2, {609,572}},
+{ 348384, 2, {608,573}},
+{ 348390, 2, {630,553}},
+{ 348432, 2, {714,488}},
+{ 348435, 2, {783,445}},
+{ 348450, 2, {606,575}},
+{ 348480, 2, {605,576}},
+{ 348500, 2, {697,500}},
+{ 348540, 2, {628,555}},
+{ 348600, 2, {600,581}},
+{ 348612, 2, {627,556}},
+{ 348615, 2, {635,549}},
+{ 348648, 2, {597,584}},
+{ 348660, 2, {596,585}},
+{ 348672, 2, {681,512}},
+{ 348705, 2, {615,567}},
+{ 348725, 2, {725,481}},
+{ 348750, 2, {625,558}},
+{ 348768, 2, {672,519}},
+{ 348800, 2, {640,545}},
+{ 348810, 2, {755,462}},
+{ 348816, 2, {624,559}},
+{ 348831, 2, {791,441}},
+{ 348840, 2, {612,570}},
+{ 348843, 2, {961,363}},
+{ 348880, 2, {623,560}},
+{ 348936, 2, {651,536}},
+{ 348975, 2, {675,517}},
+{ 348985, 2, {767,455}},
+{ 348992, 2, {608,574}},
+{ 348996, 2, {687,508}},
+{ 349056, 2, {606,576}},
+{ 349074, 2, {738,473}},
+{ 349125, 2, {665,525}},
+{ 349140, 2, {660,529}},
+{ 349160, 2, {602,580}},
+{ 349164, 2, {636,549}},
+{ 349170, 2, {618,565}},
+{ 349184, 2, {682,512}},
+{ 349200, 2, {600,582}},
+{ 349206, 2, {726,481}},
+{ 349248, 2, {642,544}},
+{ 349280, 2, {592,590}},
+{ 349305, 2, {803,435}},
+{ 349320, 2, {615,568}},
+{ 349350, 2, {685,510}},
+{ 349370, 2, {713,490}},
+{ 349375, 2, {625,559}},
+{ 349401, 2, {663,527}},
+{ 349416, 2, {633,552}},
+{ 349448, 2, {722,484}},
+{ 349492, 2, {611,572}},
+{ 349500, 2, {699,500}},
+{ 349524, 2, {657,532}},
+{ 349525, 2, {775,451}},
+{ 349600, 2, {608,575}},
+{ 349650, 2, {630,555}},
+{ 349690, 2, {605,578}},
+{ 349692, 2, {644,543}},
+{ 349713, 2, {637,549}},
+{ 349716, 2, {604,579}},
+{ 349740, 2, {603,580}},
+{ 349770, 2, {655,534}},
+{ 349800, 2, {600,583}},
+{ 349811, 2, {649,539}},
+{ 349812, 2, {711,492}},
+{ 349830, 2, {598,585}},
+{ 349860, 2, {595,588}},
+{ 349866, 2, {594,589}},
+{ 349872, 2, {592,591}},
+{ 349890, 2, {642,545}},
+{ 349896, 2, {717,488}},
+{ 349932, 2, {723,484}},
+{ 349965, 2, {693,505}},
+{ 350000, 2, {625,560}},
+{ 350020, 2, {740,473}},
+{ 350075, 2, {737,475}},
+{ 350124, 2, {652,537}},
+{ 350172, 2, {639,548}},
+{ 350175, 2, {609,575}},
+{ 350200, 2, {680,515}},
+{ 350217, 2, {763,459}},
+{ 350244, 2, {621,564}},
+{ 350304, 2, {656,534}},
+{ 350336, 2, {644,544}},
+{ 350343, 2, {603,581}},
+{ 350350, 2, {637,550}},
+{ 350385, 2, {705,497}},
+{ 350427, 2, {777,451}},
+{ 350455, 2, {595,589}},
+{ 350460, 2, {594,590}},
+{ 350493, 2, {627,559}},
+{ 350520, 2, {635,552}},
+{ 350544, 2, {654,536}},
+{ 350556, 2, {669,524}},
+{ 350625, 2, {625,561}},
+{ 350649, 2, {729,481}},
+{ 350658, 2, {693,506}},
+{ 350672, 2, {707,496}},
+{ 350676, 2, {612,573}},
+{ 350700, 2, {668,525}},
+{ 350714, 2, {611,574}},
+{ 350727, 2, {663,529}},
+{ 350760, 2, {632,555}},
+{ 350784, 2, {609,576}},
+{ 350812, 2, {737,476}},
+{ 350844, 2, {676,519}},
+{ 350865, 2, {621,565}},
+{ 350880, 2, {645,544}},
+{ 350960, 2, {656,535}},
+{ 350966, 2, {602,583}},
+{ 350982, 2, {629,558}},
+{ 350987, 2, {637,551}},
+{ 351000, 2, {600,585}},
+{ 351024, 2, {618,568}},
+{ 351036, 2, {597,588}},
+{ 351080, 2, {655,536}},
+{ 351120, 2, {616,570}},
+{ 351168, 2, {708,496}},
+{ 351232, 2, {686,512}},
+{ 351288, 2, {612,574}},
+{ 351325, 2, {611,575}},
+{ 351351, 2, {693,507}},
+{ 351360, 2, {610,576}},
+{ 351372, 2, {623,564}},
+{ 351396, 2, {681,516}},
+{ 351405, 2, {685,513}},
+{ 351495, 2, {657,535}},
+{ 351500, 2, {703,500}},
+{ 351540, 2, {620,567}},
+{ 351560, 2, {680,517}},
+{ 351575, 2, {1025,343}},
+{ 351624, 2, {598,588}},
+{ 351648, 2, {594,592}},
+{ 351708, 2, {636,553}},
+{ 351744, 2, {687,512}},
+{ 351780, 2, {615,572}},
+{ 351785, 2, {665,529}},
+{ 351848, 2, {721,488}},
+{ 351864, 2, {648,543}},
+{ 351876, 2, {708,497}},
+{ 351900, 2, {612,575}},
+{ 351918, 2, {686,513}},
+{ 351936, 2, {611,576}},
+{ 351948, 2, {633,556}},
+{ 352000, 2, {640,550}},
+{ 352032, 2, {608,579}},
+{ 352044, 2, {693,508}},
+{ 352110, 2, {605,582}},
+{ 352152, 2, {603,584}},
+{ 352170, 2, {602,585}},
+{ 352176, 2, {638,552}},
+{ 352222, 2, {598,589}},
+{ 352236, 2, {596,591}},
+{ 352240, 2, {595,592}},
+{ 352272, 2, {656,537}},
+{ 352275, 2, {671,525}},
+{ 352296, 2, {699,504}},
+{ 352308, 2, {628,561}},
+{ 352352, 2, {616,572}},
+{ 352359, 2, {799,441}},
+{ 352495, 2, {715,493}},
+{ 352500, 2, {625,564}},
+{ 352512, 2, {612,576}},
+{ 352560, 2, {624,565}},
+{ 352584, 2, {664,531}},
+{ 352590, 2, {690,511}},
+{ 352640, 2, {608,580}},
+{ 352656, 2, {632,558}},
+{ 352682, 2, {697,506}},
+{ 352716, 2, {646,546}},
+{ 352728, 2, {621,568}},
+{ 352764, 2, {717,492}},
+{ 352768, 2, {689,512}},
+{ 352800, 2, {600,588}},
+{ 352824, 2, {723,488}},
+{ 352869, 2, {629,561}},
+{ 352920, 2, {680,519}},
+{ 352935, 2, {713,495}},
+{ 352968, 2, {616,573}},
+{ 352980, 2, {636,555}},
+{ 353056, 2, {649,544}},
+{ 353073, 2, {731,483}},
+{ 353080, 2, {679,520}},
+{ 353115, 2, {665,531}},
+{ 353130, 2, {745,474}},
+{ 353133, 2, {783,451}},
+{ 353160, 2, {648,545}},
+{ 353210, 2, {715,494}},
+{ 353220, 2, {609,580}},
+{ 353232, 2, {669,528}},
+{ 353241, 2, {623,567}},
+{ 353248, 2, {608,581}},
+{ 353280, 2, {640,552}},
+{ 353320, 2, {605,584}},
+{ 353340, 2, {604,585}},
+{ 353367, 2, {639,553}},
+{ 353400, 2, {600,589}},
+{ 353424, 2, {597,592}},
+{ 353430, 2, {595,594}},
+{ 353457, 2, {689,513}},
+{ 353460, 2, {645,548}},
+{ 353528, 2, {749,472}},
+{ 353535, 2, {637,555}},
+{ 353556, 2, {644,549}},
+{ 353565, 2, {729,485}},
+{ 353600, 2, {650,544}},
+{ 353628, 2, {627,564}},
+{ 353675, 2, {1075,329}},
+{ 353700, 2, {655,540}},
+{ 353804, 2, {731,484}},
+{ 353808, 2, {624,567}},
+{ 353856, 2, {608,582}},
+{ 353864, 2, {623,568}},
+{ 353904, 2, {606,584}},
+{ 353925, 2, {605,585}},
+{ 354000, 2, {600,590}},
+{ 354032, 2, {763,464}},
+{ 354036, 2, {652,543}},
+{ 354120, 2, {681,520}},
+{ 354123, 2, {657,539}},
+{ 354144, 2, {651,544}},
+{ 354200, 2, {616,575}},
+{ 354240, 2, {615,576}},
+{ 354288, 2, {671,528}},
+{ 354320, 2, {688,515}},
+{ 354330, 2, {635,558}},
+{ 354348, 2, {612,579}},
+{ 354354, 2, {649,546}},
+{ 354375, 2, {625,567}},
+{ 354380, 2, {611,580}},
+{ 354384, 2, {642,552}},
+{ 354410, 2, {610,581}},
+{ 354420, 2, {660,537}},
+{ 354445, 2, {665,533}},
+{ 354450, 2, {695,510}},
+{ 354464, 2, {608,583}},
+{ 354480, 2, {633,560}},
+{ 354492, 2, {687,516}},
+{ 354552, 2, {632,561}},
+{ 354564, 2, {603,588}},
+{ 354576, 2, {664,534}},
+{ 354600, 2, {600,591}},
+{ 354708, 2, {668,531}},
+{ 354780, 2, {657,540}},
+{ 354816, 2, {616,576}},
+{ 354825, 2, {747,475}},
+{ 354844, 2, {644,551}},
+{ 354960, 2, {612,580}},
+{ 354978, 2, {666,533}},
+{ 354996, 2, {684,519}},
+{ 355000, 2, {625,568}},
+{ 355047, 2, {609,583}},
+{ 355092, 2, {699,508}},
+{ 355110, 2, {623,570}},
+{ 355212, 2, {598,594}},
+{ 355240, 2, {664,535}},
+{ 355260, 2, {620,573}},
+{ 355266, 2, {731,486}},
+{ 355284, 2, {639,556}},
+{ 355300, 2, {646,550}},
+{ 355350, 2, {618,575}},
+{ 355365, 2, {745,477}},
+{ 355368, 2, {663,536}},
+{ 355446, 2, {637,558}},
+{ 355500, 2, {711,500}},
+{ 355509, 2, {627,567}},
+{ 355520, 2, {704,505}},
+{ 355572, 2, {612,581}},
+{ 355600, 2, {635,560}},
+{ 355632, 2, {717,496}},
+{ 355656, 2, {609,584}},
+{ 355680, 2, {608,585}},
+{ 355696, 2, {688,517}},
+{ 355716, 2, {723,492}},
+{ 355718, 2, {703,506}},
+{ 355725, 2, {675,527}},
+{ 355740, 2, {605,588}},
+{ 355752, 2, {648,549}},
+{ 355776, 2, {654,544}},
+{ 355810, 2, {598,595}},
+{ 355812, 2, {597,596}},
+{ 355875, 2, {949,375}},
+{ 355880, 2, {620,574}},
+{ 355908, 2, {669,532}},
+{ 355946, 2, {646,551}},
+{ 355950, 2, {630,565}},
+{ 355968, 2, {618,576}},
+{ 355971, 2, {737,483}},
+{ 356040, 2, {645,552}},
+{ 356048, 2, {616,578}},
+{ 356070, 2, {715,498}},
+{ 356076, 2, {628,567}},
+{ 356083, 2, {637,559}},
+{ 356125, 2, {875,407}},
+{ 356136, 2, {627,568}},
+{ 356160, 2, {636,560}},
+{ 356208, 2, {656,543}},
+{ 356224, 2, {704,506}},
+{ 356250, 2, {625,570}},
+{ 356252, 2, {676,527}},
+{ 356265, 2, {609,585}},
+{ 356307, 2, {893,399}},
+{ 356320, 2, {655,544}},
+{ 356345, 2, {605,589}},
+{ 356352, 2, {696,512}},
+{ 356384, 2, {602,592}},
+{ 356400, 2, {600,594}},
+{ 356421, 2, {703,507}},
+{ 356440, 2, {665,536}},
+{ 356454, 2, {621,574}},
+{ 356475, 2, {679,525}},
+{ 356532, 2, {803,444}},
+{ 356535, 2, {695,513}},
+{ 356568, 2, {664,537}},
+{ 356642, 2, {638,559}},
+{ 356643, 2, {629,567}},
+{ 356655, 2, {767,465}},
+{ 356664, 2, {616,579}},
+{ 356685, 2, {645,553}},
+{ 356700, 2, {615,580}},
+{ 356720, 2, {637,560}},
+{ 356730, 2, {690,517}},
+{ 356748, 2, {651,548}},
+{ 356796, 2, {612,583}},
+{ 356832, 2, {672,531}},
+{ 356844, 2, {681,524}},
+{ 356895, 2, {693,515}},
+{ 356902, 2, {689,518}},
+{ 356915, 2, {1105,323}},
+{ 356960, 2, {736,485}},
+{ 356964, 2, {604,591}},
+{ 356972, 2, {671,532}},
+{ 356976, 2, {603,592}},
+{ 357000, 2, {600,595}},
+{ 357012, 2, {633,564}},
+{ 357048, 2, {648,551}},
+{ 357072, 2, {688,519}},
+{ 357075, 2, {621,575}},
+{ 357080, 2, {632,565}},
+{ 357120, 2, {620,576}},
+{ 357200, 2, {752,475}},
+{ 357240, 2, {687,520}},
+{ 357273, 2, {749,477}},
+{ 357315, 2, {615,581}},
+{ 357357, 2, {637,561}},
+{ 357420, 2, {644,555}},
+{ 357435, 2, {611,585}},
+{ 357500, 2, {625,572}},
+{ 357504, 2, {608,588}},
+{ 357520, 2, {656,545}},
+{ 357552, 2, {624,573}},
+{ 357561, 2, {697,513}},
+{ 357570, 2, {685,522}},
+{ 357588, 2, {602,594}},
+{ 357616, 2, {721,496}},
+{ 357630, 2, {655,546}},
+{ 357696, 2, {621,576}},
+{ 357700, 2, {700,511}},
+{ 357750, 2, {675,530}},
+{ 357760, 2, {640,559}},
+{ 357840, 2, {630,568}},
+{ 357864, 2, {744,481}},
+{ 357870, 2, {755,474}},
+{ 357888, 2, {699,512}},
+{ 357896, 2, {616,581}},
+{ 357948, 2, {652,549}},
+{ 357952, 2, {658,544}},
+{ 357984, 2, {678,528}},
+{ 358020, 2, {612,585}},
+{ 358050, 2, {651,550}},
+{ 358065, 2, {657,545}},
+{ 358092, 2, {609,588}},
+{ 358112, 2, {608,589}},
+{ 358140, 2, {635,564}},
+{ 358150, 2, {650,551}},
+{ 358160, 2, {605,592}},
+{ 358176, 2, {624,574}},
+{ 358200, 2, {600,597}},
+{ 358225, 2, {623,575}},
+{ 358248, 2, {649,552}},
+{ 358281, 2, {693,517}},
+{ 358340, 2, {779,460}},
+{ 358344, 2, {632,567}},
+{ 358380, 2, {660,543}},
+{ 358400, 2, {640,560}},
+{ 358500, 2, {717,500}},
+{ 358512, 2, {616,582}},
+{ 358530, 2, {629,570}},
+{ 358545, 2, {615,583}},
+{ 358584, 2, {669,536}},
+{ 358608, 2, {723,496}},
+{ 358620, 2, {645,556}},
+{ 358644, 2, {627,572}},
+{ 358668, 2, {729,492}},
+{ 358680, 2, {610,588}},
+{ 358701, 2, {609,589}},
+{ 358716, 2, {668,537}},
+{ 358720, 2, {608,590}},
+{ 358750, 2, {625,574}},
+{ 358752, 2, {606,592}},
+{ 358785, 2, {603,595}},
+{ 358800, 2, {600,598}},
+{ 358848, 2, {623,576}},
+{ 358875, 2, {725,495}},
+{ 358904, 2, {728,493}},
+{ 358956, 2, {676,531}},
+{ 358974, 2, {666,539}},
+{ 358980, 2, {620,579}},
+{ 359040, 2, {640,561}},
+{ 359055, 2, {711,505}},
+{ 359128, 2, {616,583}},
+{ 359136, 2, {688,522}},
+{ 359160, 2, {615,584}},
+{ 359268, 2, {611,588}},
+{ 359328, 2, {608,591}},
+{ 359340, 2, {636,565}},
+{ 359370, 2, {605,594}},
+{ 359388, 2, {603,596}},
+{ 359397, 2, {729,493}},
+{ 359424, 2, {624,576}},
+{ 359450, 2, {650,553}},
+{ 359480, 2, {760,473}},
+{ 359499, 2, {901,399}},
+{ 359513, 2, {667,539}},
+{ 359520, 2, {642,560}},
+{ 359544, 2, {633,568}},
+{ 359560, 2, {712,505}},
+{ 359568, 2, {681,528}},
+{ 359595, 2, {655,549}},
+{ 359640, 2, {648,555}},
+{ 359658, 2, {689,522}},
+{ 359720, 2, {680,529}},
+{ 359788, 2, {629,572}},
+{ 359844, 2, {628,573}},
+{ 359870, 2, {679,530}},
+{ 359910, 2, {645,558}},
+{ 359988, 2, {687,524}},
+{ 360036, 2, {657,548}},
+{ 360045, 2, {635,567}},
+{ 360096, 2, {682,528}},
+{ 360135, 2, {755,477}},
+{ 360136, 2, {763,472}},
+{ 360144, 2, {656,549}},
+{ 360150, 2, {686,525}},
+{ 360180, 2, {621,580}},
+{ 360195, 2, {649,555}},
+{ 360220, 2, {620,581}},
+{ 360240, 2, {632,570}},
+{ 360255, 2, {705,511}},
+{ 360297, 2, {817,441}},
+{ 360325, 2, {725,497}},
+{ 360360, 2, {616,585}},
+{ 360396, 2, {639,564}},
+{ 360468, 2, {612,589}},
+{ 360528, 2, {609,592}},
+{ 360549, 2, {679,531}},
+{ 360552, 2, {664,543}},
+{ 360570, 2, {606,595}},
+{ 360588, 2, {604,597}},
+{ 360612, 2, {636,567}},
+{ 360639, 2, {703,513}},
+{ 360640, 2, {644,560}},
+{ 360672, 2, {624,578}},
+{ 360680, 2, {635,568}},
+{ 360684, 2, {699,516}},
+{ 360789, 2, {841,429}},
+{ 360800, 2, {656,550}},
+{ 360801, 2, {621,581}},
+{ 360815, 2, {793,455}},
+{ 360855, 2, {729,495}},
+{ 360864, 2, {672,537}},
+{ 360912, 2, {618,584}},
+{ 360960, 2, {640,564}},
+{ 361000, 2, {722,500}},
+{ 361008, 2, {654,552}},
+{ 361035, 2, {639,565}},
+{ 361050, 2, {725,498}},
+{ 361080, 2, {612,590}},
+{ 361120, 2, {610,592}},
+{ 361125, 2, {675,535}},
+{ 361130, 2, {670,539}},
+{ 361152, 2, {608,594}},
+{ 361179, 2, {637,567}},
+{ 361188, 2, {711,508}},
+{ 361200, 2, {602,600}},
+{ 361250, 2, {625,578}},
+{ 361260, 2, {669,540}},
+{ 361284, 2, {644,561}},
+{ 361296, 2, {624,579}},
+{ 361340, 2, {623,580}},
+{ 361361, 2, {1001,361}},
+{ 361368, 2, {717,504}},
+{ 361375, 2, {875,413}},
+{ 361460, 2, {620,583}},
+{ 361491, 2, {713,507}},
+{ 361500, 2, {723,500}},
+{ 361522, 2, {686,527}},
+{ 361560, 2, {655,552}},
+{ 361584, 2, {648,558}},
+{ 361600, 2, {640,565}},
+{ 361620, 2, {615,588}},
+{ 361665, 2, {705,513}},
+{ 361669, 2, {671,539}},
+{ 361675, 2, {629,575}},
+{ 361692, 2, {612,591}},
+{ 361712, 2, {611,592}},
+{ 361725, 2, {689,525}},
+{ 361746, 2, {609,594}},
+{ 361760, 2, {608,595}},
+{ 361788, 2, {708,511}},
+{ 361790, 2, {605,598}},
+{ 361800, 2, {603,600}},
+{ 361816, 2, {637,568}},
+{ 361836, 2, {684,529}},
+{ 361860, 2, {652,555}},
+{ 361880, 2, {664,545}},
+{ 361900, 2, {658,550}},
+{ 361920, 2, {624,580}},
+{ 361950, 2, {635,570}},
+{ 361956, 2, {651,556}},
+{ 361984, 2, {707,512}},
+{ 361998, 2, {663,546}},
+{ 362043, 2, {621,583}},
+{ 362070, 2, {745,486}},
+{ 362076, 2, {633,572}},
+{ 362136, 2, {632,573}},
+{ 362142, 2, {649,558}},
+{ 362232, 2, {648,559}},
+{ 362250, 2, {630,575}},
+{ 362292, 2, {681,532}},
+{ 362295, 2, {747,485}},
+{ 362304, 2, {612,592}},
+{ 362340, 2, {610,594}},
+{ 362440, 2, {680,533}},
+{ 362496, 2, {708,512}},
+{ 362544, 2, {624,581}},
+{ 362560, 2, {704,515}},
+{ 362600, 2, {700,518}},
+{ 362604, 2, {737,492}},
+{ 362637, 2, {891,407}},
+{ 362664, 2, {621,584}},
+{ 362691, 2, {707,513}},
+{ 362700, 2, {620,585}},
+{ 362724, 2, {668,543}},
+{ 362730, 2, {642,565}},
+{ 362736, 2, {687,528}},
+{ 362790, 2, {695,522}},
+{ 362810, 2, {710,511}},
+{ 362824, 2, {616,589}},
+{ 362848, 2, {667,544}},
+{ 362880, 2, {630,576}},
+{ 362894, 2, {686,529}},
+{ 362934, 2, {611,594}},
+{ 362952, 2, {639,568}},
+{ 362964, 2, {609,596}},
+{ 362976, 2, {608,597}},
+{ 363000, 2, {605,600}},
+{ 363012, 2, {676,537}},
+{ 363055, 2, {805,451}},
+{ 363069, 2, {791,459}},
+{ 363072, 2, {732,496}},
+{ 363090, 2, {637,570}},
+{ 363120, 2, {680,534}},
+{ 363125, 2, {625,581}},
+{ 363132, 2, {693,524}},
+{ 363165, 2, {781,465}},
+{ 363168, 2, {624,582}},
+{ 363204, 2, {684,531}},
+{ 363300, 2, {692,525}},
+{ 363321, 2, {657,553}},
+{ 363324, 2, {663,548}},
+{ 363350, 2, {650,559}},
+{ 363375, 2, {765,475}},
+{ 363400, 2, {632,575}},
+{ 363408, 2, {678,536}},
+{ 363475, 2, {775,469}},
+{ 363480, 2, {699,520}},
+{ 363506, 2, {682,533}},
+{ 363545, 2, {611,595}},
+{ 363584, 2, {608,598}},
+{ 363600, 2, {606,600}},
+{ 363612, 2, {628,579}},
+{ 363630, 2, {690,527}},
+{ 363660, 2, {627,580}},
+{ 363735, 2, {685,531}},
+{ 363750, 2, {625,582}},
+{ 363780, 2, {645,564}},
+{ 363792, 2, {624,583}},
+{ 363800, 2, {680,535}},
+{ 363804, 2, {732,497}},
+{ 363825, 2, {675,539}},
+{ 363832, 2, {623,584}},
+{ 363834, 2, {697,522}},
+{ 363909, 2, {651,559}},
+{ 363936, 2, {669,544}},
+{ 363944, 2, {679,536}},
+{ 363951, 2, {763,477}},
+{ 363968, 2, {704,517}},
+{ 364000, 2, {650,560}},
+{ 364021, 2, {833,437}},
+{ 364056, 2, {616,591}},
+{ 364080, 2, {615,592}},
+{ 364095, 2, {783,465}},
+{ 364140, 2, {612,595}},
+{ 364212, 2, {604,603}},
+{ 364236, 2, {717,508}},
+{ 364325, 2, {767,475}},
+{ 364375, 2, {625,583}},
+{ 364392, 2, {723,504}},
+{ 364428, 2, {636,573}},
+{ 364455, 2, {623,585}},
+{ 364480, 2, {670,544}},
+{ 364500, 2, {675,540}},
+{ 364536, 2, {664,549}},
+{ 364572, 2, {684,533}},
+{ 364608, 2, {633,576}},
+{ 364640, 2, {688,530}},
+{ 364650, 2, {650,561}},
+{ 364656, 2, {642,568}},
+{ 364720, 2, {752,485}},
+{ 364800, 2, {608,600}},
+{ 364815, 2, {605,603}},
+{ 364820, 2, {629,580}},
+{ 364896, 2, {672,543}},
+{ 364980, 2, {660,553}},
+{ 365000, 2, {625,584}},
+{ 365016, 2, {681,536}},
+{ 365024, 2, {671,544}},
+{ 365040, 2, {624,585}},
+{ 365056, 2, {713,512}},
+{ 365079, 2, {759,481}},
+{ 365085, 2, {665,549}},
+{ 365092, 2, {767,476}},
+{ 365148, 2, {621,588}},
+{ 365160, 2, {680,537}},
+{ 365190, 2, {658,555}},
+{ 365292, 2, {657,556}},
+{ 365295, 2, {735,497}},
+{ 365310, 2, {615,594}},
+{ 365313, 2, {663,551}},
+{ 365328, 2, {688,531}},
+{ 365364, 2, {612,597}},
+{ 365400, 2, {609,600}},
+{ 365484, 2, {687,532}},
+{ 365490, 2, {655,558}},
+{ 365500, 2, {731,500}},
+{ 365508, 2, {639,572}},
+{ 365512, 2, {749,488}},
+{ 365560, 2, {703,520}},
+{ 365585, 2, {935,391}},
+{ 365625, 2, {625,585}},
+{ 365700, 2, {636,575}},
+{ 365715, 2, {645,567}},
+{ 365750, 2, {665,550}},
+{ 365760, 2, {635,576}},
+{ 365769, 2, {621,589}},
+{ 365772, 2, {652,561}},
+{ 365790, 2, {685,534}},
+{ 365856, 2, {618,592}},
+{ 365904, 2, {616,594}},
+{ 365928, 2, {632,579}},
+{ 365976, 2, {612,598}},
+{ 366000, 2, {610,600}},
+{ 366016, 2, {608,602}},
+{ 366030, 2, {630,581}},
+{ 366036, 2, {649,564}},
+{ 366048, 2, {656,558}},
+{ 366054, 2, {722,507}},
+{ 366080, 2, {640,572}},
+{ 366120, 2, {648,565}},
+{ 366165, 2, {711,515}},
+{ 366168, 2, {627,584}},
+{ 366240, 2, {654,560}},
+{ 366275, 2, {637,575}},
+{ 366276, 2, {699,524}},
+{ 366282, 2, {646,567}},
+{ 366300, 2, {660,555}},
+{ 366324, 2, {623,588}},
+{ 366336, 2, {636,576}},
+{ 366360, 2, {645,568}},
+{ 366366, 2, {671,546}},
+{ 366390, 2, {621,590}},
+{ 366415, 2, {665,551}},
+{ 366420, 2, {620,591}},
+{ 366520, 2, {616,595}},
+{ 366540, 2, {615,596}},
+{ 366548, 2, {689,532}},
+{ 366575, 2, {775,473}},
+{ 366597, 2, {693,529}},
+{ 366600, 2, {611,600}},
+{ 366612, 2, {669,548}},
+{ 366624, 2, {608,603}},
+{ 366630, 2, {606,605}},
+{ 366680, 2, {712,515}},
+{ 366704, 2, {656,559}},
+{ 366720, 2, {640,573}},
+{ 366730, 2, {806,455}},
+{ 366732, 2, {668,549}},
+{ 366741, 2, {799,459}},
+{ 366792, 2, {696,527}},
+{ 366795, 2, {627,585}},
+{ 366800, 2, {655,560}},
+{ 366850, 2, {638,575}},
+{ 366876, 2, {711,516}},
+{ 366912, 2, {624,588}},
+{ 366930, 2, {755,486}},
+{ 367024, 2, {791,464}},
+{ 367068, 2, {676,543}},
+{ 367080, 2, {644,570}},
+{ 367104, 2, {717,512}},
+{ 367140, 2, {633,580}},
+{ 367164, 2, {651,564}},
+{ 367192, 2, {632,581}},
+{ 367284, 2, {723,508}},
+{ 367290, 2, {630,583}},
+{ 367308, 2, {684,537}},
+{ 367350, 2, {775,474}},
+{ 367353, 2, {833,441}},
+{ 367360, 2, {640,574}},
+{ 367380, 2, {628,585}},
+{ 367392, 2, {688,534}},
+{ 367416, 2, {648,567}},
+{ 367425, 2, {639,575}},
+{ 367452, 2, {692,531}},
+{ 367488, 2, {638,576}},
+{ 367500, 2, {625,588}},
+{ 367521, 2, {777,473}},
+{ 367536, 2, {624,589}},
+{ 367570, 2, {623,590}},
+{ 367598, 2, {682,539}},
+{ 367632, 2, {621,592}},
+{ 367640, 2, {707,520}},
+{ 367710, 2, {618,595}},
+{ 367740, 2, {681,540}},
+{ 367752, 2, {616,597}},
+{ 367822, 2, {611,602}},
+{ 367824, 2, {632,582}},
+{ 367836, 2, {609,604}},
+{ 367840, 2, {608,605}},
+{ 367875, 2, {675,545}},
+{ 367920, 2, {630,584}},
+{ 367965, 2, {629,585}},
+{ 367983, 2, {649,567}},
+{ 368000, 2, {640,575}},
+{ 368010, 2, {705,522}},
+{ 368016, 2, {656,561}},
+{ 368032, 2, {742,496}},
+{ 368039, 2, {1073,343}},
+{ 368064, 2, {639,576}},
+{ 368080, 2, {688,535}},
+{ 368082, 2, {726,507}},
+{ 368125, 2, {625,589}},
+{ 368145, 2, {729,505}},
+{ 368160, 2, {624,590}},
+{ 368184, 2, {667,552}},
+{ 368186, 2, {637,578}},
+{ 368232, 2, {687,536}},
+{ 368244, 2, {636,579}},
+{ 368280, 2, {620,594}},
+{ 368298, 2, {666,553}},
+{ 368368, 2, {616,598}},
+{ 368424, 2, {612,602}},
+{ 368448, 2, {608,606}},
+{ 368480, 2, {658,560}},
+{ 368520, 2, {664,555}},
+{ 368600, 2, {760,485}},
+{ 368628, 2, {663,556}},
+{ 368676, 2, {627,588}},
+{ 368725, 2, {1075,343}},
+{ 368745, 2, {793,465}},
+{ 368775, 2, {745,495}},
+{ 368784, 2, {624,591}},
+{ 368816, 2, {623,592}},
+{ 368832, 2, {678,544}},
+{ 368928, 2, {672,549}},
+{ 368940, 2, {645,572}},
+{ 369000, 2, {615,600}},
+{ 369012, 2, {644,573}},
+{ 369036, 2, {612,603}},
+{ 369045, 2, {695,531}},
+{ 369072, 2, {699,528}},
+{ 369117, 2, {651,567}},
+{ 369150, 2, {642,575}},
+{ 369152, 2, {721,512}},
+{ 369240, 2, {680,543}},
+{ 369265, 2, {845,437}},
+{ 369288, 2, {669,552}},
+{ 369303, 2, {627,589}},
+{ 369325, 2, {869,425}},
+{ 369360, 2, {648,570}},
+{ 369369, 2, {693,533}},
+{ 369376, 2, {679,544}},
+{ 369420, 2, {655,564}},
+{ 369456, 2, {688,537}},
+{ 369460, 2, {637,580}},
+{ 369495, 2, {621,595}},
+{ 369510, 2, {654,565}},
+{ 369512, 2, {646,572}},
+{ 369516, 2, {636,581}},
+{ 369570, 2, {635,582}},
+{ 369576, 2, {696,531}},
+{ 369600, 2, {616,600}},
+{ 369603, 2, {729,507}},
+{ 369655, 2, {611,605}},
+{ 369672, 2, {633,584}},
+{ 369675, 2, {775,477}},
+{ 369684, 2, {652,567}},
+{ 369720, 2, {632,585}},
+{ 369750, 2, {725,510}},
+{ 369768, 2, {651,568}},
+{ 369792, 2, {642,576}},
+{ 369840, 2, {670,552}},
+{ 369852, 2, {629,588}},
+{ 369873, 2, {721,513}},
+{ 369886, 2, {731,506}},
+{ 369900, 2, {675,548}},
+{ 369920, 2, {640,578}},
+{ 369972, 2, {717,516}},
+{ 369984, 2, {656,564}},
+{ 369985, 2, {961,385}},
+{ 370000, 2, {625,592}},
+{ 370025, 2, {779,475}},
+{ 370062, 2, {623,594}},
+{ 370116, 2, {621,596}},
+{ 370139, 2, {847,437}},
+{ 370140, 2, {620,597}},
+{ 370175, 2, {871,425}},
+{ 370176, 2, {723,512}},
+{ 370230, 2, {615,602}},
+{ 370260, 2, {612,605}},
+{ 370272, 2, {609,608}},
+{ 370332, 2, {729,508}},
+{ 370359, 2, {783,473}},
+{ 370392, 2, {671,552}},
+{ 370461, 2, {767,483}},
+{ 370464, 2, {681,544}},
+{ 370475, 2, {725,511}},
+{ 370510, 2, {670,553}},
+{ 370512, 2, {664,558}},
+{ 370548, 2, {657,564}},
+{ 370560, 2, {640,579}},
+{ 370600, 2, {680,545}},
+{ 370620, 2, {639,580}},
+{ 370640, 2, {656,565}},
+{ 370656, 2, {624,594}},
+{ 370740, 2, {668,555}},
+{ 370755, 2, {693,535}},
+{ 370783, 2, {1081,343}},
+{ 370800, 2, {618,600}},
+{ 370840, 2, {635,584}},
+{ 370880, 2, {610,608}},
+{ 370944, 2, {644,576}},
+{ 370968, 2, {696,533}},
+{ 370975, 2, {781,475}},
+{ 370980, 2, {687,540}},
+{ 371008, 2, {682,544}},
+{ 371010, 2, {745,498}},
+{ 371025, 2, {765,485}},
+{ 371070, 2, {630,589}},
+{ 371124, 2, {676,549}},
+{ 371130, 2, {695,534}},
+{ 371148, 2, {628,591}},
+{ 371175, 2, {707,525}},
+{ 371184, 2, {627,592}},
+{ 371200, 2, {640,580}},
+{ 371205, 2, {657,565}},
+{ 371250, 2, {625,594}},
+{ 371259, 2, {639,581}},
+{ 371280, 2, {624,595}},
+{ 371304, 2, {648,573}},
+{ 371371, 2, {637,583}},
+{ 371385, 2, {655,567}},
+{ 371412, 2, {684,543}},
+{ 371448, 2, {616,603}},
+{ 371460, 2, {615,604}},
+{ 371472, 2, {654,568}},
+{ 371475, 2, {635,585}},
+{ 371488, 2, {611,608}},
+{ 371504, 2, {749,496}},
+{ 371520, 2, {645,576}},
+{ 371604, 2, {692,537}},
+{ 371664, 2, {696,534}},
+{ 371680, 2, {736,505}},
+{ 371700, 2, {630,590}},
+{ 371735, 2, {665,559}},
+{ 371790, 2, {729,510}},
+{ 371840, 2, {640,581}},
+{ 371868, 2, {699,532}},
+{ 371875, 2, {625,595}},
+{ 371910, 2, {690,539}},
+{ 371925, 2, {675,551}},
+{ 371952, 2, {648,574}},
+{ 371964, 2, {669,556}},
+{ 372000, 2, {620,600}},
+{ 372008, 2, {637,584}},
+{ 372040, 2, {655,568}},
+{ 372060, 2, {636,585}},
+{ 372090, 2, {785,474}},
+{ 372096, 2, {612,608}},
+{ 372099, 2, {611,609}},
+{ 372204, 2, {633,588}},
+{ 372294, 2, {666,559}},
+{ 372344, 2, {763,488}},
+{ 372372, 2, {651,572}},
+{ 372400, 2, {665,560}},
+{ 372405, 2, {671,555}},
+{ 372416, 2, {704,529}},
+{ 372438, 2, {627,594}},
+{ 372476, 2, {676,551}},
+{ 372480, 2, {640,582}},
+{ 372504, 2, {664,561}},
+{ 372526, 2, {649,574}},
+{ 372528, 2, {624,597}},
+{ 372564, 2, {711,524}},
+{ 372600, 2, {621,600}},
+{ 372645, 2, {637,585}},
+{ 372680, 2, {616,605}},
+{ 372708, 2, {612,609}},
+{ 372736, 2, {728,512}},
+{ 372771, 2, {679,549}},
+{ 372775, 2, {775,481}},
+{ 372840, 2, {717,520}},
+{ 372855, 2, {795,469}},
+{ 372876, 2, {644,579}},
+{ 372900, 2, {660,565}},
+{ 372960, 2, {630,592}},
+{ 373065, 2, {627,595}},
+{ 373068, 2, {723,516}},
+{ 373086, 2, {658,567}},
+{ 373100, 2, {650,574}},
+{ 373120, 2, {640,583}},
+{ 373152, 2, {624,598}},
+{ 373175, 2, {649,575}},
+{ 373176, 2, {639,584}},
+{ 373184, 2, {686,544}},
+{ 373188, 2, {681,548}},
+{ 373230, 2, {638,585}},
+{ 373240, 2, {620,602}},
+{ 373248, 2, {648,576}},
+{ 373275, 2, {675,553}},
+{ 373296, 2, {616,606}},
+{ 373320, 2, {612,610}},
+{ 373350, 2, {655,570}},
+{ 373352, 2, {791,472}},
+{ 373380, 2, {635,588}},
+{ 373395, 2, {803,465}},
+{ 373450, 2, {679,550}},
+{ 373500, 2, {747,500}},
+{ 373512, 2, {632,591}},
+{ 373584, 2, {688,543}},
+{ 373596, 2, {652,573}},
+{ 373625, 2, {875,427}},
+{ 373626, 2, {629,594}},
+{ 373635, 2, {855,437}},
+{ 373692, 2, {627,596}},
+{ 373725, 2, {755,495}},
+{ 373728, 2, {687,544}},
+{ 373750, 2, {625,598}},
+{ 373752, 2, {696,537}},
+{ 373800, 2, {623,600}},
+{ 373824, 2, {649,576}},
+{ 373842, 2, {621,602}},
+{ 373860, 2, {620,603}},
+{ 373890, 2, {618,605}},
+{ 373920, 2, {615,608}},
+{ 373932, 2, {612,611}},
+{ 373996, 2, {703,532}},
+{ 374010, 2, {685,546}},
+{ 374052, 2, {732,511}},
+{ 374100, 2, {645,580}},
+{ 374166, 2, {702,533}},
+{ 374187, 2, {667,561}},
+{ 374255, 2, {629,595}},
+{ 374256, 2, {678,552}},
+{ 374325, 2, {651,575}},
+{ 374374, 2, {847,442}},
+{ 374418, 2, {671,558}},
+{ 374445, 2, {785,477}},
+{ 374556, 2, {637,588}},
+{ 374625, 2, {675,555}},
+{ 374640, 2, {669,560}},
+{ 374664, 2, {699,536}},
+{ 374710, 2, {707,530}},
+{ 374736, 2, {633,592}},
+{ 374745, 2, {645,581}},
+{ 374748, 2, {668,561}},
+{ 374784, 2, {732,512}},
+{ 374816, 2, {689,544}},
+{ 374825, 2, {725,517}},
+{ 374850, 2, {630,595}},
+{ 374916, 2, {628,597}},
+{ 374920, 2, {721,520}},
+{ 374928, 2, {642,584}},
+{ 374946, 2, {627,598}},
+{ 374960, 2, {688,545}},
+{ 374976, 2, {651,576}},
+{ 375000, 2, {625,600}},
+{ 375003, 2, {731,513}},
+{ 375060, 2, {658,570}},
+{ 375084, 2, {621,604}},
+{ 375144, 2, {616,609}},
+{ 375160, 2, {664,565}},
+{ 375180, 2, {676,555}},
+{ 375192, 2, {648,579}},
+{ 375193, 2, {637,589}},
+{ 375200, 2, {670,560}},
+{ 375240, 2, {636,590}},
+{ 375300, 2, {675,556}},
+{ 375375, 2, {715,525}},
+{ 375408, 2, {632,594}},
+{ 375417, 2, {707,531}},
+{ 375435, 2, {729,515}},
+{ 375440, 2, {722,520}},
+{ 375452, 2, {644,583}},
+{ 375516, 2, {684,549}},
+{ 375550, 2, {725,518}},
+{ 375585, 2, {735,511}},
+{ 375648, 2, {624,602}},
+{ 375669, 2, {623,603}},
+{ 375683, 2, {697,539}},
+{ 375700, 2, {650,578}},
+{ 375705, 2, {621,605}},
+{ 375708, 2, {717,524}},
+{ 375732, 2, {639,588}},
+{ 375744, 2, {618,608}},
+{ 375756, 2, {692,543}},
+{ 375765, 2, {615,611}},
+{ 375782, 2, {638,589}},
+{ 375804, 2, {657,572}},
+{ 375820, 2, {817,460}},
+{ 375830, 2, {637,590}},
+{ 375840, 2, {648,580}},
+{ 375876, 2, {636,591}},
+{ 375888, 2, {656,573}},
+{ 375900, 2, {700,537}},
+{ 375912, 2, {681,552}},
+{ 375920, 2, {635,592}},
+{ 375921, 2, {663,567}},
+{ 375936, 2, {704,534}},
+{ 375960, 2, {723,520}},
+{ 375990, 2, {755,498}},
+{ 376035, 2, {645,583}},
+{ 376040, 2, {632,595}},
+{ 376047, 2, {889,423}},
+{ 376050, 2, {654,575}},
+{ 376065, 2, {685,549}},
+{ 376142, 2, {629,598}},
+{ 376164, 2, {729,516}},
+{ 376194, 2, {689,546}},
+{ 376200, 2, {627,600}},
+{ 376250, 2, {625,602}},
+{ 376257, 2, {779,483}},
+{ 376272, 2, {624,603}},
+{ 376290, 2, {666,565}},
+{ 376320, 2, {640,588}},
+{ 376376, 2, {616,611}},
+{ 376380, 2, {615,612}},
+{ 376428, 2, {741,508}},
+{ 376464, 2, {682,552}},
+{ 376476, 2, {687,548}},
+{ 376488, 2, {648,581}},
+{ 376512, 2, {636,592}},
+{ 376584, 2, {663,568}},
+{ 376623, 2, {783,481}},
+{ 376640, 2, {704,535}},
+{ 376675, 2, {793,475}},
+{ 376680, 2, {645,584}},
+{ 376704, 2, {654,576}},
+{ 376740, 2, {630,598}},
+{ 376805, 2, {715,527}},
+{ 376845, 2, {679,555}},
+{ 376875, 2, {625,603}},
+{ 376884, 2, {684,551}},
+{ 376893, 2, {729,517}},
+{ 376960, 2, {620,608}},
+{ 377036, 2, {779,484}},
+{ 377055, 2, {665,567}},
+{ 377104, 2, {637,592}},
+{ 377136, 2, {648,582}},
+{ 377145, 2, {765,493}},
+{ 377190, 2, {635,594}},
+{ 377200, 2, {656,575}},
+{ 377235, 2, {747,505}},
+{ 377268, 2, {633,596}},
+{ 377280, 2, {655,576}},
+{ 377300, 2, {686,550}},
+{ 377304, 2, {632,597}},
+{ 377307, 2, {791,477}},
+{ 377316, 2, {669,564}},
+{ 377377, 2, {1001,377}},
+{ 377400, 2, {629,600}},
+{ 377460, 2, {699,540}},
+{ 377468, 2, {793,476}},
+{ 377487, 2, {837,451}},
+{ 377508, 2, {652,579}},
+{ 377520, 2, {624,605}},
+{ 377568, 2, {621,608}},
+{ 377580, 2, {620,609}},
+{ 377600, 2, {640,590}},
+{ 377650, 2, {650,581}},
+{ 377685, 2, {693,545}},
+{ 377706, 2, {714,529}},
+{ 377712, 2, {688,549}},
+{ 377720, 2, {665,568}},
+{ 377775, 2, {657,575}},
+{ 377880, 2, {670,564}},
+{ 377895, 2, {885,427}},
+{ 377910, 2, {646,585}},
+{ 377928, 2, {696,543}},
+{ 377986, 2, {686,551}},
+{ 378000, 2, {630,600}},
+{ 378015, 2, {869,435}},
+{ 378048, 2, {704,537}},
+{ 378120, 2, {685,552}},
+{ 378125, 2, {625,605}},
+{ 378144, 2, {624,606}},
+{ 378180, 2, {660,573}},
+{ 378189, 2, {621,609}},
+{ 378235, 2, {715,529}},
+{ 378240, 2, {640,591}},
+{ 378252, 2, {684,553}},
+{ 378288, 2, {639,592}},
+{ 378350, 2, {658,575}},
+{ 378378, 2, {637,594}},
+{ 378400, 2, {688,550}},
+{ 378420, 2, {636,595}},
+{ 378444, 2, {671,564}},
+{ 378448, 2, {763,496}},
+{ 378450, 2, {725,522}},
+{ 378480, 2, {664,570}},
+{ 378525, 2, {721,525}},
+{ 378560, 2, {676,560}},
+{ 378576, 2, {717,528}},
+{ 378624, 2, {696,544}},
+{ 378636, 2, {681,556}},
+{ 378675, 2, {675,561}},
+{ 378684, 2, {628,603}},
+{ 378708, 2, {627,604}},
+{ 378750, 2, {625,606}},
+{ 378756, 2, {668,567}},
+{ 378784, 2, {623,608}},
+{ 378810, 2, {621,610}},
+{ 378820, 2, {620,611}},
+{ 378840, 2, {616,615}},
+{ 378852, 2, {723,524}},
+{ 378879, 2, {867,437}},
+{ 378885, 2, {871,435}},
+{ 378917, 2, {703,539}},
+{ 378950, 2, {650,583}},
+{ 378952, 2, {707,536}},
+{ 378972, 2, {638,594}},
+{ 379008, 2, {658,576}},
+{ 379040, 2, {736,515}},
+{ 379050, 2, {665,570}},
+{ 379080, 2, {648,585}},
+{ 379224, 2, {687,552}},
+{ 379236, 2, {663,572}},
+{ 379260, 2, {630,602}},
+{ 379316, 2, {644,589}},
+{ 379431, 2, {621,611}},
+{ 379440, 2, {620,612}},
+{ 379470, 2, {695,546}},
+{ 379476, 2, {747,508}},
+{ 379500, 2, {660,575}},
+{ 379512, 2, {753,504}},
+{ 379525, 2, {799,475}},
+{ 379533, 2, {651,583}},
+{ 379610, 2, {638,595}},
+{ 379665, 2, {649,585}},
+{ 379680, 2, {672,565}},
+{ 379692, 2, {636,597}},
+{ 379755, 2, {783,485}},
+{ 379760, 2, {752,505}},
+{ 379764, 2, {693,548}},
+{ 379800, 2, {633,600}},
+{ 379824, 2, {656,579}},
+{ 379848, 2, {646,588}},
+{ 379904, 2, {742,512}},
+{ 379908, 2, {692,549}},
+{ 379950, 2, {745,510}},
+{ 379992, 2, {669,568}},
+{ 379995, 2, {705,539}},
+{ 380000, 2, {625,608}},
+{ 380016, 2, {624,609}},
+{ 380030, 2, {623,610}},
+{ 380052, 2, {621,612}},
+{ 380064, 2, {642,592}},
+{ 380100, 2, {700,543}},
+{ 380120, 2, {680,559}},
+{ 380160, 2, {640,594}},
+{ 380184, 2, {651,584}},
+{ 380190, 2, {667,570}},
+{ 380196, 2, {708,537}},
+{ 380205, 2, {639,595}},
+{ 380240, 2, {679,560}},
+{ 380256, 2, {699,544}},
+{ 380275, 2, {1025,371}},
+{ 380292, 2, {737,516}},
+{ 380385, 2, {711,535}},
+{ 380432, 2, {767,496}},
+{ 380457, 2, {671,567}},
+{ 380472, 2, {664,573}},
+{ 380475, 2, {801,475}},
+{ 380494, 2, {646,589}},
+{ 380512, 2, {736,517}},
+{ 380545, 2, {629,605}},
+{ 380604, 2, {644,591}},
+{ 380625, 2, {625,609}},
+{ 380640, 2, {624,610}},
+{ 380646, 2, {742,513}},
+{ 380688, 2, {618,616}},
+{ 380700, 2, {675,564}},
+{ 380730, 2, {686,555}},
+{ 380765, 2, {805,473}},
+{ 380800, 2, {640,595}},
+{ 380835, 2, {651,585}},
+{ 380844, 2, {639,596}},
+{ 380880, 2, {690,552}},
+{ 380920, 2, {712,535}},
+{ 380926, 2, {637,598}},
+{ 380928, 2, {744,512}},
+{ 381000, 2, {635,600}},
+{ 381024, 2, {648,588}},
+{ 381060, 2, {657,580}},
+{ 381095, 2, {715,533}},
+{ 381096, 2, {632,603}},
+{ 381136, 2, {656,581}},
+{ 381150, 2, {630,605}},
+{ 381210, 2, {655,582}},
+{ 381216, 2, {627,608}},
+{ 381238, 2, {682,559}},
+{ 381264, 2, {624,611}},
+{ 381276, 2, {623,612}},
+{ 381300, 2, {620,615}},
+{ 381360, 2, {681,560}},
+{ 381375, 2, {675,565}},
+{ 381420, 2, {652,585}},
+{ 381425, 2, {803,475}},
+{ 381444, 2, {717,532}},
+{ 381480, 2, {660,578}},
+{ 381510, 2, {785,486}},
+{ 381546, 2, {738,517}},
+{ 381555, 2, {695,549}},
+{ 381570, 2, {690,553}},
+{ 381582, 2, {731,522}},
+{ 381612, 2, {649,588}},
+{ 381640, 2, {658,580}},
+{ 381672, 2, {648,589}},
+{ 381717, 2, {657,581}},
+{ 381744, 2, {723,528}},
+{ 381766, 2, {737,518}},
+{ 381792, 2, {656,582}},
+{ 381800, 2, {664,575}},
+{ 381810, 2, {715,534}},
+{ 381840, 2, {645,592}},
+{ 381875, 2, {625,611}},
+{ 381888, 2, {624,612}},
+{ 381915, 2, {621,615}},
+{ 381936, 2, {654,584}},
+{ 381938, 2, {722,529}},
+{ 381972, 2, {687,556}},
+{ 381990, 2, {642,595}},
+{ 381996, 2, {729,524}},
+{ 382025, 2, {925,413}},
+{ 382075, 2, {725,527}},
+{ 382080, 2, {640,597}},
+{ 382104, 2, {696,549}},
+{ 382109, 2, {1183,323}},
+{ 382130, 2, {721,530}},
+{ 382140, 2, {660,579}},
+{ 382185, 2, {745,513}},
+{ 382200, 2, {637,600}},
+{ 382230, 2, {685,558}},
+{ 382239, 2, {891,429}},
+{ 382272, 2, {704,543}},
+{ 382284, 2, {666,574}},
+{ 382320, 2, {648,590}},
+{ 382332, 2, {633,604}},
+{ 382344, 2, {712,537}},
+{ 382347, 2, {833,459}},
+{ 382356, 2, {684,559}},
+{ 382360, 2, {632,605}},
+{ 382395, 2, {689,555}},
+{ 382432, 2, {629,608}},
+{ 382448, 2, {656,583}},
+{ 382452, 2, {628,609}},
+{ 382500, 2, {625,612}},
+{ 382520, 2, {655,584}},
+{ 382524, 2, {753,508}},
+{ 382536, 2, {621,616}},
+{ 382580, 2, {740,517}},
+{ 382655, 2, {841,455}},
+{ 382668, 2, {669,572}},
+{ 382690, 2, {710,539}},
+{ 382704, 2, {714,536}},
+{ 382720, 2, {640,598}},
+{ 382764, 2, {668,573}},
+{ 382788, 2, {651,588}},
+{ 382800, 2, {638,600}},
+{ 382850, 2, {650,589}},
+{ 382851, 2, {721,531}},
+{ 382905, 2, {635,603}},
+{ 382925, 2, {901,425}},
+{ 382950, 2, {666,575}},
+{ 382968, 2, {648,591}},
+{ 382992, 2, {632,606}},
+{ 383019, 2, {793,483}},
+{ 383040, 2, {630,608}},
+{ 383052, 2, {699,548}},
+{ 383061, 2, {629,609}},
+{ 383097, 2, {627,611}},
+{ 383130, 2, {645,594}},
+{ 383145, 2, {623,615}},
+{ 383175, 2, {655,585}},
+{ 383229, 2, {693,553}},
+{ 383292, 2, {676,567}},
+{ 383328, 2, {726,528}},
+{ 383350, 2, {697,550}},
+{ 383400, 2, {639,600}},
+{ 383460, 2, {660,581}},
+{ 383488, 2, {749,512}},
+{ 383508, 2, {636,603}},
+{ 383525, 2, {667,575}},
+{ 383600, 2, {685,560}},
+{ 383614, 2, {658,583}},
+{ 383625, 2, {775,495}},
+{ 383656, 2, {728,527}},
+{ 383670, 2, {630,609}},
+{ 383680, 2, {704,545}},
+{ 383688, 2, {657,584}},
+{ 383724, 2, {627,612}},
+{ 383760, 2, {624,615}},
+{ 383768, 2, {623,616}},
+{ 383800, 2, {760,505}},
+{ 383838, 2, {703,546}},
+{ 383904, 2, {688,558}},
+{ 383940, 2, {711,540}},
+{ 384000, 2, {640,600}},
+{ 384054, 2, {726,529}},
+{ 384060, 2, {692,555}},
+{ 384084, 2, {681,564}},
+{ 384111, 2, {637,603}},
+{ 384160, 2, {686,560}},
+{ 384183, 2, {729,527}},
+{ 384192, 2, {667,576}},
+{ 384200, 2, {680,565}},
+{ 384208, 2, {649,592}},
+{ 384237, 2, {749,513}},
+{ 384252, 2, {781,492}},
+{ 384300, 2, {630,610}},
+{ 384307, 2, {713,539}},
+{ 384312, 2, {717,536}},
+{ 384370, 2, {646,595}},
+{ 384420, 2, {645,596}},
+{ 384444, 2, {708,543}},
+{ 384456, 2, {664,579}},
+{ 384462, 2, {689,558}},
+{ 384468, 2, {644,597}},
+{ 384540, 2, {663,580}},
+{ 384560, 2, {760,506}},
+{ 384608, 2, {707,544}},
+{ 384636, 2, {723,532}},
+{ 384659, 2, {1331,289}},
+{ 384705, 2, {747,515}},
+{ 384720, 2, {687,560}},
+{ 384744, 2, {697,552}},
+{ 384780, 2, {636,605}},
+{ 384800, 2, {650,592}},
+{ 384810, 2, {635,606}},
+{ 384846, 2, {686,561}},
+{ 384864, 2, {633,608}},
+{ 384888, 2, {632,609}},
+{ 384912, 2, {648,594}},
+{ 384930, 2, {630,611}},
+{ 384948, 2, {629,612}},
+{ 384975, 2, {725,531}},
+{ 384993, 2, {679,567}},
+{ 385000, 2, {625,616}},
+{ 385020, 2, {621,620}},
+{ 385050, 2, {755,510}},
+{ 385056, 2, {672,573}},
+{ 385104, 2, {678,568}},
+{ 385140, 2, {655,588}},
+{ 385152, 2, {708,544}},
+{ 385154, 2, {671,574}},
+{ 385175, 2, {775,497}},
+{ 385200, 2, {642,600}},
+{ 385280, 2, {640,602}},
+{ 385308, 2, {693,556}},
+{ 385332, 2, {652,591}},
+{ 385344, 2, {669,576}},
+{ 385392, 2, {651,592}},
+{ 385452, 2, {747,516}},
+{ 385506, 2, {649,594}},
+{ 385526, 2, {667,578}},
+{ 385536, 2, {753,512}},
+{ 385572, 2, {759,508}},
+{ 385632, 2, {624,618}},
+{ 385671, 2, {899,429}},
+{ 385672, 2, {679,568}},
+{ 385728, 2, {656,588}},
+{ 385825, 2, {671,575}},
+{ 385840, 2, {689,560}},
+{ 385848, 2, {699,552}},
+{ 385917, 2, {799,483}},
+{ 385920, 2, {640,603}},
+{ 385950, 2, {775,498}},
+{ 385956, 2, {639,604}},
+{ 385968, 2, {688,561}},
+{ 386008, 2, {791,488}},
+{ 386048, 2, {754,512}},
+{ 386080, 2, {635,608}},
+{ 386100, 2, {650,594}},
+{ 386155, 2, {649,595}},
+{ 386220, 2, {628,615}},
+{ 386232, 2, {627,616}},
+{ 386250, 2, {625,618}},
+{ 386260, 2, {623,620}},
+{ 386316, 2, {657,588}},
+{ 386325, 2, {765,505}},
+{ 386340, 2, {685,564}},
+{ 386370, 2, {729,530}},
+{ 386400, 2, {644,600}},
+{ 386425, 2, {725,533}},
+{ 386448, 2, {664,582}},
+{ 386456, 2, {721,536}},
+{ 386496, 2, {671,576}},
+{ 386512, 2, {784,493}},
+{ 386595, 2, {639,605}},
+{ 386616, 2, {712,543}},
+{ 386650, 2, {703,550}},
+{ 386688, 2, {636,608}},
+{ 386694, 2, {651,594}},
+{ 386750, 2, {650,595}},
+{ 386772, 2, {668,579}},
+{ 386802, 2, {702,551}},
+{ 386808, 2, {681,568}},
+{ 386856, 2, {648,597}},
+{ 386880, 2, {624,620}},
+{ 386883, 2, {623,621}},
+{ 386925, 2, {737,525}},
+{ 386946, 2, {666,581}},
+{ 386958, 2, {726,533}},
+{ 387000, 2, {645,600}},
+{ 387030, 2, {665,582}},
+{ 387040, 2, {656,590}},
+{ 387100, 2, {700,553}},
+{ 387150, 2, {725,534}},
+{ 387168, 2, {654,592}},
+{ 387180, 2, {717,540}},
+{ 387192, 2, {663,584}},
+{ 387200, 2, {640,605}},
+{ 387205, 2, {805,481}},
+{ 387280, 2, {752,515}},
+{ 387296, 2, {637,608}},
+{ 387315, 2, {755,513}},
+{ 387324, 2, {636,609}},
+{ 387348, 2, {676,573}},
+{ 387387, 2, {693,559}},
+{ 387396, 2, {633,612}},
+{ 387450, 2, {630,615}},
+{ 387464, 2, {629,616}},
+{ 387468, 2, {687,564}},
+{ 387495, 2, {711,545}},
+{ 387504, 2, {624,621}},
+{ 387528, 2, {723,536}},
+{ 387600, 2, {646,600}},
+{ 387695, 2, {665,583}},
+{ 387696, 2, {656,591}},
+{ 387760, 2, {655,592}},
+{ 387810, 2, {695,558}},
+{ 387828, 2, {684,567}},
+{ 387840, 2, {640,606}},
+{ 387855, 2, {663,585}},
+{ 387860, 2, {820,473}},
+{ 387872, 2, {713,544}},
+{ 387891, 2, {917,423}},
+{ 387904, 2, {638,608}},
+{ 387960, 2, {636,610}},
+{ 387996, 2, {651,596}},
+{ 388020, 2, {669,580}},
+{ 388025, 2, {913,425}},
+{ 388032, 2, {688,564}},
+{ 388040, 2, {712,545}},
+{ 388056, 2, {703,552}},
+{ 388075, 2, {817,475}},
+{ 388080, 2, {630,616}},
+{ 388125, 2, {625,621}},
+{ 388143, 2, {707,549}},
+{ 388206, 2, {702,553}},
+{ 388212, 2, {692,561}},
+{ 388278, 2, {666,583}},
+{ 388284, 2, {741,524}},
+{ 388314, 2, {799,486}},
+{ 388332, 2, {644,603}},
+{ 388360, 2, {665,584}},
+{ 388368, 2, {696,558}},
+{ 388395, 2, {685,567}},
+{ 388410, 2, {642,605}},
+{ 388416, 2, {672,578}},
+{ 388440, 2, {664,585}},
+{ 388485, 2, {801,485}},
+{ 388500, 2, {700,555}},
+{ 388512, 2, {639,608}},
+{ 388531, 2, {1573,247}},
+{ 388548, 2, {753,516}},
+{ 388557, 2, {729,533}},
+{ 388570, 2, {637,610}},
+{ 388575, 2, {785,495}},
+{ 388608, 2, {704,552}},
+{ 388620, 2, {635,612}},
+{ 388644, 2, {699,556}},
+{ 388680, 2, {632,615}},
+{ 388692, 2, {708,549}},
+{ 388700, 2, {650,598}},
+{ 388720, 2, {688,565}},
+{ 388740, 2, {627,620}},
+{ 388752, 2, {624,623}},
+{ 388773, 2, {693,561}},
+{ 388788, 2, {716,543}},
+{ 388800, 2, {648,600}},
+{ 388815, 2, {735,529}},
+{ 388850, 2, {707,550}},
+{ 388890, 2, {745,522}},
+{ 388926, 2, {697,558}},
+{ 388944, 2, {657,592}},
+{ 388962, 2, {686,567}},
+{ 389025, 2, {665,585}},
+{ 389064, 2, {696,559}},
+{ 389070, 2, {655,594}},
+{ 389080, 2, {685,568}},
+{ 389088, 2, {672,579}},
+{ 389130, 2, {654,595}},
+{ 389136, 2, {726,536}},
+{ 389158, 2, {722,539}},
+{ 389200, 2, {695,560}},
+{ 389207, 2, {637,611}},
+{ 389244, 2, {652,597}},
+{ 389270, 2, {670,581}},
+{ 389375, 2, {625,623}},
+{ 389400, 2, {649,600}},
+{ 389480, 2, {728,535}},
+{ 389500, 2, {779,500}},
+{ 389532, 2, {681,572}},
+{ 389536, 2, {658,592}},
+{ 389580, 2, {645,604}},
+{ 389628, 2, {711,548}},
+{ 389640, 2, {680,573}},
+{ 389664, 2, {656,594}},
+{ 389760, 2, {640,609}},
+{ 389818, 2, {638,611}},
+{ 389844, 2, {637,612}},
+{ 389850, 2, {678,575}},
+{ 389865, 2, {705,553}},
+{ 389928, 2, {633,616}},
+{ 389980, 2, {629,620}},
+{ 389988, 2, {628,621}},
+{ 390000, 2, {625,624}},
+{ 390015, 2, {729,535}},
+{ 390048, 2, {717,544}},
+{ 390060, 2, {660,591}},
+{ 390080, 2, {736,530}},
+{ 390096, 2, {648,602}},
+{ 390144, 2, {762,512}},
+{ 390150, 2, {675,578}},
+{ 390195, 2, {667,585}},
+{ 390216, 2, {687,568}},
+{ 390320, 2, {656,595}},
+{ 390336, 2, {642,608}},
+{ 390390, 2, {715,546}},
+{ 390400, 2, {640,610}},
+{ 390420, 2, {723,540}},
+{ 390425, 2, {679,575}},
+{ 390450, 2, {685,570}},
+{ 390456, 2, {638,612}},
+{ 390507, 2, {663,589}},
+{ 390528, 2, {678,576}},
+{ 390576, 2, {632,618}},
+{ 390609, 2, {629,621}},
+{ 390656, 2, {763,512}},
+{ 390663, 2, {689,567}},
+{ 390696, 2, {669,584}},
+{ 390698, 2, {649,602}},
+{ 390720, 2, {660,592}},
+{ 390728, 2, {676,578}},
+{ 390744, 2, {648,603}},
+{ 390775, 2, {725,539}},
+{ 390780, 2, {668,585}},
+{ 390830, 2, {646,605}},
+{ 390852, 2, {658,594}},
+{ 390888, 2, {712,549}},
+{ 390915, 2, {657,595}},
+{ 390930, 2, {785,498}},
+{ 390960, 2, {720,543}},
+{ 391000, 2, {680,575}},
+{ 391017, 2, {697,561}},
+{ 391020, 2, {665,588}},
+{ 391040, 2, {640,611}},
+{ 391068, 2, {639,612}},
+{ 391104, 2, {672,582}},
+{ 391140, 2, {636,615}},
+{ 391160, 2, {635,616}},
+{ 391248, 2, {627,624}},
+{ 391300, 2, {650,602}},
+{ 391391, 2, {1001,391}},
+{ 391400, 2, {760,515}},
+{ 391404, 2, {676,579}},
+{ 391419, 2, {763,513}},
+{ 391428, 2, {747,524}},
+{ 391440, 2, {699,560}},
+{ 391500, 2, {675,580}},
+{ 391524, 2, {708,553}},
+{ 391545, 2, {693,565}},
+{ 391552, 2, {644,608}},
+{ 391560, 2, {753,520}},
+{ 391572, 2, {657,596}},
+{ 391632, 2, {656,597}},
+{ 391644, 2, {759,516}},
+{ 391680, 2, {640,612}},
+{ 391685, 2, {665,589}},
+{ 391755, 2, {637,615}},
+{ 391875, 2, {627,625}},
+{ 391880, 2, {776,505}},
+{ 391920, 2, {690,568}},
+{ 391932, 2, {684,573}},
+{ 391980, 2, {695,564}},
+{ 391989, 2, {741,529}},
+{ 392040, 2, {648,605}},
+{ 392049, 2, {889,441}},
+{ 392084, 2, {737,532}},
+{ 392150, 2, {682,575}},
+{ 392160, 2, {645,608}},
+{ 392175, 2, {675,581}},
+{ 392196, 2, {644,609}},
+{ 392224, 2, {721,544}},
+{ 392256, 2, {681,576}},
+{ 392275, 2, {923,425}},
+{ 392336, 2, {791,496}},
+{ 392364, 2, {692,567}},
+{ 392385, 2, {707,555}},
+{ 392392, 2, {637,616}},
+{ 392400, 2, {654,600}},
+{ 392418, 2, {702,559}},
+{ 392424, 2, {664,591}},
+{ 392430, 2, {635,618}},
+{ 392460, 2, {633,620}},
+{ 392472, 2, {632,621}},
+{ 392490, 2, {630,623}},
+{ 392496, 2, {629,624}},
+{ 392535, 2, {671,585}},
+{ 392616, 2, {684,574}},
+{ 392630, 2, {710,553}},
+{ 392688, 2, {648,606}},
+{ 392700, 2, {660,595}},
+{ 392704, 2, {767,512}},
+{ 392730, 2, {689,570}},
+{ 392832, 2, {682,576}},
+{ 392916, 2, {717,548}},
+{ 392920, 2, {760,517}},
+{ 392931, 2, {693,567}},
+{ 392940, 2, {666,590}},
+{ 392964, 2, {687,572}},
+{ 393000, 2, {655,600}},
+{ 393008, 2, {638,616}},
+{ 393084, 2, {716,549}},
+{ 393120, 2, {630,624}},
+{ 393125, 2, {629,625}},
+{ 393156, 2, {652,603}},
+{ 393204, 2, {651,604}},
+{ 393300, 2, {684,575}},
+{ 393312, 2, {723,544}},
+{ 393328, 2, {793,496}},
+{ 393372, 2, {669,588}},
+{ 393390, 2, {705,558}},
+{ 393421, 2, {1147,343}},
+{ 393470, 2, {730,539}},
+{ 393484, 2, {644,611}},
+{ 393525, 2, {675,583}},
+{ 393576, 2, {713,552}},
+{ 393600, 2, {640,615}},
+{ 393624, 2, {639,616}},
+{ 393660, 2, {729,540}},
+{ 393680, 2, {665,592}},
+{ 393720, 2, {680,579}},
+{ 393736, 2, {632,623}},
+{ 393750, 2, {630,625}},
+{ 393756, 2, {628,627}},
+{ 393760, 2, {736,535}},
+{ 393813, 2, {893,441}},
+{ 393820, 2, {679,580}},
+{ 393822, 2, {663,594}},
+{ 393960, 2, {670,588}},
+{ 393965, 2, {715,551}},
+{ 393975, 2, {765,515}},
+{ 393984, 2, {648,608}},
+{ 394009, 2, {731,539}},
+{ 394020, 2, {660,597}},
+{ 394065, 2, {695,567}},
+{ 394095, 2, {645,611}},
+{ 394110, 2, {755,522}},
+{ 394128, 2, {644,612}},
+{ 394174, 2, {779,506}},
+{ 394200, 2, {657,600}},
+{ 394212, 2, {722,546}},
+{ 394224, 2, {688,573}},
+{ 394236, 2, {699,564}},
+{ 394240, 2, {640,616}},
+{ 394272, 2, {666,592}},
+{ 394335, 2, {635,621}},
+{ 394383, 2, {629,627}},
+{ 394416, 2, {664,594}},
+{ 394420, 2, {740,533}},
+{ 394450, 2, {686,575}},
+{ 394548, 2, {671,588}},
+{ 394560, 2, {685,576}},
+{ 394572, 2, {753,524}},
+{ 394592, 2, {649,608}},
+{ 394611, 2, {817,483}},
+{ 394625, 2, {875,451}},
+{ 394632, 2, {648,609}},
+{ 394680, 2, {660,598}},
+{ 394740, 2, {645,612}},
+{ 394760, 2, {695,568}},
+{ 394788, 2, {668,591}},
+{ 394800, 2, {658,600}},
+{ 394912, 2, {656,602}},
+{ 394940, 2, {637,620}},
+{ 394944, 2, {704,561}},
+{ 394956, 2, {636,621}},
+{ 394965, 2, {655,603}},
+{ 394975, 2, {925,427}},
+{ 394980, 2, {681,580}},
+{ 394992, 2, {633,624}},
+{ 395000, 2, {632,625}},
+{ 395010, 2, {630,627}},
+{ 395076, 2, {803,492}},
+{ 395080, 2, {664,595}},
+{ 395115, 2, {795,497}},
+{ 395136, 2, {672,588}},
+{ 395148, 2, {663,596}},
+{ 395160, 2, {712,555}},
+{ 395199, 2, {697,567}},
+{ 395200, 2, {650,608}},
+{ 395241, 2, {649,609}},
+{ 395250, 2, {750,527}},
+{ 395280, 2, {648,610}},
+{ 395316, 2, {711,556}},
+{ 395352, 2, {646,612}},
+{ 395415, 2, {783,505}},
+{ 395428, 2, {817,484}},
+{ 395460, 2, {676,585}},
+{ 395472, 2, {642,616}},
+{ 395486, 2, {689,574}},
+{ 395520, 2, {640,618}},
+{ 395568, 2, {656,603}},
+{ 395577, 2, {637,621}},
+{ 395595, 2, {745,531}},
+{ 395600, 2, {688,575}},
+{ 395670, 2, {654,605}},
+{ 395692, 2, {748,529}},
+{ 395712, 2, {687,576}},
+{ 395760, 2, {680,582}},
+{ 395784, 2, {717,552}},
+{ 395808, 2, {651,608}},
+{ 395829, 2, {721,549}},
+{ 395850, 2, {650,609}},
+{ 395901, 2, {837,473}},
+{ 395920, 2, {707,560}},
+{ 395928, 2, {648,611}},
+{ 395952, 2, {678,584}},
+{ 396025, 2, {775,511}},
+{ 396036, 2, {684,579}},
+{ 396048, 2, {669,592}},
+{ 396060, 2, {644,615}},
+{ 396150, 2, {695,570}},
+{ 396165, 2, {735,539}},
+{ 396175, 2, {689,575}},
+{ 396180, 2, {639,620}},
+{ 396198, 2, {638,621}},
+{ 396204, 2, {723,548}},
+{ 396228, 2, {636,623}},
+{ 396240, 2, {635,624}},
+{ 396264, 2, {632,627}},
+{ 396270, 2, {630,629}},
+{ 396396, 2, {693,572}},
+{ 396408, 2, {664,597}},
+{ 396440, 2, {680,583}},
+{ 396480, 2, {672,590}},
+{ 396508, 2, {686,578}},
+{ 396516, 2, {692,573}},
+{ 396536, 2, {679,584}},
+{ 396550, 2, {721,550}},
+{ 396552, 2, {744,533}},
+{ 396640, 2, {670,592}},
+{ 396720, 2, {684,580}},
+{ 396760, 2, {728,545}},
+{ 396800, 2, {640,620}},
+{ 396828, 2, {657,604}},
+{ 396864, 2, {636,624}},
+{ 396865, 2, {667,595}},
+{ 396880, 2, {656,605}},
+{ 396930, 2, {655,606}},
+{ 397032, 2, {699,568}},
+{ 397056, 2, {704,564}},
+{ 397068, 2, {652,609}},
+{ 397100, 2, {722,550}},
+{ 397150, 2, {650,611}},
+{ 397152, 2, {672,591}},
+{ 397155, 2, {913,435}},
+{ 397176, 2, {741,536}},
+{ 397188, 2, {649,612}},
+{ 397215, 2, {679,585}},
+{ 397232, 2, {671,592}},
+{ 397243, 2, {737,539}},
+{ 397296, 2, {712,558}},
+{ 397305, 2, {729,545}},
+{ 397306, 2, {767,518}},
+{ 397320, 2, {645,616}},
+{ 397341, 2, {833,477}},
+{ 397358, 2, {754,527}},
+{ 397380, 2, {716,555}},
+{ 397404, 2, {684,581}},
+{ 397440, 2, {640,621}},
+{ 397476, 2, {724,549}},
+{ 397485, 2, {657,605}},
+{ 397488, 2, {637,624}},
+{ 397500, 2, {636,625}},
+{ 397524, 2, {633,628}},
+{ 397536, 2, {656,606}},
+{ 397575, 2, {675,589}},
+{ 397584, 2, {753,528}},
+{ 397620, 2, {705,564}},
+{ 397632, 2, {654,608}},
+{ 397670, 2, {665,598}},
+{ 397704, 2, {681,584}},
+{ 397716, 2, {759,524}},
+{ 397719, 2, {749,531}},
+{ 397760, 2, {704,565}},
+{ 397761, 2, {651,611}},
+{ 397800, 2, {650,612}},
+{ 397830, 2, {745,534}},
+{ 397836, 2, {771,516}},
+{ 397880, 2, {686,580}},
+{ 397936, 2, {646,616}},
+{ 397969, 2, {1331,299}},
+{ 397980, 2, {660,603}},
+{ 398025, 2, {725,549}},
+{ 398097, 2, {639,623}},
+{ 398112, 2, {638,624}},
+{ 398125, 2, {637,625}},
+{ 398160, 2, {632,630}},
+{ 398164, 2, {676,589}},
+{ 398208, 2, {732,544}},
+{ 398240, 2, {655,608}},
+{ 398250, 2, {675,590}},
+{ 398352, 2, {688,579}},
+{ 398412, 2, {651,612}},
+{ 398460, 2, {687,580}},
+{ 398475, 2, {693,575}},
+{ 398520, 2, {648,615}},
+{ 398560, 2, {752,530}},
+{ 398574, 2, {671,594}},
+{ 398601, 2, {703,567}},
+{ 398652, 2, {717,556}},
+{ 398670, 2, {685,582}},
+{ 398684, 2, {697,572}},
+{ 398720, 2, {640,623}},
+{ 398724, 2, {669,596}},
+{ 398736, 2, {639,624}},
+{ 398750, 2, {638,625}},
+{ 398772, 2, {636,627}},
+{ 398796, 2, {668,597}},
+{ 398808, 2, {696,573}},
+{ 398825, 2, {1075,371}},
+{ 398860, 2, {740,539}},
+{ 398866, 2, {667,598}},
+{ 398905, 2, {1105,361}},
+{ 398970, 2, {682,585}},
+{ 399000, 2, {665,600}},
+{ 399096, 2, {723,552}},
+{ 399135, 2, {649,615}},
+{ 399168, 2, {648,616}},
+{ 399245, 2, {671,595}},
+{ 399252, 2, {679,588}},
+{ 399300, 2, {660,605}},
+{ 399360, 2, {640,624}},
+{ 399375, 2, {639,625}},
+{ 399399, 2, {637,627}},
+{ 399432, 2, {712,561}},
+{ 399456, 2, {657,608}},
+{ 399492, 2, {729,548}},
+{ 399500, 2, {799,500}},
+{ 399504, 2, {656,609}},
+{ 399516, 2, {676,591}},
+{ 399588, 2, {804,497}},
+{ 399600, 2, {666,600}},
+{ 399620, 2, {689,580}},
+{ 399627, 2, {779,513}},
+{ 399640, 2, {776,515}},
+{ 399645, 2, {747,535}},
+{ 399672, 2, {728,549}},
+{ 399685, 2, {715,559}},
+{ 399735, 2, {705,567}},
+{ 399784, 2, {649,616}},
+{ 399828, 2, {699,572}},
+{ 399840, 2, {672,595}},
+{ 399900, 2, {645,620}},
+{ 399924, 2, {644,621}},
+{ 399938, 2, {686,583}},
+{ 399993, 2, {713,561}},
+{ 400000, 2, {640,625}},
+{ 400040, 2, {685,584}},
+{ 400050, 2, {635,630}},
+{ 400056, 2, {633,632}},
+{ 400064, 2, {658,608}},
+{ 400140, 2, {684,585}},
+{ 400155, 2, {721,555}},
+{ 400158, 2, {774,517}},
+{ 400160, 2, {656,610}},
+{ 400200, 2, {667,600}},
+{ 400320, 2, {695,576}},
+{ 400350, 2, {785,510}},
+{ 400392, 2, {664,603}},
+{ 400416, 2, {688,582}},
+{ 400428, 2, {681,588}},
+{ 400440, 2, {705,568}},
+{ 400452, 2, {663,604}},
+{ 400464, 2, {648,618}},
+{ 400545, 2, {645,621}},
+{ 400554, 2, {693,578}},
+{ 400596, 2, {753,532}},
+{ 400608, 2, {642,624}},
+{ 400610, 2, {679,590}},
+{ 400668, 2, {692,579}},
+{ 400673, 2, {637,629}},
+{ 400675, 2, {775,517}},
+{ 400710, 2, {703,570}},
+{ 400725, 2, {685,585}},
+{ 400752, 2, {726,552}},
+{ 400775, 2, {697,575}},
+{ 400816, 2, {656,611}},
+{ 400860, 2, {655,612}},
+{ 400869, 2, {707,567}},
+{ 400890, 2, {690,581}},
+{ 400896, 2, {696,576}},
+{ 400905, 2, {755,531}},
+{ 400920, 2, {771,520}},
+{ 400925, 2, {725,553}},
+{ 400928, 2, {737,544}},
+{ 400932, 2, {666,602}},
+{ 400980, 2, {652,615}},
+{ 400995, 2, {665,603}},
+{ 401004, 2, {711,564}},
+{ 401016, 2, {651,616}},
+{ 401100, 2, {700,573}},
+{ 401104, 2, {688,583}},
+{ 401115, 2, {663,605}},
+{ 401120, 2, {736,545}},
+{ 401128, 2, {728,551}},
+{ 401184, 2, {672,597}},
+{ 401208, 2, {687,584}},
+{ 401250, 2, {642,625}},
+{ 401280, 2, {640,627}},
+{ 401292, 2, {639,628}},
+{ 401302, 2, {638,629}},
+{ 401310, 2, {637,630}},
+{ 401320, 2, {635,632}},
+{ 401376, 2, {678,592}},
+{ 401400, 2, {669,600}},
+{ 401408, 2, {784,512}},
+{ 401436, 2, {708,567}},
+{ 401450, 2, {775,518}},
+{ 401464, 2, {749,536}},
+{ 401472, 2, {656,612}},
+{ 401505, 2, {923,435}},
+{ 401520, 2, {717,560}},
+{ 401544, 2, {676,594}},
+{ 401576, 2, {707,568}},
+{ 401625, 2, {675,595}},
+{ 401676, 2, {716,561}},
+{ 401679, 2, {729,551}},
+{ 401709, 2, {777,517}},
+{ 401715, 2, {711,565}},
+{ 401720, 2, {664,605}},
+{ 401760, 2, {648,620}},
+{ 401793, 2, {1007,399}},
+{ 401800, 2, {700,574}},
+{ 401820, 2, {724,555}},
+{ 401835, 2, {645,623}},
+{ 401841, 2, {891,451}},
+{ 401856, 2, {644,624}},
+{ 401880, 2, {680,591}},
+{ 401940, 2, {638,630}},
+{ 401968, 2, {679,592}},
+{ 401988, 2, {723,556}},
+{ 402000, 2, {670,600}},
+{ 402040, 2, {760,529}},
+{ 402050, 2, {731,550}},
+{ 402084, 2, {657,612}},
+{ 402116, 2, {703,572}},
+{ 402270, 2, {690,583}},
+{ 402280, 2, {712,565}},
+{ 402300, 2, {675,596}},
+{ 402320, 2, {752,535}},
+{ 402336, 2, {762,528}},
+{ 402380, 2, {649,620}},
+{ 402384, 2, {664,606}},
+{ 402402, 2, {737,546}},
+{ 402408, 2, {648,621}},
+{ 402480, 2, {645,624}},
+{ 402500, 2, {644,625}},
+{ 402560, 2, {640,629}},
+{ 402584, 2, {637,632}},
+{ 402588, 2, {636,633}},
+{ 402597, 2, {837,481}},
+{ 402600, 2, {660,610}},
+{ 402624, 2, {699,576}},
+{ 402633, 2, {693,581}},
+{ 402675, 2, {767,525}},
+{ 402688, 2, {704,572}},
+{ 402696, 2, {658,612}},
+{ 402705, 2, {785,513}},
+{ 402780, 2, {685,588}},
+{ 402804, 2, {668,603}},
+{ 402864, 2, {654,616}},
+{ 402876, 2, {684,589}},
+{ 402930, 2, {666,605}},
+{ 402948, 2, {702,574}},
+{ 402960, 2, {690,584}},
+{ 402984, 2, {696,579}},
+{ 402990, 2, {665,606}},
+{ 402996, 2, {781,516}},
+{ 403025, 2, {1175,343}},
+{ 403029, 2, {649,621}},
+{ 403065, 2, {689,585}},
+{ 403104, 2, {646,624}},
+{ 403152, 2, {681,592}},
+{ 403155, 2, {765,527}},
+{ 403170, 2, {755,534}},
+{ 403172, 2, {748,539}},
+{ 403200, 2, {640,630}},
+{ 403245, 2, {783,515}},
+{ 403260, 2, {660,611}},
+{ 403325, 2, {949,425}},
+{ 403326, 2, {679,594}},
+{ 403380, 2, {747,540}},
+{ 403392, 2, {704,573}},
+{ 403403, 2, {1001,403}},
+{ 403410, 2, {678,595}},
+{ 403425, 2, {815,495}},
+{ 403440, 2, {656,615}},
+{ 403480, 2, {655,616}},
+{ 403512, 2, {731,552}},
+{ 403535, 2, {667,605}},
+{ 403560, 2, {684,590}},
+{ 403572, 2, {676,597}},
+{ 403608, 2, {753,536}},
+{ 403620, 2, {651,620}},
+{ 403648, 2, {742,544}},
+{ 403650, 2, {650,621}},
+{ 403690, 2, {730,553}},
+{ 403704, 2, {648,623}},
+{ 403750, 2, {646,625}},
+{ 403760, 2, {721,560}},
+{ 403788, 2, {644,627}},
+{ 403848, 2, {639,632}},
+{ 403860, 2, {636,635}},
+{ 403942, 2, {671,602}},
+{ 403956, 2, {687,588}},
+{ 404000, 2, {800,505}},
+{ 404004, 2, {771,524}},
+{ 404019, 2, {693,583}},
+{ 404040, 2, {728,555}},
+{ 404054, 2, {686,589}},
+{ 404076, 2, {669,604}},
+{ 404085, 2, {869,465}},
+{ 404225, 2, {703,575}},
+{ 404244, 2, {684,591}},
+{ 404260, 2, {697,580}},
+{ 404271, 2, {651,621}},
+{ 404320, 2, {665,608}},
+{ 404376, 2, {664,609}},
+{ 404388, 2, {717,564}},
+{ 404397, 2, {917,441}},
+{ 404490, 2, {695,582}},
+{ 404505, 2, {801,505}},
+{ 404544, 2, {672,602}},
+{ 404547, 2, {759,533}},
+{ 404550, 2, {725,558}},
+{ 404558, 2, {781,518}},
+{ 404586, 2, {741,546}},
+{ 404595, 2, {729,555}},
+{ 404600, 2, {680,595}},
+{ 404670, 2, {658,615}},
+{ 404685, 2, {765,529}},
+{ 404712, 2, {657,616}},
+{ 404736, 2, {744,544}},
+{ 404790, 2, {655,618}},
+{ 404796, 2, {732,553}},
+{ 404800, 2, {704,575}},
+{ 404811, 2, {783,517}},
+{ 404820, 2, {692,585}},
+{ 404838, 2, {714,567}},
+{ 404880, 2, {723,560}},
+{ 404892, 2, {652,621}},
+{ 404928, 2, {666,608}},
+{ 404950, 2, {650,623}},
+{ 404976, 2, {649,624}},
+{ 404992, 2, {791,512}},
+{ 405000, 2, {648,625}},
+{ 405015, 2, {871,465}},
+{ 405060, 2, {645,628}},
+{ 405072, 2, {696,582}},
+{ 405076, 2, {644,629}},
+{ 405080, 2, {760,533}},
+{ 405108, 2, {682,594}},
+{ 405120, 2, {640,633}},
+{ 405132, 2, {637,636}},
+{ 405153, 2, {763,531}},
+{ 405216, 2, {672,603}},
+{ 405275, 2, {725,559}},
+{ 405300, 2, {700,579}},
+{ 405324, 2, {729,556}},
+{ 405408, 2, {656,618}},
+{ 405420, 2, {699,580}},
+{ 405520, 2, {685,592}},
+{ 405536, 2, {667,608}},
+{ 405552, 2, {714,568}},
+{ 405600, 2, {650,624}},
+{ 405625, 2, {649,625}},
+{ 405657, 2, {959,423}},
+{ 405684, 2, {708,573}},
+{ 405720, 2, {644,630}},
+{ 405744, 2, {642,632}},
+{ 405756, 2, {663,612}},
+{ 405765, 2, {639,635}},
+{ 405783, 2, {791,513}},
+{ 405790, 2, {682,595}},
+{ 405834, 2, {726,559}},
+{ 405840, 2, {712,570}},
+{ 405870, 2, {815,498}},
+{ 405876, 2, {681,596}},
+{ 405880, 2, {695,584}},
+{ 405900, 2, {660,615}},
+{ 405920, 2, {688,590}},
+{ 405945, 2, {837,485}},
+{ 405960, 2, {680,597}},
+{ 405972, 2, {716,567}},
+{ 406016, 2, {793,512}},
+{ 406068, 2, {741,548}},
+{ 406080, 2, {705,576}},
+{ 406112, 2, {686,592}},
+{ 406164, 2, {724,561}},
+{ 406224, 2, {651,624}},
+{ 406245, 2, {795,511}},
+{ 406260, 2, {666,610}},
+{ 406296, 2, {648,627}},
+{ 406315, 2, {665,611}},
+{ 406350, 2, {645,630}},
+{ 406400, 2, {640,635}},
+{ 406404, 2, {639,636}},
+{ 406406, 2, {638,637}},
+{ 406410, 2, {690,589}},
+{ 406455, 2, {735,553}},
+{ 406504, 2, {833,488}},
+{ 406525, 2, {707,575}},
+{ 406575, 2, {695,585}},
+{ 406600, 2, {760,535}},
+{ 406608, 2, {688,591}},
+{ 406620, 2, {753,540}},
+{ 406640, 2, {680,598}},
+{ 406692, 2, {711,572}},
+{ 406700, 2, {700,581}},
+{ 406704, 2, {687,592}},
+{ 406752, 2, {669,608}},
+{ 406755, 2, {655,621}},
+{ 406770, 2, {745,546}},
+{ 406800, 2, {678,600}},
+{ 406812, 2, {668,609}},
+{ 406824, 2, {737,552}},
+{ 406847, 2, {931,437}},
+{ 406875, 2, {651,625}},
+{ 406890, 2, {685,594}},
+{ 406912, 2, {704,578}},
+{ 406926, 2, {666,611}},
+{ 406980, 2, {646,630}},
+{ 407040, 2, {640,636}},
+{ 407043, 2, {639,637}},
+{ 407088, 2, {771,528}},
+{ 407115, 2, {747,545}},
+{ 407148, 2, {777,524}},
+{ 407160, 2, {696,585}},
+{ 407232, 2, {672,606}},
+{ 407253, 2, {861,473}},
+{ 407256, 2, {717,568}},
+{ 407330, 2, {770,529}},
+{ 407340, 2, {657,620}},
+{ 407360, 2, {670,608}},
+{ 407376, 2, {656,621}},
+{ 407400, 2, {679,600}},
+{ 407407, 2, {847,481}},
+{ 407456, 2, {749,544}},
+{ 407484, 2, {686,594}},
+{ 407511, 2, {729,559}},
+{ 407550, 2, {650,627}},
+{ 407592, 2, {648,629}},
+{ 407616, 2, {704,579}},
+{ 407628, 2, {676,603}},
+{ 407640, 2, {645,632}},
+{ 407652, 2, {644,633}},
+{ 407670, 2, {642,635}},
+{ 407680, 2, {640,637}},
+{ 407700, 2, {675,604}},
+{ 407740, 2, {703,580}},
+{ 407772, 2, {723,564}},
+{ 407808, 2, {708,576}},
+{ 407827, 2, {1189,343}},
+{ 407835, 2, {795,513}},
+{ 407862, 2, {702,581}},
+{ 407888, 2, {689,592}},
+{ 407898, 2, {731,558}},
+{ 407960, 2, {658,620}},
+{ 407968, 2, {671,608}},
+{ 407976, 2, {712,573}},
+{ 408044, 2, {767,532}},
+{ 408051, 2, {889,459}},
+{ 408096, 2, {654,624}},
+{ 408100, 2, {700,583}},
+{ 408204, 2, {667,612}},
+{ 408216, 2, {699,584}},
+{ 408240, 2, {648,630}},
+{ 408291, 2, {741,551}},
+{ 408320, 2, {640,638}},
+{ 408348, 2, {684,597}},
+{ 408360, 2, {664,615}},
+{ 408375, 2, {675,605}},
+{ 408408, 2, {663,616}},
+{ 408432, 2, {762,536}},
+{ 408480, 2, {690,592}},
+{ 408500, 2, {817,500}},
+{ 408595, 2, {935,437}},
+{ 408600, 2, {681,600}},
+{ 408618, 2, {658,621}},
+{ 408639, 2, {671,609}},
+{ 408660, 2, {695,588}},
+{ 408672, 2, {688,594}},
+{ 408688, 2, {656,623}},
+{ 408720, 2, {655,624}},
+{ 408750, 2, {654,625}},
+{ 408804, 2, {652,627}},
+{ 408807, 2, {721,567}},
+{ 408825, 2, {711,575}},
+{ 408828, 2, {651,628}},
+{ 408850, 2, {650,629}},
+{ 408870, 2, {649,630}},
+{ 408900, 2, {705,580}},
+{ 408960, 2, {640,639}},
+{ 408968, 2, {763,536}},
+{ 408969, 2, {729,561}},
+{ 408972, 2, {692,591}},
+{ 408980, 2, {676,605}},
+{ 409005, 2, {745,549}},
+{ 409032, 2, {684,598}},
+{ 409035, 2, {737,555}},
+{ 409045, 2, {899,455}},
+{ 409101, 2, {759,539}},
+{ 409220, 2, {740,553}},
+{ 409248, 2, {672,609}},
+{ 409266, 2, {689,594}},
+{ 409275, 2, {765,535}},
+{ 409311, 2, {657,623}},
+{ 409356, 2, {747,548}},
+{ 409360, 2, {680,602}},
+{ 409374, 2, {722,567}},
+{ 409400, 2, {712,575}},
+{ 409428, 2, {669,612}},
+{ 409437, 2, {679,603}},
+{ 409452, 2, {687,596}},
+{ 409479, 2, {651,629}},
+{ 409500, 2, {650,630}},
+{ 409528, 2, {721,568}},
+{ 409590, 2, {666,615}},
+{ 409605, 2, {705,581}},
+{ 409632, 2, {753,544}},
+{ 409640, 2, {665,616}},
+{ 409696, 2, {826,496}},
+{ 409728, 2, {704,582}},
+{ 409770, 2, {785,522}},
+{ 409836, 2, {697,588}},
+{ 409840, 2, {752,545}},
+{ 409860, 2, {660,621}},
+{ 409887, 2, {799,513}},
+{ 409920, 2, {672,610}},
+{ 409932, 2, {708,579}},
+{ 409944, 2, {696,589}},
+{ 409955, 2, {689,595}},
+{ 409968, 2, {657,624}},
+{ 409975, 2, {713,575}},
+{ 410000, 2, {656,625}},
+{ 410025, 2, {781,525}},
+{ 410040, 2, {670,612}},
+{ 410060, 2, {707,580}},
+{ 410091, 2, {731,561}},
+{ 410124, 2, {717,572}},
+{ 410130, 2, {651,630}},
+{ 410172, 2, {771,532}},
+{ 410176, 2, {754,544}},
+{ 410184, 2, {648,633}},
+{ 410190, 2, {678,605}},
+{ 410220, 2, {645,636}},
+{ 410256, 2, {666,616}},
+{ 410268, 2, {716,573}},
+{ 410292, 2, {783,524}},
+{ 410352, 2, {664,618}},
+{ 410375, 2, {875,469}},
+{ 410400, 2, {675,608}},
+{ 410432, 2, {704,583}},
+{ 410508, 2, {724,567}},
+{ 410550, 2, {690,595}},
+{ 410571, 2, {931,441}},
+{ 410592, 2, {658,624}},
+{ 410625, 2, {657,625}},
+{ 410640, 2, {696,590}},
+{ 410652, 2, {671,612}},
+{ 410664, 2, {723,568}},
+{ 410669, 2, {833,493}},
+{ 410688, 2, {713,576}},
+{ 410736, 2, {688,597}},
+{ 410774, 2, {793,518}},
+{ 410820, 2, {668,615}},
+{ 410844, 2, {804,511}},
+{ 410865, 2, {645,637}},
+{ 410872, 2, {644,638}},
+{ 410880, 2, {642,640}},
+{ 410970, 2, {665,618}},
+{ 411000, 2, {685,600}},
+{ 411012, 2, {699,588}},
+{ 411015, 2, {705,583}},
+{ 411060, 2, {663,620}},
+{ 411075, 2, {675,609}},
+{ 411156, 2, {729,564}},
+{ 411180, 2, {660,623}},
+{ 411201, 2, {749,549}},
+{ 411250, 2, {658,625}},
+{ 411255, 2, {703,585}},
+{ 411264, 2, {672,612}},
+{ 411312, 2, {656,627}},
+{ 411320, 2, {728,565}},
+{ 411324, 2, {681,604}},
+{ 411336, 2, {696,591}},
+{ 411348, 2, {708,581}},
+{ 411400, 2, {680,605}},
+{ 411432, 2, {651,632}},
+{ 411440, 2, {695,592}},
+{ 411480, 2, {648,635}},
+{ 411502, 2, {646,637}},
+{ 411516, 2, {644,639}},
+{ 411525, 2, {775,531}},
+{ 411579, 2, {973,423}},
+{ 411600, 2, {686,600}},
+{ 411684, 2, {676,609}},
+{ 411720, 2, {705,584}},
+{ 411750, 2, {675,610}},
+{ 411768, 2, {684,602}},
+{ 411810, 2, {742,555}},
+{ 411840, 2, {660,624}},
+{ 411885, 2, {729,565}},
+{ 411950, 2, {749,550}},
+{ 411996, 2, {741,556}},
+{ 412000, 2, {800,515}},
+{ 412080, 2, {680,606}},
+{ 412090, 2, {841,490}},
+{ 412104, 2, {669,616}},
+{ 412114, 2, {713,578}},
+{ 412160, 2, {644,640}},
+{ 412200, 2, {687,600}},
+{ 412224, 2, {678,608}},
+{ 412230, 2, {755,546}},
+{ 412248, 2, {712,579}},
+{ 412269, 2, {961,429}},
+{ 412335, 2, {693,595}},
+{ 412344, 2, {664,621}},
+{ 412368, 2, {726,568}},
+{ 412380, 2, {711,580}},
+{ 412425, 2, {675,611}},
+{ 412452, 2, {684,603}},
+{ 412500, 2, {660,625}},
+{ 412510, 2, {710,581}},
+{ 412515, 2, {801,515}},
+{ 412542, 2, {738,559}},
+{ 412560, 2, {720,573}},
+{ 412596, 2, {657,628}},
+{ 412641, 2, {783,527}},
+{ 412644, 2, {753,548}},
+{ 412650, 2, {655,630}},
+{ 412665, 2, {671,615}},
+{ 412672, 2, {806,512}},
+{ 412716, 2, {652,633}},
+{ 412764, 2, {649,636}},
+{ 412775, 2, {869,475}},
+{ 412776, 2, {648,637}},
+{ 412800, 2, {645,640}},
+{ 412815, 2, {949,435}},
+{ 412830, 2, {695,594}},
+{ 412832, 2, {679,608}},
+{ 412888, 2, {707,584}},
+{ 412896, 2, {736,561}},
+{ 412965, 2, {665,621}},
+{ 412984, 2, {722,572}},
+{ 412992, 2, {717,576}},
+{ 413028, 2, {693,596}},
+{ 413055, 2, {685,603}},
+{ 413075, 2, {775,533}},
+{ 413091, 2, {711,581}},
+{ 413100, 2, {675,612}},
+{ 413105, 2, {1015,407}},
+{ 413124, 2, {692,597}},
+{ 413168, 2, {784,527}},
+{ 413250, 2, {725,570}},
+{ 413256, 2, {771,536}},
+{ 413270, 2, {715,578}},
+{ 413280, 2, {656,630}},
+{ 413328, 2, {654,632}},
+{ 413336, 2, {671,616}},
+{ 413364, 2, {703,588}},
+{ 413400, 2, {650,636}},
+{ 413402, 2, {817,506}},
+{ 413413, 2, {649,637}},
+{ 413424, 2, {648,638}},
+{ 413440, 2, {646,640}},
+{ 413478, 2, {702,589}},
+{ 413556, 2, {723,572}},
+{ 413595, 2, {707,585}},
+{ 413600, 2, {752,550}},
+{ 413660, 2, {740,559}},
+{ 413672, 2, {664,623}},
+{ 413700, 2, {700,591}},
+{ 413712, 2, {663,624}},
+{ 413725, 2, {871,475}},
+{ 413808, 2, {699,592}},
+{ 413820, 2, {660,627}},
+{ 413850, 2, {775,534}},
+{ 413875, 2, {875,473}},
+{ 413952, 2, {672,616}},
+{ 413960, 2, {655,632}},
+{ 414000, 2, {690,600}},
+{ 414018, 2, {697,594}},
+{ 414036, 2, {651,636}},
+{ 414048, 2, {681,608}},
+{ 414050, 2, {650,637}},
+{ 414072, 2, {648,639}},
+{ 414120, 2, {680,609}},
+{ 414141, 2, {777,533}},
+{ 414180, 2, {702,590}},
+{ 414190, 2, {679,610}},
+{ 414200, 2, {760,545}},
+{ 414207, 2, {667,621}},
+{ 414348, 2, {803,516}},
+{ 414375, 2, {663,625}},
+{ 414384, 2, {712,582}},
+{ 414414, 2, {693,598}},
+{ 414477, 2, {731,567}},
+{ 414495, 2, {755,549}},
+{ 414528, 2, {762,544}},
+{ 414540, 2, {658,630}},
+{ 414564, 2, {716,579}},
+{ 414575, 2, {721,575}},
+{ 414596, 2, {871,476}},
+{ 414656, 2, {682,608}},
+{ 414675, 2, {855,485}},
+{ 414700, 2, {650,638}},
+{ 414715, 2, {697,595}},
+{ 414720, 2, {648,640}},
+{ 414750, 2, {750,553}},
+{ 414778, 2, {689,602}},
+{ 414780, 2, {669,620}},
+{ 414828, 2, {668,621}},
+{ 414852, 2, {724,573}},
+{ 414864, 2, {688,603}},
+{ 414918, 2, {666,623}},
+{ 414948, 2, {687,604}},
+{ 414960, 2, {665,624}},
+{ 414990, 2, {783,530}},
+{ 415000, 2, {664,625}},
+{ 415008, 2, {786,528}},
+{ 415030, 2, {686,605}},
+{ 415044, 2, {732,567}},
+{ 415065, 2, {885,469}},
+{ 415072, 2, {763,544}},
+{ 415104, 2, {736,564}},
+{ 415110, 2, {685,606}},
+{ 415125, 2, {675,615}},
+{ 415140, 2, {660,629}},
+{ 415160, 2, {776,535}},
+{ 415224, 2, {657,632}},
+{ 415248, 2, {656,633}},
+{ 415290, 2, {654,635}},
+{ 415296, 2, {672,618}},
+{ 415332, 2, {747,556}},
+{ 415360, 2, {649,640}},
+{ 415380, 2, {645,644}},
+{ 415480, 2, {680,611}},
+{ 415492, 2, {781,532}},
+{ 415512, 2, {696,597}},
+{ 415520, 2, {742,560}},
+{ 415530, 2, {729,570}},
+{ 415548, 2, {679,612}},
+{ 415584, 2, {666,624}},
+{ 415625, 2, {665,625}},
+{ 415650, 2, {815,510}},
+{ 415656, 2, {753,552}},
+{ 415668, 2, {737,564}},
+{ 415695, 2, {749,555}},
+{ 415710, 2, {745,558}},
+{ 415740, 2, {676,615}},
+{ 415744, 2, {812,512}},
+{ 415840, 2, {736,565}},
+{ 415860, 2, {717,580}},
+{ 415872, 2, {684,608}},
+{ 415896, 2, {744,559}},
+{ 415932, 2, {759,548}},
+{ 415954, 2, {803,518}},
+{ 416000, 2, {650,640}},
+{ 416016, 2, {648,642}},
+{ 416020, 2, {671,620}},
+{ 416064, 2, {704,591}},
+{ 416070, 2, {670,621}},
+{ 416120, 2, {808,515}},
+{ 416130, 2, {715,582}},
+{ 416150, 2, {725,574}},
+{ 416185, 2, {805,517}},
+{ 416208, 2, {667,624}},
+{ 416240, 2, {688,605}},
+{ 416250, 2, {666,625}},
+{ 416262, 2, {714,583}},
+{ 416295, 2, {841,495}},
+{ 416325, 2, {793,525}},
+{ 416328, 2, {664,627}},
+{ 416340, 2, {771,540}},
+{ 416364, 2, {663,628}},
+{ 416416, 2, {676,616}},
+{ 416448, 2, {723,576}},
+{ 416472, 2, {777,536}},
+{ 416480, 2, {685,608}},
+{ 416500, 2, {700,595}},
+{ 416520, 2, {712,585}},
+{ 416556, 2, {684,609}},
+{ 416560, 2, {656,635}},
+{ 416580, 2, {655,636}},
+{ 416585, 2, {845,493}},
+{ 416592, 2, {789,528}},
+{ 416604, 2, {699,596}},
+{ 416628, 2, {652,639}},
+{ 416640, 2, {651,640}},
+{ 416691, 2, {671,621}},
+{ 416702, 2, {682,611}},
+{ 416745, 2, {735,567}},
+{ 416772, 2, {681,612}},
+{ 416806, 2, {697,598}},
+{ 416835, 2, {785,531}},
+{ 416845, 2, {689,605}},
+{ 416875, 2, {667,625}},
+{ 416880, 2, {720,579}},
+{ 416925, 2, {765,545}},
+{ 416928, 2, {688,606}},
+{ 416976, 2, {714,584}},
+{ 417000, 2, {695,600}},
+{ 417027, 2, {663,629}},
+{ 417078, 2, {799,522}},
+{ 417088, 2, {686,608}},
+{ 417105, 2, {713,585}},
+{ 417130, 2, {707,590}},
+{ 417144, 2, {728,573}},
+{ 417175, 2, {925,451}},
+{ 417195, 2, {657,635}},
+{ 417216, 2, {656,636}},
+{ 417240, 2, {684,610}},
+{ 417248, 2, {767,544}},
+{ 417276, 2, {692,603}},
+{ 417312, 2, {648,644}},
+{ 417339, 2, {783,533}},
+{ 417360, 2, {705,592}},
+{ 417384, 2, {682,612}},
+{ 417410, 2, {670,623}},
+{ 417450, 2, {690,605}},
+{ 417456, 2, {669,624}},
+{ 417480, 2, {710,588}},
+{ 417560, 2, {715,584}},
+{ 417571, 2, {847,493}},
+{ 417585, 2, {679,615}},
+{ 417648, 2, {678,616}},
+{ 417690, 2, {663,630}},
+{ 417696, 2, {687,608}},
+{ 417725, 2, {775,539}},
+{ 417780, 2, {660,633}},
+{ 417852, 2, {657,636}},
+{ 417872, 2, {656,637}},
+{ 417900, 2, {700,597}},
+{ 417924, 2, {684,611}},
+{ 417956, 2, {649,644}},
+{ 417960, 2, {648,645}},
+{ 418068, 2, {711,588}},
+{ 418080, 2, {670,624}},
+{ 418095, 2, {815,513}},
+{ 418132, 2, {731,572}},
+{ 418176, 2, {704,594}},
+{ 418180, 2, {721,580}},
+{ 418200, 2, {680,615}},
+{ 418209, 2, {667,627}},
+{ 418264, 2, {679,616}},
+{ 418275, 2, {715,585}},
+{ 418285, 2, {665,629}},
+{ 418320, 2, {664,630}},
+{ 418418, 2, {847,494}},
+{ 418428, 2, {708,591}},
+{ 418446, 2, {729,574}},
+{ 418500, 2, {675,620}},
+{ 418509, 2, {657,637}},
+{ 418544, 2, {707,592}},
+{ 418545, 2, {655,639}},
+{ 418560, 2, {654,640}},
+{ 418572, 2, {693,604}},
+{ 418600, 2, {650,644}},
+{ 418605, 2, {649,645}},
+{ 418608, 2, {648,646}},
+{ 418656, 2, {672,623}},
+{ 418668, 2, {753,556}},
+{ 418704, 2, {671,624}},
+{ 418728, 2, {717,584}},
+{ 418770, 2, {705,594}},
+{ 418782, 2, {767,546}},
+{ 418836, 2, {668,627}},
+{ 418860, 2, {716,585}},
+{ 418887, 2, {763,549}},
+{ 418905, 2, {783,535}},
+{ 418912, 2, {689,608}},
+{ 418950, 2, {665,630}},
+{ 418968, 2, {759,552}},
+{ 418992, 2, {688,609}},
+{ 419016, 2, {663,632}},
+{ 419040, 2, {720,582}},
+{ 419085, 2, {695,603}},
+{ 419100, 2, {660,635}},
+{ 419121, 2, {817,513}},
+{ 419136, 2, {708,592}},
+{ 419184, 2, {656,639}},
+{ 419190, 2, {785,534}},
+{ 419196, 2, {724,579}},
+{ 419200, 2, {655,640}},
+{ 419220, 2, {685,612}},
+{ 419244, 2, {651,644}},
+{ 419265, 2, {693,605}},
+{ 419340, 2, {723,580}},
+{ 419375, 2, {671,625}},
+{ 419400, 2, {699,600}},
+{ 419424, 2, {771,544}},
+{ 419436, 2, {732,573}},
+{ 419440, 2, {749,560}},
+{ 419496, 2, {681,616}},
+{ 419520, 2, {690,608}},
+{ 419601, 2, {689,609}},
+{ 419628, 2, {726,578}},
+{ 419650, 2, {763,550}},
+{ 419680, 2, {688,610}},
+{ 419688, 2, {696,603}},
+{ 419748, 2, {789,532}},
+{ 419796, 2, {676,621}},
+{ 419832, 2, {686,612}},
+{ 419881, 2, {779,539}},
+{ 419900, 2, {650,646}},
+{ 420000, 2, {672,625}},
+{ 420021, 2, {791,531}},
+{ 420112, 2, {682,616}},
+{ 420132, 2, {669,628}},
+{ 420147, 2, {741,567}},
+{ 420180, 2, {705,596}},
+{ 420210, 2, {667,630}},
+{ 420240, 2, {680,618}},
+{ 420280, 2, {665,632}},
+{ 420288, 2, {704,597}},
+{ 420312, 2, {664,633}},
+{ 420320, 2, {710,592}},
+{ 420325, 2, {731,575}},
+{ 420368, 2, {688,611}},
+{ 420394, 2, {703,598}},
+{ 420420, 2, {660,637}},
+{ 420444, 2, {687,612}},
+{ 420480, 2, {657,640}},
+{ 420510, 2, {655,642}},
+{ 420525, 2, {675,623}},
+{ 420540, 2, {652,645}},
+{ 420552, 2, {649,648}},
+{ 420624, 2, {762,552}},
+{ 420660, 2, {684,615}},
+{ 420693, 2, {871,483}},
+{ 420714, 2, {742,567}},
+{ 420750, 2, {750,561}},
+{ 420784, 2, {728,578}},
+{ 420792, 2, {712,591}},
+{ 420875, 2, {875,481}},
+{ 420888, 2, {741,568}},
+{ 420903, 2, {917,459}},
+{ 420912, 2, {666,632}},
+{ 420959, 2, {781,539}},
+{ 420980, 2, {679,620}},
+{ 420992, 2, {704,598}},
+{ 421056, 2, {688,612}},
+{ 421064, 2, {721,584}},
+{ 421080, 2, {660,638}},
+{ 421120, 2, {658,640}},
+{ 421135, 2, {715,589}},
+{ 421152, 2, {656,642}},
+{ 421170, 2, {695,606}},
+{ 421200, 2, {650,648}},
+{ 421225, 2, {725,581}},
+{ 421260, 2, {708,595}},
+{ 421290, 2, {755,558}},
+{ 421296, 2, {786,536}},
+{ 421308, 2, {747,564}},
+{ 421344, 2, {672,627}},
+{ 421362, 2, {729,578}},
+{ 421400, 2, {700,602}},
+{ 421428, 2, {692,609}},
+{ 421443, 2, {891,473}},
+{ 421498, 2, {782,539}},
+{ 421512, 2, {728,579}},
+{ 421515, 2, {765,551}},
+{ 421575, 2, {803,525}},
+{ 421590, 2, {690,611}},
+{ 421596, 2, {717,588}},
+{ 421632, 2, {732,576}},
+{ 421640, 2, {664,635}},
+{ 421659, 2, {679,621}},
+{ 421668, 2, {663,636}},
+{ 421680, 2, {753,560}},
+{ 421685, 2, {697,605}},
+{ 421728, 2, {736,573}},
+{ 421740, 2, {660,639}},
+{ 421776, 2, {696,606}},
+{ 421785, 2, {721,585}},
+{ 421800, 2, {703,600}},
+{ 421848, 2, {651,648}},
+{ 421850, 2, {650,649}},
+{ 421875, 2, {675,625}},
+{ 421876, 2, {793,532}},
+{ 421890, 2, {686,615}},
+{ 421950, 2, {725,582}},
+{ 421960, 2, {685,616}},
+{ 422004, 2, {759,556}},
+{ 422055, 2, {747,565}},
+{ 422100, 2, {670,630}},
+{ 422142, 2, {798,529}},
+{ 422196, 2, {699,604}},
+{ 422220, 2, {681,620}},
+{ 422232, 2, {723,584}},
+{ 422280, 2, {680,621}},
+{ 422331, 2, {663,637}},
+{ 422370, 2, {722,585}},
+{ 422400, 2, {660,640}},
+{ 422415, 2, {745,567}},
+{ 422499, 2, {651,649}},
+{ 422508, 2, {771,548}},
+{ 422560, 2, {695,608}},
+{ 422604, 2, {702,602}},
+{ 422675, 2, {725,583}},
+{ 422676, 2, {708,597}},
+{ 422685, 2, {837,505}},
+{ 422688, 2, {672,629}},
+{ 422730, 2, {671,630}},
+{ 422807, 2, {1309,323}},
+{ 422808, 2, {669,632}},
+{ 422820, 2, {729,580}},
+{ 422844, 2, {668,633}},
+{ 422904, 2, {789,536}},
+{ 422910, 2, {666,635}},
+{ 422912, 2, {826,512}},
+{ 422919, 2, {959,441}},
+{ 422920, 2, {776,545}},
+{ 422928, 2, {712,594}},
+{ 422940, 2, {665,636}},
+{ 422968, 2, {664,637}},
+{ 423000, 2, {705,600}},
+{ 423038, 2, {737,574}},
+{ 423045, 2, {711,595}},
+{ 423072, 2, {678,624}},
+{ 423108, 2, {657,644}},
+{ 423120, 2, {656,645}},
+{ 423150, 2, {651,650}},
+{ 423156, 2, {716,591}},
+{ 423168, 2, {696,608}},
+{ 423192, 2, {687,616}},
+{ 423200, 2, {736,575}},
+{ 423225, 2, {675,627}},
+{ 423280, 2, {715,592}},
+{ 423325, 2, {1025,413}},
+{ 423330, 2, {685,618}},
+{ 423360, 2, {672,630}},
+{ 423400, 2, {725,584}},
+{ 423423, 2, {693,611}},
+{ 423453, 2, {969,437}},
+{ 423465, 2, {763,555}},
+{ 423500, 2, {700,605}},
+{ 423522, 2, {682,621}},
+{ 423540, 2, {724,585}},
+{ 423549, 2, {729,581}},
+{ 423584, 2, {854,496}},
+{ 423640, 2, {680,623}},
+{ 423696, 2, {679,624}},
+{ 423735, 2, {689,615}},
+{ 423750, 2, {678,625}},
+{ 423756, 2, {711,596}},
+{ 423775, 2, {737,575}},
+{ 423792, 2, {654,648}},
+{ 423828, 2, {732,579}},
+{ 423852, 2, {676,627}},
+{ 423864, 2, {696,609}},
+{ 423900, 2, {675,628}},
+{ 423940, 2, {820,517}},
+{ 423976, 2, {791,536}},
+{ 423980, 2, {731,580}},
+{ 423984, 2, {726,584}},
+{ 424000, 2, {800,530}},
+{ 424020, 2, {740,573}},
+{ 424053, 2, {889,477}},
+{ 424080, 2, {684,620}},
+{ 424116, 2, {693,612}},
+{ 424125, 2, {725,585}},
+{ 424130, 2, {730,581}},
+{ 424175, 2, {893,475}},
+{ 424235, 2, {713,595}},
+{ 424242, 2, {666,637}},
+{ 424270, 2, {665,638}},
+{ 424281, 2, {759,559}},
+{ 424296, 2, {664,639}},
+{ 424320, 2, {663,640}},
+{ 424375, 2, {679,625}},
+{ 424410, 2, {658,645}},
+{ 424424, 2, {689,616}},
+{ 424440, 2, {655,648}},
+{ 424452, 2, {652,651}},
+{ 424464, 2, {717,592}},
+{ 424473, 2, {697,609}},
+{ 424512, 2, {704,603}},
+{ 424536, 2, {722,588}},
+{ 424545, 2, {913,465}},
+{ 424560, 2, {696,610}},
+{ 424575, 2, {675,629}},
+{ 424650, 2, {745,570}},
+{ 424683, 2, {749,567}},
+{ 424692, 2, {753,564}},
+{ 424710, 2, {702,605}},
+{ 424760, 2, {740,574}},
+{ 424764, 2, {684,621}},
+{ 424840, 2, {760,559}},
+{ 424879, 2, {667,637}},
+{ 424880, 2, {752,565}},
+{ 424935, 2, {665,639}},
+{ 424944, 2, {681,624}},
+{ 424992, 2, {699,608}},
+{ 425000, 2, {680,625}},
+{ 425007, 2, {729,583}},
+{ 425040, 2, {660,644}},
+{ 425064, 2, {712,597}},
+{ 425124, 2, {723,588}},
+{ 425184, 2, {688,618}},
+{ 425204, 2, {676,629}},
+{ 425256, 2, {696,611}},
+{ 425292, 2, {732,581}},
+{ 425315, 2, {703,605}},
+{ 425320, 2, {686,620}},
+{ 425340, 2, {695,612}},
+{ 425376, 2, {672,633}},
+{ 425385, 2, {685,621}},
+{ 425390, 2, {721,590}},
+{ 425430, 2, {815,522}},
+{ 425432, 2, {749,568}},
+{ 425475, 2, {775,549}},
+{ 425484, 2, {669,636}},
+{ 425520, 2, {720,591}},
+{ 425568, 2, {682,624}},
+{ 425580, 2, {692,615}},
+{ 425592, 2, {771,552}},
+{ 425600, 2, {665,640}},
+{ 425685, 2, {767,555}},
+{ 425700, 2, {660,645}},
+{ 425736, 2, {657,648}},
+{ 425744, 2, {656,649}},
+{ 425796, 2, {777,548}},
+{ 425810, 2, {770,553}},
+{ 425820, 2, {705,604}},
+{ 425850, 2, {835,510}},
+{ 425880, 2, {676,630}},
+{ 425920, 2, {704,605}},
+{ 425940, 2, {687,620}},
+{ 426000, 2, {710,600}},
+{ 426006, 2, {686,621}},
+{ 426060, 2, {789,540}},
+{ 426120, 2, {670,636}},
+{ 426132, 2, {684,623}},
+{ 426144, 2, {736,579}},
+{ 426240, 2, {666,640}},
+{ 426250, 2, {682,625}},
+{ 426275, 2, {1003,425}},
+{ 426288, 2, {664,642}},
+{ 426300, 2, {700,609}},
+{ 426312, 2, {744,573}},
+{ 426321, 2, {707,603}},
+{ 426360, 2, {660,646}},
+{ 426374, 2, {713,598}},
+{ 426384, 2, {658,648}},
+{ 426387, 2, {841,507}},
+{ 426400, 2, {656,650}},
+{ 426426, 2, {781,546}},
+{ 426465, 2, {729,585}},
+{ 426564, 2, {697,612}},
+{ 426600, 2, {675,632}},
+{ 426624, 2, {704,606}},
+{ 426650, 2, {742,575}},
+{ 426720, 2, {672,635}},
+{ 426735, 2, {783,545}},
+{ 426756, 2, {671,636}},
+{ 426790, 2, {670,637}},
+{ 426816, 2, {684,624}},
+{ 426832, 2, {721,592}},
+{ 426852, 2, {668,639}},
+{ 426880, 2, {667,640}},
+{ 426888, 2, {693,616}},
+{ 426924, 2, {708,603}},
+{ 426930, 2, {665,642}},
+{ 426972, 2, {663,644}},
+{ 427025, 2, {725,589}},
+{ 427035, 2, {735,581}},
+{ 427042, 2, {658,649}},
+{ 427056, 2, {656,651}},
+{ 427063, 2, {1183,361}},
+{ 427180, 2, {689,620}},
+{ 427196, 2, {803,532}},
+{ 427248, 2, {688,621}},
+{ 427280, 2, {763,560}},
+{ 427284, 2, {747,572}},
+{ 427329, 2, {833,513}},
+{ 427332, 2, {717,596}},
+{ 427392, 2, {672,636}},
+{ 427424, 2, {703,608}},
+{ 427427, 2, {671,637}},
+{ 427440, 2, {685,624}},
+{ 427452, 2, {716,597}},
+{ 427455, 2, {805,531}},
+{ 427500, 2, {684,625}},
+{ 427518, 2, {702,609}},
+{ 427548, 2, {869,492}},
+{ 427570, 2, {715,598}},
+{ 427584, 2, {786,544}},
+{ 427668, 2, {681,628}},
+{ 427680, 2, {660,648}},
+{ 427700, 2, {658,650}},
+{ 427704, 2, {753,568}},
+{ 427720, 2, {680,629}},
+{ 427721, 2, {1247,343}},
+{ 427728, 2, {798,536}},
+{ 427770, 2, {679,630}},
+{ 427788, 2, {699,612}},
+{ 427869, 2, {689,621}},
+{ 427884, 2, {724,591}},
+{ 427908, 2, {676,633}},
+{ 427924, 2, {812,527}},
+{ 427975, 2, {901,475}},
+{ 427986, 2, {767,558}},
+{ 428000, 2, {800,535}},
+{ 428016, 2, {723,592}},
+{ 428040, 2, {696,615}},
+{ 428064, 2, {672,637}},
+{ 428076, 2, {759,564}},
+{ 428085, 2, {755,567}},
+{ 428120, 2, {695,616}},
+{ 428127, 2, {703,609}},
+{ 428160, 2, {669,640}},
+{ 428220, 2, {702,610}},
+{ 428280, 2, {664,645}},
+{ 428298, 2, {663,646}},
+{ 428340, 2, {660,649}},
+{ 428352, 2, {736,582}},
+{ 428355, 2, {835,513}},
+{ 428364, 2, {657,652}},
+{ 428370, 2, {655,654}},
+{ 428400, 2, {680,630}},
+{ 428450, 2, {779,550}},
+{ 428460, 2, {740,579}},
+{ 428496, 2, {678,632}},
+{ 428505, 2, {735,583}},
+{ 428535, 2, {801,535}},
+{ 428544, 2, {744,576}},
+{ 428571, 2, {891,481}},
+{ 428575, 2, {775,553}},
+{ 428604, 2, {748,573}},
+{ 428610, 2, {785,546}},
+{ 428624, 2, {688,623}},
+{ 428625, 2, {675,635}},
+{ 428640, 2, {705,608}},
+{ 428652, 2, {729,588}},
+{ 428676, 2, {771,556}},
+{ 428688, 2, {687,624}},
+{ 428736, 2, {672,638}},
+{ 428750, 2, {686,625}},
+{ 428778, 2, {738,581}},
+{ 428792, 2, {728,589}},
+{ 428800, 2, {670,640}},
+{ 428868, 2, {684,627}},
+{ 428910, 2, {841,510}},
+{ 428922, 2, {702,611}},
+{ 428978, 2, {682,629}},
+{ 429000, 2, {660,650}},
+{ 429024, 2, {656,654}},
+{ 429065, 2, {805,533}},
+{ 429084, 2, {783,548}},
+{ 429088, 2, {736,583}},
+{ 429093, 2, {973,441}},
+{ 429128, 2, {679,632}},
+{ 429135, 2, {915,469}},
+{ 429195, 2, {923,465}},
+{ 429200, 2, {725,592}},
+{ 429216, 2, {789,544}},
+{ 429240, 2, {730,588}},
+{ 429300, 2, {675,636}},
+{ 429336, 2, {712,603}},
+{ 429352, 2, {697,616}},
+{ 429381, 2, {729,589}},
+{ 429400, 2, {760,565}},
+{ 429408, 2, {672,639}},
+{ 429429, 2, {847,507}},
+{ 429440, 2, {671,640}},
+{ 429444, 2, {711,604}},
+{ 429510, 2, {695,618}},
+{ 429525, 2, {747,575}},
+{ 429548, 2, {667,644}},
+{ 429570, 2, {666,645}},
+{ 429624, 2, {663,648}},
+{ 429660, 2, {660,651}},
+{ 429680, 2, {656,655}},
+{ 429732, 2, {692,621}},
+{ 429780, 2, {741,580}},
+{ 429792, 2, {726,592}},
+{ 429840, 2, {720,597}},
+{ 429856, 2, {707,608}},
+{ 429870, 2, {690,623}},
+{ 429913, 2, {1331,323}},
+{ 429940, 2, {740,581}},
+{ 429975, 2, {675,637}},
+{ 430000, 2, {688,625}},
+{ 430008, 2, {779,552}},
+{ 430080, 2, {672,640}},
+{ 430110, 2, {729,590}},
+{ 430122, 2, {686,627}},
+{ 430128, 2, {696,618}},
+{ 430144, 2, {704,611}},
+{ 430155, 2, {711,605}},
+{ 430200, 2, {717,600}},
+{ 430248, 2, {728,591}},
+{ 430254, 2, {738,583}},
+{ 430304, 2, {791,544}},
+{ 430335, 2, {657,655}},
+{ 430350, 2, {755,570}},
+{ 430360, 2, {742,580}},
+{ 430392, 2, {681,632}},
+{ 430440, 2, {680,633}},
+{ 430464, 2, {708,608}},
+{ 430500, 2, {700,615}},
+{ 430530, 2, {678,635}},
+{ 430560, 2, {690,624}},
+{ 430584, 2, {699,616}},
+{ 430592, 2, {841,512}},
+{ 430625, 2, {689,625}},
+{ 430650, 2, {675,638}},
+{ 430661, 2, {799,539}},
+{ 430675, 2, {749,575}},
+{ 430716, 2, {753,572}},
+{ 430760, 2, {712,605}},
+{ 430776, 2, {744,579}},
+{ 430836, 2, {669,644}},
+{ 430848, 2, {704,612}},
+{ 430860, 2, {668,645}},
+{ 430882, 2, {667,646}},
+{ 430896, 2, {752,573}},
+{ 430908, 2, {723,596}},
+{ 430920, 2, {665,648}},
+{ 430950, 2, {663,650}},
+{ 430965, 2, {785,549}},
+{ 430992, 2, {657,656}},
+{ 431055, 2, {837,515}},
+{ 431112, 2, {759,568}},
+{ 431145, 2, {715,603}},
+{ 431172, 2, {708,609}},
+{ 431200, 2, {700,616}},
+{ 431250, 2, {690,625}},
+{ 431270, 2, {707,610}},
+{ 431319, 2, {893,483}},
+{ 431340, 2, {780,553}},
+{ 431365, 2, {713,605}},
+{ 431376, 2, {688,627}},
+{ 431392, 2, {793,544}},
+{ 431420, 2, {740,583}},
+{ 431424, 2, {672,642}},
+{ 431436, 2, {687,628}},
+{ 431457, 2, {851,507}},
+{ 431460, 2, {705,612}},
+{ 431472, 2, {712,606}},
+{ 431494, 2, {686,629}},
+{ 431520, 2, {696,620}},
+{ 431550, 2, {685,630}},
+{ 431568, 2, {666,648}},
+{ 431585, 2, {665,649}},
+{ 431595, 2, {695,621}},
+{ 431648, 2, {658,656}},
+{ 431680, 2, {710,608}},
+{ 431730, 2, {702,615}},
+{ 431739, 2, {693,623}},
+{ 431748, 2, {716,603}},
+{ 431760, 2, {771,560}},
+{ 431775, 2, {855,505}},
+{ 431800, 2, {680,635}},
+{ 431844, 2, {679,636}},
+{ 431880, 2, {708,610}},
+{ 431964, 2, {676,639}},
+{ 431970, 2, {714,605}},
+{ 431984, 2, {784,551}},
+{ 432000, 2, {675,640}},
+{ 432003, 2, {689,627}},
+{ 432012, 2, {777,556}},
+{ 432055, 2, {1105,391}},
+{ 432124, 2, {671,644}},
+{ 432140, 2, {697,620}},
+{ 432160, 2, {730,592}},
+{ 432180, 2, {686,630}},
+{ 432216, 2, {667,648}},
+{ 432225, 2, {765,565}},
+{ 432228, 2, {724,597}},
+{ 432234, 2, {666,649}},
+{ 432250, 2, {665,650}},
+{ 432264, 2, {664,651}},
+{ 432276, 2, {663,652}},
+{ 432280, 2, {808,535}},
+{ 432300, 2, {660,655}},
+{ 432372, 2, {789,548}},
+{ 432400, 2, {752,575}},
+{ 432432, 2, {693,624}},
+{ 432450, 2, {775,558}},
+{ 432540, 2, {801,540}},
+{ 432612, 2, {732,591}},
+{ 432621, 2, {763,567}},
+{ 432640, 2, {676,640}},
+{ 432684, 2, {707,612}},
+{ 432729, 2, {837,517}},
+{ 432744, 2, {741,584}},
+{ 432765, 2, {815,531}},
+{ 432768, 2, {672,644}},
+{ 432795, 2, {671,645}},
+{ 432816, 2, {762,568}},
+{ 432817, 2, {803,539}},
+{ 432837, 2, {697,621}},
+{ 432900, 2, {666,650}},
+{ 432920, 2, {685,632}},
+{ 432960, 2, {660,656}},
+{ 432972, 2, {684,633}},
+{ 432978, 2, {793,546}},
+{ 433008, 2, {744,582}},
+{ 433048, 2, {703,616}},
+{ 433068, 2, {717,604}},
+{ 433092, 2, {748,579}},
+{ 433116, 2, {681,636}},
+{ 433125, 2, {693,625}},
+{ 433160, 2, {680,637}},
+{ 433188, 2, {756,573}},
+{ 433200, 2, {722,600}},
+{ 433225, 2, {775,559}},
+{ 433251, 2, {819,529}},
+{ 433260, 2, {747,580}},
+{ 433290, 2, {715,606}},
+{ 433344, 2, {732,592}},
+{ 433356, 2, {737,588}},
+{ 433380, 2, {699,620}},
+{ 433384, 2, {763,568}},
+{ 433440, 2, {672,645}},
+{ 433455, 2, {781,555}},
+{ 433485, 2, {741,585}},
+{ 433500, 2, {750,578}},
+{ 433504, 2, {713,608}},
+{ 433512, 2, {669,648}},
+{ 433550, 2, {667,650}},
+{ 433590, 2, {745,582}},
+{ 433608, 2, {696,623}},
+{ 433620, 2, {660,657}},
+{ 433675, 2, {913,475}},
+{ 433680, 2, {695,624}},
+{ 433728, 2, {753,576}},
+{ 433755, 2, {729,595}},
+{ 433800, 2, {723,600}},
+{ 433825, 2, {925,469}},
+{ 433840, 2, {680,638}},
+{ 433862, 2, {814,533}},
+{ 433872, 2, {786,552}},
+{ 433881, 2, {679,639}},
+{ 433884, 2, {692,627}},
+{ 433920, 2, {678,640}},
+{ 434010, 2, {690,629}},
+{ 434070, 2, {689,630}},
+{ 434112, 2, {672,646}},
+{ 434148, 2, {726,598}},
+{ 434160, 2, {670,648}},
+{ 434184, 2, {687,632}},
+{ 434214, 2, {731,594}},
+{ 434240, 2, {736,590}},
+{ 434256, 2, {664,654}},
+{ 434259, 2, {791,549}},
+{ 434280, 2, {660,658}},
+{ 434340, 2, {684,635}},
+{ 434343, 2, {777,559}},
+{ 434420, 2, {749,580}},
+{ 434434, 2, {682,637}},
+{ 434484, 2, {729,596}},
+{ 434511, 2, {693,627}},
+{ 434520, 2, {680,639}},
+{ 434560, 2, {679,640}},
+{ 434565, 2, {783,555}},
+{ 434616, 2, {728,597}},
+{ 434700, 2, {675,644}},
+{ 434720, 2, {715,608}},
+{ 434763, 2, {721,603}},
+{ 434805, 2, {707,615}},
+{ 434808, 2, {671,648}},
+{ 434844, 2, {771,564}},
+{ 434868, 2, {668,651}},
+{ 434875, 2, {875,497}},
+{ 434889, 2, {767,567}},
+{ 434910, 2, {665,654}},
+{ 434920, 2, {664,655}},
+{ 434928, 2, {663,656}},
+{ 434945, 2, {731,595}},
+{ 434976, 2, {736,591}},
+{ 435000, 2, {696,625}},
+{ 435072, 2, {704,618}},
+{ 435120, 2, {735,592}},
+{ 435132, 2, {711,612}},
+{ 435183, 2, {901,483}},
+{ 435200, 2, {680,640}},
+{ 435204, 2, {693,628}},
+{ 435210, 2, {815,534}},
+{ 435240, 2, {702,620}},
+{ 435348, 2, {783,556}},
+{ 435372, 2, {852,511}},
+{ 435375, 2, {675,645}},
+{ 435408, 2, {752,579}},
+{ 435420, 2, {708,615}},
+{ 435456, 2, {672,648}},
+{ 435480, 2, {760,573}},
+{ 435504, 2, {688,633}},
+{ 435512, 2, {707,616}},
+{ 435528, 2, {789,552}},
+{ 435625, 2, {697,625}},
+{ 435660, 2, {685,636}},
+{ 435708, 2, {684,637}},
+{ 435750, 2, {750,581}},
+{ 435780, 2, {807,540}},
+{ 435825, 2, {745,585}},
+{ 435840, 2, {681,640}},
+{ 435860, 2, {703,620}},
+{ 435870, 2, {835,522}},
+{ 435897, 2, {693,629}},
+{ 435925, 2, {1175,371}},
+{ 435936, 2, {717,608}},
+{ 435953, 2, {1271,343}},
+{ 436000, 2, {800,545}},
+{ 436020, 2, {676,645}},
+{ 436044, 2, {716,609}},
+{ 436050, 2, {675,646}},
+{ 436080, 2, {690,632}},
+{ 436100, 2, {700,623}},
+{ 436128, 2, {672,649}},
+{ 436150, 2, {671,650}},
+{ 436176, 2, {699,624}},
+{ 436188, 2, {669,652}},
+{ 436230, 2, {666,655}},
+{ 436240, 2, {665,656}},
+{ 436248, 2, {664,657}},
+{ 436304, 2, {737,592}},
+{ 436320, 2, {720,606}},
+{ 436356, 2, {713,612}},
+{ 436392, 2, {684,638}},
+{ 436449, 2, {741,589}},
+{ 436450, 2, {725,602}},
+{ 436475, 2, {1027,425}},
+{ 436480, 2, {682,640}},
+{ 436527, 2, {819,533}},
+{ 436545, 2, {801,545}},
+{ 436560, 2, {680,642}},
+{ 436563, 2, {703,621}},
+{ 436572, 2, {724,603}},
+{ 436590, 2, {693,630}},
+{ 436692, 2, {723,604}},
+{ 436696, 2, {676,646}},
+{ 436740, 2, {753,580}},
+{ 436800, 2, {672,650}},
+{ 436810, 2, {722,605}},
+{ 436821, 2, {671,651}},
+{ 436865, 2, {715,611}},
+{ 436880, 2, {688,635}},
+{ 436896, 2, {666,656}},
+{ 436905, 2, {665,657}},
+{ 436932, 2, {687,636}},
+{ 437000, 2, {760,575}},
+{ 437004, 2, {732,597}},
+{ 437019, 2, {697,627}},
+{ 437076, 2, {684,639}},
+{ 437100, 2, {705,620}},
+{ 437138, 2, {731,598}},
+{ 437175, 2, {725,603}},
+{ 437184, 2, {704,621}},
+{ 437248, 2, {854,512}},
+{ 437250, 2, {750,583}},
+{ 437255, 2, {961,455}},
+{ 437340, 2, {740,591}},
+{ 437346, 2, {702,623}},
+{ 437376, 2, {804,544}},
+{ 437400, 2, {675,648}},
+{ 437409, 2, {917,477}},
+{ 437416, 2, {749,584}},
+{ 437437, 2, {1001,437}},
+{ 437472, 2, {672,651}},
+{ 437525, 2, {925,473}},
+{ 437568, 2, {688,636}},
+{ 437580, 2, {663,660}},
+{ 437664, 2, {752,582}},
+{ 437668, 2, {686,638}},
+{ 437675, 2, {1025,427}},
+{ 437697, 2, {783,559}},
+{ 437715, 2, {685,639}},
+{ 437724, 2, {756,579}},
+{ 437760, 2, {684,640}},
+{ 437784, 2, {696,629}},
+{ 437805, 2, {705,621}},
+{ 437850, 2, {695,630}},
+{ 437880, 2, {712,615}},
+{ 437886, 2, {901,486}},
+{ 437920, 2, {680,644}},
+{ 437928, 2, {771,568}},
+{ 437955, 2, {679,645}},
+{ 437976, 2, {693,632}},
+{ 438000, 2, {730,600}},
+{ 438030, 2, {785,558}},
+{ 438036, 2, {692,633}},
+{ 438048, 2, {676,648}},
+{ 438060, 2, {735,596}},
+{ 438075, 2, {675,649}},
+{ 438150, 2, {690,635}},
+{ 438165, 2, {749,585}},
+{ 438228, 2, {666,658}},
+{ 438256, 2, {688,637}},
+{ 438340, 2, {707,620}},
+{ 438368, 2, {721,608}},
+{ 438400, 2, {685,640}},
+{ 438416, 2, {752,583}},
+{ 438425, 2, {923,475}},
+{ 438438, 2, {803,546}},
+{ 438440, 2, {776,565}},
+{ 438464, 2, {806,544}},
+{ 438480, 2, {696,630}},
+{ 438515, 2, {737,595}},
+{ 438564, 2, {681,644}},
+{ 438592, 2, {704,623}},
+{ 438600, 2, {680,645}},
+{ 438672, 2, {703,624}},
+{ 438684, 2, {789,556}},
+{ 438725, 2, {763,575}},
+{ 438746, 2, {814,539}},
+{ 438750, 2, {675,650}},
+{ 438804, 2, {717,612}},
+{ 438858, 2, {729,602}},
+{ 438864, 2, {669,656}},
+{ 438876, 2, {668,657}},
+{ 438893, 2, {689,637}},
+{ 438900, 2, {665,660}},
+{ 438912, 2, {762,576}},
+{ 438948, 2, {801,548}},
+{ 438972, 2, {699,628}},
+{ 438984, 2, {728,603}},
+{ 438991, 2, {833,527}},
+{ 439008, 2, {807,544}},
+{ 439040, 2, {686,640}},
+{ 439047, 2, {707,621}},
+{ 439110, 2, {697,630}},
+{ 439200, 2, {720,610}},
+{ 439208, 2, {682,644}},
+{ 439215, 2, {705,623}},
+{ 439236, 2, {747,588}},
+{ 439240, 2, {695,632}},
+{ 439264, 2, {742,592}},
+{ 439280, 2, {680,646}},
+{ 439296, 2, {704,624}},
+{ 439344, 2, {678,648}},
+{ 439350, 2, {725,606}},
+{ 439375, 2, {703,625}},
+{ 439392, 2, {736,597}},
+{ 439410, 2, {755,582}},
+{ 439425, 2, {675,651}},
+{ 439450, 2, {799,550}},
+{ 439488, 2, {672,654}},
+{ 439520, 2, {670,656}},
+{ 439530, 2, {690,637}},
+{ 439582, 2, {689,638}},
+{ 439584, 2, {723,608}},
+{ 439632, 2, {688,639}},
+{ 439635, 2, {795,553}},
+{ 439668, 2, {708,621}},
+{ 439680, 2, {687,640}},
+{ 439704, 2, {744,591}},
+{ 439752, 2, {753,584}},
+{ 439770, 2, {685,642}},
+{ 439810, 2, {721,610}},
+{ 439824, 2, {714,616}},
+{ 439845, 2, {885,497}},
+{ 439875, 2, {765,575}},
+{ 439920, 2, {705,624}},
+{ 439992, 2, {679,648}},
+{ 440000, 2, {704,625}},
+{ 440016, 2, {712,618}},
+{ 440040, 2, {760,579}},
+{ 440055, 2, {693,635}},
+{ 440076, 2, {676,651}},
+{ 440100, 2, {675,652}},
+{ 440115, 2, {793,555}},
+{ 440154, 2, {702,627}},
+{ 440160, 2, {672,655}},
+{ 440176, 2, {671,656}},
+{ 440181, 2, {959,459}},
+{ 440220, 2, {667,660}},
+{ 440232, 2, {664,663}},
+{ 440258, 2, {767,574}},
+{ 440300, 2, {700,629}},
+{ 440316, 2, {729,604}},
+{ 440325, 2, {855,515}},
+{ 440340, 2, {716,615}},
+{ 440360, 2, {808,545}},
+{ 440363, 2, {817,539}},
+{ 440440, 2, {715,616}},
+{ 440484, 2, {781,564}},
+{ 440496, 2, {684,644}},
+{ 440510, 2, {899,490}},
+{ 440559, 2, {777,567}},
+{ 440568, 2, {696,633}},
+{ 440640, 2, {680,648}},
+{ 440657, 2, {833,529}},
+{ 440725, 2, {1037,425}},
+{ 440748, 2, {693,636}},
+{ 440781, 2, {703,627}},
+{ 440800, 2, {725,608}},
+{ 440820, 2, {711,620}},
+{ 440840, 2, {824,535}},
+{ 440865, 2, {873,505}},
+{ 440916, 2, {724,609}},
+{ 440960, 2, {689,640}},
+{ 441012, 2, {771,572}},
+{ 441025, 2, {767,575}},
+{ 441045, 2, {729,605}},
+{ 441084, 2, {708,623}},
+{ 441090, 2, {754,585}},
+{ 441168, 2, {707,624}},
+{ 441180, 2, {684,645}},
+{ 441285, 2, {949,465}},
+{ 441288, 2, {681,648}},
+{ 441320, 2, {680,649}},
+{ 441336, 2, {777,568}},
+{ 441350, 2, {679,650}},
+{ 441396, 2, {732,603}},
+{ 441408, 2, {704,627}},
+{ 441441, 2, {693,637}},
+{ 441504, 2, {672,657}},
+{ 441518, 2, {671,658}},
+{ 441540, 2, {669,660}},
+{ 441560, 2, {665,664}},
+{ 441595, 2, {1085,407}},
+{ 441600, 2, {690,640}},
+{ 441612, 2, {783,564}},
+{ 441636, 2, {741,596}},
+{ 441672, 2, {717,616}},
+{ 441675, 2, {755,585}},
+{ 441693, 2, {779,567}},
+{ 441696, 2, {688,642}},
+{ 441728, 2, {812,544}},
+{ 441750, 2, {750,589}},
+{ 441768, 2, {699,632}},
+{ 441780, 2, {740,597}},
+{ 441792, 2, {708,624}},
+{ 441840, 2, {789,560}},
+{ 441870, 2, {715,618}},
+{ 441875, 2, {707,625}},
+{ 441910, 2, {749,590}},
+{ 441936, 2, {682,648}},
+{ 441945, 2, {805,549}},
+{ 441960, 2, {696,635}},
+{ 442020, 2, {695,636}},
+{ 442068, 2, {748,591}},
+{ 442125, 2, {675,655}},
+{ 442134, 2, {693,638}},
+{ 442152, 2, {712,621}},
+{ 442176, 2, {672,658}},
+{ 442188, 2, {692,639}},
+{ 442200, 2, {670,660}},
+{ 442221, 2, {667,663}},
+{ 442224, 2, {666,664}},
+{ 442236, 2, {807,548}},
+{ 442244, 2, {836,529}},
+{ 442255, 2, {731,605}},
+{ 442272, 2, {813,544}},
+{ 442320, 2, {760,582}},
+{ 442323, 2, {833,531}},
+{ 442330, 2, {710,623}},
+{ 442356, 2, {764,579}},
+{ 442395, 2, {783,565}},
+{ 442428, 2, {687,644}},
+{ 442442, 2, {1001,442}},
+{ 442470, 2, {686,645}},
+{ 442476, 2, {723,612}},
+{ 442494, 2, {793,558}},
+{ 442500, 2, {708,625}},
+{ 442530, 2, {745,594}},
+{ 442540, 2, {763,580}},
+{ 442680, 2, {680,651}},
+{ 442740, 2, {705,628}},
+{ 442764, 2, {753,588}},
+{ 442773, 2, {713,621}},
+{ 442800, 2, {675,656}},
+{ 442816, 2, {704,629}},
+{ 442860, 2, {671,660}},
+{ 442884, 2, {668,663}},
+{ 442890, 2, {666,665}},
+{ 442953, 2, {711,623}},
+{ 442960, 2, {784,565}},
+{ 442975, 2, {725,611}},
+{ 443040, 2, {710,624}},
+{ 443080, 2, {760,583}},
+{ 443100, 2, {700,633}},
+{ 443156, 2, {686,646}},
+{ 443256, 2, {759,584}},
+{ 443300, 2, {682,650}},
+{ 443352, 2, {696,637}},
+{ 443385, 2, {835,531}},
+{ 443408, 2, {749,592}},
+{ 443415, 2, {721,615}},
+{ 443520, 2, {672,660}},
+{ 443555, 2, {667,665}},
+{ 443586, 2, {726,611}},
+{ 443610, 2, {795,558}},
+{ 443625, 2, {845,525}},
+{ 443664, 2, {702,632}},
+{ 443674, 2, {737,602}},
+{ 443680, 2, {752,590}},
+{ 443700, 2, {725,612}},
+{ 443716, 2, {689,644}},
+{ 443760, 2, {688,645}},
+{ 443808, 2, {736,603}},
+{ 443840, 2, {730,608}},
+{ 443880, 2, {685,648}},
+{ 443904, 2, {768,578}},
+{ 443916, 2, {684,649}},
+{ 443940, 2, {735,604}},
+{ 443961, 2, {729,609}},
+{ 443975, 2, {1075,413}},
+{ 443989, 2, {697,637}},
+{ 444000, 2, {740,600}},
+{ 444012, 2, {681,652}},
+{ 444015, 2, {715,621}},
+{ 444087, 2, {931,477}},
+{ 444090, 2, {678,655}},
+{ 444096, 2, {771,576}},
+{ 444105, 2, {695,639}},
+{ 444106, 2, {754,589}},
+{ 444132, 2, {676,657}},
+{ 444136, 2, {721,616}},
+{ 444150, 2, {675,658}},
+{ 444168, 2, {744,597}},
+{ 444216, 2, {669,664}},
+{ 444276, 2, {738,602}},
+{ 444375, 2, {711,625}},
+{ 444405, 2, {689,645}},
+{ 444416, 2, {868,512}},
+{ 444432, 2, {752,591}},
+{ 444444, 2, {777,572}},
+{ 444465, 2, {747,595}},
+{ 444528, 2, {686,648}},
+{ 444540, 2, {717,620}},
+{ 444564, 2, {699,636}},
+{ 444600, 2, {684,650}},
+{ 444612, 2, {804,553}},
+{ 444620, 2, {860,517}},
+{ 444636, 2, {716,621}},
+{ 444672, 2, {768,579}},
+{ 444675, 2, {735,605}},
+{ 444686, 2, {697,638}},
+{ 444690, 2, {729,610}},
+{ 444720, 2, {680,654}},
+{ 444744, 2, {696,639}},
+{ 444752, 2, {722,616}},
+{ 444768, 2, {678,656}},
+{ 444800, 2, {695,640}},
+{ 444850, 2, {775,574}},
+{ 444912, 2, {713,624}},
+{ 444960, 2, {720,618}},
+{ 444990, 2, {815,546}},
+{ 444996, 2, {789,564}},
+{ 445000, 2, {712,625}},
+{ 445005, 2, {899,495}},
+{ 445008, 2, {762,584}},
+{ 445056, 2, {732,608}},
+{ 445095, 2, {785,567}},
+{ 445120, 2, {832,535}},
+{ 445137, 2, {861,517}},
+{ 445176, 2, {687,648}},
+{ 445179, 2, {731,609}},
+{ 445212, 2, {747,596}},
+{ 445214, 2, {686,649}},
+{ 445260, 2, {724,615}},
+{ 445280, 2, {736,605}},
+{ 445284, 2, {684,651}},
+{ 445315, 2, {845,527}},
+{ 445356, 2, {801,556}},
+{ 445368, 2, {723,616}},
+{ 445400, 2, {680,655}},
+{ 445410, 2, {707,630}},
+{ 445419, 2, {729,611}},
+{ 445424, 2, {679,656}},
+{ 445440, 2, {696,640}},
+{ 445464, 2, {807,552}},
+{ 445480, 2, {740,602}},
+{ 445500, 2, {675,660}},
+{ 445524, 2, {813,548}},
+{ 445536, 2, {672,663}},
+{ 445560, 2, {705,632}},
+{ 445588, 2, {779,572}},
+{ 445592, 2, {763,584}},
+{ 445625, 2, {713,625}},
+{ 445632, 2, {704,633}},
+{ 445665, 2, {803,555}},
+{ 445770, 2, {702,635}},
+{ 445776, 2, {753,592}},
+{ 445788, 2, {732,609}},
+{ 445842, 2, {799,558}},
+{ 445890, 2, {835,534}},
+{ 445900, 2, {686,650}},
+{ 445995, 2, {765,583}},
+{ 446016, 2, {736,606}},
+{ 446103, 2, {679,657}},
+{ 446121, 2, {837,533}},
+{ 446148, 2, {729,612}},
+{ 446160, 2, {676,660}},
+{ 446190, 2, {695,642}},
+{ 446200, 2, {776,575}},
+{ 446215, 2, {671,665}},
+{ 446220, 2, {670,666}},
+{ 446250, 2, {714,625}},
+{ 446292, 2, {693,644}},
+{ 446340, 2, {692,645}},
+{ 446355, 2, {763,585}},
+{ 446369, 2, {847,527}},
+{ 446400, 2, {720,620}},
+{ 446424, 2, {712,627}},
+{ 446448, 2, {786,568}},
+{ 446472, 2, {689,648}},
+{ 446488, 2, {833,536}},
+{ 446500, 2, {893,500}},
+{ 446508, 2, {711,628}},
+{ 446512, 2, {688,649}},
+{ 446556, 2, {748,597}},
+{ 446600, 2, {700,638}},
+{ 446607, 2, {973,459}},
+{ 446688, 2, {752,594}},
+{ 446736, 2, {681,656}},
+{ 446745, 2, {1027,435}},
+{ 446760, 2, {680,657}},
+{ 446775, 2, {777,575}},
+{ 446796, 2, {756,591}},
+{ 446824, 2, {707,632}},
+{ 446832, 2, {696,642}},
+{ 446875, 2, {715,625}},
+{ 446880, 2, {672,665}},
+{ 446886, 2, {671,666}},
+{ 446892, 2, {669,668}},
+{ 446940, 2, {764,585}},
+{ 446976, 2, {768,582}},
+{ 447000, 2, {745,600}},
+{ 447005, 2, {845,529}},
+{ 447020, 2, {721,620}},
+{ 447040, 2, {704,635}},
+{ 447051, 2, {713,627}},
+{ 447120, 2, {690,648}},
+{ 447125, 2, {875,511}},
+{ 447174, 2, {702,637}},
+{ 447180, 2, {771,580}},
+{ 447200, 2, {688,650}},
+{ 447216, 2, {726,616}},
+{ 447300, 2, {700,639}},
+{ 447304, 2, {748,598}},
+{ 447360, 2, {699,640}},
+{ 447370, 2, {770,581}},
+{ 447372, 2, {731,612}},
+{ 447408, 2, {717,624}},
+{ 447435, 2, {815,549}},
+{ 447440, 2, {680,658}},
+{ 447450, 2, {785,570}},
+{ 447525, 2, {675,663}},
+{ 447552, 2, {672,666}},
+{ 447564, 2, {741,604}},
+{ 447678, 2, {693,646}},
+{ 447720, 2, {728,615}},
+{ 447741, 2, {721,621}},
+{ 447744, 2, {704,636}},
+{ 447795, 2, {837,535}},
+{ 447810, 2, {690,649}},
+{ 447811, 2, {703,637}},
+{ 447850, 2, {689,650}},
+{ 447876, 2, {702,638}},
+{ 447888, 2, {688,651}},
+{ 447924, 2, {687,652}},
+{ 447925, 2, {779,575}},
+{ 447990, 2, {685,654}},
+{ 448000, 2, {700,640}},
+{ 448020, 2, {684,655}},
+{ 448050, 2, {725,618}},
+{ 448063, 2, {847,529}},
+{ 448096, 2, {737,608}},
+{ 448140, 2, {679,660}},
+{ 448152, 2, {789,568}},
+{ 448164, 2, {708,633}},
+{ 448188, 2, {676,663}},
+{ 448200, 2, {675,664}},
+{ 448224, 2, {672,667}},
+{ 448239, 2, {799,561}},
+{ 448260, 2, {723,620}},
+{ 448294, 2, {781,574}},
+{ 448335, 2, {729,615}},
+{ 448380, 2, {705,636}},
+{ 448404, 2, {869,516}},
+{ 448448, 2, {704,637}},
+{ 448470, 2, {755,594}},
+{ 448497, 2, {791,567}},
+{ 448514, 2, {703,638}},
+{ 448539, 2, {689,651}},
+{ 448560, 2, {712,630}},
+{ 448630, 2, {754,595}},
+{ 448632, 2, {744,603}},
+{ 448692, 2, {807,556}},
+{ 448695, 2, {767,585}},
+{ 448704, 2, {684,656}},
+{ 448776, 2, {813,552}},
+{ 448788, 2, {753,596}},
+{ 448812, 2, {819,548}},
+{ 448833, 2, {737,609}},
+{ 448868, 2, {697,644}},
+{ 448875, 2, {675,665}},
+{ 448920, 2, {696,645}},
+{ 448932, 2, {716,627}},
+{ 448944, 2, {752,597}},
+{ 448960, 2, {736,610}},
+{ 449064, 2, {693,648}},
+{ 449075, 2, {781,575}},
+{ 449080, 2, {824,545}},
+{ 449085, 2, {705,637}},
+{ 449106, 2, {714,629}},
+{ 449152, 2, {704,638}},
+{ 449160, 2, {760,591}},
+{ 449190, 2, {690,651}},
+{ 449235, 2, {745,603}},
+{ 449280, 2, {702,640}},
+{ 449288, 2, {791,568}},
+{ 449328, 2, {759,592}},
+{ 449344, 2, {826,544}},
+{ 449350, 2, {817,550}},
+{ 449352, 2, {711,632}},
+{ 449360, 2, {685,656}},
+{ 449388, 2, {684,657}},
+{ 449460, 2, {681,660}},
+{ 449568, 2, {672,669}},
+{ 449580, 2, {708,635}},
+{ 449595, 2, {873,515}},
+{ 449604, 2, {724,621}},
+{ 449631, 2, {793,567}},
+{ 449652, 2, {707,636}},
+{ 449696, 2, {736,611}},
+{ 449735, 2, {715,629}},
+{ 449757, 2, {693,649}},
+{ 449820, 2, {714,630}},
+{ 449856, 2, {704,639}},
+{ 449878, 2, {1331,338}},
+{ 449904, 2, {721,624}},
+{ 449920, 2, {703,640}},
+{ 449952, 2, {688,654}},
+{ 449955, 2, {891,505}},
+{ 449995, 2, {805,559}},
+{ 450000, 2, {720,625}},
+{ 450016, 2, {686,656}},
+{ 450045, 2, {685,657}},
+{ 450072, 2, {684,658}},
+{ 450120, 2, {682,660}},
+{ 450156, 2, {699,644}},
+{ 450170, 2, {763,590}},
+{ 450180, 2, {732,615}},
+{ 450192, 2, {678,664}},
+{ 450225, 2, {675,667}},
+{ 450240, 2, {672,670}},
+{ 450264, 2, {771,584}},
+{ 450275, 2, {775,581}},
+{ 450276, 2, {717,628}},
+{ 450296, 2, {731,616}},
+{ 450360, 2, {695,648}},
+{ 450432, 2, {736,612}},
+{ 450492, 2, {692,651}},
+{ 450528, 2, {722,624}},
+{ 450549, 2, {999,451}},
+{ 450585, 2, {765,589}},
+{ 450604, 2, {836,539}},
+{ 450625, 2, {721,625}},
+{ 450640, 2, {688,655}},
+{ 450660, 2, {740,609}},
+{ 450672, 2, {687,656}},
+{ 450696, 2, {712,633}},
+{ 450765, 2, {795,567}},
+{ 450775, 2, {949,475}},
+{ 450800, 2, {700,644}},
+{ 450840, 2, {680,663}},
+{ 450856, 2, {679,664}},
+{ 450864, 2, {744,606}},
+{ 450870, 2, {678,665}},
+{ 450892, 2, {676,667}},
+{ 450900, 2, {675,668}},
+{ 450912, 2, {672,671}},
+{ 450918, 2, {738,611}},
+{ 450984, 2, {817,552}},
+{ 450996, 2, {708,637}},
+{ 451044, 2, {737,612}},
+{ 451050, 2, {775,582}},
+{ 451104, 2, {762,592}},
+{ 451136, 2, {742,608}},
+{ 451152, 2, {723,624}},
+{ 451178, 2, {871,518}},
+{ 451188, 2, {747,604}},
+{ 451200, 2, {705,640}},
+{ 451230, 2, {845,534}},
+{ 451242, 2, {774,583}},
+{ 451248, 2, {714,632}},
+{ 451250, 2, {722,625}},
+{ 451308, 2, {789,572}},
+{ 451332, 2, {756,597}},
+{ 451451, 2, {847,533}},
+{ 451470, 2, {745,606}},
+{ 451485, 2, {711,635}},
+{ 451500, 2, {700,645}},
+{ 451524, 2, {764,591}},
+{ 451530, 2, {865,522}},
+{ 451560, 2, {710,636}},
+{ 451605, 2, {759,595}},
+{ 451620, 2, {772,585}},
+{ 451647, 2, {749,603}},
+{ 451656, 2, {697,648}},
+{ 451675, 2, {725,623}},
+{ 451696, 2, {763,592}},
+{ 451704, 2, {696,649}},
+{ 451737, 2, {891,507}},
+{ 451764, 2, {801,564}},
+{ 451773, 2, {707,639}},
+{ 451800, 2, {753,600}},
+{ 451820, 2, {779,580}},
+{ 451825, 2, {775,583}},
+{ 451836, 2, {693,652}},
+{ 451880, 2, {715,632}},
+{ 451920, 2, {807,560}},
+{ 451935, 2, {747,605}},
+{ 451950, 2, {690,655}},
+{ 451968, 2, {704,642}},
+{ 451980, 2, {729,620}},
+{ 451984, 2, {689,656}},
+{ 452000, 2, {800,565}},
+{ 452016, 2, {688,657}},
+{ 452028, 2, {813,556}},
+{ 452088, 2, {702,644}},
+{ 452100, 2, {685,660}},
+{ 452120, 2, {712,635}},
+{ 452140, 2, {740,611}},
+{ 452184, 2, {681,664}},
+{ 452196, 2, {711,636}},
+{ 452200, 2, {680,665}},
+{ 452214, 2, {679,666}},
+{ 452235, 2, {885,511}},
+{ 452244, 2, {676,669}},
+{ 452250, 2, {675,670}},
+{ 452270, 2, {710,637}},
+{ 452295, 2, {855,529}},
+{ 452352, 2, {744,608}},
+{ 452364, 2, {759,596}},
+{ 452375, 2, {875,517}},
+{ 452400, 2, {696,650}},
+{ 452412, 2, {708,639}},
+{ 452466, 2, {798,567}},
+{ 452480, 2, {707,640}},
+{ 452565, 2, {801,565}},
+{ 452640, 2, {690,656}},
+{ 452704, 2, {688,658}},
+{ 452732, 2, {703,644}},
+{ 452736, 2, {786,576}},
+{ 452760, 2, {686,660}},
+{ 452790, 2, {702,645}},
+{ 452880, 2, {680,666}},
+{ 452892, 2, {803,564}},
+{ 452907, 2, {711,637}},
+{ 452925, 2, {675,671}},
+{ 452952, 2, {699,648}},
+{ 452960, 2, {745,608}},
+{ 452991, 2, {777,583}},
+{ 453024, 2, {726,624}},
+{ 453033, 2, {799,567}},
+{ 453050, 2, {697,650}},
+{ 453096, 2, {696,651}},
+{ 453120, 2, {708,640}},
+{ 453144, 2, {717,632}},
+{ 453152, 2, {784,578}},
+{ 453180, 2, {780,581}},
+{ 453220, 2, {731,620}},
+{ 453228, 2, {716,633}},
+{ 453250, 2, {875,518}},
+{ 453255, 2, {737,615}},
+{ 453264, 2, {798,568}},
+{ 453299, 2, {841,539}},
+{ 453348, 2, {771,588}},
+{ 453362, 2, {689,658}},
+{ 453375, 2, {775,585}},
+{ 453376, 2, {704,644}},
+{ 453390, 2, {714,635}},
+{ 453420, 2, {687,660}},
+{ 453440, 2, {832,545}},
+{ 453456, 2, {752,603}},
+{ 453492, 2, {684,663}},
+{ 453530, 2, {682,665}},
+{ 453544, 2, {712,637}},
+{ 453560, 2, {680,667}},
+{ 453600, 2, {675,672}},
+{ 453680, 2, {848,535}},
+{ 453720, 2, {760,597}},
+{ 453744, 2, {822,552}},
+{ 453747, 2, {697,651}},
+{ 453750, 2, {726,625}},
+{ 453768, 2, {777,584}},
+{ 453888, 2, {768,591}},
+{ 453915, 2, {693,655}},
+{ 453948, 2, {724,627}},
+{ 453951, 2, {731,621}},
+{ 453960, 2, {776,585}},
+{ 453992, 2, {737,616}},
+{ 454020, 2, {690,658}},
+{ 454044, 2, {723,628}},
+{ 454064, 2, {767,592}},
+{ 454080, 2, {688,660}},
+{ 454138, 2, {703,646}},
+{ 454140, 2, {783,580}},
+{ 454167, 2, {729,623}},
+{ 454181, 2, {713,637}},
+{ 454230, 2, {721,630}},
+{ 454272, 2, {676,672}},
+{ 454300, 2, {700,649}},
+{ 454400, 2, {710,640}},
+{ 454410, 2, {765,594}},
+{ 454464, 2, {789,576}},
+{ 454475, 2, {1225,371}},
+{ 454480, 2, {760,598}},
+{ 454530, 2, {695,654}},
+{ 454545, 2, {777,585}},
+{ 454572, 2, {732,621}},
+{ 454584, 2, {744,611}},
+{ 454597, 2, {1573,289}},
+{ 454608, 2, {693,656}},
+{ 454644, 2, {692,657}},
+{ 454740, 2, {689,660}},
+{ 454755, 2, {915,497}},
+{ 454770, 2, {815,558}},
+{ 454784, 2, {704,646}},
+{ 454790, 2, {730,623}},
+{ 454812, 2, {753,604}},
+{ 454818, 2, {686,663}},
+{ 454825, 2, {791,575}},
+{ 454840, 2, {685,664}},
+{ 454848, 2, {736,618}},
+{ 454860, 2, {684,665}},
+{ 454896, 2, {702,648}},
+{ 454908, 2, {681,668}},
+{ 454920, 2, {680,669}},
+{ 454930, 2, {679,670}},
+{ 454960, 2, {752,605}},
+{ 454968, 2, {712,639}},
+{ 455026, 2, {814,559}},
+{ 455040, 2, {711,640}},
+{ 455100, 2, {740,615}},
+{ 455112, 2, {756,602}},
+{ 455148, 2, {807,564}},
+{ 455168, 2, {889,512}},
+{ 455175, 2, {765,595}},
+{ 455182, 2, {793,574}},
+{ 455184, 2, {696,654}},
+{ 455235, 2, {979,465}},
+{ 455265, 2, {755,603}},
+{ 455280, 2, {813,560}},
+{ 455364, 2, {819,556}},
+{ 455392, 2, {749,608}},
+{ 455520, 2, {730,624}},
+{ 455532, 2, {714,638}},
+{ 455598, 2, {702,649}},
+{ 455616, 2, {678,672}},
+{ 455672, 2, {721,632}},
+{ 455700, 2, {700,651}},
+{ 455712, 2, {752,606}},
+{ 455748, 2, {699,652}},
+{ 455760, 2, {720,633}},
+{ 455793, 2, {899,507}},
+{ 455868, 2, {756,603}},
+{ 455880, 2, {696,655}},
+{ 455910, 2, {835,546}},
+{ 455920, 2, {695,656}},
+{ 455940, 2, {745,612}},
+{ 455975, 2, {793,575}},
+{ 456000, 2, {750,608}},
+{ 456012, 2, {717,636}},
+{ 456015, 2, {707,645}},
+{ 456025, 2, {725,629}},
+{ 456036, 2, {732,623}},
+{ 456057, 2, {889,513}},
+{ 456108, 2, {764,597}},
+{ 456144, 2, {688,663}},
+{ 456165, 2, {837,545}},
+{ 456168, 2, {687,664}},
+{ 456192, 2, {704,648}},
+{ 456210, 2, {685,666}},
+{ 456225, 2, {825,553}},
+{ 456228, 2, {684,667}},
+{ 456252, 2, {772,591}},
+{ 456280, 2, {680,671}},
+{ 456288, 2, {679,672}},
+{ 456300, 2, {676,675}},
+{ 456320, 2, {713,640}},
+{ 456330, 2, {742,615}},
+{ 456365, 2, {767,595}},
+{ 456432, 2, {771,592}},
+{ 456435, 2, {735,621}},
+{ 456456, 2, {728,627}},
+{ 456489, 2, {783,583}},
+{ 456520, 2, {808,565}},
+{ 456615, 2, {695,657}},
+{ 456654, 2, {726,629}},
+{ 456660, 2, {708,645}},
+{ 456665, 2, {1045,437}},
+{ 456750, 2, {725,630}},
+{ 456768, 2, {732,624}},
+{ 456840, 2, {705,648}},
+{ 456870, 2, {785,582}},
+{ 456875, 2, {731,625}},
+{ 456876, 2, {686,666}},
+{ 456885, 2, {715,639}},
+{ 456890, 2, {749,610}},
+{ 456896, 2, {704,649}},
+{ 456936, 2, {723,632}},
+{ 456950, 2, {703,650}},
+{ 456960, 2, {680,672}},
+{ 457002, 2, {702,651}},
+{ 457028, 2, {748,611}},
+{ 457056, 2, {736,621}},
+{ 457083, 2, {729,627}},
+{ 457104, 2, {712,642}},
+{ 457164, 2, {747,612}},
+{ 457200, 2, {720,635}},
+{ 457219, 2, {1333,343}},
+{ 457272, 2, {696,657}},
+{ 457275, 2, {871,525}},
+{ 457314, 2, {858,533}},
+{ 457317, 2, {833,549}},
+{ 457380, 2, {693,660}},
+{ 457425, 2, {855,535}},
+{ 457443, 2, {959,477}},
+{ 457500, 2, {732,625}},
+{ 457504, 2, {841,544}},
+{ 457520, 2, {688,665}},
+{ 457524, 2, {716,639}},
+{ 457530, 2, {755,606}},
+{ 457545, 2, {705,649}},
+{ 457562, 2, {686,667}},
+{ 457596, 2, {684,669}},
+{ 457600, 2, {704,650}},
+{ 457620, 2, {789,580}},
+{ 457632, 2, {681,672}},
+{ 457653, 2, {703,651}},
+{ 457677, 2, {737,621}},
+{ 457765, 2, {1015,451}},
+{ 457812, 2, {729,628}},
+{ 457821, 2, {819,559}},
+{ 457824, 2, {753,608}},
+{ 457884, 2, {711,644}},
+{ 457905, 2, {735,623}},
+{ 457912, 2, {728,629}},
+{ 457920, 2, {720,636}},
+{ 457968, 2, {696,658}},
+{ 458052, 2, {779,588}},
+{ 458109, 2, {893,513}},
+{ 458136, 2, {707,648}},
+{ 458160, 2, {690,664}},
+{ 458172, 2, {801,572}},
+{ 458185, 2, {689,665}},
+{ 458200, 2, {725,632}},
+{ 458208, 2, {688,666}},
+{ 458280, 2, {684,670}},
+{ 458292, 2, {724,633}},
+{ 458304, 2, {682,672}},
+{ 458325, 2, {679,675}},
+{ 458337, 2, {731,627}},
+{ 458376, 2, {807,568}},
+{ 458380, 2, {820,559}},
+{ 458415, 2, {835,549}},
+{ 458432, 2, {754,608}},
+{ 458436, 2, {759,604}},
+{ 458490, 2, {870,527}},
+{ 458496, 2, {768,597}},
+{ 458532, 2, {813,564}},
+{ 458541, 2, {729,629}},
+{ 458544, 2, {699,656}},
+{ 458556, 2, {721,636}},
+{ 458575, 2, {1079,425}},
+{ 458616, 2, {776,591}},
+{ 458640, 2, {720,637}},
+{ 458643, 2, {867,529}},
+{ 458689, 2, {851,539}},
+{ 458700, 2, {695,660}},
+{ 458720, 2, {752,610}},
+{ 458780, 2, {791,580}},
+{ 458796, 2, {692,663}},
+{ 458832, 2, {726,632}},
+{ 458850, 2, {690,665}},
+{ 458865, 2, {891,515}},
+{ 458874, 2, {689,666}},
+{ 458880, 2, {717,640}},
+{ 458916, 2, {687,668}},
+{ 458920, 2, {745,616}},
+{ 458964, 2, {684,671}},
+{ 458983, 2, {833,551}},
+{ 458990, 2, {790,581}},
+{ 459000, 2, {680,675}},
+{ 459024, 2, {786,584}},
+{ 459025, 2, {1075,427}},
+{ 459030, 2, {715,642}},
+{ 459040, 2, {755,608}},
+{ 459172, 2, {713,644}},
+{ 459225, 2, {785,585}},
+{ 459228, 2, {781,588}},
+{ 459240, 2, {712,645}},
+{ 459270, 2, {729,630}},
+{ 459315, 2, {865,531}},
+{ 459375, 2, {735,625}},
+{ 459420, 2, {741,620}},
+{ 459425, 2, {799,575}},
+{ 459459, 2, {693,663}},
+{ 459516, 2, {771,596}},
+{ 459550, 2, {707,650}},
+{ 459648, 2, {684,672}},
+{ 459660, 2, {705,652}},
+{ 459725, 2, {925,497}},
+{ 459774, 2, {738,623}},
+{ 459792, 2, {744,618}},
+{ 459800, 2, {760,605}},
+{ 459810, 2, {702,655}},
+{ 459828, 2, {723,636}},
+{ 459888, 2, {737,624}},
+{ 459900, 2, {700,657}},
+{ 459914, 2, {722,637}},
+{ 459984, 2, {777,592}},
+{ 460000, 2, {736,625}},
+{ 460020, 2, {697,660}},
+{ 460040, 2, {742,620}},
+{ 460080, 2, {710,648}},
+{ 460089, 2, {763,603}},
+{ 460152, 2, {693,664}},
+{ 460200, 2, {708,650}},
+{ 460224, 2, {752,612}},
+{ 460230, 2, {690,667}},
+{ 460272, 2, {688,669}},
+{ 460288, 2, {899,512}},
+{ 460306, 2, {686,671}},
+{ 460317, 2, {957,481}},
+{ 460320, 2, {685,672}},
+{ 460350, 2, {682,675}},
+{ 460356, 2, {681,676}},
+{ 460404, 2, {756,609}},
+{ 460410, 2, {745,618}},
+{ 460416, 2, {704,654}},
+{ 460512, 2, {702,656}},
+{ 460560, 2, {760,606}},
+{ 460575, 2, {801,575}},
+{ 460598, 2, {713,646}},
+{ 460600, 2, {700,658}},
+{ 460625, 2, {737,625}},
+{ 460635, 2, {749,615}},
+{ 460647, 2, {891,517}},
+{ 460692, 2, {764,603}},
+{ 460719, 2, {721,639}},
+{ 460728, 2, {711,648}},
+{ 460768, 2, {748,616}},
+{ 460776, 2, {789,584}},
+{ 460782, 2, {742,621}},
+{ 460800, 2, {720,640}},
+{ 460824, 2, {728,633}},
+{ 460836, 2, {753,612}},
+{ 460845, 2, {693,665}},
+{ 460884, 2, {772,597}},
+{ 460908, 2, {708,651}},
+{ 460922, 2, {803,574}},
+{ 460944, 2, {776,594}},
+{ 460955, 2, {935,493}},
+{ 460960, 2, {688,670}},
+{ 460980, 2, {780,591}},
+{ 460992, 2, {686,672}},
+{ 461010, 2, {726,635}},
+{ 461020, 2, {740,623}},
+{ 461040, 2, {680,678}},
+{ 461100, 2, {725,636}},
+{ 461120, 2, {704,655}},
+{ 461187, 2, {783,589}},
+{ 461244, 2, {714,646}},
+{ 461250, 2, {738,625}},
+{ 461340, 2, {699,660}},
+{ 461370, 2, {845,546}},
+{ 461384, 2, {749,616}},
+{ 461440, 2, {721,640}},
+{ 461448, 2, {696,663}},
+{ 461472, 2, {736,627}},
+{ 461480, 2, {695,664}},
+{ 461580, 2, {735,628}},
+{ 461604, 2, {807,572}},
+{ 461648, 2, {688,671}},
+{ 461664, 2, {687,672}},
+{ 461700, 2, {684,675}},
+{ 461720, 2, {680,679}},
+{ 461725, 2, {803,575}},
+{ 461734, 2, {767,602}},
+{ 461748, 2, {717,644}},
+{ 461760, 2, {740,624}},
+{ 461776, 2, {784,589}},
+{ 461784, 2, {813,568}},
+{ 461820, 2, {716,645}},
+{ 461825, 2, {725,637}},
+{ 461890, 2, {715,646}},
+{ 461895, 2, {795,581}},
+{ 461910, 2, {865,534}},
+{ 461916, 2, {702,658}},
+{ 461944, 2, {791,584}},
+{ 461970, 2, {783,590}},
+{ 462024, 2, {713,648}},
+{ 462036, 2, {831,556}},
+{ 462060, 2, {755,612}},
+{ 462080, 2, {722,640}},
+{ 462105, 2, {815,567}},
+{ 462111, 2, {697,663}},
+{ 462160, 2, {848,545}},
+{ 462213, 2, {901,513}},
+{ 462231, 2, {693,667}},
+{ 462240, 2, {720,642}},
+{ 462280, 2, {728,635}},
+{ 462315, 2, {735,629}},
+{ 462352, 2, {781,592}},
+{ 462375, 2, {685,675}},
+{ 462480, 2, {705,656}},
+{ 462528, 2, {704,657}},
+{ 462553, 2, {1183,391}},
+{ 462560, 2, {784,590}},
+{ 462600, 2, {771,600}},
+{ 462636, 2, {724,639}},
+{ 462645, 2, {745,621}},
+{ 462672, 2, {714,648}},
+{ 462720, 2, {723,640}},
+{ 462735, 2, {791,585}},
+{ 462825, 2, {765,605}},
+{ 462840, 2, {696,665}},
+{ 462870, 2, {695,666}},
+{ 462915, 2, {729,635}},
+{ 462924, 2, {693,668}},
+{ 462944, 2, {736,629}},
+{ 462948, 2, {692,669}},
+{ 462990, 2, {690,671}},
+{ 463008, 2, {689,672}},
+{ 463050, 2, {686,675}},
+{ 463080, 2, {681,680}},
+{ 463092, 2, {777,596}},
+{ 463104, 2, {768,603}},
+{ 463125, 2, {741,625}},
+{ 463140, 2, {747,620}},
+{ 463232, 2, {704,658}},
+{ 463239, 2, {817,567}},
+{ 463272, 2, {776,597}},
+{ 463275, 2, {725,639}},
+{ 463296, 2, {762,608}},
+{ 463344, 2, {784,591}},
+{ 463356, 2, {732,633}},
+{ 463372, 2, {871,532}},
+{ 463386, 2, {714,649}},
+{ 463420, 2, {799,580}},
+{ 463450, 2, {713,650}},
+{ 463505, 2, {697,665}},
+{ 463512, 2, {712,651}},
+{ 463536, 2, {696,666}},
+{ 463572, 2, {711,652}},
+{ 463644, 2, {729,636}},
+{ 463680, 2, {690,672}},
+{ 463736, 2, {686,676}},
+{ 463740, 2, {708,655}},
+{ 463749, 2, {759,611}},
+{ 463750, 2, {742,625}},
+{ 463760, 2, {682,680}},
+{ 463792, 2, {707,656}},
+{ 463848, 2, {753,616}},
+{ 463904, 2, {763,608}},
+{ 463905, 2, {793,585}},
+{ 463932, 2, {789,588}},
+{ 463980, 2, {703,660}},
+{ 464000, 2, {725,640}},
+{ 464100, 2, {700,663}},
+{ 464121, 2, {973,477}},
+{ 464136, 2, {699,664}},
+{ 464202, 2, {697,666}},
+{ 464280, 2, {730,636}},
+{ 464360, 2, {760,611}},
+{ 464373, 2, {729,637}},
+{ 464380, 2, {749,620}},
+{ 464400, 2, {688,675}},
+{ 464412, 2, {687,676}},
+{ 464430, 2, {685,678}},
+{ 464436, 2, {684,679}},
+{ 464448, 2, {708,656}},
+{ 464464, 2, {728,638}},
+{ 464499, 2, {707,657}},
+{ 464508, 2, {748,621}},
+{ 464520, 2, {735,632}},
+{ 464535, 2, {837,555}},
+{ 464550, 2, {815,570}},
+{ 464576, 2, {854,544}},
+{ 464580, 2, {801,580}},
+{ 464600, 2, {808,575}},
+{ 464616, 2, {717,648}},
+{ 464625, 2, {875,531}},
+{ 464640, 2, {704,660}},
+{ 464695, 2, {781,595}},
+{ 464736, 2, {752,618}},
+{ 464820, 2, {732,635}},
+{ 464832, 2, {807,576}},
+{ 464880, 2, {745,624}},
+{ 465000, 2, {744,625}},
+{ 465003, 2, {693,671}},
+{ 465010, 2, {730,637}},
+{ 465025, 2, {979,475}},
+{ 465036, 2, {813,572}},
+{ 465045, 2, {721,645}},
+{ 465075, 2, {689,675}},
+{ 465080, 2, {755,616}},
+{ 465102, 2, {729,638}},
+{ 465129, 2, {749,621}},
+{ 465156, 2, {708,657}},
+{ 465192, 2, {728,639}},
+{ 465276, 2, {764,609}},
+{ 465290, 2, {782,595}},
+{ 465300, 2, {705,660}},
+{ 465312, 2, {786,592}},
+{ 465348, 2, {741,628}},
+{ 465360, 2, {831,560}},
+{ 465381, 2, {747,623}},
+{ 465408, 2, {768,606}},
+{ 465426, 2, {702,663}},
+{ 465430, 2, {763,610}},
+{ 465450, 2, {725,642}},
+{ 465500, 2, {700,665}},
+{ 465516, 2, {772,603}},
+{ 465520, 2, {880,529}},
+{ 465560, 2, {824,565}},
+{ 465595, 2, {845,551}},
+{ 465612, 2, {723,644}},
+{ 465624, 2, {696,669}},
+{ 465647, 2, {731,637}},
+{ 465648, 2, {712,654}},
+{ 465660, 2, {780,597}},
+{ 465684, 2, {771,604}},
+{ 465696, 2, {693,672}},
+{ 465705, 2, {711,655}},
+{ 465760, 2, {710,656}},
+{ 465800, 2, {685,680}},
+{ 465804, 2, {684,681}},
+{ 465842, 2, {779,598}},
+{ 465885, 2, {765,609}},
+{ 465888, 2, {736,633}},
+{ 465920, 2, {728,640}},
+{ 465930, 2, {835,558}},
+{ 465975, 2, {855,545}},
+{ 466032, 2, {798,584}},
+{ 466089, 2, {703,663}},
+{ 466116, 2, {716,651}},
+{ 466128, 2, {702,664}},
+{ 466284, 2, {732,637}},
+{ 466290, 2, {785,594}},
+{ 466320, 2, {696,670}},
+{ 466336, 2, {767,608}},
+{ 466360, 2, {712,655}},
+{ 466375, 2, {875,533}},
+{ 466378, 2, {731,638}},
+{ 466400, 2, {800,583}},
+{ 466416, 2, {711,656}},
+{ 466464, 2, {688,678}},
+{ 466480, 2, {686,680}},
+{ 466488, 2, {684,682}},
+{ 466520, 2, {856,545}},
+{ 466550, 2, {775,602}},
+{ 466578, 2, {882,529}},
+{ 466590, 2, {755,618}},
+{ 466620, 2, {707,660}},
+{ 466668, 2, {783,596}},
+{ 466690, 2, {791,590}},
+{ 466697, 2, {847,551}},
+{ 466752, 2, {704,663}},
+{ 466830, 2, {702,665}},
+{ 466851, 2, {903,517}},
+{ 466860, 2, {753,620}},
+{ 466875, 2, {747,625}},
+{ 466896, 2, {822,568}},
+{ 466900, 2, {700,667}},
+{ 466932, 2, {699,668}},
+{ 466980, 2, {724,645}},
+{ 466992, 2, {752,621}},
+{ 467016, 2, {696,671}},
+{ 467040, 2, {695,672}},
+{ 467055, 2, {873,535}},
+{ 467088, 2, {789,592}},
+{ 467100, 2, {692,675}},
+{ 467103, 2, {767,609}},
+{ 467124, 2, {804,581}},
+{ 467152, 2, {688,679}},
+{ 467160, 2, {687,680}},
+{ 467200, 2, {730,640}},
+{ 467208, 2, {721,648}},
+{ 467250, 2, {750,623}},
+{ 467324, 2, {817,572}},
+{ 467325, 2, {775,603}},
+{ 467360, 2, {736,635}},
+{ 467376, 2, {728,642}},
+{ 467400, 2, {760,615}},
+{ 467460, 2, {735,636}},
+{ 467484, 2, {717,652}},
+{ 467495, 2, {703,665}},
+{ 467500, 2, {748,625}},
+{ 467509, 2, {1363,343}},
+{ 467565, 2, {915,511}},
+{ 467610, 2, {715,654}},
+{ 467670, 2, {714,655}},
+{ 467712, 2, {696,672}},
+{ 467748, 2, {732,639}},
+{ 467775, 2, {693,675}},
+{ 467784, 2, {712,657}},
+{ 467852, 2, {686,682}},
+{ 467883, 2, {837,559}},
+{ 467928, 2, {776,603}},
+{ 467976, 2, {744,629}},
+{ 468000, 2, {720,650}},
+{ 468048, 2, {784,597}},
+{ 468050, 2, {814,575}},
+{ 468060, 2, {807,580}},
+{ 468096, 2, {736,636}},
+{ 468120, 2, {705,664}},
+{ 468125, 2, {749,625}},
+{ 468135, 2, {909,515}},
+{ 468160, 2, {704,665}},
+{ 468180, 2, {765,612}},
+{ 468195, 2, {735,637}},
+{ 468234, 2, {702,667}},
+{ 468272, 2, {791,592}},
+{ 468288, 2, {813,576}},
+{ 468300, 2, {700,669}},
+{ 468312, 2, {741,632}},
+{ 468342, 2, {826,567}},
+{ 468384, 2, {697,672}},
+{ 468420, 2, {740,633}},
+{ 468468, 2, {693,676}},
+{ 468480, 2, {732,640}},
+{ 468504, 2, {723,648}},
+{ 468510, 2, {690,679}},
+{ 468520, 2, {689,680}},
+{ 468528, 2, {688,681}},
+{ 468540, 2, {685,684}},
+{ 468600, 2, {710,660}},
+{ 468630, 2, {738,635}},
+{ 468650, 2, {721,650}},
+{ 468684, 2, {831,564}},
+{ 468720, 2, {720,651}},
+{ 468732, 2, {737,636}},
+{ 468768, 2, {771,608}},
+{ 468855, 2, {755,621}},
+{ 468864, 2, {704,666}},
+{ 468930, 2, {735,638}},
+{ 468996, 2, {726,646}},
+{ 469040, 2, {715,656}},
+{ 469116, 2, {747,628}},
+{ 469125, 2, {695,675}},
+{ 469200, 2, {690,680}},
+{ 469224, 2, {686,684}},
+{ 469245, 2, {763,615}},
+{ 469260, 2, {711,660}},
+{ 469300, 2, {722,650}},
+{ 469308, 2, {777,604}},
+{ 469315, 2, {805,583}},
+{ 469350, 2, {745,630}},
+{ 469365, 2, {1079,435}},
+{ 469392, 2, {762,616}},
+{ 469404, 2, {708,663}},
+{ 469448, 2, {707,664}},
+{ 469456, 2, {793,592}},
+{ 469469, 2, {737,637}},
+{ 469476, 2, {729,644}},
+{ 469480, 2, {776,605}},
+{ 469530, 2, {705,666}},
+{ 469560, 2, {728,645}},
+{ 469567, 2, {1369,343}},
+{ 469568, 2, {704,667}},
+{ 469650, 2, {775,606}},
+{ 469680, 2, {760,618}},
+{ 469700, 2, {700,671}},
+{ 469728, 2, {699,672}},
+{ 469752, 2, {851,552}},
+{ 469755, 2, {715,657}},
+{ 469775, 2, {817,575}},
+{ 469800, 2, {696,675}},
+{ 469860, 2, {764,615}},
+{ 469872, 2, {753,624}},
+{ 469898, 2, {689,682}},
+{ 469908, 2, {687,684}},
+{ 470000, 2, {752,625}},
+{ 470008, 2, {763,616}},
+{ 470016, 2, {768,612}},
+{ 470080, 2, {832,565}},
+{ 470106, 2, {738,637}},
+{ 470148, 2, {772,609}},
+{ 470162, 2, {781,602}},
+{ 470205, 2, {729,645}},
+{ 470244, 2, {789,596}},
+{ 470250, 2, {750,627}},
+{ 470256, 2, {776,606}},
+{ 470288, 2, {728,646}},
+{ 470304, 2, {736,639}},
+{ 470322, 2, {901,522}},
+{ 470327, 2, {1573,299}},
+{ 470340, 2, {702,670}},
+{ 470352, 2, {717,656}},
+{ 470400, 2, {700,672}},
+{ 470412, 2, {716,657}},
+{ 470421, 2, {917,513}},
+{ 470436, 2, {788,597}},
+{ 470448, 2, {726,648}},
+{ 470475, 2, {697,675}},
+{ 470492, 2, {748,629}},
+{ 470525, 2, {725,649}},
+{ 470547, 2, {693,679}},
+{ 470580, 2, {690,682}},
+{ 470592, 2, {688,684}},
+{ 470764, 2, {731,644}},
+{ 470820, 2, {708,665}},
+{ 470840, 2, {745,632}},
+{ 470862, 2, {707,666}},
+{ 470880, 2, {720,654}},
+{ 470890, 2, {961,490}},
+{ 470925, 2, {805,585}},
+{ 470934, 2, {729,646}},
+{ 470940, 2, {705,668}},
+{ 470952, 2, {744,633}},
+{ 470976, 2, {704,669}},
+{ 470988, 2, {756,623}},
+{ 471042, 2, {702,671}},
+{ 471086, 2, {874,539}},
+{ 471105, 2, {855,551}},
+{ 471108, 2, {913,516}},
+{ 471120, 2, {755,624}},
+{ 471156, 2, {852,553}},
+{ 471172, 2, {697,676}},
+{ 471210, 2, {695,678}},
+{ 471240, 2, {693,680}},
+{ 471252, 2, {692,681}},
+{ 471276, 2, {689,684}},
+{ 471280, 2, {688,685}},
+{ 471288, 2, {807,584}},
+{ 471295, 2, {779,605}},
+{ 471324, 2, {724,651}},
+{ 471380, 2, {740,637}},
+{ 471396, 2, {723,652}},
+{ 471504, 2, {752,627}},
+{ 471510, 2, {806,585}},
+{ 471540, 2, {813,580}},
+{ 471600, 2, {720,655}},
+{ 471625, 2, {875,539}},
+{ 471680, 2, {704,670}},
+{ 471705, 2, {767,615}},
+{ 471744, 2, {702,672}},
+{ 471750, 2, {750,629}},
+{ 471801, 2, {841,561}},
+{ 471835, 2, {793,595}},
+{ 471852, 2, {771,612}},
+{ 471888, 2, {696,678}},
+{ 471900, 2, {715,660}},
+{ 471960, 2, {690,684}},
+{ 471968, 2, {688,686}},
+{ 471975, 2, {725,651}},
+{ 472000, 2, {800,590}},
+{ 472008, 2, {831,568}},
+{ 472017, 2, {741,637}},
+{ 472056, 2, {712,663}},
+{ 472059, 2, {889,531}},
+{ 472068, 2, {837,564}},
+{ 472104, 2, {711,664}},
+{ 472140, 2, {732,645}},
+{ 472164, 2, {803,588}},
+{ 472192, 2, {868,544}},
+{ 472230, 2, {795,594}},
+{ 472290, 2, {865,546}},
+{ 472311, 2, {833,567}},
+{ 472384, 2, {704,671}},
+{ 472392, 2, {729,648}},
+{ 472416, 2, {703,672}},
+{ 472440, 2, {744,635}},
+{ 472472, 2, {728,649}},
+{ 472500, 2, {700,675}},
+{ 472512, 2, {736,642}},
+{ 472524, 2, {699,676}},
+{ 472527, 2, {999,473}},
+{ 472549, 2, {1309,361}},
+{ 472584, 2, {696,679}},
+{ 472600, 2, {695,680}},
+{ 472626, 2, {693,682}},
+{ 472650, 2, {690,685}},
+{ 472654, 2, {689,686}},
+{ 472656, 2, {688,687}},
+{ 472675, 2, {925,511}},
+{ 472719, 2, {713,663}},
+{ 472752, 2, {784,603}},
+{ 472815, 2, {711,665}},
+{ 472824, 2, {792,597}},
+{ 472860, 2, {710,666}},
+{ 472884, 2, {753,628}},
+{ 472905, 2, {837,565}},
+{ 472914, 2, {774,611}},
+{ 472932, 2, {783,604}},
+{ 472976, 2, {721,656}},
+{ 473040, 2, {720,657}},
+{ 473055, 2, {705,671}},
+{ 473060, 2, {763,620}},
+{ 473110, 2, {782,605}},
+{ 473121, 2, {729,649}},
+{ 473144, 2, {833,568}},
+{ 473200, 2, {700,676}},
+{ 473220, 2, {717,660}},
+{ 473304, 2, {888,533}},
+{ 473340, 2, {690,686}},
+{ 473355, 2, {785,603}},
+{ 473368, 2, {749,632}},
+{ 473400, 2, {789,600}},
+{ 473445, 2, {835,567}},
+{ 473472, 2, {822,576}},
+{ 473473, 2, {847,559}},
+{ 473480, 2, {712,665}},
+{ 473484, 2, {748,633}},
+{ 473525, 2, {775,611}},
+{ 473600, 2, {740,640}},
+{ 473616, 2, {759,624}},
+{ 473652, 2, {708,669}},
+{ 473688, 2, {731,648}},
+{ 473690, 2, {707,670}},
+{ 473697, 2, {721,657}},
+{ 473712, 2, {834,568}},
+{ 473715, 2, {783,605}},
+{ 473760, 2, {705,672}},
+{ 473800, 2, {824,575}},
+{ 473820, 2, {745,636}},
+{ 473823, 2, {763,621}},
+{ 473824, 2, {871,544}},
+{ 473860, 2, {817,580}},
+{ 473928, 2, {728,651}},
+{ 473960, 2, {697,680}},
+{ 473976, 2, {696,681}},
+{ 474000, 2, {750,632}},
+{ 474012, 2, {693,684}},
+{ 474032, 2, {689,688}},
+{ 474045, 2, {715,663}},
+{ 474096, 2, {714,664}},
+{ 474145, 2, {713,665}},
+{ 474150, 2, {725,654}},
+{ 474192, 2, {712,666}},
+{ 474240, 2, {741,640}},
+{ 474266, 2, {754,629}},
+{ 474288, 2, {723,656}},
+{ 474300, 2, {765,620}},
+{ 474330, 2, {815,582}},
+{ 474345, 2, {747,635}},
+{ 474360, 2, {708,670}},
+{ 474375, 2, {759,625}},
+{ 474411, 2, {779,609}},
+{ 474444, 2, {764,621}},
+{ 474516, 2, {807,588}},
+{ 474525, 2, {703,675}},
+{ 474579, 2, {729,651}},
+{ 474606, 2, {799,594}},
+{ 474624, 2, {768,618}},
+{ 474628, 2, {737,644}},
+{ 474672, 2, {696,682}},
+{ 474705, 2, {693,685}},
+{ 474708, 2, {716,663}},
+{ 474720, 2, {690,688}},
+{ 474747, 2, {777,611}},
+{ 474760, 2, {715,664}},
+{ 474780, 2, {772,615}},
+{ 474792, 2, {813,584}},
+{ 474810, 2, {714,665}},
+{ 474848, 2, {781,608}},
+{ 474880, 2, {742,640}},
+{ 474885, 2, {865,549}},
+{ 474903, 2, {891,533}},
+{ 474936, 2, {771,616}},
+{ 474948, 2, {711,668}},
+{ 475000, 2, {760,625}},
+{ 475020, 2, {754,630}},
+{ 475068, 2, {708,671}},
+{ 475092, 2, {747,636}},
+{ 475104, 2, {707,672}},
+{ 475150, 2, {731,650}},
+{ 475164, 2, {788,603}},
+{ 475200, 2, {704,675}},
+{ 475228, 2, {703,676}},
+{ 475300, 2, {700,679}},
+{ 475308, 2, {729,652}},
+{ 475320, 2, {699,680}},
+{ 475332, 2, {831,572}},
+{ 475354, 2, {697,682}},
+{ 475365, 2, {737,645}},
+{ 475376, 2, {803,592}},
+{ 475380, 2, {695,684}},
+{ 475404, 2, {692,687}},
+{ 475405, 2, {799,595}},
+{ 475410, 2, {690,689}},
+{ 475416, 2, {744,639}},
+{ 475452, 2, {843,564}},
+{ 475488, 2, {762,624}},
+{ 475530, 2, {726,655}},
+{ 475540, 2, {767,620}},
+{ 475566, 2, {871,546}},
+{ 475600, 2, {725,656}},
+{ 475629, 2, {781,609}},
+{ 475640, 2, {920,517}},
+{ 475650, 2, {755,630}},
+{ 475668, 2, {724,657}},
+{ 475695, 2, {961,495}},
+{ 475710, 2, {785,606}},
+{ 475776, 2, {708,672}},
+{ 475785, 2, {873,545}},
+{ 475800, 2, {732,650}},
+{ 475839, 2, {747,637}},
+{ 475860, 2, {721,660}},
+{ 475875, 2, {705,675}},
+{ 475881, 2, {731,651}},
+{ 475896, 2, {753,632}},
+{ 475904, 2, {704,676}},
+{ 475950, 2, {835,570}},
+{ 475968, 2, {804,592}},
+{ 476010, 2, {738,645}},
+{ 476016, 2, {752,633}},
+{ 476055, 2, {745,639}},
+{ 476088, 2, {717,664}},
+{ 476112, 2, {728,654}},
+{ 476160, 2, {744,640}},
+{ 476190, 2, {715,666}},
+{ 476238, 2, {714,667}},
+{ 476250, 2, {750,635}},
+{ 476256, 2, {726,656}},
+{ 476280, 2, {735,648}},
+{ 476307, 2, {767,621}},
+{ 476325, 2, {725,657}},
+{ 476328, 2, {712,669}},
+{ 476420, 2, {820,581}},
+{ 476425, 2, {1003,475}},
+{ 476476, 2, {748,637}},
+{ 476504, 2, {889,536}},
+{ 476520, 2, {722,660}},
+{ 476532, 2, {732,651}},
+{ 476556, 2, {789,604}},
+{ 476580, 2, {705,676}},
+{ 476595, 2, {765,623}},
+{ 476652, 2, {759,628}},
+{ 476658, 2, {702,679}},
+{ 476685, 2, {891,535}},
+{ 476700, 2, {700,681}},
+{ 476748, 2, {697,684}},
+{ 476760, 2, {696,685}},
+{ 476775, 2, {815,585}},
+{ 476784, 2, {693,688}},
+{ 476800, 2, {745,640}},
+{ 476840, 2, {728,655}},
+{ 476850, 2, {825,578}},
+{ 476875, 2, {763,625}},
+{ 476905, 2, {715,667}},
+{ 476928, 2, {736,648}},
+{ 476973, 2, {791,603}},
+{ 477015, 2, {735,649}},
+{ 477050, 2, {725,658}},
+{ 477090, 2, {810,589}},
+{ 477120, 2, {710,672}},
+{ 477160, 2, {755,632}},
+{ 477180, 2, {723,660}},
+{ 477204, 2, {741,644}},
+{ 477225, 2, {707,675}},
+{ 477240, 2, {776,615}},
+{ 477300, 2, {740,645}},
+{ 477312, 2, {704,678}},
+{ 477360, 2, {702,680}},
+{ 477386, 2, {793,602}},
+{ 477396, 2, {801,596}},
+{ 477400, 2, {700,682}},
+{ 477411, 2, {759,629}},
+{ 477456, 2, {696,686}},
+{ 477477, 2, {693,689}},
+{ 477495, 2, {729,655}},
+{ 477520, 2, {752,635}},
+{ 477555, 2, {1027,465}},
+{ 477576, 2, {737,648}},
+{ 477603, 2, {931,513}},
+{ 477630, 2, {783,610}},
+{ 477648, 2, {744,642}},
+{ 477664, 2, {736,649}},
+{ 477717, 2, {867,551}},
+{ 477744, 2, {807,592}},
+{ 477785, 2, {803,595}},
+{ 477792, 2, {711,672}},
+{ 477888, 2, {786,608}},
+{ 477900, 2, {708,675}},
+{ 477972, 2, {748,639}},
+{ 478016, 2, {704,679}},
+{ 478020, 2, {771,620}},
+{ 478040, 2, {703,680}},
+{ 478044, 2, {813,588}},
+{ 478060, 2, {820,583}},
+{ 478114, 2, {923,518}},
+{ 478116, 2, {699,684}},
+{ 478125, 2, {765,625}},
+{ 478142, 2, {697,686}},
+{ 478152, 2, {696,687}},
+{ 478160, 2, {695,688}},
+{ 478224, 2, {729,656}},
+{ 478225, 2, {925,517}},
+{ 478240, 2, {784,610}},
+{ 478268, 2, {812,589}},
+{ 478272, 2, {752,636}},
+{ 478290, 2, {745,642}},
+{ 478296, 2, {728,657}},
+{ 478325, 2, {1007,475}},
+{ 478400, 2, {736,650}},
+{ 478413, 2, {783,611}},
+{ 478500, 2, {725,660}},
+{ 478548, 2, {756,633}},
+{ 478584, 2, {782,612}},
+{ 478590, 2, {742,645}},
+{ 478611, 2, {749,639}},
+{ 478632, 2, {777,616}},
+{ 478656, 2, {831,576}},
+{ 478686, 2, {722,663}},
+{ 478695, 2, {705,679}},
+{ 478720, 2, {704,680}},
+{ 478737, 2, {1043,459}},
+{ 478744, 2, {721,664}},
+{ 478764, 2, {702,682}},
+{ 478800, 2, {700,684}},
+{ 478824, 2, {843,568}},
+{ 478880, 2, {730,656}},
+{ 478908, 2, {753,636}},
+{ 478950, 2, {775,618}},
+{ 478956, 2, {717,668}},
+{ 478962, 2, {738,649}},
+{ 479004, 2, {716,669}},
+{ 479028, 2, {764,627}},
+{ 479094, 2, {714,671}},
+{ 479120, 2, {848,565}},
+{ 479136, 2, {713,672}},
+{ 479196, 2, {783,612}},
+{ 479220, 2, {735,652}},
+{ 479232, 2, {768,624}},
+{ 479250, 2, {710,675}},
+{ 479325, 2, {825,581}},
+{ 479360, 2, {749,640}},
+{ 479370, 2, {841,570}},
+{ 479375, 2, {767,625}},
+{ 479400, 2, {705,680}},
+{ 479412, 2, {772,621}},
+{ 479424, 2, {704,681}},
+{ 479446, 2, {703,682}},
+{ 479460, 2, {732,655}},
+{ 479520, 2, {720,666}},
+{ 479544, 2, {696,689}},
+{ 479550, 2, {695,690}},
+{ 479556, 2, {693,692}},
+{ 479568, 2, {776,618}},
+{ 479570, 2, {806,595}},
+{ 479622, 2, {858,559}},
+{ 479655, 2, {765,627}},
+{ 479682, 2, {729,658}},
+{ 479688, 2, {759,632}},
+{ 479700, 2, {738,650}},
+{ 479710, 2, {770,623}},
+{ 479712, 2, {789,608}},
+{ 479787, 2, {737,651}},
+{ 479808, 2, {714,672}},
+{ 479864, 2, {779,616}},
+{ 479880, 2, {744,645}},
+{ 479892, 2, {788,609}},
+{ 479952, 2, {792,606}},
+{ 479988, 2, {796,603}},
+{ 480000, 2, {750,640}},
+{ 480012, 2, {724,663}},
+{ 480048, 2, {822,584}},
+{ 480060, 2, {756,635}},
+{ 480072, 2, {723,664}},
+{ 480095, 2, {1015,473}},
+{ 480128, 2, {704,682}},
+{ 480180, 2, {755,636}},
+{ 480186, 2, {721,666}},
+{ 480192, 2, {732,656}},
+{ 480200, 2, {700,686}},
+{ 480240, 2, {696,690}},
+{ 480260, 2, {740,649}},
+{ 480298, 2, {754,637}},
+{ 480315, 2, {781,615}},
+{ 480375, 2, {875,549}},
+{ 480384, 2, {834,576}},
+{ 480420, 2, {765,628}},
+{ 480480, 2, {715,672}},
+{ 480491, 2, {1331,361}},
+{ 480528, 2, {752,639}},
+{ 480600, 2, {712,675}},
+{ 480636, 2, {711,676}},
+{ 480725, 2, {1025,469}},
+{ 480732, 2, {708,679}},
+{ 480760, 2, {707,680}},
+{ 480816, 2, {742,648}},
+{ 480852, 2, {703,684}},
+{ 480870, 2, {702,685}},
+{ 480896, 2, {832,578}},
+{ 480900, 2, {700,687}},
+{ 480912, 2, {699,688}},
+{ 480924, 2, {732,657}},
+{ 480928, 2, {791,608}},
+{ 480930, 2, {697,690}},
+{ 480972, 2, {807,596}},
+{ 481068, 2, {747,644}},
+{ 481080, 2, {760,633}},
+{ 481096, 2, {781,616}},
+{ 481104, 2, {771,624}},
+{ 481140, 2, {729,660}},
+{ 481185, 2, {765,629}},
+{ 481250, 2, {770,625}},
+{ 481275, 2, {713,675}},
+{ 481296, 2, {813,592}},
+{ 481299, 2, {861,559}},
+{ 481327, 2, {893,539}},
+{ 481338, 2, {726,663}},
+{ 481344, 2, {736,654}},
+{ 481400, 2, {725,664}},
+{ 481481, 2, {1001,481}},
+{ 481536, 2, {704,684}},
+{ 481545, 2, {783,615}},
+{ 481558, 2, {742,649}},
+{ 481572, 2, {702,686}},
+{ 481574, 2, {722,667}},
+{ 481584, 2, {762,632}},
+{ 481635, 2, {695,693}},
+{ 481650, 2, {741,650}},
+{ 481680, 2, {720,669}},
+{ 481740, 2, {740,651}},
+{ 481800, 2, {730,660}},
+{ 481824, 2, {717,672}},
+{ 481896, 2, {776,621}},
+{ 481920, 2, {753,640}},
+{ 481950, 2, {714,675}},
+{ 481980, 2, {831,580}},
+{ 481988, 2, {713,676}},
+{ 482064, 2, {726,664}},
+{ 482080, 2, {736,655}},
+{ 482090, 2, {710,679}},
+{ 482144, 2, {793,608}},
+{ 482148, 2, {708,681}},
+{ 482160, 2, {735,656}},
+{ 482196, 2, {843,572}},
+{ 482202, 2, {774,623}},
+{ 482216, 2, {763,632}},
+{ 482220, 2, {705,684}},
+{ 482232, 2, {849,568}},
+{ 482240, 2, {704,685}},
+{ 482258, 2, {703,686}},
+{ 482295, 2, {869,555}},
+{ 482300, 2, {700,689}},
+{ 482328, 2, {696,693}},
+{ 482400, 2, {720,670}},
+{ 482445, 2, {755,639}},
+{ 482460, 2, {731,660}},
+{ 482510, 2, {791,610}},
+{ 482517, 2, {777,621}},
+{ 482560, 2, {754,640}},
+{ 482600, 2, {760,635}},
+{ 482625, 2, {715,675}},
+{ 482670, 2, {865,558}},
+{ 482724, 2, {759,636}},
+{ 482736, 2, {712,678}},
+{ 482760, 2, {745,648}},
+{ 482769, 2, {711,679}},
+{ 482784, 2, {752,642}},
+{ 482790, 2, {726,665}},
+{ 482825, 2, {775,623}},
+{ 482850, 2, {725,666}},
+{ 482868, 2, {789,612}},
+{ 482885, 2, {1105,437}},
+{ 482937, 2, {793,609}},
+{ 482944, 2, {704,686}},
+{ 482964, 2, {723,668}},
+{ 482976, 2, {702,688}},
+{ 482980, 2, {779,620}},
+{ 483021, 2, {697,693}},
+{ 483070, 2, {721,670}},
+{ 483072, 2, {768,629}},
+{ 483075, 2, {855,565}},
+{ 483084, 2, {756,639}},
+{ 483105, 2, {749,645}},
+{ 483120, 2, {720,671}},
+{ 483132, 2, {741,652}},
+{ 483200, 2, {755,640}},
+{ 483208, 2, {748,646}},
+{ 483210, 2, {767,630}},
+{ 483300, 2, {716,675}},
+{ 483327, 2, {729,663}},
+{ 483390, 2, {738,655}},
+{ 483395, 2, {799,605}},
+{ 483405, 2, {871,555}},
+{ 483406, 2, {803,602}},
+{ 483448, 2, {712,679}},
+{ 483472, 2, {737,656}},
+{ 483480, 2, {711,680}},
+{ 483483, 2, {759,637}},
+{ 483552, 2, {736,657}},
+{ 483588, 2, {707,684}},
+{ 483600, 2, {744,650}},
+{ 483612, 2, {764,633}},
+{ 483616, 2, {889,544}},
+{ 483630, 2, {705,686}},
+{ 483640, 2, {856,565}},
+{ 483648, 2, {704,687}},
+{ 483678, 2, {702,689}},
+{ 483708, 2, {699,692}},
+{ 483720, 2, {696,695}},
+{ 483759, 2, {779,621}},
+{ 483804, 2, {801,604}},
+{ 483875, 2, {875,553}},
+{ 483912, 2, {792,611}},
+{ 484000, 2, {800,605}},
+{ 484044, 2, {772,627}},
+{ 484056, 2, {729,664}},
+{ 484075, 2, {1139,425}},
+{ 484110, 2, {815,594}},
+{ 484120, 2, {728,665}},
+{ 484128, 2, {738,656}},
+{ 484176, 2, {786,616}},
+{ 484188, 2, {771,628}},
+{ 484200, 2, {807,600}},
+{ 484218, 2, {854,567}},
+{ 484242, 2, {726,667}},
+{ 484288, 2, {736,658}},
+{ 484330, 2, {770,629}},
+{ 484344, 2, {744,651}},
+{ 484356, 2, {724,669}},
+{ 484380, 2, {702,690}},
+{ 484428, 2, {876,553}},
+{ 484449, 2, {1003,483}},
+{ 484500, 2, {750,646}},
+{ 484512, 2, {721,672}},
+{ 484548, 2, {813,596}},
+{ 484561, 2, {899,539}},
+{ 484575, 2, {923,525}},
+{ 484605, 2, {801,605}},
+{ 484620, 2, {788,615}},
+{ 484653, 2, {731,663}},
+{ 484692, 2, {717,676}},
+{ 484704, 2, {748,648}},
+{ 484710, 2, {755,642}},
+{ 484764, 2, {796,609}},
+{ 484770, 2, {715,678}},
+{ 484785, 2, {729,665}},
+{ 484800, 2, {800,606}},
+{ 484825, 2, {1025,473}},
+{ 484840, 2, {713,680}},
+{ 484848, 2, {728,666}},
+{ 484872, 2, {712,681}},
+{ 484880, 2, {760,638}},
+{ 484932, 2, {753,644}},
+{ 484946, 2, {737,658}},
+{ 484980, 2, {708,685}},
+{ 485000, 2, {776,625}},
+{ 485040, 2, {705,688}},
+{ 485056, 2, {704,689}},
+{ 485070, 2, {703,690}},
+{ 485100, 2, {700,693}},
+{ 485112, 2, {697,696}},
+{ 485130, 2, {785,618}},
+{ 485163, 2, {1057,459}},
+{ 485184, 2, {722,672}},
+{ 485275, 2, {1175,413}},
+{ 485304, 2, {831,584}},
+{ 485316, 2, {732,663}},
+{ 485352, 2, {749,648}},
+{ 485415, 2, {805,603}},
+{ 485460, 2, {783,620}},
+{ 485520, 2, {714,680}},
+{ 485568, 2, {843,576}},
+{ 485576, 2, {728,667}},
+{ 485595, 2, {891,545}},
+{ 485604, 2, {738,658}},
+{ 485625, 2, {777,625}},
+{ 485628, 2, {849,572}},
+{ 485639, 2, {833,583}},
+{ 485640, 2, {710,684}},
+{ 485745, 2, {705,689}},
+{ 485760, 2, {704,690}},
+{ 485775, 2, {765,635}},
+{ 485856, 2, {723,672}},
+{ 485940, 2, {780,623}},
+{ 485970, 2, {835,582}},
+{ 486000, 2, {720,675}},
+{ 486024, 2, {789,616}},
+{ 486096, 2, {741,656}},
+{ 486098, 2, {841,578}},
+{ 486115, 2, {731,665}},
+{ 486144, 2, {768,633}},
+{ 486180, 2, {730,666}},
+{ 486200, 2, {715,680}},
+{ 486243, 2, {729,667}},
+{ 486315, 2, {909,535}},
+{ 486324, 2, {711,684}},
+{ 486381, 2, {1007,483}},
+{ 486396, 2, {708,687}},
+{ 486400, 2, {760,640}},
+{ 486416, 2, {707,688}},
+{ 486465, 2, {791,615}},
+{ 486472, 2, {833,584}},
+{ 486475, 2, {725,671}},
+{ 486504, 2, {699,696}},
+{ 486540, 2, {765,636}},
+{ 486552, 2, {776,627}},
+{ 486576, 2, {744,654}},
+{ 486591, 2, {799,609}},
+{ 486624, 2, {822,592}},
+{ 486675, 2, {721,675}},
+{ 486720, 2, {720,676}},
+{ 486750, 2, {750,649}},
+{ 486752, 2, {742,656}},
+{ 486780, 2, {732,665}},
+{ 486846, 2, {731,666}},
+{ 486850, 2, {749,650}},
+{ 486864, 2, {756,644}},
+{ 486875, 2, {779,625}},
+{ 486920, 2, {740,658}},
+{ 486927, 2, {917,531}},
+{ 486948, 2, {714,682}},
+{ 486972, 2, {729,668}},
+{ 487032, 2, {728,669}},
+{ 487035, 2, {711,685}},
+{ 487044, 2, {747,652}},
+{ 487056, 2, {834,584}},
+{ 487104, 2, {708,688}},
+{ 487179, 2, {703,693}},
+{ 487200, 2, {700,696}},
+{ 487227, 2, {961,507}},
+{ 487230, 2, {745,654}},
+{ 487256, 2, {791,616}},
+{ 487272, 2, {771,632}},
+{ 487305, 2, {735,663}},
+{ 487320, 2, {744,655}},
+{ 487344, 2, {781,624}},
+{ 487350, 2, {722,675}},
+{ 487428, 2, {807,604}},
+{ 487475, 2, {775,629}},
+{ 487485, 2, {785,621}},
+{ 487557, 2, {763,639}},
+{ 487560, 2, {717,680}},
+{ 487596, 2, {716,681}},
+{ 487600, 2, {848,575}},
+{ 487620, 2, {756,645}},
+{ 487680, 2, {762,640}},
+{ 487692, 2, {713,684}},
+{ 487695, 2, {793,615}},
+{ 487720, 2, {712,685}},
+{ 487800, 2, {813,600}},
+{ 487809, 2, {783,623}},
+{ 487825, 2, {1027,475}},
+{ 487830, 2, {707,690}},
+{ 487860, 2, {705,692}},
+{ 487872, 2, {704,693}},
+{ 487890, 2, {702,695}},
+{ 487900, 2, {700,697}},
+{ 487920, 2, {760,642}},
+{ 487944, 2, {753,648}},
+{ 487956, 2, {777,628}},
+{ 487968, 2, {736,663}},
+{ 487971, 2, {837,583}},
+{ 488000, 2, {800,610}},
+{ 488040, 2, {735,664}},
+{ 488048, 2, {752,649}},
+{ 488061, 2, {889,549}},
+{ 488070, 2, {765,638}},
+{ 488072, 2, {722,676}},
+{ 488124, 2, {819,596}},
+{ 488125, 2, {781,625}},
+{ 488160, 2, {720,678}},
+{ 488187, 2, {861,567}},
+{ 488196, 2, {764,639}},
+{ 488215, 2, {1015,481}},
+{ 488224, 2, {803,608}},
+{ 488250, 2, {750,651}},
+{ 488320, 2, {763,640}},
+{ 488410, 2, {845,578}},
+{ 488430, 2, {729,670}},
+{ 488433, 2, {779,627}},
+{ 488448, 2, {768,636}},
+{ 488475, 2, {835,585}},
+{ 488480, 2, {710,688}},
+{ 488488, 2, {728,671}},
+{ 488566, 2, {817,598}},
+{ 488579, 2, {767,637}},
+{ 488592, 2, {702,696}},
+{ 488628, 2, {831,588}},
+{ 488670, 2, {895,546}},
+{ 488676, 2, {772,633}},
+{ 488700, 2, {724,675}},
+{ 488720, 2, {745,656}},
+{ 488748, 2, {723,676}},
+{ 488750, 2, {782,625}},
+{ 488796, 2, {759,644}},
+{ 488800, 2, {752,650}},
+{ 488808, 2, {744,657}},
+{ 488832, 2, {804,608}},
+{ 488840, 2, {808,605}},
+{ 488880, 2, {720,679}},
+{ 488940, 2, {843,580}},
+{ 488988, 2, {799,612}},
+{ 488992, 2, {826,592}},
+{ 489024, 2, {849,576}},
+{ 489027, 2, {803,609}},
+{ 489056, 2, {899,544}},
+{ 489060, 2, {715,684}},
+{ 489090, 2, {714,685}},
+{ 489118, 2, {713,686}},
+{ 489125, 2, {875,559}},
+{ 489144, 2, {712,687}},
+{ 489159, 2, {729,671}},
+{ 489168, 2, {711,688}},
+{ 489180, 2, {789,620}},
+{ 489216, 2, {728,672}},
+{ 489240, 2, {755,648}},
+{ 489280, 2, {704,695}},
+{ 489285, 2, {747,655}},
+{ 489288, 2, {703,696}},
+{ 489294, 2, {702,697}},
+{ 489300, 2, {700,699}},
+{ 489325, 2, {851,575}},
+{ 489335, 2, {1085,451}},
+{ 489348, 2, {788,621}},
+{ 489375, 2, {725,675}},
+{ 489405, 2, {885,553}},
+{ 489440, 2, {736,665}},
+{ 489456, 2, {792,618}},
+{ 489465, 2, {745,657}},
+{ 489510, 2, {735,666}},
+{ 489540, 2, {796,615}},
+{ 489552, 2, {744,658}},
+{ 489566, 2, {847,578}},
+{ 489600, 2, {720,680}},
+{ 489636, 2, {804,609}},
+{ 489708, 2, {732,669}},
+{ 489720, 2, {742,660}},
+{ 489762, 2, {819,598}},
+{ 489800, 2, {775,632}},
+{ 489888, 2, {729,672}},
+{ 489951, 2, {707,693}},
+{ 489984, 2, {704,696}},
+{ 490032, 2, {738,664}},
+{ 490048, 2, {806,608}},
+{ 490050, 2, {726,675}},
+{ 490105, 2, {737,665}},
+{ 490116, 2, {869,564}},
+{ 490176, 2, {736,666}},
+{ 490200, 2, {760,645}},
+{ 490212, 2, {801,612}},
+{ 490245, 2, {735,667}},
+{ 490280, 2, {721,680}},
+{ 490320, 2, {720,681}},
+{ 490356, 2, {771,636}},
+{ 490420, 2, {791,620}},
+{ 490428, 2, {717,684}},
+{ 490440, 2, {732,670}},
+{ 490455, 2, {865,567}},
+{ 490464, 2, {786,624}},
+{ 490490, 2, {715,686}},
+{ 490560, 2, {730,672}},
+{ 490620, 2, {740,663}},
+{ 490637, 2, {833,589}},
+{ 490644, 2, {708,693}},
+{ 490656, 2, {807,608}},
+{ 490680, 2, {705,696}},
+{ 490688, 2, {704,697}},
+{ 490752, 2, {768,639}},
+{ 490770, 2, {738,665}},
+{ 490776, 2, {726,676}},
+{ 490842, 2, {737,666}},
+{ 490875, 2, {825,595}},
+{ 490880, 2, {767,640}},
+{ 490912, 2, {736,667}},
+{ 490956, 2, {753,652}},
+{ 490960, 2, {722,680}},
+{ 490980, 2, {735,668}},
+{ 491036, 2, {923,532}},
+{ 491040, 2, {720,682}},
+{ 491052, 2, {813,604}},
+{ 491064, 2, {777,632}},
+{ 491150, 2, {893,550}},
+{ 491208, 2, {776,633}},
+{ 491211, 2, {791,621}},
+{ 491232, 2, {714,688}},
+{ 491250, 2, {750,655}},
+{ 491260, 2, {770,638}},
+{ 491280, 2, {712,690}},
+{ 491344, 2, {749,656}},
+{ 491355, 2, {895,549}},
+{ 491400, 2, {702,700}},
+{ 491436, 2, {748,657}},
+{ 491445, 2, {815,603}},
+{ 491512, 2, {917,536}},
+{ 491550, 2, {725,678}},
+{ 491568, 2, {784,627}},
+{ 491582, 2, {949,518}},
+{ 491589, 2, {867,567}},
+{ 491625, 2, {855,575}},
+{ 491640, 2, {723,680}},
+{ 491660, 2, {793,620}},
+{ 491700, 2, {745,660}},
+{ 491724, 2, {783,628}},
+{ 491790, 2, {845,582}},
+{ 491808, 2, {752,654}},
+{ 491832, 2, {759,648}},
+{ 491855, 2, {805,611}},
+{ 491892, 2, {716,687}},
+{ 491904, 2, {732,672}},
+{ 491920, 2, {715,688}},
+{ 491946, 2, {714,689}},
+{ 491952, 2, {831,592}},
+{ 491967, 2, {959,513}},
+{ 491970, 2, {713,690}},
+{ 491985, 2, {841,585}},
+{ 492000, 2, {750,656}},
+{ 492012, 2, {711,692}},
+{ 492024, 2, {741,664}},
+{ 492032, 2, {961,512}},
+{ 492060, 2, {708,695}},
+{ 492063, 2, {1023,481}},
+{ 492072, 2, {707,696}},
+{ 492075, 2, {729,675}},
+{ 492093, 2, {749,657}},
+{ 492096, 2, {704,699}},
+{ 492100, 2, {703,700}},
+{ 492135, 2, {763,645}},
+{ 492156, 2, {756,651}},
+{ 492170, 2, {790,623}},
+{ 492200, 2, {856,575}},
+{ 492275, 2, {725,679}},
+{ 492312, 2, {843,584}},
+{ 492336, 2, {789,624}},
+{ 492384, 2, {736,669}},
+{ 492420, 2, {849,580}},
+{ 492453, 2, {793,621}},
+{ 492480, 2, {720,684}},
+{ 492499, 2, {931,529}},
+{ 492507, 2, {783,629}},
+{ 492560, 2, {752,655}},
+{ 492575, 2, {1037,475}},
+{ 492635, 2, {715,689}},
+{ 492680, 2, {872,565}},
+{ 492745, 2, {935,527}},
+{ 492750, 2, {730,675}},
+{ 492760, 2, {776,635}},
+{ 492780, 2, {764,645}},
+{ 492800, 2, {704,700}},
+{ 492900, 2, {775,636}},
+{ 493000, 2, {725,680}},
+{ 493020, 2, {747,660}},
+{ 493025, 2, {925,533}},
+{ 493038, 2, {774,637}},
+{ 493044, 2, {724,681}},
+{ 493050, 2, {865,570}},
+{ 493056, 2, {768,642}},
+{ 493120, 2, {736,670}},
+{ 493136, 2, {784,629}},
+{ 493164, 2, {721,684}},
+{ 493185, 2, {735,671}},
+{ 493200, 2, {720,685}},
+{ 493218, 2, {846,583}},
+{ 493240, 2, {760,649}},
+{ 493245, 2, {873,565}},
+{ 493272, 2, {744,663}},
+{ 493296, 2, {717,688}},
+{ 493308, 2, {772,639}},
+{ 493350, 2, {715,690}},
+{ 493416, 2, {712,693}},
+{ 493425, 2, {731,675}},
+{ 493440, 2, {771,640}},
+{ 493493, 2, {1001,493}},
+{ 493500, 2, {705,700}},
+{ 493506, 2, {703,702}},
+{ 493584, 2, {728,678}},
+{ 493640, 2, {820,602}},
+{ 493675, 2, {775,637}},
+{ 493680, 2, {726,680}},
+{ 493695, 2, {795,621}},
+{ 493696, 2, {812,608}},
+{ 493728, 2, {834,592}},
+{ 493740, 2, {780,633}},
+{ 493770, 2, {755,654}},
+{ 493776, 2, {762,648}},
+{ 493830, 2, {837,590}},
+{ 493845, 2, {803,615}},
+{ 493856, 2, {736,671}},
+{ 493884, 2, {807,612}},
+{ 493890, 2, {815,606}},
+{ 493920, 2, {720,686}},
+{ 493948, 2, {767,644}},
+{ 493968, 2, {753,656}},
+{ 494064, 2, {752,657}},
+{ 494076, 2, {788,627}},
+{ 494100, 2, {732,675}},
+{ 494109, 2, {713,693}},
+{ 494130, 2, {905,546}},
+{ 494145, 2, {711,695}},
+{ 494156, 2, {731,676}},
+{ 494160, 2, {710,696}},
+{ 494172, 2, {742,666}},
+{ 494190, 2, {765,646}},
+{ 494208, 2, {704,702}},
+{ 494247, 2, {741,667}},
+{ 494285, 2, {817,605}},
+{ 494304, 2, {813,608}},
+{ 494312, 2, {728,679}},
+{ 494316, 2, {796,621}},
+{ 494325, 2, {845,585}},
+{ 494340, 2, {749,660}},
+{ 494361, 2, {931,531}},
+{ 494375, 2, {791,625}},
+{ 494400, 2, {800,618}},
+{ 494450, 2, {725,682}},
+{ 494460, 2, {738,670}},
+{ 494494, 2, {1001,494}},
+{ 494505, 2, {891,555}},
+{ 494532, 2, {723,684}},
+{ 494550, 2, {785,630}},
+{ 494615, 2, {935,529}},
+{ 494640, 2, {720,687}},
+{ 494648, 2, {803,616}},
+{ 494676, 2, {819,604}},
+{ 494680, 2, {745,664}},
+{ 494715, 2, {767,645}},
+{ 494760, 2, {744,665}},
+{ 494840, 2, {712,695}},
+{ 494856, 2, {711,696}},
+{ 494868, 2, {759,652}},
+{ 494892, 2, {708,699}},
+{ 494900, 2, {707,700}},
+{ 494910, 2, {705,702}},
+{ 494912, 2, {704,703}},
+{ 494988, 2, {741,668}},
+{ 494991, 2, {729,679}},
+{ 495012, 2, {852,581}},
+{ 495060, 2, {740,669}},
+{ 495180, 2, {756,655}},
+{ 495198, 2, {738,671}},
+{ 495225, 2, {775,639}},
+{ 495264, 2, {737,672}},
+{ 495276, 2, {831,596}},
+{ 495280, 2, {755,656}},
+{ 495285, 2, {795,623}},
+{ 495292, 2, {722,686}},
+{ 495380, 2, {799,620}},
+{ 495405, 2, {909,545}},
+{ 495492, 2, {789,628}},
+{ 495495, 2, {715,693}},
+{ 495504, 2, {744,666}},
+{ 495550, 2, {850,583}},
+{ 495625, 2, {793,625}},
+{ 495670, 2, {730,679}},
+{ 495684, 2, {843,588}},
+{ 495720, 2, {729,680}},
+{ 495768, 2, {728,681}},
+{ 495816, 2, {849,584}},
+{ 495864, 2, {776,639}},
+{ 495900, 2, {725,684}},
+{ 495924, 2, {748,663}},
+{ 495936, 2, {738,672}},
+{ 495945, 2, {927,535}},
+{ 495950, 2, {763,650}},
+{ 495990, 2, {835,594}},
+{ 496000, 2, {775,640}},
+{ 496008, 2, {747,664}},
+{ 496035, 2, {755,657}},
+{ 496048, 2, {721,688}},
+{ 496080, 2, {720,689}},
+{ 496120, 2, {785,632}},
+{ 496125, 2, {735,675}},
+{ 496128, 2, {768,646}},
+{ 496164, 2, {717,692}},
+{ 496170, 2, {745,666}},
+{ 496179, 2, {799,621}},
+{ 496188, 2, {716,693}},
+{ 496223, 2, {779,637}},
+{ 496230, 2, {714,695}},
+{ 496248, 2, {713,696}},
+{ 496272, 2, {784,633}},
+{ 496314, 2, {707,702}},
+{ 496320, 2, {705,704}},
+{ 496392, 2, {888,559}},
+{ 496485, 2, {765,649}},
+{ 496496, 2, {728,682}},
+{ 496524, 2, {771,644}},
+{ 496540, 2, {740,671}},
+{ 496620, 2, {801,620}},
+{ 496692, 2, {756,657}},
+{ 496716, 2, {781,636}},
+{ 496752, 2, {786,632}},
+{ 496755, 2, {747,665}},
+{ 496800, 2, {720,690}},
+{ 496845, 2, {905,549}},
+{ 496860, 2, {735,676}},
+{ 496920, 2, {808,615}},
+{ 496944, 2, {714,696}},
+{ 496980, 2, {753,660}},
+{ 497002, 2, {779,638}},
+{ 497028, 2, {732,679}},
+{ 497040, 2, {760,654}},
+{ 497080, 2, {731,680}},
+{ 497112, 2, {807,616}},
+{ 497178, 2, {729,682}},
+{ 497200, 2, {880,565}},
+{ 497205, 2, {783,635}},
+{ 497250, 2, {750,663}},
+{ 497280, 2, {740,672}},
+{ 497310, 2, {726,685}},
+{ 497336, 2, {749,664}},
+{ 497350, 2, {725,686}},
+{ 497354, 2, {814,611}},
+{ 497364, 2, {764,651}},
+{ 497388, 2, {724,687}},
+{ 497424, 2, {723,688}},
+{ 497448, 2, {756,658}},
+{ 497475, 2, {737,675}},
+{ 497490, 2, {721,690}},
+{ 497497, 2, {781,637}},
+{ 497511, 2, {1043,477}},
+{ 497550, 2, {775,642}},
+{ 497553, 2, {817,609}},
+{ 497556, 2, {813,612}},
+{ 497640, 2, {715,696}},
+{ 497658, 2, {714,697}},
+{ 497664, 2, {768,648}},
+{ 497688, 2, {712,699}},
+{ 497700, 2, {711,700}},
+{ 497705, 2, {845,589}},
+{ 497728, 2, {707,704}},
+{ 497736, 2, {744,669}},
+{ 497800, 2, {760,655}},
+{ 497835, 2, {851,585}},
+{ 497840, 2, {784,635}},
+{ 497882, 2, {742,671}},
+{ 497904, 2, {759,656}},
+{ 497940, 2, {772,645}},
+{ 497988, 2, {783,636}},
+{ 498000, 2, {750,664}},
+{ 498015, 2, {765,651}},
+{ 498036, 2, {726,686}},
+{ 498069, 2, {891,559}},
+{ 498134, 2, {782,637}},
+{ 498192, 2, {776,642}},
+{ 498225, 2, {949,525}},
+{ 498300, 2, {755,660}},
+{ 498355, 2, {715,697}},
+{ 498420, 2, {710,702}},
+{ 498432, 2, {708,704}},
+{ 498435, 2, {707,705}},
+{ 498480, 2, {744,670}},
+{ 498492, 2, {732,681}},
+{ 498520, 2, {824,605}},
+{ 498542, 2, {731,682}},
+{ 498550, 2, {767,650}},
+{ 498575, 2, {925,539}},
+{ 498576, 2, {752,663}},
+{ 498600, 2, {831,600}},
+{ 498624, 2, {742,672}},
+{ 498636, 2, {729,684}},
+{ 498648, 2, {789,632}},
+{ 498680, 2, {728,685}},
+{ 498750, 2, {750,665}},
+{ 498771, 2, {783,637}},
+{ 498780, 2, {765,652}},
+{ 498800, 2, {725,688}},
+{ 498804, 2, {788,633}},
+{ 498806, 2, {869,574}},
+{ 498834, 2, {749,666}},
+{ 498848, 2, {917,544}},
+{ 498852, 2, {837,596}},
+{ 498883, 2, {847,589}},
+{ 498916, 2, {748,667}},
+{ 498960, 2, {720,693}},
+{ 498996, 2, {747,668}},
+{ 499008, 2, {736,678}},
+{ 499016, 2, {931,536}},
+{ 499032, 2, {717,696}},
+{ 499056, 2, {843,592}},
+{ 499065, 2, {735,679}},
+{ 499092, 2, {796,627}},
+{ 499100, 2, {713,700}},
+{ 499110, 2, {762,655}},
+{ 499140, 2, {708,705}},
+{ 499149, 2, {973,513}},
+{ 499200, 2, {768,650}},
+{ 499212, 2, {849,588}},
+{ 499260, 2, {785,636}},
+{ 499284, 2, {804,621}},
+{ 499317, 2, {767,651}},
+{ 499320, 2, {730,684}},
+{ 499344, 2, {808,618}},
+{ 499365, 2, {729,685}},
+{ 499375, 2, {799,625}},
+{ 499380, 2, {812,615}},
+{ 499410, 2, {895,558}},
+{ 499485, 2, {1005,497}},
+{ 499488, 2, {726,688}},
+{ 499500, 2, {740,675}},
+{ 499525, 2, {725,689}},
+{ 499590, 2, {793,630}},
+{ 499608, 2, {771,648}},
+{ 499653, 2, {721,693}},
+{ 499675, 2, {869,575}},
+{ 499681, 2, {1547,323}},
+{ 499730, 2, {770,649}},
+{ 499744, 2, {736,679}},
+{ 499751, 2, {1457,343}},
+{ 499776, 2, {822,608}},
+{ 499800, 2, {714,700}},
+{ 499824, 2, {712,702}},
+{ 499840, 2, {710,704}},
+{ 499851, 2, {891,561}},
+{ 499872, 2, {762,656}},
+{ 499905, 2, {805,621}},
+{ 499912, 2, {791,632}},
+{ 499928, 2, {836,598}},
+{ 499954, 2, {871,574}},
+{ 499968, 2, {744,672}},
+{ 499992, 2, {753,664}},
+{ 500000, 2, {800,625}},
+{ 500004, 2, {731,684}},
+{ 500080, 2, {752,665}},
+{ 500094, 2, {729,686}},
+{ 500136, 2, {728,687}},
+{ 500175, 2, {741,675}},
+{ 500192, 2, {784,638}},
+{ 500214, 2, {726,689}},
+{ 500250, 2, {725,690}},
+{ 500316, 2, {723,692}},
+{ 500320, 2, {848,590}},
+{ 500340, 2, {807,620}},
+{ 500346, 2, {722,693}},
+{ 500388, 2, {777,644}},
+{ 500395, 2, {841,595}},
+{ 500400, 2, {720,695}},
+{ 500409, 2, {819,611}},
+{ 500412, 2, {748,669}},
+{ 500484, 2, {716,699}},
+{ 500500, 2, {715,700}},
+{ 500520, 2, {776,645}},
+{ 500526, 2, {713,702}},
+{ 500528, 2, {763,656}},
+{ 500544, 2, {711,704}},
+{ 500556, 2, {708,707}},
+{ 500625, 2, {801,625}},
+{ 500640, 2, {745,672}},
+{ 500808, 2, {813,616}},
+{ 500825, 2, {871,575}},
+{ 500832, 2, {752,666}},
+{ 500850, 2, {742,675}},
+{ 500871, 2, {1037,483}},
+{ 500892, 2, {804,623}},
+{ 500916, 2, {741,676}},
+{ 500973, 2, {799,627}},
+{ 500976, 2, {784,639}},
+{ 501020, 2, {820,611}},
+{ 501072, 2, {803,624}},
+{ 501075, 2, {765,655}},
+{ 501102, 2, {738,679}},
+{ 501160, 2, {737,680}},
+{ 501216, 2, {736,681}},
+{ 501228, 2, {714,702}},
+{ 501270, 2, {735,682}},
+{ 501291, 2, {763,657}},
+{ 501320, 2, {755,664}},
+{ 501336, 2, {792,633}},
+{ 501380, 2, {860,583}},
+{ 501400, 2, {872,575}},
+{ 501410, 2, {754,665}},
+{ 501420, 2, {732,685}},
+{ 501424, 2, {814,616}},
+{ 501466, 2, {731,686}},
+{ 501552, 2, {729,688}},
+{ 501592, 2, {728,689}},
+{ 501615, 2, {785,639}},
+{ 501676, 2, {779,644}},
+{ 501696, 2, {804,624}},
+{ 501725, 2, {1175,427}},
+{ 501732, 2, {724,693}},
+{ 501735, 2, {1079,465}},
+{ 501760, 2, {784,640}},
+{ 501768, 2, {808,621}},
+{ 501787, 2, {1331,377}},
+{ 501795, 2, {885,567}},
+{ 501804, 2, {789,636}},
+{ 501816, 2, {721,696}},
+{ 501830, 2, {749,670}},
+{ 501840, 2, {720,697}},
+{ 501875, 2, {803,625}},
+{ 501900, 2, {717,700}},
+{ 501924, 2, {831,604}},
+{ 501930, 2, {715,702}},
+{ 501942, 2, {714,703}},
+{ 501948, 2, {764,657}},
+{ 501952, 2, {713,704}},
+{ 501960, 2, {712,705}},
+{ 501963, 2, {861,583}},
+{ 501970, 2, {710,707}},
+{ 501975, 2, {873,575}},
+{ 501984, 2, {747,672}},
+{ 502200, 2, {744,675}},
+{ 502208, 2, {826,608}},
+{ 502240, 2, {730,688}},
+{ 502250, 2, {875,574}},
+{ 502272, 2, {768,654}},
+{ 502281, 2, {729,689}},
+{ 502299, 2, {833,603}},
+{ 502320, 2, {728,690}},
+{ 502326, 2, {774,649}},
+{ 502400, 2, {785,640}},
+{ 502425, 2, {725,693}},
+{ 502428, 2, {843,596}},
+{ 502440, 2, {790,636}},
+{ 502460, 2, {740,679}},
+{ 502572, 2, {772,651}},
+{ 502608, 2, {849,592}},
+{ 502645, 2, {715,703}},
+{ 502656, 2, {714,704}},
+{ 502677, 2, {711,707}},
+{ 502680, 2, {710,708}},
+{ 502692, 2, {771,652}},
+{ 502740, 2, {735,684}},
+{ 502758, 2, {901,558}},
+{ 502824, 2, {861,584}},
+{ 502830, 2, {755,666}},
+{ 502860, 2, {867,580}},
+{ 502875, 2, {745,675}},
+{ 502884, 2, {732,687}},
+{ 502964, 2, {781,644}},
+{ 502975, 2, {775,649}},
+{ 503004, 2, {753,668}},
+{ 503010, 2, {729,690}},
+{ 503028, 2, {801,628}},
+{ 503040, 2, {768,655}},
+{ 503088, 2, {752,669}},
+{ 503100, 2, {774,650}},
+{ 503125, 2, {805,625}},
+{ 503152, 2, {767,656}},
+{ 503208, 2, {723,696}},
+{ 503230, 2, {790,637}},
+{ 503250, 2, {750,671}},
+{ 503272, 2, {817,616}},
+{ 503280, 2, {720,699}},
+{ 503328, 2, {749,672}},
+{ 503360, 2, {715,704}},
+{ 503384, 2, {712,707}},
+{ 503388, 2, {711,708}},
+{ 503415, 2, {891,565}},
+{ 503424, 2, {736,684}},
+{ 503430, 2, {865,582}},
+{ 503433, 2, {917,549}},
+{ 503505, 2, {835,603}},
+{ 503532, 2, {788,639}},
+{ 503568, 2, {807,624}},
+{ 503580, 2, {763,660}},
+{ 503595, 2, {855,589}},
+{ 503616, 2, {732,688}},
+{ 503670, 2, {815,618}},
+{ 503745, 2, {781,645}},
+{ 503840, 2, {752,670}},
+{ 503868, 2, {796,633}},
+{ 503880, 2, {741,680}},
+{ 503940, 2, {740,681}},
+{ 503958, 2, {923,546}},
+{ 503970, 2, {785,642}},
+{ 503976, 2, {759,664}},
+{ 504000, 2, {720,700}},
+{ 504060, 2, {813,620}},
+{ 504063, 2, {889,567}},
+{ 504108, 2, {737,684}},
+{ 504160, 2, {736,685}},
+{ 504175, 2, {1075,469}},
+{ 504189, 2, {1057,477}},
+{ 504218, 2, {902,559}},
+{ 504252, 2, {756,667}},
+{ 504273, 2, {777,649}},
+{ 504288, 2, {816,618}},
+{ 504336, 2, {798,632}},
+{ 504339, 2, {899,561}},
+{ 504384, 2, {852,592}},
+{ 504390, 2, {731,690}},
+{ 504432, 2, {744,678}},
+{ 504468, 2, {729,692}},
+{ 504504, 2, {728,693}},
+{ 504560, 2, {742,680}},
+{ 504570, 2, {726,695}},
+{ 504576, 2, {768,657}},
+{ 504592, 2, {752,671}},
+{ 504600, 2, {725,696}},
+{ 504686, 2, {767,658}},
+{ 504700, 2, {721,700}},
+{ 504735, 2, {759,665}},
+{ 504768, 2, {717,704}},
+{ 504780, 2, {716,705}},
+{ 504868, 2, {949,532}},
+{ 504896, 2, {736,686}},
+{ 504900, 2, {748,675}},
+{ 504952, 2, {889,568}},
+{ 504960, 2, {789,640}},
+{ 504972, 2, {747,676}},
+{ 504990, 2, {905,558}},
+{ 505000, 2, {808,625}},
+{ 505035, 2, {783,645}},
+{ 505050, 2, {777,650}},
+{ 505110, 2, {745,678}},
+{ 505120, 2, {770,656}},
+{ 505141, 2, {793,637}},
+{ 505176, 2, {744,679}},
+{ 505197, 2, {729,693}},
+{ 505215, 2, {927,545}},
+{ 505248, 2, {831,608}},
+{ 505296, 2, {726,696}},
+{ 505325, 2, {725,697}},
+{ 505400, 2, {722,700}},
+{ 505440, 2, {720,702}},
+{ 505449, 2, {791,639}},
+{ 505530, 2, {738,685}},
+{ 505548, 2, {837,604}},
+{ 505568, 2, {854,592}},
+{ 505575, 2, {749,675}},
+{ 505582, 2, {737,686}},
+{ 505600, 2, {790,640}},
+{ 505620, 2, {795,636}},
+{ 505632, 2, {736,687}},
+{ 505680, 2, {735,688}},
+{ 505764, 2, {756,669}},
+{ 505776, 2, {771,656}},
+{ 505800, 2, {843,600}},
+{ 505908, 2, {828,611}},
+{ 505925, 2, {1225,413}},
+{ 505960, 2, {728,695}},
+{ 505968, 2, {762,664}},
+{ 505995, 2, {915,553}},
+{ 506000, 2, {880,575}},
+{ 506004, 2, {849,596}},
+{ 506010, 2, {835,606}},
+{ 506016, 2, {753,672}},
+{ 506022, 2, {726,697}},
+{ 506025, 2, {865,585}},
+{ 506076, 2, {724,699}},
+{ 506088, 2, {781,648}},
+{ 506100, 2, {723,700}},
+{ 506115, 2, {815,621}},
+{ 506142, 2, {721,702}},
+{ 506160, 2, {720,703}},
+{ 506220, 2, {715,708}},
+{ 506232, 2, {712,711}},
+{ 506240, 2, {791,640}},
+{ 506253, 2, {759,667}},
+{ 506268, 2, {738,686}},
+{ 506328, 2, {867,584}},
+{ 506331, 2, {893,567}},
+{ 506345, 2, {805,629}},
+{ 506350, 2, {779,650}},
+{ 506352, 2, {822,616}},
+{ 506385, 2, {837,605}},
+{ 506400, 2, {800,633}},
+{ 506415, 2, {735,689}},
+{ 506464, 2, {784,646}},
+{ 506506, 2, {847,598}},
+{ 506520, 2, {756,670}},
+{ 506532, 2, {764,663}},
+{ 506540, 2, {817,620}},
+{ 506583, 2, {731,693}},
+{ 506600, 2, {745,680}},
+{ 506604, 2, {777,652}},
+{ 506616, 2, {808,627}},
+{ 506632, 2, {763,664}},
+{ 506655, 2, {729,695}},
+{ 506664, 2, {744,681}},
+{ 506715, 2, {913,555}},
+{ 506730, 2, {762,665}},
+{ 506736, 2, {782,648}},
+{ 506796, 2, {807,628}},
+{ 506844, 2, {722,702}},
+{ 506850, 2, {775,654}},
+{ 506880, 2, {720,704}},
+{ 506920, 2, {760,667}},
+{ 506970, 2, {774,655}},
+{ 506974, 2, {806,629}},
+{ 507000, 2, {750,676}},
+{ 507012, 2, {759,668}},
+{ 507056, 2, {737,688}},
+{ 507072, 2, {834,608}},
+{ 507104, 2, {736,689}},
+{ 507129, 2, {779,651}},
+{ 507204, 2, {772,657}},
+{ 507213, 2, {747,679}},
+{ 507276, 2, {732,693}},
+{ 507312, 2, {813,624}},
+{ 507357, 2, {817,621}},
+{ 507360, 2, {755,672}},
+{ 507384, 2, {729,696}},
+{ 507416, 2, {728,697}},
+{ 507465, 2, {895,567}},
+{ 507504, 2, {776,654}},
+{ 507520, 2, {793,640}},
+{ 507528, 2, {742,684}},
+{ 507584, 2, {721,704}},
+{ 507600, 2, {720,705}},
+{ 507636, 2, {717,708}},
+{ 507640, 2, {740,686}},
+{ 507744, 2, {738,688}},
+{ 507780, 2, {780,651}},
+{ 507840, 2, {736,690}},
+{ 507870, 2, {810,627}},
+{ 507936, 2, {814,624}},
+{ 507960, 2, {747,680}},
+{ 507990, 2, {826,615}},
+{ 508000, 2, {800,635}},
+{ 508032, 2, {756,672}},
+{ 508079, 2, {1573,323}},
+{ 508080, 2, {730,696}},
+{ 508113, 2, {729,697}},
+{ 508116, 2, {789,644}},
+{ 508130, 2, {833,610}},
+{ 508158, 2, {763,666}},
+{ 508167, 2, {783,649}},
+{ 508200, 2, {726,700}},
+{ 508260, 2, {788,645}},
+{ 508277, 2, {943,539}},
+{ 508280, 2, {776,655}},
+{ 508288, 2, {722,704}},
+{ 508300, 2, {782,650}},
+{ 508305, 2, {721,705}},
+{ 508326, 2, {741,686}},
+{ 508365, 2, {715,711}},
+{ 508368, 2, {714,712}},
+{ 508375, 2, {875,581}},
+{ 508380, 2, {740,687}},
+{ 508400, 2, {775,656}},
+{ 508431, 2, {781,651}},
+{ 508440, 2, {760,669}},
+{ 508464, 2, {792,642}},
+{ 508482, 2, {738,689}},
+{ 508530, 2, {737,690}},
+{ 508572, 2, {831,612}},
+{ 508620, 2, {735,692}},
+{ 508635, 2, {801,635}},
+{ 508644, 2, {796,639}},
+{ 508680, 2, {785,648}},
+{ 508725, 2, {765,665}},
+{ 508740, 2, {732,695}},
+{ 508750, 2, {814,625}},
+{ 508776, 2, {731,696}},
+{ 508800, 2, {795,640}},
+{ 508805, 2, {841,605}},
+{ 508816, 2, {784,649}},
+{ 508860, 2, {771,660}},
+{ 508872, 2, {728,699}},
+{ 508898, 2, {851,598}},
+{ 508932, 2, {804,633}},
+{ 508950, 2, {725,702}},
+{ 508956, 2, {876,581}},
+{ 508963, 2, {799,637}},
+{ 508992, 2, {723,704}},
+{ 509028, 2, {753,676}},
+{ 509040, 2, {720,707}},
+{ 509076, 2, {716,711}},
+{ 509080, 2, {715,712}},
+{ 509082, 2, {714,713}},
+{ 509124, 2, {798,638}},
+{ 509172, 2, {843,604}},
+{ 509175, 2, {775,657}},
+{ 509184, 2, {768,663}},
+{ 509229, 2, {959,531}},
+{ 509250, 2, {750,679}},
+{ 509292, 2, {774,658}},
+{ 509320, 2, {749,680}},
+{ 509328, 2, {786,648}},
+{ 509388, 2, {748,681}},
+{ 509400, 2, {849,600}},
+{ 509425, 2, {1025,497}},
+{ 509436, 2, {801,636}},
+{ 509535, 2, {845,603}},
+{ 509580, 2, {745,684}},
+{ 509600, 2, {728,700}},
+{ 509625, 2, {755,675}},
+{ 509640, 2, {744,685}},
+{ 509675, 2, {725,703}},
+{ 509712, 2, {777,656}},
+{ 509733, 2, {783,651}},
+{ 509760, 2, {720,708}},
+{ 509762, 2, {799,638}},
+{ 509795, 2, {715,713}},
+{ 509808, 2, {741,688}},
+{ 509832, 2, {776,657}},
+{ 509856, 2, {752,678}},
+{ 509860, 2, {740,689}},
+{ 509950, 2, {775,658}},
+{ 509960, 2, {760,671}},
+{ 510000, 2, {750,680}},
+{ 510024, 2, {807,632}},
+{ 510048, 2, {736,693}},
+{ 510055, 2, {767,665}},
+{ 510081, 2, {957,533}},
+{ 510125, 2, {875,583}},
+{ 510150, 2, {895,570}},
+{ 510195, 2, {791,645}},
+{ 510237, 2, {801,637}},
+{ 510255, 2, {765,667}},
+{ 510272, 2, {938,544}},
+{ 510300, 2, {729,700}},
+{ 510378, 2, {726,703}},
+{ 510384, 2, {744,686}},
+{ 510400, 2, {725,704}},
+{ 510420, 2, {724,705}},
+{ 510468, 2, {721,708}},
+{ 510496, 2, {742,688}},
+{ 510504, 2, {717,712}},
+{ 510510, 2, {715,714}},
+{ 510516, 2, {783,652}},
+{ 510564, 2, {813,628}},
+{ 510570, 2, {837,610}},
+{ 510608, 2, {752,679}},
+{ 510625, 2, {817,625}},
+{ 510663, 2, {867,589}},
+{ 510692, 2, {793,644}},
+{ 510708, 2, {803,636}},
+{ 510720, 2, {760,672}},
+{ 510741, 2, {737,693}},
+{ 510748, 2, {812,629}},
+{ 510796, 2, {836,611}},
+{ 510822, 2, {767,666}},
+{ 510860, 2, {820,623}},
+{ 510867, 2, {901,567}},
+{ 510900, 2, {780,655}},
+{ 510948, 2, {747,684}},
+{ 510972, 2, {869,588}},
+{ 511020, 2, {765,668}},
+{ 511056, 2, {728,702}},
+{ 511104, 2, {726,704}},
+{ 511116, 2, {764,669}},
+{ 511119, 2, {931,549}},
+{ 511128, 2, {744,687}},
+{ 511200, 2, {720,710}},
+{ 511210, 2, {763,670}},
+{ 511272, 2, {789,648}},
+{ 511328, 2, {841,608}},
+{ 511407, 2, {837,611}},
+{ 511464, 2, {808,633}},
+{ 511485, 2, {793,645}},
+{ 511488, 2, {768,666}},
+{ 511500, 2, {750,682}},
+{ 511511, 2, {803,637}},
+{ 511520, 2, {736,695}},
+{ 511525, 2, {925,553}},
+{ 511560, 2, {735,696}},
+{ 511668, 2, {732,699}},
+{ 511680, 2, {780,656}},
+{ 511695, 2, {747,685}},
+{ 511700, 2, {731,700}},
+{ 511704, 2, {824,621}},
+{ 511784, 2, {728,703}},
+{ 511819, 2, {1309,391}},
+{ 511836, 2, {772,663}},
+{ 511875, 2, {819,625}},
+{ 511884, 2, {723,708}},
+{ 511890, 2, {755,678}},
+{ 511896, 2, {831,616}},
+{ 511910, 2, {721,710}},
+{ 511920, 2, {720,711}},
+{ 511944, 2, {771,664}},
+{ 511980, 2, {742,690}},
+{ 512001, 2, {903,567}},
+{ 512040, 2, {753,680}},
+{ 512064, 2, {762,672}},
+{ 512070, 2, {845,606}},
+{ 512072, 2, {968,529}},
+{ 512112, 2, {752,681}},
+{ 512120, 2, {826,620}},
+{ 512148, 2, {804,637}},
+{ 512244, 2, {837,612}},
+{ 512256, 2, {736,696}},
+{ 512259, 2, {817,627}},
+{ 512265, 2, {923,555}},
+{ 512295, 2, {735,697}},
+{ 512316, 2, {749,684}},
+{ 512325, 2, {759,675}},
+{ 512336, 2, {781,656}},
+{ 512430, 2, {870,589}},
+{ 512460, 2, {730,702}},
+{ 512487, 2, {729,703}},
+{ 512512, 2, {728,704}},
+{ 512525, 2, {1079,475}},
+{ 512544, 2, {843,608}},
+{ 512560, 2, {745,688}},
+{ 512575, 2, {725,707}},
+{ 512601, 2, {969,529}},
+{ 512616, 2, {744,689}},
+{ 512631, 2, {721,711}},
+{ 512720, 2, {754,680}},
+{ 512736, 2, {763,672}},
+{ 512772, 2, {741,692}},
+{ 512796, 2, {849,604}},
+{ 512820, 2, {740,693}},
+{ 512865, 2, {783,655}},
+{ 512910, 2, {738,695}},
+{ 512928, 2, {822,624}},
+{ 512946, 2, {826,621}},
+{ 512952, 2, {737,696}},
+{ 512975, 2, {1207,425}},
+{ 512981, 2, {931,551}},
+{ 512988, 2, {788,651}},
+{ 512992, 2, {736,697}},
+{ 513000, 2, {750,684}},
+{ 513040, 2, {848,605}},
+{ 513080, 2, {808,635}},
+{ 513084, 2, {759,676}},
+{ 513128, 2, {748,686}},
+{ 513135, 2, {905,567}},
+{ 513156, 2, {861,596}},
+{ 513162, 2, {731,702}},
+{ 513205, 2, {1085,473}},
+{ 513216, 2, {729,704}},
+{ 513240, 2, {728,705}},
+{ 513252, 2, {807,636}},
+{ 513264, 2, {816,629}},
+{ 513300, 2, {725,708}},
+{ 513315, 2, {765,671}},
+{ 513324, 2, {756,679}},
+{ 513352, 2, {721,712}},
+{ 513360, 2, {720,713}},
+{ 513372, 2, {717,716}},
+{ 513390, 2, {785,654}},
+{ 513400, 2, {755,680}},
+{ 513420, 2, {796,645}},
+{ 513422, 2, {806,637}},
+{ 513450, 2, {815,630}},
+{ 513475, 2, {893,575}},
+{ 513513, 2, {741,693}},
+{ 513520, 2, {784,655}},
+{ 513555, 2, {1005,511}},
+{ 513585, 2, {909,565}},
+{ 513590, 2, {770,667}},
+{ 513600, 2, {800,642}},
+{ 513648, 2, {738,696}},
+{ 513744, 2, {834,616}},
+{ 513750, 2, {750,685}},
+{ 513756, 2, {804,639}},
+{ 513792, 2, {768,669}},
+{ 513810, 2, {865,594}},
+{ 513816, 2, {813,632}},
+{ 513876, 2, {748,687}},
+{ 513898, 2, {781,658}},
+{ 513920, 2, {730,704}},
+{ 513936, 2, {747,688}},
+{ 513945, 2, {729,705}},
+{ 513975, 2, {825,623}},
+{ 513996, 2, {812,633}},
+{ 514050, 2, {745,690}},
+{ 514080, 2, {720,714}},
+{ 514140, 2, {779,660}},
+{ 514150, 2, {791,650}},
+{ 514185, 2, {885,581}},
+{ 514332, 2, {819,628}},
+{ 514368, 2, {752,684}},
+{ 514395, 2, {805,639}},
+{ 514428, 2, {789,652}},
+{ 514464, 2, {736,699}},
+{ 514488, 2, {776,663}},
+{ 514500, 2, {735,700}},
+{ 514560, 2, {768,670}},
+{ 514600, 2, {775,664}},
+{ 514624, 2, {731,704}},
+{ 514692, 2, {841,612}},
+{ 514696, 2, {728,707}},
+{ 514710, 2, {774,665}},
+{ 514755, 2, {837,615}},
+{ 514764, 2, {724,711}},
+{ 514776, 2, {723,712}},
+{ 514786, 2, {722,713}},
+{ 514800, 2, {720,715}},
+{ 514836, 2, {756,681}},
+{ 514855, 2, {851,605}},
+{ 514932, 2, {913,564}},
+{ 514960, 2, {785,656}},
+{ 514976, 2, {836,616}},
+{ 514998, 2, {867,594}},
+{ 515000, 2, {824,625}},
+{ 515025, 2, {763,675}},
+{ 515028, 2, {771,668}},
+{ 515040, 2, {740,696}},
+{ 515052, 2, {753,684}},
+{ 515088, 2, {784,657}},
+{ 515120, 2, {752,685}},
+{ 515160, 2, {795,648}},
+{ 515185, 2, {935,551}},
+{ 515200, 2, {736,700}},
+{ 515214, 2, {783,658}},
+{ 515220, 2, {831,620}},
+{ 515280, 2, {760,678}},
+{ 515312, 2, {749,688}},
+{ 515328, 2, {732,704}},
+{ 515372, 2, {748,689}},
+{ 515403, 2, {729,707}},
+{ 515450, 2, {793,650}},
+{ 515475, 2, {725,711}},
+{ 515508, 2, {722,714}},
+{ 515592, 2, {744,693}},
+{ 515616, 2, {786,656}},
+{ 515632, 2, {871,592}},
+{ 515700, 2, {764,675}},
+{ 515736, 2, {741,696}},
+{ 515745, 2, {785,657}},
+{ 515780, 2, {740,697}},
+{ 515840, 2, {806,640}},
+{ 515844, 2, {801,644}},
+{ 515850, 2, {905,570}},
+{ 515872, 2, {752,686}},
+{ 515900, 2, {737,700}},
+{ 515916, 2, {843,612}},
+{ 515928, 2, {777,664}},
+{ 515955, 2, {795,649}},
+{ 515970, 2, {735,702}},
+{ 516000, 2, {750,688}},
+{ 516030, 2, {835,618}},
+{ 516040, 2, {760,679}},
+{ 516060, 2, {732,705}},
+{ 516096, 2, {768,672}},
+{ 516110, 2, {730,707}},
+{ 516132, 2, {729,708}},
+{ 516150, 2, {775,666}},
+{ 516192, 2, {849,608}},
+{ 516200, 2, {725,712}},
+{ 516230, 2, {722,715}},
+{ 516240, 2, {720,717}},
+{ 516243, 2, {793,651}},
+{ 516250, 2, {826,625}},
+{ 516285, 2, {745,693}},
+{ 516312, 2, {808,639}},
+{ 516420, 2, {755,684}},
+{ 516432, 2, {742,696}},
+{ 516460, 2, {833,620}},
+{ 516468, 2, {772,669}},
+{ 516477, 2, {741,697}},
+{ 516480, 2, {807,640}},
+{ 516483, 2, {999,517}},
+{ 516528, 2, {816,633}},
+{ 516591, 2, {1007,513}},
+{ 516624, 2, {752,687}},
+{ 516648, 2, {824,627}},
+{ 516663, 2, {973,531}},
+{ 516670, 2, {770,671}},
+{ 516672, 2, {736,702}},
+{ 516705, 2, {735,703}},
+{ 516732, 2, {867,596}},
+{ 516750, 2, {750,689}},
+{ 516780, 2, {783,660}},
+{ 516810, 2, {749,690}},
+{ 516816, 2, {776,666}},
+{ 516840, 2, {730,708}},
+{ 516852, 2, {879,588}},
+{ 516912, 2, {726,712}},
+{ 516924, 2, {747,692}},
+{ 516925, 2, {725,713}},
+{ 516971, 2, {1183,437}},
+{ 517055, 2, {869,595}},
+{ 517068, 2, {813,636}},
+{ 517075, 2, {925,559}},
+{ 517080, 2, {744,695}},
+{ 517090, 2, {830,623}},
+{ 517132, 2, {803,644}},
+{ 517140, 2, {765,676}},
+{ 517244, 2, {754,686}},
+{ 517260, 2, {740,699}},
+{ 517275, 2, {825,627}},
+{ 517280, 2, {848,610}},
+{ 517293, 2, {833,621}},
+{ 517374, 2, {737,702}},
+{ 517408, 2, {736,703}},
+{ 517440, 2, {735,704}},
+{ 517517, 2, {847,611}},
+{ 517524, 2, {732,707}},
+{ 517560, 2, {760,681}},
+{ 517584, 2, {789,656}},
+{ 517590, 2, {729,710}},
+{ 517608, 2, {728,711}},
+{ 517638, 2, {726,713}},
+{ 517650, 2, {725,714}},
+{ 517668, 2, {723,716}},
+{ 517716, 2, {788,657}},
+{ 517725, 2, {767,675}},
+{ 517752, 2, {799,648}},
+{ 517860, 2, {756,685}},
+{ 517880, 2, {856,605}},
+{ 517888, 2, {896,578}},
+{ 517902, 2, {798,649}},
+{ 517935, 2, {803,645}},
+{ 517940, 2, {893,580}},
+{ 517968, 2, {792,654}},
+{ 517979, 2, {961,539}},
+{ 518016, 2, {852,608}},
+{ 518035, 2, {779,665}},
+{ 518064, 2, {753,688}},
+{ 518075, 2, {901,575}},
+{ 518100, 2, {785,660}},
+{ 518112, 2, {771,672}},
+{ 518128, 2, {752,689}},
+{ 518154, 2, {949,546}},
+{ 518160, 2, {762,680}},
+{ 518196, 2, {796,651}},
+{ 518240, 2, {790,656}},
+{ 518245, 2, {871,595}},
+{ 518320, 2, {760,682}},
+{ 518340, 2, {795,652}},
+{ 518466, 2, {782,663}},
+{ 518518, 2, {814,637}},
+{ 518520, 2, {745,696}},
+{ 518535, 2, {835,621}},
+{ 518544, 2, {831,624}},
+{ 518568, 2, {744,697}},
+{ 518580, 2, {774,670}},
+{ 518592, 2, {876,592}},
+{ 518616, 2, {756,686}},
+{ 518650, 2, {902,575}},
+{ 518700, 2, {741,700}},
+{ 518736, 2, {808,642}},
+{ 518805, 2, {915,567}},
+{ 518840, 2, {763,680}},
+{ 518848, 2, {737,704}},
+{ 518868, 2, {812,639}},
+{ 518880, 2, {736,705}},
+{ 518896, 2, {791,656}},
+{ 518925, 2, {825,629}},
+{ 518940, 2, {837,620}},
+{ 518976, 2, {816,636}},
+{ 519036, 2, {777,668}},
+{ 519048, 2, {729,712}},
+{ 519057, 2, {749,693}},
+{ 519060, 2, {820,633}},
+{ 519064, 2, {728,713}},
+{ 519090, 2, {726,715}},
+{ 519108, 2, {724,717}},
+{ 519120, 2, {721,720}},
+{ 519144, 2, {776,669}},
+{ 519156, 2, {759,684}},
+{ 519165, 2, {747,695}},
+{ 519168, 2, {768,676}},
+{ 519176, 2, {889,584}},
+{ 519200, 2, {800,649}},
+{ 519232, 2, {854,608}},
+{ 519288, 2, {843,616}},
+{ 519350, 2, {799,650}},
+{ 519354, 2, {774,671}},
+{ 519365, 2, {781,665}},
+{ 519372, 2, {756,687}},
+{ 519400, 2, {742,700}},
+{ 519435, 2, {765,679}},
+{ 519440, 2, {755,688}},
+{ 519453, 2, {891,583}},
+{ 519480, 2, {740,702}},
+{ 519504, 2, {822,632}},
+{ 519552, 2, {738,704}},
+{ 519585, 2, {737,705}},
+{ 519588, 2, {849,612}},
+{ 519622, 2, {899,578}},
+{ 519645, 2, {735,707}},
+{ 519680, 2, {812,640}},
+{ 519687, 2, {791,657}},
+{ 519708, 2, {807,644}},
+{ 519720, 2, {732,710}},
+{ 519750, 2, {750,693}},
+{ 519777, 2, {729,713}},
+{ 519792, 2, {728,714}},
+{ 519800, 2, {904,575}},
+{ 519840, 2, {722,720}},
+{ 519912, 2, {747,696}},
+{ 519939, 2, {917,567}},
+{ 520000, 2, {800,650}},
+{ 520025, 2, {775,671}},
+{ 520030, 2, {782,665}},
+{ 520044, 2, {861,604}},
+{ 520056, 2, {744,699}},
+{ 520065, 2, {819,635}},
+{ 520128, 2, {756,688}},
+{ 520146, 2, {781,666}},
+{ 520149, 2, {799,651}},
+{ 520182, 2, {741,702}},
+{ 520200, 2, {765,680}},
+{ 520208, 2, {793,656}},
+{ 520260, 2, {754,690}},
+{ 520284, 2, {764,681}},
+{ 520290, 2, {738,705}},
+{ 520308, 2, {873,596}},
+{ 520320, 2, {813,640}},
+{ 520331, 2, {1517,343}},
+{ 520344, 2, {792,657}},
+{ 520352, 2, {736,707}},
+{ 520368, 2, {879,592}},
+{ 520380, 2, {735,708}},
+{ 520416, 2, {834,624}},
+{ 520421, 2, {1331,391}},
+{ 520429, 2, {817,637}},
+{ 520452, 2, {732,711}},
+{ 520506, 2, {729,714}},
+{ 520520, 2, {728,715}},
+{ 520536, 2, {943,552}},
+{ 520560, 2, {723,720}},
+{ 520600, 2, {760,685}},
+{ 520625, 2, {833,625}},
+{ 520674, 2, {759,686}},
+{ 520695, 2, {783,665}},
+{ 520704, 2, {768,678}},
+{ 520740, 2, {789,660}},
+{ 520785, 2, {815,639}},
+{ 520800, 2, {744,700}},
+{ 520856, 2, {917,568}},
+{ 520884, 2, {742,702}},
+{ 520890, 2, {895,582}},
+{ 520905, 2, {847,615}},
+{ 520923, 2, {741,703}},
+{ 520950, 2, {755,690}},
+{ 520960, 2, {740,704}},
+{ 521076, 2, {753,692}},
+{ 521088, 2, {736,708}},
+{ 521100, 2, {772,675}},
+{ 521136, 2, {752,693}},
+{ 521160, 2, {808,645}},
+{ 521196, 2, {771,676}},
+{ 521235, 2, {729,715}},
+{ 521240, 2, {785,664}},
+{ 521246, 2, {817,638}},
+{ 521250, 2, {750,695}},
+{ 521304, 2, {749,696}},
+{ 521356, 2, {748,697}},
+{ 521360, 2, {760,686}},
+{ 521367, 2, {777,671}},
+{ 521400, 2, {790,660}},
+{ 521424, 2, {816,639}},
+{ 521472, 2, {768,679}},
+{ 521520, 2, {795,656}},
+{ 521560, 2, {767,680}},
+{ 521592, 2, {824,633}},
+{ 521594, 2, {782,667}},
+{ 521595, 2, {865,603}},
+{ 521640, 2, {756,690}},
+{ 521645, 2, {1445,361}},
+{ 521664, 2, {741,704}},
+{ 521700, 2, {740,705}},
+{ 521730, 2, {765,682}},
+{ 521752, 2, {847,616}},
+{ 521766, 2, {738,707}},
+{ 521794, 2, {793,658}},
+{ 521796, 2, {737,708}},
+{ 521820, 2, {780,669}},
+{ 521868, 2, {831,628}},
+{ 521885, 2, {1085,481}},
+{ 521892, 2, {763,684}},
+{ 521904, 2, {786,664}},
+{ 521934, 2, {731,714}},
+{ 521964, 2, {729,716}},
+{ 521970, 2, {762,685}},
+{ 521976, 2, {728,717}},
+{ 522000, 2, {725,720}},
+{ 522120, 2, {760,687}},
+{ 522144, 2, {777,672}},
+{ 522192, 2, {759,688}},
+{ 522210, 2, {845,618}},
+{ 522240, 2, {768,680}},
+{ 522252, 2, {801,652}},
+{ 522288, 2, {744,702}},
+{ 522291, 2, {833,627}},
+{ 522340, 2, {820,637}},
+{ 522368, 2, {742,704}},
+{ 522444, 2, {788,663}},
+{ 522445, 2, {805,649}},
+{ 522500, 2, {836,625}},
+{ 522522, 2, {754,693}},
+{ 522560, 2, {736,710}},
+{ 522580, 2, {901,580}},
+{ 522600, 2, {780,670}},
+{ 522640, 2, {752,695}},
+{ 522660, 2, {843,620}},
+{ 522665, 2, {731,715}},
+{ 522675, 2, {909,575}},
+{ 522690, 2, {786,665}},
+{ 522720, 2, {726,720}},
+{ 522725, 2, {725,721}},
+{ 522750, 2, {750,697}},
+{ 522753, 2, {803,651}},
+{ 522784, 2, {961,544}},
+{ 522810, 2, {785,666}},
+{ 522830, 2, {770,679}},
+{ 522852, 2, {748,699}},
+{ 522900, 2, {747,700}},
+{ 522928, 2, {784,667}},
+{ 522936, 2, {807,648}},
+{ 522951, 2, {759,689}},
+{ 522972, 2, {796,657}},
+{ 522984, 2, {849,616}},
+{ 522990, 2, {745,702}},
+{ 523008, 2, {768,681}},
+{ 523032, 2, {744,703}},
+{ 523044, 2, {783,668}},
+{ 523075, 2, {1225,427}},
+{ 523094, 2, {767,682}},
+{ 523110, 2, {742,705}},
+{ 523125, 2, {775,675}},
+{ 523138, 2, {869,602}},
+{ 523180, 2, {740,707}},
+{ 523200, 2, {800,654}},
+{ 523215, 2, {755,693}},
+{ 523230, 2, {815,642}},
+{ 523240, 2, {824,635}},
+{ 523250, 2, {805,650}},
+{ 523260, 2, {765,684}},
+{ 523296, 2, {736,711}},
+{ 523320, 2, {735,712}},
+{ 523328, 2, {832,629}},
+{ 523380, 2, {732,715}},
+{ 523404, 2, {804,651}},
+{ 523452, 2, {724,723}},
+{ 523488, 2, {779,672}},
+{ 523572, 2, {813,644}},
+{ 523575, 2, {895,585}},
+{ 523600, 2, {748,700}},
+{ 523611, 2, {1107,473}},
+{ 523640, 2, {760,689}},
+{ 523668, 2, {867,604}},
+{ 523740, 2, {812,645}},
+{ 523755, 2, {927,565}},
+{ 523775, 2, {1025,511}},
+{ 523776, 2, {744,704}},
+{ 523800, 2, {776,675}},
+{ 523809, 2, {1089,481}},
+{ 523872, 2, {816,642}},
+{ 523884, 2, {879,596}},
+{ 523896, 2, {789,664}},
+{ 523908, 2, {756,693}},
+{ 523957, 2, {833,629}},
+{ 523980, 2, {738,710}},
+{ 524000, 2, {800,655}},
+{ 524025, 2, {765,685}},
+{ 524055, 2, {735,713}},
+{ 524088, 2, {753,696}},
+{ 524124, 2, {828,633}},
+{ 524160, 2, {728,720}},
+{ 524172, 2, {726,722}},
+{ 524190, 2, {865,606}},
+{ 524216, 2, {814,644}},
+{ 524223, 2, {1099,477}},
+{ 524238, 2, {858,611}},
+{ 524256, 2, {762,688}},
+{ 524280, 2, {771,680}},
+{ 524300, 2, {749,700}},
+{ 524342, 2, {871,602}},
+{ 524400, 2, {760,690}},
+{ 524475, 2, {777,675}},
+{ 524480, 2, {745,704}},
+{ 524496, 2, {784,669}},
+{ 524520, 2, {744,705}},
+{ 524535, 2, {867,605}},
+{ 524610, 2, {783,670}},
+{ 524628, 2, {741,708}},
+{ 524655, 2, {801,655}},
+{ 524700, 2, {795,660}},
+{ 524745, 2, {845,621}},
+{ 524755, 2, {1015,517}},
+{ 524768, 2, {736,713}},
+{ 524832, 2, {781,672}},
+{ 524835, 2, {963,545}},
+{ 524844, 2, {732,717}},
+{ 524868, 2, {764,687}},
+{ 524880, 2, {729,720}},
+{ 524888, 2, {728,721}},
+{ 524944, 2, {763,688}},
+{ 524975, 2, {913,575}},
+{ 525096, 2, {748,702}},
+{ 525140, 2, {770,682}},
+{ 525192, 2, {831,632}},
+{ 525210, 2, {854,615}},
+{ 525224, 2, {791,664}},
+{ 525228, 2, {759,692}},
+{ 525252, 2, {777,676}},
+{ 525280, 2, {784,670}},
+{ 525312, 2, {768,684}},
+{ 525393, 2, {783,671}},
+{ 525420, 2, {756,695}},
+{ 525450, 2, {775,678}},
+{ 525456, 2, {738,712}},
+{ 525460, 2, {860,611}},
+{ 525480, 2, {755,696}},
+{ 525504, 2, {736,714}},
+{ 525525, 2, {735,715}},
+{ 525538, 2, {754,697}},
+{ 525546, 2, {774,679}},
+{ 525600, 2, {730,720}},
+{ 525609, 2, {729,721}},
+{ 525616, 2, {728,722}},
+{ 525636, 2, {837,628}},
+{ 525648, 2, {752,699}},
+{ 525690, 2, {810,649}},
+{ 525732, 2, {772,681}},
+{ 525798, 2, {749,702}},
+{ 525825, 2, {779,675}},
+{ 525844, 2, {748,703}},
+{ 525888, 2, {747,704}},
+{ 525915, 2, {899,585}},
+{ 525987, 2, {759,693}},
+{ 526008, 2, {744,707}},
+{ 526032, 2, {843,624}},
+{ 526050, 2, {835,630}},
+{ 526064, 2, {784,671}},
+{ 526071, 2, {861,611}},
+{ 526080, 2, {768,685}},
+{ 526128, 2, {776,678}},
+{ 526140, 2, {740,711}},
+{ 526148, 2, {817,644}},
+{ 526162, 2, {767,686}},
+{ 526164, 2, {807,652}},
+{ 526218, 2, {737,714}},
+{ 526225, 2, {775,679}},
+{ 526240, 2, {736,715}},
+{ 526260, 2, {735,716}},
+{ 526288, 2, {889,592}},
+{ 526320, 2, {731,720}},
+{ 526330, 2, {730,721}},
+{ 526338, 2, {729,722}},
+{ 526344, 2, {728,723}},
+{ 526350, 2, {726,725}},
+{ 526380, 2, {849,620}},
+{ 526449, 2, {903,583}},
+{ 526456, 2, {833,632}},
+{ 526470, 2, {763,690}},
+{ 526473, 2, {837,629}},
+{ 526491, 2, {959,549}},
+{ 526500, 2, {750,702}},
+{ 526536, 2, {824,639}},
+{ 526592, 2, {748,704}},
+{ 526604, 2, {779,676}},
+{ 526656, 2, {832,633}},
+{ 526680, 2, {760,693}},
+{ 526695, 2, {949,555}},
+{ 526710, 2, {905,582}},
+{ 526750, 2, {875,602}},
+{ 526768, 2, {803,656}},
+{ 526824, 2, {813,648}},
+{ 526848, 2, {768,686}},
+{ 526988, 2, {812,649}},
+{ 527000, 2, {775,680}},
+{ 527040, 2, {732,720}},
+{ 527052, 2, {789,668}},
+{ 527085, 2, {765,689}},
+{ 527088, 2, {834,632}},
+{ 527100, 2, {753,700}},
+{ 527136, 2, {816,646}},
+{ 527172, 2, {788,669}},
+{ 527175, 2, {781,675}},
+{ 527250, 2, {750,703}},
+{ 527292, 2, {873,604}},
+{ 527296, 2, {749,704}},
+{ 527307, 2, {841,627}},
+{ 527310, 2, {810,651}},
+{ 527340, 2, {748,705}},
+{ 527345, 2, {793,665}},
+{ 527364, 2, {771,684}},
+{ 527400, 2, {879,600}},
+{ 527424, 2, {804,656}},
+{ 527425, 2, {1241,425}},
+{ 527436, 2, {819,644}},
+{ 527460, 2, {745,708}},
+{ 527472, 2, {792,666}},
+{ 527520, 2, {785,672}},
+{ 527527, 2, {1001,527}},
+{ 527560, 2, {872,605}},
+{ 527592, 2, {741,712}},
+{ 527616, 2, {768,687}},
+{ 527625, 2, {875,603}},
+{ 527670, 2, {738,715}},
+{ 527696, 2, {767,688}},
+{ 527712, 2, {736,717}},
+{ 527744, 2, {868,608}},
+{ 527748, 2, {796,663}},
+{ 527772, 2, {732,721}},
+{ 527796, 2, {729,724}},
+{ 527800, 2, {728,725}},
+{ 527877, 2, {931,567}},
+{ 527880, 2, {795,664}},
+{ 527904, 2, {752,702}},
+{ 528000, 2, {750,704}},
+{ 528045, 2, {749,705}},
+{ 528080, 2, {805,656}},
+{ 528125, 2, {845,625}},
+{ 528129, 2, {747,707}},
+{ 528138, 2, {793,666}},
+{ 528165, 2, {873,605}},
+{ 528192, 2, {786,672}},
+{ 528200, 2, {760,695}},
+{ 528228, 2, {804,657}},
+{ 528240, 2, {744,710}},
+{ 528264, 2, {759,696}},
+{ 528320, 2, {832,635}},
+{ 528333, 2, {741,713}},
+{ 528374, 2, {803,658}},
+{ 528432, 2, {808,654}},
+{ 528444, 2, {756,699}},
+{ 528456, 2, {776,681}},
+{ 528471, 2, {851,621}},
+{ 528516, 2, {831,636}},
+{ 528525, 2, {729,725}},
+{ 528528, 2, {728,726}},
+{ 528612, 2, {812,651}},
+{ 528632, 2, {782,676}},
+{ 528640, 2, {826,640}},
+{ 528660, 2, {801,660}},
+{ 528710, 2, {830,637}},
+{ 528759, 2, {763,693}},
+{ 528770, 2, {874,605}},
+{ 528808, 2, {931,568}},
+{ 528876, 2, {747,708}},
+{ 528885, 2, {805,657}},
+{ 528900, 2, {820,645}},
+{ 528984, 2, {744,711}},
+{ 529008, 2, {824,642}},
+{ 529023, 2, {759,697}},
+{ 529074, 2, {741,714}},
+{ 529092, 2, {828,639}},
+{ 529152, 2, {768,689}},
+{ 529188, 2, {836,633}},
+{ 529200, 2, {735,720}},
+{ 529221, 2, {869,609}},
+{ 529230, 2, {767,690}},
+{ 529236, 2, {732,723}},
+{ 529240, 2, {808,655}},
+{ 529254, 2, {729,726}},
+{ 529308, 2, {754,702}},
+{ 529375, 2, {847,625}},
+{ 529380, 2, {765,692}},
+{ 529392, 2, {807,656}},
+{ 529404, 2, {843,628}},
+{ 529425, 2, {905,585}},
+{ 529452, 2, {764,693}},
+{ 529470, 2, {795,666}},
+{ 529480, 2, {854,620}},
+{ 529529, 2, {1001,529}},
+{ 529550, 2, {850,623}},
+{ 529568, 2, {871,608}},
+{ 529590, 2, {762,695}},
+{ 529620, 2, {780,679}},
+{ 529695, 2, {745,711}},
+{ 529720, 2, {760,697}},
+{ 529737, 2, {799,663}},
+{ 529760, 2, {770,688}},
+{ 529776, 2, {849,624}},
+{ 529802, 2, {923,574}},
+{ 529815, 2, {741,715}},
+{ 529830, 2, {841,630}},
+{ 529848, 2, {792,669}},
+{ 529872, 2, {798,664}},
+{ 529875, 2, {785,675}},
+{ 529925, 2, {1025,517}},
+{ 529935, 2, {735,721}},
+{ 529970, 2, {791,670}},
+{ 529975, 2, {731,725}},
+{ 530000, 2, {848,625}},
+{ 530010, 2, {755,702}},
+{ 530062, 2, {754,703}},
+{ 530076, 2, {813,652}},
+{ 530100, 2, {775,684}},
+{ 530112, 2, {753,704}},
+{ 530160, 2, {752,705}},
+{ 530190, 2, {774,685}},
+{ 530208, 2, {789,672}},
+{ 530250, 2, {750,707}},
+{ 530292, 2, {749,708}},
+{ 530334, 2, {854,621}},
+{ 530352, 2, {762,696}},
+{ 530364, 2, {772,687}},
+{ 530376, 2, {861,616}},
+{ 530439, 2, {871,609}},
+{ 530440, 2, {745,712}},
+{ 530448, 2, {771,688}},
+{ 530556, 2, {741,716}},
+{ 530580, 2, {740,717}},
+{ 530604, 2, {867,612}},
+{ 530640, 2, {737,720}},
+{ 530656, 2, {736,721}},
+{ 530670, 2, {735,722}},
+{ 530700, 2, {732,725}},
+{ 530706, 2, {731,726}},
+{ 530712, 2, {729,728}},
+{ 530725, 2, {923,575}},
+{ 530796, 2, {852,623}},
+{ 530816, 2, {754,704}},
+{ 530856, 2, {808,657}},
+{ 530880, 2, {790,672}},
+{ 530916, 2, {879,604}},
+{ 530950, 2, {925,574}},
+{ 530964, 2, {774,686}},
+{ 531024, 2, {851,624}},
+{ 531036, 2, {891,596}},
+{ 531048, 2, {763,696}},
+{ 531050, 2, {817,650}},
+{ 531060, 2, {795,668}},
+{ 531180, 2, {780,681}},
+{ 531216, 2, {744,714}},
+{ 531240, 2, {760,699}},
+{ 531278, 2, {779,682}},
+{ 531300, 2, {759,700}},
+{ 531335, 2, {799,665}},
+{ 531360, 2, {738,720}},
+{ 531454, 2, {833,638}},
+{ 531468, 2, {756,703}},
+{ 531480, 2, {824,645}},
+{ 531495, 2, {837,635}},
+{ 531505, 2, {845,629}},
+{ 531520, 2, {755,704}},
+{ 531531, 2, {767,693}},
+{ 531552, 2, {784,678}},
+{ 531560, 2, {776,685}},
+{ 531615, 2, {915,581}},
+{ 531630, 2, {895,594}},
+{ 531648, 2, {832,639}},
+{ 531650, 2, {775,686}},
+{ 531657, 2, {783,679}},
+{ 531664, 2, {752,707}},
+{ 531675, 2, {765,695}},
+{ 531720, 2, {840,633}},
+{ 531760, 2, {782,680}},
+{ 531790, 2, {749,710}},
+{ 531828, 2, {748,711}},
+{ 531840, 2, {831,640}},
+{ 531864, 2, {747,712}},
+{ 531867, 2, {817,651}},
+{ 531875, 2, {851,625}},
+{ 531900, 2, {788,675}},
+{ 531930, 2, {745,714}},
+{ 531960, 2, {744,715}},
+{ 532098, 2, {738,721}},
+{ 532128, 2, {736,723}},
+{ 532134, 2, {799,666}},
+{ 532140, 2, {735,724}},
+{ 532168, 2, {731,728}},
+{ 532170, 2, {730,729}},
+{ 532180, 2, {820,649}},
+{ 532224, 2, {756,704}},
+{ 532230, 2, {785,678}},
+{ 532266, 2, {798,667}},
+{ 532287, 2, {833,639}},
+{ 532332, 2, {837,636}},
+{ 532400, 2, {880,605}},
+{ 532416, 2, {752,708}},
+{ 532440, 2, {765,696}},
+{ 532467, 2, {999,533}},
+{ 532475, 2, {1121,475}},
+{ 532512, 2, {774,688}},
+{ 532524, 2, {796,669}},
+{ 532532, 2, {836,637}},
+{ 532539, 2, {749,711}},
+{ 532608, 2, {876,608}},
+{ 532620, 2, {807,660}},
+{ 532656, 2, {822,648}},
+{ 532665, 2, {801,665}},
+{ 532763, 2, {847,629}},
+{ 532770, 2, {826,645}},
+{ 532776, 2, {843,632}},
+{ 532800, 2, {740,720}},
+{ 532818, 2, {759,702}},
+{ 532899, 2, {731,729}},
+{ 532950, 2, {825,646}},
+{ 532980, 2, {756,705}},
+{ 533010, 2, {815,654}},
+{ 533025, 2, {927,575}},
+{ 533052, 2, {804,663}},
+{ 533071, 2, {989,539}},
+{ 533112, 2, {776,687}},
+{ 533124, 2, {753,708}},
+{ 533172, 2, {849,628}},
+{ 533200, 2, {775,688}},
+{ 533205, 2, {765,697}},
+{ 533286, 2, {774,689}},
+{ 533288, 2, {749,712}},
+{ 533324, 2, {748,713}},
+{ 533328, 2, {813,656}},
+{ 533364, 2, {789,676}},
+{ 533445, 2, {795,671}},
+{ 533448, 2, {744,717}},
+{ 533484, 2, {812,657}},
+{ 533520, 2, {741,720}},
+{ 533532, 2, {771,692}},
+{ 533533, 2, {1001,533}},
+{ 533540, 2, {740,721}},
+{ 533565, 2, {835,639}},
+{ 533577, 2, {759,703}},
+{ 533600, 2, {736,725}},
+{ 533610, 2, {735,726}},
+{ 533628, 2, {732,729}},
+{ 533664, 2, {816,654}},
+{ 533750, 2, {854,625}},
+{ 533760, 2, {768,695}},
+{ 533800, 2, {785,680}},
+{ 533820, 2, {820,651}},
+{ 533904, 2, {784,681}},
+{ 533919, 2, {969,551}},
+{ 533920, 2, {752,710}},
+{ 533925, 2, {791,675}},
+{ 533975, 2, {775,689}},
+{ 533988, 2, {819,652}},
+{ 533995, 2, {803,665}},
+{ 534000, 2, {750,712}},
+{ 534006, 2, {783,682}},
+{ 534036, 2, {764,699}},
+{ 534100, 2, {763,700}},
+{ 534105, 2, {747,715}},
+{ 534144, 2, {832,642}},
+{ 534177, 2, {973,549}},
+{ 534204, 2, {781,684}},
+{ 534240, 2, {742,720}},
+{ 534275, 2, {1075,497}},
+{ 534276, 2, {873,612}},
+{ 534300, 2, {780,685}},
+{ 534325, 2, {737,725}},
+{ 534336, 2, {736,726}},
+{ 534360, 2, {732,730}},
+{ 534375, 2, {855,625}},
+{ 534394, 2, {779,686}},
+{ 534432, 2, {879,608}},
+{ 534435, 2, {869,615}},
+{ 534480, 2, {786,680}},
+{ 534492, 2, {756,707}},
+{ 534520, 2, {805,664}},
+{ 534528, 2, {768,696}},
+{ 534540, 2, {755,708}},
+{ 534570, 2, {865,618}},
+{ 534576, 2, {777,688}},
+{ 534600, 2, {792,675}},
+{ 534625, 2, {875,611}},
+{ 534640, 2, {815,656}},
+{ 534650, 2, {850,629}},
+{ 534672, 2, {752,711}},
+{ 534681, 2, {861,621}},
+{ 534688, 2, {784,682}},
+{ 534750, 2, {750,713}},
+{ 534798, 2, {803,666}},
+{ 534852, 2, {747,716}},
+{ 534888, 2, {782,684}},
+{ 534905, 2, {899,595}},
+{ 534963, 2, {957,559}},
+{ 534996, 2, {772,693}},
+{ 535000, 2, {856,625}},
+{ 535020, 2, {740,723}},
+{ 535040, 2, {760,704}},
+{ 535050, 2, {738,725}},
+{ 535059, 2, {1043,513}},
+{ 535068, 2, {801,668}},
+{ 535080, 2, {735,728}},
+{ 535164, 2, {831,644}},
+{ 535194, 2, {901,594}},
+{ 535200, 2, {800,669}},
+{ 535275, 2, {793,675}},
+{ 535296, 2, {768,697}},
+{ 535304, 2, {847,632}},
+{ 535353, 2, {777,689}},
+{ 535392, 2, {792,676}},
+{ 535425, 2, {825,649}},
+{ 535440, 2, {776,690}},
+{ 535455, 2, {815,657}},
+{ 535458, 2, {798,671}},
+{ 535500, 2, {750,714}},
+{ 535528, 2, {917,584}},
+{ 535572, 2, {783,684}},
+{ 535626, 2, {763,702}},
+{ 535665, 2, {871,615}},
+{ 535704, 2, {808,663}},
+{ 535717, 2, {841,637}},
+{ 535766, 2, {781,686}},
+{ 535780, 2, {860,623}},
+{ 535800, 2, {760,705}},
+{ 535815, 2, {735,729}},
+{ 535848, 2, {807,664}},
+{ 535860, 2, {780,687}},
+{ 535920, 2, {770,696}},
+{ 535990, 2, {806,665}},
+{ 536000, 2, {800,670}},
+{ 536067, 2, {889,603}},
+{ 536070, 2, {835,642}},
+{ 536095, 2, {901,595}},
+{ 536112, 2, {816,657}},
+{ 536130, 2, {777,690}},
+{ 536136, 2, {753,712}},
+{ 536148, 2, {843,636}},
+{ 536250, 2, {750,715}},
+{ 536256, 2, {784,684}},
+{ 536316, 2, {748,717}},
+{ 536355, 2, {783,685}},
+{ 536360, 2, {920,583}},
+{ 536393, 2, {1331,403}},
+{ 536400, 2, {745,720}},
+{ 536410, 2, {790,679}},
+{ 536424, 2, {744,721}},
+{ 536445, 2, {819,655}},
+{ 536448, 2, {762,704}},
+{ 536452, 2, {782,686}},
+{ 536484, 2, {741,724}},
+{ 536520, 2, {789,680}},
+{ 536536, 2, {737,728}},
+{ 536544, 2, {736,729}},
+{ 536568, 2, {849,632}},
+{ 536580, 2, {813,660}},
+{ 536616, 2, {771,696}},
+{ 536625, 2, {795,675}},
+{ 536628, 2, {788,681}},
+{ 536640, 2, {780,688}},
+{ 536690, 2, {770,697}},
+{ 536760, 2, {756,710}},
+{ 536800, 2, {800,671}},
+{ 536805, 2, {755,711}},
+{ 536832, 2, {768,699}},
+{ 536844, 2, {913,588}},
+{ 536900, 2, {767,700}},
+{ 536928, 2, {752,714}},
+{ 536935, 2, {805,667}},
+{ 536940, 2, {785,684}},
+{ 536976, 2, {792,678}},
+{ 537030, 2, {765,702}},
+{ 537040, 2, {784,685}},
+{ 537075, 2, {775,693}},
+{ 537138, 2, {783,686}},
+{ 537152, 2, {763,704}},
+{ 537165, 2, {865,621}},
+{ 537251, 2, {1859,289}},
+{ 537264, 2, {738,728}},
+{ 537273, 2, {737,729}},
+{ 537280, 2, {736,730}},
+{ 537285, 2, {735,731}},
+{ 537300, 2, {796,675}},
+{ 537320, 2, {760,707}},
+{ 537328, 2, {781,688}},
+{ 537372, 2, {759,708}},
+{ 537420, 2, {780,689}},
+{ 537425, 2, {925,581}},
+{ 537472, 2, {832,646}},
+{ 537510, 2, {779,690}},
+{ 537516, 2, {756,711}},
+{ 537540, 2, {867,620}},
+{ 537560, 2, {755,712}},
+{ 537570, 2, {905,594}},
+{ 537600, 2, {768,700}},
+{ 537602, 2, {754,713}},
+{ 537680, 2, {752,715}},
+{ 537684, 2, {777,692}},
+{ 537768, 2, {776,693}},
+{ 537795, 2, {765,703}},
+{ 537840, 2, {747,720}},
+{ 537876, 2, {804,669}},
+{ 537880, 2, {791,680}},
+{ 537900, 2, {815,660}},
+{ 537912, 2, {744,723}},
+{ 537915, 2, {763,705}},
+{ 537930, 2, {774,695}},
+{ 537948, 2, {879,612}},
+{ 537950, 2, {742,725}},
+{ 537966, 2, {741,726}},
+{ 538005, 2, {1157,465}},
+{ 538016, 2, {736,731}},
+{ 538020, 2, {735,732}},
+{ 538118, 2, {833,646}},
+{ 538125, 2, {861,625}},
+{ 538128, 2, {808,666}},
+{ 538164, 2, {891,604}},
+{ 538240, 2, {841,640}},
+{ 538350, 2, {925,582}},
+{ 538356, 2, {754,714}},
+{ 538410, 2, {786,685}},
+{ 538434, 2, {767,702}},
+{ 538480, 2, {848,635}},
+{ 538488, 2, {831,648}},
+{ 538560, 2, {748,720}},
+{ 538587, 2, {747,721}},
+{ 538608, 2, {784,687}},
+{ 538620, 2, {764,705}},
+{ 538650, 2, {798,675}},
+{ 538704, 2, {774,696}},
+{ 538740, 2, {738,730}},
+{ 538752, 2, {736,732}},
+{ 538896, 2, {824,654}},
+{ 539000, 2, {770,700}},
+{ 539028, 2, {756,713}},
+{ 539055, 2, {891,605}},
+{ 539070, 2, {755,714}},
+{ 539076, 2, {807,668}},
+{ 539110, 2, {754,715}},
+{ 539121, 2, {961,561}},
+{ 539136, 2, {768,702}},
+{ 539148, 2, {753,716}},
+{ 539175, 2, {975,553}},
+{ 539184, 2, {752,717}},
+{ 539220, 2, {817,660}},
+{ 539232, 2, {822,656}},
+{ 539240, 2, {793,680}},
+{ 539275, 2, {925,583}},
+{ 539280, 2, {749,720}},
+{ 539316, 2, {844,639}},
+{ 539320, 2, {776,695}},
+{ 539352, 2, {792,681}},
+{ 539400, 2, {744,725}},
+{ 539448, 2, {741,728}},
+{ 539460, 2, {740,729}},
+{ 539478, 2, {738,731}},
+{ 539484, 2, {737,732}},
+{ 539487, 2, {783,689}},
+{ 539520, 2, {843,640}},
+{ 539560, 2, {820,658}},
+{ 539616, 2, {803,672}},
+{ 539628, 2, {772,699}},
+{ 539676, 2, {789,684}},
+{ 539685, 2, {895,603}},
+{ 539695, 2, {1235,437}},
+{ 539700, 2, {771,700}},
+{ 539720, 2, {824,655}},
+{ 539784, 2, {756,714}},
+{ 539805, 2, {795,679}},
+{ 539832, 2, {813,664}},
+{ 539847, 2, {779,693}},
+{ 539865, 2, {837,645}},
+{ 539904, 2, {768,703}},
+{ 539955, 2, {845,639}},
+{ 539964, 2, {849,636}},
+{ 539968, 2, {767,704}},
+{ 540000, 2, {750,720}},
+{ 540056, 2, {748,722}},
+{ 540080, 2, {785,688}},
+{ 540124, 2, {799,676}},
+{ 540144, 2, {744,726}},
+{ 540155, 2, {805,671}},
+{ 540175, 2, {775,697}},
+{ 540189, 2, {741,729}},
+{ 540204, 2, {763,708}},
+{ 540265, 2, {893,605}},
+{ 540288, 2, {804,672}},
+{ 540360, 2, {760,711}},
+{ 540408, 2, {759,712}},
+{ 540432, 2, {834,648}},
+{ 540512, 2, {889,608}},
+{ 540540, 2, {756,715}},
+{ 540552, 2, {808,669}},
+{ 540600, 2, {795,680}},
+{ 540617, 2, {833,649}},
+{ 540708, 2, {861,628}},
+{ 540735, 2, {767,705}},
+{ 540750, 2, {750,721}},
+{ 540768, 2, {786,688}},
+{ 540792, 2, {777,696}},
+{ 540800, 2, {800,676}},
+{ 540804, 2, {748,723}},
+{ 540826, 2, {793,682}},
+{ 540828, 2, {747,724}},
+{ 540855, 2, {765,707}},
+{ 540870, 2, {745,726}},
+{ 540891, 2, {871,621}},
+{ 540918, 2, {742,729}},
+{ 540940, 2, {740,731}},
+{ 540960, 2, {736,735}},
+{ 540995, 2, {1015,533}},
+{ 541008, 2, {816,663}},
+{ 541025, 2, {1139,475}},
+{ 541044, 2, {791,684}},
+{ 541125, 2, {925,585}},
+{ 541160, 2, {815,664}},
+{ 541167, 2, {759,713}},
+{ 541233, 2, {781,693}},
+{ 541260, 2, {873,620}},
+{ 541310, 2, {770,703}},
+{ 541356, 2, {788,687}},
+{ 541368, 2, {824,657}},
+{ 541443, 2, {1121,483}},
+{ 541450, 2, {833,650}},
+{ 541464, 2, {879,616}},
+{ 541476, 2, {801,676}},
+{ 541500, 2, {750,722}},
+{ 541569, 2, {777,697}},
+{ 541575, 2, {747,725}},
+{ 541620, 2, {765,708}},
+{ 541650, 2, {785,690}},
+{ 541671, 2, {741,731}},
+{ 541695, 2, {737,735}},
+{ 541730, 2, {763,710}},
+{ 541788, 2, {897,604}},
+{ 541812, 2, {831,652}},
+{ 541836, 2, {783,692}},
+{ 541856, 2, {826,656}},
+{ 541872, 2, {848,639}},
+{ 541875, 2, {867,625}},
+{ 541880, 2, {760,713}},
+{ 541926, 2, {759,714}},
+{ 542010, 2, {870,623}},
+{ 542025, 2, {803,675}},
+{ 542052, 2, {756,717}},
+{ 542076, 2, {796,681}},
+{ 542080, 2, {770,704}},
+{ 542087, 2, {851,637}},
+{ 542100, 2, {780,695}},
+{ 542160, 2, {753,720}},
+{ 542184, 2, {779,696}},
+{ 542192, 2, {752,721}},
+{ 542225, 2, {943,575}},
+{ 542241, 2, {1057,513}},
+{ 542256, 2, {858,632}},
+{ 542304, 2, {807,672}},
+{ 542360, 2, {745,728}},
+{ 542370, 2, {895,606}},
+{ 542376, 2, {744,729}},
+{ 542400, 2, {800,678}},
+{ 542412, 2, {741,732}},
+{ 542424, 2, {776,699}},
+{ 542430, 2, {738,735}},
+{ 542432, 2, {737,736}},
+{ 542490, 2, {845,642}},
+{ 542493, 2, {763,711}},
+{ 542520, 2, {792,685}},
+{ 542544, 2, {762,712}},
+{ 542568, 2, {888,611}},
+{ 542640, 2, {760,714}},
+{ 542700, 2, {804,675}},
+{ 542724, 2, {852,637}},
+{ 542773, 2, {931,583}},
+{ 542784, 2, {771,704}},
+{ 542790, 2, {815,666}},
+{ 542832, 2, {789,688}},
+{ 542864, 2, {917,592}},
+{ 542880, 2, {754,720}},
+{ 542892, 2, {843,644}},
+{ 542925, 2, {855,635}},
+{ 542976, 2, {768,707}},
+{ 542997, 2, {819,663}},
+{ 543025, 2, {749,725}},
+{ 543084, 2, {813,668}},
+{ 543105, 2, {745,729}},
+{ 543120, 2, {744,730}},
+{ 543125, 2, {869,625}},
+{ 543168, 2, {738,736}},
+{ 543204, 2, {764,711}},
+{ 543213, 2, {837,649}},
+{ 543228, 2, {812,669}},
+{ 543235, 2, {913,595}},
+{ 543256, 2, {763,712}},
+{ 543286, 2, {841,646}},
+{ 543305, 2, {817,665}},
+{ 543312, 2, {784,693}},
+{ 543320, 2, {799,680}},
+{ 543345, 2, {979,555}},
+{ 543360, 2, {849,640}},
+{ 543375, 2, {805,675}},
+{ 543400, 2, {760,715}},
+{ 543444, 2, {759,716}},
+{ 543456, 2, {816,666}},
+{ 543510, 2, {810,671}},
+{ 543520, 2, {790,688}},
+{ 543552, 2, {894,608}},
+{ 543560, 2, {856,635}},
+{ 543576, 2, {781,696}},
+{ 543600, 2, {755,720}},
+{ 543660, 2, {780,697}},
+{ 543696, 2, {752,723}},
+{ 543704, 2, {931,584}},
+{ 543744, 2, {768,708}},
+{ 543750, 2, {750,725}},
+{ 543753, 2, {959,567}},
+{ 543780, 2, {795,684}},
+{ 543816, 2, {747,728}},
+{ 543837, 2, {893,609}},
+{ 543864, 2, {744,731}},
+{ 543879, 2, {801,679}},
+{ 543895, 2, {899,605}},
+{ 543900, 2, {740,735}},
+{ 543906, 2, {738,737}},
+{ 543950, 2, {946,575}},
+{ 543996, 2, {828,657}},
+{ 543998, 2, {793,686}},
+{ 544005, 2, {785,693}},
+{ 544011, 2, {1073,507}},
+{ 544050, 2, {775,702}},
+{ 544095, 2, {963,565}},
+{ 544104, 2, {792,687}},
+{ 544128, 2, {832,654}},
+{ 544152, 2, {861,632}},
+{ 544170, 2, {935,582}},
+{ 544185, 2, {783,695}},
+{ 544208, 2, {791,688}},
+{ 544215, 2, {1065,511}},
+{ 544236, 2, {798,682}},
+{ 544260, 2, {772,705}},
+{ 544320, 2, {756,720}},
+{ 544341, 2, {1029,529}},
+{ 544375, 2, {871,625}},
+{ 544380, 2, {844,645}},
+{ 544390, 2, {770,707}},
+{ 544401, 2, {891,611}},
+{ 544416, 2, {848,642}},
+{ 544476, 2, {867,628}},
+{ 544500, 2, {750,726}},
+{ 544544, 2, {748,728}},
+{ 544635, 2, {741,735}},
+{ 544640, 2, {740,736}},
+{ 544680, 2, {765,712}},
+{ 544712, 2, {959,568}},
+{ 544726, 2, {949,574}},
+{ 544752, 2, {776,702}},
+{ 544765, 2, {1105,493}},
+{ 544800, 2, {800,681}},
+{ 544824, 2, {828,658}},
+{ 544825, 2, {775,703}},
+{ 544830, 2, {762,715}},
+{ 544852, 2, {812,671}},
+{ 544880, 2, {784,695}},
+{ 544896, 2, {774,704}},
+{ 544918, 2, {799,682}},
+{ 544920, 2, {760,717}},
+{ 544950, 2, {865,630}},
+{ 544960, 2, {832,655}},
+{ 544968, 2, {783,696}},
+{ 544980, 2, {879,620}},
+{ 545000, 2, {872,625}},
+{ 545076, 2, {756,721}},
+{ 545105, 2, {901,605}},
+{ 545125, 2, {875,623}},
+{ 545136, 2, {831,656}},
+{ 545160, 2, {770,708}},
+{ 545172, 2, {753,724}},
+{ 545200, 2, {752,725}},
+{ 545220, 2, {780,699}},
+{ 545259, 2, {1023,533}},
+{ 545272, 2, {749,728}},
+{ 545280, 2, {768,710}},
+{ 545292, 2, {748,729}},
+{ 545300, 2, {779,700}},
+{ 545340, 2, {745,732}},
+{ 545370, 2, {742,735}},
+{ 545376, 2, {741,736}},
+{ 545380, 2, {740,737}},
+{ 545400, 2, {808,675}},
+{ 545412, 2, {903,604}},
+{ 545445, 2, {765,713}},
+{ 545454, 2, {777,702}},
+{ 545490, 2, {855,638}},
+{ 545532, 2, {807,676}},
+{ 545584, 2, {793,688}},
+{ 545600, 2, {775,704}},
+{ 545625, 2, {873,625}},
+{ 545670, 2, {774,705}},
+{ 545675, 2, {949,575}},
+{ 545688, 2, {792,689}},
+{ 545713, 2, {1591,343}},
+{ 545715, 2, {905,603}},
+{ 545724, 2, {837,652}},
+{ 545748, 2, {876,623}},
+{ 545751, 2, {783,697}},
+{ 545790, 2, {791,690}},
+{ 545808, 2, {822,664}},
+{ 545832, 2, {756,722}},
+{ 545868, 2, {771,708}},
+{ 545870, 2, {845,646}},
+{ 545904, 2, {816,669}},
+{ 545916, 2, {804,679}},
+{ 545928, 2, {989,552}},
+{ 545952, 2, {752,726}},
+{ 545972, 2, {868,629}},
+{ 545988, 2, {789,692}},
+{ 546000, 2, {750,728}},
+{ 546021, 2, {749,729}},
+{ 546048, 2, {768,711}},
+{ 546084, 2, {788,693}},
+{ 546090, 2, {835,654}},
+{ 546112, 2, {742,736}},
+{ 546250, 2, {874,625}},
+{ 546264, 2, {843,648}},
+{ 546270, 2, {786,695}},
+{ 546273, 2, {819,667}},
+{ 546312, 2, {824,663}},
+{ 546315, 2, {847,645}},
+{ 546336, 2, {813,672}},
+{ 546360, 2, {785,696}},
+{ 546416, 2, {923,592}},
+{ 546448, 2, {784,697}},
+{ 546480, 2, {759,720}},
+{ 546516, 2, {799,684}},
+{ 546560, 2, {854,640}},
+{ 546588, 2, {756,723}},
+{ 546592, 2, {899,608}},
+{ 546624, 2, {832,657}},
+{ 546630, 2, {798,685}},
+{ 546750, 2, {750,729}},
+{ 546756, 2, {849,644}},
+{ 546770, 2, {749,730}},
+{ 546788, 2, {748,731}},
+{ 546804, 2, {747,732}},
+{ 546840, 2, {744,735}},
+{ 546852, 2, {796,687}},
+{ 546854, 2, {742,737}},
+{ 546920, 2, {904,605}},
+{ 546960, 2, {795,688}},
+{ 546975, 2, {765,715}},
+{ 547008, 2, {777,704}},
+{ 547056, 2, {786,696}},
+{ 547080, 2, {776,705}},
+{ 547092, 2, {819,668}},
+{ 547104, 2, {834,656}},
+{ 547162, 2, {847,646}},
+{ 547170, 2, {793,690}},
+{ 547200, 2, {760,720}},
+{ 547218, 2, {774,707}},
+{ 547225, 2, {1325,413}},
+{ 547230, 2, {870,629}},
+{ 547281, 2, {833,657}},
+{ 547400, 2, {782,700}},
+{ 547404, 2, {754,726}},
+{ 547520, 2, {928,590}},
+{ 547524, 2, {804,681}},
+{ 547584, 2, {744,736}},
+{ 547596, 2, {742,738}},
+{ 547624, 2, {889,616}},
+{ 547638, 2, {767,714}},
+{ 547680, 2, {815,672}},
+{ 547740, 2, {765,716}},
+{ 547788, 2, {764,717}},
+{ 547800, 2, {825,664}},
+{ 547820, 2, {860,637}},
+{ 547824, 2, {808,678}},
+{ 547884, 2, {801,684}},
+{ 547925, 2, {775,707}},
+{ 547944, 2, {867,632}},
+{ 547960, 2, {760,721}},
+{ 547965, 2, {891,615}},
+{ 548000, 2, {800,685}},
+{ 548016, 2, {784,699}},
+{ 548020, 2, {940,583}},
+{ 548044, 2, {851,644}},
+{ 548080, 2, {806,680}},
+{ 548100, 2, {756,725}},
+{ 548114, 2, {799,686}},
+{ 548130, 2, {755,726}},
+{ 548163, 2, {791,693}},
+{ 548184, 2, {753,728}},
+{ 548208, 2, {752,729}},
+{ 548235, 2, {837,655}},
+{ 548244, 2, {873,628}},
+{ 548250, 2, {750,731}},
+{ 548262, 2, {781,702}},
+{ 548268, 2, {749,732}},
+{ 548320, 2, {745,736}},
+{ 548328, 2, {744,737}},
+{ 548340, 2, {741,740}},
+{ 548352, 2, {768,714}},
+{ 548359, 2, {931,589}},
+{ 548405, 2, {767,715}},
+{ 548416, 2, {779,704}},
+{ 548430, 2, {905,606}},
+{ 548460, 2, {831,660}},
+{ 548496, 2, {879,624}},
+{ 548580, 2, {820,669}},
+{ 548595, 2, {835,657}},
+{ 548625, 2, {825,665}},
+{ 548632, 2, {776,707}},
+{ 548640, 2, {762,720}},
+{ 548685, 2, {801,685}},
+{ 548700, 2, {775,708}},
+{ 548709, 2, {901,609}},
+{ 548760, 2, {807,680}},
+{ 548784, 2, {824,666}},
+{ 548856, 2, {756,726}},
+{ 548892, 2, {772,711}},
+{ 548912, 2, {754,728}},
+{ 548952, 2, {771,712}},
+{ 548960, 2, {752,730}},
+{ 548964, 2, {782,702}},
+{ 549010, 2, {770,713}},
+{ 549024, 2, {798,688}},
+{ 549054, 2, {846,649}},
+{ 549072, 2, {744,738}},
+{ 549080, 2, {742,740}},
+{ 549100, 2, {850,646}},
+{ 549120, 2, {768,715}},
+{ 549144, 2, {789,696}},
+{ 549185, 2, {923,595}},
+{ 549252, 2, {803,684}},
+{ 549325, 2, {1075,511}},
+{ 549360, 2, {763,720}},
+{ 549423, 2, {969,567}},
+{ 549444, 2, {844,651}},
+{ 549450, 2, {814,675}},
+{ 549480, 2, {760,723}},
+{ 549516, 2, {759,724}},
+{ 549540, 2, {774,710}},
+{ 549549, 2, {793,693}},
+{ 549575, 2, {1157,475}},
+{ 549585, 2, {885,621}},
+{ 549588, 2, {813,676}},
+{ 549600, 2, {800,687}},
+{ 549626, 2, {913,602}},
+{ 549636, 2, {843,652}},
+{ 549640, 2, {755,728}},
+{ 549666, 2, {754,729}},
+{ 549746, 2, {782,703}},
+{ 549780, 2, {748,735}},
+{ 549792, 2, {747,736}},
+{ 549810, 2, {745,738}},
+{ 549824, 2, {781,704}},
+{ 549840, 2, {790,696}},
+{ 549900, 2, {780,705}},
+{ 549945, 2, {909,605}},
+{ 549990, 2, {810,679}},
+{ 550000, 2, {880,625}},
+{ 550056, 2, {984,559}},
+{ 550116, 2, {777,708}},
+{ 550125, 2, {815,675}},
+{ 550137, 2, {1139,483}},
+{ 550140, 2, {795,692}},
+{ 550152, 2, {849,648}},
+{ 550188, 2, {899,612}},
+{ 550220, 2, {820,671}},
+{ 550248, 2, {808,681}},
+{ 550352, 2, {848,649}},
+{ 550368, 2, {756,728}},
+{ 550375, 2, {875,629}},
+{ 550395, 2, {755,729}},
+{ 550440, 2, {792,695}},
+{ 550449, 2, {783,703}},
+{ 550464, 2, {752,732}},
+{ 550515, 2, {749,735}},
+{ 550525, 2, {1159,475}},
+{ 550536, 2, {791,696}},
+{ 550550, 2, {770,715}},
+{ 550560, 2, {744,740}},
+{ 550605, 2, {781,705}},
+{ 550656, 2, {768,717}},
+{ 550704, 2, {894,616}},
+{ 550715, 2, {935,589}},
+{ 550740, 2, {804,685}},
+{ 550746, 2, {837,658}},
+{ 550788, 2, {948,581}},
+{ 550800, 2, {765,720}},
+{ 550812, 2, {788,699}},
+{ 550830, 2, {854,645}},
+{ 550848, 2, {906,608}},
+{ 550858, 2, {803,686}},
+{ 551000, 2, {760,725}},
+{ 551025, 2, {775,711}},
+{ 551040, 2, {820,672}},
+{ 551070, 2, {785,702}},
+{ 551075, 2, {1175,469}},
+{ 551088, 2, {774,712}},
+{ 551100, 2, {825,668}},
+{ 551122, 2, {902,611}},
+{ 551124, 2, {756,729}},
+{ 551152, 2, {784,703}},
+{ 551174, 2, {754,731}},
+{ 551196, 2, {753,732}},
+{ 551200, 2, {800,689}},
+{ 551232, 2, {783,704}},
+{ 551250, 2, {750,735}},
+{ 551256, 2, {824,669}},
+{ 551264, 2, {749,736}},
+{ 551304, 2, {744,741}},
+{ 551355, 2, {885,623}},
+{ 551412, 2, {867,636}},
+{ 551460, 2, {780,707}},
+{ 551475, 2, {817,675}},
+{ 551551, 2, {1001,551}},
+{ 551565, 2, {765,721}},
+{ 551628, 2, {796,693}},
+{ 551650, 2, {850,649}},
+{ 551691, 2, {973,567}},
+{ 551733, 2, {903,611}},
+{ 551736, 2, {776,711}},
+{ 551760, 2, {760,726}},
+{ 551784, 2, {831,664}},
+{ 551800, 2, {775,712}},
+{ 551880, 2, {756,730}},
+{ 551988, 2, {807,684}},
+{ 552000, 2, {750,736}},
+{ 552012, 2, {879,628}},
+{ 552015, 2, {783,705}},
+{ 552036, 2, {771,716}},
+{ 552048, 2, {744,742}},
+{ 552069, 2, {889,621}},
+{ 552120, 2, {856,645}},
+{ 552123, 2, {1089,507}},
+{ 552156, 2, {979,564}},
+{ 552160, 2, {812,680}},
+{ 552240, 2, {767,720}},
+{ 552276, 2, {828,667}},
+{ 552292, 2, {817,676}},
+{ 552300, 2, {789,700}},
+{ 552330, 2, {765,722}},
+{ 552348, 2, {804,687}},
+{ 552372, 2, {764,723}},
+{ 552384, 2, {822,672}},
+{ 552420, 2, {810,682}},
+{ 552450, 2, {762,725}},
+{ 552464, 2, {803,688}},
+{ 552475, 2, {1025,539}},
+{ 552552, 2, {759,728}},
+{ 552570, 2, {815,678}},
+{ 552630, 2, {845,654}},
+{ 552636, 2, {756,731}},
+{ 552640, 2, {785,704}},
+{ 552660, 2, {755,732}},
+{ 552664, 2, {973,568}},
+{ 552684, 2, {869,636}},
+{ 552720, 2, {752,735}},
+{ 552735, 2, {865,639}},
+{ 552750, 2, {750,737}},
+{ 552762, 2, {749,738}},
+{ 552780, 2, {747,740}},
+{ 552805, 2, {1045,529}},
+{ 552825, 2, {819,675}},
+{ 552840, 2, {813,680}},
+{ 552916, 2, {806,686}},
+{ 552948, 2, {781,708}},
+{ 552951, 2, {917,603}},
+{ 552960, 2, {768,720}},
+{ 552972, 2, {812,681}},
+{ 553008, 2, {843,656}},
+{ 553110, 2, {895,618}},
+{ 553112, 2, {833,664}},
+{ 553150, 2, {851,650}},
+{ 553152, 2, {804,688}},
+{ 553175, 2, {763,725}},
+{ 553224, 2, {777,712}},
+{ 553248, 2, {816,678}},
+{ 553311, 2, {759,729}},
+{ 553320, 2, {795,696}},
+{ 553344, 2, {786,704}},
+{ 553350, 2, {775,714}},
+{ 553410, 2, {774,715}},
+{ 553480, 2, {808,685}},
+{ 553524, 2, {772,717}},
+{ 553548, 2, {849,652}},
+{ 553553, 2, {869,637}},
+{ 553575, 2, {825,671}},
+{ 553581, 2, {783,707}},
+{ 553608, 2, {792,699}},
+{ 553644, 2, {819,676}},
+{ 553660, 2, {893,620}},
+{ 553700, 2, {791,700}},
+{ 553707, 2, {799,693}},
+{ 553720, 2, {872,635}},
+{ 553725, 2, {963,575}},
+{ 553728, 2, {768,721}},
+{ 553776, 2, {834,664}},
+{ 553784, 2, {812,682}},
+{ 553800, 2, {780,710}},
+{ 553833, 2, {1043,531}},
+{ 553840, 2, {805,688}},
+{ 553850, 2, {950,583}},
+{ 553860, 2, {765,724}},
+{ 553932, 2, {828,669}},
+{ 554040, 2, {760,729}},
+{ 554064, 2, {776,714}},
+{ 554112, 2, {832,666}},
+{ 554190, 2, {754,735}},
+{ 554200, 2, {815,680}},
+{ 554208, 2, {753,736}},
+{ 554224, 2, {752,737}},
+{ 554246, 2, {826,671}},
+{ 554260, 2, {749,740}},
+{ 554265, 2, {981,565}},
+{ 554268, 2, {748,741}},
+{ 554280, 2, {745,744}},
+{ 554288, 2, {784,707}},
+{ 554292, 2, {801,692}},
+{ 554355, 2, {873,635}},
+{ 554364, 2, {783,708}},
+{ 554400, 2, {770,720}},
+{ 554484, 2, {861,644}},
+{ 554496, 2, {768,722}},
+{ 554508, 2, {844,657}},
+{ 554553, 2, {893,621}},
+{ 554580, 2, {780,711}},
+{ 554592, 2, {848,654}},
+{ 554610, 2, {798,695}},
+{ 554625, 2, {765,725}},
+{ 554645, 2, {805,689}},
+{ 554652, 2, {852,651}},
+{ 554736, 2, {762,728}},
+{ 554827, 2, {871,637}},
+{ 554829, 2, {759,731}},
+{ 554840, 2, {776,715}},
+{ 554850, 2, {810,685}},
+{ 554895, 2, {855,649}},
+{ 554944, 2, {754,736}},
+{ 554976, 2, {752,738}},
+{ 555060, 2, {841,660}},
+{ 555072, 2, {784,708}},
+{ 555096, 2, {808,687}},
+{ 555100, 2, {793,700}},
+{ 555108, 2, {831,668}},
+{ 555120, 2, {771,720}},
+{ 555165, 2, {845,657}},
+{ 555170, 2, {770,721}},
+{ 555216, 2, {807,688}},
+{ 555228, 2, {873,636}},
+{ 555264, 2, {768,723}},
+{ 555282, 2, {791,702}},
+{ 555296, 2, {938,592}},
+{ 555330, 2, {865,642}},
+{ 555408, 2, {798,696}},
+{ 555440, 2, {848,655}},
+{ 555450, 2, {805,690}},
+{ 555456, 2, {789,704}},
+{ 555458, 2, {961,578}},
+{ 555464, 2, {763,728}},
+{ 555520, 2, {868,640}},
+{ 555528, 2, {879,632}},
+{ 555540, 2, {788,705}},
+{ 555560, 2, {760,731}},
+{ 555588, 2, {759,732}},
+{ 555611, 2, {833,667}},
+{ 555632, 2, {847,656}},
+{ 555646, 2, {923,602}},
+{ 555660, 2, {756,735}},
+{ 555680, 2, {755,736}},
+{ 555696, 2, {816,681}},
+{ 555750, 2, {750,741}},
+{ 555765, 2, {1005,553}},
+{ 555768, 2, {747,744}},
+{ 555775, 2, {1075,517}},
+{ 555780, 2, {785,708}},
+{ 555795, 2, {895,621}},
+{ 555810, 2, {955,582}},
+{ 555930, 2, {783,710}},
+{ 555940, 2, {770,722}},
+{ 555984, 2, {792,702}},
+{ 556000, 2, {800,695}},
+{ 556017, 2, {913,609}},
+{ 556036, 2, {884,629}},
+{ 556075, 2, {767,725}},
+{ 556092, 2, {813,684}},
+{ 556101, 2, {819,679}},
+{ 556104, 2, {799,696}},
+{ 556110, 2, {835,666}},
+{ 556140, 2, {780,713}},
+{ 556160, 2, {790,704}},
+{ 556200, 2, {824,675}},
+{ 556206, 2, {779,714}},
+{ 556227, 2, {763,729}},
+{ 556248, 2, {903,616}},
+{ 556308, 2, {909,612}},
+{ 556332, 2, {777,716}},
+{ 556380, 2, {843,660}},
+{ 556392, 2, {776,717}},
+{ 556404, 2, {796,699}},
+{ 556416, 2, {756,736}},
+{ 556479, 2, {803,693}},
+{ 556500, 2, {750,742}},
+{ 556515, 2, {747,745}},
+{ 556600, 2, {920,605}},
+{ 556605, 2, {837,665}},
+{ 556608, 2, {832,669}},
+{ 556640, 2, {784,710}},
+{ 556686, 2, {793,702}},
+{ 556695, 2, {801,695}},
+{ 556738, 2, {874,637}},
+{ 556776, 2, {792,703}},
+{ 556780, 2, {820,679}},
+{ 556800, 2, {768,725}},
+{ 556842, 2, {767,726}},
+{ 556850, 2, {925,602}},
+{ 556864, 2, {791,704}},
+{ 556875, 2, {825,675}},
+{ 556920, 2, {765,728}},
+{ 556944, 2, {849,656}},
+{ 556956, 2, {764,729}},
+{ 556985, 2, {779,715}},
+{ 556990, 2, {763,730}},
+{ 557136, 2, {848,657}},
+{ 557172, 2, {756,737}},
+{ 557190, 2, {755,738}},
+{ 557194, 2, {817,682}},
+{ 557220, 2, {753,740}},
+{ 557232, 2, {752,741}},
+{ 557256, 2, {749,744}},
+{ 557280, 2, {774,720}},
+{ 557375, 2, {875,637}},
+{ 557424, 2, {784,711}},
+{ 557440, 2, {832,670}},
+{ 557460, 2, {815,684}},
+{ 557496, 2, {783,712}},
+{ 557520, 2, {808,690}},
+{ 557536, 2, {917,608}},
+{ 557550, 2, {826,675}},
+{ 557566, 2, {782,713}},
+{ 557568, 2, {768,726}},
+{ 557583, 2, {841,663}},
+{ 557600, 2, {800,697}},
+{ 557612, 2, {836,667}},
+{ 557634, 2, {781,714}},
+{ 557655, 2, {791,705}},
+{ 557685, 2, {765,729}},
+{ 557700, 2, {780,715}},
+{ 557760, 2, {830,672}},
+{ 557775, 2, {925,603}},
+{ 557844, 2, {812,687}},
+{ 557856, 2, {894,624}},
+{ 557865, 2, {759,735}},
+{ 557984, 2, {752,742}},
+{ 558000, 2, {750,744}},
+{ 558012, 2, {876,637}},
+{ 558054, 2, {774,721}},
+{ 558090, 2, {795,702}},
+{ 558096, 2, {906,616}},
+{ 558110, 2, {833,670}},
+{ 558125, 2, {893,625}},
+{ 558135, 2, {785,711}},
+{ 558140, 2, {860,649}},
+{ 558144, 2, {816,684}},
+{ 558156, 2, {772,723}},
+{ 558204, 2, {771,724}},
+{ 558272, 2, {793,704}},
+{ 558279, 2, {783,713}},
+{ 558348, 2, {782,714}},
+{ 558360, 2, {792,705}},
+{ 558376, 2, {767,728}},
+{ 558404, 2, {814,686}},
+{ 558420, 2, {820,681}},
+{ 558432, 2, {831,672}},
+{ 558441, 2, {999,559}},
+{ 558444, 2, {807,692}},
+{ 558467, 2, {1547,361}},
+{ 558516, 2, {763,732}},
+{ 558530, 2, {790,707}},
+{ 558558, 2, {806,693}},
+{ 558600, 2, {760,735}},
+{ 558612, 2, {789,708}},
+{ 558620, 2, {901,620}},
+{ 558624, 2, {759,736}},
+{ 558657, 2, {891,627}},
+{ 558672, 2, {824,678}},
+{ 558675, 2, {955,585}},
+{ 558750, 2, {750,745}},
+{ 558756, 2, {748,747}},
+{ 558775, 2, {775,721}},
+{ 558780, 2, {804,695}},
+{ 558789, 2, {861,649}},
+{ 558800, 2, {880,635}},
+{ 558888, 2, {803,696}},
+{ 558900, 2, {810,690}},
+{ 558912, 2, {852,656}},
+{ 558920, 2, {785,712}},
+{ 558943, 2, {833,671}},
+{ 558960, 2, {816,685}},
+{ 558992, 2, {784,713}},
+{ 559044, 2, {879,636}},
+{ 559065, 2, {793,705}},
+{ 559104, 2, {768,728}},
+{ 559116, 2, {837,668}},
+{ 559125, 2, {875,639}},
+{ 559130, 2, {782,715}},
+{ 559143, 2, {767,729}},
+{ 559200, 2, {800,699}},
+{ 559215, 2, {765,731}},
+{ 559260, 2, {780,717}},
+{ 559265, 2, {841,665}},
+{ 559284, 2, {836,669}},
+{ 559290, 2, {905,618}},
+{ 559300, 2, {799,700}},
+{ 559320, 2, {790,708}},
+{ 559344, 2, {813,688}},
+{ 559440, 2, {756,740}},
+{ 559496, 2, {776,721}},
+{ 559503, 2, {749,747}},
+{ 559521, 2, {901,621}},
+{ 559548, 2, {891,628}},
+{ 559559, 2, {1001,559}},
+{ 559572, 2, {844,663}},
+{ 559629, 2, {987,567}},
+{ 559632, 2, {786,712}},
+{ 559636, 2, {869,644}},
+{ 559650, 2, {861,650}},
+{ 559674, 2, {1003,558}},
+{ 559680, 2, {795,704}},
+{ 559752, 2, {843,664}},
+{ 559764, 2, {852,657}},
+{ 559776, 2, {784,714}},
+{ 559797, 2, {1159,483}},
+{ 559824, 2, {856,654}},
+{ 559845, 2, {783,715}},
+{ 559860, 2, {860,651}},
+{ 559872, 2, {768,729}},
+{ 559911, 2, {893,627}},
+{ 559944, 2, {792,707}},
+{ 559980, 2, {765,732}},
+{ 560000, 2, {800,700}},
+{ 560025, 2, {855,655}},
+{ 560028, 2, {791,708}},
+{ 560056, 2, {959,584}},
+{ 560120, 2, {760,737}},
+{ 560175, 2, {825,679}},
+{ 560196, 2, {756,741}},
+{ 560224, 2, {854,656}},
+{ 560232, 2, {753,744}},
+{ 560240, 2, {752,745}},
+{ 560268, 2, {788,711}},
+{ 560280, 2, {805,696}},
+{ 560340, 2, {849,660}},
+{ 560439, 2, {891,629}},
+{ 560448, 2, {834,672}},
+{ 560462, 2, {817,686}},
+{ 560490, 2, {785,714}},
+{ 560505, 2, {869,645}},
+{ 560550, 2, {925,606}},
+{ 560592, 2, {816,687}},
+{ 560625, 2, {897,625}},
+{ 560628, 2, {783,716}},
+{ 560640, 2, {768,730}},
+{ 560680, 2, {856,655}},
+{ 560700, 2, {801,700}},
+{ 560720, 2, {815,688}},
+{ 560763, 2, {903,621}},
+{ 560790, 2, {837,670}},
+{ 560805, 2, {763,735}},
+{ 560832, 2, {762,736}},
+{ 560835, 2, {927,605}},
+{ 560846, 2, {814,689}},
+{ 560880, 2, {760,738}},
+{ 560898, 2, {799,702}},
+{ 560924, 2, {871,644}},
+{ 560945, 2, {1085,517}},
+{ 560952, 2, {756,742}},
+{ 561000, 2, {750,748}},
+{ 561015, 2, {819,685}},
+{ 561048, 2, {776,723}},
+{ 561085, 2, {805,697}},
+{ 561120, 2, {835,672}},
+{ 561144, 2, {824,681}},
+{ 561150, 2, {774,725}},
+{ 561180, 2, {796,705}},
+{ 561184, 2, {923,608}},
+{ 561249, 2, {1053,533}},
+{ 561267, 2, {1057,531}},
+{ 561288, 2, {771,728}},
+{ 561330, 2, {770,729}},
+{ 561372, 2, {861,652}},
+{ 561393, 2, {931,603}},
+{ 561408, 2, {768,731}},
+{ 561440, 2, {880,638}},
+{ 561495, 2, {913,615}},
+{ 561540, 2, {764,735}},
+{ 561560, 2, {808,695}},
+{ 561561, 2, {847,663}},
+{ 561568, 2, {763,736}},
+{ 561600, 2, {780,720}},
+{ 561610, 2, {791,710}},
+{ 561627, 2, {837,671}},
+{ 561630, 2, {965,582}},
+{ 561660, 2, {759,740}},
+{ 561672, 2, {807,696}},
+{ 561680, 2, {826,680}},
+{ 561720, 2, {755,744}},
+{ 561744, 2, {752,747}},
+{ 561750, 2, {750,749}},
+{ 561756, 2, {831,676}},
+{ 561768, 2, {789,712}},
+{ 561782, 2, {806,697}},
+{ 561792, 2, {798,704}},
+{ 561795, 2, {871,645}},
+{ 561808, 2, {949,592}},
+{ 561816, 2, {867,648}},
+{ 561848, 2, {889,632}},
+{ 561960, 2, {840,669}},
+{ 561990, 2, {786,715}},
+{ 561996, 2, {804,699}},
+{ 562005, 2, {905,621}},
+{ 562065, 2, {795,707}},
+{ 562107, 2, {923,609}},
+{ 562120, 2, {920,611}},
+{ 562128, 2, {784,717}},
+{ 562176, 2, {768,732}},
+{ 562185, 2, {961,585}},
+{ 562212, 2, {828,679}},
+{ 562224, 2, {816,689}},
+{ 562320, 2, {781,720}},
+{ 562350, 2, {815,690}},
+{ 562380, 2, {780,721}},
+{ 562392, 2, {856,657}},
+{ 562401, 2, {791,711}},
+{ 562408, 2, {847,664}},
+{ 562520, 2, {820,686}},
+{ 562548, 2, {777,724}},
+{ 562560, 2, {879,640}},
+{ 562596, 2, {813,692}},
+{ 562600, 2, {776,725}},
+{ 562650, 2, {775,726}},
+{ 562716, 2, {812,693}},
+{ 562770, 2, {845,666}},
+{ 562788, 2, {772,729}},
+{ 562848, 2, {858,656}},
+{ 562860, 2, {795,708}},
+{ 562870, 2, {770,731}},
+{ 562925, 2, {979,575}},
+{ 562950, 2, {810,695}},
+{ 563040, 2, {765,736}},
+{ 563094, 2, {763,738}},
+{ 563112, 2, {792,711}},
+{ 563124, 2, {843,668}},
+{ 563125, 2, {901,625}},
+{ 563160, 2, {760,741}},
+{ 563192, 2, {791,712}},
+{ 563220, 2, {756,745}},
+{ 563244, 2, {753,748}},
+{ 563248, 2, {752,749}},
+{ 563316, 2, {897,628}},
+{ 563325, 2, {777,725}},
+{ 563340, 2, {820,687}},
+{ 563376, 2, {776,726}},
+{ 563472, 2, {774,728}},
+{ 563500, 2, {805,700}},
+{ 563570, 2, {830,679}},
+{ 563580, 2, {909,620}},
+{ 563584, 2, {896,629}},
+{ 563615, 2, {845,667}},
+{ 563625, 2, {835,675}},
+{ 563640, 2, {770,732}},
+{ 563673, 2, {899,627}},
+{ 563706, 2, {803,702}},
+{ 563730, 2, {817,690}},
+{ 563736, 2, {849,664}},
+{ 563745, 2, {767,735}},
+{ 563750, 2, {902,625}},
+{ 563760, 2, {783,720}},
+{ 563787, 2, {1099,513}},
+{ 563805, 2, {765,737}},
+{ 563850, 2, {895,630}},
+{ 563868, 2, {828,681}},
+{ 563914, 2, {943,598}},
+{ 563920, 2, {760,742}},
+{ 563940, 2, {780,723}},
+{ 563985, 2, {755,747}},
+{ 563992, 2, {754,748}},
+{ 564000, 2, {752,750}},
+{ 564075, 2, {981,575}},
+{ 564096, 2, {832,678}},
+{ 564200, 2, {775,728}},
+{ 564213, 2, {851,663}},
+{ 564291, 2, {819,689}},
+{ 564300, 2, {825,684}},
+{ 564372, 2, {771,732}},
+{ 564435, 2, {999,565}},
+{ 564440, 2, {824,685}},
+{ 564480, 2, {768,735}},
+{ 564512, 2, {767,736}},
+{ 564525, 2, {965,585}},
+{ 564543, 2, {783,721}},
+{ 564620, 2, {763,740}},
+{ 564630, 2, {870,649}},
+{ 564636, 2, {844,669}},
+{ 564655, 2, {949,595}},
+{ 564696, 2, {759,744}},
+{ 564732, 2, {756,747}},
+{ 564768, 2, {848,666}},
+{ 564775, 2, {779,725}},
+{ 564792, 2, {808,699}},
+{ 564795, 2, {815,693}},
+{ 564816, 2, {861,656}},
+{ 564872, 2, {917,616}},
+{ 564876, 2, {852,663}},
+{ 564900, 2, {807,700}},
+{ 564924, 2, {789,716}},
+{ 564927, 2, {901,627}},
+{ 564949, 2, {847,667}},
+{ 564975, 2, {775,729}},
+{ 564980, 2, {820,689}},
+{ 564996, 2, {788,717}},
+{ 565000, 2, {904,625}},
+{ 565008, 2, {894,632}},
+{ 565020, 2, {774,730}},
+{ 565056, 2, {864,654}},
+{ 565080, 2, {831,680}},
+{ 565110, 2, {805,702}},
+{ 565175, 2, {925,611}},
+{ 565200, 2, {785,720}},
+{ 565250, 2, {850,665}},
+{ 565264, 2, {784,721}},
+{ 565284, 2, {867,652}},
+{ 565312, 2, {803,704}},
+{ 565344, 2, {906,624}},
+{ 565488, 2, {756,748}},
+{ 565500, 2, {754,750}},
+{ 565536, 2, {822,688}},
+{ 565554, 2, {779,726}},
+{ 565600, 2, {800,707}},
+{ 565656, 2, {777,728}},
+{ 565704, 2, {776,729}},
+{ 565710, 2, {865,654}},
+{ 565719, 2, {869,651}},
+{ 565760, 2, {832,680}},
+{ 565775, 2, {1325,427}},
+{ 565785, 2, {891,635}},
+{ 565812, 2, {806,702}},
+{ 565848, 2, {813,696}},
+{ 565880, 2, {860,658}},
+{ 565915, 2, {805,703}},
+{ 565920, 2, {786,720}},
+{ 565956, 2, {796,711}},
+{ 565964, 2, {812,697}},
+{ 566016, 2, {768,737}},
+{ 566040, 2, {795,712}},
+{ 566046, 2, {767,738}},
+{ 566048, 2, {784,722}},
+{ 566076, 2, {879,644}},
+{ 566080, 2, {928,610}},
+{ 566088, 2, {824,687}},
+{ 566100, 2, {765,740}},
+{ 566115, 2, {803,705}},
+{ 566124, 2, {764,741}},
+{ 566130, 2, {835,678}},
+{ 566181, 2, {817,693}},
+{ 566200, 2, {760,745}},
+{ 566202, 2, {793,714}},
+{ 566225, 2, {781,725}},
+{ 566244, 2, {756,749}},
+{ 566250, 2, {755,750}},
+{ 566256, 2, {753,752}},
+{ 566307, 2, {801,707}},
+{ 566370, 2, {870,651}},
+{ 566400, 2, {800,708}},
+{ 566433, 2, {777,729}},
+{ 566440, 2, {833,680}},
+{ 566475, 2, {975,581}},
+{ 566496, 2, {843,672}},
+{ 566525, 2, {775,731}},
+{ 566544, 2, {814,696}},
+{ 566559, 2, {1071,529}},
+{ 566592, 2, {832,681}},
+{ 566610, 2, {935,606}},
+{ 566618, 2, {806,703}},
+{ 566676, 2, {891,636}},
+{ 566720, 2, {770,736}},
+{ 566748, 2, {819,692}},
+{ 566784, 2, {768,738}},
+{ 566820, 2, {804,705}},
+{ 566825, 2, {1025,553}},
+{ 566832, 2, {784,723}},
+{ 566865, 2, {765,741}},
+{ 566892, 2, {783,724}},
+{ 566904, 2, {897,632}},
+{ 566928, 2, {762,744}},
+{ 566930, 2, {890,637}},
+{ 566995, 2, {793,715}},
+{ 567000, 2, {756,750}},
+{ 567021, 2, {871,651}},
+{ 567084, 2, {903,628}},
+{ 567108, 2, {801,708}},
+{ 567112, 2, {779,728}},
+{ 567120, 2, {816,695}},
+{ 567132, 2, {849,668}},
+{ 567216, 2, {808,702}},
+{ 567240, 2, {815,696}},
+{ 567270, 2, {955,594}},
+{ 567300, 2, {775,732}},
+{ 567312, 2, {848,669}},
+{ 567336, 2, {921,616}},
+{ 567358, 2, {814,697}},
+{ 567385, 2, {1015,559}},
+{ 567420, 2, {772,735}},
+{ 567424, 2, {806,704}},
+{ 567456, 2, {771,736}},
+{ 567490, 2, {770,737}},
+{ 567528, 2, {856,663}},
+{ 567580, 2, {767,740}},
+{ 567588, 2, {812,699}},
+{ 567600, 2, {825,688}},
+{ 567630, 2, {765,742}},
+{ 567645, 2, {923,615}},
+{ 567648, 2, {864,657}},
+{ 567666, 2, {846,671}},
+{ 567672, 2, {763,744}},
+{ 567675, 2, {783,725}},
+{ 567690, 2, {762,745}},
+{ 567720, 2, {760,747}},
+{ 567728, 2, {959,592}},
+{ 567732, 2, {759,748}},
+{ 567760, 2, {755,752}},
+{ 567800, 2, {835,680}},
+{ 567853, 2, {1573,361}},
+{ 567864, 2, {792,717}},
+{ 567875, 2, {875,649}},
+{ 567891, 2, {779,729}},
+{ 567987, 2, {777,731}},
+{ 568000, 2, {800,710}},
+{ 568008, 2, {828,686}},
+{ 568071, 2, {889,639}},
+{ 568080, 2, {789,720}},
+{ 568100, 2, {874,650}},
+{ 568106, 2, {833,682}},
+{ 568125, 2, {909,625}},
+{ 568128, 2, {807,704}},
+{ 568160, 2, {848,670}},
+{ 568176, 2, {798,712}},
+{ 568215, 2, {915,621}},
+{ 568232, 2, {973,584}},
+{ 568260, 2, {770,738}},
+{ 568288, 2, {826,688}},
+{ 568305, 2, {865,657}},
+{ 568320, 2, {768,740}},
+{ 568323, 2, {837,679}},
+{ 568400, 2, {784,725}},
+{ 568404, 2, {831,684}},
+{ 568428, 2, {804,707}},
+{ 568512, 2, {756,752}},
+{ 568524, 2, {803,708}},
+{ 568560, 2, {824,690}},
+{ 568568, 2, {781,728}},
+{ 568575, 2, {855,665}},
+{ 568620, 2, {780,729}},
+{ 568632, 2, {817,696}},
+{ 568675, 2, {989,575}},
+{ 568701, 2, {1003,567}},
+{ 568752, 2, {816,697}},
+{ 568764, 2, {777,732}},
+{ 568800, 2, {790,720}},
+{ 568836, 2, {828,687}},
+{ 568841, 2, {893,637}},
+{ 568854, 2, {858,663}},
+{ 568890, 2, {774,735}},
+{ 568960, 2, {889,640}},
+{ 568974, 2, {798,713}},
+{ 569008, 2, {848,671}},
+{ 569088, 2, {768,741}},
+{ 569100, 2, {813,700}},
+{ 569114, 2, {767,742}},
+{ 569160, 2, {765,744}},
+{ 569184, 2, {784,726}},
+{ 569196, 2, {873,652}},
+{ 569205, 2, {819,695}},
+{ 569220, 2, {795,716}},
+{ 569240, 2, {760,749}},
+{ 569250, 2, {759,750}},
+{ 569268, 2, {756,753}},
+{ 569296, 2, {782,728}},
+{ 569316, 2, {836,681}},
+{ 569349, 2, {781,729}},
+{ 569400, 2, {780,730}},
+{ 569430, 2, {810,703}},
+{ 569457, 2, {917,621}},
+{ 569520, 2, {791,720}},
+{ 569590, 2, {790,721}},
+{ 569592, 2, {879,648}},
+{ 569640, 2, {808,705}},
+{ 569664, 2, {774,736}},
+{ 569700, 2, {844,675}},
+{ 569712, 2, {858,664}},
+{ 569724, 2, {788,723}},
+{ 569734, 2, {893,638}},
+{ 569850, 2, {786,725}},
+{ 569856, 2, {768,742}},
+{ 569868, 2, {843,676}},
+{ 569910, 2, {785,726}},
+{ 569920, 2, {832,685}},
+{ 569925, 2, {765,745}},
+{ 569940, 2, {805,708}},
+{ 569961, 2, {763,747}},
+{ 569985, 2, {1027,555}},
+{ 569988, 2, {852,669}},
+{ 570000, 2, {760,750}},
+{ 570024, 2, {756,754}},
+{ 570045, 2, {915,623}},
+{ 570064, 2, {869,656}},
+{ 570078, 2, {782,729}},
+{ 570096, 2, {856,666}},
+{ 570150, 2, {905,630}},
+{ 570180, 2, {780,731}},
+{ 570262, 2, {1058,539}},
+{ 570276, 2, {868,657}},
+{ 570285, 2, {855,667}},
+{ 570304, 2, {938,608}},
+{ 570312, 2, {801,712}},
+{ 570350, 2, {850,671}},
+{ 570360, 2, {776,735}},
+{ 570375, 2, {845,675}},
+{ 570384, 2, {816,699}},
+{ 570400, 2, {775,736}},
+{ 570438, 2, {774,737}},
+{ 570486, 2, {799,714}},
+{ 570492, 2, {828,689}},
+{ 570515, 2, {943,605}},
+{ 570528, 2, {849,672}},
+{ 570540, 2, {771,740}},
+{ 570570, 2, {770,741}},
+{ 570625, 2, {913,625}},
+{ 570648, 2, {767,744}},
+{ 570696, 2, {903,632}},
+{ 570708, 2, {764,747}},
+{ 570720, 2, {820,696}},
+{ 570732, 2, {796,717}},
+{ 570741, 2, {969,589}},
+{ 570768, 2, {759,752}},
+{ 570775, 2, {1343,425}},
+{ 570780, 2, {756,755}},
+{ 570836, 2, {812,703}},
+{ 570840, 2, {804,710}},
+{ 570843, 2, {819,697}},
+{ 570852, 2, {909,628}},
+{ 570900, 2, {825,692}},
+{ 570969, 2, {1007,567}},
+{ 571020, 2, {921,620}},
+{ 571032, 2, {792,721}},
+{ 571040, 2, {830,688}},
+{ 571050, 2, {810,705}},
+{ 571064, 2, {884,646}},
+{ 571120, 2, {880,649}},
+{ 571140, 2, {835,684}},
+{ 571160, 2, {872,655}},
+{ 571175, 2, {775,737}},
+{ 571200, 2, {800,714}},
+{ 571236, 2, {789,724}},
+{ 571285, 2, {799,715}},
+{ 571290, 2, {822,695}},
+{ 571298, 2, {949,602}},
+{ 571356, 2, {807,708}},
+{ 571376, 2, {871,656}},
+{ 571389, 2, {897,637}},
+{ 571392, 2, {768,744}},
+{ 571428, 2, {814,702}},
+{ 571480, 2, {785,728}},
+{ 571584, 2, {832,687}},
+{ 571590, 2, {783,730}},
+{ 571644, 2, {804,711}},
+{ 571648, 2, {812,704}},
+{ 571650, 2, {925,618}},
+{ 571692, 2, {781,732}},
+{ 571704, 2, {861,664}},
+{ 571728, 2, {831,688}},
+{ 571795, 2, {961,595}},
+{ 571802, 2, {869,658}},
+{ 571815, 2, {873,655}},
+{ 571824, 2, {792,722}},
+{ 571857, 2, {1023,559}},
+{ 571872, 2, {777,736}},
+{ 571880, 2, {841,680}},
+{ 571900, 2, {817,700}},
+{ 571905, 2, {895,639}},
+{ 571950, 2, {775,738}},
+{ 572000, 2, {800,715}},
+{ 572033, 2, {1309,437}},
+{ 572040, 2, {840,681}},
+{ 572052, 2, {772,741}},
+{ 572112, 2, {822,696}},
+{ 572130, 2, {815,702}},
+{ 572160, 2, {768,745}},
+{ 572208, 2, {786,728}},
+{ 572220, 2, {765,748}},
+{ 572250, 2, {763,750}},
+{ 572265, 2, {785,729}},
+{ 572280, 2, {760,753}},
+{ 572286, 2, {759,754}},
+{ 572319, 2, {1107,517}},
+{ 572320, 2, {784,730}},
+{ 572352, 2, {813,704}},
+{ 572355, 2, {805,711}},
+{ 572373, 2, {783,731}},
+{ 572390, 2, {910,629}},
+{ 572400, 2, {795,720}},
+{ 572460, 2, {812,705}},
+{ 572508, 2, {837,684}},
+{ 572544, 2, {852,672}},
+{ 572565, 2, {779,735}},
+{ 572572, 2, {847,676}},
+{ 572592, 2, {906,632}},
+{ 572607, 2, {1043,549}},
+{ 572616, 2, {792,723}},
+{ 572649, 2, {777,737}},
+{ 572663, 2, {899,637}},
+{ 572664, 2, {856,669}},
+{ 572670, 2, {810,707}},
+{ 572680, 2, {824,695}},
+{ 572688, 2, {776,738}},
+{ 572715, 2, {801,715}},
+{ 572832, 2, {816,702}},
+{ 572880, 2, {770,744}},
+{ 572904, 2, {872,657}},
+{ 572907, 2, {1083,529}},
+{ 572910, 2, {845,678}},
+{ 572975, 2, {1025,559}},
+{ 572985, 2, {765,749}},
+{ 573024, 2, {762,752}},
+{ 573040, 2, {760,754}},
+{ 573056, 2, {814,704}},
+{ 573104, 2, {784,731}},
+{ 573108, 2, {879,652}},
+{ 573118, 2, {871,658}},
+{ 573156, 2, {783,732}},
+{ 573160, 2, {805,712}},
+{ 573180, 2, {820,699}},
+{ 573195, 2, {795,721}},
+{ 573210, 2, {965,594}},
+{ 573240, 2, {843,680}},
+{ 573248, 2, {832,689}},
+{ 573300, 2, {780,735}},
+{ 573325, 2, {1207,475}},
+{ 573342, 2, {803,714}},
+{ 573344, 2, {779,736}},
+{ 573345, 2, {837,685}},
+{ 573405, 2, {889,645}},
+{ 573475, 2, {791,725}},
+{ 573496, 2, {836,686}},
+{ 573516, 2, {801,716}},
+{ 573600, 2, {800,717}},
+{ 573624, 2, {771,744}},
+{ 573648, 2, {816,703}},
+{ 573696, 2, {768,747}},
+{ 573705, 2, {855,671}},
+{ 573716, 2, {767,748}},
+{ 573760, 2, {815,704}},
+{ 573776, 2, {763,752}},
+{ 573792, 2, {834,688}},
+{ 573800, 2, {760,755}},
+{ 573804, 2, {759,756}},
+{ 573888, 2, {784,732}},
+{ 573924, 2, {849,676}},
+{ 573937, 2, {833,689}},
+{ 573965, 2, {805,713}},
+{ 574035, 2, {781,735}},
+{ 574040, 2, {904,635}},
+{ 574080, 2, {780,736}},
+{ 574182, 2, {837,686}},
+{ 574200, 2, {792,725}},
+{ 574308, 2, {774,742}},
+{ 574332, 2, {836,687}},
+{ 574392, 2, {789,728}},
+{ 574425, 2, {851,675}},
+{ 574434, 2, {846,679}},
+{ 574452, 2, {788,729}},
+{ 574464, 2, {768,748}},
+{ 574480, 2, {835,688}},
+{ 574488, 2, {808,711}},
+{ 574525, 2, {1225,469}},
+{ 574560, 2, {760,756}},
+{ 574574, 2, {902,637}},
+{ 574584, 2, {807,712}},
+{ 574590, 2, {895,642}},
+{ 574600, 2, {845,680}},
+{ 574620, 2, {785,732}},
+{ 574656, 2, {876,656}},
+{ 574695, 2, {891,645}},
+{ 574704, 2, {921,624}},
+{ 574740, 2, {927,620}},
+{ 574764, 2, {844,681}},
+{ 574770, 2, {782,735}},
+{ 574816, 2, {781,736}},
+{ 574838, 2, {901,638}},
+{ 574860, 2, {780,737}},
+{ 574875, 2, {875,657}},
+{ 574925, 2, {793,725}},
+{ 574944, 2, {848,678}},
+{ 574980, 2, {777,740}},
+{ 574992, 2, {792,726}},
+{ 575000, 2, {920,625}},
+{ 575016, 2, {776,741}},
+{ 575025, 2, {825,697}},
+{ 575050, 2, {775,742}},
+{ 575052, 2, {831,692}},
+{ 575100, 2, {810,710}},
+{ 575148, 2, {861,668}},
+{ 575168, 2, {817,704}},
+{ 575232, 2, {768,749}},
+{ 575244, 2, {841,684}},
+{ 575250, 2, {767,750}},
+{ 575276, 2, {851,676}},
+{ 575280, 2, {765,752}},
+{ 575292, 2, {764,753}},
+{ 575310, 2, {762,755}},
+{ 575340, 2, {860,669}},
+{ 575360, 2, {899,640}},
+{ 575421, 2, {987,583}},
+{ 575424, 2, {864,666}},
+{ 575460, 2, {828,695}},
+{ 575484, 2, {806,714}},
+{ 575505, 2, {783,735}},
+{ 575508, 2, {796,723}},
+{ 575580, 2, {795,724}},
+{ 575586, 2, {891,646}},
+{ 575604, 2, {813,708}},
+{ 575652, 2, {924,623}},
+{ 575688, 2, {867,664}},
+{ 575718, 2, {793,726}},
+{ 575750, 2, {875,658}},
+{ 575795, 2, {1045,551}},
+{ 575840, 2, {944,610}},
+{ 575848, 2, {791,728}},
+{ 575856, 2, {774,744}},
+{ 575865, 2, {955,603}},
+{ 575910, 2, {790,729}},
+{ 575960, 2, {770,748}},
+{ 575976, 2, {824,699}},
+{ 576000, 2, {768,750}},
+{ 576004, 2, {836,689}},
+{ 576016, 2, {973,592}},
+{ 576090, 2, {865,666}},
+{ 576150, 2, {835,690}},
+{ 576180, 2, {873,660}},
+{ 576240, 2, {784,735}},
+{ 576275, 2, {925,623}},
+{ 576288, 2, {783,736}},
+{ 576290, 2, {806,715}},
+{ 576378, 2, {781,738}},
+{ 576400, 2, {880,655}},
+{ 576450, 2, {854,675}},
+{ 576460, 2, {779,740}},
+{ 576468, 2, {804,717}},
+{ 576576, 2, {792,728}},
+{ 576583, 2, {1681,343}},
+{ 576600, 2, {775,744}},
+{ 576612, 2, {843,684}},
+{ 576624, 2, {879,656}},
+{ 576630, 2, {774,745}},
+{ 576639, 2, {791,729}},
+{ 576684, 2, {772,747}},
+{ 576693, 2, {837,689}},
+{ 576708, 2, {771,748}},
+{ 576720, 2, {801,720}},
+{ 576725, 2, {1003,575}},
+{ 576730, 2, {770,749}},
+{ 576784, 2, {767,752}},
+{ 576800, 2, {800,721}},
+{ 576810, 2, {765,754}},
+{ 576828, 2, {763,756}},
+{ 576840, 2, {760,759}},
+{ 576875, 2, {923,625}},
+{ 576912, 2, {808,714}},
+{ 576926, 2, {841,686}},
+{ 576992, 2, {949,608}},
+{ 577020, 2, {815,708}},
+{ 577060, 2, {860,671}},
+{ 577071, 2, {783,737}},
+{ 577080, 2, {840,687}},
+{ 577150, 2, {850,679}},
+{ 577215, 2, {909,635}},
+{ 577239, 2, {779,741}},
+{ 577269, 2, {833,693}},
+{ 577280, 2, {820,704}},
+{ 577304, 2, {793,728}},
+{ 577320, 2, {849,680}},
+{ 577332, 2, {812,711}},
+{ 577368, 2, {792,729}},
+{ 577430, 2, {791,730}},
+{ 577488, 2, {848,681}},
+{ 577500, 2, {770,750}},
+{ 577521, 2, {801,721}},
+{ 577530, 2, {810,713}},
+{ 577548, 2, {789,732}},
+{ 577575, 2, {765,755}},
+{ 577668, 2, {897,644}},
+{ 577680, 2, {830,696}},
+{ 577720, 2, {808,715}},
+{ 577728, 2, {816,708}},
+{ 577731, 2, {861,671}},
+{ 577760, 2, {785,736}},
+{ 577800, 2, {856,675}},
+{ 577808, 2, {784,737}},
+{ 577812, 2, {807,716}},
+{ 577830, 2, {935,618}},
+{ 577850, 2, {889,650}},
+{ 577885, 2, {869,665}},
+{ 577940, 2, {781,740}},
+{ 577941, 2, {949,609}},
+{ 577980, 2, {780,741}},
+{ 578006, 2, {946,611}},
+{ 578016, 2, {864,669}},
+{ 578088, 2, {777,744}},
+{ 578097, 2, {793,729}},
+{ 578100, 2, {820,705}},
+{ 578120, 2, {776,745}},
+{ 578124, 2, {909,636}},
+{ 578136, 2, {872,663}},
+{ 578151, 2, {931,621}},
+{ 578160, 2, {792,730}},
+{ 578200, 2, {826,700}},
+{ 578240, 2, {832,695}},
+{ 578259, 2, {891,649}},
+{ 578277, 2, {959,603}},
+{ 578280, 2, {790,732}},
+{ 578289, 2, {867,667}},
+{ 578295, 2, {905,639}},
+{ 578304, 2, {768,753}},
+{ 578305, 2, {1085,533}},
+{ 578340, 2, {765,756}},
+{ 578347, 2, {1073,539}},
+{ 578376, 2, {831,696}},
+{ 578388, 2, {921,628}},
+{ 578400, 2, {800,723}},
+{ 578448, 2, {824,702}},
+{ 578496, 2, {786,736}},
+{ 578508, 2, {852,679}},
+{ 578550, 2, {798,725}},
+{ 578578, 2, {1001,578}},
+{ 578592, 2, {784,738}},
+{ 578646, 2, {1037,558}},
+{ 578655, 2, {835,693}},
+{ 578688, 2, {822,704}},
+{ 578730, 2, {955,606}},
+{ 578760, 2, {780,742}},
+{ 578772, 2, {828,699}},
+{ 578816, 2, {896,646}},
+{ 578856, 2, {813,712}},
+{ 578864, 2, {968,598}},
+{ 578880, 2, {804,720}},
+{ 578925, 2, {775,747}},
+{ 578956, 2, {812,713}},
+{ 579012, 2, {791,732}},
+{ 579025, 2, {1007,575}},
+{ 579033, 2, {819,707}},
+{ 579040, 2, {770,752}},
+{ 579072, 2, {768,754}},
+{ 579120, 2, {762,760}},
+{ 579150, 2, {810,715}},
+{ 579156, 2, {867,668}},
+{ 579180, 2, {788,735}},
+{ 579204, 2, {837,692}},
+{ 579215, 2, {871,665}},
+{ 579275, 2, {799,725}},
+{ 579312, 2, {894,648}},
+{ 579330, 2, {785,738}},
+{ 579336, 2, {808,717}},
+{ 579360, 2, {816,710}},
+{ 579375, 2, {927,625}},
+{ 579420, 2, {783,740}},
+{ 579425, 2, {1075,539}},
+{ 579462, 2, {782,741}},
+{ 579465, 2, {815,711}},
+{ 579502, 2, {781,742}},
+{ 579544, 2, {917,632}},
+{ 579555, 2, {795,729}},
+{ 579576, 2, {779,744}},
+{ 579600, 2, {805,720}},
+{ 579670, 2, {845,686}},
+{ 579672, 2, {776,747}},
+{ 579684, 2, {804,721}},
+{ 579726, 2, {774,749}},
+{ 579740, 2, {820,707}},
+{ 579792, 2, {771,752}},
+{ 579828, 2, {844,687}},
+{ 579840, 2, {768,755}},
+{ 579852, 2, {767,756}},
+{ 579876, 2, {764,759}},
+{ 579880, 2, {763,760}},
+{ 579904, 2, {832,697}},
+{ 579924, 2, {801,724}},
+{ 579975, 2, {825,703}},
+{ 579984, 2, {843,688}},
+{ 580000, 2, {800,725}},
+{ 580032, 2, {848,684}},
+{ 580074, 2, {799,726}},
+{ 580086, 2, {871,666}},
+{ 580125, 2, {875,663}},
+{ 580140, 2, {879,660}},
+{ 580176, 2, {816,711}},
+{ 580212, 2, {852,681}},
+{ 580280, 2, {815,712}},
+{ 580284, 2, {796,729}},
+{ 580290, 2, {841,690}},
+{ 580293, 2, {1057,549}},
+{ 580356, 2, {846,686}},
+{ 580368, 2, {856,678}},
+{ 580437, 2, {1089,533}},
+{ 580450, 2, {893,650}},
+{ 580464, 2, {834,696}},
+{ 580475, 2, {775,749}},
+{ 580545, 2, {855,679}},
+{ 580580, 2, {770,754}},
+{ 580601, 2, {833,697}},
+{ 580608, 2, {768,756}},
+{ 580635, 2, {765,759}},
+{ 580668, 2, {913,636}},
+{ 580692, 2, {868,669}},
+{ 580704, 2, {789,736}},
+{ 580716, 2, {849,684}},
+{ 580720, 2, {854,680}},
+{ 580725, 2, {801,725}},
+{ 580752, 2, {872,666}},
+{ 580754, 2, {899,646}},
+{ 580788, 2, {876,663}},
+{ 580800, 2, {800,726}},
+{ 580880, 2, {848,685}},
+{ 580888, 2, {902,644}},
+{ 580920, 2, {824,705}},
+{ 580932, 2, {891,652}},
+{ 580944, 2, {784,741}},
+{ 580986, 2, {783,742}},
+{ 581010, 2, {905,642}},
+{ 581040, 2, {807,720}},
+{ 581042, 2, {847,686}},
+{ 581064, 2, {781,744}},
+{ 581100, 2, {780,745}},
+{ 581160, 2, {835,696}},
+{ 581175, 2, {861,675}},
+{ 581196, 2, {777,748}},
+{ 581224, 2, {776,749}},
+{ 581250, 2, {775,750}},
+{ 581292, 2, {804,723}},
+{ 581316, 2, {772,753}},
+{ 581343, 2, {893,651}},
+{ 581360, 2, {845,688}},
+{ 581385, 2, {791,735}},
+{ 581400, 2, {765,760}},
+{ 581405, 2, {961,605}},
+{ 581440, 2, {790,736}},
+{ 581504, 2, {826,704}},
+{ 581529, 2, {1147,507}},
+{ 581532, 2, {903,644}},
+{ 581568, 2, {832,699}},
+{ 581581, 2, {913,637}},
+{ 581647, 2, {1331,437}},
+{ 581672, 2, {799,728}},
+{ 581700, 2, {831,700}},
+{ 581715, 2, {837,695}},
+{ 581728, 2, {784,742}},
+{ 581742, 2, {798,729}},
+{ 581875, 2, {875,665}},
+{ 581895, 2, {965,603}},
+{ 581910, 2, {815,714}},
+{ 581940, 2, {795,732}},
+{ 582000, 2, {776,750}},
+{ 582036, 2, {861,676}},
+{ 582048, 2, {774,752}},
+{ 582072, 2, {921,632}},
+{ 582084, 2, {828,703}},
+{ 582108, 2, {813,716}},
+{ 582120, 2, {770,756}},
+{ 582153, 2, {767,759}},
+{ 582156, 2, {927,628}},
+{ 582175, 2, {803,725}},
+{ 582176, 2, {791,736}},
+{ 582192, 2, {933,624}},
+{ 582204, 2, {812,717}},
+{ 582330, 2, {826,705}},
+{ 582335, 2, {1105,527}},
+{ 582400, 2, {800,728}},
+{ 582417, 2, {999,583}},
+{ 582471, 2, {799,729}},
+{ 582498, 2, {938,621}},
+{ 582552, 2, {783,744}},
+{ 582568, 2, {808,721}},
+{ 582576, 2, {848,687}},
+{ 582615, 2, {963,605}},
+{ 582624, 2, {816,714}},
+{ 582659, 2, {1081,539}},
+{ 582660, 2, {780,747}},
+{ 582692, 2, {779,748}},
+{ 582736, 2, {847,688}},
+{ 582750, 2, {777,750}},
+{ 582800, 2, {775,752}},
+{ 582813, 2, {841,693}},
+{ 582855, 2, {793,735}},
+{ 582876, 2, {771,756}},
+{ 582894, 2, {846,689}},
+{ 582900, 2, {804,725}},
+{ 582912, 2, {768,759}},
+{ 582920, 2, {767,760}},
+{ 582936, 2, {856,681}},
+{ 582958, 2, {874,667}},
+{ 583000, 2, {1000,583}},
+{ 583020, 2, {790,738}},
+{ 583050, 2, {845,690}},
+{ 583072, 2, {959,608}},
+{ 583100, 2, {833,700}},
+{ 583110, 2, {855,682}},
+{ 583128, 2, {801,728}},
+{ 583164, 2, {873,668}},
+{ 583184, 2, {889,656}},
+{ 583200, 2, {800,729}},
+{ 583219, 2, {1183,493}},
+{ 583275, 2, {825,707}},
+{ 583335, 2, {783,745}},
+{ 583338, 2, {798,731}},
+{ 583356, 2, {843,692}},
+{ 583368, 2, {872,669}},
+{ 583389, 2, {837,697}},
+{ 583440, 2, {780,748}},
+{ 583443, 2, {1029,567}},
+{ 583569, 2, {1099,531}},
+{ 583583, 2, {847,689}},
+{ 583605, 2, {891,655}},
+{ 583635, 2, {949,615}},
+{ 583648, 2, {793,736}},
+{ 583656, 2, {879,664}},
+{ 583680, 2, {768,760}},
+{ 583695, 2, {765,763}},
+{ 583704, 2, {792,737}},
+{ 583712, 2, {928,629}},
+{ 583740, 2, {828,705}},
+{ 583758, 2, {791,738}},
+{ 583770, 2, {870,671}},
+{ 583786, 2, {851,686}},
+{ 583848, 2, {901,648}},
+{ 583860, 2, {789,740}},
+{ 583875, 2, {865,675}},
+{ 583905, 2, {1005,581}},
+{ 583908, 2, {788,741}},
+{ 583940, 2, {860,679}},
+{ 583947, 2, {819,713}},
+{ 583968, 2, {869,672}},
+{ 583975, 2, {1175,497}},
+{ 584000, 2, {800,730}},
+{ 584010, 2, {810,721}},
+{ 584040, 2, {785,744}},
+{ 584045, 2, {1295,451}},
+{ 584060, 2, {1007,580}},
+{ 584064, 2, {832,702}},
+{ 584073, 2, {889,657}},
+{ 584080, 2, {784,745}},
+{ 584100, 2, {825,708}},
+{ 584112, 2, {849,688}},
+{ 584155, 2, {817,715}},
+{ 584184, 2, {808,723}},
+{ 584200, 2, {920,635}},
+{ 584220, 2, {780,749}},
+{ 584250, 2, {779,750}},
+{ 584268, 2, {807,724}},
+{ 584288, 2, {961,608}},
+{ 584304, 2, {777,752}},
+{ 584320, 2, {830,704}},
+{ 584328, 2, {776,753}},
+{ 584364, 2, {836,699}},
+{ 584370, 2, {774,755}},
+{ 584375, 2, {935,625}},
+{ 584430, 2, {770,759}},
+{ 584460, 2, {765,764}},
+{ 584496, 2, {792,738}},
+{ 584545, 2, {1105,529}},
+{ 584584, 2, {803,728}},
+{ 584640, 2, {812,720}},
+{ 584727, 2, {957,611}},
+{ 584775, 2, {1017,575}},
+{ 584784, 2, {786,744}},
+{ 584790, 2, {965,606}},
+{ 584800, 2, {800,731}},
+{ 584820, 2, {810,722}},
+{ 584844, 2, {897,652}},
+{ 584892, 2, {844,693}},
+{ 584896, 2, {832,703}},
+{ 584936, 2, {782,748}},
+{ 584970, 2, {930,629}},
+{ 585024, 2, {831,704}},
+{ 585060, 2, {796,735}},
+{ 585072, 2, {816,717}},
+{ 585090, 2, {985,594}},
+{ 585120, 2, {795,736}},
+{ 585156, 2, {806,726}},
+{ 585216, 2, {768,762}},
+{ 585234, 2, {793,738}},
+{ 585264, 2, {822,712}},
+{ 585324, 2, {852,687}},
+{ 585330, 2, {895,654}},
+{ 585333, 2, {1141,513}},
+{ 585340, 2, {791,740}},
+{ 585360, 2, {813,720}},
+{ 585387, 2, {803,729}},
+{ 585396, 2, {828,707}},
+{ 585570, 2, {786,745}},
+{ 585585, 2, {819,715}},
+{ 585599, 2, {833,703}},
+{ 585600, 2, {800,732}},
+{ 585603, 2, {943,621}},
+{ 585648, 2, {784,747}},
+{ 585650, 2, {850,689}},
+{ 585660, 2, {860,681}},
+{ 585675, 2, {855,685}},
+{ 585684, 2, {783,748}},
+{ 585750, 2, {781,750}},
+{ 585756, 2, {921,636}},
+{ 585792, 2, {864,678}},
+{ 585800, 2, {808,725}},
+{ 585864, 2, {824,711}},
+{ 585880, 2, {776,755}},
+{ 585900, 2, {775,756}},
+{ 585915, 2, {795,737}},
+{ 585924, 2, {933,628}},
+{ 585948, 2, {772,759}},
+{ 585960, 2, {771,760}},
+{ 585963, 2, {917,639}},
+{ 585984, 2, {768,763}},
+{ 586040, 2, {805,728}},
+{ 586044, 2, {876,669}},
+{ 586047, 2, {903,649}},
+{ 586080, 2, {792,740}},
+{ 586092, 2, {867,676}},
+{ 586116, 2, {804,729}},
+{ 586170, 2, {835,702}},
+{ 586176, 2, {852,688}},
+{ 586332, 2, {801,732}},
+{ 586360, 2, {856,685}},
+{ 586395, 2, {785,747}},
+{ 586404, 2, {819,716}},
+{ 586432, 2, {784,748}},
+{ 586464, 2, {894,656}},
+{ 586467, 2, {783,749}},
+{ 586470, 2, {865,678}},
+{ 586500, 2, {782,750}},
+{ 586551, 2, {901,651}},
+{ 586560, 2, {780,752}},
+{ 586608, 2, {808,726}},
+{ 586670, 2, {986,595}},
+{ 586710, 2, {795,738}},
+{ 586719, 2, {973,603}},
+{ 586728, 2, {843,696}},
+{ 586755, 2, {767,765}},
+{ 586768, 2, {806,728}},
+{ 586800, 2, {815,720}},
+{ 586810, 2, {830,707}},
+{ 586820, 2, {793,740}},
+{ 586845, 2, {805,729}},
+{ 586872, 2, {792,741}},
+{ 586880, 2, {896,655}},
+{ 586920, 2, {804,730}},
+{ 586950, 2, {903,650}},
+{ 586960, 2, {880,667}},
+{ 586971, 2, {847,693}},
+{ 587016, 2, {789,744}},
+{ 587076, 2, {812,723}},
+{ 587088, 2, {906,648}},
+{ 587125, 2, {875,671}},
+{ 587136, 2, {834,704}},
+{ 587160, 2, {840,699}},
+{ 587172, 2, {879,668}},
+{ 587190, 2, {851,690}},
+{ 587216, 2, {784,749}},
+{ 587265, 2, {799,735}},
+{ 587312, 2, {781,752}},
+{ 587328, 2, {798,736}},
+{ 587340, 2, {780,753}},
+{ 587366, 2, {779,754}},
+{ 587400, 2, {825,712}},
+{ 587412, 2, {777,756}},
+{ 587496, 2, {807,728}},
+{ 587508, 2, {849,692}},
+{ 587510, 2, {770,763}},
+{ 587520, 2, {768,765}},
+{ 587552, 2, {854,688}},
+{ 587574, 2, {806,729}},
+{ 587640, 2, {830,708}},
+{ 587664, 2, {792,742}},
+{ 587730, 2, {822,715}},
+{ 587760, 2, {790,744}},
+{ 587796, 2, {803,732}},
+{ 587840, 2, {835,704}},
+{ 587880, 2, {828,710}},
+{ 587925, 2, {871,675}},
+{ 587940, 2, {820,717}},
+{ 587951, 2, {923,637}},
+{ 587972, 2, {913,644}},
+{ 587979, 2, {1037,567}},
+{ 588000, 2, {784,750}},
+{ 588015, 2, {895,657}},
+{ 588060, 2, {810,726}},
+{ 588072, 2, {856,687}},
+{ 588115, 2, {935,629}},
+{ 588120, 2, {780,754}},
+{ 588126, 2, {798,737}},
+{ 588132, 2, {961,612}},
+{ 588240, 2, {774,760}},
+{ 588294, 2, {882,667}},
+{ 588300, 2, {795,740}},
+{ 588302, 2, {1331,442}},
+{ 588336, 2, {816,721}},
+{ 588348, 2, {831,708}},
+{ 588384, 2, {864,681}},
+{ 588392, 2, {931,632}},
+{ 588406, 2, {793,742}},
+{ 588411, 2, {837,703}},
+{ 588432, 2, {897,656}},
+{ 588448, 2, {994,592}},
+{ 588455, 2, {805,731}},
+{ 588504, 2, {791,744}},
+{ 588544, 2, {836,704}},
+{ 588588, 2, {858,686}},
+{ 588600, 2, {872,675}},
+{ 588612, 2, {813,724}},
+{ 588627, 2, {1053,559}},
+{ 588636, 2, {788,747}},
+{ 588645, 2, {927,635}},
+{ 588672, 2, {876,672}},
+{ 588708, 2, {828,711}},
+{ 588720, 2, {880,669}},
+{ 588750, 2, {785,750}},
+{ 588756, 2, {903,652}},
+{ 588816, 2, {783,752}},
+{ 588885, 2, {913,645}},
+{ 588900, 2, {780,755}},
+{ 588924, 2, {779,756}},
+{ 588945, 2, {1065,553}},
+{ 588965, 2, {845,697}},
+{ 588984, 2, {776,759}},
+{ 589000, 2, {775,760}},
+{ 589032, 2, {808,729}},
+{ 589044, 2, {771,764}},
+{ 589056, 2, {768,767}},
+{ 589152, 2, {816,722}},
+{ 589160, 2, {824,715}},
+{ 589186, 2, {806,731}},
+{ 589225, 2, {925,637}},
+{ 589260, 2, {805,732}},
+{ 589280, 2, {928,635}},
+{ 589360, 2, {848,695}},
+{ 589375, 2, {943,625}},
+{ 589380, 2, {836,705}},
+{ 589410, 2, {885,666}},
+{ 589440, 2, {921,640}},
+{ 589475, 2, {1241,475}},
+{ 589498, 2, {1027,574}},
+{ 589536, 2, {801,736}},
+{ 589560, 2, {867,680}},
+{ 589572, 2, {927,636}},
+{ 589589, 2, {1001,589}},
+{ 589600, 2, {800,737}},
+{ 589656, 2, {933,632}},
+{ 589662, 2, {799,738}},
+{ 589680, 2, {780,756}},
+{ 589692, 2, {939,628}},
+{ 589836, 2, {796,741}},
+{ 589875, 2, {825,715}},
+{ 589956, 2, {844,699}},
+{ 589960, 2, {860,686}},
+{ 589968, 2, {816,723}},
+{ 589992, 2, {793,744}},
+{ 590000, 2, {944,625}},
+{ 590040, 2, {792,745}},
+{ 590085, 2, {837,705}},
+{ 590100, 2, {843,700}},
+{ 590148, 2, {873,676}},
+{ 590150, 2, {814,725}},
+{ 590172, 2, {789,748}},
+{ 590190, 2, {955,618}},
+{ 590205, 2, {803,735}},
+{ 590240, 2, {868,680}},
+{ 590296, 2, {889,664}},
+{ 590304, 2, {858,688}},
+{ 590320, 2, {785,752}},
+{ 590352, 2, {784,753}},
+{ 590359, 2, {847,697}},
+{ 590364, 2, {828,713}},
+{ 590400, 2, {800,738}},
+{ 590436, 2, {781,756}},
+{ 590480, 2, {880,671}},
+{ 590499, 2, {819,721}},
+{ 590520, 2, {777,760}},
+{ 590525, 2, {1027,575}},
+{ 590550, 2, {775,762}},
+{ 590562, 2, {774,763}},
+{ 590580, 2, {772,765}},
+{ 590590, 2, {770,767}},
+{ 590604, 2, {948,623}},
+{ 590625, 2, {875,675}},
+{ 590640, 2, {856,690}},
+{ 590688, 2, {879,672}},
+{ 590700, 2, {825,716}},
+{ 590720, 2, {832,710}},
+{ 590724, 2, {807,732}},
+{ 590730, 2, {870,679}},
+{ 590733, 2, {891,663}},
+{ 590744, 2, {959,616}},
+{ 590808, 2, {824,717}},
+{ 590820, 2, {860,687}},
+{ 590824, 2, {874,676}},
+{ 590877, 2, {791,747}},
+{ 590904, 2, {849,696}},
+{ 590940, 2, {804,735}},
+{ 590976, 2, {864,684}},
+{ 591008, 2, {803,736}},
+{ 591072, 2, {786,752}},
+{ 591075, 2, {925,639}},
+{ 591108, 2, {868,681}},
+{ 591136, 2, {784,754}},
+{ 591162, 2, {858,689}},
+{ 591165, 2, {783,755}},
+{ 591180, 2, {835,708}},
+{ 591192, 2, {782,756}},
+{ 591216, 2, {872,678}},
+{ 591220, 2, {820,721}},
+{ 591250, 2, {946,625}},
+{ 591260, 2, {799,740}},
+{ 591261, 2, {779,759}},
+{ 591300, 2, {810,730}},
+{ 591312, 2, {776,762}},
+{ 591325, 2, {775,763}},
+{ 591360, 2, {770,768}},
+{ 591381, 2, {1043,567}},
+{ 591396, 2, {884,669}},
+{ 591422, 2, {989,598}},
+{ 591430, 2, {833,710}},
+{ 591448, 2, {968,611}},
+{ 591480, 2, {795,744}},
+{ 591500, 2, {845,700}},
+{ 591552, 2, {832,711}},
+{ 591584, 2, {973,608}},
+{ 591600, 2, {816,725}},
+{ 591624, 2, {792,747}},
+{ 591660, 2, {855,692}},
+{ 591672, 2, {831,712}},
+{ 591690, 2, {815,726}},
+{ 591710, 2, {790,749}},
+{ 591744, 2, {804,736}},
+{ 591745, 2, {1015,583}},
+{ 591759, 2, {837,707}},
+{ 591840, 2, {822,720}},
+{ 591864, 2, {813,728}},
+{ 591870, 2, {905,654}},
+{ 591872, 2, {1024,578}},
+{ 591920, 2, {784,755}},
+{ 591948, 2, {783,756}},
+{ 592000, 2, {800,740}},
+{ 592020, 2, {780,759}},
+{ 592040, 2, {779,760}},
+{ 592059, 2, {799,741}},
+{ 592064, 2, {841,704}},
+{ 592088, 2, {776,763}},
+{ 592120, 2, {904,655}},
+{ 592128, 2, {771,768}},
+{ 592185, 2, {1067,555}},
+{ 592200, 2, {840,705}},
+{ 592263, 2, {833,711}},
+{ 592280, 2, {871,680}},
+{ 592296, 2, {851,696}},
+{ 592325, 2, {817,725}},
+{ 592368, 2, {861,688}},
+{ 592410, 2, {806,735}},
+{ 592416, 2, {792,748}},
+{ 592450, 2, {850,697}},
+{ 592480, 2, {805,736}},
+{ 592540, 2, {860,689}},
+{ 592592, 2, {814,728}},
+{ 592596, 2, {837,708}},
+{ 592614, 2, {803,738}},
+{ 592668, 2, {909,652}},
+{ 592704, 2, {784,756}},
+{ 592740, 2, {801,740}},
+{ 592752, 2, {848,699}},
+{ 592860, 2, {820,723}},
+{ 592875, 2, {775,765}},
+{ 592956, 2, {819,724}},
+{ 593021, 2, {1573,377}},
+{ 593028, 2, {867,684}},
+{ 593055, 2, {955,621}},
+{ 593096, 2, {833,712}},
+{ 593124, 2, {921,644}},
+{ 593125, 2, {949,625}},
+{ 593142, 2, {817,726}},
+{ 593164, 2, {793,748}},
+{ 593190, 2, {845,702}},
+{ 593208, 2, {792,749}},
+{ 593216, 2, {806,736}},
+{ 593229, 2, {861,689}},
+{ 593250, 2, {791,750}},
+{ 593285, 2, {805,737}},
+{ 593320, 2, {815,728}},
+{ 593328, 2, {789,752}},
+{ 593340, 2, {870,682}},
+{ 593364, 2, {788,753}},
+{ 593388, 2, {933,636}},
+{ 593406, 2, {814,729}},
+{ 593430, 2, {786,755}},
+{ 593448, 2, {939,632}},
+{ 593460, 2, {785,756}},
+{ 593472, 2, {843,704}},
+{ 593505, 2, {981,605}},
+{ 593560, 2, {781,760}},
+{ 593568, 2, {864,687}},
+{ 593572, 2, {812,731}},
+{ 593600, 2, {800,742}},
+{ 593616, 2, {894,664}},
+{ 593628, 2, {777,764}},
+{ 593640, 2, {776,765}},
+{ 593658, 2, {774,767}},
+{ 593676, 2, {828,717}},
+{ 593685, 2, {835,711}},
+{ 593712, 2, {798,744}},
+{ 593775, 2, {819,725}},
+{ 593808, 2, {834,712}},
+{ 593832, 2, {872,681}},
+{ 593835, 2, {885,671}},
+{ 593845, 2, {893,665}},
+{ 593850, 2, {925,642}},
+{ 593880, 2, {808,735}},
+{ 593929, 2, {833,713}},
+{ 593952, 2, {807,736}},
+{ 593955, 2, {985,603}},
+{ 593978, 2, {931,638}},
+{ 594000, 2, {792,750}},
+{ 594035, 2, {845,703}},
+{ 594072, 2, {888,669}},
+{ 594080, 2, {790,752}},
+{ 594090, 2, {805,738}},
+{ 594125, 2, {875,679}},
+{ 594135, 2, {815,729}},
+{ 594204, 2, {879,676}},
+{ 594220, 2, {803,740}},
+{ 594225, 2, {855,695}},
+{ 594270, 2, {837,710}},
+{ 594300, 2, {849,700}},
+{ 594320, 2, {782,760}},
+{ 594336, 2, {906,656}},
+{ 594363, 2, {913,651}},
+{ 594396, 2, {836,711}},
+{ 594405, 2, {777,765}},
+{ 594412, 2, {923,644}},
+{ 594425, 2, {775,767}},
+{ 594432, 2, {774,768}},
+{ 594456, 2, {799,744}},
+{ 594475, 2, {1075,553}},
+{ 594510, 2, {798,745}},
+{ 594520, 2, {835,712}},
+{ 594550, 2, {1034,575}},
+{ 594585, 2, {905,657}},
+{ 594612, 2, {796,747}},
+{ 594660, 2, {795,748}},
+{ 594720, 2, {826,720}},
+{ 594750, 2, {793,750}},
+{ 594776, 2, {817,728}},
+{ 594804, 2, {876,679}},
+{ 594825, 2, {825,721}},
+{ 594832, 2, {791,752}},
+{ 594864, 2, {816,729}},
+{ 594880, 2, {832,715}},
+{ 594909, 2, {931,639}},
+{ 594920, 2, {856,695}},
+{ 594996, 2, {831,716}},
+{ 595020, 2, {844,705}},
+{ 595034, 2, {814,731}},
+{ 595056, 2, {784,759}},
+{ 595080, 2, {783,760}},
+{ 595116, 2, {813,732}},
+{ 595140, 2, {780,763}},
+{ 595188, 2, {891,668}},
+{ 595200, 2, {775,768}},
+{ 595212, 2, {772,771}},
+{ 595296, 2, {848,702}},
+{ 595335, 2, {923,645}},
+{ 595344, 2, {942,632}},
+{ 595350, 2, {810,735}},
+{ 595395, 2, {909,655}},
+{ 595441, 2, {847,703}},
+{ 595455, 2, {795,749}},
+{ 595525, 2, {1025,581}},
+{ 595539, 2, {959,621}},
+{ 595548, 2, {852,699}},
+{ 595593, 2, {817,729}},
+{ 595608, 2, {897,664}},
+{ 595630, 2, {889,670}},
+{ 595650, 2, {825,722}},
+{ 595680, 2, {816,730}},
+{ 595752, 2, {824,723}},
+{ 595764, 2, {804,741}},
+{ 595782, 2, {918,649}},
+{ 595812, 2, {861,692}},
+{ 595826, 2, {803,742}},
+{ 595935, 2, {779,765}},
+{ 595944, 2, {801,744}},
+{ 595950, 2, {822,725}},
+{ 595959, 2, {777,767}},
+{ 595980, 2, {774,770}},
+{ 596000, 2, {800,745}},
+{ 596037, 2, {899,663}},
+{ 596068, 2, {836,713}},
+{ 596070, 2, {895,666}},
+{ 596134, 2, {869,686}},
+{ 596160, 2, {810,736}},
+{ 596190, 2, {835,714}},
+{ 596232, 2, {819,728}},
+{ 596275, 2, {1037,575}},
+{ 596288, 2, {847,704}},
+{ 596304, 2, {808,738}},
+{ 596310, 2, {834,715}},
+{ 596316, 2, {868,687}},
+{ 596336, 2, {793,752}},
+{ 596370, 2, {965,618}},
+{ 596376, 2, {792,753}},
+{ 596400, 2, {840,710}},
+{ 596477, 2, {1739,343}},
+{ 596484, 2, {789,756}},
+{ 596496, 2, {816,731}},
+{ 596544, 2, {832,717}},
+{ 596556, 2, {876,681}},
+{ 596580, 2, {815,732}},
+{ 596600, 2, {785,760}},
+{ 596640, 2, {880,678}},
+{ 596700, 2, {780,765}},
+{ 596736, 2, {777,768}},
+{ 596745, 2, {801,745}},
+{ 596785, 2, {1003,595}},
+{ 596808, 2, {921,648}},
+{ 596820, 2, {812,735}},
+{ 596844, 2, {843,708}},
+{ 596850, 2, {865,690}},
+{ 596910, 2, {985,606}},
+{ 596970, 2, {810,737}},
+{ 596988, 2, {828,721}},
+{ 597051, 2, {819,729}},
+{ 597080, 2, {920,649}},
+{ 597120, 2, {933,640}},
+{ 597132, 2, {873,684}},
+{ 597135, 2, {847,705}},
+{ 597168, 2, {792,754}},
+{ 597180, 2, {807,740}},
+{ 597204, 2, {939,636}},
+{ 597240, 2, {790,756}},
+{ 597300, 2, {825,724}},
+{ 597312, 2, {816,732}},
+{ 597320, 2, {872,685}},
+{ 597360, 2, {786,760}},
+{ 597375, 2, {885,675}},
+{ 597400, 2, {824,725}},
+{ 597402, 2, {851,702}},
+{ 597408, 2, {784,762}},
+{ 597429, 2, {783,763}},
+{ 597432, 2, {803,744}},
+{ 597465, 2, {781,765}},
+{ 597506, 2, {871,686}},
+{ 597550, 2, {850,703}},
+{ 597575, 2, {1025,583}},
+{ 597600, 2, {800,747}},
+{ 597632, 2, {812,736}},
+{ 597652, 2, {799,748}},
+{ 597696, 2, {849,704}},
+{ 597720, 2, {879,680}},
+{ 597800, 2, {854,700}},
+{ 597835, 2, {899,665}},
+{ 597840, 2, {795,752}},
+{ 597861, 2, {891,671}},
+{ 597872, 2, {869,688}},
+{ 597960, 2, {792,755}},
+{ 597996, 2, {791,756}},
+{ 598005, 2, {873,685}},
+{ 598026, 2, {858,697}},
+{ 598092, 2, {788,759}},
+{ 598122, 2, {846,707}},
+{ 598170, 2, {785,762}},
+{ 598192, 2, {784,763}},
+{ 598212, 2, {783,764}},
+{ 598224, 2, {824,726}},
+{ 598230, 2, {782,765}},
+{ 598260, 2, {780,767}},
+{ 598272, 2, {779,768}},
+{ 598296, 2, {776,771}},
+{ 598299, 2, {897,667}},
+{ 598320, 2, {831,720}},
+{ 598344, 2, {856,699}},
+{ 598345, 2, {989,605}},
+{ 598368, 2, {813,736}},
+{ 598400, 2, {800,748}},
+{ 598416, 2, {822,728}},
+{ 598430, 2, {830,721}},
+{ 598437, 2, {1127,531}},
+{ 598444, 2, {812,737}},
+{ 598455, 2, {837,715}},
+{ 598500, 2, {798,750}},
+{ 598560, 2, {860,696}},
+{ 598598, 2, {1001,598}},
+{ 598644, 2, {828,723}},
+{ 598689, 2, {819,731}},
+{ 598728, 2, {808,741}},
+{ 598808, 2, {952,629}},
+{ 598845, 2, {1079,555}},
+{ 598850, 2, {826,725}},
+{ 598920, 2, {805,744}},
+{ 598980, 2, {804,745}},
+{ 599040, 2, {780,768}},
+{ 599064, 2, {872,687}},
+{ 599104, 2, {814,736}},
+{ 599148, 2, {801,748}},
+{ 599165, 2, {901,665}},
+{ 599196, 2, {897,668}},
+{ 599200, 2, {800,749}},
+{ 599248, 2, {871,688}},
+{ 599250, 2, {799,750}},
+{ 599265, 2, {965,621}},
+{ 599280, 2, {880,681}},
+{ 599292, 2, {837,716}},
+{ 599319, 2, {1057,567}},
+{ 599368, 2, {973,616}},
+{ 599388, 2, {796,753}},
+{ 599400, 2, {810,740}},
+{ 599412, 2, {836,717}},
+{ 599420, 2, {820,731}},
+{ 599440, 2, {944,635}},
+{ 599445, 2, {865,693}},
+{ 599508, 2, {793,756}},
+{ 599564, 2, {874,686}},
+{ 599592, 2, {903,664}},
+{ 599640, 2, {789,760}},
+{ 599675, 2, {1411,425}},
+{ 599697, 2, {1169,513}},
+{ 599760, 2, {784,765}},
+{ 599808, 2, {781,768}},
+{ 599830, 2, {779,770}},
+{ 599840, 2, {815,736}},
+{ 599844, 2, {777,772}},
+{ 599850, 2, {775,774}},
+{ 599907, 2, {1029,583}},
+{ 599940, 2, {909,660}},
+{ 599949, 2, {801,749}},
+{ 599964, 2, {867,692}},
+{ 599985, 2, {995,603}},
+{ 600000, 2, {800,750}},
+{ 600066, 2, {901,666}},
+{ 600075, 2, {889,675}},
+{ 600084, 2, {844,711}},
+{ 600096, 2, {798,752}},
+{ 600160, 2, {880,682}},
+{ 600210, 2, {810,741}},
+{ 600216, 2, {843,712}},
+{ 600237, 2, {1161,517}},
+{ 600250, 2, {875,686}},
+{ 600270, 2, {935,642}},
+{ 600300, 2, {828,725}},
+{ 600320, 2, {896,670}},
+{ 600325, 2, {925,649}},
+{ 600384, 2, {848,708}},
+{ 600408, 2, {807,744}},
+{ 600425, 2, {1175,511}},
+{ 600457, 2, {1859,323}},
+{ 600474, 2, {841,714}},
+{ 600480, 2, {834,720}},
+{ 600492, 2, {921,652}},
+{ 600495, 2, {817,735}},
+{ 600525, 2, {785,765}},
+{ 600561, 2, {783,767}},
+{ 600576, 2, {782,768}},
+{ 600588, 2, {804,747}},
+{ 600600, 2, {780,770}},
+{ 600624, 2, {776,774}},
+{ 600660, 2, {846,710}},
+{ 600691, 2, {943,637}},
+{ 600696, 2, {824,729}},
+{ 600704, 2, {832,722}},
+{ 600754, 2, {913,658}},
+{ 600768, 2, {894,672}},
+{ 600795, 2, {845,711}},
+{ 600831, 2, {867,693}},
+{ 600852, 2, {933,644}},
+{ 600873, 2, {923,651}},
+{ 600912, 2, {856,702}},
+{ 600915, 2, {885,679}},
+{ 600950, 2, {850,707}},
+{ 600960, 2, {939,640}},
+{ 600990, 2, {871,690}},
+{ 601020, 2, {795,756}},
+{ 601065, 2, {855,703}},
+{ 601092, 2, {849,708}},
+{ 601128, 2, {792,759}},
+{ 601140, 2, {860,699}},
+{ 601160, 2, {791,760}},
+{ 601200, 2, {835,720}},
+{ 601216, 2, {854,704}},
+{ 601224, 2, {984,611}},
+{ 601236, 2, {879,684}},
+{ 601312, 2, {817,736}},
+{ 601315, 2, {841,715}},
+{ 601328, 2, {784,767}},
+{ 601335, 2, {805,747}},
+{ 601344, 2, {783,768}},
+{ 601370, 2, {781,770}},
+{ 601380, 2, {780,771}},
+{ 601400, 2, {776,775}},
+{ 601425, 2, {825,729}},
+{ 601426, 2, {833,722}},
+{ 601470, 2, {815,738}},
+{ 601524, 2, {868,693}},
+{ 601536, 2, {832,723}},
+{ 601552, 2, {917,656}},
+{ 601584, 2, {906,664}},
+{ 601620, 2, {813,740}},
+{ 601640, 2, {845,712}},
+{ 601644, 2, {831,724}},
+{ 601650, 2, {955,630}},
+{ 601680, 2, {872,690}},
+{ 601692, 2, {798,754}},
+{ 601800, 2, {850,708}},
+{ 601812, 2, {876,687}},
+{ 601875, 2, {963,625}},
+{ 601887, 2, {793,759}},
+{ 601920, 2, {792,760}},
+{ 601953, 2, {957,629}},
+{ 601960, 2, {808,745}},
+{ 602004, 2, {884,681}},
+{ 602040, 2, {865,696}},
+{ 602064, 2, {888,678}},
+{ 602070, 2, {854,705}},
+{ 602080, 2, {848,710}},
+{ 602085, 2, {979,615}},
+{ 602100, 2, {892,675}},
+{ 602112, 2, {784,768}},
+{ 602140, 2, {782,770}},
+{ 602154, 2, {826,729}},
+{ 602175, 2, {777,775}},
+{ 602196, 2, {804,749}},
+{ 602208, 2, {816,738}},
+{ 602217, 2, {847,711}},
+{ 602250, 2, {803,750}},
+{ 602272, 2, {928,649}},
+{ 602280, 2, {840,717}},
+{ 602352, 2, {801,752}},
+{ 602364, 2, {852,707}},
+{ 602400, 2, {800,753}},
+{ 602446, 2, {799,754}},
+{ 602469, 2, {917,657}},
+{ 602485, 2, {845,713}},
+{ 602490, 2, {798,755}},
+{ 602547, 2, {961,627}},
+{ 602600, 2, {920,655}},
+{ 602602, 2, {946,637}},
+{ 602640, 2, {810,744}},
+{ 602680, 2, {793,760}},
+{ 602688, 2, {876,688}},
+{ 602700, 2, {820,735}},
+{ 602730, 2, {905,666}},
+{ 602770, 2, {790,763}},
+{ 602784, 2, {819,736}},
+{ 602796, 2, {789,764}},
+{ 602800, 2, {880,685}},
+{ 602820, 2, {788,765}},
+{ 602875, 2, {875,689}},
+{ 602880, 2, {785,768}},
+{ 602888, 2, {806,748}},
+{ 602910, 2, {783,770}},
+{ 602928, 2, {848,711}},
+{ 602952, 2, {777,776}},
+{ 602970, 2, {995,606}},
+{ 603064, 2, {847,712}},
+{ 603075, 2, {825,731}},
+{ 603200, 2, {800,754}},
+{ 603204, 2, {903,668}},
+{ 603288, 2, {798,756}},
+{ 603330, 2, {845,714}},
+{ 603351, 2, {1099,549}},
+{ 603432, 2, {867,696}},
+{ 603450, 2, {810,745}},
+{ 603477, 2, {837,721}},
+{ 603480, 2, {856,705}},
+{ 603504, 2, {792,762}},
+{ 603520, 2, {820,736}},
+{ 603576, 2, {808,747}},
+{ 603588, 2, {843,716}},
+{ 603603, 2, {819,737}},
+{ 603612, 2, {828,729}},
+{ 603636, 2, {807,748}},
+{ 603648, 2, {786,768}},
+{ 603668, 2, {893,676}},
+{ 603680, 2, {784,770}},
+{ 603725, 2, {779,775}},
+{ 603750, 2, {805,750}},
+{ 603840, 2, {816,740}},
+{ 603856, 2, {803,752}},
+{ 603876, 2, {948,637}},
+{ 603900, 2, {825,732}},
+{ 603911, 2, {847,713}},
+{ 603925, 2, {833,725}},
+{ 603936, 2, {864,699}},
+{ 604000, 2, {800,755}},
+{ 604010, 2, {935,646}},
+{ 604032, 2, {832,726}},
+{ 604044, 2, {799,756}},
+{ 604116, 2, {873,692}},
+{ 604125, 2, {895,675}},
+{ 604164, 2, {796,759}},
+{ 604176, 2, {921,656}},
+{ 604200, 2, {795,760}},
+{ 604219, 2, {931,649}},
+{ 604233, 2, {973,621}},
+{ 604296, 2, {792,763}},
+{ 604310, 2, {890,679}},
+{ 604340, 2, {820,737}},
+{ 604352, 2, {994,608}},
+{ 604395, 2, {999,605}},
+{ 604404, 2, {927,652}},
+{ 604428, 2, {836,723}},
+{ 604440, 2, {828,730}},
+{ 604464, 2, {784,771}},
+{ 604476, 2, {783,772}},
+{ 604485, 2, {855,707}},
+{ 604488, 2, {849,712}},
+{ 604494, 2, {781,774}},
+{ 604500, 2, {780,775}},
+{ 604513, 2, {949,637}},
+{ 604520, 2, {889,680}},
+{ 604560, 2, {880,687}},
+{ 604580, 2, {817,740}},
+{ 604584, 2, {933,648}},
+{ 604608, 2, {804,752}},
+{ 604650, 2, {834,725}},
+{ 604656, 2, {816,741}},
+{ 604675, 2, {1273,475}},
+{ 604709, 2, {1763,343}},
+{ 604716, 2, {939,644}},
+{ 604728, 2, {888,681}},
+{ 604752, 2, {879,688}},
+{ 604755, 2, {801,755}},
+{ 604800, 2, {800,756}},
+{ 604824, 2, {869,696}},
+{ 604836, 2, {951,636}},
+{ 604872, 2, {813,744}},
+{ 604877, 2, {1547,391}},
+{ 604890, 2, {846,715}},
+{ 604950, 2, {925,654}},
+{ 604968, 2, {831,728}},
+{ 604992, 2, {822,736}},
+{ 604996, 2, {868,697}},
+{ 605000, 2, {968,625}},
+{ 605024, 2, {1022,592}},
+{ 605115, 2, {791,765}},
+{ 605148, 2, {844,717}},
+{ 605192, 2, {808,749}},
+{ 605275, 2, {781,775}},
+{ 605283, 2, {779,777}},
+{ 605340, 2, {855,708}},
+{ 605360, 2, {805,752}},
+{ 605397, 2, {817,741}},
+{ 605412, 2, {804,753}},
+{ 605440, 2, {860,704}},
+{ 605472, 2, {816,742}},
+{ 605475, 2, {897,675}},
+{ 605488, 2, {923,656}},
+{ 605520, 2, {841,720}},
+{ 605535, 2, {1095,553}},
+{ 605556, 2, {801,756}},
+{ 605616, 2, {814,744}},
+{ 605625, 2, {969,625}},
+{ 605640, 2, {824,735}},
+{ 605682, 2, {798,759}},
+{ 605772, 2, {852,711}},
+{ 605871, 2, {1141,531}},
+{ 605880, 2, {792,765}},
+{ 605913, 2, {903,671}},
+{ 605952, 2, {789,768}},
+{ 605988, 2, {837,724}},
+{ 606000, 2, {808,750}},
+{ 606040, 2, {872,695}},
+{ 606060, 2, {780,777}},
+{ 606088, 2, {959,632}},
+{ 606144, 2, {861,704}},
+{ 606210, 2, {835,726}},
+{ 606300, 2, {860,705}},
+{ 606320, 2, {848,715}},
+{ 606360, 2, {815,744}},
+{ 606372, 2, {897,676}},
+{ 606390, 2, {870,697}},
+{ 606424, 2, {833,728}},
+{ 606441, 2, {799,759}},
+{ 606480, 2, {798,760}},
+{ 606515, 2, {1085,559}},
+{ 606528, 2, {832,729}},
+{ 606564, 2, {812,747}},
+{ 606585, 2, {795,763}},
+{ 606645, 2, {793,765}},
+{ 606690, 2, {810,749}},
+{ 606720, 2, {790,768}},
+{ 606732, 2, {868,699}},
+{ 606735, 2, {873,695}},
+{ 606810, 2, {895,678}},
+{ 606816, 2, {784,774}},
+{ 606825, 2, {783,775}},
+{ 606837, 2, {781,777}},
+{ 606864, 2, {807,752}},
+{ 606879, 2, {819,741}},
+{ 606960, 2, {843,720}},
+{ 606970, 2, {805,754}},
+{ 607020, 2, {804,755}},
+{ 607068, 2, {803,756}},
+{ 607110, 2, {826,735}},
+{ 607145, 2, {913,665}},
+{ 607152, 2, {834,728}},
+{ 607185, 2, {927,655}},
+{ 607200, 2, {800,759}},
+{ 607202, 2, {841,722}},
+{ 607212, 2, {909,668}},
+{ 607230, 2, {865,702}},
+{ 607240, 2, {799,760}},
+{ 607257, 2, {833,729}},
+{ 607292, 2, {943,644}},
+{ 607308, 2, {884,687}},
+{ 607320, 2, {840,723}},
+{ 607334, 2, {923,658}},
+{ 607360, 2, {832,730}},
+{ 607380, 2, {795,764}},
+{ 607392, 2, {864,703}},
+{ 607425, 2, {975,623}},
+{ 607452, 2, {892,681}},
+{ 607464, 2, {792,767}},
+{ 607488, 2, {791,768}},
+{ 607500, 2, {810,750}},
+{ 607548, 2, {788,771}},
+{ 607560, 2, {830,732}},
+{ 607590, 2, {785,774}},
+{ 607600, 2, {784,775}},
+{ 607608, 2, {783,776}},
+{ 607620, 2, {780,779}},
+{ 607725, 2, {925,657}},
+{ 607840, 2, {928,655}},
+{ 607848, 2, {817,744}},
+{ 607860, 2, {921,660}},
+{ 607880, 2, {835,728}},
+{ 607884, 2, {849,716}},
+{ 607920, 2, {816,745}},
+{ 607936, 2, {826,736}},
+{ 607950, 2, {965,630}},
+{ 608016, 2, {848,717}},
+{ 608020, 2, {860,707}},
+{ 608025, 2, {825,737}},
+{ 608090, 2, {833,730}},
+{ 608112, 2, {824,738}},
+{ 608124, 2, {813,748}},
+{ 608192, 2, {832,731}},
+{ 608256, 2, {792,768}},
+{ 608268, 2, {879,692}},
+{ 608292, 2, {831,732}},
+{ 608316, 2, {933,652}},
+{ 608391, 2, {783,777}},
+{ 608424, 2, {808,753}},
+{ 608440, 2, {820,742}},
+{ 608465, 2, {851,715}},
+{ 608472, 2, {939,648}},
+{ 608580, 2, {805,756}},
+{ 608608, 2, {836,728}},
+{ 608616, 2, {856,711}},
+{ 608634, 2, {867,702}},
+{ 608640, 2, {951,640}},
+{ 608650, 2, {925,658}},
+{ 608715, 2, {835,729}},
+{ 608730, 2, {985,618}},
+{ 608751, 2, {1089,559}},
+{ 608760, 2, {801,760}},
+{ 608762, 2, {826,737}},
+{ 608805, 2, {815,747}},
+{ 608825, 2, {1225,497}},
+{ 608832, 2, {906,672}},
+{ 608850, 2, {825,738}},
+{ 608855, 2, {1105,551}},
+{ 608888, 2, {917,664}},
+{ 608923, 2, {833,731}},
+{ 608940, 2, {796,765}},
+{ 608960, 2, {865,704}},
+{ 609000, 2, {812,750}},
+{ 609024, 2, {793,768}},
+{ 609026, 2, {893,682}},
+{ 609070, 2, {791,770}},
+{ 609108, 2, {789,772}},
+{ 609120, 2, {810,752}},
+{ 609150, 2, {786,775}},
+{ 609160, 2, {785,776}},
+{ 609168, 2, {784,777}},
+{ 609178, 2, {782,779}},
+{ 609180, 2, {781,780}},
+{ 609224, 2, {946,644}},
+{ 609235, 2, {1007,605}},
+{ 609280, 2, {896,680}},
+{ 609336, 2, {806,756}},
+{ 609390, 2, {915,666}},
+{ 609408, 2, {828,736}},
+{ 609444, 2, {836,729}},
+{ 609501, 2, {867,703}},
+{ 609525, 2, {903,675}},
+{ 609528, 2, {872,699}},
+{ 609552, 2, {816,747}},
+{ 609588, 2, {826,738}},
+{ 609600, 2, {800,762}},
+{ 609609, 2, {957,637}},
+{ 609615, 2, {855,713}},
+{ 609700, 2, {871,700}},
+{ 609756, 2, {833,732}},
+{ 609765, 2, {795,767}},
+{ 609840, 2, {792,770}},
+{ 609875, 2, {875,697}},
+{ 609936, 2, {786,776}},
+{ 609957, 2, {783,779}},
+{ 609960, 2, {782,780}},
+{ 609966, 2, {846,721}},
+{ 610000, 2, {976,625}},
+{ 610040, 2, {808,755}},
+{ 610056, 2, {888,687}},
+{ 610060, 2, {940,649}},
+{ 610080, 2, {820,744}},
+{ 610090, 2, {845,722}},
+{ 610092, 2, {807,756}},
+{ 610155, 2, {819,745}},
+{ 610176, 2, {896,681}},
+{ 610204, 2, {868,703}},
+{ 610212, 2, {844,723}},
+{ 610236, 2, {804,759}},
+{ 610245, 2, {955,639}},
+{ 610280, 2, {803,760}},
+{ 610332, 2, {843,724}},
+{ 610335, 2, {891,685}},
+{ 610389, 2, {999,611}},
+{ 610400, 2, {800,763}},
+{ 610416, 2, {942,648}},
+{ 610428, 2, {903,676}},
+{ 610470, 2, {798,765}},
+{ 610500, 2, {814,750}},
+{ 610560, 2, {795,768}},
+{ 610566, 2, {841,726}},
+{ 610584, 2, {824,741}},
+{ 610610, 2, {793,770}},
+{ 610632, 2, {792,771}},
+{ 610736, 2, {784,779}},
+{ 610740, 2, {783,780}},
+{ 610827, 2, {1003,609}},
+{ 610875, 2, {905,675}},
+{ 610880, 2, {830,736}},
+{ 610884, 2, {852,717}},
+{ 610896, 2, {858,712}},
+{ 611010, 2, {837,730}},
+{ 611065, 2, {1027,595}},
+{ 611072, 2, {868,704}},
+{ 611100, 2, {873,700}},
+{ 611116, 2, {817,748}},
+{ 611156, 2, {949,644}},
+{ 611163, 2, {801,763}},
+{ 611184, 2, {816,749}},
+{ 611220, 2, {835,732}},
+{ 611235, 2, {799,765}},
+{ 611240, 2, {826,740}},
+{ 611250, 2, {815,750}},
+{ 611280, 2, {849,720}},
+{ 611320, 2, {899,680}},
+{ 611325, 2, {825,741}},
+{ 611376, 2, {813,752}},
+{ 611436, 2, {812,753}},
+{ 611442, 2, {871,702}},
+{ 611460, 2, {790,774}},
+{ 611490, 2, {935,654}},
+{ 611505, 2, {963,635}},
+{ 611520, 2, {784,780}},
+{ 611523, 2, {783,781}},
+{ 611534, 2, {847,722}},
+{ 611544, 2, {921,664}},
+{ 611550, 2, {810,755}},
+{ 611568, 2, {822,744}},
+{ 611600, 2, {880,695}},
+{ 611610, 2, {870,703}},
+{ 611611, 2, {1001,611}},
+{ 611616, 2, {831,736}},
+{ 611632, 2, {889,688}},
+{ 611667, 2, {931,657}},
+{ 611685, 2, {985,621}},
+{ 611712, 2, {864,708}},
+{ 611754, 2, {806,759}},
+{ 611776, 2, {869,704}},
+{ 611784, 2, {879,696}},
+{ 611800, 2, {805,760}},
+{ 611820, 2, {927,660}},
+{ 611832, 2, {888,689}},
+{ 611847, 2, {837,731}},
+{ 611875, 2, {979,625}},
+{ 611940, 2, {868,705}},
+{ 611964, 2, {801,764}},
+{ 612000, 2, {800,765}},
+{ 612040, 2, {856,715}},
+{ 612048, 2, {933,656}},
+{ 612066, 2, {798,767}},
+{ 612105, 2, {949,645}},
+{ 612144, 2, {872,702}},
+{ 612157, 2, {961,637}},
+{ 612180, 2, {855,716}},
+{ 612228, 2, {939,652}},
+{ 612234, 2, {791,774}},
+{ 612255, 2, {833,735}},
+{ 612264, 2, {789,776}},
+{ 612276, 2, {788,777}},
+{ 612300, 2, {785,780}},
+{ 612304, 2, {784,781}},
+{ 612324, 2, {876,699}},
+{ 612390, 2, {822,745}},
+{ 612420, 2, {865,708}},
+{ 612444, 2, {951,644}},
+{ 612480, 2, {870,704}},
+{ 612535, 2, {1295,473}},
+{ 612540, 2, {820,747}},
+{ 612560, 2, {806,760}},
+{ 612598, 2, {893,686}},
+{ 612612, 2, {819,748}},
+{ 612645, 2, {869,705}},
+{ 612680, 2, {901,680}},
+{ 612684, 2, {837,732}},
+{ 612720, 2, {828,740}},
+{ 612750, 2, {817,750}},
+{ 612794, 2, {962,637}},
+{ 612801, 2, {959,639}},
+{ 612804, 2, {892,687}},
+{ 612850, 2, {850,721}},
+{ 612864, 2, {798,768}},
+{ 612880, 2, {815,752}},
+{ 612900, 2, {900,681}},
+{ 612927, 2, {987,621}},
+{ 612950, 2, {943,650}},
+{ 613008, 2, {792,774}},
+{ 613025, 2, {791,775}},
+{ 613032, 2, {861,712}},
+{ 613088, 2, {784,782}},
+{ 613104, 2, {848,723}},
+{ 613110, 2, {955,642}},
+{ 613125, 2, {981,625}},
+{ 613184, 2, {832,737}},
+{ 613200, 2, {840,730}},
+{ 613263, 2, {1007,609}},
+{ 613272, 2, {808,759}},
+{ 613320, 2, {807,760}},
+{ 613350, 2, {846,725}},
+{ 613410, 2, {805,762}},
+{ 613431, 2, {819,749}},
+{ 613440, 2, {852,720}},
+{ 613452, 2, {804,763}},
+{ 613470, 2, {845,726}},
+{ 613525, 2, {1067,575}},
+{ 613536, 2, {913,672}},
+{ 613548, 2, {828,741}},
+{ 613590, 2, {905,678}},
+{ 613600, 2, {800,767}},
+{ 613632, 2, {799,768}},
+{ 613640, 2, {920,667}},
+{ 613700, 2, {850,722}},
+{ 613704, 2, {843,728}},
+{ 613716, 2, {796,771}},
+{ 613740, 2, {795,772}},
+{ 613752, 2, {856,717}},
+{ 613760, 2, {896,685}},
+{ 613782, 2, {793,774}},
+{ 613795, 2, {923,665}},
+{ 613800, 2, {792,775}},
+{ 613816, 2, {791,776}},
+{ 613824, 2, {834,736}},
+{ 613836, 2, {867,708}},
+{ 613872, 2, {784,783}},
+{ 613880, 2, {824,745}},
+{ 613899, 2, {891,689}},
+{ 613921, 2, {833,737}},
+{ 614016, 2, {832,738}},
+{ 614040, 2, {840,731}},
+{ 614055, 2, {871,705}},
+{ 614061, 2, {1083,567}},
+{ 614075, 2, {847,725}},
+{ 614169, 2, {989,621}},
+{ 614180, 2, {820,749}},
+{ 614250, 2, {819,750}},
+{ 614292, 2, {852,721}},
+{ 614295, 2, {803,765}},
+{ 614304, 2, {864,711}},
+{ 614376, 2, {828,742}},
+{ 614385, 2, {999,615}},
+{ 614390, 2, {917,670}},
+{ 614400, 2, {800,768}},
+{ 614422, 2, {851,722}},
+{ 614448, 2, {816,753}},
+{ 614482, 2, {901,682}},
+{ 614484, 2, {909,676}},
+{ 614544, 2, {826,744}},
+{ 614560, 2, {835,736}},
+{ 614575, 2, {793,775}},
+{ 614628, 2, {813,756}},
+{ 614655, 2, {785,783}},
+{ 614676, 2, {849,724}},
+{ 614680, 2, {968,635}},
+{ 614718, 2, {923,666}},
+{ 614754, 2, {833,738}},
+{ 614760, 2, {872,705}},
+{ 614790, 2, {810,759}},
+{ 614800, 2, {848,725}},
+{ 614859, 2, {1273,483}},
+{ 614910, 2, {995,618}},
+{ 614916, 2, {899,684}},
+{ 614936, 2, {973,632}},
+{ 614940, 2, {831,740}},
+{ 614992, 2, {952,646}},
+{ 615015, 2, {865,711}},
+{ 615040, 2, {961,640}},
+{ 615043, 2, {1573,391}},
+{ 615060, 2, {804,765}},
+{ 615072, 2, {894,688}},
+{ 615090, 2, {870,707}},
+{ 615120, 2, {880,699}},
+{ 615125, 2, {875,703}},
+{ 615160, 2, {845,728}},
+{ 615168, 2, {801,768}},
+{ 615195, 2, {837,735}},
+{ 615228, 2, {921,668}},
+{ 615230, 2, {799,770}},
+{ 615252, 2, {869,708}},
+{ 615264, 2, {816,754}},
+{ 615276, 2, {844,729}},
+{ 615285, 2, {1017,605}},
+{ 615300, 2, {879,700}},
+{ 615328, 2, {938,656}},
+{ 615330, 2, {795,774}},
+{ 615342, 2, {897,686}},
+{ 615384, 2, {792,777}},
+{ 615420, 2, {789,780}},
+{ 615440, 2, {785,784}},
+{ 615505, 2, {1045,589}},
+{ 615528, 2, {824,747}},
+{ 615552, 2, {896,687}},
+{ 615600, 2, {810,760}},
+{ 615624, 2, {904,681}},
+{ 615648, 2, {848,726}},
+{ 615680, 2, {832,740}},
+{ 615696, 2, {808,762}},
+{ 615780, 2, {933,660}},
+{ 615825, 2, {805,765}},
+{ 615880, 2, {865,712}},
+{ 615888, 2, {819,752}},
+{ 615978, 2, {918,671}},
+{ 615984, 2, {939,656}},
+{ 615996, 2, {852,723}},
+{ 616000, 2, {800,770}},
+{ 616005, 2, {845,729}},
+{ 616018, 2, {817,754}},
+{ 616050, 2, {925,666}},
+{ 616077, 2, {889,693}},
+{ 616080, 2, {816,755}},
+{ 616140, 2, {815,756}},
+{ 616148, 2, {884,697}},
+{ 616161, 2, {793,777}},
+{ 616200, 2, {790,780}},
+{ 616224, 2, {786,784}},
+{ 616230, 2, {835,738}},
+{ 616248, 2, {951,648}},
+{ 616284, 2, {901,684}},
+{ 616308, 2, {812,759}},
+{ 616420, 2, {833,740}},
+{ 616455, 2, {855,721}},
+{ 616476, 2, {861,716}},
+{ 616504, 2, {808,763}},
+{ 616512, 2, {832,741}},
+{ 616548, 2, {807,764}},
+{ 616550, 2, {950,649}},
+{ 616572, 2, {891,692}},
+{ 616590, 2, {806,765}},
+{ 616605, 2, {1111,555}},
+{ 616616, 2, {847,728}},
+{ 616620, 2, {860,717}},
+{ 616635, 2, {965,639}},
+{ 616704, 2, {803,768}},
+{ 616714, 2, {899,686}},
+{ 616800, 2, {800,771}},
+{ 616860, 2, {828,745}},
+{ 616869, 2, {837,737}},
+{ 616896, 2, {816,756}},
+{ 616920, 2, {795,776}},
+{ 616968, 2, {792,779}},
+{ 616975, 2, {851,725}},
+{ 616980, 2, {791,780}},
+{ 617004, 2, {788,783}},
+{ 617010, 2, {786,785}},
+{ 617015, 2, {1037,595}},
+{ 617050, 2, {1025,602}},
+{ 617076, 2, {843,732}},
+{ 617100, 2, {825,748}},
+{ 617120, 2, {812,760}},
+{ 617136, 2, {897,688}},
+{ 617148, 2, {868,711}},
+{ 617176, 2, {824,749}},
+{ 617211, 2, {873,707}},
+{ 617253, 2, {833,741}},
+{ 617304, 2, {867,712}},
+{ 617320, 2, {920,671}},
+{ 617344, 2, {832,742}},
+{ 617400, 2, {840,735}},
+{ 617435, 2, {805,767}},
+{ 617460, 2, {820,753}},
+{ 617463, 2, {847,729}},
+{ 617472, 2, {804,768}},
+{ 617520, 2, {830,744}},
+{ 617526, 2, {819,754}},
+{ 617550, 2, {895,690}},
+{ 617580, 2, {846,730}},
+{ 617610, 2, {865,714}},
+{ 617625, 2, {915,675}},
+{ 617695, 2, {845,731}},
+{ 617700, 2, {852,725}},
+{ 617760, 2, {792,780}},
+{ 617799, 2, {949,651}},
+{ 617880, 2, {813,760}},
+{ 617890, 2, {910,679}},
+{ 617895, 2, {995,621}},
+{ 617916, 2, {884,699}},
+{ 617925, 2, {825,749}},
+{ 617952, 2, {942,656}},
+{ 618000, 2, {824,750}},
+{ 618030, 2, {810,763}},
+{ 618072, 2, {849,728}},
+{ 618084, 2, {873,708}},
+{ 618120, 2, {808,765}},
+{ 618125, 2, {989,625}},
+{ 618135, 2, {841,735}},
+{ 618144, 2, {822,752}},
+{ 618156, 2, {892,693}},
+{ 618171, 2, {867,713}},
+{ 618184, 2, {931,664}},
+{ 618192, 2, {848,729}},
+{ 618233, 2, {1147,539}},
+{ 618240, 2, {805,768}},
+{ 618254, 2, {1027,602}},
+{ 618264, 2, {831,744}},
+{ 618300, 2, {900,687}},
+{ 618310, 2, {803,770}},
+{ 618320, 2, {944,655}},
+{ 618332, 2, {1012,611}},
+{ 618345, 2, {819,755}},
+{ 618372, 2, {801,772}},
+{ 618426, 2, {799,774}},
+{ 618450, 2, {798,775}},
+{ 618492, 2, {796,777}},
+{ 618516, 2, {828,747}},
+{ 618540, 2, {793,780}},
+{ 618552, 2, {792,781}},
+{ 618570, 2, {790,783}},
+{ 618576, 2, {789,784}},
+{ 618625, 2, {875,707}},
+{ 618640, 2, {814,760}},
+{ 618723, 2, {1127,549}},
+{ 618765, 2, {1065,581}},
+{ 618772, 2, {902,686}},
+{ 618813, 2, {1107,559}},
+{ 618816, 2, {879,704}},
+{ 618849, 2, {893,693}},
+{ 618888, 2, {856,723}},
+{ 618912, 2, {921,672}},
+{ 618936, 2, {888,697}},
+{ 618975, 2, {917,675}},
+{ 618976, 2, {841,736}},
+{ 619008, 2, {806,768}},
+{ 619020, 2, {855,724}},
+{ 619040, 2, {848,730}},
+{ 619080, 2, {804,770}},
+{ 619146, 2, {954,649}},
+{ 619150, 2, {854,725}},
+{ 619157, 2, {847,731}},
+{ 619164, 2, {819,756}},
+{ 619200, 2, {800,774}},
+{ 619225, 2, {799,775}},
+{ 619236, 2, {927,668}},
+{ 619240, 2, {904,685}},
+{ 619245, 2, {891,695}},
+{ 619248, 2, {798,776}},
+{ 619332, 2, {876,707}},
+{ 619344, 2, {792,782}},
+{ 619353, 2, {791,783}},
+{ 619360, 2, {790,784}},
+{ 619380, 2, {837,740}},
+{ 619400, 2, {815,760}},
+{ 619440, 2, {870,712}},
+{ 619476, 2, {836,741}},
+{ 619488, 2, {864,717}},
+{ 619500, 2, {826,750}},
+{ 619512, 2, {933,664}},
+{ 619528, 2, {851,728}},
+{ 619530, 2, {965,642}},
+{ 619650, 2, {810,765}},
+{ 619740, 2, {939,660}},
+{ 619752, 2, {833,744}},
+{ 619760, 2, {976,635}},
+{ 619776, 2, {807,768}},
+{ 619840, 2, {832,745}},
+{ 619875, 2, {855,725}},
+{ 619884, 2, {804,771}},
+{ 619905, 2, {867,715}},
+{ 619920, 2, {820,756}},
+{ 619992, 2, {872,711}},
+{ 620000, 2, {800,775}},
+{ 620004, 2, {847,732}},
+{ 620052, 2, {951,652}},
+{ 620060, 2, {860,721}},
+{ 620100, 2, {795,780}},
+{ 620103, 2, {817,759}},
+{ 620136, 2, {792,783}},
+{ 620144, 2, {791,784}},
+{ 620160, 2, {816,760}},
+{ 620165, 2, {1015,611}},
+{ 620172, 2, {828,749}},
+{ 620235, 2, {895,693}},
+{ 620310, 2, {870,713}},
+{ 620340, 2, {844,735}},
+{ 620379, 2, {851,729}},
+{ 620400, 2, {825,752}},
+{ 620425, 2, {1079,575}},
+{ 620448, 2, {843,736}},
+{ 620466, 2, {869,714}},
+{ 620472, 2, {824,753}},
+{ 620496, 2, {834,744}},
+{ 620508, 2, {996,623}},
+{ 620550, 2, {985,630}},
+{ 620568, 2, {884,702}},
+{ 620600, 2, {856,725}},
+{ 620610, 2, {822,755}},
+{ 620620, 2, {806,770}},
+{ 620675, 2, {925,671}},
+{ 620712, 2, {888,699}},
+{ 620724, 2, {897,692}},
+{ 620736, 2, {848,732}},
+{ 620739, 2, {1169,531}},
+{ 620772, 2, {867,716}},
+{ 620775, 2, {801,775}},
+{ 620806, 2, {961,646}},
+{ 620823, 2, {799,777}},
+{ 620895, 2, {795,781}},
+{ 620919, 2, {793,783}},
+{ 620920, 2, {817,760}},
+{ 620977, 2, {931,667}},
+{ 621000, 2, {828,750}},
+{ 621027, 2, {891,697}},
+{ 621030, 2, {815,762}},
+{ 621048, 2, {904,687}},
+{ 621054, 2, {837,742}},
+{ 621075, 2, {845,735}},
+{ 621108, 2, {852,729}},
+{ 621132, 2, {813,764}},
+{ 621152, 2, {826,752}},
+{ 621180, 2, {812,765}},
+{ 621240, 2, {835,744}},
+{ 621264, 2, {903,688}},
+{ 621270, 2, {810,767}},
+{ 621285, 2, {915,679}},
+{ 621330, 2, {834,745}},
+{ 621350, 2, {850,731}},
+{ 621376, 2, {1022,608}},
+{ 621425, 2, {1325,469}},
+{ 621452, 2, {884,703}},
+{ 621456, 2, {856,726}},
+{ 621468, 2, {849,732}},
+{ 621478, 2, {902,689}},
+{ 621504, 2, {832,747}},
+{ 621522, 2, {803,774}},
+{ 621528, 2, {893,696}},
+{ 621575, 2, {1081,575}},
+{ 621576, 2, {801,776}},
+{ 621588, 2, {831,748}},
+{ 621600, 2, {800,777}},
+{ 621621, 2, {819,759}},
+{ 621642, 2, {798,779}},
+{ 621670, 2, {830,749}},
+{ 621712, 2, {793,784}},
+{ 621720, 2, {792,785}},
+{ 621732, 2, {789,788}},
+{ 621747, 2, {973,639}},
+{ 621756, 2, {909,684}},
+{ 621760, 2, {928,670}},
+{ 621780, 2, {860,723}},
+{ 621792, 2, {816,762}},
+{ 621810, 2, {846,735}},
+{ 621860, 2, {1003,620}},
+{ 621888, 2, {948,656}},
+{ 621894, 2, {871,714}},
+{ 621920, 2, {845,736}},
+{ 621960, 2, {852,730}},
+{ 622050, 2, {825,754}},
+{ 622080, 2, {810,768}},
+{ 622120, 2, {824,755}},
+{ 622125, 2, {875,711}},
+{ 622167, 2, {903,689}},
+{ 622200, 2, {850,732}},
+{ 622224, 2, {894,696}},
+{ 622251, 2, {833,747}},
+{ 622300, 2, {889,700}},
+{ 622325, 2, {803,775}},
+{ 622332, 2, {879,708}},
+{ 622336, 2, {832,748}},
+{ 622356, 2, {868,717}},
+{ 622380, 2, {820,759}},
+{ 622440, 2, {798,780}},
+{ 622485, 2, {795,783}},
+{ 622512, 2, {792,786}},
+{ 622544, 2, {949,656}},
+{ 622545, 2, {847,735}},
+{ 622566, 2, {854,729}},
+{ 622596, 2, {921,676}},
+{ 622608, 2, {816,763}},
+{ 622644, 2, {979,636}},
+{ 622656, 2, {828,752}},
+{ 622665, 2, {909,685}},
+{ 622688, 2, {928,671}},
+{ 622710, 2, {814,765}},
+{ 622720, 2, {896,695}},
+{ 622728, 2, {837,744}},
+{ 622800, 2, {865,720}},
+{ 622804, 2, {812,767}},
+{ 622836, 2, {876,711}},
+{ 622863, 2, {1003,621}},
+{ 622935, 2, {981,635}},
+{ 622968, 2, {808,771}},
+{ 623000, 2, {875,712}},
+{ 623004, 2, {807,772}},
+{ 623007, 2, {899,693}},
+{ 623025, 2, {923,675}},
+{ 623040, 2, {880,708}},
+{ 623070, 2, {805,774}},
+{ 623100, 2, {804,775}},
+{ 623133, 2, {1099,567}},
+{ 623162, 2, {874,713}},
+{ 623168, 2, {832,749}},
+{ 623181, 2, {841,741}},
+{ 623200, 2, {800,779}},
+{ 623220, 2, {799,780}},
+{ 623238, 2, {798,781}},
+{ 623244, 2, {933,668}},
+{ 623268, 2, {796,783}},
+{ 623280, 2, {795,784}},
+{ 623295, 2, {855,729}},
+{ 623328, 2, {906,688}},
+{ 623364, 2, {861,724}},
+{ 623376, 2, {888,702}},
+{ 623392, 2, {847,736}},
+{ 623441, 2, {1183,527}},
+{ 623475, 2, {815,765}},
+{ 623480, 2, {872,715}},
+{ 623484, 2, {828,753}},
+{ 623496, 2, {939,664}},
+{ 623502, 2, {846,737}},
+{ 623508, 2, {892,699}},
+{ 623560, 2, {917,680}},
+{ 623565, 2, {837,745}},
+{ 623574, 2, {882,707}},
+{ 623610, 2, {845,738}},
+{ 623616, 2, {812,768}},
+{ 623623, 2, {979,637}},
+{ 623645, 2, {935,667}},
+{ 623700, 2, {810,770}},
+{ 623745, 2, {835,747}},
+{ 623760, 2, {904,690}},
+{ 623770, 2, {931,670}},
+{ 623796, 2, {908,687}},
+{ 623808, 2, {864,722}},
+{ 623820, 2, {843,740}},
+{ 623856, 2, {951,656}},
+{ 623931, 2, {803,777}},
+{ 623964, 2, {957,652}},
+{ 623968, 2, {992,629}},
+{ 624000, 2, {800,780}},
+{ 624024, 2, {856,729}},
+{ 624036, 2, {798,782}},
+{ 624105, 2, {1005,621}},
+{ 624160, 2, {830,752}},
+{ 624195, 2, {873,715}},
+{ 624225, 2, {861,725}},
+{ 624240, 2, {816,765}},
+{ 624312, 2, {828,754}},
+{ 624338, 2, {814,767}},
+{ 624340, 2, {1007,620}},
+{ 624375, 2, {925,675}},
+{ 624384, 2, {813,768}},
+{ 624393, 2, {901,693}},
+{ 624442, 2, {949,658}},
+{ 624450, 2, {905,690}},
+{ 624456, 2, {826,756}},
+{ 624492, 2, {836,747}},
+{ 624512, 2, {896,697}},
+{ 624570, 2, {955,654}},
+{ 624575, 2, {1075,581}},
+{ 624624, 2, {858,728}},
+{ 624672, 2, {864,723}},
+{ 624680, 2, {805,776}},
+{ 624701, 2, {931,671}},
+{ 624708, 2, {804,777}},
+{ 624720, 2, {822,760}},
+{ 624750, 2, {833,750}},
+{ 624780, 2, {801,780}},
+{ 624800, 2, {800,781}},
+{ 624864, 2, {849,736}},
+{ 624876, 2, {903,692}},
+{ 624888, 2, {792,789}},
+{ 624890, 2, {791,790}},
+{ 624897, 2, {819,763}},
+{ 624910, 2, {874,715}},
+{ 624912, 2, {831,752}},
+{ 624976, 2, {848,737}},
+{ 625005, 2, {817,765}},
+{ 625053, 2, {1023,611}},
+{ 625068, 2, {873,716}},
+{ 625086, 2, {847,738}},
+{ 625100, 2, {893,700}},
+{ 625140, 2, {828,755}},
+{ 625152, 2, {814,768}},
+{ 625209, 2, {897,697}},
+{ 625224, 2, {872,717}},
+{ 625347, 2, {1007,621}},
+{ 625392, 2, {808,774}},
+{ 625404, 2, {844,741}},
+{ 625416, 2, {824,759}},
+{ 625443, 2, {1027,609}},
+{ 625482, 2, {858,729}},
+{ 625488, 2, {942,664}},
+{ 625600, 2, {800,782}},
+{ 625617, 2, {799,783}},
+{ 625625, 2, {875,715}},
+{ 625632, 2, {798,784}},
+{ 625660, 2, {820,763}},
+{ 625680, 2, {792,790}},
+{ 625695, 2, {885,707}},
+{ 625716, 2, {819,764}},
+{ 625800, 2, {840,745}},
+{ 625807, 2, {1183,529}},
+{ 625824, 2, {848,738}},
+{ 625848, 2, {879,712}},
+{ 625856, 2, {889,704}},
+{ 625860, 2, {855,732}},
+{ 625872, 2, {816,767}},
+{ 625920, 2, {815,768}},
+{ 625974, 2, {867,722}},
+{ 625975, 2, {1225,511}},
+{ 626052, 2, {812,771}},
+{ 626076, 2, {837,748}},
+{ 626115, 2, {1005,623}},
+{ 626175, 2, {825,759}},
+{ 626200, 2, {808,775}},
+{ 626220, 2, {852,735}},
+{ 626232, 2, {807,776}},
+{ 626250, 2, {835,750}},
+{ 626275, 2, {1025,611}},
+{ 626280, 2, {921,680}},
+{ 626304, 2, {896,699}},
+{ 626318, 2, {913,686}},
+{ 626336, 2, {851,736}},
+{ 626340, 2, {803,780}},
+{ 626373, 2, {891,703}},
+{ 626400, 2, {800,783}},
+{ 626409, 2, {1141,549}},
+{ 626416, 2, {799,784}},
+{ 626430, 2, {798,785}},
+{ 626450, 2, {850,737}},
+{ 626460, 2, {795,788}},
+{ 626472, 2, {792,791}},
+{ 626496, 2, {832,753}},
+{ 626544, 2, {912,687}},
+{ 626580, 2, {885,708}},
+{ 626652, 2, {927,676}},
+{ 626688, 2, {816,768}},
+{ 626725, 2, {1075,583}},
+{ 626745, 2, {889,705}},
+{ 626780, 2, {814,770}},
+{ 626808, 2, {861,728}},
+{ 626850, 2, {995,630}},
+{ 626875, 2, {1003,625}},
+{ 626913, 2, {837,749}},
+{ 626976, 2, {933,672}},
+{ 627000, 2, {825,760}},
+{ 627072, 2, {852,736}},
+{ 627095, 2, {805,779}},
+{ 627096, 2, {901,696}},
+{ 627130, 2, {1054,595}},
+{ 627150, 2, {925,678}},
+{ 627165, 2, {905,693}},
+{ 627168, 2, {834,752}},
+{ 627192, 2, {843,744}},
+{ 627198, 2, {858,731}},
+{ 627200, 2, {800,784}},
+{ 627252, 2, {939,668}},
+{ 627270, 2, {870,721}},
+{ 627300, 2, {820,765}},
+{ 627328, 2, {832,754}},
+{ 627396, 2, {924,679}},
+{ 627435, 2, {955,657}},
+{ 627440, 2, {880,713}},
+{ 627456, 2, {817,768}},
+{ 627480, 2, {830,756}},
+{ 627564, 2, {868,723}},
+{ 627627, 2, {847,741}},
+{ 627636, 2, {813,772}},
+{ 627660, 2, {951,660}},
+{ 627669, 2, {861,729}},
+{ 627690, 2, {854,735}},
+{ 627705, 2, {1073,585}},
+{ 627708, 2, {867,724}},
+{ 627732, 2, {846,742}},
+{ 627750, 2, {810,775}},
+{ 627760, 2, {826,760}},
+{ 627792, 2, {902,696}},
+{ 627816, 2, {808,777}},
+{ 627874, 2, {806,779}},
+{ 627876, 2, {963,652}},
+{ 627888, 2, {824,762}},
+{ 627900, 2, {805,780}},
+{ 627920, 2, {835,752}},
+{ 627924, 2, {804,781}},
+{ 627984, 2, {801,784}},
+{ 627990, 2, {865,726}},
+{ 628000, 2, {800,785}},
+{ 628044, 2, {796,789}},
+{ 628056, 2, {793,792}},
+{ 628075, 2, {925,679}},
+{ 628082, 2, {833,754}},
+{ 628092, 2, {876,717}},
+{ 628144, 2, {913,688}},
+{ 628155, 2, {891,705}},
+{ 628160, 2, {832,755}},
+{ 628173, 2, {819,767}},
+{ 628236, 2, {831,756}},
+{ 628260, 2, {849,740}},
+{ 628280, 2, {904,695}},
+{ 628290, 2, {895,702}},
+{ 628320, 2, {816,770}},
+{ 628368, 2, {848,741}},
+{ 628452, 2, {828,759}},
+{ 628524, 2, {884,711}},
+{ 628544, 2, {854,736}},
+{ 628560, 2, {810,776}},
+{ 628680, 2, {806,780}},
+{ 628705, 2, {805,781}},
+{ 628712, 2, {824,763}},
+{ 628749, 2, {803,783}},
+{ 628785, 2, {801,785}},
+{ 628800, 2, {800,786}},
+{ 628815, 2, {1133,555}},
+{ 628845, 2, {795,791}},
+{ 628860, 2, {892,705}},
+{ 628866, 2, {882,713}},
+{ 628929, 2, {1043,603}},
+{ 628940, 2, {820,767}},
+{ 628992, 2, {819,768}},
+{ 629028, 2, {909,692}},
+{ 629068, 2, {841,748}},
+{ 629090, 2, {817,770}},
+{ 629100, 2, {900,699}},
+{ 629104, 2, {959,656}},
+{ 629136, 2, {816,771}},
+{ 629160, 2, {840,749}},
+{ 629200, 2, {880,715}},
+{ 629230, 2, {890,707}},
+{ 629244, 2, {908,693}},
+{ 629364, 2, {879,716}},
+{ 629370, 2, {810,777}},
+{ 629375, 2, {1007,625}},
+{ 629376, 2, {894,704}},
+{ 629391, 2, {861,731}},
+{ 629398, 2, {854,737}},
+{ 629415, 2, {985,639}},
+{ 629424, 2, {837,752}},
+{ 629433, 2, {873,721}},
+{ 629442, 2, {867,726}},
+{ 629460, 2, {807,780}},
+{ 629475, 2, {825,763}},
+{ 629508, 2, {836,753}},
+{ 629532, 2, {804,783}},
+{ 629552, 2, {803,784}},
+{ 629629, 2, {1001,629}},
+{ 629640, 2, {795,792}},
+{ 629670, 2, {834,755}},
+{ 629694, 2, {897,702}},
+{ 629720, 2, {865,728}},
+{ 629748, 2, {833,756}},
+{ 629760, 2, {820,768}},
+{ 629825, 2, {1475,427}},
+{ 629850, 2, {850,741}},
+{ 629856, 2, {864,729}},
+{ 629888, 2, {896,703}},
+{ 629920, 2, {992,635}},
+{ 629937, 2, {891,707}},
+{ 629964, 2, {921,684}},
+{ 629993, 2, {989,637}},
+{ 630000, 2, {840,750}},
+{ 630025, 2, {869,725}},
+{ 630063, 2, {959,657}},
+{ 630120, 2, {885,712}},
+{ 630135, 2, {855,737}},
+{ 630168, 2, {847,744}},
+{ 630200, 2, {920,685}},
+{ 630252, 2, {854,738}},
+{ 630270, 2, {846,745}},
+{ 630300, 2, {825,764}},
+{ 630315, 2, {805,783}},
+{ 630336, 2, {804,784}},
+{ 630344, 2, {836,754}},
+{ 630360, 2, {824,765}},
+{ 630435, 2, {795,793}},
+{ 630456, 2, {872,723}},
+{ 630468, 2, {844,747}},
+{ 630476, 2, {979,644}},
+{ 630552, 2, {1032,611}},
+{ 630564, 2, {843,748}},
+{ 630576, 2, {906,696}},
+{ 630585, 2, {865,729}},
+{ 630591, 2, {851,741}},
+{ 630700, 2, {850,742}},
+{ 630708, 2, {933,676}},
+{ 630720, 2, {864,730}},
+{ 630740, 2, {940,671}},
+{ 630750, 2, {841,750}},
+{ 630765, 2, {963,655}},
+{ 630810, 2, {815,774}},
+{ 630828, 2, {891,708}},
+{ 630850, 2, {814,775}},
+{ 630875, 2, {875,721}},
+{ 630888, 2, {813,776}},
+{ 630896, 2, {917,688}},
+{ 630924, 2, {812,777}},
+{ 630960, 2, {880,717}},
+{ 630990, 2, {810,779}},
+{ 631008, 2, {939,672}},
+{ 631071, 2, {1113,567}},
+{ 631085, 2, {949,665}},
+{ 631098, 2, {806,783}},
+{ 631110, 2, {965,654}},
+{ 631120, 2, {805,784}},
+{ 631140, 2, {804,785}},
+{ 631176, 2, {867,728}},
+{ 631188, 2, {801,788}},
+{ 631190, 2, {889,710}},
+{ 631200, 2, {800,789}},
+{ 631215, 2, {845,747}},
+{ 631260, 2, {835,756}},
+{ 631296, 2, {822,768}},
+{ 631332, 2, {852,741}},
+{ 631368, 2, {888,711}},
+{ 631389, 2, {1007,627}},
+{ 631455, 2, {979,645}},
+{ 631464, 2, {951,664}},
+{ 631465, 2, {1445,437}},
+{ 631470, 2, {930,679}},
+{ 631475, 2, {871,725}},
+{ 631488, 2, {832,759}},
+{ 631533, 2, {1037,609}},
+{ 631560, 2, {831,760}},
+{ 631584, 2, {816,774}},
+{ 631596, 2, {876,721}},
+{ 631605, 2, {1027,615}},
+{ 631656, 2, {849,744}},
+{ 631728, 2, {856,738}},
+{ 631750, 2, {875,722}},
+{ 631755, 2, {909,695}},
+{ 631760, 2, {848,745}},
+{ 631764, 2, {828,763}},
+{ 631788, 2, {969,652}},
+{ 631800, 2, {810,780}},
+{ 631890, 2, {826,765}},
+{ 631896, 2, {904,699}},
+{ 631904, 2, {806,784}},
+{ 631935, 2, {837,755}},
+{ 631960, 2, {854,740}},
+{ 632000, 2, {800,790}},
+{ 632016, 2, {798,792}},
+{ 632034, 2, {949,666}},
+{ 632043, 2, {867,729}},
+{ 632052, 2, {873,724}},
+{ 632079, 2, {889,711}},
+{ 632100, 2, {860,735}},
+{ 632200, 2, {872,725}},
+{ 632220, 2, {820,771}},
+{ 632247, 2, {833,759}},
+{ 632268, 2, {819,772}},
+{ 632320, 2, {832,760}},
+{ 632370, 2, {985,642}},
+{ 632400, 2, {816,775}},
+{ 632440, 2, {815,776}},
+{ 632448, 2, {864,732}},
+{ 632480, 2, {944,670}},
+{ 632500, 2, {1012,625}},
+{ 632502, 2, {901,702}},
+{ 632520, 2, {840,753}},
+{ 632548, 2, {812,779}},
+{ 632555, 2, {1085,583}},
+{ 632610, 2, {810,781}},
+{ 632632, 2, {869,728}},
+{ 632664, 2, {808,783}},
+{ 632688, 2, {807,784}},
+{ 632700, 2, {855,740}},
+{ 632709, 2, {847,747}},
+{ 632730, 2, {805,786}},
+{ 632772, 2, {837,756}},
+{ 632775, 2, {825,767}},
+{ 632800, 2, {800,791}},
+{ 632808, 2, {799,792}},
+{ 632814, 2, {798,793}},
+{ 632820, 2, {796,795}},
+{ 632880, 2, {879,720}},
+{ 632896, 2, {899,704}},
+{ 632925, 2, {873,725}},
+{ 632960, 2, {860,736}},
+{ 632968, 2, {889,712}},
+{ 633024, 2, {942,672}},
+{ 633072, 2, {872,726}},
+{ 633080, 2, {833,760}},
+{ 633144, 2, {851,744}},
+{ 633150, 2, {938,675}},
+{ 633175, 2, {817,775}},
+{ 633178, 2, {923,686}},
+{ 633180, 2, {865,732}},
+{ 633213, 2, {1197,529}},
+{ 633290, 2, {830,763}},
+{ 633325, 2, {1175,539}},
+{ 633348, 2, {876,723}},
+{ 633360, 2, {812,780}},
+{ 633420, 2, {810,782}},
+{ 633424, 2, {944,671}},
+{ 633450, 2, {1025,618}},
+{ 633456, 2, {848,747}},
+{ 633501, 2, {869,729}},
+{ 633591, 2, {801,791}},
+{ 633600, 2, {800,792}},
+{ 633648, 2, {921,688}},
+{ 633654, 2, {846,749}},
+{ 633660, 2, {885,716}},
+{ 633696, 2, {861,736}},
+{ 633750, 2, {845,750}},
+{ 633820, 2, {860,737}},
+{ 633828, 2, {884,717}},
+{ 633840, 2, {834,760}},
+{ 633880, 2, {920,689}},
+{ 633919, 2, {1573,403}},
+{ 633930, 2, {935,678}},
+{ 633936, 2, {843,752}},
+{ 633984, 2, {832,762}},
+{ 634005, 2, {965,657}},
+{ 634032, 2, {816,777}},
+{ 634040, 2, {968,655}},
+{ 634068, 2, {927,684}},
+{ 634088, 2, {871,728}},
+{ 634106, 2, {814,779}},
+{ 634140, 2, {813,780}},
+{ 634144, 2, {1043,608}},
+{ 634172, 2, {812,781}},
+{ 634200, 2, {840,755}},
+{ 634207, 2, {1849,343}},
+{ 634212, 2, {892,711}},
+{ 634270, 2, {910,697}},
+{ 634280, 2, {808,785}},
+{ 634296, 2, {856,741}},
+{ 634356, 2, {804,789}},
+{ 634365, 2, {999,635}},
+{ 634368, 2, {826,768}},
+{ 634392, 2, {801,792}},
+{ 634400, 2, {800,793}},
+{ 634440, 2, {933,680}},
+{ 634452, 2, {996,637}},
+{ 634508, 2, {868,731}},
+{ 634524, 2, {836,759}},
+{ 634550, 2, {925,686}},
+{ 634557, 2, {861,737}},
+{ 634600, 2, {835,760}},
+{ 634608, 2, {904,702}},
+{ 634644, 2, {867,732}},
+{ 634692, 2, {908,699}},
+{ 634725, 2, {819,775}},
+{ 634740, 2, {852,745}},
+{ 634764, 2, {939,676}},
+{ 634788, 2, {916,693}},
+{ 634809, 2, {817,777}},
+{ 634816, 2, {832,763}},
+{ 634884, 2, {831,764}},
+{ 634920, 2, {814,780}},
+{ 634933, 2, {2197,289}},
+{ 634942, 2, {931,682}},
+{ 634959, 2, {871,729}},
+{ 634995, 2, {927,685}},
+{ 635000, 2, {1000,635}},
+{ 635008, 2, {902,704}},
+{ 635024, 2, {923,688}},
+{ 635040, 2, {810,784}},
+{ 635052, 2, {849,748}},
+{ 635076, 2, {828,767}},
+{ 635088, 2, {808,786}},
+{ 635152, 2, {848,749}},
+{ 635160, 2, {804,790}},
+{ 635268, 2, {951,668}},
+{ 635304, 2, {824,771}},
+{ 635310, 2, {905,702}},
+{ 635376, 2, {854,744}},
+{ 635440, 2, {845,752}},
+{ 635448, 2, {913,696}},
+{ 635481, 2, {917,693}},
+{ 635532, 2, {844,753}},
+{ 635544, 2, {819,776}},
+{ 635580, 2, {963,660}},
+{ 635607, 2, {1121,567}},
+{ 635625, 2, {1017,625}},
+{ 635664, 2, {816,779}},
+{ 635680, 2, {928,685}},
+{ 635688, 2, {872,729}},
+{ 635700, 2, {815,780}},
+{ 635712, 2, {903,704}},
+{ 635778, 2, {858,741}},
+{ 635796, 2, {812,783}},
+{ 635805, 2, {995,639}},
+{ 635850, 2, {810,785}},
+{ 635904, 2, {828,768}},
+{ 635916, 2, {807,788}},
+{ 635922, 2, {882,721}},
+{ 635964, 2, {804,791}},
+{ 635970, 2, {870,731}},
+{ 635976, 2, {803,792}},
+{ 636000, 2, {800,795}},
+{ 636030, 2, {955,666}},
+{ 636108, 2, {869,732}},
+{ 636120, 2, {837,760}},
+{ 636160, 2, {896,710}},
+{ 636174, 2, {891,714}},
+{ 636192, 2, {846,752}},
+{ 636195, 2, {1095,581}},
+{ 636240, 2, {880,723}},
+{ 636270, 2, {835,762}},
+{ 636272, 2, {874,728}},
+{ 636300, 2, {900,707}},
+{ 636345, 2, {895,711}},
+{ 636396, 2, {879,724}},
+{ 636405, 2, {957,665}},
+{ 636444, 2, {852,747}},
+{ 636480, 2, {816,780}},
+{ 636525, 2, {943,675}},
+{ 636528, 2, {894,712}},
+{ 636640, 2, {865,736}},
+{ 636650, 2, {850,749}},
+{ 636696, 2, {888,717}},
+{ 636776, 2, {959,664}},
+{ 636900, 2, {825,772}},
+{ 636916, 2, {989,644}},
+{ 636944, 2, {847,752}},
+{ 636975, 2, {855,745}},
+{ 637000, 2, {875,728}},
+{ 637050, 2, {822,775}},
+{ 637056, 2, {896,711}},
+{ 637065, 2, {891,715}},
+{ 637140, 2, {820,777}},
+{ 637143, 2, {961,663}},
+{ 637146, 2, {874,729}},
+{ 637200, 2, {885,720}},
+{ 637245, 2, {833,765}},
+{ 637260, 2, {817,780}},
+{ 637296, 2, {816,781}},
+{ 637308, 2, {843,756}},
+{ 637320, 2, {904,705}},
+{ 637325, 2, {925,689}},
+{ 637329, 2, {979,651}},
+{ 637332, 2, {921,692}},
+{ 637362, 2, {814,783}},
+{ 637371, 2, {1057,603}},
+{ 637392, 2, {813,784}},
+{ 637440, 2, {830,768}},
+{ 637450, 2, {950,671}},
+{ 637468, 2, {943,676}},
+{ 637488, 2, {912,699}},
+{ 637512, 2, {808,789}},
+{ 637560, 2, {805,792}},
+{ 637596, 2, {801,796}},
+{ 637602, 2, {799,798}},
+{ 637632, 2, {864,738}},
+{ 637720, 2, {856,745}},
+{ 637776, 2, {824,774}},
+{ 637824, 2, {906,704}},
+{ 637840, 2, {938,680}},
+{ 637872, 2, {822,776}},
+{ 637875, 2, {875,729}},
+{ 637925, 2, {1343,475}},
+{ 637956, 2, {891,716}},
+{ 637980, 2, {868,735}},
+{ 638000, 2, {880,725}},
+{ 638001, 2, {819,779}},
+{ 638085, 2, {885,721}},
+{ 638112, 2, {816,782}},
+{ 638120, 2, {860,742}},
+{ 638144, 2, {832,767}},
+{ 638145, 2, {815,783}},
+{ 638148, 2, {852,749}},
+{ 638172, 2, {933,684}},
+{ 638176, 2, {814,784}},
+{ 638208, 2, {831,768}},
+{ 638248, 2, {884,722}},
+{ 638250, 2, {851,750}},
+{ 638260, 2, {940,679}},
+{ 638288, 2, {973,656}},
+{ 638319, 2, {841,759}},
+{ 638352, 2, {806,792}},
+{ 638365, 2, {805,793}},
+{ 638370, 2, {865,738}},
+{ 638385, 2, {803,795}},
+{ 638388, 2, {828,771}},
+{ 638400, 2, {800,798}},
+{ 638435, 2, {1015,629}},
+{ 638448, 2, {849,752}},
+{ 638495, 2, {893,715}},
+{ 638520, 2, {939,680}},
+{ 638544, 2, {848,753}},
+{ 638550, 2, {825,774}},
+{ 638575, 2, {1025,623}},
+{ 638600, 2, {824,775}},
+{ 638604, 2, {876,729}},
+{ 638631, 2, {837,763}},
+{ 638638, 2, {847,754}},
+{ 638664, 2, {897,712}},
+{ 638715, 2, {869,735}},
+{ 638730, 2, {846,755}},
+{ 638775, 2, {835,765}},
+{ 638790, 2, {995,642}},
+{ 638820, 2, {819,780}},
+{ 638825, 2, {1111,575}},
+{ 638848, 2, {868,736}},
+{ 638880, 2, {880,726}},
+{ 638894, 2, {817,782}},
+{ 638911, 2, {833,767}},
+{ 638928, 2, {816,783}},
+{ 638960, 2, {815,784}},
+{ 639009, 2, {1029,621}},
+{ 639030, 2, {895,714}},
+{ 639036, 2, {873,732}},
+{ 639065, 2, {961,665}},
+{ 639072, 2, {951,672}},
+{ 639128, 2, {808,791}},
+{ 639132, 2, {884,723}},
+{ 639144, 2, {807,792}},
+{ 639160, 2, {841,760}},
+{ 639180, 2, {804,795}},
+{ 639200, 2, {800,799}},
+{ 639210, 2, {858,745}},
+{ 639261, 2, {973,657}},
+{ 639276, 2, {957,668}},
+{ 639280, 2, {976,655}},
+{ 639324, 2, {826,774}},
+{ 639331, 2, {1463,437}},
+{ 639360, 2, {864,740}},
+{ 639400, 2, {920,695}},
+{ 639432, 2, {856,747}},
+{ 639468, 2, {837,764}},
+{ 639540, 2, {836,765}},
+{ 639561, 2, {897,713}},
+{ 639564, 2, {892,717}},
+{ 639584, 2, {869,736}},
+{ 639625, 2, {875,731}},
+{ 639639, 2, {819,781}},
+{ 639711, 2, {817,783}},
+{ 639716, 2, {868,737}},
+{ 639730, 2, {910,703}},
+{ 639840, 2, {860,744}},
+{ 639900, 2, {810,790}},
+{ 639912, 2, {879,728}},
+{ 640080, 2, {840,762}},
+{ 640090, 2, {1058,605}},
+{ 640134, 2, {954,671}},
+{ 640140, 2, {908,705}},
+{ 640150, 2, {826,775}},
+{ 640185, 2, {871,735}},
+{ 640200, 2, {825,776}},
+{ 640211, 2, {1331,481}},
+{ 640224, 2, {864,741}},
+{ 640240, 2, {848,755}},
+{ 640248, 2, {824,777}},
+{ 640284, 2, {916,699}},
+{ 640320, 2, {870,736}},
+{ 640332, 2, {847,756}},
+{ 640395, 2, {855,749}},
+{ 640420, 2, {820,781}},
+{ 640458, 2, {819,782}},
+{ 640500, 2, {854,750}},
+{ 640512, 2, {834,768}},
+{ 640528, 2, {817,784}},
+{ 640560, 2, {816,785}},
+{ 640563, 2, {987,649}},
+{ 640575, 2, {949,675}},
+{ 640584, 2, {861,744}},
+{ 640590, 2, {815,786}},
+{ 640596, 2, {844,759}},
+{ 640640, 2, {832,770}},
+{ 640644, 2, {813,788}},
+{ 640668, 2, {812,789}},
+{ 640680, 2, {843,760}},
+{ 640704, 2, {852,752}},
+{ 640710, 2, {810,791}},
+{ 640740, 2, {885,724}},
+{ 640775, 2, {1349,475}},
+{ 640794, 2, {803,798}},
+{ 640800, 2, {801,800}},
+{ 640871, 2, {1189,539}},
+{ 640900, 2, {850,754}},
+{ 640920, 2, {840,763}},
+{ 641016, 2, {921,696}},
+{ 641025, 2, {825,777}},
+{ 641056, 2, {871,736}},
+{ 641088, 2, {848,756}},
+{ 641190, 2, {870,737}},
+{ 641212, 2, {836,767}},
+{ 641280, 2, {835,768}},
+{ 641322, 2, {869,738}},
+{ 641376, 2, {816,786}},
+{ 641410, 2, {833,770}},
+{ 641424, 2, {966,664}},
+{ 641459, 2, {931,689}},
+{ 641472, 2, {832,771}},
+{ 641484, 2, {927,692}},
+{ 641520, 2, {810,792}},
+{ 641532, 2, {831,772}},
+{ 641556, 2, {852,753}},
+{ 641568, 2, {978,656}},
+{ 641580, 2, {867,740}},
+{ 641654, 2, {851,754}},
+{ 641690, 2, {890,721}},
+{ 641700, 2, {828,775}},
+{ 641781, 2, {1169,549}},
+{ 641844, 2, {849,756}},
+{ 641875, 2, {1027,625}},
+{ 641886, 2, {899,714}},
+{ 641900, 2, {917,700}},
+{ 641904, 2, {933,688}},
+{ 641979, 2, {837,767}},
+{ 642000, 2, {856,750}},
+{ 642005, 2, {1079,595}},
+{ 642024, 2, {888,723}},
+{ 642048, 2, {836,768}},
+{ 642060, 2, {820,783}},
+{ 642096, 2, {819,784}},
+{ 642135, 2, {1157,555}},
+{ 642200, 2, {845,760}},
+{ 642208, 2, {854,752}},
+{ 642252, 2, {897,716}},
+{ 642276, 2, {939,684}},
+{ 642330, 2, {810,793}},
+{ 642360, 2, {808,795}},
+{ 642372, 2, {807,796}},
+{ 642390, 2, {805,798}},
+{ 642400, 2, {803,800}},
+{ 642411, 2, {891,721}},
+{ 642420, 2, {830,774}},
+{ 642432, 2, {896,717}},
+{ 642466, 2, {1007,638}},
+{ 642488, 2, {1043,616}},
+{ 642555, 2, {981,655}},
+{ 642600, 2, {840,765}},
+{ 642656, 2, {1057,608}},
+{ 642675, 2, {825,779}},
+{ 642690, 2, {965,666}},
+{ 642744, 2, {904,711}},
+{ 642752, 2, {913,704}},
+{ 642785, 2, {899,715}},
+{ 642798, 2, {871,738}},
+{ 642816, 2, {837,768}},
+{ 642850, 2, {989,650}},
+{ 642876, 2, {951,676}},
+{ 642915, 2, {819,785}},
+{ 642936, 2, {903,712}},
+{ 642940, 2, {1037,620}},
+{ 642960, 2, {846,760}},
+{ 642978, 2, {882,729}},
+{ 643041, 2, {1211,531}},
+{ 643080, 2, {920,699}},
+{ 643104, 2, {812,792}},
+{ 643188, 2, {806,798}},
+{ 643195, 2, {805,799}},
+{ 643200, 2, {804,800}},
+{ 643260, 2, {852,755}},
+{ 643284, 2, {963,668}},
+{ 643302, 2, {891,722}},
+{ 643356, 2, {828,777}},
+{ 643365, 2, {841,765}},
+{ 643370, 2, {910,707}},
+{ 643383, 2, {1053,611}},
+{ 643416, 2, {969,664}},
+{ 643428, 2, {879,732}},
+{ 643455, 2, {905,711}},
+{ 643467, 2, {1023,629}},
+{ 643500, 2, {825,780}},
+{ 643536, 2, {872,738}},
+{ 643552, 2, {884,728}},
+{ 643560, 2, {865,744}},
+{ 643572, 2, {909,708}},
+{ 643632, 2, {848,759}},
+{ 643665, 2, {913,705}},
+{ 643680, 2, {864,745}},
+{ 643692, 2, {948,679}},
+{ 643720, 2, {836,770}},
+{ 643824, 2, {816,789}},
+{ 643860, 2, {876,735}},
+{ 643890, 2, {845,762}},
+{ 643896, 2, {813,792}},
+{ 643916, 2, {812,793}},
+{ 643950, 2, {810,795}},
+{ 643968, 2, {832,774}},
+{ 643977, 2, {1037,621}},
+{ 643994, 2, {806,799}},
+{ 644000, 2, {805,800}},
+{ 644004, 2, {804,801}},
+{ 644028, 2, {861,748}},
+{ 644052, 2, {843,764}},
+{ 644096, 2, {1024,629}},
+{ 644140, 2, {860,749}},
+{ 644160, 2, {880,732}},
+{ 644182, 2, {979,658}},
+{ 644190, 2, {985,654}},
+{ 644215, 2, {901,715}},
+{ 644265, 2, {927,695}},
+{ 644280, 2, {826,780}},
+{ 644322, 2, {966,667}},
+{ 644325, 2, {825,781}},
+{ 644355, 2, {999,645}},
+{ 644400, 2, {895,720}},
+{ 644436, 2, {884,729}},
+{ 644448, 2, {822,784}},
+{ 644490, 2, {837,770}},
+{ 644525, 2, {889,725}},
+{ 644540, 2, {871,740}},
+{ 644556, 2, {836,771}},
+{ 644568, 2, {856,753}},
+{ 644575, 2, {1121,575}},
+{ 644625, 2, {955,675}},
+{ 644640, 2, {816,790}},
+{ 644670, 2, {855,754}},
+{ 644688, 2, {814,792}},
+{ 644700, 2, {921,700}},
+{ 644725, 2, {925,697}},
+{ 644736, 2, {876,736}},
+{ 644742, 2, {833,774}},
+{ 644784, 2, {808,798}},
+{ 644798, 2, {869,742}},
+{ 644800, 2, {806,800}},
+{ 644805, 2, {805,801}},
+{ 644840, 2, {940,686}},
+{ 644856, 2, {831,776}},
+{ 644875, 2, {875,737}},
+{ 644904, 2, {936,689}},
+{ 644916, 2, {892,723}},
+{ 644960, 2, {928,695}},
+{ 645012, 2, {828,779}},
+{ 645048, 2, {867,744}},
+{ 645050, 2, {950,679}},
+{ 645072, 2, {906,712}},
+{ 645084, 2, {891,724}},
+{ 645106, 2, {826,781}},
+{ 645120, 2, {840,768}},
+{ 645150, 2, {825,782}},
+{ 645165, 2, {885,729}},
+{ 645183, 2, {931,693}},
+{ 645192, 2, {824,783}},
+{ 645216, 2, {858,752}},
+{ 645240, 2, {849,760}},
+{ 645270, 2, {822,785}},
+{ 645300, 2, {900,717}},
+{ 645337, 2, {1309,493}},
+{ 645344, 2, {938,688}},
+{ 645354, 2, {918,703}},
+{ 645372, 2, {819,788}},
+{ 645381, 2, {1107,583}},
+{ 645408, 2, {864,747}},
+{ 645456, 2, {816,791}},
+{ 645480, 2, {815,792}},
+{ 645498, 2, {846,763}},
+{ 645502, 2, {814,793}},
+{ 645525, 2, {855,755}},
+{ 645540, 2, {812,795}},
+{ 645568, 2, {917,704}},
+{ 645575, 2, {833,775}},
+{ 645588, 2, {908,711}},
+{ 645600, 2, {807,800}},
+{ 645612, 2, {804,803}},
+{ 645624, 2, {854,756}},
+{ 645636, 2, {933,692}},
+{ 645656, 2, {968,667}},
+{ 645660, 2, {844,765}},
+{ 645696, 2, {912,708}},
+{ 645750, 2, {861,750}},
+{ 645780, 2, {916,705}},
+{ 645795, 2, {1017,635}},
+{ 645876, 2, {924,699}},
+{ 645888, 2, {841,768}},
+{ 645909, 2, {851,759}},
+{ 645975, 2, {825,783}},
+{ 646020, 2, {873,740}},
+{ 646032, 2, {939,688}},
+{ 646072, 2, {973,664}},
+{ 646152, 2, {872,741}},
+{ 646155, 2, {865,747}},
+{ 646164, 2, {837,772}},
+{ 646170, 2, {905,714}},
+{ 646176, 2, {848,762}},
+{ 646204, 2, {884,731}},
+{ 646250, 2, {1034,625}},
+{ 646280, 2, {856,755}},
+{ 646282, 2, {871,742}},
+{ 646290, 2, {835,774}},
+{ 646323, 2, {969,667}},
+{ 646350, 2, {834,775}},
+{ 646360, 2, {904,715}},
+{ 646380, 2, {810,798}},
+{ 646404, 2, {913,708}},
+{ 646408, 2, {833,776}},
+{ 646415, 2, {805,803}},
+{ 646425, 2, {845,765}},
+{ 646464, 2, {832,777}},
+{ 646485, 2, {917,705}},
+{ 646536, 2, {869,744}},
+{ 646548, 2, {903,716}},
+{ 646640, 2, {944,685}},
+{ 646646, 2, {1001,646}},
+{ 646668, 2, {828,781}},
+{ 646680, 2, {951,680}},
+{ 646758, 2, {826,783}},
+{ 646760, 2, {851,760}},
+{ 646800, 2, {825,784}},
+{ 646816, 2, {928,697}},
+{ 646840, 2, {824,785}},
+{ 646875, 2, {1035,625}},
+{ 646898, 2, {943,686}},
+{ 646905, 2, {915,707}},
+{ 646912, 2, {896,722}},
+{ 646932, 2, {858,754}},
+{ 646944, 2, {879,736}},
+{ 646947, 2, {1141,567}},
+{ 646980, 2, {820,789}},
+{ 647024, 2, {848,763}},
+{ 647064, 2, {817,792}},
+{ 647088, 2, {816,793}},
+{ 647145, 2, {985,657}},
+{ 647148, 2, {813,796}},
+{ 647184, 2, {834,776}},
+{ 647190, 2, {810,799}},
+{ 647192, 2, {889,728}},
+{ 647208, 2, {808,801}},
+{ 647220, 2, {805,804}},
+{ 647280, 2, {870,744}},
+{ 647292, 2, {969,668}},
+{ 647325, 2, {945,685}},
+{ 647352, 2, {888,729}},
+{ 647400, 2, {830,780}},
+{ 647424, 2, {843,768}},
+{ 647425, 2, {893,725}},
+{ 647460, 2, {981,660}},
+{ 647472, 2, {861,752}},
+{ 647490, 2, {955,678}},
+{ 647570, 2, {841,770}},
+{ 647580, 2, {860,753}},
+{ 647584, 2, {826,784}},
+{ 647595, 2, {1053,615}},
+{ 647634, 2, {874,741}},
+{ 647640, 2, {840,771}},
+{ 647660, 2, {940,689}},
+{ 647664, 2, {824,786}},
+{ 647703, 2, {1043,621}},
+{ 647790, 2, {858,755}},
+{ 647808, 2, {896,723}},
+{ 647820, 2, {885,732}},
+{ 647829, 2, {819,791}},
+{ 647946, 2, {923,702}},
+{ 647955, 2, {847,765}},
+{ 647960, 2, {835,776}},
+{ 648000, 2, {810,800}},
+{ 648081, 2, {889,729}},
+{ 648096, 2, {942,688}},
+{ 648125, 2, {1037,625}},
+{ 648128, 2, {832,779}},
+{ 648150, 2, {870,745}},
+{ 648168, 2, {904,717}},
+{ 648180, 2, {831,780}},
+{ 648210, 2, {930,697}},
+{ 648318, 2, {893,726}},
+{ 648324, 2, {828,783}},
+{ 648351, 2, {999,649}},
+{ 648375, 2, {875,741}},
+{ 648384, 2, {921,704}},
+{ 648396, 2, {868,747}},
+{ 648432, 2, {912,711}},
+{ 648516, 2, {867,748}},
+{ 648550, 2, {850,763}},
+{ 648560, 2, {880,737}},
+{ 648585, 2, {1015,639}},
+{ 648600, 2, {920,705}},
+{ 648620, 2, {820,791}},
+{ 648636, 2, {849,764}},
+{ 648648, 2, {819,792}},
+{ 648672, 2, {928,699}},
+{ 648675, 2, {837,775}},
+{ 648720, 2, {816,795}},
+{ 648750, 2, {865,750}},
+{ 648788, 2, {812,799}},
+{ 648828, 2, {807,804}},
+{ 648830, 2, {806,805}},
+{ 648882, 2, {846,767}},
+{ 648900, 2, {900,721}},
+{ 648907, 2, {833,779}},
+{ 648945, 2, {855,759}},
+{ 648956, 2, {946,686}},
+{ 648960, 2, {832,780}},
+{ 648970, 2, {889,730}},
+{ 649000, 2, {1000,649}},
+{ 649040, 2, {854,760}},
+{ 649078, 2, {899,722}},
+{ 649116, 2, {876,741}},
+{ 649128, 2, {888,731}},
+{ 649152, 2, {828,784}},
+{ 649165, 2, {1073,605}},
+{ 649250, 2, {875,742}},
+{ 649350, 2, {925,702}},
+{ 649368, 2, {933,696}},
+{ 649392, 2, {978,664}},
+{ 649428, 2, {897,724}},
+{ 649440, 2, {820,792}},
+{ 649467, 2, {819,793}},
+{ 649512, 2, {837,776}},
+{ 649558, 2, {1079,602}},
+{ 649572, 2, {814,798}},
+{ 649600, 2, {812,800}},
+{ 649640, 2, {872,745}},
+{ 649649, 2, {847,767}},
+{ 649704, 2, {856,759}},
+{ 649728, 2, {846,768}},
+{ 649740, 2, {833,780}},
+{ 649760, 2, {992,655}},
+{ 649770, 2, {895,726}},
+{ 649775, 2, {1175,553}},
+{ 649788, 2, {939,692}},
+{ 649792, 2, {832,781}},
+{ 649800, 2, {855,760}},
+{ 649890, 2, {830,783}},
+{ 649935, 2, {909,715}},
+{ 649980, 2, {828,785}},
+{ 650034, 2, {882,737}},
+{ 650076, 2, {852,763}},
+{ 650100, 2, {825,788}},
+{ 650104, 2, {893,728}},
+{ 650136, 2, {824,789}},
+{ 650160, 2, {840,774}},
+{ 650260, 2, {820,793}},
+{ 650268, 2, {892,729}},
+{ 650349, 2, {837,777}},
+{ 650370, 2, {815,798}},
+{ 650385, 2, {873,745}},
+{ 650386, 2, {814,799}},
+{ 650400, 2, {813,800}},
+{ 650412, 2, {812,801}},
+{ 650416, 2, {848,767}},
+{ 650430, 2, {810,803}},
+{ 650440, 2, {808,805}},
+{ 650460, 2, {879,740}},
+{ 650480, 2, {865,752}},
+{ 650484, 2, {951,684}},
+{ 650496, 2, {847,768}},
+{ 650573, 2, {833,781}},
+{ 650592, 2, {864,753}},
+{ 650624, 2, {832,782}},
+{ 650650, 2, {845,770}},
+{ 650670, 2, {943,690}},
+{ 650700, 2, {900,723}},
+{ 650715, 2, {923,705}},
+{ 650720, 2, {830,784}},
+{ 650724, 2, {844,771}},
+{ 650730, 2, {995,654}},
+{ 650793, 2, {1221,533}},
+{ 650796, 2, {843,772}},
+{ 650832, 2, {894,728}},
+{ 650844, 2, {909,716}},
+{ 650845, 2, {1105,589}},
+{ 650916, 2, {861,756}},
+{ 650988, 2, {963,676}},
+{ 650997, 2, {893,729}},
+{ 651000, 2, {840,775}},
+{ 651014, 2, {949,686}},
+{ 651015, 2, {851,765}},
+{ 651024, 2, {822,792}},
+{ 651035, 2, {979,665}},
+{ 651036, 2, {908,717}},
+{ 651070, 2, {917,710}},
+{ 651112, 2, {1057,616}},
+{ 651168, 2, {816,798}},
+{ 651200, 2, {814,800}},
+{ 651244, 2, {836,779}},
+{ 651276, 2, {916,711}},
+{ 651300, 2, {835,780}},
+{ 651321, 2, {891,731}},
+{ 651360, 2, {885,736}},
+{ 651375, 2, {965,675}},
+{ 651384, 2, {872,747}},
+{ 651406, 2, {833,782}},
+{ 651420, 2, {846,770}},
+{ 651456, 2, {832,783}},
+{ 651475, 2, {1133,575}},
+{ 651480, 2, {890,732}},
+{ 651504, 2, {831,784}},
+{ 651508, 2, {871,748}},
+{ 651560, 2, {895,728}},
+{ 651630, 2, {870,749}},
+{ 651695, 2, {935,697}},
+{ 651700, 2, {931,700}},
+{ 651780, 2, {852,765}},
+{ 651784, 2, {824,791}},
+{ 651794, 2, {946,689}},
+{ 651833, 2, {1183,551}},
+{ 651882, 2, {913,714}},
+{ 651900, 2, {820,795}},
+{ 651924, 2, {819,796}},
+{ 651950, 2, {850,767}},
+{ 651966, 2, {817,798}},
+{ 651984, 2, {816,799}},
+{ 651987, 2, {917,711}},
+{ 652000, 2, {815,800}},
+{ 652023, 2, {837,779}},
+{ 652032, 2, {849,768}},
+{ 652036, 2, {812,803}},
+{ 652050, 2, {810,805}},
+{ 652056, 2, {808,807}},
+{ 652064, 2, {994,656}},
+{ 652068, 2, {921,708}},
+{ 652080, 2, {836,780}},
+{ 652120, 2, {952,685}},
+{ 652190, 2, {847,770}},
+{ 652212, 2, {891,732}},
+{ 652224, 2, {948,688}},
+{ 652239, 2, {833,783}},
+{ 652245, 2, {885,737}},
+{ 652272, 2, {856,762}},
+{ 652320, 2, {864,755}},
+{ 652365, 2, {855,763}},
+{ 652384, 2, {928,703}},
+{ 652455, 2, {895,729}},
+{ 652575, 2, {825,791}},
+{ 652620, 2, {876,745}},
+{ 652674, 2, {899,726}},
+{ 652680, 2, {840,777}},
+{ 652740, 2, {860,759}},
+{ 652815, 2, {815,801}},
+{ 652860, 2, {810,806}},
+{ 652904, 2, {917,712}},
+{ 652912, 2, {949,688}},
+{ 652925, 2, {1025,637}},
+{ 652953, 2, {1003,651}},
+{ 652960, 2, {848,770}},
+{ 653004, 2, {873,748}},
+{ 653016, 2, {897,728}},
+{ 653072, 2, {833,784}},
+{ 653100, 2, {933,700}},
+{ 653120, 2, {832,785}},
+{ 653125, 2, {1045,625}},
+{ 653128, 2, {856,763}},
+{ 653130, 2, {885,738}},
+{ 653184, 2, {864,756}},
+{ 653220, 2, {855,764}},
+{ 653225, 2, {901,725}},
+{ 653235, 2, {1177,555}},
+{ 653250, 2, {871,750}},
+{ 653268, 2, {924,707}},
+{ 653292, 2, {828,789}},
+{ 653310, 2, {854,765}},
+{ 653315, 2, {1235,529}},
+{ 653400, 2, {825,792}},
+{ 653415, 2, {889,735}},
+{ 653480, 2, {961,680}},
+{ 653488, 2, {869,752}},
+{ 653544, 2, {939,696}},
+{ 653568, 2, {851,768}},
+{ 653592, 2, {904,723}},
+{ 653600, 2, {817,800}},
+{ 653604, 2, {868,753}},
+{ 653616, 2, {816,801}},
+{ 653625, 2, {875,747}},
+{ 653652, 2, {813,804}},
+{ 653697, 2, {837,781}},
+{ 653715, 2, {995,657}},
+{ 653752, 2, {836,782}},
+{ 653772, 2, {903,724}},
+{ 653790, 2, {930,703}},
+{ 653805, 2, {835,783}},
+{ 653808, 2, {848,771}},
+{ 653856, 2, {834,784}},
+{ 653877, 2, {873,749}},
+{ 653904, 2, {912,717}},
+{ 653913, 2, {897,729}},
+{ 653920, 2, {976,670}},
+{ 653940, 2, {865,756}},
+{ 653950, 2, {902,725}},
+{ 653952, 2, {832,786}},
+{ 653975, 2, {925,707}},
+{ 653976, 2, {879,744}},
+{ 654000, 2, {872,750}},
+{ 654005, 2, {1081,605}},
+{ 654030, 2, {845,774}},
+{ 654080, 2, {896,730}},
+{ 654120, 2, {828,790}},
+{ 654126, 2, {901,726}},
+{ 654168, 2, {843,776}},
+{ 654192, 2, {826,792}},
+{ 654199, 2, {1027,637}},
+{ 654225, 2, {825,793}},
+{ 654240, 2, {870,752}},
+{ 654270, 2, {965,678}},
+{ 654288, 2, {951,688}},
+{ 654304, 2, {889,736}},
+{ 654336, 2, {852,768}},
+{ 654345, 2, {999,655}},
+{ 654368, 2, {968,676}},
+{ 654372, 2, {876,747}},
+{ 654381, 2, {819,799}},
+{ 654444, 2, {882,742}},
+{ 654472, 2, {812,806}},
+{ 654480, 2, {810,808}},
+{ 654493, 2, {931,703}},
+{ 654550, 2, {950,689}},
+{ 654588, 2, {836,783}},
+{ 654640, 2, {835,784}},
+{ 654675, 2, {903,725}},
+{ 654690, 2, {834,785}},
+{ 654828, 2, {831,788}},
+{ 654840, 2, {856,765}},
+{ 654885, 2, {891,735}},
+{ 654900, 2, {885,740}},
+{ 654925, 2, {1139,575}},
+{ 654948, 2, {828,791}},
+{ 654975, 2, {1025,639}},
+{ 654976, 2, {896,731}},
+{ 654992, 2, {871,752}},
+{ 655000, 2, {1000,655}},
+{ 655018, 2, {826,793}},
+{ 655040, 2, {890,736}},
+{ 655044, 2, {884,741}},
+{ 655080, 2, {824,795}},
+{ 655140, 2, {895,732}},
+{ 655180, 2, {820,799}},
+{ 655200, 2, {819,800}},
+{ 655248, 2, {816,803}},
+{ 655260, 2, {815,804}},
+{ 655270, 2, {814,805}},
+{ 655284, 2, {812,807}},
+{ 655308, 2, {981,668}},
+{ 655344, 2, {888,738}},
+{ 655368, 2, {987,664}},
+{ 655375, 2, {875,749}},
+{ 655389, 2, {909,721}},
+{ 655400, 2, {904,725}},
+{ 655424, 2, {836,784}},
+{ 655428, 2, {849,772}},
+{ 655452, 2, {867,756}},
+{ 655500, 2, {874,750}},
+{ 655557, 2, {1007,651}},
+{ 655578, 2, {847,774}},
+{ 655600, 2, {880,745}},
+{ 655620, 2, {892,735}},
+{ 655632, 2, {942,696}},
+{ 655650, 2, {846,775}},
+{ 655690, 2, {986,665}},
+{ 655707, 2, {897,731}},
+{ 655720, 2, {845,776}},
+{ 655752, 2, {921,712}},
+{ 655785, 2, {855,767}},
+{ 655788, 2, {844,777}},
+{ 655872, 2, {854,768}},
+{ 655960, 2, {920,713}},
+{ 655980, 2, {841,780}},
+{ 656000, 2, {820,800}},
+{ 656010, 2, {985,666}},
+{ 656040, 2, {840,781}},
+{ 656064, 2, {816,804}},
+{ 656080, 2, {944,695}},
+{ 656110, 2, {910,721}},
+{ 656124, 2, {876,749}},
+{ 656180, 2, {860,763}},
+{ 656183, 2, {1331,493}},
+{ 656205, 2, {1067,615}},
+{ 656208, 2, {837,784}},
+{ 656250, 2, {875,750}},
+{ 656304, 2, {904,726}},
+{ 656310, 2, {835,786}},
+{ 656316, 2, {927,708}},
+{ 656328, 2, {943,696}},
+{ 656352, 2, {848,774}},
+{ 656355, 2, {893,735}},
+{ 656397, 2, {1057,621}},
+{ 656425, 2, {847,775}},
+{ 656448, 2, {832,789}},
+{ 656484, 2, {908,723}},
+{ 656496, 2, {846,776}},
+{ 656502, 2, {957,686}},
+{ 656530, 2, {830,791}},
+{ 656600, 2, {938,700}},
+{ 656604, 2, {828,793}},
+{ 656616, 2, {872,753}},
+{ 656640, 2, {855,768}},
+{ 656656, 2, {902,728}},
+{ 656667, 2, {891,737}},
+{ 656670, 2, {826,795}},
+{ 656700, 2, {825,796}},
+{ 656772, 2, {916,717}},
+{ 656775, 2, {945,695}},
+{ 656820, 2, {820,801}},
+{ 656825, 2, {1075,611}},
+{ 656829, 2, {901,729}},
+{ 656832, 2, {933,704}},
+{ 656850, 2, {870,755}},
+{ 656880, 2, {816,805}},
+{ 656892, 2, {852,771}},
+{ 656904, 2, {813,808}},
+{ 656964, 2, {869,756}},
+{ 657020, 2, {910,722}},
+{ 657024, 2, {928,708}},
+{ 657030, 2, {905,726}},
+{ 657041, 2, {1127,583}},
+{ 657045, 2, {837,785}},
+{ 657060, 2, {932,705}},
+{ 657090, 2, {882,745}},
+{ 657111, 2, {1079,609}},
+{ 657153, 2, {1159,567}},
+{ 657200, 2, {848,775}},
+{ 657216, 2, {978,672}},
+{ 657225, 2, {1035,635}},
+{ 657272, 2, {847,776}},
+{ 657280, 2, {832,790}},
+{ 657300, 2, {939,700}},
+{ 657305, 2, {935,703}},
+{ 657324, 2, {961,684}},
+{ 657360, 2, {830,792}},
+{ 657384, 2, {903,728}},
+{ 657400, 2, {865,760}},
+{ 657492, 2, {879,748}},
+{ 657510, 2, {930,707}},
+{ 657514, 2, {1331,494}},
+{ 657540, 2, {843,780}},
+{ 657552, 2, {824,798}},
+{ 657600, 2, {822,800}},
+{ 657657, 2, {819,803}},
+{ 657662, 2, {841,782}},
+{ 657675, 2, {925,711}},
+{ 657685, 2, {817,805}},
+{ 657696, 2, {816,806}},
+{ 657720, 2, {812,810}},
+{ 657800, 2, {920,715}},
+{ 657804, 2, {861,764}},
+{ 657860, 2, {889,740}},
+{ 657900, 2, {850,774}},
+{ 657984, 2, {894,736}},
+{ 658000, 2, {875,752}},
+{ 658008, 2, {888,741}},
+{ 658050, 2, {1025,642}},
+{ 658070, 2, {833,790}},
+{ 658086, 2, {858,767}},
+{ 658092, 2, {951,692}},
+{ 658112, 2, {832,791}},
+{ 658116, 2, {909,724}},
+{ 658125, 2, {975,675}},
+{ 658152, 2, {831,792}},
+{ 658240, 2, {880,748}},
+{ 658255, 2, {845,779}},
+{ 658260, 2, {828,795}},
+{ 658287, 2, {903,729}},
+{ 658350, 2, {825,798}},
+{ 658360, 2, {872,755}},
+{ 658368, 2, {864,762}},
+{ 658416, 2, {946,696}},
+{ 658440, 2, {885,744}},
+{ 658460, 2, {820,803}},
+{ 658476, 2, {819,804}},
+{ 658502, 2, {817,806}},
+{ 658512, 2, {816,807}},
+{ 658520, 2, {815,808}},
+{ 658525, 2, {1325,497}},
+{ 658665, 2, {861,765}},
+{ 658692, 2, {963,684}},
+{ 658720, 2, {895,736}},
+{ 658735, 2, {1015,649}},
+{ 658752, 2, {876,752}},
+{ 658812, 2, {868,759}},
+{ 658824, 2, {849,776}},
+{ 658825, 2, {1387,475}},
+{ 658840, 2, {905,728}},
+{ 658880, 2, {928,710}},
+{ 658896, 2, {848,777}},
+{ 658920, 2, {867,760}},
+{ 658944, 2, {832,792}},
+{ 658950, 2, {955,690}},
+{ 659016, 2, {904,729}},
+{ 659022, 2, {923,714}},
+{ 659025, 2, {909,725}},
+{ 659100, 2, {845,780}},
+{ 659115, 2, {873,755}},
+{ 659130, 2, {865,762}},
+{ 659175, 2, {825,799}},
+{ 659176, 2, {1043,632}},
+{ 659232, 2, {864,763}},
+{ 659246, 2, {961,686}},
+{ 659295, 2, {819,805}},
+{ 659316, 2, {987,668}},
+{ 659340, 2, {814,810}},
+{ 659352, 2, {993,664}},
+{ 659362, 2, {902,731}},
+{ 659373, 2, {957,689}},
+{ 659376, 2, {912,723}},
+{ 659400, 2, {840,785}},
+{ 659436, 2, {921,716}},
+{ 659525, 2, {851,775}},
+{ 659556, 2, {837,788}},
+{ 659568, 2, {906,728}},
+{ 659604, 2, {836,789}},
+{ 659620, 2, {860,767}},
+{ 659628, 2, {876,753}},
+{ 659640, 2, {920,717}},
+{ 659655, 2, {963,685}},
+{ 659680, 2, {868,760}},
+{ 659715, 2, {915,721}},
+{ 659736, 2, {833,792}},
+{ 659745, 2, {905,729}},
+{ 659750, 2, {875,754}},
+{ 659776, 2, {832,793}},
+{ 659792, 2, {959,688}},
+{ 659808, 2, {928,711}},
+{ 659813, 2, {847,779}},
+{ 659932, 2, {962,686}},
+{ 659976, 2, {856,771}},
+{ 659988, 2, {873,756}},
+{ 660000, 2, {825,800}},
+{ 660024, 2, {824,801}},
+{ 660060, 2, {855,772}},
+{ 660114, 2, {819,806}},
+{ 660150, 2, {815,810}},
+{ 660156, 2, {813,812}},
+{ 660192, 2, {897,736}},
+{ 660231, 2, {891,741}},
+{ 660240, 2, {840,786}},
+{ 660275, 2, {1225,539}},
+{ 660300, 2, {852,775}},
+{ 660348, 2, {884,747}},
+{ 660352, 2, {896,737}},
+{ 660387, 2, {861,767}},
+{ 660450, 2, {850,777}},
+{ 660480, 2, {860,768}},
+{ 660510, 2, {895,738}},
+{ 660528, 2, {834,792}},
+{ 660564, 2, {933,708}},
+{ 660569, 2, {833,793}},
+{ 660618, 2, {882,749}},
+{ 660660, 2, {847,780}},
+{ 660726, 2, {846,781}},
+{ 660765, 2, {899,735}},
+{ 660790, 2, {845,782}},
+{ 660800, 2, {826,800}},
+{ 660820, 2, {893,740}},
+{ 660852, 2, {844,783}},
+{ 660912, 2, {843,784}},
+{ 660960, 2, {816,810}},
+{ 660961, 2, {1927,343}},
+{ 660968, 2, {814,812}},
+{ 660972, 2, {892,741}},
+{ 660996, 2, {854,774}},
+{ 661008, 2, {879,752}},
+{ 661010, 2, {931,710}},
+{ 661056, 2, {939,704}},
+{ 661089, 2, {871,759}},
+{ 661122, 2, {891,742}},
+{ 661200, 2, {870,760}},
+{ 661230, 2, {837,790}},
+{ 661248, 2, {861,768}},
+{ 661250, 2, {1058,625}},
+{ 661290, 2, {938,705}},
+{ 661320, 2, {835,792}},
+{ 661380, 2, {876,755}},
+{ 661388, 2, {1027,644}},
+{ 661440, 2, {832,795}},
+{ 661476, 2, {831,796}},
+{ 661500, 2, {875,756}},
+{ 661504, 2, {1024,646}},
+{ 661560, 2, {888,745}},
+{ 661572, 2, {828,799}},
+{ 661635, 2, {845,783}},
+{ 661640, 2, {952,695}},
+{ 661664, 2, {899,736}},
+{ 661710, 2, {822,805}},
+{ 661713, 2, {893,741}},
+{ 661725, 2, {865,765}},
+{ 661740, 2, {820,807}},
+{ 661752, 2, {819,808}},
+{ 661770, 2, {817,810}},
+{ 661815, 2, {955,693}},
+{ 661848, 2, {872,759}},
+{ 661850, 2, {854,775}},
+{ 661878, 2, {918,721}},
+{ 661896, 2, {951,696}},
+{ 661925, 2, {913,725}},
+{ 661932, 2, {908,729}},
+{ 661941, 2, {931,711}},
+{ 661960, 2, {871,760}},
+{ 661980, 2, {885,748}},
+{ 662004, 2, {852,777}},
+{ 662025, 2, {975,679}},
+{ 662067, 2, {837,791}},
+{ 662112, 2, {836,792}},
+{ 662150, 2, {850,779}},
+{ 662160, 2, {890,744}},
+{ 662220, 2, {849,780}},
+{ 662235, 2, {833,795}},
+{ 662244, 2, {957,692}},
+{ 662268, 2, {916,723}},
+{ 662277, 2, {987,671}},
+{ 662288, 2, {848,781}},
+{ 662354, 2, {847,782}},
+{ 662388, 2, {867,764}},
+{ 662400, 2, {828,800}},
+{ 662415, 2, {1027,645}},
+{ 662460, 2, {905,732}},
+{ 662475, 2, {825,803}},
+{ 662480, 2, {845,784}},
+{ 662508, 2, {924,717}},
+{ 662544, 2, {856,774}},
+{ 662592, 2, {816,812}},
+{ 662625, 2, {855,775}},
+{ 662640, 2, {880,753}},
+{ 662652, 2, {932,711}},
+{ 662670, 2, {995,666}},
+{ 662688, 2, {864,767}},
+{ 662697, 2, {1099,603}},
+{ 662760, 2, {840,789}},
+{ 662796, 2, {918,722}},
+{ 662805, 2, {927,715}},
+{ 662823, 2, {1169,567}},
+{ 662865, 2, {885,749}},
+{ 662872, 2, {931,712}},
+{ 662904, 2, {837,792}},
+{ 662935, 2, {1085,611}},
+{ 662948, 2, {836,793}},
+{ 663000, 2, {850,780}},
+{ 663040, 2, {896,740}},
+{ 663060, 2, {860,771}},
+{ 663080, 2, {968,685}},
+{ 663120, 2, {921,720}},
+{ 663156, 2, {981,676}},
+{ 663168, 2, {942,704}},
+{ 663201, 2, {847,783}},
+{ 663228, 2, {828,801}},
+{ 663264, 2, {846,784}},
+{ 663278, 2, {826,803}},
+{ 663300, 2, {825,804}},
+{ 663320, 2, {824,805}},
+{ 663324, 2, {993,668}},
+{ 663336, 2, {888,747}},
+{ 663390, 2, {819,810}},
+{ 663400, 2, {856,775}},
+{ 663404, 2, {817,812}},
+{ 663408, 2, {816,813}},
+{ 663480, 2, {855,776}},
+{ 663495, 2, {1065,623}},
+{ 663520, 2, {880,754}},
+{ 663544, 2, {952,697}},
+{ 663552, 2, {864,768}},
+{ 663585, 2, {1079,615}},
+{ 663600, 2, {840,790}},
+{ 663663, 2, {1001,663}},
+{ 663732, 2, {927,716}},
+{ 663741, 2, {837,793}},
+{ 663780, 2, {851,780}},
+{ 663795, 2, {891,745}},
+{ 663803, 2, {931,713}},
+{ 663810, 2, {870,763}},
+{ 663850, 2, {850,781}},
+{ 663872, 2, {902,736}},
+{ 663936, 2, {832,798}},
+{ 663984, 2, {848,783}},
+{ 664000, 2, {830,800}},
+{ 664020, 2, {868,765}},
+{ 664048, 2, {847,784}},
+{ 664083, 2, {889,747}},
+{ 664110, 2, {846,785}},
+{ 664125, 2, {825,805}},
+{ 664170, 2, {845,786}},
+{ 664176, 2, {822,808}},
+{ 664200, 2, {820,810}},
+{ 664224, 2, {816,814}},
+{ 664240, 2, {874,760}},
+{ 664284, 2, {843,788}},
+{ 664296, 2, {933,712}},
+{ 664320, 2, {865,768}},
+{ 664335, 2, {855,777}},
+{ 664392, 2, {893,744}},
+{ 664400, 2, {880,755}},
+{ 664411, 2, {2057,323}},
+{ 664440, 2, {840,791}},
+{ 664464, 2, {872,762}},
+{ 664524, 2, {879,756}},
+{ 664580, 2, {940,707}},
+{ 664587, 2, {959,693}},
+{ 664608, 2, {903,736}},
+{ 664620, 2, {836,795}},
+{ 664640, 2, {992,670}},
+{ 664664, 2, {913,728}},
+{ 664692, 2, {861,772}},
+{ 664700, 2, {850,782}},
+{ 664768, 2, {832,799}},
+{ 664785, 2, {869,765}},
+{ 664800, 2, {831,800}},
+{ 664812, 2, {939,708}},
+{ 664825, 2, {917,725}},
+{ 664839, 2, {1211,549}},
+{ 664848, 2, {912,729}},
+{ 664875, 2, {985,675}},
+{ 664884, 2, {828,803}},
+{ 664938, 2, {901,738}},
+{ 664950, 2, {825,806}},
+{ 664968, 2, {824,807}},
+{ 665000, 2, {875,760}},
+{ 665028, 2, {819,812}},
+{ 665038, 2, {817,814}},
+{ 665040, 2, {816,815}},
+{ 665112, 2, {856,777}},
+{ 665136, 2, {894,744}},
+{ 665160, 2, {920,723}},
+{ 665210, 2, {910,731}},
+{ 665225, 2, {1025,649}},
+{ 665275, 2, {1157,575}},
+{ 665376, 2, {928,717}},
+{ 665379, 2, {1089,611}},
+{ 665388, 2, {909,732}},
+{ 665415, 2, {837,795}},
+{ 665445, 2, {1199,555}},
+{ 665480, 2, {1016,655}},
+{ 665482, 2, {851,782}},
+{ 665496, 2, {936,711}},
+{ 665511, 2, {903,737}},
+{ 665520, 2, {885,752}},
+{ 665550, 2, {850,783}},
+{ 665567, 2, {833,799}},
+{ 665616, 2, {849,784}},
+{ 665652, 2, {884,753}},
+{ 665680, 2, {848,785}},
+{ 665700, 2, {951,700}},
+{ 665808, 2, {858,776}},
+{ 665850, 2, {965,690}},
+{ 665874, 2, {1026,649}},
+{ 665880, 2, {895,744}},
+{ 665910, 2, {882,755}},
+{ 665916, 2, {844,789}},
+{ 665973, 2, {961,693}},
+{ 665984, 2, {946,704}},
+{ 666000, 2, {888,750}},
+{ 666045, 2, {855,779}},
+{ 666072, 2, {841,792}},
+{ 666080, 2, {905,736}},
+{ 666099, 2, {873,763}},
+{ 666120, 2, {840,793}},
+{ 666135, 2, {1017,655}},
+{ 666144, 2, {864,771}},
+{ 666159, 2, {899,741}},
+{ 666198, 2, {949,702}},
+{ 666204, 2, {924,721}},
+{ 666225, 2, {945,705}},
+{ 666252, 2, {837,796}},
+{ 666315, 2, {871,765}},
+{ 666324, 2, {892,747}},
+{ 666330, 2, {835,798}},
+{ 666333, 2, {851,783}},
+{ 666396, 2, {963,692}},
+{ 666400, 2, {833,800}},
+{ 666425, 2, {1159,575}},
+{ 666432, 2, {832,801}},
+{ 666468, 2, {891,748}},
+{ 666477, 2, {1043,639}},
+{ 666528, 2, {848,786}},
+{ 666540, 2, {828,805}},
+{ 666600, 2, {825,808}},
+{ 666610, 2, {890,749}},
+{ 666624, 2, {868,768}},
+{ 666655, 2, {935,713}},
+{ 666660, 2, {820,813}},
+{ 666666, 2, {819,814}},
+{ 666672, 2, {817,816}},
+{ 666740, 2, {901,740}},
+{ 666750, 2, {875,762}},
+{ 666804, 2, {921,724}},
+{ 666816, 2, {906,736}},
+{ 666855, 2, {1015,657}},
+{ 666875, 2, {1067,625}},
+{ 666900, 2, {855,780}},
+{ 666925, 2, {925,721}},
+{ 666952, 2, {968,689}},
+{ 666972, 2, {873,764}},
+{ 666974, 2, {854,781}},
+{ 666995, 2, {1003,665}},
+{ 667000, 2, {920,725}},
+{ 667029, 2, {957,697}},
+{ 667035, 2, {915,729}},
+{ 667080, 2, {872,765}},
+{ 667116, 2, {852,783}},
+{ 667152, 2, {904,738}},
+{ 667184, 2, {851,784}},
+{ 667200, 2, {834,800}},
+{ 667212, 2, {987,676}},
+{ 667233, 2, {833,801}},
+{ 667275, 2, {861,775}},
+{ 667290, 2, {870,767}},
+{ 667296, 2, {993,672}},
+{ 667320, 2, {830,804}},
+{ 667332, 2, {999,668}},
+{ 667359, 2, {891,749}},
+{ 667368, 2, {828,806}},
+{ 667380, 2, {908,735}},
+{ 667392, 2, {869,768}},
+{ 667440, 2, {824,810}},
+{ 667485, 2, {819,815}},
+{ 667520, 2, {896,745}},
+{ 667575, 2, {989,675}},
+{ 667576, 2, {917,728}},
+{ 667584, 2, {912,732}},
+{ 667590, 2, {867,770}},
+{ 667625, 2, {875,763}},
+{ 667641, 2, {901,741}},
+{ 667656, 2, {843,792}},
+{ 667667, 2, {1001,667}},
+{ 667755, 2, {855,781}},
+{ 667764, 2, {916,729}},
+{ 667800, 2, {840,795}},
+{ 667821, 2, {1029,649}},
+{ 667830, 2, {985,678}},
+{ 667890, 2, {905,738}},
+{ 667920, 2, {880,759}},
+{ 667964, 2, {836,799}},
+{ 667968, 2, {852,784}},
+{ 667998, 2, {1003,666}},
+{ 668000, 2, {835,800}},
+{ 668024, 2, {1057,632}},
+{ 668028, 2, {933,716}},
+{ 668040, 2, {879,760}},
+{ 668052, 2, {924,723}},
+{ 668096, 2, {832,803}},
+{ 668124, 2, {831,804}},
+{ 668136, 2, {861,776}},
+{ 668160, 2, {870,768}},
+{ 668196, 2, {828,807}},
+{ 668220, 2, {860,777}},
+{ 668244, 2, {932,717}},
+{ 668250, 2, {825,810}},
+{ 668304, 2, {819,816}},
+{ 668316, 2, {913,732}},
+{ 668340, 2, {846,790}},
+{ 668382, 2, {858,779}},
+{ 668388, 2, {876,763}},
+{ 668493, 2, {917,729}},
+{ 668528, 2, {889,752}},
+{ 668560, 2, {976,685}},
+{ 668564, 2, {989,676}},
+{ 668565, 2, {895,747}},
+{ 668568, 2, {939,712}},
+{ 668577, 2, {1027,651}},
+{ 668610, 2, {855,782}},
+{ 668655, 2, {1053,635}},
+{ 668664, 2, {888,753}},
+{ 668682, 2, {854,783}},
+{ 668736, 2, {864,774}},
+{ 668745, 2, {965,693}},
+{ 668763, 2, {837,799}},
+{ 668800, 2, {836,800}},
+{ 668820, 2, {852,785}},
+{ 668835, 2, {835,801}},
+{ 668899, 2, {833,803}},
+{ 668928, 2, {832,804}},
+{ 669012, 2, {849,788}},
+{ 669045, 2, {949,705}},
+{ 669060, 2, {826,810}},
+{ 669072, 2, {848,789}},
+{ 669120, 2, {820,816}},
+{ 669123, 2, {819,817}},
+{ 669130, 2, {847,790}},
+{ 669175, 2, {923,725}},
+{ 669186, 2, {846,791}},
+{ 669228, 2, {868,771}},
+{ 669240, 2, {845,792}},
+{ 669256, 2, {952,703}},
+{ 669280, 2, {890,752}},
+{ 669285, 2, {963,695}},
+{ 669312, 2, {896,747}},
+{ 669324, 2, {867,772}},
+{ 669330, 2, {999,670}},
+{ 669375, 2, {875,765}},
+{ 669410, 2, {917,730}},
+{ 669424, 2, {973,688}},
+{ 669438, 2, {882,759}},
+{ 669504, 2, {951,704}},
+{ 669510, 2, {865,774}},
+{ 669515, 2, {1295,517}},
+{ 669536, 2, {854,784}},
+{ 669600, 2, {837,800}},
+{ 669636, 2, {836,801}},
+{ 669655, 2, {1007,665}},
+{ 669725, 2, {1075,623}},
+{ 669732, 2, {833,804}},
+{ 669750, 2, {893,750}},
+{ 669760, 2, {832,805}},
+{ 669780, 2, {915,732}},
+{ 669864, 2, {904,741}},
+{ 669900, 2, {825,812}},
+{ 669912, 2, {824,813}},
+{ 669920, 2, {848,790}},
+{ 669930, 2, {822,815}},
+{ 669940, 2, {820,817}},
+{ 670032, 2, {846,792}},
+{ 670140, 2, {876,765}},
+{ 670208, 2, {896,748}},
+{ 670225, 2, {1411,475}},
+{ 670236, 2, {948,707}},
+{ 670240, 2, {944,710}},
+{ 670248, 2, {856,783}},
+{ 670320, 2, {840,798}},
+{ 670329, 2, {999,671}},
+{ 670344, 2, {901,744}},
+{ 670350, 2, {1025,654}},
+{ 670410, 2, {955,702}},
+{ 670432, 2, {1022,656}},
+{ 670440, 2, {888,755}},
+{ 670450, 2, {1150,583}},
+{ 670480, 2, {986,680}},
+{ 670488, 2, {921,728}},
+{ 670514, 2, {962,697}},
+{ 670530, 2, {930,721}},
+{ 670548, 2, {969,692}},
+{ 670560, 2, {880,762}},
+{ 670592, 2, {832,806}},
+{ 670670, 2, {871,770}},
+{ 670704, 2, {942,712}},
+{ 670720, 2, {1024,655}},
+{ 670752, 2, {822,816}},
+{ 670768, 2, {848,791}},
+{ 670824, 2, {847,792}},
+{ 670878, 2, {846,793}},
+{ 670890, 2, {1045,642}},
+{ 670944, 2, {928,723}},
+{ 670950, 2, {945,710}},
+{ 670956, 2, {858,782}},
+{ 670980, 2, {844,795}},
+{ 670995, 2, {1147,585}},
+{ 671000, 2, {1000,671}},
+{ 671004, 2, {981,684}},
+{ 671028, 2, {843,796}},
+{ 671055, 2, {913,735}},
+{ 671088, 2, {902,744}},
+{ 671099, 2, {1859,361}},
+{ 671112, 2, {936,717}},
+{ 671118, 2, {841,798}},
+{ 671125, 2, {875,767}},
+{ 671148, 2, {927,724}},
+{ 671160, 2, {840,799}},
+{ 671175, 2, {855,785}},
+{ 671184, 2, {944,711}},
+{ 671232, 2, {874,768}},
+{ 671240, 2, {865,776}},
+{ 671250, 2, {895,750}},
+{ 671268, 2, {993,676}},
+{ 671300, 2, {959,700}},
+{ 671301, 2, {1081,621}},
+{ 671328, 2, {864,777}},
+{ 671340, 2, {835,804}},
+{ 671370, 2, {834,805}},
+{ 671398, 2, {833,806}},
+{ 671424, 2, {832,807}},
+{ 671448, 2, {831,808}},
+{ 671517, 2, {969,693}},
+{ 671550, 2, {825,814}},
+{ 671556, 2, {879,764}},
+{ 671560, 2, {824,815}},
+{ 671580, 2, {820,819}},
+{ 671594, 2, {979,686}},
+{ 671625, 2, {995,675}},
+{ 671650, 2, {950,707}},
+{ 671660, 2, {860,781}},
+{ 671671, 2, {847,793}},
+{ 671676, 2, {892,753}},
+{ 671760, 2, {933,720}},
+{ 671944, 2, {923,728}},
+{ 671960, 2, {856,785}},
+{ 671968, 2, {913,736}},
+{ 671985, 2, {981,685}},
+{ 672000, 2, {840,800}},
+{ 672075, 2, {927,725}},
+{ 672111, 2, {837,803}},
+{ 672133, 2, {1247,539}},
+{ 672228, 2, {852,789}},
+{ 672288, 2, {894,752}},
+{ 672300, 2, {830,810}},
+{ 672312, 2, {872,771}},
+{ 672324, 2, {939,716}},
+{ 672336, 2, {828,812}},
+{ 672350, 2, {850,791}},
+{ 672408, 2, {849,792}},
+{ 672441, 2, {861,781}},
+{ 672452, 2, {899,748}},
+{ 672464, 2, {848,793}},
+{ 672570, 2, {846,795}},
+{ 672600, 2, {885,760}},
+{ 672606, 2, {869,774}},
+{ 672660, 2, {909,740}},
+{ 672672, 2, {858,784}},
+{ 672705, 2, {891,755}},
+{ 672750, 2, {897,750}},
+{ 672760, 2, {968,695}},
+{ 672768, 2, {876,768}},
+{ 672771, 2, {957,703}},
+{ 672792, 2, {867,776}},
+{ 672800, 2, {841,800}},
+{ 672816, 2, {856,786}},
+{ 672828, 2, {908,741}},
+{ 672840, 2, {840,801}},
+{ 672864, 2, {978,688}},
+{ 672867, 2, {923,729}},
+{ 672948, 2, {837,804}},
+{ 672966, 2, {882,763}},
+{ 673040, 2, {895,752}},
+{ 673056, 2, {864,779}},
+{ 673064, 2, {833,808}},
+{ 673080, 2, {852,790}},
+{ 673164, 2, {828,813}},
+{ 673200, 2, {825,816}},
+{ 673260, 2, {916,735}},
+{ 673308, 2, {951,708}},
+{ 673320, 2, {905,744}},
+{ 673322, 2, {893,754}},
+{ 673344, 2, {1002,672}},
+{ 673365, 2, {847,795}},
+{ 673380, 2, {860,783}},
+{ 673425, 2, {1025,657}},
+{ 673440, 2, {915,736}},
+{ 673475, 2, {869,775}},
+{ 673480, 2, {904,745}},
+{ 673530, 2, {858,785}},
+{ 673596, 2, {891,756}},
+{ 673712, 2, {1027,656}},
+{ 673728, 2, {928,726}},
+{ 673740, 2, {855,788}},
+{ 673750, 2, {875,770}},
+{ 673785, 2, {837,805}},
+{ 673816, 2, {836,806}},
+{ 673836, 2, {932,723}},
+{ 673872, 2, {834,808}},
+{ 673920, 2, {832,810}},
+{ 673932, 2, {852,791}},
+{ 673946, 2, {1058,637}},
+{ 673948, 2, {901,748}},
+{ 673956, 2, {873,772}},
+{ 673980, 2, {940,717}},
+{ 673992, 2, {828,814}},
+{ 673995, 2, {917,735}},
+{ 674016, 2, {826,816}},
+{ 674025, 2, {825,817}},
+{ 674050, 2, {850,793}},
+{ 674064, 2, {906,744}},
+{ 674100, 2, {900,749}},
+{ 674145, 2, {1055,639}},
+{ 674154, 2, {871,774}},
+{ 674160, 2, {848,795}},
+{ 674163, 2, {861,783}},
+{ 674172, 2, {921,732}},
+{ 674245, 2, {943,715}},
+{ 674250, 2, {870,775}},
+{ 674289, 2, {973,693}},
+{ 674310, 2, {845,798}},
+{ 674325, 2, {925,729}},
+{ 674355, 2, {915,737}},
+{ 674375, 2, {1079,625}},
+{ 674400, 2, {843,800}},
+{ 674424, 2, {969,696}},
+{ 674436, 2, {868,777}},
+{ 674450, 2, {1025,658}},
+{ 674520, 2, {840,803}},
+{ 674544, 2, {897,752}},
+{ 674610, 2, {995,678}},
+{ 674652, 2, {836,807}},
+{ 674680, 2, {835,808}},
+{ 674688, 2, {896,753}},
+{ 674700, 2, {865,780}},
+{ 674730, 2, {833,810}},
+{ 674772, 2, {831,812}},
+{ 674817, 2, {1331,507}},
+{ 674820, 2, {828,815}},
+{ 674856, 2, {824,819}},
+{ 674912, 2, {917,736}},
+{ 674928, 2, {872,774}},
+{ 674960, 2, {880,767}},
+{ 674970, 2, {894,755}},
+{ 674975, 2, {931,725}},
+{ 675004, 2, {1012,667}},
+{ 675024, 2, {861,784}},
+{ 675025, 2, {871,775}},
+{ 675070, 2, {935,722}},
+{ 675072, 2, {879,768}},
+{ 675087, 2, {1037,651}},
+{ 675120, 2, {870,776}},
+{ 675136, 2, {959,704}},
+{ 675155, 2, {845,799}},
+{ 675213, 2, {869,777}},
+{ 675240, 2, {993,680}},
+{ 675255, 2, {885,763}},
+{ 675270, 2, {915,738}},
+{ 675288, 2, {904,747}},
+{ 675324, 2, {962,702}},
+{ 675384, 2, {856,789}},
+{ 675393, 2, {867,779}},
+{ 675396, 2, {876,771}},
+{ 675423, 2, {1057,639}},
+{ 675444, 2, {903,748}},
+{ 675492, 2, {933,724}},
+{ 675584, 2, {832,812}},
+{ 675625, 2, {1081,625}},
+{ 675640, 2, {889,760}},
+{ 675648, 2, {828,816}},
+{ 675675, 2, {825,819}},
+{ 675766, 2, {1027,658}},
+{ 675792, 2, {912,741}},
+{ 675800, 2, {872,775}},
+{ 675804, 2, {849,796}},
+{ 675840, 2, {880,768}},
+{ 675990, 2, {870,777}},
+{ 676000, 2, {845,800}},
+{ 676035, 2, {905,747}},
+{ 676039, 2, {1547,437}},
+{ 676044, 2, {844,801}},
+{ 676080, 2, {939,720}},
+{ 676095, 2, {959,705}},
+{ 676140, 2, {885,764}},
+{ 676172, 2, {868,779}},
+{ 676175, 2, {925,731}},
+{ 676200, 2, {840,805}},
+{ 676260, 2, {867,780}},
+{ 676269, 2, {891,759}},
+{ 676284, 2, {996,679}},
+{ 676296, 2, {837,808}},
+{ 676305, 2, {855,791}},
+{ 676350, 2, {835,810}},
+{ 676368, 2, {854,792}},
+{ 676377, 2, {1107,611}},
+{ 676416, 2, {832,813}},
+{ 676476, 2, {828,817}},
+{ 676480, 2, {896,755}},
+{ 676500, 2, {825,820}},
+{ 676512, 2, {864,783}},
+{ 676544, 2, {961,704}},
+{ 676566, 2, {918,737}},
+{ 676575, 2, {873,775}},
+{ 676620, 2, {895,756}},
+{ 676656, 2, {888,762}},
+{ 676704, 2, {848,798}},
+{ 676728, 2, {936,723}},
+{ 676753, 2, {847,799}},
+{ 676767, 2, {871,777}},
+{ 676775, 2, {1177,575}},
+{ 676800, 2, {846,800}},
+{ 676845, 2, {845,801}},
+{ 676848, 2, {944,717}},
+{ 676863, 2, {1161,583}},
+{ 676875, 2, {1083,625}},
+{ 677005, 2, {841,805}},
+{ 677028, 2, {892,759}},
+{ 677040, 2, {840,806}},
+{ 677075, 2, {1325,511}},
+{ 677096, 2, {856,791}},
+{ 677100, 2, {915,740}},
+{ 677112, 2, {951,712}},
+{ 677160, 2, {836,810}},
+{ 677205, 2, {909,745}},
+{ 677248, 2, {832,814}},
+{ 677250, 2, {875,774}},
+{ 677280, 2, {830,816}},
+{ 677295, 2, {865,783}},
+{ 677310, 2, {1055,642}},
+{ 677320, 2, {826,820}},
+{ 677328, 2, {824,822}},
+{ 677340, 2, {852,795}},
+{ 677376, 2, {864,784}},
+{ 677425, 2, {1225,553}},
+{ 677430, 2, {965,702}},
+{ 677440, 2, {928,730}},
+{ 677446, 2, {913,742}},
+{ 677448, 2, {873,776}},
+{ 677544, 2, {872,777}},
+{ 677556, 2, {957,708}},
+{ 677586, 2, {949,714}},
+{ 677600, 2, {847,800}},
+{ 677700, 2, {900,753}},
+{ 677705, 2, {1139,595}},
+{ 677730, 2, {870,779}},
+{ 677740, 2, {940,721}},
+{ 677768, 2, {931,728}},
+{ 677772, 2, {843,804}},
+{ 677787, 2, {893,759}},
+{ 677856, 2, {921,736}},
+{ 677880, 2, {840,807}},
+{ 677908, 2, {868,781}},
+{ 677925, 2, {1035,655}},
+{ 677976, 2, {984,689}},
+{ 678000, 2, {904,750}},
+{ 678015, 2, {855,793}},
+{ 678040, 2, {920,737}},
+{ 678062, 2, {833,814}},
+{ 678080, 2, {832,815}},
+{ 678096, 2, {831,816}},
+{ 678132, 2, {828,819}},
+{ 678160, 2, {865,784}},
+{ 678240, 2, {864,785}},
+{ 678276, 2, {908,747}},
+{ 678300, 2, {850,798}},
+{ 678320, 2, {976,695}},
+{ 678368, 2, {928,731}},
+{ 678375, 2, {1005,675}},
+{ 678405, 2, {923,735}},
+{ 678447, 2, {847,801}},
+{ 678454, 2, {989,686}},
+{ 678468, 2, {861,788}},
+{ 678480, 2, {880,771}},
+{ 678540, 2, {860,789}},
+{ 678564, 2, {927,732}},
+{ 678580, 2, {917,740}},
+{ 678588, 2, {879,772}},
+{ 678612, 2, {1067,636}},
+{ 678680, 2, {893,760}},
+{ 678699, 2, {931,729}},
+{ 678750, 2, {905,750}},
+{ 678755, 2, {1435,473}},
+{ 678756, 2, {916,741}},
+{ 678810, 2, {935,726}},
+{ 678852, 2, {981,692}},
+{ 678900, 2, {876,775}},
+{ 678912, 2, {832,816}},
+{ 678930, 2, {854,795}},
+{ 678960, 2, {828,820}},
+{ 679000, 2, {875,776}},
+{ 679005, 2, {955,711}},
+{ 679042, 2, {1066,637}},
+{ 679056, 2, {903,752}},
+{ 679070, 2, {890,763}},
+{ 679098, 2, {851,798}},
+{ 679104, 2, {864,786}},
+{ 679140, 2, {882,770}},
+{ 679150, 2, {850,799}},
+{ 679185, 2, {1053,645}},
+{ 679200, 2, {849,800}},
+{ 679212, 2, {993,684}},
+{ 679224, 2, {933,728}},
+{ 679248, 2, {848,801}},
+{ 679272, 2, {913,744}},
+{ 679296, 2, {928,732}},
+{ 679320, 2, {888,765}},
+{ 679328, 2, {923,736}},
+{ 679338, 2, {846,803}},
+{ 679354, 2, {901,754}},
+{ 679380, 2, {845,804}},
+{ 679428, 2, {932,729}},
+{ 679440, 2, {894,760}},
+{ 679470, 2, {870,781}},
+{ 679500, 2, {900,755}},
+{ 679520, 2, {992,685}},
+{ 679536, 2, {858,792}},
+{ 679575, 2, {975,697}},
+{ 679581, 2, {1127,603}},
+{ 679620, 2, {940,723}},
+{ 679630, 2, {931,730}},
+{ 679644, 2, {837,812}},
+{ 679650, 2, {985,690}},
+{ 679668, 2, {836,813}},
+{ 679680, 2, {885,768}},
+{ 679710, 2, {834,815}},
+{ 679716, 2, {948,717}},
+{ 679728, 2, {833,816}},
+{ 679744, 2, {832,817}},
+{ 679800, 2, {825,824}},
+{ 679830, 2, {930,731}},
+{ 679833, 2, {891,763}},
+{ 679836, 2, {939,724}},
+{ 679875, 2, {875,777}},
+{ 679890, 2, {865,786}},
+{ 679932, 2, {909,748}},
+{ 680000, 2, {850,800}},
+{ 680043, 2, {987,689}},
+{ 680050, 2, {938,725}},
+{ 680064, 2, {896,759}},
+{ 680085, 2, {889,765}},
+{ 680200, 2, {895,760}},
+{ 680238, 2, {918,741}},
+{ 680260, 2, {860,791}},
+{ 680295, 2, {1023,665}},
+{ 680316, 2, {1068,637}},
+{ 680394, 2, {858,793}},
+{ 680400, 2, {840,810}},
+{ 680427, 2, {869,783}},
+{ 680485, 2, {1235,551}},
+{ 680520, 2, {856,795}},
+{ 680544, 2, {834,816}},
+{ 680560, 2, {905,752}},
+{ 680561, 2, {833,817}},
+{ 680580, 2, {855,796}},
+{ 680652, 2, {876,777}},
+{ 680680, 2, {884,770}},
+{ 680688, 2, {978,696}},
+{ 680712, 2, {904,753}},
+{ 680724, 2, {891,764}},
+{ 680760, 2, {915,744}},
+{ 680800, 2, {851,800}},
+{ 680841, 2, {909,749}},
+{ 680890, 2, {959,710}},
+{ 680916, 2, {951,716}},
+{ 680940, 2, {873,780}},
+{ 680944, 2, {848,803}},
+{ 680960, 2, {896,760}},
+{ 680988, 2, {847,804}},
+{ 681030, 2, {846,805}},
+{ 681065, 2, {1015,671}},
+{ 681096, 2, {888,767}},
+{ 681100, 2, {973,700}},
+{ 681108, 2, {844,807}},
+{ 681120, 2, {860,792}},
+{ 681144, 2, {843,808}},
+{ 681156, 2, {901,756}},
+{ 681174, 2, {923,738}},
+{ 681200, 2, {1040,655}},
+{ 681207, 2, {969,703}},
+{ 681210, 2, {841,810}},
+{ 681264, 2, {912,747}},
+{ 681296, 2, {869,784}},
+{ 681312, 2, {906,752}},
+{ 681318, 2, {837,814}},
+{ 681360, 2, {835,816}},
+{ 681384, 2, {957,712}},
+{ 681408, 2, {832,819}},
+{ 681420, 2, {831,820}},
+{ 681450, 2, {826,825}},
+{ 681540, 2, {921,740}},
+{ 681564, 2, {884,771}},
+{ 681590, 2, {910,749}},
+{ 681600, 2, {852,800}},
+{ 681615, 2, {891,765}},
+{ 681625, 2, {875,779}},
+{ 681696, 2, {864,789}},
+{ 681720, 2, {874,780}},
+{ 681725, 2, {925,737}},
+{ 681792, 2, {848,804}},
+{ 681795, 2, {981,695}},
+{ 681804, 2, {963,708}},
+{ 681849, 2, {959,711}},
+{ 681870, 2, {955,714}},
+{ 681912, 2, {861,792}},
+{ 681980, 2, {860,793}},
+{ 681984, 2, {888,768}},
+{ 681990, 2, {895,762}},
+{ 681993, 2, {871,783}},
+{ 682000, 2, {880,775}},
+{ 682040, 2, {1003,680}},
+{ 682080, 2, {840,812}},
+{ 682104, 2, {879,776}},
+{ 682155, 2, {837,815}},
+{ 682176, 2, {836,816}},
+{ 682185, 2, {1095,623}},
+{ 682227, 2, {833,819}},
+{ 682240, 2, {832,820}},
+{ 682341, 2, {899,759}},
+{ 682344, 2, {936,729}},
+{ 682380, 2, {892,765}},
+{ 682395, 2, {1005,679}},
+{ 682410, 2, {989,690}},
+{ 682452, 2, {852,801}},
+{ 682465, 2, {1085,629}},
+{ 682479, 2, {1099,621}},
+{ 682500, 2, {875,780}},
+{ 682512, 2, {944,723}},
+{ 682520, 2, {904,755}},
+{ 682539, 2, {1221,559}},
+{ 682550, 2, {850,803}},
+{ 682560, 2, {864,790}},
+{ 682584, 2, {952,717}},
+{ 682596, 2, {849,804}},
+{ 682605, 2, {985,693}},
+{ 682640, 2, {848,805}},
+{ 682650, 2, {925,738}},
+{ 682675, 2, {1175,581}},
+{ 682682, 2, {847,806}},
+{ 682689, 2, {1121,609}},
+{ 682752, 2, {889,768}},
+{ 682760, 2, {845,808}},
+{ 682773, 2, {861,793}},
+{ 682776, 2, {872,783}},
+{ 682808, 2, {959,712}},
+{ 682864, 2, {871,784}},
+{ 682920, 2, {840,813}},
+{ 682950, 2, {870,785}},
+{ 682955, 2, {1027,665}},
+{ 682956, 2, {933,732}},
+{ 682992, 2, {837,816}},
+{ 683004, 2, {987,692}},
+{ 683012, 2, {836,817}},
+{ 683020, 2, {923,740}},
+{ 683060, 2, {833,820}},
+{ 683088, 2, {856,798}},
+{ 683100, 2, {828,825}},
+{ 683145, 2, {855,799}},
+{ 683184, 2, {993,688}},
+{ 683196, 2, {867,788}},
+{ 683200, 2, {854,800}},
+{ 683220, 2, {885,772}},
+{ 683240, 2, {899,760}},
+{ 683265, 2, {1111,615}},
+{ 683298, 2, {957,714}},
+{ 683316, 2, {972,703}},
+{ 683375, 2, {875,781}},
+{ 683397, 2, {891,767}},
+{ 683400, 2, {850,804}},
+{ 683424, 2, {864,791}},
+{ 683430, 2, {1045,654}},
+{ 683436, 2, {1011,676}},
+{ 683485, 2, {935,731}},
+{ 683501, 2, {1073,637}},
+{ 683508, 2, {948,721}},
+{ 683520, 2, {890,768}},
+{ 683550, 2, {882,775}},
+{ 683568, 2, {846,808}},
+{ 683592, 2, {939,728}},
+{ 683675, 2, {943,725}},
+{ 683700, 2, {860,795}},
+{ 683724, 2, {908,753}},
+{ 683760, 2, {840,814}},
+{ 683774, 2, {1183,578}},
+{ 683802, 2, {938,729}},
+{ 683829, 2, {837,817}},
+{ 683859, 2, {901,759}},
+{ 683865, 2, {835,819}},
+{ 683872, 2, {994,688}},
+{ 683904, 2, {832,822}},
+{ 683928, 2, {828,826}},
+{ 683936, 2, {928,737}},
+{ 684000, 2, {855,800}},
+{ 684046, 2, {1003,682}},
+{ 684156, 2, {852,803}},
+{ 684180, 2, {905,756}},
+{ 684208, 2, {1043,656}},
+{ 684250, 2, {850,805}},
+{ 684252, 2, {916,747}},
+{ 684285, 2, {931,735}},
+{ 684288, 2, {864,792}},
+{ 684315, 2, {999,685}},
+{ 684320, 2, {910,752}},
+{ 684336, 2, {848,807}},
+{ 684352, 2, {1088,629}},
+{ 684376, 2, {847,808}},
+{ 684400, 2, {944,725}},
+{ 684420, 2, {915,748}},
+{ 684432, 2, {873,784}},
+{ 684450, 2, {845,810}},
+{ 684516, 2, {843,812}},
+{ 684520, 2, {872,785}},
+{ 684530, 2, {889,770}},
+{ 684600, 2, {840,815}},
+{ 684648, 2, {888,771}},
+{ 684675, 2, {895,765}},
+{ 684684, 2, {836,819}},
+{ 684720, 2, {951,720}},
+{ 684744, 2, {831,824}},
+{ 684760, 2, {901,760}},
+{ 684775, 2, {1075,637}},
+{ 684852, 2, {868,789}},
+{ 684864, 2, {928,738}},
+{ 684866, 2, {923,742}},
+{ 684950, 2, {950,721}},
+{ 684981, 2, {1089,629}},
+{ 684990, 2, {885,774}},
+{ 684992, 2, {973,704}},
+{ 684999, 2, {917,747}},
+{ 685000, 2, {1000,685}},
+{ 685020, 2, {932,735}},
+{ 685025, 2, {1175,583}},
+{ 685055, 2, {851,805}},
+{ 685069, 2, {1271,539}},
+{ 685080, 2, {865,792}},
+{ 685100, 2, {850,806}},
+{ 685125, 2, {875,783}},
+{ 685152, 2, {864,793}},
+{ 685212, 2, {957,716}},
+{ 685216, 2, {874,784}},
+{ 685224, 2, {921,744}},
+{ 685248, 2, {996,688}},
+{ 685251, 2, {1043,657}},
+{ 685305, 2, {873,785}},
+{ 685308, 2, {897,764}},
+{ 685335, 2, {915,749}},
+{ 685344, 2, {944,726}},
+{ 685356, 2, {861,796}},
+{ 685392, 2, {872,786}},
+{ 685400, 2, {920,745}},
+{ 685404, 2, {948,723}},
+{ 685410, 2, {930,737}},
+{ 685542, 2, {858,799}},
+{ 685620, 2, {879,780}},
+{ 685656, 2, {856,801}},
+{ 685762, 2, {854,803}},
+{ 685776, 2, {942,728}},
+{ 685790, 2, {970,707}},
+{ 685824, 2, {893,768}},
+{ 685850, 2, {946,725}},
+{ 685860, 2, {852,805}},
+{ 685906, 2, {851,806}},
+{ 685908, 2, {876,783}},
+{ 685965, 2, {973,705}},
+{ 685971, 2, {1287,533}},
+{ 685980, 2, {927,740}},
+{ 685992, 2, {849,808}},
+{ 686000, 2, {875,784}},
+{ 686052, 2, {969,708}},
+{ 686070, 2, {847,810}},
+{ 686080, 2, {1024,670}},
+{ 686115, 2, {965,711}},
+{ 686136, 2, {904,759}},
+{ 686147, 2, {931,737}},
+{ 686154, 2, {961,714}},
+{ 686172, 2, {844,813}},
+{ 686205, 2, {897,765}},
+{ 686256, 2, {841,816}},
+{ 686280, 2, {840,817}},
+{ 686295, 2, {909,755}},
+{ 686340, 2, {837,820}},
+{ 686343, 2, {1029,667}},
+{ 686350, 2, {925,742}},
+{ 686370, 2, {835,822}},
+{ 686392, 2, {833,824}},
+{ 686400, 2, {832,825}},
+{ 686504, 2, {943,728}},
+{ 686550, 2, {995,690}},
+{ 686565, 2, {855,803}},
+{ 686576, 2, {913,752}},
+{ 686592, 2, {894,768}},
+{ 686637, 2, {1211,567}},
+{ 686664, 2, {867,792}},
+{ 686686, 2, {1001,686}},
+{ 686688, 2, {933,736}},
+{ 686700, 2, {900,763}},
+{ 686720, 2, {928,740}},
+{ 686736, 2, {912,753}},
+{ 686760, 2, {885,776}},
+{ 686774, 2, {1007,682}},
+{ 686784, 2, {876,784}},
+{ 686868, 2, {884,777}},
+{ 686880, 2, {848,810}},
+{ 687115, 2, {961,715}},
+{ 687140, 2, {860,799}},
+{ 687156, 2, {993,692}},
+{ 687204, 2, {909,756}},
+{ 687216, 2, {834,824}},
+{ 687225, 2, {833,825}},
+{ 687232, 2, {832,826}},
+{ 687240, 2, {830,828}},
+{ 687280, 2, {880,781}},
+{ 687312, 2, {888,774}},
+{ 687323, 2, {1079,637}},
+{ 687344, 2, {952,722}},
+{ 687348, 2, {939,732}},
+{ 687360, 2, {895,768}},
+{ 687401, 2, {1573,437}},
+{ 687420, 2, {855,804}},
+{ 687447, 2, {943,729}},
+{ 687456, 2, {868,792}},
+{ 687480, 2, {1011,680}},
+{ 687564, 2, {852,807}},
+{ 687582, 2, {918,749}},
+{ 687610, 2, {893,770}},
+{ 687648, 2, {912,754}},
+{ 687660, 2, {876,785}},
+{ 687700, 2, {1058,650}},
+{ 687732, 2, {892,771}},
+{ 687735, 2, {899,765}},
+{ 687750, 2, {875,786}},
+{ 687775, 2, {1025,671}},
+{ 687792, 2, {966,712}},
+{ 687800, 2, {905,760}},
+{ 687852, 2, {891,772}},
+{ 687888, 2, {843,816}},
+{ 687897, 2, {1253,549}},
+{ 687924, 2, {873,788}},
+{ 687939, 2, {861,799}},
+{ 687940, 2, {1060,649}},
+{ 687960, 2, {840,819}},
+{ 688000, 2, {860,800}},
+{ 688008, 2, {872,789}},
+{ 688023, 2, {1141,603}},
+{ 688025, 2, {949,725}},
+{ 688040, 2, {835,824}},
+{ 688068, 2, {831,828}},
+{ 688080, 2, {915,752}},
+{ 688086, 2, {889,774}},
+{ 688160, 2, {880,782}},
+{ 688170, 2, {870,791}},
+{ 688176, 2, {944,729}},
+{ 688200, 2, {888,775}},
+{ 688215, 2, {1067,645}},
+{ 688248, 2, {869,792}},
+{ 688275, 2, {855,805}},
+{ 688296, 2, {952,723}},
+{ 688311, 2, {999,689}},
+{ 688344, 2, {989,696}},
+{ 688446, 2, {1026,671}},
+{ 688485, 2, {1185,581}},
+{ 688500, 2, {850,810}},
+{ 688512, 2, {978,704}},
+{ 688524, 2, {951,724}},
+{ 688545, 2, {963,715}},
+{ 688560, 2, {906,760}},
+{ 688597, 2, {1081,637}},
+{ 688636, 2, {884,779}},
+{ 688688, 2, {946,728}},
+{ 688758, 2, {966,713}},
+{ 688779, 2, {841,819}},
+{ 688800, 2, {840,820}},
+{ 688842, 2, {882,781}},
+{ 688848, 2, {904,762}},
+{ 688860, 2, {860,801}},
+{ 688896, 2, {832,828}},
+{ 688905, 2, {945,729}},
+{ 688908, 2, {921,748}},
+{ 688940, 2, {931,740}},
+{ 688975, 2, {889,775}},
+{ 689000, 2, {1000,689}},
+{ 689010, 2, {965,714}},
+{ 689040, 2, {870,792}},
+{ 689080, 2, {856,805}},
+{ 689120, 2, {944,730}},
+{ 689130, 2, {855,806}},
+{ 689136, 2, {879,784}},
+{ 689172, 2, {908,759}},
+{ 689310, 2, {851,810}},
+{ 689325, 2, {975,707}},
+{ 689376, 2, {1002,688}},
+{ 689388, 2, {849,812}},
+{ 689424, 2, {848,813}},
+{ 689425, 2, {1199,575}},
+{ 689430, 2, {938,735}},
+{ 689440, 2, {992,695}},
+{ 689472, 2, {864,798}},
+{ 689490, 2, {846,815}},
+{ 689508, 2, {963,716}},
+{ 689520, 2, {845,816}},
+{ 689535, 2, {995,693}},
+{ 689584, 2, {917,752}},
+{ 689605, 2, {1037,665}},
+{ 689610, 2, {905,762}},
+{ 689688, 2, {837,824}},
+{ 689689, 2, {1001,689}},
+{ 689700, 2, {836,825}},
+{ 689715, 2, {1053,655}},
+{ 689724, 2, {833,828}},
+{ 689748, 2, {916,753}},
+{ 689752, 2, {872,791}},
+{ 689843, 2, {1309,527}},
+{ 689850, 2, {945,730}},
+{ 689864, 2, {889,776}},
+{ 689892, 2, {903,764}},
+{ 689910, 2, {870,793}},
+{ 689928, 2, {969,712}},
+{ 689970, 2, {1055,654}},
+{ 689976, 2, {888,777}},
+{ 690000, 2, {920,750}},
+{ 690030, 2, {902,765}},
+{ 690060, 2, {868,795}},
+{ 690132, 2, {867,796}},
+{ 690184, 2, {968,713}},
+{ 690195, 2, {979,705}},
+{ 690200, 2, {850,812}},
+{ 690228, 2, {913,756}},
+{ 690235, 2, {1295,533}},
+{ 690270, 2, {865,798}},
+{ 690300, 2, {885,780}},
+{ 690336, 2, {846,816}},
+{ 690345, 2, {1035,667}},
+{ 690365, 2, {845,817}},
+{ 690368, 2, {938,736}},
+{ 690420, 2, {933,740}},
+{ 690432, 2, {899,768}},
+{ 690459, 2, {1029,671}},
+{ 690480, 2, {840,822}},
+{ 690525, 2, {837,825}},
+{ 690543, 2, {873,791}},
+{ 690560, 2, {832,830}},
+{ 690580, 2, {860,803}},
+{ 690612, 2, {932,741}},
+{ 690615, 2, {927,745}},
+{ 690625, 2, {1105,625}},
+{ 690642, 2, {1037,666}},
+{ 690690, 2, {858,805}},
+{ 690768, 2, {936,738}},
+{ 690792, 2, {856,807}},
+{ 690795, 2, {903,765}},
+{ 690800, 2, {880,785}},
+{ 690816, 2, {896,771}},
+{ 690830, 2, {973,710}},
+{ 690840, 2, {855,808}},
+{ 690855, 2, {869,795}},
+{ 690872, 2, {949,728}},
+{ 690897, 2, {969,713}},
+{ 690900, 2, {940,735}},
+{ 690975, 2, {925,747}},
+{ 691008, 2, {944,732}},
+{ 691012, 2, {851,812}},
+{ 691092, 2, {948,729}},
+{ 691104, 2, {939,736}},
+{ 691120, 2, {848,815}},
+{ 691128, 2, {993,696}},
+{ 691152, 2, {847,816}},
+{ 691164, 2, {876,789}},
+{ 691173, 2, {1113,621}},
+{ 691185, 2, {885,781}},
+{ 691188, 2, {956,723}},
+{ 691200, 2, {864,800}},
+{ 691236, 2, {844,819}},
+{ 691260, 2, {843,820}},
+{ 691288, 2, {884,782}},
+{ 691308, 2, {999,692}},
+{ 691360, 2, {928,745}},
+{ 691362, 2, {837,826}},
+{ 691380, 2, {835,828}},
+{ 691383, 2, {861,803}},
+{ 691390, 2, {833,830}},
+{ 691392, 2, {832,831}},
+{ 691416, 2, {873,792}},
+{ 691424, 2, {992,697}},
+{ 691470, 2, {985,702}},
+{ 691488, 2, {882,784}},
+{ 691515, 2, {1089,635}},
+{ 691524, 2, {1011,684}},
+{ 691548, 2, {858,806}},
+{ 691560, 2, {904,765}},
+{ 691680, 2, {880,786}},
+{ 691740, 2, {854,810}},
+{ 691752, 2, {888,779}},
+{ 691775, 2, {1475,469}},
+{ 691803, 2, {973,711}},
+{ 691821, 2, {949,729}},
+{ 691834, 2, {902,767}},
+{ 691875, 2, {1025,675}},
+{ 691900, 2, {850,814}},
+{ 691920, 2, {930,744}},
+{ 691999, 2, {847,817}},
+{ 692000, 2, {865,800}},
+{ 692040, 2, {876,790}},
+{ 692055, 2, {845,819}},
+{ 692064, 2, {864,801}},
+{ 692075, 2, {893,775}},
+{ 692076, 2, {924,749}},
+{ 692120, 2, {968,715}},
+{ 692125, 2, {875,791}},
+{ 692172, 2, {884,783}},
+{ 692230, 2, {899,770}},
+{ 692244, 2, {861,804}},
+{ 692250, 2, {923,750}},
+{ 692307, 2, {891,777}},
+{ 692325, 2, {905,765}},
+{ 692328, 2, {951,728}},
+{ 692370, 2, {882,785}},
+{ 692445, 2, {871,795}},
+{ 692461, 2, {1309,529}},
+{ 692484, 2, {897,772}},
+{ 692550, 2, {855,810}},
+{ 692552, 2, {1043,664}},
+{ 692592, 2, {921,752}},
+{ 692601, 2, {903,767}},
+{ 692652, 2, {879,788}},
+{ 692676, 2, {852,813}},
+{ 692730, 2, {895,774}},
+{ 692736, 2, {902,768}},
+{ 692760, 2, {920,753}},
+{ 692776, 2, {973,712}},
+{ 692780, 2, {940,737}},
+{ 692784, 2, {849,816}},
+{ 692825, 2, {925,749}},
+{ 692835, 2, {935,741}},
+{ 692850, 2, {894,775}},
+{ 692860, 2, {980,707}},
+{ 692865, 2, {865,801}},
+{ 692868, 2, {957,724}},
+{ 692916, 2, {876,791}},
+{ 692955, 2, {885,783}},
+{ 692960, 2, {976,710}},
+{ 693000, 2, {840,825}},
+{ 693036, 2, {837,828}},
+{ 693056, 2, {833,832}},
+{ 693084, 2, {892,777}},
+{ 693132, 2, {979,708}},
+{ 693135, 2, {1055,657}},
+{ 693158, 2, {986,703}},
+{ 693203, 2, {2021,343}},
+{ 693216, 2, {928,747}},
+{ 693240, 2, {872,795}},
+{ 693264, 2, {858,808}},
+{ 693312, 2, {942,736}},
+{ 693330, 2, {955,726}},
+{ 693360, 2, {856,810}},
+{ 693392, 2, {1057,656}},
+{ 693396, 2, {927,748}},
+{ 693420, 2, {889,780}},
+{ 693462, 2, {869,798}},
+{ 693504, 2, {896,774}},
+{ 693532, 2, {868,799}},
+{ 693567, 2, {909,763}},
+{ 693576, 2, {936,741}},
+{ 693600, 2, {850,816}},
+{ 693651, 2, {1139,609}},
+{ 693680, 2, {920,754}},
+{ 693693, 2, {847,819}},
+{ 693744, 2, {894,776}},
+{ 693750, 2, {925,750}},
+{ 693770, 2, {901,770}},
+{ 693792, 2, {864,803}},
+{ 693804, 2, {969,716}},
+{ 693825, 2, {841,825}},
+{ 693840, 2, {840,826}},
+{ 693842, 2, {961,722}},
+{ 693861, 2, {893,777}},
+{ 693875, 2, {875,793}},
+{ 693888, 2, {834,832}},
+{ 693900, 2, {900,771}},
+{ 693935, 2, {1147,605}},
+{ 694020, 2, {860,807}},
+{ 694025, 2, {1207,575}},
+{ 694048, 2, {943,736}},
+{ 694080, 2, {960,723}},
+{ 694083, 2, {1369,507}},
+{ 694089, 2, {891,779}},
+{ 694096, 2, {923,752}},
+{ 694120, 2, {938,740}},
+{ 694152, 2, {933,744}},
+{ 694200, 2, {890,780}},
+{ 694232, 2, {1012,686}},
+{ 694260, 2, {855,812}},
+{ 694305, 2, {999,695}},
+{ 694320, 2, {880,789}},
+{ 694323, 2, {927,749}},
+{ 694330, 2, {910,763}},
+{ 694375, 2, {1111,625}},
+{ 694380, 2, {852,815}},
+{ 694400, 2, {868,800}},
+{ 694416, 2, {851,816}},
+{ 694449, 2, {1057,657}},
+{ 694450, 2, {850,817}},
+{ 694476, 2, {909,764}},
+{ 694512, 2, {848,819}},
+{ 694520, 2, {895,776}},
+{ 694540, 2, {847,820}},
+{ 694548, 2, {981,708}},
+{ 694568, 2, {1099,632}},
+{ 694575, 2, {945,735}},
+{ 694590, 2, {845,822}},
+{ 694600, 2, {920,755}},
+{ 694620, 2, {908,765}},
+{ 694632, 2, {843,824}},
+{ 694656, 2, {864,804}},
+{ 694710, 2, {837,830}},
+{ 694716, 2, {836,831}},
+{ 694720, 2, {835,832}},
+{ 694848, 2, {924,752}},
+{ 694860, 2, {939,740}},
+{ 694876, 2, {1079,644}},
+{ 694908, 2, {873,796}},
+{ 694944, 2, {912,762}},
+{ 694950, 2, {1025,678}},
+{ 694980, 2, {858,810}},
+{ 695000, 2, {1000,695}},
+{ 695020, 2, {1121,620}},
+{ 695040, 2, {905,768}},
+{ 695045, 2, {1105,629}},
+{ 695058, 2, {871,798}},
+{ 695079, 2, {1003,693}},
+{ 695100, 2, {993,700}},
+{ 695130, 2, {870,799}},
+{ 695200, 2, {869,800}},
+{ 695232, 2, {852,816}},
+{ 695244, 2, {916,759}},
+{ 695266, 2, {1573,442}},
+{ 695268, 2, {868,801}},
+{ 695275, 2, {959,725}},
+{ 695304, 2, {888,783}},
+{ 695400, 2, {915,760}},
+{ 695457, 2, {931,747}},
+{ 695460, 2, {865,804}},
+{ 695552, 2, {836,832}},
+{ 695568, 2, {1011,688}},
+{ 695583, 2, {1267,549}},
+{ 695600, 2, {925,752}},
+{ 695604, 2, {1014,686}},
+{ 695628, 2, {1017,684}},
+{ 695688, 2, {861,808}},
+{ 695728, 2, {944,737}},
+{ 695772, 2, {924,753}},
+{ 695808, 2, {906,768}},
+{ 695856, 2, {872,798}},
+{ 695871, 2, {891,781}},
+{ 695912, 2, {952,731}},
+{ 695928, 2, {856,813}},
+{ 695955, 2, {1079,645}},
+{ 695960, 2, {1016,685}},
+{ 695970, 2, {855,814}},
+{ 695975, 2, {1025,679}},
+{ 696000, 2, {870,800}},
+{ 696072, 2, {897,776}},
+{ 696080, 2, {880,791}},
+{ 696087, 2, {889,783}},
+{ 696132, 2, {951,732}},
+{ 696141, 2, {1121,621}},
+{ 696168, 2, {879,792}},
+{ 696180, 2, {849,820}},
+{ 696195, 2, {955,729}},
+{ 696204, 2, {932,747}},
+{ 696256, 2, {946,736}},
+{ 696276, 2, {921,756}},
+{ 696280, 2, {845,824}},
+{ 696300, 2, {844,825}},
+{ 696303, 2, {999,697}},
+{ 696320, 2, {1024,680}},
+{ 696336, 2, {978,712}},
+{ 696348, 2, {841,828}},
+{ 696384, 2, {837,832}},
+{ 696388, 2, {836,833}},
+{ 696390, 2, {835,834}},
+{ 696420, 2, {876,795}},
+{ 696465, 2, {945,737}},
+{ 696540, 2, {893,780}},
+{ 696570, 2, {930,749}},
+{ 696600, 2, {860,810}},
+{ 696645, 2, {1017,685}},
+{ 696672, 2, {944,738}},
+{ 696762, 2, {891,782}},
+{ 696780, 2, {882,790}},
+{ 696787, 2, {1183,589}},
+{ 696795, 2, {1133,615}},
+{ 696800, 2, {871,800}},
+{ 696825, 2, {855,815}},
+{ 696864, 2, {854,816}},
+{ 696920, 2, {917,760}},
+{ 696924, 2, {956,729}},
+{ 696969, 2, {851,819}},
+{ 696976, 2, {889,784}},
+{ 696984, 2, {904,771}},
+{ 697004, 2, {868,803}},
+{ 697015, 2, {1045,667}},
+{ 697056, 2, {848,822}},
+{ 697068, 2, {867,804}},
+{ 697080, 2, {888,785}},
+{ 697104, 2, {846,824}},
+{ 697116, 2, {903,772}},
+{ 697125, 2, {845,825}},
+{ 697200, 2, {840,830}},
+{ 697212, 2, {963,724}},
+{ 697221, 2, {837,833}},
+{ 697248, 2, {864,807}},
+{ 697268, 2, {1012,689}},
+{ 697374, 2, {901,774}},
+{ 697376, 2, {992,703}},
+{ 697380, 2, {885,788}},
+{ 697392, 2, {1002,696}},
+{ 697410, 2, {861,810}},
+{ 697452, 2, {874,798}},
+{ 697476, 2, {884,789}},
+{ 697480, 2, {940,742}},
+{ 697500, 2, {900,775}},
+{ 697515, 2, {949,735}},
+{ 697632, 2, {1014,688}},
+{ 697640, 2, {856,815}},
+{ 697662, 2, {882,791}},
+{ 697675, 2, {1075,649}},
+{ 697680, 2, {855,816}},
+{ 697686, 2, {961,726}},
+{ 697697, 2, {1001,697}},
+{ 697728, 2, {948,736}},
+{ 697760, 2, {890,784}},
+{ 697788, 2, {852,819}},
+{ 697840, 2, {880,793}},
+{ 697851, 2, {1007,693}},
+{ 697884, 2, {933,748}},
+{ 697928, 2, {847,824}},
+{ 697950, 2, {846,825}},
+{ 697968, 2, {888,786}},
+{ 697984, 2, {896,779}},
+{ 698004, 2, {843,828}},
+{ 698040, 2, {840,831}},
+{ 698100, 2, {895,780}},
+{ 698139, 2, {1053,663}},
+{ 698145, 2, {915,763}},
+{ 698152, 2, {959,728}},
+{ 698175, 2, {963,725}},
+{ 698250, 2, {875,798}},
+{ 698275, 2, {901,775}},
+{ 698280, 2, {920,759}},
+{ 698400, 2, {873,800}},
+{ 698436, 2, {892,783}},
+{ 698445, 2, {913,765}},
+{ 698464, 2, {949,736}},
+{ 698472, 2, {872,801}},
+{ 698490, 2, {995,702}},
+{ 698535, 2, {855,817}},
+{ 698544, 2, {882,792}},
+{ 698610, 2, {870,803}},
+{ 698616, 2, {939,744}},
+{ 698676, 2, {869,804}},
+{ 698763, 2, {897,779}},
+{ 698775, 2, {847,825}},
+{ 698784, 2, {928,753}},
+{ 698796, 2, {846,826}},
+{ 698880, 2, {840,832}},
+{ 698895, 2, {837,835}},
+{ 698920, 2, {865,808}},
+{ 699006, 2, {979,714}},
+{ 699050, 2, {902,775}},
+{ 699060, 2, {915,764}},
+{ 699072, 2, {993,704}},
+{ 699111, 2, {959,729}},
+{ 699125, 2, {875,799}},
+{ 699132, 2, {861,812}},
+{ 699180, 2, {860,813}},
+{ 699192, 2, {936,747}},
+{ 699200, 2, {874,800}},
+{ 699219, 2, {893,783}},
+{ 699270, 2, {858,815}},
+{ 699300, 2, {900,777}},
+{ 699335, 2, {1015,689}},
+{ 699360, 2, {930,752}},
+{ 699370, 2, {970,721}},
+{ 699435, 2, {891,785}},
+{ 699504, 2, {912,767}},
+{ 699545, 2, {869,805}},
+{ 699567, 2, {957,731}},
+{ 699576, 2, {849,824}},
+{ 699600, 2, {848,825}},
+{ 699612, 2, {1011,692}},
+{ 699660, 2, {845,828}},
+{ 699684, 2, {879,796}},
+{ 699696, 2, {904,774}},
+{ 699712, 2, {841,832}},
+{ 699720, 2, {840,833}},
+{ 699732, 2, {837,836}},
+{ 699776, 2, {896,781}},
+{ 699825, 2, {903,775}},
+{ 699840, 2, {864,810}},
+{ 699855, 2, {1261,555}},
+{ 699867, 2, {1127,621}},
+{ 699885, 2, {927,755}},
+{ 699936, 2, {951,736}},
+{ 699960, 2, {921,760}},
+{ 700000, 2, {875,800}},
+{ 700035, 2, {885,791}},
+{ 700068, 2, {908,771}},
+{ 700070, 2, {959,730}},
+{ 700077, 2, {901,777}},
+{ 700112, 2, {893,784}},
+{ 700128, 2, {858,816}},
+{ 700150, 2, {950,737}},
+{ 700280, 2, {854,820}},
+{ 700335, 2, {985,711}},
+{ 700336, 2, {962,728}},
+{ 700350, 2, {870,805}},
+{ 700362, 2, {949,738}},
+{ 700416, 2, {912,768}},
+{ 700434, 2, {918,763}},
+{ 700448, 2, {848,826}},
+{ 700470, 2, {905,774}},
+{ 700476, 2, {868,807}},
+{ 700524, 2, {957,732}},
+{ 700536, 2, {867,808}},
+{ 700553, 2, {841,833}},
+{ 700560, 2, {840,834}},
+{ 700590, 2, {965,726}},
+{ 700600, 2, {904,775}},
+{ 700625, 2, {1121,625}},
+{ 700632, 2, {888,789}},
+{ 700640, 2, {928,755}},
+{ 700650, 2, {865,810}},
+{ 700672, 2, {896,782}},
+{ 700728, 2, {903,776}},
+{ 700740, 2, {916,765}},
+{ 700785, 2, {895,783}},
+{ 700800, 2, {876,800}},
+{ 700812, 2, {927,756}},
+{ 700848, 2, {942,744}},
+{ 700872, 2, {1007,696}},
+{ 700875, 2, {875,801}},
+{ 700896, 2, {894,784}},
+{ 700910, 2, {1054,665}},
+{ 700920, 2, {885,792}},
+{ 700925, 2, {1219,575}},
+{ 700986, 2, {858,817}},
+{ 701040, 2, {920,762}},
+{ 701064, 2, {856,819}},
+{ 701100, 2, {855,820}},
+{ 701155, 2, {871,805}},
+{ 701184, 2, {913,768}},
+{ 701190, 2, {882,795}},
+{ 701220, 2, {870,806}},
+{ 701298, 2, {962,729}},
+{ 701316, 2, {847,828}},
+{ 701364, 2, {844,831}},
+{ 701376, 2, {843,832}},
+{ 701400, 2, {840,835}},
+{ 701415, 2, {981,715}},
+{ 701437, 2, {1331,527}},
+{ 701440, 2, {1024,685}},
+{ 701480, 2, {923,760}},
+{ 701505, 2, {917,765}},
+{ 701520, 2, {888,790}},
+{ 701556, 2, {969,724}},
+{ 701568, 2, {864,812}},
+{ 701592, 2, {943,744}},
+{ 701616, 2, {933,752}},
+{ 701676, 2, {876,801}},
+{ 701680, 2, {895,784}},
+{ 701748, 2, {909,772}},
+{ 701760, 2, {860,816}},
+{ 701778, 2, {1023,686}},
+{ 701784, 2, {972,722}},
+{ 701790, 2, {894,785}},
+{ 701796, 2, {932,753}},
+{ 701800, 2, {968,725}},
+{ 701805, 2, {885,793}},
+{ 701848, 2, {1057,664}},
+{ 701892, 2, {873,804}},
+{ 701960, 2, {872,805}},
+{ 701974, 2, {931,754}},
+{ 702075, 2, {851,825}},
+{ 702100, 2, {850,826}},
+{ 702108, 2, {891,788}},
+{ 702144, 2, {848,828}},
+{ 702150, 2, {906,775}},
+{ 702180, 2, {846,830}},
+{ 702240, 2, {840,836}},
+{ 702260, 2, {949,740}},
+{ 702261, 2, {1099,639}},
+{ 702270, 2, {867,810}},
+{ 702280, 2, {905,776}},
+{ 702310, 2, {889,790}},
+{ 702372, 2, {939,748}},
+{ 702396, 2, {981,716}},
+{ 702408, 2, {888,791}},
+{ 702429, 2, {1079,651}},
+{ 702432, 2, {864,813}},
+{ 702468, 2, {948,741}},
+{ 702513, 2, {1239,567}},
+{ 702576, 2, {861,816}},
+{ 702625, 2, {875,803}},
+{ 702630, 2, {1055,666}},
+{ 702650, 2, {1081,650}},
+{ 702660, 2, {956,735}},
+{ 702720, 2, {915,768}},
+{ 702744, 2, {987,712}},
+{ 702756, 2, {964,729}},
+{ 702765, 2, {873,805}},
+{ 702780, 2, {884,795}},
+{ 702848, 2, {1088,646}},
+{ 702900, 2, {852,825}},
+{ 702945, 2, {1107,635}},
+{ 702960, 2, {870,808}},
+{ 702972, 2, {849,828}},
+{ 702975, 2, {975,721}},
+{ 703000, 2, {925,760}},
+{ 703010, 2, {847,830}},
+{ 703018, 2, {899,782}},
+{ 703040, 2, {845,832}},
+{ 703044, 2, {993,708}},
+{ 703050, 2, {1075,654}},
+{ 703056, 2, {906,776}},
+{ 703076, 2, {841,836}},
+{ 703080, 2, {840,837}},
+{ 703098, 2, {954,737}},
+{ 703120, 2, {880,799}},
+{ 703136, 2, {1022,688}},
+{ 703150, 2, {1025,686}},
+{ 703152, 2, {912,771}},
+{ 703200, 2, {879,800}},
+{ 703222, 2, {962,731}},
+{ 703248, 2, {897,784}},
+{ 703280, 2, {944,745}},
+{ 703290, 2, {985,714}},
+{ 703296, 2, {864,814}},
+{ 703360, 2, {896,785}},
+{ 703395, 2, {957,735}},
+{ 703437, 2, {861,817}},
+{ 703470, 2, {895,786}},
+{ 703485, 2, {965,729}},
+{ 703494, 2, {969,726}},
+{ 703500, 2, {875,804}},
+{ 703632, 2, {856,822}},
+{ 703644, 2, {921,764}},
+{ 703656, 2, {1011,696}},
+{ 703703, 2, {1001,703}},
+{ 703704, 2, {872,807}},
+{ 703740, 2, {951,740}},
+{ 703764, 2, {1017,692}},
+{ 703788, 2, {892,789}},
+{ 703800, 2, {850,828}},
+{ 703824, 2, {946,744}},
+{ 703840, 2, {848,830}},
+{ 703872, 2, {846,832}},
+{ 703890, 2, {869,810}},
+{ 703990, 2, {890,791}},
+{ 704004, 2, {867,812}},
+{ 704025, 2, {945,745}},
+{ 704060, 2, {940,749}},
+{ 704088, 2, {889,792}},
+{ 704099, 2, {1331,529}},
+{ 704106, 2, {918,767}},
+{ 704158, 2, {949,742}},
+{ 704160, 2, {864,815}},
+{ 704165, 2, {1085,649}},
+{ 704172, 2, {996,707}},
+{ 704184, 2, {888,793}},
+{ 704214, 2, {966,729}},
+{ 704256, 2, {896,786}},
+{ 704295, 2, {999,705}},
+{ 704320, 2, {992,710}},
+{ 704340, 2, {860,819}},
+{ 704352, 2, {928,759}},
+{ 704375, 2, {875,805}},
+{ 704460, 2, {885,796}},
+{ 704475, 2, {909,775}},
+{ 704520, 2, {855,824}},
+{ 704522, 2, {1027,686}},
+{ 704550, 2, {854,825}},
+{ 704628, 2, {851,828}},
+{ 704688, 2, {848,831}},
+{ 704700, 2, {870,810}},
+{ 704704, 2, {847,832}},
+{ 704718, 2, {846,833}},
+{ 704730, 2, {845,834}},
+{ 704748, 2, {843,836}},
+{ 704781, 2, {891,791}},
+{ 704790, 2, {955,738}},
+{ 704808, 2, {936,753}},
+{ 704847, 2, {1023,689}},
+{ 704850, 2, {925,762}},
+{ 704865, 2, {959,735}},
+{ 704880, 2, {880,801}},
+{ 704900, 2, {950,742}},
+{ 704907, 2, {1169,603}},
+{ 704916, 2, {963,732}},
+{ 704990, 2, {935,754}},
+{ 705012, 2, {924,763}},
+{ 705160, 2, {1037,680}},
+{ 705168, 2, {944,747}},
+{ 705180, 2, {876,805}},
+{ 705243, 2, {903,781}},
+{ 705250, 2, {875,806}},
+{ 705348, 2, {933,756}},
+{ 705376, 2, {938,752}},
+{ 705384, 2, {873,808}},
+{ 705408, 2, {1002,704}},
+{ 705425, 2, {973,725}},
+{ 705483, 2, {901,783}},
+{ 705510, 2, {871,810}},
+{ 705516, 2, {908,777}},
+{ 705628, 2, {869,812}},
+{ 705640, 2, {920,767}},
+{ 705672, 2, {891,792}},
+{ 705684, 2, {868,813}},
+{ 705744, 2, {936,754}},
+{ 705755, 2, {1615,437}},
+{ 705775, 2, {925,763}},
+{ 705824, 2, {959,736}},
+{ 705831, 2, {1159,609}},
+{ 705840, 2, {865,816}},
+{ 705888, 2, {864,817}},
+{ 705900, 2, {905,780}},
+{ 705960, 2, {888,795}},
+{ 706020, 2, {861,820}},
+{ 706090, 2, {917,770}},
+{ 706095, 2, {923,765}},
+{ 706120, 2, {1016,695}},
+{ 706128, 2, {939,752}},
+{ 706200, 2, {856,825}},
+{ 706225, 2, {1025,689}},
+{ 706230, 2, {855,826}},
+{ 706236, 2, {916,771}},
+{ 706266, 2, {902,783}},
+{ 706275, 2, {1075,657}},
+{ 706316, 2, {884,799}},
+{ 706320, 2, {872,810}},
+{ 706335, 2, {961,735}},
+{ 706368, 2, {849,832}},
+{ 706380, 2, {915,772}},
+{ 706384, 2, {848,833}},
+{ 706401, 2, {969,729}},
+{ 706410, 2, {846,835}},
+{ 706428, 2, {844,837}},
+{ 706440, 2, {841,840}},
+{ 706500, 2, {900,785}},
+{ 706552, 2, {868,814}},
+{ 706560, 2, {920,768}},
+{ 706563, 2, {891,793}},
+{ 706576, 2, {1027,688}},
+{ 706580, 2, {980,721}},
+{ 706596, 2, {1111,636}},
+{ 706629, 2, {931,759}},
+{ 706640, 2, {880,803}},
+{ 706662, 2, {913,774}},
+{ 706692, 2, {987,716}},
+{ 706716, 2, {879,804}},
+{ 706755, 2, {889,795}},
+{ 706758, 2, {1014,697}},
+{ 706800, 2, {912,775}},
+{ 706815, 2, {1017,695}},
+{ 706836, 2, {897,788}},
+{ 706860, 2, {918,770}},
+{ 706932, 2, {876,807}},
+{ 706944, 2, {896,789}},
+{ 706992, 2, {858,824}},
+{ 707000, 2, {875,808}},
+{ 707016, 2, {993,712}},
+{ 707049, 2, {903,783}},
+{ 707112, 2, {854,828}},
+{ 707135, 2, {989,715}},
+{ 707136, 2, {928,762}},
+{ 707160, 2, {852,830}},
+{ 707168, 2, {902,784}},
+{ 707200, 2, {850,832}},
+{ 707232, 2, {848,834}},
+{ 707234, 2, {1037,682}},
+{ 707250, 2, {943,750}},
+{ 707252, 2, {871,812}},
+{ 707265, 2, {845,837}},
+{ 707292, 2, {999,708}},
+{ 707296, 2, {961,736}},
+{ 707301, 2, {927,763}},
+{ 707319, 2, {1139,621}},
+{ 707328, 2, {921,768}},
+{ 707350, 2, {1075,658}},
+{ 707388, 2, {932,759}},
+{ 707445, 2, {995,711}},
+{ 707455, 2, {1015,697}},
+{ 707472, 2, {867,816}},
+{ 707520, 2, {880,804}},
+{ 707544, 2, {951,744}},
+{ 707560, 2, {931,760}},
+{ 707575, 2, {913,775}},
+{ 707600, 2, {976,725}},
+{ 707616, 2, {864,819}},
+{ 707625, 2, {925,765}},
+{ 707700, 2, {1011,700}},
+{ 707805, 2, {945,749}},
+{ 707820, 2, {940,753}},
+{ 707832, 2, {904,783}},
+{ 707840, 2, {896,790}},
+{ 707850, 2, {858,825}},
+{ 707916, 2, {1023,692}},
+{ 707940, 2, {855,828}},
+{ 707952, 2, {903,784}},
+{ 708000, 2, {885,800}},
+{ 708012, 2, {852,831}},
+{ 708032, 2, {851,832}},
+{ 708048, 2, {894,792}},
+{ 708050, 2, {850,833}},
+{ 708080, 2, {848,835}},
+{ 708084, 2, {884,801}},
+{ 708120, 2, {843,840}},
+{ 708125, 2, {1133,625}},
+{ 708156, 2, {948,747}},
+{ 708180, 2, {870,814}},
+{ 708210, 2, {915,774}},
+{ 708228, 2, {927,764}},
+{ 708246, 2, {882,803}},
+{ 708288, 2, {868,816}},
+{ 708339, 2, {867,817}},
+{ 708344, 2, {973,728}},
+{ 708345, 2, {891,795}},
+{ 708384, 2, {942,752}},
+{ 708396, 2, {956,741}},
+{ 708400, 2, {880,805}},
+{ 708435, 2, {865,819}},
+{ 708480, 2, {864,820}},
+{ 708510, 2, {1045,678}},
+{ 708540, 2, {964,735}},
+{ 708561, 2, {1141,621}},
+{ 708615, 2, {905,783}},
+{ 708624, 2, {888,798}},
+{ 708736, 2, {896,791}},
+{ 708750, 2, {875,810}},
+{ 708840, 2, {895,792}},
+{ 708864, 2, {852,832}},
+{ 708876, 2, {873,812}},
+{ 708883, 2, {851,833}},
+{ 708890, 2, {910,779}},
+{ 708936, 2, {872,813}},
+{ 708939, 2, {847,837}},
+{ 708975, 2, {1035,685}},
+{ 708981, 2, {1029,689}},
+{ 708994, 2, {871,814}},
+{ 709020, 2, {909,780}},
+{ 709050, 2, {870,815}},
+{ 709080, 2, {933,760}},
+{ 709104, 2, {869,816}},
+{ 709140, 2, {892,795}},
+{ 709156, 2, {868,817}},
+{ 709236, 2, {891,796}},
+{ 709240, 2, {952,745}},
+{ 709280, 2, {880,806}},
+{ 709290, 2, {999,710}},
+{ 709308, 2, {969,732}},
+{ 709317, 2, {973,729}},
+{ 709320, 2, {920,771}},
+{ 709324, 2, {1034,686}},
+{ 709371, 2, {1161,611}},
+{ 709401, 2, {913,777}},
+{ 709423, 2, {1331,533}},
+{ 709464, 2, {861,824}},
+{ 709475, 2, {925,767}},
+{ 709500, 2, {860,825}},
+{ 709512, 2, {888,799}},
+{ 709520, 2, {905,784}},
+{ 709590, 2, {930,763}},
+{ 709631, 2, {2197,323}},
+{ 709632, 2, {896,792}},
+{ 709640, 2, {904,785}},
+{ 709660, 2, {959,740}},
+{ 709716, 2, {852,833}},
+{ 709764, 2, {849,836}},
+{ 709775, 2, {979,725}},
+{ 709776, 2, {848,837}},
+{ 709800, 2, {845,840}},
+{ 709884, 2, {939,756}},
+{ 709920, 2, {870,816}},
+{ 709982, 2, {1079,658}},
+{ 710010, 2, {882,805}},
+{ 710040, 2, {915,776}},
+{ 710052, 2, {948,749}},
+{ 710073, 2, {867,819}},
+{ 710100, 2, {900,789}},
+{ 710160, 2, {880,807}},
+{ 710208, 2, {864,822}},
+{ 710232, 2, {879,808}},
+{ 710244, 2, {981,724}},
+{ 710290, 2, {973,730}},
+{ 710304, 2, {906,784}},
+{ 710325, 2, {861,825}},
+{ 710360, 2, {860,826}},
+{ 710400, 2, {888,800}},
+{ 710430, 2, {995,714}},
+{ 710448, 2, {912,779}},
+{ 710451, 2, {1253,567}},
+{ 710500, 2, {875,812}},
+{ 710528, 2, {854,832}},
+{ 710535, 2, {1005,707}},
+{ 710544, 2, {904,786}},
+{ 710600, 2, {850,836}},
+{ 710640, 2, {846,840}},
+{ 710645, 2, {845,841}},
+{ 710655, 2, {885,803}},
+{ 710675, 2, {917,775}},
+{ 710680, 2, {872,815}},
+{ 710710, 2, {910,781}},
+{ 710736, 2, {871,816}},
+{ 710775, 2, {975,729}},
+{ 710790, 2, {870,817}},
+{ 710832, 2, {944,753}},
+{ 710892, 2, {868,819}},
+{ 710940, 2, {867,820}},
+{ 710964, 2, {908,783}},
+{ 710976, 2, {966,736}},
+{ 710988, 2, {993,716}},
+{ 711000, 2, {900,790}},
+{ 711012, 2, {921,772}},
+{ 711018, 2, {891,798}},
+{ 711022, 2, {943,754}},
+{ 711030, 2, {865,822}},
+{ 711048, 2, {1032,689}},
+{ 711144, 2, {952,747}},
+{ 711200, 2, {889,800}},
+{ 711210, 2, {906,785}},
+{ 711225, 2, {981,725}},
+{ 711260, 2, {1060,671}},
+{ 711288, 2, {888,801}},
+{ 711330, 2, {905,786}},
+{ 711336, 2, {856,831}},
+{ 711348, 2, {951,748}},
+{ 711360, 2, {855,832}},
+{ 711399, 2, {1073,663}},
+{ 711420, 2, {852,835}},
+{ 711436, 2, {851,836}},
+{ 711450, 2, {850,837}},
+{ 711480, 2, {847,840}},
+{ 711492, 2, {844,843}},
+{ 711495, 2, {873,815}},
+{ 711540, 2, {885,804}},
+{ 711550, 2, {950,749}},
+{ 711555, 2, {1157,615}},
+{ 711564, 2, {903,788}},
+{ 711592, 2, {917,776}},
+{ 711680, 2, {1024,695}},
+{ 711711, 2, {869,819}},
+{ 711725, 2, {1225,581}},
+{ 711732, 2, {916,777}},
+{ 711744, 2, {1011,704}},
+{ 711750, 2, {949,750}},
+{ 711776, 2, {928,767}},
+{ 711875, 2, {1139,625}},
+{ 711900, 2, {900,791}},
+{ 711909, 2, {891,799}},
+{ 711984, 2, {978,728}},
+{ 712000, 2, {890,800}},
+{ 712008, 2, {899,792}},
+{ 712068, 2, {1029,692}},
+{ 712080, 2, {860,828}},
+{ 712089, 2, {889,801}},
+{ 712101, 2, {961,741}},
+{ 712125, 2, {1055,675}},
+{ 712166, 2, {1118,637}},
+{ 712170, 2, {965,738}},
+{ 712188, 2, {876,813}},
+{ 712215, 2, {855,833}},
+{ 712250, 2, {875,814}},
+{ 712287, 2, {851,837}},
+{ 712327, 2, {847,841}},
+{ 712368, 2, {873,816}},
+{ 712400, 2, {1040,685}},
+{ 712404, 2, {924,771}},
+{ 712426, 2, {1034,689}},
+{ 712470, 2, {935,762}},
+{ 712480, 2, {976,730}},
+{ 712580, 2, {869,820}},
+{ 712602, 2, {1062,671}},
+{ 712614, 2, {893,798}},
+{ 712620, 2, {963,740}},
+{ 712656, 2, {882,808}},
+{ 712712, 2, {979,728}},
+{ 712720, 2, {944,755}},
+{ 712725, 2, {975,731}},
+{ 712760, 2, {865,824}},
+{ 712800, 2, {864,825}},
+{ 712812, 2, {933,764}},
+{ 712845, 2, {1085,657}},
+{ 712880, 2, {938,760}},
+{ 712896, 2, {948,752}},
+{ 712908, 2, {861,828}},
+{ 712975, 2, {1501,475}},
+{ 712980, 2, {932,765}},
+{ 713000, 2, {920,775}},
+{ 713031, 2, {1023,697}},
+{ 713048, 2, {856,833}},
+{ 713124, 2, {852,837}},
+{ 713160, 2, {849,840}},
+{ 713184, 2, {874,816}},
+{ 713232, 2, {936,762}},
+{ 713256, 2, {904,789}},
+{ 713286, 2, {918,777}},
+{ 713295, 2, {1089,655}},
+{ 713349, 2, {871,819}},
+{ 713385, 2, {955,747}},
+{ 713388, 2, {884,807}},
+{ 713424, 2, {1002,712}},
+{ 713440, 2, {910,784}},
+{ 713460, 2, {940,759}},
+{ 713475, 2, {945,755}},
+{ 713545, 2, {1015,703}},
+{ 713565, 2, {909,785}},
+{ 713575, 2, {1241,575}},
+{ 713592, 2, {901,792}},
+{ 713640, 2, {939,760}},
+{ 713648, 2, {949,752}},
+{ 713664, 2, {864,826}},
+{ 713700, 2, {900,793}},
+{ 713713, 2, {1001,713}},
+{ 713728, 2, {1024,697}},
+{ 713748, 2, {879,812}},
+{ 713830, 2, {1105,646}},
+{ 713844, 2, {948,753}},
+{ 713856, 2, {858,832}},
+{ 713900, 2, {1100,649}},
+{ 713904, 2, {856,834}},
+{ 713925, 2, {855,835}},
+{ 713940, 2, {876,815}},
+{ 714000, 2, {850,840}},
+{ 714012, 2, {897,796}},
+{ 714015, 2, {1107,645}},
+{ 714077, 2, {931,767}},
+{ 714096, 2, {912,783}},
+{ 714132, 2, {956,747}},
+{ 714168, 2, {872,819}},
+{ 714175, 2, {1225,583}},
+{ 714210, 2, {895,798}},
+{ 714220, 2, {871,820}},
+{ 714240, 2, {930,768}},
+{ 714285, 2, {999,715}},
+{ 714324, 2, {964,741}},
+{ 714357, 2, {1071,667}},
+{ 714375, 2, {1125,635}},
+{ 714384, 2, {902,792}},
+{ 714400, 2, {893,800}},
+{ 714402, 2, {923,774}},
+{ 714408, 2, {867,824}},
+{ 714420, 2, {882,810}},
+{ 714492, 2, {892,801}},
+{ 714546, 2, {954,749}},
+{ 714560, 2, {880,812}},
+{ 714588, 2, {987,724}},
+{ 714615, 2, {915,781}},
+{ 714660, 2, {860,831}},
+{ 714696, 2, {921,776}},
+{ 714725, 2, {1243,575}},
+{ 714756, 2, {889,804}},
+{ 714760, 2, {856,835}},
+{ 714780, 2, {855,836}},
+{ 714798, 2, {854,837}},
+{ 714816, 2, {876,816}},
+{ 714840, 2, {851,840}},
+{ 714850, 2, {850,841}},
+{ 714864, 2, {848,843}},
+{ 714870, 2, {846,845}},
+{ 714875, 2, {875,817}},
+{ 714879, 2, {913,783}},
+{ 714960, 2, {993,720}},
+{ 715000, 2, {1000,715}},
+{ 715008, 2, {896,798}},
+{ 715080, 2, {885,808}},
+{ 715110, 2, {985,726}},
+{ 715122, 2, {918,779}},
+{ 715152, 2, {951,752}},
+{ 715155, 2, {973,735}},
+{ 715176, 2, {903,792}},
+{ 715200, 2, {894,800}},
+{ 715208, 2, {1058,676}},
+{ 715225, 2, {1525,469}},
+{ 715275, 2, {867,825}},
+{ 715284, 2, {999,716}},
+{ 715286, 2, {902,793}},
+{ 715290, 2, {1055,678}},
+{ 715325, 2, {923,775}},
+{ 715392, 2, {864,828}},
+{ 715440, 2, {880,813}},
+{ 715473, 2, {891,803}},
+{ 715488, 2, {928,771}},
+{ 715500, 2, {900,795}},
+{ 715520, 2, {860,832}},
+{ 715560, 2, {890,804}},
+{ 715575, 2, {987,725}},
+{ 715644, 2, {927,772}},
+{ 715715, 2, {847,845}},
+{ 715737, 2, {943,759}},
+{ 715788, 2, {1011,708}},
+{ 715792, 2, {913,784}},
+{ 715806, 2, {874,819}},
+{ 715836, 2, {957,748}},
+{ 715860, 2, {873,820}},
+{ 715904, 2, {896,799}},
+{ 715920, 2, {912,785}},
+{ 715950, 2, {925,774}},
+{ 716000, 2, {895,800}},
+{ 716040, 2, {884,810}},
+{ 716079, 2, {903,793}},
+{ 716100, 2, {868,825}},
+{ 716128, 2, {973,736}},
+{ 716220, 2, {865,828}},
+{ 716250, 2, {955,750}},
+{ 716292, 2, {909,788}},
+{ 716300, 2, {950,754}},
+{ 716320, 2, {880,814}},
+{ 716352, 2, {861,832}},
+{ 716364, 2, {891,804}},
+{ 716373, 2, {959,747}},
+{ 716380, 2, {860,833}},
+{ 716412, 2, {908,789}},
+{ 716430, 2, {858,835}},
+{ 716445, 2, {915,783}},
+{ 716472, 2, {856,837}},
+{ 716496, 2, {944,759}},
+{ 716544, 2, {933,768}},
+{ 716556, 2, {849,844}},
+{ 716560, 2, {848,845}},
+{ 716562, 2, {847,846}},
+{ 716595, 2, {1111,645}},
+{ 716616, 2, {888,807}},
+{ 716625, 2, {875,819}},
+{ 716628, 2, {979,732}},
+{ 716703, 2, {897,799}},
+{ 716720, 2, {1054,680}},
+{ 716760, 2, {905,792}},
+{ 716784, 2, {872,822}},
+{ 716832, 2, {912,786}},
+{ 716850, 2, {885,810}},
+{ 716856, 2, {952,753}},
+{ 716870, 2, {931,770}},
+{ 716880, 2, {870,824}},
+{ 716895, 2, {895,801}},
+{ 716925, 2, {869,825}},
+{ 716958, 2, {918,781}},
+{ 717025, 2, {989,725}},
+{ 717060, 2, {969,740}},
+{ 717120, 2, {864,830}},
+{ 717145, 2, {935,767}},
+{ 717171, 2, {923,777}},
+{ 717200, 2, {880,815}},
+{ 717220, 2, {940,763}},
+{ 717228, 2, {916,783}},
+{ 717255, 2, {891,805}},
+{ 717264, 2, {879,816}},
+{ 717360, 2, {854,840}},
+{ 717396, 2, {939,764}},
+{ 717402, 2, {899,798}},
+{ 717408, 2, {848,846}},
+{ 717435, 2, {963,745}},
+{ 717444, 2, {876,819}},
+{ 717535, 2, {1079,665}},
+{ 717552, 2, {906,792}},
+{ 717570, 2, {938,765}},
+{ 717584, 2, {1043,688}},
+{ 717600, 2, {897,800}},
+{ 717696, 2, {896,801}},
+{ 717794, 2, {869,826}},
+{ 717800, 2, {925,776}},
+{ 717876, 2, {867,828}},
+{ 717880, 2, {1048,685}},
+{ 717912, 2, {936,767}},
+{ 717948, 2, {882,814}},
+{ 717984, 2, {864,831}},
+{ 718011, 2, {917,783}},
+{ 718065, 2, {985,729}},
+{ 718092, 2, {981,732}},
+{ 718116, 2, {996,721}},
+{ 718165, 2, {1207,595}},
+{ 718200, 2, {855,840}},
+{ 718236, 2, {852,843}},
+{ 718256, 2, {848,847}},
+{ 718272, 2, {928,774}},
+{ 718312, 2, {889,808}},
+{ 718380, 2, {921,780}},
+{ 718389, 2, {1267,567}},
+{ 718425, 2, {927,775}},
+{ 718443, 2, {1107,649}},
+{ 718487, 2, {1333,539}},
+{ 718520, 2, {920,781}},
+{ 718536, 2, {987,728}},
+{ 718572, 2, {932,771}},
+{ 718575, 2, {871,825}},
+{ 718580, 2, {1159,620}},
+{ 718620, 2, {870,826}},
+{ 718641, 2, {1037,693}},
+{ 718675, 2, {1513,475}},
+{ 718680, 2, {904,795}},
+{ 718692, 2, {884,813}},
+{ 718704, 2, {868,828}},
+{ 718760, 2, {952,755}},
+{ 718788, 2, {903,796}},
+{ 718828, 2, {961,748}},
+{ 718830, 2, {882,815}},
+{ 718865, 2, {893,805}},
+{ 718875, 2, {1065,675}},
+{ 718928, 2, {917,784}},
+{ 718932, 2, {993,724}},
+{ 718956, 2, {951,756}},
+{ 718998, 2, {901,798}},
+{ 719019, 2, {909,791}},
+{ 719026, 2, {1078,667}},
+{ 719055, 2, {855,841}},
+{ 719095, 2, {851,845}},
+{ 719100, 2, {850,846}},
+{ 719169, 2, {1023,703}},
+{ 719200, 2, {899,800}},
+{ 719250, 2, {875,822}},
+{ 719264, 2, {988,728}},
+{ 719280, 2, {888,810}},
+{ 719304, 2, {984,731}},
+{ 719312, 2, {976,737}},
+{ 719325, 2, {1035,695}},
+{ 719328, 2, {944,762}},
+{ 719345, 2, {1189,605}},
+{ 719352, 2, {873,824}},
+{ 719400, 2, {872,825}},
+{ 719433, 2, {1287,559}},
+{ 719446, 2, {871,826}},
+{ 719488, 2, {896,803}},
+{ 719523, 2, {987,729}},
+{ 719532, 2, {869,828}},
+{ 719550, 2, {975,738}},
+{ 719565, 2, {979,735}},
+{ 719568, 2, {912,789}},
+{ 719580, 2, {895,804}},
+{ 719664, 2, {957,752}},
+{ 719670, 2, {894,805}},
+{ 719680, 2, {865,832}},
+{ 719712, 2, {864,833}},
+{ 719739, 2, {1159,621}},
+{ 719758, 2, {893,806}},
+{ 719796, 2, {861,836}},
+{ 719808, 2, {978,736}},
+{ 719810, 2, {910,791}},
+{ 719820, 2, {860,837}},
+{ 719832, 2, {1011,712}},
+{ 719844, 2, {892,807}},
+{ 719868, 2, {956,753}},
+{ 719872, 2, {1024,703}},
+{ 719928, 2, {891,808}},
+{ 719940, 2, {852,845}},
+{ 719950, 2, {850,847}},
+{ 719952, 2, {849,848}},
+{ 719992, 2, {989,728}},
+{ 720000, 2, {900,800}},
+{ 720005, 2, {1007,715}},
+{ 720020, 2, {973,740}},
+{ 720036, 2, {1017,708}},
+{ 720090, 2, {889,810}},
+{ 720108, 2, {964,747}},
+{ 720153, 2, {1127,639}},
+{ 720252, 2, {972,741}},
+{ 720276, 2, {933,772}},
+{ 720288, 2, {976,738}},
+{ 720324, 2, {963,748}},
+{ 720360, 2, {870,828}},
+{ 720384, 2, {896,804}},
+{ 720447, 2, {1131,637}},
+{ 720480, 2, {912,790}},
+{ 720544, 2, {979,736}},
+{ 720575, 2, {925,779}},
+{ 720576, 2, {864,834}},
+{ 720588, 2, {1133,636}},
+{ 720594, 2, {882,817}},
+{ 720630, 2, {918,785}},
+{ 720650, 2, {994,725}},
+{ 720657, 2, {861,837}},
+{ 720698, 2, {902,799}},
+{ 720720, 2, {858,840}},
+{ 720780, 2, {879,820}},
+{ 720797, 2, {851,847}},
+{ 720800, 2, {850,848}},
+{ 720855, 2, {965,747}},
+{ 720900, 2, {890,810}},
+{ 720936, 2, {969,744}},
+{ 720944, 2, {1099,656}},
+{ 720980, 2, {940,767}},
+{ 720981, 2, {989,729}},
+{ 721000, 2, {875,824}},
+{ 721020, 2, {915,788}},
+{ 721035, 2, {945,763}},
+{ 721050, 2, {874,825}},
+{ 721152, 2, {939,768}},
+{ 721160, 2, {968,745}},
+{ 721168, 2, {959,752}},
+{ 721188, 2, {871,828}},
+{ 721240, 2, {949,760}},
+{ 721259, 2, {1309,551}},
+{ 721280, 2, {896,805}},
+{ 721305, 2, {1053,685}},
+{ 721308, 2, {868,831}},
+{ 721325, 2, {1075,671}},
+{ 721344, 2, {867,832}},
+{ 721392, 2, {904,798}},
+{ 721395, 2, {943,765}},
+{ 721410, 2, {865,834}},
+{ 721440, 2, {864,835}},
+{ 721497, 2, {903,799}},
+{ 721500, 2, {925,780}},
+{ 721525, 2, {931,775}},
+{ 721556, 2, {1012,713}},
+{ 721578, 2, {858,841}},
+{ 721608, 2, {856,843}},
+{ 721620, 2, {855,844}},
+{ 721644, 2, {852,847}},
+{ 721656, 2, {936,771}},
+{ 721665, 2, {1015,711}},
+{ 721680, 2, {930,776}},
+{ 721860, 2, {908,795}},
+{ 721920, 2, {940,768}},
+{ 721944, 2, {888,813}},
+{ 721968, 2, {1014,712}},
+{ 721980, 2, {945,764}},
+{ 722007, 2, {1089,663}},
+{ 722043, 2, {1099,657}},
+{ 722064, 2, {921,784}},
+{ 722092, 2, {1036,697}},
+{ 722160, 2, {885,816}},
+{ 722176, 2, {868,832}},
+{ 722190, 2, {905,798}},
+{ 722200, 2, {920,785}},
+{ 722228, 2, {884,817}},
+{ 722304, 2, {864,836}},
+{ 722337, 2, {1113,649}},
+{ 722352, 2, {894,808}},
+{ 722361, 2, {1083,667}},
+{ 722370, 2, {995,726}},
+{ 722400, 2, {860,840}},
+{ 722425, 2, {925,781}},
+{ 722448, 2, {1038,696}},
+{ 722456, 2, {931,776}},
+{ 722475, 2, {855,845}},
+{ 722484, 2, {854,846}},
+{ 722496, 2, {852,848}},
+{ 722568, 2, {924,782}},
+{ 722610, 2, {930,777}},
+{ 722700, 2, {876,825}},
+{ 722709, 2, {923,783}},
+{ 722722, 2, {1001,722}},
+{ 722724, 2, {916,789}},
+{ 722750, 2, {875,826}},
+{ 722760, 2, {951,760}},
+{ 722799, 2, {1043,693}},
+{ 722800, 2, {1040,695}},
+{ 722844, 2, {873,828}},
+{ 722880, 2, {960,753}},
+{ 722904, 2, {993,728}},
+{ 722912, 2, {928,779}},
+{ 723008, 2, {869,832}},
+{ 723060, 2, {927,780}},
+{ 723072, 2, {896,807}},
+{ 723096, 2, {913,792}},
+{ 723120, 2, {920,786}},
+{ 723125, 2, {1157,625}},
+{ 723135, 2, {1065,679}},
+{ 723160, 2, {895,808}},
+{ 723168, 2, {864,837}},
+{ 723216, 2, {912,793}},
+{ 723240, 2, {861,840}},
+{ 723276, 2, {999,724}},
+{ 723320, 2, {856,845}},
+{ 723324, 2, {948,763}},
+{ 723348, 2, {852,849}},
+{ 723350, 2, {851,850}},
+{ 723360, 2, {880,822}},
+{ 723456, 2, {942,768}},
+{ 723492, 2, {891,812}},
+{ 723564, 2, {909,796}},
+{ 723632, 2, {923,784}},
+{ 723690, 2, {935,774}},
+{ 723695, 2, {899,805}},
+{ 723720, 2, {888,815}},
+{ 723750, 2, {965,750}},
+{ 723765, 2, {915,791}},
+{ 723840, 2, {870,832}},
+{ 723855, 2, {1177,615}},
+{ 723876, 2, {1011,716}},
+{ 723877, 2, {869,833}},
+{ 723905, 2, {1295,559}},
+{ 723996, 2, {884,819}},
+{ 724000, 2, {905,800}},
+{ 724005, 2, {865,837}},
+{ 724008, 2, {933,776}},
+{ 724035, 2, {1027,705}},
+{ 724104, 2, {904,801}},
+{ 724160, 2, {992,730}},
+{ 724164, 2, {932,777}},
+{ 724176, 2, {856,846}},
+{ 724185, 2, {855,847}},
+{ 724192, 2, {854,848}},
+{ 724200, 2, {852,850}},
+{ 724224, 2, {943,768}},
+{ 724275, 2, {925,783}},
+{ 724284, 2, {1023,708}},
+{ 724296, 2, {879,824}},
+{ 724375, 2, {1159,625}},
+{ 724416, 2, {924,784}},
+{ 724430, 2, {917,790}},
+{ 724464, 2, {936,774}},
+{ 724470, 2, {930,779}},
+{ 724500, 2, {875,828}},
+{ 724536, 2, {1041,696}},
+{ 724605, 2, {1005,721}},
+{ 724626, 2, {994,729}},
+{ 724632, 2, {872,831}},
+{ 724672, 2, {871,832}},
+{ 724675, 2, {1025,707}},
+{ 724680, 2, {915,792}},
+{ 724710, 2, {870,833}},
+{ 724740, 2, {940,771}},
+{ 724768, 2, {928,781}},
+{ 724776, 2, {897,808}},
+{ 724800, 2, {906,800}},
+{ 724812, 2, {867,836}},
+{ 724850, 2, {950,763}},
+{ 724905, 2, {905,801}},
+{ 724908, 2, {939,772}},
+{ 724950, 2, {895,810}},
+{ 724980, 2, {860,843}},
+{ 725000, 2, {1000,725}},
+{ 725010, 2, {858,845}},
+{ 725032, 2, {856,847}},
+{ 725040, 2, {855,848}},
+{ 725075, 2, {1261,575}},
+{ 725085, 2, {1107,655}},
+{ 725109, 2, {903,803}},
+{ 725116, 2, {893,812}},
+{ 725152, 2, {992,731}},
+{ 725172, 2, {1068,679}},
+{ 725196, 2, {892,813}},
+{ 725200, 2, {925,784}},
+{ 725220, 2, {918,790}},
+{ 725249, 2, {931,779}},
+{ 725274, 2, {891,814}},
+{ 725305, 2, {901,805}},
+{ 725340, 2, {924,785}},
+{ 725355, 2, {995,729}},
+{ 725400, 2, {900,806}},
+{ 725424, 2, {889,816}},
+{ 725496, 2, {888,817}},
+{ 725517, 2, {1053,689}},
+{ 725536, 2, {1106,656}},
+{ 725543, 2, {871,833}},
+{ 725560, 2, {935,776}},
+{ 725582, 2, {946,767}},
+{ 725604, 2, {956,759}},
+{ 725625, 2, {1075,675}},
+{ 725700, 2, {885,820}},
+{ 725725, 2, {1001,725}},
+{ 725748, 2, {921,788}},
+{ 725760, 2, {864,840}},
+{ 725788, 2, {1058,686}},
+{ 725835, 2, {913,795}},
+{ 725880, 2, {920,789}},
+{ 725892, 2, {964,753}},
+{ 725900, 2, {854,850}},
+{ 725940, 2, {981,740}},
+{ 725949, 2, {1169,621}},
+{ 725985, 2, {949,765}},
+{ 726000, 2, {880,825}},
+{ 726012, 2, {903,804}},
+{ 726084, 2, {972,747}},
+{ 726110, 2, {902,805}},
+{ 726138, 2, {918,791}},
+{ 726165, 2, {891,815}},
+{ 726206, 2, {901,806}},
+{ 726240, 2, {890,816}},
+{ 726264, 2, {917,792}},
+{ 726300, 2, {900,807}},
+{ 726327, 2, {1281,567}},
+{ 726330, 2, {930,781}},
+{ 726336, 2, {873,832}},
+{ 726376, 2, {872,833}},
+{ 726418, 2, {979,742}},
+{ 726432, 2, {966,752}},
+{ 726440, 2, {1016,715}},
+{ 726450, 2, {870,835}},
+{ 726516, 2, {868,837}},
+{ 726528, 2, {946,768}},
+{ 726530, 2, {970,749}},
+{ 726564, 2, {951,764}},
+{ 726570, 2, {897,810}},
+{ 726600, 2, {865,840}},
+{ 726624, 2, {864,841}},
+{ 726684, 2, {861,844}},
+{ 726744, 2, {856,849}},
+{ 726768, 2, {882,824}},
+{ 726831, 2, {973,747}},
+{ 726869, 2, {1859,391}},
+{ 726876, 2, {993,732}},
+{ 726880, 2, {880,826}},
+{ 726902, 2, {893,814}},
+{ 726930, 2, {985,738}},
+{ 726950, 2, {938,775}},
+{ 727040, 2, {1024,710}},
+{ 727050, 2, {925,786}},
+{ 727056, 2, {891,816}},
+{ 727065, 2, {963,755}},
+{ 727080, 2, {876,830}},
+{ 727090, 2, {910,799}},
+{ 727111, 2, {931,781}},
+{ 727120, 2, {976,745}},
+{ 727155, 2, {1017,715}},
+{ 727160, 2, {980,742}},
+{ 727168, 2, {874,832}},
+{ 727175, 2, {1003,725}},
+{ 727209, 2, {873,833}},
+{ 727216, 2, {1057,688}},
+{ 727248, 2, {872,834}},
+{ 727272, 2, {888,819}},
+{ 727308, 2, {908,801}},
+{ 727353, 2, {869,837}},
+{ 727415, 2, {1235,589}},
+{ 727419, 2, {987,737}},
+{ 727552, 2, {896,812}},
+{ 727584, 2, {858,848}},
+{ 727605, 2, {855,851}},
+{ 727620, 2, {905,804}},
+{ 727632, 2, {978,744}},
+{ 727650, 2, {882,825}},
+{ 727695, 2, {927,785}},
+{ 727710, 2, {955,762}},
+{ 727720, 2, {904,805}},
+{ 727740, 2, {933,780}},
+{ 727776, 2, {912,798}},
+{ 727812, 2, {879,828}},
+{ 727824, 2, {944,771}},
+{ 727902, 2, {954,763}},
+{ 727904, 2, {989,736}},
+{ 727920, 2, {1011,720}},
+{ 727947, 2, {891,817}},
+{ 727950, 2, {1055,690}},
+{ 727956, 2, {876,831}},
+{ 727974, 2, {918,793}},
+{ 728000, 2, {875,832}},
+{ 728028, 2, {963,756}},
+{ 728035, 2, {1085,671}},
+{ 728042, 2, {874,833}},
+{ 728064, 2, {948,768}},
+{ 728091, 2, {889,819}},
+{ 728120, 2, {872,835}},
+{ 728156, 2, {871,836}},
+{ 728160, 2, {888,820}},
+{ 728172, 2, {1017,716}},
+{ 728178, 2, {1003,726}},
+{ 728210, 2, {1010,721}},
+{ 728220, 2, {916,795}},
+{ 728280, 2, {867,840}},
+{ 728340, 2, {915,796}},
+{ 728352, 2, {864,843}},
+{ 728360, 2, {1048,695}},
+{ 728364, 2, {897,812}},
+{ 728365, 2, {935,779}},
+{ 728376, 2, {979,744}},
+{ 728420, 2, {860,847}},
+{ 728448, 2, {896,813}},
+{ 728460, 2, {855,852}},
+{ 728480, 2, {928,785}},
+{ 728532, 2, {882,826}},
+{ 728574, 2, {913,798}},
+{ 728610, 2, {894,815}},
+{ 728640, 2, {880,828}},
+{ 728650, 2, {950,767}},
+{ 728664, 2, {939,776}},
+{ 728688, 2, {893,816}},
+{ 728700, 2, {1041,700}},
+{ 728715, 2, {1313,555}},
+{ 728728, 2, {1001,728}},
+{ 728750, 2, {1166,625}},
+{ 728775, 2, {1025,711}},
+{ 728832, 2, {876,832}},
+{ 728840, 2, {959,760}},
+{ 728850, 2, {1075,678}},
+{ 728875, 2, {875,833}},
+{ 728904, 2, {968,753}},
+{ 728955, 2, {873,835}},
+{ 728973, 2, {931,783}},
+{ 728980, 2, {889,820}},
+{ 729015, 2, {917,795}},
+{ 729027, 2, {871,837}},
+{ 729036, 2, {924,789}},
+{ 729072, 2, {976,747}},
+{ 729099, 2, {1141,639}},
+{ 729120, 2, {868,840}},
+{ 729144, 2, {936,779}},
+{ 729147, 2, {867,841}},
+{ 729240, 2, {885,824}},
+{ 729270, 2, {999,730}},
+{ 729330, 2, {906,805}},
+{ 729344, 2, {896,814}},
+{ 729399, 2, {961,759}},
+{ 729408, 2, {928,786}},
+{ 729432, 2, {921,792}},
+{ 729456, 2, {1002,728}},
+{ 729504, 2, {894,816}},
+{ 729528, 2, {904,807}},
+{ 729540, 2, {945,772}},
+{ 729560, 2, {920,793}},
+{ 729624, 2, {903,808}},
+{ 729630, 2, {990,737}},
+{ 729708, 2, {876,833}},
+{ 729729, 2, {891,819}},
+{ 729736, 2, {1099,664}},
+{ 729750, 2, {875,834}},
+{ 729756, 2, {932,783}},
+{ 729771, 2, {1121,651}},
+{ 729810, 2, {901,810}},
+{ 729828, 2, {873,836}},
+{ 729864, 2, {872,837}},
+{ 729872, 2, {968,754}},
+{ 729904, 2, {931,784}},
+{ 729925, 2, {1075,679}},
+{ 729936, 2, {888,822}},
+{ 729960, 2, {869,840}},
+{ 730050, 2, {930,785}},
+{ 730075, 2, {1007,725}},
+{ 730080, 2, {864,845}},
+{ 730128, 2, {861,848}},
+{ 730140, 2, {860,849}},
+{ 730158, 2, {858,851}},
+{ 730170, 2, {855,854}},
+{ 730233, 2, {1211,603}},
+{ 730240, 2, {896,815}},
+{ 730269, 2, {999,731}},
+{ 730275, 2, {975,749}},
+{ 730303, 2, {2023,361}},
+{ 730320, 2, {895,816}},
+{ 730360, 2, {961,760}},
+{ 730368, 2, {951,768}},
+{ 730380, 2, {940,777}},
+{ 730400, 2, {880,830}},
+{ 730422, 2, {1023,714}},
+{ 730476, 2, {927,788}},
+{ 730512, 2, {912,801}},
+{ 730548, 2, {892,819}},
+{ 730575, 2, {955,765}},
+{ 730590, 2, {994,735}},
+{ 730620, 2, {891,820}},
+{ 730639, 2, {1147,637}},
+{ 730656, 2, {944,774}},
+{ 730664, 2, {874,836}},
+{ 730730, 2, {910,803}},
+{ 730752, 2, {1038,704}},
+{ 730756, 2, {1081,676}},
+{ 730785, 2, {1133,645}},
+{ 730800, 2, {870,840}},
+{ 730825, 2, {943,775}},
+{ 730836, 2, {909,804}},
+{ 730840, 2, {968,755}},
+{ 730845, 2, {981,745}},
+{ 730848, 2, {993,736}},
+{ 730884, 2, {924,791}},
+{ 730908, 2, {948,771}},
+{ 730944, 2, {864,846}},
+{ 730992, 2, {942,776}},
+{ 731082, 2, {1007,726}},
+{ 731104, 2, {992,737}},
+{ 731115, 2, {1055,693}},
+{ 731120, 2, {962,760}},
+{ 731136, 2, {896,816}},
+{ 731148, 2, {957,764}},
+{ 731170, 2, {935,782}},
+{ 731187, 2, {1003,729}},
+{ 731240, 2, {905,808}},
+{ 731268, 2, {999,732}},
+{ 731276, 2, {1066,686}},
+{ 731280, 2, {880,831}},
+{ 731328, 2, {879,832}},
+{ 731340, 2, {956,765}},
+{ 731367, 2, {893,819}},
+{ 731400, 2, {920,795}},
+{ 731423, 2, {1127,649}},
+{ 731430, 2, {903,810}},
+{ 731460, 2, {876,835}},
+{ 731472, 2, {933,784}},
+{ 731500, 2, {875,836}},
+{ 731520, 2, {960,762}},
+{ 731584, 2, {994,736}},
+{ 731600, 2, {944,775}},
+{ 731612, 2, {901,812}},
+{ 731640, 2, {871,840}},
+{ 731675, 2, {925,791}},
+{ 731676, 2, {964,759}},
+{ 731696, 2, {973,752}},
+{ 731700, 2, {900,813}},
+{ 731718, 2, {954,767}},
+{ 731724, 2, {868,843}},
+{ 731731, 2, {1001,731}},
+{ 731745, 2, {909,805}},
+{ 731748, 2, {867,844}},
+{ 731790, 2, {865,846}},
+{ 731808, 2, {864,847}},
+{ 731835, 2, {1053,695}},
+{ 731850, 2, {861,850}},
+{ 731880, 2, {856,855}},
+{ 731916, 2, {972,753}},
+{ 731962, 2, {1067,686}},
+{ 731964, 2, {1011,724}},
+{ 731975, 2, {1273,575}},
+{ 732000, 2, {915,800}},
+{ 732025, 2, {1175,623}},
+{ 732032, 2, {896,817}},
+{ 732048, 2, {906,808}},
+{ 732060, 2, {882,830}},
+{ 732105, 2, {935,783}},
+{ 732192, 2, {928,789}},
+{ 732240, 2, {904,810}},
+{ 732260, 2, {893,820}},
+{ 732375, 2, {875,837}},
+{ 732420, 2, {939,780}},
+{ 732424, 2, {902,812}},
+{ 732468, 2, {1023,716}},
+{ 732501, 2, {1057,693}},
+{ 732536, 2, {889,824}},
+{ 732564, 2, {918,798}},
+{ 732578, 2, {938,781}},
+{ 732600, 2, {888,825}},
+{ 732615, 2, {867,845}},
+{ 732645, 2, {1005,729}},
+{ 732648, 2, {1029,712}},
+{ 732725, 2, {1325,553}},
+{ 732756, 2, {908,807}},
+{ 732780, 2, {885,828}},
+{ 732849, 2, {897,817}},
+{ 732864, 2, {1041,704}},
+{ 732888, 2, {936,783}},
+{ 732900, 2, {1047,700}},
+{ 733005, 2, {895,819}},
+{ 733040, 2, {880,833}},
+{ 733050, 2, {905,810}},
+{ 733056, 2, {996,736}},
+{ 733075, 2, {1475,497}},
+{ 733116, 2, {921,796}},
+{ 733120, 2, {928,790}},
+{ 733125, 2, {1173,625}},
+{ 733150, 2, {946,775}},
+{ 733212, 2, {876,837}},
+{ 733236, 2, {903,812}},
+{ 733248, 2, {912,804}},
+{ 733257, 2, {927,791}},
+{ 733278, 2, {1027,714}},
+{ 733320, 2, {873,840}},
+{ 733381, 2, {1331,551}},
+{ 733414, 2, {901,814}},
+{ 733425, 2, {889,825}},
+{ 733440, 2, {955,768}},
+{ 733488, 2, {888,826}},
+{ 733500, 2, {900,815}},
+{ 733520, 2, {865,848}},
+{ 733525, 2, {925,793}},
+{ 733536, 2, {864,849}},
+{ 733572, 2, {861,852}},
+{ 733584, 2, {899,816}},
+{ 733600, 2, {917,800}},
+{ 733635, 2, {959,765}},
+{ 733677, 2, {1029,713}},
+{ 733716, 2, {916,801}},
+{ 733785, 2, {923,795}},
+{ 733788, 2, {981,748}},
+{ 733824, 2, {882,832}},
+{ 733920, 2, {880,834}},
+{ 733932, 2, {1044,703}},
+{ 733941, 2, {1053,697}},
+{ 733992, 2, {952,771}},
+{ 734019, 2, {957,767}},
+{ 734020, 2, {980,749}},
+{ 734052, 2, {913,804}},
+{ 734080, 2, {992,740}},
+{ 734103, 2, {1007,729}},
+{ 734140, 2, {940,781}},
+{ 734160, 2, {874,840}},
+{ 734172, 2, {951,772}},
+{ 734184, 2, {891,824}},
+{ 734265, 2, {945,777}},
+{ 734272, 2, {1043,704}},
+{ 734310, 2, {995,738}},
+{ 734320, 2, {1072,685}},
+{ 734349, 2, {867,847}},
+{ 734400, 2, {864,850}},
+{ 734440, 2, {860,854}},
+{ 734448, 2, {858,856}},
+{ 734454, 2, {938,783}},
+{ 734472, 2, {909,808}},
+{ 734517, 2, {917,801}},
+{ 734526, 2, {949,774}},
+{ 734580, 2, {924,795}},
+{ 734604, 2, {884,831}},
+{ 734635, 2, {1045,703}},
+{ 734643, 2, {897,819}},
+{ 734657, 2, {1363,539}},
+{ 734706, 2, {882,833}},
+{ 734712, 2, {968,759}},
+{ 734720, 2, {896,820}},
+{ 734745, 2, {915,803}},
+{ 734760, 2, {936,785}},
+{ 734769, 2, {963,763}},
+{ 734800, 2, {880,835}},
+{ 734820, 2, {993,740}},
+{ 734844, 2, {879,836}},
+{ 734910, 2, {935,786}},
+{ 734928, 2, {976,753}},
+{ 734952, 2, {904,813}},
+{ 734965, 2, {913,805}},
+{ 734976, 2, {928,792}},
+{ 735000, 2, {875,840}},
+{ 735034, 2, {874,841}},
+{ 735048, 2, {984,747}},
+{ 735063, 2, {1207,609}},
+{ 735072, 2, {912,806}},
+{ 735075, 2, {891,825}},
+{ 735080, 2, {920,799}},
+{ 735096, 2, {872,843}},
+{ 735150, 2, {870,845}},
+{ 735165, 2, {961,765}},
+{ 735174, 2, {869,846}},
+{ 735204, 2, {933,788}},
+{ 735216, 2, {867,848}},
+{ 735264, 2, {864,851}},
+{ 735300, 2, {860,855}},
+{ 735330, 2, {965,762}},
+{ 735348, 2, {932,789}},
+{ 735392, 2, {938,784}},
+{ 735420, 2, {1020,721}},
+{ 735456, 2, {978,752}},
+{ 735475, 2, {949,775}},
+{ 735488, 2, {884,832}},
+{ 735490, 2, {931,790}},
+{ 735540, 2, {897,820}},
+{ 735560, 2, {994,740}},
+{ 735625, 2, {1177,625}},
+{ 735630, 2, {930,791}},
+{ 735660, 2, {915,804}},
+{ 735680, 2, {880,836}},
+{ 735690, 2, {895,822}},
+{ 735696, 2, {936,786}},
+{ 735732, 2, {963,764}},
+{ 735735, 2, {1001,735}},
+{ 735795, 2, {985,747}},
+{ 735816, 2, {989,744}},
+{ 735875, 2, {875,841}},
+{ 735900, 2, {892,825}},
+{ 735904, 2, {928,793}},
+{ 735930, 2, {962,765}},
+{ 735966, 2, {891,826}},
+{ 735984, 2, {912,807}},
+{ 736008, 2, {1011,728}},
+{ 736032, 2, {902,816}},
+{ 736078, 2, {1073,686}},
+{ 736092, 2, {889,828}},
+{ 736128, 2, {864,852}},
+{ 736155, 2, {861,855}},
+{ 736176, 2, {939,784}},
+{ 736208, 2, {979,752}},
+{ 736263, 2, {999,737}},
+{ 736281, 2, {899,819}},
+{ 736308, 2, {1017,724}},
+{ 736320, 2, {885,832}},
+{ 736440, 2, {969,760}},
+{ 736470, 2, {882,835}},
+{ 736512, 2, {896,822}},
+{ 736554, 2, {923,798}},
+{ 736560, 2, {880,837}},
+{ 736596, 2, {948,777}},
+{ 736600, 2, {1016,725}},
+{ 736656, 2, {894,824}},
+{ 736725, 2, {893,825}},
+{ 736736, 2, {1001,736}},
+{ 736760, 2, {904,815}},
+{ 736764, 2, {1029,716}},
+{ 736800, 2, {921,800}},
+{ 736812, 2, {873,844}},
+{ 736840, 2, {872,845}},
+{ 736848, 2, {903,816}},
+{ 736866, 2, {871,846}},
+{ 736875, 2, {1125,655}},
+{ 736880, 2, {976,755}},
+{ 736890, 2, {870,847}},
+{ 736912, 2, {869,848}},
+{ 736920, 2, {890,828}},
+{ 736932, 2, {868,849}},
+{ 736934, 2, {902,817}},
+{ 736980, 2, {865,852}},
+{ 737000, 2, {1000,737}},
+{ 737009, 2, {1157,637}},
+{ 737016, 2, {861,856}},
+{ 737028, 2, {1041,708}},
+{ 737035, 2, {1105,667}},
+{ 737040, 2, {888,830}},
+{ 737076, 2, {956,771}},
+{ 737088, 2, {1047,704}},
+{ 737100, 2, {900,819}},
+{ 737154, 2, {918,803}},
+{ 737205, 2, {885,833}},
+{ 737264, 2, {944,781}},
+{ 737268, 2, {917,804}},
+{ 737280, 2, {960,768}},
+{ 737325, 2, {1017,725}},
+{ 737352, 2, {882,836}},
+{ 737373, 2, {949,777}},
+{ 737385, 2, {1199,615}},
+{ 737426, 2, {943,782}},
+{ 737450, 2, {1075,686}},
+{ 737460, 2, {964,765}},
+{ 737472, 2, {1002,736}},
+{ 737480, 2, {895,824}},
+{ 737495, 2, {1219,605}},
+{ 737528, 2, {986,748}},
+{ 737616, 2, {968,762}},
+{ 737685, 2, {873,845}},
+{ 737712, 2, {872,846}},
+{ 737737, 2, {871,847}},
+{ 737748, 2, {891,828}},
+{ 737760, 2, {870,848}},
+{ 737800, 2, {868,850}},
+{ 737817, 2, {867,851}},
+{ 737856, 2, {864,854}},
+{ 737870, 2, {889,830}},
+{ 737891, 2, {1369,539}},
+{ 737892, 2, {927,796}},
+{ 737919, 2, {901,819}},
+{ 737928, 2, {888,831}},
+{ 737940, 2, {980,753}},
+{ 737955, 2, {1035,713}},
+{ 737976, 2, {951,776}},
+{ 738000, 2, {900,820}},
+{ 738036, 2, {988,747}},
+{ 738045, 2, {945,781}},
+{ 738048, 2, {961,768}},
+{ 738100, 2, {1100,671}},
+{ 738108, 2, {909,812}},
+{ 738150, 2, {925,798}},
+{ 738192, 2, {1014,728}},
+{ 738204, 2, {908,813}},
+{ 738225, 2, {965,765}},
+{ 738255, 2, {1185,623}},
+{ 738276, 2, {924,799}},
+{ 738283, 2, {931,793}},
+{ 738360, 2, {879,840}},
+{ 738369, 2, {943,783}},
+{ 738390, 2, {906,815}},
+{ 738395, 2, {1241,595}},
+{ 738400, 2, {923,800}},
+{ 738430, 2, {959,770}},
+{ 738468, 2, {876,843}},
+{ 738480, 2, {905,816}},
+{ 738504, 2, {936,789}},
+{ 738528, 2, {942,784}},
+{ 738530, 2, {874,845}},
+{ 738584, 2, {872,847}},
+{ 738608, 2, {871,848}},
+{ 738650, 2, {869,850}},
+{ 738668, 2, {868,851}},
+{ 738684, 2, {867,852}},
+{ 738720, 2, {864,855}},
+{ 738750, 2, {985,750}},
+{ 738760, 2, {920,803}},
+{ 738792, 2, {993,744}},
+{ 738804, 2, {957,772}},
+{ 738816, 2, {888,832}},
+{ 738820, 2, {901,820}},
+{ 738936, 2, {933,792}},
+{ 738990, 2, {918,805}},
+{ 739025, 2, {1025,721}},
+{ 739040, 2, {992,745}},
+{ 739056, 2, {1038,712}},
+{ 739075, 2, {925,799}},
+{ 739125, 2, {1095,675}},
+{ 739128, 2, {897,824}},
+{ 739152, 2, {944,783}},
+{ 739170, 2, {955,774}},
+{ 739206, 2, {1014,729}},
+{ 739212, 2, {916,807}},
+{ 739260, 2, {999,740}},
+{ 739296, 2, {906,816}},
+{ 739312, 2, {943,784}},
+{ 739320, 2, {915,808}},
+{ 739328, 2, {1024,722}},
+{ 739375, 2, {875,845}},
+{ 739431, 2, {873,847}},
+{ 739440, 2, {936,790}},
+{ 739480, 2, {973,760}},
+{ 739530, 2, {891,830}},
+{ 739575, 2, {865,855}},
+{ 739648, 2, {889,832}},
+{ 739704, 2, {888,833}},
+{ 739827, 2, {1269,583}},
+{ 739860, 2, {885,836}},
+{ 739908, 2, {884,837}},
+{ 739932, 2, {939,788}},
+{ 739970, 2, {961,770}},
+{ 740000, 2, {925,800}},
+{ 740025, 2, {897,825}},
+{ 740050, 2, {950,779}},
+{ 740052, 2, {1011,732}},
+{ 740080, 2, {880,841}},
+{ 740096, 2, {896,826}},
+{ 740110, 2, {970,763}},
+{ 740124, 2, {924,801}},
+{ 740145, 2, {931,795}},
+{ 740160, 2, {960,771}},
+{ 740194, 2, {1079,686}},
+{ 740214, 2, {1003,738}},
+{ 740220, 2, {876,845}},
+{ 740250, 2, {875,846}},
+{ 740278, 2, {874,847}},
+{ 740304, 2, {873,848}},
+{ 740316, 2, {969,764}},
+{ 740328, 2, {872,849}},
+{ 740350, 2, {871,850}},
+{ 740370, 2, {870,851}},
+{ 740376, 2, {904,819}},
+{ 740388, 2, {869,852}},
+{ 740439, 2, {1127,657}},
+{ 740440, 2, {865,856}},
+{ 740460, 2, {861,860}},
+{ 740480, 2, {890,832}},
+{ 740484, 2, {921,804}},
+{ 740520, 2, {935,792}},
+{ 740544, 2, {912,812}},
+{ 740592, 2, {888,834}},
+{ 740600, 2, {920,805}},
+{ 740610, 2, {1055,702}},
+{ 740652, 2, {1023,724}},
+{ 740655, 2, {981,755}},
+{ 740675, 2, {1075,689}},
+{ 740718, 2, {946,783}},
+{ 740740, 2, {910,814}},
+{ 740745, 2, {885,837}},
+{ 740784, 2, {976,759}},
+{ 740835, 2, {909,815}},
+{ 740880, 2, {882,840}},
+{ 740925, 2, {925,801}},
+{ 740936, 2, {917,808}},
+{ 740940, 2, {932,795}},
+{ 740952, 2, {984,753}},
+{ 740962, 2, {1054,703}},
+{ 741000, 2, {950,780}},
+{ 741024, 2, {992,747}},
+{ 741040, 2, {944,785}},
+{ 741060, 2, {895,828}},
+{ 741080, 2, {955,776}},
+{ 741125, 2, {875,847}},
+{ 741150, 2, {915,810}},
+{ 741192, 2, {1041,712}},
+{ 741195, 2, {905,819}},
+{ 741234, 2, {1014,731}},
+{ 741252, 2, {892,831}},
+{ 741276, 2, {1047,708}},
+{ 741312, 2, {864,858}},
+{ 741356, 2, {913,812}},
+{ 741370, 2, {890,833}},
+{ 741455, 2, {935,793}},
+{ 741456, 2, {912,813}},
+{ 741468, 2, {1092,679}},
+{ 741472, 2, {928,799}},
+{ 741480, 2, {888,835}},
+{ 741489, 2, {1139,651}},
+{ 741520, 2, {920,806}},
+{ 741566, 2, {1081,686}},
+{ 741573, 2, {1043,711}},
+{ 741608, 2, {952,779}},
+{ 741636, 2, {972,763}},
+{ 741660, 2, {940,789}},
+{ 741664, 2, {946,784}},
+{ 741675, 2, {899,825}},
+{ 741690, 2, {1005,738}},
+{ 741741, 2, {1001,741}},
+{ 741744, 2, {909,816}},
+{ 741750, 2, {989,750}},
+{ 741762, 2, {882,841}},
+{ 741780, 2, {951,780}},
+{ 741825, 2, {945,785}},
+{ 741840, 2, {880,843}},
+{ 741876, 2, {879,844}},
+{ 741888, 2, {896,828}},
+{ 741895, 2, {1435,517}},
+{ 741950, 2, {950,781}},
+{ 741965, 2, {1015,731}},
+{ 741972, 2, {876,847}},
+{ 741984, 2, {944,786}},
+{ 742000, 2, {875,848}},
+{ 742126, 2, {869,854}},
+{ 742140, 2, {868,855}},
+{ 742152, 2, {867,856}},
+{ 742170, 2, {865,858}},
+{ 742203, 2, {891,833}},
+{ 742220, 2, {1003,740}},
+{ 742224, 2, {987,752}},
+{ 742248, 2, {936,793}},
+{ 742284, 2, {948,783}},
+{ 742352, 2, {1079,688}},
+{ 742365, 2, {1053,705}},
+{ 742440, 2, {920,807}},
+{ 742456, 2, {968,767}},
+{ 742500, 2, {900,825}},
+{ 742560, 2, {884,840}},
+{ 742577, 2, {2057,361}},
+{ 742616, 2, {1043,712}},
+{ 742632, 2, {957,776}},
+{ 742668, 2, {933,796}},
+{ 742716, 2, {897,828}},
+{ 742764, 2, {993,748}},
+{ 742770, 2, {917,810}},
+{ 742775, 2, {925,803}},
+{ 742797, 2, {1107,671}},
+{ 742812, 2, {956,777}},
+{ 742848, 2, {876,848}},
+{ 742900, 2, {874,850}},
+{ 742976, 2, {893,832}},
+{ 742980, 2, {870,854}},
+{ 742995, 2, {869,855}},
+{ 743015, 2, {923,805}},
+{ 743040, 2, {864,860}},
+{ 743067, 2, {949,783}},
+{ 743070, 2, {930,799}},
+{ 743088, 2, {904,822}},
+{ 743145, 2, {1339,555}},
+{ 743225, 2, {959,775}},
+{ 743232, 2, {948,784}},
+{ 743244, 2, {964,771}},
+{ 743256, 2, {888,837}},
+{ 743265, 2, {995,747}},
+{ 743280, 2, {912,815}},
+{ 743325, 2, {901,825}},
+{ 743328, 2, {928,801}},
+{ 743400, 2, {885,840}},
+{ 743424, 2, {968,768}},
+{ 743436, 2, {963,772}},
+{ 743444, 2, {884,841}},
+{ 743470, 2, {910,817}},
+{ 743505, 2, {1095,679}},
+{ 743512, 2, {952,781}},
+{ 743540, 2, {940,791}},
+{ 743600, 2, {880,845}},
+{ 743652, 2, {908,819}},
+{ 743680, 2, {896,830}},
+{ 743688, 2, {939,792}},
+{ 743700, 2, {925,804}},
+{ 743712, 2, {976,762}},
+{ 743724, 2, {876,849}},
+{ 743774, 2, {874,851}},
+{ 743796, 2, {873,852}},
+{ 743808, 2, {894,832}},
+{ 743820, 2, {924,805}},
+{ 743834, 2, {871,854}},
+{ 743869, 2, {893,833}},
+{ 743886, 2, {867,858}},
+{ 743904, 2, {864,861}},
+{ 743910, 2, {905,822}},
+{ 743925, 2, {975,763}},
+{ 743964, 2, {988,753}},
+{ 743985, 2, {891,835}},
+{ 744000, 2, {930,800}},
+{ 744016, 2, {949,784}},
+{ 744029, 2, {1331,559}},
+{ 744072, 2, {903,824}},
+{ 744093, 2, {889,837}},
+{ 744096, 2, {1011,736}},
+{ 744107, 2, {1183,629}},
+{ 744120, 2, {936,795}},
+{ 744128, 2, {1057,704}},
+{ 744150, 2, {902,825}},
+{ 744168, 2, {921,808}},
+{ 744184, 2, {959,776}},
+{ 744255, 2, {999,745}},
+{ 744345, 2, {973,765}},
+{ 744372, 2, {899,828}},
+{ 744444, 2, {1017,732}},
+{ 744464, 2, {952,782}},
+{ 744480, 2, {880,846}},
+{ 744575, 2, {1027,725}},
+{ 744576, 2, {896,831}},
+{ 744600, 2, {876,850}},
+{ 744625, 2, {875,851}},
+{ 744640, 2, {895,832}},
+{ 744660, 2, {945,788}},
+{ 744705, 2, {871,855}},
+{ 744708, 2, {916,813}},
+{ 744720, 2, {870,856}},
+{ 744800, 2, {931,800}},
+{ 744816, 2, {944,789}},
+{ 744876, 2, {891,836}},
+{ 744900, 2, {955,780}},
+{ 744930, 2, {890,837}},
+{ 744975, 2, {903,825}},
+{ 744996, 2, {1029,724}},
+{ 745000, 2, {1000,745}},
+{ 745008, 2, {913,816}},
+{ 745038, 2, {1022,729}},
+{ 745040, 2, {1072,695}},
+{ 745074, 2, {954,781}},
+{ 745085, 2, {1045,713}},
+{ 745104, 2, {912,817}},
+{ 745108, 2, {1157,644}},
+{ 745180, 2, {1007,740}},
+{ 745184, 2, {928,803}},
+{ 745212, 2, {884,843}},
+{ 745280, 2, {1088,685}},
+{ 745290, 2, {882,845}},
+{ 745308, 2, {927,804}},
+{ 745356, 2, {1041,716}},
+{ 745360, 2, {880,847}},
+{ 745380, 2, {909,820}},
+{ 745392, 2, {879,848}},
+{ 745416, 2, {918,812}},
+{ 745420, 2, {940,793}},
+{ 745464, 2, {1047,712}},
+{ 745465, 2, {1121,665}},
+{ 745488, 2, {1002,744}},
+{ 745500, 2, {875,852}},
+{ 745503, 2, {957,779}},
+{ 745524, 2, {972,767}},
+{ 745560, 2, {872,855}},
+{ 745584, 2, {951,784}},
+{ 745620, 2, {867,860}},
+{ 745668, 2, {924,807}},
+{ 745706, 2, {989,754}},
+{ 745710, 2, {938,795}},
+{ 745720, 2, {905,824}},
+{ 745731, 2, {931,801}},
+{ 745760, 2, {944,790}},
+{ 745800, 2, {904,825}},
+{ 745965, 2, {1089,685}},
+{ 746004, 2, {996,749}},
+{ 746028, 2, {901,828}},
+{ 746031, 2, {1221,611}},
+{ 746064, 2, {942,792}},
+{ 746112, 2, {928,804}},
+{ 746130, 2, {935,798}},
+{ 746187, 2, {1007,741}},
+{ 746232, 2, {1003,744}},
+{ 746235, 2, {927,805}},
+{ 746250, 2, {995,750}},
+{ 746265, 2, {1157,645}},
+{ 746304, 2, {897,832}},
+{ 746325, 2, {963,775}},
+{ 746328, 2, {968,771}},
+{ 746350, 2, {1150,649}},
+{ 746368, 2, {896,833}},
+{ 746400, 2, {933,800}},
+{ 746430, 2, {895,834}},
+{ 746490, 2, {894,835}},
+{ 746532, 2, {932,801}},
+{ 746544, 2, {906,824}},
+{ 746548, 2, {893,836}},
+{ 746550, 2, {945,790}},
+{ 746604, 2, {892,837}},
+{ 746640, 2, {915,816}},
+{ 746736, 2, {993,752}},
+{ 746760, 2, {889,840}},
+{ 746790, 2, {930,803}},
+{ 746823, 2, {1113,671}},
+{ 746856, 2, {902,828}},
+{ 746910, 2, {965,774}},
+{ 746928, 2, {912,819}},
+{ 746940, 2, {885,844}},
+{ 746976, 2, {992,753}},
+{ 746991, 2, {1169,639}},
+{ 747000, 2, {900,830}},
+{ 747040, 2, {920,812}},
+{ 747054, 2, {882,847}},
+{ 747065, 2, {935,799}},
+{ 747120, 2, {880,849}},
+{ 747201, 2, {897,833}},
+{ 747225, 2, {1025,729}},
+{ 747250, 2, {875,854}},
+{ 747252, 2, {918,814}},
+{ 747264, 2, {896,834}},
+{ 747270, 2, {874,855}},
+{ 747288, 2, {873,856}},
+{ 747300, 2, {940,795}},
+{ 747318, 2, {871,858}},
+{ 747320, 2, {952,785}},
+{ 747340, 2, {869,860}},
+{ 747348, 2, {868,861}},
+{ 747360, 2, {865,864}},
+{ 747400, 2, {925,808}},
+{ 747441, 2, {893,837}},
+{ 747444, 2, {939,796}},
+{ 747488, 2, {994,752}},
+{ 747495, 2, {945,791}},
+{ 747520, 2, {1024,730}},
+{ 747565, 2, {1085,689}},
+{ 747593, 2, {931,803}},
+{ 747600, 2, {890,840}},
+{ 747630, 2, {923,810}},
+{ 747656, 2, {1027,728}},
+{ 747684, 2, {903,828}},
+{ 747740, 2, {980,763}},
+{ 747747, 2, {913,819}},
+{ 747765, 2, {955,783}},
+{ 747813, 2, {1023,731}},
+{ 747840, 2, {912,820}},
+{ 747852, 2, {921,812}},
+{ 747900, 2, {900,831}},
+{ 747936, 2, {882,848}},
+{ 747960, 2, {920,813}},
+{ 747968, 2, {899,832}},
+{ 747972, 2, {948,789}},
+{ 748000, 2, {880,850}},
+{ 748055, 2, {1015,737}},
+{ 748068, 2, {969,772}},
+{ 748125, 2, {875,855}},
+{ 748140, 2, {1011,740}},
+{ 748160, 2, {896,835}},
+{ 748170, 2, {918,815}},
+{ 748176, 2, {872,858}},
+{ 748209, 2, {869,861}},
+{ 748272, 2, {917,816}},
+{ 748328, 2, {1127,664}},
+{ 748440, 2, {891,840}},
+{ 748475, 2, {1175,637}},
+{ 748496, 2, {1141,656}},
+{ 748510, 2, {1190,629}},
+{ 748524, 2, {931,804}},
+{ 748544, 2, {1024,731}},
+{ 748548, 2, {956,783}},
+{ 748584, 2, {888,843}},
+{ 748592, 2, {944,793}},
+{ 748650, 2, {930,805}},
+{ 748665, 2, {1143,655}},
+{ 748683, 2, {1027,729}},
+{ 748710, 2, {885,846}},
+{ 748720, 2, {955,784}},
+{ 748748, 2, {884,847}},
+{ 748800, 2, {900,832}},
+{ 748836, 2, {1023,732}},
+{ 748840, 2, {965,776}},
+{ 748867, 2, {899,833}},
+{ 748880, 2, {880,851}},
+{ 748896, 2, {928,807}},
+{ 748908, 2, {879,852}},
+{ 748935, 2, {935,801}},
+{ 748960, 2, {992,755}},
+{ 748980, 2, {876,855}},
+{ 748992, 2, {996,752}},
+{ 749000, 2, {875,856}},
+{ 749016, 2, {909,824}},
+{ 749028, 2, {964,777}},
+{ 749056, 2, {896,836}},
+{ 749060, 2, {871,860}},
+{ 749070, 2, {870,861}},
+{ 749075, 2, {1577,475}},
+{ 749088, 2, {867,864}},
+{ 749100, 2, {908,825}},
+{ 749112, 2, {1029,728}},
+{ 749115, 2, {895,837}},
+{ 749190, 2, {1105,678}},
+{ 749208, 2, {1007,744}},
+{ 749210, 2, {973,770}},
+{ 749232, 2, {946,792}},
+{ 749250, 2, {925,810}},
+{ 749275, 2, {1025,731}},
+{ 749320, 2, {1048,715}},
+{ 749331, 2, {891,841}},
+{ 749340, 2, {905,828}},
+{ 749360, 2, {986,760}},
+{ 749375, 2, {1199,625}},
+{ 749388, 2, {951,788}},
+{ 749398, 2, {962,779}},
+{ 749412, 2, {972,771}},
+{ 749476, 2, {923,812}},
+{ 749484, 2, {981,764}},
+{ 749520, 2, {1041,720}},
+{ 749595, 2, {885,847}},
+{ 749616, 2, {966,776}},
+{ 749637, 2, {1141,657}},
+{ 749650, 2, {1034,725}},
+{ 749652, 2, {1047,716}},
+{ 749664, 2, {912,822}},
+{ 749700, 2, {882,850}},
+{ 749736, 2, {936,801}},
+{ 749760, 2, {880,852}},
+{ 749772, 2, {1059,708}},
+{ 749800, 2, {920,815}},
+{ 749808, 2, {984,762}},
+{ 749868, 2, {948,791}},
+{ 749892, 2, {874,858}},
+{ 749931, 2, {871,861}},
+{ 749952, 2, {868,864}},
+{ 749988, 2, {996,753}},
+{ 750006, 2, {918,817}},
+{ 750105, 2, {1055,711}},
+{ 750120, 2, {893,840}},
+{ 750132, 2, {933,804}},
+{ 750141, 2, {1029,729}},
+{ 750178, 2, {946,793}},
+{ 750200, 2, {968,775}},
+{ 750204, 2, {916,819}},
+{ 750244, 2, {1003,748}},
+{ 750300, 2, {915,820}},
+{ 750321, 2, {1089,689}},
+{ 750360, 2, {888,845}},
+{ 750375, 2, {1035,725}},
+{ 750386, 2, {931,806}},
+{ 750400, 2, {938,800}},
+{ 750464, 2, {902,832}},
+{ 750480, 2, {885,848}},
+{ 750516, 2, {884,849}},
+{ 750519, 2, {1083,693}},
+{ 750533, 2, {901,833}},
+{ 750570, 2, {985,762}},
+{ 750582, 2, {882,851}},
+{ 750630, 2, {955,786}},
+{ 750651, 2, {989,759}},
+{ 750708, 2, {993,756}},
+{ 750720, 2, {920,816}},
+{ 750750, 2, {875,858}},
+{ 750780, 2, {873,860}},
+{ 750792, 2, {872,861}},
+{ 750816, 2, {869,864}},
+{ 750897, 2, {959,783}},
+{ 750960, 2, {894,840}},
+{ 751023, 2, {917,819}},
+{ 751104, 2, {978,768}},
+{ 751128, 2, {952,789}},
+{ 751140, 2, {963,780}},
+{ 751170, 2, {1022,735}},
+{ 751200, 2, {939,800}},
+{ 751212, 2, {924,813}},
+{ 751224, 2, {904,831}},
+{ 751248, 2, {888,846}},
+{ 751275, 2, {945,795}},
+{ 751296, 2, {903,832}},
+{ 751322, 2, {923,814}},
+{ 751366, 2, {902,833}},
+{ 751410, 2, {990,759}},
+{ 751440, 2, {930,808}},
+{ 751450, 2, {950,791}},
+{ 751500, 2, {900,835}},
+{ 751502, 2, {961,782}},
+{ 751520, 2, {880,854}},
+{ 751527, 2, {1057,711}},
+{ 751536, 2, {921,816}},
+{ 751564, 2, {899,836}},
+{ 751680, 2, {870,864}},
+{ 751709, 2, {1127,667}},
+{ 751740, 2, {935,804}},
+{ 751800, 2, {895,840}},
+{ 751825, 2, {1037,725}},
+{ 751856, 2, {959,784}},
+{ 751872, 2, {979,768}},
+{ 751905, 2, {1023,735}},
+{ 751940, 2, {917,820}},
+{ 751944, 2, {969,776}},
+{ 751956, 2, {892,843}},
+{ 752000, 2, {940,800}},
+{ 752004, 2, {891,844}},
+{ 752031, 2, {1211,621}},
+{ 752094, 2, {889,846}},
+{ 752124, 2, {932,807}},
+{ 752136, 2, {888,847}},
+{ 752184, 2, {1011,744}},
+{ 752192, 2, {1022,736}},
+{ 752220, 2, {945,796}},
+{ 752235, 2, {1067,705}},
+{ 752248, 2, {931,808}},
+{ 752284, 2, {884,851}},
+{ 752376, 2, {1081,696}},
+{ 752400, 2, {880,855}},
+{ 752424, 2, {879,856}},
+{ 752496, 2, {976,771}},
+{ 752544, 2, {871,864}},
+{ 752550, 2, {870,865}},
+{ 752556, 2, {868,867}},
+{ 752580, 2, {1017,740}},
+{ 752584, 2, {1057,712}},
+{ 752625, 2, {1115,675}},
+{ 752640, 2, {896,840}},
+{ 752652, 2, {909,828}},
+{ 752700, 2, {965,780}},
+{ 752724, 2, {927,812}},
+{ 752745, 2, {1005,749}},
+{ 752752, 2, {1001,752}},
+{ 752760, 2, {918,820}},
+{ 752840, 2, {1160,649}},
+{ 752862, 2, {1037,726}},
+{ 752895, 2, {891,845}},
+{ 752928, 2, {992,759}},
+{ 752940, 2, {890,846}},
+{ 752955, 2, {1065,707}},
+{ 752960, 2, {905,832}},
+{ 753000, 2, {1000,753}},
+{ 753032, 2, {904,833}},
+{ 753060, 2, {924,815}},
+{ 753192, 2, {951,792}},
+{ 753207, 2, {1157,651}},
+{ 753214, 2, {938,803}},
+{ 753225, 2, {913,825}},
+{ 753228, 2, {882,854}},
+{ 753236, 2, {901,836}},
+{ 753246, 2, {962,783}},
+{ 753270, 2, {1055,714}},
+{ 753300, 2, {900,837}},
+{ 753312, 2, {912,826}},
+{ 753350, 2, {950,793}},
+{ 753375, 2, {875,861}},
+{ 753480, 2, {897,840}},
+{ 753489, 2, {1161,649}},
+{ 753504, 2, {1002,752}},
+{ 753525, 2, {985,765}},
+{ 753536, 2, {896,841}},
+{ 753600, 2, {942,800}},
+{ 753610, 2, {935,806}},
+{ 753660, 2, {948,795}},
+{ 753684, 2, {1041,724}},
+{ 753725, 2, {1475,511}},
+{ 753792, 2, {906,832}},
+{ 753830, 2, {890,847}},
+{ 753840, 2, {1047,720}},
+{ 753864, 2, {933,808}},
+{ 753872, 2, {889,848}},
+{ 753912, 2, {888,849}},
+{ 753936, 2, {904,834}},
+{ 753948, 2, {1053,716}},
+{ 753960, 2, {915,824}},
+{ 753984, 2, {924,816}},
+{ 754000, 2, {1000,754}},
+{ 754008, 2, {1059,712}},
+{ 754020, 2, {885,852}},
+{ 754068, 2, {987,764}},
+{ 754075, 2, {973,775}},
+{ 754116, 2, {957,788}},
+{ 754137, 2, {901,837}},
+{ 754138, 2, {913,826}},
+{ 754208, 2, {962,784}},
+{ 754236, 2, {876,861}},
+{ 754245, 2, {999,755}},
+{ 754272, 2, {873,864}},
+{ 754280, 2, {872,865}},
+{ 754284, 2, {956,789}},
+{ 754292, 2, {869,868}},
+{ 754375, 2, {1207,625}},
+{ 754377, 2, {897,841}},
+{ 754416, 2, {936,806}},
+{ 754435, 2, {1247,605}},
+{ 754446, 2, {966,781}},
+{ 754455, 2, {949,795}},
+{ 754464, 2, {928,813}},
+{ 754509, 2, {1159,651}},
+{ 754515, 2, {1035,729}},
+{ 754548, 2, {908,831}},
+{ 754560, 2, {960,786}},
+{ 754585, 2, {893,845}},
+{ 754614, 2, {954,791}},
+{ 754650, 2, {975,774}},
+{ 754677, 2, {891,847}},
+{ 754680, 2, {993,760}},
+{ 754688, 2, {1024,737}},
+{ 754720, 2, {890,848}},
+{ 754728, 2, {984,767}},
+{ 754754, 2, {1001,754}},
+{ 754770, 2, {905,834}},
+{ 754800, 2, {888,850}},
+{ 754812, 2, {964,783}},
+{ 754820, 2, {940,803}},
+{ 754840, 2, {904,835}},
+{ 754845, 2, {1027,735}},
+{ 754851, 2, {969,779}},
+{ 754908, 2, {903,836}},
+{ 754956, 2, {939,804}},
+{ 754974, 2, {902,837}},
+{ 754975, 2, {1313,575}},
+{ 754985, 2, {1295,583}},
+{ 754992, 2, {882,856}},
+{ 755000, 2, {1000,755}},
+{ 755040, 2, {880,858}},
+{ 755048, 2, {973,776}},
+{ 755055, 2, {945,799}},
+{ 755076, 2, {1068,707}},
+{ 755136, 2, {874,864}},
+{ 755145, 2, {873,865}},
+{ 755160, 2, {870,868}},
+{ 755220, 2, {921,820}},
+{ 755244, 2, {972,777}},
+{ 755328, 2, {896,843}},
+{ 755352, 2, {936,807}},
+{ 755392, 2, {928,814}},
+{ 755424, 2, {976,774}},
+{ 755425, 2, {1025,737}},
+{ 755430, 2, {894,845}},
+{ 755436, 2, {1067,708}},
+{ 755440, 2, {994,760}},
+{ 755480, 2, {935,808}},
+{ 755505, 2, {927,815}},
+{ 755559, 2, {1253,603}},
+{ 755568, 2, {891,848}},
+{ 755573, 2, {1729,437}},
+{ 755580, 2, {980,771}},
+{ 755595, 2, {965,783}},
+{ 755608, 2, {917,824}},
+{ 755650, 2, {889,850}},
+{ 755664, 2, {1038,728}},
+{ 755700, 2, {916,825}},
+{ 755712, 2, {984,768}},
+{ 755725, 2, {925,817}},
+{ 755769, 2, {1241,609}},
+{ 755790, 2, {885,854}},
+{ 755811, 2, {903,837}},
+{ 755820, 2, {884,855}},
+{ 755854, 2, {946,799}},
+{ 755872, 2, {1027,736}},
+{ 755904, 2, {992,762}},
+{ 755937, 2, {923,819}},
+{ 755940, 2, {879,860}},
+{ 755955, 2, {963,785}},
+{ 755964, 2, {913,828}},
+{ 755970, 2, {1115,678}},
+{ 755973, 2, {1037,729}},
+{ 756000, 2, {875,864}},
+{ 756024, 2, {872,867}},
+{ 756028, 2, {871,868}},
+{ 756030, 2, {870,869}},
+{ 756112, 2, {1099,688}},
+{ 756144, 2, {944,801}},
+{ 756160, 2, {1088,695}},
+{ 756162, 2, {1026,737}},
+{ 756217, 2, {1127,671}},
+{ 756228, 2, {1011,748}},
+{ 756240, 2, {920,822}},
+{ 756245, 2, {1085,697}},
+{ 756250, 2, {1210,625}},
+{ 756280, 2, {1022,740}},
+{ 756288, 2, {909,832}},
+{ 756320, 2, {928,815}},
+{ 756327, 2, {1353,559}},
+{ 756360, 2, {955,792}},
+{ 756371, 2, {893,847}},
+{ 756400, 2, {976,775}},
+{ 756432, 2, {918,824}},
+{ 756450, 2, {1025,738}},
+{ 756470, 2, {1058,715}},
+{ 756490, 2, {1010,749}},
+{ 756510, 2, {906,835}},
+{ 756522, 2, {954,793}},
+{ 756525, 2, {917,825}},
+{ 756560, 2, {965,784}},
+{ 756585, 2, {989,765}},
+{ 756600, 2, {970,780}},
+{ 756613, 2, {1573,481}},
+{ 756648, 2, {904,837}},
+{ 756756, 2, {882,858}},
+{ 756840, 2, {901,840}},
+{ 756855, 2, {1089,695}},
+{ 756860, 2, {923,820}},
+{ 756864, 2, {876,864}},
+{ 756920, 2, {1016,745}},
+{ 756960, 2, {912,830}},
+{ 756976, 2, {968,782}},
+{ 756996, 2, {951,796}},
+{ 756999, 2, {1219,621}},
+{ 757020, 2, {930,814}},
+{ 757029, 2, {987,767}},
+{ 757068, 2, {897,844}},
+{ 757120, 2, {896,845}},
+{ 757170, 2, {895,846}},
+{ 757188, 2, {972,779}},
+{ 757197, 2, {909,833}},
+{ 757302, 2, {949,798}},
+{ 757308, 2, {892,849}},
+{ 757316, 2, {1036,731}},
+{ 757332, 2, {981,772}},
+{ 757344, 2, {966,784}},
+{ 757350, 2, {891,850}},
+{ 757393, 2, {1189,637}},
+{ 757428, 2, {889,852}},
+{ 757435, 2, {1139,665}},
+{ 757440, 2, {960,789}},
+{ 757485, 2, {905,837}},
+{ 757560, 2, {885,856}},
+{ 757575, 2, {925,819}},
+{ 757596, 2, {933,812}},
+{ 757610, 2, {959,790}},
+{ 757620, 2, {915,828}},
+{ 757624, 2, {1141,664}},
+{ 757665, 2, {1017,745}},
+{ 757680, 2, {880,861}},
+{ 757687, 2, {2209,343}},
+{ 757716, 2, {932,813}},
+{ 757740, 2, {876,865}},
+{ 757758, 2, {874,867}},
+{ 757760, 2, {1024,740}},
+{ 757764, 2, {873,868}},
+{ 757770, 2, {871,870}},
+{ 757834, 2, {931,814}},
+{ 757848, 2, {1041,728}},
+{ 757872, 2, {912,831}},
+{ 757925, 2, {1525,497}},
+{ 757926, 2, {1027,738}},
+{ 757944, 2, {957,792}},
+{ 757950, 2, {930,815}},
+{ 758016, 2, {896,846}},
+{ 758028, 2, {1047,724}},
+{ 758030, 2, {910,833}},
+{ 758032, 2, {944,803}},
+{ 758112, 2, {894,848}},
+{ 758160, 2, {936,810}},
+{ 758176, 2, {928,817}},
+{ 758190, 2, {995,762}},
+{ 758205, 2, {1015,747}},
+{ 758241, 2, {891,851}},
+{ 758244, 2, {1059,716}},
+{ 758268, 2, {918,826}},
+{ 758280, 2, {890,852}},
+{ 758295, 2, {1107,685}},
+{ 758310, 2, {942,805}},
+{ 758336, 2, {1088,697}},
+{ 758352, 2, {888,854}},
+{ 758373, 2, {1029,737}},
+{ 758400, 2, {948,800}},
+{ 758472, 2, {884,858}},
+{ 758490, 2, {965,786}},
+{ 758574, 2, {1139,666}},
+{ 758580, 2, {940,807}},
+{ 758625, 2, {875,867}},
+{ 758640, 2, {872,870}},
+{ 758652, 2, {993,764}},
+{ 758664, 2, {984,771}},
+{ 758670, 2, {1045,726}},
+{ 758700, 2, {900,843}},
+{ 758712, 2, {939,808}},
+{ 758725, 2, {979,775}},
+{ 758784, 2, {912,832}},
+{ 758835, 2, {945,803}},
+{ 758844, 2, {963,788}},
+{ 758880, 2, {930,816}},
+{ 758901, 2, {957,793}},
+{ 758904, 2, {921,824}},
+{ 758912, 2, {896,847}},
+{ 758928, 2, {978,776}},
+{ 758960, 2, {895,848}},
+{ 758976, 2, {944,804}},
+{ 759000, 2, {920,825}},
+{ 759015, 2, {909,835}},
+{ 759033, 2, {1089,697}},
+{ 759050, 2, {893,850}},
+{ 759115, 2, {943,805}},
+{ 759132, 2, {891,852}},
+{ 759165, 2, {1177,645}},
+{ 759200, 2, {949,800}},
+{ 759240, 2, {888,855}},
+{ 759276, 2, {917,828}},
+{ 759278, 2, {1007,754}},
+{ 759304, 2, {1043,728}},
+{ 759348, 2, {948,801}},
+{ 759456, 2, {879,864}},
+{ 759492, 2, {876,867}},
+{ 759500, 2, {875,868}},
+{ 759525, 2, {975,779}},
+{ 759552, 2, {989,768}},
+{ 759616, 2, {913,832}},
+{ 759655, 2, {899,845}},
+{ 759696, 2, {912,833}},
+{ 759759, 2, {897,847}},
+{ 759780, 2, {938,810}},
+{ 759800, 2, {1048,725}},
+{ 759810, 2, {930,817}},
+{ 759880, 2, {968,785}},
+{ 759920, 2, {920,826}},
+{ 759924, 2, {909,836}},
+{ 759948, 2, {996,763}},
+{ 759996, 2, {908,837}},
+{ 760000, 2, {950,800}},
+{ 760020, 2, {956,795}},
+{ 760025, 2, {1075,707}},
+{ 760032, 2, {928,819}},
+{ 760058, 2, {943,806}},
+{ 760095, 2, {889,855}},
+{ 760140, 2, {927,820}},
+{ 760200, 2, {905,840}},
+{ 760272, 2, {1011,752}},
+{ 760275, 2, {981,775}},
+{ 760320, 2, {880,864}},
+{ 760347, 2, {1043,729}},
+{ 760350, 2, {925,822}},
+{ 760375, 2, {875,869}},
+{ 760410, 2, {994,765}},
+{ 760455, 2, {1161,655}},
+{ 760461, 2, {1147,663}},
+{ 760480, 2, {970,784}},
+{ 760500, 2, {900,845}},
+{ 760529, 2, {913,833}},
+{ 760550, 2, {1025,742}},
+{ 760596, 2, {964,789}},
+{ 760608, 2, {912,834}},
+{ 760627, 2, {931,817}},
+{ 760648, 2, {952,799}},
+{ 760656, 2, {897,848}},
+{ 760683, 2, {979,777}},
+{ 760695, 2, {1079,705}},
+{ 760704, 2, {896,849}},
+{ 760716, 2, {1017,748}},
+{ 760725, 2, {945,805}},
+{ 760760, 2, {910,836}},
+{ 760800, 2, {951,800}},
+{ 760848, 2, {968,786}},
+{ 760914, 2, {891,854}},
+{ 760928, 2, {1106,688}},
+{ 760960, 2, {928,820}},
+{ 760968, 2, {936,813}},
+{ 760984, 2, {889,856}},
+{ 761040, 2, {906,840}},
+{ 761076, 2, {972,783}},
+{ 761100, 2, {885,860}},
+{ 761110, 2, {917,830}},
+{ 761112, 2, {961,792}},
+{ 761120, 2, {1072,710}},
+{ 761124, 2, {884,861}},
+{ 761136, 2, {942,808}},
+{ 761175, 2, {995,765}},
+{ 761196, 2, {916,831}},
+{ 761200, 2, {880,865}},
+{ 761244, 2, {876,869}},
+{ 761250, 2, {875,870}},
+{ 761256, 2, {873,872}},
+{ 761277, 2, {1003,759}},
+{ 761280, 2, {915,832}},
+{ 761306, 2, {1157,658}},
+{ 761328, 2, {933,816}},
+{ 761345, 2, {901,845}},
+{ 761453, 2, {899,847}},
+{ 761460, 2, {980,777}},
+{ 761475, 2, {923,825}},
+{ 761520, 2, {912,835}},
+{ 761530, 2, {946,805}},
+{ 761600, 2, {896,850}},
+{ 761607, 2, {1099,693}},
+{ 761616, 2, {984,774}},
+{ 761670, 2, {910,837}},
+{ 761720, 2, {1096,695}},
+{ 761733, 2, {963,791}},
+{ 761748, 2, {988,771}},
+{ 761772, 2, {957,796}},
+{ 761805, 2, {891,855}},
+{ 761808, 2, {944,807}},
+{ 761838, 2, {1067,714}},
+{ 761859, 2, {973,783}},
+{ 761875, 2, {1219,625}},
+{ 761904, 2, {888,858}},
+{ 761940, 2, {918,830}},
+{ 761964, 2, {987,772}},
+{ 762000, 2, {1000,762}},
+{ 762012, 2, {1041,732}},
+{ 762034, 2, {1027,742}},
+{ 762036, 2, {1004,759}},
+{ 762048, 2, {882,864}},
+{ 762072, 2, {904,843}},
+{ 762090, 2, {955,798}},
+{ 762125, 2, {875,871}},
+{ 762132, 2, {903,844}},
+{ 762195, 2, {915,833}},
+{ 762200, 2, {925,824}},
+{ 762216, 2, {1047,728}},
+{ 762246, 2, {901,846}},
+{ 762256, 2, {976,781}},
+{ 762280, 2, {1003,760}},
+{ 762300, 2, {900,847}},
+{ 762372, 2, {1053,724}},
+{ 762390, 2, {985,774}},
+{ 762398, 2, {923,826}},
+{ 762405, 2, {959,795}},
+{ 762450, 2, {897,850}},
+{ 762468, 2, {939,812}},
+{ 762480, 2, {1059,720}},
+{ 762489, 2, {931,819}},
+{ 762496, 2, {896,851}},
+{ 762528, 2, {1014,752}},
+{ 762540, 2, {895,852}},
+{ 762552, 2, {952,801}},
+{ 762575, 2, {1175,649}},
+{ 762588, 2, {921,828}},
+{ 762624, 2, {993,768}},
+{ 762660, 2, {892,855}},
+{ 762671, 2, {1547,493}},
+{ 762696, 2, {891,856}},
+{ 762723, 2, {1107,689}},
+{ 762755, 2, {1085,703}},
+{ 762816, 2, {928,822}},
+{ 762832, 2, {973,784}},
+{ 762840, 2, {936,815}},
+{ 762850, 2, {950,803}},
+{ 762880, 2, {1024,745}},
+{ 762930, 2, {882,865}},
+{ 762944, 2, {917,832}},
+{ 762960, 2, {880,867}},
+{ 762972, 2, {879,868}},
+{ 763000, 2, {875,872}},
+{ 763048, 2, {1012,754}},
+{ 763140, 2, {948,805}},
+{ 763147, 2, {901,847}},
+{ 763175, 2, {1225,623}},
+{ 763200, 2, {900,848}},
+{ 763236, 2, {999,764}},
+{ 763308, 2, {932,819}},
+{ 763344, 2, {912,837}},
+{ 763347, 2, {897,851}},
+{ 763392, 2, {896,852}},
+{ 763420, 2, {931,820}},
+{ 763425, 2, {975,783}},
+{ 763515, 2, {893,855}},
+{ 763560, 2, {909,840}},
+{ 763572, 2, {969,788}},
+{ 763623, 2, {1071,713}},
+{ 763680, 2, {888,860}},
+{ 763686, 2, {957,798}},
+{ 763752, 2, {968,789}},
+{ 763776, 2, {884,864}},
+{ 763800, 2, {950,804}},
+{ 763830, 2, {943,810}},
+{ 763840, 2, {880,868}},
+{ 763848, 2, {927,824}},
+{ 763875, 2, {875,873}},
+{ 763880, 2, {904,845}},
+{ 763895, 2, {935,817}},
+{ 763945, 2, {949,805}},
+{ 763968, 2, {1038,736}},
+{ 763980, 2, {1020,749}},
+{ 764000, 2, {955,800}},
+{ 764001, 2, {1267,603}},
+{ 764050, 2, {925,826}},
+{ 764100, 2, {900,849}},
+{ 764150, 2, {899,850}},
+{ 764181, 2, {913,837}},
+{ 764208, 2, {976,783}},
+{ 764218, 2, {1183,646}},
+{ 764220, 2, {940,813}},
+{ 764244, 2, {897,852}},
+{ 764280, 2, {965,792}},
+{ 764313, 2, {1007,759}},
+{ 764316, 2, {1011,756}},
+{ 764325, 2, {1075,711}},
+{ 764400, 2, {910,840}},
+{ 764405, 2, {1445,529}},
+{ 764445, 2, {1243,615}},
+{ 764456, 2, {952,803}},
+{ 764478, 2, {891,858}},
+{ 764520, 2, {920,831}},
+{ 764522, 2, {1121,682}},
+{ 764540, 2, {889,860}},
+{ 764568, 2, {888,861}},
+{ 764604, 2, {951,804}},
+{ 764640, 2, {885,864}},
+{ 764643, 2, {957,799}},
+{ 764694, 2, {882,867}},
+{ 764712, 2, {936,817}},
+{ 764720, 2, {880,869}},
+{ 764748, 2, {876,873}},
+{ 764750, 2, {875,874}},
+{ 764784, 2, {904,846}},
+{ 764832, 2, {992,771}},
+{ 764864, 2, {1088,703}},
+{ 764925, 2, {987,775}},
+{ 764928, 2, {996,768}},
+{ 764940, 2, {915,836}},
+{ 764955, 2, {955,801}},
+{ 765000, 2, {900,850}},
+{ 765036, 2, {948,807}},
+{ 765060, 2, {933,820}},
+{ 765180, 2, {981,780}},
+{ 765184, 2, {896,854}},
+{ 765204, 2, {1023,748}},
+{ 765225, 2, {895,855}},
+{ 765264, 2, {894,856}},
+{ 765306, 2, {1037,738}},
+{ 765310, 2, {910,841}},
+{ 765320, 2, {1007,760}},
+{ 765380, 2, {980,781}},
+{ 765408, 2, {938,816}},
+{ 765440, 2, {920,832}},
+{ 765444, 2, {908,843}},
+{ 765450, 2, {945,810}},
+{ 765567, 2, {1089,703}},
+{ 765570, 2, {906,845}},
+{ 765600, 2, {880,870}},
+{ 765630, 2, {905,846}},
+{ 765675, 2, {1025,747}},
+{ 765688, 2, {904,847}},
+{ 765700, 2, {950,806}},
+{ 765716, 2, {943,812}},
+{ 765744, 2, {903,848}},
+{ 765756, 2, {956,801}},
+{ 765765, 2, {935,819}},
+{ 765850, 2, {901,850}},
+{ 765855, 2, {915,837}},
+{ 765900, 2, {900,851}},
+{ 765912, 2, {987,776}},
+{ 765930, 2, {1055,726}},
+{ 765952, 2, {1024,748}},
+{ 766062, 2, {954,803}},
+{ 766080, 2, {896,855}},
+{ 766120, 2, {895,856}},
+{ 766160, 2, {976,785}},
+{ 766176, 2, {1041,736}},
+{ 766194, 2, {893,858}},
+{ 766224, 2, {939,816}},
+{ 766233, 2, {999,767}},
+{ 766260, 2, {891,860}},
+{ 766272, 2, {921,832}},
+{ 766320, 2, {930,824}},
+{ 766360, 2, {920,833}},
+{ 766380, 2, {964,795}},
+{ 766404, 2, {1047,732}},
+{ 766428, 2, {884,867}},
+{ 766458, 2, {882,869}},
+{ 766475, 2, {989,775}},
+{ 766480, 2, {880,871}},
+{ 766488, 2, {879,872}},
+{ 766500, 2, {876,875}},
+{ 766528, 2, {928,826}},
+{ 766530, 2, {918,835}},
+{ 766548, 2, {963,796}},
+{ 766584, 2, {936,819}},
+{ 766596, 2, {993,772}},
+{ 766692, 2, {916,837}},
+{ 766700, 2, {902,850}},
+{ 766716, 2, {1059,724}},
+{ 766752, 2, {978,784}},
+{ 766815, 2, {1005,763}},
+{ 766836, 2, {1071,716}},
+{ 766878, 2, {961,798}},
+{ 766908, 2, {972,789}},
+{ 766920, 2, {913,840}},
+{ 766935, 2, {897,855}},
+{ 766948, 2, {1118,686}},
+{ 766992, 2, {912,841}},
+{ 767000, 2, {1000,767}},
+{ 767040, 2, {940,816}},
+{ 767080, 2, {1016,755}},
+{ 767136, 2, {976,786}},
+{ 767144, 2, {931,824}},
+{ 767151, 2, {891,861}},
+{ 767195, 2, {1073,715}},
+{ 767196, 2, {909,844}},
+{ 767200, 2, {959,800}},
+{ 767232, 2, {888,864}},
+{ 767270, 2, {970,791}},
+{ 767280, 2, {920,834}},
+{ 767380, 2, {1037,740}},
+{ 767440, 2, {905,848}},
+{ 767448, 2, {918,836}},
+{ 767472, 2, {944,813}},
+{ 767496, 2, {904,849}},
+{ 767520, 2, {936,820}},
+{ 767529, 2, {917,837}},
+{ 767536, 2, {979,784}},
+{ 767550, 2, {903,850}},
+{ 767556, 2, {927,828}},
+{ 767624, 2, {968,793}},
+{ 767648, 2, {1043,736}},
+{ 767676, 2, {962,798}},
+{ 767725, 2, {1025,749}},
+{ 767730, 2, {942,815}},
+{ 767767, 2, {1001,767}},
+{ 767808, 2, {992,774}},
+{ 767820, 2, {955,804}},
+{ 767832, 2, {897,856}},
+{ 767835, 2, {1017,755}},
+{ 767844, 2, {924,831}},
+{ 767865, 2, {1065,721}},
+{ 767910, 2, {895,858}},
+{ 767916, 2, {996,771}},
+{ 767936, 2, {923,832}},
+{ 767970, 2, {954,805}},
+{ 767980, 2, {893,860}},
+{ 768012, 2, {892,861}},
+{ 768033, 2, {1169,657}},
+{ 768060, 2, {1004,765}},
+{ 768075, 2, {931,825}},
+{ 768094, 2, {986,779}},
+{ 768096, 2, {889,864}},
+{ 768105, 2, {909,845}},
+{ 768120, 2, {888,865}},
+{ 768152, 2, {946,812}},
+{ 768159, 2, {959,801}},
+{ 768180, 2, {885,868}},
+{ 768200, 2, {920,835}},
+{ 768222, 2, {882,871}},
+{ 768240, 2, {880,873}},
+{ 768264, 2, {952,807}},
+{ 768288, 2, {906,848}},
+{ 768300, 2, {975,788}},
+{ 768360, 2, {1011,760}},
+{ 768384, 2, {928,828}},
+{ 768408, 2, {951,808}},
+{ 768544, 2, {1022,752}},
+{ 768570, 2, {935,822}},
+{ 768600, 2, {900,854}},
+{ 768614, 2, {1078,713}},
+{ 768638, 2, {962,799}},
+{ 768645, 2, {899,855}},
+{ 768670, 2, {973,790}},
+{ 768672, 2, {942,816}},
+{ 768690, 2, {949,810}},
+{ 768750, 2, {1025,750}},
+{ 768768, 2, {896,858}},
+{ 768792, 2, {933,824}},
+{ 768800, 2, {961,800}},
+{ 768816, 2, {912,843}},
+{ 768852, 2, {972,791}},
+{ 768859, 2, {923,833}},
+{ 768873, 2, {893,861}},
+{ 768900, 2, {932,825}},
+{ 768955, 2, {1271,605}},
+{ 768960, 2, {890,864}},
+{ 769065, 2, {885,869}},
+{ 769095, 2, {1055,729}},
+{ 769104, 2, {882,872}},
+{ 769120, 2, {880,874}},
+{ 769160, 2, {938,820}},
+{ 769230, 2, {945,814}},
+{ 769296, 2, {1023,752}},
+{ 769318, 2, {1331,578}},
+{ 769350, 2, {1115,690}},
+{ 769356, 2, {903,852}},
+{ 769360, 2, {944,815}},
+{ 769365, 2, {1107,695}},
+{ 769392, 2, {936,822}},
+{ 769405, 2, {1157,665}},
+{ 769419, 2, {1239,621}},
+{ 769428, 2, {957,804}},
+{ 769488, 2, {943,816}},
+{ 769496, 2, {1057,728}},
+{ 769500, 2, {900,855}},
+{ 769536, 2, {1002,768}},
+{ 769560, 2, {968,795}},
+{ 769600, 2, {925,832}},
+{ 769626, 2, {897,858}},
+{ 769652, 2, {988,779}},
+{ 769692, 2, {924,833}},
+{ 769743, 2, {1053,731}},
+{ 769824, 2, {891,864}},
+{ 769825, 2, {1325,581}},
+{ 769860, 2, {910,846}},
+{ 769896, 2, {888,867}},
+{ 769923, 2, {909,847}},
+{ 769925, 2, {1339,575}},
+{ 769956, 2, {921,836}},
+{ 769980, 2, {939,820}},
+{ 770000, 2, {880,875}},
+{ 770004, 2, {879,876}},
+{ 770028, 2, {1068,721}},
+{ 770040, 2, {920,837}},
+{ 770064, 2, {976,789}},
+{ 770070, 2, {965,798}},
+{ 770085, 2, {981,785}},
+{ 770130, 2, {995,774}},
+{ 770175, 2, {945,815}},
+{ 770185, 2, {1105,697}},
+{ 770224, 2, {1058,728}},
+{ 770240, 2, {928,830}},
+{ 770280, 2, {917,840}},
+{ 770340, 2, {1041,740}},
+{ 770350, 2, {994,775}},
+{ 770355, 2, {901,855}},
+{ 770385, 2, {957,805}},
+{ 770406, 2, {1079,714}},
+{ 770440, 2, {935,824}},
+{ 770472, 2, {984,783}},
+{ 770525, 2, {925,833}},
+{ 770553, 2, {1057,729}},
+{ 770560, 2, {896,860}},
+{ 770568, 2, {993,776}},
+{ 770588, 2, {949,812}},
+{ 770592, 2, {1047,736}},
+{ 770625, 2, {1125,685}},
+{ 770630, 2, {1010,763}},
+{ 770640, 2, {912,845}},
+{ 770715, 2, {891,865}},
+{ 770724, 2, {948,813}},
+{ 770735, 2, {1159,665}},
+{ 770770, 2, {910,847}},
+{ 770796, 2, {972,793}},
+{ 770832, 2, {909,848}},
+{ 770835, 2, {885,871}},
+{ 770847, 2, {987,781}},
+{ 770868, 2, {882,874}},
+{ 770880, 2, {880,876}},
+{ 770892, 2, {908,849}},
+{ 770952, 2, {1059,728}},
+{ 771000, 2, {1000,771}},
+{ 771001, 2, {1309,589}},
+{ 771040, 2, {976,790}},
+{ 771060, 2, {905,852}},
+{ 771075, 2, {1035,745}},
+{ 771120, 2, {918,840}},
+{ 771168, 2, {928,831}},
+{ 771210, 2, {902,855}},
+{ 771225, 2, {975,791}},
+{ 771228, 2, {999,772}},
+{ 771255, 2, {985,783}},
+{ 771264, 2, {927,832}},
+{ 771282, 2, {1058,729}},
+{ 771324, 2, {969,796}},
+{ 771342, 2, {899,858}},
+{ 771375, 2, {935,825}},
+{ 771400, 2, {950,812}},
+{ 771420, 2, {897,860}},
+{ 771435, 2, {1085,711}},
+{ 771450, 2, {925,834}},
+{ 771456, 2, {896,861}},
+{ 771470, 2, {1030,749}},
+{ 771492, 2, {956,807}},
+{ 771528, 2, {1037,744}},
+{ 771540, 2, {924,835}},
+{ 771552, 2, {893,864}},
+{ 771628, 2, {923,836}},
+{ 771640, 2, {955,808}},
+{ 771650, 2, {1150,671}},
+{ 771672, 2, {888,869}},
+{ 771680, 2, {910,848}},
+{ 771720, 2, {885,872}},
+{ 771732, 2, {884,873}},
+{ 771750, 2, {882,875}},
+{ 771834, 2, {966,799}},
+{ 771840, 2, {960,804}},
+{ 771875, 2, {1235,625}},
+{ 771936, 2, {946,816}},
+{ 772000, 2, {965,800}},
+{ 772005, 2, {1391,555}},
+{ 772038, 2, {918,841}},
+{ 772044, 2, {1092,707}},
+{ 772065, 2, {903,855}},
+{ 772164, 2, {964,801}},
+{ 772179, 2, {1083,713}},
+{ 772188, 2, {916,843}},
+{ 772191, 2, {927,833}},
+{ 772200, 2, {900,858}},
+{ 772212, 2, {951,812}},
+{ 772225, 2, {1343,575}},
+{ 772260, 2, {915,844}},
+{ 772272, 2, {1038,744}},
+{ 772304, 2, {1027,752}},
+{ 772398, 2, {913,846}},
+{ 772404, 2, {1011,764}},
+{ 772416, 2, {894,864}},
+{ 772464, 2, {912,847}},
+{ 772480, 2, {1088,710}},
+{ 772486, 2, {949,814}},
+{ 772497, 2, {891,867}},
+{ 772524, 2, {933,828}},
+{ 772551, 2, {923,837}},
+{ 772560, 2, {888,870}},
+{ 772616, 2, {884,874}},
+{ 772620, 2, {948,815}},
+{ 772695, 2, {1115,693}},
+{ 772730, 2, {931,830}},
+{ 772768, 2, {992,779}},
+{ 772821, 2, {987,783}},
+{ 772915, 2, {1081,715}},
+{ 772920, 2, {904,855}},
+{ 772965, 2, {965,801}},
+{ 772968, 2, {903,856}},
+{ 773024, 2, {928,833}},
+{ 773028, 2, {981,788}},
+{ 773058, 2, {901,858}},
+{ 773120, 2, {1024,755}},
+{ 773136, 2, {936,826}},
+{ 773190, 2, {990,781}},
+{ 773220, 2, {980,789}},
+{ 773256, 2, {957,808}},
+{ 773280, 2, {895,864}},
+{ 773310, 2, {894,865}},
+{ 773355, 2, {1199,645}},
+{ 773364, 2, {892,867}},
+{ 773388, 2, {891,868}},
+{ 773398, 2, {989,782}},
+{ 773424, 2, {984,786}},
+{ 773430, 2, {889,870}},
+{ 773432, 2, {968,799}},
+{ 773448, 2, {888,871}},
+{ 773500, 2, {884,875}},
+{ 773520, 2, {880,879}},
+{ 773535, 2, {973,795}},
+{ 773550, 2, {955,810}},
+{ 773568, 2, {948,816}},
+{ 773575, 2, {1067,725}},
+{ 773604, 2, {988,783}},
+{ 773605, 2, {961,805}},
+{ 773640, 2, {921,840}},
+{ 773670, 2, {1110,697}},
+{ 773696, 2, {1099,704}},
+{ 773720, 2, {920,841}},
+{ 773736, 2, {939,824}},
+{ 773760, 2, {930,832}},
+{ 773775, 2, {905,855}},
+{ 773808, 2, {987,784}},
+{ 773829, 2, {1211,639}},
+{ 773850, 2, {938,825}},
+{ 773892, 2, {996,777}},
+{ 773927, 2, {1463,529}},
+{ 773952, 2, {928,834}},
+{ 773955, 2, {945,819}},
+{ 773976, 2, {952,813}},
+{ 774000, 2, {900,860}},
+{ 774045, 2, {927,835}},
+{ 774084, 2, {1004,771}},
+{ 774090, 2, {915,846}},
+{ 774144, 2, {896,864}},
+{ 774165, 2, {1095,707}},
+{ 774180, 2, {935,828}},
+{ 774210, 2, {985,786}},
+{ 774224, 2, {913,848}},
+{ 774225, 2, {925,837}},
+{ 774231, 2, {893,867}},
+{ 774252, 2, {963,804}},
+{ 774279, 2, {891,869}},
+{ 774288, 2, {912,849}},
+{ 774387, 2, {989,783}},
+{ 774410, 2, {910,851}},
+{ 774468, 2, {909,852}},
+{ 774492, 2, {932,831}},
+{ 774504, 2, {1041,744}},
+{ 774520, 2, {1139,680}},
+{ 774540, 2, {993,780}},
+{ 774576, 2, {978,792}},
+{ 774592, 2, {931,832}},
+{ 774680, 2, {905,856}},
+{ 774690, 2, {930,833}},
+{ 774706, 2, {1073,722}},
+{ 774720, 2, {960,807}},
+{ 774752, 2, {992,781}},
+{ 774780, 2, {1047,740}},
+{ 774800, 2, {1040,745}},
+{ 774860, 2, {901,860}},
+{ 774872, 2, {959,808}},
+{ 774880, 2, {928,835}},
+{ 774900, 2, {900,861}},
+{ 774928, 2, {952,814}},
+{ 774972, 2, {927,836}},
+{ 775000, 2, {1000,775}},
+{ 775005, 2, {915,847}},
+{ 775008, 2, {897,864}},
+{ 775040, 2, {896,865}},
+{ 775075, 2, {1075,721}},
+{ 775124, 2, {893,868}},
+{ 775170, 2, {891,870}},
+{ 775180, 2, {980,791}},
+{ 775188, 2, {1059,732}},
+{ 775200, 2, {912,850}},
+{ 775208, 2, {889,872}},
+{ 775215, 2, {963,805}},
+{ 775224, 2, {888,873}},
+{ 775257, 2, {1273,609}},
+{ 775260, 2, {885,876}},
+{ 775320, 2, {910,852}},
+{ 775368, 2, {968,801}},
+{ 775376, 2, {989,784}},
+{ 775390, 2, {1007,770}},
+{ 775404, 2, {1071,724}},
+{ 775440, 2, {1077,720}},
+{ 775489, 2, {1573,493}},
+{ 775500, 2, {940,825}},
+{ 775515, 2, {1261,615}},
+{ 775536, 2, {906,856}},
+{ 775560, 2, {920,843}},
+{ 775625, 2, {1241,625}},
+{ 775632, 2, {904,858}},
+{ 775635, 2, {1245,623}},
+{ 775656, 2, {972,798}},
+{ 775675, 2, {1349,575}},
+{ 775676, 2, {1037,748}},
+{ 775698, 2, {966,803}},
+{ 775710, 2, {918,845}},
+{ 775761, 2, {901,861}},
+{ 775775, 2, {1001,775}},
+{ 775782, 2, {917,846}},
+{ 775860, 2, {965,804}},
+{ 775866, 2, {1029,754}},
+{ 775880, 2, {952,815}},
+{ 775920, 2, {915,848}},
+{ 775968, 2, {944,822}},
+{ 775971, 2, {981,791}},
+{ 776000, 2, {970,800}},
+{ 776016, 2, {951,816}},
+{ 776048, 2, {1066,728}},
+{ 776050, 2, {913,850}},
+{ 776061, 2, {891,871}},
+{ 776097, 2, {889,873}},
+{ 776100, 2, {975,796}},
+{ 776150, 2, {950,817}},
+{ 776160, 2, {882,880}},
+{ 776204, 2, {1012,767}},
+{ 776208, 2, {942,824}},
+{ 776256, 2, {933,832}},
+{ 776322, 2, {1003,774}},
+{ 776340, 2, {908,855}},
+{ 776376, 2, {984,789}},
+{ 776385, 2, {1065,729}},
+{ 776412, 2, {948,819}},
+{ 776440, 2, {940,826}},
+{ 776448, 2, {1011,768}},
+{ 776475, 2, {1015,765}},
+{ 776490, 2, {905,858}},
+{ 776503, 2, {1127,689}},
+{ 776550, 2, {930,835}},
+{ 776580, 2, {903,860}},
+{ 776664, 2, {938,828}},
+{ 776720, 2, {1022,760}},
+{ 776736, 2, {899,864}},
+{ 776776, 2, {1001,776}},
+{ 776815, 2, {1105,703}},
+{ 776832, 2, {896,867}},
+{ 776853, 2, {1121,693}},
+{ 776875, 2, {1243,625}},
+{ 776880, 2, {936,830}},
+{ 776910, 2, {893,870}},
+{ 776952, 2, {891,872}},
+{ 776988, 2, {1017,764}},
+{ 777000, 2, {888,875}},
+{ 777024, 2, {912,852}},
+{ 777036, 2, {884,879}},
+{ 777062, 2, {1573,494}},
+{ 777084, 2, {924,841}},
+{ 777168, 2, {1008,771}},
+{ 777192, 2, {1128,689}},
+{ 777200, 2, {1072,725}},
+{ 777216, 2, {1012,768}},
+{ 777228, 2, {956,813}},
+{ 777231, 2, {949,819}},
+{ 777240, 2, {1016,765}},
+{ 777324, 2, {921,844}},
+{ 777325, 2, {1003,775}},
+{ 777400, 2, {920,845}},
+{ 777492, 2, {939,828}},
+{ 777510, 2, {954,815}},
+{ 777546, 2, {918,847}},
+{ 777552, 2, {1002,776}},
+{ 777600, 2, {900,864}},
+{ 777616, 2, {917,848}},
+{ 777684, 2, {916,849}},
+{ 777728, 2, {896,868}},
+{ 777756, 2, {987,788}},
+{ 777784, 2, {952,817}},
+{ 777816, 2, {936,831}},
+{ 777870, 2, {1005,774}},
+{ 777875, 2, {889,875}},
+{ 777876, 2, {913,852}},
+{ 777920, 2, {884,880}},
+{ 777948, 2, {964,807}},
+{ 777952, 2, {1057,736}},
+{ 777975, 2, {943,825}},
+{ 778085, 2, {1505,517}},
+{ 778104, 2, {909,856}},
+{ 778113, 2, {1253,621}},
+{ 778180, 2, {949,820}},
+{ 778221, 2, {999,779}},
+{ 778240, 2, {1024,760}},
+{ 778260, 2, {1020,763}},
+{ 778302, 2, {994,783}},
+{ 778305, 2, {979,795}},
+{ 778320, 2, {920,846}},
+{ 778344, 2, {904,861}},
+{ 778360, 2, {1160,671}},
+{ 778400, 2, {973,800}},
+{ 778464, 2, {901,864}},
+{ 778500, 2, {900,865}},
+{ 778505, 2, {1015,767}},
+{ 778512, 2, {993,784}},
+{ 778572, 2, {972,801}},
+{ 778590, 2, {1055,738}},
+{ 778596, 2, {897,868}},
+{ 778624, 2, {896,869}},
+{ 778635, 2, {1089,715}},
+{ 778650, 2, {895,870}},
+{ 778668, 2, {1041,748}},
+{ 778680, 2, {927,840}},
+{ 778716, 2, {892,873}},
+{ 778720, 2, {992,785}},
+{ 778734, 2, {891,874}},
+{ 778752, 2, {936,832}},
+{ 778764, 2, {889,876}},
+{ 778800, 2, {885,880}},
+{ 778848, 2, {912,854}},
+{ 778932, 2, {924,843}},
+{ 778968, 2, {1047,744}},
+{ 779025, 2, {975,799}},
+{ 779031, 2, {1161,671}},
+{ 779076, 2, {969,804}},
+{ 779085, 2, {995,783}},
+{ 779100, 2, {980,795}},
+{ 779121, 2, {1043,747}},
+{ 779220, 2, {962,810}},
+{ 779240, 2, {920,847}},
+{ 779246, 2, {1066,731}},
+{ 779247, 2, {931,837}},
+{ 779275, 2, {1525,511}},
+{ 779280, 2, {955,816}},
+{ 779296, 2, {994,784}},
+{ 779328, 2, {902,864}},
+{ 779331, 2, {1003,777}},
+{ 779373, 2, {973,801}},
+{ 779424, 2, {1059,736}},
+{ 779433, 2, {899,867}},
+{ 779450, 2, {917,850}},
+{ 779520, 2, {896,870}},
+{ 779532, 2, {988,789}},
+{ 779568, 2, {894,872}},
+{ 779580, 2, {915,852}},
+{ 779625, 2, {891,875}},
+{ 779640, 2, {890,876}},
+{ 779688, 2, {884,882}},
+{ 779702, 2, {913,854}},
+{ 779712, 2, {992,786}},
+{ 779720, 2, {965,808}},
+{ 779748, 2, {1077,724}},
+{ 779760, 2, {912,855}},
+{ 779779, 2, {1001,779}},
+{ 779790, 2, {935,834}},
+{ 779820, 2, {951,820}},
+{ 779868, 2, {996,783}},
+{ 779880, 2, {970,804}},
+{ 779988, 2, {933,836}},
+{ 780000, 2, {975,800}},
+{ 780084, 2, {932,837}},
+{ 780108, 2, {1004,777}},
+{ 780120, 2, {985,792}},
+{ 780192, 2, {903,864}},
+{ 780208, 2, {968,806}},
+{ 780219, 2, {999,781}},
+{ 780252, 2, {1012,771}},
+{ 780273, 2, {1053,741}},
+{ 780275, 2, {1357,575}},
+{ 780300, 2, {900,867}},
+{ 780312, 2, {984,793}},
+{ 780325, 2, {1225,637}},
+{ 780416, 2, {896,871}},
+{ 780425, 2, {1007,775}},
+{ 780435, 2, {1107,705}},
+{ 780440, 2, {895,872}},
+{ 780450, 2, {946,825}},
+{ 780480, 2, {960,813}},
+{ 780492, 2, {1011,772}},
+{ 780516, 2, {891,876}},
+{ 780528, 2, {966,808}},
+{ 780552, 2, {888,879}},
+{ 780570, 2, {885,882}},
+{ 780576, 2, {1038,752}},
+{ 780615, 2, {913,855}},
+{ 780624, 2, {936,834}},
+{ 780759, 2, {1071,729}},
+{ 780760, 2, {1048,745}},
+{ 780804, 2, {943,828}},
+{ 780858, 2, {923,846}},
+{ 780864, 2, {996,784}},
+{ 780876, 2, {981,796}},
+{ 780912, 2, {957,816}},
+{ 781000, 2, {1000,781}},
+{ 781008, 2, {921,848}},
+{ 781011, 2, {1029,759}},
+{ 781044, 2, {1067,732}},
+{ 781050, 2, {1025,762}},
+{ 781080, 2, {920,849}},
+{ 781140, 2, {940,831}},
+{ 781144, 2, {962,812}},
+{ 781176, 2, {968,807}},
+{ 781200, 2, {900,868}},
+{ 781218, 2, {918,851}},
+{ 781220, 2, {1060,737}},
+{ 781242, 2, {979,798}},
+{ 781248, 2, {939,832}},
+{ 781284, 2, {917,852}},
+{ 781335, 2, {895,873}},
+{ 781375, 2, {893,875}},
+{ 781389, 2, {1099,711}},
+{ 781425, 2, {1035,755}},
+{ 781560, 2, {936,835}},
+{ 781572, 2, {1023,764}},
+{ 781632, 2, {944,828}},
+{ 781650, 2, {965,810}},
+{ 781740, 2, {909,860}},
+{ 781776, 2, {976,801}},
+{ 781781, 2, {923,847}},
+{ 781788, 2, {908,861}},
+{ 781830, 2, {1022,765}},
+{ 781869, 2, {957,817}},
+{ 781872, 2, {1074,728}},
+{ 781875, 2, {1125,695}},
+{ 781920, 2, {905,864}},
+{ 781956, 2, {963,812}},
+{ 781960, 2, {904,865}},
+{ 782040, 2, {931,840}},
+{ 782068, 2, {901,868}},
+{ 782070, 2, {995,786}},
+{ 782075, 2, {1025,763}},
+{ 782080, 2, {940,832}},
+{ 782100, 2, {900,869}},
+{ 782130, 2, {899,870}},
+{ 782145, 2, {955,819}},
+{ 782184, 2, {897,872}},
+{ 782208, 2, {896,873}},
+{ 782250, 2, {894,875}},
+{ 782275, 2, {1079,725}},
+{ 782304, 2, {928,843}},
+{ 782320, 2, {889,880}},
+{ 782340, 2, {885,884}},
+{ 782388, 2, {927,844}},
+{ 782391, 2, {1173,667}},
+{ 782400, 2, {960,815}},
+{ 782439, 2, {1007,777}},
+{ 782460, 2, {945,828}},
+{ 782484, 2, {993,788}},
+{ 782488, 2, {1099,712}},
+{ 782496, 2, {912,858}},
+{ 782544, 2, {952,822}},
+{ 782550, 2, {925,846}},
+{ 782560, 2, {1072,730}},
+{ 782595, 2, {935,837}},
+{ 782628, 2, {924,847}},
+{ 782688, 2, {992,789}},
+{ 782691, 2, {987,793}},
+{ 782694, 2, {1062,737}},
+{ 782704, 2, {923,848}},
+{ 782730, 2, {1115,702}},
+{ 782782, 2, {1001,782}},
+{ 782784, 2, {906,864}},
+{ 782832, 2, {1041,752}},
+{ 782920, 2, {920,851}},
+{ 782925, 2, {949,825}},
+{ 782936, 2, {902,868}},
+{ 782952, 2, {969,808}},
+{ 782955, 2, {1143,685}},
+{ 782964, 2, {956,819}},
+{ 782971, 2, {931,841}},
+{ 783000, 2, {900,870}},
+{ 783020, 2, {940,833}},
+{ 783090, 2, {990,791}},
+{ 783104, 2, {896,874}},
+{ 783150, 2, {1135,690}},
+{ 783156, 2, {1047,748}},
+{ 783180, 2, {916,855}},
+{ 783200, 2, {890,880}},
+{ 783216, 2, {888,882}},
+{ 783240, 2, {915,856}},
+{ 783255, 2, {1111,705}},
+{ 783288, 2, {946,828}},
+{ 783315, 2, {927,845}},
+{ 783336, 2, {1016,771}},
+{ 783360, 2, {960,816}},
+{ 783432, 2, {936,837}},
+{ 783475, 2, {925,847}},
+{ 783520, 2, {944,830}},
+{ 783552, 2, {924,848}},
+{ 783624, 2, {951,824}},
+{ 783640, 2, {1096,715}},
+{ 783660, 2, {1059,740}},
+{ 783675, 2, {1075,729}},
+{ 783680, 2, {992,790}},
+{ 783690, 2, {906,865}},
+{ 783720, 2, {933,840}},
+{ 783725, 2, {1081,725}},
+{ 783728, 2, {976,803}},
+{ 783732, 2, {964,813}},
+{ 783744, 2, {942,832}},
+{ 783768, 2, {904,867}},
+{ 783783, 2, {957,819}},
+{ 783804, 2, {903,868}},
+{ 783870, 2, {901,870}},
+{ 783874, 2, {949,826}},
+{ 783900, 2, {900,871}},
+{ 783959, 2, {1331,589}},
+{ 783972, 2, {918,854}},
+{ 784000, 2, {896,875}},
+{ 784020, 2, {895,876}},
+{ 784035, 2, {917,855}},
+{ 784056, 2, {1077,728}},
+{ 784068, 2, {892,879}},
+{ 784080, 2, {891,880}},
+{ 784092, 2, {1083,724}},
+{ 784098, 2, {889,882}},
+{ 784125, 2, {1025,765}},
+{ 784160, 2, {928,845}},
+{ 784176, 2, {961,816}},
+{ 784215, 2, {999,785}},
+{ 784245, 2, {1067,735}},
+{ 784320, 2, {912,860}},
+{ 784336, 2, {1043,752}},
+{ 784350, 2, {945,830}},
+{ 784400, 2, {925,848}},
+{ 784404, 2, {972,807}},
+{ 784464, 2, {944,831}},
+{ 784476, 2, {924,849}},
+{ 784485, 2, {1053,745}},
+{ 784536, 2, {1011,776}},
+{ 784548, 2, {1116,703}},
+{ 784550, 2, {923,850}},
+{ 784576, 2, {943,832}},
+{ 784641, 2, {1023,767}},
+{ 784692, 2, {921,852}},
+{ 784700, 2, {950,826}},
+{ 784704, 2, {976,804}},
+{ 784707, 2, {903,869}},
+{ 784740, 2, {902,870}},
+{ 784784, 2, {1001,784}},
+{ 784845, 2, {963,815}},
+{ 784875, 2, {897,875}},
+{ 784890, 2, {918,855}},
+{ 784896, 2, {896,876}},
+{ 784905, 2, {1005,781}},
+{ 784952, 2, {917,856}},
+{ 784980, 2, {890,882}},
+{ 785000, 2, {1000,785}},
+{ 785004, 2, {939,836}},
+{ 785008, 2, {1141,688}},
+{ 785010, 2, {955,822}},
+{ 785088, 2, {928,846}},
+{ 785106, 2, {938,837}},
+{ 785124, 2, {1017,772}},
+{ 785169, 2, {927,847}},
+{ 785180, 2, {913,860}},
+{ 785200, 2, {1040,755}},
+{ 785213, 2, {2431,323}},
+{ 785232, 2, {912,861}},
+{ 785323, 2, {1457,539}},
+{ 785349, 2, {1003,783}},
+{ 785376, 2, {909,864}},
+{ 785400, 2, {924,850}},
+{ 785421, 2, {959,819}},
+{ 785460, 2, {988,795}},
+{ 785512, 2, {1079,728}},
+{ 785519, 2, {943,833}},
+{ 785536, 2, {1088,722}},
+{ 785568, 2, {1002,784}},
+{ 785610, 2, {903,870}},
+{ 785642, 2, {902,871}},
+{ 785652, 2, {987,796}},
+{ 785655, 2, {1027,765}},
+{ 785664, 2, {992,792}},
+{ 785676, 2, {932,843}},
+{ 785680, 2, {920,854}},
+{ 785700, 2, {900,873}},
+{ 785726, 2, {899,874}},
+{ 785757, 2, {1207,651}},
+{ 785772, 2, {897,876}},
+{ 785808, 2, {918,856}},
+{ 785840, 2, {893,880}},
+{ 785844, 2, {996,789}},
+{ 785850, 2, {930,845}},
+{ 785880, 2, {888,885}},
+{ 785890, 2, {1030,763}},
+{ 785954, 2, {962,817}},
+{ 785970, 2, {1065,738}},
+{ 786000, 2, {1000,786}},
+{ 786016, 2, {928,847}},
+{ 786030, 2, {985,798}},
+{ 786048, 2, {1068,736}},
+{ 786093, 2, {913,861}},
+{ 786096, 2, {927,848}},
+{ 786132, 2, {1004,783}},
+{ 786156, 2, {1029,764}},
+{ 786175, 2, {1025,767}},
+{ 786184, 2, {973,808}},
+{ 786216, 2, {984,799}},
+{ 786240, 2, {910,864}},
+{ 786258, 2, {1083,726}},
+{ 786285, 2, {909,865}},
+{ 786324, 2, {924,851}},
+{ 786335, 2, {935,841}},
+{ 786352, 2, {944,833}},
+{ 786357, 2, {1287,611}},
+{ 786380, 2, {959,820}},
+{ 786384, 2, {1016,774}},
+{ 786420, 2, {1020,771}},
+{ 786435, 2, {1417,555}},
+{ 786450, 2, {1050,749}},
+{ 786456, 2, {993,792}},
+{ 786480, 2, {904,870}},
+{ 786500, 2, {1100,715}},
+{ 786513, 2, {903,871}},
+{ 786555, 2, {1135,693}},
+{ 786570, 2, {942,835}},
+{ 786588, 2, {1111,708}},
+{ 786600, 2, {900,874}},
+{ 786625, 2, {899,875}},
+{ 786720, 2, {894,880}},
+{ 786765, 2, {889,885}},
+{ 786807, 2, {1267,621}},
+{ 786828, 2, {969,812}},
+{ 786840, 2, {948,830}},
+{ 786842, 2, {1147,686}},
+{ 786864, 2, {1014,776}},
+{ 786900, 2, {915,860}},
+{ 786915, 2, {1005,783}},
+{ 786920, 2, {955,824}},
+{ 786940, 2, {980,803}},
+{ 786942, 2, {1026,767}},
+{ 786968, 2, {1081,728}},
+{ 786984, 2, {968,813}},
+{ 786996, 2, {1041,756}},
+{ 787050, 2, {954,825}},
+{ 787059, 2, {961,819}},
+{ 787072, 2, {946,832}},
+{ 787083, 2, {1037,759}},
+{ 787116, 2, {979,804}},
+{ 787176, 2, {936,841}},
+{ 787185, 2, {945,833}},
+{ 787200, 2, {960,820}},
+{ 787212, 2, {999,788}},
+{ 787236, 2, {908,867}},
+{ 787290, 2, {966,815}},
+{ 787296, 2, {944,834}},
+{ 787332, 2, {1092,721}},
+{ 787344, 2, {1047,752}},
+{ 787350, 2, {905,870}},
+{ 787360, 2, {1036,760}},
+{ 787400, 2, {1016,775}},
+{ 787416, 2, {903,872}},
+{ 787428, 2, {951,828}},
+{ 787440, 2, {965,816}},
+{ 787452, 2, {933,844}},
+{ 787500, 2, {900,875}},
+{ 787584, 2, {896,879}},
+{ 787600, 2, {895,880}},
+{ 787626, 2, {893,882}},
+{ 787632, 2, {976,807}},
+{ 787644, 2, {891,884}},
+{ 787710, 2, {930,847}},
+{ 787788, 2, {948,831}},
+{ 787800, 2, {975,808}},
+{ 787836, 2, {996,791}},
+{ 787865, 2, {1105,713}},
+{ 787872, 2, {928,849}},
+{ 787878, 2, {962,819}},
+{ 787896, 2, {1059,744}},
+{ 787920, 2, {938,840}},
+{ 787930, 2, {1045,754}},
+{ 788000, 2, {985,800}},
+{ 788004, 2, {954,826}},
+{ 788018, 2, {946,833}},
+{ 788049, 2, {1081,729}},
+{ 788085, 2, {1055,747}},
+{ 788095, 2, {979,805}},
+{ 788100, 2, {925,852}},
+{ 788120, 2, {1037,760}},
+{ 788125, 2, {1261,625}},
+{ 788175, 2, {1017,775}},
+{ 788184, 2, {984,801}},
+{ 788216, 2, {1144,689}},
+{ 788240, 2, {944,835}},
+{ 788242, 2, {923,854}},
+{ 788307, 2, {1131,697}},
+{ 788364, 2, {1077,732}},
+{ 788375, 2, {901,875}},
+{ 788376, 2, {921,856}},
+{ 788392, 2, {1054,748}},
+{ 788425, 2, {1175,671}},
+{ 788480, 2, {896,880}},
+{ 788481, 2, {1007,783}},
+{ 788535, 2, {891,885}},
+{ 788568, 2, {957,824}},
+{ 788580, 2, {1011,780}},
+{ 788620, 2, {917,860}},
+{ 788640, 2, {930,848}},
+{ 788676, 2, {916,861}},
+{ 788700, 2, {956,825}},
+{ 788724, 2, {981,804}},
+{ 788736, 2, {948,832}},
+{ 788760, 2, {939,840}},
+{ 788800, 2, {928,850}},
+{ 788832, 2, {913,864}},
+{ 788880, 2, {912,865}},
+{ 788920, 2, {968,815}},
+{ 788970, 2, {910,867}},
+{ 788985, 2, {985,801}},
+{ 789000, 2, {1000,789}},
+{ 789012, 2, {909,868}},
+{ 789048, 2, {936,843}},
+{ 789061, 2, {1183,667}},
+{ 789075, 2, {945,835}},
+{ 789120, 2, {960,822}},
+{ 789160, 2, {905,872}},
+{ 789165, 2, {923,855}},
+{ 789192, 2, {904,873}},
+{ 789210, 2, {999,790}},
+{ 789243, 2, {1029,767}},
+{ 789250, 2, {902,875}},
+{ 789264, 2, {972,812}},
+{ 789291, 2, {943,837}},
+{ 789327, 2, {1071,737}},
+{ 789360, 2, {897,880}},
+{ 789390, 2, {895,882}},
+{ 789412, 2, {893,884}},
+{ 789420, 2, {892,885}},
+{ 789432, 2, {889,888}},
+{ 789480, 2, {918,860}},
+{ 789488, 2, {931,848}},
+{ 789495, 2, {1095,721}},
+{ 789504, 2, {1024,771}},
+{ 789507, 2, {1083,729}},
+{ 789516, 2, {964,819}},
+{ 789525, 2, {957,825}},
+{ 789568, 2, {949,832}},
+{ 789579, 2, {1057,747}},
+{ 789600, 2, {940,840}},
+{ 789660, 2, {963,820}},
+{ 789684, 2, {948,833}},
+{ 789705, 2, {981,805}},
+{ 789728, 2, {928,851}},
+{ 789750, 2, {975,810}},
+{ 789756, 2, {1023,772}},
+{ 789804, 2, {927,852}},
+{ 789906, 2, {1014,779}},
+{ 789950, 2, {925,854}},
+{ 790020, 2, {924,855}},
+{ 790032, 2, {906,872}},
+{ 790050, 2, {1145,690}},
+{ 790065, 2, {905,873}},
+{ 790125, 2, {903,875}},
+{ 790128, 2, {944,837}},
+{ 790209, 2, {999,791}},
+{ 790216, 2, {959,824}},
+{ 790224, 2, {978,808}},
+{ 790230, 2, {994,795}},
+{ 790236, 2, {972,813}},
+{ 790272, 2, {896,882}},
+{ 790320, 2, {890,888}},
+{ 790335, 2, {965,819}},
+{ 790398, 2, {918,861}},
+{ 790400, 2, {950,832}},
+{ 790428, 2, {993,796}},
+{ 790438, 2, {1159,682}},
+{ 790464, 2, {1074,736}},
+{ 790517, 2, {949,833}},
+{ 790533, 2, {1273,621}},
+{ 790560, 2, {915,864}},
+{ 790608, 2, {1086,728}},
+{ 790625, 2, {1265,625}},
+{ 790656, 2, {928,852}},
+{ 790685, 2, {1015,779}},
+{ 790704, 2, {912,867}},
+{ 790713, 2, {1141,693}},
+{ 790740, 2, {955,828}},
+{ 790790, 2, {910,869}},
+{ 790860, 2, {980,807}},
+{ 790875, 2, {925,855}},
+{ 790920, 2, {936,845}},
+{ 791000, 2, {904,875}},
+{ 791010, 2, {935,846}},
+{ 791028, 2, {903,876}},
+{ 791100, 2, {900,879}},
+{ 791112, 2, {952,831}},
+{ 791120, 2, {899,880}},
+{ 791154, 2, {897,882}},
+{ 791160, 2, {1041,760}},
+{ 791175, 2, {959,825}},
+{ 791184, 2, {933,848}},
+{ 791208, 2, {891,888}},
+{ 791210, 2, {890,889}},
+{ 791232, 2, {951,832}},
+{ 791240, 2, {1048,755}},
+{ 791245, 2, {1295,611}},
+{ 791250, 2, {1055,750}},
+{ 791268, 2, {932,849}},
+{ 791280, 2, {942,840}},
+{ 791350, 2, {931,850}},
+{ 791388, 2, {988,801}},
+{ 791430, 2, {930,851}},
+{ 791505, 2, {1107,715}},
+{ 791520, 2, {970,816}},
+{ 791532, 2, {1047,756}},
+{ 791544, 2, {1032,767}},
+{ 791580, 2, {948,835}},
+{ 791616, 2, {912,868}},
+{ 791673, 2, {969,817}},
+{ 791714, 2, {1067,742}},
+{ 791780, 2, {1180,671}},
+{ 791800, 2, {925,856}},
+{ 791802, 2, {946,837}},
+{ 791820, 2, {954,830}},
+{ 791856, 2, {936,846}},
+{ 791934, 2, {923,858}},
+{ 791940, 2, {985,804}},
+{ 792000, 2, {900,880}},
+{ 792050, 2, {1022,775}},
+{ 792060, 2, {921,860}},
+{ 792064, 2, {896,884}},
+{ 792099, 2, {891,889}},
+{ 792120, 2, {920,861}},
+{ 792132, 2, {1059,748}},
+{ 792156, 2, {1004,789}},
+{ 792180, 2, {972,815}},
+{ 792207, 2, {999,793}},
+{ 792275, 2, {1075,737}},
+{ 792281, 2, {931,851}},
+{ 792288, 2, {917,864}},
+{ 792350, 2, {1150,689}},
+{ 792396, 2, {957,828}},
+{ 792420, 2, {940,843}},
+{ 792484, 2, {913,868}},
+{ 792512, 2, {928,854}},
+{ 792516, 2, {939,844}},
+{ 792528, 2, {912,869}},
+{ 792540, 2, {1020,777}},
+{ 792561, 2, {987,803}},
+{ 792576, 2, {1024,774}},
+{ 792608, 2, {992,799}},
+{ 792610, 2, {910,871}},
+{ 792624, 2, {1011,784}},
+{ 792648, 2, {909,872}},
+{ 792672, 2, {1077,736}},
+{ 792680, 2, {1043,760}},
+{ 792684, 2, {908,873}},
+{ 792715, 2, {1015,781}},
+{ 792750, 2, {906,875}},
+{ 792756, 2, {1083,732}},
+{ 792765, 2, {1115,711}},
+{ 792780, 2, {905,876}},
+{ 792792, 2, {924,858}},
+{ 792825, 2, {961,825}},
+{ 792880, 2, {901,880}},
+{ 792918, 2, {899,882}},
+{ 792948, 2, {897,884}},
+{ 792960, 2, {896,885}},
+{ 792984, 2, {893,888}},
+{ 792990, 2, {891,890}},
+{ 793000, 2, {1000,793}},
+{ 793065, 2, {1079,735}},
+{ 793078, 2, {1034,767}},
+{ 793117, 2, {2197,361}},
+{ 793135, 2, {1085,731}},
+{ 793152, 2, {918,864}},
+{ 793212, 2, {931,852}},
+{ 793230, 2, {965,822}},
+{ 793254, 2, {1111,714}},
+{ 793260, 2, {1017,780}},
+{ 793350, 2, {1025,774}},
+{ 793364, 2, {949,836}},
+{ 793408, 2, {1012,784}},
+{ 793440, 2, {912,870}},
+{ 793476, 2, {948,837}},
+{ 793485, 2, {1145,693}},
+{ 793488, 2, {976,813}},
+{ 793500, 2, {1058,750}},
+{ 793512, 2, {927,856}},
+{ 793548, 2, {938,846}},
+{ 793584, 2, {1002,792}},
+{ 793611, 2, {969,819}},
+{ 793650, 2, {925,858}},
+{ 793702, 2, {1157,686}},
+{ 793730, 2, {986,805}},
+{ 793760, 2, {902,880}},
+{ 793780, 2, {923,860}},
+{ 793793, 2, {1001,793}},
+{ 793800, 2, {900,882}},
+{ 793848, 2, {1023,776}},
+{ 793872, 2, {894,888}},
+{ 793940, 2, {1060,749}},
+{ 793968, 2, {952,834}},
+{ 794010, 2, {995,798}},
+{ 794052, 2, {959,828}},
+{ 794070, 2, {918,865}},
+{ 794088, 2, {984,807}},
+{ 794112, 2, {1034,768}},
+{ 794124, 2, {972,817}},
+{ 794144, 2, {1079,736}},
+{ 794172, 2, {916,867}},
+{ 794205, 2, {999,795}},
+{ 794220, 2, {915,868}},
+{ 794240, 2, {1088,730}},
+{ 794310, 2, {913,870}},
+{ 794313, 2, {949,837}},
+{ 794325, 2, {1275,623}},
+{ 794339, 2, {1247,637}},
+{ 794352, 2, {912,871}},
+{ 794376, 2, {1003,792}},
+{ 794385, 2, {1143,695}},
+{ 794388, 2, {1029,772}},
+{ 794400, 2, {993,800}},
+{ 794436, 2, {956,831}},
+{ 794560, 2, {955,832}},
+{ 794580, 2, {969,820}},
+{ 794592, 2, {992,801}},
+{ 794600, 2, {1096,725}},
+{ 794616, 2, {904,879}},
+{ 794640, 2, {903,880}},
+{ 794664, 2, {936,849}},
+{ 794682, 2, {901,882}},
+{ 794703, 2, {923,861}},
+{ 794716, 2, {899,884}},
+{ 794745, 2, {945,841}},
+{ 794760, 2, {895,888}},
+{ 794772, 2, {892,891}},
+{ 794864, 2, {1057,752}},
+{ 794880, 2, {920,864}},
+{ 794898, 2, {1027,774}},
+{ 794916, 2, {933,852}},
+{ 794920, 2, {952,835}},
+{ 794948, 2, {979,812}},
+{ 794955, 2, {1005,791}},
+{ 794970, 2, {990,803}},
+{ 794976, 2, {1014,784}},
+{ 795000, 2, {1000,795}},
+{ 795015, 2, {1053,755}},
+{ 795025, 2, {1225,649}},
+{ 795036, 2, {951,836}},
+{ 795080, 2, {1112,715}},
+{ 795093, 2, {1073,741}},
+{ 795135, 2, {915,869}},
+{ 795160, 2, {965,824}},
+{ 795200, 2, {994,800}},
+{ 795204, 2, {999,796}},
+{ 795285, 2, {1161,685}},
+{ 795300, 2, {964,825}},
+{ 795312, 2, {1008,789}},
+{ 795324, 2, {1041,764}},
+{ 795328, 2, {1088,731}},
+{ 795340, 2, {910,874}},
+{ 795375, 2, {909,875}},
+{ 795424, 2, {938,848}},
+{ 795440, 2, {976,815}},
+{ 795501, 2, {1281,621}},
+{ 795528, 2, {1016,783}},
+{ 795564, 2, {902,882}},
+{ 795600, 2, {900,884}},
+{ 795625, 2, {1273,625}},
+{ 795627, 2, {1211,657}},
+{ 795648, 2, {896,888}},
+{ 795663, 2, {893,891}},
+{ 795685, 2, {935,851}},
+{ 795696, 2, {968,822}},
+{ 795708, 2, {961,828}},
+{ 795720, 2, {1047,760}},
+{ 795744, 2, {921,864}},
+{ 795792, 2, {944,843}},
+{ 795795, 2, {1001,795}},
+{ 795800, 2, {920,865}},
+{ 795872, 2, {952,836}},
+{ 795880, 2, {985,808}},
+{ 795925, 2, {1027,775}},
+{ 795938, 2, {1331,598}},
+{ 795970, 2, {959,830}},
+{ 795984, 2, {966,824}},
+{ 795990, 2, {942,845}},
+{ 796000, 2, {995,800}},
+{ 796005, 2, {931,855}},
+{ 796059, 2, {1089,731}},
+{ 796068, 2, {972,819}},
+{ 796080, 2, {930,856}},
+{ 796110, 2, {1115,714}},
+{ 796145, 2, {989,805}},
+{ 796176, 2, {912,873}},
+{ 796180, 2, {940,847}},
+{ 796195, 2, {1445,551}},
+{ 796224, 2, {928,858}},
+{ 796250, 2, {910,875}},
+{ 796272, 2, {939,848}},
+{ 796284, 2, {909,876}},
+{ 796290, 2, {1045,762}},
+{ 796368, 2, {1059,752}},
+{ 796400, 2, {905,880}},
+{ 796425, 2, {925,861}},
+{ 796470, 2, {955,834}},
+{ 796484, 2, {901,884}},
+{ 796500, 2, {900,885}},
+{ 796536, 2, {897,888}},
+{ 796544, 2, {896,889}},
+{ 796572, 2, {981,812}},
+{ 796575, 2, {975,817}},
+{ 796576, 2, {992,803}},
+{ 796590, 2, {954,835}},
+{ 796620, 2, {935,852}},
+{ 796668, 2, {1011,788}},
+{ 796740, 2, {980,813}},
+{ 796770, 2, {1135,702}},
+{ 796800, 2, {960,830}},
+{ 796824, 2, {918,868}},
+{ 796835, 2, {943,845}},
+{ 796860, 2, {932,855}},
+{ 796887, 2, {973,819}},
+{ 796917, 2, {1023,779}},
+{ 796936, 2, {931,856}},
+{ 796950, 2, {966,825}},
+{ 796965, 2, {915,871}},
+{ 796980, 2, {1077,740}},
+{ 796995, 2, {995,801}},
+{ 797040, 2, {972,820}},
+{ 797088, 2, {912,874}},
+{ 797134, 2, {989,806}},
+{ 797148, 2, {1089,732}},
+{ 797160, 2, {910,876}},
+{ 797181, 2, {957,833}},
+{ 797184, 2, {1038,768}},
+{ 797220, 2, {927,860}},
+{ 797280, 2, {906,880}},
+{ 797300, 2, {938,850}},
+{ 797316, 2, {988,807}},
+{ 797328, 2, {904,882}},
+{ 797364, 2, {963,828}},
+{ 797440, 2, {896,890}},
+{ 797445, 2, {895,891}},
+{ 797472, 2, {923,864}},
+{ 797475, 2, {1029,775}},
+{ 797496, 2, {987,808}},
+{ 797525, 2, {1387,575}},
+{ 797560, 2, {1016,785}},
+{ 797568, 2, {992,804}},
+{ 797580, 2, {945,844}},
+{ 797640, 2, {920,867}},
+{ 797650, 2, {1075,742}},
+{ 797680, 2, {944,845}},
+{ 797685, 2, {1065,749}},
+{ 797696, 2, {1024,779}},
+{ 797720, 2, {980,814}},
+{ 797742, 2, {918,869}},
+{ 797760, 2, {960,831}},
+{ 797790, 2, {917,870}},
+{ 797796, 2, {996,801}},
+{ 797810, 2, {1105,722}},
+{ 797825, 2, {1175,679}},
+{ 797850, 2, {985,810}},
+{ 797860, 2, {973,820}},
+{ 797880, 2, {915,872}},
+{ 797888, 2, {959,832}},
+{ 797895, 2, {1043,765}},
+{ 797979, 2, {1027,777}},
+{ 798000, 2, {912,875}},
+{ 798048, 2, {978,816}},
+{ 798060, 2, {940,849}},
+{ 798080, 2, {928,860}},
+{ 798132, 2, {908,879}},
+{ 798180, 2, {1004,795}},
+{ 798182, 2, {994,803}},
+{ 798201, 2, {999,799}},
+{ 798210, 2, {905,882}},
+{ 798252, 2, {903,884}},
+{ 798255, 2, {1095,729}},
+{ 798336, 2, {896,891}},
+{ 798345, 2, {1017,785}},
+{ 798372, 2, {993,804}},
+{ 798399, 2, {1197,667}},
+{ 798456, 2, {969,824}},
+{ 798468, 2, {1012,789}},
+{ 798504, 2, {1029,776}},
+{ 798525, 2, {945,845}},
+{ 798560, 2, {920,868}},
+{ 798576, 2, {1016,786}},
+{ 798600, 2, {968,825}},
+{ 798624, 2, {944,846}},
+{ 798640, 2, {1072,745}},
+{ 798648, 2, {933,856}},
+{ 798660, 2, {918,870}},
+{ 798721, 2, {943,847}},
+{ 798756, 2, {1028,777}},
+{ 798765, 2, {1133,705}},
+{ 798816, 2, {942,848}},
+{ 798840, 2, {951,840}},
+{ 798864, 2, {979,816}},
+{ 798875, 2, {913,875}},
+{ 798910, 2, {1010,791}},
+{ 798912, 2, {912,876}},
+{ 798950, 2, {950,841}},
+{ 799008, 2, {928,861}},
+{ 799020, 2, {965,828}},
+{ 799056, 2, {1074,744}},
+{ 799085, 2, {1343,595}},
+{ 799164, 2, {948,843}},
+{ 799227, 2, {897,891}},
+{ 799254, 2, {1026,779}},
+{ 799260, 2, {924,865}},
+{ 799296, 2, {1086,736}},
+{ 799335, 2, {955,837}},
+{ 799344, 2, {936,854}},
+{ 799425, 2, {935,855}},
+{ 799428, 2, {921,868}},
+{ 799456, 2, {1162,688}},
+{ 799480, 2, {920,869}},
+{ 799488, 2, {1041,768}},
+{ 799500, 2, {975,820}},
+{ 799515, 2, {981,815}},
+{ 799552, 2, {961,832}},
+{ 799568, 2, {944,847}},
+{ 799578, 2, {918,871}},
+{ 799624, 2, {917,872}},
+{ 799645, 2, {1085,737}},
+{ 799668, 2, {916,873}},
+{ 799680, 2, {952,840}},
+{ 799744, 2, {1024,781}},
+{ 799788, 2, {913,876}},
+{ 799799, 2, {1001,799}},
+{ 799825, 2, {1391,575}},
+{ 799908, 2, {1047,764}},
+{ 799920, 2, {909,880}},
+{ 799929, 2, {1161,689}},
+{ 799932, 2, {1068,749}},
+{ 799980, 2, {995,804}},
+{ 799992, 2, {984,813}},
+{ 800028, 2, {939,852}},
+{ 800040, 2, {904,885}},
+{ 800052, 2, {957,836}},
+{ 800072, 2, {1099,728}},
+{ 800088, 2, {901,888}},
+{ 800100, 2, {900,889}},
+{ 800124, 2, {897,892}},
+{ 800128, 2, {896,893}},
+{ 800130, 2, {895,894}},
+{ 800172, 2, {956,837}},
+{ 800226, 2, {1022,783}},
+{ 800280, 2, {936,855}},
+{ 800360, 2, {935,856}},
+{ 800384, 2, {962,832}},
+{ 800400, 2, {920,870}},
+{ 800415, 2, {945,847}},
+{ 800496, 2, {918,872}},
+{ 800513, 2, {961,833}},
+{ 800525, 2, {1025,781}},
+{ 800541, 2, {917,873}},
+{ 800544, 2, {992,807}},
+{ 800604, 2, {1059,756}},
+{ 800618, 2, {1079,742}},
+{ 800632, 2, {952,841}},
+{ 800640, 2, {960,834}},
+{ 800660, 2, {931,860}},
+{ 800667, 2, {1253,639}},
+{ 800712, 2, {1011,792}},
+{ 800730, 2, {930,861}},
+{ 800748, 2, {1044,767}},
+{ 800768, 2, {1024,782}},
+{ 800800, 2, {910,880}},
+{ 800865, 2, {1369,585}},
+{ 800928, 2, {927,864}},
+{ 800976, 2, {902,888}},
+{ 801000, 2, {900,890}},
+{ 801009, 2, {899,891}},
+{ 801021, 2, {897,893}},
+{ 801024, 2, {896,894}},
+{ 801040, 2, {1054,760}},
+{ 801060, 2, {948,845}},
+{ 801084, 2, {964,831}},
+{ 801090, 2, {989,810}},
+{ 801108, 2, {924,867}},
+{ 801150, 2, {1050,763}},
+{ 801164, 2, {923,868}},
+{ 801171, 2, {1099,729}},
+{ 801248, 2, {1022,784}},
+{ 801288, 2, {1077,744}},
+{ 801297, 2, {1127,711}},
+{ 801306, 2, {1026,781}},
+{ 801320, 2, {920,871}},
+{ 801346, 2, {962,833}},
+{ 801350, 2, {1034,775}},
+{ 801360, 2, {945,848}},
+{ 801396, 2, {1017,788}},
+{ 801420, 2, {1083,740}},
+{ 801444, 2, {987,812}},
+{ 801456, 2, {944,849}},
+{ 801515, 2, {1045,767}},
+{ 801540, 2, {915,876}},
+{ 801550, 2, {943,850}},
+{ 801600, 2, {960,835}},
+{ 801624, 2, {1016,789}},
+{ 801648, 2, {912,879}},
+{ 801735, 2, {1243,645}},
+{ 801752, 2, {973,824}},
+{ 801801, 2, {979,819}},
+{ 801855, 2, {927,865}},
+{ 801864, 2, {903,888}},
+{ 801900, 2, {900,891}},
+{ 801920, 2, {896,895}},
+{ 801990, 2, {938,855}},
+{ 802125, 2, {1035,775}},
+{ 802164, 2, {1133,708}},
+{ 802165, 2, {1435,559}},
+{ 802179, 2, {963,833}},
+{ 802197, 2, {999,803}},
+{ 802200, 2, {955,840}},
+{ 802230, 2, {935,858}},
+{ 802272, 2, {976,822}},
+{ 802332, 2, {918,874}},
+{ 802344, 2, {993,808}},
+{ 802375, 2, {917,875}},
+{ 802380, 2, {933,860}},
+{ 802400, 2, {944,850}},
+{ 802424, 2, {1127,712}},
+{ 802452, 2, {932,861}},
+{ 802516, 2, {1012,793}},
+{ 802536, 2, {952,843}},
+{ 802575, 2, {1025,783}},
+{ 802620, 2, {910,882}},
+{ 802638, 2, {1037,774}},
+{ 802644, 2, {951,844}},
+{ 802655, 2, {1207,665}},
+{ 802683, 2, {959,837}},
+{ 802720, 2, {928,865}},
+{ 802725, 2, {973,825}},
+{ 802760, 2, {940,854}},
+{ 802791, 2, {901,891}},
+{ 802854, 2, {949,846}},
+{ 802872, 2, {972,826}},
+{ 802880, 2, {965,832}},
+{ 802956, 2, {924,869}},
+{ 803000, 2, {1000,803}},
+{ 803010, 2, {923,870}},
+{ 803025, 2, {1075,747}},
+{ 803068, 2, {989,812}},
+{ 803088, 2, {936,858}},
+{ 803110, 2, {1043,770}},
+{ 803112, 2, {921,872}},
+{ 803136, 2, {1068,752}},
+{ 803160, 2, {920,873}},
+{ 803187, 2, {1159,693}},
+{ 803196, 2, {999,804}},
+{ 803225, 2, {1691,475}},
+{ 803244, 2, {988,813}},
+{ 803250, 2, {918,875}},
+{ 803264, 2, {1141,704}},
+{ 803292, 2, {917,876}},
+{ 803320, 2, {1057,760}},
+{ 803396, 2, {961,836}},
+{ 803400, 2, {975,824}},
+{ 803440, 2, {913,880}},
+{ 803520, 2, {930,864}},
+{ 803551, 2, {1127,713}},
+{ 803556, 2, {909,884}},
+{ 803580, 2, {908,885}},
+{ 803586, 2, {1007,798}},
+{ 803640, 2, {905,888}},
+{ 803649, 2, {1029,781}},
+{ 803652, 2, {1041,772}},
+{ 803656, 2, {904,889}},
+{ 803675, 2, {1037,775}},
+{ 803682, 2, {902,891}},
+{ 803700, 2, {900,893}},
+{ 803712, 2, {897,896}},
+{ 803760, 2, {985,816}},
+{ 803772, 2, {996,807}},
+{ 803784, 2, {939,856}},
+{ 803790, 2, {1145,702}},
+{ 803803, 2, {949,847}},
+{ 803825, 2, {925,869}},
+{ 803840, 2, {1024,785}},
+{ 803862, 2, {1207,666}},
+{ 803904, 2, {948,848}},
+{ 803910, 2, {1055,762}},
+{ 803928, 2, {984,817}},
+{ 803960, 2, {995,808}},
+{ 804096, 2, {1047,768}},
+{ 804105, 2, {963,835}},
+{ 804141, 2, {1027,783}},
+{ 804195, 2, {945,851}},
+{ 804204, 2, {1004,801}},
+{ 804232, 2, {962,836}},
+{ 804264, 2, {1081,744}},
+{ 804272, 2, {1169,688}},
+{ 804287, 2, {2057,391}},
+{ 804288, 2, {944,852}},
+{ 804384, 2, {912,882}},
+{ 804408, 2, {968,831}},
+{ 804420, 2, {981,820}},
+{ 804440, 2, {910,884}},
+{ 804450, 2, {930,865}},
+{ 804492, 2, {1053,764}},
+{ 804528, 2, {906,888}},
+{ 804540, 2, {1012,795}},
+{ 804573, 2, {903,891}},
+{ 804576, 2, {928,867}},
+{ 804615, 2, {1185,679}},
+{ 804636, 2, {927,868}},
+{ 804650, 2, {950,847}},
+{ 804750, 2, {925,870}},
+{ 804752, 2, {949,848}},
+{ 804756, 2, {1011,796}},
+{ 804780, 2, {1020,789}},
+{ 804804, 2, {924,871}},
+{ 804810, 2, {965,834}},
+{ 804840, 2, {1059,760}},
+{ 804852, 2, {948,849}},
+{ 804864, 2, {1024,786}},
+{ 804895, 2, {1015,793}},
+{ 804924, 2, {1028,783}},
+{ 804960, 2, {936,860}},
+{ 805000, 2, {920,875}},
+{ 805068, 2, {963,836}},
+{ 805120, 2, {1088,740}},
+{ 805140, 2, {945,852}},
+{ 805164, 2, {916,879}},
+{ 805168, 2, {1027,784}},
+{ 805175, 2, {1075,749}},
+{ 805194, 2, {962,837}},
+{ 805200, 2, {915,880}},
+{ 805266, 2, {913,882}},
+{ 805392, 2, {952,846}},
+{ 805464, 2, {904,891}},
+{ 805475, 2, {1111,725}},
+{ 805476, 2, {903,892}},
+{ 805486, 2, {902,893}},
+{ 805488, 2, {1038,776}},
+{ 805500, 2, {900,895}},
+{ 805504, 2, {899,896}},
+{ 805545, 2, {1053,765}},
+{ 805560, 2, {959,840}},
+{ 805562, 2, {986,817}},
+{ 805596, 2, {1077,748}},
+{ 805600, 2, {950,848}},
+{ 805650, 2, {1025,786}},
+{ 805675, 2, {925,871}},
+{ 805707, 2, {1029,783}},
+{ 805749, 2, {1037,777}},
+{ 805752, 2, {1083,744}},
+{ 805800, 2, {948,850}},
+{ 805860, 2, {990,814}},
+{ 805872, 2, {978,824}},
+{ 805896, 2, {936,861}},
+{ 805908, 2, {956,843}},
+{ 805950, 2, {995,810}},
+{ 806000, 2, {1000,806}},
+{ 806050, 2, {1175,686}},
+{ 806112, 2, {933,864}},
+{ 806113, 2, {1463,551}},
+{ 806124, 2, {1023,788}},
+{ 806130, 2, {954,845}},
+{ 806176, 2, {944,854}},
+{ 806200, 2, {1112,725}},
+{ 806211, 2, {1337,603}},
+{ 806250, 2, {1075,750}},
+{ 806265, 2, {943,855}},
+{ 806274, 2, {1106,729}},
+{ 806316, 2, {993,812}},
+{ 806344, 2, {952,847}},
+{ 806352, 2, {942,856}},
+{ 806355, 2, {905,891}},
+{ 806379, 2, {903,893}},
+{ 806400, 2, {900,896}},
+{ 806403, 2, {899,897}},
+{ 806432, 2, {928,869}},
+{ 806448, 2, {951,848}},
+{ 806465, 2, {1333,605}},
+{ 806496, 2, {992,813}},
+{ 806600, 2, {925,872}},
+{ 806610, 2, {966,835}},
+{ 806650, 2, {949,850}},
+{ 806652, 2, {924,873}},
+{ 806680, 2, {938,860}},
+{ 806715, 2, {985,819}},
+{ 806725, 2, {1403,575}},
+{ 806736, 2, {1029,784}},
+{ 806760, 2, {972,830}},
+{ 806796, 2, {921,876}},
+{ 806806, 2, {1001,806}},
+{ 806820, 2, {1020,791}},
+{ 806868, 2, {964,837}},
+{ 806895, 2, {1161,695}},
+{ 806949, 2, {1089,741}},
+{ 806960, 2, {917,880}},
+{ 806985, 2, {1135,711}},
+{ 807000, 2, {1000,807}},
+{ 807015, 2, {1005,803}},
+{ 807024, 2, {989,816}},
+{ 807030, 2, {915,882}},
+{ 807040, 2, {970,832}},
+{ 807044, 2, {1036,779}},
+{ 807070, 2, {1210,667}},
+{ 807075, 2, {1055,765}},
+{ 807120, 2, {912,885}},
+{ 807192, 2, {909,888}},
+{ 807196, 2, {988,817}},
+{ 807296, 2, {901,896}},
+{ 807300, 2, {900,897}},
+{ 807312, 2, {968,834}},
+{ 807360, 2, {928,870}},
+{ 807408, 2, {1008,801}},
+{ 807415, 2, {1003,805}},
+{ 807488, 2, {992,814}},
+{ 807495, 2, {1313,615}},
+{ 807525, 2, {925,873}},
+{ 807534, 2, {986,819}},
+{ 807540, 2, {939,860}},
+{ 807576, 2, {924,874}},
+{ 807590, 2, {973,830}},
+{ 807615, 2, {1179,685}},
+{ 807625, 2, {923,875}},
+{ 807648, 2, {1074,752}},
+{ 807651, 2, {1053,767}},
+{ 807675, 2, {979,825}},
+{ 807705, 2, {965,837}},
+{ 807708, 2, {957,844}},
+{ 807720, 2, {1016,795}},
+{ 807732, 2, {972,831}},
+{ 807755, 2, {1105,731}},
+{ 807816, 2, {1041,776}},
+{ 807840, 2, {918,880}},
+{ 807891, 2, {1241,651}},
+{ 807930, 2, {955,846}},
+{ 807936, 2, {1024,789}},
+{ 807984, 2, {1086,744}},
+{ 808005, 2, {913,885}},
+{ 808010, 2, {970,833}},
+{ 808020, 2, {1005,804}},
+{ 808038, 2, {954,847}},
+{ 808044, 2, {932,867}},
+{ 808056, 2, {1032,783}},
+{ 808080, 2, {910,888}},
+{ 808101, 2, {909,889}},
+{ 808110, 2, {1095,738}},
+{ 808128, 2, {976,828}},
+{ 808170, 2, {930,869}},
+{ 808176, 2, {904,894}},
+{ 808192, 2, {902,896}},
+{ 808197, 2, {901,897}},
+{ 808248, 2, {952,849}},
+{ 808280, 2, {968,835}},
+{ 808284, 2, {1047,772}},
+{ 808288, 2, {928,871}},
+{ 808325, 2, {1043,775}},
+{ 808335, 2, {1035,781}},
+{ 808344, 2, {927,872}},
+{ 808418, 2, {1003,806}},
+{ 808480, 2, {992,815}},
+{ 808500, 2, {924,875}},
+{ 808588, 2, {1012,799}},
+{ 808605, 2, {1057,765}},
+{ 808654, 2, {979,826}},
+{ 808680, 2, {920,879}},
+{ 808704, 2, {936,864}},
+{ 808780, 2, {1060,763}},
+{ 808794, 2, {917,882}},
+{ 808800, 2, {1011,800}},
+{ 808808, 2, {1001,808}},
+{ 808830, 2, {946,855}},
+{ 808848, 2, {984,822}},
+{ 808860, 2, {915,884}},
+{ 808864, 2, {1099,736}},
+{ 808920, 2, {945,856}},
+{ 808960, 2, {1024,790}},
+{ 808990, 2, {910,889}},
+{ 808992, 2, {954,848}},
+{ 809028, 2, {908,891}},
+{ 809039, 2, {931,869}},
+{ 809070, 2, {905,894}},
+{ 809076, 2, {1059,764}},
+{ 809080, 2, {904,895}},
+{ 809088, 2, {903,896}},
+{ 809100, 2, {900,899}},
+{ 809172, 2, {988,819}},
+{ 809217, 2, {1107,731}},
+{ 809226, 2, {1098,737}},
+{ 809280, 2, {960,843}},
+{ 809340, 2, {940,861}},
+{ 809360, 2, {1072,755}},
+{ 809368, 2, {1043,776}},
+{ 809400, 2, {950,852}},
+{ 809480, 2, {980,826}},
+{ 809490, 2, {1115,726}},
+{ 809532, 2, {1017,796}},
+{ 809536, 2, {973,832}},
+{ 809575, 2, {1175,689}},
+{ 809613, 2, {1267,639}},
+{ 809616, 2, {1002,808}},
+{ 809627, 2, {1271,637}},
+{ 809640, 2, {936,865}},
+{ 809670, 2, {985,822}},
+{ 809748, 2, {996,813}},
+{ 809840, 2, {955,848}},
+{ 809844, 2, {933,868}},
+{ 809904, 2, {1077,752}},
+{ 809952, 2, {944,858}},
+{ 809970, 2, {931,870}},
+{ 810030, 2, {930,871}},
+{ 810080, 2, {976,830}},
+{ 810084, 2, {969,836}},
+{ 810117, 2, {1169,693}},
+{ 810144, 2, {928,873}},
+{ 810152, 2, {952,851}},
+{ 810186, 2, {1014,799}},
+{ 810216, 2, {968,837}},
+{ 810228, 2, {1004,807}},
+{ 810252, 2, {951,852}},
+{ 810288, 2, {993,816}},
+{ 810300, 2, {925,876}},
+{ 810336, 2, {1101,736}},
+{ 810390, 2, {1135,714}},
+{ 810432, 2, {938,864}},
+{ 810446, 2, {949,854}},
+{ 810464, 2, {992,817}},
+{ 810480, 2, {921,880}},
+{ 810495, 2, {1085,747}},
+{ 810540, 2, {948,855}},
+{ 810560, 2, {1088,745}},
+{ 810600, 2, {965,840}},
+{ 810612, 2, {979,828}},
+{ 810635, 2, {1007,805}},
+{ 810656, 2, {1034,784}},
+{ 810660, 2, {916,885}},
+{ 810700, 2, {1100,737}},
+{ 810744, 2, {913,888}},
+{ 810750, 2, {1081,750}},
+{ 810768, 2, {912,889}},
+{ 810775, 2, {1025,791}},
+{ 810810, 2, {910,891}},
+{ 810828, 2, {909,892}},
+{ 810852, 2, {1029,788}},
+{ 810870, 2, {906,895}},
+{ 810880, 2, {905,896}},
+{ 810888, 2, {904,897}},
+{ 810900, 2, {901,900}},
+{ 810901, 2, {931,871}},
+{ 810960, 2, {930,872}},
+{ 810985, 2, {1015,799}},
+{ 811008, 2, {1024,792}},
+{ 811056, 2, {976,831}},
+{ 811092, 2, {1028,789}},
+{ 811125, 2, {927,875}},
+{ 811152, 2, {1032,786}},
+{ 811188, 2, {999,812}},
+{ 811200, 2, {960,845}},
+{ 811239, 2, {1023,793}},
+{ 811250, 2, {1250,649}},
+{ 811251, 2, {1141,711}},
+{ 811296, 2, {939,864}},
+{ 811300, 2, {950,854}},
+{ 811305, 2, {1089,745}},
+{ 811314, 2, {959,846}},
+{ 811325, 2, {1411,575}},
+{ 811377, 2, {1113,729}},
+{ 811395, 2, {949,855}},
+{ 811408, 2, {1079,752}},
+{ 811410, 2, {1110,731}},
+{ 811440, 2, {920,882}},
+{ 811536, 2, {957,848}},
+{ 811538, 2, {1183,686}},
+{ 811545, 2, {917,885}},
+{ 811620, 2, {972,835}},
+{ 811640, 2, {985,824}},
+{ 811642, 2, {1007,806}},
+{ 811644, 2, {956,849}},
+{ 811680, 2, {912,890}},
+{ 811776, 2, {906,896}},
+{ 811800, 2, {902,900}},
+{ 811832, 2, {931,872}},
+{ 811920, 2, {995,816}},
+{ 811971, 2, {1037,783}},
+{ 811980, 2, {1041,780}},
+{ 812000, 2, {928,875}},
+{ 812040, 2, {1005,808}},
+{ 812045, 2, {961,845}},
+{ 812052, 2, {927,876}},
+{ 812160, 2, {940,864}},
+{ 812175, 2, {975,833}},
+{ 812196, 2, {924,879}},
+{ 812200, 2, {1048,775}},
+{ 812240, 2, {923,880}},
+{ 812268, 2, {981,828}},
+{ 812383, 2, {1859,437}},
+{ 812392, 2, {1141,712}},
+{ 812406, 2, {966,841}},
+{ 812430, 2, {918,885}},
+{ 812448, 2, {936,868}},
+{ 812472, 2, {1047,776}},
+{ 812475, 2, {1035,785}},
+{ 812490, 2, {1022,795}},
+{ 812520, 2, {915,888}},
+{ 812544, 2, {1058,768}},
+{ 812592, 2, {912,891}},
+{ 812595, 2, {1065,763}},
+{ 812630, 2, {910,893}},
+{ 812652, 2, {964,843}},
+{ 812668, 2, {1156,703}},
+{ 812700, 2, {903,900}},
+{ 812702, 2, {902,901}},
+{ 812725, 2, {1121,725}},
+{ 812736, 2, {996,816}},
+{ 812763, 2, {931,873}},
+{ 812772, 2, {963,844}},
+{ 812784, 2, {944,861}},
+{ 812825, 2, {1025,793}},
+{ 812835, 2, {1115,729}},
+{ 812844, 2, {1011,804}},
+{ 812889, 2, {1071,759}},
+{ 812916, 2, {1053,772}},
+{ 812928, 2, {928,876}},
+{ 813000, 2, {1000,813}},
+{ 813015, 2, {1015,801}},
+{ 813020, 2, {1060,767}},
+{ 813120, 2, {924,880}},
+{ 813232, 2, {959,848}},
+{ 813241, 2, {1331,611}},
+{ 813252, 2, {1111,732}},
+{ 813276, 2, {1044,779}},
+{ 813288, 2, {987,824}},
+{ 813312, 2, {1059,768}},
+{ 813345, 2, {1261,645}},
+{ 813384, 2, {936,869}},
+{ 813435, 2, {915,889}},
+{ 813440, 2, {992,820}},
+{ 813450, 2, {935,870}},
+{ 813456, 2, {1008,807}},
+{ 813483, 2, {913,891}},
+{ 813555, 2, {909,895}},
+{ 813564, 2, {972,837}},
+{ 813576, 2, {933,872}},
+{ 813603, 2, {903,901}},
+{ 813618, 2, {1026,793}},
+{ 813636, 2, {932,873}},
+{ 813645, 2, {945,861}},
+{ 813660, 2, {955,852}},
+{ 813694, 2, {931,874}},
+{ 813696, 2, {978,832}},
+{ 813735, 2, {963,845}},
+{ 813750, 2, {930,875}},
+{ 813792, 2, {1038,784}},
+{ 813816, 2, {1016,801}},
+{ 813846, 2, {1121,726}},
+{ 813888, 2, {942,864}},
+{ 813890, 2, {1057,770}},
+{ 813904, 2, {1118,728}},
+{ 813960, 2, {952,855}},
+{ 813967, 2, {961,847}},
+{ 813984, 2, {976,834}},
+{ 814000, 2, {925,880}},
+{ 814016, 2, {1106,736}},
+{ 814050, 2, {1005,810}},
+{ 814055, 2, {1045,779}},
+{ 814056, 2, {951,856}},
+{ 814086, 2, {923,882}},
+{ 814088, 2, {968,841}},
+{ 814095, 2, {1145,711}},
+{ 814164, 2, {921,884}},
+{ 814185, 2, {999,815}},
+{ 814200, 2, {920,885}},
+{ 814212, 2, {1077,756}},
+{ 814242, 2, {949,858}},
+{ 814248, 2, {1032,789}},
+{ 814260, 2, {993,820}},
+{ 814275, 2, {987,825}},
+{ 814296, 2, {917,888}},
+{ 814308, 2, {1023,796}},
+{ 814320, 2, {936,870}},
+{ 814380, 2, {980,831}},
+{ 814385, 2, {935,871}},
+{ 814401, 2, {973,837}},
+{ 814407, 2, {957,851}},
+{ 814416, 2, {912,893}},
+{ 814464, 2, {909,896}},
+{ 814476, 2, {908,897}},
+{ 814500, 2, {905,900}},
+{ 814528, 2, {979,832}},
+{ 814572, 2, {1089,748}},
+{ 814625, 2, {931,875}},
+{ 814653, 2, {1351,603}},
+{ 814716, 2, {954,854}},
+{ 814730, 2, {1030,791}},
+{ 814740, 2, {1101,740}},
+{ 814752, 2, {943,864}},
+{ 814775, 2, {1417,575}},
+{ 814800, 2, {970,840}},
+{ 814814, 2, {962,847}},
+{ 814830, 2, {942,865}},
+{ 814884, 2, {1068,763}},
+{ 814905, 2, {995,819}},
+{ 814929, 2, {969,841}},
+{ 814960, 2, {976,835}},
+{ 814980, 2, {940,867}},
+{ 815000, 2, {1000,815}},
+{ 815040, 2, {960,849}},
+{ 815045, 2, {1015,803}},
+{ 815052, 2, {939,868}},
+{ 815074, 2, {1081,754}},
+{ 815080, 2, {994,820}},
+{ 815122, 2, {938,869}},
+{ 815150, 2, {959,850}},
+{ 815184, 2, {918,888}},
+{ 815256, 2, {936,871}},
+{ 815265, 2, {915,891}},
+{ 815269, 2, {1547,527}},
+{ 815320, 2, {935,872}},
+{ 815328, 2, {912,894}},
+{ 815360, 2, {910,896}},
+{ 815364, 2, {957,852}},
+{ 815424, 2, {992,822}},
+{ 815480, 2, {1073,760}},
+{ 815490, 2, {1066,765}},
+{ 815507, 2, {979,833}},
+{ 815556, 2, {931,876}},
+{ 815580, 2, {985,828}},
+{ 815625, 2, {1125,725}},
+{ 815654, 2, {1189,686}},
+{ 815661, 2, {963,847}},
+{ 815672, 2, {1012,806}},
+{ 815675, 2, {1475,553}},
+{ 815685, 2, {1157,705}},
+{ 815712, 2, {928,879}},
+{ 815724, 2, {996,819}},
+{ 815760, 2, {927,880}},
+{ 815850, 2, {925,882}},
+{ 815859, 2, {1107,737}},
+{ 815925, 2, {989,825}},
+{ 815997, 2, {1029,793}},
+{ 816000, 2, {960,850}},
+{ 816024, 2, {968,843}},
+{ 816060, 2, {938,870}},
+{ 816075, 2, {975,837}},
+{ 816102, 2, {918,889}},
+{ 816130, 2, {917,890}},
+{ 816140, 2, {949,860}},
+{ 816144, 2, {1041,784}},
+{ 816156, 2, {916,891}},
+{ 816180, 2, {915,892}},
+{ 816183, 2, {999,817}},
+{ 816228, 2, {948,861}},
+{ 816240, 2, {912,895}},
+{ 816252, 2, {1004,813}},
+{ 816255, 2, {935,873}},
+{ 816270, 2, {910,897}},
+{ 816312, 2, {904,903}},
+{ 816340, 2, {980,833}},
+{ 816354, 2, {1023,798}},
+{ 816390, 2, {965,846}},
+{ 816400, 2, {1040,785}},
+{ 816408, 2, {986,828}},
+{ 816410, 2, {1070,763}},
+{ 816442, 2, {1003,814}},
+{ 816465, 2, {1027,795}},
+{ 816480, 2, {945,864}},
+{ 816520, 2, {1096,745}},
+{ 816525, 2, {955,855}},
+{ 816560, 2, {944,865}},
+{ 816570, 2, {1055,774}},
+{ 816585, 2, {1111,735}},
+{ 816624, 2, {954,856}},
+{ 816630, 2, {978,835}},
+{ 816660, 2, {1047,780}},
+{ 816669, 2, {1043,783}},
+{ 816672, 2, {1086,752}},
+{ 816684, 2, {1012,807}},
+{ 816720, 2, {984,830}},
+{ 816816, 2, {924,884}},
+{ 816850, 2, {961,850}},
+{ 816855, 2, {923,885}},
+{ 816860, 2, {940,869}},
+{ 816888, 2, {1011,808}},
+{ 816912, 2, {976,837}},
+{ 817020, 2, {918,890}},
+{ 817047, 2, {917,891}},
+{ 817068, 2, {959,852}},
+{ 817089, 2, {949,861}},
+{ 817128, 2, {936,873}},
+{ 817152, 2, {912,896}},
+{ 817173, 2, {981,833}},
+{ 817190, 2, {935,874}},
+{ 817209, 2, {1121,729}},
+{ 817245, 2, {1143,715}},
+{ 817260, 2, {1028,795}},
+{ 817308, 2, {933,876}},
+{ 817320, 2, {973,840}},
+{ 817344, 2, {946,864}},
+{ 817377, 2, {1023,799}},
+{ 817380, 2, {956,855}},
+{ 817404, 2, {1036,789}},
+{ 817425, 2, {945,865}},
+{ 817440, 2, {1040,786}},
+{ 817452, 2, {972,841}},
+{ 817480, 2, {955,856}},
+{ 817530, 2, {1145,714}},
+{ 817548, 2, {1059,772}},
+{ 817581, 2, {943,867}},
+{ 817600, 2, {1022,800}},
+{ 817632, 2, {1002,816}},
+{ 817663, 2, {1517,539}},
+{ 817668, 2, {1017,804}},
+{ 817684, 2, {1007,812}},
+{ 817704, 2, {984,831}},
+{ 817712, 2, {1043,784}},
+{ 817740, 2, {924,885}},
+{ 817817, 2, {1001,817}},
+{ 817830, 2, {1165,702}},
+{ 817836, 2, {969,844}},
+{ 817848, 2, {921,888}},
+{ 817860, 2, {951,860}},
+{ 817880, 2, {920,889}},
+{ 817887, 2, {1343,609}},
+{ 817890, 2, {995,822}},
+{ 817908, 2, {1092,749}},
+{ 817920, 2, {960,852}},
+{ 817950, 2, {950,861}},
+{ 817960, 2, {968,845}},
+{ 818048, 2, {913,896}},
+{ 818064, 2, {912,897}},
+{ 818090, 2, {910,899}},
+{ 818100, 2, {909,900}},
+{ 818120, 2, {905,904}},
+{ 818125, 2, {935,875}},
+{ 818176, 2, {1024,799}},
+{ 818232, 2, {993,824}},
+{ 818235, 2, {957,855}},
+{ 818244, 2, {1071,764}},
+{ 818320, 2, {965,848}},
+{ 818363, 2, {1547,529}},
+{ 818376, 2, {1032,793}},
+{ 818400, 2, {930,880}},
+{ 818436, 2, {964,849}},
+{ 818448, 2, {944,867}},
+{ 818496, 2, {928,882}},
+{ 818505, 2, {1161,705}},
+{ 818520, 2, {1077,760}},
+{ 818524, 2, {943,868}},
+{ 818565, 2, {1331,615}},
+{ 818685, 2, {1017,805}},
+{ 818688, 2, {984,832}},
+{ 818740, 2, {940,871}},
+{ 818805, 2, {969,845}},
+{ 818808, 2, {939,872}},
+{ 818892, 2, {989,828}},
+{ 818928, 2, {968,846}},
+{ 818975, 2, {1025,799}},
+{ 819000, 2, {910,900}},
+{ 819024, 2, {906,904}},
+{ 819060, 2, {935,876}},
+{ 819072, 2, {948,864}},
+{ 819084, 2, {1029,796}},
+{ 819135, 2, {981,835}},
+{ 819144, 2, {1101,744}},
+{ 819150, 2, {1075,762}},
+{ 819168, 2, {966,848}},
+{ 819175, 2, {1057,775}},
+{ 819180, 2, {999,820}},
+{ 819192, 2, {957,856}},
+{ 819200, 2, {1024,800}},
+{ 819228, 2, {932,879}},
+{ 819280, 2, {931,880}},
+{ 819312, 2, {1014,808}},
+{ 819315, 2, {945,867}},
+{ 819375, 2, {1311,625}},
+{ 819390, 2, {955,858}},
+{ 819396, 2, {972,843}},
+{ 819405, 2, {1179,695}},
+{ 819423, 2, {979,837}},
+{ 819468, 2, {927,884}},
+{ 819504, 2, {1008,813}},
+{ 819520, 2, {985,832}},
+{ 819546, 2, {1027,798}},
+{ 819624, 2, {923,888}},
+{ 819672, 2, {952,861}},
+{ 819698, 2, {1007,814}},
+{ 819720, 2, {920,891}},
+{ 819774, 2, {918,893}},
+{ 819819, 2, {1001,819}},
+{ 819840, 2, {915,896}},
+{ 819880, 2, {995,824}},
+{ 819888, 2, {912,899}},
+{ 819910, 2, {910,901}},
+{ 819912, 2, {1016,807}},
+{ 819924, 2, {908,903}},
+{ 819930, 2, {906,905}},
+{ 819945, 2, {959,855}},
+{ 819962, 2, {1034,793}},
+{ 819975, 2, {975,841}},
+{ 820020, 2, {948,865}},
+{ 820050, 2, {994,825}},
+{ 820080, 2, {1005,816}},
+{ 820105, 2, {1147,715}},
+{ 820116, 2, {981,836}},
+{ 820125, 2, {1125,729}},
+{ 820155, 2, {1095,749}},
+{ 820224, 2, {1024,801}},
+{ 820225, 2, {1075,763}},
+{ 820232, 2, {1057,776}},
+{ 820281, 2, {1113,737}},
+{ 820287, 2, {1053,779}},
+{ 820308, 2, {1041,788}},
+{ 820336, 2, {944,869}},
+{ 820410, 2, {943,870}},
+{ 820456, 2, {1127,728}},
+{ 820476, 2, {963,852}},
+{ 820479, 2, {1081,759}},
+{ 820560, 2, {1040,789}},
+{ 820620, 2, {940,873}},
+{ 820625, 2, {1313,625}},
+{ 820656, 2, {984,834}},
+{ 820743, 2, {969,847}},
+{ 820750, 2, {938,875}},
+{ 820800, 2, {912,900}},
+{ 820820, 2, {910,902}},
+{ 820845, 2, {1073,765}},
+{ 820848, 2, {1047,784}},
+{ 820904, 2, {959,856}},
+{ 820932, 2, {1011,812}},
+{ 820953, 2, {1099,747}},
+{ 821025, 2, {1025,801}},
+{ 821028, 2, {988,831}},
+{ 821040, 2, {933,880}},
+{ 821066, 2, {1054,779}},
+{ 821100, 2, {966,850}},
+{ 821128, 2, {946,868}},
+{ 821142, 2, {931,882}},
+{ 821184, 2, {987,832}},
+{ 821205, 2, {945,869}},
+{ 821280, 2, {928,885}},
+{ 821304, 2, {1037,792}},
+{ 821338, 2, {986,833}},
+{ 821340, 2, {972,845}},
+{ 821370, 2, {1045,786}},
+{ 821376, 2, {992,828}},
+{ 821400, 2, {925,888}},
+{ 821424, 2, {942,872}},
+{ 821425, 2, {1133,725}},
+{ 821436, 2, {924,889}},
+{ 821440, 2, {1088,755}},
+{ 821457, 2, {1003,819}},
+{ 821490, 2, {985,834}},
+{ 821520, 2, {978,840}},
+{ 821532, 2, {921,892}},
+{ 821541, 2, {1349,609}},
+{ 821560, 2, {920,893}},
+{ 821583, 2, {1127,729}},
+{ 821590, 2, {970,847}},
+{ 821600, 2, {1027,800}},
+{ 821610, 2, {918,895}},
+{ 821632, 2, {917,896}},
+{ 821640, 2, {984,835}},
+{ 821652, 2, {916,897}},
+{ 821655, 2, {961,855}},
+{ 821664, 2, {951,864}},
+{ 821700, 2, {913,900}},
+{ 821712, 2, {912,901}},
+{ 821736, 2, {909,904}},
+{ 821784, 2, {1059,776}},
+{ 821832, 2, {968,849}},
+{ 821916, 2, {948,867}},
+{ 821975, 2, {1225,671}},
+{ 822000, 2, {1000,822}},
+{ 822016, 2, {988,832}},
+{ 822066, 2, {966,851}},
+{ 822096, 2, {1038,792}},
+{ 822180, 2, {965,852}},
+{ 822195, 2, {1089,755}},
+{ 822204, 2, {993,828}},
+{ 822224, 2, {944,871}},
+{ 822272, 2, {1024,803}},
+{ 822276, 2, {1004,819}},
+{ 822325, 2, {925,889}},
+{ 822360, 2, {924,890}},
+{ 822375, 2, {1075,765}},
+{ 822393, 2, {923,891}},
+{ 822460, 2, {1003,820}},
+{ 822480, 2, {920,894}},
+{ 822492, 2, {1023,804}},
+{ 822510, 2, {962,855}},
+{ 822528, 2, {918,896}},
+{ 822560, 2, {970,848}},
+{ 822564, 2, {939,876}},
+{ 822624, 2, {912,902}},
+{ 822645, 2, {909,905}},
+{ 822680, 2, {1048,785}},
+{ 822744, 2, {936,879}},
+{ 822756, 2, {1012,813}},
+{ 822768, 2, {976,843}},
+{ 822800, 2, {935,880}},
+{ 822828, 2, {1077,764}},
+{ 822848, 2, {989,832}},
+{ 822870, 2, {1115,738}},
+{ 822900, 2, {975,844}},
+{ 822948, 2, {1164,707}},
+{ 822960, 2, {1016,810}},
+{ 822976, 2, {1169,704}},
+{ 823020, 2, {946,870}},
+{ 823075, 2, {1025,803}},
+{ 823080, 2, {1083,760}},
+{ 823095, 2, {945,871}},
+{ 823116, 2, {956,861}},
+{ 823140, 2, {1020,807}},
+{ 823158, 2, {973,846}},
+{ 823176, 2, {927,888}},
+{ 823200, 2, {980,840}},
+{ 823221, 2, {1253,657}},
+{ 823284, 2, {924,891}},
+{ 823296, 2, {1024,804}},
+{ 823360, 2, {992,830}},
+{ 823361, 2, {1309,629}},
+{ 823400, 2, {920,895}},
+{ 823428, 2, {1028,801}},
+{ 823446, 2, {918,897}},
+{ 823480, 2, {952,865}},
+{ 823485, 2, {1339,615}},
+{ 823500, 2, {915,900}},
+{ 823515, 2, {1023,805}},
+{ 823536, 2, {912,903}},
+{ 823548, 2, {1101,748}},
+{ 823581, 2, {1269,649}},
+{ 823600, 2, {1136,725}},
+{ 823608, 2, {984,837}},
+{ 823620, 2, {1036,795}},
+{ 823716, 2, {1044,789}},
+{ 823732, 2, {949,868}},
+{ 823745, 2, {1235,667}},
+{ 823768, 2, {968,851}},
+{ 823837, 2, {989,833}},
+{ 823860, 2, {995,828}},
+{ 823878, 2, {1026,803}},
+{ 823935, 2, {931,885}},
+{ 823966, 2, {946,871}},
+{ 823970, 2, {1043,790}},
+{ 824010, 2, {1135,726}},
+{ 824040, 2, {945,872}},
+{ 824064, 2, {928,888}},
+{ 824100, 2, {1005,820}},
+{ 824103, 2, {927,889}},
+{ 824112, 2, {944,873}},
+{ 824160, 2, {1010,816}},
+{ 824175, 2, {925,891}},
+{ 824180, 2, {980,841}},
+{ 824182, 2, {943,874}},
+{ 824220, 2, {964,855}},
+{ 824250, 2, {942,875}},
+{ 824256, 2, {954,864}},
+{ 824296, 2, {986,836}},
+{ 824310, 2, {1065,774}},
+{ 824320, 2, {920,896}},
+{ 824328, 2, {963,856}},
+{ 824352, 2, {992,831}},
+{ 824362, 2, {1111,742}},
+{ 824439, 2, {913,903}},
+{ 824445, 2, {985,837}},
+{ 824472, 2, {1041,792}},
+{ 824525, 2, {1075,767}},
+{ 824538, 2, {961,858}},
+{ 824551, 2, {1183,697}},
+{ 824568, 2, {1032,799}},
+{ 824600, 2, {950,868}},
+{ 824615, 2, {1363,605}},
+{ 824619, 2, {969,851}},
+{ 824670, 2, {935,882}},
+{ 824715, 2, {1107,745}},
+{ 824720, 2, {976,845}},
+{ 824733, 2, {1007,819}},
+{ 824740, 2, {959,860}},
+{ 824772, 2, {933,884}},
+{ 824820, 2, {932,885}},
+{ 824824, 2, {1001,824}},
+{ 824832, 2, {1074,768}},
+{ 824850, 2, {975,846}},
+{ 824976, 2, {1011,816}},
+{ 824992, 2, {928,889}},
+{ 825000, 2, {1000,825}},
+{ 825036, 2, {1047,788}},
+{ 825075, 2, {965,855}},
+{ 825104, 2, {973,848}},
+{ 825120, 2, {955,864}},
+{ 825125, 2, {943,875}},
+{ 825132, 2, {924,893}},
+{ 825174, 2, {999,826}},
+{ 825210, 2, {954,865}},
+{ 825216, 2, {921,896}},
+{ 825228, 2, {972,849}},
+{ 825240, 2, {920,897}},
+{ 825248, 2, {1184,697}},
+{ 825265, 2, {1241,665}},
+{ 825282, 2, {918,899}},
+{ 825300, 2, {917,900}},
+{ 825360, 2, {912,905}},
+{ 825372, 2, {909,908}},
+{ 825384, 2, {952,867}},
+{ 825396, 2, {962,858}},
+{ 825435, 2, {1079,765}},
+{ 825440, 2, {938,880}},
+{ 825468, 2, {951,868}},
+{ 825475, 2, {1325,623}},
+{ 825550, 2, {950,869}},
+{ 825552, 2, {936,882}},
+{ 825588, 2, {969,852}},
+{ 825600, 2, {960,860}},
+{ 825630, 2, {949,870}},
+{ 825648, 2, {1002,824}},
+{ 825696, 2, {976,846}},
+{ 825740, 2, {1007,820}},
+{ 825775, 2, {1139,725}},
+{ 825792, 2, {1012,816}},
+{ 825804, 2, {1017,812}},
+{ 825825, 2, {975,847}},
+{ 825840, 2, {930,888}},
+{ 825920, 2, {928,890}},
+{ 825930, 2, {945,874}},
+{ 826000, 2, {944,875}},
+{ 826008, 2, {1016,813}},
+{ 826020, 2, {1059,780}},
+{ 826025, 2, {925,893}},
+{ 826040, 2, {965,856}},
+{ 826065, 2, {1055,783}},
+{ 826098, 2, {1157,714}},
+{ 826119, 2, {987,837}},
+{ 826140, 2, {980,843}},
+{ 826176, 2, {993,832}},
+{ 826210, 2, {1015,814}},
+{ 826260, 2, {940,879}},
+{ 826272, 2, {912,906}},
+{ 826287, 2, {1029,803}},
+{ 826320, 2, {939,880}},
+{ 826368, 2, {1024,807}},
+{ 826410, 2, {978,845}},
+{ 826440, 2, {970,852}},
+{ 826448, 2, {1099,752}},
+{ 826506, 2, {1241,666}},
+{ 826560, 2, {960,861}},
+{ 826584, 2, {1023,808}},
+{ 826605, 2, {1053,785}},
+{ 826632, 2, {1032,801}},
+{ 826650, 2, {990,835}},
+{ 826683, 2, {1353,611}},
+{ 826728, 2, {931,888}},
+{ 826735, 2, {1027,805}},
+{ 826761, 2, {1131,731}},
+{ 826770, 2, {930,889}},
+{ 826800, 2, {975,848}},
+{ 826812, 2, {1071,772}},
+{ 826848, 2, {928,891}},
+{ 826872, 2, {1048,789}},
+{ 826875, 2, {945,875}},
+{ 826880, 2, {1088,760}},
+{ 826884, 2, {927,892}},
+{ 826896, 2, {966,856}},
+{ 826925, 2, {1067,775}},
+{ 826944, 2, {944,876}},
+{ 826950, 2, {925,894}},
+{ 826956, 2, {988,837}},
+{ 826965, 2, {1035,799}},
+{ 826980, 2, {924,895}},
+{ 827008, 2, {923,896}},
+{ 827050, 2, {973,850}},
+{ 827080, 2, {920,899}},
+{ 827118, 2, {918,901}},
+{ 827136, 2, {1077,768}},
+{ 827148, 2, {916,903}},
+{ 827160, 2, {915,904}},
+{ 827172, 2, {972,851}},
+{ 827288, 2, {952,869}},
+{ 827316, 2, {938,882}},
+{ 827328, 2, {992,834}},
+{ 827400, 2, {985,840}},
+{ 827412, 2, {1083,764}},
+{ 827415, 2, {1135,729}},
+{ 827424, 2, {936,884}},
+{ 827450, 2, {950,871}},
+{ 827480, 2, {1096,755}},
+{ 827604, 2, {948,873}},
+{ 827631, 2, {1057,783}},
+{ 827640, 2, {968,855}},
+{ 827676, 2, {996,831}},
+{ 827750, 2, {946,875}},
+{ 827764, 2, {1036,799}},
+{ 827793, 2, {989,837}},
+{ 827820, 2, {945,876}},
+{ 827840, 2, {995,832}},
+{ 827860, 2, {1060,781}},
+{ 827892, 2, {1044,793}},
+{ 827904, 2, {924,896}},
+{ 827952, 2, {1101,752}},
+{ 827964, 2, {981,844}},
+{ 827970, 2, {965,858}},
+{ 828036, 2, {918,902}},
+{ 828040, 2, {1016,815}},
+{ 828120, 2, {1005,824}},
+{ 828134, 2, {1147,722}},
+{ 828180, 2, {963,860}},
+{ 828234, 2, {979,846}},
+{ 828240, 2, {952,870}},
+{ 828245, 2, {1369,605}},
+{ 828300, 2, {1004,825}},
+{ 828315, 2, {1165,711}},
+{ 828320, 2, {992,835}},
+{ 828360, 2, {936,885}},
+{ 828438, 2, {1014,817}},
+{ 828440, 2, {1112,745}},
+{ 828443, 2, {1421,583}},
+{ 828504, 2, {933,888}},
+{ 828576, 2, {959,864}},
+{ 828590, 2, {931,890}},
+{ 828624, 2, {976,849}},
+{ 828630, 2, {930,891}},
+{ 828636, 2, {1041,796}},
+{ 828672, 2, {996,832}},
+{ 828675, 2, {1143,725}},
+{ 828685, 2, {1045,793}},
+{ 828688, 2, {1057,784}},
+{ 828704, 2, {928,893}},
+{ 828723, 2, {1273,651}},
+{ 828800, 2, {925,896}},
+{ 828828, 2, {924,897}},
+{ 828852, 2, {956,867}},
+{ 828855, 2, {1017,815}},
+{ 828856, 2, {1064,779}},
+{ 828900, 2, {921,900}},
+{ 828920, 2, {920,901}},
+{ 828945, 2, {981,845}},
+{ 828954, 2, {918,903}},
+{ 828960, 2, {942,880}},
+{ 828968, 2, {917,904}},
+{ 828971, 2, {1573,527}},
+{ 828996, 2, {973,852}},
+{ 829008, 2, {912,909}},
+{ 829020, 2, {1011,820}},
+{ 829026, 2, {954,869}},
+{ 829059, 2, {1067,777}},
+{ 829170, 2, {999,830}},
+{ 829185, 2, {1043,795}},
+{ 829224, 2, {1047,792}},
+{ 829230, 2, {1055,786}},
+{ 829255, 2, {1015,817}},
+{ 829260, 2, {1020,813}},
+{ 829272, 2, {951,872}},
+{ 829280, 2, {1136,730}},
+{ 829344, 2, {978,848}},
+{ 829356, 2, {1133,732}},
+{ 829374, 2, {1029,806}},
+{ 829400, 2, {1100,754}},
+{ 829422, 2, {1062,781}},
+{ 829430, 2, {1190,697}},
+{ 829464, 2, {969,856}},
+{ 829472, 2, {1058,784}},
+{ 829500, 2, {948,875}},
+{ 829512, 2, {984,843}},
+{ 829521, 2, {931,891}},
+{ 829540, 2, {1121,740}},
+{ 829596, 2, {1028,807}},
+{ 829600, 2, {976,850}},
+{ 829632, 2, {928,894}},
+{ 829665, 2, {927,895}},
+{ 829668, 2, {996,833}},
+{ 829764, 2, {1053,788}},
+{ 829776, 2, {944,879}},
+{ 829785, 2, {1177,705}},
+{ 829830, 2, {995,834}},
+{ 829836, 2, {1036,801}},
+{ 829840, 2, {920,902}},
+{ 829872, 2, {918,904}},
+{ 829920, 2, {912,910}},
+{ 830004, 2, {964,861}},
+{ 830025, 2, {1071,775}},
+{ 830060, 2, {980,847}},
+{ 830076, 2, {939,884}},
+{ 830088, 2, {972,854}},
+{ 830115, 2, {1161,715}},
+{ 830130, 2, {938,885}},
+{ 830148, 2, {993,836}},
+{ 830192, 2, {979,848}},
+{ 830208, 2, {1081,768}},
+{ 830250, 2, {1025,810}},
+{ 830256, 2, {1059,784}},
+{ 830277, 2, {1337,621}},
+{ 830280, 2, {935,888}},
+{ 830300, 2, {950,874}},
+{ 830304, 2, {961,864}},
+{ 830331, 2, {1139,729}},
+{ 830375, 2, {949,875}},
+{ 830400, 2, {960,865}},
+{ 830412, 2, {932,891}},
+{ 830484, 2, {1003,828}},
+{ 830490, 2, {930,893}},
+{ 830544, 2, {968,858}},
+{ 830550, 2, {1050,791}},
+{ 830560, 2, {928,895}},
+{ 830592, 2, {927,896}},
+{ 830599, 2, {1127,737}},
+{ 830648, 2, {1141,728}},
+{ 830676, 2, {924,899}},
+{ 830700, 2, {923,900}},
+{ 830725, 2, {1175,707}},
+{ 830760, 2, {920,903}},
+{ 830775, 2, {1007,825}},
+{ 830790, 2, {918,905}},
+{ 830800, 2, {1072,775}},
+{ 830820, 2, {915,908}},
+{ 830830, 2, {913,910}},
+{ 830850, 2, {955,870}},
+{ 830907, 2, {981,847}},
+{ 830908, 2, {988,841}},
+{ 830934, 2, {954,871}},
+{ 831000, 2, {1000,831}},
+{ 831060, 2, {972,855}},
+{ 831096, 2, {952,873}},
+{ 831105, 2, {1035,803}},
+{ 831159, 2, {1169,711}},
+{ 831270, 2, {1145,726}},
+{ 831285, 2, {1015,819}},
+{ 831369, 2, {1239,671}},
+{ 831383, 2, {931,893}},
+{ 831402, 2, {969,858}},
+{ 831432, 2, {1029,808}},
+{ 831444, 2, {1077,772}},
+{ 831480, 2, {984,845}},
+{ 831537, 2, {1379,603}},
+{ 831552, 2, {976,852}},
+{ 831600, 2, {924,900}},
+{ 831649, 2, {1183,703}},
+{ 831660, 2, {996,835}},
+{ 831712, 2, {1106,752}},
+{ 831726, 2, {943,882}},
+{ 831775, 2, {1225,679}},
+{ 831789, 2, {1141,729}},
+{ 831810, 2, {1165,714}},
+{ 831870, 2, {1027,810}},
+{ 831875, 2, {1331,625}},
+{ 831888, 2, {954,872}},
+{ 831900, 2, {940,885}},
+{ 831915, 2, {973,855}},
+{ 831978, 2, {994,837}},
+{ 831996, 2, {1089,764}},
+{ 832000, 2, {1000,832}},
+{ 832020, 2, {980,849}},
+{ 832032, 2, {963,864}},
+{ 832048, 2, {952,874}},
+{ 832050, 2, {1075,774}},
+{ 832104, 2, {936,889}},
+{ 832117, 2, {1573,529}},
+{ 832140, 2, {1005,828}},
+{ 832167, 2, {999,833}},
+{ 832195, 2, {1085,767}},
+{ 832200, 2, {950,876}},
+{ 832236, 2, {933,892}},
+{ 832275, 2, {1215,685}},
+{ 832320, 2, {960,867}},
+{ 832328, 2, {1169,712}},
+{ 832350, 2, {930,895}},
+{ 832356, 2, {1101,756}},
+{ 832370, 2, {1034,805}},
+{ 832416, 2, {928,897}},
+{ 832419, 2, {1267,657}},
+{ 832464, 2, {984,846}},
+{ 832475, 2, {1675,497}},
+{ 832480, 2, {946,880}},
+{ 832500, 2, {925,900}},
+{ 832512, 2, {1024,813}},
+{ 832524, 2, {924,901}},
+{ 832546, 2, {923,902}},
+{ 832584, 2, {921,904}},
+{ 832600, 2, {920,905}},
+{ 832608, 2, {944,882}},
+{ 832644, 2, {916,909}},
+{ 832656, 2, {913,912}},
+{ 832755, 2, {1133,735}},
+{ 832760, 2, {955,872}},
+{ 832800, 2, {1041,800}},
+{ 832815, 2, {995,837}},
+{ 832824, 2, {1032,807}},
+{ 832832, 2, {1001,832}},
+{ 832884, 2, {988,843}},
+{ 832888, 2, {973,856}},
+{ 832905, 2, {1115,747}},
+{ 832944, 2, {938,888}},
+{ 832995, 2, {963,865}},
+{ 833000, 2, {952,875}},
+{ 833028, 2, {987,844}},
+{ 833040, 2, {936,890}},
+{ 833064, 2, {1011,824}},
+{ 833076, 2, {951,876}},
+{ 833085, 2, {935,891}},
+{ 833112, 2, {1026,812}},
+{ 833160, 2, {1048,795}},
+{ 833170, 2, {986,845}},
+{ 833175, 2, {1035,805}},
+{ 833187, 2, {961,867}},
+{ 833196, 2, {1092,763}},
+{ 833280, 2, {930,896}},
+{ 833292, 2, {948,879}},
+{ 833310, 2, {985,846}},
+{ 833316, 2, {1177,708}},
+{ 833340, 2, {969,860}},
+{ 833412, 2, {1047,796}},
+{ 833424, 2, {1074,776}},
+{ 833425, 2, {925,901}},
+{ 833448, 2, {924,902}},
+{ 833469, 2, {923,903}},
+{ 833520, 2, {920,906}},
+{ 833536, 2, {1024,814}},
+{ 833547, 2, {957,871}},
+{ 833553, 2, {917,909}},
+{ 833612, 2, {943,884}},
+{ 833652, 2, {996,837}},
+{ 833664, 2, {1002,832}},
+{ 833715, 2, {955,873}},
+{ 833760, 2, {965,864}},
+{ 833832, 2, {939,888}},
+{ 833895, 2, {1065,783}},
+{ 833910, 2, {1045,798}},
+{ 833924, 2, {1027,812}},
+{ 833940, 2, {1017,820}},
+{ 833976, 2, {936,891}},
+{ 833980, 2, {980,851}},
+{ 834000, 2, {1000,834}},
+{ 834024, 2, {1121,744}},
+{ 834048, 2, {1086,768}},
+{ 834108, 2, {979,852}},
+{ 834120, 2, {993,840}},
+{ 834165, 2, {999,835}},
+{ 834176, 2, {931,896}},
+{ 834240, 2, {948,880}},
+{ 834272, 2, {928,899}},
+{ 834300, 2, {927,900}},
+{ 834324, 2, {1004,831}},
+{ 834330, 2, {959,870}},
+{ 834350, 2, {925,902}},
+{ 834372, 2, {924,903}},
+{ 834400, 2, {1043,800}},
+{ 834470, 2, {917,910}},
+{ 834480, 2, {915,912}},
+{ 834492, 2, {1059,788}},
+{ 834504, 2, {957,872}},
+{ 834560, 2, {1024,815}},
+{ 834588, 2, {956,873}},
+{ 834600, 2, {975,856}},
+{ 834624, 2, {966,864}},
+{ 834632, 2, {1156,722}},
+{ 834678, 2, {1066,783}},
+{ 834705, 2, {1145,729}},
+{ 834720, 2, {940,888}},
+{ 834750, 2, {954,875}},
+{ 834768, 2, {1023,816}},
+{ 834785, 2, {1037,805}},
+{ 834900, 2, {1012,825}},
+{ 834955, 2, {935,893}},
+{ 835000, 2, {1000,835}},
+{ 835016, 2, {962,868}},
+{ 835029, 2, {1053,793}},
+{ 835030, 2, {1057,790}},
+{ 835107, 2, {931,897}},
+{ 835120, 2, {949,880}},
+{ 835142, 2, {986,847}},
+{ 835146, 2, {1079,774}},
+{ 835152, 2, {1016,822}},
+{ 835164, 2, {999,836}},
+{ 835200, 2, {928,900}},
+{ 835240, 2, {1064,785}},
+{ 835263, 2, {1089,767}},
+{ 835275, 2, {925,903}},
+{ 835280, 2, {985,848}},
+{ 835380, 2, {918,910}},
+{ 835395, 2, {915,913}},
+{ 835416, 2, {984,849}},
+{ 835425, 2, {1175,711}},
+{ 835440, 2, {944,885}},
+{ 835443, 2, {1043,801}},
+{ 835450, 2, {1078,775}},
+{ 835485, 2, {1095,763}},
+{ 835499, 2, {1003,833}},
+{ 835536, 2, {1014,824}},
+{ 835548, 2, {1029,812}},
+{ 835584, 2, {1024,816}},
+{ 835590, 2, {966,865}},
+{ 835660, 2, {940,889}},
+{ 835705, 2, {989,845}},
+{ 835744, 2, {1066,784}},
+{ 835752, 2, {1077,776}},
+{ 835758, 2, {938,891}},
+{ 835764, 2, {1028,813}},
+{ 835785, 2, {1107,755}},
+{ 835788, 2, {964,867}},
+{ 835791, 2, {1023,817}},
+{ 835800, 2, {995,840}},
+{ 835812, 2, {981,852}},
+{ 835822, 2, {1037,806}},
+{ 835848, 2, {936,893}},
+{ 835884, 2, {963,868}},
+{ 835890, 2, {935,894}},
+{ 835920, 2, {972,860}},
+{ 835968, 2, {933,896}},
+{ 836000, 2, {950,880}},
+{ 836004, 2, {932,897}},
+{ 836052, 2, {1036,807}},
+{ 836066, 2, {979,854}},
+{ 836076, 2, {1083,772}},
+{ 836128, 2, {928,901}},
+{ 836160, 2, {960,871}},
+{ 836200, 2, {925,904}},
+{ 836220, 2, {924,905}},
+{ 836225, 2, {1079,775}},
+{ 836244, 2, {1044,801}},
+{ 836248, 2, {959,872}},
+{ 836250, 2, {1115,750}},
+{ 836256, 2, {992,843}},
+{ 836268, 2, {921,908}},
+{ 836280, 2, {920,909}},
+{ 836304, 2, {917,912}},
+{ 836325, 2, {945,885}},
+{ 836340, 2, {1052,795}},
+{ 836349, 2, {1173,713}},
+{ 836352, 2, {968,864}},
+{ 836360, 2, {1015,824}},
+{ 836400, 2, {984,850}},
+{ 836451, 2, {1071,781}},
+{ 836496, 2, {942,888}},
+{ 836528, 2, {1067,784}},
+{ 836570, 2, {1190,703}},
+{ 836580, 2, {955,876}},
+{ 836605, 2, {1435,583}},
+{ 836608, 2, {1024,817}},
+{ 836760, 2, {1101,760}},
+{ 836780, 2, {973,860}},
+{ 836784, 2, {936,894}},
+{ 836808, 2, {952,879}},
+{ 836836, 2, {988,847}},
+{ 836875, 2, {1339,625}},
+{ 836880, 2, {951,880}},
+{ 836892, 2, {972,861}},
+{ 836920, 2, {980,854}},
+{ 836940, 2, {962,870}},
+{ 836964, 2, {1041,804}},
+{ 836969, 2, {931,899}},
+{ 836976, 2, {987,848}},
+{ 837000, 2, {930,900}},
+{ 837012, 2, {1119,748}},
+{ 837018, 2, {949,882}},
+{ 837045, 2, {979,855}},
+{ 837056, 2, {928,902}},
+{ 837108, 2, {1011,828}},
+{ 837135, 2, {1053,795}},
+{ 837165, 2, {1005,833}},
+{ 837168, 2, {978,856}},
+{ 837199, 2, {1331,629}},
+{ 837207, 2, {959,873}},
+{ 837216, 2, {918,912}},
+{ 837232, 2, {1072,781}},
+{ 837312, 2, {1068,784}},
+{ 837320, 2, {968,865}},
+{ 837375, 2, {957,875}},
+{ 837384, 2, {943,888}},
+{ 837408, 2, {976,858}},
+{ 837425, 2, {1025,817}},
+{ 837520, 2, {1102,760}},
+{ 837540, 2, {940,891}},
+{ 837588, 2, {939,892}},
+{ 837600, 2, {1047,800}},
+{ 837606, 2, {1029,814}},
+{ 837630, 2, {1135,738}},
+{ 837648, 2, {1008,831}},
+{ 837683, 2, {989,847}},
+{ 837720, 2, {936,895}},
+{ 837760, 2, {935,896}},
+{ 837775, 2, {1081,775}},
+{ 837795, 2, {1185,707}},
+{ 837837, 2, {1001,837}},
+{ 837900, 2, {931,900}},
+{ 837930, 2, {930,901}},
+{ 837984, 2, {928,903}},
+{ 838008, 2, {927,904}},
+{ 838040, 2, {1022,820}},
+{ 838050, 2, {925,906}},
+{ 838080, 2, {960,873}},
+{ 838092, 2, {993,844}},
+{ 838100, 2, {986,850}},
+{ 838125, 2, {1125,745}},
+{ 838134, 2, {918,913}},
+{ 838140, 2, {916,915}},
+{ 838188, 2, {1053,796}},
+{ 838200, 2, {1016,825}},
+{ 838240, 2, {992,845}},
+{ 838242, 2, {1026,817}},
+{ 838292, 2, {1222,686}},
+{ 838332, 2, {957,876}},
+{ 838350, 2, {1035,810}},
+{ 838383, 2, {1079,777}},
+{ 838409, 2, {1573,533}},
+{ 838460, 2, {1060,791}},
+{ 838500, 2, {975,860}},
+{ 838508, 2, {1003,836}},
+{ 838530, 2, {990,847}},
+{ 838656, 2, {936,896}},
+{ 838695, 2, {935,897}},
+{ 838704, 2, {1038,808}},
+{ 838728, 2, {1059,792}},
+{ 838750, 2, {1250,671}},
+{ 838812, 2, {988,849}},
+{ 838825, 2, {1157,725}},
+{ 838831, 2, {931,901}},
+{ 838860, 2, {930,902}},
+{ 838935, 2, {927,905}},
+{ 838950, 2, {987,850}},
+{ 838971, 2, {1351,621}},
+{ 838980, 2, {948,885}},
+{ 839016, 2, {1032,813}},
+{ 839040, 2, {920,912}},
+{ 839055, 2, {917,915}},
+{ 839086, 2, {986,851}},
+{ 839125, 2, {959,875}},
+{ 839160, 2, {945,888}},
+{ 839188, 2, {1148,731}},
+{ 839216, 2, {944,889}},
+{ 839220, 2, {985,852}},
+{ 839223, 2, {1211,693}},
+{ 839232, 2, {992,846}},
+{ 839244, 2, {1164,721}},
+{ 839256, 2, {968,867}},
+{ 839280, 2, {1040,807}},
+{ 839375, 2, {1343,625}},
+{ 839448, 2, {1048,801}},
+{ 839454, 2, {966,869}},
+{ 839475, 2, {975,861}},
+{ 839511, 2, {1003,837}},
+{ 839520, 2, {954,880}},
+{ 839545, 2, {1411,595}},
+{ 839550, 2, {965,870}},
+{ 839560, 2, {1112,755}},
+{ 839575, 2, {1075,781}},
+{ 839592, 2, {936,897}},
+{ 839608, 2, {1034,812}},
+{ 839628, 2, {996,843}},
+{ 839664, 2, {952,882}},
+{ 839680, 2, {1024,820}},
+{ 839700, 2, {933,900}},
+{ 839736, 2, {963,872}},
+{ 839762, 2, {931,902}},
+{ 839776, 2, {1141,736}},
+{ 839790, 2, {930,903}},
+{ 839808, 2, {972,864}},
+{ 839840, 2, {928,905}},
+{ 839865, 2, {949,885}},
+{ 839914, 2, {961,874}},
+{ 839916, 2, {924,909}},
+{ 839930, 2, {923,910}},
+{ 839952, 2, {921,912}},
+{ 839960, 2, {920,913}},
+{ 839970, 2, {918,915}},
+{ 839979, 2, {1393,603}},
+{ 840000, 2, {960,875}},
+{ 840048, 2, {946,888}},
+{ 840060, 2, {1077,780}},
+{ 840084, 2, {959,876}},
+{ 840105, 2, {945,889}},
+{ 840160, 2, {944,890}},
+{ 840180, 2, {1005,836}},
+{ 840213, 2, {943,891}},
+{ 840275, 2, {1159,725}},
+{ 840315, 2, {1057,795}},
+{ 840320, 2, {1010,832}},
+{ 840324, 2, {956,879}},
+{ 840336, 2, {976,861}},
+{ 840348, 2, {1004,837}},
+{ 840400, 2, {955,880}},
+{ 840408, 2, {1083,776}},
+{ 840448, 2, {938,896}},
+{ 840455, 2, {1295,649}},
+{ 840565, 2, {935,899}},
+{ 840580, 2, {1060,793}},
+{ 840582, 2, {1139,738}},
+{ 840650, 2, {989,850}},
+{ 840672, 2, {973,864}},
+{ 840684, 2, {951,884}},
+{ 840686, 2, {1133,742}},
+{ 840708, 2, {1089,772}},
+{ 840720, 2, {930,904}},
+{ 840735, 2, {1071,785}},
+{ 840768, 2, {928,906}},
+{ 840780, 2, {972,865}},
+{ 840825, 2, {925,909}},
+{ 840840, 2, {924,910}},
+{ 840875, 2, {961,875}},
+{ 840924, 2, {987,852}},
+{ 840960, 2, {960,876}},
+{ 840972, 2, {1012,831}},
+{ 841000, 2, {1000,841}},
+{ 841050, 2, {945,890}},
+{ 841092, 2, {969,868}},
+{ 841104, 2, {944,891}},
+{ 841113, 2, {1027,819}},
+{ 841128, 2, {1041,808}},
+{ 841152, 2, {1011,832}},
+{ 841164, 2, {1101,764}},
+{ 841185, 2, {1005,837}},
+{ 841269, 2, {1221,689}},
+{ 841320, 2, {984,855}},
+{ 841330, 2, {1010,833}},
+{ 841344, 2, {939,896}},
+{ 841347, 2, {1053,799}},
+{ 841434, 2, {1159,726}},
+{ 841464, 2, {936,899}},
+{ 841480, 2, {965,872}},
+{ 841488, 2, {1119,752}},
+{ 841500, 2, {935,900}},
+{ 841520, 2, {1072,785}},
+{ 841572, 2, {964,873}},
+{ 841596, 2, {932,903}},
+{ 841620, 2, {996,845}},
+{ 841624, 2, {931,904}},
+{ 841650, 2, {930,905}},
+{ 841680, 2, {1002,840}},
+{ 841716, 2, {927,908}},
+{ 841725, 2, {1075,783}},
+{ 841728, 2, {1024,822}},
+{ 841770, 2, {995,846}},
+{ 841776, 2, {923,912}},
+{ 841788, 2, {1047,804}},
+{ 841800, 2, {920,915}},
+{ 841806, 2, {918,917}},
+{ 841841, 2, {1001,841}},
+{ 841852, 2, {1007,836}},
+{ 841869, 2, {1127,747}},
+{ 841890, 2, {1055,798}},
+{ 841932, 2, {1028,819}},
+{ 841984, 2, {1012,832}},
+{ 842010, 2, {1105,762}},
+{ 842016, 2, {1074,784}},
+{ 842064, 2, {993,848}},
+{ 842076, 2, {1017,828}},
+{ 842140, 2, {1027,820}},
+{ 842160, 2, {957,880}},
+{ 842166, 2, {1062,793}},
+{ 842175, 2, {985,855}},
+{ 842208, 2, {992,849}},
+{ 842240, 2, {940,896}},
+{ 842268, 2, {1036,813}},
+{ 842270, 2, {1045,806}},
+{ 842296, 2, {1157,728}},
+{ 842310, 2, {955,882}},
+{ 842352, 2, {966,872}},
+{ 842415, 2, {1065,791}},
+{ 842435, 2, {935,901}},
+{ 842445, 2, {965,873}},
+{ 842490, 2, {990,851}},
+{ 842508, 2, {1044,807}},
+{ 842520, 2, {952,885}},
+{ 842550, 2, {1025,822}},
+{ 842625, 2, {963,875}},
+{ 842652, 2, {1052,801}},
+{ 842673, 2, {1209,697}},
+{ 842688, 2, {924,912}},
+{ 842697, 2, {1357,621}},
+{ 842712, 2, {949,888}},
+{ 842736, 2, {1086,776}},
+{ 842744, 2, {1043,808}},
+{ 842772, 2, {948,889}},
+{ 842859, 2, {1007,837}},
+{ 842860, 2, {1139,740}},
+{ 842886, 2, {946,891}},
+{ 842912, 2, {994,848}},
+{ 842919, 2, {979,861}},
+{ 842940, 2, {945,892}},
+{ 842952, 2, {1023,824}},
+{ 842964, 2, {1059,796}},
+{ 842985, 2, {1179,715}},
+{ 842996, 2, {1012,833}},
+{ 843000, 2, {1000,843}},
+{ 843090, 2, {942,895}},
+{ 843125, 2, {1349,625}},
+{ 843128, 2, {968,871}},
+{ 843150, 2, {1022,825}},
+{ 843156, 2, {999,844}},
+{ 843160, 2, {985,856}},
+{ 843180, 2, {940,897}},
+{ 843200, 2, {992,850}},
+{ 843325, 2, {1525,553}},
+{ 843336, 2, {936,901}},
+{ 843432, 2, {933,904}},
+{ 843479, 2, {1183,713}},
+{ 843525, 2, {1035,815}},
+{ 843552, 2, {928,909}},
+{ 843588, 2, {963,876}},
+{ 843600, 2, {925,912}},
+{ 843612, 2, {924,913}},
+{ 843636, 2, {921,916}},
+{ 843640, 2, {920,917}},
+{ 843648, 2, {1014,832}},
+{ 843660, 2, {981,860}},
+{ 843696, 2, {972,868}},
+{ 843700, 2, {1100,767}},
+{ 843720, 2, {948,890}},
+{ 843744, 2, {1034,816}},
+{ 843755, 2, {1265,667}},
+{ 843760, 2, {995,848}},
+{ 843780, 2, {980,861}},
+{ 843840, 2, {960,879}},
+{ 843885, 2, {945,893}},
+{ 843920, 2, {959,880}},
+{ 843936, 2, {944,894}},
+{ 843948, 2, {1071,788}},
+{ 843975, 2, {1023,825}},
+{ 844025, 2, {1225,689}},
+{ 844032, 2, {942,896}},
+{ 844074, 2, {957,882}},
+{ 844118, 2, {1037,814}},
+{ 844155, 2, {999,845}},
+{ 844192, 2, {992,851}},
+{ 844200, 2, {938,900}},
+{ 844240, 2, {976,865}},
+{ 844272, 2, {936,902}},
+{ 844290, 2, {954,885}},
+{ 844296, 2, {1016,831}},
+{ 844368, 2, {1077,784}},
+{ 844425, 2, {1215,695}},
+{ 844480, 2, {928,910}},
+{ 844488, 2, {951,888}},
+{ 844525, 2, {925,913}},
+{ 844545, 2, {923,915}},
+{ 844550, 2, {950,889}},
+{ 844560, 2, {920,918}},
+{ 844600, 2, {1025,824}},
+{ 844608, 2, {996,848}},
+{ 844668, 2, {948,891}},
+{ 844675, 2, {1469,575}},
+{ 844683, 2, {1387,609}},
+{ 844740, 2, {988,855}},
+{ 844778, 2, {946,893}},
+{ 844788, 2, {1068,791}},
+{ 844800, 2, {960,880}},
+{ 844857, 2, {1079,783}},
+{ 844872, 2, {987,856}},
+{ 844880, 2, {944,895}},
+{ 844900, 2, {994,850}},
+{ 844911, 2, {1159,729}},
+{ 844928, 2, {943,896}},
+{ 844950, 2, {1075,786}},
+{ 844968, 2, {969,872}},
+{ 844992, 2, {978,864}},
+{ 845000, 2, {1000,845}},
+{ 845010, 2, {1145,738}},
+{ 845055, 2, {1055,801}},
+{ 845064, 2, {968,873}},
+{ 845100, 2, {939,900}},
+{ 845130, 2, {985,858}},
+{ 845152, 2, {1078,784}},
+{ 845184, 2, {992,852}},
+{ 845196, 2, {1011,836}},
+{ 845208, 2, {936,903}},
+{ 845215, 2, {1085,779}},
+{ 845240, 2, {935,904}},
+{ 845250, 2, {966,875}},
+{ 845292, 2, {1041,812}},
+{ 845295, 2, {1199,705}},
+{ 845325, 2, {975,867}},
+{ 845340, 2, {965,876}},
+{ 845350, 2, {1166,725}},
+{ 845355, 2, {1245,679}},
+{ 845424, 2, {927,912}},
+{ 845460, 2, {924,915}},
+{ 845520, 2, {1040,813}},
+{ 845559, 2, {949,891}},
+{ 845568, 2, {1101,768}},
+{ 845595, 2, {989,855}},
+{ 845600, 2, {1057,800}},
+{ 845604, 2, {996,849}},
+{ 845614, 2, {1309,646}},
+{ 845640, 2, {972,870}},
+{ 845680, 2, {961,880}},
+{ 845736, 2, {1048,807}},
+{ 845748, 2, {1107,764}},
+{ 845775, 2, {945,895}},
+{ 845790, 2, {1165,726}},
+{ 845838, 2, {959,882}},
+{ 845856, 2, {979,864}},
+{ 845871, 2, {943,897}},
+{ 845880, 2, {1007,840}},
+{ 845936, 2, {1079,784}},
+{ 845964, 2, {1119,756}},
+{ 845970, 2, {978,865}},
+{ 845976, 2, {1047,808}},
+{ 845988, 2, {957,884}},
+{ 846000, 2, {940,900}},
+{ 846032, 2, {968,874}},
+{ 846036, 2, {993,852}},
+{ 846060, 2, {956,885}},
+{ 846153, 2, {999,847}},
+{ 846192, 2, {976,867}},
+{ 846240, 2, {984,860}},
+{ 846279, 2, {931,909}},
+{ 846320, 2, {1136,745}},
+{ 846328, 2, {952,889}},
+{ 846370, 2, {1070,791}},
+{ 846372, 2, {1004,843}},
+{ 846412, 2, {1036,817}},
+{ 846423, 2, {1081,783}},
+{ 846450, 2, {950,891}},
+{ 846510, 2, {973,870}},
+{ 846545, 2, {1273,665}},
+{ 846560, 2, {962,880}},
+{ 846600, 2, {996,850}},
+{ 846612, 2, {972,871}},
+{ 846650, 2, {1025,826}},
+{ 846657, 2, {1057,801}},
+{ 846690, 2, {1002,845}},
+{ 846720, 2, {945,896}},
+{ 846768, 2, {944,897}},
+{ 846880, 2, {1072,790}},
+{ 846885, 2, {1313,645}},
+{ 846906, 2, {969,874}},
+{ 846940, 2, {940,901}},
+{ 847000, 2, {968,875}},
+{ 847008, 2, {1038,816}},
+{ 847044, 2, {1012,837}},
+{ 847080, 2, {936,905}},
+{ 847110, 2, {935,906}},
+{ 847152, 2, {954,888}},
+{ 847161, 2, {1017,833}},
+{ 847164, 2, {933,908}},
+{ 847175, 2, {1175,721}},
+{ 847188, 2, {932,909}},
+{ 847200, 2, {1059,800}},
+{ 847210, 2, {931,910}},
+{ 847224, 2, {984,861}},
+{ 847264, 2, {928,913}},
+{ 847275, 2, {975,869}},
+{ 847308, 2, {924,917}},
+{ 847314, 2, {923,918}},
+{ 847320, 2, {921,920}},
+{ 847344, 2, {1016,834}},
+{ 847356, 2, {964,879}},
+{ 847385, 2, {1085,781}},
+{ 847440, 2, {963,880}},
+{ 847476, 2, {1026,826}},
+{ 847504, 2, {1081,784}},
+{ 847530, 2, {1095,774}},
+{ 847535, 2, {1003,845}},
+{ 847550, 2, {1150,737}},
+{ 847552, 2, {1088,779}},
+{ 847600, 2, {1040,815}},
+{ 847602, 2, {961,882}},
+{ 847616, 2, {946,896}},
+{ 847620, 2, {1020,831}},
+{ 847665, 2, {945,897}},
+{ 847704, 2, {988,858}},
+{ 847728, 2, {1008,841}},
+{ 847740, 2, {995,852}},
+{ 847845, 2, {1135,747}},
+{ 847872, 2, {1024,828}},
+{ 847875, 2, {969,875}},
+{ 847896, 2, {1029,824}},
+{ 848016, 2, {936,906}},
+{ 848040, 2, {955,888}},
+{ 848100, 2, {1028,825}},
+{ 848106, 2, {954,889}},
+{ 848125, 2, {1357,625}},
+{ 848144, 2, {976,869}},
+{ 848160, 2, {930,912}},
+{ 848220, 2, {1005,844}},
+{ 848225, 2, {925,917}},
+{ 848265, 2, {1067,795}},
+{ 848292, 2, {951,892}},
+{ 848302, 2, {1027,826}},
+{ 848304, 2, {1032,822}},
+{ 848331, 2, {1089,779}},
+{ 848350, 2, {950,893}},
+{ 848360, 2, {1016,835}},
+{ 848400, 2, {1010,840}},
+{ 848424, 2, {1219,696}},
+{ 848456, 2, {973,872}},
+{ 848460, 2, {948,895}},
+{ 848470, 2, {1054,805}},
+{ 848484, 2, {962,882}},
+{ 848538, 2, {1003,846}},
+{ 848556, 2, {972,873}},
+{ 848565, 2, {981,865}},
+{ 848640, 2, {960,884}},
+{ 848676, 2, {1077,788}},
+{ 848700, 2, {943,900}},
+{ 848715, 2, {959,885}},
+{ 848772, 2, {1044,813}},
+{ 848820, 2, {940,903}},
+{ 848844, 2, {969,876}},
+{ 848848, 2, {1001,848}},
+{ 848856, 2, {939,904}},
+{ 848880, 2, {1048,810}},
+{ 848892, 2, {1199,708}},
+{ 848925, 2, {1029,825}},
+{ 848964, 2, {1052,807}},
+{ 849000, 2, {1000,849}},
+{ 849024, 2, {1056,804}},
+{ 849060, 2, {954,890}},
+{ 849069, 2, {1107,767}},
+{ 849072, 2, {931,912}},
+{ 849090, 2, {930,913}},
+{ 849120, 2, {928,915}},
+{ 849121, 2, {1333,637}},
+{ 849132, 2, {927,916}},
+{ 849150, 2, {925,918}},
+{ 849160, 2, {923,920}},
+{ 849195, 2, {1017,835}},
+{ 849200, 2, {965,880}},
+{ 849225, 2, {975,871}},
+{ 849240, 2, {1011,840}},
+{ 849285, 2, {1165,729}},
+{ 849303, 2, {1037,819}},
+{ 849375, 2, {1125,755}},
+{ 849400, 2, {1096,775}},
+{ 849408, 2, {948,896}},
+{ 849420, 2, {990,858}},
+{ 849429, 2, {973,873}},
+{ 849456, 2, {1041,816}},
+{ 849524, 2, {961,884}},
+{ 849528, 2, {972,874}},
+{ 849541, 2, {1003,847}},
+{ 849555, 2, {945,899}},
+{ 849600, 2, {944,900}},
+{ 849630, 2, {1115,762}},
+{ 849660, 2, {980,867}},
+{ 849696, 2, {1002,848}},
+{ 849720, 2, {970,876}},
+{ 849728, 2, {1088,781}},
+{ 849744, 2, {1008,843}},
+{ 849758, 2, {1127,754}},
+{ 849772, 2, {979,868}},
+{ 849816, 2, {957,888}},
+{ 849870, 2, {994,855}},
+{ 849915, 2, {935,909}},
+{ 849920, 2, {1024,830}},
+{ 849927, 2, {1147,741}},
+{ 849972, 2, {1101,772}},
+{ 850003, 2, {931,913}},
+{ 850008, 2, {993,856}},
+{ 850059, 2, {927,917}},
+{ 850096, 2, {976,871}},
+{ 850135, 2, {1189,715}},
+{ 850136, 2, {952,893}},
+{ 850164, 2, {1047,812}},
+{ 850176, 2, {984,864}},
+{ 850200, 2, {975,872}},
+{ 850212, 2, {1017,836}},
+{ 850230, 2, {1005,846}},
+{ 850304, 2, {949,896}},
+{ 850325, 2, {1075,791}},
+{ 850332, 2, {1113,764}},
+{ 850340, 2, {1037,820}},
+{ 850356, 2, {948,897}},
+{ 850392, 2, {1016,837}},
+{ 850395, 2, {1157,735}},
+{ 850440, 2, {1119,760}},
+{ 850500, 2, {945,900}},
+{ 850608, 2, {1074,792}},
+{ 850668, 2, {988,861}},
+{ 850725, 2, {995,855}},
+{ 850816, 2, {1088,782}},
+{ 850824, 2, {936,909}},
+{ 850839, 2, {1121,759}},
+{ 850850, 2, {935,910}},
+{ 850872, 2, {968,879}},
+{ 850896, 2, {933,912}},
+{ 850905, 2, {955,891}},
+{ 850915, 2, {1007,845}},
+{ 850944, 2, {1024,831}},
+{ 850976, 2, {928,917}},
+{ 851000, 2, {925,920}},
+{ 851004, 2, {924,921}},
+{ 851032, 2, {1169,728}},
+{ 851037, 2, {1221,697}},
+{ 851040, 2, {985,864}},
+{ 851088, 2, {952,894}},
+{ 851092, 2, {1012,841}},
+{ 851105, 2, {1445,589}},
+{ 851130, 2, {965,882}},
+{ 851136, 2, {992,858}},
+{ 851148, 2, {999,852}},
+{ 851160, 2, {984,865}},
+{ 851180, 2, {1060,803}},
+{ 851200, 2, {950,896}},
+{ 851235, 2, {1005,847}},
+{ 851250, 2, {1135,750}},
+{ 851292, 2, {963,884}},
+{ 851375, 2, {973,875}},
+{ 851400, 2, {946,900}},
+{ 851424, 2, {1086,784}},
+{ 851436, 2, {1059,804}},
+{ 851445, 2, {945,901}},
+{ 851466, 2, {1067,798}},
+{ 851499, 2, {1269,671}},
+{ 851508, 2, {981,868}},
+{ 851535, 2, {1143,745}},
+{ 851552, 2, {1157,736}},
+{ 851568, 2, {942,904}},
+{ 851580, 2, {996,855}},
+{ 851592, 2, {959,888}},
+{ 851598, 2, {1089,782}},
+{ 851620, 2, {980,869}},
+{ 851720, 2, {995,856}},
+{ 851734, 2, {1066,799}},
+{ 851760, 2, {936,910}},
+{ 851796, 2, {956,891}},
+{ 851851, 2, {1001,851}},
+{ 851865, 2, {931,915}},
+{ 851904, 2, {928,918}},
+{ 851960, 2, {1121,760}},
+{ 851972, 2, {1139,748}},
+{ 852024, 2, {1048,813}},
+{ 852040, 2, {952,895}},
+{ 852048, 2, {976,873}},
+{ 852096, 2, {951,896}},
+{ 852150, 2, {950,897}},
+{ 852159, 2, {1023,833}},
+{ 852192, 2, {1056,807}},
+{ 852201, 2, {1169,729}},
+{ 852240, 2, {1005,848}},
+{ 852264, 2, {1064,801}},
+{ 852280, 2, {1144,745}},
+{ 852327, 2, {1141,747}},
+{ 852346, 2, {946,901}},
+{ 852348, 2, {973,876}},
+{ 852390, 2, {945,902}},
+{ 852396, 2, {1004,849}},
+{ 852397, 2, {1547,551}},
+{ 852432, 2, {944,903}},
+{ 852475, 2, {1075,793}},
+{ 852480, 2, {960,888}},
+{ 852510, 2, {942,905}},
+{ 852516, 2, {1071,796}},
+{ 852544, 2, {1211,704}},
+{ 852550, 2, {1003,850}},
+{ 852612, 2, {939,908}},
+{ 852687, 2, {957,891}},
+{ 852720, 2, {935,912}},
+{ 852768, 2, {987,864}},
+{ 852774, 2, {1014,841}},
+{ 852780, 2, {932,915}},
+{ 852786, 2, {1062,803}},
+{ 852800, 2, {1025,832}},
+{ 852810, 2, {930,917}},
+{ 852816, 2, {978,872}},
+{ 852824, 2, {1099,776}},
+{ 852840, 2, {927,920}},
+{ 852852, 2, {924,923}},
+{ 852929, 2, {1007,847}},
+{ 852948, 2, {1044,817}},
+{ 852975, 2, {1115,765}},
+{ 852984, 2, {1077,792}},
+{ 852992, 2, {952,896}},
+{ 853050, 2, {1034,825}},
+{ 853116, 2, {1012,843}},
+{ 853120, 2, {992,860}},
+{ 853128, 2, {984,867}},
+{ 853140, 2, {964,885}},
+{ 853146, 2, {999,854}},
+{ 853281, 2, {1287,663}},
+{ 853284, 2, {1011,844}},
+{ 853325, 2, {1177,725}},
+{ 853335, 2, {945,903}},
+{ 853404, 2, {1083,788}},
+{ 853440, 2, {960,889}},
+{ 853461, 2, {1197,713}},
+{ 853510, 2, {959,890}},
+{ 853600, 2, {970,880}},
+{ 853620, 2, {1041,820}},
+{ 853644, 2, {957,892}},
+{ 853671, 2, {1113,767}},
+{ 853710, 2, {995,858}},
+{ 853740, 2, {930,918}},
+{ 853765, 2, {1045,817}},
+{ 853770, 2, {955,894}},
+{ 853775, 2, {925,923}},
+{ 853825, 2, {1025,833}},
+{ 853830, 2, {954,895}},
+{ 853944, 2, {952,897}},
+{ 853980, 2, {993,860}},
+{ 854000, 2, {976,875}},
+{ 854016, 2, {1024,834}},
+{ 854050, 2, {950,899}},
+{ 854056, 2, {1057,808}},
+{ 854080, 2, {1088,785}},
+{ 854100, 2, {949,900}},
+{ 854120, 2, {1048,815}},
+{ 854126, 2, {1183,722}},
+{ 854217, 2, {1043,819}},
+{ 854268, 2, {1028,831}},
+{ 854280, 2, {945,904}},
+{ 854320, 2, {944,905}},
+{ 854335, 2, {1615,529}},
+{ 854343, 2, {1337,639}},
+{ 854352, 2, {1047,816}},
+{ 854376, 2, {1101,776}},
+{ 854385, 2, {1185,721}},
+{ 854388, 2, {972,879}},
+{ 854400, 2, {960,890}},
+{ 854460, 2, {940,909}},
+{ 854464, 2, {1027,832}},
+{ 854469, 2, {959,891}},
+{ 854496, 2, {989,864}},
+{ 854550, 2, {1055,810}},
+{ 854568, 2, {936,913}},
+{ 854601, 2, {957,893}},
+{ 854604, 2, {1107,772}},
+{ 854628, 2, {933,916}},
+{ 854658, 2, {931,918}},
+{ 854688, 2, {928,921}},
+{ 854700, 2, {925,924}},
+{ 854775, 2, {1179,725}},
+{ 854784, 2, {954,896}},
+{ 854840, 2, {994,860}},
+{ 854850, 2, {1025,834}},
+{ 854865, 2, {1089,785}},
+{ 854880, 2, {1040,822}},
+{ 854916, 2, {1119,764}},
+{ 854920, 2, {1160,737}},
+{ 854976, 2, {976,876}},
+{ 855000, 2, {950,900}},
+{ 855036, 2, {1044,819}},
+{ 855040, 2, {1024,835}},
+{ 855117, 2, {1173,729}},
+{ 855144, 2, {963,888}},
+{ 855195, 2, {1065,803}},
+{ 855225, 2, {945,905}},
+{ 855228, 2, {1023,836}},
+{ 855232, 2, {1162,736}},
+{ 855260, 2, {1043,820}},
+{ 855264, 2, {944,906}},
+{ 855270, 2, {1105,774}},
+{ 855276, 2, {1052,813}},
+{ 855312, 2, {1038,824}},
+{ 855315, 2, {1145,747}},
+{ 855360, 2, {960,891}},
+{ 855414, 2, {1022,837}},
+{ 855420, 2, {1060,807}},
+{ 855432, 2, {981,872}},
+{ 855442, 2, {1247,686}},
+{ 855456, 2, {938,912}},
+{ 855465, 2, {1391,615}},
+{ 855470, 2, {1010,847}},
+{ 855491, 2, {1027,833}},
+{ 855540, 2, {970,882}},
+{ 855600, 2, {930,920}},
+{ 855657, 2, {1161,737}},
+{ 855672, 2, {1059,808}},
+{ 855680, 2, {955,896}},
+{ 855712, 2, {968,884}},
+{ 855750, 2, {978,875}},
+{ 855792, 2, {1008,849}},
+{ 855848, 2, {952,899}},
+{ 855855, 2, {1001,855}},
+{ 855900, 2, {951,900}},
+{ 855925, 2, {1675,511}},
+{ 855950, 2, {950,901}},
+{ 855998, 2, {949,902}},
+{ 856044, 2, {948,903}},
+{ 856064, 2, {1024,836}},
+{ 856080, 2, {984,870}},
+{ 856107, 2, {963,889}},
+{ 856128, 2, {1029,832}},
+{ 856240, 2, {973,880}},
+{ 856251, 2, {961,891}},
+{ 856254, 2, {1073,798}},
+{ 856260, 2, {1005,852}},
+{ 856350, 2, {990,865}},
+{ 856359, 2, {1379,621}},
+{ 856368, 2, {939,912}},
+{ 856394, 2, {938,913}},
+{ 856440, 2, {936,915}},
+{ 856480, 2, {1010,848}},
+{ 856488, 2, {1016,843}},
+{ 856520, 2, {931,920}},
+{ 856544, 2, {928,923}},
+{ 856548, 2, {927,924}},
+{ 856575, 2, {1175,729}},
+{ 856596, 2, {969,884}},
+{ 856625, 2, {979,875}},
+{ 856680, 2, {968,885}},
+{ 856716, 2, {987,868}},
+{ 856800, 2, {952,900}},
+{ 856856, 2, {1001,856}},
+{ 856900, 2, {950,902}},
+{ 856920, 2, {965,888}},
+{ 856935, 2, {1233,695}},
+{ 856947, 2, {949,903}},
+{ 856950, 2, {985,870}},
+{ 856960, 2, {1030,832}},
+{ 856975, 2, {1475,581}},
+{ 856980, 2, {1035,828}},
+{ 857010, 2, {1078,795}},
+{ 857064, 2, {984,871}},
+{ 857142, 2, {962,891}},
+{ 857280, 2, {940,912}},
+{ 857292, 2, {1077,796}},
+{ 857304, 2, {972,882}},
+{ 857328, 2, {1011,848}},
+{ 857385, 2, {1095,783}},
+{ 857463, 2, {989,867}},
+{ 857472, 2, {928,924}},
+{ 857475, 2, {927,925}},
+{ 857532, 2, {956,897}},
+{ 857538, 2, {1098,781}},
+{ 857549, 2, {1591,539}},
+{ 857556, 2, {996,861}},
+{ 857592, 2, {1032,831}},
+{ 857604, 2, {979,876}},
+{ 857660, 2, {1159,740}},
+{ 857680, 2, {1136,755}},
+{ 857703, 2, {987,869}},
+{ 857712, 2, {1002,856}},
+{ 857752, 2, {952,901}},
+{ 857784, 2, {1041,824}},
+{ 857805, 2, {1079,795}},
+{ 857808, 2, {966,888}},
+{ 857850, 2, {950,903}},
+{ 857868, 2, {1067,804}},
+{ 857904, 2, {976,879}},
+{ 857925, 2, {1025,837}},
+{ 857940, 2, {948,905}},
+{ 857952, 2, {993,864}},
+{ 857990, 2, {1030,833}},
+{ 858000, 2, {975,880}},
+{ 858032, 2, {1141,752}},
+{ 858060, 2, {945,908}},
+{ 858080, 2, {992,865}},
+{ 858096, 2, {944,909}},
+{ 858130, 2, {943,910}},
+{ 858132, 2, {1089,788}},
+{ 858186, 2, {973,882}},
+{ 858195, 2, {1053,815}},
+{ 858220, 2, {940,913}},
+{ 858240, 2, {960,894}},
+{ 858270, 2, {938,915}},
+{ 858312, 2, {936,917}},
+{ 858330, 2, {935,918}},
+{ 858348, 2, {1017,844}},
+{ 858360, 2, {933,920}},
+{ 858372, 2, {932,921}},
+{ 858375, 2, {981,875}},
+{ 858390, 2, {930,923}},
+{ 858400, 2, {928,925}},
+{ 858420, 2, {1004,855}},
+{ 858452, 2, {989,868}},
+{ 858494, 2, {1157,742}},
+{ 858495, 2, {1331,645}},
+{ 858520, 2, {1016,845}},
+{ 858528, 2, {1056,813}},
+{ 858540, 2, {1047,820}},
+{ 858624, 2, {1032,832}},
+{ 858636, 2, {1037,828}},
+{ 858648, 2, {1064,807}},
+{ 858690, 2, {987,870}},
+{ 858704, 2, {952,902}},
+{ 858750, 2, {1145,750}},
+{ 858780, 2, {1101,780}},
+{ 858816, 2, {994,864}},
+{ 858920, 2, {985,872}},
+{ 858924, 2, {964,891}},
+{ 858925, 2, {1075,799}},
+{ 858935, 2, {1067,805}},
+{ 858990, 2, {1045,822}},
+{ 858996, 2, {963,892}},
+{ 859027, 2, {2197,391}},
+{ 859032, 2, {984,873}},
+{ 859040, 2, {944,910}},
+{ 859066, 2, {962,893}},
+{ 859100, 2, {1100,781}},
+{ 859104, 2, {942,912}},
+{ 859140, 2, {999,860}},
+{ 859180, 2, {1190,722}},
+{ 859188, 2, {1012,849}},
+{ 859200, 2, {960,895}},
+{ 859236, 2, {1113,772}},
+{ 859248, 2, {936,918}},
+{ 859264, 2, {959,896}},
+{ 859299, 2, {1411,609}},
+{ 859313, 2, {931,923}},
+{ 859356, 2, {981,876}},
+{ 859365, 2, {1017,845}},
+{ 859392, 2, {1119,768}},
+{ 859432, 2, {1043,824}},
+{ 859500, 2, {955,900}},
+{ 859520, 2, {1088,790}},
+{ 859536, 2, {1016,846}},
+{ 859599, 2, {1027,837}},
+{ 859656, 2, {952,903}},
+{ 859677, 2, {987,871}},
+{ 859680, 2, {995,864}},
+{ 859704, 2, {951,904}},
+{ 859770, 2, {1165,738}},
+{ 859815, 2, {965,891}},
+{ 859826, 2, {1331,646}},
+{ 859860, 2, {1020,843}},
+{ 859872, 2, {1014,848}},
+{ 859905, 2, {985,873}},
+{ 859908, 2, {1059,812}},
+{ 859925, 2, {1325,649}},
+{ 859950, 2, {945,910}},
+{ 860013, 2, {1071,803}},
+{ 860016, 2, {943,912}},
+{ 860064, 2, {992,867}},
+{ 860100, 2, {940,915}},
+{ 860112, 2, {1086,792}},
+{ 860124, 2, {939,916}},
+{ 860139, 2, {999,861}},
+{ 860200, 2, {935,920}},
+{ 860220, 2, {972,885}},
+{ 860244, 2, {931,924}},
+{ 860250, 2, {930,925}},
+{ 860256, 2, {928,927}},
+{ 860280, 2, {1005,856}},
+{ 860288, 2, {1034,832}},
+{ 860301, 2, {1053,817}},
+{ 860310, 2, {990,869}},
+{ 860343, 2, {957,899}},
+{ 860360, 2, {1096,785}},
+{ 860384, 2, {1169,736}},
+{ 860405, 2, {1085,793}},
+{ 860430, 2, {989,870}},
+{ 860436, 2, {1028,837}},
+{ 860472, 2, {969,888}},
+{ 860475, 2, {1043,825}},
+{ 860517, 2, {1099,783}},
+{ 860520, 2, {1010,852}},
+{ 860544, 2, {996,864}},
+{ 860552, 2, {968,889}},
+{ 860574, 2, {1003,858}},
+{ 860640, 2, {978,880}},
+{ 860664, 2, {987,872}},
+{ 860688, 2, {1032,834}},
+{ 860706, 2, {966,891}},
+{ 860720, 2, {1015,848}},
+{ 860795, 2, {1105,779}},
+{ 860816, 2, {1072,803}},
+{ 860832, 2, {976,882}},
+{ 860860, 2, {946,910}},
+{ 860916, 2, {1036,831}},
+{ 860985, 2, {1007,855}},
+{ 861000, 2, {984,875}},
+{ 861021, 2, {1211,711}},
+{ 861025, 2, {1111,775}},
+{ 861042, 2, {1079,798}},
+{ 861056, 2, {961,896}},
+{ 861075, 2, {1075,801}},
+{ 861084, 2, {938,918}},
+{ 861105, 2, {973,885}},
+{ 861118, 2, {1054,817}},
+{ 861120, 2, {936,920}},
+{ 861175, 2, {931,925}},
+{ 861212, 2, {1012,851}},
+{ 861224, 2, {1183,728}},
+{ 861250, 2, {1250,689}},
+{ 861273, 2, {1029,837}},
+{ 861300, 2, {957,900}},
+{ 861322, 2, {1034,833}},
+{ 861360, 2, {970,888}},
+{ 861372, 2, {1011,852}},
+{ 861399, 2, {1017,847}},
+{ 861420, 2, {980,879}},
+{ 861456, 2, {1048,822}},
+{ 861540, 2, {996,865}},
+{ 861560, 2, {952,905}},
+{ 861564, 2, {1177,732}},
+{ 861588, 2, {1052,819}},
+{ 861600, 2, {1077,800}},
+{ 861616, 2, {1099,784}},
+{ 861707, 2, {1463,589}},
+{ 861732, 2, {948,909}},
+{ 861780, 2, {1060,813}},
+{ 861800, 2, {1112,775}},
+{ 861840, 2, {945,912}},
+{ 861872, 2, {944,913}},
+{ 861876, 2, {1068,807}},
+{ 861885, 2, {963,895}},
+{ 861900, 2, {975,884}},
+{ 861924, 2, {993,868}},
+{ 861948, 2, {1041,828}},
+{ 861952, 2, {962,896}},
+{ 861980, 2, {940,917}},
+{ 862017, 2, {961,897}},
+{ 862048, 2, {992,869}},
+{ 862056, 2, {936,921}},
+{ 862068, 2, {1083,796}},
+{ 862092, 2, {933,924}},
+{ 862125, 2, {1045,825}},
+{ 862155, 2, {1035,833}},
+{ 862190, 2, {1090,791}},
+{ 862232, 2, {1211,712}},
+{ 862257, 2, {957,901}},
+{ 862290, 2, {990,871}},
+{ 862296, 2, {1159,744}},
+{ 862330, 2, {970,889}},
+{ 862344, 2, {1044,826}},
+{ 862416, 2, {954,904}},
+{ 862488, 2, {968,891}},
+{ 862512, 2, {952,906}},
+{ 862524, 2, {988,873}},
+{ 862576, 2, {1144,754}},
+{ 862580, 2, {1003,860}},
+{ 862584, 2, {1016,849}},
+{ 862638, 2, {966,893}},
+{ 862650, 2, {1065,810}},
+{ 862680, 2, {948,910}},
+{ 862710, 2, {965,894}},
+{ 862728, 2, {1047,824}},
+{ 862730, 2, {1210,713}},
+{ 862750, 2, {986,875}},
+{ 862752, 2, {946,912}},
+{ 862785, 2, {945,913}},
+{ 862848, 2, {963,896}},
+{ 862860, 2, {985,876}},
+{ 862866, 2, {1026,841}},
+{ 862920, 2, {940,918}},
+{ 862960, 2, {938,920}},
+{ 862965, 2, {1143,755}},
+{ 863005, 2, {935,923}},
+{ 863010, 2, {1115,774}},
+{ 863037, 2, {931,927}},
+{ 863040, 2, {930,928}},
+{ 863075, 2, {1501,575}},
+{ 863100, 2, {959,900}},
+{ 863184, 2, {1101,784}},
+{ 863200, 2, {1040,830}},
+{ 863225, 2, {1075,803}},
+{ 863226, 2, {1054,819}},
+{ 863232, 2, {1024,843}},
+{ 863247, 2, {1111,777}},
+{ 863268, 2, {956,903}},
+{ 863280, 2, {981,880}},
+{ 863289, 2, {1351,639}},
+{ 863320, 2, {955,904}},
+{ 863328, 2, {1058,816}},
+{ 863370, 2, {954,905}},
+{ 863379, 2, {969,891}},
+{ 863412, 2, {1023,844}},
+{ 863460, 2, {1053,820}},
+{ 863478, 2, {979,882}},
+{ 863508, 2, {951,908}},
+{ 863512, 2, {988,874}},
+{ 863532, 2, {996,867}},
+{ 863577, 2, {1089,793}},
+{ 863583, 2, {1003,861}},
+{ 863590, 2, {949,910}},
+{ 863616, 2, {1038,832}},
+{ 863625, 2, {987,875}},
+{ 863655, 2, {1339,645}},
+{ 863688, 2, {1113,776}},
+{ 863720, 2, {1144,755}},
+{ 863760, 2, {944,915}},
+{ 863765, 2, {1015,851}},
+{ 863772, 2, {1092,791}},
+{ 863784, 2, {1032,837}},
+{ 863786, 2, {994,869}},
+{ 863821, 2, {1037,833}},
+{ 863865, 2, {1185,729}},
+{ 863868, 2, {1119,772}},
+{ 863880, 2, {939,920}},
+{ 863928, 2, {936,923}},
+{ 863940, 2, {935,924}},
+{ 863964, 2, {932,927}},
+{ 863968, 2, {931,928}},
+{ 864000, 2, {960,900}},
+{ 864006, 2, {1007,858}},
+{ 864024, 2, {973,888}},
+{ 864032, 2, {992,871}},
+{ 864045, 2, {1055,819}},
+{ 864084, 2, {1131,764}},
+{ 864108, 2, {972,889}},
+{ 864110, 2, {1105,782}},
+{ 864120, 2, {1137,760}},
+{ 864135, 2, {999,865}},
+{ 864144, 2, {1059,816}},
+{ 864200, 2, {1160,745}},
+{ 864225, 2, {1035,835}},
+{ 864240, 2, {1040,831}},
+{ 864270, 2, {970,891}},
+{ 864300, 2, {1005,860}},
+{ 864348, 2, {969,892}},
+{ 864386, 2, {989,874}},
+{ 864409, 2, {1127,767}},
+{ 864424, 2, {968,893}},
+{ 864444, 2, {1004,861}},
+{ 864501, 2, {1139,759}},
+{ 864567, 2, {1107,781}},
+{ 864570, 2, {966,895}},
+{ 864576, 2, {948,912}},
+{ 864600, 2, {1048,825}},
+{ 864612, 2, {987,876}},
+{ 864640, 2, {965,896}},
+{ 864675, 2, {945,915}},
+{ 864690, 2, {1110,779}},
+{ 864708, 2, {964,897}},
+{ 864773, 2, {1183,731}},
+{ 864780, 2, {994,870}},
+{ 864870, 2, {1135,762}},
+{ 864936, 2, {984,879}},
+{ 864945, 2, {1161,745}},
+{ 864960, 2, {960,901}},
+{ 865000, 2, {1000,865}},
+{ 865032, 2, {1064,813}},
+{ 865046, 2, {1261,686}},
+{ 865053, 2, {1393,621}},
+{ 865080, 2, {972,890}},
+{ 865095, 2, {1155,749}},
+{ 865104, 2, {1072,807}},
+{ 865128, 2, {957,904}},
+{ 865176, 2, {1128,767}},
+{ 865200, 2, {1030,840}},
+{ 865215, 2, {1105,783}},
+{ 865230, 2, {955,906}},
+{ 865260, 2, {990,874}},
+{ 865280, 2, {1024,845}},
+{ 865317, 2, {969,893}},
+{ 865368, 2, {952,909}},
+{ 865375, 2, {989,875}},
+{ 865389, 2, {1029,841}},
+{ 865392, 2, {968,894}},
+{ 865416, 2, {1011,856}},
+{ 865488, 2, {949,912}},
+{ 865504, 2, {1184,731}},
+{ 865524, 2, {948,913}},
+{ 865536, 2, {966,896}},
+{ 865592, 2, {1066,812}},
+{ 865620, 2, {945,916}},
+{ 865640, 2, {1139,760}},
+{ 865648, 2, {944,917}},
+{ 865650, 2, {995,870}},
+{ 865674, 2, {943,918}},
+{ 865683, 2, {1057,819}},
+{ 865690, 2, {1043,830}},
+{ 865725, 2, {1275,679}},
+{ 865728, 2, {1002,864}},
+{ 865740, 2, {940,921}},
+{ 865774, 2, {938,923}},
+{ 865800, 2, {936,925}},
+{ 865824, 2, {933,928}},
+{ 865830, 2, {931,930}},
+{ 865896, 2, {993,872}},
+{ 865908, 2, {1077,804}},
+{ 865920, 2, {960,902}},
+{ 865970, 2, {973,890}},
+{ 865975, 2, {1175,737}},
+{ 865980, 2, {1020,849}},
+{ 865998, 2, {1106,783}},
+{ 866016, 2, {992,873}},
+{ 866020, 2, {1007,860}},
+{ 866052, 2, {972,891}},
+{ 866075, 2, {1225,707}},
+{ 866112, 2, {1041,832}},
+{ 866145, 2, {1095,791}},
+{ 866250, 2, {990,875}},
+{ 866304, 2, {1024,846}},
+{ 866360, 2, {968,895}},
+{ 866400, 2, {950,912}},
+{ 866404, 2, {1067,812}},
+{ 866415, 2, {979,885}},
+{ 866484, 2, {1017,852}},
+{ 866565, 2, {945,917}},
+{ 866592, 2, {944,918}},
+{ 866604, 2, {1028,843}},
+{ 866640, 2, {942,920}},
+{ 866656, 2, {1022,848}},
+{ 866700, 2, {963,900}},
+{ 866723, 2, {1573,551}},
+{ 866730, 2, {1002,865}},
+{ 866740, 2, {1057,820}},
+{ 866745, 2, {935,927}},
+{ 866762, 2, {962,901}},
+{ 866775, 2, {975,889}},
+{ 866800, 2, {985,880}},
+{ 866844, 2, {1089,796}},
+{ 866875, 2, {1387,625}},
+{ 866880, 2, {960,903}},
+{ 866915, 2, {1085,799}},
+{ 866916, 2, {1047,828}},
+{ 866932, 2, {1037,836}},
+{ 866936, 2, {959,904}},
+{ 866943, 2, {973,891}},
+{ 867000, 2, {1000,867}},
+{ 867009, 2, {1419,611}},
+{ 867027, 2, {1007,861}},
+{ 867100, 2, {1150,754}},
+{ 867104, 2, {1106,784}},
+{ 867132, 2, {999,868}},
+{ 867150, 2, {1025,846}},
+{ 867160, 2, {1064,815}},
+{ 867204, 2, {981,884}},
+{ 867210, 2, {1055,822}},
+{ 867300, 2, {980,885}},
+{ 867312, 2, {951,912}},
+{ 867328, 2, {968,896}},
+{ 867350, 2, {950,913}},
+{ 867360, 2, {1040,834}},
+{ 867420, 2, {948,915}},
+{ 867504, 2, {1023,848}},
+{ 867560, 2, {943,920}},
+{ 867564, 2, {1044,831}},
+{ 867570, 2, {1195,726}},
+{ 867588, 2, {1101,788}},
+{ 867620, 2, {940,923}},
+{ 867636, 2, {939,924}},
+{ 867640, 2, {995,872}},
+{ 867650, 2, {938,925}},
+{ 867664, 2, {976,889}},
+{ 867672, 2, {936,927}},
+{ 867680, 2, {935,928}},
+{ 867776, 2, {1043,832}},
+{ 867792, 2, {1074,808}},
+{ 867825, 2, {1015,855}},
+{ 867867, 2, {1001,867}},
+{ 867888, 2, {984,882}},
+{ 867900, 2, {1052,825}},
+{ 867969, 2, {1037,837}},
+{ 867984, 2, {1014,856}},
+{ 867996, 2, {972,893}},
+{ 868000, 2, {992,875}},
+{ 868020, 2, {1020,851}},
+{ 868032, 2, {1056,822}},
+{ 868095, 2, {955,909}},
+{ 868131, 2, {999,869}},
+{ 868140, 2, {954,910}},
+{ 868175, 2, {1025,847}},
+{ 868205, 2, {1235,703}},
+{ 868210, 2, {1099,790}},
+{ 868231, 2, {1363,637}},
+{ 868275, 2, {1135,765}},
+{ 868284, 2, {1068,813}},
+{ 868296, 2, {968,897}},
+{ 868320, 2, {1005,864}},
+{ 868329, 2, {1253,693}},
+{ 868335, 2, {949,915}},
+{ 868344, 2, {1119,776}},
+{ 868380, 2, {1059,820}},
+{ 868400, 2, {1040,835}},
+{ 868428, 2, {946,918}},
+{ 868434, 2, {966,899}},
+{ 868452, 2, {988,879}},
+{ 868464, 2, {978,888}},
+{ 868476, 2, {1029,844}},
+{ 868500, 2, {965,900}},
+{ 868530, 2, {1105,786}},
+{ 868595, 2, {1079,805}},
+{ 868608, 2, {936,928}},
+{ 868635, 2, {995,873}},
+{ 868640, 2, {976,890}},
+{ 868668, 2, {1137,764}},
+{ 868680, 2, {1016,855}},
+{ 868700, 2, {1022,850}},
+{ 868725, 2, {975,891}},
+{ 868770, 2, {985,882}},
+{ 868775, 2, {1121,775}},
+{ 868800, 2, {960,905}},
+{ 868840, 2, {1015,856}},
+{ 868842, 2, {1027,846}},
+{ 868945, 2, {1295,671}},
+{ 868956, 2, {957,908}},
+{ 868992, 2, {992,876}},
+{ 868995, 2, {1107,785}},
+{ 869000, 2, {1000,869}},
+{ 869004, 2, {956,909}},
+{ 869022, 2, {1026,847}},
+{ 869085, 2, {1085,801}},
+{ 869120, 2, {970,896}},
+{ 869176, 2, {952,913}},
+{ 869200, 2, {1025,848}},
+{ 869253, 2, {1113,781}},
+{ 869275, 2, {1199,725}},
+{ 869288, 2, {1064,817}},
+{ 869312, 2, {1088,799}},
+{ 869316, 2, {948,917}},
+{ 869352, 2, {979,888}},
+{ 869364, 2, {1116,779}},
+{ 869375, 2, {1391,625}},
+{ 869376, 2, {1024,849}},
+{ 869400, 2, {945,920}},
+{ 869424, 2, {944,921}},
+{ 869440, 2, {988,880}},
+{ 869460, 2, {1011,860}},
+{ 869505, 2, {1029,845}},
+{ 869508, 2, {996,873}},
+{ 869550, 2, {935,930}},
+{ 869556, 2, {933,932}},
+{ 869616, 2, {976,891}},
+{ 869652, 2, {986,882}},
+{ 869660, 2, {1180,737}},
+{ 869700, 2, {975,892}},
+{ 869750, 2, {994,875}},
+{ 869760, 2, {960,906}},
+{ 869778, 2, {1053,826}},
+{ 869868, 2, {993,876}},
+{ 869890, 2, {1190,731}},
+{ 869940, 2, {972,895}},
+{ 869975, 2, {1513,575}},
+{ 869976, 2, {1032,843}},
+{ 870000, 2, {1000,870}},
+{ 870048, 2, {954,912}},
+{ 870064, 2, {1157,752}},
+{ 870100, 2, {1100,791}},
+{ 870111, 2, {1089,799}},
+{ 870129, 2, {999,871}},
+{ 870160, 2, {1168,745}},
+{ 870205, 2, {1081,805}},
+{ 870216, 2, {1077,808}},
+{ 870232, 2, {968,899}},
+{ 870240, 2, {980,888}},
+{ 870255, 2, {1165,747}},
+{ 870276, 2, {1041,836}},
+{ 870320, 2, {946,920}},
+{ 870366, 2, {966,901}},
+{ 870400, 2, {1024,850}},
+{ 870435, 2, {1035,841}},
+{ 870464, 2, {938,928}},
+{ 870468, 2, {1004,867}},
+{ 870480, 2, {936,930}},
+{ 870492, 2, {964,903}},
+{ 870552, 2, {963,904}},
+{ 870573, 2, {1023,851}},
+{ 870604, 2, {1003,868}},
+{ 870672, 2, {1067,816}},
+{ 870675, 2, {975,893}},
+{ 870688, 2, {1183,736}},
+{ 870732, 2, {1083,804}},
+{ 870750, 2, {1075,810}},
+{ 870840, 2, {984,885}},
+{ 870870, 2, {957,910}},
+{ 870888, 2, {1048,831}},
+{ 870896, 2, {1027,848}},
+{ 870912, 2, {972,896}},
+{ 870922, 2, {1066,817}},
+{ 870960, 2, {955,912}},
+{ 870968, 2, {1057,824}},
+{ 871000, 2, {1000,871}},
+{ 871002, 2, {954,913}},
+{ 871017, 2, {1121,777}},
+{ 871080, 2, {952,915}},
+{ 871104, 2, {1047,832}},
+{ 871116, 2, {951,916}},
+{ 871128, 2, {981,888}},
+{ 871131, 2, {969,899}},
+{ 871150, 2, {950,917}},
+{ 871155, 2, {1195,729}},
+{ 871182, 2, {949,918}},
+{ 871200, 2, {968,900}},
+{ 871220, 2, {980,889}},
+{ 871255, 2, {1085,803}},
+{ 871263, 2, {1403,621}},
+{ 871286, 2, {1081,806}},
+{ 871312, 2, {944,923}},
+{ 871332, 2, {943,924}},
+{ 871350, 2, {942,925}},
+{ 871380, 2, {940,927}},
+{ 871392, 2, {939,928}},
+{ 871416, 2, {936,931}},
+{ 871424, 2, {1024,851}},
+{ 871455, 2, {1417,615}},
+{ 871479, 2, {1113,783}},
+{ 871488, 2, {1068,816}},
+{ 871500, 2, {996,875}},
+{ 871515, 2, {963,905}},
+{ 871530, 2, {1045,834}},
+{ 871536, 2, {1072,813}},
+{ 871563, 2, {1029,847}},
+{ 871585, 2, {1219,715}},
+{ 871596, 2, {1023,852}},
+{ 871620, 2, {995,876}},
+{ 871624, 2, {986,884}},
+{ 871720, 2, {1147,760}},
+{ 871728, 2, {1016,858}},
+{ 871731, 2, {959,909}},
+{ 871794, 2, {1071,814}},
+{ 871808, 2, {973,896}},
+{ 871836, 2, {1164,749}},
+{ 871850, 2, {1175,742}},
+{ 871871, 2, {1001,871}},
+{ 871875, 2, {1125,775}},
+{ 871884, 2, {972,897}},
+{ 871906, 2, {1271,686}},
+{ 871920, 2, {1008,865}},
+{ 871968, 2, {992,879}},
+{ 871992, 2, {1101,792}},
+{ 872025, 2, {1057,825}},
+{ 872053, 2, {1369,637}},
+{ 872100, 2, {950,918}},
+{ 872109, 2, {981,889}},
+{ 872168, 2, {968,901}},
+{ 872235, 2, {945,923}},
+{ 872256, 2, {944,924}},
+{ 872275, 2, {943,925}},
+{ 872289, 2, {979,891}},
+{ 872300, 2, {1100,793}},
+{ 872316, 2, {1107,788}},
+{ 872320, 2, {940,928}},
+{ 872340, 2, {938,930}},
+{ 872360, 2, {965,904}},
+{ 872410, 2, {1030,847}},
+{ 872448, 2, {1024,852}},
+{ 872490, 2, {1145,762}},
+{ 872508, 2, {987,884}},
+{ 872544, 2, {976,894}},
+{ 872592, 2, {1029,848}},
+{ 872613, 2, {1197,729}},
+{ 872616, 2, {1059,824}},
+{ 872640, 2, {960,909}},
+{ 872690, 2, {959,910}},
+{ 872712, 2, {1054,828}},
+{ 872772, 2, {1028,849}},
+{ 872784, 2, {957,912}},
+{ 872820, 2, {1119,780}},
+{ 872850, 2, {1058,825}},
+{ 872865, 2, {1071,815}},
+{ 872872, 2, {1001,872}},
+{ 872910, 2, {954,915}},
+{ 872920, 2, {1112,785}},
+{ 872950, 2, {1027,850}},
+{ 872984, 2, {952,917}},
+{ 872991, 2, {1043,837}},
+{ 873000, 2, {970,900}},
+{ 873045, 2, {1115,783}},
+{ 873072, 2, {1032,846}},
+{ 873080, 2, {949,920}},
+{ 873103, 2, {1309,667}},
+{ 873108, 2, {948,921}},
+{ 873132, 2, {1131,772}},
+{ 873158, 2, {946,923}},
+{ 873180, 2, {945,924}},
+{ 873200, 2, {944,925}},
+{ 873216, 2, {1137,768}},
+{ 873243, 2, {1169,747}},
+{ 873252, 2, {1143,764}},
+{ 873264, 2, {966,904}},
+{ 873288, 2, {936,933}},
+{ 873300, 2, {1025,852}},
+{ 873345, 2, {1005,869}},
+{ 873348, 2, {1036,843}},
+{ 873440, 2, {1030,848}},
+{ 873504, 2, {1011,864}},
+{ 873520, 2, {976,895}},
+{ 873540, 2, {1035,844}},
+{ 873600, 2, {960,910}},
+{ 873664, 2, {1088,803}},
+{ 873680, 2, {1072,815}},
+{ 873705, 2, {1099,795}},
+{ 873744, 2, {1002,872}},
+{ 873747, 2, {1407,621}},
+{ 873750, 2, {1165,750}},
+{ 873810, 2, {1022,855}},
+{ 873824, 2, {1162,752}},
+{ 873828, 2, {972,899}},
+{ 873840, 2, {993,880}},
+{ 873852, 2, {1212,721}},
+{ 873873, 2, {1001,873}},
+{ 873936, 2, {952,918}},
+{ 873990, 2, {1053,830}},
+{ 874032, 2, {1048,834}},
+{ 874076, 2, {1007,868}},
+{ 874104, 2, {946,924}},
+{ 874125, 2, {945,925}},
+{ 874176, 2, {942,928}},
+{ 874212, 2, {1052,831}},
+{ 874230, 2, {966,905}},
+{ 874276, 2, {989,884}},
+{ 874290, 2, {965,906}},
+{ 874293, 2, {1343,651}},
+{ 874341, 2, {1269,689}},
+{ 874368, 2, {1012,864}},
+{ 874380, 2, {988,885}},
+{ 874404, 2, {963,908}},
+{ 874437, 2, {1311,667}},
+{ 874440, 2, {1041,840}},
+{ 874500, 2, {1060,825}},
+{ 874510, 2, {961,910}},
+{ 874524, 2, {1077,812}},
+{ 874530, 2, {1107,790}},
+{ 874552, 2, {1127,776}},
+{ 874575, 2, {975,897}},
+{ 874608, 2, {959,912}},
+{ 874620, 2, {1017,860}},
+{ 874640, 2, {1040,841}},
+{ 874650, 2, {1029,850}},
+{ 874665, 2, {1023,855}},
+{ 874680, 2, {985,888}},
+{ 874692, 2, {1068,819}},
+{ 874720, 2, {994,880}},
+{ 874740, 2, {956,915}},
+{ 874776, 2, {984,889}},
+{ 874788, 2, {1076,813}},
+{ 874800, 2, {972,900}},
+{ 874818, 2, {954,917}},
+{ 874830, 2, {1205,726}},
+{ 874874, 2, {1001,874}},
+{ 874920, 2, {951,920}},
+{ 874944, 2, {992,882}},
+{ 875000, 2, {1000,875}},
+{ 875050, 2, {946,925}},
+{ 875052, 2, {981,892}},
+{ 875064, 2, {1083,808}},
+{ 875075, 2, {1207,725}},
+{ 875080, 2, {1048,835}},
+{ 875088, 2, {944,927}},
+{ 875104, 2, {943,928}},
+{ 875124, 2, {999,876}},
+{ 875140, 2, {940,931}},
+{ 875148, 2, {939,932}},
+{ 875160, 2, {936,935}},
+{ 875292, 2, {1047,836}},
+{ 875310, 2, {978,895}},
+{ 875350, 2, {1025,854}},
+{ 875394, 2, {1118,783}},
+{ 875420, 2, {962,910}},
+{ 875472, 2, {976,897}},
+{ 875484, 2, {996,879}},
+{ 875520, 2, {960,912}},
+{ 875556, 2, {1089,804}},
+{ 875560, 2, {1060,826}},
+{ 875600, 2, {995,880}},
+{ 875679, 2, {1029,851}},
+{ 875688, 2, {1023,856}},
+{ 875700, 2, {973,900}},
+{ 875760, 2, {984,890}},
+{ 875800, 2, {1160,755}},
+{ 875875, 2, {1001,875}},
+{ 875925, 2, {1145,765}},
+{ 875976, 2, {969,904}},
+{ 876040, 2, {968,905}},
+{ 876090, 2, {1007,870}},
+{ 876148, 2, {1079,812}},
+{ 876150, 2, {990,885}},
+{ 876168, 2, {1032,849}},
+{ 876204, 2, {1026,854}},
+{ 876265, 2, {1037,845}},
+{ 876276, 2, {964,909}},
+{ 876288, 2, {978,896}},
+{ 876315, 2, {1243,705}},
+{ 876360, 2, {1005,872}},
+{ 876375, 2, {1025,855}},
+{ 876384, 2, {1074,816}},
+{ 876390, 2, {1115,786}},
+{ 876396, 2, {1101,796}},
+{ 876432, 2, {961,912}},
+{ 876456, 2, {987,888}},
+{ 876480, 2, {960,913}},
+{ 876492, 2, {1004,873}},
+{ 876512, 2, {1118,784}},
+{ 876525, 2, {975,899}},
+{ 876555, 2, {1161,755}},
+{ 876612, 2, {957,916}},
+{ 876645, 2, {1035,847}},
+{ 876690, 2, {955,918}},
+{ 876708, 2, {994,882}},
+{ 876720, 2, {1040,843}},
+{ 876744, 2, {972,902}},
+{ 876750, 2, {1002,875}},
+{ 876785, 2, {1435,611}},
+{ 876792, 2, {952,921}},
+{ 876850, 2, {950,923}},
+{ 876852, 2, {1059,828}},
+{ 876875, 2, {1403,625}},
+{ 876876, 2, {949,924}},
+{ 876900, 2, {948,925}},
+{ 876960, 2, {945,928}},
+{ 876990, 2, {943,930}},
+{ 877008, 2, {968,906}},
+{ 877020, 2, {940,933}},
+{ 877044, 2, {1113,788}},
+{ 877058, 2, {1027,854}},
+{ 877110, 2, {1014,865}},
+{ 877149, 2, {1053,833}},
+{ 877176, 2, {1048,837}},
+{ 877184, 2, {979,896}},
+{ 877185, 2, {965,909}},
+{ 877296, 2, {1119,784}},
+{ 877302, 2, {1037,846}},
+{ 877310, 2, {1057,830}},
+{ 877344, 2, {962,912}},
+{ 877400, 2, {1025,856}},
+{ 877404, 2, {1012,867}},
+{ 877415, 2, {1505,583}},
+{ 877448, 2, {1144,767}},
+{ 877455, 2, {1147,765}},
+{ 877485, 2, {959,915}},
+{ 877488, 2, {1086,808}},
+{ 877500, 2, {975,900}},
+{ 877536, 2, {1056,831}},
+{ 877548, 2, {1011,868}},
+{ 877560, 2, {1030,852}},
+{ 877590, 2, {995,882}},
+{ 877591, 2, {2431,361}},
+{ 877625, 2, {1003,875}},
+{ 877635, 2, {985,891}},
+{ 877656, 2, {1131,776}},
+{ 877668, 2, {1199,732}},
+{ 877680, 2, {954,920}},
+{ 877716, 2, {972,903}},
+{ 877725, 2, {1175,747}},
+{ 877743, 2, {1121,783}},
+{ 877764, 2, {1137,772}},
+{ 877772, 2, {1081,812}},
+{ 877800, 2, {950,924}},
+{ 877812, 2, {993,884}},
+{ 877825, 2, {949,925}},
+{ 877851, 2, {1107,793}},
+{ 877888, 2, {946,928}},
+{ 877920, 2, {944,930}},
+{ 877933, 2, {943,931}},
+{ 877968, 2, {938,936}},
+{ 877982, 2, {1054,833}},
+{ 877995, 2, {981,895}},
+{ 878010, 2, {1110,791}},
+{ 878031, 2, {1267,693}},
+{ 878040, 2, {1080,813}},
+{ 878075, 2, {1133,775}},
+{ 878080, 2, {980,896}},
+{ 878085, 2, {1027,855}},
+{ 878199, 2, {1349,651}},
+{ 878220, 2, {1020,861}},
+{ 878232, 2, {989,888}},
+{ 878256, 2, {963,912}},
+{ 878339, 2, {1037,847}},
+{ 878355, 2, {1179,745}},
+{ 878400, 2, {960,915}},
+{ 878409, 2, {1337,657}},
+{ 878445, 2, {1205,729}},
+{ 878475, 2, {975,901}},
+{ 878490, 2, {1135,774}},
+{ 878526, 2, {957,918}},
+{ 878592, 2, {1024,858}},
+{ 878600, 2, {955,920}},
+{ 878604, 2, {1041,844}},
+{ 878696, 2, {952,923}},
+{ 878712, 2, {984,893}},
+{ 878724, 2, {951,924}},
+{ 878787, 2, {1073,819}},
+{ 878796, 2, {948,927}},
+{ 878800, 2, {1040,845}},
+{ 878832, 2, {1077,816}},
+{ 878840, 2, {1016,865}},
+{ 878845, 2, {1045,841}},
+{ 878864, 2, {944,931}},
+{ 878904, 2, {939,936}},
+{ 878920, 2, {1022,860}},
+{ 878940, 2, {1028,855}},
+{ 878976, 2, {981,896}},
+{ 879000, 2, {1000,879}},
+{ 879088, 2, {1169,752}},
+{ 879120, 2, {990,888}},
+{ 879138, 2, {1014,867}},
+{ 879200, 2, {1099,800}},
+{ 879255, 2, {1053,835}},
+{ 879270, 2, {1106,795}},
+{ 879307, 2, {1573,559}},
+{ 879396, 2, {1083,812}},
+{ 879417, 2, {987,891}},
+{ 879424, 2, {1057,832}},
+{ 879450, 2, {975,902}},
+{ 879480, 2, {1047,840}},
+{ 879564, 2, {1036,849}},
+{ 879592, 2, {973,904}},
+{ 879660, 2, {972,905}},
+{ 879681, 2, {1159,759}},
+{ 879690, 2, {994,885}},
+{ 879696, 2, {984,894}},
+{ 879705, 2, {1017,865}},
+{ 879744, 2, {948,928}},
+{ 879780, 2, {946,930}},
+{ 879795, 2, {945,931}},
+{ 879840, 2, {940,936}},
+{ 879852, 2, {969,908}},
+{ 879870, 2, {1055,834}},
+{ 879903, 2, {1207,729}},
+{ 879912, 2, {968,909}},
+{ 879984, 2, {1008,873}},
+{ 880044, 2, {1243,708}},
+{ 880065, 2, {1107,795}},
+{ 880075, 2, {1175,749}},
+{ 880080, 2, {965,912}},
+{ 880092, 2, {1044,843}},
+{ 880110, 2, {990,889}},
+{ 880128, 2, {1146,768}},
+{ 880187, 2, {1127,781}},
+{ 880215, 2, {1245,707}},
+{ 880224, 2, {1038,848}},
+{ 880256, 2, {1058,832}},
+{ 880275, 2, {1067,825}},
+{ 880299, 2, {1099,801}},
+{ 880308, 2, {988,891}},
+{ 880320, 2, {960,917}},
+{ 880341, 2, {1133,777}},
+{ 880362, 2, {959,918}},
+{ 880380, 2, {1005,876}},
+{ 880400, 2, {1136,775}},
+{ 880404, 2, {987,892}},
+{ 880425, 2, {975,903}},
+{ 880440, 2, {957,920}},
+{ 880476, 2, {956,921}},
+{ 880498, 2, {986,893}},
+{ 880524, 2, {1052,837}},
+{ 880542, 2, {954,923}},
+{ 880555, 2, {1235,713}},
+{ 880590, 2, {985,894}},
+{ 880600, 2, {952,925}},
+{ 880640, 2, {1024,860}},
+{ 880672, 2, {949,928}},
+{ 880680, 2, {984,895}},
+{ 880704, 2, {1056,834}},
+{ 880726, 2, {946,931}},
+{ 880740, 2, {945,932}},
+{ 880752, 2, {944,933}},
+{ 880770, 2, {942,935}},
+{ 880785, 2, {1035,851}},
+{ 880800, 2, {1101,800}},
+{ 880824, 2, {1029,856}},
+{ 880840, 2, {1159,760}},
+{ 880860, 2, {1060,831}},
+{ 880872, 2, {1016,867}},
+{ 880896, 2, {992,888}},
+{ 880992, 2, {966,912}},
+{ 881020, 2, {980,899}},
+{ 881049, 2, {1131,779}},
+{ 881088, 2, {1059,832}},
+{ 881100, 2, {979,900}},
+{ 881125, 2, {1007,875}},
+{ 881144, 2, {1054,836}},
+{ 881172, 2, {1107,796}},
+{ 881181, 2, {1379,639}},
+{ 881184, 2, {1072,822}},
+{ 881199, 2, {989,891}},
+{ 881244, 2, {1076,819}},
+{ 881250, 2, {1175,750}},
+{ 881265, 2, {1155,763}},
+{ 881280, 2, {960,918}},
+{ 881314, 2, {1058,833}},
+{ 881328, 2, {976,903}},
+{ 881342, 2, {1067,826}},
+{ 881400, 2, {975,904}},
+{ 881450, 2, {1037,850}},
+{ 881452, 2, {1012,871}},
+{ 881460, 2, {996,885}},
+{ 881485, 2, {1457,605}},
+{ 881586, 2, {1139,774}},
+{ 881592, 2, {1011,872}},
+{ 881595, 2, {1233,715}},
+{ 881600, 2, {950,928}},
+{ 881608, 2, {1211,728}},
+{ 881664, 2, {984,896}},
+{ 881694, 2, {1098,803}},
+{ 881705, 2, {943,935}},
+{ 881712, 2, {942,936}},
+{ 881720, 2, {940,938}},
+{ 881760, 2, {1002,880}},
+{ 881772, 2, {1119,788}},
+{ 881784, 2, {993,888}},
+{ 881790, 2, {969,910}},
+{ 881820, 2, {1035,852}},
+{ 881840, 2, {1168,755}},
+{ 881875, 2, {1411,625}},
+{ 881888, 2, {992,889}},
+{ 881910, 2, {1195,738}},
+{ 881958, 2, {966,913}},
+{ 882000, 2, {980,900}},
+{ 882035, 2, {1015,869}},
+{ 882050, 2, {1150,767}},
+{ 882060, 2, {964,915}},
+{ 882080, 2, {1184,745}},
+{ 882096, 2, {1081,816}},
+{ 882108, 2, {963,916}},
+{ 882189, 2, {1197,737}},
+{ 882198, 2, {961,918}},
+{ 882280, 2, {959,920}},
+{ 882284, 2, {988,893}},
+{ 882300, 2, {1020,865}},
+{ 882312, 2, {1137,776}},
+{ 882360, 2, {1026,860}},
+{ 882396, 2, {1143,772}},
+{ 882420, 2, {955,924}},
+{ 882432, 2, {1149,768}},
+{ 882441, 2, {1127,783}},
+{ 882450, 2, {954,925}},
+{ 882453, 2, {1331,663}},
+{ 882504, 2, {952,927}},
+{ 882516, 2, {1004,879}},
+{ 882528, 2, {951,928}},
+{ 882560, 2, {985,896}},
+{ 882570, 2, {949,930}},
+{ 882588, 2, {948,931}},
+{ 882609, 2, {1113,793}},
+{ 882640, 2, {944,935}},
+{ 882648, 2, {943,936}},
+{ 882660, 2, {940,939}},
+{ 882672, 2, {994,888}},
+{ 882725, 2, {1139,775}},
+{ 882756, 2, {1017,868}},
+{ 882768, 2, {1041,848}},
+{ 882819, 2, {1211,729}},
+{ 882880, 2, {992,890}},
+{ 882882, 2, {1001,882}},
+{ 882895, 2, {1105,799}},
+{ 882900, 2, {981,900}},
+{ 882960, 2, {1040,849}},
+{ 882980, 2, {980,901}},
+{ 883008, 2, {1008,876}},
+{ 883035, 2, {1055,837}},
+{ 883050, 2, {1015,870}},
+{ 883071, 2, {963,917}},
+{ 883116, 2, {962,918}},
+{ 883125, 2, {1125,785}},
+{ 883140, 2, {1077,820}},
+{ 883190, 2, {1085,814}},
+{ 883200, 2, {960,920}},
+{ 883220, 2, {1027,860}},
+{ 883225, 2, {1225,721}},
+{ 883245, 2, {1111,795}},
+{ 883280, 2, {976,905}},
+{ 883300, 2, {1100,803}},
+{ 883311, 2, {957,923}},
+{ 883386, 2, {1026,861}},
+{ 883464, 2, {1048,843}},
+{ 883476, 2, {1012,873}},
+{ 883519, 2, {949,931}},
+{ 883548, 2, {972,909}},
+{ 883560, 2, {995,888}},
+{ 883568, 2, {1127,784}},
+{ 883575, 2, {945,935}},
+{ 883650, 2, {1075,822}},
+{ 883668, 2, {1047,844}},
+{ 883701, 2, {1079,819}},
+{ 883728, 2, {969,912}},
+{ 883775, 2, {1219,725}},
+{ 883779, 2, {1209,731}},
+{ 883872, 2, {992,891}},
+{ 883920, 2, {1016,870}},
+{ 883960, 2, {980,902}},
+{ 884000, 2, {1000,884}},
+{ 884037, 2, {979,903}},
+{ 884051, 2, {2023,437}},
+{ 884065, 2, {1015,871}},
+{ 884070, 2, {990,893}},
+{ 884112, 2, {978,904}},
+{ 884115, 2, {999,885}},
+{ 884120, 2, {961,920}},
+{ 884160, 2, {960,921}},
+{ 884184, 2, {1064,831}},
+{ 884208, 2, {1014,872}},
+{ 884247, 2, {1027,861}},
+{ 884256, 2, {976,906}},
+{ 884268, 2, {957,924}},
+{ 884340, 2, {1020,867}},
+{ 884352, 2, {987,896}},
+{ 884400, 2, {1005,880}},
+{ 884442, 2, {986,897}},
+{ 884450, 2, {950,931}},
+{ 884457, 2, {973,909}},
+{ 884464, 2, {1043,848}},
+{ 884484, 2, {948,933}},
+{ 884493, 2, {1107,799}},
+{ 884520, 2, {945,936}},
+{ 884640, 2, {970,912}},
+{ 884646, 2, {1003,882}},
+{ 884709, 2, {1057,837}},
+{ 884736, 2, {1024,864}},
+{ 884760, 2, {1010,876}},
+{ 884800, 2, {1106,800}},
+{ 884884, 2, {1001,884}},
+{ 884940, 2, {980,903}},
+{ 884976, 2, {1074,824}},
+{ 885000, 2, {1000,885}},
+{ 885003, 2, {1139,777}},
+{ 885040, 2, {962,920}},
+{ 885080, 2, {1015,872}},
+{ 885090, 2, {978,905}},
+{ 885105, 2, {1105,801}},
+{ 885108, 2, {1028,861}},
+{ 885204, 2, {1101,804}},
+{ 885248, 2, {988,896}},
+{ 885285, 2, {955,927}},
+{ 885300, 2, {975,908}},
+{ 885312, 2, {954,928}},
+{ 885324, 2, {1059,836}},
+{ 885360, 2, {952,930}},
+{ 885416, 2, {1141,776}},
+{ 885430, 2, {973,910}},
+{ 885444, 2, {996,889}},
+{ 885456, 2, {946,936}},
+{ 885472, 2, {944,938}},
+{ 885500, 2, {1012,875}},
+{ 885560, 2, {1048,845}},
+{ 885573, 2, {1053,841}},
+{ 885577, 2, {1519,583}},
+{ 885625, 2, {1417,625}},
+{ 885632, 2, {1088,814}},
+{ 885636, 2, {1011,876}},
+{ 885654, 2, {994,891}},
+{ 885720, 2, {968,915}},
+{ 885756, 2, {993,892}},
+{ 885760, 2, {1024,865}},
+{ 885780, 2, {1036,855}},
+{ 885825, 2, {1143,775}},
+{ 885856, 2, {992,893}},
+{ 885870, 2, {965,918}},
+{ 885885, 2, {1001,885}},
+{ 885948, 2, {1113,796}},
+{ 885960, 2, {963,920}},
+{ 886025, 2, {1525,581}},
+{ 886032, 2, {1008,879}},
+{ 886050, 2, {990,895}},
+{ 886075, 2, {1541,575}},
+{ 886080, 2, {960,923}},
+{ 886095, 2, {1015,873}},
+{ 886116, 2, {959,924}},
+{ 886144, 2, {989,896}},
+{ 886160, 2, {1007,880}},
+{ 886176, 2, {1086,816}},
+{ 886212, 2, {956,927}},
+{ 886230, 2, {1145,774}},
+{ 886236, 2, {988,897}},
+{ 886240, 2, {955,928}},
+{ 886248, 2, {1119,792}},
+{ 886312, 2, {952,931}},
+{ 886332, 2, {951,932}},
+{ 886356, 2, {1044,849}},
+{ 886380, 2, {948,935}},
+{ 886410, 2, {945,938}},
+{ 886414, 2, {986,899}},
+{ 886416, 2, {944,939}},
+{ 886440, 2, {996,890}},
+{ 886445, 2, {1085,817}},
+{ 886464, 2, {972,912}},
+{ 886500, 2, {985,900}},
+{ 886545, 2, {995,891}},
+{ 886550, 2, {1043,850}},
+{ 886578, 2, {1111,798}},
+{ 886584, 2, {984,901}},
+{ 886600, 2, {1100,806}},
+{ 886608, 2, {1048,846}},
+{ 886652, 2, {1003,884}},
+{ 886720, 2, {1088,815}},
+{ 886743, 2, {1287,689}},
+{ 886788, 2, {966,918}},
+{ 886824, 2, {981,904}},
+{ 886836, 2, {1052,843}},
+{ 886848, 2, {992,894}},
+{ 886860, 2, {1137,780}},
+{ 886890, 2, {1110,799}},
+{ 886912, 2, {1066,832}},
+{ 886932, 2, {1041,852}},
+{ 886950, 2, {1095,810}},
+{ 886968, 2, {1016,873}},
+{ 886977, 2, {1083,819}},
+{ 887028, 2, {1149,772}},
+{ 887040, 2, {960,924}},
+{ 887075, 2, {959,925}},
+{ 887112, 2, {999,888}},
+{ 887133, 2, {989,897}},
+{ 887145, 2, {1065,833}},
+{ 887184, 2, {976,909}},
+{ 887315, 2, {949,935}},
+{ 887376, 2, {973,912}},
+{ 887400, 2, {986,900}},
+{ 887436, 2, {972,913}},
+{ 887448, 2, {1077,824}},
+{ 887490, 2, {1026,865}},
+{ 887508, 2, {1068,831}},
+{ 887535, 2, {1089,815}},
+{ 887565, 2, {1185,749}},
+{ 887604, 2, {969,916}},
+{ 887607, 2, {1351,657}},
+{ 887616, 2, {1072,828}},
+{ 887656, 2, {968,917}},
+{ 887700, 2, {1076,825}},
+{ 887730, 2, {1165,762}},
+{ 887744, 2, {1067,832}},
+{ 887760, 2, {1080,822}},
+{ 887777, 2, {1331,667}},
+{ 887796, 2, {1084,819}},
+{ 887800, 2, {965,920}},
+{ 887805, 2, {981,905}},
+{ 887808, 2, {1024,867}},
+{ 887840, 2, {992,895}},
+{ 887844, 2, {964,921}},
+{ 887856, 2, {1047,848}},
+{ 887950, 2, {1075,826}},
+{ 887964, 2, {961,924}},
+{ 887978, 2, {1066,833}},
+{ 887992, 2, {1099,808}},
+{ 888000, 2, {960,925}},
+{ 888030, 2, {990,897}},
+{ 888060, 2, {1083,820}},
+{ 888096, 2, {957,928}},
+{ 888111, 2, {999,889}},
+{ 888118, 2, {1022,869}},
+{ 888125, 2, {1015,875}},
+{ 888132, 2, {1164,763}},
+{ 888150, 2, {955,930}},
+{ 888160, 2, {976,910}},
+{ 888174, 2, {954,931}},
+{ 888212, 2, {988,899}},
+{ 888216, 2, {952,933}},
+{ 888264, 2, {949,936}},
+{ 888300, 2, {945,940}},
+{ 888420, 2, {1005,884}},
+{ 888440, 2, {1064,835}},
+{ 888444, 2, {1044,851}},
+{ 888528, 2, {1038,856}},
+{ 888540, 2, {1004,885}},
+{ 888552, 2, {984,903}},
+{ 888576, 2, {1068,832}},
+{ 888615, 2, {1085,819}},
+{ 888624, 2, {968,918}},
+{ 888651, 2, {1219,729}},
+{ 888705, 2, {1135,783}},
+{ 888720, 2, {966,920}},
+{ 888732, 2, {1053,844}},
+{ 888800, 2, {1010,880}},
+{ 888811, 2, {1067,833}},
+{ 888888, 2, {962,924}},
+{ 888896, 2, {1088,817}},
+{ 888921, 2, {1107,803}},
+{ 888993, 2, {959,927}},
+{ 889000, 2, {1000,889}},
+{ 889005, 2, {1261,705}},
+{ 889056, 2, {1008,882}},
+{ 889075, 2, {1325,671}},
+{ 889110, 2, {999,890}},
+{ 889140, 2, {1015,876}},
+{ 889200, 2, {950,936}},
+{ 889248, 2, {944,942}},
+{ 889287, 2, {987,901}},
+{ 889290, 2, {1205,738}},
+{ 889295, 2, {1045,851}},
+{ 889296, 2, {1146,776}},
+{ 889350, 2, {1050,847}},
+{ 889380, 2, {972,915}},
+{ 889490, 2, {970,917}},
+{ 889530, 2, {995,894}},
+{ 889542, 2, {969,918}},
+{ 889548, 2, {1012,879}},
+{ 889560, 2, {1059,840}},
+{ 889608, 2, {1101,808}},
+{ 889616, 2, {1183,752}},
+{ 889644, 2, {1068,833}},
+{ 889680, 2, {1011,880}},
+{ 889713, 2, {1089,817}},
+{ 889720, 2, {1160,767}},
+{ 889728, 2, {993,896}},
+{ 889746, 2, {1037,858}},
+{ 889752, 2, {1048,849}},
+{ 889760, 2, {1072,830}},
+{ 889770, 2, {1115,798}},
+{ 889776, 2, {1002,888}},
+{ 889778, 2, {1058,841}},
+{ 889785, 2, {1053,845}},
+{ 889812, 2, {963,924}},
+{ 889824, 2, {992,897}},
+{ 889856, 2, {1024,869}},
+{ 889865, 2, {1615,551}},
+{ 889875, 2, {1017,875}},
+{ 889920, 2, {960,927}},
+{ 889952, 2, {959,928}},
+{ 890028, 2, {1107,804}},
+{ 890100, 2, {989,900}},
+{ 890120, 2, {952,935}},
+{ 890127, 2, {1393,639}},
+{ 890136, 2, {951,936}},
+{ 890145, 2, {1179,755}},
+{ 890162, 2, {949,938}},
+{ 890172, 2, {948,939}},
+{ 890175, 2, {975,913}},
+{ 890188, 2, {988,901}},
+{ 890208, 2, {1056,843}},
+{ 890295, 2, {973,915}},
+{ 890340, 2, {1045,852}},
+{ 890400, 2, {1050,848}},
+{ 890440, 2, {985,904}},
+{ 890460, 2, {970,918}},
+{ 890487, 2, {1161,767}},
+{ 890520, 2, {984,905}},
+{ 890568, 2, {1026,868}},
+{ 890624, 2, {994,896}},
+{ 890630, 2, {1054,845}},
+{ 890664, 2, {1003,888}},
+{ 890724, 2, {1119,796}},
+{ 890725, 2, {1025,869}},
+{ 890748, 2, {981,908}},
+{ 890766, 2, {1207,738}},
+{ 890775, 2, {963,925}},
+{ 890820, 2, {980,909}},
+{ 890832, 2, {1072,831}},
+{ 890883, 2, {1253,711}},
+{ 890890, 2, {979,910}},
+{ 890892, 2, {1017,876}},
+{ 890967, 2, {957,931}},
+{ 891033, 2, {1023,871}},
+{ 891072, 2, {952,936}},
+{ 891088, 2, {976,913}},
+{ 891096, 2, {1041,856}},
+{ 891100, 2, {950,938}},
+{ 891108, 2, {999,892}},
+{ 891135, 2, {945,943}},
+{ 891225, 2, {1165,765}},
+{ 891228, 2, {1131,788}},
+{ 891254, 2, {1079,826}},
+{ 891276, 2, {1028,867}},
+{ 891296, 2, {1211,736}},
+{ 891310, 2, {1070,833}},
+{ 891324, 2, {972,917}},
+{ 891405, 2, {1065,837}},
+{ 891408, 2, {1137,784}},
+{ 891420, 2, {996,895}},
+{ 891436, 2, {1027,868}},
+{ 891480, 2, {969,920}},
+{ 891504, 2, {984,906}},
+{ 891520, 2, {995,896}},
+{ 891528, 2, {968,921}},
+{ 891540, 2, {1143,780}},
+{ 891576, 2, {1044,854}},
+{ 891594, 2, {1026,869}},
+{ 891605, 2, {1247,715}},
+{ 891618, 2, {966,923}},
+{ 891624, 2, {1149,776}},
+{ 891648, 2, {1032,864}},
+{ 891660, 2, {965,924}},
+{ 891750, 2, {1025,870}},
+{ 891756, 2, {1077,828}},
+{ 891760, 2, {1136,785}},
+{ 891765, 2, {1043,855}},
+{ 891808, 2, {961,928}},
+{ 891820, 2, {1037,860}},
+{ 891825, 2, {1081,825}},
+{ 891837, 2, {1139,783}},
+{ 891870, 2, {959,930}},
+{ 891891, 2, {1001,891}},
+{ 891904, 2, {1024,871}},
+{ 891924, 2, {957,932}},
+{ 891936, 2, {978,912}},
+{ 891948, 2, {956,933}},
+{ 891990, 2, {954,935}},
+{ 891996, 2, {1036,861}},
+{ 892044, 2, {1047,852}},
+{ 892056, 2, {1023,872}},
+{ 892060, 2, {949,940}},
+{ 892080, 2, {945,944}},
+{ 892107, 2, {999,893}},
+{ 892110, 2, {1135,786}},
+{ 892143, 2, {1029,867}},
+{ 892160, 2, {1088,820}},
+{ 892164, 2, {988,903}},
+{ 892242, 2, {1066,837}},
+{ 892248, 2, {987,904}},
+{ 892255, 2, {1295,689}},
+{ 892320, 2, {1014,880}},
+{ 892375, 2, {1375,649}},
+{ 892392, 2, {1083,824}},
+{ 892410, 2, {985,906}},
+{ 892416, 2, {996,896}},
+{ 892440, 2, {1005,888}},
+{ 892500, 2, {1020,875}},
+{ 892530, 2, {1055,846}},
+{ 892551, 2, {1221,731}},
+{ 892620, 2, {1026,870}},
+{ 892665, 2, {1195,747}},
+{ 892680, 2, {1032,865}},
+{ 892736, 2, {962,928}},
+{ 892738, 2, {1054,847}},
+{ 892775, 2, {1025,871}},
+{ 892800, 2, {960,930}},
+{ 892808, 2, {1043,856}},
+{ 892848, 2, {979,912}},
+{ 892857, 2, {1037,861}},
+{ 892944, 2, {954,936}},
+{ 892980, 2, {990,902}},
+{ 893040, 2, {976,915}},
+{ 893064, 2, {1016,879}},
+{ 893095, 2, {1343,665}},
+{ 893100, 2, {975,916}},
+{ 893115, 2, {1115,801}},
+{ 893148, 2, {1052,849}},
+{ 893172, 2, {1029,868}},
+{ 893180, 2, {1207,740}},
+{ 893200, 2, {1015,880}},
+{ 893214, 2, {973,918}},
+{ 893240, 2, {1096,815}},
+{ 893244, 2, {1111,804}},
+{ 893282, 2, {1118,799}},
+{ 893376, 2, {1034,864}},
+{ 893403, 2, {1141,783}},
+{ 893412, 2, {996,897}},
+{ 893445, 2, {1005,889}},
+{ 893464, 2, {968,923}},
+{ 893475, 2, {1045,855}},
+{ 893490, 2, {1027,870}},
+{ 893550, 2, {966,925}},
+{ 893568, 2, {1074,832}},
+{ 893580, 2, {1060,843}},
+{ 893628, 2, {964,927}},
+{ 893646, 2, {1026,871}},
+{ 893664, 2, {963,928}},
+{ 893673, 2, {1003,891}},
+{ 893700, 2, {993,900}},
+{ 893711, 2, {1127,793}},
+{ 893724, 2, {1011,884}},
+{ 893739, 2, {1113,803}},
+{ 893750, 2, {1250,715}},
+{ 893760, 2, {960,931}},
+{ 893792, 2, {992,901}},
+{ 893796, 2, {1059,844}},
+{ 893800, 2, {1025,872}},
+{ 893809, 2, {1073,833}},
+{ 893880, 2, {955,936}},
+{ 893893, 2, {1001,893}},
+{ 893916, 2, {1068,837}},
+{ 893920, 2, {1184,755}},
+{ 893925, 2, {1233,725}},
+{ 893928, 2, {952,939}},
+{ 893940, 2, {951,940}},
+{ 893952, 2, {1024,873}},
+{ 893970, 2, {946,945}},
+{ 894000, 2, {1000,894}},
+{ 894010, 2, {1058,845}},
+{ 894012, 2, {1101,812}},
+{ 894048, 2, {1072,834}},
+{ 894075, 2, {975,917}},
+{ 894105, 2, {999,895}},
+{ 894156, 2, {1076,831}},
+{ 894201, 2, {1029,869}},
+{ 894216, 2, {1007,888}},
+{ 894240, 2, {972,920}},
+{ 894250, 2, {1022,875}},
+{ 894285, 2, {1071,835}},
+{ 894300, 2, {1084,825}},
+{ 894322, 2, {1166,767}},
+{ 894336, 2, {1088,822}},
+{ 894348, 2, {1014,882}},
+{ 894355, 2, {1111,805}},
+{ 894456, 2, {984,909}},
+{ 894465, 2, {1251,715}},
+{ 894504, 2, {1128,793}},
+{ 894520, 2, {1045,856}},
+{ 894544, 2, {1141,784}},
+{ 894555, 2, {965,927}},
+{ 894564, 2, {1004,891}},
+{ 894600, 2, {994,900}},
+{ 894640, 2, {1055,848}},
+{ 894660, 2, {962,930}},
+{ 894672, 2, {981,912}},
+{ 894691, 2, {961,931}},
+{ 894740, 2, {980,913}},
+{ 894744, 2, {1032,867}},
+{ 894784, 2, {992,902}},
+{ 894824, 2, {1064,841}},
+{ 894825, 2, {1025,873}},
+{ 894852, 2, {954,938}},
+{ 894864, 2, {1086,824}},
+{ 894912, 2, {948,944}},
+{ 894960, 2, {990,904}},
+{ 894976, 2, {1024,874}},
+{ 894992, 2, {976,917}},
+{ 895000, 2, {1000,895}},
+{ 895050, 2, {975,918}},
+{ 895104, 2, {999,896}},
+{ 895120, 2, {1072,835}},
+{ 895125, 2, {1023,875}},
+{ 895160, 2, {973,920}},
+{ 895200, 2, {1119,800}},
+{ 895212, 2, {972,921}},
+{ 895230, 2, {1015,882}},
+{ 895260, 2, {1041,860}},
+{ 895275, 2, {1035,865}},
+{ 895280, 2, {1178,760}},
+{ 895350, 2, {1175,762}},
+{ 895356, 2, {969,924}},
+{ 895365, 2, {985,909}},
+{ 895400, 2, {968,925}},
+{ 895440, 2, {984,910}},
+{ 895455, 2, {1005,891}},
+{ 895475, 2, {1075,833}},
+{ 895500, 2, {995,900}},
+{ 895520, 2, {965,928}},
+{ 895620, 2, {1012,885}},
+{ 895622, 2, {962,931}},
+{ 895680, 2, {960,933}},
+{ 895752, 2, {957,936}},
+{ 895776, 2, {992,903}},
+{ 895785, 2, {979,915}},
+{ 895850, 2, {950,943}},
+{ 895856, 2, {949,944}},
+{ 895860, 2, {948,945}},
+{ 895900, 2, {1054,850}},
+{ 895950, 2, {990,905}},
+{ 895956, 2, {1137,788}},
+{ 895968, 2, {976,918}},
+{ 896000, 2, {1000,896}},
+{ 896040, 2, {1048,855}},
+{ 896064, 2, {1077,832}},
+{ 896112, 2, {1008,889}},
+{ 896126, 2, {1058,847}},
+{ 896148, 2, {1023,876}},
+{ 896196, 2, {987,908}},
+{ 896220, 2, {1149,780}},
+{ 896232, 2, {1047,856}},
+{ 896250, 2, {1195,750}},
+{ 896259, 2, {1029,871}},
+{ 896280, 2, {970,924}},
+{ 896336, 2, {1057,848}},
+{ 896448, 2, {966,928}},
+{ 896460, 2, {1005,892}},
+{ 896525, 2, {1175,763}},
+{ 896535, 2, {1145,783}},
+{ 896544, 2, {1056,849}},
+{ 896550, 2, {1075,834}},
+{ 896553, 2, {963,931}},
+{ 896580, 2, {1020,879}},
+{ 896610, 2, {1045,858}},
+{ 896675, 2, {1157,775}},
+{ 896700, 2, {980,915}},
+{ 896724, 2, {1026,874}},
+{ 896784, 2, {952,942}},
+{ 896790, 2, {1002,895}},
+{ 896800, 2, {950,944}},
+{ 896805, 2, {949,945}},
+{ 896832, 2, {1038,864}},
+{ 896880, 2, {1010,888}},
+{ 896896, 2, {1001,896}},
+{ 896952, 2, {1064,843}},
+{ 896954, 2, {1054,851}},
+{ 896980, 2, {1043,860}},
+{ 897000, 2, {975,920}},
+{ 897024, 2, {1024,876}},
+{ 897028, 2, {1073,836}},
+{ 897039, 2, {1287,697}},
+{ 897085, 2, {1349,665}},
+{ 897120, 2, {1008,890}},
+{ 897156, 2, {972,923}},
+{ 897195, 2, {1391,645}},
+{ 897237, 2, {1007,891}},
+{ 897255, 2, {1143,785}},
+{ 897260, 2, {986,910}},
+{ 897264, 2, {1072,837}},
+{ 897288, 2, {1029,872}},
+{ 897336, 2, {968,927}},
+{ 897440, 2, {1136,790}},
+{ 897444, 2, {1028,873}},
+{ 897450, 2, {965,930}},
+{ 897480, 2, {1080,831}},
+{ 897512, 2, {1034,868}},
+{ 897516, 2, {963,932}},
+{ 897600, 2, {960,935}},
+{ 897624, 2, {959,936}},
+{ 897645, 2, {1245,721}},
+{ 897672, 2, {993,904}},
+{ 897684, 2, {956,939}},
+{ 897728, 2, {1079,832}},
+{ 897736, 2, {952,943}},
+{ 897744, 2, {951,944}},
+{ 897750, 2, {950,945}},
+{ 897754, 2, {949,946}},
+{ 897760, 2, {992,905}},
+{ 897768, 2, {1011,888}},
+{ 897792, 2, {1002,896}},
+{ 897820, 2, {1060,847}},
+{ 897840, 2, {1032,870}},
+{ 897890, 2, {1010,889}},
+{ 897897, 2, {1001,897}},
+{ 897900, 2, {1025,876}},
+{ 898032, 2, {1059,848}},
+{ 898040, 2, {1144,785}},
+{ 898092, 2, {988,909}},
+{ 898128, 2, {972,924}},
+{ 898150, 2, {1150,781}},
+{ 898212, 2, {1036,867}},
+{ 898225, 2, {1159,775}},
+{ 898320, 2, {985,912}},
+{ 898392, 2, {984,913}},
+{ 898416, 2, {1101,816}},
+{ 898450, 2, {1057,850}},
+{ 898464, 2, {1146,784}},
+{ 898535, 2, {961,935}},
+{ 898560, 2, {960,936}},
+{ 898596, 2, {981,916}},
+{ 898608, 2, {1158,776}},
+{ 898625, 2, {1027,875}},
+{ 898660, 2, {980,917}},
+{ 898700, 2, {950,946}},
+{ 898722, 2, {979,918}},
+{ 898752, 2, {992,906}},
+{ 898800, 2, {1050,856}},
+{ 898807, 2, {1079,833}},
+{ 898860, 2, {1055,852}},
+{ 898872, 2, {1032,871}},
+{ 898875, 2, {1125,799}},
+{ 898884, 2, {1044,861}},
+{ 898896, 2, {976,921}},
+{ 898909, 2, {2057,437}},
+{ 898989, 2, {1157,777}},
+{ 899000, 2, {1000,899}},
+{ 899028, 2, {1017,884}},
+{ 899052, 2, {973,924}},
+{ 899080, 2, {988,910}},
+{ 899100, 2, {972,925}},
+{ 899130, 2, {1230,731}},
+{ 899140, 2, {1220,737}},
+{ 899160, 2, {1016,885}},
+{ 899184, 2, {1048,858}},
+{ 899232, 2, {969,928}},
+{ 899262, 2, {1053,854}},
+{ 899300, 2, {1058,850}},
+{ 899304, 2, {1113,808}},
+{ 899360, 2, {1022,880}},
+{ 899388, 2, {996,903}},
+{ 899392, 2, {1081,832}},
+{ 899412, 2, {964,933}},
+{ 899415, 2, {1035,869}},
+{ 899424, 2, {1041,864}},
+{ 899460, 2, {1052,855}},
+{ 899470, 2, {962,935}},
+{ 899480, 2, {995,904}},
+{ 899496, 2, {961,936}},
+{ 899514, 2, {1062,847}},
+{ 899577, 2, {981,917}},
+{ 899580, 2, {957,940}},
+{ 899600, 2, {1040,865}},
+{ 899610, 2, {955,942}},
+{ 899640, 2, {952,945}},
+{ 899675, 2, {1325,679}},
+{ 899676, 2, {1119,804}},
+{ 899691, 2, {1003,897}},
+{ 899712, 2, {1056,852}},
+{ 899725, 2, {1241,725}},
+{ 899756, 2, {1331,676}},
+{ 899760, 2, {978,920}},
+{ 899775, 2, {1075,837}},
+{ 899899, 2, {1001,899}},
+{ 899925, 2, {975,923}},
+{ 899940, 2, {1060,849}},
+{ 899960, 2, {1192,755}},
+{ 899970, 2, {1145,786}},
+{ 899990, 2, {989,910}},
+{ 900025, 2, {973,925}},
+{ 900081, 2, {1099,819}},
+{ 900096, 2, {1024,879}},
+{ 900099, 2, {999,901}},
+{ 900116, 2, {1037,868}},
+{ 900135, 2, {1205,747}},
+{ 900144, 2, {987,912}},
+{ 900160, 2, {970,928}},
+{ 900240, 2, {968,930}},
+{ 900276, 2, {1131,796}},
+{ 900284, 2, {1036,869}},
+{ 900315, 2, {1053,855}},
+{ 900324, 2, {1068,843}},
+{ 900354, 2, {1261,714}},
+{ 900360, 2, {984,915}},
+{ 900372, 2, {1077,836}},
+{ 900375, 2, {1029,875}},
+{ 900405, 2, {963,935}},
+{ 900420, 2, {1047,860}},
+{ 900432, 2, {962,936}},
+{ 900473, 2, {1081,833}},
+{ 900480, 2, {960,938}},
+{ 900504, 2, {1137,792}},
+{ 900524, 2, {1156,779}},
+{ 900543, 2, {1159,777}},
+{ 900576, 2, {954,944}},
+{ 900588, 2, {1004,897}},
+{ 900592, 2, {952,946}},
+{ 900600, 2, {950,948}},
+{ 900612, 2, {1076,837}},
+{ 900614, 2, {1034,871}},
+{ 900680, 2, {979,920}},
+{ 900684, 2, {1143,788}},
+{ 900711, 2, {1071,841}},
+{ 900720, 2, {1080,834}},
+{ 900735, 2, {1133,795}},
+{ 900804, 2, {1084,831}},
+{ 900816, 2, {1149,784}},
+{ 900837, 2, {1267,711}},
+{ 900848, 2, {976,923}},
+{ 900864, 2, {1088,828}},
+{ 900900, 2, {975,924}},
+{ 900936, 2, {1032,873}},
+{ 900990, 2, {1065,846}},
+{ 901000, 2, {1000,901}},
+{ 901044, 2, {972,927}},
+{ 901065, 2, {1397,645}},
+{ 901098, 2, {999,902}},
+{ 901120, 2, {1024,880}},
+{ 901131, 2, {987,913}},
+{ 901152, 2, {1008,894}},
+{ 901175, 2, {1243,725}},
+{ 901180, 2, {1099,820}},
+{ 901208, 2, {968,931}},
+{ 901225, 2, {1175,767}},
+{ 901320, 2, {1015,888}},
+{ 901368, 2, {963,936}},
+{ 901380, 2, {996,905}},
+{ 901404, 2, {1022,882}},
+{ 901425, 2, {1275,707}},
+{ 901440, 2, {960,939}},
+{ 901460, 2, {959,940}},
+{ 901470, 2, {995,906}},
+{ 901520, 2, {955,944}},
+{ 901548, 2, {951,948}},
+{ 901550, 2, {950,949}},
+{ 901644, 2, {993,908}},
+{ 901692, 2, {1012,891}},
+{ 901710, 2, {1165,774}},
+{ 901728, 2, {992,909}},
+{ 901812, 2, {1011,892}},
+{ 901824, 2, {976,924}},
+{ 901901, 2, {1001,901}},
+{ 901945, 2, {1265,713}},
+{ 901968, 2, {989,912}},
+{ 901971, 2, {973,927}},
+{ 902000, 2, {1000,902}},
+{ 902016, 2, {972,928}},
+{ 902025, 2, {1055,855}},
+{ 902055, 2, {1065,847}},
+{ 902097, 2, {999,903}},
+{ 902132, 2, {1111,812}},
+{ 902160, 2, {1008,895}},
+{ 902205, 2, {1107,815}},
+{ 902268, 2, {1059,852}},
+{ 902272, 2, {1007,896}},
+{ 902280, 2, {1030,876}},
+{ 902286, 2, {1023,882}},
+{ 902328, 2, {984,917}},
+{ 902400, 2, {960,940}},
+{ 902405, 2, {1121,805}},
+{ 902451, 2, {957,943}},
+{ 902475, 2, {955,945}},
+{ 902520, 2, {981,920}},
+{ 902538, 2, {1102,819}},
+{ 902580, 2, {980,921}},
+{ 902615, 2, {1295,697}},
+{ 902700, 2, {1003,900}},
+{ 902720, 2, {992,910}},
+{ 902727, 2, {1127,801}},
+{ 902785, 2, {1105,817}},
+{ 902800, 2, {976,925}},
+{ 902820, 2, {1101,820}},
+{ 902825, 2, {1225,737}},
+{ 902880, 2, {990,912}},
+{ 902937, 2, {1387,651}},
+{ 902944, 2, {973,928}},
+{ 903000, 2, {1000,903}},
+{ 903040, 2, {1088,830}},
+{ 903070, 2, {970,931}},
+{ 903080, 2, {1055,856}},
+{ 903096, 2, {999,904}},
+{ 903108, 2, {969,932}},
+{ 903123, 2, {1079,837}},
+{ 903125, 2, {1445,625}},
+{ 903144, 2, {968,933}},
+{ 903150, 2, {1115,810}},
+{ 903168, 2, {1008,896}},
+{ 903210, 2, {966,935}},
+{ 903231, 2, {1239,729}},
+{ 903240, 2, {965,936}},
+{ 903279, 2, {1007,897}},
+{ 903312, 2, {984,918}},
+{ 903336, 2, {1064,849}},
+{ 903408, 2, {957,944}},
+{ 903420, 2, {956,945}},
+{ 903435, 2, {1469,615}},
+{ 903448, 2, {952,949}},
+{ 903474, 2, {1014,891}},
+{ 903526, 2, {1121,806}},
+{ 903552, 2, {1086,832}},
+{ 903588, 2, {1041,868}},
+{ 903612, 2, {1028,879}},
+{ 903650, 2, {1166,775}},
+{ 903669, 2, {1131,799}},
+{ 903696, 2, {1072,843}},
+{ 903716, 2, {1012,893}},
+{ 903735, 2, {1057,855}},
+{ 903750, 2, {1205,750}},
+{ 903756, 2, {1113,812}},
+{ 903760, 2, {1027,880}},
+{ 903870, 2, {990,913}},
+{ 903924, 2, {1071,844}},
+{ 903960, 2, {972,930}},
+{ 904020, 2, {988,915}},
+{ 904050, 2, {1025,882}},
+{ 904092, 2, {987,916}},
+{ 904095, 2, {999,905}},
+{ 904113, 2, {1017,889}},
+{ 904128, 2, {1088,831}},
+{ 904134, 2, {1133,798}},
+{ 904152, 2, {1119,808}},
+{ 904155, 2, {1185,763}},
+{ 904176, 2, {966,936}},
+{ 904200, 2, {1096,825}},
+{ 904230, 2, {985,918}},
+{ 904320, 2, {960,942}},
+{ 904332, 2, {1023,884}},
+{ 904365, 2, {957,945}},
+{ 904419, 2, {1107,817}},
+{ 904428, 2, {1036,873}},
+{ 904455, 2, {995,909}},
+{ 904470, 2, {1022,885}},
+{ 904500, 2, {1005,900}},
+{ 904540, 2, {980,923}},
+{ 904596, 2, {979,924}},
+{ 904608, 2, {1047,864}},
+{ 904617, 2, {1211,747}},
+{ 904650, 2, {978,925}},
+{ 904680, 2, {1077,840}},
+{ 904689, 2, {1241,729}},
+{ 904706, 2, {1003,902}},
+{ 904750, 2, {1034,875}},
+{ 904752, 2, {976,927}},
+{ 904792, 2, {1057,856}},
+{ 904797, 2, {1081,837}},
+{ 904800, 2, {975,928}},
+{ 904816, 2, {1067,848}},
+{ 904890, 2, {973,930}},
+{ 904904, 2, {1001,904}},
+{ 904932, 2, {972,931}},
+{ 904960, 2, {1010,896}},
+{ 904981, 2, {1127,803}},
+{ 904995, 2, {1071,845}},
+{ 905000, 2, {1000,905}},
+{ 905052, 2, {1137,796}},
+{ 905080, 2, {968,935}},
+{ 905136, 2, {1038,872}},
+{ 905148, 2, {986,918}},
+{ 905175, 2, {1215,745}},
+{ 905190, 2, {1055,858}},
+{ 905196, 2, {964,939}},
+{ 905200, 2, {1168,775}},
+{ 905216, 2, {1024,884}},
+{ 905220, 2, {963,940}},
+{ 905240, 2, {1060,854}},
+{ 905256, 2, {1016,891}},
+{ 905280, 2, {960,943}},
+{ 905296, 2, {959,944}},
+{ 905340, 2, {955,948}},
+{ 905346, 2, {954,949}},
+{ 905352, 2, {952,951}},
+{ 905364, 2, {996,909}},
+{ 905388, 2, {1083,836}},
+{ 905412, 2, {1149,788}},
+{ 905502, 2, {1014,893}},
+{ 905575, 2, {979,925}},
+{ 905576, 2, {1099,824}},
+{ 905580, 2, {1053,860}},
+{ 905616, 2, {993,912}},
+{ 905625, 2, {1035,875}},
+{ 905664, 2, {1068,848}},
+{ 905696, 2, {992,913}},
+{ 905709, 2, {1003,903}},
+{ 905730, 2, {1135,798}},
+{ 905772, 2, {1052,861}},
+{ 905808, 2, {1002,904}},
+{ 905814, 2, {1027,882}},
+{ 905840, 2, {1040,871}},
+{ 905850, 2, {990,915}},
+{ 905856, 2, {1011,896}},
+{ 905960, 2, {1160,781}},
+{ 906000, 2, {1000,906}},
+{ 906003, 2, {1379,657}},
+{ 906015, 2, {969,935}},
+{ 906059, 2, {1681,539}},
+{ 906066, 2, {987,918}},
+{ 906192, 2, {1008,899}},
+{ 906200, 2, {985,920}},
+{ 906255, 2, {959,945}},
+{ 906264, 2, {984,921}},
+{ 906280, 2, {1112,815}},
+{ 906290, 2, {1070,847}},
+{ 906300, 2, {954,950}},
+{ 906360, 2, {996,910}},
+{ 906395, 2, {1015,893}},
+{ 906400, 2, {1030,880}},
+{ 906444, 2, {981,924}},
+{ 906465, 2, {1335,679}},
+{ 906504, 2, {1059,856}},
+{ 906520, 2, {1048,865}},
+{ 906528, 2, {994,912}},
+{ 906576, 2, {1111,816}},
+{ 906598, 2, {1078,841}},
+{ 906612, 2, {1004,903}},
+{ 906633, 2, {1053,861}},
+{ 906660, 2, {1035,876}},
+{ 906675, 2, {1099,825}},
+{ 906685, 2, {1073,845}},
+{ 906732, 2, {1068,849}},
+{ 906741, 2, {1161,781}},
+{ 906752, 2, {1012,896}},
+{ 906775, 2, {1577,575}},
+{ 906780, 2, {1020,889}},
+{ 906810, 2, {1002,905}},
+{ 906870, 2, {1110,817}},
+{ 906876, 2, {972,933}},
+{ 906912, 2, {1072,846}},
+{ 906920, 2, {1106,820}},
+{ 906936, 2, {1219,744}},
+{ 906948, 2, {1062,854}},
+{ 906975, 2, {1251,725}},
+{ 906984, 2, {969,936}},
+{ 907025, 2, {1775,511}},
+{ 907068, 2, {1076,843}},
+{ 907088, 2, {1157,784}},
+{ 907092, 2, {999,908}},
+{ 907120, 2, {986,920}},
+{ 907128, 2, {1032,879}},
+{ 907137, 2, {1071,847}},
+{ 907144, 2, {1169,776}},
+{ 907164, 2, {1017,892}},
+{ 907166, 2, {962,943}},
+{ 907192, 2, {1144,793}},
+{ 907200, 2, {960,945}},
+{ 907224, 2, {1101,824}},
+{ 907236, 2, {957,948}},
+{ 907308, 2, {1084,837}},
+{ 907335, 2, {1269,715}},
+{ 907375, 2, {1037,875}},
+{ 907380, 2, {1065,852}},
+{ 907392, 2, {1088,834}},
+{ 907410, 2, {1015,894}},
+{ 907425, 2, {981,925}},
+{ 907440, 2, {995,912}},
+{ 907452, 2, {1092,831}},
+{ 907497, 2, {1159,783}},
+{ 907522, 2, {994,913}},
+{ 907530, 2, {1014,895}},
+{ 907536, 2, {1022,888}},
+{ 907584, 2, {978,928}},
+{ 907632, 2, {1146,792}},
+{ 907647, 2, {1369,663}},
+{ 907680, 2, {976,930}},
+{ 907725, 2, {975,931}},
+{ 907740, 2, {1107,820}},
+{ 907752, 2, {1041,872}},
+{ 907764, 2, {1012,897}},
+{ 907788, 2, {1212,749}},
+{ 907800, 2, {1020,890}},
+{ 907816, 2, {1118,812}},
+{ 907830, 2, {990,917}},
+{ 907872, 2, {1158,784}},
+{ 907902, 2, {989,918}},
+{ 907920, 2, {970,936}},
+{ 907970, 2, {1090,833}},
+{ 908010, 2, {1026,885}},
+{ 908019, 2, {1421,639}},
+{ 908145, 2, {961,945}},
+{ 908160, 2, {960,946}},
+{ 908193, 2, {957,949}},
+{ 908208, 2, {954,952}},
+{ 908232, 2, {984,923}},
+{ 908250, 2, {1038,875}},
+{ 908304, 2, {1016,894}},
+{ 908310, 2, {1105,822}},
+{ 908314, 2, {1007,902}},
+{ 908352, 2, {996,912}},
+{ 908362, 2, {1127,806}},
+{ 908424, 2, {1023,888}},
+{ 908460, 2, {980,927}},
+{ 908480, 2, {1088,835}},
+{ 908512, 2, {979,928}},
+{ 908520, 2, {1005,904}},
+{ 908523, 2, {1197,759}},
+{ 908544, 2, {1014,896}},
+{ 908600, 2, {1100,826}},
+{ 908616, 2, {1048,867}},
+{ 908628, 2, {1119,812}},
+{ 908656, 2, {976,931}},
+{ 908700, 2, {975,932}},
+{ 908765, 2, {1271,715}},
+{ 908796, 2, {1047,868}},
+{ 908820, 2, {972,935}},
+{ 908831, 2, {1073,847}},
+{ 908895, 2, {1027,885}},
+{ 908950, 2, {1225,742}},
+{ 908952, 2, {968,939}},
+{ 908988, 2, {1077,844}},
+{ 909000, 2, {1000,909}},
+{ 909020, 2, {1057,860}},
+{ 909030, 2, {965,942}},
+{ 909072, 2, {963,944}},
+{ 909084, 2, {1067,852}},
+{ 909090, 2, {962,945}},
+{ 909132, 2, {959,948}},
+{ 909135, 2, {1135,801}},
+{ 909150, 2, {957,950}},
+{ 909156, 2, {956,951}},
+{ 909160, 2, {955,952}},
+{ 909194, 2, {1573,578}},
+{ 909312, 2, {1024,888}},
+{ 909315, 2, {1089,835}},
+{ 909320, 2, {1016,895}},
+{ 909321, 2, {1007,903}},
+{ 909324, 2, {1044,871}},
+{ 909440, 2, {980,928}},
+{ 909450, 2, {1075,846}},
+{ 909496, 2, {1043,872}},
+{ 909510, 2, {994,915}},
+{ 909568, 2, {1088,836}},
+{ 909585, 2, {1189,765}},
+{ 909588, 2, {993,916}},
+{ 909600, 2, {1137,800}},
+{ 909636, 2, {1029,884}},
+{ 909664, 2, {992,917}},
+{ 909720, 2, {1064,855}},
+{ 909780, 2, {1028,885}},
+{ 909788, 2, {1012,899}},
+{ 909828, 2, {1143,796}},
+{ 909846, 2, {1162,783}},
+{ 909876, 2, {1243,732}},
+{ 909880, 2, {989,920}},
+{ 909900, 2, {1011,900}},
+{ 909909, 2, {1001,909}},
+{ 909948, 2, {988,921}},
+{ 910000, 2, {1000,910}},
+{ 910008, 2, {1149,792}},
+{ 910080, 2, {960,948}},
+{ 910128, 2, {1072,849}},
+{ 910140, 2, {985,924}},
+{ 910195, 2, {1045,871}},
+{ 910200, 2, {984,925}},
+{ 910215, 2, {1017,895}},
+{ 910224, 2, {1008,903}},
+{ 910260, 2, {1167,780}},
+{ 910350, 2, {1050,867}},
+{ 910368, 2, {981,928}},
+{ 910404, 2, {1089,836}},
+{ 910440, 2, {1080,843}},
+{ 910470, 2, {979,930}},
+{ 910525, 2, {1075,847}},
+{ 910539, 2, {1043,873}},
+{ 910590, 2, {1195,762}},
+{ 910600, 2, {1160,785}},
+{ 910602, 2, {1022,891}},
+{ 910608, 2, {976,933}},
+{ 910616, 2, {1127,808}},
+{ 910644, 2, {1036,879}},
+{ 910656, 2, {992,918}},
+{ 910672, 2, {1211,752}},
+{ 910728, 2, {973,936}},
+{ 910740, 2, {1059,860}},
+{ 910752, 2, {1074,848}},
+{ 910776, 2, {1096,831}},
+{ 910800, 2, {990,920}},
+{ 910803, 2, {1083,841}},
+{ 910845, 2, {1053,865}},
+{ 910860, 2, {969,940}},
+{ 910910, 2, {1001,910}},
+{ 910932, 2, {1133,804}},
+{ 910938, 2, {966,943}},
+{ 910960, 2, {965,944}},
+{ 910980, 2, {964,945}},
+{ 911001, 2, {987,923}},
+{ 911008, 2, {1162,784}},
+{ 911040, 2, {960,949}},
+{ 911050, 2, {959,950}},
+{ 911064, 2, {957,952}},
+{ 911070, 2, {955,954}},
+{ 911088, 2, {999,912}},
+{ 911183, 2, {1547,589}},
+{ 911200, 2, {1072,850}},
+{ 911218, 2, {1067,854}},
+{ 911225, 2, {1025,889}},
+{ 911240, 2, {1045,872}},
+{ 911250, 2, {1125,810}},
+{ 911340, 2, {996,915}},
+{ 911352, 2, {1016,897}},
+{ 911360, 2, {1024,890}},
+{ 911385, 2, {1161,785}},
+{ 911412, 2, {1044,873}},
+{ 911421, 2, {1071,851}},
+{ 911430, 2, {1066,855}},
+{ 911449, 2, {979,931}},
+{ 911493, 2, {1023,891}},
+{ 911520, 2, {1055,864}},
+{ 911586, 2, {1014,899}},
+{ 911625, 2, {975,935}},
+{ 911628, 2, {1101,828}},
+{ 911640, 2, {1065,856}},
+{ 911680, 2, {1036,880}},
+{ 911736, 2, {972,938}},
+{ 911760, 2, {1048,870}},
+{ 911772, 2, {1116,817}},
+{ 911812, 2, {1012,901}},
+{ 911856, 2, {968,942}},
+{ 911904, 2, {966,944}},
+{ 911916, 2, {1041,876}},
+{ 911925, 2, {965,945}},
+{ 911950, 2, {1150,793}},
+{ 911988, 2, {987,924}},
+{ 912000, 2, {960,950}},
+{ 912065, 2, {1133,805}},
+{ 912084, 2, {1052,867}},
+{ 912087, 2, {999,913}},
+{ 912114, 2, {1026,889}},
+{ 912135, 2, {1095,833}},
+{ 912168, 2, {984,927}},
+{ 912170, 2, {1099,830}},
+{ 912175, 2, {1177,775}},
+{ 912184, 2, {1253,728}},
+{ 912195, 2, {1165,783}},
+{ 912208, 2, {1136,803}},
+{ 912240, 2, {1008,905}},
+{ 912285, 2, {1045,873}},
+{ 912340, 2, {1210,754}},
+{ 912373, 2, {1309,697}},
+{ 912380, 2, {980,931}},
+{ 912384, 2, {1024,891}},
+{ 912450, 2, {1050,869}},
+{ 912485, 2, {1015,899}},
+{ 912492, 2, {994,918}},
+{ 912494, 2, {1121,814}},
+{ 912516, 2, {1023,892}},
+{ 912540, 2, {1005,908}},
+{ 912560, 2, {976,935}},
+{ 912576, 2, {1164,784}},
+{ 912600, 2, {975,936}},
+{ 912625, 2, {1043,875}},
+{ 912636, 2, {1004,909}},
+{ 912660, 2, {1060,861}},
+{ 912708, 2, {972,939}},
+{ 912730, 2, {1003,910}},
+{ 912800, 2, {1120,815}},
+{ 912824, 2, {968,943}},
+{ 912834, 2, {1079,846}},
+{ 912870, 2, {966,945}},
+{ 912900, 2, {1020,895}},
+{ 912912, 2, {988,924}},
+{ 912924, 2, {963,948}},
+{ 912950, 2, {961,950}},
+{ 912951, 2, {1053,867}},
+{ 912960, 2, {960,951}},
+{ 912968, 2, {959,952}},
+{ 912975, 2, {987,925}},
+{ 912984, 2, {1047,872}},
+{ 913000, 2, {1000,913}},
+{ 913095, 2, {985,927}},
+{ 913104, 2, {1119,816}},
+{ 913140, 2, {1026,890}},
+{ 913143, 2, {1239,737}},
+{ 913152, 2, {984,928}},
+{ 913185, 2, {1115,819}},
+{ 913248, 2, {1008,906}},
+{ 913275, 2, {1025,891}},
+{ 913296, 2, {1077,848}},
+{ 913311, 2, {981,931}},
+{ 913320, 2, {1032,885}},
+{ 913330, 2, {1045,874}},
+{ 913332, 2, {996,917}},
+{ 913344, 2, {1072,852}},
+{ 913410, 2, {995,918}},
+{ 913437, 2, {1253,729}},
+{ 913440, 2, {1038,880}},
+{ 913445, 2, {1081,845}},
+{ 913500, 2, {1015,900}},
+{ 913524, 2, {1076,849}},
+{ 913539, 2, {1023,893}},
+{ 913560, 2, {993,920}},
+{ 913605, 2, {1155,791}},
+{ 913614, 2, {1014,901}},
+{ 913632, 2, {992,921}},
+{ 913680, 2, {972,940}},
+{ 913710, 2, {1145,798}},
+{ 913725, 2, {1179,775}},
+{ 913752, 2, {1029,888}},
+{ 913767, 2, {969,943}},
+{ 913770, 2, {990,923}},
+{ 913812, 2, {1084,843}},
+{ 913824, 2, {1002,912}},
+{ 913836, 2, {966,946}},
+{ 913848, 2, {1131,808}},
+{ 913880, 2, {1240,737}},
+{ 913900, 2, {962,950}},
+{ 913920, 2, {960,952}},
+{ 913941, 2, {1141,801}},
+{ 913944, 2, {1011,904}},
+{ 913965, 2, {1417,645}},
+{ 914004, 2, {1053,868}},
+{ 914052, 2, {1083,844}},
+{ 914064, 2, {1096,834}},
+{ 914080, 2, {985,928}},
+{ 914085, 2, {999,915}},
+{ 914100, 2, {1100,831}},
+{ 914109, 2, {1501,609}},
+{ 914112, 2, {1058,864}},
+{ 914144, 2, {1078,848}},
+{ 914148, 2, {1137,804}},
+{ 914160, 2, {1040,879}},
+{ 914175, 2, {1195,765}},
+{ 914225, 2, {1261,725}},
+{ 914292, 2, {981,932}},
+{ 914340, 2, {980,933}},
+{ 914368, 2, {1099,832}},
+{ 914375, 2, {1045,875}},
+{ 914430, 2, {978,935}},
+{ 914432, 2, {1024,893}},
+{ 914438, 2, {1333,686}},
+{ 914480, 2, {994,920}},
+{ 914515, 2, {1015,901}},
+{ 914529, 2, {1177,777}},
+{ 914550, 2, {975,938}},
+{ 914604, 2, {1149,796}},
+{ 914620, 2, {973,940}},
+{ 914634, 2, {1037,882}},
+{ 914640, 2, {1030,888}},
+{ 914641, 2, {1729,529}},
+{ 914736, 2, {969,944}},
+{ 914760, 2, {968,945}},
+{ 914820, 2, {965,948}},
+{ 914825, 2, {989,925}},
+{ 914868, 2, {1161,788}},
+{ 914872, 2, {961,952}},
+{ 914886, 2, {959,954}},
+{ 914892, 2, {957,956}},
+{ 914904, 2, {1048,873}},
+{ 914928, 2, {1167,784}},
+{ 914940, 2, {1020,897}},
+{ 914976, 2, {1059,864}},
+{ 914992, 2, {1079,848}},
+{ 915000, 2, {1000,915}},
+{ 915057, 2, {1027,891}},
+{ 915075, 2, {1225,747}},
+{ 915084, 2, {999,916}},
+{ 915120, 2, {984,930}},
+{ 915135, 2, {1083,845}},
+{ 915160, 2, {1096,835}},
+{ 915201, 2, {1393,657}},
+{ 915300, 2, {1017,900}},
+{ 915306, 2, {1147,798}},
+{ 915325, 2, {1025,893}},
+{ 915327, 2, {1169,783}},
+{ 915400, 2, {995,920}},
+{ 915408, 2, {978,936}},
+{ 915420, 2, {1045,876}},
+{ 915456, 2, {1024,894}},
+{ 915488, 2, {976,938}},
+{ 915530, 2, {1015,902}},
+{ 915552, 2, {1056,867}},
+{ 915600, 2, {1050,872}},
+{ 915607, 2, {1081,847}},
+{ 915616, 2, {992,923}},
+{ 915670, 2, {1030,889}},
+{ 915680, 2, {970,944}},
+{ 915690, 2, {1165,786}},
+{ 915705, 2, {969,945}},
+{ 915712, 2, {1022,896}},
+{ 915750, 2, {990,925}},
+{ 915824, 2, {962,952}},
+{ 915840, 2, {960,954}},
+{ 915858, 2, {1241,738}},
+{ 915876, 2, {988,927}},
+{ 915900, 2, {1065,860}},
+{ 915915, 2, {1001,915}},
+{ 915936, 2, {987,928}},
+{ 915948, 2, {1028,891}},
+{ 916032, 2, {1101,832}},
+{ 916050, 2, {985,930}},
+{ 916080, 2, {1041,880}},
+{ 916083, 2, {999,917}},
+{ 916104, 2, {984,931}},
+{ 916110, 2, {1053,870}},
+{ 916218, 2, {1026,893}},
+{ 916272, 2, {1008,909}},
+{ 916300, 2, {980,935}},
+{ 916344, 2, {979,936}},
+{ 916350, 2, {1025,894}},
+{ 916370, 2, {1007,910}},
+{ 916464, 2, {976,939}},
+{ 916480, 2, {1024,895}},
+{ 916487, 2, {1859,493}},
+{ 916496, 2, {1169,784}},
+{ 916500, 2, {975,940}},
+{ 916515, 2, {1095,837}},
+{ 916530, 2, {1115,822}},
+{ 916560, 2, {1005,912}},
+{ 916575, 2, {1111,825}},
+{ 916596, 2, {972,943}},
+{ 916608, 2, {992,924}},
+{ 916650, 2, {970,945}},
+{ 916656, 2, {1014,904}},
+{ 916708, 2, {1037,884}},
+{ 916734, 2, {966,949}},
+{ 916764, 2, {964,951}},
+{ 916776, 2, {963,952}},
+{ 916800, 2, {960,955}},
+{ 916839, 2, {1029,891}},
+{ 916860, 2, {1036,885}},
+{ 916875, 2, {1125,815}},
+{ 916880, 2, {1168,785}},
+{ 916895, 2, {1139,805}},
+{ 916920, 2, {1080,849}},
+{ 917000, 2, {1000,917}},
+{ 917056, 2, {1246,736}},
+{ 917059, 2, {1331,689}},
+{ 917112, 2, {1113,824}},
+{ 917136, 2, {1158,792}},
+{ 917145, 2, {1145,801}},
+{ 917150, 2, {1079,850}},
+{ 917163, 2, {1053,871}},
+{ 917172, 2, {1047,876}},
+{ 917184, 2, {1088,843}},
+{ 917190, 2, {1161,790}},
+{ 917235, 2, {981,935}},
+{ 917252, 2, {1148,799}},
+{ 917280, 2, {980,936}},
+{ 917286, 2, {1058,867}},
+{ 917301, 2, {1083,847}},
+{ 917316, 2, {996,921}},
+{ 917320, 2, {1207,760}},
+{ 917325, 2, {1215,755}},
+{ 917352, 2, {1096,837}},
+{ 917378, 2, {1078,851}},
+{ 917415, 2, {1073,855}},
+{ 917424, 2, {1104,831}},
+{ 917448, 2, {1016,903}},
+{ 917525, 2, {1225,749}},
+{ 917532, 2, {993,924}},
+{ 917560, 2, {1015,904}},
+{ 917565, 2, {1005,913}},
+{ 917568, 2, {972,944}},
+{ 917580, 2, {1119,820}},
+{ 917600, 2, {992,925}},
+{ 917604, 2, {1077,852}},
+{ 917670, 2, {1014,905}},
+{ 917675, 2, {1175,781}},
+{ 917676, 2, {1044,879}},
+{ 917686, 2, {1111,826}},
+{ 917700, 2, {966,950}},
+{ 917785, 2, {1517,605}},
+{ 917792, 2, {989,928}},
+{ 917840, 2, {1043,880}},
+{ 917850, 2, {1055,870}},
+{ 917868, 2, {1029,892}},
+{ 917910, 2, {987,930}},
+{ 917966, 2, {986,931}},
+{ 917988, 2, {1011,908}},
+{ 918000, 2, {1000,918}},
+{ 918008, 2, {1183,776}},
+{ 918050, 2, {1075,854}},
+{ 918072, 2, {984,933}},
+{ 918099, 2, {1121,819}},
+{ 918125, 2, {1469,625}},
+{ 918192, 2, {1034,888}},
+{ 918210, 2, {1205,762}},
+{ 918216, 2, {981,936}},
+{ 918225, 2, {1113,825}},
+{ 918270, 2, {1026,895}},
+{ 918302, 2, {979,938}},
+{ 918340, 2, {1241,740}},
+{ 918372, 2, {1092,841}},
+{ 918384, 2, {1007,912}},
+{ 918396, 2, {1052,873}},
+{ 918400, 2, {1025,896}},
+{ 918480, 2, {1032,890}},
+{ 918512, 2, {973,944}},
+{ 918528, 2, {1024,897}},
+{ 918540, 2, {972,945}},
+{ 918561, 2, {1411,651}},
+{ 918585, 2, {1233,745}},
+{ 918612, 2, {969,948}},
+{ 918632, 2, {968,949}},
+{ 918660, 2, {1004,915}},
+{ 918680, 2, {965,952}},
+{ 918687, 2, {1067,861}},
+{ 918696, 2, {1137,808}},
+{ 918720, 2, {960,957}},
+{ 918810, 2, {1107,830}},
+{ 918850, 2, {1081,850}},
+{ 918918, 2, {1001,918}},
+{ 918925, 2, {1475,623}},
+{ 918972, 2, {1143,804}},
+{ 919020, 2, {1020,901}},
+{ 919080, 2, {999,920}},
+{ 919116, 2, {1089,844}},
+{ 919125, 2, {1075,855}},
+{ 919126, 2, {1219,754}},
+{ 919200, 2, {1149,800}},
+{ 919212, 2, {1059,868}},
+{ 919220, 2, {1121,820}},
+{ 919240, 2, {980,938}},
+{ 919275, 2, {1275,721}},
+{ 919344, 2, {1074,856}},
+{ 919350, 2, {1135,810}},
+{ 919360, 2, {1040,884}},
+{ 919368, 2, {1017,904}},
+{ 919380, 2, {995,924}},
+{ 919392, 2, {976,942}},
+{ 919425, 2, {975,943}},
+{ 919450, 2, {994,925}},
+{ 919480, 2, {1016,905}},
+{ 919485, 2, {973,945}},
+{ 919512, 2, {972,946}},
+{ 919548, 2, {1068,861}},
+{ 919555, 2, {1505,611}},
+{ 919560, 2, {970,948}},
+{ 919584, 2, {992,927}},
+{ 919590, 2, {1015,906}},
+{ 919596, 2, {1167,788}},
+{ 919632, 2, {966,952}},
+{ 919665, 2, {963,955}},
+{ 919677, 2, {961,957}},
+{ 919770, 2, {989,930}},
+{ 919776, 2, {1056,871}},
+{ 919800, 2, {1022,900}},
+{ 919815, 2, {1157,795}},
+{ 919863, 2, {1099,837}},
+{ 919880, 2, {1160,793}},
+{ 919884, 2, {987,932}},
+{ 919908, 2, {1012,909}},
+{ 919960, 2, {1055,872}},
+{ 919980, 2, {1076,855}},
+{ 919996, 2, {1133,812}},
+{ 920025, 2, {1175,783}},
+{ 920040, 2, {984,935}},
+{ 920115, 2, {1035,889}},
+{ 920160, 2, {1065,864}},
+{ 920192, 2, {1027,896}},
+{ 920205, 2, {1089,845}},
+{ 920220, 2, {980,939}},
+{ 920227, 2, {1309,703}},
+{ 920244, 2, {1041,884}},
+{ 920260, 2, {979,940}},
+{ 920316, 2, {1084,849}},
+{ 920322, 2, {1026,897}},
+{ 920360, 2, {1064,865}},
+{ 920385, 2, {1017,905}},
+{ 920400, 2, {975,944}},
+{ 920436, 2, {1101,836}},
+{ 920448, 2, {1088,846}},
+{ 920496, 2, {1016,906}},
+{ 920556, 2, {1092,843}},
+{ 920568, 2, {968,951}},
+{ 920580, 2, {1005,916}},
+{ 920610, 2, {965,954}},
+{ 920628, 2, {963,956}},
+{ 920634, 2, {962,957}},
+{ 920640, 2, {960,959}},
+{ 920673, 2, {1161,793}},
+{ 920724, 2, {1164,791}},
+{ 920736, 2, {1104,834}},
+{ 920754, 2, {1003,918}},
+{ 920759, 2, {989,931}},
+{ 920856, 2, {1037,888}},
+{ 920920, 2, {1001,920}},
+{ 920928, 2, {1086,848}},
+{ 921000, 2, {1000,921}},
+{ 921015, 2, {1055,873}},
+{ 921060, 2, {1020,903}},
+{ 921120, 2, {1010,912}},
+{ 921140, 2, {1060,869}},
+{ 921192, 2, {1048,879}},
+{ 921250, 2, {1250,737}},
+{ 921272, 2, {1102,836}},
+{ 921294, 2, {1034,891}},
+{ 921300, 2, {996,925}},
+{ 921360, 2, {1047,880}},
+{ 921375, 2, {975,945}},
+{ 921466, 2, {1079,854}},
+{ 921504, 2, {993,928}},
+{ 921557, 2, {1183,779}},
+{ 921570, 2, {1105,834}},
+{ 921576, 2, {1032,893}},
+{ 921580, 2, {1180,781}},
+{ 921585, 2, {1005,917}},
+{ 921633, 2, {1083,851}},
+{ 921690, 2, {990,931}},
+{ 921704, 2, {1057,872}},
+{ 921723, 2, {1023,901}},
+{ 921744, 2, {1038,888}},
+{ 921804, 2, {988,933}},
+{ 921825, 2, {1205,765}},
+{ 921840, 2, {1002,920}},
+{ 921888, 2, {1056,873}},
+{ 921910, 2, {986,935}},
+{ 921912, 2, {1077,856}},
+{ 921928, 2, {1141,808}},
+{ 921960, 2, {985,936}},
+{ 921984, 2, {1029,896}},
+{ 922032, 2, {1011,912}},
+{ 922056, 2, {1119,824}},
+{ 922064, 2, {1144,806}},
+{ 922077, 2, {999,923}},
+{ 922116, 2, {1028,897}},
+{ 922140, 2, {981,940}},
+{ 922185, 2, {1035,891}},
+{ 922208, 2, {1253,736}},
+{ 922229, 2, {1421,649}},
+{ 922250, 2, {1054,875}},
+{ 922320, 2, {976,945}},
+{ 922336, 2, {1184,779}},
+{ 922350, 2, {975,946}},
+{ 922355, 2, {1387,665}},
+{ 922365, 2, {995,927}},
+{ 922374, 2, {1026,899}},
+{ 922376, 2, {1267,728}},
+{ 922404, 2, {973,948}},
+{ 922428, 2, {972,949}},
+{ 922432, 2, {994,928}},
+{ 922488, 2, {969,952}},
+{ 922500, 2, {1025,900}},
+{ 922530, 2, {966,955}},
+{ 922545, 2, {1079,855}},
+{ 922548, 2, {964,957}},
+{ 922560, 2, {961,960}},
+{ 922590, 2, {1005,918}},
+{ 922608, 2, {1032,894}},
+{ 922624, 2, {1024,901}},
+{ 922625, 2, {1375,671}},
+{ 922635, 2, {1015,909}},
+{ 922716, 2, {1083,852}},
+{ 922720, 2, {1168,790}},
+{ 922752, 2, {1068,864}},
+{ 922760, 2, {1003,920}},
+{ 922761, 2, {1057,873}},
+{ 922878, 2, {1062,869}},
+{ 922880, 2, {1030,896}},
+{ 922896, 2, {986,936}},
+{ 922925, 2, {1273,725}},
+{ 922944, 2, {1012,912}},
+{ 922992, 2, {984,938}},
+{ 922995, 2, {1161,795}},
+{ 923000, 2, {1000,923}},
+{ 923013, 2, {1029,897}},
+{ 923055, 2, {1043,885}},
+{ 923076, 2, {999,924}},
+{ 923100, 2, {1020,905}},
+{ 923220, 2, {1035,892}},
+{ 923230, 2, {1090,847}},
+{ 923232, 2, {978,944}},
+{ 923244, 2, {1137,812}},
+{ 923260, 2, {1060,871}},
+{ 923286, 2, {1157,798}},
+{ 923292, 2, {996,927}},
+{ 923335, 2, {1085,851}},
+{ 923360, 2, {995,928}},
+{ 923400, 2, {972,950}},
+{ 923436, 2, {1017,908}},
+{ 923448, 2, {1059,872}},
+{ 923450, 2, {1150,803}},
+{ 923472, 2, {968,954}},
+{ 923517, 2, {963,959}},
+{ 923520, 2, {962,960}},
+{ 923525, 2, {1025,901}},
+{ 923544, 2, {1016,909}},
+{ 923550, 2, {1175,786}},
+{ 923552, 2, {992,931}},
+{ 923640, 2, {1032,895}},
+{ 923643, 2, {1267,729}},
+{ 923648, 2, {1024,902}},
+{ 923712, 2, {1088,849}},
+{ 923780, 2, {988,935}},
+{ 923796, 2, {1149,804}},
+{ 923800, 2, {1192,775}},
+{ 923832, 2, {987,936}},
+{ 923923, 2, {1001,923}},
+{ 923928, 2, {1096,843}},
+{ 923940, 2, {1044,885}},
+{ 923967, 2, {1037,891}},
+{ 923976, 2, {984,939}},
+{ 924000, 2, {1000,924}},
+{ 924027, 2, {1131,817}},
+{ 924048, 2, {1104,837}},
+{ 924075, 2, {999,925}},
+{ 924140, 2, {980,943}},
+{ 924156, 2, {1161,796}},
+{ 924176, 2, {979,944}},
+{ 924180, 2, {1055,876}},
+{ 924255, 2, {1035,893}},
+{ 924264, 2, {1167,792}},
+{ 924288, 2, {996,928}},
+{ 924300, 2, {975,948}},
+{ 924324, 2, {1173,788}},
+{ 924336, 2, {1008,917}},
+{ 924345, 2, {1107,835}},
+{ 924350, 2, {973,950}},
+{ 924352, 2, {1111,832}},
+{ 924372, 2, {972,951}},
+{ 924408, 2, {1041,888}},
+{ 924420, 2, {994,930}},
+{ 924440, 2, {968,955}},
+{ 924462, 2, {966,957}},
+{ 924480, 2, {963,960}},
+{ 924528, 2, {1122,824}},
+{ 924600, 2, {1005,920}},
+{ 924616, 2, {1064,869}},
+{ 924630, 2, {1110,833}},
+{ 924638, 2, {1166,793}},
+{ 924672, 2, {1024,903}},
+{ 924684, 2, {1004,921}},
+{ 924708, 2, {1052,879}},
+{ 924715, 2, {989,935}},
+{ 924756, 2, {1212,763}},
+{ 924768, 2, {988,936}},
+{ 924792, 2, {1023,904}},
+{ 924800, 2, {1088,850}},
+{ 924840, 2, {1101,840}},
+{ 924875, 2, {1057,875}},
+{ 924885, 2, {1105,837}},
+{ 924924, 2, {1001,924}},
+{ 924930, 2, {1195,774}},
+{ 924960, 2, {984,940}},
+{ 925000, 2, {1000,925}},
+{ 925002, 2, {1062,871}},
+{ 925056, 2, {1056,876}},
+{ 925071, 2, {1029,899}},
+{ 925100, 2, {1100,841}},
+{ 925106, 2, {1183,782}},
+{ 925148, 2, {1036,893}},
+{ 925155, 2, {979,945}},
+{ 925221, 2, {1219,759}},
+{ 925248, 2, {976,948}},
+{ 925275, 2, {975,949}},
+{ 925288, 2, {1066,868}},
+{ 925344, 2, {972,952}},
+{ 925350, 2, {995,930}},
+{ 925380, 2, {970,954}},
+{ 925452, 2, {1026,902}},
+{ 925463, 2, {1111,833}},
+{ 925476, 2, {993,932}},
+{ 925485, 2, {1065,869}},
+{ 925515, 2, {1179,785}},
+{ 925536, 2, {992,933}},
+{ 925548, 2, {1047,884}},
+{ 925575, 2, {1025,903}},
+{ 925600, 2, {1040,890}},
+{ 925650, 2, {990,935}},
+{ 925665, 2, {1313,705}},
+{ 925680, 2, {1015,912}},
+{ 925704, 2, {989,936}},
+{ 925722, 2, {1106,837}},
+{ 925750, 2, {1058,875}},
+{ 925764, 2, {1236,749}},
+{ 925840, 2, {1136,815}},
+{ 925888, 2, {1088,851}},
+{ 925925, 2, {1001,925}},
+{ 925956, 2, {1068,867}},
+{ 925968, 2, {1146,808}},
+{ 925980, 2, {1012,915}},
+{ 926016, 2, {1092,848}},
+{ 926064, 2, {981,944}},
+{ 926076, 2, {1011,916}},
+{ 926100, 2, {980,945}},
+{ 926120, 2, {1096,845}},
+{ 926156, 2, {1067,868}},
+{ 926170, 2, {1010,917}},
+{ 926220, 2, {1077,860}},
+{ 926224, 2, {976,949}},
+{ 926275, 2, {1675,553}},
+{ 926289, 2, {1131,819}},
+{ 926296, 2, {973,952}},
+{ 926325, 2, {1035,895}},
+{ 926354, 2, {1027,902}},
+{ 926364, 2, {969,956}},
+{ 926370, 2, {1095,846}},
+{ 926376, 2, {968,957}},
+{ 926400, 2, {965,960}},
+{ 926415, 2, {1071,865}},
+{ 926436, 2, {1076,861}},
+{ 926440, 2, {1007,920}},
+{ 926464, 2, {1034,896}},
+{ 926478, 2, {1026,903}},
+{ 926497, 2, {1573,589}},
+{ 926532, 2, {1119,828}},
+{ 926541, 2, {1337,693}},
+{ 926600, 2, {1025,904}},
+{ 926640, 2, {990,936}},
+{ 926695, 2, {1015,913}},
+{ 926720, 2, {1024,905}},
+{ 926739, 2, {1089,851}},
+{ 926772, 2, {1003,924}},
+{ 926820, 2, {1084,855}},
+{ 926835, 2, {1261,735}},
+{ 926850, 2, {1002,925}},
+{ 926900, 2, {1150,806}},
+{ 926928, 2, {984,942}},
+{ 926976, 2, {1088,852}},
+{ 927000, 2, {1000,927}},
+{ 927010, 2, {1190,779}},
+{ 927048, 2, {1083,856}},
+{ 927072, 2, {999,928}},
+{ 927080, 2, {980,946}},
+{ 927108, 2, {1092,849}},
+{ 927129, 2, {1029,901}},
+{ 927146, 2, {1139,814}},
+{ 927180, 2, {1010,918}},
+{ 927200, 2, {976,950}},
+{ 927216, 2, {1096,846}},
+{ 927276, 2, {996,931}},
+{ 927280, 2, {1072,865}},
+{ 927300, 2, {1100,843}},
+{ 927360, 2, {966,960}},
+{ 927381, 2, {1027,903}},
+{ 927396, 2, {1108,837}},
+{ 927420, 2, {1066,870}},
+{ 927450, 2, {1145,810}},
+{ 927465, 2, {1095,847}},
+{ 927472, 2, {1183,784}},
+{ 927480, 2, {1048,885}},
+{ 927504, 2, {1017,912}},
+{ 927520, 2, {992,935}},
+{ 927615, 2, {1005,923}},
+{ 927639, 2, {1161,799}},
+{ 927675, 2, {1085,855}},
+{ 927684, 2, {1059,876}},
+{ 927707, 2, {1331,697}},
+{ 927732, 2, {988,939}},
+{ 927744, 2, {1024,906}},
+{ 927775, 2, {1003,925}},
+{ 927780, 2, {987,940}},
+{ 927792, 2, {1137,816}},
+{ 927828, 2, {1089,852}},
+{ 927855, 2, {1185,783}},
+{ 927870, 2, {985,942}},
+{ 927927, 2, {1001,927}},
+{ 927936, 2, {1074,864}},
+{ 927940, 2, {1079,860}},
+{ 927960, 2, {1045,888}},
+{ 927979, 2, {2873,323}},
+{ 928017, 2, {1273,729}},
+{ 928070, 2, {1210,767}},
+{ 928092, 2, {979,948}},
+{ 928109, 2, {1457,637}},
+{ 928116, 2, {1044,889}},
+{ 928158, 2, {1029,902}},
+{ 928176, 2, {976,951}},
+{ 928200, 2, {975,952}},
+{ 928224, 2, {1056,879}},
+{ 928242, 2, {973,954}},
+{ 928256, 2, {1036,896}},
+{ 928260, 2, {972,955}},
+{ 928270, 2, {1043,890}},
+{ 928284, 2, {1028,903}},
+{ 928312, 2, {968,959}},
+{ 928326, 2, {966,961}},
+{ 928332, 2, {964,963}},
+{ 928368, 2, {1008,921}},
+{ 928392, 2, {1149,808}},
+{ 928400, 2, {1055,880}},
+{ 928464, 2, {1104,841}},
+{ 928512, 2, {992,936}},
+{ 928520, 2, {1112,835}},
+{ 928530, 2, {1026,905}},
+{ 928572, 2, {1041,892}},
+{ 928620, 2, {990,938}},
+{ 928648, 2, {1127,824}},
+{ 928650, 2, {1025,906}},
+{ 928680, 2, {1065,872}},
+{ 928719, 2, {1431,649}},
+{ 928872, 2, {1064,873}},
+{ 928884, 2, {1023,908}},
+{ 928928, 2, {1001,928}},
+{ 928932, 2, {1167,796}},
+{ 929010, 2, {1038,895}},
+{ 929016, 2, {1012,918}},
+{ 929019, 2, {1079,861}},
+{ 929052, 2, {1179,788}},
+{ 929160, 2, {1044,890}},
+{ 929214, 2, {1083,858}},
+{ 929225, 2, {1199,775}},
+{ 929244, 2, {1101,844}},
+{ 929268, 2, {996,933}},
+{ 929280, 2, {968,960}},
+{ 929292, 2, {966,962}},
+{ 929295, 2, {965,963}},
+{ 929305, 2, {1105,841}},
+{ 929313, 2, {1043,891}},
+{ 929424, 2, {1072,867}},
+{ 929425, 2, {1175,791}},
+{ 929440, 2, {1184,785}},
+{ 929448, 2, {993,936}},
+{ 929475, 2, {1215,765}},
+{ 929500, 2, {1100,845}},
+{ 929565, 2, {1135,819}},
+{ 929600, 2, {1120,830}},
+{ 929616, 2, {1086,856}},
+{ 929628, 2, {1054,882}},
+{ 929640, 2, {1016,915}},
+{ 929670, 2, {1165,798}},
+{ 929736, 2, {1047,888}},
+{ 929760, 2, {1040,894}},
+{ 929775, 2, {1127,825}},
+{ 929798, 2, {986,943}},
+{ 929832, 2, {1032,901}},
+{ 929840, 2, {985,944}},
+{ 929856, 2, {1002,928}},
+{ 929880, 2, {984,945}},
+{ 929885, 2, {1537,605}},
+{ 929910, 2, {1115,834}},
+{ 929936, 2, {1064,874}},
+{ 929988, 2, {981,948}},
+{ 930000, 2, {1000,930}},
+{ 930020, 2, {980,949}},
+{ 930048, 2, {1038,896}},
+{ 930050, 2, {979,950}},
+{ 930069, 2, {999,931}},
+{ 930120, 2, {1011,920}},
+{ 930150, 2, {975,954}},
+{ 930160, 2, {1057,880}},
+{ 930176, 2, {1118,832}},
+{ 930189, 2, {1037,897}},
+{ 930204, 2, {972,957}},
+{ 930216, 2, {1029,904}},
+{ 930230, 2, {970,959}},
+{ 930240, 2, {969,960}},
+{ 930248, 2, {968,961}},
+{ 930291, 2, {1073,867}},
+{ 930384, 2, {994,936}},
+{ 930465, 2, {1035,899}},
+{ 930468, 2, {1007,924}},
+{ 930496, 2, {992,938}},
+{ 930504, 2, {1096,849}},
+{ 930510, 2, {1055,882}},
+{ 930528, 2, {1077,864}},
+{ 930672, 2, {1104,843}},
+{ 930699, 2, {1071,869}},
+{ 930708, 2, {1004,927}},
+{ 930744, 2, {1112,837}},
+{ 930800, 2, {1040,895}},
+{ 930816, 2, {1024,909}},
+{ 930825, 2, {985,945}},
+{ 930864, 2, {984,946}},
+{ 930915, 2, {1233,755}},
+{ 930930, 2, {1001,930}},
+{ 931008, 2, {1119,832}},
+{ 931020, 2, {1052,885}},
+{ 931056, 2, {978,952}},
+{ 931068, 2, {999,932}},
+{ 931095, 2, {1045,891}},
+{ 931104, 2, {976,954}},
+{ 931190, 2, {1102,845}},
+{ 931200, 2, {970,960}},
+{ 931209, 2, {969,961}},
+{ 931216, 2, {968,962}},
+{ 931260, 2, {996,935}},
+{ 931294, 2, {1118,833}},
+{ 931315, 2, {1435,649}},
+{ 931320, 2, {995,936}},
+{ 931380, 2, {1083,860}},
+{ 931385, 2, {1157,805}},
+{ 931392, 2, {1008,924}},
+{ 931475, 2, {1007,925}},
+{ 931480, 2, {1160,803}},
+{ 931488, 2, {992,939}},
+{ 931500, 2, {1035,900}},
+{ 931545, 2, {1143,815}},
+{ 931568, 2, {1072,869}},
+{ 931572, 2, {1017,916}},
+{ 931581, 2, {1113,837}},
+{ 931623, 2, {1199,777}},
+{ 931634, 2, {1034,901}},
+{ 931672, 2, {1016,917}},
+{ 931684, 2, {988,943}},
+{ 931700, 2, {1100,847}},
+{ 931725, 2, {1025,909}},
+{ 931728, 2, {987,944}},
+{ 931736, 2, {1054,884}},
+{ 931740, 2, {1060,879}},
+{ 931770, 2, {986,945}},
+{ 931775, 2, {1175,793}},
+{ 931840, 2, {1024,910}},
+{ 931896, 2, {1032,903}},
+{ 931905, 2, {1053,885}},
+{ 931920, 2, {1059,880}},
+{ 931944, 2, {1131,824}},
+{ 931952, 2, {1099,848}},
+{ 931980, 2, {980,951}},
+{ 931995, 2, {1251,745}},
+{ 932008, 2, {979,952}},
+{ 932052, 2, {1012,921}},
+{ 932064, 2, {1022,912}},
+{ 932080, 2, {976,955}},
+{ 932100, 2, {975,956}},
+{ 932148, 2, {972,959}},
+{ 932184, 2, {968,963}},
+{ 932190, 2, {966,965}},
+{ 932217, 2, {1353,689}},
+{ 932283, 2, {1161,803}},
+{ 932292, 2, {1044,893}},
+{ 932340, 2, {1137,820}},
+{ 932360, 2, {1144,815}},
+{ 932364, 2, {1068,873}},
+{ 932400, 2, {1008,925}},
+{ 932480, 2, {992,940}},
+{ 932505, 2, {1245,749}},
+{ 932512, 2, {1267,736}},
+{ 932535, 2, {1035,901}},
+{ 932589, 2, {1017,917}},
+{ 932640, 2, {1005,928}},
+{ 932670, 2, {1205,774}},
+{ 932688, 2, {1016,918}},
+{ 932715, 2, {987,945}},
+{ 932736, 2, {1041,896}},
+{ 932790, 2, {1003,930}},
+{ 932841, 2, {1071,871}},
+{ 932880, 2, {1014,920}},
+{ 932892, 2, {1076,867}},
+{ 932940, 2, {1065,876}},
+{ 932970, 2, {1135,822}},
+{ 932976, 2, {1023,912}},
+{ 932988, 2, {1149,812}},
+{ 932995, 2, {1159,805}},
+{ 933000, 2, {1000,933}},
+{ 933075, 2, {975,957}},
+{ 933086, 2, {1022,913}},
+{ 933120, 2, {972,960}},
+{ 933165, 2, {1165,801}},
+{ 933185, 2, {1045,893}},
+{ 933240, 2, {1010,924}},
+{ 933255, 2, {1115,837}},
+{ 933300, 2, {1020,915}},
+{ 933317, 2, {1309,713}},
+{ 933324, 2, {1084,861}},
+{ 933394, 2, {1102,847}},
+{ 933420, 2, {993,940}},
+{ 933436, 2, {1036,901}},
+{ 933444, 2, {1161,804}},
+{ 933450, 2, {1050,889}},
+{ 933504, 2, {1056,884}},
+{ 933510, 2, {1073,870}},
+{ 933570, 2, {990,943}},
+{ 933597, 2, {1421,657}},
+{ 933600, 2, {1167,800}},
+{ 933625, 2, {1067,875}},
+{ 933648, 2, {1101,848}},
+{ 933660, 2, {988,945}},
+{ 933708, 2, {1173,796}},
+{ 933768, 2, {1048,891}},
+{ 933780, 2, {985,948}},
+{ 933793, 2, {1003,931}},
+{ 933800, 2, {1015,920}},
+{ 933816, 2, {984,949}},
+{ 933849, 2, {1281,729}},
+{ 933888, 2, {1024,912}},
+{ 933900, 2, {1100,849}},
+{ 933912, 2, {981,952}},
+{ 933924, 2, {1047,892}},
+{ 933960, 2, {1032,905}},
+{ 933966, 2, {979,954}},
+{ 933980, 2, {1139,820}},
+{ 933984, 2, {1081,864}},
+{ 933990, 2, {978,955}},
+{ 934032, 2, {976,957}},
+{ 934044, 2, {1108,843}},
+{ 934065, 2, {999,935}},
+{ 934076, 2, {1012,923}},
+{ 934080, 2, {973,960}},
+{ 934092, 2, {972,961}},
+{ 934116, 2, {969,964}},
+{ 934120, 2, {968,965}},
+{ 934150, 2, {1099,850}},
+{ 934154, 2, {1159,806}},
+{ 934164, 2, {1011,924}},
+{ 934175, 2, {1075,869}},
+{ 934218, 2, {1207,774}},
+{ 934230, 2, {1045,894}},
+{ 934308, 2, {1107,844}},
+{ 934332, 2, {1029,908}},
+{ 934360, 2, {994,940}},
+{ 934375, 2, {1495,625}},
+{ 934380, 2, {1044,895}},
+{ 934416, 2, {1008,927}},
+{ 934452, 2, {1028,909}},
+{ 934464, 2, {992,942}},
+{ 934472, 2, {1036,902}},
+{ 934479, 2, {1141,819}},
+{ 934496, 2, {1007,928}},
+{ 934528, 2, {1043,896}},
+{ 934560, 2, {990,944}},
+{ 934570, 2, {1027,910}},
+{ 934605, 2, {989,945}},
+{ 934626, 2, {1078,867}},
+{ 934675, 2, {1225,763}},
+{ 934692, 2, {1067,876}},
+{ 934725, 2, {1133,825}},
+{ 934743, 2, {1311,713}},
+{ 934800, 2, {984,950}},
+{ 934830, 2, {1105,846}},
+{ 934836, 2, {1077,868}},
+{ 934857, 2, {1197,781}},
+{ 934912, 2, {1024,913}},
+{ 934960, 2, {1040,899}},
+{ 934992, 2, {1032,906}},
+{ 935000, 2, {1000,935}},
+{ 935018, 2, {1363,686}},
+{ 935025, 2, {975,959}},
+{ 935064, 2, {972,962}},
+{ 935088, 2, {968,966}},
+{ 935130, 2, {1022,915}},
+{ 935136, 2, {1146,816}},
+{ 935200, 2, {1120,835}},
+{ 935244, 2, {996,939}},
+{ 935250, 2, {1075,870}},
+{ 935253, 2, {1269,737}},
+{ 935256, 2, {1064,879}},
+{ 935272, 2, {1058,884}},
+{ 935340, 2, {1020,917}},
+{ 935360, 2, {1184,790}},
+{ 935374, 2, {1037,902}},
+{ 935410, 2, {1127,830}},
+{ 935415, 2, {1107,845}},
+{ 935425, 2, {1207,775}},
+{ 935445, 2, {1057,885}},
+{ 935456, 2, {992,943}},
+{ 935484, 2, {1119,836}},
+{ 935508, 2, {1036,903}},
+{ 935620, 2, {1141,820}},
+{ 935640, 2, {1017,920}},
+{ 935655, 2, {1005,931}},
+{ 935662, 2, {1261,742}},
+{ 935664, 2, {1158,808}},
+{ 935676, 2, {987,948}},
+{ 935680, 2, {1088,860}},
+{ 935685, 2, {1195,783}},
+{ 935693, 2, {1331,703}},
+{ 935712, 2, {1026,912}},
+{ 935715, 2, {1177,795}},
+{ 935720, 2, {1192,785}},
+{ 935736, 2, {1016,921}},
+{ 935740, 2, {1180,793}},
+{ 935766, 2, {1118,837}},
+{ 935784, 2, {984,951}},
+{ 935825, 2, {1025,913}},
+{ 935856, 2, {1072,873}},
+{ 935858, 2, {1133,826}},
+{ 935984, 2, {976,959}},
+{ 935991, 2, {1253,747}},
+{ 936000, 2, {975,960}},
+{ 936036, 2, {972,963}},
+{ 936117, 2, {1053,889}},
+{ 936144, 2, {1182,792}},
+{ 936156, 2, {1059,884}},
+{ 936200, 2, {1208,775}},
+{ 936243, 2, {1351,693}},
+{ 936320, 2, {1045,896}},
+{ 936325, 2, {1075,871}},
+{ 936369, 2, {1169,801}},
+{ 936411, 2, {1037,903}},
+{ 936468, 2, {1044,897}},
+{ 936507, 2, {1221,767}},
+{ 936510, 2, {1007,930}},
+{ 936528, 2, {1074,872}},
+{ 936540, 2, {990,946}},
+{ 936572, 2, {1079,868}},
+{ 936660, 2, {1005,932}},
+{ 936663, 2, {987,949}},
+{ 936675, 2, {1035,905}},
+{ 936700, 2, {986,950}},
+{ 936732, 2, {1004,933}},
+{ 936738, 2, {1026,913}},
+{ 936775, 2, {1325,707}},
+{ 936782, 2, {1078,869}},
+{ 936840, 2, {1055,888}},
+{ 936845, 2, {1015,923}},
+{ 936855, 2, {981,955}},
+{ 936870, 2, {1002,935}},
+{ 936888, 2, {1137,824}},
+{ 936900, 2, {1041,900}},
+{ 936912, 2, {1048,894}},
+{ 936936, 2, {1001,936}},
+{ 936975, 2, {975,961}},
+{ 936992, 2, {1246,752}},
+{ 936999, 2, {973,963}},
+{ 937040, 2, {1040,901}},
+{ 937062, 2, {999,938}},
+{ 937068, 2, {1023,916}},
+{ 937080, 2, {1096,855}},
+{ 937125, 2, {1071,875}},
+{ 937156, 2, {1121,836}},
+{ 937170, 2, {1053,890}},
+{ 937200, 2, {1065,880}},
+{ 937227, 2, {1081,867}},
+{ 937260, 2, {1143,820}},
+{ 937280, 2, {1010,928}},
+{ 937290, 2, {995,942}},
+{ 937296, 2, {1104,849}},
+{ 937320, 2, {1070,876}},
+{ 937321, 2, {1739,539}},
+{ 937332, 2, {1052,891}},
+{ 937335, 2, {1185,791}},
+{ 937365, 2, {1045,897}},
+{ 937392, 2, {993,944}},
+{ 937400, 2, {1075,872}},
+{ 937416, 2, {1112,843}},
+{ 937440, 2, {992,945}},
+{ 937482, 2, {1313,714}},
+{ 937517, 2, {1007,931}},
+{ 937584, 2, {1149,816}},
+{ 937650, 2, {987,950}},
+{ 937664, 2, {1127,832}},
+{ 937720, 2, {985,952}},
+{ 937728, 2, {1056,888}},
+{ 937755, 2, {1145,819}},
+{ 937802, 2, {1073,874}},
+{ 937805, 2, {1003,935}},
+{ 937836, 2, {981,956}},
+{ 937839, 2, {1207,777}},
+{ 937860, 2, {980,957}},
+{ 937872, 2, {1002,936}},
+{ 937888, 2, {1106,848}},
+{ 937916, 2, {1148,817}},
+{ 937950, 2, {975,962}},
+{ 937960, 2, {1048,895}},
+{ 937980, 2, {972,965}},
+{ 937992, 2, {969,968}},
+{ 938000, 2, {1000,938}},
+{ 938052, 2, {1101,852}},
+{ 938080, 2, {1040,902}},
+{ 938088, 2, {1032,909}},
+{ 938100, 2, {1060,885}},
+{ 938112, 2, {1047,896}},
+{ 938124, 2, {1012,927}},
+{ 938125, 2, {1501,625}},
+{ 938196, 2, {1022,918}},
+{ 938208, 2, {1011,928}},
+{ 938268, 2, {1167,804}},
+{ 938277, 2, {1121,837}},
+{ 938304, 2, {1086,864}},
+{ 938308, 2, {1081,868}},
+{ 938315, 2, {1411,665}},
+{ 938336, 2, {994,944}},
+{ 938352, 2, {1038,904}},
+{ 938355, 2, {1331,705}},
+{ 938432, 2, {992,946}},
+{ 938448, 2, {1008,931}},
+{ 938475, 2, {1075,873}},
+{ 938484, 2, {1179,796}},
+{ 938496, 2, {1128,832}},
+{ 938556, 2, {1044,899}},
+{ 938630, 2, {1166,805}},
+{ 938672, 2, {986,952}},
+{ 938700, 2, {1043,900}},
+{ 938730, 2, {1079,870}},
+{ 938736, 2, {984,954}},
+{ 938772, 2, {1068,879}},
+{ 938790, 2, {1026,915}},
+{ 938808, 2, {1003,936}},
+{ 938880, 2, {978,960}},
+{ 938952, 2, {972,966}},
+{ 938975, 2, {1633,575}},
+{ 939000, 2, {1000,939}},
+{ 939008, 2, {1024,917}},
+{ 939060, 2, {999,940}},
+{ 939072, 2, {1072,876}},
+{ 939114, 2, {1023,918}},
+{ 939120, 2, {1032,910}},
+{ 939134, 2, {1369,686}},
+{ 939144, 2, {1077,872}},
+{ 939246, 2, {1177,798}},
+{ 939270, 2, {1195,786}},
+{ 939276, 2, {1053,892}},
+{ 939280, 2, {995,944}},
+{ 939330, 2, {994,945}},
+{ 939348, 2, {1076,873}},
+{ 939360, 2, {1030,912}},
+{ 939372, 2, {1113,844}},
+{ 939375, 2, {1125,835}},
+{ 939390, 2, {1038,905}},
+{ 939393, 2, {1147,819}},
+{ 939400, 2, {1100,854}},
+{ 939420, 2, {1020,921}},
+{ 939455, 2, {1045,899}},
+{ 939477, 2, {1029,913}},
+{ 939484, 2, {1157,812}},
+{ 939510, 2, {990,949}},
+{ 939550, 2, {989,950}},
+{ 939575, 2, {1225,767}},
+{ 939588, 2, {988,951}},
+{ 939624, 2, {987,952}},
+{ 939640, 2, {1112,845}},
+{ 939645, 2, {1099,855}},
+{ 939690, 2, {985,954}},
+{ 939705, 2, {1027,915}},
+{ 939708, 2, {1017,924}},
+{ 939720, 2, {984,955}},
+{ 939736, 2, {1211,776}},
+{ 939750, 2, {1050,895}},
+{ 939780, 2, {1035,908}},
+{ 939800, 2, {1016,925}},
+{ 939820, 2, {980,959}},
+{ 939828, 2, {1084,867}},
+{ 939840, 2, {979,960}},
+{ 939888, 2, {976,963}},
+{ 939900, 2, {975,964}},
+{ 939925, 2, {1025,917}},
+{ 939960, 2, {1119,840}},
+{ 940005, 2, {1055,891}},
+{ 940032, 2, {1024,918}},
+{ 940044, 2, {1083,868}},
+{ 940056, 2, {1048,897}},
+{ 940100, 2, {1106,850}},
+{ 940170, 2, {1110,847}},
+{ 940184, 2, {1141,824}},
+{ 940212, 2, {1066,882}},
+{ 940224, 2, {996,944}},
+{ 940240, 2, {1022,920}},
+{ 940275, 2, {995,945}},
+{ 940310, 2, {1010,931}},
+{ 940329, 2, {1053,893}},
+{ 940355, 2, {1105,851}},
+{ 940368, 2, {1096,858}},
+{ 940392, 2, {1059,888}},
+{ 940416, 2, {992,948}},
+{ 940464, 2, {1008,933}},
+{ 940470, 2, {1081,870}},
+{ 940500, 2, {990,950}},
+{ 940576, 2, {988,952}},
+{ 940608, 2, {1104,852}},
+{ 940620, 2, {1028,915}},
+{ 940654, 2, {1573,598}},
+{ 940680, 2, {1005,936}},
+{ 940692, 2, {1108,849}},
+{ 940725, 2, {1017,925}},
+{ 940730, 2, {1057,890}},
+{ 940744, 2, {1099,856}},
+{ 940752, 2, {1112,846}},
+{ 940779, 2, {981,959}},
+{ 940788, 2, {1116,843}},
+{ 940797, 2, {1287,731}},
+{ 940800, 2, {980,960}},
+{ 940842, 2, {1026,917}},
+{ 940896, 2, {972,968}},
+{ 940905, 2, {1015,927}},
+{ 940940, 2, {1001,940}},
+{ 940950, 2, {1025,918}},
+{ 940992, 2, {1014,928}},
+{ 941050, 2, {1298,725}},
+{ 941064, 2, {1041,904}},
+{ 941070, 2, {1235,762}},
+{ 941094, 2, {1067,882}},
+{ 941120, 2, {1088,865}},
+{ 941175, 2, {1175,801}},
+{ 941190, 2, {1145,822}},
+{ 941200, 2, {1040,905}},
+{ 941220, 2, {996,945}},
+{ 941222, 2, {1054,893}},
+{ 941280, 2, {1060,888}},
+{ 941290, 2, {1130,833}},
+{ 941325, 2, {1141,825}},
+{ 941364, 2, {993,948}},
+{ 941408, 2, {992,949}},
+{ 941436, 2, {1137,828}},
+{ 941460, 2, {1020,923}},
+{ 941528, 2, {989,952}},
+{ 941545, 2, {1007,935}},
+{ 941600, 2, {1070,880}},
+{ 941640, 2, {1064,885}},
+{ 941688, 2, {984,957}},
+{ 941700, 2, {1075,876}},
+{ 941724, 2, {1036,909}},
+{ 941760, 2, {981,960}},
+{ 941780, 2, {980,961}},
+{ 941787, 2, {1057,891}},
+{ 941811, 2, {1209,779}},
+{ 941832, 2, {1016,927}},
+{ 941840, 2, {976,965}},
+{ 941850, 2, {975,966}},
+{ 941864, 2, {973,968}},
+{ 941868, 2, {972,969}},
+{ 941886, 2, {1206,781}},
+{ 941920, 2, {1015,928}},
+{ 941985, 2, {1089,865}},
+{ 942000, 2, {1000,942}},
+{ 942020, 2, {1273,740}},
+{ 942057, 2, {999,943}},
+{ 942080, 2, {1024,920}},
+{ 942123, 2, {1131,833}},
+{ 942128, 2, {1111,848}},
+{ 942172, 2, {1012,931}},
+{ 942180, 2, {1149,820}},
+{ 942240, 2, {1040,906}},
+{ 942252, 2, {1011,932}},
+{ 942256, 2, {1253,752}},
+{ 942288, 2, {1072,879}},
+{ 942300, 2, {1047,900}},
+{ 942340, 2, {1060,889}},
+{ 942400, 2, {992,950}},
+{ 942435, 2, {1053,895}},
+{ 942456, 2, {1101,856}},
+{ 942480, 2, {990,952}},
+{ 942500, 2, {1250,754}},
+{ 942564, 2, {1029,916}},
+{ 942656, 2, {1133,832}},
+{ 942678, 2, {1058,891}},
+{ 942732, 2, {1044,903}},
+{ 942756, 2, {1004,939}},
+{ 942760, 2, {980,962}},
+{ 942786, 2, {1027,918}},
+{ 942816, 2, {976,966}},
+{ 942820, 2, {1003,940}},
+{ 942840, 2, {972,970}},
+{ 942865, 2, {1085,869}},
+{ 942872, 2, {1043,904}},
+{ 942880, 2, {1136,830}},
+{ 942936, 2, {1167,808}},
+{ 943000, 2, {1000,943}},
+{ 943008, 2, {1034,912}},
+{ 943056, 2, {999,944}},
+{ 943068, 2, {1236,763}},
+{ 943092, 2, {1139,828}},
+{ 943104, 2, {1024,921}},
+{ 943160, 2, {1241,760}},
+{ 943164, 2, {1107,852}},
+{ 943170, 2, {1055,894}},
+{ 943250, 2, {1078,875}},
+{ 943260, 2, {995,948}},
+{ 943290, 2, {1115,846}},
+{ 943296, 2, {1088,867}},
+{ 943299, 2, {1127,837}},
+{ 943306, 2, {994,949}},
+{ 943392, 2, {992,951}},
+{ 943426, 2, {1159,814}},
+{ 943452, 2, {1077,876}},
+{ 943500, 2, {1020,925}},
+{ 943515, 2, {1205,783}},
+{ 943525, 2, {1175,803}},
+{ 943572, 2, {987,956}},
+{ 943644, 2, {1052,897}},
+{ 943650, 2, {1165,810}},
+{ 943656, 2, {984,959}},
+{ 943670, 2, {1037,910}},
+{ 943740, 2, {980,963}},
+{ 943770, 2, {978,965}},
+{ 943776, 2, {1017,928}},
+{ 943789, 2, {1133,833}},
+{ 943800, 2, {975,968}},
+{ 943803, 2, {1477,639}},
+{ 943810, 2, {973,970}},
+{ 943824, 2, {1113,848}},
+{ 943845, 2, {1335,707}},
+{ 943920, 2, {1026,920}},
+{ 943943, 2, {1001,943}},
+{ 943950, 2, {1015,930}},
+{ 943995, 2, {1339,705}},
+{ 944064, 2, {1056,894}},
+{ 944088, 2, {1112,849}},
+{ 944097, 2, {1281,737}},
+{ 944118, 2, {1062,889}},
+{ 944125, 2, {1079,875}},
+{ 944160, 2, {1120,843}},
+{ 944163, 2, {1089,867}},
+{ 944196, 2, {1012,933}},
+{ 944229, 2, {1023,923}},
+{ 944240, 2, {1073,880}},
+{ 944280, 2, {1032,915}},
+{ 944295, 2, {1067,885}},
+{ 944300, 2, {994,950}},
+{ 944304, 2, {1146,824}},
+{ 944376, 2, {1083,872}},
+{ 944436, 2, {1119,844}},
+{ 944452, 2, {1156,817}},
+{ 944505, 2, {1251,755}},
+{ 944510, 2, {1030,917}},
+{ 944541, 2, {1053,897}},
+{ 944552, 2, {1169,808}},
+{ 944622, 2, {1029,918}},
+{ 944628, 2, {1059,892}},
+{ 944640, 2, {984,960}},
+{ 944680, 2, {1045,904}},
+{ 944700, 2, {1005,940}},
+{ 944725, 2, {1219,775}},
+{ 944775, 2, {975,969}},
+{ 944820, 2, {1044,905}},
+{ 944832, 2, {1036,912}},
+{ 944840, 2, {1027,920}},
+{ 944880, 2, {1016,930}},
+{ 944928, 2, {1158,816}},
+{ 944944, 2, {1001,944}},
+{ 944955, 2, {1035,913}},
+{ 945000, 2, {1000,945}},
+{ 945035, 2, {1085,871}},
+{ 945054, 2, {999,946}},
+{ 945081, 2, {1207,783}},
+{ 945098, 2, {1309,722}},
+{ 945120, 2, {1056,895}},
+{ 945140, 2, {1099,860}},
+{ 945152, 2, {1024,923}},
+{ 945180, 2, {1062,890}},
+{ 945217, 2, {1183,799}},
+{ 945228, 2, {1041,908}},
+{ 945252, 2, {1023,924}},
+{ 945280, 2, {1055,896}},
+{ 945336, 2, {993,952}},
+{ 945350, 2, {1022,925}},
+{ 945360, 2, {1010,936}},
+{ 945400, 2, {1160,815}},
+{ 945405, 2, {1269,745}},
+{ 945438, 2, {1054,897}},
+{ 945450, 2, {990,955}},
+{ 945472, 2, {1088,869}},
+{ 945504, 2, {1008,938}},
+{ 945516, 2, {988,957}},
+{ 945540, 2, {1020,927}},
+{ 945600, 2, {985,960}},
+{ 945625, 2, {1513,625}},
+{ 945630, 2, {1106,855}},
+{ 945684, 2, {981,964}},
+{ 945714, 2, {979,966}},
+{ 945720, 2, {1065,888}},
+{ 945744, 2, {976,969}},
+{ 945756, 2, {973,972}},
+{ 945804, 2, {1076,879}},
+{ 945868, 2, {1036,913}},
+{ 945875, 2, {1081,875}},
+{ 945888, 2, {1002,944}},
+{ 945896, 2, {1016,931}},
+{ 945945, 2, {1001,945}},
+{ 945984, 2, {1137,832}},
+{ 946000, 2, {1000,946}},
+{ 946016, 2, {1184,799}},
+{ 946050, 2, {1050,901}},
+{ 946075, 2, {1025,923}},
+{ 946120, 2, {1085,872}},
+{ 946125, 2, {1125,841}},
+{ 946176, 2, {1024,924}},
+{ 946200, 2, {996,950}},
+{ 946215, 2, {1161,815}},
+{ 946296, 2, {1011,936}},
+{ 946308, 2, {1177,804}},
+{ 946332, 2, {1084,873}},
+{ 946344, 2, {1032,917}},
+{ 946368, 2, {992,954}},
+{ 946386, 2, {1073,882}},
+{ 946400, 2, {1040,910}},
+{ 946404, 2, {1143,828}},
+{ 946449, 2, {1267,747}},
+{ 946473, 2, {989,957}},
+{ 946488, 2, {1047,904}},
+{ 946512, 2, {1008,939}},
+{ 946560, 2, {986,960}},
+{ 946572, 2, {1111,852}},
+{ 946580, 2, {1007,940}},
+{ 946590, 2, {1135,834}},
+{ 946645, 2, {1295,731}},
+{ 946647, 2, {1053,899}},
+{ 946656, 2, {1038,912}},
+{ 946665, 2, {981,965}},
+{ 946704, 2, {978,968}},
+{ 946720, 2, {976,970}},
+{ 946764, 2, {1071,884}},
+{ 946770, 2, {1045,906}},
+{ 946776, 2, {1149,824}},
+{ 946785, 2, {1065,889}},
+{ 946788, 2, {1028,921}},
+{ 946792, 2, {1166,812}},
+{ 946827, 2, {1017,931}},
+{ 946860, 2, {1101,860}},
+{ 946992, 2, {1086,872}},
+{ 946998, 2, {1026,923}},
+{ 947030, 2, {1141,830}},
+{ 947052, 2, {999,948}},
+{ 947072, 2, {1057,896}},
+{ 947100, 2, {1025,924}},
+{ 947130, 2, {1205,786}},
+{ 947196, 2, {996,951}},
+{ 947200, 2, {1024,925}},
+{ 947205, 2, {1085,873}},
+{ 947232, 2, {1012,936}},
+{ 947240, 2, {995,952}},
+{ 947245, 2, {1121,845}},
+{ 947264, 2, {1216,779}},
+{ 947340, 2, {1108,855}},
+{ 947360, 2, {992,955}},
+{ 947376, 2, {1032,918}},
+{ 947430, 2, {990,957}},
+{ 947484, 2, {1116,849}},
+{ 947485, 2, {1177,805}},
+{ 947496, 2, {1067,888}},
+{ 947505, 2, {1469,645}},
+{ 947520, 2, {987,960}},
+{ 947540, 2, {1180,803}},
+{ 947546, 2, {986,961}},
+{ 947583, 2, {1157,819}},
+{ 947592, 2, {984,963}},
+{ 947604, 2, {1167,812}},
+{ 947625, 2, {1083,875}},
+{ 947700, 2, {975,972}},
+{ 947760, 2, {1077,880}},
+{ 947784, 2, {1173,808}},
+{ 947807, 2, {1127,841}},
+{ 947835, 2, {1003,945}},
+{ 947844, 2, {1017,932}},
+{ 947916, 2, {1179,804}},
+{ 947928, 2, {1016,933}},
+{ 947940, 2, {1036,915}},
+{ 947968, 2, {1058,896}},
+{ 948036, 2, {1191,796}},
+{ 948040, 2, {1096,865}},
+{ 948051, 2, {999,949}},
+{ 948060, 2, {1035,916}},
+{ 948087, 2, {1043,909}},
+{ 948090, 2, {1014,935}},
+{ 948150, 2, {1050,903}},
+{ 948175, 2, {1649,575}},
+{ 948213, 2, {1211,783}},
+{ 948276, 2, {994,954}},
+{ 948280, 2, {1208,785}},
+{ 948416, 2, {1022,928}},
+{ 948440, 2, {1048,905}},
+{ 948480, 2, {988,960}},
+{ 948519, 2, {1089,871}},
+{ 948555, 2, {985,963}},
+{ 948560, 2, {1136,835}},
+{ 948640, 2, {980,968}},
+{ 948672, 2, {976,972}},
+{ 948675, 2, {975,973}},
+{ 948708, 2, {1083,876}},
+{ 948720, 2, {1005,944}},
+{ 948753, 2, {1053,901}},
+{ 948780, 2, {1004,945}},
+{ 948787, 2, {1139,833}},
+{ 948794, 2, {1111,854}},
+{ 948838, 2, {1003,946}},
+{ 948864, 2, {1059,896}},
+{ 948912, 2, {1119,848}},
+{ 948915, 2, {1065,891}},
+{ 948948, 2, {1001,948}},
+{ 948996, 2, {1044,909}},
+{ 949000, 2, {1000,949}},
+{ 949003, 2, {1331,713}},
+{ 949050, 2, {999,950}},
+{ 949095, 2, {1035,917}},
+{ 949104, 2, {1014,936}},
+{ 949130, 2, {1043,910}},
+{ 949200, 2, {1050,904}},
+{ 949212, 2, {1034,918}},
+{ 949221, 2, {1159,819}},
+{ 949230, 2, {995,954}},
+{ 949248, 2, {1024,927}},
+{ 949308, 2, {993,956}},
+{ 949312, 2, {1141,832}},
+{ 949320, 2, {1080,879}},
+{ 949344, 2, {992,957}},
+{ 949375, 2, {1085,875}},
+{ 949392, 2, {1041,912}},
+{ 949410, 2, {990,959}},
+{ 949424, 2, {1211,784}},
+{ 949440, 2, {989,960}},
+{ 949452, 2, {1068,889}},
+{ 949468, 2, {988,961}},
+{ 949487, 2, {1121,847}},
+{ 949488, 2, {1048,906}},
+{ 949500, 2, {1055,900}},
+{ 949520, 2, {1040,913}},
+{ 949536, 2, {1008,942}},
+{ 949560, 2, {984,965}},
+{ 949608, 2, {981,968}},
+{ 949620, 2, {980,969}},
+{ 949648, 2, {976,973}},
+{ 949716, 2, {1116,851}},
+{ 949725, 2, {1005,945}},
+{ 949760, 2, {1060,896}},
+{ 949767, 2, {1029,923}},
+{ 949806, 2, {1053,902}},
+{ 949824, 2, {1088,873}},
+{ 949900, 2, {1150,826}},
+{ 949905, 2, {1045,909}},
+{ 949935, 2, {1245,763}},
+{ 949949, 2, {1001,949}},
+{ 949956, 2, {1052,903}},
+{ 949960, 2, {1016,935}},
+{ 949975, 2, {1027,925}},
+{ 949980, 2, {1065,892}},
+{ 949995, 2, {1135,837}},
+{ 950040, 2, {1015,936}},
+{ 950075, 2, {1525,623}},
+{ 950130, 2, {1035,918}},
+{ 950152, 2, {1064,893}},
+{ 950160, 2, {1070,888}},
+{ 950175, 2, {1025,927}},
+{ 950232, 2, {1096,867}},
+{ 950250, 2, {1050,905}},
+{ 950257, 2, {1763,539}},
+{ 950268, 2, {1012,939}},
+{ 950340, 2, {1011,940}},
+{ 950380, 2, {1159,820}},
+{ 950400, 2, {990,960}},
+{ 950460, 2, {1022,930}},
+{ 950472, 2, {1032,921}},
+{ 950490, 2, {1062,895}},
+{ 950521, 2, {2431,391}},
+{ 950532, 2, {1137,836}},
+{ 950544, 2, {984,966}},
+{ 950607, 2, {1337,711}},
+{ 950676, 2, {1047,908}},
+{ 950697, 2, {1067,891}},
+{ 950760, 2, {1112,855}},
+{ 950796, 2, {1029,924}},
+{ 950810, 2, {1190,799}},
+{ 950820, 2, {1060,897}},
+{ 950859, 2, {1053,903}},
+{ 950880, 2, {1120,849}},
+{ 950895, 2, {1017,935}},
+{ 950912, 2, {1088,874}},
+{ 950950, 2, {1001,950}},
+{ 951000, 2, {1000,951}},
+{ 951048, 2, {999,952}},
+{ 951142, 2, {1058,899}},
+{ 951159, 2, {1221,779}},
+{ 951160, 2, {1106,860}},
+{ 951180, 2, {996,955}},
+{ 951200, 2, {1025,928}},
+{ 951216, 2, {1043,912}},
+{ 951230, 2, {1070,889}},
+{ 951235, 2, {1615,589}},
+{ 951264, 2, {1101,864}},
+{ 951328, 2, {992,959}},
+{ 951372, 2, {1149,828}},
+{ 951390, 2, {990,961}},
+{ 951418, 2, {989,962}},
+{ 951444, 2, {988,963}},
+{ 951456, 2, {1056,901}},
+{ 951468, 2, {987,964}},
+{ 951510, 2, {985,966}},
+{ 951555, 2, {1095,869}},
+{ 951588, 2, {979,972}},
+{ 951600, 2, {976,975}},
+{ 951615, 2, {1007,945}},
+{ 951660, 2, {1020,933}},
+{ 951678, 2, {1079,882}},
+{ 951720, 2, {1030,924}},
+{ 951786, 2, {1089,874}},
+{ 951825, 2, {1029,925}},
+{ 951912, 2, {1017,936}},
+{ 951920, 2, {1168,815}},
+{ 951925, 2, {1313,725}},
+{ 951938, 2, {1066,893}},
+{ 951966, 2, {1037,918}},
+{ 952000, 2, {1000,952}},
+{ 952020, 2, {1107,860}},
+{ 952068, 2, {1077,884}},
+{ 952119, 2, {1071,889}},
+{ 952128, 2, {1026,928}},
+{ 952200, 2, {1035,920}},
+{ 952204, 2, {1139,836}},
+{ 952260, 2, {1076,885}},
+{ 952272, 2, {1167,816}},
+{ 952280, 2, {1064,895}},
+{ 952380, 2, {990,962}},
+{ 952413, 2, {1023,931}},
+{ 952476, 2, {986,966}},
+{ 952536, 2, {1032,923}},
+{ 952560, 2, {980,972}},
+{ 952622, 2, {1007,946}},
+{ 952632, 2, {1048,909}},
+{ 952679, 2, {1729,551}},
+{ 952728, 2, {1113,856}},
+{ 952740, 2, {1005,948}},
+{ 952784, 2, {1267,752}},
+{ 952800, 2, {1191,800}},
+{ 952820, 2, {1220,781}},
+{ 952836, 2, {1084,879}},
+{ 952850, 2, {1003,950}},
+{ 952875, 2, {1089,875}},
+{ 952952, 2, {1001,952}},
+{ 952956, 2, {1028,927}},
+{ 952965, 2, {1053,905}},
+{ 953040, 2, {1045,912}},
+{ 953056, 2, {1027,928}},
+{ 953088, 2, {1088,876}},
+{ 953095, 2, {1333,715}},
+{ 953100, 2, {1059,900}},
+{ 953120, 2, {1036,920}},
+{ 953172, 2, {996,957}},
+{ 953205, 2, {1199,795}},
+{ 953250, 2, {1025,930}},
+{ 953280, 2, {993,960}},
+{ 953316, 2, {1092,873}},
+{ 953325, 2, {1115,855}},
+{ 953343, 2, {1139,837}},
+{ 953344, 2, {1024,931}},
+{ 953388, 2, {1119,852}},
+{ 953436, 2, {1023,932}},
+{ 953440, 2, {1010,944}},
+{ 953472, 2, {1146,832}},
+{ 953480, 2, {985,968}},
+{ 953491, 2, {1421,671}},
+{ 953496, 2, {984,969}},
+{ 953520, 2, {1096,870}},
+{ 953532, 2, {981,972}},
+{ 953540, 2, {980,973}},
+{ 953556, 2, {1041,916}},
+{ 953568, 2, {1008,946}},
+{ 953610, 2, {1195,798}},
+{ 953667, 2, {1287,741}},
+{ 953680, 2, {1040,917}},
+{ 953694, 2, {1134,841}},
+{ 953700, 2, {1020,935}},
+{ 953712, 2, {1074,888}},
+{ 953720, 2, {1055,904}},
+{ 953745, 2, {1005,949}},
+{ 953775, 2, {1215,785}},
+{ 953810, 2, {1265,754}},
+{ 953904, 2, {1002,952}},
+{ 953955, 2, {1247,765}},
+{ 953964, 2, {1089,876}},
+{ 953988, 2, {1108,861}},
+{ 954000, 2, {1000,954}},
+{ 954024, 2, {1016,939}},
+{ 954030, 2, {1078,885}},
+{ 954040, 2, {1037,920}},
+{ 954045, 2, {999,955}},
+{ 954080, 2, {1072,890}},
+{ 954096, 2, {1112,858}},
+{ 954135, 2, {1165,819}},
+{ 954156, 2, {1036,921}},
+{ 954162, 2, {1098,869}},
+{ 954180, 2, {1026,930}},
+{ 954192, 2, {1158,824}},
+{ 954240, 2, {994,960}},
+{ 954261, 2, {1071,891}},
+{ 954275, 2, {1025,931}},
+{ 954276, 2, {1124,849}},
+{ 954304, 2, {992,962}},
+{ 954316, 2, {1012,943}},
+{ 954345, 2, {1043,915}},
+{ 954382, 2, {1034,923}},
+{ 954384, 2, {1011,944}},
+{ 954405, 2, {1143,835}},
+{ 954415, 2, {1295,737}},
+{ 954448, 2, {986,968}},
+{ 954450, 2, {1010,945}},
+{ 954477, 2, {1219,783}},
+{ 954480, 2, {984,970}},
+{ 954513, 2, {981,973}},
+{ 954525, 2, {979,975}},
+{ 954528, 2, {978,976}},
+{ 954560, 2, {1216,785}},
+{ 954564, 2, {1131,844}},
+{ 954600, 2, {1032,925}},
+{ 954720, 2, {1020,936}},
+{ 954800, 2, {1085,880}},
+{ 954804, 2, {1004,951}},
+{ 954822, 2, {1122,851}},
+{ 954840, 2, {1090,876}},
+{ 954845, 2, {1805,529}},
+{ 954856, 2, {1003,952}},
+{ 954864, 2, {1047,912}},
+{ 954912, 2, {1029,928}},
+{ 954915, 2, {1079,885}},
+{ 954930, 2, {1145,834}},
+{ 954954, 2, {1001,954}},
+{ 954960, 2, {1038,920}},
+{ 954975, 2, {1275,749}},
+{ 955000, 2, {1000,955}},
+{ 955017, 2, {1141,837}},
+{ 955044, 2, {999,956}},
+{ 955056, 2, {1182,808}},
+{ 955080, 2, {1137,840}},
+{ 955110, 2, {1027,930}},
+{ 955136, 2, {1066,896}},
+{ 955152, 2, {1072,891}},
+{ 955164, 2, {996,959}},
+{ 955200, 2, {995,960}},
+{ 955206, 2, {1026,931}},
+{ 955240, 2, {1144,835}},
+{ 955260, 2, {1044,915}},
+{ 955296, 2, {992,963}},
+{ 955305, 2, {1035,923}},
+{ 955325, 2, {1325,721}},
+{ 955332, 2, {1071,892}},
+{ 955350, 2, {990,965}},
+{ 955374, 2, {989,966}},
+{ 955392, 2, {1024,933}},
+{ 955416, 2, {987,968}},
+{ 955451, 2, {1147,833}},
+{ 955500, 2, {980,975}},
+{ 955504, 2, {979,976}},
+{ 955528, 2, {1057,904}},
+{ 955548, 2, {1143,836}},
+{ 955575, 2, {1233,775}},
+{ 955584, 2, {1008,948}},
+{ 955604, 2, {1081,884}},
+{ 955647, 2, {1379,693}},
+{ 955668, 2, {1101,868}},
+{ 955675, 2, {1075,889}},
+{ 955680, 2, {1056,905}},
+{ 955682, 2, {1157,826}},
+{ 955696, 2, {1127,848}},
+{ 955710, 2, {1110,861}},
+{ 955719, 2, {1311,729}},
+{ 955724, 2, {1177,812}},
+{ 955830, 2, {1055,906}},
+{ 955840, 2, {1030,928}},
+{ 955860, 2, {1068,895}},
+{ 955864, 2, {1183,808}},
+{ 955890, 2, {1118,855}},
+{ 955900, 2, {1100,869}},
+{ 955968, 2, {1149,832}},
+{ 955980, 2, {1017,940}},
+{ 956032, 2, {1067,896}},
+{ 956080, 2, {1258,760}},
+{ 956124, 2, {1053,908}},
+{ 956130, 2, {1015,942}},
+{ 956137, 2, {1027,931}},
+{ 956160, 2, {996,960}},
+{ 956202, 2, {1014,943}},
+{ 956268, 2, {1052,909}},
+{ 956310, 2, {1255,762}},
+{ 956340, 2, {990,966}},
+{ 956352, 2, {1088,879}},
+{ 956358, 2, {1098,871}},
+{ 956376, 2, {1077,888}},
+{ 956384, 2, {988,968}},
+{ 956450, 2, {1034,925}},
+{ 956536, 2, {1064,899}},
+{ 956571, 2, {1111,861}},
+{ 956592, 2, {1008,949}},
+{ 956650, 2, {1007,950}},
+{ 956664, 2, {1032,927}},
+{ 956670, 2, {1115,858}},
+{ 956725, 2, {1225,781}},
+{ 956736, 2, {1056,906}},
+{ 956760, 2, {1005,952}},
+{ 956802, 2, {1199,798}},
+{ 956808, 2, {1096,873}},
+{ 956862, 2, {1003,954}},
+{ 956879, 2, {1309,731}},
+{ 956910, 2, {1002,955}},
+{ 956928, 2, {1068,896}},
+{ 956940, 2, {1167,820}},
+{ 956961, 2, {1541,621}},
+{ 956970, 2, {1029,930}},
+{ 957000, 2, {1000,957}},
+{ 957072, 2, {1016,942}},
+{ 957110, 2, {1130,847}},
+{ 957145, 2, {1015,943}},
+{ 957168, 2, {1104,867}},
+{ 957180, 2, {1060,903}},
+{ 957195, 2, {1195,801}},
+{ 957216, 2, {1014,944}},
+{ 957252, 2, {993,964}},
+{ 957280, 2, {992,965}},
+{ 957336, 2, {1059,904}},
+{ 957348, 2, {1044,917}},
+{ 957352, 2, {989,968}},
+{ 957372, 2, {988,969}},
+{ 957375, 2, {1035,925}},
+{ 957411, 2, {1169,819}},
+{ 957420, 2, {985,972}},
+{ 957432, 2, {984,973}},
+{ 957440, 2, {1024,935}},
+{ 957456, 2, {981,976}},
+{ 957474, 2, {1043,918}},
+{ 957480, 2, {1010,948}},
+{ 957528, 2, {1023,936}},
+{ 957555, 2, {1107,865}},
+{ 957564, 2, {1191,804}},
+{ 957600, 2, {1008,950}},
+{ 957630, 2, {1165,822}},
+{ 957672, 2, {1128,849}},
+{ 957696, 2, {1032,928}},
+{ 957720, 2, {1041,920}},
+{ 957780, 2, {1020,939}},
+{ 957825, 2, {1075,891}},
+{ 957840, 2, {1040,921}},
+{ 957864, 2, {1119,856}},
+{ 957950, 2, {1127,850}},
+{ 957996, 2, {1068,897}},
+{ 958041, 2, {999,959}},
+{ 958048, 2, {1222,784}},
+{ 958095, 2, {1269,755}},
+{ 958100, 2, {1100,871}},
+{ 958160, 2, {1015,944}},
+{ 958185, 2, {995,963}},
+{ 958188, 2, {1037,924}},
+{ 958230, 2, {1014,945}},
+{ 958272, 2, {992,966}},
+{ 958320, 2, {990,968}},
+{ 958328, 2, {1099,872}},
+{ 958341, 2, {989,969}},
+{ 958365, 2, {1145,837}},
+{ 958368, 2, {1072,894}},
+{ 958392, 2, {986,972}},
+{ 958428, 2, {1011,948}},
+{ 958464, 2, {1024,936}},
+{ 958500, 2, {1065,900}},
+{ 958545, 2, {1071,895}},
+{ 958608, 2, {1008,951}},
+{ 958650, 2, {1050,913}},
+{ 958664, 2, {1007,952}},
+{ 958692, 2, {1212,791}},
+{ 958716, 2, {1076,891}},
+{ 958720, 2, {1070,896}},
+{ 958750, 2, {1250,767}},
+{ 958770, 2, {1005,954}},
+{ 958815, 2, {1287,745}},
+{ 958892, 2, {1147,836}},
+{ 958920, 2, {1048,915}},
+{ 958930, 2, {1030,931}},
+{ 958995, 2, {1055,909}},
+{ 959000, 2, {1000,959}},
+{ 959028, 2, {1029,932}},
+{ 959035, 2, {1645,583}},
+{ 959040, 2, {999,960}},
+{ 959052, 2, {1047,916}},
+{ 959072, 2, {1312,731}},
+{ 959077, 2, {1127,851}},
+{ 959088, 2, {1131,848}},
+{ 959124, 2, {1028,933}},
+{ 959140, 2, {1054,910}},
+{ 959148, 2, {996,963}},
+{ 959175, 2, {1015,945}},
+{ 959200, 2, {1090,880}},
+{ 959220, 2, {1095,876}},
+{ 959225, 2, {1037,925}},
+{ 959310, 2, {990,969}},
+{ 959340, 2, {1084,885}},
+{ 959364, 2, {987,972}},
+{ 959400, 2, {984,975}},
+{ 959420, 2, {980,979}},
+{ 959427, 2, {1099,873}},
+{ 959440, 2, {1072,895}},
+{ 959530, 2, {1210,793}},
+{ 959552, 2, {1034,928}},
+{ 959560, 2, {1043,920}},
+{ 959616, 2, {1008,952}},
+{ 959628, 2, {1137,844}},
+{ 959728, 2, {1064,902}},
+{ 959760, 2, {1032,930}},
+{ 959850, 2, {1185,810}},
+{ 959868, 2, {1092,879}},
+{ 959871, 2, {1003,957}},
+{ 959904, 2, {1056,909}},
+{ 959920, 2, {1040,923}},
+{ 959928, 2, {1081,888}},
+{ 959975, 2, {1075,893}},
+{ 960000, 2, {1000,960}},
+{ 960048, 2, {1017,944}},
+{ 960072, 2, {1101,872}},
+{ 960075, 2, {1255,765}},
+{ 960089, 2, {2197,437}},
+{ 960120, 2, {1016,945}},
+{ 960150, 2, {1038,925}},
+{ 960190, 2, {1015,946}},
+{ 960201, 2, {1431,671}},
+{ 960210, 2, {1135,846}},
+{ 960245, 2, {1027,935}},
+{ 960300, 2, {990,970}},
+{ 960336, 2, {988,972}},
+{ 960372, 2, {1036,927}},
+{ 960388, 2, {1012,949}},
+{ 960393, 2, {1577,609}},
+{ 960432, 2, {1122,856}},
+{ 960466, 2, {1066,901}},
+{ 960480, 2, {1035,928}},
+{ 960498, 2, {1078,891}},
+{ 960512, 2, {1024,938}},
+{ 960534, 2, {1241,774}},
+{ 960561, 2, {1351,711}},
+{ 960564, 2, {1149,836}},
+{ 960636, 2, {1108,867}},
+{ 960640, 2, {1216,790}},
+{ 960680, 2, {1022,940}},
+{ 960684, 2, {1077,892}},
+{ 960687, 2, {1071,897}},
+{ 960780, 2, {1005,956}},
+{ 960784, 2, {1133,848}},
+{ 960792, 2, {1032,931}},
+{ 960813, 2, {1057,909}},
+{ 960828, 2, {1004,957}},
+{ 960876, 2, {1107,868}},
+{ 960885, 2, {1179,815}},
+{ 960960, 2, {1001,960}},
+{ 960982, 2, {1331,722}},
+{ 961000, 2, {1000,961}},
+{ 961020, 2, {1124,855}},
+{ 961050, 2, {1075,894}},
+{ 961103, 2, {1573,611}},
+{ 961110, 2, {1062,905}},
+{ 961140, 2, {996,965}},
+{ 961170, 2, {995,966}},
+{ 961191, 2, {1197,803}},
+{ 961224, 2, {993,968}},
+{ 961248, 2, {992,969}},
+{ 961308, 2, {989,972}},
+{ 961350, 2, {986,975}},
+{ 961360, 2, {985,976}},
+{ 961380, 2, {981,980}},
+{ 961389, 2, {1053,913}},
+{ 961400, 2, {1012,950}},
+{ 961408, 2, {1036,928}},
+{ 961450, 2, {1025,938}},
+{ 961524, 2, {1044,921}},
+{ 961536, 2, {1024,939}},
+{ 961572, 2, {1059,908}},
+{ 961584, 2, {1072,897}},
+{ 961590, 2, {1205,798}},
+{ 961608, 2, {1167,824}},
+{ 961620, 2, {1023,940}},
+{ 961625, 2, {1099,875}},
+{ 961632, 2, {1008,954}},
+{ 961704, 2, {1083,888}},
+{ 961775, 2, {1241,775}},
+{ 961818, 2, {1121,858}},
+{ 961860, 2, {1020,943}},
+{ 961870, 2, {1057,910}},
+{ 961880, 2, {1112,865}},
+{ 961884, 2, {1041,924}},
+{ 961920, 2, {1002,960}},
+{ 961950, 2, {1166,825}},
+{ 961961, 2, {1001,961}},
+{ 961983, 2, {1107,869}},
+{ 961996, 2, {1204,799}},
+{ 962000, 2, {1000,962}},
+{ 962064, 2, {1048,918}},
+{ 962065, 2, {1235,779}},
+{ 962104, 2, {1144,841}},
+{ 962115, 2, {1029,935}},
+{ 962160, 2, {1055,912}},
+{ 962220, 2, {1015,948}},
+{ 962240, 2, {992,970}},
+{ 962280, 2, {990,972}},
+{ 962304, 2, {1074,896}},
+{ 962325, 2, {987,975}},
+{ 962328, 2, {1191,808}},
+{ 962340, 2, {1119,860}},
+{ 962352, 2, {984,978}},
+{ 962388, 2, {1026,938}},
+{ 962412, 2, {1012,951}},
+{ 962472, 2, {1011,952}},
+{ 962481, 2, {1073,897}},
+{ 962535, 2, {1335,721}},
+{ 962555, 2, {1591,605}},
+{ 962560, 2, {1024,940}},
+{ 962580, 2, {1052,915}},
+{ 962624, 2, {1157,832}},
+{ 962640, 2, {1008,955}},
+{ 962654, 2, {1034,931}},
+{ 962676, 2, {1089,884}},
+{ 962760, 2, {1065,904}},
+{ 962780, 2, {1058,910}},
+{ 962829, 2, {1071,899}},
+{ 962850, 2, {1050,917}},
+{ 962856, 2, {1032,933}},
+{ 962880, 2, {1003,960}},
+{ 962885, 2, {1435,671}},
+{ 962920, 2, {1064,905}},
+{ 962962, 2, {1001,962}},
+{ 963000, 2, {1000,963}},
+{ 963036, 2, {999,964}},
+{ 963125, 2, {1541,625}},
+{ 963144, 2, {1029,936}},
+{ 963160, 2, {995,968}},
+{ 963171, 2, {1081,891}},
+{ 963200, 2, {1075,896}},
+{ 963235, 2, {1015,949}},
+{ 963240, 2, {1047,920}},
+{ 963256, 2, {1169,824}},
+{ 963264, 2, {1038,928}},
+{ 963270, 2, {990,973}},
+{ 963300, 2, {988,975}},
+{ 963312, 2, {987,976}},
+{ 963325, 2, {1243,775}},
+{ 963326, 2, {1027,938}},
+{ 963330, 2, {985,978}},
+{ 963336, 2, {984,979}},
+{ 963384, 2, {1096,879}},
+{ 963424, 2, {1012,952}},
+{ 963456, 2, {1158,832}},
+{ 963480, 2, {1036,930}},
+{ 963495, 2, {1053,915}},
+{ 963501, 2, {1067,903}},
+{ 963540, 2, {1010,954}},
+{ 963585, 2, {1035,931}},
+{ 963594, 2, {1139,846}},
+{ 963600, 2, {1095,880}},
+{ 963612, 2, {1044,923}},
+{ 963630, 2, {1161,830}},
+{ 963699, 2, {1007,957}},
+{ 963732, 2, {1043,924}},
+{ 963781, 2, {1157,833}},
+{ 963792, 2, {1104,873}},
+{ 963795, 2, {1005,959}},
+{ 963815, 2, {1445,667}},
+{ 963900, 2, {1020,945}},
+{ 963930, 2, {1265,762}},
+{ 963963, 2, {1001,963}},
+{ 963984, 2, {1057,912}},
+{ 963996, 2, {1199,804}},
+{ 964035, 2, {999,965}},
+{ 964060, 2, {1121,860}},
+{ 964080, 2, {1030,936}},
+{ 964104, 2, {1112,867}},
+{ 964116, 2, {1017,948}},
+{ 964176, 2, {1137,848}},
+{ 964197, 2, {1107,871}},
+{ 964224, 2, {992,972}},
+{ 964250, 2, {1015,950}},
+{ 964257, 2, {1241,777}},
+{ 964275, 2, {989,975}},
+{ 964320, 2, {984,980}},
+{ 964348, 2, {1111,868}},
+{ 964368, 2, {1086,888}},
+{ 964404, 2, {1068,903}},
+{ 964410, 2, {1037,930}},
+{ 964440, 2, {1026,940}},
+{ 964467, 2, {1323,729}},
+{ 964476, 2, {1101,876}},
+{ 964512, 2, {1182,816}},
+{ 964535, 2, {1045,923}},
+{ 964548, 2, {1053,916}},
+{ 964590, 2, {1110,869}},
+{ 964608, 2, {1024,942}},
+{ 964620, 2, {1035,932}},
+{ 964656, 2, {1008,957}},
+{ 964665, 2, {1105,873}},
+{ 964689, 2, {1023,943}},
+{ 964692, 2, {1143,844}},
+{ 964712, 2, {1127,856}},
+{ 964733, 2, {1139,847}},
+{ 964752, 2, {1194,808}},
+{ 964768, 2, {1022,944}},
+{ 964775, 2, {1043,925}},
+{ 964782, 2, {1178,819}},
+{ 964800, 2, {1005,960}},
+{ 964886, 2, {1003,962}},
+{ 964896, 2, {1058,912}},
+{ 964920, 2, {1020,946}},
+{ 964953, 2, {1083,891}},
+{ 964960, 2, {1184,815}},
+{ 964971, 2, {1071,901}},
+{ 964975, 2, {1331,725}},
+{ 964992, 2, {1077,896}},
+{ 965000, 2, {1000,965}},
+{ 965055, 2, {1313,735}},
+{ 965124, 2, {996,969}},
+{ 965160, 2, {1149,840}},
+{ 965172, 2, {1076,897}},
+{ 965181, 2, {1121,861}},
+{ 965195, 2, {1199,805}},
+{ 965196, 2, {993,972}},
+{ 965205, 2, {1205,801}},
+{ 965208, 2, {1048,921}},
+{ 965216, 2, {992,973}},
+{ 965250, 2, {990,975}},
+{ 965292, 2, {1028,939}},
+{ 965304, 2, {984,981}},
+{ 965316, 2, {1133,852}},
+{ 965328, 2, {1014,952}},
+{ 965349, 2, {1393,693}},
+{ 965380, 2, {1027,940}},
+{ 965425, 2, {1679,575}},
+{ 965447, 2, {1037,931}},
+{ 965520, 2, {1080,894}},
+{ 965550, 2, {1025,942}},
+{ 965580, 2, {1045,924}},
+{ 965600, 2, {1136,850}},
+{ 965601, 2, {1053,917}},
+{ 965632, 2, {1024,943}},
+{ 965700, 2, {1044,925}},
+{ 965712, 2, {1023,944}},
+{ 965770, 2, {1105,874}},
+{ 965790, 2, {1022,945}},
+{ 965808, 2, {1059,912}},
+{ 965835, 2, {1143,845}},
+{ 965844, 2, {1084,891}},
+{ 965850, 2, {1175,822}},
+{ 965888, 2, {1078,896}},
+{ 965925, 2, {1215,795}},
+{ 965991, 2, {1209,799}},
+{ 966000, 2, {1000,966}},
+{ 966036, 2, {1083,892}},
+{ 966042, 2, {1071,902}},
+{ 966048, 2, {1041,928}},
+{ 966084, 2, {1113,868}},
+{ 966120, 2, {996,970}},
+{ 966144, 2, {1088,888}},
+{ 966168, 2, {994,972}},
+{ 966207, 2, {1273,759}},
+{ 966216, 2, {1016,951}},
+{ 966240, 2, {990,976}},
+{ 966273, 2, {987,979}},
+{ 966276, 2, {1167,828}},
+{ 966280, 2, {986,980}},
+{ 966285, 2, {985,981}},
+{ 966329, 2, {1517,637}},
+{ 966420, 2, {1062,910}},
+{ 966483, 2, {1449,667}},
+{ 966511, 2, {1183,817}},
+{ 966516, 2, {1011,956}},
+{ 966540, 2, {1068,905}},
+{ 966552, 2, {1173,824}},
+{ 966588, 2, {1036,933}},
+{ 966672, 2, {1008,959}},
+{ 966680, 2, {1144,845}},
+{ 966720, 2, {1007,960}},
+{ 966735, 2, {1023,945}},
+{ 966780, 2, {1179,820}},
+{ 966784, 2, {1079,896}},
+{ 966816, 2, {1119,864}},
+{ 966852, 2, {1004,963}},
+{ 966861, 2, {1043,927}},
+{ 966875, 2, {1105,875}},
+{ 966900, 2, {1100,879}},
+{ 966930, 2, {1002,965}},
+{ 967005, 2, {1131,855}},
+{ 967020, 2, {1065,908}},
+{ 967032, 2, {999,968}},
+{ 967092, 2, {1191,812}},
+{ 967104, 2, {1104,876}},
+{ 967120, 2, {1099,880}},
+{ 967140, 2, {995,972}},
+{ 967150, 2, {1150,841}},
+{ 967155, 2, {1057,915}},
+{ 967176, 2, {1064,909}},
+{ 967197, 2, {1113,869}},
+{ 967200, 2, {992,975}},
+{ 967212, 2, {1203,804}},
+{ 967260, 2, {987,980}},
+{ 967284, 2, {1108,873}},
+{ 967328, 2, {1184,817}},
+{ 967428, 2, {1047,924}},
+{ 967440, 2, {1112,870}},
+{ 967480, 2, {1273,760}},
+{ 967500, 2, {1075,900}},
+{ 967518, 2, {1026,943}},
+{ 967568, 2, {1141,848}},
+{ 967572, 2, {1054,918}},
+{ 967575, 2, {1425,679}},
+{ 967582, 2, {1133,854}},
+{ 967600, 2, {1025,944}},
+{ 967659, 2, {1239,781}},
+{ 967680, 2, {1008,960}},
+{ 967725, 2, {1035,935}},
+{ 967750, 2, {1106,875}},
+{ 967764, 2, {1124,861}},
+{ 967780, 2, {1060,913}},
+{ 967788, 2, {1044,927}},
+{ 967824, 2, {1034,936}},
+{ 967860, 2, {1132,855}},
+{ 967904, 2, {1043,928}},
+{ 967905, 2, {1233,785}},
+{ 967920, 2, {1090,888}},
+{ 967950, 2, {1195,810}},
+{ 967980, 2, {1020,949}},
+{ 968000, 2, {1000,968}},
+{ 968016, 2, {1032,938}},
+{ 968121, 2, {1089,889}},
+{ 968136, 2, {1131,856}},
+{ 968150, 2, {1139,850}},
+{ 968184, 2, {1017,952}},
+{ 968240, 2, {988,980}},
+{ 968253, 2, {1221,793}},
+{ 968310, 2, {1015,954}},
+{ 968320, 2, {1088,890}},
+{ 968370, 2, {1014,955}},
+{ 968409, 2, {1157,837}},
+{ 968418, 2, {1206,803}},
+{ 968440, 2, {1240,781}},
+{ 968448, 2, {1164,832}},
+{ 968484, 2, {1012,957}},
+{ 968490, 2, {1055,918}},
+{ 968544, 2, {1026,944}},
+{ 968575, 2, {1075,901}},
+{ 968576, 2, {1081,896}},
+{ 968590, 2, {1010,959}},
+{ 968600, 2, {1160,835}},
+{ 968625, 2, {1025,945}},
+{ 968670, 2, {1145,846}},
+{ 968688, 2, {1008,961}},
+{ 968704, 2, {1024,946}},
+{ 968715, 2, {1045,927}},
+{ 968724, 2, {1137,852}},
+{ 968734, 2, {1007,962}},
+{ 968760, 2, {1035,936}},
+{ 968800, 2, {1120,865}},
+{ 968820, 2, {1005,964}},
+{ 968832, 2, {1044,928}},
+{ 968877, 2, {1183,819}},
+{ 968880, 2, {1101,880}},
+{ 968892, 2, {1052,921}},
+{ 968898, 2, {1003,966}},
+{ 968905, 2, {1085,893}},
+{ 968924, 2, {1159,836}},
+{ 968968, 2, {1001,968}},
+{ 968975, 2, {1225,791}},
+{ 969000, 2, {1000,969}},
+{ 969010, 2, {1090,889}},
+{ 969030, 2, {999,970}},
+{ 969048, 2, {1032,939}},
+{ 969108, 2, {996,973}},
+{ 969122, 2, {1078,899}},
+{ 969150, 2, {994,975}},
+{ 969168, 2, {993,976}},
+{ 969210, 2, {990,979}},
+{ 969215, 2, {1147,845}},
+{ 969220, 2, {989,980}},
+{ 969228, 2, {988,981}},
+{ 969240, 2, {985,984}},
+{ 969255, 2, {1071,905}},
+{ 969264, 2, {1016,954}},
+{ 969300, 2, {1077,900}},
+{ 969400, 2, {1048,925}},
+{ 969408, 2, {1056,918}},
+{ 969423, 2, {1113,871}},
+{ 969435, 2, {1161,835}},
+{ 969440, 2, {1168,830}},
+{ 969488, 2, {1027,944}},
+{ 969525, 2, {1251,775}},
+{ 969595, 2, {1037,935}},
+{ 969600, 2, {1010,960}},
+{ 969606, 2, {1062,913}},
+{ 969612, 2, {1164,833}},
+{ 969650, 2, {1025,946}},
+{ 969657, 2, {1081,897}},
+{ 969680, 2, {1054,920}},
+{ 969696, 2, {1008,962}},
+{ 969732, 2, {1107,876}},
+{ 969756, 2, {1149,844}},
+{ 969760, 2, {1045,928}},
+{ 969804, 2, {1023,948}},
+{ 969850, 2, {1141,850}},
+{ 969900, 2, {1060,915}},
+{ 969936, 2, {1002,968}},
+{ 969960, 2, {1096,885}},
+{ 969969, 2, {1001,969}},
+{ 969990, 2, {1043,930}},
+{ 970002, 2, {1242,781}},
+{ 970011, 2, {1211,801}},
+{ 970020, 2, {1020,951}},
+{ 970044, 2, {1059,916}},
+{ 970050, 2, {1115,870}},
+{ 970060, 2, {1066,910}},
+{ 970080, 2, {1032,940}},
+{ 970083, 2, {1159,837}},
+{ 970137, 2, {1239,783}},
+{ 970144, 2, {994,976}},
+{ 970160, 2, {1072,905}},
+{ 970176, 2, {992,978}},
+{ 970212, 2, {1041,932}},
+{ 970255, 2, {1265,767}},
+{ 970280, 2, {1016,955}},
+{ 970320, 2, {1040,933}},
+{ 970326, 2, {1057,918}},
+{ 970347, 2, {1029,943}},
+{ 970389, 2, {1477,657}},
+{ 970416, 2, {1104,879}},
+{ 970424, 2, {1118,868}},
+{ 970425, 2, {1135,855}},
+{ 970515, 2, {1027,945}},
+{ 970530, 2, {1038,935}},
+{ 970536, 2, {1113,872}},
+{ 970550, 2, {1175,826}},
+{ 970560, 2, {1011,960}},
+{ 970596, 2, {1026,946}},
+{ 970600, 2, {1055,920}},
+{ 970632, 2, {1037,936}},
+{ 970704, 2, {1008,963}},
+{ 970710, 2, {1235,786}},
+{ 970752, 2, {1024,948}},
+{ 970775, 2, {1339,725}},
+{ 970776, 2, {1112,873}},
+{ 970785, 2, {1215,799}},
+{ 970788, 2, {1092,889}},
+{ 970812, 2, {1068,909}},
+{ 970827, 2, {1023,949}},
+{ 970880, 2, {1184,820}},
+{ 970896, 2, {1074,904}},
+{ 970900, 2, {1022,950}},
+{ 970904, 2, {1003,968}},
+{ 970920, 2, {1044,930}},
+{ 970944, 2, {1167,832}},
+{ 970970, 2, {1001,970}},
+{ 971025, 2, {1177,825}},
+{ 971028, 2, {999,972}},
+{ 971100, 2, {996,975}},
+{ 971120, 2, {995,976}},
+{ 971168, 2, {992,979}},
+{ 971208, 2, {987,984}},
+{ 971232, 2, {1072,906}},
+{ 971235, 2, {1017,955}},
+{ 971244, 2, {1058,918}},
+{ 971250, 2, {1050,925}},
+{ 971278, 2, {1078,901}},
+{ 971280, 2, {1065,912}},
+{ 971292, 2, {1119,868}},
+{ 971370, 2, {1255,774}},
+{ 971376, 2, {1029,944}},
+{ 971388, 2, {1089,892}},
+{ 971425, 2, {1225,793}},
+{ 971432, 2, {1064,913}},
+{ 971460, 2, {1028,945}},
+{ 971480, 2, {1192,815}},
+{ 971496, 2, {1048,927}},
+{ 971509, 2, {1147,847}},
+{ 971520, 2, {1012,960}},
+{ 971542, 2, {1027,946}},
+{ 971568, 2, {1038,936}},
+{ 971584, 2, {1088,893}},
+{ 971610, 2, {1165,834}},
+{ 971616, 2, {1047,928}},
+{ 971628, 2, {1076,903}},
+{ 971635, 2, {1207,805}},
+{ 971685, 2, {1287,755}},
+{ 971700, 2, {1025,948}},
+{ 971703, 2, {1241,783}},
+{ 971730, 2, {1062,915}},
+{ 971776, 2, {1024,949}},
+{ 971800, 2, {1075,904}},
+{ 971808, 2, {1146,848}},
+{ 971850, 2, {1023,950}},
+{ 971856, 2, {1191,816}},
+{ 971880, 2, {1068,910}},
+{ 971919, 2, {1053,923}},
+{ 971964, 2, {1044,931}},
+{ 971970, 2, {1074,905}},
+{ 972000, 2, {1000,972}},
+{ 972020, 2, {1060,917}},
+{ 972024, 2, {1203,808}},
+{ 972027, 2, {999,973}},
+{ 972036, 2, {1116,871}},
+{ 972096, 2, {996,976}},
+{ 972125, 2, {1111,875}},
+{ 972144, 2, {1032,942}},
+{ 972160, 2, {992,980}},
+{ 972202, 2, {1177,826}},
+{ 972225, 2, {1305,745}},
+{ 972230, 2, {1190,817}},
+{ 972252, 2, {1017,956}},
+{ 972312, 2, {1016,957}},
+{ 972315, 2, {1271,765}},
+{ 972320, 2, {1030,944}},
+{ 972325, 2, {1691,575}},
+{ 972328, 2, {1253,776}},
+{ 972345, 2, {1065,913}},
+{ 972348, 2, {1084,897}},
+{ 972356, 2, {1078,902}},
+{ 972360, 2, {1095,888}},
+{ 972400, 2, {1040,935}},
+{ 972405, 2, {1029,945}},
+{ 972440, 2, {1057,920}},
+{ 972468, 2, {1071,908}},
+{ 972477, 2, {1089,893}},
+{ 972532, 2, {1012,961}},
+{ 972576, 2, {1056,921}},
+{ 972594, 2, {1162,837}},
+{ 972608, 2, {1169,832}},
+{ 972615, 2, {1099,885}},
+{ 972660, 2, {1118,870}},
+{ 972672, 2, {1088,894}},
+{ 972720, 2, {1008,965}},
+{ 972725, 2, {1025,949}},
+{ 972762, 2, {1007,966}},
+{ 972800, 2, {1024,950}},
+{ 972804, 2, {1036,939}},
+{ 972825, 2, {1275,763}},
+{ 972840, 2, {1005,968}},
+{ 972876, 2, {1004,969}},
+{ 972900, 2, {1035,940}},
+{ 972950, 2, {1342,725}},
+{ 972961, 2, {1331,731}},
+{ 972972, 2, {1001,972}},
+{ 973000, 2, {1000,973}},
+{ 973028, 2, {1121,868}},
+{ 973056, 2, {1086,896}},
+{ 973063, 2, {1547,629}},
+{ 973104, 2, {1067,912}},
+{ 973110, 2, {995,978}},
+{ 973125, 2, {1125,865}},
+{ 973126, 2, {994,979}},
+{ 973140, 2, {993,980}},
+{ 973152, 2, {992,981}},
+{ 973175, 2, {1675,581}},
+{ 973176, 2, {989,984}},
+{ 973236, 2, {1111,876}},
+{ 973272, 2, {1137,856}},
+{ 973280, 2, {1106,880}},
+{ 973284, 2, {1101,884}},
+{ 973323, 2, {1269,767}},
+{ 973350, 2, {1030,945}},
+{ 973395, 2, {1115,873}},
+{ 973400, 2, {1240,785}},
+{ 973434, 2, {1029,946}},
+{ 973440, 2, {1014,960}},
+{ 973455, 2, {1095,889}},
+{ 973500, 2, {1100,885}},
+{ 973544, 2, {1012,962}},
+{ 973560, 2, {1064,915}},
+{ 973588, 2, {1199,812}},
+{ 973608, 2, {1077,904}},
+{ 973617, 2, {1083,899}},
+{ 973674, 2, {1026,949}},
+{ 973675, 2, {1343,725}},
+{ 973728, 2, {1008,966}},
+{ 973760, 2, {1088,895}},
+{ 973824, 2, {1024,951}},
+{ 973830, 2, {1135,858}},
+{ 973836, 2, {1143,852}},
+{ 973854, 2, {1062,917}},
+{ 973875, 2, {1113,875}},
+{ 973896, 2, {1023,952}},
+{ 973932, 2, {1108,879}},
+{ 973950, 2, {1075,906}},
+{ 973968, 2, {1182,824}},
+{ 974016, 2, {1068,912}},
+{ 974025, 2, {999,975}},
+{ 974050, 2, {1150,847}},
+{ 974052, 2, {1044,933}},
+{ 974100, 2, {1020,955}},
+{ 974120, 2, {994,980}},
+{ 974160, 2, {990,984}},
+{ 974168, 2, {988,986}},
+{ 974246, 2, {1313,742}},
+{ 974268, 2, {1116,873}},
+{ 974280, 2, {1059,920}},
+{ 974292, 2, {1331,732}},
+{ 974304, 2, {1194,816}},
+{ 974337, 2, {1079,903}},
+{ 974344, 2, {1016,959}},
+{ 974352, 2, {1149,848}},
+{ 974358, 2, {1197,814}},
+{ 974376, 2, {1041,936}},
+{ 974400, 2, {1015,960}},
+{ 974448, 2, {1072,909}},
+{ 974454, 2, {1014,961}},
+{ 974508, 2, {1124,867}},
+{ 974545, 2, {1363,715}},
+{ 974556, 2, {1012,963}},
+{ 974592, 2, {1128,864}},
+{ 974604, 2, {1011,964}},
+{ 974640, 2, {1048,930}},
+{ 974652, 2, {1132,861}},
+{ 974655, 2, {1089,895}},
+{ 974673, 2, {1337,729}},
+{ 974688, 2, {1056,923}},
+{ 974700, 2, {1026,950}},
+{ 974776, 2, {1007,968}},
+{ 974780, 2, {1037,940}},
+{ 974792, 2, {1183,824}},
+{ 974820, 2, {1055,924}},
+{ 974835, 2, {1245,783}},
+{ 974848, 2, {1024,952}},
+{ 974916, 2, {1003,972}},
+{ 974988, 2, {1022,954}},
+{ 975000, 2, {1000,975}},
+{ 975024, 2, {999,976}},
+{ 975051, 2, {1323,737}},
+{ 975084, 2, {996,979}},
+{ 975105, 2, {1165,837}},
+{ 975150, 2, {990,985}},
+{ 975154, 2, {989,986}},
+{ 975156, 2, {988,987}},
+{ 975204, 2, {1052,927}},
+{ 975240, 2, {1032,945}},
+{ 975260, 2, {1210,806}},
+{ 975280, 2, {1168,835}},
+{ 975303, 2, {1017,959}},
+{ 975375, 2, {1125,867}},
+{ 975415, 2, {1015,961}},
+{ 975492, 2, {1029,948}},
+{ 975513, 2, {1133,861}},
+{ 975520, 2, {1040,938}},
+{ 975540, 2, {1065,916}},
+{ 975555, 2, {1141,855}},
+{ 975579, 2, {1221,799}},
+{ 975612, 2, {1167,836}},
+{ 975624, 2, {1272,767}},
+{ 975645, 2, {1095,891}},
+{ 975650, 2, {1027,950}},
+{ 975688, 2, {1048,931}},
+{ 975744, 2, {1008,968}},
+{ 975768, 2, {1119,872}},
+{ 975783, 2, {1007,969}},
+{ 975800, 2, {1025,952}},
+{ 975804, 2, {1047,932}},
+{ 975821, 2, {1463,667}},
+{ 975840, 2, {1070,912}},
+{ 975936, 2, {1088,897}},
+{ 975975, 2, {1001,975}},
+{ 976005, 2, {1035,943}},
+{ 976050, 2, {1205,810}},
+{ 976095, 2, {995,981}},
+{ 976122, 2, {1098,889}},
+{ 976128, 2, {992,984}},
+{ 976140, 2, {990,986}},
+{ 976212, 2, {1179,828}},
+{ 976248, 2, {1043,936}},
+{ 976250, 2, {1250,781}},
+{ 976260, 2, {1060,921}},
+{ 976305, 2, {1067,915}},
+{ 976320, 2, {1017,960}},
+{ 976430, 2, {1015,962}},
+{ 976440, 2, {1030,948}},
+{ 976521, 2, {1029,949}},
+{ 976525, 2, {1325,737}},
+{ 976536, 2, {1096,891}},
+{ 976560, 2, {1040,939}},
+{ 976605, 2, {1065,917}},
+{ 976620, 2, {1191,820}},
+{ 976640, 2, {1090,896}},
+{ 976668, 2, {1057,924}},
+{ 976696, 2, {1141,856}},
+{ 976740, 2, {1095,892}},
+{ 976745, 2, {1505,649}},
+{ 976752, 2, {1008,969}},
+{ 976800, 2, {1056,925}},
+{ 976833, 2, {1089,897}},
+{ 976836, 2, {1203,812}},
+{ 976860, 2, {1005,972}},
+{ 976864, 2, {1246,784}},
+{ 976872, 2, {1209,808}},
+{ 976896, 2, {1024,954}},
+{ 976948, 2, {1036,943}},
+{ 976976, 2, {1001,976}},
+{ 977040, 2, {1035,944}},
+{ 977076, 2, {996,981}},
+{ 977112, 2, {993,984}},
+{ 977120, 2, {992,985}},
+{ 977130, 2, {990,987}},
+{ 977132, 2, {989,988}},
+{ 977151, 2, {1501,651}},
+{ 977175, 2, {1075,909}},
+{ 977220, 2, {1068,915}},
+{ 977262, 2, {1122,871}},
+{ 977275, 2, {1261,775}},
+{ 977400, 2, {1080,905}},
+{ 977445, 2, {1015,963}},
+{ 977448, 2, {1112,879}},
+{ 977550, 2, {1029,950}},
+{ 977585, 2, {1085,901}},
+{ 977625, 2, {1125,869}},
+{ 977628, 2, {1028,951}},
+{ 977670, 2, {1065,918}},
+{ 977676, 2, {1236,791}},
+{ 977688, 2, {1101,888}},
+{ 977691, 2, {1419,689}},
+{ 977704, 2, {1027,952}},
+{ 977725, 2, {1057,925}},
+{ 977760, 2, {1008,970}},
+{ 977784, 2, {1048,933}},
+{ 977820, 2, {1137,860}},
+{ 977823, 2, {1071,913}},
+{ 977850, 2, {1025,954}},
+{ 977865, 2, {1005,973}},
+{ 977900, 2, {1100,889}},
+{ 977916, 2, {1077,908}},
+{ 977920, 2, {1024,955}},
+{ 977925, 2, {1003,975}},
+{ 977952, 2, {1002,976}},
+{ 977976, 2, {1128,867}},
+{ 977985, 2, {1055,927}},
+{ 977988, 2, {1023,956}},
+{ 978000, 2, {1000,978}},
+{ 978021, 2, {999,979}},
+{ 978025, 2, {1349,725}},
+{ 978084, 2, {1076,909}},
+{ 978096, 2, {994,984}},
+{ 978110, 2, {1099,890}},
+{ 978120, 2, {990,988}},
+{ 978180, 2, {1020,959}},
+{ 978285, 2, {1155,847}},
+{ 978380, 2, {1060,923}},
+{ 978384, 2, {1122,872}},
+{ 978408, 2, {1016,963}},
+{ 978432, 2, {1092,896}},
+{ 978453, 2, {1169,837}},
+{ 978480, 2, {1080,906}},
+{ 978488, 2, {1211,808}},
+{ 978510, 2, {1014,965}},
+{ 978516, 2, {1059,924}},
+{ 978540, 2, {1041,940}},
+{ 978576, 2, {1073,912}},
+{ 978588, 2, {1066,918}},
+{ 978648, 2, {1011,968}},
+{ 978670, 2, {1085,902}},
+{ 978692, 2, {1276,767}},
+{ 978705, 2, {1195,819}},
+{ 978736, 2, {1072,913}},
+{ 978775, 2, {1175,833}},
+{ 978804, 2, {1007,972}},
+{ 978810, 2, {1106,885}},
+{ 978822, 2, {1157,846}},
+{ 978835, 2, {1369,715}},
+{ 978852, 2, {1084,903}},
+{ 978900, 2, {1004,975}},
+{ 978912, 2, {1056,927}},
+{ 978948, 2, {1149,852}},
+{ 978975, 2, {1145,855}},
+{ 979000, 2, {1000,979}},
+{ 979020, 2, {999,980}},
+{ 979032, 2, {1083,904}},
+{ 979040, 2, {1055,928}},
+{ 979047, 2, {1343,729}},
+{ 979069, 2, {1421,689}},
+{ 979080, 2, {995,984}},
+{ 979104, 2, {992,987}},
+{ 979110, 2, {990,989}},
+{ 979132, 2, {1156,847}},
+{ 979200, 2, {1020,960}},
+{ 979209, 2, {1099,891}},
+{ 979272, 2, {1044,938}},
+{ 979290, 2, {1053,930}},
+{ 979355, 2, {1159,845}},
+{ 979356, 2, {1068,917}},
+{ 979363, 2, {1127,869}},
+{ 979368, 2, {1032,949}},
+{ 979488, 2, {1074,912}},
+{ 979506, 2, {1067,918}},
+{ 979540, 2, {1139,860}},
+{ 979608, 2, {1029,952}},
+{ 979660, 2, {1220,803}},
+{ 979680, 2, {1040,942}},
+{ 979692, 2, {1284,763}},
+{ 979693, 2, {1859,527}},
+{ 979695, 2, {1107,885}},
+{ 979758, 2, {1027,954}},
+{ 979776, 2, {1008,972}},
+{ 979797, 2, {1261,777}},
+{ 979800, 2, {1065,920}},
+{ 979824, 2, {1096,894}},
+{ 979830, 2, {1026,955}},
+{ 979839, 2, {1057,927}},
+{ 979872, 2, {1038,944}},
+{ 979880, 2, {1048,935}},
+{ 979884, 2, {1161,844}},
+{ 979944, 2, {1064,921}},
+{ 979950, 2, {1175,834}},
+{ 979965, 2, {1037,945}},
+{ 979968, 2, {1024,957}},
+{ 979982, 2, {1258,779}},
+{ 979992, 2, {1047,936}},
+{ 980000, 2, {1000,980}},
+{ 980056, 2, {1036,946}},
+{ 980200, 2, {1160,845}},
+{ 980220, 2, {1020,961}},
+{ 980226, 2, {1062,923}},
+{ 980244, 2, {1119,876}},
+{ 980280, 2, {1167,840}},
+{ 980288, 2, {1088,901}},
+{ 980316, 2, {1044,939}},
+{ 980343, 2, {1053,931}},
+{ 980388, 2, {1017,964}},
+{ 980400, 2, {1032,950}},
+{ 980420, 2, {1043,940}},
+{ 980440, 2, {1016,965}},
+{ 980441, 2, {1177,833}},
+{ 980469, 2, {1379,711}},
+{ 980490, 2, {1015,966}},
+{ 980580, 2, {1108,885}},
+{ 980628, 2, {1012,969}},
+{ 980655, 2, {1391,705}},
+{ 980679, 2, {1139,861}},
+{ 980685, 2, {1147,855}},
+{ 980720, 2, {1040,943}},
+{ 980784, 2, {1008,973}},
+{ 980840, 2, {1085,904}},
+{ 980875, 2, {1121,875}},
+{ 980880, 2, {1005,976}},
+{ 980896, 2, {1057,928}},
+{ 980920, 2, {1096,895}},
+{ 980964, 2, {1116,879}},
+{ 980976, 2, {1146,856}},
+{ 980980, 2, {1001,980}},
+{ 981000, 2, {1000,981}},
+{ 981002, 2, {1037,946}},
+{ 981036, 2, {1071,916}},
+{ 981045, 2, {1161,845}},
+{ 981060, 2, {996,985}},
+{ 981084, 2, {993,988}},
+{ 981088, 2, {992,989}},
+{ 981099, 2, {1253,783}},
+{ 981120, 2, {1022,960}},
+{ 981136, 2, {1157,848}},
+{ 981150, 2, {1055,930}},
+{ 981180, 2, {1035,948}},
+{ 981189, 2, {1089,901}},
+{ 981190, 2, {1070,917}},
+{ 981225, 2, {1225,801}},
+{ 981240, 2, {1020,962}},
+{ 981252, 2, {1124,873}},
+{ 981260, 2, {1141,860}},
+{ 981266, 2, {1034,949}},
+{ 981274, 2, {1054,931}},
+{ 981295, 2, {1219,805}},
+{ 981360, 2, {1044,940}},
+{ 981376, 2, {1088,902}},
+{ 981384, 2, {1191,824}},
+{ 981396, 2, {1053,932}},
+{ 981405, 2, {1017,965}},
+{ 981432, 2, {1032,951}},
+{ 981444, 2, {1132,867}},
+{ 981456, 2, {1016,966}},
+{ 981475, 2, {1075,913}},
+{ 981516, 2, {1052,933}},
+{ 981540, 2, {1140,861}},
+{ 981552, 2, {1014,968}},
+{ 981575, 2, {1775,553}},
+{ 981617, 2, {1127,871}},
+{ 981648, 2, {1203,816}},
+{ 981673, 2, {1159,847}},
+{ 981708, 2, {1092,899}},
+{ 981720, 2, {1010,972}},
+{ 981744, 2, {1086,904}},
+{ 981750, 2, {1050,935}},
+{ 981825, 2, {1007,975}},
+{ 981882, 2, {1026,957}},
+{ 981890, 2, {1079,910}},
+{ 981981, 2, {1001,981}},
+{ 981984, 2, {1158,848}},
+{ 982016, 2, {1024,959}},
+{ 982035, 2, {1251,785}},
+{ 982080, 2, {992,990}},
+{ 982092, 2, {1101,892}},
+{ 982100, 2, {1150,854}},
+{ 982107, 2, {1071,917}},
+{ 982215, 2, {1035,949}},
+{ 982224, 2, {1077,912}},
+{ 982260, 2, {1020,963}},
+{ 982290, 2, {1195,822}},
+{ 982300, 2, {1034,950}},
+{ 982350, 2, {1062,925}},
+{ 982352, 2, {1253,784}},
+{ 982368, 2, {1137,864}},
+{ 982410, 2, {1145,858}},
+{ 982488, 2, {1128,871}},
+{ 982498, 2, {1207,814}},
+{ 982514, 2, {1219,806}},
+{ 982520, 2, {1015,968}},
+{ 982527, 2, {1239,793}},
+{ 982566, 2, {1014,969}},
+{ 982620, 2, {1030,954}},
+{ 982640, 2, {1136,865}},
+{ 982665, 2, {1255,783}},
+{ 982692, 2, {1011,972}},
+{ 982704, 2, {1041,944}},
+{ 982720, 2, {1184,830}},
+{ 982730, 2, {1010,973}},
+{ 982744, 2, {1127,872}},
+{ 982752, 2, {1059,928}},
+{ 982770, 2, {1230,799}},
+{ 982800, 2, {1008,975}},
+{ 982839, 2, {1027,957}},
+{ 982905, 2, {1155,851}},
+{ 982940, 2, {1003,980}},
+{ 982975, 2, {1025,959}},
+{ 982980, 2, {1143,860}},
+{ 983010, 2, {1057,930}},
+{ 983016, 2, {999,984}},
+{ 983040, 2, {1024,960}},
+{ 983052, 2, {996,987}},
+{ 983112, 2, {1096,897}},
+{ 983125, 2, {1375,715}},
+{ 983136, 2, {1056,931}},
+{ 983192, 2, {1267,776}},
+{ 983235, 2, {1111,885}},
+{ 983364, 2, {1083,908}},
+{ 983411, 2, {1859,529}},
+{ 983421, 2, {1349,729}},
+{ 983424, 2, {1182,832}},
+{ 983430, 2, {1115,882}},
+{ 983444, 2, {1133,868}},
+{ 983475, 2, {1175,837}},
+{ 983544, 2, {1149,856}},
+{ 983628, 2, {1068,921}},
+{ 983664, 2, {1012,972}},
+{ 983675, 2, {1225,803}},
+{ 983680, 2, {1060,928}},
+{ 983710, 2, {1081,910}},
+{ 983724, 2, {1029,956}},
+{ 983756, 2, {1156,851}},
+{ 983796, 2, {1028,957}},
+{ 983825, 2, {1357,725}},
+{ 983840, 2, {1040,946}},
+{ 983856, 2, {1194,824}},
+{ 983871, 2, {1127,873}},
+{ 983892, 2, {1092,901}},
+{ 983895, 2, {1005,979}},
+{ 983934, 2, {1026,959}},
+{ 984015, 2, {999,985}},
+{ 984060, 2, {994,990}},
+{ 984072, 2, {1048,939}},
+{ 984096, 2, {1072,918}},
+{ 984120, 2, {1112,885}},
+{ 984123, 2, {1107,889}},
+{ 984126, 2, {1023,962}},
+{ 984165, 2, {1339,735}},
+{ 984180, 2, {1047,940}},
+{ 984200, 2, {1036,950}},
+{ 984214, 2, {1078,913}},
+{ 984256, 2, {1183,832}},
+{ 984300, 2, {1020,965}},
+{ 984368, 2, {1034,952}},
+{ 984375, 2, {1125,875}},
+{ 984390, 2, {1045,942}},
+{ 984456, 2, {1017,968}},
+{ 984465, 2, {1179,835}},
+{ 984480, 2, {1120,879}},
+{ 984492, 2, {1044,943}},
+{ 984504, 2, {1016,969}},
+{ 984520, 2, {1208,815}},
+{ 984528, 2, {1032,954}},
+{ 984540, 2, {1076,915}},
+{ 984555, 2, {1053,935}},
+{ 984592, 2, {1043,944}},
+{ 984640, 2, {1088,905}},
+{ 984704, 2, {1099,896}},
+{ 984720, 2, {1119,880}},
+{ 984744, 2, {1128,873}},
+{ 984753, 2, {1029,957}},
+{ 984795, 2, {1245,791}},
+{ 984808, 2, {1178,836}},
+{ 984879, 2, {1351,729}},
+{ 984885, 2, {1397,705}},
+{ 984900, 2, {1005,980}},
+{ 984912, 2, {1136,867}},
+{ 984924, 2, {1004,981}},
+{ 984948, 2, {1167,844}},
+{ 984960, 2, {1026,960}},
+{ 984963, 2, {1513,651}},
+{ 984984, 2, {1001,984}},
+{ 984998, 2, {1058,931}},
+{ 985000, 2, {1000,985}},
+{ 985050, 2, {995,990}},
+{ 985056, 2, {993,992}},
+{ 985088, 2, {1024,962}},
+{ 985150, 2, {1037,950}},
+{ 985230, 2, {1107,890}},
+{ 985236, 2, {1036,951}},
+{ 985248, 2, {1056,933}},
+{ 985275, 2, {1305,755}},
+{ 985320, 2, {1020,966}},
+{ 985356, 2, {1084,909}},
+{ 985376, 2, {1162,848}},
+{ 985435, 2, {1045,943}},
+{ 985446, 2, {1106,891}},
+{ 985490, 2, {1054,935}},
+{ 985500, 2, {1095,900}},
+{ 985530, 2, {1083,910}},
+{ 985536, 2, {1044,944}},
+{ 985545, 2, {1089,905}},
+{ 985560, 2, {1032,955}},
+{ 985590, 2, {1165,846}},
+{ 985600, 2, {1100,896}},
+{ 985608, 2, {1014,972}},
+{ 985625, 2, {1577,625}},
+{ 985635, 2, {1043,945}},
+{ 985644, 2, {1179,836}},
+{ 985680, 2, {1110,888}},
+{ 985728, 2, {1088,906}},
+{ 985760, 2, {1010,976}},
+{ 985775, 2, {1075,917}},
+{ 985824, 2, {1008,978}},
+{ 985831, 2, {1519,649}},
+{ 985872, 2, {1081,912}},
+{ 985908, 2, {1067,924}},
+{ 985920, 2, {1027,960}},
+{ 985968, 2, {1002,984}},
+{ 985986, 2, {1026,961}},
+{ 986000, 2, {1000,986}},
+{ 986013, 2, {999,987}},
+{ 986048, 2, {994,992}},
+{ 986076, 2, {1092,903}},
+{ 986112, 2, {1024,963}},
+{ 986125, 2, {1127,875}},
+{ 986148, 2, {1191,828}},
+{ 986172, 2, {1023,964}},
+{ 986232, 2, {1131,872}},
+{ 986265, 2, {1085,909}},
+{ 986271, 2, {1331,741}},
+{ 986328, 2, {1064,927}},
+{ 986370, 2, {1078,915}},
+{ 986430, 2, {1255,786}},
+{ 986460, 2, {1203,820}},
+{ 986480, 2, {1045,944}},
+{ 986493, 2, {1173,841}},
+{ 986496, 2, {1101,896}},
+{ 986532, 2, {1077,916}},
+{ 986544, 2, {1054,936}},
+{ 986568, 2, {1111,888}},
+{ 986575, 2, {1273,775}},
+{ 986580, 2, {1015,972}},
+{ 986700, 2, {1012,975}},
+{ 986736, 2, {1011,976}},
+{ 986765, 2, {1105,893}},
+{ 986790, 2, {1110,889}},
+{ 986832, 2, {1008,979}},
+{ 986850, 2, {1075,918}},
+{ 986860, 2, {1007,980}},
+{ 986868, 2, {1041,948}},
+{ 986895, 2, {1205,819}},
+{ 986916, 2, {1137,868}},
+{ 986952, 2, {1003,984}},
+{ 986960, 2, {1040,949}},
+{ 986970, 2, {1002,985}},
+{ 986975, 2, {1067,925}},
+{ 986976, 2, {1104,894}},
+{ 986986, 2, {1001,986}},
+{ 986988, 2, {1059,932}},
+{ 987000, 2, {1000,987}},
+{ 987012, 2, {999,988}},
+{ 987040, 2, {995,992}},
+{ 987072, 2, {1164,848}},
+{ 987075, 2, {1025,963}},
+{ 987105, 2, {1185,833}},
+{ 987129, 2, {1287,767}},
+{ 987160, 2, {1073,920}},
+{ 987184, 2, {1136,869}},
+{ 987216, 2, {1048,942}},
+{ 987224, 2, {1037,952}},
+{ 987228, 2, {1108,891}},
+{ 987275, 2, {1717,575}},
+{ 987285, 2, {1079,915}},
+{ 987312, 2, {1072,921}},
+{ 987444, 2, {1107,892}},
+{ 987450, 2, {1135,870}},
+{ 987480, 2, {1055,936}},
+{ 987525, 2, {1045,945}},
+{ 987624, 2, {1032,957}},
+{ 987696, 2, {1083,912}},
+{ 987700, 2, {1162,850}},
+{ 987714, 2, {1053,938}},
+{ 987753, 2, {1209,817}},
+{ 987770, 2, {1030,959}},
+{ 987828, 2, {1052,939}},
+{ 987840, 2, {1008,980}},
+{ 987870, 2, {1105,894}},
+{ 987900, 2, {1068,925}},
+{ 987996, 2, {1124,879}},
+{ 988000, 2, {1000,988}},
+{ 988011, 2, {999,989}},
+{ 988032, 2, {996,992}},
+{ 988057, 2, {2261,437}},
+{ 988078, 2, {1157,854}},
+{ 988080, 2, {1074,920}},
+{ 988140, 2, {1149,860}},
+{ 988160, 2, {1024,965}},
+{ 988176, 2, {1038,952}},
+{ 988185, 2, {1243,795}},
+{ 988200, 2, {1080,915}},
+{ 988218, 2, {1023,966}},
+{ 988236, 2, {1132,873}},
+{ 988320, 2, {1065,928}},
+{ 988368, 2, {1047,944}},
+{ 988380, 2, {1020,969}},
+{ 988416, 2, {1056,936}},
+{ 988418, 2, {1369,722}},
+{ 988425, 2, {1035,955}},
+{ 988494, 2, {1102,897}},
+{ 988524, 2, {1017,972}},
+{ 988533, 2, {1071,923}},
+{ 988551, 2, {1107,893}},
+{ 988568, 2, {1016,973}},
+{ 988624, 2, {1261,784}},
+{ 988640, 2, {1184,835}},
+{ 988680, 2, {1070,924}},
+{ 988695, 2, {1143,865}},
+{ 988715, 2, {1435,689}},
+{ 988722, 2, {1062,931}},
+{ 988764, 2, {1043,948}},
+{ 988800, 2, {1030,960}},
+{ 988812, 2, {1089,908}},
+{ 988848, 2, {1008,981}},
+{ 988869, 2, {1029,961}},
+{ 988900, 2, {1100,899}},
+{ 988920, 2, {1005,984}},
+{ 988980, 2, {1060,933}},
+{ 988988, 2, {1001,988}},
+{ 988992, 2, {1088,909}},
+{ 989000, 2, {1000,989}},
+{ 989016, 2, {1176,841}},
+{ 989028, 2, {996,993}},
+{ 989040, 2, {1040,951}},
+{ 989043, 2, {1353,731}},
+{ 989121, 2, {1273,777}},
+{ 989172, 2, {1161,852}},
+{ 989175, 2, {1199,825}},
+{ 989184, 2, {1024,966}},
+{ 989196, 2, {1119,884}},
+{ 989230, 2, {1058,935}},
+{ 989235, 2, {1157,855}},
+{ 989248, 2, {1066,928}},
+{ 989253, 2, {1357,729}},
+{ 989298, 2, {1037,954}},
+{ 989352, 2, {1057,936}},
+{ 989400, 2, {1020,970}},
+{ 989417, 2, {1573,629}},
+{ 989456, 2, {1072,923}},
+{ 989460, 2, {1035,956}},
+{ 989520, 2, {1064,930}},
+{ 989541, 2, {1017,973}},
+{ 989560, 2, {1144,865}},
+{ 989604, 2, {1071,924}},
+{ 989616, 2, {1167,848}},
+{ 989625, 2, {1015,975}},
+{ 989664, 2, {1014,976}},
+{ 989688, 2, {1032,959}},
+{ 989725, 2, {1475,671}},
+{ 989740, 2, {1207,820}},
+{ 989820, 2, {1053,940}},
+{ 989828, 2, {1219,812}},
+{ 989880, 2, {1095,904}},
+{ 989898, 2, {1029,962}},
+{ 989961, 2, {1003,987}},
+{ 989964, 2, {1028,963}},
+{ 989989, 2, {1001,989}},
+{ 990000, 2, {1000,990}},
+{ 990012, 2, {1173,844}},
+{ 990036, 2, {1068,927}},
+{ 990080, 2, {1040,952}},
+{ 990090, 2, {1026,965}},
+{ 990144, 2, {1146,864}},
+{ 990150, 2, {1025,966}},
+{ 990171, 2, {1183,837}},
+{ 990176, 2, {1067,928}},
+{ 990225, 2, {1215,815}},
+{ 990264, 2, {1023,968}},
+{ 990288, 2, {1058,936}},
+{ 990360, 2, {1048,945}},
+{ 990374, 2, {1199,826}},
+{ 990423, 2, {1393,711}},
+{ 990432, 2, {1086,912}},
+{ 990437, 2, {1189,833}},
+{ 990495, 2, {1035,957}},
+{ 990510, 2, {1205,822}},
+{ 990522, 2, {1079,918}},
+{ 990528, 2, {1056,938}},
+{ 990600, 2, {1016,975}},
+{ 990605, 2, {1085,913}},
+{ 990640, 2, {1015,976}},
+{ 990660, 2, {1045,948}},
+{ 990675, 2, {1071,925}},
+{ 990698, 2, {1102,899}},
+{ 990720, 2, {1032,960}},
+{ 990756, 2, {1044,949}},
+{ 990765, 2, {1107,895}},
+{ 990780, 2, {1011,980}},
+{ 990792, 2, {1112,891}},
+{ 990840, 2, {1077,920}},
+{ 990850, 2, {1043,950}},
+{ 990855, 2, {1135,873}},
+{ 990888, 2, {1007,984}},
+{ 990900, 2, {1101,900}},
+{ 990912, 2, {1191,832}},
+{ 990948, 2, {1004,987}},
+{ 990964, 2, {1003,988}},
+{ 990976, 2, {1106,896}},
+{ 990990, 2, {1001,990}},
+{ 990996, 2, {1076,921}},
+{ 991008, 2, {999,992}},
+{ 991020, 2, {996,995}},
+{ 991032, 2, {1041,952}},
+{ 991040, 2, {1216,815}},
+{ 991089, 2, {1269,781}},
+{ 991104, 2, {1068,928}},
+{ 991116, 2, {1026,966}},
+{ 991134, 2, {1343,738}},
+{ 991200, 2, {1050,944}},
+{ 991224, 2, {1059,936}},
+{ 991230, 2, {1110,893}},
+{ 991232, 2, {1024,968}},
+{ 991248, 2, {1158,856}},
+{ 991250, 2, {1250,793}},
+{ 991272, 2, {1203,824}},
+{ 991290, 2, {1038,955}},
+{ 991312, 2, {1169,848}},
+{ 991375, 2, {1133,875}},
+{ 991380, 2, {1066,930}},
+{ 991440, 2, {1020,972}},
+{ 991452, 2, {1036,957}},
+{ 991464, 2, {1137,872}},
+{ 991512, 2, {1128,879}},
+{ 991515, 2, {1065,931}},
+{ 991584, 2, {1056,939}},
+{ 991600, 2, {1072,925}},
+{ 991683, 2, {1113,891}},
+{ 991705, 2, {1045,949}},
+{ 991728, 2, {1136,873}},
+{ 991760, 2, {1012,980}},
+{ 991800, 2, {1044,950}},
+{ 991809, 2, {1211,819}},
+{ 991845, 2, {1185,837}},
+{ 991860, 2, {1084,915}},
+{ 991875, 2, {1587,625}},
+{ 991880, 2, {1096,905}},
+{ 991914, 2, {1243,798}},
+{ 991956, 2, {1029,964}},
+{ 992028, 2, {1083,916}},
+{ 992061, 2, {1267,783}},
+{ 992082, 2, {1027,966}},
+{ 992124, 2, {1116,889}},
+{ 992160, 2, {1040,954}},
+{ 992200, 2, {1025,968}},
+{ 992225, 2, {1075,923}},
+{ 992256, 2, {1024,969}},
+{ 992264, 2, {1222,812}},
+{ 992358, 2, {1081,918}},
+{ 992409, 2, {1037,957}},
+{ 992425, 2, {1325,749}},
+{ 992446, 2, {1066,931}},
+{ 992460, 2, {1020,973}},
+{ 992496, 2, {1104,899}},
+{ 992508, 2, {1133,876}},
+{ 992556, 2, {1047,948}},
+{ 992565, 2, {1035,959}},
+{ 992580, 2, {1065,932}},
+{ 992592, 2, {1017,976}},
+{ 992628, 2, {1092,909}},
+{ 992640, 2, {1034,960}},
+{ 992670, 2, {1015,978}},
+{ 992680, 2, {1079,920}},
+{ 992712, 2, {1064,933}},
+{ 992736, 2, {1149,864}},
+{ 992772, 2, {1012,981}},
+{ 992796, 2, {1113,892}},
+{ 992800, 2, {1168,850}},
+{ 992844, 2, {1044,951}},
+{ 992880, 2, {1008,985}},
+{ 992902, 2, {1007,986}},
+{ 992936, 2, {1043,952}},
+{ 992940, 2, {1005,988}},
+{ 992960, 2, {1070,928}},
+{ 992970, 2, {1003,990}},
+{ 992976, 2, {1096,906}},
+{ 992979, 2, {1053,943}},
+{ 992992, 2, {1001,992}},
+{ 993000, 2, {1000,993}},
+{ 993006, 2, {999,994}},
+{ 993168, 2, {1026,968}},
+{ 993200, 2, {1040,955}},
+{ 993265, 2, {1295,767}},
+{ 993280, 2, {1024,970}},
+{ 993300, 2, {1050,946}},
+{ 993328, 2, {1267,784}},
+{ 993344, 2, {1088,913}},
+{ 993377, 2, {1067,931}},
+{ 993384, 2, {1022,972}},
+{ 993395, 2, {1105,899}},
+{ 993408, 2, {1194,832}},
+{ 993450, 2, {1074,925}},
+{ 993465, 2, {1115,891}},
+{ 993472, 2, {1216,817}},
+{ 993496, 2, {1099,904}},
+{ 993510, 2, {1162,855}},
+{ 993531, 2, {1173,847}},
+{ 993538, 2, {1339,742}},
+{ 993580, 2, {1057,940}},
+{ 993600, 2, {1035,960}},
+{ 993648, 2, {1016,978}},
+{ 993650, 2, {1169,850}},
+{ 993672, 2, {1119,888}},
+{ 993685, 2, {1015,979}},
+{ 993720, 2, {1014,980}},
+{ 993744, 2, {1072,927}},
+{ 993810, 2, {1055,942}},
+{ 993816, 2, {1032,963}},
+{ 993840, 2, {1010,984}},
+{ 993876, 2, {1108,897}},
+{ 993888, 2, {1008,986}},
+{ 993909, 2, {1007,987}},
+{ 993922, 2, {1054,943}},
+{ 993984, 2, {1002,992}},
+{ 994000, 2, {1000,994}},
+{ 994005, 2, {999,995}},
+{ 994015, 2, {1643,605}},
+{ 994032, 2, {1053,944}},
+{ 994050, 2, {1175,846}},
+{ 994080, 2, {1090,912}},
+{ 994128, 2, {1112,894}},
+{ 994136, 2, {1027,968}},
+{ 994140, 2, {1052,945}},
+{ 994260, 2, {1095,908}},
+{ 994280, 2, {1060,938}},
+{ 994284, 2, {1167,852}},
+{ 994290, 2, {1265,786}},
+{ 994308, 2, {1068,931}},
+{ 994356, 2, {1023,972}},
+{ 994422, 2, {1159,858}},
+{ 994449, 2, {1147,867}},
+{ 994500, 2, {1020,975}},
+{ 994560, 2, {1036,960}},
+{ 994590, 2, {1285,774}},
+{ 994635, 2, {1035,961}},
+{ 994680, 2, {1080,921}},
+{ 994704, 2, {1104,901}},
+{ 994740, 2, {1124,885}},
+{ 994752, 2, {1056,942}},
+{ 994824, 2, {1011,984}},
+{ 994840, 2, {1045,952}},
+{ 994896, 2, {1008,987}},
+{ 994903, 2, {1183,841}},
+{ 994916, 2, {1007,988}},
+{ 994917, 2, {1239,803}},
+{ 994950, 2, {1005,990}},
+{ 994952, 2, {1141,872}},
+{ 994976, 2, {1003,992}},
+{ 995000, 2, {1000,995}},
+{ 995004, 2, {999,996}},
+{ 995022, 2, {1043,954}},
+{ 995028, 2, {1132,879}},
+{ 995072, 2, {1196,832}},
+{ 995076, 2, {1179,844}},
+{ 995136, 2, {1136,876}},
+{ 995148, 2, {1077,924}},
+{ 995196, 2, {1041,956}},
+{ 995220, 2, {1026,970}},
+{ 995225, 2, {1175,847}},
+{ 995240, 2, {1112,895}},
+{ 995280, 2, {1040,957}},
+{ 995304, 2, {1101,904}},
+{ 995316, 2, {1148,867}},
+{ 995320, 2, {1192,835}},
+{ 995328, 2, {1024,972}},
+{ 995340, 2, {1060,939}},
+{ 995410, 2, {1178,845}},
+{ 995448, 2, {1121,888}},
+{ 995456, 2, {1111,896}},
+{ 995460, 2, {1059,940}},
+{ 995520, 2, {1020,976}},
+{ 995605, 2, {1105,901}},
+{ 995670, 2, {1035,962}},
+{ 995676, 2, {1191,836}},
+{ 995715, 2, {1015,981}},
+{ 995720, 2, {1240,803}},
+{ 995744, 2, {1073,928}},
+{ 995880, 2, {1032,965}},
+{ 995904, 2, {1008,988}},
+{ 995920, 2, {1055,944}},
+{ 996012, 2, {1137,876}},
+{ 996030, 2, {1054,945}},
+{ 996072, 2, {1029,968}},
+{ 996075, 2, {1165,855}},
+{ 996084, 2, {1203,828}},
+{ 996093, 2, {1141,873}},
+{ 996132, 2, {1028,969}},
+{ 996138, 2, {1053,946}},
+{ 996150, 2, {1145,870}},
+{ 996156, 2, {1062,938}},
+{ 996165, 2, {1269,785}},
+{ 996170, 2, {1070,931}},
+{ 996177, 2, {1157,861}},
+{ 996216, 2, {1209,824}},
+{ 996255, 2, {1179,845}},
+{ 996264, 2, {1096,909}},
+{ 996300, 2, {1025,972}},
+{ 996336, 2, {1122,888}},
+{ 996352, 2, {1024,973}},
+{ 996360, 2, {1083,920}},
+{ 996424, 2, {1144,871}},
+{ 996444, 2, {1068,933}},
+{ 996450, 2, {1022,975}},
+{ 996480, 2, {1038,960}},
+{ 996525, 2, {1075,927}},
+{ 996588, 2, {1116,893}},
+{ 996611, 2, {1849,539}},
+{ 996625, 2, {1139,875}},
+{ 996630, 2, {1195,834}},
+{ 996648, 2, {1048,951}},
+{ 996660, 2, {1017,980}},
+{ 996672, 2, {1074,928}},
+{ 996696, 2, {1016,981}},
+{ 996710, 2, {1066,935}},
+{ 996740, 2, {1159,860}},
+{ 996744, 2, {1047,952}},
+{ 996759, 2, {1273,783}},
+{ 996800, 2, {1120,890}},
+{ 996810, 2, {1115,894}},
+{ 996840, 2, {1065,936}},
+{ 996912, 2, {1008,989}},
+{ 996930, 2, {1007,990}},
+{ 996960, 2, {1005,992}},
+{ 996972, 2, {1004,993}},
+{ 996975, 2, {1055,945}},
+{ 996990, 2, {1002,995}},
+{ 996996, 2, {1001,996}},
+{ 997020, 2, {1044,955}},
+{ 997101, 2, {1029,969}},
+{ 997120, 2, {1216,820}},
+{ 997150, 2, {1078,925}},
+{ 997165, 2, {1495,667}},
+{ 997248, 2, {1113,896}},
+{ 997325, 2, {1025,973}},
+{ 997326, 2, {1242,803}},
+{ 997332, 2, {1149,868}},
+{ 997360, 2, {1040,959}},
+{ 997395, 2, {1127,885}},
+{ 997407, 2, {1107,901}},
+{ 997425, 2, {1023,975}},
+{ 997452, 2, {1076,927}},
+{ 997464, 2, {1112,897}},
+{ 997472, 2, {1022,976}},
+{ 997524, 2, {1089,916}},
+{ 997542, 2, {1131,882}},
+{ 997557, 2, {1221,817}},
+{ 997594, 2, {1037,962}},
+{ 997600, 2, {1075,928}},
+{ 997668, 2, {1036,963}},
+{ 997740, 2, {1035,964}},
+{ 997766, 2, {1178,847}},
+{ 997776, 2, {1014,984}},
+{ 997808, 2, {1057,944}},
+{ 997832, 2, {1012,986}},
+{ 997864, 2, {1211,824}},
+{ 997890, 2, {1073,930}},
+{ 997899, 2, {1159,861}},
+{ 997920, 2, {1008,990}},
+{ 997983, 2, {1519,657}},
+{ 998075, 2, {1079,925}},
+{ 998148, 2, {1119,892}},
+{ 998165, 2, {1501,665}},
+{ 998172, 2, {1071,932}},
+{ 998200, 2, {1085,920}},
+{ 998223, 2, {1173,851}},
+{ 998244, 2, {1027,972}},
+{ 998260, 2, {1349,740}},
+{ 998298, 2, {1026,973}},
+{ 998325, 2, {1275,783}},
+{ 998364, 2, {1084,921}},
+{ 998374, 2, {1118,893}},
+{ 998375, 2, {1141,875}},
+{ 998400, 2, {1024,975}},
+{ 998448, 2, {1023,976}},
+{ 998460, 2, {1161,860}},
+{ 998544, 2, {1136,879}},
+{ 998580, 2, {1020,979}},
+{ 998613, 2, {1089,917}},
+{ 998640, 2, {1095,912}},
+{ 998712, 2, {1067,936}},
+{ 998739, 2, {1337,747}},
+{ 998760, 2, {1015,984}},
+{ 998767, 2, {1199,833}},
+{ 998775, 2, {1035,965}},
+{ 998784, 2, {1088,918}},
+{ 998790, 2, {1014,985}},
+{ 998811, 2, {1121,891}},
+{ 998816, 2, {1274,784}},
+{ 998844, 2, {1012,987}},
+{ 998865, 2, {1057,945}},
+{ 998868, 2, {1011,988}},
+{ 998920, 2, {1105,904}},
+{ 998944, 2, {1007,992}},
+{ 998952, 2, {1167,856}},
+{ 998963, 2, {1073,931}},
+{ 998970, 2, {1005,994}},
+{ 998985, 2, {1417,705}},
+{ 998991, 2, {1099,909}},
+{ 999000, 2, {1000,999}},
+{ 999005, 2, {1241,805}},
+{ 999040, 2, {1115,896}},
+{ 999096, 2, {1064,939}},
+{ 999108, 2, {1044,957}},
+{ 999120, 2, {1086,920}},
+{ 999180, 2, {1092,915}},
+{ 999297, 2, {1053,949}},
+{ 999312, 2, {1146,872}},
+{ 999320, 2, {1162,860}},
+{ 999350, 2, {1150,869}},
+{ 999360, 2, {1041,960}},
+{ 999362, 2, {1547,646}},
+{ 999372, 2, {1243,804}},
+{ 999396, 2, {1173,852}},
+{ 999440, 2, {1040,961}},
+{ 999456, 2, {1077,928}},
+{ 999460, 2, {1180,847}},
+{ 999495, 2, {1169,855}},
+{ 999502, 2, {1457,686}},
+{ 999530, 2, {1090,917}},
+{ 999570, 2, {1165,858}},
+{ 999585, 2, {1145,873}},
+{ 999621, 2, {1107,903}},
+{ 999696, 2, {1059,944}},
+{ 999708, 2, {1101,908}},
+{ 999735, 2, {1095,913}},
+{ 999750, 2, {1075,930}},
+{ 999792, 2, {1048,954}},
+{ 999804, 2, {1014,986}},
+{ 999845, 2, {1715,583}},
+{ 999900, 2, {1010,990}},
+{ 999915, 2, {1335,749}},
+{ 999925, 2, {1081,925}},
+{ 999999, 2, {1001,999}},
+{ 432, 3, {9,8,6}},
+{ 504, 3, {9,8,7}},
+{ 576, 3, {9,8,8}},
+{ 648, 3, {9,9,8}},
+{ 720, 3, {10,9,8}},
+{ 792, 3, {11,9,8}},
+{ 864, 3, {12,9,8}},
+{ 936, 3, {13,9,8}},
+{ 1224, 3, {17,9,8}},
+{ 1368, 3, {19,9,8}},
+{ 1620, 3, {15,12,9}},
+{ 1656, 3, {23,9,8}},
+{ 1800, 3, {15,12,10}},
+{ 1980, 3, {15,12,11}},
+{ 2088, 3, {29,9,8}},
+{ 2160, 3, {15,12,12}},
+{ 2232, 3, {31,9,8}},
+{ 2340, 3, {15,13,12}},
+{ 2400, 3, {16,15,10}},
+{ 2520, 3, {15,14,12}},
+{ 2640, 3, {16,15,11}},
+{ 2664, 3, {37,9,8}},
+{ 2700, 3, {15,15,12}},
+{ 2880, 3, {16,15,12}},
+{ 2952, 3, {41,9,8}},
+{ 3060, 3, {17,15,12}},
+{ 3096, 3, {43,9,8}},
+{ 3120, 3, {16,15,13}},
+{ 3168, 3, {18,16,11}},
+{ 3240, 3, {18,15,12}},
+{ 3360, 3, {16,15,14}},
+{ 3384, 3, {47,9,8}},
+{ 3420, 3, {19,15,12}},
+{ 3456, 3, {18,16,12}},
+{ 3600, 3, {16,15,15}},
+{ 3744, 3, {18,16,13}},
+{ 3816, 3, {53,9,8}},
+{ 3840, 3, {16,16,15}},
+{ 4032, 3, {18,16,14}},
+{ 4080, 3, {17,16,15}},
+{ 4140, 3, {23,15,12}},
+{ 4248, 3, {59,9,8}},
+{ 4320, 3, {18,16,15}},
+{ 4368, 3, {21,16,13}},
+{ 4392, 3, {61,9,8}},
+{ 4560, 3, {19,16,15}},
+{ 4608, 3, {18,16,16}},
+{ 4704, 3, {21,16,14}},
+{ 4800, 3, {20,16,15}},
+{ 4824, 3, {67,9,8}},
+{ 4896, 3, {18,17,16}},
+{ 5040, 3, {21,16,15}},
+{ 5112, 3, {71,9,8}},
+{ 5184, 3, {18,18,16}},
+{ 5220, 3, {29,15,12}},
+{ 5256, 3, {73,9,8}},
+{ 5280, 3, {22,16,15}},
+{ 5376, 3, {21,16,16}},
+{ 5460, 3, {21,20,13}},
+{ 5472, 3, {19,18,16}},
+{ 5520, 3, {23,16,15}},
+{ 5580, 3, {31,15,12}},
+{ 5688, 3, {79,9,8}},
+{ 5712, 3, {21,17,16}},
+{ 5760, 3, {20,18,16}},
+{ 5880, 3, {21,20,14}},
+{ 5976, 3, {83,9,8}},
+{ 6048, 3, {21,18,16}},
+{ 6240, 3, {26,16,15}},
+{ 6300, 3, {21,20,15}},
+{ 6336, 3, {22,18,16}},
+{ 6384, 3, {21,19,16}},
+{ 6408, 3, {89,9,8}},
+{ 6552, 3, {24,21,13}},
+{ 6624, 3, {23,18,16}},
+{ 6660, 3, {37,15,12}},
+{ 6720, 3, {21,20,16}},
+{ 6750, 3, {25,18,15}},
+{ 6912, 3, {24,18,16}},
+{ 6960, 3, {29,16,15}},
+{ 6984, 3, {97,9,8}},
+{ 7056, 3, {21,21,16}},
+{ 7140, 3, {21,20,17}},
+{ 7272, 3, {101,9,8}},
+{ 7380, 3, {41,15,12}},
+{ 7392, 3, {22,21,16}},
+{ 7416, 3, {103,9,8}},
+{ 7425, 3, {27,25,11}},
+{ 7440, 3, {31,16,15}},
+{ 7488, 3, {26,18,16}},
+{ 7560, 3, {21,20,18}},
+{ 7650, 3, {25,18,17}},
+{ 7704, 3, {107,9,8}},
+{ 7728, 3, {23,21,16}},
+{ 7740, 3, {43,15,12}},
+{ 7848, 3, {109,9,8}},
+{ 7980, 3, {21,20,19}},
+{ 8064, 3, {24,21,16}},
+{ 8100, 3, {25,18,18}},
+{ 8136, 3, {113,9,8}},
+{ 8352, 3, {29,18,16}},
+{ 8400, 3, {21,20,20}},
+{ 8460, 3, {47,15,12}},
+{ 8550, 3, {25,19,18}},
+{ 8568, 3, {24,21,17}},
+{ 8736, 3, {26,21,16}},
+{ 8775, 3, {27,25,13}},
+{ 8820, 3, {21,21,20}},
+{ 8880, 3, {37,16,15}},
+{ 8928, 3, {31,18,16}},
+{ 9000, 3, {25,20,18}},
+{ 9072, 3, {24,21,18}},
+{ 9144, 3, {127,9,8}},
+{ 9180, 3, {27,20,17}},
+{ 9240, 3, {22,21,20}},
+{ 9408, 3, {28,21,16}},
+{ 9432, 3, {131,9,8}},
+{ 9450, 3, {25,21,18}},
+{ 9540, 3, {53,15,12}},
+{ 9576, 3, {24,21,19}},
+{ 9660, 3, {23,21,20}},
+{ 9720, 3, {27,20,18}},
+{ 9744, 3, {29,21,16}},
+{ 9840, 3, {41,16,15}},
+{ 9864, 3, {137,9,8}},
+{ 9900, 3, {25,22,18}},
+{ 10008, 3, {139,9,8}},
+{ 10080, 3, {24,21,20}},
+{ 10125, 3, {27,25,15}},
+{ 10200, 3, {25,24,17}},
+{ 10260, 3, {27,20,19}},
+{ 10320, 3, {43,16,15}},
+{ 10350, 3, {25,23,18}},
+{ 10416, 3, {31,21,16}},
+{ 10500, 3, {25,21,20}},
+{ 10584, 3, {24,21,21}},
+{ 10620, 3, {59,15,12}},
+{ 10656, 3, {37,18,16}},
+{ 10728, 3, {149,9,8}},
+{ 10800, 3, {27,20,20}},
+{ 10872, 3, {151,9,8}},
+{ 10920, 3, {26,21,20}},
+{ 10980, 3, {61,15,12}},
+{ 11016, 3, {27,24,17}},
+{ 11088, 3, {24,22,21}},
+{ 11250, 3, {25,25,18}},
+{ 11280, 3, {47,16,15}},
+{ 11304, 3, {157,9,8}},
+{ 11340, 3, {27,21,20}},
+{ 11400, 3, {25,24,19}},
+{ 11475, 3, {27,25,17}},
+{ 11592, 3, {24,23,21}},
+{ 11664, 3, {27,24,18}},
+{ 11700, 3, {26,25,18}},
+{ 11736, 3, {163,9,8}},
+{ 11760, 3, {28,21,20}},
+{ 11808, 3, {41,18,16}},
+{ 11880, 3, {27,22,20}},
+{ 12000, 3, {25,24,20}},
+{ 12024, 3, {167,9,8}},
+{ 12060, 3, {67,15,12}},
+{ 12096, 3, {24,24,21}},
+{ 12150, 3, {27,25,18}},
+{ 12180, 3, {29,21,20}},
+{ 12240, 3, {30,24,17}},
+{ 12285, 3, {35,27,13}},
+{ 12312, 3, {27,24,19}},
+{ 12384, 3, {43,18,16}},
+{ 12420, 3, {27,23,20}},
+{ 12432, 3, {37,21,16}},
+{ 12456, 3, {173,9,8}},
+{ 12600, 3, {25,24,21}},
+{ 12720, 3, {53,16,15}},
+{ 12780, 3, {71,15,12}},
+{ 12825, 3, {27,25,19}},
+{ 12852, 3, {28,27,17}},
+{ 12888, 3, {179,9,8}},
+{ 12960, 3, {27,24,20}},
+{ 13020, 3, {31,21,20}},
+{ 13032, 3, {181,9,8}},
+{ 13050, 3, {29,25,18}},
+{ 13104, 3, {26,24,21}},
+{ 13140, 3, {73,15,12}},
+{ 13200, 3, {25,24,22}},
+{ 13500, 3, {27,25,20}},
+{ 13536, 3, {47,18,16}},
+{ 13608, 3, {27,24,21}},
+{ 13680, 3, {30,24,19}},
+{ 13752, 3, {191,9,8}},
+{ 13776, 3, {41,21,16}},
+{ 13800, 3, {25,24,23}},
+{ 13896, 3, {193,9,8}},
+{ 13950, 3, {31,25,18}},
+{ 14040, 3, {27,26,20}},
+{ 14112, 3, {28,24,21}},
+{ 14160, 3, {59,16,15}},
+{ 14175, 3, {27,25,21}},
+{ 14184, 3, {197,9,8}},
+{ 14220, 3, {79,15,12}},
+{ 14256, 3, {27,24,22}},
+{ 14328, 3, {199,9,8}},
+{ 14364, 3, {28,27,19}},
+{ 14400, 3, {25,24,24}},
+{ 14448, 3, {43,21,16}},
+{ 14580, 3, {27,27,20}},
+{ 14616, 3, {29,24,21}},
+{ 14640, 3, {61,16,15}},
+{ 14688, 3, {32,27,17}},
+{ 14850, 3, {27,25,22}},
+{ 14904, 3, {27,24,23}},
+{ 14940, 3, {83,15,12}},
+{ 15000, 3, {25,25,24}},
+{ 15048, 3, {33,24,19}},
+{ 15120, 3, {28,27,20}},
+{ 15192, 3, {211,9,8}},
+{ 15200, 3, {32,25,19}},
+{ 15264, 3, {53,18,16}},
+{ 15525, 3, {27,25,23}},
+{ 15540, 3, {37,21,20}},
+{ 15552, 3, {27,24,24}},
+{ 15600, 3, {26,25,24}},
+{ 15624, 3, {31,24,21}},
+{ 15660, 3, {29,27,20}},
+{ 15792, 3, {47,21,16}},
+{ 15840, 3, {30,24,22}},
+{ 15876, 3, {28,27,21}},
+{ 16000, 3, {32,25,20}},
+{ 16020, 3, {89,15,12}},
+{ 16056, 3, {223,9,8}},
+{ 16065, 3, {35,27,17}},
+{ 16080, 3, {67,16,15}},
+{ 16200, 3, {27,25,24}},
+{ 16344, 3, {227,9,8}},
+{ 16416, 3, {32,27,19}},
+{ 16488, 3, {229,9,8}},
+{ 16560, 3, {30,24,23}},
+{ 16632, 3, {28,27,22}},
+{ 16650, 3, {37,25,18}},
+{ 16740, 3, {31,27,20}},
+{ 16776, 3, {233,9,8}},
+{ 16800, 3, {28,25,24}},
+{ 16848, 3, {27,26,24}},
+{ 16875, 3, {27,25,25}},
+{ 16992, 3, {59,18,16}},
+{ 17040, 3, {71,16,15}},
+{ 17136, 3, {34,24,21}},
+{ 17208, 3, {239,9,8}},
+{ 17220, 3, {41,21,20}},
+{ 17280, 3, {30,24,24}},
+{ 17352, 3, {241,9,8}},
+{ 17388, 3, {28,27,23}},
+{ 17400, 3, {29,25,24}},
+{ 17424, 3, {33,24,22}},
+{ 17460, 3, {97,15,12}},
+{ 17496, 3, {27,27,24}},
+{ 17520, 3, {73,16,15}},
+{ 17550, 3, {27,26,25}},
+{ 17556, 3, {33,28,19}},
+{ 17568, 3, {61,18,16}},
+{ 17600, 3, {32,25,22}},
+{ 17808, 3, {53,21,16}},
+{ 17955, 3, {35,27,19}},
+{ 18000, 3, {30,25,24}},
+{ 18060, 3, {43,21,20}},
+{ 18072, 3, {251,9,8}},
+{ 18144, 3, {28,27,24}},
+{ 18180, 3, {101,15,12}},
+{ 18216, 3, {33,24,23}},
+{ 18225, 3, {27,27,25}},
+{ 18240, 3, {32,30,19}},
+{ 18360, 3, {34,27,20}},
+{ 18400, 3, {32,25,23}},
+{ 18450, 3, {41,25,18}},
+{ 18504, 3, {257,9,8}},
+{ 18540, 3, {103,15,12}},
+{ 18600, 3, {31,25,24}},
+{ 18648, 3, {37,24,21}},
+{ 18720, 3, {30,26,24}},
+{ 18792, 3, {29,27,24}},
+{ 18900, 3, {28,27,25}},
+{ 18936, 3, {263,9,8}},
+{ 18960, 3, {79,16,15}},
+{ 19008, 3, {33,24,24}},
+{ 19152, 3, {38,24,21}},
+{ 19200, 3, {32,25,24}},
+{ 19260, 3, {107,15,12}},
+{ 19296, 3, {67,18,16}},
+{ 19350, 3, {43,25,18}},
+{ 19368, 3, {269,9,8}},
+{ 19404, 3, {33,28,21}},
+{ 19440, 3, {30,27,24}},
+{ 19512, 3, {271,9,8}},
+{ 19575, 3, {29,27,25}},
+{ 19620, 3, {109,15,12}},
+{ 19656, 3, {28,27,26}},
+{ 19740, 3, {47,21,20}},
+{ 19824, 3, {59,21,16}},
+{ 19845, 3, {35,27,21}},
+{ 19872, 3, {32,27,23}},
+{ 19920, 3, {83,16,15}},
+{ 19944, 3, {277,9,8}},
+{ 19950, 3, {35,30,19}},
+{ 19980, 3, {37,27,20}},
+{ 20000, 3, {32,25,25}},
+{ 20064, 3, {33,32,19}},
+{ 20088, 3, {31,27,24}},
+{ 20160, 3, {30,28,24}},
+{ 20232, 3, {281,9,8}},
+{ 20250, 3, {30,27,25}},
+{ 20328, 3, {33,28,22}},
+{ 20340, 3, {113,15,12}},
+{ 20376, 3, {283,9,8}},
+{ 20400, 3, {34,25,24}},
+{ 20412, 3, {28,27,27}},
+{ 20448, 3, {71,18,16}},
+{ 20496, 3, {61,21,16}},
+{ 20592, 3, {33,26,24}},
+{ 20664, 3, {41,24,21}},
+{ 20736, 3, {32,27,24}},
+{ 20800, 3, {32,26,25}},
+{ 20880, 3, {30,29,24}},
+{ 20925, 3, {31,27,25}},
+{ 21024, 3, {73,18,16}},
+{ 21096, 3, {293,9,8}},
+{ 21120, 3, {32,30,22}},
+{ 21150, 3, {47,25,18}},
+{ 21168, 3, {28,28,27}},
+{ 21252, 3, {33,28,23}},
+{ 21280, 3, {35,32,19}},
+{ 21360, 3, {89,16,15}},
+{ 21384, 3, {33,27,24}},
+{ 21600, 3, {30,30,24}},
+{ 21672, 3, {43,24,21}},
+{ 21735, 3, {35,27,23}},
+{ 21924, 3, {29,28,27}},
+{ 22032, 3, {34,27,24}},
+{ 22050, 3, {35,30,21}},
+{ 22080, 3, {32,30,23}},
+{ 22104, 3, {307,9,8}},
+{ 22140, 3, {41,27,20}},
+{ 22176, 3, {33,28,24}},
+{ 22200, 3, {37,25,24}},
+{ 22260, 3, {53,21,20}},
+{ 22275, 3, {33,27,25}},
+{ 22320, 3, {31,30,24}},
+{ 22392, 3, {311,9,8}},
+{ 22400, 3, {32,28,25}},
+{ 22464, 3, {32,27,26}},
+{ 22512, 3, {67,21,16}},
+{ 22536, 3, {313,9,8}},
+{ 22680, 3, {30,28,27}},
+{ 22752, 3, {79,18,16}},
+{ 22800, 3, {38,25,24}},
+{ 22824, 3, {317,9,8}},
+{ 22860, 3, {127,15,12}},
+{ 22932, 3, {39,28,21}},
+{ 22950, 3, {34,27,25}},
+{ 22968, 3, {33,29,24}},
+{ 23040, 3, {32,30,24}},
+{ 23100, 3, {33,28,25}},
+{ 23200, 3, {32,29,25}},
+{ 23220, 3, {43,27,20}},
+{ 23232, 3, {33,32,22}},
+{ 23280, 3, {97,16,15}},
+{ 23328, 3, {32,27,27}},
+{ 23436, 3, {31,28,27}},
+{ 23580, 3, {131,15,12}},
+{ 23625, 3, {35,27,25}},
+{ 23688, 3, {47,24,21}},
+{ 23760, 3, {33,30,24}},
+{ 23832, 3, {331,9,8}},
+{ 23850, 3, {53,25,18}},
+{ 23856, 3, {71,21,16}},
+{ 23904, 3, {83,18,16}},
+{ 23976, 3, {37,27,24}},
+{ 24000, 3, {32,30,25}},
+{ 24024, 3, {33,28,26}},
+{ 24150, 3, {35,30,23}},
+{ 24192, 3, {32,28,27}},
+{ 24240, 3, {101,16,15}},
+{ 24264, 3, {337,9,8}},
+{ 24288, 3, {33,32,23}},
+{ 24480, 3, {34,30,24}},
+{ 24528, 3, {73,21,16}},
+{ 24552, 3, {33,31,24}},
+{ 24570, 3, {35,27,26}},
+{ 24600, 3, {41,25,24}},
+{ 24624, 3, {38,27,24}},
+{ 24640, 3, {35,32,22}},
+{ 24660, 3, {137,15,12}},
+{ 24720, 3, {103,16,15}},
+{ 24780, 3, {59,21,20}},
+{ 24800, 3, {32,31,25}},
+{ 24948, 3, {33,28,27}},
+{ 24960, 3, {32,30,26}},
+{ 24975, 3, {37,27,25}},
+{ 24984, 3, {347,9,8}},
+{ 25020, 3, {139,15,12}},
+{ 25056, 3, {32,29,27}},
+{ 25116, 3, {39,28,23}},
+{ 25128, 3, {349,9,8}},
+{ 25137, 3, {49,27,19}},
+{ 25344, 3, {33,32,24}},
+{ 25380, 3, {47,27,20}},
+{ 25416, 3, {353,9,8}},
+{ 25515, 3, {35,27,27}},
+{ 25600, 3, {32,32,25}},
+{ 25620, 3, {61,21,20}},
+{ 25632, 3, {89,18,16}},
+{ 25650, 3, {38,27,25}},
+{ 25680, 3, {107,16,15}},
+{ 25704, 3, {34,28,27}},
+{ 25760, 3, {35,32,23}},
+{ 25800, 3, {43,25,24}},
+{ 25848, 3, {359,9,8}},
+{ 25872, 3, {33,28,28}},
+{ 25920, 3, {32,30,27}},
+{ 26136, 3, {33,33,24}},
+{ 26160, 3, {109,16,15}},
+{ 26250, 3, {35,30,25}},
+{ 26325, 3, {39,27,25}},
+{ 26400, 3, {33,32,25}},
+{ 26424, 3, {367,9,8}},
+{ 26460, 3, {35,28,27}},
+{ 26496, 3, {36,32,23}},
+{ 26544, 3, {79,21,16}},
+{ 26550, 3, {59,25,18}},
+{ 26568, 3, {41,27,24}},
+{ 26640, 3, {37,30,24}},
+{ 26712, 3, {53,24,21}},
+{ 26775, 3, {45,35,17}},
+{ 26784, 3, {32,31,27}},
+{ 26796, 3, {33,29,28}},
+{ 26820, 3, {149,15,12}},
+{ 26856, 3, {373,9,8}},
+{ 26880, 3, {32,30,28}},
+{ 26928, 3, {34,33,24}},
+{ 27120, 3, {113,16,15}},
+{ 27180, 3, {151,15,12}},
+{ 27200, 3, {34,32,25}},
+{ 27216, 3, {36,28,27}},
+{ 27288, 3, {379,9,8}},
+{ 27300, 3, {35,30,26}},
+{ 27324, 3, {36,33,23}},
+{ 27360, 3, {38,30,24}},
+{ 27405, 3, {35,29,27}},
+{ 27450, 3, {61,25,18}},
+{ 27456, 3, {33,32,26}},
+{ 27576, 3, {383,9,8}},
+{ 27648, 3, {32,32,27}},
+{ 27675, 3, {41,27,25}},
+{ 27720, 3, {33,30,28}},
+{ 27783, 3, {49,27,21}},
+{ 27840, 3, {32,30,29}},
+{ 27864, 3, {43,27,24}},
+{ 27888, 3, {83,21,16}},
+{ 27936, 3, {97,18,16}},
+{ 27972, 3, {37,28,27}},
+{ 28000, 3, {35,32,25}},
+{ 28008, 3, {389,9,8}},
+{ 28140, 3, {67,21,20}},
+{ 28200, 3, {47,25,24}},
+{ 28260, 3, {157,15,12}},
+{ 28350, 3, {35,30,27}},
+{ 28392, 3, {39,28,26}},
+{ 28512, 3, {33,32,27}},
+{ 28584, 3, {397,9,8}},
+{ 28620, 3, {53,27,20}},
+{ 28644, 3, {33,31,28}},
+{ 28704, 3, {39,32,23}},
+{ 28728, 3, {38,28,27}},
+{ 28800, 3, {32,30,30}},
+{ 28872, 3, {401,9,8}},
+{ 28980, 3, {36,35,23}},
+{ 29025, 3, {43,27,25}},
+{ 29040, 3, {40,33,22}},
+{ 29088, 3, {101,18,16}},
+{ 29120, 3, {35,32,26}},
+{ 29295, 3, {35,31,27}},
+{ 29304, 3, {37,33,24}},
+{ 29340, 3, {163,15,12}},
+{ 29376, 3, {34,32,27}},
+{ 29400, 3, {35,30,28}},
+{ 29448, 3, {409,9,8}},
+{ 29484, 3, {39,28,27}},
+{ 29520, 3, {41,30,24}},
+{ 29568, 3, {33,32,28}},
+{ 29600, 3, {37,32,25}},
+{ 29664, 3, {103,18,16}},
+{ 29736, 3, {59,24,21}},
+{ 29760, 3, {32,31,30}},
+{ 29820, 3, {71,21,20}},
+{ 29904, 3, {89,21,16}},
+{ 29925, 3, {45,35,19}},
+{ 29952, 3, {36,32,26}},
+{ 30060, 3, {167,15,12}},
+{ 30096, 3, {38,33,24}},
+{ 30150, 3, {67,25,18}},
+{ 30168, 3, {419,9,8}},
+{ 30312, 3, {421,9,8}},
+{ 30360, 3, {40,33,23}},
+{ 30375, 3, {45,27,25}},
+{ 30400, 3, {38,32,25}},
+{ 30429, 3, {49,27,23}},
+{ 30450, 3, {35,30,29}},
+{ 30456, 3, {47,27,24}},
+{ 30480, 3, {127,16,15}},
+{ 30492, 3, {33,33,28}},
+{ 30576, 3, {39,28,28}},
+{ 30624, 3, {33,32,29}},
+{ 30660, 3, {73,21,20}},
+{ 30720, 3, {32,32,30}},
+{ 30744, 3, {61,24,21}},
+{ 30800, 3, {40,35,22}},
+{ 30816, 3, {107,18,16}},
+{ 30888, 3, {36,33,26}},
+{ 30912, 3, {42,32,23}},
+{ 30960, 3, {43,30,24}},
+{ 30996, 3, {41,28,27}},
+{ 31032, 3, {431,9,8}},
+{ 31050, 3, {46,27,25}},
+{ 31104, 3, {36,32,27}},
+{ 31140, 3, {173,15,12}},
+{ 31176, 3, {433,9,8}},
+{ 31185, 3, {35,33,27}},
+{ 31360, 3, {35,32,28}},
+{ 31392, 3, {109,18,16}},
+{ 31416, 3, {34,33,28}},
+{ 31440, 3, {131,16,15}},
+{ 31500, 3, {35,30,30}},
+{ 31608, 3, {439,9,8}},
+{ 31668, 3, {39,29,28}},
+{ 31680, 3, {33,32,30}},
+{ 31725, 3, {47,27,25}},
+{ 31752, 3, {42,28,27}},
+{ 31800, 3, {53,25,24}},
+{ 31860, 3, {59,27,20}},
+{ 31896, 3, {443,9,8}},
+{ 31950, 3, {71,25,18}},
+{ 31968, 3, {37,32,27}},
+{ 32000, 3, {40,32,25}},
+{ 32076, 3, {36,33,27}},
+{ 32130, 3, {35,34,27}},
+{ 32200, 3, {40,35,23}},
+{ 32220, 3, {179,15,12}},
+{ 32256, 3, {36,32,28}},
+{ 32292, 3, {39,36,23}},
+{ 32328, 3, {449,9,8}},
+{ 32340, 3, {35,33,28}},
+{ 32448, 3, {39,32,26}},
+{ 32472, 3, {41,33,24}},
+{ 32480, 3, {35,32,29}},
+{ 32508, 3, {43,28,27}},
+{ 32544, 3, {113,18,16}},
+{ 32550, 3, {35,31,30}},
+{ 32580, 3, {181,15,12}},
+{ 32592, 3, {97,21,16}},
+{ 32640, 3, {34,32,30}},
+{ 32736, 3, {33,32,31}},
+{ 32760, 3, {36,35,26}},
+{ 32800, 3, {41,32,25}},
+{ 32832, 3, {38,32,27}},
+{ 32850, 3, {73,25,18}},
+{ 32880, 3, {137,16,15}},
+{ 32904, 3, {457,9,8}},
+{ 32940, 3, {61,27,20}},
+{ 33000, 3, {40,33,25}},
+{ 33075, 3, {35,35,27}},
+{ 33180, 3, {79,21,20}},
+{ 33192, 3, {461,9,8}},
+{ 33264, 3, {36,33,28}},
+{ 33336, 3, {463,9,8}},
+{ 33360, 3, {139,16,15}},
+{ 33408, 3, {36,32,29}},
+{ 33600, 3, {35,32,30}},
+{ 33624, 3, {467,9,8}},
+{ 33768, 3, {67,24,21}},
+{ 33792, 3, {33,32,32}},
+{ 33840, 3, {47,30,24}},
+{ 33852, 3, {39,31,28}},
+{ 33936, 3, {101,21,16}},
+{ 34020, 3, {36,35,27}},
+{ 34056, 3, {43,33,24}},
+{ 34188, 3, {37,33,28}},
+{ 34320, 3, {40,33,26}},
+{ 34344, 3, {53,27,24}},
+{ 34380, 3, {191,15,12}},
+{ 34400, 3, {43,32,25}},
+{ 34425, 3, {51,27,25}},
+{ 34452, 3, {36,33,29}},
+{ 34488, 3, {479,9,8}},
+{ 34560, 3, {36,32,30}},
+{ 34608, 3, {103,21,16}},
+{ 34650, 3, {35,33,30}},
+{ 34720, 3, {35,32,31}},
+{ 34740, 3, {193,15,12}},
+{ 34776, 3, {46,28,27}},
+{ 34848, 3, {33,33,32}},
+{ 34860, 3, {83,21,20}},
+{ 34944, 3, {39,32,28}},
+{ 34965, 3, {37,35,27}},
+{ 35000, 3, {40,35,25}},
+{ 35064, 3, {487,9,8}},
+{ 35112, 3, {38,33,28}},
+{ 35280, 3, {36,35,28}},
+{ 35352, 3, {491,9,8}},
+{ 35400, 3, {59,25,24}},
+{ 35424, 3, {41,32,27}},
+{ 35460, 3, {197,15,12}},
+{ 35520, 3, {37,32,30}},
+{ 35532, 3, {47,28,27}},
+{ 35550, 3, {79,25,18}},
+{ 35640, 3, {36,33,30}},
+{ 35700, 3, {35,34,30}},
+{ 35712, 3, {36,32,31}},
+{ 35721, 3, {49,27,27}},
+{ 35760, 3, {149,16,15}},
+{ 35775, 3, {53,27,25}},
+{ 35784, 3, {71,24,21}},
+{ 35820, 3, {199,15,12}},
+{ 35840, 3, {35,32,32}},
+{ 35880, 3, {40,39,23}},
+{ 35904, 3, {34,33,32}},
+{ 35910, 3, {38,35,27}},
+{ 35928, 3, {499,9,8}},
+{ 35952, 3, {107,21,16}},
+{ 36036, 3, {39,33,28}},
+{ 36180, 3, {67,27,20}},
+{ 36192, 3, {39,32,29}},
+{ 36216, 3, {503,9,8}},
+{ 36225, 3, {45,35,23}},
+{ 36240, 3, {151,16,15}},
+{ 36400, 3, {40,35,26}},
+{ 36480, 3, {38,32,30}},
+{ 36504, 3, {39,36,26}},
+{ 36540, 3, {36,35,29}},
+{ 36576, 3, {127,18,16}},
+{ 36600, 3, {61,25,24}},
+{ 36624, 3, {109,21,16}},
+{ 36648, 3, {509,9,8}},
+{ 36750, 3, {35,35,30}},
+{ 36792, 3, {73,24,21}},
+{ 36828, 3, {36,33,31}},
+{ 36855, 3, {39,35,27}},
+{ 36864, 3, {36,32,32}},
+{ 36960, 3, {35,33,32}},
+{ 37128, 3, {39,34,28}},
+{ 37152, 3, {43,32,27}},
+{ 37224, 3, {47,33,24}},
+{ 37350, 3, {83,25,18}},
+{ 37380, 3, {89,21,20}},
+{ 37440, 3, {39,32,30}},
+{ 37512, 3, {521,9,8}},
+{ 37600, 3, {47,32,25}},
+{ 37632, 3, {42,32,28}},
+{ 37656, 3, {523,9,8}},
+{ 37680, 3, {157,16,15}},
+{ 37728, 3, {131,18,16}},
+{ 37800, 3, {36,35,30}},
+{ 37884, 3, {41,33,28}},
+{ 37908, 3, {39,36,27}},
+{ 37968, 3, {113,21,16}},
+{ 37980, 3, {211,15,12}},
+{ 38016, 3, {36,33,32}},
+{ 38080, 3, {35,34,32}},
+{ 38160, 3, {53,30,24}},
+{ 38220, 3, {39,35,28}},
+{ 38232, 3, {59,27,24}},
+{ 38280, 3, {40,33,29}},
+{ 38340, 3, {71,27,20}},
+{ 38367, 3, {49,29,27}},
+{ 38400, 3, {40,32,30}},
+{ 38688, 3, {39,32,31}},
+{ 38745, 3, {41,35,27}},
+{ 38808, 3, {42,33,28}},
+{ 38850, 3, {37,35,30}},
+{ 38952, 3, {541,9,8}},
+{ 38976, 3, {42,32,29}},
+{ 39000, 3, {40,39,25}},
+{ 39060, 3, {36,35,31}},
+{ 39072, 3, {37,33,32}},
+{ 39120, 3, {163,16,15}},
+{ 39168, 3, {36,34,32}},
+{ 39200, 3, {35,35,32}},
+{ 39204, 3, {36,33,33}},
+{ 39312, 3, {39,36,28}},
+{ 39360, 3, {41,32,30}},
+{ 39375, 3, {45,35,25}},
+{ 39384, 3, {547,9,8}},
+{ 39420, 3, {73,27,20}},
+{ 39456, 3, {137,18,16}},
+{ 39528, 3, {61,27,24}},
+{ 39600, 3, {40,33,30}},
+{ 39690, 3, {42,35,27}},
+{ 39732, 3, {43,33,28}},
+{ 39744, 3, {46,32,27}},
+{ 39816, 3, {79,24,21}},
+{ 39825, 3, {59,27,25}},
+{ 39900, 3, {38,35,30}},
+{ 39936, 3, {39,32,32}},
+{ 40032, 3, {139,18,16}},
+{ 40050, 3, {89,25,18}},
+{ 40068, 3, {53,28,27}},
+{ 40080, 3, {167,16,15}},
+{ 40104, 3, {557,9,8}},
+{ 40128, 3, {38,33,32}},
+{ 40140, 3, {223,15,12}},
+{ 40200, 3, {67,25,24}},
+{ 40320, 3, {36,35,32}},
+{ 40392, 3, {36,34,33}},
+{ 40404, 3, {39,37,28}},
+{ 40536, 3, {563,9,8}},
+{ 40560, 3, {40,39,26}},
+{ 40600, 3, {40,35,29}},
+{ 40608, 3, {47,32,27}},
+{ 40635, 3, {43,35,27}},
+{ 40656, 3, {44,33,28}},
+{ 40716, 3, {39,36,29}},
+{ 40740, 3, {97,21,20}},
+{ 40768, 3, {49,32,26}},
+{ 40860, 3, {227,15,12}},
+{ 40920, 3, {40,33,31}},
+{ 40950, 3, {39,35,30}},
+{ 40968, 3, {569,9,8}},
+{ 41013, 3, {49,31,27}},
+{ 41112, 3, {571,9,8}},
+{ 41175, 3, {61,27,25}},
+{ 41184, 3, {39,33,32}},
+{ 41220, 3, {229,15,12}},
+{ 41280, 3, {43,32,30}},
+{ 41440, 3, {37,35,32}},
+{ 41472, 3, {36,36,32}},
+{ 41496, 3, {39,38,28}},
+{ 41520, 3, {173,16,15}},
+{ 41544, 3, {577,9,8}},
+{ 41580, 3, {36,35,33}},
+{ 41664, 3, {42,32,31}},
+{ 41832, 3, {83,24,21}},
+{ 41895, 3, {49,45,19}},
+{ 41940, 3, {233,15,12}},
+{ 41976, 3, {53,33,24}},
+{ 42000, 3, {40,35,30}},
+{ 42120, 3, {39,36,30}},
+{ 42240, 3, {40,33,32}},
+{ 42264, 3, {587,9,8}},
+{ 42400, 3, {53,32,25}},
+{ 42420, 3, {101,21,20}},
+{ 42432, 3, {39,34,32}},
+{ 42480, 3, {59,30,24}},
+{ 42504, 3, {46,33,28}},
+{ 42525, 3, {45,35,27}},
+{ 42560, 3, {38,35,32}},
+{ 42588, 3, {39,39,28}},
+{ 42600, 3, {71,25,24}},
+{ 42624, 3, {37,36,32}},
+{ 42660, 3, {79,27,20}},
+{ 42672, 3, {127,21,16}},
+{ 42696, 3, {593,9,8}},
+{ 42768, 3, {36,36,33}},
+{ 42840, 3, {36,35,34}},
+{ 42900, 3, {44,39,25}},
+{ 42912, 3, {149,18,16}},
+{ 42960, 3, {179,16,15}},
+{ 43008, 3, {42,32,32}},
+{ 43020, 3, {239,15,12}},
+{ 43050, 3, {41,35,30}},
+{ 43128, 3, {599,9,8}},
+{ 43260, 3, {103,21,20}},
+{ 43272, 3, {601,9,8}},
+{ 43296, 3, {41,33,32}},
+{ 43380, 3, {241,15,12}},
+{ 43400, 3, {40,35,31}},
+{ 43416, 3, {67,27,24}},
+{ 43428, 3, {47,33,28}},
+{ 43440, 3, {181,16,15}},
+{ 43470, 3, {46,35,27}},
+{ 43488, 3, {151,18,16}},
+{ 43524, 3, {39,36,31}},
+{ 43560, 3, {40,33,33}},
+{ 43650, 3, {97,25,18}},
+{ 43659, 3, {49,33,27}},
+{ 43680, 3, {39,35,32}},
+{ 43704, 3, {607,9,8}},
+{ 43740, 3, {45,36,27}},
+{ 43776, 3, {38,36,32}},
+{ 43800, 3, {73,25,24}},
+{ 43904, 3, {49,32,28}},
+{ 43920, 3, {61,30,24}},
+{ 43956, 3, {37,36,33}},
+{ 44016, 3, {131,21,16}},
+{ 44100, 3, {36,35,35}},
+{ 44136, 3, {613,9,8}},
+{ 44160, 3, {46,32,30}},
+{ 44352, 3, {42,33,32}},
+{ 44415, 3, {47,35,27}},
+{ 44424, 3, {617,9,8}},
+{ 44568, 3, {619,9,8}},
+{ 44604, 3, {59,28,27}},
+{ 44616, 3, {44,39,26}},
+{ 44772, 3, {41,39,28}},
+{ 44800, 3, {40,35,32}},
+{ 44820, 3, {83,27,20}},
+{ 44856, 3, {89,24,21}},
+{ 44880, 3, {40,34,33}},
+{ 44928, 3, {39,36,32}},
+{ 44940, 3, {107,21,20}},
+{ 44982, 3, {49,34,27}},
+{ 45120, 3, {47,32,30}},
+{ 45144, 3, {38,36,33}},
+{ 45150, 3, {43,35,30}},
+{ 45180, 3, {251,15,12}},
+{ 45216, 3, {157,18,16}},
+{ 45225, 3, {67,27,25}},
+{ 45240, 3, {40,39,29}},
+{ 45276, 3, {49,33,28}},
+{ 45360, 3, {36,36,35}},
+{ 45408, 3, {43,33,32}},
+{ 45432, 3, {631,9,8}},
+{ 45450, 3, {101,25,18}},
+{ 45472, 3, {49,32,29}},
+{ 45675, 3, {45,35,29}},
+{ 45696, 3, {42,34,32}},
+{ 45780, 3, {109,21,20}},
+{ 45792, 3, {53,32,27}},
+{ 45840, 3, {191,16,15}},
+{ 45864, 3, {42,39,28}},
+{ 45920, 3, {41,35,32}},
+{ 46008, 3, {71,27,24}},
+{ 46032, 3, {137,21,16}},
+{ 46080, 3, {40,36,32}},
+{ 46116, 3, {61,28,27}},
+{ 46152, 3, {641,9,8}},
+{ 46176, 3, {39,37,32}},
+{ 46200, 3, {40,35,33}},
+{ 46260, 3, {257,15,12}},
+{ 46296, 3, {643,9,8}},
+{ 46305, 3, {49,35,27}},
+{ 46320, 3, {193,16,15}},
+{ 46332, 3, {39,36,33}},
+{ 46350, 3, {103,25,18}},
+{ 46464, 3, {44,33,32}},
+{ 46584, 3, {647,9,8}},
+{ 46620, 3, {37,36,35}},
+{ 46704, 3, {139,21,16}},
+{ 46728, 3, {59,33,24}},
+{ 46800, 3, {40,39,30}},
+{ 46944, 3, {163,18,16}},
+{ 46956, 3, {43,39,28}},
+{ 46980, 3, {45,36,29}},
+{ 47016, 3, {653,9,8}},
+{ 47040, 3, {42,35,32}},
+{ 47200, 3, {59,32,25}},
+{ 47232, 3, {41,36,32}},
+{ 47250, 3, {45,35,30}},
+{ 47280, 3, {197,16,15}},
+{ 47304, 3, {73,27,24}},
+{ 47340, 3, {263,15,12}},
+{ 47400, 3, {79,25,24}},
+{ 47424, 3, {39,38,32}},
+{ 47448, 3, {659,9,8}},
+{ 47460, 3, {113,21,20}},
+{ 47520, 3, {40,36,33}},
+{ 47592, 3, {661,9,8}},
+{ 47600, 3, {40,35,34}},
+{ 47736, 3, {39,36,34}},
+{ 47760, 3, {199,16,15}},
+{ 47880, 3, {38,36,35}},
+{ 47925, 3, {71,27,25}},
+{ 48048, 3, {44,39,28}},
+{ 48060, 3, {89,27,20}},
+{ 48096, 3, {167,18,16}},
+{ 48150, 3, {107,25,18}},
+{ 48160, 3, {43,35,32}},
+{ 48195, 3, {51,35,27}},
+{ 48240, 3, {67,30,24}},
+{ 48300, 3, {46,35,30}},
+{ 48312, 3, {61,33,24}},
+{ 48360, 3, {40,39,31}},
+{ 48384, 3, {42,36,32}},
+{ 48420, 3, {269,15,12}},
+{ 48456, 3, {673,9,8}},
+{ 48576, 3, {46,33,32}},
+{ 48600, 3, {45,36,30}},
+{ 48608, 3, {49,32,31}},
+{ 48672, 3, {39,39,32}},
+{ 48708, 3, {41,36,33}},
+{ 48720, 3, {42,40,29}},
+{ 48744, 3, {677,9,8}},
+{ 48780, 3, {271,15,12}},
+{ 48800, 3, {61,32,25}},
+{ 48825, 3, {45,35,31}},
+{ 48840, 3, {40,37,33}},
+{ 48888, 3, {97,24,21}},
+{ 48951, 3, {49,37,27}},
+{ 48972, 3, {53,33,28}},
+{ 49000, 3, {40,35,35}},
+{ 49050, 3, {109,25,18}},
+{ 49140, 3, {39,36,35}},
+{ 49176, 3, {683,9,8}},
+{ 49275, 3, {73,27,25}},
+{ 49280, 3, {44,35,32}},
+{ 49350, 3, {47,35,30}},
+{ 49536, 3, {43,36,32}},
+{ 49572, 3, {51,36,27}},
+{ 49632, 3, {47,33,32}},
+{ 49728, 3, {42,37,32}},
+{ 49752, 3, {691,9,8}},
+{ 49764, 3, {44,39,29}},
+{ 49800, 3, {83,25,24}},
+{ 49824, 3, {173,18,16}},
+{ 49860, 3, {277,15,12}},
+{ 49896, 3, {42,36,33}},
+{ 49920, 3, {40,39,32}},
+{ 50064, 3, {149,21,16}},
+{ 50085, 3, {53,35,27}},
+{ 50160, 3, {40,38,33}},
+{ 50176, 3, {49,32,32}},
+{ 50220, 3, {45,36,31}},
+{ 50232, 3, {46,39,28}},
+{ 50274, 3, {49,38,27}},
+{ 50400, 3, {40,36,35}},
+{ 50472, 3, {701,9,8}},
+{ 50544, 3, {39,36,36}},
+{ 50580, 3, {281,15,12}},
+{ 50640, 3, {211,16,15}},
+{ 50652, 3, {67,28,27}},
+{ 50688, 3, {44,36,32}},
+{ 50715, 3, {49,45,23}},
+{ 50736, 3, {151,21,16}},
+{ 50850, 3, {113,25,18}},
+{ 50880, 3, {53,32,30}},
+{ 50904, 3, {101,24,21}},
+{ 50940, 3, {283,15,12}},
+{ 50960, 3, {49,40,26}},
+{ 50976, 3, {59,32,27}},
+{ 51048, 3, {709,9,8}},
+{ 51072, 3, {42,38,32}},
+{ 51084, 3, {43,36,33}},
+{ 51120, 3, {71,30,24}},
+{ 51168, 3, {41,39,32}},
+{ 51192, 3, {79,27,24}},
+{ 51324, 3, {47,39,28}},
+{ 51480, 3, {40,39,33}},
+{ 51520, 3, {46,35,32}},
+{ 51552, 3, {179,18,16}},
+{ 51597, 3, {49,39,27}},
+{ 51660, 3, {41,36,35}},
+{ 51768, 3, {719,9,8}},
+{ 51800, 3, {40,37,35}},
+{ 51912, 3, {103,24,21}},
+{ 51948, 3, {39,37,36}},
+{ 51975, 3, {45,35,33}},
+{ 52080, 3, {42,40,31}},
+{ 52128, 3, {181,18,16}},
+{ 52200, 3, {45,40,29}},
+{ 52272, 3, {44,36,33}},
+{ 52344, 3, {727,9,8}},
+{ 52380, 3, {97,27,20}},
+{ 52416, 3, {42,39,32}},
+{ 52500, 3, {50,35,30}},
+{ 52560, 3, {73,30,24}},
+{ 52640, 3, {47,35,32}},
+{ 52704, 3, {61,32,27}},
+{ 52740, 3, {293,15,12}},
+{ 52752, 3, {157,21,16}},
+{ 52776, 3, {733,9,8}},
+{ 52800, 3, {40,40,33}},
+{ 52920, 3, {42,36,35}},
+{ 52992, 3, {46,36,32}},
+{ 53040, 3, {40,39,34}},
+{ 53064, 3, {67,33,24}},
+{ 53196, 3, {44,39,31}},
+{ 53200, 3, {40,38,35}},
+{ 53208, 3, {739,9,8}},
+{ 53244, 3, {51,36,29}},
+{ 53312, 3, {49,34,32}},
+{ 53325, 3, {79,27,25}},
+{ 53340, 3, {127,21,20}},
+{ 53352, 3, {39,38,36}},
+{ 53400, 3, {89,25,24}},
+{ 53460, 3, {45,36,33}},
+{ 53496, 3, {743,9,8}},
+{ 53508, 3, {49,39,28}},
+{ 53520, 3, {223,16,15}},
+{ 53550, 3, {45,35,34}},
+{ 53600, 3, {67,32,25}},
+{ 53664, 3, {43,39,32}},
+{ 53676, 3, {71,28,27}},
+{ 53760, 3, {42,40,32}},
+{ 53784, 3, {83,27,24}},
+{ 53865, 3, {57,35,27}},
+{ 53928, 3, {107,24,21}},
+{ 54000, 3, {45,40,30}},
+{ 54072, 3, {751,9,8}},
+{ 54120, 3, {41,40,33}},
+{ 54144, 3, {47,36,32}},
+{ 54180, 3, {43,36,35}},
+{ 54243, 3, {49,41,27}},
+{ 54288, 3, {48,39,29}},
+{ 54480, 3, {227,16,15}},
+{ 54504, 3, {757,9,8}},
+{ 54516, 3, {59,33,28}},
+{ 54540, 3, {101,27,20}},
+{ 54600, 3, {40,39,35}},
+{ 54648, 3, {46,36,33}},
+{ 54756, 3, {39,39,36}},
+{ 54768, 3, {163,21,16}},
+{ 54792, 3, {761,9,8}},
+{ 54880, 3, {49,35,32}},
+{ 54912, 3, {44,39,32}},
+{ 54936, 3, {109,24,21}},
+{ 54960, 3, {229,16,15}},
+{ 55008, 3, {191,18,16}},
+{ 55020, 3, {131,21,20}},
+{ 55080, 3, {45,36,34}},
+{ 55104, 3, {42,41,32}},
+{ 55125, 3, {45,35,35}},
+{ 55188, 3, {73,28,27}},
+{ 55260, 3, {307,15,12}},
+{ 55296, 3, {48,36,32}},
+{ 55368, 3, {769,9,8}},
+{ 55440, 3, {44,36,35}},
+{ 55566, 3, {49,42,27}},
+{ 55584, 3, {193,18,16}},
+{ 55620, 3, {103,27,20}},
+{ 55650, 3, {53,35,30}},
+{ 55656, 3, {773,9,8}},
+{ 55755, 3, {59,35,27}},
+{ 55800, 3, {45,40,31}},
+{ 55836, 3, {47,36,33}},
+{ 55920, 3, {233,16,15}},
+{ 55968, 3, {53,33,32}},
+{ 55980, 3, {311,15,12}},
+{ 56000, 3, {40,40,35}},
+{ 56025, 3, {83,27,25}},
+{ 56112, 3, {167,21,16}},
+{ 56160, 3, {40,39,36}},
+{ 56232, 3, {71,33,24}},
+{ 56340, 3, {313,15,12}},
+{ 56364, 3, {61,33,28}},
+{ 56448, 3, {42,42,32}},
+{ 56628, 3, {44,39,33}},
+{ 56640, 3, {59,32,30}},
+{ 56664, 3, {787,9,8}},
+{ 56700, 3, {45,36,35}},
+{ 56736, 3, {197,18,16}},
+{ 56760, 3, {43,40,33}},
+{ 56784, 3, {52,39,28}},
+{ 56800, 3, {71,32,25}},
+{ 56840, 3, {49,40,29}},
+{ 56880, 3, {79,30,24}},
+{ 56889, 3, {49,43,27}},
+{ 56916, 3, {51,36,31}},
+{ 56925, 3, {55,45,23}},
+{ 56952, 3, {113,24,21}},
+{ 57060, 3, {317,15,12}},
+{ 57120, 3, {42,40,34}},
+{ 57150, 3, {127,25,18}},
+{ 57312, 3, {199,18,16}},
+{ 57360, 3, {239,16,15}},
+{ 57384, 3, {797,9,8}},
+{ 57400, 3, {41,40,35}},
+{ 57408, 3, {46,39,32}},
+{ 57420, 3, {45,44,29}},
+{ 57540, 3, {137,21,20}},
+{ 57564, 3, {41,39,36}},
+{ 57645, 3, {61,35,27}},
+{ 57672, 3, {89,27,24}},
+{ 57720, 3, {40,39,37}},
+{ 57780, 3, {107,27,20}},
+{ 57792, 3, {43,42,32}},
+{ 57816, 3, {73,33,24}},
+{ 57840, 3, {241,16,15}},
+{ 57876, 3, {53,39,28}},
+{ 57888, 3, {67,32,27}},
+{ 57960, 3, {46,36,35}},
+{ 58016, 3, {49,37,32}},
+{ 58032, 3, {48,39,31}},
+{ 58080, 3, {44,40,33}},
+{ 58128, 3, {173,21,16}},
+{ 58200, 3, {97,25,24}},
+{ 58240, 3, {52,35,32}},
+{ 58248, 3, {809,9,8}},
+{ 58275, 3, {45,37,35}},
+{ 58320, 3, {45,36,36}},
+{ 58344, 3, {44,39,34}},
+{ 58380, 3, {139,21,20}},
+{ 58392, 3, {811,9,8}},
+{ 58400, 3, {73,32,25}},
+{ 58464, 3, {48,42,29}},
+{ 58560, 3, {61,32,30}},
+{ 58656, 3, {47,39,32}},
+{ 58800, 3, {42,40,35}},
+{ 58860, 3, {109,27,20}},
+{ 58950, 3, {131,25,18}},
+{ 58968, 3, {42,39,36}},
+{ 59112, 3, {821,9,8}},
+{ 59136, 3, {44,42,32}},
+{ 59160, 3, {51,40,29}},
+{ 59220, 3, {47,36,35}},
+{ 59256, 3, {823,9,8}},
+{ 59280, 3, {40,39,38}},
+{ 59360, 3, {53,35,32}},
+{ 59400, 3, {45,40,33}},
+{ 59535, 3, {49,45,27}},
+{ 59544, 3, {827,9,8}},
+{ 59580, 3, {331,15,12}},
+{ 59584, 3, {49,38,32}},
+{ 59688, 3, {829,9,8}},
+{ 59724, 3, {79,28,27}},
+{ 59760, 3, {83,30,24}},
+{ 59850, 3, {45,38,35}},
+{ 59904, 3, {48,39,32}},
+{ 59940, 3, {45,37,36}},
+{ 60060, 3, {44,39,35}},
+{ 60075, 3, {89,27,25}},
+{ 60144, 3, {179,21,16}},
+{ 60200, 3, {43,40,35}},
+{ 60240, 3, {251,16,15}},
+{ 60372, 3, {43,39,36}},
+{ 60408, 3, {839,9,8}},
+{ 60480, 3, {42,40,36}},
+{ 60588, 3, {51,36,33}},
+{ 60600, 3, {101,25,24}},
+{ 60660, 3, {337,15,12}},
+{ 60720, 3, {46,40,33}},
+{ 60760, 3, {49,40,31}},
+{ 60768, 3, {211,18,16}},
+{ 60816, 3, {181,21,16}},
+{ 60840, 3, {40,39,39}},
+{ 60858, 3, {49,46,27}},
+{ 61020, 3, {113,27,20}},
+{ 61056, 3, {53,36,32}},
+{ 61152, 3, {49,39,32}},
+{ 61200, 3, {45,40,34}},
+{ 61344, 3, {71,32,27}},
+{ 61380, 3, {45,44,31}},
+{ 61416, 3, {853,9,8}},
+{ 61425, 3, {45,39,35}},
+{ 61560, 3, {45,38,36}},
+{ 61600, 3, {44,40,35}},
+{ 61650, 3, {137,25,18}},
+{ 61680, 3, {257,16,15}},
+{ 61704, 3, {857,9,8}},
+{ 61776, 3, {44,39,36}},
+{ 61800, 3, {103,25,24}},
+{ 61824, 3, {46,42,32}},
+{ 61848, 3, {859,9,8}},
+{ 61875, 3, {55,45,25}},
+{ 61908, 3, {67,33,28}},
+{ 61950, 3, {59,35,30}},
+{ 62040, 3, {47,40,33}},
+{ 62136, 3, {863,9,8}},
+{ 62160, 3, {42,40,37}},
+{ 62181, 3, {49,47,27}},
+{ 62304, 3, {59,33,32}},
+{ 62400, 3, {40,40,39}},
+{ 62424, 3, {51,36,34}},
+{ 62460, 3, {347,15,12}},
+{ 62496, 3, {48,42,31}},
+{ 62550, 3, {139,25,18}},
+{ 62568, 3, {79,33,24}},
+{ 62580, 3, {149,21,20}},
+{ 62640, 3, {48,45,29}},
+{ 62720, 3, {49,40,32}},
+{ 62748, 3, {83,28,27}},
+{ 62820, 3, {349,15,12}},
+{ 62856, 3, {97,27,24}},
+{ 62964, 3, {53,36,33}},
+{ 63000, 3, {45,40,35}},
+{ 63072, 3, {73,32,27}},
+{ 63120, 3, {263,16,15}},
+{ 63144, 3, {877,9,8}},
+{ 63168, 3, {47,42,32}},
+{ 63180, 3, {45,39,36}},
+{ 63200, 3, {79,32,25}},
+{ 63240, 3, {51,40,31}},
+{ 63315, 3, {67,35,27}},
+{ 63420, 3, {151,21,20}},
+{ 63432, 3, {881,9,8}},
+{ 63492, 3, {44,39,37}},
+{ 63540, 3, {353,15,12}},
+{ 63576, 3, {883,9,8}},
+{ 63648, 3, {48,39,34}},
+{ 63840, 3, {42,40,38}},
+{ 63864, 3, {887,9,8}},
+{ 63945, 3, {49,45,29}},
+{ 63960, 3, {41,40,39}},
+{ 64008, 3, {127,24,21}},
+{ 64050, 3, {61,35,30}},
+{ 64080, 3, {89,30,24}},
+{ 64152, 3, {54,36,33}},
+{ 64176, 3, {191,21,16}},
+{ 64200, 3, {107,25,24}},
+{ 64224, 3, {223,18,16}},
+{ 64288, 3, {49,41,32}},
+{ 64320, 3, {67,32,30}},
+{ 64400, 3, {46,40,35}},
+{ 64416, 3, {61,33,32}},
+{ 64428, 3, {59,39,28}},
+{ 64512, 3, {48,42,32}},
+{ 64560, 3, {269,16,15}},
+{ 64575, 3, {45,41,35}},
+{ 64584, 3, {46,39,36}},
+{ 64620, 3, {359,15,12}},
+{ 64800, 3, {45,40,36}},
+{ 64827, 3, {49,49,27}},
+{ 64848, 3, {193,21,16}},
+{ 64896, 3, {52,39,32}},
+{ 64960, 3, {58,35,32}},
+{ 65040, 3, {271,16,15}},
+{ 65076, 3, {51,44,29}},
+{ 65208, 3, {44,39,38}},
+{ 65304, 3, {907,9,8}},
+{ 65340, 3, {45,44,33}},
+{ 65376, 3, {227,18,16}},
+{ 65400, 3, {109,25,24}},
+{ 65448, 3, {101,27,24}},
+{ 65475, 3, {97,27,25}},
+{ 65520, 3, {42,40,39}},
+{ 65592, 3, {911,9,8}},
+{ 65604, 3, {71,33,28}},
+{ 65736, 3, {83,33,24}},
+{ 65800, 3, {47,40,35}},
+{ 65856, 3, {49,42,32}},
+{ 65940, 3, {157,21,20}},
+{ 65952, 3, {229,18,16}},
+{ 65988, 3, {47,39,36}},
+{ 66000, 3, {50,40,33}},
+{ 66024, 3, {131,24,21}},
+{ 66060, 3, {367,15,12}},
+{ 66080, 3, {59,35,32}},
+{ 66096, 3, {51,36,36}},
+{ 66144, 3, {53,39,32}},
+{ 66150, 3, {45,42,35}},
+{ 66168, 3, {919,9,8}},
+{ 66192, 3, {197,21,16}},
+{ 66400, 3, {83,32,25}},
+{ 66420, 3, {45,41,36}},
+{ 66480, 3, {277,16,15}},
+{ 66600, 3, {45,40,37}},
+{ 66612, 3, {61,39,28}},
+{ 66640, 3, {49,40,34}},
+{ 66744, 3, {103,27,24}},
+{ 66780, 3, {53,36,35}},
+{ 66864, 3, {199,21,16}},
+{ 66888, 3, {929,9,8}},
+{ 66924, 3, {44,39,39}},
+{ 66960, 3, {48,45,31}},
+{ 67050, 3, {149,25,18}},
+{ 67080, 3, {43,40,39}},
+{ 67095, 3, {71,35,27}},
+{ 67104, 3, {233,18,16}},
+{ 67140, 3, {373,15,12}},
+{ 67200, 3, {42,40,40}},
+{ 67275, 3, {65,45,23}},
+{ 67284, 3, {89,28,27}},
+{ 67320, 3, {45,44,34}},
+{ 67392, 3, {48,39,36}},
+{ 67424, 3, {49,43,32}},
+{ 67440, 3, {281,16,15}},
+{ 67452, 3, {73,33,28}},
+{ 67464, 3, {937,9,8}},
+{ 67473, 3, {51,49,27}},
+{ 67725, 3, {45,43,35}},
+{ 67752, 3, {941,9,8}},
+{ 67800, 3, {113,25,24}},
+{ 67860, 3, {52,45,29}},
+{ 67920, 3, {283,16,15}},
+{ 67932, 3, {51,37,36}},
+{ 67950, 3, {151,25,18}},
+{ 67968, 3, {59,36,32}},
+{ 68040, 3, {45,42,36}},
+{ 68160, 3, {71,32,30}},
+{ 68175, 3, {101,27,25}},
+{ 68184, 3, {947,9,8}},
+{ 68208, 3, {49,48,29}},
+{ 68220, 3, {379,15,12}},
+{ 68256, 3, {79,32,27}},
+{ 68320, 3, {61,35,32}},
+{ 68355, 3, {49,45,31}},
+{ 68400, 3, {45,40,38}},
+{ 68460, 3, {163,21,20}},
+{ 68544, 3, {48,42,34}},
+{ 68580, 3, {127,27,20}},
+{ 68600, 3, {49,40,35}},
+{ 68616, 3, {953,9,8}},
+{ 68640, 3, {44,40,39}},
+{ 68832, 3, {239,18,16}},
+{ 68880, 3, {42,41,40}},
+{ 68904, 3, {58,36,33}},
+{ 68940, 3, {383,15,12}},
+{ 68985, 3, {73,35,27}},
+{ 68992, 3, {49,44,32}},
+{ 69048, 3, {137,24,21}},
+{ 69264, 3, {48,39,37}},
+{ 69300, 3, {45,44,35}},
+{ 69336, 3, {107,27,24}},
+{ 69360, 3, {51,40,34}},
+{ 69408, 3, {241,18,16}},
+{ 69525, 3, {103,27,25}},
+{ 69564, 3, {51,44,31}},
+{ 69600, 3, {50,48,29}},
+{ 69624, 3, {967,9,8}},
+{ 69660, 3, {45,43,36}},
+{ 69768, 3, {51,38,36}},
+{ 69840, 3, {97,30,24}},
+{ 69888, 3, {52,42,32}},
+{ 69912, 3, {971,9,8}},
+{ 69960, 3, {53,40,33}},
+{ 70000, 3, {50,40,35}},
+{ 70020, 3, {389,15,12}},
+{ 70056, 3, {139,24,21}},
+{ 70080, 3, {73,32,30}},
+{ 70092, 3, {59,36,33}},
+{ 70119, 3, {53,49,27}},
+{ 70140, 3, {167,21,20}},
+{ 70200, 3, {45,40,39}},
+{ 70272, 3, {61,36,32}},
+{ 70320, 3, {293,16,15}},
+{ 70344, 3, {977,9,8}},
+{ 70350, 3, {67,35,30}},
+{ 70356, 3, {44,41,39}},
+{ 70488, 3, {89,33,24}},
+{ 70560, 3, {42,42,40}},
+{ 70632, 3, {109,27,24}},
+{ 70650, 3, {157,25,18}},
+{ 70680, 3, {57,40,31}},
+{ 70740, 3, {131,27,20}},
+{ 70752, 3, {67,33,32}},
+{ 70776, 3, {983,9,8}},
+{ 70875, 3, {45,45,35}},
+{ 70896, 3, {211,21,16}},
+{ 70992, 3, {51,48,29}},
+{ 71050, 3, {50,49,29}},
+{ 71136, 3, {48,39,38}},
+{ 71200, 3, {89,32,25}},
+{ 71232, 3, {53,42,32}},
+{ 71280, 3, {45,44,36}},
+{ 71352, 3, {991,9,8}},
+{ 71400, 3, {51,40,35}},
+{ 71442, 3, {54,49,27}},
+{ 71460, 3, {397,15,12}},
+{ 71604, 3, {51,39,36}},
+{ 71610, 3, {55,42,31}},
+{ 71712, 3, {83,32,27}},
+{ 71760, 3, {46,40,39}},
+{ 71775, 3, {55,45,29}},
+{ 71784, 3, {997,9,8}},
+{ 72000, 3, {45,40,40}},
+{ 72072, 3, {44,42,39}},
+{ 72128, 3, {49,46,32}},
+{ 72180, 3, {401,15,12}},
+{ 72225, 3, {107,27,25}},
+{ 72240, 3, {43,42,40}},
+{ 72288, 3, {251,18,16}},
+{ 72450, 3, {46,45,35}},
+{ 72468, 3, {61,36,33}},
+{ 72520, 3, {49,40,37}},
+{ 72540, 3, {52,45,31}},
+{ 72576, 3, {48,42,36}},
+{ 72648, 3, {1009,9,8}},
+{ 72660, 3, {173,21,20}},
+{ 72720, 3, {101,30,24}},
+{ 72765, 3, {49,45,33}},
+{ 72800, 3, {52,40,35}},
+{ 72900, 3, {45,45,36}},
+{ 72912, 3, {49,48,31}},
+{ 72936, 3, {1013,9,8}},
+{ 72996, 3, {79,33,28}},
+{ 73008, 3, {48,39,39}},
+{ 73080, 3, {58,36,35}},
+{ 73125, 3, {65,45,25}},
+{ 73164, 3, {67,39,28}},
+{ 73224, 3, {113,27,24}},
+{ 73260, 3, {45,44,37}},
+{ 73320, 3, {47,40,39}},
+{ 73332, 3, {97,28,27}},
+{ 73350, 3, {163,25,18}},
+{ 73368, 3, {1019,9,8}},
+{ 73440, 3, {48,45,34}},
+{ 73512, 3, {1021,9,8}},
+{ 73575, 3, {109,27,25}},
+{ 73620, 3, {409,15,12}},
+{ 73632, 3, {59,39,32}},
+{ 73680, 3, {307,16,15}},
+{ 73696, 3, {49,47,32}},
+{ 73788, 3, {44,43,39}},
+{ 73800, 3, {45,41,40}},
+{ 73920, 3, {44,42,40}},
+{ 73980, 3, {137,27,20}},
+{ 74016, 3, {257,18,16}},
+{ 74025, 3, {47,45,35}},
+{ 74052, 3, {51,44,33}},
+{ 74160, 3, {103,30,24}},
+{ 74200, 3, {53,40,35}},
+{ 74232, 3, {1031,9,8}},
+{ 74340, 3, {59,36,35}},
+{ 74376, 3, {1033,9,8}},
+{ 74400, 3, {50,48,31}},
+{ 74412, 3, {53,39,36}},
+{ 74480, 3, {49,40,38}},
+{ 74520, 3, {46,45,36}},
+{ 74550, 3, {71,35,30}},
+{ 74592, 3, {48,42,37}},
+{ 74640, 3, {311,16,15}},
+{ 74655, 3, {79,35,27}},
+{ 74808, 3, {1039,9,8}},
+{ 74880, 3, {48,40,39}},
+{ 74928, 3, {223,21,16}},
+{ 74970, 3, {49,45,34}},
+{ 74976, 3, {71,33,32}},
+{ 75040, 3, {67,35,32}},
+{ 75060, 3, {139,27,20}},
+{ 75096, 3, {149,24,21}},
+{ 75120, 3, {313,16,15}},
+{ 75150, 3, {167,25,18}},
+{ 75180, 3, {179,21,20}},
+{ 75240, 3, {45,44,38}},
+{ 75264, 3, {49,48,32}},
+{ 75276, 3, {51,41,36}},
+{ 75411, 3, {57,49,27}},
+{ 75420, 3, {419,15,12}},
+{ 75480, 3, {51,40,37}},
+{ 75504, 3, {44,44,39}},
+{ 75528, 3, {1049,9,8}},
+{ 75600, 3, {45,42,40}},
+{ 75672, 3, {1051,9,8}},
+{ 75744, 3, {263,18,16}},
+{ 75780, 3, {421,15,12}},
+{ 75816, 3, {54,39,36}},
+{ 75840, 3, {79,32,30}},
+{ 75888, 3, {51,48,31}},
+{ 75950, 3, {50,49,31}},
+{ 76020, 3, {181,21,20}},
+{ 76080, 3, {317,16,15}},
+{ 76104, 3, {151,24,21}},
+{ 76128, 3, {61,39,32}},
+{ 76140, 3, {47,45,36}},
+{ 76200, 3, {127,25,24}},
+{ 76230, 3, {55,42,33}},
+{ 76272, 3, {227,21,16}},
+{ 76275, 3, {113,27,25}},
+{ 76296, 3, {51,44,34}},
+{ 76356, 3, {101,28,27}},
+{ 76392, 3, {1061,9,8}},
+{ 76440, 3, {49,40,39}},
+{ 76536, 3, {1063,9,8}},
+{ 76560, 3, {58,40,33}},
+{ 76608, 3, {48,42,38}},
+{ 76650, 3, {73,35,30}},
+{ 76692, 3, {83,33,28}},
+{ 76725, 3, {55,45,31}},
+{ 76734, 3, {54,49,29}},
+{ 76752, 3, {48,41,39}},
+{ 76824, 3, {97,33,24}},
+{ 76832, 3, {49,49,32}},
+{ 76860, 3, {61,36,35}},
+{ 76896, 3, {89,32,27}},
+{ 76908, 3, {52,51,29}},
+{ 76944, 3, {229,21,16}},
+{ 76968, 3, {1069,9,8}},
+{ 77040, 3, {107,30,24}},
+{ 77088, 3, {73,33,32}},
+{ 77112, 3, {51,42,36}},
+{ 77175, 3, {49,45,35}},
+{ 77184, 3, {67,36,32}},
+{ 77220, 3, {45,44,39}},
+{ 77280, 3, {46,42,40}},
+{ 77400, 3, {45,43,40}},
+{ 77472, 3, {269,18,16}},
+{ 77520, 3, {51,40,38}},
+{ 77532, 3, {71,39,28}},
+{ 77580, 3, {431,15,12}},
+{ 77600, 3, {97,32,25}},
+{ 77748, 3, {57,44,31}},
+{ 77760, 3, {48,45,36}},
+{ 77850, 3, {173,25,18}},
+{ 77868, 3, {103,28,27}},
+{ 77880, 3, {59,40,33}},
+{ 77940, 3, {433,15,12}},
+{ 77952, 3, {58,42,32}},
+{ 78000, 3, {50,40,39}},
+{ 78048, 3, {271,18,16}},
+{ 78057, 3, {59,49,27}},
+{ 78120, 3, {56,45,31}},
+{ 78264, 3, {1087,9,8}},
+{ 78288, 3, {233,21,16}},
+{ 78300, 3, {54,50,29}},
+{ 78400, 3, {49,40,40}},
+{ 78435, 3, {83,35,27}},
+{ 78480, 3, {109,30,24}},
+{ 78540, 3, {51,44,35}},
+{ 78552, 3, {1091,9,8}},
+{ 78600, 3, {131,25,24}},
+{ 78624, 3, {48,42,39}},
+{ 78696, 3, {1093,9,8}},
+{ 78750, 3, {50,45,35}},
+{ 78936, 3, {46,44,39}},
+{ 78948, 3, {51,43,36}},
+{ 78960, 3, {47,42,40}},
+{ 78984, 3, {1097,9,8}},
+{ 79020, 3, {439,15,12}},
+{ 79128, 3, {157,24,21}},
+{ 79200, 3, {45,44,40}},
+{ 79296, 3, {59,42,32}},
+{ 79416, 3, {1103,9,8}},
+{ 79440, 3, {331,16,15}},
+{ 79520, 3, {71,35,32}},
+{ 79560, 3, {51,40,39}},
+{ 79596, 3, {67,36,33}},
+{ 79680, 3, {83,32,30}},
+{ 79716, 3, {73,39,28}},
+{ 79740, 3, {443,15,12}},
+{ 79776, 3, {277,18,16}},
+{ 79848, 3, {1109,9,8}},
+{ 79920, 3, {48,45,37}},
+{ 79968, 3, {49,48,34}},
+{ 79992, 3, {101,33,24}},
+{ 80220, 3, {191,21,20}},
+{ 80304, 3, {239,21,16}},
+{ 80325, 3, {51,45,35}},
+{ 80352, 3, {54,48,31}},
+{ 80360, 3, {49,41,40}},
+{ 80424, 3, {1117,9,8}},
+{ 80460, 3, {149,27,20}},
+{ 80496, 3, {48,43,39}},
+{ 80520, 3, {61,40,33}},
+{ 80550, 3, {179,25,18}},
+{ 80640, 3, {48,42,40}},
+{ 80652, 3, {47,44,39}},
+{ 80703, 3, {61,49,27}},
+{ 80784, 3, {51,44,36}},
+{ 80800, 3, {101,32,25}},
+{ 80820, 3, {449,15,12}},
+{ 80850, 3, {50,49,33}},
+{ 80856, 3, {1123,9,8}},
+{ 80880, 3, {337,16,15}},
+{ 80892, 3, {107,28,27}},
+{ 80928, 3, {281,18,16}},
+{ 80976, 3, {241,21,16}},
+{ 81000, 3, {45,45,40}},
+{ 81060, 3, {193,21,20}},
+{ 81120, 3, {52,40,39}},
+{ 81180, 3, {45,44,41}},
+{ 81200, 3, {58,40,35}},
+{ 81288, 3, {1129,9,8}},
+{ 81360, 3, {113,30,24}},
+{ 81432, 3, {58,39,36}},
+{ 81450, 3, {181,25,18}},
+{ 81504, 3, {283,18,16}},
+{ 81536, 3, {52,49,32}},
+{ 81540, 3, {151,27,20}},
+{ 81576, 3, {103,33,24}},
+{ 81585, 3, {49,45,37}},
+{ 81600, 3, {51,40,40}},
+{ 81675, 3, {55,45,33}},
+{ 81760, 3, {73,35,32}},
+{ 81792, 3, {71,36,32}},
+{ 81840, 3, {55,48,31}},
+{ 81984, 3, {61,42,32}},
+{ 82026, 3, {54,49,31}},
+{ 82080, 3, {48,45,38}},
+{ 82152, 3, {163,24,21}},
+{ 82200, 3, {137,25,24}},
+{ 82212, 3, {52,51,31}},
+{ 82236, 3, {89,33,28}},
+{ 82260, 3, {457,15,12}},
+{ 82296, 3, {127,27,24}},
+{ 82320, 3, {49,42,40}},
+{ 82368, 3, {48,44,39}},
+{ 82400, 3, {103,32,25}},
+{ 82404, 3, {109,28,27}},
+{ 82600, 3, {59,40,35}},
+{ 82620, 3, {51,45,36}},
+{ 82656, 3, {48,42,41}},
+{ 82680, 3, {53,40,39}},
+{ 82740, 3, {197,21,20}},
+{ 82764, 3, {57,44,33}},
+{ 82800, 3, {46,45,40}},
+{ 82836, 3, {59,39,36}},
+{ 82872, 3, {1151,9,8}},
+{ 82950, 3, {79,35,30}},
+{ 82980, 3, {461,15,12}},
+{ 83016, 3, {1153,9,8}},
+{ 83028, 3, {51,44,37}},
+{ 83104, 3, {53,49,32}},
+{ 83160, 3, {45,44,42}},
+{ 83232, 3, {51,48,34}},
+{ 83280, 3, {347,16,15}},
+{ 83300, 3, {50,49,34}},
+{ 83340, 3, {463,15,12}},
+{ 83349, 3, {63,49,27}},
+{ 83400, 3, {139,25,24}},
+{ 83424, 3, {79,33,32}},
+{ 83475, 3, {53,45,35}},
+{ 83580, 3, {199,21,20}},
+{ 83616, 3, {67,39,32}},
+{ 83640, 3, {51,41,40}},
+{ 83700, 3, {54,50,31}},
+{ 83736, 3, {1163,9,8}},
+{ 83760, 3, {349,16,15}},
+{ 83790, 3, {49,45,38}},
+{ 83808, 3, {97,32,27}},
+{ 84000, 3, {50,42,40}},
+{ 84060, 3, {467,15,12}},
+{ 84084, 3, {49,44,39}},
+{ 84096, 3, {73,36,32}},
+{ 84105, 3, {89,35,27}},
+{ 84168, 3, {167,24,21}},
+{ 84240, 3, {48,45,39}},
+{ 84280, 3, {49,43,40}},
+{ 84312, 3, {1171,9,8}},
+{ 84336, 3, {251,21,16}},
+{ 84348, 3, {71,36,33}},
+{ 84360, 3, {57,40,37}},
+{ 84384, 3, {293,18,16}},
+{ 84420, 3, {67,36,35}},
+{ 84456, 3, {51,46,36}},
+{ 84600, 3, {47,45,40}},
+{ 84672, 3, {48,42,42}},
+{ 84720, 3, {353,16,15}},
+{ 84744, 3, {107,33,24}},
+{ 84780, 3, {157,27,20}},
+{ 84825, 3, {65,45,29}},
+{ 84888, 3, {131,27,24}},
+{ 85032, 3, {1181,9,8}},
+{ 85140, 3, {45,44,43}},
+{ 85272, 3, {51,44,38}},
+{ 85400, 3, {61,40,35}},
+{ 85428, 3, {113,28,27}},
+{ 85440, 3, {89,32,30}},
+{ 85464, 3, {1187,9,8}},
+{ 85470, 3, {55,42,37}},
+{ 85600, 3, {107,32,25}},
+{ 85644, 3, {61,39,36}},
+{ 85680, 3, {51,42,40}},
+{ 85725, 3, {127,27,25}},
+{ 85750, 3, {50,49,35}},
+{ 85800, 3, {50,44,39}},
+{ 85860, 3, {53,45,36}},
+{ 85896, 3, {1193,9,8}},
+{ 85950, 3, {191,25,18}},
+{ 85995, 3, {49,45,39}},
+{ 86112, 3, {48,46,39}},
+{ 86160, 3, {359,16,15}},
+{ 86220, 3, {479,15,12}},
+{ 86240, 3, {49,44,40}},
+{ 86268, 3, {79,39,28}},
+{ 86292, 3, {51,47,36}},
+{ 86328, 3, {109,33,24}},
+{ 86352, 3, {257,21,16}},
+{ 86400, 3, {48,45,40}},
+{ 86472, 3, {1201,9,8}},
+{ 86580, 3, {52,45,37}},
+{ 86625, 3, {55,45,35}},
+{ 86640, 3, {57,40,38}},
+{ 86688, 3, {48,43,42}},
+{ 86724, 3, {73,36,33}},
+{ 86850, 3, {193,25,18}},
+{ 87024, 3, {49,48,37}},
+{ 87120, 3, {45,44,44}},
+{ 87150, 3, {83,35,30}},
+{ 87192, 3, {173,24,21}},
+{ 87200, 3, {109,32,25}},
+{ 87264, 3, {101,32,27}},
+{ 87318, 3, {54,49,33}},
+{ 87336, 3, {1213,9,8}},
+{ 87360, 3, {52,42,40}},
+{ 87480, 3, {54,45,36}},
+{ 87516, 3, {51,44,39}},
+{ 87624, 3, {1217,9,8}},
+{ 87648, 3, {83,33,32}},
+{ 87660, 3, {487,15,12}},
+{ 87720, 3, {51,43,40}},
+{ 87780, 3, {55,42,38}},
+{ 87808, 3, {56,49,32}},
+{ 87984, 3, {48,47,39}},
+{ 88020, 3, {163,27,20}},
+{ 88056, 3, {1223,9,8}},
+{ 88080, 3, {367,16,15}},
+{ 88128, 3, {51,48,36}},
+{ 88368, 3, {263,21,16}},
+{ 88380, 3, {491,15,12}},
+{ 88416, 3, {307,18,16}},
+{ 88425, 3, {131,27,25}},
+{ 88440, 3, {67,40,33}},
+{ 88480, 3, {79,35,32}},
+{ 88488, 3, {1229,9,8}},
+{ 88536, 3, {56,51,31}},
+{ 88560, 3, {48,45,41}},
+{ 88608, 3, {71,39,32}},
+{ 88620, 3, {211,21,20}},
+{ 88632, 3, {1231,9,8}},
+{ 88641, 3, {67,49,27}},
+{ 88650, 3, {197,25,18}},
+{ 88704, 3, {48,44,42}},
+{ 88776, 3, {137,27,24}},
+{ 88800, 3, {50,48,37}},
+{ 88920, 3, {52,45,38}},
+{ 88992, 3, {103,32,27}},
+{ 89040, 3, {53,42,40}},
+{ 89064, 3, {1237,9,8}},
+{ 89100, 3, {45,45,44}},
+{ 89232, 3, {52,44,39}},
+{ 89376, 3, {49,48,38}},
+{ 89400, 3, {149,25,24}},
+{ 89460, 3, {71,36,35}},
+{ 89496, 3, {113,33,24}},
+{ 89520, 3, {373,16,15}},
+{ 89550, 3, {199,25,18}},
+{ 89568, 3, {311,18,16}},
+{ 89628, 3, {97,33,28}},
+{ 89760, 3, {51,44,40}},
+{ 89775, 3, {57,45,35}},
+{ 89820, 3, {499,15,12}},
+{ 89856, 3, {48,48,39}},
+{ 89928, 3, {1249,9,8}},
+{ 90000, 3, {50,45,40}},
+{ 90048, 3, {67,42,32}},
+{ 90072, 3, {139,27,24}},
+{ 90090, 3, {55,42,39}},
+{ 90144, 3, {313,18,16}},
+{ 90160, 3, {49,46,40}},
+{ 90168, 3, {52,51,34}},
+{ 90180, 3, {167,27,20}},
+{ 90216, 3, {179,24,21}},
+{ 90384, 3, {269,21,16}},
+{ 90400, 3, {113,32,25}},
+{ 90405, 3, {49,45,41}},
+{ 90480, 3, {58,40,39}},
+{ 90540, 3, {503,15,12}},
+{ 90576, 3, {51,48,37}},
+{ 90600, 3, {151,25,24}},
+{ 90636, 3, {83,39,28}},
+{ 90648, 3, {1259,9,8}},
+{ 90650, 3, {50,49,37}},
+{ 90675, 3, {65,45,31}},
+{ 90720, 3, {48,45,42}},
+{ 90944, 3, {58,49,32}},
+{ 90948, 3, {53,44,39}},
+{ 90960, 3, {379,16,15}},
+{ 91008, 3, {79,36,32}},
+{ 91056, 3, {271,21,16}},
+{ 91080, 3, {46,45,44}},
+{ 91104, 3, {73,39,32}},
+{ 91200, 3, {50,48,38}},
+{ 91224, 3, {181,24,21}},
+{ 91260, 3, {52,45,39}},
+{ 91296, 3, {317,18,16}},
+{ 91350, 3, {58,45,35}},
+{ 91440, 3, {127,30,24}},
+{ 91476, 3, {63,44,33}},
+{ 91575, 3, {55,45,37}},
+{ 91620, 3, {509,15,12}},
+{ 91665, 3, {97,35,27}},
+{ 91800, 3, {51,45,40}},
+{ 91920, 3, {383,16,15}},
+{ 91944, 3, {1277,9,8}},
+{ 91980, 3, {73,36,35}},
+{ 92004, 3, {51,44,41}},
+{ 92040, 3, {59,40,39}},
+{ 92070, 3, {55,54,31}},
+{ 92088, 3, {1279,9,8}},
+{ 92120, 3, {49,47,40}},
+{ 92376, 3, {1283,9,8}},
+{ 92448, 3, {107,32,27}},
+{ 92475, 3, {137,27,25}},
+{ 92512, 3, {59,49,32}},
+{ 92610, 3, {49,45,42}},
+{ 92664, 3, {54,44,39}},
+{ 92736, 3, {48,46,42}},
+{ 92796, 3, {57,44,37}},
+{ 92808, 3, {1289,9,8}},
+{ 92820, 3, {52,51,35}},
+{ 92880, 3, {48,45,43}},
+{ 92925, 3, {59,45,35}},
+{ 92952, 3, {1291,9,8}},
+{ 92960, 3, {83,35,32}},
+{ 93024, 3, {51,48,38}},
+{ 93060, 3, {47,45,44}},
+{ 93072, 3, {277,21,16}},
+{ 93100, 3, {50,49,38}},
+{ 93120, 3, {97,32,30}},
+{ 93240, 3, {56,45,37}},
+{ 93312, 3, {54,48,36}},
+{ 93324, 3, {101,33,28}},
+{ 93360, 3, {389,16,15}},
+{ 93384, 3, {1297,9,8}},
+{ 93420, 3, {173,27,20}},
+{ 93450, 3, {89,35,30}},
+{ 93480, 3, {57,41,40}},
+{ 93600, 3, {50,48,39}},
+{ 93636, 3, {51,51,36}},
+{ 93660, 3, {223,21,20}},
+{ 93672, 3, {1301,9,8}},
+{ 93720, 3, {71,40,33}},
+{ 93744, 3, {56,54,31}},
+{ 93780, 3, {521,15,12}},
+{ 93800, 3, {67,40,35}},
+{ 93816, 3, {1303,9,8}},
+{ 93825, 3, {139,27,25}},
+{ 93840, 3, {51,46,40}},
+{ 93852, 3, {79,36,33}},
+{ 93933, 3, {71,49,27}},
+{ 93960, 3, {58,45,36}},
+{ 93984, 3, {89,33,32}},
+{ 94050, 3, {55,45,38}},
+{ 94068, 3, {67,39,36}},
+{ 94080, 3, {49,48,40}},
+{ 94104, 3, {1307,9,8}},
+{ 94140, 3, {523,15,12}},
+{ 94176, 3, {109,32,27}},
+{ 94200, 3, {157,25,24}},
+{ 94248, 3, {51,44,42}},
+{ 94320, 3, {131,30,24}},
+{ 94380, 3, {55,44,39}},
+{ 94416, 3, {281,21,16}},
+{ 94710, 3, {55,42,41}},
+{ 94752, 3, {48,47,42}},
+{ 94815, 3, {49,45,43}},
+{ 94950, 3, {211,25,18}},
+{ 94968, 3, {1319,9,8}},
+{ 95040, 3, {48,45,44}},
+{ 95088, 3, {283,21,16}},
+{ 95112, 3, {1321,9,8}},
+{ 95160, 3, {61,40,39}},
+{ 95172, 3, {103,33,28}},
+{ 95280, 3, {397,16,15}},
+{ 95304, 3, {57,44,38}},
+{ 95328, 3, {331,18,16}},
+{ 95340, 3, {227,21,20}},
+{ 95400, 3, {53,45,40}},
+{ 95424, 3, {71,42,32}},
+{ 95445, 3, {101,35,27}},
+{ 95472, 3, {51,48,39}},
+{ 95480, 3, {56,55,31}},
+{ 95544, 3, {1327,9,8}},
+{ 95550, 3, {50,49,39}},
+{ 95580, 3, {59,45,36}},
+{ 95616, 3, {83,36,32}},
+{ 95648, 3, {61,49,32}},
+{ 95760, 3, {57,42,40}},
+{ 95880, 3, {51,47,40}},
+{ 95904, 3, {54,48,37}},
+{ 95940, 3, {52,45,41}},
+{ 96000, 3, {50,48,40}},
+{ 96012, 3, {127,28,27}},
+{ 96040, 3, {49,49,40}},
+{ 96075, 3, {61,45,35}},
+{ 96180, 3, {229,21,20}},
+{ 96240, 3, {401,16,15}},
+{ 96264, 3, {191,24,21}},
+{ 96360, 3, {73,40,33}},
+{ 96432, 3, {49,48,41}},
+{ 96492, 3, {51,44,43}},
+{ 96525, 3, {55,45,39}},
+{ 96552, 3, {149,27,24}},
+{ 96579, 3, {73,49,27}},
+{ 96660, 3, {179,27,20}},
+{ 96720, 3, {62,40,39}},
+{ 96768, 3, {48,48,42}},
+{ 96960, 3, {101,32,30}},
+{ 97020, 3, {49,45,44}},
+{ 97056, 3, {337,18,16}},
+{ 97104, 3, {56,51,34}},
+{ 97188, 3, {89,39,28}},
+{ 97200, 3, {48,45,45}},
+{ 97272, 3, {193,24,21}},
+{ 97308, 3, {53,51,36}},
+{ 97335, 3, {103,35,27}},
+{ 97344, 3, {52,48,39}},
+{ 97380, 3, {541,15,12}},
+{ 97440, 3, {58,42,40}},
+{ 97632, 3, {113,32,27}},
+{ 97650, 3, {62,45,35}},
+{ 97680, 3, {55,48,37}},
+{ 97740, 3, {181,27,20}},
+{ 97800, 3, {163,25,24}},
+{ 97812, 3, {57,44,39}},
+{ 97848, 3, {151,27,24}},
+{ 97860, 3, {233,21,20}},
+{ 97902, 3, {54,49,37}},
+{ 97920, 3, {51,48,40}},
+{ 97992, 3, {1361,9,8}},
+{ 98000, 3, {50,49,40}},
+{ 98010, 3, {55,54,33}},
+{ 98040, 3, {57,43,40}},
+{ 98112, 3, {73,42,32}},
+{ 98124, 3, {52,51,37}},
+{ 98160, 3, {409,16,15}},
+{ 98280, 3, {52,45,42}},
+{ 98400, 3, {50,48,41}},
+{ 98424, 3, {1367,9,8}},
+{ 98448, 3, {293,21,16}},
+{ 98460, 3, {547,15,12}},
+{ 98496, 3, {54,48,38}},
+{ 98592, 3, {79,39,32}},
+{ 98604, 3, {83,36,33}},
+{ 98640, 3, {137,30,24}},
+{ 98736, 3, {51,44,44}},
+{ 98784, 3, {49,48,42}},
+{ 98820, 3, {61,45,36}},
+{ 98856, 3, {1373,9,8}},
+{ 98868, 3, {107,33,28}},
+{ 98880, 3, {103,32,30}},
+{ 99000, 3, {50,45,44}},
+{ 99036, 3, {131,28,27}},
+{ 99120, 3, {59,42,40}},
+{ 99144, 3, {54,51,36}},
+{ 99216, 3, {53,48,39}},
+{ 99225, 3, {49,45,45}},
+{ 99288, 3, {197,24,21}},
+{ 99330, 3, {55,43,42}},
+{ 99360, 3, {48,46,45}},
+{ 99400, 3, {71,40,35}},
+{ 99432, 3, {1381,9,8}},
+{ 99528, 3, {58,44,39}},
+{ 99540, 3, {79,36,35}},
+{ 99680, 3, {89,35,32}},
+{ 99684, 3, {71,39,36}},
+{ 99900, 3, {54,50,37}},
+{ 99936, 3, {347,18,16}},
+{ 99960, 3, {51,49,40}},
+{ 100080, 3, {139,30,24}},
+{ 100200, 3, {167,25,24}},
+{ 100260, 3, {557,15,12}},
+{ 100296, 3, {199,24,21}},
+{ 100320, 3, {57,44,40}},
+{ 100350, 3, {223,25,18}},
+{ 100368, 3, {51,48,41}},
+{ 100380, 3, {239,21,20}},
+{ 100440, 3, {62,45,36}},
+{ 100450, 3, {50,49,41}},
+{ 100485, 3, {63,55,29}},
+{ 100512, 3, {349,18,16}},
+{ 100560, 3, {419,16,15}},
+{ 100575, 3, {149,27,25}},
+{ 100584, 3, {127,33,24}},
+{ 100620, 3, {52,45,43}},
+{ 100716, 3, {109,33,28}},
+{ 100728, 3, {1399,9,8}},
+{ 100776, 3, {52,51,38}},
+{ 100800, 3, {50,48,42}},
+{ 100980, 3, {51,45,44}},
+{ 101010, 3, {65,42,37}},
+{ 101040, 3, {421,16,15}},
+{ 101088, 3, {54,48,39}},
+{ 101115, 3, {107,35,27}},
+{ 101136, 3, {49,48,43}},
+{ 101220, 3, {241,21,20}},
+{ 101232, 3, {57,48,37}},
+{ 101244, 3, {59,44,39}},
+{ 101340, 3, {563,15,12}},
+{ 101430, 3, {49,46,45}},
+{ 101448, 3, {1409,9,8}},
+{ 101475, 3, {55,45,41}},
+{ 101520, 3, {48,47,45}},
+{ 101600, 3, {127,32,25}},
+{ 101640, 3, {55,44,42}},
+{ 101664, 3, {353,18,16}},
+{ 101736, 3, {157,27,24}},
+{ 101850, 3, {97,35,30}},
+{ 101920, 3, {52,49,40}},
+{ 101925, 3, {151,27,25}},
+{ 102000, 3, {51,50,40}},
+{ 102150, 3, {227,25,18}},
+{ 102200, 3, {73,40,35}},
+{ 102375, 3, {65,45,35}},
+{ 102420, 3, {569,15,12}},
+{ 102432, 3, {97,33,32}},
+{ 102456, 3, {1423,9,8}},
+{ 102480, 3, {61,42,40}},
+{ 102492, 3, {73,39,36}},
+{ 102528, 3, {89,36,32}},
+{ 102564, 3, {63,44,37}},
+{ 102600, 3, {54,50,38}},
+{ 102720, 3, {107,32,30}},
+{ 102744, 3, {1427,9,8}},
+{ 102780, 3, {571,15,12}},
+{ 102816, 3, {51,48,42}},
+{ 102828, 3, {57,44,41}},
+{ 102888, 3, {1429,9,8}},
+{ 102900, 3, {50,49,42}},
+{ 102960, 3, {52,45,44}},
+{ 103005, 3, {109,35,27}},
+{ 103050, 3, {229,25,18}},
+{ 103140, 3, {191,27,20}},
+{ 103152, 3, {307,21,16}},
+{ 103176, 3, {1433,9,8}},
+{ 103194, 3, {54,49,39}},
+{ 103200, 3, {50,48,43}},
+{ 103224, 3, {51,46,44}},
+{ 103320, 3, {56,45,41}},
+{ 103392, 3, {359,18,16}},
+{ 103428, 3, {52,51,39}},
+{ 103440, 3, {431,16,15}},
+{ 103488, 3, {49,48,44}},
+{ 103572, 3, {137,28,27}},
+{ 103584, 3, {83,39,32}},
+{ 103608, 3, {1439,9,8}},
+{ 103635, 3, {49,47,45}},
+{ 103680, 3, {48,48,45}},
+{ 103740, 3, {57,52,35}},
+{ 103752, 3, {131,33,24}},
+{ 103800, 3, {173,25,24}},
+{ 103860, 3, {577,15,12}},
+{ 103880, 3, {53,49,40}},
+{ 103920, 3, {433,16,15}},
+{ 103950, 3, {55,45,42}},
+{ 103968, 3, {57,48,38}},
+{ 104040, 3, {51,51,40}},
+{ 104160, 3, {62,42,40}},
+{ 104184, 3, {1447,9,8}},
+{ 104220, 3, {193,27,20}},
+{ 104280, 3, {79,40,33}},
+{ 104400, 3, {58,45,40}},
+{ 104412, 3, {113,33,28}},
+{ 104472, 3, {1451,9,8}},
+{ 104496, 3, {311,21,16}},
+{ 104517, 3, {79,49,27}},
+{ 104520, 3, {67,40,39}},
+{ 104580, 3, {83,36,35}},
+{ 104616, 3, {1453,9,8}},
+{ 104640, 3, {109,32,30}},
+{ 104676, 3, {61,44,39}},
+{ 104720, 3, {56,55,34}},
+{ 104800, 3, {131,32,25}},
+{ 104832, 3, {52,48,42}},
+{ 104850, 3, {233,25,18}},
+{ 104880, 3, {57,46,40}},
+{ 104940, 3, {53,45,44}},
+{ 105048, 3, {1459,9,8}},
+{ 105056, 3, {67,49,32}},
+{ 105084, 3, {139,28,27}},
+{ 105168, 3, {313,21,16}},
+{ 105264, 3, {51,48,43}},
+{ 105300, 3, {52,45,45}},
+{ 105336, 3, {57,44,42}},
+{ 105350, 3, {50,49,43}},
+{ 105360, 3, {439,16,15}},
+{ 105420, 3, {251,21,20}},
+{ 105468, 3, {51,47,44}},
+{ 105525, 3, {67,45,35}},
+{ 105600, 3, {50,48,44}},
+{ 105624, 3, {163,27,24}},
+{ 105660, 3, {587,15,12}},
+{ 105672, 3, {56,51,37}},
+{ 105696, 3, {367,18,16}},
+{ 105732, 3, {89,36,33}},
+{ 105840, 3, {49,48,45}},
+{ 105912, 3, {1471,9,8}},
+{ 105924, 3, {97,39,28}},
+{ 105975, 3, {157,27,25}},
+{ 106050, 3, {101,35,30}},
+{ 106080, 3, {52,51,40}},
+{ 106176, 3, {79,42,32}},
+{ 106200, 3, {59,45,40}},
+{ 106260, 3, {55,46,42}},
+{ 106272, 3, {54,48,41}},
+{ 106320, 3, {443,16,15}},
+{ 106344, 3, {211,24,21}},
+{ 106380, 3, {197,27,20}},
+{ 106392, 3, {62,44,39}},
+{ 106425, 3, {55,45,43}},
+{ 106470, 3, {65,42,39}},
+{ 106488, 3, {58,51,36}},
+{ 106512, 3, {317,21,16}},
+{ 106560, 3, {60,48,37}},
+{ 106575, 3, {75,49,29}},
+{ 106632, 3, {1481,9,8}},
+{ 106656, 3, {101,33,32}},
+{ 106740, 3, {593,15,12}},
+{ 106776, 3, {1483,9,8}},
+{ 106785, 3, {113,35,27}},
+{ 106848, 3, {53,48,42}},
+{ 106920, 3, {54,45,44}},
+{ 107064, 3, {1487,9,8}},
+{ 107160, 3, {57,47,40}},
+{ 107208, 3, {1489,9,8}},
+{ 107280, 3, {149,30,24}},
+{ 107400, 3, {179,25,24}},
+{ 107415, 3, {63,55,31}},
+{ 107424, 3, {373,18,16}},
+{ 107460, 3, {199,27,20}},
+{ 107496, 3, {1493,9,8}},
+{ 107550, 3, {239,25,18}},
+{ 107640, 3, {52,46,45}},
+{ 107712, 3, {51,48,44}},
+{ 107760, 3, {449,16,15}},
+{ 107800, 3, {50,49,44}},
+{ 107820, 3, {599,15,12}},
+{ 107844, 3, {57,44,43}},
+{ 107928, 3, {1499,9,8}},
+{ 107940, 3, {257,21,20}},
+{ 108000, 3, {50,48,45}},
+{ 108045, 3, {49,49,45}},
+{ 108108, 3, {63,44,39}},
+{ 108120, 3, {53,51,40}},
+{ 108150, 3, {103,35,30}},
+{ 108180, 3, {601,15,12}},
+{ 108192, 3, {49,48,46}},
+{ 108216, 3, {167,27,24}},
+{ 108225, 3, {65,45,37}},
+{ 108240, 3, {55,48,41}},
+{ 108324, 3, {59,51,36}},
+{ 108360, 3, {56,45,43}},
+{ 108450, 3, {241,25,18}},
+{ 108480, 3, {113,32,30}},
+{ 108486, 3, {54,49,41}},
+{ 108504, 3, {137,33,24}},
+{ 108528, 3, {56,51,38}},
+{ 108540, 3, {67,45,36}},
+{ 108570, 3, {55,47,42}},
+{ 108576, 3, {58,48,39}},
+{ 108600, 3, {181,25,24}},
+{ 108640, 3, {97,35,32}},
+{ 108675, 3, {69,45,35}},
+{ 108720, 3, {151,30,24}},
+{ 108732, 3, {52,51,41}},
+{ 108768, 3, {103,33,32}},
+{ 108780, 3, {60,49,37}},
+{ 108792, 3, {1511,9,8}},
+{ 108864, 3, {54,48,42}},
+{ 108900, 3, {55,45,44}},
+{ 109152, 3, {379,18,16}},
+{ 109260, 3, {607,15,12}},
+{ 109440, 3, {57,48,40}},
+{ 109560, 3, {83,40,33}},
+{ 109600, 3, {137,32,25}},
+{ 109656, 3, {1523,9,8}},
+{ 109668, 3, {57,52,37}},
+{ 109680, 3, {457,16,15}},
+{ 109728, 3, {127,32,27}},
+{ 109760, 3, {56,49,40}},
+{ 109800, 3, {61,45,40}},
+{ 109809, 3, {83,49,27}},
+{ 109890, 3, {55,54,37}},
+{ 109956, 3, {51,49,44}},
+{ 109980, 3, {52,47,45}},
+{ 110025, 3, {163,27,25}},
+{ 110088, 3, {139,33,24}},
+{ 110160, 3, {51,48,45}},
+{ 110232, 3, {1531,9,8}},
+{ 110250, 3, {50,49,45}},
+{ 110292, 3, {101,39,28}},
+{ 110304, 3, {383,18,16}},
+{ 110340, 3, {613,15,12}},
+{ 110352, 3, {57,44,44}},
+{ 110400, 3, {50,48,46}},
+{ 110448, 3, {59,48,39}},
+{ 110460, 3, {263,21,20}},
+{ 110544, 3, {49,48,47}},
+{ 110600, 3, {79,40,35}},
+{ 110640, 3, {461,16,15}},
+{ 110700, 3, {54,50,41}},
+{ 110760, 3, {71,40,39}},
+{ 110880, 3, {56,45,44}},
+{ 110916, 3, {79,39,36}},
+{ 110976, 3, {64,51,34}},
+{ 111060, 3, {617,15,12}},
+{ 111072, 3, {89,39,32}},
+{ 111096, 3, {1543,9,8}},
+{ 111120, 3, {463,16,15}},
+{ 111132, 3, {54,49,42}},
+{ 111200, 3, {139,32,25}},
+{ 111216, 3, {331,21,16}},
+{ 111328, 3, {71,49,32}},
+{ 111375, 3, {55,45,45}},
+{ 111384, 3, {52,51,42}},
+{ 111420, 3, {619,15,12}},
+{ 111456, 3, {54,48,43}},
+{ 111528, 3, {1549,9,8}},
+{ 111552, 3, {83,42,32}},
+{ 111600, 3, {62,45,40}},
+{ 111720, 3, {57,49,40}},
+{ 111744, 3, {97,36,32}},
+{ 111816, 3, {1553,9,8}},
+{ 111825, 3, {71,45,35}},
+{ 111888, 3, {56,54,37}},
+{ 111930, 3, {65,42,41}},
+{ 111996, 3, {61,51,36}},
+{ 112032, 3, {389,18,16}},
+{ 112080, 3, {467,16,15}},
+{ 112104, 3, {173,27,24}},
+{ 112140, 3, {89,36,35}},
+{ 112176, 3, {57,48,41}},
+{ 112200, 3, {51,50,44}},
+{ 112248, 3, {1559,9,8}},
+{ 112320, 3, {52,48,45}},
+{ 112350, 3, {107,35,30}},
+{ 112392, 3, {223,24,21}},
+{ 112455, 3, {51,49,45}},
+{ 112476, 3, {103,39,28}},
+{ 112560, 3, {67,42,40}},
+{ 112608, 3, {51,48,46}},
+{ 112632, 3, {57,52,38}},
+{ 112644, 3, {149,28,27}},
+{ 112700, 3, {50,49,46}},
+{ 112725, 3, {167,27,25}},
+{ 112800, 3, {50,48,47}},
+{ 112824, 3, {1567,9,8}},
+{ 112860, 3, {57,45,44}},
+{ 112896, 3, {49,48,48}},
+{ 112950, 3, {251,25,18}},
+{ 112980, 3, {269,21,20}},
+{ 112992, 3, {107,33,32}},
+{ 113040, 3, {157,30,24}},
+{ 113112, 3, {1571,9,8}},
+{ 113120, 3, {101,35,32}},
+{ 113184, 3, {131,32,27}},
+{ 113190, 3, {55,49,42}},
+{ 113220, 3, {60,51,37}},
+{ 113232, 3, {337,21,16}},
+{ 113256, 3, {66,44,39}},
+{ 113400, 3, {56,45,45}},
+{ 113520, 3, {55,48,43}},
+{ 113580, 3, {631,15,12}},
+{ 113652, 3, {63,44,41}},
+{ 113680, 3, {58,49,40}},
+{ 113688, 3, {1579,9,8}},
+{ 113778, 3, {54,49,43}},
+{ 113820, 3, {271,21,20}},
+{ 113832, 3, {62,51,36}},
+{ 113850, 3, {55,46,45}},
+{ 113880, 3, {73,40,39}},
+{ 113925, 3, {75,49,31}},
+{ 113940, 3, {211,27,20}},
+{ 113960, 3, {56,55,37}},
+{ 113976, 3, {1583,9,8}},
+{ 114000, 3, {57,50,40}},
+{ 114036, 3, {52,51,43}},
+{ 114048, 3, {54,48,44}},
+{ 114075, 3, {65,45,39}},
+{ 114156, 3, {151,28,27}},
+{ 114192, 3, {61,48,39}},
+{ 114240, 3, {56,51,40}},
+{ 114336, 3, {397,18,16}},
+{ 114345, 3, {63,55,33}},
+{ 114408, 3, {227,24,21}},
+{ 114444, 3, {51,51,44}},
+{ 114450, 3, {109,35,30}},
+{ 114464, 3, {73,49,32}},
+{ 114480, 3, {53,48,45}},
+{ 114600, 3, {191,25,24}},
+{ 114660, 3, {52,49,45}},
+{ 114840, 3, {58,45,44}},
+{ 114912, 3, {57,48,42}},
+{ 114960, 3, {479,16,15}},
+{ 114972, 3, {67,44,39}},
+{ 114975, 3, {73,45,35}},
+{ 114984, 3, {1597,9,8}},
+{ 115020, 3, {71,45,36}},
+{ 115056, 3, {51,48,47}},
+{ 115104, 3, {109,33,32}},
+{ 115150, 3, {50,49,47}},
+{ 115200, 3, {50,48,48}},
+{ 115236, 3, {97,36,33}},
+{ 115248, 3, {49,49,48}},
+{ 115272, 3, {1601,9,8}},
+{ 115360, 3, {103,35,32}},
+{ 115368, 3, {57,46,44}},
+{ 115380, 3, {641,15,12}},
+{ 115416, 3, {229,24,21}},
+{ 115488, 3, {401,18,16}},
+{ 115500, 3, {55,50,42}},
+{ 115596, 3, {57,52,39}},
+{ 115640, 3, {59,49,40}},
+{ 115650, 3, {257,25,18}},
+{ 115704, 3, {1607,9,8}},
+{ 115740, 3, {643,15,12}},
+{ 115800, 3, {193,25,24}},
+{ 115830, 3, {55,54,39}},
+{ 115848, 3, {1609,9,8}},
+{ 115920, 3, {56,46,45}},
+{ 115992, 3, {179,27,24}},
+{ 116064, 3, {62,48,39}},
+{ 116100, 3, {54,50,43}},
+{ 116136, 3, {1613,9,8}},
+{ 116160, 3, {55,48,44}},
+{ 116200, 3, {83,40,35}},
+{ 116280, 3, {57,51,40}},
+{ 116325, 3, {55,47,45}},
+{ 116340, 3, {277,21,20}},
+{ 116352, 3, {101,36,32}},
+{ 116424, 3, {54,49,44}},
+{ 116460, 3, {647,15,12}},
+{ 116532, 3, {83,39,36}},
+{ 116568, 3, {1619,9,8}},
+{ 116592, 3, {347,21,16}},
+{ 116640, 3, {54,48,45}},
+{ 116688, 3, {52,51,44}},
+{ 116712, 3, {1621,9,8}},
+{ 116775, 3, {173,27,25}},
+{ 116820, 3, {59,45,44}},
+{ 116844, 3, {107,39,28}},
+{ 116865, 3, {53,49,45}},
+{ 116880, 3, {487,16,15}},
+{ 116928, 3, {58,48,42}},
+{ 117000, 3, {52,50,45}},
+{ 117040, 3, {56,55,38}},
+{ 117096, 3, {56,51,41}},
+{ 117144, 3, {1627,9,8}},
+{ 117216, 3, {66,48,37}},
+{ 117264, 3, {349,21,16}},
+{ 117288, 3, {181,27,24}},
+{ 117348, 3, {127,33,28}},
+{ 117360, 3, {163,30,24}},
+{ 117390, 3, {65,43,42}},
+{ 117432, 3, {233,24,21}},
+{ 117480, 3, {89,40,33}},
+{ 117504, 3, {51,48,48}},
+{ 117540, 3, {653,15,12}},
+{ 117600, 3, {50,49,48}},
+{ 117648, 3, {57,48,43}},
+{ 117747, 3, {89,49,27}},
+{ 117792, 3, {409,18,16}},
+{ 117810, 3, {55,51,42}},
+{ 117840, 3, {491,16,15}},
+{ 117864, 3, {1637,9,8}},
+{ 117876, 3, {57,47,44}},
+{ 118008, 3, {149,33,24}},
+{ 118020, 3, {281,21,20}},
+{ 118080, 3, {60,48,41}},
+{ 118104, 3, {57,56,37}},
+{ 118125, 3, {75,45,35}},
+{ 118200, 3, {197,25,24}},
+{ 118260, 3, {73,45,36}},
+{ 118320, 3, {58,51,40}},
+{ 118350, 3, {263,25,18}},
+{ 118368, 3, {137,32,27}},
+{ 118400, 3, {64,50,37}},
+{ 118440, 3, {56,47,45}},
+{ 118560, 3, {57,52,40}},
+{ 118608, 3, {353,21,16}},
+{ 118620, 3, {659,15,12}},
+{ 118650, 3, {113,35,30}},
+{ 118656, 3, {103,36,32}},
+{ 118692, 3, {157,28,27}},
+{ 118755, 3, {65,63,29}},
+{ 118800, 3, {55,48,45}},
+{ 118860, 3, {283,21,20}},
+{ 118932, 3, {53,51,44}},
+{ 118944, 3, {59,48,42}},
+{ 118980, 3, {661,15,12}},
+{ 119028, 3, {109,39,28}},
+{ 119070, 3, {54,49,45}},
+{ 119196, 3, {63,44,43}},
+{ 119200, 3, {149,32,25}},
+{ 119232, 3, {54,48,46}},
+{ 119280, 3, {71,42,40}},
+{ 119304, 3, {1657,9,8}},
+{ 119328, 3, {113,33,32}},
+{ 119340, 3, {52,51,45}},
+{ 119400, 3, {199,25,24}},
+{ 119560, 3, {61,49,40}},
+{ 119592, 3, {151,33,24}},
+{ 119616, 3, {89,42,32}},
+{ 119736, 3, {1663,9,8}},
+{ 119760, 3, {499,16,15}},
+{ 119840, 3, {107,35,32}},
+{ 119925, 3, {65,45,41}},
+{ 119952, 3, {51,49,48}},
+{ 119988, 3, {101,36,33}},
+{ 120000, 3, {50,50,48}},
+{ 120015, 3, {127,35,27}},
+{ 120024, 3, {1667,9,8}},
+{ 120050, 3, {50,49,49}},
+{ 120096, 3, {139,32,27}},
+{ 120120, 3, {55,52,42}},
+{ 120168, 3, {1669,9,8}},
+{ 120240, 3, {167,30,24}},
+{ 120360, 3, {59,51,40}},
+{ 120384, 3, {57,48,44}},
+{ 120420, 3, {223,27,20}},
+{ 120456, 3, {239,24,21}},
+{ 120540, 3, {60,49,41}},
+{ 120600, 3, {67,45,40}},
+{ 120624, 3, {359,21,16}},
+{ 120672, 3, {419,18,16}},
+{ 120720, 3, {503,16,15}},
+{ 120768, 3, {64,51,37}},
+{ 120780, 3, {61,45,44}},
+{ 120800, 3, {151,32,25}},
+{ 120825, 3, {179,27,25}},
+{ 120840, 3, {57,53,40}},
+{ 120960, 3, {56,48,45}},
+{ 121044, 3, {131,33,28}},
+{ 121050, 3, {269,25,18}},
+{ 121056, 3, {97,39,32}},
+{ 121140, 3, {673,15,12}},
+{ 121176, 3, {54,51,44}},
+{ 121212, 3, {63,52,37}},
+{ 121248, 3, {421,18,16}},
+{ 121275, 3, {55,49,45}},
+{ 121296, 3, {57,56,38}},
+{ 121440, 3, {55,48,46}},
+{ 121464, 3, {241,24,21}},
+{ 121500, 3, {54,50,45}},
+{ 121520, 3, {62,49,40}},
+{ 121524, 3, {57,52,41}},
+{ 121600, 3, {64,50,38}},
+{ 121680, 3, {52,52,45}},
+{ 121716, 3, {54,49,46}},
+{ 121770, 3, {55,54,41}},
+{ 121824, 3, {54,48,47}},
+{ 121836, 3, {71,44,39}},
+{ 121860, 3, {677,15,12}},
+{ 121896, 3, {1693,9,8}},
+{ 121920, 3, {127,32,30}},
+{ 121950, 3, {271,25,18}},
+{ 121968, 3, {63,44,44}},
+{ 121992, 3, {52,51,46}},
+{ 122080, 3, {109,35,32}},
+{ 122100, 3, {60,55,37}},
+{ 122160, 3, {509,16,15}},
+{ 122175, 3, {181,27,25}},
+{ 122184, 3, {1697,9,8}},
+{ 122220, 3, {97,36,35}},
+{ 122304, 3, {52,49,48}},
+{ 122328, 3, {1699,9,8}},
+{ 122364, 3, {103,36,33}},
+{ 122400, 3, {51,50,48}},
+{ 122430, 3, {55,53,42}},
+{ 122500, 3, {50,50,49}},
+{ 122544, 3, {69,48,37}},
+{ 122580, 3, {227,27,20}},
+{ 122640, 3, {73,42,40}},
+{ 122760, 3, {62,45,44}},
+{ 122808, 3, {56,51,43}},
+{ 122850, 3, {65,45,42}},
+{ 122892, 3, {57,49,44}},
+{ 122940, 3, {683,15,12}},
+{ 122976, 3, {61,48,42}},
+{ 123012, 3, {67,51,36}},
+{ 123048, 3, {1709,9,8}},
+{ 123060, 3, {293,21,20}},
+{ 123120, 3, {57,48,45}},
+{ 123228, 3, {163,28,27}},
+{ 123240, 3, {79,40,39}},
+{ 123264, 3, {107,36,32}},
+{ 123312, 3, {367,21,16}},
+{ 123396, 3, {113,39,28}},
+{ 123420, 3, {55,51,44}},
+{ 123480, 3, {56,49,45}},
+{ 123660, 3, {229,27,20}},
+{ 123750, 3, {55,50,45}},
+{ 123760, 3, {65,56,34}},
+{ 123768, 3, {191,27,24}},
+{ 123795, 3, {131,35,27}},
+{ 123840, 3, {60,48,43}},
+{ 123872, 3, {79,49,32}},
+{ 123912, 3, {1721,9,8}},
+{ 123984, 3, {56,54,41}},
+{ 124020, 3, {53,52,45}},
+{ 124032, 3, {64,51,38}},
+{ 124056, 3, {1723,9,8}},
+{ 124080, 3, {55,48,47}},
+{ 124128, 3, {431,18,16}},
+{ 124200, 3, {54,50,46}},
+{ 124344, 3, {157,33,24}},
+{ 124362, 3, {54,49,47}},
+{ 124380, 3, {691,15,12}},
+{ 124416, 3, {54,48,48}},
+{ 124425, 3, {79,45,35}},
+{ 124440, 3, {61,51,40}},
+{ 124488, 3, {57,52,42}},
+{ 124560, 3, {173,30,24}},
+{ 124600, 3, {89,40,35}},
+{ 124644, 3, {52,51,47}},
+{ 124650, 3, {277,25,18}},
+{ 124656, 3, {53,49,48}},
+{ 124704, 3, {433,18,16}},
+{ 124740, 3, {55,54,42}},
+{ 124776, 3, {1733,9,8}},
+{ 124800, 3, {52,50,48}},
+{ 124848, 3, {51,51,48}},
+{ 124950, 3, {51,50,49}},
+{ 124956, 3, {89,39,36}},
+{ 124992, 3, {62,48,42}},
+{ 125040, 3, {521,16,15}},
+{ 125064, 3, {193,27,24}},
+{ 125268, 3, {73,44,39}},
+{ 125280, 3, {58,48,45}},
+{ 125328, 3, {373,21,16}},
+{ 125352, 3, {1741,9,8}},
+{ 125400, 3, {57,50,44}},
+{ 125424, 3, {67,48,39}},
+{ 125460, 3, {60,51,41}},
+{ 125520, 3, {523,16,15}},
+{ 125568, 3, {109,36,32}},
+{ 125580, 3, {65,46,42}},
+{ 125600, 3, {157,32,25}},
+{ 125664, 3, {56,51,44}},
+{ 125685, 3, {57,49,45}},
+{ 125760, 3, {131,32,30}},
+{ 125775, 3, {65,45,43}},
+{ 125784, 3, {1747,9,8}},
+{ 125820, 3, {233,27,20}},
+{ 125856, 3, {57,48,46}},
+{ 126000, 3, {56,50,45}},
+{ 126048, 3, {101,39,32}},
+{ 126180, 3, {701,15,12}},
+{ 126216, 3, {1753,9,8}},
+{ 126225, 3, {55,51,45}},
+{ 126252, 3, {167,28,27}},
+{ 126280, 3, {56,55,41}},
+{ 126360, 3, {54,52,45}},
+{ 126420, 3, {60,49,43}},
+{ 126432, 3, {439,18,16}},
+{ 126450, 3, {281,25,18}},
+{ 126480, 3, {62,51,40}},
+{ 126504, 3, {251,24,21}},
+{ 126540, 3, {60,57,37}},
+{ 126560, 3, {113,35,32}},
+{ 126588, 3, {137,33,28}},
+{ 126600, 3, {211,25,24}},
+{ 126648, 3, {1759,9,8}},
+{ 126720, 3, {55,48,48}},
+{ 126900, 3, {54,50,47}},
+{ 126945, 3, {65,63,31}},
+{ 127008, 3, {54,49,48}},
+{ 127050, 3, {55,55,42}},
+{ 127116, 3, {107,36,33}},
+{ 127200, 3, {53,50,48}},
+{ 127260, 3, {101,36,35}},
+{ 127296, 3, {52,51,48}},
+{ 127344, 3, {379,21,16}},
+{ 127350, 3, {283,25,18}},
+{ 127400, 3, {52,50,49}},
+{ 127440, 3, {59,48,45}},
+{ 127452, 3, {57,52,43}},
+{ 127512, 3, {63,46,44}},
+{ 127584, 3, {443,18,16}},
+{ 127620, 3, {709,15,12}},
+{ 127656, 3, {197,27,24}},
+{ 127680, 3, {57,56,40}},
+{ 127710, 3, {55,54,43}},
+{ 127764, 3, {63,52,39}},
+{ 127800, 3, {71,45,40}},
+{ 127872, 3, {64,54,37}},
+{ 127890, 3, {58,49,45}},
+{ 127908, 3, {57,51,44}},
+{ 127944, 3, {1777,9,8}},
+{ 127980, 3, {79,45,36}},
+{ 128000, 3, {64,50,40}},
+{ 128040, 3, {97,40,33}},
+{ 128205, 3, {63,55,37}},
+{ 128310, 3, {65,47,42}},
+{ 128331, 3, {97,49,27}},
+{ 128376, 3, {1783,9,8}},
+{ 128436, 3, {139,33,28}},
+{ 128520, 3, {56,51,45}},
+{ 128544, 3, {103,39,32}},
+{ 128592, 3, {57,48,47}},
+{ 128625, 3, {75,49,35}},
+{ 128664, 3, {1787,9,8}},
+{ 128688, 3, {383,21,16}},
+{ 128700, 3, {55,52,45}},
+{ 128736, 3, {149,32,27}},
+{ 128808, 3, {1789,9,8}},
+{ 128880, 3, {179,30,24}},
+{ 128925, 3, {191,27,25}},
+{ 128940, 3, {307,21,20}},
+{ 128952, 3, {199,27,24}},
+{ 129060, 3, {239,27,20}},
+{ 129096, 3, {163,33,24}},
+{ 129195, 3, {81,55,29}},
+{ 129312, 3, {449,18,16}},
+{ 129360, 3, {55,49,48}},
+{ 129420, 3, {719,15,12}},
+{ 129465, 3, {137,35,27}},
+{ 129480, 3, {83,40,39}},
+{ 129492, 3, {109,36,33}},
+{ 129528, 3, {257,24,21}},
+{ 129600, 3, {54,50,48}},
+{ 129654, 3, {54,49,49}},
+{ 129672, 3, {1801,9,8}},
+{ 129744, 3, {53,51,48}},
+{ 129780, 3, {103,36,35}},
+{ 129840, 3, {541,16,15}},
+{ 129850, 3, {53,50,49}},
+{ 129870, 3, {65,54,37}},
+{ 129888, 3, {66,48,41}},
+{ 129948, 3, {52,51,49}},
+{ 129960, 3, {57,57,40}},
+{ 130032, 3, {56,54,43}},
+{ 130095, 3, {59,49,45}},
+{ 130140, 3, {241,27,20}},
+{ 130144, 3, {83,49,32}},
+{ 130152, 3, {58,51,44}},
+{ 130176, 3, {113,36,32}},
+{ 130240, 3, {64,55,37}},
+{ 130275, 3, {193,27,25}},
+{ 130284, 3, {63,47,44}},
+{ 130320, 3, {181,30,24}},
+{ 130356, 3, {71,51,36}},
+{ 130368, 3, {97,42,32}},
+{ 130392, 3, {1811,9,8}},
+{ 130400, 3, {163,32,25}},
+{ 130416, 3, {57,52,44}},
+{ 130464, 3, {151,32,27}},
+{ 130536, 3, {63,56,37}},
+{ 130560, 3, {64,51,40}},
+{ 130620, 3, {311,21,20}},
+{ 130680, 3, {55,54,44}},
+{ 130704, 3, {389,21,16}},
+{ 130725, 3, {83,45,35}},
+{ 130788, 3, {173,28,27}},
+{ 130860, 3, {727,15,12}},
+{ 130872, 3, {57,56,41}},
+{ 131040, 3, {56,52,45}},
+{ 131175, 3, {55,53,45}},
+{ 131200, 3, {64,50,41}},
+{ 131256, 3, {1823,9,8}},
+{ 131280, 3, {547,16,15}},
+{ 131320, 3, {67,49,40}},
+{ 131328, 3, {57,48,48}},
+{ 131355, 3, {139,35,27}},
+{ 131376, 3, {56,51,46}},
+{ 131400, 3, {73,45,40}},
+{ 131460, 3, {313,21,20}},
+{ 131520, 3, {137,32,30}},
+{ 131580, 3, {60,51,43}},
+{ 131616, 3, {457,18,16}},
+{ 131625, 3, {65,45,45}},
+{ 131670, 3, {57,55,42}},
+{ 131712, 3, {56,49,48}},
+{ 131760, 3, {61,48,45}},
+{ 131832, 3, {1831,9,8}},
+{ 131850, 3, {293,25,18}},
+{ 131940, 3, {733,15,12}},
+{ 132000, 3, {55,50,48}},
+{ 132132, 3, {77,44,39}},
+{ 132192, 3, {54,51,48}},
+{ 132240, 3, {58,57,40}},
+{ 132264, 3, {167,33,24}},
+{ 132300, 3, {54,50,49}},
+{ 132396, 3, {59,51,44}},
+{ 132440, 3, {56,55,43}},
+{ 132480, 3, {60,48,46}},
+{ 132552, 3, {263,24,21}},
+{ 132600, 3, {52,51,50}},
+{ 132660, 3, {67,45,44}},
+{ 132720, 3, {79,42,40}},
+{ 132756, 3, {69,52,37}},
+{ 132768, 3, {461,18,16}},
+{ 132912, 3, {71,48,39}},
+{ 132924, 3, {57,53,44}},
+{ 132975, 3, {197,27,25}},
+{ 132984, 3, {1847,9,8}},
+{ 133020, 3, {739,15,12}},
+{ 133056, 3, {56,54,44}},
+{ 133140, 3, {317,21,20}},
+{ 133280, 3, {68,49,40}},
+{ 133320, 3, {101,40,33}},
+{ 133344, 3, {463,18,16}},
+{ 133350, 3, {127,35,30}},
+{ 133380, 3, {57,52,45}},
+{ 133392, 3, {397,21,16}},
+{ 133440, 3, {139,32,30}},
+{ 133536, 3, {107,39,32}},
+{ 133560, 3, {56,53,45}},
+{ 133600, 3, {167,32,25}},
+{ 133623, 3, {101,49,27}},
+{ 133650, 3, {55,54,45}},
+{ 133680, 3, {557,16,15}},
+{ 133740, 3, {743,15,12}},
+{ 133760, 3, {64,55,38}},
+{ 133770, 3, {65,49,42}},
+{ 133800, 3, {223,25,24}},
+{ 133824, 3, {64,51,41}},
+{ 133920, 3, {62,48,45}},
+{ 133980, 3, {58,55,42}},
+{ 133992, 3, {1861,9,8}},
+{ 134028, 3, {73,51,36}},
+{ 134064, 3, {57,49,48}},
+{ 134112, 3, {127,33,32}},
+{ 134232, 3, {56,51,47}},
+{ 134244, 3, {113,36,33}},
+{ 134316, 3, {63,52,41}},
+{ 134325, 3, {199,27,25}},
+{ 134400, 3, {56,50,48}},
+{ 134424, 3, {1867,9,8}},
+{ 134460, 3, {83,45,36}},
+{ 134496, 3, {467,18,16}},
+{ 134505, 3, {61,49,45}},
+{ 134520, 3, {59,57,40}},
+{ 134550, 3, {65,46,45}},
+{ 134640, 3, {55,51,48}},
+{ 134680, 3, {65,56,37}},
+{ 134712, 3, {1871,9,8}},
+{ 134736, 3, {401,21,16}},
+{ 134750, 3, {55,50,49}},
+{ 134784, 3, {54,52,48}},
+{ 134820, 3, {107,36,35}},
+{ 134856, 3, {1873,9,8}},
+{ 134946, 3, {54,51,49}},
+{ 134976, 3, {64,57,37}},
+{ 135000, 3, {54,50,50}},
+{ 135072, 3, {67,48,42}},
+{ 135120, 3, {563,16,15}},
+{ 135135, 3, {63,55,39}},
+{ 135144, 3, {1877,9,8}},
+{ 135180, 3, {751,15,12}},
+{ 135240, 3, {60,49,46}},
+{ 135252, 3, {52,51,51}},
+{ 135288, 3, {1879,9,8}},
+{ 135300, 3, {60,55,41}},
+{ 135324, 3, {179,28,27}},
+{ 135360, 3, {60,48,47}},
+{ 135432, 3, {57,54,44}},
+{ 135520, 3, {56,55,44}},
+{ 135540, 3, {251,27,20}},
+{ 135564, 3, {79,44,39}},
+{ 135576, 3, {269,24,21}},
+{ 135648, 3, {157,32,27}},
+{ 135720, 3, {58,52,45}},
+{ 135744, 3, {101,42,32}},
+{ 135792, 3, {69,48,41}},
+{ 135800, 3, {97,40,35}},
+{ 135828, 3, {63,49,44}},
+{ 135960, 3, {103,40,33}},
+{ 135975, 3, {75,49,37}},
+{ 136008, 3, {1889,9,8}},
+{ 136032, 3, {109,39,32}},
+{ 136080, 3, {56,54,45}},
+{ 136125, 3, {55,55,45}},
+{ 136188, 3, {97,39,36}},
+{ 136200, 3, {227,25,24}},
+{ 136224, 3, {66,48,43}},
+{ 136260, 3, {757,15,12}},
+{ 136269, 3, {103,49,27}},
+{ 136290, 3, {59,55,42}},
+{ 136344, 3, {57,52,46}},
+{ 136416, 3, {58,49,48}},
+{ 136500, 3, {65,50,42}},
+{ 136560, 3, {569,16,15}},
+{ 136584, 3, {271,24,21}},
+{ 136620, 3, {55,54,46}},
+{ 136656, 3, {73,48,39}},
+{ 136680, 3, {67,51,40}},
+{ 136710, 3, {62,49,45}},
+{ 136728, 3, {211,27,24}},
+{ 136752, 3, {66,56,37}},
+{ 136800, 3, {57,50,48}},
+{ 136836, 3, {181,28,27}},
+{ 136872, 3, {1901,9,8}},
+{ 136884, 3, {61,51,44}},
+{ 136890, 3, {65,54,39}},
+{ 136980, 3, {761,15,12}},
+{ 137016, 3, {173,33,24}},
+{ 137040, 3, {571,16,15}},
+{ 137088, 3, {56,51,48}},
+{ 137200, 3, {56,50,49}},
+{ 137256, 3, {57,56,43}},
+{ 137280, 3, {55,52,48}},
+{ 137304, 3, {1907,9,8}},
+{ 137340, 3, {109,36,35}},
+{ 137376, 3, {54,53,48}},
+{ 137400, 3, {229,25,24}},
+{ 137424, 3, {409,21,16}},
+{ 137475, 3, {65,47,45}},
+{ 137520, 3, {191,30,24}},
+{ 137550, 3, {131,35,30}},
+{ 137592, 3, {54,52,49}},
+{ 137600, 3, {64,50,43}},
+{ 137676, 3, {149,33,28}},
+{ 137700, 3, {54,51,50}},
+{ 137736, 3, {1913,9,8}},
+{ 137904, 3, {52,52,51}},
+{ 137940, 3, {57,55,44}},
+{ 137952, 3, {479,18,16}},
+{ 138060, 3, {59,52,45}},
+{ 138105, 3, {81,55,31}},
+{ 138150, 3, {307,25,18}},
+{ 138180, 3, {60,49,47}},
+{ 138240, 3, {60,48,48}},
+{ 138320, 3, {65,56,38}},
+{ 138336, 3, {131,33,32}},
+{ 138400, 3, {173,32,25}},
+{ 138420, 3, {769,15,12}},
+{ 138432, 3, {103,42,32}},
+{ 138480, 3, {577,16,15}},
+{ 138528, 3, {74,48,39}},
+{ 138600, 3, {56,55,45}},
+{ 138624, 3, {64,57,38}},
+{ 138684, 3, {127,39,28}},
+{ 138720, 3, {68,51,40}},
+{ 138768, 3, {59,49,48}},
+{ 138780, 3, {257,27,20}},
+{ 138840, 3, {89,40,39}},
+{ 138915, 3, {63,49,45}},
+{ 138960, 3, {193,30,24}},
+{ 139020, 3, {331,21,20}},
+{ 139032, 3, {1931,9,8}},
+{ 139080, 3, {61,57,40}},
+{ 139104, 3, {56,54,46}},
+{ 139128, 3, {62,51,44}},
+{ 139140, 3, {773,15,12}},
+{ 139160, 3, {71,49,40}},
+{ 139176, 3, {1933,9,8}},
+{ 139200, 3, {58,50,48}},
+{ 139230, 3, {65,51,42}},
+{ 139308, 3, {57,52,47}},
+{ 139392, 3, {66,48,44}},
+{ 139440, 3, {83,42,40}},
+{ 139524, 3, {151,33,28}},
+{ 139536, 3, {57,51,48}},
+{ 139552, 3, {89,49,32}},
+{ 139590, 3, {55,54,47}},
+{ 139608, 3, {277,24,21}},
+{ 139650, 3, {57,50,49}},
+{ 139800, 3, {233,25,24}},
+{ 139860, 3, {63,60,37}},
+{ 139920, 3, {55,53,48}},
+{ 139932, 3, {69,52,39}},
+{ 139944, 3, {56,51,49}},
+{ 139950, 3, {311,25,18}},
+{ 139968, 3, {54,54,48}},
+{ 140175, 3, {89,45,35}},
+{ 140220, 3, {60,57,41}},
+{ 140238, 3, {54,53,49}},
+{ 140256, 3, {487,18,16}},
+{ 140328, 3, {1949,9,8}},
+{ 140352, 3, {64,51,43}},
+{ 140400, 3, {54,52,50}},
+{ 140448, 3, {57,56,44}},
+{ 140472, 3, {1951,9,8}},
+{ 140556, 3, {53,52,51}},
+{ 140580, 3, {71,45,44}},
+{ 140679, 3, {77,63,29}},
+{ 140760, 3, {60,51,46}},
+{ 140784, 3, {419,21,16}},
+{ 140800, 3, {64,50,44}},
+{ 140805, 3, {149,35,27}},
+{ 140832, 3, {163,32,27}},
+{ 140850, 3, {313,25,18}},
+{ 140868, 3, {63,52,43}},
+{ 140880, 3, {587,16,15}},
+{ 140910, 3, {61,55,42}},
+{ 141024, 3, {113,39,32}},
+{ 141075, 3, {57,55,45}},
+{ 141120, 3, {56,56,45}},
+{ 141240, 3, {107,40,33}},
+{ 141360, 3, {62,57,40}},
+{ 141372, 3, {63,51,44}},
+{ 141400, 3, {101,40,35}},
+{ 141408, 3, {491,18,16}},
+{ 141456, 3, {421,21,16}},
+{ 141540, 3, {337,21,20}},
+{ 141561, 3, {107,49,27}},
+{ 141600, 3, {59,50,48}},
+{ 141624, 3, {281,24,21}},
+{ 141660, 3, {787,15,12}},
+{ 141680, 3, {56,55,46}},
+{ 141696, 3, {64,54,41}},
+{ 141768, 3, {179,33,24}},
+{ 141804, 3, {101,39,36}},
+{ 141840, 3, {197,30,24}},
+{ 141900, 3, {60,55,43}},
+{ 141960, 3, {65,52,42}},
+{ 141984, 3, {58,51,48}},
+{ 142020, 3, {263,27,20}},
+{ 142056, 3, {1973,9,8}},
+{ 142065, 3, {63,55,41}},
+{ 142080, 3, {64,60,37}},
+{ 142100, 3, {58,50,49}},
+{ 142128, 3, {56,54,47}},
+{ 142200, 3, {79,45,40}},
+{ 142240, 3, {127,35,32}},
+{ 142272, 3, {57,52,48}},
+{ 142320, 3, {593,16,15}},
+{ 142380, 3, {113,36,35}},
+{ 142416, 3, {69,48,43}},
+{ 142425, 3, {211,27,25}},
+{ 142428, 3, {83,44,39}},
+{ 142488, 3, {1979,9,8}},
+{ 142560, 3, {55,54,48}},
+{ 142632, 3, {283,24,21}},
+{ 142650, 3, {317,25,18}},
+{ 142695, 3, {151,35,27}},
+{ 142740, 3, {61,52,45}},
+{ 142800, 3, {56,51,50}},
+{ 142884, 3, {54,54,49}},
+{ 142956, 3, {57,57,44}},
+{ 143040, 3, {149,32,30}},
+{ 143052, 3, {131,39,28}},
+{ 143064, 3, {1987,9,8}},
+{ 143080, 3, {73,49,40}},
+{ 143100, 3, {54,53,50}},
+{ 143136, 3, {71,48,42}},
+{ 143200, 3, {179,32,25}},
+{ 143208, 3, {54,52,51}},
+{ 143220, 3, {62,55,42}},
+{ 143280, 3, {199,30,24}},
+{ 143325, 3, {65,49,45}},
+{ 143352, 3, {181,33,24}},
+{ 143400, 3, {239,25,24}},
+{ 143412, 3, {68,57,37}},
+{ 143460, 3, {797,15,12}},
+{ 143472, 3, {61,49,48}},
+{ 143496, 3, {1993,9,8}},
+{ 143550, 3, {58,55,45}},
+{ 143616, 3, {64,51,44}},
+{ 143640, 3, {57,56,45}},
+{ 143712, 3, {499,18,16}},
+{ 143760, 3, {599,16,15}},
+{ 143784, 3, {1997,9,8}},
+{ 143808, 3, {107,42,32}},
+{ 143820, 3, {60,51,47}},
+{ 143850, 3, {137,35,30}},
+{ 143880, 3, {109,40,33}},
+{ 143910, 3, {65,54,41}},
+{ 143928, 3, {1999,9,8}},
+{ 144000, 3, {60,50,48}},
+{ 144060, 3, {60,49,49}},
+{ 144144, 3, {63,52,44}},
+{ 144180, 3, {89,45,36}},
+{ 144200, 3, {103,40,35}},
+{ 144207, 3, {109,49,27}},
+{ 144216, 3, {2003,9,8}},
+{ 144240, 3, {601,16,15}},
+{ 144288, 3, {167,32,27}},
+{ 144300, 3, {65,60,37}},
+{ 144320, 3, {64,55,41}},
+{ 144396, 3, {191,28,27}},
+{ 144432, 3, {59,51,48}},
+{ 144504, 3, {223,27,24}},
+{ 144540, 3, {73,45,44}},
+{ 144550, 3, {59,50,49}},
+{ 144600, 3, {241,25,24}},
+{ 144612, 3, {103,39,36}},
+{ 144648, 3, {63,56,41}},
+{ 144672, 3, {137,33,32}},
+{ 144690, 3, {65,53,42}},
+{ 144720, 3, {67,48,45}},
+{ 144760, 3, {56,55,47}},
+{ 144792, 3, {2011,9,8}},
+{ 144800, 3, {181,32,25}},
+{ 144816, 3, {431,21,16}},
+{ 144840, 3, {71,51,40}},
+{ 144864, 3, {503,18,16}},
+{ 144960, 3, {151,32,30}},
+{ 145008, 3, {57,53,48}},
+{ 145044, 3, {79,51,36}},
+{ 145068, 3, {157,33,28}},
+{ 145080, 3, {62,52,45}},
+{ 145152, 3, {56,54,48}},
+{ 145200, 3, {55,55,48}},
+{ 145224, 3, {2017,9,8}},
+{ 145236, 3, {57,52,49}},
+{ 145260, 3, {269,27,20}},
+{ 145464, 3, {58,57,44}},
+{ 145488, 3, {433,21,16}},
+{ 145530, 3, {55,54,49}},
+{ 145620, 3, {809,15,12}},
+{ 145656, 3, {56,51,51}},
+{ 145680, 3, {607,16,15}},
+{ 145728, 3, {66,48,46}},
+{ 145740, 3, {347,21,20}},
+{ 145800, 3, {54,54,50}},
+{ 145824, 3, {62,49,48}},
+{ 145860, 3, {55,52,51}},
+{ 145908, 3, {193,28,27}},
+{ 145920, 3, {64,57,40}},
+{ 145944, 3, {2027,9,8}},
+{ 145950, 3, {139,35,30}},
+{ 145980, 3, {811,15,12}},
+{ 146025, 3, {59,55,45}},
+{ 146088, 3, {2029,9,8}},
+{ 146160, 3, {58,56,45}},
+{ 146250, 3, {65,50,45}},
+{ 146304, 3, {127,36,32}},
+{ 146340, 3, {271,27,20}},
+{ 146400, 3, {61,50,48}},
+{ 146496, 3, {109,42,32}},
+{ 146580, 3, {349,21,20}},
+{ 146592, 3, {509,18,16}},
+{ 146720, 3, {131,35,32}},
+{ 146784, 3, {139,33,32}},
+{ 146808, 3, {2039,9,8}},
+{ 146832, 3, {57,56,46}},
+{ 146880, 3, {60,51,48}},
+{ 146916, 3, {63,53,44}},
+{ 147000, 3, {60,50,49}},
+{ 147015, 3, {81,55,33}},
+{ 147060, 3, {60,57,43}},
+{ 147096, 3, {227,27,24}},
+{ 147108, 3, {69,52,41}},
+{ 147120, 3, {613,16,15}},
+{ 147168, 3, {73,48,42}},
+{ 147200, 3, {64,50,46}},
+{ 147288, 3, {68,57,38}},
+{ 147420, 3, {63,52,45}},
+{ 147504, 3, {439,21,16}},
+{ 147672, 3, {293,24,21}},
+{ 147735, 3, {67,49,45}},
+{ 147744, 3, {57,54,48}},
+{ 147780, 3, {821,15,12}},
+{ 147816, 3, {2053,9,8}},
+{ 147840, 3, {56,55,48}},
+{ 147888, 3, {79,48,39}},
+{ 147972, 3, {59,57,44}},
+{ 148080, 3, {617,16,15}},
+{ 148104, 3, {66,51,44}},
+{ 148140, 3, {823,15,12}},
+{ 148176, 3, {56,54,49}},
+{ 148200, 3, {57,52,50}},
+{ 148260, 3, {353,21,20}},
+{ 148365, 3, {157,35,27}},
+{ 148392, 3, {229,27,24}},
+{ 148500, 3, {55,54,50}},
+{ 148512, 3, {56,52,51}},
+{ 148536, 3, {2063,9,8}},
+{ 148560, 3, {619,16,15}},
+{ 148608, 3, {64,54,43}},
+{ 148680, 3, {59,56,45}},
+{ 148800, 3, {62,50,48}},
+{ 148848, 3, {443,21,16}},
+{ 148860, 3, {827,15,12}},
+{ 148896, 3, {66,48,47}},
+{ 148920, 3, {73,51,40}},
+{ 148932, 3, {197,28,27}},
+{ 148950, 3, {331,25,18}},
+{ 148968, 3, {2069,9,8}},
+{ 148995, 3, {63,55,43}},
+{ 149160, 3, {113,40,33}},
+{ 149175, 3, {65,51,45}},
+{ 149184, 3, {64,63,37}},
+{ 149220, 3, {829,15,12}},
+{ 149240, 3, {65,56,41}},
+{ 149328, 3, {61,51,48}},
+{ 149400, 3, {83,45,40}},
+{ 149450, 3, {61,50,49}},
+{ 149472, 3, {173,32,27}},
+{ 149499, 3, {113,49,27}},
+{ 149520, 3, {89,42,40}},
+{ 149568, 3, {64,57,41}},
+{ 149580, 3, {277,27,20}},
+{ 149604, 3, {137,39,28}},
+{ 149688, 3, {63,54,44}},
+{ 149760, 3, {60,52,48}},
+{ 149800, 3, {107,40,35}},
+{ 149832, 3, {2081,9,8}},
+{ 149940, 3, {60,51,49}},
+{ 149976, 3, {2083,9,8}},
+{ 150024, 3, {57,56,47}},
+{ 150048, 3, {521,18,16}},
+{ 150144, 3, {64,51,46}},
+{ 150150, 3, {65,55,42}},
+{ 150228, 3, {107,39,36}},
+{ 150264, 3, {2087,9,8}},
+{ 150336, 3, {58,54,48}},
+{ 150348, 3, {67,51,44}},
+{ 150381, 3, {77,63,31}},
+{ 150400, 3, {64,50,47}},
+{ 150408, 3, {2089,9,8}},
+{ 150444, 3, {199,28,27}},
+{ 150480, 3, {57,55,48}},
+{ 150525, 3, {223,27,25}},
+{ 150600, 3, {251,25,24}},
+{ 150612, 3, {163,33,28}},
+{ 150624, 3, {523,18,16}},
+{ 150675, 3, {75,49,41}},
+{ 150696, 3, {63,52,46}},
+{ 150720, 3, {157,32,30}},
+{ 150780, 3, {359,21,20}},
+{ 150822, 3, {57,54,49}},
+{ 150864, 3, {449,21,16}},
+{ 150876, 3, {127,36,33}},
+{ 150912, 3, {131,36,32}},
+{ 150920, 3, {56,55,49}},
+{ 150930, 3, {65,54,43}},
+{ 150975, 3, {61,55,45}},
+{ 150984, 3, {233,27,24}},
+{ 151020, 3, {839,15,12}},
+{ 151128, 3, {2099,9,8}},
+{ 151164, 3, {57,52,51}},
+{ 151200, 3, {56,54,50}},
+{ 151272, 3, {191,33,24}},
+{ 151320, 3, {97,40,39}},
+{ 151360, 3, {64,55,43}},
+{ 151368, 3, {56,53,51}},
+{ 151440, 3, {631,16,15}},
+{ 151470, 3, {55,54,51}},
+{ 151515, 3, {65,63,37}},
+{ 151536, 3, {66,56,41}},
+{ 151650, 3, {337,25,18}},
+{ 151704, 3, {63,56,43}},
+{ 151740, 3, {281,27,20}},
+{ 151776, 3, {62,51,48}},
+{ 151788, 3, {139,39,28}},
+{ 151800, 3, {60,55,46}},
+{ 151848, 3, {72,57,37}},
+{ 151872, 3, {113,42,32}},
+{ 151900, 3, {62,50,49}},
+{ 151920, 3, {211,30,24}},
+{ 151992, 3, {2111,9,8}},
+{ 152064, 3, {66,48,48}},
+{ 152096, 3, {97,49,32}},
+{ 152100, 3, {65,52,45}},
+{ 152136, 3, {2113,9,8}},
+{ 152145, 3, {69,49,45}},
+{ 152352, 3, {69,48,46}},
+{ 152388, 3, {83,51,36}},
+{ 152460, 3, {63,55,44}},
+{ 152592, 3, {68,51,44}},
+{ 152600, 3, {109,40,35}},
+{ 152640, 3, {60,53,48}},
+{ 152724, 3, {89,44,39}},
+{ 152760, 3, {67,57,40}},
+{ 152775, 3, {97,45,35}},
+{ 152800, 3, {191,32,25}},
+{ 152820, 3, {283,27,20}},
+{ 152856, 3, {193,33,24}},
+{ 152880, 3, {60,52,49}},
+{ 152928, 3, {59,54,48}},
+{ 152988, 3, {61,57,44}},
+{ 153000, 3, {60,51,50}},
+{ 153036, 3, {109,39,36}},
+{ 153120, 3, {58,55,48}},
+{ 153216, 3, {57,56,48}},
+{ 153225, 3, {227,27,25}},
+{ 153288, 3, {2129,9,8}},
+{ 153360, 3, {71,48,45}},
+{ 153408, 3, {64,51,47}},
+{ 153432, 3, {2131,9,8}},
+{ 153440, 3, {137,35,32}},
+{ 153450, 3, {62,55,45}},
+{ 153468, 3, {58,54,49}},
+{ 153540, 3, {853,15,12}},
+{ 153552, 3, {457,21,16}},
+{ 153600, 3, {64,50,48}},
+{ 153720, 3, {61,56,45}},
+{ 153816, 3, {58,52,51}},
+{ 153840, 3, {641,16,15}},
+{ 153864, 3, {2137,9,8}},
+{ 153900, 3, {57,54,50}},
+{ 153920, 3, {65,64,37}},
+{ 153972, 3, {63,52,47}},
+{ 154000, 3, {56,55,50}},
+{ 154035, 3, {163,35,27}},
+{ 154128, 3, {57,52,52}},
+{ 154140, 3, {367,21,20}},
+{ 154152, 3, {2141,9,8}},
+{ 154200, 3, {257,25,24}},
+{ 154224, 3, {56,54,51}},
+{ 154260, 3, {857,15,12}},
+{ 154284, 3, {69,52,43}},
+{ 154296, 3, {2143,9,8}},
+{ 154308, 3, {167,33,28}},
+{ 154320, 3, {643,16,15}},
+{ 154350, 3, {63,50,49}},
+{ 154400, 3, {193,32,25}},
+{ 154440, 3, {55,54,52}},
+{ 154575, 3, {229,27,25}},
+{ 154620, 3, {859,15,12}},
+{ 154656, 3, {179,32,27}},
+{ 154728, 3, {307,24,21}},
+{ 154770, 3, {67,55,42}},
+{ 154840, 3, {79,49,40}},
+{ 154872, 3, {239,27,24}},
+{ 154880, 3, {64,55,44}},
+{ 154896, 3, {461,21,16}},
+{ 154980, 3, {63,60,41}},
+{ 155016, 3, {2153,9,8}},
+{ 155025, 3, {65,53,45}},
+{ 155040, 3, {68,57,40}},
+{ 155100, 3, {60,55,47}},
+{ 155232, 3, {66,49,48}},
+{ 155280, 3, {647,16,15}},
+{ 155340, 3, {863,15,12}},
+{ 155376, 3, {83,48,39}},
+{ 155496, 3, {62,57,44}},
+{ 155520, 3, {60,54,48}},
+{ 155568, 3, {463,21,16}},
+{ 155592, 3, {2161,9,8}},
+{ 155610, 3, {65,57,42}},
+{ 155628, 3, {131,36,33}},
+{ 155664, 3, {69,48,47}},
+{ 155680, 3, {139,35,32}},
+{ 155760, 3, {59,55,48}},
+{ 155808, 3, {541,18,16}},
+{ 155820, 3, {60,53,49}},
+{ 155925, 3, {63,55,45}},
+{ 155952, 3, {57,57,48}},
+{ 156024, 3, {197,33,24}},
+{ 156060, 3, {60,51,51}},
+{ 156114, 3, {59,54,49}},
+{ 156150, 3, {347,25,18}},
+{ 156168, 3, {241,27,24}},
+{ 156240, 3, {62,56,45}},
+{ 156288, 3, {66,64,37}},
+{ 156384, 3, {181,32,27}},
+{ 156408, 3, {57,56,49}},
+{ 156420, 3, {79,45,44}},
+{ 156450, 3, {149,35,30}},
+{ 156468, 3, {59,52,51}},
+{ 156480, 3, {163,32,30}},
+{ 156520, 3, {65,56,43}},
+{ 156555, 3, {71,49,45}},
+{ 156600, 3, {58,54,50}},
+{ 156660, 3, {373,21,20}},
+{ 156672, 3, {64,51,48}},
+{ 156720, 3, {653,16,15}},
+{ 156744, 3, {311,24,21}},
+{ 156780, 3, {67,52,45}},
+{ 156864, 3, {64,57,43}},
+{ 156888, 3, {2179,9,8}},
+{ 156912, 3, {467,21,16}},
+{ 157050, 3, {349,25,18}},
+{ 157080, 3, {56,55,51}},
+{ 157092, 3, {57,53,52}},
+{ 157140, 3, {97,45,36}},
+{ 157248, 3, {56,54,52}},
+{ 157275, 3, {233,27,25}},
+{ 157320, 3, {60,57,46}},
+{ 157344, 3, {149,33,32}},
+{ 157410, 3, {55,54,53}},
+{ 157440, 3, {64,60,41}},
+{ 157536, 3, {547,18,16}},
+{ 157560, 3, {101,40,39}},
+{ 157584, 3, {67,49,48}},
+{ 157600, 3, {197,32,25}},
+{ 157608, 3, {199,33,24}},
+{ 157680, 3, {73,48,45}},
+{ 157752, 3, {313,24,21}},
+{ 157800, 3, {263,25,24}},
+{ 157815, 3, {167,35,27}},
+{ 157824, 3, {137,36,32}},
+{ 157860, 3, {877,15,12}},
+{ 157950, 3, {65,54,45}},
+{ 158004, 3, {63,57,44}},
+{ 158025, 3, {75,49,43}},
+{ 158080, 3, {65,64,38}},
+{ 158112, 3, {61,54,48}},
+{ 158160, 3, {659,16,15}},
+{ 158200, 3, {113,40,35}},
+{ 158220, 3, {293,27,20}},
+{ 158340, 3, {65,58,42}},
+{ 158368, 3, {101,49,32}},
+{ 158400, 3, {60,55,48}},
+{ 158424, 3, {69,56,41}},
+{ 158496, 3, {127,39,32}},
+{ 158508, 3, {68,63,37}},
+{ 158550, 3, {151,35,30}},
+{ 158580, 3, {881,15,12}},
+{ 158616, 3, {2203,9,8}},
+{ 158640, 3, {661,16,15}},
+{ 158652, 3, {113,39,36}},
+{ 158688, 3, {58,57,48}},
+{ 158730, 3, {66,65,37}},
+{ 158760, 3, {60,54,49}},
+{ 158850, 3, {353,25,18}},
+{ 158904, 3, {2207,9,8}},
+{ 158916, 3, {68,57,41}},
+{ 158928, 3, {66,56,43}},
+{ 158940, 3, {883,15,12}},
+{ 158976, 3, {64,54,46}},
+{ 159075, 3, {101,45,35}},
+{ 159120, 3, {60,52,51}},
+{ 159180, 3, {379,21,20}},
+{ 159200, 3, {199,32,25}},
+{ 159250, 3, {65,50,49}},
+{ 159264, 3, {79,48,42}},
+{ 159300, 3, {59,54,50}},
+{ 159324, 3, {71,51,44}},
+{ 159336, 3, {2213,9,8}},
+{ 159390, 3, {63,55,46}},
+{ 159456, 3, {151,33,32}},
+{ 159516, 3, {211,28,27}},
+{ 159600, 3, {57,56,50}},
+{ 159660, 3, {887,15,12}},
+{ 159705, 3, {65,63,39}},
+{ 159768, 3, {317,24,21}},
+{ 159840, 3, {74,48,45}},
+{ 159852, 3, {173,33,28}},
+{ 159900, 3, {65,60,41}},
+{ 159912, 3, {2221,9,8}},
+{ 159936, 3, {56,56,51}},
+{ 160000, 3, {64,50,50}},
+{ 160020, 3, {127,36,35}},
+{ 160056, 3, {57,54,52}},
+{ 160083, 3, {77,63,33}},
+{ 160128, 3, {139,36,32}},
+{ 160160, 3, {56,55,52}},
+{ 160200, 3, {89,45,40}},
+{ 160272, 3, {56,54,53}},
+{ 160320, 3, {167,32,30}},
+{ 160380, 3, {55,54,54}},
+{ 160416, 3, {557,18,16}},
+{ 160512, 3, {64,57,44}},
+{ 160524, 3, {63,52,49}},
+{ 160560, 3, {223,30,24}},
+{ 160680, 3, {103,40,39}},
+{ 160704, 3, {62,54,48}},
+{ 160740, 3, {60,57,47}},
+{ 160776, 3, {63,58,44}},
+{ 160800, 3, {67,50,48}},
+{ 160860, 3, {383,21,20}},
+{ 160875, 3, {65,55,45}},
+{ 160944, 3, {479,21,16}},
+{ 160965, 3, {73,49,45}},
+{ 161040, 3, {61,55,48}},
+{ 161064, 3, {2237,9,8}},
+{ 161070, 3, {65,59,42}},
+{ 161160, 3, {79,51,40}},
+{ 161208, 3, {2239,9,8}},
+{ 161280, 3, {60,56,48}},
+{ 161325, 3, {239,27,25}},
+{ 161400, 3, {269,25,24}},
+{ 161406, 3, {61,54,49}},
+{ 161424, 3, {59,57,48}},
+{ 161460, 3, {65,54,46}},
+{ 161496, 3, {2243,9,8}},
+{ 161504, 3, {103,49,32}},
+{ 161520, 3, {673,16,15}},
+{ 161550, 3, {359,25,18}},
+{ 161568, 3, {66,51,48}},
+{ 161700, 3, {60,55,49}},
+{ 161772, 3, {61,52,51}},
+{ 161880, 3, {71,57,40}},
+{ 161920, 3, {64,55,46}},
+{ 162000, 3, {60,54,50}},
+{ 162072, 3, {2251,9,8}},
+{ 162144, 3, {563,18,16}},
+{ 162180, 3, {60,53,51}},
+{ 162225, 3, {103,45,35}},
+{ 162288, 3, {63,56,46}},
+{ 162432, 3, {64,54,47}},
+{ 162480, 3, {677,16,15}},
+{ 162540, 3, {63,60,43}},
+{ 162600, 3, {271,25,24}},
+{ 162624, 3, {66,56,44}},
+{ 162648, 3, {251,27,24}},
+{ 162675, 3, {241,27,25}},
+{ 162680, 3, {83,49,40}},
+{ 162708, 3, {149,39,28}},
+{ 162756, 3, {137,36,33}},
+{ 162792, 3, {57,56,51}},
+{ 162855, 3, {63,55,47}},
+{ 162960, 3, {97,42,40}},
+{ 163020, 3, {57,55,52}},
+{ 163170, 3, {74,49,45}},
+{ 163200, 3, {64,51,50}},
+{ 163215, 3, {81,65,31}},
+{ 163224, 3, {2267,9,8}},
+{ 163240, 3, {56,55,53}},
+{ 163260, 3, {907,15,12}},
+{ 163296, 3, {56,54,54}},
+{ 163350, 3, {55,55,54}},
+{ 163368, 3, {2269,9,8}},
+{ 163380, 3, {389,21,20}},
+{ 163404, 3, {89,51,36}},
+{ 163440, 3, {227,30,24}},
+{ 163485, 3, {173,35,27}},
+{ 163488, 3, {131,39,32}},
+{ 163548, 3, {63,59,44}},
+{ 163620, 3, {101,45,36}},
+{ 163632, 3, {487,21,16}},
+{ 163656, 3, {2273,9,8}},
+{ 163680, 3, {62,55,48}},
+{ 163800, 3, {63,52,50}},
+{ 163812, 3, {73,51,44}},
+{ 163872, 3, {569,18,16}},
+{ 163920, 3, {683,16,15}},
+{ 163980, 3, {911,15,12}},
+{ 164010, 3, {71,55,42}},
+{ 164016, 3, {67,51,48}},
+{ 164052, 3, {62,54,49}},
+{ 164150, 3, {67,50,49}},
+{ 164160, 3, {60,57,48}},
+{ 164232, 3, {2281,9,8}},
+{ 164340, 3, {83,45,44}},
+{ 164424, 3, {62,52,51}},
+{ 164448, 3, {571,18,16}},
+{ 164640, 3, {60,56,49}},
+{ 164664, 3, {2287,9,8}},
+{ 164700, 3, {61,54,50}},
+{ 164736, 3, {66,52,48}},
+{ 164835, 3, {81,55,37}},
+{ 164850, 3, {157,35,30}},
+{ 164880, 3, {229,30,24}},
+{ 164892, 3, {151,39,28}},
+{ 164970, 3, {65,54,47}},
+{ 164976, 3, {491,21,16}},
+{ 165000, 3, {60,55,50}},
+{ 165024, 3, {191,32,27}},
+{ 165048, 3, {69,52,46}},
+{ 165060, 3, {131,36,35}},
+{ 165096, 3, {2293,9,8}},
+{ 165120, 3, {64,60,43}},
+{ 165132, 3, {139,36,33}},
+{ 165150, 3, {367,25,18}},
+{ 165240, 3, {60,54,51}},
+{ 165312, 3, {64,63,41}},
+{ 165375, 3, {75,49,45}},
+{ 165384, 3, {2297,9,8}},
+{ 165396, 3, {179,33,28}},
+{ 165420, 3, {919,15,12}},
+{ 165440, 3, {64,55,47}},
+{ 165528, 3, {66,57,44}},
+{ 165648, 3, {58,56,51}},
+{ 165760, 3, {70,64,37}},
+{ 165780, 3, {307,27,20}},
+{ 165792, 3, {157,33,32}},
+{ 165816, 3, {63,56,47}},
+{ 165825, 3, {67,55,45}},
+{ 165840, 3, {691,16,15}},
+{ 165888, 3, {64,54,48}},
+{ 165984, 3, {57,56,52}},
+{ 166005, 3, {85,63,31}},
+{ 166050, 3, {75,54,41}},
+{ 166056, 3, {74,51,44}},
+{ 166080, 3, {173,32,30}},
+{ 166140, 3, {71,52,45}},
+{ 166152, 3, {69,56,43}},
+{ 166176, 3, {577,18,16}},
+{ 166200, 3, {277,25,24}},
+{ 166248, 3, {2309,9,8}},
+{ 166320, 3, {56,55,54}},
+{ 166392, 3, {2311,9,8}},
+{ 166400, 3, {64,52,50}},
+{ 166440, 3, {73,57,40}},
+{ 166452, 3, {97,44,39}},
+{ 166464, 3, {64,51,51}},
+{ 166530, 3, {65,61,42}},
+{ 166536, 3, {257,27,24}},
+{ 166600, 3, {68,50,49}},
+{ 166608, 3, {89,48,39}},
+{ 166668, 3, {68,57,43}},
+{ 166698, 3, {63,54,49}},
+{ 166725, 3, {65,57,45}},
+{ 166740, 3, {397,21,20}},
+{ 166752, 3, {193,32,27}},
+{ 166824, 3, {331,24,21}},
+{ 166860, 3, {103,45,36}},
+{ 166880, 3, {149,35,32}},
+{ 166896, 3, {61,57,48}},
+{ 166920, 3, {107,40,39}},
+{ 166992, 3, {71,49,48}},
+{ 167040, 3, {60,58,48}},
+{ 167076, 3, {63,52,51}},
+{ 167112, 3, {211,33,24}},
+{ 167220, 3, {929,15,12}},
+{ 167244, 3, {181,33,28}},
+{ 167310, 3, {66,65,39}},
+{ 167328, 3, {83,48,42}},
+{ 167400, 3, {62,54,50}},
+{ 167440, 3, {65,56,46}},
+{ 167475, 3, {77,75,29}},
+{ 167580, 3, {60,57,49}},
+{ 167640, 3, {127,40,33}},
+{ 167664, 3, {499,21,16}},
+{ 167700, 3, {65,60,43}},
+{ 167760, 3, {233,30,24}},
+{ 167776, 3, {107,49,32}},
+{ 167808, 3, {64,57,46}},
+{ 167850, 3, {373,25,18}},
+{ 167895, 3, {65,63,41}},
+{ 167904, 3, {66,53,48}},
+{ 167940, 3, {311,27,20}},
+{ 167976, 3, {2333,9,8}},
+{ 168021, 3, {127,49,27}},
+{ 168036, 3, {67,57,44}},
+{ 168240, 3, {701,16,15}},
+{ 168264, 3, {72,57,41}},
+{ 168300, 3, {60,55,51}},
+{ 168408, 3, {2339,9,8}},
+{ 168420, 3, {401,21,20}},
+{ 168504, 3, {59,56,51}},
+{ 168525, 3, {107,45,35}},
+{ 168552, 3, {2341,9,8}},
+{ 168588, 3, {223,28,27}},
+{ 168600, 3, {281,25,24}},
+{ 168630, 3, {73,55,42}},
+{ 168636, 3, {69,52,47}},
+{ 168660, 3, {937,15,12}},
+{ 168720, 3, {74,57,40}},
+{ 168800, 3, {211,32,25}},
+{ 168840, 3, {67,56,45}},
+{ 168912, 3, {69,51,48}},
+{ 168948, 3, {57,57,52}},
+{ 168960, 3, {64,55,48}},
+{ 168984, 3, {2347,9,8}},
+{ 169008, 3, {503,21,16}},
+{ 169020, 3, {313,27,20}},
+{ 169050, 3, {69,50,49}},
+{ 169056, 3, {587,18,16}},
+{ 169092, 3, {63,61,44}},
+{ 169120, 3, {151,35,32}},
+{ 169155, 3, {179,35,27}},
+{ 169176, 3, {57,56,53}},
+{ 169260, 3, {65,62,42}},
+{ 169272, 3, {2351,9,8}},
+{ 169290, 3, {57,55,54}},
+{ 169320, 3, {83,51,40}},
+{ 169344, 3, {56,56,54}},
+{ 169380, 3, {941,15,12}},
+{ 169400, 3, {56,55,55}},
+{ 169425, 3, {251,27,25}},
+{ 169600, 3, {64,53,50}},
+{ 169632, 3, {62,57,48}},
+{ 169650, 3, {65,58,45}},
+{ 169680, 3, {101,42,40}},
+{ 169704, 3, {2357,9,8}},
+{ 169728, 3, {64,52,51}},
+{ 169740, 3, {69,60,41}},
+{ 169785, 3, {63,55,49}},
+{ 169800, 3, {283,25,24}},
+{ 169848, 3, {337,24,21}},
+{ 169920, 3, {60,59,48}},
+{ 170016, 3, {66,56,46}},
+{ 170040, 3, {109,40,39}},
+{ 170100, 3, {63,54,50}},
+{ 170160, 3, {709,16,15}},
+{ 170208, 3, {197,32,27}},
+{ 170240, 3, {70,64,38}},
+{ 170352, 3, {63,52,52}},
+{ 170400, 3, {71,50,48}},
+{ 170424, 3, {263,27,24}},
+{ 170460, 3, {947,15,12}},
+{ 170520, 3, {60,58,49}},
+{ 170544, 3, {68,57,44}},
+{ 170550, 3, {379,25,18}},
+{ 170560, 3, {65,64,41}},
+{ 170640, 3, {79,48,45}},
+{ 170688, 3, {127,42,32}},
+{ 170712, 3, {2371,9,8}},
+{ 170775, 3, {69,55,45}},
+{ 170784, 3, {593,18,16}},
+{ 170820, 3, {73,52,45}},
+{ 170912, 3, {109,49,32}},
+{ 170940, 3, {74,55,42}},
+{ 170976, 3, {137,39,32}},
+{ 171000, 3, {60,57,50}},
+{ 171024, 3, {509,21,16}},
+{ 171045, 3, {181,35,27}},
+{ 171072, 3, {66,54,48}},
+{ 171080, 3, {65,56,47}},
+{ 171144, 3, {2377,9,8}},
+{ 171150, 3, {163,35,30}},
+{ 171180, 3, {317,27,20}},
+{ 171360, 3, {60,56,51}},
+{ 171432, 3, {2381,9,8}},
+{ 171444, 3, {157,39,28}},
+{ 171456, 3, {64,57,47}},
+{ 171500, 3, {70,50,49}},
+{ 171540, 3, {953,15,12}},
+{ 171576, 3, {2383,9,8}},
+{ 171600, 3, {60,55,52}},
+{ 171612, 3, {227,28,27}},
+{ 171648, 3, {149,36,32}},
+{ 171675, 3, {109,45,35}},
+{ 171696, 3, {73,49,48}},
+{ 171780, 3, {409,21,20}},
+{ 171840, 3, {179,32,30}},
+{ 171864, 3, {63,62,44}},
+{ 171912, 3, {58,57,52}},
+{ 171936, 3, {199,32,27}},
+{ 171990, 3, {65,54,49}},
+{ 172008, 3, {2389,9,8}},
+{ 172080, 3, {239,30,24}},
+{ 172128, 3, {163,33,32}},
+{ 172200, 3, {70,60,41}},
+{ 172224, 3, {69,52,48}},
+{ 172260, 3, {58,55,54}},
+{ 172296, 3, {2393,9,8}},
+{ 172350, 3, {383,25,18}},
+{ 172368, 3, {57,56,54}},
+{ 172380, 3, {65,52,51}},
+{ 172480, 3, {56,56,55}},
+{ 172512, 3, {599,18,16}},
+{ 172560, 3, {719,16,15}},
+{ 172575, 3, {65,59,45}},
+{ 172620, 3, {137,36,35}},
+{ 172725, 3, {75,49,47}},
+{ 172728, 3, {2399,9,8}},
+{ 172788, 3, {77,51,44}},
+{ 172800, 3, {60,60,48}},
+{ 172872, 3, {63,56,49}},
+{ 172920, 3, {131,40,33}},
+{ 172992, 3, {64,53,51}},
+{ 173040, 3, {103,42,40}},
+{ 173088, 3, {601,18,16}},
+{ 173124, 3, {229,28,27}},
+{ 173160, 3, {74,52,45}},
+{ 173184, 3, {66,64,41}},
+{ 173250, 3, {63,55,50}},
+{ 173280, 3, {76,57,40}},
+{ 173313, 3, {131,49,27}},
+{ 173316, 3, {101,44,39}},
+{ 173340, 3, {107,45,36}},
+{ 173376, 3, {64,63,43}},
+{ 173460, 3, {60,59,49}},
+{ 173472, 3, {139,39,32}},
+{ 173475, 3, {257,27,25}},
+{ 173520, 3, {241,30,24}},
+{ 173592, 3, {2411,9,8}},
+{ 173628, 3, {63,53,52}},
+{ 173664, 3, {67,54,48}},
+{ 173712, 3, {66,56,47}},
+{ 173745, 3, {81,55,39}},
+{ 173760, 3, {181,32,30}},
+{ 173808, 3, {71,51,48}},
+{ 173880, 3, {63,60,46}},
+{ 173950, 3, {71,50,49}},
+{ 173952, 3, {151,36,32}},
+{ 174024, 3, {2417,9,8}},
+{ 174048, 3, {74,49,48}},
+{ 174060, 3, {967,15,12}},
+{ 174150, 3, {75,54,43}},
+{ 174195, 3, {79,49,45}},
+{ 174216, 3, {61,56,51}},
+{ 174240, 3, {66,55,48}},
+{ 174312, 3, {269,27,24}},
+{ 174420, 3, {60,57,51}},
+{ 174440, 3, {89,49,40}},
+{ 174456, 3, {2423,9,8}},
+{ 174480, 3, {727,16,15}},
+{ 174600, 3, {97,45,40}},
+{ 174636, 3, {66,54,49}},
+{ 174780, 3, {971,15,12}},
+{ 174816, 3, {607,18,16}},
+{ 174876, 3, {59,57,52}},
+{ 174888, 3, {347,24,21}},
+{ 174900, 3, {60,55,53}},
+{ 175032, 3, {66,52,51}},
+{ 175050, 3, {389,25,18}},
+{ 175056, 3, {521,21,16}},
+{ 175104, 3, {64,57,48}},
+{ 175140, 3, {139,36,35}},
+{ 175200, 3, {73,50,48}},
+{ 175230, 3, {59,55,54}},
+{ 175350, 3, {167,35,30}},
+{ 175392, 3, {58,56,54}},
+{ 175464, 3, {2437,9,8}},
+{ 175500, 3, {65,54,50}},
+{ 175536, 3, {69,53,48}},
+{ 175560, 3, {57,56,55}},
+{ 175608, 3, {271,27,24}},
+{ 175644, 3, {68,63,41}},
+{ 175680, 3, {61,60,48}},
+{ 175725, 3, {71,55,45}},
+{ 175728, 3, {523,21,16}},
+{ 175752, 3, {2441,9,8}},
+{ 175800, 3, {293,25,24}},
+{ 175812, 3, {69,52,49}},
+{ 175840, 3, {157,35,32}},
+{ 175860, 3, {977,15,12}},
+{ 175890, 3, {66,65,41}},
+{ 175896, 3, {349,24,21}},
+{ 175920, 3, {733,16,15}},
+{ 175980, 3, {419,21,20}},
+{ 176000, 3, {64,55,50}},
+{ 176064, 3, {131,42,32}},
+{ 176085, 3, {65,63,43}},
+{ 176148, 3, {233,28,27}},
+{ 176184, 3, {2447,9,8}},
+{ 176220, 3, {89,45,44}},
+{ 176256, 3, {64,54,51}},
+{ 176280, 3, {113,40,39}},
+{ 176352, 3, {167,33,32}},
+{ 176400, 3, {60,60,49}},
+{ 176472, 3, {72,57,43}},
+{ 176484, 3, {191,33,28}},
+{ 176544, 3, {613,18,16}},
+{ 176580, 3, {109,45,36}},
+{ 176616, 3, {223,33,24}},
+{ 176640, 3, {64,60,46}},
+{ 176715, 3, {63,55,51}},
+{ 176748, 3, {103,44,39}},
+{ 176792, 3, {77,56,41}},
+{ 176820, 3, {421,21,20}},
+{ 176880, 3, {67,55,48}},
+{ 176904, 3, {63,54,52}},
+{ 176940, 3, {983,15,12}},
+{ 177012, 3, {149,36,33}},
+{ 177048, 3, {2459,9,8}},
+{ 177072, 3, {62,56,51}},
+{ 177184, 3, {113,49,32}},
+{ 177276, 3, {79,51,44}},
+{ 177282, 3, {67,54,49}},
+{ 177360, 3, {739,16,15}},
+{ 177408, 3, {66,56,48}},
+{ 177450, 3, {65,65,42}},
+{ 177480, 3, {60,58,51}},
+{ 177525, 3, {263,27,25}},
+{ 177600, 3, {74,50,48}},
+{ 177624, 3, {2467,9,8}},
+{ 177625, 3, {125,49,29}},
+{ 177660, 3, {63,60,47}},
+{ 177684, 3, {67,52,51}},
+{ 177696, 3, {617,18,16}},
+{ 177744, 3, {69,56,46}},
+{ 177800, 3, {127,40,35}},
+{ 177840, 3, {60,57,52}},
+{ 177912, 3, {353,24,21}},
+{ 177975, 3, {113,45,35}},
+{ 177996, 3, {163,39,28}},
+{ 178020, 3, {69,60,43}},
+{ 178056, 3, {2473,9,8}},
+{ 178068, 3, {71,57,44}},
+{ 178092, 3, {97,51,36}},
+{ 178200, 3, {60,55,54}},
+{ 178272, 3, {619,18,16}},
+{ 178296, 3, {68,57,46}},
+{ 178308, 3, {127,39,36}},
+{ 178320, 3, {743,16,15}},
+{ 178332, 3, {193,33,28}},
+{ 178344, 3, {2477,9,8}},
+{ 178360, 3, {65,56,49}},
+{ 178380, 3, {991,15,12}},
+{ 178400, 3, {223,32,25}},
+{ 178416, 3, {59,56,54}},
+{ 178425, 3, {65,61,45}},
+{ 178560, 3, {62,60,48}},
+{ 178640, 3, {58,56,55}},
+{ 178650, 3, {397,25,18}},
+{ 178704, 3, {73,51,48}},
+{ 178740, 3, {331,27,20}},
+{ 178752, 3, {57,56,56}},
+{ 178848, 3, {69,54,48}},
+{ 178850, 3, {73,50,49}},
+{ 178880, 3, {65,64,43}},
+{ 178920, 3, {71,56,45}},
+{ 179010, 3, {65,54,51}},
+{ 179025, 3, {77,75,31}},
+{ 179088, 3, {78,56,41}},
+{ 179200, 3, {64,56,50}},
+{ 179280, 3, {83,48,45}},
+{ 179340, 3, {61,60,49}},
+{ 179388, 3, {151,36,33}},
+{ 179400, 3, {69,52,50}},
+{ 179424, 3, {89,48,42}},
+{ 179460, 3, {997,15,12}},
+{ 179487, 3, {77,63,37}},
+{ 179496, 3, {277,27,24}},
+{ 179520, 3, {64,55,51}},
+{ 179712, 3, {64,54,52}},
+{ 179760, 3, {107,42,40}},
+{ 179784, 3, {227,33,24}},
+{ 179928, 3, {63,56,51}},
+{ 180075, 3, {75,49,49}},
+{ 180120, 3, {79,57,40}},
+{ 180180, 3, {63,55,52}},
+{ 180216, 3, {2503,9,8}},
+{ 180240, 3, {751,16,15}},
+{ 180336, 3, {68,52,51}},
+{ 180450, 3, {401,25,18}},
+{ 180480, 3, {64,60,47}},
+{ 180495, 3, {191,35,27}},
+{ 180540, 3, {60,59,51}},
+{ 180576, 3, {66,57,48}},
+{ 180600, 3, {70,60,43}},
+{ 180675, 3, {73,55,45}},
+{ 180684, 3, {239,28,27}},
+{ 180720, 3, {251,30,24}},
+{ 180804, 3, {61,57,52}},
+{ 180840, 3, {137,40,33}},
+{ 180864, 3, {157,36,32}},
+{ 180873, 3, {81,77,29}},
+{ 180900, 3, {67,54,50}},
+{ 180936, 3, {359,24,21}},
+{ 181020, 3, {431,21,20}},
+{ 181056, 3, {69,64,41}},
+{ 181104, 3, {66,56,49}},
+{ 181152, 3, {74,51,48}},
+{ 181170, 3, {61,55,54}},
+{ 181251, 3, {137,49,27}},
+{ 181260, 3, {60,57,53}},
+{ 181300, 3, {74,50,49}},
+{ 181350, 3, {65,62,45}},
+{ 181368, 3, {229,33,24}},
+{ 181440, 3, {60,56,54}},
+{ 181500, 3, {60,55,55}},
+{ 181512, 3, {2521,9,8}},
+{ 181560, 3, {89,51,40}},
+{ 181575, 3, {269,27,25}},
+{ 181584, 3, {97,48,39}},
+{ 181600, 3, {227,32,25}},
+{ 181608, 3, {69,56,47}},
+{ 181620, 3, {1009,15,12}},
+{ 181632, 3, {66,64,43}},
+{ 181650, 3, {173,35,30}},
+{ 181680, 3, {757,16,15}},
+{ 181720, 3, {59,56,55}},
+{ 181728, 3, {631,18,16}},
+{ 181776, 3, {541,21,16}},
+{ 181800, 3, {101,45,40}},
+{ 181860, 3, {433,21,20}},
+{ 181944, 3, {57,57,56}},
+{ 181980, 3, {337,27,20}},
+{ 182000, 3, {65,56,50}},
+{ 182028, 3, {197,33,28}},
+{ 182088, 3, {281,27,24}},
+{ 182172, 3, {68,57,47}},
+{ 182196, 3, {241,28,27}},
+{ 182232, 3, {2531,9,8}},
+{ 182250, 3, {75,54,45}},
+{ 182280, 3, {62,60,49}},
+{ 182304, 3, {211,32,27}},
+{ 182340, 3, {1013,15,12}},
+{ 182364, 3, {167,39,28}},
+{ 182385, 3, {193,35,27}},
+{ 182400, 3, {64,57,50}},
+{ 182490, 3, {79,55,42}},
+{ 182520, 3, {65,54,52}},
+{ 182560, 3, {163,35,32}},
+{ 182640, 3, {761,16,15}},
+{ 182655, 3, {81,55,41}},
+{ 182688, 3, {173,33,32}},
+{ 182784, 3, {64,56,51}},
+{ 182808, 3, {2539,9,8}},
+{ 182910, 3, {67,65,42}},
+{ 182925, 3, {271,27,25}},
+{ 182952, 3, {66,63,44}},
+{ 182988, 3, {69,52,51}},
+{ 183015, 3, {83,49,45}},
+{ 183040, 3, {64,55,52}},
+{ 183060, 3, {113,45,36}},
+{ 183084, 3, {73,57,44}},
+{ 183096, 3, {2543,9,8}},
+{ 183120, 3, {109,42,40}},
+{ 183150, 3, {74,55,45}},
+{ 183168, 3, {64,54,53}},
+{ 183200, 3, {229,32,25}},
+{ 183300, 3, {65,60,47}},
+{ 183312, 3, {67,57,48}},
+{ 183360, 3, {191,32,30}},
+{ 183384, 3, {283,27,24}},
+{ 183400, 3, {131,40,35}},
+{ 183420, 3, {1019,15,12}},
+{ 183456, 3, {63,56,52}},
+{ 183480, 3, {139,40,33}},
+{ 183528, 3, {2549,9,8}},
+{ 183600, 3, {60,60,51}},
+{ 183612, 3, {107,44,39}},
+{ 183645, 3, {63,55,53}},
+{ 183672, 3, {2551,9,8}},
+{ 183680, 3, {70,64,41}},
+{ 183744, 3, {66,58,48}},
+{ 183750, 3, {75,50,49}},
+{ 183768, 3, {62,57,52}},
+{ 183780, 3, {1021,15,12}},
+{ 183792, 3, {547,21,16}},
+{ 183876, 3, {199,33,28}},
+{ 183897, 3, {139,49,27}},
+{ 183924, 3, {131,39,36}},
+{ 183960, 3, {73,56,45}},
+{ 184032, 3, {71,54,48}},
+{ 184050, 3, {409,25,18}},
+{ 184104, 3, {2557,9,8}},
+{ 184128, 3, {137,42,32}},
+{ 184140, 3, {62,55,54}},
+{ 184200, 3, {307,25,24}},
+{ 184212, 3, {68,63,43}},
+{ 184275, 3, {65,63,45}},
+{ 184320, 3, {64,60,48}},
+{ 184380, 3, {439,21,20}},
+{ 184464, 3, {61,56,54}},
+{ 184470, 3, {66,65,43}},
+{ 184500, 3, {75,60,41}},
+{ 184536, 3, {233,33,24}},
+{ 184560, 3, {769,16,15}},
+{ 184608, 3, {641,18,16}},
+{ 184680, 3, {60,57,54}},
+{ 184800, 3, {60,56,55}},
+{ 184860, 3, {79,52,45}},
+{ 184968, 3, {367,24,21}},
+{ 185040, 3, {257,30,24}},
+{ 185136, 3, {58,57,56}},
+{ 185184, 3, {643,18,16}},
+{ 185220, 3, {63,60,49}},
+{ 185280, 3, {193,32,30}},
+{ 185400, 3, {103,45,40}},
+{ 185416, 3, {77,56,43}},
+{ 185436, 3, {101,51,36}},
+{ 185472, 3, {64,63,46}},
+{ 185520, 3, {773,16,15}},
+{ 185580, 3, {1031,15,12}},
+{ 185592, 3, {74,57,44}},
+{ 185600, 3, {64,58,50}},
+{ 185625, 3, {75,55,45}},
+{ 185640, 3, {65,56,51}},
+{ 185688, 3, {2579,9,8}},
+{ 185724, 3, {67,63,44}},
+{ 185808, 3, {79,49,48}},
+{ 185856, 3, {66,64,44}},
+{ 185940, 3, {1033,15,12}},
+{ 185952, 3, {149,39,32}},
+{ 185976, 3, {72,63,41}},
+{ 186030, 3, {65,54,53}},
+{ 186048, 3, {64,57,51}},
+{ 186060, 3, {443,21,20}},
+{ 186165, 3, {197,35,27}},
+{ 186200, 3, {76,50,49}},
+{ 186252, 3, {83,51,44}},
+{ 186300, 3, {69,54,50}},
+{ 186336, 3, {647,18,16}},
+{ 186400, 3, {233,32,25}},
+{ 186480, 3, {74,56,45}},
+{ 186516, 3, {157,36,33}},
+{ 186552, 3, {2591,9,8}},
+{ 186560, 3, {64,55,53}},
+{ 186576, 3, {69,52,52}},
+{ 186600, 3, {311,25,24}},
+{ 186624, 3, {64,54,54}},
+{ 186660, 3, {61,60,51}},
+{ 186696, 3, {2593,9,8}},
+{ 186732, 3, {63,57,52}},
+{ 186816, 3, {139,42,32}},
+{ 186912, 3, {66,59,48}},
+{ 186975, 3, {277,27,25}},
+{ 186984, 3, {63,56,53}},
+{ 187020, 3, {1039,15,12}},
+{ 187040, 3, {167,35,32}},
+{ 187044, 3, {109,44,39}},
+{ 187110, 3, {63,55,54}},
+{ 187152, 3, {557,21,16}},
+{ 187380, 3, {347,27,20}},
+{ 187425, 3, {75,51,49}},
+{ 187440, 3, {71,55,48}},
+{ 187488, 3, {62,56,54}},
+{ 187740, 3, {149,36,35}},
+{ 187776, 3, {163,36,32}},
+{ 187800, 3, {313,25,24}},
+{ 187824, 3, {78,56,43}},
+{ 187848, 3, {2609,9,8}},
+{ 187866, 3, {71,54,49}},
+{ 187880, 3, {61,56,55}},
+{ 187950, 3, {179,35,30}},
+{ 187992, 3, {373,24,21}},
+{ 188055, 3, {199,35,27}},
+{ 188064, 3, {653,18,16}},
+{ 188100, 3, {60,57,55}},
+{ 188292, 3, {71,52,51}},
+{ 188328, 3, {59,57,56}},
+{ 188370, 3, {65,63,46}},
+{ 188424, 3, {2617,9,8}},
+{ 188448, 3, {151,39,32}},
+{ 188460, 3, {349,27,20}},
+{ 188496, 3, {66,56,51}},
+{ 188550, 3, {419,25,18}},
+{ 188580, 3, {449,21,20}},
+{ 188712, 3, {2621,9,8}},
+{ 188784, 3, {69,57,48}},
+{ 188800, 3, {64,59,50}},
+{ 188820, 3, {1049,15,12}},
+{ 188880, 3, {787,16,15}},
+{ 188916, 3, {173,39,28}},
+{ 188928, 3, {72,64,41}},
+{ 189000, 3, {63,60,50}},
+{ 189024, 3, {179,33,32}},
+{ 189072, 3, {101,48,39}},
+{ 189108, 3, {103,51,36}},
+{ 189120, 3, {197,32,30}},
+{ 189168, 3, {563,21,16}},
+{ 189180, 3, {1051,15,12}},
+{ 189189, 3, {77,63,39}},
+{ 189200, 3, {80,55,43}},
+{ 189216, 3, {73,54,48}},
+{ 189240, 3, {83,57,40}},
+{ 189280, 3, {65,56,52}},
+{ 189288, 3, {239,33,24}},
+{ 189312, 3, {64,58,51}},
+{ 189336, 3, {69,56,49}},
+{ 189360, 3, {263,30,24}},
+{ 189450, 3, {421,25,18}},
+{ 189504, 3, {64,63,47}},
+{ 189540, 3, {65,54,54}},
+{ 189576, 3, {2633,9,8}},
+{ 189600, 3, {79,50,48}},
+{ 189675, 3, {281,27,25}},
+{ 189696, 3, {64,57,52}},
+{ 189720, 3, {62,60,51}},
+{ 189728, 3, {77,56,44}},
+{ 189756, 3, {251,28,27}},
+{ 189792, 3, {659,18,16}},
+{ 189840, 3, {113,42,40}},
+{ 189864, 3, {293,27,24}},
+{ 189875, 3, {125,49,31}},
+{ 189888, 3, {69,64,43}},
+{ 189924, 3, {68,57,49}},
+{ 190008, 3, {63,58,52}},
+{ 190050, 3, {181,35,30}},
+{ 190080, 3, {64,55,54}},
+{ 190120, 3, {97,49,40}},
+{ 190125, 3, {65,65,45}},
+{ 190164, 3, {69,53,52}},
+{ 190200, 3, {317,25,24}},
+{ 190260, 3, {151,36,35}},
+{ 190350, 3, {75,54,47}},
+{ 190368, 3, {661,18,16}},
+{ 190440, 3, {69,60,46}},
+{ 190512, 3, {63,56,54}},
+{ 190575, 3, {63,55,55}},
+{ 190584, 3, {2647,9,8}},
+{ 190608, 3, {76,57,44}},
+{ 190620, 3, {353,27,20}},
+{ 190872, 3, {241,33,24}},
+{ 190960, 3, {62,56,55}},
+{ 190980, 3, {1061,15,12}},
+{ 191016, 3, {379,24,21}},
+{ 191025, 3, {283,27,25}},
+{ 191040, 3, {199,32,30}},
+{ 191100, 3, {65,60,49}},
+{ 191136, 3, {181,33,32}},
+{ 191184, 3, {569,21,16}},
+{ 191200, 3, {239,32,25}},
+{ 191280, 3, {797,16,15}},
+{ 191304, 3, {2657,9,8}},
+{ 191340, 3, {1063,15,12}},
+{ 191352, 3, {67,56,51}},
+{ 191360, 3, {65,64,46}},
+{ 191400, 3, {60,58,55}},
+{ 191448, 3, {2659,9,8}},
+{ 191520, 3, {60,57,56}},
+{ 191565, 3, {81,55,43}},
+{ 191700, 3, {71,54,50}},
+{ 191730, 3, {83,55,42}},
+{ 191736, 3, {2663,9,8}},
+{ 191800, 3, {137,40,35}},
+{ 191808, 3, {74,54,48}},
+{ 191835, 3, {87,49,45}},
+{ 191856, 3, {571,21,16}},
+{ 191880, 3, {72,65,41}},
+{ 191940, 3, {457,21,20}},
+{ 192000, 3, {64,60,50}},
+{ 192060, 3, {97,45,44}},
+{ 192096, 3, {69,58,48}},
+{ 192192, 3, {66,56,52}},
+{ 192240, 3, {89,48,45}},
+{ 192312, 3, {2671,9,8}},
+{ 192348, 3, {137,39,36}},
+{ 192372, 3, {69,68,41}},
+{ 192384, 3, {167,36,32}},
+{ 192420, 3, {1069,15,12}},
+{ 192465, 3, {65,63,47}},
+{ 192576, 3, {64,59,51}},
+{ 192600, 3, {107,45,40}},
+{ 192640, 3, {70,64,43}},
+{ 192660, 3, {65,57,52}},
+{ 192672, 3, {223,32,27}},
+{ 192720, 3, {73,55,48}},
+{ 192744, 3, {2677,9,8}},
+{ 192780, 3, {63,60,51}},
+{ 192800, 3, {241,32,25}},
+{ 192816, 3, {103,48,39}},
+{ 192864, 3, {82,49,48}},
+{ 192888, 3, {72,57,47}},
+{ 192920, 3, {65,56,53}},
+{ 192960, 3, {67,60,48}},
+{ 193032, 3, {383,24,21}},
+{ 193050, 3, {65,55,54}},
+{ 193116, 3, {77,57,44}},
+{ 193158, 3, {73,54,49}},
+{ 193176, 3, {2683,9,8}},
+{ 193200, 3, {69,56,50}},
+{ 193248, 3, {66,61,48}},
+{ 193284, 3, {63,59,52}},
+{ 193344, 3, {64,57,53}},
+{ 193347, 3, {81,77,31}},
+{ 193392, 3, {79,51,48}},
+{ 193464, 3, {2687,9,8}},
+{ 193500, 3, {75,60,43}},
+{ 193536, 3, {64,56,54}},
+{ 193550, 3, {79,50,49}},
+{ 193596, 3, {73,52,51}},
+{ 193600, 3, {64,55,55}},
+{ 193608, 3, {2689,9,8}},
+{ 193620, 3, {461,21,20}},
+{ 193644, 3, {163,36,33}},
+{ 193680, 3, {269,30,24}},
+{ 193752, 3, {69,54,52}},
+{ 193760, 3, {173,35,32}},
+{ 193800, 3, {68,57,50}},
+{ 193824, 3, {673,18,16}},
+{ 193830, 3, {71,65,42}},
+{ 193860, 3, {359,27,20}},
+{ 193872, 3, {577,21,16}},
+{ 193896, 3, {2693,9,8}},
+{ 193908, 3, {113,44,39}},
+{ 193950, 3, {431,25,18}},
+{ 194040, 3, {63,56,55}},
+{ 194160, 3, {809,16,15}},
+{ 194208, 3, {68,56,51}},
+{ 194220, 3, {83,52,45}},
+{ 194256, 3, {71,57,48}},
+{ 194292, 3, {257,28,27}},
+{ 194304, 3, {66,64,46}},
+{ 194328, 3, {2699,9,8}},
+{ 194460, 3, {463,21,20}},
+{ 194580, 3, {69,60,47}},
+{ 194600, 3, {139,40,35}},
+{ 194640, 3, {811,16,15}},
+{ 194700, 3, {60,59,55}},
+{ 194712, 3, {61,57,56}},
+{ 194775, 3, {75,53,49}},
+{ 194805, 3, {81,65,37}},
+{ 194832, 3, {72,66,41}},
+{ 194850, 3, {433,25,18}},
+{ 194904, 3, {2707,9,8}},
+{ 194940, 3, {60,57,57}},
+{ 194964, 3, {211,33,28}},
+{ 194976, 3, {677,18,16}},
+{ 195000, 3, {65,60,50}},
+{ 195048, 3, {72,63,43}},
+{ 195120, 3, {271,30,24}},
+{ 195156, 3, {139,39,36}},
+{ 195192, 3, {2711,9,8}},
+{ 195200, 3, {64,61,50}},
+{ 195216, 3, {83,49,48}},
+{ 195336, 3, {2713,9,8}},
+{ 195360, 3, {74,55,48}},
+{ 195408, 3, {69,59,48}},
+{ 195468, 3, {179,39,28}},
+{ 195520, 3, {65,64,47}},
+{ 195525, 3, {79,55,45}},
+{ 195552, 3, {97,48,42}},
+{ 195624, 3, {66,57,52}},
+{ 195660, 3, {1087,15,12}},
+{ 195768, 3, {2719,9,8}},
+{ 195804, 3, {74,54,49}},
+{ 195840, 3, {64,60,51}},
+{ 195888, 3, {66,56,53}},
+{ 195936, 3, {157,39,32}},
+{ 195975, 3, {67,65,45}},
+{ 196020, 3, {66,55,54}},
+{ 196056, 3, {389,24,21}},
+{ 196128, 3, {227,32,27}},
+{ 196140, 3, {467,21,20}},
+{ 196200, 3, {109,45,40}},
+{ 196245, 3, {89,49,45}},
+{ 196248, 3, {74,52,51}},
+{ 196308, 3, {76,63,41}},
+{ 196380, 3, {1091,15,12}},
+{ 196416, 3, {66,62,48}},
+{ 196452, 3, {107,51,36}},
+{ 196488, 3, {2729,9,8}},
+{ 196560, 3, {65,56,54}},
+{ 196632, 3, {2731,9,8}},
+{ 196680, 3, {149,40,33}},
+{ 196704, 3, {683,18,16}},
+{ 196740, 3, {1093,15,12}},
+{ 196800, 3, {82,50,48}},
+{ 196812, 3, {71,63,44}},
+{ 196980, 3, {67,60,49}},
+{ 196992, 3, {64,57,54}},
+{ 197040, 3, {821,16,15}},
+{ 197064, 3, {69,56,51}},
+{ 197100, 3, {73,54,50}},
+{ 197120, 3, {64,56,55}},
+{ 197127, 3, {149,49,27}},
+{ 197232, 3, {587,21,16}},
+{ 197340, 3, {69,55,52}},
+{ 197352, 3, {2741,9,8}},
+{ 197400, 3, {70,60,47}},
+{ 197460, 3, {1097,15,12}},
+{ 197505, 3, {63,57,55}},
+{ 197520, 3, {823,16,15}},
+{ 197550, 3, {439,25,18}},
+{ 197568, 3, {63,56,56}},
+{ 197652, 3, {181,39,28}},
+{ 197676, 3, {68,57,51}},
+{ 197775, 3, {293,27,25}},
+{ 197820, 3, {157,36,35}},
+{ 197856, 3, {229,32,27}},
+{ 197880, 3, {97,51,40}},
+{ 197904, 3, {62,57,56}},
+{ 197928, 3, {2749,9,8}},
+{ 197960, 3, {101,49,40}},
+{ 198000, 3, {60,60,55}},
+{ 198120, 3, {127,40,39}},
+{ 198132, 3, {79,57,44}},
+{ 198135, 3, {85,63,37}},
+{ 198144, 3, {72,64,43}},
+{ 198180, 3, {367,27,20}},
+{ 198216, 3, {2753,9,8}},
+{ 198352, 3, {77,56,46}},
+{ 198360, 3, {60,58,57}},
+{ 198396, 3, {167,36,33}},
+{ 198400, 3, {64,62,50}},
+{ 198480, 3, {827,16,15}},
+{ 198528, 3, {66,64,47}},
+{ 198540, 3, {1103,15,12}},
+{ 198588, 3, {67,57,52}},
+{ 198600, 3, {331,25,24}},
+{ 198720, 3, {69,60,48}},
+{ 198792, 3, {251,33,24}},
+{ 198828, 3, {263,28,27}},
+{ 198891, 3, {77,63,41}},
+{ 198900, 3, {65,60,51}},
+{ 198936, 3, {307,27,24}},
+{ 198960, 3, {829,16,15}},
+{ 198990, 3, {67,55,54}},
+{ 199008, 3, {691,18,16}},
+{ 199080, 3, {79,56,45}},
+{ 199104, 3, {64,61,51}},
+{ 199136, 3, {127,49,32}},
+{ 199200, 3, {83,50,48}},
+{ 199224, 3, {2767,9,8}},
+{ 199248, 3, {593,21,16}},
+{ 199290, 3, {73,65,42}},
+{ 199296, 3, {173,36,32}},
+{ 199320, 3, {151,40,33}},
+{ 199350, 3, {443,25,18}},
+{ 199395, 3, {211,35,27}},
+{ 199440, 3, {277,30,24}},
+{ 199584, 3, {66,56,54}},
+{ 199620, 3, {1109,15,12}},
+{ 199680, 3, {64,60,52}},
+{ 199716, 3, {89,51,44}},
+{ 199728, 3, {73,57,48}},
+{ 199773, 3, {151,49,27}},
+{ 199800, 3, {74,54,50}},
+{ 199836, 3, {63,61,52}},
+{ 199920, 3, {70,56,51}},
+{ 199944, 3, {2777,9,8}},
+{ 199980, 3, {101,45,44}},
+{ 200025, 3, {127,45,35}},
+{ 200070, 3, {65,57,54}},
+{ 200088, 3, {397,24,21}},
+{ 200124, 3, {109,51,36}},
+{ 200200, 3, {65,56,55}},
+{ 200256, 3, {149,42,32}},
+{ 200304, 3, {107,48,39}},
+{ 200340, 3, {63,60,53}},
+{ 200448, 3, {64,58,54}},
+{ 200475, 3, {81,55,45}},
+{ 200480, 3, {179,35,32}},
+{ 200550, 3, {191,35,30}},
+{ 200640, 3, {64,57,55}},
+{ 200655, 3, {65,63,49}},
+{ 200800, 3, {251,32,25}},
+{ 200808, 3, {2789,9,8}},
+{ 200928, 3, {69,56,52}},
+{ 200952, 3, {2791,9,8}},
+{ 200970, 3, {63,58,55}},
+{ 201060, 3, {1117,15,12}},
+{ 201096, 3, {63,57,56}},
+{ 201180, 3, {479,21,20}},
+{ 201240, 3, {72,65,43}},
+{ 201264, 3, {599,21,16}},
+{ 201300, 3, {61,60,55}},
+{ 201312, 3, {233,32,27}},
+{ 201348, 3, {68,63,47}},
+{ 201360, 3, {839,16,15}},
+{ 201384, 3, {2797,9,8}},
+{ 201420, 3, {373,27,20}},
+{ 201528, 3, {311,27,24}},
+{ 201552, 3, {68,57,52}},
+{ 201630, 3, {66,65,47}},
+{ 201672, 3, {2801,9,8}},
+{ 201696, 3, {191,33,32}},
+{ 201756, 3, {69,68,43}},
+{ 201780, 3, {60,59,57}},
+{ 201816, 3, {2803,9,8}},
+{ 201825, 3, {69,65,45}},
+{ 201880, 3, {103,49,40}},
+{ 201888, 3, {701,18,16}},
+{ 201936, 3, {601,21,16}},
+{ 201960, 3, {68,55,54}},
+{ 202020, 3, {74,65,42}},
+{ 202032, 3, {69,61,48}},
+{ 202048, 3, {77,64,41}},
+{ 202050, 3, {449,25,18}},
+{ 202104, 3, {401,24,21}},
+{ 202125, 3, {75,55,49}},
+{ 202140, 3, {1123,15,12}},
+{ 202200, 3, {337,25,24}},
+{ 202272, 3, {86,49,48}},
+{ 202320, 3, {281,30,24}},
+{ 202356, 3, {73,63,44}},
+{ 202368, 3, {64,62,51}},
+{ 202400, 3, {80,55,46}},
+{ 202464, 3, {74,57,48}},
+{ 202500, 3, {75,54,50}},
+{ 202560, 3, {211,32,30}},
+{ 202608, 3, {67,56,54}},
+{ 202650, 3, {193,35,30}},
+{ 202664, 3, {77,56,47}},
+{ 202720, 3, {181,35,32}},
+{ 202752, 3, {66,64,48}},
+{ 202776, 3, {71,56,51}},
+{ 202800, 3, {65,60,52}},
+{ 202824, 3, {313,27,24}},
+{ 202860, 3, {69,60,49}},
+{ 202920, 3, {89,57,40}},
+{ 202944, 3, {151,42,32}},
+{ 202968, 3, {2819,9,8}},
+{ 203112, 3, {63,62,52}},
+{ 203136, 3, {69,64,46}},
+{ 203184, 3, {83,51,48}},
+{ 203220, 3, {1129,15,12}},
+{ 203280, 3, {66,56,55}},
+{ 203350, 3, {83,50,49}},
+{ 203364, 3, {269,28,27}},
+{ 203400, 3, {113,45,40}},
+{ 203424, 3, {163,39,32}},
+{ 203520, 3, {64,60,53}},
+{ 203544, 3, {257,33,24}},
+{ 203580, 3, {65,58,54}},
+{ 203616, 3, {101,48,42}},
+{ 203688, 3, {72,69,41}},
+{ 203760, 3, {283,30,24}},
+{ 203808, 3, {193,33,32}},
+{ 203840, 3, {65,56,56}},
+{ 203904, 3, {64,59,54}},
+{ 203940, 3, {103,45,44}},
+{ 203952, 3, {607,21,16}},
+{ 203976, 3, {2833,9,8}},
+{ 204048, 3, {109,48,39}},
+{ 204120, 3, {63,60,54}},
+{ 204160, 3, {64,58,55}},
+{ 204192, 3, {709,18,16}},
+{ 204204, 3, {77,52,51}},
+{ 204264, 3, {2837,9,8}},
+{ 204288, 3, {64,57,56}},
+{ 204336, 3, {72,66,43}},
+{ 204360, 3, {131,40,39}},
+{ 204435, 3, {63,59,55}},
+{ 204480, 3, {71,60,48}},
+{ 204516, 3, {69,57,52}},
+{ 204540, 3, {487,21,20}},
+{ 204600, 3, {62,60,55}},
+{ 204624, 3, {63,58,56}},
+{ 204660, 3, {379,27,20}},
+{ 204696, 3, {2843,9,8}},
+{ 204720, 3, {853,16,15}},
+{ 204750, 3, {65,63,50}},
+{ 204768, 3, {79,54,48}},
+{ 204792, 3, {69,56,53}},
+{ 204800, 3, {64,64,50}},
+{ 204876, 3, {271,28,27}},
+{ 204930, 3, {69,55,54}},
+{ 205020, 3, {67,60,51}},
+{ 205065, 3, {93,49,45}},
+{ 205128, 3, {74,63,44}},
+{ 205200, 3, {60,60,57}},
+{ 205272, 3, {2851,9,8}},
+{ 205296, 3, {78,56,47}},
+{ 205335, 3, {81,65,39}},
+{ 205344, 3, {69,62,48}},
+{ 205380, 3, {163,36,35}},
+{ 205408, 3, {131,49,32}},
+{ 205416, 3, {317,27,24}},
+{ 205425, 3, {83,55,45}},
+{ 205428, 3, {68,57,53}},
+{ 205524, 3, {173,36,33}},
+{ 205590, 3, {89,55,42}},
+{ 205600, 3, {257,32,25}},
+{ 205632, 3, {64,63,51}},
+{ 205650, 3, {457,25,18}},
+{ 205680, 3, {857,16,15}},
+{ 205704, 3, {2857,9,8}},
+{ 205740, 3, {127,45,36}},
+{ 205800, 3, {70,60,49}},
+{ 205821, 3, {81,77,33}},
+{ 205884, 3, {76,63,43}},
+{ 205968, 3, {613,21,16}},
+{ 205992, 3, {2861,9,8}},
+{ 206040, 3, {101,51,40}},
+{ 206052, 3, {223,33,28}},
+{ 206080, 3, {70,64,46}},
+{ 206136, 3, {409,24,21}},
+{ 206160, 3, {859,16,15}},
+{ 206208, 3, {179,36,32}},
+{ 206220, 3, {491,21,20}},
+{ 206325, 3, {131,45,35}},
+{ 206360, 3, {67,56,55}},
+{ 206388, 3, {63,63,52}},
+{ 206400, 3, {75,64,43}},
+{ 206496, 3, {239,32,27}},
+{ 206550, 3, {75,54,51}},
+{ 206640, 3, {72,70,41}},
+{ 206700, 3, {65,60,53}},
+{ 206800, 3, {80,55,47}},
+{ 206820, 3, {383,27,20}},
+{ 206850, 3, {197,35,30}},
+{ 206856, 3, {78,52,51}},
+{ 206976, 3, {66,56,56}},
+{ 207000, 3, {69,60,50}},
+{ 207072, 3, {719,18,16}},
+{ 207090, 3, {65,59,54}},
+{ 207120, 3, {863,16,15}},
+{ 207180, 3, {1151,15,12}},
+{ 207225, 3, {307,27,25}},
+{ 207240, 3, {157,40,33}},
+{ 207288, 3, {2879,9,8}},
+{ 207312, 3, {617,21,16}},
+{ 207360, 3, {64,60,54}},
+{ 207450, 3, {461,25,18}},
+{ 207468, 3, {113,51,36}},
+{ 207480, 3, {65,57,56}},
+{ 207540, 3, {1153,15,12}},
+{ 207552, 3, {69,64,47}},
+{ 207636, 3, {121,44,39}},
+{ 207648, 3, {103,48,42}},
+{ 207675, 3, {71,65,45}},
+{ 207680, 3, {64,59,55}},
+{ 207711, 3, {157,49,27}},
+{ 207864, 3, {2887,9,8}},
+{ 207900, 3, {63,60,55}},
+{ 207936, 3, {64,57,57}},
+{ 207984, 3, {619,21,16}},
+{ 208000, 3, {65,64,50}},
+{ 208032, 3, {197,33,32}},
+{ 208080, 3, {68,60,51}},
+{ 208104, 3, {69,58,52}},
+{ 208152, 3, {63,59,56}},
+{ 208164, 3, {83,57,44}},
+{ 208200, 3, {347,25,24}},
+{ 208224, 3, {241,32,27}},
+{ 208250, 3, {85,50,49}},
+{ 208260, 3, {89,52,45}},
+{ 208296, 3, {263,33,24}},
+{ 208350, 3, {463,25,18}},
+{ 208416, 3, {167,39,32}},
+{ 208488, 3, {73,56,51}},
+{ 208512, 3, {181,36,32}},
+{ 208560, 3, {79,55,48}},
+{ 208572, 3, {191,39,28}},
+{ 208584, 3, {2897,9,8}},
+{ 208593, 3, {77,63,43}},
+{ 208600, 3, {149,40,35}},
+{ 208620, 3, {61,60,57}},
+{ 208656, 3, {69,56,54}},
+{ 208740, 3, {71,60,49}},
+{ 208845, 3, {65,63,51}},
+{ 208896, 3, {64,64,51}},
+{ 208950, 3, {199,35,30}},
+{ 208980, 3, {81,60,43}},
+{ 209016, 3, {2903,9,8}},
+{ 209034, 3, {79,54,49}},
+{ 209088, 3, {66,66,48}},
+{ 209160, 3, {83,56,45}},
+{ 209196, 3, {149,39,36}},
+{ 209304, 3, {68,57,54}},
+{ 209328, 3, {89,49,48}},
+{ 209340, 3, {1163,15,12}},
+{ 209376, 3, {727,18,16}},
+{ 209385, 3, {81,55,47}},
+{ 209400, 3, {349,25,24}},
+{ 209412, 3, {277,28,27}},
+{ 209440, 3, {68,56,55}},
+{ 209448, 3, {2909,9,8}},
+{ 209475, 3, {75,57,49}},
+{ 209508, 3, {79,52,51}},
+{ 209520, 3, {97,48,45}},
+{ 209580, 3, {499,21,20}},
+{ 209664, 3, {64,63,52}},
+{ 209720, 3, {107,49,40}},
+{ 209748, 3, {227,33,28}},
+{ 209916, 3, {68,63,49}},
+{ 209925, 3, {311,27,25}},
+{ 210000, 3, {70,60,50}},
+{ 210024, 3, {2917,9,8}},
+{ 210060, 3, {389,27,20}},
+{ 210120, 3, {103,51,40}},
+{ 210144, 3, {199,33,32}},
+{ 210150, 3, {467,25,18}},
+{ 210210, 3, {66,65,49}},
+{ 210240, 3, {73,60,48}},
+{ 210400, 3, {263,32,25}},
+{ 210420, 3, {167,36,35}},
+{ 210444, 3, {71,57,52}},
+{ 210480, 3, {877,16,15}},
+{ 210560, 3, {70,64,47}},
+{ 210600, 3, {65,60,54}},
+{ 210672, 3, {66,57,56}},
+{ 210735, 3, {223,35,27}},
+{ 210744, 3, {2927,9,8}},
+{ 210756, 3, {193,39,28}},
+{ 210780, 3, {1171,15,12}},
+{ 210816, 3, {64,61,54}},
+{ 210870, 3, {71,55,54}},
+{ 210960, 3, {293,30,24}},
+{ 211008, 3, {157,42,32}},
+{ 211104, 3, {733,18,16}},
+{ 211120, 3, {65,58,56}},
+{ 211140, 3, {69,60,51}},
+{ 211176, 3, {419,24,21}},
+{ 211200, 3, {64,60,55}},
+{ 211260, 3, {503,21,20}},
+{ 211275, 3, {313,27,25}},
+{ 211288, 3, {77,56,49}},
+{ 211344, 3, {74,56,51}},
+{ 211365, 3, {63,61,55}},
+{ 211400, 3, {151,40,35}},
+{ 211440, 3, {881,16,15}},
+{ 211500, 3, {75,60,47}},
+{ 211536, 3, {113,48,39}},
+{ 211584, 3, {64,58,57}},
+{ 211596, 3, {229,33,28}},
+{ 211608, 3, {2939,9,8}},
+{ 211680, 3, {63,60,56}},
+{ 211692, 3, {69,59,52}},
+{ 211800, 3, {353,25,24}},
+{ 211860, 3, {107,45,44}},
+{ 211904, 3, {77,64,43}},
+{ 211920, 3, {883,16,15}},
+{ 211968, 3, {69,64,48}},
+{ 212004, 3, {151,39,36}},
+{ 212016, 3, {631,21,16}},
+{ 212040, 3, {62,60,57}},
+{ 212121, 3, {91,63,37}},
+{ 212160, 3, {65,64,51}},
+{ 212184, 3, {421,24,21}},
+{ 212220, 3, {131,45,36}},
+{ 212256, 3, {67,66,48}},
+{ 212436, 3, {281,28,27}},
+{ 212520, 3, {69,56,55}},
+{ 212580, 3, {1181,15,12}},
+{ 212616, 3, {2953,9,8}},
+{ 212652, 3, {179,36,33}},
+{ 212832, 3, {739,18,16}},
+{ 212880, 3, {887,16,15}},
+{ 212904, 3, {2957,9,8}},
+{ 212940, 3, {65,63,52}},
+{ 213048, 3, {269,33,24}},
+{ 213120, 3, {74,60,48}},
+{ 213150, 3, {75,58,49}},
+{ 213180, 3, {68,57,55}},
+{ 213192, 3, {72,63,47}},
+{ 213300, 3, {79,54,50}},
+{ 213336, 3, {2963,9,8}},
+{ 213360, 3, {127,42,40}},
+{ 213408, 3, {72,57,52}},
+{ 213525, 3, {73,65,45}},
+{ 213600, 3, {89,50,48}},
+{ 213624, 3, {72,69,43}},
+{ 213640, 3, {109,49,40}},
+{ 213660, 3, {1187,15,12}},
+{ 213675, 3, {77,75,37}},
+{ 213696, 3, {64,63,53}},
+{ 213720, 3, {137,40,39}},
+{ 213768, 3, {2969,9,8}},
+{ 213780, 3, {509,21,20}},
+{ 213864, 3, {67,57,56}},
+{ 213885, 3, {97,49,45}},
+{ 213912, 3, {2971,9,8}},
+{ 213920, 3, {191,35,32}},
+{ 213948, 3, {283,28,27}},
+{ 213975, 3, {317,27,25}},
+{ 213984, 3, {743,18,16}},
+{ 214032, 3, {78,56,49}},
+{ 214080, 3, {223,32,30}},
+{ 214110, 3, {65,61,54}},
+{ 214200, 3, {68,63,50}},
+{ 214272, 3, {64,62,54}},
+{ 214368, 3, {66,58,56}},
+{ 214375, 3, {125,49,35}},
+{ 214380, 3, {397,27,20}},
+{ 214400, 3, {67,64,50}},
+{ 214488, 3, {331,27,24}},
+{ 214500, 3, {65,60,55}},
+{ 214515, 3, {227,35,27}},
+{ 214620, 3, {73,60,49}},
+{ 214632, 3, {271,33,24}},
+{ 214650, 3, {75,54,53}},
+{ 214656, 3, {78,64,43}},
+{ 214704, 3, {71,56,54}},
+{ 214720, 3, {64,61,55}},
+{ 214740, 3, {1193,15,12}},
+{ 214760, 3, {65,59,56}},
+{ 214816, 3, {137,49,32}},
+{ 214830, 3, {63,62,55}},
+{ 215004, 3, {76,69,41}},
+{ 215028, 3, {181,36,33}},
+{ 215040, 3, {64,60,56}},
+{ 215124, 3, {197,39,28}},
+{ 215136, 3, {83,54,48}},
+{ 215160, 3, {163,40,33}},
+{ 215200, 3, {269,32,25}},
+{ 215208, 3, {63,61,56}},
+{ 215232, 3, {64,59,57}},
+{ 215280, 3, {69,60,52}},
+{ 215292, 3, {233,33,28}},
+{ 215325, 3, {87,55,45}},
+{ 215376, 3, {641,21,16}},
+{ 215400, 3, {359,25,24}},
+{ 215424, 3, {66,64,51}},
+{ 215460, 3, {63,60,57}},
+{ 215550, 3, {479,25,18}},
+{ 215600, 3, {70,56,55}},
+{ 215649, 3, {163,49,27}},
+{ 215670, 3, {79,65,42}},
+{ 215712, 3, {107,48,42}},
+{ 215730, 3, {85,54,47}},
+{ 215775, 3, {137,45,35}},
+{ 215820, 3, {109,45,44}},
+{ 215832, 3, {69,68,46}},
+{ 215865, 3, {81,65,41}},
+{ 215904, 3, {173,39,32}},
+{ 215928, 3, {2999,9,8}},
+{ 216048, 3, {643,21,16}},
+{ 216072, 3, {3001,9,8}},
+{ 216144, 3, {79,57,48}},
+{ 216160, 3, {193,35,32}},
+{ 216180, 3, {1201,15,12}},
+{ 216216, 3, {66,63,52}},
+{ 216288, 3, {751,18,16}},
+{ 216320, 3, {65,64,52}},
+{ 216372, 3, {73,57,52}},
+{ 216384, 3, {69,56,56}},
+{ 216405, 3, {229,35,27}},
+{ 216450, 3, {74,65,45}},
+{ 216480, 3, {82,55,48}},
+{ 216540, 3, {401,27,20}},
+{ 216576, 3, {72,64,47}},
+{ 216720, 3, {72,70,43}},
+{ 216792, 3, {3011,9,8}},
+{ 216800, 3, {271,32,25}},
+{ 216810, 3, {73,55,54}},
+{ 216825, 3, {75,59,49}},
+{ 216832, 3, {77,64,44}},
+{ 216840, 3, {139,40,39}},
+{ 216864, 3, {251,32,27}},
+{ 216972, 3, {82,54,49}},
+{ 217035, 3, {65,63,53}},
+{ 217056, 3, {68,57,56}},
+{ 217224, 3, {431,24,21}},
+{ 217260, 3, {71,60,51}},
+{ 217308, 3, {199,39,28}},
+{ 217368, 3, {3019,9,8}},
+{ 217392, 3, {647,21,16}},
+{ 217464, 3, {82,52,51}},
+{ 217512, 3, {72,57,53}},
+{ 217560, 3, {74,60,49}},
+{ 217600, 3, {68,64,50}},
+{ 217620, 3, {65,62,54}},
+{ 217656, 3, {3023,9,8}},
+{ 217668, 3, {97,51,44}},
+{ 217680, 3, {907,16,15}},
+{ 217728, 3, {64,63,54}},
+{ 217800, 3, {66,60,55}},
+{ 217872, 3, {89,51,48}},
+{ 217920, 3, {227,32,30}},
+{ 217932, 3, {127,44,39}},
+{ 217952, 3, {139,49,32}},
+{ 217980, 3, {173,36,35}},
+{ 218016, 3, {757,18,16}},
+{ 218050, 3, {89,50,49}},
+{ 218064, 3, {66,59,56}},
+{ 218160, 3, {101,48,45}},
+{ 218232, 3, {433,24,21}},
+{ 218240, 3, {64,62,55}},
+{ 218280, 3, {107,51,40}},
+{ 218295, 3, {63,63,55}},
+{ 218340, 3, {1213,15,12}},
+{ 218376, 3, {337,27,24}},
+{ 218400, 3, {65,60,56}},
+{ 218484, 3, {68,63,51}},
+{ 218592, 3, {69,66,48}},
+{ 218640, 3, {911,16,15}},
+{ 218664, 3, {3037,9,8}},
+{ 218680, 3, {71,56,55}},
+{ 218688, 3, {67,64,51}},
+{ 218700, 3, {75,54,54}},
+{ 218736, 3, {63,62,56}},
+{ 218790, 3, {66,65,51}},
+{ 218820, 3, {521,21,20}},
+{ 218868, 3, {69,61,52}},
+{ 218880, 3, {64,60,57}},
+{ 218925, 3, {139,45,35}},
+{ 218952, 3, {3041,9,8}},
+{ 218988, 3, {79,63,44}},
+{ 219060, 3, {1217,15,12}},
+{ 219072, 3, {163,42,32}},
+{ 219120, 3, {83,55,48}},
+{ 219150, 3, {487,25,18}},
+{ 219168, 3, {761,18,16}},
+{ 219240, 3, {63,60,58}},
+{ 219300, 3, {75,68,43}},
+{ 219336, 3, {74,57,52}},
+{ 219375, 3, {75,65,45}},
+{ 219384, 3, {277,33,24}},
+{ 219408, 3, {653,21,16}},
+{ 219420, 3, {69,60,53}},
+{ 219492, 3, {67,63,52}},
+{ 219528, 3, {3049,9,8}},
+{ 219555, 3, {85,63,41}},
+{ 219618, 3, {83,54,49}},
+{ 219648, 3, {66,64,52}},
+{ 219660, 3, {523,21,20}},
+{ 219744, 3, {109,48,42}},
+{ 219780, 3, {74,55,54}},
+{ 219800, 3, {157,40,35}},
+{ 219840, 3, {229,32,30}},
+{ 219960, 3, {72,65,47}},
+{ 220000, 3, {80,55,50}},
+{ 220032, 3, {191,36,32}},
+{ 220080, 3, {131,42,40}},
+{ 220116, 3, {83,52,51}},
+{ 220140, 3, {1223,15,12}},
+{ 220185, 3, {233,35,27}},
+{ 220200, 3, {367,25,24}},
+{ 220248, 3, {69,57,56}},
+{ 220275, 3, {89,55,45}},
+{ 220392, 3, {3061,9,8}},
+{ 220428, 3, {157,39,36}},
+{ 220440, 3, {167,40,33}},
+{ 220480, 3, {65,64,53}},
+{ 220524, 3, {69,68,47}},
+{ 220560, 3, {919,16,15}},
+{ 220640, 3, {197,35,32}},
+{ 220752, 3, {73,56,54}},
+{ 220800, 3, {69,64,50}},
+{ 220824, 3, {3067,9,8}},
+{ 220836, 3, {239,33,28}},
+{ 220860, 3, {409,27,20}},
+{ 220932, 3, {68,57,57}},
+{ 220941, 3, {167,49,27}},
+{ 220950, 3, {491,25,18}},
+{ 221040, 3, {307,30,24}},
+{ 221100, 3, {67,60,55}},
+{ 221130, 3, {65,63,54}},
+{ 221160, 3, {97,57,40}},
+{ 221184, 3, {64,64,54}},
+{ 221220, 3, {1229,15,12}},
+{ 221256, 3, {439,24,21}},
+{ 221400, 3, {82,54,50}},
+{ 221424, 3, {659,21,16}},
+{ 221445, 3, {95,63,37}},
+{ 221472, 3, {769,18,16}},
+{ 221480, 3, {113,49,40}},
+{ 221508, 3, {293,28,27}},
+{ 221550, 3, {211,35,30}},
+{ 221580, 3, {1231,15,12}},
+{ 221600, 3, {277,32,25}},
+{ 221616, 3, {72,57,54}},
+{ 221688, 3, {3079,9,8}},
+{ 221760, 3, {64,63,55}},
+{ 221904, 3, {69,67,48}},
+{ 221940, 3, {137,45,36}},
+{ 221952, 3, {68,64,51}},
+{ 221976, 3, {3083,9,8}},
+{ 222040, 3, {65,61,56}},
+{ 222048, 3, {257,32,27}},
+{ 222096, 3, {661,21,16}},
+{ 222264, 3, {63,63,56}},
+{ 222300, 3, {65,60,57}},
+{ 222336, 3, {193,36,32}},
+{ 222360, 3, {109,51,40}},
+{ 222408, 3, {3089,9,8}},
+{ 222456, 3, {69,62,52}},
+{ 222480, 3, {103,48,45}},
+{ 222528, 3, {64,61,57}},
+{ 222552, 3, {281,33,24}},
+{ 222600, 3, {70,60,53}},
+{ 222624, 3, {773,18,16}},
+{ 222660, 3, {1237,15,12}},
+{ 222684, 3, {241,33,28}},
+{ 222705, 3, {101,49,45}},
+{ 222720, 3, {64,60,58}},
+{ 222750, 3, {75,55,54}},
+{ 222768, 3, {68,63,52}},
+{ 222816, 3, {211,33,32}},
+{ 222880, 3, {199,35,32}},
+{ 222960, 3, {929,16,15}},
+{ 223020, 3, {63,60,59}},
+{ 223080, 3, {66,65,52}},
+{ 223212, 3, {89,57,44}},
+{ 223272, 3, {443,24,21}},
+{ 223344, 3, {72,66,47}},
+{ 223380, 3, {73,60,51}},
+{ 223392, 3, {179,39,32}},
+{ 223425, 3, {331,27,25}},
+{ 223440, 3, {70,57,56}},
+{ 223560, 3, {69,60,54}},
+{ 223587, 3, {91,63,39}},
+{ 223680, 3, {233,32,30}},
+{ 223740, 3, {113,45,44}},
+{ 223776, 3, {74,56,54}},
+{ 223800, 3, {373,25,24}},
+{ 223848, 3, {3109,9,8}},
+{ 223872, 3, {66,64,53}},
+{ 223920, 3, {311,30,24}},
+{ 224000, 3, {70,64,50}},
+{ 224070, 3, {97,55,42}},
+{ 224100, 3, {83,54,50}},
+{ 224112, 3, {69,58,56}},
+{ 224136, 3, {283,33,24}},
+{ 224175, 3, {75,61,49}},
+{ 224224, 3, {77,56,52}},
+{ 224280, 3, {89,56,45}},
+{ 224352, 3, {82,57,48}},
+{ 224400, 3, {68,60,55}},
+{ 224448, 3, {167,42,32}},
+{ 224550, 3, {499,25,18}},
+{ 224568, 3, {3119,9,8}},
+{ 224640, 3, {65,64,54}},
+{ 224712, 3, {3121,9,8}},
+{ 224775, 3, {81,75,37}},
+{ 224796, 3, {131,44,39}},
+{ 224800, 3, {281,32,25}},
+{ 224808, 3, {68,58,57}},
+{ 224820, 3, {1249,15,12}},
+{ 224840, 3, {73,56,55}},
+{ 224856, 3, {347,27,24}},
+{ 224880, 3, {937,16,15}},
+{ 224928, 3, {71,66,48}},
+{ 225000, 3, {75,60,50}},
+{ 225036, 3, {76,63,47}},
+{ 225180, 3, {139,45,36}},
+{ 225216, 3, {69,64,51}},
+{ 225225, 3, {65,63,55}},
+{ 225264, 3, {76,57,52}},
+{ 225280, 3, {64,64,55}},
+{ 225360, 3, {313,30,24}},
+{ 225456, 3, {66,61,56}},
+{ 225492, 3, {76,69,43}},
+{ 225540, 3, {179,36,35}},
+{ 225600, 3, {75,64,47}},
+{ 225624, 3, {79,56,51}},
+{ 225680, 3, {65,62,56}},
+{ 225720, 3, {66,60,57}},
+{ 225792, 3, {64,63,56}},
+{ 225840, 3, {941,16,15}},
+{ 225855, 3, {239,35,27}},
+{ 225864, 3, {3137,9,8}},
+{ 225888, 3, {181,39,32}},
+{ 226044, 3, {69,63,52}},
+{ 226128, 3, {673,21,16}},
+{ 226152, 3, {349,27,24}},
+{ 226176, 3, {64,62,57}},
+{ 226200, 3, {65,60,58}},
+{ 226260, 3, {419,27,20}},
+{ 226296, 3, {449,24,21}},
+{ 226350, 3, {503,25,18}},
+{ 226395, 3, {81,65,43}},
+{ 226400, 3, {283,32,25}},
+{ 226440, 3, {74,60,51}},
+{ 226560, 3, {64,60,59}},
+{ 226590, 3, {83,65,42}},
+{ 226620, 3, {1259,15,12}},
+{ 226625, 3, {125,49,37}},
+{ 226632, 3, {71,57,56}},
+{ 226644, 3, {101,51,44}},
+{ 226656, 3, {787,18,16}},
+{ 226688, 3, {77,64,46}},
+{ 226800, 3, {63,60,60}},
+{ 226908, 3, {191,36,33}},
+{ 226944, 3, {197,36,32}},
+{ 226980, 3, {97,52,45}},
+{ 227040, 3, {80,66,43}},
+{ 227052, 3, {68,63,53}},
+{ 227088, 3, {83,57,48}},
+{ 227115, 3, {103,49,45}},
+{ 227136, 3, {78,56,52}},
+{ 227200, 3, {71,64,50}},
+{ 227205, 3, {81,55,51}},
+{ 227220, 3, {541,21,20}},
+{ 227232, 3, {263,32,27}},
+{ 227280, 3, {947,16,15}},
+{ 227304, 3, {77,72,41}},
+{ 227340, 3, {421,27,20}},
+{ 227370, 3, {66,65,53}},
+{ 227400, 3, {379,25,24}},
+{ 227472, 3, {677,21,16}},
+{ 227475, 3, {337,27,25}},
+{ 227520, 3, {79,60,48}},
+{ 227556, 3, {86,54,49}},
+{ 227700, 3, {69,60,55}},
+{ 227736, 3, {3163,9,8}},
+{ 227745, 3, {241,35,27}},
+{ 227808, 3, {113,48,42}},
+{ 227850, 3, {75,62,49}},
+{ 227920, 3, {74,56,55}},
+{ 227976, 3, {69,59,56}},
+{ 227997, 3, {77,63,47}},
+{ 228024, 3, {3167,9,8}},
+{ 228060, 3, {181,36,35}},
+{ 228072, 3, {86,52,51}},
+{ 228096, 3, {66,64,54}},
+{ 228144, 3, {97,49,48}},
+{ 228150, 3, {65,65,54}},
+{ 228168, 3, {3169,9,8}},
+{ 228200, 3, {163,40,35}},
+{ 228228, 3, {77,57,52}},
+{ 228240, 3, {317,30,24}},
+{ 228360, 3, {173,40,33}},
+{ 228420, 3, {81,60,47}},
+{ 228528, 3, {69,69,48}},
+{ 228536, 3, {77,56,53}},
+{ 228600, 3, {127,45,40}},
+{ 228684, 3, {68,59,57}},
+{ 228690, 3, {66,63,55}},
+{ 228720, 3, {953,16,15}},
+{ 228744, 3, {353,27,24}},
+{ 228800, 3, {65,64,55}},
+{ 228852, 3, {163,39,36}},
+{ 228879, 3, {173,49,27}},
+{ 229032, 3, {3181,9,8}},
+{ 229050, 3, {509,25,18}},
+{ 229140, 3, {67,60,57}},
+{ 229152, 3, {66,62,56}},
+{ 229248, 3, {199,36,32}},
+{ 229284, 3, {193,36,33}},
+{ 229320, 3, {65,63,56}},
+{ 229440, 3, {239,32,30}},
+{ 229464, 3, {3187,9,8}},
+{ 229488, 3, {683,21,16}},
+{ 229500, 3, {75,60,51}},
+{ 229536, 3, {797,18,16}},
+{ 229632, 3, {69,64,52}},
+{ 229740, 3, {547,21,20}},
+{ 229752, 3, {3191,9,8}},
+{ 229800, 3, {383,25,24}},
+{ 229824, 3, {64,63,57}},
+{ 229860, 3, {1277,15,12}},
+{ 229908, 3, {69,68,49}},
+{ 230076, 3, {83,63,44}},
+{ 230100, 3, {65,60,59}},
+{ 230160, 3, {137,42,40}},
+{ 230175, 3, {93,55,45}},
+{ 230220, 3, {1279,15,12}},
+{ 230265, 3, {85,63,43}},
+{ 230280, 3, {101,57,40}},
+{ 230328, 3, {457,24,21}},
+{ 230400, 3, {64,60,60}},
+{ 230412, 3, {211,39,28}},
+{ 230520, 3, {113,51,40}},
+{ 230580, 3, {63,61,60}},
+{ 230616, 3, {3203,9,8}},
+{ 230688, 3, {89,54,48}},
+{ 230769, 3, {81,77,37}},
+{ 230850, 3, {75,57,54}},
+{ 230940, 3, {1283,15,12}},
+{ 231000, 3, {70,60,55}},
+{ 231048, 3, {3209,9,8}},
+{ 231075, 3, {79,65,45}},
+{ 231120, 3, {107,48,45}},
+{ 231132, 3, {103,51,44}},
+{ 231192, 3, {78,57,52}},
+{ 231264, 3, {73,66,48}},
+{ 231336, 3, {68,63,54}},
+{ 231360, 3, {241,32,30}},
+{ 231504, 3, {78,56,53}},
+{ 231525, 3, {75,63,49}},
+{ 231552, 3, {67,64,54}},
+{ 231616, 3, {77,64,47}},
+{ 231624, 3, {3217,9,8}},
+{ 231660, 3, {66,65,54}},
+{ 231744, 3, {71,64,51}},
+{ 231770, 3, {77,70,43}},
+{ 231840, 3, {69,60,56}},
+{ 231912, 3, {3221,9,8}},
+{ 231924, 3, {251,33,28}},
+{ 232020, 3, {1289,15,12}},
+{ 232056, 3, {293,33,24}},
+{ 232080, 3, {967,16,15}},
+{ 232092, 3, {307,28,27}},
+{ 232155, 3, {67,63,55}},
+{ 232176, 3, {691,21,16}},
+{ 232200, 3, {75,72,43}},
+{ 232260, 3, {79,60,49}},
+{ 232320, 3, {66,64,55}},
+{ 232344, 3, {461,24,21}},
+{ 232380, 3, {1291,15,12}},
+{ 232416, 3, {269,32,27}},
+{ 232440, 3, {149,40,39}},
+{ 232488, 3, {3229,9,8}},
+{ 232512, 3, {173,42,32}},
+{ 232560, 3, {68,60,57}},
+{ 232596, 3, {71,63,52}},
+{ 232632, 3, {359,27,24}},
+{ 232740, 3, {431,27,20}},
+{ 232750, 3, {95,50,49}},
+{ 232800, 3, {97,50,48}},
+{ 232848, 3, {66,63,56}},
+{ 232960, 3, {65,64,56}},
+{ 232992, 3, {809,18,16}},
+{ 233016, 3, {73,57,56}},
+{ 233040, 3, {971,16,15}},
+{ 233172, 3, {127,51,36}},
+{ 233200, 3, {80,55,53}},
+{ 233220, 3, {69,65,52}},
+{ 233310, 3, {101,55,42}},
+{ 233352, 3, {463,24,21}},
+{ 233400, 3, {389,25,24}},
+{ 233415, 3, {65,63,57}},
+{ 233460, 3, {1297,15,12}},
+{ 233472, 3, {64,64,57}},
+{ 233496, 3, {72,69,47}},
+{ 233520, 3, {139,42,40}},
+{ 233568, 3, {811,18,16}},
+{ 233600, 3, {73,64,50}},
+{ 233632, 3, {149,49,32}},
+{ 233800, 3, {167,40,35}},
+{ 233820, 3, {433,27,20}},
+{ 233856, 3, {64,63,58}},
+{ 233928, 3, {72,57,57}},
+{ 233940, 3, {557,21,20}},
+{ 234000, 3, {65,60,60}},
+{ 234036, 3, {197,36,33}},
+{ 234048, 3, {69,64,53}},
+{ 234072, 3, {3251,9,8}},
+{ 234080, 3, {76,56,55}},
+{ 234090, 3, {85,54,51}},
+{ 234144, 3, {271,32,27}},
+{ 234150, 3, {223,35,30}},
+{ 234156, 3, {79,57,52}},
+{ 234180, 3, {1301,15,12}},
+{ 234192, 3, {82,56,51}},
+{ 234216, 3, {3253,9,8}},
+{ 234225, 3, {347,27,25}},
+{ 234240, 3, {64,61,60}},
+{ 234300, 3, {71,60,55}},
+{ 234360, 3, {63,62,60}},
+{ 234400, 3, {293,32,25}},
+{ 234432, 3, {74,66,48}},
+{ 234450, 3, {521,25,18}},
+{ 234468, 3, {167,39,36}},
+{ 234480, 3, {977,16,15}},
+{ 234504, 3, {3257,9,8}},
+{ 234540, 3, {1303,15,12}},
+{ 234600, 3, {69,68,50}},
+{ 234612, 3, {76,63,49}},
+{ 234624, 3, {78,64,47}},
+{ 234630, 3, {79,55,54}},
+{ 234648, 3, {3259,9,8}},
+{ 234675, 3, {149,45,35}},
+{ 234840, 3, {103,57,40}},
+{ 234900, 3, {75,58,54}},
+{ 234960, 3, {89,55,48}},
+{ 235008, 3, {68,64,54}},
+{ 235053, 3, {91,63,41}},
+{ 235092, 3, {137,44,39}},
+{ 235116, 3, {311,28,27}},
+{ 235152, 3, {71,69,48}},
+{ 235170, 3, {67,65,54}},
+{ 235200, 3, {70,60,56}},
+{ 235260, 3, {1307,15,12}},
+{ 235350, 3, {523,25,18}},
+{ 235368, 3, {467,24,21}},
+{ 235440, 3, {109,48,45}},
+{ 235488, 3, {223,33,32}},
+{ 235494, 3, {89,54,49}},
+{ 235512, 3, {3271,9,8}},
+{ 235536, 3, {701,21,16}},
+{ 235560, 3, {151,40,39}},
+{ 235575, 3, {349,27,25}},
+{ 235620, 3, {68,63,55}},
+{ 235704, 3, {69,61,56}},
+{ 235800, 3, {131,45,40}},
+{ 235840, 3, {67,64,55}},
+{ 235872, 3, {72,63,52}},
+{ 235920, 3, {983,16,15}},
+{ 235935, 3, {107,49,45}},
+{ 235950, 3, {66,65,55}},
+{ 235980, 3, {69,60,57}},
+{ 236028, 3, {89,52,51}},
+{ 236115, 3, {81,55,53}},
+{ 236160, 3, {82,60,48}},
+{ 236208, 3, {74,57,56}},
+{ 236280, 3, {179,40,33}},
+{ 236320, 3, {211,35,32}},
+{ 236340, 3, {101,52,45}},
+{ 236376, 3, {67,63,56}},
+{ 236412, 3, {199,36,33}},
+{ 236436, 3, {68,61,57}},
+{ 236448, 3, {821,18,16}},
+{ 236460, 3, {563,21,20}},
+{ 236544, 3, {66,64,56}},
+{ 236600, 3, {65,65,56}},
+{ 236628, 3, {313,28,27}},
+{ 236768, 3, {151,49,32}},
+{ 236775, 3, {77,75,41}},
+{ 236800, 3, {74,64,50}},
+{ 236808, 3, {69,66,52}},
+{ 236817, 3, {179,49,27}},
+{ 236880, 3, {72,70,47}},
+{ 236925, 3, {81,65,45}},
+{ 237024, 3, {823,18,16}},
+{ 237048, 3, {83,56,51}},
+{ 237060, 3, {439,27,20}},
+{ 237120, 3, {65,64,57}},
+{ 237160, 3, {77,56,55}},
+{ 237195, 3, {251,35,27}},
+{ 237360, 3, {80,69,43}},
+{ 237420, 3, {1319,15,12}},
+{ 237440, 3, {70,64,53}},
+{ 237456, 3, {97,51,48}},
+{ 237468, 3, {257,33,28}},
+{ 237510, 3, {65,63,58}},
+{ 237528, 3, {3299,9,8}},
+{ 237552, 3, {101,49,48}},
+{ 237650, 3, {97,50,49}},
+{ 237672, 3, {3301,9,8}},
+{ 237699, 3, {77,63,49}},
+{ 237744, 3, {127,48,39}},
+{ 237780, 3, {1321,15,12}},
+{ 237816, 3, {367,27,24}},
+{ 237825, 3, {151,45,35}},
+{ 237840, 3, {991,16,15}},
+{ 237888, 3, {64,63,59}},
+{ 237900, 3, {65,61,60}},
+{ 237930, 3, {103,55,42}},
+{ 238032, 3, {72,58,57}},
+{ 238080, 3, {64,62,60}},
+{ 238095, 3, {99,65,37}},
+{ 238104, 3, {3307,9,8}},
+{ 238140, 3, {63,63,60}},
+{ 238176, 3, {827,18,16}},
+{ 238200, 3, {397,25,24}},
+{ 238224, 3, {709,21,16}},
+{ 238272, 3, {73,64,51}},
+{ 238275, 3, {353,27,25}},
+{ 238320, 3, {331,30,24}},
+{ 238350, 3, {227,35,30}},
+{ 238368, 3, {191,39,32}},
+{ 238392, 3, {77,72,43}},
+{ 238464, 3, {69,64,54}},
+{ 238500, 3, {75,60,53}},
+{ 238524, 3, {139,44,39}},
+{ 238536, 3, {3313,9,8}},
+{ 238680, 3, {68,65,54}},
+{ 238752, 3, {829,18,16}},
+{ 238860, 3, {1327,15,12}},
+{ 238875, 3, {75,65,49}},
+{ 238896, 3, {79,56,54}},
+{ 238920, 3, {181,40,33}},
+{ 238950, 3, {75,59,54}},
+{ 238968, 3, {3319,9,8}},
+{ 238980, 3, {569,21,20}},
+{ 239040, 3, {83,60,48}},
+{ 239085, 3, {69,63,55}},
+{ 239148, 3, {73,63,52}},
+{ 239200, 3, {80,65,46}},
+{ 239220, 3, {443,27,20}},
+{ 239256, 3, {3323,9,8}},
+{ 239280, 3, {997,16,15}},
+{ 239292, 3, {69,68,51}},
+{ 239328, 3, {277,32,27}},
+{ 239360, 3, {68,64,55}},
+{ 239400, 3, {70,60,57}},
+{ 239463, 3, {181,49,27}},
+{ 239512, 3, {91,56,47}},
+{ 239568, 3, {69,62,56}},
+{ 239616, 3, {72,64,52}},
+{ 239652, 3, {317,28,27}},
+{ 239688, 3, {3329,9,8}},
+{ 239700, 3, {75,68,47}},
+{ 239712, 3, {227,33,32}},
+{ 239820, 3, {571,21,20}},
+{ 239832, 3, {3331,9,8}},
+{ 239850, 3, {82,65,45}},
+{ 239904, 3, {68,63,56}},
+{ 240000, 3, {75,64,50}},
+{ 240075, 3, {97,55,45}},
+{ 240108, 3, {107,51,44}},
+{ 240120, 3, {69,60,58}},
+{ 240240, 3, {66,65,56}},
+{ 240300, 3, {89,54,50}},
+{ 240312, 3, {68,62,57}},
+{ 240345, 3, {109,49,45}},
+{ 240396, 3, {69,67,52}},
+{ 240408, 3, {72,63,53}},
+{ 240450, 3, {229,35,30}},
+{ 240516, 3, {131,51,36}},
+{ 240570, 3, {81,55,54}},
+{ 240576, 3, {179,42,32}},
+{ 240600, 3, {401,25,24}},
+{ 240660, 3, {191,36,35}},
+{ 240696, 3, {3343,9,8}},
+{ 240768, 3, {66,64,57}},
+{ 240864, 3, {193,39,32}},
+{ 240900, 3, {73,60,55}},
+{ 240960, 3, {251,32,30}},
+{ 240984, 3, {3347,9,8}},
+{ 241020, 3, {103,52,45}},
+{ 241080, 3, {82,60,49}},
+{ 241224, 3, {76,69,46}},
+{ 241280, 3, {65,64,58}},
+{ 241332, 3, {91,52,51}},
+{ 241380, 3, {149,45,36}},
+{ 241416, 3, {479,24,21}},
+{ 241472, 3, {77,56,56}},
+{ 241536, 3, {74,64,51}},
+{ 241584, 3, {719,21,16}},
+{ 241605, 3, {65,63,59}},
+{ 241632, 3, {839,18,16}},
+{ 241704, 3, {373,27,24}},
+{ 241740, 3, {79,60,51}},
+{ 241776, 3, {73,69,48}},
+{ 241800, 3, {65,62,60}},
+{ 241824, 3, {229,33,32}},
+{ 241848, 3, {3359,9,8}},
+{ 241920, 3, {64,63,60}},
+{ 241992, 3, {3361,9,8}},
+{ 242000, 3, {80,55,55}},
+{ 242136, 3, {72,59,57}},
+{ 242160, 3, {1009,16,15}},
+{ 242190, 3, {69,65,54}},
+{ 242200, 3, {173,40,35}},
+{ 242256, 3, {103,49,48}},
+{ 242325, 3, {359,27,25}},
+{ 242340, 3, {577,21,20}},
+{ 242400, 3, {101,50,48}},
+{ 242424, 3, {74,63,52}},
+{ 242460, 3, {449,27,20}},
+{ 242550, 3, {70,63,55}},
+{ 242592, 3, {76,57,56}},
+{ 242640, 3, {337,30,24}},
+{ 242712, 3, {3371,9,8}},
+{ 242775, 3, {83,65,45}},
+{ 242784, 3, {281,32,27}},
+{ 242820, 3, {71,60,57}},
+{ 242856, 3, {3373,9,8}},
+{ 242865, 3, {257,35,27}},
+{ 242880, 3, {69,64,55}},
+{ 242892, 3, {173,39,36}},
+{ 242970, 3, {89,65,42}},
+{ 243000, 3, {75,60,54}},
+{ 243012, 3, {263,33,28}},
+{ 243048, 3, {82,57,52}},
+{ 243072, 3, {211,36,32}},
+{ 243120, 3, {1013,16,15}},
+{ 243144, 3, {307,33,24}},
+{ 243180, 3, {193,36,35}},
+{ 243200, 3, {76,64,50}},
+{ 243243, 3, {81,77,39}},
+{ 243264, 3, {181,42,32}},
+{ 243270, 3, {85,54,53}},
+{ 243276, 3, {97,57,44}},
+{ 243320, 3, {79,56,55}},
+{ 243360, 3, {72,65,52}},
+{ 243432, 3, {69,63,56}},
+{ 243450, 3, {541,25,18}},
+{ 243504, 3, {89,57,48}},
+{ 243516, 3, {223,39,28}},
+{ 243540, 3, {82,55,54}},
+{ 243600, 3, {70,60,58}},
+{ 243810, 3, {81,70,43}},
+{ 243880, 3, {67,65,56}},
+{ 243936, 3, {66,66,56}},
+{ 243960, 3, {107,57,40}},
+{ 243984, 3, {69,68,52}},
+{ 244008, 3, {3389,9,8}},
+{ 244020, 3, {83,60,49}},
+{ 244080, 3, {113,48,45}},
+{ 244152, 3, {3391,9,8}},
+{ 244188, 3, {68,63,57}},
+{ 244200, 3, {74,60,55}},
+{ 244224, 3, {72,64,53}},
+{ 244260, 3, {69,60,59}},
+{ 244272, 3, {727,21,16}},
+{ 244400, 3, {80,65,47}},
+{ 244416, 3, {67,64,57}},
+{ 244440, 3, {97,56,45}},
+{ 244512, 3, {283,32,27}},
+{ 244530, 3, {66,65,57}},
+{ 244560, 3, {1019,16,15}},
+{ 244596, 3, {109,51,44}},
+{ 244608, 3, {78,56,56}},
+{ 244620, 3, {151,45,36}},
+{ 244650, 3, {233,35,30}},
+{ 244755, 3, {111,49,45}},
+{ 244920, 3, {157,40,39}},
+{ 244944, 3, {72,63,54}},
+{ 244980, 3, {1361,15,12}},
+{ 244992, 3, {66,64,58}},
+{ 245025, 3, {81,55,55}},
+{ 245040, 3, {1021,16,15}},
+{ 245088, 3, {74,69,48}},
+{ 245100, 3, {76,75,43}},
+{ 245232, 3, {131,48,39}},
+{ 245304, 3, {3407,9,8}},
+{ 245340, 3, {87,60,47}},
+{ 245376, 3, {71,64,54}},
+{ 245385, 3, {95,63,41}},
+{ 245400, 3, {409,25,24}},
+{ 245440, 3, {65,64,59}},
+{ 245448, 3, {487,24,21}},
+{ 245592, 3, {379,27,24}},
+{ 245600, 3, {307,32,25}},
+{ 245616, 3, {86,56,51}},
+{ 245664, 3, {853,18,16}},
+{ 245700, 3, {65,63,60}},
+{ 245736, 3, {3413,9,8}},
+{ 245760, 3, {64,64,60}},
+{ 245784, 3, {77,57,56}},
+{ 245856, 3, {197,39,32}},
+{ 245952, 3, {64,63,61}},
+{ 246012, 3, {83,57,52}},
+{ 246015, 3, {71,63,55}},
+{ 246048, 3, {233,33,32}},
+{ 246060, 3, {1367,15,12}},
+{ 246150, 3, {547,25,18}},
+{ 246176, 3, {157,49,32}},
+{ 246225, 3, {75,67,49}},
+{ 246240, 3, {72,60,57}},
+{ 246288, 3, {733,21,16}},
+{ 246312, 3, {311,33,24}},
+{ 246400, 3, {70,64,55}},
+{ 246468, 3, {76,69,47}},
+{ 246510, 3, {83,55,54}},
+{ 246519, 3, {91,63,43}},
+{ 246540, 3, {587,21,20}},
+{ 246600, 3, {137,45,40}},
+{ 246708, 3, {89,63,44}},
+{ 246720, 3, {257,32,30}},
+{ 246780, 3, {457,27,20}},
+{ 246816, 3, {857,18,16}},
+{ 246960, 3, {70,63,56}},
+{ 247050, 3, {75,61,54}},
+{ 247104, 3, {72,66,52}},
+{ 247140, 3, {1373,15,12}},
+{ 247170, 3, {107,55,42}},
+{ 247176, 3, {3433,9,8}},
+{ 247200, 3, {103,50,48}},
+{ 247248, 3, {101,51,48}},
+{ 247275, 3, {157,45,35}},
+{ 247296, 3, {69,64,56}},
+{ 247392, 3, {859,18,16}},
+{ 247401, 3, {77,63,51}},
+{ 247440, 3, {1031,16,15}},
+{ 247450, 3, {101,50,49}},
+{ 247455, 3, {81,65,47}},
+{ 247464, 3, {491,24,21}},
+{ 247500, 3, {75,60,55}},
+{ 247520, 3, {68,65,56}},
+{ 247572, 3, {69,69,52}},
+{ 247632, 3, {67,66,56}},
+{ 247725, 3, {367,27,25}},
+{ 247800, 3, {70,60,59}},
+{ 247860, 3, {81,60,51}},
+{ 247884, 3, {227,39,28}},
+{ 247896, 3, {313,33,24}},
+{ 247920, 3, {1033,16,15}},
+{ 247940, 3, {77,70,46}},
+{ 247968, 3, {82,56,54}},
+{ 248040, 3, {72,65,53}},
+{ 248064, 3, {68,64,57}},
+{ 248160, 3, {80,66,47}},
+{ 248184, 3, {383,27,24}},
+{ 248220, 3, {197,36,35}},
+{ 248304, 3, {739,21,16}},
+{ 248325, 3, {77,75,43}},
+{ 248328, 3, {3449,9,8}},
+{ 248352, 3, {199,39,32}},
+{ 248400, 3, {69,60,60}},
+{ 248472, 3, {68,63,58}},
+{ 248520, 3, {109,57,40}},
+{ 248535, 3, {263,35,27}},
+{ 248544, 3, {863,18,16}},
+{ 248556, 3, {269,33,28}},
+{ 248580, 3, {1381,15,12}},
+{ 248676, 3, {69,68,53}},
+{ 248800, 3, {311,32,25}},
+{ 248820, 3, {66,65,58}},
+{ 248832, 3, {72,64,54}},
+{ 248904, 3, {3457,9,8}},
+{ 248920, 3, {127,49,40}},
+{ 248940, 3, {461,27,20}},
+{ 248976, 3, {78,57,56}},
+{ 249060, 3, {593,21,20}},
+{ 249075, 3, {81,75,41}},
+{ 249165, 3, {113,49,45}},
+{ 249192, 3, {3461,9,8}},
+{ 249210, 3, {71,65,54}},
+{ 249216, 3, {66,64,59}},
+{ 249336, 3, {3463,9,8}},
+{ 249360, 3, {1039,16,15}},
+{ 249480, 3, {66,63,60}},
+{ 249600, 3, {65,64,60}},
+{ 249624, 3, {3467,9,8}},
+{ 249648, 3, {743,21,16}},
+{ 249660, 3, {73,60,57}},
+{ 249704, 3, {91,56,49}},
+{ 249760, 3, {223,35,32}},
+{ 249768, 3, {3469,9,8}},
+{ 249795, 3, {65,63,61}},
+{ 249840, 3, {347,30,24}},
+{ 249920, 3, {71,64,55}},
+{ 249975, 3, {101,55,45}},
+{ 249984, 3, {64,63,62}},
+{ 250020, 3, {463,27,20}},
+{ 250068, 3, {229,39,28}},
+{ 250096, 3, {77,58,56}},
+{ 250200, 3, {139,45,40}},
+{ 250236, 3, {331,28,27}},
+{ 250272, 3, {79,66,48}},
+{ 250320, 3, {149,42,40}},
+{ 250344, 3, {72,61,57}},
+{ 250380, 3, {107,52,45}},
+{ 250400, 3, {313,32,25}},
+{ 250404, 3, {271,33,28}},
+{ 250488, 3, {71,63,56}},
+{ 250600, 3, {179,40,35}},
+{ 250650, 3, {557,25,18}},
+{ 250668, 3, {211,36,33}},
+{ 250740, 3, {199,36,35}},
+{ 250800, 3, {76,60,55}},
+{ 250880, 3, {70,64,56}},
+{ 250920, 3, {82,60,51}},
+{ 250950, 3, {239,35,30}},
+{ 250965, 3, {99,65,39}},
+{ 250992, 3, {83,56,54}},
+{ 251064, 3, {317,33,24}},
+{ 251100, 3, {75,62,54}},
+{ 251125, 3, {125,49,41}},
+{ 251160, 3, {69,65,56}},
+{ 251280, 3, {349,30,24}},
+{ 251316, 3, {179,39,36}},
+{ 251328, 3, {68,66,56}},
+{ 251352, 3, {3491,9,8}},
+{ 251400, 3, {419,25,24}},
+{ 251424, 3, {97,54,48}},
+{ 251460, 3, {127,45,44}},
+{ 251496, 3, {499,24,21}},
+{ 251532, 3, {137,51,36}},
+{ 251580, 3, {599,21,20}},
+{ 251664, 3, {107,49,48}},
+{ 251685, 3, {85,63,47}},
+{ 251712, 3, {69,64,57}},
+{ 251760, 3, {1049,16,15}},
+{ 251775, 3, {373,27,25}},
+{ 251790, 3, {109,55,42}},
+{ 251820, 3, {1399,15,12}},
+{ 251856, 3, {72,66,53}},
+{ 251928, 3, {3499,9,8}},
+{ 251940, 3, {68,65,57}},
+{ 252000, 3, {70,60,60}},
+{ 252072, 3, {389,27,24}},
+{ 252120, 3, {191,40,33}},
+{ 252144, 3, {103,51,48}},
+{ 252168, 3, {79,57,56}},
+{ 252180, 3, {467,27,20}},
+{ 252240, 3, {1051,16,15}},
+{ 252252, 3, {77,63,52}},
+{ 252288, 3, {73,64,54}},
+{ 252336, 3, {751,21,16}},
+{ 252350, 3, {103,50,49}},
+{ 252384, 3, {239,33,32}},
+{ 252420, 3, {601,21,20}},
+{ 252480, 3, {263,32,30}},
+{ 252525, 3, {91,75,37}},
+{ 252540, 3, {69,61,60}},
+{ 252560, 3, {82,56,55}},
+{ 252576, 3, {877,18,16}},
+{ 252600, 3, {421,25,24}},
+{ 252672, 3, {84,64,47}},
+{ 252693, 3, {191,49,27}},
+{ 252720, 3, {72,65,54}},
+{ 252756, 3, {68,63,59}},
+{ 252792, 3, {3511,9,8}},
+{ 252800, 3, {79,64,50}},
+{ 252840, 3, {86,60,49}},
+{ 252945, 3, {73,63,55}},
+{ 253050, 3, {241,35,30}},
+{ 253080, 3, {74,60,57}},
+{ 253110, 3, {66,65,59}},
+{ 253152, 3, {293,32,27}},
+{ 253224, 3, {3517,9,8}},
+{ 253260, 3, {67,63,60}},
+{ 253308, 3, {101,57,44}},
+{ 253330, 3, {77,70,47}},
+{ 253344, 3, {78,58,56}},
+{ 253350, 3, {563,25,18}},
+{ 253368, 3, {69,68,54}},
+{ 253400, 3, {181,40,35}},
+{ 253440, 3, {66,64,60}},
+{ 253500, 3, {65,65,60}},
+{ 253512, 3, {503,24,21}},
+{ 253572, 3, {113,51,44}},
+{ 253575, 3, {75,69,49}},
+{ 253600, 3, {317,32,25}},
+{ 253620, 3, {1409,15,12}},
+{ 253680, 3, {151,42,40}},
+{ 253728, 3, {881,18,16}},
+{ 253760, 3, {65,64,61}},
+{ 253764, 3, {76,63,53}},
+{ 253800, 3, {75,72,47}},
+{ 253890, 3, {65,63,62}},
+{ 253920, 3, {80,69,46}},
+{ 253935, 3, {81,57,55}},
+{ 253944, 3, {3527,9,8}},
+{ 253980, 3, {83,60,51}},
+{ 254016, 3, {64,63,63}},
+{ 254088, 3, {3529,9,8}},
+{ 254124, 3, {181,39,36}},
+{ 254160, 3, {353,30,24}},
+{ 254184, 3, {89,56,51}},
+{ 254205, 3, {269,35,27}},
+{ 254240, 3, {227,35,32}},
+{ 254280, 3, {163,40,39}},
+{ 254304, 3, {883,18,16}},
+{ 254340, 3, {157,45,36}},
+{ 254352, 3, {757,21,16}},
+{ 254376, 3, {3533,9,8}},
+{ 254400, 3, {75,64,53}},
+{ 254408, 3, {77,59,56}},
+{ 254436, 3, {233,39,28}},
+{ 254448, 3, {72,62,57}},
+{ 254475, 3, {87,65,45}},
+{ 254496, 3, {241,33,32}},
+{ 254520, 3, {101,56,45}},
+{ 254640, 3, {1061,16,15}},
+{ 254745, 3, {85,81,37}},
+{ 254748, 3, {71,69,52}},
+{ 254760, 3, {193,40,33}},
+{ 254772, 3, {337,28,27}},
+{ 254800, 3, {70,65,56}},
+{ 254808, 3, {3539,9,8}},
+{ 254904, 3, {86,57,52}},
+{ 254925, 3, {103,55,45}},
+{ 254940, 3, {607,21,20}},
+{ 254952, 3, {3541,9,8}},
+{ 255000, 3, {75,68,50}},
+{ 255024, 3, {69,66,56}},
+{ 255060, 3, {109,52,45}},
+{ 255120, 3, {1063,16,15}},
+{ 255150, 3, {75,63,54}},
+{ 255200, 3, {80,58,55}},
+{ 255204, 3, {139,51,36}},
+{ 255339, 3, {193,49,27}},
+{ 255360, 3, {70,64,57}},
+{ 255384, 3, {3547,9,8}},
+{ 255420, 3, {86,55,54}},
+{ 255456, 3, {887,18,16}},
+{ 255528, 3, {78,63,52}},
+{ 255584, 3, {163,49,32}},
+{ 255640, 3, {83,56,55}},
+{ 255684, 3, {149,44,39}},
+{ 255696, 3, {761,21,16}},
+{ 255717, 3, {81,77,41}},
+{ 255744, 3, {74,64,54}},
+{ 255816, 3, {68,66,57}},
+{ 255825, 3, {379,27,25}},
+{ 255948, 3, {277,33,28}},
+{ 256000, 3, {80,64,50}},
+{ 256032, 3, {127,48,42}},
+{ 256050, 3, {569,25,18}},
+{ 256080, 3, {97,55,48}},
+{ 256095, 3, {271,35,27}},
+{ 256104, 3, {3557,9,8}},
+{ 256128, 3, {69,64,58}},
+{ 256140, 3, {1423,15,12}},
+{ 256200, 3, {70,61,60}},
+{ 256230, 3, {73,65,54}},
+{ 256248, 3, {3559,9,8}},
+{ 256256, 3, {77,64,52}},
+{ 256320, 3, {89,60,48}},
+{ 256368, 3, {109,49,48}},
+{ 256410, 3, {74,63,55}},
+{ 256464, 3, {137,48,39}},
+{ 256480, 3, {229,35,32}},
+{ 256500, 3, {75,60,57}},
+{ 256536, 3, {509,24,21}},
+{ 256560, 3, {1069,16,15}},
+{ 256608, 3, {72,66,54}},
+{ 256662, 3, {97,54,49}},
+{ 256680, 3, {69,62,60}},
+{ 256704, 3, {191,42,32}},
+{ 256725, 3, {163,45,35}},
+{ 256760, 3, {131,49,40}},
+{ 256800, 3, {107,50,48}},
+{ 256860, 3, {1427,15,12}},
+{ 256896, 3, {223,36,32}},
+{ 256950, 3, {571,25,18}},
+{ 256956, 3, {76,69,49}},
+{ 256960, 3, {73,64,55}},
+{ 257040, 3, {68,63,60}},
+{ 257103, 3, {77,63,53}},
+{ 257112, 3, {3571,9,8}},
+{ 257220, 3, {1429,15,12}},
+{ 257244, 3, {97,52,51}},
+{ 257250, 3, {75,70,49}},
+{ 257256, 3, {397,27,24}},
+{ 257280, 3, {67,64,60}},
+{ 257355, 3, {95,63,43}},
+{ 257400, 3, {66,65,60}},
+{ 257460, 3, {613,21,20}},
+{ 257544, 3, {73,63,56}},
+{ 257580, 3, {81,60,53}},
+{ 257600, 3, {80,70,46}},
+{ 257640, 3, {113,57,40}},
+{ 257664, 3, {66,64,61}},
+{ 257712, 3, {78,59,56}},
+{ 257832, 3, {3581,9,8}},
+{ 257856, 3, {79,64,51}},
+{ 257920, 3, {65,64,62}},
+{ 257940, 3, {1433,15,12}},
+{ 257976, 3, {3583,9,8}},
+{ 257985, 3, {65,63,63}},
+{ 258048, 3, {64,64,63}},
+{ 258060, 3, {69,68,55}},
+{ 258240, 3, {269,32,30}},
+{ 258324, 3, {103,57,44}},
+{ 258336, 3, {72,69,52}},
+{ 258384, 3, {769,21,16}},
+{ 258390, 3, {81,58,55}},
+{ 258440, 3, {71,65,56}},
+{ 258480, 3, {359,30,24}},
+{ 258525, 3, {383,27,25}},
+{ 258552, 3, {72,63,57}},
+{ 258600, 3, {431,25,24}},
+{ 258660, 3, {479,27,20}},
+{ 258696, 3, {3593,9,8}},
+{ 258720, 3, {70,66,56}},
+{ 258804, 3, {79,63,52}},
+{ 258876, 3, {81,68,47}},
+{ 258888, 3, {69,67,56}},
+{ 259008, 3, {71,64,57}},
+{ 259020, 3, {1439,15,12}},
+{ 259080, 3, {127,51,40}},
+{ 259116, 3, {151,44,39}},
+{ 259140, 3, {617,21,20}},
+{ 259380, 3, {131,45,44}},
+{ 259392, 3, {193,42,32}},
+{ 259440, 3, {80,69,47}},
+{ 259560, 3, {103,56,45}},
+{ 259584, 3, {78,64,52}},
+{ 259600, 3, {80,59,55}},
+{ 259644, 3, {281,33,28}},
+{ 259650, 3, {577,25,18}},
+{ 259692, 3, {68,67,57}},
+{ 259704, 3, {3607,9,8}},
+{ 259728, 3, {773,21,16}},
+{ 259740, 3, {74,65,54}},
+{ 259776, 3, {82,66,48}},
+{ 259800, 3, {433,25,24}},
+{ 259840, 3, {70,64,58}},
+{ 259848, 3, {401,27,24}},
+{ 259875, 3, {75,63,55}},
+{ 259920, 3, {76,60,57}},
+{ 259980, 3, {619,21,20}},
+{ 260000, 3, {80,65,50}},
+{ 260040, 3, {197,40,33}},
+{ 260064, 3, {86,56,54}},
+{ 260100, 3, {75,68,51}},
+{ 260136, 3, {3613,9,8}},
+{ 260160, 3, {271,32,30}},
+{ 260208, 3, {139,48,39}},
+{ 260325, 3, {89,65,45}},
+{ 260400, 3, {70,62,60}},
+{ 260424, 3, {3617,9,8}},
+{ 260460, 3, {1447,15,12}},
+{ 260480, 3, {74,64,55}},
+{ 260520, 3, {167,40,39}},
+{ 260544, 3, {69,64,59}},
+{ 260568, 3, {77,72,47}},
+{ 260631, 3, {197,49,27}},
+{ 260700, 3, {79,60,55}},
+{ 260820, 3, {69,63,60}},
+{ 260856, 3, {3623,9,8}},
+{ 260880, 3, {1087,16,15}},
+{ 260925, 3, {75,71,49}},
+{ 260960, 3, {233,35,32}},
+{ 260988, 3, {239,39,28}},
+{ 261000, 3, {75,60,58}},
+{ 261030, 3, {113,55,42}},
+{ 261072, 3, {74,63,56}},
+{ 261120, 3, {68,64,60}},
+{ 261180, 3, {1451,15,12}},
+{ 261184, 3, {77,64,53}},
+{ 261216, 3, {907,18,16}},
+{ 261225, 3, {81,75,43}},
+{ 261300, 3, {67,65,60}},
+{ 261324, 3, {68,63,61}},
+{ 261432, 3, {3631,9,8}},
+{ 261492, 3, {283,33,28}},
+{ 261504, 3, {227,36,32}},
+{ 261540, 3, {1453,15,12}},
+{ 261600, 3, {109,50,48}},
+{ 261630, 3, {85,57,54}},
+{ 261648, 3, {79,69,48}},
+{ 261660, 3, {89,60,49}},
+{ 261690, 3, {66,65,61}},
+{ 261696, 3, {87,64,47}},
+{ 261744, 3, {82,57,56}},
+{ 261765, 3, {277,35,27}},
+{ 261792, 3, {101,54,48}},
+{ 261840, 3, {1091,16,15}},
+{ 261856, 3, {167,49,32}},
+{ 261864, 3, {3637,9,8}},
+{ 261888, 3, {66,64,62}},
+{ 261900, 3, {97,54,50}},
+{ 261924, 3, {73,69,52}},
+{ 261936, 3, {107,51,48}},
+{ 262080, 3, {65,64,63}},
+{ 262150, 3, {107,50,49}},
+{ 262152, 3, {331,33,24}},
+{ 262200, 3, {76,69,50}},
+{ 262296, 3, {3643,9,8}},
+{ 262320, 3, {1093,16,15}},
+{ 262332, 3, {347,28,27}},
+{ 262368, 3, {911,18,16}},
+{ 262395, 3, {85,63,49}},
+{ 262400, 3, {82,64,50}},
+{ 262416, 3, {71,66,56}},
+{ 262440, 3, {81,60,54}},
+{ 262575, 3, {389,27,25}},
+{ 262584, 3, {521,24,21}},
+{ 262620, 3, {1459,15,12}},
+{ 262656, 3, {72,64,57}},
+{ 262680, 3, {199,40,33}},
+{ 262752, 3, {69,68,56}},
+{ 262845, 3, {81,59,55}},
+{ 262944, 3, {83,66,48}},
+{ 262980, 3, {487,27,20}},
+{ 263025, 3, {167,45,35}},
+{ 263032, 3, {77,61,56}},
+{ 263088, 3, {72,63,58}},
+{ 263160, 3, {86,60,51}},
+{ 263172, 3, {241,39,28}},
+{ 263200, 3, {80,70,47}},
+{ 263250, 3, {75,65,54}},
+{ 263277, 3, {199,49,27}},
+{ 263280, 3, {1097,16,15}},
+{ 263304, 3, {72,69,53}},
+{ 263328, 3, {211,39,32}},
+{ 263375, 3, {125,49,43}},
+{ 263400, 3, {439,25,24}},
+{ 263448, 3, {3659,9,8}},
+{ 263550, 3, {251,35,30}},
+{ 263568, 3, {68,68,57}},
+{ 263592, 3, {523,24,21}},
+{ 263670, 3, {85,66,47}},
+{ 263760, 3, {157,42,40}},
+{ 263796, 3, {89,57,52}},
+{ 263808, 3, {229,36,32}},
+{ 263835, 3, {99,65,41}},
+{ 263844, 3, {349,28,27}},
+{ 263952, 3, {78,72,47}},
+{ 264000, 3, {75,64,55}},
+{ 264060, 3, {163,45,36}},
+{ 264096, 3, {131,48,42}},
+{ 264110, 3, {77,70,49}},
+{ 264150, 3, {587,25,18}},
+{ 264240, 3, {367,30,24}},
+{ 264312, 3, {3671,9,8}},
+{ 264320, 3, {70,64,59}},
+{ 264330, 3, {89,55,54}},
+{ 264420, 3, {113,52,45}},
+{ 264432, 3, {787,21,16}},
+{ 264456, 3, {3673,9,8}},
+{ 264576, 3, {78,64,53}},
+{ 264600, 3, {70,63,60}},
+{ 264672, 3, {919,18,16}},
+{ 264720, 3, {1103,16,15}},
+{ 264744, 3, {3677,9,8}},
+{ 264768, 3, {197,42,32}},
+{ 264780, 3, {1471,15,12}},
+{ 264800, 3, {331,32,25}},
+{ 264810, 3, {97,65,42}},
+{ 264825, 3, {107,55,45}},
+{ 264880, 3, {86,56,55}},
+{ 264924, 3, {223,36,33}},
+{ 264936, 3, {83,57,56}},
+{ 264960, 3, {69,64,60}},
+{ 264992, 3, {91,56,52}},
+{ 265020, 3, {631,21,20}},
+{ 265032, 3, {409,27,24}},
+{ 265056, 3, {251,33,32}},
+{ 265140, 3, {491,27,20}},
+{ 265200, 3, {68,65,60}},
+{ 265248, 3, {307,32,27}},
+{ 265392, 3, {97,57,48}},
+{ 265500, 3, {75,60,59}},
+{ 265512, 3, {74,69,52}},
+{ 265545, 3, {281,35,27}},
+{ 265600, 3, {83,64,50}},
+{ 265608, 3, {68,63,62}},
+{ 265720, 3, {73,65,56}},
+{ 265752, 3, {3691,9,8}},
+{ 265776, 3, {113,49,48}},
+{ 265800, 3, {443,25,24}},
+{ 265860, 3, {211,36,35}},
+{ 265920, 3, {277,32,30}},
+{ 265980, 3, {66,65,62}},
+{ 266112, 3, {66,64,63}},
+{ 266160, 3, {1109,16,15}},
+{ 266175, 3, {65,65,63}},
+{ 266184, 3, {3697,9,8}},
+{ 266220, 3, {85,58,54}},
+{ 266240, 3, {65,64,64}},
+{ 266304, 3, {73,64,57}},
+{ 266448, 3, {78,61,56}},
+{ 266472, 3, {3701,9,8}},
+{ 266490, 3, {81,70,47}},
+{ 266580, 3, {1481,15,12}},
+{ 266616, 3, {69,69,56}},
+{ 266640, 3, {101,55,48}},
+{ 266760, 3, {72,65,57}},
+{ 266805, 3, {77,63,55}},
+{ 266832, 3, {109,51,48}},
+{ 266850, 3, {593,25,18}},
+{ 266868, 3, {353,28,27}},
+{ 266904, 3, {337,33,24}},
+{ 266940, 3, {1483,15,12}},
+{ 266976, 3, {103,54,48}},
+{ 267048, 3, {3709,9,8}},
+{ 267050, 3, {109,50,49}},
+{ 267120, 3, {72,70,53}},
+{ 267240, 3, {131,51,40}},
+{ 267246, 3, {101,54,49}},
+{ 267264, 3, {72,64,58}},
+{ 267300, 3, {75,66,54}},
+{ 267344, 3, {77,62,56}},
+{ 267400, 3, {191,40,35}},
+{ 267435, 3, {283,35,27}},
+{ 267444, 3, {69,68,57}},
+{ 267456, 3, {199,42,32}},
+{ 267520, 3, {76,64,55}},
+{ 267552, 3, {929,18,16}},
+{ 267624, 3, {72,63,59}},
+{ 267648, 3, {82,64,51}},
+{ 267660, 3, {1487,15,12}},
+{ 267680, 3, {239,35,32}},
+{ 267768, 3, {3719,9,8}},
+{ 267792, 3, {797,21,16}},
+{ 267852, 3, {101,52,51}},
+{ 267900, 3, {76,75,47}},
+{ 267975, 3, {397,27,25}},
+{ 268020, 3, {1489,15,12}},
+{ 268080, 3, {1117,16,15}},
+{ 268128, 3, {76,63,56}},
+{ 268164, 3, {191,39,36}},
+{ 268191, 3, {81,77,43}},
+{ 268200, 3, {149,45,40}},
+{ 268272, 3, {72,69,54}},
+{ 268275, 3, {75,73,49}},
+{ 268344, 3, {3727,9,8}},
+{ 268356, 3, {107,57,44}},
+{ 268380, 3, {71,63,60}},
+{ 268400, 3, {80,61,55}},
+{ 268416, 3, {233,36,32}},
+{ 268515, 3, {81,65,51}},
+{ 268520, 3, {137,49,40}},
+{ 268560, 3, {373,30,24}},
+{ 268632, 3, {82,63,52}},
+{ 268704, 3, {311,32,27}},
+{ 268740, 3, {1493,15,12}},
+{ 268776, 3, {3733,9,8}},
+{ 268800, 3, {70,64,60}},
+{ 268840, 3, {88,65,47}},
+{ 268884, 3, {97,63,44}},
+{ 269100, 3, {69,65,60}},
+{ 269136, 3, {89,56,54}},
+{ 269208, 3, {3739,9,8}},
+{ 269220, 3, {641,21,20}},
+{ 269360, 3, {74,65,56}},
+{ 269376, 3, {69,64,61}},
+{ 269400, 3, {449,25,24}},
+{ 269412, 3, {157,44,39}},
+{ 269451, 3, {91,63,47}},
+{ 269460, 3, {499,27,20}},
+{ 269520, 3, {1123,16,15}},
+{ 269550, 3, {599,25,18}},
+{ 269600, 3, {337,32,25}},
+{ 269640, 3, {107,56,45}},
+{ 269676, 3, {227,36,33}},
+{ 269724, 3, {91,57,52}},
+{ 269760, 3, {281,32,30}},
+{ 269775, 3, {109,55,45}},
+{ 269808, 3, {73,66,56}},
+{ 269820, 3, {1499,15,12}},
+{ 269850, 3, {257,35,30}},
+{ 269856, 3, {937,18,16}},
+{ 269880, 3, {173,40,39}},
+{ 269892, 3, {68,63,63}},
+{ 269920, 3, {241,35,32}},
+{ 269952, 3, {74,64,57}},
+{ 270000, 3, {75,60,60}},
+{ 270060, 3, {643,21,20}},
+{ 270088, 3, {91,56,53}},
+{ 270144, 3, {67,64,63}},
+{ 270180, 3, {79,60,57}},
+{ 270200, 3, {193,40,35}},
+{ 270270, 3, {66,65,63}},
+{ 270300, 3, {75,68,53}},
+{ 270336, 3, {66,64,64}},
+{ 270400, 3, {65,65,64}},
+{ 270432, 3, {313,32,27}},
+{ 270450, 3, {601,25,18}},
+{ 270480, 3, {70,69,56}},
+{ 270540, 3, {167,45,36}},
+{ 270600, 3, {82,60,55}},
+{ 270675, 3, {401,27,25}},
+{ 270732, 3, {293,33,28}},
+{ 270792, 3, {3761,9,8}},
+{ 270810, 3, {85,59,54}},
+{ 270816, 3, {78,62,56}},
+{ 270864, 3, {72,66,57}},
+{ 270912, 3, {83,64,51}},
+{ 270960, 3, {1129,16,15}},
+{ 270972, 3, {193,39,36}},
+{ 271008, 3, {941,18,16}},
+{ 271040, 3, {77,64,55}},
+{ 271200, 3, {113,50,48}},
+{ 271224, 3, {3767,9,8}},
+{ 271260, 3, {137,45,44}},
+{ 271264, 3, {173,49,32}},
+{ 271320, 3, {70,68,57}},
+{ 271350, 3, {75,67,54}},
+{ 271368, 3, {3769,9,8}},
+{ 271392, 3, {257,33,32}},
+{ 271404, 3, {359,28,27}},
+{ 271425, 3, {77,75,47}},
+{ 271440, 3, {72,65,58}},
+{ 271512, 3, {419,27,24}},
+{ 271524, 3, {121,51,44}},
+{ 271584, 3, {82,69,48}},
+{ 271620, 3, {503,27,20}},
+{ 271656, 3, {77,63,56}},
+{ 271680, 3, {283,32,30}},
+{ 271740, 3, {647,21,20}},
+{ 271755, 3, {81,61,55}},
+{ 271800, 3, {151,45,40}},
+{ 271824, 3, {809,21,16}},
+{ 271872, 3, {72,64,59}},
+{ 271908, 3, {83,63,52}},
+{ 271920, 3, {103,55,48}},
+{ 271950, 3, {75,74,49}},
+{ 271980, 3, {1511,15,12}},
+{ 272025, 3, {93,65,45}},
+{ 272052, 3, {229,36,33}},
+{ 272088, 3, {3779,9,8}},
+{ 272136, 3, {69,68,58}},
+{ 272160, 3, {72,63,60}},
+{ 272340, 3, {89,60,51}},
+{ 272412, 3, {84,69,47}},
+{ 272440, 3, {139,49,40}},
+{ 272448, 3, {86,66,48}},
+{ 272475, 3, {173,45,35}},
+{ 272496, 3, {811,21,16}},
+{ 272538, 3, {103,54,49}},
+{ 272640, 3, {71,64,60}},
+{ 272664, 3, {541,24,21}},
+{ 272688, 3, {76,69,52}},
+{ 272700, 3, {101,54,50}},
+{ 272727, 3, {91,81,37}},
+{ 272736, 3, {947,18,16}},
+{ 272800, 3, {80,62,55}},
+{ 272808, 3, {421,27,24}},
+{ 272880, 3, {379,30,24}},
+{ 272916, 3, {76,63,57}},
+{ 273000, 3, {70,65,60}},
+{ 273024, 3, {79,64,54}},
+{ 273096, 3, {3793,9,8}},
+{ 273105, 3, {85,63,51}},
+{ 273150, 3, {607,25,18}},
+{ 273156, 3, {103,52,51}},
+{ 273240, 3, {69,66,60}},
+{ 273280, 3, {70,64,61}},
+{ 273372, 3, {109,57,44}},
+{ 273375, 3, {81,75,45}},
+{ 273384, 3, {3797,9,8}},
+{ 273504, 3, {74,66,56}},
+{ 273564, 3, {149,51,36}},
+{ 273735, 3, {79,63,55}},
+{ 273780, 3, {78,65,54}},
+{ 273792, 3, {69,64,62}},
+{ 273816, 3, {3803,9,8}},
+{ 273840, 3, {163,42,40}},
+{ 273888, 3, {317,32,27}},
+{ 273900, 3, {83,60,55}},
+{ 274092, 3, {251,39,28}},
+{ 274104, 3, {81,72,47}},
+{ 274120, 3, {89,56,55}},
+{ 274140, 3, {1523,15,12}},
+{ 274176, 3, {68,64,63}},
+{ 274200, 3, {457,25,24}},
+{ 274260, 3, {653,21,20}},
+{ 274320, 3, {127,48,45}},
+{ 274344, 3, {71,69,56}},
+{ 274365, 3, {67,65,63}},
+{ 274464, 3, {953,18,16}},
+{ 274500, 3, {75,61,60}},
+{ 274512, 3, {86,57,56}},
+{ 274560, 3, {66,65,64}},
+{ 274680, 3, {109,56,45}},
+{ 274824, 3, {347,33,24}},
+{ 274860, 3, {509,27,20}},
+{ 274890, 3, {77,70,51}},
+{ 274896, 3, {83,69,48}},
+{ 274968, 3, {72,67,57}},
+{ 275112, 3, {3821,9,8}},
+{ 275184, 3, {78,63,56}},
+{ 275196, 3, {71,68,57}},
+{ 275200, 3, {86,64,50}},
+{ 275220, 3, {139,45,44}},
+{ 275256, 3, {3823,9,8}},
+{ 275328, 3, {239,36,32}},
+{ 275400, 3, {75,68,54}},
+{ 275580, 3, {1531,15,12}},
+{ 275600, 3, {80,65,53}},
+{ 275616, 3, {72,66,58}},
+{ 275625, 3, {75,75,49}},
+{ 275688, 3, {547,24,21}},
+{ 275730, 3, {101,65,42}},
+{ 275760, 3, {383,30,24}},
+{ 275800, 3, {197,40,35}},
+{ 275850, 3, {613,25,18}},
+{ 275856, 3, {821,21,16}},
+{ 275940, 3, {73,63,60}},
+{ 275968, 3, {77,64,56}},
+{ 275976, 3, {3833,9,8}},
+{ 276000, 3, {80,69,50}},
+{ 276075, 3, {409,27,25}},
+{ 276120, 3, {72,65,59}},
+{ 276150, 3, {263,35,30}},
+{ 276192, 3, {137,48,42}},
+{ 276210, 3, {81,62,55}},
+{ 276240, 3, {1151,16,15}},
+{ 276276, 3, {77,69,52}},
+{ 276336, 3, {101,57,48}},
+{ 276408, 3, {349,33,24}},
+{ 276480, 3, {72,64,60}},
+{ 276507, 3, {77,63,57}},
+{ 276528, 3, {823,21,16}},
+{ 276588, 3, {197,39,36}},
+{ 276600, 3, {461,25,24}},
+{ 276624, 3, {113,51,48}},
+{ 276640, 3, {76,65,56}},
+{ 276660, 3, {87,60,53}},
+{ 276696, 3, {72,63,61}},
+{ 276705, 3, {99,65,43}},
+{ 276720, 3, {1153,16,15}},
+{ 276780, 3, {659,21,20}},
+{ 276804, 3, {233,36,33}},
+{ 276828, 3, {69,68,59}},
+{ 276850, 3, {113,50,49}},
+{ 276885, 3, {293,35,27}},
+{ 276900, 3, {71,65,60}},
+{ 276984, 3, {3847,9,8}},
+{ 277020, 3, {81,60,57}},
+{ 277032, 3, {97,56,51}},
+{ 277200, 3, {70,66,60}},
+{ 277236, 3, {151,51,36}},
+{ 277248, 3, {76,64,57}},
+{ 277272, 3, {3851,9,8}},
+{ 277290, 3, {79,65,54}},
+{ 277344, 3, {107,54,48}},
+{ 277380, 3, {69,67,60}},
+{ 277416, 3, {3853,9,8}},
+{ 277452, 3, {367,28,27}},
+{ 277600, 3, {347,32,25}},
+{ 277620, 3, {661,21,20}},
+{ 277632, 3, {241,36,32}},
+{ 277650, 3, {617,25,18}},
+{ 277704, 3, {76,63,58}},
+{ 277728, 3, {263,33,32}},
+{ 277740, 3, {1543,15,12}},
+{ 277760, 3, {70,64,62}},
+{ 277800, 3, {463,25,24}},
+{ 277872, 3, {827,21,16}},
+{ 277932, 3, {76,69,53}},
+{ 278052, 3, {87,68,47}},
+{ 278080, 3, {79,64,55}},
+{ 278100, 3, {103,54,50}},
+{ 278136, 3, {3863,9,8}},
+{ 278208, 3, {69,64,63}},
+{ 278304, 3, {223,39,32}},
+{ 278400, 3, {75,64,58}},
+{ 278460, 3, {68,65,63}},
+{ 278496, 3, {967,18,16}},
+{ 278520, 3, {211,40,33}},
+{ 278544, 3, {829,21,16}},
+{ 278550, 3, {619,25,18}},
+{ 278600, 3, {199,40,35}},
+{ 278712, 3, {79,63,56}},
+{ 278720, 3, {67,65,64}},
+{ 278784, 3, {66,66,64}},
+{ 278820, 3, {1549,15,12}},
+{ 278850, 3, {66,65,65}},
+{ 278928, 3, {149,48,39}},
+{ 279000, 3, {75,62,60}},
+{ 279045, 3, {81,65,53}},
+{ 279072, 3, {72,68,57}},
+{ 279120, 3, {1163,16,15}},
+{ 279125, 3, {125,77,29}},
+{ 279144, 3, {3877,9,8}},
+{ 279153, 3, {211,49,27}},
+{ 279180, 3, {94,55,54}},
+{ 279200, 3, {349,32,25}},
+{ 279240, 3, {179,40,39}},
+{ 279288, 3, {431,27,24}},
+{ 279312, 3, {88,69,46}},
+{ 279360, 3, {97,60,48}},
+{ 279396, 3, {199,39,36}},
+{ 279432, 3, {3881,9,8}},
+{ 279450, 3, {75,69,54}},
+{ 279480, 3, {137,51,40}},
+{ 279540, 3, {1553,15,12}},
+{ 279552, 3, {78,64,56}},
+{ 279576, 3, {353,33,24}},
+{ 279648, 3, {971,18,16}},
+{ 279675, 3, {113,55,45}},
+{ 279708, 3, {163,44,39}},
+{ 279720, 3, {74,63,60}},
+{ 279825, 3, {91,75,41}},
+{ 279840, 3, {80,66,53}},
+{ 279864, 3, {78,69,52}},
+{ 279972, 3, {101,63,44}},
+{ 279990, 3, {85,61,54}},
+{ 280000, 3, {80,70,50}},
+{ 280008, 3, {3889,9,8}},
+{ 280035, 3, {127,49,45}},
+{ 280080, 3, {389,30,24}},
+{ 280200, 3, {467,25,24}},
+{ 280224, 3, {139,48,42}},
+{ 280260, 3, {173,45,36}},
+{ 280280, 3, {77,65,56}},
+{ 280320, 3, {73,64,60}},
+{ 280368, 3, {72,66,59}},
+{ 280440, 3, {82,60,57}},
+{ 280500, 3, {75,68,55}},
+{ 280560, 3, {167,42,40}},
+{ 280584, 3, {433,27,24}},
+{ 280620, 3, {1559,15,12}},
+{ 280644, 3, {257,39,28}},
+{ 280665, 3, {81,63,55}},
+{ 280672, 3, {179,49,32}},
+{ 280704, 3, {86,64,51}},
+{ 280728, 3, {557,24,21}},
+{ 280800, 3, {72,65,60}},
+{ 280896, 3, {77,64,57}},
+{ 280908, 3, {81,68,51}},
+{ 280917, 3, {91,63,49}},
+{ 280980, 3, {223,36,35}},
+{ 281040, 3, {1171,16,15}},
+{ 281088, 3, {72,64,61}},
+{ 281120, 3, {251,35,32}},
+{ 281190, 3, {103,65,42}},
+{ 281232, 3, {72,63,62}},
+{ 281280, 3, {293,32,30}},
+{ 281295, 3, {95,63,47}},
+{ 281304, 3, {3907,9,8}},
+{ 281340, 3, {521,27,20}},
+{ 281358, 3, {77,63,58}},
+{ 281376, 3, {977,18,16}},
+{ 281400, 3, {70,67,60}},
+{ 281520, 3, {69,68,60}},
+{ 281592, 3, {3911,9,8}},
+{ 281600, 3, {80,64,55}},
+{ 281736, 3, {86,63,52}},
+{ 281750, 3, {115,50,49}},
+{ 281808, 3, {103,57,48}},
+{ 281880, 3, {81,60,58}},
+{ 281904, 3, {839,21,16}},
+{ 281925, 3, {179,45,35}},
+{ 281952, 3, {89,66,48}},
+{ 281988, 3, {373,28,27}},
+{ 282000, 3, {80,75,47}},
+{ 282024, 3, {3917,9,8}},
+{ 282060, 3, {1567,15,12}},
+{ 282072, 3, {73,69,56}},
+{ 282168, 3, {3919,9,8}},
+{ 282240, 3, {70,64,63}},
+{ 282285, 3, {85,81,41}},
+{ 282360, 3, {181,40,39}},
+{ 282400, 3, {353,32,25}},
+{ 282420, 3, {523,27,20}},
+{ 282450, 3, {269,35,30}},
+{ 282456, 3, {3923,9,8}},
+{ 282480, 3, {107,55,48}},
+{ 282492, 3, {76,63,59}},
+{ 282528, 3, {109,54,48}},
+{ 282555, 3, {69,65,63}},
+{ 282600, 3, {157,45,40}},
+{ 282624, 3, {69,64,64}},
+{ 282660, 3, {673,21,20}},
+{ 282672, 3, {151,48,39}},
+{ 282744, 3, {68,66,63}},
+{ 282780, 3, {1571,15,12}},
+{ 282825, 3, {419,27,25}},
+{ 282880, 3, {68,65,64}},
+{ 282888, 3, {3929,9,8}},
+{ 282948, 3, {73,68,57}},
+{ 282960, 3, {131,48,45}},
+{ 282975, 3, {77,75,49}},
+{ 283008, 3, {67,66,64}},
+{ 283032, 3, {3931,9,8}},
+{ 283104, 3, {983,18,16}},
+{ 283122, 3, {107,54,49}},
+{ 283140, 3, {66,66,65}},
+{ 283176, 3, {72,69,57}},
+{ 283200, 3, {75,64,59}},
+{ 283296, 3, {227,39,32}},
+{ 283360, 3, {80,77,46}},
+{ 283392, 3, {82,64,54}},
+{ 283404, 3, {113,57,44}},
+{ 283440, 3, {1181,16,15}},
+{ 283452, 3, {79,69,52}},
+{ 283500, 3, {75,63,60}},
+{ 283560, 3, {139,51,40}},
+{ 283584, 3, {211,42,32}},
+{ 283668, 3, {307,33,28}},
+{ 283725, 3, {97,65,45}},
+{ 283752, 3, {563,24,21}},
+{ 283764, 3, {107,52,51}},
+{ 283800, 3, {86,60,55}},
+{ 283808, 3, {181,49,32}},
+{ 283815, 3, {85,63,53}},
+{ 283860, 3, {83,60,57}},
+{ 283896, 3, {3943,9,8}},
+{ 283920, 3, {78,65,56}},
+{ 283932, 3, {239,36,33}},
+{ 283950, 3, {631,25,18}},
+{ 284004, 3, {84,69,49}},
+{ 284064, 3, {269,33,32}},
+{ 284088, 3, {89,57,56}},
+{ 284130, 3, {82,63,55}},
+{ 284160, 3, {74,64,60}},
+{ 284175, 3, {421,27,25}},
+{ 284184, 3, {3947,9,8}},
+{ 284220, 3, {1579,15,12}},
+{ 284310, 3, {81,65,54}},
+{ 284328, 3, {359,33,24}},
+{ 284340, 3, {677,21,20}},
+{ 284472, 3, {439,27,24}},
+{ 284544, 3, {78,64,57}},
+{ 284550, 3, {271,35,30}},
+{ 284580, 3, {85,62,54}},
+{ 284592, 3, {77,66,56}},
+{ 284700, 3, {73,65,60}},
+{ 284715, 3, {95,81,37}},
+{ 284760, 3, {113,56,45}},
+{ 284800, 3, {89,64,50}},
+{ 284832, 3, {86,69,48}},
+{ 284880, 3, {1187,16,15}},
+{ 284928, 3, {84,64,53}},
+{ 284940, 3, {1583,15,12}},
+{ 284988, 3, {127,51,44}},
+{ 285000, 3, {76,75,50}},
+{ 285075, 3, {181,45,35}},
+{ 285120, 3, {72,66,60}},
+{ 285180, 3, {97,60,49}},
+{ 285376, 3, {91,56,56}},
+{ 285384, 3, {88,69,47}},
+{ 285408, 3, {991,18,16}},
+{ 285480, 3, {72,65,61}},
+{ 285516, 3, {103,63,44}},
+{ 285525, 3, {81,75,47}},
+{ 285600, 3, {70,68,60}},
+{ 285624, 3, {3967,9,8}},
+{ 285660, 3, {69,69,60}},
+{ 285670, 3, {77,70,53}},
+{ 285696, 3, {72,64,62}},
+{ 285768, 3, {72,63,63}},
+{ 285792, 3, {229,39,32}},
+{ 285824, 3, {77,64,58}},
+{ 285840, 3, {397,30,24}},
+{ 285936, 3, {74,69,56}},
+{ 285984, 3, {331,32,27}},
+{ 286000, 3, {80,65,55}},
+{ 286020, 3, {227,36,35}},
+{ 286110, 3, {85,66,51}},
+{ 286176, 3, {271,33,32}},
+{ 286200, 3, {75,72,53}},
+{ 286209, 3, {77,63,59}},
+{ 286212, 3, {69,68,61}},
+{ 286272, 3, {71,64,63}},
+{ 286308, 3, {241,36,33}},
+{ 286320, 3, {1193,16,15}},
+{ 286524, 3, {379,28,27}},
+{ 286572, 3, {167,44,39}},
+{ 286608, 3, {853,21,16}},
+{ 286650, 3, {70,65,63}},
+{ 286720, 3, {70,64,64}},
+{ 286740, 3, {81,60,59}},
+{ 286776, 3, {569,24,21}},
+{ 286824, 3, {74,68,57}},
+{ 286848, 3, {83,64,54}},
+{ 286860, 3, {683,21,20}},
+{ 287028, 3, {68,67,63}},
+{ 287040, 3, {69,65,64}},
+{ 287064, 3, {443,27,24}},
+{ 287136, 3, {997,18,16}},
+{ 287196, 3, {263,39,28}},
+{ 287200, 3, {359,32,25}},
+{ 287208, 3, {3989,9,8}},
+{ 287232, 3, {68,66,64}},
+{ 287280, 3, {72,70,57}},
+{ 287364, 3, {311,33,28}},
+{ 287400, 3, {479,25,24}},
+{ 287430, 3, {67,66,65}},
+{ 287460, 3, {1597,15,12}},
+{ 287469, 3, {91,81,39}},
+{ 287508, 3, {97,57,52}},
+{ 287550, 3, {75,71,54}},
+{ 287560, 3, {79,65,56}},
+{ 287595, 3, {83,63,55}},
+{ 287640, 3, {85,72,47}},
+{ 287760, 3, {109,55,48}},
+{ 287784, 3, {571,24,21}},
+{ 287820, 3, {82,65,54}},
+{ 287840, 3, {257,35,32}},
+{ 287875, 3, {125,49,47}},
+{ 287952, 3, {857,21,16}},
+{ 288000, 3, {75,64,60}},
+{ 288072, 3, {4001,9,8}},
+{ 288090, 3, {97,55,54}},
+{ 288144, 3, {72,69,58}},
+{ 288180, 3, {1601,15,12}},
+{ 288192, 3, {79,64,57}},
+{ 288216, 3, {4003,9,8}},
+{ 288240, 3, {1201,16,15}},
+{ 288252, 3, {157,51,36}},
+{ 288288, 3, {78,66,56}},
+{ 288414, 3, {109,54,49}},
+{ 288420, 3, {76,69,55}},
+{ 288450, 3, {641,25,18}},
+{ 288456, 3, {101,56,51}},
+{ 288504, 3, {4007,9,8}},
+{ 288540, 3, {229,36,35}},
+{ 288600, 3, {74,65,60}},
+{ 288624, 3, {859,21,16}},
+{ 288640, 3, {82,64,55}},
+{ 288720, 3, {401,30,24}},
+{ 288855, 3, {131,49,45}},
+{ 288900, 3, {107,54,50}},
+{ 288904, 3, {77,67,56}},
+{ 288936, 3, {4013,9,8}},
+{ 289068, 3, {109,52,51}},
+{ 289152, 3, {251,36,32}},
+{ 289170, 3, {81,70,51}},
+{ 289212, 3, {313,33,28}},
+{ 289260, 3, {1607,15,12}},
+{ 289296, 3, {82,63,56}},
+{ 289332, 3, {81,76,47}},
+{ 289350, 3, {643,25,18}},
+{ 289368, 3, {4019,9,8}},
+{ 289512, 3, {4021,9,8}},
+{ 289520, 3, {80,77,47}},
+{ 289536, 3, {78,64,58}},
+{ 289548, 3, {383,28,27}},
+{ 289560, 3, {127,57,40}},
+{ 289575, 3, {81,65,55}},
+{ 289620, 3, {1609,15,12}},
+{ 289800, 3, {70,69,60}},
+{ 289872, 3, {72,66,61}},
+{ 289884, 3, {87,68,49}},
+{ 289944, 3, {4027,9,8}},
+{ 289968, 3, {863,21,16}},
+{ 289980, 3, {179,45,36}},
+{ 290115, 3, {307,35,27}},
+{ 290160, 3, {72,65,62}},
+{ 290220, 3, {691,21,20}},
+{ 290304, 3, {72,64,63}},
+{ 290325, 3, {79,75,49}},
+{ 290340, 3, {1613,15,12}},
+{ 290400, 3, {80,66,55}},
+{ 290496, 3, {89,64,51}},
+{ 290592, 3, {1009,18,16}},
+{ 290640, 3, {173,42,40}},
+{ 290664, 3, {367,33,24}},
+{ 290700, 3, {75,68,57}},
+{ 290745, 3, {71,65,63}},
+{ 290752, 3, {77,64,59}},
+{ 290784, 3, {233,39,32}},
+{ 290808, 3, {577,24,21}},
+{ 290850, 3, {277,35,30}},
+{ 290880, 3, {101,60,48}},
+{ 290904, 3, {69,68,62}},
+{ 290925, 3, {431,27,25}},
+{ 290952, 3, {449,27,24}},
+{ 291120, 3, {1213,16,15}},
+{ 291150, 3, {647,25,18}},
+{ 291168, 3, {337,32,27}},
+{ 291200, 3, {70,65,64}},
+{ 291312, 3, {68,68,63}},
+{ 291330, 3, {83,65,54}},
+{ 291384, 3, {72,71,57}},
+{ 291420, 3, {1619,15,12}},
+{ 291456, 3, {69,66,64}},
+{ 291528, 3, {4049,9,8}},
+{ 291564, 3, {89,63,52}},
+{ 291600, 3, {81,60,60}},
+{ 291672, 3, {4051,9,8}},
+{ 291720, 3, {68,66,65}},
+{ 291744, 3, {1013,18,16}},
+{ 291780, 3, {1621,15,12}},
+{ 291840, 3, {76,64,60}},
+{ 291924, 3, {81,68,53}},
+{ 291984, 3, {79,66,56}},
+{ 292032, 3, {78,72,52}},
+{ 292040, 3, {149,49,40}},
+{ 292068, 3, {76,63,61}},
+{ 292080, 3, {1217,16,15}},
+{ 292104, 3, {4057,9,8}},
+{ 292110, 3, {107,65,42}},
+{ 292140, 3, {541,27,20}},
+{ 292160, 3, {83,64,55}},
+{ 292200, 3, {487,25,24}},
+{ 292275, 3, {433,27,25}},
+{ 292320, 3, {72,70,58}},
+{ 292383, 3, {91,63,51}},
+{ 292500, 3, {75,65,60}},
+{ 292512, 3, {277,33,32}},
+{ 292560, 3, {80,69,53}},
+{ 292656, 3, {78,67,56}},
+{ 292752, 3, {107,57,48}},
+{ 292800, 3, {75,64,61}},
+{ 292824, 3, {83,63,56}},
+{ 292860, 3, {1627,15,12}},
+{ 292896, 3, {113,54,48}},
+{ 292908, 3, {317,33,28}},
+{ 293112, 3, {72,69,59}},
+{ 293139, 3, {81,77,47}},
+{ 293216, 3, {77,68,56}},
+{ 293220, 3, {181,45,36}},
+{ 293256, 3, {4073,9,8}},
+{ 293265, 3, {95,63,49}},
+{ 293280, 3, {80,78,47}},
+{ 293328, 3, {97,56,54}},
+{ 293370, 3, {127,55,42}},
+{ 293400, 3, {163,45,40}},
+{ 293472, 3, {1019,18,16}},
+{ 293475, 3, {91,75,43}},
+{ 293520, 3, {1223,16,15}},
+{ 293580, 3, {233,36,35}},
+{ 293600, 3, {367,32,25}},
+{ 293664, 3, {76,69,56}},
+{ 293688, 3, {4079,9,8}},
+{ 293700, 3, {89,60,55}},
+{ 293748, 3, {269,39,28}},
+{ 293832, 3, {77,72,53}},
+{ 293850, 3, {653,25,18}},
+{ 293895, 3, {311,35,27}},
+{ 293904, 3, {157,48,39}},
+{ 293940, 3, {71,69,60}},
+{ 293964, 3, {131,51,44}},
+{ 294000, 3, {70,70,60}},
+{ 294030, 3, {81,66,55}},
+{ 294048, 3, {1021,18,16}},
+{ 294084, 3, {389,28,27}},
+{ 294120, 3, {86,60,57}},
+{ 294168, 3, {103,56,51}},
+{ 294216, 3, {82,69,52}},
+{ 294300, 3, {109,54,50}},
+{ 294336, 3, {73,64,63}},
+{ 294360, 3, {223,40,33}},
+{ 294420, 3, {701,21,20}},
+{ 294480, 3, {409,30,24}},
+{ 294525, 3, {77,75,51}},
+{ 294528, 3, {78,64,59}},
+{ 294552, 3, {4091,9,8}},
+{ 294560, 3, {263,35,32}},
+{ 294576, 3, {76,68,57}},
+{ 294600, 3, {491,25,24}},
+{ 294624, 3, {72,66,62}},
+{ 294660, 3, {1637,15,12}},
+{ 294672, 3, {877,21,16}},
+{ 294696, 3, {4093,9,8}},
+{ 294720, 3, {307,32,30}},
+{ 294768, 3, {89,69,48}},
+{ 294800, 3, {80,67,55}},
+{ 294840, 3, {72,65,63}},
+{ 294912, 3, {72,64,64}},
+{ 294960, 3, {1229,16,15}},
+{ 295020, 3, {149,45,44}},
+{ 295029, 3, {223,49,27}},
+{ 295050, 3, {281,35,30}},
+{ 295104, 3, {87,64,53}},
+{ 295128, 3, {4099,9,8}},
+{ 295360, 3, {71,65,64}},
+{ 295380, 3, {547,27,20}},
+{ 295400, 3, {211,40,35}},
+{ 295416, 3, {373,33,24}},
+{ 295425, 3, {101,65,45}},
+{ 295440, 3, {1231,16,15}},
+{ 295488, 3, {72,72,57}},
+{ 295568, 3, {91,58,56}},
+{ 295596, 3, {69,68,63}},
+{ 295650, 3, {75,73,54}},
+{ 295680, 3, {70,66,64}},
+{ 295785, 3, {313,35,27}},
+{ 295800, 3, {75,68,58}},
+{ 295848, 3, {587,24,21}},
+{ 295872, 3, {69,67,64}},
+{ 295911, 3, {77,63,61}},
+{ 295920, 3, {137,48,45}},
+{ 295932, 3, {271,39,28}},
+{ 295960, 3, {151,49,40}},
+{ 295992, 3, {4111,9,8}},
+{ 296010, 3, {69,66,65}},
+{ 296016, 3, {881,21,16}},
+{ 296055, 3, {85,81,43}},
+{ 296064, 3, {257,36,32}},
+{ 296100, 3, {84,75,47}},
+{ 296136, 3, {457,27,24}},
+{ 296244, 3, {211,39,36}},
+{ 296325, 3, {439,27,25}},
+{ 296352, 3, {84,63,56}},
+{ 296400, 3, {76,65,60}},
+{ 296450, 3, {77,70,55}},
+{ 296460, 3, {81,61,60}},
+{ 296550, 3, {659,25,18}},
+{ 296604, 3, {107,63,44}},
+{ 296640, 3, {103,60,48}},
+{ 296688, 3, {883,21,16}},
+{ 296736, 3, {281,33,32}},
+{ 296800, 3, {80,70,53}},
+{ 296820, 3, {97,60,51}},
+{ 296856, 3, {76,63,62}},
+{ 296868, 3, {173,44,39}},
+{ 296880, 3, {1237,16,15}},
+{ 296928, 3, {1031,18,16}},
+{ 296940, 3, {101,60,49}},
+{ 297000, 3, {75,66,60}},
+{ 297024, 3, {78,68,56}},
+{ 297144, 3, {4127,9,8}},
+{ 297150, 3, {283,35,30}},
+{ 297180, 3, {127,52,45}},
+{ 297216, 3, {86,64,54}},
+{ 297288, 3, {4129,9,8}},
+{ 297330, 3, {85,66,53}},
+{ 297360, 3, {72,70,59}},
+{ 297432, 3, {81,68,54}},
+{ 297440, 3, {88,65,52}},
+{ 297450, 3, {661,25,18}},
+{ 297504, 3, {1033,18,16}},
+{ 297528, 3, {77,69,56}},
+{ 297540, 3, {87,60,57}},
+{ 297570, 3, {109,65,42}},
+{ 297576, 3, {4133,9,8}},
+{ 297600, 3, {75,64,62}},
+{ 297648, 3, {78,72,53}},
+{ 297780, 3, {709,21,20}},
+{ 297804, 3, {83,69,52}},
+{ 297960, 3, {191,40,39}},
+{ 297990, 3, {86,63,55}},
+{ 298008, 3, {4139,9,8}},
+{ 298032, 3, {887,21,16}},
+{ 298080, 3, {72,69,60}},
+{ 298188, 3, {251,36,33}},
+{ 298200, 3, {71,70,60}},
+{ 298224, 3, {109,57,48}},
+{ 298260, 3, {1657,15,12}},
+{ 298272, 3, {239,39,32}},
+{ 298320, 3, {113,55,48}},
+{ 298368, 3, {74,64,63}},
+{ 298375, 3, {125,77,31}},
+{ 298400, 3, {373,32,25}},
+{ 298452, 3, {77,68,57}},
+{ 298480, 3, {82,65,56}},
+{ 298485, 3, {81,67,55}},
+{ 298560, 3, {311,32,30}},
+{ 298620, 3, {79,63,60}},
+{ 298680, 3, {131,57,40}},
+{ 298704, 3, {127,49,48}},
+{ 298728, 3, {461,27,24}},
+{ 298760, 3, {97,56,55}},
+{ 298848, 3, {283,33,32}},
+{ 298872, 3, {593,24,21}},
+{ 298908, 3, {76,69,57}},
+{ 298935, 3, {73,65,63}},
+{ 298980, 3, {151,45,44}},
+{ 298998, 3, {113,54,49}},
+{ 299016, 3, {4153,9,8}},
+{ 299025, 3, {443,27,25}},
+{ 299136, 3, {82,64,57}},
+{ 299200, 3, {80,68,55}},
+{ 299232, 3, {1039,18,16}},
+{ 299268, 3, {163,51,36}},
+{ 299304, 3, {4157,9,8}},
+{ 299340, 3, {1663,15,12}},
+{ 299364, 3, {101,57,52}},
+{ 299376, 3, {72,66,63}},
+{ 299390, 3, {91,70,47}},
+{ 299400, 3, {499,25,24}},
+{ 299448, 3, {4159,9,8}},
+{ 299488, 3, {191,49,32}},
+{ 299520, 3, {72,65,64}},
+{ 299565, 3, {317,35,27}},
+{ 299592, 3, {73,72,57}},
+{ 299640, 3, {227,40,33}},
+{ 299676, 3, {113,52,51}},
+{ 299700, 3, {75,74,54}},
+{ 299712, 3, {223,42,32}},
+{ 299760, 3, {1249,16,15}},
+{ 299808, 3, {347,32,27}},
+{ 299880, 3, {70,68,63}},
+{ 299904, 3, {71,66,64}},
+{ 299970, 3, {101,55,54}},
+{ 300000, 3, {80,75,50}},
+{ 300024, 3, {463,27,24}},
+{ 300060, 3, {1667,15,12}},
+{ 300105, 3, {81,65,57}},
+{ 300125, 3, {125,49,49}},
+{ 300132, 3, {397,28,27}},
+{ 300160, 3, {70,67,64}},
+{ 300168, 3, {379,33,24}},
+{ 300240, 3, {139,48,45}},
+{ 300288, 3, {69,68,64}},
+{ 300300, 3, {70,66,65}},
+{ 300321, 3, {227,49,27}},
+{ 300384, 3, {149,48,42}},
+{ 300420, 3, {1669,15,12}},
+{ 300480, 3, {313,32,30}},
+{ 300510, 3, {81,70,53}},
+{ 300600, 3, {167,45,40}},
+{ 300608, 3, {77,64,61}},
+{ 300664, 3, {91,59,56}},
+{ 300720, 3, {179,42,40}},
+{ 300744, 3, {4177,9,8}},
+{ 300762, 3, {77,63,62}},
+{ 300768, 3, {241,39,32}},
+{ 300780, 3, {557,27,20}},
+{ 300825, 3, {191,45,35}},
+{ 300900, 3, {75,68,59}},
+{ 301056, 3, {84,64,56}},
+{ 301080, 3, {193,40,39}},
+{ 301140, 3, {239,36,35}},
+{ 301275, 3, {103,65,45}},
+{ 301280, 3, {269,35,32}},
+{ 301320, 3, {81,62,60}},
+{ 301350, 3, {82,75,49}},
+{ 301392, 3, {78,69,56}},
+{ 301455, 3, {87,63,55}},
+{ 301500, 3, {75,67,60}},
+{ 301536, 3, {349,32,27}},
+{ 301600, 3, {80,65,58}},
+{ 301644, 3, {76,63,63}},
+{ 301680, 3, {419,30,24}},
+{ 301716, 3, {87,68,51}},
+{ 301800, 3, {503,25,24}},
+{ 301840, 3, {77,70,56}},
+{ 301860, 3, {86,65,54}},
+{ 301896, 3, {599,24,21}},
+{ 301980, 3, {719,21,20}},
+{ 302085, 3, {137,49,45}},
+{ 302100, 3, {76,75,53}},
+{ 302112, 3, {1049,18,16}},
+{ 302120, 3, {83,65,56}},
+{ 302148, 3, {109,63,44}},
+{ 302160, 3, {1259,16,15}},
+{ 302211, 3, {91,81,41}},
+{ 302220, 3, {73,69,60}},
+{ 302280, 3, {229,40,33}},
+{ 302328, 3, {78,68,57}},
+{ 302400, 3, {75,64,63}},
+{ 302445, 3, {99,65,47}},
+{ 302472, 3, {4201,9,8}},
+{ 302484, 3, {277,39,28}},
+{ 302610, 3, {131,55,42}},
+{ 302616, 3, {467,27,24}},
+{ 302624, 3, {193,49,32}},
+{ 302688, 3, {1051,18,16}},
+{ 302720, 3, {86,64,55}},
+{ 302760, 3, {87,60,58}},
+{ 302784, 3, {83,64,57}},
+{ 302820, 3, {103,60,49}},
+{ 302848, 3, {91,64,52}},
+{ 302850, 3, {673,25,18}},
+{ 302904, 3, {601,24,21}},
+{ 302940, 3, {81,68,55}},
+{ 302967, 3, {229,49,27}},
+{ 302976, 3, {263,36,32}},
+{ 303030, 3, {74,65,63}},
+{ 303048, 3, {72,69,61}},
+{ 303072, 3, {82,66,56}},
+{ 303075, 3, {449,27,25}},
+{ 303120, 3, {421,30,24}},
+{ 303156, 3, {401,28,27}},
+{ 303160, 3, {88,65,53}},
+{ 303192, 3, {4211,9,8}},
+{ 303200, 3, {379,32,25}},
+{ 303264, 3, {78,72,54}},
+{ 303336, 3, {383,33,24}},
+{ 303360, 3, {79,64,60}},
+{ 303408, 3, {86,63,56}},
+{ 303468, 3, {121,57,44}},
+{ 303520, 3, {271,35,32}},
+{ 303600, 3, {80,69,55}},
+{ 303624, 3, {4217,9,8}},
+{ 303660, 3, {241,36,35}},
+{ 303680, 3, {73,65,64}},
+{ 303696, 3, {74,72,57}},
+{ 303750, 3, {75,75,54}},
+{ 303768, 3, {4219,9,8}},
+{ 303849, 3, {91,63,53}},
+{ 303912, 3, {72,67,63}},
+{ 303960, 3, {149,51,40}},
+{ 303975, 3, {193,45,35}},
+{ 303996, 3, {84,77,47}},
+{ 304020, 3, {563,27,20}},
+{ 304080, 3, {181,42,40}},
+{ 304128, 3, {72,66,64}},
+{ 304152, 3, {76,69,58}},
+{ 304164, 3, {71,68,63}},
+{ 304200, 3, {72,65,65}},
+{ 304320, 3, {317,32,30}},
+{ 304380, 3, {89,60,57}},
+{ 304416, 3, {151,48,42}},
+{ 304488, 3, {4229,9,8}},
+{ 304512, 3, {78,64,61}},
+{ 304560, 3, {81,80,47}},
+{ 304590, 3, {71,66,65}},
+{ 304632, 3, {4231,9,8}},
+{ 304640, 3, {70,68,64}},
+{ 304650, 3, {677,25,18}},
+{ 304704, 3, {69,69,64}},
+{ 304740, 3, {1693,15,12}},
+{ 304752, 3, {907,21,16}},
+{ 304800, 3, {127,50,48}},
+{ 304980, 3, {69,68,65}},
+{ 304992, 3, {353,32,27}},
+{ 305025, 3, {83,75,49}},
+{ 305088, 3, {227,42,32}},
+{ 305100, 3, {113,54,50}},
+{ 305136, 3, {163,48,39}},
+{ 305235, 3, {85,63,57}},
+{ 305256, 3, {79,69,56}},
+{ 305292, 3, {103,57,52}},
+{ 305316, 3, {257,36,33}},
+{ 305340, 3, {727,21,20}},
+{ 305352, 3, {4241,9,8}},
+{ 305370, 3, {81,65,58}},
+{ 305400, 3, {509,25,24}},
+{ 305424, 3, {101,56,54}},
+{ 305460, 3, {1697,15,12}},
+{ 305496, 3, {4243,9,8}},
+{ 305536, 3, {77,64,62}},
+{ 305568, 3, {1061,18,16}},
+{ 305592, 3, {107,56,51}},
+{ 305613, 3, {77,63,63}},
+{ 305760, 3, {78,70,56}},
+{ 305820, 3, {1699,15,12}},
+{ 305844, 3, {331,33,28}},
+{ 305910, 3, {103,55,54}},
+{ 305928, 3, {607,24,21}},
+{ 306000, 3, {75,68,60}},
+{ 306075, 3, {77,75,53}},
+{ 306096, 3, {911,21,16}},
+{ 306144, 3, {1063,18,16}},
+{ 306152, 3, {77,71,56}},
+{ 306180, 3, {81,63,60}},
+{ 306204, 3, {79,68,57}},
+{ 306216, 3, {4253,9,8}},
+{ 306240, 3, {80,66,58}},
+{ 306250, 3, {125,50,49}},
+{ 306360, 3, {74,69,60}},
+{ 306400, 3, {383,32,25}},
+{ 306432, 3, {76,64,63}},
+{ 306480, 3, {1277,16,15}},
+{ 306495, 3, {139,49,45}},
+{ 306540, 3, {131,52,45}},
+{ 306600, 3, {73,70,60}},
+{ 306612, 3, {167,51,36}},
+{ 306648, 3, {4259,9,8}},
+{ 306768, 3, {83,66,56}},
+{ 306792, 3, {4261,9,8}},
+{ 306800, 3, {80,65,59}},
+{ 306816, 3, {94,64,51}},
+{ 306852, 3, {281,39,28}},
+{ 306960, 3, {1279,16,15}},
+{ 307125, 3, {75,65,63}},
+{ 307164, 3, {179,44,39}},
+{ 307188, 3, {84,69,53}},
+{ 307200, 3, {75,64,64}},
+{ 307230, 3, {77,70,57}},
+{ 307260, 3, {569,27,20}},
+{ 307296, 3, {97,66,48}},
+{ 307320, 3, {197,40,39}},
+{ 307350, 3, {683,25,18}},
+{ 307395, 3, {81,69,55}},
+{ 307428, 3, {137,51,44}},
+{ 307440, 3, {72,70,61}},
+{ 307512, 3, {4271,9,8}},
+{ 307530, 3, {85,67,54}},
+{ 307560, 3, {233,40,33}},
+{ 307584, 3, {89,64,54}},
+{ 307620, 3, {1709,15,12}},
+{ 307650, 3, {293,35,30}},
+{ 307656, 3, {4273,9,8}},
+{ 307720, 3, {157,49,40}},
+{ 307776, 3, {229,42,32}},
+{ 307800, 3, {75,72,57}},
+{ 307840, 3, {74,65,64}},
+{ 307860, 3, {733,21,20}},
+{ 307872, 3, {1069,18,16}},
+{ 307920, 3, {1283,16,15}},
+{ 307980, 3, {87,60,59}},
+{ 308000, 3, {80,70,55}},
+{ 308016, 3, {72,69,62}},
+{ 308040, 3, {151,51,40}},
+{ 308088, 3, {389,33,24}},
+{ 308100, 3, {79,65,60}},
+{ 308112, 3, {131,49,48}},
+{ 308160, 3, {107,60,48}},
+{ 308259, 3, {233,49,27}},
+{ 308340, 3, {571,27,20}},
+{ 308352, 3, {73,66,64}},
+{ 308376, 3, {4283,9,8}},
+{ 308385, 3, {89,63,55}},
+{ 308448, 3, {72,68,63}},
+{ 308475, 3, {457,27,25}},
+{ 308490, 3, {113,65,42}},
+{ 308550, 3, {85,66,55}},
+{ 308568, 3, {86,69,52}},
+{ 308672, 3, {91,64,53}},
+{ 308736, 3, {72,67,64}},
+{ 308784, 3, {919,21,16}},
+{ 308808, 3, {4289,9,8}},
+{ 308880, 3, {72,66,65}},
+{ 308896, 3, {197,49,32}},
+{ 308952, 3, {613,24,21}},
+{ 309036, 3, {283,39,28}},
+{ 309060, 3, {101,60,51}},
+{ 309096, 3, {81,72,53}},
+{ 309120, 3, {70,69,64}},
+{ 309168, 3, {113,57,48}},
+{ 309204, 3, {409,28,27}},
+{ 309360, 3, {1289,16,15}},
+{ 309384, 3, {4297,9,8}},
+{ 309396, 3, {76,69,59}},
+{ 309408, 3, {293,33,32}},
+{ 309420, 3, {191,45,36}},
+{ 309504, 3, {78,64,62}},
+{ 309624, 3, {97,57,56}},
+{ 309672, 3, {69,68,66}},
+{ 309760, 3, {88,64,55}},
+{ 309780, 3, {1721,15,12}},
+{ 309825, 3, {81,75,51}},
+{ 309840, 3, {1291,16,15}},
+{ 309876, 3, {93,68,49}},
+{ 309888, 3, {269,36,32}},
+{ 309960, 3, {82,63,60}},
+{ 310128, 3, {78,71,56}},
+{ 310140, 3, {1723,15,12}},
+{ 310176, 3, {359,32,27}},
+{ 310200, 3, {94,60,55}},
+{ 310240, 3, {277,35,32}},
+{ 310275, 3, {197,45,35}},
+{ 310320, 3, {431,30,24}},
+{ 310380, 3, {739,21,20}},
+{ 310392, 3, {479,27,24}},
+{ 310400, 3, {97,64,50}},
+{ 310440, 3, {199,40,39}},
+{ 310464, 3, {77,64,63}},
+{ 310500, 3, {75,69,60}},
+{ 310590, 3, {85,63,58}},
+{ 310596, 3, {181,44,39}},
+{ 310635, 3, {81,65,59}},
+{ 310800, 3, {74,70,60}},
+{ 310856, 3, {91,61,56}},
+{ 310860, 3, {157,45,44}},
+{ 310896, 3, {127,51,48}},
+{ 310950, 3, {691,25,18}},
+{ 310968, 3, {617,24,21}},
+{ 311080, 3, {101,56,55}},
+{ 311100, 3, {75,68,61}},
+{ 311150, 3, {127,50,49}},
+{ 311175, 3, {461,27,25}},
+{ 311200, 3, {389,32,25}},
+{ 311220, 3, {76,65,63}},
+{ 311280, 3, {1297,16,15}},
+{ 311304, 3, {109,56,51}},
+{ 311388, 3, {337,33,28}},
+{ 311400, 3, {173,45,40}},
+{ 311472, 3, {103,56,54}},
+{ 311520, 3, {80,66,59}},
+{ 311544, 3, {4327,9,8}},
+{ 311580, 3, {577,27,20}},
+{ 311610, 3, {85,78,47}},
+{ 311760, 3, {433,30,24}},
+{ 311808, 3, {84,64,58}},
+{ 311904, 3, {76,72,57}},
+{ 311916, 3, {139,51,44}},
+{ 311940, 3, {1733,15,12}},
+{ 311976, 3, {619,24,21}},
+{ 312000, 3, {75,65,64}},
+{ 312032, 3, {199,49,32}},
+{ 312060, 3, {743,21,20}},
+{ 312120, 3, {85,68,54}},
+{ 312130, 3, {91,70,49}},
+{ 312144, 3, {929,21,16}},
+{ 312192, 3, {271,36,32}},
+{ 312200, 3, {223,40,35}},
+{ 312240, 3, {1301,16,15}},
+{ 312264, 3, {4337,9,8}},
+{ 312360, 3, {137,57,40}},
+{ 312375, 3, {85,75,49}},
+{ 312390, 3, {89,65,54}},
+{ 312400, 3, {80,71,55}},
+{ 312408, 3, {4339,9,8}},
+{ 312444, 3, {263,36,33}},
+{ 312480, 3, {72,70,62}},
+{ 312525, 3, {463,27,25}},
+{ 312576, 3, {74,66,64}},
+{ 312600, 3, {521,25,24}},
+{ 312620, 3, {77,70,58}},
+{ 312624, 3, {167,48,39}},
+{ 312660, 3, {193,45,36}},
+{ 312720, 3, {1303,16,15}},
+{ 312732, 3, {73,68,63}},
+{ 312795, 3, {331,35,27}},
+{ 312800, 3, {85,80,46}},
+{ 312975, 3, {107,65,45}},
+{ 312984, 3, {72,69,63}},
+{ 313040, 3, {86,65,56}},
+{ 313056, 3, {1087,18,16}},
+{ 313092, 3, {223,39,36}},
+{ 313128, 3, {4349,9,8}},
+{ 313152, 3, {233,42,32}},
+{ 313170, 3, {73,66,65}},
+{ 313200, 3, {75,72,58}},
+{ 313236, 3, {113,63,44}},
+{ 313248, 3, {251,39,32}},
+{ 313280, 3, {89,64,55}},
+{ 313344, 3, {72,68,64}},
+{ 313380, 3, {1741,15,12}},
+{ 313425, 3, {199,45,35}},
+{ 313500, 3, {76,75,55}},
+{ 313536, 3, {71,69,64}},
+{ 313548, 3, {87,68,53}},
+{ 313560, 3, {72,67,65}},
+{ 313600, 3, {70,70,64}},
+{ 313632, 3, {72,66,66}},
+{ 313680, 3, {1307,16,15}},
+{ 313704, 3, {4357,9,8}},
+{ 313728, 3, {86,64,57}},
+{ 313740, 3, {83,63,60}},
+{ 313800, 3, {523,25,24}},
+{ 313920, 3, {109,60,48}},
+{ 313956, 3, {81,68,57}},
+{ 313992, 3, {89,63,56}},
+{ 314136, 3, {4363,9,8}},
+{ 314208, 3, {1091,18,16}},
+{ 314325, 3, {127,55,45}},
+{ 314364, 3, {69,68,67}},
+{ 314400, 3, {131,50,48}},
+{ 314424, 3, {397,33,24}},
+{ 314460, 3, {1747,15,12}},
+{ 314496, 3, {78,64,63}},
+{ 314580, 3, {107,60,49}},
+{ 314600, 3, {88,65,55}},
+{ 314640, 3, {76,69,60}},
+{ 314720, 3, {281,35,32}},
+{ 314776, 3, {77,73,56}},
+{ 314784, 3, {1093,18,16}},
+{ 314832, 3, {937,21,16}},
+{ 314856, 3, {4373,9,8}},
+{ 314880, 3, {82,64,60}},
+{ 314928, 3, {81,72,54}},
+{ 315000, 3, {75,70,60}},
+{ 315180, 3, {103,60,51}},
+{ 315225, 3, {467,27,25}},
+{ 315315, 3, {77,65,63}},
+{ 315392, 3, {77,64,64}},
+{ 315420, 3, {751,21,20}},
+{ 315450, 3, {701,25,18}},
+{ 315456, 3, {93,64,53}},
+{ 315480, 3, {239,40,33}},
+{ 315495, 3, {95,81,41}},
+{ 315540, 3, {1753,15,12}},
+{ 315576, 3, {487,27,24}},
+{ 315744, 3, {88,69,52}},
+{ 315840, 3, {84,80,47}},
+{ 315900, 3, {81,65,60}},
+{ 315936, 3, {1097,18,16}},
+{ 315945, 3, {85,63,59}},
+{ 315952, 3, {91,62,56}},
+{ 316008, 3, {76,66,63}},
+{ 316050, 3, {86,75,49}},
+{ 316080, 3, {439,30,24}},
+{ 316152, 3, {4391,9,8}},
+{ 316160, 3, {76,65,64}},
+{ 316176, 3, {941,21,16}},
+{ 316197, 3, {239,49,27}},
+{ 316200, 3, {75,68,62}},
+{ 316260, 3, {251,36,35}},
+{ 316305, 3, {81,71,55}},
+{ 316470, 3, {137,55,42}},
+{ 316512, 3, {157,48,42}},
+{ 316560, 3, {1319,16,15}},
+{ 316584, 3, {4397,9,8}},
+{ 316608, 3, {97,64,51}},
+{ 316620, 3, {1759,15,12}},
+{ 316710, 3, {85,69,54}},
+{ 316764, 3, {419,28,27}},
+{ 316800, 3, {75,66,64}},
+{ 316848, 3, {82,69,56}},
+{ 316920, 3, {139,57,40}},
+{ 316932, 3, {84,77,49}},
+{ 316953, 3, {91,81,43}},
+{ 316960, 3, {283,35,32}},
+{ 316980, 3, {587,27,20}},
+{ 317016, 3, {74,68,63}},
+{ 317040, 3, {1321,16,15}},
+{ 317088, 3, {367,32,27}},
+{ 317148, 3, {107,57,52}},
+{ 317184, 3, {84,64,59}},
+{ 317200, 3, {80,65,61}},
+{ 317205, 3, {95,63,53}},
+{ 317240, 3, {103,56,55}},
+{ 317448, 3, {4409,9,8}},
+{ 317460, 3, {74,66,65}},
+{ 317520, 3, {72,70,63}},
+{ 317592, 3, {401,33,24}},
+{ 317600, 3, {397,32,25}},
+{ 317625, 3, {77,75,55}},
+{ 317628, 3, {173,51,36}},
+{ 317664, 3, {1103,18,16}},
+{ 317760, 3, {331,32,30}},
+{ 317772, 3, {97,63,52}},
+{ 317790, 3, {107,55,54}},
+{ 317800, 3, {227,40,35}},
+{ 317832, 3, {82,68,57}},
+{ 317856, 3, {86,66,56}},
+{ 317940, 3, {757,21,20}},
+{ 317952, 3, {72,69,64}},
+{ 318000, 3, {80,75,53}},
+{ 318010, 3, {77,70,59}},
+{ 318024, 3, {631,24,21}},
+{ 318080, 3, {71,70,64}},
+{ 318087, 3, {81,77,51}},
+{ 318120, 3, {241,40,33}},
+{ 318168, 3, {491,27,24}},
+{ 318192, 3, {947,21,16}},
+{ 318240, 3, {72,68,65}},
+{ 318276, 3, {421,28,27}},
+{ 318312, 3, {4421,9,8}},
+{ 318384, 3, {72,67,66}},
+{ 318420, 3, {87,61,60}},
+{ 318456, 3, {4423,9,8}},
+{ 318465, 3, {337,35,27}},
+{ 318480, 3, {1327,16,15}},
+{ 318516, 3, {127,57,44}},
+{ 318528, 3, {79,64,63}},
+{ 318600, 3, {75,72,59}},
+{ 318708, 3, {227,39,36}},
+{ 318720, 3, {83,64,60}},
+{ 318825, 3, {109,65,45}},
+{ 318843, 3, {241,49,27}},
+{ 318864, 3, {78,73,56}},
+{ 318960, 3, {443,30,24}},
+{ 319050, 3, {709,25,18}},
+{ 319056, 3, {69,68,68}},
+{ 319088, 3, {77,74,56}},
+{ 319104, 3, {277,36,32}},
+{ 319140, 3, {197,45,36}},
+{ 319200, 3, {76,70,60}},
+{ 319332, 3, {89,69,52}},
+{ 319392, 3, {1109,18,16}},
+{ 319410, 3, {78,65,63}},
+{ 319464, 3, {81,68,58}},
+{ 319480, 3, {163,49,40}},
+{ 319488, 3, {78,64,64}},
+{ 319500, 3, {75,71,60}},
+{ 319572, 3, {269,36,33}},
+{ 319600, 3, {85,80,47}},
+{ 319620, 3, {761,21,20}},
+{ 319725, 3, {87,75,49}},
+{ 319752, 3, {4441,9,8}},
+{ 319770, 3, {85,66,57}},
+{ 319788, 3, {84,81,47}},
+{ 319800, 3, {82,65,60}},
+{ 319860, 3, {1777,15,12}},
+{ 319884, 3, {76,69,61}},
+{ 319950, 3, {79,75,54}},
+{ 319956, 3, {293,39,28}},
+{ 319968, 3, {101,66,48}},
+{ 320040, 3, {127,56,45}},
+{ 320100, 3, {97,60,55}},
+{ 320112, 3, {78,72,57}},
+{ 320160, 3, {80,69,58}},
+{ 320166, 3, {77,66,63}},
+{ 320184, 3, {4447,9,8}},
+{ 320208, 3, {953,21,16}},
+{ 320220, 3, {593,27,20}},
+{ 320280, 3, {157,51,40}},
+{ 320320, 3, {77,65,64}},
+{ 320460, 3, {109,60,49}},
+{ 320472, 3, {4451,9,8}},
+{ 320580, 3, {137,52,45}},
+{ 320600, 3, {229,40,35}},
+{ 320628, 3, {347,33,28}},
+{ 320688, 3, {131,51,48}},
+{ 320712, 3, {83,69,56}},
+{ 320736, 3, {257,39,32}},
+{ 320760, 3, {81,66,60}},
+{ 320775, 3, {91,75,47}},
+{ 320796, 3, {76,67,63}},
+{ 320800, 3, {401,32,25}},
+{ 320880, 3, {191,42,40}},
+{ 320892, 3, {121,52,51}},
+{ 320904, 3, {4457,9,8}},
+{ 320940, 3, {1783,15,12}},
+{ 320950, 3, {131,50,49}},
+{ 321024, 3, {76,66,64}},
+{ 321048, 3, {91,63,56}},
+{ 321090, 3, {139,55,42}},
+{ 321165, 3, {81,65,61}},
+{ 321200, 3, {80,73,55}},
+{ 321216, 3, {239,42,32}},
+{ 321264, 3, {97,69,48}},
+{ 321300, 3, {75,68,63}},
+{ 321336, 3, {4463,9,8}},
+{ 321480, 3, {94,60,57}},
+{ 321516, 3, {229,39,36}},
+{ 321552, 3, {77,72,58}},
+{ 321600, 3, {75,67,64}},
+{ 321660, 3, {1787,15,12}},
+{ 321696, 3, {1117,18,16}},
+{ 321708, 3, {83,68,57}},
+{ 321750, 3, {75,66,65}},
+{ 321816, 3, {88,69,53}},
+{ 321840, 3, {149,48,45}},
+{ 321948, 3, {271,36,33}},
+{ 321975, 3, {81,75,53}},
+{ 322020, 3, {1789,15,12}},
+{ 322056, 3, {72,71,63}},
+{ 322080, 3, {80,66,61}},
+{ 322200, 3, {179,45,40}},
+{ 322224, 3, {137,49,48}},
+{ 322245, 3, {93,63,55}},
+{ 322272, 3, {373,32,27}},
+{ 322350, 3, {307,35,30}},
+{ 322368, 3, {73,69,64}},
+{ 322371, 3, {119,63,43}},
+{ 322380, 3, {199,45,36}},
+{ 322392, 3, {101,57,56}},
+{ 322400, 3, {80,65,62}},
+{ 322476, 3, {349,33,28}},
+{ 322524, 3, {93,68,51}},
+{ 322560, 3, {72,70,64}},
+{ 322608, 3, {88,78,47}},
+{ 322632, 3, {4481,9,8}},
+{ 322728, 3, {113,56,51}},
+{ 322740, 3, {163,45,44}},
+{ 322776, 3, {4483,9,8}},
+{ 322920, 3, {72,69,65}},
+{ 322944, 3, {87,64,58}},
+{ 322980, 3, {769,21,20}},
+{ 323064, 3, {641,24,21}},
+{ 323076, 3, {109,57,52}},
+{ 323136, 3, {72,68,66}},
+{ 323190, 3, {81,70,57}},
+{ 323200, 3, {101,64,50}},
+{ 323232, 3, {78,74,56}},
+{ 323280, 3, {449,30,24}},
+{ 323325, 3, {479,27,25}},
+{ 323352, 3, {499,27,24}},
+{ 323424, 3, {1123,18,16}},
+{ 323460, 3, {599,27,20}},
+{ 323496, 3, {4493,9,8}},
+{ 323505, 3, {79,65,63}},
+{ 323520, 3, {337,32,30}},
+{ 323550, 3, {719,25,18}},
+{ 323568, 3, {107,56,54}},
+{ 323595, 3, {85,81,47}},
+{ 323640, 3, {87,62,60}},
+{ 323700, 3, {83,65,60}},
+{ 323712, 3, {281,36,32}},
+{ 323730, 3, {109,55,54}},
+{ 323748, 3, {69,69,68}},
+{ 323820, 3, {257,36,35}},
+{ 323840, 3, {92,64,55}},
+{ 323856, 3, {173,48,39}},
+{ 323904, 3, {241,42,32}},
+{ 323928, 3, {409,33,24}},
+{ 323960, 3, {89,65,56}},
+{ 323988, 3, {87,76,49}},
+{ 324000, 3, {75,72,60}},
+{ 324072, 3, {643,24,21}},
+{ 324180, 3, {1801,15,12}},
+{ 324192, 3, {307,33,32}},
+{ 324216, 3, {79,72,57}},
+{ 324225, 3, {131,55,45}},
+{ 324240, 3, {193,42,40}},
+{ 324360, 3, {85,72,53}},
+{ 324480, 3, {78,65,64}},
+{ 324504, 3, {4507,9,8}},
+{ 324540, 3, {601,27,20}},
+{ 324576, 3, {84,69,56}},
+{ 324600, 3, {541,25,24}},
+{ 324625, 3, {125,53,49}},
+{ 324660, 3, {773,21,20}},
+{ 324672, 3, {89,64,57}},
+{ 324675, 3, {111,65,45}},
+{ 324800, 3, {80,70,58}},
+{ 324864, 3, {94,64,54}},
+{ 324870, 3, {85,78,49}},
+{ 324900, 3, {76,75,57}},
+{ 324912, 3, {967,21,16}},
+{ 324936, 3, {4513,9,8}},
+{ 324972, 3, {81,68,59}},
+{ 325017, 3, {77,67,63}},
+{ 325080, 3, {86,63,60}},
+{ 325128, 3, {76,69,62}},
+{ 325152, 3, {1129,18,16}},
+{ 325215, 3, {81,73,55}},
+{ 325224, 3, {4517,9,8}},
+{ 325248, 3, {77,66,64}},
+{ 325260, 3, {139,52,45}},
+{ 325368, 3, {4519,9,8}},
+{ 325380, 3, {85,66,58}},
+{ 325440, 3, {113,60,48}},
+{ 325584, 3, {76,68,63}},
+{ 325600, 3, {80,74,55}},
+{ 325620, 3, {81,67,60}},
+{ 325656, 3, {4523,9,8}},
+{ 325680, 3, {80,69,59}},
+{ 325710, 3, {94,63,55}},
+{ 325728, 3, {78,72,58}},
+{ 325800, 3, {181,45,40}},
+{ 325836, 3, {431,28,27}},
+{ 325890, 3, {85,71,54}},
+{ 325944, 3, {503,27,24}},
+{ 325980, 3, {1811,15,12}},
+{ 326016, 3, {283,36,32}},
+{ 326040, 3, {76,66,65}},
+{ 326088, 3, {647,24,21}},
+{ 326144, 3, {91,64,56}},
+{ 326160, 3, {151,48,45}},
+{ 326172, 3, {353,33,28}},
+{ 326200, 3, {233,40,35}},
+{ 326256, 3, {971,21,16}},
+{ 326268, 3, {81,76,53}},
+{ 326304, 3, {103,66,48}},
+{ 326400, 3, {75,68,64}},
+{ 326430, 3, {81,65,62}},
+{ 326480, 3, {80,77,53}},
+{ 326508, 3, {91,69,52}},
+{ 326550, 3, {311,35,30}},
+{ 326592, 3, {72,72,63}},
+{ 326640, 3, {1361,16,15}},
+{ 326655, 3, {85,63,61}},
+{ 326781, 3, {91,63,57}},
+{ 326784, 3, {74,69,64}},
+{ 326928, 3, {139,49,48}},
+{ 327040, 3, {73,70,64}},
+{ 327060, 3, {79,69,60}},
+{ 327075, 3, {89,75,49}},
+{ 327096, 3, {77,72,59}},
+{ 327132, 3, {233,39,36}},
+{ 327150, 3, {727,25,18}},
+{ 327168, 3, {72,71,64}},
+{ 327200, 3, {409,32,25}},
+{ 327320, 3, {167,49,40}},
+{ 327348, 3, {433,28,27}},
+{ 327360, 3, {80,66,62}},
+{ 327384, 3, {4547,9,8}},
+{ 327420, 3, {107,60,51}},
+{ 327456, 3, {379,32,27}},
+{ 327528, 3, {4549,9,8}},
+{ 327600, 3, {72,70,65}},
+{ 327712, 3, {77,76,56}},
+{ 327756, 3, {191,44,39}},
+{ 327780, 3, {607,27,20}},
+{ 327888, 3, {72,69,66}},
+{ 327915, 3, {347,35,27}},
+{ 327936, 3, {84,64,61}},
+{ 328050, 3, {81,75,54}},
+{ 328080, 3, {1367,16,15}},
+{ 328140, 3, {1823,15,12}},
+{ 328160, 3, {293,35,32}},
+{ 328185, 3, {99,65,51}},
+{ 328200, 3, {547,25,24}},
+{ 328224, 3, {263,39,32}},
+{ 328272, 3, {977,21,16}},
+{ 328392, 3, {4561,9,8}},
+{ 328416, 3, {311,33,32}},
+{ 328440, 3, {70,69,68}},
+{ 328500, 3, {75,73,60}},
+{ 328512, 3, {87,64,59}},
+{ 328545, 3, {149,49,45}},
+{ 328548, 3, {131,57,44}},
+{ 328608, 3, {163,48,42}},
+{ 328640, 3, {79,65,64}},
+{ 328644, 3, {179,51,36}},
+{ 328650, 3, {313,35,30}},
+{ 328725, 3, {487,27,25}},
+{ 328776, 3, {103,57,56}},
+{ 328790, 3, {77,70,61}},
+{ 328800, 3, {137,50,48}},
+{ 328824, 3, {4567,9,8}},
+{ 328860, 3, {81,70,58}},
+{ 328944, 3, {89,66,56}},
+{ 329040, 3, {457,30,24}},
+{ 329076, 3, {277,36,33}},
+{ 329112, 3, {653,24,21}},
+{ 329160, 3, {211,40,39}},
+{ 329175, 3, {77,75,57}},
+{ 329184, 3, {127,54,48}},
+{ 329400, 3, {75,72,61}},
+{ 329460, 3, {85,68,57}},
+{ 329472, 3, {78,66,64}},
+{ 329520, 3, {1373,16,15}},
+{ 329560, 3, {107,56,55}},
+{ 329580, 3, {1831,15,12}},
+{ 329600, 3, {103,64,50}},
+{ 329616, 3, {109,56,54}},
+{ 329664, 3, {101,64,51}},
+{ 329670, 3, {81,74,55}},
+{ 329805, 3, {349,35,27}},
+{ 329832, 3, {509,27,24}},
+{ 329850, 3, {733,25,18}},
+{ 329868, 3, {77,68,63}},
+{ 329875, 3, {125,91,29}},
+{ 329940, 3, {94,65,54}},
+{ 329976, 3, {4583,9,8}},
+{ 330000, 3, {80,75,55}},
+{ 330096, 3, {92,69,52}},
+{ 330120, 3, {131,56,45}},
+{ 330176, 3, {77,67,64}},
+{ 330240, 3, {86,64,60}},
+{ 330288, 3, {983,21,16}},
+{ 330330, 3, {77,66,65}},
+{ 330372, 3, {76,69,63}},
+{ 330400, 3, {80,70,59}},
+{ 330480, 3, {81,68,60}},
+{ 330525, 3, {113,65,45}},
+{ 330528, 3, {313,33,32}},
+{ 330540, 3, {787,21,20}},
+{ 330552, 3, {4591,9,8}},
+{ 330561, 3, {81,77,53}},
+{ 330600, 3, {76,75,58}},
+{ 330624, 3, {82,64,63}},
+{ 330660, 3, {167,45,44}},
+{ 330720, 3, {80,78,53}},
+{ 330848, 3, {211,49,32}},
+{ 330876, 3, {101,63,52}},
+{ 330880, 3, {94,64,55}},
+{ 330885, 3, {95,81,43}},
+{ 330912, 3, {383,32,27}},
+{ 330960, 3, {197,42,40}},
+{ 330984, 3, {4597,9,8}},
+{ 330990, 3, {85,66,59}},
+{ 331020, 3, {613,27,20}},
+{ 331128, 3, {73,72,63}},
+{ 331188, 3, {193,44,39}},
+{ 331200, 3, {75,69,64}},
+{ 331240, 3, {91,65,56}},
+{ 331320, 3, {251,40,33}},
+{ 331344, 3, {78,72,59}},
+{ 331380, 3, {263,36,35}},
+{ 331416, 3, {4603,9,8}},
+{ 331425, 3, {491,27,25}},
+{ 331440, 3, {1381,16,15}},
+{ 331485, 3, {105,77,41}},
+{ 331488, 3, {1151,18,16}},
+{ 331500, 3, {75,68,65}},
+{ 331520, 3, {74,70,64}},
+{ 331695, 3, {81,65,63}},
+{ 331716, 3, {359,33,28}},
+{ 331740, 3, {97,60,57}},
+{ 331760, 3, {88,65,58}},
+{ 331776, 3, {72,72,64}},
+{ 331800, 3, {79,70,60}},
+{ 331848, 3, {419,33,24}},
+{ 331884, 3, {439,28,27}},
+{ 331920, 3, {461,30,24}},
+{ 331968, 3, {78,76,56}},
+{ 331992, 3, {87,72,53}},
+{ 332010, 3, {85,63,62}},
+{ 332024, 3, {77,77,56}},
+{ 332064, 3, {1153,18,16}},
+{ 332073, 3, {251,49,27}},
+{ 332100, 3, {82,75,54}},
+{ 332136, 3, {659,24,21}},
+{ 332220, 3, {113,60,49}},
+{ 332280, 3, {72,71,65}},
+{ 332304, 3, {86,69,56}},
+{ 332310, 3, {95,66,53}},
+{ 332316, 3, {181,51,36}},
+{ 332325, 3, {211,45,35}},
+{ 332416, 3, {98,64,53}},
+{ 332424, 3, {81,72,57}},
+{ 332460, 3, {1847,15,12}},
+{ 332514, 3, {91,63,58}},
+{ 332520, 3, {163,51,40}},
+{ 332550, 3, {739,25,18}},
+{ 332640, 3, {72,70,66}},
+{ 332712, 3, {4621,9,8}},
+{ 332800, 3, {80,65,64}},
+{ 332850, 3, {317,35,30}},
+{ 332856, 3, {72,69,67}},
+{ 332955, 3, {151,49,45}},
+{ 332976, 3, {991,21,16}},
+{ 333000, 3, {75,74,60}},
+{ 333120, 3, {347,32,30}},
+{ 333132, 3, {71,69,68}},
+{ 333144, 3, {661,24,21}},
+{ 333180, 3, {617,27,20}},
+{ 333300, 3, {101,60,55}},
+{ 333312, 3, {84,64,62}},
+{ 333333, 3, {99,91,37}},
+{ 333336, 3, {86,68,57}},
+{ 333360, 3, {463,30,24}},
+{ 333432, 3, {421,33,24}},
+{ 333540, 3, {109,60,51}},
+{ 333585, 3, {353,35,27}},
+{ 333600, 3, {139,50,48}},
+{ 333696, 3, {79,66,64}},
+{ 333828, 3, {281,36,33}},
+{ 333864, 3, {4637,9,8}},
+{ 333900, 3, {84,75,53}},
+{ 333960, 3, {88,69,55}},
+{ 334008, 3, {4639,9,8}},
+{ 334125, 3, {81,75,55}},
+{ 334152, 3, {78,68,63}},
+{ 334180, 3, {77,70,62}},
+{ 334200, 3, {557,25,24}},
+{ 334260, 3, {619,27,20}},
+{ 334296, 3, {4643,9,8}},
+{ 334320, 3, {199,42,40}},
+{ 334350, 3, {743,25,18}},
+{ 334356, 3, {149,51,44}},
+{ 334400, 3, {80,76,55}},
+{ 334425, 3, {91,75,49}},
+{ 334464, 3, {78,67,64}},
+{ 334512, 3, {101,69,48}},
+{ 334530, 3, {81,70,59}},
+{ 334600, 3, {239,40,35}},
+{ 334620, 3, {78,66,65}},
+{ 334656, 3, {83,64,63}},
+{ 334719, 3, {77,69,63}},
+{ 334728, 3, {4649,9,8}},
+{ 334740, 3, {797,21,20}},
+{ 334752, 3, {317,33,32}},
+{ 334800, 3, {75,72,62}},
+{ 334872, 3, {4651,9,8}},
+{ 334880, 3, {92,65,56}},
+{ 334908, 3, {443,28,27}},
+{ 334932, 3, {113,57,52}},
+{ 334944, 3, {1163,18,16}},
+{ 334950, 3, {77,75,58}},
+{ 334980, 3, {1861,15,12}},
+{ 334992, 3, {997,21,16}},
+{ 335040, 3, {349,32,30}},
+{ 335070, 3, {85,73,54}},
+{ 335088, 3, {179,48,39}},
+{ 335104, 3, {77,68,64}},
+{ 335160, 3, {76,70,63}},
+{ 335172, 3, {93,68,53}},
+{ 335200, 3, {419,32,25}},
+{ 335232, 3, {97,64,54}},
+{ 335244, 3, {307,39,28}},
+{ 335280, 3, {127,55,48}},
+{ 335304, 3, {4657,9,8}},
+{ 335340, 3, {81,69,60}},
+{ 335376, 3, {137,51,48}},
+{ 335400, 3, {86,65,60}},
+{ 335556, 3, {239,39,36}},
+{ 335580, 3, {85,84,47}},
+{ 335610, 3, {113,55,54}},
+{ 335616, 3, {76,69,64}},
+{ 335650, 3, {137,50,49}},
+{ 335664, 3, {74,72,63}},
+{ 335712, 3, {269,39,32}},
+{ 335720, 3, {109,56,55}},
+{ 335736, 3, {4663,9,8}},
+{ 335760, 3, {1399,16,15}},
+{ 335790, 3, {82,65,63}},
+{ 335988, 3, {81,68,61}},
+{ 336000, 3, {75,70,64}},
+{ 336042, 3, {127,54,49}},
+{ 336060, 3, {1867,15,12}},
+{ 336096, 3, {389,32,27}},
+{ 336105, 3, {97,63,55}},
+{ 336150, 3, {83,75,54}},
+{ 336168, 3, {84,69,58}},
+{ 336192, 3, {103,64,51}},
+{ 336204, 3, {283,36,33}},
+{ 336240, 3, {467,30,24}},
+{ 336300, 3, {76,75,59}},
+{ 336336, 3, {78,77,56}},
+{ 336384, 3, {73,72,64}},
+{ 336420, 3, {89,63,60}},
+{ 336456, 3, {4673,9,8}},
+{ 336528, 3, {82,72,57}},
+{ 336600, 3, {75,68,66}},
+{ 336672, 3, {167,48,42}},
+{ 336720, 3, {80,69,61}},
+{ 336780, 3, {1871,15,12}},
+{ 336800, 3, {421,32,25}},
+{ 336804, 3, {127,52,51}},
+{ 336825, 3, {499,27,25}},
+{ 336875, 3, {125,55,49}},
+{ 336888, 3, {4679,9,8}},
+{ 336960, 3, {72,72,65}},
+{ 337140, 3, {1873,15,12}},
+{ 337212, 3, {87,68,57}},
+{ 337248, 3, {1171,18,16}},
+{ 337272, 3, {94,69,52}},
+{ 337344, 3, {251,42,32}},
+{ 337365, 3, {85,63,63}},
+{ 337392, 3, {72,71,66}},
+{ 337400, 3, {241,40,35}},
+{ 337428, 3, {103,63,52}},
+{ 337480, 3, {88,65,59}},
+{ 337500, 3, {75,75,60}},
+{ 337536, 3, {293,36,32}},
+{ 337608, 3, {521,27,24}},
+{ 337610, 3, {91,70,53}},
+{ 337680, 3, {72,70,67}},
+{ 337752, 3, {4691,9,8}},
+{ 337792, 3, {91,64,58}},
+{ 337800, 3, {563,25,24}},
+{ 337824, 3, {72,69,68}},
+{ 337860, 3, {1877,15,12}},
+{ 337920, 3, {80,66,64}},
+{ 337950, 3, {751,25,18}},
+{ 338000, 3, {80,65,65}},
+{ 338052, 3, {197,44,39}},
+{ 338130, 3, {85,78,51}},
+{ 338160, 3, {1409,16,15}},
+{ 338184, 3, {77,72,61}},
+{ 338208, 3, {271,39,32}},
+{ 338220, 3, {1879,15,12}},
+{ 338247, 3, {91,63,59}},
+{ 338256, 3, {81,72,58}},
+{ 338364, 3, {241,39,36}},
+{ 338436, 3, {79,68,63}},
+{ 338580, 3, {81,76,55}},
+{ 338616, 3, {4703,9,8}},
+{ 338688, 3, {84,64,63}},
+{ 338800, 3, {80,77,55}},
+{ 338832, 3, {181,48,39}},
+{ 338844, 3, {151,51,44}},
+{ 338880, 3, {353,32,30}},
+{ 338904, 3, {523,27,24}},
+{ 338910, 3, {79,66,65}},
+{ 338940, 3, {269,36,35}},
+{ 338976, 3, {107,66,48}},
+{ 339024, 3, {1009,21,16}},
+{ 339075, 3, {137,55,45}},
+{ 339080, 3, {173,49,40}},
+{ 339108, 3, {367,33,28}},
+{ 339120, 3, {157,48,45}},
+{ 339192, 3, {673,24,21}},
+{ 339240, 3, {257,40,33}},
+{ 339255, 3, {359,35,27}},
+{ 339444, 3, {449,28,27}},
+{ 339456, 3, {78,68,64}},
+{ 339480, 3, {82,69,60}},
+{ 339525, 3, {503,27,25}},
+{ 339552, 3, {131,54,48}},
+{ 339570, 3, {77,70,63}},
+{ 339612, 3, {311,39,28}},
+{ 339648, 3, {87,64,61}},
+{ 339660, 3, {85,74,54}},
+{ 339720, 3, {149,57,40}},
+{ 339780, 3, {809,21,20}},
+{ 339885, 3, {83,65,63}},
+{ 339900, 3, {103,60,55}},
+{ 339912, 3, {4721,9,8}},
+{ 339948, 3, {76,71,63}},
+{ 340000, 3, {85,80,50}},
+{ 340011, 3, {257,49,27}},
+{ 340020, 3, {1889,15,12}},
+{ 340032, 3, {77,69,64}},
+{ 340056, 3, {4723,9,8}},
+{ 340128, 3, {1181,18,16}},
+{ 340200, 3, {75,72,63}},
+{ 340272, 3, {139,51,48}},
+{ 340368, 3, {1013,21,16}},
+{ 340470, 3, {97,65,54}},
+{ 340480, 3, {76,70,64}},
+{ 340488, 3, {4729,9,8}},
+{ 340550, 3, {139,50,49}},
+{ 340620, 3, {811,21,20}},
+{ 340632, 3, {83,72,57}},
+{ 340648, 3, {79,77,56}},
+{ 340650, 3, {757,25,18}},
+{ 340680, 3, {167,51,40}},
+{ 340704, 3, {78,78,56}},
+{ 340725, 3, {77,75,59}},
+{ 340740, 3, {631,27,20}},
+{ 340776, 3, {4733,9,8}},
+{ 340800, 3, {75,71,64}},
+{ 340860, 3, {76,69,65}},
+{ 340992, 3, {74,72,64}},
+{ 341055, 3, {99,65,53}},
+{ 341120, 3, {82,65,64}},
+{ 341136, 3, {103,69,48}},
+{ 341145, 3, {95,63,57}},
+{ 341208, 3, {677,24,21}},
+{ 341352, 3, {431,33,24}},
+{ 341400, 3, {569,25,24}},
+{ 341432, 3, {91,67,56}},
+{ 341440, 3, {97,64,55}},
+{ 341460, 3, {271,36,35}},
+{ 341484, 3, {199,44,39}},
+{ 341496, 3, {81,68,62}},
+{ 341520, 3, {1423,16,15}},
+{ 341544, 3, {107,57,56}},
+{ 341600, 3, {80,70,61}},
+{ 341640, 3, {73,72,65}},
+{ 341700, 3, {75,68,67}},
+{ 341712, 3, {113,56,54}},
+{ 341760, 3, {89,64,60}},
+{ 341775, 3, {93,75,49}},
+{ 341796, 3, {313,39,28}},
+{ 341820, 3, {211,45,36}},
+{ 341856, 3, {1187,18,16}},
+{ 341964, 3, {84,69,59}},
+{ 342000, 3, {76,75,60}},
+{ 342072, 3, {4751,9,8}},
+{ 342144, 3, {72,72,66}},
+{ 342160, 3, {94,65,56}},
+{ 342180, 3, {1901,15,12}},
+{ 342210, 3, {85,66,61}},
+{ 342216, 3, {97,63,56}},
+{ 342225, 3, {81,65,65}},
+{ 342240, 3, {80,69,62}},
+{ 342384, 3, {1019,21,16}},
+{ 342400, 3, {107,64,50}},
+{ 342450, 3, {761,25,18}},
+{ 342480, 3, {1427,16,15}},
+{ 342516, 3, {73,69,68}},
+{ 342540, 3, {173,45,44}},
+{ 342576, 3, {78,72,61}},
+{ 342600, 3, {571,25,24}},
+{ 342648, 3, {4759,9,8}},
+{ 342720, 3, {72,70,68}},
+{ 342792, 3, {72,69,69}},
+{ 342804, 3, {84,77,53}},
+{ 342900, 3, {127,54,50}},
+{ 342912, 3, {94,64,57}},
+{ 342936, 3, {433,33,24}},
+{ 342960, 3, {1429,16,15}},
+{ 343008, 3, {397,32,27}},
+{ 343035, 3, {81,77,55}},
+{ 343056, 3, {1021,21,16}},
+{ 343128, 3, {87,68,58}},
+{ 343200, 3, {80,66,65}},
+{ 343260, 3, {1907,15,12}},
+{ 343332, 3, {99,68,51}},
+{ 343440, 3, {81,80,53}},
+{ 343575, 3, {509,27,25}},
+{ 343584, 3, {1193,18,16}},
+{ 343596, 3, {137,57,44}},
+{ 343616, 3, {91,64,59}},
+{ 343620, 3, {83,69,60}},
+{ 343728, 3, {77,72,62}},
+{ 343800, 3, {191,45,40}},
+{ 343840, 3, {307,35,32}},
+{ 343896, 3, {89,69,56}},
+{ 343920, 3, {1433,16,15}},
+{ 344025, 3, {139,55,45}},
+{ 344064, 3, {84,64,64}},
+{ 344088, 3, {81,72,59}},
+{ 344190, 3, {149,55,42}},
+{ 344232, 3, {683,24,21}},
+{ 344250, 3, {85,75,54}},
+{ 344280, 3, {151,57,40}},
+{ 344340, 3, {1913,15,12}},
+{ 344376, 3, {4783,9,8}},
+{ 344400, 3, {82,70,60}},
+{ 344421, 3, {77,71,63}},
+{ 344448, 3, {78,69,64}},
+{ 344520, 3, {87,66,60}},
+{ 344640, 3, {359,32,30}},
+{ 344652, 3, {373,33,28}},
+{ 344664, 3, {4787,9,8}},
+{ 344736, 3, {76,72,63}},
+{ 344800, 3, {431,32,25}},
+{ 344808, 3, {4789,9,8}},
+{ 344820, 3, {821,21,20}},
+{ 344850, 3, {95,66,55}},
+{ 344880, 3, {479,30,24}},
+{ 344960, 3, {77,70,64}},
+{ 344964, 3, {89,68,57}},
+{ 345000, 3, {92,75,50}},
+{ 345015, 3, {99,85,41}},
+{ 345060, 3, {81,71,60}},
+{ 345072, 3, {79,78,56}},
+{ 345096, 3, {4793,9,8}},
+{ 345216, 3, {87,64,62}},
+{ 345240, 3, {137,56,45}},
+{ 345280, 3, {83,65,64}},
+{ 345312, 3, {109,66,48}},
+{ 345360, 3, {1439,16,15}},
+{ 345408, 3, {257,42,32}},
+{ 345420, 3, {101,60,57}},
+{ 345450, 3, {94,75,49}},
+{ 345492, 3, {457,28,27}},
+{ 345528, 3, {4799,9,8}},
+{ 345600, 3, {75,72,64}},
+{ 345660, 3, {823,21,20}},
+{ 345672, 3, {4801,9,8}},
+{ 345696, 3, {277,39,32}},
+{ 345780, 3, {113,60,51}},
+{ 345840, 3, {131,55,48}},
+{ 345870, 3, {81,70,61}},
+{ 345888, 3, {1201,18,16}},
+{ 346050, 3, {769,25,18}},
+{ 346104, 3, {76,69,66}},
+{ 346140, 3, {641,27,20}},
+{ 346164, 3, {317,39,28}},
+{ 346185, 3, {157,49,45}},
+{ 346200, 3, {577,25,24}},
+{ 346275, 3, {81,75,57}},
+{ 346320, 3, {74,72,65}},
+{ 346368, 3, {82,66,64}},
+{ 346400, 3, {433,32,25}},
+{ 346416, 3, {1031,21,16}},
+{ 346437, 3, {91,81,47}},
+{ 346464, 3, {401,32,27}},
+{ 346528, 3, {91,68,56}},
+{ 346536, 3, {4813,9,8}},
+{ 346626, 3, {131,54,49}},
+{ 346710, 3, {127,65,42}},
+{ 346752, 3, {86,64,63}},
+{ 346800, 3, {75,68,68}},
+{ 346815, 3, {367,35,27}},
+{ 346824, 3, {4817,9,8}},
+{ 346896, 3, {73,72,66}},
+{ 347004, 3, {81,68,63}},
+{ 347088, 3, {1033,21,16}},
+{ 347100, 3, {89,65,60}},
+{ 347160, 3, {263,40,33}},
+{ 347200, 3, {80,70,62}},
+{ 347208, 3, {74,69,68}},
+{ 347220, 3, {643,27,20}},
+{ 347280, 3, {1447,16,15}},
+{ 347340, 3, {827,21,20}},
+{ 347400, 3, {193,45,40}},
+{ 347412, 3, {131,52,51}},
+{ 347424, 3, {94,66,56}},
+{ 347472, 3, {127,57,48}},
+{ 347490, 3, {81,66,65}},
+{ 347550, 3, {331,35,30}},
+{ 347580, 3, {1931,15,12}},
+{ 347600, 3, {80,79,55}},
+{ 347655, 3, {105,77,43}},
+{ 347688, 3, {439,33,24}},
+{ 347700, 3, {76,75,61}},
+{ 347760, 3, {72,70,69}},
+{ 347820, 3, {85,66,62}},
+{ 347832, 3, {4831,9,8}},
+{ 347850, 3, {773,25,18}},
+{ 347880, 3, {223,40,39}},
+{ 347928, 3, {109,57,56}},
+{ 347940, 3, {1933,15,12}},
+{ 347949, 3, {263,49,27}},
+{ 348000, 3, {80,75,58}},
+{ 348036, 3, {97,69,52}},
+{ 348040, 3, {113,56,55}},
+{ 348075, 3, {85,65,63}},
+{ 348084, 3, {293,36,33}},
+{ 348180, 3, {829,21,20}},
+{ 348192, 3, {78,72,62}},
+{ 348240, 3, {1451,16,15}},
+{ 348264, 3, {691,24,21}},
+{ 348300, 3, {86,75,54}},
+{ 348320, 3, {311,35,32}},
+{ 348400, 3, {80,67,65}},
+{ 348480, 3, {80,66,66}},
+{ 348516, 3, {461,28,27}},
+{ 348600, 3, {83,70,60}},
+{ 348612, 3, {139,57,44}},
+{ 348660, 3, {149,52,45}},
+{ 348705, 3, {105,81,41}},
+{ 348720, 3, {1453,16,15}},
+{ 348768, 3, {173,48,42}},
+{ 348800, 3, {109,64,50}},
+{ 348810, 3, {151,55,42}},
+{ 348840, 3, {85,72,57}},
+{ 348864, 3, {79,69,64}},
+{ 348920, 3, {88,65,61}},
+{ 349020, 3, {277,36,35}},
+{ 349044, 3, {87,68,59}},
+{ 349056, 3, {101,64,54}},
+{ 349104, 3, {1039,21,16}},
+{ 349125, 3, {95,75,49}},
+{ 349248, 3, {107,64,51}},
+{ 349272, 3, {77,72,63}},
+{ 349344, 3, {1213,18,16}},
+{ 349380, 3, {647,27,20}},
+{ 349440, 3, {78,70,64}},
+{ 349524, 3, {76,73,63}},
+{ 349536, 3, {331,33,32}},
+{ 349664, 3, {223,49,32}},
+{ 349713, 3, {91,63,61}},
+{ 349740, 3, {87,67,60}},
+{ 349800, 3, {88,75,53}},
+{ 349860, 3, {85,84,49}},
+{ 349888, 3, {77,71,64}},
+{ 349920, 3, {81,72,60}},
+{ 349965, 3, {101,63,55}},
+{ 349992, 3, {4861,9,8}},
+{ 350028, 3, {463,28,27}},
+{ 350160, 3, {1459,16,15}},
+{ 350196, 3, {379,33,28}},
+{ 350208, 3, {76,72,64}},
+{ 350280, 3, {139,56,45}},
+{ 350350, 3, {77,70,65}},
+{ 350400, 3, {75,73,64}},
+{ 350436, 3, {87,76,53}},
+{ 350448, 3, {149,49,48}},
+{ 350496, 3, {1217,18,16}},
+{ 350532, 3, {107,63,52}},
+{ 350560, 3, {313,35,32}},
+{ 350568, 3, {541,27,24}},
+{ 350592, 3, {83,66,64}},
+{ 350640, 3, {487,30,24}},
+{ 350676, 3, {191,51,36}},
+{ 350688, 3, {281,39,32}},
+{ 350712, 3, {4871,9,8}},
+{ 350784, 3, {87,64,63}},
+{ 350820, 3, {1949,15,12}},
+{ 350840, 3, {179,49,40}},
+{ 350856, 3, {443,33,24}},
+{ 350892, 3, {81,76,57}},
+{ 351000, 3, {75,72,65}},
+{ 351135, 3, {85,81,51}},
+{ 351144, 3, {4877,9,8}},
+{ 351168, 3, {93,64,59}},
+{ 351180, 3, {1951,15,12}},
+{ 351200, 3, {439,32,25}},
+{ 351225, 3, {223,45,35}},
+{ 351232, 3, {98,64,56}},
+{ 351288, 3, {82,68,63}},
+{ 351348, 3, {76,69,67}},
+{ 351351, 3, {99,91,39}},
+{ 351390, 3, {85,78,53}},
+{ 351400, 3, {251,40,35}},
+{ 351540, 3, {81,70,62}},
+{ 351624, 3, {91,69,56}},
+{ 351648, 3, {74,72,66}},
+{ 351675, 3, {521,27,25}},
+{ 351780, 3, {82,66,65}},
+{ 351900, 3, {75,69,68}},
+{ 351945, 3, {81,79,55}},
+{ 352000, 3, {80,80,55}},
+{ 352008, 3, {4889,9,8}},
+{ 352044, 3, {127,63,44}},
+{ 352080, 3, {163,48,45}},
+{ 352170, 3, {86,65,63}},
+{ 352176, 3, {88,69,58}},
+{ 352200, 3, {587,25,24}},
+{ 352224, 3, {1223,18,16}},
+{ 352260, 3, {103,60,57}},
+{ 352275, 3, {77,75,61}},
+{ 352308, 3, {157,51,44}},
+{ 352320, 3, {367,32,30}},
+{ 352350, 3, {81,75,58}},
+{ 352359, 3, {119,63,47}},
+{ 352380, 3, {839,21,20}},
+{ 352404, 3, {251,39,36}},
+{ 352464, 3, {1049,21,16}},
+{ 352485, 3, {373,35,27}},
+{ 352620, 3, {653,27,20}},
+{ 352625, 3, {125,91,31}},
+{ 352716, 3, {91,68,57}},
+{ 352728, 3, {72,71,69}},
+{ 352755, 3, {81,67,65}},
+{ 352800, 3, {72,70,70}},
+{ 352920, 3, {173,51,40}},
+{ 352944, 3, {86,72,57}},
+{ 353016, 3, {4903,9,8}},
+{ 353025, 3, {523,27,25}},
+{ 353040, 3, {1471,16,15}},
+{ 353052, 3, {467,28,27}},
+{ 353080, 3, {97,65,56}},
+{ 353100, 3, {107,60,55}},
+{ 353115, 3, {95,63,59}},
+{ 353136, 3, {1051,21,16}},
+{ 353184, 3, {283,39,32}},
+{ 353280, 3, {80,69,64}},
+{ 353304, 3, {701,24,21}},
+{ 353340, 3, {151,52,45}},
+{ 353376, 3, {409,32,27}},
+{ 353400, 3, {76,75,62}},
+{ 353430, 3, {85,66,63}},
+{ 353448, 3, {4909,9,8}},
+{ 353472, 3, {263,42,32}},
+{ 353520, 3, {491,30,24}},
+{ 353556, 3, {84,69,61}},
+{ 353584, 3, {82,77,56}},
+{ 353600, 3, {80,68,65}},
+{ 353664, 3, {307,36,32}},
+{ 353700, 3, {131,54,50}},
+{ 353760, 3, {80,67,66}},
+{ 353808, 3, {78,72,63}},
+{ 353850, 3, {337,35,30}},
+{ 353856, 3, {97,64,57}},
+{ 353892, 3, {383,33,28}},
+{ 353920, 3, {79,70,64}},
+{ 353925, 3, {99,65,55}},
+{ 353952, 3, {1229,18,16}},
+{ 354000, 3, {80,75,59}},
+{ 354060, 3, {281,36,35}},
+{ 354120, 3, {227,40,39}},
+{ 354123, 3, {77,73,63}},
+{ 354150, 3, {787,25,18}},
+{ 354168, 3, {4919,9,8}},
+{ 354312, 3, {76,74,63}},
+{ 354348, 3, {193,51,36}},
+{ 354384, 3, {107,69,48}},
+{ 354400, 3, {443,32,25}},
+{ 354420, 3, {179,45,44}},
+{ 354432, 3, {78,71,64}},
+{ 354456, 3, {547,27,24}},
+{ 354480, 3, {211,42,40}},
+{ 354510, 3, {101,65,54}},
+{ 354528, 3, {1231,18,16}},
+{ 354600, 3, {197,45,40}},
+{ 354640, 3, {88,65,62}},
+{ 354760, 3, {181,49,40}},
+{ 354780, 3, {81,73,60}},
+{ 354816, 3, {77,72,64}},
+{ 354888, 3, {93,72,53}},
+{ 354960, 3, {87,68,60}},
+{ 355032, 3, {4931,9,8}},
+{ 355040, 3, {317,35,32}},
+{ 355080, 3, {269,40,33}},
+{ 355104, 3, {137,54,48}},
+{ 355140, 3, {1973,15,12}},
+{ 355152, 3, {151,49,48}},
+{ 355176, 3, {4933,9,8}},
+{ 355200, 3, {75,74,64}},
+{ 355250, 3, {125,58,49}},
+{ 355264, 3, {91,64,61}},
+{ 355320, 3, {94,63,60}},
+{ 355440, 3, {1481,16,15}},
+{ 355446, 3, {91,63,62}},
+{ 355464, 3, {4937,9,8}},
+{ 355488, 3, {92,69,56}},
+{ 355500, 3, {79,75,60}},
+{ 355509, 3, {81,77,57}},
+{ 355520, 3, {101,64,55}},
+{ 355572, 3, {83,68,63}},
+{ 355608, 3, {449,33,24}},
+{ 355680, 3, {76,72,65}},
+{ 355740, 3, {77,70,66}},
+{ 355752, 3, {81,72,61}},
+{ 355776, 3, {109,64,51}},
+{ 355800, 3, {593,25,24}},
+{ 355860, 3, {659,27,20}},
+{ 355872, 3, {337,33,32}},
+{ 355887, 3, {269,49,27}},
+{ 355896, 3, {4943,9,8}},
+{ 355920, 3, {1483,16,15}},
+{ 355936, 3, {227,49,32}},
+{ 355968, 3, {103,64,54}},
+{ 356040, 3, {86,69,60}},
+{ 356070, 3, {83,66,65}},
+{ 356125, 3, {125,77,37}},
+{ 356160, 3, {84,80,53}},
+{ 356220, 3, {1979,15,12}},
+{ 356256, 3, {1237,18,16}},
+{ 356265, 3, {87,65,63}},
+{ 356328, 3, {101,63,56}},
+{ 356352, 3, {87,64,64}},
+{ 356400, 3, {75,72,66}},
+{ 356472, 3, {4951,9,8}},
+{ 356475, 3, {97,75,49}},
+{ 356496, 3, {1061,21,16}},
+{ 356580, 3, {283,36,35}},
+{ 356592, 3, {76,69,68}},
+{ 356720, 3, {91,70,56}},
+{ 356796, 3, {99,68,53}},
+{ 356880, 3, {1487,16,15}},
+{ 356895, 3, {103,63,55}},
+{ 356904, 3, {4957,9,8}},
+{ 356928, 3, {88,78,52}},
+{ 356940, 3, {661,27,20}},
+{ 357000, 3, {75,70,68}},
+{ 357048, 3, {81,76,58}},
+{ 357084, 3, {109,63,52}},
+{ 357168, 3, {1063,21,16}},
+{ 357210, 3, {81,70,63}},
+{ 357240, 3, {229,40,39}},
+{ 357280, 3, {80,77,58}},
+{ 357336, 3, {709,24,21}},
+{ 357360, 3, {1489,16,15}},
+{ 357390, 3, {95,66,57}},
+{ 357525, 3, {227,45,35}},
+{ 357552, 3, {191,48,39}},
+{ 357600, 3, {149,50,48}},
+{ 357624, 3, {4967,9,8}},
+{ 357630, 3, {131,65,42}},
+{ 357660, 3, {1987,15,12}},
+{ 357696, 3, {72,72,69}},
+{ 357720, 3, {271,40,33}},
+{ 357760, 3, {86,65,64}},
+{ 357768, 3, {4969,9,8}},
+{ 357840, 3, {72,71,70}},
+{ 357896, 3, {83,77,56}},
+{ 357960, 3, {157,57,40}},
+{ 357984, 3, {113,66,48}},
+{ 358020, 3, {81,68,65}},
+{ 358050, 3, {77,75,62}},
+{ 358056, 3, {4973,9,8}},
+{ 358080, 3, {373,32,30}},
+{ 358092, 3, {87,84,49}},
+{ 358155, 3, {379,35,27}},
+{ 358176, 3, {82,78,56}},
+{ 358200, 3, {199,45,40}},
+{ 358248, 3, {88,69,59}},
+{ 358260, 3, {853,21,20}},
+{ 358272, 3, {311,36,32}},
+{ 358320, 3, {1493,16,15}},
+{ 358344, 3, {79,72,63}},
+{ 358380, 3, {181,45,44}},
+{ 358400, 3, {80,70,64}},
+{ 358416, 3, {131,57,48}},
+{ 358425, 3, {81,75,59}},
+{ 358512, 3, {97,66,56}},
+{ 358533, 3, {271,49,27}},
+{ 358644, 3, {121,57,52}},
+{ 358650, 3, {797,25,18}},
+{ 358740, 3, {1993,15,12}},
+{ 358785, 3, {85,67,63}},
+{ 358800, 3, {80,69,65}},
+{ 358848, 3, {89,64,63}},
+{ 358974, 3, {77,74,63}},
+{ 359040, 3, {80,68,66}},
+{ 359064, 3, {4987,9,8}},
+{ 359072, 3, {229,49,32}},
+{ 359100, 3, {76,75,63}},
+{ 359184, 3, {1069,21,16}},
+{ 359200, 3, {449,32,25}},
+{ 359268, 3, {91,84,47}},
+{ 359280, 3, {499,30,24}},
+{ 359352, 3, {84,69,62}},
+{ 359400, 3, {599,25,24}},
+{ 359415, 3, {163,49,45}},
+{ 359424, 3, {78,72,64}},
+{ 359436, 3, {389,33,28}},
+{ 359460, 3, {1997,15,12}},
+{ 359496, 3, {4993,9,8}},
+{ 359640, 3, {81,74,60}},
+{ 359700, 3, {109,60,55}},
+{ 359712, 3, {1249,18,16}},
+{ 359744, 3, {77,73,64}},
+{ 359760, 3, {1499,16,15}},
+{ 359800, 3, {257,40,35}},
+{ 359820, 3, {1999,15,12}},
+{ 359856, 3, {84,68,63}},
+{ 359928, 3, {4999,9,8}},
+{ 359940, 3, {857,21,20}},
+{ 360000, 3, {75,75,64}},
+{ 360150, 3, {98,75,49}},
+{ 360180, 3, {87,69,60}},
+{ 360192, 3, {84,67,64}},
+{ 360216, 3, {5003,9,8}},
+{ 360288, 3, {139,54,48}},
+{ 360400, 3, {85,80,53}},
+{ 360450, 3, {89,75,54}},
+{ 360468, 3, {93,68,57}},
+{ 360540, 3, {2003,15,12}},
+{ 360576, 3, {313,36,32}},
+{ 360600, 3, {601,25,24}},
+{ 360612, 3, {84,81,53}},
+{ 360648, 3, {5009,9,8}},
+{ 360675, 3, {229,45,35}},
+{ 360696, 3, {113,57,56}},
+{ 360720, 3, {167,48,45}},
+{ 360780, 3, {859,21,20}},
+{ 360792, 3, {5011,9,8}},
+{ 360800, 3, {82,80,55}},
+{ 360828, 3, {257,39,36}},
+{ 360855, 3, {81,81,55}},
+{ 360864, 3, {179,48,42}},
+{ 360876, 3, {87,68,61}},
+{ 360936, 3, {557,27,24}},
+{ 360960, 3, {94,64,60}},
+{ 361008, 3, {109,69,48}},
+{ 361080, 3, {85,72,59}},
+{ 361088, 3, {91,64,62}},
+{ 361130, 3, {77,70,67}},
+{ 361152, 3, {76,72,66}},
+{ 361179, 3, {91,63,63}},
+{ 361200, 3, {86,70,60}},
+{ 361260, 3, {223,45,36}},
+{ 361284, 3, {77,69,68}},
+{ 361296, 3, {193,48,39}},
+{ 361375, 3, {125,59,49}},
+{ 361452, 3, {331,39,28}},
+{ 361512, 3, {5021,9,8}},
+{ 361530, 3, {103,65,54}},
+{ 361536, 3, {269,42,32}},
+{ 361584, 3, {81,72,62}},
+{ 361600, 3, {113,64,50}},
+{ 361656, 3, {5023,9,8}},
+{ 361665, 3, {95,81,47}},
+{ 361680, 3, {137,55,48}},
+{ 361692, 3, {197,51,36}},
+{ 361725, 3, {91,75,53}},
+{ 361746, 3, {81,77,58}},
+{ 361800, 3, {75,72,67}},
+{ 361816, 3, {91,71,56}},
+{ 361836, 3, {76,69,69}},
+{ 361845, 3, {99,85,43}},
+{ 361920, 3, {80,78,58}},
+{ 361935, 3, {383,35,27}},
+{ 361944, 3, {457,33,24}},
+{ 361980, 3, {2011,15,12}},
+{ 362016, 3, {419,32,27}},
+{ 362076, 3, {211,44,39}},
+{ 362100, 3, {75,71,68}},
+{ 362112, 3, {82,69,64}},
+{ 362124, 3, {479,28,27}},
+{ 362160, 3, {503,30,24}},
+{ 362208, 3, {84,77,56}},
+{ 362376, 3, {719,24,21}},
+{ 362388, 3, {101,69,52}},
+{ 362400, 3, {151,50,48}},
+{ 362460, 3, {863,21,20}},
+{ 362502, 3, {137,54,49}},
+{ 362544, 3, {83,78,56}},
+{ 362560, 3, {103,64,55}},
+{ 362592, 3, {1259,18,16}},
+{ 362610, 3, {85,79,54}},
+{ 362640, 3, {1511,16,15}},
+{ 362664, 3, {73,72,69}},
+{ 362670, 3, {157,55,42}},
+{ 362712, 3, {127,56,51}},
+{ 362808, 3, {5039,9,8}},
+{ 362880, 3, {72,72,70}},
+{ 363000, 3, {88,75,55}},
+{ 363060, 3, {2017,15,12}},
+{ 363072, 3, {93,64,61}},
+{ 363090, 3, {91,70,57}},
+{ 363132, 3, {131,63,44}},
+{ 363204, 3, {81,76,59}},
+{ 363216, 3, {94,69,56}},
+{ 363264, 3, {86,66,64}},
+{ 363285, 3, {81,69,65}},
+{ 363312, 3, {87,72,58}},
+{ 363324, 3, {137,52,51}},
+{ 363384, 3, {103,63,56}},
+{ 363420, 3, {673,27,20}},
+{ 363440, 3, {80,77,59}},
+{ 363480, 3, {233,40,39}},
+{ 363528, 3, {81,68,66}},
+{ 363660, 3, {87,76,55}},
+{ 363672, 3, {5051,9,8}},
+{ 363744, 3, {421,32,27}},
+{ 363776, 3, {98,64,58}},
+{ 363792, 3, {88,78,53}},
+{ 363825, 3, {77,75,63}},
+{ 363840, 3, {379,32,30}},
+{ 363888, 3, {76,76,63}},
+{ 364000, 3, {80,70,65}},
+{ 364032, 3, {79,72,64}},
+{ 364050, 3, {809,25,18}},
+{ 364140, 3, {85,68,63}},
+{ 364200, 3, {607,25,24}},
+{ 364224, 3, {271,42,32}},
+{ 364248, 3, {5059,9,8}},
+{ 364320, 3, {80,69,66}},
+{ 364344, 3, {94,68,57}},
+{ 364350, 3, {347,35,30}},
+{ 364416, 3, {78,73,64}},
+{ 364455, 3, {89,65,63}},
+{ 364500, 3, {81,75,60}},
+{ 364650, 3, {85,66,65}},
+{ 364672, 3, {77,74,64}},
+{ 364716, 3, {307,36,33}},
+{ 364752, 3, {149,51,48}},
+{ 364800, 3, {76,75,64}},
+{ 364824, 3, {563,27,24}},
+{ 364860, 3, {2027,15,12}},
+{ 364896, 3, {181,48,42}},
+{ 364905, 3, {85,81,53}},
+{ 364950, 3, {811,25,18}},
+{ 365040, 3, {78,72,65}},
+{ 365050, 3, {149,50,49}},
+{ 365085, 3, {95,63,61}},
+{ 365112, 3, {461,33,24}},
+{ 365148, 3, {84,69,63}},
+{ 365160, 3, {179,51,40}},
+{ 365175, 3, {541,27,25}},
+{ 365184, 3, {317,36,32}},
+{ 365200, 3, {83,80,55}},
+{ 365220, 3, {2029,15,12}},
+{ 365232, 3, {1087,21,16}},
+{ 365256, 3, {89,72,57}},
+{ 365310, 3, {82,81,55}},
+{ 365344, 3, {233,49,32}},
+{ 365364, 3, {199,51,36}},
+{ 365400, 3, {84,75,58}},
+{ 365520, 3, {1523,16,15}},
+{ 365544, 3, {5077,9,8}},
+{ 365568, 3, {84,68,64}},
+{ 365580, 3, {677,27,20}},
+{ 365600, 3, {457,32,25}},
+{ 365640, 3, {277,40,33}},
+{ 365664, 3, {293,39,32}},
+{ 365700, 3, {92,75,53}},
+{ 365715, 3, {105,81,43}},
+{ 365760, 3, {127,60,48}},
+{ 365772, 3, {163,51,44}},
+{ 365832, 3, {5081,9,8}},
+{ 365904, 3, {77,72,66}},
+{ 365940, 3, {107,60,57}},
+{ 365976, 3, {78,69,68}},
+{ 366000, 3, {80,75,61}},
+{ 366080, 3, {88,65,64}},
+{ 366264, 3, {5087,9,8}},
+{ 366408, 3, {727,24,21}},
+{ 366432, 3, {347,33,32}},
+{ 366450, 3, {349,35,30}},
+{ 366471, 3, {277,49,27}},
+{ 366480, 3, {509,30,24}},
+{ 366520, 3, {77,70,68}},
+{ 366528, 3, {83,69,64}},
+{ 366576, 3, {1091,21,16}},
+{ 366600, 3, {94,65,60}},
+{ 366660, 3, {97,63,60}},
+{ 366696, 3, {463,33,24}},
+{ 366792, 3, {87,68,62}},
+{ 366795, 3, {99,65,57}},
+{ 366828, 3, {397,33,28}},
+{ 366912, 3, {91,64,63}},
+{ 366960, 3, {139,55,48}},
+{ 366975, 3, {233,45,35}},
+{ 367020, 3, {2039,15,12}},
+{ 367080, 3, {76,70,69}},
+{ 367128, 3, {5099,9,8}},
+{ 367200, 3, {75,72,68}},
+{ 367248, 3, {1093,21,16}},
+{ 367272, 3, {5101,9,8}},
+{ 367290, 3, {90,77,53}},
+{ 367353, 3, {119,63,49}},
+{ 367360, 3, {82,70,64}},
+{ 367380, 3, {157,52,45}},
+{ 367416, 3, {81,72,63}},
+{ 367440, 3, {1531,16,15}},
+{ 367488, 3, {87,66,64}},
+{ 367605, 3, {389,35,27}},
+{ 367632, 3, {74,72,69}},
+{ 367640, 3, {101,65,56}},
+{ 367680, 3, {383,32,30}},
+{ 367704, 3, {5107,9,8}},
+{ 367740, 3, {227,45,36}},
+{ 367776, 3, {1277,18,16}},
+{ 367794, 3, {139,54,49}},
+{ 367800, 3, {613,25,24}},
+{ 367920, 3, {73,72,70}},
+{ 367983, 3, {81,77,59}},
+{ 368004, 3, {337,39,28}},
+{ 368136, 3, {5113,9,8}},
+{ 368160, 3, {80,78,59}},
+{ 368172, 3, {487,28,27}},
+{ 368200, 3, {263,40,35}},
+{ 368235, 3, {167,49,45}},
+{ 368340, 3, {877,21,20}},
+{ 368352, 3, {1279,18,16}},
+{ 368424, 3, {86,68,63}},
+{ 368448, 3, {101,64,57}},
+{ 368460, 3, {89,69,60}},
+{ 368544, 3, {349,33,32}},
+{ 368568, 3, {5119,9,8}},
+{ 368592, 3, {1097,21,16}},
+{ 368628, 3, {139,52,51}},
+{ 368640, 3, {80,72,64}},
+{ 368676, 3, {77,76,63}},
+{ 368712, 3, {569,27,24}},
+{ 368775, 3, {149,55,45}},
+{ 368784, 3, {197,48,39}},
+{ 368800, 3, {461,32,25}},
+{ 368820, 3, {683,27,20}},
+{ 368832, 3, {113,64,51}},
+{ 368880, 3, {87,80,53}},
+{ 368940, 3, {86,66,65}},
+{ 369000, 3, {82,75,60}},
+{ 369024, 3, {93,64,62}},
+{ 369036, 3, {81,68,67}},
+{ 369180, 3, {293,36,35}},
+{ 369200, 3, {80,71,65}},
+{ 369225, 3, {547,27,25}},
+{ 369240, 3, {181,51,40}},
+{ 369252, 3, {263,39,36}},
+{ 369264, 3, {157,49,48}},
+{ 369360, 3, {81,76,60}},
+{ 369369, 3, {99,91,41}},
+{ 369408, 3, {78,74,64}},
+{ 369432, 3, {733,24,21}},
+{ 369450, 3, {821,25,18}},
+{ 369460, 3, {91,70,58}},
+{ 369468, 3, {311,36,33}},
+{ 369495, 3, {85,69,63}},
+{ 369504, 3, {1283,18,16}},
+{ 369540, 3, {2053,15,12}},
+{ 369564, 3, {103,69,52}},
+{ 369576, 3, {87,72,59}},
+{ 369600, 3, {77,75,64}},
+{ 369648, 3, {151,51,48}},
+{ 369720, 3, {79,72,65}},
+{ 369765, 3, {83,81,55}},
+{ 369792, 3, {107,64,54}},
+{ 369840, 3, {80,69,67}},
+{ 369864, 3, {467,33,24}},
+{ 369900, 3, {137,54,50}},
+{ 369930, 3, {95,66,59}},
+{ 369950, 3, {151,50,49}},
+{ 370008, 3, {571,27,24}},
+{ 370020, 3, {881,21,20}},
+{ 370048, 3, {98,64,59}},
+{ 370188, 3, {113,63,52}},
+{ 370200, 3, {617,25,24}},
+{ 370240, 3, {89,65,64}},
+{ 370260, 3, {85,66,66}},
+{ 370320, 3, {1543,16,15}},
+{ 370350, 3, {823,25,18}},
+{ 370392, 3, {88,69,61}},
+{ 370400, 3, {463,32,25}},
+{ 370500, 3, {76,75,65}},
+{ 370524, 3, {401,33,28}},
+{ 370575, 3, {81,75,61}},
+{ 370584, 3, {5147,9,8}},
+{ 370608, 3, {1103,21,16}},
+{ 370620, 3, {87,71,60}},
+{ 370650, 3, {353,35,30}},
+{ 370656, 3, {78,72,66}},
+{ 370668, 3, {79,69,68}},
+{ 370720, 3, {331,35,32}},
+{ 370755, 3, {107,63,55}},
+{ 370832, 3, {86,77,56}},
+{ 370860, 3, {883,21,20}},
+{ 370920, 3, {281,40,33}},
+{ 370944, 3, {84,69,64}},
+{ 370980, 3, {229,45,36}},
+{ 371016, 3, {5153,9,8}},
+{ 371070, 3, {95,63,62}},
+{ 371175, 3, {101,75,49}},
+{ 371196, 3, {491,28,27}},
+{ 371232, 3, {1289,18,16}},
+{ 371340, 3, {2063,15,12}},
+{ 371400, 3, {619,25,24}},
+{ 371448, 3, {77,72,67}},
+{ 371475, 3, {127,65,45}},
+{ 371640, 3, {163,57,40}},
+{ 371700, 3, {84,75,59}},
+{ 371712, 3, {88,66,64}},
+{ 371760, 3, {1549,16,15}},
+{ 371763, 3, {281,49,27}},
+{ 371790, 3, {85,81,54}},
+{ 371800, 3, {88,65,65}},
+{ 371808, 3, {1291,18,16}},
+{ 371840, 3, {83,70,64}},
+{ 371844, 3, {313,36,33}},
+{ 371910, 3, {77,70,69}},
+{ 371952, 3, {82,72,63}},
+{ 372000, 3, {80,75,62}},
+{ 372008, 3, {91,73,56}},
+{ 372024, 3, {5167,9,8}},
+{ 372150, 3, {827,25,18}},
+{ 372288, 3, {277,42,32}},
+{ 372300, 3, {75,73,68}},
+{ 372312, 3, {5171,9,8}},
+{ 372324, 3, {76,71,69}},
+{ 372384, 3, {431,32,27}},
+{ 372420, 3, {2069,15,12}},
+{ 372456, 3, {739,24,21}},
+{ 372480, 3, {97,64,60}},
+{ 372528, 3, {199,48,39}},
+{ 372540, 3, {887,21,20}},
+{ 372600, 3, {75,72,69}},
+{ 372624, 3, {1109,21,16}},
+{ 372645, 3, {91,65,63}},
+{ 372708, 3, {87,68,63}},
+{ 372720, 3, {1553,16,15}},
+{ 372736, 3, {91,64,64}},
+{ 372768, 3, {353,33,32}},
+{ 372780, 3, {109,60,57}},
+{ 372840, 3, {239,40,39}},
+{ 372888, 3, {5179,9,8}},
+{ 372900, 3, {113,60,55}},
+{ 372960, 3, {74,72,70}},
+{ 373050, 3, {829,25,18}},
+{ 373056, 3, {87,67,64}},
+{ 373116, 3, {93,68,59}},
+{ 373140, 3, {691,27,20}},
+{ 373230, 3, {87,66,65}},
+{ 373296, 3, {101,66,56}},
+{ 373320, 3, {85,72,61}},
+{ 373380, 3, {127,60,49}},
+{ 373440, 3, {389,32,30}},
+{ 373464, 3, {78,76,63}},
+{ 373500, 3, {83,75,60}},
+{ 373527, 3, {77,77,63}},
+{ 373536, 3, {1297,18,16}},
+{ 373560, 3, {283,40,33}},
+{ 373600, 3, {467,32,25}},
+{ 373608, 3, {5189,9,8}},
+{ 373625, 3, {125,61,49}},
+{ 373680, 3, {173,48,45}},
+{ 373692, 3, {149,57,44}},
+{ 373725, 3, {151,55,45}},
+{ 373800, 3, {89,70,60}},
+{ 373815, 3, {81,71,65}},
+{ 373896, 3, {577,27,24}},
+{ 374000, 3, {85,80,55}},
+{ 374010, 3, {137,65,42}},
+{ 374112, 3, {433,32,27}},
+{ 374136, 3, {131,56,51}},
+{ 374160, 3, {1559,16,15}},
+{ 374184, 3, {5197,9,8}},
+{ 374220, 3, {81,70,66}},
+{ 374256, 3, {113,69,48}},
+{ 374360, 3, {191,49,40}},
+{ 374400, 3, {78,75,64}},
+{ 374409, 3, {283,49,27}},
+{ 374472, 3, {743,24,21}},
+{ 374528, 3, {77,76,64}},
+{ 374544, 3, {81,68,68}},
+{ 374556, 3, {91,84,49}},
+{ 374580, 3, {2081,15,12}},
+{ 374604, 3, {93,76,53}},
+{ 374640, 3, {223,42,40}},
+{ 374688, 3, {1301,18,16}},
+{ 374748, 3, {167,51,44}},
+{ 374752, 3, {239,49,32}},
+{ 374808, 3, {97,69,56}},
+{ 374832, 3, {137,57,48}},
+{ 374850, 3, {85,70,63}},
+{ 374880, 3, {80,71,66}},
+{ 374920, 3, {103,65,56}},
+{ 374940, 3, {2083,15,12}},
+{ 375048, 3, {5209,9,8}},
+{ 375120, 3, {521,30,24}},
+{ 375144, 3, {84,77,58}},
+{ 375165, 3, {397,35,27}},
+{ 375200, 3, {80,70,67}},
+{ 375264, 3, {1303,18,16}},
+{ 375300, 3, {139,54,50}},
+{ 375312, 3, {1117,21,16}},
+{ 375360, 3, {80,69,68}},
+{ 375375, 3, {77,75,65}},
+{ 375408, 3, {79,72,66}},
+{ 375480, 3, {149,56,45}},
+{ 375516, 3, {81,76,61}},
+{ 375570, 3, {107,65,54}},
+{ 375648, 3, {86,78,56}},
+{ 375660, 3, {2087,15,12}},
+{ 375744, 3, {103,64,57}},
+{ 375760, 3, {80,77,61}},
+{ 375830, 3, {91,70,59}},
+{ 375840, 3, {81,80,58}},
+{ 375870, 3, {85,67,66}},
+{ 375921, 3, {91,81,51}},
+{ 375936, 3, {89,66,64}},
+{ 375960, 3, {241,40,39}},
+{ 375972, 3, {97,68,57}},
+{ 375975, 3, {557,27,25}},
+{ 376020, 3, {2089,15,12}},
+{ 376080, 3, {1567,16,15}},
+{ 376200, 3, {76,75,66}},
+{ 376272, 3, {78,72,67}},
+{ 376320, 3, {84,70,64}},
+{ 376344, 3, {5227,9,8}},
+{ 376380, 3, {85,82,54}},
+{ 376416, 3, {1307,18,16}},
+{ 376425, 3, {239,45,35}},
+{ 376428, 3, {127,57,52}},
+{ 376464, 3, {88,69,62}},
+{ 376488, 3, {83,72,63}},
+{ 376530, 3, {163,55,42}},
+{ 376560, 3, {523,30,24}},
+{ 376596, 3, {317,36,33}},
+{ 376600, 3, {269,40,35}},
+{ 376632, 3, {5231,9,8}},
+{ 376640, 3, {107,64,55}},
+{ 376650, 3, {81,75,62}},
+{ 376704, 3, {109,64,54}},
+{ 376776, 3, {5233,9,8}},
+{ 376800, 3, {157,50,48}},
+{ 376884, 3, {87,76,57}},
+{ 376950, 3, {359,35,30}},
+{ 376992, 3, {77,72,68}},
+{ 377040, 3, {1571,16,15}},
+{ 377055, 3, {95,63,63}},
+{ 377064, 3, {5237,9,8}},
+{ 377104, 3, {91,74,56}},
+{ 377190, 3, {127,55,54}},
+{ 377244, 3, {499,28,27}},
+{ 377280, 3, {131,60,48}},
+{ 377300, 3, {77,70,70}},
+{ 377328, 3, {1123,21,16}},
+{ 377400, 3, {75,74,68}},
+{ 377440, 3, {337,35,32}},
+{ 377460, 3, {233,45,36}},
+{ 377496, 3, {107,63,56}},
+{ 377520, 3, {88,66,65}},
+{ 377550, 3, {839,25,18}},
+{ 377568, 3, {76,72,69}},
+{ 377664, 3, {281,42,32}},
+{ 377676, 3, {269,39,36}},
+{ 377685, 3, {109,63,55}},
+{ 377784, 3, {88,81,53}},
+{ 377820, 3, {2099,15,12}},
+{ 377856, 3, {82,72,64}},
+{ 377888, 3, {241,49,32}},
+{ 377910, 3, {85,78,57}},
+{ 377916, 3, {409,33,28}},
+{ 378000, 3, {75,72,70}},
+{ 378180, 3, {191,45,44}},
+{ 378252, 3, {79,76,63}},
+{ 378280, 3, {193,49,40}},
+{ 378300, 3, {97,65,60}},
+{ 378378, 3, {78,77,63}},
+{ 378400, 3, {86,80,55}},
+{ 378420, 3, {85,84,53}},
+{ 378504, 3, {751,24,21}},
+{ 378525, 3, {103,75,49}},
+{ 378540, 3, {701,27,20}},
+{ 378560, 3, {91,65,64}},
+{ 378600, 3, {631,25,24}},
+{ 378624, 3, {87,68,64}},
+{ 378672, 3, {98,69,56}},
+{ 378675, 3, {85,81,55}},
+{ 378708, 3, {151,57,44}},
+{ 378792, 3, {5261,9,8}},
+{ 378924, 3, {347,39,28}},
+{ 378945, 3, {401,35,27}},
+{ 378960, 3, {1579,16,15}},
+{ 379008, 3, {94,64,63}},
+{ 379080, 3, {81,72,65}},
+{ 379104, 3, {359,33,32}},
+{ 379200, 3, {79,75,64}},
+{ 379236, 3, {143,52,51}},
+{ 379296, 3, {439,32,27}},
+{ 379344, 3, {1129,21,16}},
+{ 379368, 3, {479,33,24}},
+{ 379392, 3, {78,76,64}},
+{ 379400, 3, {271,40,35}},
+{ 379440, 3, {85,72,62}},
+{ 379456, 3, {77,77,64}},
+{ 379470, 3, {139,65,42}},
+{ 379500, 3, {92,75,55}},
+{ 379575, 3, {241,45,35}},
+{ 379600, 3, {80,73,65}},
+{ 379656, 3, {5273,9,8}},
+{ 379665, 3, {99,65,59}},
+{ 379750, 3, {125,62,49}},
+{ 379764, 3, {137,63,44}},
+{ 379776, 3, {86,69,64}},
+{ 379800, 3, {211,45,40}},
+{ 379848, 3, {98,68,57}},
+{ 379872, 3, {1319,18,16}},
+{ 379890, 3, {81,70,67}},
+{ 379920, 3, {1583,16,15}},
+{ 379980, 3, {2111,15,12}},
+{ 379995, 3, {105,77,47}},
+{ 380000, 3, {95,80,50}},
+{ 380025, 3, {563,27,25}},
+{ 380052, 3, {81,69,68}},
+{ 380088, 3, {5279,9,8}},
+{ 380160, 3, {80,72,66}},
+{ 380205, 3, {85,71,63}},
+{ 380232, 3, {5281,9,8}},
+{ 380268, 3, {503,28,27}},
+{ 380304, 3, {139,57,48}},
+{ 380340, 3, {2113,15,12}},
+{ 380352, 3, {283,42,32}},
+{ 380376, 3, {587,27,24}},
+{ 380448, 3, {1321,18,16}},
+{ 380457, 3, {81,77,61}},
+{ 380484, 3, {271,39,36}},
+{ 380520, 3, {151,56,45}},
+{ 380640, 3, {80,78,61}},
+{ 380688, 3, {103,66,56}},
+{ 380700, 3, {94,75,54}},
+{ 380760, 3, {167,57,40}},
+{ 380800, 3, {80,70,68}},
+{ 380835, 3, {93,65,63}},
+{ 380880, 3, {80,69,69}},
+{ 380928, 3, {93,64,64}},
+{ 380940, 3, {907,21,20}},
+{ 380970, 3, {85,83,54}},
+{ 381024, 3, {84,72,63}},
+{ 381060, 3, {87,73,60}},
+{ 381108, 3, {349,39,28}},
+{ 381120, 3, {397,32,30}},
+{ 381150, 3, {77,75,66}},
+{ 381276, 3, {89,68,63}},
+{ 381312, 3, {331,36,32}},
+{ 381360, 3, {227,42,40}},
+{ 381384, 3, {5297,9,8}},
+{ 381420, 3, {163,52,45}},
+{ 381465, 3, {173,49,45}},
+{ 381480, 3, {85,68,66}},
+{ 381528, 3, {757,24,21}},
+{ 381600, 3, {90,80,53}},
+{ 381612, 3, {84,77,59}},
+{ 381672, 3, {81,76,62}},
+{ 381696, 3, {84,71,64}},
+{ 381780, 3, {101,63,60}},
+{ 381810, 3, {89,66,65}},
+{ 381816, 3, {5303,9,8}},
+{ 381888, 3, {78,72,68}},
+{ 381900, 3, {76,75,67}},
+{ 381915, 3, {115,81,41}},
+{ 381920, 3, {80,77,62}},
+{ 382104, 3, {87,72,61}},
+{ 382140, 3, {193,45,44}},
+{ 382176, 3, {1327,18,16}},
+{ 382248, 3, {5309,9,8}},
+{ 382320, 3, {81,80,59}},
+{ 382347, 3, {119,63,51}},
+{ 382464, 3, {83,72,64}},
+{ 382470, 3, {95,66,61}},
+{ 382500, 3, {75,75,68}},
+{ 382536, 3, {77,72,69}},
+{ 382590, 3, {109,65,54}},
+{ 382592, 3, {98,64,61}},
+{ 382620, 3, {911,21,20}},
+{ 382668, 3, {223,44,39}},
+{ 382690, 3, {77,71,70}},
+{ 382720, 3, {92,65,64}},
+{ 382725, 3, {81,75,63}},
+{ 382752, 3, {443,32,27}},
+{ 382800, 3, {88,75,58}},
+{ 382812, 3, {76,73,69}},
+{ 382860, 3, {709,27,20}},
+{ 383040, 3, {76,72,70}},
+{ 383130, 3, {86,81,55}},
+{ 383136, 3, {307,39,32}},
+{ 383175, 3, {131,65,45}},
+{ 383200, 3, {479,32,25}},
+{ 383220, 3, {2129,15,12}},
+{ 383229, 3, {79,77,63}},
+{ 383240, 3, {88,67,65}},
+{ 383256, 3, {5323,9,8}},
+{ 383280, 3, {1597,16,15}},
+{ 383376, 3, {163,49,48}},
+{ 383400, 3, {75,72,71}},
+{ 383496, 3, {87,76,58}},
+{ 383544, 3, {761,24,21}},
+{ 383580, 3, {2131,15,12}},
+{ 383680, 3, {109,64,55}},
+{ 383724, 3, {99,68,57}},
+{ 383760, 3, {82,72,65}},
+{ 383768, 3, {89,77,56}},
+{ 383850, 3, {853,25,18}},
+{ 383916, 3, {107,69,52}},
+{ 383940, 3, {81,79,60}},
+{ 383976, 3, {5333,9,8}},
+{ 384000, 3, {80,75,64}},
+{ 384048, 3, {127,56,54}},
+{ 384075, 3, {569,27,25}},
+{ 384111, 3, {91,67,63}},
+{ 384192, 3, {87,69,64}},
+{ 384240, 3, {1601,16,15}},
+{ 384264, 3, {593,27,24}},
+{ 384300, 3, {84,75,61}},
+{ 384336, 3, {157,51,48}},
+{ 384345, 3, {81,73,65}},
+{ 384384, 3, {78,77,64}},
+{ 384540, 3, {87,68,65}},
+{ 384552, 3, {109,63,56}},
+{ 384600, 3, {641,25,24}},
+{ 384615, 3, {111,63,55}},
+{ 384650, 3, {157,50,49}},
+{ 384660, 3, {2137,15,12}},
+{ 384720, 3, {229,42,40}},
+{ 384744, 3, {82,69,68}},
+{ 384800, 3, {80,74,65}},
+{ 384804, 3, {509,28,27}},
+{ 384912, 3, {81,72,66}},
+{ 384930, 3, {94,65,63}},
+{ 384960, 3, {401,32,30}},
+{ 384984, 3, {5347,9,8}},
+{ 385056, 3, {191,48,42}},
+{ 385140, 3, {131,60,49}},
+{ 385272, 3, {5351,9,8}},
+{ 385280, 3, {86,70,64}},
+{ 385308, 3, {139,63,44}},
+{ 385350, 3, {367,35,30}},
+{ 385380, 3, {2141,15,12}},
+{ 385425, 3, {571,27,25}},
+{ 385440, 3, {80,73,66}},
+{ 385476, 3, {353,39,28}},
+{ 385560, 3, {81,70,68}},
+{ 385605, 3, {99,95,41}},
+{ 385650, 3, {857,25,18}},
+{ 385680, 3, {1607,16,15}},
+{ 385704, 3, {487,33,24}},
+{ 385740, 3, {2143,15,12}},
+{ 385764, 3, {93,68,61}},
+{ 385770, 3, {167,55,42}},
+{ 385776, 3, {94,72,57}},
+{ 385800, 3, {643,25,24}},
+{ 385840, 3, {91,80,53}},
+{ 385875, 3, {105,75,49}},
+{ 385980, 3, {919,21,20}},
+{ 386120, 3, {197,49,40}},
+{ 386160, 3, {1609,16,15}},
+{ 386208, 3, {149,54,48}},
+{ 386280, 3, {87,74,60}},
+{ 386400, 3, {80,70,69}},
+{ 386460, 3, {113,60,57}},
+{ 386505, 3, {409,35,27}},
+{ 386550, 3, {859,25,18}},
+{ 386640, 3, {179,48,45}},
+{ 386694, 3, {81,77,62}},
+{ 386736, 3, {1151,21,16}},
+{ 386760, 3, {293,40,33}},
+{ 386820, 3, {307,36,35}},
+{ 386880, 3, {80,78,62}},
+{ 386925, 3, {77,75,67}},
+{ 387000, 3, {86,75,60}},
+{ 387072, 3, {84,72,64}},
+{ 387090, 3, {85,69,66}},
+{ 387120, 3, {1613,16,15}},
+{ 387156, 3, {419,33,28}},
+{ 387180, 3, {239,45,36}},
+{ 387200, 3, {88,80,55}},
+{ 387296, 3, {91,76,56}},
+{ 387324, 3, {87,84,53}},
+{ 387387, 3, {99,91,43}},
+{ 387396, 3, {211,51,36}},
+{ 387408, 3, {1153,21,16}},
+{ 387432, 3, {5381,9,8}},
+{ 387504, 3, {78,72,69}},
+{ 387540, 3, {2153,15,12}},
+{ 387552, 3, {367,33,32}},
+{ 387576, 3, {769,24,21}},
+{ 387585, 3, {87,81,55}},
+{ 387600, 3, {76,75,68}},
+{ 387639, 3, {293,49,27}},
+{ 387800, 3, {277,40,35}},
+{ 387828, 3, {81,76,63}},
+{ 387840, 3, {101,64,60}},
+{ 387864, 3, {5387,9,8}},
+{ 387936, 3, {449,32,27}},
+{ 388056, 3, {76,74,69}},
+{ 388080, 3, {77,72,70}},
+{ 388128, 3, {311,39,32}},
+{ 388152, 3, {599,27,24}},
+{ 388200, 3, {647,25,24}},
+{ 388212, 3, {173,51,44}},
+{ 388224, 3, {337,36,32}},
+{ 388260, 3, {719,27,20}},
+{ 388284, 3, {131,57,52}},
+{ 388296, 3, {5393,9,8}},
+{ 388332, 3, {84,69,67}},
+{ 388350, 3, {863,25,18}},
+{ 388368, 3, {87,72,62}},
+{ 388440, 3, {83,72,65}},
+{ 388560, 3, {1619,16,15}},
+{ 388570, 3, {91,70,61}},
+{ 388575, 3, {157,55,45}},
+{ 388608, 3, {88,69,64}},
+{ 388620, 3, {127,60,51}},
+{ 388640, 3, {347,35,32}},
+{ 388728, 3, {5399,9,8}},
+{ 388740, 3, {95,66,62}},
+{ 388752, 3, {89,78,56}},
+{ 388800, 3, {75,72,72}},
+{ 388864, 3, {98,64,62}},
+{ 388872, 3, {491,33,24}},
+{ 388908, 3, {277,39,36}},
+{ 388960, 3, {88,68,65}},
+{ 388980, 3, {2161,15,12}},
+{ 389004, 3, {421,33,28}},
+{ 389025, 3, {95,65,63}},
+{ 389040, 3, {1621,16,15}},
+{ 389070, 3, {131,55,54}},
+{ 389088, 3, {193,48,42}},
+{ 389160, 3, {94,69,60}},
+{ 389232, 3, {102,72,53}},
+{ 389304, 3, {5407,9,8}},
+{ 389312, 3, {79,77,64}},
+{ 389340, 3, {103,63,60}},
+{ 389376, 3, {78,78,64}},
+{ 389400, 3, {88,75,59}},
+{ 389436, 3, {83,69,68}},
+{ 389448, 3, {601,27,24}},
+{ 389475, 3, {577,27,25}},
+{ 389480, 3, {107,65,56}},
+{ 389520, 3, {541,30,24}},
+{ 389532, 3, {227,44,39}},
+{ 389550, 3, {98,75,53}},
+{ 389592, 3, {773,24,21}},
+{ 389600, 3, {487,32,25}},
+{ 389610, 3, {81,74,65}},
+{ 389640, 3, {191,51,40}},
+{ 389664, 3, {82,72,66}},
+{ 389736, 3, {5413,9,8}},
+{ 389760, 3, {87,70,64}},
+{ 389844, 3, {91,68,63}},
+{ 390000, 3, {80,75,65}},
+{ 390024, 3, {5417,9,8}},
+{ 390040, 3, {199,49,40}},
+{ 390060, 3, {197,45,44}},
+{ 390096, 3, {86,72,63}},
+{ 390108, 3, {87,76,59}},
+{ 390150, 3, {85,85,54}},
+{ 390168, 3, {5419,9,8}},
+{ 390180, 3, {929,21,20}},
+{ 390208, 3, {91,67,64}},
+{ 390264, 3, {101,69,56}},
+{ 390336, 3, {107,64,57}},
+{ 390420, 3, {241,45,36}},
+{ 390456, 3, {87,68,66}},
+{ 390480, 3, {1627,16,15}},
+{ 390528, 3, {113,64,54}},
+{ 390600, 3, {84,75,62}},
+{ 390624, 3, {313,39,32}},
+{ 390663, 3, {91,81,53}},
+{ 390720, 3, {80,74,66}},
+{ 390744, 3, {81,72,67}},
+{ 390768, 3, {1163,21,16}},
+{ 390780, 3, {167,52,45}},
+{ 390880, 3, {349,35,32}},
+{ 390915, 3, {85,73,63}},
+{ 390960, 3, {181,48,45}},
+{ 391032, 3, {5431,9,8}},
+{ 391040, 3, {94,65,64}},
+{ 391068, 3, {81,71,68}},
+{ 391092, 3, {109,69,52}},
+{ 391104, 3, {97,64,63}},
+{ 391160, 3, {127,56,55}},
+{ 391170, 3, {85,78,59}},
+{ 391200, 3, {163,50,48}},
+{ 391230, 3, {81,70,69}},
+{ 391272, 3, {137,56,51}},
+{ 391392, 3, {151,54,48}},
+{ 391440, 3, {233,42,40}},
+{ 391464, 3, {5437,9,8}},
+{ 391476, 3, {101,68,57}},
+{ 391500, 3, {87,75,60}},
+{ 391545, 3, {113,63,55}},
+{ 391560, 3, {251,40,39}},
+{ 391600, 3, {89,80,55}},
+{ 391650, 3, {373,35,30}},
+{ 391752, 3, {5441,9,8}},
+{ 391755, 3, {105,91,41}},
+{ 391800, 3, {653,25,24}},
+{ 391860, 3, {311,36,35}},
+{ 391896, 3, {5443,9,8}},
+{ 391920, 3, {80,71,69}},
+{ 391968, 3, {1361,18,16}},
+{ 392000, 3, {80,70,70}},
+{ 392028, 3, {359,39,28}},
+{ 392088, 3, {93,68,62}},
+{ 392220, 3, {2179,15,12}},
+{ 392328, 3, {5449,9,8}},
+{ 392392, 3, {91,77,56}},
+{ 392445, 3, {85,81,57}},
+{ 392448, 3, {84,73,64}},
+{ 392472, 3, {79,72,69}},
+{ 392535, 3, {99,65,61}},
+{ 392580, 3, {727,27,20}},
+{ 392616, 3, {82,76,63}},
+{ 392640, 3, {409,32,30}},
+{ 392700, 3, {77,75,68}},
+{ 392730, 3, {95,78,53}},
+{ 392784, 3, {167,49,48}},
+{ 392800, 3, {491,32,25}},
+{ 392850, 3, {97,75,54}},
+{ 392880, 3, {1637,16,15}},
+{ 392931, 3, {81,77,63}},
+{ 392964, 3, {229,44,39}},
+{ 393024, 3, {89,69,64}},
+{ 393120, 3, {78,72,70}},
+{ 393225, 3, {107,75,49}},
+{ 393228, 3, {331,36,33}},
+{ 393300, 3, {76,75,69}},
+{ 393336, 3, {607,27,24}},
+{ 393360, 3, {149,55,48}},
+{ 393400, 3, {281,40,35}},
+{ 393456, 3, {1171,21,16}},
+{ 393470, 3, {77,73,70}},
+{ 393540, 3, {937,21,20}},
+{ 393568, 3, {251,49,32}},
+{ 393600, 3, {82,75,64}},
+{ 393624, 3, {77,72,71}},
+{ 393660, 3, {81,81,60}},
+{ 393696, 3, {1367,18,16}},
+{ 393720, 3, {193,51,40}},
+{ 393756, 3, {157,57,44}},
+{ 393792, 3, {293,42,32}},
+{ 393813, 3, {133,63,47}},
+{ 393840, 3, {547,30,24}},
+{ 393876, 3, {521,28,27}},
+{ 393888, 3, {373,33,32}},
+{ 393900, 3, {101,65,60}},
+{ 393912, 3, {5471,9,8}},
+{ 394020, 3, {199,45,44}},
+{ 394128, 3, {84,69,68}},
+{ 394200, 3, {75,73,72}},
+{ 394240, 3, {80,77,64}},
+{ 394254, 3, {149,54,49}},
+{ 394320, 3, {93,80,53}},
+{ 394344, 3, {5477,9,8}},
+{ 394368, 3, {79,78,64}},
+{ 394380, 3, {313,36,35}},
+{ 394400, 3, {85,80,58}},
+{ 394416, 3, {83,72,66}},
+{ 394440, 3, {173,57,40}},
+{ 394488, 3, {5479,9,8}},
+{ 394524, 3, {281,39,36}},
+{ 394548, 3, {84,77,61}},
+{ 394560, 3, {137,60,48}},
+{ 394625, 3, {125,77,41}},
+{ 394632, 3, {87,72,63}},
+{ 394650, 3, {877,25,18}},
+{ 394680, 3, {88,69,65}},
+{ 394695, 3, {179,49,45}},
+{ 394740, 3, {86,85,54}},
+{ 394776, 3, {5483,9,8}},
+{ 394800, 3, {94,70,60}},
+{ 394848, 3, {457,32,27}},
+{ 394875, 3, {81,75,65}},
+{ 394940, 3, {91,70,62}},
+{ 394956, 3, {92,81,53}},
+{ 394992, 3, {211,48,39}},
+{ 395010, 3, {95,66,63}},
+{ 395064, 3, {93,72,59}},
+{ 395148, 3, {149,52,51}},
+{ 395200, 3, {80,76,65}},
+{ 395208, 3, {499,33,24}},
+{ 395220, 3, {941,21,20}},
+{ 395280, 3, {81,80,61}},
+{ 395325, 3, {251,45,35}},
+{ 395328, 3, {87,71,64}},
+{ 395352, 3, {102,68,57}},
+{ 395360, 3, {353,35,32}},
+{ 395388, 3, {523,28,27}},
+{ 395400, 3, {659,25,24}},
+{ 395424, 3, {1373,18,16}},
+{ 395472, 3, {107,66,56}},
+{ 395505, 3, {99,85,47}},
+{ 395520, 3, {103,64,60}},
+{ 395577, 3, {91,69,63}},
+{ 395616, 3, {317,39,32}},
+{ 395640, 3, {157,56,45}},
+{ 395820, 3, {733,27,20}},
+{ 395955, 3, {419,35,27}},
+{ 396000, 3, {80,75,66}},
+{ 396032, 3, {91,68,64}},
+{ 396072, 3, {5501,9,8}},
+{ 396144, 3, {131,56,54}},
+{ 396165, 3, {105,77,49}},
+{ 396200, 3, {283,40,35}},
+{ 396216, 3, {5503,9,8}},
+{ 396225, 3, {587,27,25}},
+{ 396270, 3, {85,74,63}},
+{ 396288, 3, {86,72,64}},
+{ 396372, 3, {87,68,67}},
+{ 396440, 3, {88,85,53}},
+{ 396450, 3, {881,25,18}},
+{ 396480, 3, {84,80,59}},
+{ 396495, 3, {89,81,55}},
+{ 396504, 3, {5507,9,8}},
+{ 396540, 3, {2203,15,12}},
+{ 396576, 3, {81,72,68}},
+{ 396600, 3, {661,25,24}},
+{ 396630, 3, {113,65,54}},
+{ 396648, 3, {787,24,21}},
+{ 396704, 3, {92,77,56}},
+{ 396720, 3, {87,76,60}},
+{ 396760, 3, {109,65,56}},
+{ 396816, 3, {1181,21,16}},
+{ 396864, 3, {96,78,53}},
+{ 396900, 3, {81,70,70}},
+{ 396984, 3, {139,56,51}},
+{ 397056, 3, {94,66,64}},
+{ 397152, 3, {197,48,42}},
+{ 397188, 3, {99,68,59}},
+{ 397215, 3, {97,65,63}},
+{ 397224, 3, {613,27,24}},
+{ 397260, 3, {2207,15,12}},
+{ 397332, 3, {283,39,36}},
+{ 397341, 3, {119,63,53}},
+{ 397350, 3, {883,25,18}},
+{ 397368, 3, {5519,9,8}},
+{ 397404, 3, {83,76,63}},
+{ 397440, 3, {80,72,69}},
+{ 397488, 3, {91,78,56}},
+{ 397512, 3, {5521,9,8}},
+{ 397600, 3, {80,71,70}},
+{ 397632, 3, {109,64,57}},
+{ 397680, 3, {1657,16,15}},
+{ 397728, 3, {1381,18,16}},
+{ 397740, 3, {947,21,20}},
+{ 397760, 3, {113,64,55}},
+{ 397782, 3, {82,77,63}},
+{ 397800, 3, {78,75,68}},
+{ 397824, 3, {84,74,64}},
+{ 397845, 3, {421,35,27}},
+{ 397944, 3, {5527,9,8}},
+{ 397950, 3, {379,35,30}},
+{ 397992, 3, {103,69,56}},
+{ 398088, 3, {97,72,57}},
+{ 398112, 3, {88,78,58}},
+{ 398125, 3, {125,65,49}},
+{ 398160, 3, {79,72,70}},
+{ 398232, 3, {5531,9,8}},
+{ 398244, 3, {431,33,28}},
+{ 398304, 3, {461,32,27}},
+{ 398310, 3, {85,71,66}},
+{ 398340, 3, {2213,15,12}},
+{ 398376, 3, {503,33,24}},
+{ 398400, 3, {83,75,64}},
+{ 398412, 3, {93,68,63}},
+{ 398475, 3, {77,75,69}},
+{ 398520, 3, {82,81,60}},
+{ 398544, 3, {76,76,69}},
+{ 398640, 3, {151,55,48}},
+{ 398664, 3, {113,63,56}},
+{ 398720, 3, {89,70,64}},
+{ 398736, 3, {78,72,71}},
+{ 398772, 3, {99,76,53}},
+{ 398784, 3, {93,67,64}},
+{ 398820, 3, {85,69,68}},
+{ 398832, 3, {1187,21,16}},
+{ 398860, 3, {77,74,70}},
+{ 398970, 3, {93,66,65}},
+{ 399000, 3, {76,75,70}},
+{ 399024, 3, {163,51,48}},
+{ 399060, 3, {739,27,20}},
+{ 399105, 3, {181,49,45}},
+{ 399120, 3, {1663,16,15}},
+{ 399150, 3, {887,25,18}},
+{ 399168, 3, {77,72,72}},
+{ 399200, 3, {499,32,25}},
+{ 399228, 3, {103,68,57}},
+{ 399330, 3, {85,81,58}},
+{ 399350, 3, {163,50,49}},
+{ 399360, 3, {80,78,64}},
+{ 399420, 3, {317,36,35}},
+{ 399546, 3, {151,54,49}},
+{ 399600, 3, {75,74,72}},
+{ 399630, 3, {173,55,42}},
+{ 399735, 3, {105,81,47}},
+{ 399744, 3, {347,36,32}},
+{ 399780, 3, {2221,15,12}},
+{ 399816, 3, {617,27,24}},
+{ 399828, 3, {233,44,39}},
+{ 399924, 3, {84,69,69}},
+{ 400032, 3, {463,32,27}},
+{ 400080, 3, {1667,16,15}},
+{ 400092, 3, {433,33,28}},
+{ 400104, 3, {5557,9,8}},
+{ 400140, 3, {81,76,65}},
+{ 400200, 3, {92,75,58}},
+{ 400224, 3, {379,33,32}},
+{ 400260, 3, {953,21,20}},
+{ 400275, 3, {593,27,25}},
+{ 400320, 3, {139,60,48}},
+{ 400356, 3, {337,36,33}},
+{ 400400, 3, {80,77,65}},
+{ 400452, 3, {151,52,51}},
+{ 400500, 3, {89,75,60}},
+{ 400536, 3, {5563,9,8}},
+{ 400545, 3, {115,81,43}},
+{ 400560, 3, {1669,16,15}},
+{ 400575, 3, {109,75,49}},
+{ 400725, 3, {137,65,45}},
+{ 400752, 3, {88,69,66}},
+{ 400764, 3, {367,39,28}},
+{ 400800, 3, {167,50,48}},
+{ 400848, 3, {1193,21,16}},
+{ 400860, 3, {131,60,51}},
+{ 400896, 3, {87,72,64}},
+{ 400920, 3, {257,40,39}},
+{ 400950, 3, {81,75,66}},
+{ 400968, 3, {5569,9,8}},
+{ 400995, 3, {95,67,63}},
+{ 401016, 3, {84,77,62}},
+{ 401040, 3, {557,30,24}},
+{ 401112, 3, {619,27,24}},
+{ 401184, 3, {199,48,42}},
+{ 401200, 3, {85,80,59}},
+{ 401220, 3, {743,27,20}},
+{ 401256, 3, {5573,9,8}},
+{ 401280, 3, {80,76,66}},
+{ 401310, 3, {91,70,63}},
+{ 401400, 3, {223,45,40}},
+{ 401408, 3, {98,64,64}},
+{ 401436, 3, {84,81,59}},
+{ 401520, 3, {239,42,40}},
+{ 401580, 3, {97,69,60}},
+{ 401625, 3, {85,75,63}},
+{ 401676, 3, {179,51,44}},
+{ 401688, 3, {797,24,21}},
+{ 401700, 3, {103,65,60}},
+{ 401760, 3, {81,80,62}},
+{ 401832, 3, {5581,9,8}},
+{ 401856, 3, {91,69,64}},
+{ 401880, 3, {197,51,40}},
+{ 402000, 3, {80,75,67}},
+{ 402048, 3, {349,36,32}},
+{ 402080, 3, {359,35,32}},
+{ 402084, 3, {81,73,68}},
+{ 402150, 3, {383,35,30}},
+{ 402192, 3, {84,76,63}},
+{ 402240, 3, {419,32,30}},
+{ 402288, 3, {87,68,68}},
+{ 402300, 3, {149,54,50}},
+{ 402336, 3, {127,66,48}},
+{ 402400, 3, {503,32,25}},
+{ 402408, 3, {81,72,69}},
+{ 402480, 3, {86,72,65}},
+{ 402552, 3, {5591,9,8}},
+{ 402570, 3, {81,71,70}},
+{ 402584, 3, {91,79,56}},
+{ 402600, 3, {88,75,61}},
+{ 402633, 3, {83,77,63}},
+{ 402660, 3, {2237,15,12}},
+{ 402675, 3, {91,75,59}},
+{ 402696, 3, {94,68,63}},
+{ 402780, 3, {137,60,49}},
+{ 402800, 3, {95,80,53}},
+{ 402864, 3, {109,66,56}},
+{ 402876, 3, {93,76,57}},
+{ 402900, 3, {79,75,68}},
+{ 402912, 3, {1399,18,16}},
+{ 402960, 3, {80,73,69}},
+{ 402976, 3, {257,49,32}},
+{ 403020, 3, {2239,15,12}},
+{ 403128, 3, {509,33,24}},
+{ 403200, 3, {80,72,70}},
+{ 403260, 3, {94,66,65}},
+{ 403332, 3, {87,76,61}},
+{ 403380, 3, {83,81,60}},
+{ 403425, 3, {163,55,45}},
+{ 403480, 3, {131,56,55}},
+{ 403488, 3, {467,32,27}},
+{ 403512, 3, {86,69,68}},
+{ 403520, 3, {97,65,64}},
+{ 403536, 3, {1201,21,16}},
+{ 403680, 3, {87,80,58}},
+{ 403704, 3, {89,72,63}},
+{ 403740, 3, {2243,15,12}},
+{ 403788, 3, {77,76,69}},
+{ 403800, 3, {673,25,24}},
+{ 403920, 3, {85,72,66}},
+{ 404096, 3, {82,77,64}},
+{ 404160, 3, {421,32,30}},
+{ 404250, 3, {77,75,70}},
+{ 404325, 3, {599,27,25}},
+{ 404352, 3, {78,72,72}},
+{ 404415, 3, {99,95,43}},
+{ 404430, 3, {85,78,61}},
+{ 404448, 3, {383,33,32}},
+{ 404460, 3, {107,63,60}},
+{ 404700, 3, {76,75,71}},
+{ 404712, 3, {77,73,72}},
+{ 404736, 3, {93,68,64}},
+{ 404775, 3, {257,45,35}},
+{ 404800, 3, {92,80,55}},
+{ 404820, 3, {173,52,45}},
+{ 404856, 3, {5623,9,8}},
+{ 404880, 3, {241,42,40}},
+{ 404976, 3, {88,78,59}},
+{ 405000, 3, {75,75,72}},
+{ 405132, 3, {91,84,53}},
+{ 405180, 3, {2251,15,12}},
+{ 405240, 3, {307,40,33}},
+{ 405328, 3, {94,77,56}},
+{ 405360, 3, {563,30,24}},
+{ 405384, 3, {127,57,56}},
+{ 405405, 3, {81,77,65}},
+{ 405444, 3, {113,69,52}},
+{ 405450, 3, {90,85,53}},
+{ 405504, 3, {88,72,64}},
+{ 405540, 3, {751,27,20}},
+{ 405600, 3, {80,78,65}},
+{ 405636, 3, {439,33,28}},
+{ 405675, 3, {601,27,25}},
+{ 405720, 3, {84,70,69}},
+{ 405768, 3, {88,87,53}},
+{ 405792, 3, {1409,18,16}},
+{ 405960, 3, {199,51,40}},
+{ 406008, 3, {5639,9,8}},
+{ 406068, 3, {137,57,52}},
+{ 406120, 3, {88,71,65}},
+{ 406140, 3, {967,21,20}},
+{ 406152, 3, {5641,9,8}},
+{ 406161, 3, {307,49,27}},
+{ 406164, 3, {181,51,44}},
+{ 406200, 3, {677,25,24}},
+{ 406215, 3, {85,81,59}},
+{ 406272, 3, {92,69,64}},
+{ 406296, 3, {81,76,66}},
+{ 406320, 3, {1693,16,15}},
+{ 406400, 3, {127,64,50}},
+{ 406464, 3, {87,73,64}},
+{ 406560, 3, {80,77,66}},
+{ 406575, 3, {139,65,45}},
+{ 406584, 3, {5647,9,8}},
+{ 406620, 3, {251,45,36}},
+{ 406656, 3, {353,36,32}},
+{ 406770, 3, {149,65,42}},
+{ 406824, 3, {88,69,67}},
+{ 406872, 3, {5651,9,8}},
+{ 406890, 3, {137,55,54}},
+{ 406896, 3, {173,49,48}},
+{ 406944, 3, {157,54,48}},
+{ 406980, 3, {85,76,63}},
+{ 407016, 3, {5653,9,8}},
+{ 407025, 3, {81,75,67}},
+{ 407043, 3, {91,71,63}},
+{ 407100, 3, {92,75,59}},
+{ 407160, 3, {87,72,65}},
+{ 407200, 3, {509,32,25}},
+{ 407232, 3, {101,64,63}},
+{ 407280, 3, {1697,16,15}},
+{ 407295, 3, {431,35,27}},
+{ 407304, 3, {5657,9,8}},
+{ 407316, 3, {373,39,28}},
+{ 407376, 3, {82,72,69}},
+{ 407400, 3, {97,70,60}},
+{ 407448, 3, {5659,9,8}},
+{ 407484, 3, {84,77,63}},
+{ 407550, 3, {95,66,65}},
+{ 407568, 3, {1213,21,16}},
+{ 407592, 3, {81,74,68}},
+{ 407664, 3, {149,57,48}},
+{ 407680, 3, {91,70,64}},
+{ 407700, 3, {151,54,50}},
+{ 407736, 3, {809,24,21}},
+{ 407760, 3, {1699,16,15}},
+{ 407820, 3, {971,21,20}},
+{ 407835, 3, {95,81,53}},
+{ 407925, 3, {111,75,49}},
+{ 408000, 3, {80,75,68}},
+{ 408060, 3, {2267,15,12}},
+{ 408100, 3, {100,77,53}},
+{ 408120, 3, {179,57,40}},
+{ 408150, 3, {907,25,18}},
+{ 408168, 3, {5669,9,8}},
+{ 408204, 3, {87,69,68}},
+{ 408240, 3, {81,72,70}},
+{ 408420, 3, {2269,15,12}},
+{ 408450, 3, {389,35,30}},
+{ 408456, 3, {93,72,61}},
+{ 408480, 3, {80,74,69}},
+{ 408510, 3, {89,85,54}},
+{ 408576, 3, {84,76,64}},
+{ 408600, 3, {227,45,40}},
+{ 408660, 3, {139,60,49}},
+{ 408672, 3, {86,72,66}},
+{ 408744, 3, {811,24,21}},
+{ 408780, 3, {757,27,20}},
+{ 408800, 3, {80,73,70}},
+{ 408804, 3, {163,57,44}},
+{ 408816, 3, {167,51,48}},
+{ 408870, 3, {90,77,59}},
+{ 408888, 3, {631,27,24}},
+{ 408912, 3, {1217,21,16}},
+{ 408996, 3, {541,28,27}},
+{ 409024, 3, {83,77,64}},
+{ 409032, 3, {78,76,69}},
+{ 409050, 3, {101,75,54}},
+{ 409140, 3, {2273,15,12}},
+{ 409150, 3, {167,50,49}},
+{ 409176, 3, {5683,9,8}},
+{ 409185, 3, {433,35,27}},
+{ 409200, 3, {88,75,62}},
+{ 409332, 3, {443,33,28}},
+{ 409344, 3, {82,78,64}},
+{ 409428, 3, {223,51,36}},
+{ 409530, 3, {85,73,66}},
+{ 409608, 3, {5689,9,8}},
+{ 409640, 3, {77,76,70}},
+{ 409680, 3, {569,30,24}},
+{ 409725, 3, {607,27,25}},
+{ 409728, 3, {97,66,64}},
+{ 409800, 3, {683,25,24}},
+{ 409824, 3, {1423,18,16}},
+{ 409896, 3, {5693,9,8}},
+{ 409920, 3, {84,80,61}},
+{ 409944, 3, {87,76,62}},
+{ 409950, 3, {911,25,18}},
+{ 409968, 3, {78,73,72}},
+{ 410025, 3, {77,75,71}},
+{ 410040, 3, {85,72,67}},
+{ 410112, 3, {89,72,64}},
+{ 410124, 3, {239,44,39}},
+{ 410160, 3, {1709,16,15}},
+{ 410200, 3, {293,40,35}},
+{ 410256, 3, {77,74,72}},
+{ 410280, 3, {263,40,39}},
+{ 410340, 3, {977,21,20}},
+{ 410375, 3, {125,67,49}},
+{ 410400, 3, {76,75,72}},
+{ 410472, 3, {5701,9,8}},
+{ 410520, 3, {311,40,33}},
+{ 410571, 3, {133,63,49}},
+{ 410580, 3, {2281,15,12}},
+{ 410592, 3, {94,78,56}},
+{ 410640, 3, {87,80,59}},
+{ 410652, 3, {99,68,61}},
+{ 410670, 3, {81,78,65}},
+{ 410688, 3, {93,69,64}},
+{ 410760, 3, {163,56,45}},
+{ 410784, 3, {389,33,32}},
+{ 410800, 3, {80,79,65}},
+{ 410856, 3, {106,68,57}},
+{ 410865, 3, {105,91,43}},
+{ 410880, 3, {107,64,60}},
+{ 410928, 3, {1223,21,16}},
+{ 410940, 3, {761,27,20}},
+{ 410976, 3, {1427,18,16}},
+{ 411040, 3, {367,35,32}},
+{ 411060, 3, {85,78,62}},
+{ 411120, 3, {571,30,24}},
+{ 411192, 3, {5711,9,8}},
+{ 411320, 3, {113,65,56}},
+{ 411372, 3, {293,39,36}},
+{ 411400, 3, {88,85,55}},
+{ 411453, 3, {311,49,27}},
+{ 411516, 3, {84,71,69}},
+{ 411552, 3, {1429,18,16}},
+{ 411624, 3, {5717,9,8}},
+{ 411642, 3, {81,77,66}},
+{ 411660, 3, {2287,15,12}},
+{ 411768, 3, {86,76,63}},
+{ 411840, 3, {80,78,66}},
+{ 411996, 3, {139,57,52}},
+{ 412020, 3, {109,63,60}},
+{ 412032, 3, {87,74,64}},
+{ 412128, 3, {96,81,53}},
+{ 412160, 3, {92,70,64}},
+{ 412200, 3, {229,45,40}},
+{ 412224, 3, {113,64,57}},
+{ 412230, 3, {151,65,42}},
+{ 412236, 3, {347,36,33}},
+{ 412335, 3, {85,77,63}},
+{ 412344, 3, {83,72,69}},
+{ 412380, 3, {87,79,60}},
+{ 412384, 3, {263,49,32}},
+{ 412452, 3, {81,76,67}},
+{ 412560, 3, {191,48,45}},
+{ 412608, 3, {307,42,32}},
+{ 412632, 3, {521,33,24}},
+{ 412680, 3, {181,57,40}},
+{ 412704, 3, {1433,18,16}},
+{ 412720, 3, {80,77,67}},
+{ 412740, 3, {2293,15,12}},
+{ 412800, 3, {86,75,64}},
+{ 412830, 3, {139,55,54}},
+{ 412860, 3, {983,21,20}},
+{ 412896, 3, {88,69,68}},
+{ 412944, 3, {1229,21,16}},
+{ 412965, 3, {95,69,63}},
+{ 413028, 3, {149,63,44}},
+{ 413040, 3, {1721,16,15}},
+{ 413064, 3, {5737,9,8}},
+{ 413088, 3, {331,39,32}},
+{ 413100, 3, {81,75,68}},
+{ 413136, 3, {151,57,48}},
+{ 413160, 3, {313,40,33}},
+{ 413280, 3, {82,72,70}},
+{ 413325, 3, {167,55,45}},
+{ 413352, 3, {5741,9,8}},
+{ 413400, 3, {106,65,60}},
+{ 413424, 3, {87,72,66}},
+{ 413448, 3, {107,69,56}},
+{ 413460, 3, {2297,15,12}},
+{ 413490, 3, {179,55,42}},
+{ 413496, 3, {5743,9,8}},
+{ 413504, 3, {91,71,64}},
+{ 413520, 3, {1723,16,15}},
+{ 413532, 3, {547,28,27}},
+{ 413550, 3, {919,25,18}},
+{ 413556, 3, {241,44,39}},
+{ 413560, 3, {211,49,40}},
+{ 413568, 3, {359,36,32}},
+{ 413595, 3, {101,65,63}},
+{ 413600, 3, {94,80,55}},
+{ 413616, 3, {1231,21,16}},
+{ 413760, 3, {431,32,30}},
+{ 413775, 3, {613,27,25}},
+{ 413784, 3, {821,24,21}},
+{ 413820, 3, {95,66,66}},
+{ 413856, 3, {479,32,27}},
+{ 413868, 3, {379,39,28}},
+{ 413875, 3, {125,77,43}},
+{ 413910, 3, {81,73,70}},
+{ 413928, 3, {5749,9,8}},
+{ 413952, 3, {84,77,64}},
+{ 414000, 3, {80,75,69}},
+{ 414036, 3, {93,84,53}},
+{ 414050, 3, {91,70,65}},
+{ 414072, 3, {81,72,71}},
+{ 414099, 3, {313,49,27}},
+{ 414120, 3, {87,70,68}},
+{ 414216, 3, {523,33,24}},
+{ 414225, 3, {263,45,35}},
+{ 414276, 3, {79,76,69}},
+{ 414288, 3, {137,56,54}},
+{ 414315, 3, {93,81,55}},
+{ 414336, 3, {83,78,64}},
+{ 414400, 3, {80,74,70}},
+{ 414432, 3, {1439,18,16}},
+{ 414477, 3, {119,81,43}},
+{ 414480, 3, {157,55,48}},
+{ 414504, 3, {101,72,57}},
+{ 414528, 3, {127,64,51}},
+{ 414600, 3, {691,25,24}},
+{ 414612, 3, {349,36,33}},
+{ 414732, 3, {107,68,57}},
+{ 414792, 3, {823,24,21}},
+{ 414800, 3, {85,80,61}},
+{ 414855, 3, {439,35,27}},
+{ 414876, 3, {449,33,28}},
+{ 415008, 3, {131,66,48}},
+{ 415030, 3, {77,77,70}},
+{ 415044, 3, {84,81,61}},
+{ 415104, 3, {94,69,64}},
+{ 415140, 3, {85,74,66}},
+{ 415152, 3, {93,72,62}},
+{ 415200, 3, {173,50,48}},
+{ 415260, 3, {769,27,20}},
+{ 415275, 3, {113,75,49}},
+{ 415296, 3, {103,64,63}},
+{ 415368, 3, {641,27,24}},
+{ 415422, 3, {157,54,49}},
+{ 415440, 3, {577,30,24}},
+{ 415520, 3, {98,80,53}},
+{ 415548, 3, {97,68,63}},
+{ 415584, 3, {78,74,72}},
+{ 415620, 3, {2309,15,12}},
+{ 415632, 3, {1237,21,16}},
+{ 415680, 3, {433,32,30}},
+{ 415800, 3, {77,75,72}},
+{ 415920, 3, {1733,16,15}},
+{ 415935, 3, {81,79,65}},
+{ 415980, 3, {2311,15,12}},
+{ 416000, 3, {80,80,65}},
+{ 416052, 3, {127,63,52}},
+{ 416088, 3, {5779,9,8}},
+{ 416100, 3, {76,75,73}},
+{ 416130, 3, {97,66,65}},
+{ 416160, 3, {85,72,68}},
+{ 416220, 3, {991,21,20}},
+{ 416325, 3, {91,75,61}},
+{ 416340, 3, {257,45,36}},
+{ 416364, 3, {157,52,51}},
+{ 416376, 3, {5783,9,8}},
+{ 416416, 3, {91,88,52}},
+{ 416475, 3, {617,27,25}},
+{ 416520, 3, {89,72,65}},
+{ 416556, 3, {87,76,63}},
+{ 416640, 3, {84,80,62}},
+{ 416664, 3, {643,27,24}},
+{ 416736, 3, {1447,18,16}},
+{ 416772, 3, {227,51,36}},
+{ 416800, 3, {521,32,25}},
+{ 416808, 3, {827,24,21}},
+{ 416850, 3, {397,35,30}},
+{ 416880, 3, {193,48,45}},
+{ 416952, 3, {5791,9,8}},
+{ 417012, 3, {93,76,59}},
+{ 417060, 3, {331,36,35}},
+{ 417120, 3, {80,79,66}},
+{ 417150, 3, {103,75,54}},
+{ 417186, 3, {86,77,63}},
+{ 417300, 3, {107,65,60}},
+{ 417312, 3, {84,72,69}},
+{ 417384, 3, {93,68,66}},
+{ 417420, 3, {773,27,20}},
+{ 417456, 3, {223,48,39}},
+{ 417560, 3, {88,73,65}},
+{ 417588, 3, {89,69,68}},
+{ 417600, 3, {87,75,64}},
+{ 417648, 3, {113,66,56}},
+{ 417672, 3, {5801,9,8}},
+{ 417690, 3, {85,78,63}},
+{ 417760, 3, {373,35,32}},
+{ 417780, 3, {211,45,44}},
+{ 417816, 3, {829,24,21}},
+{ 417825, 3, {619,27,25}},
+{ 417840, 3, {1741,16,15}},
+{ 417872, 3, {91,82,56}},
+{ 417879, 3, {81,77,67}},
+{ 417888, 3, {1451,18,16}},
+{ 417960, 3, {86,81,60}},
+{ 417984, 3, {311,42,32}},
+{ 418000, 3, {95,80,55}},
+{ 418050, 3, {929,25,18}},
+{ 418080, 3, {80,78,67}},
+{ 418104, 3, {5807,9,8}},
+{ 418110, 3, {181,55,42}},
+{ 418140, 3, {101,69,60}},
+{ 418152, 3, {131,57,56}},
+{ 418176, 3, {88,72,66}},
+{ 418200, 3, {82,75,68}},
+{ 418236, 3, {383,39,28}},
+{ 418264, 3, {97,77,56}},
+{ 418275, 3, {99,65,65}},
+{ 418320, 3, {83,72,70}},
+{ 418400, 3, {523,32,25}},
+{ 418440, 3, {317,40,33}},
+{ 418464, 3, {1453,18,16}},
+{ 418509, 3, {91,73,63}},
+{ 418536, 3, {5813,9,8}},
+{ 418560, 3, {109,64,60}},
+{ 418572, 3, {151,63,44}},
+{ 418608, 3, {81,76,68}},
+{ 418635, 3, {443,35,27}},
+{ 418704, 3, {88,78,61}},
+{ 418740, 3, {997,21,20}},
+{ 418770, 3, {94,81,55}},
+{ 418836, 3, {167,57,44}},
+{ 418860, 3, {179,52,45}},
+{ 418880, 3, {80,77,68}},
+{ 418950, 3, {95,70,63}},
+{ 418968, 3, {88,69,69}},
+{ 419100, 3, {127,60,55}},
+{ 419112, 3, {5821,9,8}},
+{ 419175, 3, {81,75,69}},
+{ 419200, 3, {131,64,50}},
+{ 419220, 3, {137,60,51}},
+{ 419232, 3, {397,33,32}},
+{ 419256, 3, {647,27,24}},
+{ 419280, 3, {1747,16,15}},
+{ 419328, 3, {84,78,64}},
+{ 419364, 3, {353,36,33}},
+{ 419391, 3, {317,49,27}},
+{ 419400, 3, {233,45,40}},
+{ 419520, 3, {80,76,69}},
+{ 419544, 3, {5827,9,8}},
+{ 419580, 3, {81,74,70}},
+{ 419640, 3, {269,40,39}},
+{ 419664, 3, {1249,21,16}},
+{ 419688, 3, {87,72,67}},
+{ 419760, 3, {90,88,53}},
+{ 419832, 3, {98,68,63}},
+{ 419904, 3, {81,72,72}},
+{ 419940, 3, {2333,15,12}},
+{ 419985, 3, {85,81,61}},
+{ 420000, 3, {80,75,70}},
+{ 420036, 3, {87,71,68}},
+{ 420090, 3, {95,67,66}},
+{ 420147, 3, {91,81,57}},
+{ 420160, 3, {101,65,64}},
+{ 420192, 3, {1459,18,16}},
+{ 420224, 3, {98,67,64}},
+{ 420336, 3, {139,56,54}},
+{ 420408, 3, {5839,9,8}},
+{ 420420, 3, {78,77,70}},
+{ 420444, 3, {229,51,36}},
+{ 420552, 3, {88,81,59}},
+{ 420576, 3, {337,39,32}},
+{ 420600, 3, {701,25,24}},
+{ 420624, 3, {127,69,48}},
+{ 420672, 3, {313,42,32}},
+{ 420696, 3, {5843,9,8}},
+{ 420720, 3, {1753,16,15}},
+{ 420750, 3, {85,75,66}},
+{ 420768, 3, {487,32,27}},
+{ 420840, 3, {167,56,45}},
+{ 420875, 3, {125,91,37}},
+{ 420900, 3, {92,75,61}},
+{ 421008, 3, {179,49,48}},
+{ 421020, 3, {2339,15,12}},
+{ 421050, 3, {401,35,30}},
+{ 421080, 3, {88,87,55}},
+{ 421092, 3, {557,28,27}},
+{ 421120, 3, {94,70,64}},
+{ 421128, 3, {5849,9,8}},
+{ 421155, 3, {191,49,45}},
+{ 421176, 3, {109,69,56}},
+{ 421200, 3, {78,75,72}},
+{ 421260, 3, {85,84,59}},
+{ 421272, 3, {5851,9,8}},
+{ 421344, 3, {77,76,72}},
+{ 421380, 3, {2341,15,12}},
+{ 421440, 3, {439,32,30}},
+{ 421575, 3, {77,75,73}},
+{ 421600, 3, {85,80,62}},
+{ 421650, 3, {937,25,18}},
+{ 421680, 3, {251,42,40}},
+{ 421704, 3, {5857,9,8}},
+{ 421785, 3, {103,65,63}},
+{ 421792, 3, {269,49,32}},
+{ 421800, 3, {76,75,74}},
+{ 421848, 3, {84,81,62}},
+{ 421960, 3, {137,56,55}},
+{ 421992, 3, {5861,9,8}},
+{ 422037, 3, {87,77,63}},
+{ 422100, 3, {84,75,67}},
+{ 422160, 3, {1759,16,15}},
+{ 422240, 3, {91,80,58}},
+{ 422268, 3, {457,33,28}},
+{ 422280, 3, {85,72,69}},
+{ 422370, 3, {95,78,57}},
+{ 422400, 3, {80,80,66}},
+{ 422424, 3, {5867,9,8}},
+{ 422460, 3, {2347,15,12}},
+{ 422484, 3, {109,68,57}},
+{ 422496, 3, {163,54,48}},
+{ 422568, 3, {5869,9,8}},
+{ 422576, 3, {98,77,56}},
+{ 422592, 3, {93,71,64}},
+{ 422625, 3, {115,75,49}},
+{ 422640, 3, {587,30,24}},
+{ 422712, 3, {103,72,57}},
+{ 422730, 3, {90,77,61}},
+{ 422760, 3, {271,40,39}},
+{ 422784, 3, {367,36,32}},
+{ 422820, 3, {87,81,60}},
+{ 422856, 3, {839,24,21}},
+{ 422928, 3, {89,72,66}},
+{ 422940, 3, {95,84,53}},
+{ 422968, 3, {91,83,56}},
+{ 423000, 3, {94,75,60}},
+{ 423024, 3, {1259,21,16}},
+{ 423045, 3, {85,79,63}},
+{ 423108, 3, {84,73,69}},
+{ 423144, 3, {653,27,24}},
+{ 423168, 3, {87,76,64}},
+{ 423180, 3, {2351,15,12}},
+{ 423225, 3, {95,81,55}},
+{ 423280, 3, {88,74,65}},
+{ 423288, 3, {5879,9,8}},
+{ 423300, 3, {83,75,68}},
+{ 423360, 3, {84,72,70}},
+{ 423423, 3, {99,91,47}},
+{ 423432, 3, {5881,9,8}},
+{ 423450, 3, {941,25,18}},
+{ 423456, 3, {401,33,32}},
+{ 423500, 3, {100,77,55}},
+{ 423504, 3, {173,51,48}},
+{ 423540, 3, {181,52,45}},
+{ 423648, 3, {1471,18,16}},
+{ 423675, 3, {269,45,35}},
+{ 423696, 3, {97,78,56}},
+{ 423708, 3, {93,68,67}},
+{ 423780, 3, {1009,21,20}},
+{ 423808, 3, {86,77,64}},
+{ 423850, 3, {173,50,49}},
+{ 423852, 3, {143,57,52}},
+{ 423864, 3, {87,84,58}},
+{ 423900, 3, {157,54,50}},
+{ 423936, 3, {92,72,64}},
+{ 424116, 3, {81,77,68}},
+{ 424200, 3, {101,70,60}},
+{ 424212, 3, {92,87,53}},
+{ 424224, 3, {491,32,27}},
+{ 424242, 3, {91,74,63}},
+{ 424260, 3, {2357,15,12}},
+{ 424305, 3, {449,35,27}},
+{ 424320, 3, {80,78,68}},
+{ 424424, 3, {91,88,53}},
+{ 424480, 3, {379,35,32}},
+{ 424560, 3, {87,80,61}},
+{ 424584, 3, {5897,9,8}},
+{ 424620, 3, {337,36,35}},
+{ 424704, 3, {84,79,64}},
+{ 424710, 3, {99,66,65}},
+{ 424764, 3, {81,76,69}},
+{ 424788, 3, {389,39,28}},
+{ 424800, 3, {90,80,59}},
+{ 424928, 3, {271,49,32}},
+{ 424935, 3, {95,71,63}},
+{ 424944, 3, {227,48,39}},
+{ 424980, 3, {787,27,20}},
+{ 425016, 3, {5903,9,8}},
+{ 425040, 3, {80,77,69}},
+{ 425100, 3, {109,65,60}},
+{ 425152, 3, {91,73,64}},
+{ 425250, 3, {81,75,70}},
+{ 425280, 3, {443,32,30}},
+{ 425340, 3, {139,60,51}},
+{ 425376, 3, {211,48,42}},
+{ 425400, 3, {709,25,24}},
+{ 425460, 3, {1013,21,20}},
+{ 425520, 3, {197,48,45}},
+{ 425544, 3, {149,56,51}},
+{ 425565, 3, {193,49,45}},
+{ 425568, 3, {88,78,62}},
+{ 425600, 3, {80,76,70}},
+{ 425628, 3, {563,28,27}},
+{ 425712, 3, {181,49,48}},
+{ 425736, 3, {81,73,72}},
+{ 425810, 3, {79,77,70}},
+{ 425925, 3, {631,27,25}},
+{ 425952, 3, {87,72,68}},
+{ 425964, 3, {461,33,28}},
+{ 426000, 3, {80,75,71}},
+{ 426048, 3, {317,42,32}},
+{ 426060, 3, {263,45,36}},
+{ 426132, 3, {89,76,63}},
+{ 426150, 3, {947,25,18}},
+{ 426360, 3, {85,76,66}},
+{ 426384, 3, {94,72,63}},
+{ 426400, 3, {82,80,65}},
+{ 426420, 3, {103,69,60}},
+{ 426456, 3, {5923,9,8}},
+{ 426465, 3, {81,81,65}},
+{ 426480, 3, {1777,16,15}},
+{ 426492, 3, {359,36,33}},
+{ 426496, 3, {98,68,64}},
+{ 426525, 3, {121,75,47}},
+{ 426528, 3, {1481,18,16}},
+{ 426600, 3, {79,75,72}},
+{ 426624, 3, {101,66,64}},
+{ 426744, 3, {5927,9,8}},
+{ 426780, 3, {2371,15,12}},
+{ 426790, 3, {91,70,67}},
+{ 426800, 3, {97,80,55}},
+{ 426816, 3, {78,76,72}},
+{ 426825, 3, {271,45,35}},
+{ 426870, 3, {85,81,62}},
+{ 426888, 3, {77,77,72}},
+{ 426960, 3, {593,30,24}},
+{ 426972, 3, {91,69,68}},
+{ 427032, 3, {659,27,24}},
+{ 427104, 3, {1483,18,16}},
+{ 427140, 3, {113,63,60}},
+{ 427200, 3, {89,75,64}},
+{ 427248, 3, {86,72,69}},
+{ 427329, 3, {119,63,57}},
+{ 427350, 3, {77,75,74}},
+{ 427392, 3, {106,64,63}},
+{ 427500, 3, {76,75,75}},
+{ 427584, 3, {131,64,51}},
+{ 427608, 3, {5939,9,8}},
+{ 427635, 3, {117,85,43}},
+{ 427680, 3, {81,80,66}},
+{ 427788, 3, {233,51,36}},
+{ 427800, 3, {92,75,62}},
+{ 427812, 3, {463,33,28}},
+{ 427860, 3, {2377,15,12}},
+{ 427920, 3, {1783,16,15}},
+{ 427980, 3, {1019,21,20}},
+{ 428040, 3, {87,82,60}},
+{ 428064, 3, {91,84,56}},
+{ 428120, 3, {139,56,55}},
+{ 428175, 3, {173,55,45}},
+{ 428256, 3, {1487,18,16}},
+{ 428328, 3, {661,27,24}},
+{ 428352, 3, {97,69,64}},
+{ 428400, 3, {85,72,70}},
+{ 428472, 3, {541,33,24}},
+{ 428480, 3, {103,65,64}},
+{ 428505, 3, {105,77,53}},
+{ 428544, 3, {93,72,64}},
+{ 428580, 3, {2381,15,12}},
+{ 428604, 3, {191,51,44}},
+{ 428610, 3, {157,65,42}},
+{ 428616, 3, {5953,9,8}},
+{ 428652, 3, {84,81,63}},
+{ 428688, 3, {229,48,39}},
+{ 428736, 3, {87,77,64}},
+{ 428750, 3, {125,70,49}},
+{ 428820, 3, {1021,21,20}},
+{ 428832, 3, {1489,18,16}},
+{ 428850, 3, {953,25,18}},
+{ 428868, 3, {99,76,57}},
+{ 428880, 3, {1787,16,15}},
+{ 428904, 3, {84,74,69}},
+{ 428940, 3, {2383,15,12}},
+{ 428960, 3, {383,35,32}},
+{ 429000, 3, {88,75,65}},
+{ 429072, 3, {1277,21,16}},
+{ 429120, 3, {149,60,48}},
+{ 429156, 3, {131,63,52}},
+{ 429165, 3, {99,85,51}},
+{ 429312, 3, {86,78,64}},
+{ 429360, 3, {1789,16,15}},
+{ 429450, 3, {409,35,30}},
+{ 429520, 3, {91,80,59}},
+{ 429552, 3, {157,57,48}},
+{ 429600, 3, {179,50,48}},
+{ 429624, 3, {81,78,68}},
+{ 429696, 3, {373,36,32}},
+{ 429744, 3, {1279,21,16}},
+{ 429780, 3, {87,76,65}},
+{ 429800, 3, {307,40,35}},
+{ 429840, 3, {199,48,45}},
+{ 429912, 3, {853,24,21}},
+{ 429975, 3, {91,75,63}},
+{ 429984, 3, {1493,18,16}},
+{ 430008, 3, {82,76,69}},
+{ 430020, 3, {2389,15,12}},
+{ 430032, 3, {93,68,68}},
+{ 430080, 3, {84,80,64}},
+{ 430164, 3, {569,28,27}},
+{ 430200, 3, {239,45,40}},
+{ 430320, 3, {163,55,48}},
+{ 430353, 3, {81,77,69}},
+{ 430380, 3, {797,27,20}},
+{ 430440, 3, {211,51,40}},
+{ 430560, 3, {80,78,69}},
+{ 430632, 3, {5981,9,8}},
+{ 430716, 3, {251,44,39}},
+{ 430740, 3, {2393,15,12}},
+{ 430920, 3, {81,76,70}},
+{ 430950, 3, {85,78,65}},
+{ 430976, 3, {91,74,64}},
+{ 431028, 3, {307,39,36}},
+{ 431040, 3, {449,32,30}},
+{ 431064, 3, {5987,9,8}},
+{ 431088, 3, {1283,21,16}},
+{ 431112, 3, {88,71,69}},
+{ 431136, 3, {499,32,27}},
+{ 431145, 3, {99,67,65}},
+{ 431148, 3, {93,76,61}},
+{ 431172, 3, {87,84,59}},
+{ 431200, 3, {80,77,70}},
+{ 431256, 3, {151,56,51}},
+{ 431280, 3, {599,30,24}},
+{ 431298, 3, {163,54,49}},
+{ 431325, 3, {81,75,71}},
+{ 431375, 3, {125,119,29}},
+{ 431400, 3, {719,25,24}},
+{ 431424, 3, {107,64,63}},
+{ 431460, 3, {94,85,54}},
+{ 431508, 3, {467,33,28}},
+{ 431520, 3, {87,80,62}},
+{ 431568, 3, {81,74,72}},
+{ 431600, 3, {83,80,65}},
+{ 431664, 3, {92,69,68}},
+{ 431676, 3, {571,28,27}},
+{ 431712, 3, {1499,18,16}},
+{ 431730, 3, {82,81,65}},
+{ 431739, 3, {89,77,63}},
+{ 431760, 3, {257,42,40}},
+{ 431820, 3, {2399,15,12}},
+{ 431865, 3, {457,35,27}},
+{ 431868, 3, {87,73,68}},
+{ 431904, 3, {409,33,32}},
+{ 431928, 3, {857,24,21}},
+{ 431970, 3, {85,77,66}},
+{ 432000, 3, {80,75,72}},
+{ 432120, 3, {277,40,39}},
+{ 432135, 3, {97,81,55}},
+{ 432216, 3, {87,72,69}},
+{ 432240, 3, {1801,16,15}},
+{ 432276, 3, {163,52,51}},
+{ 432300, 3, {131,60,55}},
+{ 432432, 3, {78,77,72}},
+{ 432480, 3, {96,85,53}},
+{ 432504, 3, {6007,9,8}},
+{ 432540, 3, {89,81,60}},
+{ 432600, 3, {103,70,60}},
+{ 432630, 3, {95,69,66}},
+{ 432640, 3, {104,65,64}},
+{ 432675, 3, {641,27,25}},
+{ 432684, 3, {101,68,63}},
+{ 432720, 3, {601,30,24}},
+{ 432768, 3, {98,69,64}},
+{ 432792, 3, {6011,9,8}},
+{ 432800, 3, {541,32,25}},
+{ 432864, 3, {167,54,48}},
+{ 432936, 3, {859,24,21}},
+{ 432960, 3, {82,80,66}},
+{ 433020, 3, {1031,21,20}},
+{ 433056, 3, {347,39,32}},
+{ 433092, 3, {193,51,44}},
+{ 433104, 3, {1289,21,16}},
+{ 433125, 3, {77,75,75}},
+{ 433152, 3, {94,72,64}},
+{ 433160, 3, {91,70,68}},
+{ 433200, 3, {76,76,75}},
+{ 433224, 3, {547,33,24}},
+{ 433260, 3, {87,83,60}},
+{ 433290, 3, {101,66,65}},
+{ 433296, 3, {102,72,59}},
+{ 433350, 3, {107,75,54}},
+{ 433356, 3, {84,77,67}},
+{ 433440, 3, {86,72,70}},
+{ 433500, 3, {85,75,68}},
+{ 433524, 3, {397,39,28}},
+{ 433650, 3, {98,75,59}},
+{ 433664, 3, {88,77,64}},
+{ 433752, 3, {93,88,53}},
+{ 433755, 3, {85,81,63}},
+{ 433776, 3, {1291,21,16}},
+{ 433800, 3, {241,45,40}},
+{ 433840, 3, {88,85,58}},
+{ 433860, 3, {1033,21,20}},
+{ 433872, 3, {131,69,48}},
+{ 433884, 3, {173,57,44}},
+{ 433920, 3, {113,64,60}},
+{ 433980, 3, {2411,15,12}},
+{ 434016, 3, {137,66,48}},
+{ 434025, 3, {643,27,25}},
+{ 434070, 3, {91,90,53}},
+{ 434088, 3, {6029,9,8}},
+{ 434148, 3, {121,69,52}},
+{ 434160, 3, {81,80,67}},
+{ 434304, 3, {87,78,64}},
+{ 434336, 3, {277,49,32}},
+{ 434340, 3, {127,60,57}},
+{ 434385, 3, {197,49,45}},
+{ 434400, 3, {181,50,48}},
+{ 434496, 3, {93,73,64}},
+{ 434520, 3, {85,72,71}},
+{ 434560, 3, {97,70,64}},
+{ 434592, 3, {503,32,27}},
+{ 434640, 3, {1811,16,15}},
+{ 434664, 3, {6037,9,8}},
+{ 434700, 3, {84,75,69}},
+{ 434720, 3, {88,76,65}},
+{ 434808, 3, {88,81,61}},
+{ 434875, 3, {125,71,49}},
+{ 434880, 3, {151,60,48}},
+{ 434889, 3, {91,81,59}},
+{ 434952, 3, {863,24,21}},
+{ 435024, 3, {106,72,57}},
+{ 435060, 3, {2417,15,12}},
+{ 435072, 3, {103,66,64}},
+{ 435096, 3, {6043,9,8}},
+{ 435132, 3, {81,79,68}},
+{ 435150, 3, {967,25,18}},
+{ 435168, 3, {1511,18,16}},
+{ 435204, 3, {157,63,44}},
+{ 435240, 3, {93,72,65}},
+{ 435252, 3, {83,76,69}},
+{ 435375, 3, {125,81,43}},
+{ 435384, 3, {6047,9,8}},
+{ 435400, 3, {311,40,35}},
+{ 435480, 3, {191,57,40}},
+{ 435512, 3, {101,77,56}},
+{ 435540, 3, {85,84,61}},
+{ 435552, 3, {349,39,32}},
+{ 435600, 3, {88,75,66}},
+{ 435645, 3, {461,35,27}},
+{ 435680, 3, {389,35,32}},
+{ 435708, 3, {91,76,63}},
+{ 435780, 3, {269,45,36}},
+{ 435792, 3, {1297,21,16}},
+{ 435816, 3, {6053,9,8}},
+{ 435825, 3, {149,65,45}},
+{ 435960, 3, {173,56,45}},
+{ 435996, 3, {367,36,33}},
+{ 436050, 3, {90,85,57}},
+{ 436080, 3, {80,79,69}},
+{ 436104, 3, {673,27,24}},
+{ 436140, 3, {2423,15,12}},
+{ 436176, 3, {233,48,39}},
+{ 436200, 3, {727,25,24}},
+{ 436212, 3, {577,28,27}},
+{ 436275, 3, {277,45,35}},
+{ 436356, 3, {93,69,68}},
+{ 436380, 3, {1039,21,20}},
+{ 436392, 3, {87,76,66}},
+{ 436500, 3, {97,75,60}},
+{ 436590, 3, {81,77,70}},
+{ 436608, 3, {379,36,32}},
+{ 436632, 3, {113,69,56}},
+{ 436644, 3, {311,39,36}},
+{ 436725, 3, {647,27,25}},
+{ 436800, 3, {80,78,70}},
+{ 436824, 3, {6067,9,8}},
+{ 436860, 3, {809,27,20}},
+{ 436905, 3, {95,73,63}},
+{ 436920, 3, {331,40,33}},
+{ 436950, 3, {971,25,18}},
+{ 436968, 3, {102,68,63}},
+{ 436995, 3, {83,81,65}},
+{ 437040, 3, {607,30,24}},
+{ 437076, 3, {81,76,71}},
+{ 437080, 3, {223,49,40}},
+{ 437136, 3, {1301,21,16}},
+{ 437184, 3, {88,72,69}},
+{ 437190, 3, {95,78,59}},
+{ 437220, 3, {347,36,35}},
+{ 437256, 3, {6073,9,8}},
+{ 437304, 3, {137,57,56}},
+{ 437360, 3, {80,77,71}},
+{ 437400, 3, {81,75,72}},
+{ 437520, 3, {1823,16,15}},
+{ 437535, 3, {463,35,27}},
+{ 437580, 3, {85,78,66}},
+{ 437600, 3, {547,32,25}},
+{ 437688, 3, {6079,9,8}},
+{ 437784, 3, {87,74,68}},
+{ 437805, 3, {115,81,47}},
+{ 437808, 3, {1303,21,16}},
+{ 437892, 3, {401,39,28}},
+{ 437913, 3, {331,49,27}},
+{ 437940, 3, {811,27,20}},
+{ 437976, 3, {79,77,72}},
+{ 437988, 3, {113,68,57}},
+{ 438000, 3, {80,75,73}},
+{ 438048, 3, {78,78,72}},
+{ 438060, 3, {149,60,49}},
+{ 438165, 3, {107,65,63}},
+{ 438192, 3, {179,51,48}},
+{ 438200, 3, {313,40,35}},
+{ 438216, 3, {93,76,62}},
+{ 438240, 3, {83,80,66}},
+{ 438256, 3, {91,86,56}},
+{ 438360, 3, {281,40,39}},
+{ 438400, 3, {137,64,50}},
+{ 438408, 3, {6089,9,8}},
+{ 438480, 3, {87,72,70}},
+{ 438550, 3, {179,50,49}},
+{ 438552, 3, {6091,9,8}},
+{ 438592, 3, {89,77,64}},
+{ 438600, 3, {86,75,68}},
+{ 438615, 3, {95,81,57}},
+{ 438624, 3, {1523,18,16}},
+{ 438660, 3, {2437,15,12}},
+{ 438696, 3, {677,27,24}},
+{ 438720, 3, {457,32,30}},
+{ 438795, 3, {199,49,45}},
+{ 438804, 3, {239,51,36}},
+{ 438900, 3, {77,76,75}},
+{ 438912, 3, {127,64,54}},
+{ 438960, 3, {93,80,59}},
+{ 439020, 3, {271,45,36}},
+{ 439040, 3, {98,70,64}},
+{ 439110, 3, {85,82,63}},
+{ 439128, 3, {107,72,57}},
+{ 439152, 3, {1307,21,16}},
+{ 439200, 3, {90,80,61}},
+{ 439272, 3, {6101,9,8}},
+{ 439296, 3, {88,78,64}},
+{ 439380, 3, {2441,15,12}},
+{ 439440, 3, {1831,16,15}},
+{ 439452, 3, {313,39,36}},
+{ 439488, 3, {109,64,63}},
+{ 439530, 3, {91,70,69}},
+{ 439650, 3, {977,25,18}},
+{ 439668, 3, {92,81,59}},
+{ 439740, 3, {349,36,35}},
+{ 439776, 3, {509,32,27}},
+{ 439800, 3, {733,25,24}},
+{ 439824, 3, {84,77,68}},
+{ 439872, 3, {87,79,64}},
+{ 439920, 3, {94,72,65}},
+{ 439950, 3, {419,35,30}},
+{ 439992, 3, {97,72,63}},
+{ 440000, 3, {100,80,55}},
+{ 440040, 3, {193,57,40}},
+{ 440055, 3, {127,63,55}},
+{ 440100, 3, {163,54,50}},
+{ 440136, 3, {6113,9,8}},
+{ 440220, 3, {92,87,55}},
+{ 440352, 3, {139,66,48}},
+{ 440440, 3, {88,77,65}},
+{ 440448, 3, {93,74,64}},
+{ 440460, 3, {2447,15,12}},
+{ 440496, 3, {84,76,69}},
+{ 440544, 3, {353,39,32}},
+{ 440580, 3, {1049,21,20}},
+{ 440608, 3, {281,49,32}},
+{ 440640, 3, {85,72,72}},
+{ 440700, 3, {113,65,60}},
+{ 440712, 3, {6121,9,8}},
+{ 440775, 3, {653,27,25}},
+{ 440800, 3, {95,80,58}},
+{ 440832, 3, {84,82,64}},
+{ 440880, 3, {167,55,48}},
+{ 440928, 3, {1531,18,16}},
+{ 440960, 3, {106,65,64}},
+{ 441000, 3, {84,75,70}},
+{ 441012, 3, {257,44,39}},
+{ 441045, 3, {99,81,55}},
+{ 441048, 3, {94,69,68}},
+{ 441144, 3, {557,33,24}},
+{ 441168, 3, {101,78,56}},
+{ 441210, 3, {191,55,42}},
+{ 441216, 3, {383,36,32}},
+{ 441252, 3, {103,68,63}},
+{ 441315, 3, {467,35,27}},
+{ 441320, 3, {88,85,59}},
+{ 441360, 3, {613,30,24}},
+{ 441420, 3, {1051,21,20}},
+{ 441432, 3, {6131,9,8}},
+{ 441441, 3, {91,77,63}},
+{ 441450, 3, {109,75,54}},
+{ 441480, 3, {283,40,39}},
+{ 441540, 3, {223,45,44}},
+{ 441576, 3, {6133,9,8}},
+{ 441600, 3, {80,80,69}},
+{ 441636, 3, {149,57,52}},
+{ 441675, 3, {151,65,45}},
+{ 441792, 3, {96,78,59}},
+{ 441840, 3, {263,42,40}},
+{ 441870, 3, {103,66,65}},
+{ 441882, 3, {167,54,49}},
+{ 441936, 3, {88,81,62}},
+{ 441980, 3, {82,77,70}},
+{ 442000, 3, {85,80,65}},
+{ 442008, 3, {877,24,21}},
+{ 442035, 3, {99,95,47}},
+{ 442050, 3, {421,35,30}},
+{ 442068, 3, {197,51,44}},
+{ 442152, 3, {89,72,69}},
+{ 442200, 3, {88,75,67}},
+{ 442260, 3, {81,78,70}},
+{ 442296, 3, {6143,9,8}},
+{ 442323, 3, {119,63,59}},
+{ 442350, 3, {983,25,18}},
+{ 442368, 3, {96,72,64}},
+{ 442400, 3, {80,79,70}},
+{ 442464, 3, {419,33,32}},
+{ 442476, 3, {241,51,36}},
+{ 442530, 3, {149,55,54}},
+{ 442560, 3, {461,32,30}},
+{ 442575, 3, {281,45,35}},
+{ 442584, 3, {683,27,24}},
+{ 442596, 3, {479,33,28}},
+{ 442620, 3, {2459,15,12}},
+{ 442624, 3, {91,76,64}},
+{ 442656, 3, {96,87,53}},
+{ 442680, 3, {85,84,62}},
+{ 442800, 3, {82,75,72}},
+{ 442827, 3, {81,77,71}},
+{ 442872, 3, {6151,9,8}},
+{ 442884, 3, {167,52,51}},
+{ 442890, 3, {95,74,63}},
+{ 442980, 3, {107,69,60}},
+{ 443004, 3, {87,76,67}},
+{ 443025, 3, {179,55,45}},
+{ 443040, 3, {80,78,71}},
+{ 443080, 3, {95,88,53}},
+{ 443088, 3, {181,51,48}},
+{ 443124, 3, {373,36,33}},
+{ 443184, 3, {1319,21,16}},
+{ 443190, 3, {85,79,66}},
+{ 443232, 3, {81,76,72}},
+{ 443256, 3, {88,73,69}},
+{ 443280, 3, {1847,16,15}},
+{ 443340, 3, {821,27,20}},
+{ 443352, 3, {91,84,58}},
+{ 443400, 3, {739,25,24}},
+{ 443450, 3, {181,50,49}},
+{ 443475, 3, {81,75,73}},
+{ 443520, 3, {80,77,72}},
+{ 443625, 3, {91,75,65}},
+{ 443664, 3, {79,78,72}},
+{ 443688, 3, {139,57,56}},
+{ 443700, 3, {87,75,68}},
+{ 443736, 3, {6163,9,8}},
+{ 443744, 3, {283,49,32}},
+{ 443772, 3, {587,28,27}},
+{ 443800, 3, {317,40,35}},
+{ 443856, 3, {1321,21,16}},
+{ 443916, 3, {99,76,59}},
+{ 443940, 3, {151,60,49}},
+{ 444000, 3, {80,75,74}},
+{ 444015, 3, {99,69,65}},
+{ 444024, 3, {881,24,21}},
+{ 444048, 3, {88,87,58}},
+{ 444060, 3, {2467,15,12}},
+{ 444080, 3, {91,80,61}},
+{ 444087, 3, {133,63,53}},
+{ 444136, 3, {103,77,56}},
+{ 444210, 3, {85,78,67}},
+{ 444240, 3, {617,30,24}},
+{ 444288, 3, {89,78,64}},
+{ 444312, 3, {99,68,66}},
+{ 444384, 3, {1543,18,16}},
+{ 444400, 3, {101,80,55}},
+{ 444420, 3, {823,27,20}},
+{ 444456, 3, {6173,9,8}},
+{ 444465, 3, {85,83,63}},
+{ 444480, 3, {463,32,30}},
+{ 444576, 3, {421,33,32}},
+{ 444600, 3, {78,76,75}},
+{ 444640, 3, {397,35,32}},
+{ 444675, 3, {77,77,75}},
+{ 444744, 3, {87,72,71}},
+{ 444780, 3, {353,36,35}},
+{ 444800, 3, {139,64,50}},
+{ 444825, 3, {659,27,25}},
+{ 444840, 3, {337,40,33}},
+{ 444864, 3, {331,42,32}},
+{ 444920, 3, {227,49,40}},
+{ 444990, 3, {163,65,42}},
+{ 445032, 3, {883,24,21}},
+{ 445068, 3, {317,39,36}},
+{ 445120, 3, {107,65,64}},
+{ 445140, 3, {2473,15,12}},
+{ 445170, 3, {95,71,66}},
+{ 445200, 3, {106,70,60}},
+{ 445230, 3, {97,85,54}},
+{ 445284, 3, {93,76,63}},
+{ 445312, 3, {98,71,64}},
+{ 445440, 3, {87,80,64}},
+{ 445600, 3, {557,32,25}},
+{ 445620, 3, {1061,21,20}},
+{ 445680, 3, {619,30,24}},
+{ 445725, 3, {283,45,35}},
+{ 445740, 3, {85,76,69}},
+{ 445770, 3, {127,65,54}},
+{ 445788, 3, {87,84,61}},
+{ 445800, 3, {743,25,24}},
+{ 445830, 3, {193,55,42}},
+{ 445851, 3, {337,49,27}},
+{ 445860, 3, {2477,15,12}},
+{ 445872, 3, {1327,21,16}},
+{ 445896, 3, {563,33,24}},
+{ 445900, 3, {91,70,70}},
+{ 445950, 3, {991,25,18}},
+{ 445968, 3, {163,57,48}},
+{ 445995, 3, {99,85,53}},
+{ 446016, 3, {101,69,64}},
+{ 446112, 3, {1549,18,16}},
+{ 446148, 3, {81,81,68}},
+{ 446160, 3, {88,78,65}},
+{ 446175, 3, {661,27,25}},
+{ 446184, 3, {6197,9,8}},
+{ 446208, 3, {84,83,64}},
+{ 446292, 3, {84,77,69}},
+{ 446328, 3, {6199,9,8}},
+{ 446355, 3, {109,65,63}},
+{ 446400, 3, {90,80,62}},
+{ 446460, 3, {1063,21,20}},
+{ 446472, 3, {104,81,53}},
+{ 446556, 3, {199,51,44}},
+{ 446580, 3, {827,27,20}},
+{ 446600, 3, {100,77,58}},
+{ 446616, 3, {6203,9,8}},
+{ 446628, 3, {409,39,28}},
+{ 446640, 3, {1861,16,15}},
+{ 446688, 3, {94,72,66}},
+{ 446760, 3, {85,73,72}},
+{ 446940, 3, {191,52,45}},
+{ 446976, 3, {97,72,64}},
+{ 447040, 3, {127,64,55}},
+{ 447048, 3, {887,24,21}},
+{ 447120, 3, {81,80,69}},
+{ 447125, 3, {125,73,49}},
+{ 447168, 3, {137,64,51}},
+{ 447174, 3, {91,78,63}},
+{ 447192, 3, {6211,9,8}},
+{ 447200, 3, {86,80,65}},
+{ 447264, 3, {1553,18,16}},
+{ 447300, 3, {84,75,71}},
+{ 447336, 3, {109,72,57}},
+{ 447370, 3, {83,77,70}},
+{ 447408, 3, {239,48,39}},
+{ 447525, 3, {85,81,65}},
+{ 447564, 3, {151,57,52}},
+{ 447624, 3, {6217,9,8}},
+{ 447660, 3, {829,27,20}},
+{ 447744, 3, {106,66,64}},
+{ 447768, 3, {691,27,24}},
+{ 447912, 3, {6221,9,8}},
+{ 447930, 3, {81,79,70}},
+{ 447975, 3, {181,55,45}},
+{ 447984, 3, {102,72,61}},
+{ 448000, 3, {80,80,70}},
+{ 448020, 3, {131,60,57}},
+{ 448032, 3, {359,39,32}},
+{ 448056, 3, {127,63,56}},
+{ 448080, 3, {1867,16,15}},
+{ 448128, 3, {389,36,32}},
+{ 448188, 3, {169,52,51}},
+{ 448200, 3, {83,75,72}},
+{ 448308, 3, {593,28,27}},
+{ 448320, 3, {467,32,30}},
+{ 448350, 3, {98,75,61}},
+{ 448392, 3, {157,56,51}},
+{ 448400, 3, {95,80,59}},
+{ 448416, 3, {173,54,48}},
+{ 448448, 3, {91,77,64}},
+{ 448470, 3, {151,55,54}},
+{ 448488, 3, {6229,9,8}},
+{ 448500, 3, {92,75,65}},
+{ 448560, 3, {89,72,70}},
+{ 448632, 3, {93,72,67}},
+{ 448650, 3, {997,25,18}},
+{ 448740, 3, {277,45,36}},
+{ 448800, 3, {85,80,66}},
+{ 448812, 3, {137,63,52}},
+{ 448840, 3, {229,49,40}},
+{ 448875, 3, {95,75,63}},
+{ 448920, 3, {87,86,60}},
+{ 448932, 3, {179,57,44}},
+{ 448980, 3, {1069,21,20}},
+{ 448992, 3, {1559,18,16}},
+{ 449004, 3, {93,71,68}},
+{ 449040, 3, {1871,16,15}},
+{ 449064, 3, {81,77,72}},
+{ 449085, 3, {105,91,47}},
+{ 449120, 3, {401,35,32}},
+{ 449160, 3, {197,57,40}},
+{ 449232, 3, {191,49,48}},
+{ 449280, 3, {80,78,72}},
+{ 449328, 3, {88,74,69}},
+{ 449388, 3, {81,76,73}},
+{ 449400, 3, {107,70,60}},
+{ 449460, 3, {227,45,44}},
+{ 449520, 3, {1873,16,15}},
+{ 449550, 3, {81,75,74}},
+{ 449568, 3, {223,48,42}},
+{ 449616, 3, {87,76,68}},
+{ 449631, 3, {91,81,61}},
+{ 449680, 3, {80,77,73}},
+{ 449784, 3, {6247,9,8}},
+{ 449820, 3, {85,84,63}},
+{ 449904, 3, {103,78,56}},
+{ 449955, 3, {101,81,55}},
+{ 449988, 3, {487,33,28}},
+{ 450000, 3, {80,75,75}},
+{ 450072, 3, {94,76,63}},
+{ 450120, 3, {93,88,55}},
+{ 450144, 3, {521,32,27}},
+{ 450240, 3, {84,80,67}},
+{ 450252, 3, {379,36,33}},
+{ 450300, 3, {79,76,75}},
+{ 450400, 3, {563,32,25}},
+{ 450450, 3, {78,77,75}},
+{ 450480, 3, {1877,16,15}},
+{ 450504, 3, {6257,9,8}},
+{ 450540, 3, {2503,15,12}},
+{ 450576, 3, {149,56,54}},
+{ 450600, 3, {751,25,24}},
+{ 450648, 3, {569,33,24}},
+{ 450765, 3, {105,81,53}},
+{ 450840, 3, {85,78,68}},
+{ 450900, 3, {167,54,50}},
+{ 450936, 3, {6263,9,8}},
+{ 450960, 3, {1879,16,15}},
+{ 450984, 3, {86,76,69}},
+{ 450996, 3, {91,84,59}},
+{ 451008, 3, {87,72,72}},
+{ 451044, 3, {99,68,67}},
+{ 451080, 3, {179,56,45}},
+{ 451143, 3, {93,77,63}},
+{ 451152, 3, {241,48,39}},
+{ 451200, 3, {94,75,64}},
+{ 451260, 3, {109,69,60}},
+{ 451296, 3, {1567,18,16}},
+{ 451308, 3, {263,44,39}},
+{ 451350, 3, {90,85,59}},
+{ 451360, 3, {91,80,62}},
+{ 451368, 3, {6269,9,8}},
+{ 451512, 3, {6271,9,8}},
+{ 451584, 3, {84,84,64}},
+{ 451620, 3, {193,52,45}},
+{ 451656, 3, {82,81,68}},
+{ 451704, 3, {88,87,59}},
+{ 451800, 3, {251,45,40}},
+{ 451836, 3, {163,63,44}},
+{ 451872, 3, {523,32,27}},
+{ 451880, 3, {88,79,65}},
+{ 451920, 3, {269,42,40}},
+{ 451944, 3, {6277,9,8}},
+{ 451968, 3, {107,66,64}},
+{ 452010, 3, {95,78,61}},
+{ 452088, 3, {84,78,69}},
+{ 452100, 3, {137,60,55}},
+{ 452160, 3, {157,60,48}},
+{ 452232, 3, {571,33,24}},
+{ 452270, 3, {91,71,70}},
+{ 452340, 3, {359,36,35}},
+{ 452352, 3, {93,76,64}},
+{ 452375, 3, {125,77,47}},
+{ 452400, 3, {87,80,65}},
+{ 452448, 3, {1571,18,16}},
+{ 452466, 3, {98,81,57}},
+{ 452480, 3, {101,70,64}},
+{ 452550, 3, {431,35,30}},
+{ 452640, 3, {82,80,69}},
+{ 452655, 3, {479,35,27}},
+{ 452664, 3, {6287,9,8}},
+{ 452736, 3, {131,64,54}},
+{ 452760, 3, {84,77,70}},
+{ 452790, 3, {86,81,65}},
+{ 452844, 3, {599,28,27}},
+{ 452880, 3, {85,74,72}},
+{ 452907, 3, {91,79,63}},
+{ 452928, 3, {337,42,32}},
+{ 453024, 3, {88,78,66}},
+{ 453033, 3, {119,81,47}},
+{ 453060, 3, {839,27,20}},
+{ 453096, 3, {87,84,62}},
+{ 453150, 3, {95,90,53}},
+{ 453200, 3, {103,80,55}},
+{ 453250, 3, {125,74,49}},
+{ 453360, 3, {1889,16,15}},
+{ 453376, 3, {92,77,64}},
+{ 453420, 3, {229,45,44}},
+{ 453440, 3, {109,65,64}},
+{ 453468, 3, {93,92,53}},
+{ 453528, 3, {6299,9,8}},
+{ 453544, 3, {91,89,56}},
+{ 453600, 3, {81,80,70}},
+{ 453672, 3, {6301,9,8}},
+{ 453684, 3, {491,33,28}},
+{ 453696, 3, {139,64,51}},
+{ 453720, 3, {199,57,40}},
+{ 453744, 3, {137,69,48}},
+{ 453780, 3, {2521,15,12}},
+{ 453840, 3, {93,80,61}},
+{ 453900, 3, {89,75,68}},
+{ 453915, 3, {131,63,55}},
+{ 453936, 3, {193,49,48}},
+{ 453948, 3, {181,57,44}},
+{ 453960, 3, {97,72,65}},
+{ 454005, 3, {95,81,59}},
+{ 454050, 3, {1009,25,18}},
+{ 454080, 3, {86,80,66}},
+{ 454104, 3, {106,68,63}},
+{ 454140, 3, {87,87,60}},
+{ 454200, 3, {757,25,24}},
+{ 454248, 3, {701,27,24}},
+{ 454272, 3, {91,78,64}},
+{ 454275, 3, {673,27,25}},
+{ 454300, 3, {100,77,59}},
+{ 454320, 3, {631,30,24}},
+{ 454356, 3, {601,28,27}},
+{ 454392, 3, {6311,9,8}},
+{ 454410, 3, {85,81,66}},
+{ 454500, 3, {101,75,60}},
+{ 454545, 3, {111,65,63}},
+{ 454572, 3, {92,81,61}},
+{ 454608, 3, {82,77,72}},
+{ 454650, 3, {433,35,30}},
+{ 454720, 3, {98,80,58}},
+{ 454740, 3, {106,66,65}},
+{ 454752, 3, {1579,18,16}},
+{ 454824, 3, {6317,9,8}},
+{ 454848, 3, {103,69,64}},
+{ 454860, 3, {95,76,63}},
+{ 454896, 3, {81,78,72}},
+{ 454920, 3, {223,51,40}},
+{ 455004, 3, {383,36,33}},
+{ 455070, 3, {197,55,42}},
+{ 455124, 3, {97,69,68}},
+{ 455136, 3, {431,33,32}},
+{ 455175, 3, {85,85,63}},
+{ 455200, 3, {569,32,25}},
+{ 455220, 3, {281,45,36}},
+{ 455256, 3, {6323,9,8}},
+{ 455280, 3, {271,42,40}},
+{ 455301, 3, {81,77,73}},
+{ 455328, 3, {93,72,68}},
+{ 455364, 3, {139,63,52}},
+{ 455400, 3, {88,75,69}},
+{ 455520, 3, {80,78,73}},
+{ 455532, 3, {87,77,68}},
+{ 455544, 3, {81,76,74}},
+{ 455580, 3, {2531,15,12}},
+{ 455600, 3, {85,80,67}},
+{ 455616, 3, {113,64,63}},
+{ 455625, 3, {81,75,75}},
+{ 455676, 3, {127,69,52}},
+{ 455688, 3, {6329,9,8}},
+{ 455760, 3, {211,48,45}},
+{ 455840, 3, {80,77,74}},
+{ 455850, 3, {1013,25,18}},
+{ 455868, 3, {84,81,67}},
+{ 455904, 3, {1583,18,16}},
+{ 455910, 3, {167,65,42}},
+{ 455940, 3, {149,60,51}},
+{ 455994, 3, {94,77,63}},
+{ 456000, 3, {80,76,75}},
+{ 456120, 3, {181,56,45}},
+{ 456225, 3, {79,77,75}},
+{ 456228, 3, {87,76,69}},
+{ 456240, 3, {1901,16,15}},
+{ 456264, 3, {6337,9,8}},
+{ 456280, 3, {88,85,61}},
+{ 456540, 3, {1087,21,20}},
+{ 456576, 3, {87,82,64}},
+{ 456600, 3, {761,25,24}},
+{ 456624, 3, {151,56,54}},
+{ 456680, 3, {233,49,40}},
+{ 456696, 3, {6343,9,8}},
+{ 456720, 3, {173,55,48}},
+{ 456768, 3, {96,78,61}},
+{ 456800, 3, {571,32,25}},
+{ 456840, 3, {94,81,60}},
+{ 456885, 3, {99,71,65}},
+{ 456912, 3, {167,57,48}},
+{ 456960, 3, {84,80,68}},
+{ 456975, 3, {677,27,25}},
+{ 456984, 3, {577,33,24}},
+{ 457002, 3, {91,81,62}},
+{ 457020, 3, {2539,15,12}},
+{ 457056, 3, {92,72,69}},
+{ 457080, 3, {293,40,39}},
+{ 457128, 3, {907,24,21}},
+{ 457164, 3, {83,81,68}},
+{ 457248, 3, {433,33,32}},
+{ 457272, 3, {87,73,72}},
+{ 457275, 3, {91,75,67}},
+{ 457296, 3, {1361,21,16}},
+{ 457317, 3, {119,63,61}},
+{ 457344, 3, {397,36,32}},
+{ 457380, 3, {90,77,66}},
+{ 457416, 3, {6353,9,8}},
+{ 457470, 3, {85,78,69}},
+{ 457548, 3, {419,39,28}},
+{ 457600, 3, {88,80,65}},
+{ 457632, 3, {227,48,42}},
+{ 457650, 3, {113,75,54}},
+{ 457680, 3, {1907,16,15}},
+{ 457710, 3, {95,73,66}},
+{ 457740, 3, {2543,15,12}},
+{ 457758, 3, {173,54,49}},
+{ 457776, 3, {99,68,68}},
+{ 457800, 3, {109,70,60}},
+{ 457848, 3, {6359,9,8}},
+{ 457856, 3, {98,73,64}},
+{ 457884, 3, {84,79,69}},
+{ 457920, 3, {96,90,53}},
+{ 457992, 3, {6361,9,8}},
+{ 458016, 3, {367,39,32}},
+{ 458040, 3, {347,40,33}},
+{ 458055, 3, {87,81,65}},
+{ 458080, 3, {409,35,32}},
+{ 458136, 3, {101,72,63}},
+{ 458150, 3, {85,77,70}},
+{ 458160, 3, {83,80,69}},
+{ 458220, 3, {1091,21,20}},
+{ 458388, 3, {107,68,63}},
+{ 458400, 3, {191,50,48}},
+{ 458424, 3, {6367,9,8}},
+{ 458460, 3, {283,45,36}},
+{ 458550, 3, {1019,25,18}},
+{ 458700, 3, {139,60,55}},
+{ 458784, 3, {96,81,59}},
+{ 458796, 3, {173,52,51}},
+{ 458820, 3, {2549,15,12}},
+{ 458856, 3, {6373,9,8}},
+{ 458865, 3, {103,81,55}},
+{ 458892, 3, {607,28,27}},
+{ 458920, 3, {149,56,55}},
+{ 458964, 3, {99,76,61}},
+{ 459000, 3, {85,75,72}},
+{ 459030, 3, {107,66,65}},
+{ 459060, 3, {1093,21,20}},
+{ 459081, 3, {347,49,27}},
+{ 459120, 3, {1913,16,15}},
+{ 459144, 3, {911,24,21}},
+{ 459180, 3, {2551,15,12}},
+{ 459200, 3, {82,80,70}},
+{ 459225, 3, {157,65,45}},
+{ 459228, 3, {84,77,71}},
+{ 459264, 3, {92,78,64}},
+{ 459270, 3, {81,81,70}},
+{ 459288, 3, {6379,9,8}},
+{ 459312, 3, {1367,21,16}},
+{ 459360, 3, {87,80,66}},
+{ 459375, 3, {125,75,49}},
+{ 459420, 3, {93,76,65}},
+{ 459424, 3, {293,49,32}},
+{ 459432, 3, {709,27,24}},
+{ 459450, 3, {1021,25,18}},
+{ 459459, 3, {99,91,51}},
+{ 459690, 3, {199,55,42}},
+{ 459732, 3, {421,39,28}},
+{ 459800, 3, {95,88,55}},
+{ 459810, 3, {131,65,54}},
+{ 459816, 3, {98,69,68}},
+{ 459840, 3, {479,32,30}},
+{ 459888, 3, {88,78,67}},
+{ 459900, 3, {84,75,73}},
+{ 459936, 3, {1597,18,16}},
+{ 460008, 3, {6389,9,8}},
+{ 460020, 3, {85,82,66}},
+{ 460080, 3, {81,80,71}},
+{ 460096, 3, {91,79,64}},
+{ 460152, 3, {83,77,72}},
+{ 460215, 3, {487,35,27}},
+{ 460260, 3, {2557,15,12}},
+{ 460368, 3, {139,69,48}},
+{ 460404, 3, {87,84,63}},
+{ 460416, 3, {109,66,64}},
+{ 460512, 3, {82,78,72}},
+{ 460530, 3, {86,85,63}},
+{ 460584, 3, {6397,9,8}},
+{ 460620, 3, {853,27,20}},
+{ 460680, 3, {349,40,33}},
+{ 460728, 3, {81,79,72}},
+{ 460740, 3, {1097,21,20}},
+{ 460836, 3, {251,51,36}},
+{ 460845, 3, {95,77,63}},
+{ 460908, 3, {93,84,59}},
+{ 460944, 3, {97,72,66}},
+{ 460950, 3, {439,35,30}},
+{ 460980, 3, {197,52,45}},
+{ 461025, 3, {683,27,25}},
+{ 461076, 3, {499,33,28}},
+{ 461088, 3, {1601,18,16}},
+{ 461100, 3, {100,87,53}},
+{ 461120, 3, {131,64,55}},
+{ 461125, 3, {125,119,31}},
+{ 461244, 3, {119,68,57}},
+{ 461280, 3, {93,80,62}},
+{ 461295, 3, {85,81,67}},
+{ 461328, 3, {1373,21,16}},
+{ 461340, 3, {233,45,44}},
+{ 461384, 3, {107,77,56}},
+{ 461400, 3, {769,25,24}},
+{ 461440, 3, {103,70,64}},
+{ 461448, 3, {87,78,68}},
+{ 461472, 3, {88,76,69}},
+{ 461475, 3, {293,45,35}},
+{ 461520, 3, {641,30,24}},
+{ 461538, 3, {81,77,74}},
+{ 461580, 3, {157,60,49}},
+{ 461600, 3, {577,32,25}},
+{ 461604, 3, {269,44,39}},
+{ 461652, 3, {93,73,68}},
+{ 461664, 3, {229,48,42}},
+{ 461700, 3, {81,76,75}},
+{ 461727, 3, {349,49,27}},
+{ 461760, 3, {80,78,74}},
+{ 461952, 3, {401,36,32}},
+{ 462000, 3, {80,77,75}},
+{ 462024, 3, {93,72,69}},
+{ 462060, 3, {151,60,51}},
+{ 462132, 3, {389,36,33}},
+{ 462144, 3, {87,83,64}},
+{ 462168, 3, {131,63,56}},
+{ 462280, 3, {127,65,56}},
+{ 462300, 3, {92,75,67}},
+{ 462312, 3, {6421,9,8}},
+{ 462336, 3, {86,84,64}},
+{ 462400, 3, {85,80,68}},
+{ 462420, 3, {367,36,35}},
+{ 462560, 3, {98,80,59}},
+{ 462600, 3, {257,45,40}},
+{ 462672, 3, {84,81,68}},
+{ 462735, 3, {113,65,63}},
+{ 462744, 3, {6427,9,8}},
+{ 462780, 3, {857,27,20}},
+{ 462800, 3, {89,80,65}},
+{ 462816, 3, {1607,18,16}},
+{ 462825, 3, {99,85,55}},
+{ 462840, 3, {87,76,70}},
+{ 462924, 3, {167,63,44}},
+{ 462960, 3, {643,30,24}},
+{ 463008, 3, {96,91,53}},
+{ 463050, 3, {98,75,63}},
+{ 463080, 3, {227,51,40}},
+{ 463176, 3, {919,24,21}},
+{ 463200, 3, {193,50,48}},
+{ 463232, 3, {94,77,64}},
+{ 463260, 3, {1103,21,20}},
+{ 463296, 3, {127,64,57}},
+{ 463320, 3, {88,81,65}},
+{ 463344, 3, {197,49,48}},
+{ 463392, 3, {1609,18,16}},
+{ 463400, 3, {331,40,35}},
+{ 463428, 3, {613,28,27}},
+{ 463440, 3, {1931,16,15}},
+{ 463500, 3, {103,75,60}},
+{ 463536, 3, {87,74,72}},
+{ 463540, 3, {86,77,70}},
+{ 463584, 3, {439,33,32}},
+{ 463590, 3, {101,85,54}},
+{ 463600, 3, {95,80,61}},
+{ 463680, 3, {84,80,69}},
+{ 463736, 3, {91,91,56}},
+{ 463752, 3, {113,72,57}},
+{ 463760, 3, {88,85,62}},
+{ 463800, 3, {773,25,24}},
+{ 463860, 3, {859,27,20}},
+{ 463920, 3, {1933,16,15}},
+{ 463950, 3, {1031,25,18}},
+{ 463968, 3, {179,54,48}},
+{ 463980, 3, {95,74,66}},
+{ 463995, 3, {491,35,27}},
+{ 464016, 3, {1381,21,16}},
+{ 464100, 3, {85,78,70}},
+{ 464128, 3, {98,74,64}},
+{ 464220, 3, {2579,15,12}},
+{ 464232, 3, {92,87,58}},
+{ 464256, 3, {93,78,64}},
+{ 464310, 3, {90,77,67}},
+{ 464328, 3, {6449,9,8}},
+{ 464373, 3, {91,81,63}},
+{ 464400, 3, {86,75,72}},
+{ 464436, 3, {97,76,63}},
+{ 464464, 3, {91,88,58}},
+{ 464472, 3, {6451,9,8}},
+{ 464508, 3, {99,69,68}},
+{ 464544, 3, {1613,18,16}},
+{ 464580, 3, {89,87,60}},
+{ 464640, 3, {88,80,66}},
+{ 464724, 3, {331,39,36}},
+{ 464772, 3, {503,33,28}},
+{ 464800, 3, {83,80,70}},
+{ 464850, 3, {1033,25,18}},
+{ 464904, 3, {587,33,24}},
+{ 464940, 3, {82,81,70}},
+{ 465010, 3, {91,73,70}},
+{ 465036, 3, {271,44,39}},
+{ 465080, 3, {151,56,55}},
+{ 465120, 3, {85,76,72}},
+{ 465150, 3, {443,35,30}},
+{ 465255, 3, {211,49,45}},
+{ 465348, 3, {157,57,52}},
+{ 465360, 3, {277,42,40}},
+{ 465408, 3, {101,72,64}},
+{ 465504, 3, {373,39,32}},
+{ 465528, 3, {163,56,51}},
+{ 465600, 3, {97,75,64}},
+{ 465630, 3, {85,83,66}},
+{ 465660, 3, {199,52,45}},
+{ 465696, 3, {84,77,72}},
+{ 465768, 3, {6469,9,8}},
+{ 465780, 3, {1109,21,20}},
+{ 465840, 3, {647,30,24}},
+{ 465885, 3, {87,85,63}},
+{ 465912, 3, {719,27,24}},
+{ 465920, 3, {91,80,64}},
+{ 465960, 3, {353,40,33}},
+{ 466020, 3, {863,27,20}},
+{ 466056, 3, {6473,9,8}},
+{ 466128, 3, {83,78,72}},
+{ 466200, 3, {84,75,74}},
+{ 466272, 3, {1619,18,16}},
+{ 466284, 3, {91,84,61}},
+{ 466290, 3, {157,55,54}},
+{ 466320, 3, {87,80,67}},
+{ 466368, 3, {347,42,32}},
+{ 466375, 3, {125,91,41}},
+{ 466380, 3, {2591,15,12}},
+{ 466425, 3, {691,27,25}},
+{ 466452, 3, {617,28,27}},
+{ 466488, 3, {93,76,66}},
+{ 466560, 3, {81,80,72}},
+{ 466632, 3, {6481,9,8}},
+{ 466650, 3, {90,85,61}},
+{ 466716, 3, {89,76,69}},
+{ 466725, 3, {127,75,49}},
+{ 466740, 3, {2593,15,12}},
+{ 466752, 3, {88,78,68}},
+{ 466830, 3, {95,78,63}},
+{ 466848, 3, {1621,18,16}},
+{ 466956, 3, {109,68,63}},
+{ 466992, 3, {94,72,69}},
+{ 467016, 3, {88,87,61}},
+{ 467019, 3, {353,49,27}},
+{ 467100, 3, {173,54,50}},
+{ 467160, 3, {229,51,40}},
+{ 467208, 3, {103,72,63}},
+{ 467280, 3, {90,88,59}},
+{ 467352, 3, {6491,9,8}},
+{ 467364, 3, {87,79,68}},
+{ 467376, 3, {107,78,56}},
+{ 467400, 3, {82,76,75}},
+{ 467415, 3, {117,85,47}},
+{ 467424, 3, {541,32,27}},
+{ 467520, 3, {487,32,30}},
+{ 467544, 3, {88,77,69}},
+{ 467550, 3, {1039,25,18}},
+{ 467568, 3, {191,51,48}},
+{ 467610, 3, {109,66,65}},
+{ 467712, 3, {87,84,64}},
+{ 467760, 3, {1949,16,15}},
+{ 467775, 3, {81,77,75}},
+{ 467808, 3, {443,33,32}},
+{ 467820, 3, {113,69,60}},
+{ 467856, 3, {81,76,76}},
+{ 467950, 3, {191,50,49}},
+{ 467964, 3, {619,28,27}},
+{ 467976, 3, {93,74,68}},
+{ 468000, 3, {80,78,75}},
+{ 468048, 3, {199,49,48}},
+{ 468096, 3, {106,69,64}},
+{ 468160, 3, {80,77,76}},
+{ 468180, 3, {85,81,68}},
+{ 468195, 3, {105,91,49}},
+{ 468216, 3, {929,24,21}},
+{ 468240, 3, {1951,16,15}},
+{ 468342, 3, {98,81,59}},
+{ 468440, 3, {239,49,40}},
+{ 468540, 3, {137,60,57}},
+{ 468576, 3, {1627,18,16}},
+{ 468585, 3, {89,81,65}},
+{ 468600, 3, {88,75,71}},
+{ 468720, 3, {93,72,70}},
+{ 468832, 3, {92,91,56}},
+{ 468875, 3, {125,121,31}},
+{ 468930, 3, {87,77,70}},
+{ 468996, 3, {121,68,57}},
+{ 469040, 3, {88,82,65}},
+{ 469056, 3, {349,42,32}},
+{ 469140, 3, {1117,21,20}},
+{ 469152, 3, {181,54,48}},
+{ 469200, 3, {85,80,69}},
+{ 469224, 3, {98,76,63}},
+{ 469248, 3, {94,78,64}},
+{ 469280, 3, {419,35,32}},
+{ 469392, 3, {127,66,56}},
+{ 469395, 3, {95,81,61}},
+{ 469440, 3, {163,60,48}},
+{ 469452, 3, {87,76,71}},
+{ 469476, 3, {84,81,69}},
+{ 469512, 3, {6521,9,8}},
+{ 469600, 3, {587,32,25}},
+{ 469620, 3, {2609,15,12}},
+{ 469656, 3, {593,33,24}},
+{ 469700, 3, {100,77,61}},
+{ 469728, 3, {233,48,42}},
+{ 469755, 3, {99,73,65}},
+{ 469800, 3, {87,75,72}},
+{ 469872, 3, {251,48,39}},
+{ 469920, 3, {89,80,66}},
+{ 469980, 3, {373,36,35}},
+{ 470008, 3, {109,77,56}},
+{ 470028, 3, {131,69,52}},
+{ 470064, 3, {1399,21,16}},
+{ 470080, 3, {113,65,64}},
+{ 470088, 3, {6529,9,8}},
+{ 470106, 3, {91,82,63}},
+{ 470160, 3, {653,30,24}},
+{ 470208, 3, {93,79,64}},
+{ 470250, 3, {95,75,66}},
+{ 470316, 3, {509,33,28}},
+{ 470400, 3, {84,80,70}},
+{ 470448, 3, {88,81,66}},
+{ 470547, 3, {97,77,63}},
+{ 470580, 3, {93,92,55}},
+{ 470610, 3, {83,81,70}},
+{ 470652, 3, {431,39,28}},
+{ 470730, 3, {85,78,71}},
+{ 470800, 3, {107,80,55}},
+{ 470820, 3, {95,84,59}},
+{ 470925, 3, {91,75,69}},
+{ 471060, 3, {2617,15,12}},
+{ 471096, 3, {727,27,24}},
+{ 471168, 3, {409,36,32}},
+{ 471200, 3, {95,80,62}},
+{ 471240, 3, {85,77,72}},
+{ 471360, 3, {491,32,30}},
+{ 471380, 3, {91,74,70}},
+{ 471384, 3, {6547,9,8}},
+{ 471420, 3, {97,81,60}},
+{ 471450, 3, {449,35,30}},
+{ 471456, 3, {1637,18,16}},
+{ 471520, 3, {421,35,32}},
+{ 471555, 3, {499,35,27}},
+{ 471625, 3, {125,77,49}},
+{ 471636, 3, {397,36,33}},
+{ 471660, 3, {1123,21,20}},
+{ 471672, 3, {6551,9,8}},
+{ 471744, 3, {84,78,72}},
+{ 471780, 3, {2621,15,12}},
+{ 471800, 3, {337,40,35}},
+{ 471816, 3, {6553,9,8}},
+{ 471852, 3, {257,51,36}},
+{ 471900, 3, {110,66,65}},
+{ 471960, 3, {90,76,69}},
+{ 472032, 3, {149,66,48}},
+{ 472050, 3, {1049,25,18}},
+{ 472080, 3, {281,42,40}},
+{ 472164, 3, {84,77,73}},
+{ 472200, 3, {787,25,24}},
+{ 472236, 3, {92,87,59}},
+{ 472248, 3, {937,24,21}},
+{ 472290, 3, {173,65,42}},
+{ 472311, 3, {119,63,63}},
+{ 472360, 3, {241,49,40}},
+{ 472392, 3, {81,81,72}},
+{ 472464, 3, {193,51,48}},
+{ 472472, 3, {91,88,59}},
+{ 472500, 3, {84,75,75}},
+{ 472512, 3, {107,69,64}},
+{ 472536, 3, {6563,9,8}},
+{ 472560, 3, {179,55,48}},
+{ 472608, 3, {547,32,27}},
+{ 472680, 3, {101,72,65}},
+{ 472725, 3, {191,55,45}},
+{ 472770, 3, {103,85,54}},
+{ 472800, 3, {197,50,48}},
+{ 472815, 3, {95,79,63}},
+{ 472836, 3, {433,39,28}},
+{ 472850, 3, {193,50,49}},
+{ 472950, 3, {1051,25,18}},
+{ 472968, 3, {6569,9,8}},
+{ 472992, 3, {379,39,32}},
+{ 473040, 3, {81,80,73}},
+{ 473088, 3, {88,84,64}},
+{ 473100, 3, {83,76,75}},
+{ 473112, 3, {6571,9,8}},
+{ 473148, 3, {337,39,36}},
+{ 473175, 3, {701,27,25}},
+{ 473184, 3, {96,93,53}},
+{ 473200, 3, {91,80,65}},
+{ 473220, 3, {239,45,44}},
+{ 473280, 3, {87,80,68}},
+{ 473328, 3, {173,57,48}},
+{ 473400, 3, {263,45,40}},
+{ 473424, 3, {1409,21,16}},
+{ 473472, 3, {137,64,54}},
+{ 473484, 3, {211,51,44}},
+{ 473520, 3, {1973,16,15}},
+{ 473544, 3, {6577,9,8}},
+{ 473550, 3, {82,77,75}},
+{ 473556, 3, {93,76,67}},
+{ 473580, 3, {877,27,20}},
+{ 473616, 3, {88,78,69}},
+{ 473634, 3, {179,54,49}},
+{ 473688, 3, {86,81,68}},
+{ 473760, 3, {94,72,70}},
+{ 473832, 3, {6581,9,8}},
+{ 473850, 3, {81,78,75}},
+{ 473880, 3, {359,40,33}},
+{ 473892, 3, {101,69,68}},
+{ 473928, 3, {91,84,62}},
+{ 473940, 3, {2633,15,12}},
+{ 474000, 3, {80,79,75}},
+{ 474012, 3, {81,77,76}},
+{ 474144, 3, {449,33,32}},
+{ 474180, 3, {1129,21,20}},
+{ 474240, 3, {80,78,76}},
+{ 474264, 3, {941,24,21}},
+{ 474300, 3, {93,75,68}},
+{ 474320, 3, {80,77,77}},
+{ 474336, 3, {96,81,61}},
+{ 474400, 3, {593,32,25}},
+{ 474408, 3, {599,33,24}},
+{ 474432, 3, {353,42,32}},
+{ 474480, 3, {659,30,24}},
+{ 474600, 3, {113,70,60}},
+{ 474624, 3, {103,72,64}},
+{ 474660, 3, {293,45,36}},
+{ 474672, 3, {88,87,62}},
+{ 474705, 3, {137,63,55}},
+{ 474708, 3, {179,52,51}},
+{ 474720, 3, {86,80,69}},
+{ 474760, 3, {88,83,65}},
+{ 474768, 3, {157,56,54}},
+{ 474880, 3, {106,70,64}},
+{ 474957, 3, {359,49,27}},
+{ 474960, 3, {1979,16,15}},
+{ 474984, 3, {733,27,24}},
+{ 475065, 3, {85,81,69}},
+{ 475128, 3, {6599,9,8}},
+{ 475200, 3, {88,75,72}},
+{ 475272, 3, {84,82,69}},
+{ 475320, 3, {233,51,40}},
+{ 475332, 3, {277,44,39}},
+{ 475335, 3, {503,35,27}},
+{ 475380, 3, {139,60,57}},
+{ 475398, 3, {98,77,63}},
+{ 475416, 3, {93,72,71}},
+{ 475440, 3, {283,42,40}},
+{ 475608, 3, {149,57,56}},
+{ 475704, 3, {6607,9,8}},
+{ 475740, 3, {881,27,20}},
+{ 475776, 3, {96,84,59}},
+{ 475839, 3, {91,83,63}},
+{ 475875, 3, {125,81,47}},
+{ 475920, 3, {661,30,24}},
+{ 475992, 3, {601,33,24}},
+{ 476000, 3, {85,80,70}},
+{ 476064, 3, {87,76,72}},
+{ 476100, 3, {92,75,69}},
+{ 476112, 3, {109,78,56}},
+{ 476160, 3, {93,80,64}},
+{ 476190, 3, {99,74,65}},
+{ 476280, 3, {84,81,70}},
+{ 476388, 3, {401,36,33}},
+{ 476460, 3, {2647,15,12}},
+{ 476520, 3, {95,76,66}},
+{ 476532, 3, {93,84,61}},
+{ 476568, 3, {6619,9,8}},
+{ 476595, 3, {89,85,63}},
+{ 476672, 3, {98,76,64}},
+{ 476685, 3, {107,81,55}},
+{ 476775, 3, {163,65,45}},
+{ 476784, 3, {86,77,72}},
+{ 476800, 3, {149,64,50}},
+{ 476820, 3, {883,27,20}},
+{ 476840, 3, {131,65,56}},
+{ 476850, 3, {85,85,66}},
+{ 476880, 3, {1987,16,15}},
+{ 476952, 3, {167,56,51}},
+{ 477000, 3, {106,75,60}},
+{ 477015, 3, {105,77,59}},
+{ 477036, 3, {631,28,27}},
+{ 477090, 3, {95,81,62}},
+{ 477120, 3, {84,80,71}},
+{ 477180, 3, {241,45,44}},
+{ 477204, 3, {91,76,69}},
+{ 477216, 3, {1657,18,16}},
+{ 477288, 3, {947,24,21}},
+{ 477312, 3, {113,66,64}},
+{ 477360, 3, {85,78,72}},
+{ 477400, 3, {100,77,62}},
+{ 477450, 3, {1061,25,18}},
+{ 477477, 3, {99,91,53}},
+{ 477540, 3, {379,36,35}},
+{ 477568, 3, {91,82,64}},
+{ 477576, 3, {88,81,67}},
+{ 477600, 3, {199,50,48}},
+{ 477603, 3, {133,63,57}},
+{ 477675, 3, {193,55,45}},
+{ 477750, 3, {91,75,70}},
+{ 477840, 3, {181,55,48}},
+{ 477864, 3, {6637,9,8}},
+{ 477888, 3, {131,64,57}},
+{ 477972, 3, {99,71,68}},
+{ 477984, 3, {383,39,32}},
+{ 478016, 3, {97,77,64}},
+{ 478128, 3, {1423,21,16}},
+{ 478170, 3, {90,77,69}},
+{ 478200, 3, {797,25,24}},
+{ 478224, 3, {82,81,72}},
+{ 478240, 3, {98,80,61}},
+{ 478260, 3, {2657,15,12}},
+{ 478320, 3, {1993,16,15}},
+{ 478350, 3, {1063,25,18}},
+{ 478368, 3, {151,66,48}},
+{ 478380, 3, {85,84,67}},
+{ 478400, 3, {92,80,65}},
+{ 478464, 3, {89,84,64}},
+{ 478500, 3, {100,87,55}},
+{ 478575, 3, {709,27,25}},
+{ 478584, 3, {102,69,68}},
+{ 478620, 3, {2659,15,12}},
+{ 478632, 3, {84,77,74}},
+{ 478800, 3, {84,76,75}},
+{ 478848, 3, {87,86,64}},
+{ 478872, 3, {739,27,24}},
+{ 478920, 3, {307,40,39}},
+{ 478926, 3, {181,54,49}},
+{ 478944, 3, {1663,18,16}},
+{ 478980, 3, {887,27,20}},
+{ 479016, 3, {6653,9,8}},
+{ 479024, 3, {94,91,56}},
+{ 479028, 3, {191,57,44}},
+{ 479040, 3, {499,32,30}},
+{ 479115, 3, {91,81,65}},
+{ 479196, 3, {87,81,68}},
+{ 479200, 3, {599,32,25}},
+{ 479220, 3, {163,60,49}},
+{ 479232, 3, {96,78,64}},
+{ 479280, 3, {1997,16,15}},
+{ 479325, 3, {83,77,75}},
+{ 479340, 3, {2663,15,12}},
+{ 479360, 3, {107,70,64}},
+{ 479388, 3, {439,39,28}},
+{ 479400, 3, {94,75,68}},
+{ 479448, 3, {6659,9,8}},
+{ 479472, 3, {1427,21,16}},
+{ 479520, 3, {81,80,74}},
+{ 479556, 3, {173,63,44}},
+{ 479592, 3, {6661,9,8}},
+{ 479600, 3, {109,80,55}},
+{ 479655, 3, {99,85,57}},
+{ 479688, 3, {88,79,69}},
+{ 479710, 3, {89,77,70}},
+{ 479760, 3, {1999,16,15}},
+{ 479850, 3, {457,35,30}},
+{ 479925, 3, {81,79,75}},
+{ 479952, 3, {101,72,66}},
+{ 480000, 3, {80,80,75}},
+{ 480012, 3, {181,52,51}},
+{ 480060, 3, {127,63,60}},
+{ 480096, 3, {1667,18,16}},
+{ 480144, 3, {1429,21,16}},
+{ 480168, 3, {81,78,76}},
+{ 480240, 3, {87,80,69}},
+{ 480249, 3, {81,77,77}},
+{ 480312, 3, {953,24,21}},
+{ 480384, 3, {139,64,54}},
+{ 480420, 3, {157,60,51}},
+{ 480456, 3, {6673,9,8}},
+{ 480480, 3, {80,78,77}},
+{ 480600, 3, {89,75,72}},
+{ 480624, 3, {93,76,68}},
+{ 480672, 3, {1669,18,16}},
+{ 480720, 3, {2003,16,15}},
+{ 480744, 3, {607,33,24}},
+{ 480780, 3, {2671,15,12}},
+{ 480800, 3, {601,32,25}},
+{ 480816, 3, {106,72,63}},
+{ 480852, 3, {111,76,57}},
+{ 480870, 3, {137,65,54}},
+{ 480888, 3, {6679,9,8}},
+{ 480960, 3, {167,60,48}},
+{ 480975, 3, {121,75,53}},
+{ 481005, 3, {509,35,27}},
+{ 481050, 3, {1069,25,18}},
+{ 481068, 3, {84,83,69}},
+{ 481080, 3, {211,57,40}},
+{ 481104, 3, {257,48,39}},
+{ 481248, 3, {557,32,27}},
+{ 481320, 3, {191,56,45}},
+{ 481344, 3, {109,69,64}},
+{ 481376, 3, {307,49,32}},
+{ 481404, 3, {521,33,28}},
+{ 481425, 3, {131,75,49}},
+{ 481440, 3, {96,85,59}},
+{ 481464, 3, {743,27,24}},
+{ 481488, 3, {1433,21,16}},
+{ 481500, 3, {107,75,60}},
+{ 481572, 3, {91,84,63}},
+{ 481600, 3, {86,80,70}},
+{ 481608, 3, {6689,9,8}},
+{ 481635, 3, {139,63,55}},
+{ 481650, 3, {95,78,65}},
+{ 481680, 3, {223,48,45}},
+{ 481752, 3, {6691,9,8}},
+{ 481800, 3, {88,75,73}},
+{ 481824, 3, {239,48,42}},
+{ 481860, 3, {2677,15,12}},
+{ 481896, 3, {97,72,69}},
+{ 481950, 3, {85,81,70}},
+{ 481992, 3, {151,57,56}},
+{ 482040, 3, {103,72,65}},
+{ 482112, 3, {93,72,72}},
+{ 482125, 3, {133,125,29}},
+{ 482196, 3, {281,44,39}},
+{ 482240, 3, {137,64,55}},
+{ 482256, 3, {197,51,48}},
+{ 482328, 3, {87,77,72}},
+{ 482400, 3, {90,80,67}},
+{ 482448, 3, {92,76,69}},
+{ 482460, 3, {86,85,66}},
+{ 482472, 3, {6701,9,8}},
+{ 482496, 3, {359,42,32}},
+{ 482580, 3, {383,36,35}},
+{ 482592, 3, {457,33,32}},
+{ 482616, 3, {6703,9,8}},
+{ 482625, 3, {99,75,65}},
+{ 482640, 3, {2011,16,15}},
+{ 482650, 3, {197,50,49}},
+{ 482676, 3, {87,76,73}},
+{ 482688, 3, {419,36,32}},
+{ 482720, 3, {431,35,32}},
+{ 482790, 3, {95,77,66}},
+{ 482800, 3, {85,80,71}},
+{ 482856, 3, {93,88,59}},
+{ 482868, 3, {263,51,36}},
+{ 482880, 3, {503,32,30}},
+{ 482940, 3, {2683,15,12}},
+{ 482944, 3, {98,77,64}},
+{ 482976, 3, {86,78,72}},
+{ 483000, 3, {92,75,70}},
+{ 483048, 3, {6709,9,8}},
+{ 483084, 3, {84,81,71}},
+{ 483120, 3, {90,88,61}},
+{ 483132, 3, {163,57,52}},
+{ 483200, 3, {151,64,50}},
+{ 483210, 3, {91,90,59}},
+{ 483252, 3, {523,33,28}},
+{ 483276, 3, {103,69,68}},
+{ 483300, 3, {179,54,50}},
+{ 483336, 3, {137,63,56}},
+{ 483360, 3, {96,95,53}},
+{ 483392, 3, {91,83,64}},
+{ 483420, 3, {1151,21,20}},
+{ 483480, 3, {85,79,72}},
+{ 483504, 3, {1439,21,16}},
+{ 483525, 3, {307,45,35}},
+{ 483560, 3, {157,56,55}},
+{ 483588, 3, {101,76,63}},
+{ 483600, 3, {93,80,65}},
+{ 483660, 3, {2687,15,12}},
+{ 483756, 3, {443,39,28}},
+{ 483768, 3, {6719,9,8}},
+{ 483840, 3, {84,80,72}},
+{ 483875, 3, {125,79,49}},
+{ 483990, 3, {85,78,73}},
+{ 484020, 3, {2689,15,12}},
+{ 484044, 3, {193,57,44}},
+{ 484050, 3, {461,35,30}},
+{ 484056, 3, {83,81,72}},
+{ 484080, 3, {2017,16,15}},
+{ 484092, 3, {113,68,63}},
+{ 484110, 3, {163,55,54}},
+{ 484120, 3, {91,76,70}},
+{ 484176, 3, {131,66,56}},
+{ 484200, 3, {269,45,40}},
+{ 484218, 3, {98,81,61}},
+{ 484224, 3, {97,78,64}},
+{ 484260, 3, {1153,21,20}},
+{ 484344, 3, {93,84,62}},
+{ 484416, 3, {87,87,64}},
+{ 484440, 3, {367,40,33}},
+{ 484500, 3, {85,76,75}},
+{ 484560, 3, {673,30,24}},
+{ 484575, 3, {91,75,71}},
+{ 484596, 3, {641,28,27}},
+{ 484704, 3, {88,81,68}},
+{ 484740, 3, {2693,15,12}},
+{ 484770, 3, {113,66,65}},
+{ 484776, 3, {6733,9,8}},
+{ 484785, 3, {95,81,63}},
+{ 484800, 3, {101,75,64}},
+{ 484880, 3, {95,88,58}},
+{ 484960, 3, {433,35,32}},
+{ 484992, 3, {421,36,32}},
+{ 485064, 3, {6737,9,8}},
+{ 485100, 3, {84,77,75}},
+{ 485112, 3, {87,82,68}},
+{ 485160, 3, {311,40,39}},
+{ 485325, 3, {719,27,25}},
+{ 485352, 3, {107,72,63}},
+{ 485400, 3, {809,25,24}},
+{ 485472, 3, {389,39,32}},
+{ 485496, 3, {613,33,24}},
+{ 485520, 3, {85,84,68}},
+{ 485541, 3, {367,49,27}},
+{ 485595, 3, {109,81,55}},
+{ 485600, 3, {607,32,25}},
+{ 485628, 3, {283,44,39}},
+{ 485760, 3, {88,80,69}},
+{ 485800, 3, {347,40,35}},
+{ 485820, 3, {2699,15,12}},
+{ 485856, 3, {241,48,42}},
+{ 485892, 3, {409,36,33}},
+{ 486000, 3, {81,80,75}},
+{ 486080, 3, {98,80,62}},
+{ 486108, 3, {643,28,27}},
+{ 486150, 3, {463,35,30}},
+{ 486192, 3, {1447,21,16}},
+{ 486200, 3, {88,85,65}},
+{ 486324, 3, {81,79,76}},
+{ 486336, 3, {149,64,51}},
+{ 486360, 3, {193,56,45}},
+{ 486432, 3, {563,32,27}},
+{ 486480, 3, {2027,16,15}},
+{ 486486, 3, {81,78,77}},
+{ 486600, 3, {811,25,24}},
+{ 486640, 3, {80,79,77}},
+{ 486648, 3, {751,27,24}},
+{ 486720, 3, {80,78,78}},
+{ 486780, 3, {95,84,61}},
+{ 486792, 3, {6761,9,8}},
+{ 486816, 3, {461,33,32}},
+{ 486864, 3, {84,84,69}},
+{ 486936, 3, {6763,9,8}},
+{ 486948, 3, {93,77,68}},
+{ 486960, 3, {2029,16,15}},
+{ 487152, 3, {199,51,48}},
+{ 487188, 3, {347,39,36}},
+{ 487200, 3, {87,80,70}},
+{ 487256, 3, {113,77,56}},
+{ 487260, 3, {2707,15,12}},
+{ 487305, 3, {91,85,63}},
+{ 487344, 3, {88,78,71}},
+{ 487350, 3, {95,90,57}},
+{ 487368, 3, {967,24,21}},
+{ 487410, 3, {211,55,42}},
+{ 487440, 3, {677,30,24}},
+{ 487536, 3, {1451,21,16}},
+{ 487550, 3, {199,50,49}},
+{ 487560, 3, {239,51,40}},
+{ 487575, 3, {197,55,45}},
+{ 487584, 3, {1693,18,16}},
+{ 487620, 3, {86,81,70}},
+{ 487648, 3, {311,49,32}},
+{ 487680, 3, {127,64,60}},
+{ 487692, 3, {93,76,69}},
+{ 487760, 3, {91,80,67}},
+{ 487800, 3, {271,45,40}},
+{ 487872, 3, {88,77,72}},
+{ 487890, 3, {139,65,54}},
+{ 487980, 3, {2711,15,12}},
+{ 488064, 3, {93,82,64}},
+{ 488070, 3, {87,85,66}},
+{ 488088, 3, {6779,9,8}},
+{ 488124, 3, {149,63,52}},
+{ 488208, 3, {1453,21,16}},
+{ 488232, 3, {6781,9,8}},
+{ 488244, 3, {92,87,61}},
+{ 488280, 3, {313,40,39}},
+{ 488320, 3, {109,70,64}},
+{ 488340, 3, {2713,15,12}},
+{ 488376, 3, {102,76,63}},
+{ 488400, 3, {88,75,74}},
+{ 488448, 3, {106,72,64}},
+{ 488460, 3, {1163,21,20}},
+{ 488475, 3, {167,65,45}},
+{ 488488, 3, {91,88,61}},
+{ 488592, 3, {87,78,72}},
+{ 488600, 3, {349,40,35}},
+{ 488640, 3, {509,32,30}},
+{ 488664, 3, {617,33,24}},
+{ 488670, 3, {179,65,42}},
+{ 488700, 3, {181,54,50}},
+{ 488736, 3, {1697,18,16}},
+{ 488800, 3, {94,80,65}},
+{ 488808, 3, {93,73,72}},
+{ 488835, 3, {85,81,71}},
+{ 488880, 3, {97,72,70}},
+{ 488928, 3, {463,33,32}},
+{ 488952, 3, {6791,9,8}},
+{ 489060, 3, {95,78,66}},
+{ 489096, 3, {6793,9,8}},
+{ 489125, 3, {125,91,43}},
+{ 489132, 3, {647,28,27}},
+{ 489150, 3, {1087,25,18}},
+{ 489216, 3, {91,84,64}},
+{ 489280, 3, {139,64,55}},
+{ 489288, 3, {87,76,74}},
+{ 489312, 3, {1699,18,16}},
+{ 489360, 3, {2039,16,15}},
+{ 489384, 3, {971,24,21}},
+{ 489420, 3, {2719,15,12}},
+{ 489456, 3, {103,72,66}},
+{ 489555, 3, {115,99,43}},
+{ 489600, 3, {85,80,72}},
+{ 489636, 3, {87,84,67}},
+{ 489645, 3, {93,81,65}},
+{ 489744, 3, {179,57,48}},
+{ 489780, 3, {907,27,20}},
+{ 489816, 3, {6803,9,8}},
+{ 489825, 3, {311,45,35}},
+{ 489888, 3, {84,81,72}},
+{ 489900, 3, {92,75,71}},
+{ 489951, 3, {101,77,63}},
+{ 489984, 3, {88,87,64}},
+{ 489996, 3, {349,39,36}},
+{ 490140, 3, {389,36,35}},
+{ 490200, 3, {86,76,75}},
+{ 490212, 3, {89,81,68}},
+{ 490224, 3, {1459,21,16}},
+{ 490248, 3, {619,33,24}},
+{ 490308, 3, {449,39,28}},
+{ 490320, 3, {227,48,45}},
+{ 490350, 3, {467,35,30}},
+{ 490392, 3, {139,63,56}},
+{ 490400, 3, {613,32,25}},
+{ 490490, 3, {91,77,70}},
+{ 490500, 3, {109,75,60}},
+{ 490536, 3, {757,27,24}},
+{ 490560, 3, {84,80,73}},
+{ 490620, 3, {85,78,74}},
+{ 490644, 3, {99,84,59}},
+{ 490680, 3, {94,87,60}},
+{ 490725, 3, {727,27,25}},
+{ 490728, 3, {127,69,56}},
+{ 490770, 3, {95,82,63}},
+{ 490784, 3, {313,49,32}},
+{ 490860, 3, {101,81,60}},
+{ 490875, 3, {85,77,75}},
+{ 490950, 3, {1091,25,18}},
+{ 490980, 3, {167,60,49}},
+{ 491028, 3, {87,83,68}},
+{ 491040, 3, {93,80,66}},
+{ 491130, 3, {107,85,54}},
+{ 491220, 3, {2729,15,12}},
+{ 491256, 3, {6823,9,8}},
+{ 491280, 3, {89,80,69}},
+{ 491400, 3, {84,78,75}},
+{ 491436, 3, {99,73,68}},
+{ 491544, 3, {6827,9,8}},
+{ 491556, 3, {137,69,52}},
+{ 491568, 3, {84,77,76}},
+{ 491580, 3, {2731,15,12}},
+{ 491589, 3, {119,81,51}},
+{ 491616, 3, {569,32,27}},
+{ 491640, 3, {241,51,40}},
+{ 491680, 3, {439,35,32}},
+{ 491688, 3, {6829,9,8}},
+{ 491700, 3, {149,60,55}},
+{ 491715, 3, {223,49,45}},
+{ 491760, 3, {683,30,24}},
+{ 491820, 3, {1171,21,20}},
+{ 491832, 3, {88,81,69}},
+{ 491850, 3, {1093,25,18}},
+{ 491904, 3, {96,84,61}},
+{ 491920, 3, {88,86,65}},
+{ 491940, 3, {911,27,20}},
+{ 491960, 3, {251,49,40}},
+{ 491976, 3, {6833,9,8}},
+{ 492000, 3, {82,80,75}},
+{ 492030, 3, {90,77,71}},
+{ 492048, 3, {102,72,67}},
+{ 492075, 3, {81,81,75}},
+{ 492156, 3, {93,84,63}},
+{ 492192, 3, {1709,18,16}},
+{ 492240, 3, {293,42,40}},
+{ 492252, 3, {127,68,57}},
+{ 492336, 3, {263,48,39}},
+{ 492345, 3, {521,35,27}},
+{ 492360, 3, {373,40,33}},
+{ 492408, 3, {977,24,21}},
+{ 492450, 3, {98,75,67}},
+{ 492480, 3, {81,80,76}},
+{ 492525, 3, {199,55,45}},
+{ 492552, 3, {6841,9,8}},
+{ 492600, 3, {821,25,24}},
+{ 492660, 3, {85,84,69}},
+{ 492720, 3, {2053,16,15}},
+{ 492723, 3, {81,79,77}},
+{ 492768, 3, {96,87,59}},
+{ 492800, 3, {80,80,77}},
+{ 492864, 3, {151,64,51}},
+{ 492912, 3, {163,56,54}},
+{ 492936, 3, {94,76,69}},
+{ 492960, 3, {80,79,78}},
+{ 492975, 3, {313,45,35}},
+{ 493038, 3, {91,86,63}},
+{ 493056, 3, {107,72,64}},
+{ 493128, 3, {761,27,24}},
+{ 493152, 3, {467,33,32}},
+{ 493164, 3, {103,76,63}},
+{ 493185, 3, {105,77,61}},
+{ 493240, 3, {95,88,59}},
+{ 493248, 3, {367,42,32}},
+{ 493272, 3, {93,78,68}},
+{ 493290, 3, {87,81,70}},
+{ 493344, 3, {571,32,27}},
+{ 493380, 3, {2741,15,12}},
+{ 493416, 3, {89,77,72}},
+{ 493479, 3, {373,49,27}},
+{ 493488, 3, {149,69,48}},
+{ 493584, 3, {113,78,56}},
+{ 493600, 3, {617,32,25}},
+{ 493650, 3, {1097,25,18}},
+{ 493668, 3, {653,28,27}},
+{ 493680, 3, {88,85,66}},
+{ 493695, 3, {115,81,53}},
+{ 493704, 3, {6857,9,8}},
+{ 493740, 3, {211,52,45}},
+{ 493800, 3, {823,25,24}},
+{ 493857, 3, {91,81,67}},
+{ 493884, 3, {269,51,36}},
+{ 494000, 3, {95,80,65}},
+{ 494016, 3, {93,83,64}},
+{ 494076, 3, {197,57,44}},
+{ 494088, 3, {173,56,51}},
+{ 494130, 3, {181,65,42}},
+{ 494136, 3, {6863,9,8}},
+{ 494160, 3, {87,80,71}},
+{ 494200, 3, {353,40,35}},
+{ 494208, 3, {88,78,72}},
+{ 494235, 3, {523,35,27}},
+{ 494256, 3, {1471,21,16}},
+{ 494312, 3, {97,91,56}},
+{ 494361, 3, {133,63,59}},
+{ 494400, 3, {103,75,64}},
+{ 494424, 3, {109,72,63}},
+{ 494505, 3, {111,81,55}},
+{ 494520, 3, {317,40,39}},
+{ 494568, 3, {6869,9,8}},
+{ 494592, 3, {92,84,64}},
+{ 494640, 3, {229,48,45}},
+{ 494676, 3, {151,63,52}},
+{ 494700, 3, {97,75,68}},
+{ 494712, 3, {6871,9,8}},
+{ 494760, 3, {93,76,70}},
+{ 494775, 3, {733,27,25}},
+{ 494802, 3, {102,77,63}},
+{ 494820, 3, {2749,15,12}},
+{ 494856, 3, {87,79,72}},
+{ 494910, 3, {94,81,65}},
+{ 494988, 3, {167,57,52}},
+{ 495000, 3, {88,75,75}},
+{ 495040, 3, {91,80,68}},
+{ 495072, 3, {191,54,48}},
+{ 495120, 3, {2063,16,15}},
+{ 495180, 3, {131,63,60}},
+{ 495200, 3, {619,32,25}},
+{ 495216, 3, {181,57,48}},
+{ 495300, 3, {127,65,60}},
+{ 495330, 3, {95,79,66}},
+{ 495432, 3, {983,24,21}},
+{ 495456, 3, {397,39,32}},
+{ 495488, 3, {98,79,64}},
+{ 495495, 3, {99,77,65}},
+{ 495504, 3, {93,74,72}},
+{ 495540, 3, {2753,15,12}},
+{ 495552, 3, {89,87,64}},
+{ 495576, 3, {6883,9,8}},
+{ 495612, 3, {353,39,36}},
+{ 495648, 3, {1721,18,16}},
+{ 495720, 3, {85,81,72}},
+{ 495880, 3, {92,77,70}},
+{ 495900, 3, {87,76,75}},
+{ 495990, 3, {167,55,54}},
+{ 496020, 3, {1181,21,20}},
+{ 496080, 3, {106,72,65}},
+{ 496160, 3, {443,35,32}},
+{ 496188, 3, {179,63,44}},
+{ 496200, 3, {827,25,24}},
+{ 496224, 3, {1723,18,16}},
+{ 496248, 3, {92,87,62}},
+{ 496260, 3, {919,27,20}},
+{ 496272, 3, {211,49,48}},
+{ 496320, 3, {94,80,66}},
+{ 496350, 3, {1103,25,18}},
+{ 496400, 3, {85,80,73}},
+{ 496440, 3, {197,56,45}},
+{ 496470, 3, {95,78,67}},
+{ 496485, 3, {99,85,59}},
+{ 496496, 3, {91,88,62}},
+{ 496512, 3, {431,36,32}},
+{ 496560, 3, {2069,16,15}},
+{ 496584, 3, {99,76,66}},
+{ 496650, 3, {86,77,75}},
+{ 496692, 3, {84,81,73}},
+{ 496728, 3, {6899,9,8}},
+{ 496755, 3, {95,83,63}},
+{ 496800, 3, {92,75,72}},
+{ 496860, 3, {91,78,70}},
+{ 496944, 3, {87,84,68}},
+{ 496980, 3, {251,45,44}},
+{ 497016, 3, {104,81,59}},
+{ 497056, 3, {317,49,32}},
+{ 497200, 3, {113,80,55}},
+{ 497250, 3, {85,78,75}},
+{ 497280, 3, {84,80,74}},
+{ 497304, 3, {6907,9,8}},
+{ 497340, 3, {307,45,36}},
+{ 497352, 3, {106,69,68}},
+{ 497376, 3, {157,66,48}},
+{ 497400, 3, {829,25,24}},
+{ 497520, 3, {691,30,24}},
+{ 497556, 3, {271,51,36}},
+{ 497592, 3, {6911,9,8}},
+{ 497616, 3, {1481,21,16}},
+{ 497640, 3, {88,87,65}},
+{ 497700, 3, {84,79,75}},
+{ 497724, 3, {111,76,59}},
+{ 497728, 3, {101,77,64}},
+{ 497760, 3, {96,85,61}},
+{ 497772, 3, {419,36,33}},
+{ 497904, 3, {88,82,69}},
+{ 498000, 3, {83,80,75}},
+{ 498015, 3, {93,85,63}},
+{ 498024, 3, {6917,9,8}},
+{ 498036, 3, {84,77,77}},
+{ 498060, 3, {2767,15,12}},
+{ 498150, 3, {82,81,75}},
+{ 498168, 3, {99,74,68}},
+{ 498180, 3, {95,76,69}},
+{ 498204, 3, {659,28,27}},
+{ 498225, 3, {91,75,73}},
+{ 498240, 3, {173,60,48}},
+{ 498288, 3, {1483,21,16}},
+{ 498300, 3, {151,60,55}},
+{ 498312, 3, {769,27,24}},
+{ 498400, 3, {89,80,70}},
+{ 498456, 3, {86,84,69}},
+{ 498465, 3, {99,95,53}},
+{ 498480, 3, {93,80,67}},
+{ 498528, 3, {577,32,27}},
+{ 498540, 3, {1187,21,20}},
+{ 498600, 3, {277,45,40}},
+{ 498624, 3, {98,96,53}},
+{ 498636, 3, {81,81,76}},
+{ 498680, 3, {137,65,56}},
+{ 498732, 3, {139,69,52}},
+{ 498771, 3, {91,87,63}},
+{ 498780, 3, {163,60,51}},
+{ 498816, 3, {433,36,32}},
+{ 498825, 3, {739,27,25}},
+{ 498960, 3, {81,80,77}},
+{ 499008, 3, {113,69,64}},
+{ 499044, 3, {457,39,28}},
+{ 499050, 3, {1109,25,18}},
+{ 499092, 3, {199,57,44}},
+{ 499104, 3, {1733,18,16}},
+{ 499125, 3, {121,75,55}},
+{ 499200, 3, {80,80,78}},
+{ 499224, 3, {93,88,61}},
+{ 499275, 3, {317,45,35}},
+{ 499284, 3, {92,81,67}},
+{ 499290, 3, {89,85,66}},
+{ 499392, 3, {102,72,68}},
+{ 499408, 3, {98,91,56}},
+{ 499440, 3, {2081,16,15}},
+{ 499464, 3, {991,24,21}},
+{ 499590, 3, {91,90,61}},
+{ 499596, 3, {93,79,68}},
+{ 499632, 3, {1487,21,16}},
+{ 499653, 3, {103,77,63}},
+{ 499716, 3, {661,28,27}},
+{ 499752, 3, {631,33,24}},
+{ 499776, 3, {137,64,57}},
+{ 499800, 3, {85,84,70}},
+{ 499824, 3, {89,78,72}},
+{ 499860, 3, {2777,15,12}},
+{ 499884, 3, {541,33,28}},
+{ 499920, 3, {2083,16,15}},
+{ 499968, 3, {93,84,64}},
+{ 500094, 3, {98,81,63}},
+{ 500112, 3, {151,69,48}},
+{ 500148, 3, {421,36,33}},
+{ 500160, 3, {521,32,30}},
+{ 500175, 3, {95,81,65}},
+{ 500184, 3, {6947,9,8}},
+{ 500220, 3, {397,36,35}},
+{ 500256, 3, {193,54,48}},
+{ 500280, 3, {379,40,33}},
+{ 500304, 3, {1489,21,16}},
+{ 500310, 3, {109,85,54}},
+{ 500328, 3, {6949,9,8}},
+{ 500412, 3, {223,51,44}},
+{ 500448, 3, {401,39,32}},
+{ 500500, 3, {100,77,65}},
+{ 500535, 3, {227,49,45}},
+{ 500580, 3, {103,81,60}},
+{ 500760, 3, {107,72,65}},
+{ 500864, 3, {91,86,64}},
+{ 500880, 3, {2087,16,15}},
+{ 500904, 3, {773,27,24}},
+{ 500916, 3, {169,57,52}},
+{ 501048, 3, {6959,9,8}},
+{ 501060, 3, {1193,21,20}},
+{ 501072, 3, {88,78,73}},
+{ 501120, 3, {87,80,72}},
+{ 501144, 3, {157,57,56}},
+{ 501160, 3, {88,85,67}},
+{ 501192, 3, {6961,9,8}},
+{ 501228, 3, {91,81,68}},
+{ 501270, 3, {93,77,70}},
+{ 501312, 3, {373,42,32}},
+{ 501360, 3, {2089,16,15}},
+{ 501408, 3, {1741,18,16}},
+{ 501417, 3, {379,49,27}},
+{ 501480, 3, {199,56,45}},
+{ 501525, 3, {743,27,25}},
+{ 501552, 3, {86,81,72}},
+{ 501600, 3, {88,76,75}},
+{ 501624, 3, {6967,9,8}},
+{ 501648, 3, {1493,21,16}},
+{ 501660, 3, {929,27,20}},
+{ 501696, 3, {96,78,67}},
+{ 501732, 3, {181,63,44}},
+{ 501760, 3, {98,80,64}},
+{ 501768, 3, {101,72,69}},
+{ 501795, 3, {105,81,59}},
+{ 501828, 3, {93,76,71}},
+{ 501840, 3, {85,82,72}},
+{ 501912, 3, {6971,9,8}},
+{ 501930, 3, {99,78,65}},
+{ 502020, 3, {2789,15,12}},
+{ 502040, 3, {163,56,55}},
+{ 502044, 3, {107,69,68}},
+{ 502080, 3, {523,32,30}},
+{ 502200, 3, {93,75,72}},
+{ 502250, 3, {125,82,49}},
+{ 502272, 3, {109,72,64}},
+{ 502299, 3, {119,67,63}},
+{ 502344, 3, {6977,9,8}},
+{ 502380, 3, {2791,15,12}},
+{ 502400, 3, {157,64,50}},
+{ 502425, 3, {87,77,75}},
+{ 502488, 3, {997,24,21}},
+{ 502512, 3, {87,76,76}},
+{ 502600, 3, {359,40,35}},
+{ 502605, 3, {85,81,73}},
+{ 502650, 3, {1117,25,18}},
+{ 502740, 3, {95,84,63}},
+{ 502776, 3, {6983,9,8}},
+{ 502788, 3, {293,44,39}},
+{ 502860, 3, {87,85,68}},
+{ 502880, 3, {449,35,32}},
+{ 502950, 3, {479,35,30}},
+{ 503040, 3, {131,64,60}},
+{ 503136, 3, {1747,18,16}},
+{ 503200, 3, {85,80,74}},
+{ 503230, 3, {91,79,70}},
+{ 503280, 3, {233,48,45}},
+{ 503352, 3, {6991,9,8}},
+{ 503360, 3, {88,88,65}},
+{ 503370, 3, {94,85,63}},
+{ 503400, 3, {839,25,24}},
+{ 503412, 3, {461,39,28}},
+{ 503415, 3, {113,81,55}},
+{ 503460, 3, {2797,15,12}},
+{ 503475, 3, {137,75,49}},
+{ 503496, 3, {84,81,74}},
+{ 503568, 3, {269,48,39}},
+{ 503664, 3, {1499,21,16}},
+{ 503685, 3, {123,65,63}},
+{ 503700, 3, {92,75,73}},
+{ 503712, 3, {106,72,66}},
+{ 503720, 3, {257,49,40}},
+{ 503760, 3, {2099,16,15}},
+{ 503784, 3, {6997,9,8}},
+{ 503820, 3, {311,45,36}},
+{ 503880, 3, {85,78,76}},
+{ 503976, 3, {88,83,69}},
+{ 504000, 3, {84,80,75}},
+{ 504036, 3, {359,39,36}},
+{ 504072, 3, {7001,9,8}},
+{ 504108, 3, {99,76,67}},
+{ 504180, 3, {2801,15,12}},
+{ 504192, 3, {101,78,64}},
+{ 504225, 3, {83,81,75}},
+{ 504240, 3, {191,55,48}},
+{ 504252, 3, {87,84,69}},
+{ 504400, 3, {97,80,65}},
+{ 504420, 3, {1201,21,20}},
+{ 504450, 3, {95,90,59}},
+{ 504504, 3, {84,78,77}},
+{ 504540, 3, {2803,15,12}},
+{ 504600, 3, {100,87,58}},
+{ 504630, 3, {89,81,70}},
+{ 504720, 3, {701,30,24}},
+{ 504792, 3, {82,81,76}},
+{ 504800, 3, {631,32,25}},
+{ 504804, 3, {93,92,59}},
+{ 504864, 3, {1753,18,16}},
+{ 504900, 3, {90,85,66}},
+{ 504936, 3, {7013,9,8}},
+{ 504945, 3, {229,49,45}},
+{ 505008, 3, {167,56,54}},
+{ 505050, 3, {91,75,74}},
+{ 505120, 3, {82,80,77}},
+{ 505197, 3, {81,81,77}},
+{ 505260, 3, {401,36,35}},
+{ 505296, 3, {88,87,66}},
+{ 505344, 3, {94,84,64}},
+{ 505350, 3, {1123,25,18}},
+{ 505368, 3, {7019,9,8}},
+{ 505386, 3, {191,54,49}},
+{ 505428, 3, {547,33,28}},
+{ 505440, 3, {81,80,78}},
+{ 505560, 3, {383,40,33}},
+{ 505596, 3, {463,39,28}},
+{ 505728, 3, {439,36,32}},
+{ 505800, 3, {281,45,40}},
+{ 505824, 3, {479,33,32}},
+{ 505890, 3, {90,77,73}},
+{ 505920, 3, {93,80,68}},
+{ 505944, 3, {7027,9,8}},
+{ 505960, 3, {139,65,56}},
+{ 505980, 3, {937,27,20}},
+{ 506016, 3, {251,48,42}},
+{ 506025, 3, {173,65,45}},
+{ 506088, 3, {88,81,71}},
+{ 506184, 3, {131,69,56}},
+{ 506240, 3, {113,70,64}},
+{ 506340, 3, {97,87,60}},
+{ 506352, 3, {137,66,56}},
+{ 506400, 3, {211,50,48}},
+{ 506415, 3, {105,91,53}},
+{ 506532, 3, {191,52,51}},
+{ 506583, 3, {119,99,43}},
+{ 506592, 3, {1759,18,16}},
+{ 506640, 3, {2111,16,15}},
+{ 506660, 3, {94,77,70}},
+{ 506688, 3, {91,87,64}},
+{ 506709, 3, {383,49,27}},
+{ 506736, 3, {92,81,68}},
+{ 506808, 3, {7039,9,8}},
+{ 506925, 3, {751,27,25}},
+{ 506940, 3, {85,84,71}},
+{ 507060, 3, {313,45,36}},
+{ 507072, 3, {139,64,57}},
+{ 507096, 3, {7043,9,8}},
+{ 507120, 3, {2113,16,15}},
+{ 507150, 3, {98,75,69}},
+{ 507168, 3, {587,32,27}},
+{ 507195, 3, {117,85,51}},
+{ 507276, 3, {99,84,61}},
+{ 507300, 3, {89,76,75}},
+{ 507312, 3, {271,48,39}},
+{ 507384, 3, {87,81,72}},
+{ 507408, 3, {93,88,62}},
+{ 507420, 3, {2819,15,12}},
+{ 507528, 3, {106,76,63}},
+{ 507584, 3, {103,77,64}},
+{ 507600, 3, {94,75,72}},
+{ 507672, 3, {641,33,24}},
+{ 507696, 3, {1511,21,16}},
+{ 507756, 3, {131,68,57}},
+{ 507840, 3, {92,80,69}},
+{ 507870, 3, {95,81,66}},
+{ 507936, 3, {88,78,74}},
+{ 507960, 3, {85,83,72}},
+{ 508050, 3, {1129,25,18}},
+{ 508080, 3, {87,80,73}},
+{ 508104, 3, {7057,9,8}},
+{ 508140, 3, {941,27,20}},
+{ 508200, 3, {88,77,75}},
+{ 508365, 3, {99,79,65}},
+{ 508375, 3, {125,83,49}},
+{ 508440, 3, {223,57,40}},
+{ 508464, 3, {107,72,66}},
+{ 508500, 3, {113,75,60}},
+{ 508536, 3, {1009,24,21}},
+{ 508572, 3, {277,51,36}},
+{ 508599, 3, {91,81,69}},
+{ 508620, 3, {173,60,49}},
+{ 508640, 3, {88,85,68}},
+{ 508668, 3, {97,76,69}},
+{ 508725, 3, {95,85,63}},
+{ 508776, 3, {87,86,68}},
+{ 508788, 3, {673,28,27}},
+{ 508800, 3, {106,75,64}},
+{ 508860, 3, {257,45,44}},
+{ 508896, 3, {93,76,72}},
+{ 508968, 3, {7069,9,8}},
+{ 509040, 3, {101,72,70}},
+{ 509080, 3, {89,88,65}},
+{ 509124, 3, {87,77,76}},
+{ 509184, 3, {96,78,68}},
+{ 509200, 3, {95,80,67}},
+{ 509256, 3, {643,33,24}},
+{ 509355, 3, {105,77,63}},
+{ 509376, 3, {379,42,32}},
+{ 509388, 3, {227,51,44}},
+{ 509400, 3, {283,45,40}},
+{ 509460, 3, {1213,21,20}},
+{ 509472, 3, {96,87,61}},
+{ 509490, 3, {85,81,74}},
+{ 509520, 3, {193,55,48}},
+{ 509580, 3, {149,60,57}},
+{ 509600, 3, {91,80,70}},
+{ 509688, 3, {7079,9,8}},
+{ 509760, 3, {96,90,59}},
+{ 509940, 3, {2833,15,12}},
+{ 509960, 3, {95,88,61}},
+{ 509964, 3, {467,39,28}},
+{ 509976, 3, {787,27,24}},
+{ 510000, 3, {85,80,75}},
+{ 510048, 3, {88,84,69}},
+{ 510120, 3, {109,72,65}},
+{ 510125, 3, {125,77,53}},
+{ 510237, 3, {91,89,63}},
+{ 510300, 3, {84,81,75}},
+{ 510336, 3, {443,36,32}},
+{ 510432, 3, {409,39,32}},
+{ 510480, 3, {709,30,24}},
+{ 510510, 3, {85,78,77}},
+{ 510552, 3, {1013,24,21}},
+{ 510600, 3, {92,75,74}},
+{ 510624, 3, {197,54,48}},
+{ 510660, 3, {2837,15,12}},
+{ 510678, 3, {193,54,49}},
+{ 510705, 3, {97,81,65}},
+{ 510720, 3, {84,80,76}},
+{ 510825, 3, {139,75,49}},
+{ 510867, 3, {119,81,53}},
+{ 510900, 3, {131,65,60}},
+{ 510948, 3, {83,81,76}},
+{ 510960, 3, {2129,16,15}},
+{ 510972, 3, {84,79,77}},
+{ 510975, 3, {757,27,25}},
+{ 511020, 3, {167,60,51}},
+{ 511119, 3, {133,63,61}},
+{ 511140, 3, {1217,21,20}},
+{ 511200, 3, {90,80,71}},
+{ 511224, 3, {179,56,51}},
+{ 511245, 3, {541,35,27}},
+{ 511280, 3, {83,80,77}},
+{ 511290, 3, {95,78,69}},
+{ 511350, 3, {487,35,30}},
+{ 511380, 3, {947,27,20}},
+{ 511416, 3, {7103,9,8}},
+{ 511428, 3, {109,69,68}},
+{ 511434, 3, {82,81,77}},
+{ 511440, 3, {2131,16,15}},
+{ 511500, 3, {100,93,55}},
+{ 511560, 3, {87,84,70}},
+{ 511632, 3, {99,76,68}},
+{ 511680, 3, {82,80,78}},
+{ 511704, 3, {103,72,69}},
+{ 511728, 3, {1523,21,16}},
+{ 511740, 3, {2843,15,12}},
+{ 511776, 3, {1777,18,16}},
+{ 511800, 3, {853,25,24}},
+{ 511812, 3, {677,28,27}},
+{ 511836, 3, {193,52,51}},
+{ 511840, 3, {457,35,32}},
+{ 511848, 3, {7109,9,8}},
+{ 511872, 3, {93,86,64}},
+{ 511875, 3, {91,75,75}},
+{ 511920, 3, {81,80,79}},
+{ 512028, 3, {431,36,33}},
+{ 512040, 3, {251,51,40}},
+{ 512050, 3, {95,77,70}},
+{ 512064, 3, {127,64,63}},
+{ 512148, 3, {91,84,67}},
+{ 512160, 3, {97,80,66}},
+{ 512244, 3, {93,81,68}},
+{ 512256, 3, {92,87,64}},
+{ 512316, 3, {107,76,63}},
+{ 512352, 3, {593,32,27}},
+{ 512424, 3, {647,33,24}},
+{ 512448, 3, {157,64,51}},
+{ 512512, 3, {91,88,64}},
+{ 512550, 3, {90,85,67}},
+{ 512568, 3, {113,72,63}},
+{ 512712, 3, {7121,9,8}},
+{ 512720, 3, {104,85,58}},
+{ 512772, 3, {173,57,52}},
+{ 512800, 3, {641,32,25}},
+{ 512820, 3, {90,77,74}},
+{ 512880, 3, {2137,16,15}},
+{ 512952, 3, {88,87,67}},
+{ 513000, 3, {90,76,75}},
+{ 513084, 3, {143,69,52}},
+{ 513144, 3, {7127,9,8}},
+{ 513180, 3, {2851,15,12}},
+{ 513216, 3, {88,81,72}},
+{ 513288, 3, {7129,9,8}},
+{ 513300, 3, {100,87,59}},
+{ 513315, 3, {99,85,61}},
+{ 513360, 3, {93,80,69}},
+{ 513480, 3, {389,40,33}},
+{ 513504, 3, {1783,18,16}},
+{ 513513, 3, {99,91,57}},
+{ 513540, 3, {317,45,36}},
+{ 513576, 3, {1019,24,21}},
+{ 513600, 3, {107,75,64}},
+{ 513648, 3, {87,82,72}},
+{ 513660, 3, {1223,21,20}},
+{ 513675, 3, {761,27,25}},
+{ 513744, 3, {139,66,56}},
+{ 513765, 3, {233,49,45}},
+{ 513800, 3, {367,40,35}},
+{ 513810, 3, {173,55,54}},
+{ 513840, 3, {2141,16,15}},
+{ 513864, 3, {104,81,61}},
+{ 513876, 3, {229,51,44}},
+{ 513912, 3, {98,76,69}},
+{ 513975, 3, {89,77,75}},
+{ 514008, 3, {99,88,59}},
+{ 514080, 3, {85,84,72}},
+{ 514140, 3, {95,82,66}},
+{ 514176, 3, {103,78,64}},
+{ 514188, 3, {92,81,69}},
+{ 514200, 3, {857,25,24}},
+{ 514206, 3, {106,77,63}},
+{ 514260, 3, {2857,15,12}},
+{ 514272, 3, {487,33,32}},
+{ 514304, 3, {98,82,64}},
+{ 514320, 3, {2143,16,15}},
+{ 514332, 3, {157,63,52}},
+{ 514350, 3, {127,75,54}},
+{ 514360, 3, {167,56,55}},
+{ 514400, 3, {643,32,25}},
+{ 514404, 3, {433,36,33}},
+{ 514416, 3, {1531,21,16}},
+{ 514500, 3, {98,75,70}},
+{ 514584, 3, {1021,24,21}},
+{ 514596, 3, {111,76,61}},
+{ 514620, 3, {953,27,20}},
+{ 514647, 3, {389,49,27}},
+{ 514656, 3, {1787,18,16}},
+{ 514668, 3, {557,33,28}},
+{ 514692, 3, {87,87,68}},
+{ 514696, 3, {101,91,56}},
+{ 514710, 3, {95,86,63}},
+{ 514752, 3, {383,42,32}},
+{ 514800, 3, {88,78,75}},
+{ 514872, 3, {7151,9,8}},
+{ 514944, 3, {149,64,54}},
+{ 514980, 3, {2861,15,12}},
+{ 515040, 3, {87,80,74}},
+{ 515100, 3, {101,75,68}},
+{ 515130, 3, {223,55,42}},
+{ 515160, 3, {106,81,60}},
+{ 515200, 3, {92,80,70}},
+{ 515232, 3, {1789,18,16}},
+{ 515268, 3, {367,39,36}},
+{ 515340, 3, {409,36,35}},
+{ 515375, 3, {133,125,31}},
+{ 515400, 3, {859,25,24}},
+{ 515424, 3, {96,91,59}},
+{ 515448, 3, {7159,9,8}},
+{ 515480, 3, {263,49,40}},
+{ 515520, 3, {179,60,48}},
+{ 515550, 3, {491,35,30}},
+{ 515565, 3, {95,81,67}},
+{ 515592, 3, {93,77,72}},
+{ 515700, 3, {191,54,50}},
+{ 515736, 3, {87,78,76}},
+{ 515760, 3, {307,42,40}},
+{ 515808, 3, {199,54,48}},
+{ 515844, 3, {89,84,69}},
+{ 515900, 3, {100,77,67}},
+{ 515916, 3, {281,51,36}},
+{ 515964, 3, {93,76,73}},
+{ 515970, 3, {91,81,70}},
+{ 516000, 3, {86,80,75}},
+{ 516096, 3, {96,84,64}},
+{ 516120, 3, {88,85,69}},
+{ 516180, 3, {1229,21,20}},
+{ 516240, 3, {239,48,45}},
+{ 516285, 3, {149,63,55}},
+{ 516320, 3, {461,35,32}},
+{ 516348, 3, {683,28,27}},
+{ 516360, 3, {331,40,39}},
+{ 516375, 3, {85,81,75}},
+{ 516384, 3, {163,66,48}},
+{ 516420, 3, {151,60,57}},
+{ 516456, 3, {797,27,24}},
+{ 516528, 3, {211,51,48}},
+{ 516600, 3, {84,82,75}},
+{ 516672, 3, {92,78,72}},
+{ 516720, 3, {2153,16,15}},
+{ 516744, 3, {7177,9,8}},
+{ 516800, 3, {85,80,76}},
+{ 516880, 3, {91,80,71}},
+{ 516915, 3, {547,35,27}},
+{ 516936, 3, {181,56,51}},
+{ 516950, 3, {211,50,49}},
+{ 517020, 3, {1231,21,20}},
+{ 517104, 3, {84,81,76}},
+{ 517140, 3, {85,78,78}},
+{ 517176, 3, {653,33,24}},
+{ 517248, 3, {449,36,32}},
+{ 517275, 3, {99,95,55}},
+{ 517293, 3, {119,69,63}},
+{ 517440, 3, {84,80,77}},
+{ 517464, 3, {7187,9,8}},
+{ 517500, 3, {92,75,75}},
+{ 517536, 3, {599,32,27}},
+{ 517560, 3, {227,57,40}},
+{ 517600, 3, {647,32,25}},
+{ 517671, 3, {83,81,77}},
+{ 517680, 3, {719,30,24}},
+{ 517752, 3, {94,81,68}},
+{ 517800, 3, {863,25,24}},
+{ 517824, 3, {93,87,64}},
+{ 517860, 3, {137,63,60}},
+{ 517896, 3, {7193,9,8}},
+{ 517920, 3, {83,80,78}},
+{ 517950, 3, {1151,25,18}},
+{ 517968, 3, {109,72,66}},
+{ 518100, 3, {157,60,55}},
+{ 518112, 3, {257,48,42}},
+{ 518220, 3, {2879,15,12}},
+{ 518320, 3, {95,88,62}},
+{ 518336, 3, {91,89,64}},
+{ 518364, 3, {99,77,68}},
+{ 518400, 3, {81,80,80}},
+{ 518448, 3, {1543,21,16}},
+{ 518496, 3, {491,33,32}},
+{ 518544, 3, {277,48,39}},
+{ 518560, 3, {463,35,32}},
+{ 518568, 3, {93,82,68}},
+{ 518640, 3, {2161,16,15}},
+{ 518670, 3, {113,85,54}},
+{ 518688, 3, {1801,18,16}},
+{ 518700, 3, {91,76,75}},
+{ 518805, 3, {105,81,61}},
+{ 518850, 3, {1153,25,18}},
+{ 518868, 3, {87,84,71}},
+{ 518880, 3, {94,80,69}},
+{ 518904, 3, {7207,9,8}},
+{ 519008, 3, {331,49,32}},
+{ 519048, 3, {89,81,72}},
+{ 519057, 3, {107,77,63}},
+{ 519075, 3, {769,27,25}},
+{ 519090, 3, {121,66,65}},
+{ 519120, 3, {103,72,70}},
+{ 519156, 3, {99,76,69}},
+{ 519168, 3, {104,78,64}},
+{ 519192, 3, {7211,9,8}},
+{ 519264, 3, {601,32,27}},
+{ 519336, 3, {7213,9,8}},
+{ 519360, 3, {541,32,30}},
+{ 519435, 3, {97,85,63}},
+{ 519540, 3, {1237,21,20}},
+{ 519588, 3, {283,51,36}},
+{ 519624, 3, {1031,24,21}},
+{ 519660, 3, {2887,15,12}},
+{ 519680, 3, {116,70,64}},
+{ 519750, 3, {90,77,75}},
+{ 519768, 3, {7219,9,8}},
+{ 519792, 3, {91,84,68}},
+{ 519912, 3, {87,83,72}},
+{ 519984, 3, {157,69,48}},
+{ 520000, 3, {100,80,65}},
+{ 520020, 3, {107,81,60}},
+{ 520065, 3, {127,65,63}},
+{ 520080, 3, {197,55,48}},
+{ 520200, 3, {85,85,72}},
+{ 520212, 3, {563,33,28}},
+{ 520260, 3, {92,87,65}},
+{ 520296, 3, {163,57,56}},
+{ 520344, 3, {88,81,73}},
+{ 520380, 3, {98,90,59}},
+{ 520410, 3, {95,83,66}},
+{ 520464, 3, {1549,21,16}},
+{ 520488, 3, {7229,9,8}},
+{ 520520, 3, {91,88,65}},
+{ 520560, 3, {241,48,45}},
+{ 520576, 3, {98,83,64}},
+{ 520608, 3, {88,87,68}},
+{ 520625, 3, {125,85,49}},
+{ 520632, 3, {1033,24,21}},
+{ 520695, 3, {95,87,63}},
+{ 520704, 3, {113,72,64}},
+{ 520740, 3, {263,45,44}},
+{ 520800, 3, {93,80,70}},
+{ 520992, 3, {96,81,67}},
+{ 521064, 3, {7237,9,8}},
+{ 521100, 3, {193,54,50}},
+{ 521136, 3, {94,77,72}},
+{ 521208, 3, {127,72,57}},
+{ 521220, 3, {85,84,73}},
+{ 521235, 3, {99,81,65}},
+{ 521262, 3, {197,54,49}},
+{ 521280, 3, {181,60,48}},
+{ 521325, 3, {331,45,35}},
+{ 521400, 3, {88,79,75}},
+{ 521424, 3, {102,72,71}},
+{ 521430, 3, {191,65,42}},
+{ 521460, 3, {2897,15,12}},
+{ 521472, 3, {97,84,64}},
+{ 521496, 3, {7243,9,8}},
+{ 521532, 3, {439,36,33}},
+{ 521550, 3, {95,90,61}},
+{ 521560, 3, {104,85,59}},
+{ 521568, 3, {1811,18,16}},
+{ 521600, 3, {163,64,50}},
+{ 521640, 3, {90,84,69}},
+{ 521664, 3, {88,78,76}},
+{ 521703, 3, {91,91,63}},
+{ 521730, 3, {93,85,66}},
+{ 521775, 3, {773,27,25}},
+{ 521784, 3, {7247,9,8}},
+{ 521808, 3, {1553,21,16}},
+{ 521820, 3, {223,52,45}},
+{ 521850, 3, {98,75,71}},
+{ 521856, 3, {151,64,54}},
+{ 521892, 3, {109,76,63}},
+{ 521916, 3, {93,92,61}},
+{ 521928, 3, {659,33,24}},
+{ 522000, 3, {87,80,75}},
+{ 522120, 3, {229,57,40}},
+{ 522180, 3, {967,27,20}},
+{ 522192, 3, {88,86,69}},
+{ 522200, 3, {373,40,35}},
+{ 522216, 3, {7253,9,8}},
+{ 522225, 3, {211,55,45}},
+{ 522288, 3, {93,78,72}},
+{ 522340, 3, {91,82,70}},
+{ 522348, 3, {87,79,76}},
+{ 522368, 3, {106,77,64}},
+{ 522396, 3, {691,28,27}},
+{ 522400, 3, {653,32,25}},
+{ 522405, 3, {117,95,47}},
+{ 522444, 3, {197,52,51}},
+{ 522450, 3, {86,81,75}},
+{ 522480, 3, {311,42,40}},
+{ 522540, 3, {2903,15,12}},
+{ 522576, 3, {191,57,48}},
+{ 522720, 3, {90,88,66}},
+{ 522816, 3, {389,42,32}},
+{ 522830, 3, {97,77,70}},
+{ 522852, 3, {233,51,44}},
+{ 522900, 3, {84,83,75}},
+{ 522912, 3, {419,39,32}},
+{ 522960, 3, {2179,16,15}},
+{ 522990, 3, {149,65,54}},
+{ 523032, 3, {93,76,74}},
+{ 523040, 3, {467,35,32}},
+{ 523068, 3, {479,39,28}},
+{ 523152, 3, {173,56,54}},
+{ 523200, 3, {109,75,64}},
+{ 523215, 3, {151,63,55}},
+{ 523260, 3, {85,81,76}},
+{ 523341, 3, {91,81,71}},
+{ 523350, 3, {1163,25,18}},
+{ 523392, 3, {94,87,64}},
+{ 523404, 3, {93,84,67}},
+{ 523440, 3, {727,30,24}},
+{ 523512, 3, {661,33,24}},
+{ 523575, 3, {179,65,45}},
+{ 523600, 3, {85,80,77}},
+{ 523620, 3, {2909,15,12}},
+{ 523656, 3, {1039,24,21}},
+{ 523692, 3, {373,39,36}},
+{ 523770, 3, {85,79,78}},
+{ 523776, 3, {93,88,64}},
+{ 523800, 3, {97,75,72}},
+{ 523824, 3, {1559,21,16}},
+{ 523908, 3, {84,81,77}},
+{ 523920, 3, {111,80,59}},
+{ 523950, 3, {499,35,30}},
+{ 524040, 3, {397,40,33}},
+{ 524160, 3, {84,80,78}},
+{ 524232, 3, {809,27,24}},
+{ 524280, 3, {257,51,40}},
+{ 524340, 3, {971,27,20}},
+{ 524370, 3, {227,55,42}},
+{ 524376, 3, {7283,9,8}},
+{ 524400, 3, {92,76,75}},
+{ 524448, 3, {607,32,27}},
+{ 524480, 3, {149,64,55}},
+{ 524496, 3, {223,49,48}},
+{ 524580, 3, {1249,21,20}},
+{ 524784, 3, {104,87,58}},
+{ 524790, 3, {98,85,63}},
+{ 524880, 3, {81,81,80}},
+{ 524888, 3, {103,91,56}},
+{ 524892, 3, {93,83,68}},
+{ 525024, 3, {1823,18,16}},
+{ 525060, 3, {2917,15,12}},
+{ 525096, 3, {99,78,68}},
+{ 525120, 3, {547,32,30}},
+{ 525200, 3, {101,80,65}},
+{ 525231, 3, {397,49,27}},
+{ 525280, 3, {98,80,67}},
+{ 525300, 3, {103,75,68}},
+{ 525360, 3, {199,55,48}},
+{ 525384, 3, {7297,9,8}},
+{ 525408, 3, {421,39,32}},
+{ 525420, 3, {139,63,60}},
+{ 525525, 3, {91,77,75}},
+{ 525528, 3, {811,27,24}},
+{ 525600, 3, {90,80,73}},
+{ 525672, 3, {149,63,56}},
+{ 525720, 3, {337,40,39}},
+{ 525756, 3, {569,33,28}},
+{ 525780, 3, {127,69,60}},
+{ 525840, 3, {313,42,40}},
+{ 526032, 3, {281,48,39}},
+{ 526080, 3, {137,64,60}},
+{ 526104, 3, {7307,9,8}},
+{ 526110, 3, {95,78,71}},
+{ 526176, 3, {87,84,72}},
+{ 526200, 3, {877,25,24}},
+{ 526240, 3, {92,88,65}},
+{ 526248, 3, {7309,9,8}},
+{ 526260, 3, {179,60,49}},
+{ 526284, 3, {443,36,33}},
+{ 526320, 3, {86,85,72}},
+{ 526365, 3, {557,35,27}},
+{ 526400, 3, {94,80,70}},
+{ 526464, 3, {457,36,32}},
+{ 526512, 3, {1567,21,16}},
+{ 526524, 3, {89,87,68}},
+{ 526554, 3, {199,54,49}},
+{ 526608, 3, {106,72,69}},
+{ 526680, 3, {90,77,76}},
+{ 526750, 3, {125,86,49}},
+{ 526752, 3, {96,93,59}},
+{ 526812, 3, {307,44,39}},
+{ 526848, 3, {98,84,64}},
+{ 526860, 3, {2927,15,12}},
+{ 526890, 3, {193,65,42}},
+{ 526944, 3, {499,33,32}},
+{ 526950, 3, {1171,25,18}},
+{ 526995, 3, {239,49,45}},
+{ 527040, 3, {96,90,61}},
+{ 527085, 3, {117,85,53}},
+{ 527112, 3, {7321,9,8}},
+{ 527200, 3, {659,32,25}},
+{ 527220, 3, {101,87,60}},
+{ 527240, 3, {269,49,40}},
+{ 527296, 3, {107,77,64}},
+{ 527310, 3, {93,81,70}},
+{ 527328, 3, {1831,18,16}},
+{ 527340, 3, {94,85,66}},
+{ 527400, 3, {293,45,40}},
+{ 527436, 3, {91,84,69}},
+{ 527472, 3, {88,81,74}},
+{ 527580, 3, {977,27,20}},
+{ 527604, 3, {571,33,28}},
+{ 527670, 3, {99,82,65}},
+{ 527748, 3, {199,52,51}},
+{ 527760, 3, {733,30,24}},
+{ 527800, 3, {100,91,58}},
+{ 527832, 3, {7331,9,8}},
+{ 527850, 3, {90,85,69}},
+{ 527856, 3, {1571,21,16}},
+{ 527877, 3, {133,63,63}},
+{ 527904, 3, {94,78,72}},
+{ 527940, 3, {419,36,35}},
+{ 527976, 3, {7333,9,8}},
+{ 528000, 3, {88,80,75}},
+{ 528048, 3, {193,57,48}},
+{ 528150, 3, {503,35,30}},
+{ 528192, 3, {131,64,63}},
+{ 528220, 3, {98,77,70}},
+{ 528240, 3, {93,80,71}},
+{ 528255, 3, {129,65,63}},
+{ 528264, 3, {88,87,69}},
+{ 528320, 3, {127,65,64}},
+{ 528360, 3, {85,84,74}},
+{ 528416, 3, {337,49,32}},
+{ 528525, 3, {87,81,75}},
+{ 528528, 3, {88,78,77}},
+{ 528600, 3, {881,25,24}},
+{ 528696, 3, {1049,24,21}},
+{ 528710, 3, {91,83,70}},
+{ 528720, 3, {2203,16,15}},
+{ 528759, 3, {109,77,63}},
+{ 528768, 3, {96,81,68}},
+{ 528780, 3, {1259,21,20}},
+{ 528800, 3, {661,32,25}},
+{ 528840, 3, {113,72,65}},
+{ 528960, 3, {87,80,76}},
+{ 528984, 3, {93,79,72}},
+{ 528990, 3, {229,55,42}},
+{ 529020, 3, {2939,15,12}},
+{ 529056, 3, {167,66,48}},
+{ 529092, 3, {92,81,71}},
+{ 529128, 3, {7349,9,8}},
+{ 529152, 3, {106,78,64}},
+{ 529188, 3, {211,57,44}},
+{ 529200, 3, {84,84,75}},
+{ 529272, 3, {7351,9,8}},
+{ 529320, 3, {401,40,33}},
+{ 529368, 3, {137,69,56}},
+{ 529375, 3, {125,77,55}},
+{ 529380, 3, {173,60,51}},
+{ 529416, 3, {86,81,76}},
+{ 529425, 3, {181,65,45}},
+{ 529452, 3, {191,63,44}},
+{ 529584, 3, {102,88,59}},
+{ 529632, 3, {613,32,27}},
+{ 529644, 3, {101,76,69}},
+{ 529680, 3, {2207,16,15}},
+{ 529704, 3, {1051,24,21}},
+{ 529728, 3, {93,89,64}},
+{ 529740, 3, {109,81,60}},
+{ 529760, 3, {86,80,77}},
+{ 529776, 3, {283,48,39}},
+{ 529800, 3, {883,25,24}},
+{ 529956, 3, {701,28,27}},
+{ 529984, 3, {91,91,64}},
+{ 530010, 3, {151,65,54}},
+{ 530100, 3, {93,76,75}},
+{ 530145, 3, {85,81,77}},
+{ 530196, 3, {113,69,68}},
+{ 530208, 3, {263,48,42}},
+{ 530376, 3, {84,82,77}},
+{ 530400, 3, {85,80,78}},
+{ 530460, 3, {421,36,35}},
+{ 530472, 3, {93,92,62}},
+{ 530523, 3, {401,49,27}},
+{ 530544, 3, {1579,21,16}},
+{ 530550, 3, {131,75,54}},
+{ 530556, 3, {179,57,52}},
+{ 530568, 3, {7369,9,8}},
+{ 530600, 3, {379,40,35}},
+{ 530640, 3, {90,88,67}},
+{ 530700, 3, {100,87,61}},
+{ 530712, 3, {84,81,78}},
+{ 530775, 3, {337,45,35}},
+{ 530820, 3, {983,27,20}},
+{ 530880, 3, {84,80,79}},
+{ 530955, 3, {95,81,69}},
+{ 531012, 3, {137,68,57}},
+{ 531072, 3, {461,36,32}},
+{ 531080, 3, {88,85,71}},
+{ 531120, 3, {2213,16,15}},
+{ 531160, 3, {271,49,40}},
+{ 531168, 3, {503,33,32}},
+{ 531180, 3, {227,52,45}},
+{ 531216, 3, {93,84,68}},
+{ 531225, 3, {787,27,25}},
+{ 531240, 3, {233,57,40}},
+{ 531300, 3, {92,77,75}},
+{ 531360, 3, {82,81,80}},
+{ 531405, 3, {241,49,45}},
+{ 531432, 3, {99,88,61}},
+{ 531440, 3, {91,80,73}},
+{ 531450, 3, {1181,25,18}},
+{ 531468, 3, {111,76,63}},
+{ 531520, 3, {151,64,55}},
+{ 531531, 3, {99,91,59}},
+{ 531540, 3, {2953,15,12}},
+{ 531576, 3, {107,72,69}},
+{ 531630, 3, {179,55,54}},
+{ 531648, 3, {96,78,71}},
+{ 531720, 3, {211,56,45}},
+{ 531765, 3, {101,81,65}},
+{ 531804, 3, {487,39,28}},
+{ 531828, 3, {99,79,68}},
+{ 531846, 3, {98,81,67}},
+{ 531888, 3, {1583,21,16}},
+{ 531900, 3, {197,54,50}},
+{ 531936, 3, {1847,18,16}},
+{ 531960, 3, {93,88,65}},
+{ 532000, 3, {95,80,70}},
+{ 532008, 3, {821,27,24}},
+{ 532032, 3, {163,64,51}},
+{ 532035, 3, {563,35,27}},
+{ 532080, 3, {739,30,24}},
+{ 532116, 3, {379,39,36}},
+{ 532140, 3, {181,60,49}},
+{ 532200, 3, {887,25,24}},
+{ 532260, 3, {2957,15,12}},
+{ 532287, 3, {119,71,63}},
+{ 532296, 3, {7393,9,8}},
+{ 532350, 3, {91,78,75}},
+{ 532440, 3, {87,85,72}},
+{ 532560, 3, {317,42,40}},
+{ 532620, 3, {269,45,44}},
+{ 532665, 3, {95,89,63}},
+{ 532728, 3, {151,63,56}},
+{ 532800, 3, {90,80,74}},
+{ 532840, 3, {173,56,55}},
+{ 532875, 3, {125,87,49}},
+{ 532896, 3, {96,91,61}},
+{ 532950, 3, {95,85,66}},
+{ 532980, 3, {94,81,70}},
+{ 533016, 3, {673,33,24}},
+{ 533040, 3, {2221,16,15}},
+{ 533064, 3, {167,57,56}},
+{ 533088, 3, {617,32,27}},
+{ 533120, 3, {98,80,68}},
+{ 533148, 3, {577,33,28}},
+{ 533169, 3, {93,91,63}},
+{ 533232, 3, {92,84,69}},
+{ 533280, 3, {101,80,66}},
+{ 533304, 3, {823,27,24}},
+{ 533340, 3, {2963,15,12}},
+{ 533376, 3, {463,36,32}},
+{ 533400, 3, {127,70,60}},
+{ 533412, 3, {449,36,33}},
+{ 533484, 3, {87,84,73}},
+{ 533568, 3, {397,42,32}},
+{ 533592, 3, {7411,9,8}},
+{ 533610, 3, {90,77,77}},
+{ 533676, 3, {311,44,39}},
+{ 533760, 3, {139,64,60}},
+{ 533832, 3, {104,87,59}},
+{ 533904, 3, {227,49,48}},
+{ 533988, 3, {163,63,52}},
+{ 534000, 3, {89,80,75}},
+{ 534024, 3, {7417,9,8}},
+{ 534105, 3, {99,83,65}},
+{ 534144, 3, {107,78,64}},
+{ 534150, 3, {1187,25,18}},
+{ 534204, 3, {99,76,71}},
+{ 534240, 3, {106,72,70}},
+{ 534276, 3, {97,81,68}},
+{ 534300, 3, {137,65,60}},
+{ 534336, 3, {88,88,69}},
+{ 534400, 3, {167,64,50}},
+{ 534420, 3, {2969,15,12}},
+{ 534450, 3, {509,35,30}},
+{ 534528, 3, {96,87,64}},
+{ 534600, 3, {88,81,75}},
+{ 534612, 3, {149,69,52}},
+{ 534625, 3, {125,91,47}},
+{ 534660, 3, {95,84,67}},
+{ 534720, 3, {557,32,30}},
+{ 534744, 3, {1061,24,21}},
+{ 534780, 3, {2971,15,12}},
+{ 534816, 3, {619,32,27}},
+{ 534888, 3, {102,76,69}},
+{ 534960, 3, {743,30,24}},
+{ 534996, 3, {193,63,44}},
+{ 535080, 3, {91,84,70}},
+{ 535095, 3, {115,99,47}},
+{ 535140, 3, {991,27,20}},
+{ 535176, 3, {7433,9,8}},
+{ 535200, 3, {223,50,48}},
+{ 535392, 3, {88,78,78}},
+{ 535425, 3, {121,75,59}},
+{ 535440, 3, {97,80,69}},
+{ 535500, 3, {85,84,75}},
+{ 535572, 3, {87,81,76}},
+{ 535600, 3, {103,80,65}},
+{ 535680, 3, {93,80,72}},
+{ 535752, 3, {1063,24,21}},
+{ 535800, 3, {94,76,75}},
+{ 535808, 3, {92,91,64}},
+{ 535815, 3, {105,81,63}},
+{ 535860, 3, {229,52,45}},
+{ 535896, 3, {827,27,24}},
+{ 535920, 3, {87,80,77}},
+{ 535968, 3, {1861,18,16}},
+{ 536004, 3, {709,28,27}},
+{ 536085, 3, {99,95,57}},
+{ 536112, 3, {102,73,72}},
+{ 536172, 3, {491,39,28}},
+{ 536184, 3, {677,33,24}},
+{ 536200, 3, {383,40,35}},
+{ 536220, 3, {331,45,36}},
+{ 536268, 3, {92,87,67}},
+{ 536316, 3, {239,51,44}},
+{ 536340, 3, {1277,21,20}},
+{ 536382, 3, {86,81,77}},
+{ 536445, 3, {131,65,63}},
+{ 536448, 3, {127,66,64}},
+{ 536472, 3, {7451,9,8}},
+{ 536480, 3, {479,35,32}},
+{ 536484, 3, {181,57,52}},
+{ 536520, 3, {263,51,40}},
+{ 536536, 3, {91,88,67}},
+{ 536544, 3, {92,81,72}},
+{ 536550, 3, {98,75,73}},
+{ 536580, 3, {271,45,44}},
+{ 536592, 3, {1597,21,16}},
+{ 536625, 3, {125,81,53}},
+{ 536640, 3, {86,80,78}},
+{ 536844, 3, {84,83,77}},
+{ 536850, 3, {1193,25,18}},
+{ 536880, 3, {2237,16,15}},
+{ 536900, 3, {100,91,59}},
+{ 536904, 3, {7457,9,8}},
+{ 536940, 3, {157,60,57}},
+{ 536976, 3, {113,72,66}},
+{ 537030, 3, {85,81,78}},
+{ 537048, 3, {7459,9,8}},
+{ 537075, 3, {93,77,75}},
+{ 537096, 3, {139,69,56}},
+{ 537108, 3, {313,44,39}},
+{ 537152, 3, {109,77,64}},
+{ 537168, 3, {93,76,76}},
+{ 537180, 3, {1279,21,20}},
+{ 537192, 3, {829,27,24}},
+{ 537200, 3, {85,80,79}},
+{ 537285, 3, {119,105,43}},
+{ 537300, 3, {199,54,50}},
+{ 537360, 3, {2239,16,15}},
+{ 537372, 3, {99,92,59}},
+{ 537504, 3, {509,33,32}},
+{ 537516, 3, {84,81,79}},
+{ 537540, 3, {93,85,68}},
+{ 537570, 3, {181,55,54}},
+{ 537600, 3, {84,80,80}},
+{ 537624, 3, {131,72,57}},
+{ 537660, 3, {103,87,60}},
+{ 537680, 3, {94,88,65}},
+{ 537696, 3, {1867,18,16}},
+{ 537705, 3, {569,35,27}},
+{ 537732, 3, {383,39,36}},
+{ 537768, 3, {97,77,72}},
+{ 537810, 3, {197,65,42}},
+{ 537840, 3, {83,81,80}},
+{ 537888, 3, {431,39,32}},
+{ 537900, 3, {163,60,55}},
+{ 537936, 3, {1601,21,16}},
+{ 537948, 3, {293,51,36}},
+{ 537975, 3, {797,27,25}},
+{ 537984, 3, {467,36,32}},
+{ 538020, 3, {98,90,61}},
+{ 538080, 3, {96,95,59}},
+{ 538083, 3, {91,81,73}},
+{ 538200, 3, {92,78,75}},
+{ 538230, 3, {233,55,42}},
+{ 538320, 3, {2243,16,15}},
+{ 538344, 3, {7477,9,8}},
+{ 538356, 3, {91,87,68}},
+{ 538380, 3, {997,27,20}},
+{ 538400, 3, {673,32,25}},
+{ 538461, 3, {111,77,63}},
+{ 538560, 3, {88,85,72}},
+{ 538608, 3, {229,49,48}},
+{ 538632, 3, {7481,9,8}},
+{ 538650, 3, {95,81,70}},
+{ 538704, 3, {87,86,72}},
+{ 538720, 3, {91,80,74}},
+{ 538764, 3, {139,68,57}},
+{ 538776, 3, {1069,24,21}},
+{ 538848, 3, {1871,18,16}},
+{ 538860, 3, {1283,21,20}},
+{ 538902, 3, {94,91,63}},
+{ 538944, 3, {401,42,32}},
+{ 538992, 3, {197,57,48}},
+{ 539000, 3, {100,77,70}},
+{ 539028, 3, {93,84,69}},
+{ 539064, 3, {7487,9,8}},
+{ 539136, 3, {96,78,72}},
+{ 539175, 3, {91,79,75}},
+{ 539208, 3, {7489,9,8}},
+{ 539220, 3, {95,86,66}},
+{ 539240, 3, {104,85,61}},
+{ 539280, 3, {107,72,70}},
+{ 539325, 3, {135,85,47}},
+{ 539392, 3, {98,86,64}},
+{ 539400, 3, {100,87,62}},
+{ 539424, 3, {1873,18,16}},
+{ 539595, 3, {571,35,27}},
+{ 539600, 3, {95,80,71}},
+{ 539784, 3, {98,81,68}},
+{ 539820, 3, {2999,15,12}},
+{ 539856, 3, {163,69,48}},
+{ 539880, 3, {409,40,33}},
+{ 539928, 3, {7499,9,8}},
+{ 539952, 3, {1607,21,16}},
+{ 540000, 3, {90,80,75}},
+{ 540096, 3, {97,87,64}},
+{ 540132, 3, {103,76,69}},
+{ 540144, 3, {93,88,66}},
+{ 540176, 3, {106,91,56}},
+{ 540180, 3, {3001,15,12}},
+{ 540240, 3, {2251,16,15}},
+{ 540288, 3, {96,84,67}},
+{ 540384, 3, {433,39,32}},
+{ 540408, 3, {89,88,69}},
+{ 540450, 3, {1201,25,18}},
+{ 540480, 3, {563,32,30}},
+{ 540504, 3, {7507,9,8}},
+{ 540540, 3, {90,78,77}},
+{ 540576, 3, {1877,18,16}},
+{ 540600, 3, {106,75,68}},
+{ 540624, 3, {1609,21,16}},
+{ 540675, 3, {89,81,75}},
+{ 540720, 3, {751,30,24}},
+{ 540792, 3, {87,84,74}},
+{ 540800, 3, {104,80,65}},
+{ 540804, 3, {241,51,44}},
+{ 540855, 3, {101,85,63}},
+{ 540930, 3, {95,78,73}},
+{ 540936, 3, {683,33,24}},
+{ 541044, 3, {113,76,63}},
+{ 541107, 3, {409,49,27}},
+{ 541152, 3, {1879,18,16}},
+{ 541200, 3, {88,82,75}},
+{ 541224, 3, {7517,9,8}},
+{ 541296, 3, {179,56,54}},
+{ 541320, 3, {347,40,39}},
+{ 541380, 3, {1289,21,20}},
+{ 541450, 3, {91,85,70}},
+{ 541500, 3, {95,76,75}},
+{ 541512, 3, {109,72,69}},
+{ 541600, 3, {677,32,25}},
+{ 541632, 3, {93,91,64}},
+{ 541656, 3, {7523,9,8}},
+{ 541680, 3, {111,80,61}},
+{ 541695, 3, {105,77,67}},
+{ 541728, 3, {88,81,76}},
+{ 541788, 3, {151,69,52}},
+{ 541800, 3, {86,84,75}},
+{ 541968, 3, {1613,21,16}},
+{ 541980, 3, {3011,15,12}},
+{ 542080, 3, {88,80,77}},
+{ 542088, 3, {7529,9,8}},
+{ 542100, 3, {139,65,60}},
+{ 542160, 3, {251,48,45}},
+{ 542184, 3, {87,82,76}},
+{ 542220, 3, {1291,21,20}},
+{ 542256, 3, {88,79,78}},
+{ 542295, 3, {103,81,65}},
+{ 542304, 3, {269,48,42}},
+{ 542340, 3, {131,69,60}},
+{ 542360, 3, {149,65,56}},
+{ 542376, 3, {93,81,72}},
+{ 542388, 3, {587,33,28}},
+{ 542400, 3, {113,75,64}},
+{ 542592, 3, {157,64,54}},
+{ 542619, 3, {87,81,77}},
+{ 542640, 3, {85,84,76}},
+{ 542664, 3, {7537,9,8}},
+{ 542724, 3, {91,84,71}},
+{ 542850, 3, {94,77,75}},
+{ 542880, 3, {87,80,78}},
+{ 542916, 3, {457,36,33}},
+{ 542920, 3, {277,49,40}},
+{ 542952, 3, {7541,9,8}},
+{ 542976, 3, {101,84,64}},
+{ 543060, 3, {431,36,35}},
+{ 543120, 3, {93,80,73}},
+{ 543150, 3, {90,85,71}},
+{ 543200, 3, {97,80,70}},
+{ 543270, 3, {199,65,42}},
+{ 543312, 3, {84,84,77}},
+{ 543384, 3, {7547,9,8}},
+{ 543400, 3, {95,88,65}},
+{ 543420, 3, {3019,15,12}},
+{ 543456, 3, {102,74,72}},
+{ 543528, 3, {7549,9,8}},
+{ 543552, 3, {149,64,57}},
+{ 543564, 3, {719,28,27}},
+{ 543576, 3, {88,87,71}},
+{ 543660, 3, {85,82,78}},
+{ 543672, 3, {839,27,24}},
+{ 543840, 3, {103,80,66}},
+{ 543864, 3, {93,86,68}},
+{ 543900, 3, {98,75,74}},
+{ 543915, 3, {85,81,79}},
+{ 543972, 3, {317,44,39}},
+{ 543984, 3, {1619,21,16}},
+{ 543996, 3, {92,81,73}},
+{ 544000, 3, {85,80,80}},
+{ 544005, 3, {157,63,55}},
+{ 544032, 3, {1889,18,16}},
+{ 544068, 3, {127,68,63}},
+{ 544080, 3, {2267,16,15}},
+{ 544096, 3, {347,49,32}},
+{ 544128, 3, {109,78,64}},
+{ 544140, 3, {3023,15,12}},
+{ 544170, 3, {97,85,66}},
+{ 544200, 3, {907,25,24}},
+{ 544236, 3, {93,77,76}},
+{ 544248, 3, {7559,9,8}},
+{ 544272, 3, {92,87,68}},
+{ 544320, 3, {84,81,80}},
+{ 544390, 3, {101,77,70}},
+{ 544392, 3, {7561,9,8}},
+{ 544440, 3, {349,40,39}},
+{ 544464, 3, {199,57,48}},
+{ 544544, 3, {91,88,68}},
+{ 544560, 3, {2269,16,15}},
+{ 544600, 3, {389,40,35}},
+{ 544608, 3, {96,93,61}},
+{ 544635, 3, {95,91,63}},
+{ 544656, 3, {1621,21,16}},
+{ 544680, 3, {89,85,72}},
+{ 544740, 3, {1297,21,20}},
+{ 544752, 3, {97,78,72}},
+{ 544800, 3, {227,50,48}},
+{ 544824, 3, {94,84,69}},
+{ 544830, 3, {127,66,65}},
+{ 544860, 3, {1009,27,20}},
+{ 544908, 3, {499,39,28}},
+{ 544920, 3, {239,57,40}},
+{ 544960, 3, {131,65,64}},
+{ 544968, 3, {87,87,72}},
+{ 545040, 3, {757,30,24}},
+{ 545088, 3, {167,64,51}},
+{ 545100, 3, {92,79,75}},
+{ 545125, 3, {125,89,49}},
+{ 545160, 3, {105,88,59}},
+{ 545184, 3, {631,32,27}},
+{ 545220, 3, {233,52,45}},
+{ 545256, 3, {7573,9,8}},
+{ 545265, 3, {577,35,27}},
+{ 545272, 3, {107,91,56}},
+{ 545292, 3, {99,81,68}},
+{ 545400, 3, {101,75,72}},
+{ 545440, 3, {487,35,32}},
+{ 545454, 3, {91,81,74}},
+{ 545490, 3, {95,87,66}},
+{ 545496, 3, {191,56,51}},
+{ 545520, 3, {2273,16,15}},
+{ 545544, 3, {7577,9,8}},
+{ 545580, 3, {433,36,35}},
+{ 545664, 3, {98,87,64}},
+{ 545700, 3, {107,75,68}},
+{ 545832, 3, {114,76,63}},
+{ 545850, 3, {1213,25,18}},
+{ 545904, 3, {223,51,48}},
+{ 545940, 3, {337,45,36}},
+{ 545976, 3, {7583,9,8}},
+{ 546000, 3, {91,80,75}},
+{ 546040, 3, {88,85,73}},
+{ 546075, 3, {809,27,25}},
+{ 546084, 3, {197,63,44}},
+{ 546156, 3, {389,39,36}},
+{ 546210, 3, {102,85,63}},
+{ 546240, 3, {569,32,30}},
+{ 546336, 3, {271,48,42}},
+{ 546345, 3, {95,81,71}},
+{ 546350, 3, {223,50,49}},
+{ 546400, 3, {683,32,25}},
+{ 546408, 3, {7589,9,8}},
+{ 546420, 3, {1301,21,20}},
+{ 546480, 3, {90,88,69}},
+{ 546525, 3, {347,45,35}},
+{ 546552, 3, {7591,9,8}},
+{ 546600, 3, {911,25,24}},
+{ 546624, 3, {96,78,73}},
+{ 546660, 3, {3037,15,12}},
+{ 546672, 3, {1627,21,16}},
+{ 546700, 3, {100,77,71}},
+{ 546720, 3, {96,85,67}},
+{ 546750, 3, {90,81,75}},
+{ 546840, 3, {93,84,70}},
+{ 546912, 3, {211,54,48}},
+{ 546975, 3, {99,85,65}},
+{ 547020, 3, {1013,27,20}},
+{ 547050, 3, {521,35,30}},
+{ 547092, 3, {167,63,52}},
+{ 547170, 3, {115,78,61}},
+{ 547200, 3, {90,80,76}},
+{ 547232, 3, {349,49,32}},
+{ 547260, 3, {1303,21,20}},
+{ 547272, 3, {691,33,24}},
+{ 547281, 3, {119,73,63}},
+{ 547344, 3, {181,56,54}},
+{ 547380, 3, {3041,15,12}},
+{ 547416, 3, {7603,9,8}},
+{ 547425, 3, {811,27,25}},
+{ 547440, 3, {2281,16,15}},
+{ 547456, 3, {94,91,64}},
+{ 547470, 3, {90,79,77}},
+{ 547488, 3, {1901,18,16}},
+{ 547536, 3, {102,88,61}},
+{ 547575, 3, {149,75,49}},
+{ 547584, 3, {93,92,64}},
+{ 547624, 3, {127,77,56}},
+{ 547650, 3, {1217,25,18}},
+{ 547668, 3, {461,36,33}},
+{ 547704, 3, {7607,9,8}},
+{ 547722, 3, {98,81,69}},
+{ 547740, 3, {179,60,51}},
+{ 547800, 3, {88,83,75}},
+{ 547820, 3, {91,86,70}},
+{ 547848, 3, {1087,24,21}},
+{ 547872, 3, {439,39,32}},
+{ 547884, 3, {89,81,76}},
+{ 547920, 3, {761,30,24}},
+{ 547932, 3, {593,33,28}},
+{ 547965, 3, {123,81,55}},
+{ 548016, 3, {233,49,48}},
+{ 548064, 3, {173,66,48}},
+{ 548080, 3, {104,85,62}},
+{ 548100, 3, {87,84,75}},
+{ 548160, 3, {571,32,30}},
+{ 548163, 3, {113,77,63}},
+{ 548208, 3, {94,81,72}},
+{ 548240, 3, {89,80,77}},
+{ 548328, 3, {93,88,67}},
+{ 548340, 3, {95,78,74}},
+{ 548352, 3, {96,84,68}},
+{ 548460, 3, {277,45,44}},
+{ 548496, 3, {293,48,39}},
+{ 548625, 3, {95,77,75}},
+{ 548700, 3, {100,93,59}},
+{ 548712, 3, {7621,9,8}},
+{ 548730, 3, {91,90,67}},
+{ 548760, 3, {269,51,40}},
+{ 548796, 3, {87,83,76}},
+{ 548800, 3, {98,80,70}},
+{ 548820, 3, {3049,15,12}},
+{ 548856, 3, {88,81,77}},
+{ 548880, 3, {2287,16,15}},
+{ 548940, 3, {1307,21,20}},
+{ 549072, 3, {93,82,72}},
+{ 549120, 3, {88,80,78}},
+{ 549150, 3, {523,35,30}},
+{ 549180, 3, {113,81,60}},
+{ 549216, 3, {1907,18,16}},
+{ 549252, 3, {99,76,73}},
+{ 549276, 3, {503,39,28}},
+{ 549360, 3, {109,72,70}},
+{ 549423, 3, {119,81,57}},
+{ 549480, 3, {241,57,40}},
+{ 549549, 3, {99,91,61}},
+{ 549585, 3, {115,81,59}},
+{ 549600, 3, {229,50,48}},
+{ 549612, 3, {727,28,27}},
+{ 549640, 3, {151,65,56}},
+{ 549675, 3, {349,45,35}},
+{ 549696, 3, {409,42,32}},
+{ 549780, 3, {85,84,77}},
+{ 549840, 3, {87,80,79}},
+{ 549864, 3, {1091,24,21}},
+{ 549920, 3, {491,35,32}},
+{ 549990, 3, {97,81,70}},
+{ 550008, 3, {7639,9,8}},
+{ 550032, 3, {1637,21,16}},
+{ 550044, 3, {463,36,33}},
+{ 550080, 3, {191,60,48}},
+{ 550116, 3, {111,84,59}},
+{ 550176, 3, {521,33,32}},
+{ 550188, 3, {93,87,68}},
+{ 550200, 3, {131,70,60}},
+{ 550260, 3, {1019,27,20}},
+{ 550290, 3, {85,83,78}},
+{ 550296, 3, {7643,9,8}},
+{ 550320, 3, {2293,16,15}},
+{ 550350, 3, {1223,25,18}},
+{ 550375, 3, {125,119,37}},
+{ 550560, 3, {93,80,74}},
+{ 550620, 3, {95,84,69}},
+{ 550680, 3, {353,40,39}},
+{ 550704, 3, {149,66,56}},
+{ 550728, 3, {7649,9,8}},
+{ 550760, 3, {281,49,40}},
+{ 550800, 3, {85,81,80}},
+{ 550848, 3, {151,64,57}},
+{ 550872, 3, {1093,24,21}},
+{ 550944, 3, {1913,18,16}},
+{ 550980, 3, {3061,15,12}},
+{ 551040, 3, {84,82,80}},
+{ 551070, 3, {157,65,54}},
+{ 551100, 3, {167,60,55}},
+{ 551124, 3, {84,81,81}},
+{ 551200, 3, {106,80,65}},
+{ 551208, 3, {193,56,51}},
+{ 551232, 3, {88,87,72}},
+{ 551250, 3, {98,75,75}},
+{ 551280, 3, {2297,16,15}},
+{ 551304, 3, {93,78,76}},
+{ 551320, 3, {179,56,55}},
+{ 551340, 3, {1021,27,20}},
+{ 551400, 3, {919,25,24}},
+{ 551448, 3, {92,81,74}},
+{ 551565, 3, {103,85,63}},
+{ 551628, 3, {199,63,44}},
+{ 551760, 3, {95,88,66}},
+{ 551808, 3, {479,36,32}},
+{ 551925, 3, {223,55,45}},
+{ 551928, 3, {104,87,61}},
+{ 551936, 3, {98,88,64}},
+{ 552000, 3, {92,80,75}},
+{ 552024, 3, {99,82,68}},
+{ 552060, 3, {3067,15,12}},
+{ 552090, 3, {239,55,42}},
+{ 552096, 3, {96,81,71}},
+{ 552168, 3, {7669,9,8}},
+{ 552216, 3, {173,57,56}},
+{ 552240, 3, {104,90,59}},
+{ 552276, 3, {92,87,69}},
+{ 552288, 3, {523,33,32}},
+{ 552330, 3, {102,95,57}},
+{ 552384, 3, {137,64,63}},
+{ 552456, 3, {7673,9,8}},
+{ 552475, 3, {175,77,41}},
+{ 552600, 3, {307,45,40}},
+{ 552640, 3, {157,64,55}},
+{ 552744, 3, {853,27,24}},
+{ 552800, 3, {691,32,25}},
+{ 552825, 3, {91,81,75}},
+{ 552840, 3, {271,51,40}},
+{ 552864, 3, {443,39,32}},
+{ 552888, 3, {1097,24,21}},
+{ 552900, 3, {97,76,75}},
+{ 553032, 3, {7681,9,8}},
+{ 553050, 3, {1229,25,18}},
+{ 553080, 3, {419,40,33}},
+{ 553104, 3, {167,69,48}},
+{ 553140, 3, {439,36,35}},
+{ 553280, 3, {91,80,76}},
+{ 553320, 3, {106,87,60}},
+{ 553344, 3, {131,66,64}},
+{ 553410, 3, {99,86,65}},
+{ 553455, 3, {251,49,45}},
+{ 553464, 3, {7687,9,8}},
+{ 553476, 3, {599,33,28}},
+{ 553504, 3, {353,49,32}},
+{ 553520, 3, {88,85,74}},
+{ 553536, 3, {93,93,64}},
+{ 553575, 3, {121,75,61}},
+{ 553600, 3, {173,64,50}},
+{ 553680, 3, {769,30,24}},
+{ 553707, 3, {119,99,47}},
+{ 553728, 3, {103,84,64}},
+{ 553752, 3, {7691,9,8}},
+{ 553824, 3, {641,32,27}},
+{ 553860, 3, {181,60,51}},
+{ 553896, 3, {157,63,56}},
+{ 553920, 3, {577,32,30}},
+{ 553950, 3, {1231,25,18}},
+{ 553980, 3, {1319,21,20}},
+{ 554040, 3, {90,81,76}},
+{ 554112, 3, {96,78,74}},
+{ 554148, 3, {733,28,27}},
+{ 554160, 3, {2309,16,15}},
+{ 554175, 3, {821,27,25}},
+{ 554190, 3, {91,87,70}},
+{ 554220, 3, {3079,15,12}},
+{ 554268, 3, {143,68,57}},
+{ 554328, 3, {7699,9,8}},
+{ 554337, 3, {419,49,27}},
+{ 554364, 3, {108,87,59}},
+{ 554400, 3, {90,80,77}},
+{ 554616, 3, {7703,9,8}},
+{ 554640, 3, {2311,16,15}},
+{ 554652, 3, {93,84,71}},
+{ 554680, 3, {283,49,40}},
+{ 554715, 3, {587,35,27}},
+{ 554736, 3, {127,78,56}},
+{ 554778, 3, {119,74,63}},
+{ 554796, 3, {467,36,33}},
+{ 554800, 3, {95,80,73}},
+{ 554820, 3, {1321,21,20}},
+{ 554840, 3, {97,88,65}},
+{ 554850, 3, {137,75,54}},
+{ 554880, 3, {96,85,68}},
+{ 554895, 3, {99,95,59}},
+{ 554925, 3, {151,75,49}},
+{ 554940, 3, {3083,15,12}},
+{ 555072, 3, {98,96,59}},
+{ 555093, 3, {89,81,77}},
+{ 555100, 3, {100,91,61}},
+{ 555120, 3, {257,48,45}},
+{ 555170, 3, {103,77,70}},
+{ 555192, 3, {701,33,24}},
+{ 555324, 3, {601,33,28}},
+{ 555336, 3, {857,27,24}},
+{ 555360, 3, {89,80,78}},
+{ 555390, 3, {99,85,66}},
+{ 555408, 3, {87,84,76}},
+{ 555464, 3, {109,91,56}},
+{ 555525, 3, {823,27,25}},
+{ 555552, 3, {643,32,27}},
+{ 555588, 3, {99,92,61}},
+{ 555624, 3, {7717,9,8}},
+{ 555660, 3, {98,81,70}},
+{ 555696, 3, {227,51,48}},
+{ 555720, 3, {421,40,33}},
+{ 555750, 3, {95,78,75}},
+{ 555768, 3, {93,83,72}},
+{ 555800, 3, {397,40,35}},
+{ 555828, 3, {509,39,28}},
+{ 555840, 3, {193,60,48}},
+{ 555864, 3, {106,76,69}},
+{ 555900, 3, {109,75,68}},
+{ 555912, 3, {1103,24,21}},
+{ 555975, 3, {353,45,35}},
+{ 555984, 3, {88,81,78}},
+{ 556020, 3, {3089,15,12}},
+{ 556056, 3, {7723,9,8}},
+{ 556080, 3, {331,42,40}},
+{ 556101, 3, {97,91,63}},
+{ 556104, 3, {94,87,68}},
+{ 556128, 3, {1931,18,16}},
+{ 556140, 3, {93,92,65}},
+{ 556150, 3, {227,50,49}},
+{ 556200, 3, {103,75,72}},
+{ 556248, 3, {86,84,77}},
+{ 556308, 3, {101,81,68}},
+{ 556320, 3, {96,95,61}},
+{ 556344, 3, {7727,9,8}},
+{ 556380, 3, {281,45,44}},
+{ 556400, 3, {107,80,65}},
+{ 556512, 3, {93,88,68}},
+{ 556560, 3, {773,30,24}},
+{ 556605, 3, {95,93,63}},
+{ 556632, 3, {859,27,24}},
+{ 556640, 3, {98,80,71}},
+{ 556650, 3, {1237,25,18}},
+{ 556704, 3, {1933,18,16}},
+{ 556710, 3, {241,55,42}},
+{ 556740, 3, {1031,27,20}},
+{ 556752, 3, {1657,21,16}},
+{ 556776, 3, {99,76,74}},
+{ 556800, 3, {87,80,80}},
+{ 556864, 3, {113,77,64}},
+{ 556920, 3, {85,84,78}},
+{ 556983, 3, {421,49,27}},
+{ 557040, 3, {211,55,48}},
+{ 557172, 3, {99,84,67}},
+{ 557280, 3, {86,81,80}},
+{ 557340, 3, {1327,21,20}},
+{ 557352, 3, {7741,9,8}},
+{ 557375, 3, {125,91,49}},
+{ 557388, 3, {397,39,36}},
+{ 557400, 3, {929,25,24}},
+{ 557460, 3, {163,60,57}},
+{ 557480, 3, {181,56,55}},
+{ 557496, 3, {89,87,72}},
+{ 557520, 3, {101,80,69}},
+{ 557550, 3, {105,90,59}},
+{ 557600, 3, {85,82,80}},
+{ 557685, 3, {85,81,81}},
+{ 557760, 3, {84,83,80}},
+{ 557820, 3, {1033,27,20}},
+{ 557865, 3, {105,77,69}},
+{ 557928, 3, {84,82,81}},
+{ 558000, 3, {93,80,75}},
+{ 558012, 3, {91,84,73}},
+{ 558030, 3, {95,89,66}},
+{ 558090, 3, {106,81,65}},
+{ 558096, 3, {151,66,56}},
+{ 558144, 3, {102,76,72}},
+{ 558180, 3, {443,36,35}},
+{ 558208, 3, {98,89,64}},
+{ 558216, 3, {7753,9,8}},
+{ 558225, 3, {827,27,25}},
+{ 558250, 3, {125,77,58}},
+{ 558306, 3, {211,54,49}},
+{ 558348, 3, {119,69,68}},
+{ 558372, 3, {93,79,76}},
+{ 558432, 3, {277,48,42}},
+{ 558450, 3, {90,85,73}},
+{ 558504, 3, {7757,9,8}},
+{ 558540, 3, {107,87,60}},
+{ 558600, 3, {98,76,75}},
+{ 558624, 3, {92,88,69}},
+{ 558648, 3, {7759,9,8}},
+{ 558675, 3, {191,65,45}},
+{ 558684, 3, {739,28,27}},
+{ 558756, 3, {99,83,68}},
+{ 558768, 3, {1663,21,16}},
+{ 558800, 3, {127,80,55}},
+{ 558880, 3, {499,35,32}},
+{ 558888, 3, {88,87,73}},
+{ 558900, 3, {92,81,75}},
+{ 558936, 3, {1109,24,21}},
+{ 559008, 3, {647,32,27}},
+{ 559104, 3, {96,91,64}},
+{ 559200, 3, {233,50,48}},
+{ 559224, 3, {863,27,24}},
+{ 559260, 3, {239,52,45}},
+{ 559284, 3, {223,57,44}},
+{ 559488, 3, {94,93,64}},
+{ 559572, 3, {211,52,51}},
+{ 559575, 3, {829,27,25}},
+{ 559584, 3, {96,87,67}},
+{ 559620, 3, {3109,15,12}},
+{ 559625, 3, {125,121,37}},
+{ 559650, 3, {91,82,75}},
+{ 559680, 3, {106,80,66}},
+{ 559800, 3, {311,45,40}},
+{ 559845, 3, {99,87,65}},
+{ 559872, 3, {96,81,72}},
+{ 559920, 3, {2333,16,15}},
+{ 559944, 3, {101,77,72}},
+{ 560000, 3, {100,80,70}},
+{ 560040, 3, {359,40,39}},
+{ 560112, 3, {1667,21,16}},
+{ 560120, 3, {95,88,67}},
+{ 560175, 3, {97,77,75}},
+{ 560196, 3, {91,81,76}},
+{ 560280, 3, {92,87,70}},
+{ 560340, 3, {283,45,44}},
+{ 560352, 3, {449,39,32}},
+{ 560385, 3, {593,35,27}},
+{ 560448, 3, {139,64,63}},
+{ 560560, 3, {91,80,77}},
+{ 560592, 3, {229,51,48}},
+{ 560700, 3, {89,84,75}},
+{ 560736, 3, {99,96,59}},
+{ 560784, 3, {1669,21,16}},
+{ 560800, 3, {701,32,25}},
+{ 560808, 3, {7789,9,8}},
+{ 560832, 3, {127,69,64}},
+{ 560868, 3, {607,33,28}},
+{ 560976, 3, {104,87,62}},
+{ 561000, 3, {88,85,75}},
+{ 561015, 3, {137,65,63}},
+{ 561024, 3, {487,36,32}},
+{ 561050, 3, {229,50,49}},
+{ 561060, 3, {1039,27,20}},
+{ 561096, 3, {7793,9,8}},
+{ 561108, 3, {107,76,69}},
+{ 561204, 3, {131,68,63}},
+{ 561312, 3, {1949,18,16}},
+{ 561330, 3, {90,81,77}},
+{ 561360, 3, {2339,16,15}},
+{ 561384, 3, {113,72,69}},
+{ 561393, 3, {133,67,63}},
+{ 561400, 3, {401,40,35}},
+{ 561420, 3, {3119,15,12}},
+{ 561528, 3, {709,33,24}},
+{ 561540, 3, {191,60,49}},
+{ 561600, 3, {90,80,78}},
+{ 561708, 3, {743,28,27}},
+{ 561735, 3, {95,81,73}},
+{ 561780, 3, {3121,15,12}},
+{ 561816, 3, {102,81,68}},
+{ 561825, 3, {227,55,45}},
+{ 561834, 3, {98,91,63}},
+{ 561840, 3, {2341,16,15}},
+{ 561888, 3, {1951,18,16}},
+{ 561960, 3, {223,56,45}},
+{ 561990, 3, {131,66,65}},
+{ 562020, 3, {87,85,76}},
+{ 562050, 3, {1249,25,18}},
+{ 562100, 3, {100,77,73}},
+{ 562128, 3, {239,49,48}},
+{ 562140, 3, {347,45,36}},
+{ 562200, 3, {937,25,24}},
+{ 562212, 3, {97,84,69}},
+{ 562248, 3, {137,72,57}},
+{ 562275, 3, {105,85,63}},
+{ 562320, 3, {90,88,71}},
+{ 562368, 3, {101,87,64}},
+{ 562400, 3, {95,80,74}},
+{ 562464, 3, {93,84,72}},
+{ 562590, 3, {95,94,63}},
+{ 562632, 3, {197,56,51}},
+{ 562716, 3, {87,84,77}},
+{ 562824, 3, {7817,9,8}},
+{ 562836, 3, {93,89,68}},
+{ 562848, 3, {88,82,78}},
+{ 562912, 3, {359,49,32}},
+{ 562950, 3, {139,75,54}},
+{ 562968, 3, {1117,24,21}},
+{ 563004, 3, {401,39,36}},
+{ 563040, 3, {92,85,72}},
+{ 563112, 3, {88,81,79}},
+{ 563136, 3, {419,42,32}},
+{ 563160, 3, {95,78,76}},
+{ 563220, 3, {149,63,60}},
+{ 563244, 3, {251,51,44}},
+{ 563256, 3, {7823,9,8}},
+{ 563280, 3, {2347,16,15}},
+{ 563316, 3, {157,69,52}},
+{ 563328, 3, {163,64,54}},
+{ 563355, 3, {107,81,65}},
+{ 563360, 3, {503,35,32}},
+{ 563400, 3, {313,45,40}},
+{ 563520, 3, {587,32,30}},
+{ 563550, 3, {85,85,78}},
+{ 563598, 3, {98,81,71}},
+{ 563640, 3, {105,88,61}},
+{ 563652, 3, {307,51,36}},
+{ 563688, 3, {7829,9,8}},
+{ 563745, 3, {105,91,59}},
+{ 563760, 3, {87,81,80}},
+{ 563805, 3, {99,85,67}},
+{ 563940, 3, {241,52,45}},
+{ 564000, 3, {94,80,75}},
+{ 564060, 3, {85,84,79}},
+{ 564096, 3, {113,78,64}},
+{ 564192, 3, {653,32,27}},
+{ 564200, 3, {100,91,62}},
+{ 564240, 3, {2351,16,15}},
+{ 564300, 3, {99,76,75}},
+{ 564400, 3, {85,83,80}},
+{ 564408, 3, {104,81,67}},
+{ 564480, 3, {84,84,80}},
+{ 564525, 3, {193,65,45}},
+{ 564552, 3, {7841,9,8}},
+{ 564570, 3, {85,82,81}},
+{ 564600, 3, {941,25,24}},
+{ 564660, 3, {3137,15,12}},
+{ 564672, 3, {173,64,51}},
+{ 564696, 3, {93,88,69}},
+{ 564732, 3, {84,83,81}},
+{ 564795, 3, {163,63,55}},
+{ 564872, 3, {131,77,56}},
+{ 564928, 3, {97,91,64}},
+{ 564960, 3, {107,80,66}},
+{ 564975, 3, {93,81,75}},
+{ 564984, 3, {118,76,63}},
+{ 565080, 3, {277,51,40}},
+{ 565110, 3, {91,90,69}},
+{ 565152, 3, {112,87,58}},
+{ 565212, 3, {111,76,67}},
+{ 565380, 3, {349,45,36}},
+{ 565416, 3, {7853,9,8}},
+{ 565425, 3, {359,45,35}},
+{ 565440, 3, {93,80,76}},
+{ 565488, 3, {102,77,72}},
+{ 565500, 3, {100,87,65}},
+{ 565600, 3, {101,80,70}},
+{ 565632, 3, {491,36,32}},
+{ 565656, 3, {91,84,74}},
+{ 565680, 3, {2357,16,15}},
+{ 565704, 3, {97,81,72}},
+{ 565740, 3, {449,36,35}},
+{ 565785, 3, {127,81,55}},
+{ 565800, 3, {92,82,75}},
+{ 565824, 3, {421,42,32}},
+{ 565950, 3, {98,77,75}},
+{ 565992, 3, {1123,24,21}},
+{ 566055, 3, {599,35,27}},
+{ 566100, 3, {90,85,74}},
+{ 566124, 3, {191,57,52}},
+{ 566160, 3, {337,42,40}},
+{ 566280, 3, {99,88,65}},
+{ 566325, 3, {839,27,25}},
+{ 566352, 3, {92,81,76}},
+{ 566400, 3, {100,96,59}},
+{ 566412, 3, {613,33,28}},
+{ 566424, 3, {7867,9,8}},
+{ 566460, 3, {1049,27,20}},
+{ 566475, 3, {91,83,75}},
+{ 566496, 3, {281,48,42}},
+{ 566544, 3, {88,87,74}},
+{ 566550, 3, {1259,25,18}},
+{ 566580, 3, {95,84,71}},
+{ 566610, 3, {101,85,66}},
+{ 566640, 3, {787,30,24}},
+{ 566685, 3, {257,49,45}},
+{ 566720, 3, {92,80,77}},
+{ 566748, 3, {173,63,52}},
+{ 566775, 3, {229,55,45}},
+{ 566800, 3, {109,80,65}},
+{ 566832, 3, {241,49,48}},
+{ 566856, 3, {7873,9,8}},
+{ 566865, 3, {117,85,57}},
+{ 566930, 3, {91,89,70}},
+{ 567000, 3, {90,84,75}},
+{ 567072, 3, {179,66,48}},
+{ 567144, 3, {7877,9,8}},
+{ 567180, 3, {137,69,60}},
+{ 567200, 3, {709,32,25}},
+{ 567216, 3, {101,78,72}},
+{ 567270, 3, {191,55,54}},
+{ 567288, 3, {7879,9,8}},
+{ 567300, 3, {100,93,61}},
+{ 567324, 3, {103,81,68}},
+{ 567360, 3, {197,60,48}},
+{ 567420, 3, {193,60,49}},
+{ 567540, 3, {1051,27,20}},
+{ 567567, 3, {91,81,77}},
+{ 567576, 3, {7883,9,8}},
+{ 567600, 3, {88,86,75}},
+{ 567630, 3, {106,85,63}},
+{ 567648, 3, {96,81,73}},
+{ 567732, 3, {121,69,68}},
+{ 567756, 3, {751,28,27}},
+{ 567840, 3, {91,80,78}},
+{ 567875, 3, {125,77,59}},
+{ 567936, 3, {96,87,68}},
+{ 567945, 3, {601,35,27}},
+{ 567996, 3, {331,44,39}},
+{ 568008, 3, {98,84,69}},
+{ 568050, 3, {541,35,30}},
+{ 568080, 3, {263,48,45}},
+{ 568200, 3, {947,25,24}},
+{ 568215, 3, {115,81,61}},
+{ 568224, 3, {1973,18,16}},
+{ 568260, 3, {90,82,77}},
+{ 568284, 3, {92,87,71}},
+{ 568296, 3, {877,27,24}},
+{ 568344, 3, {199,56,51}},
+{ 568400, 3, {100,98,58}},
+{ 568425, 3, {143,75,53}},
+{ 568480, 3, {88,85,76}},
+{ 568560, 3, {103,80,69}},
+{ 568568, 3, {91,88,71}},
+{ 568575, 3, {95,95,63}},
+{ 568632, 3, {87,86,76}},
+{ 568701, 3, {119,81,59}},
+{ 568764, 3, {111,84,61}},
+{ 568800, 3, {90,80,79}},
+{ 568848, 3, {1693,21,16}},
+{ 568872, 3, {7901,9,8}},
+{ 568920, 3, {431,40,33}},
+{ 568932, 3, {521,39,28}},
+{ 568960, 3, {127,70,64}},
+{ 568980, 3, {109,87,60}},
+{ 569016, 3, {1129,24,21}},
+{ 569040, 3, {2371,16,15}},
+{ 569052, 3, {479,36,33}},
+{ 569088, 3, {96,78,76}},
+{ 569160, 3, {93,85,72}},
+{ 569184, 3, {88,84,77}},
+{ 569205, 3, {139,65,63}},
+{ 569280, 3, {593,32,30}},
+{ 569304, 3, {7907,9,8}},
+{ 569316, 3, {227,57,44}},
+{ 569340, 3, {3163,15,12}},
+{ 569376, 3, {659,32,27}},
+{ 569430, 3, {95,81,74}},
+{ 569448, 3, {719,33,24}},
+{ 569520, 3, {113,72,70}},
+{ 569625, 3, {125,93,49}},
+{ 569700, 3, {211,54,50}},
+{ 569712, 3, {88,83,78}},
+{ 569800, 3, {100,77,74}},
+{ 569835, 3, {105,81,67}},
+{ 569856, 3, {106,84,64}},
+{ 569920, 3, {137,65,64}},
+{ 569940, 3, {105,92,59}},
+{ 569952, 3, {1979,18,16}},
+{ 570000, 3, {95,80,75}},
+{ 570024, 3, {87,84,78}},
+{ 570060, 3, {3167,15,12}},
+{ 570080, 3, {509,35,32}},
+{ 570108, 3, {617,33,28}},
+{ 570168, 3, {7919,9,8}},
+{ 570180, 3, {86,85,78}},
+{ 570192, 3, {1697,21,16}},
+{ 570213, 3, {431,49,27}},
+{ 570240, 3, {88,81,80}},
+{ 570276, 3, {93,84,73}},
+{ 570336, 3, {457,39,32}},
+{ 570384, 3, {233,51,48}},
+{ 570420, 3, {3169,15,12}},
+{ 570456, 3, {139,72,57}},
+{ 570480, 3, {2377,16,15}},
+{ 570528, 3, {283,48,42}},
+{ 570570, 3, {95,78,77}},
+{ 570600, 3, {317,45,40}},
+{ 570648, 3, {104,93,59}},
+{ 570720, 3, {87,82,80}},
+{ 570744, 3, {7927,9,8}},
+{ 570752, 3, {98,91,64}},
+{ 570768, 3, {94,88,69}},
+{ 570780, 3, {151,63,60}},
+{ 570850, 3, {233,50,49}},
+{ 570864, 3, {1699,21,16}},
+{ 570888, 3, {881,27,24}},
+{ 570900, 3, {173,60,55}},
+{ 570960, 3, {104,90,61}},
+{ 570969, 3, {133,81,53}},
+{ 570996, 3, {311,51,36}},
+{ 571032, 3, {103,77,72}},
+{ 571050, 3, {94,81,75}},
+{ 571104, 3, {661,32,27}},
+{ 571116, 3, {523,39,28}},
+{ 571140, 3, {167,60,57}},
+{ 571176, 3, {7933,9,8}},
+{ 571200, 3, {85,84,80}},
+{ 571296, 3, {541,33,32}},
+{ 571340, 3, {106,77,70}},
+{ 571368, 3, {179,57,56}},
+{ 571392, 3, {96,93,64}},
+{ 571440, 3, {2381,16,15}},
+{ 571455, 3, {85,83,81}},
+{ 571464, 3, {7937,9,8}},
+{ 571480, 3, {157,65,56}},
+{ 571500, 3, {127,75,60}},
+{ 571536, 3, {84,84,81}},
+{ 571560, 3, {433,40,33}},
+{ 571596, 3, {109,76,69}},
+{ 571620, 3, {1361,21,20}},
+{ 571648, 3, {116,77,64}},
+{ 571710, 3, {102,95,59}},
+{ 571725, 3, {99,77,75}},
+{ 571800, 3, {953,25,24}},
+{ 571824, 3, {99,76,76}},
+{ 571860, 3, {353,45,36}},
+{ 571920, 3, {2383,16,15}},
+{ 571956, 3, {619,33,28}},
+{ 572000, 3, {100,88,65}},
+{ 572040, 3, {227,56,45}},
+{ 572052, 3, {193,57,52}},
+{ 572130, 3, {163,65,54}},
+{ 572160, 3, {149,64,60}},
+{ 572184, 3, {883,27,24}},
+{ 572208, 3, {131,78,56}},
+{ 572220, 3, {99,85,68}},
+{ 572256, 3, {1987,18,16}},
+{ 572280, 3, {251,57,40}},
+{ 572292, 3, {757,28,27}},
+{ 572320, 3, {98,80,73}},
+{ 572328, 3, {7949,9,8}},
+{ 572400, 3, {106,75,72}},
+{ 572472, 3, {7951,9,8}},
+{ 572508, 3, {93,81,76}},
+{ 572520, 3, {367,40,39}},
+{ 572544, 3, {96,84,71}},
+{ 572580, 3, {3181,15,12}},
+{ 572600, 3, {409,40,35}},
+{ 572670, 3, {101,81,70}},
+{ 572700, 3, {92,83,75}},
+{ 572715, 3, {99,89,65}},
+{ 572736, 3, {157,64,57}},
+{ 572800, 3, {179,64,50}},
+{ 572832, 3, {102,78,72}},
+{ 572850, 3, {95,90,67}},
+{ 572859, 3, {433,49,27}},
+{ 572880, 3, {93,80,77}},
+{ 572940, 3, {1061,27,20}},
+{ 572976, 3, {173,69,48}},
+{ 572985, 3, {107,85,63}},
+{ 573040, 3, {104,95,58}},
+{ 573120, 3, {199,60,48}},
+{ 573156, 3, {108,87,61}},
+{ 573210, 3, {193,55,54}},
+{ 573240, 3, {281,51,40}},
+{ 573252, 3, {93,92,67}},
+{ 573300, 3, {91,84,75}},
+{ 573336, 3, {7963,9,8}},
+{ 573360, 3, {2389,16,15}},
+{ 573408, 3, {181,66,48}},
+{ 573504, 3, {103,87,64}},
+{ 573600, 3, {239,50,48}},
+{ 573615, 3, {607,35,27}},
+{ 573660, 3, {3187,15,12}},
+{ 573705, 3, {99,95,61}},
+{ 573750, 3, {90,85,75}},
+{ 573760, 3, {163,64,55}},
+{ 573804, 3, {92,81,77}},
+{ 573840, 3, {797,30,24}},
+{ 573852, 3, {97,87,68}},
+{ 573885, 3, {109,81,65}},
+{ 573888, 3, {98,96,61}},
+{ 573984, 3, {1993,18,16}},
+{ 574020, 3, {1063,27,20}},
+{ 574035, 3, {105,77,71}},
+{ 574080, 3, {92,80,78}},
+{ 574140, 3, {1367,21,20}},
+{ 574200, 3, {88,87,75}},
+{ 574224, 3, {1709,21,16}},
+{ 574236, 3, {409,39,36}},
+{ 574280, 3, {293,49,40}},
+{ 574320, 3, {2393,16,15}},
+{ 574332, 3, {229,57,44}},
+{ 574350, 3, {547,35,30}},
+{ 574380, 3, {3191,15,12}},
+{ 574600, 3, {104,85,65}},
+{ 574650, 3, {1277,25,18}},
+{ 574668, 3, {313,51,36}},
+{ 574695, 3, {129,81,55}},
+{ 574704, 3, {307,48,39}},
+{ 574776, 3, {887,27,24}},
+{ 574848, 3, {499,36,32}},
+{ 574896, 3, {112,87,59}},
+{ 574938, 3, {91,81,78}},
+{ 574992, 3, {99,88,66}},
+{ 575040, 3, {599,32,30}},
+{ 575064, 3, {163,63,56}},
+{ 575120, 3, {91,80,79}},
+{ 575136, 3, {1997,18,16}},
+{ 575190, 3, {90,83,77}},
+{ 575200, 3, {719,32,25}},
+{ 575232, 3, {107,84,64}},
+{ 575244, 3, {87,87,76}},
+{ 575280, 3, {94,85,72}},
+{ 575316, 3, {761,28,27}},
+{ 575328, 3, {461,39,32}},
+{ 575400, 3, {137,70,60}},
+{ 575424, 3, {96,81,74}},
+{ 575456, 3, {367,49,32}},
+{ 575460, 3, {139,69,60}},
+{ 575484, 3, {93,91,68}},
+{ 575496, 3, {7993,9,8}},
+{ 575520, 3, {109,80,66}},
+{ 575550, 3, {1279,25,18}},
+{ 575652, 3, {89,84,77}},
+{ 575700, 3, {101,76,75}},
+{ 575712, 3, {1999,18,16}},
+{ 575736, 3, {149,69,56}},
+{ 575750, 3, {125,94,49}},
+{ 575760, 3, {2399,16,15}},
+{ 575775, 3, {853,27,25}},
+{ 575784, 3, {727,33,24}},
+{ 575820, 3, {457,36,35}},
+{ 575848, 3, {113,91,56}},
+{ 575856, 3, {93,86,72}},
+{ 575960, 3, {88,85,77}},
+{ 576000, 3, {90,80,80}},
+{ 576030, 3, {211,65,42}},
+{ 576072, 3, {127,72,63}},
+{ 576225, 3, {197,65,45}},
+{ 576288, 3, {92,87,72}},
+{ 576300, 3, {113,75,68}},
+{ 576400, 3, {131,80,55}},
+{ 576450, 3, {105,90,61}},
+{ 576540, 3, {3203,15,12}},
+{ 576576, 3, {88,84,78}},
+{ 576600, 3, {100,93,62}},
+{ 576648, 3, {8009,9,8}},
+{ 576660, 3, {1373,21,20}},
+{ 576675, 3, {233,55,45}},
+{ 576708, 3, {257,51,44}},
+{ 576720, 3, {89,81,80}},
+{ 576730, 3, {107,77,70}},
+{ 576792, 3, {8011,9,8}},
+{ 576800, 3, {103,80,70}},
+{ 576810, 3, {87,85,78}},
+{ 576840, 3, {95,88,69}},
+{ 576864, 3, {2003,18,16}},
+{ 576960, 3, {601,32,30}},
+{ 576975, 3, {157,75,49}},
+{ 577024, 3, {98,92,64}},
+{ 577080, 3, {229,56,45}},
+{ 577125, 3, {95,81,75}},
+{ 577152, 3, {167,64,54}},
+{ 577224, 3, {8017,9,8}},
+{ 577260, 3, {1069,27,20}},
+{ 577269, 3, {119,77,63}},
+{ 577296, 3, {211,57,48}},
+{ 577320, 3, {283,51,40}},
+{ 577332, 3, {87,84,79}},
+{ 577344, 3, {97,93,64}},
+{ 577350, 3, {1283,25,18}},
+{ 577368, 3, {88,81,81}},
+{ 577500, 3, {100,77,75}},
+{ 577524, 3, {149,68,57}},
+{ 577584, 3, {191,56,54}},
+{ 577600, 3, {95,80,76}},
+{ 577620, 3, {3209,15,12}},
+{ 577632, 3, {547,33,32}},
+{ 577680, 3, {87,83,80}},
+{ 577720, 3, {101,88,65}},
+{ 577728, 3, {102,96,59}},
+{ 577752, 3, {181,57,56}},
+{ 577800, 3, {107,75,72}},
+{ 577824, 3, {463,39,32}},
+{ 577830, 3, {103,85,66}},
+{ 577920, 3, {86,84,80}},
+{ 577980, 3, {95,78,78}},
+{ 578000, 3, {85,85,80}},
+{ 578016, 3, {223,54,48}},
+{ 578025, 3, {367,45,35}},
+{ 578088, 3, {93,84,74}},
+{ 578151, 3, {133,69,63}},
+{ 578160, 3, {90,88,73}},
+{ 578200, 3, {100,98,59}},
+{ 578240, 3, {139,65,64}},
+{ 578256, 3, {1721,21,16}},
+{ 578292, 3, {337,44,39}},
+{ 578340, 3, {85,84,81}},
+{ 578400, 3, {241,50,48}},
+{ 578448, 3, {103,78,72}},
+{ 578475, 3, {857,27,25}},
+{ 578496, 3, {131,69,64}},
+{ 578556, 3, {487,36,33}},
+{ 578640, 3, {2411,16,15}},
+{ 578655, 3, {167,63,55}},
+{ 578664, 3, {94,81,76}},
+{ 578688, 3, {137,66,64}},
+{ 578808, 3, {8039,9,8}},
+{ 578880, 3, {96,90,67}},
+{ 578928, 3, {1723,21,16}},
+{ 578952, 3, {99,86,68}},
+{ 579033, 3, {101,91,63}},
+{ 579040, 3, {94,80,77}},
+{ 579060, 3, {3217,15,12}},
+{ 579072, 3, {104,87,64}},
+{ 579168, 3, {2011,18,16}},
+{ 579180, 3, {197,60,49}},
+{ 579200, 3, {181,64,50}},
+{ 579264, 3, {431,42,32}},
+{ 579285, 3, {613,35,27}},
+{ 579348, 3, {99,77,76}},
+{ 579360, 3, {96,85,71}},
+{ 579425, 3, {175,77,43}},
+{ 579456, 3, {503,36,32}},
+{ 579474, 3, {98,81,73}},
+{ 579480, 3, {439,40,33}},
+{ 579576, 3, {93,82,76}},
+{ 579600, 3, {92,84,75}},
+{ 579670, 3, {91,91,70}},
+{ 579744, 3, {99,96,61}},
+{ 579768, 3, {98,87,68}},
+{ 579780, 3, {3221,15,12}},
+{ 579810, 3, {251,55,42}},
+{ 579816, 3, {8053,9,8}},
+{ 579825, 3, {859,27,25}},
+{ 579840, 3, {151,64,60}},
+{ 579852, 3, {108,91,59}},
+{ 579915, 3, {263,49,45}},
+{ 580020, 3, {1381,21,20}},
+{ 580041, 3, {93,81,77}},
+{ 580050, 3, {1289,25,18}},
+{ 580080, 3, {2417,16,15}},
+{ 580104, 3, {1151,24,21}},
+{ 580125, 3, {91,85,75}},
+{ 580140, 3, {293,45,44}},
+{ 580160, 3, {98,80,74}},
+{ 580176, 3, {102,79,72}},
+{ 580200, 3, {967,25,24}},
+{ 580248, 3, {8059,9,8}},
+{ 580272, 3, {157,66,56}},
+{ 580320, 3, {93,80,78}},
+{ 580536, 3, {733,33,24}},
+{ 580545, 3, {97,95,63}},
+{ 580608, 3, {96,84,72}},
+{ 580635, 3, {99,85,69}},
+{ 580650, 3, {98,79,75}},
+{ 580720, 3, {112,85,61}},
+{ 580797, 3, {439,49,27}},
+{ 580800, 3, {88,88,75}},
+{ 580860, 3, {461,36,35}},
+{ 580896, 3, {2017,18,16}},
+{ 580944, 3, {91,84,76}},
+{ 580950, 3, {1291,25,18}},
+{ 580968, 3, {8069,9,8}},
+{ 581040, 3, {269,48,45}},
+{ 581064, 3, {93,88,71}},
+{ 581100, 3, {149,65,60}},
+{ 581112, 3, {1153,24,21}},
+{ 581220, 3, {3229,15,12}},
+{ 581256, 3, {92,81,78}},
+{ 581364, 3, {769,28,27}},
+{ 581400, 3, {90,85,76}},
+{ 581472, 3, {673,32,27}},
+{ 581490, 3, {91,90,71}},
+{ 581520, 3, {2423,16,15}},
+{ 581580, 3, {359,45,36}},
+{ 581600, 3, {727,32,25}},
+{ 581625, 3, {125,99,47}},
+{ 581808, 3, {93,92,68}},
+{ 581832, 3, {8081,9,8}},
+{ 581856, 3, {88,87,76}},
+{ 581875, 3, {125,95,49}},
+{ 581880, 3, {373,40,39}},
+{ 581952, 3, {433,42,32}},
+{ 582000, 3, {97,80,75}},
+{ 582012, 3, {317,51,36}},
+{ 582075, 3, {199,65,45}},
+{ 582084, 3, {111,76,69}},
+{ 582120, 3, {90,84,77}},
+{ 582192, 3, {311,48,39}},
+{ 582264, 3, {8087,9,8}},
+{ 582288, 3, {1733,21,16}},
+{ 582309, 3, {91,81,79}},
+{ 582400, 3, {91,80,80}},
+{ 582408, 3, {8089,9,8}},
+{ 582480, 3, {809,30,24}},
+{ 582525, 3, {863,27,25}},
+{ 582540, 3, {95,84,73}},
+{ 582552, 3, {93,87,72}},
+{ 582600, 3, {971,25,24}},
+{ 582696, 3, {8093,9,8}},
+{ 582720, 3, {607,32,30}},
+{ 582816, 3, {467,39,32}},
+{ 582855, 3, {105,91,61}},
+{ 582900, 3, {100,87,67}},
+{ 582920, 3, {104,95,59}},
+{ 582930, 3, {127,85,54}},
+{ 582960, 3, {347,42,40}},
+{ 583044, 3, {631,33,28}},
+{ 583050, 3, {115,78,65}},
+{ 583065, 3, {617,35,27}},
+{ 583110, 3, {95,93,66}},
+{ 583200, 3, {90,81,80}},
+{ 583272, 3, {8101,9,8}},
+{ 583275, 3, {101,77,75}},
+{ 583296, 3, {98,93,64}},
+{ 583308, 3, {491,36,33}},
+{ 583380, 3, {463,36,35}},
+{ 583440, 3, {88,85,78}},
+{ 583464, 3, {151,69,56}},
+{ 583520, 3, {521,35,32}},
+{ 583605, 3, {131,81,55}},
+{ 583632, 3, {193,56,54}},
+{ 583650, 3, {1297,25,18}},
+{ 583695, 3, {109,85,63}},
+{ 583704, 3, {99,88,67}},
+{ 583776, 3, {2027,18,16}},
+{ 583800, 3, {139,70,60}},
+{ 583848, 3, {106,81,68}},
+{ 583908, 3, {197,57,52}},
+{ 583920, 3, {811,30,24}},
+{ 583992, 3, {8111,9,8}},
+{ 584010, 3, {103,81,70}},
+{ 584064, 3, {96,78,78}},
+{ 584100, 3, {100,99,59}},
+{ 584256, 3, {179,64,51}},
+{ 584292, 3, {92,87,73}},
+{ 584352, 3, {2029,18,16}},
+{ 584364, 3, {233,57,44}},
+{ 584388, 3, {773,28,27}},
+{ 584415, 3, {111,81,65}},
+{ 584424, 3, {8117,9,8}},
+{ 584460, 3, {191,60,51}},
+{ 584496, 3, {88,82,81}},
+{ 584584, 3, {91,88,73}},
+{ 584640, 3, {87,84,80}},
+{ 584760, 3, {443,40,33}},
+{ 584766, 3, {102,91,63}},
+{ 584800, 3, {86,85,80}},
+{ 584820, 3, {95,81,76}},
+{ 584844, 3, {163,69,52}},
+{ 584850, 3, {557,35,30}},
+{ 584856, 3, {8123,9,8}},
+{ 584864, 3, {373,49,32}},
+{ 584880, 3, {2437,16,15}},
+{ 584892, 3, {211,63,44}},
+{ 584928, 3, {677,32,27}},
+{ 584955, 3, {619,35,27}},
+{ 584976, 3, {1741,21,16}},
+{ 585060, 3, {199,60,49}},
+{ 585072, 3, {239,51,48}},
+{ 585090, 3, {197,55,54}},
+{ 585120, 3, {106,80,69}},
+{ 585144, 3, {86,84,81}},
+{ 585180, 3, {3251,15,12}},
+{ 585200, 3, {95,80,77}},
+{ 585216, 3, {127,72,64}},
+{ 585225, 3, {85,85,81}},
+{ 585276, 3, {151,68,57}},
+{ 585288, 3, {739,33,24}},
+{ 585312, 3, {96,91,67}},
+{ 585360, 3, {271,48,45}},
+{ 585390, 3, {95,79,78}},
+{ 585396, 3, {101,84,69}},
+{ 585450, 3, {1301,25,18}},
+{ 585480, 3, {85,84,82}},
+{ 585540, 3, {3253,15,12}},
+{ 585550, 3, {239,50,49}},
+{ 585585, 3, {99,91,65}},
+{ 585600, 3, {100,96,61}},
+{ 585684, 3, {99,87,68}},
+{ 585760, 3, {523,35,32}},
+{ 585840, 3, {2441,16,15}},
+{ 585900, 3, {93,84,75}},
+{ 585936, 3, {313,48,39}},
+{ 585960, 3, {257,57,40}},
+{ 585984, 3, {109,84,64}},
+{ 586040, 3, {92,91,70}},
+{ 586080, 3, {90,88,74}},
+{ 586089, 3, {443,49,27}},
+{ 586152, 3, {1163,24,21}},
+{ 586170, 3, {167,65,54}},
+{ 586200, 3, {977,25,24}},
+{ 586224, 3, {118,72,69}},
+{ 586260, 3, {3257,15,12}},
+{ 586278, 3, {94,81,77}},
+{ 586320, 3, {349,42,40}},
+{ 586350, 3, {1303,25,18}},
+{ 586368, 3, {509,36,32}},
+{ 586400, 3, {733,32,25}},
+{ 586404, 3, {179,63,52}},
+{ 586500, 3, {92,85,75}},
+{ 586530, 3, {98,95,63}},
+{ 586560, 3, {94,80,78}},
+{ 586584, 3, {8147,9,8}},
+{ 586600, 3, {419,40,35}},
+{ 586620, 3, {3259,15,12}},
+{ 586644, 3, {93,83,76}},
+{ 586755, 3, {117,85,59}},
+{ 586845, 3, {105,81,69}},
+{ 586872, 3, {99,78,76}},
+{ 586880, 3, {131,70,64}},
+{ 586908, 3, {137,68,63}},
+{ 586950, 3, {91,86,75}},
+{ 586980, 3, {1087,27,20}},
+{ 586992, 3, {1747,21,16}},
+{ 587100, 3, {103,76,75}},
+{ 587125, 3, {125,77,61}},
+{ 587136, 3, {139,66,64}},
+{ 587160, 3, {233,56,45}},
+{ 587232, 3, {2039,18,16}},
+{ 587265, 3, {119,105,47}},
+{ 587280, 3, {2447,16,15}},
+{ 587340, 3, {251,52,45}},
+{ 587400, 3, {89,88,75}},
+{ 587412, 3, {98,81,74}},
+{ 587475, 3, {373,45,35}},
+{ 587510, 3, {109,77,70}},
+{ 587520, 3, {96,85,72}},
+{ 587580, 3, {1399,21,20}},
+{ 587592, 3, {8161,9,8}},
+{ 587600, 3, {113,80,65}},
+{ 587664, 3, {106,77,72}},
+{ 587730, 3, {137,66,65}},
+{ 587736, 3, {907,27,24}},
+{ 587760, 3, {93,80,79}},
+{ 587840, 3, {167,64,55}},
+{ 587979, 3, {119,81,61}},
+{ 588000, 3, {98,80,75}},
+{ 588024, 3, {8167,9,8}},
+{ 588120, 3, {104,87,65}},
+{ 588132, 3, {93,93,68}},
+{ 588150, 3, {1307,25,18}},
+{ 588192, 3, {557,33,32}},
+{ 588224, 3, {101,91,64}},
+{ 588276, 3, {419,39,36}},
+{ 588280, 3, {191,56,55}},
+{ 588312, 3, {8171,9,8}},
+{ 588384, 3, {227,54,48}},
+{ 588420, 3, {467,36,35}},
+{ 588456, 3, {743,33,24}},
+{ 588468, 3, {89,87,76}},
+{ 588480, 3, {613,32,30}},
+{ 588588, 3, {91,84,77}},
+{ 588600, 3, {109,75,72}},
+{ 588672, 3, {96,84,73}},
+{ 588708, 3, {92,81,79}},
+{ 588720, 3, {223,55,48}},
+{ 588780, 3, {3271,15,12}},
+{ 588816, 3, {94,87,72}},
+{ 588888, 3, {8179,9,8}},
+{ 588900, 3, {151,65,60}},
+{ 588984, 3, {97,88,69}},
+{ 589008, 3, {1753,21,16}},
+{ 589032, 3, {101,81,72}},
+{ 589050, 3, {90,85,77}},
+{ 589095, 3, {117,95,53}},
+{ 589140, 3, {1091,27,20}},
+{ 589160, 3, {103,88,65}},
+{ 589176, 3, {167,63,56}},
+{ 589248, 3, {93,88,72}},
+{ 589260, 3, {105,92,61}},
+{ 589275, 3, {97,81,75}},
+{ 589356, 3, {107,81,68}},
+{ 589380, 3, {95,94,66}},
+{ 589400, 3, {421,40,35}},
+{ 589500, 3, {131,75,60}},
+{ 589512, 3, {88,87,77}},
+{ 589568, 3, {98,94,64}},
+{ 589680, 3, {91,81,80}},
+{ 589752, 3, {8191,9,8}},
+{ 589800, 3, {983,25,24}},
+{ 589836, 3, {199,57,52}},
+{ 589860, 3, {113,87,60}},
+{ 589875, 3, {121,75,65}},
+{ 589950, 3, {95,90,69}},
+{ 589968, 3, {241,51,48}},
+{ 589992, 3, {104,93,61}},
+{ 590016, 3, {439,42,32}},
+{ 590058, 3, {223,54,49}},
+{ 590070, 3, {89,85,78}},
+{ 590112, 3, {683,32,27}},
+{ 590160, 3, {2459,16,15}},
+{ 590172, 3, {263,51,44}},
+{ 590184, 3, {1171,24,21}},
+{ 590205, 3, {105,77,73}},
+{ 590208, 3, {106,87,64}},
+{ 590220, 3, {1093,27,20}},
+{ 590240, 3, {112,85,62}},
+{ 590304, 3, {88,86,78}},
+{ 590328, 3, {911,27,24}},
+{ 590352, 3, {251,49,48}},
+{ 590364, 3, {93,92,69}},
+{ 590400, 3, {90,82,80}},
+{ 590436, 3, {99,84,71}},
+{ 590450, 3, {241,50,49}},
+{ 590499, 3, {103,91,63}},
+{ 590520, 3, {95,84,74}},
+{ 590580, 3, {193,60,51}},
+{ 590590, 3, {110,91,59}},
+{ 590640, 3, {107,80,69}},
+{ 590688, 3, {293,48,42}},
+{ 590700, 3, {179,60,55}},
+{ 590744, 3, {137,77,56}},
+{ 590772, 3, {541,39,28}},
+{ 590784, 3, {181,64,51}},
+{ 590920, 3, {88,85,79}},
+{ 590940, 3, {98,90,67}},
+{ 590976, 3, {96,81,76}},
+{ 591024, 3, {1759,21,16}},
+{ 591030, 3, {199,55,54}},
+{ 591048, 3, {8209,9,8}},
+{ 591084, 3, {421,39,36}},
+{ 591090, 3, {102,95,61}},
+{ 591120, 3, {821,30,24}},
+{ 591150, 3, {563,35,30}},
+{ 591192, 3, {102,84,69}},
+{ 591200, 3, {739,32,25}},
+{ 591240, 3, {379,40,39}},
+{ 591264, 3, {2053,18,16}},
+{ 591360, 3, {88,84,80}},
+{ 591396, 3, {223,52,51}},
+{ 591500, 3, {100,91,65}},
+{ 591525, 3, {239,55,45}},
+{ 591552, 3, {96,79,78}},
+{ 591600, 3, {87,85,80}},
+{ 591624, 3, {88,83,81}},
+{ 591660, 3, {173,60,57}},
+{ 591768, 3, {8219,9,8}},
+{ 591780, 3, {1409,21,20}},
+{ 591912, 3, {8221,9,8}},
+{ 591948, 3, {87,84,81}},
+{ 591975, 3, {877,27,25}},
+{ 592020, 3, {99,92,65}},
+{ 592080, 3, {2467,16,15}},
+{ 592110, 3, {86,85,81}},
+{ 592200, 3, {94,84,75}},
+{ 592263, 3, {119,79,63}},
+{ 592280, 3, {104,85,67}},
+{ 592284, 3, {641,33,28}},
+{ 592296, 3, {92,87,74}},
+{ 592320, 3, {617,32,30}},
+{ 592380, 3, {1097,27,20}},
+{ 592410, 3, {93,91,70}},
+{ 592416, 3, {99,88,68}},
+{ 592515, 3, {95,81,77}},
+{ 592560, 3, {823,30,24}},
+{ 592572, 3, {113,76,69}},
+{ 592592, 3, {91,88,74}},
+{ 592596, 3, {108,93,59}},
+{ 592620, 3, {85,84,83}},
+{ 592632, 3, {8231,9,8}},
+{ 592680, 3, {449,40,33}},
+{ 592776, 3, {8233,9,8}},
+{ 592800, 3, {95,80,78}},
+{ 592812, 3, {499,36,33}},
+{ 592848, 3, {179,69,48}},
+{ 592900, 3, {100,77,77}},
+{ 592956, 3, {181,63,52}},
+{ 592992, 3, {96,87,71}},
+{ 593040, 3, {353,42,40}},
+{ 593064, 3, {8237,9,8}},
+{ 593145, 3, {269,49,45}},
+{ 593208, 3, {107,77,72}},
+{ 593320, 3, {163,65,56}},
+{ 593400, 3, {92,86,75}},
+{ 593424, 3, {317,48,39}},
+{ 593460, 3, {157,63,60}},
+{ 593496, 3, {8243,9,8}},
+{ 593520, 3, {2473,16,15}},
+{ 593550, 3, {1319,25,18}},
+{ 593560, 3, {95,88,71}},
+{ 593568, 3, {229,54,48}},
+{ 593600, 3, {106,80,70}},
+{ 593640, 3, {97,85,72}},
+{ 593670, 3, {257,55,42}},
+{ 593712, 3, {93,84,76}},
+{ 593775, 3, {91,87,75}},
+{ 593820, 3, {3299,15,12}},
+{ 594000, 3, {90,88,75}},
+{ 594027, 3, {449,49,27}},
+{ 594048, 3, {96,91,68}},
+{ 594125, 3, {125,97,49}},
+{ 594132, 3, {643,33,28}},
+{ 594144, 3, {2063,18,16}},
+{ 594180, 3, {3301,15,12}},
+{ 594216, 3, {131,72,63}},
+{ 594240, 3, {619,32,30}},
+{ 594272, 3, {379,49,32}},
+{ 594360, 3, {127,72,65}},
+{ 594384, 3, {112,87,61}},
+{ 594396, 3, {99,79,76}},
+{ 594400, 3, {743,32,25}},
+{ 594405, 3, {111,85,63}},
+{ 594440, 3, {193,56,55}},
+{ 594450, 3, {1321,25,18}},
+{ 594456, 3, {94,93,68}},
+{ 594480, 3, {2477,16,15}},
+{ 594528, 3, {563,33,32}},
+{ 594540, 3, {367,45,36}},
+{ 594600, 3, {991,25,24}},
+{ 594624, 3, {163,64,57}},
+{ 594660, 3, {106,85,66}},
+{ 594675, 3, {881,27,25}},
+{ 594720, 3, {105,96,59}},
+{ 594792, 3, {751,33,24}},
+{ 594825, 3, {103,77,75}},
+{ 594864, 3, {102,81,72}},
+{ 594880, 3, {104,88,65}},
+{ 594909, 3, {133,71,63}},
+{ 594936, 3, {8263,9,8}},
+{ 594945, 3, {113,81,65}},
+{ 594960, 3, {111,80,67}},
+{ 594972, 3, {787,28,27}},
+{ 595056, 3, {92,84,77}},
+{ 595080, 3, {90,87,76}},
+{ 595200, 3, {93,80,80}},
+{ 595224, 3, {1181,24,21}},
+{ 595260, 3, {3307,15,12}},
+{ 595296, 3, {106,78,72}},
+{ 595350, 3, {98,81,75}},
+{ 595368, 3, {8269,9,8}},
+{ 595392, 3, {443,42,32}},
+{ 595440, 3, {827,30,24}},
+{ 595452, 3, {347,44,39}},
+{ 595476, 3, {139,68,63}},
+{ 595512, 3, {919,27,24}},
+{ 595620, 3, {1103,27,20}},
+{ 595650, 3, {95,95,66}},
+{ 595656, 3, {8273,9,8}},
+{ 595680, 3, {96,85,73}},
+{ 595728, 3, {197,56,54}},
+{ 595776, 3, {107,87,64}},
+{ 595800, 3, {331,45,40}},
+{ 595840, 3, {98,80,76}},
+{ 595848, 3, {111,88,61}},
+{ 595872, 3, {2069,18,16}},
+{ 595884, 3, {127,69,68}},
+{ 595944, 3, {93,89,72}},
+{ 595980, 3, {90,86,77}},
+{ 596025, 3, {883,27,25}},
+{ 596160, 3, {92,81,80}},
+{ 596232, 3, {91,84,78}},
+{ 596295, 3, {631,35,27}},
+{ 596310, 3, {139,66,65}},
+{ 596340, 3, {3313,15,12}},
+{ 596475, 3, {241,55,45}},
+{ 596640, 3, {113,80,66}},
+{ 596664, 3, {8287,9,8}},
+{ 596673, 3, {123,77,63}},
+{ 596700, 3, {90,85,78}},
+{ 596736, 3, {96,84,74}},
+{ 596750, 3, {125,77,62}},
+{ 596880, 3, {829,30,24}},
+{ 596925, 3, {379,45,35}},
+{ 596952, 3, {8291,9,8}},
+{ 596960, 3, {91,82,80}},
+{ 596988, 3, {103,84,69}},
+{ 597024, 3, {691,32,27}},
+{ 597051, 3, {91,81,81}},
+{ 597072, 3, {1777,21,16}},
+{ 597096, 3, {8293,9,8}},
+{ 597132, 3, {97,81,76}},
+{ 597135, 3, {121,105,47}},
+{ 597150, 3, {1327,25,18}},
+{ 597168, 3, {88,87,78}},
+{ 597300, 3, {181,60,55}},
+{ 597312, 3, {102,96,61}},
+{ 597324, 3, {547,39,28}},
+{ 597375, 3, {125,81,59}},
+{ 597384, 3, {8297,9,8}},
+{ 597420, 3, {3319,15,12}},
+{ 597432, 3, {93,88,73}},
+{ 597450, 3, {569,35,30}},
+{ 597465, 3, {99,85,71}},
+{ 597480, 3, {383,40,39}},
+{ 597516, 3, {101,87,68}},
+{ 597520, 3, {97,80,77}},
+{ 597555, 3, {271,49,45}},
+{ 597564, 3, {503,36,33}},
+{ 597600, 3, {90,83,80}},
+{ 597660, 3, {1423,21,20}},
+{ 597720, 3, {293,51,40}},
+{ 597792, 3, {479,39,32}},
+{ 597800, 3, {100,98,61}},
+{ 597816, 3, {114,76,69}},
+{ 597828, 3, {647,33,28}},
+{ 597870, 3, {91,90,73}},
+{ 597888, 3, {173,64,54}},
+{ 598080, 3, {89,84,80}},
+{ 598104, 3, {104,81,71}},
+{ 598140, 3, {3323,15,12}},
+{ 598176, 3, {96,93,67}},
+{ 598200, 3, {997,25,24}},
+{ 598248, 3, {1187,24,21}},
+{ 598290, 3, {105,77,74}},
+{ 598320, 3, {277,48,45}},
+{ 598392, 3, {8311,9,8}},
+{ 598400, 3, {88,85,80}},
+{ 598416, 3, {137,78,56}},
+{ 598455, 3, {99,93,65}},
+{ 598500, 3, {95,84,75}},
+{ 598560, 3, {87,86,80}},
+{ 598689, 3, {119,117,43}},
+{ 598725, 3, {887,27,25}},
+{ 598752, 3, {88,84,81}},
+{ 598780, 3, {94,91,70}},
+{ 598824, 3, {8317,9,8}},
+{ 598860, 3, {1109,27,20}},
+{ 598884, 3, {349,44,39}},
+{ 598920, 3, {93,92,70}},
+{ 598950, 3, {121,75,66}},
+{ 598956, 3, {111,76,71}},
+{ 598995, 3, {87,85,81}},
+{ 599025, 3, {163,75,49}},
+{ 599040, 3, {96,80,78}},
+{ 599088, 3, {1783,21,16}},
+{ 599148, 3, {99,89,68}},
+{ 599196, 3, {167,69,52}},
+{ 599200, 3, {107,80,70}},
+{ 599220, 3, {3329,15,12}},
+{ 599256, 3, {87,84,82}},
+{ 599280, 3, {227,55,48}},
+{ 599328, 3, {2081,18,16}},
+{ 599340, 3, {1427,21,20}},
+{ 599368, 3, {139,77,56}},
+{ 599412, 3, {239,57,44}},
+{ 599445, 3, {173,63,55}},
+{ 599472, 3, {181,69,48}},
+{ 599508, 3, {108,91,61}},
+{ 599544, 3, {757,33,24}},
+{ 599550, 3, {571,35,30}},
+{ 599580, 3, {3331,15,12}},
+{ 599640, 3, {263,57,40}},
+{ 599664, 3, {104,93,62}},
+{ 599688, 3, {8329,9,8}},
+{ 599760, 3, {85,84,84}},
+{ 599872, 3, {103,91,64}},
+{ 599904, 3, {2083,18,16}},
+{ 600000, 3, {100,80,75}},
+{ 600180, 3, {1429,21,20}},
+{ 600192, 3, {521,36,32}},
+{ 600210, 3, {95,81,78}},
+{ 600250, 3, {125,98,49}},
+{ 600270, 3, {107,85,66}},
+{ 600300, 3, {92,87,75}},
+{ 600372, 3, {109,81,68}},
+{ 600400, 3, {95,80,79}},
+{ 600432, 3, {1787,21,16}},
+{ 600544, 3, {383,49,32}},
+{ 600600, 3, {91,88,75}},
+{ 600642, 3, {227,54,49}},
+{ 600696, 3, {103,81,72}},
+{ 600720, 3, {2503,16,15}},
+{ 600768, 3, {149,64,63}},
+{ 600780, 3, {93,85,76}},
+{ 600800, 3, {751,32,25}},
+{ 600831, 3, {119,99,51}},
+{ 600864, 3, {569,33,32}},
+{ 600912, 3, {107,78,72}},
+{ 600990, 3, {115,78,67}},
+{ 601020, 3, {106,81,70}},
+{ 601056, 3, {2087,18,16}},
+{ 601104, 3, {1789,21,16}},
+{ 601120, 3, {104,85,68}},
+{ 601128, 3, {99,88,69}},
+{ 601152, 3, {101,93,64}},
+{ 601272, 3, {1193,24,21}},
+{ 601290, 3, {131,85,54}},
+{ 601344, 3, {96,87,72}},
+{ 601380, 3, {257,52,45}},
+{ 601392, 3, {102,88,67}},
+{ 601416, 3, {8353,9,8}},
+{ 601425, 3, {99,81,75}},
+{ 601524, 3, {93,84,77}},
+{ 601632, 3, {2089,18,16}},
+{ 601680, 3, {109,80,69}},
+{ 601692, 3, {91,87,76}},
+{ 601720, 3, {307,49,40}},
+{ 601740, 3, {3343,15,12}},
+{ 601776, 3, {199,56,54}},
+{ 601860, 3, {1433,21,20}},
+{ 601920, 3, {90,88,76}},
+{ 601965, 3, {105,91,63}},
+{ 601992, 3, {929,27,24}},
+{ 602004, 3, {227,52,51}},
+{ 602100, 3, {223,54,50}},
+{ 602112, 3, {98,96,64}},
+{ 602136, 3, {8363,9,8}},
+{ 602208, 3, {102,82,72}},
+{ 602280, 3, {239,56,45}},
+{ 602400, 3, {251,50,48}},
+{ 602448, 3, {163,66,56}},
+{ 602460, 3, {3347,15,12}},
+{ 602496, 3, {523,36,32}},
+{ 602532, 3, {797,28,27}},
+{ 602568, 3, {8369,9,8}},
+{ 602616, 3, {211,56,51}},
+{ 602640, 3, {93,81,80}},
+{ 602680, 3, {104,95,61}},
+{ 602700, 3, {98,82,75}},
+{ 602712, 3, {761,33,24}},
+{ 602800, 3, {137,80,55}},
+{ 602820, 3, {197,60,51}},
+{ 602875, 3, {125,91,53}},
+{ 602880, 3, {157,64,60}},
+{ 602910, 3, {90,87,77}},
+{ 602976, 3, {571,33,32}},
+{ 603120, 3, {359,42,40}},
+{ 603144, 3, {8377,9,8}},
+{ 603180, 3, {1117,27,20}},
+{ 603225, 3, {383,45,35}},
+{ 603240, 3, {457,40,33}},
+{ 603288, 3, {98,81,76}},
+{ 603330, 3, {91,85,78}},
+{ 603372, 3, {653,33,28}},
+{ 603400, 3, {431,40,35}},
+{ 603405, 3, {115,99,53}},
+{ 603432, 3, {102,87,68}},
+{ 603450, 3, {149,75,54}},
+{ 603456, 3, {449,42,32}},
+{ 603504, 3, {127,72,66}},
+{ 603540, 3, {479,36,35}},
+{ 603603, 3, {99,91,67}},
+{ 603612, 3, {92,81,81}},
+{ 603636, 3, {269,51,44}},
+{ 603648, 3, {131,72,64}},
+{ 603680, 3, {98,80,77}},
+{ 603840, 3, {96,85,74}},
+{ 603855, 3, {105,81,71}},
+{ 603864, 3, {8387,9,8}},
+{ 603876, 3, {91,84,79}},
+{ 603900, 3, {100,99,61}},
+{ 603936, 3, {233,54,48}},
+{ 604008, 3, {8389,9,8}},
+{ 604032, 3, {88,88,78}},
+{ 604080, 3, {839,30,24}},
+{ 604128, 3, {112,87,62}},
+{ 604200, 3, {106,76,75}},
+{ 604240, 3, {91,83,80}},
+{ 604260, 3, {373,45,36}},
+{ 604296, 3, {109,77,72}},
+{ 604350, 3, {90,85,79}},
+{ 604380, 3, {1439,21,20}},
+{ 604422, 3, {91,82,81}},
+{ 604428, 3, {241,57,44}},
+{ 604464, 3, {257,49,48}},
+{ 604485, 3, {101,95,63}},
+{ 604500, 3, {100,93,65}},
+{ 604512, 3, {2099,18,16}},
+{ 604560, 3, {229,55,48}},
+{ 604611, 3, {457,49,27}},
+{ 604620, 3, {3359,15,12}},
+{ 604692, 3, {509,36,33}},
+{ 604800, 3, {90,84,80}},
+{ 604824, 3, {88,87,79}},
+{ 604890, 3, {99,94,65}},
+{ 604980, 3, {3361,15,12}},
+{ 604989, 3, {97,81,77}},
+{ 604992, 3, {137,69,64}},
+{ 605040, 3, {2521,16,15}},
+{ 605088, 3, {191,66,48}},
+{ 605115, 3, {113,85,63}},
+{ 605124, 3, {431,39,36}},
+{ 605136, 3, {1801,21,16}},
+{ 605150, 3, {95,91,70}},
+{ 605200, 3, {89,85,80}},
+{ 605280, 3, {97,80,78}},
+{ 605304, 3, {1201,24,21}},
+{ 605340, 3, {108,95,59}},
+{ 605400, 3, {1009,25,24}},
+{ 605520, 3, {87,87,80}},
+{ 605556, 3, {89,84,81}},
+{ 605600, 3, {757,32,25}},
+{ 605616, 3, {93,88,74}},
+{ 605664, 3, {701,32,27}},
+{ 605696, 3, {104,91,64}},
+{ 605745, 3, {641,35,27}},
+{ 605748, 3, {353,44,39}},
+{ 605760, 3, {631,32,30}},
+{ 605850, 3, {577,35,30}},
+{ 605880, 3, {88,85,81}},
+{ 605920, 3, {541,35,32}},
+{ 605934, 3, {229,54,49}},
+{ 606000, 3, {101,80,75}},
+{ 606060, 3, {91,90,74}},
+{ 606168, 3, {8419,9,8}},
+{ 606200, 3, {433,40,35}},
+{ 606216, 3, {104,87,67}},
+{ 606320, 3, {106,88,65}},
+{ 606372, 3, {169,69,52}},
+{ 606375, 3, {105,77,75}},
+{ 606420, 3, {1123,27,20}},
+{ 606456, 3, {8423,9,8}},
+{ 606480, 3, {95,84,76}},
+{ 606528, 3, {96,81,78}},
+{ 606564, 3, {87,84,83}},
+{ 606600, 3, {337,45,40}},
+{ 606645, 3, {117,85,61}},
+{ 606648, 3, {157,69,56}},
+{ 606690, 3, {107,81,70}},
+{ 606760, 3, {197,56,55}},
+{ 606780, 3, {3371,15,12}},
+{ 606840, 3, {389,40,39}},
+{ 606888, 3, {8429,9,8}},
+{ 606900, 3, {85,85,84}},
+{ 606912, 3, {109,87,64}},
+{ 606960, 3, {281,48,45}},
+{ 607032, 3, {8431,9,8}},
+{ 607050, 3, {95,90,71}},
+{ 607068, 3, {99,84,73}},
+{ 607104, 3, {96,93,68}},
+{ 607140, 3, {3373,15,12}},
+{ 607152, 3, {139,78,56}},
+{ 607176, 3, {937,27,24}},
+{ 607200, 3, {92,88,75}},
+{ 607230, 3, {173,65,54}},
+{ 607257, 3, {119,81,63}},
+{ 607308, 3, {229,52,51}},
+{ 607320, 3, {241,56,45}},
+{ 607425, 3, {91,89,75}},
+{ 607440, 3, {2531,16,15}},
+{ 607464, 3, {104,99,59}},
+{ 607476, 3, {93,92,71}},
+{ 607488, 3, {113,84,64}},
+{ 607530, 3, {263,55,42}},
+{ 607600, 3, {100,98,62}},
+{ 607608, 3, {97,87,72}},
+{ 607620, 3, {95,82,78}},
+{ 607635, 3, {643,35,27}},
+{ 607680, 3, {211,60,48}},
+{ 607698, 3, {106,91,63}},
+{ 607716, 3, {331,51,36}},
+{ 607740, 3, {1447,21,20}},
+{ 607776, 3, {487,39,32}},
+{ 607800, 3, {1013,25,24}},
+{ 607848, 3, {93,86,76}},
+{ 607860, 3, {307,45,44}},
+{ 607880, 3, {167,65,56}},
+{ 607896, 3, {8443,9,8}},
+{ 607905, 3, {95,81,79}},
+{ 607932, 3, {433,39,36}},
+{ 607968, 3, {2111,18,16}},
+{ 607992, 3, {94,84,77}},
+{ 608000, 3, {95,80,80}},
+{ 608025, 3, {121,75,67}},
+{ 608076, 3, {127,76,63}},
+{ 608124, 3, {271,51,44}},
+{ 608175, 3, {135,85,53}},
+{ 608184, 3, {8447,9,8}},
+{ 608190, 3, {97,95,66}},
+{ 608244, 3, {557,39,28}},
+{ 608300, 3, {100,79,77}},
+{ 608304, 3, {92,87,76}},
+{ 608384, 3, {98,97,64}},
+{ 608496, 3, {1811,21,16}},
+{ 608520, 3, {461,40,33}},
+{ 608532, 3, {157,68,57}},
+{ 608544, 3, {2113,18,16}},
+{ 608580, 3, {98,90,69}},
+{ 608608, 3, {91,88,76}},
+{ 608790, 3, {223,65,42}},
+{ 608800, 3, {761,32,25}},
+{ 608832, 3, {151,64,63}},
+{ 608916, 3, {659,33,28}},
+{ 608940, 3, {199,60,51}},
+{ 608960, 3, {173,64,55}},
+{ 609000, 3, {100,87,70}},
+{ 609048, 3, {769,33,24}},
+{ 609070, 3, {113,77,70}},
+{ 609120, 3, {94,81,80}},
+{ 609192, 3, {8461,9,8}},
+{ 609216, 3, {167,64,57}},
+{ 609312, 3, {577,33,32}},
+{ 609336, 3, {93,84,78}},
+{ 609348, 3, {103,87,68}},
+{ 609360, 3, {2539,16,15}},
+{ 609420, 3, {1451,21,20}},
+{ 609444, 3, {99,81,76}},
+{ 609552, 3, {102,83,72}},
+{ 609560, 3, {311,49,40}},
+{ 609600, 3, {127,75,64}},
+{ 609624, 3, {8467,9,8}},
+{ 609660, 3, {1129,27,20}},
+{ 609672, 3, {191,57,56}},
+{ 609696, 3, {96,87,73}},
+{ 609700, 3, {100,91,67}},
+{ 609768, 3, {941,27,24}},
+{ 609840, 3, {90,88,77}},
+{ 609875, 3, {125,119,41}},
+{ 609900, 3, {107,76,75}},
+{ 609903, 3, {461,49,27}},
+{ 609952, 3, {389,49,32}},
+{ 609960, 3, {92,85,78}},
+{ 610020, 3, {3389,15,12}},
+{ 610050, 3, {98,83,75}},
+{ 610080, 3, {93,82,80}},
+{ 610128, 3, {223,57,48}},
+{ 610155, 3, {149,65,63}},
+{ 610200, 3, {113,75,72}},
+{ 610236, 3, {99,92,67}},
+{ 610260, 3, {1453,21,20}},
+{ 610280, 3, {95,88,73}},
+{ 610320, 3, {2543,16,15}},
+{ 610335, 3, {137,81,55}},
+{ 610344, 3, {173,63,56}},
+{ 610368, 3, {102,88,68}},
+{ 610380, 3, {3391,15,12}},
+{ 610400, 3, {109,80,70}},
+{ 610470, 3, {102,95,63}},
+{ 610610, 3, {110,91,61}},
+{ 610764, 3, {661,33,28}},
+{ 610785, 3, {277,49,45}},
+{ 610896, 3, {89,88,78}},
+{ 611040, 3, {96,95,67}},
+{ 611064, 3, {92,82,81}},
+{ 611100, 3, {97,84,75}},
+{ 611160, 3, {463,40,33}},
+{ 611200, 3, {191,64,50}},
+{ 611226, 3, {98,81,77}},
+{ 611280, 3, {283,48,45}},
+{ 611325, 3, {99,95,65}},
+{ 611352, 3, {1213,24,21}},
+{ 611400, 3, {1019,25,24}},
+{ 611415, 3, {647,35,27}},
+{ 611424, 3, {193,66,48}},
+{ 611490, 3, {109,85,66}},
+{ 611496, 3, {149,72,57}},
+{ 611520, 3, {91,84,80}},
+{ 611550, 3, {151,75,54}},
+{ 611600, 3, {139,80,55}},
+{ 611604, 3, {809,28,27}},
+{ 611667, 3, {133,73,63}},
+{ 611760, 3, {2549,16,15}},
+{ 611793, 3, {91,83,81}},
+{ 611952, 3, {114,88,61}},
+{ 612000, 3, {90,85,80}},
+{ 612040, 3, {107,88,65}},
+{ 612072, 3, {8501,9,8}},
+{ 612144, 3, {109,78,72}},
+{ 612150, 3, {106,77,75}},
+{ 612180, 3, {179,60,57}},
+{ 612216, 3, {773,33,24}},
+{ 612225, 3, {907,27,25}},
+{ 612240, 3, {2551,16,15}},
+{ 612255, 3, {119,105,49}},
+{ 612300, 3, {157,65,60}},
+{ 612360, 3, {90,84,81}},
+{ 612450, 3, {1361,25,18}},
+{ 612480, 3, {88,87,80}},
+{ 612528, 3, {1823,21,16}},
+{ 612549, 3, {463,49,27}},
+{ 612560, 3, {104,95,62}},
+{ 612576, 3, {709,32,27}},
+{ 612600, 3, {1021,25,24}},
+{ 612640, 3, {547,35,32}},
+{ 612675, 3, {389,45,35}},
+{ 612684, 3, {108,93,61}},
+{ 612765, 3, {89,85,81}},
+{ 612768, 3, {491,39,32}},
+{ 612780, 3, {1459,21,20}},
+{ 612864, 3, {96,84,76}},
+{ 612900, 3, {227,54,50}},
+{ 612920, 3, {199,56,55}},
+{ 612936, 3, {8513,9,8}},
+{ 613008, 3, {88,86,81}},
+{ 613056, 3, {103,93,64}},
+{ 613080, 3, {131,72,65}},
+{ 613116, 3, {811,28,27}},
+{ 613152, 3, {2129,18,16}},
+{ 613260, 3, {3407,15,12}},
+{ 613272, 3, {101,88,69}},
+{ 613320, 3, {269,57,40}},
+{ 613360, 3, {88,85,82}},
+{ 613368, 3, {1217,24,21}},
+{ 613428, 3, {97,93,68}},
+{ 613431, 3, {107,91,63}},
+{ 613440, 3, {96,90,71}},
+{ 613480, 3, {313,49,40}},
+{ 613512, 3, {8521,9,8}},
+{ 613575, 3, {101,81,75}},
+{ 613620, 3, {487,36,35}},
+{ 613656, 3, {947,27,24}},
+{ 613680, 3, {2557,16,15}},
+{ 613725, 3, {167,75,49}},
+{ 613728, 3, {2131,18,16}},
+{ 613760, 3, {137,70,64}},
+{ 613800, 3, {93,88,75}},
+{ 613824, 3, {139,69,64}},
+{ 613872, 3, {87,84,84}},
+{ 613944, 3, {8527,9,8}},
+{ 613980, 3, {379,45,36}},
+{ 614016, 3, {96,82,78}},
+{ 614040, 3, {86,85,84}},
+{ 614061, 3, {133,81,57}},
+{ 614100, 3, {92,89,75}},
+{ 614160, 3, {853,30,24}},
+{ 614208, 3, {457,42,32}},
+{ 614250, 3, {91,90,75}},
+{ 614295, 3, {99,85,73}},
+{ 614304, 3, {96,81,79}},
+{ 614340, 3, {3413,15,12}},
+{ 614376, 3, {106,84,69}},
+{ 614448, 3, {251,51,48}},
+{ 614460, 3, {95,84,77}},
+{ 614544, 3, {112,93,59}},
+{ 614600, 3, {439,40,35}},
+{ 614652, 3, {131,69,68}},
+{ 614656, 3, {98,98,64}},
+{ 614664, 3, {8537,9,8}},
+{ 614754, 3, {119,82,63}},
+{ 614796, 3, {563,39,28}},
+{ 614808, 3, {8539,9,8}},
+{ 614880, 3, {105,96,61}},
+{ 614916, 3, {93,87,76}},
+{ 614925, 3, {911,27,25}},
+{ 614950, 3, {251,50,49}},
+{ 614952, 3, {104,81,73}},
+{ 615030, 3, {95,83,78}},
+{ 615096, 3, {8543,9,8}},
+{ 615120, 3, {233,55,48}},
+{ 615125, 3, {133,125,37}},
+{ 615150, 3, {1367,25,18}},
+{ 615200, 3, {769,32,25}},
+{ 615216, 3, {1831,21,16}},
+{ 615264, 3, {104,87,68}},
+{ 615360, 3, {641,32,30}},
+{ 615384, 3, {99,84,74}},
+{ 615420, 3, {263,52,45}},
+{ 615456, 3, {2137,18,16}},
+{ 615780, 3, {311,45,44}},
+{ 615828, 3, {111,76,73}},
+{ 616000, 3, {100,80,77}},
+{ 616005, 3, {117,81,65}},
+{ 616032, 3, {93,92,72}},
+{ 616044, 3, {359,44,39}},
+{ 616056, 3, {193,57,56}},
+{ 616077, 3, {127,77,63}},
+{ 616140, 3, {163,63,60}},
+{ 616308, 3, {92,87,77}},
+{ 616350, 3, {587,35,30}},
+{ 616356, 3, {439,39,36}},
+{ 616392, 3, {1223,24,21}},
+{ 616440, 3, {467,40,33}},
+{ 616455, 3, {103,95,63}},
+{ 616500, 3, {137,75,60}},
+{ 616518, 3, {233,54,49}},
+{ 616536, 3, {8563,9,8}},
+{ 616560, 3, {367,42,40}},
+{ 616590, 3, {93,85,78}},
+{ 616608, 3, {2141,18,16}},
+{ 616616, 3, {91,88,77}},
+{ 616770, 3, {90,89,77}},
+{ 616800, 3, {257,50,48}},
+{ 616860, 3, {149,69,60}},
+{ 616896, 3, {102,84,72}},
+{ 616968, 3, {99,82,76}},
+{ 617040, 3, {857,30,24}},
+{ 617085, 3, {653,35,27}},
+{ 617100, 3, {110,85,66}},
+{ 617148, 3, {93,84,79}},
+{ 617175, 3, {211,65,45}},
+{ 617184, 3, {2143,18,16}},
+{ 617220, 3, {127,81,60}},
+{ 617232, 3, {167,66,56}},
+{ 617256, 3, {8573,9,8}},
+{ 617280, 3, {643,32,30}},
+{ 617344, 3, {106,91,64}},
+{ 617400, 3, {98,84,75}},
+{ 617463, 3, {99,81,77}},
+{ 617520, 3, {93,83,80}},
+{ 617544, 3, {953,27,24}},
+{ 617600, 3, {193,64,50}},
+{ 617625, 3, {125,81,61}},
+{ 617700, 3, {100,87,71}},
+{ 617760, 3, {90,88,78}},
+{ 617820, 3, {1471,21,20}},
+{ 617832, 3, {8581,9,8}},
+{ 617841, 3, {467,49,27}},
+{ 617850, 3, {1373,25,18}},
+{ 617880, 3, {271,57,40}},
+{ 617890, 3, {97,91,70}},
+{ 617916, 3, {233,52,51}},
+{ 617925, 3, {107,77,75}},
+{ 617940, 3, {3433,15,12}},
+{ 618000, 3, {103,80,75}},
+{ 618030, 3, {109,81,70}},
+{ 618048, 3, {96,87,74}},
+{ 618120, 3, {101,85,72}},
+{ 618156, 3, {223,63,44}},
+{ 618192, 3, {106,81,72}},
+{ 618240, 3, {92,84,80}},
+{ 618300, 3, {229,54,50}},
+{ 618345, 3, {151,65,63}},
+{ 618400, 3, {773,32,25}},
+{ 618480, 3, {859,30,24}},
+{ 618516, 3, {92,83,81}},
+{ 618552, 3, {99,88,71}},
+{ 618576, 3, {263,49,48}},
+{ 618600, 3, {1031,25,24}},
+{ 618624, 3, {179,64,54}},
+{ 618625, 3, {125,101,49}},
+{ 618640, 3, {95,88,74}},
+{ 618660, 3, {491,36,35}},
+{ 618732, 3, {337,51,36}},
+{ 618792, 3, {118,76,69}},
+{ 618800, 3, {91,85,80}},
+{ 618912, 3, {307,48,42}},
+{ 618930, 3, {115,78,69}},
+{ 618948, 3, {521,36,33}},
+{ 618960, 3, {2579,16,15}},
+{ 618984, 3, {8597,9,8}},
+{ 619008, 3, {104,93,64}},
+{ 619020, 3, {181,60,57}},
+{ 619080, 3, {105,88,67}},
+{ 619128, 3, {8599,9,8}},
+{ 619164, 3, {91,84,81}},
+{ 619200, 3, {90,86,80}},
+{ 619245, 3, {139,81,55}},
+{ 619320, 3, {397,40,39}},
+{ 619344, 3, {99,92,68}},
+{ 619360, 3, {98,80,79}},
+{ 619416, 3, {1229,24,21}},
+{ 619440, 3, {89,87,80}},
+{ 619488, 3, {239,54,48}},
+{ 619500, 3, {105,100,59}},
+{ 619584, 3, {461,42,32}},
+{ 619605, 3, {281,49,45}},
+{ 619632, 3, {331,48,39}},
+{ 619650, 3, {90,85,81}},
+{ 619704, 3, {151,72,57}},
+{ 619710, 3, {227,65,42}},
+{ 619740, 3, {313,45,44}},
+{ 619752, 3, {98,93,68}},
+{ 619800, 3, {1033,25,24}},
+{ 619840, 3, {149,65,64}},
+{ 619848, 3, {8609,9,8}},
+{ 619850, 3, {115,77,70}},
+{ 619872, 3, {587,33,32}},
+{ 620064, 3, {2153,18,16}},
+{ 620125, 3, {125,121,41}},
+{ 620136, 3, {88,87,81}},
+{ 620160, 3, {96,85,76}},
+{ 620172, 3, {107,84,69}},
+{ 620200, 3, {443,40,35}},
+{ 620235, 3, {179,63,55}},
+{ 620256, 3, {96,91,71}},
+{ 620325, 3, {919,27,25}},
+{ 620340, 3, {211,60,49}},
+{ 620400, 3, {94,88,75}},
+{ 620424, 3, {1231,24,21}},
+{ 620460, 3, {383,45,36}},
+{ 620592, 3, {1847,21,16}},
+{ 620620, 3, {110,91,62}},
+{ 620676, 3, {821,28,27}},
+{ 620724, 3, {173,69,52}},
+{ 620730, 3, {99,95,66}},
+{ 620820, 3, {3449,15,12}},
+{ 620840, 3, {88,85,83}},
+{ 620856, 3, {8623,9,8}},
+{ 620865, 3, {105,81,73}},
+{ 621000, 3, {92,90,75}},
+{ 621072, 3, {227,57,48}},
+{ 621075, 3, {91,91,75}},
+{ 621120, 3, {647,32,30}},
+{ 621144, 3, {8627,9,8}},
+{ 621180, 3, {87,85,84}},
+{ 621216, 3, {719,32,27}},
+{ 621225, 3, {251,55,45}},
+{ 621270, 3, {118,81,65}},
+{ 621288, 3, {8629,9,8}},
+{ 621300, 3, {109,76,75}},
+{ 621320, 3, {317,49,40}},
+{ 621324, 3, {523,36,33}},
+{ 621348, 3, {569,39,28}},
+{ 621360, 3, {863,30,24}},
+{ 621390, 3, {269,55,42}},
+{ 621432, 3, {137,72,63}},
+{ 621450, 3, {1381,25,18}},
+{ 621504, 3, {96,83,78}},
+{ 621528, 3, {94,87,76}},
+{ 621540, 3, {1151,27,20}},
+{ 621588, 3, {277,51,44}},
+{ 621621, 3, {99,91,69}},
+{ 621756, 3, {101,81,76}},
+{ 621840, 3, {2591,16,15}},
+{ 621852, 3, {673,33,28}},
+{ 621972, 3, {443,39,36}},
+{ 621984, 3, {93,88,76}},
+{ 622020, 3, {1481,21,20}},
+{ 622080, 3, {96,81,80}},
+{ 622152, 3, {8641,9,8}},
+{ 622160, 3, {101,80,77}},
+{ 622188, 3, {823,28,27}},
+{ 622251, 3, {119,83,63}},
+{ 622260, 3, {3457,15,12}},
+{ 622272, 3, {463,42,32}},
+{ 622320, 3, {2593,16,15}},
+{ 622368, 3, {2161,18,16}},
+{ 622404, 3, {113,81,68}},
+{ 622440, 3, {91,90,76}},
+{ 622496, 3, {397,49,32}},
+{ 622512, 3, {131,72,66}},
+{ 622545, 3, {105,77,77}},
+{ 622584, 3, {8647,9,8}},
+{ 622620, 3, {1153,27,20}},
+{ 622650, 3, {593,35,30}},
+{ 622710, 3, {99,85,74}},
+{ 622720, 3, {139,70,64}},
+{ 622728, 3, {93,93,72}},
+{ 622752, 3, {499,39,32}},
+{ 622755, 3, {659,35,27}},
+{ 622860, 3, {1483,21,20}},
+{ 622932, 3, {111,92,61}},
+{ 622980, 3, {3461,15,12}},
+{ 623040, 3, {110,96,59}},
+{ 623100, 3, {100,93,67}},
+{ 623168, 3, {107,91,64}},
+{ 623200, 3, {95,82,80}},
+{ 623220, 3, {94,85,78}},
+{ 623232, 3, {541,36,32}},
+{ 623295, 3, {95,81,81}},
+{ 623304, 3, {787,33,24}},
+{ 623340, 3, {3463,15,12}},
+{ 623376, 3, {104,81,74}},
+{ 623400, 3, {1039,25,24}},
+{ 623424, 3, {191,64,51}},
+{ 623448, 3, {1237,24,21}},
+{ 623480, 3, {109,88,65}},
+{ 623532, 3, {571,39,28}},
+{ 623616, 3, {112,87,64}},
+{ 623700, 3, {90,90,77}},
+{ 623736, 3, {8663,9,8}},
+{ 623760, 3, {113,80,69}},
+{ 623840, 3, {557,35,32}},
+{ 624000, 3, {100,80,78}},
+{ 624015, 3, {283,49,45}},
+{ 624024, 3, {107,81,72}},
+{ 624036, 3, {119,76,69}},
+{ 624060, 3, {3467,15,12}},
+{ 624096, 3, {197,66,48}},
+{ 624105, 3, {115,81,67}},
+{ 624150, 3, {95,90,73}},
+{ 624168, 3, {8669,9,8}},
+{ 624195, 3, {99,97,65}},
+{ 624240, 3, {102,85,72}},
+{ 624260, 3, {98,91,70}},
+{ 624264, 3, {111,76,74}},
+{ 624312, 3, {92,87,78}},
+{ 624393, 3, {119,99,53}},
+{ 624420, 3, {3469,15,12}},
+{ 624456, 3, {108,98,59}},
+{ 624492, 3, {99,83,76}},
+{ 624540, 3, {1487,21,20}},
+{ 624588, 3, {93,92,73}},
+{ 624600, 3, {347,45,40}},
+{ 624624, 3, {91,88,78}},
+{ 624645, 3, {661,35,27}},
+{ 624672, 3, {241,54,48}},
+{ 624708, 3, {111,84,67}},
+{ 624744, 3, {8677,9,8}},
+{ 624750, 3, {98,85,75}},
+{ 624897, 3, {109,91,63}},
+{ 624960, 3, {93,84,80}},
+{ 625032, 3, {8681,9,8}},
+{ 625140, 3, {151,69,60}},
+{ 625170, 3, {229,65,42}},
+{ 625212, 3, {827,28,27}},
+{ 625240, 3, {116,77,70}},
+{ 625275, 3, {397,45,35}},
+{ 625296, 3, {1861,21,16}},
+{ 625380, 3, {1489,21,20}},
+{ 625404, 3, {211,57,52}},
+{ 625416, 3, {103,88,69}},
+{ 625500, 3, {139,75,60}},
+{ 625536, 3, {181,64,54}},
+{ 625548, 3, {677,33,28}},
+{ 625560, 3, {401,40,39}},
+{ 625600, 3, {92,85,80}},
+{ 625608, 3, {8689,9,8}},
+{ 625625, 3, {125,77,65}},
+{ 625680, 3, {90,88,79}},
+{ 625716, 3, {191,63,52}},
+{ 625725, 3, {103,81,75}},
+{ 625779, 3, {129,77,63}},
+{ 625800, 3, {149,70,60}},
+{ 625856, 3, {127,77,64}},
+{ 625860, 3, {108,95,61}},
+{ 625872, 3, {104,102,59}},
+{ 625896, 3, {8693,9,8}},
+{ 625920, 3, {163,64,60}},
+{ 625968, 3, {92,84,81}},
+{ 626010, 3, {271,55,42}},
+{ 626076, 3, {99,93,68}},
+{ 626080, 3, {91,86,80}},
+{ 626160, 3, {2609,16,15}},
+{ 626175, 3, {121,75,69}},
+{ 626208, 3, {593,33,32}},
+{ 626220, 3, {98,90,71}},
+{ 626280, 3, {307,51,40}},
+{ 626328, 3, {8699,9,8}},
+{ 626400, 3, {90,87,80}},
+{ 626472, 3, {113,77,72}},
+{ 626535, 3, {91,85,81}},
+{ 626544, 3, {229,57,48}},
+{ 626616, 3, {967,27,24}},
+{ 626640, 3, {373,42,40}},
+{ 626670, 3, {211,55,54}},
+{ 626724, 3, {829,28,27}},
+{ 626808, 3, {91,84,82}},
+{ 626880, 3, {653,32,30}},
+{ 626904, 3, {8707,9,8}},
+{ 626976, 3, {311,48,42}},
+{ 627000, 3, {95,88,75}},
+{ 627060, 3, {1493,21,20}},
+{ 627075, 3, {929,27,25}},
+{ 627096, 3, {106,87,68}},
+{ 627102, 3, {98,81,79}},
+{ 627120, 3, {104,90,67}},
+{ 627165, 3, {181,63,55}},
+{ 627200, 3, {98,80,80}},
+{ 627228, 3, {131,76,63}},
+{ 627264, 3, {88,88,81}},
+{ 627300, 3, {90,85,82}},
+{ 627312, 3, {1867,21,16}},
+{ 627336, 3, {8713,9,8}},
+{ 627396, 3, {97,84,77}},
+{ 627552, 3, {2179,18,16}},
+{ 627640, 3, {104,85,71}},
+{ 627648, 3, {467,42,32}},
+{ 627660, 3, {317,45,44}},
+{ 627744, 3, {503,39,32}},
+{ 627768, 3, {8719,9,8}},
+{ 627792, 3, {88,87,82}},
+{ 627900, 3, {92,91,75}},
+{ 627912, 3, {102,81,76}},
+{ 628020, 3, {1163,27,20}},
+{ 628056, 3, {104,99,61}},
+{ 628080, 3, {2617,16,15}},
+{ 628128, 3, {727,32,27}},
+{ 628140, 3, {95,87,76}},
+{ 628155, 3, {141,81,55}},
+{ 628160, 3, {151,65,64}},
+{ 628200, 3, {349,45,40}},
+{ 628290, 3, {179,65,54}},
+{ 628320, 3, {88,85,84}},
+{ 628380, 3, {3491,15,12}},
+{ 628425, 3, {105,95,63}},
+{ 628452, 3, {99,92,69}},
+{ 628488, 3, {87,86,84}},
+{ 628560, 3, {97,81,80}},
+{ 628600, 3, {449,40,35}},
+{ 628632, 3, {8731,9,8}},
+{ 628656, 3, {1871,21,16}},
+{ 628680, 3, {104,93,65}},
+{ 628740, 3, {499,36,35}},
+{ 628768, 3, {401,49,32}},
+{ 628800, 3, {131,75,64}},
+{ 628824, 3, {197,57,56}},
+{ 628830, 3, {137,85,54}},
+{ 628950, 3, {599,35,30}},
+{ 628992, 3, {96,84,78}},
+{ 629040, 3, {2621,16,15}},
+{ 629052, 3, {93,89,76}},
+{ 629064, 3, {8737,9,8}},
+{ 629100, 3, {233,54,50}},
+{ 629136, 3, {257,51,48}},
+{ 629184, 3, {113,87,64}},
+{ 629200, 3, {110,88,65}},
+{ 629208, 3, {971,27,24}},
+{ 629244, 3, {227,63,44}},
+{ 629328, 3, {1873,21,16}},
+{ 629352, 3, {8741,9,8}},
+{ 629370, 3, {105,81,74}},
+{ 629376, 3, {149,66,64}},
+{ 629400, 3, {1049,25,24}},
+{ 629424, 3, {94,93,72}},
+{ 629460, 3, {269,52,45}},
+{ 629475, 3, {109,77,75}},
+{ 629496, 3, {1249,24,21}},
+{ 629508, 3, {251,57,44}},
+{ 629532, 3, {108,87,67}},
+{ 629550, 3, {1399,25,18}},
+{ 629580, 3, {1499,21,20}},
+{ 629600, 3, {787,32,25}},
+{ 629650, 3, {257,50,49}},
+{ 629720, 3, {173,65,56}},
+{ 629772, 3, {367,44,39}},
+{ 629784, 3, {8747,9,8}},
+{ 629820, 3, {3499,15,12}},
+{ 629832, 3, {163,69,56}},
+{ 629850, 3, {95,85,78}},
+{ 629856, 3, {96,81,81}},
+{ 629937, 3, {101,81,77}},
+{ 629952, 3, {193,64,51}},
+{ 630000, 3, {100,84,75}},
+{ 630080, 3, {179,64,55}},
+{ 630084, 3, {577,39,28}},
+{ 630135, 3, {99,95,67}},
+{ 630144, 3, {547,36,32}},
+{ 630168, 3, {93,88,77}},
+{ 630180, 3, {389,45,36}},
+{ 630216, 3, {8753,9,8}},
+{ 630240, 3, {101,80,78}},
+{ 630300, 3, {191,60,55}},
+{ 630336, 3, {98,96,67}},
+{ 630360, 3, {103,85,72}},
+{ 630396, 3, {449,39,36}},
+{ 630400, 3, {197,64,50}},
+{ 630420, 3, {95,84,79}},
+{ 630432, 3, {199,66,48}},
+{ 630480, 3, {111,80,71}},
+{ 630504, 3, {139,72,63}},
+{ 630560, 3, {563,35,32}},
+{ 630564, 3, {281,51,44}},
+{ 630600, 3, {1051,25,24}},
+{ 630630, 3, {91,90,77}},
+{ 630672, 3, {1877,21,16}},
+{ 630720, 3, {96,90,73}},
+{ 630792, 3, {8761,9,8}},
+{ 630800, 3, {95,83,80}},
+{ 630828, 3, {108,99,59}},
+{ 630864, 3, {337,48,39}},
+{ 630875, 3, {125,103,49}},
+{ 630912, 3, {106,93,64}},
+{ 630936, 3, {127,72,69}},
+{ 630960, 3, {239,55,48}},
+{ 630990, 3, {95,82,81}},
+{ 631008, 3, {313,48,42}},
+{ 631050, 3, {601,35,30}},
+{ 631071, 3, {147,81,53}},
+{ 631092, 3, {683,33,28}},
+{ 631104, 3, {173,64,57}},
+{ 631125, 3, {99,85,75}},
+{ 631200, 3, {263,50,48}},
+{ 631224, 3, {797,33,24}},
+{ 631260, 3, {167,63,60}},
+{ 631296, 3, {137,72,64}},
+{ 631344, 3, {1879,21,16}},
+{ 631400, 3, {100,82,77}},
+{ 631440, 3, {877,30,24}},
+{ 631488, 3, {92,88,78}},
+{ 631512, 3, {179,63,56}},
+{ 631560, 3, {277,57,40}},
+{ 631575, 3, {401,45,35}},
+{ 631584, 3, {102,86,72}},
+{ 631680, 3, {94,84,80}},
+{ 631764, 3, {109,84,69}},
+{ 631788, 3, {163,68,57}},
+{ 631920, 3, {2633,16,15}},
+{ 631980, 3, {3511,15,12}},
+{ 632016, 3, {99,84,76}},
+{ 632088, 3, {8779,9,8}},
+{ 632100, 3, {98,86,75}},
+{ 632268, 3, {193,63,52}},
+{ 632280, 3, {479,40,33}},
+{ 632316, 3, {92,87,79}},
+{ 632340, 3, {1171,27,20}},
+{ 632376, 3, {8783,9,8}},
+{ 632385, 3, {117,115,47}},
+{ 632394, 3, {239,54,49}},
+{ 632400, 3, {93,85,80}},
+{ 632448, 3, {108,96,61}},
+{ 632475, 3, {937,27,25}},
+{ 632520, 3, {251,56,45}},
+{ 632544, 3, {599,33,32}},
+{ 632592, 3, {191,69,48}},
+{ 632632, 3, {91,88,79}},
+{ 632640, 3, {659,32,30}},
+{ 632664, 3, {101,87,72}},
+{ 632688, 3, {269,49,48}},
+{ 632700, 3, {95,90,74}},
+{ 632772, 3, {93,84,81}},
+{ 632775, 3, {143,75,59}},
+{ 632800, 3, {113,80,70}},
+{ 632808, 3, {99,94,68}},
+{ 632880, 3, {293,48,45}},
+{ 633012, 3, {107,87,68}},
+{ 633024, 3, {157,64,63}},
+{ 633060, 3, {3517,15,12}},
+{ 633096, 3, {977,27,24}},
+{ 633144, 3, {93,92,74}},
+{ 633150, 3, {105,90,67}},
+{ 633270, 3, {101,95,66}},
+{ 633312, 3, {733,32,27}},
+{ 633325, 3, {175,77,47}},
+{ 633360, 3, {91,87,80}},
+{ 633420, 3, {92,85,81}},
+{ 633472, 3, {101,98,64}},
+{ 633555, 3, {117,95,57}},
+{ 633600, 3, {90,88,80}},
+{ 633717, 3, {479,49,27}},
+{ 633750, 3, {125,78,65}},
+{ 633780, 3, {503,36,35}},
+{ 633816, 3, {8803,9,8}},
+{ 633828, 3, {239,52,51}},
+{ 633864, 3, {98,84,77}},
+{ 633888, 3, {96,93,71}},
+{ 633906, 3, {91,86,81}},
+{ 633930, 3, {113,85,66}},
+{ 633984, 3, {127,78,64}},
+{ 634050, 3, {1409,25,18}},
+{ 634068, 3, {103,81,76}},
+{ 634104, 3, {8807,9,8}},
+{ 634140, 3, {271,52,45}},
+{ 634200, 3, {151,70,60}},
+{ 634284, 3, {839,28,27}},
+{ 634320, 3, {881,30,24}},
+{ 634392, 3, {89,88,81}},
+{ 634410, 3, {106,95,63}},
+{ 634440, 3, {311,51,40}},
+{ 634452, 3, {91,84,83}},
+{ 634464, 3, {2203,18,16}},
+{ 634480, 3, {103,80,77}},
+{ 634524, 3, {121,76,69}},
+{ 634536, 3, {1259,24,21}},
+{ 634560, 3, {661,32,30}},
+{ 634608, 3, {113,78,72}},
+{ 634620, 3, {1511,21,20}},
+{ 634656, 3, {601,33,32}},
+{ 634704, 3, {1889,21,16}},
+{ 634725, 3, {93,91,75}},
+{ 634752, 3, {96,87,76}},
+{ 634788, 3, {229,63,44}},
+{ 634800, 3, {92,92,75}},
+{ 634816, 3, {109,91,64}},
+{ 634860, 3, {3527,15,12}},
+{ 634950, 3, {90,85,83}},
+{ 634968, 3, {8819,9,8}},
+{ 635052, 3, {283,51,44}},
+{ 635100, 3, {100,87,73}},
+{ 635112, 3, {8821,9,8}},
+{ 635175, 3, {941,27,25}},
+{ 635208, 3, {199,57,56}},
+{ 635220, 3, {3529,15,12}},
+{ 635232, 3, {509,39,32}},
+{ 635250, 3, {110,77,75}},
+{ 635280, 3, {2647,16,15}},
+{ 635310, 3, {181,65,54}},
+{ 635360, 3, {95,88,76}},
+{ 635376, 3, {112,93,61}},
+{ 635400, 3, {353,45,40}},
+{ 635448, 3, {88,87,83}},
+{ 635460, 3, {89,85,84}},
+{ 635481, 3, {131,77,63}},
+{ 635607, 3, {133,81,59}},
+{ 635616, 3, {2207,18,16}},
+{ 635688, 3, {109,81,72}},
+{ 635700, 3, {163,65,60}},
+{ 635760, 3, {883,30,24}},
+{ 635775, 3, {173,75,49}},
+{ 635796, 3, {87,87,84}},
+{ 635800, 3, {88,85,85}},
+{ 635832, 3, {8831,9,8}},
+{ 635850, 3, {157,75,54}},
+{ 635940, 3, {3533,15,12}},
+{ 635976, 3, {99,88,73}},
+{ 635985, 3, {673,35,27}},
+{ 636000, 3, {106,80,75}},
+{ 636020, 3, {118,77,70}},
+{ 636075, 3, {257,55,45}},
+{ 636090, 3, {233,65,42}},
+{ 636120, 3, {93,90,76}},
+{ 636174, 3, {102,81,77}},
+{ 636240, 3, {241,55,48}},
+{ 636264, 3, {8837,9,8}},
+{ 636300, 3, {101,84,75}},
+{ 636363, 3, {111,91,63}},
+{ 636408, 3, {8839,9,8}},
+{ 636480, 3, {96,85,78}},
+{ 636600, 3, {1061,25,24}},
+{ 636660, 3, {131,81,60}},
+{ 636720, 3, {379,42,40}},
+{ 636768, 3, {99,96,67}},
+{ 636800, 3, {199,64,50}},
+{ 636864, 3, {107,93,64}},
+{ 636870, 3, {115,78,71}},
+{ 636888, 3, {223,56,51}},
+{ 636900, 3, {193,60,55}},
+{ 636984, 3, {983,27,24}},
+{ 637000, 3, {100,91,70}},
+{ 637020, 3, {3539,15,12}},
+{ 637056, 3, {96,84,79}},
+{ 637065, 3, {99,99,65}},
+{ 637092, 3, {347,51,36}},
+{ 637120, 3, {181,64,55}},
+{ 637128, 3, {8849,9,8}},
+{ 637200, 3, {118,75,72}},
+{ 637245, 3, {119,85,63}},
+{ 637260, 3, {95,86,78}},
+{ 637280, 3, {569,35,32}},
+{ 637296, 3, {102,88,71}},
+{ 637344, 3, {2213,18,16}},
+{ 637350, 3, {607,35,30}},
+{ 637380, 3, {3541,15,12}},
+{ 637392, 3, {271,49,48}},
+{ 637488, 3, {233,57,48}},
+{ 637560, 3, {92,90,77}},
+{ 637600, 3, {797,32,25}},
+{ 637632, 3, {96,82,81}},
+{ 637680, 3, {2657,16,15}},
+{ 637686, 3, {241,54,49}},
+{ 637728, 3, {96,91,73}},
+{ 637740, 3, {1181,27,20}},
+{ 637800, 3, {1063,25,24}},
+{ 637824, 3, {151,66,64}},
+{ 637840, 3, {112,85,67}},
+{ 637875, 3, {105,81,75}},
+{ 637992, 3, {8861,9,8}},
+{ 638010, 3, {139,85,54}},
+{ 638040, 3, {409,40,39}},
+{ 638064, 3, {211,56,54}},
+{ 638136, 3, {8863,9,8}},
+{ 638160, 3, {2659,16,15}},
+{ 638316, 3, {149,68,63}},
+{ 638352, 3, {93,88,78}},
+{ 638400, 3, {95,84,80}},
+{ 638424, 3, {8867,9,8}},
+{ 638460, 3, {3547,15,12}},
+{ 638484, 3, {691,33,28}},
+{ 638496, 3, {739,32,27}},
+{ 638520, 3, {313,51,40}},
+{ 638568, 3, {181,63,56}},
+{ 638640, 3, {887,30,24}},
+{ 638685, 3, {95,83,81}},
+{ 638715, 3, {105,79,77}},
+{ 638724, 3, {101,93,68}},
+{ 638736, 3, {1901,21,16}},
+{ 638820, 3, {91,90,78}},
+{ 638928, 3, {102,87,72}},
+{ 639072, 3, {317,48,42}},
+{ 639100, 3, {100,83,77}},
+{ 639120, 3, {2663,16,15}},
+{ 639132, 3, {241,52,51}},
+{ 639200, 3, {94,85,80}},
+{ 639210, 3, {149,66,65}},
+{ 639216, 3, {193,69,48}},
+{ 639225, 3, {947,27,25}},
+{ 639360, 3, {96,90,74}},
+{ 639408, 3, {173,66,56}},
+{ 639450, 3, {98,87,75}},
+{ 639520, 3, {571,35,32}},
+{ 639540, 3, {99,85,76}},
+{ 639576, 3, {94,84,81}},
+{ 639625, 3, {125,119,43}},
+{ 639639, 3, {99,91,71}},
+{ 639648, 3, {2221,18,16}},
+{ 639660, 3, {1523,21,20}},
+{ 639744, 3, {98,96,68}},
+{ 639765, 3, {677,35,27}},
+{ 639768, 3, {122,76,69}},
+{ 639800, 3, {457,40,35}},
+{ 639840, 3, {93,86,80}},
+{ 639864, 3, {8887,9,8}},
+{ 639870, 3, {277,55,42}},
+{ 640068, 3, {373,44,39}},
+{ 640080, 3, {127,72,70}},
+{ 640185, 3, {105,91,67}},
+{ 640200, 3, {97,88,75}},
+{ 640224, 3, {104,81,76}},
+{ 640260, 3, {3557,15,12}},
+{ 640296, 3, {8893,9,8}},
+{ 640305, 3, {93,85,81}},
+{ 640320, 3, {92,87,80}},
+{ 640332, 3, {99,84,77}},
+{ 640350, 3, {1423,25,18}},
+{ 640395, 3, {107,95,63}},
+{ 640500, 3, {105,100,61}},
+{ 640512, 3, {139,72,64}},
+{ 640584, 3, {93,84,82}},
+{ 640620, 3, {3559,15,12}},
+{ 640640, 3, {91,88,80}},
+{ 640680, 3, {281,57,40}},
+{ 640710, 3, {113,81,70}},
+{ 640728, 3, {809,33,24}},
+{ 640752, 3, {1907,21,16}},
+{ 640764, 3, {349,51,36}},
+{ 640800, 3, {90,89,80}},
+{ 640872, 3, {92,86,81}},
+{ 640980, 3, {1187,27,20}},
+{ 640992, 3, {607,33,32}},
+{ 641004, 3, {587,39,28}},
+{ 641025, 3, {111,77,75}},
+{ 641040, 3, {2671,16,15}},
+{ 641136, 3, {111,76,76}},
+{ 641160, 3, {137,72,65}},
+{ 641250, 3, {95,90,75}},
+{ 641277, 3, {91,87,81}},
+{ 641280, 3, {167,64,60}},
+{ 641312, 3, {409,49,32}},
+{ 641340, 3, {509,36,35}},
+{ 641364, 3, {97,87,76}},
+{ 641400, 3, {1069,25,24}},
+{ 641520, 3, {90,88,81}},
+{ 641550, 3, {94,91,75}},
+{ 641628, 3, {457,39,36}},
+{ 641664, 3, {557,36,32}},
+{ 641700, 3, {93,92,75}},
+{ 641952, 3, {743,32,27}},
+{ 642000, 3, {107,80,75}},
+{ 642096, 3, {91,84,84}},
+{ 642150, 3, {1427,25,18}},
+{ 642168, 3, {991,27,24}},
+{ 642200, 3, {104,95,65}},
+{ 642240, 3, {223,60,48}},
+{ 642252, 3, {179,69,52}},
+{ 642312, 3, {811,33,24}},
+{ 642408, 3, {104,87,71}},
+{ 642411, 3, {103,81,77}},
+{ 642456, 3, {8923,9,8}},
+{ 642480, 3, {2677,16,15}},
+{ 642488, 3, {149,77,56}},
+{ 642600, 3, {90,85,84}},
+{ 642708, 3, {541,36,33}},
+{ 642720, 3, {103,80,78}},
+{ 642735, 3, {115,81,69}},
+{ 642768, 3, {1913,21,16}},
+{ 642780, 3, {3571,15,12}},
+{ 642804, 3, {137,69,68}},
+{ 642816, 3, {96,93,72}},
+{ 642840, 3, {487,40,33}},
+{ 642880, 3, {98,82,80}},
+{ 642888, 3, {8929,9,8}},
+{ 642915, 3, {157,65,63}},
+{ 642978, 3, {98,81,81}},
+{ 643008, 3, {197,64,51}},
+{ 643020, 3, {1531,21,20}},
+{ 643050, 3, {1429,25,18}},
+{ 643104, 3, {88,87,84}},
+{ 643110, 3, {97,85,78}},
+{ 643125, 3, {125,105,49}},
+{ 643140, 3, {397,45,36}},
+{ 643176, 3, {8933,9,8}},
+{ 643188, 3, {93,91,76}},
+{ 643200, 3, {100,96,67}},
+{ 643275, 3, {953,27,25}},
+{ 643280, 3, {88,86,85}},
+{ 643356, 3, {111,84,69}},
+{ 643370, 3, {101,91,70}},
+{ 643440, 3, {383,42,40}},
+{ 643608, 3, {1277,24,21}},
+{ 643632, 3, {106,88,69}},
+{ 643650, 3, {613,35,30}},
+{ 643720, 3, {95,88,77}},
+{ 643752, 3, {8941,9,8}},
+{ 643776, 3, {479,42,32}},
+{ 643800, 3, {100,87,74}},
+{ 643824, 3, {263,51,48}},
+{ 643860, 3, {98,90,73}},
+{ 643920, 3, {2683,16,15}},
+{ 643950, 3, {106,81,75}},
+{ 643968, 3, {96,86,78}},
+{ 644100, 3, {113,76,75}},
+{ 644160, 3, {110,96,61}},
+{ 644175, 3, {409,45,35}},
+{ 644220, 3, {1193,27,20}},
+{ 644256, 3, {2237,18,16}},
+{ 644280, 3, {105,104,59}},
+{ 644301, 3, {487,49,27}},
+{ 644325, 3, {121,75,71}},
+{ 644328, 3, {157,72,57}},
+{ 644350, 3, {263,50,49}},
+{ 644472, 3, {8951,9,8}},
+{ 644490, 3, {93,90,77}},
+{ 644556, 3, {257,57,44}},
+{ 644580, 3, {3581,15,12}},
+{ 644616, 3, {1279,24,21}},
+{ 644640, 3, {96,85,79}},
+{ 644670, 3, {95,87,78}},
+{ 644688, 3, {99,88,74}},
+{ 644742, 3, {119,86,63}},
+{ 644832, 3, {2239,18,16}},
+{ 644844, 3, {109,87,68}},
+{ 644850, 3, {1433,25,18}},
+{ 644868, 3, {853,28,27}},
+{ 644875, 3, {125,77,67}},
+{ 644880, 3, {2687,16,15}},
+{ 644940, 3, {3583,15,12}},
+{ 645048, 3, {102,93,68}},
+{ 645120, 3, {96,84,80}},
+{ 645183, 3, {133,77,63}},
+{ 645192, 3, {103,87,72}},
+{ 645216, 3, {94,88,78}},
+{ 645240, 3, {283,57,40}},
+{ 645288, 3, {167,69,56}},
+{ 645300, 3, {239,54,50}},
+{ 645320, 3, {104,85,73}},
+{ 645336, 3, {8963,9,8}},
+{ 645360, 3, {2689,16,15}},
+{ 645372, 3, {197,63,52}},
+{ 645400, 3, {461,40,35}},
+{ 645408, 3, {96,83,81}},
+{ 645435, 3, {683,35,27}},
+{ 645568, 3, {131,77,64}},
+{ 645600, 3, {269,50,48}},
+{ 645624, 3, {108,98,61}},
+{ 645660, 3, {211,60,51}},
+{ 645768, 3, {8969,9,8}},
+{ 645792, 3, {112,93,62}},
+{ 645810, 3, {103,95,66}},
+{ 645813, 3, {119,81,67}},
+{ 645876, 3, {233,63,44}},
+{ 645888, 3, {116,87,64}},
+{ 645912, 3, {8971,9,8}},
+{ 645984, 3, {2243,18,16}},
+{ 646000, 3, {95,85,80}},
+{ 646016, 3, {103,98,64}},
+{ 646056, 3, {997,27,24}},
+{ 646065, 3, {293,49,45}},
+{ 646080, 3, {673,32,30}},
+{ 646100, 3, {100,91,71}},
+{ 646200, 3, {359,45,40}},
+{ 646240, 3, {577,35,32}},
+{ 646272, 3, {102,88,72}},
+{ 646320, 3, {2693,16,15}},
+{ 646360, 3, {113,88,65}},
+{ 646380, 3, {95,84,81}},
+{ 646425, 3, {117,85,65}},
+{ 646464, 3, {96,91,74}},
+{ 646536, 3, {93,88,79}},
+{ 646632, 3, {1283,24,21}},
+{ 646668, 3, {99,92,71}},
+{ 646680, 3, {317,51,40}},
+{ 646740, 3, {3593,15,12}},
+{ 646800, 3, {100,84,77}},
+{ 646884, 3, {151,68,63}},
+{ 647010, 3, {91,90,79}},
+{ 647064, 3, {99,86,76}},
+{ 647088, 3, {104,102,61}},
+{ 647190, 3, {94,85,81}},
+{ 647192, 3, {127,91,56}},
+{ 647200, 3, {809,32,25}},
+{ 647220, 3, {105,92,67}},
+{ 647244, 3, {461,39,36}},
+{ 647280, 3, {93,87,80}},
+{ 647292, 3, {167,68,57}},
+{ 647328, 3, {613,33,32}},
+{ 647360, 3, {112,85,68}},
+{ 647520, 3, {96,95,71}},
+{ 647550, 3, {1439,25,18}},
+{ 647556, 3, {593,39,28}},
+{ 647595, 3, {123,81,65}},
+{ 647640, 3, {257,56,45}},
+{ 647700, 3, {127,75,68}},
+{ 647724, 3, {701,33,28}},
+{ 647760, 3, {2699,16,15}},
+{ 647790, 3, {151,66,65}},
+{ 647829, 3, {113,91,63}},
+{ 647850, 3, {617,35,30}},
+{ 647892, 3, {857,28,27}},
+{ 647920, 3, {91,89,80}},
+{ 647928, 3, {8999,9,8}},
+{ 647955, 3, {99,85,77}},
+{ 647976, 3, {98,87,76}},
+{ 648000, 3, {90,90,80}},
+{ 648024, 3, {104,93,67}},
+{ 648060, 3, {1543,21,20}},
+{ 648072, 3, {9001,9,8}},
+{ 648108, 3, {353,51,36}},
+{ 648120, 3, {491,40,33}},
+{ 648180, 3, {277,52,45}},
+{ 648200, 3, {463,40,35}},
+{ 648240, 3, {111,80,73}},
+{ 648288, 3, {2251,18,16}},
+{ 648312, 3, {227,56,51}},
+{ 648324, 3, {92,87,81}},
+{ 648375, 3, {95,91,75}},
+{ 648396, 3, {93,84,83}},
+{ 648504, 3, {9007,9,8}},
+{ 648540, 3, {1201,27,20}},
+{ 648576, 3, {563,36,32}},
+{ 648600, 3, {94,92,75}},
+{ 648648, 3, {91,88,81}},
+{ 648720, 3, {106,85,72}},
+{ 648760, 3, {331,49,40}},
+{ 648768, 3, {109,93,64}},
+{ 648792, 3, {9011,9,8}},
+{ 648800, 3, {811,32,25}},
+{ 648816, 3, {1931,21,16}},
+{ 648864, 3, {751,32,27}},
+{ 648900, 3, {103,84,75}},
+{ 648936, 3, {9013,9,8}},
+{ 648945, 3, {99,95,69}},
+{ 648960, 3, {104,80,78}},
+{ 649040, 3, {112,95,61}},
+{ 649110, 3, {281,55,42}},
+{ 649230, 3, {102,95,67}},
+{ 649250, 3, {125,98,53}},
+{ 649260, 3, {3607,15,12}},
+{ 649404, 3, {859,28,27}},
+{ 649428, 3, {181,69,52}},
+{ 649440, 3, {90,88,82}},
+{ 649488, 3, {1933,21,16}},
+{ 649512, 3, {97,93,72}},
+{ 649536, 3, {199,64,51}},
+{ 649572, 3, {111,77,76}},
+{ 649584, 3, {347,48,39}},
+{ 649593, 3, {491,49,27}},
+{ 649600, 3, {116,80,70}},
+{ 649620, 3, {401,45,36}},
+{ 649656, 3, {1289,24,21}},
+{ 649680, 3, {2707,16,15}},
+{ 649704, 3, {107,88,69}},
+{ 649740, 3, {91,85,84}},
+{ 649800, 3, {95,90,76}},
+{ 649836, 3, {547,36,33}},
+{ 649880, 3, {211,56,55}},
+{ 649920, 3, {677,32,30}},
+{ 649935, 3, {101,99,65}},
+{ 649950, 3, {619,35,30}},
+{ 649980, 3, {157,69,60}},
+{ 650025, 3, {107,81,75}},
+{ 650052, 3, {463,39,36}},
+{ 650088, 3, {9029,9,8}},
+{ 650100, 3, {197,60,55}},
+{ 650208, 3, {521,39,32}},
+{ 650232, 3, {821,33,24}},
+{ 650250, 3, {90,85,85}},
+{ 650256, 3, {93,92,76}},
+{ 650340, 3, {3613,15,12}},
+{ 650364, 3, {379,44,39}},
+{ 650375, 3, {125,121,43}},
+{ 650400, 3, {271,50,48}},
+{ 650412, 3, {89,87,84}},
+{ 650520, 3, {139,72,65}},
+{ 650580, 3, {1549,21,20}},
+{ 650592, 3, {251,54,48}},
+{ 650640, 3, {2711,16,15}},
+{ 650650, 3, {110,91,65}},
+{ 650664, 3, {1291,24,21}},
+{ 650700, 3, {241,54,50}},
+{ 650720, 3, {98,83,80}},
+{ 650760, 3, {88,87,85}},
+{ 650808, 3, {131,72,69}},
+{ 650832, 3, {149,78,56}},
+{ 650916, 3, {98,82,81}},
+{ 650925, 3, {263,55,45}},
+{ 650952, 3, {9041,9,8}},
+{ 651000, 3, {100,93,70}},
+{ 651024, 3, {137,72,66}},
+{ 651060, 3, {3617,15,12}},
+{ 651096, 3, {9043,9,8}},
+{ 651112, 3, {151,77,56}},
+{ 651120, 3, {2713,16,15}},
+{ 651150, 3, {1447,25,18}},
+{ 651300, 3, {167,65,60}},
+{ 651360, 3, {118,80,69}},
+{ 651372, 3, {103,93,68}},
+{ 651420, 3, {94,90,77}},
+{ 651456, 3, {96,87,78}},
+{ 651504, 3, {277,49,48}},
+{ 651528, 3, {9049,9,8}},
+{ 651552, 3, {617,33,32}},
+{ 651560, 3, {179,65,56}},
+{ 651744, 3, {96,93,73}},
+{ 651816, 3, {823,33,24}},
+{ 651840, 3, {97,84,80}},
+{ 651924, 3, {199,63,52}},
+{ 652050, 3, {105,90,69}},
+{ 652080, 3, {95,88,78}},
+{ 652140, 3, {3623,15,12}},
+{ 652188, 3, {139,69,68}},
+{ 652200, 3, {1087,25,24}},
+{ 652212, 3, {108,99,61}},
+{ 652239, 3, {119,87,63}},
+{ 652248, 3, {9059,9,8}},
+{ 652260, 3, {1553,21,20}},
+{ 652275, 3, {223,65,45}},
+{ 652288, 3, {104,98,64}},
+{ 652365, 3, {109,95,63}},
+{ 652428, 3, {863,28,27}},
+{ 652464, 3, {197,69,48}},
+{ 652470, 3, {239,65,42}},
+{ 652500, 3, {100,87,75}},
+{ 652536, 3, {106,81,76}},
+{ 652560, 3, {2719,16,15}},
+{ 652575, 3, {113,77,75}},
+{ 652680, 3, {98,90,74}},
+{ 652704, 3, {523,39,32}},
+{ 652725, 3, {967,27,25}},
+{ 652800, 3, {96,85,80}},
+{ 652824, 3, {9067,9,8}},
+{ 652848, 3, {112,87,67}},
+{ 652896, 3, {2267,18,16}},
+{ 652925, 3, {175,91,41}},
+{ 652950, 3, {1451,25,18}},
+{ 652960, 3, {106,80,77}},
+{ 652992, 3, {179,64,57}},
+{ 652995, 3, {691,35,27}},
+{ 653004, 3, {99,97,68}},
+{ 653040, 3, {907,30,24}},
+{ 653120, 3, {157,65,64}},
+{ 653184, 3, {96,84,81}},
+{ 653220, 3, {191,60,57}},
+{ 653250, 3, {125,78,67}},
+{ 653268, 3, {101,84,77}},
+{ 653328, 3, {349,48,39}},
+{ 653400, 3, {99,88,75}},
+{ 653472, 3, {2269,18,16}},
+{ 653520, 3, {389,42,40}},
+{ 653562, 3, {114,91,63}},
+{ 653580, 3, {3631,15,12}},
+{ 653600, 3, {95,86,80}},
+{ 653616, 3, {102,89,72}},
+{ 653640, 3, {419,40,39}},
+{ 653664, 3, {619,33,32}},
+{ 653688, 3, {1297,24,21}},
+{ 653730, 3, {283,55,42}},
+{ 653760, 3, {227,60,48}},
+{ 653800, 3, {467,40,35}},
+{ 653832, 3, {1009,27,24}},
+{ 653850, 3, {1453,25,18}},
+{ 653904, 3, {239,57,48}},
+{ 653940, 3, {173,63,60}},
+{ 653952, 3, {131,78,64}},
+{ 654000, 3, {109,80,75}},
+{ 654024, 3, {229,56,51}},
+{ 654048, 3, {757,32,27}},
+{ 654075, 3, {95,85,81}},
+{ 654108, 3, {599,39,28}},
+{ 654150, 3, {98,89,75}},
+{ 654160, 3, {104,85,74}},
+{ 654192, 3, {118,77,72}},
+{ 654225, 3, {143,75,61}},
+{ 654240, 3, {94,87,80}},
+{ 654360, 3, {95,84,82}},
+{ 654381, 3, {119,117,47}},
+{ 654456, 3, {111,88,67}},
+{ 654480, 3, {101,81,80}},
+{ 654500, 3, {100,85,77}},
+{ 654528, 3, {487,42,32}},
+{ 654552, 3, {9091,9,8}},
+{ 654588, 3, {99,87,76}},
+{ 654600, 3, {1091,25,24}},
+{ 654624, 3, {2273,18,16}},
+{ 654660, 3, {3637,15,12}},
+{ 654720, 3, {93,88,80}},
+{ 654780, 3, {1559,21,20}},
+{ 654810, 3, {115,78,73}},
+{ 654840, 3, {107,85,72}},
+{ 654864, 3, {1949,21,16}},
+{ 654885, 3, {105,81,77}},
+{ 654948, 3, {113,84,69}},
+{ 654960, 3, {2729,16,15}},
+{ 654984, 3, {827,33,24}},
+{ 655020, 3, {1213,27,20}},
+{ 655044, 3, {169,68,57}},
+{ 655116, 3, {709,33,28}},
+{ 655200, 3, {91,90,80}},
+{ 655248, 3, {102,88,73}},
+{ 655375, 3, {125,107,49}},
+{ 655380, 3, {331,45,44}},
+{ 655416, 3, {9103,9,8}},
+{ 655425, 3, {971,27,25}},
+{ 655440, 3, {2731,16,15}},
+{ 655488, 3, {569,36,32}},
+{ 655500, 3, {95,92,75}},
+{ 655536, 3, {1951,21,16}},
+{ 655600, 3, {149,80,55}},
+{ 655620, 3, {223,60,49}},
+{ 655668, 3, {467,39,36}},
+{ 655680, 3, {683,32,30}},
+{ 655704, 3, {1301,24,21}},
+{ 655740, 3, {3643,15,12}},
+{ 655776, 3, {92,88,81}},
+{ 655785, 3, {117,95,59}},
+{ 655800, 3, {1093,25,24}},
+{ 655848, 3, {9109,9,8}},
+{ 655875, 3, {125,99,53}},
+{ 655920, 3, {911,30,24}},
+{ 655956, 3, {137,76,63}},
+{ 656019, 3, {91,89,81}},
+{ 656040, 3, {105,88,71}},
+{ 656064, 3, {102,96,67}},
+{ 656110, 3, {103,91,70}},
+{ 656208, 3, {93,84,84}},
+{ 656292, 3, {601,39,28}},
+{ 656328, 3, {92,87,82}},
+{ 656355, 3, {133,105,47}},
+{ 656370, 3, {99,85,78}},
+{ 656424, 3, {1013,27,24}},
+{ 656460, 3, {521,36,35}},
+{ 656550, 3, {1459,25,18}},
+{ 656568, 3, {829,33,24}},
+{ 656600, 3, {100,98,67}},
+{ 656640, 3, {96,90,76}},
+{ 656656, 3, {91,88,82}},
+{ 656700, 3, {199,60,55}},
+{ 656712, 3, {1303,24,21}},
+{ 656760, 3, {421,40,39}},
+{ 656800, 3, {821,32,25}},
+{ 656880, 3, {92,85,84}},
+{ 656928, 3, {2281,18,16}},
+{ 656964, 3, {99,84,79}},
+{ 656992, 3, {419,49,32}},
+{ 657024, 3, {118,87,64}},
+{ 657072, 3, {104,81,78}},
+{ 657120, 3, {111,80,74}},
+{ 657144, 3, {9127,9,8}},
+{ 657153, 3, {133,81,61}},
+{ 657180, 3, {1217,27,20}},
+{ 657216, 3, {163,64,63}},
+{ 657228, 3, {383,44,39}},
+{ 657324, 3, {93,93,76}},
+{ 657360, 3, {90,88,83}},
+{ 657384, 3, {91,86,84}},
+{ 657440, 3, {587,35,32}},
+{ 657492, 3, {293,51,44}},
+{ 657504, 3, {761,32,27}},
+{ 657540, 3, {281,52,45}},
+{ 657576, 3, {9133,9,8}},
+{ 657600, 3, {137,75,64}},
+{ 657657, 3, {99,91,73}},
+{ 657696, 3, {104,93,68}},
+{ 657720, 3, {90,87,84}},
+{ 657792, 3, {571,36,32}},
+{ 657825, 3, {179,75,49}},
+{ 657840, 3, {2741,16,15}},
+{ 657864, 3, {9137,9,8}},
+{ 657900, 3, {90,86,85}},
+{ 657930, 3, {241,65,42}},
+{ 657984, 3, {149,69,64}},
+{ 658008, 3, {111,78,76}},
+{ 658068, 3, {116,93,61}},
+{ 658112, 3, {113,91,64}},
+{ 658140, 3, {1567,21,20}},
+{ 658200, 3, {1097,25,24}},
+{ 658240, 3, {88,88,85}},
+{ 658350, 3, {95,90,77}},
+{ 658400, 3, {823,32,25}},
+{ 658416, 3, {88,87,86}},
+{ 658476, 3, {108,91,67}},
+{ 658512, 3, {269,51,48}},
+{ 658560, 3, {98,84,80}},
+{ 658620, 3, {3659,15,12}},
+{ 658656, 3, {2287,18,16}},
+{ 658665, 3, {123,85,63}},
+{ 658680, 3, {499,40,33}},
+{ 658692, 3, {107,81,76}},
+{ 658728, 3, {1307,24,21}},
+{ 658800, 3, {108,100,61}},
+{ 658812, 3, {93,92,77}},
+{ 658840, 3, {181,65,56}},
+{ 658854, 3, {98,83,81}},
+{ 658872, 3, {9151,9,8}},
+{ 658944, 3, {96,88,78}},
+{ 658980, 3, {523,36,35}},
+{ 659016, 3, {113,81,72}},
+{ 659050, 3, {269,50,49}},
+{ 659088, 3, {199,69,48}},
+{ 659120, 3, {107,80,77}},
+{ 659124, 3, {359,51,36}},
+{ 659295, 3, {105,91,69}},
+{ 659304, 3, {9157,9,8}},
+{ 659376, 3, {241,57,48}},
+{ 659400, 3, {157,70,60}},
+{ 659475, 3, {977,27,25}},
+{ 659490, 3, {95,89,78}},
+{ 659520, 3, {229,60,48}},
+{ 659568, 3, {151,78,56}},
+{ 659592, 3, {9161,9,8}},
+{ 659600, 3, {97,85,80}},
+{ 659604, 3, {263,57,44}},
+{ 659680, 3, {112,95,62}},
+{ 659736, 3, {102,84,77}},
+{ 659750, 3, {125,91,58}},
+{ 659760, 3, {2749,16,15}},
+{ 659808, 3, {96,87,79}},
+{ 659820, 3, {1571,21,20}},
+{ 659904, 3, {491,42,32}},
+{ 659925, 3, {419,45,35}},
+{ 659988, 3, {97,84,81}},
+{ 660000, 3, {100,88,75}},
+{ 660060, 3, {193,60,57}},
+{ 660096, 3, {191,64,54}},
+{ 660128, 3, {421,49,32}},
+{ 660150, 3, {163,75,54}},
+{ 660177, 3, {499,49,27}},
+{ 660240, 3, {131,72,70}},
+{ 660275, 3, {175,77,49}},
+{ 660288, 3, {181,64,57}},
+{ 660300, 3, {100,93,71}},
+{ 660312, 3, {1019,27,24}},
+{ 660384, 3, {2293,18,16}},
+{ 660400, 3, {127,80,65}},
+{ 660420, 3, {1223,27,20}},
+{ 660440, 3, {95,88,79}},
+{ 660456, 3, {9173,9,8}},
+{ 660504, 3, {104,87,73}},
+{ 660520, 3, {337,49,40}},
+{ 660528, 3, {139,72,66}},
+{ 660600, 3, {367,45,40}},
+{ 660672, 3, {96,93,74}},
+{ 660720, 3, {2753,16,15}},
+{ 660744, 3, {114,84,69}},
+{ 660780, 3, {3671,15,12}},
+{ 660800, 3, {118,80,70}},
+{ 660816, 3, {353,48,39}},
+{ 660912, 3, {281,49,48}},
+{ 660960, 3, {96,85,81}},
+{ 660972, 3, {223,57,52}},
+{ 661032, 3, {9181,9,8}},
+{ 661122, 3, {106,81,77}},
+{ 661140, 3, {3673,15,12}},
+{ 661200, 3, {95,87,80}},
+{ 661248, 3, {96,84,82}},
+{ 661365, 3, {115,81,71}},
+{ 661375, 3, {143,125,37}},
+{ 661440, 3, {106,80,78}},
+{ 661464, 3, {9187,9,8}},
+{ 661500, 3, {98,90,75}},
+{ 661536, 3, {2297,18,16}},
+{ 661584, 3, {179,66,56}},
+{ 661600, 3, {827,32,25}},
+{ 661608, 3, {1021,27,24}},
+{ 661680, 3, {919,30,24}},
+{ 661716, 3, {557,36,33}},
+{ 661770, 3, {95,86,81}},
+{ 661800, 3, {1103,25,24}},
+{ 661815, 3, {191,63,55}},
+{ 661848, 3, {109,88,69}},
+{ 661860, 3, {3677,15,12}},
+{ 661941, 3, {133,79,63}},
+{ 661950, 3, {1471,25,18}},
+{ 661960, 3, {104,95,67}},
+{ 662004, 3, {111,84,71}},
+{ 662025, 3, {97,91,75}},
+{ 662112, 3, {99,88,76}},
+{ 662160, 3, {93,89,80}},
+{ 662175, 3, {109,81,75}},
+{ 662200, 3, {100,86,77}},
+{ 662220, 3, {283,52,45}},
+{ 662235, 3, {119,105,53}},
+{ 662310, 3, {223,55,54}},
+{ 662328, 3, {9199,9,8}},
+{ 662340, 3, {95,84,83}},
+{ 662400, 3, {92,90,80}},
+{ 662445, 3, {701,35,27}},
+{ 662475, 3, {121,75,73}},
+{ 662480, 3, {91,91,80}},
+{ 662508, 3, {239,63,44}},
+{ 662550, 3, {631,35,30}},
+{ 662580, 3, {409,45,36}},
+{ 662592, 3, {112,87,68}},
+{ 662616, 3, {9203,9,8}},
+{ 662640, 3, {251,55,48}},
+{ 662688, 3, {118,78,72}},
+{ 662760, 3, {263,56,45}},
+{ 662805, 3, {103,99,65}},
+{ 662844, 3, {607,39,28}},
+{ 662904, 3, {93,88,81}},
+{ 662928, 3, {1973,21,16}},
+{ 662940, 3, {127,87,60}},
+{ 662970, 3, {105,82,77}},
+{ 663000, 3, {100,85,78}},
+{ 663012, 3, {877,28,27}},
+{ 663048, 3, {9209,9,8}},
+{ 663075, 3, {421,45,35}},
+{ 663120, 3, {307,48,45}},
+{ 663168, 3, {157,66,64}},
+{ 663180, 3, {1579,21,20}},
+{ 663200, 3, {829,32,25}},
+{ 663228, 3, {92,89,81}},
+{ 663300, 3, {100,99,67}},
+{ 663360, 3, {691,32,30}},
+{ 663390, 3, {91,90,81}},
+{ 663408, 3, {271,51,48}},
+{ 663520, 3, {116,88,65}},
+{ 663525, 3, {983,27,25}},
+{ 663660, 3, {1229,27,20}},
+{ 663780, 3, {115,78,74}},
+{ 663795, 3, {149,81,55}},
+{ 663912, 3, {9221,9,8}},
+{ 663936, 3, {96,91,76}},
+{ 663950, 3, {271,50,49}},
+{ 663960, 3, {503,40,33}},
+{ 663975, 3, {227,65,45}},
+{ 663984, 3, {106,87,72}},
+{ 664020, 3, {93,85,84}},
+{ 664080, 3, {2767,16,15}},
+{ 664125, 3, {115,77,75}},
+{ 664146, 3, {251,54,49}},
+{ 664160, 3, {593,35,32}},
+{ 664224, 3, {102,88,74}},
+{ 664300, 3, {100,91,73}},
+{ 664320, 3, {173,64,60}},
+{ 664332, 3, {92,87,83}},
+{ 664335, 3, {111,95,63}},
+{ 664344, 3, {9227,9,8}},
+{ 664356, 3, {719,33,28}},
+{ 664380, 3, {3691,15,12}},
+{ 664392, 3, {94,93,76}},
+{ 664400, 3, {151,80,55}},
+{ 664416, 3, {769,32,27}},
+{ 664488, 3, {839,33,24}},
+{ 664560, 3, {104,90,71}},
+{ 664587, 3, {137,77,63}},
+{ 664620, 3, {106,95,66}},
+{ 664664, 3, {91,88,83}},
+{ 664704, 3, {577,36,32}},
+{ 664740, 3, {1231,27,20}},
+{ 664776, 3, {1319,24,21}},
+{ 664785, 3, {99,85,79}},
+{ 664800, 3, {277,50,48}},
+{ 664832, 3, {106,98,64}},
+{ 664848, 3, {108,81,76}},
+{ 664860, 3, {1583,21,20}},
+{ 664884, 3, {99,92,73}},
+{ 664944, 3, {1979,21,16}},
+{ 664992, 3, {2309,18,16}},
+{ 665028, 3, {91,87,84}},
+{ 665091, 3, {119,81,69}},
+{ 665175, 3, {181,75,49}},
+{ 665208, 3, {9239,9,8}},
+{ 665280, 3, {90,88,84}},
+{ 665352, 3, {9241,9,8}},
+{ 665400, 3, {1109,25,24}},
+{ 665448, 3, {233,56,51}},
+{ 665460, 3, {3697,15,12}},
+{ 665469, 3, {503,49,27}},
+{ 665496, 3, {104,81,79}},
+{ 665532, 3, {139,76,63}},
+{ 665550, 3, {90,87,85}},
+{ 665568, 3, {2311,18,16}},
+{ 665616, 3, {283,49,48}},
+{ 665652, 3, {251,52,51}},
+{ 665720, 3, {89,88,85}},
+{ 665760, 3, {96,95,73}},
+{ 665775, 3, {269,55,45}},
+{ 665784, 3, {1321,24,21}},
+{ 665808, 3, {97,88,78}},
+{ 665820, 3, {137,81,60}},
+{ 665856, 3, {102,96,68}},
+{ 665988, 3, {127,76,69}},
+{ 666036, 3, {881,28,27}},
+{ 666072, 3, {88,87,87}},
+{ 666120, 3, {105,104,61}},
+{ 666144, 3, {257,54,48}},
+{ 666180, 3, {3701,15,12}},
+{ 666204, 3, {103,84,77}},
+{ 666315, 3, {117,85,67}},
+{ 666336, 3, {631,33,32}},
+{ 666400, 3, {98,85,80}},
+{ 666432, 3, {96,89,78}},
+{ 666444, 3, {111,79,76}},
+{ 666450, 3, {1481,25,18}},
+{ 666468, 3, {99,99,68}},
+{ 666480, 3, {2777,16,15}},
+{ 666504, 3, {9257,9,8}},
+{ 666540, 3, {105,92,69}},
+{ 666600, 3, {101,88,75}},
+{ 666624, 3, {112,93,64}},
+{ 666666, 3, {99,91,74}},
+{ 666792, 3, {98,84,81}},
+{ 666816, 3, {151,69,64}},
+{ 666900, 3, {95,90,78}},
+{ 666960, 3, {397,42,40}},
+{ 667008, 3, {193,64,54}},
+{ 667080, 3, {109,85,72}},
+{ 667116, 3, {108,87,71}},
+{ 667200, 3, {139,75,64}},
+{ 667233, 3, {119,89,63}},
+{ 667260, 3, {337,45,44}},
+{ 667296, 3, {331,48,42}},
+{ 667350, 3, {1483,25,18}},
+{ 667359, 3, {107,81,77}},
+{ 667368, 3, {93,92,78}},
+{ 667380, 3, {227,60,49}},
+{ 667440, 3, {103,81,80}},
+{ 667485, 3, {163,65,63}},
+{ 667520, 3, {149,70,64}},
+{ 667524, 3, {389,44,39}},
+{ 667548, 3, {883,28,27}},
+{ 667576, 3, {131,91,56}},
+{ 667620, 3, {3709,15,12}},
+{ 667625, 3, {125,109,49}},
+{ 667632, 3, {1987,21,16}},
+{ 667680, 3, {107,80,78}},
+{ 667755, 3, {99,95,71}},
+{ 667800, 3, {106,84,75}},
+{ 667812, 3, {101,87,76}},
+{ 667845, 3, {97,85,81}},
+{ 667872, 3, {773,32,27}},
+{ 667920, 3, {110,88,69}},
+{ 667944, 3, {9277,9,8}},
+{ 667968, 3, {98,96,71}},
+{ 667980, 3, {1237,27,20}},
+{ 668040, 3, {293,57,40}},
+{ 668052, 3, {241,63,44}},
+{ 668088, 3, {1031,27,24}},
+{ 668100, 3, {131,75,68}},
+{ 668160, 3, {96,87,80}},
+{ 668232, 3, {9281,9,8}},
+{ 668376, 3, {9283,9,8}},
+{ 668448, 3, {211,66,48}},
+{ 668472, 3, {173,69,56}},
+{ 668508, 3, {113,87,68}},
+{ 668610, 3, {102,95,69}},
+{ 668655, 3, {127,81,65}},
+{ 668736, 3, {96,86,81}},
+{ 668745, 3, {193,63,55}},
+{ 668800, 3, {95,88,80}},
+{ 668808, 3, {1327,24,21}},
+{ 668844, 3, {563,36,33}},
+{ 668850, 3, {98,91,75}},
+{ 668856, 3, {116,93,62}},
+{ 668880, 3, {929,30,24}},
+{ 668925, 3, {991,27,25}},
+{ 668952, 3, {163,72,57}},
+{ 668976, 3, {181,66,56}},
+{ 669060, 3, {118,81,70}},
+{ 669096, 3, {9293,9,8}},
+{ 669120, 3, {96,85,82}},
+{ 669150, 3, {1487,25,18}},
+{ 669300, 3, {97,92,75}},
+{ 669312, 3, {96,84,83}},
+{ 669360, 3, {2789,16,15}},
+{ 669384, 3, {1033,27,24}},
+{ 669396, 3, {613,39,28}},
+{ 669420, 3, {3719,15,12}},
+{ 669465, 3, {95,87,81}},
+{ 669552, 3, {104,87,74}},
+{ 669600, 3, {93,90,80}},
+{ 669630, 3, {101,85,78}},
+{ 669636, 3, {99,89,76}},
+{ 669648, 3, {1993,21,16}},
+{ 669760, 3, {92,91,80}},
+{ 669825, 3, {229,65,45}},
+{ 669840, 3, {2791,16,15}},
+{ 669900, 3, {100,87,77}},
+{ 670005, 3, {709,35,27}},
+{ 670032, 3, {94,88,81}},
+{ 670050, 3, {1489,25,18}},
+{ 670200, 3, {1117,25,24}},
+{ 670248, 3, {107,87,72}},
+{ 670320, 3, {95,84,84}},
+{ 670344, 3, {106,93,68}},
+{ 670392, 3, {9311,9,8}},
+{ 670410, 3, {191,65,54}},
+{ 670500, 3, {149,75,60}},
+{ 670548, 3, {173,68,57}},
+{ 670560, 3, {127,80,66}},
+{ 670572, 3, {887,28,27}},
+{ 670600, 3, {479,40,35}},
+{ 670656, 3, {499,42,32}},
+{ 670670, 3, {110,91,67}},
+{ 670680, 3, {92,90,81}},
+{ 670725, 3, {271,55,45}},
+{ 670740, 3, {1597,21,20}},
+{ 670761, 3, {91,91,81}},
+{ 670824, 3, {99,88,77}},
+{ 670860, 3, {3727,15,12}},
+{ 670880, 3, {599,35,32}},
+{ 670890, 3, {107,95,66}},
+{ 670950, 3, {105,90,71}},
+{ 670956, 3, {143,69,68}},
+{ 670968, 3, {9319,9,8}},
+{ 670992, 3, {1997,21,16}},
+{ 671004, 3, {109,81,76}},
+{ 671040, 3, {233,60,48}},
+{ 671055, 3, {105,83,77}},
+{ 671088, 3, {93,88,82}},
+{ 671104, 3, {107,98,64}},
+{ 671125, 3, {125,91,59}},
+{ 671160, 3, {94,85,84}},
+{ 671200, 3, {839,32,25}},
+{ 671256, 3, {9323,9,8}},
+{ 671280, 3, {2797,16,15}},
+{ 671400, 3, {373,45,40}},
+{ 671440, 3, {109,80,77}},
+{ 671460, 3, {95,93,76}},
+{ 671517, 3, {119,99,57}},
+{ 671550, 3, {121,75,74}},
+{ 671580, 3, {91,90,82}},
+{ 671664, 3, {1999,21,16}},
+{ 671715, 3, {115,99,59}},
+{ 671748, 3, {727,33,28}},
+{ 671760, 3, {311,48,45}},
+{ 671832, 3, {93,86,84}},
+{ 671840, 3, {104,85,76}},
+{ 671850, 3, {1493,25,18}},
+{ 671880, 3, {509,40,33}},
+{ 671895, 3, {105,81,79}},
+{ 671904, 3, {2333,18,16}},
+{ 671940, 3, {3733,15,12}},
+{ 672000, 3, {100,84,80}},
+{ 672048, 3, {359,48,39}},
+{ 672144, 3, {114,88,67}},
+{ 672210, 3, {97,90,77}},
+{ 672240, 3, {2801,16,15}},
+{ 672264, 3, {9337,9,8}},
+{ 672320, 3, {191,64,55}},
+{ 672336, 3, {92,87,84}},
+{ 672360, 3, {431,40,39}},
+{ 672420, 3, {1601,21,20}},
+{ 672516, 3, {479,39,36}},
+{ 672552, 3, {9341,9,8}},
+{ 672576, 3, {113,93,64}},
+{ 672588, 3, {157,68,63}},
+{ 672600, 3, {118,76,75}},
+{ 672672, 3, {91,88,84}},
+{ 672696, 3, {9343,9,8}},
+{ 672705, 3, {151,81,55}},
+{ 672720, 3, {2803,16,15}},
+{ 672750, 3, {115,78,75}},
+{ 672828, 3, {227,57,52}},
+{ 672948, 3, {108,93,67}},
+{ 672960, 3, {701,32,30}},
+{ 672975, 3, {997,27,25}},
+{ 673008, 3, {2003,21,16}},
+{ 673020, 3, {3739,15,12}},
+{ 673050, 3, {641,35,30}},
+{ 673120, 3, {601,35,32}},
+{ 673128, 3, {9349,9,8}},
+{ 673200, 3, {90,88,85}},
+{ 673260, 3, {229,60,49}},
+{ 673272, 3, {1039,27,24}},
+{ 673344, 3, {167,64,63}},
+{ 673365, 3, {121,105,53}},
+{ 673400, 3, {100,91,74}},
+{ 673407, 3, {509,49,27}},
+{ 673440, 3, {122,80,69}},
+{ 673512, 3, {211,57,56}},
+{ 673530, 3, {157,66,65}},
+{ 673596, 3, {99,84,81}},
+{ 673632, 3, {2339,18,16}},
+{ 673680, 3, {401,42,40}},
+{ 673728, 3, {88,88,87}},
+{ 673740, 3, {197,60,57}},
+{ 673750, 3, {125,77,70}},
+{ 673764, 3, {617,39,28}},
+{ 673800, 3, {1123,25,24}},
+{ 673812, 3, {367,51,36}},
+{ 673848, 3, {191,63,56}},
+{ 673920, 3, {96,90,78}},
+{ 673992, 3, {99,92,74}},
+{ 674100, 3, {107,84,75}},
+{ 674190, 3, {227,55,54}},
+{ 674208, 3, {2341,18,16}},
+{ 674240, 3, {98,86,80}},
+{ 674289, 3, {139,77,63}},
+{ 674310, 3, {95,91,78}},
+{ 674325, 3, {111,81,75}},
+{ 674352, 3, {223,56,54}},
+{ 674400, 3, {281,50,48}},
+{ 674424, 3, {102,87,76}},
+{ 674460, 3, {1249,27,20}},
+{ 674520, 3, {105,88,73}},
+{ 674550, 3, {1499,25,18}},
+{ 674640, 3, {937,30,24}},
+{ 674652, 3, {269,57,44}},
+{ 674700, 3, {173,65,60}},
+{ 674712, 3, {9371,9,8}},
+{ 674730, 3, {98,85,81}},
+{ 674784, 3, {99,96,71}},
+{ 674820, 3, {163,69,60}},
+{ 674880, 3, {96,95,74}},
+{ 674940, 3, {1607,21,20}},
+{ 675120, 3, {97,87,80}},
+{ 675136, 3, {137,77,64}},
+{ 675144, 3, {9377,9,8}},
+{ 675150, 3, {643,35,30}},
+{ 675168, 3, {541,39,32}},
+{ 675200, 3, {211,64,50}},
+{ 675220, 3, {106,91,70}},
+{ 675240, 3, {331,51,40}},
+{ 675360, 3, {105,96,67}},
+{ 675450, 3, {95,90,79}},
+{ 675480, 3, {433,40,39}},
+{ 675540, 3, {139,81,60}},
+{ 675576, 3, {853,33,24}},
+{ 675584, 3, {116,91,64}},
+{ 675648, 3, {102,92,72}},
+{ 675675, 3, {99,91,75}},
+{ 675696, 3, {2011,21,16}},
+{ 675780, 3, {1609,21,20}},
+{ 675808, 3, {431,49,32}},
+{ 675864, 3, {149,72,63}},
+{ 675920, 3, {112,85,71}},
+{ 675924, 3, {93,92,79}},
+{ 675936, 3, {2347,18,16}},
+{ 675948, 3, {619,39,28}},
+{ 675972, 3, {569,36,33}},
+{ 676032, 3, {503,42,32}},
+{ 676080, 3, {313,48,45}},
+{ 676152, 3, {9391,9,8}},
+{ 676200, 3, {98,92,75}},
+{ 676224, 3, {587,36,32}},
+{ 676260, 3, {102,85,78}},
+{ 676296, 3, {101,93,72}},
+{ 676305, 3, {113,95,63}},
+{ 676350, 3, {167,75,54}},
+{ 676368, 3, {122,77,72}},
+{ 676400, 3, {95,89,80}},
+{ 676480, 3, {151,70,64}},
+{ 676494, 3, {118,91,63}},
+{ 676512, 3, {96,87,81}},
+{ 676560, 3, {2819,16,15}},
+{ 676584, 3, {9397,9,8}},
+{ 676620, 3, {179,63,60}},
+{ 676668, 3, {107,93,68}},
+{ 676800, 3, {94,90,80}},
+{ 676830, 3, {293,55,42}},
+{ 676896, 3, {641,33,32}},
+{ 676935, 3, {307,49,45}},
+{ 676980, 3, {3761,15,12}},
+{ 676984, 3, {157,77,56}},
+{ 677016, 3, {9403,9,8}},
+{ 677025, 3, {135,85,59}},
+{ 677040, 3, {93,91,80}},
+{ 677088, 3, {2351,18,16}},
+{ 677160, 3, {95,88,81}},
+{ 677280, 3, {96,85,83}},
+{ 677292, 3, {733,33,28}},
+{ 677376, 3, {96,84,84}},
+{ 677400, 3, {1129,25,24}},
+{ 677430, 3, {193,65,54}},
+{ 677460, 3, {1613,21,20}},
+{ 677520, 3, {941,30,24}},
+{ 677600, 3, {100,88,77}},
+{ 677700, 3, {251,54,50}},
+{ 677712, 3, {2017,21,16}},
+{ 677736, 3, {9413,9,8}},
+{ 677880, 3, {269,56,45}},
+{ 678000, 3, {113,80,75}},
+{ 678015, 3, {117,95,61}},
+{ 678060, 3, {3767,15,12}},
+{ 678080, 3, {163,65,64}},
+{ 678096, 3, {277,51,48}},
+{ 678132, 3, {92,91,81}},
+{ 678168, 3, {9419,9,8}},
+{ 678300, 3, {95,85,84}},
+{ 678312, 3, {9421,9,8}},
+{ 678348, 3, {571,36,33}},
+{ 678375, 3, {125,81,67}},
+{ 678405, 3, {105,91,71}},
+{ 678420, 3, {3769,15,12}},
+{ 678480, 3, {257,55,48}},
+{ 678528, 3, {96,93,76}},
+{ 678600, 3, {100,87,78}},
+{ 678650, 3, {277,50,49}},
+{ 678699, 3, {133,81,63}},
+{ 678720, 3, {101,84,80}},
+{ 678744, 3, {857,33,24}},
+{ 678756, 3, {229,57,52}},
+{ 678780, 3, {419,45,36}},
+{ 678810, 3, {121,85,66}},
+{ 678816, 3, {2357,18,16}},
+{ 678825, 3, {431,45,35}},
+{ 678900, 3, {100,93,73}},
+{ 678944, 3, {433,49,32}},
+{ 679008, 3, {643,33,32}},
+{ 679032, 3, {9431,9,8}},
+{ 679140, 3, {98,90,77}},
+{ 679176, 3, {9433,9,8}},
+{ 679185, 3, {129,81,65}},
+{ 679200, 3, {283,50,48}},
+{ 679272, 3, {93,88,83}},
+{ 679350, 3, {647,35,30}},
+{ 679360, 3, {193,64,55}},
+{ 679392, 3, {337,48,42}},
+{ 679455, 3, {719,35,27}},
+{ 679464, 3, {9437,9,8}},
+{ 679500, 3, {151,75,60}},
+{ 679536, 3, {99,88,78}},
+{ 679608, 3, {9439,9,8}},
+{ 679644, 3, {93,87,84}},
+{ 679668, 3, {271,57,44}},
+{ 679725, 3, {135,95,53}},
+{ 679752, 3, {1049,27,24}},
+{ 679770, 3, {91,90,83}},
+{ 679800, 3, {103,88,75}},
+{ 679833, 3, {109,81,77}},
+{ 679840, 3, {607,35,32}},
+{ 679860, 3, {1259,27,20}},
+{ 679875, 3, {125,111,49}},
+{ 679920, 3, {2833,16,15}},
+{ 679932, 3, {101,99,68}},
+{ 679950, 3, {1511,25,18}},
+{ 679968, 3, {787,32,27}},
+{ 679980, 3, {1619,21,20}},
+{ 679995, 3, {115,81,73}},
+{ 680000, 3, {100,85,80}},
+{ 680022, 3, {257,54,49}},
+{ 680085, 3, {127,85,63}},
+{ 680120, 3, {347,49,40}},
+{ 680130, 3, {229,55,54}},
+{ 680160, 3, {109,80,78}},
+{ 680220, 3, {3779,15,12}},
+{ 680316, 3, {91,89,84}},
+{ 680328, 3, {859,33,24}},
+{ 680340, 3, {92,87,85}},
+{ 680580, 3, {199,60,57}},
+{ 680616, 3, {137,72,69}},
+{ 680625, 3, {121,75,75}},
+{ 680640, 3, {709,32,30}},
+{ 680652, 3, {111,84,73}},
+{ 680680, 3, {91,88,85}},
+{ 680760, 3, {120,93,61}},
+{ 680820, 3, {1621,21,20}},
+{ 680832, 3, {197,64,54}},
+{ 680850, 3, {90,89,85}},
+{ 680880, 3, {2837,16,15}},
+{ 680904, 3, {193,63,56}},
+{ 680988, 3, {121,84,67}},
+{ 681036, 3, {103,87,76}},
+{ 681048, 3, {1051,27,24}},
+{ 681072, 3, {2027,21,16}},
+{ 681075, 3, {1009,27,25}},
+{ 681120, 3, {90,88,86}},
+{ 681192, 3, {9461,9,8}},
+{ 681200, 3, {131,80,65}},
+{ 681252, 3, {397,44,39}},
+{ 681336, 3, {9463,9,8}},
+{ 681384, 3, {89,88,87}},
+{ 681408, 3, {96,91,78}},
+{ 681450, 3, {118,77,75}},
+{ 681525, 3, {233,65,45}},
+{ 681564, 3, {257,52,51}},
+{ 681590, 3, {107,91,70}},
+{ 681600, 3, {100,96,71}},
+{ 681615, 3, {99,85,81}},
+{ 681624, 3, {9467,9,8}},
+{ 681625, 3, {133,125,41}},
+{ 681660, 3, {541,36,35}},
+{ 681696, 3, {263,54,48}},
+{ 681720, 3, {95,92,78}},
+{ 681744, 3, {2029,21,16}},
+{ 681800, 3, {487,40,35}},
+{ 681840, 3, {947,30,24}},
+{ 681912, 3, {99,84,82}},
+{ 681975, 3, {433,45,35}},
+{ 682020, 3, {421,45,36}},
+{ 682056, 3, {9473,9,8}},
+{ 682080, 3, {98,87,80}},
+{ 682110, 3, {106,99,65}},
+{ 682176, 3, {102,88,76}},
+{ 682200, 3, {379,45,40}},
+{ 682227, 3, {119,91,63}},
+{ 682290, 3, {114,95,63}},
+{ 682320, 3, {2843,16,15}},
+{ 682344, 3, {104,81,81}},
+{ 682380, 3, {223,60,51}},
+{ 682400, 3, {853,32,25}},
+{ 682488, 3, {9479,9,8}},
+{ 682500, 3, {100,91,75}},
+{ 682560, 3, {96,90,79}},
+{ 682584, 3, {239,56,51}},
+{ 682605, 3, {197,63,55}},
+{ 682656, 3, {547,39,32}},
+{ 682668, 3, {98,86,81}},
+{ 682740, 3, {3793,15,12}},
+{ 682752, 3, {127,84,64}},
+{ 682776, 3, {109,87,72}},
+{ 682836, 3, {739,33,28}},
+{ 682848, 3, {2371,18,16}},
+{ 682890, 3, {103,85,78}},
+{ 682920, 3, {271,56,45}},
+{ 682992, 3, {102,93,72}},
+{ 683100, 3, {99,92,75}},
+{ 683136, 3, {593,36,32}},
+{ 683232, 3, {647,33,32}},
+{ 683280, 3, {104,90,73}},
+{ 683316, 3, {111,81,76}},
+{ 683340, 3, {1627,21,20}},
+{ 683352, 3, {9491,9,8}},
+{ 683375, 3, {125,77,71}},
+{ 683430, 3, {109,95,66}},
+{ 683460, 3, {3797,15,12}},
+{ 683496, 3, {863,33,24}},
+{ 683550, 3, {98,93,75}},
+{ 683648, 3, {109,98,64}},
+{ 683748, 3, {487,39,36}},
+{ 683760, 3, {105,88,74}},
+{ 683775, 3, {1013,27,25}},
+{ 683784, 3, {9497,9,8}},
+{ 683820, 3, {131,87,60}},
+{ 683865, 3, {167,65,63}},
+{ 683904, 3, {137,78,64}},
+{ 683910, 3, {149,85,54}},
+{ 683928, 3, {118,84,69}},
+{ 683991, 3, {141,77,63}},
+{ 684000, 3, {95,90,80}},
+{ 684040, 3, {349,49,40}},
+{ 684096, 3, {509,42,32}},
+{ 684180, 3, {181,63,60}},
+{ 684204, 3, {111,92,67}},
+{ 684240, 3, {2851,16,15}},
+{ 684285, 3, {133,105,49}},
+{ 684288, 3, {96,88,81}},
+{ 684320, 3, {94,91,80}},
+{ 684369, 3, {119,81,71}},
+{ 684480, 3, {93,92,80}},
+{ 684530, 3, {127,77,70}},
+{ 684540, 3, {3803,15,12}},
+{ 684576, 3, {2377,18,16}},
+{ 684600, 3, {163,70,60}},
+{ 684684, 3, {99,91,76}},
+{ 684720, 3, {317,48,45}},
+{ 684775, 3, {175,91,43}},
+{ 684792, 3, {9511,9,8}},
+{ 684828, 3, {373,51,36}},
+{ 684840, 3, {439,40,39}},
+{ 684855, 3, {95,89,81}},
+{ 684864, 3, {96,87,82}},
+{ 684936, 3, {151,72,63}},
+{ 684992, 3, {139,77,64}},
+{ 685020, 3, {233,60,49}},
+{ 685104, 3, {2039,21,16}},
+{ 685230, 3, {251,65,42}},
+{ 685300, 3, {100,89,77}},
+{ 685308, 3, {191,69,52}},
+{ 685350, 3, {1523,25,18}},
+{ 685368, 3, {167,72,57}},
+{ 685440, 3, {96,85,84}},
+{ 685476, 3, {577,36,33}},
+{ 685503, 3, {93,91,81}},
+{ 685512, 3, {9521,9,8}},
+{ 685520, 3, {95,88,82}},
+{ 685575, 3, {277,55,45}},
+{ 685584, 3, {92,92,81}},
+{ 685596, 3, {97,93,76}},
+{ 685600, 3, {857,32,25}},
+{ 685608, 3, {106,84,77}},
+{ 685620, 3, {293,52,45}},
+{ 685650, 3, {653,35,30}},
+{ 685680, 3, {2857,16,15}},
+{ 685692, 3, {907,28,27}},
+{ 685728, 3, {2381,18,16}},
+{ 685755, 3, {311,49,45}},
+{ 685776, 3, {157,78,56}},
+{ 685800, 3, {127,75,72}},
+{ 685860, 3, {105,92,71}},
+{ 685908, 3, {108,87,73}},
+{ 685944, 3, {1361,24,21}},
+{ 686000, 3, {100,98,70}},
+{ 686070, 3, {99,90,77}},
+{ 686136, 3, {113,88,69}},
+{ 686160, 3, {953,30,24}},
+{ 686205, 3, {117,85,69}},
+{ 686256, 3, {116,87,68}},
+{ 686280, 3, {95,86,84}},
+{ 686304, 3, {2383,18,16}},
+{ 686376, 3, {9533,9,8}},
+{ 686400, 3, {100,88,78}},
+{ 686448, 3, {227,56,54}},
+{ 686475, 3, {113,81,75}},
+{ 686532, 3, {743,33,28}},
+{ 686560, 3, {613,35,32}},
+{ 686565, 3, {99,95,73}},
+{ 686592, 3, {149,72,64}},
+{ 686640, 3, {2861,16,15}},
+{ 686664, 3, {102,99,68}},
+{ 686700, 3, {109,84,75}},
+{ 686712, 3, {104,93,71}},
+{ 686736, 3, {251,57,48}},
+{ 686784, 3, {98,96,73}},
+{ 686800, 3, {101,85,80}},
+{ 686808, 3, {9539,9,8}},
+{ 686840, 3, {223,56,55}},
+{ 686880, 3, {106,81,80}},
+{ 686952, 3, {94,87,84}},
+{ 686964, 3, {131,76,69}},
+{ 687015, 3, {727,35,27}},
+{ 687024, 3, {367,48,39}},
+{ 687060, 3, {347,45,44}},
+{ 687120, 3, {409,42,40}},
+{ 687200, 3, {859,32,25}},
+{ 687204, 3, {101,84,81}},
+{ 687225, 3, {105,85,77}},
+{ 687300, 3, {100,87,79}},
+{ 687360, 3, {179,64,60}},
+{ 687384, 3, {9547,9,8}},
+{ 687400, 3, {491,40,35}},
+{ 687420, 3, {108,95,67}},
+{ 687456, 3, {93,88,84}},
+{ 687480, 3, {337,51,40}},
+{ 687528, 3, {1061,27,24}},
+{ 687540, 3, {1637,21,20}},
+{ 687648, 3, {104,87,76}},
+{ 687672, 3, {9551,9,8}},
+{ 687720, 3, {521,40,33}},
+{ 687744, 3, {199,64,54}},
+{ 687780, 3, {3821,15,12}},
+{ 687825, 3, {1019,27,25}},
+{ 687888, 3, {281,51,48}},
+{ 687960, 3, {91,90,84}},
+{ 687990, 3, {102,95,71}},
+{ 688032, 3, {2389,18,16}},
+{ 688116, 3, {401,44,39}},
+{ 688140, 3, {3823,15,12}},
+{ 688160, 3, {92,88,85}},
+{ 688176, 3, {118,81,72}},
+{ 688200, 3, {100,93,74}},
+{ 688248, 3, {99,88,79}},
+{ 688296, 3, {241,56,51}},
+{ 688320, 3, {239,60,48}},
+{ 688344, 3, {92,87,86}},
+{ 688352, 3, {439,49,32}},
+{ 688450, 3, {281,50,49}},
+{ 688500, 3, {90,90,85}},
+{ 688512, 3, {163,66,64}},
+{ 688545, 3, {107,99,65}},
+{ 688608, 3, {797,32,27}},
+{ 688688, 3, {91,88,86}},
+{ 688704, 3, {211,64,51}},
+{ 688716, 3, {911,28,27}},
+{ 688824, 3, {1063,27,24}},
+{ 688896, 3, {96,92,78}},
+{ 688905, 3, {105,81,81}},
+{ 688908, 3, {307,51,44}},
+{ 688950, 3, {1531,25,18}},
+{ 688968, 3, {1367,24,21}},
+{ 689040, 3, {90,88,87}},
+{ 689052, 3, {631,39,28}},
+{ 689130, 3, {95,93,78}},
+{ 689136, 3, {293,49,48}},
+{ 689175, 3, {1021,27,25}},
+{ 689184, 3, {2393,18,16}},
+{ 689220, 3, {547,36,35}},
+{ 689283, 3, {521,49,27}},
+{ 689310, 3, {115,81,74}},
+{ 689316, 3, {109,93,68}},
+{ 689325, 3, {101,91,75}},
+{ 689364, 3, {491,39,36}},
+{ 689400, 3, {383,45,40}},
+{ 689520, 3, {104,85,78}},
+{ 689535, 3, {199,63,55}},
+{ 689568, 3, {653,33,32}},
+{ 689580, 3, {1277,27,20}},
+{ 689688, 3, {103,93,72}},
+{ 689700, 3, {110,95,66}},
+{ 689715, 3, {131,81,65}},
+{ 689808, 3, {2053,21,16}},
+{ 689832, 3, {104,99,67}},
+{ 689850, 3, {105,90,73}},
+{ 689920, 3, {98,88,80}},
+{ 689940, 3, {3833,15,12}},
+{ 689976, 3, {111,84,74}},
+{ 690000, 3, {100,92,75}},
+{ 690030, 3, {99,85,82}},
+{ 690048, 3, {599,36,32}},
+{ 690144, 3, {96,91,79}},
+{ 690165, 3, {313,49,45}},
+{ 690228, 3, {99,84,83}},
+{ 690240, 3, {719,32,30}},
+{ 690264, 3, {9587,9,8}},
+{ 690336, 3, {102,94,72}},
+{ 690360, 3, {523,40,33}},
+{ 690400, 3, {863,32,25}},
+{ 690432, 3, {116,93,64}},
+{ 690480, 3, {137,72,70}},
+{ 690552, 3, {139,72,69}},
+{ 690600, 3, {1151,25,24}},
+{ 690606, 3, {98,87,81}},
+{ 690612, 3, {233,57,52}},
+{ 690660, 3, {1279,27,20}},
+{ 690690, 3, {115,78,77}},
+{ 690768, 3, {104,82,81}},
+{ 690795, 3, {129,85,63}},
+{ 690800, 3, {157,80,55}},
+{ 690900, 3, {98,94,75}},
+{ 690912, 3, {2399,18,16}},
+{ 690960, 3, {2879,16,15}},
+{ 691020, 3, {349,45,44}},
+{ 691040, 3, {617,35,32}},
+{ 691080, 3, {443,40,39}},
+{ 691152, 3, {102,88,77}},
+{ 691200, 3, {96,90,80}},
+{ 691236, 3, {211,63,52}},
+{ 691272, 3, {9601,9,8}},
+{ 691380, 3, {167,69,60}},
+{ 691416, 3, {97,88,81}},
+{ 691425, 3, {439,45,35}},
+{ 691470, 3, {197,65,54}},
+{ 691560, 3, {113,85,72}},
+{ 691600, 3, {95,91,80}},
+{ 691656, 3, {179,69,56}},
+{ 691680, 3, {131,80,66}},
+{ 691740, 3, {108,105,61}},
+{ 691752, 3, {111,82,76}},
+{ 691800, 3, {1153,25,24}},
+{ 691824, 3, {112,87,71}},
+{ 691880, 3, {353,49,40}},
+{ 691920, 3, {93,93,80}},
+{ 691929, 3, {523,49,27}},
+{ 691950, 3, {659,35,30}},
+{ 691992, 3, {1373,24,21}},
+{ 692010, 3, {233,55,54}},
+{ 692064, 3, {96,89,81}},
+{ 692076, 3, {107,84,77}},
+{ 692120, 3, {121,88,65}},
+{ 692125, 3, {125,113,49}},
+{ 692136, 3, {9613,9,8}},
+{ 692160, 3, {103,84,80}},
+{ 692208, 3, {99,92,76}},
+{ 692244, 3, {123,84,67}},
+{ 692250, 3, {125,78,71}},
+{ 692307, 3, {111,81,77}},
+{ 692352, 3, {601,36,32}},
+{ 692460, 3, {3847,15,12}},
+{ 692484, 3, {193,69,52}},
+{ 692496, 3, {229,56,54}},
+{ 692550, 3, {95,90,81}},
+{ 692568, 3, {9619,9,8}},
+{ 692580, 3, {97,85,84}},
+{ 692640, 3, {104,90,74}},
+{ 692664, 3, {98,93,76}},
+{ 692685, 3, {733,35,27}},
+{ 692712, 3, {1069,27,24}},
+{ 692784, 3, {283,51,48}},
+{ 692820, 3, {1283,27,20}},
+{ 692856, 3, {9623,9,8}},
+{ 692874, 3, {94,91,81}},
+{ 692880, 3, {2887,16,15}},
+{ 693000, 3, {100,90,77}},
+{ 693036, 3, {93,92,81}},
+{ 693090, 3, {151,85,54}},
+{ 693120, 3, {96,95,76}},
+{ 693168, 3, {2063,21,16}},
+{ 693180, 3, {3851,15,12}},
+{ 693216, 3, {96,87,83}},
+{ 693264, 3, {101,88,78}},
+{ 693280, 3, {619,35,32}},
+{ 693288, 3, {9629,9,8}},
+{ 693312, 3, {157,69,64}},
+{ 693350, 3, {283,50,49}},
+{ 693360, 3, {107,81,80}},
+{ 693396, 3, {103,99,68}},
+{ 693432, 3, {9631,9,8}},
+{ 693440, 3, {197,64,55}},
+{ 693450, 3, {115,90,67}},
+{ 693504, 3, {96,86,84}},
+{ 693528, 3, {111,88,71}},
+{ 693540, 3, {3853,15,12}},
+{ 693600, 3, {96,85,85}},
+{ 693693, 3, {99,91,77}},
+{ 693792, 3, {99,96,73}},
+{ 693804, 3, {179,68,57}},
+{ 693875, 3, {125,91,61}},
+{ 693880, 3, {95,88,83}},
+{ 693888, 3, {139,78,64}},
+{ 693900, 3, {257,54,50}},
+{ 693924, 3, {751,33,28}},
+{ 694008, 3, {102,84,81}},
+{ 694050, 3, {661,35,30}},
+{ 694080, 3, {241,60,48}},
+{ 694260, 3, {95,87,84}},
+{ 694296, 3, {9643,9,8}},
+{ 694320, 3, {263,55,48}},
+{ 694330, 3, {109,91,70}},
+{ 694350, 3, {1543,25,18}},
+{ 694368, 3, {2411,18,16}},
+{ 694485, 3, {115,99,61}},
+{ 694584, 3, {877,33,24}},
+{ 694620, 3, {227,60,51}},
+{ 694624, 3, {443,49,32}},
+{ 694656, 3, {108,96,67}},
+{ 694716, 3, {277,57,44}},
+{ 694720, 3, {167,65,64}},
+{ 694728, 3, {9649,9,8}},
+{ 694764, 3, {919,28,27}},
+{ 694960, 3, {112,85,73}},
+{ 695016, 3, {197,63,56}},
+{ 695040, 3, {181,64,60}},
+{ 695079, 3, {119,99,59}},
+{ 695136, 3, {557,39,32}},
+{ 695184, 3, {2069,21,16}},
+{ 695232, 3, {102,96,71}},
+{ 695240, 3, {191,65,56}},
+{ 695268, 3, {93,89,84}},
+{ 695280, 3, {2897,16,15}},
+{ 695304, 3, {108,87,74}},
+{ 695310, 3, {105,86,77}},
+{ 695340, 3, {3863,15,12}},
+{ 695385, 3, {101,85,81}},
+{ 695400, 3, {122,76,75}},
+{ 695457, 3, {133,83,63}},
+{ 695475, 3, {281,55,45}},
+{ 695592, 3, {9661,9,8}},
+{ 695604, 3, {91,91,84}},
+{ 695628, 3, {113,81,76}},
+{ 695640, 3, {93,88,85}},
+{ 695772, 3, {251,63,44}},
+{ 695800, 3, {100,98,71}},
+{ 695808, 3, {151,72,64}},
+{ 695844, 3, {379,51,36}},
+{ 695898, 3, {263,54,49}},
+{ 695904, 3, {659,33,32}},
+{ 695925, 3, {1031,27,25}},
+{ 695940, 3, {1657,21,20}},
+{ 695970, 3, {99,95,74}},
+{ 696000, 3, {100,87,80}},
+{ 696024, 3, {1381,24,21}},
+{ 696060, 3, {1289,27,20}},
+{ 696080, 3, {113,80,77}},
+{ 696096, 3, {2417,18,16}},
+{ 696150, 3, {91,90,85}},
+{ 696192, 3, {98,96,74}},
+{ 696240, 3, {967,30,24}},
+{ 696300, 3, {211,60,55}},
+{ 696348, 3, {92,87,87}},
+{ 696384, 3, {96,93,78}},
+{ 696540, 3, {95,94,78}},
+{ 696696, 3, {91,88,87}},
+{ 696720, 3, {2903,16,15}},
+{ 696744, 3, {9677,9,8}},
+{ 696768, 3, {191,64,57}},
+{ 696780, 3, {98,90,79}},
+{ 696864, 3, {112,102,61}},
+{ 696888, 3, {9679,9,8}},
+{ 696900, 3, {101,92,75}},
+{ 696960, 3, {90,88,88}},
+{ 697050, 3, {1549,25,18}},
+{ 697125, 3, {143,75,65}},
+{ 697140, 3, {1291,27,20}},
+{ 697221, 3, {119,93,63}},
+{ 697248, 3, {269,54,48}},
+{ 697275, 3, {1033,27,25}},
+{ 697320, 3, {149,72,65}},
+{ 697356, 3, {587,36,33}},
+{ 697410, 3, {105,82,81}},
+{ 697452, 3, {133,76,69}},
+{ 697476, 3, {263,52,51}},
+{ 697500, 3, {100,93,75}},
+{ 697515, 3, {105,91,73}},
+{ 697536, 3, {173,64,63}},
+{ 697608, 3, {9689,9,8}},
+{ 697725, 3, {443,45,35}},
+{ 697752, 3, {881,33,24}},
+{ 697760, 3, {98,89,80}},
+{ 697788, 3, {108,91,71}},
+{ 697800, 3, {1163,25,24}},
+{ 697824, 3, {2423,18,16}},
+{ 697851, 3, {133,99,53}},
+{ 697860, 3, {3877,15,12}},
+{ 697872, 3, {112,93,67}},
+{ 697884, 3, {311,51,44}},
+{ 697920, 3, {727,32,30}},
+{ 698016, 3, {661,33,32}},
+{ 698040, 3, {277,56,45}},
+{ 698088, 3, {118,87,68}},
+{ 698100, 3, {179,65,60}},
+{ 698152, 3, {137,91,56}},
+{ 698160, 3, {2909,16,15}},
+{ 698184, 3, {9697,9,8}},
+{ 698220, 3, {431,45,36}},
+{ 698250, 3, {98,95,75}},
+{ 698256, 3, {373,48,39}},
+{ 698292, 3, {163,68,63}},
+{ 698355, 3, {739,35,27}},
+{ 698360, 3, {104,85,79}},
+{ 698400, 3, {97,90,80}},
+{ 698445, 3, {99,85,83}},
+{ 698460, 3, {1663,21,20}},
+{ 698490, 3, {199,65,54}},
+{ 698544, 3, {99,84,84}},
+{ 698580, 3, {3881,15,12}},
+{ 698600, 3, {499,40,35}},
+{ 698625, 3, {115,81,75}},
+{ 698700, 3, {137,75,68}},
+{ 698775, 3, {121,77,75}},
+{ 698832, 3, {211,69,48}},
+{ 698850, 3, {1553,25,18}},
+{ 698880, 3, {96,91,80}},
+{ 698940, 3, {353,45,44}},
+{ 698976, 3, {809,32,27}},
+{ 698985, 3, {317,49,45}},
+{ 699075, 3, {239,65,45}},
+{ 699108, 3, {149,69,68}},
+{ 699120, 3, {971,30,24}},
+{ 699125, 3, {125,119,47}},
+{ 699160, 3, {227,56,55}},
+{ 699192, 3, {104,83,81}},
+{ 699200, 3, {95,92,80}},
+{ 699216, 3, {2081,21,16}},
+{ 699264, 3, {607,36,32}},
+{ 699270, 3, {163,66,65}},
+{ 699300, 3, {105,90,74}},
+{ 699336, 3, {883,33,24}},
+{ 699360, 3, {94,93,80}},
+{ 699384, 3, {181,69,56}},
+{ 699435, 3, {157,81,55}},
+{ 699468, 3, {757,33,28}},
+{ 699516, 3, {127,81,68}},
+{ 699552, 3, {347,48,42}},
+{ 699600, 3, {106,88,75}},
+{ 699660, 3, {115,78,78}},
+{ 699720, 3, {98,85,84}},
+{ 699732, 3, {99,93,76}},
+{ 699768, 3, {9719,9,8}},
+{ 699840, 3, {96,90,81}},
+{ 699888, 3, {2083,21,16}},
+{ 699912, 3, {9721,9,8}},
+{ 699930, 3, {101,90,77}},
+{ 699960, 3, {307,57,40}},
+{ 699972, 3, {641,39,28}},
+{ 699975, 3, {135,85,61}},
+{ 700020, 3, {3889,15,12}},
+{ 700080, 3, {2917,16,15}},
+{ 700128, 3, {102,88,78}},
+{ 700140, 3, {1667,21,20}},
+{ 700188, 3, {111,83,76}},
+{ 700200, 3, {389,45,40}},
+{ 700224, 3, {521,42,32}},
+{ 700245, 3, {95,91,81}},
+{ 700380, 3, {1297,27,20}},
+{ 700400, 3, {103,85,80}},
+{ 700425, 3, {283,55,45}},
+{ 700440, 3, {449,40,39}},
+{ 700480, 3, {199,64,55}},
+{ 700488, 3, {94,92,81}},
+{ 700524, 3, {116,99,61}},
+{ 700560, 3, {139,72,70}},
+{ 700596, 3, {499,39,36}},
+{ 700650, 3, {173,75,54}},
+{ 700700, 3, {100,91,77}},
+{ 700704, 3, {811,32,27}},
+{ 700740, 3, {229,60,51}},
+{ 700776, 3, {9733,9,8}},
+{ 700800, 3, {100,96,73}},
+{ 700812, 3, {103,84,81}},
+{ 700872, 3, {106,87,76}},
+{ 700920, 3, {110,108,59}},
+{ 700980, 3, {1669,21,20}},
+{ 701040, 3, {127,80,69}},
+{ 701100, 3, {95,90,82}},
+{ 701208, 3, {9739,9,8}},
+{ 701220, 3, {116,93,65}},
+{ 701232, 3, {2087,21,16}},
+{ 701316, 3, {99,92,77}},
+{ 701325, 3, {1039,27,25}},
+{ 701400, 3, {167,70,60}},
+{ 701415, 3, {109,99,65}},
+{ 701460, 3, {433,45,36}},
+{ 701480, 3, {104,95,71}},
+{ 701496, 3, {9743,9,8}},
+{ 701505, 3, {131,85,63}},
+{ 701520, 3, {111,80,79}},
+{ 701550, 3, {1559,25,18}},
+{ 701556, 3, {181,68,57}},
+{ 701568, 3, {96,87,84}},
+{ 701592, 3, {93,92,82}},
+{ 701600, 3, {877,32,25}},
+{ 701610, 3, {257,65,42}},
+{ 701624, 3, {119,88,67}},
+{ 701760, 3, {96,86,85}},
+{ 701784, 3, {114,81,76}},
+{ 701820, 3, {557,36,35}},
+{ 701844, 3, {409,44,39}},
+{ 701856, 3, {2437,18,16}},
+{ 701904, 3, {2089,21,16}},
+{ 701925, 3, {191,75,49}},
+{ 701928, 3, {9749,9,8}},
+{ 702072, 3, {199,63,56}},
+{ 702135, 3, {743,35,27}},
+{ 702156, 3, {643,39,28}},
+{ 702240, 3, {95,88,84}},
+{ 702270, 3, {102,85,81}},
+{ 702324, 3, {929,28,27}},
+{ 702336, 3, {118,93,64}},
+{ 702372, 3, {313,51,44}},
+{ 702432, 3, {271,54,48}},
+{ 702464, 3, {112,98,64}},
+{ 702480, 3, {2927,16,15}},
+{ 702504, 3, {887,33,24}},
+{ 702513, 3, {147,81,59}},
+{ 702520, 3, {193,65,56}},
+{ 702540, 3, {1301,27,20}},
+{ 702600, 3, {1171,25,24}},
+{ 702624, 3, {563,39,32}},
+{ 702625, 3, {125,77,73}},
+{ 702660, 3, {239,60,49}},
+{ 702702, 3, {99,91,78}},
+{ 702780, 3, {106,85,78}},
+{ 702856, 3, {163,77,56}},
+{ 702900, 3, {100,99,71}},
+{ 702912, 3, {523,42,32}},
+{ 702960, 3, {101,87,80}},
+{ 702975, 3, {103,91,75}},
+{ 703008, 3, {2441,18,16}},
+{ 703080, 3, {93,90,84}},
+{ 703120, 3, {94,88,85}},
+{ 703152, 3, {257,57,48}},
+{ 703164, 3, {761,33,28}},
+{ 703188, 3, {383,51,36}},
+{ 703200, 3, {293,50,48}},
+{ 703224, 3, {9767,9,8}},
+{ 703248, 3, {92,91,84}},
+{ 703260, 3, {3907,15,12}},
+{ 703296, 3, {99,96,74}},
+{ 703360, 3, {157,70,64}},
+{ 703368, 3, {9769,9,8}},
+{ 703395, 3, {105,87,77}},
+{ 703440, 3, {977,30,24}},
+{ 703500, 3, {105,100,67}},
+{ 703584, 3, {349,48,42}},
+{ 703620, 3, {1303,27,20}},
+{ 703640, 3, {359,49,40}},
+{ 703647, 3, {119,81,73}},
+{ 703680, 3, {733,32,30}},
+{ 703800, 3, {92,90,85}},
+{ 703824, 3, {93,88,86}},
+{ 703872, 3, {96,94,78}},
+{ 703920, 3, {419,42,40}},
+{ 703950, 3, {95,95,78}},
+{ 703980, 3, {3911,15,12}},
+{ 704004, 3, {119,87,68}},
+{ 704032, 3, {449,49,32}},
+{ 704064, 3, {193,64,57}},
+{ 704088, 3, {127,77,72}},
+{ 704200, 3, {503,40,35}},
+{ 704232, 3, {9781,9,8}},
+{ 704256, 3, {131,84,64}},
+{ 704340, 3, {91,90,86}},
+{ 704352, 3, {92,88,87}},
+{ 704375, 3, {125,115,49}},
+{ 704376, 3, {1087,27,24}},
+{ 704480, 3, {112,85,74}},
+{ 704484, 3, {593,36,33}},
+{ 704550, 3, {122,77,75}},
+{ 704592, 3, {233,56,54}},
+{ 704628, 3, {111,92,69}},
+{ 704664, 3, {9787,9,8}},
+{ 704704, 3, {91,88,88}},
+{ 704718, 3, {119,94,63}},
+{ 704736, 3, {2447,18,16}},
+{ 704748, 3, {281,57,44}},
+{ 704781, 3, {113,81,77}},
+{ 704800, 3, {881,32,25}},
+{ 704880, 3, {90,89,88}},
+{ 704925, 3, {241,65,45}},
+{ 704952, 3, {9791,9,8}},
+{ 705012, 3, {109,84,77}},
+{ 705024, 3, {102,96,72}},
+{ 705060, 3, {3917,15,12}},
+{ 705096, 3, {1399,24,21}},
+{ 705120, 3, {113,80,78}},
+{ 705150, 3, {1567,25,18}},
+{ 705159, 3, {123,91,63}},
+{ 705180, 3, {105,92,73}},
+{ 705250, 3, {125,91,62}},
+{ 705264, 3, {2099,21,16}},
+{ 705312, 3, {96,93,79}},
+{ 705320, 3, {229,56,55}},
+{ 705360, 3, {2939,16,15}},
+{ 705375, 3, {99,95,75}},
+{ 705408, 3, {167,66,64}},
+{ 705420, 3, {3919,15,12}},
+{ 705672, 3, {99,88,81}},
+{ 705744, 3, {104,87,78}},
+{ 705780, 3, {1307,27,20}},
+{ 705816, 3, {9803,9,8}},
+{ 705900, 3, {181,65,60}},
+{ 705915, 3, {105,83,81}},
+{ 705936, 3, {191,66,56}},
+{ 706056, 3, {104,93,73}},
+{ 706090, 3, {131,77,70}},
+{ 706095, 3, {117,85,71}},
+{ 706140, 3, {3923,15,12}},
+{ 706160, 3, {97,91,80}},
+{ 706176, 3, {613,36,32}},
+{ 706200, 3, {107,88,75}},
+{ 706212, 3, {503,39,36}},
+{ 706230, 3, {118,95,63}},
+{ 706320, 3, {109,81,80}},
+{ 706392, 3, {9811,9,8}},
+{ 706400, 3, {883,32,25}},
+{ 706464, 3, {223,66,48}},
+{ 706482, 3, {98,89,81}},
+{ 706500, 3, {157,75,60}},
+{ 706524, 3, {647,39,28}},
+{ 706650, 3, {673,35,30}},
+{ 706680, 3, {151,72,65}},
+{ 706720, 3, {631,35,32}},
+{ 706800, 3, {95,93,80}},
+{ 706824, 3, {9817,9,8}},
+{ 706836, 3, {197,69,52}},
+{ 706860, 3, {99,85,84}},
+{ 706950, 3, {1571,25,18}},
+{ 706968, 3, {1091,27,24}},
+{ 706992, 3, {103,88,78}},
+{ 707070, 3, {105,91,74}},
+{ 707112, 3, {122,84,69}},
+{ 707136, 3, {127,87,64}},
+{ 707175, 3, {449,45,35}},
+{ 707200, 3, {104,85,80}},
+{ 707220, 3, {3929,15,12}},
+{ 707256, 3, {99,94,76}},
+{ 707280, 3, {421,42,40}},
+{ 707370, 3, {102,95,73}},
+{ 707400, 3, {131,75,72}},
+{ 707484, 3, {107,87,76}},
+{ 707520, 3, {110,96,67}},
+{ 707580, 3, {3931,15,12}},
+{ 707616, 3, {96,91,81}},
+{ 707688, 3, {9829,9,8}},
+{ 707760, 3, {983,30,24}},
+{ 707832, 3, {113,87,72}},
+{ 707850, 3, {110,99,65}},
+{ 707880, 3, {347,51,40}},
+{ 707940, 3, {95,92,81}},
+{ 707976, 3, {9833,9,8}},
+{ 708000, 3, {118,80,75}},
+{ 708048, 3, {149,72,66}},
+{ 708075, 3, {1049,27,25}},
+{ 708120, 3, {281,56,45}},
+{ 708192, 3, {2459,18,16}},
+{ 708264, 3, {1093,27,24}},
+{ 708288, 3, {112,93,68}},
+{ 708344, 3, {139,91,56}},
+{ 708372, 3, {937,28,27}},
+{ 708396, 3, {239,57,52}},
+{ 708400, 3, {100,92,77}},
+{ 708408, 3, {9839,9,8}},
+{ 708435, 3, {173,65,63}},
+{ 708480, 3, {96,90,82}},
+{ 708492, 3, {151,69,68}},
+{ 708510, 3, {113,95,66}},
+{ 708540, 3, {241,60,49}},
+{ 708600, 3, {1181,25,24}},
+{ 708624, 3, {111,84,76}},
+{ 708630, 3, {115,79,78}},
+{ 708720, 3, {2953,16,15}},
+{ 708736, 3, {113,98,64}},
+{ 708750, 3, {105,90,75}},
+{ 708876, 3, {97,87,84}},
+{ 708900, 3, {139,75,68}},
+{ 709080, 3, {311,57,40}},
+{ 709104, 3, {102,88,79}},
+{ 709128, 3, {108,98,67}},
+{ 709155, 3, {103,85,81}},
+{ 709170, 3, {307,55,42}},
+{ 709272, 3, {9851,9,8}},
+{ 709275, 3, {193,75,49}},
+{ 709296, 3, {2111,21,16}},
+{ 709344, 3, {821,32,27}},
+{ 709380, 3, {563,36,35}},
+{ 709410, 3, {107,85,78}},
+{ 709425, 3, {1051,27,25}},
+{ 709440, 3, {739,32,30}},
+{ 709488, 3, {379,48,39}},
+{ 709600, 3, {887,32,25}},
+{ 709632, 3, {96,88,84}},
+{ 709650, 3, {95,90,83}},
+{ 709680, 3, {2957,16,15}},
+{ 709695, 3, {751,35,27}},
+{ 709704, 3, {9857,9,8}},
+{ 709740, 3, {3943,15,12}},
+{ 709764, 3, {283,57,44}},
+{ 709776, 3, {106,93,72}},
+{ 709800, 3, {100,91,78}},
+{ 709830, 3, {239,55,54}},
+{ 709848, 3, {9859,9,8}},
+{ 709920, 3, {96,87,85}},
+{ 709968, 3, {2113,21,16}},
+{ 709992, 3, {173,72,57}},
+{ 710073, 3, {119,117,51}},
+{ 710100, 3, {263,54,50}},
+{ 710112, 3, {569,39,32}},
+{ 710136, 3, {1409,24,21}},
+{ 710148, 3, {93,92,83}},
+{ 710160, 3, {269,55,48}},
+{ 710220, 3, {95,89,84}},
+{ 710325, 3, {123,77,75}},
+{ 710400, 3, {100,96,74}},
+{ 710424, 3, {99,92,78}},
+{ 710460, 3, {3947,15,12}},
+{ 710496, 3, {2467,18,16}},
+{ 710500, 3, {125,98,58}},
+{ 710550, 3, {1579,25,18}},
+{ 710556, 3, {769,33,28}},
+{ 710600, 3, {95,88,85}},
+{ 710688, 3, {673,33,32}},
+{ 710700, 3, {103,92,75}},
+{ 710710, 3, {110,91,71}},
+{ 710712, 3, {9871,9,8}},
+{ 710736, 3, {104,102,67}},
+{ 710775, 3, {117,81,75}},
+{ 710784, 3, {617,36,32}},
+{ 710820, 3, {359,45,44}},
+{ 710850, 3, {677,35,30}},
+{ 710856, 3, {1097,27,24}},
+{ 710875, 3, {125,121,47}},
+{ 710892, 3, {93,91,84}},
+{ 711018, 3, {114,81,77}},
+{ 711060, 3, {1693,21,20}},
+{ 711072, 3, {823,32,27}},
+{ 711120, 3, {2963,16,15}},
+{ 711180, 3, {439,45,36}},
+{ 711200, 3, {127,80,70}},
+{ 711312, 3, {112,87,73}},
+{ 711348, 3, {317,51,44}},
+{ 711360, 3, {96,95,78}},
+{ 711396, 3, {941,28,27}},
+{ 711450, 3, {93,90,85}},
+{ 711480, 3, {105,88,77}},
+{ 711576, 3, {9883,9,8}},
+{ 711612, 3, {599,36,33}},
+{ 711648, 3, {353,48,42}},
+{ 711711, 3, {99,91,79}},
+{ 711750, 3, {125,78,73}},
+{ 711774, 3, {269,54,49}},
+{ 711816, 3, {223,57,56}},
+{ 711864, 3, {9887,9,8}},
+{ 711900, 3, {113,84,75}},
+{ 711960, 3, {349,51,40}},
+{ 711984, 3, {163,78,56}},
+{ 712008, 3, {93,88,87}},
+{ 712096, 3, {119,88,68}},
+{ 712152, 3, {157,72,63}},
+{ 712200, 3, {1187,25,24}},
+{ 712215, 3, {119,95,63}},
+{ 712224, 3, {2473,18,16}},
+{ 712250, 3, {125,77,74}},
+{ 712260, 3, {1319,27,20}},
+{ 712272, 3, {114,88,71}},
+{ 712320, 3, {106,84,80}},
+{ 712350, 3, {1583,25,18}},
+{ 712356, 3, {92,89,87}},
+{ 712368, 3, {102,97,72}},
+{ 712400, 3, {137,80,65}},
+{ 712404, 3, {257,63,44}},
+{ 712470, 3, {127,85,66}},
+{ 712530, 3, {91,90,87}},
+{ 712560, 3, {2969,16,15}},
+{ 712600, 3, {509,40,35}},
+{ 712608, 3, {571,39,32}},
+{ 712712, 3, {91,89,88}},
+{ 712740, 3, {1697,21,20}},
+{ 712800, 3, {90,90,88}},
+{ 712872, 3, {9901,9,8}},
+{ 712880, 3, {112,95,67}},
+{ 712908, 3, {123,84,69}},
+{ 712920, 3, {457,40,39}},
+{ 712950, 3, {98,97,75}},
+{ 712980, 3, {233,60,51}},
+{ 713040, 3, {2971,16,15}},
+{ 713064, 3, {111,88,73}},
+{ 713076, 3, {653,39,28}},
+{ 713088, 3, {619,36,32}},
+{ 713097, 3, {147,77,63}},
+{ 713115, 3, {117,115,53}},
+{ 713124, 3, {108,93,71}},
+{ 713160, 3, {283,56,45}},
+{ 713232, 3, {127,78,72}},
+{ 713280, 3, {743,32,30}},
+{ 713286, 3, {119,81,74}},
+{ 713304, 3, {9907,9,8}},
+{ 713328, 3, {193,66,56}},
+{ 713340, 3, {1321,27,20}},
+{ 713376, 3, {2477,18,16}},
+{ 713388, 3, {269,52,51}},
+{ 713400, 3, {100,87,82}},
+{ 713412, 3, {149,76,63}},
+{ 713440, 3, {98,91,80}},
+{ 713520, 3, {991,30,24}},
+{ 713580, 3, {1699,21,20}},
+{ 713592, 3, {106,99,68}},
+{ 713600, 3, {223,64,50}},
+{ 713640, 3, {313,57,40}},
+{ 713790, 3, {103,90,77}},
+{ 713856, 3, {104,88,78}},
+{ 713868, 3, {101,93,76}},
+{ 713952, 3, {111,96,67}},
+{ 713988, 3, {601,36,33}},
+{ 714000, 3, {100,85,84}},
+{ 714012, 3, {199,69,52}},
+{ 714060, 3, {3967,15,12}},
+{ 714096, 3, {108,87,76}},
+{ 714120, 3, {541,40,33}},
+{ 714150, 3, {115,90,69}},
+{ 714175, 3, {175,77,53}},
+{ 714204, 3, {389,51,36}},
+{ 714240, 3, {96,93,80}},
+{ 714252, 3, {773,33,28}},
+{ 714285, 3, {111,99,65}},
+{ 714324, 3, {241,57,52}},
+{ 714384, 3, {99,88,82}},
+{ 714400, 3, {95,94,80}},
+{ 714420, 3, {98,90,81}},
+{ 714456, 3, {9923,9,8}},
+{ 714528, 3, {827,32,27}},
+{ 714560, 3, {116,80,77}},
+{ 714600, 3, {397,45,40}},
+{ 714612, 3, {113,93,68}},
+{ 714636, 3, {509,39,36}},
+{ 714744, 3, {1103,27,24}},
+{ 714780, 3, {99,95,76}},
+{ 714792, 3, {104,87,79}},
+{ 714816, 3, {102,96,73}},
+{ 714840, 3, {105,92,74}},
+{ 714875, 3, {133,125,43}},
+{ 714888, 3, {9929,9,8}},
+{ 714912, 3, {677,33,32}},
+{ 714960, 3, {331,48,45}},
+{ 714987, 3, {97,91,81}},
+{ 715008, 3, {98,96,76}},
+{ 715032, 3, {9931,9,8}},
+{ 715140, 3, {137,87,60}},
+{ 715176, 3, {99,86,84}},
+{ 715200, 3, {149,75,64}},
+{ 715275, 3, {99,85,85}},
+{ 715344, 3, {2129,21,16}},
+{ 715365, 3, {757,35,27}},
+{ 715392, 3, {96,92,81}},
+{ 715400, 3, {100,98,73}},
+{ 715428, 3, {167,68,63}},
+{ 715440, 3, {271,55,48}},
+{ 715635, 3, {95,93,81}},
+{ 715680, 3, {105,96,71}},
+{ 715728, 3, {104,93,74}},
+{ 715743, 3, {541,49,27}},
+{ 715752, 3, {9941,9,8}},
+{ 715770, 3, {241,55,54}},
+{ 715800, 3, {1193,25,24}},
+{ 715836, 3, {121,87,68}},
+{ 715932, 3, {947,28,27}},
+{ 716016, 3, {2131,21,16}},
+{ 716040, 3, {104,85,81}},
+{ 716100, 3, {100,93,77}},
+{ 716175, 3, {1061,27,25}},
+{ 716184, 3, {98,87,84}},
+{ 716220, 3, {173,69,60}},
+{ 716256, 3, {829,32,27}},
+{ 716328, 3, {9949,9,8}},
+{ 716352, 3, {96,91,82}},
+{ 716364, 3, {108,99,67}},
+{ 716430, 3, {167,66,65}},
+{ 716472, 3, {107,93,72}},
+{ 716496, 3, {118,88,69}},
+{ 716576, 3, {457,49,32}},
+{ 716580, 3, {1327,27,20}},
+{ 716625, 3, {105,91,75}},
+{ 716850, 3, {118,81,75}},
+{ 716856, 3, {251,56,51}},
+{ 716880, 3, {103,87,80}},
+{ 716925, 3, {121,79,75}},
+{ 716940, 3, {569,36,35}},
+{ 716976, 3, {383,48,39}},
+{ 717060, 3, {102,95,74}},
+{ 717066, 3, {271,54,49}},
+{ 717080, 3, {197,65,56}},
+{ 717120, 3, {96,90,83}},
+{ 717150, 3, {683,35,30}},
+{ 717192, 3, {1423,24,21}},
+{ 717200, 3, {163,80,55}},
+{ 717264, 3, {293,51,48}},
+{ 717360, 3, {112,105,61}},
+{ 717444, 3, {108,91,73}},
+{ 717525, 3, {1063,27,25}},
+{ 717552, 3, {151,72,66}},
+{ 717624, 3, {9967,9,8}},
+{ 717640, 3, {233,56,55}},
+{ 717660, 3, {443,45,36}},
+{ 717696, 3, {96,89,84}},
+{ 717780, 3, {1709,21,20}},
+{ 717840, 3, {997,30,24}},
+{ 717850, 3, {293,50,49}},
+{ 717920, 3, {641,35,32}},
+{ 717984, 3, {277,54,48}},
+{ 717990, 3, {263,65,42}},
+{ 718020, 3, {3989,15,12}},
+{ 718032, 3, {2137,21,16}},
+{ 718056, 3, {9973,9,8}},
+{ 718080, 3, {96,88,85}},
+{ 718200, 3, {95,90,84}},
+{ 718272, 3, {96,87,86}},
+{ 718344, 3, {907,33,24}},
+{ 718380, 3, {307,52,45}},
+{ 718410, 3, {311,55,42}},
+{ 718428, 3, {137,76,69}},
+{ 718536, 3, {94,91,84}},
+{ 718575, 3, {143,75,67}},
+{ 718632, 3, {1109,27,24}},
+{ 718641, 3, {119,99,61}},
+{ 718650, 3, {1597,25,18}},
+{ 718656, 3, {197,64,57}},
+{ 718692, 3, {271,52,51}},
+{ 718704, 3, {93,92,84}},
+{ 718770, 3, {97,95,78}},
+{ 718848, 3, {96,96,78}},
+{ 718875, 3, {125,81,71}},
+{ 718900, 3, {100,91,79}},
+{ 718960, 3, {95,88,86}},
+{ 719004, 3, {419,44,39}},
+{ 719040, 3, {107,84,80}},
+{ 719100, 3, {94,90,85}},
+{ 719136, 3, {227,66,48}},
+{ 719145, 3, {761,35,27}},
+{ 719160, 3, {461,40,39}},
+{ 719208, 3, {1427,24,21}},
+{ 719280, 3, {111,81,80}},
+{ 719320, 3, {367,49,40}},
+{ 719376, 3, {2141,21,16}},
+{ 719400, 3, {109,88,75}},
+{ 719460, 3, {571,36,35}},
+{ 719532, 3, {99,92,79}},
+{ 719565, 3, {105,89,77}},
+{ 719568, 3, {263,57,48}},
+{ 719628, 3, {659,39,28}},
+{ 719664, 3, {94,88,87}},
+{ 719680, 3, {173,65,64}},
+{ 719760, 3, {2999,16,15}},
+{ 719775, 3, {457,45,35}},
+{ 719808, 3, {163,69,64}},
+{ 719810, 3, {113,91,70}},
+{ 719928, 3, {101,88,81}},
+{ 720000, 3, {100,90,80}},
+{ 720048, 3, {2143,21,16}},
+{ 720090, 3, {127,81,70}},
+{ 720096, 3, {577,39,32}},
+{ 720104, 3, {167,77,56}},
+{ 720120, 3, {353,51,40}},
+{ 720160, 3, {643,35,32}},
+{ 720180, 3, {4001,15,12}},
+{ 720192, 3, {93,88,88}},
+{ 720216, 3, {1429,24,21}},
+{ 720240, 3, {3001,16,15}},
+{ 720300, 3, {98,98,75}},
+{ 720324, 3, {107,99,68}},
+{ 720360, 3, {92,90,87}},
+{ 720450, 3, {1601,25,18}},
+{ 720468, 3, {953,28,27}},
+{ 720480, 3, {96,95,79}},
+{ 720504, 3, {10007,9,8}},
+{ 720540, 3, {4003,15,12}},
+{ 720594, 3, {133,86,63}},
+{ 720600, 3, {1201,25,24}},
+{ 720630, 3, {157,85,54}},
+{ 720648, 3, {10009,9,8}},
+{ 720708, 3, {109,87,76}},
+{ 720720, 3, {91,90,88}},
+{ 720800, 3, {106,85,80}},
+{ 720864, 3, {2503,18,16}},
+{ 720936, 3, {102,93,76}},
+{ 720960, 3, {751,32,30}},
+{ 721056, 3, {112,87,74}},
+{ 721116, 3, {607,36,33}},
+{ 721140, 3, {101,85,84}},
+{ 721188, 3, {117,92,67}},
+{ 721224, 3, {106,84,81}},
+{ 721240, 3, {104,95,73}},
+{ 721248, 3, {683,33,32}},
+{ 721260, 3, {4007,15,12}},
+{ 721280, 3, {98,92,80}},
+{ 721305, 3, {137,81,65}},
+{ 721344, 3, {104,102,68}},
+{ 721500, 3, {111,100,65}},
+{ 721512, 3, {911,33,24}},
+{ 721548, 3, {131,81,68}},
+{ 721575, 3, {1069,27,25}},
+{ 721620, 3, {211,60,57}},
+{ 721644, 3, {121,84,71}},
+{ 721680, 3, {97,93,80}},
+{ 721728, 3, {179,64,63}},
+{ 721752, 3, {122,87,68}},
+{ 721791, 3, {133,81,67}},
+{ 721800, 3, {401,45,40}},
+{ 721812, 3, {661,39,28}},
+{ 721875, 3, {125,77,75}},
+{ 721980, 3, {191,63,60}},
+{ 722000, 3, {95,95,80}},
+{ 722040, 3, {547,40,33}},
+{ 722064, 3, {307,49,48}},
+{ 722100, 3, {100,87,83}},
+{ 722160, 3, {118,85,72}},
+{ 722232, 3, {1433,24,21}},
+{ 722280, 3, {463,40,39}},
+{ 722304, 3, {99,96,76}},
+{ 722340, 3, {4013,15,12}},
+{ 722358, 3, {98,91,81}},
+{ 722436, 3, {421,44,39}},
+{ 722475, 3, {117,95,65}},
+{ 722640, 3, {3011,16,15}},
+{ 722664, 3, {10037,9,8}},
+{ 722670, 3, {109,85,78}},
+{ 722700, 3, {100,99,73}},
+{ 722736, 3, {239,56,54}},
+{ 722750, 3, {125,98,59}},
+{ 722760, 3, {317,57,40}},
+{ 722796, 3, {116,93,67}},
+{ 722799, 3, {149,77,63}},
+{ 722800, 3, {139,80,65}},
+{ 722808, 3, {10039,9,8}},
+{ 722820, 3, {1721,21,20}},
+{ 722832, 3, {111,88,74}},
+{ 722844, 3, {97,92,81}},
+{ 722848, 3, {461,49,32}},
+{ 722880, 3, {251,60,48}},
+{ 722925, 3, {105,85,81}},
+{ 722988, 3, {151,76,63}},
+{ 723030, 3, {313,55,42}},
+{ 723096, 3, {99,88,83}},
+{ 723120, 3, {131,80,69}},
+{ 723150, 3, {1607,25,18}},
+{ 723168, 3, {96,93,81}},
+{ 723240, 3, {98,90,82}},
+{ 723330, 3, {95,94,81}},
+{ 723360, 3, {137,80,66}},
+{ 723408, 3, {2153,21,16}},
+{ 723420, 3, {4019,15,12}},
+{ 723450, 3, {106,91,75}},
+{ 723456, 3, {157,72,64}},
+{ 723492, 3, {99,87,84}},
+{ 723520, 3, {112,85,76}},
+{ 723600, 3, {108,100,67}},
+{ 723660, 3, {1723,21,20}},
+{ 723681, 3, {547,49,27}},
+{ 723690, 3, {99,86,85}},
+{ 723744, 3, {359,48,42}},
+{ 723780, 3, {4021,15,12}},
+{ 723800, 3, {100,94,77}},
+{ 723816, 3, {1117,27,24}},
+{ 723840, 3, {104,87,80}},
+{ 723900, 3, {127,76,75}},
+{ 723975, 3, {197,75,49}},
+{ 724050, 3, {1609,25,18}},
+{ 724080, 3, {431,42,40}},
+{ 724140, 3, {149,81,60}},
+{ 724185, 3, {99,95,77}},
+{ 724360, 3, {199,65,56}},
+{ 724392, 3, {10061,9,8}},
+{ 724464, 3, {104,86,81}},
+{ 724500, 3, {105,92,75}},
+{ 724560, 3, {3019,16,15}},
+{ 724584, 3, {227,57,56}},
+{ 724608, 3, {102,96,74}},
+{ 724640, 3, {647,35,32}},
+{ 724680, 3, {110,108,61}},
+{ 724800, 3, {151,75,64}},
+{ 724812, 3, {187,68,57}},
+{ 724824, 3, {10067,9,8}},
+{ 724860, 3, {4027,15,12}},
+{ 724880, 3, {104,85,82}},
+{ 724896, 3, {839,32,27}},
+{ 724950, 3, {179,75,54}},
+{ 724968, 3, {10069,9,8}},
+{ 725052, 3, {111,92,71}},
+{ 725088, 3, {96,91,83}},
+{ 725175, 3, {293,55,45}},
+{ 725200, 3, {100,98,74}},
+{ 725208, 3, {123,88,67}},
+{ 725256, 3, {1439,24,21}},
+{ 725400, 3, {100,93,78}},
+{ 725472, 3, {229,66,48}},
+{ 725496, 3, {111,86,76}},
+{ 725520, 3, {3023,16,15}},
+{ 725550, 3, {691,35,30}},
+{ 725560, 3, {97,88,85}},
+{ 725580, 3, {139,87,60}},
+{ 725600, 3, {907,32,25}},
+{ 725688, 3, {10079,9,8}},
+{ 725760, 3, {96,90,84}},
+{ 725850, 3, {1613,25,18}},
+{ 725952, 3, {199,64,57}},
+{ 725984, 3, {463,49,32}},
+{ 725985, 3, {117,85,73}},
+{ 726000, 3, {110,88,75}},
+{ 726048, 3, {2521,18,16}},
+{ 726075, 3, {461,45,35}},
+{ 726096, 3, {2161,21,16}},
+{ 726144, 3, {122,93,64}},
+{ 726165, 3, {163,81,55}},
+{ 726180, 3, {95,91,84}},
+{ 726240, 3, {96,89,85}},
+{ 726264, 3, {131,77,72}},
+{ 726300, 3, {269,54,50}},
+{ 726327, 3, {147,81,61}},
+{ 726336, 3, {97,96,78}},
+{ 726400, 3, {227,64,50}},
+{ 726408, 3, {118,81,76}},
+{ 726440, 3, {127,88,65}},
+{ 726480, 3, {1009,30,24}},
+{ 726516, 3, {93,93,84}},
+{ 726552, 3, {10091,9,8}},
+{ 726570, 3, {115,81,78}},
+{ 726600, 3, {173,70,60}},
+{ 726624, 3, {96,87,87}},
+{ 726660, 3, {367,45,44}},
+{ 726696, 3, {10093,9,8}},
+{ 726705, 3, {769,35,27}},
+{ 726720, 3, {757,32,30}},
+{ 726750, 3, {95,90,85}},
+{ 726880, 3, {118,80,77}},
+{ 726912, 3, {631,36,32}},
+{ 727020, 3, {577,36,35}},
+{ 727056, 3, {102,88,81}},
+{ 727104, 3, {541,42,32}},
+{ 727128, 3, {10099,9,8}},
+{ 727155, 3, {113,99,65}},
+{ 727188, 3, {787,33,28}},
+{ 727200, 3, {101,90,80}},
+{ 727209, 3, {119,97,63}},
+{ 727260, 3, {93,92,85}},
+{ 727272, 3, {111,84,78}},
+{ 727320, 3, {95,88,87}},
+{ 727380, 3, {449,45,36}},
+{ 727416, 3, {10103,9,8}},
+{ 727440, 3, {433,42,40}},
+{ 727552, 3, {116,98,64}},
+{ 727584, 3, {106,88,78}},
+{ 727600, 3, {107,85,80}},
+{ 727650, 3, {99,98,75}},
+{ 727704, 3, {1123,27,24}},
+{ 727740, 3, {311,52,45}},
+{ 727800, 3, {1213,25,24}},
+{ 727848, 3, {919,33,24}},
+{ 727860, 3, {1733,21,20}},
+{ 727872, 3, {223,64,51}},
+{ 727920, 3, {337,48,45}},
+{ 727992, 3, {10111,9,8}},
+{ 728000, 3, {100,91,80}},
+{ 728004, 3, {103,93,76}},
+{ 728028, 3, {107,84,81}},
+{ 728091, 3, {127,91,63}},
+{ 728112, 3, {197,66,56}},
+{ 728160, 3, {111,82,80}},
+{ 728208, 3, {389,48,39}},
+{ 728244, 3, {613,36,33}},
+{ 728280, 3, {102,85,84}},
+{ 728352, 3, {281,54,48}},
+{ 728364, 3, {92,91,87}},
+{ 728376, 3, {93,89,88}},
+{ 728460, 3, {108,95,71}},
+{ 728520, 3, {467,40,39}},
+{ 728550, 3, {1619,25,18}},
+{ 728640, 3, {92,90,88}},
+{ 728728, 3, {91,91,88}},
+{ 728784, 3, {241,56,54}},
+{ 728800, 3, {911,32,25}},
+{ 728820, 3, {4049,15,12}},
+{ 728875, 3, {125,119,49}},
+{ 728880, 3, {3037,16,15}},
+{ 728892, 3, {397,51,36}},
+{ 728910, 3, {91,90,89}},
+{ 728916, 3, {139,76,69}},
+{ 728928, 3, {2531,18,16}},
+{ 728960, 3, {128,85,67}},
+{ 728973, 3, {133,87,63}},
+{ 729036, 3, {263,63,44}},
+{ 729120, 3, {98,93,80}},
+{ 729180, 3, {4051,15,12}},
+{ 729216, 3, {211,64,54}},
+{ 729225, 3, {463,45,35}},
+{ 729288, 3, {1447,24,21}},
+{ 729300, 3, {110,85,78}},
+{ 729360, 3, {1013,30,24}},
+{ 729400, 3, {521,40,35}},
+{ 729408, 3, {131,87,64}},
+{ 729450, 3, {1621,25,18}},
+{ 729456, 3, {167,78,56}},
+{ 729540, 3, {193,63,60}},
+{ 729560, 3, {115,104,61}},
+{ 729576, 3, {10133,9,8}},
+{ 729600, 3, {96,95,80}},
+{ 729696, 3, {691,33,32}},
+{ 729729, 3, {99,91,81}},
+{ 729792, 3, {181,64,63}},
+{ 729810, 3, {106,85,81}},
+{ 729828, 3, {99,97,76}},
+{ 729840, 3, {3041,16,15}},
+{ 729855, 3, {331,49,45}},
+{ 729864, 3, {109,93,72}},
+{ 729960, 3, {105,88,79}},
+{ 730008, 3, {10139,9,8}},
+{ 730080, 3, {104,90,78}},
+{ 730125, 3, {125,99,59}},
+{ 730152, 3, {10141,9,8}},
+{ 730200, 3, {1217,25,24}},
+{ 730240, 3, {163,70,64}},
+{ 730260, 3, {4057,15,12}},
+{ 730275, 3, {107,91,75}},
+{ 730296, 3, {98,92,81}},
+{ 730485, 3, {773,35,27}},
+{ 730548, 3, {223,63,52}},
+{ 730560, 3, {761,32,30}},
+{ 730730, 3, {110,91,73}},
+{ 730752, 3, {173,66,64}},
+{ 730800, 3, {100,87,84}},
+{ 730872, 3, {10151,9,8}},
+{ 730884, 3, {113,84,77}},
+{ 730944, 3, {96,94,81}},
+{ 730968, 3, {229,57,56}},
+{ 731016, 3, {104,99,71}},
+{ 731025, 3, {95,95,81}},
+{ 731052, 3, {967,28,27}},
+{ 731080, 3, {373,49,40}},
+{ 731115, 3, {211,63,55}},
+{ 731120, 3, {104,95,74}},
+{ 731220, 3, {1741,21,20}},
+{ 731232, 3, {2539,18,16}},
+{ 731250, 3, {125,78,75}},
+{ 731280, 3, {277,55,48}},
+{ 731304, 3, {1451,24,21}},
+{ 731325, 3, {199,75,49}},
+{ 731340, 3, {239,60,51}},
+{ 731360, 3, {653,35,32}},
+{ 731400, 3, {106,92,75}},
+{ 731430, 3, {105,86,81}},
+{ 731448, 3, {10159,9,8}},
+{ 731472, 3, {311,49,48}},
+{ 731484, 3, {521,39,36}},
+{ 731500, 3, {100,95,77}},
+{ 731592, 3, {1129,27,24}},
+{ 731640, 3, {105,104,67}},
+{ 731700, 3, {271,54,50}},
+{ 731736, 3, {10163,9,8}},
+{ 731760, 3, {3049,16,15}},
+{ 731808, 3, {99,88,84}},
+{ 731835, 3, {139,81,65}},
+{ 732000, 3, {122,80,75}},
+{ 732060, 3, {98,90,83}},
+{ 732096, 3, {96,93,82}},
+{ 732105, 3, {99,87,85}},
+{ 732144, 3, {2179,21,16}},
+{ 732150, 3, {1627,25,18}},
+{ 732168, 3, {10169,9,8}},
+{ 732200, 3, {523,40,35}},
+{ 732240, 3, {113,81,80}},
+{ 732256, 3, {467,49,32}},
+{ 732270, 3, {317,55,42}},
+{ 732312, 3, {1453,24,21}},
+{ 732336, 3, {114,88,73}},
+{ 732360, 3, {359,51,40}},
+{ 732384, 3, {2543,18,16}},
+{ 732420, 3, {313,52,45}},
+{ 732480, 3, {109,84,80}},
+{ 732501, 3, {151,77,63}},
+{ 732550, 3, {115,91,70}},
+{ 732564, 3, {119,81,76}},
+{ 732576, 3, {587,39,32}},
+{ 732600, 3, {100,99,74}},
+{ 732744, 3, {10177,9,8}},
+{ 732800, 3, {229,64,50}},
+{ 732875, 3, {143,125,41}},
+{ 732888, 3, {104,87,81}},
+{ 732942, 3, {277,54,49}},
+{ 732996, 3, {617,36,33}},
+{ 733005, 3, {179,65,63}},
+{ 733032, 3, {10181,9,8}},
+{ 733040, 3, {98,88,85}},
+{ 733050, 3, {181,75,54}},
+{ 733140, 3, {4073,15,12}},
+{ 733212, 3, {108,93,73}},
+{ 733248, 3, {114,96,67}},
+{ 733425, 3, {127,77,75}},
+{ 733440, 3, {191,64,60}},
+{ 733500, 3, {163,75,60}},
+{ 733536, 3, {283,54,48}},
+{ 733572, 3, {123,84,71}},
+{ 733584, 3, {116,93,68}},
+{ 733590, 3, {99,95,78}},
+{ 733600, 3, {131,80,70}},
+{ 733635, 3, {137,85,63}},
+{ 733680, 3, {1019,30,24}},
+{ 733720, 3, {104,85,83}},
+{ 733725, 3, {1087,27,25}},
+{ 733740, 3, {1747,21,20}},
+{ 733788, 3, {109,99,68}},
+{ 733800, 3, {1223,25,24}},
+{ 733824, 3, {96,91,84}},
+{ 733860, 3, {151,81,60}},
+{ 733896, 3, {10193,9,8}},
+{ 733920, 3, {139,80,66}},
+{ 733932, 3, {111,87,76}},
+{ 733992, 3, {257,56,51}},
+{ 734076, 3, {971,28,27}},
+{ 734112, 3, {2549,18,16}},
+{ 734160, 3, {95,92,84}},
+{ 734175, 3, {251,65,45}},
+{ 734184, 3, {103,88,81}},
+{ 734220, 3, {4079,15,12}},
+{ 734272, 3, {149,77,64}},
+{ 734292, 3, {523,39,36}},
+{ 734328, 3, {94,93,84}},
+{ 734370, 3, {269,65,42}},
+{ 734400, 3, {96,90,85}},
+{ 734448, 3, {107,88,78}},
+{ 734580, 3, {106,90,77}},
+{ 734604, 3, {277,52,51}},
+{ 734616, 3, {179,72,57}},
+{ 734640, 3, {3061,16,15}},
+{ 734688, 3, {2551,18,16}},
+{ 734700, 3, {100,93,79}},
+{ 734706, 3, {119,98,63}},
+{ 734712, 3, {121,88,69}},
+{ 734760, 3, {157,72,65}},
+{ 734800, 3, {167,80,55}},
+{ 734832, 3, {108,84,81}},
+{ 734844, 3, {293,57,44}},
+{ 734850, 3, {115,90,71}},
+{ 734910, 3, {131,85,66}},
+{ 734916, 3, {673,39,28}},
+{ 734940, 3, {1361,27,20}},
+{ 734976, 3, {96,88,87}},
+{ 735000, 3, {100,98,75}},
+{ 735072, 3, {104,93,76}},
+{ 735120, 3, {1021,30,24}},
+{ 735168, 3, {547,42,32}},
+{ 735192, 3, {10211,9,8}},
+{ 735200, 3, {919,32,25}},
+{ 735240, 3, {557,40,33}},
+{ 735280, 3, {101,91,80}},
+{ 735300, 3, {95,90,86}},
+{ 735336, 3, {1459,24,21}},
+{ 735372, 3, {619,36,33}},
+{ 735420, 3, {103,85,84}},
+{ 735504, 3, {199,66,56}},
+{ 735525, 3, {467,45,35}},
+{ 735540, 3, {115,82,78}},
+{ 735680, 3, {95,88,88}},
+{ 735696, 3, {131,78,72}},
+{ 735735, 3, {105,91,77}},
+{ 735768, 3, {929,33,24}},
+{ 735816, 3, {93,92,86}},
+{ 735840, 3, {105,96,73}},
+{ 735885, 3, {115,81,79}},
+{ 735900, 3, {223,60,55}},
+{ 735930, 3, {111,85,78}},
+{ 735966, 3, {118,81,77}},
+{ 735984, 3, {269,57,48}},
+{ 736032, 3, {102,88,82}},
+{ 736050, 3, {701,35,30}},
+{ 736056, 3, {10223,9,8}},
+{ 736080, 3, {3067,16,15}},
+{ 736092, 3, {127,84,69}},
+{ 736120, 3, {239,56,55}},
+{ 736128, 3, {108,96,71}},
+{ 736155, 3, {123,95,63}},
+{ 736176, 3, {313,49,48}},
+{ 736200, 3, {409,45,40}},
+{ 736236, 3, {401,51,36}},
+{ 736260, 3, {1753,21,20}},
+{ 736320, 3, {118,80,78}},
+{ 736368, 3, {92,92,87}},
+{ 736380, 3, {4091,15,12}},
+{ 736416, 3, {2557,18,16}},
+{ 736425, 3, {1091,27,25}},
+{ 736428, 3, {797,33,28}},
+{ 736440, 3, {102,95,76}},
+{ 736512, 3, {137,84,64}},
+{ 736560, 3, {93,90,88}},
+{ 736596, 3, {111,84,79}},
+{ 736644, 3, {157,69,68}},
+{ 736650, 3, {1637,25,18}},
+{ 736695, 3, {107,85,81}},
+{ 736736, 3, {92,91,88}},
+{ 736740, 3, {4093,15,12}},
+{ 736800, 3, {307,50,48}},
+{ 736911, 3, {557,49,27}},
+{ 736960, 3, {98,94,80}},
+{ 736992, 3, {853,32,27}},
+{ 737040, 3, {111,83,80}},
+{ 737100, 3, {91,90,90}},
+{ 737200, 3, {97,95,80}},
+{ 737205, 3, {119,105,59}},
+{ 737352, 3, {99,98,76}},
+{ 737400, 3, {1229,25,24}},
+{ 737460, 3, {241,60,51}},
+{ 737472, 3, {167,69,64}},
+{ 737496, 3, {10243,9,8}},
+{ 737520, 3, {439,42,40}},
+{ 737748, 3, {99,92,81}},
+{ 737760, 3, {106,87,80}},
+{ 737775, 3, {1093,27,25}},
+{ 737784, 3, {10247,9,8}},
+{ 737820, 3, {4099,15,12}},
+{ 737919, 3, {119,117,53}},
+{ 737940, 3, {251,60,49}},
+{ 738024, 3, {191,69,56}},
+{ 738048, 3, {124,93,64}},
+{ 738080, 3, {659,35,32}},
+{ 738108, 3, {101,87,84}},
+{ 738144, 3, {233,66,48}},
+{ 738180, 3, {1367,27,20}},
+{ 738216, 3, {10253,9,8}},
+{ 738234, 3, {98,93,81}},
+{ 738240, 3, {769,32,30}},
+{ 738300, 3, {107,92,75}},
+{ 738360, 3, {293,56,45}},
+{ 738430, 3, {137,77,70}},
+{ 738432, 3, {641,36,32}},
+{ 738540, 3, {373,45,44}},
+{ 738576, 3, {223,69,48}},
+{ 738600, 3, {1231,25,24}},
+{ 738612, 3, {977,28,27}},
+{ 738648, 3, {10259,9,8}},
+{ 738720, 3, {96,95,81}},
+{ 738738, 3, {99,91,82}},
+{ 738780, 3, {1759,21,20}},
+{ 738920, 3, {116,91,70}},
+{ 738960, 3, {3079,16,15}},
+{ 739125, 3, {125,81,73}},
+{ 739152, 3, {118,87,72}},
+{ 739224, 3, {10267,9,8}},
+{ 739284, 3, {677,39,28}},
+{ 739368, 3, {163,72,63}},
+{ 739375, 3, {125,91,65}},
+{ 739440, 3, {104,90,79}},
+{ 739500, 3, {100,87,85}},
+{ 739512, 3, {10271,9,8}},
+{ 739536, 3, {112,93,71}},
+{ 739557, 3, {129,91,63}},
+{ 739596, 3, {431,44,39}},
+{ 739620, 3, {587,36,35}},
+{ 739648, 3, {127,91,64}},
+{ 739656, 3, {10273,9,8}},
+{ 739680, 3, {115,96,67}},
+{ 739800, 3, {137,75,72}},
+{ 739830, 3, {271,65,42}},
+{ 739840, 3, {128,85,68}},
+{ 739860, 3, {118,95,66}},
+{ 739872, 3, {367,48,42}},
+{ 739920, 3, {3083,16,15}},
+{ 739935, 3, {105,87,81}},
+{ 739980, 3, {4111,15,12}},
+{ 740025, 3, {115,99,65}},
+{ 740064, 3, {593,39,32}},
+{ 740124, 3, {99,89,84}},
+{ 740145, 3, {133,105,53}},
+{ 740160, 3, {257,60,48}},
+{ 740208, 3, {2203,21,16}},
+{ 740232, 3, {149,72,69}},
+{ 740256, 3, {701,33,32}},
+{ 740316, 3, {191,68,57}},
+{ 740320, 3, {661,35,32}},
+{ 740340, 3, {457,45,36}},
+{ 740448, 3, {857,32,27}},
+{ 740475, 3, {1097,27,25}},
+{ 740520, 3, {99,88,85}},
+{ 740544, 3, {112,87,76}},
+{ 740610, 3, {211,65,54}},
+{ 740664, 3, {127,81,72}},
+{ 740736, 3, {643,36,32}},
+{ 740740, 3, {110,91,74}},
+{ 740784, 3, {122,88,69}},
+{ 740808, 3, {10289,9,8}},
+{ 740880, 3, {98,90,84}},
+{ 740928, 3, {227,64,51}},
+{ 741000, 3, {100,95,78}},
+{ 741024, 3, {96,93,83}},
+{ 741060, 3, {179,69,60}},
+{ 741120, 3, {193,64,60}},
+{ 741125, 3, {125,77,77}},
+{ 741132, 3, {173,68,63}},
+{ 741150, 3, {122,81,75}},
+{ 741195, 3, {181,65,63}},
+{ 741200, 3, {109,85,80}},
+{ 741312, 3, {99,96,78}},
+{ 741360, 3, {3089,16,15}},
+{ 741384, 3, {1471,24,21}},
+{ 741420, 3, {1373,27,20}},
+{ 741456, 3, {271,57,48}},
+{ 741468, 3, {97,91,84}},
+{ 741510, 3, {107,90,77}},
+{ 741520, 3, {115,104,62}},
+{ 741552, 3, {2207,21,16}},
+{ 741600, 3, {103,90,80}},
+{ 741636, 3, {109,84,81}},
+{ 741672, 3, {10301,9,8}},
+{ 741744, 3, {102,101,72}},
+{ 741780, 3, {317,52,45}},
+{ 741816, 3, {10303,9,8}},
+{ 741840, 3, {281,55,48}},
+{ 741888, 3, {96,92,84}},
+{ 741936, 3, {104,87,82}},
+{ 741972, 3, {121,84,73}},
+{ 742050, 3, {97,90,85}},
+{ 742080, 3, {773,32,30}},
+{ 742104, 3, {937,33,24}},
+{ 742140, 3, {95,93,84}},
+{ 742170, 3, {173,66,65}},
+{ 742176, 3, {859,32,27}},
+{ 742200, 3, {1237,25,24}},
+{ 742203, 3, {119,81,77}},
+{ 742280, 3, {241,56,55}},
+{ 742284, 3, {108,87,79}},
+{ 742320, 3, {1031,30,24}},
+{ 742350, 3, {101,98,75}},
+{ 742365, 3, {141,81,65}},
+{ 742368, 3, {111,88,76}},
+{ 742500, 3, {100,99,75}},
+{ 742536, 3, {10313,9,8}},
+{ 742560, 3, {96,91,85}},
+{ 742632, 3, {97,88,87}},
+{ 742716, 3, {117,92,69}},
+{ 742720, 3, {211,64,55}},
+{ 742752, 3, {2579,18,16}},
+{ 742764, 3, {331,51,44}},
+{ 742770, 3, {131,81,70}},
+{ 742824, 3, {181,72,57}},
+{ 742840, 3, {379,49,40}},
+{ 742860, 3, {4127,15,12}},
+{ 742896, 3, {112,99,67}},
+{ 742995, 3, {99,95,79}},
+{ 743028, 3, {433,44,39}},
+{ 743040, 3, {96,90,86}},
+{ 743085, 3, {337,49,45}},
+{ 743112, 3, {10321,9,8}},
+{ 743148, 3, {983,28,27}},
+{ 743160, 3, {563,40,33}},
+{ 743184, 3, {397,48,39}},
+{ 743200, 3, {929,32,25}},
+{ 743220, 3, {4129,15,12}},
+{ 743232, 3, {98,96,79}},
+{ 743256, 3, {108,93,74}},
+{ 743328, 3, {96,89,87}},
+{ 743337, 3, {133,81,69}},
+{ 743400, 3, {118,84,75}},
+{ 743512, 3, {119,88,71}},
+{ 743526, 3, {281,54,49}},
+{ 743568, 3, {2213,21,16}},
+{ 743652, 3, {227,63,52}},
+{ 743700, 3, {111,100,67}},
+{ 743715, 3, {787,35,27}},
+{ 743736, 3, {233,57,56}},
+{ 743760, 3, {1033,30,24}},
+{ 743808, 3, {149,78,64}},
+{ 743820, 3, {105,92,77}},
+{ 743832, 3, {10331,9,8}},
+{ 743850, 3, {95,90,87}},
+{ 743925, 3, {109,91,75}},
+{ 743940, 3, {4133,15,12}},
+{ 743964, 3, {251,57,52}},
+{ 743976, 3, {10333,9,8}},
+{ 743985, 3, {167,81,55}},
+{ 744000, 3, {100,93,80}},
+{ 744040, 3, {95,89,88}},
+{ 744128, 3, {151,77,64}},
+{ 744150, 3, {121,82,75}},
+{ 744192, 3, {102,96,76}},
+{ 744240, 3, {443,42,40}},
+{ 744264, 3, {10337,9,8}},
+{ 744345, 3, {139,85,63}},
+{ 744372, 3, {93,92,87}},
+{ 744408, 3, {211,63,56}},
+{ 744450, 3, {709,35,30}},
+{ 744471, 3, {101,91,81}},
+{ 744480, 3, {94,90,88}},
+{ 744510, 3, {115,83,78}},
+{ 744525, 3, {1103,27,25}},
+{ 744625, 3, {161,125,37}},
+{ 744640, 3, {179,65,64}},
+{ 744660, 3, {197,63,60}},
+{ 744696, 3, {10343,9,8}},
+{ 744705, 3, {117,95,67}},
+{ 744720, 3, {107,87,80}},
+{ 744744, 3, {93,91,88}},
+{ 744800, 3, {98,95,80}},
+{ 744849, 3, {563,49,27}},
+{ 744876, 3, {99,99,76}},
+{ 744900, 3, {191,65,60}},
+{ 744975, 3, {129,77,75}},
+{ 745008, 3, {102,88,83}},
+{ 745020, 3, {4139,15,12}},
+{ 745212, 3, {281,52,51}},
+{ 745272, 3, {941,33,24}},
+{ 745290, 3, {91,91,90}},
+{ 745344, 3, {647,36,32}},
+{ 745416, 3, {102,87,84}},
+{ 745470, 3, {251,55,54}},
+{ 745476, 3, {111,92,73}},
+{ 745500, 3, {105,100,71}},
+{ 745584, 3, {317,49,48}},
+{ 745600, 3, {233,64,50}},
+{ 745632, 3, {863,32,27}},
+{ 745650, 3, {1657,25,18}},
+{ 745668, 3, {269,63,44}},
+{ 745704, 3, {10357,9,8}},
+{ 745731, 3, {133,89,63}},
+{ 745740, 3, {1381,27,20}},
+{ 745752, 3, {193,69,56}},
+{ 745800, 3, {113,88,75}},
+{ 745836, 3, {683,39,28}},
+{ 745848, 3, {1151,27,24}},
+{ 745875, 3, {117,85,75}},
+{ 745920, 3, {111,84,80}},
+{ 745976, 3, {173,77,56}},
+{ 746064, 3, {157,72,66}},
+{ 746130, 3, {102,95,77}},
+{ 746160, 3, {3109,16,15}},
+{ 746172, 3, {98,94,81}},
+{ 746200, 3, {100,91,82}},
+{ 746208, 3, {2591,18,16}},
+{ 746232, 3, {118,93,68}},
+{ 746256, 3, {2221,21,16}},
+{ 746340, 3, {1777,21,20}},
+{ 746400, 3, {311,50,48}},
+{ 746415, 3, {97,95,81}},
+{ 746424, 3, {1481,24,21}},
+{ 746496, 3, {96,96,81}},
+{ 746550, 3, {105,90,79}},
+{ 746568, 3, {10369,9,8}},
+{ 746640, 3, {122,85,72}},
+{ 746700, 3, {131,76,75}},
+{ 746784, 3, {2593,18,16}},
+{ 746820, 3, {461,45,36}},
+{ 746856, 3, {99,92,82}},
+{ 746900, 3, {100,97,77}},
+{ 746928, 3, {108,91,76}},
+{ 747120, 3, {283,55,48}},
+{ 747144, 3, {1153,27,24}},
+{ 747156, 3, {113,87,76}},
+{ 747180, 3, {593,36,35}},
+{ 747225, 3, {123,81,75}},
+{ 747240, 3, {479,40,39}},
+{ 747250, 3, {125,98,61}},
+{ 747264, 3, {139,84,64}},
+{ 747432, 3, {1483,24,21}},
+{ 747456, 3, {229,64,51}},
+{ 747516, 3, {809,33,28}},
+{ 747540, 3, {4153,15,12}},
+{ 747552, 3, {599,39,32}},
+{ 747720, 3, {120,93,67}},
+{ 747747, 3, {99,91,83}},
+{ 747825, 3, {169,75,59}},
+{ 747840, 3, {96,95,82}},
+{ 747900, 3, {277,54,50}},
+{ 748000, 3, {100,88,85}},
+{ 748068, 3, {193,68,57}},
+{ 748080, 3, {1039,30,24}},
+{ 748152, 3, {10391,9,8}},
+{ 748160, 3, {167,70,64}},
+{ 748170, 3, {163,85,54}},
+{ 748176, 3, {109,88,78}},
+{ 748200, 3, {100,87,86}},
+{ 748260, 3, {4157,15,12}},
+{ 748350, 3, {1663,25,18}},
+{ 748410, 3, {101,95,78}},
+{ 748440, 3, {99,90,84}},
+{ 748475, 3, {175,91,47}},
+{ 748560, 3, {3119,16,15}},
+{ 748575, 3, {1109,27,25}},
+{ 748608, 3, {557,42,32}},
+{ 748620, 3, {4159,15,12}},
+{ 748680, 3, {367,51,40}},
+{ 748704, 3, {709,33,32}},
+{ 748728, 3, {10399,9,8}},
+{ 748800, 3, {100,96,78}},
+{ 748818, 3, {283,54,49}},
+{ 748860, 3, {1783,21,20}},
+{ 748935, 3, {99,89,85}},
+{ 748980, 3, {108,95,73}},
+{ 749040, 3, {3121,16,15}},
+{ 749088, 3, {102,102,72}},
+{ 749100, 3, {227,60,55}},
+{ 749112, 3, {98,91,84}},
+{ 749190, 3, {113,85,78}},
+{ 749196, 3, {991,28,27}},
+{ 749208, 3, {106,93,76}},
+{ 749210, 3, {139,77,70}},
+{ 749232, 3, {99,88,86}},
+{ 749320, 3, {131,88,65}},
+{ 749340, 3, {181,69,60}},
+{ 749364, 3, {811,33,28}},
+{ 749400, 3, {1249,25,24}},
+{ 749448, 3, {1487,24,21}},
+{ 749520, 3, {347,48,45}},
+{ 749595, 3, {121,105,59}},
+{ 749600, 3, {937,32,25}},
+{ 749628, 3, {631,36,33}},
+{ 749700, 3, {98,90,85}},
+{ 749736, 3, {104,89,81}},
+{ 749760, 3, {110,96,71}},
+{ 749840, 3, {103,91,80}},
+{ 749892, 3, {143,76,69}},
+{ 749952, 3, {96,93,84}},
+{ 750024, 3, {947,33,24}},
+{ 750048, 3, {601,39,32}},
+{ 750060, 3, {463,45,36}},
+{ 750120, 3, {95,94,84}},
+{ 750141, 3, {147,81,63}},
+{ 750150, 3, {1667,25,18}},
+{ 750168, 3, {151,72,69}},
+{ 750204, 3, {229,63,52}},
+{ 750288, 3, {98,88,87}},
+{ 750360, 3, {111,104,65}},
+{ 750420, 3, {379,45,44}},
+{ 750456, 3, {1489,24,21}},
+{ 750465, 3, {109,85,81}},
+{ 750516, 3, {283,52,51}},
+{ 750519, 3, {133,99,57}},
+{ 750540, 3, {1787,21,20}},
+{ 750600, 3, {139,75,72}},
+{ 750672, 3, {401,48,39}},
+{ 750680, 3, {383,49,40}},
+{ 750720, 3, {96,92,85}},
+{ 750744, 3, {10427,9,8}},
+{ 750750, 3, {110,91,75}},
+{ 750804, 3, {111,89,76}},
+{ 750816, 3, {99,96,79}},
+{ 750880, 3, {104,95,76}},
+{ 750888, 3, {10429,9,8}},
+{ 750924, 3, {409,51,36}},
+{ 750960, 3, {149,72,70}},
+{ 750984, 3, {104,87,83}},
+{ 751023, 3, {131,91,63}},
+{ 751032, 3, {122,81,76}},
+{ 751050, 3, {1669,25,18}},
+{ 751072, 3, {479,49,32}},
+{ 751080, 3, {569,40,33}},
+{ 751104, 3, {163,72,64}},
+{ 751128, 3, {263,56,51}},
+{ 751176, 3, {10433,9,8}},
+{ 751200, 3, {313,50,48}},
+{ 751212, 3, {271,63,44}},
+{ 751275, 3, {135,105,53}},
+{ 751296, 3, {96,91,86}},
+{ 751332, 3, {127,87,68}},
+{ 751380, 3, {1789,21,20}},
+{ 751392, 3, {2609,18,16}},
+{ 751400, 3, {104,85,85}},
+{ 751440, 3, {101,93,80}},
+{ 751464, 3, {108,98,71}},
+{ 751500, 3, {167,75,60}},
+{ 751520, 3, {122,80,77}},
+{ 751536, 3, {307,51,48}},
+{ 751608, 3, {104,99,73}},
+{ 751632, 3, {2237,21,16}},
+{ 751660, 3, {118,91,70}},
+{ 751680, 3, {96,90,87}},
+{ 751716, 3, {157,76,63}},
+{ 751725, 3, {257,65,45}},
+{ 751800, 3, {179,70,60}},
+{ 751824, 3, {227,69,48}},
+{ 751842, 3, {102,91,81}},
+{ 751860, 3, {4177,15,12}},
+{ 751905, 3, {105,93,77}},
+{ 751968, 3, {373,48,42}},
+{ 752080, 3, {112,85,79}},
+{ 752100, 3, {109,92,75}},
+{ 752136, 3, {111,88,77}},
+{ 752150, 3, {307,50,49}},
+{ 752220, 3, {199,63,60}},
+{ 752256, 3, {653,36,32}},
+{ 752304, 3, {2239,21,16}},
+{ 752376, 3, {94,92,87}},
+{ 752400, 3, {95,90,88}},
+{ 752472, 3, {1493,24,21}},
+{ 752556, 3, {119,93,68}},
+{ 752616, 3, {10453,9,8}},
+{ 752640, 3, {98,96,80}},
+{ 752652, 3, {101,92,81}},
+{ 752700, 3, {193,65,60}},
+{ 752724, 3, {103,87,84}},
+{ 752752, 3, {94,91,88}},
+{ 752787, 3, {569,49,27}},
+{ 752800, 3, {941,32,25}},
+{ 752880, 3, {3137,16,15}},
+{ 752895, 3, {117,99,65}},
+{ 752904, 3, {10457,9,8}},
+{ 752928, 3, {93,92,88}},
+{ 752960, 3, {181,65,64}},
+{ 753048, 3, {10459,9,8}},
+{ 753165, 3, {797,35,27}},
+{ 753168, 3, {104,102,71}},
+{ 753225, 3, {121,83,75}},
+{ 753324, 3, {439,44,39}},
+{ 753336, 3, {10463,9,8}},
+{ 753375, 3, {125,123,49}},
+{ 753480, 3, {92,91,90}},
+{ 753600, 3, {157,75,64}},
+{ 753624, 3, {1163,27,24}},
+{ 753648, 3, {2243,21,16}},
+{ 753696, 3, {2617,18,16}},
+{ 753720, 3, {571,40,33}},
+{ 753732, 3, {997,28,27}},
+{ 753750, 3, {125,90,67}},
+{ 753760, 3, {673,35,32}},
+{ 753768, 3, {114,87,76}},
+{ 753792, 3, {151,78,64}},
+{ 753840, 3, {349,48,45}},
+{ 753975, 3, {1117,27,25}},
+{ 753984, 3, {102,88,84}},
+{ 754110, 3, {98,95,81}},
+{ 754200, 3, {419,45,40}},
+{ 754236, 3, {123,84,73}},
+{ 754272, 3, {97,96,81}},
+{ 754320, 3, {449,42,40}},
+{ 754344, 3, {10477,9,8}},
+{ 754416, 3, {104,93,78}},
+{ 754425, 3, {479,45,35}},
+{ 754515, 3, {115,81,81}},
+{ 754572, 3, {691,39,28}},
+{ 754596, 3, {137,81,68}},
+{ 754600, 3, {100,98,77}},
+{ 754680, 3, {331,57,40}},
+{ 754740, 3, {599,36,35}},
+{ 754776, 3, {953,33,24}},
+{ 754845, 3, {105,91,79}},
+{ 754848, 3, {2621,18,16}},
+{ 754875, 3, {125,99,61}},
+{ 754950, 3, {719,35,30}},
+{ 755040, 3, {110,88,78}},
+{ 755055, 3, {141,85,63}},
+{ 755064, 3, {10487,9,8}},
+{ 755160, 3, {116,93,70}},
+{ 755244, 3, {111,84,81}},
+{ 755280, 3, {1049,30,24}},
+{ 755300, 3, {100,91,83}},
+{ 755370, 3, {109,90,77}},
+{ 755400, 3, {1259,25,24}},
+{ 755433, 3, {571,49,27}},
+{ 755440, 3, {112,95,71}},
+{ 755460, 3, {1399,27,20}},
+{ 755480, 3, {101,88,85}},
+{ 755496, 3, {1499,24,21}},
+{ 755520, 3, {787,32,30}},
+{ 755550, 3, {115,90,73}},
+{ 755568, 3, {106,88,81}},
+{ 755580, 3, {257,60,49}},
+{ 755664, 3, {173,78,56}},
+{ 755688, 3, {111,92,74}},
+{ 755700, 3, {229,60,55}},
+{ 755820, 3, {102,95,78}},
+{ 755904, 3, {127,93,64}},
+{ 755928, 3, {10499,9,8}},
+{ 755964, 3, {99,92,83}},
+{ 756072, 3, {10501,9,8}},
+{ 756096, 3, {179,66,64}},
+{ 756180, 3, {4201,15,12}},
+{ 756210, 3, {277,65,42}},
+{ 756228, 3, {337,51,44}},
+{ 756240, 3, {137,80,69}},
+{ 756276, 3, {107,93,76}},
+{ 756288, 3, {101,96,78}},
+{ 756336, 3, {2251,21,16}},
+{ 756420, 3, {1801,21,20}},
+{ 756432, 3, {103,102,72}},
+{ 756480, 3, {197,64,60}},
+{ 756525, 3, {131,77,75}},
+{ 756540, 3, {467,45,36}},
+{ 756576, 3, {111,96,71}},
+{ 756648, 3, {113,93,72}},
+{ 756672, 3, {563,42,32}},
+{ 756675, 3, {135,95,59}},
+{ 756720, 3, {1051,30,24}},
+{ 756756, 3, {99,91,84}},
+{ 756840, 3, {106,85,84}},
+{ 756864, 3, {108,96,73}},
+{ 756900, 3, {100,87,87}},
+{ 756936, 3, {10513,9,8}},
+{ 756945, 3, {105,89,81}},
+{ 756960, 3, {96,95,83}},
+{ 757050, 3, {103,98,75}},
+{ 757068, 3, {211,69,52}},
+{ 757120, 3, {104,91,80}},
+{ 757152, 3, {239,66,48}},
+{ 757197, 3, {119,101,63}},
+{ 757260, 3, {601,36,35}},
+{ 757350, 3, {99,90,85}},
+{ 757400, 3, {541,40,35}},
+{ 757440, 3, {263,60,48}},
+{ 757512, 3, {167,72,63}},
+{ 757536, 3, {607,39,32}},
+{ 757575, 3, {111,91,75}},
+{ 757600, 3, {947,32,25}},
+{ 757680, 3, {105,88,82}},
+{ 757728, 3, {877,32,27}},
+{ 757764, 3, {97,93,84}},
+{ 757800, 3, {421,45,40}},
+{ 757872, 3, {277,57,48}},
+{ 757944, 3, {99,88,87}},
+{ 757980, 3, {4211,15,12}},
+{ 758016, 3, {96,94,84}},
+{ 758025, 3, {1123,27,25}},
+{ 758088, 3, {10529,9,8}},
+{ 758100, 3, {95,95,84}},
+{ 758160, 3, {104,90,81}},
+{ 758172, 3, {123,92,67}},
+{ 758232, 3, {10531,9,8}},
+{ 758240, 3, {677,35,32}},
+{ 758304, 3, {2633,18,16}},
+{ 758340, 3, {383,45,44}},
+{ 758400, 3, {100,96,79}},
+{ 758448, 3, {229,69,48}},
+{ 758520, 3, {98,90,86}},
+{ 758604, 3, {821,33,28}},
+{ 758640, 3, {109,87,80}},
+{ 758670, 3, {121,95,66}},
+{ 758700, 3, {281,54,50}},
+{ 758808, 3, {1171,27,24}},
+{ 758880, 3, {96,93,85}},
+{ 759000, 3, {110,92,75}},
+{ 759024, 3, {251,56,54}},
+{ 759060, 3, {4217,15,12}},
+{ 759120, 3, {3163,16,15}},
+{ 759132, 3, {108,99,71}},
+{ 759168, 3, {659,36,32}},
+{ 759213, 3, {103,91,81}},
+{ 759240, 3, {108,95,74}},
+{ 759264, 3, {719,33,32}},
+{ 759276, 3, {131,84,69}},
+{ 759304, 3, {149,91,56}},
+{ 759330, 3, {118,99,65}},
+{ 759360, 3, {113,84,80}},
+{ 759375, 3, {125,81,75}},
+{ 759420, 3, {4219,15,12}},
+{ 759456, 3, {293,54,48}},
+{ 759500, 3, {125,98,62}},
+{ 759528, 3, {137,77,72}},
+{ 759564, 3, {541,39,36}},
+{ 759720, 3, {487,40,39}},
+{ 759780, 3, {108,105,67}},
+{ 759825, 3, {307,55,45}},
+{ 759900, 3, {149,75,68}},
+{ 759924, 3, {101,99,76}},
+{ 759990, 3, {105,94,77}},
+{ 760000, 3, {100,95,80}},
+{ 760032, 3, {96,91,87}},
+{ 760080, 3, {3167,16,15}},
+{ 760095, 3, {127,95,63}},
+{ 760104, 3, {102,92,81}},
+{ 760188, 3, {443,44,39}},
+{ 760200, 3, {181,70,60}},
+{ 760240, 3, {104,86,85}},
+{ 760248, 3, {10559,9,8}},
+{ 760320, 3, {96,90,88}},
+{ 760368, 3, {112,93,73}},
+{ 760375, 3, {125,79,77}},
+{ 760380, 3, {95,92,87}},
+{ 760452, 3, {823,33,28}},
+{ 760480, 3, {98,97,80}},
+{ 760500, 3, {125,78,78}},
+{ 760512, 3, {233,64,51}},
+{ 760560, 3, {3169,16,15}},
+{ 760584, 3, {129,88,67}},
+{ 760620, 3, {1811,21,20}},
+{ 760716, 3, {113,99,68}},
+{ 760760, 3, {95,91,88}},
+{ 760800, 3, {317,50,48}},
+{ 760815, 3, {145,99,53}},
+{ 760824, 3, {10567,9,8}},
+{ 760860, 3, {1409,27,20}},
+{ 760914, 3, {122,81,77}},
+{ 760920, 3, {373,51,40}},
+{ 760950, 3, {95,90,89}},
+{ 761040, 3, {151,72,70}},
+{ 761076, 3, {108,87,81}},
+{ 761112, 3, {93,93,88}},
+{ 761184, 3, {881,32,27}},
+{ 761200, 3, {173,80,55}},
+{ 761208, 3, {197,69,56}},
+{ 761220, 3, {4229,15,12}},
+{ 761280, 3, {122,80,78}},
+{ 761328, 3, {311,51,48}},
+{ 761472, 3, {661,36,32}},
+{ 761475, 3, {143,75,71}},
+{ 761481, 3, {119,81,79}},
+{ 761484, 3, {93,92,89}},
+{ 761508, 3, {641,36,33}},
+{ 761544, 3, {1511,24,21}},
+{ 761580, 3, {4231,15,12}},
+{ 761600, 3, {112,85,80}},
+{ 761607, 3, {157,77,63}},
+{ 761640, 3, {577,40,33}},
+{ 761670, 3, {93,91,90}},
+{ 761712, 3, {2267,21,16}},
+{ 761748, 3, {257,57,52}},
+{ 761805, 3, {99,95,81}},
+{ 761850, 3, {1693,25,18}},
+{ 761904, 3, {104,99,74}},
+{ 761950, 3, {311,50,49}},
+{ 762000, 3, {127,80,75}},
+{ 762048, 3, {98,96,81}},
+{ 762075, 3, {1129,27,25}},
+{ 762125, 3, {125,91,67}},
+{ 762195, 3, {119,105,61}},
+{ 762300, 3, {100,99,77}},
+{ 762336, 3, {2647,18,16}},
+{ 762384, 3, {2269,21,16}},
+{ 762400, 3, {953,32,25}},
+{ 762408, 3, {10589,9,8}},
+{ 762432, 3, {114,88,76}},
+{ 762440, 3, {389,49,40}},
+{ 762450, 3, {115,85,78}},
+{ 762480, 3, {353,48,45}},
+{ 762489, 3, {133,91,63}},
+{ 762600, 3, {100,93,82}},
+{ 762660, 3, {223,60,57}},
+{ 762696, 3, {107,88,81}},
+{ 762795, 3, {115,99,67}},
+{ 762804, 3, {1009,28,27}},
+{ 762816, 3, {137,87,64}},
+{ 762840, 3, {163,72,65}},
+{ 762888, 3, {239,57,56}},
+{ 762912, 3, {883,32,27}},
+{ 762944, 3, {131,91,64}},
+{ 762960, 3, {102,88,85}},
+{ 762984, 3, {10597,9,8}},
+{ 763020, 3, {157,81,60}},
+{ 763140, 3, {105,92,79}},
+{ 763200, 3, {106,90,80}},
+{ 763224, 3, {118,84,77}},
+{ 763230, 3, {103,95,78}},
+{ 763272, 3, {10601,9,8}},
+{ 763290, 3, {257,55,54}},
+{ 763308, 3, {233,63,52}},
+{ 763344, 3, {108,93,76}},
+{ 763350, 3, {727,35,30}},
+{ 763371, 3, {577,49,27}},
+{ 763380, 3, {4241,15,12}},
+{ 763440, 3, {3181,16,15}},
+{ 763488, 3, {241,66,48}},
+{ 763572, 3, {197,68,57}},
+{ 763616, 3, {487,49,32}},
+{ 763650, 3, {1697,25,18}},
+{ 763680, 3, {111,86,80}},
+{ 763704, 3, {10607,9,8}},
+{ 763728, 3, {2273,21,16}},
+{ 763740, 3, {4243,15,12}},
+{ 763776, 3, {102,96,78}},
+{ 763830, 3, {115,82,81}},
+{ 763840, 3, {124,80,77}},
+{ 763884, 3, {643,36,33}},
+{ 763920, 3, {1061,30,24}},
+{ 763968, 3, {173,69,64}},
+{ 763980, 3, {107,85,84}},
+{ 763992, 3, {131,81,72}},
+{ 764064, 3, {379,48,42}},
+{ 764088, 3, {104,93,79}},
+{ 764100, 3, {283,54,50}},
+{ 764136, 3, {10613,9,8}},
+{ 764148, 3, {827,33,28}},
+{ 764160, 3, {199,64,60}},
+{ 764208, 3, {122,87,72}},
+{ 764235, 3, {111,85,81}},
+{ 764244, 3, {117,92,71}},
+{ 764400, 3, {100,91,84}},
+{ 764456, 3, {119,88,73}},
+{ 764505, 3, {809,35,27}},
+{ 764544, 3, {181,66,64}},
+{ 764550, 3, {1699,25,18}},
+{ 764568, 3, {111,84,82}},
+{ 764610, 3, {331,55,42}},
+{ 764640, 3, {118,81,80}},
+{ 764694, 3, {119,102,63}},
+{ 764736, 3, {569,42,32}},
+{ 764796, 3, {163,69,68}},
+{ 764800, 3, {239,64,50}},
+{ 764820, 3, {607,36,35}},
+{ 764880, 3, {3187,16,15}},
+{ 764883, 3, {133,81,71}},
+{ 764960, 3, {683,35,32}},
+{ 765000, 3, {100,90,85}},
+{ 765024, 3, {613,39,32}},
+{ 765072, 3, {99,92,84}},
+{ 765120, 3, {797,32,30}},
+{ 765135, 3, {347,49,45}},
+{ 765144, 3, {10627,9,8}},
+{ 765204, 3, {121,93,68}},
+{ 765216, 3, {2657,18,16}},
+{ 765288, 3, {1181,27,24}},
+{ 765360, 3, {1063,30,24}},
+{ 765408, 3, {112,102,67}},
+{ 765432, 3, {10631,9,8}},
+{ 765450, 3, {105,90,81}},
+{ 765492, 3, {701,39,28}},
+{ 765510, 3, {102,95,79}},
+{ 765540, 3, {4253,15,12}},
+{ 765576, 3, {98,93,84}},
+{ 765600, 3, {100,88,87}},
+{ 765612, 3, {139,81,68}},
+{ 765625, 3, {125,125,49}},
+{ 765648, 3, {409,48,39}},
+{ 765660, 3, {1823,21,20}},
+{ 765765, 3, {99,91,85}},
+{ 765792, 3, {2659,18,16}},
+{ 765800, 3, {547,40,35}},
+{ 765828, 3, {1013,28,27}},
+{ 765840, 3, {3191,16,15}},
+{ 765864, 3, {967,33,24}},
+{ 765900, 3, {111,92,75}},
+{ 765948, 3, {116,93,71}},
+{ 765960, 3, {491,40,39}},
+{ 765996, 3, {829,33,28}},
+{ 766008, 3, {10639,9,8}},
+{ 766080, 3, {96,95,84}},
+{ 766200, 3, {1277,25,24}},
+{ 766224, 3, {313,51,48}},
+{ 766320, 3, {103,93,80}},
+{ 766368, 3, {887,32,27}},
+{ 766395, 3, {811,35,27}},
+{ 766416, 3, {2281,21,16}},
+{ 766500, 3, {105,100,73}},
+{ 766530, 3, {167,85,54}},
+{ 766584, 3, {104,91,81}},
+{ 766620, 3, {4259,15,12}},
+{ 766656, 3, {99,88,88}},
+{ 766800, 3, {108,100,71}},
+{ 766836, 3, {179,68,63}},
+{ 766850, 3, {313,50,49}},
+{ 766872, 3, {10651,9,8}},
+{ 766920, 3, {105,88,83}},
+{ 766935, 3, {117,95,69}},
+{ 766944, 3, {2663,18,16}},
+{ 766980, 3, {4261,15,12}},
+{ 766992, 3, {116,87,76}},
+{ 767025, 3, {487,45,35}},
+{ 767040, 3, {96,94,85}},
+{ 767130, 3, {281,65,42}},
+{ 767151, 3, {123,81,77}},
+{ 767200, 3, {137,80,70}},
+{ 767232, 3, {108,96,74}},
+{ 767280, 3, {139,80,69}},
+{ 767304, 3, {10657,9,8}},
+{ 767340, 3, {98,90,87}},
+{ 767400, 3, {1279,25,24}},
+{ 767424, 3, {571,42,32}},
+{ 767448, 3, {102,99,76}},
+{ 767520, 3, {104,90,82}},
+{ 767556, 3, {103,92,81}},
+{ 767592, 3, {1523,24,21}},
+{ 767600, 3, {101,95,80}},
+{ 767676, 3, {111,91,76}},
+{ 767712, 3, {727,33,32}},
+{ 767736, 3, {10663,9,8}},
+{ 767760, 3, {457,42,40}},
+{ 767808, 3, {96,93,86}},
+{ 767844, 3, {277,63,44}},
+{ 767910, 3, {179,66,65}},
+{ 767988, 3, {547,39,36}},
+{ 768000, 3, {100,96,80}},
+{ 768024, 3, {10667,9,8}},
+{ 768040, 3, {211,65,56}},
+{ 768060, 3, {251,60,51}},
+{ 768075, 3, {105,95,77}},
+{ 768240, 3, {97,90,88}},
+{ 768264, 3, {269,56,51}},
+{ 768300, 3, {197,65,60}},
+{ 768320, 3, {98,98,80}},
+{ 768360, 3, {337,57,40}},
+{ 768384, 3, {96,92,87}},
+{ 768400, 3, {113,85,80}},
+{ 768420, 3, {1423,27,20}},
+{ 768432, 3, {2287,21,16}},
+{ 768504, 3, {123,88,71}},
+{ 768570, 3, {137,85,66}},
+{ 768600, 3, {122,84,75}},
+{ 768625, 3, {143,125,43}},
+{ 768636, 3, {647,36,33}},
+{ 768720, 3, {3203,16,15}},
+{ 768768, 3, {96,91,88}},
+{ 768780, 3, {4271,15,12}},
+{ 768816, 3, {281,57,48}},
+{ 768825, 3, {135,85,67}},
+{ 768852, 3, {113,84,81}},
+{ 768900, 3, {233,60,55}},
+{ 768936, 3, {199,69,56}},
+{ 768960, 3, {96,90,89}},
+{ 769020, 3, {1831,21,20}},
+{ 769032, 3, {971,33,24}},
+{ 769050, 3, {1709,25,18}},
+{ 769080, 3, {104,87,85}},
+{ 769120, 3, {95,92,88}},
+{ 769140, 3, {4273,15,12}},
+{ 769176, 3, {1187,27,24}},
+{ 769248, 3, {2671,18,16}},
+{ 769272, 3, {241,57,56}},
+{ 769275, 3, {263,65,45}},
+{ 769284, 3, {419,51,36}},
+{ 769296, 3, {94,93,88}},
+{ 769392, 3, {137,78,72}},
+{ 769419, 3, {161,81,59}},
+{ 769428, 3, {116,99,67}},
+{ 769464, 3, {10687,9,8}},
+{ 769496, 3, {151,91,56}},
+{ 769500, 3, {95,90,90}},
+{ 769536, 3, {167,72,64}},
+{ 769545, 3, {349,49,45}},
+{ 769650, 3, {733,35,30}},
+{ 769680, 3, {1069,30,24}},
+{ 769725, 3, {311,55,45}},
+{ 769728, 3, {211,64,57}},
+{ 769752, 3, {10691,9,8}},
+{ 769776, 3, {112,87,79}},
+{ 769800, 3, {1283,25,24}},
+{ 769824, 3, {99,96,81}},
+{ 769860, 3, {94,91,90}},
+{ 769888, 3, {491,49,32}},
+{ 769956, 3, {307,57,44}},
+{ 769986, 3, {98,97,81}},
+{ 770000, 3, {100,100,77}},
+{ 770016, 3, {617,39,32}},
+{ 770040, 3, {93,92,90}},
+{ 770100, 3, {151,75,68}},
+{ 770112, 3, {191,64,63}},
+{ 770160, 3, {3209,16,15}},
+{ 770220, 3, {389,45,44}},
+{ 770250, 3, {125,79,78}},
+{ 770355, 3, {153,95,53}},
+{ 770364, 3, {1019,28,27}},
+{ 770400, 3, {107,90,80}},
+{ 770412, 3, {109,93,76}},
+{ 770440, 3, {103,88,85}},
+{ 770448, 3, {2293,21,16}},
+{ 770472, 3, {108,87,82}},
+{ 770484, 3, {449,44,39}},
+{ 770580, 3, {1427,27,20}},
+{ 770616, 3, {139,77,72}},
+{ 770640, 3, {104,95,78}},
+{ 770688, 3, {223,64,54}},
+{ 770715, 3, {173,81,55}},
+{ 770770, 3, {110,91,77}},
+{ 770784, 3, {112,93,74}},
+{ 770880, 3, {110,96,73}},
+{ 770940, 3, {4283,15,12}},
+{ 770976, 3, {2677,18,16}},
+{ 771048, 3, {10709,9,8}},
+{ 771144, 3, {127,88,69}},
+{ 771192, 3, {10711,9,8}},
+{ 771200, 3, {241,64,50}},
+{ 771210, 3, {99,95,82}},
+{ 771225, 3, {113,91,75}},
+{ 771264, 3, {103,96,78}},
+{ 771324, 3, {199,68,57}},
+{ 771375, 3, {121,85,75}},
+{ 771420, 3, {115,86,78}},
+{ 771456, 3, {98,96,82}},
+{ 771525, 3, {127,81,75}},
+{ 771528, 3, {122,93,68}},
+{ 771624, 3, {1531,24,21}},
+{ 771660, 3, {1429,27,20}},
+{ 771672, 3, {111,88,79}},
+{ 771680, 3, {106,91,80}},
+{ 771696, 3, {233,69,48}},
+{ 771750, 3, {105,98,75}},
+{ 771792, 3, {2297,21,16}},
+{ 771840, 3, {120,96,67}},
+{ 771848, 3, {179,77,56}},
+{ 771876, 3, {1021,28,27}},
+{ 771900, 3, {100,93,83}},
+{ 771936, 3, {102,88,86}},
+{ 772020, 3, {4289,15,12}},
+{ 772044, 3, {101,91,84}},
+{ 772056, 3, {10723,9,8}},
+{ 772065, 3, {129,95,63}},
+{ 772080, 3, {3217,16,15}},
+{ 772128, 3, {383,48,42}},
+{ 772191, 3, {119,103,63}},
+{ 772200, 3, {100,99,78}},
+{ 772380, 3, {613,36,35}},
+{ 772464, 3, {114,88,77}},
+{ 772480, 3, {128,85,71}},
+{ 772488, 3, {10729,9,8}},
+{ 772512, 3, {619,39,32}},
+{ 772560, 3, {111,87,80}},
+{ 772590, 3, {283,65,42}},
+{ 772632, 3, {108,98,73}},
+{ 772650, 3, {101,90,85}},
+{ 772695, 3, {223,63,55}},
+{ 772704, 3, {2683,18,16}},
+{ 772776, 3, {10733,9,8}},
+{ 772956, 3, {421,51,36}},
+{ 773040, 3, {3221,16,15}},
+{ 773064, 3, {1193,27,24}},
+{ 773080, 3, {251,56,55}},
+{ 773145, 3, {115,83,81}},
+{ 773160, 3, {379,51,40}},
+{ 773175, 3, {169,75,61}},
+{ 773208, 3, {10739,9,8}},
+{ 773220, 3, {263,60,49}},
+{ 773256, 3, {101,88,87}},
+{ 773325, 3, {491,45,35}},
+{ 773388, 3, {99,93,84}},
+{ 773400, 3, {1289,25,24}},
+{ 773448, 3, {111,104,67}},
+{ 773460, 3, {4297,15,12}},
+{ 773500, 3, {100,91,85}},
+{ 773520, 3, {293,55,48}},
+{ 773550, 3, {191,75,54}},
+{ 773568, 3, {102,96,79}},
+{ 773600, 3, {967,32,25}},
+{ 773640, 3, {307,56,45}},
+{ 773696, 3, {157,77,64}},
+{ 773760, 3, {104,93,80}},
+{ 773784, 3, {977,33,24}},
+{ 773820, 3, {1433,27,20}},
+{ 773856, 3, {2687,18,16}},
+{ 773892, 3, {111,84,83}},
+{ 773920, 3, {691,35,32}},
+{ 773952, 3, {139,87,64}},
+{ 773955, 3, {105,91,81}},
+{ 773976, 3, {271,56,51}},
+{ 774048, 3, {733,33,32}},
+{ 774060, 3, {97,95,84}},
+{ 774144, 3, {96,96,84}},
+{ 774180, 3, {99,92,85}},
+{ 774200, 3, {100,98,79}},
+{ 774216, 3, {10753,9,8}},
+{ 774228, 3, {709,39,28}},
+{ 774288, 3, {283,57,48}},
+{ 774300, 3, {100,89,87}},
+{ 774384, 3, {104,102,73}},
+{ 774432, 3, {2689,18,16}},
+{ 774450, 3, {1721,25,18}},
+{ 774480, 3, {461,42,40}},
+{ 774540, 3, {331,52,45}},
+{ 774576, 3, {163,72,66}},
+{ 774600, 3, {1291,25,24}},
+{ 774648, 3, {106,87,84}},
+{ 774675, 3, {313,55,45}},
+{ 774720, 3, {269,60,48}},
+{ 774774, 3, {99,91,86}},
+{ 774800, 3, {149,80,65}},
+{ 774840, 3, {587,40,33}},
+{ 774900, 3, {105,90,82}},
+{ 774928, 3, {119,88,74}},
+{ 774960, 3, {3229,16,15}},
+{ 774972, 3, {103,99,76}},
+{ 774996, 3, {131,87,68}},
+{ 775005, 3, {121,105,61}},
+{ 775008, 3, {104,92,81}},
+{ 775040, 3, {173,70,64}},
+{ 775125, 3, {125,117,53}},
+{ 775200, 3, {96,95,85}},
+{ 775236, 3, {839,33,28}},
+{ 775278, 3, {293,54,49}},
+{ 775296, 3, {673,36,32}},
+{ 775320, 3, {105,104,71}},
+{ 775350, 3, {1723,25,18}},
+{ 775368, 3, {99,89,88}},
+{ 775404, 3, {181,68,63}},
+{ 775425, 3, {211,75,49}},
+{ 775440, 3, {359,48,45}},
+{ 775488, 3, {577,42,32}},
+{ 775512, 3, {10771,9,8}},
+{ 775584, 3, {2693,18,16}},
+{ 775632, 3, {113,88,78}},
+{ 775656, 3, {114,84,81}},
+{ 775710, 3, {117,85,78}},
+{ 775740, 3, {1847,21,20}},
+{ 775764, 3, {653,36,33}},
+{ 775800, 3, {431,45,40}},
+{ 775824, 3, {2309,21,16}},
+{ 775845, 3, {821,35,27}},
+{ 775950, 3, {739,35,30}},
+{ 775980, 3, {479,45,36}},
+{ 776016, 3, {317,51,48}},
+{ 776100, 3, {199,65,60}},
+{ 776112, 3, {111,92,76}},
+{ 776160, 3, {98,90,88}},
+{ 776232, 3, {10781,9,8}},
+{ 776250, 3, {115,90,75}},
+{ 776340, 3, {227,60,57}},
+{ 776388, 3, {97,92,87}},
+{ 776412, 3, {108,91,79}},
+{ 776490, 3, {181,66,65}},
+{ 776496, 3, {2311,21,16}},
+{ 776601, 3, {587,49,27}},
+{ 776640, 3, {809,32,30}},
+{ 776650, 3, {317,50,49}},
+{ 776720, 3, {112,95,73}},
+{ 776736, 3, {96,93,87}},
+{ 776776, 3, {97,91,88}},
+{ 776790, 3, {137,81,70}},
+{ 776800, 3, {971,32,25}},
+{ 776808, 3, {10789,9,8}},
+{ 776832, 3, {112,102,68}},
+{ 776853, 3, {133,99,59}},
+{ 776880, 3, {104,90,83}},
+{ 776925, 3, {1151,27,25}},
+{ 776952, 3, {109,88,81}},
+{ 777000, 3, {105,100,74}},
+{ 777024, 3, {114,96,71}},
+{ 777036, 3, {293,52,51}},
+{ 777060, 3, {1439,27,20}},
+{ 777140, 3, {122,91,70}},
+{ 777168, 3, {257,56,54}},
+{ 777195, 3, {101,95,81}},
+{ 777240, 3, {127,85,72}},
+{ 777312, 3, {2699,18,16}},
+{ 777400, 3, {115,104,65}},
+{ 777420, 3, {617,36,35}},
+{ 777480, 3, {95,93,88}},
+{ 777504, 3, {96,91,89}},
+{ 777528, 3, {10799,9,8}},
+{ 777600, 3, {96,90,90}},
+{ 777672, 3, {1543,24,21}},
+{ 777700, 3, {101,100,77}},
+{ 777735, 3, {823,35,27}},
+{ 777780, 3, {149,87,60}},
+{ 777840, 3, {463,42,40}},
+{ 777875, 3, {127,125,49}},
+{ 777888, 3, {111,96,73}},
+{ 777920, 3, {104,88,85}},
+{ 777924, 3, {98,98,81}},
+{ 778005, 3, {113,85,81}},
+{ 778050, 3, {95,91,90}},
+{ 778120, 3, {397,49,40}},
+{ 778128, 3, {104,87,86}},
+{ 778176, 3, {193,64,63}},
+{ 778200, 3, {1297,25,24}},
+{ 778248, 3, {1201,27,24}},
+{ 778260, 3, {109,85,84}},
+{ 778272, 3, {121,96,67}},
+{ 778275, 3, {1153,27,25}},
+{ 778365, 3, {353,49,45}},
+{ 778400, 3, {139,80,70}},
+{ 778440, 3, {499,40,39}},
+{ 778464, 3, {106,102,72}},
+{ 778470, 3, {337,55,42}},
+{ 778500, 3, {173,75,60}},
+{ 778512, 3, {331,49,48}},
+{ 778536, 3, {983,33,24}},
+{ 778560, 3, {811,32,30}},
+{ 778596, 3, {93,92,91}},
+{ 778635, 3, {121,99,65}},
+{ 778668, 3, {347,51,44}},
+{ 778752, 3, {104,96,78}},
+{ 778800, 3, {118,88,75}},
+{ 778860, 3, {4327,15,12}},
+{ 778932, 3, {281,63,44}},
+{ 778960, 3, {107,91,80}},
+{ 779100, 3, {106,98,75}},
+{ 779247, 3, {133,93,63}},
+{ 779328, 3, {99,96,82}},
+{ 779400, 3, {433,45,40}},
+{ 779436, 3, {1031,28,27}},
+{ 779520, 3, {112,87,80}},
+{ 779532, 3, {263,57,52}},
+{ 779616, 3, {2707,18,16}},
+{ 779688, 3, {102,91,84}},
+{ 779700, 3, {113,92,75}},
+{ 779712, 3, {131,93,64}},
+{ 779760, 3, {108,95,76}},
+{ 779790, 3, {139,85,66}},
+{ 779800, 3, {557,40,35}},
+{ 779832, 3, {10831,9,8}},
+{ 779850, 3, {1733,25,18}},
+{ 779856, 3, {211,66,56}},
+{ 779868, 3, {108,87,83}},
+{ 779904, 3, {677,36,32}},
+{ 779940, 3, {619,36,35}},
+{ 779976, 3, {157,72,69}},
+{ 779988, 3, {311,57,44}},
+{ 780096, 3, {239,64,51}},
+{ 780150, 3, {743,35,30}},
+{ 780216, 3, {118,87,76}},
+{ 780240, 3, {3251,16,15}},
+{ 780264, 3, {10837,9,8}},
+{ 780300, 3, {102,90,85}},
+{ 780325, 3, {175,91,49}},
+{ 780384, 3, {739,33,32}},
+{ 780390, 3, {115,87,78}},
+{ 780444, 3, {163,76,63}},
+{ 780450, 3, {121,86,75}},
+{ 780472, 3, {181,77,56}},
+{ 780480, 3, {271,60,48}},
+{ 780516, 3, {108,99,73}},
+{ 780520, 3, {104,95,79}},
+{ 780600, 3, {1301,25,24}},
+{ 780615, 3, {99,95,83}},
+{ 780624, 3, {139,78,72}},
+{ 780640, 3, {112,85,82}},
+{ 780660, 3, {4337,15,12}},
+{ 780696, 3, {1549,24,21}},
+{ 780720, 3, {3253,16,15}},
+{ 780759, 3, {119,81,81}},
+{ 780768, 3, {2711,18,16}},
+{ 780780, 3, {110,91,78}},
+{ 780804, 3, {123,92,69}},
+{ 780864, 3, {98,96,83}},
+{ 780900, 3, {137,76,75}},
+{ 780912, 3, {102,88,87}},
+{ 780948, 3, {1033,28,27}},
+{ 780984, 3, {10847,9,8}},
+{ 781020, 3, {4339,15,12}},
+{ 781110, 3, {263,55,54}},
+{ 781200, 3, {100,93,84}},
+{ 781320, 3, {383,51,40}},
+{ 781326, 3, {106,91,81}},
+{ 781344, 3, {2713,18,16}},
+{ 781356, 3, {149,76,69}},
+{ 781375, 3, {133,125,47}},
+{ 781380, 3, {1447,27,20}},
+{ 781416, 3, {10853,9,8}},
+{ 781440, 3, {111,88,80}},
+{ 781515, 3, {827,35,27}},
+{ 781550, 3, {145,77,70}},
+{ 781560, 3, {167,72,65}},
+{ 781600, 3, {977,32,25}},
+{ 781620, 3, {1861,21,20}},
+{ 781650, 3, {193,75,54}},
+{ 781680, 3, {3257,16,15}},
+{ 781704, 3, {99,94,84}},
+{ 781800, 3, {1303,25,24}},
+{ 781812, 3, {127,81,76}},
+{ 781848, 3, {10859,9,8}},
+{ 781872, 3, {179,78,56}},
+{ 781956, 3, {107,87,84}},
+{ 781992, 3, {10861,9,8}},
+{ 782028, 3, {557,39,36}},
+{ 782040, 3, {98,95,84}},
+{ 782100, 3, {100,99,79}},
+{ 782145, 3, {191,65,63}},
+{ 782160, 3, {3259,16,15}},
+{ 782208, 3, {97,96,84}},
+{ 782320, 3, {127,80,77}},
+{ 782325, 3, {135,95,61}},
+{ 782340, 3, {118,85,78}},
+{ 782400, 3, {163,75,64}},
+{ 782424, 3, {10867,9,8}},
+{ 782432, 3, {499,49,32}},
+{ 782460, 3, {105,92,81}},
+{ 782496, 3, {104,99,76}},
+{ 782595, 3, {99,93,85}},
+{ 782600, 3, {100,91,86}},
+{ 782628, 3, {121,84,77}},
+{ 782640, 3, {1087,30,24}},
+{ 782712, 3, {1553,24,21}},
+{ 782730, 3, {223,65,54}},
+{ 782760, 3, {593,40,33}},
+{ 782800, 3, {103,95,80}},
+{ 782820, 3, {4349,15,12}},
+{ 782892, 3, {659,36,33}},
+{ 782925, 3, {143,75,73}},
+{ 782964, 3, {239,63,52}},
+{ 783000, 3, {100,90,87}},
+{ 783072, 3, {2719,18,16}},
+{ 783090, 3, {113,90,77}},
+{ 783156, 3, {349,51,44}},
+{ 783180, 3, {229,60,57}},
+{ 783216, 3, {111,84,84}},
+{ 783288, 3, {99,92,86}},
+{ 783360, 3, {96,96,85}},
+{ 783405, 3, {829,35,27}},
+{ 783432, 3, {104,93,81}},
+{ 783450, 3, {1741,25,18}},
+{ 783510, 3, {105,91,82}},
+{ 783540, 3, {1451,27,20}},
+{ 783564, 3, {167,69,68}},
+{ 783576, 3, {10883,9,8}},
+{ 783640, 3, {137,88,65}},
+{ 783648, 3, {907,32,27}},
+{ 783675, 3, {129,81,75}},
+{ 783720, 3, {311,56,45}},
+{ 783744, 3, {157,78,64}},
+{ 783783, 3, {99,91,87}},
+{ 783840, 3, {115,96,71}},
+{ 783864, 3, {191,72,57}},
+{ 783888, 3, {2333,21,16}},
+{ 783900, 3, {117,100,67}},
+{ 783972, 3, {119,108,61}},
+{ 784000, 3, {100,98,80}},
+{ 784008, 3, {10889,9,8}},
+{ 784035, 3, {131,95,63}},
+{ 784080, 3, {99,90,88}},
+{ 784140, 3, {1867,21,20}},
+{ 784152, 3, {10891,9,8}},
+{ 784176, 3, {124,93,68}},
+{ 784200, 3, {1307,25,24}},
+{ 784212, 3, {457,44,39}},
+{ 784224, 3, {389,48,42}},
+{ 784245, 3, {105,97,77}},
+{ 784260, 3, {4357,15,12}},
+{ 784320, 3, {96,95,86}},
+{ 784350, 3, {105,90,83}},
+{ 784368, 3, {419,48,39}},
+{ 784392, 3, {98,92,87}},
+{ 784476, 3, {283,63,44}},
+{ 784485, 3, {149,81,65}},
+{ 784512, 3, {227,64,54}},
+{ 784539, 3, {593,49,27}},
+{ 784548, 3, {111,93,76}},
+{ 784560, 3, {467,42,40}},
+{ 784575, 3, {317,55,45}},
+{ 784608, 3, {743,33,32}},
+{ 784620, 3, {1453,27,20}},
+{ 784680, 3, {503,40,39}},
+{ 784728, 3, {173,72,63}},
+{ 784784, 3, {98,91,88}},
+{ 784800, 3, {109,90,80}},
+{ 784872, 3, {991,33,24}},
+{ 784875, 3, {115,91,75}},
+{ 784890, 3, {102,95,81}},
+{ 784960, 3, {223,64,55}},
+{ 784980, 3, {98,90,89}},
+{ 784992, 3, {104,102,74}},
+{ 785004, 3, {313,57,44}},
+{ 785016, 3, {10903,9,8}},
+{ 785025, 3, {1163,27,25}},
+{ 785040, 3, {3271,16,15}},
+{ 785088, 3, {96,94,87}},
+{ 785120, 3, {701,35,32}},
+{ 785148, 3, {719,39,28}},
+{ 785200, 3, {151,80,65}},
+{ 785268, 3, {661,36,33}},
+{ 785340, 3, {4363,15,12}},
+{ 785376, 3, {101,96,81}},
+{ 785400, 3, {105,88,85}},
+{ 785421, 3, {137,91,63}},
+{ 785448, 3, {10909,9,8}},
+{ 785460, 3, {106,95,78}},
+{ 785484, 3, {1039,28,27}},
+{ 785520, 3, {1091,30,24}},
+{ 785565, 3, {115,99,69}},
+{ 785655, 3, {117,85,79}},
+{ 785664, 3, {96,93,88}},
+{ 785736, 3, {1559,24,21}},
+{ 785772, 3, {117,92,73}},
+{ 785808, 3, {107,102,72}},
+{ 785820, 3, {1871,21,20}},
+{ 785840, 3, {95,94,88}},
+{ 785862, 3, {99,98,81}},
+{ 785904, 3, {2339,21,16}},
+{ 785910, 3, {115,102,67}},
+{ 785925, 3, {499,45,35}},
+{ 785952, 3, {2729,18,16}},
+{ 785960, 3, {401,49,40}},
+{ 786000, 3, {131,80,75}},
+{ 786024, 3, {1213,27,24}},
+{ 786060, 3, {397,45,44}},
+{ 786150, 3, {1747,25,18}},
+{ 786240, 3, {96,91,90}},
+{ 786324, 3, {111,92,77}},
+{ 786400, 3, {983,32,25}},
+{ 786420, 3, {257,60,51}},
+{ 786429, 3, {133,81,73}},
+{ 786450, 3, {107,98,75}},
+{ 786480, 3, {113,87,80}},
+{ 786528, 3, {2731,18,16}},
+{ 786555, 3, {227,63,55}},
+{ 786576, 3, {2341,21,16}},
+{ 786600, 3, {95,92,90}},
+{ 786624, 3, {241,64,51}},
+{ 786660, 3, {1873,21,20}},
+{ 786720, 3, {149,80,66}},
+{ 786744, 3, {223,63,56}},
+{ 786760, 3, {104,89,85}},
+{ 786816, 3, {683,36,32}},
+{ 786825, 3, {269,65,45}},
+{ 786828, 3, {119,87,76}},
+{ 786960, 3, {1093,30,24}},
+{ 787104, 3, {911,32,27}},
+{ 787140, 3, {4373,15,12}},
+{ 787152, 3, {93,92,92}},
+{ 787176, 3, {104,87,87}},
+{ 787185, 3, {119,105,63}},
+{ 787200, 3, {100,96,82}},
+{ 787248, 3, {112,99,71}},
+{ 787332, 3, {103,91,84}},
+{ 787360, 3, {112,95,74}},
+{ 787464, 3, {10937,9,8}},
+{ 787488, 3, {631,39,32}},
+{ 787500, 3, {105,100,75}},
+{ 787524, 3, {116,93,73}},
+{ 787600, 3, {179,80,55}},
+{ 787608, 3, {10939,9,8}},
+{ 787626, 3, {133,94,63}},
+{ 787860, 3, {1459,27,20}},
+{ 787920, 3, {112,105,67}},
+{ 787950, 3, {103,90,85}},
+{ 787968, 3, {108,96,76}},
+{ 788100, 3, {111,100,71}},
+{ 788112, 3, {421,48,39}},
+{ 788130, 3, {139,81,70}},
+{ 788160, 3, {821,32,30}},
+{ 788172, 3, {853,33,28}},
+{ 788200, 3, {563,40,35}},
+{ 788220, 3, {151,87,60}},
+{ 788328, 3, {10949,9,8}},
+{ 788340, 3, {1877,21,20}},
+{ 788375, 3, {125,119,53}},
+{ 788400, 3, {108,100,73}},
+{ 788544, 3, {111,96,74}},
+{ 788550, 3, {751,35,30}},
+{ 788568, 3, {103,88,87}},
+{ 788580, 3, {337,52,45}},
+{ 788592, 3, {2347,21,16}},
+{ 788616, 3, {1217,27,24}},
+{ 788640, 3, {106,93,80}},
+{ 788697, 3, {107,91,81}},
+{ 788700, 3, {239,60,55}},
+{ 788704, 3, {503,49,32}},
+{ 788760, 3, {313,56,45}},
+{ 788800, 3, {116,85,80}},
+{ 788832, 3, {99,96,83}},
+{ 788850, 3, {1753,25,18}},
+{ 788904, 3, {10957,9,8}},
+{ 788928, 3, {587,42,32}},
+{ 788940, 3, {487,45,36}},
+{ 789012, 3, {101,93,84}},
+{ 789096, 3, {122,84,77}},
+{ 789165, 3, {117,95,71}},
+{ 789180, 3, {1879,21,20}},
+{ 789250, 3, {125,82,77}},
+{ 789264, 3, {108,87,84}},
+{ 789327, 3, {119,99,67}},
+{ 789408, 3, {2741,18,16}},
+{ 789516, 3, {241,63,52}},
+{ 789525, 3, {121,87,75}},
+{ 789624, 3, {997,33,24}},
+{ 789768, 3, {1567,24,21}},
+{ 789840, 3, {1097,30,24}},
+{ 789880, 3, {124,91,70}},
+{ 789888, 3, {102,88,88}},
+{ 789912, 3, {106,92,81}},
+{ 789936, 3, {2351,21,16}},
+{ 790020, 3, {99,95,84}},
+{ 790056, 3, {10973,9,8}},
+{ 790080, 3, {823,32,30}},
+{ 790125, 3, {129,125,49}},
+{ 790128, 3, {118,93,72}},
+{ 790152, 3, {123,88,73}},
+{ 790160, 3, {112,85,83}},
+{ 790200, 3, {439,45,40}},
+{ 790272, 3, {98,96,84}},
+{ 790320, 3, {111,89,80}},
+{ 790335, 3, {193,65,63}},
+{ 790380, 3, {4391,15,12}},
+{ 790398, 3, {119,82,81}},
+{ 790400, 3, {104,95,80}},
+{ 790425, 3, {1171,27,25}},
+{ 790452, 3, {563,39,36}},
+{ 790464, 3, {179,69,64}},
+{ 790488, 3, {10979,9,8}},
+{ 790500, 3, {100,93,85}},
+{ 790560, 3, {122,81,80}},
+{ 790608, 3, {181,78,56}},
+{ 790680, 3, {599,40,33}},
+{ 790713, 3, {163,77,63}},
+{ 790740, 3, {191,69,60}},
+{ 790790, 3, {110,91,79}},
+{ 790860, 3, {269,60,49}},
+{ 790965, 3, {105,93,81}},
+{ 791010, 3, {99,94,85}},
+{ 791064, 3, {10987,9,8}},
+{ 791076, 3, {461,44,39}},
+{ 791100, 3, {293,54,50}},
+{ 791112, 3, {277,56,51}},
+{ 791136, 3, {123,96,67}},
+{ 791160, 3, {347,57,40}},
+{ 791175, 3, {137,77,75}},
+{ 791208, 3, {111,88,81}},
+{ 791280, 3, {157,72,70}},
+{ 791316, 3, {431,51,36}},
+{ 791400, 3, {1319,25,24}},
+{ 791424, 3, {229,64,54}},
+{ 791460, 3, {4397,15,12}},
+{ 791496, 3, {10993,9,8}},
+{ 791505, 3, {123,99,65}},
+{ 791520, 3, {97,96,85}},
+{ 791550, 3, {1759,25,18}},
+{ 791560, 3, {257,56,55}},
+{ 791568, 3, {239,69,48}},
+{ 791595, 3, {359,49,45}},
+{ 791616, 3, {112,93,76}},
+{ 791700, 3, {100,91,87}},
+{ 791712, 3, {2749,18,16}},
+{ 791760, 3, {3299,16,15}},
+{ 791775, 3, {115,85,81}},
+{ 791784, 3, {1571,24,21}},
+{ 791840, 3, {101,98,80}},
+{ 791844, 3, {151,76,69}},
+{ 791856, 3, {104,94,81}},
+{ 791868, 3, {857,33,28}},
+{ 791952, 3, {2357,21,16}},
+{ 792000, 3, {100,90,88}},
+{ 792072, 3, {193,72,57}},
+{ 792099, 3, {127,81,77}},
+{ 792120, 3, {105,92,82}},
+{ 792132, 3, {353,51,44}},
+{ 792180, 3, {163,81,60}},
+{ 792216, 3, {11003,9,8}},
+{ 792225, 3, {503,45,35}},
+{ 792240, 3, {3301,16,15}},
+{ 792300, 3, {139,76,75}},
+{ 792330, 3, {105,98,77}},
+{ 792360, 3, {120,93,71}},
+{ 792396, 3, {99,92,87}},
+{ 792477, 3, {599,49,27}},
+{ 792480, 3, {127,80,78}},
+{ 792504, 3, {1223,27,24}},
+{ 792528, 3, {114,88,79}},
+{ 792540, 3, {111,85,84}},
+{ 792585, 3, {103,95,81}},
+{ 792600, 3, {1321,25,24}},
+{ 792624, 3, {337,49,48}},
+{ 792675, 3, {271,65,45}},
+{ 792720, 3, {367,48,45}},
+{ 792792, 3, {99,91,88}},
+{ 792800, 3, {991,32,25}},
+{ 792855, 3, {839,35,27}},
+{ 792864, 3, {2753,18,16}},
+{ 792870, 3, {107,95,78}},
+{ 792880, 3, {106,88,85}},
+{ 792948, 3, {169,69,68}},
+{ 792960, 3, {118,84,80}},
+{ 792984, 3, {111,94,76}},
+{ 793044, 3, {1049,28,27}},
+{ 793056, 3, {751,33,32}},
+{ 793065, 3, {105,91,83}},
+{ 793100, 3, {103,100,77}},
+{ 793104, 3, {104,93,82}},
+{ 793152, 3, {102,96,81}},
+{ 793320, 3, {601,40,33}},
+{ 793380, 3, {1889,21,20}},
+{ 793440, 3, {96,95,87}},
+{ 793476, 3, {108,93,79}},
+{ 793485, 3, {229,63,55}},
+{ 793500, 3, {115,92,75}},
+{ 793520, 3, {109,91,80}},
+{ 793560, 3, {389,51,40}},
+{ 793584, 3, {167,72,66}},
+{ 793611, 3, {119,117,57}},
+{ 793620, 3, {4409,15,12}},
+{ 793680, 3, {3307,16,15}},
+{ 793716, 3, {859,33,28}},
+{ 793728, 3, {106,96,78}},
+{ 793800, 3, {98,90,90}},
+{ 793845, 3, {117,115,59}},
+{ 793848, 3, {97,93,88}},
+{ 793884, 3, {727,39,28}},
+{ 793920, 3, {827,32,30}},
+{ 793944, 3, {11027,9,8}},
+{ 793980, 3, {401,45,44}},
+{ 794016, 3, {919,32,27}},
+{ 794040, 3, {509,40,39}},
+{ 794052, 3, {137,84,69}},
+{ 794070, 3, {173,85,54}},
+{ 794080, 3, {709,35,32}},
+{ 794160, 3, {1103,30,24}},
+{ 794200, 3, {95,95,88}},
+{ 794240, 3, {128,85,73}},
+{ 794304, 3, {197,64,63}},
+{ 794340, 3, {1471,27,20}},
+{ 794352, 3, {114,104,67}},
+{ 794376, 3, {118,99,68}},
+{ 794400, 3, {331,50,48}},
+{ 794430, 3, {97,91,90}},
+{ 794486, 3, {121,98,67}},
+{ 794508, 3, {463,44,39}},
+{ 794556, 3, {1051,28,27}},
+{ 794560, 3, {191,65,64}},
+{ 794580, 3, {102,95,82}},
+{ 794592, 3, {96,93,89}},
+{ 794640, 3, {105,88,86}},
+{ 794682, 3, {119,106,63}},
+{ 794850, 3, {757,35,30}},
+{ 794880, 3, {96,92,90}},
+{ 794976, 3, {96,91,91}},
+{ 794988, 3, {433,51,36}},
+{ 795015, 3, {151,81,65}},
+{ 795025, 3, {175,77,59}},
+{ 795036, 3, {317,57,44}},
+{ 795060, 3, {631,36,35}},
+{ 795080, 3, {139,88,65}},
+{ 795120, 3, {3313,16,15}},
+{ 795123, 3, {601,49,27}},
+{ 795150, 3, {95,93,90}},
+{ 795156, 3, {129,92,67}},
+{ 795168, 3, {251,66,48}},
+{ 795300, 3, {241,60,55}},
+{ 795312, 3, {263,56,54}},
+{ 795384, 3, {11047,9,8}},
+{ 795420, 3, {491,45,36}},
+{ 795432, 3, {131,88,69}},
+{ 795501, 3, {161,81,61}},
+{ 795528, 3, {127,87,72}},
+{ 795600, 3, {104,90,85}},
+{ 795708, 3, {93,93,92}},
+{ 795720, 3, {349,57,40}},
+{ 795744, 3, {307,54,48}},
+{ 795780, 3, {4421,15,12}},
+{ 795795, 3, {143,105,53}},
+{ 795816, 3, {1579,24,21}},
+{ 795825, 3, {131,81,75}},
+{ 795840, 3, {829,32,30}},
+{ 795872, 3, {119,88,76}},
+{ 795960, 3, {110,108,67}},
+{ 796005, 3, {133,95,63}},
+{ 796032, 3, {691,36,32}},
+{ 796068, 3, {108,91,81}},
+{ 796080, 3, {107,93,80}},
+{ 796104, 3, {11057,9,8}},
+{ 796140, 3, {4423,15,12}},
+{ 796200, 3, {1327,25,24}},
+{ 796224, 3, {104,88,87}},
+{ 796248, 3, {11059,9,8}},
+{ 796250, 3, {125,91,70}},
+{ 796290, 3, {127,95,66}},
+{ 796320, 3, {105,96,79}},
+{ 796392, 3, {1229,27,24}},
+{ 796400, 3, {181,80,55}},
+{ 796536, 3, {111,92,78}},
+{ 796544, 3, {127,98,64}},
+{ 796560, 3, {3319,16,15}},
+{ 796572, 3, {109,87,84}},
+{ 796600, 3, {569,40,35}},
+{ 796656, 3, {2371,21,16}},
+{ 796740, 3, {271,60,49}},
+{ 796770, 3, {227,65,54}},
+{ 796800, 3, {100,96,83}},
+{ 796824, 3, {102,93,84}},
+{ 796860, 3, {233,60,57}},
+{ 796887, 3, {139,91,63}},
+{ 796896, 3, {2767,18,16}},
+{ 796950, 3, {115,90,77}},
+{ 796968, 3, {11069,9,8}},
+{ 796992, 3, {593,42,32}},
+{ 797112, 3, {11071,9,8}},
+{ 797160, 3, {105,104,73}},
+{ 797175, 3, {1181,27,25}},
+{ 797184, 3, {173,72,64}},
+{ 797280, 3, {151,80,66}},
+{ 797300, 3, {119,100,67}},
+{ 797316, 3, {269,57,52}},
+{ 797364, 3, {107,92,81}},
+{ 797400, 3, {443,45,40}},
+{ 797412, 3, {863,33,28}},
+{ 797445, 3, {179,81,55}},
+{ 797520, 3, {3323,16,15}},
+{ 797544, 3, {106,99,76}},
+{ 797580, 3, {211,63,60}},
+{ 797600, 3, {997,32,25}},
+{ 797688, 3, {1231,27,24}},
+{ 797760, 3, {277,60,48}},
+{ 797769, 3, {147,81,67}},
+{ 797832, 3, {1583,24,21}},
+{ 797850, 3, {197,75,54}},
+{ 797888, 3, {137,91,64}},
+{ 797895, 3, {149,85,63}},
+{ 797976, 3, {11083,9,8}},
+{ 798000, 3, {100,95,84}},
+{ 798112, 3, {509,49,32}},
+{ 798192, 3, {241,69,48}},
+{ 798264, 3, {11087,9,8}},
+{ 798312, 3, {116,93,74}},
+{ 798330, 3, {115,89,78}},
+{ 798336, 3, {99,96,84}},
+{ 798420, 3, {1901,21,20}},
+{ 798480, 3, {1109,30,24}},
+{ 798525, 3, {117,91,75}},
+{ 798560, 3, {115,112,62}},
+{ 798672, 3, {2377,21,16}},
+{ 798684, 3, {113,93,76}},
+{ 798696, 3, {11093,9,8}},
+{ 798750, 3, {125,90,71}},
+{ 798840, 3, {317,56,45}},
+{ 798864, 3, {102,89,88}},
+{ 798875, 3, {125,83,77}},
+{ 798876, 3, {569,39,36}},
+{ 798912, 3, {114,96,73}},
+{ 798930, 3, {269,55,54}},
+{ 798960, 3, {3329,16,15}},
+{ 798984, 3, {137,81,72}},
+{ 799008, 3, {112,87,82}},
+{ 799020, 3, {193,69,60}},
+{ 799040, 3, {227,64,55}},
+{ 799050, 3, {761,35,30}},
+{ 799128, 3, {1009,33,24}},
+{ 799200, 3, {111,90,80}},
+{ 799296, 3, {181,69,64}},
+{ 799380, 3, {4441,15,12}},
+{ 799392, 3, {757,33,32}},
+{ 799400, 3, {571,40,35}},
+{ 799425, 3, {99,95,85}},
+{ 799440, 3, {3331,16,15}},
+{ 799470, 3, {105,94,81}},
+{ 799500, 3, {125,82,78}},
+{ 799524, 3, {673,36,33}},
+{ 799596, 3, {167,76,63}},
+{ 799650, 3, {1777,25,18}},
+{ 799680, 3, {98,96,85}},
+{ 799740, 3, {1481,27,20}},
+{ 799776, 3, {2777,18,16}},
+{ 799800, 3, {100,93,86}},
+{ 799875, 3, {125,81,79}},
+{ 799890, 3, {293,65,42}},
+{ 799920, 3, {101,90,88}},
+{ 799968, 3, {641,39,32}},
+{ 800016, 3, {2381,21,16}},
+{ 800037, 3, {119,83,81}},
+{ 800052, 3, {121,87,76}},
+{ 800072, 3, {157,91,56}},
+{ 800100, 3, {127,84,75}},
+{ 800124, 3, {223,69,52}},
+{ 800136, 3, {11113,9,8}},
+{ 800280, 3, {104,95,81}},
+{ 800352, 3, {397,48,42}},
+{ 800360, 3, {107,88,85}},
+{ 800400, 3, {100,92,87}},
+{ 800415, 3, {105,99,77}},
+{ 800424, 3, {11117,9,8}},
+{ 800436, 3, {733,39,28}},
+{ 800460, 3, {4447,15,12}},
+{ 800496, 3, {109,102,72}},
+{ 800568, 3, {11119,9,8}},
+{ 800688, 3, {2383,21,16}},
+{ 800700, 3, {157,75,68}},
+{ 800800, 3, {100,91,88}},
+{ 800820, 3, {1483,27,20}},
+{ 800856, 3, {227,63,56}},
+{ 800928, 3, {103,96,81}},
+{ 800940, 3, {1907,21,20}},
+{ 800976, 3, {111,88,82}},
+{ 801024, 3, {149,84,64}},
+{ 801090, 3, {115,86,81}},
+{ 801150, 3, {109,98,75}},
+{ 801180, 3, {4451,15,12}},
+{ 801192, 3, {251,57,56}},
+{ 801216, 3, {107,96,78}},
+{ 801225, 3, {1187,27,25}},
+{ 801240, 3, {607,40,33}},
+{ 801320, 3, {115,104,67}},
+{ 801372, 3, {467,44,39}},
+{ 801420, 3, {111,95,76}},
+{ 801432, 3, {11131,9,8}},
+{ 801504, 3, {99,92,88}},
+{ 801570, 3, {347,55,42}},
+{ 801576, 3, {1237,27,24}},
+{ 801600, 3, {167,75,64}},
+{ 801625, 3, {125,121,53}},
+{ 801640, 3, {409,49,40}},
+{ 801648, 3, {293,57,48}},
+{ 801675, 3, {509,45,35}},
+{ 801684, 3, {571,39,36}},
+{ 801720, 3, {131,85,72}},
+{ 801738, 3, {101,98,81}},
+{ 801780, 3, {105,92,83}},
+{ 801792, 3, {96,96,87}},
+{ 801801, 3, {99,91,89}},
+{ 801864, 3, {111,86,84}},
+{ 801920, 3, {179,70,64}},
+{ 802032, 3, {98,93,88}},
+{ 802116, 3, {1061,28,27}},
+{ 802179, 3, {119,107,63}},
+{ 802200, 3, {191,70,60}},
+{ 802230, 3, {121,85,78}},
+{ 802260, 3, {4457,15,12}},
+{ 802296, 3, {1013,33,24}},
+{ 802320, 3, {3343,16,15}},
+{ 802350, 3, {1783,25,18}},
+{ 802368, 3, {199,64,63}},
+{ 802375, 3, {131,125,49}},
+{ 802400, 3, {118,85,80}},
+{ 802464, 3, {643,39,32}},
+{ 802536, 3, {281,56,51}},
+{ 802560, 3, {96,95,88}},
+{ 802620, 3, {98,91,90}},
+{ 802656, 3, {929,32,27}},
+{ 802704, 3, {2389,21,16}},
+{ 802725, 3, {139,77,75}},
+{ 802728, 3, {11149,9,8}},
+{ 802776, 3, {104,93,83}},
+{ 802872, 3, {118,84,81}},
+{ 802880, 3, {193,65,64}},
+{ 802944, 3, {102,96,82}},
+{ 802956, 3, {121,84,79}},
+{ 802980, 3, {1487,27,20}},
+{ 803061, 3, {607,49,27}},
+{ 803088, 3, {104,99,78}},
+{ 803110, 3, {149,77,70}},
+{ 803148, 3, {127,93,68}},
+{ 803187, 3, {133,99,61}},
+{ 803196, 3, {111,108,67}},
+{ 803200, 3, {251,64,50}},
+{ 803232, 3, {2789,18,16}},
+{ 803244, 3, {271,57,52}},
+{ 803250, 3, {105,90,85}},
+{ 803264, 3, {163,77,64}},
+{ 803280, 3, {3347,16,15}},
+{ 803340, 3, {4463,15,12}},
+{ 803436, 3, {123,92,71}},
+{ 803439, 3, {109,91,81}},
+{ 803448, 3, {11159,9,8}},
+{ 803460, 3, {1913,21,20}},
+{ 803520, 3, {96,93,90}},
+{ 803592, 3, {11161,9,8}},
+{ 803600, 3, {100,98,82}},
+{ 803616, 3, {761,33,32}},
+{ 803628, 3, {1063,28,27}},
+{ 803700, 3, {95,94,90}},
+{ 803712, 3, {96,92,91}},
+{ 803790, 3, {229,65,54}},
+{ 803808, 3, {2791,18,16}},
+{ 803880, 3, {105,88,87}},
+{ 804048, 3, {2393,21,16}},
+{ 804060, 3, {1489,27,20}},
+{ 804150, 3, {1787,25,18}},
+{ 804240, 3, {1117,30,24}},
+{ 804264, 3, {94,93,92}},
+{ 804270, 3, {102,95,83}},
+{ 804276, 3, {677,36,33}},
+{ 804312, 3, {11171,9,8}},
+{ 804375, 3, {125,99,65}},
+{ 804440, 3, {104,91,85}},
+{ 804456, 3, {11173,9,8}},
+{ 804573, 3, {129,81,77}},
+{ 804600, 3, {149,75,72}},
+{ 804636, 3, {103,93,84}},
+{ 804720, 3, {479,42,40}},
+{ 804744, 3, {11177,9,8}},
+{ 804780, 3, {263,60,51}},
+{ 804816, 3, {108,92,81}},
+{ 804840, 3, {353,57,40}},
+{ 804870, 3, {271,55,54}},
+{ 804888, 3, {1597,24,21}},
+{ 804960, 3, {104,90,86}},
+{ 805050, 3, {1789,25,18}},
+{ 805056, 3, {599,42,32}},
+{ 805068, 3, {107,99,76}},
+{ 805120, 3, {128,85,74}},
+{ 805140, 3, {108,105,71}},
+{ 805200, 3, {122,88,75}},
+{ 805248, 3, {233,64,54}},
+{ 805272, 3, {104,89,87}},
+{ 805275, 3, {1193,27,25}},
+{ 805280, 3, {719,35,32}},
+{ 805350, 3, {118,91,75}},
+{ 805440, 3, {839,32,30}},
+{ 805464, 3, {113,88,81}},
+{ 805500, 3, {179,75,60}},
+{ 805536, 3, {2797,18,16}},
+{ 805545, 3, {117,85,81}},
+{ 805596, 3, {359,51,44}},
+{ 805600, 3, {106,95,80}},
+{ 805644, 3, {139,84,69}},
+{ 805680, 3, {373,48,45}},
+{ 805752, 3, {114,93,76}},
+{ 805896, 3, {108,91,82}},
+{ 805920, 3, {115,96,73}},
+{ 805950, 3, {199,75,54}},
+{ 805980, 3, {101,95,84}},
+{ 805992, 3, {129,88,71}},
+{ 806004, 3, {439,51,36}},
+{ 806064, 3, {2399,21,16}},
+{ 806080, 3, {229,64,55}},
+{ 806085, 3, {853,35,27}},
+{ 806112, 3, {311,54,48}},
+{ 806160, 3, {3359,16,15}},
+{ 806184, 3, {11197,9,8}},
+{ 806190, 3, {349,55,42}},
+{ 806208, 3, {104,102,76}},
+{ 806220, 3, {1493,27,20}},
+{ 806344, 3, {119,88,77}},
+{ 806355, 3, {181,81,55}},
+{ 806400, 3, {100,96,84}},
+{ 806436, 3, {131,81,76}},
+{ 806580, 3, {4481,15,12}},
+{ 806640, 3, {3361,16,15}},
+{ 806652, 3, {99,97,84}},
+{ 806664, 3, {122,87,76}},
+{ 806688, 3, {2801,18,16}},
+{ 806715, 3, {197,65,63}},
+{ 806748, 3, {111,92,79}},
+{ 806784, 3, {191,66,64}},
+{ 806820, 3, {113,85,84}},
+{ 806832, 3, {431,48,39}},
+{ 806904, 3, {1601,24,21}},
+{ 806940, 3, {4483,15,12}},
+{ 806960, 3, {131,80,77}},
+{ 806988, 3, {739,39,28}},
+{ 807048, 3, {1019,33,24}},
+{ 807200, 3, {1009,32,25}},
+{ 807264, 3, {2803,18,16}},
+{ 807300, 3, {115,90,78}},
+{ 807336, 3, {11213,9,8}},
+{ 807345, 3, {233,63,55}},
+{ 807360, 3, {116,87,80}},
+{ 807450, 3, {769,35,30}},
+{ 807456, 3, {647,39,32}},
+{ 807520, 3, {103,98,80}},
+{ 807552, 3, {701,36,32}},
+{ 807625, 3, {125,91,71}},
+{ 807660, 3, {641,36,35}},
+{ 807675, 3, {121,89,75}},
+{ 807690, 3, {109,95,78}},
+{ 807744, 3, {601,42,32}},
+{ 807800, 3, {577,40,35}},
+{ 807840, 3, {102,90,88}},
+{ 807912, 3, {229,63,56}},
+{ 807975, 3, {105,95,81}},
+{ 808056, 3, {108,87,86}},
+{ 808080, 3, {111,91,80}},
+{ 808164, 3, {1069,28,27}},
+{ 808200, 3, {449,45,40}},
+{ 808248, 3, {283,56,51}},
+{ 808335, 3, {115,99,71}},
+{ 808353, 3, {141,91,63}},
+{ 808380, 3, {499,45,36}},
+{ 808404, 3, {101,92,87}},
+{ 808416, 3, {401,48,42}},
+{ 808488, 3, {197,72,57}},
+{ 808500, 3, {105,100,77}},
+{ 808560, 3, {1123,30,24}},
+{ 808605, 3, {151,85,63}},
+{ 808632, 3, {1021,33,24}},
+{ 808640, 3, {112,95,76}},
+{ 808704, 3, {104,96,81}},
+{ 808740, 3, {4493,15,12}},
+{ 808752, 3, {112,87,83}},
+{ 808800, 3, {337,50,48}},
+{ 808808, 3, {101,91,88}},
+{ 808830, 3, {99,95,86}},
+{ 808860, 3, {122,85,78}},
+{ 808990, 3, {127,91,70}},
+{ 809040, 3, {3371,16,15}},
+{ 809088, 3, {98,96,86}},
+{ 809100, 3, {100,93,87}},
+{ 809160, 3, {613,40,33}},
+{ 809200, 3, {112,85,85}},
+{ 809208, 3, {11239,9,8}},
+{ 809235, 3, {367,49,45}},
+{ 809250, 3, {125,83,78}},
+{ 809280, 3, {281,60,48}},
+{ 809352, 3, {1249,27,24}},
+{ 809370, 3, {115,102,69}},
+{ 809424, 3, {112,99,73}},
+{ 809460, 3, {1499,27,20}},
+{ 809496, 3, {11243,9,8}},
+{ 809520, 3, {3373,16,15}},
+{ 809536, 3, {139,91,64}},
+{ 809568, 3, {937,32,27}},
+{ 809640, 3, {173,72,65}},
+{ 809676, 3, {102,98,81}},
+{ 809784, 3, {163,72,69}},
+{ 809820, 3, {409,45,44}},
+{ 809856, 3, {111,96,76}},
+{ 809865, 3, {857,35,27}},
+{ 809880, 3, {397,51,40}},
+{ 809900, 3, {100,91,89}},
+{ 809928, 3, {1607,24,21}},
+{ 809952, 3, {118,88,78}},
+{ 810040, 3, {263,56,55}},
+{ 810072, 3, {11251,9,8}},
+{ 810096, 3, {2411,21,16}},
+{ 810108, 3, {577,39,36}},
+{ 810117, 3, {167,77,63}},
+{ 810144, 3, {97,96,87}},
+{ 810160, 3, {104,95,82}},
+{ 810180, 3, {643,36,35}},
+{ 810216, 3, {99,93,88}},
+{ 810225, 3, {277,65,45}},
+{ 810240, 3, {211,64,60}},
+{ 810264, 3, {106,91,84}},
+{ 810288, 3, {331,51,48}},
+{ 810300, 3, {111,100,73}},
+{ 810348, 3, {877,33,28}},
+{ 810400, 3, {1013,32,25}},
+{ 810405, 3, {115,87,81}},
+{ 810432, 3, {112,108,67}},
+{ 810450, 3, {1801,25,18}},
+{ 810480, 3, {307,55,48}},
+{ 810492, 3, {137,87,68}},
+{ 810504, 3, {11257,9,8}},
+{ 810540, 3, {108,95,79}},
+{ 810576, 3, {433,48,39}},
+{ 810600, 3, {193,70,60}},
+{ 810612, 3, {99,92,89}},
+{ 810648, 3, {139,81,72}},
+{ 810675, 3, {1201,27,25}},
+{ 810744, 3, {111,88,83}},
+{ 810792, 3, {11261,9,8}},
+{ 810810, 3, {99,91,90}},
+{ 810880, 3, {181,70,64}},
+{ 810900, 3, {106,90,85}},
+{ 810920, 3, {97,95,88}},
+{ 810936, 3, {1609,24,21}},
+{ 810950, 3, {331,50,49}},
+{ 810960, 3, {109,93,80}},
+{ 810999, 3, {613,49,27}},
+{ 811020, 3, {1931,21,20}},
+{ 811104, 3, {112,102,71}},
+{ 811188, 3, {111,87,84}},
+{ 811260, 3, {4507,15,12}},
+{ 811296, 3, {313,54,48}},
+{ 811356, 3, {743,39,28}},
+{ 811395, 3, {117,95,73}},
+{ 811404, 3, {683,36,33}},
+{ 811440, 3, {98,92,90}},
+{ 811536, 3, {106,88,87}},
+{ 811620, 3, {167,81,60}},
+{ 811650, 3, {773,35,30}},
+{ 811656, 3, {11273,9,8}},
+{ 811680, 3, {96,95,89}},
+{ 811716, 3, {173,69,68}},
+{ 811720, 3, {223,65,56}},
+{ 811755, 3, {859,35,27}},
+{ 811776, 3, {151,84,64}},
+{ 811800, 3, {100,99,82}},
+{ 811860, 3, {1933,21,20}},
+{ 811872, 3, {2819,18,16}},
+{ 811944, 3, {179,72,63}},
+{ 811980, 3, {347,52,45}},
+{ 812064, 3, {769,33,32}},
+{ 812088, 3, {11279,9,8}},
+{ 812112, 3, {2417,21,16}},
+{ 812160, 3, {96,94,90}},
+{ 812175, 3, {105,91,85}},
+{ 812196, 3, {293,63,44}},
+{ 812250, 3, {95,95,90}},
+{ 812268, 3, {109,92,81}},
+{ 812322, 3, {307,54,49}},
+{ 812340, 3, {4513,15,12}},
+{ 812430, 3, {118,85,81}},
+{ 812448, 3, {96,93,91}},
+{ 812592, 3, {108,99,76}},
+{ 812664, 3, {11287,9,8}},
+{ 812700, 3, {105,90,86}},
+{ 812736, 3, {102,96,83}},
+{ 812760, 3, {521,40,39}},
+{ 812763, 3, {133,97,63}},
+{ 812820, 3, {95,93,92}},
+{ 812880, 3, {1129,30,24}},
+{ 812889, 3, {119,99,69}},
+{ 812952, 3, {1613,24,21}},
+{ 813024, 3, {941,32,27}},
+{ 813060, 3, {4517,15,12}},
+{ 813120, 3, {105,88,88}},
+{ 813200, 3, {107,95,80}},
+{ 813280, 3, {104,92,85}},
+{ 813285, 3, {155,99,53}},
+{ 813348, 3, {443,51,36}},
+{ 813360, 3, {3389,16,15}},
+{ 813384, 3, {104,99,79}},
+{ 813400, 3, {100,98,83}},
+{ 813420, 3, {4519,15,12}},
+{ 813456, 3, {269,56,54}},
+{ 813504, 3, {223,64,57}},
+{ 813528, 3, {11299,9,8}},
+{ 813564, 3, {108,93,81}},
+{ 813600, 3, {113,90,80}},
+{ 813648, 3, {134,88,69}},
+{ 813696, 3, {163,78,64}},
+{ 813840, 3, {3391,16,15}},
+{ 813890, 3, {151,77,70}},
+{ 813960, 3, {102,95,84}},
+{ 814044, 3, {881,33,28}},
+{ 814050, 3, {134,81,75}},
+{ 814128, 3, {2423,21,16}},
+{ 814140, 3, {4523,15,12}},
+{ 814164, 3, {307,52,51}},
+{ 814176, 3, {257,66,48}},
+{ 814200, 3, {118,92,75}},
+{ 814240, 3, {727,35,32}},
+{ 814275, 3, {141,77,75}},
+{ 814320, 3, {104,90,87}},
+{ 814380, 3, {277,60,49}},
+{ 814392, 3, {11311,9,8}},
+{ 814440, 3, {617,40,33}},
+{ 814464, 3, {101,96,84}},
+{ 814476, 3, {227,69,52}},
+{ 814500, 3, {181,75,60}},
+{ 814572, 3, {121,99,68}},
+{ 814625, 3, {133,125,49}},
+{ 814680, 3, {120,93,73}},
+{ 814725, 3, {135,85,71}},
+{ 814824, 3, {11317,9,8}},
+{ 814860, 3, {503,45,36}},
+{ 814905, 3, {199,65,63}},
+{ 814944, 3, {653,39,32}},
+{ 814950, 3, {1811,25,18}},
+{ 814968, 3, {99,98,84}},
+{ 815040, 3, {283,60,48}},
+{ 815100, 3, {110,95,78}},
+{ 815112, 3, {11321,9,8}},
+{ 815200, 3, {1019,32,25}},
+{ 815220, 3, {647,36,35}},
+{ 815232, 3, {193,66,64}},
+{ 815256, 3, {117,104,67}},
+{ 815304, 3, {211,69,56}},
+{ 815320, 3, {109,88,85}},
+{ 815360, 3, {104,98,80}},
+{ 815364, 3, {116,99,71}},
+{ 815400, 3, {151,75,72}},
+{ 815424, 3, {137,93,64}},
+{ 815430, 3, {353,55,42}},
+{ 815490, 3, {117,85,82}},
+{ 815535, 3, {863,35,27}},
+{ 815580, 3, {197,69,60}},
+{ 815670, 3, {106,95,81}},
+{ 815688, 3, {11329,9,8}},
+{ 815724, 3, {108,91,83}},
+{ 815760, 3, {103,90,88}},
+{ 815808, 3, {607,42,32}},
+{ 815832, 3, {1259,27,24}},
+{ 815880, 3, {523,40,39}},
+{ 815892, 3, {883,33,28}},
+{ 815904, 3, {2833,18,16}},
+{ 815940, 3, {1511,27,20}},
+{ 815976, 3, {1619,24,21}},
+{ 816000, 3, {100,96,85}},
+{ 816060, 3, {116,105,67}},
+{ 816144, 3, {347,49,48}},
+{ 816192, 3, {109,96,78}},
+{ 816200, 3, {106,100,77}},
+{ 816228, 3, {123,84,79}},
+{ 816255, 3, {99,97,85}},
+{ 816270, 3, {115,91,78}},
+{ 816288, 3, {773,33,32}},
+{ 816291, 3, {617,49,27}},
+{ 816400, 3, {157,80,65}},
+{ 816408, 3, {102,92,87}},
+{ 816552, 3, {1031,33,24}},
+{ 816585, 3, {105,101,77}},
+{ 816600, 3, {1361,25,24}},
+{ 816660, 3, {349,52,45}},
+{ 816696, 3, {199,72,57}},
+{ 816768, 3, {709,36,32}},
+{ 816800, 3, {1021,32,25}},
+{ 816816, 3, {102,91,88}},
+{ 816912, 3, {122,93,72}},
+{ 816928, 3, {521,49,32}},
+{ 816960, 3, {111,92,80}},
+{ 816984, 3, {1621,24,21}},
+{ 817047, 3, {131,81,77}},
+{ 817056, 3, {2837,18,16}},
+{ 817080, 3, {619,40,33}},
+{ 817128, 3, {104,97,81}},
+{ 817173, 3, {119,109,63}},
+{ 817245, 3, {127,99,65}},
+{ 817272, 3, {11351,9,8}},
+{ 817344, 3, {99,96,86}},
+{ 817380, 3, {239,60,57}},
+{ 817416, 3, {11353,9,8}},
+{ 817440, 3, {131,80,78}},
+{ 817452, 3, {108,87,87}},
+{ 817614, 3, {103,98,81}},
+{ 817650, 3, {115,90,79}},
+{ 817680, 3, {3407,16,15}},
+{ 817740, 3, {118,90,77}},
+{ 817800, 3, {100,94,87}},
+{ 817830, 3, {233,65,54}},
+{ 817836, 3, {211,68,57}},
+{ 817908, 3, {107,91,84}},
+{ 817920, 3, {120,96,71}},
+{ 818040, 3, {401,51,40}},
+{ 818125, 3, {125,85,77}},
+{ 818136, 3, {1033,33,24}},
+{ 818160, 3, {487,42,40}},
+{ 818181, 3, {111,91,81}},
+{ 818202, 3, {121,98,69}},
+{ 818208, 3, {947,32,27}},
+{ 818235, 3, {99,95,87}},
+{ 818244, 3, {191,68,63}},
+{ 818292, 3, {111,97,76}},
+{ 818400, 3, {100,93,88}},
+{ 818460, 3, {4547,15,12}},
+{ 818496, 3, {98,96,87}},
+{ 818520, 3, {359,57,40}},
+{ 818550, 3, {107,90,85}},
+{ 818568, 3, {11369,9,8}},
+{ 818580, 3, {1949,21,20}},
+{ 818640, 3, {379,48,45}},
+{ 818720, 3, {112,86,85}},
+{ 818775, 3, {1213,27,25}},
+{ 818784, 3, {2843,18,16}},
+{ 818820, 3, {4549,15,12}},
+{ 818832, 3, {2437,21,16}},
+{ 818880, 3, {853,32,30}},
+{ 818892, 3, {129,92,69}},
+{ 818928, 3, {99,94,88}},
+{ 818937, 3, {619,49,27}},
+{ 819000, 3, {100,91,90}},
+{ 819072, 3, {108,96,79}},
+{ 819120, 3, {3413,16,15}},
+{ 819192, 3, {107,88,87}},
+{ 819225, 3, {331,55,45}},
+{ 819264, 3, {251,64,51}},
+{ 819280, 3, {98,95,88}},
+{ 819315, 3, {119,85,81}},
+{ 819390, 3, {191,66,65}},
+{ 819420, 3, {1951,21,20}},
+{ 819504, 3, {271,56,54}},
+{ 819520, 3, {197,65,64}},
+{ 819525, 3, {223,75,49}},
+{ 819540, 3, {157,87,60}},
+{ 819576, 3, {11383,9,8}},
+{ 819588, 3, {887,33,28}},
+{ 819624, 3, {111,104,71}},
+{ 819720, 3, {99,92,90}},
+{ 819819, 3, {99,91,91}},
+{ 819840, 3, {122,84,80}},
+{ 819888, 3, {116,93,76}},
+{ 819945, 3, {137,95,63}},
+{ 820008, 3, {1627,24,21}},
+{ 820040, 3, {104,95,83}},
+{ 820064, 3, {523,49,32}},
+{ 820080, 3, {120,102,67}},
+{ 820092, 3, {751,39,28}},
+{ 820116, 3, {109,99,76}},
+{ 820125, 3, {125,81,81}},
+{ 820160, 3, {233,64,55}},
+{ 820176, 3, {2441,21,16}},
+{ 820200, 3, {1367,25,24}},
+{ 820260, 3, {98,93,90}},
+{ 820296, 3, {11393,9,8}},
+{ 820344, 3, {257,57,56}},
+{ 820350, 3, {1823,25,18}},
+{ 820512, 3, {111,88,84}},
+{ 820575, 3, {521,45,35}},
+{ 820584, 3, {131,87,72}},
+{ 820692, 3, {149,81,68}},
+{ 820728, 3, {11399,9,8}},
+{ 820750, 3, {125,98,67}},
+{ 820755, 3, {117,115,61}},
+{ 820800, 3, {96,95,90}},
+{ 820820, 3, {110,91,82}},
+{ 820848, 3, {349,49,48}},
+{ 820908, 3, {691,36,33}},
+{ 820960, 3, {733,35,32}},
+{ 820980, 3, {4561,15,12}},
+{ 821016, 3, {181,72,63}},
+{ 821028, 3, {277,57,52}},
+{ 821040, 3, {311,55,48}},
+{ 821088, 3, {2851,18,16}},
+{ 821100, 3, {105,92,85}},
+{ 821142, 3, {133,98,63}},
+{ 821184, 3, {96,94,91}},
+{ 821240, 3, {419,49,40}},
+{ 821250, 3, {125,90,73}},
+{ 821280, 3, {118,87,80}},
+{ 821304, 3, {122,99,68}},
+{ 821370, 3, {131,95,66}},
+{ 821376, 3, {96,93,92}},
+{ 821400, 3, {111,100,74}},
+{ 821436, 3, {127,84,77}},
+{ 821457, 3, {119,117,59}},
+{ 821475, 3, {1217,27,25}},
+{ 821520, 3, {163,72,70}},
+{ 821583, 3, {147,81,69}},
+{ 821592, 3, {11411,9,8}},
+{ 821610, 3, {179,85,54}},
+{ 821632, 3, {131,98,64}},
+{ 821652, 3, {229,69,52}},
+{ 821664, 3, {317,54,48}},
+{ 821700, 3, {100,99,83}},
+{ 821730, 3, {105,91,86}},
+{ 821772, 3, {1087,28,27}},
+{ 821800, 3, {587,40,35}},
+{ 821808, 3, {439,48,39}},
+{ 821925, 3, {281,65,45}},
+{ 821940, 3, {103,95,84}},
+{ 821964, 3, {479,44,39}},
+{ 821975, 3, {175,77,61}},
+{ 822000, 3, {137,80,75}},
+{ 822024, 3, {233,63,56}},
+{ 822060, 3, {4567,15,12}},
+{ 822096, 3, {173,72,66}},
+{ 822120, 3, {104,93,85}},
+{ 822150, 3, {105,90,87}},
+{ 822192, 3, {2447,21,16}},
+{ 822276, 3, {251,63,52}},
+{ 822324, 3, {139,87,68}},
+{ 822360, 3, {105,89,88}},
+{ 822400, 3, {257,64,50}},
+{ 822420, 3, {1523,27,20}},
+{ 822432, 3, {659,39,32}},
+{ 822456, 3, {11423,9,8}},
+{ 822465, 3, {373,49,45}},
+{ 822480, 3, {149,80,69}},
+{ 822492, 3, {124,99,67}},
+{ 822510, 3, {111,95,78}},
+{ 822528, 3, {102,96,84}},
+{ 822600, 3, {457,45,40}},
+{ 822624, 3, {114,88,82}},
+{ 822640, 3, {113,91,80}},
+{ 822690, 3, {277,55,54}},
+{ 822720, 3, {857,32,30}},
+{ 822780, 3, {653,36,35}},
+{ 822800, 3, {110,88,85}},
+{ 822816, 3, {2857,18,16}},
+{ 822825, 3, {135,115,53}},
+{ 822864, 3, {112,93,79}},
+{ 822888, 3, {1039,33,24}},
+{ 822900, 3, {211,65,60}},
+{ 822906, 3, {311,54,49}},
+{ 822960, 3, {127,81,80}},
+{ 822976, 3, {167,77,64}},
+{ 823140, 3, {269,60,51}},
+{ 823200, 3, {100,98,84}},
+{ 823284, 3, {99,99,84}},
+{ 823308, 3, {157,76,69}},
+{ 823365, 3, {107,95,81}},
+{ 823368, 3, {104,91,87}},
+{ 823392, 3, {953,32,27}},
+{ 823464, 3, {11437,9,8}},
+{ 823548, 3, {367,51,44}},
+{ 823592, 3, {191,77,56}},
+{ 823608, 3, {108,93,82}},
+{ 823650, 3, {102,95,85}},
+{ 823680, 3, {104,90,88}},
+{ 823725, 3, {523,45,35}},
+{ 823800, 3, {1373,25,24}},
+{ 823860, 3, {199,69,60}},
+{ 823872, 3, {613,42,32}},
+{ 823875, 3, {169,75,65}},
+{ 823896, 3, {11443,9,8}},
+{ 823900, 3, {107,100,77}},
+{ 823920, 3, {3433,16,15}},
+{ 823935, 3, {133,105,59}},
+{ 823950, 3, {1831,25,18}},
+{ 823968, 3, {2861,18,16}},
+{ 824100, 3, {123,100,67}},
+{ 824148, 3, {587,39,36}},
+{ 824160, 3, {101,96,85}},
+{ 824184, 3, {11447,9,8}},
+{ 824208, 3, {223,66,56}},
+{ 824220, 3, {241,60,57}},
+{ 824256, 3, {106,96,81}},
+{ 824364, 3, {449,51,36}},
+{ 824412, 3, {103,92,87}},
+{ 824544, 3, {409,48,42}},
+{ 824580, 3, {509,45,36}},
+{ 824640, 3, {859,32,30}},
+{ 824670, 3, {99,98,85}},
+{ 824733, 3, {133,117,53}},
+{ 824736, 3, {121,96,71}},
+{ 824772, 3, {311,52,51}},
+{ 824796, 3, {1091,28,27}},
+{ 824800, 3, {1031,32,25}},
+{ 824824, 3, {103,91,88}},
+{ 824832, 3, {179,72,64}},
+{ 824880, 3, {491,42,40}},
+{ 824928, 3, {661,39,32}},
+{ 824940, 3, {4583,15,12}},
+{ 824976, 3, {337,51,48}},
+{ 824985, 3, {105,97,81}},
+{ 825048, 3, {1637,24,21}},
+{ 825125, 3, {161,125,41}},
+{ 825160, 3, {421,49,40}},
+{ 825240, 3, {115,92,78}},
+{ 825300, 3, {131,84,75}},
+{ 825435, 3, {117,85,83}},
+{ 825440, 3, {112,110,67}},
+{ 825525, 3, {1223,27,25}},
+{ 825552, 3, {104,98,81}},
+{ 825600, 3, {100,96,86}},
+{ 825624, 3, {11467,9,8}},
+{ 825650, 3, {337,50,49}},
+{ 825792, 3, {102,92,88}},
+{ 825804, 3, {113,87,84}},
+{ 825825, 3, {121,91,75}},
+{ 825840, 3, {111,93,80}},
+{ 825912, 3, {11471,9,8}},
+{ 825984, 3, {239,64,54}},
+{ 826020, 3, {353,52,45}},
+{ 826056, 3, {149,77,72}},
+{ 826068, 3, {123,92,73}},
+{ 826140, 3, {281,60,49}},
+{ 826224, 3, {2459,21,16}},
+{ 826280, 3, {227,65,56}},
+{ 826308, 3, {1093,28,27}},
+{ 826320, 3, {313,55,48}},
+{ 826350, 3, {787,35,30}},
+{ 826380, 3, {4591,15,12}},
+{ 826400, 3, {1033,32,25}},
+{ 826500, 3, {100,95,87}},
+{ 826560, 3, {105,96,82}},
+{ 826584, 3, {101,93,88}},
+{ 826605, 3, {157,81,65}},
+{ 826644, 3, {757,39,28}},
+{ 826728, 3, {111,98,76}},
+{ 826740, 3, {1531,27,20}},
+{ 826776, 3, {11483,9,8}},
+{ 826812, 3, {193,68,63}},
+{ 826848, 3, {99,96,87}},
+{ 826880, 3, {128,85,76}},
+{ 827172, 3, {111,92,81}},
+{ 827190, 3, {101,91,90}},
+{ 827208, 3, {11489,9,8}},
+{ 827280, 3, {383,48,45}},
+{ 827288, 3, {119,88,79}},
+{ 827328, 3, {139,93,64}},
+{ 827352, 3, {11491,9,8}},
+{ 827400, 3, {197,70,60}},
+{ 827424, 3, {104,102,78}},
+{ 827460, 3, {4597,15,12}},
+{ 827496, 3, {1277,27,24}},
+{ 827640, 3, {99,95,88}},
+{ 827680, 3, {739,35,32}},
+{ 827700, 3, {100,93,89}},
+{ 827750, 3, {125,86,77}},
+{ 827760, 3, {3449,16,15}},
+{ 827775, 3, {283,65,45}},
+{ 827784, 3, {11497,9,8}},
+{ 827820, 3, {108,105,73}},
+{ 827840, 3, {199,65,64}},
+{ 827904, 3, {98,96,88}},
+{ 827970, 3, {193,66,65}},
+{ 828072, 3, {106,93,84}},
+{ 828096, 3, {227,64,57}},
+{ 828100, 3, {100,91,91}},
+{ 828135, 3, {239,63,55}},
+{ 828198, 3, {313,54,49}},
+{ 828216, 3, {11503,9,8}},
+{ 828240, 3, {112,87,85}},
+{ 828288, 3, {719,36,32}},
+{ 828300, 3, {251,60,55}},
+{ 828324, 3, {173,76,63}},
+{ 828400, 3, {109,95,80}},
+{ 828444, 3, {131,93,68}},
+{ 828480, 3, {863,32,30}},
+{ 828495, 3, {153,95,57}},
+{ 828520, 3, {269,56,55}},
+{ 828540, 3, {4603,15,12}},
+{ 828600, 3, {1381,25,24}},
+{ 828660, 3, {1973,21,20}},
+{ 828696, 3, {129,88,73}},
+{ 828720, 3, {1151,30,24}},
+{ 828750, 3, {125,85,78}},
+{ 828765, 3, {877,35,27}},
+{ 828792, 3, {1279,27,24}},
+{ 828828, 3, {99,92,91}},
+{ 828900, 3, {307,54,50}},
+{ 828912, 3, {2467,21,16}},
+{ 828954, 3, {119,86,81}},
+{ 828960, 3, {157,80,66}},
+{ 829035, 3, {115,89,81}},
+{ 829080, 3, {98,94,90}},
+{ 829125, 3, {125,99,67}},
+{ 829152, 3, {2879,18,16}},
+{ 829192, 3, {119,104,67}},
+{ 829248, 3, {617,42,32}},
+{ 829260, 3, {271,60,51}},
+{ 829290, 3, {359,55,42}},
+{ 829296, 3, {443,48,39}},
+{ 829332, 3, {1097,28,27}},
+{ 829350, 3, {97,95,90}},
+{ 829368, 3, {11519,9,8}},
+{ 829440, 3, {96,96,90}},
+{ 829500, 3, {105,100,79}},
+{ 829521, 3, {133,81,77}},
+{ 829575, 3, {1229,27,25}},
+{ 829600, 3, {122,85,80}},
+{ 829620, 3, {419,45,44}},
+{ 829632, 3, {149,87,64}},
+{ 829656, 3, {167,72,69}},
+{ 829680, 3, {3457,16,15}},
+{ 829800, 3, {461,45,40}},
+{ 829836, 3, {111,89,84}},
+{ 829872, 3, {113,102,72}},
+{ 829920, 3, {96,95,91}},
+{ 829932, 3, {97,93,92}},
+{ 829944, 3, {11527,9,8}},
+{ 830076, 3, {313,52,51}},
+{ 830088, 3, {122,84,81}},
+{ 830115, 3, {129,99,65}},
+{ 830148, 3, {331,57,44}},
+{ 830160, 3, {1153,30,24}},
+{ 830200, 3, {593,40,35}},
+{ 830250, 3, {125,82,81}},
+{ 830256, 3, {353,49,48}},
+{ 830280, 3, {111,88,85}},
+{ 830304, 3, {96,93,93}},
+{ 830340, 3, {659,36,35}},
+{ 830375, 3, {125,91,73}},
+{ 830400, 3, {173,75,64}},
+{ 830544, 3, {121,88,78}},
+{ 830550, 3, {113,98,75}},
+{ 830592, 3, {103,96,84}},
+{ 830640, 3, {3461,16,15}},
+{ 830648, 3, {163,91,56}},
+{ 830676, 3, {116,93,77}},
+{ 830700, 3, {117,100,71}},
+{ 830760, 3, {105,92,86}},
+{ 830790, 3, {181,85,54}},
+{ 830808, 3, {1049,33,24}},
+{ 830830, 3, {110,91,83}},
+{ 830925, 3, {1231,27,25}},
+{ 830928, 3, {2473,21,16}},
+{ 830960, 3, {104,94,85}},
+{ 830984, 3, {133,88,71}},
+{ 831012, 3, {761,39,28}},
+{ 831040, 3, {106,98,80}},
+{ 831060, 3, {108,95,81}},
+{ 831072, 3, {787,33,32}},
+{ 831105, 3, {115,99,73}},
+{ 831120, 3, {3463,16,15}},
+{ 831150, 3, {1847,25,18}},
+{ 831168, 3, {111,96,78}},
+{ 831180, 3, {1979,21,20}},
+{ 831200, 3, {1039,32,25}},
+{ 831285, 3, {105,91,87}},
+{ 831300, 3, {163,75,68}},
+{ 831312, 3, {251,69,48}},
+{ 831384, 3, {1283,27,24}},
+{ 831456, 3, {2887,18,16}},
+{ 831528, 3, {11549,9,8}},
+{ 831600, 3, {100,99,84}},
+{ 831672, 3, {11551,9,8}},
+{ 831708, 3, {151,81,68}},
+{ 831744, 3, {114,96,76}},
+{ 831780, 3, {4621,15,12}},
+{ 831792, 3, {104,93,86}},
+{ 831864, 3, {137,88,69}},
+{ 831875, 3, {125,121,55}},
+{ 831915, 3, {139,95,63}},
+{ 831936, 3, {619,42,32}},
+{ 832020, 3, {283,60,49}},
+{ 832032, 3, {107,96,81}},
+{ 832080, 3, {3467,16,15}},
+{ 832128, 3, {197,66,64}},
+{ 832140, 3, {115,108,67}},
+{ 832160, 3, {743,35,32}},
+{ 832167, 3, {119,111,63}},
+{ 832216, 3, {193,77,56}},
+{ 832272, 3, {2477,21,16}},
+{ 832275, 3, {137,81,75}},
+{ 832320, 3, {102,96,85}},
+{ 832392, 3, {1051,33,24}},
+{ 832416, 3, {104,92,87}},
+{ 832500, 3, {111,100,75}},
+{ 832545, 3, {881,35,27}},
+{ 832560, 3, {3469,16,15}},
+{ 832572, 3, {593,39,36}},
+{ 832650, 3, {122,91,75}},
+{ 832656, 3, {114,88,83}},
+{ 832755, 3, {105,103,77}},
+{ 832788, 3, {701,36,33}},
+{ 832800, 3, {347,50,48}},
+{ 832830, 3, {115,102,71}},
+{ 832832, 3, {104,91,88}},
+{ 832860, 3, {661,36,35}},
+{ 832884, 3, {281,57,52}},
+{ 832896, 3, {241,64,54}},
+{ 832920, 3, {631,40,33}},
+{ 832923, 3, {113,91,81}},
+{ 832944, 3, {112,111,67}},
+{ 833000, 3, {100,98,85}},
+{ 833040, 3, {104,90,89}},
+{ 833085, 3, {99,99,85}},
+{ 833112, 3, {114,87,84}},
+{ 833184, 3, {263,66,48}},
+{ 833196, 3, {109,91,84}},
+{ 833220, 3, {1543,27,20}},
+{ 833280, 3, {112,93,80}},
+{ 833340, 3, {102,95,86}},
+{ 833400, 3, {463,45,40}},
+{ 833448, 3, {121,84,82}},
+{ 833490, 3, {105,98,81}},
+{ 833520, 3, {151,80,69}},
+{ 833560, 3, {229,65,56}},
+{ 833580, 3, {421,45,44}},
+{ 833625, 3, {117,95,75}},
+{ 833652, 3, {108,93,83}},
+{ 833664, 3, {167,78,64}},
+{ 833688, 3, {11579,9,8}},
+{ 833850, 3, {109,90,85}},
+{ 833868, 3, {1103,28,27}},
+{ 833952, 3, {112,102,73}},
+{ 833976, 3, {104,99,81}},
+{ 834000, 3, {139,80,75}},
+{ 834024, 3, {118,93,76}},
+{ 834048, 3, {181,72,64}},
+{ 834075, 3, {337,55,45}},
+{ 834120, 3, {331,56,45}},
+{ 834210, 3, {115,93,78}},
+{ 834225, 3, {227,75,49}},
+{ 834240, 3, {110,96,79}},
+{ 834264, 3, {11587,9,8}},
+{ 834288, 3, {191,78,56}},
+{ 834336, 3, {2897,18,16}},
+{ 834360, 3, {409,51,40}},
+{ 834400, 3, {149,80,70}},
+{ 834435, 3, {883,35,27}},
+{ 834470, 3, {131,91,70}},
+{ 834504, 3, {109,88,87}},
+{ 834540, 3, {1987,21,20}},
+{ 834570, 3, {281,55,54}},
+{ 834660, 3, {4637,15,12}},
+{ 834680, 3, {271,56,55}},
+{ 834696, 3, {11593,9,8}},
+{ 834720, 3, {111,94,80}},
+{ 834768, 3, {102,93,88}},
+{ 834813, 3, {631,49,27}},
+{ 834960, 3, {112,105,71}},
+{ 834975, 3, {1237,27,25}},
+{ 834984, 3, {11597,9,8}},
+{ 835020, 3, {4639,15,12}},
+{ 835065, 3, {241,63,55}},
+{ 835128, 3, {1657,24,21}},
+{ 835164, 3, {111,99,76}},
+{ 835200, 3, {100,96,87}},
+{ 835272, 3, {1289,27,24}},
+{ 835380, 3, {102,91,90}},
+{ 835392, 3, {229,64,57}},
+{ 835450, 3, {155,77,70}},
+{ 835488, 3, {967,32,27}},
+{ 835692, 3, {487,44,39}},
+{ 835695, 3, {379,49,45}},
+{ 835740, 3, {4643,15,12}},
+{ 835758, 3, {134,81,77}},
+{ 835800, 3, {199,70,60}},
+{ 835884, 3, {107,93,84}},
+{ 835890, 3, {149,85,66}},
+{ 836000, 3, {100,95,88}},
+{ 836004, 3, {233,69,52}},
+{ 836064, 3, {2903,18,16}},
+{ 836136, 3, {108,98,79}},
+{ 836244, 3, {108,89,87}},
+{ 836325, 3, {135,105,59}},
+{ 836352, 3, {99,96,88}},
+{ 836424, 3, {11617,9,8}},
+{ 836451, 3, {119,99,71}},
+{ 836460, 3, {1549,27,20}},
+{ 836568, 3, {1291,27,24}},
+{ 836640, 3, {105,96,83}},
+{ 836712, 3, {11621,9,8}},
+{ 836760, 3, {367,57,40}},
+{ 836784, 3, {149,78,72}},
+{ 836808, 3, {293,56,51}},
+{ 836820, 3, {4649,15,12}},
+{ 836850, 3, {797,35,30}},
+{ 836880, 3, {317,55,48}},
+{ 836892, 3, {123,84,81}},
+{ 836940, 3, {116,111,65}},
+{ 837000, 3, {100,93,90}},
+{ 837012, 3, {373,51,44}},
+{ 837045, 3, {99,95,89}},
+{ 837060, 3, {1993,21,20}},
+{ 837144, 3, {151,77,72}},
+{ 837165, 3, {119,105,67}},
+{ 837180, 3, {4651,15,12}},
+{ 837200, 3, {100,92,91}},
+{ 837312, 3, {98,96,89}},
+{ 837330, 3, {113,95,78}},
+{ 837360, 3, {1163,30,24}},
+{ 837375, 3, {125,87,77}},
+{ 837384, 3, {111,92,82}},
+{ 837408, 3, {122,88,78}},
+{ 837450, 3, {1861,25,18}},
+{ 837504, 3, {727,36,32}},
+{ 837576, 3, {11633,9,8}},
+{ 837600, 3, {349,50,48}},
+{ 837648, 3, {277,56,54}},
+{ 837675, 3, {135,85,73}},
+{ 837720, 3, {179,72,65}},
+{ 837760, 3, {112,88,85}},
+{ 837792, 3, {2909,18,16}},
+{ 837837, 3, {99,93,91}},
+{ 837840, 3, {3491,16,15}},
+{ 837900, 3, {98,95,90}},
+{ 837936, 3, {99,92,92}},
+{ 837984, 3, {112,87,86}},
+{ 838032, 3, {104,102,79}},
+{ 838068, 3, {907,33,28}},
+{ 838080, 3, {97,96,90}},
+{ 838110, 3, {307,65,42}},
+{ 838152, 3, {1663,24,21}},
+{ 838200, 3, {127,88,75}},
+{ 838215, 3, {887,35,27}},
+{ 838260, 3, {4657,15,12}},
+{ 838320, 3, {499,42,40}},
+{ 838332, 3, {116,99,73}},
+{ 838350, 3, {115,90,81}},
+{ 838368, 3, {123,96,71}},
+{ 838404, 3, {1109,28,27}},
+{ 838440, 3, {137,85,72}},
+{ 838488, 3, {98,93,92}},
+{ 838500, 3, {125,86,78}},
+{ 838593, 3, {119,87,81}},
+{ 838600, 3, {599,40,35}},
+{ 838620, 3, {1553,27,20}},
+{ 838656, 3, {96,96,91}},
+{ 838740, 3, {1997,21,20}},
+{ 838755, 3, {109,95,81}},
+{ 838782, 3, {317,54,49}},
+{ 838812, 3, {283,57,52}},
+{ 838848, 3, {257,64,51}},
+{ 838880, 3, {107,98,80}},
+{ 838890, 3, {239,65,54}},
+{ 838944, 3, {971,32,27}},
+{ 838992, 3, {227,66,56}},
+{ 839040, 3, {96,95,92}},
+{ 839052, 3, {457,51,36}},
+{ 839125, 3, {137,125,49}},
+{ 839160, 3, {111,90,84}},
+{ 839200, 3, {1049,32,25}},
+{ 839223, 3, {173,77,63}},
+{ 839232, 3, {96,94,93}},
+{ 839300, 3, {109,100,77}},
+{ 839304, 3, {11657,9,8}},
+{ 839340, 3, {4663,15,12}},
+{ 839400, 3, {1399,25,24}},
+{ 839475, 3, {123,91,75}},
+{ 839496, 3, {263,57,56}},
+{ 839520, 3, {106,90,88}},
+{ 839580, 3, {1999,21,20}},
+{ 839592, 3, {117,92,78}},
+{ 839700, 3, {311,54,50}},
+{ 839724, 3, {127,87,76}},
+{ 839748, 3, {769,39,28}},
+{ 839760, 3, {3499,16,15}},
+{ 839800, 3, {104,95,85}},
+{ 839808, 3, {108,96,81}},
+{ 839868, 3, {179,69,68}},
+{ 839904, 3, {673,39,32}},
+{ 839916, 3, {101,99,84}},
+{ 839952, 3, {307,57,48}},
+{ 839970, 3, {122,85,81}},
+{ 840048, 3, {111,88,86}},
+{ 840060, 3, {359,52,45}},
+{ 840096, 3, {2917,18,16}},
+{ 840125, 3, {143,125,47}},
+{ 840150, 3, {1867,25,18}},
+{ 840168, 3, {1667,24,21}},
+{ 840240, 3, {389,48,45}},
+{ 840294, 3, {114,91,81}},
+{ 840312, 3, {1061,33,24}},
+{ 840375, 3, {125,83,81}},
+{ 840400, 3, {191,80,55}},
+{ 840420, 3, {105,92,87}},
+{ 840456, 3, {1297,27,24}},
+{ 840480, 3, {103,96,85}},
+{ 840510, 3, {283,55,54}},
+{ 840528, 3, {449,48,39}},
+{ 840560, 3, {112,95,79}},
+{ 840576, 3, {199,66,64}},
+{ 840600, 3, {467,45,40}},
+{ 840684, 3, {317,52,51}},
+{ 840720, 3, {113,93,80}},
+{ 840735, 3, {157,85,63}},
+{ 840744, 3, {11677,9,8}},
+{ 840768, 3, {151,87,64}},
+{ 840780, 3, {173,81,60}},
+{ 840800, 3, {1051,32,25}},
+{ 840840, 3, {105,91,88}},
+{ 840960, 3, {120,96,73}},
+{ 840996, 3, {599,39,36}},
+{ 841008, 3, {2503,21,16}},
+{ 841032, 3, {11681,9,8}},
+{ 841050, 3, {105,90,89}},
+{ 841092, 3, {119,93,76}},
+{ 841104, 3, {118,88,81}},
+{ 841120, 3, {751,35,32}},
+{ 841140, 3, {4673,15,12}},
+{ 841176, 3, {1669,24,21}},
+{ 841260, 3, {2003,21,20}},
+{ 841280, 3, {239,64,55}},
+{ 841320, 3, {108,95,82}},
+{ 841400, 3, {601,40,35}},
+{ 841428, 3, {106,98,81}},
+{ 841464, 3, {104,93,87}},
+{ 841500, 3, {100,99,85}},
+{ 841568, 3, {119,104,68}},
+{ 841575, 3, {229,75,49}},
+{ 841600, 3, {263,64,50}},
+{ 841608, 3, {11689,9,8}},
+{ 841632, 3, {797,33,32}},
+{ 841680, 3, {167,72,70}},
+{ 841750, 3, {125,91,74}},
+{ 841764, 3, {911,33,28}},
+{ 841776, 3, {114,104,71}},
+{ 841800, 3, {122,92,75}},
+{ 841824, 3, {111,96,79}},
+{ 841860, 3, {1559,27,20}},
+{ 841896, 3, {1063,33,24}},
+{ 841918, 3, {121,98,71}},
+{ 841920, 3, {877,32,30}},
+{ 841932, 3, {257,63,52}},
+{ 841950, 3, {1871,25,18}},
+{ 841995, 3, {105,99,81}},
+{ 842010, 3, {127,85,78}},
+{ 842076, 3, {113,92,81}},
+{ 842112, 3, {102,96,86}},
+{ 842160, 3, {110,88,87}},
+{ 842220, 3, {4679,15,12}},
+{ 842292, 3, {709,36,33}},
+{ 842328, 3, {11699,9,8}},
+{ 842400, 3, {104,90,90}},
+{ 842472, 3, {11701,9,8}},
+{ 842490, 3, {115,99,74}},
+{ 842520, 3, {118,85,84}},
+{ 842556, 3, {491,44,39}},
+{ 842628, 3, {129,92,71}},
+{ 842640, 3, {3511,16,15}},
+{ 842688, 3, {114,88,84}},
+{ 842712, 3, {111,104,73}},
+{ 842751, 3, {147,91,63}},
+{ 842800, 3, {100,98,86}},
+{ 842850, 3, {1873,25,18}},
+{ 842940, 3, {223,63,60}},
+{ 842952, 3, {103,93,88}},
+{ 842976, 3, {2927,18,16}},
+{ 842985, 3, {131,99,65}},
+{ 843024, 3, {193,78,56}},
+{ 843030, 3, {102,95,87}},
+{ 843048, 3, {1301,27,24}},
+{ 843075, 3, {1249,27,25}},
+{ 843120, 3, {1171,30,24}},
+{ 843180, 3, {115,94,78}},
+{ 843192, 3, {239,63,56}},
+{ 843200, 3, {124,85,80}},
+{ 843372, 3, {137,81,76}},
+{ 843456, 3, {191,69,64}},
+{ 843480, 3, {110,108,71}},
+{ 843552, 3, {101,96,87}},
+{ 843570, 3, {103,91,90}},
+{ 843600, 3, {111,95,80}},
+{ 843612, 3, {121,84,83}},
+{ 843624, 3, {11717,9,8}},
+{ 843696, 3, {108,93,84}},
+{ 843744, 3, {102,94,88}},
+{ 843750, 3, {125,90,75}},
+{ 843768, 3, {11719,9,8}},
+{ 843804, 3, {601,39,36}},
+{ 843840, 3, {293,60,48}},
+{ 843885, 3, {141,95,63}},
+{ 843900, 3, {100,97,87}},
+{ 843920, 3, {137,80,77}},
+{ 843948, 3, {197,68,63}},
+{ 843960, 3, {541,40,39}},
+{ 843975, 3, {121,93,75}},
+{ 844008, 3, {139,88,69}},
+{ 844020, 3, {521,45,36}},
+{ 844025, 3, {175,91,53}},
+{ 844032, 3, {157,84,64}},
+{ 844080, 3, {3517,16,15}},
+{ 844116, 3, {773,39,28}},
+{ 844128, 3, {977,32,27}},
+{ 844200, 3, {120,105,67}},
+{ 844272, 3, {104,99,82}},
+{ 844344, 3, {1303,27,24}},
+{ 844360, 3, {101,95,88}},
+{ 844368, 3, {359,49,48}},
+{ 844380, 3, {4691,15,12}},
+{ 844416, 3, {733,36,32}},
+{ 844425, 3, {139,81,75}},
+{ 844452, 3, {1117,28,27}},
+{ 844480, 3, {116,91,80}},
+{ 844515, 3, {383,49,45}},
+{ 844620, 3, {2011,21,20}},
+{ 844632, 3, {11731,9,8}},
+{ 844650, 3, {1877,25,18}},
+{ 844668, 3, {108,99,79}},
+{ 844704, 3, {419,48,42}},
+{ 844740, 3, {114,95,78}},
+{ 844760, 3, {431,49,40}},
+{ 844800, 3, {100,96,88}},
+{ 844830, 3, {149,81,70}},
+{ 844896, 3, {677,39,32}},
+{ 844900, 3, {119,100,71}},
+{ 845000, 3, {125,104,65}},
+{ 845040, 3, {503,42,40}},
+{ 845064, 3, {99,97,88}},
+{ 845100, 3, {313,54,50}},
+{ 845130, 3, {197,66,65}},
+{ 845196, 3, {337,57,44}},
+{ 845208, 3, {108,91,86}},
+{ 845240, 3, {113,88,85}},
+{ 845250, 3, {115,98,75}},
+{ 845325, 3, {117,85,85}},
+{ 845376, 3, {112,102,74}},
+{ 845397, 3, {147,81,71}},
+{ 845400, 3, {1409,25,24}},
+{ 845460, 3, {122,90,77}},
+{ 845496, 3, {11743,9,8}},
+{ 845550, 3, {1879,25,18}},
+{ 845600, 3, {151,80,70}},
+{ 845640, 3, {108,90,87}},
+{ 845760, 3, {881,32,30}},
+{ 845856, 3, {99,96,89}},
+{ 845880, 3, {106,95,84}},
+{ 845910, 3, {241,65,54}},
+{ 845988, 3, {143,87,68}},
+{ 846120, 3, {641,40,33}},
+{ 846144, 3, {113,96,78}},
+{ 846180, 3, {1567,27,20}},
+{ 846230, 3, {157,77,70}},
+{ 846279, 3, {133,101,63}},
+{ 846300, 3, {100,93,91}},
+{ 846384, 3, {229,66,56}},
+{ 846396, 3, {461,51,36}},
+{ 846432, 3, {2939,18,16}},
+{ 846450, 3, {99,95,90}},
+{ 846480, 3, {3527,16,15}},
+{ 846540, 3, {4703,15,12}},
+{ 846612, 3, {117,108,67}},
+{ 846648, 3, {1069,33,24}},
+{ 846720, 3, {98,96,90}},
+{ 846846, 3, {99,94,91}},
+{ 846855, 3, {123,85,81}},
+{ 846936, 3, {1307,27,24}},
+{ 846945, 3, {145,99,59}},
+{ 846960, 3, {3529,16,15}},
+{ 847000, 3, {110,100,77}},
+{ 847044, 3, {99,93,92}},
+{ 847056, 3, {2521,21,16}},
+{ 847080, 3, {181,72,65}},
+{ 847110, 3, {151,85,66}},
+{ 847140, 3, {2017,21,20}},
+{ 847161, 3, {119,113,63}},
+{ 847200, 3, {353,50,48}},
+{ 847224, 3, {123,84,82}},
+{ 847260, 3, {523,45,36}},
+{ 847275, 3, {143,79,75}},
+{ 847280, 3, {112,89,85}},
+{ 847308, 3, {131,84,77}},
+{ 847392, 3, {97,96,91}},
+{ 847440, 3, {107,90,88}},
+{ 847584, 3, {109,96,81}},
+{ 847596, 3, {111,92,83}},
+{ 847600, 3, {163,80,65}},
+{ 847620, 3, {277,60,51}},
+{ 847665, 3, {115,91,81}},
+{ 847680, 3, {883,32,30}},
+{ 847728, 3, {112,87,87}},
+{ 847770, 3, {367,55,42}},
+{ 847800, 3, {157,75,72}},
+{ 847840, 3, {757,35,32}},
+{ 847920, 3, {3533,16,15}},
+{ 847944, 3, {11777,9,8}},
+{ 847968, 3, {121,96,73}},
+{ 847980, 3, {673,36,35}},
+{ 848016, 3, {151,78,72}},
+{ 848043, 3, {641,49,27}},
+{ 848064, 3, {631,42,32}},
+{ 848088, 3, {11779,9,8}},
+{ 848100, 3, {257,60,55}},
+{ 848120, 3, {233,65,56}},
+{ 848160, 3, {96,95,93}},
+{ 848232, 3, {102,99,84}},
+{ 848250, 3, {125,87,78}},
+{ 848288, 3, {541,49,32}},
+{ 848320, 3, {241,64,55}},
+{ 848340, 3, {1571,27,20}},
+{ 848376, 3, {11783,9,8}},
+{ 848424, 3, {106,92,87}},
+{ 848484, 3, {111,91,84}},
+{ 848640, 3, {104,96,85}},
+{ 848680, 3, {433,49,40}},
+{ 848700, 3, {115,90,82}},
+{ 848736, 3, {421,48,42}},
+{ 848760, 3, {643,40,33}},
+{ 848800, 3, {1061,32,25}},
+{ 848808, 3, {11789,9,8}},
+{ 848848, 3, {106,91,88}},
+{ 848880, 3, {131,81,80}},
+{ 848925, 3, {105,105,77}},
+{ 848988, 3, {1123,28,27}},
+{ 849024, 3, {128,99,67}},
+{ 849030, 3, {311,65,42}},
+{ 849120, 3, {122,87,80}},
+{ 849150, 3, {111,90,85}},
+{ 849156, 3, {919,33,28}},
+{ 849160, 3, {115,104,71}},
+{ 849200, 3, {193,80,55}},
+{ 849225, 3, {169,75,67}},
+{ 849240, 3, {337,56,45}},
+{ 849252, 3, {181,69,68}},
+{ 849300, 3, {149,76,75}},
+{ 849303, 3, {119,117,61}},
+{ 849312, 3, {983,32,27}},
+{ 849360, 3, {3539,16,15}},
+{ 849366, 3, {107,98,81}},
+{ 849450, 3, {809,35,30}},
+{ 849456, 3, {347,51,48}},
+{ 849464, 3, {197,77,56}},
+{ 849528, 3, {114,92,81}},
+{ 849600, 3, {118,90,80}},
+{ 849672, 3, {11801,9,8}},
+{ 849680, 3, {104,95,86}},
+{ 849744, 3, {281,56,54}},
+{ 849780, 3, {4721,15,12}},
+{ 849800, 3, {607,40,35}},
+{ 849816, 3, {111,88,87}},
+{ 849825, 3, {1259,27,25}},
+{ 849840, 3, {3541,16,15}},
+{ 849915, 3, {101,99,85}},
+{ 849984, 3, {233,64,57}},
+{ 850050, 3, {1889,25,18}},
+{ 850068, 3, {463,51,36}},
+{ 850080, 3, {105,92,88}},
+{ 850104, 3, {11807,9,8}},
+{ 850140, 3, {4723,15,12}},
+{ 850150, 3, {347,50,49}},
+{ 850176, 3, {108,96,82}},
+{ 850212, 3, {113,99,76}},
+{ 850248, 3, {241,63,56}},
+{ 850320, 3, {1181,30,24}},
+{ 850356, 3, {117,92,79}},
+{ 850392, 3, {127,93,72}},
+{ 850395, 3, {105,91,89}},
+{ 850400, 3, {1063,32,25}},
+{ 850416, 3, {2531,21,16}},
+{ 850440, 3, {373,57,40}},
+{ 850464, 3, {2953,18,16}},
+{ 850476, 3, {379,51,44}},
+{ 850500, 3, {105,90,90}},
+{ 850512, 3, {104,94,87}},
+{ 850536, 3, {11813,9,8}},
+{ 850608, 3, {179,72,66}},
+{ 850680, 3, {139,85,72}},
+{ 850689, 3, {643,49,27}},
+{ 850752, 3, {211,64,63}},
+{ 850824, 3, {104,101,81}},
+{ 850850, 3, {110,91,85}},
+{ 850860, 3, {163,87,60}},
+{ 850896, 3, {311,57,48}},
+{ 850905, 3, {191,81,55}},
+{ 851004, 3, {307,63,44}},
+{ 851032, 3, {167,91,56}},
+{ 851067, 3, {133,81,79}},
+{ 851112, 3, {11821,9,8}},
+{ 851136, 3, {104,93,88}},
+{ 851148, 3, {111,108,71}},
+{ 851184, 3, {257,69,48}},
+{ 851200, 3, {112,95,80}},
+{ 851220, 3, {4729,15,12}},
+{ 851235, 3, {121,105,67}},
+{ 851280, 3, {3547,16,15}},
+{ 851328, 3, {739,36,32}},
+{ 851340, 3, {2027,21,20}},
+{ 851375, 3, {139,125,49}},
+{ 851400, 3, {100,99,86}},
+{ 851445, 3, {135,119,53}},
+{ 851508, 3, {109,93,84}},
+{ 851520, 3, {887,32,30}},
+{ 851544, 3, {11827,9,8}},
+{ 851550, 3, {811,35,30}},
+{ 851580, 3, {108,95,83}},
+{ 851616, 3, {2957,18,16}},
+{ 851700, 3, {167,75,68}},
+{ 851760, 3, {104,91,90}},
+{ 851832, 3, {11831,9,8}},
+{ 851865, 3, {133,105,61}},
+{ 851904, 3, {102,96,87}},
+{ 851940, 3, {4733,15,12}},
+{ 851976, 3, {11833,9,8}},
+{ 852036, 3, {111,101,76}},
+{ 852075, 3, {541,45,35}},
+{ 852150, 3, {115,95,78}},
+{ 852180, 3, {2029,21,20}},
+{ 852192, 3, {269,66,48}},
+{ 852228, 3, {607,39,36}},
+{ 852252, 3, {116,93,79}},
+{ 852280, 3, {149,88,65}},
+{ 852288, 3, {193,69,64}},
+{ 852320, 3, {761,35,32}},
+{ 852384, 3, {683,39,32}},
+{ 852408, 3, {11839,9,8}},
+{ 852480, 3, {111,96,80}},
+{ 852516, 3, {199,68,63}},
+{ 852544, 3, {173,77,64}},
+{ 852600, 3, {100,98,87}},
+{ 852660, 3, {1579,27,20}},
+{ 852720, 3, {102,95,88}},
+{ 852852, 3, {132,91,71}},
+{ 853020, 3, {677,36,35}},
+{ 853050, 3, {121,94,75}},
+{ 853104, 3, {2539,21,16}},
+{ 853125, 3, {125,91,75}},
+{ 853160, 3, {277,56,55}},
+{ 853200, 3, {108,100,79}},
+{ 853272, 3, {1693,24,21}},
+{ 853320, 3, {547,40,39}},
+{ 853344, 3, {2963,18,16}},
+{ 853380, 3, {431,45,44}},
+{ 853440, 3, {127,84,80}},
+{ 853524, 3, {1129,28,27}},
+{ 853680, 3, {3557,16,15}},
+{ 853710, 3, {199,66,65}},
+{ 853776, 3, {99,98,88}},
+{ 853800, 3, {1423,25,24}},
+{ 853825, 3, {175,119,41}},
+{ 853860, 3, {107,95,84}},
+{ 853875, 3, {115,99,75}},
+{ 854040, 3, {647,40,33}},
+{ 854100, 3, {117,100,73}},
+{ 854112, 3, {112,93,82}},
+{ 854136, 3, {11863,9,8}},
+{ 854145, 3, {111,95,81}},
+{ 854160, 3, {3559,16,15}},
+{ 854172, 3, {719,36,33}},
+{ 854217, 3, {149,91,63}},
+{ 854250, 3, {125,102,67}},
+{ 854256, 3, {111,104,74}},
+{ 854304, 3, {809,33,32}},
+{ 854352, 3, {349,51,48}},
+{ 854392, 3, {133,88,73}},
+{ 854400, 3, {100,96,89}},
+{ 854424, 3, {11867,9,8}},
+{ 854448, 3, {2543,21,16}},
+{ 854469, 3, {137,81,77}},
+{ 854490, 3, {313,65,42}},
+{ 854550, 3, {211,75,54}},
+{ 854560, 3, {109,98,80}},
+{ 854568, 3, {104,99,83}},
+{ 854640, 3, {1187,30,24}},
+{ 854658, 3, {119,114,63}},
+{ 854700, 3, {111,100,77}},
+{ 854712, 3, {1319,27,24}},
+{ 854760, 3, {419,51,40}},
+{ 854772, 3, {163,76,69}},
+{ 854784, 3, {106,96,84}},
+{ 854820, 3, {1583,27,20}},
+{ 854880, 3, {137,80,78}},
+{ 854964, 3, {127,99,68}},
+{ 855000, 3, {100,95,90}},
+{ 855036, 3, {108,91,87}},
+{ 855050, 3, {349,50,49}},
+{ 855072, 3, {2969,18,16}},
+{ 855096, 3, {123,88,79}},
+{ 855120, 3, {509,42,40}},
+{ 855180, 3, {4751,15,12}},
+{ 855200, 3, {1069,32,25}},
+{ 855228, 3, {121,93,76}},
+{ 855270, 3, {117,86,85}},
+{ 855288, 3, {1697,24,21}},
+{ 855360, 3, {99,96,90}},
+{ 855400, 3, {100,94,91}},
+{ 855450, 3, {1901,25,18}},
+{ 855456, 3, {114,112,67}},
+{ 855504, 3, {457,48,39}},
+{ 855540, 3, {98,97,90}},
+{ 855600, 3, {100,93,92}},
+{ 855648, 3, {2971,18,16}},
+{ 855680, 3, {191,70,64}},
+{ 855684, 3, {139,81,76}},
+{ 855792, 3, {283,56,54}},
+{ 855855, 3, {99,95,91}},
+{ 855864, 3, {11887,9,8}},
+{ 855900, 3, {317,54,50}},
+{ 855936, 3, {743,36,32}},
+{ 855981, 3, {647,49,27}},
+{ 856008, 3, {1321,27,24}},
+{ 856128, 3, {98,96,91}},
+{ 856152, 3, {99,94,92}},
+{ 856170, 3, {151,81,70}},
+{ 856200, 3, {1427,25,24}},
+{ 856224, 3, {991,32,27}},
+{ 856240, 3, {139,80,77}},
+{ 856275, 3, {233,75,49}},
+{ 856284, 3, {499,44,39}},
+{ 856290, 3, {115,102,73}},
+{ 856296, 3, {1699,24,21}},
+{ 856320, 3, {223,64,60}},
+{ 856368, 3, {313,57,48}},
+{ 856380, 3, {2039,21,20}},
+{ 856416, 3, {811,33,32}},
+{ 856428, 3, {107,92,87}},
+{ 856464, 3, {2549,21,16}},
+{ 856548, 3, {103,99,84}},
+{ 856575, 3, {141,81,75}},
+{ 856584, 3, {11897,9,8}},
+{ 856596, 3, {221,68,57}},
+{ 856620, 3, {4759,15,12}},
+{ 856625, 3, {125,89,77}},
+{ 856856, 3, {107,91,88}},
+{ 856980, 3, {115,92,81}},
+{ 857010, 3, {106,105,77}},
+{ 857016, 3, {11903,9,8}},
+{ 857025, 3, {293,65,45}},
+{ 857040, 3, {3571,16,15}},
+{ 857052, 3, {179,76,63}},
+{ 857088, 3, {96,96,93}},
+{ 857115, 3, {907,35,27}},
+{ 857136, 3, {2551,21,16}},
+{ 857280, 3, {96,95,94}},
+{ 857304, 3, {108,98,81}},
+{ 857340, 3, {433,45,44}},
+{ 857400, 3, {1429,25,24}},
+{ 857412, 3, {467,51,36}},
+{ 857448, 3, {11909,9,8}},
+{ 857472, 3, {112,88,87}},
+{ 857480, 3, {104,97,85}},
+{ 857500, 3, {125,98,70}},
+{ 857520, 3, {397,48,45}},
+{ 857532, 3, {239,69,52}},
+{ 857556, 3, {123,84,83}},
+{ 857565, 3, {153,95,59}},
+{ 857696, 3, {547,49,32}},
+{ 857736, 3, {114,99,76}},
+{ 857745, 3, {389,49,45}},
+{ 857808, 3, {111,92,84}},
+{ 857871, 3, {119,89,81}},
+{ 857952, 3, {331,54,48}},
+{ 858060, 3, {227,63,60}},
+{ 858088, 3, {199,77,56}},
+{ 858150, 3, {1907,25,18}},
+{ 858168, 3, {137,87,72}},
+{ 858195, 3, {163,81,65}},
+{ 858200, 3, {613,40,35}},
+{ 858330, 3, {102,99,85}},
+{ 858396, 3, {929,33,28}},
+{ 858420, 3, {251,60,57}},
+{ 858432, 3, {263,64,51}},
+{ 858456, 3, {11923,9,8}},
+{ 858480, 3, {112,105,73}},
+{ 858528, 3, {271,66,48}},
+{ 858648, 3, {269,57,56}},
+{ 858704, 3, {119,88,82}},
+{ 858744, 3, {11927,9,8}},
+{ 858780, 3, {367,52,45}},
+{ 858800, 3, {113,95,80}},
+{ 858816, 3, {112,108,71}},
+{ 858825, 3, {347,55,45}},
+{ 858840, 3, {421,51,40}},
+{ 858960, 3, {1193,30,24}},
+{ 858990, 3, {137,95,66}},
+{ 859005, 3, {105,101,81}},
+{ 859040, 3, {118,91,80}},
+{ 859050, 3, {115,90,83}},
+{ 859152, 3, {2557,21,16}},
+{ 859176, 3, {11933,9,8}},
+{ 859200, 3, {179,75,64}},
+{ 859248, 3, {104,102,81}},
+{ 859264, 3, {137,98,64}},
+{ 859275, 3, {135,95,67}},
+{ 859320, 3, {105,93,88}},
+{ 859404, 3, {787,39,28}},
+{ 859440, 3, {3581,16,15}},
+{ 859452, 3, {383,51,44}},
+{ 859464, 3, {173,72,69}},
+{ 859500, 3, {191,75,60}},
+{ 859520, 3, {128,85,79}},
+{ 859560, 3, {104,95,87}},
+{ 859584, 3, {111,88,88}},
+{ 859608, 3, {11939,9,8}},
+{ 859740, 3, {105,92,89}},
+{ 859752, 3, {11941,9,8}},
+{ 859800, 3, {1433,25,24}},
+{ 859815, 3, {193,81,55}},
+{ 859860, 3, {281,60,51}},
+{ 859896, 3, {1327,27,24}},
+{ 859920, 3, {3583,16,15}},
+{ 859950, 3, {105,91,90}},
+{ 860013, 3, {119,99,73}},
+{ 860112, 3, {181,72,66}},
+{ 860256, 3, {103,96,87}},
+{ 860440, 3, {439,49,40}},
+{ 860472, 3, {111,102,76}},
+{ 860475, 3, {149,77,75}},
+{ 860496, 3, {197,78,56}},
+{ 860544, 3, {108,96,83}},
+{ 860580, 3, {683,36,35}},
+{ 860616, 3, {11953,9,8}},
+{ 860625, 3, {125,85,81}},
+{ 860640, 3, {163,80,66}},
+{ 860652, 3, {613,39,36}},
+{ 860700, 3, {151,76,75}},
+{ 860800, 3, {269,64,50}},
+{ 860808, 3, {104,93,89}},
+{ 860850, 3, {1913,25,18}},
+{ 860860, 3, {110,91,86}},
+{ 860895, 3, {911,35,27}},
+{ 860904, 3, {1087,33,24}},
+{ 860940, 3, {4783,15,12}},
+{ 861000, 3, {105,100,82}},
+{ 861048, 3, {11959,9,8}},
+{ 861080, 3, {103,95,88}},
+{ 861084, 3, {119,108,67}},
+{ 861120, 3, {104,92,90}},
+{ 861168, 3, {233,66,56}},
+{ 861280, 3, {769,35,32}},
+{ 861300, 3, {100,99,87}},
+{ 861336, 3, {1709,24,21}},
+{ 861360, 3, {111,97,80}},
+{ 861408, 3, {997,32,27}},
+{ 861420, 3, {293,60,49}},
+{ 861504, 3, {641,42,32}},
+{ 861525, 3, {547,45,35}},
+{ 861588, 3, {263,63,52}},
+{ 861600, 3, {359,50,48}},
+{ 861630, 3, {373,55,42}},
+{ 861660, 3, {4787,15,12}},
+{ 861672, 3, {223,69,56}},
+{ 861696, 3, {102,96,88}},
+{ 861768, 3, {11969,9,8}},
+{ 861840, 3, {108,95,84}},
+{ 861900, 3, {130,85,78}},
+{ 861912, 3, {11971,9,8}},
+{ 861960, 3, {653,40,33}},
+{ 861975, 3, {1277,27,25}},
+{ 861984, 3, {123,96,73}},
+{ 862020, 3, {4789,15,12}},
+{ 862050, 3, {821,35,30}},
+{ 862092, 3, {311,63,44}},
+{ 862125, 3, {121,95,75}},
+{ 862155, 3, {119,105,69}},
+{ 862200, 3, {479,45,40}},
+{ 862260, 3, {2053,21,20}},
+{ 862296, 3, {122,93,76}},
+{ 862320, 3, {3593,16,15}},
+{ 862344, 3, {118,87,84}},
+{ 862368, 3, {691,39,32}},
+{ 862380, 3, {1597,27,20}},
+{ 862400, 3, {100,98,88}},
+{ 862407, 3, {117,91,81}},
+{ 862410, 3, {102,95,89}},
+{ 862488, 3, {99,99,88}},
+{ 862632, 3, {11981,9,8}},
+{ 862680, 3, {105,104,79}},
+{ 862692, 3, {116,111,67}},
+{ 862740, 3, {4793,15,12}},
+{ 862750, 3, {125,119,58}},
+{ 862752, 3, {114,88,86}},
+{ 862848, 3, {107,96,84}},
+{ 862875, 3, {125,117,59}},
+{ 862960, 3, {115,112,67}},
+{ 862992, 3, {461,48,39}},
+{ 863037, 3, {133,103,63}},
+{ 863040, 3, {116,93,80}},
+{ 863064, 3, {11987,9,8}},
+{ 863100, 3, {137,84,75}},
+{ 863136, 3, {111,96,81}},
+{ 863148, 3, {503,44,39}},
+{ 863184, 3, {367,49,48}},
+{ 863280, 3, {109,90,88}},
+{ 863325, 3, {1279,27,25}},
+{ 863360, 3, {128,95,71}},
+{ 863400, 3, {1439,25,24}},
+{ 863550, 3, {101,95,90}},
+{ 863600, 3, {127,85,80}},
+{ 863604, 3, {149,84,69}},
+{ 863616, 3, {173,78,64}},
+{ 863625, 3, {141,125,49}},
+{ 863676, 3, {727,36,33}},
+{ 863712, 3, {2999,18,16}},
+{ 863720, 3, {151,88,65}},
+{ 863772, 3, {113,91,84}},
+{ 863775, 3, {349,55,45}},
+{ 863784, 3, {108,93,86}},
+{ 863800, 3, {617,40,35}},
+{ 863820, 3, {4799,15,12}},
+{ 863919, 3, {653,49,27}},
+{ 863928, 3, {117,104,71}},
+{ 864000, 3, {100,96,90}},
+{ 864045, 3, {211,65,63}},
+{ 864072, 3, {1091,33,24}},
+{ 864108, 3, {127,84,81}},
+{ 864120, 3, {379,57,40}},
+{ 864144, 3, {353,51,48}},
+{ 864150, 3, {823,35,30}},
+{ 864156, 3, {101,93,92}},
+{ 864180, 3, {4801,15,12}},
+{ 864192, 3, {643,42,32}},
+{ 864288, 3, {3001,18,16}},
+{ 864348, 3, {223,68,57}},
+{ 864360, 3, {98,98,90}},
+{ 864432, 3, {108,92,87}},
+{ 864450, 3, {113,90,85}},
+{ 864500, 3, {100,95,91}},
+{ 864504, 3, {12007,9,8}},
+{ 864528, 3, {112,93,83}},
+{ 864540, 3, {1601,27,20}},
+{ 864576, 3, {114,96,79}},
+{ 864600, 3, {131,88,75}},
+{ 864640, 3, {193,70,64}},
+{ 864675, 3, {135,105,61}},
+{ 864708, 3, {241,69,52}},
+{ 864720, 3, {1201,30,24}},
+{ 864756, 3, {157,81,68}},
+{ 864780, 3, {116,105,71}},
+{ 864792, 3, {12011,9,8}},
+{ 864850, 3, {353,50,49}},
+{ 864864, 3, {99,96,91}},
+{ 864900, 3, {100,93,93}},
+{ 864960, 3, {106,96,85}},
+{ 865032, 3, {271,57,56}},
+{ 865095, 3, {107,105,77}},
+{ 865128, 3, {113,88,87}},
+{ 865152, 3, {751,36,32}},
+{ 865215, 3, {117,87,85}},
+{ 865242, 3, {109,98,81}},
+{ 865260, 3, {99,95,92}},
+{ 865375, 3, {161,125,43}},
+{ 865410, 3, {317,65,42}},
+{ 865480, 3, {281,56,55}},
+{ 865488, 3, {114,104,73}},
+{ 865536, 3, {98,96,92}},
+{ 865620, 3, {229,63,60}},
+{ 865634, 3, {121,98,73}},
+{ 865656, 3, {1093,33,24}},
+{ 865680, 3, {3607,16,15}},
+{ 865683, 3, {151,91,63}},
+{ 865755, 3, {135,121,53}},
+{ 865760, 3, {773,35,32}},
+{ 865788, 3, {937,33,28}},
+{ 865800, 3, {111,100,78}},
+{ 865920, 3, {110,96,82}},
+{ 865944, 3, {211,72,57}},
+{ 865980, 3, {283,60,51}},
+{ 866016, 3, {97,96,93}},
+{ 866025, 3, {1283,27,25}},
+{ 866052, 3, {108,99,81}},
+{ 866096, 3, {133,88,74}},
+{ 866125, 3, {169,125,41}},
+{ 866160, 3, {401,48,45}},
+{ 866172, 3, {131,87,76}},
+{ 866268, 3, {617,39,36}},
+{ 866295, 3, {115,93,81}},
+{ 866320, 3, {104,98,85}},
+{ 866340, 3, {4813,15,12}},
+{ 866364, 3, {129,92,73}},
+{ 866376, 3, {191,72,63}},
+{ 866388, 3, {137,93,68}},
+{ 866400, 3, {96,95,95}},
+{ 866460, 3, {2063,21,20}},
+{ 866544, 3, {2579,21,16}},
+{ 866592, 3, {118,102,72}},
+{ 866600, 3, {619,40,35}},
+{ 866628, 3, {181,76,63}},
+{ 866640, 3, {157,80,69}},
+{ 866664, 3, {12037,9,8}},
+{ 866712, 3, {134,84,77}},
+{ 866736, 3, {463,48,39}},
+{ 866745, 3, {103,99,85}},
+{ 866775, 3, {127,91,75}},
+{ 866800, 3, {197,80,55}},
+{ 866880, 3, {105,96,86}},
+{ 866943, 3, {139,81,77}},
+{ 866952, 3, {12041,9,8}},
+{ 866970, 3, {117,95,78}},
+{ 866976, 3, {821,33,32}},
+{ 867060, 3, {4817,15,12}},
+{ 867096, 3, {12043,9,8}},
+{ 867120, 3, {3613,16,15}},
+{ 867132, 3, {111,93,84}},
+{ 867168, 3, {3011,18,16}},
+{ 867200, 3, {271,64,50}},
+{ 867216, 3, {112,89,87}},
+{ 867240, 3, {110,108,73}},
+{ 867300, 3, {118,98,75}},
+{ 867312, 3, {317,57,48}},
+{ 867360, 3, {139,80,78}},
+{ 867384, 3, {1721,24,21}},
+{ 867456, 3, {251,64,54}},
+{ 867504, 3, {106,93,88}},
+{ 867510, 3, {105,102,81}},
+{ 867528, 3, {12049,9,8}},
+{ 867636, 3, {313,63,44}},
+{ 867672, 3, {104,103,81}},
+{ 867680, 3, {116,88,85}},
+{ 867750, 3, {125,89,78}},
+{ 867776, 3, {149,91,64}},
+{ 867780, 3, {1607,27,20}},
+{ 867888, 3, {108,98,82}},
+{ 867900, 3, {263,60,55}},
+{ 868020, 3, {111,92,85}},
+{ 868080, 3, {3617,16,15}},
+{ 868140, 3, {106,91,90}},
+{ 868175, 3, {175,121,41}},
+{ 868200, 3, {1447,25,24}},
+{ 868224, 3, {112,102,76}},
+{ 868280, 3, {443,49,40}},
+{ 868329, 3, {179,77,63}},
+{ 868350, 3, {827,35,30}},
+{ 868392, 3, {1723,24,21}},
+{ 868400, 3, {167,80,65}},
+{ 868452, 3, {293,57,52}},
+{ 868455, 3, {919,35,27}},
+{ 868500, 3, {193,75,60}},
+{ 868530, 3, {131,85,78}},
+{ 868560, 3, {105,94,88}},
+{ 868608, 3, {104,96,87}},
+{ 868700, 3, {119,100,73}},
+{ 868800, 3, {181,75,64}},
+{ 868824, 3, {1097,33,24}},
+{ 868860, 3, {1609,27,20}},
+{ 868896, 3, {431,48,42}},
+{ 868908, 3, {111,103,76}},
+{ 868920, 3, {557,40,39}},
+{ 868950, 3, {1931,25,18}},
+{ 868968, 3, {149,81,72}},
+{ 868980, 3, {2069,21,20}},
+{ 869040, 3, {120,102,71}},
+{ 869076, 3, {619,39,36}},
+{ 869088, 3, {823,33,32}},
+{ 869112, 3, {12071,9,8}},
+{ 869176, 3, {119,88,83}},
+{ 869211, 3, {147,81,73}},
+{ 869220, 3, {439,45,44}},
+{ 869232, 3, {199,78,56}},
+{ 869256, 3, {12073,9,8}},
+{ 869352, 3, {111,89,88}},
+{ 869400, 3, {105,92,90}},
+{ 869440, 3, {104,95,88}},
+{ 869472, 3, {3019,18,16}},
+{ 869484, 3, {941,33,28}},
+{ 869505, 3, {105,91,91}},
+{ 869520, 3, {3623,16,15}},
+{ 869535, 3, {113,95,81}},
+{ 869568, 3, {647,42,32}},
+{ 869580, 3, {4831,15,12}},
+{ 869600, 3, {1087,32,25}},
+{ 869616, 3, {122,88,81}},
+{ 869700, 3, {223,65,60}},
+{ 869715, 3, {251,63,55}},
+{ 869750, 3, {125,98,71}},
+{ 869778, 3, {118,91,81}},
+{ 869820, 3, {109,95,84}},
+{ 869850, 3, {1933,25,18}},
+{ 869856, 3, {104,102,82}},
+{ 869880, 3, {659,40,33}},
+{ 869940, 3, {179,81,60}},
+{ 869952, 3, {197,69,64}},
+{ 869960, 3, {239,65,56}},
+{ 870000, 3, {100,100,87}},
+{ 870075, 3, {1289,27,25}},
+{ 870090, 3, {115,97,78}},
+{ 870100, 3, {113,100,77}},
+{ 870156, 3, {1151,28,27}},
+{ 870210, 3, {293,55,54}},
+{ 870240, 3, {111,98,80}},
+{ 870276, 3, {347,57,44}},
+{ 870324, 3, {797,39,28}},
+{ 870400, 3, {128,85,80}},
+{ 870408, 3, {157,77,72}},
+{ 870450, 3, {829,35,30}},
+{ 870480, 3, {104,93,90}},
+{ 870576, 3, {2591,21,16}},
+{ 870600, 3, {1451,25,24}},
+{ 870624, 3, {3023,18,16}},
+{ 870660, 3, {691,36,35}},
+{ 870672, 3, {102,97,88}},
+{ 870696, 3, {139,87,72}},
+{ 870720, 3, {907,32,30}},
+{ 870750, 3, {125,86,81}},
+{ 870804, 3, {733,36,33}},
+{ 870870, 3, {110,91,87}},
+{ 870912, 3, {108,96,84}},
+{ 870984, 3, {12097,9,8}},
+{ 871000, 3, {125,104,67}},
+{ 871020, 3, {1613,27,20}},
+{ 871056, 3, {263,69,48}},
+{ 871080, 3, {122,85,84}},
+{ 871200, 3, {100,99,88}},
+{ 871248, 3, {2593,21,16}},
+{ 871272, 3, {12101,9,8}},
+{ 871332, 3, {123,92,77}},
+{ 871416, 3, {114,91,84}},
+{ 871425, 3, {1291,27,25}},
+{ 871440, 3, {3631,16,15}},
+{ 871488, 3, {102,96,89}},
+{ 871500, 3, {105,100,83}},
+{ 871530, 3, {139,95,66}},
+{ 871596, 3, {124,99,71}},
+{ 871640, 3, {283,56,55}},
+{ 871668, 3, {1153,28,27}},
+{ 871680, 3, {227,64,60}},
+{ 871704, 3, {12107,9,8}},
+{ 871728, 3, {127,88,78}},
+{ 871740, 3, {167,87,60}},
+{ 871776, 3, {1009,32,27}},
+{ 871800, 3, {1453,25,24}},
+{ 871808, 3, {139,98,64}},
+{ 871848, 3, {12109,9,8}},
+{ 871857, 3, {659,49,27}},
+{ 871872, 3, {239,64,57}},
+{ 871884, 3, {117,92,81}},
+{ 871920, 3, {173,72,70}},
+{ 872025, 3, {151,77,75}},
+{ 872064, 3, {757,36,32}},
+{ 872100, 3, {102,95,90}},
+{ 872136, 3, {12113,9,8}},
+{ 872160, 3, {115,96,79}},
+{ 872200, 3, {100,98,89}},
+{ 872340, 3, {124,105,67}},
+{ 872436, 3, {109,92,87}},
+{ 872480, 3, {112,95,82}},
+{ 872520, 3, {661,40,33}},
+{ 872568, 3, {12119,9,8}},
+{ 872613, 3, {133,81,81}},
+{ 872640, 3, {101,96,90}},
+{ 872690, 3, {137,91,70}},
+{ 872712, 3, {102,93,92}},
+{ 872784, 3, {114,88,87}},
+{ 872800, 3, {1091,32,25}},
+{ 872820, 3, {373,52,45}},
+{ 872865, 3, {163,85,63}},
+{ 872872, 3, {109,91,88}},
+{ 872880, 3, {3637,16,15}},
+{ 872916, 3, {389,51,44}},
+{ 872928, 3, {433,48,42}},
+{ 873080, 3, {115,104,73}},
+{ 873120, 3, {107,96,85}},
+{ 873180, 3, {99,98,90}},
+{ 873240, 3, {383,57,40}},
+{ 873300, 3, {123,100,71}},
+{ 873312, 3, {827,33,32}},
+{ 873360, 3, {1213,30,24}},
+{ 873376, 3, {557,49,32}},
+{ 873432, 3, {1733,24,21}},
+{ 873444, 3, {509,44,39}},
+{ 873504, 3, {337,54,48}},
+{ 873540, 3, {211,69,60}},
+{ 873576, 3, {1103,33,24}},
+{ 873600, 3, {100,96,91}},
+{ 873675, 3, {353,55,45}},
+{ 873747, 3, {161,81,67}},
+{ 873792, 3, {111,96,82}},
+{ 873828, 3, {108,93,87}},
+{ 873840, 3, {331,55,48}},
+{ 873873, 3, {99,97,91}},
+{ 874020, 3, {2081,21,20}},
+{ 874104, 3, {121,86,84}},
+{ 874176, 3, {157,87,64}},
+{ 874200, 3, {100,94,93}},
+{ 874224, 3, {467,48,39}},
+{ 874260, 3, {1619,27,20}},
+{ 874296, 3, {12143,9,8}},
+{ 874320, 3, {3643,16,15}},
+{ 874368, 3, {99,96,92}},
+{ 874380, 3, {118,95,78}},
+{ 874395, 3, {127,85,81}},
+{ 874400, 3, {1093,32,25}},
+{ 874440, 3, {347,56,45}},
+{ 874503, 3, {661,49,27}},
+{ 874560, 3, {911,32,30}},
+{ 874575, 3, {117,115,65}},
+{ 874656, 3, {3037,18,16}},
+{ 874665, 3, {99,95,93}},
+{ 874692, 3, {108,91,89}},
+{ 874720, 3, {112,110,71}},
+{ 874728, 3, {12149,9,8}},
+{ 874752, 3, {128,102,67}},
+{ 874848, 3, {701,39,32}},
+{ 874860, 3, {2083,21,20}},
+{ 874944, 3, {98,96,93}},
+{ 874980, 3, {4861,15,12}},
+{ 875028, 3, {947,33,28}},
+{ 875124, 3, {111,108,73}},
+{ 875160, 3, {104,99,85}},
+{ 875196, 3, {151,84,69}},
+{ 875232, 3, {1013,32,27}},
+{ 875280, 3, {521,42,40}},
+{ 875292, 3, {349,57,44}},
+{ 875304, 3, {12157,9,8}},
+{ 875340, 3, {1621,27,20}},
+{ 875385, 3, {397,49,45}},
+{ 875400, 3, {1459,25,24}},
+{ 875424, 3, {829,33,32}},
+{ 875448, 3, {193,72,63}},
+{ 875475, 3, {1297,27,25}},
+{ 875490, 3, {379,55,42}},
+{ 875520, 3, {96,96,95}},
+{ 875556, 3, {121,108,67}},
+{ 875592, 3, {12161,9,8}},
+{ 875600, 3, {199,80,55}},
+{ 875610, 3, {115,94,81}},
+{ 875655, 3, {145,99,61}},
+{ 875688, 3, {107,93,88}},
+{ 875700, 3, {139,84,75}},
+{ 875736, 3, {12163,9,8}},
+{ 875748, 3, {167,76,69}},
+{ 875808, 3, {3041,18,16}},
+{ 875826, 3, {331,54,49}},
+{ 875840, 3, {112,92,85}},
+{ 875875, 3, {125,91,77}},
+{ 875952, 3, {112,99,79}},
+{ 876015, 3, {105,103,81}},
+{ 876096, 3, {104,104,81}},
+{ 876240, 3, {1217,30,24}},
+{ 876288, 3, {163,84,64}},
+{ 876300, 3, {127,92,75}},
+{ 876330, 3, {107,91,90}},
+{ 876420, 3, {541,45,36}},
+{ 876432, 3, {124,93,76}},
+{ 876456, 3, {111,94,84}},
+{ 876480, 3, {110,96,83}},
+{ 876540, 3, {2087,21,20}},
+{ 876600, 3, {487,45,40}},
+{ 876624, 3, {2609,21,16}},
+{ 876645, 3, {115,99,77}},
+{ 876672, 3, {761,36,32}},
+{ 876690, 3, {191,85,54}},
+{ 876744, 3, {108,99,82}},
+{ 876780, 3, {4871,15,12}},
+{ 876792, 3, {307,56,51}},
+{ 876876, 3, {132,91,73}},
+{ 876900, 3, {111,100,79}},
+{ 876960, 3, {105,96,87}},
+{ 877030, 3, {119,110,67}},
+{ 877050, 3, {1949,25,18}},
+{ 877128, 3, {227,69,56}},
+{ 877140, 3, {443,45,44}},
+{ 877149, 3, {119,91,81}},
+{ 877176, 3, {131,93,72}},
+{ 877230, 3, {114,95,81}},
+{ 877240, 3, {241,65,56}},
+{ 877250, 3, {125,121,58}},
+{ 877275, 3, {557,45,35}},
+{ 877296, 3, {373,49,48}},
+{ 877344, 3, {111,104,76}},
+{ 877380, 3, {2089,21,20}},
+{ 877404, 3, {187,69,68}},
+{ 877464, 3, {1741,24,21}},
+{ 877492, 3, {121,98,74}},
+{ 877500, 3, {117,100,75}},
+{ 877536, 3, {277,66,48}},
+{ 877600, 3, {1097,32,25}},
+{ 877625, 3, {125,119,59}},
+{ 877632, 3, {653,42,32}},
+{ 877635, 3, {197,81,55}},
+{ 877656, 3, {104,97,87}},
+{ 877760, 3, {211,65,64}},
+{ 877800, 3, {105,95,88}},
+{ 877812, 3, {331,52,51}},
+{ 877860, 3, {4877,15,12}},
+{ 877905, 3, {929,35,27}},
+{ 877920, 3, {118,93,80}},
+{ 877932, 3, {739,36,33}},
+{ 877950, 3, {1951,25,18}},
+{ 877968, 3, {117,112,67}},
+{ 878016, 3, {269,64,51}},
+{ 878031, 3, {181,77,63}},
+{ 878080, 3, {112,98,80}},
+{ 878085, 3, {117,95,79}},
+{ 878112, 3, {3049,18,16}},
+{ 878160, 3, {3659,16,15}},
+{ 878175, 3, {1301,27,25}},
+{ 878184, 3, {12197,9,8}},
+{ 878232, 3, {111,92,86}},
+{ 878280, 3, {563,40,39}},
+{ 878325, 3, {239,75,49}},
+{ 878328, 3, {1109,33,24}},
+{ 878370, 3, {115,114,67}},
+{ 878400, 3, {122,90,80}},
+{ 878472, 3, {108,98,83}},
+{ 878570, 3, {163,77,70}},
+{ 878580, 3, {1627,27,20}},
+{ 878616, 3, {12203,9,8}},
+{ 878625, 3, {125,99,71}},
+{ 878640, 3, {523,42,40}},
+{ 878688, 3, {113,96,81}},
+{ 878696, 3, {119,104,71}},
+{ 878700, 3, {101,100,87}},
+{ 878724, 3, {317,63,44}},
+{ 878784, 3, {199,69,64}},
+{ 878832, 3, {359,51,48}},
+{ 878850, 3, {105,93,90}},
+{ 878940, 3, {257,60,57}},
+{ 878976, 3, {109,96,84}},
+{ 879036, 3, {139,93,68}},
+{ 879060, 3, {105,92,91}},
+{ 879120, 3, {111,90,88}},
+{ 879168, 3, {241,64,57}},
+{ 879192, 3, {12211,9,8}},
+{ 879200, 3, {157,80,70}},
+{ 879228, 3, {1163,28,27}},
+{ 879240, 3, {431,51,40}},
+{ 879255, 3, {167,81,65}},
+{ 879264, 3, {129,96,71}},
+{ 879312, 3, {2617,21,16}},
+{ 879320, 3, {104,95,89}},
+{ 879336, 3, {118,92,81}},
+{ 879360, 3, {229,64,60}},
+{ 879396, 3, {133,87,76}},
+{ 879417, 3, {141,81,77}},
+{ 879424, 3, {151,91,64}},
+{ 879444, 3, {479,51,36}},
+{ 879480, 3, {349,56,45}},
+{ 879525, 3, {1303,27,25}},
+{ 879550, 3, {359,50,49}},
+{ 879648, 3, {102,98,88}},
+{ 879660, 3, {181,81,60}},
+{ 879750, 3, {115,90,85}},
+{ 879795, 3, {133,105,63}},
+{ 879840, 3, {104,94,90}},
+{ 879852, 3, {227,68,57}},
+{ 879912, 3, {101,99,88}},
+{ 880020, 3, {4889,15,12}},
+{ 880040, 3, {449,49,40}},
+{ 880110, 3, {127,90,77}},
+{ 880128, 3, {191,72,64}},
+{ 880152, 3, {104,93,91}},
+{ 880200, 3, {163,75,72}},
+{ 880275, 3, {121,97,75}},
+{ 880320, 3, {131,84,80}},
+{ 880344, 3, {12227,9,8}},
+{ 880416, 3, {1019,32,27}},
+{ 880425, 3, {129,91,75}},
+{ 880440, 3, {110,92,87}},
+{ 880464, 3, {104,102,83}},
+{ 880488, 3, {1747,24,21}},
+{ 880560, 3, {1223,30,24}},
+{ 880572, 3, {953,33,28}},
+{ 880600, 3, {119,100,74}},
+{ 880632, 3, {151,81,72}},
+{ 880650, 3, {103,95,90}},
+{ 880656, 3, {2621,21,16}},
+{ 880740, 3, {233,63,60}},
+{ 880770, 3, {157,85,66}},
+{ 880800, 3, {367,50,48}},
+{ 880875, 3, {125,87,81}},
+{ 880880, 3, {110,91,88}},
+{ 880950, 3, {839,35,30}},
+{ 881010, 3, {251,65,54}},
+{ 881040, 3, {3671,16,15}},
+{ 881100, 3, {100,99,89}},
+{ 881118, 3, {111,98,81}},
+{ 881125, 3, {133,125,53}},
+{ 881208, 3, {12239,9,8}},
+{ 881244, 3, {269,63,52}},
+{ 881265, 3, {109,105,77}},
+{ 881268, 3, {103,93,92}},
+{ 881280, 3, {102,96,90}},
+{ 881352, 3, {12241,9,8}},
+{ 881440, 3, {787,35,32}},
+{ 881484, 3, {149,87,68}},
+{ 881496, 3, {106,99,84}},
+{ 881520, 3, {3673,16,15}},
+{ 881568, 3, {3061,18,16}},
+{ 881580, 3, {2099,21,20}},
+{ 881595, 3, {137,99,65}},
+{ 881600, 3, {116,95,80}},
+{ 881608, 3, {173,91,56}},
+{ 881640, 3, {120,93,79}},
+{ 881712, 3, {157,78,72}},
+{ 881760, 3, {167,80,66}},
+{ 881790, 3, {102,95,91}},
+{ 881820, 3, {115,108,71}},
+{ 881892, 3, {131,99,68}},
+{ 881928, 3, {1361,27,24}},
+{ 882000, 3, {100,98,90}},
+{ 882072, 3, {12251,9,8}},
+{ 882112, 3, {179,77,64}},
+{ 882144, 3, {1021,32,27}},
+{ 882189, 3, {133,99,67}},
+{ 882216, 3, {12253,9,8}},
+{ 882225, 3, {1307,27,25}},
+{ 882240, 3, {919,32,30}},
+{ 882300, 3, {173,75,68}},
+{ 882336, 3, {101,96,91}},
+{ 882360, 3, {108,95,86}},
+{ 882400, 3, {1103,32,25}},
+{ 882480, 3, {3677,16,15}},
+{ 882540, 3, {4903,15,12}},
+{ 882560, 3, {197,70,64}},
+{ 882600, 3, {1471,25,24}},
+{ 882640, 3, {118,88,85}},
+{ 882648, 3, {117,92,82}},
+{ 882672, 3, {112,111,71}},
+{ 882684, 3, {743,36,33}},
+{ 882700, 3, {100,97,91}},
+{ 882756, 3, {113,93,84}},
+{ 882784, 3, {563,49,32}},
+{ 882816, 3, {114,88,88}},
+{ 882882, 3, {99,98,91}},
+{ 882936, 3, {12263,9,8}},
+{ 883008, 3, {112,108,73}},
+{ 883120, 3, {112,95,83}},
+{ 883200, 3, {100,96,92}},
+{ 883224, 3, {108,94,87}},
+{ 883260, 3, {701,36,35}},
+{ 883296, 3, {3067,18,16}},
+{ 883320, 3, {433,51,40}},
+{ 883344, 3, {239,66,56}},
+{ 883368, 3, {12269,9,8}},
+{ 883386, 3, {133,82,81}},
+{ 883400, 3, {631,40,35}},
+{ 883428, 3, {809,39,28}},
+{ 883440, 3, {409,48,45}},
+{ 883476, 3, {99,97,92}},
+{ 883500, 3, {100,95,93}},
+{ 883512, 3, {1753,24,21}},
+{ 883520, 3, {251,64,55}},
+{ 883575, 3, {105,99,85}},
+{ 883584, 3, {118,96,78}},
+{ 883620, 3, {4909,15,12}},
+{ 883800, 3, {491,45,40}},
+{ 883872, 3, {99,96,93}},
+{ 883920, 3, {127,87,80}},
+{ 883944, 3, {12277,9,8}},
+{ 883980, 3, {1637,27,20}},
+{ 884000, 3, {104,100,85}},
+{ 884070, 3, {99,95,94}},
+{ 884160, 3, {307,60,48}},
+{ 884184, 3, {277,57,56}},
+{ 884205, 3, {401,49,45}},
+{ 884232, 3, {12281,9,8}},
+{ 884268, 3, {121,87,84}},
+{ 884352, 3, {98,96,94}},
+{ 884400, 3, {120,110,67}},
+{ 884448, 3, {111,96,83}},
+{ 884520, 3, {108,91,90}},
+{ 884544, 3, {271,64,51}},
+{ 884616, 3, {116,93,82}},
+{ 884640, 3, {97,96,95}},
+{ 884646, 3, {119,118,63}},
+{ 884664, 3, {1117,33,24}},
+{ 884688, 3, {2633,21,16}},
+{ 884730, 3, {383,55,42}},
+{ 884808, 3, {12289,9,8}},
+{ 884832, 3, {709,39,32}},
+{ 884856, 3, {229,69,56}},
+{ 884880, 3, {1229,30,24}},
+{ 884925, 3, {115,95,81}},
+{ 885024, 3, {439,48,42}},
+{ 885040, 3, {115,104,74}},
+{ 885105, 3, {117,89,85}},
+{ 885276, 3, {1171,28,27}},
+{ 885300, 3, {227,65,60}},
+{ 885312, 3, {106,96,87}},
+{ 885324, 3, {353,57,44}},
+{ 885360, 3, {112,93,85}},
+{ 885420, 3, {4919,15,12}},
+{ 885430, 3, {139,91,70}},
+{ 885456, 3, {104,99,86}},
+{ 885465, 3, {937,35,27}},
+{ 885500, 3, {115,100,77}},
+{ 885528, 3, {251,63,56}},
+{ 885600, 3, {108,100,82}},
+{ 885612, 3, {811,39,28}},
+{ 885672, 3, {12301,9,8}},
+{ 885675, 3, {241,75,49}},
+{ 885696, 3, {659,42,32}},
+{ 885780, 3, {111,95,84}},
+{ 885816, 3, {1367,27,24}},
+{ 885840, 3, {3691,16,15}},
+{ 885870, 3, {193,85,54}},
+{ 885885, 3, {143,105,59}},
+{ 885888, 3, {769,36,32}},
+{ 885920, 3, {113,98,80}},
+{ 885924, 3, {631,39,36}},
+{ 885984, 3, {839,33,32}},
+{ 886032, 3, {293,56,54}},
+{ 886116, 3, {137,84,77}},
+{ 886140, 3, {547,45,36}},
+{ 886160, 3, {106,95,88}},
+{ 886200, 3, {211,70,60}},
+{ 886236, 3, {169,76,69}},
+{ 886320, 3, {1231,30,24}},
+{ 886400, 3, {277,64,50}},
+{ 886500, 3, {197,75,60}},
+{ 886536, 3, {1759,24,21}},
+{ 886545, 3, {199,81,55}},
+{ 886620, 3, {2111,21,20}},
+{ 886635, 3, {153,95,61}},
+{ 886704, 3, {104,98,87}},
+{ 886725, 3, {563,45,35}},
+{ 886752, 3, {3079,18,16}},
+{ 886788, 3, {119,92,81}},
+{ 886848, 3, {149,93,64}},
+{ 886860, 3, {379,52,45}},
+{ 886920, 3, {389,57,40}},
+{ 886977, 3, {133,117,57}},
+{ 887040, 3, {105,96,88}},
+{ 887112, 3, {111,108,74}},
+{ 887145, 3, {119,105,71}},
+{ 887200, 3, {1109,32,25}},
+{ 887250, 3, {125,91,78}},
+{ 887256, 3, {12323,9,8}},
+{ 887280, 3, {3697,16,15}},
+{ 887400, 3, {102,100,87}},
+{ 887436, 3, {108,99,83}},
+{ 887460, 3, {2113,21,20}},
+{ 887568, 3, {123,88,82}},
+{ 887580, 3, {4931,15,12}},
+{ 887604, 3, {229,68,57}},
+{ 887640, 3, {569,40,39}},
+{ 887680, 3, {128,95,73}},
+{ 887688, 3, {12329,9,8}},
+{ 887700, 3, {269,60,55}},
+{ 887760, 3, {137,81,80}},
+{ 887796, 3, {271,63,52}},
+{ 887808, 3, {128,102,68}},
+{ 887832, 3, {118,99,76}},
+{ 887850, 3, {1973,25,18}},
+{ 887904, 3, {3083,18,16}},
+{ 887940, 3, {4933,15,12}},
+{ 888000, 3, {111,100,80}},
+{ 888030, 3, {115,99,78}},
+{ 888096, 3, {116,88,87}},
+{ 888125, 3, {145,125,49}},
+{ 888160, 3, {122,91,80}},
+{ 888165, 3, {129,85,81}},
+{ 888174, 3, {133,106,63}},
+{ 888192, 3, {257,64,54}},
+{ 888216, 3, {311,56,51}},
+{ 888240, 3, {3701,16,15}},
+{ 888264, 3, {117,104,73}},
+{ 888300, 3, {105,94,90}},
+{ 888360, 3, {673,40,33}},
+{ 888384, 3, {661,42,32}},
+{ 888420, 3, {134,85,78}},
+{ 888444, 3, {111,92,87}},
+{ 888525, 3, {359,55,45}},
+{ 888552, 3, {123,86,84}},
+{ 888600, 3, {1481,25,24}},
+{ 888615, 3, {105,93,91}},
+{ 888624, 3, {102,99,88}},
+{ 888660, 3, {4937,15,12}},
+{ 888696, 3, {12343,9,8}},
+{ 888720, 3, {105,92,92}},
+{ 888750, 3, {125,90,79}},
+{ 888888, 3, {111,91,88}},
+{ 888984, 3, {12347,9,8}},
+{ 889020, 3, {449,45,44}},
+{ 889056, 3, {108,98,84}},
+{ 889140, 3, {116,105,73}},
+{ 889200, 3, {104,95,90}},
+{ 889245, 3, {941,35,27}},
+{ 889272, 3, {179,72,69}},
+{ 889344, 3, {193,72,64}},
+{ 889350, 3, {110,105,77}},
+{ 889392, 3, {2647,21,16}},
+{ 889416, 3, {1123,33,24}},
+{ 889440, 3, {109,96,85}},
+{ 889504, 3, {133,88,76}},
+{ 889560, 3, {353,56,45}},
+{ 889632, 3, {3089,18,16}},
+{ 889680, 3, {337,55,48}},
+{ 889704, 3, {1373,27,24}},
+{ 889740, 3, {4943,15,12}},
+{ 889800, 3, {1483,25,24}},
+{ 889812, 3, {107,99,84}},
+{ 889824, 3, {104,93,92}},
+{ 889920, 3, {103,96,90}},
+{ 890100, 3, {115,90,86}},
+{ 890120, 3, {119,88,85}},
+{ 890160, 3, {3709,16,15}},
+{ 890175, 3, {143,83,75}},
+{ 890190, 3, {157,81,70}},
+{ 890208, 3, {281,66,48}},
+{ 890325, 3, {1319,27,25}},
+{ 890379, 3, {673,49,27}},
+{ 890496, 3, {773,36,32}},
+{ 890505, 3, {257,63,55}},
+{ 890550, 3, {1979,25,18}},
+{ 890568, 3, {114,93,84}},
+{ 890640, 3, {1237,30,24}},
+{ 890736, 3, {241,66,56}},
+{ 890760, 3, {571,40,39}},
+{ 890784, 3, {1031,32,27}},
+{ 890800, 3, {131,85,80}},
+{ 890820, 3, {101,98,90}},
+{ 890856, 3, {12373,9,8}},
+{ 890868, 3, {397,51,44}},
+{ 890890, 3, {110,91,89}},
+{ 890928, 3, {269,69,48}},
+{ 891000, 3, {100,99,90}},
+{ 891072, 3, {102,96,91}},
+{ 891144, 3, {12377,9,8}},
+{ 891180, 3, {4951,15,12}},
+{ 891264, 3, {211,66,64}},
+{ 891288, 3, {12379,9,8}},
+{ 891324, 3, {131,84,81}},
+{ 891408, 3, {379,49,48}},
+{ 891480, 3, {102,95,92}},
+{ 891520, 3, {199,70,64}},
+{ 891576, 3, {122,87,84}},
+{ 891648, 3, {108,96,86}},
+{ 891675, 3, {1321,27,25}},
+{ 891702, 3, {337,54,49}},
+{ 891765, 3, {149,95,63}},
+{ 891800, 3, {100,98,91}},
+{ 891840, 3, {929,32,30}},
+{ 891891, 3, {99,99,91}},
+{ 891968, 3, {181,77,64}},
+{ 891990, 3, {106,99,85}},
+{ 892056, 3, {109,93,88}},
+{ 892125, 3, {125,117,61}},
+{ 892143, 3, {119,119,63}},
+{ 892152, 3, {12391,9,8}},
+{ 892160, 3, {128,85,82}},
+{ 892188, 3, {751,36,33}},
+{ 892192, 3, {569,49,32}},
+{ 892200, 3, {1487,25,24}},
+{ 892260, 3, {4957,15,12}},
+{ 892375, 3, {125,121,59}},
+{ 892440, 3, {120,111,67}},
+{ 892500, 3, {105,100,85}},
+{ 892512, 3, {1033,32,27}},
+{ 892560, 3, {3719,16,15}},
+{ 892584, 3, {99,98,92}},
+{ 892620, 3, {108,95,87}},
+{ 892640, 3, {797,35,32}},
+{ 892710, 3, {109,91,90}},
+{ 892752, 3, {2657,21,16}},
+{ 892800, 3, {100,96,93}},
+{ 892836, 3, {1181,28,27}},
+{ 892840, 3, {104,101,85}},
+{ 892848, 3, {114,89,88}},
+{ 892872, 3, {12401,9,8}},
+{ 892944, 3, {106,104,81}},
+{ 892976, 3, {119,112,67}},
+{ 893025, 3, {105,105,81}},
+{ 893088, 3, {443,48,42}},
+{ 893100, 3, {229,65,60}},
+{ 893200, 3, {116,100,77}},
+{ 893316, 3, {151,87,68}},
+{ 893340, 3, {709,36,35}},
+{ 893376, 3, {99,96,94}},
+{ 893400, 3, {1489,25,24}},
+{ 893412, 3, {117,92,83}},
+{ 893424, 3, {2659,21,16}},
+{ 893448, 3, {12409,9,8}},
+{ 893475, 3, {99,95,95}},
+{ 893508, 3, {967,33,28}},
+{ 893520, 3, {120,102,73}},
+{ 893568, 3, {179,78,64}},
+{ 893592, 3, {197,72,63}},
+{ 893600, 3, {1117,32,25}},
+{ 893640, 3, {677,40,33}},
+{ 893664, 3, {107,96,87}},
+{ 893700, 3, {331,54,50}},
+{ 893724, 3, {337,52,51}},
+{ 893736, 3, {12413,9,8}},
+{ 893760, 3, {98,96,95}},
+{ 893880, 3, {191,72,65}},
+{ 893916, 3, {108,93,89}},
+{ 893928, 3, {313,56,51}},
+{ 893964, 3, {123,92,79}},
+{ 894000, 3, {149,80,75}},
+{ 894036, 3, {521,44,39}},
+{ 894060, 3, {4967,15,12}},
+{ 894075, 3, {131,91,75}},
+{ 894132, 3, {487,51,36}},
+{ 894150, 3, {1987,25,18}},
+{ 894159, 3, {133,83,81}},
+{ 894168, 3, {1129,33,24}},
+{ 894180, 3, {2129,21,20}},
+{ 894216, 3, {111,106,76}},
+{ 894250, 3, {125,98,73}},
+{ 894285, 3, {167,85,63}},
+{ 894300, 3, {271,60,55}},
+{ 894312, 3, {12421,9,8}},
+{ 894348, 3, {108,91,91}},
+{ 894375, 3, {135,125,53}},
+{ 894420, 3, {4969,15,12}},
+{ 894432, 3, {121,88,84}},
+{ 894465, 3, {139,99,65}},
+{ 894480, 3, {3727,16,15}},
+{ 894520, 3, {107,95,88}},
+{ 894600, 3, {120,105,71}},
+{ 894720, 3, {233,64,60}},
+{ 894768, 3, {2663,21,16}},
+{ 894780, 3, {1657,27,20}},
+{ 894880, 3, {112,94,85}},
+{ 894888, 3, {1381,27,24}},
+{ 894900, 3, {157,76,75}},
+{ 894915, 3, {947,35,27}},
+{ 894960, 3, {113,90,88}},
+{ 895020, 3, {2131,21,20}},
+{ 895050, 3, {117,90,85}},
+{ 895104, 3, {111,96,84}},
+{ 895125, 3, {125,93,77}},
+{ 895140, 3, {4973,15,12}},
+{ 895176, 3, {12433,9,8}},
+{ 895200, 3, {373,50,48}},
+{ 895328, 3, {571,49,32}},
+{ 895392, 3, {3109,18,16}},
+{ 895404, 3, {116,93,83}},
+{ 895440, 3, {105,104,82}},
+{ 895464, 3, {12437,9,8}},
+{ 895475, 3, {175,119,43}},
+{ 895500, 3, {199,75,60}},
+{ 895560, 3, {439,51,40}},
+{ 895608, 3, {1777,24,21}},
+{ 895650, 3, {853,35,30}},
+{ 895671, 3, {677,49,27}},
+{ 895680, 3, {311,60,48}},
+{ 895720, 3, {457,49,40}},
+{ 895725, 3, {1327,27,25}},
+{ 895752, 3, {104,99,87}},
+{ 895776, 3, {112,93,86}},
+{ 895800, 3, {1493,25,24}},
+{ 895860, 3, {108,105,79}},
+{ 895920, 3, {3733,16,15}},
+{ 895968, 3, {122,102,72}},
+{ 896100, 3, {103,100,87}},
+{ 896148, 3, {124,99,73}},
+{ 896172, 3, {191,69,68}},
+{ 896175, 3, {569,45,35}},
+{ 896220, 3, {383,52,45}},
+{ 896280, 3, {105,97,88}},
+{ 896400, 3, {108,100,83}},
+{ 896427, 3, {119,93,81}},
+{ 896448, 3, {112,92,87}},
+{ 896472, 3, {12451,9,8}},
+{ 896532, 3, {821,39,28}},
+{ 896544, 3, {283,66,48}},
+{ 896553, 3, {133,107,63}},
+{ 896580, 3, {293,60,51}},
+{ 896610, 3, {121,95,78}},
+{ 896688, 3, {479,48,39}},
+{ 896700, 3, {122,98,75}},
+{ 896800, 3, {118,95,80}},
+{ 896808, 3, {129,88,79}},
+{ 896850, 3, {1993,25,18}},
+{ 896880, 3, {111,101,80}},
+{ 896904, 3, {12457,9,8}},
+{ 896952, 3, {281,57,56}},
+{ 896994, 3, {113,98,81}},
+{ 897000, 3, {115,100,78}},
+{ 897120, 3, {105,96,89}},
+{ 897156, 3, {117,108,71}},
+{ 897204, 3, {971,33,28}},
+{ 897312, 3, {719,39,32}},
+{ 897336, 3, {103,99,88}},
+{ 897360, 3, {3739,16,15}},
+{ 897372, 3, {1187,28,27}},
+{ 897400, 3, {641,40,35}},
+{ 897408, 3, {114,96,82}},
+{ 897435, 3, {111,105,77}},
+{ 897456, 3, {2671,21,16}},
+{ 897468, 3, {523,44,39}},
+{ 897540, 3, {2137,21,20}},
+{ 897552, 3, {271,69,48}},
+{ 897600, 3, {102,100,88}},
+{ 897636, 3, {127,93,76}},
+{ 897660, 3, {4987,15,12}},
+{ 897696, 3, {1039,32,27}},
+{ 897750, 3, {105,95,90}},
+{ 897792, 3, {167,84,64}},
+{ 897804, 3, {163,81,68}},
+{ 897900, 3, {123,100,73}},
+{ 897975, 3, {307,65,45}},
+{ 898020, 3, {1663,27,20}},
+{ 898040, 3, {157,88,65}},
+{ 898056, 3, {12473,9,8}},
+{ 898128, 3, {108,99,84}},
+{ 898170, 3, {105,94,91}},
+{ 898200, 3, {499,45,40}},
+{ 898272, 3, {3119,18,16}},
+{ 898380, 3, {105,93,92}},
+{ 898392, 3, {123,88,83}},
+{ 898400, 3, {1123,32,25}},
+{ 898416, 3, {367,51,48}},
+{ 898425, 3, {121,99,75}},
+{ 898488, 3, {12479,9,8}},
+{ 898560, 3, {104,96,90}},
+{ 898590, 3, {389,55,42}},
+{ 898625, 3, {125,91,79}},
+{ 898632, 3, {1783,24,21}},
+{ 898650, 3, {1997,25,18}},
+{ 898656, 3, {111,92,88}},
+{ 898716, 3, {823,39,28}},
+{ 898740, 3, {4993,15,12}},
+{ 898752, 3, {151,93,64}},
+{ 898848, 3, {3121,18,16}},
+{ 898884, 3, {123,87,84}},
+{ 899052, 3, {139,84,77}},
+{ 899064, 3, {12487,9,8}},
+{ 899080, 3, {104,95,91}},
+{ 899136, 3, {223,64,63}},
+{ 899145, 3, {145,117,53}},
+{ 899150, 3, {367,50,49}},
+{ 899184, 3, {131,88,78}},
+{ 899200, 3, {281,64,50}},
+{ 899208, 3, {181,72,69}},
+{ 899220, 3, {2141,21,20}},
+{ 899262, 3, {122,91,81}},
+{ 899280, 3, {1249,30,24}},
+{ 899316, 3, {757,36,33}},
+{ 899325, 3, {571,45,35}},
+{ 899352, 3, {12491,9,8}},
+{ 899360, 3, {112,110,73}},
+{ 899400, 3, {1499,25,24}},
+{ 899415, 3, {115,99,79}},
+{ 899424, 3, {347,54,48}},
+{ 899460, 3, {263,60,57}},
+{ 899472, 3, {2677,21,16}},
+{ 899496, 3, {104,93,93}},
+{ 899520, 3, {937,32,30}},
+{ 899550, 3, {1999,25,18}},
+{ 899600, 3, {173,80,65}},
+{ 899640, 3, {102,98,90}},
+{ 899712, 3, {128,99,71}},
+{ 899760, 3, {163,80,69}},
+{ 899784, 3, {12497,9,8}},
+{ 899808, 3, {103,96,91}},
+{ 899820, 3, {4999,15,12}},
+{ 899829, 3, {161,81,69}},
+{ 899840, 3, {128,95,74}},
+{ 899844, 3, {401,51,44}},
+{ 899850, 3, {857,35,30}},
+{ 899925, 3, {169,75,71}},
+{ 899964, 3, {641,39,36}},
+{ 900060, 3, {2143,21,20}},
+{ 900081, 3, {157,91,63}},
+{ 900120, 3, {577,40,39}},
+{ 900130, 3, {167,77,70}},
+{ 900180, 3, {1667,27,20}},
+{ 900200, 3, {643,40,35}},
+{ 900216, 3, {12503,9,8}},
+{ 900240, 3, {110,93,88}},
+{ 900312, 3, {233,69,56}},
+{ 900315, 3, {117,95,81}},
+{ 900372, 3, {359,57,44}},
+{ 900375, 3, {147,125,49}},
+{ 900405, 3, {107,99,85}},
+{ 900432, 3, {111,104,78}},
+{ 900450, 3, {115,90,87}},
+{ 900540, 3, {5003,15,12}},
+{ 900585, 3, {953,35,27}},
+{ 900588, 3, {251,69,52}},
+{ 900592, 3, {119,88,86}},
+{ 900648, 3, {1787,24,21}},
+{ 900720, 3, {139,81,80}},
+{ 900768, 3, {853,33,32}},
+{ 900792, 3, {12511,9,8}},
+{ 900816, 3, {383,49,48}},
+{ 900864, 3, {102,96,92}},
+{ 900900, 3, {100,99,91}},
+{ 901056, 3, {114,104,76}},
+{ 901125, 3, {125,89,81}},
+{ 901170, 3, {102,95,93}},
+{ 901208, 3, {121,98,76}},
+{ 901224, 3, {12517,9,8}},
+{ 901260, 3, {1669,27,20}},
+{ 901320, 3, {116,105,74}},
+{ 901350, 3, {2003,25,18}},
+{ 901368, 3, {107,104,81}},
+{ 901440, 3, {313,60,48}},
+{ 901476, 3, {491,51,36}},
+{ 901485, 3, {117,115,67}},
+{ 901488, 3, {2683,21,16}},
+{ 901530, 3, {106,105,81}},
+{ 901560, 3, {683,40,33}},
+{ 901600, 3, {100,98,92}},
+{ 901620, 3, {5009,15,12}},
+{ 901656, 3, {1789,24,21}},
+{ 901680, 3, {104,102,85}},
+{ 901692, 3, {99,99,92}},
+{ 901728, 3, {101,96,93}},
+{ 901740, 3, {113,95,84}},
+{ 901800, 3, {167,75,72}},
+{ 901845, 3, {409,49,45}},
+{ 901908, 3, {1193,28,27}},
+{ 901935, 3, {131,85,81}},
+{ 901944, 3, {12527,9,8}},
+{ 901950, 3, {859,35,30}},
+{ 901980, 3, {5011,15,12}},
+{ 901992, 3, {118,91,84}},
+{ 902016, 3, {108,96,87}},
+{ 902055, 3, {121,105,71}},
+{ 902070, 3, {257,65,54}},
+{ 902100, 3, {100,97,93}},
+{ 902160, 3, {179,72,70}},
+{ 902340, 3, {557,45,36}},
+{ 902400, 3, {100,96,94}},
+{ 902440, 3, {293,56,55}},
+{ 902496, 3, {112,102,79}},
+{ 902580, 3, {307,60,49}},
+{ 902640, 3, {3761,16,15}},
+{ 902652, 3, {111,107,76}},
+{ 902664, 3, {199,72,63}},
+{ 902700, 3, {118,90,85}},
+{ 902720, 3, {124,91,80}},
+{ 902748, 3, {977,33,28}},
+{ 902772, 3, {643,39,36}},
+{ 902808, 3, {12539,9,8}},
+{ 902825, 3, {175,77,67}},
+{ 902832, 3, {2687,21,16}},
+{ 902880, 3, {99,96,95}},
+{ 902952, 3, {12541,9,8}},
+{ 903000, 3, {105,100,86}},
+{ 903040, 3, {128,85,83}},
+{ 903060, 3, {173,87,60}},
+{ 903084, 3, {827,39,28}},
+{ 903108, 3, {233,68,57}},
+{ 903150, 3, {223,75,54}},
+{ 903168, 3, {98,96,96}},
+{ 903200, 3, {1129,32,25}},
+{ 903210, 3, {115,102,77}},
+{ 903240, 3, {193,72,65}},
+{ 903336, 3, {283,57,56}},
+{ 903360, 3, {941,32,30}},
+{ 903375, 3, {125,99,73}},
+{ 903384, 3, {12547,9,8}},
+{ 903408, 3, {118,88,87}},
+{ 903420, 3, {239,63,60}},
+{ 903448, 3, {119,104,73}},
+{ 903456, 3, {3137,18,16}},
+{ 903504, 3, {2689,21,16}},
+{ 903552, 3, {181,78,64}},
+{ 903555, 3, {115,97,81}},
+{ 903560, 3, {461,49,40}},
+{ 903609, 3, {683,49,27}},
+{ 903630, 3, {331,65,42}},
+{ 903672, 3, {163,77,72}},
+{ 903720, 3, {443,51,40}},
+{ 903735, 3, {151,95,63}},
+{ 903780, 3, {5021,15,12}},
+{ 903816, 3, {12553,9,8}},
+{ 903900, 3, {131,92,75}},
+{ 903924, 3, {211,68,63}},
+{ 903960, 3, {108,93,90}},
+{ 904020, 3, {122,95,78}},
+{ 904032, 3, {129,96,73}},
+{ 904068, 3, {761,36,33}},
+{ 904080, 3, {3767,16,15}},
+{ 904128, 3, {277,64,51}},
+{ 904140, 3, {5023,15,12}},
+{ 904176, 3, {108,92,91}},
+{ 904200, 3, {137,88,75}},
+{ 904230, 3, {197,85,54}},
+{ 904260, 3, {2153,21,20}},
+{ 904332, 3, {143,93,68}},
+{ 904400, 3, {112,95,85}},
+{ 904428, 3, {111,97,84}},
+{ 904452, 3, {113,92,87}},
+{ 904500, 3, {125,108,67}},
+{ 904512, 3, {673,42,32}},
+{ 904560, 3, {3769,16,15}},
+{ 904590, 3, {115,114,69}},
+{ 904596, 3, {121,89,84}},
+{ 904608, 3, {349,54,48}},
+{ 904640, 3, {257,64,55}},
+{ 904680, 3, {359,56,45}},
+{ 904728, 3, {149,88,69}},
+{ 904736, 3, {577,49,32}},
+{ 904750, 3, {125,94,77}},
+{ 904800, 3, {104,100,87}},
+{ 904848, 3, {2693,21,16}},
+{ 904860, 3, {457,45,44}},
+{ 904904, 3, {113,91,88}},
+{ 904932, 3, {114,98,81}},
+{ 904950, 3, {2011,25,18}},
+{ 904968, 3, {12569,9,8}},
+{ 904992, 3, {857,33,32}},
+{ 904995, 3, {117,91,85}},
+{ 905040, 3, {419,48,45}},
+{ 905080, 3, {121,88,85}},
+{ 905160, 3, {397,57,40}},
+{ 905175, 3, {149,81,75}},
+{ 905184, 3, {449,48,42}},
+{ 905190, 3, {211,66,65}},
+{ 905250, 3, {125,102,71}},
+{ 905256, 3, {127,88,81}},
+{ 905268, 3, {829,39,28}},
+{ 905280, 3, {115,96,82}},
+{ 905352, 3, {317,56,51}},
+{ 905355, 3, {155,99,59}},
+{ 905400, 3, {503,45,40}},
+{ 905520, 3, {105,98,88}},
+{ 905544, 3, {12577,9,8}},
+{ 905556, 3, {193,69,68}},
+{ 905600, 3, {283,64,50}},
+{ 905616, 3, {331,57,48}},
+{ 905760, 3, {111,96,85}},
+{ 905800, 3, {647,40,35}},
+{ 905844, 3, {137,87,76}},
+{ 905940, 3, {719,36,35}},
+{ 905970, 3, {115,101,78}},
+{ 905976, 3, {12583,9,8}},
+{ 906000, 3, {151,80,75}},
+{ 906048, 3, {104,99,88}},
+{ 906066, 3, {119,94,81}},
+{ 906080, 3, {809,35,32}},
+{ 906150, 3, {863,35,30}},
+{ 906192, 3, {112,93,87}},
+{ 906300, 3, {106,95,90}},
+{ 906304, 3, {119,112,68}},
+{ 906336, 3, {1049,32,27}},
+{ 906360, 3, {105,104,83}},
+{ 906408, 3, {12589,9,8}},
+{ 906444, 3, {109,99,84}},
+{ 906480, 3, {1259,30,24}},
+{ 906500, 3, {125,98,74}},
+{ 906525, 3, {135,85,79}},
+{ 906528, 3, {114,112,71}},
+{ 906552, 3, {1399,27,24}},
+{ 906576, 3, {102,101,88}},
+{ 906600, 3, {1511,25,24}},
+{ 906624, 3, {787,36,32}},
+{ 906633, 3, {123,91,81}},
+{ 906660, 3, {115,108,73}},
+{ 906675, 3, {157,77,75}},
+{ 906696, 3, {257,63,56}},
+{ 906750, 3, {125,93,78}},
+{ 906780, 3, {127,85,84}},
+{ 906864, 3, {2699,21,16}},
+{ 906936, 3, {106,93,92}},
+{ 906960, 3, {3779,16,15}},
+{ 907020, 3, {5039,15,12}},
+{ 907104, 3, {859,33,32}},
+{ 907137, 3, {119,99,77}},
+{ 907200, 3, {105,96,90}},
+{ 907212, 3, {173,76,69}},
+{ 907236, 3, {116,99,79}},
+{ 907272, 3, {12601,9,8}},
+{ 907296, 3, {727,39,32}},
+{ 907335, 3, {141,99,65}},
+{ 907375, 3, {125,119,61}},
+{ 907452, 3, {277,63,52}},
+{ 907480, 3, {463,49,40}},
+{ 907536, 3, {112,111,73}},
+{ 907584, 3, {163,87,64}},
+{ 907620, 3, {2161,21,20}},
+{ 907632, 3, {191,72,66}},
+{ 907650, 3, {2017,25,18}},
+{ 907680, 3, {122,93,80}},
+{ 907704, 3, {1801,24,21}},
+{ 907725, 3, {105,95,91}},
+{ 907776, 3, {197,72,64}},
+{ 907830, 3, {131,90,77}},
+{ 907920, 3, {104,97,90}},
+{ 907956, 3, {1201,28,27}},
+{ 907984, 3, {121,112,67}},
+{ 907992, 3, {12611,9,8}},
+{ 908010, 3, {118,95,81}},
+{ 908040, 3, {105,94,92}},
+{ 908064, 3, {1051,32,27}},
+{ 908136, 3, {12613,9,8}},
+{ 908160, 3, {110,96,86}},
+{ 908232, 3, {123,104,71}},
+{ 908292, 3, {983,33,28}},
+{ 908310, 3, {137,85,78}},
+{ 908320, 3, {811,35,32}},
+{ 908325, 3, {367,55,45}},
+{ 908352, 3, {114,96,83}},
+{ 908375, 3, {169,125,43}},
+{ 908388, 3, {647,39,36}},
+{ 908424, 3, {111,93,88}},
+{ 908460, 3, {103,98,90}},
+{ 908523, 3, {133,99,69}},
+{ 908544, 3, {104,96,91}},
+{ 908568, 3, {12619,9,8}},
+{ 908600, 3, {118,100,77}},
+{ 908700, 3, {233,65,60}},
+{ 908775, 3, {577,45,35}},
+{ 908800, 3, {128,100,71}},
+{ 908868, 3, {111,92,89}},
+{ 908880, 3, {541,42,40}},
+{ 908928, 3, {263,64,54}},
+{ 908960, 3, {104,95,92}},
+{ 909090, 3, {111,91,90}},
+{ 909120, 3, {947,32,30}},
+{ 909144, 3, {122,92,81}},
+{ 909168, 3, {104,94,93}},
+{ 909180, 3, {5051,15,12}},
+{ 909216, 3, {112,99,82}},
+{ 909324, 3, {117,116,67}},
+{ 909360, 3, {421,48,45}},
+{ 909440, 3, {116,98,80}},
+{ 909552, 3, {2707,21,16}},
+{ 909600, 3, {379,50,48}},
+{ 909675, 3, {311,65,45}},
+{ 909720, 3, {114,95,84}},
+{ 909792, 3, {108,104,81}},
+{ 909832, 3, {211,77,56}},
+{ 909864, 3, {12637,9,8}},
+{ 909888, 3, {677,42,32}},
+{ 909900, 3, {337,54,50}},
+{ 909909, 3, {101,99,91}},
+{ 909948, 3, {307,57,52}},
+{ 909972, 3, {157,84,69}},
+{ 910000, 3, {100,100,91}},
+{ 910035, 3, {107,105,81}},
+{ 910080, 3, {120,96,79}},
+{ 910152, 3, {12641,9,8}},
+{ 910200, 3, {111,100,82}},
+{ 910224, 3, {108,98,86}},
+{ 910260, 3, {389,52,45}},
+{ 910320, 3, {3793,16,15}},
+{ 910368, 3, {109,96,87}},
+{ 910404, 3, {121,99,76}},
+{ 910520, 3, {104,103,85}},
+{ 910525, 3, {175,121,43}},
+{ 910575, 3, {135,95,71}},
+{ 910584, 3, {12647,9,8}},
+{ 910620, 3, {5059,15,12}},
+{ 910656, 3, {102,96,93}},
+{ 910800, 3, {100,99,92}},
+{ 910845, 3, {173,81,65}},
+{ 910860, 3, {102,95,94}},
+{ 910896, 3, {2711,21,16}},
+{ 910910, 3, {110,91,91}},
+{ 910944, 3, {3163,18,16}},
+{ 910980, 3, {241,63,60}},
+{ 911016, 3, {12653,9,8}},
+{ 911064, 3, {119,88,87}},
+{ 911088, 3, {111,108,76}},
+{ 911200, 3, {134,85,80}},
+{ 911232, 3, {113,96,84}},
+{ 911240, 3, {109,95,88}},
+{ 911250, 3, {125,90,81}},
+{ 911280, 3, {3797,16,15}},
+{ 911295, 3, {263,63,55}},
+{ 911328, 3, {863,33,32}},
+{ 911400, 3, {100,98,93}},
+{ 911412, 3, {108,97,87}},
+{ 911430, 3, {117,95,82}},
+{ 911448, 3, {12659,9,8}},
+{ 911568, 3, {2713,21,16}},
+{ 911592, 3, {1151,33,24}},
+{ 911625, 3, {143,85,75}},
+{ 911664, 3, {487,48,39}},
+{ 911680, 3, {112,110,74}},
+{ 911736, 3, {134,84,81}},
+{ 911760, 3, {131,87,80}},
+{ 911790, 3, {307,55,54}},
+{ 911880, 3, {149,85,72}},
+{ 911976, 3, {111,104,79}},
+{ 912000, 3, {100,96,95}},
+{ 912060, 3, {563,45,36}},
+{ 912096, 3, {3167,18,16}},
+{ 912120, 3, {691,40,33}},
+{ 912135, 3, {119,105,73}},
+{ 912150, 3, {2027,25,18}},
+{ 912184, 3, {179,91,56}},
+{ 912240, 3, {181,72,70}},
+{ 912285, 3, {99,97,95}},
+{ 912288, 3, {104,102,86}},
+{ 912312, 3, {12671,9,8}},
+{ 912384, 3, {99,96,96}},
+{ 912456, 3, {114,92,87}},
+{ 912492, 3, {119,108,71}},
+{ 912560, 3, {122,88,85}},
+{ 912576, 3, {98,97,96}},
+{ 912600, 3, {117,100,78}},
+{ 912625, 3, {149,125,49}},
+{ 912672, 3, {3169,18,16}},
+{ 912720, 3, {3803,16,15}},
+{ 912744, 3, {1811,24,21}},
+{ 912780, 3, {461,45,44}},
+{ 912800, 3, {163,80,70}},
+{ 912870, 3, {115,98,81}},
+{ 912900, 3, {179,75,68}},
+{ 912912, 3, {114,91,88}},
+{ 912960, 3, {317,60,48}},
+{ 913032, 3, {1409,27,24}},
+{ 913050, 3, {2029,25,18}},
+{ 913066, 3, {121,98,77}},
+{ 913104, 3, {373,51,48}},
+{ 913140, 3, {108,95,89}},
+{ 913176, 3, {1153,33,24}},
+{ 913185, 3, {223,65,63}},
+{ 913311, 3, {133,109,63}},
+{ 913410, 3, {199,85,54}},
+{ 913440, 3, {173,80,66}},
+{ 913500, 3, {105,100,87}},
+{ 913536, 3, {122,96,78}},
+{ 913572, 3, {769,36,33}},
+{ 913584, 3, {2719,21,16}},
+{ 913605, 3, {113,105,77}},
+{ 913608, 3, {12689,9,8}},
+{ 913640, 3, {251,65,56}},
+{ 913752, 3, {111,98,84}},
+{ 913800, 3, {1523,25,24}},
+{ 913815, 3, {967,35,27}},
+{ 913836, 3, {129,92,77}},
+{ 913848, 3, {104,101,87}},
+{ 913850, 3, {373,50,49}},
+{ 913860, 3, {5077,15,12}},
+{ 913920, 3, {112,96,85}},
+{ 914004, 3, {108,93,91}},
+{ 914100, 3, {277,60,55}},
+{ 914184, 3, {12697,9,8}},
+{ 914193, 3, {691,49,27}},
+{ 914196, 3, {116,111,71}},
+{ 914200, 3, {653,40,35}},
+{ 914220, 3, {1693,27,20}},
+{ 914280, 3, {401,57,40}},
+{ 914340, 3, {311,60,49}},
+{ 914368, 3, {157,91,64}},
+{ 914375, 3, {125,95,77}},
+{ 914400, 3, {127,90,80}},
+{ 914430, 3, {163,85,66}},
+{ 914480, 3, {115,112,71}},
+{ 914508, 3, {191,76,63}},
+{ 914550, 3, {134,91,75}},
+{ 914580, 3, {5081,15,12}},
+{ 914616, 3, {12703,9,8}},
+{ 914634, 3, {122,119,63}},
+{ 914640, 3, {111,103,80}},
+{ 914760, 3, {105,99,88}},
+{ 914784, 3, {733,39,32}},
+{ 914850, 3, {107,95,90}},
+{ 914880, 3, {953,32,30}},
+{ 914928, 3, {389,49,48}},
+{ 914940, 3, {117,92,85}},
+{ 914976, 3, {353,54,48}},
+{ 915040, 3, {112,95,86}},
+{ 915120, 3, {120,93,82}},
+{ 915180, 3, {2179,21,20}},
+{ 915192, 3, {223,72,57}},
+{ 915264, 3, {227,64,63}},
+{ 915320, 3, {467,49,40}},
+{ 915336, 3, {12713,9,8}},
+{ 915408, 3, {163,78,72}},
+{ 915492, 3, {107,93,92}},
+{ 915525, 3, {313,65,45}},
+{ 915552, 3, {102,102,88}},
+{ 915624, 3, {157,81,72}},
+{ 915648, 3, {251,64,57}},
+{ 915660, 3, {5087,15,12}},
+{ 915684, 3, {991,33,28}},
+{ 915705, 3, {119,95,81}},
+{ 915720, 3, {587,40,39}},
+{ 915824, 3, {119,104,74}},
+{ 915840, 3, {106,96,90}},
+{ 915900, 3, {129,100,71}},
+{ 915912, 3, {12721,9,8}},
+{ 915915, 3, {143,105,61}},
+{ 915936, 3, {112,94,87}},
+{ 915960, 3, {449,51,40}},
+{ 915975, 3, {135,115,59}},
+{ 916020, 3, {727,36,35}},
+{ 916080, 3, {347,55,48}},
+{ 916128, 3, {3181,18,16}},
+{ 916164, 3, {499,51,36}},
+{ 916188, 3, {839,39,28}},
+{ 916200, 3, {509,45,40}},
+{ 916320, 3, {115,96,83}},
+{ 916344, 3, {104,99,89}},
+{ 916380, 3, {1697,27,20}},
+{ 916416, 3, {111,96,86}},
+{ 916500, 3, {125,94,78}},
+{ 916560, 3, {120,114,67}},
+{ 916575, 3, {121,101,75}},
+{ 916596, 3, {123,92,81}},
+{ 916608, 3, {112,93,88}},
+{ 916650, 3, {105,97,90}},
+{ 916704, 3, {1061,32,27}},
+{ 916740, 3, {463,45,44}},
+{ 916800, 3, {191,75,64}},
+{ 916812, 3, {653,39,36}},
+{ 916839, 3, {147,81,77}},
+{ 916872, 3, {151,88,69}},
+{ 916944, 3, {2729,21,16}},
+{ 916980, 3, {116,93,85}},
+{ 916992, 3, {199,72,64}},
+{ 917028, 3, {1213,28,27}},
+{ 917040, 3, {3821,16,15}},
+{ 917070, 3, {397,55,42}},
+{ 917136, 3, {193,72,66}},
+{ 917184, 3, {281,64,51}},
+{ 917208, 3, {12739,9,8}},
+{ 917235, 3, {109,99,85}},
+{ 917244, 3, {149,81,76}},
+{ 917280, 3, {105,96,91}},
+{ 917320, 3, {136,95,71}},
+{ 917325, 3, {151,81,75}},
+{ 917352, 3, {137,93,72}},
+{ 917400, 3, {139,88,75}},
+{ 917424, 3, {277,69,48}},
+{ 917460, 3, {1699,27,20}},
+{ 917496, 3, {12743,9,8}},
+{ 917520, 3, {3823,16,15}},
+{ 917532, 3, {331,63,44}},
+{ 917550, 3, {2039,25,18}},
+{ 917568, 3, {118,96,81}},
+{ 917595, 3, {971,35,27}},
+{ 917616, 3, {2731,21,16}},
+{ 917664, 3, {121,96,79}},
+{ 917700, 3, {105,95,92}},
+{ 917760, 3, {239,64,60}},
+{ 917796, 3, {409,51,44}},
+{ 917820, 3, {5099,15,12}},
+{ 917840, 3, {149,80,77}},
+{ 917856, 3, {3187,18,16}},
+{ 917928, 3, {122,99,76}},
+{ 917952, 3, {683,42,32}},
+{ 918099, 3, {133,117,59}},
+{ 918144, 3, {797,36,32}},
+{ 918162, 3, {347,54,49}},
+{ 918180, 3, {5101,15,12}},
+{ 918192, 3, {111,94,88}},
+{ 918216, 3, {109,104,81}},
+{ 918225, 3, {159,77,75}},
+{ 918324, 3, {773,36,33}},
+{ 918432, 3, {1063,32,27}},
+{ 918504, 3, {12757,9,8}},
+{ 918540, 3, {108,105,81}},
+{ 918600, 3, {1531,25,24}},
+{ 918675, 3, {1361,27,25}},
+{ 918720, 3, {110,96,87}},
+{ 918750, 3, {125,98,75}},
+{ 918792, 3, {1823,24,21}},
+{ 918840, 3, {104,95,93}},
+{ 918918, 3, {102,99,91}},
+{ 918936, 3, {12763,9,8}},
+{ 918960, 3, {547,42,40}},
+{ 919008, 3, {3191,18,16}},
+{ 919068, 3, {139,87,76}},
+{ 919080, 3, {111,92,90}},
+{ 919100, 3, {101,100,91}},
+{ 919152, 3, {491,48,39}},
+{ 919200, 3, {383,50,48}},
+{ 919260, 3, {5107,15,12}},
+{ 919296, 3, {114,96,84}},
+{ 919350, 3, {227,75,54}},
+{ 919360, 3, {104,104,85}},
+{ 919440, 3, {1277,30,24}},
+{ 919512, 3, {108,99,86}},
+{ 919520, 3, {821,35,32}},
+{ 919524, 3, {111,109,76}},
+{ 919548, 3, {123,89,84}},
+{ 919584, 3, {103,96,93}},
+{ 919600, 3, {110,95,88}},
+{ 919776, 3, {134,88,78}},
+{ 919800, 3, {120,105,73}},
+{ 919836, 3, {167,81,68}},
+{ 919908, 3, {101,99,92}},
+{ 919920, 3, {3833,16,15}},
+{ 919968, 3, {112,111,74}},
+{ 919980, 3, {269,60,57}},
+{ 920010, 3, {337,65,42}},
+{ 920052, 3, {1217,28,27}},
+{ 920220, 3, {313,60,49}},
+{ 920232, 3, {12781,9,8}},
+{ 920244, 3, {347,52,51}},
+{ 920304, 3, {112,99,83}},
+{ 920340, 3, {5113,15,12}},
+{ 920416, 3, {587,49,32}},
+{ 920436, 3, {367,57,44}},
+{ 920448, 3, {102,96,94}},
+{ 920460, 3, {115,92,87}},
+{ 920550, 3, {102,95,95}},
+{ 920556, 3, {281,63,52}},
+{ 920640, 3, {137,84,80}},
+{ 920700, 3, {100,99,93}},
+{ 920800, 3, {1151,32,25}},
+{ 920808, 3, {108,98,87}},
+{ 920850, 3, {877,35,30}},
+{ 920880, 3, {1279,30,24}},
+{ 920920, 3, {110,92,91}},
+{ 920952, 3, {12791,9,8}},
+{ 920976, 3, {2741,21,16}},
+{ 921096, 3, {1163,33,24}},
+{ 921120, 3, {101,96,95}},
+{ 921150, 3, {115,90,89}},
+{ 921200, 3, {100,98,94}},
+{ 921228, 3, {997,33,28}},
+{ 921300, 3, {111,100,83}},
+{ 921312, 3, {457,48,42}},
+{ 921360, 3, {349,55,48}},
+{ 921420, 3, {5119,15,12}},
+{ 921528, 3, {12799,9,8}},
+{ 921536, 3, {119,88,88}},
+{ 921570, 3, {139,85,78}},
+{ 921600, 3, {100,96,96}},
+{ 921648, 3, {211,78,56}},
+{ 921690, 3, {99,98,95}},
+{ 921760, 3, {823,35,32}},
+{ 921780, 3, {569,45,36}},
+{ 921804, 3, {311,57,52}},
+{ 921816, 3, {118,93,84}},
+{ 921840, 3, {167,80,69}},
+{ 921888, 3, {99,97,96}},
+{ 921960, 3, {197,72,65}},
+{ 921984, 3, {98,98,96}},
+{ 922032, 3, {337,57,48}},
+{ 922080, 3, {113,96,85}},
+{ 922104, 3, {1423,27,24}},
+{ 922116, 3, {257,69,52}},
+{ 922131, 3, {123,119,63}},
+{ 922185, 3, {115,99,81}},
+{ 922188, 3, {124,111,67}},
+{ 922200, 3, {106,100,87}},
+{ 922248, 3, {12809,9,8}},
+{ 922250, 3, {125,119,62}},
+{ 922272, 3, {739,39,32}},
+{ 922284, 3, {137,99,68}},
+{ 922376, 3, {181,91,56}},
+{ 922400, 3, {1153,32,25}},
+{ 922425, 3, {251,75,49}},
+{ 922428, 3, {117,108,73}},
+{ 922464, 3, {3203,18,16}},
+{ 922500, 3, {125,90,82}},
+{ 922545, 3, {117,95,83}},
+{ 922560, 3, {124,93,80}},
+{ 922590, 3, {134,85,81}},
+{ 922600, 3, {659,40,35}},
+{ 922625, 3, {125,121,61}},
+{ 922725, 3, {1367,27,25}},
+{ 922752, 3, {108,96,89}},
+{ 922824, 3, {1831,24,21}},
+{ 922860, 3, {1709,27,20}},
+{ 922896, 3, {104,102,87}},
+{ 922944, 3, {114,92,88}},
+{ 923000, 3, {125,104,71}},
+{ 923076, 3, {111,99,84}},
+{ 923100, 3, {181,75,68}},
+{ 923112, 3, {12821,9,8}},
+{ 923130, 3, {263,65,54}},
+{ 923175, 3, {373,55,45}},
+{ 923220, 3, {223,69,60}},
+{ 923256, 3, {12823,9,8}},
+{ 923265, 3, {977,35,27}},
+{ 923280, 3, {3847,16,15}},
+{ 923328, 3, {229,64,63}},
+{ 923400, 3, {108,95,90}},
+{ 923440, 3, {112,97,85}},
+{ 923454, 3, {349,54,49}},
+{ 923472, 3, {106,99,88}},
+{ 923496, 3, {239,69,56}},
+{ 923508, 3, {503,51,36}},
+{ 923520, 3, {111,104,80}},
+{ 923580, 3, {733,36,35}},
+{ 923616, 3, {1069,32,27}},
+{ 923650, 3, {145,91,70}},
+{ 923664, 3, {2749,21,16}},
+{ 923670, 3, {311,55,54}},
+{ 923688, 3, {12829,9,8}},
+{ 923712, 3, {283,64,51}},
+{ 923760, 3, {1283,30,24}},
+{ 923832, 3, {108,94,91}},
+{ 923850, 3, {2053,25,18}},
+{ 923895, 3, {419,49,45}},
+{ 923910, 3, {115,103,78}},
+{ 924000, 3, {105,100,88}},
+{ 924048, 3, {108,93,92}},
+{ 924084, 3, {193,76,63}},
+{ 924120, 3, {151,85,72}},
+{ 924160, 3, {128,95,76}},
+{ 924192, 3, {3209,18,16}},
+{ 924210, 3, {163,81,70}},
+{ 924240, 3, {3851,16,15}},
+{ 924300, 3, {117,100,79}},
+{ 924324, 3, {197,69,68}},
+{ 924420, 3, {124,105,71}},
+{ 924480, 3, {107,96,90}},
+{ 924525, 3, {587,45,35}},
+{ 924528, 3, {103,102,88}},
+{ 924552, 3, {12841,9,8}},
+{ 924560, 3, {127,91,80}},
+{ 924588, 3, {1223,28,27}},
+{ 924600, 3, {120,115,67}},
+{ 924616, 3, {133,88,79}},
+{ 924660, 3, {467,45,44}},
+{ 924696, 3, {1427,27,24}},
+{ 924720, 3, {3853,16,15}},
+{ 924768, 3, {114,104,78}},
+{ 924792, 3, {113,93,88}},
+{ 924800, 3, {128,85,85}},
+{ 924840, 3, {367,56,45}},
+{ 924875, 3, {151,125,49}},
+{ 924885, 3, {117,93,85}},
+{ 924924, 3, {121,91,84}},
+{ 925008, 3, {2753,21,16}},
+{ 925020, 3, {571,45,36}},
+{ 925050, 3, {881,35,30}},
+{ 925056, 3, {128,99,73}},
+{ 925080, 3, {593,40,39}},
+{ 925120, 3, {118,98,80}},
+{ 925236, 3, {659,39,36}},
+{ 925260, 3, {2203,21,20}},
+{ 925275, 3, {169,75,73}},
+{ 925320, 3, {701,40,33}},
+{ 925400, 3, {661,40,35}},
+{ 925416, 3, {12853,9,8}},
+{ 925440, 3, {241,64,60}},
+{ 925470, 3, {113,91,90}},
+{ 925548, 3, {349,52,51}},
+{ 925650, 3, {110,99,85}},
+{ 925680, 3, {112,95,87}},
+{ 925704, 3, {117,92,86}},
+{ 925760, 3, {263,64,55}},
+{ 925800, 3, {1543,25,24}},
+{ 925848, 3, {167,77,72}},
+{ 925908, 3, {131,93,76}},
+{ 925911, 3, {161,81,71}},
+{ 925992, 3, {1429,27,24}},
+{ 926016, 3, {106,96,91}},
+{ 926100, 3, {105,98,90}},
+{ 926112, 3, {877,33,32}},
+{ 926208, 3, {128,108,67}},
+{ 926240, 3, {827,35,32}},
+{ 926250, 3, {125,95,78}},
+{ 926280, 3, {120,93,83}},
+{ 926310, 3, {401,55,42}},
+{ 926364, 3, {239,68,57}},
+{ 926376, 3, {121,88,87}},
+{ 926400, 3, {193,75,64}},
+{ 926415, 3, {173,85,63}},
+{ 926460, 3, {5147,15,12}},
+{ 926478, 3, {133,86,81}},
+{ 926496, 3, {3217,18,16}},
+{ 926541, 3, {191,77,63}},
+{ 926640, 3, {104,99,90}},
+{ 926670, 3, {115,102,79}},
+{ 926775, 3, {1373,27,25}},
+{ 926820, 3, {271,60,57}},
+{ 926835, 3, {105,97,91}},
+{ 926940, 3, {2207,21,20}},
+{ 926976, 3, {128,102,71}},
+{ 927024, 3, {112,93,89}},
+{ 927045, 3, {109,105,81}},
+{ 927072, 3, {111,96,87}},
+{ 927108, 3, {283,63,52}},
+{ 927120, 3, {3863,16,15}},
+{ 927150, 3, {883,35,30}},
+{ 927200, 3, {122,95,80}},
+{ 927225, 3, {317,65,45}},
+{ 927264, 3, {743,39,32}},
+{ 927300, 3, {281,60,55}},
+{ 927360, 3, {105,96,92}},
+{ 927423, 3, {701,49,27}},
+{ 927432, 3, {1171,33,24}},
+{ 927450, 3, {229,75,54}},
+{ 927465, 3, {121,105,73}},
+{ 927520, 3, {124,88,85}},
+{ 927540, 3, {5153,15,12}},
+{ 927648, 3, {3221,18,16}},
+{ 927680, 3, {223,65,64}},
+{ 927696, 3, {251,66,56}},
+{ 927732, 3, {313,57,52}},
+{ 927768, 3, {116,93,86}},
+{ 927792, 3, {379,51,48}},
+{ 927828, 3, {121,108,71}},
+{ 927864, 3, {263,63,56}},
+{ 927912, 3, {123,92,82}},
+{ 927927, 3, {103,99,91}},
+{ 927960, 3, {111,95,88}},
+{ 928008, 3, {12889,9,8}},
+{ 928044, 3, {661,39,36}},
+{ 928080, 3, {1289,30,24}},
+{ 928116, 3, {127,87,84}},
+{ 928125, 3, {125,99,75}},
+{ 928200, 3, {102,100,91}},
+{ 928224, 3, {293,66,48}},
+{ 928260, 3, {191,81,60}},
+{ 928296, 3, {12893,9,8}},
+{ 928305, 3, {421,49,45}},
+{ 928320, 3, {967,32,30}},
+{ 928350, 3, {2063,25,18}},
+{ 928356, 3, {541,44,39}},
+{ 928368, 3, {307,56,54}},
+{ 928395, 3, {117,115,69}},
+{ 928400, 3, {211,80,55}},
+{ 928464, 3, {116,92,87}},
+{ 928480, 3, {829,35,32}},
+{ 928512, 3, {104,96,93}},
+{ 928550, 3, {379,50,49}},
+{ 928584, 3, {1433,27,24}},
+{ 928620, 3, {134,90,77}},
+{ 928704, 3, {691,42,32}},
+{ 928720, 3, {104,95,94}},
+{ 928728, 3, {12899,9,8}},
+{ 928746, 3, {117,98,81}},
+{ 928800, 3, {108,100,86}},
+{ 928812, 3, {157,87,68}},
+{ 928928, 3, {116,91,88}},
+{ 928935, 3, {983,35,27}},
+{ 928980, 3, {397,52,45}},
+{ 929016, 3, {102,99,92}},
+{ 929040, 3, {112,105,79}},
+{ 929100, 3, {163,76,75}},
+{ 929124, 3, {1229,28,27}},
+{ 929280, 3, {110,96,88}},
+{ 929292, 3, {111,92,91}},
+{ 929304, 3, {12907,9,8}},
+{ 929313, 3, {149,81,77}},
+{ 929340, 3, {1721,27,20}},
+{ 929376, 3, {461,48,42}},
+{ 929390, 3, {119,110,71}},
+{ 929400, 3, {1549,25,24}},
+{ 929460, 3, {2213,21,20}},
+{ 929475, 3, {135,85,81}},
+{ 929520, 3, {1291,30,24}},
+{ 929556, 3, {151,81,76}},
+{ 929565, 3, {227,65,63}},
+{ 929592, 3, {12911,9,8}},
+{ 929610, 3, {313,55,54}},
+{ 929664, 3, {269,64,54}},
+{ 929712, 3, {2767,21,16}},
+{ 929760, 3, {149,80,78}},
+{ 929775, 3, {115,105,77}},
+{ 929824, 3, {593,49,32}},
+{ 929856, 3, {167,87,64}},
+{ 929880, 3, {108,105,82}},
+{ 929952, 3, {3229,18,16}},
+{ 930000, 3, {100,100,93}},
+{ 930024, 3, {12917,9,8}},
+{ 930048, 3, {173,84,64}},
+{ 930060, 3, {5167,15,12}},
+{ 930069, 3, {133,111,63}},
+{ 930160, 3, {151,80,77}},
+{ 930168, 3, {12919,9,8}},
+{ 930204, 3, {108,99,87}},
+{ 930240, 3, {102,96,95}},
+{ 930336, 3, {881,33,32}},
+{ 930384, 3, {117,112,71}},
+{ 930400, 3, {1163,32,25}},
+{ 930420, 3, {1723,27,20}},
+{ 930456, 3, {12923,9,8}},
+{ 930480, 3, {3877,16,15}},
+{ 930528, 3, {359,54,48}},
+{ 930600, 3, {100,99,94}},
+{ 930636, 3, {1231,28,27}},
+{ 930672, 3, {281,69,48}},
+{ 930699, 3, {119,99,79}},
+{ 930744, 3, {139,93,72}},
+{ 930750, 3, {125,102,73}},
+{ 930780, 3, {5171,15,12}},
+{ 930800, 3, {179,80,65}},
+{ 930810, 3, {115,114,71}},
+{ 930864, 3, {123,88,86}},
+{ 930888, 3, {1847,24,21}},
+{ 930900, 3, {107,100,87}},
+{ 930930, 3, {110,93,91}},
+{ 930960, 3, {431,48,45}},
+{ 931000, 3, {100,98,95}},
+{ 931050, 3, {2069,25,18}},
+{ 931095, 3, {99,99,95}},
+{ 931140, 3, {739,36,35}},
+{ 931200, 3, {100,97,96}},
+{ 931224, 3, {241,69,56}},
+{ 931320, 3, {199,72,65}},
+{ 931350, 3, {887,35,30}},
+{ 931392, 3, {99,98,96}},
+{ 931440, 3, {3881,16,15}},
+{ 931476, 3, {853,39,28}},
+{ 931500, 3, {115,90,90}},
+{ 931600, 3, {137,85,80}},
+{ 931608, 3, {227,72,57}},
+{ 931752, 3, {12941,9,8}},
+{ 931776, 3, {211,69,64}},
+{ 931800, 3, {1553,25,24}},
+{ 931920, 3, {353,55,48}},
+{ 931944, 3, {104,103,87}},
+{ 931950, 3, {109,95,90}},
+{ 931968, 3, {809,36,32}},
+{ 931980, 3, {317,60,49}},
+{ 932008, 3, {119,89,88}},
+{ 932064, 3, {114,112,73}},
+{ 932085, 3, {269,63,55}},
+{ 932100, 3, {239,65,60}},
+{ 932148, 3, {137,84,81}},
+{ 932160, 3, {971,32,30}},
+{ 932175, 3, {1381,27,25}},
+{ 932184, 3, {107,99,88}},
+{ 932220, 3, {5179,15,12}},
+{ 932280, 3, {457,51,40}},
+{ 932316, 3, {1009,33,28}},
+{ 932360, 3, {163,88,65}},
+{ 932400, 3, {111,100,84}},
+{ 932448, 3, {883,33,32}},
+{ 932470, 3, {173,77,70}},
+{ 932472, 3, {1439,27,24}},
+{ 932520, 3, {409,57,40}},
+{ 932568, 3, {122,91,84}},
+{ 932604, 3, {109,93,92}},
+{ 932616, 3, {12953,9,8}},
+{ 932688, 3, {127,102,72}},
+{ 932750, 3, {125,91,82}},
+{ 932820, 3, {2221,21,20}},
+{ 932832, 3, {123,96,79}},
+{ 932841, 3, {119,117,67}},
+{ 932880, 3, {115,104,78}},
+{ 932960, 3, {112,98,85}},
+{ 932976, 3, {114,93,88}},
+{ 933048, 3, {12959,9,8}},
+{ 933072, 3, {2777,21,16}},
+{ 933075, 3, {143,87,75}},
+{ 933120, 3, {108,96,90}},
+{ 933240, 3, {105,101,88}},
+{ 933300, 3, {122,90,85}},
+{ 933336, 3, {149,87,72}},
+{ 933360, 3, {3889,16,15}},
+{ 933408, 3, {463,48,42}},
+{ 933450, 3, {127,98,75}},
+{ 933504, 3, {104,102,88}},
+{ 933570, 3, {115,99,82}},
+{ 933600, 3, {389,50,48}},
+{ 933624, 3, {12967,9,8}},
+{ 933625, 3, {125,97,77}},
+{ 933660, 3, {108,95,91}},
+{ 933708, 3, {199,69,68}},
+{ 933744, 3, {397,49,48}},
+{ 933750, 3, {125,90,83}},
+{ 933768, 3, {131,88,81}},
+{ 933816, 3, {123,104,73}},
+{ 933840, 3, {1297,30,24}},
+{ 933900, 3, {283,60,55}},
+{ 933975, 3, {593,45,35}},
+{ 934020, 3, {5189,15,12}},
+{ 934032, 3, {122,88,87}},
+{ 934038, 3, {353,54,49}},
+{ 934056, 3, {12973,9,8}},
+{ 934065, 3, {111,99,85}},
+{ 934080, 3, {139,84,80}},
+{ 934092, 3, {108,93,93}},
+{ 934116, 3, {241,68,57}},
+{ 934128, 3, {499,48,39}},
+{ 934164, 3, {337,63,44}},
+{ 934200, 3, {173,75,72}},
+{ 934230, 3, {149,95,66}},
+{ 934272, 3, {811,36,32}},
+{ 934380, 3, {179,87,60}},
+{ 934400, 3, {128,100,73}},
+{ 934440, 3, {599,40,39}},
+{ 934464, 3, {157,93,64}},
+{ 934479, 3, {163,91,63}},
+{ 934488, 3, {12979,9,8}},
+{ 934500, 3, {105,100,89}},
+{ 934524, 3, {509,51,36}},
+{ 934528, 3, {149,98,64}},
+{ 934560, 3, {118,90,88}},
+{ 934725, 3, {121,103,75}},
+{ 934740, 3, {577,45,36}},
+{ 934752, 3, {107,96,91}},
+{ 934776, 3, {12983,9,8}},
+{ 934830, 3, {117,94,85}},
+{ 934857, 3, {133,99,71}},
+{ 934920, 3, {106,98,90}},
+{ 934956, 3, {787,36,33}},
+{ 934983, 3, {119,97,81}},
+{ 935025, 3, {137,91,75}},
+{ 935064, 3, {111,104,81}},
+{ 935088, 3, {121,92,84}},
+{ 935172, 3, {1237,28,27}},
+{ 935200, 3, {167,80,70}},
+{ 935256, 3, {293,57,56}},
+{ 935280, 3, {433,48,45}},
+{ 935340, 3, {131,85,84}},
+{ 935352, 3, {1181,33,24}},
+{ 935400, 3, {1559,25,24}},
+{ 935424, 3, {112,96,87}},
+{ 935460, 3, {5197,15,12}},
+{ 935480, 3, {257,65,56}},
+{ 935484, 3, {373,57,44}},
+{ 935550, 3, {105,99,90}},
+{ 935655, 3, {133,105,67}},
+{ 935680, 3, {128,86,85}},
+{ 935748, 3, {139,99,68}},
+{ 935760, 3, {557,42,40}},
+{ 935820, 3, {1733,27,20}},
+{ 935844, 3, {857,39,28}},
+{ 935880, 3, {709,40,33}},
+{ 936000, 3, {104,100,90}},
+{ 936012, 3, {1013,33,28}},
+{ 936045, 3, {155,99,61}},
+{ 936072, 3, {13001,9,8}},
+{ 936117, 3, {127,91,81}},
+{ 936144, 3, {197,72,66}},
+{ 936156, 3, {353,52,51}},
+{ 936180, 3, {743,36,35}},
+{ 936216, 3, {13003,9,8}},
+{ 936225, 3, {135,95,73}},
+{ 936243, 3, {193,77,63}},
+{ 936288, 3, {3251,18,16}},
+{ 936320, 3, {112,95,88}},
+{ 936390, 3, {105,98,91}},
+{ 936396, 3, {111,111,76}},
+{ 936450, 3, {2081,25,18}},
+{ 936468, 3, {117,92,87}},
+{ 936495, 3, {991,35,27}},
+{ 936504, 3, {13007,9,8}},
+{ 936576, 3, {271,64,54}},
+{ 936600, 3, {223,70,60}},
+{ 936624, 3, {114,104,79}},
+{ 936648, 3, {13009,9,8}},
+{ 936672, 3, {887,33,32}},
+{ 936684, 3, {118,98,81}},
+{ 936720, 3, {1301,30,24}},
+{ 936768, 3, {112,102,82}},
+{ 936782, 3, {121,98,79}},
+{ 936800, 3, {1171,32,25}},
+{ 936864, 3, {3253,18,16}},
+{ 936870, 3, {167,85,66}},
+{ 936900, 3, {347,54,50}},
+{ 936936, 3, {104,99,91}},
+{ 937020, 3, {105,97,92}},
+{ 937040, 3, {106,104,85}},
+{ 937104, 3, {2789,21,16}},
+{ 937200, 3, {120,110,71}},
+{ 937248, 3, {751,39,32}},
+{ 937251, 3, {133,87,81}},
+{ 937296, 3, {283,69,48}},
+{ 937300, 3, {103,100,91}},
+{ 937350, 3, {2083,25,18}},
+{ 937440, 3, {105,96,93}},
+{ 937536, 3, {257,64,57}},
+{ 937560, 3, {601,40,39}},
+{ 937572, 3, {129,92,79}},
+{ 937584, 3, {383,51,48}},
+{ 937600, 3, {293,64,50}},
+{ 937620, 3, {5209,15,12}},
+{ 937656, 3, {1447,27,24}},
+{ 937680, 3, {3907,16,15}},
+{ 937728, 3, {111,96,88}},
+{ 937750, 3, {125,121,62}},
+{ 937755, 3, {229,65,63}},
+{ 937776, 3, {2791,21,16}},
+{ 937800, 3, {521,45,40}},
+{ 937872, 3, {167,78,72}},
+{ 937920, 3, {977,32,30}},
+{ 937944, 3, {1861,24,21}},
+{ 937980, 3, {193,81,60}},
+{ 938000, 3, {125,112,67}},
+{ 938007, 3, {709,49,27}},
+{ 938016, 3, {3257,18,16}},
+{ 938025, 3, {379,55,45}},
+{ 938028, 3, {859,39,28}},
+{ 938124, 3, {103,99,92}},
+{ 938160, 3, {1303,30,24}},
+{ 938184, 3, {104,97,93}},
+{ 938196, 3, {119,108,73}},
+{ 938340, 3, {401,52,45}},
+{ 938350, 3, {383,50,49}},
+{ 938376, 3, {13033,9,8}},
+{ 938520, 3, {110,108,79}},
+{ 938556, 3, {116,93,87}},
+{ 938592, 3, {3259,18,16}},
+{ 938600, 3, {104,95,95}},
+{ 938640, 3, {3911,16,15}},
+{ 938652, 3, {547,44,39}},
+{ 938664, 3, {13037,9,8}},
+{ 938676, 3, {179,76,69}},
+{ 938700, 3, {149,84,75}},
+{ 938790, 3, {122,95,81}},
+{ 938840, 3, {479,49,40}},
+{ 938952, 3, {126,92,81}},
+{ 939015, 3, {271,63,55}},
+{ 939096, 3, {13043,9,8}},
+{ 939120, 3, {105,104,86}},
+{ 939150, 3, {2087,25,18}},
+{ 939168, 3, {1087,32,27}},
+{ 939228, 3, {123,92,83}},
+{ 939232, 3, {599,49,32}},
+{ 939300, 3, {101,100,93}},
+{ 939360, 3, {103,96,95}},
+{ 939400, 3, {122,100,77}},
+{ 939420, 3, {307,60,51}},
+{ 939456, 3, {233,64,63}},
+{ 939504, 3, {111,92,92}},
+{ 939528, 3, {13049,9,8}},
+{ 939540, 3, {2237,21,20}},
+{ 939575, 3, {175,91,59}},
+{ 939588, 3, {317,57,52}},
+{ 939600, 3, {108,100,87}},
+{ 939645, 3, {157,95,63}},
+{ 939680, 3, {839,35,32}},
+{ 939708, 3, {113,99,84}},
+{ 939780, 3, {227,69,60}},
+{ 939792, 3, {2797,21,16}},
+{ 939816, 3, {229,72,57}},
+{ 939840, 3, {110,96,89}},
+{ 939900, 3, {241,65,60}},
+{ 939930, 3, {102,97,95}},
+{ 939948, 3, {116,111,73}},
+{ 939960, 3, {373,56,45}},
+{ 940005, 3, {211,81,55}},
+{ 940032, 3, {102,96,96}},
+{ 940044, 3, {133,93,76}},
+{ 940050, 3, {2089,25,18}},
+{ 940080, 3, {3917,16,15}},
+{ 940100, 3, {119,100,79}},
+{ 940104, 3, {1187,33,24}},
+{ 940140, 3, {1741,27,20}},
+{ 940200, 3, {1567,25,24}},
+{ 940236, 3, {419,51,44}},
+{ 940240, 3, {115,112,73}},
+{ 940248, 3, {1451,27,24}},
+{ 940368, 3, {137,88,78}},
+{ 940380, 3, {2239,21,20}},
+{ 940401, 3, {161,99,59}},
+{ 940440, 3, {461,51,40}},
+{ 940464, 3, {311,56,54}},
+{ 940500, 3, {100,99,95}},
+{ 940536, 3, {13063,9,8}},
+{ 940560, 3, {3919,16,15}},
+{ 940576, 3, {119,104,76}},
+{ 940608, 3, {138,96,71}},
+{ 940653, 3, {147,81,79}},
+{ 940680, 3, {120,117,67}},
+{ 940800, 3, {100,98,96}},
+{ 940815, 3, {115,101,81}},
+{ 940860, 3, {5227,15,12}},
+{ 940896, 3, {99,99,96}},
+{ 940940, 3, {110,94,91}},
+{ 940950, 3, {123,90,85}},
+{ 940968, 3, {1867,24,21}},
+{ 940992, 3, {104,104,87}},
+{ 941040, 3, {1307,30,24}},
+{ 941070, 3, {127,95,78}},
+{ 941136, 3, {2801,21,16}},
+{ 941160, 3, {110,93,92}},
+{ 941184, 3, {114,96,86}},
+{ 941200, 3, {181,80,65}},
+{ 941220, 3, {108,105,83}},
+{ 941248, 3, {191,77,64}},
+{ 941280, 3, {111,106,80}},
+{ 941325, 3, {163,77,75}},
+{ 941400, 3, {523,45,40}},
+{ 941472, 3, {467,48,42}},
+{ 941490, 3, {317,55,54}},
+{ 941520, 3, {3923,16,15}},
+{ 941544, 3, {1453,27,24}},
+{ 941556, 3, {1019,33,28}},
+{ 941580, 3, {5231,15,12}},
+{ 941616, 3, {503,48,39}},
+{ 941625, 3, {125,93,81}},
+{ 941640, 3, {118,95,84}},
+{ 941688, 3, {116,99,82}},
+{ 941700, 3, {129,100,73}},
+{ 941724, 3, {111,101,84}},
+{ 941760, 3, {109,96,90}},
+{ 941787, 3, {151,81,77}},
+{ 941808, 3, {2803,21,16}},
+{ 941850, 3, {115,91,90}},
+{ 941940, 3, {5233,15,12}},
+{ 941952, 3, {223,66,64}},
+{ 941976, 3, {108,98,89}},
+{ 942000, 3, {157,80,75}},
+{ 942048, 3, {3271,18,16}},
+{ 942060, 3, {2243,21,20}},
+{ 942144, 3, {701,42,32}},
+{ 942165, 3, {997,35,27}},
+{ 942200, 3, {673,40,35}},
+{ 942216, 3, {129,88,83}},
+{ 942240, 3, {151,80,78}},
+{ 942276, 3, {149,93,68}},
+{ 942300, 3, {349,54,50}},
+{ 942368, 3, {601,49,32}},
+{ 942396, 3, {863,39,28}},
+{ 942400, 3, {124,95,80}},
+{ 942435, 3, {179,81,65}},
+{ 942480, 3, {105,102,88}},
+{ 942600, 3, {1571,25,24}},
+{ 942624, 3, {1091,32,27}},
+{ 942660, 3, {5237,15,12}},
+{ 942696, 3, {13093,9,8}},
+{ 942960, 3, {3929,16,15}},
+{ 942984, 3, {1871,24,21}},
+{ 943008, 3, {114,94,88}},
+{ 943128, 3, {13099,9,8}},
+{ 943152, 3, {401,49,48}},
+{ 943160, 3, {136,95,73}},
+{ 943164, 3, {123,108,71}},
+{ 943200, 3, {131,90,80}},
+{ 943236, 3, {197,76,63}},
+{ 943245, 3, {137,85,81}},
+{ 943250, 3, {125,98,77}},
+{ 943380, 3, {1747,27,20}},
+{ 943404, 3, {1021,33,28}},
+{ 943416, 3, {13103,9,8}},
+{ 943425, 3, {599,45,35}},
+{ 943440, 3, {3931,16,15}},
+{ 943488, 3, {108,96,91}},
+{ 943500, 3, {111,100,85}},
+{ 943644, 3, {263,69,52}},
+{ 943650, 3, {233,75,54}},
+{ 943680, 3, {983,32,30}},
+{ 943740, 3, {107,98,90}},
+{ 943776, 3, {113,96,87}},
+{ 943848, 3, {13109,9,8}},
+{ 943920, 3, {108,95,92}},
+{ 943992, 3, {1873,24,21}},
+{ 944055, 3, {111,105,81}},
+{ 944112, 3, {104,102,89}},
+{ 944125, 3, {125,91,83}},
+{ 944136, 3, {108,94,93}},
+{ 944190, 3, {269,65,54}},
+{ 944244, 3, {1249,28,27}},
+{ 944300, 3, {133,100,71}},
+{ 944320, 3, {227,65,64}},
+{ 944325, 3, {1399,27,25}},
+{ 944352, 3, {1093,32,27}},
+{ 944472, 3, {118,92,87}},
+{ 944475, 3, {257,75,49}},
+{ 944520, 3, {463,51,40}},
+{ 944550, 3, {2099,25,18}},
+{ 944622, 3, {119,98,81}},
+{ 944640, 3, {120,96,82}},
+{ 944680, 3, {113,95,88}},
+{ 944712, 3, {13121,9,8}},
+{ 944724, 3, {421,51,44}},
+{ 944736, 3, {757,39,32}},
+{ 944748, 3, {163,84,69}},
+{ 944775, 3, {117,95,85}},
+{ 944790, 3, {409,55,42}},
+{ 944800, 3, {1181,32,25}},
+{ 944820, 3, {181,87,60}},
+{ 944832, 3, {112,111,76}},
+{ 944840, 3, {115,104,79}},
+{ 944856, 3, {1193,33,24}},
+{ 944880, 3, {127,93,80}},
+{ 944892, 3, {673,39,36}},
+{ 944944, 3, {118,91,88}},
+{ 944955, 3, {115,99,83}},
+{ 945000, 3, {105,100,90}},
+{ 945120, 3, {179,80,66}},
+{ 945144, 3, {13127,9,8}},
+{ 945168, 3, {112,97,87}},
+{ 945200, 3, {139,85,80}},
+{ 945252, 3, {121,93,84}},
+{ 945280, 3, {211,70,64}},
+{ 945300, 3, {137,92,75}},
+{ 945336, 3, {331,56,51}},
+{ 945360, 3, {104,101,90}},
+{ 945420, 3, {2251,21,20}},
+{ 945432, 3, {1459,27,24}},
+{ 945516, 3, {143,87,76}},
+{ 945560, 3, {307,56,55}},
+{ 945600, 3, {197,75,64}},
+{ 945648, 3, {199,72,66}},
+{ 945720, 3, {120,111,71}},
+{ 945750, 3, {125,97,78}},
+{ 945756, 3, {139,84,81}},
+{ 945792, 3, {821,36,32}},
+{ 945840, 3, {563,42,40}},
+{ 945864, 3, {151,87,72}},
+{ 945875, 3, {161,125,47}},
+{ 945880, 3, {107,104,85}},
+{ 945945, 3, {105,99,91}},
+{ 946008, 3, {1877,24,21}},
+{ 946260, 3, {751,36,35}},
+{ 946288, 3, {119,112,71}},
+{ 946320, 3, {3943,16,15}},
+{ 946368, 3, {106,96,93}},
+{ 946400, 3, {104,100,91}},
+{ 946404, 3, {127,92,81}},
+{ 946485, 3, {123,95,81}},
+{ 946512, 3, {313,56,54}},
+{ 946560, 3, {116,96,85}},
+{ 946575, 3, {601,45,35}},
+{ 946584, 3, {13147,9,8}},
+{ 946608, 3, {111,104,82}},
+{ 946620, 3, {1753,27,20}},
+{ 946680, 3, {105,98,92}},
+{ 946770, 3, {151,95,66}},
+{ 946827, 3, {133,113,63}},
+{ 946836, 3, {797,36,33}},
+{ 946872, 3, {13151,9,8}},
+{ 946880, 3, {269,64,55}},
+{ 946890, 3, {167,81,70}},
+{ 946920, 3, {607,40,39}},
+{ 946960, 3, {112,95,89}},
+{ 946980, 3, {5261,15,12}},
+{ 947016, 3, {1879,24,21}},
+{ 947025, 3, {135,115,61}},
+{ 947052, 3, {111,108,79}},
+{ 947072, 3, {151,98,64}},
+{ 947184, 3, {2819,21,16}},
+{ 947200, 3, {128,100,74}},
+{ 947232, 3, {104,99,92}},
+{ 947280, 3, {3947,16,15}},
+{ 947310, 3, {347,65,42}},
+{ 947340, 3, {277,60,57}},
+{ 947375, 3, {143,125,53}},
+{ 947400, 3, {1579,25,24}},
+{ 947448, 3, {13159,9,8}},
+{ 947496, 3, {111,97,88}},
+{ 947520, 3, {105,96,94}},
+{ 947736, 3, {13163,9,8}},
+{ 947760, 3, {359,55,48}},
+{ 947800, 3, {677,40,35}},
+{ 947808, 3, {1097,32,27}},
+{ 947835, 3, {135,119,59}},
+{ 947856, 3, {104,98,93}},
+{ 947925, 3, {383,55,45}},
+{ 948024, 3, {114,99,84}},
+{ 948060, 3, {229,69,60}},
+{ 948090, 3, {143,85,78}},
+{ 948096, 3, {823,36,32}},
+{ 948192, 3, {112,102,83}},
+{ 948240, 3, {439,48,45}},
+{ 948300, 3, {109,100,87}},
+{ 948312, 3, {13171,9,8}},
+{ 948384, 3, {111,96,89}},
+{ 948420, 3, {479,45,44}},
+{ 948480, 3, {104,96,95}},
+{ 948600, 3, {102,100,93}},
+{ 948672, 3, {122,96,81}},
+{ 948675, 3, {139,91,75}},
+{ 948744, 3, {13177,9,8}},
+{ 948780, 3, {251,63,60}},
+{ 948888, 3, {191,72,69}},
+{ 948948, 3, {132,91,79}},
+{ 948996, 3, {108,101,87}},
+{ 949000, 3, {125,104,73}},
+{ 949032, 3, {269,63,56}},
+{ 949050, 3, {111,95,90}},
+{ 949080, 3, {719,40,33}},
+{ 949104, 3, {117,104,78}},
+{ 949130, 3, {149,91,70}},
+{ 949140, 3, {5273,15,12}},
+{ 949164, 3, {181,76,69}},
+{ 949176, 3, {13183,9,8}},
+{ 949221, 3, {133,117,61}},
+{ 949312, 3, {163,91,64}},
+{ 949344, 3, {116,93,88}},
+{ 949375, 3, {155,125,49}},
+{ 949392, 3, {347,57,48}},
+{ 949410, 3, {137,90,77}},
+{ 949440, 3, {115,96,86}},
+{ 949464, 3, {13187,9,8}},
+{ 949500, 3, {211,75,60}},
+{ 949600, 3, {1187,32,25}},
+{ 949608, 3, {109,99,88}},
+{ 949620, 3, {102,98,95}},
+{ 949680, 3, {1319,30,24}},
+{ 949716, 3, {111,93,92}},
+{ 949725, 3, {135,105,67}},
+{ 949728, 3, {761,39,32}},
+{ 949800, 3, {1583,25,24}},
+{ 949824, 3, {102,97,96}},
+{ 949860, 3, {1759,27,20}},
+{ 949872, 3, {257,66,56}},
+{ 949905, 3, {101,99,95}},
+{ 949914, 3, {359,54,49}},
+{ 949950, 3, {2111,25,18}},
+{ 949960, 3, {127,88,85}},
+{ 950040, 3, {105,104,87}},
+{ 950112, 3, {3299,18,16}},
+{ 950130, 3, {115,102,81}},
+{ 950160, 3, {111,107,80}},
+{ 950208, 3, {101,98,96}},
+{ 950220, 3, {5279,15,12}},
+{ 950355, 3, {431,49,45}},
+{ 950400, 3, {100,99,96}},
+{ 950460, 3, {124,105,73}},
+{ 950508, 3, {677,39,36}},
+{ 950532, 3, {379,57,44}},
+{ 950544, 3, {123,92,84}},
+{ 950580, 3, {5281,15,12}},
+{ 950600, 3, {100,98,97}},
+{ 950616, 3, {163,81,72}},
+{ 950625, 3, {125,117,65}},
+{ 950688, 3, {3301,18,16}},
+{ 950820, 3, {115,106,78}},
+{ 950850, 3, {2113,25,18}},
+{ 950859, 3, {129,91,81}},
+{ 950895, 3, {113,99,85}},
+{ 950940, 3, {587,45,36}},
+{ 950950, 3, {110,95,91}},
+{ 950976, 3, {127,96,78}},
+{ 951048, 3, {111,102,84}},
+{ 951075, 3, {1409,27,25}},
+{ 951104, 3, {193,77,64}},
+{ 951120, 3, {1321,30,24}},
+{ 951192, 3, {1201,33,24}},
+{ 951210, 3, {271,65,54}},
+{ 951237, 3, {719,49,27}},
+{ 951264, 3, {367,54,48}},
+{ 951300, 3, {151,84,75}},
+{ 951360, 3, {991,32,30}},
+{ 951456, 3, {106,102,88}},
+{ 951552, 3, {118,96,84}},
+{ 951588, 3, {108,99,89}},
+{ 951615, 3, {135,133,53}},
+{ 951624, 3, {13217,9,8}},
+{ 951660, 3, {311,60,51}},
+{ 951720, 3, {105,103,88}},
+{ 951750, 3, {125,94,81}},
+{ 951768, 3, {13219,9,8}},
+{ 951776, 3, {607,49,32}},
+{ 951804, 3, {1259,28,27}},
+{ 951888, 3, {2833,21,16}},
+{ 951900, 3, {167,76,75}},
+{ 951912, 3, {113,104,81}},
+{ 951993, 3, {161,81,73}},
+{ 952000, 3, {112,100,85}},
+{ 952056, 3, {1889,24,21}},
+{ 952068, 3, {359,52,51}},
+{ 952080, 3, {3967,16,15}},
+{ 952119, 3, {127,119,63}},
+{ 952128, 3, {114,96,87}},
+{ 952140, 3, {2267,21,20}},
+{ 952200, 3, {115,92,90}},
+{ 952224, 3, {109,96,91}},
+{ 952272, 3, {389,51,48}},
+{ 952350, 3, {907,35,30}},
+{ 952416, 3, {3307,18,16}},
+{ 952425, 3, {135,85,83}},
+{ 952476, 3, {119,92,87}},
+{ 952488, 3, {13229,9,8}},
+{ 952512, 3, {123,88,88}},
+{ 952536, 3, {129,104,71}},
+{ 952560, 3, {108,98,90}},
+{ 952640, 3, {229,65,64}},
+{ 952644, 3, {1031,33,28}},
+{ 952680, 3, {467,51,40}},
+{ 952704, 3, {827,36,32}},
+{ 952770, 3, {349,65,42}},
+{ 952800, 3, {397,50,48}},
+{ 952812, 3, {199,76,63}},
+{ 952824, 3, {116,111,74}},
+{ 952848, 3, {509,48,39}},
+{ 952875, 3, {121,105,75}},
+{ 952884, 3, {173,81,68}},
+{ 952896, 3, {709,42,32}},
+{ 952952, 3, {119,91,88}},
+{ 952965, 3, {181,81,65}},
+{ 952980, 3, {2269,21,20}},
+{ 952992, 3, {1103,32,27}},
+{ 953040, 3, {114,95,88}},
+{ 953050, 3, {389,50,49}},
+{ 953064, 3, {122,93,84}},
+{ 953088, 3, {128,102,73}},
+{ 953100, 3, {353,54,50}},
+{ 953120, 3, {115,112,74}},
+{ 953172, 3, {116,99,83}},
+{ 953208, 3, {1471,27,24}},
+{ 953232, 3, {2837,21,16}},
+{ 953268, 3, {113,111,76}},
+{ 953280, 3, {331,60,48}},
+{ 953304, 3, {157,88,69}},
+{ 953316, 3, {108,97,91}},
+{ 953352, 3, {13241,9,8}},
+{ 953400, 3, {227,70,60}},
+{ 953460, 3, {5297,15,12}},
+{ 953472, 3, {191,78,64}},
+{ 953505, 3, {1009,35,27}},
+{ 953520, 3, {137,87,80}},
+{ 953568, 3, {112,99,86}},
+{ 953680, 3, {131,91,80}},
+{ 953775, 3, {157,81,75}},
+{ 953820, 3, {757,36,35}},
+{ 953856, 3, {108,96,92}},
+{ 953920, 3, {271,64,55}},
+{ 953928, 3, {13249,9,8}},
+{ 953964, 3, {121,108,73}},
+{ 954030, 3, {118,105,77}},
+{ 954096, 3, {139,88,78}},
+{ 954135, 3, {233,65,63}},
+{ 954144, 3, {3313,18,16}},
+{ 954180, 3, {108,95,93}},
+{ 954261, 3, {119,99,81}},
+{ 954275, 3, {175,133,41}},
+{ 954400, 3, {1193,32,25}},
+{ 954450, 3, {105,101,90}},
+{ 954492, 3, {1033,33,28}},
+{ 954520, 3, {487,49,40}},
+{ 954525, 3, {143,89,75}},
+{ 954540, 3, {5303,15,12}},
+{ 954600, 3, {111,100,86}},
+{ 954648, 3, {13259,9,8}},
+{ 954660, 3, {2273,21,20}},
+{ 954720, 3, {104,102,90}},
+{ 954750, 3, {125,114,67}},
+{ 954765, 3, {433,49,45}},
+{ 954800, 3, {124,100,77}},
+{ 954864, 3, {349,57,48}},
+{ 954912, 3, {112,98,87}},
+{ 954924, 3, {151,93,68}},
+{ 954954, 3, {106,99,91}},
+{ 954960, 3, {173,80,69}},
+{ 955008, 3, {829,36,32}},
+{ 955080, 3, {379,56,45}},
+{ 955152, 3, {134,88,81}},
+{ 955200, 3, {199,75,64}},
+{ 955206, 3, {133,114,63}},
+{ 955224, 3, {13267,9,8}},
+{ 955240, 3, {167,88,65}},
+{ 955248, 3, {2843,21,16}},
+{ 955296, 3, {107,96,93}},
+{ 955305, 3, {117,115,71}},
+{ 955320, 3, {419,57,40}},
+{ 955332, 3, {223,68,63}},
+{ 955360, 3, {853,35,32}},
+{ 955416, 3, {121,94,84}},
+{ 955440, 3, {1327,30,24}},
+{ 955500, 3, {105,100,91}},
+{ 955548, 3, {127,99,76}},
+{ 955570, 3, {119,110,73}},
+{ 955584, 3, {112,108,79}},
+{ 955620, 3, {5309,15,12}},
+{ 955647, 3, {197,77,63}},
+{ 955680, 3, {181,80,66}},
+{ 955812, 3, {557,44,39}},
+{ 955872, 3, {3319,18,16}},
+{ 955890, 3, {117,95,86}},
+{ 955920, 3, {569,42,40}},
+{ 956025, 3, {607,45,35}},
+{ 956080, 3, {136,95,74}},
+{ 956088, 3, {271,63,56}},
+{ 956160, 3, {120,96,83}},
+{ 956200, 3, {683,40,35}},
+{ 956232, 3, {233,72,57}},
+{ 956250, 3, {125,90,85}},
+{ 956280, 3, {613,40,39}},
+{ 956340, 3, {105,99,92}},
+{ 956352, 3, {293,64,51}},
+{ 956480, 3, {122,98,80}},
+{ 956550, 3, {911,35,30}},
+{ 956556, 3, {521,51,36}},
+{ 956592, 3, {117,112,73}},
+{ 956670, 3, {223,66,65}},
+{ 956725, 3, {175,77,71}},
+{ 956760, 3, {134,85,84}},
+{ 956880, 3, {443,48,45}},
+{ 956952, 3, {13291,9,8}},
+{ 957000, 3, {110,100,87}},
+{ 957015, 3, {139,85,81}},
+{ 957024, 3, {3323,18,16}},
+{ 957030, 3, {115,114,73}},
+{ 957060, 3, {409,52,45}},
+{ 957096, 3, {211,72,63}},
+{ 957120, 3, {997,32,30}},
+{ 957264, 3, {111,98,88}},
+{ 957285, 3, {1013,35,27}},
+{ 957312, 3, {277,64,54}},
+{ 957320, 3, {263,65,56}},
+{ 957348, 3, {131,87,84}},
+{ 957360, 3, {3989,16,15}},
+{ 957384, 3, {13297,9,8}},
+{ 957411, 3, {167,91,63}},
+{ 957420, 3, {197,81,60}},
+{ 957440, 3, {128,88,85}},
+{ 957528, 3, {104,99,93}},
+{ 957600, 3, {105,96,95}},
+{ 957684, 3, {877,39,28}},
+{ 957780, 3, {313,60,51}},
+{ 957792, 3, {907,33,32}},
+{ 957880, 3, {311,56,55}},
+{ 957900, 3, {103,100,93}},
+{ 957936, 3, {2851,21,16}},
+{ 957996, 3, {117,92,89}},
+{ 958020, 3, {2281,21,20}},
+{ 958050, 3, {2129,25,18}},
+{ 958104, 3, {1901,24,21}},
+{ 958140, 3, {5323,15,12}},
+{ 958152, 3, {111,104,83}},
+{ 958176, 3, {1109,32,27}},
+{ 958200, 3, {1597,25,24}},
+{ 958230, 3, {117,91,90}},
+{ 958248, 3, {13309,9,8}},
+{ 958272, 3, {112,93,92}},
+{ 958320, 3, {110,99,88}},
+{ 958360, 3, {104,97,95}},
+{ 958375, 3, {187,125,41}},
+{ 958392, 3, {108,102,87}},
+{ 958500, 3, {125,108,71}},
+{ 958536, 3, {13313,9,8}},
+{ 958545, 3, {179,85,63}},
+{ 958608, 3, {317,56,54}},
+{ 958752, 3, {3329,18,16}},
+{ 958797, 3, {133,89,81}},
+{ 958815, 3, {149,99,65}},
+{ 958824, 3, {193,72,69}},
+{ 958848, 3, {227,66,64}},
+{ 958860, 3, {761,36,35}},
+{ 958932, 3, {683,39,36}},
+{ 958950, 3, {2131,25,18}},
+{ 959040, 3, {111,96,90}},
+{ 959088, 3, {106,104,87}},
+{ 959100, 3, {139,92,75}},
+{ 959112, 3, {173,77,72}},
+{ 959280, 3, {571,42,40}},
+{ 959310, 3, {102,99,95}},
+{ 959328, 3, {3331,18,16}},
+{ 959400, 3, {117,100,82}},
+{ 959424, 3, {263,64,57}},
+{ 959445, 3, {115,103,81}},
+{ 959544, 3, {13327,9,8}},
+{ 959580, 3, {1777,27,20}},
+{ 959616, 3, {102,98,96}},
+{ 959640, 3, {727,40,33}},
+{ 959688, 3, {1481,27,24}},
+{ 959712, 3, {769,39,32}},
+{ 959728, 3, {133,88,82}},
+{ 959760, 3, {120,93,86}},
+{ 959790, 3, {115,107,78}},
+{ 959805, 3, {277,63,55}},
+{ 959832, 3, {13331,9,8}},
+{ 959840, 3, {857,35,32}},
+{ 959868, 3, {293,63,52}},
+{ 959880, 3, {421,57,40}},
+{ 959904, 3, {101,99,96}},
+{ 959928, 3, {111,94,92}},
+{ 959940, 3, {5333,15,12}},
+{ 959952, 3, {2857,21,16}},
+{ 960000, 3, {100,100,96}},
+{ 960036, 3, {1039,33,28}},
+{ 960132, 3, {116,93,89}},
+{ 960228, 3, {523,51,36}},
+{ 960240, 3, {4001,16,15}},
+{ 960264, 3, {13337,9,8}},
+{ 960300, 3, {100,99,97}},
+{ 960336, 3, {114,104,81}},
+{ 960372, 3, {111,103,84}},
+{ 960400, 3, {100,98,98}},
+{ 960408, 3, {13339,9,8}},
+{ 960432, 3, {107,102,88}},
+{ 960525, 3, {1423,27,25}},
+{ 960540, 3, {2287,21,20}},
+{ 960564, 3, {383,57,44}},
+{ 960600, 3, {1601,25,24}},
+{ 960640, 3, {128,95,79}},
+{ 960660, 3, {593,45,36}},
+{ 960687, 3, {119,117,69}},
+{ 960696, 3, {1213,33,24}},
+{ 960720, 3, {4003,16,15}},
+{ 960800, 3, {1201,32,25}},
+{ 960840, 3, {157,85,72}},
+{ 960876, 3, {123,93,84}},
+{ 960960, 3, {105,104,88}},
+{ 960984, 3, {1483,27,24}},
+{ 961020, 3, {281,60,57}},
+{ 961065, 3, {113,105,81}},
+{ 961092, 3, {809,36,33}},
+{ 961128, 3, {1907,24,21}},
+{ 961184, 3, {613,49,32}},
+{ 961191, 3, {133,99,73}},
+{ 961200, 3, {108,100,89}},
+{ 961272, 3, {117,104,79}},
+{ 961296, 3, {2861,21,16}},
+{ 961308, 3, {129,92,81}},
+{ 961380, 3, {109,98,90}},
+{ 961520, 3, {112,101,85}},
+{ 961576, 3, {223,77,56}},
+{ 961625, 3, {157,125,49}},
+{ 961650, 3, {2137,25,18}},
+{ 961680, 3, {4007,16,15}},
+{ 961704, 3, {114,111,76}},
+{ 961785, 3, {145,99,67}},
+{ 961800, 3, {229,70,60}},
+{ 961821, 3, {727,49,27}},
+{ 961860, 3, {115,102,82}},
+{ 961870, 3, {151,91,70}},
+{ 961875, 3, {125,95,81}},
+{ 961884, 3, {347,63,44}},
+{ 961950, 3, {121,106,75}},
+{ 961968, 3, {409,49,48}},
+{ 962000, 3, {125,104,74}},
+{ 962016, 3, {911,33,32}},
+{ 962052, 3, {881,39,28}},
+{ 962064, 3, {131,102,72}},
+{ 962080, 3, {859,35,32}},
+{ 962115, 3, {119,105,77}},
+{ 962192, 3, {121,112,71}},
+{ 962220, 3, {116,105,79}},
+{ 962280, 3, {108,99,90}},
+{ 962304, 3, {179,84,64}},
+{ 962325, 3, {141,91,75}},
+{ 962360, 3, {491,49,40}},
+{ 962400, 3, {401,50,48}},
+{ 962424, 3, {13367,9,8}},
+{ 962460, 3, {5347,15,12}},
+{ 962472, 3, {337,56,51}},
+{ 962500, 3, {125,100,77}},
+{ 962520, 3, {617,40,39}},
+{ 962550, 3, {115,93,90}},
+{ 962640, 3, {191,72,70}},
+{ 962775, 3, {389,55,45}},
+{ 962784, 3, {3343,18,16}},
+{ 962820, 3, {1783,27,20}},
+{ 962850, 3, {131,98,75}},
+{ 962880, 3, {118,96,85}},
+{ 962955, 3, {1019,35,27}},
+{ 963060, 3, {2293,21,20}},
+{ 963072, 3, {114,96,88}},
+{ 963120, 3, {4013,16,15}},
+{ 963144, 3, {108,98,91}},
+{ 963180, 3, {5351,15,12}},
+{ 963225, 3, {1427,27,25}},
+{ 963264, 3, {173,87,64}},
+{ 963270, 3, {139,90,77}},
+{ 963300, 3, {130,95,78}},
+{ 963336, 3, {123,89,88}},
+{ 963424, 3, {119,92,88}},
+{ 963432, 3, {13381,9,8}},
+{ 963450, 3, {2141,25,18}},
+{ 963456, 3, {193,78,64}},
+{ 963468, 3, {811,36,33}},
+{ 963480, 3, {124,105,74}},
+{ 963560, 3, {109,104,85}},
+{ 963576, 3, {1487,27,24}},
+{ 963585, 3, {133,105,69}},
+{ 963600, 3, {120,110,73}},
+{ 963612, 3, {117,116,71}},
+{ 963648, 3, {239,64,63}},
+{ 963690, 3, {353,65,42}},
+{ 963732, 3, {149,84,77}},
+{ 963765, 3, {135,121,59}},
+{ 963840, 3, {251,64,60}},
+{ 963864, 3, {1217,33,24}},
+{ 963900, 3, {105,102,90}},
+{ 963936, 3, {3347,18,16}},
+{ 963963, 3, {107,99,91}},
+{ 964040, 3, {313,56,55}},
+{ 964080, 3, {104,103,90}},
+{ 964128, 3, {121,96,83}},
+{ 964152, 3, {1913,24,21}},
+{ 964200, 3, {1607,25,24}},
+{ 964224, 3, {108,96,93}},
+{ 964236, 3, {883,39,28}},
+{ 964260, 3, {487,45,44}},
+{ 964308, 3, {163,87,68}},
+{ 964320, 3, {112,105,82}},
+{ 964350, 3, {2143,25,18}},
+{ 964425, 3, {167,77,75}},
+{ 964440, 3, {108,95,94}},
+{ 964467, 3, {147,81,81}},
+{ 964560, 3, {4019,16,15}},
+{ 964575, 3, {1429,27,25}},
+{ 964584, 3, {13397,9,8}},
+{ 964600, 3, {106,100,91}},
+{ 964620, 3, {233,69,60}},
+{ 964656, 3, {112,99,87}},
+{ 964665, 3, {117,97,85}},
+{ 964704, 3, {773,39,32}},
+{ 964728, 3, {13399,9,8}},
+{ 964740, 3, {2297,21,20}},
+{ 964810, 3, {179,77,70}},
+{ 964845, 3, {1021,35,27}},
+{ 964872, 3, {1489,27,24}},
+{ 964950, 3, {919,35,30}},
+{ 964980, 3, {1787,27,20}},
+{ 965040, 3, {4021,16,15}},
+{ 965055, 3, {105,101,91}},
+{ 965088, 3, {1117,32,27}},
+{ 965160, 3, {383,56,45}},
+{ 965172, 3, {269,69,52}},
+{ 965200, 3, {127,95,80}},
+{ 965328, 3, {104,102,91}},
+{ 965349, 3, {199,77,63}},
+{ 965400, 3, {1609,25,24}},
+{ 965412, 3, {1277,28,27}},
+{ 965448, 3, {106,99,92}},
+{ 965475, 3, {613,45,35}},
+{ 965520, 3, {149,81,80}},
+{ 965580, 3, {121,95,84}},
+{ 965592, 3, {13411,9,8}},
+{ 965600, 3, {142,85,80}},
+{ 965601, 3, {131,91,81}},
+{ 965640, 3, {619,40,39}},
+{ 965664, 3, {479,48,42}},
+{ 965700, 3, {111,100,87}},
+{ 965712, 3, {118,93,88}},
+{ 965808, 3, {353,57,48}},
+{ 966000, 3, {105,100,92}},
+{ 966024, 3, {13417,9,8}},
+{ 966042, 3, {119,99,82}},
+{ 966060, 3, {1789,27,20}},
+{ 966108, 3, {563,44,39}},
+{ 966144, 3, {128,102,74}},
+{ 966150, 3, {113,95,90}},
+{ 966240, 3, {122,90,88}},
+{ 966312, 3, {13421,9,8}},
+{ 966336, 3, {719,42,32}},
+{ 966420, 3, {118,91,90}},
+{ 966480, 3, {4027,16,15}},
+{ 966492, 3, {157,81,76}},
+{ 966525, 3, {263,75,49}},
+{ 966528, 3, {839,36,32}},
+{ 966560, 3, {863,35,32}},
+{ 966600, 3, {179,75,72}},
+{ 966720, 3, {106,96,95}},
+{ 966816, 3, {373,54,48}},
+{ 966828, 3, {113,93,92}},
+{ 966875, 3, {125,91,85}},
+{ 966900, 3, {293,60,55}},
+{ 966924, 3, {1279,28,27}},
+{ 966960, 3, {120,102,79}},
+{ 967005, 3, {117,95,87}},
+{ 967032, 3, {111,99,88}},
+{ 967104, 3, {138,96,73}},
+{ 967113, 3, {129,119,63}},
+{ 967120, 3, {157,80,77}},
+{ 967140, 3, {199,81,60}},
+{ 967164, 3, {431,51,44}},
+{ 967200, 3, {104,100,93}},
+{ 967275, 3, {1433,27,25}},
+{ 967296, 3, {229,66,64}},
+{ 967344, 3, {2879,21,16}},
+{ 967392, 3, {3359,18,16}},
+{ 967400, 3, {691,40,35}},
+{ 967428, 3, {349,63,44}},
+{ 967440, 3, {139,87,80}},
+{ 967456, 3, {617,49,32}},
+{ 967464, 3, {1493,27,24}},
+{ 967500, 3, {125,90,86}},
+{ 967560, 3, {733,40,33}},
+{ 967680, 3, {105,96,96}},
+{ 967725, 3, {115,99,85}},
+{ 967750, 3, {125,98,79}},
+{ 967752, 3, {13441,9,8}},
+{ 967788, 3, {108,103,87}},
+{ 967800, 3, {1613,25,24}},
+{ 967824, 3, {104,99,94}},
+{ 967860, 3, {283,60,57}},
+{ 967890, 3, {419,55,42}},
+{ 967920, 3, {111,109,80}},
+{ 967932, 3, {167,84,69}},
+{ 967950, 3, {239,75,54}},
+{ 967968, 3, {3361,18,16}},
+{ 967995, 3, {439,49,45}},
+{ 968136, 3, {107,104,87}},
+{ 968175, 3, {331,65,45}},
+{ 968240, 3, {104,98,95}},
+{ 968256, 3, {123,96,82}},
+{ 968316, 3, {137,93,76}},
+{ 968320, 3, {128,89,85}},
+{ 968436, 3, {122,98,81}},
+{ 968472, 3, {13451,9,8}},
+{ 968484, 3, {121,92,87}},
+{ 968490, 3, {211,85,54}},
+{ 968580, 3, {5381,15,12}},
+{ 968604, 3, {887,39,28}},
+{ 968616, 3, {1223,33,24}},
+{ 968640, 3, {1009,32,30}},
+{ 968660, 3, {119,110,74}},
+{ 968688, 3, {112,93,93}},
+{ 968715, 3, {103,99,95}},
+{ 968760, 3, {117,92,90}},
+{ 968800, 3, {173,80,70}},
+{ 968832, 3, {116,96,87}},
+{ 968850, 3, {2153,25,18}},
+{ 968880, 3, {367,55,48}},
+{ 968904, 3, {13457,9,8}},
+{ 968940, 3, {769,36,35}},
+{ 968968, 3, {121,91,88}},
+{ 969000, 3, {102,100,95}},
+{ 969024, 3, {103,98,96}},
+{ 969255, 3, {181,85,63}},
+{ 969276, 3, {1049,33,28}},
+{ 969280, 3, {233,65,64}},
+{ 969300, 3, {359,54,50}},
+{ 969336, 3, {13463,9,8}},
+{ 969360, 3, {577,42,40}},
+{ 969408, 3, {102,99,96}},
+{ 969570, 3, {114,105,81}},
+{ 969600, 3, {101,100,96}},
+{ 969660, 3, {5387,15,12}},
+{ 969696, 3, {111,96,91}},
+{ 969732, 3, {123,108,73}},
+{ 969759, 3, {733,49,27}},
+{ 969760, 3, {116,95,88}},
+{ 969768, 3, {13469,9,8}},
+{ 969780, 3, {2309,21,20}},
+{ 969804, 3, {124,99,79}},
+{ 969840, 3, {449,48,45}},
+{ 969864, 3, {251,69,56}},
+{ 969948, 3, {1283,28,27}},
+{ 970020, 3, {317,60,51}},
+{ 970032, 3, {2887,21,16}},
+{ 970140, 3, {111,95,92}},
+{ 970164, 3, {691,39,36}},
+{ 970176, 3, {163,93,64}},
+{ 970200, 3, {100,99,98}},
+{ 970272, 3, {1123,32,27}},
+{ 970344, 3, {13477,9,8}},
+{ 970368, 3, {114,112,76}},
+{ 970380, 3, {599,45,36}},
+{ 970400, 3, {1213,32,25}},
+{ 970416, 3, {293,69,48}},
+{ 970464, 3, {919,33,32}},
+{ 970530, 3, {173,85,66}},
+{ 970560, 3, {337,60,48}},
+{ 970592, 3, {619,49,32}},
+{ 970620, 3, {2311,21,20}},
+{ 970710, 3, {131,95,78}},
+{ 970740, 3, {5393,15,12}},
+{ 970785, 3, {141,85,81}},
+{ 970788, 3, {127,91,84}},
+{ 970816, 3, {197,77,64}},
+{ 970830, 3, {126,115,67}},
+{ 970848, 3, {3371,18,16}},
+{ 970900, 3, {133,100,73}},
+{ 970920, 3, {116,93,90}},
+{ 970970, 3, {110,97,91}},
+{ 971025, 3, {121,107,75}},
+{ 971028, 3, {111,108,81}},
+{ 971040, 3, {112,102,85}},
+{ 971064, 3, {13487,9,8}},
+{ 971082, 3, {367,54,49}},
+{ 971100, 3, {117,100,83}},
+{ 971124, 3, {1051,33,28}},
+{ 971136, 3, {281,64,54}},
+{ 971208, 3, {123,94,84}},
+{ 971280, 3, {120,114,71}},
+{ 971325, 3, {1439,27,25}},
+{ 971352, 3, {1499,27,24}},
+{ 971400, 3, {1619,25,24}},
+{ 971424, 3, {3373,18,16}},
+{ 971425, 3, {175,91,61}},
+{ 971432, 3, {133,88,83}},
+{ 971460, 3, {257,63,60}},
+{ 971520, 3, {110,96,92}},
+{ 971550, 3, {127,90,85}},
+{ 971568, 3, {173,78,72}},
+{ 971652, 3, {433,51,44}},
+{ 971685, 3, {151,99,65}},
+{ 971700, 3, {123,100,79}},
+{ 971712, 3, {241,64,63}},
+{ 971760, 3, {4049,16,15}},
+{ 971775, 3, {617,45,35}},
+{ 971820, 3, {5399,15,12}},
+{ 971856, 3, {397,51,48}},
+{ 971880, 3, {105,104,89}},
+{ 971928, 3, {13499,9,8}},
+{ 972000, 3, {108,100,90}},
+{ 972048, 3, {263,66,56}},
+{ 972125, 3, {125,101,77}},
+{ 972160, 3, {124,98,80}},
+{ 972180, 3, {491,45,44}},
+{ 972192, 3, {114,104,82}},
+{ 972240, 3, {4051,16,15}},
+{ 972270, 3, {277,65,54}},
+{ 972279, 3, {161,99,61}},
+{ 972288, 3, {211,72,64}},
+{ 972312, 3, {127,88,87}},
+{ 972348, 3, {271,69,52}},
+{ 972356, 3, {121,98,82}},
+{ 972360, 3, {120,111,73}},
+{ 972400, 3, {110,104,85}},
+{ 972450, 3, {2161,25,18}},
+{ 972468, 3, {227,68,63}},
+{ 972480, 3, {1013,32,30}},
+{ 972510, 3, {421,55,42}},
+{ 972540, 3, {1801,27,20}},
+{ 972576, 3, {307,66,48}},
+{ 972600, 3, {1621,25,24}},
+{ 972608, 3, {167,91,64}},
+{ 972650, 3, {397,50,49}},
+{ 972720, 3, {193,72,70}},
+{ 972800, 3, {128,95,80}},
+{ 972840, 3, {121,120,67}},
+{ 972876, 3, {251,68,57}},
+{ 972900, 3, {115,94,90}},
+{ 972936, 3, {13513,9,8}},
+{ 972944, 3, {119,112,73}},
+{ 972972, 3, {108,99,91}},
+{ 973056, 3, {181,84,64}},
+{ 973104, 3, {114,97,88}},
+{ 973140, 3, {331,60,49}},
+{ 973152, 3, {109,96,93}},
+{ 973176, 3, {123,92,86}},
+{ 973224, 3, {1931,24,21}},
+{ 973260, 3, {5407,15,12}},
+{ 973280, 3, {112,110,79}},
+{ 973284, 3, {367,52,51}},
+{ 973336, 3, {191,91,56}},
+{ 973350, 3, {105,103,90}},
+{ 973368, 3, {1229,33,24}},
+{ 973392, 3, {2897,21,16}},
+{ 973440, 3, {104,104,90}},
+{ 973539, 3, {119,101,81}},
+{ 973560, 3, {122,95,84}},
+{ 973590, 3, {115,102,83}},
+{ 973600, 3, {1217,32,25}},
+{ 973620, 3, {601,45,36}},
+{ 973656, 3, {13523,9,8}},
+{ 973665, 3, {281,63,55}},
+{ 973680, 3, {4057,16,15}},
+{ 973700, 3, {107,100,91}},
+{ 973728, 3, {108,98,92}},
+{ 973800, 3, {541,45,40}},
+{ 973830, 3, {227,66,65}},
+{ 973845, 3, {153,95,67}},
+{ 973875, 3, {147,125,53}},
+{ 973896, 3, {119,93,88}},
+{ 973944, 3, {167,81,72}},
+{ 973980, 3, {773,36,35}},
+{ 974016, 3, {114,96,89}},
+{ 974064, 3, {223,78,56}},
+{ 974100, 3, {191,75,68}},
+{ 974160, 3, {110,108,82}},
+{ 974232, 3, {1933,24,21}},
+{ 974268, 3, {108,97,93}},
+{ 974295, 3, {1031,35,27}},
+{ 974340, 3, {5413,15,12}},
+{ 974400, 3, {112,100,87}},
+{ 974484, 3, {1289,28,27}},
+{ 974556, 3, {107,99,92}},
+{ 974592, 3, {108,96,94}},
+{ 974610, 3, {105,102,91}},
+{ 974640, 3, {131,93,80}},
+{ 974664, 3, {13537,9,8}},
+{ 974700, 3, {108,95,95}},
+{ 974925, 3, {619,45,35}},
+{ 974952, 3, {1231,33,24}},
+{ 975000, 3, {125,100,78}},
+{ 975040, 3, {277,64,55}},
+{ 975060, 3, {5417,15,12}},
+{ 975240, 3, {108,105,86}},
+{ 975312, 3, {521,48,39}},
+{ 975348, 3, {821,36,33}},
+{ 975375, 3, {135,85,85}},
+{ 975384, 3, {114,93,92}},
+{ 975408, 3, {2903,21,16}},
+{ 975420, 3, {5419,15,12}},
+{ 975450, 3, {929,35,30}},
+{ 975456, 3, {1129,32,27}},
+{ 975480, 3, {739,40,33}},
+{ 975520, 3, {134,91,80}},
+{ 975555, 3, {163,95,63}},
+{ 975590, 3, {181,77,70}},
+{ 975612, 3, {389,57,44}},
+{ 975660, 3, {105,101,92}},
+{ 975744, 3, {112,99,88}},
+{ 975800, 3, {119,100,82}},
+{ 975816, 3, {13553,9,8}},
+{ 975840, 3, {107,96,95}},
+{ 975936, 3, {104,102,92}},
+{ 975975, 3, {143,91,75}},
+{ 975996, 3, {1291,28,27}},
+{ 976032, 3, {3389,18,16}},
+{ 976050, 3, {241,75,54}},
+{ 976080, 3, {112,105,83}},
+{ 976185, 3, {1033,35,27}},
+{ 976200, 3, {1627,25,24}},
+{ 976212, 3, {131,92,81}},
+{ 976272, 3, {129,88,86}},
+{ 976320, 3, {113,96,90}},
+{ 976360, 3, {317,56,55}},
+{ 976374, 3, {123,98,81}},
+{ 976404, 3, {569,44,39}},
+{ 976488, 3, {122,92,87}},
+{ 976500, 3, {105,100,93}},
+{ 976536, 3, {137,88,81}},
+{ 976608, 3, {3391,18,16}},
+{ 976668, 3, {151,84,77}},
+{ 976725, 3, {1447,27,25}},
+{ 976800, 3, {111,100,88}},
+{ 976815, 3, {443,49,45}},
+{ 976824, 3, {13567,9,8}},
+{ 976872, 3, {104,101,93}},
+{ 976976, 3, {122,91,88}},
+{ 977088, 3, {727,42,32}},
+{ 977160, 3, {479,51,40}},
+{ 977184, 3, {108,104,87}},
+{ 977244, 3, {124,111,71}},
+{ 977256, 3, {277,63,56}},
+{ 977265, 3, {127,95,81}},
+{ 977400, 3, {181,75,72}},
+{ 977424, 3, {2909,21,16}},
+{ 977520, 3, {4073,16,15}},
+{ 977544, 3, {13577,9,8}},
+{ 977580, 3, {5431,15,12}},
+{ 977625, 3, {125,99,79}},
+{ 977670, 3, {142,85,81}},
+{ 977697, 3, {739,49,27}},
+{ 977704, 3, {119,104,79}},
+{ 977724, 3, {823,36,33}},
+{ 977730, 3, {115,109,78}},
+{ 977760, 3, {105,97,96}},
+{ 977823, 3, {119,99,83}},
+{ 977900, 3, {127,100,77}},
+{ 977940, 3, {1811,27,20}},
+{ 978000, 3, {163,80,75}},
+{ 978040, 3, {499,49,40}},
+{ 978048, 3, {283,64,54}},
+{ 978075, 3, {115,105,81}},
+{ 978096, 3, {123,112,71}},
+{ 978120, 3, {104,99,95}},
+{ 978180, 3, {137,85,84}},
+{ 978240, 3, {1019,32,30}},
+{ 978250, 3, {125,91,86}},
+{ 978285, 3, {121,105,77}},
+{ 978336, 3, {129,96,79}},
+{ 978384, 3, {109,102,88}},
+{ 978400, 3, {1223,32,25}},
+{ 978432, 3, {104,98,96}},
+{ 978480, 3, {151,81,80}},
+{ 978516, 3, {353,63,44}},
+{ 978552, 3, {13591,9,8}},
+{ 978576, 3, {116,111,76}},
+{ 978600, 3, {233,70,60}},
+{ 978660, 3, {5437,15,12}},
+{ 978690, 3, {102,101,95}},
+{ 978696, 3, {197,72,69}},
+{ 978705, 3, {239,65,63}},
+{ 978750, 3, {125,90,87}},
+{ 978775, 3, {175,119,47}},
+{ 978824, 3, {227,77,56}},
+{ 978880, 3, {112,95,92}},
+{ 978900, 3, {251,65,60}},
+{ 978912, 3, {103,99,96}},
+{ 978960, 3, {4079,16,15}},
+{ 978984, 3, {13597,9,8}},
+{ 979020, 3, {111,98,90}},
+{ 979056, 3, {523,48,39}},
+{ 979104, 3, {112,94,93}},
+{ 979110, 3, {115,99,86}},
+{ 979128, 3, {1511,27,24}},
+{ 979160, 3, {269,65,56}},
+{ 979200, 3, {102,100,96}},
+{ 979209, 3, {157,81,77}},
+{ 979272, 3, {134,87,84}},
+{ 979368, 3, {129,104,73}},
+{ 979380, 3, {5441,15,12}},
+{ 979425, 3, {1451,27,25}},
+{ 979440, 3, {106,105,88}},
+{ 979524, 3, {117,92,91}},
+{ 979680, 3, {157,80,78}},
+{ 979704, 3, {1237,33,24}},
+{ 979740, 3, {5443,15,12}},
+{ 979800, 3, {120,115,71}},
+{ 979836, 3, {571,44,39}},
+{ 979860, 3, {2333,21,20}},
+{ 979875, 3, {125,117,67}},
+{ 979880, 3, {131,88,85}},
+{ 979920, 3, {1361,30,24}},
+{ 979944, 3, {307,57,56}},
+{ 979965, 3, {135,119,61}},
+{ 980000, 3, {100,100,98}},
+{ 980064, 3, {123,96,83}},
+{ 980070, 3, {359,65,42}},
+{ 980100, 3, {100,99,99}},
+{ 980112, 3, {2917,21,16}},
+{ 980136, 3, {13613,9,8}},
+{ 980160, 3, {1021,32,30}},
+{ 980280, 3, {389,56,45}},
+{ 980343, 3, {133,91,81}},
+{ 980352, 3, {111,96,92}},
+{ 980364, 3, {1061,33,28}},
+{ 980460, 3, {419,52,45}},
+{ 980532, 3, {1297,28,27}},
+{ 980550, 3, {2179,25,18}},
+{ 980560, 3, {112,103,85}},
+{ 980568, 3, {13619,9,8}},
+{ 980595, 3, {283,63,55}},
+{ 980628, 3, {187,76,69}},
+{ 980672, 3, {199,77,64}},
+{ 980720, 3, {115,104,82}},
+{ 980760, 3, {743,40,33}},
+{ 980775, 3, {1453,27,25}},
+{ 980820, 3, {5449,15,12}},
+{ 980856, 3, {239,72,57}},
+{ 980875, 3, {133,125,59}},
+{ 980910, 3, {173,81,70}},
+{ 980928, 3, {131,96,78}},
+{ 980980, 3, {110,98,91}},
+{ 981024, 3, {929,33,32}},
+{ 981036, 3, {229,68,63}},
+{ 981084, 3, {331,57,52}},
+{ 981144, 3, {13627,9,8}},
+{ 981180, 3, {115,108,79}},
+{ 981200, 3, {223,80,55}},
+{ 981216, 3, {3407,18,16}},
+{ 981240, 3, {111,104,85}},
+{ 981288, 3, {118,99,84}},
+{ 981312, 3, {269,64,57}},
+{ 981400, 3, {701,40,35}},
+{ 981504, 3, {128,108,71}},
+{ 981576, 3, {13633,9,8}},
+{ 981600, 3, {409,50,48}},
+{ 981648, 3, {401,51,48}},
+{ 981708, 3, {116,93,91}},
+{ 981792, 3, {487,48,42}},
+{ 981840, 3, {4091,16,15}},
+{ 981855, 3, {1039,35,27}},
+{ 981920, 3, {136,95,76}},
+{ 981981, 3, {109,99,91}},
+{ 982072, 3, {133,104,71}},
+{ 982080, 3, {110,96,93}},
+{ 982107, 3, {131,119,63}},
+{ 982125, 3, {125,97,81}},
+{ 982128, 3, {112,111,79}},
+{ 982176, 3, {787,39,32}},
+{ 982200, 3, {1637,25,24}},
+{ 982212, 3, {1063,33,28}},
+{ 982215, 3, {117,115,73}},
+{ 982224, 3, {359,57,48}},
+{ 982240, 3, {877,35,32}},
+{ 982296, 3, {1949,24,21}},
+{ 982320, 3, {4093,16,15}},
+{ 982368, 3, {379,54,48}},
+{ 982380, 3, {2339,21,20}},
+{ 982400, 3, {307,64,50}},
+{ 982410, 3, {229,66,65}},
+{ 982450, 3, {401,50,49}},
+{ 982452, 3, {139,93,76}},
+{ 982464, 3, {112,102,86}},
+{ 982476, 3, {827,36,33}},
+{ 982560, 3, {115,96,89}},
+{ 982575, 3, {397,55,45}},
+{ 982656, 3, {853,36,32}},
+{ 982680, 3, {431,57,40}},
+{ 982728, 3, {13649,9,8}},
+{ 982800, 3, {105,104,90}},
+{ 982944, 3, {3413,18,16}},
+{ 982989, 3, {743,49,27}},
+{ 983016, 3, {111,108,82}},
+{ 983070, 3, {331,55,54}},
+{ 983100, 3, {113,100,87}},
+{ 983125, 3, {125,121,65}},
+{ 983136, 3, {114,98,88}},
+{ 983178, 3, {119,102,81}},
+{ 983200, 3, {1229,32,25}},
+{ 983220, 3, {2341,21,20}},
+{ 983250, 3, {115,95,90}},
+{ 983304, 3, {1951,24,21}},
+{ 983340, 3, {607,45,36}},
+{ 983400, 3, {149,88,75}},
+{ 983424, 3, {197,78,64}},
+{ 983448, 3, {157,87,72}},
+{ 983472, 3, {2927,21,16}},
+{ 983528, 3, {193,91,56}},
+{ 983556, 3, {1301,28,27}},
+{ 983664, 3, {108,99,92}},
+{ 983675, 3, {175,77,73}},
+{ 983760, 3, {4099,16,15}},
+{ 983808, 3, {122,96,84}},
+{ 983850, 3, {937,35,30}},
+{ 983940, 3, {115,93,92}},
+{ 984048, 3, {114,104,83}},
+{ 984060, 3, {126,110,71}},
+{ 984096, 3, {134,102,72}},
+{ 984144, 3, {112,101,87}},
+{ 984165, 3, {105,103,91}},
+{ 984168, 3, {13669,9,8}},
+{ 984192, 3, {233,66,64}},
+{ 984200, 3, {133,100,74}},
+{ 984204, 3, {701,39,36}},
+{ 984214, 3, {121,98,83}},
+{ 984240, 3, {1367,30,24}},
+{ 984300, 3, {193,75,68}},
+{ 984312, 3, {108,98,93}},
+{ 984360, 3, {631,40,39}},
+{ 984368, 3, {119,94,88}},
+{ 984390, 3, {157,95,66}},
+{ 984420, 3, {1823,27,20}},
+{ 984456, 3, {113,99,88}},
+{ 984492, 3, {123,92,87}},
+{ 984555, 3, {117,99,85}},
+{ 984600, 3, {547,45,40}},
+{ 984704, 3, {157,98,64}},
+{ 984720, 3, {373,55,48}},
+{ 984750, 3, {125,101,78}},
+{ 984768, 3, {223,69,64}},
+{ 984780, 3, {5471,15,12}},
+{ 984800, 3, {1231,32,25}},
+{ 984825, 3, {1459,27,25}},
+{ 984852, 3, {829,36,33}},
+{ 984888, 3, {13679,9,8}},
+{ 984900, 3, {134,98,75}},
+{ 984960, 3, {108,96,95}},
+{ 984984, 3, {123,91,88}},
+{ 985032, 3, {13681,9,8}},
+{ 985044, 3, {129,92,83}},
+{ 985068, 3, {1303,28,27}},
+{ 985116, 3, {439,51,44}},
+{ 985140, 3, {421,52,45}},
+{ 985152, 3, {733,42,32}},
+{ 985188, 3, {149,87,76}},
+{ 985248, 3, {311,66,48}},
+{ 985320, 3, {105,102,92}},
+{ 985464, 3, {13687,9,8}},
+{ 985488, 3, {419,49,48}},
+{ 985500, 3, {125,108,73}},
+{ 985536, 3, {118,96,87}},
+{ 985608, 3, {117,104,81}},
+{ 985644, 3, {131,99,76}},
+{ 985680, 3, {111,111,80}},
+{ 985725, 3, {337,65,45}},
+{ 985740, 3, {2347,21,20}},
+{ 985752, 3, {13691,9,8}},
+{ 985800, 3, {106,100,93}},
+{ 985860, 3, {5477,15,12}},
+{ 985880, 3, {503,49,40}},
+{ 985896, 3, {13693,9,8}},
+{ 985908, 3, {121,97,84}},
+{ 985932, 3, {179,81,68}},
+{ 986040, 3, {110,108,83}},
+{ 986100, 3, {173,76,75}},
+{ 986125, 3, {161,125,49}},
+{ 986160, 3, {587,42,40}},
+{ 986184, 3, {13697,9,8}},
+{ 986220, 3, {5479,15,12}},
+{ 986232, 3, {109,104,87}},
+{ 986272, 3, {119,112,74}},
+{ 986310, 3, {281,65,54}},
+{ 986370, 3, {122,105,77}},
+{ 986400, 3, {137,90,80}},
+{ 986440, 3, {271,65,56}},
+{ 986480, 3, {118,95,88}},
+{ 986544, 3, {104,102,93}},
+{ 986568, 3, {111,101,88}},
+{ 986580, 3, {108,105,87}},
+{ 986640, 3, {4111,16,15}},
+{ 986700, 3, {115,110,78}},
+{ 986720, 3, {881,35,32}},
+{ 986832, 3, {112,99,89}},
+{ 986850, 3, {129,90,85}},
+{ 986880, 3, {257,64,60}},
+{ 986895, 3, {241,65,63}},
+{ 986904, 3, {1523,27,24}},
+{ 986940, 3, {5483,15,12}},
+{ 986958, 3, {373,54,49}},
+{ 987000, 3, {105,100,94}},
+{ 987048, 3, {13709,9,8}},
+{ 987105, 3, {119,105,79}},
+{ 987120, 3, {457,48,45}},
+{ 987168, 3, {113,96,91}},
+{ 987192, 3, {13711,9,8}},
+{ 987240, 3, {433,57,40}},
+{ 987264, 3, {857,36,32}},
+{ 987350, 3, {155,91,70}},
+{ 987360, 3, {110,102,88}},
+{ 987390, 3, {115,106,81}},
+{ 987420, 3, {2351,21,20}},
+{ 987448, 3, {229,77,56}},
+{ 987480, 3, {211,72,65}},
+{ 987504, 3, {2939,21,16}},
+{ 987525, 3, {105,99,95}},
+{ 987552, 3, {127,96,81}},
+{ 987624, 3, {116,99,86}},
+{ 987700, 3, {119,100,83}},
+{ 987714, 3, {134,91,81}},
+{ 987756, 3, {1069,33,28}},
+{ 987840, 3, {105,98,96}},
+{ 987870, 3, {149,85,78}},
+{ 987900, 3, {111,100,89}},
+{ 987912, 3, {13721,9,8}},
+{ 987972, 3, {167,87,68}},
+{ 988000, 3, {104,100,95}},
+{ 988020, 3, {499,45,44}},
+{ 988050, 3, {941,35,30}},
+{ 988056, 3, {13723,9,8}},
+{ 988080, 3, {179,80,69}},
+{ 988092, 3, {1307,28,27}},
+{ 988128, 3, {141,96,73}},
+{ 988281, 3, {147,83,81}},
+{ 988344, 3, {111,106,84}},
+{ 988380, 3, {102,102,95}},
+{ 988416, 3, {104,99,96}},
+{ 988488, 3, {13729,9,8}},
+{ 988533, 3, {119,117,71}},
+{ 988560, 3, {1373,30,24}},
+{ 988575, 3, {269,75,49}},
+{ 988608, 3, {271,64,57}},
+{ 988632, 3, {199,72,69}},
+{ 988680, 3, {107,105,88}},
+{ 988704, 3, {3433,18,16}},
+{ 988722, 3, {133,118,63}},
+{ 988740, 3, {1831,27,20}},
+{ 988800, 3, {103,100,96}},
+{ 988960, 3, {883,35,32}},
+{ 988992, 3, {102,101,96}},
+{ 989064, 3, {241,72,57}},
+{ 989100, 3, {157,84,75}},
+{ 989120, 3, {281,64,55}},
+{ 989172, 3, {129,108,71}},
+{ 989175, 3, {121,109,75}},
+{ 989196, 3, {373,52,51}},
+{ 989208, 3, {1249,33,24}},
+{ 989235, 3, {117,95,89}},
+{ 989296, 3, {121,112,73}},
+{ 989408, 3, {631,49,32}},
+{ 989460, 3, {239,69,60}},
+{ 989472, 3, {937,33,32}},
+{ 989520, 3, {112,95,93}},
+{ 989560, 3, {173,88,65}},
+{ 989568, 3, {859,36,32}},
+{ 989600, 3, {1237,32,25}},
+{ 989625, 3, {125,91,87}},
+{ 989736, 3, {163,88,69}},
+{ 989760, 3, {1031,32,30}},
+{ 989800, 3, {101,100,98}},
+{ 989856, 3, {491,48,42}},
+{ 989940, 3, {2357,21,20}},
+{ 990000, 3, {100,100,99}},
+{ 990012, 3, {211,69,68}},
+{ 990045, 3, {449,49,45}},
+{ 990072, 3, {13751,9,8}},
+{ 990080, 3, {112,104,85}},
+{ 990132, 3, {577,44,39}},
+{ 990180, 3, {5501,15,12}},
+{ 990192, 3, {421,49,48}},
+{ 990225, 3, {163,81,75}},
+{ 990264, 3, {121,93,88}},
+{ 990288, 3, {117,92,92}},
+{ 990444, 3, {907,39,28}},
+{ 990480, 3, {4127,16,15}},
+{ 990495, 3, {115,99,87}},
+{ 990504, 3, {13757,9,8}},
+{ 990540, 3, {5503,15,12}},
+{ 990564, 3, {111,97,92}},
+{ 990648, 3, {13759,9,8}},
+{ 990720, 3, {120,96,86}},
+{ 990756, 3, {117,116,73}},
+{ 990780, 3, {337,60,49}},
+{ 990792, 3, {139,88,81}},
+{ 990900, 3, {367,54,50}},
+{ 990936, 3, {13763,9,8}},
+{ 990960, 3, {4129,16,15}},
+{ 990990, 3, {110,99,91}},
+{ 991008, 3, {111,96,93}},
+{ 991032, 3, {347,56,51}},
+{ 991116, 3, {133,92,81}},
+{ 991260, 3, {5507,15,12}},
+{ 991305, 3, {1049,35,27}},
+{ 991320, 3, {751,40,33}},
+{ 991350, 3, {2203,25,18}},
+{ 991368, 3, {281,63,56}},
+{ 991375, 3, {125,103,77}},
+{ 991452, 3, {116,111,77}},
+{ 991515, 3, {133,105,71}},
+{ 991536, 3, {227,78,56}},
+{ 991584, 3, {313,66,48}},
+{ 991620, 3, {787,36,35}},
+{ 991680, 3, {1033,32,30}},
+{ 991683, 3, {159,81,77}},
+{ 991800, 3, {116,95,90}},
+{ 991809, 3, {173,91,63}},
+{ 991872, 3, {112,108,82}},
+{ 991900, 3, {109,100,91}},
+{ 991920, 3, {4133,16,15}},
+{ 992088, 3, {1531,27,24}},
+{ 992124, 3, {127,93,84}},
+{ 992160, 3, {106,104,90}},
+{ 992208, 3, {2953,21,16}},
+{ 992232, 3, {13781,9,8}},
+{ 992250, 3, {105,105,90}},
+{ 992256, 3, {128,102,76}},
+{ 992376, 3, {179,77,72}},
+{ 992460, 3, {139,85,84}},
+{ 992475, 3, {401,55,45}},
+{ 992496, 3, {116,93,92}},
+{ 992600, 3, {709,40,35}},
+{ 992628, 3, {108,101,91}},
+{ 992640, 3, {110,96,94}},
+{ 992655, 3, {129,95,81}},
+{ 992680, 3, {115,104,83}},
+{ 992712, 3, {311,57,56}},
+{ 992736, 3, {383,54,48}},
+{ 992772, 3, {109,99,92}},
+{ 992784, 3, {111,104,86}},
+{ 992808, 3, {13789,9,8}},
+{ 992817, 3, {119,103,81}},
+{ 992868, 3, {157,93,68}},
+{ 992875, 3, {169,125,47}},
+{ 992880, 3, {197,72,70}},
+{ 992925, 3, {1471,27,25}},
+{ 992940, 3, {134,95,78}},
+{ 992970, 3, {118,99,85}},
+{ 992992, 3, {124,91,88}},
+{ 993048, 3, {257,69,56}},
+{ 993060, 3, {613,45,36}},
+{ 993150, 3, {2207,25,18}},
+{ 993168, 3, {114,99,88}},
+{ 993195, 3, {1051,35,27}},
+{ 993200, 3, {191,80,65}},
+{ 993216, 3, {739,42,32}},
+{ 993240, 3, {120,93,89}},
+{ 993276, 3, {541,51,36}},
+{ 993312, 3, {3449,18,16}},
+{ 993330, 3, {283,65,54}},
+{ 993360, 3, {4139,16,15}},
+{ 993408, 3, {199,78,64}},
+{ 993420, 3, {5519,15,12}},
+{ 993440, 3, {887,35,32}},
+{ 993465, 3, {223,81,55}},
+{ 993480, 3, {487,51,40}},
+{ 993528, 3, {13799,9,8}},
+{ 993552, 3, {2957,21,16}},
+{ 993573, 3, {751,49,27}},
+{ 993600, 3, {108,100,92}},
+{ 993696, 3, {941,33,32}},
+{ 993720, 3, {105,104,91}},
+{ 993780, 3, {5521,15,12}},
+{ 993825, 3, {631,45,35}},
+{ 993876, 3, {277,69,52}},
+{ 993888, 3, {112,102,87}},
+{ 993984, 3, {167,93,64}},
+{ 994000, 3, {125,112,71}},
+{ 994032, 3, {118,104,81}},
+{ 994080, 3, {109,96,95}},
+{ 994092, 3, {443,51,44}},
+{ 994104, 3, {13807,9,8}},
+{ 994140, 3, {263,63,60}},
+{ 994176, 3, {863,36,32}},
+{ 994200, 3, {1657,25,24}},
+{ 994224, 3, {269,66,56}},
+{ 994240, 3, {239,65,64}},
+{ 994320, 3, {1381,30,24}},
+{ 994350, 3, {947,35,30}},
+{ 994356, 3, {108,99,93}},
+{ 994392, 3, {1973,24,21}},
+{ 994455, 3, {123,105,77}},
+{ 994464, 3, {1151,32,27}},
+{ 994500, 3, {117,100,85}},
+{ 994560, 3, {112,111,80}},
+{ 994656, 3, {797,39,32}},
+{ 994812, 3, {911,39,28}},
+{ 994840, 3, {119,95,88}},
+{ 994860, 3, {5527,15,12}},
+{ 994896, 3, {108,98,94}},
+{ 994980, 3, {105,103,92}},
+{ 995004, 3, {111,108,83}},
+{ 995085, 3, {117,105,81}},
+{ 995100, 3, {107,100,93}},
+{ 995148, 3, {359,63,44}},
+{ 995200, 3, {311,64,50}},
+{ 995220, 3, {108,97,95}},
+{ 995225, 3, {175,121,47}},
+{ 995280, 3, {110,104,87}},
+{ 995328, 3, {108,96,96}},
+{ 995400, 3, {120,105,79}},
+{ 995436, 3, {709,39,36}},
+{ 995448, 3, {118,111,76}},
+{ 995520, 3, {122,96,85}},
+{ 995568, 3, {2963,21,16}},
+{ 995580, 3, {5531,15,12}},
+{ 995600, 3, {131,95,80}},
+{ 995610, 3, {431,55,42}},
+{ 995616, 3, {3457,18,16}},
+{ 995625, 3, {135,125,59}},
+{ 995670, 3, {115,111,78}},
+{ 995676, 3, {397,57,44}},
+{ 995680, 3, {127,98,80}},
+{ 995688, 3, {13829,9,8}},
+{ 995760, 3, {461,48,45}},
+{ 995808, 3, {123,92,88}},
+{ 995820, 3, {2371,21,20}},
+{ 995832, 3, {13831,9,8}},
+{ 995850, 3, {2213,25,18}},
+{ 995904, 3, {114,96,91}},
+{ 995925, 3, {271,75,49}},
+{ 995940, 3, {503,45,44}},
+{ 995976, 3, {108,106,87}},
+{ 996072, 3, {121,98,84}},
+{ 996132, 3, {257,68,57}},
+{ 996160, 3, {283,64,55}},
+{ 996192, 3, {1153,32,27}},
+{ 996216, 3, {104,103,93}},
+{ 996240, 3, {593,42,40}},
+{ 996336, 3, {111,102,88}},
+{ 996435, 3, {135,121,61}},
+{ 996552, 3, {13841,9,8}},
+{ 996600, 3, {151,88,75}},
+{ 996625, 3, {125,119,67}},
+{ 996660, 3, {113,98,90}},
+{ 996672, 3, {179,87,64}},
+{ 996705, 3, {115,107,81}},
+{ 996720, 3, {4153,16,15}},
+{ 996732, 3, {839,36,33}},
+{ 996744, 3, {349,56,51}},
+{ 996768, 3, {3461,18,16}},
+{ 996840, 3, {120,117,71}},
+{ 996930, 3, {106,99,95}},
+{ 996948, 3, {181,81,68}},
+{ 996960, 3, {134,93,80}},
+{ 996996, 3, {132,91,83}},
+{ 997020, 3, {191,87,60}},
+{ 997050, 3, {115,102,85}},
+{ 997101, 3, {133,119,63}},
+{ 997120, 3, {128,95,82}},
+{ 997128, 3, {1259,33,24}},
+{ 997150, 3, {175,77,74}},
+{ 997152, 3, {104,102,94}},
+{ 997164, 3, {1319,28,27}},
+{ 997248, 3, {106,98,96}},
+{ 997344, 3, {3463,18,16}},
+{ 997360, 3, {137,91,80}},
+{ 997380, 3, {1847,27,20}},
+{ 997416, 3, {1979,24,21}},
+{ 997425, 3, {143,93,75}},
+{ 997440, 3, {1039,32,30}},
+{ 997500, 3, {105,100,95}},
+{ 997560, 3, {163,85,72}},
+{ 997584, 3, {2969,21,16}},
+{ 997640, 3, {509,49,40}},
+{ 997668, 3, {111,107,84}},
+{ 997680, 3, {4157,16,15}},
+{ 997704, 3, {149,93,72}},
+{ 997740, 3, {241,69,60}},
+{ 997776, 3, {117,104,82}},
+{ 997800, 3, {1663,25,24}},
+{ 997848, 3, {13859,9,8}},
+{ 997880, 3, {104,101,95}},
+{ 997920, 3, {105,99,96}},
+{ 998070, 3, {103,102,95}},
+{ 998160, 3, {4159,16,15}},
+{ 998172, 3, {233,68,63}},
+{ 998244, 3, {117,108,79}},
+{ 998250, 3, {121,110,75}},
+{ 998256, 3, {2971,21,16}},
+{ 998325, 3, {135,87,85}},
+{ 998340, 3, {2377,21,20}},
+{ 998375, 3, {163,125,49}},
+{ 998400, 3, {104,100,96}},
+{ 998412, 3, {151,87,76}},
+{ 998424, 3, {283,63,56}},
+{ 998448, 3, {122,93,88}},
+{ 998496, 3, {3467,18,16}},
+{ 998568, 3, {134,92,81}},
+{ 998592, 3, {743,42,32}},
+{ 998640, 3, {120,114,73}},
+{ 998676, 3, {1321,28,27}},
+{ 998712, 3, {104,99,97}},
+{ 998760, 3, {116,105,82}},
+{ 998784, 3, {102,102,96}},
+{ 998800, 3, {227,80,55}},
+{ 998856, 3, {13873,9,8}},
+{ 998868, 3, {337,57,52}},
+{ 998920, 3, {113,104,85}},
+{ 998976, 3, {121,96,86}},
+{ 999000, 3, {111,100,90}},
+{ 999040, 3, {223,70,64}},
+{ 999072, 3, {3469,18,16}},
+{ 999075, 3, {173,77,75}},
+{ 999096, 3, {313,57,56}},
+{ 999108, 3, {116,99,87}},
+{ 999120, 3, {181,80,69}},
+{ 999144, 3, {13877,9,8}},
+{ 999180, 3, {122,91,90}},
+{ 999200, 3, {1249,32,25}},
+{ 999240, 3, {757,40,33}},
+{ 999288, 3, {13879,9,8}},
+{ 999360, 3, {347,60,48}},
+{ 999450, 3, {2221,25,18}},
+{ 999495, 3, {167,95,63}},
+{ 999540, 3, {617,45,36}},
+{ 999570, 3, {233,66,65}},
+{ 999576, 3, {13883,9,8}},
+{ 999600, 3, {102,100,98}},
+{ 999675, 3, {1481,27,25}},
+{ 999680, 3, {128,110,71}},
+{ 999804, 3, {169,87,68}},
+{ 999810, 3, {126,115,69}},
+{ 999864, 3, {1543,27,24}},
+{ 999900, 3, {101,100,99}},
+{ 999936, 3, {112,96,93}},
+{ 999960, 3, {641,40,39}},
+{ 999999, 3, {111,99,91}},
+{ 108, 4, {4,3,3,3}},
+{ 216, 4, {6,4,3,3}},
+{ 432, 4, {6,6,4,3}},
+{ 1800, 4, {9,8,5,5}},
+{ 2592, 4, {9,8,6,6}},
+{ 3024, 4, {9,8,7,6}},
+{ 3456, 4, {9,8,8,6}},
+{ 3528, 4, {9,8,7,7}},
+{ 3888, 4, {9,9,8,6}},
+{ 4032, 4, {9,8,8,7}},
+{ 4320, 4, {10,9,8,6}},
+{ 4536, 4, {9,9,8,7}},
+{ 4608, 4, {9,8,8,8}},
+{ 4752, 4, {11,9,8,6}},
+{ 5040, 4, {10,9,8,7}},
+{ 5184, 4, {9,9,8,8}},
+{ 5544, 4, {11,9,8,7}},
+{ 5616, 4, {13,9,8,6}},
+{ 5760, 4, {10,9,8,8}},
+{ 5832, 4, {9,9,9,8}},
+{ 6048, 4, {12,9,8,7}},
+{ 6336, 4, {11,9,8,8}},
+{ 6480, 4, {10,9,9,8}},
+{ 6552, 4, {13,9,8,7}},
+{ 6912, 4, {12,9,8,8}},
+{ 7128, 4, {11,9,9,8}},
+{ 7200, 4, {10,10,9,8}},
+{ 7344, 4, {17,9,8,6}},
+{ 7488, 4, {13,9,8,8}},
+{ 7776, 4, {12,9,9,8}},
+{ 7920, 4, {11,10,9,8}},
+{ 8208, 4, {19,9,8,6}},
+{ 8424, 4, {13,9,9,8}},
+{ 8568, 4, {17,9,8,7}},
+{ 8640, 4, {12,10,9,8}},
+{ 8712, 4, {11,11,9,8}},
+{ 9360, 4, {13,10,9,8}},
+{ 9504, 4, {12,11,9,8}},
+{ 9576, 4, {19,9,8,7}},
+{ 9792, 4, {17,9,8,8}},
+{ 9936, 4, {23,9,8,6}},
+{ 10296, 4, {13,11,9,8}},
+{ 10368, 4, {12,12,9,8}},
+{ 10944, 4, {19,9,8,8}},
+{ 11016, 4, {17,9,9,8}},
+{ 11232, 4, {13,12,9,8}},
+{ 11592, 4, {23,9,8,7}},
+{ 12168, 4, {13,13,9,8}},
+{ 12240, 4, {17,10,9,8}},
+{ 12312, 4, {19,9,9,8}},
+{ 12528, 4, {29,9,8,6}},
+{ 13104, 4, {14,13,9,8}},
+{ 13248, 4, {23,9,8,8}},
+{ 13392, 4, {31,9,8,6}},
+{ 13464, 4, {17,11,9,8}},
+{ 13680, 4, {19,10,9,8}},
+{ 14112, 4, {14,14,9,8}},
+{ 14580, 4, {15,12,9,9}},
+{ 14616, 4, {29,9,8,7}},
+{ 14688, 4, {17,12,9,8}},
+{ 14904, 4, {23,9,9,8}},
+{ 15048, 4, {19,11,9,8}},
+{ 15624, 4, {31,9,8,7}},
+{ 15912, 4, {17,13,9,8}},
+{ 15984, 4, {37,9,8,6}},
+{ 16200, 4, {15,12,10,9}},
+{ 16416, 4, {19,12,9,8}},
+{ 16560, 4, {23,10,9,8}},
+{ 16704, 4, {29,9,8,8}},
+{ 17136, 4, {17,14,9,8}},
+{ 17712, 4, {41,9,8,6}},
+{ 17784, 4, {19,13,9,8}},
+{ 17820, 4, {15,12,11,9}},
+{ 17856, 4, {31,9,8,8}},
+{ 18000, 4, {15,12,10,10}},
+{ 18216, 4, {23,11,9,8}},
+{ 18576, 4, {43,9,8,6}},
+{ 18648, 4, {37,9,8,7}},
+{ 18792, 4, {29,9,9,8}},
+{ 19152, 4, {19,14,9,8}},
+{ 19440, 4, {15,12,12,9}},
+{ 19800, 4, {15,12,11,10}},
+{ 19872, 4, {23,12,9,8}},
+{ 20088, 4, {31,9,9,8}},
+{ 20304, 4, {47,9,8,6}},
+{ 20664, 4, {41,9,8,7}},
+{ 20808, 4, {17,17,9,8}},
+{ 20880, 4, {29,10,9,8}},
+{ 21060, 4, {15,13,12,9}},
+{ 21312, 4, {37,9,8,8}},
+{ 21528, 4, {23,13,9,8}},
+{ 21600, 4, {15,12,12,10}},
+{ 21672, 4, {43,9,8,7}},
+{ 21780, 4, {15,12,11,11}},
+{ 22320, 4, {31,10,9,8}},
+{ 22680, 4, {15,14,12,9}},
+{ 22896, 4, {53,9,8,6}},
+{ 22968, 4, {29,11,9,8}},
+{ 23184, 4, {23,14,9,8}},
+{ 23256, 4, {19,17,9,8}},
+{ 23400, 4, {15,13,12,10}},
+{ 23616, 4, {41,9,8,8}},
+{ 23688, 4, {47,9,8,7}},
+{ 23760, 4, {15,12,12,11}},
+{ 23976, 4, {37,9,9,8}},
+{ 24000, 4, {16,15,10,10}},
+{ 24300, 4, {15,15,12,9}},
+{ 24552, 4, {31,11,9,8}},
+{ 24768, 4, {43,9,8,8}},
+{ 25056, 4, {29,12,9,8}},
+{ 25200, 4, {15,14,12,10}},
+{ 25488, 4, {59,9,8,6}},
+{ 25740, 4, {15,13,12,11}},
+{ 25920, 4, {15,12,12,12}},
+{ 25992, 4, {19,19,9,8}},
+{ 26352, 4, {61,9,8,6}},
+{ 26400, 4, {16,15,11,10}},
+{ 26568, 4, {41,9,9,8}},
+{ 26640, 4, {37,10,9,8}},
+{ 26712, 4, {53,9,8,7}},
+{ 26784, 4, {31,12,9,8}},
+{ 27000, 4, {15,15,12,10}},
+{ 27072, 4, {47,9,8,8}},
+{ 27144, 4, {29,13,9,8}},
+{ 27540, 4, {17,15,12,9}},
+{ 27720, 4, {15,14,12,11}},
+{ 27864, 4, {43,9,9,8}},
+{ 28080, 4, {15,13,12,12}},
+{ 28152, 4, {23,17,9,8}},
+{ 28800, 4, {16,15,12,10}},
+{ 28944, 4, {67,9,8,6}},
+{ 29016, 4, {31,13,9,8}},
+{ 29040, 4, {16,15,11,11}},
+{ 29160, 4, {18,15,12,9}},
+{ 29232, 4, {29,14,9,8}},
+{ 29304, 4, {37,11,9,8}},
+{ 29520, 4, {41,10,9,8}},
+{ 29700, 4, {15,15,12,11}},
+{ 29736, 4, {59,9,8,7}},
+{ 30240, 4, {15,14,12,12}},
+{ 30420, 4, {15,13,13,12}},
+{ 30456, 4, {47,9,9,8}},
+{ 30528, 4, {53,9,8,8}},
+{ 30600, 4, {17,15,12,10}},
+{ 30672, 4, {71,9,8,6}},
+{ 30744, 4, {61,9,8,7}},
+{ 30780, 4, {19,15,12,9}},
+{ 30960, 4, {43,10,9,8}},
+{ 31200, 4, {16,15,13,10}},
+{ 31248, 4, {31,14,9,8}},
+{ 31464, 4, {23,19,9,8}},
+{ 31536, 4, {73,9,8,6}},
+{ 31680, 4, {16,15,12,11}},
+{ 31968, 4, {37,12,9,8}},
+{ 32400, 4, {15,15,12,12}},
+{ 32472, 4, {41,11,9,8}},
+{ 32760, 4, {15,14,13,12}},
+{ 33600, 4, {16,15,14,10}},
+{ 33660, 4, {17,15,12,11}},
+{ 33768, 4, {67,9,8,7}},
+{ 33840, 4, {47,10,9,8}},
+{ 33984, 4, {59,9,8,8}},
+{ 34056, 4, {43,11,9,8}},
+{ 34128, 4, {79,9,8,6}},
+{ 34200, 4, {19,15,12,10}},
+{ 34320, 4, {16,15,13,11}},
+{ 34344, 4, {53,9,9,8}},
+{ 34560, 4, {16,15,12,12}},
+{ 34632, 4, {37,13,9,8}},
+{ 34848, 4, {18,16,11,11}},
+{ 35100, 4, {15,15,13,12}},
+{ 35136, 4, {61,9,8,8}},
+{ 35280, 4, {15,14,14,12}},
+{ 35424, 4, {41,12,9,8}},
+{ 35496, 4, {29,17,9,8}},
+{ 35640, 4, {18,15,12,11}},
+{ 35784, 4, {71,9,8,7}},
+{ 35856, 4, {83,9,8,6}},
+{ 36000, 4, {16,15,15,10}},
+{ 36720, 4, {17,15,12,12}},
+{ 36792, 4, {73,9,8,7}},
+{ 36960, 4, {16,15,14,11}},
+{ 37152, 4, {43,12,9,8}},
+{ 37224, 4, {47,11,9,8}},
+{ 37260, 4, {23,15,12,9}},
+{ 37296, 4, {37,14,9,8}},
+{ 37440, 4, {16,15,13,12}},
+{ 37620, 4, {19,15,12,11}},
+{ 37800, 4, {15,15,14,12}},
+{ 37944, 4, {31,17,9,8}},
+{ 38016, 4, {18,16,12,11}},
+{ 38088, 4, {23,23,9,8}},
+{ 38160, 4, {53,10,9,8}},
+{ 38232, 4, {59,9,9,8}},
+{ 38376, 4, {41,13,9,8}},
+{ 38400, 4, {16,16,15,10}},
+{ 38448, 4, {89,9,8,6}},
+{ 38592, 4, {67,9,8,8}},
+{ 38880, 4, {18,15,12,12}},
+{ 39528, 4, {61,9,9,8}},
+{ 39600, 4, {16,15,15,11}},
+{ 39672, 4, {29,19,9,8}},
+{ 39780, 4, {17,15,13,12}},
+{ 39816, 4, {79,9,8,7}},
+{ 40248, 4, {43,13,9,8}},
+{ 40320, 4, {16,15,14,12}},
+{ 40500, 4, {15,15,15,12}},
+{ 40560, 4, {16,15,13,13}},
+{ 40608, 4, {47,12,9,8}},
+{ 40656, 4, {21,16,11,11}},
+{ 40800, 4, {17,16,15,10}},
+{ 40896, 4, {71,9,8,8}},
+{ 41040, 4, {19,15,12,12}},
+{ 41184, 4, {18,16,13,11}},
+{ 41328, 4, {41,14,9,8}},
+{ 41400, 4, {23,15,12,10}},
+{ 41472, 4, {18,16,12,12}},
+{ 41832, 4, {83,9,8,7}},
+{ 41904, 4, {97,9,8,6}},
+{ 41976, 4, {53,11,9,8}},
+{ 42048, 4, {73,9,8,8}},
+{ 42120, 4, {18,15,13,12}},
+{ 42240, 4, {16,16,15,11}},
+{ 42408, 4, {31,19,9,8}},
+{ 42480, 4, {59,10,9,8}},
+{ 42840, 4, {17,15,14,12}},
+{ 43200, 4, {16,15,15,12}},
+{ 43344, 4, {43,14,9,8}},
+{ 43416, 4, {67,9,9,8}},
+{ 43632, 4, {101,9,8,6}},
+{ 43680, 4, {16,15,14,13}},
+{ 43920, 4, {61,10,9,8}},
+{ 43992, 4, {47,13,9,8}},
+{ 44352, 4, {18,16,14,11}},
+{ 44460, 4, {19,15,13,12}},
+{ 44496, 4, {103,9,8,6}},
+{ 44856, 4, {89,9,8,7}},
+{ 44880, 4, {17,16,15,11}},
+{ 44928, 4, {18,16,13,12}},
+{ 45288, 4, {37,17,9,8}},
+{ 45360, 4, {18,15,14,12}},
+{ 45504, 4, {79,9,8,8}},
+{ 45540, 4, {23,15,12,11}},
+{ 45600, 4, {19,16,15,10}},
+{ 45792, 4, {53,12,9,8}},
+{ 45900, 4, {17,15,15,12}},
+{ 46008, 4, {71,9,9,8}},
+{ 46080, 4, {16,16,15,12}},
+{ 46224, 4, {107,9,8,6}},
+{ 46728, 4, {59,11,9,8}},
+{ 46800, 4, {16,15,15,13}},
+{ 46980, 4, {29,15,12,9}},
+{ 47040, 4, {16,15,14,14}},
+{ 47088, 4, {109,9,8,6}},
+{ 47304, 4, {73,9,9,8}},
+{ 47376, 4, {47,14,9,8}},
+{ 47520, 4, {18,16,15,11}},
+{ 47808, 4, {83,9,8,8}},
+{ 47880, 4, {19,15,14,12}},
+{ 48000, 4, {20,16,15,10}},
+{ 48024, 4, {29,23,9,8}},
+{ 48240, 4, {67,10,9,8}},
+{ 48312, 4, {61,11,9,8}},
+{ 48384, 4, {18,16,14,12}},
+{ 48600, 4, {18,15,15,12}},
+{ 48672, 4, {18,16,13,13}},
+{ 48816, 4, {113,9,8,6}},
+{ 48888, 4, {97,9,8,7}},
+{ 48960, 4, {17,16,15,12}},
+{ 49608, 4, {53,13,9,8}},
+{ 49680, 4, {23,15,12,12}},
+{ 49920, 4, {16,16,15,13}},
+{ 50160, 4, {19,16,15,11}},
+{ 50184, 4, {41,17,9,8}},
+{ 50220, 4, {31,15,12,9}},
+{ 50400, 4, {16,15,15,14}},
+{ 50616, 4, {37,19,9,8}},
+{ 50688, 4, {18,16,16,11}},
+{ 50820, 4, {21,20,11,11}},
+{ 50904, 4, {101,9,8,7}},
+{ 50976, 4, {59,12,9,8}},
+{ 51120, 4, {71,10,9,8}},
+{ 51192, 4, {79,9,9,8}},
+{ 51264, 4, {89,9,8,8}},
+{ 51300, 4, {19,15,15,12}},
+{ 51336, 4, {31,23,9,8}},
+{ 51840, 4, {18,16,15,12}},
+{ 51912, 4, {103,9,8,7}},
+{ 52020, 4, {17,17,15,12}},
+{ 52200, 4, {29,15,12,10}},
+{ 52416, 4, {18,16,14,13}},
+{ 52560, 4, {73,10,9,8}},
+{ 52632, 4, {43,17,9,8}},
+{ 52704, 4, {61,12,9,8}},
+{ 52800, 4, {20,16,15,11}},
+{ 53040, 4, {17,16,15,13}},
+{ 53064, 4, {67,11,9,8}},
+{ 53424, 4, {53,14,9,8}},
+{ 53760, 4, {16,16,15,14}},
+{ 53784, 4, {83,9,9,8}},
+{ 53820, 4, {23,15,13,12}},
+{ 53856, 4, {18,17,16,11}},
+{ 53928, 4, {107,9,8,7}},
+{ 54000, 4, {16,15,15,15}},
+{ 54720, 4, {19,16,15,12}},
+{ 54864, 4, {127,9,8,6}},
+{ 54936, 4, {109,9,8,7}},
+{ 55080, 4, {18,17,15,12}},
+{ 55200, 4, {23,16,15,10}},
+{ 55224, 4, {59,13,9,8}},
+{ 55296, 4, {18,16,16,12}},
+{ 55800, 4, {31,15,12,10}},
+{ 55872, 4, {97,9,8,8}},
+{ 56088, 4, {41,19,9,8}},
+{ 56160, 4, {18,16,15,13}},
+{ 56232, 4, {71,11,9,8}},
+{ 56448, 4, {18,16,14,14}},
+{ 56592, 4, {131,9,8,6}},
+{ 56784, 4, {21,16,13,13}},
+{ 56880, 4, {79,10,9,8}},
+{ 56952, 4, {113,9,8,7}},
+{ 57024, 4, {18,18,16,11}},
+{ 57096, 4, {61,13,9,8}},
+{ 57120, 4, {17,16,15,14}},
+{ 57420, 4, {29,15,12,11}},
+{ 57528, 4, {47,17,9,8}},
+{ 57600, 4, {16,16,15,15}},
+{ 57672, 4, {89,9,9,8}},
+{ 57816, 4, {73,11,9,8}},
+{ 57888, 4, {67,12,9,8}},
+{ 57960, 4, {23,15,14,12}},
+{ 58080, 4, {22,16,15,11}},
+{ 58140, 4, {19,17,15,12}},
+{ 58176, 4, {101,9,8,8}},
+{ 58320, 4, {18,18,15,12}},
+{ 58752, 4, {18,17,16,12}},
+{ 58824, 4, {43,19,9,8}},
+{ 59184, 4, {137,9,8,6}},
+{ 59280, 4, {19,16,15,13}},
+{ 59328, 4, {103,9,8,8}},
+{ 59472, 4, {59,14,9,8}},
+{ 59760, 4, {83,10,9,8}},
+{ 59904, 4, {18,16,16,13}},
+{ 59940, 4, {37,15,12,9}},
+{ 60048, 4, {139,9,8,6}},
+{ 60192, 4, {19,18,16,11}},
+{ 60480, 4, {18,16,15,14}},
+{ 60552, 4, {29,29,9,8}},
+{ 60720, 4, {23,16,15,11}},
+{ 61152, 4, {21,16,14,13}},
+{ 61200, 4, {17,16,15,15}},
+{ 61272, 4, {37,23,9,8}},
+{ 61344, 4, {71,12,9,8}},
+{ 61380, 4, {31,15,12,11}},
+{ 61440, 4, {16,16,16,15}},
+{ 61488, 4, {61,14,9,8}},
+{ 61560, 4, {19,18,15,12}},
+{ 61632, 4, {107,9,8,8}},
+{ 62100, 4, {23,15,15,12}},
+{ 62208, 4, {18,18,16,12}},
+{ 62400, 4, {20,16,15,13}},
+{ 62568, 4, {79,11,9,8}},
+{ 62640, 4, {29,15,12,12}},
+{ 62712, 4, {67,13,9,8}},
+{ 62784, 4, {109,9,8,8}},
+{ 62856, 4, {97,9,9,8}},
+{ 63072, 4, {73,12,9,8}},
+{ 63360, 4, {20,18,16,11}},
+{ 63648, 4, {18,17,16,13}},
+{ 63840, 4, {19,16,15,14}},
+{ 64008, 4, {127,9,8,7}},
+{ 64080, 4, {89,10,9,8}},
+{ 64296, 4, {47,19,9,8}},
+{ 64368, 4, {149,9,8,6}},
+{ 64512, 4, {18,16,16,14}},
+{ 64728, 4, {31,29,9,8}},
+{ 64800, 4, {18,16,15,15}},
+{ 64872, 4, {53,17,9,8}},
+{ 64980, 4, {19,19,15,12}},
+{ 65088, 4, {113,9,8,8}},
+{ 65232, 4, {151,9,8,6}},
+{ 65280, 4, {17,16,16,15}},
+{ 65448, 4, {101,9,9,8}},
+{ 65664, 4, {19,18,16,12}},
+{ 65736, 4, {83,11,9,8}},
+{ 65856, 4, {21,16,14,14}},
+{ 66024, 4, {131,9,8,7}},
+{ 66240, 4, {23,16,15,12}},
+{ 66420, 4, {41,15,12,9}},
+{ 66456, 4, {71,13,9,8}},
+{ 66600, 4, {37,15,12,10}},
+{ 66744, 4, {103,9,9,8}},
+{ 66960, 4, {31,15,12,12}},
+{ 67200, 4, {20,16,15,14}},
+{ 67392, 4, {18,18,16,13}},
+{ 67536, 4, {67,14,9,8}},
+{ 67824, 4, {157,9,8,6}},
+{ 67860, 4, {29,15,13,12}},
+{ 67896, 4, {41,23,9,8}},
+{ 68256, 4, {79,12,9,8}},
+{ 68328, 4, {73,13,9,8}},
+{ 68400, 4, {19,16,15,15}},
+{ 68544, 4, {18,17,16,14}},
+{ 68640, 4, {22,16,15,13}},
+{ 69048, 4, {137,9,8,7}},
+{ 69120, 4, {18,16,16,15}},
+{ 69192, 4, {31,31,9,8}},
+{ 69336, 4, {107,9,9,8}},
+{ 69360, 4, {17,17,16,15}},
+{ 69600, 4, {29,16,15,10}},
+{ 69660, 4, {43,15,12,9}},
+{ 69840, 4, {97,10,9,8}},
+{ 69888, 4, {21,16,16,13}},
+{ 70056, 4, {139,9,8,7}},
+{ 70380, 4, {23,17,15,12}},
+{ 70416, 4, {163,9,8,6}},
+{ 70488, 4, {89,11,9,8}},
+{ 70632, 4, {109,9,9,8}},
+{ 70980, 4, {21,20,13,13}},
+{ 71136, 4, {19,18,16,13}},
+{ 71208, 4, {43,23,9,8}},
+{ 71568, 4, {71,14,9,8}},
+{ 71712, 4, {83,12,9,8}},
+{ 71760, 4, {23,16,15,13}},
+{ 72000, 4, {20,16,15,15}},
+{ 72144, 4, {167,9,8,6}},
+{ 72216, 4, {59,17,9,8}},
+{ 72504, 4, {53,19,9,8}},
+{ 72540, 4, {31,15,13,12}},
+{ 72576, 4, {18,18,16,14}},
+{ 72720, 4, {101,10,9,8}},
+{ 72960, 4, {19,16,16,15}},
+{ 73080, 4, {29,15,14,12}},
+{ 73152, 4, {127,9,8,8}},
+{ 73224, 4, {113,9,9,8}},
+{ 73260, 4, {37,15,12,11}},
+{ 73440, 4, {18,17,16,15}},
+{ 73584, 4, {73,14,9,8}},
+{ 73728, 4, {18,16,16,16}},
+{ 73800, 4, {41,15,12,10}},
+{ 73920, 4, {22,16,15,14}},
+{ 73944, 4, {79,13,9,8}},
+{ 74160, 4, {103,10,9,8}},
+{ 74256, 4, {21,17,16,13}},
+{ 74400, 4, {31,16,15,10}},
+{ 74520, 4, {23,18,15,12}},
+{ 74664, 4, {61,17,9,8}},
+{ 74736, 4, {173,9,8,6}},
+{ 74880, 4, {20,18,16,13}},
+{ 75096, 4, {149,9,8,7}},
+{ 75264, 4, {21,16,16,14}},
+{ 75456, 4, {131,9,8,8}},
+{ 75600, 4, {21,16,15,15}},
+{ 76032, 4, {22,18,16,12}},
+{ 76050, 4, {25,18,13,13}},
+{ 76104, 4, {151,9,8,7}},
+{ 76140, 4, {47,15,12,9}},
+{ 76440, 4, {21,20,14,13}},
+{ 76560, 4, {29,16,15,11}},
+{ 76608, 4, {19,18,16,14}},
+{ 76800, 4, {20,16,16,15}},
+{ 76824, 4, {97,11,9,8}},
+{ 76896, 4, {89,12,9,8}},
+{ 77040, 4, {107,10,9,8}},
+{ 77256, 4, {37,29,9,8}},
+{ 77280, 4, {23,16,15,14}},
+{ 77328, 4, {179,9,8,6}},
+{ 77400, 4, {43,15,12,10}},
+{ 77520, 4, {19,17,16,15}},
+{ 77688, 4, {83,13,9,8}},
+{ 77760, 4, {18,18,16,15}},
+{ 77832, 4, {47,23,9,8}},
+{ 78120, 4, {31,15,14,12}},
+{ 78192, 4, {181,9,8,6}},
+{ 78300, 4, {29,15,15,12}},
+{ 78336, 4, {18,17,16,16}},
+{ 78480, 4, {109,10,9,8}},
+{ 78624, 4, {21,18,16,13}},
+{ 78660, 4, {23,19,15,12}},
+{ 78912, 4, {137,9,8,8}},
+{ 79128, 4, {157,9,8,7}},
+{ 79200, 4, {22,16,15,15}},
+{ 79488, 4, {23,18,16,12}},
+{ 79632, 4, {79,14,9,8}},
+{ 79920, 4, {37,15,12,12}},
+{ 79968, 4, {21,17,16,14}},
+{ 79992, 4, {101,11,9,8}},
+{ 80064, 4, {139,9,8,8}},
+{ 80640, 4, {21,16,16,15}},
+{ 80712, 4, {59,19,9,8}},
+{ 81180, 4, {41,15,12,11}},
+{ 81360, 4, {113,10,9,8}},
+{ 81576, 4, {103,11,9,8}},
+{ 81600, 4, {20,17,16,15}},
+{ 81675, 4, {27,25,11,11}},
+{ 81840, 4, {31,16,15,11}},
+{ 81900, 4, {21,20,15,13}},
+{ 82008, 4, {67,17,9,8}},
+{ 82080, 4, {19,18,16,15}},
+{ 82152, 4, {163,9,8,7}},
+{ 82296, 4, {127,9,9,8}},
+{ 82320, 4, {21,20,14,14}},
+{ 82368, 4, {22,18,16,13}},
+{ 82512, 4, {191,9,8,6}},
+{ 82584, 4, {37,31,9,8}},
+{ 82800, 4, {23,16,15,15}},
+{ 82944, 4, {18,18,16,16}},
+{ 82992, 4, {21,19,16,13}},
+{ 83232, 4, {18,17,17,16}},
+{ 83304, 4, {89,13,9,8}},
+{ 83376, 4, {193,9,8,6}},
+{ 83448, 4, {61,19,9,8}},
+{ 83520, 4, {29,16,15,12}},
+{ 83664, 4, {83,14,9,8}},
+{ 83700, 4, {31,15,15,12}},
+{ 83808, 4, {97,12,9,8}},
+{ 84168, 4, {167,9,8,7}},
+{ 84480, 4, {22,16,16,15}},
+{ 84600, 4, {47,15,12,10}},
+{ 84672, 4, {21,18,16,14}},
+{ 84744, 4, {107,11,9,8}},
+{ 84888, 4, {131,9,9,8}},
+{ 85104, 4, {197,9,8,6}},
+{ 85140, 4, {43,15,12,11}},
+{ 85176, 4, {24,21,13,13}},
+{ 85608, 4, {41,29,9,8}},
+{ 85680, 4, {21,17,16,15}},
+{ 85824, 4, {149,9,8,8}},
+{ 85860, 4, {53,15,12,9}},
+{ 85968, 4, {199,9,8,6}},
+{ 86016, 4, {21,16,16,16}},
+{ 86112, 4, {23,18,16,13}},
+{ 86328, 4, {109,11,9,8}},
+{ 86400, 4, {20,18,16,15}},
+{ 86580, 4, {37,15,13,12}},
+{ 86640, 4, {19,19,16,15}},
+{ 86904, 4, {71,17,9,8}},
+{ 86976, 4, {151,9,8,8}},
+{ 87120, 4, {22,22,15,12}},
+{ 87192, 4, {173,9,8,7}},
+{ 87264, 4, {101,12,9,8}},
+{ 87360, 4, {21,20,16,13}},
+{ 87552, 4, {19,18,16,16}},
+{ 87768, 4, {53,23,9,8}},
+{ 88128, 4, {18,18,17,16}},
+{ 88200, 4, {21,20,15,14}},
+{ 88320, 4, {23,16,16,15}},
+{ 88560, 4, {41,15,12,12}},
+{ 88704, 4, {22,18,16,14}},
+{ 88740, 4, {29,17,15,12}},
+{ 88776, 4, {137,9,9,8}},
+{ 88800, 4, {37,16,15,10}},
+{ 88992, 4, {103,12,9,8}},
+{ 89280, 4, {31,16,15,12}},
+{ 89352, 4, {73,17,9,8}},
+{ 89376, 4, {21,19,16,14}},
+{ 89496, 4, {113,11,9,8}},
+{ 89712, 4, {89,14,9,8}},
+{ 89760, 4, {22,17,16,15}},
+{ 89784, 4, {43,29,9,8}},
+{ 89856, 4, {24,18,16,13}},
+{ 90072, 4, {139,9,9,8}},
+{ 90216, 4, {179,9,8,7}},
+{ 90432, 4, {157,9,8,8}},
+{ 90480, 4, {29,16,15,13}},
+{ 90720, 4, {21,18,16,15}},
+{ 90792, 4, {97,13,9,8}},
+{ 91080, 4, {23,22,15,12}},
+{ 91152, 4, {211,9,8,6}},
+{ 91200, 4, {20,19,16,15}},
+{ 91224, 4, {181,9,8,7}},
+{ 91392, 4, {21,17,16,16}},
+{ 91440, 4, {127,10,9,8}},
+{ 91512, 4, {41,31,9,8}},
+{ 91656, 4, {67,19,9,8}},
+{ 91728, 4, {21,21,16,13}},
+{ 92160, 4, {20,18,16,16}},
+{ 92448, 4, {107,12,9,8}},
+{ 92736, 4, {23,18,16,14}},
+{ 92820, 4, {21,20,17,13}},
+{ 92880, 4, {43,15,12,12}},
+{ 93024, 4, {19,18,17,16}},
+{ 93060, 4, {47,15,12,11}},
+{ 93240, 4, {37,15,14,12}},
+{ 93312, 4, {18,18,18,16}},
+{ 93840, 4, {23,17,16,15}},
+{ 93888, 4, {163,9,8,8}},
+{ 93960, 4, {29,18,15,12}},
+{ 94080, 4, {21,20,16,14}},
+{ 94176, 4, {109,12,9,8}},
+{ 94320, 4, {131,10,9,8}},
+{ 94500, 4, {21,20,15,15}},
+{ 94536, 4, {101,13,9,8}},
+{ 94860, 4, {31,17,15,12}},
+{ 95040, 4, {22,18,16,15}},
+{ 95220, 4, {23,23,15,12}},
+{ 95400, 4, {53,15,12,10}},
+{ 95580, 4, {59,15,12,9}},
+{ 95760, 4, {21,19,16,15}},
+{ 95940, 4, {41,15,13,12}},
+{ 95976, 4, {43,31,9,8}},
+{ 96000, 4, {20,20,16,15}},
+{ 96096, 4, {22,21,16,13}},
+{ 96192, 4, {167,9,8,8}},
+{ 96264, 4, {191,9,8,7}},
+{ 96336, 4, {223,9,8,6}},
+{ 96408, 4, {103,13,9,8}},
+{ 96525, 4, {27,25,13,11}},
+{ 96552, 4, {149,9,9,8}},
+{ 96696, 4, {79,17,9,8}},
+{ 96720, 4, {31,16,15,13}},
+{ 96768, 4, {21,18,16,16}},
+{ 97104, 4, {21,17,17,16}},
+{ 97128, 4, {71,19,9,8}},
+{ 97272, 4, {193,9,8,7}},
+{ 97440, 4, {29,16,15,14}},
+{ 97632, 4, {113,12,9,8}},
+{ 97680, 4, {37,16,15,11}},
+{ 97704, 4, {59,23,9,8}},
+{ 97776, 4, {97,14,9,8}},
+{ 97848, 4, {151,9,9,8}},
+{ 97920, 4, {20,18,17,16}},
+{ 98064, 4, {227,9,8,6}},
+{ 98136, 4, {47,29,9,8}},
+{ 98280, 4, {21,20,18,13}},
+{ 98400, 4, {41,16,15,10}},
+{ 98496, 4, {19,18,18,16}},
+{ 98568, 4, {37,37,9,8}},
+{ 98640, 4, {137,10,9,8}},
+{ 98784, 4, {21,21,16,14}},
+{ 98820, 4, {61,15,12,9}},
+{ 98928, 4, {229,9,8,6}},
+{ 99180, 4, {29,19,15,12}},
+{ 99288, 4, {197,9,8,7}},
+{ 99360, 4, {23,18,16,15}},
+{ 99648, 4, {173,9,8,8}},
+{ 99840, 4, {26,16,16,15}},
+{ 99864, 4, {73,19,9,8}},
+{ 99900, 4, {37,15,15,12}},
+{ 99960, 4, {21,20,17,14}},
+{ 100080, 4, {139,10,9,8}},
+{ 100152, 4, {107,13,9,8}},
+{ 100224, 4, {29,18,16,12}},
+{ 100296, 4, {199,9,8,7}},
+{ 100320, 4, {22,19,16,15}},
+{ 100440, 4, {31,18,15,12}},
+{ 100464, 4, {23,21,16,13}},
+{ 100584, 4, {127,11,9,8}},
+{ 100620, 4, {43,15,13,12}},
+{ 100656, 4, {233,9,8,6}},
+{ 100800, 4, {21,20,16,15}},
+{ 101016, 4, {61,23,9,8}},
+{ 101250, 4, {25,18,15,15}},
+{ 101376, 4, {22,18,16,16}},
+{ 101400, 4, {25,24,13,13}},
+{ 101520, 4, {47,15,12,12}},
+{ 101592, 4, {83,17,9,8}},
+{ 101736, 4, {157,9,9,8}},
+{ 101808, 4, {101,14,9,8}},
+{ 102024, 4, {109,13,9,8}},
+{ 102144, 4, {21,19,16,16}},
+{ 102816, 4, {21,18,17,16}},
+{ 103104, 4, {179,9,8,8}},
+{ 103200, 4, {43,16,15,10}},
+{ 103248, 4, {239,9,8,6}},
+{ 103320, 4, {41,15,14,12}},
+{ 103488, 4, {22,21,16,14}},
+{ 103680, 4, {20,18,18,16}},
+{ 103740, 4, {21,20,19,13}},
+{ 103752, 4, {131,11,9,8}},
+{ 103824, 4, {103,14,9,8}},
+{ 103968, 4, {19,19,18,16}},
+{ 104112, 4, {241,9,8,6}},
+{ 104160, 4, {31,16,15,14}},
+{ 104256, 4, {181,9,8,8}},
+{ 104400, 4, {29,16,15,15}},
+{ 104832, 4, {24,21,16,13}},
+{ 104880, 4, {23,19,16,15}},
+{ 104904, 4, {47,31,9,8}},
+{ 104940, 4, {53,15,12,11}},
+{ 105600, 4, {22,20,16,15}},
+{ 105624, 4, {163,9,9,8}},
+{ 105768, 4, {113,13,9,8}},
+{ 105840, 4, {21,21,16,15}},
+{ 105984, 4, {23,18,16,16}},
+{ 106020, 4, {31,19,15,12}},
+{ 106080, 4, {26,17,16,15}},
+{ 106200, 4, {59,15,12,10}},
+{ 106344, 4, {211,9,8,7}},
+{ 106560, 4, {37,16,15,12}},
+{ 107100, 4, {21,20,17,15}},
+{ 107136, 4, {31,18,16,12}},
+{ 107280, 4, {149,10,9,8}},
+{ 107520, 4, {21,20,16,16}},
+{ 107712, 4, {22,18,17,16}},
+{ 107856, 4, {107,14,9,8}},
+{ 108072, 4, {79,19,9,8}},
+{ 108192, 4, {23,21,16,14}},
+{ 108216, 4, {167,9,9,8}},
+{ 108240, 4, {41,16,15,11}},
+{ 108360, 4, {43,15,14,12}},
+{ 108432, 4, {251,9,8,6}},
+{ 108504, 4, {137,11,9,8}},
+{ 108528, 4, {21,19,17,16}},
+{ 108540, 4, {67,15,12,9}},
+{ 108576, 4, {29,18,16,13}},
+{ 108720, 4, {151,10,9,8}},
+{ 108864, 4, {21,18,18,16}},
+{ 108936, 4, {89,17,9,8}},
+{ 109200, 4, {21,20,20,13}},
+{ 109224, 4, {41,37,9,8}},
+{ 109440, 4, {20,19,18,16}},
+{ 109728, 4, {127,12,9,8}},
+{ 109800, 4, {61,15,12,10}},
+{ 109872, 4, {109,14,9,8}},
+{ 109980, 4, {47,15,13,12}},
+{ 110016, 4, {191,9,8,8}},
+{ 110088, 4, {139,11,9,8}},
+{ 110400, 4, {23,20,16,15}},
+{ 110592, 4, {24,18,16,16}},
+{ 110664, 4, {53,29,9,8}},
+{ 110700, 4, {41,15,15,12}},
+{ 110880, 4, {22,21,16,15}},
+{ 110952, 4, {67,23,9,8}},
+{ 111024, 4, {257,9,8,6}},
+{ 111168, 4, {193,9,8,8}},
+{ 111360, 4, {29,16,16,15}},
+{ 111375, 4, {27,25,15,11}},
+{ 111384, 4, {24,21,17,13}},
+{ 111600, 4, {31,16,15,15}},
+{ 111720, 4, {21,20,19,14}},
+{ 112104, 4, {173,9,9,8}},
+{ 112320, 4, {26,18,16,15}},
+{ 112392, 4, {223,9,8,7}},
+{ 112608, 4, {23,18,17,16}},
+{ 112800, 4, {47,16,15,10}},
+{ 112896, 4, {21,21,16,16}},
+{ 113040, 4, {157,10,9,8}},
+{ 113184, 4, {131,12,9,8}},
+{ 113220, 4, {37,17,15,12}},
+{ 113400, 4, {21,20,18,15}},
+{ 113472, 4, {197,9,8,8}},
+{ 113520, 4, {43,16,15,11}},
+{ 113544, 4, {83,19,9,8}},
+{ 113568, 4, {26,21,16,13}},
+{ 113616, 4, {263,9,8,6}},
+{ 113904, 4, {113,14,9,8}},
+{ 114048, 4, {22,18,18,16}},
+{ 114075, 4, {27,25,13,13}},
+{ 114240, 4, {21,20,17,16}},
+{ 114408, 4, {227,9,8,7}},
+{ 114480, 4, {53,15,12,12}},
+{ 114552, 4, {43,37,9,8}},
+{ 114624, 4, {199,9,8,8}},
+{ 114660, 4, {21,21,20,13}},
+{ 114750, 4, {25,18,17,15}},
+{ 114840, 4, {29,22,15,12}},
+{ 114912, 4, {21,19,18,16}},
+{ 115020, 4, {71,15,12,9}},
+{ 115200, 4, {20,20,18,16}},
+{ 115416, 4, {229,9,8,7}},
+{ 115440, 4, {37,16,15,13}},
+{ 115920, 4, {23,21,16,15}},
+{ 115992, 4, {179,9,9,8}},
+{ 116064, 4, {31,18,16,13}},
+{ 116100, 4, {43,15,15,12}},
+{ 116160, 4, {22,22,16,15}},
+{ 116208, 4, {269,9,8,6}},
+{ 116820, 4, {59,15,12,11}},
+{ 116928, 4, {29,18,16,14}},
+{ 117072, 4, {271,9,8,6}},
+{ 117288, 4, {181,9,9,8}},
+{ 117360, 4, {163,10,9,8}},
+{ 117432, 4, {233,9,8,7}},
+{ 117504, 4, {24,18,17,16}},
+{ 117576, 4, {71,23,9,8}},
+{ 117600, 4, {21,20,20,14}},
+{ 117936, 4, {24,21,18,13}},
+{ 118008, 4, {149,11,9,8}},
+{ 118080, 4, {41,16,15,12}},
+{ 118260, 4, {73,15,12,9}},
+{ 118272, 4, {22,21,16,16}},
+{ 118296, 4, {53,31,9,8}},
+{ 118320, 4, {29,17,16,15}},
+{ 118368, 4, {137,12,9,8}},
+{ 118440, 4, {47,15,14,12}},
+{ 118560, 4, {26,19,16,15}},
+{ 118728, 4, {97,17,9,8}},
+{ 118872, 4, {127,13,9,8}},
+{ 119040, 4, {31,16,16,15}},
+{ 119232, 4, {23,18,18,16}},
+{ 119592, 4, {151,11,9,8}},
+{ 119664, 4, {277,9,8,6}},
+{ 119700, 4, {21,20,19,15}},
+{ 119808, 4, {26,18,16,16}},
+{ 119880, 4, {37,18,15,12}},
+{ 119952, 4, {21,21,17,16}},
+{ 120060, 4, {29,23,15,12}},
+{ 120096, 4, {139,12,9,8}},
+{ 120120, 4, {22,21,20,13}},
+{ 120240, 4, {167,10,9,8}},
+{ 120384, 4, {22,19,18,16}},
+{ 120456, 4, {239,9,8,7}},
+{ 120600, 4, {67,15,12,10}},
+{ 120780, 4, {61,15,12,11}},
+{ 120888, 4, {73,23,9,8}},
+{ 120960, 4, {21,20,18,16}},
+{ 121032, 4, {41,41,9,8}},
+{ 121296, 4, {21,19,19,16}},
+{ 121380, 4, {21,20,17,17}},
+{ 121392, 4, {281,9,8,6}},
+{ 121440, 4, {23,22,16,15}},
+{ 121464, 4, {241,9,8,7}},
+{ 121500, 4, {25,18,18,15}},
+{ 121536, 4, {211,9,8,8}},
+{ 121752, 4, {89,19,9,8}},
+{ 122256, 4, {283,9,8,6}},
+{ 122304, 4, {26,21,16,14}},
+{ 122616, 4, {131,13,9,8}},
+{ 122760, 4, {31,22,15,12}},
+{ 123192, 4, {59,29,9,8}},
+{ 123480, 4, {21,21,20,14}},
+{ 123624, 4, {101,17,9,8}},
+{ 123648, 4, {23,21,16,16}},
+{ 123768, 4, {191,9,9,8}},
+{ 123840, 4, {43,16,15,12}},
+{ 124020, 4, {53,15,13,12}},
+{ 124080, 4, {47,16,15,11}},
+{ 124320, 4, {37,16,15,14}},
+{ 124344, 4, {157,11,9,8}},
+{ 124416, 4, {24,18,18,16}},
+{ 124488, 4, {24,21,19,13}},
+{ 124560, 4, {173,10,9,8}},
+{ 124800, 4, {26,20,16,15}},
+{ 124992, 4, {31,18,16,14}},
+{ 125064, 4, {193,9,9,8}},
+{ 125208, 4, {47,37,9,8}},
+{ 125280, 4, {29,18,16,15}},
+{ 125460, 4, {41,17,15,12}},
+{ 125580, 4, {23,21,20,13}},
+{ 125664, 4, {22,21,17,16}},
+{ 125856, 4, {23,19,18,16}},
+{ 126000, 4, {21,20,20,15}},
+{ 126072, 4, {103,17,9,8}},
+{ 126225, 4, {27,25,17,11}},
+{ 126480, 4, {31,17,16,15}},
+{ 126504, 4, {251,9,8,7}},
+{ 126540, 4, {37,19,15,12}},
+{ 126576, 4, {293,9,8,6}},
+{ 126672, 4, {29,21,16,13}},
+{ 126720, 4, {22,20,18,16}},
+{ 126900, 4, {47,15,15,12}},
+{ 126936, 4, {43,41,9,8}},
+{ 126960, 4, {23,23,16,15}},
+{ 127008, 4, {21,21,18,16}},
+{ 127200, 4, {53,16,15,10}},
+{ 127296, 4, {26,18,17,16}},
+{ 127368, 4, {61,29,9,8}},
+{ 127440, 4, {59,15,12,12}},
+{ 127656, 4, {197,9,9,8}},
+{ 127680, 4, {21,20,19,16}},
+{ 127800, 4, {71,15,12,10}},
+{ 127872, 4, {37,18,16,12}},
+{ 127920, 4, {41,16,15,13}},
+{ 127980, 4, {79,15,12,9}},
+{ 128016, 4, {127,14,9,8}},
+{ 128232, 4, {137,13,9,8}},
+{ 128250, 4, {25,19,18,15}},
+{ 128340, 4, {31,23,15,12}},
+{ 128448, 4, {223,9,8,8}},
+{ 128520, 4, {21,20,18,17}},
+{ 128736, 4, {149,12,9,8}},
+{ 128880, 4, {179,10,9,8}},
+{ 128952, 4, {199,9,9,8}},
+{ 129024, 4, {24,21,16,16}},
+{ 129096, 4, {163,11,9,8}},
+{ 129360, 4, {22,21,20,14}},
+{ 129528, 4, {257,9,8,7}},
+{ 130050, 4, {25,18,17,17}},
+{ 130104, 4, {139,13,9,8}},
+{ 130320, 4, {181,10,9,8}},
+{ 130464, 4, {151,12,9,8}},
+{ 130752, 4, {227,9,8,8}},
+{ 130824, 4, {79,23,9,8}},
+{ 130968, 4, {107,17,9,8}},
+{ 131040, 4, {26,21,16,15}},
+{ 131328, 4, {24,19,18,16}},
+{ 131376, 4, {23,21,17,16}},
+{ 131400, 4, {73,15,12,10}},
+{ 131580, 4, {43,17,15,12}},
+{ 131625, 4, {27,25,15,13}},
+{ 131688, 4, {59,31,9,8}},
+{ 131712, 4, {28,21,16,14}},
+{ 131760, 4, {61,15,12,12}},
+{ 131904, 4, {229,9,8,8}},
+{ 132048, 4, {131,14,9,8}},
+{ 132240, 4, {29,19,16,15}},
+{ 132264, 4, {167,11,9,8}},
+{ 132300, 4, {21,21,20,15}},
+{ 132480, 4, {23,20,18,16}},
+{ 132552, 4, {263,9,8,7}},
+{ 132624, 4, {307,9,8,6}},
+{ 132660, 4, {67,15,12,11}},
+{ 132696, 4, {97,19,9,8}},
+{ 132840, 4, {41,18,15,12}},
+{ 133056, 4, {22,21,18,16}},
+{ 133128, 4, {43,43,9,8}},
+{ 133200, 4, {37,16,15,15}},
+{ 133416, 4, {109,17,9,8}},
+{ 133560, 4, {53,15,14,12}},
+{ 133632, 4, {29,18,16,16}},
+{ 133920, 4, {31,18,16,15}},
+{ 134064, 4, {21,21,19,16}},
+{ 134160, 4, {43,16,15,13}},
+{ 134208, 4, {233,9,8,8}},
+{ 134352, 4, {311,9,8,6}},
+{ 134400, 4, {21,20,20,16}},
+{ 134460, 4, {83,15,12,9}},
+{ 134784, 4, {26,18,18,16}},
+{ 135000, 4, {25,20,18,15}},
+{ 135216, 4, {313,9,8,6}},
+{ 135240, 4, {23,21,20,14}},
+{ 135360, 4, {47,16,15,12}},
+{ 135408, 4, {31,21,16,13}},
+{ 135576, 4, {269,9,8,7}},
+{ 135648, 4, {157,12,9,8}},
+{ 135660, 4, {21,20,19,17}},
+{ 136080, 4, {21,20,18,18}},
+{ 136152, 4, {61,31,9,8}},
+{ 136416, 4, {29,21,16,14}},
+{ 136584, 4, {271,9,8,7}},
+{ 136728, 4, {211,9,9,8}},
+{ 136944, 4, {317,9,8,6}},
+{ 137016, 4, {173,11,9,8}},
+{ 137088, 4, {24,21,17,16}},
+{ 137280, 4, {26,22,16,15}},
+{ 137448, 4, {83,23,9,8}},
+{ 137520, 4, {191,10,9,8}},
+{ 137592, 4, {24,21,21,13}},
+{ 137664, 4, {239,9,8,8}},
+{ 137700, 4, {25,18,18,17}},
+{ 137760, 4, {41,16,15,14}},
+{ 138060, 4, {59,15,13,12}},
+{ 138096, 4, {137,14,9,8}},
+{ 138168, 4, {101,19,9,8}},
+{ 138240, 4, {24,20,18,16}},
+{ 138312, 4, {113,17,9,8}},
+{ 138528, 4, {37,18,16,13}},
+{ 138600, 4, {22,21,20,15}},
+{ 138744, 4, {47,41,9,8}},
+{ 138816, 4, {241,9,8,8}},
+{ 138960, 4, {193,10,9,8}},
+{ 139104, 4, {23,21,18,16}},
+{ 139200, 4, {29,20,16,15}},
+{ 139320, 4, {43,18,15,12}},
+{ 139392, 4, {22,22,18,16}},
+{ 139464, 4, {149,13,9,8}},
+{ 139608, 4, {277,9,8,7}},
+{ 139776, 4, {26,21,16,16}},
+{ 139896, 4, {67,29,9,8}},
+{ 139920, 4, {53,16,15,11}},
+{ 140112, 4, {139,14,9,8}},
+{ 140220, 4, {41,19,15,12}},
+{ 140448, 4, {22,21,19,16}},
+{ 140580, 4, {71,15,12,11}},
+{ 140832, 4, {163,12,9,8}},
+{ 140904, 4, {103,19,9,8}},
+{ 141075, 4, {27,25,19,11}},
+{ 141120, 4, {21,21,20,16}},
+{ 141192, 4, {53,37,9,8}},
+{ 141336, 4, {151,13,9,8}},
+{ 141360, 4, {31,19,16,15}},
+{ 141600, 4, {59,16,15,10}},
+{ 141624, 4, {281,9,8,7}},
+{ 141696, 4, {41,18,16,12}},
+{ 141750, 4, {25,21,18,15}},
+{ 141768, 4, {179,11,9,8}},
+{ 141840, 4, {197,10,9,8}},
+{ 141984, 4, {29,18,17,16}},
+{ 142080, 4, {37,16,16,15}},
+{ 142200, 4, {79,15,12,10}},
+{ 142272, 4, {26,19,18,16}},
+{ 142632, 4, {283,9,8,7}},
+{ 142740, 4, {61,15,13,12}},
+{ 142800, 4, {21,20,20,17}},
+{ 142848, 4, {31,18,16,16}},
+{ 142992, 4, {331,9,8,6}},
+{ 143100, 4, {53,15,15,12}},
+{ 143280, 4, {199,10,9,8}},
+{ 143352, 4, {181,11,9,8}},
+{ 143520, 4, {26,23,16,15}},
+{ 143640, 4, {21,20,19,18}},
+{ 143820, 4, {47,17,15,12}},
+{ 144144, 4, {24,22,21,13}},
+{ 144180, 4, {89,15,12,9}},
+{ 144288, 4, {167,12,9,8}},
+{ 144480, 4, {43,16,15,14}},
+{ 144504, 4, {223,9,9,8}},
+{ 144540, 4, {73,15,12,11}},
+{ 144576, 4, {251,9,8,8}},
+{ 144720, 4, {67,15,12,12}},
+{ 144900, 4, {23,21,20,15}},
+{ 145152, 4, {24,21,18,16}},
+{ 145350, 4, {25,19,18,17}},
+{ 145512, 4, {47,43,9,8}},
+{ 145584, 4, {337,9,8,6}},
+{ 145656, 4, {24,21,17,17}},
+{ 145728, 4, {23,22,18,16}},
+{ 145800, 4, {25,18,18,18}},
+{ 145824, 4, {31,21,16,14}},
+{ 146160, 4, {29,21,16,15}},
+{ 146376, 4, {107,19,9,8}},
+{ 146400, 4, {61,16,15,10}},
+{ 146520, 4, {37,22,15,12}},
+{ 146640, 4, {47,16,15,13}},
+{ 146832, 4, {23,21,19,16}},
+{ 146952, 4, {157,13,9,8}},
+{ 147000, 4, {25,21,20,14}},
+{ 147060, 4, {43,19,15,12}},
+{ 147096, 4, {227,9,9,8}},
+{ 147384, 4, {89,23,9,8}},
+{ 147600, 4, {41,16,15,15}},
+{ 147672, 4, {293,9,8,7}},
+{ 147840, 4, {22,21,20,16}},
+{ 148032, 4, {257,9,8,8}},
+{ 148176, 4, {21,21,21,16}},
+{ 148248, 4, {71,29,9,8}},
+{ 148392, 4, {229,9,9,8}},
+{ 148500, 4, {25,22,18,15}},
+{ 148512, 4, {26,21,17,16}},
+{ 148608, 4, {43,18,16,12}},
+{ 148680, 4, {59,15,14,12}},
+{ 148800, 4, {31,20,16,15}},
+{ 149112, 4, {109,19,9,8}},
+{ 149175, 4, {27,25,17,13}},
+{ 149184, 4, {37,18,16,14}},
+{ 149400, 4, {83,15,12,10}},
+{ 149472, 4, {173,12,9,8}},
+{ 149544, 4, {67,31,9,8}},
+{ 149760, 4, {26,20,18,16}},
+{ 149904, 4, {347,9,8,6}},
+{ 149940, 4, {21,21,20,17}},
+{ 150192, 4, {149,14,9,8}},
+{ 150336, 4, {29,18,18,16}},
+{ 150528, 4, {28,21,16,16}},
+{ 150696, 4, {24,23,21,13}},
+{ 150768, 4, {349,9,8,6}},
+{ 150960, 4, {37,17,16,15}},
+{ 150984, 4, {233,9,9,8}},
+{ 151200, 4, {21,20,20,18}},
+{ 151272, 4, {191,11,9,8}},
+{ 151380, 4, {29,29,15,12}},
+{ 151488, 4, {263,9,8,8}},
+{ 151620, 4, {21,20,19,19}},
+{ 151776, 4, {31,18,17,16}},
+{ 151875, 4, {27,25,15,15}},
+{ 151920, 4, {211,10,9,8}},
+{ 152064, 4, {24,22,18,16}},
+{ 152208, 4, {151,14,9,8}},
+{ 152280, 4, {47,18,15,12}},
+{ 152352, 4, {23,23,18,16}},
+{ 152424, 4, {73,29,9,8}},
+{ 152496, 4, {353,9,8,6}},
+{ 152568, 4, {163,13,9,8}},
+{ 152640, 4, {53,16,15,12}},
+{ 152856, 4, {193,11,9,8}},
+{ 152880, 4, {26,21,20,14}},
+{ 153000, 4, {25,20,18,17}},
+{ 153120, 4, {29,22,16,15}},
+{ 153180, 4, {37,23,15,12}},
+{ 153216, 4, {24,21,19,16}},
+{ 153360, 4, {71,15,12,12}},
+{ 153504, 4, {41,18,16,13}},
+{ 153720, 4, {61,15,14,12}},
+{ 153900, 4, {25,19,18,18}},
+{ 154224, 4, {24,21,18,17}},
+{ 154560, 4, {23,21,20,16}},
+{ 154584, 4, {113,19,9,8}},
+{ 154656, 4, {179,12,9,8}},
+{ 154728, 4, {307,9,8,7}},
+{ 154800, 4, {43,16,15,15}},
+{ 154872, 4, {239,9,9,8}},
+{ 154944, 4, {269,9,8,8}},
+{ 155088, 4, {359,9,8,6}},
+{ 155232, 4, {22,21,21,16}},
+{ 155250, 4, {25,23,18,15}},
+{ 155448, 4, {127,17,9,8}},
+{ 155760, 4, {59,16,15,11}},
+{ 155904, 4, {29,21,16,16}},
+{ 155925, 4, {27,25,21,11}},
+{ 156024, 4, {197,11,9,8}},
+{ 156060, 4, {27,20,17,17}},
+{ 156096, 4, {271,9,8,8}},
+{ 156168, 4, {241,9,9,8}},
+{ 156240, 4, {31,21,16,15}},
+{ 156312, 4, {167,13,9,8}},
+{ 156384, 4, {181,12,9,8}},
+{ 156420, 4, {79,15,12,11}},
+{ 156456, 4, {53,41,9,8}},
+{ 156744, 4, {311,9,8,7}},
+{ 156780, 4, {67,15,13,12}},
+{ 157080, 4, {22,21,20,17}},
+{ 157140, 4, {97,15,12,9}},
+{ 157176, 4, {59,37,9,8}},
+{ 157248, 4, {26,21,18,16}},
+{ 157440, 4, {41,16,16,15}},
+{ 157500, 4, {25,21,20,15}},
+{ 157608, 4, {199,11,9,8}},
+{ 157680, 4, {73,15,12,12}},
+{ 157752, 4, {313,9,8,7}},
+{ 157920, 4, {47,16,15,14}},
+{ 158256, 4, {157,14,9,8}},
+{ 158472, 4, {71,31,9,8}},
+{ 158544, 4, {367,9,8,6}},
+{ 158688, 4, {29,19,18,16}},
+{ 158760, 4, {21,21,20,18}},
+{ 158976, 4, {24,23,18,16}},
+{ 159048, 4, {47,47,9,8}},
+{ 159300, 4, {59,15,15,12}},
+{ 159552, 4, {277,9,8,8}},
+{ 159600, 4, {21,20,20,19}},
+{ 159705, 4, {35,27,13,13}},
+{ 159768, 4, {317,9,8,7}},
+{ 159840, 4, {37,18,16,15}},
+{ 159936, 4, {28,21,17,16}},
+{ 160080, 4, {29,23,16,15}},
+{ 160200, 4, {89,15,12,10}},
+{ 160344, 4, {131,17,9,8}},
+{ 160560, 4, {223,10,9,8}},
+{ 160632, 4, {97,23,9,8}},
+{ 160650, 4, {25,21,18,17}},
+{ 160704, 4, {31,18,18,16}},
+{ 160740, 4, {47,19,15,12}},
+{ 160800, 4, {67,16,15,10}},
+{ 160992, 4, {43,18,16,13}},
+{ 161040, 4, {61,16,15,11}},
+{ 161136, 4, {373,9,8,6}},
+{ 161280, 4, {24,21,20,16}},
+{ 161616, 4, {37,21,16,13}},
+{ 161820, 4, {31,29,15,12}},
+{ 161856, 4, {281,9,8,8}},
+{ 161928, 4, {173,13,9,8}},
+{ 162000, 4, {25,20,18,18}},
+{ 162180, 4, {53,17,15,12}},
+{ 162240, 4, {26,26,16,15}},
+{ 162288, 4, {23,21,21,16}},
+{ 162360, 4, {41,22,15,12}},
+{ 162432, 4, {47,18,16,12}},
+{ 162450, 4, {25,19,19,18}},
+{ 162504, 4, {61,37,9,8}},
+{ 162624, 4, {22,22,21,16}},
+{ 162648, 4, {251,9,9,8}},
+{ 162792, 4, {24,21,19,17}},
+{ 162936, 4, {73,31,9,8}},
+{ 163008, 4, {283,9,8,8}},
+{ 163296, 4, {24,21,18,18}},
+{ 163350, 4, {27,25,22,11}},
+{ 163440, 4, {227,10,9,8}},
+{ 163620, 4, {101,15,12,9}},
+{ 163680, 4, {31,22,16,15}},
+{ 163728, 4, {379,9,8,6}},
+{ 163800, 4, {26,21,20,15}},
+{ 164088, 4, {53,43,9,8}},
+{ 164220, 4, {23,21,20,17}},
+{ 164304, 4, {163,14,9,8}},
+{ 164340, 4, {83,15,12,11}},
+{ 164640, 4, {28,21,20,14}},
+{ 164700, 4, {61,15,15,12}},
+{ 164736, 4, {26,22,18,16}},
+{ 164880, 4, {229,10,9,8}},
+{ 164952, 4, {79,29,9,8}},
+{ 165024, 4, {191,12,9,8}},
+{ 165120, 4, {43,16,16,15}},
+{ 165240, 4, {27,20,18,17}},
+{ 165312, 4, {41,18,16,14}},
+{ 165360, 4, {53,16,15,13}},
+{ 165456, 4, {383,9,8,6}},
+{ 165648, 4, {29,21,17,16}},
+{ 165888, 4, {24,24,18,16}},
+{ 165984, 4, {26,21,19,16}},
+{ 166140, 4, {71,15,13,12}},
+{ 166320, 4, {22,21,20,18}},
+{ 166536, 4, {257,9,9,8}},
+{ 166656, 4, {31,21,16,16}},
+{ 166725, 4, {27,25,19,13}},
+{ 166752, 4, {193,12,9,8}},
+{ 166824, 4, {331,9,8,7}},
+{ 166860, 4, {103,15,12,9}},
+{ 167040, 4, {29,20,18,16}},
+{ 167112, 4, {211,11,9,8}},
+{ 167256, 4, {101,23,9,8}},
+{ 167280, 4, {41,17,16,15}},
+{ 167544, 4, {179,13,9,8}},
+{ 167580, 4, {21,21,20,19}},
+{ 167688, 4, {137,17,9,8}},
+{ 167760, 4, {233,10,9,8}},
+{ 168000, 4, {21,20,20,20}},
+{ 168048, 4, {389,9,8,6}},
+{ 168300, 4, {25,22,18,17}},
+{ 168336, 4, {167,14,9,8}},
+{ 168720, 4, {37,19,16,15}},
+{ 168750, 4, {25,25,18,15}},
+{ 168768, 4, {293,9,8,8}},
+{ 168840, 4, {67,15,14,12}},
+{ 169200, 4, {47,16,15,15}},
+{ 169344, 4, {24,21,21,16}},
+{ 169416, 4, {181,13,9,8}},
+{ 169632, 4, {31,19,18,16}},
+{ 169740, 4, {41,23,15,12}},
+{ 169848, 4, {337,9,8,7}},
+{ 169920, 4, {59,16,15,12}},
+{ 170016, 4, {23,22,21,16}},
+{ 170100, 4, {25,21,18,18}},
+{ 170136, 4, {139,17,9,8}},
+{ 170208, 4, {197,12,9,8}},
+{ 170280, 4, {43,22,15,12}},
+{ 170400, 4, {71,16,15,10}},
+{ 170424, 4, {263,9,9,8}},
+{ 170496, 4, {37,18,16,16}},
+{ 170520, 4, {29,21,20,14}},
+{ 170568, 4, {103,23,9,8}},
+{ 170640, 4, {79,15,12,12}},
+{ 170775, 4, {27,25,23,11}},
+{ 170820, 4, {73,15,13,12}},
+{ 171000, 4, {25,20,19,18}},
+{ 171120, 4, {31,23,16,15}},
+{ 171360, 4, {24,21,20,17}},
+{ 171504, 4, {397,9,8,6}},
+{ 171720, 4, {53,18,15,12}},
+{ 171936, 4, {199,12,9,8}},
+{ 172080, 4, {239,10,9,8}},
+{ 172125, 4, {27,25,17,15}},
+{ 172224, 4, {26,23,18,16}},
+{ 172368, 4, {24,21,19,18}},
+{ 172980, 4, {31,31,15,12}},
+{ 173232, 4, {401,9,8,6}},
+{ 173304, 4, {83,29,9,8}},
+{ 173340, 4, {107,15,12,9}},
+{ 173376, 4, {43,18,16,14}},
+{ 173400, 4, {25,24,17,17}},
+{ 173520, 4, {241,10,9,8}},
+{ 173736, 4, {127,19,9,8}},
+{ 173880, 4, {23,21,20,18}},
+{ 174048, 4, {37,21,16,14}},
+{ 174168, 4, {59,41,9,8}},
+{ 174312, 4, {269,9,9,8}},
+{ 174384, 4, {173,14,9,8}},
+{ 174420, 4, {27,20,19,17}},
+{ 174600, 4, {97,15,12,10}},
+{ 174720, 4, {26,21,20,16}},
+{ 174888, 4, {347,9,8,7}},
+{ 174960, 4, {27,20,18,18}},
+{ 175200, 4, {73,16,15,10}},
+{ 175392, 4, {29,21,18,16}},
+{ 175440, 4, {43,17,16,15}},
+{ 175500, 4, {26,25,18,15}},
+{ 175560, 4, {22,21,20,19}},
+{ 175608, 4, {271,9,9,8}},
+{ 175680, 4, {61,16,15,12}},
+{ 175896, 4, {349,9,8,7}},
+{ 175950, 4, {25,23,18,17}},
+{ 175968, 4, {47,18,16,13}},
+{ 176220, 4, {89,15,12,11}},
+{ 176328, 4, {79,31,9,8}},
+{ 176400, 4, {21,21,20,20}},
+{ 176580, 4, {109,15,12,9}},
+{ 176616, 4, {223,11,9,8}},
+{ 176688, 4, {409,9,8,6}},
+{ 176832, 4, {307,9,8,8}},
+{ 176880, 4, {67,16,15,11}},
+{ 177072, 4, {31,21,17,16}},
+{ 177120, 4, {41,18,16,15}},
+{ 177192, 4, {107,23,9,8}},
+{ 177408, 4, {24,22,21,16}},
+{ 177600, 4, {37,20,16,15}},
+{ 177744, 4, {23,23,21,16}},
+{ 177912, 4, {353,9,8,7}},
+{ 178020, 4, {43,23,15,12}},
+{ 178080, 4, {53,16,15,14}},
+{ 178200, 4, {25,22,18,18}},
+{ 178488, 4, {67,37,9,8}},
+{ 178500, 4, {25,21,20,17}},
+{ 178560, 4, {31,20,18,16}},
+{ 178752, 4, {28,21,19,16}},
+{ 178776, 4, {191,13,9,8}},
+{ 178920, 4, {71,15,14,12}},
+{ 179088, 4, {41,21,16,13}},
+{ 179136, 4, {311,9,8,8}},
+{ 179208, 4, {131,19,9,8}},
+{ 179280, 4, {83,15,12,12}},
+{ 179352, 4, {53,47,9,8}},
+{ 179496, 4, {277,9,9,8}},
+{ 179550, 4, {25,21,19,18}},
+{ 179712, 4, {26,24,18,16}},
+{ 179784, 4, {227,11,9,8}},
+{ 179928, 4, {24,21,21,17}},
+{ 180000, 4, {25,20,20,18}},
+{ 180072, 4, {61,41,9,8}},
+{ 180288, 4, {313,9,8,8}},
+{ 180432, 4, {179,14,9,8}},
+{ 180480, 4, {47,16,16,15}},
+{ 180504, 4, {109,23,9,8}},
+{ 180540, 4, {59,17,15,12}},
+{ 180648, 4, {193,13,9,8}},
+{ 180720, 4, {251,10,9,8}},
+{ 180900, 4, {67,15,15,12}},
+{ 180936, 4, {359,9,8,7}},
+{ 180960, 4, {29,26,16,15}},
+{ 181008, 4, {419,9,8,6}},
+{ 181152, 4, {37,18,17,16}},
+{ 181260, 4, {53,19,15,12}},
+{ 181368, 4, {229,11,9,8}},
+{ 181440, 4, {24,21,20,18}},
+{ 181800, 4, {101,15,12,10}},
+{ 181872, 4, {421,9,8,6}},
+{ 181944, 4, {24,21,19,19}},
+{ 182088, 4, {281,9,9,8}},
+{ 182250, 4, {27,25,18,15}},
+{ 182280, 4, {31,21,20,14}},
+{ 182304, 4, {211,12,9,8}},
+{ 182376, 4, {149,17,9,8}},
+{ 182448, 4, {181,14,9,8}},
+{ 182592, 4, {317,9,8,8}},
+{ 182664, 4, {59,43,9,8}},
+{ 182700, 4, {29,21,20,15}},
+{ 183060, 4, {113,15,12,9}},
+{ 183168, 4, {53,18,16,12}},
+{ 183384, 4, {283,9,9,8}},
+{ 183456, 4, {26,21,21,16}},
+{ 183540, 4, {23,21,20,19}},
+{ 183600, 4, {25,24,18,17}},
+{ 183744, 4, {29,22,18,16}},
+{ 183960, 4, {73,15,14,12}},
+{ 184080, 4, {59,16,15,13}},
+{ 184275, 4, {27,25,21,13}},
+{ 184392, 4, {197,13,9,8}},
+{ 184536, 4, {233,11,9,8}},
+{ 184680, 4, {27,20,19,18}},
+{ 184800, 4, {22,21,20,20}},
+{ 184824, 4, {151,17,9,8}},
+{ 184860, 4, {79,15,13,12}},
+{ 184968, 4, {367,9,8,7}},
+{ 185040, 4, {257,10,9,8}},
+{ 185136, 4, {29,21,19,16}},
+{ 185220, 4, {21,21,21,20}},
+{ 185256, 4, {83,31,9,8}},
+{ 185400, 4, {103,15,12,10}},
+{ 185472, 4, {24,23,21,16}},
+{ 185625, 4, {27,25,25,11}},
+{ 185640, 4, {26,21,20,17}},
+{ 185760, 4, {43,18,16,15}},
+{ 185832, 4, {89,29,9,8}},
+{ 186120, 4, {47,22,15,12}},
+{ 186192, 4, {431,9,8,6}},
+{ 186264, 4, {199,13,9,8}},
+{ 186300, 4, {25,23,18,18}},
+{ 186480, 4, {37,21,16,15}},
+{ 186660, 4, {61,17,15,12}},
+{ 186960, 4, {41,19,16,15}},
+{ 187056, 4, {433,9,8,6}},
+{ 187128, 4, {113,23,9,8}},
+{ 187272, 4, {27,24,17,17}},
+{ 187416, 4, {137,19,9,8}},
+{ 187440, 4, {71,16,15,11}},
+{ 187488, 4, {31,21,18,16}},
+{ 187824, 4, {43,21,16,13}},
+{ 187992, 4, {373,9,8,7}},
+{ 188100, 4, {25,22,19,18}},
+{ 188160, 4, {28,21,20,16}},
+{ 188496, 4, {24,22,21,17}},
+{ 188856, 4, {61,43,9,8}},
+{ 188928, 4, {41,18,16,16}},
+{ 189000, 4, {25,21,20,18}},
+{ 189144, 4, {71,37,9,8}},
+{ 189288, 4, {239,11,9,8}},
+{ 189360, 4, {263,10,9,8}},
+{ 189504, 4, {47,18,16,14}},
+{ 189600, 4, {79,16,15,10}},
+{ 189648, 4, {439,9,8,6}},
+{ 189864, 4, {293,9,9,8}},
+{ 190152, 4, {139,19,9,8}},
+{ 190320, 4, {61,16,15,13}},
+{ 190512, 4, {24,21,21,18}},
+{ 190656, 4, {331,9,8,8}},
+{ 190800, 4, {53,16,15,15}},
+{ 190872, 4, {241,11,9,8}},
+{ 191016, 4, {379,9,8,7}},
+{ 191160, 4, {59,18,15,12}},
+{ 191250, 4, {25,25,18,17}},
+{ 191376, 4, {443,9,8,6}},
+{ 191520, 4, {24,21,20,19}},
+{ 191700, 4, {71,15,15,12}},
+{ 191760, 4, {47,17,16,15}},
+{ 191808, 4, {37,18,18,16}},
+{ 192060, 4, {97,15,12,11}},
+{ 192096, 4, {29,23,18,16}},
+{ 192168, 4, {157,17,9,8}},
+{ 192192, 4, {26,22,21,16}},
+{ 192240, 4, {89,15,12,12}},
+{ 192375, 4, {27,25,19,15}},
+{ 192528, 4, {191,14,9,8}},
+{ 192600, 4, {107,15,12,10}},
+{ 192672, 4, {223,12,9,8}},
+{ 192720, 4, {73,16,15,11}},
+{ 192780, 4, {27,21,20,17}},
+{ 192864, 4, {41,21,16,14}},
+{ 192960, 4, {67,16,15,12}},
+{ 193032, 4, {383,9,8,7}},
+{ 193050, 4, {27,25,22,13}},
+{ 193140, 4, {37,29,15,12}},
+{ 193200, 4, {23,21,20,20}},
+{ 193440, 4, {31,26,16,15}},
+{ 193536, 4, {24,24,21,16}},
+{ 193680, 4, {269,10,9,8}},
+{ 193800, 4, {25,24,19,17}},
+{ 193968, 4, {449,9,8,6}},
+{ 194040, 4, {22,21,21,20}},
+{ 194112, 4, {337,9,8,8}},
+{ 194220, 4, {83,15,13,12}},
+{ 194400, 4, {25,24,18,18}},
+{ 194472, 4, {73,37,9,8}},
+{ 194544, 4, {193,14,9,8}},
+{ 194580, 4, {47,23,15,12}},
+{ 194688, 4, {26,26,18,16}},
+{ 194880, 4, {29,21,20,16}},
+{ 194940, 4, {27,20,19,19}},
+{ 195075, 4, {27,25,17,17}},
+{ 195120, 4, {271,10,9,8}},
+{ 195300, 4, {31,21,20,15}},
+{ 195360, 4, {37,22,16,15}},
+{ 195750, 4, {29,25,18,15}},
+{ 196056, 4, {389,9,8,7}},
+{ 196080, 4, {43,19,16,15}},
+{ 196128, 4, {227,12,9,8}},
+{ 196200, 4, {109,15,12,10}},
+{ 196416, 4, {31,22,18,16}},
+{ 196560, 4, {26,21,20,18}},
+{ 196650, 4, {25,23,19,18}},
+{ 196800, 4, {41,20,16,15}},
+{ 197064, 4, {24,23,21,17}},
+{ 197100, 4, {73,15,15,12}},
+{ 197424, 4, {457,9,8,6}},
+{ 197496, 4, {211,13,9,8}},
+{ 197568, 4, {28,21,21,16}},
+{ 197640, 4, {61,18,15,12}},
+{ 197784, 4, {67,41,9,8}},
+{ 197856, 4, {229,12,9,8}},
+{ 197904, 4, {31,21,19,16}},
+{ 198000, 4, {25,22,20,18}},
+{ 198144, 4, {43,18,16,16}},
+{ 198240, 4, {59,16,15,14}},
+{ 198288, 4, {27,24,18,17}},
+{ 198432, 4, {53,18,16,13}},
+{ 198450, 4, {25,21,21,18}},
+{ 198576, 4, {197,14,9,8}},
+{ 198648, 4, {89,31,9,8}},
+{ 198792, 4, {251,11,9,8}},
+{ 198900, 4, {26,25,18,17}},
+{ 198912, 4, {37,21,16,16}},
+{ 198936, 4, {307,9,9,8}},
+{ 199080, 4, {79,15,14,12}},
+{ 199152, 4, {461,9,8,6}},
+{ 199200, 4, {83,16,15,10}},
+{ 199440, 4, {277,10,9,8}},
+{ 199500, 4, {25,21,20,19}},
+{ 199512, 4, {163,17,9,8}},
+{ 199584, 4, {24,22,21,18}},
+{ 199656, 4, {59,47,9,8}},
+{ 199872, 4, {347,9,8,8}},
+{ 199920, 4, {28,21,20,17}},
+{ 199980, 4, {101,15,12,11}},
+{ 200016, 4, {463,9,8,6}},
+{ 200088, 4, {397,9,8,7}},
+{ 200448, 4, {29,24,18,16}},
+{ 200475, 4, {27,27,25,11}},
+{ 200592, 4, {199,14,9,8}},
+{ 200736, 4, {41,18,17,16}},
+{ 200928, 4, {26,23,21,16}},
+{ 201024, 4, {349,9,8,8}},
+{ 201096, 4, {24,21,21,19}},
+{ 201312, 4, {233,12,9,8}},
+{ 201528, 4, {311,9,9,8}},
+{ 201600, 4, {24,21,20,20}},
+{ 201744, 4, {467,9,8,6}},
+{ 201780, 4, {59,19,15,12}},
+{ 201825, 4, {27,25,23,13}},
+{ 201840, 4, {29,29,16,15}},
+{ 201960, 4, {27,22,20,17}},
+{ 202104, 4, {401,9,8,7}},
+{ 202248, 4, {53,53,9,8}},
+{ 202272, 4, {43,21,16,14}},
+{ 202320, 4, {281,10,9,8}},
+{ 202464, 4, {37,19,18,16}},
+{ 202500, 4, {25,25,18,18}},
+{ 202536, 4, {97,29,9,8}},
+{ 202824, 4, {313,9,9,8}},
+{ 202860, 4, {23,21,21,20}},
+{ 203040, 4, {47,18,16,15}},
+{ 203280, 4, {22,22,21,20}},
+{ 203328, 4, {353,9,8,8}},
+{ 203400, 4, {113,15,12,10}},
+{ 203520, 4, {53,16,16,15}},
+{ 203544, 4, {257,11,9,8}},
+{ 203760, 4, {283,10,9,8}},
+{ 203832, 4, {149,19,9,8}},
+{ 203904, 4, {59,18,16,12}},
+{ 203940, 4, {103,15,12,11}},
+{ 204000, 4, {25,24,20,17}},
+{ 204120, 4, {27,21,20,18}},
+{ 204240, 4, {37,23,16,15}},
+{ 204408, 4, {167,17,9,8}},
+{ 204480, 4, {71,16,15,12}},
+{ 204624, 4, {29,21,21,16}},
+{ 204960, 4, {61,16,15,14}},
+{ 205020, 4, {67,17,15,12}},
+{ 205200, 4, {25,24,19,18}},
+{ 205296, 4, {47,21,16,13}},
+{ 205344, 4, {31,23,18,16}},
+{ 205416, 4, {317,9,9,8}},
+{ 205632, 4, {24,24,21,17}},
+{ 205740, 4, {127,15,12,9}},
+{ 206136, 4, {409,9,8,7}},
+{ 206400, 4, {43,20,16,15}},
+{ 206424, 4, {61,47,9,8}},
+{ 206460, 4, {37,31,15,12}},
+{ 206496, 4, {239,12,9,8}},
+{ 206550, 4, {27,25,18,17}},
+{ 206568, 4, {151,19,9,8}},
+{ 206640, 4, {41,21,16,15}},
+{ 206784, 4, {359,9,8,8}},
+{ 206928, 4, {479,9,8,6}},
+{ 206976, 4, {28,22,21,16}},
+{ 207000, 4, {25,23,20,18}},
+{ 207060, 4, {29,21,20,17}},
+{ 207432, 4, {67,43,9,8}},
+{ 207480, 4, {26,21,20,19}},
+{ 207900, 4, {25,22,21,18}},
+{ 208080, 4, {30,24,17,17}},
+{ 208224, 4, {241,12,9,8}},
+{ 208260, 4, {89,15,13,12}},
+{ 208296, 4, {263,11,9,8}},
+{ 208320, 4, {31,21,20,16}},
+{ 208560, 4, {79,16,15,11}},
+{ 208620, 4, {61,19,15,12}},
+{ 208656, 4, {24,23,21,18}},
+{ 208728, 4, {223,13,9,8}},
+{ 208845, 4, {35,27,17,13}},
+{ 209040, 4, {67,16,15,13}},
+{ 209160, 4, {83,15,14,12}},
+{ 209250, 4, {31,25,18,15}},
+{ 209304, 4, {27,24,19,17}},
+{ 209520, 4, {97,15,12,12}},
+{ 209592, 4, {71,41,9,8}},
+{ 209664, 4, {26,24,21,16}},
+{ 209880, 4, {53,22,15,12}},
+{ 209952, 4, {27,24,18,18}},
+{ 210000, 4, {25,21,20,20}},
+{ 210240, 4, {73,16,15,12}},
+{ 210312, 4, {127,23,9,8}},
+{ 210384, 4, {487,9,8,6}},
+{ 210456, 4, {79,37,9,8}},
+{ 210528, 4, {43,18,17,16}},
+{ 210600, 4, {26,25,18,18}},
+{ 210672, 4, {24,22,21,19}},
+{ 210816, 4, {61,18,16,12}},
+{ 210888, 4, {101,29,9,8}},
+{ 210960, 4, {293,10,9,8}},
+{ 211140, 4, {27,23,20,17}},
+{ 211176, 4, {419,9,8,7}},
+{ 211344, 4, {37,21,17,16}},
+{ 211392, 4, {367,9,8,8}},
+{ 211680, 4, {24,21,21,20}},
+{ 211752, 4, {173,17,9,8}},
+{ 211860, 4, {107,15,12,11}},
+{ 212112, 4, {491,9,8,6}},
+{ 212184, 4, {421,9,8,7}},
+{ 212220, 4, {131,15,12,9}},
+{ 212400, 4, {59,16,15,15}},
+{ 212472, 4, {227,13,9,8}},
+{ 212520, 4, {23,22,21,20}},
+{ 212544, 4, {41,18,18,16}},
+{ 212625, 4, {27,25,21,15}},
+{ 212688, 4, {211,14,9,8}},
+{ 213048, 4, {269,11,9,8}},
+{ 213120, 4, {37,20,18,16}},
+{ 213300, 4, {79,15,15,12}},
+{ 213600, 4, {89,16,15,10}},
+{ 213696, 4, {53,18,16,14}},
+{ 213750, 4, {25,25,19,18}},
+{ 213840, 4, {27,22,20,18}},
+{ 214020, 4, {41,29,15,12}},
+{ 214200, 4, {25,24,21,17}},
+{ 214272, 4, {31,24,18,16}},
+{ 214320, 4, {47,19,16,15}},
+{ 214344, 4, {229,13,9,8}},
+{ 214368, 4, {29,22,21,16}},
+{ 214488, 4, {331,9,9,8}},
+{ 214632, 4, {271,11,9,8}},
+{ 214776, 4, {157,19,9,8}},
+{ 214848, 4, {373,9,8,8}},
+{ 215064, 4, {103,29,9,8}},
+{ 215460, 4, {27,21,20,19}},
+{ 215496, 4, {73,41,9,8}},
+{ 215568, 4, {499,9,8,6}},
+{ 215760, 4, {31,29,16,15}},
+{ 215820, 4, {109,15,12,11}},
+{ 216000, 4, {27,20,20,20}},
+{ 216240, 4, {53,17,16,15}},
+{ 216384, 4, {28,23,21,16}},
+{ 216480, 4, {41,22,16,15}},
+{ 216504, 4, {97,31,9,8}},
+{ 216576, 4, {47,18,16,16}},
+{ 216600, 4, {25,24,19,19}},
+{ 216720, 4, {43,21,16,15}},
+{ 216864, 4, {251,12,9,8}},
+{ 216936, 4, {131,23,9,8}},
+{ 217080, 4, {67,18,15,12}},
+{ 217152, 4, {29,26,18,16}},
+{ 217224, 4, {431,9,8,7}},
+{ 217260, 4, {71,17,15,12}},
+{ 217296, 4, {503,9,8,6}},
+{ 217350, 4, {25,23,21,18}},
+{ 217560, 4, {37,21,20,14}},
+{ 217728, 4, {24,24,21,18}},
+{ 217800, 4, {25,22,22,18}},
+{ 218025, 4, {27,25,19,17}},
+{ 218088, 4, {233,13,9,8}},
+{ 218160, 4, {101,15,12,12}},
+{ 218232, 4, {433,9,8,7}},
+{ 218304, 4, {379,9,8,8}},
+{ 218376, 4, {337,9,9,8}},
+{ 218400, 4, {26,21,20,20}},
+{ 218484, 4, {28,27,17,17}},
+{ 218700, 4, {27,25,18,18}},
+{ 218736, 4, {31,21,21,16}},
+{ 219096, 4, {179,17,9,8}},
+{ 219120, 4, {83,16,15,11}},
+{ 219240, 4, {29,21,20,18}},
+{ 219375, 4, {27,25,25,13}},
+{ 219384, 4, {277,11,9,8}},
+{ 219420, 4, {53,23,15,12}},
+{ 219600, 4, {61,16,15,15}},
+{ 219816, 4, {71,43,9,8}},
+{ 219888, 4, {509,9,8,6}},
+{ 220248, 4, {24,23,21,19}},
+{ 220320, 4, {27,24,20,17}},
+{ 220416, 4, {41,21,16,16}},
+{ 220500, 4, {25,21,21,20}},
+{ 220608, 4, {383,9,8,8}},
+{ 220896, 4, {59,18,16,13}},
+{ 221040, 4, {307,10,9,8}},
+{ 221088, 4, {47,21,16,14}},
+{ 221112, 4, {83,37,9,8}},
+{ 221256, 4, {439,9,8,7}},
+{ 221340, 4, {31,21,20,17}},
+{ 221520, 4, {71,16,15,13}},
+{ 221544, 4, {181,17,9,8}},
+{ 221616, 4, {27,24,19,18}},
+{ 221760, 4, {24,22,21,20}},
+{ 221850, 4, {29,25,18,17}},
+{ 221940, 4, {137,15,12,9}},
+{ 222048, 4, {257,12,9,8}},
+{ 222180, 4, {23,23,21,20}},
+{ 222264, 4, {24,21,21,21}},
+{ 222300, 4, {26,25,19,18}},
+{ 222480, 4, {103,15,12,12}},
+{ 222552, 4, {281,11,9,8}},
+{ 222750, 4, {27,25,22,15}},
+{ 222768, 4, {26,24,21,17}},
+{ 222912, 4, {43,18,18,16}},
+{ 222984, 4, {163,19,9,8}},
+{ 223272, 4, {443,9,8,7}},
+{ 223380, 4, {73,17,15,12}},
+{ 223416, 4, {107,29,9,8}},
+{ 223440, 4, {28,21,20,19}},
+{ 223560, 4, {27,23,20,18}},
+{ 223704, 4, {239,13,9,8}},
+{ 223740, 4, {113,15,12,11}},
+{ 223776, 4, {37,21,18,16}},
+{ 223920, 4, {311,10,9,8}},
+{ 224064, 4, {389,9,8,8}},
+{ 224100, 4, {83,15,15,12}},
+{ 224112, 4, {29,23,21,16}},
+{ 224136, 4, {283,11,9,8}},
+{ 224280, 4, {89,15,14,12}},
+{ 224352, 4, {41,19,18,16}},
+{ 224400, 4, {25,24,22,17}},
+{ 224460, 4, {43,29,15,12}},
+{ 224784, 4, {223,14,9,8}},
+{ 224856, 4, {347,9,9,8}},
+{ 225000, 4, {25,25,20,18}},
+{ 225072, 4, {521,9,8,6}},
+{ 225120, 4, {67,16,15,14}},
+{ 225144, 4, {59,53,9,8}},
+{ 225180, 4, {139,15,12,9}},
+{ 225360, 4, {313,10,9,8}},
+{ 225432, 4, {101,31,9,8}},
+{ 225576, 4, {241,13,9,8}},
+{ 225600, 4, {47,20,16,15}},
+{ 225720, 4, {27,22,20,19}},
+{ 225792, 4, {28,24,21,16}},
+{ 225936, 4, {523,9,8,6}},
+{ 226008, 4, {73,43,9,8}},
+{ 226152, 4, {349,9,9,8}},
+{ 226296, 4, {449,9,8,7}},
+{ 226320, 4, {41,23,16,15}},
+{ 226560, 4, {59,16,16,15}},
+{ 226728, 4, {67,47,9,8}},
+{ 226800, 4, {27,21,20,20}},
+{ 226872, 4, {137,23,9,8}},
+{ 226980, 4, {97,15,13,12}},
+{ 227040, 4, {43,22,16,15}},
+{ 227136, 4, {26,26,21,16}},
+{ 227232, 4, {263,12,9,8}},
+{ 227520, 4, {79,16,15,12}},
+{ 227592, 4, {109,29,9,8}},
+{ 227700, 4, {25,23,22,18}},
+{ 227760, 4, {73,16,15,13}},
+{ 228000, 4, {25,24,20,19}},
+{ 228150, 4, {27,26,25,13}},
+{ 228240, 4, {317,10,9,8}},
+{ 228384, 4, {61,18,16,13}},
+{ 228456, 4, {167,19,9,8}},
+{ 228600, 4, {127,15,12,10}},
+{ 228672, 4, {397,9,8,8}},
+{ 228744, 4, {353,9,9,8}},
+{ 228780, 4, {41,31,15,12}},
+{ 228816, 4, {227,14,9,8}},
+{ 228888, 4, {33,24,17,17}},
+{ 228960, 4, {53,18,16,15}},
+{ 229140, 4, {67,19,15,12}},
+{ 229152, 4, {31,22,21,16}},
+{ 229320, 4, {26,21,21,20}},
+{ 229500, 4, {27,25,20,17}},
+{ 229824, 4, {24,24,21,19}},
+{ 229896, 4, {103,31,9,8}},
+{ 230040, 4, {71,18,15,12}},
+{ 230112, 4, {47,18,17,16}},
+{ 230184, 4, {139,23,9,8}},
+{ 230328, 4, {457,9,8,7}},
+{ 230640, 4, {31,31,16,15}},
+{ 230832, 4, {229,14,9,8}},
+{ 230850, 4, {27,25,19,18}},
+{ 230880, 4, {37,26,16,15}},
+{ 230976, 4, {401,9,8,8}},
+{ 231000, 4, {25,22,21,20}},
+{ 231120, 4, {107,15,12,12}},
+{ 231168, 4, {43,21,16,16}},
+{ 231200, 4, {32,25,17,17}},
+{ 231336, 4, {27,24,21,17}},
+{ 231420, 4, {29,21,20,19}},
+{ 231504, 4, {53,21,16,13}},
+{ 231552, 4, {67,18,16,12}},
+{ 231840, 4, {24,23,21,20}},
+{ 232056, 4, {293,11,9,8}},
+{ 232128, 4, {31,26,18,16}},
+{ 232344, 4, {461,9,8,7}},
+{ 232416, 4, {269,12,9,8}},
+{ 232560, 4, {30,24,19,17}},
+{ 232632, 4, {359,9,9,8}},
+{ 232776, 4, {61,53,9,8}},
+{ 232800, 4, {97,16,15,10}},
+{ 232848, 4, {24,22,21,21}},
+{ 232875, 4, {27,25,23,15}},
+{ 233100, 4, {37,21,20,15}},
+{ 233208, 4, {79,41,9,8}},
+{ 233280, 4, {27,24,20,18}},
+{ 233352, 4, {463,9,8,7}},
+{ 233415, 4, {35,27,19,13}},
+{ 233640, 4, {59,22,15,12}},
+{ 233712, 4, {541,9,8,6}},
+{ 233784, 4, {191,17,9,8}},
+{ 233856, 4, {29,24,21,16}},
+{ 233928, 4, {27,24,19,19}},
+{ 234000, 4, {26,25,20,18}},
+{ 234144, 4, {271,12,9,8}},
+{ 234192, 4, {41,21,17,16}},
+{ 234240, 4, {61,16,16,15}},
+{ 234360, 4, {31,21,20,18}},
+{ 234432, 4, {37,22,18,16}},
+{ 234600, 4, {25,24,23,17}},
+{ 234864, 4, {233,14,9,8}},
+{ 234900, 4, {29,25,18,18}},
+{ 234936, 4, {251,13,9,8}},
+{ 234960, 4, {89,16,15,11}},
+{ 235200, 4, {28,21,20,20}},
+{ 235296, 4, {43,19,18,16}},
+{ 235368, 4, {467,9,8,7}},
+{ 235440, 4, {109,15,12,12}},
+{ 235584, 4, {409,9,8,8}},
+{ 235800, 4, {131,15,12,10}},
+{ 235872, 4, {26,24,21,18}},
+{ 235944, 4, {113,29,9,8}},
+{ 235980, 4, {27,23,20,19}},
+{ 236160, 4, {41,20,18,16}},
+{ 236208, 4, {37,21,19,16}},
+{ 236232, 4, {193,17,9,8}},
+{ 236250, 4, {25,25,21,18}},
+{ 236304, 4, {547,9,8,6}},
+{ 236340, 4, {101,15,13,12}},
+{ 236520, 4, {73,18,15,12}},
+{ 236664, 4, {173,19,9,8}},
+{ 236880, 4, {47,21,16,15}},
+{ 236925, 4, {27,27,25,13}},
+{ 237096, 4, {89,37,9,8}},
+{ 237150, 4, {31,25,18,17}},
+{ 237360, 4, {43,23,16,15}},
+{ 237600, 4, {27,22,20,20}},
+{ 237816, 4, {367,9,9,8}},
+{ 237888, 4, {59,18,16,14}},
+{ 238050, 4, {25,23,23,18}},
+{ 238140, 4, {27,21,21,20}},
+{ 238320, 4, {331,10,9,8}},
+{ 238560, 4, {71,16,15,14}},
+{ 238680, 4, {27,26,20,17}},
+{ 238824, 4, {107,31,9,8}},
+{ 239040, 4, {83,16,15,12}},
+{ 239328, 4, {277,12,9,8}},
+{ 239400, 4, {25,24,21,19}},
+{ 239568, 4, {31,23,21,16}},
+{ 239904, 4, {28,24,21,17}},
+{ 239940, 4, {43,31,15,12}},
+{ 240000, 4, {25,24,20,20}},
+{ 240240, 4, {26,22,21,20}},
+{ 240264, 4, {71,47,9,8}},
+{ 240300, 4, {89,15,15,12}},
+{ 240552, 4, {257,13,9,8}},
+{ 240624, 4, {557,9,8,6}},
+{ 240720, 4, {59,17,16,15}},
+{ 240912, 4, {239,14,9,8}},
+{ 240975, 4, {27,25,21,17}},
+{ 241020, 4, {103,15,13,12}},
+{ 241080, 4, {41,21,20,14}},
+{ 241128, 4, {197,17,9,8}},
+{ 241200, 4, {67,16,15,15}},
+{ 241344, 4, {419,9,8,8}},
+{ 241380, 4, {149,15,12,9}},
+{ 241416, 4, {479,9,8,7}},
+{ 241500, 4, {25,23,21,20}},
+{ 241560, 4, {61,22,15,12}},
+{ 241680, 4, {53,19,16,15}},
+{ 241704, 4, {373,9,9,8}},
+{ 241740, 4, {79,17,15,12}},
+{ 241920, 4, {24,24,21,20}},
+{ 242208, 4, {29,29,18,16}},
+{ 242352, 4, {27,24,22,17}},
+{ 242400, 4, {101,16,15,10}},
+{ 242496, 4, {421,9,8,8}},
+{ 242640, 4, {337,10,9,8}},
+{ 242784, 4, {281,12,9,8}},
+{ 242820, 4, {71,19,15,12}},
+{ 242928, 4, {241,14,9,8}},
+{ 243000, 4, {27,25,20,18}},
+{ 243144, 4, {307,11,9,8}},
+{ 243216, 4, {563,9,8,6}},
+{ 243288, 4, {109,31,9,8}},
+{ 243432, 4, {24,23,21,21}},
+{ 243576, 4, {199,17,9,8}},
+{ 243600, 4, {29,21,20,20}},
+{ 243648, 4, {47,18,18,16}},
+{ 243675, 4, {27,25,19,19}},
+{ 243936, 4, {24,22,22,21}},
+{ 244080, 4, {113,15,12,12}},
+{ 244188, 4, {28,27,19,17}},
+{ 244224, 4, {53,18,16,16}},
+{ 244260, 4, {59,23,15,12}},
+{ 244440, 4, {97,15,14,12}},
+{ 244512, 4, {283,12,9,8}},
+{ 244584, 4, {79,43,9,8}},
+{ 244608, 4, {28,26,21,16}},
+{ 244620, 4, {151,15,12,9}},
+{ 244800, 4, {25,24,24,17}},
+{ 244872, 4, {179,19,9,8}},
+{ 244944, 4, {27,24,21,18}},
+{ 245016, 4, {83,41,9,8}},
+{ 245088, 4, {37,23,18,16}},
+{ 245280, 4, {73,16,15,14}},
+{ 245340, 4, {47,29,15,12}},
+{ 245376, 4, {71,18,16,12}},
+{ 245448, 4, {487,9,8,7}},
+{ 245592, 4, {379,9,9,8}},
+{ 245616, 4, {43,21,17,16}},
+{ 245700, 4, {26,25,21,18}},
+{ 245808, 4, {569,9,8,6}},
+{ 245952, 4, {61,18,16,14}},
+{ 246168, 4, {263,13,9,8}},
+{ 246240, 4, {27,24,20,19}},
+{ 246312, 4, {311,11,9,8}},
+{ 246420, 4, {37,37,15,12}},
+{ 246480, 4, {79,16,15,13}},
+{ 246600, 4, {137,15,12,10}},
+{ 246672, 4, {571,9,8,6}},
+{ 246744, 4, {149,23,9,8}},
+{ 246960, 4, {28,21,21,20}},
+{ 247032, 4, {73,47,9,8}},
+{ 247200, 4, {103,16,15,10}},
+{ 247380, 4, {31,21,20,19}},
+{ 247464, 4, {491,9,8,7}},
+{ 247500, 4, {25,25,22,18}},
+{ 247608, 4, {181,19,9,8}},
+{ 247680, 4, {43,20,18,16}},
+{ 247860, 4, {27,27,20,17}},
+{ 247896, 4, {313,11,9,8}},
+{ 247950, 4, {29,25,19,18}},
+{ 247968, 4, {41,21,18,16}},
+{ 248160, 4, {47,22,16,15}},
+{ 248184, 4, {383,9,9,8}},
+{ 248256, 4, {431,9,8,8}},
+{ 248400, 4, {27,23,20,20}},
+{ 248472, 4, {29,24,21,17}},
+{ 248640, 4, {37,21,20,16}},
+{ 248880, 4, {61,17,16,15}},
+{ 248976, 4, {26,24,21,19}},
+{ 249264, 4, {577,9,8,6}},
+{ 249312, 4, {53,21,16,14}},
+{ 249408, 4, {433,9,8,8}},
+{ 249480, 4, {27,22,21,20}},
+{ 249660, 4, {73,19,15,12}},
+{ 249696, 4, {32,27,17,17}},
+{ 249750, 4, {37,25,18,15}},
+{ 249840, 4, {347,10,9,8}},
+{ 249984, 4, {31,24,21,16}},
+{ 250056, 4, {151,23,9,8}},
+{ 250200, 4, {139,15,12,10}},
+{ 250380, 4, {107,15,13,12}},
+{ 250632, 4, {59,59,9,8}},
+{ 250800, 4, {25,24,22,19}},
+{ 250848, 4, {67,18,16,13}},
+{ 251064, 4, {317,11,9,8}},
+{ 251100, 4, {31,25,18,18}},
+{ 251160, 4, {26,23,21,20}},
+{ 251280, 4, {349,10,9,8}},
+{ 251460, 4, {127,15,12,11}},
+{ 251496, 4, {499,9,8,7}},
+{ 251784, 4, {269,13,9,8}},
+{ 252000, 4, {25,24,21,20}},
+{ 252072, 4, {389,9,9,8}},
+{ 252216, 4, {113,31,9,8}},
+{ 252288, 4, {73,18,16,12}},
+{ 252450, 4, {27,25,22,17}},
+{ 252540, 4, {61,23,15,12}},
+{ 252672, 4, {47,21,16,16}},
+{ 252720, 4, {27,26,20,18}},
+{ 252840, 4, {43,21,20,14}},
+{ 252864, 4, {439,9,8,8}},
+{ 253008, 4, {251,14,9,8}},
+{ 253125, 4, {27,25,25,15}},
+{ 253152, 4, {293,12,9,8}},
+{ 253344, 4, {29,26,21,16}},
+{ 253368, 4, {27,24,23,17}},
+{ 253512, 4, {503,9,8,7}},
+{ 253584, 4, {587,9,8,6}},
+{ 253656, 4, {271,13,9,8}},
+{ 253980, 4, {83,17,15,12}},
+{ 254016, 4, {24,24,21,21}},
+{ 254160, 4, {353,10,9,8}},
+{ 254340, 4, {157,15,12,9}},
+{ 254400, 4, {53,20,16,15}},
+{ 254475, 4, {29,27,25,13}},
+{ 254520, 4, {101,15,14,12}},
+{ 254880, 4, {59,18,16,15}},
+{ 255000, 4, {25,25,24,17}},
+{ 255024, 4, {24,23,22,21}},
+{ 255060, 4, {109,15,13,12}},
+{ 255150, 4, {27,25,21,18}},
+{ 255168, 4, {443,9,8,8}},
+{ 255600, 4, {71,16,15,15}},
+{ 255672, 4, {67,53,9,8}},
+{ 255744, 4, {37,24,18,16}},
+{ 255780, 4, {29,21,21,20}},
+{ 255840, 4, {41,26,16,15}},
+{ 255960, 4, {79,18,15,12}},
+{ 256080, 4, {97,16,15,11}},
+{ 256176, 4, {593,9,8,6}},
+{ 256320, 4, {89,16,15,12}},
+{ 256500, 4, {27,25,20,19}},
+{ 256536, 4, {509,9,8,7}},
+{ 256608, 4, {27,24,22,18}},
+{ 256800, 4, {107,16,15,10}},
+{ 256968, 4, {83,43,9,8}},
+{ 257040, 4, {28,27,20,17}},
+{ 257184, 4, {47,19,18,16}},
+{ 257256, 4, {397,9,9,8}},
+{ 257280, 4, {67,16,16,15}},
+{ 257400, 4, {26,25,22,18}},
+{ 257520, 4, {37,29,16,15}},
+{ 257712, 4, {59,21,16,13}},
+{ 257985, 4, {35,27,21,13}},
+{ 258264, 4, {211,17,9,8}},
+{ 258300, 4, {41,21,20,15}},
+{ 258408, 4, {97,37,9,8}},
+{ 258480, 4, {359,10,9,8}},
+{ 258552, 4, {27,24,21,19}},
+{ 258624, 4, {449,9,8,8}},
+{ 258720, 4, {28,22,21,20}},
+{ 258750, 4, {25,25,23,18}},
+{ 258768, 4, {599,9,8,6}},
+{ 258912, 4, {31,29,18,16}},
+{ 258960, 4, {83,16,15,13}},
+{ 259056, 4, {257,14,9,8}},
+{ 259128, 4, {61,59,9,8}},
+{ 259200, 4, {27,24,20,20}},
+{ 259272, 4, {277,13,9,8}},
+{ 259380, 4, {131,15,12,11}},
+{ 259440, 4, {47,23,16,15}},
+{ 259488, 4, {53,18,17,16}},
+{ 259560, 4, {103,15,14,12}},
+{ 259632, 4, {601,9,8,6}},
+{ 259776, 4, {41,22,18,16}},
+{ 259848, 4, {401,9,9,8}},
+{ 259920, 4, {30,24,19,19}},
+{ 259992, 4, {157,23,9,8}},
+{ 260064, 4, {43,21,18,16}},
+{ 260400, 4, {31,21,20,20}},
+{ 260820, 4, {27,23,21,20}},
+{ 261000, 4, {29,25,20,18}},
+{ 261072, 4, {37,21,21,16}},
+{ 261288, 4, {191,19,9,8}},
+{ 261360, 4, {27,22,22,20}},
+{ 261600, 4, {109,16,15,10}},
+{ 261744, 4, {41,21,19,16}},
+{ 261900, 4, {97,15,15,12}},
+{ 262080, 4, {26,24,21,20}},
+{ 262152, 4, {331,11,9,8}},
+{ 262200, 4, {25,24,23,19}},
+{ 262224, 4, {607,9,8,6}},
+{ 262260, 4, {47,31,15,12}},
+{ 262440, 4, {27,27,20,18}},
+{ 262500, 4, {25,25,21,20}},
+{ 262584, 4, {521,9,8,7}},
+{ 262728, 4, {89,41,9,8}},
+{ 262800, 4, {73,16,15,15}},
+{ 263016, 4, {281,13,9,8}},
+{ 263088, 4, {29,24,21,18}},
+{ 263232, 4, {457,9,8,8}},
+{ 263250, 4, {27,26,25,15}},
+{ 263424, 4, {28,28,21,16}},
+{ 263520, 4, {61,18,16,15}},
+{ 263592, 4, {523,9,8,7}},
+{ 263925, 4, {27,25,23,17}},
+{ 264000, 4, {25,24,22,20}},
+{ 264024, 4, {193,19,9,8}},
+{ 264060, 4, {163,15,12,9}},
+{ 264180, 4, {37,21,20,17}},
+{ 264240, 4, {367,10,9,8}},
+{ 264384, 4, {27,24,24,17}},
+{ 264420, 4, {113,15,13,12}},
+{ 264600, 4, {25,24,21,21}},
+{ 264816, 4, {613,9,8,6}},
+{ 264888, 4, {283,13,9,8}},
+{ 265032, 4, {409,9,9,8}},
+{ 265050, 4, {31,25,19,18}},
+{ 265104, 4, {263,14,9,8}},
+{ 265176, 4, {127,29,9,8}},
+{ 265200, 4, {26,25,24,17}},
+{ 265248, 4, {307,12,9,8}},
+{ 265320, 4, {67,22,15,12}},
+{ 265440, 4, {79,16,15,14}},
+{ 265536, 4, {461,9,8,8}},
+{ 265608, 4, {31,24,21,17}},
+{ 265824, 4, {71,18,16,13}},
+{ 266112, 4, {24,24,22,21}},
+{ 266220, 4, {29,27,20,17}},
+{ 266448, 4, {61,21,16,13}},
+{ 266544, 4, {617,9,8,6}},
+{ 266616, 4, {24,23,23,21}},
+{ 266640, 4, {101,16,15,11}},
+{ 266688, 4, {463,9,8,8}},
+{ 266760, 4, {27,26,20,19}},
+{ 266904, 4, {337,11,9,8}},
+{ 267036, 4, {33,28,17,17}},
+{ 267120, 4, {53,21,16,15}},
+{ 267300, 4, {27,25,22,18}},
+{ 267336, 4, {79,47,9,8}},
+{ 267408, 4, {619,9,8,6}},
+{ 267912, 4, {61,61,9,8}},
+{ 267960, 4, {29,22,21,20}},
+{ 268128, 4, {28,24,21,19}},
+{ 268200, 4, {149,15,12,10}},
+{ 268272, 4, {27,24,23,18}},
+{ 268320, 4, {43,26,16,15}},
+{ 268464, 4, {47,21,17,16}},
+{ 268560, 4, {373,10,9,8}},
+{ 268704, 4, {311,12,9,8}},
+{ 268920, 4, {83,18,15,12}},
+{ 268992, 4, {467,9,8,8}},
+{ 269040, 4, {59,19,16,15}},
+{ 269064, 4, {101,37,9,8}},
+{ 269100, 4, {26,25,23,18}},
+{ 269280, 4, {30,24,22,17}},
+{ 269325, 4, {27,25,21,19}},
+{ 269496, 4, {197,19,9,8}},
+{ 269640, 4, {107,15,14,12}},
+{ 269892, 4, {28,27,21,17}},
+{ 269928, 4, {163,23,9,8}},
+{ 270000, 4, {27,25,20,20}},
+{ 270144, 4, {67,18,16,14}},
+{ 270180, 4, {79,19,15,12}},
+{ 270432, 4, {313,12,9,8}},
+{ 270480, 4, {28,23,21,20}},
+{ 270540, 4, {167,15,12,9}},
+{ 270720, 4, {47,20,18,16}},
+{ 270816, 4, {31,26,21,16}},
+{ 270864, 4, {27,24,22,19}},
+{ 270900, 4, {43,21,20,15}},
+{ 270936, 4, {71,53,9,8}},
+{ 271152, 4, {269,14,9,8}},
+{ 271200, 4, {113,16,15,10}},
+{ 271260, 4, {137,15,12,11}},
+{ 271512, 4, {419,9,9,8}},
+{ 271584, 4, {41,23,18,16}},
+{ 271800, 4, {151,15,12,10}},
+{ 271872, 4, {59,18,16,16}},
+{ 271920, 4, {103,16,15,11}},
+{ 272025, 4, {31,27,25,13}},
+{ 272160, 4, {27,24,21,20}},
+{ 272232, 4, {199,19,9,8}},
+{ 272340, 4, {89,17,15,12}},
+{ 272448, 4, {43,22,18,16}},
+{ 272592, 4, {631,9,8,6}},
+{ 272640, 4, {71,16,16,15}},
+{ 272664, 4, {541,9,8,7}},
+{ 272700, 4, {101,15,15,12}},
+{ 272808, 4, {421,9,9,8}},
+{ 272832, 4, {29,28,21,16}},
+{ 272880, 4, {379,10,9,8}},
+{ 272916, 4, {28,27,19,19}},
+{ 272952, 4, {223,17,9,8}},
+{ 273000, 4, {26,25,21,20}},
+{ 273024, 4, {79,18,16,12}},
+{ 273060, 4, {41,37,15,12}},
+{ 273105, 4, {35,27,17,17}},
+{ 273168, 4, {271,14,9,8}},
+{ 273240, 4, {27,23,22,20}},
+{ 273312, 4, {73,18,16,13}},
+{ 273360, 4, {67,17,16,15}},
+{ 273375, 4, {27,27,25,15}},
+{ 273420, 4, {31,21,21,20}},
+{ 273504, 4, {37,22,21,16}},
+{ 273528, 4, {131,29,9,8}},
+{ 273600, 4, {25,24,24,19}},
+{ 273888, 4, {317,12,9,8}},
+{ 274050, 4, {29,25,21,18}},
+{ 274248, 4, {293,13,9,8}},
+{ 274320, 4, {127,15,12,12}},
+{ 274392, 4, {103,37,9,8}},
+{ 274512, 4, {43,21,19,16}},
+{ 274680, 4, {109,15,14,12}},
+{ 274752, 4, {53,18,18,16}},
+{ 274824, 4, {347,11,9,8}},
+{ 275184, 4, {26,24,21,21}},
+{ 275220, 4, {139,15,12,11}},
+{ 275280, 4, {37,31,16,15}},
+{ 275400, 4, {27,25,24,17}},
+{ 275520, 4, {41,21,20,16}},
+{ 275544, 4, {89,43,9,8}},
+{ 275688, 4, {547,9,8,7}},
+{ 275760, 4, {383,10,9,8}},
+{ 275904, 4, {479,9,8,8}},
+{ 276000, 4, {25,24,23,20}},
+{ 276360, 4, {47,21,20,14}},
+{ 276408, 4, {349,11,9,8}},
+{ 276552, 4, {167,23,9,8}},
+{ 276660, 4, {53,29,15,12}},
+{ 276750, 4, {41,25,18,15}},
+{ 276768, 4, {31,31,18,16}},
+{ 276912, 4, {641,9,8,6}},
+{ 277020, 4, {27,27,20,19}},
+{ 277056, 4, {37,26,18,16}},
+{ 277200, 4, {25,24,22,21}},
+{ 277380, 4, {67,23,15,12}},
+{ 277440, 4, {32,30,17,17}},
+{ 277536, 4, {59,21,16,14}},
+{ 277680, 4, {89,16,15,13}},
+{ 277704, 4, {29,24,21,19}},
+{ 277776, 4, {643,9,8,6}},
+{ 277848, 4, {227,17,9,8}},
+{ 278100, 4, {103,15,15,12}},
+{ 278160, 4, {61,19,16,15}},
+{ 278208, 4, {24,24,23,21}},
+{ 278568, 4, {73,53,9,8}},
+{ 278880, 4, {83,16,15,14}},
+{ 279000, 4, {31,25,20,18}},
+{ 279072, 4, {32,27,19,17}},
+{ 279216, 4, {277,14,9,8}},
+{ 279288, 4, {431,9,9,8}},
+{ 279360, 4, {97,16,15,12}},
+{ 279450, 4, {27,25,23,18}},
+{ 279504, 4, {647,9,8,6}},
+{ 279576, 4, {353,11,9,8}},
+{ 279720, 4, {37,21,20,18}},
+{ 279840, 4, {53,22,16,15}},
+{ 279936, 4, {27,24,24,18}},
+{ 280080, 4, {389,10,9,8}},
+{ 280140, 4, {29,23,21,20}},
+{ 280260, 4, {173,15,12,9}},
+{ 280296, 4, {229,17,9,8}},
+{ 280320, 4, {73,16,16,15}},
+{ 280512, 4, {487,9,8,8}},
+{ 280584, 4, {433,9,9,8}},
+{ 280728, 4, {557,9,8,7}},
+{ 280800, 4, {27,26,20,20}},
+{ 280872, 4, {83,47,9,8}},
+{ 281088, 4, {61,18,16,16}},
+{ 281160, 4, {71,22,15,12}},
+{ 281232, 4, {31,24,21,18}},
+{ 281250, 4, {25,25,25,18}},
+{ 281520, 4, {30,24,23,17}},
+{ 281880, 4, {29,27,20,18}},
+{ 282096, 4, {653,9,8,6}},
+{ 282150, 4, {27,25,22,19}},
+{ 282240, 4, {28,24,21,20}},
+{ 282480, 4, {107,16,15,11}},
+{ 282555, 4, {35,27,23,13}},
+{ 282576, 4, {29,29,21,16}},
+{ 282600, 4, {157,15,12,10}},
+{ 282744, 4, {28,27,22,17}},
+{ 282816, 4, {491,9,8,8}},
+{ 282960, 4, {131,15,12,12}},
+{ 283050, 4, {37,25,18,17}},
+{ 283176, 4, {27,24,23,19}},
+{ 283200, 4, {59,20,16,15}},
+{ 283248, 4, {281,14,9,8}},
+{ 283392, 4, {41,24,18,16}},
+{ 283464, 4, {127,31,9,8}},
+{ 283500, 4, {27,25,21,20}},
+{ 283752, 4, {563,9,8,7}},
+{ 283860, 4, {83,19,15,12}},
+{ 283920, 4, {26,26,21,20}},
+{ 284256, 4, {47,21,18,16}},
+{ 284328, 4, {359,11,9,8}},
+{ 284400, 4, {79,16,15,15}},
+{ 284472, 4, {439,9,9,8}},
+{ 284580, 4, {31,27,20,17}},
+{ 284616, 4, {67,59,9,8}},
+{ 284688, 4, {659,9,8,6}},
+{ 284760, 4, {113,15,14,12}},
+{ 284832, 4, {43,23,18,16}},
+{ 284928, 4, {53,21,16,16}},
+{ 285000, 4, {25,25,24,19}},
+{ 285048, 4, {107,37,9,8}},
+{ 285120, 4, {27,24,22,20}},
+{ 285192, 4, {233,17,9,8}},
+{ 285264, 4, {283,14,9,8}},
+{ 285360, 4, {41,29,16,15}},
+{ 285552, 4, {661,9,8,6}},
+{ 285600, 4, {28,25,24,17}},
+{ 285660, 4, {27,23,23,20}},
+{ 285768, 4, {27,24,21,21}},
+{ 285840, 4, {397,10,9,8}},
+{ 285912, 4, {33,24,19,19}},
+{ 285936, 4, {37,23,21,16}},
+{ 285984, 4, {331,12,9,8}},
+{ 286056, 4, {137,29,9,8}},
+{ 286272, 4, {71,18,16,14}},
+{ 286344, 4, {97,41,9,8}},
+{ 286380, 4, {43,37,15,12}},
+{ 286416, 4, {27,26,24,17}},
+{ 286440, 4, {31,22,21,20}},
+{ 286488, 4, {173,23,9,8}},
+{ 286776, 4, {569,9,8,7}},
+{ 286848, 4, {83,18,16,12}},
+{ 286875, 4, {27,25,25,17}},
+{ 286944, 4, {61,21,16,14}},
+{ 287064, 4, {443,9,9,8}},
+{ 287100, 4, {29,25,22,18}},
+{ 287280, 4, {28,27,20,19}},
+{ 287352, 4, {307,13,9,8}},
+{ 287424, 4, {499,9,8,8}},
+{ 287760, 4, {109,16,15,11}},
+{ 287784, 4, {571,9,8,7}},
+{ 288000, 4, {25,24,24,20}},
+{ 288288, 4, {26,24,22,21}},
+{ 288360, 4, {89,18,15,12}},
+{ 288648, 4, {211,19,9,8}},
+{ 288720, 4, {401,10,9,8}},
+{ 288800, 4, {32,25,19,19}},
+{ 288864, 4, {59,18,17,16}},
+{ 288900, 4, {107,15,15,12}},
+{ 288960, 4, {43,21,20,16}},
+{ 289080, 4, {73,22,15,12}},
+{ 289296, 4, {41,21,21,16}},
+{ 289440, 4, {67,18,16,15}},
+{ 289575, 4, {33,27,25,13}},
+{ 289680, 4, {71,17,16,15}},
+{ 289728, 4, {503,9,8,8}},
+{ 289800, 4, {25,24,23,21}},
+{ 289980, 4, {179,15,12,9}},
+{ 290016, 4, {53,19,18,16}},
+{ 290232, 4, {139,29,9,8}},
+{ 290250, 4, {43,25,18,15}},
+{ 290304, 4, {24,24,24,21}},
+{ 290376, 4, {109,37,9,8}},
+{ 290400, 4, {25,24,22,22}},
+{ 290664, 4, {367,11,9,8}},
+{ 290736, 4, {673,9,8,6}},
+{ 290808, 4, {577,9,8,7}},
+{ 290880, 4, {101,16,15,12}},
+{ 290952, 4, {449,9,9,8}},
+{ 291096, 4, {311,13,9,8}},
+{ 291168, 4, {337,12,9,8}},
+{ 291312, 4, {34,24,21,17}},
+{ 291600, 4, {27,27,20,20}},
+{ 291648, 4, {31,28,21,16}},
+{ 292320, 4, {29,24,21,20}},
+{ 292392, 4, {131,31,9,8}},
+{ 292464, 4, {677,9,8,6}},
+{ 292500, 4, {26,25,25,18}},
+{ 292536, 4, {239,17,9,8}},
+{ 292560, 4, {53,23,16,15}},
+{ 292656, 4, {67,21,16,13}},
+{ 292740, 4, {41,21,20,17}},
+{ 292800, 4, {61,20,16,15}},
+{ 292950, 4, {31,25,21,18}},
+{ 292968, 4, {313,13,9,8}},
+{ 293184, 4, {509,9,8,8}},
+{ 293220, 4, {181,15,12,9}},
+{ 293280, 4, {47,26,16,15}},
+{ 293400, 4, {163,15,12,10}},
+{ 293625, 4, {29,27,25,15}},
+{ 293760, 4, {30,24,24,17}},
+{ 293940, 4, {71,23,15,12}},
+{ 294000, 4, {28,25,21,20}},
+{ 294264, 4, {67,61,9,8}},
+{ 294300, 4, {109,15,15,12}},
+{ 294336, 4, {73,18,16,14}},
+{ 294480, 4, {409,10,9,8}},
+{ 294840, 4, {27,26,21,20}},
+{ 294975, 4, {27,25,23,19}},
+{ 294984, 4, {241,17,9,8}},
+{ 295020, 4, {149,15,12,11}},
+{ 295056, 4, {683,9,8,6}},
+{ 295260, 4, {37,21,20,19}},
+{ 295344, 4, {293,14,9,8}},
+{ 295416, 4, {373,11,9,8}},
+{ 295488, 4, {27,24,24,19}},
+{ 295596, 4, {28,27,23,17}},
+{ 295740, 4, {53,31,15,12}},
+{ 295776, 4, {79,18,16,13}},
+{ 295800, 4, {29,25,24,17}},
+{ 295848, 4, {587,9,8,7}},
+{ 295920, 4, {137,15,12,12}},
+{ 296100, 4, {47,21,20,15}},
+{ 296136, 4, {457,9,9,8}},
+{ 296352, 4, {28,24,21,21}},
+{ 296400, 4, {26,25,24,19}},
+{ 296424, 4, {179,23,9,8}},
+{ 296640, 4, {103,16,15,12}},
+{ 296712, 4, {317,13,9,8}},
+{ 296820, 4, {97,17,15,12}},
+{ 296856, 4, {31,24,21,19}},
+{ 297000, 4, {27,25,22,20}},
+{ 297180, 4, {127,15,13,12}},
+{ 297216, 4, {43,24,18,16}},
+{ 297360, 4, {59,21,16,15}},
+{ 297432, 4, {27,27,24,17}},
+{ 297540, 4, {29,27,20,19}},
+{ 297675, 4, {27,25,21,21}},
+{ 297792, 4, {47,22,18,16}},
+{ 297840, 4, {73,17,16,15}},
+{ 298080, 4, {27,24,23,20}},
+{ 298152, 4, {101,41,9,8}},
+{ 298320, 4, {113,16,15,11}},
+{ 298350, 4, {27,26,25,17}},
+{ 298368, 4, {37,24,21,16}},
+{ 298512, 4, {691,9,8,6}},
+{ 298656, 4, {61,18,17,16}},
+{ 298728, 4, {461,9,9,8}},
+{ 298800, 4, {83,16,15,15}},
+{ 298872, 4, {593,9,8,7}},
+{ 298980, 4, {151,15,12,11}},
+{ 299040, 4, {89,16,15,14}},
+{ 299280, 4, {43,29,16,15}},
+{ 299376, 4, {27,24,22,21}},
+{ 299460, 4, {31,23,21,20}},
+{ 299700, 4, {37,25,18,18}},
+{ 299736, 4, {181,23,9,8}},
+{ 299808, 4, {347,12,9,8}},
+{ 300000, 4, {25,25,24,20}},
+{ 300024, 4, {463,9,9,8}},
+{ 300048, 4, {47,21,19,16}},
+{ 300096, 4, {521,9,8,8}},
+{ 300150, 4, {29,25,23,18}},
+{ 300168, 4, {379,11,9,8}},
+{ 300240, 4, {139,15,12,12}},
+{ 300312, 4, {97,43,9,8}},
+{ 300600, 4, {167,15,12,10}},
+{ 300960, 4, {30,24,22,19}},
+{ 301032, 4, {113,37,9,8}},
+{ 301176, 4, {89,47,9,8}},
+{ 301248, 4, {523,9,8,8}},
+{ 301320, 4, {31,27,20,18}},
+{ 301392, 4, {26,24,23,21}},
+{ 301464, 4, {79,53,9,8}},
+{ 301536, 4, {349,12,9,8}},
+{ 301608, 4, {71,59,9,8}},
+{ 301644, 4, {28,27,21,19}},
+{ 301680, 4, {419,10,9,8}},
+{ 301896, 4, {599,9,8,7}},
+{ 302064, 4, {31,29,21,16}},
+{ 302220, 4, {73,23,15,12}},
+{ 302400, 4, {25,24,24,21}},
+{ 302580, 4, {41,41,15,12}},
+{ 302616, 4, {467,9,9,8}},
+{ 302640, 4, {97,16,15,13}},
+{ 302736, 4, {53,21,17,16}},
+{ 302832, 4, {701,9,8,6}},
+{ 302904, 4, {601,9,8,7}},
+{ 303072, 4, {41,22,21,16}},
+{ 303120, 4, {421,10,9,8}},
+{ 303264, 4, {27,26,24,18}},
+{ 303336, 4, {383,11,9,8}},
+{ 303360, 4, {79,16,16,15}},
+{ 303408, 4, {43,21,21,16}},
+{ 303600, 4, {25,24,23,22}},
+{ 303750, 4, {27,25,25,18}},
+{ 304000, 4, {32,25,20,19}},
+{ 304056, 4, {103,41,9,8}},
+{ 304200, 4, {26,26,25,18}},
+{ 304380, 4, {89,19,15,12}},
+{ 304500, 4, {29,25,21,20}},
+{ 304800, 4, {127,16,15,10}},
+{ 304992, 4, {353,12,9,8}},
+{ 305040, 4, {41,31,16,15}},
+{ 305064, 4, {223,19,9,8}},
+{ 305100, 4, {113,15,15,12}},
+{ 305184, 4, {33,32,17,17}},
+{ 305235, 4, {35,27,19,17}},
+{ 305280, 4, {53,20,18,16}},
+{ 305520, 4, {67,19,16,15}},
+{ 305760, 4, {28,26,21,20}},
+{ 305784, 4, {137,31,9,8}},
+{ 305856, 4, {59,18,18,16}},
+{ 305928, 4, {607,9,8,7}},
+{ 306000, 4, {30,25,24,17}},
+{ 306180, 4, {27,27,21,20}},
+{ 306288, 4, {709,9,8,6}},
+{ 306540, 4, {131,15,13,12}},
+{ 306720, 4, {71,18,16,15}},
+{ 306900, 4, {31,25,22,18}},
+{ 306936, 4, {29,24,21,21}},
+{ 307008, 4, {41,26,18,16}},
+{ 307020, 4, {43,21,20,17}},
+{ 307125, 4, {35,27,25,13}},
+{ 307224, 4, {251,17,9,8}},
+{ 307440, 4, {61,21,16,15}},
+{ 307584, 4, {89,18,16,12}},
+{ 307800, 4, {27,25,24,19}},
+{ 307980, 4, {59,29,15,12}},
+{ 308088, 4, {389,11,9,8}},
+{ 308160, 4, {107,16,15,12}},
+{ 308448, 4, {28,27,24,17}},
+{ 308736, 4, {67,18,16,16}},
+{ 308880, 4, {27,26,22,20}},
+{ 308952, 4, {613,9,8,7}},
+{ 309024, 4, {37,29,18,16}},
+{ 309060, 4, {101,17,15,12}},
+{ 309420, 4, {191,15,12,9}},
+{ 309456, 4, {307,14,9,8}},
+{ 309816, 4, {331,13,9,8}},
+{ 309825, 4, {27,27,25,17}},
+{ 309960, 4, {41,21,20,18}},
+{ 310104, 4, {73,59,9,8}},
+{ 310128, 4, {71,21,16,13}},
+{ 310176, 4, {359,12,9,8}},
+{ 310248, 4, {139,31,9,8}},
+{ 310320, 4, {431,10,9,8}},
+{ 310392, 4, {479,9,9,8}},
+{ 310464, 4, {28,24,22,21}},
+{ 310500, 4, {27,25,23,20}},
+{ 310536, 4, {227,19,9,8}},
+{ 310608, 4, {719,9,8,6}},
+{ 310752, 4, {83,18,16,13}},
+{ 310800, 4, {37,21,20,20}},
+{ 310860, 4, {157,15,12,11}},
+{ 310968, 4, {617,9,8,7}},
+{ 311040, 4, {27,24,24,20}},
+{ 311112, 4, {149,29,9,8}},
+{ 311328, 4, {47,23,18,16}},
+{ 311400, 4, {173,15,12,10}},
+{ 311520, 4, {59,22,16,15}},
+{ 311616, 4, {541,9,8,8}},
+{ 311640, 4, {53,21,20,14}},
+{ 311760, 4, {433,10,9,8}},
+{ 311832, 4, {71,61,9,8}},
+{ 311850, 4, {27,25,22,21}},
+{ 311904, 4, {32,27,19,19}},
+{ 311976, 4, {619,9,8,7}},
+{ 312000, 4, {26,25,24,20}},
+{ 312120, 4, {34,27,20,17}},
+{ 312480, 4, {31,24,21,20}},
+{ 312660, 4, {193,15,12,9}},
+{ 312696, 4, {101,43,9,8}},
+{ 312840, 4, {79,22,15,12}},
+{ 312984, 4, {27,24,23,21}},
+{ 313020, 4, {47,37,15,12}},
+{ 313200, 4, {29,27,20,20}},
+{ 313272, 4, {229,19,9,8}},
+{ 313488, 4, {311,14,9,8}},
+{ 313632, 4, {27,24,22,22}},
+{ 313650, 4, {41,25,18,17}},
+{ 313875, 4, {31,27,25,15}},
+{ 313920, 4, {109,16,15,12}},
+{ 314064, 4, {727,9,8,6}},
+{ 314280, 4, {97,18,15,12}},
+{ 314400, 4, {131,16,15,10}},
+{ 314424, 4, {397,11,9,8}},
+{ 314496, 4, {26,24,24,21}},
+{ 314568, 4, {257,17,9,8}},
+{ 314640, 4, {30,24,23,19}},
+{ 314928, 4, {27,27,24,18}},
+{ 315000, 4, {25,25,24,21}},
+{ 315072, 4, {547,9,8,8}},
+{ 315120, 4, {101,16,15,13}},
+{ 315168, 4, {67,21,16,14}},
+{ 315180, 4, {103,17,15,12}},
+{ 315288, 4, {151,29,9,8}},
+{ 315360, 4, {73,18,16,15}},
+{ 315432, 4, {337,13,9,8}},
+{ 315504, 4, {313,14,9,8}},
+{ 315576, 4, {487,9,9,8}},
+{ 315840, 4, {47,21,20,16}},
+{ 315864, 4, {107,41,9,8}},
+{ 315900, 4, {27,26,25,18}},
+{ 316008, 4, {28,27,22,19}},
+{ 316080, 4, {439,10,9,8}},
+{ 316200, 4, {31,25,24,17}},
+{ 316224, 4, {61,18,18,16}},
+{ 316296, 4, {191,23,9,8}},
+{ 316350, 4, {37,25,19,18}},
+{ 316656, 4, {733,9,8,6}},
+{ 316680, 4, {29,26,21,20}},
+{ 316728, 4, {83,53,9,8}},
+{ 316800, 4, {25,24,24,22}},
+{ 316848, 4, {41,23,21,16}},
+{ 317016, 4, {37,24,21,17}},
+{ 317088, 4, {367,12,9,8}},
+{ 317184, 4, {59,21,16,16}},
+{ 317250, 4, {47,25,18,15}},
+{ 317340, 4, {43,41,15,12}},
+{ 317400, 4, {25,24,23,23}},
+{ 317520, 4, {28,27,21,20}},
+{ 317592, 4, {401,11,9,8}},
+{ 317856, 4, {43,22,21,16}},
+{ 318024, 4, {631,9,8,7}},
+{ 318060, 4, {31,27,20,19}},
+{ 318168, 4, {491,9,9,8}},
+{ 318240, 4, {30,26,24,17}},
+{ 318420, 4, {61,29,15,12}},
+{ 318528, 4, {79,18,16,14}},
+{ 318720, 4, {83,16,16,15}},
+{ 318744, 4, {233,19,9,8}},
+{ 318864, 4, {73,21,16,13}},
+{ 318888, 4, {103,43,9,8}},
+{ 318960, 4, {443,10,9,8}},
+{ 319140, 4, {197,15,12,9}},
+{ 319200, 4, {28,25,24,19}},
+{ 319248, 4, {739,9,8,6}},
+{ 319410, 4, {35,27,26,13}},
+{ 319464, 4, {29,27,24,17}},
+{ 319536, 4, {317,14,9,8}},
+{ 319608, 4, {193,23,9,8}},
+{ 319920, 4, {43,31,16,15}},
+{ 320000, 4, {32,25,20,20}},
+{ 320040, 4, {127,15,14,12}},
+{ 320112, 4, {27,26,24,19}},
+{ 320400, 4, {89,16,15,15}},
+{ 320544, 4, {53,21,18,16}},
+{ 320580, 4, {137,15,13,12}},
+{ 320616, 4, {73,61,9,8}},
+{ 320625, 4, {27,25,25,19}},
+{ 320760, 4, {27,27,22,20}},
+{ 320832, 4, {557,9,8,8}},
+{ 320850, 4, {31,25,23,18}},
+{ 320976, 4, {743,9,8,6}},
+{ 321300, 4, {28,27,25,17}},
+{ 321360, 4, {103,16,15,13}},
+{ 321552, 4, {29,24,22,21}},
+{ 321600, 4, {67,20,16,15}},
+{ 321768, 4, {109,41,9,8}},
+{ 321840, 4, {149,15,12,12}},
+{ 321912, 4, {263,17,9,8}},
+{ 321984, 4, {43,26,18,16}},
+{ 322080, 4, {61,22,16,15}},
+{ 322200, 4, {179,15,12,10}},
+{ 322272, 4, {373,12,9,8}},
+{ 322320, 4, {79,17,16,15}},
+{ 322380, 4, {199,15,12,9}},
+{ 322740, 4, {163,15,12,11}},
+{ 322848, 4, {59,19,18,16}},
+{ 322896, 4, {31,31,21,16}},
+{ 322920, 4, {27,26,23,20}},
+{ 323064, 4, {641,9,8,7}},
+{ 323136, 4, {32,27,22,17}},
+{ 323208, 4, {67,67,9,8}},
+{ 323232, 4, {37,26,21,16}},
+{ 323280, 4, {449,10,9,8}},
+{ 323352, 4, {499,9,9,8}},
+{ 323760, 4, {71,19,16,15}},
+{ 323928, 4, {409,11,9,8}},
+{ 324000, 4, {27,25,24,20}},
+{ 324072, 4, {643,9,8,7}},
+{ 324288, 4, {563,9,8,8}},
+{ 324432, 4, {751,9,8,6}},
+{ 324576, 4, {28,24,23,21}},
+{ 324792, 4, {347,13,9,8}},
+{ 324864, 4, {47,24,18,16}},
+{ 325080, 4, {43,21,20,18}},
+{ 325260, 4, {139,15,13,12}},
+{ 325440, 4, {113,16,15,12}},
+{ 325500, 4, {31,25,21,20}},
+{ 325584, 4, {34,24,21,19}},
+{ 325680, 4, {59,23,16,15}},
+{ 325800, 4, {181,15,12,10}},
+{ 325920, 4, {97,16,15,14}},
+{ 325944, 4, {503,9,9,8}},
+{ 326025, 4, {27,25,23,21}},
+{ 326088, 4, {647,9,8,7}},
+{ 326160, 4, {151,15,12,12}},
+{ 326232, 4, {197,23,9,8}},
+{ 326250, 4, {29,25,25,18}},
+{ 326340, 4, {37,21,21,20}},
+{ 326592, 4, {27,24,24,21}},
+{ 326664, 4, {349,13,9,8}},
+{ 326700, 4, {27,25,22,22}},
+{ 326952, 4, {239,19,9,8}},
+{ 327024, 4, {757,9,8,6}},
+{ 327060, 4, {79,23,15,12}},
+{ 327120, 4, {47,29,16,15}},
+{ 327168, 4, {71,18,16,16}},
+{ 327180, 4, {41,21,20,19}},
+{ 327240, 4, {101,18,15,12}},
+{ 327420, 4, {107,17,15,12}},
+{ 327456, 4, {379,12,9,8}},
+{ 327600, 4, {26,25,24,21}},
+{ 327744, 4, {569,9,8,8}},
+{ 327816, 4, {157,29,9,8}},
+{ 327888, 4, {27,24,23,22}},
+{ 327936, 4, {61,21,16,16}},
+{ 328032, 4, {67,18,17,16}},
+{ 328050, 4, {27,27,25,18}},
+{ 328104, 4, {31,24,21,21}},
+{ 328248, 4, {97,47,9,8}},
+{ 328320, 4, {30,24,24,19}},
+{ 328560, 4, {37,37,16,15}},
+{ 328680, 4, {83,22,15,12}},
+{ 328752, 4, {761,9,8,6}},
+{ 328800, 4, {137,16,15,10}},
+{ 328860, 4, {29,27,21,20}},
+{ 328896, 4, {571,9,8,8}},
+{ 328950, 4, {43,25,18,17}},
+{ 329040, 4, {457,10,9,8}},
+{ 329112, 4, {653,9,8,7}},
+{ 329220, 4, {59,31,15,12}},
+{ 329256, 4, {269,17,9,8}},
+{ 329280, 4, {28,28,21,20}},
+{ 329544, 4, {199,23,9,8}},
+{ 329688, 4, {241,19,9,8}},
+{ 329832, 4, {509,9,9,8}},
+{ 330000, 4, {25,25,24,22}},
+{ 330120, 4, {131,15,14,12}},
+{ 330336, 4, {37,31,18,16}},
+{ 330372, 4, {28,27,23,19}},
+{ 330408, 4, {353,13,9,8}},
+{ 330480, 4, {30,27,24,17}},
+{ 330600, 4, {29,25,24,19}},
+{ 330624, 4, {41,24,21,16}},
+{ 330660, 4, {167,15,12,11}},
+{ 330720, 4, {53,26,16,15}},
+{ 330912, 4, {383,12,9,8}},
+{ 331056, 4, {33,24,22,19}},
+{ 331200, 4, {25,24,24,23}},
+{ 331272, 4, {107,43,9,8}},
+{ 331632, 4, {47,21,21,16}},
+{ 331695, 4, {35,27,27,13}},
+{ 331704, 4, {271,17,9,8}},
+{ 331740, 4, {97,19,15,12}},
+{ 331848, 4, {419,11,9,8}},
+{ 331920, 4, {461,10,9,8}},
+{ 332100, 4, {41,25,18,18}},
+{ 332136, 4, {659,9,8,7}},
+{ 332208, 4, {769,9,8,6}},
+{ 332304, 4, {43,23,21,16}},
+{ 332352, 4, {577,9,8,8}},
+{ 332424, 4, {27,27,24,19}},
+{ 332568, 4, {149,31,9,8}},
+{ 332640, 4, {28,27,22,20}},
+{ 332775, 4, {29,27,25,17}},
+{ 332820, 4, {43,43,15,12}},
+{ 332880, 4, {73,19,16,15}},
+{ 333000, 4, {37,25,20,18}},
+{ 333144, 4, {661,9,8,7}},
+{ 333216, 4, {89,18,16,13}},
+{ 333360, 4, {463,10,9,8}},
+{ 333396, 4, {28,27,21,21}},
+{ 333432, 4, {421,11,9,8}},
+{ 333450, 4, {27,26,25,19}},
+{ 333540, 4, {109,17,15,12}},
+{ 333564, 4, {33,28,19,19}},
+{ 333576, 4, {113,41,9,8}},
+{ 333600, 4, {139,16,15,10}},
+{ 333648, 4, {331,14,9,8}},
+{ 333720, 4, {103,18,15,12}},
+{ 333792, 4, {61,19,18,16}},
+{ 333840, 4, {107,16,15,13}},
+{ 333900, 4, {53,21,20,15}},
+{ 333936, 4, {773,9,8,6}},
+{ 333984, 4, {71,21,16,14}},
+{ 334125, 4, {33,27,25,15}},
+{ 334152, 4, {28,27,26,17}},
+{ 334400, 4, {32,25,22,19}},
+{ 334656, 4, {83,18,16,14}},
+{ 334800, 4, {31,27,20,20}},
+{ 335232, 4, {97,18,16,12}},
+{ 335280, 4, {127,16,15,11}},
+{ 335340, 4, {27,27,23,20}},
+{ 335580, 4, {47,21,20,17}},
+{ 335592, 4, {79,59,9,8}},
+{ 335664, 4, {37,24,21,18}},
+{ 335808, 4, {53,22,18,16}},
+{ 336000, 4, {28,25,24,20}},
+{ 336024, 4, {359,13,9,8}},
+{ 336096, 4, {389,12,9,8}},
+{ 336168, 4, {29,24,23,21}},
+{ 336240, 4, {467,10,9,8}},
+{ 336384, 4, {73,18,16,16}},
+{ 336720, 4, {61,23,16,15}},
+{ 336960, 4, {27,26,24,20}},
+{ 337008, 4, {59,21,17,16}},
+{ 337032, 4, {151,31,9,8}},
+{ 337365, 4, {35,27,21,17}},
+{ 337464, 4, {109,43,9,8}},
+{ 337500, 4, {27,25,25,20}},
+{ 337608, 4, {521,9,9,8}},
+{ 337680, 4, {67,21,16,15}},
+{ 337824, 4, {32,27,23,17}},
+{ 338112, 4, {587,9,8,8}},
+{ 338256, 4, {29,27,24,18}},
+{ 338328, 4, {127,37,9,8}},
+{ 338352, 4, {53,21,19,16}},
+{ 338520, 4, {31,26,21,20}},
+{ 338640, 4, {83,17,16,15}},
+{ 338688, 4, {28,24,24,21}},
+{ 338904, 4, {523,9,9,8}},
+{ 339048, 4, {277,17,9,8}},
+{ 339120, 4, {157,15,12,12}},
+{ 339192, 4, {673,9,8,7}},
+{ 339300, 4, {29,26,25,18}},
+{ 339360, 4, {101,16,15,14}},
+{ 339624, 4, {89,53,9,8}},
+{ 339660, 4, {37,27,20,17}},
+{ 339696, 4, {337,14,9,8}},
+{ 339840, 4, {59,20,18,16}},
+{ 339984, 4, {787,9,8,6}},
+{ 340080, 4, {109,16,15,13}},
+{ 340200, 4, {27,25,24,21}},
+{ 340344, 4, {163,29,9,8}},
+{ 340380, 4, {61,31,15,12}},
+{ 340704, 4, {26,26,24,21}},
+{ 340800, 4, {71,20,16,15}},
+{ 341040, 4, {29,28,21,20}},
+{ 341145, 4, {35,27,19,19}},
+{ 341208, 4, {677,9,8,7}},
+{ 341280, 4, {79,18,16,15}},
+{ 341352, 4, {431,11,9,8}},
+{ 341496, 4, {31,27,24,17}},
+{ 341550, 4, {27,25,23,22}},
+{ 341568, 4, {593,9,8,8}},
+{ 341760, 4, {89,16,16,15}},
+{ 341784, 4, {101,47,9,8}},
+{ 341820, 4, {211,15,12,9}},
+{ 341880, 4, {37,22,21,20}},
+{ 342000, 4, {30,25,24,19}},
+{ 342144, 4, {27,24,24,22}},
+{ 342432, 4, {41,29,18,16}},
+{ 342504, 4, {71,67,9,8}},
+{ 342540, 4, {173,15,12,11}},
+{ 342720, 4, {30,28,24,17}},
+{ 342792, 4, {27,24,23,23}},
+{ 342900, 4, {127,15,15,12}},
+{ 342936, 4, {433,11,9,8}},
+{ 343008, 4, {397,12,9,8}},
+{ 343140, 4, {43,21,20,19}},
+{ 343200, 4, {26,25,24,22}},
+{ 343368, 4, {251,19,9,8}},
+{ 343392, 4, {73,21,16,14}},
+{ 343512, 4, {367,13,9,8}},
+{ 343620, 4, {83,23,15,12}},
+{ 343728, 4, {31,24,22,21}},
+{ 343800, 4, {191,15,12,10}},
+{ 343944, 4, {281,17,9,8}},
+{ 344232, 4, {683,9,8,7}},
+{ 344250, 4, {30,27,25,17}},
+{ 344304, 4, {797,9,8,6}},
+{ 344400, 4, {41,21,20,20}},
+{ 344520, 4, {29,27,22,20}},
+{ 344736, 4, {28,27,24,19}},
+{ 344880, 4, {479,10,9,8}},
+{ 345000, 4, {25,25,24,23}},
+{ 345024, 4, {599,9,8,8}},
+{ 345072, 4, {79,21,16,13}},
+{ 345240, 4, {137,15,14,12}},
+{ 345420, 4, {101,19,15,12}},
+{ 345600, 4, {25,24,24,24}},
+{ 345780, 4, {113,17,15,12}},
+{ 345840, 4, {131,16,15,11}},
+{ 346080, 4, {103,16,15,14}},
+{ 346104, 4, {33,24,23,19}},
+{ 346176, 4, {601,9,8,8}},
+{ 346275, 4, {27,27,25,19}},
+{ 346392, 4, {283,17,9,8}},
+{ 346464, 4, {401,12,9,8}},
+{ 346560, 4, {32,30,19,19}},
+{ 346680, 4, {107,18,15,12}},
+{ 346752, 4, {43,24,21,16}},
+{ 346800, 4, {34,25,24,17}},
+{ 346860, 4, {47,41,15,12}},
+{ 346920, 4, {59,21,20,14}},
+{ 346968, 4, {79,61,9,8}},
+{ 347004, 4, {28,27,27,17}},
+{ 347328, 4, {67,18,18,16}},
+{ 347400, 4, {193,15,12,10}},
+{ 347424, 4, {47,22,21,16}},
+{ 347616, 4, {71,18,17,16}},
+{ 347688, 4, {439,11,9,8}},
+{ 347760, 4, {28,27,23,20}},
+{ 348000, 4, {29,25,24,20}},
+{ 348096, 4, {37,28,21,16}},
+{ 348264, 4, {691,9,8,7}},
+{ 348300, 4, {43,25,18,18}},
+{ 348432, 4, {61,21,17,16}},
+{ 348480, 4, {30,24,22,22}},
+{ 348552, 4, {103,47,9,8}},
+{ 348660, 4, {149,15,13,12}},
+{ 348696, 4, {167,29,9,8}},
+{ 348750, 4, {31,25,25,18}},
+{ 348840, 4, {34,27,20,19}},
+{ 348984, 4, {131,37,9,8}},
+{ 349056, 4, {101,18,16,12}},
+{ 349128, 4, {373,13,9,8}},
+{ 349200, 4, {97,16,15,15}},
+{ 349272, 4, {28,27,22,21}},
+{ 349416, 4, {211,23,9,8}},
+{ 349488, 4, {809,9,8,6}},
+{ 349600, 4, {32,25,23,19}},
+{ 349632, 4, {607,9,8,8}},
+{ 349650, 4, {37,25,21,18}},
+{ 349680, 4, {47,31,16,15}},
+{ 349740, 4, {67,29,15,12}},
+{ 349776, 4, {347,14,9,8}},
+{ 349848, 4, {113,43,9,8}},
+{ 349920, 4, {27,27,24,20}},
+{ 350280, 4, {139,15,14,12}},
+{ 350352, 4, {811,9,8,6}},
+{ 350400, 4, {73,20,16,15}},
+{ 350424, 4, {157,31,9,8}},
+{ 350550, 4, {41,25,19,18}},
+{ 350568, 4, {541,9,9,8}},
+{ 350640, 4, {487,10,9,8}},
+{ 350784, 4, {29,24,24,21}},
+{ 350856, 4, {443,11,9,8}},
+{ 351000, 4, {27,26,25,20}},
+{ 351072, 4, {53,23,18,16}},
+{ 351288, 4, {41,24,21,17}},
+{ 351360, 4, {61,20,18,16}},
+{ 351540, 4, {31,27,21,20}},
+{ 351576, 4, {257,19,9,8}},
+{ 351792, 4, {349,14,9,8}},
+{ 351936, 4, {47,26,18,16}},
+{ 352000, 4, {32,25,22,20}},
+{ 352080, 4, {163,15,12,12}},
+{ 352152, 4, {73,67,9,8}},
+{ 352260, 4, {103,19,15,12}},
+{ 352350, 4, {29,27,25,18}},
+{ 352440, 4, {89,22,15,12}},
+{ 352512, 4, {32,27,24,17}},
+{ 352560, 4, {113,16,15,13}},
+{ 352584, 4, {83,59,9,8}},
+{ 352800, 4, {28,25,24,21}},
+{ 352980, 4, {53,37,15,12}},
+{ 353088, 4, {613,9,8,8}},
+{ 353160, 4, {109,18,15,12}},
+{ 353220, 4, {29,29,21,20}},
+{ 353304, 4, {701,9,8,7}},
+{ 353340, 4, {151,15,13,12}},
+{ 353376, 4, {409,12,9,8}},
+{ 353400, 4, {31,25,24,19}},
+{ 353520, 4, {491,10,9,8}},
+{ 353700, 4, {131,15,15,12}},
+{ 353760, 4, {67,22,16,15}},
+{ 353808, 4, {27,26,24,21}},
+{ 354312, 4, {37,24,21,19}},
+{ 354375, 4, {27,25,25,21}},
+{ 354420, 4, {179,15,12,11}},
+{ 354456, 4, {547,9,9,8}},
+{ 354600, 4, {197,15,12,10}},
+{ 354672, 4, {821,9,8,6}},
+{ 354744, 4, {379,13,9,8}},
+{ 354960, 4, {30,29,24,17}},
+{ 355320, 4, {47,21,20,18}},
+{ 355392, 4, {617,9,8,8}},
+{ 355536, 4, {823,9,8,6}},
+{ 355608, 4, {449,11,9,8}},
+{ 355680, 4, {30,26,24,19}},
+{ 355725, 4, {31,27,25,17}},
+{ 355824, 4, {353,14,9,8}},
+{ 355968, 4, {103,18,16,12}},
+{ 356160, 4, {53,21,20,16}},
+{ 356265, 4, {35,29,27,13}},
+{ 356400, 4, {27,25,24,22}},
+{ 356544, 4, {619,9,8,8}},
+{ 356832, 4, {59,21,18,16}},
+{ 357048, 4, {29,27,24,19}},
+{ 357075, 4, {27,25,23,23}},
+{ 357264, 4, {827,9,8,6}},
+{ 357336, 4, {709,9,8,7}},
+{ 357408, 4, {73,18,17,16}},
+{ 357420, 4, {37,23,21,20}},
+{ 357600, 4, {149,16,15,10}},
+{ 357696, 4, {27,24,24,23}},
+{ 357750, 4, {53,25,18,15}},
+{ 357840, 4, {71,21,16,15}},
+{ 358128, 4, {829,9,8,6}},
+{ 358176, 4, {41,26,21,16}},
+{ 358200, 4, {199,15,12,10}},
+{ 358380, 4, {181,15,12,11}},
+{ 358488, 4, {383,13,9,8}},
+{ 358560, 4, {83,18,16,15}},
+{ 358632, 4, {293,17,9,8}},
+{ 358680, 4, {61,21,20,14}},
+{ 358800, 4, {26,25,24,23}},
+{ 358848, 4, {89,18,16,14}},
+{ 359100, 4, {28,27,25,19}},
+{ 359136, 4, {43,29,18,16}},
+{ 359280, 4, {499,10,9,8}},
+{ 359352, 4, {31,24,23,21}},
+{ 359520, 4, {107,16,15,14}},
+{ 359550, 4, {47,25,18,17}},
+{ 359640, 4, {37,27,20,18}},
+{ 359784, 4, {263,19,9,8}},
+{ 359856, 4, {28,28,27,17}},
+{ 360000, 4, {25,25,24,24}},
+{ 360180, 4, {29,27,23,20}},
+{ 360192, 4, {67,21,16,16}},
+{ 360240, 4, {79,19,16,15}},
+{ 360528, 4, {37,29,21,16}},
+{ 360720, 4, {167,15,12,12}},
+{ 360936, 4, {557,9,9,8}},
+{ 361152, 4, {32,27,22,19}},
+{ 361200, 4, {43,21,20,20}},
+{ 361224, 4, {173,29,9,8}},
+{ 361260, 4, {223,15,12,9}},
+{ 361584, 4, {31,27,24,18}},
+{ 361620, 4, {41,21,21,20}},
+{ 361680, 4, {137,16,15,11}},
+{ 361872, 4, {359,14,9,8}},
+{ 361944, 4, {457,11,9,8}},
+{ 362016, 4, {419,12,9,8}},
+{ 362088, 4, {107,47,9,8}},
+{ 362160, 4, {503,10,9,8}},
+{ 362376, 4, {719,9,8,7}},
+{ 362400, 4, {151,16,15,10}},
+{ 362448, 4, {839,9,8,6}},
+{ 362544, 4, {83,21,16,13}},
+{ 362700, 4, {31,26,25,18}},
+{ 362880, 4, {28,27,24,20}},
+{ 362952, 4, {71,71,9,8}},
+{ 363120, 4, {89,17,16,15}},
+{ 363168, 4, {97,18,16,13}},
+{ 363216, 4, {47,23,21,16}},
+{ 363456, 4, {631,9,8,8}},
+{ 363600, 4, {101,16,15,15}},
+{ 363744, 4, {421,12,9,8}},
+{ 363780, 4, {47,43,15,12}},
+{ 363816, 4, {163,31,9,8}},
+{ 364032, 4, {79,18,16,16}},
+{ 364080, 4, {41,37,16,15}},
+{ 364104, 4, {389,13,9,8}},
+{ 364320, 4, {30,24,23,22}},
+{ 364500, 4, {27,27,25,20}},
+{ 364536, 4, {83,61,9,8}},
+{ 364560, 4, {31,28,21,20}},
+{ 364800, 4, {32,25,24,19}},
+{ 364824, 4, {563,9,9,8}},
+{ 364968, 4, {137,37,9,8}},
+{ 365040, 4, {27,26,26,20}},
+{ 365112, 4, {461,11,9,8}},
+{ 365148, 4, {28,27,23,21}},
+{ 365400, 4, {29,25,24,21}},
+{ 365760, 4, {127,16,15,12}},
+{ 365904, 4, {28,27,22,22}},
+{ 365940, 4, {107,19,15,12}},
+{ 366048, 4, {41,31,18,16}},
+{ 366120, 4, {113,18,15,12}},
+{ 366240, 4, {109,16,15,14}},
+{ 366300, 4, {37,25,22,18}},
+{ 366336, 4, {53,24,18,16}},
+{ 366408, 4, {727,9,8,7}},
+{ 366480, 4, {509,10,9,8}},
+{ 366624, 4, {67,19,18,16}},
+{ 366696, 4, {463,11,9,8}},
+{ 366912, 4, {28,26,24,21}},
+{ 366960, 4, {139,16,15,11}},
+{ 367200, 4, {30,30,24,17}},
+{ 367380, 4, {157,15,13,12}},
+{ 367416, 4, {27,27,24,21}},
+{ 367650, 4, {43,25,19,18}},
+{ 367740, 4, {227,15,12,9}},
+{ 367920, 4, {73,21,16,15}},
+{ 367992, 4, {269,19,9,8}},
+{ 368000, 4, {32,25,23,20}},
+{ 368064, 4, {71,18,18,16}},
+{ 368160, 4, {59,26,16,15}},
+{ 368280, 4, {31,27,22,20}},
+{ 368424, 4, {43,24,21,17}},
+{ 368460, 4, {89,23,15,12}},
+{ 368496, 4, {853,9,8,6}},
+{ 368550, 4, {27,26,25,21}},
+{ 368676, 4, {33,28,21,19}},
+{ 368712, 4, {569,9,9,8}},
+{ 368856, 4, {109,47,9,8}},
+{ 368880, 4, {53,29,16,15}},
+{ 368928, 4, {61,21,18,16}},
+{ 369000, 4, {41,25,20,18}},
+{ 369216, 4, {641,9,8,8}},
+{ 369288, 4, {223,23,9,8}},
+{ 369360, 4, {30,27,24,19}},
+{ 369432, 4, {733,9,8,7}},
+{ 369495, 4, {35,27,23,17}},
+{ 369600, 4, {28,25,24,22}},
+{ 369792, 4, {107,18,16,12}},
+{ 369840, 4, {67,23,16,15}},
+{ 369864, 4, {467,11,9,8}},
+{ 369900, 4, {137,15,15,12}},
+{ 369936, 4, {367,14,9,8}},
+{ 370008, 4, {571,9,9,8}},
+{ 370152, 4, {97,53,9,8}},
+{ 370224, 4, {857,9,8,6}},
+{ 370296, 4, {139,37,9,8}},
+{ 370368, 4, {643,9,8,8}},
+{ 370620, 4, {71,29,15,12}},
+{ 370656, 4, {27,26,24,22}},
+{ 370728, 4, {271,19,9,8}},
+{ 370800, 4, {103,16,15,15}},
+{ 370980, 4, {229,15,12,9}},
+{ 371088, 4, {859,9,8,6}},
+{ 371250, 4, {27,25,25,22}},
+{ 371592, 4, {397,13,9,8}},
+{ 371616, 4, {79,21,16,14}},
+{ 371700, 4, {59,21,20,15}},
+{ 371925, 4, {29,27,25,19}},
+{ 371952, 4, {41,24,21,18}},
+{ 372000, 4, {31,25,24,20}},
+{ 372384, 4, {431,12,9,8}},
+{ 372456, 4, {739,9,8,7}},
+{ 372480, 4, {97,16,16,15}},
+{ 372600, 4, {27,25,24,23}},
+{ 372672, 4, {647,9,8,8}},
+{ 372708, 4, {29,28,27,17}},
+{ 372744, 4, {167,31,9,8}},
+{ 372780, 4, {109,19,15,12}},
+{ 372816, 4, {863,9,8,6}},
+{ 372960, 4, {37,24,21,20}},
+{ 373176, 4, {73,71,9,8}},
+{ 373248, 4, {27,24,24,24}},
+{ 373464, 4, {28,27,26,19}},
+{ 373680, 4, {173,15,12,12}},
+{ 373752, 4, {179,29,9,8}},
+{ 373824, 4, {59,22,18,16}},
+{ 373860, 4, {67,31,15,12}},
+{ 373896, 4, {577,9,9,8}},
+{ 373968, 4, {53,21,21,16}},
+{ 374112, 4, {433,12,9,8}},
+{ 374400, 4, {26,25,24,24}},
+{ 374472, 4, {743,9,8,7}},
+{ 374625, 4, {37,27,25,15}},
+{ 374880, 4, {71,22,16,15}},
+{ 374904, 4, {127,41,9,8}},
+{ 374976, 4, {31,24,24,21}},
+{ 375000, 4, {25,25,25,24}},
+{ 375060, 4, {47,21,20,19}},
+{ 375120, 4, {521,10,9,8}},
+{ 375300, 4, {139,15,15,12}},
+{ 375336, 4, {401,13,9,8}},
+{ 375480, 4, {149,15,14,12}},
+{ 375648, 4, {43,26,21,16}},
+{ 375768, 4, {307,17,9,8}},
+{ 375840, 4, {29,27,24,20}},
+{ 375912, 4, {227,23,9,8}},
+{ 375984, 4, {373,14,9,8}},
+{ 376128, 4, {653,9,8,8}},
+{ 376380, 4, {41,27,20,17}},
+{ 376560, 4, {523,10,9,8}},
+{ 376650, 4, {31,27,25,18}},
+{ 376656, 4, {59,21,19,16}},
+{ 376704, 4, {109,18,16,12}},
+{ 376800, 4, {157,16,15,10}},
+{ 376992, 4, {34,24,22,21}},
+{ 377055, 4, {35,27,21,19}},
+{ 377280, 4, {131,16,15,12}},
+{ 377400, 4, {37,25,24,17}},
+{ 377460, 4, {233,15,12,9}},
+{ 377568, 4, {32,27,23,19}},
+{ 377580, 4, {31,29,21,20}},
+{ 377928, 4, {181,29,9,8}},
+{ 378000, 4, {28,27,25,20}},
+{ 378072, 4, {89,59,9,8}},
+{ 378144, 4, {101,18,16,13}},
+{ 378180, 4, {191,15,12,11}},
+{ 378420, 4, {53,21,20,17}},
+{ 378432, 4, {73,18,18,16}},
+{ 378450, 4, {29,29,25,18}},
+{ 378480, 4, {83,19,16,15}},
+{ 378504, 4, {751,9,8,7}},
+{ 378675, 4, {33,27,25,17}},
+{ 378840, 4, {41,22,21,20}},
+{ 378864, 4, {877,9,8,6}},
+{ 378936, 4, {277,19,9,8}},
+{ 379008, 4, {47,24,21,16}},
+{ 379050, 4, {35,30,19,19}},
+{ 379080, 4, {27,27,26,20}},
+{ 379200, 4, {79,20,16,15}},
+{ 379224, 4, {229,23,9,8}},
+{ 379260, 4, {43,21,21,20}},
+{ 379296, 4, {439,12,9,8}},
+{ 379368, 4, {479,11,9,8}},
+{ 379440, 4, {31,30,24,17}},
+{ 379584, 4, {659,9,8,8}},
+{ 379620, 4, {37,27,20,19}},
+{ 379680, 4, {113,16,15,14}},
+{ 379800, 4, {211,15,12,10}},
+{ 380000, 4, {32,25,25,19}},
+{ 380016, 4, {29,26,24,21}},
+{ 380160, 4, {30,24,24,22}},
+{ 380376, 4, {587,9,9,8}},
+{ 380520, 4, {151,15,14,12}},
+{ 380592, 4, {881,9,8,6}},
+{ 380640, 4, {61,26,16,15}},
+{ 380664, 4, {311,17,9,8}},
+{ 380700, 4, {47,25,18,18}},
+{ 380736, 4, {661,9,8,8}},
+{ 380835, 4, {35,31,27,13}},
+{ 380880, 4, {30,24,23,23}},
+{ 381024, 4, {28,27,24,21}},
+{ 381060, 4, {73,29,15,12}},
+{ 381096, 4, {79,67,9,8}},
+{ 381216, 4, {33,32,19,19}},
+{ 381420, 4, {163,15,13,12}},
+{ 381456, 4, {883,9,8,6}},
+{ 381528, 4, {757,9,8,7}},
+{ 381672, 4, {31,27,24,19}},
+{ 381696, 4, {71,21,16,16}},
+{ 381840, 4, {43,37,16,15}},
+{ 381888, 4, {32,27,26,17}},
+{ 382032, 4, {379,14,9,8}},
+{ 382140, 4, {193,15,12,11}},
+{ 382347, 4, {49,27,17,17}},
+{ 382392, 4, {113,47,9,8}},
+{ 382464, 4, {83,18,16,16}},
+{ 382536, 4, {28,27,23,22}},
+{ 382704, 4, {67,21,17,16}},
+{ 382725, 4, {27,27,25,21}},
+{ 382752, 4, {443,12,9,8}},
+{ 382800, 4, {29,25,24,22}},
+{ 382824, 4, {409,13,9,8}},
+{ 382950, 4, {37,25,23,18}},
+{ 383040, 4, {30,28,24,19}},
+{ 383112, 4, {313,17,9,8}},
+{ 383184, 4, {887,9,8,6}},
+{ 383328, 4, {33,24,22,22}},
+{ 383544, 4, {761,9,8,7}},
+{ 383688, 4, {73,73,9,8}},
+{ 383904, 4, {43,31,18,16}},
+{ 384000, 4, {32,25,24,20}},
+{ 384120, 4, {97,22,15,12}},
+{ 384264, 4, {593,9,9,8}},
+{ 384300, 4, {61,21,20,15}},
+{ 384408, 4, {281,19,9,8}},
+{ 384480, 4, {89,18,16,15}},
+{ 384750, 4, {30,27,25,19}},
+{ 384912, 4, {27,27,24,22}},
+{ 385020, 4, {31,27,23,20}},
+{ 385200, 4, {107,16,15,15}},
+{ 385392, 4, {37,31,21,16}},
+{ 385416, 4, {101,53,9,8}},
+{ 385440, 4, {73,22,16,15}},
+{ 385560, 4, {30,28,27,17}},
+{ 385632, 4, {103,18,16,13}},
+{ 385704, 4, {487,11,9,8}},
+{ 385728, 4, {41,28,21,16}},
+{ 385848, 4, {233,23,9,8}},
+{ 385920, 4, {67,20,18,16}},
+{ 386064, 4, {383,14,9,8}},
+{ 386100, 4, {27,26,25,22}},
+{ 386136, 4, {173,31,9,8}},
+{ 386232, 4, {33,28,22,19}},
+{ 386400, 4, {28,25,24,23}},
+{ 386460, 4, {113,19,15,12}},
+{ 386496, 4, {61,22,18,16}},
+{ 386640, 4, {179,15,12,12}},
+{ 386712, 4, {131,41,9,8}},
+{ 386784, 4, {79,18,17,16}},
+{ 387000, 4, {43,25,20,18}},
+{ 387144, 4, {283,19,9,8}},
+{ 387180, 4, {239,15,12,9}},
+{ 387200, 4, {32,25,22,22}},
+{ 387450, 4, {41,25,21,18}},
+{ 387504, 4, {27,26,24,23}},
+{ 387576, 4, {769,9,8,7}},
+{ 387600, 4, {34,25,24,19}},
+{ 387648, 4, {673,9,8,8}},
+{ 387828, 4, {28,27,27,19}},
+{ 387840, 4, {101,16,16,15}},
+{ 387936, 4, {449,12,9,8}},
+{ 388008, 4, {317,17,9,8}},
+{ 388125, 4, {27,25,25,23}},
+{ 388152, 4, {599,9,9,8}},
+{ 388500, 4, {37,25,21,20}},
+{ 388512, 4, {71,19,18,16}},
+{ 388620, 4, {127,17,15,12}},
+{ 388752, 4, {89,21,16,13}},
+{ 388800, 4, {27,25,24,24}},
+{ 388872, 4, {491,11,9,8}},
+{ 389424, 4, {61,21,19,16}},
+{ 389448, 4, {601,9,9,8}},
+{ 389520, 4, {541,10,9,8}},
+{ 389592, 4, {773,9,8,7}},
+{ 389952, 4, {677,9,8,8}},
+{ 390000, 4, {26,25,25,24}},
+{ 390060, 4, {197,15,12,11}},
+{ 390096, 4, {43,24,21,18}},
+{ 390150, 4, {34,27,25,17}},
+{ 390420, 4, {241,15,12,9}},
+{ 390432, 4, {83,21,16,14}},
+{ 390528, 4, {113,18,16,12}},
+{ 390600, 4, {31,25,24,21}},
+{ 390780, 4, {167,15,13,12}},
+{ 390816, 4, {59,23,18,16}},
+{ 390888, 4, {89,61,9,8}},
+{ 390960, 4, {181,15,12,12}},
+{ 391104, 4, {97,18,16,14}},
+{ 391140, 4, {53,41,15,12}},
+{ 391200, 4, {163,16,15,10}},
+{ 391248, 4, {33,26,24,19}},
+{ 391500, 4, {29,27,25,20}},
+{ 391608, 4, {37,24,21,21}},
+{ 391776, 4, {53,22,21,16}},
+{ 391824, 4, {907,9,8,6}},
+{ 391920, 4, {71,23,16,15}},
+{ 392112, 4, {389,14,9,8}},
+{ 392184, 4, {419,13,9,8}},
+{ 392400, 4, {109,16,15,15}},
+{ 392448, 4, {73,21,16,16}},
+{ 392544, 4, {47,29,18,16}},
+{ 392616, 4, {41,24,21,19}},
+{ 392940, 4, {59,37,15,12}},
+{ 393048, 4, {103,53,9,8}},
+{ 393120, 4, {28,27,26,20}},
+{ 393192, 4, {127,43,9,8}},
+{ 393336, 4, {607,9,9,8}},
+{ 393360, 4, {149,16,15,11}},
+{ 393408, 4, {683,9,8,8}},
+{ 393552, 4, {911,9,8,6}},
+{ 393660, 4, {27,27,27,20}},
+{ 393840, 4, {547,10,9,8}},
+{ 393960, 4, {67,21,20,14}},
+{ 393984, 4, {32,27,24,19}},
+{ 394020, 4, {199,15,12,11}},
+{ 394056, 4, {421,13,9,8}},
+{ 394128, 4, {34,24,23,21}},
+{ 394272, 4, {37,37,18,16}},
+{ 394320, 4, {53,31,16,15}},
+{ 394560, 4, {137,16,15,12}},
+{ 394632, 4, {29,27,24,21}},
+{ 394740, 4, {43,27,20,17}},
+{ 394800, 4, {47,21,20,20}},
+{ 394848, 4, {457,12,9,8}},
+{ 394875, 4, {39,27,25,15}},
+{ 395136, 4, {28,28,24,21}},
+{ 395200, 4, {32,26,25,19}},
+{ 395208, 4, {499,11,9,8}},
+{ 395520, 4, {103,16,16,15}},
+{ 395640, 4, {157,15,14,12}},
+{ 395760, 4, {97,17,16,15}},
+{ 395784, 4, {239,23,9,8}},
+{ 396000, 4, {30,25,24,22}},
+{ 396060, 4, {41,23,21,20}},
+{ 396180, 4, {71,31,15,12}},
+{ 396240, 4, {127,16,15,13}},
+{ 396480, 4, {59,21,20,16}},
+{ 396576, 4, {32,27,27,17}},
+{ 396648, 4, {787,9,8,7}},
+{ 396720, 4, {30,29,24,19}},
+{ 396864, 4, {53,26,18,16}},
+{ 396900, 4, {28,27,25,21}},
+{ 396936, 4, {149,37,9,8}},
+{ 397008, 4, {919,9,8,6}},
+{ 397224, 4, {613,9,9,8}},
+{ 397320, 4, {43,22,21,20}},
+{ 397440, 4, {30,24,24,23}},
+{ 397575, 4, {31,27,25,19}},
+{ 397620, 4, {47,47,15,12}},
+{ 398016, 4, {691,9,8,8}},
+{ 398160, 4, {79,21,16,15}},
+{ 398250, 4, {59,25,18,15}},
+{ 398304, 4, {461,12,9,8}},
+{ 398376, 4, {503,11,9,8}},
+{ 398400, 4, {83,20,16,15}},
+{ 398412, 4, {31,28,27,17}},
+{ 398520, 4, {41,27,20,18}},
+{ 398640, 4, {151,16,15,11}},
+{ 398808, 4, {191,29,9,8}},
+{ 399096, 4, {241,23,9,8}},
+{ 399168, 4, {28,27,24,22}},
+{ 399456, 4, {73,19,18,16}},
+{ 399504, 4, {41,29,21,16}},
+{ 399528, 4, {179,31,9,8}},
+{ 399600, 4, {37,27,20,20}},
+{ 399816, 4, {617,9,9,8}},
+{ 399924, 4, {28,27,23,23}},
+{ 399960, 4, {101,22,15,12}},
+{ 400000, 4, {32,25,25,20}},
+{ 400032, 4, {463,12,9,8}},
+{ 400176, 4, {397,14,9,8}},
+{ 400200, 4, {29,25,24,23}},
+{ 400320, 4, {139,16,15,12}},
+{ 400392, 4, {83,67,9,8}},
+{ 400608, 4, {107,18,16,13}},
+{ 400680, 4, {53,21,20,18}},
+{ 400752, 4, {33,24,23,22}},
+{ 400800, 4, {167,16,15,10}},
+{ 400824, 4, {293,19,9,8}},
+{ 400860, 4, {131,17,15,12}},
+{ 400950, 4, {27,27,25,22}},
+{ 401040, 4, {557,10,9,8}},
+{ 401112, 4, {619,9,9,8}},
+{ 401280, 4, {32,30,22,19}},
+{ 401328, 4, {929,9,8,6}},
+{ 401400, 4, {223,15,12,10}},
+{ 401580, 4, {97,23,15,12}},
+{ 401625, 4, {35,27,25,17}},
+{ 401688, 4, {797,9,8,7}},
+{ 401760, 4, {31,27,24,20}},
+{ 401850, 4, {47,25,19,18}},
+{ 402192, 4, {28,28,27,19}},
+{ 402264, 4, {151,37,9,8}},
+{ 402300, 4, {149,15,15,12}},
+{ 402408, 4, {27,27,24,23}},
+{ 402696, 4, {47,24,21,17}},
+{ 402960, 4, {73,23,16,15}},
+{ 402984, 4, {193,29,9,8}},
+{ 403128, 4, {509,11,9,8}},
+{ 403200, 4, {28,25,24,24}},
+{ 403416, 4, {431,13,9,8}},
+{ 403440, 4, {41,41,16,15}},
+{ 403488, 4, {467,12,9,8}},
+{ 403620, 4, {31,31,21,20}},
+{ 403650, 4, {27,26,25,23}},
+{ 403776, 4, {701,9,8,8}},
+{ 403788, 4, {33,28,23,19}},
+{ 403848, 4, {79,71,9,8}},
+{ 403920, 4, {34,27,22,20}},
+{ 403992, 4, {181,31,9,8}},
+{ 404040, 4, {37,26,21,20}},
+{ 404064, 4, {61,23,18,16}},
+{ 404208, 4, {401,14,9,8}},
+{ 404320, 4, {35,32,19,19}},
+{ 404352, 4, {27,26,24,24}},
+{ 404424, 4, {137,41,9,8}},
+{ 404544, 4, {43,28,21,16}},
+{ 404550, 4, {31,29,25,18}},
+{ 404784, 4, {937,9,8,6}},
+{ 404800, 4, {32,25,23,22}},
+{ 404820, 4, {173,15,13,12}},
+{ 405000, 4, {27,25,25,24}},
+{ 405144, 4, {331,17,9,8}},
+{ 405216, 4, {67,21,18,16}},
+{ 405288, 4, {433,13,9,8}},
+{ 405360, 4, {563,10,9,8}},
+{ 405405, 4, {35,33,27,13}},
+{ 405450, 4, {53,25,18,17}},
+{ 405552, 4, {71,21,17,16}},
+{ 405576, 4, {131,43,9,8}},
+{ 405600, 4, {26,26,25,24}},
+{ 405840, 4, {89,19,16,15}},
+{ 405900, 4, {41,25,22,18}},
+{ 406224, 4, {31,26,24,21}},
+{ 406260, 4, {61,37,15,12}},
+{ 406296, 4, {33,27,24,19}},
+{ 406350, 4, {43,25,21,18}},
+{ 406368, 4, {83,18,17,16}},
+{ 406512, 4, {941,9,8,6}},
+{ 406620, 4, {251,15,12,9}},
+{ 406800, 4, {113,16,15,15}},
+{ 407160, 4, {29,27,26,20}},
+{ 407232, 4, {101,18,16,14}},
+{ 407340, 4, {73,31,15,12}},
+{ 407484, 4, {33,28,21,21}},
+{ 407700, 4, {151,15,15,12}},
+{ 407736, 4, {809,9,8,7}},
+{ 407808, 4, {59,24,18,16}},
+{ 407880, 4, {103,22,15,12}},
+{ 408000, 4, {34,25,24,20}},
+{ 408096, 4, {109,18,16,13}},
+{ 408240, 4, {28,27,27,20}},
+{ 408312, 4, {107,53,9,8}},
+{ 408384, 4, {709,9,8,8}},
+{ 408600, 4, {227,15,12,10}},
+{ 408720, 4, {131,16,15,13}},
+{ 408744, 4, {811,9,8,7}},
+{ 408888, 4, {631,9,9,8}},
+{ 408960, 4, {71,20,18,16}},
+{ 409104, 4, {947,9,8,6}},
+{ 409200, 4, {31,25,24,22}},
+{ 409248, 4, {29,28,24,21}},
+{ 409536, 4, {79,18,18,16}},
+{ 409584, 4, {53,23,21,16}},
+{ 409680, 4, {569,10,9,8}},
+{ 409920, 4, {61,21,20,16}},
+{ 410112, 4, {89,18,16,16}},
+{ 410220, 4, {53,43,15,12}},
+{ 410256, 4, {37,24,22,21}},
+{ 410328, 4, {139,41,9,8}},
+{ 410400, 4, {30,30,24,19}},
+{ 410592, 4, {47,26,21,16}},
+{ 410640, 4, {59,29,16,15}},
+{ 410760, 4, {163,15,14,12}},
+{ 410880, 4, {107,16,16,15}},
+{ 410904, 4, {439,13,9,8}},
+{ 411075, 4, {29,27,25,21}},
+{ 411120, 4, {571,10,9,8}},
+{ 411264, 4, {34,24,24,21}},
+{ 411336, 4, {197,29,9,8}},
+{ 411480, 4, {127,18,15,12}},
+{ 411696, 4, {953,9,8,6}},
+{ 411750, 4, {61,25,18,15}},
+{ 411768, 4, {43,24,21,19}},
+{ 411840, 4, {30,26,24,22}},
+{ 412056, 4, {97,59,9,8}},
+{ 412080, 4, {101,17,16,15}},
+{ 412200, 4, {229,15,12,10}},
+{ 412272, 4, {409,14,9,8}},
+{ 412380, 4, {79,29,15,12}},
+{ 412488, 4, {337,17,9,8}},
+{ 412560, 4, {191,15,12,12}},
+{ 412632, 4, {521,11,9,8}},
+{ 412776, 4, {28,27,26,21}},
+{ 412965, 4, {35,27,23,19}},
+{ 413280, 4, {41,24,21,20}},
+{ 413424, 4, {29,27,24,22}},
+{ 413784, 4, {821,9,8,7}},
+{ 413856, 4, {479,12,9,8}},
+{ 414000, 4, {30,25,24,23}},
+{ 414144, 4, {719,9,8,8}},
+{ 414216, 4, {523,11,9,8}},
+{ 414480, 4, {157,16,15,11}},
+{ 414540, 4, {47,21,21,20}},
+{ 414648, 4, {443,13,9,8}},
+{ 414720, 4, {30,24,24,24}},
+{ 414792, 4, {823,9,8,7}},
+{ 415125, 4, {41,27,25,15}},
+{ 415200, 4, {173,16,15,10}},
+{ 415224, 4, {79,73,9,8}},
+{ 415296, 4, {103,18,16,14}},
+{ 415368, 4, {641,9,9,8}},
+{ 415380, 4, {43,23,21,20}},
+{ 415440, 4, {577,10,9,8}},
+{ 415512, 4, {199,29,9,8}},
+{ 415656, 4, {251,23,9,8}},
+{ 415800, 4, {28,27,25,22}},
+{ 415872, 4, {36,32,19,19}},
+{ 415944, 4, {109,53,9,8}},
+{ 416000, 4, {32,26,25,20}},
+{ 416250, 4, {37,25,25,18}},
+{ 416304, 4, {59,21,21,16}},
+{ 416340, 4, {257,15,12,9}},
+{ 416556, 4, {29,28,27,19}},
+{ 416664, 4, {643,9,9,8}},
+{ 416745, 4, {35,27,21,21}},
+{ 416808, 4, {827,9,8,7}},
+{ 416880, 4, {193,15,12,12}},
+{ 416976, 4, {73,21,17,16}},
+{ 417120, 4, {79,22,16,15}},
+{ 417312, 4, {28,27,24,23}},
+{ 417360, 4, {47,37,16,15}},
+{ 417480, 4, {71,21,20,14}},
+{ 417600, 4, {29,25,24,24}},
+{ 417690, 4, {35,27,26,17}},
+{ 417744, 4, {967,9,8,6}},
+{ 417780, 4, {211,15,12,11}},
+{ 417816, 4, {829,9,8,7}},
+{ 417960, 4, {43,27,20,18}},
+{ 418080, 4, {67,26,16,15}},
+{ 418140, 4, {101,23,15,12}},
+{ 418176, 4, {32,27,22,22}},
+{ 418200, 4, {41,25,24,17}},
+{ 418248, 4, {157,37,9,8}},
+{ 418320, 4, {83,21,16,15}},
+{ 418500, 4, {31,27,25,20}},
+{ 418560, 4, {109,16,16,15}},
+{ 418608, 4, {34,27,24,19}},
+{ 418656, 4, {89,21,16,14}},
+{ 418752, 4, {727,9,8,8}},
+{ 418860, 4, {179,15,13,12}},
+{ 418950, 4, {35,30,21,19}},
+{ 418968, 4, {33,24,23,23}},
+{ 418992, 4, {43,29,21,16}},
+{ 419040, 4, {97,18,16,15}},
+{ 419175, 4, {27,27,25,23}},
+{ 419220, 4, {137,17,15,12}},
+{ 419256, 4, {647,9,9,8}},
+{ 419400, 4, {233,15,12,10}},
+{ 419472, 4, {971,9,8,6}},
+{ 419520, 4, {32,30,23,19}},
+{ 419580, 4, {37,27,21,20}},
+{ 419616, 4, {47,31,18,16}},
+{ 419904, 4, {27,27,24,24}},
+{ 419976, 4, {307,19,9,8}},
+{ 420000, 4, {28,25,25,24}},
+{ 420240, 4, {103,17,16,15}},
+{ 420264, 4, {449,13,9,8}},
+{ 420480, 4, {73,20,18,16}},
+{ 420660, 4, {41,27,20,19}},
+{ 420768, 4, {487,12,9,8}},
+{ 420840, 4, {167,15,14,12}},
+{ 421200, 4, {27,26,25,24}},
+{ 421260, 4, {59,21,20,17}},
+{ 421344, 4, {33,28,24,19}},
+{ 421632, 4, {61,24,18,16}},
+{ 421800, 4, {37,25,24,19}},
+{ 421848, 4, {31,27,24,21}},
+{ 421875, 4, {27,25,25,25}},
+{ 422064, 4, {977,9,8,6}},
+{ 422100, 4, {67,21,20,15}},
+{ 422208, 4, {733,9,8,8}},
+{ 422280, 4, {34,27,23,20}},
+{ 422352, 4, {419,14,9,8}},
+{ 422400, 4, {32,25,24,22}},
+{ 422640, 4, {587,10,9,8}},
+{ 422820, 4, {29,27,27,20}},
+{ 422856, 4, {839,9,8,7}},
+{ 422940, 4, {53,21,20,19}},
+{ 423000, 4, {47,25,20,18}},
+{ 423072, 4, {113,18,16,13}},
+{ 423120, 4, {43,41,16,15}},
+{ 423144, 4, {653,9,9,8}},
+{ 423200, 4, {32,25,23,23}},
+{ 423225, 4, {33,27,25,19}},
+{ 423360, 4, {28,28,27,20}},
+{ 423540, 4, {181,15,13,12}},
+{ 423696, 4, {97,21,16,13}},
+{ 423720, 4, {107,22,15,12}},
+{ 423864, 4, {29,29,24,21}},
+{ 423900, 4, {157,15,15,12}},
+{ 424080, 4, {31,30,24,19}},
+{ 424152, 4, {137,43,9,8}},
+{ 424224, 4, {491,12,9,8}},
+{ 424296, 4, {83,71,9,8}},
+{ 424350, 4, {41,25,23,18}},
+{ 424368, 4, {421,14,9,8}},
+{ 424440, 4, {131,18,15,12}},
+{ 424512, 4, {67,22,18,16}},
+{ 424560, 4, {61,29,16,15}},
+{ 424575, 4, {37,27,25,17}},
+{ 424656, 4, {983,9,8,6}},
+{ 424704, 4, {79,21,16,16}},
+{ 424728, 4, {347,17,9,8}},
+{ 425250, 4, {30,27,25,21}},
+{ 425340, 4, {139,17,15,12}},
+{ 425448, 4, {311,19,9,8}},
+{ 425520, 4, {197,15,12,12}},
+{ 425592, 4, {257,23,9,8}},
+{ 425600, 4, {32,28,25,19}},
+{ 425664, 4, {739,9,8,8}},
+{ 425700, 4, {43,25,22,18}},
+{ 425952, 4, {32,29,27,17}},
+{ 426024, 4, {97,61,9,8}},
+{ 426060, 4, {263,15,12,9}},
+{ 426312, 4, {191,31,9,8}},
+{ 426384, 4, {47,24,21,18}},
+{ 426420, 4, {103,23,15,12}},
+{ 426720, 4, {127,16,15,14}},
+{ 426816, 4, {32,27,26,19}},
+{ 426888, 4, {33,28,22,21}},
+{ 426960, 4, {593,10,9,8}},
+{ 427032, 4, {659,9,9,8}},
+{ 427056, 4, {41,31,21,16}},
+{ 427176, 4, {349,17,9,8}},
+{ 427200, 4, {89,20,16,15}},
+{ 427392, 4, {53,24,21,16}},
+{ 427440, 4, {137,16,15,13}},
+{ 427680, 4, {30,27,24,22}},
+{ 427728, 4, {67,21,19,16}},
+{ 427752, 4, {457,13,9,8}},
+{ 427800, 4, {31,25,24,23}},
+{ 427968, 4, {743,9,8,8}},
+{ 428112, 4, {991,9,8,6}},
+{ 428184, 4, {313,19,9,8}},
+{ 428328, 4, {661,9,9,8}},
+{ 428400, 4, {34,25,24,21}},
+{ 428472, 4, {541,11,9,8}},
+{ 428652, 4, {28,27,27,21}},
+{ 428868, 4, {36,33,19,19}},
+{ 428904, 4, {37,24,23,21}},
+{ 429048, 4, {101,59,9,8}},
+{ 429120, 4, {149,16,15,12}},
+{ 429240, 4, {73,21,20,14}},
+{ 429300, 4, {53,25,18,18}},
+{ 429336, 4, {89,67,9,8}},
+{ 429408, 4, {71,21,18,16}},
+{ 429600, 4, {179,16,15,10}},
+{ 429768, 4, {127,47,9,8}},
+{ 429840, 4, {199,15,12,12}},
+{ 429912, 4, {853,9,8,7}},
+{ 430200, 4, {239,15,12,10}},
+{ 430272, 4, {83,18,18,16}},
+{ 430320, 4, {163,16,15,11}},
+{ 430344, 4, {139,43,9,8}},
+{ 430416, 4, {61,21,21,16}},
+{ 430500, 4, {41,25,21,20}},
+{ 430560, 4, {30,26,24,23}},
+{ 430650, 4, {29,27,25,22}},
+{ 430704, 4, {997,9,8,6}},
+{ 430776, 4, {193,31,9,8}},
+{ 430920, 4, {30,28,27,19}},
+{ 431136, 4, {499,12,9,8}},
+{ 431208, 4, {113,53,9,8}},
+{ 431280, 4, {599,10,9,8}},
+{ 431424, 4, {107,18,16,14}},
+{ 431460, 4, {47,27,20,17}},
+{ 431496, 4, {461,13,9,8}},
+{ 431568, 4, {37,27,24,18}},
+{ 431640, 4, {109,22,15,12}},
+{ 431928, 4, {857,9,8,7}},
+{ 432000, 4, {30,25,24,24}},
+{ 432072, 4, {353,17,9,8}},
+{ 432216, 4, {29,27,24,23}},
+{ 432288, 4, {79,19,18,16}},
+{ 432432, 4, {28,27,26,22}},
+{ 432450, 4, {31,31,25,18}},
+{ 432576, 4, {751,9,8,8}},
+{ 432720, 4, {601,10,9,8}},
+{ 432900, 4, {37,26,25,18}},
+{ 432936, 4, {859,9,8,7}},
+{ 433200, 4, {38,25,24,19}},
+{ 433224, 4, {547,11,9,8}},
+{ 433260, 4, {83,29,15,12}},
+{ 433368, 4, {463,13,9,8}},
+{ 433440, 4, {43,24,21,20}},
+{ 433656, 4, {317,19,9,8}},
+{ 433680, 4, {139,16,15,13}},
+{ 433755, 4, {35,27,27,17}},
+{ 433800, 4, {241,15,12,10}},
+{ 433920, 4, {113,16,16,15}},
+{ 433944, 4, {41,24,21,21}},
+{ 434232, 4, {163,37,9,8}},
+{ 434280, 4, {47,22,21,20}},
+{ 434340, 4, {127,19,15,12}},
+{ 434400, 4, {181,16,15,10}},
+{ 434448, 4, {431,14,9,8}},
+{ 434592, 4, {503,12,9,8}},
+{ 434700, 4, {28,27,25,23}},
+{ 434880, 4, {151,16,15,12}},
+{ 434952, 4, {863,9,8,7}},
+{ 435000, 4, {29,25,25,24}},
+{ 435120, 4, {37,28,21,20}},
+{ 435240, 4, {31,27,26,20}},
+{ 435375, 4, {43,27,25,15}},
+{ 435420, 4, {59,41,15,12}},
+{ 435456, 4, {28,27,24,24}},
+{ 435528, 4, {263,23,9,8}},
+{ 435540, 4, {61,21,20,17}},
+{ 435744, 4, {89,18,17,16}},
+{ 435780, 4, {269,15,12,9}},
+{ 435888, 4, {1009,9,8,6}},
+{ 435960, 4, {173,15,14,12}},
+{ 436032, 4, {757,9,8,8}},
+{ 436050, 4, {34,27,25,19}},
+{ 436080, 4, {79,23,16,15}},
+{ 436104, 4, {673,9,9,8}},
+{ 436128, 4, {59,22,21,16}},
+{ 436248, 4, {83,73,9,8}},
+{ 436320, 4, {101,18,16,15}},
+{ 436392, 4, {33,29,24,19}},
+{ 436464, 4, {433,14,9,8}},
+{ 436560, 4, {107,17,16,15}},
+{ 436800, 4, {28,26,25,24}},
+{ 436896, 4, {41,37,18,16}},
+{ 437040, 4, {607,10,9,8}},
+{ 437112, 4, {467,13,9,8}},
+{ 437184, 4, {33,24,24,23}},
+{ 437400, 4, {27,27,25,24}},
+{ 437472, 4, {31,28,24,21}},
+{ 437544, 4, {103,59,9,8}},
+{ 437616, 4, {1013,9,8,6}},
+{ 437760, 4, {32,30,24,19}},
+{ 438048, 4, {27,26,26,24}},
+{ 438240, 4, {83,22,16,15}},
+{ 438336, 4, {761,9,8,8}},
+{ 438480, 4, {30,29,24,21}},
+{ 438600, 4, {43,25,24,17}},
+{ 438696, 4, {677,9,9,8}},
+{ 438750, 4, {27,26,25,25}},
+{ 438900, 4, {33,28,25,19}},
+{ 438912, 4, {127,18,16,12}},
+{ 438960, 4, {59,31,16,15}},
+{ 439020, 4, {271,15,12,9}},
+{ 439416, 4, {359,17,9,8}},
+{ 439425, 4, {31,27,25,21}},
+{ 439488, 4, {109,18,16,14}},
+{ 439560, 4, {37,27,22,20}},
+{ 439704, 4, {197,31,9,8}},
+{ 439776, 4, {509,12,9,8}},
+{ 439848, 4, {149,41,9,8}},
+{ 440000, 4, {32,25,25,22}},
+{ 440100, 4, {163,15,15,12}},
+{ 440160, 4, {131,16,15,14}},
+{ 440208, 4, {1019,9,8,6}},
+{ 440496, 4, {38,24,23,21}},
+{ 440568, 4, {211,29,9,8}},
+{ 440640, 4, {34,27,24,20}},
+{ 440800, 4, {32,29,25,19}},
+{ 440820, 4, {79,31,15,12}},
+{ 440880, 4, {167,16,15,11}},
+{ 441072, 4, {1021,9,8,6}},
+{ 441144, 4, {557,11,9,8}},
+{ 441168, 4, {101,21,16,13}},
+{ 441180, 4, {43,27,20,19}},
+{ 441360, 4, {613,10,9,8}},
+{ 441408, 4, {33,32,22,19}},
+{ 441504, 4, {73,21,18,16}},
+{ 441540, 4, {223,15,12,11}},
+{ 441600, 4, {32,25,24,23}},
+{ 441792, 4, {59,26,18,16}},
+{ 441936, 4, {31,27,24,22}},
+{ 442008, 4, {877,9,8,7}},
+{ 442176, 4, {47,28,21,16}},
+{ 442320, 4, {97,19,16,15}},
+{ 442512, 4, {439,14,9,8}},
+{ 442584, 4, {683,9,9,8}},
+{ 442656, 4, {53,29,18,16}},
+{ 442680, 4, {34,31,21,20}},
+{ 442800, 4, {41,27,20,20}},
+{ 442944, 4, {769,9,8,8}},
+{ 442980, 4, {107,23,15,12}},
+{ 443040, 4, {71,26,16,15}},
+{ 443232, 4, {32,27,27,19}},
+{ 443304, 4, {131,47,9,8}},
+{ 443520, 4, {30,28,24,22}},
+{ 443592, 4, {101,61,9,8}},
+{ 443760, 4, {43,43,16,15}},
+{ 443808, 4, {67,23,18,16}},
+{ 443880, 4, {137,18,15,12}},
+{ 444000, 4, {37,25,24,20}},
+{ 444024, 4, {881,9,8,7}},
+{ 444150, 4, {47,25,21,18}},
+{ 444168, 4, {199,31,9,8}},
+{ 444240, 4, {617,10,9,8}},
+{ 444528, 4, {28,28,27,21}},
+{ 444720, 4, {109,17,16,15}},
+{ 444888, 4, {167,37,9,8}},
+{ 444960, 4, {103,18,16,15}},
+{ 445032, 4, {883,9,8,7}},
+{ 445050, 4, {43,25,23,18}},
+{ 445200, 4, {53,21,20,20}},
+{ 445248, 4, {773,9,8,8}},
+{ 445284, 4, {31,28,27,19}},
+{ 445392, 4, {1031,9,8,6}},
+{ 445464, 4, {269,23,9,8}},
+{ 445500, 4, {30,27,25,22}},
+{ 445536, 4, {34,26,24,21}},
+{ 445680, 4, {619,10,9,8}},
+{ 445752, 4, {151,41,9,8}},
+{ 445896, 4, {563,11,9,8}},
+{ 446040, 4, {59,21,20,18}},
+{ 446208, 4, {83,21,16,16}},
+{ 446220, 4, {67,37,15,12}},
+{ 446256, 4, {1033,9,8,6}},
+{ 446292, 4, {33,28,23,21}},
+{ 446400, 4, {31,25,24,24}},
+{ 446544, 4, {443,14,9,8}},
+{ 446940, 4, {191,15,13,12}},
+{ 446976, 4, {97,18,16,16}},
+{ 447048, 4, {887,9,8,7}},
+{ 447120, 4, {30,27,24,23}},
+{ 447216, 4, {33,28,22,22}},
+{ 447300, 4, {71,21,20,15}},
+{ 447480, 4, {113,22,15,12}},
+{ 447525, 4, {39,27,25,17}},
+{ 447552, 4, {37,24,24,21}},
+{ 447720, 4, {41,26,21,20}},
+{ 447768, 4, {691,9,9,8}},
+{ 447888, 4, {43,31,21,16}},
+{ 448000, 4, {32,28,25,20}},
+{ 448020, 4, {131,19,15,12}},
+{ 448344, 4, {479,13,9,8}},
+{ 448380, 4, {53,47,15,12}},
+{ 448560, 4, {89,21,16,15}},
+{ 448740, 4, {277,15,12,9}},
+{ 448776, 4, {271,23,9,8}},
+{ 448800, 4, {34,25,24,22}},
+{ 448848, 4, {1039,9,8,6}},
+{ 448875, 4, {35,27,25,19}},
+{ 449064, 4, {28,27,27,22}},
+{ 449208, 4, {367,17,9,8}},
+{ 449280, 4, {30,26,24,24}},
+{ 449352, 4, {79,79,9,8}},
+{ 449460, 4, {227,15,12,11}},
+{ 449550, 4, {37,27,25,18}},
+{ 449856, 4, {71,22,18,16}},
+{ 449904, 4, {103,21,16,13}},
+{ 450000, 4, {30,25,25,24}},
+{ 450072, 4, {47,24,21,19}},
+{ 450144, 4, {521,12,9,8}},
+{ 450180, 4, {61,41,15,12}},
+{ 450225, 4, {29,27,25,23}},
+{ 450240, 4, {67,21,20,16}},
+{ 450360, 4, {139,18,15,12}},
+{ 450648, 4, {569,11,9,8}},
+{ 450660, 4, {37,29,21,20}},
+{ 450900, 4, {167,15,15,12}},
+{ 450912, 4, {61,22,21,16}},
+{ 451008, 4, {29,27,24,24}},
+{ 451080, 4, {179,15,14,12}},
+{ 451248, 4, {79,21,17,16}},
+{ 451260, 4, {109,23,15,12}},
+{ 451350, 4, {59,25,18,17}},
+{ 451440, 4, {33,30,24,19}},
+{ 451500, 4, {43,25,21,20}},
+{ 451620, 4, {193,15,13,12}},
+{ 451800, 4, {251,15,12,10}},
+{ 451872, 4, {523,12,9,8}},
+{ 451980, 4, {31,27,27,20}},
+{ 452088, 4, {28,27,26,23}},
+{ 452160, 4, {157,16,15,12}},
+{ 452232, 4, {571,11,9,8}},
+{ 452250, 4, {67,25,18,15}},
+{ 452376, 4, {103,61,9,8}},
+{ 452400, 4, {29,26,25,24}},
+{ 452592, 4, {449,14,9,8}},
+{ 452736, 4, {131,18,16,12}},
+{ 452808, 4, {331,19,9,8}},
+{ 453024, 4, {33,26,24,22}},
+{ 453096, 4, {31,29,24,21}},
+{ 453150, 4, {53,25,19,18}},
+{ 453168, 4, {1049,9,8,6}},
+{ 453264, 4, {71,21,19,16}},
+{ 453312, 4, {787,9,8,8}},
+{ 453420, 4, {229,15,12,11}},
+{ 453600, 4, {28,27,25,24}},
+{ 453840, 4, {61,31,16,15}},
+{ 454020, 4, {47,23,21,20}},
+{ 454032, 4, {1051,9,8,6}},
+{ 454104, 4, {53,24,21,17}},
+{ 454140, 4, {29,29,27,20}},
+{ 454176, 4, {83,19,18,16}},
+{ 454248, 4, {701,9,9,8}},
+{ 454320, 4, {631,10,9,8}},
+{ 454536, 4, {107,59,9,8}},
+{ 454608, 4, {41,24,22,21}},
+{ 454860, 4, {36,35,19,19}},
+{ 454896, 4, {27,27,26,24}},
+{ 454968, 4, {89,71,9,8}},
+{ 455040, 4, {79,20,18,16}},
+{ 455112, 4, {43,24,21,21}},
+{ 455175, 4, {45,35,17,17}},
+{ 455220, 4, {281,15,12,9}},
+{ 455328, 4, {32,31,27,17}},
+{ 455520, 4, {73,26,16,15}},
+{ 455544, 4, {37,27,24,19}},
+{ 455616, 4, {113,18,16,14}},
+{ 455625, 4, {27,27,25,25}},
+{ 455760, 4, {211,15,12,12}},
+{ 455832, 4, {487,13,9,8}},
+{ 455940, 4, {149,17,15,12}},
+{ 455952, 4, {59,23,21,16}},
+{ 456000, 4, {32,30,25,19}},
+{ 456120, 4, {181,15,14,12}},
+{ 456192, 4, {33,24,24,24}},
+{ 456288, 4, {97,21,16,14}},
+{ 456300, 4, {27,26,26,25}},
+{ 456435, 4, {35,27,23,21}},
+{ 456456, 4, {33,28,26,19}},
+{ 456552, 4, {373,17,9,8}},
+{ 456660, 4, {59,43,15,12}},
+{ 456720, 4, {173,16,15,11}},
+{ 456768, 4, {61,26,18,16}},
+{ 456840, 4, {47,27,20,18}},
+{ 456984, 4, {577,11,9,8}},
+{ 457056, 4, {32,27,23,23}},
+{ 457128, 4, {907,9,8,7}},
+{ 457200, 4, {127,16,15,15}},
+{ 457600, 4, {32,26,25,22}},
+{ 457968, 4, {47,29,21,16}},
+{ 458160, 4, {83,23,16,15}},
+{ 458208, 4, {43,37,18,16}},
+{ 458352, 4, {1061,9,8,6}},
+{ 458400, 4, {191,16,15,10}},
+{ 458460, 4, {283,15,12,9}},
+{ 458712, 4, {277,23,9,8}},
+{ 458850, 4, {35,30,23,19}},
+{ 459072, 4, {797,9,8,8}},
+{ 459144, 4, {911,9,8,7}},
+{ 459216, 4, {1063,9,8,6}},
+{ 459360, 4, {30,29,24,22}},
+{ 459432, 4, {709,9,9,8}},
+{ 459540, 4, {37,27,23,20}},
+{ 459576, 4, {491,13,9,8}},
+{ 459648, 4, {32,28,27,19}},
+{ 459900, 4, {73,21,20,15}},
+{ 459984, 4, {37,37,21,16}},
+{ 460000, 4, {32,25,25,23}},
+{ 460320, 4, {137,16,15,14}},
+{ 460350, 4, {31,27,25,22}},
+{ 460404, 4, {29,28,27,21}},
+{ 460560, 4, {101,19,16,15}},
+{ 460656, 4, {457,14,9,8}},
+{ 460800, 4, {32,25,24,24}},
+{ 460872, 4, {173,37,9,8}},
+{ 460980, 4, {197,15,13,12}},
+{ 461016, 4, {337,19,9,8}},
+{ 461040, 4, {113,17,16,15}},
+{ 461160, 4, {61,21,20,18}},
+{ 461250, 4, {41,25,25,18}},
+{ 461304, 4, {149,43,9,8}},
+{ 461340, 4, {233,15,12,11}},
+{ 461376, 4, {89,18,18,16}},
+{ 461472, 4, {33,32,23,19}},
+{ 461520, 4, {641,10,9,8}},
+{ 461808, 4, {1069,9,8,6}},
+{ 462024, 4, {31,27,24,23}},
+{ 462060, 4, {151,17,15,12}},
+{ 462240, 4, {107,18,16,15}},
+{ 462480, 4, {47,41,16,15}},
+{ 462528, 4, {73,22,18,16}},
+{ 462600, 4, {257,15,12,10}},
+{ 462672, 4, {34,27,24,21}},
+{ 462960, 4, {643,10,9,8}},
+{ 463008, 4, {53,26,21,16}},
+{ 463032, 4, {109,59,9,8}},
+{ 463050, 4, {35,30,21,21}},
+{ 463104, 4, {67,24,18,16}},
+{ 463140, 4, {83,31,15,12}},
+{ 463176, 4, {919,9,8,7}},
+{ 463200, 4, {193,16,15,10}},
+{ 463464, 4, {157,41,9,8}},
+{ 463608, 4, {137,47,9,8}},
+{ 463680, 4, {30,28,24,23}},
+{ 463896, 4, {379,17,9,8}},
+{ 464000, 4, {32,29,25,20}},
+{ 464400, 4, {43,27,20,20}},
+{ 464520, 4, {79,21,20,14}},
+{ 464580, 4, {89,29,15,12}},
+{ 464640, 4, {32,30,22,22}},
+{ 464688, 4, {461,14,9,8}},
+{ 464880, 4, {149,16,15,13}},
+{ 464904, 4, {587,11,9,8}},
+{ 464940, 4, {41,27,21,20}},
+{ 465000, 4, {31,25,25,24}},
+{ 465120, 4, {34,30,24,19}},
+{ 465300, 4, {47,25,22,18}},
+{ 465336, 4, {281,23,9,8}},
+{ 465408, 4, {101,18,16,16}},
+{ 465600, 4, {97,20,16,15}},
+{ 465624, 4, {223,29,9,8}},
+{ 465660, 4, {199,15,13,12}},
+{ 465696, 4, {28,28,27,22}},
+{ 465750, 4, {30,27,25,23}},
+{ 465840, 4, {647,10,9,8}},
+{ 465885, 4, {35,29,27,17}},
+{ 465912, 4, {719,9,9,8}},
+{ 465984, 4, {809,9,8,8}},
+{ 466032, 4, {73,21,19,16}},
+{ 466200, 4, {37,25,24,21}},
+{ 466320, 4, {67,29,16,15}},
+{ 466488, 4, {33,31,24,19}},
+{ 466560, 4, {30,27,24,24}},
+{ 466650, 4, {61,25,18,17}},
+{ 466704, 4, {463,14,9,8}},
+{ 466830, 4, {35,27,26,19}},
+{ 467040, 4, {139,16,15,14}},
+{ 467064, 4, {499,13,9,8}},
+{ 467100, 4, {173,15,15,12}},
+{ 467136, 4, {811,9,8,8}},
+{ 467376, 4, {107,21,16,13}},
+{ 467400, 4, {41,25,24,19}},
+{ 467424, 4, {541,12,9,8}},
+{ 467460, 4, {53,21,21,20}},
+{ 467496, 4, {151,43,9,8}},
+{ 467544, 4, {33,28,23,22}},
+{ 467775, 4, {33,27,25,21}},
+{ 467784, 4, {89,73,9,8}},
+{ 467820, 4, {113,23,15,12}},
+{ 467928, 4, {97,67,9,8}},
+{ 468000, 4, {30,26,25,24}},
+{ 468160, 4, {35,32,22,19}},
+{ 468216, 4, {929,9,8,7}},
+{ 468540, 4, {137,19,15,12}},
+{ 468648, 4, {283,23,9,8}},
+{ 468720, 4, {31,30,24,21}},
+{ 468792, 4, {383,17,9,8}},
+{ 469200, 4, {34,25,24,23}},
+{ 469440, 4, {163,16,15,12}},
+{ 469476, 4, {28,27,27,23}},
+{ 469560, 4, {43,26,21,20}},
+{ 469584, 4, {1087,9,8,6}},
+{ 469656, 4, {593,11,9,8}},
+{ 469680, 4, {103,19,16,15}},
+{ 469800, 4, {29,27,25,24}},
+{ 469920, 4, {89,22,16,15}},
+{ 469944, 4, {107,61,9,8}},
+{ 470160, 4, {653,10,9,8}},
+{ 470304, 4, {71,23,18,16}},
+{ 470376, 4, {139,47,9,8}},
+{ 470400, 4, {28,28,25,24}},
+{ 470448, 4, {33,27,24,22}},
+{ 470475, 4, {41,27,25,17}},
+{ 470640, 4, {53,37,16,15}},
+{ 470736, 4, {467,14,9,8}},
+{ 470808, 4, {503,13,9,8}},
+{ 470820, 4, {59,21,20,19}},
+{ 470880, 4, {109,18,16,15}},
+{ 470952, 4, {211,31,9,8}},
+{ 471096, 4, {727,9,9,8}},
+{ 471120, 4, {151,16,15,13}},
+{ 471200, 4, {32,31,25,19}},
+{ 471312, 4, {1091,9,8,6}},
+{ 471408, 4, {61,23,21,16}},
+{ 471600, 4, {131,16,15,15}},
+{ 471744, 4, {28,27,26,24}},
+{ 472104, 4, {83,79,9,8}},
+{ 472140, 4, {61,43,15,12}},
+{ 472176, 4, {1093,9,8,6}},
+{ 472248, 4, {937,9,8,7}},
+{ 472392, 4, {27,27,27,24}},
+{ 472500, 4, {28,27,25,25}},
+{ 472560, 4, {179,16,15,11}},
+{ 472608, 4, {547,12,9,8}},
+{ 472752, 4, {67,21,21,16}},
+{ 472800, 4, {197,16,15,10}},
+{ 472860, 4, {71,37,15,12}},
+{ 472896, 4, {821,9,8,8}},
+{ 473184, 4, {53,31,18,16}},
+{ 473220, 4, {239,15,12,11}},
+{ 473400, 4, {263,15,12,10}},
+{ 473472, 4, {137,18,16,12}},
+{ 473616, 4, {33,26,24,23}},
+{ 473760, 4, {47,24,21,20}},
+{ 473850, 4, {27,27,26,25}},
+{ 473904, 4, {1097,9,8,6}},
+{ 473976, 4, {227,29,9,8}},
+{ 474012, 4, {33,28,27,19}},
+{ 474048, 4, {823,9,8,8}},
+{ 474096, 4, {83,21,17,16}},
+{ 474240, 4, {32,30,26,19}},
+{ 474264, 4, {941,9,8,7}},
+{ 474408, 4, {599,11,9,8}},
+{ 474480, 4, {659,10,9,8}},
+{ 474525, 4, {37,27,25,19}},
+{ 474624, 4, {103,18,16,16}},
+{ 474660, 4, {293,15,12,9}},
+{ 474696, 4, {347,19,9,8}},
+{ 474912, 4, {97,18,17,16}},
+{ 474984, 4, {733,9,9,8}},
+{ 475104, 4, {101,21,16,14}},
+{ 475200, 4, {30,30,24,22}},
+{ 475272, 4, {41,24,23,21}},
+{ 475380, 4, {139,19,15,12}},
+{ 475488, 4, {127,18,16,13}},
+{ 475776, 4, {59,24,21,16}},
+{ 475875, 4, {47,27,25,15}},
+{ 475920, 4, {661,10,9,8}},
+{ 475992, 4, {601,11,9,8}},
+{ 476064, 4, {32,29,27,19}},
+{ 476112, 4, {109,21,16,13}},
+{ 476136, 4, {389,17,9,8}},
+{ 476280, 4, {30,28,27,21}},
+{ 476352, 4, {827,9,8,8}},
+{ 476424, 4, {509,13,9,8}},
+{ 476496, 4, {1103,9,8,6}},
+{ 476784, 4, {43,24,22,21}},
+{ 476856, 4, {179,37,9,8}},
+{ 476928, 4, {32,27,24,23}},
+{ 477000, 4, {53,25,20,18}},
+{ 477120, 4, {71,21,20,16}},
+{ 477180, 4, {241,15,12,11}},
+{ 477288, 4, {947,9,8,7}},
+{ 477360, 4, {34,27,26,20}},
+{ 477432, 4, {349,19,9,8}},
+{ 477504, 4, {829,9,8,8}},
+{ 477600, 4, {199,16,15,10}},
+{ 477603, 4, {49,27,19,19}},
+{ 477792, 4, {79,21,18,16}},
+{ 477840, 4, {181,16,15,11}},
+{ 477900, 4, {59,25,18,18}},
+{ 478080, 4, {83,20,18,16}},
+{ 478152, 4, {229,29,9,8}},
+{ 478224, 4, {41,27,24,18}},
+{ 478380, 4, {67,21,20,17}},
+{ 478400, 4, {32,26,25,23}},
+{ 478464, 4, {89,21,16,16}},
+{ 478728, 4, {109,61,9,8}},
+{ 478872, 4, {739,9,9,8}},
+{ 479088, 4, {1109,9,8,6}},
+{ 479250, 4, {71,25,18,15}},
+{ 479400, 4, {47,25,24,17}},
+{ 479520, 4, {37,27,24,20}},
+{ 479700, 4, {41,26,25,18}},
+{ 479808, 4, {34,28,24,21}},
+{ 480000, 4, {32,25,25,24}},
+{ 480024, 4, {113,59,9,8}},
+{ 480240, 4, {30,29,24,23}},
+{ 480312, 4, {953,9,8,7}},
+{ 480384, 4, {139,18,16,12}},
+{ 480420, 4, {157,17,15,12}},
+{ 480744, 4, {607,11,9,8}},
+{ 480816, 4, {53,24,21,18}},
+{ 480960, 4, {167,16,15,12}},
+{ 481176, 4, {163,41,9,8}},
+{ 481248, 4, {557,12,9,8}},
+{ 481275, 4, {31,27,25,23}},
+{ 481320, 4, {191,15,14,12}},
+{ 481464, 4, {743,9,9,8}},
+{ 481536, 4, {33,32,24,19}},
+{ 481572, 4, {39,28,21,21}},
+{ 481680, 4, {223,15,12,12}},
+{ 481740, 4, {37,31,21,20}},
+{ 481950, 4, {34,27,25,21}},
+{ 482112, 4, {31,27,24,24}},
+{ 482160, 4, {41,28,21,20}},
+{ 482184, 4, {181,37,9,8}},
+{ 482220, 4, {47,27,20,19}},
+{ 482328, 4, {29,28,27,22}},
+{ 482544, 4, {1117,9,8,6}},
+{ 482760, 4, {149,18,15,12}},
+{ 482832, 4, {479,14,9,8}},
+{ 482850, 4, {37,29,25,18}},
+{ 482904, 4, {353,19,9,8}},
+{ 483264, 4, {839,9,8,8}},
+{ 483300, 4, {179,15,15,12}},
+{ 483552, 4, {73,23,18,16}},
+{ 483600, 4, {31,26,25,24}},
+{ 483750, 4, {43,25,25,18}},
+{ 483840, 4, {30,28,24,24}},
+{ 484128, 4, {41,41,18,16}},
+{ 484200, 4, {269,15,12,10}},
+{ 484344, 4, {31,31,24,21}},
+{ 484512, 4, {103,21,16,14}},
+{ 484560, 4, {673,10,9,8}},
+{ 484632, 4, {127,53,9,8}},
+{ 484704, 4, {34,27,24,22}},
+{ 484785, 4, {35,27,27,19}},
+{ 484800, 4, {101,20,16,15}},
+{ 484848, 4, {37,26,24,21}},
+{ 485040, 4, {47,43,16,15}},
+{ 485100, 4, {33,28,25,21}},
+{ 485136, 4, {1123,9,8,6}},
+{ 485208, 4, {293,23,9,8}},
+{ 485460, 4, {31,29,27,20}},
+{ 485496, 4, {613,11,9,8}},
+{ 485520, 4, {34,34,21,20}},
+{ 485760, 4, {32,30,23,22}},
+{ 485928, 4, {397,17,9,8}},
+{ 486000, 4, {30,27,25,24}},
+{ 486072, 4, {157,43,9,8}},
+{ 486180, 4, {73,37,15,12}},
+{ 486360, 4, {193,15,14,12}},
+{ 486400, 4, {32,32,25,19}},
+{ 486432, 4, {563,12,9,8}},
+{ 486450, 4, {47,25,23,18}},
+{ 486504, 4, {233,29,9,8}},
+{ 486540, 4, {53,27,20,17}},
+{ 486648, 4, {751,9,9,8}},
+{ 486720, 4, {30,26,26,24}},
+{ 486780, 4, {61,21,20,19}},
+{ 486864, 4, {28,28,27,23}},
+{ 487008, 4, {89,19,18,16}},
+{ 487080, 4, {41,27,22,20}},
+{ 487200, 4, {29,28,25,24}},
+{ 487224, 4, {101,67,9,8}},
+{ 487350, 4, {38,27,25,19}},
+{ 487368, 4, {967,9,8,7}},
+{ 487440, 4, {677,10,9,8}},
+{ 487620, 4, {43,27,21,20}},
+{ 487656, 4, {521,13,9,8}},
+{ 487680, 4, {127,16,16,15}},
+{ 487728, 4, {1129,9,8,6}},
+{ 487800, 4, {271,15,12,10}},
+{ 487872, 4, {33,28,24,22}},
+{ 487920, 4, {107,19,16,15}},
+{ 488040, 4, {83,21,20,14}},
+{ 488160, 4, {113,18,16,15}},
+{ 488376, 4, {34,28,27,19}},
+{ 488400, 4, {37,25,24,22}},
+{ 488592, 4, {29,27,26,24}},
+{ 488664, 4, {617,11,9,8}},
+{ 488700, 4, {181,15,15,12}},
+{ 488796, 4, {33,28,23,23}},
+{ 488880, 4, {97,21,16,15}},
+{ 489240, 4, {151,18,15,12}},
+{ 489375, 4, {29,27,25,25}},
+{ 489384, 4, {971,9,8,7}},
+{ 489440, 4, {35,32,23,19}},
+{ 489528, 4, {523,13,9,8}},
+{ 489552, 4, {47,31,21,16}},
+{ 489600, 4, {34,25,24,24}},
+{ 489720, 4, {53,22,21,20}},
+{ 489840, 4, {157,16,15,13}},
+{ 489888, 4, {28,27,27,24}},
+{ 490050, 4, {33,27,25,22}},
+{ 490200, 4, {43,25,24,19}},
+{ 490248, 4, {619,11,9,8}},
+{ 490320, 4, {227,15,12,12}},
+{ 490464, 4, {131,18,16,13}},
+{ 490536, 4, {757,9,9,8}},
+{ 490560, 4, {73,21,20,16}},
+{ 490752, 4, {71,24,18,16}},
+{ 490824, 4, {401,17,9,8}},
+{ 490896, 4, {487,14,9,8}},
+{ 491040, 4, {31,30,24,22}},
+{ 491112, 4, {359,19,9,8}},
+{ 491280, 4, {89,23,16,15}},
+{ 491328, 4, {853,9,8,8}},
+{ 491400, 4, {28,27,26,25}},
+{ 491568, 4, {33,28,28,19}},
+{ 491616, 4, {569,12,9,8}},
+{ 491760, 4, {683,10,9,8}},
+{ 491832, 4, {33,27,24,23}},
+{ 491904, 4, {61,24,21,16}},
+{ 492000, 4, {41,25,24,20}},
+{ 492075, 4, {27,27,27,25}},
+{ 492156, 4, {31,28,27,21}},
+{ 492408, 4, {977,9,8,7}},
+{ 492480, 4, {32,30,27,19}},
+{ 492750, 4, {73,25,18,15}},
+{ 492768, 4, {59,29,18,16}},
+{ 492800, 4, {32,28,25,22}},
+{ 492960, 4, {79,26,16,15}},
+{ 492984, 4, {167,41,9,8}},
+{ 493056, 4, {107,18,16,16}},
+{ 493128, 4, {761,9,9,8}},
+{ 493200, 4, {137,16,15,15}},
+{ 493344, 4, {571,12,9,8}},
+{ 493425, 4, {43,27,25,17}},
+{ 493500, 4, {47,25,21,20}},
+{ 493584, 4, {113,21,16,13}},
+{ 493632, 4, {857,9,8,8}},
+{ 493740, 4, {211,15,13,12}},
+{ 494100, 4, {61,25,18,18}},
+{ 494160, 4, {71,29,16,15}},
+{ 494208, 4, {33,26,24,24}},
+{ 494400, 4, {103,20,16,15}},
+{ 494460, 4, {67,41,15,12}},
+{ 494496, 4, {101,18,17,16}},
+{ 494640, 4, {229,15,12,12}},
+{ 494784, 4, {859,9,8,8}},
+{ 494928, 4, {491,14,9,8}},
+{ 495264, 4, {67,22,21,16}},
+{ 495432, 4, {983,9,8,7}},
+{ 495600, 4, {59,21,20,20}},
+{ 495720, 4, {34,27,27,20}},
+{ 495864, 4, {97,71,9,8}},
+{ 495936, 4, {41,24,24,21}},
+{ 496000, 4, {32,31,25,20}},
+{ 496008, 4, {83,83,9,8}},
+{ 496125, 4, {35,27,25,21}},
+{ 496296, 4, {113,61,9,8}},
+{ 496440, 4, {197,15,14,12}},
+{ 496584, 4, {33,33,24,19}},
+{ 496620, 4, {89,31,15,12}},
+{ 496800, 4, {30,30,24,23}},
+{ 496872, 4, {103,67,9,8}},
+{ 496944, 4, {34,29,24,21}},
+{ 496980, 4, {251,15,12,11}},
+{ 497040, 4, {109,19,16,15}},
+{ 497088, 4, {863,9,8,8}},
+{ 497232, 4, {1151,9,8,6}},
+{ 497340, 4, {307,15,12,9}},
+{ 497448, 4, {47,24,21,21}},
+{ 497520, 4, {691,10,9,8}},
+{ 497664, 4, {32,27,24,24}},
+{ 497700, 4, {79,21,20,15}},
+{ 497736, 4, {223,31,9,8}},
+{ 497952, 4, {38,26,24,21}},
+{ 498015, 4, {35,31,27,17}},
+{ 498096, 4, {1153,9,8,6}},
+{ 498150, 4, {41,27,25,18}},
+{ 498240, 4, {173,16,15,12}},
+{ 498312, 4, {769,9,9,8}},
+{ 498456, 4, {43,24,23,21}},
+{ 498480, 4, {67,31,16,15}},
+{ 498528, 4, {577,12,9,8}},
+{ 498600, 4, {277,15,12,10}},
+{ 498624, 4, {53,28,21,16}},
+{ 498750, 4, {35,30,25,19}},
+{ 498780, 4, {163,17,15,12}},
+{ 498960, 4, {30,28,27,22}},
+{ 499032, 4, {239,29,9,8}},
+{ 499140, 4, {59,47,15,12}},
+{ 499200, 4, {32,26,25,24}},
+{ 499380, 4, {41,29,21,20}},
+{ 499464, 4, {991,9,8,7}},
+{ 499500, 4, {37,27,25,20}},
+{ 499752, 4, {631,11,9,8}},
+{ 499896, 4, {131,53,9,8}},
+{ 499905, 4, {35,27,23,23}},
+{ 500000, 4, {32,25,25,25}},
+{ 500175, 4, {39,27,25,19}},
+{ 500400, 4, {139,16,15,15}},
+{ 500544, 4, {79,22,18,16}},
+{ 500616, 4, {409,17,9,8}},
+{ 500640, 4, {149,16,15,14}},
+{ 500832, 4, {47,37,18,16}},
+{ 500850, 4, {53,25,21,18}},
+{ 500904, 4, {773,9,9,8}},
+{ 500976, 4, {71,21,21,16}},
+{ 501120, 4, {30,29,24,24}},
+{ 501480, 4, {199,15,14,12}},
+{ 501552, 4, {43,27,24,18}},
+{ 501600, 4, {33,32,25,19}},
+{ 501696, 4, {67,26,18,16}},
+{ 501984, 4, {83,21,18,16}},
+{ 502056, 4, {367,19,9,8}},
+{ 502200, 4, {31,27,25,24}},
+{ 502272, 4, {109,18,16,16}},
+{ 502416, 4, {1163,9,8,6}},
+{ 502488, 4, {997,9,8,7}},
+{ 502740, 4, {35,28,27,19}},
+{ 502848, 4, {97,18,18,16}},
+{ 502920, 4, {127,22,15,12}},
+{ 502992, 4, {499,14,9,8}},
+{ 503040, 4, {131,16,16,15}},
+{ 503100, 4, {43,26,25,18}},
+{ 503208, 4, {241,29,9,8}},
+{ 503280, 4, {233,15,12,12}},
+{ 503328, 4, {107,21,16,14}},
+{ 503496, 4, {37,27,24,21}},
+{ 503820, 4, {311,15,12,9}},
+{ 504000, 4, {30,28,25,24}},
+{ 504216, 4, {149,47,9,8}},
+{ 504240, 4, {191,16,15,11}},
+{ 504252, 4, {29,28,27,23}},
+{ 504288, 4, {103,18,17,16}},
+{ 504336, 4, {79,21,19,16}},
+{ 504450, 4, {59,25,19,18}},
+{ 504504, 4, {33,28,26,21}},
+{ 504576, 4, {73,24,18,16}},
+{ 504600, 4, {29,29,25,24}},
+{ 504648, 4, {163,43,9,8}},
+{ 504720, 4, {701,10,9,8}},
+{ 504792, 4, {41,27,24,19}},
+{ 504900, 4, {34,27,25,22}},
+{ 505152, 4, {877,9,8,8}},
+{ 505296, 4, {33,29,24,22}},
+{ 505440, 4, {30,27,26,24}},
+{ 505512, 4, {59,24,21,17}},
+{ 505620, 4, {53,53,15,12}},
+{ 505680, 4, {43,28,21,20}},
+{ 505800, 4, {281,15,12,10}},
+{ 505872, 4, {1171,9,8,6}},
+{ 506160, 4, {37,30,24,19}},
+{ 506232, 4, {89,79,9,8}},
+{ 506250, 4, {30,27,25,25}},
+{ 506340, 4, {97,29,15,12}},
+{ 506376, 4, {541,13,9,8}},
+{ 506400, 4, {211,16,15,10}},
+{ 506520, 4, {67,21,20,18}},
+{ 506664, 4, {227,31,9,8}},
+{ 506736, 4, {34,27,24,23}},
+{ 506880, 4, {32,30,24,22}},
+{ 506940, 4, {71,21,20,17}},
+{ 507024, 4, {503,14,9,8}},
+{ 507060, 4, {313,15,12,9}},
+{ 507150, 4, {35,30,23,21}},
+{ 507168, 4, {587,12,9,8}},
+{ 507360, 4, {151,16,15,14}},
+{ 507384, 4, {29,27,27,24}},
+{ 507456, 4, {881,9,8,8}},
+{ 507528, 4, {53,24,21,19}},
+{ 507600, 4, {47,27,20,20}},
+{ 507672, 4, {641,11,9,8}},
+{ 507744, 4, {43,41,18,16}},
+{ 507840, 4, {32,30,23,23}},
+{ 508032, 4, {28,28,27,24}},
+{ 508080, 4, {73,29,16,15}},
+{ 508200, 4, {33,28,25,22}},
+{ 508368, 4, {89,21,17,16}},
+{ 508392, 4, {307,23,9,8}},
+{ 508536, 4, {1009,9,8,7}},
+{ 508560, 4, {163,16,15,13}},
+{ 508608, 4, {883,9,8,8}},
+{ 508680, 4, {157,18,15,12}},
+{ 508725, 4, {45,35,19,17}},
+{ 508824, 4, {191,37,9,8}},
+{ 508860, 4, {257,15,12,11}},
+{ 508896, 4, {32,31,27,19}},
+{ 508950, 4, {29,27,26,25}},
+{ 509040, 4, {101,21,16,15}},
+{ 509124, 4, {33,29,28,19}},
+{ 509220, 4, {41,27,23,20}},
+{ 509256, 4, {643,11,9,8}},
+{ 509400, 4, {283,15,12,10}},
+{ 509472, 4, {61,29,18,16}},
+{ 509520, 4, {193,16,15,11}},
+{ 509580, 4, {149,19,15,12}},
+{ 509712, 4, {41,37,21,16}},
+{ 509832, 4, {97,73,9,8}},
+{ 509976, 4, {787,9,9,8}},
+{ 510000, 4, {34,25,25,24}},
+{ 510048, 4, {33,28,24,23}},
+{ 510192, 4, {1181,9,8,6}},
+{ 510264, 4, {373,19,9,8}},
+{ 510300, 4, {28,27,27,25}},
+{ 510400, 4, {32,29,25,22}},
+{ 510480, 4, {709,10,9,8}},
+{ 510552, 4, {1013,9,8,7}},
+{ 510600, 4, {37,25,24,23}},
+{ 510696, 4, {173,41,9,8}},
+{ 510720, 4, {32,30,28,19}},
+{ 510840, 4, {43,27,22,20}},
+{ 510912, 4, {887,9,8,8}},
+{ 510984, 4, {151,47,9,8}},
+{ 511020, 4, {167,17,15,12}},
+{ 511056, 4, {28,27,26,26}},
+{ 511104, 4, {33,32,22,22}},
+{ 511128, 4, {229,31,9,8}},
+{ 511632, 4, {34,33,24,19}},
+{ 511980, 4, {53,23,21,20}},
+{ 511992, 4, {547,13,9,8}},
+{ 512000, 4, {32,32,25,20}},
+{ 512064, 4, {127,18,16,14}},
+{ 512160, 4, {97,22,16,15}},
+{ 512325, 4, {33,27,25,23}},
+{ 512352, 4, {593,12,9,8}},
+{ 512400, 4, {61,21,20,20}},
+{ 512424, 4, {647,11,9,8}},
+{ 512550, 4, {67,25,18,17}},
+{ 512640, 4, {89,20,18,16}},
+{ 512736, 4, {109,21,16,14}},
+{ 512784, 4, {1187,9,8,6}},
+{ 512856, 4, {419,17,9,8}},
+{ 512928, 4, {137,18,16,13}},
+{ 513072, 4, {509,14,9,8}},
+{ 513216, 4, {33,27,24,24}},
+{ 513240, 4, {47,26,21,20}},
+{ 513360, 4, {31,30,24,23}},
+{ 513540, 4, {317,15,12,9}},
+{ 513576, 4, {1019,9,8,7}},
+{ 513600, 4, {107,20,16,15}},
+{ 514080, 4, {34,30,24,21}},
+{ 514152, 4, {193,37,9,8}},
+{ 514584, 4, {1021,9,8,7}},
+{ 514944, 4, {149,18,16,12}},
+{ 515016, 4, {311,23,9,8}},
+{ 515088, 4, {73,21,21,16}},
+{ 515160, 4, {53,27,20,18}},
+{ 515200, 4, {32,28,25,23}},
+{ 515280, 4, {113,19,16,15}},
+{ 515304, 4, {421,17,9,8}},
+{ 515376, 4, {1193,9,8,6}},
+{ 515424, 4, {59,26,21,16}},
+{ 515520, 4, {179,16,15,12}},
+{ 515592, 4, {31,28,27,22}},
+{ 515700, 4, {191,15,15,12}},
+{ 515970, 4, {35,27,26,21}},
+{ 516000, 4, {43,25,24,20}},
+{ 516060, 4, {61,47,15,12}},
+{ 516150, 4, {37,31,25,18}},
+{ 516168, 4, {107,67,9,8}},
+{ 516240, 4, {239,15,12,12}},
+{ 516312, 4, {101,71,9,8}},
+{ 516375, 4, {45,27,25,17}},
+{ 516420, 4, {151,19,15,12}},
+{ 516432, 4, {53,29,21,16}},
+{ 516456, 4, {797,9,9,8}},
+{ 516600, 4, {41,25,24,21}},
+{ 516672, 4, {32,27,26,23}},
+{ 516800, 4, {34,32,25,19}},
+{ 517032, 4, {167,43,9,8}},
+{ 517104, 4, {38,27,24,21}},
+{ 517176, 4, {653,11,9,8}},
+{ 517536, 4, {599,12,9,8}},
+{ 517680, 4, {719,10,9,8}},
+{ 517776, 4, {67,23,21,16}},
+{ 517920, 4, {83,26,16,15}},
+{ 518160, 4, {127,17,16,15}},
+{ 518328, 4, {313,23,9,8}},
+{ 518400, 4, {30,30,24,24}},
+{ 518472, 4, {379,19,9,8}},
+{ 518580, 4, {67,43,15,12}},
+{ 518700, 4, {35,30,26,19}},
+{ 518760, 4, {131,22,15,12}},
+{ 518832, 4, {1201,9,8,6}},
+{ 518940, 4, {31,31,27,20}},
+{ 519120, 4, {103,21,16,15}},
+{ 519264, 4, {601,12,9,8}},
+{ 519480, 4, {37,27,26,20}},
+{ 519624, 4, {1031,9,8,7}},
+{ 519840, 4, {38,30,24,19}},
+{ 520000, 4, {32,26,25,25}},
+{ 520056, 4, {233,31,9,8}},
+{ 520080, 4, {197,16,15,11}},
+{ 520128, 4, {43,24,24,21}},
+{ 520200, 4, {34,34,25,18}},
+{ 520380, 4, {59,21,21,20}},
+{ 520416, 4, {139,18,16,13}},
+{ 520560, 4, {241,15,12,12}},
+{ 520632, 4, {1033,9,8,7}},
+{ 520695, 4, {35,29,27,19}},
+{ 520704, 4, {113,18,16,16}},
+{ 520740, 4, {263,15,12,11}},
+{ 520800, 4, {31,28,25,24}},
+{ 521040, 4, {167,16,15,13}},
+{ 521100, 4, {193,15,15,12}},
+{ 521136, 4, {47,24,22,21}},
+{ 521220, 4, {73,21,20,17}},
+{ 521280, 4, {181,16,15,12}},
+{ 521352, 4, {557,13,9,8}},
+{ 521472, 4, {97,21,16,16}},
+{ 521520, 4, {53,41,16,15}},
+{ 521550, 4, {61,25,19,18}},
+{ 521640, 4, {30,28,27,23}},
+{ 521664, 4, {33,32,26,19}},
+{ 521820, 4, {223,15,13,12}},
+{ 521856, 4, {151,18,16,12}},
+{ 521928, 4, {659,11,9,8}},
+{ 522000, 4, {30,29,25,24}},
+{ 522144, 4, {37,28,24,21}},
+{ 522288, 4, {31,27,26,24}},
+{ 522432, 4, {907,9,8,8}},
+{ 522450, 4, {43,27,25,18}},
+{ 522648, 4, {61,24,21,17}},
+{ 522720, 4, {33,30,24,22}},
+{ 522792, 4, {137,53,9,8}},
+{ 522900, 4, {83,21,20,15}},
+{ 523125, 4, {31,27,25,25}},
+{ 523200, 4, {109,20,16,15}},
+{ 523296, 4, {79,23,18,16}},
+{ 523320, 4, {89,21,20,14}},
+{ 523440, 4, {727,10,9,8}},
+{ 523512, 4, {661,11,9,8}},
+{ 523584, 4, {101,18,18,16}},
+{ 523656, 4, {1039,9,8,7}},
+{ 523740, 4, {43,29,21,20}},
+{ 523872, 4, {107,18,17,16}},
+{ 523908, 4, {33,28,27,21}},
+{ 523920, 4, {59,37,16,15}},
+{ 523944, 4, {383,19,9,8}},
+{ 523980, 4, {71,41,15,12}},
+{ 524016, 4, {1213,9,8,6}},
+{ 524088, 4, {251,29,9,8}},
+{ 524160, 4, {30,28,26,24}},
+{ 524232, 4, {809,9,9,8}},
+{ 524400, 4, {38,25,24,23}},
+{ 524448, 4, {607,12,9,8}},
+{ 524475, 4, {37,27,25,21}},
+{ 524700, 4, {53,25,22,18}},
+{ 524736, 4, {911,9,8,8}},
+{ 524808, 4, {197,37,9,8}},
+{ 524832, 4, {71,22,21,16}},
+{ 524880, 4, {30,27,27,24}},
+{ 524952, 4, {317,23,9,8}},
+{ 525168, 4, {521,14,9,8}},
+{ 525312, 4, {32,32,27,19}},
+{ 525360, 4, {199,16,15,11}},
+{ 525528, 4, {811,9,9,8}},
+{ 525744, 4, {1217,9,8,6}},
+{ 525780, 4, {127,23,15,12}},
+{ 525816, 4, {109,67,9,8}},
+{ 525825, 4, {41,27,25,19}},
+{ 525888, 4, {83,22,18,16}},
+{ 526080, 4, {137,16,16,15}},
+{ 526140, 4, {79,37,15,12}},
+{ 526176, 4, {29,28,27,24}},
+{ 526500, 4, {30,27,26,25}},
+{ 526536, 4, {103,71,9,8}},
+{ 526680, 4, {33,30,28,19}},
+{ 526752, 4, {59,31,18,16}},
+{ 526968, 4, {563,13,9,8}},
+{ 527184, 4, {523,14,9,8}},
+{ 527220, 4, {101,29,15,12}},
+{ 527400, 4, {293,15,12,10}},
+{ 527436, 4, {39,28,23,21}},
+{ 527472, 4, {37,27,24,22}},
+{ 527520, 4, {157,16,15,14}},
+{ 527544, 4, {431,17,9,8}},
+{ 527760, 4, {733,10,9,8}},
+{ 527850, 4, {34,27,25,23}},
+{ 527877, 4, {49,27,21,19}},
+{ 528000, 4, {32,30,25,22}},
+{ 528120, 4, {163,18,15,12}},
+{ 528192, 4, {131,18,16,14}},
+{ 528240, 4, {71,31,16,15}},
+{ 528264, 4, {33,29,24,23}},
+{ 528336, 4, {1223,9,8,6}},
+{ 528360, 4, {37,34,21,20}},
+{ 528408, 4, {179,41,9,8}},
+{ 528525, 4, {29,27,27,25}},
+{ 528528, 4, {33,28,26,22}},
+{ 528696, 4, {1049,9,8,7}},
+{ 528750, 4, {47,25,25,18}},
+{ 528768, 4, {34,27,24,24}},
+{ 528960, 4, {32,30,29,19}},
+{ 529200, 4, {28,28,27,25}},
+{ 529344, 4, {919,9,8,8}},
+{ 529380, 4, {173,17,15,12}},
+{ 529416, 4, {43,27,24,19}},
+{ 529632, 4, {613,12,9,8}},
+{ 529704, 4, {1051,9,8,7}},
+{ 529872, 4, {83,21,19,16}},
+{ 529920, 4, {32,30,24,23}},
+{ 529992, 4, {433,17,9,8}},
+{ 530136, 4, {199,37,9,8}},
+{ 530145, 4, {35,33,27,17}},
+{ 530160, 4, {47,47,16,15}},
+{ 530400, 4, {34,26,25,24}},
+{ 530424, 4, {139,53,9,8}},
+{ 530712, 4, {28,27,27,26}},
+{ 530784, 4, {97,19,18,16}},
+{ 530856, 4, {101,73,9,8}},
+{ 530880, 4, {79,21,20,16}},
+{ 530928, 4, {1229,9,8,6}},
+{ 531000, 4, {59,25,20,18}},
+{ 531180, 4, {227,15,13,12}},
+{ 531216, 4, {34,31,24,21}},
+{ 531288, 4, {157,47,9,8}},
+{ 531300, 4, {33,28,25,23}},
+{ 531360, 4, {41,27,24,20}},
+{ 531468, 4, {37,28,27,19}},
+{ 531552, 4, {113,21,16,14}},
+{ 531648, 4, {71,26,18,16}},
+{ 531720, 4, {211,15,14,12}},
+{ 531792, 4, {1231,9,8,6}},
+{ 531864, 4, {89,83,9,8}},
+{ 531900, 4, {197,15,15,12}},
+{ 532000, 4, {35,32,25,19}},
+{ 532008, 4, {821,9,9,8}},
+{ 532080, 4, {739,10,9,8}},
+{ 532152, 4, {389,19,9,8}},
+{ 532224, 4, {33,28,24,24}},
+{ 532440, 4, {34,29,27,20}},
+{ 532512, 4, {43,43,18,16}},
+{ 532584, 4, {569,13,9,8}},
+{ 532620, 4, {269,15,12,11}},
+{ 532800, 4, {37,25,24,24}},
+{ 532896, 4, {61,26,21,16}},
+{ 532980, 4, {47,27,21,20}},
+{ 533016, 4, {673,11,9,8}},
+{ 533088, 4, {617,12,9,8}},
+{ 533250, 4, {79,25,18,15}},
+{ 533280, 4, {101,22,16,15}},
+{ 533304, 4, {823,9,9,8}},
+{ 533448, 4, {239,31,9,8}},
+{ 533600, 4, {32,29,25,23}},
+{ 533664, 4, {109,18,17,16}},
+{ 533760, 4, {139,16,16,15}},
+{ 533820, 4, {41,31,21,20}},
+{ 533952, 4, {103,18,18,16}},
+{ 534060, 4, {43,27,23,20}},
+{ 534240, 4, {53,24,21,20}},
+{ 534312, 4, {181,41,9,8}},
+{ 534336, 4, {33,32,23,22}},
+{ 534384, 4, {1237,9,8,6}},
+{ 534456, 4, {571,13,9,8}},
+{ 534480, 4, {131,17,16,15}},
+{ 534576, 4, {43,37,21,16}},
+{ 534660, 4, {67,21,20,19}},
+{ 534744, 4, {1061,9,8,7}},
+{ 534816, 4, {619,12,9,8}},
+{ 534960, 4, {743,10,9,8}},
+{ 535050, 4, {41,29,25,18}},
+{ 535104, 4, {929,9,8,8}},
+{ 535200, 4, {223,16,15,10}},
+{ 535248, 4, {59,24,21,18}},
+{ 535392, 4, {33,26,26,24}},
+{ 535440, 4, {97,23,16,15}},
+{ 535608, 4, {173,43,9,8}},
+{ 535680, 4, {31,30,24,24}},
+{ 535752, 4, {1063,9,8,7}},
+{ 535800, 4, {47,25,24,19}},
+{ 535815, 4, {35,27,27,21}},
+{ 535860, 4, {229,15,13,12}},
+{ 535896, 4, {827,9,9,8}},
+{ 536184, 4, {677,11,9,8}},
+{ 536220, 4, {331,15,12,9}},
+{ 536256, 4, {38,28,24,21}},
+{ 536400, 4, {149,16,15,15}},
+{ 536544, 4, {32,27,27,23}},
+{ 536580, 4, {271,15,12,11}},
+{ 536616, 4, {257,29,9,8}},
+{ 536625, 4, {53,27,25,15}},
+{ 536760, 4, {71,21,20,18}},
+{ 536940, 4, {157,19,15,12}},
+{ 537192, 4, {829,9,9,8}},
+{ 537264, 4, {41,26,24,21}},
+{ 537300, 4, {199,15,15,12}},
+{ 537336, 4, {439,17,9,8}},
+{ 537600, 4, {32,28,25,24}},
+{ 537660, 4, {103,29,15,12}},
+{ 537912, 4, {241,31,9,8}},
+{ 538020, 4, {61,21,21,20}},
+{ 538272, 4, {89,21,18,16}},
+{ 538560, 4, {34,30,24,22}},
+{ 538650, 4, {35,30,27,19}},
+{ 538740, 4, {73,41,15,12}},
+{ 538776, 4, {1069,9,8,7}},
+{ 539028, 4, {31,28,27,23}},
+{ 539136, 4, {32,27,26,24}},
+{ 539280, 4, {107,21,16,15}},
+{ 539325, 4, {47,27,25,17}},
+{ 539400, 4, {31,29,25,24}},
+{ 539460, 4, {37,27,27,20}},
+{ 539496, 4, {127,59,9,8}},
+{ 539568, 4, {1249,9,8,6}},
+{ 539616, 4, {73,22,21,16}},
+{ 539712, 4, {937,9,8,8}},
+{ 539760, 4, {173,16,15,13}},
+{ 539784, 4, {34,28,27,21}},
+{ 540000, 4, {30,30,25,24}},
+{ 540072, 4, {577,13,9,8}},
+{ 540144, 4, {33,31,24,22}},
+{ 540288, 4, {67,24,21,16}},
+{ 540600, 4, {53,25,24,17}},
+{ 540720, 4, {751,10,9,8}},
+{ 540792, 4, {37,29,24,21}},
+{ 540800, 4, {32,26,26,25}},
+{ 540936, 4, {683,11,9,8}},
+{ 541080, 4, {167,18,15,12}},
+{ 541200, 4, {41,25,24,22}},
+{ 541260, 4, {97,31,15,12}},
+{ 541368, 4, {103,73,9,8}},
+{ 541620, 4, {59,27,20,17}},
+{ 541680, 4, {61,37,16,15}},
+{ 541728, 4, {33,32,27,19}},
+{ 541800, 4, {43,25,24,21}},
+{ 542016, 4, {941,9,8,8}},
+{ 542080, 4, {35,32,22,22}},
+{ 542160, 4, {251,15,12,12}},
+{ 542232, 4, {443,17,9,8}},
+{ 542340, 4, {131,23,15,12}},
+{ 542376, 4, {31,27,27,24}},
+{ 542400, 4, {113,20,16,15}},
+{ 542520, 4, {137,22,15,12}},
+{ 542592, 4, {157,18,16,12}},
+{ 542700, 4, {67,25,18,18}},
+{ 542880, 4, {30,29,26,24}},
+{ 542976, 4, {101,21,16,16}},
+{ 543096, 4, {397,19,9,8}},
+{ 543120, 4, {73,31,16,15}},
+{ 543150, 4, {71,25,18,17}},
+{ 543312, 4, {33,28,28,21}},
+{ 543375, 4, {35,27,25,23}},
+{ 543600, 4, {151,16,15,15}},
+{ 543672, 4, {839,9,9,8}},
+{ 543780, 4, {53,27,20,19}},
+{ 543840, 4, {103,22,16,15}},
+{ 543888, 4, {1259,9,8,6}},
+{ 544000, 4, {34,32,25,20}},
+{ 544050, 4, {31,27,26,25}},
+{ 544236, 4, {33,31,28,19}},
+{ 544320, 4, {30,28,27,24}},
+{ 544608, 4, {61,31,18,16}},
+{ 544800, 4, {227,16,15,10}},
+{ 544824, 4, {47,24,23,21}},
+{ 544968, 4, {29,29,27,24}},
+{ 545040, 4, {757,10,9,8}},
+{ 545112, 4, {113,67,9,8}},
+{ 545160, 4, {59,22,21,20}},
+{ 545184, 4, {631,12,9,8}},
+{ 545220, 4, {233,15,13,12}},
+{ 545328, 4, {541,14,9,8}},
+{ 545472, 4, {947,9,8,8}},
+{ 545600, 4, {32,31,25,22}},
+{ 545832, 4, {38,28,27,19}},
+{ 545940, 4, {337,15,12,9}},
+{ 546048, 4, {79,24,18,16}},
+{ 546210, 4, {35,34,27,17}},
+{ 546480, 4, {33,30,24,23}},
+{ 546624, 4, {73,26,18,16}},
+{ 546750, 4, {30,27,27,25}},
+{ 546960, 4, {53,43,16,15}},
+{ 546984, 4, {107,71,9,8}},
+{ 547200, 4, {32,30,30,19}},
+{ 547272, 4, {691,11,9,8}},
+{ 547680, 4, {163,16,15,14}},
+{ 547740, 4, {179,17,15,12}},
+{ 547848, 4, {1087,9,8,7}},
+{ 547920, 4, {761,10,9,8}},
+{ 548100, 4, {29,28,27,25}},
+{ 548136, 4, {331,23,9,8}},
+{ 548208, 4, {47,27,24,18}},
+{ 548460, 4, {277,15,12,11}},
+{ 548550, 4, {53,25,23,18}},
+{ 548568, 4, {401,19,9,8}},
+{ 548640, 4, {127,18,16,15}},
+{ 548688, 4, {71,23,21,16}},
+{ 548856, 4, {33,28,27,22}},
+{ 548928, 4, {953,9,8,8}},
+{ 549000, 4, {61,25,20,18}},
+{ 549120, 4, {32,30,26,22}},
+{ 549144, 4, {263,29,9,8}},
+{ 549360, 4, {109,21,16,15}},
+{ 549432, 4, {587,13,9,8}},
+{ 549450, 4, {37,27,25,22}},
+{ 549540, 4, {71,43,15,12}},
+{ 549576, 4, {449,17,9,8}},
+{ 549600, 4, {229,16,15,10}},
+{ 549792, 4, {83,23,18,16}},
+{ 549840, 4, {79,29,16,15}},
+{ 549864, 4, {1091,9,8,7}},
+{ 549900, 4, {47,26,25,18}},
+{ 550080, 4, {191,16,15,12}},
+{ 550368, 4, {28,28,27,26}},
+{ 550440, 4, {139,22,15,12}},
+{ 550800, 4, {34,27,25,24}},
+{ 550872, 4, {1093,9,8,7}},
+{ 551124, 4, {28,27,27,27}},
+{ 551232, 4, {33,29,24,24}},
+{ 551250, 4, {35,30,25,21}},
+{ 551376, 4, {547,14,9,8}},
+{ 551448, 4, {37,27,24,23}},
+{ 551475, 4, {43,27,25,19}},
+{ 551592, 4, {163,47,9,8}},
+{ 551664, 4, {1277,9,8,6}},
+{ 551736, 4, {97,79,9,8}},
+{ 551880, 4, {73,21,20,18}},
+{ 552000, 4, {32,30,25,23}},
+{ 552048, 4, {53,31,21,16}},
+{ 552384, 4, {137,18,16,14}},
+{ 552528, 4, {1279,9,8,6}},
+{ 552552, 4, {33,28,26,23}},
+{ 552600, 4, {307,15,12,10}},
+{ 552672, 4, {101,19,18,16}},
+{ 552720, 4, {47,28,21,20}},
+{ 552744, 4, {853,9,9,8}},
+{ 552780, 4, {83,37,15,12}},
+{ 552825, 4, {39,27,25,21}},
+{ 552888, 4, {1097,9,8,7}},
+{ 552960, 4, {32,30,24,24}},
+{ 553248, 4, {113,18,17,16}},
+{ 553280, 4, {35,32,26,19}},
+{ 553392, 4, {61,24,21,18}},
+{ 553500, 4, {41,27,25,20}},
+{ 553680, 4, {769,10,9,8}},
+{ 553728, 4, {103,21,16,16}},
+{ 553824, 4, {641,12,9,8}},
+{ 553860, 4, {181,17,15,12}},
+{ 554064, 4, {97,21,17,16}},
+{ 554184, 4, {179,43,9,8}},
+{ 554256, 4, {1283,9,8,6}},
+{ 554688, 4, {107,18,18,16}},
+{ 554736, 4, {127,21,16,13}},
+{ 554976, 4, {47,41,18,16}},
+{ 555000, 4, {37,25,25,24}},
+{ 555048, 4, {593,13,9,8}},
+{ 555072, 4, {59,28,21,16}},
+{ 555120, 4, {257,15,12,12}},
+{ 555192, 4, {701,11,9,8}},
+{ 555336, 4, {857,9,9,8}},
+{ 555360, 4, {89,26,16,15}},
+{ 555408, 4, {38,29,24,21}},
+{ 555450, 4, {35,30,23,23}},
+{ 555552, 4, {643,12,9,8}},
+{ 555660, 4, {35,28,27,21}},
+{ 555840, 4, {193,16,15,12}},
+{ 555912, 4, {1103,9,8,7}},
+{ 555984, 4, {33,27,26,24}},
+{ 556380, 4, {281,15,12,11}},
+{ 556416, 4, {32,28,27,23}},
+{ 556488, 4, {131,59,9,8}},
+{ 556500, 4, {53,25,21,20}},
+{ 556560, 4, {773,10,9,8}},
+{ 556605, 4, {35,31,27,19}},
+{ 556632, 4, {859,9,9,8}},
+{ 556776, 4, {37,33,24,19}},
+{ 556800, 4, {32,29,25,24}},
+{ 556848, 4, {1289,9,8,6}},
+{ 556875, 4, {33,27,25,25}},
+{ 556992, 4, {967,9,8,8}},
+{ 557040, 4, {211,16,15,11}},
+{ 557208, 4, {109,71,9,8}},
+{ 557280, 4, {43,27,24,20}},
+{ 557424, 4, {79,21,21,16}},
+{ 557460, 4, {163,19,15,12}},
+{ 557520, 4, {101,23,16,15}},
+{ 557550, 4, {59,25,21,18}},
+{ 557568, 4, {33,32,24,22}},
+{ 557712, 4, {1291,9,8,6}},
+{ 557760, 4, {83,21,20,16}},
+{ 557784, 4, {127,61,9,8}},
+{ 557856, 4, {149,18,16,13}},
+{ 557928, 4, {41,27,24,21}},
+{ 558000, 4, {31,30,25,24}},
+{ 558072, 4, {337,23,9,8}},
+{ 558144, 4, {34,32,27,19}},
+{ 558360, 4, {47,27,22,20}},
+{ 558450, 4, {73,25,18,17}},
+{ 558480, 4, {179,16,15,13}},
+{ 558540, 4, {107,29,15,12}},
+{ 558600, 4, {35,30,28,19}},
+{ 558624, 4, {33,32,23,23}},
+{ 558720, 4, {97,20,18,16}},
+{ 558936, 4, {1109,9,8,7}},
+{ 558960, 4, {137,17,16,15}},
+{ 559008, 4, {647,12,9,8}},
+{ 559200, 4, {233,16,15,10}},
+{ 559224, 4, {863,9,9,8}},
+{ 559260, 4, {239,15,13,12}},
+{ 559296, 4, {971,9,8,8}},
+{ 559368, 4, {457,17,9,8}},
+{ 559440, 4, {37,30,24,21}},
+{ 559512, 4, {409,19,9,8}},
+{ 559584, 4, {67,29,18,16}},
+{ 559800, 4, {311,15,12,10}},
+{ 559860, 4, {43,31,21,20}},
+{ 559872, 4, {32,27,27,24}},
+{ 559980, 4, {61,27,20,17}},
+{ 560000, 4, {32,28,25,25}},
+{ 560232, 4, {251,31,9,8}},
+{ 560250, 4, {83,25,18,15}},
+{ 560304, 4, {1297,9,8,6}},
+{ 560340, 4, {283,15,12,11}},
+{ 560376, 4, {181,43,9,8}},
+{ 560448, 4, {139,18,16,14}},
+{ 560520, 4, {173,18,15,12}},
+{ 560664, 4, {599,13,9,8}},
+{ 560700, 4, {89,21,20,15}},
+{ 560880, 4, {41,30,24,19}},
+{ 560952, 4, {53,24,21,21}},
+{ 561120, 4, {167,16,15,14}},
+{ 561150, 4, {43,29,25,18}},
+{ 561456, 4, {557,14,9,8}},
+{ 561528, 4, {709,11,9,8}},
+{ 561600, 4, {30,30,26,24}},
+{ 561672, 4, {269,29,9,8}},
+{ 561792, 4, {33,32,28,19}},
+{ 561960, 4, {223,15,14,12}},
+{ 562032, 4, {1301,9,8,6}},
+{ 562104, 4, {211,37,9,8}},
+{ 562140, 4, {347,15,12,9}},
+{ 562275, 4, {35,35,27,17}},
+{ 562392, 4, {107,73,9,8}},
+{ 562464, 4, {31,28,27,24}},
+{ 562536, 4, {601,13,9,8}},
+{ 562716, 4, {33,29,28,21}},
+{ 562752, 4, {977,9,8,8}},
+{ 562800, 4, {67,21,20,20}},
+{ 562860, 4, {59,53,15,12}},
+{ 562896, 4, {1303,9,8,6}},
+{ 562968, 4, {1117,9,8,7}},
+{ 563040, 4, {34,30,24,23}},
+{ 563200, 4, {32,32,25,22}},
+{ 563328, 4, {163,18,16,12}},
+{ 563400, 4, {313,15,12,10}},
+{ 563472, 4, {43,26,24,21}},
+{ 563580, 4, {101,31,15,12}},
+{ 563616, 4, {103,19,18,16}},
+{ 563640, 4, {61,22,21,20}},
+{ 563760, 4, {30,29,27,24}},
+{ 563832, 4, {191,41,9,8}},
+{ 563904, 4, {89,22,18,16}},
+{ 563940, 4, {241,15,13,12}},
+{ 564000, 4, {47,25,24,20}},
+{ 564060, 4, {79,21,20,17}},
+{ 564144, 4, {73,23,21,16}},
+{ 564192, 4, {653,12,9,8}},
+{ 564264, 4, {461,17,9,8}},
+{ 564480, 4, {30,28,28,24}},
+{ 564624, 4, {1307,9,8,6}},
+{ 564696, 4, {33,31,24,23}},
+{ 564720, 4, {181,16,15,13}},
+{ 564768, 4, {53,37,18,16}},
+{ 564816, 4, {41,41,21,16}},
+{ 564960, 4, {107,22,16,15}},
+{ 564975, 4, {31,27,27,25}},
+{ 564984, 4, {59,24,21,19}},
+{ 565020, 4, {73,43,15,12}},
+{ 565056, 4, {109,18,18,16}},
+{ 565110, 4, {35,27,26,23}},
+{ 565128, 4, {167,47,9,8}},
+{ 565200, 4, {157,16,15,15}},
+{ 565344, 4, {151,18,16,13}},
+{ 565380, 4, {349,15,12,9}},
+{ 565440, 4, {32,31,30,19}},
+{ 565488, 4, {34,28,27,22}},
+{ 565800, 4, {41,25,24,23}},
+{ 565848, 4, {271,29,9,8}},
+{ 565920, 4, {131,18,16,15}},
+{ 565992, 4, {1123,9,8,7}},
+{ 566100, 4, {37,34,25,18}},
+{ 566208, 4, {983,9,8,8}},
+{ 566352, 4, {38,27,24,23}},
+{ 566580, 4, {71,21,20,19}},
+{ 566640, 4, {787,10,9,8}},
+{ 566712, 4, {463,17,9,8}},
+{ 566720, 4, {35,32,23,22}},
+{ 566820, 4, {67,47,15,12}},
+{ 567000, 4, {30,28,27,25}},
+{ 567120, 4, {139,17,16,15}},
+{ 567180, 4, {137,23,15,12}},
+{ 567360, 4, {197,16,15,12}},
+{ 567504, 4, {563,14,9,8}},
+{ 567600, 4, {43,25,24,22}},
+{ 567675, 4, {29,29,27,25}},
+{ 568080, 4, {263,15,12,12}},
+{ 568152, 4, {607,13,9,8}},
+{ 568176, 4, {89,21,19,16}},
+{ 568296, 4, {877,9,9,8}},
+{ 568512, 4, {47,24,24,21}},
+{ 568560, 4, {103,23,16,15}},
+{ 568575, 4, {45,35,19,19}},
+{ 568584, 4, {149,53,9,8}},
+{ 568980, 4, {109,29,15,12}},
+{ 569016, 4, {1129,9,8,7}},
+{ 569160, 4, {34,31,27,20}},
+{ 569184, 4, {33,28,28,22}},
+{ 569376, 4, {659,12,9,8}},
+{ 569448, 4, {719,11,9,8}},
+{ 569520, 4, {113,21,16,15}},
+{ 569700, 4, {211,15,15,12}},
+{ 569736, 4, {193,41,9,8}},
+{ 569808, 4, {1319,9,8,6}},
+{ 569940, 4, {59,23,21,20}},
+{ 570000, 4, {38,25,25,24}},
+{ 570024, 4, {29,28,27,26}},
+{ 570240, 4, {33,30,24,24}},
+{ 570312, 4, {89,89,9,8}},
+{ 570360, 4, {97,21,20,14}},
+{ 570400, 4, {32,31,25,23}},
+{ 570600, 4, {317,15,12,10}},
+{ 570672, 4, {1321,9,8,6}},
+{ 570816, 4, {991,9,8,8}},
+{ 570888, 4, {881,9,9,8}},
+{ 571050, 4, {47,27,25,18}},
+{ 571104, 4, {661,12,9,8}},
+{ 571140, 4, {167,19,15,12}},
+{ 571200, 4, {34,28,25,24}},
+{ 571536, 4, {28,28,27,27}},
+{ 571608, 4, {467,17,9,8}},
+{ 571824, 4, {38,33,24,19}},
+{ 571860, 4, {353,15,12,9}},
+{ 571950, 4, {41,31,25,18}},
+{ 572040, 4, {227,15,14,12}},
+{ 572160, 4, {149,16,16,15}},
+{ 572184, 4, {883,9,9,8}},
+{ 572208, 4, {131,21,16,13}},
+{ 572400, 4, {53,27,20,20}},
+{ 572460, 4, {47,29,21,20}},
+{ 572544, 4, {71,24,21,16}},
+{ 572832, 4, {34,27,26,24}},
+{ 572850, 4, {67,25,19,18}},
+{ 572904, 4, {109,73,9,8}},
+{ 573120, 4, {199,16,15,12}},
+{ 573192, 4, {419,19,9,8}},
+{ 573264, 4, {1327,9,8,6}},
+{ 573300, 4, {35,30,26,21}},
+{ 573480, 4, {59,27,20,18}},
+{ 573552, 4, {569,14,9,8}},
+{ 573600, 4, {239,16,15,10}},
+{ 573624, 4, {257,31,9,8}},
+{ 573696, 4, {83,24,18,16}},
+{ 573750, 4, {34,27,25,25}},
+{ 573768, 4, {613,13,9,8}},
+{ 573804, 4, {33,28,27,23}},
+{ 573840, 4, {797,10,9,8}},
+{ 573888, 4, {61,28,21,16}},
+{ 574056, 4, {67,24,21,17}},
+{ 574080, 4, {32,30,26,23}},
+{ 574272, 4, {997,9,8,8}},
+{ 574425, 4, {37,27,25,23}},
+{ 574488, 4, {101,79,9,8}},
+{ 574560, 4, {35,32,27,19}},
+{ 574632, 4, {347,23,9,8}},
+{ 574740, 4, {103,31,15,12}},
+{ 574776, 4, {887,9,9,8}},
+{ 574896, 4, {59,29,21,16}},
+{ 574980, 4, {37,37,21,20}},
+{ 574992, 4, {33,33,24,22}},
+{ 575100, 4, {71,25,18,18}},
+{ 575232, 4, {107,21,16,16}},
+{ 575352, 4, {131,61,9,8}},
+{ 575424, 4, {37,27,24,24}},
+{ 575460, 4, {139,23,15,12}},
+{ 575505, 4, {35,29,27,21}},
+{ 575520, 4, {109,22,16,15}},
+{ 575568, 4, {571,14,9,8}},
+{ 575640, 4, {41,27,26,20}},
+{ 575784, 4, {727,11,9,8}},
+{ 575928, 4, {421,19,9,8}},
+{ 576000, 4, {32,30,25,24}},
+{ 576216, 4, {151,53,9,8}},
+{ 576288, 4, {32,29,27,23}},
+{ 576450, 4, {61,25,21,18}},
+{ 576576, 4, {33,28,26,24}},
+{ 576600, 4, {31,31,25,24}},
+{ 576912, 4, {101,21,17,16}},
+{ 577080, 4, {229,15,14,12}},
+{ 577125, 4, {45,27,25,19}},
+{ 577152, 4, {167,18,16,12}},
+{ 577200, 4, {37,26,25,24}},
+{ 577368, 4, {33,27,27,24}},
+{ 577500, 4, {33,28,25,25}},
+{ 577512, 4, {617,13,9,8}},
+{ 577656, 4, {113,71,9,8}},
+{ 577668, 4, {39,28,23,23}},
+{ 577680, 4, {83,29,16,15}},
+{ 577944, 4, {349,23,9,8}},
+{ 578088, 4, {37,31,24,21}},
+{ 578151, 4, {49,27,23,19}},
+{ 578376, 4, {277,29,9,8}},
+{ 578400, 4, {241,16,15,10}},
+{ 578550, 4, {35,30,29,19}},
+{ 578592, 4, {41,28,24,21}},
+{ 578664, 4, {47,27,24,19}},
+{ 578760, 4, {53,26,21,20}},
+{ 579120, 4, {127,19,16,15}},
+{ 579150, 4, {33,27,26,25}},
+{ 579348, 4, {33,33,28,19}},
+{ 579384, 4, {619,13,9,8}},
+{ 579420, 4, {37,29,27,20}},
+{ 579672, 4, {97,83,9,8}},
+{ 579840, 4, {151,16,16,15}},
+{ 579960, 4, {179,18,15,12}},
+{ 580000, 4, {32,29,25,25}},
+{ 580104, 4, {1151,9,8,7}},
+{ 580140, 4, {293,15,12,11}},
+{ 580320, 4, {31,30,26,24}},
+{ 580500, 4, {43,27,25,20}},
+{ 580536, 4, {733,11,9,8}},
+{ 580560, 4, {59,41,16,15}},
+{ 580608, 4, {32,28,27,24}},
+{ 580800, 4, {33,32,25,22}},
+{ 581040, 4, {269,15,12,12}},
+{ 581112, 4, {1153,9,8,7}},
+{ 581175, 4, {41,27,25,21}},
+{ 581184, 4, {1009,9,8,8}},
+{ 581280, 4, {173,16,15,14}},
+{ 581472, 4, {673,12,9,8}},
+{ 581544, 4, {197,41,9,8}},
+{ 581580, 4, {359,15,12,9}},
+{ 581616, 4, {577,14,9,8}},
+{ 581760, 4, {101,20,18,16}},
+{ 581856, 4, {33,32,29,19}},
+{ 581940, 4, {61,53,15,12}},
+{ 581976, 4, {137,59,9,8}},
+{ 582048, 4, {47,43,18,16}},
+{ 582120, 4, {33,30,28,21}},
+{ 582400, 4, {32,28,26,25}},
+{ 582480, 4, {809,10,9,8}},
+{ 582540, 4, {73,21,20,19}},
+{ 582552, 4, {31,29,27,24}},
+{ 582624, 4, {34,34,24,21}},
+{ 582912, 4, {33,32,24,23}},
+{ 583020, 4, {79,41,15,12}},
+{ 583200, 4, {30,30,27,24}},
+{ 583443, 4, {49,27,21,21}},
+{ 583488, 4, {1013,9,8,8}},
+{ 583680, 4, {32,32,30,19}},
+{ 583740, 4, {47,27,23,20}},
+{ 583920, 4, {811,10,9,8}},
+{ 583968, 4, {79,22,21,16}},
+{ 584064, 4, {32,27,26,26}},
+{ 584100, 4, {59,25,22,18}},
+{ 584136, 4, {61,24,21,19}},
+{ 584304, 4, {47,37,21,16}},
+{ 584460, 4, {191,17,15,12}},
+{ 584496, 4, {41,27,24,22}},
+{ 584568, 4, {353,23,9,8}},
+{ 584640, 4, {30,29,28,24}},
+{ 584928, 4, {677,12,9,8}},
+{ 585144, 4, {43,27,24,21}},
+{ 585216, 4, {127,18,16,16}},
+{ 585288, 4, {739,11,9,8}},
+{ 585312, 4, {67,26,21,16}},
+{ 585360, 4, {271,15,12,12}},
+{ 585432, 4, {173,47,9,8}},
+{ 585480, 4, {41,34,21,20}},
+{ 585504, 4, {107,19,18,16}},
+{ 585648, 4, {83,21,21,16}},
+{ 585792, 4, {113,18,18,16}},
+{ 585864, 4, {103,79,9,8}},
+{ 585900, 4, {31,28,27,25}},
+{ 585984, 4, {109,21,16,16}},
+{ 586080, 4, {37,30,24,22}},
+{ 586152, 4, {1163,9,8,7}},
+{ 586296, 4, {479,17,9,8}},
+{ 586440, 4, {181,18,15,12}},
+{ 586656, 4, {97,21,18,16}},
+{ 586728, 4, {281,29,9,8}},
+{ 586800, 4, {163,16,15,15}},
+{ 586845, 4, {35,27,27,23}},
+{ 586944, 4, {1019,9,8,8}},
+{ 587016, 4, {263,31,9,8}},
+{ 587160, 4, {233,15,14,12}},
+{ 587250, 4, {30,29,27,25}},
+{ 587340, 4, {251,15,13,12}},
+{ 587412, 4, {37,28,27,21}},
+{ 587448, 4, {199,41,9,8}},
+{ 587520, 4, {34,30,24,24}},
+{ 587664, 4, {53,24,22,21}},
+{ 587736, 4, {907,9,9,8}},
+{ 587760, 4, {79,31,16,15}},
+{ 587808, 4, {157,18,16,13}},
+{ 587952, 4, {1361,9,8,6}},
+{ 588096, 4, {1021,9,8,8}},
+{ 588240, 4, {43,30,24,19}},
+{ 588336, 4, {103,21,17,16}},
+{ 588456, 4, {743,11,9,8}},
+{ 588672, 4, {73,24,21,16}},
+{ 588720, 4, {223,16,15,11}},
+{ 588800, 4, {32,32,25,23}},
+{ 588924, 4, {41,28,27,19}},
+{ 589248, 4, {33,31,24,24}},
+{ 589260, 4, {61,23,21,20}},
+{ 589512, 4, {33,29,28,22}},
+{ 589536, 4, {89,23,18,16}},
+{ 589608, 4, {431,19,9,8}},
+{ 589680, 4, {30,28,27,26}},
+{ 589860, 4, {113,29,15,12}},
+{ 589950, 4, {38,27,25,23}},
+{ 590040, 4, {149,22,15,12}},
+{ 590112, 4, {683,12,9,8}},
+{ 590184, 4, {1171,9,8,7}},
+{ 590328, 4, {911,9,9,8}},
+{ 590400, 4, {41,25,24,24}},
+{ 590472, 4, {139,59,9,8}},
+{ 590520, 4, {38,37,21,20}},
+{ 590544, 4, {1367,9,8,6}},
+{ 590580, 4, {193,17,15,12}},
+{ 590616, 4, {631,13,9,8}},
+{ 590625, 4, {35,27,25,25}},
+{ 590640, 4, {107,23,16,15}},
+{ 590904, 4, {283,29,9,8}},
+{ 590940, 4, {67,21,21,20}},
+{ 590976, 4, {38,27,24,24}},
+{ 591120, 4, {821,10,9,8}},
+{ 591192, 4, {34,28,27,23}},
+{ 591300, 4, {73,25,18,18}},
+{ 591336, 4, {191,43,9,8}},
+{ 591360, 4, {32,30,28,22}},
+{ 591552, 4, {79,26,18,16}},
+{ 591600, 4, {34,29,25,24}},
+{ 591660, 4, {173,19,15,12}},
+{ 591696, 4, {587,14,9,8}},
+{ 591840, 4, {137,18,16,15}},
+{ 591948, 4, {29,28,27,27}},
+{ 592000, 4, {37,32,25,20}},
+{ 592200, 4, {47,25,24,21}},
+{ 592344, 4, {433,19,9,8}},
+{ 592368, 4, {43,41,21,16}},
+{ 592416, 4, {34,33,24,22}},
+{ 592480, 4, {35,32,23,23}},
+{ 592515, 4, {35,33,27,19}},
+{ 592560, 4, {823,10,9,8}},
+{ 592620, 4, {83,21,20,17}},
+{ 592704, 4, {28,28,28,27}},
+{ 592740, 4, {89,37,15,12}},
+{ 592800, 4, {38,26,25,24}},
+{ 592920, 4, {61,27,20,18}},
+{ 592992, 4, {71,29,18,16}},
+{ 593136, 4, {1373,9,8,6}},
+{ 593280, 4, {103,20,18,16}},
+{ 593400, 4, {43,25,24,23}},
+{ 593712, 4, {38,31,24,21}},
+{ 593856, 4, {1031,9,8,8}},
+{ 593880, 4, {101,21,20,14}},
+{ 593928, 4, {113,73,9,8}},
+{ 594072, 4, {223,37,9,8}},
+{ 594384, 4, {61,29,21,16}},
+{ 594405, 4, {37,35,27,17}},
+{ 594504, 4, {359,23,9,8}},
+{ 594540, 4, {367,15,12,9}},
+{ 594720, 4, {59,24,21,20}},
+{ 594792, 4, {751,11,9,8}},
+{ 594864, 4, {34,27,27,24}},
+{ 594960, 4, {67,37,16,15}},
+{ 595008, 4, {1033,9,8,8}},
+{ 595056, 4, {33,28,28,23}},
+{ 595200, 4, {32,31,25,24}},
+{ 595224, 4, {1181,9,8,7}},
+{ 595350, 4, {35,30,27,21}},
+{ 595440, 4, {827,10,9,8}},
+{ 595512, 4, {919,9,9,8}},
+{ 595800, 4, {331,15,12,10}},
+{ 595840, 4, {35,32,28,19}},
+{ 595920, 4, {191,16,15,13}},
+{ 596088, 4, {487,17,9,8}},
+{ 596160, 4, {32,30,27,23}},
+{ 596232, 4, {39,28,26,21}},
+{ 596250, 4, {53,25,25,18}},
+{ 596400, 4, {71,21,20,20}},
+{ 596448, 4, {109,19,18,16}},
+{ 596592, 4, {1381,9,8,6}},
+{ 596640, 4, {113,22,16,15}},
+{ 596700, 4, {34,27,26,25}},
+{ 596880, 4, {829,10,9,8}},
+{ 596904, 4, {34,33,28,19}},
+{ 597024, 4, {691,12,9,8}},
+{ 597060, 4, {107,31,15,12}},
+{ 597168, 4, {33,29,26,24}},
+{ 597240, 4, {79,21,20,18}},
+{ 597360, 4, {131,19,16,15}},
+{ 597375, 4, {59,27,25,15}},
+{ 597408, 4, {127,21,16,14}},
+{ 597528, 4, {193,43,9,8}},
+{ 597744, 4, {593,14,9,8}},
+{ 597780, 4, {41,27,27,20}},
+{ 597840, 4, {53,47,16,15}},
+{ 597888, 4, {173,18,16,12}},
+{ 597960, 4, {151,22,15,12}},
+{ 598080, 4, {89,21,20,16}},
+{ 598176, 4, {67,31,18,16}},
+{ 598248, 4, {1187,9,8,7}},
+{ 598320, 4, {277,15,12,12}},
+{ 598400, 4, {34,32,25,22}},
+{ 598416, 4, {137,21,16,13}},
+{ 598464, 4, {1039,9,8,8}},
+{ 598500, 4, {35,30,30,19}},
+{ 598752, 4, {33,28,27,24}},
+{ 599040, 4, {32,30,26,24}},
+{ 599112, 4, {157,53,9,8}},
+{ 599256, 4, {41,29,24,21}},
+{ 599280, 4, {227,16,15,11}},
+{ 599400, 4, {37,27,25,24}},
+{ 599544, 4, {757,11,9,8}},
+{ 599850, 4, {43,31,25,18}},
+{ 599976, 4, {641,13,9,8}},
+{ 600000, 4, {32,30,25,25}},
+{ 600240, 4, {61,41,16,15}},
+{ 600408, 4, {269,31,9,8}},
+{ 600480, 4, {139,18,16,15}},
+{ 600552, 4, {439,19,9,8}},
+{ 600600, 4, {33,28,26,25}},
+{ 600660, 4, {71,47,15,12}},
+{ 600750, 4, {89,25,18,15}},
+{ 600768, 4, {149,18,16,14}},
+{ 600984, 4, {491,17,9,8}},
+{ 601020, 4, {53,27,21,20}},
+{ 601128, 4, {33,33,24,23}},
+{ 601200, 4, {167,16,15,15}},
+{ 601272, 4, {1193,9,8,7}},
+{ 601344, 4, {32,29,27,24}},
+{ 601380, 4, {257,15,13,12}},
+{ 601425, 4, {33,27,27,25}},
+{ 601440, 4, {179,16,15,14}},
+{ 601524, 4, {33,31,28,21}},
+{ 601680, 4, {109,23,16,15}},
+{ 601704, 4, {137,61,9,8}},
+{ 601800, 4, {59,25,24,17}},
+{ 601848, 4, {643,13,9,8}},
+{ 601920, 4, {33,32,30,19}},
+{ 601992, 4, {929,9,9,8}},
+{ 602100, 4, {223,15,15,12}},
+{ 602160, 4, {193,16,15,13}},
+{ 602280, 4, {239,15,14,12}},
+{ 602400, 4, {251,16,15,10}},
+{ 602640, 4, {31,30,27,24}},
+{ 602712, 4, {761,11,9,8}},
+{ 602775, 4, {47,27,25,19}},
+{ 602820, 4, {197,17,15,12}},
+{ 602880, 4, {157,16,16,15}},
+{ 603000, 4, {67,25,20,18}},
+{ 603200, 4, {32,29,26,25}},
+{ 603288, 4, {38,28,27,21}},
+{ 603576, 4, {101,83,9,8}},
+{ 603648, 4, {131,18,16,16}},
+{ 603720, 4, {43,27,26,20}},
+{ 603750, 4, {35,30,25,23}},
+{ 603792, 4, {599,14,9,8}},
+{ 603900, 4, {61,25,22,18}},
+{ 604032, 4, {33,32,26,22}},
+{ 604080, 4, {839,10,9,8}},
+{ 604200, 4, {53,25,24,19}},
+{ 604224, 4, {1049,9,8,8}},
+{ 604260, 4, {373,15,12,9}},
+{ 604350, 4, {79,25,18,17}},
+{ 604368, 4, {1399,9,8,6}},
+{ 604560, 4, {229,16,15,11}},
+{ 604728, 4, {227,37,9,8}},
+{ 604800, 4, {30,30,28,24}},
+{ 604872, 4, {271,31,9,8}},
+{ 605280, 4, {97,26,16,15}},
+{ 605304, 4, {1201,9,8,7}},
+{ 605340, 4, {59,27,20,19}},
+{ 605376, 4, {1051,9,8,8}},
+{ 605475, 4, {39,27,25,23}},
+{ 605520, 4, {30,29,29,24}},
+{ 605592, 4, {647,13,9,8}},
+{ 605640, 4, {103,21,20,14}},
+{ 605664, 4, {701,12,9,8}},
+{ 605736, 4, {179,47,9,8}},
+{ 605808, 4, {601,14,9,8}},
+{ 606024, 4, {443,19,9,8}},
+{ 606480, 4, {38,38,21,20}},
+{ 606528, 4, {32,27,27,26}},
+{ 606600, 4, {337,15,12,10}},
+{ 606816, 4, {43,28,24,21}},
+{ 606825, 4, {31,29,27,25}},
+{ 606960, 4, {281,15,12,12}},
+{ 607050, 4, {71,25,19,18}},
+{ 607152, 4, {139,21,16,13}},
+{ 607176, 4, {937,9,9,8}},
+{ 607200, 4, {33,32,25,23}},
+{ 607320, 4, {241,15,14,12}},
+{ 607392, 4, {37,32,27,19}},
+{ 607488, 4, {113,21,16,16}},
+{ 607500, 4, {30,30,27,25}},
+{ 607680, 4, {211,16,15,12}},
+{ 607752, 4, {367,23,9,8}},
+{ 607824, 4, {67,24,21,18}},
+{ 607860, 4, {307,15,12,11}},
+{ 607920, 4, {149,17,16,15}},
+{ 608000, 4, {38,32,25,20}},
+{ 608160, 4, {181,16,15,14}},
+{ 608175, 4, {53,27,25,17}},
+{ 608220, 4, {109,31,15,12}},
+{ 608256, 4, {33,32,24,24}},
+{ 608328, 4, {71,24,21,17}},
+{ 608580, 4, {35,28,27,23}},
+{ 608616, 4, {107,79,9,8}},
+{ 608688, 4, {1409,9,8,6}},
+{ 608832, 4, {151,18,16,14}},
+{ 608850, 4, {41,27,25,22}},
+{ 608880, 4, {59,43,16,15}},
+{ 608940, 4, {199,17,15,12}},
+{ 609048, 4, {769,11,9,8}},
+{ 609120, 4, {47,27,24,20}},
+{ 609336, 4, {31,28,27,26}},
+{ 609408, 4, {36,32,23,23}},
+{ 609525, 4, {43,27,25,21}},
+{ 609600, 4, {127,20,16,15}},
+{ 609696, 4, {73,29,18,16}},
+{ 609768, 4, {941,9,9,8}},
+{ 609840, 4, {33,30,28,22}},
+{ 609912, 4, {197,43,9,8}},
+{ 610056, 4, {229,37,9,8}},
+{ 610272, 4, {163,18,16,13}},
+{ 610470, 4, {35,34,27,19}},
+{ 610488, 4, {139,61,9,8}},
+{ 610512, 4, {79,23,21,16}},
+{ 610650, 4, {59,25,23,18}},
+{ 610776, 4, {499,17,9,8}},
+{ 610848, 4, {101,21,18,16}},
+{ 611064, 4, {41,27,24,23}},
+{ 611100, 4, {97,21,20,15}},
+{ 611136, 4, {1061,9,8,8}},
+{ 611184, 4, {107,21,17,16}},
+{ 611208, 4, {653,13,9,8}},
+{ 611280, 4, {283,15,12,12}},
+{ 611352, 4, {1213,9,8,7}},
+{ 611460, 4, {79,43,15,12}},
+{ 611784, 4, {293,29,9,8}},
+{ 611856, 4, {607,14,9,8}},
+{ 611940, 4, {47,31,21,20}},
+{ 612000, 4, {34,30,25,24}},
+{ 612180, 4, {179,19,15,12}},
+{ 612216, 4, {773,11,9,8}},
+{ 612288, 4, {1063,9,8,8}},
+{ 612360, 4, {30,28,27,27}},
+{ 612480, 4, {32,30,29,22}},
+{ 612504, 4, {181,47,9,8}},
+{ 612540, 4, {83,41,15,12}},
+{ 612576, 4, {709,12,9,8}},
+{ 612648, 4, {127,67,9,8}},
+{ 612720, 4, {37,30,24,23}},
+{ 612900, 4, {227,15,15,12}},
+{ 613008, 4, {43,27,24,22}},
+{ 613200, 4, {73,21,20,20}},
+{ 613350, 4, {47,29,25,18}},
+{ 613368, 4, {1217,9,8,7}},
+{ 613536, 4, {83,22,21,16}},
+{ 613656, 4, {947,9,9,8}},
+{ 613800, 4, {33,31,25,24}},
+{ 613872, 4, {29,28,28,27}},
+{ 613980, 4, {379,15,12,9}},
+{ 614040, 4, {43,34,21,20}},
+{ 614160, 4, {853,10,9,8}},
+{ 614232, 4, {449,19,9,8}},
+{ 614250, 4, {35,27,26,25}},
+{ 614376, 4, {53,24,23,21}},
+{ 614400, 4, {32,32,25,24}},
+{ 614460, 4, {35,33,28,19}},
+{ 614544, 4, {59,31,21,16}},
+{ 614592, 4, {97,22,18,16}},
+{ 614640, 4, {197,16,15,13}},
+{ 614736, 4, {1423,9,8,6}},
+{ 614880, 4, {61,24,21,20}},
+{ 615000, 4, {41,25,25,24}},
+{ 615060, 4, {67,27,20,17}},
+{ 615120, 4, {233,16,15,11}},
+{ 615168, 4, {89,24,18,16}},
+{ 615195, 4, {35,31,27,21}},
+{ 615384, 4, {37,28,27,22}},
+{ 615420, 4, {263,15,13,12}},
+{ 615528, 4, {103,83,9,8}},
+{ 615600, 4, {38,27,25,24}},
+{ 615672, 4, {503,17,9,8}},
+{ 615744, 4, {1069,9,8,8}},
+{ 615780, 4, {311,15,12,11}},
+{ 615825, 4, {45,35,23,17}},
+{ 615888, 4, {47,26,24,21}},
+{ 616000, 4, {35,32,25,22}},
+{ 616032, 4, {32,31,27,23}},
+{ 616050, 4, {37,37,25,18}},
+{ 616080, 4, {151,17,16,15}},
+{ 616104, 4, {199,43,9,8}},
+{ 616224, 4, {131,21,16,14}},
+{ 616308, 4, {33,29,28,23}},
+{ 616320, 4, {107,20,18,16}},
+{ 616392, 4, {1223,9,8,7}},
+{ 616464, 4, {1427,9,8,6}},
+{ 616800, 4, {257,16,15,10}},
+{ 616824, 4, {659,13,9,8}},
+{ 616860, 4, {149,23,15,12}},
+{ 616896, 4, {34,28,27,24}},
+{ 616968, 4, {41,33,24,19}},
+{ 617040, 4, {857,10,9,8}},
+{ 617120, 4, {35,32,29,19}},
+{ 617328, 4, {1429,9,8,6}},
+{ 617400, 4, {35,30,28,21}},
+{ 617520, 4, {83,31,16,15}},
+{ 617544, 4, {953,9,9,8}},
+{ 617580, 4, {73,47,15,12}},
+{ 617625, 4, {61,27,25,15}},
+{ 617652, 4, {43,28,27,19}},
+{ 617688, 4, {373,23,9,8}},
+{ 617760, 4, {33,30,26,24}},
+{ 617904, 4, {613,14,9,8}},
+{ 618192, 4, {53,27,24,18}},
+{ 618240, 4, {32,30,28,23}},
+{ 618264, 4, {277,31,9,8}},
+{ 618300, 4, {229,15,15,12}},
+{ 618336, 4, {113,19,18,16}},
+{ 618450, 4, {35,31,30,19}},
+{ 618480, 4, {859,10,9,8}},
+{ 618624, 4, {179,18,16,12}},
+{ 618696, 4, {661,13,9,8}},
+{ 618840, 4, {191,18,15,12}},
+{ 619020, 4, {181,19,15,12}},
+{ 619056, 4, {1433,9,8,6}},
+{ 619080, 4, {67,22,21,20}},
+{ 619164, 4, {39,28,27,21}},
+{ 619200, 4, {43,25,24,24}},
+{ 619248, 4, {97,21,19,16}},
+{ 619344, 4, {34,33,24,23}},
+{ 619380, 4, {37,31,27,20}},
+{ 619416, 4, {1229,9,8,7}},
+{ 619440, 4, {89,29,16,15}},
+{ 619500, 4, {59,25,21,20}},
+{ 619650, 4, {34,27,27,25}},
+{ 619740, 4, {313,15,12,11}},
+{ 619920, 4, {41,30,24,21}},
+{ 619992, 4, {109,79,9,8}},
+{ 620000, 4, {32,31,25,25}},
+{ 620100, 4, {53,26,25,18}},
+{ 620136, 4, {33,29,27,24}},
+{ 620160, 4, {34,32,30,19}},
+{ 620256, 4, {71,26,21,16}},
+{ 620400, 4, {47,25,24,22}},
+{ 620424, 4, {1231,9,8,7}},
+{ 620460, 4, {383,15,12,9}},
+{ 620712, 4, {233,37,9,8}},
+{ 620880, 4, {199,16,15,13}},
+{ 620928, 4, {33,28,28,24}},
+{ 621216, 4, {719,12,9,8}},
+{ 621264, 4, {43,43,21,16}},
+{ 621360, 4, {863,10,9,8}},
+{ 621504, 4, {83,26,18,16}},
+{ 621576, 4, {97,89,9,8}},
+{ 621600, 4, {37,28,25,24}},
+{ 621648, 4, {1439,9,8,6}},
+{ 621720, 4, {157,22,15,12}},
+{ 621792, 4, {127,18,17,16}},
+{ 621936, 4, {617,14,9,8}},
+{ 621984, 4, {33,32,31,19}},
+{ 622008, 4, {163,53,9,8}},
+{ 622080, 4, {32,30,27,24}},
+{ 622200, 4, {61,25,24,17}},
+{ 622608, 4, {109,21,17,16}},
+{ 622728, 4, {31,31,27,24}},
+{ 622800, 4, {173,16,15,15}},
+{ 622872, 4, {211,41,9,8}},
+{ 622944, 4, {103,21,18,16}},
+{ 623016, 4, {509,17,9,8}},
+{ 623280, 4, {53,28,21,20}},
+{ 623304, 4, {787,11,9,8}},
+{ 623376, 4, {37,27,26,24}},
+{ 623448, 4, {1237,9,8,7}},
+{ 623700, 4, {33,28,27,25}},
+{ 623760, 4, {113,23,16,15}},
+{ 623808, 4, {38,32,27,19}},
+{ 623952, 4, {619,14,9,8}},
+{ 624000, 4, {32,30,26,25}},
+{ 624150, 4, {73,25,19,18}},
+{ 624240, 4, {34,34,27,20}},
+{ 624375, 4, {37,27,25,25}},
+{ 624456, 4, {59,24,21,21}},
+{ 624600, 4, {347,15,12,10}},
+{ 624624, 4, {33,28,26,26}},
+{ 624720, 4, {137,19,16,15}},
+{ 624960, 4, {31,30,28,24}},
+{ 625104, 4, {1447,9,8,6}},
+{ 625140, 4, {151,23,15,12}},
+{ 625176, 4, {457,19,9,8}},
+{ 625248, 4, {167,18,16,13}},
+{ 625320, 4, {193,18,15,12}},
+{ 625464, 4, {73,24,21,17}},
+{ 625536, 4, {181,18,16,12}},
+{ 625600, 4, {34,32,25,23}},
+{ 625824, 4, {53,41,18,16}},
+{ 625860, 4, {61,27,20,19}},
+{ 625920, 4, {163,16,16,15}},
+{ 625968, 4, {36,28,27,23}},
+{ 626112, 4, {1087,9,8,8}},
+{ 626220, 4, {71,21,21,20}},
+{ 626400, 4, {30,30,29,24}},
+{ 626535, 4, {39,35,27,17}},
+{ 626580, 4, {59,59,15,12}},
+{ 626616, 4, {967,9,9,8}},
+{ 626832, 4, {1451,9,8,6}},
+{ 626940, 4, {43,27,27,20}},
+{ 627192, 4, {281,31,9,8}},
+{ 627200, 4, {32,28,28,25}},
+{ 627264, 4, {33,33,24,24}},
+{ 627300, 4, {41,34,25,18}},
+{ 627480, 4, {83,21,20,18}},
+{ 627624, 4, {379,23,9,8}},
+{ 627660, 4, {317,15,12,11}},
+{ 627696, 4, {1453,9,8,6}},
+{ 627750, 4, {31,30,27,25}},
+{ 627840, 4, {109,20,18,16}},
+{ 627900, 4, {35,30,26,23}},
+{ 627984, 4, {89,21,21,16}},
+{ 628128, 4, {727,12,9,8}},
+{ 628200, 4, {349,15,12,10}},
+{ 628416, 4, {1091,9,8,8}},
+{ 628425, 4, {35,35,27,19}},
+{ 628452, 4, {36,33,23,23}},
+{ 628488, 4, {43,29,24,21}},
+{ 628704, 4, {59,37,18,16}},
+{ 628800, 4, {131,20,16,15}},
+{ 628992, 4, {32,28,27,26}},
+{ 629100, 4, {233,15,15,12}},
+{ 629160, 4, {107,21,20,14}},
+{ 629208, 4, {971,9,9,8}},
+{ 629280, 4, {38,30,24,23}},
+{ 629460, 4, {269,15,13,12}},
+{ 629496, 4, {1249,9,8,7}},
+{ 629520, 4, {61,43,16,15}},
+{ 629568, 4, {1093,9,8,8}},
+{ 629640, 4, {53,27,22,20}},
+{ 629856, 4, {32,27,27,27}},
+{ 629928, 4, {673,13,9,8}},
+{ 630168, 4, {33,31,28,22}},
+{ 630180, 4, {389,15,12,9}},
+{ 630240, 4, {101,26,16,15}},
+{ 630288, 4, {1459,9,8,6}},
+{ 630315, 4, {35,29,27,23}},
+{ 630336, 4, {67,28,21,16}},
+{ 630420, 4, {79,21,20,19}},
+{ 630480, 4, {71,37,16,15}},
+{ 630540, 4, {113,31,15,12}},
+{ 630648, 4, {461,19,9,8}},
+{ 630960, 4, {239,16,15,11}},
+{ 631200, 4, {263,16,15,10}},
+{ 631224, 4, {797,11,9,8}},
+{ 631296, 4, {137,18,16,16}},
+{ 631350, 4, {61,25,23,18}},
+{ 631440, 4, {877,10,9,8}},
+{ 631488, 4, {33,32,26,23}},
+{ 631656, 4, {283,31,9,8}},
+{ 631872, 4, {1097,9,8,8}},
+{ 631944, 4, {131,67,9,8}},
+{ 632016, 4, {38,28,27,22}},
+{ 632400, 4, {34,31,25,24}},
+{ 632520, 4, {251,15,14,12}},
+{ 632772, 4, {31,28,27,27}},
+{ 632880, 4, {293,15,12,12}},
+{ 632952, 4, {149,59,9,8}},
+{ 633024, 4, {157,18,16,14}},
+{ 633096, 4, {977,9,9,8}},
+{ 633150, 4, {67,25,21,18}},
+{ 633312, 4, {733,12,9,8}},
+{ 633384, 4, {463,19,9,8}},
+{ 633600, 4, {33,32,25,24}},
+{ 633672, 4, {677,13,9,8}},
+{ 633840, 4, {139,19,16,15}},
+{ 633888, 4, {71,31,18,16}},
+{ 634032, 4, {37,34,24,21}},
+{ 634140, 4, {271,15,13,12}},
+{ 634248, 4, {383,23,9,8}},
+{ 634320, 4, {881,10,9,8}},
+{ 634500, 4, {47,27,25,20}},
+{ 634536, 4, {1259,9,8,7}},
+{ 634950, 4, {83,25,18,17}},
+{ 635040, 4, {30,28,28,27}},
+{ 635328, 4, {1103,9,8,8}},
+{ 635376, 4, {61,31,21,16}},
+{ 635400, 4, {353,15,12,10}},
+{ 635460, 4, {89,21,20,17}},
+{ 635472, 4, {1471,9,8,6}},
+{ 635760, 4, {883,10,9,8}},
+{ 635796, 4, {29,29,28,27}},
+{ 635904, 4, {32,32,27,23}},
+{ 636000, 4, {53,25,24,20}},
+{ 636048, 4, {631,14,9,8}},
+{ 636192, 4, {47,47,18,16}},
+{ 636240, 4, {241,16,15,11}},
+{ 636300, 4, {101,21,20,15}},
+{ 636480, 4, {34,30,26,24}},
+{ 636525, 4, {41,27,25,23}},
+{ 636696, 4, {239,37,9,8}},
+{ 636984, 4, {983,9,9,8}},
+{ 637056, 4, {79,24,21,16}},
+{ 637140, 4, {41,37,21,20}},
+{ 637200, 4, {59,27,20,20}},
+{ 637245, 4, {49,45,17,17}},
+{ 637272, 4, {167,53,9,8}},
+{ 637560, 4, {33,30,28,23}},
+{ 637632, 4, {41,27,24,24}},
+{ 637704, 4, {521,17,9,8}},
+{ 637728, 4, {73,26,21,16}},
+{ 637875, 4, {35,27,27,25}},
+{ 638280, 4, {197,18,15,12}},
+{ 638352, 4, {33,31,26,24}},
+{ 638400, 4, {38,28,25,24}},
+{ 638496, 4, {739,12,9,8}},
+{ 638550, 4, {43,27,25,22}},
+{ 638640, 4, {887,10,9,8}},
+{ 638784, 4, {1109,9,8,8}},
+{ 638820, 4, {35,27,26,26}},
+{ 638856, 4, {467,19,9,8}},
+{ 638880, 4, {40,33,22,22}},
+{ 638928, 4, {34,29,27,24}},
+{ 639000, 4, {71,25,20,18}},
+{ 639009, 4, {49,27,23,21}},
+{ 639180, 4, {67,53,15,12}},
+{ 639288, 4, {683,13,9,8}},
+{ 639360, 4, {37,30,24,24}},
+{ 639432, 4, {107,83,9,8}},
+{ 639450, 4, {35,30,29,21}},
+{ 639576, 4, {47,27,24,21}},
+{ 639600, 4, {41,26,25,24}},
+{ 639792, 4, {1481,9,8,6}},
+{ 639900, 4, {79,25,18,18}},
+{ 639936, 4, {101,22,18,16}},
+{ 640000, 4, {32,32,25,25}},
+{ 640080, 4, {127,21,16,15}},
+{ 640152, 4, {523,17,9,8}},
+{ 640224, 4, {38,27,26,24}},
+{ 640320, 4, {32,30,29,23}},
+{ 640332, 4, {33,33,28,21}},
+{ 640500, 4, {61,25,21,20}},
+{ 640512, 4, {139,18,16,16}},
+{ 640560, 4, {157,17,16,15}},
+{ 640584, 4, {41,31,24,21}},
+{ 640640, 4, {35,32,26,22}},
+{ 640656, 4, {1483,9,8,6}},
+{ 640728, 4, {809,11,9,8}},
+{ 640872, 4, {43,27,24,23}},
+{ 640920, 4, {109,21,20,14}},
+{ 641016, 4, {307,29,9,8}},
+{ 641088, 4, {53,24,24,21}},
+{ 641250, 4, {38,27,25,25}},
+{ 641280, 4, {167,16,16,15}},
+{ 641376, 4, {131,18,17,16}},
+{ 641424, 4, {83,23,21,16}},
+{ 641448, 4, {151,59,9,8}},
+{ 641520, 4, {33,30,27,24}},
+{ 641592, 4, {67,24,21,19}},
+{ 641760, 4, {191,16,15,14}},
+{ 641952, 4, {743,12,9,8}},
+{ 642024, 4, {241,37,9,8}},
+{ 642048, 4, {33,32,32,19}},
+{ 642060, 4, {41,29,27,20}},
+{ 642096, 4, {39,28,28,21}},
+{ 642168, 4, {991,9,9,8}},
+{ 642240, 4, {223,16,15,12}},
+{ 642312, 4, {811,11,9,8}},
+{ 642384, 4, {1487,9,8,6}},
+{ 642420, 4, {83,43,15,12}},
+{ 642528, 4, {97,23,18,16}},
+{ 642600, 4, {34,28,27,25}},
+{ 642720, 4, {103,26,16,15}},
+{ 642744, 4, {113,79,9,8}},
+{ 642816, 4, {32,31,27,24}},
+{ 642960, 4, {47,30,24,19}},
+{ 643104, 4, {33,29,28,24}},
+{ 643140, 4, {397,15,12,9}},
+{ 643248, 4, {1489,9,8,6}},
+{ 643356, 4, {37,28,27,23}},
+{ 643392, 4, {1117,9,8,8}},
+{ 643608, 4, {1277,9,8,7}},
+{ 643680, 4, {149,18,16,15}},
+{ 643800, 4, {37,29,25,24}},
+{ 643860, 4, {73,21,21,20}},
+{ 643950, 4, {53,27,25,18}},
+{ 644000, 4, {35,32,25,23}},
+{ 644112, 4, {71,24,21,18}},
+{ 644184, 4, {389,23,9,8}},
+{ 644280, 4, {59,26,21,20}},
+{ 644400, 4, {179,16,15,15}},
+{ 644448, 4, {137,21,16,14}},
+{ 644616, 4, {1279,9,8,7}},
+{ 644688, 4, {37,33,24,22}},
+{ 644760, 4, {199,18,15,12}},
+{ 644784, 4, {101,21,19,16}},
+{ 644800, 4, {32,31,26,25}},
+{ 644976, 4, {1493,9,8,6}},
+{ 645000, 4, {43,25,25,24}},
+{ 645120, 4, {32,30,28,24}},
+{ 645300, 4, {239,15,15,12}},
+{ 645456, 4, {113,21,17,16}},
+{ 645480, 4, {163,22,15,12}},
+{ 645540, 4, {53,29,21,20}},
+{ 645600, 4, {269,16,15,10}},
+{ 645624, 4, {61,24,21,21}},
+{ 645660, 4, {211,17,15,12}},
+{ 645975, 4, {33,29,27,25}},
+{ 646020, 4, {97,37,15,12}},
+{ 646056, 4, {997,9,9,8}},
+{ 646128, 4, {641,14,9,8}},
+{ 646200, 4, {359,15,12,10}},
+{ 646272, 4, {34,33,24,24}},
+{ 646344, 4, {191,47,9,8}},
+{ 646632, 4, {1283,9,8,7}},
+{ 646776, 4, {691,13,9,8}},
+{ 646800, 4, {33,28,28,25}},
+{ 646848, 4, {1123,9,8,8}},
+{ 647064, 4, {43,33,24,19}},
+{ 647136, 4, {107,21,18,16}},
+{ 647208, 4, {101,89,9,8}},
+{ 647220, 4, {67,23,21,20}},
+{ 647280, 4, {31,30,29,24}},
+{ 647352, 4, {37,27,27,24}},
+{ 647472, 4, {47,41,21,16}},
+{ 647568, 4, {1499,9,8,6}},
+{ 647640, 4, {257,15,14,12}},
+{ 647712, 4, {173,18,16,13}},
+{ 647820, 4, {61,59,15,12}},
+{ 648000, 4, {30,30,30,24}},
+{ 648144, 4, {643,14,9,8}},
+{ 648180, 4, {277,15,13,12}},
+{ 648240, 4, {73,37,16,15}},
+{ 648480, 4, {193,16,15,14}},
+{ 648600, 4, {47,25,24,23}},
+{ 648648, 4, {33,28,27,26}},
+{ 648675, 4, {31,31,27,25}},
+{ 648864, 4, {751,12,9,8}},
+{ 648900, 4, {103,21,20,15}},
+{ 648960, 4, {32,30,26,26}},
+{ 649224, 4, {127,71,9,8}},
+{ 649350, 4, {37,27,26,25}},
+{ 649368, 4, {311,29,9,8}},
+{ 649440, 4, {41,30,24,22}},
+{ 649600, 4, {32,29,28,25}},
+{ 649620, 4, {401,15,12,9}},
+{ 649656, 4, {1289,9,8,7}},
+{ 649980, 4, {157,23,15,12}},
+{ 650016, 4, {61,37,18,16}},
+{ 650160, 4, {43,30,24,21}},
+{ 650232, 4, {821,11,9,8}},
+{ 650304, 4, {1129,9,8,8}},
+{ 650400, 4, {271,16,15,10}},
+{ 650496, 4, {33,32,28,22}},
+{ 650664, 4, {1291,9,8,7}},
+{ 650700, 4, {241,15,15,12}},
+{ 650832, 4, {149,21,16,13}},
+{ 650880, 4, {113,20,18,16}},
+{ 650916, 4, {41,28,27,21}},
+{ 651168, 4, {38,34,24,21}},
+{ 651200, 4, {37,32,25,22}},
+{ 651240, 4, {67,27,20,18}},
+{ 651384, 4, {109,83,9,8}},
+{ 651456, 4, {32,29,27,26}},
+{ 651600, 4, {181,16,15,15}},
+{ 651744, 4, {73,31,18,16}},
+{ 651780, 4, {71,27,20,17}},
+{ 651816, 4, {823,11,9,8}},
+{ 651840, 4, {97,21,20,16}},
+{ 652050, 4, {35,30,27,23}},
+{ 652176, 4, {647,14,9,8}},
+{ 652320, 4, {151,18,16,15}},
+{ 652536, 4, {53,27,24,19}},
+{ 652608, 4, {103,22,18,16}},
+{ 652752, 4, {1511,9,8,6}},
+{ 652800, 4, {34,32,25,24}},
+{ 652848, 4, {67,29,21,16}},
+{ 653016, 4, {39,28,26,23}},
+{ 653040, 4, {907,10,9,8}},
+{ 653112, 4, {193,47,9,8}},
+{ 653184, 4, {32,28,27,27}},
+{ 653220, 4, {191,19,15,12}},
+{ 653256, 4, {211,43,9,8}},
+{ 653400, 4, {33,33,25,24}},
+{ 653544, 4, {313,29,9,8}},
+{ 653688, 4, {1297,9,8,7}},
+{ 653760, 4, {227,16,15,12}},
+{ 653832, 4, {1009,9,9,8}},
+{ 653856, 4, {139,21,16,14}},
+{ 653976, 4, {293,31,9,8}},
+{ 654048, 4, {757,12,9,8}},
+{ 654192, 4, {59,24,22,21}},
+{ 654360, 4, {41,38,21,20}},
+{ 654408, 4, {149,61,9,8}},
+{ 654720, 4, {32,31,30,22}},
+{ 654750, 4, {97,25,18,15}},
+{ 654885, 4, {35,33,27,21}},
+{ 654984, 4, {827,11,9,8}},
+{ 655272, 4, {479,19,9,8}},
+{ 655380, 4, {331,15,12,11}},
+{ 655650, 4, {47,31,25,18}},
+{ 655704, 4, {1301,9,8,7}},
+{ 655776, 4, {33,32,27,23}},
+{ 655920, 4, {911,10,9,8}},
+{ 656000, 4, {41,32,25,20}},
+{ 656040, 4, {71,22,21,20}},
+{ 656136, 4, {701,13,9,8}},
+{ 656208, 4, {31,28,28,27}},
+{ 656250, 4, {35,30,25,25}},
+{ 656352, 4, {53,43,18,16}},
+{ 656424, 4, {1013,9,9,8}},
+{ 656568, 4, {829,11,9,8}},
+{ 656640, 4, {38,30,24,24}},
+{ 656712, 4, {1303,9,8,7}},
+{ 656820, 4, {89,41,15,12}},
+{ 657000, 4, {73,25,20,18}},
+{ 657216, 4, {163,18,16,14}},
+{ 657432, 4, {397,23,9,8}},
+{ 657504, 4, {761,12,9,8}},
+{ 657540, 4, {281,15,13,12}},
+{ 657552, 4, {103,21,19,16}},
+{ 657600, 4, {137,20,16,15}},
+{ 657720, 4, {30,29,28,27}},
+{ 657888, 4, {89,22,21,16}},
+{ 657900, 4, {43,34,25,18}},
+{ 657936, 4, {1523,9,8,6}},
+{ 658125, 4, {39,27,25,25}},
+{ 658224, 4, {653,14,9,8}},
+{ 658260, 4, {53,27,23,20}},
+{ 658296, 4, {223,41,9,8}},
+{ 658320, 4, {211,16,15,13}},
+{ 658350, 4, {35,33,30,19}},
+{ 658368, 4, {127,18,18,16}},
+{ 658665, 4, {41,35,27,17}},
+{ 658728, 4, {1307,9,8,7}},
+{ 658800, 4, {61,27,20,20}},
+{ 658812, 4, {33,31,28,23}},
+{ 658896, 4, {53,37,21,16}},
+{ 658944, 4, {33,32,26,24}},
+{ 659232, 4, {109,21,18,16}},
+{ 659280, 4, {67,41,16,15}},
+{ 659520, 4, {229,16,15,12}},
+{ 659568, 4, {151,21,16,13}},
+{ 659680, 4, {35,32,31,19}},
+{ 659736, 4, {34,33,28,21}},
+{ 659808, 4, {79,29,18,16}},
+{ 659880, 4, {47,27,26,20}},
+{ 660000, 4, {33,32,25,25}},
+{ 660024, 4, {103,89,9,8}},
+{ 660060, 4, {193,19,15,12}},
+{ 660096, 4, {191,18,16,12}},
+{ 660168, 4, {173,53,9,8}},
+{ 660192, 4, {39,32,23,23}},
+{ 660240, 4, {131,21,16,15}},
+{ 660312, 4, {1019,9,9,8}},
+{ 660600, 4, {367,15,12,10}},
+{ 660744, 4, {38,28,27,23}},
+{ 660888, 4, {137,67,9,8}},
+{ 660960, 4, {34,30,27,24}},
+{ 661200, 4, {38,29,25,24}},
+{ 661320, 4, {167,22,15,12}},
+{ 661392, 4, {1531,9,8,6}},
+{ 661500, 4, {35,28,27,25}},
+{ 661608, 4, {1021,9,9,8}},
+{ 661680, 4, {919,10,9,8}},
+{ 661896, 4, {317,29,9,8}},
+{ 661920, 4, {197,16,15,14}},
+{ 662112, 4, {33,33,32,19}},
+{ 662160, 4, {89,31,16,15}},
+{ 662184, 4, {541,17,9,8}},
+{ 662220, 4, {283,15,13,12}},
+{ 662256, 4, {73,24,21,18}},
+{ 662340, 4, {83,21,20,19}},
+{ 662400, 4, {32,30,30,23}},
+{ 662580, 4, {409,15,12,9}},
+{ 662640, 4, {251,16,15,11}},
+{ 662760, 4, {263,15,14,12}},
+{ 662904, 4, {33,31,27,24}},
+{ 662940, 4, {127,29,15,12}},
+{ 662976, 4, {1151,9,8,8}},
+{ 663120, 4, {307,15,12,12}},
+{ 663192, 4, {151,61,9,8}},
+{ 663264, 4, {47,28,24,21}},
+{ 663300, 4, {67,25,22,18}},
+{ 663390, 4, {35,27,27,26}},
+{ 663552, 4, {32,32,27,24}},
+{ 663600, 4, {79,21,20,20}},
+{ 663624, 4, {709,13,9,8}},
+{ 663750, 4, {59,25,25,18}},
+{ 664056, 4, {401,23,9,8}},
+{ 664128, 4, {1153,9,8,8}},
+{ 664200, 4, {41,27,25,24}},
+{ 664272, 4, {659,14,9,8}},
+{ 664320, 4, {173,16,16,15}},
+{ 664335, 4, {37,35,27,19}},
+{ 664416, 4, {769,12,9,8}},
+{ 664440, 4, {113,21,20,14}},
+{ 664488, 4, {839,11,9,8}},
+{ 664776, 4, {1319,9,8,7}},
+{ 664800, 4, {277,16,15,10}},
+{ 664848, 4, {38,27,27,24}},
+{ 665028, 4, {39,29,28,21}},
+{ 665040, 4, {163,17,16,15}},
+{ 665280, 4, {33,30,28,24}},
+{ 665520, 4, {59,47,16,15}},
+{ 665550, 4, {34,29,27,25}},
+{ 665600, 4, {32,32,26,25}},
+{ 665784, 4, {1321,9,8,7}},
+{ 666000, 4, {37,30,25,24}},
+{ 666072, 4, {33,29,29,24}},
+{ 666120, 4, {61,26,21,20}},
+{ 666216, 4, {487,19,9,8}},
+{ 666225, 4, {47,27,25,21}},
+{ 666288, 4, {661,14,9,8}},
+{ 666432, 4, {89,26,18,16}},
+{ 666540, 4, {36,35,23,23}},
+{ 666576, 4, {1543,9,8,6}},
+{ 666648, 4, {197,47,9,8}},
+{ 666792, 4, {42,28,27,21}},
+{ 666900, 4, {38,27,26,25}},
+{ 666936, 4, {157,59,9,8}},
+{ 667008, 4, {193,18,16,12}},
+{ 667200, 4, {139,20,16,15}},
+{ 667260, 4, {337,15,12,11}},
+{ 667512, 4, {127,73,9,8}},
+{ 667575, 4, {43,27,25,23}},
+{ 667680, 4, {107,26,16,15}},
+{ 667800, 4, {53,25,24,21}},
+{ 667872, 4, {773,12,9,8}},
+{ 667920, 4, {40,33,23,22}},
+{ 667968, 4, {71,28,21,16}},
+{ 668088, 4, {1031,9,9,8}},
+{ 668160, 4, {32,30,29,24}},
+{ 668220, 4, {43,37,21,20}},
+{ 668250, 4, {33,30,27,25}},
+{ 668304, 4, {34,28,27,26}},
+{ 668340, 4, {79,47,15,12}},
+{ 668640, 4, {199,16,15,14}},
+{ 668664, 4, {251,37,9,8}},
+{ 668736, 4, {43,27,24,24}},
+{ 668800, 4, {38,32,25,22}},
+{ 668808, 4, {1327,9,8,7}},
+{ 668880, 4, {929,10,9,8}},
+{ 669024, 4, {101,23,18,16}},
+{ 669060, 4, {59,27,21,20}},
+{ 669168, 4, {1549,9,8,6}},
+{ 669312, 4, {83,24,21,16}},
+{ 669375, 4, {45,35,25,17}},
+{ 669384, 4, {1033,9,9,8}},
+{ 669528, 4, {547,17,9,8}},
+{ 669600, 4, {32,31,27,25}},
+{ 669672, 4, {131,71,9,8}},
+{ 669760, 4, {35,32,26,23}},
+{ 669780, 4, {61,61,15,12}},
+{ 669888, 4, {1163,9,8,8}},
+{ 669900, 4, {33,29,28,25}},
+{ 670032, 4, {47,27,24,22}},
+{ 670104, 4, {227,41,9,8}},
+{ 670140, 4, {73,27,20,17}},
+{ 670176, 4, {179,18,16,13}},
+{ 670464, 4, {97,24,18,16}},
+{ 670536, 4, {139,67,9,8}},
+{ 670560, 4, {127,22,16,15}},
+{ 670752, 4, {137,18,17,16}},
+{ 670800, 4, {43,26,25,24}},
+{ 670824, 4, {33,33,28,22}},
+{ 670896, 4, {1553,9,8,6}},
+{ 670950, 4, {71,25,21,18}},
+{ 671040, 4, {233,16,15,12}},
+{ 671160, 4, {47,34,21,20}},
+{ 671328, 4, {37,28,27,24}},
+{ 671400, 4, {373,15,12,10}},
+{ 671688, 4, {491,19,9,8}},
+{ 671760, 4, {311,15,12,12}},
+{ 671832, 4, {43,31,24,21}},
+{ 672000, 4, {32,30,28,25}},
+{ 672300, 4, {83,25,18,18}},
+{ 672600, 4, {59,25,24,19}},
+{ 672660, 4, {101,37,15,12}},
+{ 672672, 4, {33,28,28,26}},
+{ 672800, 4, {32,29,29,25}},
+{ 672840, 4, {89,21,20,18}},
+{ 672984, 4, {719,13,9,8}},
+{ 673056, 4, {41,32,27,19}},
+{ 673200, 4, {34,33,25,24}},
+{ 673272, 4, {1039,9,9,8}},
+{ 673344, 4, {167,18,16,14}},
+{ 673380, 4, {43,29,27,20}},
+{ 673416, 4, {199,47,9,8}},
+{ 673488, 4, {1559,9,8,6}},
+{ 673596, 4, {33,28,27,27}},
+{ 673728, 4, {33,32,29,22}},
+{ 673740, 4, {197,19,15,12}},
+{ 673785, 4, {35,31,27,23}},
+{ 673920, 4, {32,30,27,26}},
+{ 673992, 4, {37,33,24,23}},
+{ 674100, 4, {107,21,20,15}},
+{ 674160, 4, {53,53,16,15}},
+{ 674325, 4, {37,27,27,25}},
+{ 674400, 4, {281,16,15,10}},
+{ 674496, 4, {1171,9,8,8}},
+{ 674520, 4, {73,22,21,20}},
+{ 674640, 4, {937,10,9,8}},
+{ 674730, 4, {35,34,27,21}},
+{ 674820, 4, {163,23,15,12}},
+{ 675108, 4, {47,28,27,19}},
+{ 675120, 4, {97,29,16,15}},
+{ 675288, 4, {113,83,9,8}},
+{ 675360, 4, {67,24,21,20}},
+{ 675450, 4, {79,25,19,18}},
+{ 675576, 4, {853,11,9,8}},
+{ 675648, 4, {34,32,27,23}},
+{ 675840, 4, {32,32,30,22}},
+{ 676008, 4, {229,41,9,8}},
+{ 676080, 4, {313,15,12,12}},
+{ 676200, 4, {35,30,28,23}},
+{ 676368, 4, {61,24,22,21}},
+{ 676512, 4, {32,29,27,27}},
+{ 676800, 4, {47,25,24,24}},
+{ 676872, 4, {79,24,21,17}},
+{ 676944, 4, {1567,9,8,6}},
+{ 677025, 4, {59,27,25,17}},
+{ 677304, 4, {409,23,9,8}},
+{ 677340, 4, {71,53,15,12}},
+{ 677376, 4, {32,28,28,27}},
+{ 677448, 4, {97,97,9,8}},
+{ 677520, 4, {941,10,9,8}},
+{ 677600, 4, {40,35,22,22}},
+{ 677664, 4, {181,18,16,13}},
+{ 677700, 4, {251,15,15,12}},
+{ 677880, 4, {269,15,14,12}},
+{ 677952, 4, {107,22,18,16}},
+{ 678132, 4, {39,28,27,23}},
+{ 678240, 4, {157,18,16,15}},
+{ 678300, 4, {35,34,30,19}},
+{ 678375, 4, {67,27,25,15}},
+{ 678384, 4, {673,14,9,8}},
+{ 678480, 4, {257,16,15,11}},
+{ 678672, 4, {1571,9,8,6}},
+{ 678699, 4, {49,27,27,19}},
+{ 678720, 4, {101,21,20,16}},
+{ 678744, 4, {857,11,9,8}},
+{ 678780, 4, {419,15,12,9}},
+{ 678960, 4, {41,30,24,23}},
+{ 679056, 4, {47,43,21,16}},
+{ 679104, 4, {131,18,18,16}},
+{ 679140, 4, {35,33,28,21}},
+{ 679200, 4, {283,16,15,10}},
+{ 679320, 4, {37,34,27,20}},
+{ 679440, 4, {149,19,16,15}},
+{ 679536, 4, {33,33,26,24}},
+{ 679644, 4, {31,29,28,27}},
+{ 679725, 4, {53,27,25,19}},
+{ 679752, 4, {1049,9,9,8}},
+{ 679896, 4, {71,24,21,19}},
+{ 679968, 4, {787,12,9,8}},
+{ 680000, 4, {34,32,25,25}},
+{ 680064, 4, {33,32,28,23}},
+{ 680160, 4, {109,26,16,15}},
+{ 680256, 4, {1181,9,8,8}},
+{ 680328, 4, {859,11,9,8}},
+{ 680400, 4, {30,30,28,27}},
+{ 680472, 4, {727,13,9,8}},
+{ 680544, 4, {139,18,17,16}},
+{ 680580, 4, {199,19,15,12}},
+{ 680800, 4, {37,32,25,23}},
+{ 680832, 4, {197,18,16,12}},
+{ 680850, 4, {89,25,18,17}},
+{ 680960, 4, {35,32,32,19}},
+{ 681048, 4, {1051,9,9,8}},
+{ 681120, 4, {43,30,24,22}},
+{ 681360, 4, {167,17,16,15}},
+{ 681750, 4, {101,25,18,15}},
+{ 681768, 4, {557,17,9,8}},
+{ 681840, 4, {947,10,9,8}},
+{ 681912, 4, {41,28,27,22}},
+{ 682020, 4, {421,15,12,9}},
+{ 682128, 4, {1579,9,8,6}},
+{ 682176, 4, {34,33,32,19}},
+{ 682200, 4, {379,15,12,10}},
+{ 682272, 4, {103,23,18,16}},
+{ 682290, 4, {38,35,27,19}},
+{ 682380, 4, {223,17,15,12}},
+{ 682416, 4, {677,14,9,8}},
+{ 682500, 4, {35,30,26,25}},
+{ 682632, 4, {499,19,9,8}},
+{ 682650, 4, {41,37,25,18}},
+{ 682668, 4, {43,28,27,21}},
+{ 682752, 4, {127,21,16,16}},
+{ 682920, 4, {271,15,14,12}},
+{ 682992, 4, {34,31,27,24}},
+{ 683064, 4, {179,53,9,8}},
+{ 683088, 4, {107,21,19,16}},
+{ 683400, 4, {67,25,24,17}},
+{ 683424, 4, {113,21,18,16}},
+{ 683496, 4, {863,11,9,8}},
+{ 683550, 4, {35,31,30,21}},
+{ 683640, 4, {211,18,15,12}},
+{ 683712, 4, {1187,9,8,8}},
+{ 683820, 4, {131,29,15,12}},
+{ 683856, 4, {1583,9,8,6}},
+{ 683928, 4, {59,24,23,21}},
+{ 684000, 4, {38,30,25,24}},
+{ 684288, 4, {33,32,27,24}},
+{ 684432, 4, {97,21,21,16}},
+{ 684450, 4, {39,27,26,25}},
+{ 684480, 4, {32,31,30,23}},
+{ 684648, 4, {257,37,9,8}},
+{ 684720, 4, {317,15,12,12}},
+{ 685080, 4, {173,22,15,12}},
+{ 685125, 4, {35,29,27,25}},
+{ 685224, 4, {307,31,9,8}},
+{ 685260, 4, {47,27,27,20}},
+{ 685440, 4, {34,30,28,24}},
+{ 685620, 4, {293,15,13,12}},
+{ 685656, 4, {107,89,9,8}},
+{ 685776, 4, {157,21,16,13}},
+{ 685860, 4, {71,23,21,20}},
+{ 685944, 4, {1361,9,8,7}},
+{ 685980, 4, {103,37,15,12}},
+{ 686088, 4, {733,13,9,8}},
+{ 686160, 4, {953,10,9,8}},
+{ 686250, 4, {61,25,25,18}},
+{ 686280, 4, {43,38,21,20}},
+{ 686340, 4, {41,31,27,20}},
+{ 686400, 4, {33,32,26,25}},
+{ 686592, 4, {149,18,16,16}},
+{ 686700, 4, {109,21,20,15}},
+{ 686784, 4, {73,28,21,16}},
+{ 686880, 4, {53,27,24,20}},
+{ 686952, 4, {47,29,24,21}},
+{ 687060, 4, {347,15,12,11}},
+{ 687168, 4, {1193,9,8,8}},
+{ 687360, 4, {179,16,16,15}},
+{ 687420, 4, {67,27,20,19}},
+{ 687456, 4, {33,31,28,24}},
+{ 687528, 4, {1061,9,9,8}},
+{ 687600, 4, {191,16,15,15}},
+{ 687744, 4, {199,18,16,12}},
+{ 687792, 4, {89,23,21,16}},
+{ 687816, 4, {233,41,9,8}},
+{ 687960, 4, {35,28,27,26}},
+{ 688000, 4, {43,32,25,20}},
+{ 688080, 4, {61,47,16,15}},
+{ 688104, 4, {503,19,9,8}},
+{ 688176, 4, {59,27,24,18}},
+{ 688200, 4, {37,31,25,24}},
+{ 688275, 4, {45,35,23,19}},
+{ 688320, 4, {239,16,15,12}},
+{ 688464, 4, {683,14,9,8}},
+{ 688500, 4, {34,30,27,25}},
+{ 688536, 4, {131,73,9,8}},
+{ 688560, 4, {151,19,16,15}},
+{ 688608, 4, {797,12,9,8}},
+{ 688800, 4, {41,28,25,24}},
+{ 688824, 4, {1063,9,9,8}},
+{ 688860, 4, {89,43,15,12}},
+{ 688896, 4, {36,32,26,23}},
+{ 688905, 4, {35,27,27,27}},
+{ 688968, 4, {1367,9,8,7}},
+{ 689040, 4, {33,30,29,24}},
+{ 689112, 4, {563,17,9,8}},
+{ 689400, 4, {383,15,12,10}},
+{ 689472, 4, {38,28,27,24}},
+{ 689544, 4, {157,61,9,8}},
+{ 689850, 4, {73,25,21,18}},
+{ 689904, 4, {1597,9,8,6}},
+{ 689920, 4, {35,32,28,22}},
+{ 689976, 4, {37,37,24,21}},
+{ 690060, 4, {53,31,21,20}},
+{ 690120, 4, {71,27,20,18}},
+{ 690144, 4, {79,26,21,16}},
+{ 690300, 4, {59,26,25,18}},
+{ 690408, 4, {223,43,9,8}},
+{ 690480, 4, {137,21,16,15}},
+{ 690525, 4, {33,31,27,25}},
+{ 690624, 4, {109,22,18,16}},
+{ 690696, 4, {181,53,9,8}},
+{ 690768, 4, {41,27,26,24}},
+{ 690795, 4, {43,35,27,17}},
+{ 691020, 4, {349,15,12,11}},
+{ 691128, 4, {331,29,9,8}},
+{ 691152, 4, {34,33,28,22}},
+{ 691200, 4, {32,32,27,25}},
+{ 691380, 4, {167,23,15,12}},
+{ 691440, 4, {67,43,16,15}},
+{ 691632, 4, {1601,9,8,6}},
+{ 691650, 4, {53,29,25,18}},
+{ 691680, 4, {131,22,16,15}},
+{ 691704, 4, {739,13,9,8}},
+{ 691740, 4, {61,27,21,20}},
+{ 691776, 4, {1201,9,8,8}},
+{ 691824, 4, {71,29,21,16}},
+{ 691875, 4, {41,27,25,25}},
+{ 691920, 4, {31,31,30,24}},
+{ 691992, 4, {1373,9,8,7}},
+{ 692160, 4, {103,21,20,16}},
+{ 692208, 4, {38,33,24,23}},
+{ 692424, 4, {163,59,9,8}},
+{ 692550, 4, {38,27,27,25}},
+{ 692580, 4, {97,21,20,17}},
+{ 692640, 4, {37,30,26,24}},
+{ 692712, 4, {1069,9,9,8}},
+{ 693000, 4, {33,30,28,25}},
+{ 693216, 4, {83,29,18,16}},
+{ 693450, 4, {67,25,23,18}},
+{ 693600, 4, {34,34,25,24}},
+{ 693840, 4, {59,28,21,20}},
+{ 693864, 4, {419,23,9,8}},
+{ 693900, 4, {257,15,15,12}},
+{ 694008, 4, {34,28,27,27}},
+{ 694080, 4, {241,16,15,12}},
+{ 694152, 4, {311,31,9,8}},
+{ 694224, 4, {1607,9,8,6}},
+{ 694320, 4, {263,16,15,11}},
+{ 694400, 4, {32,31,28,25}},
+{ 694512, 4, {53,26,24,21}},
+{ 694575, 4, {35,35,27,21}},
+{ 694584, 4, {877,11,9,8}},
+{ 694620, 4, {227,17,15,12}},
+{ 694800, 4, {193,16,15,15}},
+{ 694944, 4, {127,19,18,16}},
+{ 695040, 4, {181,16,16,15}},
+{ 695088, 4, {1609,9,8,6}},
+{ 695250, 4, {103,25,18,15}},
+{ 695304, 4, {37,29,27,24}},
+{ 695400, 4, {61,25,24,19}},
+{ 695448, 4, {743,13,9,8}},
+{ 695520, 4, {35,32,27,23}},
+{ 695760, 4, {223,16,15,13}},
+{ 695808, 4, {151,18,16,16}},
+{ 695856, 4, {109,21,19,16}},
+{ 696000, 4, {32,30,29,25}},
+{ 696024, 4, {1381,9,8,7}},
+{ 696240, 4, {967,10,9,8}},
+{ 696312, 4, {509,19,9,8}},
+{ 696384, 4, {32,31,27,26}},
+{ 696420, 4, {73,53,15,12}},
+{ 696456, 4, {569,17,9,8}},
+{ 696528, 4, {691,14,9,8}},
+{ 696600, 4, {43,27,25,24}},
+{ 696672, 4, {59,41,18,16}},
+{ 696696, 4, {33,29,28,26}},
+{ 696780, 4, {79,21,21,20}},
+{ 696816, 4, {1613,9,8,6}},
+{ 696960, 4, {33,32,30,22}},
+{ 697176, 4, {421,23,9,8}},
+{ 697200, 4, {83,21,20,20}},
+{ 697536, 4, {173,18,16,14}},
+{ 697752, 4, {881,11,9,8}},
+{ 697872, 4, {67,31,21,16}},
+{ 697950, 4, {47,27,25,22}},
+{ 698040, 4, {277,15,14,12}},
+{ 698112, 4, {101,24,18,16}},
+{ 698220, 4, {431,15,12,9}},
+{ 698250, 4, {35,35,30,19}},
+{ 698280, 4, {40,33,23,23}},
+{ 698472, 4, {109,89,9,8}},
+{ 698544, 4, {33,28,28,27}},
+{ 698616, 4, {313,31,9,8}},
+{ 698625, 4, {45,27,25,23}},
+{ 698640, 4, {71,41,16,15}},
+{ 698688, 4, {1213,9,8,8}},
+{ 698880, 4, {32,30,28,26}},
+{ 698904, 4, {571,17,9,8}},
+{ 698940, 4, {353,15,12,11}},
+{ 698976, 4, {809,12,9,8}},
+{ 699048, 4, {73,24,21,19}},
+{ 699120, 4, {971,10,9,8}},
+{ 699200, 4, {38,32,25,23}},
+{ 699300, 4, {37,28,27,25}},
+{ 699336, 4, {883,11,9,8}},
+{ 699408, 4, {1619,9,8,6}},
+{ 699600, 4, {53,25,24,22}},
+{ 699840, 4, {32,30,27,27}},
+{ 699867, 4, {49,27,23,23}},
+{ 699975, 4, {61,27,25,17}},
+{ 700000, 4, {35,32,25,25}},
+{ 700128, 4, {34,33,26,24}},
+{ 700200, 4, {389,15,12,10}},
+{ 700245, 4, {39,35,27,19}},
+{ 700272, 4, {1621,9,8,6}},
+{ 700344, 4, {137,71,9,8}},
+{ 700350, 4, {35,30,29,23}},
+{ 700488, 4, {47,27,24,23}},
+{ 700560, 4, {139,21,16,15}},
+{ 700632, 4, {263,37,9,8}},
+{ 700704, 4, {811,12,9,8}},
+{ 700740, 4, {229,17,15,12}},
+{ 700896, 4, {149,21,16,14}},
+{ 700920, 4, {59,27,22,20}},
+{ 700992, 4, {1217,9,8,8}},
+{ 701040, 4, {127,23,16,15}},
+{ 701316, 4, {33,33,28,23}},
+{ 701460, 4, {433,15,12,9}},
+{ 701520, 4, {79,37,16,15}},
+{ 701568, 4, {32,29,28,27}},
+{ 702180, 4, {83,47,15,12}},
+{ 702504, 4, {887,11,9,8}},
+{ 702576, 4, {41,34,24,21}},
+{ 702792, 4, {227,43,9,8}},
+{ 702864, 4, {1627,9,8,6}},
+{ 702900, 4, {71,25,22,18}},
+{ 702936, 4, {751,13,9,8}},
+{ 702960, 4, {101,29,16,15}},
+{ 703080, 4, {31,30,28,27}},
+{ 703200, 4, {293,16,15,10}},
+{ 703248, 4, {39,28,28,23}},
+{ 703296, 4, {37,33,24,24}},
+{ 703440, 4, {977,10,9,8}},
+{ 703500, 4, {67,25,21,20}},
+{ 703656, 4, {337,29,9,8}},
+{ 704000, 4, {40,32,25,22}},
+{ 704160, 4, {163,18,16,15}},
+{ 704256, 4, {131,21,16,16}},
+{ 704352, 4, {33,32,29,23}},
+{ 704376, 4, {1087,9,9,8}},
+{ 704448, 4, {1223,9,8,8}},
+{ 705000, 4, {47,25,25,24}},
+{ 705024, 4, {34,32,27,24}},
+{ 705096, 4, {1399,9,8,7}},
+{ 705120, 4, {113,26,16,15}},
+{ 705180, 4, {73,23,21,20}},
+{ 705312, 4, {79,31,18,16}},
+{ 705384, 4, {101,97,9,8}},
+{ 705528, 4, {239,41,9,8}},
+{ 705672, 4, {33,33,27,24}},
+{ 705840, 4, {173,17,16,15}},
+{ 705888, 4, {43,32,27,19}},
+{ 706020, 4, {41,41,21,20}},
+{ 706248, 4, {577,17,9,8}},
+{ 706560, 4, {32,32,30,23}},
+{ 706608, 4, {701,14,9,8}},
+{ 706800, 4, {38,31,25,24}},
+{ 706860, 4, {35,34,27,22}},
+{ 706968, 4, {1091,9,9,8}},
+{ 707112, 4, {61,24,23,21}},
+{ 707184, 4, {1637,9,8,6}},
+{ 707200, 4, {34,32,26,25}},
+{ 707256, 4, {47,33,24,19}},
+{ 707544, 4, {317,31,9,8}},
+{ 707616, 4, {36,28,27,26}},
+{ 707760, 4, {983,10,9,8}},
+{ 707904, 4, {1229,9,8,8}},
+{ 708000, 4, {59,25,24,20}},
+{ 708120, 4, {281,15,14,12}},
+{ 708240, 4, {227,16,15,13}},
+{ 708264, 4, {1093,9,9,8}},
+{ 708400, 4, {40,35,23,22}},
+{ 708480, 4, {41,30,24,24}},
+{ 708552, 4, {757,13,9,8}},
+{ 708624, 4, {38,37,24,21}},
+{ 708660, 4, {127,31,15,12}},
+{ 708750, 4, {35,30,27,25}},
+{ 708768, 4, {107,23,18,16}},
+{ 708840, 4, {179,22,15,12}},
+{ 708960, 4, {211,16,15,14}},
+{ 708984, 4, {229,43,9,8}},
+{ 709056, 4, {1231,9,8,8}},
+{ 709128, 4, {67,24,21,21}},
+{ 709200, 4, {197,16,15,15}},
+{ 709344, 4, {821,12,9,8}},
+{ 709416, 4, {167,59,9,8}},
+{ 709560, 4, {73,27,20,18}},
+{ 709632, 4, {33,32,28,24}},
+{ 709650, 4, {83,25,19,18}},
+{ 709800, 4, {35,30,26,26}},
+{ 709920, 4, {34,30,29,24}},
+{ 710100, 4, {263,15,15,12}},
+{ 710136, 4, {1409,9,8,7}},
+{ 710160, 4, {269,16,15,11}},
+{ 710208, 4, {137,18,18,16}},
+{ 710220, 4, {89,21,20,19}},
+{ 710304, 4, {151,21,16,14}},
+{ 710400, 4, {37,32,25,24}},
+{ 710424, 4, {36,33,26,23}},
+{ 710568, 4, {139,71,9,8}},
+{ 710640, 4, {47,30,24,21}},
+{ 710775, 4, {39,27,27,25}},
+{ 710820, 4, {359,15,12,11}},
+{ 710856, 4, {1097,9,9,8}},
+{ 710892, 4, {39,31,28,21}},
+{ 710976, 4, {42,32,23,23}},
+{ 711000, 4, {79,25,20,18}},
+{ 711072, 4, {823,12,9,8}},
+{ 711144, 4, {83,24,21,17}},
+{ 711180, 4, {439,15,12,9}},
+{ 711312, 4, {73,29,21,16}},
+{ 711360, 4, {38,30,26,24}},
+{ 711432, 4, {241,41,9,8}},
+{ 711450, 4, {34,31,27,25}},
+{ 711480, 4, {35,33,28,22}},
+{ 711504, 4, {61,27,24,18}},
+{ 711540, 4, {67,59,15,12}},
+{ 711900, 4, {113,21,20,15}},
+{ 711936, 4, {103,24,18,16}},
+{ 711984, 4, {163,21,16,13}},
+{ 712008, 4, {33,31,29,24}},
+{ 712080, 4, {43,30,24,23}},
+{ 712296, 4, {761,13,9,8}},
+{ 712512, 4, {1237,9,8,8}},
+{ 712530, 4, {35,29,27,26}},
+{ 712620, 4, {107,37,15,12}},
+{ 712656, 4, {101,21,21,16}},
+{ 712728, 4, {521,19,9,8}},
+{ 712800, 4, {33,32,27,25}},
+{ 712908, 4, {41,28,27,23}},
+{ 712980, 4, {233,17,15,12}},
+{ 713160, 4, {283,15,14,12}},
+{ 713400, 4, {41,29,25,24}},
+{ 713520, 4, {991,10,9,8}},
+{ 713664, 4, {59,24,24,21}},
+{ 713700, 4, {61,26,25,18}},
+{ 713736, 4, {431,23,9,8}},
+{ 713856, 4, {33,32,26,26}},
+{ 713952, 4, {67,37,18,16}},
+{ 714024, 4, {211,47,9,8}},
+{ 714096, 4, {38,29,27,24}},
+{ 714240, 4, {32,31,30,24}},
+{ 714384, 4, {41,33,24,22}},
+{ 714420, 4, {35,28,27,27}},
+{ 714480, 4, {229,16,15,13}},
+{ 714528, 4, {827,12,9,8}},
+{ 714560, 4, {35,32,29,22}},
+{ 714600, 4, {397,15,12,10}},
+{ 714672, 4, {709,14,9,8}},
+{ 714744, 4, {1103,9,9,8}},
+{ 714960, 4, {331,15,12,12}},
+{ 715104, 4, {191,18,16,13}},
+{ 715140, 4, {137,29,15,12}},
+{ 715176, 4, {43,28,27,22}},
+{ 715200, 4, {149,20,16,15}},
+{ 715392, 4, {36,32,27,23}},
+{ 715440, 4, {271,16,15,11}},
+{ 715464, 4, {523,19,9,8}},
+{ 715500, 4, {53,27,25,20}},
+{ 715680, 4, {71,24,21,20}},
+{ 715824, 4, {1657,9,8,6}},
+{ 715860, 4, {97,41,15,12}},
+{ 715896, 4, {163,61,9,8}},
+{ 715920, 4, {157,19,16,15}},
+{ 715950, 4, {43,37,25,18}},
+{ 715968, 4, {113,22,18,16}},
+{ 716100, 4, {33,31,28,25}},
+{ 716220, 4, {173,23,15,12}},
+{ 716256, 4, {829,12,9,8}},
+{ 716400, 4, {199,16,15,15}},
+{ 716616, 4, {269,37,9,8}},
+{ 716688, 4, {79,24,21,18}},
+{ 716760, 4, {181,22,15,12}},
+{ 716800, 4, {32,32,28,25}},
+{ 716832, 4, {131,19,18,16}},
+{ 716850, 4, {59,27,25,18}},
+{ 716880, 4, {103,29,16,15}},
+{ 717024, 4, {97,22,21,16}},
+{ 717048, 4, {433,23,9,8}},
+{ 717192, 4, {1423,9,8,7}},
+{ 717255, 4, {35,33,27,23}},
+{ 717336, 4, {41,27,27,24}},
+{ 717360, 4, {61,28,21,20}},
+{ 717408, 4, {53,47,18,16}},
+{ 717600, 4, {39,32,25,23}},
+{ 717660, 4, {443,15,12,9}},
+{ 717696, 4, {89,24,21,16}},
+{ 717840, 4, {997,10,9,8}},
+{ 717948, 4, {37,33,28,21}},
+{ 718080, 4, {34,32,30,22}},
+{ 718200, 4, {38,28,27,25}},
+{ 718320, 4, {73,41,16,15}},
+{ 718344, 4, {907,11,9,8}},
+{ 718380, 4, {307,15,13,12}},
+{ 718416, 4, {1663,9,8,6}},
+{ 718488, 4, {587,17,9,8}},
+{ 718620, 4, {59,29,21,20}},
+{ 718632, 4, {1109,9,9,8}},
+{ 718776, 4, {149,67,9,8}},
+{ 718848, 4, {32,32,27,26}},
+{ 718875, 4, {71,27,25,15}},
+{ 719040, 4, {107,21,20,16}},
+{ 719100, 4, {47,34,25,18}},
+{ 719200, 4, {32,31,29,25}},
+{ 719208, 4, {1427,9,8,7}},
+{ 719280, 4, {37,30,27,24}},
+{ 719352, 4, {103,97,9,8}},
+{ 719424, 4, {1249,9,8,8}},
+{ 719550, 4, {41,27,26,25}},
+{ 719712, 4, {34,28,28,27}},
+{ 719784, 4, {769,13,9,8}},
+{ 719820, 4, {43,31,27,20}},
+{ 720000, 4, {32,30,30,25}},
+{ 720072, 4, {137,73,9,8}},
+{ 720144, 4, {1667,9,8,6}},
+{ 720192, 4, {33,32,31,22}},
+{ 720216, 4, {1429,9,8,7}},
+{ 720288, 4, {61,41,18,16}},
+{ 720576, 4, {139,18,18,16}},
+{ 720720, 4, {33,30,28,26}},
+{ 720900, 4, {89,25,18,18}},
+{ 721008, 4, {1669,9,8,6}},
+{ 721140, 4, {101,21,20,17}},
+{ 721224, 4, {53,27,24,21}},
+{ 721280, 4, {35,32,28,23}},
+{ 721368, 4, {233,43,9,8}},
+{ 721392, 4, {113,21,19,16}},
+{ 721440, 4, {167,18,16,15}},
+{ 721512, 4, {911,11,9,8}},
+{ 721600, 4, {41,32,25,22}},
+{ 721620, 4, {211,19,15,12}},
+{ 721680, 4, {97,31,16,15}},
+{ 721728, 4, {179,18,16,14}},
+{ 721800, 4, {401,15,12,10}},
+{ 721944, 4, {271,37,9,8}},
+{ 722016, 4, {109,23,18,16}},
+{ 722232, 4, {1433,9,8,7}},
+{ 722250, 4, {107,25,18,15}},
+{ 722304, 4, {38,33,24,24}},
+{ 722376, 4, {127,79,9,8}},
+{ 722400, 4, {43,28,25,24}},
+{ 722520, 4, {223,18,15,12}},
+{ 722568, 4, {34,33,28,23}},
+{ 722592, 4, {193,18,16,13}},
+{ 722700, 4, {73,25,22,18}},
+{ 722880, 4, {251,16,15,12}},
+{ 722925, 4, {45,35,27,17}},
+{ 723120, 4, {131,23,16,15}},
+{ 723168, 4, {32,31,27,27}},
+{ 723360, 4, {137,22,16,15}},
+{ 723456, 4, {157,18,16,16}},
+{ 723492, 4, {33,29,28,27}},
+{ 723520, 4, {35,34,32,19}},
+{ 723528, 4, {773,13,9,8}},
+{ 723600, 4, {67,27,20,20}},
+{ 723816, 4, {1117,9,9,8}},
+{ 723840, 4, {32,30,29,26}},
+{ 724104, 4, {113,89,9,8}},
+{ 724200, 4, {71,25,24,17}},
+{ 724275, 4, {37,29,27,25}},
+{ 724416, 4, {33,28,28,28}},
+{ 724464, 4, {43,27,26,24}},
+{ 724500, 4, {35,30,30,23}},
+{ 724536, 4, {347,29,9,8}},
+{ 724680, 4, {61,27,22,20}},
+{ 724752, 4, {719,14,9,8}},
+{ 724800, 4, {151,20,16,15}},
+{ 724896, 4, {839,12,9,8}},
+{ 725040, 4, {53,30,24,19}},
+{ 725088, 4, {83,26,21,16}},
+{ 725184, 4, {1259,9,8,8}},
+{ 725220, 4, {79,27,20,17}},
+{ 725256, 4, {1439,9,8,7}},
+{ 725424, 4, {127,21,17,16}},
+{ 725580, 4, {139,29,15,12}},
+{ 725625, 4, {43,27,25,25}},
+{ 725760, 4, {32,30,28,27}},
+{ 725832, 4, {593,17,9,8}},
+{ 725940, 4, {109,37,15,12}},
+{ 726000, 4, {40,33,25,22}},
+{ 726300, 4, {269,15,15,12}},
+{ 726336, 4, {97,26,18,16}},
+{ 726408, 4, {59,27,24,19}},
+{ 726480, 4, {1009,10,9,8}},
+{ 726516, 4, {31,31,28,27}},
+{ 726624, 4, {32,29,29,27}},
+{ 726660, 4, {367,15,12,11}},
+{ 726768, 4, {103,21,21,16}},
+{ 726960, 4, {233,16,15,13}},
+{ 726984, 4, {439,23,9,8}},
+{ 727056, 4, {34,33,27,24}},
+{ 727272, 4, {37,28,27,26}},
+{ 727380, 4, {449,15,12,9}},
+{ 727650, 4, {35,35,27,22}},
+{ 727704, 4, {1123,9,9,8}},
+{ 727740, 4, {311,15,13,12}},
+{ 727776, 4, {38,38,24,21}},
+{ 727848, 4, {919,11,9,8}},
+{ 727920, 4, {337,15,12,12}},
+{ 728000, 4, {35,32,26,25}},
+{ 728364, 4, {39,29,28,23}},
+{ 728424, 4, {151,67,9,8}},
+{ 728460, 4, {71,27,20,19}},
+{ 728640, 4, {33,32,30,23}},
+{ 728712, 4, {349,29,9,8}},
+{ 728856, 4, {191,53,9,8}},
+{ 728973, 4, {49,29,27,19}},
+{ 729216, 4, {211,18,16,12}},
+{ 729288, 4, {1447,9,8,7}},
+{ 729360, 4, {1013,10,9,8}},
+{ 729456, 4, {167,21,16,13}},
+{ 729504, 4, {149,18,17,16}},
+{ 729600, 4, {38,32,25,24}},
+{ 729675, 4, {47,27,25,23}},
+{ 729792, 4, {181,18,16,14}},
+{ 729960, 4, {79,22,21,20}},
+{ 730128, 4, {53,41,21,16}},
+{ 730296, 4, {42,28,27,23}},
+{ 730320, 4, {179,17,16,15}},
+{ 730380, 4, {47,37,21,20}},
+{ 730584, 4, {139,73,9,8}},
+{ 730656, 4, {59,43,18,16}},
+{ 730944, 4, {47,27,24,24}},
+{ 730980, 4, {131,31,15,12}},
+{ 731280, 4, {277,16,15,11}},
+{ 731304, 4, {1451,9,8,7}},
+{ 731340, 4, {239,17,15,12}},
+{ 731376, 4, {1693,9,8,6}},
+{ 731400, 4, {53,25,24,23}},
+{ 731520, 4, {127,20,18,16}},
+{ 731592, 4, {1129,9,9,8}},
+{ 731640, 4, {67,26,21,20}},
+{ 731700, 4, {271,15,15,12}},
+{ 731808, 4, {33,33,28,24}},
+{ 732000, 4, {61,25,24,20}},
+{ 732060, 4, {83,21,21,20}},
+{ 732312, 4, {1453,9,8,7}},
+{ 732375, 4, {35,31,27,25}},
+{ 732420, 4, {313,15,13,12}},
+{ 732480, 4, {109,21,20,16}},
+{ 732600, 4, {37,33,25,24}},
+{ 732720, 4, {71,43,16,15}},
+{ 732780, 4, {59,27,23,20}},
+{ 732816, 4, {727,14,9,8}},
+{ 733104, 4, {1697,9,8,6}},
+{ 733176, 4, {599,17,9,8}},
+{ 733200, 4, {47,26,25,24}},
+{ 733320, 4, {97,21,20,18}},
+{ 733440, 4, {191,16,16,15}},
+{ 733464, 4, {167,61,9,8}},
+{ 733488, 4, {59,37,21,16}},
+{ 733608, 4, {443,23,9,8}},
+{ 733680, 4, {1019,10,9,8}},
+{ 733920, 4, {139,22,16,15}},
+{ 733968, 4, {1699,9,8,6}},
+{ 734265, 4, {37,35,27,21}},
+{ 734328, 4, {47,31,24,21}},
+{ 734400, 4, {34,32,27,25}},
+{ 734472, 4, {101,101,9,8}},
+{ 734832, 4, {36,28,27,27}},
+{ 734850, 4, {71,25,23,18}},
+{ 734904, 4, {173,59,9,8}},
+{ 734976, 4, {33,32,29,24}},
+{ 735000, 4, {35,30,28,25}},
+{ 735075, 4, {33,33,27,25}},
+{ 735120, 4, {1021,10,9,8}},
+{ 735264, 4, {37,32,27,23}},
+{ 735336, 4, {1459,9,8,7}},
+{ 735420, 4, {103,21,20,17}},
+{ 735480, 4, {227,18,15,12}},
+{ 735552, 4, {1277,9,8,8}},
+{ 735624, 4, {601,17,9,8}},
+{ 735660, 4, {67,61,15,12}},
+{ 735750, 4, {109,25,18,15}},
+{ 735768, 4, {929,11,9,8}},
+{ 735840, 4, {73,24,21,20}},
+{ 736000, 4, {40,32,25,23}},
+{ 736020, 4, {47,29,27,20}},
+{ 736155, 4, {41,35,27,19}},
+{ 736200, 4, {409,15,12,10}},
+{ 736488, 4, {193,53,9,8}},
+{ 736512, 4, {137,21,16,16}},
+{ 736560, 4, {33,31,30,24}},
+{ 736632, 4, {787,13,9,8}},
+{ 736704, 4, {1279,9,8,8}},
+{ 736800, 4, {307,16,15,10}},
+{ 736848, 4, {43,34,24,21}},
+{ 736992, 4, {853,12,9,8}},
+{ 737040, 4, {83,37,16,15}},
+{ 737064, 4, {353,29,9,8}},
+{ 737100, 4, {35,30,27,26}},
+{ 737280, 4, {32,32,30,24}},
+{ 737352, 4, {38,33,28,21}},
+{ 737460, 4, {241,17,15,12}},
+{ 737568, 4, {197,18,16,13}},
+{ 737748, 4, {36,33,27,23}},
+{ 737856, 4, {61,24,24,21}},
+{ 737928, 4, {277,37,9,8}},
+{ 738000, 4, {41,30,25,24}},
+{ 738192, 4, {39,28,26,26}},
+{ 738288, 4, {1709,9,8,6}},
+{ 738360, 4, {293,15,14,12}},
+{ 738480, 4, {181,17,16,15}},
+{ 738528, 4, {157,21,16,14}},
+{ 738540, 4, {373,15,12,11}},
+{ 738720, 4, {38,30,27,24}},
+{ 738792, 4, {331,31,9,8}},
+{ 738864, 4, {733,14,9,8}},
+{ 738990, 4, {35,34,27,23}},
+{ 739008, 4, {1283,9,8,8}},
+{ 739125, 4, {73,27,25,15}},
+{ 739200, 4, {33,32,28,25}},
+{ 739260, 4, {37,37,27,20}},
+{ 739296, 4, {151,18,17,16}},
+{ 739350, 4, {53,31,25,18}},
+{ 739536, 4, {71,31,21,16}},
+{ 739584, 4, {107,24,18,16}},
+{ 739935, 4, {35,29,27,27}},
+{ 739944, 4, {239,43,9,8}},
+{ 740000, 4, {37,32,25,25}},
+{ 740088, 4, {541,19,9,8}},
+{ 740160, 4, {257,16,15,12}},
+{ 740340, 4, {457,15,12,9}},
+{ 740448, 4, {857,12,9,8}},
+{ 740460, 4, {43,41,21,20}},
+{ 740600, 4, {40,35,23,23}},
+{ 740880, 4, {35,28,28,27}},
+{ 740952, 4, {251,41,9,8}},
+{ 741024, 4, {83,31,18,16}},
+{ 741060, 4, {179,23,15,12}},
+{ 741120, 4, {193,16,16,15}},
+{ 741150, 4, {61,27,25,18}},
+{ 741312, 4, {33,32,27,26}},
+{ 741384, 4, {1471,9,8,7}},
+{ 741780, 4, {317,15,13,12}},
+{ 741840, 4, {281,16,15,11}},
+{ 741888, 4, {36,32,28,23}},
+{ 741960, 4, {229,18,15,12}},
+{ 742050, 4, {97,25,18,17}},
+{ 742104, 4, {937,11,9,8}},
+{ 742176, 4, {859,12,9,8}},
+{ 742224, 4, {47,47,21,16}},
+{ 742320, 4, {1031,10,9,8}},
+{ 742400, 4, {32,32,29,25}},
+{ 742464, 4, {1289,9,8,8}},
+{ 742716, 4, {39,36,23,23}},
+{ 742896, 4, {67,24,22,21}},
+{ 742968, 4, {607,17,9,8}},
+{ 742980, 4, {61,29,21,20}},
+{ 743040, 4, {43,30,24,24}},
+{ 743232, 4, {79,28,21,16}},
+{ 743256, 4, {37,31,27,24}},
+{ 743280, 4, {163,19,16,15}},
+{ 743328, 4, {89,29,18,16}},
+{ 743400, 4, {59,25,24,21}},
+{ 743424, 4, {33,32,32,22}},
+{ 743472, 4, {1721,9,8,6}},
+{ 743544, 4, {449,23,9,8}},
+{ 743616, 4, {1291,9,8,8}},
+{ 743760, 4, {1033,10,9,8}},
+{ 743820, 4, {35,33,28,23}},
+{ 743850, 4, {38,29,27,25}},
+{ 743904, 4, {41,28,27,24}},
+{ 744000, 4, {32,31,30,25}},
+{ 744120, 4, {53,27,26,20}},
+{ 744336, 4, {1723,9,8,6}},
+{ 744480, 4, {47,30,24,22}},
+{ 744600, 4, {73,25,24,17}},
+{ 744720, 4, {107,29,16,15}},
+{ 744744, 4, {33,31,28,26}},
+{ 744912, 4, {739,14,9,8}},
+{ 745056, 4, {199,18,16,13}},
+{ 745128, 4, {131,79,9,8}},
+{ 745272, 4, {941,11,9,8}},
+{ 745380, 4, {101,41,15,12}},
+{ 745416, 4, {34,29,28,27}},
+{ 745500, 4, {71,25,21,20}},
+{ 745632, 4, {863,12,9,8}},
+{ 745680, 4, {239,16,15,13}},
+{ 745848, 4, {1151,9,9,8}},
+{ 745920, 4, {37,30,28,24}},
+{ 745992, 4, {797,13,9,8}},
+{ 746136, 4, {241,43,9,8}},
+{ 746172, 4, {47,28,27,21}},
+{ 746304, 4, {39,32,26,23}},
+{ 746400, 4, {311,16,15,10}},
+{ 746424, 4, {1481,9,8,7}},
+{ 746496, 4, {32,32,27,27}},
+{ 746550, 4, {79,25,21,18}},
+{ 746592, 4, {101,22,21,16}},
+{ 746760, 4, {127,21,20,14}},
+{ 746820, 4, {461,15,12,9}},
+{ 746856, 4, {41,33,24,23}},
+{ 746928, 4, {38,28,27,26}},
+{ 747000, 4, {83,25,20,18}},
+{ 747040, 4, {35,32,29,23}},
+{ 747072, 4, {1297,9,8,8}},
+{ 747120, 4, {283,16,15,11}},
+{ 747144, 4, {1153,9,9,8}},
+{ 747225, 4, {41,27,27,25}},
+{ 747264, 4, {139,21,16,16}},
+{ 747288, 4, {107,97,9,8}},
+{ 747360, 4, {173,18,16,15}},
+{ 747432, 4, {1483,9,8,7}},
+{ 747600, 4, {89,21,20,20}},
+{ 747684, 4, {43,28,27,23}},
+{ 747900, 4, {277,15,15,12}},
+{ 747936, 4, {53,28,24,21}},
+{ 748080, 4, {1039,10,9,8}},
+{ 748125, 4, {45,35,25,19}},
+{ 748200, 4, {43,29,25,24}},
+{ 748272, 4, {131,21,17,16}},
+{ 748296, 4, {547,19,9,8}},
+{ 748440, 4, {33,30,28,27}},
+{ 748512, 4, {113,23,18,16}},
+{ 748584, 4, {281,37,9,8}},
+{ 748650, 4, {35,31,30,23}},
+{ 748656, 4, {1733,9,8,6}},
+{ 748800, 4, {32,30,30,26}},
+{ 748944, 4, {743,14,9,8}},
+{ 748980, 4, {73,27,20,19}},
+{ 749016, 4, {103,101,9,8}},
+{ 749088, 4, {34,34,27,24}},
+{ 749232, 4, {43,33,24,22}},
+{ 749250, 4, {37,30,27,25}},
+{ 749280, 4, {223,16,15,14}},
+{ 749340, 4, {181,23,15,12}},
+{ 749376, 4, {1301,9,8,8}},
+{ 749448, 4, {1487,9,8,7}},
+{ 749520, 4, {347,15,12,12}},
+{ 749592, 4, {359,29,9,8}},
+{ 749616, 4, {97,23,21,16}},
+{ 749664, 4, {137,19,18,16}},
+{ 749700, 4, {35,34,30,21}},
+{ 749952, 4, {32,31,28,27}},
+{ 750024, 4, {947,11,9,8}},
+{ 750060, 4, {463,15,12,9}},
+{ 750120, 4, {47,38,21,20}},
+{ 750141, 4, {49,27,27,21}},
+{ 750288, 4, {33,29,28,28}},
+{ 750312, 4, {613,17,9,8}},
+{ 750420, 4, {379,15,12,11}},
+{ 750456, 4, {1489,9,8,7}},
+{ 750480, 4, {59,53,16,15}},
+{ 750528, 4, {1303,9,8,8}},
+{ 750720, 4, {34,32,30,23}},
+{ 750780, 4, {97,43,15,12}},
+{ 750960, 4, {149,21,16,15}},
+{ 751032, 4, {61,27,24,19}},
+{ 751104, 4, {163,18,16,16}},
+{ 751200, 4, {313,16,15,10}},
+{ 751275, 4, {53,27,25,21}},
+{ 751440, 4, {101,31,16,15}},
+{ 751464, 4, {71,24,21,21}},
+{ 751680, 4, {32,30,29,27}},
+{ 751752, 4, {197,53,9,8}},
+{ 751920, 4, {241,16,15,13}},
+{ 752000, 4, {47,32,25,20}},
+{ 752112, 4, {1741,9,8,6}},
+{ 752136, 4, {37,33,28,22}},
+{ 752184, 4, {337,31,9,8}},
+{ 752328, 4, {43,27,27,24}},
+{ 752400, 4, {38,33,25,24}},
+{ 752472, 4, {1493,9,8,7}},
+{ 752580, 4, {113,37,15,12}},
+{ 752640, 4, {32,30,28,28}},
+{ 752760, 4, {41,34,27,20}},
+{ 752832, 4, {1307,9,8,8}},
+{ 752928, 4, {33,32,31,23}},
+{ 752940, 4, {89,47,15,12}},
+{ 752976, 4, {83,24,21,18}},
+{ 753360, 4, {73,43,16,15}},
+{ 753408, 4, {109,24,18,16}},
+{ 753480, 4, {36,35,26,23}},
+{ 753600, 4, {157,20,16,15}},
+{ 753624, 4, {1163,9,9,8}},
+{ 753660, 4, {79,53,15,12}},
+{ 753750, 4, {67,25,25,18}},
+{ 753840, 4, {349,15,12,12}},
+{ 753912, 4, {283,37,9,8}},
+{ 753984, 4, {34,33,28,24}},
+{ 754020, 4, {71,59,15,12}},
+{ 754110, 4, {38,35,27,21}},
+{ 754200, 4, {419,15,12,10}},
+{ 754400, 4, {41,32,25,23}},
+{ 754560, 4, {131,20,18,16}},
+{ 754632, 4, {223,47,9,8}},
+{ 754650, 4, {43,27,26,25}},
+{ 754704, 4, {1747,9,8,6}},
+{ 754776, 4, {953,11,9,8}},
+{ 754800, 4, {37,34,25,24}},
+{ 754920, 4, {233,18,15,12}},
+{ 754992, 4, {107,21,21,16}},
+{ 755040, 4, {40,33,26,22}},
+{ 755055, 4, {47,35,27,17}},
+{ 755136, 4, {38,32,27,23}},
+{ 755208, 4, {617,17,9,8}},
+{ 755244, 4, {37,28,27,27}},
+{ 755280, 4, {1049,10,9,8}},
+{ 755424, 4, {61,43,18,16}},
+{ 755496, 4, {1499,9,8,7}},
+{ 755550, 4, {73,25,23,18}},
+{ 755568, 4, {53,27,24,22}},
+{ 755664, 4, {173,21,16,13}},
+{ 755760, 4, {67,47,16,15}},
+{ 756240, 4, {137,23,16,15}},
+{ 756288, 4, {101,26,18,16}},
+{ 756360, 4, {191,22,15,12}},
+{ 756450, 4, {41,41,25,18}},
+{ 756480, 4, {197,16,16,15}},
+{ 756504, 4, {79,24,21,19}},
+{ 756540, 4, {467,15,12,9}},
+{ 756576, 4, {71,37,18,16}},
+{ 756675, 4, {59,27,25,19}},
+{ 756720, 4, {1051,10,9,8}},
+{ 756756, 4, {39,33,28,21}},
+{ 756792, 4, {457,23,9,8}},
+{ 756800, 4, {43,32,25,22}},
+{ 756840, 4, {53,34,21,20}},
+{ 757008, 4, {751,14,9,8}},
+{ 757120, 4, {35,32,26,26}},
+{ 757224, 4, {809,13,9,8}},
+{ 757296, 4, {1753,9,8,6}},
+{ 757350, 4, {34,33,27,25}},
+{ 757368, 4, {157,67,9,8}},
+{ 757440, 4, {263,16,15,12}},
+{ 757620, 4, {61,27,23,20}},
+{ 757656, 4, {619,17,9,8}},
+{ 757728, 4, {877,12,9,8}},
+{ 757800, 4, {421,15,12,10}},
+{ 757944, 4, {33,33,29,24}},
+{ 758340, 4, {383,15,12,11}},
+{ 758352, 4, {61,37,21,16}},
+{ 758640, 4, {109,29,16,15}},
+{ 758664, 4, {257,41,9,8}},
+{ 758700, 4, {281,15,15,12}},
+{ 758808, 4, {1171,9,9,8}},
+{ 758880, 4, {34,31,30,24}},
+{ 758952, 4, {127,83,9,8}},
+{ 759000, 4, {40,33,25,23}},
+{ 759096, 4, {811,13,9,8}},
+{ 759240, 4, {38,37,27,20}},
+{ 759360, 4, {113,21,20,16}},
+{ 759375, 4, {45,27,25,25}},
+{ 759384, 4, {199,53,9,8}},
+{ 759600, 4, {211,16,15,15}},
+{ 759744, 4, {1319,9,8,8}},
+{ 759780, 4, {67,27,21,20}},
+{ 759816, 4, {173,61,9,8}},
+{ 759888, 4, {1759,9,8,6}},
+{ 760000, 4, {38,32,25,25}},
+{ 760140, 4, {103,41,15,12}},
+{ 760320, 4, {33,32,30,24}},
+{ 760368, 4, {73,31,21,16}},
+{ 760392, 4, {179,59,9,8}},
+{ 760608, 4, {139,19,18,16}},
+{ 760725, 4, {35,35,27,23}},
+{ 760800, 4, {317,16,15,10}},
+{ 760896, 4, {1321,9,8,8}},
+{ 760950, 4, {89,25,19,18}},
+{ 761040, 4, {151,21,16,15}},
+{ 761112, 4, {33,31,31,24}},
+{ 761184, 4, {881,12,9,8}},
+{ 761250, 4, {35,30,29,25}},
+{ 761256, 4, {109,97,9,8}},
+{ 761292, 4, {53,28,27,19}},
+{ 761376, 4, {103,22,21,16}},
+{ 761400, 4, {47,27,25,24}},
+{ 761520, 4, {167,19,16,15}},
+{ 761544, 4, {1511,9,8,7}},
+{ 761600, 4, {34,32,28,25}},
+{ 761670, 4, {35,31,27,26}},
+{ 761688, 4, {149,71,9,8}},
+{ 761904, 4, {37,33,26,24}},
+{ 761940, 4, {83,27,20,17}},
+{ 761976, 4, {557,19,9,8}},
+{ 762048, 4, {36,28,28,27}},
+{ 762300, 4, {33,33,28,25}},
+{ 762480, 4, {353,15,12,12}},
+{ 762552, 4, {89,24,21,17}},
+{ 762600, 4, {41,31,25,24}},
+{ 762660, 4, {223,19,15,12}},
+{ 762720, 4, {227,16,15,14}},
+{ 762750, 4, {113,25,18,15}},
+{ 762912, 4, {883,12,9,8}},
+{ 763056, 4, {757,14,9,8}},
+{ 763140, 4, {79,23,21,20}},
+{ 763200, 4, {53,25,24,24}},
+{ 763344, 4, {38,31,27,24}},
+{ 763416, 4, {461,23,9,8}},
+{ 763425, 4, {39,29,27,25}},
+{ 763560, 4, {101,21,20,18}},
+{ 763776, 4, {34,32,27,26}},
+{ 763800, 4, {67,25,24,19}},
+{ 763840, 4, {35,32,31,22}},
+{ 763848, 4, {103,103,9,8}},
+{ 763920, 4, {1061,10,9,8}},
+{ 763980, 4, {107,21,20,17}},
+{ 764100, 4, {283,15,15,12}},
+{ 764160, 4, {199,16,16,15}},
+{ 764280, 4, {193,22,15,12}},
+{ 764352, 4, {1327,9,8,8}},
+{ 764400, 4, {35,30,28,26}},
+{ 764460, 4, {137,31,15,12}},
+{ 764568, 4, {41,37,24,21}},
+{ 764640, 4, {59,27,24,20}},
+{ 765072, 4, {36,33,28,23}},
+{ 765288, 4, {1181,9,9,8}},
+{ 765360, 4, {1063,10,9,8}},
+{ 765450, 4, {35,30,27,27}},
+{ 765600, 4, {33,32,29,25}},
+{ 765744, 4, {53,43,21,16}},
+{ 765864, 4, {967,11,9,8}},
+{ 766080, 4, {38,30,28,24}},
+{ 766296, 4, {367,29,9,8}},
+{ 766320, 4, {103,31,16,15}},
+{ 766368, 4, {887,12,9,8}},
+{ 766500, 4, {73,25,21,20}},
+{ 766584, 4, {39,28,27,26}},
+{ 766656, 4, {33,33,32,22}},
+{ 766728, 4, {463,23,9,8}},
+{ 766752, 4, {163,21,16,14}},
+{ 766800, 4, {71,27,20,20}},
+{ 766920, 4, {83,22,21,20}},
+{ 767088, 4, {761,14,9,8}},
+{ 767232, 4, {37,32,27,24}},
+{ 767280, 4, {139,23,16,15}},
+{ 767340, 4, {35,29,28,27}},
+{ 767520, 4, {41,30,26,24}},
+{ 767592, 4, {1523,9,8,7}},
+{ 767664, 4, {1777,9,8,6}},
+{ 767880, 4, {79,27,20,18}},
+{ 768000, 4, {32,32,30,25}},
+{ 768060, 4, {251,17,15,12}},
+{ 768096, 4, {127,21,18,16}},
+{ 768168, 4, {227,47,9,8}},
+{ 768180, 4, {59,31,21,20}},
+{ 768384, 4, {36,32,29,23}},
+{ 768456, 4, {821,13,9,8}},
+{ 768600, 4, {61,25,24,21}},
+{ 768672, 4, {157,18,17,16}},
+{ 768768, 4, {33,32,28,26}},
+{ 768800, 4, {32,31,31,25}},
+{ 768825, 4, {67,27,25,17}},
+{ 768888, 4, {181,59,9,8}},
+{ 769032, 4, {971,11,9,8}},
+{ 769104, 4, {109,21,21,16}},
+{ 769176, 4, {1187,9,9,8}},
+{ 769230, 4, {37,35,27,22}},
+{ 769440, 4, {229,16,15,14}},
+{ 769500, 4, {38,30,27,25}},
+{ 769536, 4, {167,18,16,16}},
+{ 769600, 4, {37,32,26,25}},
+{ 769680, 4, {1069,10,9,8}},
+{ 769776, 4, {79,29,21,16}},
+{ 769824, 4, {33,32,27,27}},
+{ 769950, 4, {59,29,25,18}},
+{ 770000, 4, {40,35,25,22}},
+{ 770112, 4, {191,18,16,14}},
+{ 770184, 4, {563,19,9,8}},
+{ 770220, 4, {389,15,12,11}},
+{ 770256, 4, {1783,9,8,6}},
+{ 770280, 4, {131,21,20,14}},
+{ 770328, 4, {823,13,9,8}},
+{ 770472, 4, {41,29,27,24}},
+{ 770688, 4, {223,18,16,12}},
+{ 771120, 4, {34,30,28,27}},
+{ 771264, 4, {103,26,18,16}},
+{ 771552, 4, {47,32,27,19}},
+{ 771624, 4, {1531,9,8,7}},
+{ 771750, 4, {35,35,30,21}},
+{ 771912, 4, {151,71,9,8}},
+{ 771984, 4, {1787,9,8,6}},
+{ 772065, 4, {43,35,27,19}},
+{ 772344, 4, {631,17,9,8}},
+{ 772416, 4, {149,18,18,16}},
+{ 772464, 4, {38,33,28,22}},
+{ 772560, 4, {37,30,29,24}},
+{ 772632, 4, {73,24,21,21}},
+{ 772650, 4, {101,25,18,17}},
+{ 772740, 4, {53,27,27,20}},
+{ 772800, 4, {35,32,30,23}},
+{ 772848, 4, {1789,9,8,6}},
+{ 773064, 4, {1193,9,9,8}},
+{ 773136, 4, {59,26,24,21}},
+{ 773280, 4, {179,18,16,15}},
+{ 773352, 4, {467,23,9,8}},
+{ 773388, 4, {33,31,28,27}},
+{ 773520, 4, {293,16,15,11}},
+{ 773640, 4, {307,15,14,12}},
+{ 773760, 4, {32,31,30,26}},
+{ 773784, 4, {977,11,9,8}},
+{ 773955, 4, {39,35,27,21}},
+{ 774000, 4, {43,30,25,24}},
+{ 774060, 4, {97,21,20,19}},
+{ 774072, 4, {827,13,9,8}},
+{ 774144, 4, {32,32,28,27}},
+{ 774225, 4, {37,31,27,25}},
+{ 774360, 4, {239,18,15,12}},
+{ 774504, 4, {347,31,9,8}},
+{ 774540, 4, {331,15,13,12}},
+{ 774648, 4, {53,29,24,21}},
+{ 774720, 4, {269,16,15,12}},
+{ 774900, 4, {41,28,27,25}},
+{ 774936, 4, {229,47,9,8}},
+{ 775152, 4, {769,14,9,8}},
+{ 775200, 4, {38,34,25,24}},
+{ 775260, 4, {73,59,15,12}},
+{ 775320, 4, {71,26,21,20}},
+{ 775440, 4, {359,15,12,12}},
+{ 775620, 4, {139,31,15,12}},
+{ 775656, 4, {38,28,27,27}},
+{ 775800, 4, {431,15,12,10}},
+{ 775920, 4, {61,53,16,15}},
+{ 775944, 4, {829,13,9,8}},
+{ 775980, 4, {479,15,12,9}},
+{ 776160, 4, {33,30,28,28}},
+{ 776250, 4, {46,27,25,25}},
+{ 776340, 4, {227,19,15,12}},
+{ 776376, 4, {263,41,9,8}},
+{ 776475, 4, {45,35,29,17}},
+{ 776580, 4, {43,43,21,20}},
+{ 776664, 4, {67,24,23,21}},
+{ 776736, 4, {32,31,29,27}},
+{ 777084, 4, {33,29,29,28}},
+{ 777096, 4, {251,43,9,8}},
+{ 777216, 4, {33,32,32,23}},
+{ 777360, 4, {79,41,16,15}},
+{ 777504, 4, {89,26,21,16}},
+{ 777600, 4, {32,30,30,27}},
+{ 777672, 4, {1543,9,8,7}},
+{ 777780, 4, {149,29,15,12}},
+{ 777888, 4, {73,37,18,16}},
+{ 778032, 4, {1801,9,8,6}},
+{ 778104, 4, {107,101,9,8}},
+{ 778176, 4, {193,18,16,14}},
+{ 778248, 4, {1201,9,9,8}},
+{ 778260, 4, {109,21,20,17}},
+{ 778320, 4, {47,30,24,23}},
+{ 778392, 4, {569,19,9,8}},
+{ 778536, 4, {983,11,9,8}},
+{ 778596, 4, {39,31,28,23}},
+{ 778680, 4, {103,21,20,18}},
+{ 778752, 4, {36,32,26,26}},
+{ 778800, 4, {59,25,24,22}},
+{ 778824, 4, {373,29,9,8}},
+{ 778968, 4, {349,31,9,8}},
+{ 779184, 4, {773,14,9,8}},
+{ 779247, 4, {49,31,27,19}},
+{ 779256, 4, {137,79,9,8}},
+{ 779280, 4, {191,17,16,15}},
+{ 779328, 4, {41,33,24,24}},
+{ 779400, 4, {433,15,12,10}},
+{ 779520, 4, {32,30,29,28}},
+{ 779580, 4, {71,61,15,12}},
+{ 779625, 4, {35,33,27,25}},
+{ 779688, 4, {39,34,28,21}},
+{ 779760, 4, {38,38,27,20}},
+{ 780000, 4, {39,32,25,25}},
+{ 780120, 4, {197,22,15,12}},
+{ 780192, 4, {43,28,27,24}},
+{ 780300, 4, {34,34,27,25}},
+{ 780480, 4, {271,16,15,12}},
+{ 780528, 4, {101,23,21,16}},
+{ 780552, 4, {293,37,9,8}},
+{ 780696, 4, {1549,9,8,7}},
+{ 780840, 4, {241,18,15,12}},
+{ 780864, 4, {83,28,21,16}},
+{ 780912, 4, {34,33,29,24}},
+{ 781056, 4, {113,24,18,16}},
+{ 781128, 4, {571,19,9,8}},
+{ 781440, 4, {37,32,30,22}},
+{ 781488, 4, {67,27,24,18}},
+{ 781704, 4, {47,28,27,22}},
+{ 781740, 4, {101,43,15,12}},
+{ 781872, 4, {179,21,16,13}},
+{ 781920, 4, {181,18,16,15}},
+{ 782100, 4, {79,25,22,18}},
+{ 782208, 4, {97,24,21,16}},
+{ 782325, 4, {61,27,25,19}},
+{ 782352, 4, {1811,9,8,6}},
+{ 782400, 4, {163,20,16,15}},
+{ 782460, 4, {36,35,27,23}},
+{ 782496, 4, {38,33,26,24}},
+{ 782544, 4, {137,21,17,16}},
+{ 782550, 4, {47,37,25,18}},
+{ 782640, 4, {1087,10,9,8}},
+{ 782712, 4, {1553,9,8,7}},
+{ 782784, 4, {151,18,18,16}},
+{ 782856, 4, {131,83,9,8}},
+{ 782880, 4, {233,16,15,14}},
+{ 783120, 4, {251,16,15,13}},
+{ 783144, 4, {149,73,9,8}},
+{ 783180, 4, {229,19,15,12}},
+{ 783216, 4, {37,28,28,27}},
+{ 783288, 4, {43,33,24,23}},
+{ 783360, 4, {34,32,30,24}},
+{ 783648, 4, {907,12,9,8}},
+{ 783675, 4, {43,27,27,25}},
+{ 783720, 4, {311,15,14,12}},
+{ 783900, 4, {67,26,25,18}},
+{ 783936, 4, {1361,9,8,8}},
+{ 784000, 4, {35,32,28,25}},
+{ 784080, 4, {33,33,30,24}},
+{ 784350, 4, {83,25,21,18}},
+{ 784512, 4, {227,18,16,12}},
+{ 784584, 4, {641,17,9,8}},
+{ 784872, 4, {991,11,9,8}},
+{ 784980, 4, {89,21,21,20}},
+{ 785232, 4, {41,38,24,21}},
+{ 785304, 4, {839,13,9,8}},
+{ 785400, 4, {34,33,28,25}},
+{ 785520, 4, {1091,10,9,8}},
+{ 785568, 4, {167,21,16,14}},
+{ 785664, 4, {33,32,31,24}},
+{ 785700, 4, {97,25,18,18}},
+{ 785736, 4, {1559,9,8,7}},
+{ 786024, 4, {1213,9,9,8}},
+{ 786060, 4, {397,15,12,11}},
+{ 786168, 4, {179,61,9,8}},
+{ 786240, 4, {35,32,27,26}},
+{ 786312, 4, {163,67,9,8}},
+{ 786324, 4, {37,33,28,23}},
+{ 786420, 4, {257,17,15,12}},
+{ 786480, 4, {113,29,16,15}},
+{ 786720, 4, {149,22,16,15}},
+{ 786780, 4, {47,31,27,20}},
+{ 786960, 4, {1093,10,9,8}},
+{ 787032, 4, {643,17,9,8}},
+{ 787050, 4, {53,27,25,22}},
+{ 787104, 4, {911,12,9,8}},
+{ 787200, 4, {41,32,25,24}},
+{ 787248, 4, {71,24,22,21}},
+{ 787392, 4, {1367,9,8,8}},
+{ 787440, 4, {193,17,16,15}},
+{ 787500, 4, {35,30,30,25}},
+{ 787536, 4, {1823,9,8,6}},
+{ 787896, 4, {353,31,9,8}},
+{ 787920, 4, {67,28,21,20}},
+{ 787950, 4, {103,25,18,17}},
+{ 787968, 4, {38,32,27,24}},
+{ 788040, 4, {199,22,15,12}},
+{ 788220, 4, {151,29,15,12}},
+{ 788400, 4, {73,27,20,20}},
+{ 788472, 4, {233,47,9,8}},
+{ 788480, 4, {35,32,32,22}},
+{ 788580, 4, {337,15,13,12}},
+{ 788616, 4, {1217,9,9,8}},
+{ 788760, 4, {313,15,14,12}},
+{ 788800, 4, {34,32,29,25}},
+{ 788880, 4, {173,19,16,15}},
+{ 788940, 4, {487,15,12,9}},
+{ 789120, 4, {137,20,18,16}},
+{ 789192, 4, {113,97,9,8}},
+{ 789264, 4, {36,29,28,27}},
+{ 789336, 4, {577,19,9,8}},
+{ 789360, 4, {40,33,26,23}},
+{ 789480, 4, {43,34,27,20}},
+{ 789600, 4, {47,28,25,24}},
+{ 789624, 4, {997,11,9,8}},
+{ 789660, 4, {107,41,15,12}},
+{ 789750, 4, {39,30,27,25}},
+{ 789768, 4, {1567,9,8,7}},
+{ 789840, 4, {1097,10,9,8}},
+{ 789888, 4, {34,33,32,22}},
+{ 789912, 4, {53,27,24,23}},
+{ 789984, 4, {211,18,16,13}},
+{ 790020, 4, {38,35,27,22}},
+{ 790200, 4, {439,15,12,10}},
+{ 790320, 4, {89,37,16,15}},
+{ 790400, 4, {38,32,26,25}},
+{ 790560, 4, {61,27,24,20}},
+{ 790608, 4, {181,21,16,13}},
+{ 790632, 4, {139,79,9,8}},
+{ 790740, 4, {191,23,15,12}},
+{ 790848, 4, {1373,9,8,8}},
+{ 790944, 4, {107,22,21,16}},
+{ 790965, 4, {35,31,27,27}},
+{ 790992, 4, {1831,9,8,6}},
+{ 791100, 4, {293,15,15,12}},
+{ 791136, 4, {67,41,18,16}},
+{ 791200, 4, {43,32,25,23}},
+{ 791208, 4, {37,33,27,24}},
+{ 791280, 4, {157,21,16,15}},
+{ 791352, 4, {379,29,9,8}},
+{ 791424, 4, {229,18,16,12}},
+{ 791700, 4, {35,30,29,26}},
+{ 791775, 4, {51,27,25,23}},
+{ 791784, 4, {1571,9,8,7}},
+{ 791820, 4, {83,53,15,12}},
+{ 791856, 4, {47,27,26,24}},
+{ 791928, 4, {647,17,9,8}},
+{ 792000, 4, {33,32,30,25}},
+{ 792288, 4, {131,21,18,16}},
+{ 792396, 4, {36,33,29,23}},
+{ 792480, 4, {127,26,16,15}},
+{ 792504, 4, {1223,9,9,8}},
+{ 792648, 4, {109,101,9,8}},
+{ 792720, 4, {367,15,12,12}},
+{ 792792, 4, {33,33,28,26}},
+{ 793125, 4, {47,27,25,25}},
+{ 793152, 4, {34,32,27,27}},
+{ 793224, 4, {479,23,9,8}},
+{ 793296, 4, {787,14,9,8}},
+{ 793350, 4, {43,41,25,18}},
+{ 793440, 4, {38,30,29,24}},
+{ 793512, 4, {107,103,9,8}},
+{ 793600, 4, {32,32,31,25}},
+{ 793656, 4, {151,73,9,8}},
+{ 793800, 4, {35,30,28,27}},
+{ 793968, 4, {139,21,17,16}},
+{ 793980, 4, {401,15,12,11}},
+{ 794016, 4, {919,12,9,8}},
+{ 794088, 4, {269,41,9,8}},
+{ 794160, 4, {1103,10,9,8}},
+{ 794220, 4, {61,31,21,20}},
+{ 794304, 4, {197,18,16,14}},
+{ 794400, 4, {331,16,15,10}},
+{ 794592, 4, {89,31,18,16}},
+{ 794745, 4, {35,29,29,27}},
+{ 794808, 4, {83,24,21,19}},
+{ 794880, 4, {36,32,30,23}},
+{ 794952, 4, {181,61,9,8}},
+{ 794976, 4, {39,28,28,26}},
+{ 795000, 4, {53,25,25,24}},
+{ 795150, 4, {38,31,27,25}},
+{ 795420, 4, {491,15,12,9}},
+{ 795456, 4, {1381,9,8,8}},
+{ 795564, 4, {41,33,28,21}},
+{ 795672, 4, {257,43,9,8}},
+{ 795816, 4, {1579,9,8,7}},
+{ 795960, 4, {67,27,22,20}},
+{ 795984, 4, {103,23,21,16}},
+{ 796005, 4, {49,45,19,19}},
+{ 796050, 4, {61,29,25,18}},
+{ 796068, 4, {39,28,27,27}},
+{ 796080, 4, {107,31,16,15}},
+{ 796224, 4, {33,32,29,26}},
+{ 796320, 4, {79,24,21,20}},
+{ 796392, 4, {1229,9,9,8}},
+{ 796500, 4, {59,27,25,20}},
+{ 796824, 4, {34,31,28,27}},
+{ 796860, 4, {233,19,15,12}},
+{ 796950, 4, {35,33,30,23}},
+{ 797040, 4, {41,30,27,24}},
+{ 797160, 4, {73,26,21,20}},
+{ 797184, 4, {173,18,16,16}},
+{ 797220, 4, {103,43,15,12}},
+{ 797280, 4, {151,22,16,15}},
+{ 797328, 4, {113,21,21,16}},
+{ 797400, 4, {443,15,12,10}},
+{ 797544, 4, {53,33,24,19}},
+{ 797688, 4, {1231,9,9,8}},
+{ 797760, 4, {277,16,15,12}},
+{ 797832, 4, {1583,9,8,7}},
+{ 797904, 4, {1847,9,8,6}},
+{ 798048, 4, {163,18,17,16}},
+{ 798336, 4, {33,32,28,27}},
+{ 798408, 4, {853,13,9,8}},
+{ 798480, 4, {1109,10,9,8}},
+{ 798560, 4, {35,32,31,23}},
+{ 798624, 4, {59,47,18,16}},
+{ 798720, 4, {32,32,30,26}},
+{ 798750, 4, {71,25,25,18}},
+{ 798840, 4, {317,15,14,12}},
+{ 799020, 4, {193,23,15,12}},
+{ 799128, 4, {1009,11,9,8}},
+{ 799200, 4, {37,32,27,25}},
+{ 799272, 4, {653,17,9,8}},
+{ 799344, 4, {61,26,24,21}},
+{ 799704, 4, {383,29,9,8}},
+{ 799800, 4, {43,31,25,24}},
+{ 799875, 4, {79,27,25,15}},
+{ 799992, 4, {271,41,9,8}},
+{ 800000, 4, {40,32,25,25}},
+{ 800100, 4, {127,21,20,15}},
+{ 800640, 4, {139,20,18,16}},
+{ 800800, 4, {40,35,26,22}},
+{ 800880, 4, {71,47,16,15}},
+{ 801000, 4, {89,25,20,18}},
+{ 801024, 4, {149,21,16,16}},
+{ 801216, 4, {107,26,18,16}},
+{ 801288, 4, {359,31,9,8}},
+{ 801360, 4, {53,30,24,21}},
+{ 801504, 4, {33,33,32,23}},
+{ 801540, 4, {73,61,15,12}},
+{ 801576, 4, {1237,9,9,8}},
+{ 801600, 4, {167,20,16,15}},
+{ 801780, 4, {83,23,21,20}},
+{ 801792, 4, {32,32,29,27}},
+{ 801840, 4, {257,16,15,13}},
+{ 801864, 4, {43,37,24,21}},
+{ 802032, 4, {33,31,28,28}},
+{ 802152, 4, {857,13,9,8}},
+{ 802296, 4, {1013,11,9,8}},
+{ 802368, 4, {199,18,16,14}},
+{ 802560, 4, {38,32,30,22}},
+{ 802575, 4, {41,29,27,25}},
+{ 802584, 4, {157,71,9,8}},
+{ 802620, 4, {39,35,28,21}},
+{ 802656, 4, {929,12,9,8}},
+{ 802800, 4, {223,16,15,15}},
+{ 802872, 4, {59,27,24,21}},
+{ 803016, 4, {587,19,9,8}},
+{ 803040, 4, {239,16,15,14}},
+{ 803088, 4, {36,33,26,26}},
+{ 803250, 4, {35,34,27,25}},
+{ 803376, 4, {797,14,9,8}},
+{ 803520, 4, {32,31,30,27}},
+{ 803712, 4, {39,32,28,23}},
+{ 803760, 4, {197,17,16,15}},
+{ 803880, 4, {33,30,29,28}},
+{ 803952, 4, {1861,9,8,6}},
+{ 804000, 4, {67,25,24,20}},
+{ 804024, 4, {859,13,9,8}},
+{ 804195, 4, {37,35,27,23}},
+{ 804240, 4, {1117,10,9,8}},
+{ 804384, 4, {38,28,28,27}},
+{ 804420, 4, {109,41,15,12}},
+{ 804672, 4, {127,22,18,16}},
+{ 804780, 4, {263,17,15,12}},
+{ 804888, 4, {1597,9,8,7}},
+{ 804960, 4, {43,30,26,24}},
+{ 805000, 4, {40,35,25,23}},
+{ 805140, 4, {71,27,21,20}},
+{ 805176, 4, {211,53,9,8}},
+{ 805200, 4, {61,25,24,22}},
+{ 805248, 4, {233,18,16,12}},
+{ 805392, 4, {47,34,24,21}},
+{ 805560, 4, {137,21,20,14}},
+{ 805608, 4, {167,67,9,8}},
+{ 805680, 4, {373,15,12,12}},
+{ 805707, 4, {49,29,27,21}},
+{ 805728, 4, {109,22,21,16}},
+{ 805800, 4, {79,25,24,17}},
+{ 805824, 4, {1399,9,8,8}},
+{ 805896, 4, {41,28,27,26}},
+{ 805980, 4, {101,21,20,19}},
+{ 806400, 4, {32,30,30,28}},
+{ 806472, 4, {487,23,9,8}},
+{ 806544, 4, {1867,9,8,6}},
+{ 806616, 4, {659,17,9,8}},
+{ 806760, 4, {83,27,20,18}},
+{ 806820, 4, {113,21,20,17}},
+{ 806904, 4, {1601,9,8,7}},
+{ 807048, 4, {1019,11,9,8}},
+{ 807120, 4, {59,30,24,19}},
+{ 807360, 4, {32,30,29,29}},
+{ 807408, 4, {89,24,21,18}},
+{ 807576, 4, {38,33,28,23}},
+{ 807768, 4, {863,13,9,8}},
+{ 807840, 4, {34,33,30,24}},
+{ 807975, 4, {45,35,27,19}},
+{ 808020, 4, {67,67,15,12}},
+{ 808056, 4, {43,29,27,24}},
+{ 808200, 4, {449,15,12,10}},
+{ 808272, 4, {1871,9,8,6}},
+{ 808344, 4, {109,103,9,8}},
+{ 808380, 4, {499,15,12,9}},
+{ 808500, 4, {35,33,28,25}},
+{ 808560, 4, {1123,10,9,8}},
+{ 808632, 4, {1021,11,9,8}},
+{ 808704, 4, {36,32,27,26}},
+{ 808752, 4, {83,29,21,16}},
+{ 808776, 4, {239,47,9,8}},
+{ 808800, 4, {337,16,15,10}},
+{ 808920, 4, {107,21,20,18}},
+{ 808992, 4, {53,53,18,16}},
+{ 809064, 4, {661,17,9,8}},
+{ 809136, 4, {1873,9,8,6}},
+{ 809280, 4, {281,16,15,12}},
+{ 809340, 4, {47,41,21,20}},
+{ 809352, 4, {1249,9,9,8}},
+{ 809400, 4, {71,25,24,19}},
+{ 809424, 4, {73,24,22,21}},
+{ 809568, 4, {937,12,9,8}},
+{ 809760, 4, {241,16,15,14}},
+{ 809820, 4, {409,15,12,11}},
+{ 809928, 4, {1607,9,8,7}},
+{ 810144, 4, {97,29,18,16}},
+{ 810216, 4, {33,33,31,24}},
+{ 810240, 4, {211,16,16,15}},
+{ 810432, 4, {67,24,24,21}},
+{ 810480, 4, {307,16,15,11}},
+{ 810540, 4, {79,27,20,19}},
+{ 810768, 4, {127,21,19,16}},
+{ 810810, 4, {35,33,27,26}},
+{ 810864, 4, {1877,9,8,6}},
+{ 810900, 4, {53,34,25,18}},
+{ 810936, 4, {1609,9,8,7}},
+{ 810960, 4, {109,31,16,15}},
+{ 811008, 4, {33,32,32,24}},
+{ 811188, 4, {37,29,28,27}},
+{ 811224, 4, {593,19,9,8}},
+{ 811368, 4, {191,59,9,8}},
+{ 811440, 4, {36,35,28,23}},
+{ 811584, 4, {1409,9,8,8}},
+{ 811728, 4, {1879,9,8,6}},
+{ 811776, 4, {151,21,16,16}},
+{ 811800, 4, {41,33,25,24}},
+{ 811920, 4, {199,17,16,15}},
+{ 811980, 4, {347,15,13,12}},
+{ 812000, 4, {35,32,29,25}},
+{ 812160, 4, {47,30,24,24}},
+{ 812232, 4, {389,29,9,8}},
+{ 812592, 4, {38,33,27,24}},
+{ 812700, 4, {43,28,27,25}},
+{ 812784, 4, {59,41,21,16}},
+{ 812880, 4, {1129,10,9,8}},
+{ 812952, 4, {1613,9,8,7}},
+{ 813024, 4, {941,12,9,8}},
+{ 813096, 4, {491,23,9,8}},
+{ 813120, 4, {35,33,32,22}},
+{ 813240, 4, {251,18,15,12}},
+{ 813645, 4, {41,35,27,21}},
+{ 813750, 4, {35,31,30,25}},
+{ 813792, 4, {173,21,16,14}},
+{ 813816, 4, {127,89,9,8}},
+{ 813888, 4, {157,18,18,16}},
+{ 814050, 4, {67,27,25,18}},
+{ 814200, 4, {59,25,24,23}},
+{ 814248, 4, {263,43,9,8}},
+{ 814464, 4, {101,24,21,16}},
+{ 814725, 4, {71,27,25,17}},
+{ 814752, 4, {41,32,27,23}},
+{ 814800, 4, {97,21,20,20}},
+{ 814860, 4, {503,15,12,9}},
+{ 814968, 4, {42,33,28,21}},
+{ 815040, 4, {283,16,15,12}},
+{ 815184, 4, {37,34,27,24}},
+{ 815280, 4, {79,43,16,15}},
+{ 815328, 4, {149,19,18,16}},
+{ 815360, 4, {35,32,28,26}},
+{ 815472, 4, {809,14,9,8}},
+{ 815544, 4, {241,47,9,8}},
+{ 815580, 4, {197,23,15,12}},
+{ 815832, 4, {1259,9,9,8}},
+{ 815850, 4, {37,35,30,21}},
+{ 815976, 4, {1619,9,8,7}},
+{ 816000, 4, {34,32,30,25}},
+{ 816048, 4, {1889,9,8,6}},
+{ 816060, 4, {67,29,21,20}},
+{ 816075, 4, {39,31,27,25}},
+{ 816192, 4, {109,26,18,16}},
+{ 816240, 4, {179,19,16,15}},
+{ 816480, 4, {35,32,27,27}},
+{ 816552, 4, {1031,11,9,8}},
+{ 816660, 4, {349,15,13,12}},
+{ 816720, 4, {83,41,16,15}},
+{ 816816, 4, {34,33,28,26}},
+{ 816960, 4, {37,32,30,23}},
+{ 816984, 4, {1621,9,8,7}},
+{ 817020, 4, {89,27,20,17}},
+{ 817200, 4, {227,16,15,15}},
+{ 817236, 4, {47,28,27,23}},
+{ 817320, 4, {139,21,20,14}},
+{ 817344, 4, {43,33,24,24}},
+{ 817380, 4, {239,19,15,12}},
+{ 817440, 4, {131,26,16,15}},
+{ 817488, 4, {811,14,9,8}},
+{ 817632, 4, {167,18,17,16}},
+{ 817650, 4, {79,25,23,18}},
+{ 817704, 4, {277,41,9,8}},
+{ 817800, 4, {47,29,25,24}},
+{ 817848, 4, {307,37,9,8}},
+{ 818100, 4, {101,25,18,18}},
+{ 818136, 4, {1033,11,9,8}},
+{ 818208, 4, {947,12,9,8}},
+{ 818400, 4, {33,32,31,25}},
+{ 818550, 4, {107,25,18,17}},
+{ 818640, 4, {379,15,12,12}},
+{ 818712, 4, {137,83,9,8}},
+{ 818928, 4, {47,33,24,22}},
+{ 819000, 4, {35,30,30,26}},
+{ 819144, 4, {367,31,9,8}},
+{ 819180, 4, {41,37,27,20}},
+{ 819200, 4, {32,32,32,25}},
+{ 819315, 4, {51,35,27,17}},
+{ 819432, 4, {599,19,9,8}},
+{ 819540, 4, {157,29,15,12}},
+{ 819648, 4, {1423,9,8,8}},
+{ 819720, 4, {36,33,30,23}},
+{ 819864, 4, {193,59,9,8}},
+{ 820000, 4, {41,32,25,25}},
+{ 820008, 4, {1627,9,8,7}},
+{ 820125, 4, {45,27,27,25}},
+{ 820260, 4, {35,31,28,27}},
+{ 820512, 4, {37,33,28,24}},
+{ 820560, 4, {263,16,15,13}},
+{ 820620, 4, {97,47,15,12}},
+{ 820800, 4, {38,32,27,25}},
+{ 820872, 4, {877,13,9,8}},
+{ 821040, 4, {311,16,15,11}},
+{ 821100, 4, {35,34,30,23}},
+{ 821232, 4, {1901,9,8,6}},
+{ 821250, 4, {73,25,25,18}},
+{ 821376, 4, {36,32,31,23}},
+{ 821400, 4, {37,37,25,24}},
+{ 821520, 4, {163,21,16,15}},
+{ 821583, 4, {49,27,27,23}},
+{ 821700, 4, {83,25,22,18}},
+{ 821736, 4, {113,101,9,8}},
+{ 821940, 4, {103,21,20,19}},
+{ 821952, 4, {1427,9,8,8}},
+{ 822150, 4, {35,30,29,27}},
+{ 822168, 4, {601,19,9,8}},
+{ 822312, 4, {47,27,27,24}},
+{ 822360, 4, {89,22,21,20}},
+{ 822480, 4, {149,23,16,15}},
+{ 822528, 4, {34,32,28,27}},
+{ 822600, 4, {457,15,12,10}},
+{ 822825, 4, {53,27,25,23}},
+{ 822864, 4, {79,31,21,16}},
+{ 822888, 4, {1039,11,9,8}},
+{ 823032, 4, {71,24,23,21}},
+{ 823050, 4, {59,31,25,18}},
+{ 823104, 4, {1429,9,8,8}},
+{ 823140, 4, {269,17,15,12}},
+{ 823200, 4, {35,30,28,28}},
+{ 823284, 4, {33,33,28,27}},
+{ 823368, 4, {39,29,28,26}},
+{ 823392, 4, {953,12,9,8}},
+{ 823440, 4, {73,47,16,15}},
+{ 823500, 4, {61,27,25,20}},
+{ 823536, 4, {43,38,24,21}},
+{ 823608, 4, {41,31,27,24}},
+{ 823620, 4, {53,37,21,20}},
+{ 823680, 4, {33,32,30,26}},
+{ 823752, 4, {673,17,9,8}},
+{ 823824, 4, {1907,9,8,6}},
+{ 823860, 4, {199,23,15,12}},
+{ 824040, 4, {109,21,20,18}},
+{ 824175, 4, {37,33,27,25}},
+{ 824220, 4, {241,19,15,12}},
+{ 824256, 4, {53,27,24,24}},
+{ 824320, 4, {35,32,32,23}},
+{ 824328, 4, {107,107,9,8}},
+{ 824400, 4, {229,16,15,15}},
+{ 824580, 4, {509,15,12,9}},
+{ 824616, 4, {881,13,9,8}},
+{ 824832, 4, {179,18,16,16}},
+{ 824850, 4, {47,27,26,25}},
+{ 824904, 4, {67,27,24,19}},
+{ 825000, 4, {40,33,25,25}},
+{ 825048, 4, {1637,9,8,7}},
+{ 825120, 4, {191,18,16,15}},
+{ 825192, 4, {157,73,9,8}},
+{ 825240, 4, {40,39,23,23}},
+{ 825300, 4, {131,21,20,15}},
+{ 825360, 4, {181,19,16,15}},
+{ 825408, 4, {1433,9,8,8}},
+{ 825552, 4, {39,28,28,27}},
+{ 825600, 4, {43,32,25,24}},
+{ 825696, 4, {61,47,18,16}},
+{ 825792, 4, {34,33,32,23}},
+{ 825840, 4, {37,31,30,24}},
+{ 825930, 4, {38,35,27,23}},
+{ 825984, 4, {239,18,16,12}},
+{ 826020, 4, {353,15,13,12}},
+{ 826272, 4, {151,19,18,16}},
+{ 826320, 4, {313,16,15,11}},
+{ 826344, 4, {499,23,9,8}},
+{ 826416, 4, {1913,9,8,6}},
+{ 826488, 4, {883,13,9,8}},
+{ 826560, 4, {41,30,28,24}},
+{ 826800, 4, {53,26,25,24}},
+{ 826848, 4, {33,32,29,27}},
+{ 826875, 4, {35,35,27,25}},
+{ 826896, 4, {107,23,21,16}},
+{ 827200, 4, {47,32,25,22}},
+{ 827280, 4, {383,15,12,12}},
+{ 827496, 4, {1277,9,9,8}},
+{ 827568, 4, {821,14,9,8}},
+{ 827820, 4, {73,27,21,20}},
+{ 827904, 4, {33,32,28,28}},
+{ 828072, 4, {53,31,24,21}},
+{ 828144, 4, {71,27,24,18}},
+{ 828180, 4, {107,43,15,12}},
+{ 828360, 4, {59,27,26,20}},
+{ 828504, 4, {311,37,9,8}},
+{ 828576, 4, {137,21,18,16}},
+{ 828648, 4, {677,17,9,8}},
+{ 828720, 4, {1151,10,9,8}},
+{ 828792, 4, {1279,9,9,8}},
+{ 828800, 4, {37,32,28,25}},
+{ 828828, 4, {39,33,28,23}},
+{ 828864, 4, {1439,9,8,8}},
+{ 828900, 4, {307,15,15,12}},
+{ 828936, 4, {397,29,9,8}},
+{ 828960, 4, {157,22,16,15}},
+{ 829260, 4, {271,17,15,12}},
+{ 829350, 4, {97,25,19,18}},
+{ 829440, 4, {32,32,30,27}},
+{ 829500, 4, {79,25,21,20}},
+{ 829512, 4, {281,41,9,8}},
+{ 829521, 4, {49,33,27,19}},
+{ 829584, 4, {823,14,9,8}},
+{ 829620, 4, {419,15,12,11}},
+{ 829728, 4, {67,43,18,16}},
+{ 829800, 4, {461,15,12,10}},
+{ 829980, 4, {53,29,27,20}},
+{ 830016, 4, {131,22,18,16}},
+{ 830025, 4, {45,35,31,17}},
+{ 830088, 4, {61,27,24,21}},
+{ 830160, 4, {1153,10,9,8}},
+{ 830232, 4, {887,13,9,8}},
+{ 830250, 4, {41,30,27,25}},
+{ 830304, 4, {32,31,31,27}},
+{ 830376, 4, {607,19,9,8}},
+{ 830400, 4, {173,20,16,15}},
+{ 830592, 4, {103,24,21,16}},
+{ 830664, 4, {139,83,9,8}},
+{ 830676, 4, {33,31,29,28}},
+{ 830700, 4, {71,26,25,18}},
+{ 830808, 4, {1049,11,9,8}},
+{ 831096, 4, {97,24,21,17}},
+{ 831168, 4, {37,32,27,26}},
+{ 831384, 4, {1283,9,9,8}},
+{ 831420, 4, {149,31,15,12}},
+{ 831600, 4, {33,30,30,28}},
+{ 832000, 4, {40,32,26,25}},
+{ 832050, 4, {43,43,25,18}},
+{ 832140, 4, {67,27,23,20}},
+{ 832200, 4, {73,25,24,19}},
+{ 832320, 4, {34,34,30,24}},
+{ 832392, 4, {1051,11,9,8}},
+{ 832416, 4, {39,32,29,23}},
+{ 832536, 4, {373,31,9,8}},
+{ 832608, 4, {59,28,24,21}},
+{ 832680, 4, {257,18,15,12}},
+{ 832800, 4, {347,16,15,10}},
+{ 832824, 4, {269,43,9,8}},
+{ 832896, 4, {241,18,16,12}},
+{ 832944, 4, {67,37,21,16}},
+{ 832968, 4, {503,23,9,8}},
+{ 833112, 4, {38,29,28,27}},
+{ 833175, 4, {45,35,23,23}},
+{ 833256, 4, {163,71,9,8}},
+{ 833280, 4, {32,31,30,28}},
+{ 833400, 4, {463,15,12,10}},
+{ 833448, 4, {41,33,28,22}},
+{ 833472, 4, {1447,9,8,8}},
+{ 833490, 4, {42,35,27,21}},
+{ 833520, 4, {151,23,16,15}},
+{ 833580, 4, {421,15,12,11}},
+{ 833616, 4, {827,14,9,8}},
+{ 833760, 4, {193,18,16,15}},
+{ 833832, 4, {313,37,9,8}},
+{ 833850, 4, {109,25,18,17}},
+{ 833940, 4, {113,41,15,12}},
+{ 833976, 4, {36,33,27,26}},
+{ 834048, 4, {181,18,16,16}},
+{ 834120, 4, {331,15,14,12}},
+{ 834192, 4, {1931,9,8,6}},
+{ 834288, 4, {191,21,16,13}},
+{ 834300, 4, {103,25,18,18}},
+{ 834372, 4, {43,33,28,21}},
+{ 834480, 4, {61,30,24,19}},
+{ 834552, 4, {173,67,9,8}},
+{ 834768, 4, {34,33,31,24}},
+{ 834912, 4, {223,18,16,13}},
+{ 834960, 4, {71,28,21,20}},
+{ 835056, 4, {1933,9,8,6}},
+{ 835128, 4, {1657,9,8,7}},
+{ 835200, 4, {32,30,30,29}},
+{ 835272, 4, {1289,9,9,8}},
+{ 835296, 4, {113,22,21,16}},
+{ 835380, 4, {35,34,27,26}},
+{ 835416, 4, {283,41,9,8}},
+{ 835440, 4, {59,59,16,15}},
+{ 835488, 4, {967,12,9,8}},
+{ 835560, 4, {211,22,15,12}},
+{ 835632, 4, {829,14,9,8}},
+{ 835776, 4, {1451,9,8,8}},
+{ 835920, 4, {43,30,27,24}},
+{ 835992, 4, {683,17,9,8}},
+{ 836136, 4, {79,24,21,21}},
+{ 836304, 4, {131,21,19,16}},
+{ 836325, 4, {59,27,25,21}},
+{ 836352, 4, {33,33,32,24}},
+{ 836400, 4, {41,34,25,24}},
+{ 836568, 4, {1291,9,9,8}},
+{ 836640, 4, {83,24,21,20}},
+{ 836856, 4, {197,59,9,8}},
+{ 836880, 4, {317,16,15,11}},
+{ 836892, 4, {41,28,27,27}},
+{ 836928, 4, {1453,9,8,8}},
+{ 836976, 4, {53,47,21,16}},
+{ 837200, 4, {40,35,26,23}},
+{ 837216, 4, {38,34,27,24}},
+{ 837288, 4, {401,29,9,8}},
+{ 837312, 4, {89,28,21,16}},
+{ 837360, 4, {1163,10,9,8}},
+{ 837600, 4, {349,16,15,10}},
+{ 837675, 4, {73,27,25,17}},
+{ 837760, 4, {35,34,32,22}},
+{ 837900, 4, {38,35,30,21}},
+{ 838008, 4, {113,103,9,8}},
+{ 838152, 4, {1663,9,8,7}},
+{ 838350, 4, {46,27,27,25}},
+{ 838368, 4, {71,41,18,16}},
+{ 838584, 4, {613,19,9,8}},
+{ 838656, 4, {36,32,28,26}},
+{ 838800, 4, {233,16,15,15}},
+{ 838872, 4, {191,61,9,8}},
+{ 838944, 4, {971,12,9,8}},
+{ 838980, 4, {79,59,15,12}},
+{ 839016, 4, {271,43,9,8}},
+{ 839040, 4, {38,32,30,23}},
+{ 839160, 4, {37,30,28,27}},
+{ 839280, 4, {269,16,15,13}},
+{ 839448, 4, {131,89,9,8}},
+{ 839520, 4, {53,30,24,22}},
+{ 839592, 4, {39,36,26,23}},
+{ 839700, 4, {311,15,15,12}},
+{ 839736, 4, {109,107,9,8}},
+{ 839808, 4, {36,32,27,27}},
+{ 840000, 4, {35,32,30,25}},
+{ 840060, 4, {359,15,13,12}},
+{ 840168, 4, {1667,9,8,7}},
+{ 840240, 4, {389,15,12,12}},
+{ 840312, 4, {1061,11,9,8}},
+{ 840336, 4, {61,41,21,16}},
+{ 840375, 4, {83,27,25,15}},
+{ 840384, 4, {1459,9,8,8}},
+{ 840420, 4, {36,35,29,23}},
+{ 840456, 4, {1297,9,9,8}},
+{ 840600, 4, {467,15,12,10}},
+{ 840672, 4, {139,21,18,16}},
+{ 840720, 4, {113,31,16,15}},
+{ 840840, 4, {35,33,28,26}},
+{ 841050, 4, {89,25,21,18}},
+{ 841104, 4, {59,27,24,22}},
+{ 841176, 4, {1669,9,8,7}},
+{ 841248, 4, {127,23,18,16}},
+{ 841320, 4, {41,38,27,20}},
+{ 841428, 4, {53,28,27,21}},
+{ 841680, 4, {167,21,16,15}},
+{ 841725, 4, {43,29,27,25}},
+{ 841800, 4, {61,25,24,23}},
+{ 841824, 4, {79,37,18,16}},
+{ 841896, 4, {1063,11,9,8}},
+{ 841968, 4, {1949,9,8,6}},
+{ 841995, 4, {35,33,27,27}},
+{ 842016, 4, {179,21,16,14}},
+{ 842160, 4, {40,33,29,22}},
+{ 842352, 4, {109,23,21,16}},
+{ 842520, 4, {59,34,21,20}},
+{ 842580, 4, {151,31,15,12}},
+{ 842688, 4, {38,33,28,24}},
+{ 842832, 4, {1951,9,8,6}},
+{ 842904, 4, {509,23,9,8}},
+{ 843024, 4, {193,21,16,13}},
+{ 843048, 4, {1301,9,9,8}},
+{ 843120, 4, {1171,10,9,8}},
+{ 843200, 4, {34,32,31,25}},
+{ 843360, 4, {251,16,15,14}},
+{ 843480, 4, {71,27,22,20}},
+{ 843552, 4, {101,29,18,16}},
+{ 843600, 4, {38,37,25,24}},
+{ 843648, 4, {39,32,26,26}},
+{ 843660, 4, {109,43,15,12}},
+{ 843696, 4, {36,31,28,27}},
+{ 843840, 4, {293,16,15,12}},
+{ 843885, 4, {47,35,27,19}},
+{ 844020, 4, {521,15,12,9}},
+{ 844032, 4, {157,21,16,16}},
+{ 844056, 4, {617,19,9,8}},
+{ 844128, 4, {977,12,9,8}},
+{ 844200, 4, {67,25,24,21}},
+{ 844272, 4, {41,33,26,24}},
+{ 844344, 4, {1303,9,9,8}},
+{ 844480, 4, {35,32,29,26}},
+{ 844488, 4, {317,37,9,8}},
+{ 844800, 4, {33,32,32,25}},
+{ 844992, 4, {163,18,18,16}},
+{ 845100, 4, {313,15,15,12}},
+{ 845208, 4, {43,28,27,26}},
+{ 845250, 4, {35,35,30,23}},
+{ 845352, 4, {199,59,9,8}},
+{ 845520, 4, {271,16,15,13}},
+{ 845712, 4, {839,14,9,8}},
+{ 845784, 4, {691,17,9,8}},
+{ 845820, 4, {127,37,15,12}},
+{ 845880, 4, {53,38,21,20}},
+{ 845928, 4, {379,31,9,8}},
+{ 846000, 4, {47,30,25,24}},
+{ 846144, 4, {113,26,18,16}},
+{ 846216, 4, {73,24,23,21}},
+{ 846300, 4, {35,31,30,26}},
+{ 846450, 4, {38,33,27,25}},
+{ 846600, 4, {83,25,24,17}},
+{ 846648, 4, {1069,11,9,8}},
+{ 846792, 4, {619,19,9,8}},
+{ 846936, 4, {1307,9,9,8}},
+{ 847008, 4, {173,18,17,16}},
+{ 847044, 4, {36,33,31,23}},
+{ 847200, 4, {353,16,15,10}},
+{ 847224, 4, {41,41,24,21}},
+{ 847260, 4, {523,15,12,9}},
+{ 847296, 4, {1471,9,8,8}},
+{ 847392, 4, {97,26,21,16}},
+{ 847476, 4, {59,28,27,19}},
+{ 847512, 4, {149,79,9,8}},
+{ 847620, 4, {277,17,15,12}},
+{ 847656, 4, {193,61,9,8}},
+{ 847665, 4, {39,35,27,23}},
+{ 847872, 4, {36,32,32,23}},
+{ 848000, 4, {53,32,25,20}},
+{ 848160, 4, {38,31,30,24}},
+{ 848232, 4, {34,33,28,27}},
+{ 848400, 4, {101,21,20,20}},
+{ 848484, 4, {39,37,28,21}},
+{ 848640, 4, {34,32,30,26}},
+{ 848820, 4, {47,43,21,20}},
+{ 848952, 4, {907,13,9,8}},
+{ 849060, 4, {89,53,15,12}},
+{ 849150, 4, {37,34,27,25}},
+{ 849240, 4, {337,15,14,12}},
+{ 849312, 4, {983,12,9,8}},
+{ 849384, 4, {251,47,9,8}},
+{ 849555, 4, {35,31,29,27}},
+{ 849600, 4, {59,25,24,24}},
+{ 849816, 4, {37,33,29,24}},
+{ 849888, 4, {227,18,16,13}},
+{ 850080, 4, {35,33,32,23}},
+{ 850176, 4, {41,32,27,24}},
+{ 850320, 4, {1181,10,9,8}},
+{ 850500, 4, {35,30,30,27}},
+{ 850752, 4, {211,18,16,14}},
+{ 850860, 4, {163,29,15,12}},
+{ 850950, 4, {61,31,25,18}},
+{ 850968, 4, {223,53,9,8}},
+{ 851040, 4, {197,18,16,15}},
+{ 851088, 4, {149,21,17,16}},
+{ 851136, 4, {33,32,31,26}},
+{ 851200, 4, {38,32,28,25}},
+{ 851400, 4, {43,33,25,24}},
+{ 851424, 4, {181,21,16,14}},
+{ 851445, 4, {53,35,27,17}},
+{ 851472, 4, {73,27,24,18}},
+{ 851580, 4, {83,27,20,19}},
+{ 851760, 4, {36,35,26,26}},
+{ 851904, 4, {34,32,29,27}},
+{ 852000, 4, {71,25,24,20}},
+{ 852120, 4, {263,18,15,12}},
+{ 852240, 4, {67,53,16,15}},
+{ 852264, 4, {89,24,21,19}},
+{ 852336, 4, {1973,9,8,6}},
+{ 852390, 4, {41,35,27,22}},
+{ 852432, 4, {59,43,21,16}},
+{ 852480, 4, {37,32,30,24}},
+{ 852600, 4, {35,30,29,28}},
+{ 852696, 4, {911,13,9,8}},
+{ 852768, 4, {47,28,27,24}},
+{ 852800, 4, {41,32,26,25}},
+{ 853056, 4, {1481,9,8,8}},
+{ 853200, 4, {79,27,20,20}},
+{ 853272, 4, {1693,9,8,7}},
+{ 853335, 4, {43,35,27,21}},
+{ 853380, 4, {431,15,12,11}},
+{ 853440, 4, {127,21,20,16}},
+{ 853632, 4, {38,32,27,26}},
+{ 853704, 4, {167,71,9,8}},
+{ 853776, 4, {33,33,28,28}},
+{ 853860, 4, {107,21,20,19}},
+{ 853944, 4, {39,34,28,23}},
+{ 853992, 4, {409,29,9,8}},
+{ 854100, 4, {73,26,25,18}},
+{ 854208, 4, {1483,9,8,8}},
+{ 854280, 4, {113,21,20,18}},
+{ 854460, 4, {101,47,15,12}},
+{ 854496, 4, {43,32,27,23}},
+{ 854640, 4, {1187,10,9,8}},
+{ 854700, 4, {37,33,28,25}},
+{ 854712, 4, {1319,9,9,8}},
+{ 854856, 4, {383,31,9,8}},
+{ 854880, 4, {137,26,16,15}},
+{ 854928, 4, {1979,9,8,6}},
+{ 855036, 4, {39,29,28,27}},
+{ 855288, 4, {1697,9,8,7}},
+{ 855360, 4, {33,32,30,27}},
+{ 855432, 4, {109,109,9,8}},
+{ 855540, 4, {97,21,21,20}},
+{ 855900, 4, {317,15,15,12}},
+{ 856008, 4, {1321,9,9,8}},
+{ 856080, 4, {41,30,29,24}},
+{ 856128, 4, {39,28,28,28}},
+{ 856152, 4, {47,33,24,23}},
+{ 856224, 4, {991,12,9,8}},
+{ 856260, 4, {71,67,15,12}},
+{ 856296, 4, {1699,9,8,7}},
+{ 856320, 4, {223,16,16,15}},
+{ 856440, 4, {61,27,26,20}},
+{ 856512, 4, {1487,9,8,8}},
+{ 856560, 4, {83,43,16,15}},
+{ 856575, 4, {47,27,27,25}},
+{ 856728, 4, {163,73,9,8}},
+{ 856980, 4, {45,36,23,23}},
+{ 857088, 4, {32,32,31,27}},
+{ 857250, 4, {127,25,18,15}},
+{ 857304, 4, {42,28,27,27}},
+{ 857340, 4, {433,15,12,11}},
+{ 857376, 4, {229,18,16,13}},
+{ 857472, 4, {33,32,29,28}},
+{ 857520, 4, {397,15,12,12}},
+{ 857592, 4, {277,43,9,8}},
+{ 857664, 4, {1489,9,8,8}},
+{ 857925, 4, {41,31,27,25}},
+{ 858000, 4, {40,33,26,25}},
+{ 858024, 4, {701,17,9,8}},
+{ 858240, 4, {149,20,18,16}},
+{ 858384, 4, {1987,9,8,6}},
+{ 858400, 4, {37,32,29,25}},
+{ 858420, 4, {251,19,15,12}},
+{ 858480, 4, {73,28,21,20}},
+{ 858600, 4, {53,27,25,24}},
+{ 858780, 4, {367,15,13,12}},
+{ 858816, 4, {71,24,24,21}},
+{ 858888, 4, {151,79,9,8}},
+{ 858960, 4, {1193,10,9,8}},
+{ 859050, 4, {83,25,23,18}},
+{ 859104, 4, {157,19,18,16}},
+{ 859140, 4, {43,37,27,20}},
+{ 859200, 4, {179,20,16,15}},
+{ 859275, 4, {67,27,25,19}},
+{ 859320, 4, {33,31,30,28}},
+{ 859584, 4, {37,33,32,22}},
+{ 859680, 4, {199,18,16,15}},
+{ 859740, 4, {89,23,21,20}},
+{ 859824, 4, {853,14,9,8}},
+{ 859860, 4, {281,17,15,12}},
+{ 859896, 4, {1327,9,9,8}},
+{ 859950, 4, {35,35,27,26}},
+{ 859968, 4, {1493,9,8,8}},
+{ 860000, 4, {43,32,25,25}},
+{ 860160, 4, {32,32,30,28}},
+{ 860184, 4, {919,13,9,8}},
+{ 860220, 4, {59,27,27,20}},
+{ 860256, 4, {103,29,18,16}},
+{ 860400, 4, {239,16,15,15}},
+{ 860496, 4, {197,21,16,13}},
+{ 860625, 4, {51,27,25,25}},
+{ 860640, 4, {163,22,16,15}},
+{ 860832, 4, {61,28,24,21}},
+{ 860880, 4, {211,17,16,15}},
+{ 860904, 4, {1087,11,9,8}},
+{ 860976, 4, {1993,9,8,6}},
+{ 861120, 4, {39,32,30,23}},
+{ 861273, 4, {49,31,27,21}},
+{ 861336, 4, {1709,9,8,7}},
+{ 861360, 4, {97,37,16,15}},
+{ 861408, 4, {997,12,9,8}},
+{ 861600, 4, {359,16,15,10}},
+{ 861696, 4, {34,33,32,24}},
+{ 861840, 4, {38,30,28,27}},
+{ 861984, 4, {73,41,18,16}},
+{ 862200, 4, {479,15,12,10}},
+{ 862344, 4, {59,29,24,21}},
+{ 862400, 4, {35,35,32,22}},
+{ 862488, 4, {33,33,33,24}},
+{ 862512, 4, {151,21,17,16}},
+{ 862650, 4, {71,27,25,18}},
+{ 862680, 4, {79,26,21,20}},
+{ 862704, 4, {1997,9,8,6}},
+{ 862776, 4, {521,23,9,8}},
+{ 862848, 4, {107,24,21,16}},
+{ 862920, 4, {47,34,27,20}},
+{ 863040, 4, {32,31,30,29}},
+{ 863100, 4, {137,21,20,15}},
+{ 863136, 4, {37,32,27,27}},
+{ 863208, 4, {631,19,9,8}},
+{ 863424, 4, {1499,9,8,8}},
+{ 863496, 4, {179,67,9,8}},
+{ 863520, 4, {257,16,15,14}},
+{ 863550, 4, {101,25,19,18}},
+{ 863568, 4, {1999,9,8,6}},
+{ 863760, 4, {61,59,16,15}},
+{ 863784, 4, {43,31,27,24}},
+{ 863856, 4, {857,14,9,8}},
+{ 864000, 4, {32,30,30,30}},
+{ 864072, 4, {1091,11,9,8}},
+{ 864240, 4, {277,16,15,13}},
+{ 864450, 4, {113,25,18,17}},
+{ 864528, 4, {83,31,21,16}},
+{ 864675, 4, {61,27,25,21}},
+{ 864720, 4, {1201,10,9,8}},
+{ 864780, 4, {71,29,21,20}},
+{ 864800, 4, {47,32,25,23}},
+{ 864864, 4, {36,33,28,26}},
+{ 864936, 4, {293,41,9,8}},
+{ 865080, 4, {89,27,20,18}},
+{ 865200, 4, {103,21,20,20}},
+{ 865224, 4, {197,61,9,8}},
+{ 865296, 4, {2003,9,8,6}},
+{ 865368, 4, {101,24,21,17}},
+{ 865536, 4, {42,32,28,23}},
+{ 865656, 4, {1093,11,9,8}},
+{ 865728, 4, {167,18,18,16}},
+{ 865872, 4, {859,14,9,8}},
+{ 865920, 4, {41,32,30,22}},
+{ 865980, 4, {283,17,15,12}},
+{ 866016, 4, {97,31,18,16}},
+{ 866052, 4, {36,33,27,27}},
+{ 866088, 4, {523,23,9,8}},
+{ 866160, 4, {401,15,12,12}},
+{ 866232, 4, {227,53,9,8}},
+{ 866250, 4, {35,33,30,25}},
+{ 866400, 4, {38,38,25,24}},
+{ 866640, 4, {157,23,16,15}},
+{ 866700, 4, {107,25,18,18}},
+{ 866880, 4, {43,30,28,24}},
+{ 867132, 4, {37,31,28,27}},
+{ 867150, 4, {47,41,25,18}},
+{ 867216, 4, {89,29,21,16}},
+{ 867240, 4, {73,27,22,20}},
+{ 867360, 4, {139,26,16,15}},
+{ 867384, 4, {1721,9,8,7}},
+{ 867420, 4, {79,61,15,12}},
+{ 867456, 4, {251,18,16,12}},
+{ 867510, 4, {35,34,27,27}},
+{ 867600, 4, {241,16,15,15}},
+{ 867744, 4, {131,23,18,16}},
+{ 867816, 4, {709,17,9,8}},
+{ 867825, 4, {45,35,29,19}},
+{ 867888, 4, {41,28,28,27}},
+{ 868000, 4, {35,32,31,25}},
+{ 868032, 4, {137,22,18,16}},
+{ 868248, 4, {389,31,9,8}},
+{ 868320, 4, {67,27,24,20}},
+{ 868392, 4, {1723,9,8,7}},
+{ 868608, 4, {36,32,29,26}},
+{ 868725, 4, {39,33,27,25}},
+{ 868752, 4, {2011,9,8,6}},
+{ 868800, 4, {181,20,16,15}},
+{ 868824, 4, {1097,11,9,8}},
+{ 869220, 4, {439,15,12,11}},
+{ 869232, 4, {199,21,16,13}},
+{ 869400, 4, {36,35,30,23}},
+{ 869544, 4, {929,13,9,8}},
+{ 869616, 4, {61,27,24,22}},
+{ 869688, 4, {257,47,9,8}},
+{ 869760, 4, {151,20,18,16}},
+{ 869820, 4, {109,21,20,19}},
+{ 869904, 4, {863,14,9,8}},
+{ 869976, 4, {281,43,9,8}},
+{ 870048, 4, {53,32,27,19}},
+{ 870336, 4, {1511,9,8,8}},
+{ 870400, 4, {34,32,32,25}},
+{ 870552, 4, {113,107,9,8}},
+{ 870750, 4, {43,30,27,25}},
+{ 870912, 4, {36,32,28,27}},
+{ 870960, 4, {191,19,16,15}},
+{ 871080, 4, {61,34,21,20}},
+{ 871200, 4, {33,33,32,25}},
+{ 871332, 4, {41,33,28,23}},
+{ 871344, 4, {2017,9,8,6}},
+{ 871380, 4, {103,47,15,12}},
+{ 871416, 4, {39,38,28,21}},
+{ 871500, 4, {83,25,21,20}},
+{ 871560, 4, {269,18,15,12}},
+{ 871680, 4, {227,16,16,15}},
+{ 871740, 4, {167,29,15,12}},
+{ 871776, 4, {1009,12,9,8}},
+{ 871884, 4, {39,36,27,23}},
+{ 871920, 4, {173,21,16,15}},
+{ 872100, 4, {38,34,27,25}},
+{ 872340, 4, {67,31,21,20}},
+{ 872352, 4, {233,18,16,13}},
+{ 872460, 4, {131,37,15,12}},
+{ 872784, 4, {38,33,29,24}},
+{ 872820, 4, {373,15,13,12}},
+{ 873000, 4, {97,25,20,18}},
+{ 873144, 4, {181,67,9,8}},
+{ 873180, 4, {35,33,28,27}},
+{ 873264, 4, {113,23,21,16}},
+{ 873360, 4, {1213,10,9,8}},
+{ 873432, 4, {1733,9,8,7}},
+{ 873540, 4, {211,23,15,12}},
+{ 873576, 4, {1103,11,9,8}},
+{ 873600, 4, {35,32,30,26}},
+{ 873840, 4, {331,16,15,11}},
+{ 873864, 4, {229,53,9,8}},
+{ 873936, 4, {34,34,28,27}},
+{ 874008, 4, {199,61,9,8}},
+{ 874104, 4, {43,33,28,22}},
+{ 874125, 4, {37,35,27,25}},
+{ 874152, 4, {71,27,24,19}},
+{ 874200, 4, {47,31,25,24}},
+{ 874350, 4, {67,29,25,18}},
+{ 874368, 4, {36,33,32,23}},
+{ 874440, 4, {347,15,14,12}},
+{ 874608, 4, {137,21,19,16}},
+{ 874620, 4, {113,43,15,12}},
+{ 874872, 4, {419,29,9,8}},
+{ 875000, 4, {40,35,25,25}},
+{ 875232, 4, {1013,12,9,8}},
+{ 875520, 4, {38,32,30,24}},
+{ 875664, 4, {2027,9,8,6}},
+{ 875700, 4, {139,21,20,15}},
+{ 875760, 4, {89,41,16,15}},
+{ 875840, 4, {35,34,32,23}},
+{ 875952, 4, {79,24,22,21}},
+{ 876000, 4, {73,25,24,20}},
+{ 876060, 4, {157,31,15,12}},
+{ 876120, 4, {149,21,20,14}},
+{ 876150, 4, {59,27,25,22}},
+{ 876168, 4, {283,43,9,8}},
+{ 876204, 4, {61,28,27,19}},
+{ 876240, 4, {1217,10,9,8}},
+{ 876288, 4, {163,21,16,16}},
+{ 876384, 4, {179,18,17,16}},
+{ 876420, 4, {541,15,12,9}},
+{ 876456, 4, {47,37,24,21}},
+{ 876528, 4, {2029,9,8,6}},
+{ 876600, 4, {487,15,12,10}},
+{ 876720, 4, {281,16,15,13}},
+{ 876744, 4, {41,33,27,24}},
+{ 876888, 4, {641,19,9,8}},
+{ 877032, 4, {937,13,9,8}},
+{ 877140, 4, {443,15,12,11}},
+{ 877200, 4, {43,34,25,24}},
+{ 877248, 4, {1523,9,8,8}},
+{ 877464, 4, {1741,9,8,7}},
+{ 877680, 4, {53,30,24,23}},
+{ 877716, 4, {43,28,27,27}},
+{ 877752, 4, {167,73,9,8}},
+{ 877800, 4, {38,33,28,25}},
+{ 877824, 4, {127,24,18,16}},
+{ 877896, 4, {137,89,9,8}},
+{ 877968, 4, {67,26,24,21}},
+{ 878040, 4, {271,18,15,12}},
+{ 878080, 4, {35,32,28,28}},
+{ 878328, 4, {1109,11,9,8}},
+{ 878400, 4, {61,25,24,24}},
+{ 878472, 4, {83,24,21,21}},
+{ 878592, 4, {33,32,32,26}},
+{ 878850, 4, {35,31,30,27}},
+{ 878940, 4, {257,19,15,12}},
+{ 878976, 4, {109,24,21,16}},
+{ 879048, 4, {421,29,9,8}},
+{ 879060, 4, {39,35,28,23}},
+{ 879120, 4, {37,33,30,24}},
+{ 879264, 4, {71,43,18,16}},
+{ 879336, 4, {59,27,24,23}},
+{ 879360, 4, {229,16,16,15}},
+{ 879480, 4, {349,15,14,12}},
+{ 879624, 4, {643,19,9,8}},
+{ 879648, 4, {34,33,28,28}},
+{ 879795, 4, {49,35,27,19}},
+{ 879840, 4, {47,30,26,24}},
+{ 879984, 4, {97,24,21,18}},
+{ 880056, 4, {719,17,9,8}},
+{ 880080, 4, {193,19,16,15}},
+{ 880128, 4, {191,18,16,16}},
+{ 880152, 4, {39,31,28,26}},
+{ 880320, 4, {131,21,20,16}},
+{ 880380, 4, {73,67,15,12}},
+{ 880416, 4, {1019,12,9,8}},
+{ 880440, 4, {40,33,29,23}},
+{ 880488, 4, {1747,9,8,7}},
+{ 880560, 4, {1223,10,9,8}},
+{ 880650, 4, {103,25,19,18}},
+{ 880704, 4, {139,22,18,16}},
+{ 880776, 4, {941,13,9,8}},
+{ 880800, 4, {367,16,15,10}},
+{ 880848, 4, {2039,9,8,6}},
+{ 880875, 4, {45,29,27,25}},
+{ 881100, 4, {89,25,22,18}},
+{ 881280, 4, {34,32,30,27}},
+{ 881328, 4, {61,43,21,16}},
+{ 881460, 4, {83,59,15,12}},
+{ 881496, 4, {53,28,27,22}},
+{ 881600, 4, {38,32,29,25}},
+{ 881760, 4, {167,22,16,15}},
+{ 881784, 4, {331,37,9,8}},
+{ 881820, 4, {71,27,23,20}},
+{ 881856, 4, {1531,9,8,8}},
+{ 881928, 4, {1361,9,9,8}},
+{ 882000, 4, {35,30,30,28}},
+{ 882144, 4, {1021,12,9,8}},
+{ 882336, 4, {101,26,21,16}},
+{ 882360, 4, {43,38,27,20}},
+{ 882441, 4, {49,29,27,23}},
+{ 882450, 4, {53,37,25,18}},
+{ 882504, 4, {103,24,21,17}},
+{ 882672, 4, {71,37,21,16}},
+{ 882816, 4, {38,33,32,22}},
+{ 882900, 4, {109,25,18,18}},
+{ 882960, 4, {283,16,15,13}},
+{ 883008, 4, {73,24,24,21}},
+{ 883050, 4, {35,30,29,29}},
+{ 883080, 4, {223,22,15,12}},
+{ 883200, 4, {40,32,30,23}},
+{ 883224, 4, {47,29,27,24}},
+{ 883440, 4, {409,15,12,12}},
+{ 883512, 4, {1753,9,8,7}},
+{ 883575, 4, {45,35,33,17}},
+{ 883680, 4, {263,16,15,14}},
+{ 883800, 4, {491,15,12,10}},
+{ 883872, 4, {33,32,31,27}},
+{ 883920, 4, {127,29,16,15}},
+{ 884016, 4, {877,14,9,8}},
+{ 884160, 4, {307,16,15,12}},
+{ 884250, 4, {131,25,18,15}},
+{ 884268, 4, {33,33,29,28}},
+{ 884376, 4, {173,71,9,8}},
+{ 884400, 4, {67,25,24,22}},
+{ 884448, 4, {83,37,18,16}},
+{ 884520, 4, {36,35,27,26}},
+{ 884664, 4, {1117,11,9,8}},
+{ 884736, 4, {32,32,32,27}},
+{ 884880, 4, {1229,10,9,8}},
+{ 885000, 4, {59,25,25,24}},
+{ 885096, 4, {647,19,9,8}},
+{ 885456, 4, {43,33,26,24}},
+{ 885600, 4, {41,32,27,25}},
+{ 885816, 4, {1367,9,9,8}},
+{ 886104, 4, {397,31,9,8}},
+{ 886140, 4, {547,15,12,9}},
+{ 886176, 4, {181,18,17,16}},
+{ 886320, 4, {1231,10,9,8}},
+{ 886392, 4, {947,13,9,8}},
+{ 886464, 4, {38,32,27,27}},
+{ 886536, 4, {1759,9,8,7}},
+{ 886704, 4, {39,29,28,28}},
+{ 886824, 4, {113,109,9,8}},
+{ 886860, 4, {379,15,13,12}},
+{ 886896, 4, {2053,9,8,6}},
+{ 886950, 4, {73,27,25,18}},
+{ 886968, 4, {127,97,9,8}},
+{ 887040, 4, {33,32,30,28}},
+{ 887112, 4, {37,37,27,24}},
+{ 887220, 4, {53,31,27,20}},
+{ 887376, 4, {139,21,19,16}},
+{ 887832, 4, {59,33,24,19}},
+{ 887880, 4, {151,21,20,14}},
+{ 887964, 4, {33,31,31,28}},
+{ 888000, 4, {37,32,30,25}},
+{ 888048, 4, {881,14,9,8}},
+{ 888096, 4, {33,32,29,29}},
+{ 888192, 4, {257,18,16,12}},
+{ 888300, 4, {47,28,27,25}},
+{ 888552, 4, {43,41,24,21}},
+{ 888624, 4, {34,33,33,24}},
+{ 888720, 4, {42,40,23,23}},
+{ 888750, 4, {79,25,25,18}},
+{ 888768, 4, {1543,9,8,8}},
+{ 888888, 4, {37,33,28,26}},
+{ 889020, 4, {449,15,12,11}},
+{ 889056, 4, {42,28,28,27}},
+{ 889128, 4, {233,53,9,8}},
+{ 889140, 4, {73,29,21,20}},
+{ 889344, 4, {193,18,16,16}},
+{ 889380, 4, {61,27,27,20}},
+{ 889416, 4, {1123,11,9,8}},
+{ 889560, 4, {353,15,14,12}},
+{ 889680, 4, {337,16,15,11}},
+{ 889704, 4, {1373,9,9,8}},
+{ 889824, 4, {39,32,31,23}},
+{ 889848, 4, {727,17,9,8}},
+{ 889992, 4, {263,47,9,8}},
+{ 890064, 4, {883,14,9,8}},
+{ 890400, 4, {53,28,25,24}},
+{ 890424, 4, {149,83,9,8}},
+{ 890460, 4, {97,27,20,17}},
+{ 890568, 4, {38,31,28,27}},
+{ 890640, 4, {1237,10,9,8}},
+{ 890712, 4, {139,89,9,8}},
+{ 890784, 4, {1031,12,9,8}},
+{ 890820, 4, {101,21,21,20}},
+{ 890880, 4, {32,32,30,29}},
+{ 891120, 4, {79,47,16,15}},
+{ 891135, 4, {41,35,27,23}},
+{ 891216, 4, {2063,9,8,6}},
+{ 891576, 4, {61,29,24,21}},
+{ 891648, 4, {43,32,27,24}},
+{ 891936, 4, {163,19,18,16}},
+{ 892008, 4, {953,13,9,8}},
+{ 892080, 4, {59,30,24,21}},
+{ 892224, 4, {1549,9,8,8}},
+{ 892320, 4, {40,33,26,26}},
+{ 892500, 4, {35,34,30,25}},
+{ 892512, 4, {1033,12,9,8}},
+{ 892584, 4, {42,33,28,23}},
+{ 892800, 4, {32,31,30,30}},
+{ 892944, 4, {53,27,26,24}},
+{ 893016, 4, {157,79,9,8}},
+{ 893025, 4, {35,35,27,27}},
+{ 893040, 4, {61,61,16,15}},
+{ 893200, 4, {40,35,29,22}},
+{ 893304, 4, {653,19,9,8}},
+{ 893376, 4, {47,33,24,24}},
+{ 893475, 4, {55,45,19,19}},
+{ 893550, 4, {37,35,30,23}},
+{ 893664, 4, {107,29,18,16}},
+{ 893700, 4, {331,15,15,12}},
+{ 893808, 4, {2069,9,8,6}},
+{ 893970, 4, {43,35,27,22}},
+{ 894096, 4, {887,14,9,8}},
+{ 894168, 4, {1129,11,9,8}},
+{ 894348, 4, {39,39,28,21}},
+{ 894375, 4, {53,27,25,25}},
+{ 894400, 4, {43,32,26,25}},
+{ 894432, 4, {44,33,28,22}},
+{ 894528, 4, {1553,9,8,8}},
+{ 894600, 4, {71,25,24,21}},
+{ 894720, 4, {233,16,16,15}},
+{ 894816, 4, {239,18,16,13}},
+{ 894888, 4, {1381,9,9,8}},
+{ 895032, 4, {401,31,9,8}},
+{ 895050, 4, {39,34,27,25}},
+{ 895104, 4, {37,32,28,27}},
+{ 895200, 4, {373,16,15,10}},
+{ 895608, 4, {1777,9,8,7}},
+{ 895680, 4, {311,16,15,12}},
+{ 895752, 4, {36,33,29,26}},
+{ 895860, 4, {79,27,21,20}},
+{ 895896, 4, {541,23,9,8}},
+{ 896000, 4, {35,32,32,25}},
+{ 896112, 4, {127,21,21,16}},
+{ 896220, 4, {383,15,13,12}},
+{ 896280, 4, {97,22,21,20}},
+{ 896328, 4, {211,59,9,8}},
+{ 896400, 4, {83,27,20,20}},
+{ 896448, 4, {42,32,29,23}},
+{ 896580, 4, {293,17,15,12}},
+{ 896784, 4, {157,21,17,16}},
+{ 896832, 4, {173,18,18,16}},
+{ 896880, 4, {101,37,16,15}},
+{ 897000, 4, {40,39,25,23}},
+{ 897120, 4, {89,24,21,20}},
+{ 897192, 4, {733,17,9,8}},
+{ 897480, 4, {277,18,15,12}},
+{ 897600, 4, {34,33,32,25}},
+{ 897696, 4, {1039,12,9,8}},
+{ 897750, 4, {38,35,27,25}},
+{ 897768, 4, {337,37,9,8}},
+{ 897792, 4, {167,21,16,16}},
+{ 897840, 4, {43,30,29,24}},
+{ 897984, 4, {1559,9,8,8}},
+{ 898128, 4, {36,33,28,27}},
+{ 898200, 4, {499,15,12,10}},
+{ 898320, 4, {197,19,16,15}},
+{ 898380, 4, {36,35,31,23}},
+{ 898464, 4, {191,21,16,14}},
+{ 898560, 4, {36,32,30,26}},
+{ 898632, 4, {1783,9,8,7}},
+{ 898656, 4, {37,33,32,23}},
+{ 898776, 4, {73,27,24,19}},
+{ 898800, 4, {107,21,20,20}},
+{ 898884, 4, {41,29,28,27}},
+{ 898920, 4, {227,22,15,12}},
+{ 898992, 4, {2081,9,8,6}},
+{ 899136, 4, {223,18,16,14}},
+{ 899280, 4, {1249,10,9,8}},
+{ 899460, 4, {263,19,15,12}},
+{ 899640, 4, {35,34,28,27}},
+{ 899760, 4, {163,23,16,15}},
+{ 899775, 4, {43,31,27,25}},
+{ 899808, 4, {103,26,21,16}},
+{ 899856, 4, {2083,9,8,6}},
+{ 899928, 4, {431,29,9,8}},
+{ 900144, 4, {47,38,24,21}},
+{ 900240, 4, {40,33,31,22}},
+{ 900450, 4, {46,29,27,25}},
+{ 900576, 4, {59,53,18,16}},
+{ 900600, 4, {79,25,24,19}},
+{ 900648, 4, {1787,9,8,7}},
+{ 900864, 4, {36,34,32,23}},
+{ 900900, 4, {35,33,30,26}},
+{ 901125, 4, {89,27,25,15}},
+{ 901152, 4, {149,21,18,16}},
+{ 901440, 4, {313,16,15,12}},
+{ 901512, 4, {659,19,9,8}},
+{ 901584, 4, {2087,9,8,6}},
+{ 901600, 4, {35,35,32,23}},
+{ 901656, 4, {1789,9,8,7}},
+{ 901692, 4, {36,33,33,23}},
+{ 901728, 4, {101,31,18,16}},
+{ 901740, 4, {113,21,20,19}},
+{ 902016, 4, {36,32,29,27}},
+{ 902160, 4, {179,21,16,15}},
+{ 902304, 4, {241,18,16,13}},
+{ 902340, 4, {557,15,12,9}},
+{ 902376, 4, {151,83,9,8}},
+{ 902400, 4, {47,32,25,24}},
+{ 902448, 4, {2089,9,8,6}},
+{ 902592, 4, {1567,9,8,8}},
+{ 902700, 4, {59,34,25,18}},
+{ 902720, 4, {35,32,31,26}},
+{ 902880, 4, {38,33,30,24}},
+{ 903060, 4, {173,29,15,12}},
+{ 903120, 4, {71,53,16,15}},
+{ 903168, 4, {36,32,28,28}},
+{ 903312, 4, {41,34,27,24}},
+{ 903600, 4, {251,16,15,15}},
+{ 903840, 4, {269,16,15,14}},
+{ 904032, 4, {73,43,18,16}},
+{ 904050, 4, {41,35,30,21}},
+{ 904104, 4, {433,29,9,8}},
+{ 904176, 4, {39,36,28,23}},
+{ 904248, 4, {661,19,9,8}},
+{ 904320, 4, {157,20,18,16}},
+{ 904365, 4, {35,33,29,27}},
+{ 904500, 4, {67,27,25,20}},
+{ 904536, 4, {739,17,9,8}},
+{ 904680, 4, {359,15,14,12}},
+{ 904860, 4, {457,15,12,11}},
+{ 904896, 4, {1571,9,8,8}},
+{ 905040, 4, {419,15,12,12}},
+{ 905112, 4, {967,13,9,8}},
+{ 905220, 4, {107,47,15,12}},
+{ 905280, 4, {41,32,30,23}},
+{ 905400, 4, {503,15,12,10}},
+{ 905472, 4, {131,24,18,16}},
+{ 905520, 4, {35,33,28,28}},
+{ 905625, 4, {45,35,25,23}},
+{ 905760, 4, {37,34,30,24}},
+{ 905832, 4, {547,23,9,8}},
+{ 905850, 4, {61,27,25,22}},
+{ 906048, 4, {33,33,32,26}},
+{ 906264, 4, {307,41,9,8}},
+{ 906336, 4, {1049,12,9,8}},
+{ 906360, 4, {83,26,21,20}},
+{ 906480, 4, {1259,10,9,8}},
+{ 906525, 4, {79,27,25,17}},
+{ 906552, 4, {1399,9,9,8}},
+{ 906660, 4, {73,27,23,20}},
+{ 906768, 4, {2099,9,8,6}},
+{ 906780, 4, {127,21,20,17}},
+{ 906840, 4, {229,22,15,12}},
+{ 906912, 4, {67,47,18,16}},
+{ 907128, 4, {293,43,9,8}},
+{ 907380, 4, {71,71,15,12}},
+{ 907440, 4, {199,19,16,15}},
+{ 907488, 4, {137,23,18,16}},
+{ 907536, 4, {73,37,21,16}},
+{ 907704, 4, {1801,9,8,7}},
+{ 907740, 4, {41,41,27,20}},
+{ 907764, 4, {44,39,23,23}},
+{ 907776, 4, {197,18,16,16}},
+{ 907800, 4, {89,25,24,17}},
+{ 907872, 4, {193,21,16,14}},
+{ 908064, 4, {1051,12,9,8}},
+{ 908145, 4, {35,31,31,27}},
+{ 908160, 4, {43,32,30,22}},
+{ 908208, 4, {53,34,24,21}},
+{ 908424, 4, {37,33,31,24}},
+{ 908460, 4, {103,21,21,20}},
+{ 908544, 4, {39,32,28,26}},
+{ 908856, 4, {971,13,9,8}},
+{ 908928, 4, {263,18,16,12}},
+{ 909000, 4, {101,25,20,18}},
+{ 909090, 4, {37,35,27,26}},
+{ 909144, 4, {61,27,24,23}},
+{ 909216, 4, {41,33,28,24}},
+{ 909288, 4, {173,73,9,8}},
+{ 909360, 4, {421,15,12,12}},
+{ 909432, 4, {743,17,9,8}},
+{ 909440, 4, {35,32,29,28}},
+{ 909450, 4, {47,43,25,18}},
+{ 909504, 4, {1579,9,8,8}},
+{ 909540, 4, {163,31,15,12}},
+{ 909600, 4, {379,16,15,10}},
+{ 909840, 4, {223,17,16,15}},
+{ 909900, 4, {337,15,15,12}},
+{ 910000, 4, {40,35,26,25}},
+{ 910200, 4, {41,37,25,24}},
+{ 910224, 4, {43,28,28,27}},
+{ 910260, 4, {389,15,13,12}},
+{ 910296, 4, {269,47,9,8}},
+{ 910350, 4, {45,35,34,17}},
+{ 910368, 4, {109,29,18,16}},
+{ 910440, 4, {281,18,15,12}},
+{ 910560, 4, {271,16,15,14}},
+{ 910575, 4, {71,27,25,19}},
+{ 910656, 4, {34,32,31,27}},
+{ 910800, 4, {40,33,30,23}},
+{ 911064, 4, {34,33,29,28}},
+{ 911088, 4, {38,37,27,24}},
+{ 911232, 4, {113,24,21,16}},
+{ 911250, 4, {45,30,27,25}},
+{ 911340, 4, {83,61,15,12}},
+{ 911400, 4, {35,31,30,28}},
+{ 911520, 4, {211,18,16,15}},
+{ 911592, 4, {1151,11,9,8}},
+{ 911680, 4, {37,35,32,22}},
+{ 911736, 4, {67,27,24,21}},
+{ 911760, 4, {131,29,16,15}},
+{ 911808, 4, {1583,9,8,8}},
+{ 911952, 4, {2111,9,8,6}},
+{ 911988, 4, {47,33,28,21}},
+{ 912000, 4, {38,32,30,25}},
+{ 912024, 4, {239,53,9,8}},
+{ 912060, 4, {563,15,12,9}},
+{ 912240, 4, {181,21,16,15}},
+{ 912384, 4, {33,32,32,27}},
+{ 912420, 4, {137,37,15,12}},
+{ 912576, 4, {97,28,21,16}},
+{ 912660, 4, {53,41,21,20}},
+{ 912744, 4, {1811,9,8,7}},
+{ 912780, 4, {461,15,12,11}},
+{ 912816, 4, {2113,9,8,6}},
+{ 912870, 4, {42,35,27,23}},
+{ 912888, 4, {409,31,9,8}},
+{ 912912, 4, {38,33,28,26}},
+{ 912960, 4, {317,16,15,12}},
+{ 913032, 4, {1409,9,9,8}},
+{ 913140, 4, {89,27,20,19}},
+{ 913176, 4, {1153,11,9,8}},
+{ 913248, 4, {151,21,18,16}},
+{ 913275, 4, {41,33,27,25}},
+{ 913440, 4, {173,22,16,15}},
+{ 913500, 4, {35,30,30,29}},
+{ 913680, 4, {47,30,27,24}},
+{ 913824, 4, {167,19,18,16}},
+{ 913836, 4, {43,33,28,23}},
+{ 913920, 4, {34,32,30,28}},
+{ 914004, 4, {39,31,28,27}},
+{ 914112, 4, {46,32,27,23}},
+{ 914160, 4, {293,16,15,13}},
+{ 914256, 4, {907,14,9,8}},
+{ 914472, 4, {977,13,9,8}},
+{ 914640, 4, {103,37,16,15}},
+{ 914760, 4, {33,33,30,28}},
+{ 914850, 4, {107,25,19,18}},
+{ 914904, 4, {131,97,9,8}},
+{ 915000, 4, {61,25,25,24}},
+{ 915048, 4, {179,71,9,8}},
+{ 915120, 4, {41,31,30,24}},
+{ 915264, 4, {227,18,16,14}},
+{ 915300, 4, {113,25,18,18}},
+{ 915552, 4, {34,34,33,24}},
+{ 915600, 4, {109,21,20,20}},
+{ 915705, 4, {51,35,27,19}},
+{ 915768, 4, {79,24,23,21}},
+{ 915840, 4, {53,30,24,24}},
+{ 915975, 4, {59,27,25,23}},
+{ 916080, 4, {347,16,15,11}},
+{ 916200, 4, {509,15,12,10}},
+{ 916272, 4, {101,24,21,18}},
+{ 916560, 4, {67,30,24,19}},
+{ 916608, 4, {33,32,31,28}},
+{ 916632, 4, {439,29,9,8}},
+{ 916650, 4, {97,25,21,18}},
+{ 916704, 4, {1061,12,9,8}},
+{ 916740, 4, {463,15,12,11}},
+{ 916776, 4, {107,24,21,17}},
+{ 916800, 4, {191,20,16,15}},
+{ 916839, 4, {49,33,27,21}},
+{ 916860, 4, {59,37,21,20}},
+{ 916920, 4, {283,18,15,12}},
+{ 916992, 4, {199,18,16,16}},
+{ 917064, 4, {271,47,9,8}},
+{ 917280, 4, {36,35,28,26}},
+{ 917568, 4, {59,27,24,24}},
+{ 917600, 4, {37,32,31,25}},
+{ 917700, 4, {38,35,30,23}},
+{ 917760, 4, {239,16,16,15}},
+{ 917928, 4, {61,33,24,19}},
+{ 918072, 4, {311,41,9,8}},
+{ 918288, 4, {911,14,9,8}},
+{ 918372, 4, {39,29,29,28}},
+{ 918400, 4, {41,32,28,25}},
+{ 918432, 4, {1063,12,9,8}},
+{ 918480, 4, {89,43,16,15}},
+{ 918528, 4, {39,32,32,23}},
+{ 918540, 4, {36,35,27,27}},
+{ 918720, 4, {33,32,30,29}},
+{ 918750, 4, {35,35,30,25}},
+{ 918792, 4, {1823,9,8,7}},
+{ 919200, 4, {383,16,15,10}},
+{ 919224, 4, {751,17,9,8}},
+{ 919296, 4, {38,32,28,27}},
+{ 919368, 4, {113,113,9,8}},
+{ 919440, 4, {1277,10,9,8}},
+{ 919512, 4, {43,33,27,24}},
+{ 919584, 4, {103,31,18,16}},
+{ 919656, 4, {241,53,9,8}},
+{ 919728, 4, {2129,9,8,6}},
+{ 919800, 4, {73,25,24,21}},
+{ 919872, 4, {1597,9,8,8}},
+{ 919980, 4, {269,19,15,12}},
+{ 920025, 4, {47,29,27,25}},
+{ 920088, 4, {983,13,9,8}},
+{ 920160, 4, {71,27,24,20}},
+{ 920304, 4, {83,24,22,21}},
+{ 920400, 4, {59,26,25,24}},
+{ 920592, 4, {2131,9,8,6}},
+{ 920640, 4, {137,21,20,16}},
+{ 920664, 4, {673,19,9,8}},
+{ 920736, 4, {139,23,18,16}},
+{ 920808, 4, {42,29,28,27}},
+{ 920880, 4, {1279,10,9,8}},
+{ 921024, 4, {41,32,27,26}},
+{ 921096, 4, {1163,11,9,8}},
+{ 921150, 4, {89,25,23,18}},
+{ 921360, 4, {349,16,15,11}},
+{ 921375, 4, {39,35,27,25}},
+{ 921384, 4, {191,67,9,8}},
+{ 921456, 4, {79,27,24,18}},
+{ 921564, 4, {53,28,27,23}},
+{ 921600, 4, {32,32,30,30}},
+{ 921648, 4, {211,21,16,13}},
+{ 921780, 4, {569,15,12,9}},
+{ 921816, 4, {59,31,24,21}},
+{ 921840, 4, {167,23,16,15}},
+{ 922104, 4, {1423,9,9,8}},
+{ 922140, 4, {109,47,15,12}},
+{ 922176, 4, {1601,9,8,8}},
+{ 922200, 4, {53,29,25,24}},
+{ 922320, 4, {61,30,24,21}},
+{ 922392, 4, {557,23,9,8}},
+{ 922560, 4, {32,31,31,30}},
+{ 922680, 4, {233,22,15,12}},
+{ 922824, 4, {1831,9,8,7}},
+{ 922944, 4, {38,33,32,23}},
+{ 922992, 4, {67,41,21,16}},
+{ 923076, 4, {37,33,28,27}},
+{ 923160, 4, {157,21,20,14}},
+{ 923184, 4, {2137,9,8,6}},
+{ 923220, 4, {223,23,15,12}},
+{ 923328, 4, {229,18,16,14}},
+{ 923472, 4, {53,33,24,22}},
+{ 923520, 4, {37,32,30,26}},
+{ 923544, 4, {127,101,9,8}},
+{ 923616, 4, {1069,12,9,8}},
+{ 923760, 4, {1283,10,9,8}},
+{ 923832, 4, {47,28,27,26}},
+{ 923940, 4, {59,29,27,20}},
+{ 923976, 4, {313,41,9,8}},
+{ 924000, 4, {35,33,32,25}},
+{ 924075, 4, {37,37,27,25}},
+{ 924300, 4, {79,26,25,18}},
+{ 924336, 4, {131,21,21,16}},
+{ 924408, 4, {347,37,9,8}},
+{ 924420, 4, {71,31,21,20}},
+{ 924600, 4, {67,25,24,23}},
+{ 924660, 4, {467,15,12,11}},
+{ 924696, 4, {1427,9,9,8}},
+{ 924750, 4, {137,25,18,15}},
+{ 924800, 4, {34,34,32,25}},
+{ 924840, 4, {367,15,14,12}},
+{ 924912, 4, {2141,9,8,6}},
+{ 924984, 4, {443,29,9,8}},
+{ 925020, 4, {571,15,12,9}},
+{ 925200, 4, {257,16,15,15}},
+{ 925272, 4, {181,71,9,8}},
+{ 925344, 4, {36,34,28,27}},
+{ 925380, 4, {97,53,15,12}},
+{ 925440, 4, {241,16,16,15}},
+{ 925632, 4, {1607,9,8,8}},
+{ 925740, 4, {139,37,15,12}},
+{ 925776, 4, {2143,9,8,6}},
+{ 925992, 4, {1429,9,9,8}},
+{ 926100, 4, {35,35,28,27}},
+{ 926136, 4, {677,19,9,8}},
+{ 926160, 4, {227,17,16,15}},
+{ 926352, 4, {919,14,9,8}},
+{ 926400, 4, {193,20,16,15}},
+{ 926550, 4, {71,29,25,18}},
+{ 926568, 4, {757,17,9,8}},
+{ 926640, 4, {36,33,30,26}},
+{ 926688, 4, {197,21,16,14}},
+{ 926712, 4, {211,61,9,8}},
+{ 926784, 4, {1609,9,8,8}},
+{ 926820, 4, {271,19,15,12}},
+{ 927000, 4, {103,25,20,18}},
+{ 927024, 4, {89,31,21,16}},
+{ 927072, 4, {37,32,29,27}},
+{ 927144, 4, {163,79,9,8}},
+{ 927180, 4, {101,27,20,17}},
+{ 927288, 4, {53,27,27,24}},
+{ 927360, 4, {36,35,32,23}},
+{ 927432, 4, {1171,11,9,8}},
+{ 927576, 4, {991,13,9,8}},
+{ 927675, 4, {45,35,31,19}},
+{ 927780, 4, {47,47,21,20}},
+{ 927936, 4, {179,18,18,16}},
+{ 928000, 4, {40,32,29,25}},
+{ 928080, 4, {1289,10,9,8}},
+{ 928200, 4, {35,34,30,26}},
+{ 928512, 4, {36,32,31,26}},
+{ 928560, 4, {73,53,16,15}},
+{ 928584, 4, {1433,9,9,8}},
+{ 928800, 4, {43,32,27,25}},
+{ 928872, 4, {97,24,21,19}},
+{ 928980, 4, {397,15,13,12}},
+{ 929016, 4, {36,34,33,23}},
+{ 929040, 4, {79,28,21,20}},
+{ 929088, 4, {1613,9,8,8}},
+{ 929280, 4, {40,33,32,22}},
+{ 929292, 4, {39,37,28,23}},
+{ 929475, 4, {51,27,27,25}},
+{ 929520, 4, {1291,10,9,8}},
+{ 929664, 4, {269,18,16,12}},
+{ 929736, 4, {349,37,9,8}},
+{ 929760, 4, {149,26,16,15}},
+{ 929880, 4, {41,30,28,27}},
+{ 930048, 4, {173,21,16,16}},
+{ 930069, 4, {49,37,27,19}},
+{ 930096, 4, {2153,9,8,6}},
+{ 930150, 4, {53,27,26,25}},
+{ 930204, 4, {36,33,29,27}},
+{ 930240, 4, {38,34,30,24}},
+{ 930384, 4, {71,26,24,21}},
+{ 930600, 4, {47,33,25,24}},
+{ 930720, 4, {277,16,15,14}},
+{ 930888, 4, {1847,9,8,7}},
+{ 930960, 4, {431,15,12,12}},
+{ 931032, 4, {193,67,9,8}},
+{ 931056, 4, {163,21,17,16}},
+{ 931104, 4, {61,53,18,16}},
+{ 931392, 4, {36,33,28,28}},
+{ 931464, 4, {761,17,9,8}},
+{ 931500, 4, {46,30,27,25}},
+{ 931728, 4, {59,47,21,16}},
+{ 931770, 4, {35,34,29,27}},
+{ 931840, 4, {35,32,32,26}},
+{ 931860, 4, {167,31,15,12}},
+{ 931896, 4, {43,43,24,21}},
+{ 931920, 4, {353,16,15,11}},
+{ 931950, 4, {109,25,19,18}},
+{ 932328, 4, {563,23,9,8}},
+{ 932472, 4, {1439,9,9,8}},
+{ 932544, 4, {1619,9,8,8}},
+{ 932715, 4, {47,35,27,21}},
+{ 932800, 4, {53,32,25,22}},
+{ 932832, 4, {79,41,18,16}},
+{ 932880, 4, {40,39,26,23}},
+{ 932940, 4, {73,71,15,12}},
+{ 932976, 4, {38,33,31,24}},
+{ 933120, 4, {36,32,30,27}},
+{ 933192, 4, {997,13,9,8}},
+{ 933240, 4, {101,22,21,20}},
+{ 933300, 4, {61,34,25,18}},
+{ 933504, 4, {34,33,32,26}},
+{ 933552, 4, {2161,9,8,6}},
+{ 933600, 4, {389,16,15,10}},
+{ 933660, 4, {38,35,27,26}},
+{ 933696, 4, {1621,9,8,8}},
+{ 933750, 4, {83,25,25,18}},
+{ 933800, 4, {40,35,29,23}},
+{ 933840, 4, {1297,10,9,8}},
+{ 933912, 4, {109,24,21,17}},
+{ 933984, 4, {47,32,27,23}},
+{ 934080, 4, {139,21,20,16}},
+{ 934320, 4, {229,17,16,15}},
+{ 934344, 4, {683,19,9,8}},
+{ 934380, 4, {179,29,15,12}},
+{ 934416, 4, {103,24,21,18}},
+{ 934500, 4, {89,25,21,20}},
+{ 934560, 4, {59,30,24,22}},
+{ 934605, 4, {43,35,27,23}},
+{ 934650, 4, {67,31,25,18}},
+{ 934740, 4, {577,15,12,9}},
+{ 934752, 4, {107,26,21,16}},
+{ 934800, 4, {41,38,25,24}},
+{ 935088, 4, {44,33,28,23}},
+{ 935136, 4, {191,18,17,16}},
+{ 935208, 4, {419,31,9,8}},
+{ 935280, 4, {433,15,12,12}},
+{ 935340, 4, {131,21,20,17}},
+{ 935352, 4, {1181,11,9,8}},
+{ 935424, 4, {36,32,29,28}},
+{ 935550, 4, {35,33,30,27}},
+{ 935712, 4, {38,38,27,24}},
+{ 935784, 4, {317,41,9,8}},
+{ 936096, 4, {199,21,16,14}},
+{ 936225, 4, {73,27,25,19}},
+{ 936240, 4, {83,47,16,15}},
+{ 936320, 4, {38,35,32,22}},
+{ 936432, 4, {929,14,9,8}},
+{ 936468, 4, {39,36,29,23}},
+{ 936576, 4, {271,18,16,12}},
+{ 936684, 4, {59,28,27,21}},
+{ 936720, 4, {1301,10,9,8}},
+{ 936900, 4, {347,15,15,12}},
+{ 936936, 4, {39,33,28,26}},
+{ 937020, 4, {97,23,21,20}},
+{ 937125, 4, {45,35,35,17}},
+{ 937152, 4, {1627,9,8,8}},
+{ 937200, 4, {71,25,24,22}},
+{ 937260, 4, {127,41,15,12}},
+{ 937368, 4, {277,47,9,8}},
+{ 937512, 4, {449,29,9,8}},
+{ 937656, 4, {1447,9,9,8}},
+{ 937728, 4, {37,33,32,24}},
+{ 937800, 4, {521,15,12,10}},
+{ 937860, 4, {35,33,29,28}},
+{ 937944, 4, {1861,9,8,7}},
+{ 938160, 4, {1303,10,9,8}},
+{ 938232, 4, {157,83,9,8}},
+{ 938250, 4, {139,25,18,15}},
+{ 938304, 4, {181,18,18,16}},
+{ 938340, 4, {401,15,13,12}},
+{ 938520, 4, {79,27,22,20}},
+{ 938700, 4, {149,21,20,15}},
+{ 938784, 4, {127,22,21,16}},
+{ 938880, 4, {163,20,18,16}},
+{ 938952, 4, {46,28,27,27}},
+{ 939060, 4, {47,37,27,20}},
+{ 939168, 4, {1087,12,9,8}},
+{ 939420, 4, {307,17,15,12}},
+{ 939456, 4, {233,18,16,14}},
+{ 939672, 4, {421,31,9,8}},
+{ 939744, 4, {251,18,16,13}},
+{ 939780, 4, {227,23,15,12}},
+{ 939960, 4, {373,15,14,12}},
+{ 940000, 4, {47,32,25,25}},
+{ 940032, 4, {34,32,32,27}},
+{ 940104, 4, {1187,11,9,8}},
+{ 940212, 4, {41,39,28,21}},
+{ 940248, 4, {1451,9,9,8}},
+{ 940392, 4, {353,37,9,8}},
+{ 940680, 4, {67,27,26,20}},
+{ 940800, 4, {35,32,30,28}},
+{ 940824, 4, {179,73,9,8}},
+{ 940896, 4, {33,33,32,27}},
+{ 940950, 4, {41,34,27,25}},
+{ 940968, 4, {1867,9,8,7}},
+{ 940992, 4, {39,32,29,26}},
+{ 941040, 4, {1307,10,9,8}},
+{ 941160, 4, {40,33,31,23}},
+{ 941220, 4, {83,27,21,20}},
+{ 941256, 4, {769,17,9,8}},
+{ 941328, 4, {2179,9,8,6}},
+{ 941400, 4, {523,15,12,10}},
+{ 941544, 4, {1453,9,9,8}},
+{ 941625, 4, {45,31,27,25}},
+{ 941640, 4, {59,38,21,20}},
+{ 941688, 4, {41,33,29,24}},
+{ 941832, 4, {127,103,9,8}},
+{ 941850, 4, {39,35,30,23}},
+{ 941920, 4, {35,32,29,29}},
+{ 941976, 4, {89,24,21,21}},
+{ 942240, 4, {151,26,16,15}},
+{ 942264, 4, {569,23,9,8}},
+{ 942300, 4, {349,15,15,12}},
+{ 942400, 4, {38,32,31,25}},
+{ 942480, 4, {34,33,30,28}},
+{ 942624, 4, {1091,12,9,8}},
+{ 942732, 4, {43,29,28,27}},
+{ 942840, 4, {97,27,20,18}},
+{ 942912, 4, {1637,9,8,8}},
+{ 942984, 4, {1871,9,8,7}},
+{ 943299, 4, {49,31,27,23}},
+{ 943740, 4, {107,21,21,20}},
+{ 943776, 4, {113,29,18,16}},
+{ 943824, 4, {53,53,21,16}},
+{ 943950, 4, {35,31,30,29}},
+{ 943992, 4, {1873,9,8,7}},
+{ 944000, 4, {59,32,25,20}},
+{ 944055, 4, {37,35,27,27}},
+{ 944064, 4, {149,22,18,16}},
+{ 944136, 4, {47,31,27,24}},
+{ 944160, 4, {281,16,15,14}},
+{ 944352, 4, {1093,12,9,8}},
+{ 944424, 4, {1009,13,9,8}},
+{ 944496, 4, {937,14,9,8}},
+{ 944622, 4, {49,34,27,21}},
+{ 944640, 4, {41,32,30,24}},
+{ 944820, 4, {181,29,15,12}},
+{ 944856, 4, {1193,11,9,8}},
+{ 944880, 4, {127,31,16,15}},
+{ 944928, 4, {193,18,17,16}},
+{ 945000, 4, {35,30,30,30}},
+{ 945120, 4, {179,22,16,15}},
+{ 945168, 4, {97,29,21,16}},
+{ 945180, 4, {89,59,15,12}},
+{ 945252, 4, {33,33,31,28}},
+{ 945288, 4, {691,19,9,8}},
+{ 945432, 4, {1459,9,9,8}},
+{ 945504, 4, {67,28,24,21}},
+{ 945540, 4, {103,27,20,17}},
+{ 945576, 4, {571,23,9,8}},
+{ 945600, 4, {197,20,16,15}},
+{ 946008, 4, {1877,9,8,7}},
+{ 946080, 4, {73,27,24,20}},
+{ 946152, 4, {773,17,9,8}},
+{ 946176, 4, {33,32,32,28}},
+{ 946200, 4, {83,25,24,19}},
+{ 946400, 4, {40,35,26,26}},
+{ 946440, 4, {239,22,15,12}},
+{ 946560, 4, {34,32,30,29}},
+{ 946656, 4, {173,19,18,16}},
+{ 946800, 4, {263,16,15,15}},
+{ 946944, 4, {137,24,18,16}},
+{ 947016, 4, {1879,9,8,7}},
+{ 947025, 4, {61,27,25,23}},
+{ 947100, 4, {41,33,28,25}},
+{ 947200, 4, {37,32,32,25}},
+{ 947232, 4, {39,33,32,23}},
+{ 947304, 4, {223,59,9,8}},
+{ 947340, 4, {277,19,15,12}},
+{ 947376, 4, {43,34,27,24}},
+{ 947520, 4, {47,30,28,24}},
+{ 947760, 4, {359,16,15,11}},
+{ 947808, 4, {1097,12,9,8}},
+{ 947835, 4, {59,35,27,17}},
+{ 947856, 4, {39,31,28,28}},
+{ 947940, 4, {61,37,21,20}},
+{ 948000, 4, {79,25,24,20}},
+{ 948024, 4, {38,33,28,27}},
+{ 948060, 4, {229,23,15,12}},
+{ 948150, 4, {43,35,30,21}},
+{ 948168, 4, {1013,13,9,8}},
+{ 948240, 4, {439,15,12,12}},
+{ 948384, 4, {89,37,18,16}},
+{ 948420, 4, {479,15,12,11}},
+{ 948480, 4, {38,32,30,26}},
+{ 948528, 4, {941,14,9,8}},
+{ 948672, 4, {61,27,24,24}},
+{ 948720, 4, {67,59,16,15}},
+{ 949050, 4, {38,37,27,25}},
+{ 949104, 4, {39,36,26,26}},
+{ 949200, 4, {113,21,20,20}},
+{ 949320, 4, {293,18,15,12}},
+{ 949344, 4, {33,32,31,29}},
+{ 949440, 4, {43,32,30,23}},
+{ 949536, 4, {157,21,18,16}},
+{ 949680, 4, {1319,10,9,8}},
+{ 949725, 4, {67,27,25,21}},
+{ 949896, 4, {167,79,9,8}},
+{ 950040, 4, {36,35,29,26}},
+{ 950160, 4, {107,37,16,15}},
+{ 950208, 4, {101,28,21,16}},
+{ 950328, 4, {197,67,9,8}},
+{ 950400, 4, {33,32,30,30}},
+{ 950460, 4, {73,31,21,20}},
+{ 950472, 4, {307,43,9,8}},
+{ 950640, 4, {233,17,16,15}},
+{ 950796, 4, {49,33,28,21}},
+{ 950880, 4, {283,16,15,14}},
+{ 950904, 4, {281,47,9,8}},
+{ 950940, 4, {587,15,12,9}},
+{ 950976, 4, {127,26,18,16}},
+{ 951048, 4, {37,34,28,27}},
+{ 951120, 4, {1321,10,9,8}},
+{ 951192, 4, {1201,11,9,8}},
+{ 951200, 4, {41,32,29,25}},
+{ 951216, 4, {149,21,19,16}},
+{ 951300, 4, {151,21,20,15}},
+{ 951336, 4, {181,73,9,8}},
+{ 951600, 4, {61,26,25,24}},
+{ 951615, 4, {53,35,27,19}},
+{ 951660, 4, {311,17,15,12}},
+{ 951696, 4, {2203,9,8,6}},
+{ 951720, 4, {103,22,21,20}},
+{ 951750, 4, {47,30,27,25}},
+{ 952000, 4, {35,34,32,25}},
+{ 952020, 4, {43,41,27,20}},
+{ 952056, 4, {1889,9,8,7}},
+{ 952128, 4, {38,32,29,27}},
+{ 952200, 4, {45,40,23,23}},
+{ 952224, 4, {109,26,21,16}},
+{ 952320, 4, {32,32,31,30}},
+{ 952425, 4, {83,27,25,17}},
+{ 952512, 4, {41,33,32,22}},
+{ 952560, 4, {36,35,28,27}},
+{ 952632, 4, {131,101,9,8}},
+{ 952650, 4, {73,29,25,18}},
+{ 952740, 4, {79,67,15,12}},
+{ 952800, 4, {397,16,15,10}},
+{ 952992, 4, {1103,12,9,8}},
+{ 953064, 4, {61,31,24,21}},
+{ 953100, 4, {353,15,15,12}},
+{ 953120, 4, {37,35,32,23}},
+{ 953208, 4, {1471,9,9,8}},
+{ 953280, 4, {331,16,15,12}},
+{ 953424, 4, {2207,9,8,6}},
+{ 953520, 4, {137,29,16,15}},
+{ 953568, 4, {43,33,28,24}},
+{ 953784, 4, {1019,13,9,8}},
+{ 953856, 4, {36,36,32,23}},
+{ 953904, 4, {167,21,17,16}},
+{ 954000, 4, {53,30,25,24}},
+{ 954216, 4, {457,29,9,8}},
+{ 954360, 4, {241,22,15,12}},
+{ 954408, 4, {39,38,28,23}},
+{ 954432, 4, {1657,9,8,8}},
+{ 954450, 4, {101,25,21,18}},
+{ 954480, 4, {97,41,16,15}},
+{ 954576, 4, {947,14,9,8}},
+{ 954600, 4, {43,37,25,24}},
+{ 954792, 4, {149,89,9,8}},
+{ 954800, 4, {40,35,31,22}},
+{ 954960, 4, {173,23,16,15}},
+{ 955080, 4, {379,15,14,12}},
+{ 955152, 4, {67,27,24,22}},
+{ 955200, 4, {199,20,16,15}},
+{ 955206, 4, {49,38,27,19}},
+{ 955260, 4, {61,29,27,20}},
+{ 955296, 4, {107,31,18,16}},
+{ 955416, 4, {47,33,28,22}},
+{ 955440, 4, {1327,10,9,8}},
+{ 955500, 4, {35,35,30,26}},
+{ 955512, 4, {577,23,9,8}},
+{ 955584, 4, {79,24,24,21}},
+{ 955656, 4, {1021,13,9,8}},
+{ 955680, 4, {181,22,16,15}},
+{ 955800, 4, {59,27,25,24}},
+{ 955980, 4, {113,47,15,12}},
+{ 956016, 4, {2213,9,8,6}},
+{ 956340, 4, {36,35,33,23}},
+{ 956376, 4, {359,37,9,8}},
+{ 956448, 4, {41,32,27,27}},
+{ 956592, 4, {73,26,24,21}},
+{ 956736, 4, {151,22,18,16}},
+{ 956760, 4, {67,34,21,20}},
+{ 956808, 4, {137,97,9,8}},
+{ 956880, 4, {443,15,12,12}},
+{ 957000, 4, {40,33,29,25}},
+{ 957060, 4, {409,15,13,12}},
+{ 957180, 4, {53,43,21,20}},
+{ 957264, 4, {37,33,28,28}},
+{ 957312, 4, {277,18,16,12}},
+{ 957528, 4, {36,33,31,26}},
+{ 957672, 4, {283,47,9,8}},
+{ 957780, 4, {313,17,15,12}},
+{ 957816, 4, {251,53,9,8}},
+{ 957825, 4, {43,33,27,25}},
+{ 957840, 4, {307,16,15,13}},
+{ 957888, 4, {1663,9,8,8}},
+{ 958104, 4, {1901,9,8,7}},
+{ 958176, 4, {1109,12,9,8}},
+{ 958230, 4, {39,35,27,26}},
+{ 958272, 4, {42,32,31,23}},
+{ 958320, 4, {40,33,33,22}},
+{ 958440, 4, {163,21,20,14}},
+{ 958464, 4, {36,32,32,26}},
+{ 958500, 4, {71,27,25,20}},
+{ 958800, 4, {47,34,25,24}},
+{ 958968, 4, {701,19,9,8}},
+{ 959040, 4, {37,32,30,27}},
+{ 959175, 4, {35,35,29,27}},
+{ 959220, 4, {73,73,15,12}},
+{ 959364, 4, {47,28,27,27}},
+{ 959472, 4, {2221,9,8,6}},
+{ 959688, 4, {1481,9,9,8}},
+{ 959760, 4, {43,31,30,24}},
+{ 959850, 4, {79,27,25,18}},
+{ 959976, 4, {199,67,9,8}},
+{ 960000, 4, {40,32,30,25}},
+{ 960120, 4, {127,21,20,18}},
+{ 960192, 4, {1667,9,8,8}},
+{ 960300, 4, {97,25,22,18}},
+{ 960624, 4, {953,14,9,8}},
+{ 960660, 4, {593,15,12,9}},
+{ 960696, 4, {1213,11,9,8}},
+{ 960768, 4, {139,24,18,16}},
+{ 960876, 4, {41,31,28,27}},
+{ 960960, 4, {35,33,32,26}},
+{ 960984, 4, {1483,9,9,8}},
+{ 961020, 4, {281,19,15,12}},
+{ 961056, 4, {71,47,18,16}},
+{ 961128, 4, {1907,9,8,7}},
+{ 961200, 4, {89,27,20,20}},
+{ 961344, 4, {1669,9,8,8}},
+{ 961380, 4, {109,21,21,20}},
+{ 961632, 4, {53,28,27,24}},
+{ 961920, 4, {167,20,18,16}},
+{ 961992, 4, {431,31,9,8}},
+{ 962136, 4, {83,24,23,21}},
+{ 962160, 4, {211,19,16,15}},
+{ 962208, 4, {257,18,16,13}},
+{ 962220, 4, {79,29,21,20}},
+{ 962280, 4, {36,33,30,27}},
+{ 962304, 4, {179,21,16,16}},
+{ 962388, 4, {67,28,27,19}},
+{ 962400, 4, {401,16,15,10}},
+{ 962550, 4, {46,31,27,25}},
+{ 962568, 4, {461,29,9,8}},
+{ 962640, 4, {191,21,16,15}},
+{ 962856, 4, {311,43,9,8}},
+{ 963000, 4, {107,25,20,18}},
+{ 963072, 4, {38,33,32,24}},
+{ 963144, 4, {42,39,28,21}},
+{ 963200, 4, {43,32,28,25}},
+{ 963288, 4, {787,17,9,8}},
+{ 963312, 4, {61,47,21,16}},
+{ 963360, 4, {223,18,16,15}},
+{ 963540, 4, {101,53,15,12}},
+{ 963576, 4, {1487,9,9,8}},
+{ 963585, 4, {49,45,23,19}},
+{ 963600, 4, {73,25,24,22}},
+{ 963648, 4, {239,18,16,14}},
+{ 963840, 4, {251,16,16,15}},
+{ 963864, 4, {1217,11,9,8}},
+{ 963900, 4, {35,34,30,27}},
+{ 963984, 4, {151,21,19,16}},
+{ 964152, 4, {1913,9,8,7}},
+{ 964224, 4, {36,32,31,27}},
+{ 964260, 4, {487,15,12,11}},
+{ 964296, 4, {227,59,9,8}},
+{ 964440, 4, {47,38,27,20}},
+{ 964467, 4, {49,27,27,27}},
+{ 964512, 4, {197,18,17,16}},
+{ 964620, 4, {233,23,15,12}},
+{ 964656, 4, {36,33,29,28}},
+{ 964800, 4, {67,25,24,24}},
+{ 964872, 4, {1489,9,9,8}},
+{ 965016, 4, {1031,13,9,8}},
+{ 965088, 4, {1117,12,9,8}},
+{ 965160, 4, {383,15,14,12}},
+{ 965328, 4, {39,34,28,26}},
+{ 965340, 4, {173,31,15,12}},
+{ 965448, 4, {53,33,24,23}},
+{ 965925, 4, {53,27,27,25}},
+{ 965952, 4, {43,32,27,26}},
+{ 966000, 4, {40,35,30,23}},
+{ 966150, 4, {113,25,19,18}},
+{ 966168, 4, {71,27,24,21}},
+{ 966240, 4, {61,30,24,22}},
+{ 966384, 4, {2237,9,8,6}},
+{ 966456, 4, {433,31,9,8}},
+{ 966672, 4, {137,21,21,16}},
+{ 966735, 4, {35,33,31,27}},
+{ 966744, 4, {463,29,9,8}},
+{ 966780, 4, {131,41,15,12}},
+{ 966888, 4, {1033,13,9,8}},
+{ 967032, 4, {37,33,33,24}},
+{ 967176, 4, {101,24,21,19}},
+{ 967248, 4, {2239,9,8,6}},
+{ 967440, 4, {139,29,16,15}},
+{ 967464, 4, {1493,9,9,8}},
+{ 967608, 4, {151,89,9,8}},
+{ 967680, 4, {36,32,30,28}},
+{ 967824, 4, {47,33,26,24}},
+{ 967860, 4, {283,19,15,12}},
+{ 967920, 4, {109,37,16,15}},
+{ 968016, 4, {67,43,21,16}},
+{ 968112, 4, {83,27,24,18}},
+{ 968184, 4, {113,24,21,17}},
+{ 968352, 4, {131,22,21,16}},
+{ 968400, 4, {269,16,15,15}},
+{ 968436, 4, {61,28,27,21}},
+{ 968544, 4, {59,32,27,19}},
+{ 968616, 4, {1223,11,9,8}},
+{ 968625, 4, {41,35,27,25}},
+{ 968760, 4, {39,36,30,23}},
+{ 968832, 4, {36,32,29,29}},
+{ 968880, 4, {367,16,15,11}},
+{ 968976, 4, {2243,9,8,6}},
+{ 969024, 4, {103,28,21,16}},
+{ 969048, 4, {313,43,9,8}},
+{ 969300, 4, {359,15,15,12}},
+{ 969408, 4, {34,33,32,27}},
+{ 969570, 4, {38,35,27,27}},
+{ 969840, 4, {449,15,12,12}},
+{ 969912, 4, {709,19,9,8}},
+{ 970020, 4, {317,17,15,12}},
+{ 970200, 4, {35,33,30,28}},
+{ 970272, 4, {1123,12,9,8}},
+{ 970320, 4, {311,16,15,13}},
+{ 970380, 4, {599,15,12,9}},
+{ 970560, 4, {337,16,15,12}},
+{ 970704, 4, {107,24,21,18}},
+{ 970776, 4, {139,97,9,8}},
+{ 971100, 4, {83,26,25,18}},
+{ 971136, 4, {281,18,16,12}},
+{ 971208, 4, {47,41,24,21}},
+{ 971250, 4, {37,35,30,25}},
+{ 971280, 4, {71,30,24,19}},
+{ 971352, 4, {1499,9,9,8}},
+{ 971496, 4, {131,103,9,8}},
+{ 971520, 4, {40,33,32,23}},
+{ 971550, 4, {127,25,18,17}},
+{ 971712, 4, {241,18,16,14}},
+{ 971880, 4, {89,26,21,20}},
+{ 972072, 4, {587,23,9,8}},
+{ 972160, 4, {35,32,31,28}},
+{ 972180, 4, {491,15,12,11}},
+{ 972288, 4, {211,18,16,16}},
+{ 972405, 4, {49,35,27,21}},
+{ 972432, 4, {2251,9,8,6}},
+{ 972504, 4, {1039,13,9,8}},
+{ 972648, 4, {79,27,24,19}},
+{ 972720, 4, {193,21,16,15}},
+{ 972792, 4, {229,59,9,8}},
+{ 972800, 4, {38,32,32,25}},
+{ 972972, 4, {39,33,28,27}},
+{ 973056, 4, {181,21,16,16}},
+{ 973080, 4, {53,34,27,20}},
+{ 973152, 4, {109,31,18,16}},
+{ 973224, 4, {1931,9,8,7}},
+{ 973350, 4, {103,25,21,18}},
+{ 973368, 4, {1229,11,9,8}},
+{ 973440, 4, {39,32,30,26}},
+{ 973560, 4, {61,38,21,20}},
+{ 973620, 4, {601,15,12,9}},
+{ 973728, 4, {46,28,28,27}},
+{ 973800, 4, {541,15,12,10}},
+{ 973896, 4, {34,33,31,28}},
+{ 974025, 4, {39,37,27,25}},
+{ 974064, 4, {223,21,16,13}},
+{ 974088, 4, {163,83,9,8}},
+{ 974160, 4, {41,33,30,24}},
+{ 974232, 4, {1933,9,8,7}},
+{ 974304, 4, {199,18,17,16}},
+{ 974400, 4, {35,32,30,29}},
+{ 974592, 4, {47,32,27,24}},
+{ 974640, 4, {131,31,16,15}},
+{ 974700, 4, {38,38,27,25}},
+{ 974736, 4, {967,14,9,8}},
+{ 974952, 4, {1231,11,9,8}},
+{ 975000, 4, {40,39,25,25}},
+{ 975096, 4, {467,29,9,8}},
+{ 975120, 4, {239,17,16,15}},
+{ 975168, 4, {1693,9,8,8}},
+{ 975200, 4, {53,32,25,23}},
+{ 975240, 4, {43,30,28,27}},
+{ 975456, 4, {1129,12,9,8}},
+{ 975528, 4, {797,17,9,8}},
+{ 975600, 4, {271,16,15,15}},
+{ 975660, 4, {101,23,21,20}},
+{ 975744, 4, {33,33,32,28}},
+{ 975936, 4, {39,34,32,23}},
+{ 976000, 4, {61,32,25,20}},
+{ 976080, 4, {83,28,21,20}},
+{ 976392, 4, {191,71,9,8}},
+{ 976500, 4, {35,31,30,30}},
+{ 976560, 4, {313,16,15,13}},
+{ 976752, 4, {38,34,28,27}},
+{ 976800, 4, {37,33,32,25}},
+{ 976860, 4, {67,27,27,20}},
+{ 977040, 4, {59,30,24,23}},
+{ 977112, 4, {331,41,9,8}},
+{ 977130, 4, {47,35,27,22}},
+{ 977220, 4, {89,61,15,12}},
+{ 977472, 4, {1697,9,8,8}},
+{ 977600, 4, {47,32,26,25}},
+{ 977688, 4, {367,37,9,8}},
+{ 977760, 4, {97,24,21,20}},
+{ 977850, 4, {53,41,25,18}},
+{ 978048, 4, {283,18,16,12}},
+{ 978075, 4, {45,35,27,23}},
+{ 978096, 4, {71,41,21,16}},
+{ 978180, 4, {137,21,20,17}},
+{ 978336, 4, {79,43,18,16}},
+{ 978408, 4, {127,107,9,8}},
+{ 978432, 4, {39,32,28,28}},
+{ 978624, 4, {1699,9,8,8}},
+{ 978768, 4, {971,14,9,8}},
+{ 978880, 4, {38,35,32,23}},
+{ 979020, 4, {37,35,28,27}},
+{ 979128, 4, {1511,9,9,8}},
+{ 979200, 4, {34,32,30,30}},
+{ 979272, 4, {67,29,24,21}},
+{ 979344, 4, {2267,9,8,6}},
+{ 979416, 4, {223,61,9,8}},
+{ 979488, 4, {179,19,18,16}},
+{ 979524, 4, {39,39,28,23}},
+{ 979680, 4, {157,26,16,15}},
+{ 979704, 4, {1237,11,9,8}},
+{ 979776, 4, {36,36,28,27}},
+{ 979800, 4, {71,25,24,23}},
+{ 979848, 4, {439,31,9,8}},
+{ 979920, 4, {1361,10,9,8}},
+{ 979965, 4, {61,35,27,17}},
+{ 979968, 4, {33,32,32,29}},
+{ 980000, 4, {35,35,32,25}},
+{ 980064, 4, {83,41,18,16}},
+{ 980208, 4, {2269,9,8,6}},
+{ 980280, 4, {389,15,14,12}},
+{ 980343, 4, {49,39,27,19}},
+{ 980352, 4, {37,36,32,23}},
+{ 980400, 4, {43,38,25,24}},
+{ 980460, 4, {419,15,13,12}},
+{ 980640, 4, {227,18,16,15}},
+{ 980712, 4, {257,53,9,8}},
+{ 980784, 4, {139,21,21,16}},
+{ 980880, 4, {67,61,16,15}},
+{ 980928, 4, {131,26,18,16}},
+{ 981000, 4, {109,25,20,18}},
+{ 981180, 4, {79,27,23,20}},
+{ 981288, 4, {59,28,27,22}},
+{ 981360, 4, {47,30,29,24}},
+{ 981432, 4, {317,43,9,8}},
+{ 981456, 4, {127,23,21,16}},
+{ 981600, 4, {409,16,15,10}},
+{ 981708, 4, {39,31,29,28}},
+{ 981720, 4, {101,27,20,18}},
+{ 981864, 4, {1049,13,9,8}},
+{ 981936, 4, {2273,9,8,6}},
+{ 981960, 4, {167,21,20,14}},
+{ 982008, 4, {593,23,9,8}},
+{ 982080, 4, {33,32,31,30}},
+{ 982125, 4, {97,27,25,15}},
+{ 982128, 4, {79,37,21,16}},
+{ 982260, 4, {107,27,20,17}},
+{ 982296, 4, {1949,9,8,7}},
+{ 982350, 4, {59,37,25,18}},
+{ 982620, 4, {103,53,15,12}},
+{ 982800, 4, {36,35,30,26}},
+{ 982980, 4, {127,43,15,12}},
+{ 983016, 4, {41,37,27,24}},
+{ 983040, 4, {32,32,32,30}},
+{ 983136, 4, {38,33,28,28}},
+{ 983280, 4, {241,17,16,15}},
+{ 983304, 4, {1951,9,8,7}},
+{ 983340, 4, {607,15,12,9}},
+{ 983475, 4, {47,31,27,25}},
+{ 983592, 4, {719,19,9,8}},
+{ 983664, 4, {36,36,33,23}},
+{ 983736, 4, {1051,13,9,8}},
+{ 984000, 4, {41,32,30,25}},
+{ 984024, 4, {173,79,9,8}},
+{ 984144, 4, {101,29,21,16}},
+{ 984240, 4, {1367,10,9,8}},
+{ 984312, 4, {42,31,28,27}},
+{ 984375, 4, {45,35,25,25}},
+{ 984384, 4, {1709,9,8,8}},
+{ 984480, 4, {293,16,15,14}},
+{ 984600, 4, {547,15,12,10}},
+{ 984672, 4, {263,18,16,13}},
+{ 984720, 4, {373,16,15,11}},
+{ 984816, 4, {977,14,9,8}},
+{ 984960, 4, {38,32,30,27}},
+{ 984984, 4, {41,33,28,26}},
+{ 985140, 4, {421,15,13,12}},
+{ 985320, 4, {36,35,34,23}},
+{ 985392, 4, {2281,9,8,6}},
+{ 985500, 4, {73,27,25,20}},
+{ 985600, 4, {40,35,32,22}},
+{ 985608, 4, {39,36,27,26}},
+{ 985680, 4, {37,37,30,24}},
+{ 985800, 4, {53,31,25,24}},
+{ 985824, 4, {163,21,18,16}},
+{ 986040, 4, {83,27,22,20}},
+{ 986076, 4, {43,39,28,21}},
+{ 986328, 4, {103,24,21,19}},
+{ 986580, 4, {36,35,29,27}},
+{ 986616, 4, {193,71,9,8}},
+{ 986832, 4, {89,24,22,21}},
+{ 986850, 4, {43,34,27,25}},
+{ 986880, 4, {257,16,16,15}},
+{ 986904, 4, {1523,9,9,8}},
+{ 986976, 4, {149,23,18,16}},
+{ 987120, 4, {457,15,12,12}},
+{ 987168, 4, {113,26,21,16}},
+{ 987360, 4, {40,34,33,22}},
+{ 987525, 4, {45,35,33,19}},
+{ 987624, 4, {43,33,29,24}},
+{ 987660, 4, {59,31,27,20}},
+{ 987840, 4, {36,35,28,28}},
+{ 987984, 4, {2287,9,8,6}},
+{ 988020, 4, {499,15,12,11}},
+{ 988080, 4, {179,23,16,15}},
+{ 988128, 4, {73,47,18,16}},
+{ 988176, 4, {173,21,17,16}},
+{ 988200, 4, {61,27,25,24}},
+{ 988344, 4, {53,37,24,21}},
+{ 988416, 4, {36,33,32,26}},
+{ 988560, 4, {1373,10,9,8}},
+{ 988680, 4, {107,22,21,20}},
+{ 988776, 4, {443,31,9,8}},
+{ 988848, 4, {109,24,21,18}},
+{ 989040, 4, {317,16,15,13}},
+{ 989100, 4, {157,21,20,15}},
+{ 989184, 4, {42,32,32,23}},
+{ 989208, 4, {1249,11,9,8}},
+{ 989280, 4, {229,18,16,15}},
+{ 989400, 4, {97,25,24,17}},
+{ 989460, 4, {239,23,15,12}},
+{ 989784, 4, {233,59,9,8}},
+{ 990000, 4, {40,33,30,25}},
+{ 990080, 4, {35,34,32,26}},
+{ 990144, 4, {191,18,18,16}},
+{ 990150, 4, {41,35,30,23}},
+{ 990216, 4, {809,17,9,8}},
+{ 990360, 4, {131,21,20,18}},
+{ 990432, 4, {181,19,18,16}},
+{ 990450, 4, {71,31,25,18}},
+{ 990576, 4, {2293,9,8,6}},
+{ 990675, 4, {45,37,35,17}},
+{ 990720, 4, {43,32,30,24}},
+{ 990864, 4, {983,14,9,8}},
+{ 990900, 4, {367,15,15,12}},
+{ 991008, 4, {37,32,31,27}},
+{ 991200, 4, {59,28,25,24}},
+{ 991296, 4, {1721,9,8,8}},
+{ 991452, 4, {37,33,29,28}},
+{ 991512, 4, {293,47,9,8}},
+{ 991536, 4, {227,21,16,13}},
+{ 991872, 4, {41,32,28,27}},
+{ 991944, 4, {599,23,9,8}},
+{ 992000, 4, {40,32,31,25}},
+{ 992088, 4, {1531,9,9,8}},
+{ 992160, 4, {53,30,26,24}},
+{ 992250, 4, {35,35,30,27}},
+{ 992304, 4, {2297,9,8,6}},
+{ 992340, 4, {149,37,15,12}},
+{ 992448, 4, {1723,9,8,8}},
+{ 992460, 4, {139,21,20,17}},
+{ 992544, 4, {211,21,16,14}},
+{ 992640, 4, {47,32,30,22}},
+{ 992664, 4, {811,17,9,8}},
+{ 992880, 4, {197,21,16,15}},
+{ 993060, 4, {613,15,12,9}},
+{ 993096, 4, {1061,13,9,8}},
+{ 993168, 4, {38,33,33,24}},
+{ 993300, 4, {43,33,28,25}},
+{ 993384, 4, {73,27,24,21}},
+{ 993672, 4, {373,37,9,8}},
+{ 993720, 4, {39,35,28,26}},
+{ 993840, 4, {101,41,16,15}},
+{ 993960, 4, {251,22,15,12}},
+{ 994032, 4, {59,27,26,24}},
+{ 994050, 4, {47,47,25,18}},
+{ 994320, 4, {1381,10,9,8}},
+{ 994356, 4, {36,33,31,27}},
+{ 994392, 4, {1973,9,8,7}},
+{ 994464, 4, {1151,12,9,8}},
+{ 994536, 4, {727,19,9,8}},
+{ 994560, 4, {37,32,30,28}},
+{ 994680, 4, {307,18,15,12}},
+{ 994752, 4, {157,22,18,16}},
+{ 994824, 4, {337,41,9,8}},
+{ 994896, 4, {47,28,28,27}},
+{ 994950, 4, {67,27,25,22}},
+{ 994968, 4, {1063,13,9,8}},
+{ 994980, 4, {103,23,21,20}},
+{ 995085, 4, {39,35,27,27}},
+{ 995220, 4, {97,27,20,19}},
+{ 995256, 4, {601,23,9,8}},
+{ 995280, 4, {40,33,29,26}},
+{ 995328, 4, {36,32,32,27}},
+{ 995400, 4, {79,25,24,21}},
+{ 995625, 4, {59,27,25,25}},
+{ 995760, 4, {461,15,12,12}},
+{ 995808, 4, {41,33,32,23}},
+{ 995940, 4, {503,15,12,11}},
+{ 995976, 4, {53,29,27,24}},
+{ 996000, 4, {83,25,24,20}},
+{ 996030, 4, {35,34,31,27}},
+{ 996072, 4, {49,33,28,22}},
+{ 996192, 4, {1153,12,9,8}},
+{ 996264, 4, {137,101,9,8}},
+{ 996336, 4, {37,34,33,24}},
+{ 996480, 4, {173,20,18,16}},
+{ 996660, 4, {113,21,21,20}},
+{ 996696, 4, {127,109,9,8}},
+{ 996840, 4, {71,27,26,20}},
+{ 996984, 4, {227,61,9,8}},
+{ 997020, 4, {191,29,15,12}},
+{ 997128, 4, {1259,11,9,8}},
+{ 997200, 4, {277,16,15,15}},
+{ 997416, 4, {1979,9,8,7}},
+{ 997488, 4, {2309,9,8,6}},
+{ 997500, 4, {38,35,30,25}},
+{ 997600, 4, {43,32,29,25}},
+{ 997740, 4, {241,23,15,12}},
+{ 997920, 4, {36,33,30,28}},
+{ 997992, 4, {167,83,9,8}},
+{ 998200, 4, {40,35,31,23}},
+{ 998208, 4, {1733,9,8,8}},
+{ 998325, 4, {51,29,27,25}},
+{ 998352, 4, {2311,9,8,6}},
+{ 998400, 4, {40,32,30,26}},
+{ 998460, 4, {43,43,27,20}},
+{ 998568, 4, {67,27,24,23}},
+{ 998640, 4, {73,30,24,19}},
+{ 998784, 4, {34,34,32,27}},
+{ 998820, 4, {179,31,15,12}},
+{ 998844, 4, {47,33,28,23}},
+{ 998928, 4, {991,14,9,8}},
+{ 998976, 4, {43,33,32,22}},
+{ 999108, 4, {36,33,29,29}},
+{ 999120, 4, {181,23,16,15}},
+{ 999360, 4, {347,16,15,12}},
+{ 999540, 4, {617,15,12,9}},
+{ 999600, 4, {35,34,30,28}},
+{ 999864, 4, {1543,9,9,8}},
+{ 999900, 4, {101,25,22,18}},
+{ 999936, 4, {36,32,31,28}},
+{ 216, 5, {4,3,3,3,2}},
+{ 324, 5, {4,3,3,3,3}},
+{ 432, 5, {4,4,3,3,3}},
+{ 648, 5, {6,4,3,3,3}},
+{ 864, 5, {6,4,4,3,3}},
+{ 1296, 5, {6,6,4,3,3}},
+{ 1728, 5, {6,6,4,4,3}},
+{ 2592, 5, {6,6,6,4,3}},
+{ 9000, 5, {9,8,5,5,5}},
+{ 10800, 5, {9,8,6,5,5}},
+{ 12600, 5, {9,8,7,5,5}},
+{ 14400, 5, {9,8,8,5,5}},
+{ 15552, 5, {9,8,6,6,6}},
+{ 16200, 5, {9,9,8,5,5}},
+{ 18144, 5, {9,8,7,6,6}},
+{ 20736, 5, {9,8,8,6,6}},
+{ 21168, 5, {9,8,7,7,6}},
+{ 23328, 5, {9,9,8,6,6}},
+{ 24192, 5, {9,8,8,7,6}},
+{ 24696, 5, {9,8,7,7,7}},
+{ 25920, 5, {10,9,8,6,6}},
+{ 27216, 5, {9,9,8,7,6}},
+{ 27648, 5, {9,8,8,8,6}},
+{ 28224, 5, {9,8,8,7,7}},
+{ 28512, 5, {11,9,8,6,6}},
+{ 30240, 5, {10,9,8,7,6}},
+{ 31104, 5, {9,9,8,8,6}},
+{ 31752, 5, {9,9,8,7,7}},
+{ 32256, 5, {9,8,8,8,7}},
+{ 33264, 5, {11,9,8,7,6}},
+{ 33696, 5, {13,9,8,6,6}},
+{ 34560, 5, {10,9,8,8,6}},
+{ 34992, 5, {9,9,9,8,6}},
+{ 35280, 5, {10,9,8,7,7}},
+{ 36288, 5, {9,9,8,8,7}},
+{ 36864, 5, {9,8,8,8,8}},
+{ 38016, 5, {11,9,8,8,6}},
+{ 38808, 5, {11,9,8,7,7}},
+{ 38880, 5, {10,9,9,8,6}},
+{ 39312, 5, {13,9,8,7,6}},
+{ 40320, 5, {10,9,8,8,7}},
+{ 40824, 5, {9,9,9,8,7}},
+{ 41472, 5, {9,9,8,8,8}},
+{ 42336, 5, {12,9,8,7,7}},
+{ 42768, 5, {11,9,9,8,6}},
+{ 43200, 5, {10,10,9,8,6}},
+{ 44064, 5, {17,9,8,6,6}},
+{ 44352, 5, {11,9,8,8,7}},
+{ 44928, 5, {13,9,8,8,6}},
+{ 45360, 5, {10,9,9,8,7}},
+{ 45864, 5, {13,9,8,7,7}},
+{ 46080, 5, {10,9,8,8,8}},
+{ 46656, 5, {9,9,9,8,8}},
+{ 47520, 5, {11,10,9,8,6}},
+{ 48384, 5, {12,9,8,8,7}},
+{ 49248, 5, {19,9,8,6,6}},
+{ 49896, 5, {11,9,9,8,7}},
+{ 50400, 5, {10,10,9,8,7}},
+{ 50544, 5, {13,9,9,8,6}},
+{ 50688, 5, {11,9,8,8,8}},
+{ 51408, 5, {17,9,8,7,6}},
+{ 51840, 5, {10,9,9,8,8}},
+{ 52272, 5, {11,11,9,8,6}},
+{ 52416, 5, {13,9,8,8,7}},
+{ 52488, 5, {9,9,9,9,8}},
+{ 54432, 5, {12,9,9,8,7}},
+{ 55296, 5, {12,9,8,8,8}},
+{ 55440, 5, {11,10,9,8,7}},
+{ 56160, 5, {13,10,9,8,6}},
+{ 57024, 5, {11,9,9,8,8}},
+{ 57456, 5, {19,9,8,7,6}},
+{ 57600, 5, {10,10,9,8,8}},
+{ 58320, 5, {10,9,9,9,8}},
+{ 58752, 5, {17,9,8,8,6}},
+{ 58968, 5, {13,9,9,8,7}},
+{ 59616, 5, {23,9,8,6,6}},
+{ 59904, 5, {13,9,8,8,8}},
+{ 59976, 5, {17,9,8,7,7}},
+{ 60480, 5, {12,10,9,8,7}},
+{ 60984, 5, {11,11,9,8,7}},
+{ 61776, 5, {13,11,9,8,6}},
+{ 62208, 5, {12,9,9,8,8}},
+{ 63360, 5, {11,10,9,8,8}},
+{ 64152, 5, {11,9,9,9,8}},
+{ 64800, 5, {10,10,9,9,8}},
+{ 65520, 5, {13,10,9,8,7}},
+{ 65664, 5, {19,9,8,8,6}},
+{ 66096, 5, {17,9,9,8,6}},
+{ 66528, 5, {12,11,9,8,7}},
+{ 67032, 5, {19,9,8,7,7}},
+{ 67392, 5, {13,9,9,8,8}},
+{ 68544, 5, {17,9,8,8,7}},
+{ 69120, 5, {12,10,9,8,8}},
+{ 69552, 5, {23,9,8,7,6}},
+{ 69696, 5, {11,11,9,8,8}},
+{ 69984, 5, {12,9,9,9,8}},
+{ 71280, 5, {11,10,9,9,8}},
+{ 72000, 5, {10,10,10,9,8}},
+{ 72072, 5, {13,11,9,8,7}},
+{ 72576, 5, {12,12,9,8,7}},
+{ 73008, 5, {13,13,9,8,6}},
+{ 73440, 5, {17,10,9,8,6}},
+{ 73872, 5, {19,9,9,8,6}},
+{ 74880, 5, {13,10,9,8,8}},
+{ 75168, 5, {29,9,8,6,6}},
+{ 75816, 5, {13,9,9,9,8}},
+{ 76032, 5, {12,11,9,8,8}},
+{ 76608, 5, {19,9,8,8,7}},
+{ 77112, 5, {17,9,9,8,7}},
+{ 77760, 5, {12,10,9,9,8}},
+{ 78336, 5, {17,9,8,8,8}},
+{ 78408, 5, {11,11,9,9,8}},
+{ 78624, 5, {13,12,9,8,7}},
+{ 79200, 5, {11,10,10,9,8}},
+{ 79488, 5, {23,9,8,8,6}},
+{ 80352, 5, {31,9,8,6,6}},
+{ 80784, 5, {17,11,9,8,6}},
+{ 81144, 5, {23,9,8,7,7}},
+{ 82080, 5, {19,10,9,8,6}},
+{ 82368, 5, {13,11,9,8,8}},
+{ 82944, 5, {12,12,9,8,8}},
+{ 84240, 5, {13,10,9,9,8}},
+{ 85176, 5, {13,13,9,8,7}},
+{ 85536, 5, {12,11,9,9,8}},
+{ 85680, 5, {17,10,9,8,7}},
+{ 86184, 5, {19,9,9,8,7}},
+{ 86400, 5, {12,10,10,9,8}},
+{ 87120, 5, {11,11,10,9,8}},
+{ 87552, 5, {19,9,8,8,8}},
+{ 87696, 5, {29,9,8,7,6}},
+{ 88128, 5, {17,9,9,8,8}},
+{ 89424, 5, {23,9,9,8,6}},
+{ 89856, 5, {13,12,9,8,8}},
+{ 90288, 5, {19,11,9,8,6}},
+{ 92664, 5, {13,11,9,9,8}},
+{ 92736, 5, {23,9,8,8,7}},
+{ 93312, 5, {12,12,9,9,8}},
+{ 93600, 5, {13,10,10,9,8}},
+{ 93744, 5, {31,9,8,7,6}},
+{ 94248, 5, {17,11,9,8,7}},
+{ 95040, 5, {12,11,10,9,8}},
+{ 95472, 5, {17,13,9,8,6}},
+{ 95760, 5, {19,10,9,8,7}},
+{ 95832, 5, {11,11,11,9,8}},
+{ 95904, 5, {37,9,8,6,6}},
+{ 97344, 5, {13,13,9,8,8}},
+{ 97920, 5, {17,10,9,8,8}},
+{ 98496, 5, {19,9,9,8,8}},
+{ 98784, 5, {14,14,9,8,7}},
+{ 99144, 5, {17,9,9,9,8}},
+{ 99360, 5, {23,10,9,8,6}},
+{ 100224, 5, {29,9,8,8,6}},
+{ 101088, 5, {13,12,9,9,8}},
+{ 102312, 5, {29,9,8,7,7}},
+{ 102816, 5, {17,12,9,8,7}},
+{ 102960, 5, {13,11,10,9,8}},
+{ 103680, 5, {12,12,10,9,8}},
+{ 104328, 5, {23,9,9,8,7}},
+{ 104544, 5, {12,11,11,9,8}},
+{ 104832, 5, {14,13,9,8,8}},
+{ 105336, 5, {19,11,9,8,7}},
+{ 105984, 5, {23,9,8,8,8}},
+{ 106272, 5, {41,9,8,6,6}},
+{ 106704, 5, {19,13,9,8,6}},
+{ 107136, 5, {31,9,8,8,6}},
+{ 107712, 5, {17,11,9,8,8}},
+{ 109296, 5, {23,11,9,8,6}},
+{ 109368, 5, {31,9,8,7,7}},
+{ 109440, 5, {19,10,9,8,8}},
+{ 109512, 5, {13,13,9,9,8}},
+{ 110160, 5, {17,10,9,9,8}},
+{ 110808, 5, {19,9,9,9,8}},
+{ 111384, 5, {17,13,9,8,7}},
+{ 111456, 5, {43,9,8,6,6}},
+{ 111888, 5, {37,9,8,7,6}},
+{ 112320, 5, {13,12,10,9,8}},
+{ 112752, 5, {29,9,9,8,6}},
+{ 112896, 5, {14,14,9,8,8}},
+{ 113256, 5, {13,11,11,9,8}},
+{ 114048, 5, {12,12,11,9,8}},
+{ 114912, 5, {19,12,9,8,7}},
+{ 115920, 5, {23,10,9,8,7}},
+{ 116928, 5, {29,9,8,8,7}},
+{ 117504, 5, {17,12,9,8,8}},
+{ 117936, 5, {14,13,9,9,8}},
+{ 119232, 5, {23,9,9,8,8}},
+{ 119952, 5, {17,14,9,8,7}},
+{ 120384, 5, {19,11,9,8,8}},
+{ 120528, 5, {31,9,9,8,6}},
+{ 121176, 5, {17,11,9,9,8}},
+{ 121680, 5, {13,13,10,9,8}},
+{ 121824, 5, {47,9,8,6,6}},
+{ 122400, 5, {17,10,10,9,8}},
+{ 123120, 5, {19,10,9,9,8}},
+{ 123552, 5, {13,12,11,9,8}},
+{ 123984, 5, {41,9,8,7,6}},
+{ 124416, 5, {12,12,12,9,8}},
+{ 124488, 5, {19,13,9,8,7}},
+{ 124848, 5, {17,17,9,8,6}},
+{ 124992, 5, {31,9,8,8,7}},
+{ 125280, 5, {29,10,9,8,6}},
+{ 127008, 5, {14,14,9,9,8}},
+{ 127296, 5, {17,13,9,8,8}},
+{ 127512, 5, {23,11,9,8,7}},
+{ 127872, 5, {37,9,8,8,6}},
+{ 129168, 5, {23,13,9,8,6}},
+{ 130032, 5, {43,9,8,7,6}},
+{ 130536, 5, {37,9,8,7,7}},
+{ 131040, 5, {14,13,10,9,8}},
+{ 131220, 5, {15,12,9,9,9}},
+{ 131328, 5, {19,12,9,8,8}},
+{ 131544, 5, {29,9,9,8,7}},
+{ 132192, 5, {17,12,9,9,8}},
+{ 132480, 5, {23,10,9,8,8}},
+{ 133632, 5, {29,9,8,8,8}},
+{ 133848, 5, {13,13,11,9,8}},
+{ 133920, 5, {31,10,9,8,6}},
+{ 134064, 5, {19,14,9,8,7}},
+{ 134136, 5, {23,9,9,9,8}},
+{ 134640, 5, {17,11,10,9,8}},
+{ 134784, 5, {13,12,12,9,8}},
+{ 135432, 5, {19,11,9,9,8}},
+{ 136800, 5, {19,10,10,9,8}},
+{ 137088, 5, {17,14,9,8,8}},
+{ 137376, 5, {53,9,8,6,6}},
+{ 137808, 5, {29,11,9,8,6}},
+{ 139104, 5, {23,12,9,8,7}},
+{ 139536, 5, {19,17,9,8,6}},
+{ 140616, 5, {31,9,9,8,7}},
+{ 141120, 5, {14,14,10,9,8}},
+{ 141696, 5, {41,9,8,8,6}},
+{ 142128, 5, {47,9,8,7,6}},
+{ 142272, 5, {19,13,9,8,8}},
+{ 142848, 5, {31,9,8,8,8}},
+{ 143208, 5, {17,13,9,9,8}},
+{ 143856, 5, {37,9,9,8,6}},
+{ 144144, 5, {14,13,11,9,8}},
+{ 144648, 5, {41,9,8,7,7}},
+{ 145656, 5, {17,17,9,8,7}},
+{ 145728, 5, {23,11,9,8,8}},
+{ 145800, 5, {15,12,10,9,9}},
+{ 146016, 5, {13,13,12,9,8}},
+{ 146160, 5, {29,10,9,8,7}},
+{ 146880, 5, {17,12,10,9,8}},
+{ 147312, 5, {31,11,9,8,6}},
+{ 147744, 5, {19,12,9,9,8}},
+{ 148104, 5, {17,11,11,9,8}},
+{ 148608, 5, {43,9,8,8,6}},
+{ 149040, 5, {23,10,9,9,8}},
+{ 149184, 5, {37,9,8,8,7}},
+{ 150336, 5, {29,9,9,8,8}},
+{ 150480, 5, {19,11,10,9,8}},
+{ 150696, 5, {23,13,9,8,7}},
+{ 151704, 5, {43,9,8,7,7}},
+{ 152928, 5, {59,9,8,6,6}},
+{ 153216, 5, {19,14,9,8,8}},
+{ 154224, 5, {17,14,9,9,8}},
+{ 155232, 5, {14,14,11,9,8}},
+{ 155952, 5, {19,19,9,8,6}},
+{ 156240, 5, {31,10,9,8,7}},
+{ 157248, 5, {14,13,12,9,8}},
+{ 158112, 5, {61,9,8,6,6}},
+{ 158184, 5, {13,13,13,9,8}},
+{ 158976, 5, {23,12,9,8,8}},
+{ 159120, 5, {17,13,10,9,8}},
+{ 159408, 5, {41,9,9,8,6}},
+{ 159840, 5, {37,10,9,8,6}},
+{ 160056, 5, {19,13,9,9,8}},
+{ 160272, 5, {53,9,8,7,6}},
+{ 160380, 5, {15,12,11,9,9}},
+{ 160704, 5, {31,9,9,8,8}},
+{ 160776, 5, {29,11,9,8,7}},
+{ 161568, 5, {17,12,11,9,8}},
+{ 162000, 5, {15,12,10,10,9}},
+{ 162288, 5, {23,14,9,8,7}},
+{ 162432, 5, {47,9,8,8,6}},
+{ 162792, 5, {19,17,9,8,7}},
+{ 162864, 5, {29,13,9,8,6}},
+{ 163944, 5, {23,11,9,9,8}},
+{ 164160, 5, {19,12,10,9,8}},
+{ 165312, 5, {41,9,8,8,7}},
+{ 165528, 5, {19,11,11,9,8}},
+{ 165600, 5, {23,10,10,9,8}},
+{ 165816, 5, {47,9,8,7,7}},
+{ 166464, 5, {17,17,9,8,8}},
+{ 167040, 5, {29,10,9,8,8}},
+{ 167184, 5, {43,9,9,8,6}},
+{ 167832, 5, {37,9,9,8,7}},
+{ 168912, 5, {23,17,9,8,6}},
+{ 169128, 5, {29,9,9,9,8}},
+{ 169344, 5, {14,14,12,9,8}},
+{ 170352, 5, {14,13,13,9,8}},
+{ 170496, 5, {37,9,8,8,8}},
+{ 171360, 5, {17,14,10,9,8}},
+{ 171864, 5, {31,11,9,8,7}},
+{ 172224, 5, {23,13,9,8,8}},
+{ 172368, 5, {19,14,9,9,8}},
+{ 173376, 5, {43,9,8,8,7}},
+{ 173664, 5, {67,9,8,6,6}},
+{ 174096, 5, {31,13,9,8,6}},
+{ 174960, 5, {15,12,12,9,9}},
+{ 175032, 5, {17,13,11,9,8}},
+{ 175392, 5, {29,12,9,8,7}},
+{ 175824, 5, {37,11,9,8,6}},
+{ 176256, 5, {17,12,12,9,8}},
+{ 177120, 5, {41,10,9,8,6}},
+{ 177840, 5, {19,13,10,9,8}},
+{ 178200, 5, {15,12,11,10,9}},
+{ 178416, 5, {59,9,8,7,6}},
+{ 178560, 5, {31,10,9,8,8}},
+{ 178848, 5, {23,12,9,9,8}},
+{ 180000, 5, {15,12,10,10,10}},
+{ 180576, 5, {19,12,11,9,8}},
+{ 180792, 5, {31,9,9,9,8}},
+{ 181944, 5, {19,19,9,8,7}},
+{ 182160, 5, {23,11,10,9,8}},
+{ 182736, 5, {47,9,9,8,6}},
+{ 183168, 5, {53,9,8,8,6}},
+{ 183456, 5, {14,14,13,9,8}},
+{ 183744, 5, {29,11,9,8,8}},
+{ 184032, 5, {71,9,8,6,6}},
+{ 184464, 5, {61,9,8,7,6}},
+{ 185472, 5, {23,14,9,8,8}},
+{ 185760, 5, {43,10,9,8,6}},
+{ 185976, 5, {41,9,9,8,7}},
+{ 186048, 5, {19,17,9,8,8}},
+{ 186480, 5, {37,10,9,8,7}},
+{ 186984, 5, {53,9,8,7,7}},
+{ 187272, 5, {17,17,9,9,8}},
+{ 187488, 5, {31,12,9,8,7}},
+{ 187920, 5, {29,10,9,9,8}},
+{ 188496, 5, {17,14,11,9,8}},
+{ 188784, 5, {23,19,9,8,6}},
+{ 188928, 5, {41,9,8,8,8}},
+{ 189216, 5, {73,9,8,6,6}},
+{ 189504, 5, {47,9,8,8,7}},
+{ 189540, 5, {15,13,12,9,9}},
+{ 190008, 5, {29,13,9,8,7}},
+{ 190944, 5, {17,13,12,9,8}},
+{ 191520, 5, {19,14,10,9,8}},
+{ 191808, 5, {37,9,9,8,8}},
+{ 193752, 5, {23,13,9,9,8}},
+{ 194400, 5, {15,12,12,10,9}},
+{ 194832, 5, {41,11,9,8,6}},
+{ 195048, 5, {43,9,9,8,7}},
+{ 195624, 5, {19,13,11,9,8}},
+{ 196020, 5, {15,12,11,11,9}},
+{ 196416, 5, {31,11,9,8,8}},
+{ 196992, 5, {19,12,12,9,8}},
+{ 197064, 5, {23,17,9,8,7}},
+{ 197568, 5, {14,14,14,9,8}},
+{ 198000, 5, {15,12,11,10,10}},
+{ 198144, 5, {43,9,8,8,8}},
+{ 198720, 5, {23,12,10,9,8}},
+{ 200376, 5, {23,11,11,9,8}},
+{ 200448, 5, {29,12,9,8,8}},
+{ 200880, 5, {31,10,9,9,8}},
+{ 202608, 5, {67,9,8,7,6}},
+{ 203040, 5, {47,10,9,8,6}},
+{ 203112, 5, {31,13,9,8,7}},
+{ 203904, 5, {59,9,8,8,6}},
+{ 204120, 5, {15,14,12,9,9}},
+{ 204336, 5, {43,11,9,8,6}},
+{ 204624, 5, {29,14,9,8,7}},
+{ 204768, 5, {79,9,8,6,6}},
+{ 205128, 5, {37,11,9,8,7}},
+{ 205632, 5, {17,14,12,9,8}},
+{ 206064, 5, {53,9,9,8,6}},
+{ 206640, 5, {41,10,9,8,7}},
+{ 206712, 5, {29,11,9,9,8}},
+{ 206856, 5, {17,13,13,9,8}},
+{ 207792, 5, {37,13,9,8,6}},
+{ 207936, 5, {19,19,9,8,8}},
+{ 208080, 5, {17,17,10,9,8}},
+{ 208152, 5, {59,9,8,7,7}},
+{ 208656, 5, {23,14,9,9,8}},
+{ 208800, 5, {29,10,10,9,8}},
+{ 209304, 5, {19,17,9,9,8}},
+{ 210600, 5, {15,13,12,10,9}},
+{ 210672, 5, {19,14,11,9,8}},
+{ 210816, 5, {61,9,8,8,6}},
+{ 212544, 5, {41,9,9,8,8}},
+{ 212976, 5, {29,17,9,8,6}},
+{ 213120, 5, {37,10,9,8,8}},
+{ 213192, 5, {47,9,9,8,7}},
+{ 213408, 5, {19,13,12,9,8}},
+{ 213696, 5, {53,9,8,8,7}},
+{ 213840, 5, {15,12,12,11,9}},
+{ 214272, 5, {31,12,9,8,8}},
+{ 214704, 5, {71,9,8,7,6}},
+{ 215136, 5, {83,9,8,6,6}},
+{ 215208, 5, {61,9,8,7,7}},
+{ 215280, 5, {23,13,10,9,8}},
+{ 215784, 5, {37,9,9,9,8}},
+{ 216000, 5, {15,12,12,10,10}},
+{ 216576, 5, {47,9,8,8,8}},
+{ 216720, 5, {43,10,9,8,7}},
+{ 217152, 5, {29,13,9,8,8}},
+{ 217800, 5, {15,12,11,11,10}},
+{ 218592, 5, {23,12,11,9,8}},
+{ 218700, 5, {15,15,12,9,9}},
+{ 218736, 5, {31,14,9,8,7}},
+{ 220248, 5, {23,19,9,8,7}},
+{ 220752, 5, {73,9,8,7,6}},
+{ 220968, 5, {31,11,9,9,8}},
+{ 222768, 5, {17,14,13,9,8}},
+{ 222912, 5, {43,9,9,8,8}},
+{ 223200, 5, {31,10,10,9,8}},
+{ 223344, 5, {47,11,9,8,6}},
+{ 223776, 5, {37,12,9,8,7}},
+{ 225216, 5, {23,17,9,8,8}},
+{ 225504, 5, {29,12,9,9,8}},
+{ 226800, 5, {15,14,12,10,9}},
+{ 227304, 5, {41,11,9,8,7}},
+{ 227664, 5, {31,17,9,8,6}},
+{ 228528, 5, {23,23,9,8,6}},
+{ 228888, 5, {17,17,11,9,8}},
+{ 228960, 5, {53,10,9,8,6}},
+{ 229392, 5, {59,9,9,8,6}},
+{ 229680, 5, {29,11,10,9,8}},
+{ 229824, 5, {19,14,12,9,8}},
+{ 230256, 5, {41,13,9,8,6}},
+{ 230688, 5, {89,9,8,6,6}},
+{ 231192, 5, {19,13,13,9,8}},
+{ 231552, 5, {67,9,8,8,6}},
+{ 231660, 5, {15,13,12,11,9}},
+{ 231840, 5, {23,14,10,9,8}},
+{ 232128, 5, {31,13,9,8,8}},
+{ 232560, 5, {19,17,10,9,8}},
+{ 233280, 5, {15,12,12,12,9}},
+{ 233856, 5, {29,14,9,8,8}},
+{ 233928, 5, {19,19,9,9,8}},
+{ 234000, 5, {15,13,12,10,10}},
+{ 234432, 5, {37,11,9,8,8}},
+{ 236160, 5, {41,10,9,8,8}},
+{ 236376, 5, {67,9,8,7,7}},
+{ 236808, 5, {23,13,11,9,8}},
+{ 236880, 5, {47,10,9,8,7}},
+{ 237168, 5, {61,9,9,8,6}},
+{ 237600, 5, {15,12,12,11,10}},
+{ 237888, 5, {59,9,8,8,7}},
+{ 238032, 5, {29,19,9,8,6}},
+{ 238392, 5, {43,11,9,8,7}},
+{ 238464, 5, {23,12,12,9,8}},
+{ 238896, 5, {79,9,8,7,6}},
+{ 239112, 5, {41,9,9,9,8}},
+{ 239580, 5, {15,12,11,11,11}},
+{ 239760, 5, {37,10,9,9,8}},
+{ 239904, 5, {17,14,14,9,8}},
+{ 240000, 5, {16,15,10,10,10}},
+{ 240408, 5, {53,9,9,8,7}},
+{ 241056, 5, {31,12,9,9,8}},
+{ 241488, 5, {43,13,9,8,6}},
+{ 242424, 5, {37,13,9,8,7}},
+{ 243000, 5, {15,15,12,10,9}},
+{ 243648, 5, {47,9,9,8,8}},
+{ 244224, 5, {53,9,8,8,8}},
+{ 244296, 5, {29,13,9,9,8}},
+{ 245376, 5, {71,9,8,8,6}},
+{ 245520, 5, {31,11,10,9,8}},
+{ 245952, 5, {61,9,8,8,7}},
+{ 247680, 5, {43,10,9,8,8}},
+{ 247860, 5, {17,15,12,9,9}},
+{ 247968, 5, {41,12,9,8,7}},
+{ 248472, 5, {29,17,9,8,7}},
+{ 248976, 5, {19,14,13,9,8}},
+{ 249480, 5, {15,14,12,11,9}},
+{ 249696, 5, {17,17,12,9,8}},
+{ 249984, 5, {31,14,9,8,8}},
+{ 250488, 5, {71,9,8,7,7}},
+{ 250560, 5, {29,12,10,9,8}},
+{ 250776, 5, {43,9,9,9,8}},
+{ 250992, 5, {83,9,8,7,6}},
+{ 251424, 5, {97,9,8,6,6}},
+{ 251712, 5, {23,19,9,8,8}},
+{ 251856, 5, {53,11,9,8,6}},
+{ 252000, 5, {15,14,12,10,10}},
+{ 252288, 5, {73,9,8,8,6}},
+{ 252648, 5, {29,11,11,9,8}},
+{ 252720, 5, {15,13,12,12,9}},
+{ 253368, 5, {23,17,9,9,8}},
+{ 254448, 5, {31,19,9,8,6}},
+{ 254880, 5, {59,10,9,8,6}},
+{ 255024, 5, {23,14,11,9,8}},
+{ 255744, 5, {37,12,9,8,8}},
+{ 255816, 5, {19,17,11,9,8}},
+{ 257400, 5, {15,13,12,11,10}},
+{ 257544, 5, {73,9,8,7,7}},
+{ 258336, 5, {23,13,12,9,8}},
+{ 259200, 5, {15,12,12,12,10}},
+{ 259776, 5, {41,11,9,8,8}},
+{ 259920, 5, {19,19,10,9,8}},
+{ 260064, 5, {43,12,9,8,7}},
+{ 260496, 5, {67,9,9,8,6}},
+{ 260568, 5, {47,11,9,8,7}},
+{ 261072, 5, {37,14,9,8,7}},
+{ 261144, 5, {31,13,9,9,8}},
+{ 261360, 5, {15,12,12,11,11}},
+{ 261792, 5, {101,9,8,6,6}},
+{ 262440, 5, {18,15,12,9,9}},
+{ 263088, 5, {29,14,9,9,8}},
+{ 263520, 5, {61,10,9,8,6}},
+{ 263736, 5, {37,11,9,9,8}},
+{ 263952, 5, {47,13,9,8,6}},
+{ 264000, 5, {16,15,11,10,10}},
+{ 265608, 5, {31,17,9,8,7}},
+{ 265680, 5, {41,10,9,9,8}},
+{ 266400, 5, {37,10,10,9,8}},
+{ 266616, 5, {23,23,9,8,7}},
+{ 266976, 5, {103,9,8,6,6}},
+{ 267120, 5, {53,10,9,8,7}},
+{ 267300, 5, {15,15,12,11,9}},
+{ 267624, 5, {59,9,9,8,7}},
+{ 267840, 5, {31,12,10,9,8}},
+{ 268128, 5, {19,14,14,9,8}},
+{ 268632, 5, {41,13,9,8,7}},
+{ 269136, 5, {89,9,8,7,6}},
+{ 270000, 5, {15,15,12,10,10}},
+{ 270072, 5, {31,11,11,9,8}},
+{ 270144, 5, {67,9,8,8,7}},
+{ 270504, 5, {17,17,13,9,8}},
+{ 270720, 5, {47,10,9,8,8}},
+{ 271440, 5, {29,13,10,9,8}},
+{ 271728, 5, {37,17,9,8,6}},
+{ 271872, 5, {59,9,8,8,8}},
+{ 272160, 5, {15,14,12,12,9}},
+{ 272448, 5, {43,11,9,8,8}},
+{ 273024, 5, {79,9,8,8,6}},
+{ 273780, 5, {15,13,13,12,9}},
+{ 274104, 5, {47,9,9,9,8}},
+{ 274752, 5, {53,9,9,8,8}},
+{ 275400, 5, {17,15,12,10,9}},
+{ 275616, 5, {29,12,11,9,8}},
+{ 276048, 5, {71,9,9,8,6}},
+{ 276696, 5, {61,9,9,8,7}},
+{ 277020, 5, {19,15,12,9,9}},
+{ 277056, 5, {37,13,9,8,8}},
+{ 277200, 5, {15,14,12,11,10}},
+{ 277344, 5, {107,9,8,6,6}},
+{ 277704, 5, {29,19,9,8,7}},
+{ 278208, 5, {23,14,12,9,8}},
+{ 278640, 5, {43,10,9,9,8}},
+{ 278712, 5, {79,9,8,7,7}},
+{ 279072, 5, {19,17,12,9,8}},
+{ 279864, 5, {23,13,13,9,8}},
+{ 280368, 5, {59,11,9,8,6}},
+{ 280800, 5, {15,13,12,12,10}},
+{ 281088, 5, {61,9,8,8,8}},
+{ 281232, 5, {31,14,9,9,8}},
+{ 281520, 5, {23,17,10,9,8}},
+{ 281736, 5, {43,13,9,8,7}},
+{ 282528, 5, {109,9,8,6,6}},
+{ 283140, 5, {15,13,12,11,11}},
+{ 283176, 5, {23,19,9,9,8}},
+{ 283392, 5, {41,12,9,8,8}},
+{ 283824, 5, {73,9,9,8,6}},
+{ 283968, 5, {29,17,9,8,8}},
+{ 284256, 5, {47,12,9,8,7}},
+{ 285120, 5, {15,12,12,12,11}},
+{ 285912, 5, {19,19,11,9,8}},
+{ 286272, 5, {71,9,8,8,7}},
+{ 286848, 5, {83,9,8,8,6}},
+{ 287712, 5, {37,12,9,9,8}},
+{ 288000, 5, {16,15,12,10,10}},
+{ 288144, 5, {29,23,9,8,6}},
+{ 289296, 5, {41,14,9,8,7}},
+{ 289440, 5, {67,10,9,8,6}},
+{ 289872, 5, {61,11,9,8,6}},
+{ 290160, 5, {31,13,10,9,8}},
+{ 290400, 5, {16,15,11,11,10}},
+{ 291312, 5, {17,17,14,9,8}},
+{ 291600, 5, {15,15,12,12,9}},
+{ 292248, 5, {41,11,9,9,8}},
+{ 292320, 5, {29,14,10,9,8}},
+{ 292824, 5, {83,9,8,7,7}},
+{ 292896, 5, {113,9,8,6,6}},
+{ 293040, 5, {37,11,10,9,8}},
+{ 293328, 5, {97,9,8,7,6}},
+{ 293832, 5, {53,11,9,8,7}},
+{ 294336, 5, {73,9,8,8,7}},
+{ 294624, 5, {31,12,11,9,8}},
+{ 294840, 5, {15,14,13,12,9}},
+{ 295200, 5, {41,10,10,9,8}},
+{ 296856, 5, {31,19,9,8,7}},
+{ 297000, 5, {15,15,12,11,10}},
+{ 297216, 5, {43,12,9,8,8}},
+{ 297360, 5, {59,10,9,8,7}},
+{ 297648, 5, {53,13,9,8,6}},
+{ 297792, 5, {47,11,9,8,8}},
+{ 298368, 5, {37,14,9,8,8}},
+{ 298584, 5, {29,13,11,9,8}},
+{ 300672, 5, {29,12,12,9,8}},
+{ 301104, 5, {41,17,9,8,6}},
+{ 301392, 5, {23,14,13,9,8}},
+{ 302328, 5, {19,17,13,9,8}},
+{ 302400, 5, {15,14,12,12,10}},
+{ 302940, 5, {17,15,12,11,9}},
+{ 303408, 5, {43,14,9,8,7}},
+{ 303552, 5, {31,17,9,8,8}},
+{ 303696, 5, {37,19,9,8,6}},
+{ 303912, 5, {67,9,9,8,7}},
+{ 304200, 5, {15,13,13,12,10}},
+{ 304560, 5, {47,10,9,9,8}},
+{ 304704, 5, {23,23,9,8,8}},
+{ 304920, 5, {15,14,12,11,11}},
+{ 305280, 5, {53,10,9,8,8}},
+{ 305424, 5, {101,9,8,7,6}},
+{ 305856, 5, {59,9,9,8,8}},
+{ 306000, 5, {17,15,12,10,10}},
+{ 306504, 5, {43,11,9,9,8}},
+{ 306720, 5, {71,10,9,8,6}},
+{ 307008, 5, {41,13,9,8,8}},
+{ 307152, 5, {79,9,9,8,6}},
+{ 307440, 5, {61,10,9,8,7}},
+{ 307584, 5, {89,9,8,8,6}},
+{ 307800, 5, {19,15,12,10,9}},
+{ 307944, 5, {47,13,9,8,7}},
+{ 308016, 5, {31,23,9,8,6}},
+{ 308736, 5, {67,9,8,8,8}},
+{ 308880, 5, {15,13,12,12,11}},
+{ 309096, 5, {53,9,9,9,8}},
+{ 309600, 5, {43,10,10,9,8}},
+{ 309672, 5, {23,17,11,9,8}},
+{ 311040, 5, {15,12,12,12,12}},
+{ 311472, 5, {103,9,8,7,6}},
+{ 311688, 5, {37,13,9,9,8}},
+{ 311904, 5, {19,19,12,9,8}},
+{ 312000, 5, {16,15,13,10,10}},
+{ 312480, 5, {31,14,10,9,8}},
+{ 313992, 5, {89,9,8,7,7}},
+{ 314640, 5, {23,19,10,9,8}},
+{ 315360, 5, {73,10,9,8,6}},
+{ 315792, 5, {43,17,9,8,6}},
+{ 315900, 5, {15,15,13,12,9}},
+{ 316224, 5, {61,9,9,8,8}},
+{ 316800, 5, {16,15,12,11,10}},
+{ 317016, 5, {37,17,9,8,7}},
+{ 317376, 5, {29,19,9,8,8}},
+{ 317520, 5, {15,14,14,12,9}},
+{ 318384, 5, {67,11,9,8,6}},
+{ 318528, 5, {79,9,8,8,7}},
+{ 318816, 5, {41,12,9,9,8}},
+{ 319176, 5, {31,13,11,9,8}},
+{ 319440, 5, {16,15,11,11,11}},
+{ 319464, 5, {29,17,9,9,8}},
+{ 319680, 5, {37,12,10,9,8}},
+{ 320544, 5, {53,12,9,8,7}},
+{ 320760, 5, {18,15,12,11,9}},
+{ 321408, 5, {31,12,12,9,8}},
+{ 321552, 5, {29,14,11,9,8}},
+{ 321984, 5, {43,13,9,8,8}},
+{ 322056, 5, {71,9,9,8,7}},
+{ 322344, 5, {37,11,11,9,8}},
+{ 322704, 5, {83,9,9,8,6}},
+{ 323568, 5, {107,9,8,7,6}},
+{ 324000, 5, {15,15,12,12,10}},
+{ 324576, 5, {23,14,14,9,8}},
+{ 324720, 5, {41,11,10,9,8}},
+{ 324864, 5, {47,12,9,8,8}},
+{ 325584, 5, {19,17,14,9,8}},
+{ 325728, 5, {29,13,12,9,8}},
+{ 326700, 5, {15,15,12,11,11}},
+{ 327096, 5, {59,11,9,8,7}},
+{ 327168, 5, {71,9,8,8,8}},
+{ 327600, 5, {15,14,13,12,10}},
+{ 329184, 5, {127,9,8,6,6}},
+{ 329616, 5, {109,9,8,7,6}},
+{ 330480, 5, {17,15,12,12,9}},
+{ 330624, 5, {41,14,9,8,8}},
+{ 331128, 5, {73,9,9,8,7}},
+{ 331344, 5, {59,13,9,8,6}},
+{ 331632, 5, {47,14,9,8,7}},
+{ 332640, 5, {15,14,12,12,11}},
+{ 334368, 5, {43,12,9,9,8}},
+{ 334620, 5, {15,13,13,12,11}},
+{ 334656, 5, {83,9,8,8,7}},
+{ 335016, 5, {47,11,9,9,8}},
+{ 335232, 5, {97,9,8,8,6}},
+{ 335340, 5, {23,15,12,9,9}},
+{ 335664, 5, {37,14,9,9,8}},
+{ 335808, 5, {53,11,9,8,8}},
+{ 336000, 5, {16,15,14,10,10}},
+{ 336168, 5, {29,23,9,8,7}},
+{ 336384, 5, {73,9,8,8,8}},
+{ 336528, 5, {41,19,9,8,6}},
+{ 336600, 5, {17,15,12,11,10}},
+{ 336960, 5, {15,13,12,12,12}},
+{ 337392, 5, {71,11,9,8,6}},
+{ 337680, 5, {67,10,9,8,7}},
+{ 337824, 5, {23,17,12,9,8}},
+{ 337896, 5, {19,19,13,9,8}},
+{ 338184, 5, {61,11,9,8,7}},
+{ 338400, 5, {47,10,10,9,8}},
+{ 338580, 5, {19,15,12,11,9}},
+{ 339264, 5, {31,19,9,8,8}},
+{ 339552, 5, {131,9,8,6,6}},
+{ 339840, 5, {59,10,9,8,8}},
+{ 340200, 5, {15,15,14,12,9}},
+{ 340560, 5, {43,11,10,9,8}},
+{ 341280, 5, {79,10,9,8,6}},
+{ 341496, 5, {31,17,9,9,8}},
+{ 341712, 5, {113,9,8,7,6}},
+{ 342000, 5, {19,15,12,10,10}},
+{ 342216, 5, {97,9,8,7,7}},
+{ 342576, 5, {61,13,9,8,6}},
+{ 342792, 5, {23,23,9,9,8}},
+{ 343200, 5, {16,15,13,11,10}},
+{ 343440, 5, {53,10,9,9,8}},
+{ 343728, 5, {31,14,11,9,8}},
+{ 344088, 5, {59,9,9,9,8}},
+{ 345168, 5, {47,17,9,8,6}},
+{ 345384, 5, {41,13,9,9,8}},
+{ 345600, 5, {16,15,12,12,10}},
+{ 346032, 5, {89,9,9,8,6}},
+{ 346104, 5, {23,19,11,9,8}},
+{ 346320, 5, {37,13,10,9,8}},
+{ 346752, 5, {43,14,9,8,8}},
+{ 346896, 5, {73,11,9,8,6}},
+{ 347256, 5, {53,13,9,8,7}},
+{ 347328, 5, {67,9,9,8,8}},
+{ 348192, 5, {31,13,12,9,8}},
+{ 348480, 5, {16,15,12,11,11}},
+{ 349056, 5, {101,9,8,8,6}},
+{ 349920, 5, {18,15,12,12,9}},
+{ 350784, 5, {29,14,12,9,8}},
+{ 351000, 5, {15,15,13,12,10}},
+{ 351288, 5, {41,17,9,8,7}},
+{ 351360, 5, {61,10,9,8,8}},
+{ 351648, 5, {37,12,11,9,8}},
+{ 351936, 5, {47,13,9,8,8}},
+{ 352800, 5, {15,14,14,12,10}},
+{ 352872, 5, {29,13,13,9,8}},
+{ 352944, 5, {43,19,9,8,6}},
+{ 353736, 5, {17,17,17,9,8}},
+{ 354240, 5, {41,12,10,9,8}},
+{ 354312, 5, {37,19,9,8,7}},
+{ 354960, 5, {29,17,10,9,8}},
+{ 355104, 5, {137,9,8,6,6}},
+{ 355752, 5, {61,9,9,9,8}},
+{ 355968, 5, {103,9,8,8,6}},
+{ 356328, 5, {101,9,8,7,7}},
+{ 356400, 5, {15,15,12,12,11}},
+{ 356832, 5, {59,12,9,8,7}},
+{ 357048, 5, {29,19,9,9,8}},
+{ 357192, 5, {41,11,11,9,8}},
+{ 357840, 5, {71,10,9,8,7}},
+{ 358020, 5, {17,15,13,12,9}},
+{ 358344, 5, {79,9,9,8,7}},
+{ 358560, 5, {83,10,9,8,6}},
+{ 358848, 5, {89,9,8,8,7}},
+{ 359352, 5, {31,23,9,8,7}},
+{ 360000, 5, {16,15,15,10,10}},
+{ 360288, 5, {139,9,8,6,6}},
+{ 360360, 5, {15,14,13,12,11}},
+{ 362232, 5, {43,13,9,9,8}},
+{ 362304, 5, {37,17,9,8,8}},
+{ 362880, 5, {15,14,12,12,12}},
+{ 363312, 5, {29,29,9,8,6}},
+{ 363384, 5, {103,9,8,7,7}},
+{ 363888, 5, {19,19,14,9,8}},
+{ 364032, 5, {79,9,8,8,8}},
+{ 364500, 5, {15,15,15,12,9}},
+{ 365040, 5, {15,13,13,12,12}},
+{ 365472, 5, {47,12,9,9,8}},
+{ 365976, 5, {23,17,13,9,8}},
+{ 366336, 5, {53,12,9,8,8}},
+{ 367200, 5, {17,15,12,12,10}},
+{ 367632, 5, {37,23,9,8,6}},
+{ 367920, 5, {73,10,9,8,7}},
+{ 368064, 5, {71,9,9,8,8}},
+{ 368424, 5, {43,17,9,8,7}},
+{ 368928, 5, {61,12,9,8,7}},
+{ 369360, 5, {19,15,12,12,9}},
+{ 369600, 5, {16,15,14,11,10}},
+{ 369792, 5, {107,9,8,8,6}},
+{ 370260, 5, {17,15,12,11,11}},
+{ 371448, 5, {67,11,9,8,7}},
+{ 371520, 5, {43,12,10,9,8}},
+{ 371952, 5, {41,14,9,9,8}},
+{ 372240, 5, {47,11,10,9,8}},
+{ 372600, 5, {23,15,12,10,9}},
+{ 372960, 5, {37,14,10,9,8}},
+{ 373824, 5, {59,11,9,8,8}},
+{ 373968, 5, {53,14,9,8,7}},
+{ 374400, 5, {16,15,13,12,10}},
+{ 374616, 5, {43,11,11,9,8}},
+{ 374976, 5, {31,14,12,9,8}},
+{ 375408, 5, {79,11,9,8,6}},
+{ 376200, 5, {19,15,12,11,10}},
+{ 376272, 5, {67,13,9,8,6}},
+{ 376488, 5, {83,9,9,8,7}},
+{ 376704, 5, {109,9,8,8,6}},
+{ 377136, 5, {97,9,9,8,6}},
+{ 377208, 5, {31,13,13,9,8}},
+{ 377496, 5, {107,9,8,7,7}},
+{ 377520, 5, {16,15,13,11,11}},
+{ 377568, 5, {23,19,12,9,8}},
+{ 377784, 5, {53,11,9,9,8}},
+{ 378000, 5, {15,15,14,12,10}},
+{ 378432, 5, {73,9,9,8,8}},
+{ 379008, 5, {47,14,9,8,8}},
+{ 379080, 5, {18,15,13,12,9}},
+{ 379440, 5, {31,17,10,9,8}},
+{ 380016, 5, {29,14,13,9,8}},
+{ 380160, 5, {16,15,12,12,11}},
+{ 380880, 5, {23,23,10,9,8}},
+{ 380952, 5, {37,13,11,9,8}},
+{ 381600, 5, {53,10,10,9,8}},
+{ 381672, 5, {31,19,9,9,8}},
+{ 382320, 5, {59,10,9,9,8}},
+{ 382464, 5, {83,9,8,8,8}},
+{ 383328, 5, {18,16,11,11,11}},
+{ 383616, 5, {37,12,12,9,8}},
+{ 383760, 5, {41,13,10,9,8}},
+{ 384000, 5, {16,16,15,10,10}},
+{ 384048, 5, {127,9,8,7,6}},
+{ 384192, 5, {29,23,9,8,8}},
+{ 384480, 5, {89,10,9,8,6}},
+{ 384552, 5, {109,9,8,7,7}},
+{ 385560, 5, {17,15,14,12,9}},
+{ 385776, 5, {47,19,9,8,6}},
+{ 385920, 5, {67,10,9,8,8}},
+{ 386100, 5, {15,15,13,12,11}},
+{ 386208, 5, {149,9,8,6,6}},
+{ 386496, 5, {61,11,9,8,8}},
+{ 386568, 5, {59,13,9,8,7}},
+{ 388080, 5, {15,14,14,12,11}},
+{ 388368, 5, {31,29,9,8,6}},
+{ 388800, 5, {15,15,12,12,12}},
+{ 389232, 5, {53,17,9,8,6}},
+{ 389664, 5, {41,12,11,9,8}},
+{ 390096, 5, {43,14,9,9,8}},
+{ 390456, 5, {29,17,11,9,8}},
+{ 390528, 5, {113,9,8,8,6}},
+{ 390744, 5, {67,9,9,9,8}},
+{ 391104, 5, {97,9,8,8,7}},
+{ 391392, 5, {151,9,8,6,6}},
+{ 392040, 5, {18,15,12,11,11}},
+{ 392616, 5, {41,19,9,8,7}},
+{ 392688, 5, {101,9,9,8,6}},
+{ 393120, 5, {15,14,13,12,12}},
+{ 393624, 5, {71,11,9,8,7}},
+{ 394128, 5, {23,17,14,9,8}},
+{ 394416, 5, {83,11,9,8,6}},
+{ 395280, 5, {61,10,9,9,8}},
+{ 395352, 5, {19,17,17,9,8}},
+{ 395460, 5, {15,13,13,13,12}},
+{ 395928, 5, {47,13,9,9,8}},
+{ 396000, 5, {16,15,15,11,10}},
+{ 396144, 5, {131,9,8,7,6}},
+{ 396720, 5, {29,19,10,9,8}},
+{ 396864, 5, {53,13,9,8,8}},
+{ 397800, 5, {17,15,13,12,10}},
+{ 398160, 5, {79,10,9,8,7}},
+{ 398664, 5, {113,9,8,7,7}},
+{ 398736, 5, {71,13,9,8,6}},
+{ 399672, 5, {61,13,9,8,7}},
+{ 400140, 5, {19,15,13,12,9}},
+{ 400464, 5, {103,9,9,8,6}},
+{ 401472, 5, {41,17,9,8,8}},
+{ 402480, 5, {43,13,10,9,8}},
+{ 402696, 5, {47,17,9,8,7}},
+{ 403200, 5, {16,15,14,12,10}},
+{ 403704, 5, {89,9,9,8,7}},
+{ 403920, 5, {17,15,12,12,11}},
+{ 404712, 5, {73,11,9,8,7}},
+{ 404928, 5, {37,19,9,8,8}},
+{ 405000, 5, {15,15,15,12,10}},
+{ 405216, 5, {67,12,9,8,7}},
+{ 405600, 5, {16,15,13,13,10}},
+{ 406080, 5, {47,12,10,9,8}},
+{ 406224, 5, {31,14,13,9,8}},
+{ 406560, 5, {16,15,14,11,11}},
+{ 406944, 5, {157,9,8,6,6}},
+{ 407232, 5, {101,9,8,8,7}},
+{ 407376, 5, {41,23,9,8,6}},
+{ 407592, 5, {37,17,9,9,8}},
+{ 407808, 5, {59,12,9,8,8}},
+{ 408000, 5, {17,16,15,10,10}},
+{ 408240, 5, {18,15,14,12,9}},
+{ 408672, 5, {43,12,11,9,8}},
+{ 408960, 5, {71,10,9,8,8}},
+{ 409032, 5, {23,19,13,9,8}},
+{ 409248, 5, {29,14,14,9,8}},
+{ 409464, 5, {47,11,11,9,8}},
+{ 409536, 5, {79,9,9,8,8}},
+{ 409860, 5, {23,15,12,11,9}},
+{ 409968, 5, {73,13,9,8,6}},
+{ 410112, 5, {89,9,8,8,8}},
+{ 410256, 5, {37,14,11,9,8}},
+{ 410400, 5, {19,15,12,12,10}},
+{ 410688, 5, {31,23,9,8,8}},
+{ 411768, 5, {43,19,9,8,7}},
+{ 411840, 5, {16,15,13,12,11}},
+{ 412128, 5, {53,12,9,9,8}},
+{ 413100, 5, {17,15,15,12,9}},
+{ 413280, 5, {41,14,10,9,8}},
+{ 413820, 5, {19,15,12,11,11}},
+{ 414000, 5, {23,15,12,10,10}},
+{ 414072, 5, {71,9,9,9,8}},
+{ 414288, 5, {137,9,8,7,6}},
+{ 414720, 5, {16,15,12,12,12}},
+{ 415152, 5, {31,31,9,8,6}},
+{ 415296, 5, {103,9,8,8,7}},
+{ 415584, 5, {37,13,12,9,8}},
+{ 415800, 5, {15,15,14,12,11}},
+{ 416016, 5, {107,9,9,8,6}},
+{ 416304, 5, {59,14,9,8,7}},
+{ 417384, 5, {31,17,11,9,8}},
+{ 418176, 5, {18,16,12,11,11}},
+{ 418320, 5, {83,10,9,8,7}},
+{ 418968, 5, {23,23,11,9,8}},
+{ 419040, 5, {97,10,9,8,6}},
+{ 419760, 5, {53,11,10,9,8}},
+{ 420336, 5, {139,9,8,7,6}},
+{ 420480, 5, {73,10,9,8,8}},
+{ 420552, 5, {59,11,9,9,8}},
+{ 421056, 5, {43,17,9,8,8}},
+{ 421200, 5, {15,15,13,12,12}},
+{ 421632, 5, {61,12,9,8,8}},
+{ 422136, 5, {41,13,11,9,8}},
+{ 422400, 5, {16,16,15,11,10}},
+{ 422496, 5, {163,9,8,6,6}},
+{ 422820, 5, {29,15,12,9,9}},
+{ 422928, 5, {89,11,9,8,6}},
+{ 423360, 5, {15,14,14,12,12}},
+{ 423792, 5, {109,9,9,8,6}},
+{ 423864, 5, {29,29,9,8,7}},
+{ 424080, 5, {31,19,10,9,8}},
+{ 424512, 5, {67,11,9,8,8}},
+{ 424800, 5, {59,10,10,9,8}},
+{ 425088, 5, {41,12,12,9,8}},
+{ 425736, 5, {73,9,9,9,8}},
+{ 425880, 5, {15,14,13,13,12}},
+{ 425952, 5, {29,17,12,9,8}},
+{ 426384, 5, {47,14,9,9,8}},
+{ 427248, 5, {43,23,9,8,6}},
+{ 427392, 5, {53,14,9,8,8}},
+{ 427680, 5, {18,15,12,12,11}},
+{ 428400, 5, {17,15,14,12,10}},
+{ 428904, 5, {37,23,9,8,7}},
+{ 429408, 5, {71,12,9,8,7}},
+{ 430272, 5, {83,9,9,8,8}},
+{ 430416, 5, {61,14,9,8,7}},
+{ 430920, 5, {19,15,14,12,9}},
+{ 431424, 5, {107,9,8,8,7}},
+{ 432000, 5, {16,15,15,12,10}},
+{ 432216, 5, {29,23,9,9,8}},
+{ 432864, 5, {167,9,8,6,6}},
+{ 433296, 5, {59,17,9,8,6}},
+{ 433440, 5, {43,14,10,9,8}},
+{ 434160, 5, {67,10,9,9,8}},
+{ 434808, 5, {61,11,9,9,8}},
+{ 435024, 5, {53,19,9,8,6}},
+{ 435600, 5, {16,15,15,11,11}},
+{ 436320, 5, {101,10,9,8,6}},
+{ 436392, 5, {29,19,11,9,8}},
+{ 436800, 5, {16,15,14,13,10}},
+{ 437400, 5, {18,15,15,12,9}},
+{ 437472, 5, {31,14,14,9,8}},
+{ 437580, 5, {17,15,13,12,11}},
+{ 437976, 5, {79,11,9,8,7}},
+{ 438912, 5, {127,9,8,8,6}},
+{ 438984, 5, {67,13,9,8,7}},
+{ 439200, 5, {61,10,10,9,8}},
+{ 439344, 5, {113,9,9,8,6}},
+{ 439488, 5, {109,9,8,8,7}},
+{ 439920, 5, {47,13,10,9,8}},
+{ 439992, 5, {97,9,9,8,7}},
+{ 440496, 5, {23,19,14,9,8}},
+{ 440640, 5, {17,15,12,12,12}},
+{ 441504, 5, {73,12,9,8,7}},
+{ 441792, 5, {59,13,9,8,8}},
+{ 441864, 5, {19,19,17,9,8}},
+{ 442728, 5, {43,13,11,9,8}},
+{ 443520, 5, {16,15,14,12,11}},
+{ 443664, 5, {79,13,9,8,6}},
+{ 444600, 5, {19,15,13,12,10}},
+{ 444960, 5, {103,10,9,8,6}},
+{ 445500, 5, {15,15,15,12,11}},
+{ 445824, 5, {43,12,12,9,8}},
+{ 446160, 5, {16,15,13,13,11}},
+{ 446472, 5, {53,13,9,9,8}},
+{ 446688, 5, {47,12,11,9,8}},
+{ 446976, 5, {97,9,8,8,8}},
+{ 447120, 5, {23,15,12,12,9}},
+{ 447216, 5, {21,16,11,11,11}},
+{ 447552, 5, {37,14,12,9,8}},
+{ 447984, 5, {61,17,9,8,6}},
+{ 448056, 5, {127,9,8,7,7}},
+{ 448416, 5, {173,9,8,6,6}},
+{ 448560, 5, {89,10,9,8,7}},
+{ 448704, 5, {41,19,9,8,8}},
+{ 448800, 5, {17,16,15,11,10}},
+{ 449280, 5, {16,15,13,12,12}},
+{ 449856, 5, {71,11,9,8,8}},
+{ 450072, 5, {47,19,9,8,7}},
+{ 450216, 5, {37,13,13,9,8}},
+{ 450576, 5, {149,9,8,7,6}},
+{ 451440, 5, {19,15,12,12,11}},
+{ 451656, 5, {41,17,9,9,8}},
+{ 451980, 5, {31,15,12,9,9}},
+{ 452736, 5, {131,9,8,8,6}},
+{ 452880, 5, {37,17,10,9,8}},
+{ 453024, 5, {18,16,13,11,11}},
+{ 453096, 5, {31,29,9,8,7}},
+{ 453600, 5, {15,15,14,12,12}},
+{ 454104, 5, {53,17,9,8,7}},
+{ 454608, 5, {41,14,11,9,8}},
+{ 455040, 5, {79,10,9,8,8}},
+{ 455328, 5, {31,17,12,9,8}},
+{ 455400, 5, {23,15,12,11,10}},
+{ 455544, 5, {37,19,9,9,8}},
+{ 455616, 5, {113,9,8,8,7}},
+{ 456000, 5, {19,16,15,10,10}},
+{ 456192, 5, {18,16,12,12,11}},
+{ 456300, 5, {15,15,13,13,12}},
+{ 456624, 5, {151,9,8,7,6}},
+{ 456768, 5, {61,13,9,8,8}},
+{ 457056, 5, {23,23,12,9,8}},
+{ 457920, 5, {53,12,10,9,8}},
+{ 458136, 5, {101,9,9,8,7}},
+{ 458640, 5, {15,14,14,13,12}},
+{ 458784, 5, {59,12,9,9,8}},
+{ 459000, 5, {17,15,15,12,10}},
+{ 460080, 5, {71,10,9,9,8}},
+{ 460152, 5, {83,11,9,8,7}},
+{ 460224, 5, {47,17,9,8,8}},
+{ 460512, 5, {41,13,12,9,8}},
+{ 460728, 5, {79,9,9,9,8}},
+{ 460800, 5, {16,16,15,12,10}},
+{ 460944, 5, {97,11,9,8,6}},
+{ 461376, 5, {89,9,9,8,8}},
+{ 461448, 5, {29,17,13,9,8}},
+{ 461700, 5, {19,15,15,12,9}},
+{ 461736, 5, {53,11,11,9,8}},
+{ 462024, 5, {31,23,9,9,8}},
+{ 462168, 5, {131,9,8,7,7}},
+{ 462240, 5, {107,10,9,8,6}},
+{ 462528, 5, {73,11,9,8,8}},
+{ 463104, 5, {67,12,9,8,8}},
+{ 463320, 5, {18,15,13,12,11}},
+{ 463536, 5, {37,29,9,8,6}},
+{ 463968, 5, {179,9,8,6,6}},
+{ 464640, 5, {16,16,15,11,11}},
+{ 465192, 5, {71,13,9,8,7}},
+{ 465408, 5, {101,9,8,8,8}},
+{ 466128, 5, {83,13,9,8,6}},
+{ 466488, 5, {31,19,11,9,8}},
+{ 466560, 5, {18,15,12,12,12}},
+{ 466992, 5, {47,23,9,8,6}},
+{ 467208, 5, {103,9,9,8,7}},
+{ 467280, 5, {59,11,10,9,8}},
+{ 468000, 5, {16,15,15,13,10}},
+{ 468180, 5, {17,17,15,12,9}},
+{ 469152, 5, {181,9,8,6,6}},
+{ 469800, 5, {29,15,12,10,9}},
+{ 470400, 5, {16,15,14,14,10}},
+{ 470592, 5, {43,19,9,8,8}},
+{ 470880, 5, {109,10,9,8,6}},
+{ 471240, 5, {17,15,14,12,11}},
+{ 472752, 5, {67,14,9,8,7}},
+{ 473040, 5, {73,10,9,9,8}},
+{ 473472, 5, {137,9,8,8,6}},
+{ 473688, 5, {43,17,9,9,8}},
+{ 473760, 5, {47,14,10,9,8}},
+{ 474336, 5, {61,12,9,9,8}},
+{ 474624, 5, {103,9,8,8,8}},
+{ 474768, 5, {157,9,8,7,6}},
+{ 475200, 5, {16,15,15,12,11}},
+{ 475272, 5, {41,23,9,8,7}},
+{ 475776, 5, {59,14,9,8,8}},
+{ 476064, 5, {29,19,12,9,8}},
+{ 476784, 5, {43,14,11,9,8}},
+{ 477360, 5, {17,15,13,12,12}},
+{ 477576, 5, {67,11,9,9,8}},
+{ 477792, 5, {79,12,9,8,7}},
+{ 478080, 5, {83,10,9,8,8}},
+{ 478296, 5, {73,13,9,8,7}},
+{ 478584, 5, {23,17,17,9,8}},
+{ 478800, 5, {19,15,14,12,10}},
+{ 479952, 5, {101,11,9,8,6}},
+{ 480000, 5, {20,16,15,10,10}},
+{ 480240, 5, {29,23,10,9,8}},
+{ 480384, 5, {139,9,8,8,6}},
+{ 480480, 5, {16,15,14,13,11}},
+{ 480816, 5, {53,14,9,9,8}},
+{ 482400, 5, {67,10,10,9,8}},
+{ 482976, 5, {43,13,12,9,8}},
+{ 483120, 5, {61,11,10,9,8}},
+{ 483336, 5, {137,9,8,7,7}},
+{ 483840, 5, {16,15,14,12,12}},
+{ 483912, 5, {47,13,11,9,8}},
+{ 484056, 5, {83,9,9,9,8}},
+{ 484272, 5, {59,19,9,8,6}},
+{ 484344, 5, {31,31,9,8,7}},
+{ 484380, 5, {23,15,13,12,9}},
+{ 484416, 5, {29,29,9,8,8}},
+{ 484848, 5, {37,14,13,9,8}},
+{ 485352, 5, {107,9,9,8,7}},
+{ 486000, 5, {15,15,15,12,12}},
+{ 486720, 5, {16,15,13,13,12}},
+{ 487296, 5, {47,12,12,9,8}},
+{ 487872, 5, {18,16,14,11,11}},
+{ 488160, 5, {113,10,9,8,6}},
+{ 488880, 5, {97,10,9,8,7}},
+{ 489060, 5, {19,15,13,12,11}},
+{ 489456, 5, {103,11,9,8,6}},
+{ 489600, 5, {17,16,15,12,10}},
+{ 490176, 5, {37,23,9,8,8}},
+{ 490392, 5, {139,9,8,7,7}},
+{ 490752, 5, {71,12,9,8,8}},
+{ 491400, 5, {15,15,14,13,12}},
+{ 491904, 5, {61,14,9,8,8}},
+{ 492048, 5, {67,17,9,8,6}},
+{ 492480, 5, {19,15,12,12,12}},
+{ 492912, 5, {163,9,8,7,6}},
+{ 493056, 5, {107,9,8,8,8}},
+{ 493272, 5, {31,17,13,9,8}},
+{ 493416, 5, {89,11,9,8,7}},
+{ 493680, 5, {17,16,15,11,11}},
+{ 493776, 5, {127,9,9,8,6}},
+{ 493848, 5, {19,19,19,9,8}},
+{ 493920, 5, {15,14,14,14,12}},
+{ 494208, 5, {18,16,13,12,11}},
+{ 494424, 5, {109,9,9,8,7}},
+{ 495072, 5, {191,9,8,6,6}},
+{ 495144, 5, {23,23,13,9,8}},
+{ 495504, 5, {37,31,9,8,6}},
+{ 495720, 5, {18,17,15,12,9}},
+{ 495936, 5, {41,14,12,9,8}},
+{ 496080, 5, {53,13,10,9,8}},
+{ 496800, 5, {23,15,12,12,10}},
+{ 496944, 5, {29,17,14,9,8}},
+{ 497016, 5, {59,13,9,9,8}},
+{ 497664, 5, {18,16,12,12,12}},
+{ 498168, 5, {37,17,11,9,8}},
+{ 498456, 5, {43,23,9,8,7}},
+{ 498888, 5, {41,13,13,9,8}},
+{ 498960, 5, {18,15,14,12,11}},
+{ 499200, 5, {16,16,15,13,10}},
+{ 499824, 5, {89,13,9,8,6}},
+{ 500256, 5, {193,9,8,6,6}},
+{ 500544, 5, {79,11,9,8,8}},
+{ 500688, 5, {61,19,9,8,6}},
+{ 500940, 5, {23,15,12,11,11}},
+{ 500976, 5, {71,14,9,8,7}},
+{ 501600, 5, {19,16,15,11,10}},
+{ 501696, 5, {67,13,9,8,8}},
+{ 501840, 5, {41,17,10,9,8}},
+{ 501984, 5, {83,12,9,8,7}},
+{ 502200, 5, {31,15,12,10,9}},
+{ 502272, 5, {109,9,8,8,8}},
+{ 502848, 5, {97,9,9,8,8}},
+{ 503712, 5, {53,12,11,9,8}},
+{ 504000, 5, {16,15,15,14,10}},
+{ 504576, 5, {73,12,9,8,8}},
+{ 504792, 5, {41,19,9,9,8}},
+{ 504900, 5, {17,15,15,12,11}},
+{ 505008, 5, {167,9,8,7,6}},
+{ 505440, 5, {18,15,13,12,12}},
+{ 505512, 5, {59,17,9,8,7}},
+{ 506088, 5, {71,11,9,9,8}},
+{ 506160, 5, {37,19,10,9,8}},
+{ 506880, 5, {16,16,15,12,11}},
+{ 507528, 5, {53,19,9,8,7}},
+{ 508464, 5, {107,11,9,8,6}},
+{ 508896, 5, {31,19,12,9,8}},
+{ 509040, 5, {101,10,9,8,7}},
+{ 509328, 5, {131,9,9,8,6}},
+{ 509760, 5, {59,12,10,9,8}},
+{ 510624, 5, {197,9,8,6,6}},
+{ 511200, 5, {71,10,10,9,8}},
+{ 511920, 5, {79,10,9,9,8}},
+{ 512064, 5, {127,9,8,8,7}},
+{ 512568, 5, {113,9,9,8,7}},
+{ 512640, 5, {89,10,9,8,8}},
+{ 513000, 5, {19,15,15,12,10}},
+{ 513360, 5, {31,23,10,9,8}},
+{ 513648, 5, {41,29,9,8,6}},
+{ 513864, 5, {61,13,9,9,8}},
+{ 514008, 5, {59,11,11,9,8}},
+{ 514080, 5, {17,15,14,12,12}},
+{ 514368, 5, {47,19,9,8,8}},
+{ 514800, 5, {16,15,15,13,11}},
+{ 514944, 5, {149,9,8,8,6}},
+{ 515088, 5, {73,14,9,8,7}},
+{ 515736, 5, {29,19,13,9,8}},
+{ 515808, 5, {199,9,8,6,6}},
+{ 516780, 5, {29,15,12,11,9}},
+{ 517140, 5, {17,15,13,13,12}},
+{ 517440, 5, {16,15,14,14,11}},
+{ 517608, 5, {79,13,9,8,7}},
+{ 517752, 5, {47,17,9,9,8}},
+{ 517824, 5, {31,29,9,8,8}},
+{ 517968, 5, {109,11,9,8,6}},
+{ 518400, 5, {16,15,15,12,12}},
+{ 518976, 5, {53,17,9,8,8}},
+{ 519048, 5, {89,9,9,9,8}},
+{ 519120, 5, {103,10,9,8,7}},
+{ 520128, 5, {43,14,12,9,8}},
+{ 520200, 5, {17,17,15,12,10}},
+{ 520344, 5, {73,11,9,9,8}},
+{ 520704, 5, {113,9,8,8,8}},
+{ 520992, 5, {67,12,9,9,8}},
+{ 521136, 5, {47,14,11,9,8}},
+{ 521424, 5, {71,17,9,8,6}},
+{ 521640, 5, {23,15,14,12,9}},
+{ 521856, 5, {151,9,8,8,6}},
+{ 522000, 5, {29,15,12,10,10}},
+{ 522144, 5, {37,14,14,9,8}},
+{ 522648, 5, {61,17,9,8,7}},
+{ 522720, 5, {18,16,15,11,11}},
+{ 523152, 5, {173,9,8,7,6}},
+{ 523224, 5, {43,13,13,9,8}},
+{ 523260, 5, {19,17,15,12,9}},
+{ 523584, 5, {101,9,9,8,8}},
+{ 524160, 5, {16,15,14,13,12}},
+{ 524880, 5, {18,18,15,12,9}},
+{ 525600, 5, {73,10,10,9,8}},
+{ 525672, 5, {149,9,8,7,7}},
+{ 525888, 5, {83,11,9,8,8}},
+{ 526320, 5, {43,17,10,9,8}},
+{ 526500, 5, {15,15,15,13,12}},
+{ 526608, 5, {53,23,9,8,6}},
+{ 526680, 5, {19,15,14,12,11}},
+{ 527040, 5, {61,12,10,9,8}},
+{ 527280, 5, {16,15,13,13,13}},
+{ 527904, 5, {47,13,12,9,8}},
+{ 528000, 5, {20,16,15,11,10}},
+{ 528192, 5, {131,9,8,8,7}},
+{ 528264, 5, {29,23,11,9,8}},
+{ 528528, 5, {21,16,13,11,11}},
+{ 529200, 5, {15,15,14,14,12}},
+{ 529416, 5, {43,19,9,9,8}},
+{ 530400, 5, {17,16,15,13,10}},
+{ 530640, 5, {67,11,10,9,8}},
+{ 531216, 5, {31,17,14,9,8}},
+{ 531432, 5, {61,11,11,9,8}},
+{ 531648, 5, {71,13,9,8,8}},
+{ 532224, 5, {18,16,14,12,11}},
+{ 532656, 5, {137,9,9,8,6}},
+{ 532728, 5, {151,9,8,7,7}},
+{ 533232, 5, {23,23,14,9,8}},
+{ 533520, 5, {19,15,13,12,12}},
+{ 533952, 5, {103,9,9,8,8}},
+{ 534240, 5, {53,14,10,9,8}},
+{ 534600, 5, {18,15,15,12,11}},
+{ 534888, 5, {23,19,17,9,8}},
+{ 535248, 5, {59,14,9,9,8}},
+{ 535392, 5, {18,16,13,13,11}},
+{ 536112, 5, {73,17,9,8,6}},
+{ 536976, 5, {113,11,9,8,6}},
+{ 537264, 5, {41,14,13,9,8}},
+{ 537600, 5, {16,16,15,14,10}},
+{ 537768, 5, {97,11,9,8,7}},
+{ 537840, 5, {83,10,9,9,8}},
+{ 538200, 5, {23,15,13,12,10}},
+{ 538272, 5, {89,12,9,8,7}},
+{ 538560, 5, {17,16,15,12,11}},
+{ 538704, 5, {43,29,9,8,6}},
+{ 539136, 5, {18,16,13,12,12}},
+{ 539280, 5, {107,10,9,8,7}},
+{ 539460, 5, {37,15,12,9,9}},
+{ 540000, 5, {16,15,15,15,10}},
+{ 540288, 5, {67,14,9,8,8}},
+{ 540432, 5, {139,9,9,8,6}},
+{ 540792, 5, {37,29,9,8,7}},
+{ 541296, 5, {179,9,8,7,6}},
+{ 542592, 5, {157,9,8,8,6}},
+{ 543168, 5, {41,23,9,8,8}},
+{ 543456, 5, {37,17,12,9,8}},
+{ 543816, 5, {83,13,9,8,7}},
+{ 544320, 5, {18,15,14,12,12}},
+{ 544752, 5, {97,13,9,8,6}},
+{ 544824, 5, {47,23,9,8,7}},
+{ 544968, 5, {29,29,9,9,8}},
+{ 545688, 5, {53,13,11,9,8}},
+{ 546048, 5, {79,12,9,8,8}},
+{ 546480, 5, {23,15,12,12,11}},
+{ 546624, 5, {73,13,9,8,8}},
+{ 546912, 5, {211,9,8,6,6}},
+{ 547200, 5, {19,16,15,12,10}},
+{ 547344, 5, {181,9,8,7,6}},
+{ 547560, 5, {18,15,13,13,12}},
+{ 548640, 5, {127,10,9,8,6}},
+{ 549072, 5, {41,31,9,8,6}},
+{ 549120, 5, {16,16,15,13,11}},
+{ 549360, 5, {109,10,9,8,7}},
+{ 549504, 5, {53,12,12,9,8}},
+{ 549936, 5, {67,19,9,8,6}},
+{ 550800, 5, {17,15,15,12,12}},
+{ 551304, 5, {31,19,13,9,8}},
+{ 551448, 5, {37,23,9,9,8}},
+{ 551760, 5, {19,16,15,11,11}},
+{ 552000, 5, {23,16,15,10,10}},
+{ 552024, 5, {41,17,11,9,8}},
+{ 552096, 5, {71,12,9,9,8}},
+{ 552240, 5, {59,13,10,9,8}},
+{ 552384, 5, {137,9,8,8,7}},
+{ 552420, 5, {31,15,12,11,9}},
+{ 552960, 5, {16,16,15,12,12}},
+{ 553392, 5, {61,14,9,9,8}},
+{ 553536, 5, {31,31,9,8,8}},
+{ 553896, 5, {157,9,8,7,7}},
+{ 554040, 5, {19,18,15,12,9}},
+{ 554400, 5, {16,15,15,14,11}},
+{ 554688, 5, {107,9,9,8,8}},
+{ 555408, 5, {29,19,14,9,8}},
+{ 556776, 5, {37,19,11,9,8}},
+{ 556920, 5, {17,15,14,13,12}},
+{ 557424, 5, {79,14,9,8,7}},
+{ 557568, 5, {18,16,16,11,11}},
+{ 558000, 5, {31,15,12,10,10}},
+{ 558720, 5, {97,10,9,8,8}},
+{ 558900, 5, {23,15,15,12,9}},
+{ 559020, 5, {21,20,11,11,11}},
+{ 559944, 5, {101,11,9,8,7}},
+{ 560448, 5, {139,9,8,8,7}},
+{ 560736, 5, {59,12,11,9,8}},
+{ 560880, 5, {41,19,10,9,8}},
+{ 561600, 5, {16,15,15,13,12}},
+{ 562320, 5, {71,11,10,9,8}},
+{ 563112, 5, {79,11,9,9,8}},
+{ 563328, 5, {163,9,8,8,6}},
+{ 563472, 5, {43,14,13,9,8}},
+{ 563760, 5, {29,15,12,12,9}},
+{ 563904, 5, {89,11,9,8,8}},
+{ 564300, 5, {19,15,15,12,11}},
+{ 564408, 5, {67,13,9,9,8}},
+{ 564480, 5, {16,15,14,14,12}},
+{ 564696, 5, {31,23,11,9,8}},
+{ 564984, 5, {59,19,9,8,7}},
+{ 565056, 5, {109,9,9,8,8}},
+{ 565704, 5, {97,9,9,9,8}},
+{ 565920, 5, {131,10,9,8,6}},
+{ 567000, 5, {15,15,15,14,12}},
+{ 567216, 5, {101,13,9,8,6}},
+{ 567648, 5, {73,12,9,9,8}},
+{ 567840, 5, {16,15,14,13,13}},
+{ 568512, 5, {47,14,12,9,8}},
+{ 568800, 5, {79,10,10,9,8}},
+{ 569184, 5, {21,16,14,11,11}},
+{ 569520, 5, {113,10,9,8,7}},
+{ 569664, 5, {43,23,9,8,8}},
+{ 570240, 5, {18,16,15,12,11}},
+{ 570960, 5, {61,13,10,9,8}},
+{ 571032, 5, {103,11,9,8,7}},
+{ 571200, 5, {17,16,15,14,10}},
+{ 571896, 5, {47,13,13,9,8}},
+{ 572220, 5, {17,17,15,12,11}},
+{ 572544, 5, {71,14,9,8,8}},
+{ 573696, 5, {83,12,9,8,8}},
+{ 574056, 5, {67,17,9,8,7}},
+{ 574200, 5, {29,15,12,11,10}},
+{ 574560, 5, {19,15,14,12,12}},
+{ 575064, 5, {163,9,8,7,7}},
+{ 575280, 5, {47,17,10,9,8}},
+{ 575856, 5, {43,31,9,8,6}},
+{ 576000, 5, {16,16,15,15,10}},
+{ 576072, 5, {127,9,9,8,7}},
+{ 576288, 5, {29,23,12,9,8}},
+{ 576576, 5, {18,16,14,13,11}},
+{ 576720, 5, {89,10,9,9,8}},
+{ 577152, 5, {167,9,8,8,6}},
+{ 577584, 5, {191,9,8,7,6}},
+{ 577728, 5, {59,17,9,8,8}},
+{ 577980, 5, {19,15,13,13,12}},
+{ 578016, 5, {223,9,8,6,6}},
+{ 578088, 5, {37,31,9,8,7}},
+{ 578160, 5, {73,11,10,9,8}},
+{ 578448, 5, {103,13,9,8,6}},
+{ 578592, 5, {41,14,14,9,8}},
+{ 578664, 5, {47,19,9,9,8}},
+{ 578880, 5, {67,12,10,9,8}},
+{ 578952, 5, {43,17,11,9,8}},
+{ 579312, 5, {149,9,9,8,6}},
+{ 579600, 5, {23,15,14,12,10}},
+{ 579744, 5, {61,12,11,9,8}},
+{ 580032, 5, {53,19,9,8,8}},
+{ 580176, 5, {79,17,9,8,6}},
+{ 580608, 5, {18,16,14,12,12}},
+{ 580800, 5, {20,16,15,11,11}},
+{ 581400, 5, {19,17,15,12,10}},
+{ 581760, 5, {101,10,9,8,8}},
+{ 582552, 5, {31,29,9,9,8}},
+{ 582768, 5, {71,19,9,8,6}},
+{ 583128, 5, {89,13,9,8,7}},
+{ 583200, 5, {18,15,15,12,12}},
+{ 583440, 5, {17,16,15,13,11}},
+{ 583632, 5, {193,9,8,7,6}},
+{ 583704, 5, {67,11,11,9,8}},
+{ 583848, 5, {53,17,9,9,8}},
+{ 584064, 5, {18,16,13,13,12}},
+{ 584136, 5, {61,19,9,8,7}},
+{ 584820, 5, {19,19,15,12,9}},
+{ 585216, 5, {127,9,8,8,8}},
+{ 585648, 5, {83,14,9,8,7}},
+{ 585792, 5, {113,9,9,8,8}},
+{ 586224, 5, {59,23,9,8,6}},
+{ 586656, 5, {97,12,9,8,7}},
+{ 587088, 5, {151,9,9,8,6}},
+{ 587520, 5, {17,16,15,12,12}},
+{ 587664, 5, {53,14,11,9,8}},
+{ 588240, 5, {43,19,10,9,8}},
+{ 588384, 5, {227,9,8,6,6}},
+{ 588672, 5, {73,14,9,8,8}},
+{ 588744, 5, {37,17,13,9,8}},
+{ 588816, 5, {47,29,9,8,6}},
+{ 589032, 5, {101,9,9,9,8}},
+{ 589176, 5, {167,9,8,7,7}},
+{ 589680, 5, {18,15,14,13,12}},
+{ 591360, 5, {16,16,15,14,11}},
+{ 591408, 5, {37,37,9,8,6}},
+{ 591552, 5, {79,13,9,8,8}},
+{ 591624, 5, {83,11,9,9,8}},
+{ 591840, 5, {137,10,9,8,6}},
+{ 592020, 5, {23,15,13,12,11}},
+{ 592416, 5, {18,17,16,11,11}},
+{ 592800, 5, {19,16,15,13,10}},
+{ 593208, 5, {107,11,9,8,7}},
+{ 593280, 5, {103,10,9,8,8}},
+{ 593568, 5, {229,9,8,6,6}},
+{ 593712, 5, {31,19,14,9,8}},
+{ 594000, 5, {16,15,15,15,11}},
+{ 594216, 5, {131,9,9,8,7}},
+{ 594720, 5, {59,14,10,9,8}},
+{ 595296, 5, {53,13,12,9,8}},
+{ 595728, 5, {197,9,8,7,6}},
+{ 596160, 5, {23,15,12,12,12}},
+{ 596700, 5, {17,15,15,13,12}},
+{ 597312, 5, {61,17,9,8,8}},
+{ 597600, 5, {83,10,10,9,8}},
+{ 597780, 5, {41,15,12,9,9}},
+{ 597816, 5, {23,19,19,9,8}},
+{ 597888, 5, {173,9,8,8,6}},
+{ 598104, 5, {71,13,9,9,8}},
+{ 599040, 5, {16,16,15,13,12}},
+{ 599184, 5, {73,19,9,8,6}},
+{ 599256, 5, {41,29,9,8,7}},
+{ 599400, 5, {37,15,12,10,9}},
+{ 599760, 5, {17,15,14,14,12}},
+{ 600480, 5, {139,10,9,8,6}},
+{ 600696, 5, {103,9,9,9,8}},
+{ 600768, 5, {149,9,8,8,7}},
+{ 600912, 5, {107,13,9,8,6}},
+{ 601776, 5, {199,9,8,7,6}},
+{ 601920, 5, {19,16,15,12,11}},
+{ 602208, 5, {41,17,12,9,8}},
+{ 602640, 5, {31,15,12,12,9}},
+{ 603432, 5, {29,17,17,9,8}},
+{ 603504, 5, {127,11,9,8,6}},
+{ 603648, 5, {131,9,8,8,8}},
+{ 603936, 5, {233,9,8,6,6}},
+{ 604296, 5, {109,11,9,8,7}},
+{ 604800, 5, {16,15,15,14,12}},
+{ 605520, 5, {29,29,10,9,8}},
+{ 605880, 5, {18,17,15,12,11}},
+{ 606096, 5, {61,23,9,8,6}},
+{ 606816, 5, {43,14,14,9,8}},
+{ 607200, 5, {23,16,15,11,10}},
+{ 607392, 5, {37,19,12,9,8}},
+{ 607464, 5, {59,13,11,9,8}},
+{ 607500, 5, {15,15,15,15,12}},
+{ 607824, 5, {67,14,9,9,8}},
+{ 608256, 5, {18,16,16,12,11}},
+{ 608328, 5, {71,17,9,8,7}},
+{ 608400, 5, {16,15,15,13,13}},
+{ 608832, 5, {151,9,8,8,7}},
+{ 609552, 5, {83,17,9,8,6}},
+{ 610344, 5, {173,9,8,7,7}},
+{ 610416, 5, {157,9,9,8,6}},
+{ 610740, 5, {29,15,13,12,9}},
+{ 610848, 5, {101,12,9,8,7}},
+{ 611064, 5, {41,23,9,9,8}},
+{ 611520, 5, {16,15,14,14,13}},
+{ 611712, 5, {59,12,12,9,8}},
+{ 612000, 5, {17,16,15,15,10}},
+{ 612144, 5, {109,13,9,8,6}},
+{ 612720, 5, {37,23,10,9,8}},
+{ 613440, 5, {71,12,10,9,8}},
+{ 613800, 5, {31,15,12,11,10}},
+{ 614304, 5, {79,12,9,9,8}},
+{ 614376, 5, {53,23,9,8,7}},
+{ 614400, 5, {16,16,16,15,10}},
+{ 614592, 5, {97,11,9,8,8}},
+{ 614880, 5, {61,14,10,9,8}},
+{ 614952, 5, {73,13,9,9,8}},
+{ 615168, 5, {89,12,9,8,8}},
+{ 615600, 5, {19,15,15,12,12}},
+{ 615888, 5, {47,14,13,9,8}},
+{ 616032, 5, {31,23,12,9,8}},
+{ 616320, 5, {107,10,9,8,8}},
+{ 616968, 5, {41,19,11,9,8}},
+{ 617760, 5, {18,16,15,13,11}},
+{ 618048, 5, {37,29,9,8,8}},
+{ 618552, 5, {71,11,11,9,8}},
+{ 618624, 5, {179,9,8,8,6}},
+{ 619488, 5, {239,9,8,6,6}},
+{ 620928, 5, {18,16,14,14,11}},
+{ 621000, 5, {23,15,15,12,10}},
+{ 621432, 5, {137,9,9,8,7}},
+{ 621504, 5, {83,13,9,8,8}},
+{ 622080, 5, {18,16,15,12,12}},
+{ 622440, 5, {19,15,14,13,12}},
+{ 622512, 5, {131,11,9,8,6}},
+{ 622656, 5, {47,23,9,8,8}},
+{ 622728, 5, {31,31,9,9,8}},
+{ 622944, 5, {103,12,9,8,7}},
+{ 624000, 5, {20,16,15,13,10}},
+{ 624024, 5, {107,9,9,9,8}},
+{ 624240, 5, {17,17,15,12,12}},
+{ 624312, 5, {29,23,13,9,8}},
+{ 624672, 5, {241,9,8,6,6}},
+{ 625464, 5, {73,17,9,8,7}},
+{ 625536, 5, {181,9,8,8,6}},
+{ 625680, 5, {79,11,10,9,8}},
+{ 626400, 5, {29,15,12,12,10}},
+{ 626472, 5, {113,11,9,8,7}},
+{ 626940, 5, {43,15,12,9,9}},
+{ 627120, 5, {67,13,10,9,8}},
+{ 627264, 5, {18,18,16,11,11}},
+{ 627840, 5, {109,10,9,8,8}},
+{ 627984, 5, {89,14,9,8,7}},
+{ 628056, 5, {61,13,11,9,8}},
+{ 628320, 5, {17,16,15,14,11}},
+{ 628488, 5, {43,29,9,8,7}},
+{ 628560, 5, {97,10,9,9,8}},
+{ 628992, 5, {18,16,14,13,12}},
+{ 629424, 5, {47,31,9,8,6}},
+{ 630504, 5, {139,9,9,8,7}},
+{ 630720, 5, {73,12,10,9,8}},
+{ 631296, 5, {137,9,8,8,8}},
+{ 631512, 5, {179,9,8,7,7}},
+{ 631584, 5, {43,17,12,9,8}},
+{ 631620, 5, {29,15,12,11,11}},
+{ 631800, 5, {18,15,15,13,12}},
+{ 632448, 5, {61,12,12,9,8}},
+{ 632736, 5, {18,16,13,13,13}},
+{ 632808, 5, {47,17,11,9,8}},
+{ 633024, 5, {157,9,8,8,7}},
+{ 633420, 5, {23,17,15,12,9}},
+{ 633600, 5, {16,16,15,15,11}},
+{ 633744, 5, {163,9,9,8,6}},
+{ 634032, 5, {37,17,14,9,8}},
+{ 634392, 5, {89,11,9,9,8}},
+{ 634608, 5, {113,13,9,8,6}},
+{ 635040, 5, {18,15,14,14,12}},
+{ 635544, 5, {97,13,9,8,7}},
+{ 635688, 5, {109,9,9,9,8}},
+{ 635976, 5, {73,11,11,9,8}},
+{ 636480, 5, {17,16,15,13,12}},
+{ 636768, 5, {67,12,11,9,8}},
+{ 637056, 5, {79,14,9,8,8}},
+{ 637560, 5, {23,15,14,12,11}},
+{ 638064, 5, {211,9,8,7,6}},
+{ 638400, 5, {19,16,15,14,10}},
+{ 638568, 5, {181,9,8,7,7}},
+{ 638880, 5, {22,16,15,11,11}},
+{ 639540, 5, {19,17,15,12,11}},
+{ 639936, 5, {101,11,9,8,8}},
+{ 640080, 5, {127,10,9,8,7}},
+{ 640512, 5, {139,9,8,8,8}},
+{ 640584, 5, {41,31,9,8,7}},
+{ 640800, 5, {89,10,10,9,8}},
+{ 640872, 5, {43,23,9,9,8}},
+{ 641088, 5, {53,14,12,9,8}},
+{ 641520, 5, {18,18,15,12,11}},
+{ 641592, 5, {67,19,9,8,7}},
+{ 642600, 5, {17,15,15,14,12}},
+{ 642960, 5, {47,19,10,9,8}},
+{ 643680, 5, {149,10,9,8,6}},
+{ 644112, 5, {71,14,9,9,8}},
+{ 644904, 5, {53,13,13,9,8}},
+{ 645048, 5, {31,17,17,9,8}},
+{ 645120, 5, {16,16,15,14,12}},
+{ 645408, 5, {83,12,9,9,8}},
+{ 645696, 5, {59,19,9,8,8}},
+{ 645840, 5, {23,15,13,12,12}},
+{ 646272, 5, {18,17,16,12,11}},
+{ 647064, 5, {43,19,11,9,8}},
+{ 647136, 5, {107,12,9,8,7}},
+{ 647280, 5, {31,29,10,9,8}},
+{ 647496, 5, {23,23,17,9,8}},
+{ 648000, 5, {16,15,15,15,12}},
+{ 648432, 5, {79,19,9,8,6}},
+{ 648720, 5, {53,17,10,9,8}},
+{ 648960, 5, {16,16,15,13,13}},
+{ 649296, 5, {167,9,9,8,6}},
+{ 649800, 5, {19,19,15,12,10}},
+{ 649944, 5, {59,17,9,9,8}},
+{ 650496, 5, {21,16,16,11,11}},
+{ 650592, 5, {251,9,8,6,6}},
+{ 650880, 5, {113,10,9,8,8}},
+{ 651024, 5, {137,11,9,8,6}},
+{ 652080, 5, {19,16,15,13,11}},
+{ 652320, 5, {151,10,9,8,6}},
+{ 652392, 5, {41,17,13,9,8}},
+{ 652536, 5, {53,19,9,9,8}},
+{ 652608, 5, {103,11,9,8,8}},
+{ 652800, 5, {17,16,16,15,10}},
+{ 652860, 5, {31,15,13,12,9}},
+{ 653616, 5, {89,17,9,8,6}},
+{ 654192, 5, {59,14,11,9,8}},
+{ 654480, 5, {101,10,9,9,8}},
+{ 655200, 5, {16,15,15,14,13}},
+{ 655344, 5, {41,37,9,8,6}},
+{ 656064, 5, {67,17,9,8,8}},
+{ 656640, 5, {19,16,15,12,12}},
+{ 657216, 5, {163,9,8,8,7}},
+{ 657360, 5, {83,11,10,9,8}},
+{ 657720, 5, {29,15,14,12,9}},
+{ 658008, 5, {37,19,13,9,8}},
+{ 658368, 5, {127,9,9,8,8}},
+{ 658560, 5, {16,15,14,14,14}},
+{ 658944, 5, {18,16,16,13,11}},
+{ 659016, 5, {113,9,9,9,8}},
+{ 659232, 5, {109,12,9,8,7}},
+{ 659340, 5, {37,15,12,11,9}},
+{ 660096, 5, {191,9,8,8,6}},
+{ 660240, 5, {131,10,9,8,7}},
+{ 660528, 5, {139,11,9,8,6}},
+{ 660660, 5, {21,20,13,11,11}},
+{ 660672, 5, {37,31,9,8,8}},
+{ 660960, 5, {18,17,15,12,12}},
+{ 661752, 5, {101,13,9,8,7}},
+{ 662112, 5, {19,18,16,11,11}},
+{ 662256, 5, {73,14,9,9,8}},
+{ 662400, 5, {23,16,15,12,10}},
+{ 662688, 5, {59,13,12,9,8}},
+{ 663264, 5, {47,14,14,9,8}},
+{ 663552, 5, {18,16,16,12,12}},
+{ 663984, 5, {53,29,9,8,6}},
+{ 664200, 5, {41,15,12,10,9}},
+{ 664560, 5, {71,13,10,9,8}},
+{ 665280, 5, {18,16,15,14,11}},
+{ 665496, 5, {79,13,9,9,8}},
+{ 665712, 5, {67,23,9,8,6}},
+{ 666000, 5, {37,15,12,10,10}},
+{ 666072, 5, {29,29,11,9,8}},
+{ 666144, 5, {257,9,8,6,6}},
+{ 666432, 5, {89,13,9,8,8}},
+{ 666900, 5, {19,15,15,13,12}},
+{ 667008, 5, {193,9,8,8,6}},
+{ 667368, 5, {31,23,13,9,8}},
+{ 667440, 5, {103,10,9,9,8}},
+{ 667584, 5, {61,19,9,8,8}},
+{ 667920, 5, {23,16,15,11,11}},
+{ 669312, 5, {83,14,9,8,8}},
+{ 669600, 5, {31,15,12,12,10}},
+{ 670320, 5, {19,15,14,14,12}},
+{ 670464, 5, {97,12,9,8,8}},
+{ 670680, 5, {23,18,15,12,9}},
+{ 671832, 5, {43,31,9,8,7}},
+{ 671976, 5, {61,17,9,9,8}},
+{ 672000, 5, {20,16,15,14,10}},
+{ 672336, 5, {29,23,14,9,8}},
+{ 672624, 5, {173,9,9,8,6}},
+{ 673056, 5, {41,19,12,9,8}},
+{ 673200, 5, {17,16,15,15,11}},
+{ 673344, 5, {167,9,8,8,7}},
+{ 673848, 5, {191,9,8,7,7}},
+{ 673920, 5, {18,16,15,13,12}},
+{ 673992, 5, {37,23,11,9,8}},
+{ 674352, 5, {223,9,8,7,6}},
+{ 674424, 5, {29,19,17,9,8}},
+{ 674784, 5, {71,12,11,9,8}},
+{ 674856, 5, {103,13,9,8,7}},
+{ 675180, 5, {31,15,12,11,11}},
+{ 675360, 5, {67,14,10,9,8}},
+{ 675840, 5, {16,16,16,15,11}},
+{ 675864, 5, {149,9,9,8,7}},
+{ 676260, 5, {17,17,15,13,12}},
+{ 676368, 5, {61,14,11,9,8}},
+{ 676872, 5, {79,17,9,8,7}},
+{ 677160, 5, {19,18,15,12,11}},
+{ 677376, 5, {18,16,14,14,12}},
+{ 677952, 5, {107,11,9,8,8}},
+{ 678240, 5, {157,10,9,8,6}},
+{ 678600, 5, {29,15,13,12,10}},
+{ 678960, 5, {41,23,10,9,8}},
+{ 679104, 5, {131,9,9,8,8}},
+{ 679896, 5, {71,19,9,8,7}},
+{ 680400, 5, {18,15,15,14,12}},
+{ 680832, 5, {197,9,8,8,6}},
+{ 680904, 5, {193,9,8,7,7}},
+{ 681264, 5, {83,19,9,8,6}},
+{ 681408, 5, {18,16,14,13,13}},
+{ 681696, 5, {263,9,8,6,6}},
+{ 682560, 5, {79,12,10,9,8}},
+{ 683100, 5, {23,15,15,12,11}},
+{ 683280, 5, {73,13,10,9,8}},
+{ 683424, 5, {113,12,9,8,7}},
+{ 683928, 5, {59,23,9,8,7}},
+{ 684000, 5, {19,16,15,15,10}},
+{ 684216, 5, {43,17,13,9,8}},
+{ 684288, 5, {18,18,16,12,11}},
+{ 684432, 5, {97,14,9,8,7}},
+{ 684864, 5, {41,29,9,8,8}},
+{ 684936, 5, {151,9,9,8,7}},
+{ 685152, 5, {61,13,12,9,8}},
+{ 685260, 5, {47,15,12,9,9}},
+{ 685440, 5, {17,16,15,14,12}},
+{ 686400, 5, {20,16,15,13,11}},
+{ 686448, 5, {227,9,8,7,6}},
+{ 686592, 5, {149,9,8,8,8}},
+{ 686952, 5, {47,29,9,8,7}},
+{ 687312, 5, {43,37,9,8,6}},
+{ 687744, 5, {199,9,8,8,6}},
+{ 688248, 5, {79,11,11,9,8}},
+{ 688500, 5, {17,15,15,15,12}},
+{ 689040, 5, {29,15,12,12,11}},
+{ 689520, 5, {17,16,15,13,13}},
+{ 689832, 5, {67,13,11,9,8}},
+{ 689976, 5, {37,37,9,8,7}},
+{ 690336, 5, {47,17,12,9,8}},
+{ 690480, 5, {137,10,9,8,7}},
+{ 690624, 5, {109,11,9,8,8}},
+{ 691152, 5, {21,17,16,11,11}},
+{ 691200, 5, {16,16,15,15,12}},
+{ 691416, 5, {97,11,9,9,8}},
+{ 691920, 5, {31,31,10,9,8}},
+{ 692064, 5, {89,12,9,9,8}},
+{ 692496, 5, {229,9,8,7,6}},
+{ 693360, 5, {107,10,9,9,8}},
+{ 693600, 5, {17,17,16,15,10}},
+{ 693792, 5, {73,12,11,9,8}},
+{ 694512, 5, {53,14,13,9,8}},
+{ 694656, 5, {67,12,12,9,8}},
+{ 695016, 5, {197,9,8,7,7}},
+{ 695232, 5, {71,17,9,8,8}},
+{ 695304, 5, {37,29,9,9,8}},
+{ 695520, 5, {23,15,14,12,12}},
+{ 695808, 5, {151,9,8,8,8}},
+{ 695952, 5, {179,9,9,8,6}},
+{ 696000, 5, {29,16,15,10,10}},
+{ 696600, 5, {43,15,12,10,9}},
+{ 696960, 5, {20,18,16,11,11}},
+{ 697248, 5, {269,9,8,6,6}},
+{ 697536, 5, {173,9,8,8,7}},
+{ 697680, 5, {19,17,15,12,12}},
+{ 698112, 5, {101,12,9,8,8}},
+{ 698400, 5, {97,10,10,9,8}},
+{ 698880, 5, {16,16,15,14,13}},
+{ 699048, 5, {73,19,9,8,7}},
+{ 699192, 5, {83,13,9,9,8}},
+{ 699660, 5, {23,15,13,13,12}},
+{ 699840, 5, {18,18,15,12,12}},
+{ 700128, 5, {18,17,16,13,11}},
+{ 700488, 5, {47,23,9,9,8}},
+{ 700560, 5, {139,10,9,8,7}},
+{ 701064, 5, {107,13,9,8,7}},
+{ 702000, 5, {16,15,15,15,13}},
+{ 702072, 5, {199,9,8,7,7}},
+{ 702144, 5, {53,23,9,8,8}},
+{ 702240, 5, {19,16,15,14,11}},
+{ 702432, 5, {271,9,8,6,6}},
+{ 702576, 5, {41,17,14,9,8}},
+{ 703080, 5, {31,15,14,12,9}},
+{ 703728, 5, {181,9,9,8,6}},
+{ 703800, 5, {23,17,15,12,10}},
+{ 704088, 5, {127,11,9,8,7}},
+{ 704160, 5, {163,10,9,8,6}},
+{ 704592, 5, {233,9,8,7,6}},
+{ 704700, 5, {29,15,15,12,9}},
+{ 704880, 5, {89,11,10,9,8}},
+{ 705024, 5, {18,17,16,12,12}},
+{ 705456, 5, {71,23,9,8,6}},
+{ 705600, 5, {16,15,15,14,14}},
+{ 705888, 5, {43,19,12,9,8}},
+{ 706320, 5, {109,10,9,9,8}},
+{ 707112, 5, {61,23,9,8,7}},
+{ 707256, 5, {47,19,11,9,8}},
+{ 707940, 5, {23,19,15,12,9}},
+{ 708048, 5, {149,11,9,8,6}},
+{ 708624, 5, {37,19,14,9,8}},
+{ 709632, 5, {18,16,16,14,11}},
+{ 709776, 5, {53,31,9,8,6}},
+{ 710208, 5, {137,9,9,8,8}},
+{ 711144, 5, {83,17,9,8,7}},
+{ 711360, 5, {19,16,15,13,12}},
+{ 711480, 5, {21,20,14,11,11}},
+{ 711936, 5, {103,12,9,8,8}},
+{ 712008, 5, {31,29,11,9,8}},
+{ 712080, 5, {43,23,10,9,8}},
+{ 712152, 5, {157,9,9,8,7}},
+{ 712368, 5, {97,17,9,8,6}},
+{ 712656, 5, {101,14,9,8,7}},
+{ 712800, 5, {18,16,15,15,11}},
+{ 713232, 5, {127,13,9,8,6}},
+{ 713592, 5, {53,17,11,9,8}},
+{ 713664, 5, {59,14,12,9,8}},
+{ 714168, 5, {109,13,9,8,7}},
+{ 714780, 5, {19,19,15,12,11}},
+{ 714816, 5, {73,17,9,8,8}},
+{ 715680, 5, {71,14,10,9,8}},
+{ 715968, 5, {113,11,9,8,8}},
+{ 716040, 5, {18,17,15,13,12}},
+{ 716688, 5, {79,14,9,9,8}},
+{ 717120, 5, {83,12,10,9,8}},
+{ 717552, 5, {151,11,9,8,6}},
+{ 717600, 5, {23,16,15,13,10}},
+{ 717696, 5, {89,14,9,8,8}},
+{ 717912, 5, {59,13,13,9,8}},
+{ 717984, 5, {277,9,8,6,6}},
+{ 718080, 5, {17,16,16,15,11}},
+{ 718200, 5, {19,15,15,14,12}},
+{ 718272, 5, {43,29,9,8,8}},
+{ 718704, 5, {31,23,14,9,8}},
+{ 718848, 5, {18,16,16,13,12}},
+{ 719280, 5, {37,15,12,12,9}},
+{ 719928, 5, {101,11,9,9,8}},
+{ 720000, 5, {20,16,15,15,10}},
+{ 720576, 5, {139,9,9,8,8}},
+{ 720936, 5, {31,19,17,9,8}},
+{ 721440, 5, {167,10,9,8,6}},
+{ 721728, 5, {179,9,8,8,7}},
+{ 722160, 5, {59,17,10,9,8}},
+{ 722304, 5, {19,18,16,12,11}},
+{ 722736, 5, {239,9,8,7,6}},
+{ 723096, 5, {83,11,11,9,8}},
+{ 723456, 5, {157,9,8,8,8}},
+{ 723672, 5, {23,23,19,9,8}},
+{ 725040, 5, {53,19,10,9,8}},
+{ 725328, 5, {73,23,9,8,6}},
+{ 725400, 5, {31,15,13,12,10}},
+{ 725760, 5, {18,16,15,14,12}},
+{ 726192, 5, {41,41,9,8,6}},
+{ 726264, 5, {131,11,9,8,7}},
+{ 726336, 5, {97,13,9,8,8}},
+{ 726408, 5, {59,19,9,9,8}},
+{ 726624, 5, {29,29,12,9,8}},
+{ 726768, 5, {103,14,9,8,7}},
+{ 727200, 5, {101,10,10,9,8}},
+{ 728280, 5, {17,17,15,14,12}},
+{ 728352, 5, {281,9,8,6,6}},
+{ 728640, 5, {23,16,15,12,11}},
+{ 728784, 5, {241,9,8,7,6}},
+{ 729000, 5, {18,15,15,15,12}},
+{ 729144, 5, {41,19,13,9,8}},
+{ 729216, 5, {211,9,8,8,6}},
+{ 729600, 5, {19,16,16,15,10}},
+{ 729792, 5, {181,9,8,8,7}},
+{ 730080, 5, {18,16,15,13,13}},
+{ 730512, 5, {89,19,9,8,6}},
+{ 730620, 5, {41,15,12,11,9}},
+{ 730800, 5, {29,15,14,12,10}},
+{ 731016, 5, {71,13,11,9,8}},
+{ 731520, 5, {127,10,9,8,8}},
+{ 731808, 5, {21,18,16,11,11}},
+{ 732096, 5, {41,31,9,8,8}},
+{ 732240, 5, {113,10,9,9,8}},
+{ 732600, 5, {37,15,12,11,10}},
+{ 733248, 5, {67,19,9,8,8}},
+{ 733536, 5, {283,9,8,6,6}},
+{ 733824, 5, {18,16,14,14,13}},
+{ 734184, 5, {103,11,9,9,8}},
+{ 734328, 5, {47,31,9,8,7}},
+{ 734400, 5, {17,16,15,15,12}},
+{ 735264, 5, {37,23,12,9,8}},
+{ 735696, 5, {131,13,9,8,6}},
+{ 735840, 5, {73,14,10,9,8}},
+{ 736128, 5, {71,12,12,9,8}},
+{ 736560, 5, {31,15,12,12,11}},
+{ 736848, 5, {43,17,14,9,8}},
+{ 737280, 5, {16,16,16,15,12}},
+{ 737856, 5, {61,14,12,9,8}},
+{ 738000, 5, {41,15,12,10,10}},
+{ 738072, 5, {67,17,9,9,8}},
+{ 738192, 5, {21,16,13,13,13}},
+{ 738720, 5, {19,18,15,12,12}},
+{ 739152, 5, {59,29,9,8,6}},
+{ 739200, 5, {20,16,15,14,11}},
+{ 739368, 5, {163,9,9,8,7}},
+{ 739440, 5, {79,13,10,9,8}},
+{ 739584, 5, {107,12,9,8,8}},
+{ 740376, 5, {113,13,9,8,7}},
+{ 740664, 5, {127,9,9,9,8}},
+{ 741312, 5, {18,18,16,13,11}},
+{ 741600, 5, {103,10,10,9,8}},
+{ 741744, 5, {101,17,9,8,6}},
+{ 742248, 5, {61,13,13,9,8}},
+{ 742560, 5, {17,16,15,14,13}},
+{ 742608, 5, {191,9,9,8,6}},
+{ 742896, 5, {67,14,11,9,8}},
+{ 743256, 5, {37,31,9,9,8}},
+{ 744000, 5, {31,16,15,10,10}},
+{ 744408, 5, {211,9,8,7,7}},
+{ 745200, 5, {23,15,15,12,12}},
+{ 746064, 5, {157,11,9,8,6}},
+{ 746460, 5, {29,15,13,12,11}},
+{ 746496, 5, {18,18,16,12,12}},
+{ 746640, 5, {61,17,10,9,8}},
+{ 746856, 5, {41,23,11,9,8}},
+{ 747360, 5, {173,10,9,8,6}},
+{ 747864, 5, {47,17,13,9,8}},
+{ 747936, 5, {53,14,14,9,8}},
+{ 748800, 5, {16,16,15,15,13}},
+{ 749736, 5, {89,13,9,9,8}},
+{ 750384, 5, {193,9,9,8,6}},
+{ 750816, 5, {79,12,11,9,8}},
+{ 750960, 5, {149,10,9,8,7}},
+{ 751032, 5, {61,19,9,9,8}},
+{ 751104, 5, {163,9,8,8,8}},
+{ 751248, 5, {47,37,9,8,6}},
+{ 751608, 5, {73,13,11,9,8}},
+{ 751680, 5, {29,15,12,12,12}},
+{ 752400, 5, {19,16,15,15,11}},
+{ 752544, 5, {67,13,12,9,8}},
+{ 752640, 5, {16,16,15,14,14}},
+{ 752976, 5, {83,14,9,9,8}},
+{ 753300, 5, {31,15,15,12,9}},
+{ 753408, 5, {109,12,9,8,8}},
+{ 753480, 5, {23,15,14,13,12}},
+{ 753768, 5, {29,19,19,9,8}},
+{ 753984, 5, {18,17,16,14,11}},
+{ 754272, 5, {97,12,9,9,8}},
+{ 754560, 5, {131,10,9,8,8}},
+{ 754992, 5, {107,14,9,8,7}},
+{ 755040, 5, {22,16,15,13,11}},
+{ 755820, 5, {19,17,15,13,12}},
+{ 756000, 5, {16,15,15,15,14}},
+{ 756288, 5, {101,13,9,8,8}},
+{ 756432, 5, {103,17,9,8,6}},
+{ 756504, 5, {79,19,9,8,7}},
+{ 756864, 5, {73,12,12,9,8}},
+{ 757512, 5, {167,9,9,8,7}},
+{ 758160, 5, {18,18,15,13,12}},
+{ 759024, 5, {251,9,8,7,6}},
+{ 759456, 5, {293,9,8,6,6}},
+{ 759528, 5, {137,11,9,8,7}},
+{ 760320, 5, {18,16,16,15,11}},
+{ 761040, 5, {151,10,9,8,7}},
+{ 761112, 5, {31,31,11,9,8}},
+{ 761400, 5, {47,15,12,10,9}},
+{ 761616, 5, {43,41,9,8,6}},
+{ 762300, 5, {21,20,15,11,11}},
+{ 762552, 5, {89,17,9,8,7}},
+{ 762696, 5, {107,11,9,9,8}},
+{ 762960, 5, {17,17,16,15,11}},
+{ 763776, 5, {18,17,16,13,12}},
+{ 763992, 5, {131,9,9,9,8}},
+{ 764208, 5, {61,29,9,8,6}},
+{ 764568, 5, {41,37,9,8,7}},
+{ 764712, 5, {43,19,13,9,8}},
+{ 765600, 5, {29,16,15,11,10}},
+{ 765936, 5, {197,9,9,8,6}},
+{ 766080, 5, {19,16,15,14,12}},
+{ 766260, 5, {43,15,12,11,9}},
+{ 767808, 5, {43,31,9,8,8}},
+{ 768000, 5, {20,16,16,15,10}},
+{ 768096, 5, {127,12,9,8,7}},
+{ 768240, 5, {97,11,10,9,8}},
+{ 768960, 5, {89,12,10,9,8}},
+{ 769104, 5, {109,14,9,8,7}},
+{ 769392, 5, {137,13,9,8,6}},
+{ 769500, 5, {19,15,15,15,12}},
+{ 769536, 5, {167,9,8,8,8}},
+{ 769896, 5, {37,17,17,9,8}},
+{ 770112, 5, {191,9,8,8,7}},
+{ 770400, 5, {107,10,10,9,8}},
+{ 770472, 5, {41,29,9,9,8}},
+{ 770616, 5, {139,11,9,8,7}},
+{ 770640, 5, {19,16,15,13,13}},
+{ 770688, 5, {223,9,8,8,6}},
+{ 771120, 5, {18,17,15,14,12}},
+{ 771264, 5, {103,13,9,8,8}},
+{ 771552, 5, {47,19,12,9,8}},
+{ 772416, 5, {149,9,9,8,8}},
+{ 772464, 5, {21,19,16,11,11}},
+{ 772560, 5, {37,29,10,9,8}},
+{ 772740, 5, {53,15,12,9,9}},
+{ 772800, 5, {23,16,15,14,10}},
+{ 773136, 5, {59,14,13,9,8}},
+{ 773280, 5, {179,10,9,8,6}},
+{ 773568, 5, {79,17,9,8,8}},
+{ 773712, 5, {199,9,9,8,6}},
+{ 774000, 5, {43,15,12,10,10}},
+{ 774144, 5, {18,16,16,14,12}},
+{ 774180, 5, {23,17,15,12,11}},
+{ 774576, 5, {163,11,9,8,6}},
+{ 774648, 5, {53,29,9,8,7}},
+{ 775200, 5, {19,17,16,15,10}},
+{ 775368, 5, {89,11,11,9,8}},
+{ 776664, 5, {67,23,9,8,7}},
+{ 776736, 5, {31,29,12,9,8}},
+{ 776880, 5, {83,13,10,9,8}},
+{ 776952, 5, {109,11,9,9,8}},
+{ 777024, 5, {71,19,9,8,8}},
+{ 777168, 5, {257,9,8,7,6}},
+{ 777600, 5, {18,16,15,15,12}},
+{ 778176, 5, {193,9,8,8,7}},
+{ 778320, 5, {47,23,10,9,8}},
+{ 778464, 5, {53,17,12,9,8}},
+{ 778752, 5, {18,16,16,13,13}},
+{ 779220, 5, {37,15,13,12,9}},
+{ 779760, 5, {19,19,15,12,12}},
+{ 780300, 5, {17,17,15,15,12}},
+{ 780624, 5, {139,13,9,8,6}},
+{ 781056, 5, {113,12,9,8,8}},
+{ 781200, 5, {31,15,14,12,10}},
+{ 781632, 5, {59,23,9,8,8}},
+{ 781920, 5, {181,10,9,8,6}},
+{ 782136, 5, {71,17,9,9,8}},
+{ 782208, 5, {97,14,9,8,8}},
+{ 782496, 5, {19,18,16,13,11}},
+{ 782784, 5, {151,9,9,8,8}},
+{ 783000, 5, {29,15,15,12,10}},
+{ 783288, 5, {43,23,11,9,8}},
+{ 783360, 5, {17,16,16,15,12}},
+{ 784512, 5, {227,9,8,8,6}},
+{ 784728, 5, {173,9,9,8,7}},
+{ 784800, 5, {109,10,10,9,8}},
+{ 784944, 5, {79,23,9,8,6}},
+{ 785088, 5, {47,29,9,8,8}},
+{ 785232, 5, {41,19,14,9,8}},
+{ 785376, 5, {101,12,9,9,8}},
+{ 785808, 5, {107,17,9,8,6}},
+{ 786240, 5, {18,16,15,14,13}},
+{ 786600, 5, {23,19,15,12,10}},
+{ 786744, 5, {223,9,8,7,7}},
+{ 787176, 5, {29,29,13,9,8}},
+{ 787248, 5, {71,14,11,9,8}},
+{ 787968, 5, {19,18,16,12,12}},
+{ 788544, 5, {37,37,9,8,8}},
+{ 788832, 5, {83,12,11,9,8}},
+{ 789120, 5, {137,10,9,8,8}},
+{ 789360, 5, {23,16,15,13,11}},
+{ 789912, 5, {53,23,9,9,8}},
+{ 790128, 5, {59,31,9,8,6}},
+{ 790272, 5, {18,16,14,14,14}},
+{ 791280, 5, {157,10,9,8,7}},
+{ 791424, 5, {229,9,8,8,6}},
+{ 792000, 5, {20,16,15,15,11}},
+{ 792288, 5, {131,12,9,8,7}},
+{ 793584, 5, {167,11,9,8,6}},
+{ 794304, 5, {197,9,8,8,7}},
+{ 794376, 5, {59,17,11,9,8}},
+{ 794808, 5, {83,19,9,8,7}},
+{ 794880, 5, {23,16,15,12,12}},
+{ 794976, 5, {21,16,14,13,13}},
+{ 795312, 5, {263,9,8,7,6}},
+{ 795600, 5, {17,16,15,15,13}},
+{ 795744, 5, {307,9,8,6,6}},
+{ 796176, 5, {97,19,9,8,6}},
+{ 796320, 5, {79,14,10,9,8}},
+{ 796536, 5, {37,23,13,9,8}},
+{ 797040, 5, {41,15,12,12,9}},
+{ 797184, 5, {173,9,8,8,8}},
+{ 797328, 5, {113,14,9,8,7}},
+{ 797472, 5, {71,13,12,9,8}},
+{ 797544, 5, {53,19,11,9,8}},
+{ 797940, 5, {31,15,13,12,11}},
+{ 798336, 5, {18,18,16,14,11}},
+{ 798660, 5, {29,17,15,12,9}},
+{ 798720, 5, {16,16,16,15,13}},
+{ 798768, 5, {43,43,9,8,6}},
+{ 798912, 5, {73,19,9,8,8}},
+{ 798984, 5, {137,9,9,9,8}},
+{ 799200, 5, {37,15,12,12,10}},
+{ 799344, 5, {61,14,13,9,8}},
+{ 799680, 5, {17,16,15,14,14}},
+{ 799920, 5, {101,11,10,9,8}},
+{ 800280, 5, {19,18,15,13,12}},
+{ 800496, 5, {109,17,9,8,6}},
+{ 800640, 5, {139,10,9,8,8}},
+{ 800856, 5, {227,9,8,7,7}},
+{ 800928, 5, {103,12,9,9,8}},
+{ 801216, 5, {107,13,9,8,8}},
+{ 801864, 5, {43,37,9,8,7}},
+{ 802368, 5, {199,9,8,8,7}},
+{ 802560, 5, {19,16,16,15,11}},
+{ 803520, 5, {31,15,12,12,12}},
+{ 803880, 5, {29,15,14,12,11}},
+{ 804168, 5, {73,17,9,9,8}},
+{ 804672, 5, {127,11,9,8,8}},
+{ 805248, 5, {233,9,8,8,6}},
+{ 805392, 5, {47,17,14,9,8}},
+{ 805464, 5, {113,11,9,9,8}},
+{ 805752, 5, {31,19,19,9,8}},
+{ 805860, 5, {37,15,12,11,11}},
+{ 806112, 5, {311,9,8,6,6}},
+{ 806400, 5, {16,16,15,15,14}},
+{ 807120, 5, {59,19,10,9,8}},
+{ 807300, 5, {23,15,15,13,12}},
+{ 807408, 5, {89,14,9,9,8}},
+{ 807840, 5, {18,17,16,15,11}},
+{ 807912, 5, {229,9,8,7,7}},
+{ 808056, 5, {43,29,9,9,8}},
+{ 808128, 5, {61,23,9,8,8}},
+{ 808704, 5, {18,18,16,13,12}},
+{ 809424, 5, {73,14,11,9,8}},
+{ 810000, 5, {16,15,15,15,15}},
+{ 810432, 5, {67,14,12,9,8}},
+{ 810648, 5, {139,9,9,9,8}},
+{ 811008, 5, {18,16,16,16,11}},
+{ 811200, 5, {20,16,15,13,13}},
+{ 811296, 5, {313,9,8,6,6}},
+{ 811440, 5, {23,15,14,14,12}},
+{ 811800, 5, {41,15,12,11,10}},
+{ 811944, 5, {179,9,9,8,7}},
+{ 812736, 5, {83,17,9,8,8}},
+{ 813120, 5, {21,20,16,11,11}},
+{ 813384, 5, {79,13,11,9,8}},
+{ 813456, 5, {269,9,8,7,6}},
+{ 813600, 5, {113,10,10,9,8}},
+{ 813888, 5, {157,9,9,8,8}},
+{ 813960, 5, {19,17,15,14,12}},
+{ 814320, 5, {29,15,13,12,12}},
+{ 814464, 5, {101,14,9,8,8}},
+{ 814752, 5, {41,23,12,9,8}},
+{ 815256, 5, {67,13,13,9,8}},
+{ 815760, 5, {103,11,10,9,8}},
+{ 816000, 5, {20,17,16,15,10}},
+{ 816192, 5, {109,13,9,8,8}},
+{ 816408, 5, {29,23,17,9,8}},
+{ 816480, 5, {18,18,15,14,12}},
+{ 816912, 5, {61,31,9,8,6}},
+{ 817128, 5, {97,13,9,9,8}},
+{ 818400, 5, {31,16,15,11,10}},
+{ 819072, 5, {79,12,12,9,8}},
+{ 819504, 5, {271,9,8,7,6}},
+{ 819720, 5, {23,18,15,12,11}},
+{ 819936, 5, {73,13,12,9,8}},
+{ 820080, 5, {67,17,10,9,8}},
+{ 820368, 5, {211,9,9,8,6}},
+{ 820800, 5, {19,16,15,15,12}},
+{ 821016, 5, {181,9,9,8,7}},
+{ 821304, 5, {61,17,11,9,8}},
+{ 821520, 5, {163,10,9,8,7}},
+{ 821664, 5, {317,9,8,6,6}},
+{ 822024, 5, {233,9,8,7,7}},
+{ 822096, 5, {173,11,9,8,6}},
+{ 822528, 5, {18,17,16,14,12}},
+{ 822960, 5, {127,10,9,9,8}},
+{ 823032, 5, {71,23,9,8,7}},
+{ 823536, 5, {43,19,14,9,8}},
+{ 823608, 5, {41,31,9,9,8}},
+{ 823680, 5, {20,18,16,13,11}},
+{ 824688, 5, {83,23,9,8,6}},
+{ 824832, 5, {179,9,8,8,8}},
+{ 824904, 5, {67,19,9,9,8}},
+{ 825120, 5, {191,10,9,8,6}},
+{ 825840, 5, {37,31,10,9,8}},
+{ 825984, 5, {239,9,8,8,6}},
+{ 826056, 5, {149,11,9,8,7}},
+{ 826200, 5, {18,17,15,15,12}},
+{ 827424, 5, {18,17,16,13,13}},
+{ 828000, 5, {23,16,15,15,10}},
+{ 828072, 5, {53,31,9,8,7}},
+{ 828576, 5, {137,12,9,8,7}},
+{ 829008, 5, {101,19,9,8,6}},
+{ 829440, 5, {18,16,16,15,12}},
+{ 829872, 5, {113,17,9,8,6}},
+{ 829920, 5, {19,16,15,14,13}},
+{ 830016, 5, {131,11,9,8,8}},
+{ 830304, 5, {31,31,12,9,8}},
+{ 830592, 5, {103,14,9,8,8}},
+{ 831096, 5, {97,17,9,8,7}},
+{ 832032, 5, {107,12,9,9,8}},
+{ 832104, 5, {127,13,9,8,7}},
+{ 832320, 5, {17,17,16,15,12}},
+{ 832464, 5, {47,41,9,8,6}},
+{ 832608, 5, {59,14,14,9,8}},
+{ 832896, 5, {241,9,8,8,6}},
+{ 833040, 5, {89,13,10,9,8}},
+{ 833760, 5, {193,10,9,8,6}},
+{ 834048, 5, {181,9,8,8,8}},
+{ 834480, 5, {61,19,10,9,8}},
+{ 835200, 5, {29,16,15,12,10}},
+{ 835848, 5, {47,19,13,9,8}},
+{ 835920, 5, {43,15,12,12,9}},
+{ 836640, 5, {83,14,10,9,8}},
+{ 836784, 5, {149,13,9,8,6}},
+{ 837000, 5, {31,15,15,12,10}},
+{ 837144, 5, {151,11,9,8,7}},
+{ 837540, 5, {47,15,12,11,9}},
+{ 837648, 5, {277,9,8,7,6}},
+{ 838080, 5, {97,12,10,9,8}},
+{ 838656, 5, {18,16,16,14,13}},
+{ 839160, 5, {37,15,14,12,9}},
+{ 839232, 5, {47,31,9,8,8}},
+{ 839376, 5, {67,29,9,8,6}},
+{ 840672, 5, {139,12,9,8,7}},
+{ 841464, 5, {31,29,13,9,8}},
+{ 841680, 5, {167,10,9,8,7}},
+{ 842160, 5, {29,16,15,11,11}},
+{ 842400, 5, {18,16,15,15,13}},
+{ 842688, 5, {19,18,16,14,11}},
+{ 843192, 5, {239,9,8,7,7}},
+{ 843336, 5, {53,17,13,9,8}},
+{ 844560, 5, {23,17,15,12,12}},
+{ 844740, 5, {19,19,15,13,12}},
+{ 844800, 5, {20,16,16,15,11}},
+{ 844992, 5, {163,9,9,8,8}},
+{ 845064, 5, {97,11,11,9,8}},
+{ 845424, 5, {103,19,9,8,6}},
+{ 845640, 5, {29,18,15,12,9}},
+{ 845856, 5, {89,12,11,9,8}},
+{ 846000, 5, {47,15,12,10,10}},
+{ 846144, 5, {113,13,9,8,8}},
+{ 846216, 5, {73,23,9,8,7}},
+{ 846720, 5, {18,16,15,14,14}},
+{ 847152, 5, {53,37,9,8,6}},
+{ 847224, 5, {41,41,9,8,7}},
+{ 847440, 5, {107,11,10,9,8}},
+{ 847584, 5, {109,12,9,9,8}},
+{ 847728, 5, {29,29,14,9,8}},
+{ 848016, 5, {151,13,9,8,6}},
+{ 848640, 5, {17,16,16,15,13}},
+{ 848880, 5, {131,10,9,9,8}},
+{ 849744, 5, {281,9,8,7,6}},
+{ 849816, 5, {37,29,11,9,8}},
+{ 850080, 5, {23,16,15,14,11}},
+{ 850248, 5, {241,9,8,7,7}},
+{ 850608, 5, {179,11,9,8,6}},
+{ 850752, 5, {211,9,8,8,7}},
+{ 850824, 5, {101,13,9,9,8}},
+{ 851040, 5, {197,10,9,8,6}},
+{ 851400, 5, {43,15,12,11,10}},
+{ 852264, 5, {89,19,9,8,7}},
+{ 852720, 5, {19,17,16,15,11}},
+{ 853128, 5, {41,17,17,9,8}},
+{ 853632, 5, {19,18,16,13,12}},
+{ 853740, 5, {31,17,15,12,9}},
+{ 853776, 5, {21,21,16,11,11}},
+{ 854496, 5, {43,23,12,9,8}},
+{ 854568, 5, {83,13,11,9,8}},
+{ 855360, 5, {18,18,16,15,11}},
+{ 855792, 5, {283,9,8,7,6}},
+{ 856080, 5, {41,29,10,9,8}},
+{ 856128, 5, {21,16,14,14,13}},
+{ 856152, 5, {47,23,11,9,8}},
+{ 856800, 5, {17,16,15,15,14}},
+{ 856980, 5, {23,23,15,12,9}},
+{ 857808, 5, {37,23,14,9,8}},
+{ 857952, 5, {331,9,8,6,6}},
+{ 858240, 5, {149,10,9,8,8}},
+{ 858312, 5, {131,13,9,8,7}},
+{ 858600, 5, {53,15,12,10,9}},
+{ 858816, 5, {71,14,12,9,8}},
+{ 859320, 5, {31,15,14,12,11}},
+{ 859680, 5, {199,10,9,8,6}},
+{ 860112, 5, {181,11,9,8,6}},
+{ 860160, 5, {16,16,16,15,14}},
+{ 860220, 5, {59,15,12,9,9}},
+{ 860472, 5, {37,19,17,9,8}},
+{ 860544, 5, {83,12,12,9,8}},
+{ 860832, 5, {61,14,14,9,8}},
+{ 861120, 5, {23,16,15,13,12}},
+{ 861300, 5, {29,15,15,12,11}},
+{ 861696, 5, {18,17,16,16,11}},
+{ 861840, 5, {19,18,15,14,12}},
+{ 862344, 5, {59,29,9,8,7}},
+{ 862848, 5, {107,14,9,8,8}},
+{ 863280, 5, {109,11,10,9,8}},
+{ 863460, 5, {41,15,13,12,9}},
+{ 863784, 5, {43,31,9,9,8}},
+{ 863928, 5, {71,13,13,9,8}},
+{ 863940, 5, {21,20,17,11,11}},
+{ 864000, 5, {16,16,15,15,15}},
+{ 864576, 5, {79,19,9,8,8}},
+{ 865260, 5, {23,19,15,12,11}},
+{ 865368, 5, {101,17,9,8,7}},
+{ 865728, 5, {167,9,9,8,8}},
+{ 865800, 5, {37,15,13,12,10}},
+{ 866376, 5, {191,9,9,8,7}},
+{ 866400, 5, {19,19,16,15,10}},
+{ 866592, 5, {59,17,12,9,8}},
+{ 867024, 5, {223,9,9,8,6}},
+{ 867456, 5, {251,9,8,8,6}},
+{ 867672, 5, {103,13,9,9,8}},
+{ 868032, 5, {137,11,9,8,8}},
+{ 868968, 5, {149,9,9,9,8}},
+{ 869040, 5, {71,17,10,9,8}},
+{ 869400, 5, {23,15,15,14,12}},
+{ 869760, 5, {151,10,9,8,8}},
+{ 870048, 5, {53,19,12,9,8}},
+{ 870264, 5, {79,17,9,9,8}},
+{ 870408, 5, {157,11,9,8,7}},
+{ 870480, 5, {31,15,13,12,12}},
+{ 870912, 5, {18,18,16,14,12}},
+{ 871488, 5, {89,17,9,8,8}},
+{ 871920, 5, {173,10,9,8,7}},
+{ 872100, 5, {19,17,15,15,12}},
+{ 872640, 5, {101,12,10,9,8}},
+{ 872712, 5, {31,23,17,9,8}},
+{ 873072, 5, {47,43,9,8,6}},
+{ 873504, 5, {337,9,8,6,6}},
+{ 873600, 5, {20,16,15,14,13}},
+{ 873792, 5, {41,37,9,8,8}},
+{ 874152, 5, {71,19,9,9,8}},
+{ 874800, 5, {18,18,15,15,12}},
+{ 875448, 5, {193,9,9,8,7}},
+{ 875520, 5, {19,16,16,15,12}},
+{ 875952, 5, {79,14,11,9,8}},
+{ 876024, 5, {23,23,23,9,8}},
+{ 876096, 5, {18,18,16,13,13}},
+{ 876456, 5, {47,37,9,8,7}},
+{ 876960, 5, {29,15,14,12,12}},
+{ 877680, 5, {53,23,10,9,8}},
+{ 877824, 5, {127,12,9,8,8}},
+{ 877968, 5, {67,14,13,9,8}},
+{ 878256, 5, {107,19,9,8,6}},
+{ 878688, 5, {113,12,9,9,8}},
+{ 878976, 5, {109,14,9,8,8}},
+{ 879120, 5, {37,15,12,12,11}},
+{ 879336, 5, {59,23,9,9,8}},
+{ 879912, 5, {101,11,11,9,8}},
+{ 879984, 5, {97,14,9,9,8}},
+{ 880128, 5, {191,9,8,8,8}},
+{ 880632, 5, {151,9,9,9,8}},
+{ 880704, 5, {139,11,9,8,8}},
+{ 881280, 5, {18,17,16,15,12}},
+{ 881712, 5, {157,13,9,8,6}},
+{ 882180, 5, {29,15,13,13,12}},
+{ 882504, 5, {103,17,9,8,7}},
+{ 882576, 5, {227,9,9,8,6}},
+{ 882648, 5, {41,23,13,9,8}},
+{ 883008, 5, {73,14,12,9,8}},
+{ 883200, 5, {23,16,16,15,10}},
+{ 883224, 5, {47,29,9,9,8}},
+{ 884304, 5, {89,23,9,8,6}},
+{ 884340, 5, {17,17,17,15,12}},
+{ 884736, 5, {18,16,16,16,12}},
+{ 885312, 5, {53,29,9,8,8}},
+{ 885528, 5, {251,9,8,7,7}},
+{ 885600, 5, {41,15,12,12,10}},
+{ 886032, 5, {293,9,8,7,6}},
+{ 887040, 5, {20,18,16,14,11}},
+{ 887112, 5, {37,37,9,9,8}},
+{ 887328, 5, {79,13,12,9,8}},
+{ 887400, 5, {29,17,15,12,10}},
+{ 887616, 5, {67,23,9,8,8}},
+{ 887760, 5, {137,10,9,9,8}},
+{ 887832, 5, {59,19,11,9,8}},
+{ 888000, 5, {37,16,15,10,10}},
+{ 888192, 5, {257,9,8,8,6}},
+{ 888264, 5, {73,13,13,9,8}},
+{ 888552, 5, {43,41,9,8,7}},
+{ 889200, 5, {19,16,15,15,13}},
+{ 889344, 5, {193,9,8,8,8}},
+{ 889380, 5, {61,15,12,9,9}},
+{ 889488, 5, {71,29,9,8,6}},
+{ 889920, 5, {103,12,10,9,8}},
+{ 890352, 5, {229,9,9,8,6}},
+{ 891072, 5, {18,17,16,14,13}},
+{ 891576, 5, {61,29,9,8,7}},
+{ 892320, 5, {22,16,15,13,13}},
+{ 892620, 5, {29,19,15,12,9}},
+{ 892800, 5, {31,16,15,12,10}},
+{ 892980, 5, {41,15,12,11,11}},
+{ 893520, 5, {73,17,10,9,8}},
+{ 893592, 5, {197,9,9,8,7}},
+{ 893760, 5, {19,16,15,14,14}},
+{ 894240, 5, {23,18,15,12,12}},
+{ 894672, 5, {109,19,9,8,6}},
+{ 894744, 5, {43,17,17,9,8}},
+{ 894960, 5, {113,11,10,9,8}},
+{ 895968, 5, {61,17,12,9,8}},
+{ 896112, 5, {127,14,9,8,7}},
+{ 896832, 5, {173,9,9,8,8}},
+{ 897120, 5, {89,14,10,9,8}},
+{ 897264, 5, {67,31,9,8,6}},
+{ 897336, 5, {103,11,11,9,8}},
+{ 897600, 5, {20,17,16,15,11}},
+{ 897624, 5, {137,13,9,8,7}},
+{ 897840, 5, {43,29,10,9,8}},
+{ 898425, 5, {27,25,11,11,11}},
+{ 898560, 5, {18,16,16,15,13}},
+{ 898776, 5, {73,19,9,9,8}},
+{ 899100, 5, {37,15,15,12,9}},
+{ 899136, 5, {223,9,8,8,7}},
+{ 899424, 5, {347,9,8,6,6}},
+{ 899496, 5, {31,31,13,9,8}},
+{ 900144, 5, {47,19,14,9,8}},
+{ 900240, 5, {31,16,15,11,11}},
+{ 900720, 5, {139,10,9,9,8}},
+{ 901152, 5, {149,12,9,8,7}},
+{ 901368, 5, {107,13,9,9,8}},
+{ 901680, 5, {17,17,16,15,13}},
+{ 902088, 5, {67,17,11,9,8}},
+{ 902160, 5, {179,10,9,8,7}},
+{ 902664, 5, {199,9,9,8,7}},
+{ 902880, 5, {19,18,16,15,11}},
+{ 903168, 5, {18,16,16,14,14}},
+{ 903672, 5, {163,11,9,8,7}},
+{ 903960, 5, {31,18,15,12,9}},
+{ 904320, 5, {157,10,9,8,8}},
+{ 904608, 5, {349,9,8,6,6}},
+{ 904800, 5, {29,16,15,13,10}},
+{ 905256, 5, {127,11,9,9,8}},
+{ 905472, 5, {131,12,9,8,8}},
+{ 905580, 5, {43,15,13,12,9}},
+{ 905904, 5, {233,9,9,8,6}},
+{ 906192, 5, {31,29,14,9,8}},
+{ 906696, 5, {257,9,8,7,7}},
+{ 907200, 5, {18,16,15,15,14}},
+{ 907632, 5, {191,11,9,8,6}},
+{ 907776, 5, {197,9,8,8,8}},
+{ 907920, 5, {97,13,10,9,8}},
+{ 908208, 5, {53,17,14,9,8}},
+{ 908352, 5, {83,19,9,8,8}},
+{ 908424, 5, {37,31,11,9,8}},
+{ 908544, 5, {21,16,16,13,13}},
+{ 908928, 5, {263,9,8,8,6}},
+{ 909144, 5, {61,23,9,9,8}},
+{ 909720, 5, {19,19,15,14,12}},
+{ 910728, 5, {139,13,9,8,7}},
+{ 910800, 5, {23,16,15,15,11}},
+{ 911232, 5, {113,14,9,8,8}},
+{ 911520, 5, {211,10,9,8,6}},
+{ 912000, 5, {20,19,16,15,10}},
+{ 912240, 5, {181,10,9,8,7}},
+{ 912384, 5, {18,18,16,16,11}},
+{ 912456, 5, {29,23,19,9,8}},
+{ 913248, 5, {151,12,9,8,7}},
+{ 913680, 5, {47,15,12,12,9}},
+{ 913920, 5, {17,16,16,15,14}},
+{ 914328, 5, {83,17,9,9,8}},
+{ 914400, 5, {127,10,10,9,8}},
+{ 914544, 5, {73,29,9,8,6}},
+{ 914760, 5, {21,20,18,11,11}},
+{ 914940, 5, {23,17,15,13,12}},
+{ 914976, 5, {353,9,8,6,6}},
+{ 915120, 5, {41,31,10,9,8}},
+{ 915264, 5, {227,9,8,8,7}},
+{ 915408, 5, {163,13,9,8,6}},
+{ 915552, 5, {18,17,17,16,11}},
+{ 915624, 5, {157,9,9,9,8}},
+{ 915768, 5, {79,23,9,8,7}},
+{ 916272, 5, {101,14,9,9,8}},
+{ 916344, 5, {89,13,11,9,8}},
+{ 916416, 5, {43,37,9,8,8}},
+{ 916560, 5, {67,19,10,9,8}},
+{ 916776, 5, {107,17,9,8,7}},
+{ 916992, 5, {199,9,8,8,8}},
+{ 917136, 5, {193,11,9,8,6}},
+{ 917928, 5, {61,19,11,9,8}},
+{ 918000, 5, {17,16,15,15,15}},
+{ 918216, 5, {109,13,9,9,8}},
+{ 918720, 5, {29,16,15,12,11}},
+{ 919296, 5, {19,18,16,14,12}},
+{ 920304, 5, {83,14,11,9,8}},
+{ 920700, 5, {31,15,15,12,11}},
+{ 921600, 5, {16,16,16,15,15}},
+{ 921816, 5, {59,31,9,8,7}},
+{ 921888, 5, {97,12,11,9,8}},
+{ 921984, 5, {21,16,14,14,14}},
+{ 922740, 5, {21,20,13,13,13}},
+{ 922752, 5, {89,12,12,9,8}},
+{ 923328, 5, {229,9,8,8,7}},
+{ 923400, 5, {19,18,15,15,12}},
+{ 924336, 5, {131,14,9,8,7}},
+{ 924480, 5, {107,12,10,9,8}},
+{ 924768, 5, {19,18,16,13,13}},
+{ 925704, 5, {43,23,13,9,8}},
+{ 925848, 5, {167,11,9,8,7}},
+{ 927072, 5, {37,29,12,9,8}},
+{ 927360, 5, {23,16,15,14,12}},
+{ 927504, 5, {113,19,9,8,6}},
+{ 927864, 5, {263,9,8,7,7}},
+{ 927936, 5, {179,9,9,8,8}},
+{ 928368, 5, {307,9,8,7,6}},
+{ 928800, 5, {43,15,12,12,10}},
+{ 928872, 5, {97,19,9,8,7}},
+{ 929232, 5, {239,9,9,8,6}},
+{ 929280, 5, {22,16,16,15,11}},
+{ 929664, 5, {269,9,8,8,6}},
+{ 929880, 5, {41,15,14,12,9}},
+{ 930240, 5, {19,17,16,15,12}},
+{ 930384, 5, {71,14,13,9,8}},
+{ 930528, 5, {359,9,8,6,6}},
+{ 930600, 5, {47,15,12,11,10}},
+{ 931500, 5, {23,15,15,15,12}},
+{ 931896, 5, {43,43,9,8,7}},
+{ 932184, 5, {107,11,11,9,8}},
+{ 932256, 5, {83,13,12,9,8}},
+{ 932400, 5, {37,15,14,12,10}},
+{ 932688, 5, {127,17,9,8,6}},
+{ 932880, 5, {23,16,15,13,13}},
+{ 933120, 5, {18,18,16,15,12}},
+{ 933768, 5, {131,11,9,9,8}},
+{ 933912, 5, {109,17,9,8,7}},
+{ 933984, 5, {47,23,12,9,8}},
+{ 934416, 5, {103,14,9,9,8}},
+{ 936000, 5, {20,16,15,15,13}},
+{ 936144, 5, {197,11,9,8,6}},
+{ 936360, 5, {18,17,17,15,12}},
+{ 936540, 5, {43,15,12,11,11}},
+{ 936576, 5, {271,9,8,8,6}},
+{ 937008, 5, {241,9,9,8,6}},
+{ 937440, 5, {31,15,14,12,12}},
+{ 937872, 5, {167,13,9,8,6}},
+{ 938304, 5, {181,9,9,8,8}},
+{ 938400, 5, {23,17,16,15,10}},
+{ 938736, 5, {53,41,9,8,6}},
+{ 938808, 5, {59,17,13,9,8}},
+{ 938880, 5, {163,10,9,8,8}},
+{ 939456, 5, {233,9,8,8,7}},
+{ 939600, 5, {29,15,15,12,12}},
+{ 940032, 5, {18,17,16,16,12}},
+{ 940464, 5, {311,9,8,7,6}},
+{ 940608, 5, {71,23,9,8,8}},
+{ 940800, 5, {20,16,15,14,14}},
+{ 941688, 5, {41,29,11,9,8}},
+{ 941760, 5, {109,12,10,9,8}},
+{ 942552, 5, {53,19,13,9,8}},
+{ 943020, 5, {31,15,13,13,12}},
+{ 943056, 5, {59,37,9,8,6}},
+{ 943200, 5, {131,10,10,9,8}},
+{ 943488, 5, {18,18,16,14,13}},
+{ 943920, 5, {23,19,15,12,12}},
+{ 944064, 5, {149,11,9,8,8}},
+{ 944136, 5, {47,31,9,9,8}},
+{ 944460, 5, {53,15,12,11,9}},
+{ 945360, 5, {101,13,10,9,8}},
+{ 945504, 5, {67,14,14,9,8}},
+{ 945648, 5, {199,11,9,8,6}},
+{ 946368, 5, {53,31,9,8,8}},
+{ 946512, 5, {313,9,8,7,6}},
+{ 946944, 5, {137,12,9,8,8}},
+{ 948480, 5, {19,16,16,15,13}},
+{ 948600, 5, {31,17,15,12,10}},
+{ 949032, 5, {269,9,8,7,7}},
+{ 949536, 5, {157,12,9,8,7}},
+{ 949608, 5, {109,11,11,9,8}},
+{ 949824, 5, {97,17,9,8,8}},
+{ 950040, 5, {29,15,14,13,12}},
+{ 950400, 5, {20,18,16,15,11}},
+{ 950544, 5, {41,23,14,9,8}},
+{ 950616, 5, {163,9,9,9,8}},
+{ 950832, 5, {71,31,9,8,6}},
+{ 950976, 5, {127,13,9,8,8}},
+{ 951264, 5, {367,9,8,6,6}},
+{ 951912, 5, {113,13,9,9,8}},
+{ 952200, 5, {23,23,15,12,10}},
+{ 952380, 5, {37,15,13,12,11}},
+{ 953040, 5, {19,19,16,15,11}},
+{ 953064, 5, {61,31,9,8,7}},
+{ 953496, 5, {41,19,17,9,8}},
+{ 953856, 5, {23,18,16,12,12}},
+{ 954000, 5, {53,15,12,10,10}},
+{ 954180, 5, {31,19,15,12,9}},
+{ 954288, 5, {47,47,9,8,6}},
+{ 954720, 5, {18,17,16,15,13}},
+{ 955584, 5, {79,14,12,9,8}},
+{ 955800, 5, {59,15,12,10,9}},
+{ 955944, 5, {71,17,11,9,8}},
+{ 956088, 5, {271,9,8,7,7}},
+{ 956592, 5, {73,14,13,9,8}},
+{ 956736, 5, {151,11,9,8,8}},
+{ 957096, 5, {211,9,9,8,7}},
+{ 957312, 5, {277,9,8,8,6}},
+{ 957600, 5, {19,16,15,15,14}},
+{ 958320, 5, {22,22,15,12,11}},
+{ 958464, 5, {18,16,16,16,13}},
+{ 958608, 5, {317,9,8,7,6}},
+{ 959040, 5, {37,15,12,12,12}},
+{ 959112, 5, {173,11,9,8,7}},
+{ 959400, 5, {41,15,13,12,10}},
+{ 959616, 5, {18,17,16,14,14}},
+{ 959760, 5, {43,31,10,9,8}},
+{ 959904, 5, {101,12,11,9,8}},
+{ 960000, 5, {20,20,16,15,10}},
+{ 960768, 5, {139,12,9,8,8}},
+{ 960960, 5, {22,16,15,14,13}},
+{ 961272, 5, {79,13,13,9,8}},
+{ 961704, 5, {37,19,19,9,8}},
+{ 961920, 5, {167,10,9,8,8}},
+{ 962064, 5, {131,17,9,8,6}},
+{ 962136, 5, {83,23,9,8,7}},
+{ 962640, 5, {191,10,9,8,7}},
+{ 963072, 5, {19,18,16,16,11}},
+{ 963360, 5, {223,10,9,8,6}},
+{ 963648, 5, {239,9,8,8,7}},
+{ 963792, 5, {97,23,9,8,6}},
+{ 964080, 5, {103,13,10,9,8}},
+{ 965328, 5, {21,17,16,13,13}},
+{ 965448, 5, {53,23,11,9,8}},
+{ 965520, 5, {149,10,9,9,8}},
+{ 965580, 5, {21,20,19,11,11}},
+{ 966672, 5, {137,14,9,8,7}},
+{ 966816, 5, {373,9,8,6,6}},
+{ 966960, 5, {79,17,10,9,8}},
+{ 967104, 5, {73,23,9,8,8}},
+{ 967176, 5, {101,19,9,8,7}},
+{ 967200, 5, {31,16,15,13,10}},
+{ 967680, 5, {18,16,16,15,14}},
+{ 968184, 5, {113,17,9,8,7}},
+{ 968256, 5, {41,41,9,8,8}},
+{ 968544, 5, {59,19,12,9,8}},
+{ 968688, 5, {31,31,14,9,8}},
+{ 968760, 5, {23,18,15,13,12}},
+{ 969408, 5, {18,18,17,16,11}},
+{ 970632, 5, {61,17,13,9,8}},
+{ 970704, 5, {107,14,9,9,8}},
+{ 971040, 5, {17,17,16,15,14}},
+{ 971136, 5, {281,9,8,8,6}},
+{ 971208, 5, {47,41,9,8,7}},
+{ 971280, 5, {71,19,10,9,8}},
+{ 971520, 5, {23,16,16,15,11}},
+{ 971568, 5, {173,13,9,8,6}},
+{ 971712, 5, {241,9,8,8,7}},
+{ 972000, 5, {18,16,15,15,15}},
+{ 972288, 5, {211,9,8,8,8}},
+{ 972648, 5, {79,19,9,9,8}},
+{ 972720, 5, {193,10,9,8,7}},
+{ 973440, 5, {20,18,16,13,13}},
+{ 973944, 5, {167,9,9,9,8}},
+{ 974016, 5, {89,19,9,8,8}},
+{ 974160, 5, {41,15,12,12,11}},
+{ 974400, 5, {29,16,15,14,10}},
+{ 974700, 5, {19,19,15,15,12}},
+{ 975024, 5, {61,37,9,8,6}},
+{ 975240, 5, {43,15,14,12,9}},
+{ 975384, 5, {31,23,19,9,8}},
+{ 975888, 5, {251,9,9,8,6}},
+{ 976140, 5, {29,17,15,12,11}},
+{ 976248, 5, {149,13,9,8,7}},
+{ 976320, 5, {113,12,10,9,8}},
+{ 976536, 5, {137,11,9,9,8}},
+{ 976800, 5, {37,16,15,11,10}},
+{ 976860, 5, {67,15,12,9,9}},
+{ 977040, 5, {59,23,10,9,8}},
+{ 977256, 5, {277,9,8,7,7}},
+{ 977616, 5, {73,31,9,8,6}},
+{ 977760, 5, {97,14,10,9,8}},
+{ 977976, 5, {47,17,17,9,8}},
+{ 978048, 5, {283,9,8,8,6}},
+{ 978432, 5, {21,16,16,14,13}},
+{ 978480, 5, {151,10,9,9,8}},
+{ 978912, 5, {103,12,11,9,8}},
+{ 979200, 5, {17,16,16,15,15}},
+{ 979272, 5, {67,29,9,8,7}},
+{ 980424, 5, {89,17,9,9,8}},
+{ 980640, 5, {227,10,9,8,6}},
+{ 980784, 5, {139,14,9,8,7}},
+{ 980928, 5, {131,13,9,8,8}},
+{ 981360, 5, {47,29,10,9,8}},
+{ 982080, 5, {31,16,15,12,11}},
+{ 982368, 5, {379,9,8,6,6}},
+{ 982872, 5, {73,17,11,9,8}},
+{ 983016, 5, {41,37,9,9,8}},
+{ 983040, 5, {16,16,16,16,15}},
+{ 984000, 5, {41,16,15,10,10}},
+{ 984096, 5, {67,17,12,9,8}},
+{ 984456, 5, {113,11,11,9,8}},
+{ 984528, 5, {53,43,9,8,6}},
+{ 984960, 5, {19,18,16,15,12}},
+{ 985320, 5, {23,17,15,14,12}},
+{ 985536, 5, {59,29,9,8,8}},
+{ 985680, 5, {37,37,10,9,8}},
+{ 985824, 5, {163,12,9,8,7}},
+{ 986328, 5, {103,19,9,8,7}},
+{ 986400, 5, {137,10,10,9,8}},
+{ 986832, 5, {89,14,11,9,8}},
+{ 987360, 5, {22,17,16,15,11}},
+{ 987552, 5, {127,12,9,9,8}},
+{ 987624, 5, {43,29,11,9,8}},
+{ 988200, 5, {61,15,12,10,9}},
+{ 988344, 5, {53,37,9,8,7}},
+{ 988380, 5, {19,17,17,15,12}},
+{ 988416, 5, {22,18,16,13,12}},
+{ 988650, 5, {25,18,13,13,13}},
+{ 988848, 5, {109,14,9,9,8}},
+{ 988992, 5, {101,17,9,8,8}},
+{ 989280, 5, {229,10,9,8,6}},
+{ 989352, 5, {151,13,9,8,7}},
+{ 989712, 5, {79,29,9,8,6}},
+{ 989820, 5, {47,15,13,12,9}},
+{ 990144, 5, {191,9,9,8,8}},
+{ 990792, 5, {139,11,9,9,8}},
+{ 991008, 5, {37,31,12,9,8}},
+{ 991368, 5, {281,9,8,7,7}},
+{ 991440, 5, {18,18,17,15,12}},
+{ 991800, 5, {29,19,15,12,10}},
+{ 992376, 5, {179,11,9,8,7}},
+{ 992736, 5, {383,9,8,6,6}},
+{ 992880, 5, {197,10,9,8,7}},
+{ 993600, 5, {23,16,15,15,12}},
+{ 993720, 5, {21,20,14,13,13}},
+{ 994752, 5, {157,11,9,8,8}},
+{ 995280, 5, {29,16,15,13,11}},
+{ 995328, 5, {18,18,16,16,12}},
+{ 995904, 5, {19,18,16,14,13}},
+{ 995976, 5, {53,29,9,9,8}},
+{ 996300, 5, {41,15,15,12,9}},
+{ 996480, 5, {173,10,9,8,8}},
+{ 996912, 5, {43,23,14,9,8}},
+{ 998400, 5, {20,16,16,15,13}},
+{ 998424, 5, {283,9,8,7,7}},
+{ 998568, 5, {67,23,9,9,8}},
+{ 998640, 5, {73,19,10,9,8}},
+{ 998712, 5, {97,13,11,9,8}},
+{ 998784, 5, {18,17,17,16,12}},
+{ 999000, 5, {37,15,15,12,10}},
+{ 999216, 5, {257,9,9,8,6}},
+{ 999648, 5, {89,13,12,9,8}},
+{ 432, 6, {4,3,3,3,2,2}},
+{ 648, 6, {4,3,3,3,3,2}},
+{ 864, 6, {4,4,3,3,3,2}},
+{ 972, 6, {4,3,3,3,3,3}},
+{ 1296, 6, {4,4,3,3,3,3}},
+{ 1620, 6, {5,4,3,3,3,3}},
+{ 1728, 6, {4,4,4,3,3,3}},
+{ 1944, 6, {6,4,3,3,3,3}},
+{ 2592, 6, {6,4,4,3,3,3}},
+{ 2700, 6, {5,5,4,3,3,3}},
+{ 3240, 6, {6,5,4,3,3,3}},
+{ 3456, 6, {6,4,4,4,3,3}},
+{ 3888, 6, {6,6,4,3,3,3}},
+{ 4500, 6, {5,5,5,4,3,3}},
+{ 5184, 6, {6,6,4,4,3,3}},
+{ 5400, 6, {6,5,5,4,3,3}},
+{ 6480, 6, {6,6,5,4,3,3}},
+{ 6912, 6, {6,6,4,4,4,3}},
+{ 7500, 6, {5,5,5,5,4,3}},
+{ 7776, 6, {6,6,6,4,3,3}},
+{ 9000, 6, {6,5,5,5,4,3}},
+{ 10368, 6, {6,6,6,4,4,3}},
+{ 10800, 6, {6,6,5,5,4,3}},
+{ 12500, 6, {5,5,5,5,5,4}},
+{ 12960, 6, {6,6,6,5,4,3}},
+{ 15000, 6, {6,5,5,5,5,4}},
+{ 15552, 6, {6,6,6,6,4,3}},
+{ 18000, 6, {6,6,5,5,5,4}},
+{ 18750, 6, {6,5,5,5,5,5}},
+{ 21600, 6, {6,6,6,5,5,4}},
+{ 25000, 6, {8,5,5,5,5,5}},
+{ 25920, 6, {6,6,6,6,5,4}},
+{ 28125, 6, {9,5,5,5,5,5}},
+{ 30000, 6, {8,6,5,5,5,5}},
+{ 36000, 6, {8,6,6,5,5,5}},
+{ 37500, 6, {10,6,5,5,5,5}},
+{ 43200, 6, {8,6,6,6,5,5}},
+{ 45000, 6, {9,8,5,5,5,5}},
+{ 50000, 6, {10,8,5,5,5,5}},
+{ 51840, 6, {8,6,6,6,6,5}},
+{ 54000, 6, {9,8,6,5,5,5}},
+{ 56250, 6, {10,9,5,5,5,5}},
+{ 60000, 6, {10,8,6,5,5,5}},
+{ 63000, 6, {9,8,7,5,5,5}},
+{ 64800, 6, {9,8,6,6,5,5}},
+{ 72000, 6, {9,8,8,5,5,5}},
+{ 75000, 6, {10,10,6,5,5,5}},
+{ 75600, 6, {9,8,7,6,5,5}},
+{ 81000, 6, {9,9,8,5,5,5}},
+{ 84375, 6, {15,9,5,5,5,5}},
+{ 86400, 6, {9,8,8,6,5,5}},
+{ 88200, 6, {9,8,7,7,5,5}},
+{ 93312, 6, {9,8,6,6,6,6}},
+{ 97200, 6, {9,9,8,6,5,5}},
+{ 100000, 6, {10,10,8,5,5,5}},
+{ 100800, 6, {9,8,8,7,5,5}},
+{ 108864, 6, {9,8,7,6,6,6}},
+{ 112500, 6, {10,10,9,5,5,5}},
+{ 113400, 6, {9,9,8,7,5,5}},
+{ 115200, 6, {9,8,8,8,5,5}},
+{ 120000, 6, {10,10,8,6,5,5}},
+{ 124416, 6, {9,8,8,6,6,6}},
+{ 127008, 6, {9,8,7,7,6,6}},
+{ 139968, 6, {9,9,8,6,6,6}},
+{ 144000, 6, {10,10,8,6,6,5}},
+{ 145152, 6, {9,8,8,7,6,6}},
+{ 145800, 6, {9,9,9,8,5,5}},
+{ 148176, 6, {9,8,7,7,7,6}},
+{ 150000, 6, {10,10,10,6,5,5}},
+{ 155520, 6, {10,9,8,6,6,6}},
+{ 163296, 6, {9,9,8,7,6,6}},
+{ 165888, 6, {9,8,8,8,6,6}},
+{ 168750, 6, {15,10,9,5,5,5}},
+{ 169344, 6, {9,8,8,7,7,6}},
+{ 171072, 6, {11,9,8,6,6,6}},
+{ 172872, 6, {9,8,7,7,7,7}},
+{ 181440, 6, {10,9,8,7,6,6}},
+{ 186624, 6, {9,9,8,8,6,6}},
+{ 190512, 6, {9,9,8,7,7,6}},
+{ 193536, 6, {9,8,8,8,7,6}},
+{ 197568, 6, {9,8,8,7,7,7}},
+{ 199584, 6, {11,9,8,7,6,6}},
+{ 200000, 6, {10,10,10,8,5,5}},
+{ 202176, 6, {13,9,8,6,6,6}},
+{ 207360, 6, {10,9,8,8,6,6}},
+{ 209952, 6, {9,9,9,8,6,6}},
+{ 211680, 6, {10,9,8,7,7,6}},
+{ 217728, 6, {9,9,8,8,7,6}},
+{ 221184, 6, {9,8,8,8,8,6}},
+{ 222264, 6, {9,9,8,7,7,7}},
+{ 225000, 6, {10,10,10,9,5,5}},
+{ 225792, 6, {9,8,8,8,7,7}},
+{ 228096, 6, {11,9,8,8,6,6}},
+{ 232848, 6, {11,9,8,7,7,6}},
+{ 233280, 6, {10,9,9,8,6,6}},
+{ 235872, 6, {13,9,8,7,6,6}},
+{ 240000, 6, {10,10,10,8,6,5}},
+{ 241920, 6, {10,9,8,8,7,6}},
+{ 244944, 6, {9,9,9,8,7,6}},
+{ 246960, 6, {10,9,8,7,7,7}},
+{ 248832, 6, {9,9,8,8,8,6}},
+{ 253125, 6, {15,15,9,5,5,5}},
+{ 254016, 6, {9,9,8,8,7,7}},
+{ 256608, 6, {11,9,9,8,6,6}},
+{ 258048, 6, {9,8,8,8,8,7}},
+{ 259200, 6, {10,10,9,8,6,6}},
+{ 264384, 6, {17,9,8,6,6,6}},
+{ 266112, 6, {11,9,8,8,7,6}},
+{ 269568, 6, {13,9,8,8,6,6}},
+{ 271656, 6, {11,9,8,7,7,7}},
+{ 272160, 6, {10,9,9,8,7,6}},
+{ 275184, 6, {13,9,8,7,7,6}},
+{ 276480, 6, {10,9,8,8,8,6}},
+{ 279936, 6, {9,9,9,8,8,6}},
+{ 282240, 6, {10,9,8,8,7,7}},
+{ 285120, 6, {11,10,9,8,6,6}},
+{ 285768, 6, {9,9,9,8,7,7}},
+{ 290304, 6, {9,9,8,8,8,7}},
+{ 294912, 6, {9,8,8,8,8,8}},
+{ 295488, 6, {19,9,8,6,6,6}},
+{ 296352, 6, {12,9,8,7,7,7}},
+{ 299376, 6, {11,9,9,8,7,6}},
+{ 300000, 6, {10,10,10,10,6,5}},
+{ 302400, 6, {10,10,9,8,7,6}},
+{ 303264, 6, {13,9,9,8,6,6}},
+{ 304128, 6, {11,9,8,8,8,6}},
+{ 308448, 6, {17,9,8,7,6,6}},
+{ 310464, 6, {11,9,8,8,7,7}},
+{ 311040, 6, {10,9,9,8,8,6}},
+{ 313632, 6, {11,11,9,8,6,6}},
+{ 314496, 6, {13,9,8,8,7,6}},
+{ 314928, 6, {9,9,9,9,8,6}},
+{ 317520, 6, {10,9,9,8,7,7}},
+{ 321048, 6, {13,9,8,7,7,7}},
+{ 322560, 6, {10,9,8,8,8,7}},
+{ 326592, 6, {9,9,9,8,8,7}},
+{ 331776, 6, {9,9,8,8,8,8}},
+{ 332640, 6, {11,10,9,8,7,6}},
+{ 336960, 6, {13,10,9,8,6,6}},
+{ 337500, 6, {15,10,10,9,5,5}},
+{ 338688, 6, {12,9,8,8,7,7}},
+{ 342144, 6, {11,9,9,8,8,6}},
+{ 344736, 6, {19,9,8,7,6,6}},
+{ 345600, 6, {10,10,9,8,8,6}},
+{ 349272, 6, {11,9,9,8,7,7}},
+{ 349920, 6, {10,9,9,9,8,6}},
+{ 352512, 6, {17,9,8,8,6,6}},
+{ 352800, 6, {10,10,9,8,7,7}},
+{ 353808, 6, {13,9,9,8,7,6}},
+{ 354816, 6, {11,9,8,8,8,7}},
+{ 357696, 6, {23,9,8,6,6,6}},
+{ 359424, 6, {13,9,8,8,8,6}},
+{ 359856, 6, {17,9,8,7,7,6}},
+{ 362880, 6, {10,9,9,8,8,7}},
+{ 365904, 6, {11,11,9,8,7,6}},
+{ 366912, 6, {13,9,8,8,7,7}},
+{ 367416, 6, {9,9,9,9,8,7}},
+{ 368640, 6, {10,9,8,8,8,8}},
+{ 370656, 6, {13,11,9,8,6,6}},
+{ 373248, 6, {9,9,9,8,8,8}},
+{ 380160, 6, {11,10,9,8,8,6}},
+{ 381024, 6, {12,9,9,8,7,7}},
+{ 384912, 6, {11,9,9,9,8,6}},
+{ 387072, 6, {12,9,8,8,8,7}},
+{ 388080, 6, {11,10,9,8,7,7}},
+{ 388800, 6, {10,10,9,9,8,6}},
+{ 393120, 6, {13,10,9,8,7,6}},
+{ 393984, 6, {19,9,8,8,6,6}},
+{ 396576, 6, {17,9,9,8,6,6}},
+{ 399168, 6, {11,9,9,8,8,7}},
+{ 400000, 6, {10,10,10,10,8,5}},
+{ 402192, 6, {19,9,8,7,7,6}},
+{ 403200, 6, {10,10,9,8,8,7}},
+{ 404352, 6, {13,9,9,8,8,6}},
+{ 405504, 6, {11,9,8,8,8,8}},
+{ 408240, 6, {10,9,9,9,8,7}},
+{ 411264, 6, {17,9,8,8,7,6}},
+{ 412776, 6, {13,9,9,8,7,7}},
+{ 414720, 6, {10,9,9,8,8,8}},
+{ 417312, 6, {23,9,8,7,6,6}},
+{ 418176, 6, {11,11,9,8,8,6}},
+{ 419328, 6, {13,9,8,8,8,7}},
+{ 419832, 6, {17,9,8,7,7,7}},
+{ 419904, 6, {9,9,9,9,8,8}},
+{ 423360, 6, {12,10,9,8,7,7}},
+{ 426888, 6, {11,11,9,8,7,7}},
+{ 427680, 6, {11,10,9,9,8,6}},
+{ 432000, 6, {10,10,10,9,8,6}},
+{ 432432, 6, {13,11,9,8,7,6}},
+{ 435456, 6, {12,9,9,8,8,7}},
+{ 438048, 6, {13,13,9,8,6,6}},
+{ 440640, 6, {17,10,9,8,6,6}},
+{ 442368, 6, {12,9,8,8,8,8}},
+{ 443232, 6, {19,9,9,8,6,6}},
+{ 443520, 6, {11,10,9,8,8,7}},
+{ 449064, 6, {11,9,9,9,8,7}},
+{ 449280, 6, {13,10,9,8,8,6}},
+{ 450000, 6, {10,10,10,10,9,5}},
+{ 451008, 6, {29,9,8,6,6,6}},
+{ 453600, 6, {10,10,9,9,8,7}},
+{ 454896, 6, {13,9,9,9,8,6}},
+{ 456192, 6, {11,9,9,8,8,8}},
+{ 458640, 6, {13,10,9,8,7,7}},
+{ 459648, 6, {19,9,8,8,7,6}},
+{ 460800, 6, {10,10,9,8,8,8}},
+{ 462672, 6, {17,9,9,8,7,6}},
+{ 465696, 6, {12,11,9,8,7,7}},
+{ 466560, 6, {10,9,9,9,8,8}},
+{ 469224, 6, {19,9,8,7,7,7}},
+{ 470016, 6, {17,9,8,8,8,6}},
+{ 470448, 6, {11,11,9,9,8,6}},
+{ 471744, 6, {13,9,9,8,8,7}},
+{ 472392, 6, {9,9,9,9,9,8}},
+{ 475200, 6, {11,10,10,9,8,6}},
+{ 476928, 6, {23,9,8,8,6,6}},
+{ 479232, 6, {13,9,8,8,8,8}},
+{ 479808, 6, {17,9,8,8,7,7}},
+{ 482112, 6, {31,9,8,6,6,6}},
+{ 483840, 6, {12,10,9,8,8,7}},
+{ 484704, 6, {17,11,9,8,6,6}},
+{ 486864, 6, {23,9,8,7,7,6}},
+{ 487872, 6, {11,11,9,8,8,7}},
+{ 489888, 6, {12,9,9,9,8,7}},
+{ 492480, 6, {19,10,9,8,6,6}},
+{ 494208, 6, {13,11,9,8,8,6}},
+{ 497664, 6, {12,9,9,8,8,8}},
+{ 498960, 6, {11,10,9,9,8,7}},
+{ 504000, 6, {10,10,10,9,8,7}},
+{ 504504, 6, {13,11,9,8,7,7}},
+{ 505440, 6, {13,10,9,9,8,6}},
+{ 506250, 6, {15,15,10,9,5,5}},
+{ 506880, 6, {11,10,9,8,8,8}},
+{ 508032, 6, {12,12,9,8,7,7}},
+{ 511056, 6, {13,13,9,8,7,6}},
+{ 513216, 6, {11,9,9,9,8,8}},
+{ 514080, 6, {17,10,9,8,7,6}},
+{ 517104, 6, {19,9,9,8,7,6}},
+{ 518400, 6, {10,10,9,9,8,8}},
+{ 522720, 6, {11,11,10,9,8,6}},
+{ 524160, 6, {13,10,9,8,8,7}},
+{ 524880, 6, {10,9,9,9,9,8}},
+{ 525312, 6, {19,9,8,8,8,6}},
+{ 526176, 6, {29,9,8,7,6,6}},
+{ 528768, 6, {17,9,9,8,8,6}},
+{ 530712, 6, {13,9,9,9,8,7}},
+{ 532224, 6, {12,11,9,8,8,7}},
+{ 536256, 6, {19,9,8,8,7,7}},
+{ 536544, 6, {23,9,9,8,6,6}},
+{ 539136, 6, {13,9,9,8,8,8}},
+{ 539784, 6, {17,9,9,8,7,7}},
+{ 541728, 6, {19,11,9,8,6,6}},
+{ 544320, 6, {12,10,9,9,8,7}},
+{ 548352, 6, {17,9,8,8,8,7}},
+{ 548856, 6, {11,11,9,9,8,7}},
+{ 550368, 6, {13,12,9,8,7,7}},
+{ 552960, 6, {12,10,9,8,8,8}},
+{ 554400, 6, {11,10,10,9,8,7}},
+{ 555984, 6, {13,11,9,9,8,6}},
+{ 556416, 6, {23,9,8,8,7,6}},
+{ 557568, 6, {11,11,9,8,8,8}},
+{ 559872, 6, {12,9,9,9,8,8}},
+{ 561600, 6, {13,10,10,9,8,6}},
+{ 562464, 6, {31,9,8,7,6,6}},
+{ 565488, 6, {17,11,9,8,7,6}},
+{ 568008, 6, {23,9,8,7,7,7}},
+{ 570240, 6, {11,10,9,9,8,8}},
+{ 572832, 6, {17,13,9,8,6,6}},
+{ 574560, 6, {19,10,9,8,7,6}},
+{ 574992, 6, {11,11,11,9,8,6}},
+{ 575424, 6, {37,9,8,6,6,6}},
+{ 576000, 6, {10,10,10,9,8,8}},
+{ 576576, 6, {13,11,9,8,8,7}},
+{ 577368, 6, {11,9,9,9,9,8}},
+{ 580608, 6, {12,12,9,8,8,7}},
+{ 583200, 6, {10,10,9,9,9,8}},
+{ 584064, 6, {13,13,9,8,8,6}},
+{ 587520, 6, {17,10,9,8,8,6}},
+{ 589680, 6, {13,10,9,9,8,7}},
+{ 590976, 6, {19,9,9,8,8,6}},
+{ 594864, 6, {17,9,9,9,8,6}},
+{ 596160, 6, {23,10,9,8,6,6}},
+{ 596232, 6, {13,13,9,8,7,7}},
+{ 598752, 6, {12,11,9,9,8,7}},
+{ 599040, 6, {13,10,9,8,8,8}},
+{ 599760, 6, {17,10,9,8,7,7}},
+{ 601344, 6, {29,9,8,8,6,6}},
+{ 603288, 6, {19,9,9,8,7,7}},
+{ 604800, 6, {12,10,10,9,8,7}},
+{ 606528, 6, {13,9,9,9,8,8}},
+{ 608256, 6, {12,11,9,8,8,8}},
+{ 609840, 6, {11,11,10,9,8,7}},
+{ 612864, 6, {19,9,8,8,8,7}},
+{ 613872, 6, {29,9,8,7,7,6}},
+{ 616896, 6, {17,9,9,8,8,7}},
+{ 617760, 6, {13,11,10,9,8,6}},
+{ 622080, 6, {12,10,9,9,8,8}},
+{ 625968, 6, {23,9,9,8,7,6}},
+{ 626688, 6, {17,9,8,8,8,8}},
+{ 627264, 6, {11,11,9,9,8,8}},
+{ 628992, 6, {13,12,9,8,8,7}},
+{ 629856, 6, {12,9,9,9,9,8}},
+{ 632016, 6, {19,11,9,8,7,6}},
+{ 633600, 6, {11,10,10,9,8,8}},
+{ 635904, 6, {23,9,8,8,8,6}},
+{ 637632, 6, {41,9,8,6,6,6}},
+{ 640224, 6, {19,13,9,8,6,6}},
+{ 641520, 6, {11,10,9,9,9,8}},
+{ 642816, 6, {31,9,8,8,6,6}},
+{ 646272, 6, {17,11,9,8,8,6}},
+{ 648000, 6, {10,10,10,9,9,8}},
+{ 648648, 6, {13,11,9,9,8,7}},
+{ 649152, 6, {23,9,8,8,7,7}},
+{ 653184, 6, {12,12,9,9,8,7}},
+{ 655200, 6, {13,10,10,9,8,7}},
+{ 655776, 6, {23,11,9,8,6,6}},
+{ 656208, 6, {31,9,8,7,7,6}},
+{ 656640, 6, {19,10,9,8,8,6}},
+{ 657072, 6, {13,13,9,9,8,6}},
+{ 658944, 6, {13,11,9,8,8,8}},
+{ 659736, 6, {17,11,9,8,7,7}},
+{ 660960, 6, {17,10,9,9,8,6}},
+{ 663552, 6, {12,12,9,8,8,8}},
+{ 664848, 6, {19,9,9,9,8,6}},
+{ 665280, 6, {12,11,10,9,8,7}},
+{ 668304, 6, {17,13,9,8,7,6}},
+{ 668736, 6, {43,9,8,6,6,6}},
+{ 670320, 6, {19,10,9,8,7,7}},
+{ 670824, 6, {11,11,11,9,8,7}},
+{ 671328, 6, {37,9,8,7,6,6}},
+{ 673920, 6, {13,10,9,9,8,8}},
+{ 675000, 6, {15,10,10,10,9,5}},
+{ 676512, 6, {29,9,9,8,6,6}},
+{ 679536, 6, {13,11,11,9,8,6}},
+{ 681408, 6, {13,13,9,8,8,7}},
+{ 682344, 6, {13,9,9,9,9,8}},
+{ 684288, 6, {12,11,9,9,8,8}},
+{ 685440, 6, {17,10,9,8,8,7}},
+{ 689472, 6, {19,9,9,8,8,7}},
+{ 691200, 6, {12,10,10,9,8,8}},
+{ 691488, 6, {14,14,9,8,7,7}},
+{ 694008, 6, {17,9,9,9,8,7}},
+{ 695520, 6, {23,10,9,8,7,6}},
+{ 696960, 6, {11,11,10,9,8,8}},
+{ 699840, 6, {12,10,9,9,9,8}},
+{ 700416, 6, {19,9,8,8,8,8}},
+{ 701568, 6, {29,9,8,8,7,6}},
+{ 705024, 6, {17,9,9,8,8,8}},
+{ 705672, 6, {11,11,9,9,9,8}},
+{ 707616, 6, {13,12,9,9,8,7}},
+{ 712800, 6, {11,10,10,9,9,8}},
+{ 715392, 6, {23,9,9,8,8,6}},
+{ 716184, 6, {29,9,8,7,7,7}},
+{ 718848, 6, {13,12,9,8,8,8}},
+{ 719712, 6, {17,12,9,8,7,7}},
+{ 720000, 6, {10,10,10,10,9,8}},
+{ 720720, 6, {13,11,10,9,8,7}},
+{ 722304, 6, {19,11,9,8,8,6}},
+{ 723168, 6, {31,9,9,8,6,6}},
+{ 725760, 6, {12,12,10,9,8,7}},
+{ 727056, 6, {17,11,9,9,8,6}},
+{ 730080, 6, {13,13,10,9,8,6}},
+{ 730296, 6, {23,9,9,8,7,7}},
+{ 730944, 6, {47,9,8,6,6,6}},
+{ 731808, 6, {12,11,11,9,8,7}},
+{ 734400, 6, {17,10,10,9,8,6}},
+{ 737352, 6, {19,11,9,8,7,7}},
+{ 738720, 6, {19,10,9,9,8,6}},
+{ 741312, 6, {13,11,9,9,8,8}},
+{ 741888, 6, {23,9,8,8,8,7}},
+{ 743904, 6, {41,9,8,7,6,6}},
+{ 746496, 6, {12,12,9,9,8,8}},
+{ 746928, 6, {19,13,9,8,7,6}},
+{ 748800, 6, {13,10,10,9,8,8}},
+{ 749088, 6, {17,17,9,8,6,6}},
+{ 749952, 6, {31,9,8,8,7,6}},
+{ 751680, 6, {29,10,9,8,6,6}},
+{ 753984, 6, {17,11,9,8,8,7}},
+{ 758160, 6, {13,10,9,9,9,8}},
+{ 759375, 6, {15,15,15,9,5,5}},
+{ 760320, 6, {12,11,10,9,8,8}},
+{ 763776, 6, {17,13,9,8,8,6}},
+{ 765072, 6, {23,11,9,8,7,6}},
+{ 765576, 6, {31,9,8,7,7,7}},
+{ 766080, 6, {19,10,9,8,8,7}},
+{ 766584, 6, {13,13,9,9,8,7}},
+{ 766656, 6, {11,11,11,9,8,8}},
+{ 767232, 6, {37,9,8,8,6,6}},
+{ 769824, 6, {12,11,9,9,9,8}},
+{ 771120, 6, {17,10,9,9,8,7}},
+{ 775008, 6, {23,13,9,8,6,6}},
+{ 775656, 6, {19,9,9,9,8,7}},
+{ 777600, 6, {12,10,10,9,9,8}},
+{ 778752, 6, {13,13,9,8,8,8}},
+{ 779688, 6, {17,13,9,8,7,7}},
+{ 780192, 6, {43,9,8,7,6,6}},
+{ 783216, 6, {37,9,8,7,7,6}},
+{ 783360, 6, {17,10,9,8,8,8}},
+{ 784080, 6, {11,11,10,9,9,8}},
+{ 786240, 6, {13,12,10,9,8,7}},
+{ 787968, 6, {19,9,9,8,8,8}},
+{ 789264, 6, {29,9,9,8,7,6}},
+{ 790272, 6, {14,14,9,8,8,7}},
+{ 792000, 6, {11,10,10,10,9,8}},
+{ 792792, 6, {13,11,11,9,8,7}},
+{ 793152, 6, {17,9,9,9,8,8}},
+{ 794880, 6, {23,10,9,8,8,6}},
+{ 798336, 6, {12,12,11,9,8,7}},
+{ 801792, 6, {29,9,8,8,8,6}},
+{ 803088, 6, {13,13,11,9,8,6}},
+{ 803520, 6, {31,10,9,8,6,6}},
+{ 804384, 6, {19,12,9,8,7,7}},
+{ 804816, 6, {23,9,9,9,8,6}},
+{ 807840, 6, {17,11,10,9,8,6}},
+{ 808704, 6, {13,12,9,9,8,8}},
+{ 811440, 6, {23,10,9,8,7,7}},
+{ 812592, 6, {19,11,9,9,8,6}},
+{ 818496, 6, {29,9,8,8,7,7}},
+{ 820800, 6, {19,10,10,9,8,6}},
+{ 822528, 6, {17,12,9,8,8,7}},
+{ 823680, 6, {13,11,10,9,8,8}},
+{ 824256, 6, {53,9,8,6,6,6}},
+{ 826848, 6, {29,11,9,8,6,6}},
+{ 829440, 6, {12,12,10,9,8,8}},
+{ 833976, 6, {13,11,9,9,9,8}},
+{ 834624, 6, {23,9,9,8,8,7}},
+{ 836352, 6, {12,11,11,9,8,8}},
+{ 837216, 6, {19,17,9,8,6,6}},
+{ 838656, 6, {14,13,9,8,8,8}},
+{ 839664, 6, {17,14,9,8,7,7}},
+{ 839808, 6, {12,12,9,9,9,8}},
+{ 842400, 6, {13,10,10,9,9,8}},
+{ 842688, 6, {19,11,9,8,8,7}},
+{ 843696, 6, {31,9,9,8,7,6}},
+{ 847872, 6, {23,9,8,8,8,8}},
+{ 848232, 6, {17,11,9,9,8,7}},
+{ 850176, 6, {41,9,8,8,6,6}},
+{ 851760, 6, {13,13,10,9,8,7}},
+{ 852768, 6, {47,9,8,7,6,6}},
+{ 853632, 6, {19,13,9,8,8,6}},
+{ 855360, 6, {12,11,10,9,9,8}},
+{ 856800, 6, {17,10,10,9,8,7}},
+{ 857088, 6, {31,9,8,8,8,6}},
+{ 859248, 6, {17,13,9,9,8,6}},
+{ 861696, 6, {17,11,9,8,8,8}},
+{ 861840, 6, {19,10,9,9,8,7}},
+{ 862488, 6, {11,11,11,9,9,8}},
+{ 863136, 6, {37,9,9,8,6,6}},
+{ 864000, 6, {12,10,10,10,9,8}},
+{ 864864, 6, {13,12,11,9,8,7}},
+{ 867888, 6, {41,9,8,7,7,6}},
+{ 870912, 6, {12,12,12,9,8,7}},
+{ 871200, 6, {11,11,10,10,9,8}},
+{ 871416, 6, {19,13,9,8,7,7}},
+{ 873936, 6, {17,17,9,8,7,6}},
+{ 874368, 6, {23,11,9,8,8,6}},
+{ 874944, 6, {31,9,8,8,7,7}},
+{ 875520, 6, {19,10,9,8,8,8}},
+{ 876096, 6, {13,13,9,9,8,8}},
+{ 876960, 6, {29,10,9,8,7,6}},
+{ 881280, 6, {17,10,9,9,8,8}},
+{ 883872, 6, {31,11,9,8,6,6}},
+{ 886464, 6, {19,9,9,9,8,8}},
+{ 888624, 6, {17,11,11,9,8,6}},
+{ 889056, 6, {14,14,9,9,8,7}},
+{ 891072, 6, {17,13,9,8,8,7}},
+{ 891648, 6, {43,9,8,8,6,6}},
+{ 892296, 6, {17,9,9,9,9,8}},
+{ 892584, 6, {23,11,9,8,7,7}},
+{ 894240, 6, {23,10,9,9,8,6}},
+{ 895104, 6, {37,9,8,8,7,6}},
+{ 898560, 6, {13,12,10,9,8,8}},
+{ 900000, 6, {10,10,10,10,10,9}},
+{ 902016, 6, {29,9,9,8,8,6}},
+{ 902880, 6, {19,11,10,9,8,6}},
+{ 903168, 6, {14,14,9,8,8,8}},
+{ 904176, 6, {23,13,9,8,7,6}},
+{ 906048, 6, {13,11,11,9,8,8}},
+{ 909792, 6, {13,12,9,9,9,8}},
+{ 910224, 6, {43,9,8,7,7,6}},
+{ 912384, 6, {12,12,11,9,8,8}},
+{ 913752, 6, {37,9,8,7,7,7}},
+{ 917568, 6, {59,9,8,6,6,6}},
+{ 919296, 6, {19,12,9,8,8,7}},
+{ 920808, 6, {29,9,9,8,7,7}},
+{ 925344, 6, {17,12,9,9,8,7}},
+{ 926640, 6, {13,11,10,9,9,8}},
+{ 927360, 6, {23,10,9,8,8,7}},
+{ 933120, 6, {12,12,10,9,9,8}},
+{ 935424, 6, {29,9,8,8,8,7}},
+{ 935712, 6, {19,19,9,8,6,6}},
+{ 936000, 6, {13,10,10,10,9,8}},
+{ 936936, 6, {13,13,11,9,8,7}},
+{ 937440, 6, {31,10,9,8,7,6}},
+{ 938448, 6, {19,14,9,8,7,7}},
+{ 938952, 6, {23,9,9,9,8,7}},
+{ 940032, 6, {17,12,9,8,8,8}},
+{ 940896, 6, {12,11,11,9,9,8}},
+{ 942480, 6, {17,11,10,9,8,7}},
+{ 943488, 6, {14,13,9,9,8,8}},
+{ 948024, 6, {19,11,9,9,8,7}},
+{ 948672, 6, {61,9,8,6,6,6}},
+{ 949104, 6, {13,13,13,9,8,6}},
+{ 950400, 6, {12,11,10,10,9,8}},
+{ 953856, 6, {23,9,9,8,8,8}},
+{ 954720, 6, {17,13,10,9,8,6}},
+{ 956448, 6, {41,9,9,8,6,6}},
+{ 957600, 6, {19,10,10,9,8,7}},
+{ 958320, 6, {11,11,11,10,9,8}},
+{ 959040, 6, {37,10,9,8,6,6}},
+{ 959616, 6, {17,14,9,8,8,7}},
+{ 960336, 6, {19,13,9,9,8,6}},
+{ 961632, 6, {53,9,8,7,6,6}},
+{ 963072, 6, {19,11,9,8,8,8}},
+{ 964224, 6, {31,9,9,8,8,6}},
+{ 964656, 6, {29,11,9,8,7,6}},
+{ 969408, 6, {17,11,9,9,8,8}},
+{ 973440, 6, {13,13,10,9,8,8}},
+{ 973728, 6, {23,12,9,8,7,7}},
+{ 974592, 6, {47,9,8,8,6,6}},
+{ 976752, 6, {19,17,9,8,7,6}},
+{ 977184, 6, {29,13,9,8,6,6}},
+{ 979200, 6, {17,10,10,9,8,8}},
+{ 983664, 6, {23,11,9,9,8,6}},
+{ 984312, 6, {31,9,9,8,7,7}},
+{ 984960, 6, {19,10,9,9,8,8}},
+{ 985608, 6, {13,13,9,9,9,8}},
+{ 987840, 6, {14,14,10,9,8,7}},
+{ 988416, 6, {13,12,11,9,8,8}},
+{ 991440, 6, {17,10,9,9,9,8}},
+{ 991872, 6, {41,9,8,8,7,6}},
+{ 993168, 6, {19,11,11,9,8,6}},
+{ 993600, 6, {23,10,10,9,8,6}},
+{ 994896, 6, {47,9,8,7,7,6}},
+{ 995328, 6, {12,12,12,9,8,8}},
+{ 995904, 6, {19,13,9,8,8,7}},
+{ 997272, 6, {19,9,9,9,9,8}},
+{ 998784, 6, {17,17,9,8,8,6}},
+{ 999936, 6, {31,9,8,8,8,7}},
+{ 864, 7, {4,3,3,3,2,2,2}},
+{ 1296, 7, {4,3,3,3,3,2,2}},
+{ 1728, 7, {4,4,3,3,3,2,2}},
+{ 1944, 7, {4,3,3,3,3,3,2}},
+{ 2592, 7, {4,4,3,3,3,3,2}},
+{ 2916, 7, {4,3,3,3,3,3,3}},
+{ 3240, 7, {5,4,3,3,3,3,2}},
+{ 3456, 7, {4,4,4,3,3,3,2}},
+{ 3888, 7, {4,4,3,3,3,3,3}},
+{ 4860, 7, {5,4,3,3,3,3,3}},
+{ 5184, 7, {4,4,4,3,3,3,3}},
+{ 5400, 7, {5,5,4,3,3,3,2}},
+{ 5832, 7, {6,4,3,3,3,3,3}},
+{ 6480, 7, {5,4,4,3,3,3,3}},
+{ 6912, 7, {4,4,4,4,3,3,3}},
+{ 7776, 7, {6,4,4,3,3,3,3}},
+{ 8100, 7, {5,5,4,3,3,3,3}},
+{ 9000, 7, {5,5,5,4,3,3,2}},
+{ 9720, 7, {6,5,4,3,3,3,3}},
+{ 10368, 7, {6,4,4,4,3,3,3}},
+{ 10800, 7, {5,5,4,4,3,3,3}},
+{ 11664, 7, {6,6,4,3,3,3,3}},
+{ 12960, 7, {6,5,4,4,3,3,3}},
+{ 13500, 7, {5,5,5,4,3,3,3}},
+{ 13824, 7, {6,4,4,4,4,3,3}},
+{ 15000, 7, {5,5,5,5,4,3,2}},
+{ 15552, 7, {6,6,4,4,3,3,3}},
+{ 16200, 7, {6,5,5,4,3,3,3}},
+{ 18000, 7, {5,5,5,4,4,3,3}},
+{ 19440, 7, {6,6,5,4,3,3,3}},
+{ 20736, 7, {6,6,4,4,4,3,3}},
+{ 21600, 7, {6,5,5,4,4,3,3}},
+{ 22500, 7, {5,5,5,5,4,3,3}},
+{ 23328, 7, {6,6,6,4,3,3,3}},
+{ 25000, 7, {5,5,5,5,5,4,2}},
+{ 25920, 7, {6,6,5,4,4,3,3}},
+{ 27000, 7, {6,5,5,5,4,3,3}},
+{ 27648, 7, {6,6,4,4,4,4,3}},
+{ 30000, 7, {5,5,5,5,4,4,3}},
+{ 31104, 7, {6,6,6,4,4,3,3}},
+{ 32400, 7, {6,6,5,5,4,3,3}},
+{ 36000, 7, {6,5,5,5,4,4,3}},
+{ 37500, 7, {5,5,5,5,5,4,3}},
+{ 38880, 7, {6,6,6,5,4,3,3}},
+{ 41472, 7, {6,6,6,4,4,4,3}},
+{ 43200, 7, {6,6,5,5,4,4,3}},
+{ 45000, 7, {6,5,5,5,5,4,3}},
+{ 46656, 7, {6,6,6,6,4,3,3}},
+{ 50000, 7, {5,5,5,5,5,4,4}},
+{ 51840, 7, {6,6,6,5,4,4,3}},
+{ 54000, 7, {6,6,5,5,5,4,3}},
+{ 56250, 7, {6,5,5,5,5,5,3}},
+{ 60000, 7, {6,5,5,5,5,4,4}},
+{ 62208, 7, {6,6,6,6,4,4,3}},
+{ 62500, 7, {5,5,5,5,5,5,4}},
+{ 64800, 7, {6,6,6,5,5,4,3}},
+{ 72000, 7, {6,6,5,5,5,4,4}},
+{ 75000, 7, {6,5,5,5,5,5,4}},
+{ 77760, 7, {6,6,6,6,5,4,3}},
+{ 84375, 7, {9,5,5,5,5,5,3}},
+{ 86400, 7, {6,6,6,5,5,4,4}},
+{ 90000, 7, {6,6,5,5,5,5,4}},
+{ 93312, 7, {6,6,6,6,6,4,3}},
+{ 93750, 7, {6,5,5,5,5,5,5}},
+{ 100000, 7, {8,5,5,5,5,5,4}},
+{ 103680, 7, {6,6,6,6,5,4,4}},
+{ 108000, 7, {6,6,6,5,5,5,4}},
+{ 112500, 7, {6,6,5,5,5,5,5}},
+{ 120000, 7, {8,6,5,5,5,5,4}},
+{ 125000, 7, {8,5,5,5,5,5,5}},
+{ 129600, 7, {6,6,6,6,5,5,4}},
+{ 140625, 7, {9,5,5,5,5,5,5}},
+{ 144000, 7, {8,6,6,5,5,5,4}},
+{ 150000, 7, {8,6,5,5,5,5,5}},
+{ 155520, 7, {6,6,6,6,6,5,4}},
+{ 168750, 7, {9,6,5,5,5,5,5}},
+{ 172800, 7, {8,6,6,6,5,5,4}},
+{ 180000, 7, {8,6,6,5,5,5,5}},
+{ 187500, 7, {10,6,5,5,5,5,5}},
+{ 200000, 7, {8,8,5,5,5,5,5}},
+{ 207360, 7, {8,6,6,6,6,5,4}},
+{ 216000, 7, {8,6,6,6,5,5,5}},
+{ 225000, 7, {9,8,5,5,5,5,5}},
+{ 240000, 7, {8,8,6,5,5,5,5}},
+{ 250000, 7, {10,8,5,5,5,5,5}},
+{ 253125, 7, {9,9,5,5,5,5,5}},
+{ 259200, 7, {8,6,6,6,6,5,5}},
+{ 270000, 7, {9,8,6,5,5,5,5}},
+{ 281250, 7, {10,9,5,5,5,5,5}},
+{ 288000, 7, {8,8,6,6,5,5,5}},
+{ 300000, 7, {10,8,6,5,5,5,5}},
+{ 311040, 7, {8,6,6,6,6,6,5}},
+{ 315000, 7, {9,8,7,5,5,5,5}},
+{ 324000, 7, {9,8,6,6,5,5,5}},
+{ 337500, 7, {10,9,6,5,5,5,5}},
+{ 345600, 7, {8,8,6,6,6,5,5}},
+{ 360000, 7, {9,8,8,5,5,5,5}},
+{ 373248, 7, {8,6,6,6,6,6,6}},
+{ 375000, 7, {10,10,6,5,5,5,5}},
+{ 378000, 7, {9,8,7,6,5,5,5}},
+{ 388800, 7, {9,8,6,6,6,5,5}},
+{ 400000, 7, {10,8,8,5,5,5,5}},
+{ 405000, 7, {9,9,8,5,5,5,5}},
+{ 414720, 7, {8,8,6,6,6,6,5}},
+{ 421875, 7, {15,9,5,5,5,5,5}},
+{ 432000, 7, {9,8,8,6,5,5,5}},
+{ 441000, 7, {9,8,7,7,5,5,5}},
+{ 450000, 7, {10,10,6,6,5,5,5}},
+{ 453600, 7, {9,8,7,6,6,5,5}},
+{ 480000, 7, {10,8,8,6,5,5,5}},
+{ 486000, 7, {9,9,8,6,5,5,5}},
+{ 500000, 7, {10,10,8,5,5,5,5}},
+{ 504000, 7, {9,8,8,7,5,5,5}},
+{ 506250, 7, {10,9,9,5,5,5,5}},
+{ 518400, 7, {9,8,8,6,6,5,5}},
+{ 529200, 7, {9,8,7,7,6,5,5}},
+{ 559872, 7, {9,8,6,6,6,6,6}},
+{ 562500, 7, {10,10,9,5,5,5,5}},
+{ 567000, 7, {9,9,8,7,5,5,5}},
+{ 576000, 7, {9,8,8,8,5,5,5}},
+{ 583200, 7, {9,9,8,6,6,5,5}},
+{ 600000, 7, {10,10,8,6,5,5,5}},
+{ 604800, 7, {9,8,8,7,6,5,5}},
+{ 617400, 7, {9,8,7,7,7,5,5}},
+{ 648000, 7, {9,9,8,8,5,5,5}},
+{ 653184, 7, {9,8,7,6,6,6,6}},
+{ 675000, 7, {10,10,9,6,5,5,5}},
+{ 680400, 7, {9,9,8,7,6,5,5}},
+{ 691200, 7, {9,8,8,8,6,5,5}},
+{ 705600, 7, {9,8,8,7,7,5,5}},
+{ 720000, 7, {10,10,8,6,6,5,5}},
+{ 729000, 7, {9,9,9,8,5,5,5}},
+{ 746496, 7, {9,8,8,6,6,6,6}},
+{ 750000, 7, {10,10,10,6,5,5,5}},
+{ 759375, 7, {15,9,9,5,5,5,5}},
+{ 762048, 7, {9,8,7,7,6,6,6}},
+{ 793800, 7, {9,9,8,7,7,5,5}},
+{ 800000, 7, {10,10,8,8,5,5,5}},
+{ 806400, 7, {9,8,8,8,7,5,5}},
+{ 839808, 7, {9,9,8,6,6,6,6}},
+{ 843750, 7, {15,10,9,5,5,5,5}},
+{ 864000, 7, {10,10,8,6,6,6,5}},
+{ 870912, 7, {9,8,8,7,6,6,6}},
+{ 874800, 7, {9,9,9,8,6,5,5}},
+{ 889056, 7, {9,8,7,7,7,6,6}},
+{ 900000, 7, {10,10,10,6,6,5,5}},
+{ 921600, 7, {9,8,8,8,8,5,5}},
+{ 933120, 7, {10,9,8,6,6,6,6}},
+{ 960000, 7, {10,10,8,8,6,5,5}},
+{ 979776, 7, {9,9,8,7,6,6,6}},
+{ 995328, 7, {9,8,8,8,6,6,6}},
+{ 1728, 8, {4,3,3,3,2,2,2,2}},
+{ 2592, 8, {4,3,3,3,3,2,2,2}},
+{ 3456, 8, {4,4,3,3,3,2,2,2}},
+{ 3888, 8, {4,3,3,3,3,3,2,2}},
+{ 5184, 8, {4,4,3,3,3,3,2,2}},
+{ 5832, 8, {4,3,3,3,3,3,3,2}},
+{ 6480, 8, {5,4,3,3,3,3,2,2}},
+{ 6912, 8, {4,4,4,3,3,3,2,2}},
+{ 7776, 8, {4,4,3,3,3,3,3,2}},
+{ 8748, 8, {4,3,3,3,3,3,3,3}},
+{ 9720, 8, {5,4,3,3,3,3,3,2}},
+{ 10368, 8, {4,4,4,3,3,3,3,2}},
+{ 10800, 8, {5,5,4,3,3,3,2,2}},
+{ 11664, 8, {4,4,3,3,3,3,3,3}},
+{ 12960, 8, {5,4,4,3,3,3,3,2}},
+{ 13824, 8, {4,4,4,4,3,3,3,2}},
+{ 14580, 8, {5,4,3,3,3,3,3,3}},
+{ 15552, 8, {4,4,4,3,3,3,3,3}},
+{ 16200, 8, {5,5,4,3,3,3,3,2}},
+{ 17496, 8, {6,4,3,3,3,3,3,3}},
+{ 18000, 8, {5,5,5,4,3,3,2,2}},
+{ 19440, 8, {5,4,4,3,3,3,3,3}},
+{ 20412, 8, {7,4,3,3,3,3,3,3}},
+{ 20736, 8, {4,4,4,4,3,3,3,3}},
+{ 21600, 8, {5,5,4,4,3,3,3,2}},
+{ 23328, 8, {6,4,4,3,3,3,3,3}},
+{ 24300, 8, {5,5,4,3,3,3,3,3}},
+{ 25920, 8, {5,4,4,4,3,3,3,3}},
+{ 27000, 8, {5,5,5,4,3,3,3,2}},
+{ 27648, 8, {4,4,4,4,4,3,3,3}},
+{ 29160, 8, {6,5,4,3,3,3,3,3}},
+{ 30000, 8, {5,5,5,5,4,3,2,2}},
+{ 31104, 8, {6,4,4,4,3,3,3,3}},
+{ 32400, 8, {5,5,4,4,3,3,3,3}},
+{ 34020, 8, {7,5,4,3,3,3,3,3}},
+{ 34992, 8, {6,6,4,3,3,3,3,3}},
+{ 36000, 8, {5,5,5,4,4,3,3,2}},
+{ 38880, 8, {6,5,4,4,3,3,3,3}},
+{ 40500, 8, {5,5,5,4,3,3,3,3}},
+{ 40824, 8, {7,6,4,3,3,3,3,3}},
+{ 41472, 8, {6,4,4,4,4,3,3,3}},
+{ 43200, 8, {5,5,4,4,4,3,3,3}},
+{ 45000, 8, {5,5,5,5,4,3,3,2}},
+{ 46656, 8, {6,6,4,4,3,3,3,3}},
+{ 47628, 8, {7,7,4,3,3,3,3,3}},
+{ 48600, 8, {6,5,5,4,3,3,3,3}},
+{ 50000, 8, {5,5,5,5,5,4,2,2}},
+{ 51840, 8, {6,5,4,4,4,3,3,3}},
+{ 54000, 8, {5,5,5,4,4,3,3,3}},
+{ 55296, 8, {6,4,4,4,4,4,3,3}},
+{ 56700, 8, {7,5,5,4,3,3,3,3}},
+{ 58320, 8, {6,6,5,4,3,3,3,3}},
+{ 60000, 8, {5,5,5,5,4,4,3,2}},
+{ 62208, 8, {6,6,4,4,4,3,3,3}},
+{ 64800, 8, {6,5,5,4,4,3,3,3}},
+{ 67500, 8, {5,5,5,5,4,3,3,3}},
+{ 68040, 8, {7,6,5,4,3,3,3,3}},
+{ 69984, 8, {6,6,6,4,3,3,3,3}},
+{ 72000, 8, {5,5,5,4,4,4,3,3}},
+{ 75000, 8, {5,5,5,5,5,4,3,2}},
+{ 77760, 8, {6,6,5,4,4,3,3,3}},
+{ 79380, 8, {7,7,5,4,3,3,3,3}},
+{ 81000, 8, {6,5,5,5,4,3,3,3}},
+{ 81648, 8, {7,6,6,4,3,3,3,3}},
+{ 82944, 8, {6,6,4,4,4,4,3,3}},
+{ 86400, 8, {6,5,5,4,4,4,3,3}},
+{ 90000, 8, {5,5,5,5,4,4,3,3}},
+{ 93312, 8, {6,6,6,4,4,3,3,3}},
+{ 94500, 8, {7,5,5,5,4,3,3,3}},
+{ 95256, 8, {7,7,6,4,3,3,3,3}},
+{ 97200, 8, {6,6,5,5,4,3,3,3}},
+{ 100000, 8, {5,5,5,5,5,4,4,2}},
+{ 103680, 8, {6,6,5,4,4,4,3,3}},
+{ 108000, 8, {6,5,5,5,4,4,3,3}},
+{ 110592, 8, {6,6,4,4,4,4,4,3}},
+{ 111132, 8, {7,7,7,4,3,3,3,3}},
+{ 112500, 8, {5,5,5,5,5,4,3,3}},
+{ 113400, 8, {7,6,5,5,4,3,3,3}},
+{ 116640, 8, {6,6,6,5,4,3,3,3}},
+{ 120000, 8, {5,5,5,5,4,4,4,3}},
+{ 124416, 8, {6,6,6,4,4,4,3,3}},
+{ 125000, 8, {5,5,5,5,5,5,4,2}},
+{ 129600, 8, {6,6,5,5,4,4,3,3}},
+{ 132300, 8, {7,7,5,5,4,3,3,3}},
+{ 135000, 8, {6,5,5,5,5,4,3,3}},
+{ 136080, 8, {7,6,6,5,4,3,3,3}},
+{ 139968, 8, {6,6,6,6,4,3,3,3}},
+{ 144000, 8, {6,5,5,5,4,4,4,3}},
+{ 150000, 8, {5,5,5,5,5,4,4,3}},
+{ 155520, 8, {6,6,6,5,4,4,3,3}},
+{ 157500, 8, {7,5,5,5,5,4,3,3}},
+{ 158760, 8, {7,7,6,5,4,3,3,3}},
+{ 162000, 8, {6,6,5,5,5,4,3,3}},
+{ 163296, 8, {7,6,6,6,4,3,3,3}},
+{ 165888, 8, {6,6,6,4,4,4,4,3}},
+{ 168750, 8, {6,5,5,5,5,5,3,3}},
+{ 172800, 8, {6,6,5,5,4,4,4,3}},
+{ 180000, 8, {6,5,5,5,5,4,4,3}},
+{ 185220, 8, {7,7,7,5,4,3,3,3}},
+{ 186624, 8, {6,6,6,6,4,4,3,3}},
+{ 187500, 8, {5,5,5,5,5,5,4,3}},
+{ 189000, 8, {7,6,5,5,5,4,3,3}},
+{ 190512, 8, {7,7,6,6,4,3,3,3}},
+{ 194400, 8, {6,6,6,5,5,4,3,3}},
+{ 200000, 8, {5,5,5,5,5,4,4,4}},
+{ 207360, 8, {6,6,6,5,4,4,4,3}},
+{ 216000, 8, {6,6,5,5,5,4,4,3}},
+{ 220500, 8, {7,7,5,5,5,4,3,3}},
+{ 222264, 8, {7,7,7,6,4,3,3,3}},
+{ 225000, 8, {6,5,5,5,5,5,4,3}},
+{ 226800, 8, {7,6,6,5,5,4,3,3}},
+{ 233280, 8, {6,6,6,6,5,4,3,3}},
+{ 240000, 8, {6,5,5,5,5,4,4,4}},
+{ 248832, 8, {6,6,6,6,4,4,4,3}},
+{ 250000, 8, {5,5,5,5,5,5,4,4}},
+{ 253125, 8, {9,5,5,5,5,5,3,3}},
+{ 259200, 8, {6,6,6,5,5,4,4,3}},
+{ 259308, 8, {7,7,7,7,4,3,3,3}},
+{ 262500, 8, {7,5,5,5,5,5,4,3}},
+{ 264600, 8, {7,7,6,5,5,4,3,3}},
+{ 270000, 8, {6,6,5,5,5,5,4,3}},
+{ 272160, 8, {7,6,6,6,5,4,3,3}},
+{ 279936, 8, {6,6,6,6,6,4,3,3}},
+{ 281250, 8, {6,5,5,5,5,5,5,3}},
+{ 288000, 8, {6,6,5,5,5,4,4,4}},
+{ 300000, 8, {6,5,5,5,5,5,4,4}},
+{ 308700, 8, {7,7,7,5,5,4,3,3}},
+{ 311040, 8, {6,6,6,6,5,4,4,3}},
+{ 312500, 8, {5,5,5,5,5,5,5,4}},
+{ 315000, 8, {7,6,5,5,5,5,4,3}},
+{ 317520, 8, {7,7,6,6,5,4,3,3}},
+{ 324000, 8, {6,6,6,5,5,5,4,3}},
+{ 326592, 8, {7,6,6,6,6,4,3,3}},
+{ 337500, 8, {6,6,5,5,5,5,5,3}},
+{ 345600, 8, {6,6,6,5,5,4,4,4}},
+{ 360000, 8, {6,6,5,5,5,5,4,4}},
+{ 367500, 8, {7,7,5,5,5,5,4,3}},
+{ 370440, 8, {7,7,7,6,5,4,3,3}},
+{ 373248, 8, {6,6,6,6,6,4,4,3}},
+{ 375000, 8, {6,5,5,5,5,5,5,4}},
+{ 378000, 8, {7,6,6,5,5,5,4,3}},
+{ 381024, 8, {7,7,6,6,6,4,3,3}},
+{ 388800, 8, {6,6,6,6,5,5,4,3}},
+{ 400000, 8, {8,5,5,5,5,5,4,4}},
+{ 414720, 8, {6,6,6,6,5,4,4,4}},
+{ 421875, 8, {9,5,5,5,5,5,5,3}},
+{ 432000, 8, {6,6,6,5,5,5,4,4}},
+{ 432180, 8, {7,7,7,7,5,4,3,3}},
+{ 437500, 8, {7,5,5,5,5,5,5,4}},
+{ 441000, 8, {7,7,6,5,5,5,4,3}},
+{ 444528, 8, {7,7,7,6,6,4,3,3}},
+{ 450000, 8, {6,6,5,5,5,5,5,4}},
+{ 453600, 8, {7,6,6,6,5,5,4,3}},
+{ 466560, 8, {6,6,6,6,6,5,4,3}},
+{ 468750, 8, {6,5,5,5,5,5,5,5}},
+{ 480000, 8, {8,6,5,5,5,5,4,4}},
+{ 500000, 8, {8,5,5,5,5,5,5,4}},
+{ 506250, 8, {9,6,5,5,5,5,5,3}},
+{ 514500, 8, {7,7,7,5,5,5,4,3}},
+{ 518400, 8, {6,6,6,6,5,5,4,4}},
+{ 518616, 8, {7,7,7,7,6,4,3,3}},
+{ 525000, 8, {7,6,5,5,5,5,5,4}},
+{ 529200, 8, {7,7,6,6,5,5,4,3}},
+{ 540000, 8, {6,6,6,5,5,5,5,4}},
+{ 544320, 8, {7,6,6,6,6,5,4,3}},
+{ 559872, 8, {6,6,6,6,6,6,4,3}},
+{ 562500, 8, {6,6,5,5,5,5,5,5}},
+{ 576000, 8, {8,6,6,5,5,5,4,4}},
+{ 600000, 8, {8,6,5,5,5,5,5,4}},
+{ 605052, 8, {7,7,7,7,7,4,3,3}},
+{ 612500, 8, {7,7,5,5,5,5,5,4}},
+{ 617400, 8, {7,7,7,6,5,5,4,3}},
+{ 622080, 8, {6,6,6,6,6,5,4,4}},
+{ 625000, 8, {8,5,5,5,5,5,5,5}},
+{ 630000, 8, {7,6,6,5,5,5,5,4}},
+{ 635040, 8, {7,7,6,6,6,5,4,3}},
+{ 648000, 8, {6,6,6,6,5,5,5,4}},
+{ 653184, 8, {7,6,6,6,6,6,4,3}},
+{ 656250, 8, {7,6,5,5,5,5,5,5}},
+{ 675000, 8, {6,6,6,5,5,5,5,5}},
+{ 691200, 8, {8,6,6,6,5,5,4,4}},
+{ 703125, 8, {9,5,5,5,5,5,5,5}},
+{ 720000, 8, {8,6,6,5,5,5,5,4}},
+{ 720300, 8, {7,7,7,7,5,5,4,3}},
+{ 735000, 8, {7,7,6,5,5,5,5,4}},
+{ 740880, 8, {7,7,7,6,6,5,4,3}},
+{ 750000, 8, {8,6,5,5,5,5,5,5}},
+{ 756000, 8, {7,6,6,6,5,5,5,4}},
+{ 759375, 8, {9,9,5,5,5,5,5,3}},
+{ 762048, 8, {7,7,6,6,6,6,4,3}},
+{ 777600, 8, {6,6,6,6,6,5,5,4}},
+{ 800000, 8, {8,8,5,5,5,5,5,4}},
+{ 829440, 8, {8,6,6,6,6,5,4,4}},
+{ 843750, 8, {9,6,5,5,5,5,5,5}},
+{ 857500, 8, {7,7,7,5,5,5,5,4}},
+{ 864000, 8, {8,6,6,6,5,5,5,4}},
+{ 864360, 8, {7,7,7,7,6,5,4,3}},
+{ 875000, 8, {8,7,5,5,5,5,5,5}},
+{ 882000, 8, {7,7,6,6,5,5,5,4}},
+{ 889056, 8, {7,7,7,6,6,6,4,3}},
+{ 900000, 8, {8,6,6,5,5,5,5,5}},
+{ 907200, 8, {7,6,6,6,6,5,5,4}},
+{ 918750, 8, {7,7,6,5,5,5,5,5}},
+{ 933120, 8, {6,6,6,6,6,6,5,4}},
+{ 937500, 8, {10,6,5,5,5,5,5,5}},
+{ 960000, 8, {8,8,6,5,5,5,5,4}},
+{ 984375, 8, {9,7,5,5,5,5,5,5}},
+{ 3456, 9, {4,3,3,3,2,2,2,2,2}},
+{ 5184, 9, {4,3,3,3,3,2,2,2,2}},
+{ 6912, 9, {4,4,3,3,3,2,2,2,2}},
+{ 7776, 9, {4,3,3,3,3,3,2,2,2}},
+{ 10368, 9, {4,4,3,3,3,3,2,2,2}},
+{ 11664, 9, {4,3,3,3,3,3,3,2,2}},
+{ 12960, 9, {5,4,3,3,3,3,2,2,2}},
+{ 13824, 9, {4,4,4,3,3,3,2,2,2}},
+{ 15552, 9, {4,4,3,3,3,3,3,2,2}},
+{ 17496, 9, {4,3,3,3,3,3,3,3,2}},
+{ 19440, 9, {5,4,3,3,3,3,3,2,2}},
+{ 20736, 9, {4,4,4,3,3,3,3,2,2}},
+{ 21600, 9, {5,5,4,3,3,3,2,2,2}},
+{ 23328, 9, {4,4,3,3,3,3,3,3,2}},
+{ 25920, 9, {5,4,4,3,3,3,3,2,2}},
+{ 26244, 9, {4,3,3,3,3,3,3,3,3}},
+{ 27648, 9, {4,4,4,4,3,3,3,2,2}},
+{ 29160, 9, {5,4,3,3,3,3,3,3,2}},
+{ 31104, 9, {4,4,4,3,3,3,3,3,2}},
+{ 32400, 9, {5,5,4,3,3,3,3,2,2}},
+{ 34992, 9, {4,4,3,3,3,3,3,3,3}},
+{ 36000, 9, {5,5,5,4,3,3,2,2,2}},
+{ 38880, 9, {5,4,4,3,3,3,3,3,2}},
+{ 40824, 9, {7,4,3,3,3,3,3,3,2}},
+{ 41472, 9, {4,4,4,4,3,3,3,3,2}},
+{ 43200, 9, {5,5,4,4,3,3,3,2,2}},
+{ 43740, 9, {5,4,3,3,3,3,3,3,3}},
+{ 46656, 9, {4,4,4,3,3,3,3,3,3}},
+{ 48600, 9, {5,5,4,3,3,3,3,3,2}},
+{ 51840, 9, {5,4,4,4,3,3,3,3,2}},
+{ 52488, 9, {6,4,3,3,3,3,3,3,3}},
+{ 54000, 9, {5,5,5,4,3,3,3,2,2}},
+{ 55296, 9, {4,4,4,4,4,3,3,3,2}},
+{ 58320, 9, {5,4,4,3,3,3,3,3,3}},
+{ 60000, 9, {5,5,5,5,4,3,2,2,2}},
+{ 61236, 9, {7,4,3,3,3,3,3,3,3}},
+{ 62208, 9, {4,4,4,4,3,3,3,3,3}},
+{ 64800, 9, {5,5,4,4,3,3,3,3,2}},
+{ 68040, 9, {7,5,4,3,3,3,3,3,2}},
+{ 69984, 9, {6,4,4,3,3,3,3,3,3}},
+{ 72000, 9, {5,5,5,4,4,3,3,2,2}},
+{ 72900, 9, {5,5,4,3,3,3,3,3,3}},
+{ 77760, 9, {5,4,4,4,3,3,3,3,3}},
+{ 81000, 9, {5,5,5,4,3,3,3,3,2}},
+{ 81648, 9, {7,4,4,3,3,3,3,3,3}},
+{ 82944, 9, {4,4,4,4,4,3,3,3,3}},
+{ 86400, 9, {5,5,4,4,4,3,3,3,2}},
+{ 87480, 9, {6,5,4,3,3,3,3,3,3}},
+{ 90000, 9, {5,5,5,5,4,3,3,2,2}},
+{ 93312, 9, {6,4,4,4,3,3,3,3,3}},
+{ 95256, 9, {7,7,4,3,3,3,3,3,2}},
+{ 97200, 9, {5,5,4,4,3,3,3,3,3}},
+{ 100000, 9, {5,5,5,5,5,4,2,2,2}},
+{ 102060, 9, {7,5,4,3,3,3,3,3,3}},
+{ 103680, 9, {5,4,4,4,4,3,3,3,3}},
+{ 104976, 9, {6,6,4,3,3,3,3,3,3}},
+{ 108000, 9, {5,5,5,4,4,3,3,3,2}},
+{ 110592, 9, {4,4,4,4,4,4,3,3,3}},
+{ 113400, 9, {7,5,5,4,3,3,3,3,2}},
+{ 116640, 9, {6,5,4,4,3,3,3,3,3}},
+{ 120000, 9, {5,5,5,5,4,4,3,2,2}},
+{ 121500, 9, {5,5,5,4,3,3,3,3,3}},
+{ 122472, 9, {7,6,4,3,3,3,3,3,3}},
+{ 124416, 9, {6,4,4,4,4,3,3,3,3}},
+{ 129600, 9, {5,5,4,4,4,3,3,3,3}},
+{ 135000, 9, {5,5,5,5,4,3,3,3,2}},
+{ 136080, 9, {7,5,4,4,3,3,3,3,3}},
+{ 139968, 9, {6,6,4,4,3,3,3,3,3}},
+{ 142884, 9, {7,7,4,3,3,3,3,3,3}},
+{ 144000, 9, {5,5,5,4,4,4,3,3,2}},
+{ 145800, 9, {6,5,5,4,3,3,3,3,3}},
+{ 150000, 9, {5,5,5,5,5,4,3,2,2}},
+{ 155520, 9, {6,5,4,4,4,3,3,3,3}},
+{ 158760, 9, {7,7,5,4,3,3,3,3,2}},
+{ 162000, 9, {5,5,5,4,4,3,3,3,3}},
+{ 163296, 9, {7,6,4,4,3,3,3,3,3}},
+{ 165888, 9, {6,4,4,4,4,4,3,3,3}},
+{ 170100, 9, {7,5,5,4,3,3,3,3,3}},
+{ 172800, 9, {5,5,4,4,4,4,3,3,3}},
+{ 174960, 9, {6,6,5,4,3,3,3,3,3}},
+{ 180000, 9, {5,5,5,5,4,4,3,3,2}},
+{ 186624, 9, {6,6,4,4,4,3,3,3,3}},
+{ 189000, 9, {7,5,5,5,4,3,3,3,2}},
+{ 190512, 9, {7,7,4,4,3,3,3,3,3}},
+{ 194400, 9, {6,5,5,4,4,3,3,3,3}},
+{ 200000, 9, {5,5,5,5,5,4,4,2,2}},
+{ 202500, 9, {5,5,5,5,4,3,3,3,3}},
+{ 204120, 9, {7,6,5,4,3,3,3,3,3}},
+{ 207360, 9, {6,5,4,4,4,4,3,3,3}},
+{ 209952, 9, {6,6,6,4,3,3,3,3,3}},
+{ 216000, 9, {5,5,5,4,4,4,3,3,3}},
+{ 221184, 9, {6,4,4,4,4,4,4,3,3}},
+{ 222264, 9, {7,7,7,4,3,3,3,3,2}},
+{ 225000, 9, {5,5,5,5,5,4,3,3,2}},
+{ 226800, 9, {7,5,5,4,4,3,3,3,3}},
+{ 233280, 9, {6,6,5,4,4,3,3,3,3}},
+{ 238140, 9, {7,7,5,4,3,3,3,3,3}},
+{ 240000, 9, {5,5,5,5,4,4,4,3,2}},
+{ 243000, 9, {6,5,5,5,4,3,3,3,3}},
+{ 244944, 9, {7,6,6,4,3,3,3,3,3}},
+{ 248832, 9, {6,6,4,4,4,4,3,3,3}},
+{ 250000, 9, {5,5,5,5,5,5,4,2,2}},
+{ 259200, 9, {6,5,5,4,4,4,3,3,3}},
+{ 264600, 9, {7,7,5,5,4,3,3,3,2}},
+{ 270000, 9, {5,5,5,5,4,4,3,3,3}},
+{ 272160, 9, {7,6,5,4,4,3,3,3,3}},
+{ 279936, 9, {6,6,6,4,4,3,3,3,3}},
+{ 283500, 9, {7,5,5,5,4,3,3,3,3}},
+{ 285768, 9, {7,7,6,4,3,3,3,3,3}},
+{ 288000, 9, {5,5,5,4,4,4,4,3,3}},
+{ 291600, 9, {6,6,5,5,4,3,3,3,3}},
+{ 300000, 9, {5,5,5,5,5,4,4,3,2}},
+{ 311040, 9, {6,6,5,4,4,4,3,3,3}},
+{ 315000, 9, {7,5,5,5,5,4,3,3,2}},
+{ 317520, 9, {7,7,5,4,4,3,3,3,3}},
+{ 324000, 9, {6,5,5,5,4,4,3,3,3}},
+{ 326592, 9, {7,6,6,4,4,3,3,3,3}},
+{ 331776, 9, {6,6,4,4,4,4,4,3,3}},
+{ 333396, 9, {7,7,7,4,3,3,3,3,3}},
+{ 337500, 9, {5,5,5,5,5,4,3,3,3}},
+{ 340200, 9, {7,6,5,5,4,3,3,3,3}},
+{ 345600, 9, {6,5,5,4,4,4,4,3,3}},
+{ 349920, 9, {6,6,6,5,4,3,3,3,3}},
+{ 360000, 9, {5,5,5,5,4,4,4,3,3}},
+{ 370440, 9, {7,7,7,5,4,3,3,3,2}},
+{ 373248, 9, {6,6,6,4,4,4,3,3,3}},
+{ 375000, 9, {5,5,5,5,5,5,4,3,2}},
+{ 378000, 9, {7,5,5,5,4,4,3,3,3}},
+{ 381024, 9, {7,7,6,4,4,3,3,3,3}},
+{ 388800, 9, {6,6,5,5,4,4,3,3,3}},
+{ 396900, 9, {7,7,5,5,4,3,3,3,3}},
+{ 400000, 9, {5,5,5,5,5,4,4,4,2}},
+{ 405000, 9, {6,5,5,5,5,4,3,3,3}},
+{ 408240, 9, {7,6,6,5,4,3,3,3,3}},
+{ 414720, 9, {6,6,5,4,4,4,4,3,3}},
+{ 419904, 9, {6,6,6,6,4,3,3,3,3}},
+{ 432000, 9, {6,5,5,5,4,4,4,3,3}},
+{ 441000, 9, {7,7,5,5,5,4,3,3,2}},
+{ 442368, 9, {6,6,4,4,4,4,4,4,3}},
+{ 444528, 9, {7,7,7,4,4,3,3,3,3}},
+{ 450000, 9, {5,5,5,5,5,4,4,3,3}},
+{ 453600, 9, {7,6,5,5,4,4,3,3,3}},
+{ 466560, 9, {6,6,6,5,4,4,3,3,3}},
+{ 472500, 9, {7,5,5,5,5,4,3,3,3}},
+{ 476280, 9, {7,7,6,5,4,3,3,3,3}},
+{ 480000, 9, {5,5,5,5,4,4,4,4,3}},
+{ 486000, 9, {6,6,5,5,5,4,3,3,3}},
+{ 489888, 9, {7,6,6,6,4,3,3,3,3}},
+{ 497664, 9, {6,6,6,4,4,4,4,3,3}},
+{ 500000, 9, {5,5,5,5,5,5,4,4,2}},
+{ 506250, 9, {6,5,5,5,5,5,3,3,3}},
+{ 518400, 9, {6,6,5,5,4,4,4,3,3}},
+{ 518616, 9, {7,7,7,7,4,3,3,3,2}},
+{ 525000, 9, {7,5,5,5,5,5,4,3,2}},
+{ 529200, 9, {7,7,5,5,4,4,3,3,3}},
+{ 540000, 9, {6,5,5,5,5,4,4,3,3}},
+{ 544320, 9, {7,6,6,5,4,4,3,3,3}},
+{ 555660, 9, {7,7,7,5,4,3,3,3,3}},
+{ 559872, 9, {6,6,6,6,4,4,3,3,3}},
+{ 562500, 9, {5,5,5,5,5,5,4,3,3}},
+{ 567000, 9, {7,6,5,5,5,4,3,3,3}},
+{ 571536, 9, {7,7,6,6,4,3,3,3,3}},
+{ 576000, 9, {6,5,5,5,4,4,4,4,3}},
+{ 583200, 9, {6,6,6,5,5,4,3,3,3}},
+{ 600000, 9, {5,5,5,5,5,4,4,4,3}},
+{ 617400, 9, {7,7,7,5,5,4,3,3,2}},
+{ 622080, 9, {6,6,6,5,4,4,4,3,3}},
+{ 625000, 9, {5,5,5,5,5,5,5,4,2}},
+{ 630000, 9, {7,5,5,5,5,4,4,3,3}},
+{ 635040, 9, {7,7,6,5,4,4,3,3,3}},
+{ 648000, 9, {6,6,5,5,5,4,4,3,3}},
+{ 653184, 9, {7,6,6,6,4,4,3,3,3}},
+{ 661500, 9, {7,7,5,5,5,4,3,3,3}},
+{ 663552, 9, {6,6,6,4,4,4,4,4,3}},
+{ 666792, 9, {7,7,7,6,4,3,3,3,3}},
+{ 675000, 9, {6,5,5,5,5,5,4,3,3}},
+{ 680400, 9, {7,6,6,5,5,4,3,3,3}},
+{ 691200, 9, {6,6,5,5,4,4,4,4,3}},
+{ 699840, 9, {6,6,6,6,5,4,3,3,3}},
+{ 720000, 9, {6,5,5,5,5,4,4,4,3}},
+{ 735000, 9, {7,7,5,5,5,5,4,3,2}},
+{ 740880, 9, {7,7,7,5,4,4,3,3,3}},
+{ 746496, 9, {6,6,6,6,4,4,4,3,3}},
+{ 750000, 9, {5,5,5,5,5,5,4,4,3}},
+{ 756000, 9, {7,6,5,5,5,4,4,3,3}},
+{ 759375, 9, {9,5,5,5,5,5,3,3,3}},
+{ 762048, 9, {7,7,6,6,4,4,3,3,3}},
+{ 777600, 9, {6,6,6,5,5,4,4,3,3}},
+{ 777924, 9, {7,7,7,7,4,3,3,3,3}},
+{ 787500, 9, {7,5,5,5,5,5,4,3,3}},
+{ 793800, 9, {7,7,6,5,5,4,3,3,3}},
+{ 800000, 9, {5,5,5,5,5,4,4,4,4}},
+{ 810000, 9, {6,6,5,5,5,5,4,3,3}},
+{ 816480, 9, {7,6,6,6,5,4,3,3,3}},
+{ 829440, 9, {6,6,6,5,4,4,4,4,3}},
+{ 839808, 9, {6,6,6,6,6,4,3,3,3}},
+{ 843750, 9, {6,5,5,5,5,5,5,3,3}},
+{ 864000, 9, {6,6,5,5,5,4,4,4,3}},
+{ 864360, 9, {7,7,7,7,5,4,3,3,2}},
+{ 875000, 9, {7,5,5,5,5,5,5,4,2}},
+{ 882000, 9, {7,7,5,5,5,4,4,3,3}},
+{ 889056, 9, {7,7,7,6,4,4,3,3,3}},
+{ 900000, 9, {6,5,5,5,5,5,4,4,3}},
+{ 907200, 9, {7,6,6,5,5,4,4,3,3}},
+{ 926100, 9, {7,7,7,5,5,4,3,3,3}},
+{ 933120, 9, {6,6,6,6,5,4,4,3,3}},
+{ 937500, 9, {5,5,5,5,5,5,5,4,3}},
+{ 945000, 9, {7,6,5,5,5,5,4,3,3}},
+{ 952560, 9, {7,7,6,6,5,4,3,3,3}},
+{ 960000, 9, {6,5,5,5,5,4,4,4,4}},
+{ 972000, 9, {6,6,6,5,5,5,4,3,3}},
+{ 979776, 9, {7,6,6,6,6,4,3,3,3}},
+{ 995328, 9, {6,6,6,6,4,4,4,4,3}},
+{ 6912, 10, {4,3,3,3,2,2,2,2,2,2}},
+{ 10368, 10, {4,3,3,3,3,2,2,2,2,2}},
+{ 13824, 10, {4,4,3,3,3,2,2,2,2,2}},
+{ 15552, 10, {4,3,3,3,3,3,2,2,2,2}},
+{ 20736, 10, {4,4,3,3,3,3,2,2,2,2}},
+{ 23328, 10, {4,3,3,3,3,3,3,2,2,2}},
+{ 25920, 10, {5,4,3,3,3,3,2,2,2,2}},
+{ 27648, 10, {4,4,4,3,3,3,2,2,2,2}},
+{ 31104, 10, {4,4,3,3,3,3,3,2,2,2}},
+{ 34992, 10, {4,3,3,3,3,3,3,3,2,2}},
+{ 38880, 10, {5,4,3,3,3,3,3,2,2,2}},
+{ 41472, 10, {4,4,4,3,3,3,3,2,2,2}},
+{ 43200, 10, {5,5,4,3,3,3,2,2,2,2}},
+{ 46656, 10, {4,4,3,3,3,3,3,3,2,2}},
+{ 51840, 10, {5,4,4,3,3,3,3,2,2,2}},
+{ 52488, 10, {4,3,3,3,3,3,3,3,3,2}},
+{ 55296, 10, {4,4,4,4,3,3,3,2,2,2}},
+{ 58320, 10, {5,4,3,3,3,3,3,3,2,2}},
+{ 62208, 10, {4,4,4,3,3,3,3,3,2,2}},
+{ 64800, 10, {5,5,4,3,3,3,3,2,2,2}},
+{ 69984, 10, {4,4,3,3,3,3,3,3,3,2}},
+{ 72000, 10, {5,5,5,4,3,3,2,2,2,2}},
+{ 77760, 10, {5,4,4,3,3,3,3,3,2,2}},
+{ 78732, 10, {4,3,3,3,3,3,3,3,3,3}},
+{ 81648, 10, {7,4,3,3,3,3,3,3,2,2}},
+{ 82944, 10, {4,4,4,4,3,3,3,3,2,2}},
+{ 86400, 10, {5,5,4,4,3,3,3,2,2,2}},
+{ 87480, 10, {5,4,3,3,3,3,3,3,3,2}},
+{ 93312, 10, {4,4,4,3,3,3,3,3,3,2}},
+{ 97200, 10, {5,5,4,3,3,3,3,3,2,2}},
+{ 103680, 10, {5,4,4,4,3,3,3,3,2,2}},
+{ 104976, 10, {4,4,3,3,3,3,3,3,3,3}},
+{ 108000, 10, {5,5,5,4,3,3,3,2,2,2}},
+{ 110592, 10, {4,4,4,4,4,3,3,3,2,2}},
+{ 116640, 10, {5,4,4,3,3,3,3,3,3,2}},
+{ 120000, 10, {5,5,5,5,4,3,2,2,2,2}},
+{ 122472, 10, {7,4,3,3,3,3,3,3,3,2}},
+{ 124416, 10, {4,4,4,4,3,3,3,3,3,2}},
+{ 129600, 10, {5,5,4,4,3,3,3,3,2,2}},
+{ 131220, 10, {5,4,3,3,3,3,3,3,3,3}},
+{ 136080, 10, {7,5,4,3,3,3,3,3,2,2}},
+{ 139968, 10, {4,4,4,3,3,3,3,3,3,3}},
+{ 144000, 10, {5,5,5,4,4,3,3,2,2,2}},
+{ 145800, 10, {5,5,4,3,3,3,3,3,3,2}},
+{ 155520, 10, {5,4,4,4,3,3,3,3,3,2}},
+{ 157464, 10, {6,4,3,3,3,3,3,3,3,3}},
+{ 162000, 10, {5,5,5,4,3,3,3,3,2,2}},
+{ 163296, 10, {7,4,4,3,3,3,3,3,3,2}},
+{ 165888, 10, {4,4,4,4,4,3,3,3,3,2}},
+{ 172800, 10, {5,5,4,4,4,3,3,3,2,2}},
+{ 174960, 10, {5,4,4,3,3,3,3,3,3,3}},
+{ 180000, 10, {5,5,5,5,4,3,3,2,2,2}},
+{ 183708, 10, {7,4,3,3,3,3,3,3,3,3}},
+{ 186624, 10, {4,4,4,4,3,3,3,3,3,3}},
+{ 190512, 10, {7,7,4,3,3,3,3,3,2,2}},
+{ 194400, 10, {5,5,4,4,3,3,3,3,3,2}},
+{ 200000, 10, {5,5,5,5,5,4,2,2,2,2}},
+{ 204120, 10, {7,5,4,3,3,3,3,3,3,2}},
+{ 207360, 10, {5,4,4,4,4,3,3,3,3,2}},
+{ 209952, 10, {6,4,4,3,3,3,3,3,3,3}},
+{ 216000, 10, {5,5,5,4,4,3,3,3,2,2}},
+{ 218700, 10, {5,5,4,3,3,3,3,3,3,3}},
+{ 221184, 10, {4,4,4,4,4,4,3,3,3,2}},
+{ 226800, 10, {7,5,5,4,3,3,3,3,2,2}},
+{ 233280, 10, {5,4,4,4,3,3,3,3,3,3}},
+{ 240000, 10, {5,5,5,5,4,4,3,2,2,2}},
+{ 243000, 10, {5,5,5,4,3,3,3,3,3,2}},
+{ 244944, 10, {7,4,4,3,3,3,3,3,3,3}},
+{ 248832, 10, {4,4,4,4,4,3,3,3,3,3}},
+{ 259200, 10, {5,5,4,4,4,3,3,3,3,2}},
+{ 262440, 10, {6,5,4,3,3,3,3,3,3,3}},
+{ 270000, 10, {5,5,5,5,4,3,3,3,2,2}},
+{ 272160, 10, {7,5,4,4,3,3,3,3,3,2}},
+{ 279936, 10, {6,4,4,4,3,3,3,3,3,3}},
+{ 285768, 10, {7,7,4,3,3,3,3,3,3,2}},
+{ 288000, 10, {5,5,5,4,4,4,3,3,2,2}},
+{ 291600, 10, {5,5,4,4,3,3,3,3,3,3}},
+{ 300000, 10, {5,5,5,5,5,4,3,2,2,2}},
+{ 306180, 10, {7,5,4,3,3,3,3,3,3,3}},
+{ 311040, 10, {5,4,4,4,4,3,3,3,3,3}},
+{ 314928, 10, {6,6,4,3,3,3,3,3,3,3}},
+{ 317520, 10, {7,7,5,4,3,3,3,3,2,2}},
+{ 324000, 10, {5,5,5,4,4,3,3,3,3,2}},
+{ 326592, 10, {7,4,4,4,3,3,3,3,3,3}},
+{ 331776, 10, {4,4,4,4,4,4,3,3,3,3}},
+{ 340200, 10, {7,5,5,4,3,3,3,3,3,2}},
+{ 345600, 10, {5,5,4,4,4,4,3,3,3,2}},
+{ 349920, 10, {6,5,4,4,3,3,3,3,3,3}},
+{ 360000, 10, {5,5,5,5,4,4,3,3,2,2}},
+{ 364500, 10, {5,5,5,4,3,3,3,3,3,3}},
+{ 367416, 10, {7,6,4,3,3,3,3,3,3,3}},
+{ 373248, 10, {6,4,4,4,4,3,3,3,3,3}},
+{ 378000, 10, {7,5,5,5,4,3,3,3,2,2}},
+{ 381024, 10, {7,7,4,4,3,3,3,3,3,2}},
+{ 388800, 10, {5,5,4,4,4,3,3,3,3,3}},
+{ 400000, 10, {5,5,5,5,5,4,4,2,2,2}},
+{ 405000, 10, {5,5,5,5,4,3,3,3,3,2}},
+{ 408240, 10, {7,5,4,4,3,3,3,3,3,3}},
+{ 414720, 10, {5,4,4,4,4,4,3,3,3,3}},
+{ 419904, 10, {6,6,4,4,3,3,3,3,3,3}},
+{ 428652, 10, {7,7,4,3,3,3,3,3,3,3}},
+{ 432000, 10, {5,5,5,4,4,4,3,3,3,2}},
+{ 437400, 10, {6,5,5,4,3,3,3,3,3,3}},
+{ 442368, 10, {4,4,4,4,4,4,4,3,3,3}},
+{ 444528, 10, {7,7,7,4,3,3,3,3,2,2}},
+{ 450000, 10, {5,5,5,5,5,4,3,3,2,2}},
+{ 453600, 10, {7,5,5,4,4,3,3,3,3,2}},
+{ 466560, 10, {6,5,4,4,4,3,3,3,3,3}},
+{ 476280, 10, {7,7,5,4,3,3,3,3,3,2}},
+{ 480000, 10, {5,5,5,5,4,4,4,3,2,2}},
+{ 486000, 10, {5,5,5,4,4,3,3,3,3,3}},
+{ 489888, 10, {7,6,4,4,3,3,3,3,3,3}},
+{ 497664, 10, {6,4,4,4,4,4,3,3,3,3}},
+{ 500000, 10, {5,5,5,5,5,5,4,2,2,2}},
+{ 510300, 10, {7,5,5,4,3,3,3,3,3,3}},
+{ 518400, 10, {5,5,4,4,4,4,3,3,3,3}},
+{ 524880, 10, {6,6,5,4,3,3,3,3,3,3}},
+{ 529200, 10, {7,7,5,5,4,3,3,3,2,2}},
+{ 540000, 10, {5,5,5,5,4,4,3,3,3,2}},
+{ 544320, 10, {7,5,4,4,4,3,3,3,3,3}},
+{ 559872, 10, {6,6,4,4,4,3,3,3,3,3}},
+{ 567000, 10, {7,5,5,5,4,3,3,3,3,2}},
+{ 571536, 10, {7,7,4,4,3,3,3,3,3,3}},
+{ 576000, 10, {5,5,5,4,4,4,4,3,3,2}},
+{ 583200, 10, {6,5,5,4,4,3,3,3,3,3}},
+{ 600000, 10, {5,5,5,5,5,4,4,3,2,2}},
+{ 607500, 10, {5,5,5,5,4,3,3,3,3,3}},
+{ 612360, 10, {7,6,5,4,3,3,3,3,3,3}},
+{ 622080, 10, {6,5,4,4,4,4,3,3,3,3}},
+{ 629856, 10, {6,6,6,4,3,3,3,3,3,3}},
+{ 630000, 10, {7,5,5,5,5,4,3,3,2,2}},
+{ 635040, 10, {7,7,5,4,4,3,3,3,3,2}},
+{ 648000, 10, {5,5,5,4,4,4,3,3,3,3}},
+{ 653184, 10, {7,6,4,4,4,3,3,3,3,3}},
+{ 663552, 10, {6,4,4,4,4,4,4,3,3,3}},
+{ 666792, 10, {7,7,7,4,3,3,3,3,3,2}},
+{ 675000, 10, {5,5,5,5,5,4,3,3,3,2}},
+{ 680400, 10, {7,5,5,4,4,3,3,3,3,3}},
+{ 691200, 10, {5,5,4,4,4,4,4,3,3,3}},
+{ 699840, 10, {6,6,5,4,4,3,3,3,3,3}},
+{ 714420, 10, {7,7,5,4,3,3,3,3,3,3}},
+{ 720000, 10, {5,5,5,5,4,4,4,3,3,2}},
+{ 729000, 10, {6,5,5,5,4,3,3,3,3,3}},
+{ 734832, 10, {7,6,6,4,3,3,3,3,3,3}},
+{ 740880, 10, {7,7,7,5,4,3,3,3,2,2}},
+{ 746496, 10, {6,6,4,4,4,4,3,3,3,3}},
+{ 750000, 10, {5,5,5,5,5,5,4,3,2,2}},
+{ 756000, 10, {7,5,5,5,4,4,3,3,3,2}},
+{ 762048, 10, {7,7,4,4,4,3,3,3,3,3}},
+{ 777600, 10, {6,5,5,4,4,4,3,3,3,3}},
+{ 793800, 10, {7,7,5,5,4,3,3,3,3,2}},
+{ 800000, 10, {5,5,5,5,5,4,4,4,2,2}},
+{ 810000, 10, {5,5,5,5,4,4,3,3,3,3}},
+{ 816480, 10, {7,6,5,4,4,3,3,3,3,3}},
+{ 829440, 10, {6,5,4,4,4,4,4,3,3,3}},
+{ 839808, 10, {6,6,6,4,4,3,3,3,3,3}},
+{ 850500, 10, {7,5,5,5,4,3,3,3,3,3}},
+{ 857304, 10, {7,7,6,4,3,3,3,3,3,3}},
+{ 864000, 10, {5,5,5,4,4,4,4,3,3,3}},
+{ 874800, 10, {6,6,5,5,4,3,3,3,3,3}},
+{ 882000, 10, {7,7,5,5,5,4,3,3,2,2}},
+{ 884736, 10, {6,4,4,4,4,4,4,4,3,3}},
+{ 889056, 10, {7,7,7,4,4,3,3,3,3,2}},
+{ 900000, 10, {5,5,5,5,5,4,4,3,3,2}},
+{ 907200, 10, {7,5,5,4,4,4,3,3,3,3}},
+{ 933120, 10, {6,6,5,4,4,4,3,3,3,3}},
+{ 945000, 10, {7,5,5,5,5,4,3,3,3,2}},
+{ 952560, 10, {7,7,5,4,4,3,3,3,3,3}},
+{ 960000, 10, {5,5,5,5,4,4,4,4,3,2}},
+{ 972000, 10, {6,5,5,5,4,4,3,3,3,3}},
+{ 979776, 10, {7,6,6,4,4,3,3,3,3,3}},
+{ 995328, 10, {6,6,4,4,4,4,4,3,3,3}},
+{ 13824, 11, {4,3,3,3,2,2,2,2,2,2,2}},
+{ 20736, 11, {4,3,3,3,3,2,2,2,2,2,2}},
+{ 27648, 11, {4,4,3,3,3,2,2,2,2,2,2}},
+{ 31104, 11, {4,3,3,3,3,3,2,2,2,2,2}},
+{ 41472, 11, {4,4,3,3,3,3,2,2,2,2,2}},
+{ 46656, 11, {4,3,3,3,3,3,3,2,2,2,2}},
+{ 51840, 11, {5,4,3,3,3,3,2,2,2,2,2}},
+{ 55296, 11, {4,4,4,3,3,3,2,2,2,2,2}},
+{ 62208, 11, {4,4,3,3,3,3,3,2,2,2,2}},
+{ 69984, 11, {4,3,3,3,3,3,3,3,2,2,2}},
+{ 77760, 11, {5,4,3,3,3,3,3,2,2,2,2}},
+{ 82944, 11, {4,4,4,3,3,3,3,2,2,2,2}},
+{ 86400, 11, {5,5,4,3,3,3,2,2,2,2,2}},
+{ 93312, 11, {4,4,3,3,3,3,3,3,2,2,2}},
+{ 103680, 11, {5,4,4,3,3,3,3,2,2,2,2}},
+{ 104976, 11, {4,3,3,3,3,3,3,3,3,2,2}},
+{ 110592, 11, {4,4,4,4,3,3,3,2,2,2,2}},
+{ 116640, 11, {5,4,3,3,3,3,3,3,2,2,2}},
+{ 124416, 11, {4,4,4,3,3,3,3,3,2,2,2}},
+{ 129600, 11, {5,5,4,3,3,3,3,2,2,2,2}},
+{ 139968, 11, {4,4,3,3,3,3,3,3,3,2,2}},
+{ 144000, 11, {5,5,5,4,3,3,2,2,2,2,2}},
+{ 155520, 11, {5,4,4,3,3,3,3,3,2,2,2}},
+{ 157464, 11, {4,3,3,3,3,3,3,3,3,3,2}},
+{ 163296, 11, {7,4,3,3,3,3,3,3,2,2,2}},
+{ 165888, 11, {4,4,4,4,3,3,3,3,2,2,2}},
+{ 172800, 11, {5,5,4,4,3,3,3,2,2,2,2}},
+{ 174960, 11, {5,4,3,3,3,3,3,3,3,2,2}},
+{ 186624, 11, {4,4,4,3,3,3,3,3,3,2,2}},
+{ 194400, 11, {5,5,4,3,3,3,3,3,2,2,2}},
+{ 207360, 11, {5,4,4,4,3,3,3,3,2,2,2}},
+{ 209952, 11, {4,4,3,3,3,3,3,3,3,3,2}},
+{ 216000, 11, {5,5,5,4,3,3,3,2,2,2,2}},
+{ 221184, 11, {4,4,4,4,4,3,3,3,2,2,2}},
+{ 233280, 11, {5,4,4,3,3,3,3,3,3,2,2}},
+{ 236196, 11, {4,3,3,3,3,3,3,3,3,3,3}},
+{ 240000, 11, {5,5,5,5,4,3,2,2,2,2,2}},
+{ 244944, 11, {7,4,3,3,3,3,3,3,3,2,2}},
+{ 248832, 11, {4,4,4,4,3,3,3,3,3,2,2}},
+{ 259200, 11, {5,5,4,4,3,3,3,3,2,2,2}},
+{ 262440, 11, {5,4,3,3,3,3,3,3,3,3,2}},
+{ 272160, 11, {7,5,4,3,3,3,3,3,2,2,2}},
+{ 279936, 11, {4,4,4,3,3,3,3,3,3,3,2}},
+{ 288000, 11, {5,5,5,4,4,3,3,2,2,2,2}},
+{ 291600, 11, {5,5,4,3,3,3,3,3,3,2,2}},
+{ 311040, 11, {5,4,4,4,3,3,3,3,3,2,2}},
+{ 314928, 11, {4,4,3,3,3,3,3,3,3,3,3}},
+{ 324000, 11, {5,5,5,4,3,3,3,3,2,2,2}},
+{ 326592, 11, {7,4,4,3,3,3,3,3,3,2,2}},
+{ 331776, 11, {4,4,4,4,4,3,3,3,3,2,2}},
+{ 345600, 11, {5,5,4,4,4,3,3,3,2,2,2}},
+{ 349920, 11, {5,4,4,3,3,3,3,3,3,3,2}},
+{ 360000, 11, {5,5,5,5,4,3,3,2,2,2,2}},
+{ 367416, 11, {7,4,3,3,3,3,3,3,3,3,2}},
+{ 373248, 11, {4,4,4,4,3,3,3,3,3,3,2}},
+{ 381024, 11, {7,7,4,3,3,3,3,3,2,2,2}},
+{ 388800, 11, {5,5,4,4,3,3,3,3,3,2,2}},
+{ 393660, 11, {5,4,3,3,3,3,3,3,3,3,3}},
+{ 400000, 11, {5,5,5,5,5,4,2,2,2,2,2}},
+{ 408240, 11, {7,5,4,3,3,3,3,3,3,2,2}},
+{ 414720, 11, {5,4,4,4,4,3,3,3,3,2,2}},
+{ 419904, 11, {4,4,4,3,3,3,3,3,3,3,3}},
+{ 432000, 11, {5,5,5,4,4,3,3,3,2,2,2}},
+{ 437400, 11, {5,5,4,3,3,3,3,3,3,3,2}},
+{ 442368, 11, {4,4,4,4,4,4,3,3,3,2,2}},
+{ 453600, 11, {7,5,5,4,3,3,3,3,2,2,2}},
+{ 466560, 11, {5,4,4,4,3,3,3,3,3,3,2}},
+{ 472392, 11, {6,4,3,3,3,3,3,3,3,3,3}},
+{ 480000, 11, {5,5,5,5,4,4,3,2,2,2,2}},
+{ 486000, 11, {5,5,5,4,3,3,3,3,3,2,2}},
+{ 489888, 11, {7,4,4,3,3,3,3,3,3,3,2}},
+{ 497664, 11, {4,4,4,4,4,3,3,3,3,3,2}},
+{ 518400, 11, {5,5,4,4,4,3,3,3,3,2,2}},
+{ 524880, 11, {5,4,4,3,3,3,3,3,3,3,3}},
+{ 540000, 11, {5,5,5,5,4,3,3,3,2,2,2}},
+{ 544320, 11, {7,5,4,4,3,3,3,3,3,2,2}},
+{ 551124, 11, {7,4,3,3,3,3,3,3,3,3,3}},
+{ 559872, 11, {4,4,4,4,3,3,3,3,3,3,3}},
+{ 571536, 11, {7,7,4,3,3,3,3,3,3,2,2}},
+{ 576000, 11, {5,5,5,4,4,4,3,3,2,2,2}},
+{ 583200, 11, {5,5,4,4,3,3,3,3,3,3,2}},
+{ 600000, 11, {5,5,5,5,5,4,3,2,2,2,2}},
+{ 612360, 11, {7,5,4,3,3,3,3,3,3,3,2}},
+{ 622080, 11, {5,4,4,4,4,3,3,3,3,3,2}},
+{ 629856, 11, {6,4,4,3,3,3,3,3,3,3,3}},
+{ 635040, 11, {7,7,5,4,3,3,3,3,2,2,2}},
+{ 648000, 11, {5,5,5,4,4,3,3,3,3,2,2}},
+{ 653184, 11, {7,4,4,4,3,3,3,3,3,3,2}},
+{ 656100, 11, {5,5,4,3,3,3,3,3,3,3,3}},
+{ 663552, 11, {4,4,4,4,4,4,3,3,3,3,2}},
+{ 680400, 11, {7,5,5,4,3,3,3,3,3,2,2}},
+{ 691200, 11, {5,5,4,4,4,4,3,3,3,2,2}},
+{ 699840, 11, {5,4,4,4,3,3,3,3,3,3,3}},
+{ 720000, 11, {5,5,5,5,4,4,3,3,2,2,2}},
+{ 729000, 11, {5,5,5,4,3,3,3,3,3,3,2}},
+{ 734832, 11, {7,4,4,3,3,3,3,3,3,3,3}},
+{ 746496, 11, {4,4,4,4,4,3,3,3,3,3,3}},
+{ 756000, 11, {7,5,5,5,4,3,3,3,2,2,2}},
+{ 762048, 11, {7,7,4,4,3,3,3,3,3,2,2}},
+{ 777600, 11, {5,5,4,4,4,3,3,3,3,3,2}},
+{ 787320, 11, {6,5,4,3,3,3,3,3,3,3,3}},
+{ 800000, 11, {5,5,5,5,5,4,4,2,2,2,2}},
+{ 810000, 11, {5,5,5,5,4,3,3,3,3,2,2}},
+{ 816480, 11, {7,5,4,4,3,3,3,3,3,3,2}},
+{ 829440, 11, {5,4,4,4,4,4,3,3,3,3,2}},
+{ 839808, 11, {6,4,4,4,3,3,3,3,3,3,3}},
+{ 857304, 11, {7,7,4,3,3,3,3,3,3,3,2}},
+{ 864000, 11, {5,5,5,4,4,4,3,3,3,2,2}},
+{ 874800, 11, {5,5,4,4,3,3,3,3,3,3,3}},
+{ 884736, 11, {4,4,4,4,4,4,4,3,3,3,2}},
+{ 889056, 11, {7,7,7,4,3,3,3,3,2,2,2}},
+{ 900000, 11, {5,5,5,5,5,4,3,3,2,2,2}},
+{ 907200, 11, {7,5,5,4,4,3,3,3,3,2,2}},
+{ 918540, 11, {7,5,4,3,3,3,3,3,3,3,3}},
+{ 933120, 11, {5,4,4,4,4,3,3,3,3,3,3}},
+{ 944784, 11, {6,6,4,3,3,3,3,3,3,3,3}},
+{ 952560, 11, {7,7,5,4,3,3,3,3,3,2,2}},
+{ 960000, 11, {5,5,5,5,4,4,4,3,2,2,2}},
+{ 972000, 11, {5,5,5,4,4,3,3,3,3,3,2}},
+{ 979776, 11, {7,4,4,4,3,3,3,3,3,3,3}},
+{ 995328, 11, {4,4,4,4,4,4,3,3,3,3,3}},
+{ 27648, 12, {4,3,3,3,2,2,2,2,2,2,2,2}},
+{ 41472, 12, {4,3,3,3,3,2,2,2,2,2,2,2}},
+{ 55296, 12, {4,4,3,3,3,2,2,2,2,2,2,2}},
+{ 62208, 12, {4,3,3,3,3,3,2,2,2,2,2,2}},
+{ 82944, 12, {4,4,3,3,3,3,2,2,2,2,2,2}},
+{ 93312, 12, {4,3,3,3,3,3,3,2,2,2,2,2}},
+{ 103680, 12, {5,4,3,3,3,3,2,2,2,2,2,2}},
+{ 110592, 12, {4,4,4,3,3,3,2,2,2,2,2,2}},
+{ 124416, 12, {4,4,3,3,3,3,3,2,2,2,2,2}},
+{ 139968, 12, {4,3,3,3,3,3,3,3,2,2,2,2}},
+{ 155520, 12, {5,4,3,3,3,3,3,2,2,2,2,2}},
+{ 165888, 12, {4,4,4,3,3,3,3,2,2,2,2,2}},
+{ 172800, 12, {5,5,4,3,3,3,2,2,2,2,2,2}},
+{ 186624, 12, {4,4,3,3,3,3,3,3,2,2,2,2}},
+{ 207360, 12, {5,4,4,3,3,3,3,2,2,2,2,2}},
+{ 209952, 12, {4,3,3,3,3,3,3,3,3,2,2,2}},
+{ 221184, 12, {4,4,4,4,3,3,3,2,2,2,2,2}},
+{ 233280, 12, {5,4,3,3,3,3,3,3,2,2,2,2}},
+{ 248832, 12, {4,4,4,3,3,3,3,3,2,2,2,2}},
+{ 259200, 12, {5,5,4,3,3,3,3,2,2,2,2,2}},
+{ 279936, 12, {4,4,3,3,3,3,3,3,3,2,2,2}},
+{ 288000, 12, {5,5,5,4,3,3,2,2,2,2,2,2}},
+{ 311040, 12, {5,4,4,3,3,3,3,3,2,2,2,2}},
+{ 314928, 12, {4,3,3,3,3,3,3,3,3,3,2,2}},
+{ 326592, 12, {7,4,3,3,3,3,3,3,2,2,2,2}},
+{ 331776, 12, {4,4,4,4,3,3,3,3,2,2,2,2}},
+{ 345600, 12, {5,5,4,4,3,3,3,2,2,2,2,2}},
+{ 349920, 12, {5,4,3,3,3,3,3,3,3,2,2,2}},
+{ 373248, 12, {4,4,4,3,3,3,3,3,3,2,2,2}},
+{ 388800, 12, {5,5,4,3,3,3,3,3,2,2,2,2}},
+{ 414720, 12, {5,4,4,4,3,3,3,3,2,2,2,2}},
+{ 419904, 12, {4,4,3,3,3,3,3,3,3,3,2,2}},
+{ 432000, 12, {5,5,5,4,3,3,3,2,2,2,2,2}},
+{ 442368, 12, {4,4,4,4,4,3,3,3,2,2,2,2}},
+{ 466560, 12, {5,4,4,3,3,3,3,3,3,2,2,2}},
+{ 472392, 12, {4,3,3,3,3,3,3,3,3,3,3,2}},
+{ 480000, 12, {5,5,5,5,4,3,2,2,2,2,2,2}},
+{ 489888, 12, {7,4,3,3,3,3,3,3,3,2,2,2}},
+{ 497664, 12, {4,4,4,4,3,3,3,3,3,2,2,2}},
+{ 518400, 12, {5,5,4,4,3,3,3,3,2,2,2,2}},
+{ 524880, 12, {5,4,3,3,3,3,3,3,3,3,2,2}},
+{ 544320, 12, {7,5,4,3,3,3,3,3,2,2,2,2}},
+{ 559872, 12, {4,4,4,3,3,3,3,3,3,3,2,2}},
+{ 576000, 12, {5,5,5,4,4,3,3,2,2,2,2,2}},
+{ 583200, 12, {5,5,4,3,3,3,3,3,3,2,2,2}},
+{ 622080, 12, {5,4,4,4,3,3,3,3,3,2,2,2}},
+{ 629856, 12, {4,4,3,3,3,3,3,3,3,3,3,2}},
+{ 648000, 12, {5,5,5,4,3,3,3,3,2,2,2,2}},
+{ 653184, 12, {7,4,4,3,3,3,3,3,3,2,2,2}},
+{ 663552, 12, {4,4,4,4,4,3,3,3,3,2,2,2}},
+{ 691200, 12, {5,5,4,4,4,3,3,3,2,2,2,2}},
+{ 699840, 12, {5,4,4,3,3,3,3,3,3,3,2,2}},
+{ 708588, 12, {4,3,3,3,3,3,3,3,3,3,3,3}},
+{ 720000, 12, {5,5,5,5,4,3,3,2,2,2,2,2}},
+{ 734832, 12, {7,4,3,3,3,3,3,3,3,3,2,2}},
+{ 746496, 12, {4,4,4,4,3,3,3,3,3,3,2,2}},
+{ 762048, 12, {7,7,4,3,3,3,3,3,2,2,2,2}},
+{ 777600, 12, {5,5,4,4,3,3,3,3,3,2,2,2}},
+{ 787320, 12, {5,4,3,3,3,3,3,3,3,3,3,2}},
+{ 800000, 12, {5,5,5,5,5,4,2,2,2,2,2,2}},
+{ 816480, 12, {7,5,4,3,3,3,3,3,3,2,2,2}},
+{ 829440, 12, {5,4,4,4,4,3,3,3,3,2,2,2}},
+{ 839808, 12, {4,4,4,3,3,3,3,3,3,3,3,2}},
+{ 864000, 12, {5,5,5,4,4,3,3,3,2,2,2,2}},
+{ 874800, 12, {5,5,4,3,3,3,3,3,3,3,2,2}},
+{ 884736, 12, {4,4,4,4,4,4,3,3,3,2,2,2}},
+{ 907200, 12, {7,5,5,4,3,3,3,3,2,2,2,2}},
+{ 933120, 12, {5,4,4,4,3,3,3,3,3,3,2,2}},
+{ 944784, 12, {4,4,3,3,3,3,3,3,3,3,3,3}},
+{ 960000, 12, {5,5,5,5,4,4,3,2,2,2,2,2}},
+{ 972000, 12, {5,5,5,4,3,3,3,3,3,2,2,2}},
+{ 979776, 12, {7,4,4,3,3,3,3,3,3,3,2,2}},
+{ 995328, 12, {4,4,4,4,4,3,3,3,3,3,2,2}},
+{ 55296, 13, {4,3,3,3,2,2,2,2,2,2,2,2,2}},
+{ 82944, 13, {4,3,3,3,3,2,2,2,2,2,2,2,2}},
+{ 110592, 13, {4,4,3,3,3,2,2,2,2,2,2,2,2}},
+{ 124416, 13, {4,3,3,3,3,3,2,2,2,2,2,2,2}},
+{ 165888, 13, {4,4,3,3,3,3,2,2,2,2,2,2,2}},
+{ 186624, 13, {4,3,3,3,3,3,3,2,2,2,2,2,2}},
+{ 207360, 13, {5,4,3,3,3,3,2,2,2,2,2,2,2}},
+{ 221184, 13, {4,4,4,3,3,3,2,2,2,2,2,2,2}},
+{ 248832, 13, {4,4,3,3,3,3,3,2,2,2,2,2,2}},
+{ 279936, 13, {4,3,3,3,3,3,3,3,2,2,2,2,2}},
+{ 311040, 13, {5,4,3,3,3,3,3,2,2,2,2,2,2}},
+{ 331776, 13, {4,4,4,3,3,3,3,2,2,2,2,2,2}},
+{ 345600, 13, {5,5,4,3,3,3,2,2,2,2,2,2,2}},
+{ 373248, 13, {4,4,3,3,3,3,3,3,2,2,2,2,2}},
+{ 414720, 13, {5,4,4,3,3,3,3,2,2,2,2,2,2}},
+{ 419904, 13, {4,3,3,3,3,3,3,3,3,2,2,2,2}},
+{ 442368, 13, {4,4,4,4,3,3,3,2,2,2,2,2,2}},
+{ 466560, 13, {5,4,3,3,3,3,3,3,2,2,2,2,2}},
+{ 497664, 13, {4,4,4,3,3,3,3,3,2,2,2,2,2}},
+{ 518400, 13, {5,5,4,3,3,3,3,2,2,2,2,2,2}},
+{ 559872, 13, {4,4,3,3,3,3,3,3,3,2,2,2,2}},
+{ 576000, 13, {5,5,5,4,3,3,2,2,2,2,2,2,2}},
+{ 622080, 13, {5,4,4,3,3,3,3,3,2,2,2,2,2}},
+{ 629856, 13, {4,3,3,3,3,3,3,3,3,3,2,2,2}},
+{ 653184, 13, {7,4,3,3,3,3,3,3,2,2,2,2,2}},
+{ 663552, 13, {4,4,4,4,3,3,3,3,2,2,2,2,2}},
+{ 691200, 13, {5,5,4,4,3,3,3,2,2,2,2,2,2}},
+{ 699840, 13, {5,4,3,3,3,3,3,3,3,2,2,2,2}},
+{ 746496, 13, {4,4,4,3,3,3,3,3,3,2,2,2,2}},
+{ 777600, 13, {5,5,4,3,3,3,3,3,2,2,2,2,2}},
+{ 829440, 13, {5,4,4,4,3,3,3,3,2,2,2,2,2}},
+{ 839808, 13, {4,4,3,3,3,3,3,3,3,3,2,2,2}},
+{ 864000, 13, {5,5,5,4,3,3,3,2,2,2,2,2,2}},
+{ 884736, 13, {4,4,4,4,4,3,3,3,2,2,2,2,2}},
+{ 933120, 13, {5,4,4,3,3,3,3,3,3,2,2,2,2}},
+{ 944784, 13, {4,3,3,3,3,3,3,3,3,3,3,2,2}},
+{ 960000, 13, {5,5,5,5,4,3,2,2,2,2,2,2,2}},
+{ 979776, 13, {7,4,3,3,3,3,3,3,3,2,2,2,2}},
+{ 995328, 13, {4,4,4,4,3,3,3,3,3,2,2,2,2}},
+{ 110592, 14, {4,3,3,3,2,2,2,2,2,2,2,2,2,2}},
+{ 165888, 14, {4,3,3,3,3,2,2,2,2,2,2,2,2,2}},
+{ 221184, 14, {4,4,3,3,3,2,2,2,2,2,2,2,2,2}},
+{ 248832, 14, {4,3,3,3,3,3,2,2,2,2,2,2,2,2}},
+{ 331776, 14, {4,4,3,3,3,3,2,2,2,2,2,2,2,2}},
+{ 373248, 14, {4,3,3,3,3,3,3,2,2,2,2,2,2,2}},
+{ 414720, 14, {5,4,3,3,3,3,2,2,2,2,2,2,2,2}},
+{ 442368, 14, {4,4,4,3,3,3,2,2,2,2,2,2,2,2}},
+{ 497664, 14, {4,4,3,3,3,3,3,2,2,2,2,2,2,2}},
+{ 559872, 14, {4,3,3,3,3,3,3,3,2,2,2,2,2,2}},
+{ 622080, 14, {5,4,3,3,3,3,3,2,2,2,2,2,2,2}},
+{ 663552, 14, {4,4,4,3,3,3,3,2,2,2,2,2,2,2}},
+{ 691200, 14, {5,5,4,3,3,3,2,2,2,2,2,2,2,2}},
+{ 746496, 14, {4,4,3,3,3,3,3,3,2,2,2,2,2,2}},
+{ 829440, 14, {5,4,4,3,3,3,3,2,2,2,2,2,2,2}},
+{ 839808, 14, {4,3,3,3,3,3,3,3,3,2,2,2,2,2}},
+{ 884736, 14, {4,4,4,4,3,3,3,2,2,2,2,2,2,2}},
+{ 933120, 14, {5,4,3,3,3,3,3,3,2,2,2,2,2,2}},
+{ 995328, 14, {4,4,4,3,3,3,3,3,2,2,2,2,2,2}},
+{ 221184, 15, {4,3,3,3,2,2,2,2,2,2,2,2,2,2,2}},
+{ 331776, 15, {4,3,3,3,3,2,2,2,2,2,2,2,2,2,2}},
+{ 442368, 15, {4,4,3,3,3,2,2,2,2,2,2,2,2,2,2}},
+{ 497664, 15, {4,3,3,3,3,3,2,2,2,2,2,2,2,2,2}},
+{ 663552, 15, {4,4,3,3,3,3,2,2,2,2,2,2,2,2,2}},
+{ 746496, 15, {4,3,3,3,3,3,3,2,2,2,2,2,2,2,2}},
+{ 829440, 15, {5,4,3,3,3,3,2,2,2,2,2,2,2,2,2}},
+{ 884736, 15, {4,4,4,3,3,3,2,2,2,2,2,2,2,2,2}},
+{ 995328, 15, {4,4,3,3,3,3,3,2,2,2,2,2,2,2,2}},
+{ 442368, 16, {4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2}},
+{ 663552, 16, {4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2}},
+{ 884736, 16, {4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2}},
+{ 995328, 16, {4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2}},
+{ 884736, 17, {4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2}},
+{ 0, 0, {0}} /* sentinel value - must stay at the end! */
diff --git a/test/mpi/topo/dims5.c b/test/mpi/topo/dims5.c
new file mode 100644
index 0000000..9ce5a39
--- /dev/null
+++ b/test/mpi/topo/dims5.c
@@ -0,0 +1,104 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+ * Test MPI_Dims_create and the choice of decompositions. These should match
+ * the definition in MPI, which wants a "balanced" decomposition. There
+ * is some ambiguity in the definition, so this test attempts to deal with
+ * that.
+ */
+#define MAX_DIMS 20
+
+typedef struct {
+ int size, dim;
+ int orderedDecomp[MAX_DIMS];
+} DimsTestVal_t;
+
+/* MPI 3.1, page 293, line 31, output values of Dims_create are in
+ non-increasing order */
+DimsTestVal_t tests[] = {
+#include "baddims.h"
+ };
+
+/* Forward refs */
+void zeroDims(int, int []);
+int checkDims(DimsTestVal_t *, const int []);
+int compareDims(int, const int[], const int[], int);
+
+int main(int argc, char *argv[])
+{
+ int i, k, wrank, errs = 0;
+ int dims[MAX_DIMS];
+
+ MTest_Init(0, 0);
+ MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
+
+ if (wrank == 0) {
+
+ for (k=0; tests[k].size > 0; k++) {
+ zeroDims(tests[k].dim, dims);
+ MPI_Dims_create(tests[k].size, tests[k].dim, dims);
+ if (checkDims(&tests[k], dims)) {
+ errs++;
+ MTestPrintfMsg(1, "Test %d failed with mismatched output", k);
+ if (errs < 10) {
+ fprintf(stderr, "%d in %dd: ", tests[k].size, tests[k].dim);
+ for (i=0; i<tests[k].dim-1; i++)
+ fprintf(stderr, "%d x ", dims[i]);
+ fprintf(stderr, "%d != %d", dims[tests[k].dim-1],
+ tests[k].orderedDecomp[0]);
+ for (i=1; i<tests[k].dim; i++)
+ fprintf(stderr," x %d", tests[k].orderedDecomp[i]);
+ fprintf(stderr,"\n");
+ }
+ }
+ }
+ }
+
+ MTest_Finalize(errs);
+ MPI_Finalize();
+ return MTestReturnValue(errs);
+}
+
+void zeroDims(int dim, int dims[])
+{
+ int k;
+ for (k=0; k<dim; k++) dims[k] = 0;
+}
+
+int checkDims(DimsTestVal_t *test, const int dims[])
+{
+ int k, errs=0;
+
+ for (k=0; k<test->dim; k++) {
+ if (dims[k] != test->orderedDecomp[k]) {
+ errs ++;
+ }
+ }
+ return errs;
+}
+
+int compareDims(int dim, const int d1[], const int d2[], int isweak)
+{
+ int diff = 0, k;
+ if (isweak) {
+ diff = d1[0] - d1[dim-1] - (d2[0] - d2[dim-1]);
+ if (diff < 0) diff = - diff;
+ }
+ else {
+ for (k=0; k<dim; k++) {
+ int d = d1[k] - d2[k];
+ if (d < 0) d = -d;
+ diff += d;
+ }
+ }
+ return diff;
+}
+
+
diff --git a/test/mpi/topo/distgraph1.c b/test/mpi/topo/distgraph1.c
index 4c0fe49..20c6671 100644
--- a/test/mpi/topo/distgraph1.c
+++ b/test/mpi/topo/distgraph1.c
@@ -213,6 +213,10 @@ static int verify_comm(MPI_Comm comm)
if (dupcomm != MPI_COMM_NULL)
MPI_Comm_free(&dupcomm);
+ free(sources);
+ free(sweights);
+ free(destinations);
+ free(dweights);
return local_errs;
}
@@ -563,6 +567,11 @@ int main(int argc, char *argv[])
for (i = 0; i < size; i++)
free(layout[i]);
free(layout);
+ free(sources);
+ free(sweights);
+ free(destinations);
+ free(dweights);
+ free(degrees);
#endif
MTest_Finalize(errs);
diff --git a/test/mpi/topo/testlist b/test/mpi/topo/testlist
index 6804177..87a1f53 100644
--- a/test/mpi/topo/testlist
+++ b/test/mpi/topo/testlist
@@ -7,6 +7,7 @@ dims1 4
dims2 1
dims3 1
dims4 1
+dims5 1
graphmap1 4
topotest 4
topodup 4
diff --git a/test/mpi/util/Makefile.in b/test/mpi/util/Makefile.in
index 07c78e2..0740d82 100644
--- a/test/mpi/util/Makefile.in
+++ b/test/mpi/util/Makefile.in
@@ -340,6 +340,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
rmadir = @rmadir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
socklib = @socklib@
diff --git a/test/mpi/util/dtypes.c b/test/mpi/util/dtypes.c
index 7c7082a..57d295e 100644
--- a/test/mpi/util/dtypes.c
+++ b/test/mpi/util/dtypes.c
@@ -379,6 +379,7 @@ void MTestDatatype2Free(MPI_Datatype * types, void **inbufs, void **outbufs,
if (i >= nbasic_types)
MPI_Type_free(types + i);
}
+ free(types);
free(inbufs);
free(outbufs);
free(counts);
diff --git a/test/mpi/util/mtest_datatype.c b/test/mpi/util/mtest_datatype.c
index f0445eb..da3af6d 100644
--- a/test/mpi/util/mtest_datatype.c
+++ b/test/mpi/util/mtest_datatype.c
@@ -648,8 +648,8 @@ static int MTestTypeSubarrayCheckbuf(MTestDatatype * mtype)
* lb: Lower bound of the new datatype (ignored).
* oldtype: Datatype of element.
*/
-static int MTestTypeContiguousCreate(int nblock, int blocklen, int stride, int lb,
- MPI_Datatype oldtype, const char *typename_prefix,
+static int MTestTypeContiguousCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride,
+ MPI_Aint lb, MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
int merr = 0;
@@ -672,7 +672,7 @@ static int MTestTypeContiguousCreate(int nblock, int blocklen, int stride, int l
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d count)", typename_prefix, "contiguous", nblock * blocklen);
+ sprintf(type_name, "%s %s (%ld count)", typename_prefix, "contiguous", nblock * blocklen);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
MTestPrintError(merr);
@@ -693,7 +693,7 @@ static int MTestTypeContiguousCreate(int nblock, int blocklen, int stride, int l
* lb: Lower bound of the new datatype (ignored).
* oldtype: Datatype of element.
*/
-static int MTestTypeVectorCreate(int nblock, int blocklen, int stride, int lb,
+static int MTestTypeVectorCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride, MPI_Aint lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -720,8 +720,8 @@ static int MTestTypeVectorCreate(int nblock, int blocklen, int stride, int lb,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride)", typename_prefix, "vector", nblock,
- blocklen, stride);
+ sprintf(type_name, "%s %s (%ld nblock %ld blocklen %ld stride)", typename_prefix, "vector",
+ nblock, blocklen, stride);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
MTestPrintError(merr);
@@ -742,7 +742,7 @@ static int MTestTypeVectorCreate(int nblock, int blocklen, int stride, int lb,
* lb: Lower bound of the new datatype (ignored).
* oldtype: Datatype of element.
*/
-static int MTestTypeHvectorCreate(int nblock, int blocklen, int stride, int lb,
+static int MTestTypeHvectorCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride, MPI_Aint lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -769,7 +769,7 @@ static int MTestTypeHvectorCreate(int nblock, int blocklen, int stride, int lb,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride)", typename_prefix, "hvector",
+ sprintf(type_name, "%s %s (%ld nblock %ld blocklen %ld stride)", typename_prefix, "hvector",
nblock, blocklen, stride);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
@@ -794,7 +794,7 @@ static int MTestTypeHvectorCreate(int nblock, int blocklen, int stride, int lb,
* lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride, int lb,
+static int MTestTypeIndexedCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride, MPI_Aint lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -833,7 +833,7 @@ static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride, int lb,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ sprintf(type_name, "%s %s (%ld nblock %ld blocklen %ld stride %ld lb)", typename_prefix,
"index", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
@@ -857,9 +857,9 @@ static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride, int lb,
* lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride, int lb,
- MPI_Datatype oldtype, const char *typename_prefix,
- MTestDatatype * mtype)
+static inline int MTestTypeHindexedCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride,
+ MPI_Aint lb, MPI_Datatype oldtype,
+ const char *typename_prefix, MTestDatatype * mtype)
{
int merr;
char type_name[128];
@@ -895,7 +895,7 @@ static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ sprintf(type_name, "%s %s (%ld nblock %ld blocklen %ld stride %ld lb)", typename_prefix,
"hindex", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
@@ -921,9 +921,9 @@ static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride,
* lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride, int lb,
- MPI_Datatype oldtype, const char *typename_prefix,
- MTestDatatype * mtype)
+static int MTestTypeIndexedBlockCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride,
+ MPI_Aint lb, MPI_Datatype oldtype,
+ const char *typename_prefix, MTestDatatype * mtype)
{
int merr;
char type_name[128];
@@ -960,7 +960,7 @@ static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride, int
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ sprintf(type_name, "%s %s (%ld nblock %ld blocklen %ld stride %ld lb)", typename_prefix,
"index_block", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
@@ -984,9 +984,9 @@ static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride, int
* lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride, int lb,
- MPI_Datatype oldtype, const char *typename_prefix,
- MTestDatatype * mtype)
+static int MTestTypeHindexedBlockCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride,
+ MPI_Aint lb, MPI_Datatype oldtype,
+ const char *typename_prefix, MTestDatatype * mtype)
{
int merr;
char type_name[128];
@@ -1021,7 +1021,7 @@ static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride, in
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ sprintf(type_name, "%s %s (%ld nblock %ld blocklen %ld stride %ld lb)", typename_prefix,
"hindex_block", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
@@ -1046,7 +1046,7 @@ static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride, in
* lb: Lower bound of the new datatype.
* oldtype: Datatype of element. Each block has the same oldtype.
*/
-static int MTestTypeStructCreate(int nblock, int blocklen, int stride, int lb,
+static int MTestTypeStructCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride, MPI_Aint lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -1087,7 +1087,7 @@ static int MTestTypeStructCreate(int nblock, int blocklen, int stride, int lb,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ sprintf(type_name, "%s %s (%ld nblock %ld blocklen %ld stride %ld lb)", typename_prefix,
"struct", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
@@ -1112,9 +1112,9 @@ static int MTestTypeStructCreate(int nblock, int blocklen, int stride, int lb,
* order: MPI_ORDER_C
* oldtype: oldtype
*/
-static int MTestTypeSubArrayOrderCCreate(int nblock, int blocklen, int stride, int lb,
- MPI_Datatype oldtype, const char *typename_prefix,
- MTestDatatype * mtype)
+static int MTestTypeSubArrayOrderCCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride,
+ MPI_Aint lb, MPI_Datatype oldtype,
+ const char *typename_prefix, MTestDatatype * mtype)
{
int merr;
char type_name[128];
@@ -1169,9 +1169,9 @@ static int MTestTypeSubArrayOrderCCreate(int nblock, int blocklen, int stride, i
* order: MPI_ORDER_FORTRAN
* oldtype: oldtype
*/
-static int MTestTypeSubArrayOrderFortranCreate(int nblock, int blocklen, int stride, int lb,
- MPI_Datatype oldtype, const char *typename_prefix,
- MTestDatatype * mtype)
+static int MTestTypeSubArrayOrderFortranCreate(MPI_Aint nblock, MPI_Aint blocklen, MPI_Aint stride,
+ MPI_Aint lb, MPI_Datatype oldtype,
+ const char *typename_prefix, MTestDatatype * mtype)
{
int merr;
char type_name[128];
diff --git a/test/mpi/util/mtest_datatype.h b/test/mpi/util/mtest_datatype.h
index e549406..2320d51 100644
--- a/test/mpi/util/mtest_datatype.h
+++ b/test/mpi/util/mtest_datatype.h
@@ -50,7 +50,7 @@ enum MTEST_MIN_DERIVED_DT {
MTEST_MIN_DDT_MAX
};
-typedef int (*MTestDdtCreator) (int, int, int, int, MPI_Datatype, const char *, MTestDatatype *);
+typedef int (*MTestDdtCreator) (MPI_Aint, MPI_Aint, MPI_Aint, MPI_Aint, MPI_Datatype, const char *, MTestDatatype *);
extern void MTestTypeCreatorInit(MTestDdtCreator * creators);
extern void MTestTypeMinCreatorInit(MTestDdtCreator * creators);
diff --git a/test/mpi/version.m4 b/test/mpi/version.m4
index 4e1ad59..69e7adc 100644
--- a/test/mpi/version.m4
+++ b/test/mpi/version.m4
@@ -14,8 +14,8 @@
# changing this by playing with diversions, but then we would probably be
# playing with autotools-fire.
-m4_define([MPICH_VERSION_m4],[3.2])dnl
-m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
+m4_define([MPICH_VERSION_m4],[3.3a2])dnl
+m4_define([MPICH_RELEASE_DATE_m4],[Sun Nov 13 09:12:11 MST 2016])dnl
# For libtool ABI versioning rules see:
# http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
@@ -35,6 +35,6 @@ m4_define([MPICH_RELEASE_DATE_m4],[Wed Nov 11 22:06:48 CST 2015])dnl
# libmpi so version only includes functionality defined in the MPI
# standard, and does not include MPIX_ functions and C++ bindings.
-m4_define([libmpi_so_version_m4],[13:0:1])dnl
+m4_define([libmpi_so_version_m4],[0:0:0])dnl
[#] end of __file__
diff --git a/www/index.html b/www/index.html
index 4eb009b..ef6f5c3 100644
--- a/www/index.html
+++ b/www/index.html
@@ -1,10 +1,10 @@
<HTML>
<HEAD>
-<TITLE>Web pages for MPI and MPE</TITLE>
+<TITLE>Web pages for MPI</TITLE>
<!-- This file generated by createhtmlindex on -->
</HEAD>
<BODY BGCOLOR="FFFFFF">
-<H1>Web pages for MPI and MPE</H1>
+<H1>Web pages for MPI</H1>
<H2>MPI Commands</H2>
<TABLE>
<TR><TD><A HREF="www1/mpicc.html">mpicc</A></TD>
@@ -16,8 +16,12 @@
<TD></TD>
</TR>
</TABLE>
-<H2>MPI Routines</H2>
+<H2>MPI Routines and Constants</H2>
<TABLE>
+<TR><TD><A HREF="www3/Constants.html">Constants</A></TD>
+<TD><A HREF="www3/MPI_File_set_atomicity.html">MPI_File_set_atomicity</A></TD>
+<TD><A HREF="www3/MPI_Rput.html">MPI_Rput</A></TD>
+</TR>
<TR><TD><A HREF="www3/MPIX_Comm_agree.html">MPIX_Comm_agree</A></TD>
<TD><A HREF="www3/MPI_File_set_errhandler.html">MPI_File_set_errhandler</A></TD>
<TD><A HREF="www3/MPI_Rsend.html">MPI_Rsend</A></TD>
@@ -542,10 +546,6 @@
<TD><A HREF="www3/MPI_Rget_accumulate.html">MPI_Rget_accumulate</A></TD>
<TD><A HREF="www3/MPI_Wtick.html">MPI_Wtick</A></TD>
</TR>
-<TR><TD><A HREF="www3/MPI_File_set_atomicity.html">MPI_File_set_atomicity</A></TD>
-<TD><A HREF="www3/MPI_Rput.html">MPI_Rput</A></TD>
-<TD><A HREF="www3/MPI_Wtime.html">MPI_Wtime</A></TD>
-</TR>
</TABLE>
</BODY>
</HTML>
diff --git a/www/www3/Constants.html b/www/www3/Constants.html
new file mode 100644
index 0000000..cdaf0aa
--- /dev/null
+++ b/www/www3/Constants.html
@@ -0,0 +1,891 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML3.2 EN">
+<HTML>
+<HEAD>
+<META NAME="GENERATOR" CONTENT="DOCTEXT">
+<TITLE>Constants</TITLE>
+</HEAD>
+<BODY BGCOLOR="FFFFFF">
+<A NAME="Constants"><H1>Constants</H1></A>
+Meaning of MPI's defined constants
+<H2>Data types</H2>
+Note that the Fortran types should only be used in Fortran programs,
+and the C types should only be used in C programs. For example,
+it is in error to use <tt>MPI_INT</tt> for a Fortran INTEGER.
+Datatypes are of type <tt>MPI_Datatype</tt> in C, type <tt>INTEGER</tt> in Fortran,
+and <tt>Type(MPI_Datatype)</tt> in Fortran08
+<P>
+<H2>C datatypes</H2>
+MPI_CHAR - char
+<DL><DT><B>MPI_SIGNED_CHAR </B> <DD> signed char
+</DL>
+<DL><DT><B>MPI_UNSIGNED_CHAR </B> <DD> unsigned char
+</DL>
+<DL><DT><B>MPI_BYTE </B> <DD> See standard; like unsigned char
+</DL>
+<DL><DT><B>MPI_WCHAR </B> <DD> wide character (wchar_t)
+</DL>
+<DL><DT><B>MPI_SHORT </B> <DD> short
+</DL>
+<DL><DT><B>MPI_UNSIGNED_SHORT </B> <DD> unsigned short
+</DL>
+<DL><DT><B>MPI_INT </B> <DD> int
+</DL>
+<DL><DT><B>MPI_UNSIGNED </B> <DD> unsigned int
+</DL>
+<DL><DT><B>MPI_LONG </B> <DD> long
+</DL>
+<DL><DT><B>MPI_UNSIGNED_LONG </B> <DD> unsigned long
+</DL>
+<DL><DT><B>MPI_LONG_LONG_INT </B> <DD> long long
+</DL>
+<DL><DT><B>MPI_LONG_LONG </B> <DD> synonyn for <tt>MPI_LONG_LONG_INT
+</tt>
+</DL>
+<DL><DT><B>MPI_UNSIGNED_LONG_LONG </B> <DD> unsigned long long
+</DL>
+<DL><DT><B>MPI_FLOAT </B> <DD> float
+</DL>
+<DL><DT><B>MPI_DOUBLE </B> <DD> double
+</DL>
+<DL><DT><B>MPI_LONG_DOUBLE </B> <DD> long double (some systems may not implement this)
+</DL>
+<DL><DT><B>MPI_INT8_T </B> <DD> int8_t
+</DL>
+<DL><DT><B>MPI_INT16_T </B> <DD> int16_t
+</DL>
+<DL><DT><B>MPI_INT32_T </B> <DD> int32_t
+</DL>
+<DL><DT><B>MPI_INT64_T </B> <DD> int64_t
+</DL>
+<DL><DT><B>MPI_UINT8_T </B> <DD> uint8_t
+</DL>
+<DL><DT><B>MPI_UINT16_T </B> <DD> uint16_t
+</DL>
+<DL><DT><B>MPI_UINT32_T </B> <DD> uint32_t
+</DL>
+<DL><DT><B>MPI_UINT64_T </B> <DD> uint64_t
+</DL>
+<DL><DT><B>MPI_C_BOOL </B> <DD> _Bool
+</DL>
+<DL><DT><B>MPI_C_FLOAT_COMPLEX </B> <DD> float _Complex
+</DL>
+<DL><DT><B>MPI_C_COMPLEX </B> <DD> float _Complex
+</DL>
+<DL><DT><B>MPI_C_DOUBLE_COMPLEX </B> <DD> double _Complex
+</DL>
+<DL><DT><B>MPI_C_LONG_DOUBLE_COMPLEX </B> <DD> long double _Complex
+</DL>
+</DL>
+<P>
+<P>
+The following are datatypes for the MPI functions <tt>MPI_MAXLOC</tt> and
+<tt>MPI_MINLOC</tt>.
+MPI_FLOAT_INT - <tt>struct { float, int }
+</tt>
+<DL><DT><B>MPI_LONG_INT </B> <DD> <tt>struct { long, int }
+</tt>
+</DL>
+<DL><DT><B>MPI_DOUBLE_INT </B> <DD> <tt>struct { double, int }
+</tt>
+</DL>
+<DL><DT><B>MPI_SHORT_INT </B> <DD> <tt>struct { short, int }
+</tt>
+</DL>
+<DL><DT><B>MPI_2INT </B> <DD> <tt>struct { int, int }
+</tt>
+</DL>
+<DL><DT><B>MPI_LONG_DOUBLE_INT </B> <DD> <tt>struct { long double, int }</tt>; this
+is an <em>optional</em> type, and may be set to <tt>MPI_DATATYPE_NULL
+</tt>
+</DL>
+</DL>
+<P>
+<P>
+Special datatypes for C and Fortran
+MPI_PACKED - For <tt>MPI_Pack</tt> and <tt>MPI_Unpack
+</tt>
+<DL><DT><B>MPI_UB </B> <DD> For <tt>MPI_Type_struct</tt>; an upper-bound indicator. Removed in MPI 3
+</DL>
+<DL><DT><B>MPI_LB </B> <DD> For <tt>MPI_Type_struct</tt>; a lower-bound indicator. Removed in MPI 3
+</DL>
+</DL>
+<P>
+<H2>Fortran datatypes</H2>
+MPI_REAL - <tt>REAL
+</tt>
+<DL><DT><B>MPI_INTEGER </B> <DD> <tt>INTEGER
+</tt>
+</DL>
+<DL><DT><B>MPI_LOGICAL </B> <DD> <tt>LOGICAL
+</tt>
+</DL>
+<DL><DT><B>MPI_DOUBLE_PRECISION </B> <DD> <tt>DOUBLE PRECISION
+</tt>
+</DL>
+<DL><DT><B>MPI_COMPLEX </B> <DD> <tt>COMPLEX
+</tt>
+</DL>
+<DL><DT><B>MPI_DOUBLE_COMPLEX </B> <DD> <tt>complex*16</tt> (or <tt>complex*32</tt>) where supported.
+</DL>
+</DL>
+<P>
+The following datatypes are optional
+MPI_INTEGER1 - <tt>integer*1</tt> if supported
+<DL><DT><B>MPI_INTEGER2 </B> <DD> <tt>integer*2</tt> if supported
+</DL>
+<DL><DT><B>MPI_INTEGER4 </B> <DD> <tt>integer*4</tt> if supported
+</DL>
+<DL><DT><B>MPI_INTEGER8 </B> <DD> <tt>integer*8</tt> if supported
+</DL>
+<DL><DT><B>MPI_INTEGER16 </B> <DD> <tt>integer*16</tt> if supported
+</DL>
+<DL><DT><B>MPI_REAL4 </B> <DD> <tt>real*4</tt> if supported
+</DL>
+<DL><DT><B>MPI_REAL8 </B> <DD> <tt>real*8</tt> if supported
+</DL>
+</DL>
+<DL><DT><B>MPI_REAL16 </B> <DD> <tt>real*16</tt> if supported
+</DL>
+<DL><DT><B>MPI_COMPLEX8 </B> <DD> <tt>complex*8</tt> if supported
+</DL>
+<DL><DT><B>MPI_COMPLEX16 </B> <DD> <tt>complex*16</tt> if supported
+</DL>
+<DL><DT><B>MPI_COMPLEX32 </B> <DD> <tt>complex*32</tt> if supported
+</DL>
+</DL>
+<P>
+The following are datatypes for the MPI functions <tt>MPI_MAXLOC</tt> and
+<tt>MPI_MINLOC</tt>. In Fortran, these datatype always consist of
+two elements of the same Fortran type.
+MPI_2INTEGER - <tt>INTEGER,INTEGER
+</tt>
+<DL><DT><B>MPI_2REAL </B> <DD> <tt>REAL, REAL
+</tt>
+</DL>
+<DL><DT><B>MPI_2DOUBLE_PRECISION </B> <DD> <tt>DOUBLE PRECISION, DOUBLE PRECISION
+</tt>
+</DL>
+</DL>
+<P>
+MPI Datatypes for MPI Types
+MPI_AINT - Datatype for an <tt>MPI_Aint
+</tt>
+<DL><DT><B>MPI_OFFSET </B> <DD> Datatype for an <tt>MPI_Offset
+</tt>
+</DL>
+<DL><DT><B>MPI_COUNT </B> <DD> Datatype for an <tt>MPI_Count
+</tt>
+</DL>
+</DL>
+<P>
+<H2>MPI Datatype Combiner Names</H2>
+MPI_COMBINER_NAMED - a named predefined datatype
+<DL><DT><B>MPI_COMBINER_DUP </B> <DD> MPI_TYPE_DUP
+</DL>
+<DL><DT><B>MPI_COMBINER_CONTIGUOUS </B> <DD> MPI_TYPE_CONTIGUOUS
+</DL>
+<DL><DT><B>MPI_COMBINER_VECTOR </B> <DD> MPI_TYPE_VECTOR
+</DL>
+<DL><DT><B>MPI_COMBINER_HVECTOR_INTEGER </B> <DD> Removed in MPI-3
+</DL>
+<DL><DT><B>MPI_COMBINER_HVECTOR </B> <DD> MPI_TYPE_CREATE_HVECTOR
+</DL>
+<DL><DT><B>MPI_COMBINER_INDEXED </B> <DD> MPI_TYPE_INDEXED
+</DL>
+<DL><DT><B>MPI_COMBINER_HINDEXED_INTEGER </B> <DD> Removed in MPI-3
+</DL>
+<DL><DT><B>MPI_COMBINER_HINDEXED </B> <DD> MPI_TYPE_CREATE_HINDEXED
+</DL>
+<DL><DT><B>MPI_COMBINER_INDEXED_BLOCK </B> <DD> MPI_TYPE_CREATE_INDEXED_BLOCK
+</DL>
+<DL><DT><B>MPI_COMBINER_STRUCT_INTEGER </B> <DD> Removed in MPI-3
+</DL>
+<DL><DT><B>MPI_COMBINER_STRUCT </B> <DD> MPI_TYPE_CREATE_STRUCT
+</DL>
+<DL><DT><B>MPI_COMBINER_SUBARRAY </B> <DD> MPI_TYPE_CREATE_SUBARRAY
+</DL>
+<DL><DT><B>MPI_COMBINER_DARRAY </B> <DD> MPI_TYPE_CREATE_DARRAY
+</DL>
+<DL><DT><B>MPI_COMBINER_F90_REAL </B> <DD> MPI_TYPE_CREATE_F90_REAL
+</DL>
+<DL><DT><B>MPI_COMBINER_F90_COMPLEX </B> <DD> MPI_TYPE_CREATE_F90_COMPLEX
+</DL>
+<DL><DT><B>MPI_COMBINER_F90_INTEGER </B> <DD> MPI_TYPE_CREATE_F90_INTEGER
+</DL>
+<DL><DT><B>MPI_COMBINER_RESIZED </B> <DD> MPI_TYPE_CREATE_RESIZED
+</DL>
+<DL><DT><B>MPI_COMBINER_HINDEXED_BLOCK </B> <DD> MPI_TYPE_CREATE_HINDEXED_BLOCK
+</DL>
+</DL>
+<P>
+<H2>MPI Datatype Type Classes</H2>
+MPI Type classes used with routines to return Fortran types with defined
+precision and range
+MPI_TYPECLASS_REAL - <tt>REAL
+</tt>
+<DL><DT><B>MPI_TYPECLASS_INTEGER </B> <DD> <tt>INTEGER
+</tt>
+</DL>
+<DL><DT><B>MPI_TYPECLASS_COMPLEX </B> <DD> <tt>COMPLEX
+</tt>
+</DL>
+</DL>
+<P>
+<H2>MPI Darray and Subarray Values</H2>
+These values are used to create a datatype with the <tt>DARRAY</tt> and <tt>SUBARRAY
+</tt>constructors.
+MPI_ORDER_C - Row-major order (as used by C)
+<DL><DT><B>MPI_ORDER_FORTRAN </B> <DD> Column-major order (as used by Fortran)
+</DL>
+<DL><DT><B>MPI_DISTRIBUTE_BLOCK </B> <DD> Block distribution
+</DL>
+<DL><DT><B>MPI_DISTRIBUTE_CYCLIC </B> <DD> Cyclic distribution
+</DL>
+<DL><DT><B>MPI_DISTRIBUTE_NONE </B> <DD> This dimension is not distributed
+</DL>
+<DL><DT><B>MPI_DISTRIBUTE_DFLT_DARG </B> <DD> Use the default distribution
+</DL>
+</DL>
+<P>
+<H2>Communicators</H2>
+Communicators are of type <tt>MPI_Comm</tt> in C, <tt>INTEGER</tt> in Fortran, and
+<tt>Type(MPI_Comm)</tt> in Fortran08
+MPI_COMM_WORLD - Contains all of the processes
+<DL><DT><B>MPI_COMM_SELF </B> <DD> Contains only the calling process
+</DL>
+</DL>
+<P>
+<H2>Kind of communicator for 'MPI_COMM_SPLIT_TYPE'</H2>
+MPI_COMM_TYPE_SHARED - All processes that can share memory are grouped into
+the same communicator.
+<P>
+<H2>Groups</H2>
+Groups are of type <tt>MPI_Group</tt> in C, <tt>INTEGER</tt> in Fortran,
+and <tt>Type(MPI_Group)</tt> in Fortran08
+<P>
+MPI_GROUP_EMPTY - A group containing no members.
+<P>
+<H2>Results of the compare operations on groups and communicators</H2>
+MPI_IDENT - Identical
+<DL><DT><B>MPI_CONGRUENT </B> <DD> (only for <tt>MPI_COMM_COMPARE</tt>) The groups are identical
+</DL>
+<DL><DT><B>MPI_SIMILAR </B> <DD> Same members, but in a different order
+</DL>
+<DL><DT><B>MPI_UNEQUAL </B> <DD> Different
+</DL>
+</DL>
+<P>
+<P>
+<H2>Collective operations</H2>
+The collective combination operations (e.g., <tt>MPI_REDUCE</tt>, <tt>MPI_ALLREDUCE</tt>,
+<tt>MPI_REDUCE_SCATTER</tt>, and <tt>MPI_SCAN</tt>) take a combination operation.
+This operation is of type <tt>MPI_Op</tt> in C and of type <tt>INTEGER</tt> in Fortran.
+The predefined operations are
+<P>
+MPI_MAX - return the maximum
+<DL><DT><B>MPI_MIN </B> <DD> return the minumum
+</DL>
+<DL><DT><B>MPI_SUM </B> <DD> return the sum
+</DL>
+<DL><DT><B>MPI_PROD </B> <DD> return the product
+</DL>
+<DL><DT><B>MPI_LAND </B> <DD> return the logical and
+</DL>
+<DL><DT><B>MPI_BAND </B> <DD> return the bitwise and
+</DL>
+<DL><DT><B>MPI_LOR </B> <DD> return the logical or
+</DL>
+<DL><DT><B>MPI_BOR </B> <DD> return the bitwise of
+</DL>
+<DL><DT><B>MPI_LXOR </B> <DD> return the logical exclusive or
+</DL>
+<DL><DT><B>MPI_BXOR </B> <DD> return the bitwise exclusive or
+</DL>
+<DL><DT><B>MPI_MINLOC </B> <DD> return the minimum and the location (actually, the value of
+the second element of the structure where the minimum of
+the first is found)
+</DL>
+<DL><DT><B>MPI_MAXLOC </B> <DD> return the maximum and the location
+</DL>
+<DL><DT><B>MPI_REPLACE </B> <DD> replace b with a
+</DL>
+<DL><DT><B>MPI_NO_OP </B> <DD> perform no operation
+</DL>
+</DL>
+<P>
+<H2>Notes on collective operations</H2>
+<P>
+The reduction functions (<tt>MPI_Op</tt>) do not return an error value. As a result,
+if the functions detect an error, all they can do is either call <tt>MPI_Abort
+</tt>or silently skip the problem. Thus, if you change the error handler from
+<tt>MPI_ERRORS_ARE_FATAL</tt> to something else, for example, <tt>MPI_ERRORS_RETURN</tt>,
+then no error may be indicated.
+<P>
+The reason for this is the performance problems in ensuring that
+all collective routines return the same error value.
+<P>
+Note that not all datatypes are valid for these functions. For example,
+<tt>MPI_COMPLEX</tt> is not valid for <tt>MPI_MAX</tt> and <tt>MPI_MIN</tt>. In addition, the MPI
+1.1 standard did not include the C types <tt>MPI_CHAR</tt> and <tt>MPI_UNSIGNED_CHAR
+</tt>among the lists of arithmetic types for operations like <tt>MPI_SUM</tt>. However,
+since the C type <tt>char</tt> is an integer type (like <tt>short</tt>), it should have been
+included. The MPI Forum will probably include <tt>char</tt> and <tt>unsigned char
+</tt>as a clarification to MPI 1.1; until then, users are advised that MPI
+implementations may not accept <tt>MPI_CHAR</tt> and <tt>MPI_UNSIGNED_CHAR</tt> as valid
+datatypes for <tt>MPI_SUM</tt>, <tt>MPI_PROD</tt>, etc. MPICH does allow these datatypes.
+<P>
+<H2>Permanent key values</H2>
+These are the same in C and Fortran
+<P>
+MPI_TAG_UB - Largest tag value
+<DL><DT><B>MPI_HOST </B> <DD> Rank of process that is host, if any
+</DL>
+<DL><DT><B>MPI_IO </B> <DD> Rank of process that can do I/O
+</DL>
+<DL><DT><B>MPI_WTIME_IS_GLOBAL </B> <DD> Has value 1 if <tt>MPI_WTIME</tt> is globally synchronized.
+</DL>
+<DL><DT><B>MPI_UNIVERSE_SIZE </B> <DD> Number of available processes. See the standard for
+a description of limitations on this value
+</DL>
+<DL><DT><B>MPI_LASTUSEDCODE </B> <DD> Last used MPI error code (check - code or class?)
+</DL>
+<DL><DT><B>MPI_APPNUM </B> <DD> Application number, starting from 0. See the standard for
+<tt>MPI_COMM_SPAWN_MULTIPLE</tt> and <tt>mpiexec</tt> for details
+</DL>
+</DL>
+<P>
+<H2>Null objects</H2>
+MPI_COMM_NULL - Null communicator
+<DL><DT><B>MPI_OP_NULL </B> <DD> Null operation
+</DL>
+<DL><DT><B>MPI_GROUP_NULL </B> <DD> Null group
+</DL>
+<DL><DT><B>MPI_DATATYPE_NULL </B> <DD> Null datatype
+</DL>
+<DL><DT><B>MPI_REQUEST_NULL </B> <DD> Null request
+</DL>
+<DL><DT><B>MPI_ERRHANDLER_NULL </B> <DD> Null error handler
+</DL>
+<DL><DT><B>MPI_WIN_NULL </B> <DD> Null window handle
+</DL>
+<DL><DT><B>MPI_FILE_NULL </B> <DD> Null file handle
+</DL>
+<DL><DT><B>MPI_INFO_NULL </B> <DD> Null info handle
+</DL>
+<DL><DT><B>MPI_MESSAGE_NULL </B> <DD> Null message handle
+</DL>
+<DL><DT><B>MPI_ARGV_NULL </B> <DD> Empty ARGV value for spawn commands
+</DL>
+<DL><DT><B>MPI_ARGVS_NULL </B> <DD> Empty ARGV array for spawn-multiple command
+</DL>
+<DL><DT><B>MPI_T_ENUM_NULL </B> <DD> Null MPI_T enum
+</DL>
+<DL><DT><B>MPI_T_CVAR_HANDLE_NULL </B> <DD> Null MPI_T control variable handle
+</DL>
+<DL><DT><B>MPI_T_PVAR_HANDLE_NULL </B> <DD> Null MPI_T performance variable handle
+</DL>
+<DL><DT><B>MPI_T_PVAR_SESSION_NULL</B> <DD> Null MPI_T performance variable session handle
+</DL>
+</DL>
+<P>
+<H2>Predefined Constants</H2>
+MPI_MAX_PROCESSOR_NAME - Maximum length of name returned by
+<tt>MPI_GET_PROCESSOR_NAME
+</tt>
+<DL><DT><B>MPI_MAX_ERROR_STRING </B> <DD> Maximum length of string return by
+<tt>MPI_ERROR_STRING
+</tt>
+</DL>
+<DL><DT><B>MPI_MAX_LIBRARY_VERSION_STRING </B> <DD> Maximum length of string returned by
+<tt>MPI_GET_LIBRARY_VERSION_STRING</tt>???
+</DL>
+<DL><DT><B>MPI_MAX_PORT_NAME </B> <DD> Maximum length of a port
+</DL>
+<DL><DT><B>MPI_MAX_OBJECT_NAME </B> <DD> Maximum length of an object (?)
+</DL>
+<DL><DT><B>MPI_MAX_INFO_KEY </B> <DD> Maximum length of an info key
+</DL>
+<DL><DT><B>MPI_MAX_INFO_VAL </B> <DD> Maximum length of an info value
+</DL>
+<DL><DT><B>MPI_UNDEFINED </B> <DD> Used by many routines to indicated
+undefined or unknown integer value
+</DL>
+<DL><DT><B>MPI_UNDEFINED_RANK </B> <DD> Unknown rank
+</DL>
+<DL><DT><B>MPI_KEYVAL_INVALID </B> <DD> Special keyval that may be used to detect
+uninitialized keyvals.
+</DL>
+<DL><DT><B>MPI_BSEND_OVERHEAD </B> <DD> Add this to the size of a <tt>MPI_BSEND
+</tt>buffer for each outstanding message
+</DL>
+<DL><DT><B>MPI_PROC_NULL </B> <DD> This rank may be used to send or receive from no-one.
+</DL>
+<DL><DT><B>MPI_ANY_SOURCE </B> <DD> In a receive, accept a message from anyone.
+</DL>
+<DL><DT><B>MPI_ANY_TAG </B> <DD> In a receive, accept a message with any tag value.
+</DL>
+<DL><DT><B>MPI_BOTTOM </B> <DD> May be used to indicate the bottom of the address space
+</DL>
+<DL><DT><B>MPI_IN_PLACE </B> <DD> Special location for buffer in some
+collective communication routines
+</DL>
+<DL><DT><B>MPI_VERSION </B> <DD> Numeric value of MPI version (e.g., 3)
+</DL>
+<DL><DT><B>MPI_SUBVERSION </B> <DD> Numeric value of MPI subversion (e.g., 1)
+</DL>
+</DL>
+<P>
+<H2>Topology types</H2>
+MPI_CART - Cartesian grid
+<DL><DT><B>MPI_GRAPH </B> <DD> General graph
+</DL>
+<DL><DT><B>MPI_DIST_GRAPH </B> <DD> General distributed graph
+</DL>
+</DL>
+<P>
+<H2>Special values for distributed graph</H2>
+MPI_UNWEIGHTED - Indicates that the edges are unweighted
+<DL><DT><B>MPI_WEIGHTS_EMPTY </B> <DD> Special address that indicates no array of weights
+information
+</DL>
+</DL>
+<P>
+<H2>File Modes</H2>
+MPI_MODE_RDONLY - Read only
+<DL><DT><B>MPI_MODE_RDWR </B> <DD> Read and write
+</DL>
+<DL><DT><B>MPI_MODE_WRONLY </B> <DD> Write only
+</DL>
+<DL><DT><B>MPI_MODE_CREATE </B> <DD> Create the file if it does not exist
+</DL>
+<DL><DT><B>MPI_MODE_EXCL </B> <DD> It is an error if creating a file that already
+exists
+</DL>
+<DL><DT><B>MPI_MODE_DELETE_ON_CLOSE </B> <DD> Delete the file on close
+</DL>
+<DL><DT><B>MPI_MODE_UNIQUE_OPEN </B> <DD> The file will not be concurrently opened elsewhere
+</DL>
+<DL><DT><B>MPI_MODE_APPEND </B> <DD> The initial position of all file pointers is at
+the end of the file
+</DL>
+<DL><DT><B>MPI_MODE_SEQUENTIAL </B> <DD> File will only be accessed sequentially
+</DL>
+</DL>
+<P>
+<H2>File Displacement</H2>
+MPI_DISPLACEMENT_CURRENT - Use with files opened with mode
+<tt>MPI_MODE_SEQUENTIAL</tt> in calls to <tt>MPI_FILE_SET_VIEW
+</tt>
+<P>
+<H2>File Positioning</H2>
+MPI_SEEK_SET - Set the pointer to <tt>offset
+</tt>
+<DL><DT><B>MPI_SEEK_CUR </B> <DD> Set the pointer to the current position plus <tt>offset
+</tt>
+</DL>
+<DL><DT><B>MPI_SEEK_END </B> <DD> Set the pointer to the end of the file plus <tt>offset
+</tt>
+</DL>
+</DL>
+<P>
+<H2>Window attributes</H2>
+MPI_WIN_BASE - window base address.
+<DL><DT><B>MPI_WIN_SIZE </B> <DD> window size, in bytes
+</DL>
+<DL><DT><B>MPI_WIN_DISP_UNIT </B> <DD> displacement unit associated with the window
+</DL>
+<DL><DT><B>MPI_WIN_CREATE_FLAVOR </B> <DD> how the window was created
+</DL>
+<DL><DT><B>MPI_WIN_MODEL </B> <DD> memory model for window
+</DL>
+</DL>
+<P>
+<H2>Window flavors</H2>
+MPI_WIN_FLAVOR_CREATE - Window was created with MPI_WIN_CREATE.
+<DL><DT><B>MPI_WIN_FLAVOR_ALLOCATE </B> <DD> Window was created with MPI_WIN_ALLOCATE.
+</DL>
+<DL><DT><B>MPI_WIN_FLAVOR_DYNAMIC </B> <DD> Window was created with MPI_WIN_CREATE_DYNAMIC.
+</DL>
+<DL><DT><B>MPI_WIN_FLAVOR_SHARED </B> <DD> Window was created with MPI_WIN_ALLOCATE_SHARED.
+</DL>
+</DL>
+<P>
+<H2>Window Memory Model</H2>
+MPI_WIN_SEPARATE - Separate public and private copies of window memory
+<DL><DT><B>MPI_WIN_UNIFIED </B> <DD> The publich and private copies are identical (by which
+we mean that updates are eventually observed without additional RMA operations)
+</DL>
+</DL>
+<P>
+<H2>Window Lock Types</H2>
+MPI_LOCK_EXCLUSIVE - Only one process at a time will execute accesses
+within the lock
+<DL><DT><B>MPI_LOCK_SHARED </B> <DD> Not exclusive; multiple processes may execute accesses
+within the lock
+</DL>
+</DL>
+<P>
+<H2>Window Assertions</H2>
+See section 11.5 in MPI 3.1 for a detailed description of each of these
+assertion values.
+MPI_MODE_NOCHECK - The matching calls to MPI_WIN_POST or MPI_WIN_START
+have already completed, or no process holds or will attempt to acquire, a
+conflicting lock.
+<DL><DT><B>MPI_MODE_NOSTORE </B> <DD> The local window has not been updated by stores
+since the last synchronization
+</DL>
+<DL><DT><B>MPI_MODE_NOPUT </B> <DD> The local window will not be updated by put or
+accumulate until the next synchronization
+</DL>
+<DL><DT><B>MPI_MODE_NOPRECEDE </B> <DD> The fence does not complete any locally issued RMA
+calls
+</DL>
+<DL><DT><B>MPI_MODE_NOSUCCEED </B> <DD> The fence does not start any locally issued RMA calls
+</DL>
+</DL>
+<P>
+<H2>Predefined Info Object</H2>
+MPI_INFO_ENV - Contains the execution environment
+<P>
+<H2>MPI Status</H2>
+The <tt>MPI_Status</tt> datatype is a structure in C. The three elements for use
+by programmers are
+MPI_SOURCE - Who sent the message
+<DL><DT><B>MPI_TAG </B> <DD> What tag the message was sent with
+</DL>
+<DL><DT><B>MPI_ERROR </B> <DD> Any error return (only when the error returned by the routine
+has error class <tt>MPI_ERR_IN_STATUS</tt>)
+</DL>
+</DL>
+<P>
+MPI_STATUS_IGNORE - Ignore a single <tt>MPI_Status</tt> argument
+<DL><DT><B>MPI_STATUSES_IGNORE </B> <DD> Ignore an array of <tt>MPI_Status
+</tt>
+</DL>
+</DL>
+<P>
+<H2>Special value for error codes array</H2>
+MPI_ERRCODES_IGNORE - Ignore an array of error codes
+<P>
+<H2>MPI_T Constants</H2>
+MPI_T_VERBOSITY_USER_BASIC - Basic information of interest to users
+<DL><DT><B>MPI_T_VERBOSITY_USER_DETAIL </B> <DD> Detailed information of interest to users
+</DL>
+<DL><DT><B>MPI_T_VERBOSITY_USER_ALL </B> <DD> All remaining information of interest to users
+</DL>
+<DL><DT><B>MPI_T_VERBOSITY_TUNER_BASIC </B> <DD> Basic information required for tuning
+</DL>
+<DL><DT><B>MPI_T_VERBOSITY_TUNER_DETAIL </B> <DD> Detailed information required for tuning
+</DL>
+<DL><DT><B>MPI_T_VERBOSITY_TUNER_ALL </B> <DD> All remaining information required for tuning
+</DL>
+<DL><DT><B>MPI_T_VERBOSITY_MPIDEV_BASIC </B> <DD> Basic information for MPI implementors
+</DL>
+<P>
+<P>
+<DL><DT><B>MPI_T_VERBOSITY_MPIDEV_DETAIL </B> <DD> Detailed information for MPI implementors
+</DL>
+<DL><DT><B>MPI_T_VERBOSITY_MPIDEV_ALL </B> <DD> All remaining information for MPI implementors
+</DL>
+<DL><DT><B>MPI_T_BIND_NO_OBJECT </B> <DD> Applies globally to entire MPI process
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_COMM </B> <DD> MPI communicators
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_DATATYPE </B> <DD> MPI datatypes
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_ERRHANDLER </B> <DD> MPI error handlers
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_FILE </B> <DD> MPI file handles
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_GROUP </B> <DD> MPI groups
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_OP </B> <DD> MPI reduction operators
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_REQUEST </B> <DD> MPI requests
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_WIN </B> <DD> MPI windows for one-sided communication
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_MESSAGE </B> <DD> MPI message object
+</DL>
+<DL><DT><B>MPI_T_BIND_MPI_INFO </B> <DD> MPI info object
+</DL>
+<DL><DT><B>MPI_T_SCOPE_CONSTANT </B> <DD> read-only, value is constant
+</DL>
+<DL><DT><B>MPI_T_SCOPE_READONLY </B> <DD> read-only, cannot be written, but can
+change
+</DL>
+<DL><DT><B>MPI_T_SCOPE_LOCAL </B> <DD> may be writeable, writing is a local
+operation
+</DL>
+<DL><DT><B>MPI_T_SCOPE_GROUP </B> <DD> may be writeable, must be done to a
+group of processes, all processes in a group must be set to consistent values
+</DL>
+<DL><DT><B>MPI_T_SCOPE_GROUP_EQ </B> <DD> may be writeable, must be done to a
+group of processes, all processes in a group must be set to the same value
+</DL>
+<DL><DT><B>MPI_T_SCOPE_ALL </B> <DD> may be writeable, must be done to all
+processes, all connected processes must be set to consistent values
+</DL>
+<DL><DT><B>MPI_T_SCOPE_ALL_EQ </B> <DD> may be writeable, must be done to all
+processes, all connected processes must be set to the same value
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_STATE </B> <DD> set of discrete states (MPI_INT)
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_LEVEL </B> <DD> utilization level of a resource
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_SIZE </B> <DD> size of a resource
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_PERCENTAGE </B> <DD> percentage utilization of a resource
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_HIGHWATERMARK </B> <DD> high watermark of a resource
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_LOWWATERMARK </B> <DD> low watermark of a resource
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_COUNTER </B> <DD> number of occurances of an event
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_AGGREGATE </B> <DD> aggregate value over an event (e.g.,
+sum of all memory allocations)
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_TIMER </B> <DD> aggretate time spent executing event
+</DL>
+<DL><DT><B>MPI_T_PVAR_CLASS_GENERIC </B> <DD> used for any other time of performance
+variable
+</DL>
+</DL>
+<P>
+<H2>Thread levels</H2>
+MPI_THREAD_SINGLE - Only one thread executes
+<DL><DT><B>MPI_THREAD_FUNNELED </B> <DD> Only the main thread makes MPI calls
+</DL>
+<DL><DT><B>MPI_THREAD_SERIALIZED </B> <DD> Only one thread at a time makes MPI calls
+</DL>
+<DL><DT><B>MPI_THREAD_MULTIPLE </B> <DD> Multiple threads may make MPI calls
+</DL>
+</DL>
+<P>
+<H2>Special MPI types and functions</H2>
+<P>
+MPI_Aint - C type that holds any valid address.
+<DL><DT><B>MPI_Count </B> <DD> C type that holds any valid count.
+</DL>
+<DL><DT><B>MPI_Offset </B> <DD> C type that holds any valid file offset.
+</DL>
+<DL><DT><B>MPI_Handler_function </B> <DD> C function for handling errors (see
+<tt>MPI_Errhandler_create</tt>) .
+</DL>
+<DL><DT><B>MPI_User_function </B> <DD> C function to combine values (see collective operations
+and <tt>MPI_Op_create</tt>)
+</DL>
+<DL><DT><B>MPI_Copy_function </B> <DD> Function to copy attributes (see <tt>MPI_Keyval_create</tt>)
+</DL>
+<DL><DT><B>MPI_Delete_function </B> <DD> Function to delete attributes (see <tt>MPI_Keyval_create</tt>)
+</DL>
+<DL><DT><B>MPI_ERRORS_ARE_FATAL </B> <DD> Error handler that forces exit on error
+</DL>
+<DL><DT><B>MPI_ERRORS_RETURN </B> <DD> Error handler that returns error codes (as value of
+MPI routine in C and through last argument in Fortran)
+</DL>
+</DL>
+<P>
+<H2>MPI Attribute Default Functions</H2>
+MPI_COMM_NULL_COPY_FN - Predefined attribute copy function for communicators
+<DL><DT><B>MPI_COMM_NULL_DELETE_FN </B> <DD> Predefined attribute delete function for communicators
+</DL>
+<DL><DT><B>MPI_COMM_DUP_FN </B> <DD> Predefined attribute duplicate function for communicators
+</DL>
+<DL><DT><B>MPI_WIN_NULL_COPY_FN </B> <DD> Predefined attribute copy function for windows
+</DL>
+<DL><DT><B>MPI_WIN_NULL_DELETE_FN </B> <DD> Predefined attribute delete function for windows
+</DL>
+<DL><DT><B>MPI_WIN_DUP_FN </B> <DD> Predefined attribute duplicate function for windows
+</DL>
+<DL><DT><B>MPI_TYPE_NULL_COPY_FN </B> <DD> Predefined attribute copy function for datatypes
+</DL>
+<DL><DT><B>MPI_TYPE_NULL_DELETE_FN </B> <DD> Predefined attribute delete function for datatypes
+</DL>
+<DL><DT><B>MPI_TYPE_DUP_FN </B> <DD> Predefined attribute duplicate function for datatypes
+</DL>
+</DL>
+<P>
+<H2>MPI-1 Attribute Default Functions</H2>
+MPI_NULL_COPY_FN - Predefined copy function
+<DL><DT><B>MPI_NULL_DELETE_FN </B> <DD> Predefined delete function
+</DL>
+<DL><DT><B>MPI_DUP_FN </B> <DD> Predefined duplication function
+</DL>
+</DL>
+<P>
+<H2>MPI Error classes</H2>
+MPI_SUCCESS - Successful return code
+<DL><DT><B>MPI_ERR_BUFFER </B> <DD> Invalid buffer pointer
+</DL>
+<DL><DT><B>MPI_ERR_COUNT </B> <DD> Invalid count argument
+</DL>
+<DL><DT><B>MPI_ERR_TYPE </B> <DD> Invalid datatype argument
+</DL>
+<DL><DT><B>MPI_ERR_TAG </B> <DD> Invalid tag argument
+</DL>
+<DL><DT><B>MPI_ERR_COMM </B> <DD> Invalid communicator
+</DL>
+<DL><DT><B>MPI_ERR_RANK </B> <DD> Invalid rank
+</DL>
+<DL><DT><B>MPI_ERR_ROOT </B> <DD> Invalid root
+</DL>
+<DL><DT><B>MPI_ERR_GROUP </B> <DD> Null group passed to function
+</DL>
+<DL><DT><B>MPI_ERR_OP </B> <DD> Invalid operation
+</DL>
+<DL><DT><B>MPI_ERR_TOPOLOGY </B> <DD> Invalid topology
+</DL>
+<DL><DT><B>MPI_ERR_DIMS </B> <DD> Illegal dimension argument
+</DL>
+<DL><DT><B>MPI_ERR_ARG </B> <DD> Invalid argument
+</DL>
+<DL><DT><B>MPI_ERR_UNKNOWN </B> <DD> Unknown error
+</DL>
+<DL><DT><B>MPI_ERR_TRUNCATE </B> <DD> Message truncated on receive
+</DL>
+<DL><DT><B>MPI_ERR_OTHER </B> <DD> Other error; use Error_string
+</DL>
+<DL><DT><B>MPI_ERR_INTERN </B> <DD> Internal error code
+</DL>
+<DL><DT><B>MPI_ERR_IN_STATUS </B> <DD> Look in status for error value
+</DL>
+<DL><DT><B>MPI_ERR_PENDING </B> <DD> Pending request
+</DL>
+<DL><DT><B>MPI_ERR_REQUEST </B> <DD> Invalid mpi_request handle
+</DL>
+<DL><DT><B>MPI_ERR_ACCESS </B> <DD> Permission denied
+</DL>
+<DL><DT><B>MPI_ERR_AMODE </B> <DD> Error related to the amode passed to
+<tt>MPI_FILE_OPEN
+</tt>
+</DL>
+<DL><DT><B>MPI_ERR_BAD_FILE </B> <DD> Invalid file name (e.g., path name too long)
+</DL>
+<DL><DT><B>MPI_ERR_CONVERSION </B> <DD> An error occurred in a user supplied data
+conversion function
+</DL>
+<DL><DT><B>MPI_ERR_DUP_DATAREP </B> <DD> Conversion functions could not be registered
+because a data representation identifier that was already defined was passed
+to <tt>MPI_REGISTER_DATAREP
+</tt>
+</DL>
+<DL><DT><B>MPI_ERR_FILE_EXISTS </B> <DD> File exists
+</DL>
+<DL><DT><B>MPI_ERR_FILE_IN_USE </B> <DD> File operation could not be completed, as
+the file is currently open by some process
+</DL>
+<DL><DT><B>MPI_ERR_FILE </B> <DD> Invalid file handle
+</DL>
+<DL><DT><B>MPI_ERR_IO </B> <DD> Other I/O error
+</DL>
+<DL><DT><B>MPI_ERR_NO_SPACE </B> <DD> Not enough space
+</DL>
+<DL><DT><B>MPI_ERR_NO_SUCH_FILE </B> <DD> File does not exist
+</DL>
+<DL><DT><B>MPI_ERR_READ_ONLY </B> <DD> Read-only file or file system
+</DL>
+<DL><DT><B>MPI_ERR_UNSUPPORTED_DATAREP </B> <DD> Unsupported datarep passed to
+<tt>MPI_FILE_SET_VIEW
+</tt>
+</DL>
+<DL><DT><B>MPI_ERR_INFO </B> <DD> Invalid info argument
+</DL>
+<DL><DT><B>MPI_ERR_INFO_KEY </B> <DD> Key longer than MPI_MAX_INFO_KEY
+</DL>
+<DL><DT><B>MPI_ERR_INFO_VALUE </B> <DD> Value longer than MPI_MAX_INFO_VAL
+</DL>
+<DL><DT><B>MPI_ERR_INFO_NOKEY </B> <DD> Invalid key passed to MPI_INFO_DELETE
+</DL>
+<DL><DT><B>MPI_ERR_NAME </B> <DD> Invalid service name passed to MPI_LOOKUP_NAME
+</DL>
+<DL><DT><B>MPI_ERR_NO_MEM </B> <DD> Alloc_mem could not allocate memory
+</DL>
+<DL><DT><B>MPI_ERR_NOT_SAME </B> <DD> Collective argument not identical on all
+processes, or collective routines called in a different order by different
+processes
+</DL>
+<DL><DT><B>MPI_ERR_PORT </B> <DD> Invalid port name passed to MPI_COMM_CONNECT
+</DL>
+<DL><DT><B>MPI_ERR_QUOTA </B> <DD> Quota exceeded
+</DL>
+<DL><DT><B>MPI_ERR_SERVICE </B> <DD> Invalid service name passed to MPI_UNPUBLISH_NAME
+</DL>
+<DL><DT><B>MPI_ERR_SPAWN </B> <DD> Error in spawning processes
+</DL>
+<DL><DT><B>MPI_ERR_UNSUPPORTED_OPERATION </B> <DD> Unsupported operation, such as seeking on
+a file which supports sequential access only
+</DL>
+<DL><DT><B>MPI_ERR_WIN </B> <DD> Invalid win argument
+</DL>
+<DL><DT><B>MPI_ERR_BASE </B> <DD> Invalid base passed to MPI_FREE_MEM
+</DL>
+<DL><DT><B>MPI_ERR_LOCKTYPE </B> <DD> Invalid locktype argument
+</DL>
+<DL><DT><B>MPI_ERR_KEYVAL </B> <DD> Erroneous attribute key
+</DL>
+<DL><DT><B>MPI_ERR_RMA_CONFLICT </B> <DD> Conflicting accesses to window
+</DL>
+<DL><DT><B>MPI_ERR_RMA_SYNC </B> <DD> Wrong synchronization of RMA calls
+</DL>
+<DL><DT><B>MPI_ERR_SIZE </B> <DD> Invalid size argument
+</DL>
+<DL><DT><B>MPI_ERR_DISP </B> <DD> Invalid disp argument
+</DL>
+<DL><DT><B>MPI_ERR_ASSERT </B> <DD> Invalid assert argument
+</DL>
+<DL><DT><B>MPI_ERR_RMA_RANGE </B> <DD> Target memory is not part of the window (in
+the case of a window created with MPI_WIN_CREATE_DYNAMIC, target memory is
+not attached)
+</DL>
+<DL><DT><B>MPI_ERR_RMA_ATTACH </B> <DD> Memory cannot be attached (e.g., because of
+resource exhaustion)
+</DL>
+<DL><DT><B>MPI_ERR_RMA_SHARED </B> <DD> Memory cannot be shared (e.g., some process in
+the group of the specified communicator cannot expose shared memory)
+</DL>
+<DL><DT><B>MPI_ERR_RMA_FLAVOR </B> <DD> Passed window has the wrong flavor for the
+called function
+</DL>
+<DL><DT><B>MPI_ERR_LASTCODE </B> <DD> Last error code -- always at end
+</DL>
+</DL>
+<P>
+<H2>Error codes for MPI_T</H2>
+<P>
+MPI_T_ERR_MEMORY - Out of memory
+<DL><DT><B>MPI_T_ERR_NOT_INITIALIZED </B> <DD> Interface not initialized
+</DL>
+<DL><DT><B>MPI_T_ERR_CANNOT_INIT </B> <DD> Interface not in the state to be initialized
+</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_INDEX </B> <DD> The index is invalid or has been deleted
+</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_ITEM </B> <DD> Item index queried is out of range
+</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_HANDLE </B> <DD> The handle is invalid
+</DL>
+<DL><DT><B>MPI_T_ERR_OUT_OF_HANDLES </B> <DD> No more handles available
+</DL>
+<DL><DT><B>MPI_T_ERR_OUT_OF_SESSIONS </B> <DD> No more sessions available
+</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_SESSION </B> <DD> Session argument is not valid
+</DL>
+<DL><DT><B>MPI_T_ERR_CVAR_SET_NOT_NOW </B> <DD> Cvar can't be set at this moment
+</DL>
+<DL><DT><B>MPI_T_ERR_CVAR_SET_NEVER </B> <DD> Cvar can't be set until end of execution
+</DL>
+<DL><DT><B>MPI_T_ERR_PVAR_NO_STARTSTOP </B> <DD> Pvar can't be started or stopped
+</DL>
+<DL><DT><B>MPI_T_ERR_PVAR_NO_WRITE </B> <DD> Pvar can't be written or reset
+</DL>
+<DL><DT><B>MPI_T_ERR_PVAR_NO_ATOMIC </B> <DD> Pvar can't be R/W atomically
+</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_NAME </B> <DD> Name doesn't match
+</DL>
+<DL><DT><B>MPI_T_ERR_INVALID </B> <DD> Invalid use of the interface or bad parameter
+values(s)
+</DL>
+</DL>
+<P>
+</BODY></HTML>
diff --git a/www/www3/MPIX_Comm_agree.html b/www/www3/MPIX_Comm_agree.html
index 79022b3..ad413da 100644
--- a/www/www3/MPIX_Comm_agree.html
+++ b/www/www3/MPIX_Comm_agree.html
@@ -12,14 +12,20 @@ Performs agreement operation on comm
int MPIX_Comm_agree(MPI_Comm comm, int *flag)
</PRE>
<H2>Input Parameters</H2>
-<DL>
-<DT><B>comm </B><DD>communicator (handle)
-
+<DL><DT><B>comm </B> <DD> communicator (handle)
+</DL>
<P>
<H2>Output Parameters</H2>
-<DT><B>newcomm </B><DD>new communicator (handle)
-
+<DL><DT><B>newcomm </B> <DD> new communicator (handle)
+</DL>
<P>
+<H2>Thread and Interrupt Safety</H2>
+<P>
+This routine is thread-safe. This means that this routine may be
+safely used by multiple threads without the need for any user-provided
+thread locks. However, the routine is not interrupt safe. Typically,
+this is due to the use of memory allocation routines such as <tt>malloc
+</tt>or other non-MPICH runtime routines that are themselves not interrupt-safe.
<P>
<H2>Notes for Fortran</H2>
All MPI routines in Fortran (except for <tt>MPI_WTIME</tt> and <tt>MPI_WTICK</tt>) have
@@ -46,10 +52,10 @@ Note that MPI does <em>not</em> guarentee that an MPI program can continue past
an error; however, MPI implementations will attempt to continue whenever
possible.
<P>
-<DT><B>MPI_SUCCESS </B><DD>No error; MPI routine completed successfully.
-
-<DT><B>MPI_ERR_COMM </B><DD>Invalid communicator. A common error is to use a null
+<DL><DT><B>MPI_SUCCESS </B> <DD> No error; MPI routine completed successfully.
+</DL>
+<DL><DT><B>MPI_ERR_COMM </B> <DD> Invalid communicator. A common error is to use a null
communicator in a call (not even allowed in <tt>MPI_Comm_rank</tt>).
-
+</DL>
<P>
</BODY></HTML>
diff --git a/www/www3/MPIX_Comm_revoke.html b/www/www3/MPIX_Comm_revoke.html
index bd78d37..bc568e7 100644
--- a/www/www3/MPIX_Comm_revoke.html
+++ b/www/www3/MPIX_Comm_revoke.html
@@ -12,9 +12,8 @@ Prevent a communicator from being used in the future
int MPIX_Comm_revoke(MPI_Comm comm)
</PRE>
<H2>Input Parameters</H2>
-<DL>
-<DT><B>comm </B><DD>communicator to revoke
-
+<DL><DT><B>comm </B> <DD> communicator to revoke
+</DL>
<P>
<H2>Notes</H2>
Asynchronously notifies all MPI processes associated with the communicator <tt>comm</tt>.
@@ -46,4 +45,6 @@ Note that MPI does <em>not</em> guarentee that an MPI program can continue past
an error; however, MPI implementations will attempt to continue whenever
possible.
<P>
+<DL><DT><B>MPI_SUCCESS </B> <DD> No error; MPI routine completed successfully.
+</DL>
</BODY></HTML>
diff --git a/www/www3/MPIX_Comm_shrink.html b/www/www3/MPIX_Comm_shrink.html
index 23fd6f0..68a63fa 100644
--- a/www/www3/MPIX_Comm_shrink.html
+++ b/www/www3/MPIX_Comm_shrink.html
@@ -12,14 +12,20 @@ Creates a new communitor from an existing communicator while excluding failed pr
int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm)
</PRE>
<H2>Input Parameters</H2>
-<DL>
-<DT><B>comm </B><DD>communicator (handle)
-
+<DL><DT><B>comm </B> <DD> communicator (handle)
+</DL>
<P>
<H2>Output Parameters</H2>
-<DT><B>newcomm </B><DD>new communicator (handle)
-
+<DL><DT><B>newcomm </B> <DD> new communicator (handle)
+</DL>
<P>
+<H2>Thread and Interrupt Safety</H2>
+<P>
+This routine is thread-safe. This means that this routine may be
+safely used by multiple threads without the need for any user-provided
+thread locks. However, the routine is not interrupt safe. Typically,
+this is due to the use of memory allocation routines such as <tt>malloc
+</tt>or other non-MPICH runtime routines that are themselves not interrupt-safe.
<P>
<H2>Notes for Fortran</H2>
All MPI routines in Fortran (except for <tt>MPI_WTIME</tt> and <tt>MPI_WTICK</tt>) have
@@ -46,10 +52,10 @@ Note that MPI does <em>not</em> guarentee that an MPI program can continue past
an error; however, MPI implementations will attempt to continue whenever
possible.
<P>
-<DT><B>MPI_SUCCESS </B><DD>No error; MPI routine completed successfully.
-
-<DT><B>MPI_ERR_COMM </B><DD>Invalid communicator. A common error is to use a null
+<DL><DT><B>MPI_SUCCESS </B> <DD> No error; MPI routine completed successfully.
+</DL>
+<DL><DT><B>MPI_ERR_COMM </B> <DD> Invalid communicator. A common error is to use a null
communicator in a call (not even allowed in <tt>MPI_Comm_rank</tt>).
-
+</DL>
<P>
</BODY></HTML>
diff --git a/www/www3/MPI_Address.html b/www/www3/MPI_Address.html
index fe10991..60dd1b6 100644
--- a/www/www3/MPI_Address.html
+++ b/www/www3/MPI_Address.html
@@ -9,7 +9,7 @@
Gets the address of a location in memory
<H2>Synopsis</H2>
<PRE>
-int MPI_Address(const void *location, MPI_Aint *address)
+int MPI_Address(void *location, MPI_Aint *address)
</PRE>
<H2>Input Parameters</H2>
<DL><DT><B>location </B> <DD> location in caller memory (choice)
diff --git a/www/www3/MPI_Aint_add.html b/www/www3/MPI_Aint_add.html
index ef6b17d..ea33fed 100644
--- a/www/www3/MPI_Aint_add.html
+++ b/www/www3/MPI_Aint_add.html
@@ -28,8 +28,11 @@ to MPI_GET_ADDRESS and disp represents a signed integer displacement. The result
address is valid only at the process that generated base, and it must correspond
to a location in the same object referenced by base. The addition is performed in
a manner that results in the correct MPI_Aint representation of the output address,
-<H2>as if the process that originally produced base had called</H2>
-MPI_Get_address((char *) base + disp, &result)
+as if the process that originally produced base had called:
+<PRE>
+ MPI_Get_address((char *) base + disp, &result)
+</PRE>
+
<P>
<H0>See Also</H0>
MPI_Aint_diff
diff --git a/www/www3/MPI_Aint_diff.html b/www/www3/MPI_Aint_diff.html
index a0f0752..f2bbabb 100644
--- a/www/www3/MPI_Aint_diff.html
+++ b/www/www3/MPI_Aint_diff.html
@@ -29,7 +29,10 @@ process that generated addr1 and addr2, and addr1 and addr2 must correspond to
locations in the same object in the same process. The difference is calculated
in a manner that results the signed difference from addr1 to addr2, as if the
process that originally produced the addresses had called
-(char *) addr1 - (char *) addr2
+<PRE>
+ (char *) addr1 - (char *) addr2
+</PRE>
+
on the addresses initially passed to MPI_GET_ADDRESS.
<P>
<H0>See Also</H0>
diff --git a/www/www3/MPI_Dims_create.html b/www/www3/MPI_Dims_create.html
index d94259a..f0d82e2 100644
--- a/www/www3/MPI_Dims_create.html
+++ b/www/www3/MPI_Dims_create.html
@@ -13,13 +13,13 @@ int MPI_Dims_create(int nnodes, int ndims, int dims[])
</PRE>
<H2>Input Parameters</H2>
<DL>
-<DT><B>nnodes </B><DD>number of nodes in a grid (integer)
+<DT><B>nnodes </B><DD>number of nodes in a grid (integer)
-<DT><B>ndims </B><DD>number of cartesian dimensions (integer)
+<DT><B>ndims </B><DD>number of cartesian dimensions (integer)
</DL>
<P>
<H2>Input/Output Parameters</H2>
-<DL><DT><B>dims </B> <DD> integer array of size <tt>ndims</tt> specifying the number of nodes in each
+<DL><DT><B>dims </B> <DD> integer array of size <tt>ndims</tt> specifying the number of nodes in each
dimension. A value of 0 indicates that <tt>MPI_Dims_create</tt> should fill in a
suitable value.
</DL>
diff --git a/www/www3/MPI_Status_set_elements_x.html b/www/www3/MPI_Status_set_elements_x.html
index eb3628b..4a2bcef 100644
--- a/www/www3/MPI_Status_set_elements_x.html
+++ b/www/www3/MPI_Status_set_elements_x.html
@@ -6,7 +6,7 @@
</HEAD>
<BODY BGCOLOR="FFFFFF">
<A NAME="MPI_Status_set_elements_x"><H1>MPI_Status_set_elements_x</H1></A>
-XXX description here
+Set the number of elements in a status
<H2>Synopsis</H2>
<PRE>
int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count)
diff --git a/www/www3/MPI_T_category_get_index.html b/www/www3/MPI_T_category_get_index.html
index 8ec8eb1..dbc49b1 100644
--- a/www/www3/MPI_T_category_get_index.html
+++ b/www/www3/MPI_T_category_get_index.html
@@ -44,6 +44,8 @@ possible.
<P>
<DL><DT><B>MPI_SUCCESS </B> <DD> No error; MPI routine completed successfully.
</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_NAME </B> <DD> The variable or category name is invalid
+</DL>
<DL><DT><B>MPI_T_ERR_NOT_INITIALIZED </B> <DD> The MPI tool information interface is not initialized.
</DL>
</BODY></HTML>
diff --git a/www/www3/MPI_T_cvar_get_index.html b/www/www3/MPI_T_cvar_get_index.html
index 06de694..ea0f351 100644
--- a/www/www3/MPI_T_cvar_get_index.html
+++ b/www/www3/MPI_T_cvar_get_index.html
@@ -44,6 +44,8 @@ possible.
<P>
<DL><DT><B>MPI_SUCCESS </B> <DD> No error; MPI routine completed successfully.
</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_NAME </B> <DD> The variable or category name is invalid
+</DL>
<DL><DT><B>MPI_T_ERR_NOT_INITIALIZED </B> <DD> The MPI tool information interface is not initialized.
</DL>
</BODY></HTML>
diff --git a/www/www3/MPI_T_pvar_get_index.html b/www/www3/MPI_T_pvar_get_index.html
index 313b01d..7064f5a 100644
--- a/www/www3/MPI_T_pvar_get_index.html
+++ b/www/www3/MPI_T_pvar_get_index.html
@@ -46,6 +46,8 @@ possible.
<P>
<DL><DT><B>MPI_SUCCESS </B> <DD> No error; MPI routine completed successfully.
</DL>
+<DL><DT><B>MPI_T_ERR_INVALID_NAME </B> <DD> The variable or category name is invalid
+</DL>
<DL><DT><B>MPI_T_ERR_NOT_INITIALIZED </B> <DD> The MPI tool information interface is not initialized.
</DL>
</BODY></HTML>
diff --git a/www/www3/MPI_Type_get_extent_x.html b/www/www3/MPI_Type_get_extent_x.html
index 12746d9..811795c 100644
--- a/www/www3/MPI_Type_get_extent_x.html
+++ b/www/www3/MPI_Type_get_extent_x.html
@@ -6,7 +6,7 @@
</HEAD>
<BODY BGCOLOR="FFFFFF">
<A NAME="MPI_Type_get_extent_x"><H1>MPI_Type_get_extent_x</H1></A>
-XXX description here
+Get the lower bound and extent as MPI_Count values for a Datatype
<H2>Synopsis</H2>
<PRE>
int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent)
diff --git a/www/www3/MPI_Type_get_true_extent_x.html b/www/www3/MPI_Type_get_true_extent_x.html
index 6bfc95b..48d5d33 100644
--- a/www/www3/MPI_Type_get_true_extent_x.html
+++ b/www/www3/MPI_Type_get_true_extent_x.html
@@ -6,7 +6,7 @@
</HEAD>
<BODY BGCOLOR="FFFFFF">
<A NAME="MPI_Type_get_true_extent_x"><H1>MPI_Type_get_true_extent_x</H1></A>
-XXX description here
+Get the true lower bound and extent as MPI_Count values for a datatype
<H2>Synopsis</H2>
<PRE>
int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *true_lb, MPI_Count *true_extent)
diff --git a/www/www3/MPI_Type_hindexed.html b/www/www3/MPI_Type_hindexed.html
index 4b241b4..0a5b4a7 100644
--- a/www/www3/MPI_Type_hindexed.html
+++ b/www/www3/MPI_Type_hindexed.html
@@ -10,8 +10,8 @@ Creates an indexed datatype with offsets in bytes
<H2>Synopsis</H2>
<PRE>
int MPI_Type_hindexed(int count,
- const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
+ int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
MPI_Datatype oldtype,
MPI_Datatype *newtype)
</PRE>
diff --git a/www/www3/MPI_Type_struct.html b/www/www3/MPI_Type_struct.html
index 79ce0e4..670b434 100644
--- a/www/www3/MPI_Type_struct.html
+++ b/www/www3/MPI_Type_struct.html
@@ -10,9 +10,9 @@ Creates a struct datatype
<H2>Synopsis</H2>
<PRE>
int MPI_Type_struct(int count,
- const int *array_of_blocklengths,
- const MPI_Aint *array_of_displacements,
- const MPI_Datatype *array_of_types,
+ int *array_of_blocklengths,
+ MPI_Aint *array_of_displacements,
+ MPI_Datatype *array_of_types,
MPI_Datatype *newtype)
</PRE>
<H2>Input Parameters</H2>
diff --git a/www/www3/index.htm b/www/www3/index.htm
index 3014edc..59d997c 100644
--- a/www/www3/index.htm
+++ b/www/www3/index.htm
@@ -1,11 +1,15 @@
<HTML>
<HEAD>
-<TITLE>Web pages for MPI Routines</TITLE>
+<TITLE>Web pages for MPI Routines and Constants</TITLE>
<!-- This file generated by createhtmlindex on -->
</HEAD>
<BODY BGCOLOR="FFFFFF">
-<H1>Web pages for MPI Routines</H1>
+<H1>Web pages for MPI Routines and Constants</H1>
<TABLE>
+<TR><TD><A HREF="Constants.html">Constants</A></TD>
+<TD><A HREF="MPI_File_set_atomicity.html">MPI_File_set_atomicity</A></TD>
+<TD><A HREF="MPI_Rput.html">MPI_Rput</A></TD>
+</TR>
<TR><TD><A HREF="MPIX_Comm_agree.html">MPIX_Comm_agree</A></TD>
<TD><A HREF="MPI_File_set_errhandler.html">MPI_File_set_errhandler</A></TD>
<TD><A HREF="MPI_Rsend.html">MPI_Rsend</A></TD>
@@ -530,10 +534,6 @@
<TD><A HREF="MPI_Rget_accumulate.html">MPI_Rget_accumulate</A></TD>
<TD><A HREF="MPI_Wtick.html">MPI_Wtick</A></TD>
</TR>
-<TR><TD><A HREF="MPI_File_set_atomicity.html">MPI_File_set_atomicity</A></TD>
-<TD><A HREF="MPI_Rput.html">MPI_Rput</A></TD>
-<TD><A HREF="MPI_Wtime.html">MPI_Wtime</A></TD>
-</TR>
</TABLE>
</BODY>
</HTML>
diff --git a/www/www3/mpi.cit b/www/www3/mpi.cit
index 36abc66..6a104bf 100644
--- a/www/www3/mpi.cit
+++ b/www/www3/mpi.cit
@@ -339,6 +339,7 @@ man:+MPI_T_pvar_write++MPI_T_pvar_write++++man+--your-url-here--/MPI_T_pvar_writ
man:+MPI_T_category_get_index++MPI_T_category_get_index++++man+--your-url-here--/MPI_T_category_get_index.html#MPI_T_category_get_index
man:+MPI_T_cvar_get_index++MPI_T_cvar_get_index++++man+--your-url-here--/MPI_T_cvar_get_index.html#MPI_T_cvar_get_index
man:+MPI_T_pvar_get_index++MPI_T_pvar_get_index++++man+--your-url-here--/MPI_T_pvar_get_index.html#MPI_T_pvar_get_index
+man:+Constants++Constants++++man+--your-url-here--/Constants.html#Constants
man:+MPI_File_close++MPI_File_close++++man+--your-url-here--/MPI_File_close.html#MPI_File_close
man:+MPI_File_delete++MPI_File_delete++++man+--your-url-here--/MPI_File_delete.html#MPI_File_delete
man:+MPI_File_c2f++MPI_File_c2f++++man+--your-url-here--/MPI_File_c2f.html#MPI_File_c2f
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mpich.git
More information about the debian-science-commits
mailing list